pax_global_header00006660000000000000000000000064132436174770014530gustar00rootroot0000000000000052 comment=8ab2918638f14a7da78a6f9cefa5dec846aa1450 vibe.d-0.8.2/000077500000000000000000000000001324361747700127065ustar00rootroot00000000000000vibe.d-0.8.2/.codecov.yml000066400000000000000000000004261324361747700151330ustar00rootroot00000000000000# Documentation: https://github.com/codecov/support/wiki/codecov.yml coverage: precision: 3 round: down range: 80...100 status: # Learn more at https://codecov.io/docs#yaml_default_commit_status project: true patch: true changes: false comment: false vibe.d-0.8.2/.editorconfig000066400000000000000000000002441324361747700153630ustar00rootroot00000000000000root = true [*.{c,h,d,di,dd,json}] end_of_line = lf insert_final_newline = true indent_style = tab indent_size = 4 trim_trailing_whitespace = true charset = utf-8 vibe.d-0.8.2/.gitignore000066400000000000000000000027721324361747700147060ustar00rootroot00000000000000*.[oa] *.so *.lib *.dll .*.sw* *.lst docs.json /docs/index.html /docs/sitemap.xml /docs/vibe /docs/images /docs/prettify /docs/scripts /docs/styles __dummy.html .dub dub.selections.json # Auto-downloaded 3rd-party lib/subprojects/diet/ lib/subprojects/libevent/ lib/subprojects/openssl/ # Mono-D files *.userprefs # Unittest binaries vibe-d tests/*/tests __test__*__ vibe-d-test* vibe-d-*-test* # Examples examples/app_skeleton/__test__library__ examples/bench-http-request/bench-http-request examples/bench-http-server/bench-http-server examples/daytime/daytime-example examples/diet/diet-example examples/download/download-example examples/echoserver/echoserver-example examples/form_interface/form-interface-example examples/http_info/http-info-example examples/http_request/http-request-example examples/http_reverse_proxy/http-reverse-proxy-example examples/http_server/http-server-example examples/http_static_server/http-static-server-example examples/https_server/https-server-example examples/json/json-example examples/message/message-example examples/mongodb/mongodb-example examples/app_skeleton/app-skeleton examples/redis-pubsub/redis-pubsub-example examples/redis/redis-example examples/rest/rest-example examples/sendmail/sendmail-example examples/serialization/serialization-example examples/task_control/task-control-example examples/tcp_separate/tcp-separate-example examples/udp/udp-example examples/uploader/uploader-example examples/web/web-framework-example examples/websocket/websocket-example *.exe vibe.d-0.8.2/.travis.yml000066400000000000000000000031771324361747700150270ustar00rootroot00000000000000language: d sudo: false dist: trusty services: - mongodb - redis-server addons: apt: packages: - pkg-config - zlib1g-dev - libevent-dev - libssl-dev d: # order: latest DMD, oldest DMD, LDC/GDC, remaining DMD versions # this way the overall test time gets cut down (GDC/LDC are a lot # slower tham DMD, so they should be started early), while still # catching most DMD version related build failures early - dmd-2.077.0 - dmd-2.071.2 - ldc-1.5.0 - ldc-1.4.0 - ldc-1.3.0 - ldc-1.2.0 - ldc-1.1.1 - dmd-2.076.1 - dmd-2.075.1 - dmd-2.074.1 - dmd-2.073.2 - dmd-2.072.2 - dmd-beta env: - VIBED_DRIVER=libevent BUILD_EXAMPLE=1 RUN_TEST=1 - VIBED_DRIVER=vibe-core BUILD_EXAMPLE=1 RUN_TEST=1 - VIBED_DRIVER=libasync BUILD_EXAMPLE=0 RUN_TEST=0 matrix: include: - d: dmd # https://issues.dlang.org/show_bug.cgi?id=13742 env: DFLAGS="-cov -version=VibedSetCoverageMerge" DUB_BUILD_MODE="singleFile" exclude: - d: ldc-1.2.0 env: VIBED_DRIVER=libasync BUILD_EXAMPLE=0 RUN_TEST=0 - d: ldc-1.1.1 env: VIBED_DRIVER=libasync BUILD_EXAMPLE=0 RUN_TEST=0 allow_failures: - d: dmd-beta - d: ldc-1.3.0 env: VIBED_DRIVER=libasync BUILD_EXAMPLE=0 RUN_TEST=0 before_install: - pyenv global system 3.5 - pip3 install 'meson>=0.42,!=0.43' install: - mkdir .ntmp - curl -L https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip -o .ntmp/ninja-linux.zip - unzip .ntmp/ninja-linux.zip -d .ntmp before_script: - export PATH=$PATH:$PWD/.ntmp script: ./travis-ci.sh after_success: - bash <(curl -s https://codecov.io/bash) vibe.d-0.8.2/CHANGELOG.md000066400000000000000000005573051324361747700145360ustar00rootroot00000000000000Changelog ========= v0.8.2 - 2017-12-11 ------------------- The major changes in this release are HTTP forward proxy support, handling incoming HTTP requests on custom transports and a MongoDB based session store. On top of that, there are many smaller improvements in the HTTP server, web/REST generator, JSON/BSON support and the TLS sub system. ### Features and improvements ### - Web/REST framework - Added support for `@noRoute` in the REST interface generator - [issue #1934][issue1934] - Added support for `@requiresAuth` on REST interfaces in addition to classes - [pull #1939][issue1939] - Added global `request`/`response` properties for the web interface generator (by Benjamin Schaaf) - [issue #1937][issue1937], [pull #1938][issue1938] - The language list for `@translationContext` can now be specified as a compile-time constant array in addition to a tuple (by Jan Jurzitza aka WebFreak) - [pull #1879][issue1879] - HTTP sub system - Added HTTP forward proxy support based on the existing reverse proxy code (by Matt Remmel) - [pull #1893][issue1893] - Deprecated non-`nothrow` WebSocket handler callbacks - [issue #1420][issue1420], [pull #1890][issue1890] - Added `handleHTTPConnection` to serve HTTP requests on a custom transport - [pull #1929][issue1929] - Added `HTTPServerRequest.requestPath` as an `InetPath` property replacing `.path` to avoid encoding related issues - [pull #1940][issue1940] - Added `HTTPClientRequest.remoteAddress` - Added `HTTPListener.bindAddresses` property, this allows querying the actual port when passing `0` to `HTTPServerSettings.bindPort` - [issue #1818][issue1818], [pull #1930][issue1930] - Added `SysTime`/`Duration` based overloads for `Cookie.expire`/`.maxAge` - [issue #1701][issue1701], [pull #1889][issue1889] - MongoDB driver - Added `MongoSessionStore` for MongoDB based HTTP session storage - The MongoDB driver now forwards server error messages (by Martin Nowak) - [pull #1951][issue1951] - Extended the JSON parser to handle forward ranges in addition to random access ranges (by John Colvin) - [pull #1906][issue1906] - Added `std.uuid.UUID` conversion support for `Bson` (by Denis Feklushkin) - [pull #1404][issue1404] - Added "openssl-1.1" and "openssl-0.9" configurations to the vibe-d:tls package to enable switching the OpenSSL target version without having to define version constants - [pull #1965][issue1965] - Added `NativePath` based overloads of `TLSContext.usePrivateKeyFile` and `.useCertificateChainFile` - Added `setCommandLineArgs` - can be used together with a `VibeDisableCommandLineParsing` version to customize command line parsing - [pull #1916][issue1916] ### Bug fixes ### - Fixed getting the X509 certificate for printing certificate errors on OpenSSL 1.1 (by Martin Nowak) - [pull #1921][issue1921] - Fixed handling of `out` parameters in the REST interface (were erroneously read from the request) - [issue #1933][issue1933], [pull #1935][issue1935] - Fixed an "orphan format specifier" error in the web interface handling code - Fixed the JSON parser to work at compile-time (by Benjamin Schaaf) - [pull #1960][issue1960] - Fixed an error in the Botan TLS provider if used to serve HTTPS - [issue #1918][issue1918], [pull #1964][issue1964] - Fixed a web interface generator compile error in case of an empty language list in the `@translationContext` - [issue #1955][issue1955], [pull #1956][issue1956] - Fixed a bogus error during HTTP request finalization - [issue #1966][issue1966] - Fixed the command line argument parser getting tripped up by druntime arguments ("--DRT-...") (by Martin Nowak) - [pull #1944][issue1944] - Fixed a possible race condition when stopping a `RedisListener` (by Etienne Cimon) - [pull #1201][issue1201], [pull #1971][issue1971] - Fixed support for `TCPListenOptions.reusePort` on macOS and FreeBSD - [pull #1972][issue1972] - Fixed handling of CONNECT requests in the HTTP proxy server - [pull #1973][issue1973] [issue1701]: https://github.com/vibe-d/vibe.d/issues/1701 [issue1889]: https://github.com/vibe-d/vibe.d/issues/1889 [issue1420]: https://github.com/vibe-d/vibe.d/issues/1420 [issue1890]: https://github.com/vibe-d/vibe.d/issues/1890 [issue1916]: https://github.com/vibe-d/vibe.d/issues/1916 [issue1906]: https://github.com/vibe-d/vibe.d/issues/1906 [issue1929]: https://github.com/vibe-d/vibe.d/issues/1929 [issue1818]: https://github.com/vibe-d/vibe.d/issues/1818 [issue1930]: https://github.com/vibe-d/vibe.d/issues/1930 [issue1934]: https://github.com/vibe-d/vibe.d/issues/1934 [issue1939]: https://github.com/vibe-d/vibe.d/issues/1939 [issue1937]: https://github.com/vibe-d/vibe.d/issues/1937 [issue1938]: https://github.com/vibe-d/vibe.d/issues/1938 [issue1940]: https://github.com/vibe-d/vibe.d/issues/1940 [issue1951]: https://github.com/vibe-d/vibe.d/issues/1951 [issue1404]: https://github.com/vibe-d/vibe.d/issues/1404 [issue1965]: https://github.com/vibe-d/vibe.d/issues/1965 [issue1879]: https://github.com/vibe-d/vibe.d/issues/1879 [issue1893]: https://github.com/vibe-d/vibe.d/issues/1893 [issue1921]: https://github.com/vibe-d/vibe.d/issues/1921 [issue1933]: https://github.com/vibe-d/vibe.d/issues/1933 [issue1935]: https://github.com/vibe-d/vibe.d/issues/1935 [issue1960]: https://github.com/vibe-d/vibe.d/issues/1960 [issue1918]: https://github.com/vibe-d/vibe.d/issues/1918 [issue1964]: https://github.com/vibe-d/vibe.d/issues/1964 [issue1955]: https://github.com/vibe-d/vibe.d/issues/1955 [issue1956]: https://github.com/vibe-d/vibe.d/issues/1956 [issue1966]: https://github.com/vibe-d/vibe.d/issues/1966 [issue1944]: https://github.com/vibe-d/vibe.d/issues/1944 [issue1201]: https://github.com/vibe-d/vibe.d/issues/1201 [issue1971]: https://github.com/vibe-d/vibe.d/issues/1971 [issue1972]: https://github.com/vibe-d/vibe.d/issues/1972 [issue1973]: https://github.com/vibe-d/vibe.d/issues/1973 v0.8.1 - 2017-08-30 ------------------- Apart from removing the old `vibe-d:diet` package in favor of `diet-ng`, this release most notably contains a number of performance improvements in the HTTP server, as well as improvements and fixes in the WebSocket code. Furthermore, initial OpenSSL 1.1.x support has been added and a few `@safe` related issues introduced in 0.8.0 have been fixed. ### Features and improvements ### - Compiles on DMD 2.071.2 up to DMD 2.076.0-rc1 - Removed vibe-d:diet sub package (superseded by diet-ng) - [pull #1835][issue1835] - Web framework - Added convenience functions `status` and `header` to `vibe.web.web` (by Sebastian Wilzbach) - [pull #1696][issue1696] - Added `vibe.web.web.determineLanguageByHeader` and improved the default language determination (by Jan Jurzitza aka WebFreak) - [pull #1850][issue1850] - Added `vibe.web.web.language` property to determine the detected language (by Jan Jurzitza aka WebFreak) - [pull #1860][issue1860] - Marked the global API functions in `vibe.web.web` as `@safe` - [pull #1886][issue1886] - The REST interface generator avoids blindly instantiating serialization code for *all* parameters - No stack trace is shown on the generated error page anymore in case of bad (query/form) parameter formatting - HTTP sub system - The HTTP server now accepts a UTF-8 BOM for JSON requests (by Sebanstian Wilzbach) - [pull #1799][issue1799] - Most parsing features activated by `HTTPServerOption` (for `HTTPServerRequest`) are now evaluated lazily instead - the corresponding options are now deprecated (by Sebastian Wilzbach): - `.json` / `HTTPServerOption.parseJsonBody` - [pull #1677][issue1677] - `.cookies` / `HTTPServerOption.parseCookies` - [pull #1801][issue1801] - `.form` / `HTTPServerOption.parseFormBody` - [pull #1801][issue1801] - `.files` / `HTTPServerOption.parseMultiPartBody` - [pull #1801][issue1801] - `.query` / `HTTPServerOption.parseQueryString` - [pull #1821][issue1821] - `.queryString`, `.username` and `.password` are now always filled, regardless of `HTTPServerOption.parseURL` - [pull #1821][issue1821] - `HTTPServerRequest.peer` is now computed lazily - Deprecated `HTTPServerOption.distribute` because of its non-thread-safe design - The `HTTPServerSettings` constructor now accepts a convenient string to set the bind address - [pull #1810][issue1810] - `listenHTTP` accepts the same convenience string as `HTTPServerSettings` (by Sebastian Wilzbach) - [pull #1816][issue1816] - Added `HTTPReverseProxySettings.destination` (`URL`) to made UDS destinations work (by Georgi Dimitrov) - [pull #1813][issue1813] - Increased the network output chunk sizes from 256 to 1024 in the HTTP client/server - WebSocket messages now produce only a single network packet of possible (header and payload sent at once) - [issue #1791][issue1791], [pull #1792][issue1792] - WebSocket API improvements (by Mathias Lang aka Geod24) - [pull #1534][issue1534], [pull #1836][issue1836] - Renamed `HTTPServerRequest.requestURL` to `requestURI` - Added `HTTPClientRequest.peerCertificate` property - Serialization - Added deserialization support for unnamed `Tuple!(...)` (by Dentcho Bankov) - [pull #1693][issue1693] - Added serialization support for named `Tuple!(...)` (by Dentcho Bankov) - [pull #1662][issue1662] - Added UDP multicast properties (implemented for libevent, by Sebastian Koppe) - [pull #1806][issue1806] - Markdown embedded URLs are now filtered by a whitelist to avoid URL based XSS exploits - [issue #1845][issue1845], [pull #1846][issue1846] - `lowerPrivileges` is now marked `@safe` (by Sebastian Wilzbach) - [pull #1807][issue1807] - Improved `urlDecode` to return a slice of its input if possible - [pull #1828][issue1828] - Added `DictionaryList.toString` and deprecated `alias byKeyValue this` - [issue #1873][issue1873] - Added support for defining a compatibility version `VibeUseOpenSSL11` to build against OpenSSL 1.1.0 instead of 1.0.x (by Robert Schadek aka burner) - [issue #1651][issue1651], [issue #1748][issue1748], [issue #1758][issue1758], [pull #1759][issue1759] - Added a Meson project file analogous to the 0.7.x branch (by Matthias Klumpp aka ximion) - [pull #1894][issue1894] - The functions in `vibe.stream.operations` now compile with non-`@safe` streams and ranges - [pull #1902][issue1902] - Added `TLSCertificateInformation._x509` as an temporary means to access the raw certificate (`X509*` for OpenSSL) ### Bug fixes ### - Fixed "SSL_read was unsuccessful with ret 0" errors in the OpenSSL TLS implementation (by machindertech) - [issue #1124][issue1124], [pull #1395][issue1395] - Fixed the JSON generator to output valid JSON for `Json.undefined` values (by by Tomáš Chaloupka) - [pull #1737][issue1737], [issue #1735][issue1735] - Fixed using HTTP together with USDS sockets in the HTTP client (by Johannes Pfau aka jpf91) - [pull #1747][issue1747] - Fixed handling of `Nullable!T` in the web interface generator - invalid values are treated as an error now instead of as a null value - Fixed a compilation error in the Botan based TLS implementation - Fixed an assertion in the HTTP client by using a custom allocator instead of the buggy `RegionAllocator` - Fixed sending of WebSocket messages with a payload length of 65536 - Fixed an intermittent failure at shutdown when using libasync - [pull #1837][issue1837] - Fixed MongoDB SASL authentication when used within `shared static this` (by Sebastian Wilzbach) - [pull #1841][issue1841] - Fixed authentication with default settings on modern MongoDB versions by defaulting to SCRAM-SHA-1 (by Sebastian Wilzbach) - [issue #1785][issue1785], [issue #1843][issue1843] - Fixed the WebSocket ping logic - [issue #1471][issue1471], [pull #1848][issue1848] - Fixed a cause of "dwarfeh(224) fatal error" during fatal app exit and possible an infinite loop by using `abort()` instead of `exit()` - Fixed `URLRouter.match` to accept delegate literals (by Sebastian Wilzbach) - [pull #1866][issue1866] - Fixed a possible range error in the libasync driver - Fixed serialization of recursive data types to JSON (by Jan Jurzitza aka WebFreak) - [issue #1855][issue1855] - Fixed `MongoCursor.limit` and made the API `@safe` (by Jan Jurzitza aka WebFreak) - [issue #967][issue967], [pull #1871][issue1871] - Fixed determining the host name in `SyslogLogger` (by Jan Jurzitza aka WebFreak) - [pull #1874][issue1874] [issue967]: https://github.com/vibe-d/vibe.d/issues/967 [issue1124]: https://github.com/vibe-d/vibe.d/issues/1124 [issue1395]: https://github.com/vibe-d/vibe.d/issues/1395 [issue1471]: https://github.com/vibe-d/vibe.d/issues/1471 [issue1534]: https://github.com/vibe-d/vibe.d/issues/1534 [issue1651]: https://github.com/vibe-d/vibe.d/issues/1651 [issue1662]: https://github.com/vibe-d/vibe.d/issues/1662 [issue1674]: https://github.com/vibe-d/vibe.d/issues/1674 [issue1677]: https://github.com/vibe-d/vibe.d/issues/1677 [issue1691]: https://github.com/vibe-d/vibe.d/issues/1691 [issue1692]: https://github.com/vibe-d/vibe.d/issues/1692 [issue1693]: https://github.com/vibe-d/vibe.d/issues/1693 [issue1696]: https://github.com/vibe-d/vibe.d/issues/1696 [issue1735]: https://github.com/vibe-d/vibe.d/issues/1735 [issue1737]: https://github.com/vibe-d/vibe.d/issues/1737 [issue1747]: https://github.com/vibe-d/vibe.d/issues/1747 [issue1748]: https://github.com/vibe-d/vibe.d/issues/1748 [issue1758]: https://github.com/vibe-d/vibe.d/issues/1758 [issue1759]: https://github.com/vibe-d/vibe.d/issues/1759 [issue1785]: https://github.com/vibe-d/vibe.d/issues/1785 [issue1791]: https://github.com/vibe-d/vibe.d/issues/1791 [issue1792]: https://github.com/vibe-d/vibe.d/issues/1792 [issue1799]: https://github.com/vibe-d/vibe.d/issues/1799 [issue1801]: https://github.com/vibe-d/vibe.d/issues/1801 [issue1806]: https://github.com/vibe-d/vibe.d/issues/1806 [issue1807]: https://github.com/vibe-d/vibe.d/issues/1807 [issue1810]: https://github.com/vibe-d/vibe.d/issues/1810 [issue1813]: https://github.com/vibe-d/vibe.d/issues/1813 [issue1816]: https://github.com/vibe-d/vibe.d/issues/1816 [issue1821]: https://github.com/vibe-d/vibe.d/issues/1821 [issue1828]: https://github.com/vibe-d/vibe.d/issues/1828 [issue1835]: https://github.com/vibe-d/vibe.d/issues/1835 [issue1836]: https://github.com/vibe-d/vibe.d/issues/1836 [issue1837]: https://github.com/vibe-d/vibe.d/issues/1837 [issue1841]: https://github.com/vibe-d/vibe.d/issues/1841 [issue1843]: https://github.com/vibe-d/vibe.d/issues/1843 [issue1845]: https://github.com/vibe-d/vibe.d/issues/1845 [issue1846]: https://github.com/vibe-d/vibe.d/issues/1846 [issue1848]: https://github.com/vibe-d/vibe.d/issues/1848 [issue1850]: https://github.com/vibe-d/vibe.d/issues/1850 [issue1855]: https://github.com/vibe-d/vibe.d/issues/1855 [issue1860]: https://github.com/vibe-d/vibe.d/issues/1860 [issue1866]: https://github.com/vibe-d/vibe.d/issues/1866 [issue1871]: https://github.com/vibe-d/vibe.d/issues/1871 [issue1873]: https://github.com/vibe-d/vibe.d/issues/1873 [issue1874]: https://github.com/vibe-d/vibe.d/issues/1874 [issue1886]: https://github.com/vibe-d/vibe.d/issues/1886 [issue1894]: https://github.com/vibe-d/vibe.d/issues/1894 [issue1902]: https://github.com/vibe-d/vibe.d/issues/1902 v0.8.0 - 2017-07-10 ------------------- The 0.8.x branch marks the final step before switching each individual sub package to version 1.0.0. This has already been done for the Diet template module (now [`diet-ng`][diet-ng]) and for the new [vibe-core][vibe-core] package that is released simultaneously. The most prominent changes in this release are a full separation of all sub modules into individual folders, as well as the use of `@safe` annotations throughout the code base. The former change may require build adjustments for projects that don't use DUB to build vibe.d, the latter leads to some breaking API changes. ### Features and improvements ### - Compiles on DMD 2.070.2 up to DMD 2.075.0-b1, this release also adds support for `-m32mscoff` builds ("x86_mscoff") - Global API changes - Split up the library into fully separate sub packages/folders - Added a "vibe-core" configuration to "vibe-d" and "vibe-d:core" that uses the new [vibe-core][vibe-core] package - Added `@safe` and `nothrow` annotations in many places of the API - this is a breaking change in cases where callbacks were annotated - [pull #1618][issue1618], [issue 1595][issue1595] - Reworked the buffered I/O stream API - The `InputStream` based overload of `OutputStream.write` has been moved to a global function `pipe()` - `read` and `write` now accept an optional `IOMode` parameter (only `IOMode.all` is supported for the original `vibe:core`, but `vibe-core` supports all modes) - `InputStream.leastSize` and `.dataAvailableForRead` are scheduled for deprecation - `IOMode.immediate` and `IOMode.once` can be used in their place - Added forward compatibility code to "vibe:core" so that dependent code can use either that or [vibe-core][vibe-core] as a drop-in replacement - HTTP server - Server contexts are now managed thread-locally, which means that multiple threads will attempt to listen on the same port if requested to do so - use `HTTPServerOption.reusePort` if necessary - Added support for simple range queries in the HTTP file server (by Jan Jurzitza aka WebFreak001) - [issue #716][issue716], [pull #1634][issue1634], [pull #1636][issue1636] - The HTTP file server only sets a default content type header if none was already set (by Remi A. Solås aka rexso) - [pull #1642][issue1642] - `HTTPServerResponse.writeJsonBody` only sets a default content type header if none was already set - Added `HTTPServerResponse.writePrettyJsonBody` - `HTTPServerResponse.writeBody` only sets a default content type if none is already set - [issue #1655][issue1655] - Added `Session.remove` to remove session keys (by Sebastian Wilzbach) - [pull #1670][issue1670] - Added `WebSocket.closeCode` and `closeReason` properties (by Andrei Zbikowski aka b1naryth1ef) - [pull #1675][issue1675] - Added a `Variant` dictionary as `HTTPServerRequest.context` for custom value storage by high level code - [issue1529][issue1529] [pull #1550][issue1550] - Usability improvements by Harry T. Vennik aka thaven - [pull #1745][issue1745] - Added `checkBasicAuth` as a non-enforcing counterpart of `performBasicAuth` - [issue #1449][issue1449], [pull #1687][issue1687] - Diet templates are rendered as pretty HTML by default if "diet-ng" is used (can be disabled using `VibeOutputCompactHTML`) - [issue #1616][issue1616] - Added `HTTPClientRequest.writeFormBody` - Disabled stack traces on the default error page for non-debug builds by default (`HTTPServerOption.defaults`) - REST interface generator - Added single-argument `@bodyParam` to let a single parameter represent the whole request body (by Sebastian Wilzbach) - [issue #1549][issue1549], [pull #1723][issue1723] - Boolean parameters now accept "1" and case insensitive "true" as `true` - [pull #1712][issue1712] - Server responses now output prettified JSON if built in debug mode - Stack traces are only written in debug mode - [issue #1623][issue1623] - Reduced the number of chunks written by `StreamOutputRange.put` for large input buffers (affects WebSockets and chunked HTTP responses) - Switched to `std.experimental.allocator` instead of the integrated `vibe.utils.memory` module - The string sequence `5x faster initial match graph building and around 60% faster route match performance) - Added CONNECT and `Connection: Upgrade` support to the reverse proxy module (by Georgi Dimitrov) - [pull #1392][issue1392] - Added support for using an explicit network interface for outgoing TCP and HTTP connections - [pull #1407][issue1407] - Cookies are now stored with their raw value, enabling handling of non-base64 encoded values (by Yannick Koechlin) - [pull #1401][issue1401] - Added HyperLogLog functions to the Redis client (by Yannick Koechlin) - [pull #1435][issue1435] - Added `RestInterfaceSettings.httpClientSettings` - Added `HTTPClientSettings.dnsAddressFamily` - Added `TCPListener.bindAddress` - Made `@ignore`, `@name`, `@optional`, `@byName` and `@asArray` serialization attributes customizable per serialization policy - [pull #1438][issue1438], [issue #1352][issue1352] - Added `HTTPStatus.unavailableForLegalReasons` (by Andrew Benton) - [pull #1358][issue1358] - Added support or logger implementations that can log multiple lines per log call (by Martin Nowak) - [pull #1428][issue1428] - Added `HTTPServerResponse.connected` (by Alexander Tumin) - [pull #1474][issue1474] - Added allocation free string conversion methods to `NetworkAddress` - Added diagnostics in case of connections getting closed during process shutdown (after the driver is already shut down) - [issue #1452][issue1452] - Added `disableDefaultSignalHandlers` that can be used to avoid vibe.d registering its default signal handlers - [pull #1454][issue1454], [issue #1333][issue1333] - Added detection of SQLite data base extensions for `getMimeTypeForFile` (by Stefan Koch) - [pull #1456][issue1456] - The markdown module now emits XHTML compatible `
` tags (by Stefan Schmidt) - [pull #1461][issue1461] - Added `RedisDatabase.srandMember` overload taking a count (by Yannick Koechlin) - [pull #1447][issue1447] - The HTTP client now accepts `const` settings - Removed the libevent/Win64 configuration as the libevent binaries for that platform never existed - [issue #832][issue832] - Improvements to the WebSockets module, most notably reduction of memory allocations (by Mathias Lang) - [pull #1497][issue1497] - Added version `VibeNoOpDispatch` to force removal of `opDispatch` for `Json` and `Bson` (by David Monagle) - [pull #1526][issue1526] - Added a manual deprecation message for `Json.opDispatch`/`Bson.opDispatch` because `deprecated` did not have an effect ### Bug fixes ### - Fixed the internal `BsonObjectID` counter to be initialized with a random value (by machindertech) - [pull #1128][issue1128] - Fixed a possible race condition for ID assignment in the libasync driver (by Etienne Cimon) - [pull #1399][issue1399] - Fixed compilation of `Bson.opt` for both const and non-const AAs/arrays - [issue #1394][issue1394] - Fixed handling of POST methods in the REST JavaScript client for methods with no parameters - [issue #1434][issue1434] - Fixed `RedisDatabase.blpop` and `RedisList.removeFrontBlock` - Fixed a protocol error/assertion failure when a Redis reply threw an exception - [pull #1416][issue1416], [issue #1412][issue1412] - Fixed possible assertion failures "Manually resuming taks that is already scheduled" - Fixed FreeBSD and NetBSD support (by Nikolay Tolstokulakov) - [pull #1448][issue1448] - Fixed handling of multiple methods with `@headerParam` parameters with the same name (by Irenej Marc) - [pull #1453][issue1453] - Fixed calling `async()` with an unshared delegate or with a callback that returns a `const`/`immutable` result - Fixed `Tid` to be considered safe to pass between threads (for worker tasks or `vibe.core.concurrency`) - Fixed the `HTTPClient`/`download()` to properly use TLS when redirects happen between HTTP and HTTPS (by Martin Nowak) - [pull #1265][issue1265] - Fixed recognizing certain HTTP content encoding strings ("x-gzip" and "") (by Ilya Yaroshenko) - [pull #1477][issue1477] - Fixed parsing IPv6 "Host" headers in the HTTP server - [issue #1388][issue1388], [issue #1402][issue1402] - Fixed an assertion failure when using threads together with `VibeIdleCollect` - [issue #1476][issue1476] - Fixed parsing of `vibe.conf` files that contain a UTF BOM - [issue #1470][issue1470] - Fixed `@before`/`@after` annotations to work for template member functions - Fixed "Host" header handling in the HTTP server (now optional for HTTP/1.0 and responds with "bad request" if missing) - Fixed `Json` to work at CTFE (by Mihail-K) - [pull #1489][issue1489] - Fixed `adjustMethodStyle` (used throughout `vibe.web`) for method names with trailing upper case characters - Fixed alignment of the `Json` type on x64, fixes possible dangling pointers due to the GC not recognizing unaligned pointers - [issue #1504][issue1504] - Fixed serialization policies to work for enums and other built-in types (by Tomáš Chaloupka) - [pull #1500][issue1500] - Fixed a bogus assertion error in `Win32TCPConnection.tcpNoDelay` and `.keepAlive` (by Денис Хлякин aka aka-demik) - [pull #1514][issue1514] - Fixed a deadlock in `TaskPipe` - [issue #1501][issue1501] [issue832]: https://github.com/vibe-d/vibe.d/issues/832 [issue1128]: https://github.com/vibe-d/vibe.d/issues/1128 [issue1265]: https://github.com/vibe-d/vibe.d/issues/1265 [issue1333]: https://github.com/vibe-d/vibe.d/issues/1333 [issue1352]: https://github.com/vibe-d/vibe.d/issues/1352 [issue1358]: https://github.com/vibe-d/vibe.d/issues/1358 [issue1388]: https://github.com/vibe-d/vibe.d/issues/1388 [issue1392]: https://github.com/vibe-d/vibe.d/issues/1392 [issue1394]: https://github.com/vibe-d/vibe.d/issues/1394 [issue1399]: https://github.com/vibe-d/vibe.d/issues/1399 [issue1401]: https://github.com/vibe-d/vibe.d/issues/1401 [issue1402]: https://github.com/vibe-d/vibe.d/issues/1402 [issue1407]: https://github.com/vibe-d/vibe.d/issues/1407 [issue1412]: https://github.com/vibe-d/vibe.d/issues/1412 [issue1416]: https://github.com/vibe-d/vibe.d/issues/1416 [issue1428]: https://github.com/vibe-d/vibe.d/issues/1428 [issue1434]: https://github.com/vibe-d/vibe.d/issues/1434 [issue1435]: https://github.com/vibe-d/vibe.d/issues/1435 [issue1438]: https://github.com/vibe-d/vibe.d/issues/1438 [issue1447]: https://github.com/vibe-d/vibe.d/issues/1447 [issue1448]: https://github.com/vibe-d/vibe.d/issues/1448 [issue1452]: https://github.com/vibe-d/vibe.d/issues/1452 [issue1453]: https://github.com/vibe-d/vibe.d/issues/1453 [issue1454]: https://github.com/vibe-d/vibe.d/issues/1454 [issue1456]: https://github.com/vibe-d/vibe.d/issues/1456 [issue1461]: https://github.com/vibe-d/vibe.d/issues/1461 [issue1470]: https://github.com/vibe-d/vibe.d/issues/1470 [issue1474]: https://github.com/vibe-d/vibe.d/issues/1474 [issue1476]: https://github.com/vibe-d/vibe.d/issues/1476 [issue1477]: https://github.com/vibe-d/vibe.d/issues/1477 [issue1489]: https://github.com/vibe-d/vibe.d/issues/1489 [issue1500]: https://github.com/vibe-d/vibe.d/issues/1500 [issue1504]: https://github.com/vibe-d/vibe.d/issues/1504 [issue1514]: https://github.com/vibe-d/vibe.d/issues/1514 [issue1526]: https://github.com/vibe-d/vibe.d/issues/1526 v0.7.28 - 2016-02-27 -------------------- This is a hotfix release, which fixes two critical regressions. The first one resulted in memory leaks or memory corruption, while the second one could cause TCP connections to hang indefinitely in the `close` method for the libevent driver. ### Bug fixes ### - Fixed a regression in `FreeListRef` which caused the reference count to live outside of the allocated memory bounds - [issue #1432][issue1432] - Fixed a task starvation regression in the libevent driver that happened when a connection got closed by the TCP remote peer while there was still data in the write buffer - [pull #1443][issue1443], [issue #1441][issue1441] - Fixed recognizing "Connection: close" headers for non-lowercase spelling of "close" - [issue #1426][issue1426] - Fixed the UDP receive timeout to actually work in the libevent driver - [issue #1429][issue1429] - Fixed handling of the "Connection" header in the HTTP server to be case insensitive - [issue #1426][issue1426] [issue1426]: https://github.com/vibe-d/vibe.d/issues/1426 [issue1429]: https://github.com/vibe-d/vibe.d/issues/1429 [issue1432]: https://github.com/vibe-d/vibe.d/issues/1432 [issue1441]: https://github.com/vibe-d/vibe.d/issues/1441 [issue1443]: https://github.com/vibe-d/vibe.d/issues/1443 v0.7.27 - 2016-02-09 -------------------- In preparation for a full separation of the individual library components, this release splits up the code logically into multiple DUB sub packages. This enables dependent code to reduce the dependency footprint and compile times. In addition to this and a bunch of further improvements, a lot of performance tuning and some important REST interface additions went into this release. Note that the integration code for `std.concurrency` has been re-enabled with this release. This means that you can use `std.concurrency` without worrying about blocking the event loop now. However, there are a few incompatibilities between `std.concurrency` and vibe.d's own version in `vibe.core.concurrency`, such as `std.concurrency` not supporting certain `shared(T)` or `Isolated!T` to be passed to spawned tasks. If you hit any issues that cannot be easily resolved, the usual vibe.d behavior is available in the form of "Compat" suffixed functions (i.e. `sendCompat`, `receiveCompat` etc.). But note that these functions operate on separate message queue structures, so mixing the "Compat" functions with non-"Compat" versions will not work. ### Features and improvements ### - Compiles on DMD frontend versions 2.066.0 up to 2.070.0 - Split up the library into sub packages - this prepares for a deeper split that is going to happen in the next release - A lot of performance tuning went into the network and HTTP code, leading to a 50% increase in single-core HTTP performance and a lot more in the multi-threaded case over 0.7.26 - Marked more of the API `@safe` and `nothrow` - Re-enabled the `std.concurrency` integration that went MIA a while ago - `std.concurrency` can now be used transparently in vibe.d applications - [issue #1343][issue1343], [pull #1345][issue1345] - REST interface generator changes - Added support for REST collections with natural D syntax using the new `Collection!I` type - [pull #1268][issue1268] - Implemented CORS support for the REST interface server (by Sebastian Koppe) - [pull #1299][issue1299] - Conversion errors for path parameters (e.g. `@path("/foo/:someparam")`) in REST interfaces now result in a 404 error instead of 500 - HTTP server/client changes - The `URLRouter` now adds a `"routerRootDir"` entry with the relative path to the router base directory to `HTTPServerRequest.params` (by Steven Dwy) - [pull #1301][issue1301] - Added a WebSocket client implementation (by Kemonozume) - [pull #1332][issue1332] - Added the possibility to access cookie contents as a raw string - The HTTP client now retries a request if a keep-alive connection gets closed before the response gets read - Added `HTTPServerResponse.finalize` to manually force sending and finalization of the response - [issue #1347][issue1347] - Added `scope` callback based overloads of `switchProtocol` in `HTTPServerResponse` and `HTTPClientResponse` - Added `ChunkedOutputStream.chunkExtensionCallback` to control HTTP chunk-extensions (by Manuel Frischknecht and Yannick Koechlin) - [pull #1340][issue1340] - Passing an empty string to `HTTPClientResponse.switchProtocol` now skips the "Upgrade" header validation - Enabled TCP no-delay in the HTTP server - Redundant calls to `HTTPServerResponse.terminateSession` are now ignored instead of triggering an assertion - [issue #472][issue472] - Added log output for newly registered HTTP virtual hosts - [issue #1271][issue1271] - The Markdown compiler now adds "id" attributes to headers to enable cross-referencing - Added `getMarkdownOutline`, which returns a tree of sections in a Markdown document - Added `Path.relativeToWeb`, a version of `relativeTo` with web semantics - Added `vibe.core.core.setupWorkerThreads` to customize the number of worker threads on startup (by Jens K. Mueller) - [pull #1350][issue1350] - Added support for parsing IPv6 URLs (by Mathias L. Baumann aka Marenz) - [pull #1341][issue1341] - Enabled TCP no-delay in the Redis client (by Etienne Cimon) - [pull #1361][issue1361] - Switch the `:javascript` Diet filter to use "application/json" as the content type - [issue #717][issue717] - `NetworkAddress` now accepts `std.socket.AddressFamily` constants in addition to the `AF_` ones - [issue #925][issue925] - Added support for X509 authentication in the MongoDB client (by machindertech) - [pull #1235][issue1235] - Added `TCPListenOptions.reusePort` to enable port reuse as an OS supported means for load-balancing (by Soar Qin) - [pull #1379][issue1379] - Added a `port` parameter to `RedisSessionStore.this()` - Added code to avoid writing to `HTTPServerResponse.bodyWriter` after a fixed-length response has been fully written ### Bug fixes ### - Fixed behavior of `ZlibInputStream` in case of premature end of input - [issue #1116][issue1116] - Fixed a memory leak in `ZlibInputStream` (by Etienne Cimon) - [pull #1116][issue1116] - Fixed a regression in the OpenSSL certificate validation code - [issue #1325][issue1325] - Fixed the behavior of `TCPConnection.waitForData` in all drivers - [issue #1326][issue1326] - Fixed a memory leak in `Libevent2Driver.connectTCP` on connection failure (by Etienne Cimon) - [pull #1322][issue1322], [issue #1321][issue1321] - Fixed concatenation of static and dynamic class attributes in Diet templates - [issue #1312][issue1312] - Fixed resource leaks in `connectTCP` for libevent when the task gets interrupted - [issue #1331][issue1331] - Fixed `ZlibInputStream` in case of the target buffer matching up exactly with the uncompressed data (by Ilya Lyubimov aka villytiger) - [pull #1339][issue1339] - Fixed some issues with triggering assertions on yielded tasks - Fixed TLS SNI functionality in the HTTP server - Fixed excessive CPU usage in the libasync driver (by Etienne Cimon) - [pull #1348][issue1348] - Fixed exiting multi-thread event loops for the libasync driver (by Etienne Cimon) - [pull #1349][issue1349] - Fixed the default number of worker threads to equal all logical cores in the system - Fixed an assertion failure in the WebSocket server (by Ilya Yaroshenko aka 9il) - [pull #1356][issue1356], [issue #1354][issue1354] - Fixed a range violation error in `InotifyDirectoryWatcher` - [issue #1364][issue1364] - Fixed `readUntil` to not use the buffer returned by `InputStream.peek()` after a call to `InputStream.read()` - [issue #960][issue960] - Disabled the case randomization feature of libevent's DNS resolver to work around issues with certain servers - [pull #1366][issue1366] - Fixed the behavior of multiple `runEventLoop`/`exitEventLoop` calls in sequence for the win32 driver - Fixed reading response bodies for "Connection: close" connections without a "Content-Length" in the HTTP client - [issue #604][issue604] - Fixed indentation of `:javascript` blocks in Diet templates - [issue #837][issue837] - Fixed assertion failure in the win32 driver when sending files over TCP - [issue #932][issue932] - Fixed `exitEventLoop` having no effect if called while the event loop is in the idle handler - Fixed an assertion failure in the libevent driver when actively closing a connection that is currently being read from - [issue #1376][issue1376] - Fixed a null-pointer dereference when `waitForData` gets called on a fully closed TCP connection - [issue #1384][issue1384] - Fixed a crash at exit caused by a bad module destructor call sequence when `std.parallelism.TaskPool` is used - [issue #1374][issue1374] [issue472]: https://github.com/vibe-d/vibe.d/issues/472 [issue604]: https://github.com/vibe-d/vibe.d/issues/604 [issue717]: https://github.com/vibe-d/vibe.d/issues/717 [issue837]: https://github.com/vibe-d/vibe.d/issues/837 [issue925]: https://github.com/vibe-d/vibe.d/issues/925 [issue932]: https://github.com/vibe-d/vibe.d/issues/932 [issue960]: https://github.com/vibe-d/vibe.d/issues/960 [issue1116]: https://github.com/vibe-d/vibe.d/issues/1116 [issue1235]: https://github.com/vibe-d/vibe.d/issues/1235 [issue1268]: https://github.com/vibe-d/vibe.d/issues/1268 [issue1271]: https://github.com/vibe-d/vibe.d/issues/1271 [issue1299]: https://github.com/vibe-d/vibe.d/issues/1299 [issue1301]: https://github.com/vibe-d/vibe.d/issues/1301 [issue1312]: https://github.com/vibe-d/vibe.d/issues/1312 [issue1321]: https://github.com/vibe-d/vibe.d/issues/1321 [issue1322]: https://github.com/vibe-d/vibe.d/issues/1322 [issue1325]: https://github.com/vibe-d/vibe.d/issues/1325 [issue1326]: https://github.com/vibe-d/vibe.d/issues/1326 [issue1331]: https://github.com/vibe-d/vibe.d/issues/1331 [issue1332]: https://github.com/vibe-d/vibe.d/issues/1332 [issue1339]: https://github.com/vibe-d/vibe.d/issues/1339 [issue1340]: https://github.com/vibe-d/vibe.d/issues/1340 [issue1341]: https://github.com/vibe-d/vibe.d/issues/1341 [issue1343]: https://github.com/vibe-d/vibe.d/issues/1343 [issue1345]: https://github.com/vibe-d/vibe.d/issues/1345 [issue1347]: https://github.com/vibe-d/vibe.d/issues/1347 [issue1348]: https://github.com/vibe-d/vibe.d/issues/1348 [issue1349]: https://github.com/vibe-d/vibe.d/issues/1349 [issue1350]: https://github.com/vibe-d/vibe.d/issues/1350 [issue1354]: https://github.com/vibe-d/vibe.d/issues/1354 [issue1356]: https://github.com/vibe-d/vibe.d/issues/1356 [issue1361]: https://github.com/vibe-d/vibe.d/issues/1361 [issue1364]: https://github.com/vibe-d/vibe.d/issues/1364 [issue1366]: https://github.com/vibe-d/vibe.d/issues/1366 [issue1374]: https://github.com/vibe-d/vibe.d/issues/1374 [issue1376]: https://github.com/vibe-d/vibe.d/issues/1376 [issue1379]: https://github.com/vibe-d/vibe.d/issues/1379 [issue1384]: https://github.com/vibe-d/vibe.d/issues/1384 v0.7.26 - 2015-11-04 -------------------- A large revamp of the REST interface generator was done in this release, which will enable faster future developments. The new JavaScript client generator is the first feature made possible by this. Apart from a good chunk of functional improvements in various areas, a notable change on the build level is that the `VibeCustomMain` version is no longer required for projects that implement their own `main` function. ### Features and improvements ### - Compiles on 2.066.x up to 2.069.0 - Removed deprecated symbols and deprecated those that were scheduled for deprecation - The `VibeCustomMain` version identifier is now a no-op and the new default behavior - Added a JavaScript REST client generator to `vibe.web.rest` - [pull #1209][issue1209] - Added translation support for plural forms in `vibe.web.i18n` (by Nathan Coe) - [pull #1290][issue1290] - Added a fiber compatible read-write mutex implementation (`TaskReadWriteMutex`) (by Manuel Frischknecht) - [pull #1287][issue1287] - Added `vibe.http.fileserver.sendFile` - Added ALPN support to the TLS module (by Etienne Cimon) - Added an optional [Botan](https://github.com/etcimon/botan) based TLS implementation (by Etienne Cimon) - Switched the `vibe.core.log` module to support allocation-less logging (range like interface) - Removed all intrinsic dynamic allocations in all built-in logger implementations - this makes it possible to log from within class finalizers - Added `Cookie.toString()` (by Etienne Cimon) - Added `MarkdownSettings.urlFilter` in order to be able to customize contained links - Made `Json.toString` `@safe` so that `Json` values can be logged using `std.experimental.logger` - Added `HTTPServerRequest.noLog`, usable to disable access logging for particular requests (by Márcio Martins) - [pull #1281][issue1281] - Added support for static array parameters in `vibe.web.web` - Added `LocalTaskSemaphore`, a single-threaded task-compatible semaphore implementation (by Etienne Cimon) - Added `ConnectionPool.maxConcurrency` (by Etienne Cimon) - Added `MongoCollection.findAndModifyExt`, which takes a parameter with custom options - [issue #911][issue911] - `TLSVersion.any` now only matches TLS 1.0 and up; SSL 3 is explicitly excluded (by Márcio Martins) - [pull #1280][issue1280] - Removed some bad dependencies to prepare for splitting up the library (dependency cycles between low-level and high-level packages) - Implemented timer support for the libev driver - [pull #1206][issue1206] - Improved the method prefix semantics in the web/REST interface generators, so that only whole words are recognized - Mime type `"application/vnd.api+json"` is now recognized to have a JSON body in the HTTP server (by Szabo Bogdan) - [pull #1296][issue1296] ### Bug fixes ### - Fixes in the libasync driver (by Etienne Cimon) - Various correctness and crash fixes - Fixed handling files with non-ASCII characters on Windows - [pull #1273][issue1273] - Fixed timers with a zero timeout - [pull #1204][issue1204] - Fixed a possible TCP connection stall for blocking writes - [pull #1247][issue1247] - Fixed partially dropped data for TCP connections - [issue #1297][issue1297], [pull #1298][issue1298] - Fixed properly waiting for blocking operations - [issue #1227][issue1227] - Missing HTML form parameters are now properly handled by `@errorDisplay` in the web interface generator - Fixed bogus Diet template dependencies caused by interpreting *all* lines that started with "extends ..." as extension directives - Fixed `runWorkerTaskH` to be callable outside of a task context - [pull #1206][issue1206] - Fixed `LibevManualEvent` to actually work across threads - [pull #1206][issue1206] - Fixed a bug in the shutdown sequence that could cause the application to hang if worker threads had been started - [pull #1206][issue1206] - Fixed multiple loggers not working - [issue #1294][issue1294] - Fixed `workerThreadCount` to always return a non-zero number by letting it start up the workers if necessary - Fixed `Path.toString()` to output trailing slashes if required for empty paths - Fixed an TLS connection failure in the OpenSSL based implementation when no `peer_name` was set - Fixed linking on Debian, which has removed certain public OpenSSL functions (by Luca Niccoli) - [issue #1315][issue1315], [pull #1316][issue1316] - Fixed an assertion happening when parsing malformed URLs - [issue #1318][issue1318] [issue911]: https://github.com/vibe-d/vibe.d/issues/911 [issue1204]: https://github.com/vibe-d/vibe.d/issues/1204 [issue1206]: https://github.com/vibe-d/vibe.d/issues/1206 [issue1209]: https://github.com/vibe-d/vibe.d/issues/1209 [issue1273]: https://github.com/vibe-d/vibe.d/issues/1273 [issue1280]: https://github.com/vibe-d/vibe.d/issues/1280 [issue1281]: https://github.com/vibe-d/vibe.d/issues/1281 [issue1287]: https://github.com/vibe-d/vibe.d/issues/1287 [issue1290]: https://github.com/vibe-d/vibe.d/issues/1290 [issue1294]: https://github.com/vibe-d/vibe.d/issues/1294 [issue1227]: https://github.com/vibe-d/vibe.d/issues/1227 [issue1247]: https://github.com/vibe-d/vibe.d/issues/1247 [issue1296]: https://github.com/vibe-d/vibe.d/issues/1296 [issue1297]: https://github.com/vibe-d/vibe.d/issues/1297 [issue1298]: https://github.com/vibe-d/vibe.d/issues/1298 [issue1315]: https://github.com/vibe-d/vibe.d/issues/1315 [issue1316]: https://github.com/vibe-d/vibe.d/issues/1316 [issue1318]: https://github.com/vibe-d/vibe.d/issues/1318 v0.7.25 - 2015-09-20 -------------------- Mostly a bugfix release, including a regression fix in the web form parser, this release also drops official support for the DMD 2.065.0 front end (released February 2014). Most functionality will probably still stay functional on 2.065.0 for a while. ### Features and improvements ### - Contains some compile fixes for the upcoming 2.069 version of DMD - The REST interface generator adds support for `out`/`ref` `@headerParam` parameters - Stripping `id`/`_id` fields for `RedisStripped!T` is now optional - `registerWebInterface` and `registerRestInterface` now return the `URLRouter` instance to enable method chaining (by Martin Nowak) - [pull #1208][issue1208] ### Bug fixes ### - Fixed parsing of multi-part forms when a `Content-Length` part header is present (by sigod) - [issue #1220][issue1220], [pull #1221][issue1221] - Fixed parsing of multi-part forms that don't end in `"--\r\n"` (by Etienne Cimon) - [pull #1232][issue1232] - Fixed an exception occurring in `waitForData()` when calling `Libevent2TCPConnection.close()` concurrently (by machindertech) - [pull #1205][issue1205] - Fixed handling of `WebInterfaceSettings.ignoreTrailingSlash` for sub interfaces (by Marc Schütz) - [pull #1237][issue1237] - Fixed an alignment issue in conjunction with atomic operations on the upcoming LDC 0.16.0 (by Kai Nacke aka redstar) - [pull #1255][issue1255] - Fixed parsing of empty HTTP request headers - [issue #1254][issue1254] - Fixed using the MongoDB client on a mongos instance - [pull #1246][issue1246] - Fixed using `LibasyncUDPConnection.recv` without a timeout (by Daniel Kozak) - [pull #1242][issue1242] - Fixed a regression in `RestInterfaceClient`, where a `get(T id)` method would result in a URL with two consecutive underscores [issue1205]: https://github.com/vibe-d/vibe.d/issues/1205 [issue1220]: https://github.com/vibe-d/vibe.d/issues/1220 [issue1221]: https://github.com/vibe-d/vibe.d/issues/1221 [issue1232]: https://github.com/vibe-d/vibe.d/issues/1232 [issue1237]: https://github.com/vibe-d/vibe.d/issues/1237 [issue1242]: https://github.com/vibe-d/vibe.d/issues/1242 [issue1246]: https://github.com/vibe-d/vibe.d/issues/1246 [issue1254]: https://github.com/vibe-d/vibe.d/issues/1254 [issue1255]: https://github.com/vibe-d/vibe.d/issues/1255 v0.7.24 - 2015-08-10 -------------------- Adds DMD 2.068.0 compatibility and contains a number of additions and fixes in all parts of the library. Some notable changes are the addition of WebSocket support in the `vibe.web.web` module and the planned deprecation of `opDispatch` for `Json` and `Bson`, as well as the rename of all "SSL" symbols to "TLS". HTTP request handlers can, and should, now take the request/response parameters as `scope`, which will later allow to improve performance without compromising safety. ### Features and improvements ### - Fixed compilation on DMD 2.068 (most fixes by Mathias Lang) - Web interface generator (`vibe.web.web`) - Added support for `WebSocket` routes - [issue #952][issue952] - Doesn't intercept `HTTPStatusException`s thrown during parameter assembly anymore - Replaced the deprecated form interface example project with a `vibe.web.web` based "web_ajax" example - Added support for the `@path` attribute on registered classes - [issue #1036][issue1036] - REST interface generator (`vibe.web.rest`) - Removed support for `index()` methods (use `get()` or `@path("/")`) (by Mathias Lang) - [pull #1010][issue1010] - Deprecated the `@rootPath` attribute (use `@path` instead) (by Mathias Lang) - [pull #999][issue999] - Deprecated symbols that were scheduled for deprecation and removed deprecated symbols - Added version `VibeNoDefaultArgs` to disable the built-in command line options - Renamed "SSL" to "TLS" in most places - Scheduled `Json.opDispatch` and `Bson.opDispatch` for deprecation (use `opIndex` instead) - Added `Bson.tryIndex` (by Marc Schütz) - [pull #1032][issue1032] - Added support for all standard HTTP methods (RFC) (by Szabo Bogdan) - [pull #1068][issue1068], [pull #1082][issue1082] - Added overloads for `scope` based HTTP server callbacks - These will later be used for safe, allocation-less HTTP request processing - Always prefer this over the non-`scope` callbacks, as these will imply a performance impact in later versions - Added `vibe.core.stream.nullSink` as a convenient way to get a generic data sink stream - Added overloads of `writeFormData` and `writeFormBody` that accept ranges of key/value tuples (by Tobias Pankrath) - Added `HTTPClientResponse.switchProtocol` (by Luca Niccoli) - [pull #945][issue945] - `listenHTTP` now returns a `HTTPListener` instance that can be used to stop listening - [issue #1074][issue1074] - Added an `AppenderResetMode` parameter to `MemoryOutputStream.reset()` (by Etienne Cimon) - Changed `urlEncode` to only allocate if necessary (by Marc Schütz) - [pull #1076][issue1076] - Optimize multi-part form decoding for cases where "Content-Length" is given (by Etienne Cimon) - [pull #1101][issue1101] - Added serialization support for `std.typecons.BitFlags!T` - Removed the `HTTPRouter` interface (now just a compatibility alias to `URLRouter`) (by Mathias Lang) - [pull #1106][issue1106] - Added `HTTPStatus.tooManyRequests` (by Jack Applegame) - [pull #1103][issue1103] - Added optional `code` and `reason` parameters to `WebSocket.close()` (by Steven Dwy) - [pull #1107][issue1107] - Added an optional copy+delete fallback to `moveFile()` (by Etienne Cimon and Martin Nowak) - Let `ConnectionProxyStream` work without an underlying `ConnectionStream` (by Etienne Cimon) - Added a `ConnectionProxyStream` constructor taking separate input and output streams - Updated the OpenSSL Windows binaries to 1.0.1m - Added `BigInt` support to the JSON module (by Igor Stepanov) - [pull #1118][issue1118] - The event loop of the win32 driver can now be stopped by sending a `WM_QUIT` message (by Денис Хлякин aka aka-demik) - [pull #1120][issue1120] - Marked `vibe.inet.path` as `pure` and removed casts that became superfluous - Added an `InputStream` based overload of `HTTPServerResponse.writeBody` - [issue #1594][issue1594] - Added all Redis modules to the `vibe.vibe` module - Added a version of `FixedRingBuffer.opApply` that supports an index (by Tomáš Chaloupka) - [pull #1198][issue1198] ### Bug fixes ### - Fixed listening on IPv6 interfaces for the win32 driver - Fixed `URL.localURI` updating the query string and anchor parts properly - [issue #1044][issue1044] - Fixed `Task.join()` to work outside of a running event loop - Fixed the automatic redirection in `vibe.web.web` in case of mismatching trailing slash - Fixed `MongoCollection.count()` when used with MongoDB 3.x - [issue #1058][issue1058] - Fixed detection of non-copyable, but movable types for `runTask` - Fixed processing of translation strings with escape sequences in `vibe.web.web` (by Andrey Zelenchuk) - [pull #1067][issue1067] - Fixed unnecessarily closing HTTP client connections - Fixed using `TCPConnection.close()` with a concurrent `read()` operation (libevent driver) - Fixed parsing of HTTP digest authentication headers with different whitespace padding or differing case (by Денис Хлякин aka aka-demik) - [pull 1083][issue1083] - Fixed parsing various HTTP request headers case insensitively - Fixed validation of untrusted certificates without `TLSPeerValidationMode.checkTrust` for `OpenSSLStream` - Fixed TLS certificate host/address validation in the SMTP client - Fixed `@bodyParam` parameters with default value in the REST interface generator (by Mathias Lang) - [issue #1125][issue1125], [pull #1129][issue1129] - Fixed running the TLS context setup for STARTTLS SMTP connections (by Nathan Christenson) - [pull #1132][issue1132] - Fixed JSON serialization of `const(Json)` (by Jack Applegame) - [pull #1109][issue1109] - Fixed runtime error for Windows GUI apps that use the Visual Studio runtime - Various fixes in the libasync event driver (by Etienne Cimon) - Fixed the REST interface generator to treat `get`/`post`/... methods as `@path("/")` (by Mathias Lang) - [pull #1135][issue1135] - Fixed `URL`'s internal encoding of the path string (by Igor Stepanov) - [pull #1148][issue1148] - Fixed decoding query parameters in the REST interface generator (by Igor Stepanov) - [pull #1143][issue1143] - Fixed a possible range violation when writing long HTTP access log messages (by Márcio Martins) - [pull #1156][issue1156] - Fixed support of typesafe variadic methods in the REST interface generator (by Mathias Lang) - [issue #1144][issue1144], [pull #1159][issue1159] - Fixed `getConfig`, `setConfig` and `configResetStat` in `RedisClient` (by Henning Pohl) - [pull #1158][issue1158] - Fixed possible CPU hog in timer code for periodic timer events that were triggered too fast - Fixed a possible memory leak and wrongly reported request times for HTTP connections that get terminated before finishing a response - [issue #1157][issue1157] - Fixed `vibe.web.web.redirect()` to work properly for relative paths with query strings - Fixed invalid JSON syntax in dub.json - [issue #1172][issue1172] - Fixed `LibasyncFileStream` when used with `FileMode.createTrunc` (by Etienne Cimon) - [pull #1176][issue1176] - Fixed `deserialize` when operating on a struct/class that is annotated with `@asArray` (by Colden Cullen) - [pull #1182][issue1182] - Fixed parsing quoted HTTP multi part form boundaries (by Mathias L. Baumann aka Marenz) - [pull #1183][issue1183] - Fixed `LibasyncFileStream.peek()` to always return `null` (by Etienne Cimon) - [pull #1179][issue1179] - Fixed `ThreadedFile.seek` for 32-bit Windows applications (libevent driver) - [issue #1189][issue1189] - Fixed parsing of relative `file://` URLs - Fixed a possible `RangeError` in the JSON parser (by Takaaki Seki) - [pull #1199][issue1199] - Fixed a possible resource leak in `HashMap` (destructors not run) - Fixed `pipeRealtime` to always adhere to the maximum latency - Fixed deserialization of `immutable` fields (by Jack Applegame) - [pull #1190][issue1190] [issue945]: https://github.com/vibe-d/vibe.d/issues/945 [issue952]: https://github.com/vibe-d/vibe.d/issues/952 [issue999]: https://github.com/vibe-d/vibe.d/issues/999 [issue1010]: https://github.com/vibe-d/vibe.d/issues/1010 [issue1032]: https://github.com/vibe-d/vibe.d/issues/1032 [issue1036]: https://github.com/vibe-d/vibe.d/issues/1036 [issue1044]: https://github.com/vibe-d/vibe.d/issues/1044 [issue1058]: https://github.com/vibe-d/vibe.d/issues/1058 [issue1067]: https://github.com/vibe-d/vibe.d/issues/1067 [issue1068]: https://github.com/vibe-d/vibe.d/issues/1068 [issue1074]: https://github.com/vibe-d/vibe.d/issues/1074 [issue1076]: https://github.com/vibe-d/vibe.d/issues/1076 [issue1082]: https://github.com/vibe-d/vibe.d/issues/1082 [issue1083]: https://github.com/vibe-d/vibe.d/issues/1083 [issue1101]: https://github.com/vibe-d/vibe.d/issues/1101 [issue1103]: https://github.com/vibe-d/vibe.d/issues/1103 [issue1106]: https://github.com/vibe-d/vibe.d/issues/1106 [issue1107]: https://github.com/vibe-d/vibe.d/issues/1107 [issue1109]: https://github.com/vibe-d/vibe.d/issues/1109 [issue1118]: https://github.com/vibe-d/vibe.d/issues/1118 [issue1120]: https://github.com/vibe-d/vibe.d/issues/1120 [issue1125]: https://github.com/vibe-d/vibe.d/issues/1125 [issue1129]: https://github.com/vibe-d/vibe.d/issues/1129 [issue1132]: https://github.com/vibe-d/vibe.d/issues/1132 [issue1135]: https://github.com/vibe-d/vibe.d/issues/1135 [issue1143]: https://github.com/vibe-d/vibe.d/issues/1143 [issue1144]: https://github.com/vibe-d/vibe.d/issues/1144 [issue1148]: https://github.com/vibe-d/vibe.d/issues/1148 [issue1156]: https://github.com/vibe-d/vibe.d/issues/1156 [issue1157]: https://github.com/vibe-d/vibe.d/issues/1157 [issue1158]: https://github.com/vibe-d/vibe.d/issues/1158 [issue1159]: https://github.com/vibe-d/vibe.d/issues/1159 [issue1172]: https://github.com/vibe-d/vibe.d/issues/1172 [issue1176]: https://github.com/vibe-d/vibe.d/issues/1176 [issue1179]: https://github.com/vibe-d/vibe.d/issues/1179 [issue1182]: https://github.com/vibe-d/vibe.d/issues/1182 [issue1183]: https://github.com/vibe-d/vibe.d/issues/1183 [issue1189]: https://github.com/vibe-d/vibe.d/issues/1189 [issue1190]: https://github.com/vibe-d/vibe.d/issues/1190 [issue1198]: https://github.com/vibe-d/vibe.d/issues/1198 [issue1199]: https://github.com/vibe-d/vibe.d/issues/1199 v0.7.23 - 2015-03-25 -------------------- Apart from fixing compilation on DMD 2.067 and revamping the `vibe.core.sync` module to support `nothrow`, notable changes are extended parameter support in `vibe.web.rest`, improved translation support in `vibe.web.web` and new support for policy based customization of (de-)serialization. The Diet template parser has also received a good chunk of fixes and improvements in this release. ### Features and improvements ### - Compiles on DMD frontend 2.065 up to 2.067 (most fixes for 2.067 are by Mathias Lang) - [pull #972][pull 972], [pull #992][issue992] - Changed semantics of `TaskMutex` and `TaskCondition` - **this can be a breaking change for certain applications** - The classes are now `nothrow` to stay forward compatible with D's `Mutex` and `Condition` classes, - Interruption using `Task.interrupt()` now gets deferred to the next wait/yield operation - The old behavior can be achieved using the new `InterruptipleTaskMutex` and `InterruptibleTaskCondition` classes - Definition of either `VibeCustomMain` or `VibeDefaultMain` is now a hard requirement - this is the final deprecation phase for `VibeCustomMain` - Added an overload of `lowerPrivileges` that takes explicit user/group arguments (by Darius Clark) - [pull #948][issue948] - Added `handleWebSocket` as a procedural alternative to `handleWebSockets` (by Luca Niccoli) - [pull #946][issue946] - Added support for "msgctxt" in .po files for the `vibe.web.web` translation framework (by Nathan Coe) - [pull #896][issue896] - Added overloads of `HTTPServerResponse.writeBody` and `writeRawBody` with an additional status code parameter (by Martin Nowak) - [pull #980][issue980] - Added `@queryParam` and `@bodyParam` to the `vibe.web.rest` module (by Mathias Lang) - [pull #969][issue969] - Added support for serving an "index.html" file when requesting a directory (by Martin Nowak) - [pull #902][issue902] - Added policy based customization for `vibe.data.serialization` (by Luca Niccoli) - [pull #937][issue937] - Added `SSLStream.peerCertificate` and `HTTPServerRequest.clientCertificate` properties (by Rico Huijbers) - [pull #965][issue965] - Added `RedisDatabase.zrangeByLex` (by Etienne Cimon) - [pull #993][issue993] - Added support for HTTP digest authentication (by Kai Nacke aka redstar) - [pull #1000][issue1000] - Diet template features - Added support for plain text lines starting with `<` (plain HTML lines) (by Kai Nacke aka redstar) - [pull #1007][issue1007] - Added support for default and "prepend" modes for blocks (help from Kai Nacke aka redstar) - [issue #905][issue905], [pull #1002][issue1002] - Multiple "id" attributes are now explicitly disallowed (by Kai Nacke aka redstar) - [pull #1008][issue1008] ### Bug fixes ### - Fixed ping handling for WebSockets and added automatic keep-alive pinging (by Luca Niccoli) - [pull #947][issue947] - Fixed wrapped texts in .po files for the `vibe.web.web` translation framework (by Nathan Coe) - [pull #896][issue896] - Fixed a crash issue when storing a `Timer` in a class instance that does not get destroyed before application exit - [issue #978][issue978] - Fixed `HTTPRouter.any` to match all supported HTTP verbs (by Szabo Bogdan) - [pull #984][issue984] - Fixed setting `TCPConnection.localAddr` in the libasync driver (by Etienne Cimon) - [issue #961][issue961], [pull #962][issue962] - Fixed some cases of missing destructor calls in `vibe.utils.memory` (partially by Etienne Cimon) - [pull #987][issue987] - Fixed some failed incoming SSL connection attempts by setting a default session context ID (by Rico Huijbers) - [pull #970][issue970] - Fixed `RedisSessionStore.create()` (by Yusuke Suzuki) - [pull #996][issue996] - Fixed HTML output of `//` style comments in Diet templates (by Kai Nacke) - [pull #1004][issue1004] - Fixed the error message for mismatched `@path` placeholder parameters in `vibe.web.rest` (by Mathias Lang aka Geod24) - [issue #949][issue949], [pull #1001][issue1001] - Fixed parsing of hidden comments in Diet templates that have no leading space (by Kai Nacke) - [pull #1012][issue1012] - Fixed serialization of `const(Json)` values - Fixed handling of struct parameter types in `vibe.web.rest` that implicitly convert to `string`, but not vice-versa - Fixed HTTP request parsing with uppercase letters in the "Transfer-Encoding" header (by Szabo Bogdan) - [pull #1015][issue1015] - Fixed parsing of Diet attributes that are followed by whitespace - [issue #1021][issue1021] - Fixed parsing of Diet string literal attributes that contain unbalanced parenthesis - [issue #1033][issue1033] [issue896]: https://github.com/vibe-d/vibe.d/issues/896 [issue896]: https://github.com/vibe-d/vibe.d/issues/896 [issue902]: https://github.com/vibe-d/vibe.d/issues/902 [issue905]: https://github.com/vibe-d/vibe.d/issues/905 [issue937]: https://github.com/vibe-d/vibe.d/issues/937 [issue946]: https://github.com/vibe-d/vibe.d/issues/946 [issue947]: https://github.com/vibe-d/vibe.d/issues/947 [issue948]: https://github.com/vibe-d/vibe.d/issues/948 [issue949]: https://github.com/vibe-d/vibe.d/issues/949 [issue961]: https://github.com/vibe-d/vibe.d/issues/961 [issue962]: https://github.com/vibe-d/vibe.d/issues/962 [issue965]: https://github.com/vibe-d/vibe.d/issues/965 [issue969]: https://github.com/vibe-d/vibe.d/issues/969 [issue970]: https://github.com/vibe-d/vibe.d/issues/970 [issue978]: https://github.com/vibe-d/vibe.d/issues/978 [issue980]: https://github.com/vibe-d/vibe.d/issues/980 [issue984]: https://github.com/vibe-d/vibe.d/issues/984 [issue987]: https://github.com/vibe-d/vibe.d/issues/987 [issue992]: https://github.com/vibe-d/vibe.d/issues/992 [issue993]: https://github.com/vibe-d/vibe.d/issues/993 [issue996]: https://github.com/vibe-d/vibe.d/issues/996 [issue1000]: https://github.com/vibe-d/vibe.d/issues/1000 [issue1001]: https://github.com/vibe-d/vibe.d/issues/1001 [issue1002]: https://github.com/vibe-d/vibe.d/issues/1002 [issue1004]: https://github.com/vibe-d/vibe.d/issues/1004 [issue1007]: https://github.com/vibe-d/vibe.d/issues/1007 [issue1008]: https://github.com/vibe-d/vibe.d/issues/1008 [issue1012]: https://github.com/vibe-d/vibe.d/issues/1012 [issue1015]: https://github.com/vibe-d/vibe.d/issues/1015 [issue1021]: https://github.com/vibe-d/vibe.d/issues/1021 [issue1033]: https://github.com/vibe-d/vibe.d/issues/1033 v0.7.22 - 2015-01-12 -------------------- A small release mostly fixing compilation issues on DMD 2.065, LDC 0.14.0 and GDC. It also contains the new optional libasync based event driver for initial testing. ### Features and improvements ### - Added a new event driver based on the [libasync](https://github.com/etcimon/libasync) native D event loop abstraction library (by Etienne Cimon) - [pull #814][issue814] - Added support for `@headerParam` in the REST interface generator (by Mathias Lang aka Geod24) - [pull #908][issue908] - Added `font/woff` as a recognized compressed MIME type to avoid redundant compression for HTTP transfers (by Márcio Martins) - [pull #923][issue923] - The BSON deserialization routines now transparently convert from `long` to `int` where required (by David Monagle) - [pull #913][issue913] ### Bug fixes ### - Fixed an overload conflict for `urlEncode` introduced in 0.7.21 - Fixed a compilation issue with `Exception` typed `_error` parameters in web interface methods (by Denis Hlyakin) - [pull #900][issue900] - Fixed conversion of `Bson.Type.undefined` to `Json` (by Márcio Martins) - [pull #922][issue922] - Fixed messages leaking past the end of a task to the next task handled by the same fiber (by Luca Niccoli) - [pull #934][issue934] - Fixed various compilation errors and ICEs for DMD 2.065, GDC and LDC 0.14.0 (by Martin Nowak) - [pull #901][issue901], [pull #907][issue907], [pull #927][issue927] [issue814]: https://github.com/vibe-d/vibe.d/issues/814 [issue900]: https://github.com/vibe-d/vibe.d/issues/900 [issue901]: https://github.com/vibe-d/vibe.d/issues/901 [issue907]: https://github.com/vibe-d/vibe.d/issues/907 [issue908]: https://github.com/vibe-d/vibe.d/issues/908 [issue913]: https://github.com/vibe-d/vibe.d/issues/913 [issue922]: https://github.com/vibe-d/vibe.d/issues/922 [issue923]: https://github.com/vibe-d/vibe.d/issues/923 [issue927]: https://github.com/vibe-d/vibe.d/issues/927 [issue934]: https://github.com/vibe-d/vibe.d/issues/934 v0.7.21 - 2014-11-18 -------------------- Due to a number of highly busy months (more to come), this release got delayed far more than planned. However, development didn't stall and, finally, a huge list of over 150 changes found its way into the new version. Major changes are all over the place, including some notable changes in the SSL/TLS support and the web interface generator. ### Features and improvements ### - SSL/TLS support - Added support for TLS server name indication (SNI) to the SSL support classes and the HTTP client and server implementation - Changed `SSLPeerValidationMode` into a set of bit flags (different modes can now be combined) - Made the SSL implementation pluggable (currently only OpenSSL is supported) - Moved all OpenSSL code into a separate module to avoid importing the OpenSSL headers in `vibe.stream.ssl` (by Martin Nowak) - [pull #757][issue757] - Added support for a `VibeUseOldOpenSSL` version to enable use with pre 1.0 versions of OpenSSL - Upgraded the included OpenSSL Windows binaries to 1.0.1j - Web interface generator - Added support for `Json` as a return type for web interface methods (by Stefan Koch) - [pull #684][issue684] - Added support for a `@contentType` attribute for web interface methods (by Stefan Koch) - [pull #684][issue684] - Added `vibe.web.web.trWeb` for runtime string translation support - Added support for nesting web interface classes using properties that return a class instance - Added support for `@before`/`@after` attributes for web interface methods - Added a `PrivateAccessProxy` mixin as a way to enable use of private and non-static methods for `@before` in web interfaces - Added support for validating parameter types to `vibe.web.web` (`vibe.web.validation`) - Added the possibility to customize the language selection in the translation context for web interface translations - Added optional support for matching request paths with mismatching trailing slash in web interfaces - `SessionVar`, if necessary, now starts a new session also for read accesses - HTTP sessions - Added a check to disallow storing types with aliasing in sessions - Session values are now always returned as `const` to avoid unintended mutation of the returned temporary - Added initial support for JSON and BSON based session stores - Added a Redis based HTTP session store (`vibe.db.redis.sessionstore.RedisSessionStore`) - Deprecated index operator based access of session values (recommended to use `vibe.web.web.SessionVar` instead) - Redis database driver - Added some missing Redis methods and rename `RedisClient.flushAll` to `deleteAll` - Added the `vibe.db.redis.types` module for type safe access of Redis keys - `RedisReply` is now a typed output range - Added a module for Redis with common high level idioms (`vibe.db.redis.idioms`) - Improved the Redis interface with better template constraints, support for interval specifications and support for `Nullable!T` to determine key existence - Made the `member` argument to the sorted set methods in `RedisDatabase` generic instead of `string` - [issue #811][issue811] - Added support for `ubyte[]` as a return type for various Redis methods (by sinkuu) - [pull #761][issue761] - MongoDB database driver - `MongoConnection.defaultPort` is now an `ushort` (by Martin Nowak) - [pull #725][issue725] - Added support for expiring indexes and dropping indexes/collections in the MongoDB client (by Márcio Martins) - [pull #799][issue799] - Added `MongoClient.getDatabases` (by Peter Eisenhower) - [pull #822][issue822] - Added an array based overload of `MongoCollection.ensureIndex` - [issue #824][issue824] - Added `MongoCursor.skip` as an alternative to setting the skip value using an argument to `find` (by Martin Nowak) - [pull 888][issue888] - HTTP client - Made the handling of redirect responses more specific in the HTTP client (reject unknown status codes) - Added support for using a proxy server in the HTTP client (by Etienne Cimon) - [pull #731][issue731] - Added `HTTPClientSettings.defaultKeepAliveTimeout` and handle the optional request count limit of keep-alive connections (by Etienne Cimon) - [issue 744][issue744], [pull #756][issue756] - Added an assertion to the HTTP client when a relative path is used for the request URL instead of constructing an invalid request - Avoid using chunked encoding for `HTTPClientRequest.writeJsonBody` - HTTP server - Added support for IP based client certificate validation in the HTTP server (by Eric Cornelius) - [pull #723][issue723] - Avoid using chunked encoding for `HTTPServerResponse.writeJsonBody` - [issue #619][issue619] - Added `HTTPServerResponse.waitForConnectionClose` to support certain kinds of long-polling applications - Compiles on DMD 2.064 up to DMD 2.067.0-b1 - All external dependencies are now version based (OpenSSL/libevent/libev) - Removed deprecated symbols of 0.7.20 - Increased the default fiber stack size to 512 KiB (32-bit) and 16 MiB (64-bit) respectively - [issue #861][issue861] - Enabled the use of `shared` delegates for `runWorkerTask` and avoid creation of a heap delegate - Added support for more parameter types in `runTask`/`runWorkerTask` by avoiding `Variant` - Added an initial implementation of a `Future!T` (future/promise) in `vibe.core.concurrency` - Deprecated the output range interface of `OutputStream`, use `vibe.stream.wrapper.StreamOutputRange` instead - Prefer `.toString()` to `cast(string)` when converting values to string in Diet templates (changes how `Json` values are converted!) - [issue #714][issue714] - Added variants of the `vibe.utils.validation` functions that don't throw - Added `UDPConnection.close()` - Deprecated `registerFormInterface` and `registerFormMethod` - Added support for implicit parameter conversion of arguments passed to `runTask`/`runWorkerTask` (by Martin Nowak) - [pull #719][issue719] - Added `vibe.stream.stdio` for vibe.d compatible wrapping of stdin/stdout and `std.stdio.File` (by Eric Cornelius) - [pull #729][issue729] - Added `vibe.stream.multicast.MultiCastStream` for duplicating a stream to multiple output streams (by Eric Cornelius) - [pull #732][issue732] - Added support for an `inotify` based directory watcher in the libevent driver (by Martin Nowak) - [pull #743][issue743] - Added support for `Nullable!T` in `vibe.data.serialization` - [issue #752][issue752] - Added a constructor for `BsonObjectID` that takes a specific time stamp (by Martin Nowak) - [pull #759][issue759] - Added output range based overloads of `std.stream.operations.readUntil` and `readLine` - Added `vibe.data.json.serializeToJsonString` - Added `vibe.inet.webform.formEncode` for encoding a dictionary/AA as a web form (by Etienne Cimon) - [pull #748][issue748] - `BsonObjectID.fromString` now throws an `Exception` instead of an `AssertError` for invalid inputs - Avoid using initialized static array for storing task parameters (by Михаил Страшун aka Dicebot) - [pull #778][issue778] - Deprecated the simple password hash functions due to their weak security - [issue #794][issue794] - Added support for serializing tuple fields - Added `convertJsonToASCII` to force escaping of all Unicode characters - see [issue #809][issue809] - Added a parameter to set the information log format for `setLogFormat` (by Márcio Martins) - [pull #808][issue808] - Serializer implementations now get the number of dictionary elements passed up front (by Johannes Pfau) - [pull #823][issue823] - Changed `readRequiredOption` to not throw when the `--help` switch was passed (by Jack Applegame) - [pull #803][issue803] - Added `RestInterfaceSettings` as the new way to configure REST interfaces - Implemented optional stripping of trailing underscores for REST parameters (allows the use of keywords as parameter names) - Made the `message` parameter of `enforceHTTP` `lazy` (by Mathias Lang aka Geod24) - [pull #839][issue839] - Improve the format of JSON parse errors to enable IDE go-to-line support - Removed all console and file system output from unit tests (partially by Etienne Cimon, [pull #852][issue852]) - Improved performance of libevent timers by avoiding redundant rescheduling of the master timer ### Bug fixes ### - Fixed BSON custom serialization of `const` classes - Fixed serialization of `DictionaryList` - [issue #621][issue621] - Fixed a bogus deprecation message for Diet script/style blocks without child nodes - Fixed an infinite loop in `HTTPRouter` when no routes were registered - [issue #691][issue691] - Fixed iterating over `const(DictionaryList)` (by Mathias Lang aka Geod24) - [pull #693][issue693] - Fixed an assertion in the HTTP file server that was triggered when drive letters were contained in the request path - [pull #694][issue694] - Fixed recognizing `application/javascript` in script tags to trigger the block syntax deprecation message - Fixed support for boolean parameters in web interfaces - Fixed falling back to languages without country suffix in the web interface generator - Fixed alignment of the backing memory for a `TaskLocal!T` - Fixed the port reported by `UDPConnection.bindAddress` when 0 was specified as the bind port (libevent) - Fixed busy looping the event loop when there is unprocessed UDP data - [issue #715][issue715] - Fixed `exitEventLoop()` to work when there is a busy tasks that calls `yield()` - [issue #720][issue720] - Avoid querying the clock when processing timers and no timers are pending (performance bug) - Fixed `ManualEvent.wait()` to work outside of a task (fixes various secondary facilities that use `ManualEvent` implicitly) - [issue #663][issue663] - Fixed encoding of `StreamOutputRange.put(dchar)` (by sinkuu) - [pull #733][issue733] - Fixed treating `undefined` JSON values as `null` when converting to a string - [issue #735][issue735] - Fixed using an `id` parameter together with `@path` in REST interfaces - [issue #738][issue738] - Fixed handling of multi-line responses in the SMTP client (by Etienne Cimon) - [pull #746][issue746] - Fixed compile error for certain uses of `Nullable!T` in web interfaces - Enable use of non-virtual access of the event driver using `VibeUseNativeDriverType` - Fixed building the "libev" configuration (by Lionello Lunesu) - [pull #755][issue755] - Fixed `TaskLocal!T` top properly call destructors after a task has ended (by Etienne Cimon) - [issue #753][issue753], [pull #754][issue754] - Fixed the name of `RedisDatabase.zcard` (was `Zcard`) - Fixed a possible race condition causing a hang in `MessageQueue.receive`/`receiveTimeout`(by Ilya Lyubimov) - [pull #760][issue760] - Fixed `RangeCounter` to behave properly when inserting single `char` values - Fixed `RedisDatabase.getSet` (by Stephan Dilly) - [pull #769][issue769] - Fixed out-of-range array access in the Diet template compiler when the last attribute of a tag is value-less (by Martin Nowak) - [pull #771][issue771] - Fixed output of line breaks in the Markdown compiler - Fixed handling of the `key` argument of `getRange`, `lrem` and `zincrby` in `RedisDatabase` (by sinkuu) - [pull #772][issue772] - Fixed handling of `Nullable!T` and `isISOExtStringSerializable` parameters in REST interfaces - Fixed escaping of Diet tag attributes with string interpolations (by sinkuu) - [pull #779][issue779] - Fixed handling a timeout smaller or equal to zero (infinity) for `RedisSubscriber.blisten` (by Etienne Cimon aka etcimon) - [issue #776][issue776], [pull #781][issue781] - Fixed handling of Unicode escape sequences in the JSON parser (by Etienne Cimon aka etcimon) - [pull #782][issue782] - Fixed `HTTPServerRequest.fullURL` for requests without a `Host` header - [issue #786][issue786] - Fixed `RedisClient` initialization for servers that require authentication (by Pedro Yamada aka yamadapc) - [pull #785][issue785] - Fixed the JSON parser to not accept numbers containing ':' - Removed an invalid assertion in `HTTPServerResponse.writeJsonBody` - [issue #788][issue788] - Fixed handling of explicit "identity" content encoding in the HTTP client (by sinkuu) - [pull #789][issue789] - Fixed `HTTPServerRequest.fullURL` for HTTPS requests with a non-default port (by Arjuna aka arjunadeltoso) - [pull #790][issue790] - Fixed detection of string literals in Diet template attributes - [issue #792][issue792] - Fixed output of Diet attributes using `'` as the string delimiter - Fixed detection of numeric types in `BsonSerializer` (do not treat `Nullable!T` as numeric) - Fixed the REST interface client to accept 201 responses (by Yuriy Glukhov) - [pull #806][issue806] - Fixed some potential lock related issues in the worker task handler loop - Fixed memory corruption when `TCPListenOptions.disableAutoClose` is used and the `TCPConnection` outlives the accepting task - [issue #807][issue807] - Fixed a range violation when parsing JSON strings that end with `[` or `{` - [issue #805][issue805] - Fixed compilation of `MongoCollection.aggregate` and support passing an array instead of multiple parameters - [issue #783][issue783] - Fixed compilation and formatting issues in the HTTP logger (by Márcio Martins) - [pull #808][issue808] - Fixed assertion condition in `DebugAllocator.realloc` - Fixed shutdown when daemon threads are involved - [issue #758][issue758] - Fixed some serialization errors for structs with variadic constructors or properties or with nested type declarations/aliases (by Rene Zwanenburg) - [pull #817][issue817], [issue #818][issue818], [pull #819][issue819] - The HTTP server now terminates a connection if the response was not completely written to avoid protocol errors - Fixed an assertion triggered by a `vibe.web.rest` server trying to write an error message when a response had already been made - [issue #821][issue821] - Fixed using `TaskLocal!T` with types that have certain kinds of "copy constructors" - [issue #825][issue825] - Fixed `-version=VibeNoSSL` (by Dragos Carp) - [pull #834][issue834] - Use "bad request" replies instead of "internal server error" for various cases where a HTTP request is invalid (by Marc Schütz) - [pull #827][issue827] - Removed a leading newline in compiled Diet templates - Fixed serialization of nested arrays as JSON (by Rene Zwanenburg) - [issue #840][issue840], [pull #841][issue841] - Fixed OpenSSL error messages in certain cases (by Andrea Agosti) - [pull #796][issue796] - Fixed parsing of MongoDB URLs containing `/` in the password field (by Martin Nowak) - [pull #843][issue843] - Fixed an assertion in `TCPConnection.waitForData` when called outside of a task (libevent) - [issue #829][issue829] - Fixed an `InvalidMemoryOperationError` in `HTTPClientResponse.~this()` - Fixed a memory corruption issue for HTTPS servers (by Etienne Cimon) - [issue #846][issue846], [pull #849][issue849] - Fixed low-precision floating point number output in `JsonStringSerializer` - Fixed compilation in release mode (not recommended for safety reasons!) - [issue #847][issue847] - Fixed low-precision floating point number output in the Redis client - [issue #857][issue857] - Fixed handling of NaN in the JSON module (output as `undefined`) (by David Monagle)- [pull #860][issue860] - Fixed the Redis subscriber implementation (by Etienne Cimon) - [issue #855][issue855], [pull #815][issue815] - Fixed compilation of the `Isolated!T` framework - [issue #801][issue801] - Fixed an `InvalidMemoryOperationError` in `DebugAllocator` (by Etienne Cimon) - [pull #848][issue848] - Fixed detection of numeric types in `JsonSerializer` (do not treat `Nullable!T` as numeric) (by Jack Applegame) - [issue #686][issue868], [pull #869][issue869] - Fixed error handling in `Win32TCPConnection.connect` and improved error messages - Fixed ping handling of WebSocket ping messages (by Vytautas Mickus aka Eximius) - [pull #883][issue883] - Fixed always wrapping the e-mail address in angular brackets in the SMTP client (by ohenley) - [pull #887][issue887] - Fixed custom serialization of `const` instances (by Jack Applegame) - [pull #879][issue879] - Fixed the `RedisDatabase.set*X` to properly test the success condition (by Stephan Dilly aka Extrawurst) - [pull #890][issue890] - Fixed `sleep(0.seconds)` to be a no-op instead of throwing an assertion error - Fixed a potential resource leak in `HashMap` by using `freeArray` instead of directly deallocating the block of memory (by Etienne Cimon) - [pull #893][issue893] [issue619]: https://github.com/vibe-d/vibe.d/issues/619 [issue621]: https://github.com/vibe-d/vibe.d/issues/621 [issue663]: https://github.com/vibe-d/vibe.d/issues/663 [issue684]: https://github.com/vibe-d/vibe.d/issues/684 [issue684]: https://github.com/vibe-d/vibe.d/issues/684 [issue691]: https://github.com/vibe-d/vibe.d/issues/691 [issue693]: https://github.com/vibe-d/vibe.d/issues/693 [issue694]: https://github.com/vibe-d/vibe.d/issues/694 [issue714]: https://github.com/vibe-d/vibe.d/issues/714 [issue715]: https://github.com/vibe-d/vibe.d/issues/715 [issue719]: https://github.com/vibe-d/vibe.d/issues/719 [issue720]: https://github.com/vibe-d/vibe.d/issues/720 [issue723]: https://github.com/vibe-d/vibe.d/issues/723 [issue725]: https://github.com/vibe-d/vibe.d/issues/725 [issue729]: https://github.com/vibe-d/vibe.d/issues/729 [issue731]: https://github.com/vibe-d/vibe.d/issues/731 [issue732]: https://github.com/vibe-d/vibe.d/issues/732 [issue733]: https://github.com/vibe-d/vibe.d/issues/733 [issue735]: https://github.com/vibe-d/vibe.d/issues/735 [issue738]: https://github.com/vibe-d/vibe.d/issues/738 [issue743]: https://github.com/vibe-d/vibe.d/issues/743 [issue744]: https://github.com/vibe-d/vibe.d/issues/744 [issue746]: https://github.com/vibe-d/vibe.d/issues/746 [issue748]: https://github.com/vibe-d/vibe.d/issues/748 [issue752]: https://github.com/vibe-d/vibe.d/issues/752 [issue753]: https://github.com/vibe-d/vibe.d/issues/753 [issue754]: https://github.com/vibe-d/vibe.d/issues/754 [issue755]: https://github.com/vibe-d/vibe.d/issues/755 [issue756]: https://github.com/vibe-d/vibe.d/issues/756 [issue757]: https://github.com/vibe-d/vibe.d/issues/757 [issue758]: https://github.com/vibe-d/vibe.d/issues/758 [issue759]: https://github.com/vibe-d/vibe.d/issues/759 [issue760]: https://github.com/vibe-d/vibe.d/issues/760 [issue761]: https://github.com/vibe-d/vibe.d/issues/761 [issue769]: https://github.com/vibe-d/vibe.d/issues/769 [issue771]: https://github.com/vibe-d/vibe.d/issues/771 [issue772]: https://github.com/vibe-d/vibe.d/issues/772 [issue776]: https://github.com/vibe-d/vibe.d/issues/776 [issue778]: https://github.com/vibe-d/vibe.d/issues/778 [issue779]: https://github.com/vibe-d/vibe.d/issues/779 [issue781]: https://github.com/vibe-d/vibe.d/issues/781 [issue782]: https://github.com/vibe-d/vibe.d/issues/782 [issue783]: https://github.com/vibe-d/vibe.d/issues/783 [issue785]: https://github.com/vibe-d/vibe.d/issues/785 [issue786]: https://github.com/vibe-d/vibe.d/issues/786 [issue788]: https://github.com/vibe-d/vibe.d/issues/788 [issue789]: https://github.com/vibe-d/vibe.d/issues/789 [issue790]: https://github.com/vibe-d/vibe.d/issues/790 [issue792]: https://github.com/vibe-d/vibe.d/issues/792 [issue794]: https://github.com/vibe-d/vibe.d/issues/794 [issue796]: https://github.com/vibe-d/vibe.d/issues/796 [issue799]: https://github.com/vibe-d/vibe.d/issues/799 [issue801]: https://github.com/vibe-d/vibe.d/issues/801 [issue803]: https://github.com/vibe-d/vibe.d/issues/803 [issue805]: https://github.com/vibe-d/vibe.d/issues/805 [issue806]: https://github.com/vibe-d/vibe.d/issues/806 [issue807]: https://github.com/vibe-d/vibe.d/issues/807 [issue808]: https://github.com/vibe-d/vibe.d/issues/808 [issue808]: https://github.com/vibe-d/vibe.d/issues/808 [issue809]: https://github.com/vibe-d/vibe.d/issues/809 [issue811]: https://github.com/vibe-d/vibe.d/issues/811 [issue815]: https://github.com/vibe-d/vibe.d/issues/815 [issue817]: https://github.com/vibe-d/vibe.d/issues/817 [issue818]: https://github.com/vibe-d/vibe.d/issues/818 [issue819]: https://github.com/vibe-d/vibe.d/issues/819 [issue821]: https://github.com/vibe-d/vibe.d/issues/821 [issue822]: https://github.com/vibe-d/vibe.d/issues/822 [issue823]: https://github.com/vibe-d/vibe.d/issues/823 [issue824]: https://github.com/vibe-d/vibe.d/issues/824 [issue825]: https://github.com/vibe-d/vibe.d/issues/825 [issue827]: https://github.com/vibe-d/vibe.d/issues/827 [issue829]: https://github.com/vibe-d/vibe.d/issues/829 [issue834]: https://github.com/vibe-d/vibe.d/issues/834 [issue839]: https://github.com/vibe-d/vibe.d/issues/839 [issue840]: https://github.com/vibe-d/vibe.d/issues/840 [issue841]: https://github.com/vibe-d/vibe.d/issues/841 [issue843]: https://github.com/vibe-d/vibe.d/issues/843 [issue845]: https://github.com/vibe-d/vibe.d/issues/845 [issue846]: https://github.com/vibe-d/vibe.d/issues/846 [issue847]: https://github.com/vibe-d/vibe.d/issues/847 [issue848]: https://github.com/vibe-d/vibe.d/issues/848 [issue849]: https://github.com/vibe-d/vibe.d/issues/849 [issue855]: https://github.com/vibe-d/vibe.d/issues/855 [issue860]: https://github.com/vibe-d/vibe.d/issues/860 [issue861]: https://github.com/vibe-d/vibe.d/issues/861 [issue868]: https://github.com/vibe-d/vibe.d/issues/868 [issue869]: https://github.com/vibe-d/vibe.d/issues/869 [issue879]: https://github.com/vibe-d/vibe.d/issues/879 [issue883]: https://github.com/vibe-d/vibe.d/issues/883 [issue887]: https://github.com/vibe-d/vibe.d/issues/887 [issue888]: https://github.com/vibe-d/vibe.d/issues/888 [issue890]: https://github.com/vibe-d/vibe.d/issues/890 [issue893]: https://github.com/vibe-d/vibe.d/issues/893 v0.7.20 - 2014-06-03 -------------------- The `vibe.web.web` web interface generator module has been extended with some important features, making it a full replacement (and more) of the old `registerFormInterface` functionality. Other important changes include the use of strong TLS ciphers out of the box, as well as a heavily optimized `URLRouter` implementation and support for compile-time localization of Diet templates. ### Features and improvements ### - Web interface generator and Diet template system - Added `vibe.web.web.terminateSession()` and `redirect()` - Added support for `struct` and array parameters, as well as `Nullable!T` in `vibe.web.web` - Added the `@errorDisplay` annotation to `vibe.web.web` to enable automatic exception display using an existing request handler - Added built-in, compile-time, gettext compatible localization support for Diet templates using the `tag& text` syntax - HTTP router - Implemented a new match tree based routing algorithm for `URLRouter`, resulting in great speedups for complex routing setups - Added `URLRouter.prefix` to configure a prefix to append to every route - The `HTTPRouter` router interface is scheduled for removal - Serialization system - Added `@asArray` to force serialization of composite types as arrays instead of dictionaries - Added support for using a pre-allocated buffer for `serializeToBson` - Added support for custom serialization representations of user defined types using `toRepresentation`/`fromRepresentation` methods - [issue #618][issue618] - Made `DictionaryList` serializable as an array by adding `toRepresentation`/`fromRepresentation` - [issue #621][issue621] - SSL/TLS - Using only strong ciphers by default for SSL server contexts - Added out-of-the box support for perfect forward secrecy (PFS) (by Martin Nowak) - [pull #630][issue630] - Changed the default from `SSLVersion.tls1` (fixed TLS 1.0) to `SSLVersion.any` (SSL 3 and up, including TLS 1.1 and TLS 1.2) - Added `SMTPClientSettings.sslContextSetup` to enable customization of the SSL context (e.g. adding trusted certificates) - Upgraded the Windows OpenSSL binaries to 1.0.1g - Performance tuning - Added `HTTPServerOption.errorStackTraces` to make costly stack trace generation optional - Arguments to the logging functions are now evaluated lazily to avoid computations when messages are not actually logged - Added support for direct de-serialization of MongoDB query results - Reduced memory allocations in the HTTP logger module - Heavily reduced the number of memory allocations happening in the MongoDB driver - see [issue #633][issue633] - General - Removed deprecated symbols and deprecated symbols that were scheduled for deprecation - Added `runWorkerTaskH` to run a worker task and return its handle in one step (by Luca Niccoli aka lultimouomo) - [pull #601][issue601] - Added `createTestHTTPServerRequest` and `createTestHTTPServerResponse` to support writing unit tests - Added `vibe.core.file.readFile`, `readFileUTF8`, `writeFile` and `writeFileUTF8` - Added a limited overload of `RedisDatabase.zrevRangeByScore` and fix the type of the `start`/`end` parameters (by Jens K. Mueller) - [pull #637][issue637] - Added `TCPListenOptions.disableAutoClose` to make incoming TCP connections independent of the initial handler task - Added `vibe.core.concurrency.thisTid` as an alias to `Task.getThis()` for improved API compatibility to `std.concurrency` - Added an overload of `UDPConnection.recv` taking a timeout parameter - [issue #540][issue540] - Added `toString` to `HTTPRequest` and `HTTPResponse` for convenient logging - Added `MarkdownSettings` with additional support of setting the base heading level of the generated HTML - Added `TCPConnection.keepAlive` to set the `SO_KEEPALIVE` option - [issue #622][issue622] - `Error` derived exceptions are not caught anymore (use `-version=VibeDebugCatchAll` to get the old unsafe behavior) - Annotated some basic modules with `@safe`/`@trusted`/`pure` - Extended `ProxyStream` to optionally take distinct streams for input and output - Replaced all remaining uses of `renderCompat` with `render` - Removed unused variables and made `Bson.toString` `const` (thanks to Brian Schott aka Hackerpilot) - [issue #659][issue659] ### Bug fixes ### - Fixed the order of events reported by `setTaskEventCallback` when new tasks are started within an existing task - Fixed HTTP multi-file uploads by changing `HTTPServerRequest.files` to a `DictionaryList` - Fixed `@byName` to work for serializing (associative) arrays of enums - Fixed SSL based SMTP connections (by Martin Nowak) - [pull #609][issue609] - Fixed Diet text blocks (`tag.` style) to properly remove the input file indentation - [issue #614][issue614] - Fixed `isStronglyIsolated!T` to work for interface types - Fixed `filterURLEncode` to encode certain special characters (such as "{") - [issue #632][issue632] - Fixed a crash when accessing vibe.d event functionality from within `shared static ~this` - Fixed `Task.join` and `Task.interrupt` to work when called from outside of the event loop (e.g. when `processEvents` is used instead of `runEventLoop`) - [issue #443][issue443] - Fixed serialization of `const` class instances (by Jack Applegame) - [issue #653][issue653] - Fixed compilation of `renderCompat!()` on GDC (invalid use of `va_list`/`void*`) - Fixed handling of paths with empty path entries (e.g. "/some///path") - [issue #410][issue410] - Fixed a crash caused by `GCAllocator` - `GC.extend` is now used instead of `GC.realloc` to sidestep the issue - [issue #470][issue470] - Fixed rendering of Markdown links with styled captions - Fixed `Path.relativeTo` step over devices for UNC paths on Windows - Fixed compilation on 2.064 frontend based GDC - [issue #647][issue647] - Fixed output of empty lines in "tag." style Diet template text blocks [issue410]: https://github.com/vibe-d/vibe.d/issues/410 [issue443]: https://github.com/vibe-d/vibe.d/issues/443 [issue470]: https://github.com/vibe-d/vibe.d/issues/470 [issue540]: https://github.com/vibe-d/vibe.d/issues/540 [issue601]: https://github.com/vibe-d/vibe.d/issues/601 [issue609]: https://github.com/vibe-d/vibe.d/issues/609 [issue614]: https://github.com/vibe-d/vibe.d/issues/614 [issue618]: https://github.com/vibe-d/vibe.d/issues/618 [issue621]: https://github.com/vibe-d/vibe.d/issues/621 [issue622]: https://github.com/vibe-d/vibe.d/issues/622 [issue630]: https://github.com/vibe-d/vibe.d/issues/630 [issue632]: https://github.com/vibe-d/vibe.d/issues/632 [issue633]: https://github.com/vibe-d/vibe.d/issues/633 [issue637]: https://github.com/vibe-d/vibe.d/issues/637 [issue647]: https://github.com/vibe-d/vibe.d/issues/647 [issue653]: https://github.com/vibe-d/vibe.d/issues/653 [issue659]: https://github.com/vibe-d/vibe.d/issues/659 v0.7.19 - 2014-04-09 -------------------- Apart from working on the latest DMD versions, this release includes an important security enhancement in the form of new experimental code for SSL certificate validation. Other major changes include many improvements to the Diet template compiler, various performance improvements, a new `FileDescriptorEvent` to interface with other I/O libraries, a new web interface generator similar to the REST interface generator, many improvements to the Redis client, and a bunch of other fixes and additions. ### Features and improvements ### - Compiles with DMD 2.065 (and the current DMD HEAD) - API improvements for the SSL support code - Implemented SSL certificate validation (partially by David Nadlinger aka klickverbot, [pull #474][issue474]) - Removed the old `EventedObject` interface - Implemented support for string includes in Diet templates (idea by Stefan Koch aka Uplink_Coder) - [issue #482][issue482] - JSON answers in the REST interface generator are now directly serialized, improving performance and memory requirements - Reimplemented the timer code to guarantee light weight timers on all event drivers - `Libevent2TCPConnection` now has a limited read buffer size to avoid unbounded memory consumption - Fixed the semantics of `ConnectionStream.empty` and `connected` - `empty` is generally useful for read loops and `connected` for write loops - Added an overload of `runTask` that takes a delegate with additional parameters to bind to avoid memory allocations in certain situations - Added `vibe.core.core.createFileDescriptorEvent` to enable existing file descriptors to be integrated into vibe.d's event loop - HTTP response compression is now disabled by default (controllable by the new `HTTPServerSettings.useCompressionIfPossible) - Removed the deprecated `sslKeyFile` and `sslCertFile` fields from `HTTPServerSettings` - Removed the compatibility alias `Signal` (alias for `ManualEvent`) - `:htmlescape` in Diet templates is now processed at compile time if possible - Added support for `Rebindable!T` in `isStronglyIsolated` and `isWeaklyIsolated` - [issue #421][issue421] - Added `RecursiveTaskMutex` - `Throwable` is now treated as weakly isolated to allow passing exceptions using `vibe.core.concurrency.send` - `exitEventLoop` by default now only terminates the current thread's event loop and always works asynchronously - `Session` is now a `struct` instead of a `class` - Added support for storing arbitrary types in `Session` - Moved the REST interface generator from `vibe.http.rest` to `vibe.web.rest` - Added a new web interface generator (`vibe.web.web`), similar to `vibe.http.form`, but with full support for attribute based customization - Added a compile time warning when neither `VibeCustomMain`, nor `VibeDefaultMain` versions are specified - starts the transition from `VibeCustomMain` to `VibeDefaultMain` - Added `requireBoundsCheck` to the build description - Added assertions to help debug accessing uninitialized `MongoConnection` values - Added `logFatal` as a shortcut to `log` called with `LogLevel.fatal` (by Daniel Killebrew aka gittywithexcitement) - [pull #441][issue441] - Empty JSON request bodies are now handled gracefully in the HTTP server (by Ryan Scott aka Archytaus) - [pull #440][issue440] - Improved documentation of `sleep()` - [issue #434][issue434] - The libevent2 and Win32 event drivers now outputs proper error messages for socket errors - Changed `setTaskEventCallback` to take a delegate with a `Task` parameter instead of `Fiber` - Added a `Task.taskCounter` property - `AutoFreeListAllocator.realloc` can now reuse blocks of memory and uses `realloc` on the base allocator if possible - HTML forms now support multiple values per key - Inverted the `no_dns` parameter of `EventDriver.resolveHost` to `use_dns` to be consistent with `vibe.core.net.resolveHost` - [issue #430][issue430] - `Task` doesn't `alias this` to `TaskFiber` anymore, but forwards just a selected set of methods - Added `vibe.core.args.readRequiredOption - [issue #442][issue442] - `NetworkAddress` is now fully `pure nothrow` - Refactored the Redis client to use much less allocations and a much shorter source code - Added `Bson.toString()` (by David Nadlinger aka klickverbot) - [pull #468][issue468] - Added `connectTCP(NetworkAddress)` and `NetworkAddress.toString()` (by Stefan Koch aka Uplink_Coder) - [pull #485][issue485] - Added `NetworkAddress.toAddressString` to output only the address portion (without the port number) - Added `compileDietFileIndent` to generate indented HTML output - Added Travis CI integration (by Martin Nowak) - [pull #486][issue486] - Added `appendToFile` to conveniently append to a file without explicitly opening it (by Stephan Dilly aka extrawurst) - [pull #489][issue489] - Tasks started before starting the event loop are now deferred until after the loop has been started - Worker threads are started lazily instead of directly on startup - Added `MongoCursor.limit()` to limit the amount of documents returned (by Damian Ziemba aka nazriel) - [pull #499][issue499] - The HTTP client now sets a basic-auth header when the request URL contains a username/password (by Damian Ziemba aka nazriel) - [issue #481][issue481], [pull #501][issue501] - Added `RedisClient.redisVersion` (by Fabian Wallentowitz aka fabsi88) - [pull #502][issue502] - Implemented handling of doctypes other than HTML 5 in the Diet compiler (by Damian Ziemba aka nazriel) - [issue #505][issue505], [pull #509][issue509] - Boolean attributes in Diet templates are now written without value for HTML 5 documents (by Damian Ziemba aka nazriel) - [issue #475][issue475], [pull #512][issue512] - Empty "class" attributes in Diet templates are not written to the final HTML output (by Damian Ziemba aka nazriel) - [issue #372][issue372], [pull #519][issue519] - Implemented PUB/SUB support for the Redis client (by Michael Eisendle with additional fixes by Etienne Cimon aka etcimon) - The logging functions take now any kind of string instead of only `string` (by Mathias Lang aka Geod24) - [pull #532][issue532] - Added `SMTPClientSettings.peerValidationMode` (by Stephan Dilly aka Extrawurst) - [pull #528][issue528] - Diet templates that are set to `null` are now omitted in the HTML output (by Damian Ziemba aka nazriel) - [issue #520][issue520], [pull #521][issue521] - Extended the REST interface generator to cope with any type of error response and to always throw a `RestException` on error (by Stephan Dilly aka Extrawurst) - [pull #533][issue533] - Added support for [text blocks](http://jade-lang.com/reference/#blockinatag) in Diet templates (by Damian Ziemba aka nazriel) - [issue #510][issue510], [pull #518][issue518] - Added `RedisClient.blpop` and changed all numbers to `long` to be in line with Redis (by Etienne Cimon aka etcimon) - [pull #527][issue527] - Changed `WebSocket.receiveBinary` and `WebSocket.receiveText` to strictly expect the right type by default (by Martin Nowak) - [pull #543][issue543] - Avoid using an exception to signal HTTP 404 errors for unprocessed requests, resulting in a large performance increas for that case - Modernized the Diet templates used for the example projects (by Damian Ziemba aka nazriel) - [pull #551][issue551] - Added WebDAV HTTP status codes to the `HTTPStatusCode` enum (by Dmitry Mostovenko aka TrueBers) - [pull #574][issue574] - Added support for multiple recipient headers (including "CC" and "BCC") in `sendMail` (by Stephan Dilly aka Extrawurst) - [pull #582][issue582] - Added support for comma separated recipients in `sendMail` - Added SSL support for the MongoDB client (by Daniel Killebrew aka gittywithexcitement) - [issue #575][issue575], [pull #587][issue587] - Made all overloads of `listenHTTPPlain` private (as they were supposed to be since a year) - Added using `-version=VibeDisableCommandLineParsing` to disable default command line argument interpretation - Added using `-version=VibeNoSSL` to disable using OpenSSL and added free functions to create SSL contexts/streams - Functions in `vibe.data.json` now throw a `JSONException` instead of a bare `Exception` (by Luca Niccoli aka lultimouomo) - [pull #590][issue590] - Functions in `vibe.http.websocket` now throw a `WebSocketException` instead of a bare `Exception` (by Luca Niccoli aka lultimouomo) - [pull #590][issue590] ### Bug fixes ### - Fixed a condition under which a `WebSocket` could still be used after its handler function has thrown an exception - [issue #407][issue407] - Fixed a `null` pointer dereference in `Libevent2TCPConnection` when trying to read from a closed connection - Fixed the HTTP client to still properly shutdown the connection when an exception occurs during the shutdown - Fixed `SSLStream` to perform proper locking for multi-threaded servers - Fixed the signature of `TaskLocal.opAssign` - [issue #432][issue432] - Fixed thread shutdown in cases where multiple threads are used - [issue #419][issue419] - Fixed SIGINT/SIGTERM application shutdown - [issue #419][issue419] - Fixed `HashMap` to properly handle `null` keys - Fixed processing WebSocket requests sent from IE 10 and IE 11 - Fixed the HTTP client to assume keep-alive for HTTP/1.1 connections that do not explicitly specify something else (by Daniel Killebrew aka gittywithexcitement) - [issue #448][issue448], [pull #450][issue450] - Fixed `Win32FileStream` to report itself as readable for `FileMode.createTrunc` - Fixed a possible memory corruption bug for an assertion in `AllocAppender` - Fixed clearing of cookies on old browsers - [issue #453][issue453] - Fixed handling of `yield()`ed tasks so that events are guaranteed to be processed - Fixed `Libevent2EventDriver.resolveHost` to take the local hosts file into account (by Daniel Killebrew aka gittywithexcitement) - [issue #289][issue289], [pull #460][issue460] - Fixed `RedisClient.zcount` to issue the right command (by David Nadlinger aka klickverbot) - [pull #467][issue467] - Fixed output of leading white space in the `HTMLLogger` - now replaced by ` ` - Fixed serialization of AAs with `const(string)` or `immutable(string)` keys (by David Nadlinger aka klickverbot) - [pull #473][issue473] - Fixed double-URL-decoding of path parameters in `URLRouter` - Fixed `URL.toString()` to output username/password, if set - Fixed a crash caused by a double-free when an SSL handshake had failed - Fixed `Libevent2UDPConnection.recv` to work inside of a `Task` - Fixed handling of "+" in the path part of URLs (is *not* replaced by a space) - [issue #498][issue498] - Fixed handling of `
Minimum Log Level:
`); m_logFile.flush(); } private void writeFooter(){ if( !m_logFile.isOpen ) return; m_logFile.writeln( `
`); m_logFile.flush(); } private static void filterHTMLEscape(R, S)(ref R dst, S str) { for (;!str.empty;str.popFront()) { auto ch = str.front; switch (ch) { default: dst.put(ch); break; case '<': dst.put("<"); break; case '>': dst.put(">"); break; case '&': dst.put("&"); break; } } } } import std.conv; /** A logger that logs in syslog format according to RFC 5424. Messages can be logged to files (via file streams) or over the network (via TCP or SSL streams). Standards: Conforms to RFC 5424. */ final class SyslogLogger : Logger { import vibe.core.stream; private { string m_hostName; string m_appName; OutputStream m_ostream; Facility m_facility; } /// Facilities enum Facility { kern, /// kernel messages user, /// user-level messages mail, /// mail system daemon, /// system daemons auth, /// security/authorization messages syslog, /// messages generated internally by syslogd lpr, /// line printer subsystem news, /// network news subsystem uucp, /// UUCP subsystem clockDaemon, /// clock daemon authpriv, /// security/authorization messages ftp, /// FTP daemon ntp, /// NTP subsystem logAudit, /// log audit logAlert, /// log alert cron, /// clock daemon local0, /// local use 0 local1, /// local use 1 local2, /// local use 2 local3, /// local use 3 local4, /// local use 4 local5, /// local use 5 local6, /// local use 6 local7, /// local use 7 } /// Severities private enum Severity { emergency, /// system is unusable alert, /// action must be taken immediately critical, /// critical conditions error, /// error conditions warning, /// warning conditions notice, /// normal but significant condition info, /// informational messages debug_, /// debug-level messages } /// syslog message format (version 1) /// see section 6 in RFC 5424 private enum SYSLOG_MESSAGE_FORMAT_VERSION1 = "<%.3s>1 %s %.255s %.48s %.128s %.32s %s %s"; /// private enum NILVALUE = "-"; /// private enum BOM = x"EFBBBF"; /** Construct a SyslogLogger. The log messages are sent to the given OutputStream stream using the given Facility facility.Optionally the appName and hostName can be set. The appName defaults to null. The hostName defaults to hostName(). Note that the passed stream's write function must not use logging with a level for that this Logger's acceptsLevel returns true. Because this Logger uses the stream's write function when it logs and would hence log forevermore. */ this(OutputStream stream, Facility facility, string appName = null, string hostName = hostName()) { m_hostName = hostName != "" ? hostName : NILVALUE; m_appName = appName != "" ? appName : NILVALUE; m_ostream = stream; m_facility = facility; this.minLevel = LogLevel.debug_; } /** Logs the given LogLine msg. It uses the msg's time, level, and text field. */ override void beginLine(ref LogLine msg) @trusted { // OutputStream isn't @safe auto tm = msg.time; import core.time; // at most 6 digits for fractional seconds according to RFC static if (is(typeof(tm.fracSecs))) tm.fracSecs = tm.fracSecs.total!"usecs".dur!"usecs"; else tm.fracSec = FracSec.from!"usecs"(tm.fracSec.usecs); auto timestamp = tm.toISOExtString(); Severity syslogSeverity; // map LogLevel to syslog's severity final switch(msg.level) { case LogLevel.none: assert(false); case LogLevel.trace: return; case LogLevel.debugV: return; case LogLevel.debug_: syslogSeverity = Severity.debug_; break; case LogLevel.diagnostic: syslogSeverity = Severity.info; break; case LogLevel.info: syslogSeverity = Severity.notice; break; case LogLevel.warn: syslogSeverity = Severity.warning; break; case LogLevel.error: syslogSeverity = Severity.error; break; case LogLevel.critical: syslogSeverity = Severity.critical; break; case LogLevel.fatal: syslogSeverity = Severity.alert; break; } assert(msg.level >= LogLevel.debug_); import std.conv : to; // temporary workaround for issue 1016 (DMD cross-module template overloads error out before second attempted module) auto priVal = m_facility * 8 + syslogSeverity; alias procId = NILVALUE; alias msgId = NILVALUE; alias structuredData = NILVALUE; auto text = msg.text; import std.format : formattedWrite; auto str = appender!string(); // FIXME: avoid GC allocation (&str).formattedWrite(SYSLOG_MESSAGE_FORMAT_VERSION1, priVal, timestamp, m_hostName, BOM ~ m_appName, procId, msgId, structuredData, BOM); m_ostream.write(str.data); } override void put(scope const(char)[] text) @trusted { m_ostream.write(text); } override void endLine() @trusted { m_ostream.write("\n"); m_ostream.flush(); } unittest { import vibe.core.file; auto fstream = createTempFile(); auto logger = new SyslogLogger(fstream, Facility.local1, "appname", null); LogLine msg; import std.datetime; import core.thread; static if (is(typeof(SysTime.init.fracSecs))) auto fs = 1.dur!"usecs"; else auto fs = FracSec.from!"usecs"(1); msg.time = SysTime(DateTime(0, 1, 1, 0, 0, 0), fs); foreach (lvl; [LogLevel.debug_, LogLevel.diagnostic, LogLevel.info, LogLevel.warn, LogLevel.error, LogLevel.critical, LogLevel.fatal]) { msg.level = lvl; logger.beginLine(msg); logger.put("αβγ"); logger.endLine(); } fstream.close(); import std.file; import std.string; auto lines = splitLines(readText(fstream.path().toNativeString()), KeepTerminator.yes); assert(lines.length == 7); assert(lines[0] == "<143>1 0000-01-01T00:00:00.000001 - " ~ BOM ~ "appname - - - " ~ BOM ~ "αβγ\n"); assert(lines[1] == "<142>1 0000-01-01T00:00:00.000001 - " ~ BOM ~ "appname - - - " ~ BOM ~ "αβγ\n"); assert(lines[2] == "<141>1 0000-01-01T00:00:00.000001 - " ~ BOM ~ "appname - - - " ~ BOM ~ "αβγ\n"); assert(lines[3] == "<140>1 0000-01-01T00:00:00.000001 - " ~ BOM ~ "appname - - - " ~ BOM ~ "αβγ\n"); assert(lines[4] == "<139>1 0000-01-01T00:00:00.000001 - " ~ BOM ~ "appname - - - " ~ BOM ~ "αβγ\n"); assert(lines[5] == "<138>1 0000-01-01T00:00:00.000001 - " ~ BOM ~ "appname - - - " ~ BOM ~ "αβγ\n"); assert(lines[6] == "<137>1 0000-01-01T00:00:00.000001 - " ~ BOM ~ "appname - - - " ~ BOM ~ "αβγ\n"); removeFile(fstream.path().toNativeString()); } } /// Returns: this host's host name. /// /// If the host name cannot be determined the function returns null. private string hostName() { string hostName; version (Posix) { import core.sys.posix.sys.utsname; import core.sys.posix.unistd : gethostname; utsname name; if (uname(&name)) return hostName; hostName = name.nodename.to!string(); import std.socket; auto ih = new InternetHost; if (!ih.getHostByName(hostName)) return hostName; hostName = ih.name; if (!hostName.length) { char[256] buf; if (gethostname(buf.ptr, cast(int) buf.length) == 0) { ubyte len; for (; len < buf.length && buf[len] != 0; len++) {} hostName = buf[0 .. len].idup; } } } else version (Windows) { import core.sys.windows.winbase; import core.sys.windows.winsock2 : gethostname; wchar[512] buf; uint size = cast(uint) buf.length; if (GetComputerNameExW(COMPUTER_NAME_FORMAT.ComputerNamePhysicalDnsFullyQualified, buf.ptr, &size)) { hostName = buf[0 .. size].to!string(); } if (!hostName.length) { char[256] name; if (gethostname(name.ptr, cast(int) name.length) == 0) { ubyte len; for (; len < name.length && name[len] != 0; len++) {} hostName = name[0 .. len].idup; } } } return hostName; } private { __gshared shared(Logger)[] ss_loggers; shared(FileLogger) ss_stdoutLogger; } private shared(Logger)[] getLoggers() nothrow @trusted { return ss_loggers; } package void initializeLogModule() { version (Windows) { version (VibeWinrtDriver) enum disable_stdout = true; else { enum disable_stdout = false; if (!GetStdHandle(STD_OUTPUT_HANDLE) || !GetStdHandle(STD_ERROR_HANDLE)) return; } } else enum disable_stdout = false; static if (!disable_stdout) { ss_stdoutLogger = cast(shared)new FileLogger(stdout, stderr); { auto l = ss_stdoutLogger.lock(); l.minLevel = LogLevel.info; l.format = FileLogger.Format.plain; } registerLogger(ss_stdoutLogger); bool[4] verbose; version (VibeNoDefaultArgs) {} else { readOption("verbose|v" , &verbose[0], "Enables diagnostic messages (verbosity level 1)."); readOption("vverbose|vv", &verbose[1], "Enables debugging output (verbosity level 2)."); readOption("vvv" , &verbose[2], "Enables high frequency debugging output (verbosity level 3)."); readOption("vvvv" , &verbose[3], "Enables high frequency trace output (verbosity level 4)."); } foreach_reverse (i, v; verbose) if (v) { setLogFormat(FileLogger.Format.thread); setLogLevel(cast(LogLevel)(LogLevel.diagnostic - i)); break; } } } private struct LogOutputRange { LogLine info; ScopedLock!Logger* logger; @safe: this(ref ScopedLock!Logger logger, string file, int line, LogLevel level) { () @trusted { this.logger = &logger; } (); try { () @trusted { this.info.time = Clock.currTime(UTC()); }(); // not @safe as of 2.065 //this.info.mod = mod; //this.info.func = func; this.info.file = file; this.info.line = line; this.info.level = level; this.info.thread = () @trusted { return Thread.getThis(); }(); // not @safe as of 2.065 this.info.threadID = makeid(this.info.thread); this.info.fiber = () @trusted { return Fiber.getThis(); }(); // not @safe as of 2.065 this.info.fiberID = makeid(this.info.fiber); } catch (Exception e) { try { () @trusted { writefln("Error during logging: %s", e.toString()); }(); // not @safe as of 2.065 } catch(Exception) {} assert(false, "Exception during logging: "~e.msg); } this.logger.beginLine(info); } void finalize() { logger.endLine(); } void put(scope const(char)[] text) { if (text.empty) return; if (logger.multilineLogger) logger.put(text); else { auto rng = text.splitter('\n'); logger.put(rng.front); rng.popFront; foreach (line; rng) { logger.endLine(); logger.beginLine(info); logger.put(line); } } } void put(char ch) @trusted { put((&ch)[0 .. 1]); } void put(dchar ch) { static import std.utf; if (ch < 128) put(cast(char)ch); else { char[4] buf; auto len = std.utf.encode(buf, ch); put(buf[0 .. len]); } } private uint makeid(T)(T ptr) @trusted { return (cast(ulong)cast(void*)ptr & 0xFFFFFFFF) ^ (cast(ulong)cast(void*)ptr >> 32); } } private version (Windows) { import core.sys.windows.windows; enum STD_OUTPUT_HANDLE = cast(DWORD)-11; enum STD_ERROR_HANDLE = cast(DWORD)-12; extern(System) HANDLE GetStdHandle(DWORD nStdHandle); } unittest { static class TestLogger : Logger { string[] lines; override void beginLine(ref LogLine msg) { lines.length += 1; } override void put(scope const(char)[] text) { lines[$-1] ~= text; } override void endLine() { } } auto logger = new TestLogger; auto ll = (cast(shared(Logger))logger).lock(); auto rng = LogOutputRange(ll, __FILE__, __LINE__, LogLevel.info); rng.formattedWrite("text\nwith\nnewlines"); rng.finalize(); assert(logger.lines == ["text", "with", "newlines"]); logger.lines = null; logger.multilineLogger = true; rng = LogOutputRange(ll, __FILE__, __LINE__, LogLevel.info); rng.formattedWrite("text\nwith\nnewlines"); rng.finalize(); assert(logger.lines == ["text\nwith\nnewlines"]); } unittest { // make sure the default logger doesn't allocate/is usable within finalizers bool destroyed = false; class Test { ~this() { logInfo("logInfo doesn't allocate."); destroyed = true; } } auto t = new Test; destroy(t); assert(destroyed); } vibe.d-0.8.2/core/vibe/core/net.d000066400000000000000000000355071324361747700164600ustar00rootroot00000000000000/** TCP/UDP connection and server handling. Copyright: © 2012-2014 RejectedSoftware e.K. Authors: Sönke Ludwig License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. */ module vibe.core.net; public import vibe.core.stream; public import std.socket : AddressFamily; import vibe.core.driver; import vibe.core.log; import core.sys.posix.netinet.in_; import core.time; import std.exception; import std.functional; import std.string; @safe: /** Resolves the given host name/IP address string. Setting use_dns to false will only allow IP address strings but also guarantees that the call will not block. */ NetworkAddress resolveHost(string host, AddressFamily address_family = AddressFamily.UNSPEC, bool use_dns = true) { return resolveHost(host, cast(ushort)address_family, use_dns); } /// ditto NetworkAddress resolveHost(string host, ushort address_family, bool use_dns = true) { return getEventDriver().resolveHost(host, address_family, use_dns); } /** Starts listening on the specified port. 'connection_callback' will be called for each client that connects to the server socket. Each new connection gets its own fiber. The stream parameter then allows to perform blocking I/O on the client socket. The address parameter can be used to specify the network interface on which the server socket is supposed to listen for connections. By default, all IPv4 and IPv6 interfaces will be used. Using a `@system` callback is scheduled for deprecation. Use a `@safe` callback instead. */ TCPListener[] listenTCP(ushort port, void delegate(TCPConnection stream) @safe connection_callback, TCPListenOptions options = TCPListenOptions.defaults) { TCPListener[] ret; try ret ~= listenTCP(port, connection_callback, "::", options); catch (Exception e) logDiagnostic("Failed to listen on \"::\": %s", e.msg); try ret ~= listenTCP(port, connection_callback, "0.0.0.0", options); catch (Exception e) logDiagnostic("Failed to listen on \"0.0.0.0\": %s", e.msg); enforce(ret.length > 0, format("Failed to listen on all interfaces on port %s", port)); return ret; } /// ditto TCPListener listenTCP(ushort port, void delegate(TCPConnection stream) @safe connection_callback, string address, TCPListenOptions options = TCPListenOptions.defaults) { return getEventDriver().listenTCP(port, connection_callback, address, options); } /// ditto TCPListener[] listenTCP(ushort port, void delegate(TCPConnection stream) @system connection_callback, TCPListenOptions options = TCPListenOptions.defaults) @system { return listenTCP(port, (s) @trusted => connection_callback(s), options); } /// ditto TCPListener listenTCP(ushort port, void delegate(TCPConnection stream) @system connection_callback, string address, TCPListenOptions options = TCPListenOptions.defaults) @system { return listenTCP(port, (s) @trusted => connection_callback(s), address, options); } /** Starts listening on the specified port. This function is the same as listenTCP but takes a function callback instead of a delegate. */ TCPListener[] listenTCP_s(ushort port, void function(TCPConnection stream) @safe connection_callback, TCPListenOptions options = TCPListenOptions.defaults) { return listenTCP(port, () @trusted { return toDelegate(connection_callback); } (), options); } /// ditto TCPListener listenTCP_s(ushort port, void function(TCPConnection stream) @safe connection_callback, string address, TCPListenOptions options = TCPListenOptions.defaults) { return listenTCP(port, () @trusted { return toDelegate(connection_callback); } (), address, options); } /** Establishes a connection to the given host/port. */ TCPConnection connectTCP(string host, ushort port, string bind_interface = null, ushort bind_port = 0) { NetworkAddress addr = resolveHost(host); if (addr.family != AddressFamily.UNIX) addr.port = port; NetworkAddress bind_address; if (bind_interface.length) bind_address = resolveHost(bind_interface, addr.family); else { bind_address.family = addr.family; if (bind_address.family == AddressFamily.INET) bind_address.sockAddrInet4.sin_addr.s_addr = 0; else if (bind_address.family != AddressFamily.UNIX) bind_address.sockAddrInet6.sin6_addr.s6_addr[] = 0; } if (addr.family != AddressFamily.UNIX) bind_address.port = bind_port; return getEventDriver().connectTCP(addr, bind_address); } /// ditto TCPConnection connectTCP(NetworkAddress addr, NetworkAddress bind_address = anyAddress) { if (bind_address.family == AddressFamily.UNSPEC) { bind_address.family = addr.family; if (bind_address.family == AddressFamily.INET) bind_address.sockAddrInet4.sin_addr.s_addr = 0; else if (bind_address.family != AddressFamily.UNIX) bind_address.sockAddrInet6.sin6_addr.s6_addr[] = 0; if (bind_address.family != AddressFamily.UNIX) bind_address.port = 0; } enforce(addr.family == bind_address.family, "Destination address and bind address have different address families."); return getEventDriver().connectTCP(addr, bind_address); } /** Creates a bound UDP socket suitable for sending and receiving packets. */ UDPConnection listenUDP(ushort port, string bind_address = "0.0.0.0") { return getEventDriver().listenUDP(port, bind_address); } NetworkAddress anyAddress() { NetworkAddress ret; ret.family = AddressFamily.UNSPEC; return ret; } /** Represents a network/socket address. To construct a `NetworkAddress`, use either `resolveHost` or set the `family` property accordingly, followed by setting the fields of `sockAddrInet4`/`sockAddrInet6`/`sockAddrUnix`. */ struct NetworkAddress { version(Windows) { import core.sys.windows.winsock2 : sockaddr, sockaddr_in, sockaddr_in6; } version(Posix) { import core.sys.posix.sys.un : sockaddr_un; } @safe: private union { sockaddr addr; version (Posix) sockaddr_un addr_unix; sockaddr_in addr_ip4; sockaddr_in6 addr_ip6; } version(VibeLibasyncDriver) { static import libasync.events; this(libasync.events.NetworkAddress addr) @trusted { this.family = addr.family; switch (addr.family) { default: assert(false, "Got unsupported address family from libasync."); case AddressFamily.INET: this.addr_ip4 = *addr.sockAddrInet4; break; case AddressFamily.INET6: this.addr_ip6 = *addr.sockAddrInet6; break; } } T opCast(T)() @trusted if (is(T == libasync.events.NetworkAddress)) { T ret; ret.family = this.family; (cast(ubyte*)ret.sockAddr)[0 .. this.sockAddrLen] = (cast(ubyte*)this.sockAddr)[0 .. this.sockAddrLen]; return ret; } } /** Family of the socket address. */ @property ushort family() const pure nothrow { return addr.sa_family; } /// ditto @property void family(AddressFamily val) pure nothrow { addr.sa_family = cast(ubyte)val; } /// ditto @property void family(ushort val) pure nothrow { addr.sa_family = cast(ubyte)val; } /** The port in host byte order. */ @property ushort port() const pure nothrow { ushort nport; switch (this.family) { default: assert(false, "port() called for invalid address family."); case AddressFamily.INET: nport = addr_ip4.sin_port; break; case AddressFamily.INET6: nport = addr_ip6.sin6_port; break; } return () @trusted { return ntoh(nport); } (); } /// ditto @property void port(ushort val) pure nothrow { auto nport = () @trusted { return hton(val); } (); switch (this.family) { default: assert(false, "port() called for invalid address family."); case AddressFamily.INET: addr_ip4.sin_port = nport; break; case AddressFamily.INET6: addr_ip6.sin6_port = nport; break; } } /** A pointer to a sockaddr struct suitable for passing to socket functions. */ @property inout(sockaddr)* sockAddr() inout pure nothrow { return &addr; } /** Size of the sockaddr struct that is returned by sockAddr(). */ @property int sockAddrLen() const pure nothrow { switch (this.family) { default: assert(false, "sockAddrLen() called for invalid address family."); version (Posix) { case AddressFamily.UNIX: return addr_unix.sizeof; } case AddressFamily.INET: return addr_ip4.sizeof; case AddressFamily.INET6: return addr_ip6.sizeof; } } @property inout(sockaddr_in)* sockAddrInet4() inout pure nothrow in { assert (family == AddressFamily.INET); } body { return &addr_ip4; } @property inout(sockaddr_in6)* sockAddrInet6() inout pure nothrow in { assert (family == AddressFamily.INET6); } body { return &addr_ip6; } version (Posix) { @property inout(sockaddr_un)* sockAddrUnix() inout pure nothrow in { assert (family == AddressFamily.UNIX); } body { return &addr_unix; } } /** Returns a string representation of the IP address */ string toAddressString() const { import std.array : appender; auto ret = appender!string(); ret.reserve(40); toAddressString(str => ret.put(str)); return ret.data; } /// ditto void toAddressString(scope void delegate(const(char)[]) @safe sink) const { import std.array : appender; import std.format : formattedWrite; ubyte[2] _dummy = void; // Workaround for DMD regression in master switch (this.family) { default: assert(false, "toAddressString() called for invalid address family."); case AddressFamily.INET: { ubyte[4] ip = () @trusted { return (cast(ubyte*)&addr_ip4.sin_addr.s_addr)[0 .. 4]; } (); sink.formattedWrite("%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]); } break; case AddressFamily.INET6: { ubyte[16] ip = addr_ip6.sin6_addr.s6_addr; foreach (i; 0 .. 8) { if (i > 0) sink(":"); _dummy[] = ip[i*2 .. i*2+2]; sink.formattedWrite("%x", bigEndianToNative!ushort(_dummy)); } } break; version (Posix) { case AddressFamily.UNIX: import std.traits : hasMember; static if (hasMember!(sockaddr_un, "sun_len")) sink.formattedWrite("%s",() @trusted { return cast(char[])addr_unix.sun_path[0..addr_unix.sun_len]; } ()); else sink.formattedWrite("%s",() @trusted { return (cast(char*)addr_unix.sun_path.ptr).fromStringz; } ()); break; } } } /** Returns a full string representation of the address, including the port number. */ string toString() const { import std.array : appender; auto ret = appender!string(); toString(str => ret.put(str)); return ret.data; } /// ditto void toString(scope void delegate(const(char)[]) @safe sink) const { import std.format : formattedWrite; switch (this.family) { default: assert(false, "toString() called for invalid address family."); case AddressFamily.INET: toAddressString(sink); sink.formattedWrite(":%s", port); break; case AddressFamily.INET6: sink("["); toAddressString(sink); sink.formattedWrite("]:%s", port); break; case AddressFamily.UNIX: toAddressString(sink); break; } } unittest { void test(string ip) { auto res = () @trusted { return resolveHost(ip, AddressFamily.UNSPEC, false); } ().toAddressString(); assert(res == ip, "IP "~ip~" yielded wrong string representation: "~res); } test("1.2.3.4"); test("102:304:506:708:90a:b0c:d0e:f10"); } } /** Represents a single TCP connection. */ interface TCPConnection : ConnectionStream { /// Used to disable Nagle's algorithm. @property void tcpNoDelay(bool enabled); /// ditto @property bool tcpNoDelay() const; /// Enables TCP keep-alive packets. @property void keepAlive(bool enable); /// ditto @property bool keepAlive() const; /// Controls the read time out after which the connection is closed automatically. @property void readTimeout(Duration duration); /// ditto @property Duration readTimeout() const; /// Returns the IP address of the connected peer. @property string peerAddress() const; /// The local/bind address of the underlying socket. @property NetworkAddress localAddress() const; /// The address of the connected peer. @property NetworkAddress remoteAddress() const; } /** Represents a listening TCP socket. */ interface TCPListener { /// The local address at which TCP connections are accepted. @property NetworkAddress bindAddress(); /// Stops listening and closes the socket. void stopListening(); } /** Represents a bound and possibly 'connected' UDP socket. */ interface UDPConnection { /** Returns the address to which the UDP socket is bound. */ @property string bindAddress() const; /** Determines if the socket is allowed to send to broadcast addresses. */ @property bool canBroadcast() const; /// ditto @property void canBroadcast(bool val); /// The local/bind address of the underlying socket. @property NetworkAddress localAddress() const; /** Stops listening for datagrams and frees all resources. */ void close(); /** Locks the UDP connection to a certain peer. Once connected, the UDPConnection can only communicate with the specified peer. Otherwise communication with any reachable peer is possible. */ void connect(string host, ushort port); /// ditto void connect(NetworkAddress address); /** Sends a single packet. If peer_address is given, the packet is send to that address. Otherwise the packet will be sent to the address specified by a call to connect(). */ void send(in ubyte[] data, in NetworkAddress* peer_address = null); /** Receives a single packet. If a buffer is given, it must be large enough to hold the full packet. The timeout overload will throw an Exception if no data arrives before the specified duration has elapsed. */ ubyte[] recv(ubyte[] buf = null, NetworkAddress* peer_address = null); /// ditto ubyte[] recv(Duration timeout, ubyte[] buf = null, NetworkAddress* peer_address = null); /** Become member of IP multicast group The multiaddr parameter should be in the range 239.0.0.0-239.255.255.255. See https://www.iana.org/assignments/multicast-addresses/multicast-addresses.xml#multicast-addresses-12 and https://www.iana.org/assignments/ipv6-multicast-addresses/ipv6-multicast-addresses.xhtml */ void addMembership(ref NetworkAddress multiaddr); /** Set IP multicast loopback This is on by default. All packets send will also loopback if enabled. Useful if more than one application is running on same host and both need each other's packets. */ @property void multicastLoopback(bool loop); } /** Flags to control the behavior of listenTCP. */ enum TCPListenOptions { /// Don't enable any particular option defaults = 0, /// Causes incoming connections to be distributed across the thread pool distribute = 1<<0, /// Disables automatic closing of the connection when the connection callback exits disableAutoClose = 1<<1, /** Enable port reuse on linux kernel version >=3.9, do nothing on other OS Does not affect libasync driver because it is always enabled by libasync. */ reusePort = 1<<2, } private pure nothrow { import std.bitmanip; ushort ntoh(ushort val) { version (LittleEndian) return swapEndian(val); else version (BigEndian) return val; else static assert(false, "Unknown endianness."); } ushort hton(ushort val) { version (LittleEndian) return swapEndian(val); else version (BigEndian) return val; else static assert(false, "Unknown endianness."); } } vibe.d-0.8.2/core/vibe/core/path.d000066400000000000000000000362761324361747700166320ustar00rootroot00000000000000/** Contains routines for high level path handling. Copyright: © 2012-2015 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.core.path; import std.algorithm : canFind, min; import std.array; import std.conv; import std.exception; import std.string; /** Computes the relative path from `base_path` to this path. Params: path = The destination path base_path = The path from which the relative path starts See_also: `relativeToWeb` */ Path relativeTo(Path path, Path base_path) @safe{ assert(path.absolute && base_path.absolute); version (Windows) { // a path such as ..\C:\windows is not valid, so force the path to stay absolute in this case if (path.absolute && !path.empty && (path[0].toString().endsWith(":") && !base_path.startsWith(path[0 .. 1]) || path[0] == "\\" && !base_path.startsWith(path[0 .. min(2, $)]))) { return path; } } int nup = 0; while (base_path.length > nup && !path.startsWith(base_path[0 .. base_path.length-nup])) { nup++; } Path ret = Path(null, false); ret.m_endsWithSlash = true; foreach (i; 0 .. nup) ret ~= ".."; ret ~= Path(path.nodes[base_path.length-nup .. $], false); ret.m_endsWithSlash = path.m_endsWithSlash; return ret; } /// unittest { assert(Path("/some/path").relativeTo(Path("/")) == Path("some/path")); assert(Path("/some/path/").relativeTo(Path("/some/other/path/")) == Path("../../path/")); assert(Path("/some/path/").relativeTo(Path("/some/other/path")) == Path("../../path/")); } /** Computes the relative path to this path from `base_path` using web path rules. The difference to `relativeTo` is that a path not ending in a slash will not be considered as a path to a directory and the parent path will instead be used. Params: path = The destination path base_path = The path from which the relative path starts See_also: `relativeTo` */ Path relativeToWeb(Path path, Path base_path) @safe { if (!base_path.endsWithSlash) { if (base_path.length > 0) base_path = base_path[0 .. $-1]; else base_path = Path("/"); } return path.relativeTo(base_path); } /// unittest { assert(Path("/some/path").relativeToWeb(Path("/")) == Path("some/path")); assert(Path("/some/path/").relativeToWeb(Path("/some/other/path/")) == Path("../../path/")); assert(Path("/some/path/").relativeToWeb(Path("/some/other/path")) == Path("../path/")); } /// Forward compatibility alias for vibe-core alias NativePath = Path; /// ditto alias PosixPath = Path; /// ditto alias WindowsPath = Path; /// ditto alias InetPath = Path; /** Represents an absolute or relative file system path. This struct allows to do safe operations on paths, such as concatenation and sub paths. Checks are done to disallow invalid operations such as concatenating two absolute paths. It also validates path strings and allows for easy checking of malicious relative paths. */ struct Path { @safe: /// Forward compatibility alias for vibe-core alias Segment = PathEntry; private { immutable(PathEntry)[] m_nodes; bool m_absolute = false; bool m_endsWithSlash = false; } hash_t toHash() const nothrow @trusted { hash_t ret; auto strhash = &typeid(string).getHash; try foreach (n; nodes) ret ^= strhash(&n.m_name); catch (Throwable) assert(false); if (m_absolute) ret ^= 0xfe3c1738; if (m_endsWithSlash) ret ^= 0x6aa4352d; return ret; } pure: /// Constructs a Path object by parsing a path string. this(string pathstr) { m_nodes = splitPath(pathstr); m_absolute = (pathstr.startsWith("/") || m_nodes.length > 0 && (m_nodes[0].toString().canFind(':') || m_nodes[0] == "\\")); m_endsWithSlash = pathstr.endsWith("/"); } /// Constructs a path object from a list of PathEntry objects. this(immutable(PathEntry)[] nodes, bool absolute) { m_nodes = nodes; m_absolute = absolute; } /// Constructs a relative path with one path entry. this(PathEntry entry) { m_nodes = [entry]; m_absolute = false; } /// Determines if the path is absolute. @property bool absolute() const { return m_absolute; } /// Forward compatibility property for vibe-code @property immutable(PathEntry)[] bySegment() const { return nodes; } /// Resolves all '.' and '..' path entries as far as possible. void normalize() { immutable(PathEntry)[] newnodes; foreach( n; m_nodes ){ switch(n.toString()){ default: newnodes ~= n; break; case "", ".": break; case "..": enforce(!m_absolute || newnodes.length > 0, "Path goes below root node."); if( newnodes.length > 0 && newnodes[$-1] != ".." ) newnodes = newnodes[0 .. $-1]; else newnodes ~= n; break; } } m_nodes = newnodes; } /// Converts the Path back to a string representation using slashes. string toString() const { if (m_nodes.empty) return absolute ? "/" : endsWithSlash ? "./" : ""; Appender!string ret; // for absolute paths start with / if( absolute ) ret.put('/'); foreach( i, f; m_nodes ){ if( i > 0 ) ret.put('/'); ret.put(f.toString()); } if( m_nodes.length > 0 && m_endsWithSlash ) ret.put('/'); return ret.data; } /// Converts the Path object to a native path string (backslash as path separator on Windows). string toNativeString() nothrow const { Appender!string ret; // for absolute unix paths start with / version(Posix) { if (m_absolute) ret.put('/'); } foreach( i, f; m_nodes ){ version(Windows) { if( i > 0 ) ret.put('\\'); } else version(Posix) { if( i > 0 ) ret.put('/'); } else static assert(false, "Unsupported OS"); ret.put(f.toString()); } if( m_nodes.length > 0 && m_endsWithSlash ){ version(Windows) { ret.put('\\'); } version(Posix) { ret.put('/'); } } return ret.data; } /// Tests if `rhs` is an anchestor or the same as this path. bool startsWith(const Path rhs) const { if( rhs.m_nodes.length > m_nodes.length ) return false; foreach( i; 0 .. rhs.m_nodes.length ) if( m_nodes[i] != rhs.m_nodes[i] ) return false; return true; } /// The last entry of the path @property ref immutable(PathEntry) head() const { enforce(m_nodes.length > 0); return m_nodes[$-1]; } /// The parent path @property Path parentPath() const { return this[0 .. length-1]; } /// The ist of path entries of which this path is composed @property immutable(PathEntry)[] nodes() const { return m_nodes; } /// The number of path entries of which this path is composed @property size_t length() const { return m_nodes.length; } /// True if the path contains no entries @property bool empty() const { return m_nodes.length == 0; } /// Determines if the path ends with a slash (i.e. is a directory) @property bool endsWithSlash() const { return m_endsWithSlash; } /// ditto @property void endsWithSlash(bool v) { m_endsWithSlash = v; } /// Determines if this path goes outside of its base path (i.e. begins with '..'). @property bool external() const { return !m_absolute && m_nodes.length > 0 && m_nodes[0].m_name == ".."; } ref immutable(PathEntry) opIndex(size_t idx) const { return m_nodes[idx]; } Path opSlice(size_t start, size_t end) const { auto ret = Path(m_nodes[start .. end], start == 0 ? absolute : false); ret.m_endsWithSlash = end == m_nodes.length ? m_endsWithSlash : true; return ret; } size_t opDollar(int dim)() const if(dim == 0) { return m_nodes.length; } Path opBinary(string OP)(const Path rhs) const if( OP == "~" ) { assert(!rhs.absolute, "Trying to append absolute path."); if (!rhs.length) return this; Path ret; ret.m_nodes = m_nodes; ret.m_absolute = m_absolute; ret.m_endsWithSlash = rhs.m_endsWithSlash; ret.normalize(); // needed to avoid "."~".." become "" instead of ".." foreach (folder; rhs.m_nodes) { switch (folder.toString()) { default: ret.m_nodes = ret.m_nodes ~ folder; break; case "", ".": break; case "..": enforce(!ret.absolute || ret.m_nodes.length > 0, "Relative path goes below root node!"); if( ret.m_nodes.length > 0 && ret.m_nodes[$-1].toString() != ".." ) ret.m_nodes = ret.m_nodes[0 .. $-1]; else ret.m_nodes = ret.m_nodes ~ folder; break; } } return ret; } Path opBinary(string OP)(string rhs) const if( OP == "~" ) { return opBinary!"~"(Path(rhs)); } Path opBinary(string OP)(PathEntry rhs) const if( OP == "~" ) { return opBinary!"~"(Path(rhs)); } void opOpAssign(string OP)(string rhs) if( OP == "~" ) { opOpAssign!"~"(Path(rhs)); } void opOpAssign(string OP)(PathEntry rhs) if( OP == "~" ) { opOpAssign!"~"(Path(rhs)); } void opOpAssign(string OP)(immutable(PathEntry)[] rhs) if( OP == "~" ) { opOpAssign!"~"(Path(rhs, false)); } void opOpAssign(string OP)(Path rhs) if( OP == "~" ) { assert(!rhs.absolute, "Trying to append absolute path."); if (!rhs.length) return; auto p = this ~ rhs; m_nodes = p.m_nodes; m_endsWithSlash = rhs.m_endsWithSlash; } /// Tests two paths for equality using '=='. bool opEquals(ref const Path rhs) const { if( m_absolute != rhs.m_absolute ) return false; if( m_endsWithSlash != rhs.m_endsWithSlash ) return false; if( m_nodes.length != rhs.length ) return false; foreach( i; 0 .. m_nodes.length ) if( m_nodes[i] != rhs.m_nodes[i] ) return false; return true; } /// ditto bool opEquals(const Path other) const { return opEquals(other); } int opCmp(ref const Path rhs) const { if( m_absolute != rhs.m_absolute ) return cast(int)m_absolute - cast(int)rhs.m_absolute; foreach( i; 0 .. min(m_nodes.length, rhs.m_nodes.length) ) if( m_nodes[i] != rhs.m_nodes[i] ) return m_nodes[i].opCmp(rhs.m_nodes[i]); if( m_nodes.length > rhs.m_nodes.length ) return 1; if( m_nodes.length < rhs.m_nodes.length ) return -1; return 0; } } unittest { { auto unc = "\\\\server\\share\\path"; auto uncp = Path(unc); uncp.normalize(); version(Windows) assert(uncp.toNativeString() == unc); assert(uncp.absolute); assert(!uncp.endsWithSlash); } { auto abspath = "/test/path/"; auto abspathp = Path(abspath); assert(abspathp.toString() == abspath); version(Windows) {} else assert(abspathp.toNativeString() == abspath); assert(abspathp.absolute); assert(abspathp.endsWithSlash); assert(abspathp.length == 2); assert(abspathp[0] == "test"); assert(abspathp[1] == "path"); } { auto relpath = "test/path/"; auto relpathp = Path(relpath); assert(relpathp.toString() == relpath); version(Windows) assert(relpathp.toNativeString() == "test\\path\\"); else assert(relpathp.toNativeString() == relpath); assert(!relpathp.absolute); assert(relpathp.endsWithSlash); assert(relpathp.length == 2); assert(relpathp[0] == "test"); assert(relpathp[1] == "path"); } { auto winpath = "C:\\windows\\test"; auto winpathp = Path(winpath); assert(winpathp.toString() == "/C:/windows/test"); version(Windows) assert(winpathp.toNativeString() == winpath); else assert(winpathp.toNativeString() == "/C:/windows/test"); assert(winpathp.absolute); assert(!winpathp.endsWithSlash); assert(winpathp.length == 3); assert(winpathp[0] == "C:"); assert(winpathp[1] == "windows"); assert(winpathp[2] == "test"); } { auto dotpath = "/test/../test2/././x/y"; auto dotpathp = Path(dotpath); assert(dotpathp.toString() == "/test/../test2/././x/y"); dotpathp.normalize(); assert(dotpathp.toString() == "/test2/x/y"); } { auto dotpath = "/test/..////test2//./x/y"; auto dotpathp = Path(dotpath); assert(dotpathp.toString() == "/test/..////test2//./x/y"); dotpathp.normalize(); assert(dotpathp.toString() == "/test2/x/y"); } { auto parentpath = "/path/to/parent"; auto parentpathp = Path(parentpath); auto subpath = "/path/to/parent/sub/"; auto subpathp = Path(subpath); auto subpath_rel = "sub/"; assert(subpathp.relativeTo(parentpathp).toString() == subpath_rel); auto subfile = "/path/to/parent/child"; auto subfilep = Path(subfile); auto subfile_rel = "child"; assert(subfilep.relativeTo(parentpathp).toString() == subfile_rel); } { // relative paths across Windows devices are not allowed version (Windows) { auto p1 = Path("\\\\server\\share"); assert(p1.absolute); auto p2 = Path("\\\\server\\othershare"); assert(p2.absolute); auto p3 = Path("\\\\otherserver\\share"); assert(p3.absolute); auto p4 = Path("C:\\somepath"); assert(p4.absolute); auto p5 = Path("C:\\someotherpath"); assert(p5.absolute); auto p6 = Path("D:\\somepath"); assert(p6.absolute); assert(p4.relativeTo(p5) == Path("../somepath")); assert(p4.relativeTo(p6) == Path("C:\\somepath")); assert(p4.relativeTo(p1) == Path("C:\\somepath")); assert(p1.relativeTo(p2) == Path("../share")); assert(p1.relativeTo(p3) == Path("\\\\server\\share")); assert(p1.relativeTo(p4) == Path("\\\\server\\share")); } } { // relative path, trailing slash auto p1 = Path("/some/path"); auto p2 = Path("/some/path/"); assert(p1.relativeTo(p1).toString() == ""); assert(p1.relativeTo(p2).toString() == ""); assert(p2.relativeTo(p2).toString() == "./"); assert(p2.relativeTo(p1).toString() == "./"); } } struct PathEntry { @safe: pure: private { string m_name; } static PathEntry validateFilename(string fname) { enforce(fname.indexOfAny("/\\") < 0, "File name contains forward or backward slashes: "~fname); return PathEntry(fname); } this(string str) { assert(!str.canFind('/') && (!str.canFind('\\') || str.length == 1), "Invalid path entry: " ~ str); m_name = str; } string toString() const nothrow { return m_name; } Path opBinary(string OP)(PathEntry rhs) const if( OP == "~" ) { return Path([this, rhs], false); } @property string name() const nothrow { return m_name; } bool opEquals(ref const PathEntry rhs) const { return m_name == rhs.m_name; } bool opEquals(PathEntry rhs) const { return m_name == rhs.m_name; } bool opEquals(string rhs) const { return m_name == rhs; } int opCmp(ref const PathEntry rhs) const { return m_name.cmp(rhs.m_name); } int opCmp(string rhs) const { return m_name.cmp(rhs); } } private bool isValidFilename(string str) pure @safe { foreach( ch; str ) if( ch == '/' || /*ch == ':' ||*/ ch == '\\' ) return false; return true; } /// Joins two path strings. subpath must be relative. string joinPath(string basepath, string subpath) pure @safe { Path p1 = Path(basepath); Path p2 = Path(subpath); return (p1 ~ p2).toString(); } /// Splits up a path string into its elements/folders PathEntry[] splitPath(string path) pure @safe { if( path.startsWith("/") || path.startsWith("\\") ) path = path[1 .. $]; if( path.empty ) return null; if( path.endsWith("/") || path.endsWith("\\") ) path = path[0 .. $-1]; // count the number of path nodes size_t nelements = 0; foreach( i, char ch; path ) if( ch == '\\' || ch == '/' ) nelements++; nelements++; // reserve space for the elements PathEntry[] storage; /*if (alloc) { auto mem = alloc.alloc(nelements * PathEntry.sizeof); mem[] = 0; storage = cast(PathEntry[])mem; } else*/ storage = new PathEntry[nelements]; size_t startidx = 0; size_t eidx = 0; // detect UNC path if(path.startsWith("\\")) { storage[eidx++] = PathEntry(path[0 .. 1]); path = path[1 .. $]; } // read and return the elements foreach( i, char ch; path ) if( ch == '\\' || ch == '/' ){ storage[eidx++] = PathEntry(path[startidx .. i]); startidx = i+1; } storage[eidx++] = PathEntry(path[startidx .. $]); assert(eidx == nelements); return storage; } vibe.d-0.8.2/core/vibe/core/stream.d000066400000000000000000000213351324361747700171570ustar00rootroot00000000000000/** Generic stream interface used by several stream-like classes. This module defines the basic stream primitives. For concrete stream types, take a look at the `vibe.stream` package. The `vibe.stream.operations` module contains additional high-level operations on streams, such as reading streams by line or as a whole. Copyright: © 2012-2015 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.core.stream; import core.time; import std.algorithm; import std.conv; /**************************************************************************************************/ /* Public functions */ /**************************************************************************************************/ /** Pipes an InputStream directly into this OutputStream. The number of bytes written is either the whole input stream when `nbytes == 0`, or exactly `nbytes` for `nbytes > 0`. If the input stream contains less than `nbytes` of data, an exception is thrown. */ void pipe(IS : InputStream, OS : OutputStream)(IS source, OS sink, ulong nbytes = 0) @safe { import vibe.internal.allocator : dispose, makeArray, theAllocator; auto buffer = () @trusted { return theAllocator.makeArray!ubyte(64*1024); } (); scope (exit) () @trusted { theAllocator.dispose(buffer); } (); //logTrace("default write %d bytes, empty=%s", nbytes, stream.empty); if (nbytes == 0 || nbytes == ulong.max) { while (!source.empty) { size_t chunk = min(source.leastSize, buffer.length); assert(chunk > 0, "leastSize returned zero for non-empty stream."); //logTrace("read pipe chunk %d", chunk); source.read(buffer[0 .. chunk], IOMode.all); sink.write(buffer[0 .. chunk], IOMode.all); } } else { while (nbytes > 0) { size_t chunk = min(nbytes, buffer.length); //logTrace("read pipe chunk %d", chunk); source.read(buffer[0 .. chunk], IOMode.all); sink.write(buffer[0 .. chunk], IOMode.all); nbytes -= chunk; } } } /** Returns a `NullOutputStream` instance. The instance will only be created on the first request and gets reused for all subsequent calls from the same thread. */ NullOutputStream nullSink() @safe { static NullOutputStream ret; if (!ret) ret = new NullOutputStream; return ret; } /**************************************************************************************************/ /* Public types */ /**************************************************************************************************/ /** Controls the waiting behavior of read/write operations. Note that this is currently ignored for all device streams. Use the "vibe-core" package if you need this functionality. */ enum IOMode { immediate, /// not supported once, /// not supported all /// Writes/reads the whole buffer } /** Interface for all classes implementing readable streams. */ interface InputStream { @safe: /** Returns true $(I iff) the end of the input stream has been reached. */ @property bool empty(); /** (Scheduled for deprecation) Returns the maximum number of bytes that are known to remain in this stream until the end is reached. After `leastSize()` bytes have been read, the stream will either have reached EOS and `empty()` returns `true`, or `leastSize()` returns again a number `> 0`. */ @property ulong leastSize(); /** (Scheduled for deprecation) Queries if there is data available for immediate, non-blocking read. */ @property bool dataAvailableForRead(); /** Returns a temporary reference to the data that is currently buffered. The returned slice typically has the size `leastSize()` or `0` if `dataAvailableForRead()` returns false. Streams that don't have an internal buffer will always return an empty slice. Note that any method invocation on the same stream potentially invalidates the contents of the returned buffer. */ const(ubyte)[] peek(); /** Fills the preallocated array 'bytes' with data from the stream. Throws: An exception if the operation reads past the end of the stream */ size_t read(scope ubyte[] dst, IOMode); /// ditto final void read(scope ubyte[] dst) { read(dst, IOMode.all); } } /** Interface for all classes implementing writeable streams. */ interface OutputStream { @safe: /** Writes an array of bytes to the stream. */ size_t write(in ubyte[] bytes, IOMode mode); /// ditto final void write(in ubyte[] bytes) { write(bytes, IOMode.all); } /// ditto final void write(in char[] bytes) { write(cast(const(ubyte)[])bytes); } /** Flushes the stream and makes sure that all data is being written to the output device. */ void flush(); /** Flushes and finalizes the stream. Finalize has to be called on certain types of streams. No writes are possible after a call to finalize(). */ void finalize(); /** Pipes an InputStream directly into this OutputStream. The number of bytes written is either the whole input stream when nbytes == 0, or exactly nbytes for nbytes > 0. If the input stream contains less than nbytes of data, an exception is thrown. */ deprecated("Use pipe(source, sink) instead.") final void write(InputStream stream, ulong nbytes = 0) { stream.pipe(this, nbytes); } } /** Interface for all classes implementing readable and writable streams. */ interface Stream : InputStream, OutputStream { } /** Interface for streams based on a connection. Connection streams are based on streaming socket connections, pipes and similar end-to-end streams. See_also: vibe.core.net.TCPConnection */ interface ConnectionStream : Stream { @safe: /** Determines The current connection status. If connected is false, writing to the connection will trigger an exception. Reading may still succeed as long as there is data left in the input buffer. Use InputStream.empty to determine when to stop reading. */ @property bool connected() const; /** Actively closes the connection and frees associated resources. Note that close must always be called, even if the remote has already closed the connection. Failure to do so will result in resource and memory leakage. Closing a connection implies a call to finalize, so that it doesn't need to be called explicitly (it will be a no-op in that case). */ void close(); /** Blocks until data becomes available for read. The maximum wait time can be customized with the `timeout` parameter. If there is already data availabe for read, or if the connection is closed, the function will return immediately without blocking. Params: timeout = Optional timeout, the default value of `Duration.max` indicates an infinite timeout Returns: The function will return `true` if data becomes available before the timeout is reached. If the connection gets closed, or the timeout gets reached, `false` is returned instead. */ bool waitForData(Duration timeout = Duration.max); } /** Interface for all streams supporting random access. */ interface RandomAccessStream : Stream { @safe: /// Returns the total size of the file. @property ulong size() const nothrow; /// Determines if this stream is readable. @property bool readable() const nothrow; /// Determines if this stream is writable. @property bool writable() const nothrow; /// Seeks to a specific position in the file if supported by the stream. void seek(ulong offset); /// Returns the current offset of the file pointer ulong tell() nothrow; } /** Stream implementation acting as a sink with no function. Any data written to the stream will be ignored and discarded. This stream type is useful if the output of a particular stream is not needed but the stream needs to be drained. */ final class NullOutputStream : OutputStream { size_t write(in ubyte[] bytes, IOMode) { return bytes.length; } alias write = OutputStream.write; void flush() {} void finalize() {} } alias InputStreamProxy = InputStream; alias OutputStreamProxy = OutputStream; alias StreamProxy = Stream; alias ConnectionStreamProxy = ConnectionStream; alias RandomAccessStreamProxy = RandomAccessStream; enum isInputStream(T) = is(T : InputStream); enum isOutputStream(T) = is(T : OutputStream); enum isStream(T) = is(T : Stream); enum isConnectionStream(T) = is(T : ConnectionStream); enum isRandomAccessStream(T) = is(T : RandomAccessStream); mixin template validateInputStream(T) { static assert(isInputStream!T); } mixin template validateOutputStream(T) { static assert(isOutputStream!T); } mixin template validateStream(T) { static assert(isStream!T); } mixin template validateConnectionStream(T) { static assert(isConnectionStream!T); } mixin template validateRandomAccessStream(T) { static assert(isRandomAccessStream!T); } vibe.d-0.8.2/core/vibe/core/sync.d000066400000000000000000001115721324361747700166430ustar00rootroot00000000000000/** Interruptible Task synchronization facilities Copyright: © 2012-2015 RejectedSoftware e.K. Authors: Leonid Kramer, Sönke Ludwig, Manuel Frischknecht License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. */ module vibe.core.sync; import std.exception; import vibe.core.driver; import core.atomic; import core.sync.mutex; import core.sync.condition; import std.stdio; import std.traits : ReturnType; enum LockMode { lock, tryLock, defer } interface Lockable { @safe: void lock(); void unlock(); bool tryLock(); } /** RAII lock for the Mutex class. */ struct ScopedMutexLock { @safe: @disable this(this); private { Mutex m_mutex; bool m_locked; LockMode m_mode; } this(core.sync.mutex.Mutex mutex, LockMode mode = LockMode.lock) { assert(mutex !is null); m_mutex = mutex; final switch (mode) { case LockMode.lock: lock(); break; case LockMode.tryLock: tryLock(); break; case LockMode.defer: break; } } ~this() { if( m_locked ) m_mutex.unlock(); } @property bool locked() const { return m_locked; } void unlock() { enforce(m_locked); m_mutex.unlock(); m_locked = false; } bool tryLock() { enforce(!m_locked); return m_locked = () @trusted { return m_mutex.tryLock(); } (); } void lock() { enforce(!m_locked); m_locked = true; () @trusted { m_mutex.lock(); } (); } } /* Only for internal use: Ensures that a mutex is locked while executing the given procedure. This function works for all kinds of mutexes, in particular for $(D core.sync.mutex.Mutex), $(D TaskMutex) and $(D InterruptibleTaskMutex). Returns: Returns the value returned from $(D PROC), if any. */ /// private package(vibe) ReturnType!PROC performLocked(alias PROC, MUTEX)(MUTEX mutex) { mutex.lock(); scope (exit) mutex.unlock(); return PROC(); } /// unittest { int protected_var = 0; auto mtx = new TaskMutex; mtx.performLocked!({ protected_var++; }); } /** Thread-local semaphore implementation for tasks. When the semaphore runs out of concurrent locks, it will suspend. This class is used in `vibe.core.connectionpool` to limit the number of concurrent connections. */ class LocalTaskSemaphore { @safe: // requires a queue import std.container.binaryheap; import std.container.array; private { struct Waiter { ManualEvent signal; ubyte priority; uint seq; } BinaryHeap!(Array!Waiter, asc) m_waiters; uint m_maxLocks; uint m_locks; uint m_seq; } this(uint max_locks) { m_maxLocks = max_locks; } /// Maximum number of concurrent locks @property void maxLocks(uint max_locks) { m_maxLocks = max_locks; } /// ditto @property uint maxLocks() const { return m_maxLocks; } /// Number of concurrent locks still available @property uint available() const { return m_maxLocks - m_locks; } /** Try to acquire a lock. If a lock cannot be acquired immediately, returns `false` and leaves the semaphore in its previous state. Returns: `true` is returned $(I iff) the number of available locks is greater than one. */ bool tryLock() { if (available > 0) { m_locks++; return true; } return false; } /** Acquires a lock. Once the limit of concurrent locks is reached, this method will block until the number of locks drops below the limit. */ void lock(ubyte priority = 0) { import std.algorithm : min; if (tryLock()) return; Waiter w; w.signal = getEventDriver().createManualEvent(); scope(exit) () @trusted { return destroy(w.signal); } (); w.priority = priority; w.seq = min(0, m_seq - w.priority); if (++m_seq == uint.max) rewindSeq(); () @trusted { m_waiters.insert(w); } (); w.signal.waitUninterruptible(w.signal.emitCount); } /** Gives up an existing lock. */ void unlock() { if (m_waiters.length > 0) { ManualEvent s = m_waiters.front().signal; () @trusted { m_waiters.removeFront(); } (); s.emit(); // resume one } else m_locks--; } // if true, a goes after b. ie. b comes out front() /// private static bool asc(ref Waiter a, ref Waiter b) { if (a.seq == b.seq) { if (a.priority == b.priority) { // resolve using the pointer address return (cast(size_t)&a.signal) > (cast(size_t) &b.signal); } // resolve using priority return a.priority < b.priority; } // resolve using seq number return a.seq > b.seq; } private void rewindSeq() @trusted { Array!Waiter waiters = m_waiters.release(); ushort min_seq; import std.algorithm : min; foreach (ref waiter; waiters[]) min_seq = min(waiter.seq, min_seq); foreach (ref waiter; waiters[]) waiter.seq -= min_seq; m_waiters.assume(waiters); } } /** Mutex implementation for fibers. This mutex type can be used in exchange for a core.sync.mutex.Mutex, but does not block the event loop when contention happens. Note that this mutex does not allow recursive locking. Notice: Because this class is annotated nothrow, it cannot be interrupted using $(D vibe.core.task.Task.interrupt()). The corresponding $(D InterruptException) will be deferred until the next blocking operation yields the event loop. Use $(D InterruptibleTaskMutex) as an alternative that can be interrupted. See_Also: InterruptibleTaskMutex, RecursiveTaskMutex, core.sync.mutex.Mutex */ class TaskMutex : core.sync.mutex.Mutex, Lockable { @safe: private TaskMutexImpl!false m_impl; this(Object o) @trusted { m_impl.setup(); super(o); } this() @trusted { m_impl.setup(); } override bool tryLock() nothrow { return m_impl.tryLock(); } override void lock() nothrow { m_impl.lock(); } override void unlock() nothrow { m_impl.unlock(); } } unittest { auto mutex = new TaskMutex; { auto lock = ScopedMutexLock(mutex); assert(lock.locked); assert(mutex.m_impl.m_locked); auto lock2 = ScopedMutexLock(mutex, LockMode.tryLock); assert(!lock2.locked); } assert(!mutex.m_impl.m_locked); auto lock = ScopedMutexLock(mutex, LockMode.tryLock); assert(lock.locked); lock.unlock(); assert(!lock.locked); synchronized(mutex){ assert(mutex.m_impl.m_locked); } assert(!mutex.m_impl.m_locked); mutex.performLocked!({ assert(mutex.m_impl.m_locked); }); assert(!mutex.m_impl.m_locked); with(mutex.ScopedMutexLock) { assert(mutex.m_impl.m_locked); } } unittest { // test deferred throwing import vibe.core.core; auto mutex = new TaskMutex; auto t1 = runTask({ try { mutex.lock(); scope (exit) mutex.unlock(); sleep(20.msecs); } catch (Exception e) { assert(false, "No exception expected in first task: "~e.msg); } }); auto t2 = runTask({ try mutex.lock(); catch (Exception e) { assert(false, "No exception supposed to be thrown: "~e.msg); } scope (exit) mutex.unlock(); try { yield(); assert(false, "Yield is supposed to have thrown an InterruptException."); } catch (InterruptException) { // as expected! } catch (Exception e) { assert(false, "Only InterruptException supposed to be thrown: "~e.msg); } }); runTask({ // mutex is now locked in first task for 20 ms // the second tasks is waiting in lock() t2.interrupt(); t1.join(); t2.join(); assert(!mutex.m_impl.m_locked); // ensure that the scope(exit) has been executed exitEventLoop(); }); runEventLoop(); } unittest { runMutexUnitTests!TaskMutex(); } /** Alternative to $(D TaskMutex) that supports interruption. This class supports the use of $(D vibe.core.task.Task.interrupt()) while waiting in the $(D lock()) method. However, because the interface is not $(D nothrow), it cannot be used as an object monitor. See_Also: $(D TaskMutex), $(D InterruptibleRecursiveTaskMutex) */ final class InterruptibleTaskMutex : Lockable { @safe: private TaskMutexImpl!true m_impl; this() { m_impl.setup(); } bool tryLock() nothrow { return m_impl.tryLock(); } void lock() { m_impl.lock(); } void unlock() nothrow { m_impl.unlock(); } } unittest { runMutexUnitTests!InterruptibleTaskMutex(); } /** Recursive mutex implementation for tasks. This mutex type can be used in exchange for a core.sync.mutex.Mutex, but does not block the event loop when contention happens. Notice: Because this class is annotated nothrow, it cannot be interrupted using $(D vibe.core.task.Task.interrupt()). The corresponding $(D InterruptException) will be deferred until the next blocking operation yields the event loop. Use $(D InterruptibleRecursiveTaskMutex) as an alternative that can be interrupted. See_Also: TaskMutex, core.sync.mutex.Mutex */ class RecursiveTaskMutex : core.sync.mutex.Mutex, Lockable { @safe: private RecursiveTaskMutexImpl!false m_impl; this(Object o) { m_impl.setup(); super(o); } this() { m_impl.setup(); } override bool tryLock() { return m_impl.tryLock(); } override void lock() { m_impl.lock(); } override void unlock() { m_impl.unlock(); } } unittest { runMutexUnitTests!RecursiveTaskMutex(); } /** Alternative to $(D RecursiveTaskMutex) that supports interruption. This class supports the use of $(D vibe.core.task.Task.interrupt()) while waiting in the $(D lock()) method. However, because the interface is not $(D nothrow), it cannot be used as an object monitor. See_Also: $(D RecursiveTaskMutex), $(D InterruptibleTaskMutex) */ final class InterruptibleRecursiveTaskMutex : Lockable { @safe: private RecursiveTaskMutexImpl!true m_impl; this() { m_impl.setup(); } bool tryLock() { return m_impl.tryLock(); } void lock() { m_impl.lock(); } void unlock() { m_impl.unlock(); } } unittest { runMutexUnitTests!InterruptibleRecursiveTaskMutex(); } private void runMutexUnitTests(M)() { import vibe.core.core; auto m = new M; Task t1, t2; void runContendedTasks(bool interrupt_t1, bool interrupt_t2) { assert(!m.m_impl.m_locked); // t1 starts first and acquires the mutex for 20 ms // t2 starts second and has to wait in m.lock() t1 = runTask({ assert(!m.m_impl.m_locked); m.lock(); assert(m.m_impl.m_locked); if (interrupt_t1) assertThrown!InterruptException(sleep(100.msecs)); else assertNotThrown(sleep(20.msecs)); m.unlock(); }); t2 = runTask({ assert(!m.tryLock()); if (interrupt_t2) { try m.lock(); catch (InterruptException) return; try yield(); // rethrows any deferred exceptions catch (InterruptException) { m.unlock(); return; } assert(false, "Supposed to have thrown an InterruptException."); } else assertNotThrown(m.lock()); assert(m.m_impl.m_locked); sleep(20.msecs); m.unlock(); assert(!m.m_impl.m_locked); }); } // basic lock test m.performLocked!({ assert(m.m_impl.m_locked); }); assert(!m.m_impl.m_locked); // basic contention test runContendedTasks(false, false); runTask({ assert(t1.running && t2.running); assert(m.m_impl.m_locked); t1.join(); assert(!t1.running && t2.running); yield(); // give t2 a chance to take the lock assert(m.m_impl.m_locked); t2.join(); assert(!t2.running); assert(!m.m_impl.m_locked); exitEventLoop(); }); runEventLoop(); assert(!m.m_impl.m_locked); // interruption test #1 runContendedTasks(true, false); runTask({ assert(t1.running && t2.running); assert(m.m_impl.m_locked); t1.interrupt(); t1.join(); assert(!t1.running && t2.running); yield(); // give t2 a chance to take the lock assert(m.m_impl.m_locked); t2.join(); assert(!t2.running); assert(!m.m_impl.m_locked); exitEventLoop(); }); runEventLoop(); assert(!m.m_impl.m_locked); // interruption test #2 runContendedTasks(false, true); runTask({ assert(t1.running && t2.running); assert(m.m_impl.m_locked); t2.interrupt(); t2.join(); assert(!t2.running); static if (is(M == InterruptibleTaskMutex) || is (M == InterruptibleRecursiveTaskMutex)) assert(t1.running && m.m_impl.m_locked); t1.join(); assert(!t1.running); assert(!m.m_impl.m_locked); exitEventLoop(); }); runEventLoop(); assert(!m.m_impl.m_locked); } /** Event loop based condition variable or "event" implementation. This class can be used in exchange for a $(D core.sync.condition.Condition) to avoid blocking the event loop when waiting. Notice: Because this class is annotated nothrow, it cannot be interrupted using $(D vibe.core.task.Task.interrupt()). The corresponding $(D InterruptException) will be deferred until the next blocking operation yields to the event loop. Use $(D InterruptibleTaskCondition) as an alternative that can be interrupted. Note that it is generally not safe to use a `TaskCondition` together with an interruptible mutex type. See_Also: InterruptibleTaskCondition */ class TaskCondition : core.sync.condition.Condition { @safe: private TaskConditionImpl!(false, Mutex) m_impl; this(core.sync.mutex.Mutex mtx) nothrow { m_impl.setup(mtx); super(mtx); } override @property Mutex mutex() nothrow { return m_impl.mutex; } override void wait() { m_impl.wait(); } override bool wait(Duration timeout) { return m_impl.wait(timeout); } override void notify() { m_impl.notify(); } override void notifyAll() { m_impl.notifyAll(); } } /** This example shows the typical usage pattern using a `while` loop to make sure that the final condition is reached. */ unittest { import vibe.core.core; __gshared Mutex mutex; __gshared TaskCondition condition; __gshared int workers_still_running = 0; // setup the task condition mutex = new Mutex; condition = new TaskCondition(mutex); // start up the workers and count how many are running foreach (i; 0 .. 4) { workers_still_running++; runWorkerTask({ // simulate some work sleep(100.msecs); // notify the waiter that we're finished synchronized (mutex) workers_still_running--; condition.notify(); }); } // wait until all tasks have decremented the counter back to zero synchronized (mutex) { while (workers_still_running > 0) condition.wait(); } } /** Alternative to `TaskCondition` that supports interruption. This class supports the use of `vibe.core.task.Task.interrupt()` while waiting in the `wait()` method. See `TaskCondition` for an example. Notice: Note that it is generally not safe to use an `InterruptibleTaskCondition` together with an interruptible mutex type. See_Also: `TaskCondition` */ final class InterruptibleTaskCondition { @safe: private TaskConditionImpl!(true, Lockable) m_impl; this(core.sync.mutex.Mutex mtx) nothrow { m_impl.setup(mtx); } this(Lockable mtx) nothrow { m_impl.setup(mtx); } @property Lockable mutex() { return m_impl.mutex; } void wait() { m_impl.wait(); } bool wait(Duration timeout) { return m_impl.wait(timeout); } void notify() { m_impl.notify(); } void notifyAll() { m_impl.notifyAll(); } } /** Creates a new signal that can be shared between fibers. */ ManualEvent createManualEvent() @safe nothrow { return getEventDriver().createManualEvent(); } /** Creates a new signal that can be shared between fibers. */ LocalManualEvent createLocalManualEvent() @safe nothrow { return getEventDriver().createManualEvent(); } alias LocalManualEvent = ManualEvent; /** A manually triggered cross-task event. Note: the ownership can be shared between multiple fibers and threads. */ interface ManualEvent { @safe: /// A counter that is increased with every emit() call @property int emitCount() const nothrow; /// Emits the signal, waking up all owners of the signal. void emit() nothrow; /** Acquires ownership and waits until the signal is emitted. Throws: May throw an $(D InterruptException) if the task gets interrupted using $(D Task.interrupt()). */ void wait(); /** Acquires ownership and waits until the emit count differs from the given one. Throws: May throw an $(D InterruptException) if the task gets interrupted using $(D Task.interrupt()). */ int wait(int reference_emit_count); /** Acquires ownership and waits until the emit count differs from the given one or until a timeout is reached. Throws: May throw an $(D InterruptException) if the task gets interrupted using $(D Task.interrupt()). */ int wait(Duration timeout, int reference_emit_count); /** Same as $(D wait), but defers throwing any $(D InterruptException). This method is annotated $(D nothrow) at the expense that it cannot be interrupted. */ int waitUninterruptible(int reference_emit_count) nothrow; /// ditto int waitUninterruptible(Duration timeout, int reference_emit_count) nothrow; } private struct TaskMutexImpl(bool INTERRUPTIBLE) { import std.stdio; private { shared(bool) m_locked = false; shared(uint) m_waiters = 0; ManualEvent m_signal; debug Task m_owner; } void setup() nothrow { m_signal = createManualEvent(); } @trusted bool tryLock() { if (cas(&m_locked, false, true)) { debug m_owner = Task.getThis(); version(MutexPrint) writefln("mutex %s lock %s", cast(void*)this, atomicLoad(m_waiters)); return true; } return false; } @trusted void lock() { if (tryLock()) return; debug assert(m_owner == Task() || m_owner != Task.getThis(), "Recursive mutex lock."); atomicOp!"+="(m_waiters, 1); version(MutexPrint) writefln("mutex %s wait %s", cast(void*)this, atomicLoad(m_waiters)); scope(exit) atomicOp!"-="(m_waiters, 1); auto ecnt = m_signal.emitCount(); while (!tryLock()) { static if (INTERRUPTIBLE) ecnt = m_signal.wait(ecnt); else ecnt = m_signal.waitUninterruptible(ecnt); } } @trusted void unlock() { assert(m_locked); debug { assert(m_owner == Task.getThis()); m_owner = Task(); } atomicStore!(MemoryOrder.rel)(m_locked, false); version(MutexPrint) writefln("mutex %s unlock %s", cast(void*)this, atomicLoad(m_waiters)); if (atomicLoad(m_waiters) > 0) m_signal.emit(); } } private struct RecursiveTaskMutexImpl(bool INTERRUPTIBLE) { import std.stdio; private { core.sync.mutex.Mutex m_mutex; Task m_owner; size_t m_recCount = 0; shared(uint) m_waiters = 0; ManualEvent m_signal; @property bool m_locked() const { return m_recCount > 0; } } void setup() { m_signal = createManualEvent(); m_mutex = new core.sync.mutex.Mutex; } @trusted bool tryLock() { auto self = Task.getThis(); return m_mutex.performLocked!({ if (!m_owner) { assert(m_recCount == 0); m_recCount = 1; m_owner = self; return true; } else if (m_owner == self) { m_recCount++; return true; } return false; }); } @trusted void lock() { if (tryLock()) return; atomicOp!"+="(m_waiters, 1); version(MutexPrint) writefln("mutex %s wait %s", cast(void*)this, atomicLoad(m_waiters)); scope(exit) atomicOp!"-="(m_waiters, 1); auto ecnt = m_signal.emitCount(); while (!tryLock()) { static if (INTERRUPTIBLE) ecnt = m_signal.wait(ecnt); else ecnt = m_signal.waitUninterruptible(ecnt); } } @trusted void unlock() { auto self = Task.getThis(); m_mutex.performLocked!({ assert(m_owner == self); assert(m_recCount > 0); m_recCount--; if (m_recCount == 0) { m_owner = Task.init; } }); version(MutexPrint) writefln("mutex %s unlock %s", cast(void*)this, atomicLoad(m_waiters)); if (atomicLoad(m_waiters) > 0) m_signal.emit(); } } private struct TaskConditionImpl(bool INTERRUPTIBLE, LOCKABLE) { private { LOCKABLE m_mutex; ManualEvent m_signal; } static if (is(LOCKABLE == Lockable)) { final class MutexWrapper : Lockable { private core.sync.mutex.Mutex m_mutex; this(core.sync.mutex.Mutex mtx) { m_mutex = mtx; } @trusted void lock() { m_mutex.lock(); } @trusted void unlock() { m_mutex.unlock(); } @trusted bool tryLock() { return m_mutex.tryLock(); } } void setup(core.sync.mutex.Mutex mtx) { setup(new MutexWrapper(mtx)); } } void setup(LOCKABLE mtx) { m_mutex = mtx; m_signal = createManualEvent(); } @property LOCKABLE mutex() { return m_mutex; } @trusted void wait() { if (auto tm = cast(TaskMutex)m_mutex) { assert(tm.m_impl.m_locked); debug assert(tm.m_impl.m_owner == Task.getThis()); } auto refcount = m_signal.emitCount; m_mutex.unlock(); scope(exit) m_mutex.lock(); static if (INTERRUPTIBLE) m_signal.wait(refcount); else m_signal.waitUninterruptible(refcount); } @trusted bool wait(Duration timeout) { assert(!timeout.isNegative()); if (auto tm = cast(TaskMutex)m_mutex) { assert(tm.m_impl.m_locked); debug assert(tm.m_impl.m_owner == Task.getThis()); } auto refcount = m_signal.emitCount; m_mutex.unlock(); scope(exit) m_mutex.lock(); static if (INTERRUPTIBLE) return m_signal.wait(timeout, refcount) != refcount; else return m_signal.waitUninterruptible(timeout, refcount) != refcount; } @trusted void notify() { m_signal.emit(); } @trusted void notifyAll() { m_signal.emit(); } } /** Contains the shared state of a $(D TaskReadWriteMutex). * * Since a $(D TaskReadWriteMutex) consists of two actual Mutex * objects that rely on common memory, this class implements * the actual functionality of their method calls. * * The method implementations are based on two static parameters * ($(D INTERRUPTIBLE) and $(D INTENT)), which are configured through * template arguments: * * - $(D INTERRUPTIBLE) determines whether the mutex implementation * are interruptible by vibe.d's $(D vibe.core.task.Task.interrupt()) * method or not. * * - $(D INTENT) describes the intent, with which a locking operation is * performed (i.e. $(D READ_ONLY) or $(D READ_WRITE)). RO locking allows for * multiple Tasks holding the mutex, whereas RW locking will cause * a "bottleneck" so that only one Task can write to the protected * data at once. */ private struct ReadWriteMutexState(bool INTERRUPTIBLE) { @safe: /** The policy with which the mutex should operate. * * The policy determines how the acquisition of the locks is * performed and can be used to tune the mutex according to the * underlying algorithm in which it is used. * * According to the provided policy, the mutex will either favor * reading or writing tasks and could potentially starve the * respective opposite. * * cf. $(D core.sync.rwmutex.ReadWriteMutex.Policy) */ enum Policy : int { /** Readers are prioritized, writers may be starved as a result. */ PREFER_READERS = 0, /** Writers are prioritized, readers may be starved as a result. */ PREFER_WRITERS } /** The intent with which a locking operation is performed. * * Since both locks share the same underlying algorithms, the actual * intent with which a lock operation is performed (i.e read/write) * are passed as a template parameter to each method. */ enum LockingIntent : bool { /** Perform a read lock/unlock operation. Multiple reading locks can be * active at a time. */ READ_ONLY = 0, /** Perform a write lock/unlock operation. Only a single writer can * hold a lock at any given time. */ READ_WRITE = 1 } private { //Queue counters /** The number of reading tasks waiting for the lock to become available. */ shared(uint) m_waitingForReadLock = 0; /** The number of writing tasks waiting for the lock to become available. */ shared(uint) m_waitingForWriteLock = 0; //Lock counters /** The number of reading tasks that currently hold the lock. */ uint m_activeReadLocks = 0; /** The number of writing tasks that currently hold the lock (binary). */ ubyte m_activeWriteLocks = 0; /** The policy determining the lock's behavior. */ Policy m_policy; //Queue Events /** The event used to wake reading tasks waiting for the lock while it is blocked. */ ManualEvent m_readyForReadLock; /** The event used to wake writing tasks waiting for the lock while it is blocked. */ ManualEvent m_readyForWriteLock; /** The underlying mutex that gates the access to the shared state. */ Mutex m_counterMutex; } this(Policy policy) { m_policy = policy; m_counterMutex = new Mutex(); m_readyForReadLock = createManualEvent(); m_readyForWriteLock = createManualEvent(); } @disable this(this); /** The policy with which the lock has been created. */ @property policy() const { return m_policy; } version(RWMutexPrint) { /** Print out debug information during lock operations. */ void printInfo(string OP, LockingIntent INTENT)() nothrow { import std.string; try { import std.stdio; writefln("RWMutex: %s (%s), active: RO: %d, RW: %d; waiting: RO: %d, RW: %d", OP.leftJustify(10,' '), INTENT == LockingIntent.READ_ONLY ? "RO" : "RW", m_activeReadLocks, m_activeWriteLocks, m_waitingForReadLock, m_waitingForWriteLock ); } catch (Exception t){} } } /** An internal shortcut method to determine the queue event for a given intent. */ @property ref auto queueEvent(LockingIntent INTENT)() { static if (INTENT == LockingIntent.READ_ONLY) return m_readyForReadLock; else return m_readyForWriteLock; } /** An internal shortcut method to determine the queue counter for a given intent. */ @property ref auto queueCounter(LockingIntent INTENT)() { static if (INTENT == LockingIntent.READ_ONLY) return m_waitingForReadLock; else return m_waitingForWriteLock; } /** An internal shortcut method to determine the current emitCount of the queue counter for a given intent. */ int emitCount(LockingIntent INTENT)() { return queueEvent!INTENT.emitCount(); } /** An internal shortcut method to determine the active counter for a given intent. */ @property ref auto activeCounter(LockingIntent INTENT)() { static if (INTENT == LockingIntent.READ_ONLY) return m_activeReadLocks; else return m_activeWriteLocks; } /** An internal shortcut method to wait for the queue event for a given intent. * * This method is used during the `lock()` operation, after a * `tryLock()` operation has been unsuccessfully finished. * The active fiber will yield and be suspended until the queue event * for the given intent will be fired. */ int wait(LockingIntent INTENT)(int count) { static if (INTERRUPTIBLE) return queueEvent!INTENT.wait(count); else return queueEvent!INTENT.waitUninterruptible(count); } /** An internal shortcut method to notify tasks waiting for the lock to become available again. * * This method is called whenever the number of owners of the mutex hits * zero; this is basically the counterpart to `wait()`. * It wakes any Task currently waiting for the mutex to be released. */ @trusted void notify(LockingIntent INTENT)() { static if (INTENT == LockingIntent.READ_ONLY) { //If the last reader unlocks the mutex, notify all waiting writers if (atomicLoad(m_waitingForWriteLock) > 0) m_readyForWriteLock.emit(); } else { //If a writer unlocks the mutex, notify both readers and writers if (atomicLoad(m_waitingForReadLock) > 0) m_readyForReadLock.emit(); if (atomicLoad(m_waitingForWriteLock) > 0) m_readyForWriteLock.emit(); } } /** An internal method that performs the acquisition attempt in different variations. * * Since both locks rely on a common TaskMutex object which gates the access * to their common data acquisition attempts for this lock are more complex * than for simple mutex variants. This method will thus be performing the * `tryLock()` operation in two variations, depending on the callee: * * If called from the outside ($(D WAIT_FOR_BLOCKING_MUTEX) = false), the method * will instantly fail if the underlying mutex is locked (i.e. during another * `tryLock()` or `unlock()` operation), in order to guarantee the fastest * possible locking attempt. * * If used internally by the `lock()` method ($(D WAIT_FOR_BLOCKING_MUTEX) = true), * the operation will wait for the mutex to be available before deciding if * the lock can be acquired, since the attempt would anyway be repeated until * it succeeds. This will prevent frequent retries under heavy loads and thus * should ensure better performance. */ @trusted bool tryLock(LockingIntent INTENT, bool WAIT_FOR_BLOCKING_MUTEX)() { //Log a debug statement for the attempt version(RWMutexPrint) printInfo!("tryLock",INTENT)(); //Try to acquire the lock static if (!WAIT_FOR_BLOCKING_MUTEX) { if (!m_counterMutex.tryLock()) return false; } else m_counterMutex.lock(); scope(exit) m_counterMutex.unlock(); //Log a debug statement for the attempt version(RWMutexPrint) printInfo!("checkCtrs",INTENT)(); //Check if there's already an active writer if (m_activeWriteLocks > 0) return false; //If writers are preferred over readers, check whether there //currently is a writer in the waiting queue and abort if //that's the case. static if (INTENT == LockingIntent.READ_ONLY) if (m_policy.PREFER_WRITERS && m_waitingForWriteLock > 0) return false; //If we are locking the mutex for writing, make sure that //there's no reader active. static if (INTENT == LockingIntent.READ_WRITE) if (m_activeReadLocks > 0) return false; //We can successfully acquire the lock! //Log a debug statement for the success. version(RWMutexPrint) printInfo!("lock",INTENT)(); //Increase the according counter //(number of active readers/writers) //and return a success code. activeCounter!INTENT += 1; return true; } /** Attempt to acquire the lock for a given intent. * * Returns: * `true`, if the lock was successfully acquired; * `false` otherwise. */ @trusted bool tryLock(LockingIntent INTENT)() { //Try to lock this mutex without waiting for the underlying //TaskMutex - fail if it is already blocked. return tryLock!(INTENT,false)(); } /** Acquire the lock for the given intent; yield and suspend until the lock has been acquired. */ @trusted void lock(LockingIntent INTENT)() { //Prepare a waiting action before the first //`tryLock()` call in order to avoid a race //condition that could lead to the queue notification //not being fired. auto count = emitCount!INTENT; atomicOp!"+="(queueCounter!INTENT,1); scope(exit) atomicOp!"-="(queueCounter!INTENT,1); //Try to lock the mutex auto locked = tryLock!(INTENT,true)(); if (locked) return; //Retry until we successfully acquired the lock while(!locked) { version(RWMutexPrint) printInfo!("wait",INTENT)(); count = wait!INTENT(count); locked = tryLock!(INTENT,true)(); } } /** Unlock the mutex after a successful acquisition. */ @trusted void unlock(LockingIntent INTENT)() { version(RWMutexPrint) printInfo!("unlock",INTENT)(); debug assert(activeCounter!INTENT > 0); synchronized(m_counterMutex) { //Decrement the counter of active lock holders. //If the counter hits zero, notify waiting Tasks activeCounter!INTENT -= 1; if (activeCounter!INTENT == 0) { version(RWMutexPrint) printInfo!("notify",INTENT)(); notify!INTENT(); } } } } /** A ReadWriteMutex implementation for fibers. * * This mutex can be used in exchange for a $(D core.sync.mutex.ReadWriteMutex), * but does not block the event loop in contention situations. The `reader` and `writer` * members are used for locking. Locking the `reader` mutex allows access to multiple * readers at once, while the `writer` mutex only allows a single writer to lock it at * any given time. Locks on `reader` and `writer` are mutually exclusive (i.e. whenever a * writer is active, no readers can be active at the same time, and vice versa). * * Notice: * Mutexes implemented by this class cannot be interrupted * using $(D vibe.core.task.Task.interrupt()). The corresponding * InterruptException will be deferred until the next blocking * operation yields the event loop. * * Use $(D InterruptibleTaskReadWriteMutex) as an alternative that can be * interrupted. * * cf. $(D core.sync.mutex.ReadWriteMutex) */ class TaskReadWriteMutex { @safe: private { alias State = ReadWriteMutexState!false; alias LockingIntent = State.LockingIntent; alias READ_ONLY = LockingIntent.READ_ONLY; alias READ_WRITE = LockingIntent.READ_WRITE; /** The shared state used by the reader and writer mutexes. */ State m_state; } /** The policy with which the mutex should operate. * * The policy determines how the acquisition of the locks is * performed and can be used to tune the mutex according to the * underlying algorithm in which it is used. * * According to the provided policy, the mutex will either favor * reading or writing tasks and could potentially starve the * respective opposite. * * cf. $(D core.sync.rwmutex.ReadWriteMutex.Policy) */ alias Policy = State.Policy; /** A common baseclass for both of the provided mutexes. * * The intent for the according mutex is specified through the * $(D INTENT) template argument, which determines if a mutex is * used for read or write locking. */ final class Mutex(LockingIntent INTENT): core.sync.mutex.Mutex, Lockable { /** Try to lock the mutex. cf. $(D core.sync.mutex.Mutex) */ override bool tryLock() { return m_state.tryLock!INTENT(); } /** Lock the mutex. cf. $(D core.sync.mutex.Mutex) */ override void lock() { m_state.lock!INTENT(); } /** Unlock the mutex. cf. $(D core.sync.mutex.Mutex) */ override void unlock() { m_state.unlock!INTENT(); } } alias Reader = Mutex!READ_ONLY; alias Writer = Mutex!READ_WRITE; Reader reader; Writer writer; this(Policy policy = Policy.PREFER_WRITERS) { m_state = State(policy); reader = new Reader(); writer = new Writer(); } /** The policy with which the lock has been created. */ @property Policy policy() const { return m_state.policy; } } /** Alternative to $(D TaskReadWriteMutex) that supports interruption. * * This class supports the use of $(D vibe.core.task.Task.interrupt()) while * waiting in the `lock()` method. * * cf. $(D core.sync.mutex.ReadWriteMutex) */ class InterruptibleTaskReadWriteMutex { @safe: private { alias State = ReadWriteMutexState!true; alias LockingIntent = State.LockingIntent; alias READ_ONLY = LockingIntent.READ_ONLY; alias READ_WRITE = LockingIntent.READ_WRITE; /** The shared state used by the reader and writer mutexes. */ State m_state; } /** The policy with which the mutex should operate. * * The policy determines how the acquisition of the locks is * performed and can be used to tune the mutex according to the * underlying algorithm in which it is used. * * According to the provided policy, the mutex will either favor * reading or writing tasks and could potentially starve the * respective opposite. * * cf. $(D core.sync.rwmutex.ReadWriteMutex.Policy) */ alias Policy = State.Policy; /** A common baseclass for both of the provided mutexes. * * The intent for the according mutex is specified through the * $(D INTENT) template argument, which determines if a mutex is * used for read or write locking. * */ final class Mutex(LockingIntent INTENT): core.sync.mutex.Mutex, Lockable { /** Try to lock the mutex. cf. $(D core.sync.mutex.Mutex) */ override bool tryLock() { return m_state.tryLock!INTENT(); } /** Lock the mutex. cf. $(D core.sync.mutex.Mutex) */ override void lock() { m_state.lock!INTENT(); } /** Unlock the mutex. cf. $(D core.sync.mutex.Mutex) */ override void unlock() { m_state.unlock!INTENT(); } } alias Reader = Mutex!READ_ONLY; alias Writer = Mutex!READ_WRITE; Reader reader; Writer writer; this(Policy policy = Policy.PREFER_WRITERS) { m_state = State(policy); reader = new Reader(); writer = new Writer(); } /** The policy with which the lock has been created. */ @property Policy policy() const { return m_state.policy; } } vibe.d-0.8.2/core/vibe/core/task.d000066400000000000000000000173061324361747700166310ustar00rootroot00000000000000/** Contains interfaces and enums for evented I/O drivers. Copyright: © 2012-2014 RejectedSoftware e.K. Authors: Sönke Ludwig License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. */ module vibe.core.task; import vibe.core.sync; import vibe.utils.array; import core.thread; import std.exception; import std.traits; import std.typecons; import std.variant; /** Represents a single task as started using vibe.core.runTask. Note that the Task type is considered weakly isolated and thus can be passed between threads using vibe.core.concurrency.send or by passing it as a parameter to vibe.core.core.runWorkerTask. */ struct Task { private { shared(TaskFiber) m_fiber; size_t m_taskCounter; import std.concurrency : ThreadInfo, Tid; static ThreadInfo s_tidInfo; } private this(TaskFiber fiber, size_t task_counter) @safe nothrow { () @trusted { m_fiber = cast(shared)fiber; } (); m_taskCounter = task_counter; } this(in Task other) nothrow { m_fiber = cast(shared(TaskFiber))other.m_fiber; m_taskCounter = other.m_taskCounter; } /** Returns the Task instance belonging to the calling task. */ static Task getThis() nothrow @safe { auto fiber = () @trusted { return Fiber.getThis(); } (); if (!fiber) return Task.init; auto tfiber = cast(TaskFiber)fiber; if (!tfiber) return Task.init; if (!tfiber.m_running) return Task.init; return () @trusted { return Task(tfiber, tfiber.m_taskCounter); } (); } nothrow { @property inout(TaskFiber) fiber() inout @trusted { return cast(inout(TaskFiber))m_fiber; } @property size_t taskCounter() const @safe { return m_taskCounter; } @property inout(Thread) thread() inout @safe { if (m_fiber) return this.fiber.thread; return null; } /** Determines if the task is still running. */ @property bool running() const @trusted { assert(m_fiber !is null, "Invalid task handle"); try if (this.fiber.state == Fiber.State.TERM) return false; catch (Throwable) {} return this.fiber.m_running && this.fiber.m_taskCounter == m_taskCounter; } // FIXME: this is not thread safe! @property ref ThreadInfo tidInfo() { return m_fiber ? fiber.tidInfo : s_tidInfo; } @property ref const(ThreadInfo) tidInfo() const { return m_fiber ? fiber.tidInfo : s_tidInfo; } @property Tid tid() { return tidInfo.ident; } @property const(Tid) tid() const { return tidInfo.ident; } } /// Reserved for internal use! @property inout(MessageQueue) messageQueue() inout { assert(running, "Task is not running"); return fiber.messageQueue; } T opCast(T)() const nothrow if (is(T == bool)) { return m_fiber !is null; } void join() @safe { if (running) fiber.join(); } void interrupt() { if (running) fiber.interrupt(); } void terminate() { if (running) fiber.terminate(); } string toString() const @safe { import std.string; return format("%s:%s", () @trusted { return cast(void*)m_fiber; } (), m_taskCounter); } bool opEquals(in ref Task other) const nothrow @safe { return m_fiber is other.m_fiber && m_taskCounter == other.m_taskCounter; } bool opEquals(in Task other) const nothrow @safe { return m_fiber is other.m_fiber && m_taskCounter == other.m_taskCounter; } } /** The base class for a task aka Fiber. This class represents a single task that is executed concurrently with other tasks. Each task is owned by a single thread. */ class TaskFiber : Fiber { private { import std.concurrency : ThreadInfo; Thread m_thread; ThreadInfo m_tidInfo; MessageQueue m_messageQueue; } protected { shared size_t m_taskCounter; shared bool m_running; } protected this(void delegate() fun, size_t stack_size) nothrow { super(fun, stack_size); m_thread = Thread.getThis(); scope (failure) assert(false); m_messageQueue = new MessageQueue; } /** Returns the thread that owns this task. */ @property inout(Thread) thread() inout @safe nothrow { return m_thread; } /** Returns the handle of the current Task running on this fiber. */ @property Task task() @safe nothrow { return Task(this, m_taskCounter); } /// Reserved for internal use! @property inout(MessageQueue) messageQueue() inout { return m_messageQueue; } @property ref inout(ThreadInfo) tidInfo() inout nothrow { return m_tidInfo; } /** Blocks until the task has ended. */ abstract void join() @safe; /** Throws an InterruptExeption within the task as soon as it calls a blocking function. */ abstract void interrupt(); /** Terminates the task without notice as soon as it calls a blocking function. */ abstract void terminate(); void bumpTaskCounter() @safe nothrow { import core.atomic : atomicOp; () @trusted { atomicOp!"+="(this.m_taskCounter, 1); } (); } } /** Exception that is thrown by Task.interrupt. */ class InterruptException : Exception { this() { super("Task interrupted."); } } class MessageQueue { private { InterruptibleTaskMutex m_mutex; InterruptibleTaskCondition m_condition; FixedRingBuffer!Variant m_queue; FixedRingBuffer!Variant m_priorityQueue; size_t m_maxMailboxSize = 0; bool function(Task) m_onCrowding; } this() { m_mutex = new InterruptibleTaskMutex; m_condition = new InterruptibleTaskCondition(m_mutex); m_queue.capacity = 32; m_priorityQueue.capacity = 8; } @property bool full() const { return m_maxMailboxSize > 0 && m_queue.length + m_priorityQueue.length >= m_maxMailboxSize; } void clear() { m_mutex.performLocked!({ m_queue.clear(); m_priorityQueue.clear(); }); m_condition.notifyAll(); } void setMaxSize(size_t count, bool function(Task tid) action) { m_maxMailboxSize = count; m_onCrowding = action; } void send(Variant msg) { import vibe.core.log; m_mutex.performLocked!({ if( this.full ){ if( !m_onCrowding ){ while(this.full) m_condition.wait(); } else if( !m_onCrowding(Task.getThis()) ){ return; } } assert(!this.full); if( m_queue.full ) m_queue.capacity = (m_queue.capacity * 3) / 2; m_queue.put(msg); }); m_condition.notify(); } void prioritySend(Variant msg) { m_mutex.performLocked!({ if (m_priorityQueue.full) m_priorityQueue.capacity = (m_priorityQueue.capacity * 3) / 2; m_priorityQueue.put(msg); }); m_condition.notify(); } void receive(scope bool delegate(Variant) filter, scope void delegate(Variant) handler) { bool notify; scope (exit) if (notify) m_condition.notify(); Variant args; m_mutex.performLocked!({ notify = this.full; while (true) { import vibe.core.log; logTrace("looking for messages"); if (receiveQueue(m_priorityQueue, args, filter)) break; if (receiveQueue(m_queue, args, filter)) break; logTrace("received no message, waiting.."); m_condition.wait(); notify = this.full; } }); handler(args); } bool receiveTimeout(OPS...)(Duration timeout, scope bool delegate(Variant) filter, scope void delegate(Variant) handler) { import std.datetime; bool notify; scope (exit) if (notify) m_condition.notify(); auto limit_time = Clock.currTime(UTC()) + timeout; Variant args; if (!m_mutex.performLocked!({ notify = this.full; while (true) { if (receiveQueue(m_priorityQueue, args, filter)) break; if (receiveQueue(m_queue, args, filter)) break; auto now = Clock.currTime(UTC()); if (now >= limit_time) return false; m_condition.wait(limit_time - now); notify = this.full; } return true; })) return false; handler(args); return true; } private static bool receiveQueue(OPS...)(ref FixedRingBuffer!Variant queue, ref Variant dst, scope bool delegate(Variant) filter) { auto r = queue[]; while (!r.empty) { scope (failure) queue.removeAt(r); auto msg = r.front; if (filter(msg)) { dst = msg; queue.removeAt(r); return true; } r.popFront(); } return false; } } vibe.d-0.8.2/core/vibe/internal/000077500000000000000000000000001324361747700163775ustar00rootroot00000000000000vibe.d-0.8.2/core/vibe/internal/allocator.d000066400000000000000000000016201324361747700205230ustar00rootroot00000000000000module vibe.internal.allocator; public import std.experimental.allocator : allocatorObject, CAllocatorImpl, dispose, expandArray, IAllocator, make, makeArray, shrinkArray, theAllocator; public import std.experimental.allocator.building_blocks.allocator_list; public import std.experimental.allocator.building_blocks.null_allocator; public import std.experimental.allocator.building_blocks.region; public import std.experimental.allocator.building_blocks.stats_collector; public import std.experimental.allocator.gc_allocator; public import std.experimental.allocator.mallocator; // NOTE: this needs to be used instead of theAllocator due to Phobos issue 17564 @property IAllocator vibeThreadAllocator() @safe nothrow @nogc { static IAllocator s_threadAllocator; if (!s_threadAllocator) s_threadAllocator = () @trusted { return allocatorObject(GCAllocator.instance); } (); return s_threadAllocator; } vibe.d-0.8.2/core/vibe/internal/freelistref.d000066400000000000000000000141611324361747700210610ustar00rootroot00000000000000/** Utility functions for memory management Note that this module currently is a big sand box for testing allocation related stuff. Nothing here, including the interfaces, is final but rather a lot of experimentation. Copyright: © 2012-2013 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.internal.freelistref; import vibe.internal.allocator; import vibe.internal.meta.traits : synchronizedIsNothrow; import core.exception : OutOfMemoryError; import core.stdc.stdlib; import core.memory; import std.conv; import std.exception : enforceEx; import std.traits; import std.algorithm; struct FreeListObjectAlloc(T, bool USE_GC = true, bool INIT = true, EXTRA = void) { enum ElemSize = AllocSize!T; enum ElemSlotSize = max(AllocSize!T + AllocSize!EXTRA, Slot.sizeof); static if( is(T == class) ){ alias TR = T; } else { alias TR = T*; } struct Slot { Slot* next; } private static Slot* s_firstFree; static TR alloc(ARGS...)(ARGS args) { void[] mem; if (s_firstFree !is null) { auto ret = s_firstFree; s_firstFree = s_firstFree.next; ret.next = null; mem = () @trusted { return (cast(void*)ret)[0 .. ElemSlotSize]; } (); } else { //logInfo("alloc %s/%d", T.stringof, ElemSize); mem = Mallocator.instance.allocate(ElemSlotSize); static if(hasIndirections!T) () @trusted { GC.addRange(mem.ptr, ElemSlotSize); } (); } // FIXME: this emplace has issues with qualified types, but Unqual!T may result in the wrong constructor getting called. static if (INIT) internalEmplace!(Unqual!T)(mem[0 .. ElemSize], args); return () @trusted { return cast(TR)mem.ptr; } (); } static void free(TR obj) { static if (INIT) { scope (failure) assert(0, "You shouldn't throw in destructors"); auto objc = obj; static if (is(TR == T*)) .destroy(*objc);//typeid(T).destroy(cast(void*)obj); else .destroy(objc); } auto sl = cast(Slot*)obj; sl.next = s_firstFree; s_firstFree = sl; //static if( hasIndirections!T ) GC.removeRange(cast(void*)obj); //Mallocator.instance.deallocate((cast(void*)obj)[0 .. ElemSlotSize]); } } @safe unittest { struct S {} FreeListObjectAlloc!S.alloc(); } template AllocSize(T) { static if (is(T == class)) { // workaround for a strange bug where AllocSize!SSLStream == 0: TODO: dustmite! enum dummy = T.stringof ~ __traits(classInstanceSize, T).stringof; enum AllocSize = __traits(classInstanceSize, T); } else { enum AllocSize = T.sizeof; } } struct FreeListRef(T, bool INIT = true) { alias ObjAlloc = FreeListObjectAlloc!(T, true, INIT, int); enum ElemSize = AllocSize!T; static if( is(T == class) ){ alias TR = T; } else { alias TR = T*; } private TR m_object; private size_t m_magic = 0x1EE75817; // workaround for compiler bug static FreeListRef opCall(ARGS...)(ARGS args) { FreeListRef ret; ret.m_object = ObjAlloc.alloc!ARGS(args); ret.refCount = 1; //logInfo("refalloc %s/%d", T.stringof, ElemSize); return ret; } ~this() { //if( m_object ) logInfo("~this!%s(): %d", T.stringof, this.refCount); //if( m_object ) logInfo("ref %s destructor %d", T.stringof, refCount); //else logInfo("ref %s destructor %d", T.stringof, 0); clear(); m_magic = 0; m_object = null; } this(this) { checkInvariants(); if( m_object ){ //if( m_object ) logInfo("this!%s(this): %d", T.stringof, this.refCount); this.refCount++; } } void opAssign(FreeListRef other) { clear(); m_object = other.m_object; if( m_object ){ //logInfo("opAssign!%s(): %d", T.stringof, this.refCount); refCount++; } } void clear() { checkInvariants(); if (m_object) { if (--this.refCount == 0) () @trusted { ObjAlloc.free(m_object); } (); } m_object = null; m_magic = 0x1EE75817; } static if (is(T == class)) { @property inout(T) get() inout @safe nothrow { return m_object; } } else { @property ref inout(T) get() inout @safe nothrow { return *m_object; } void opAssign(T t) { *m_object = t; } } alias get this; private @property ref int refCount() const @trusted { assert(m_object !is null); auto ptr = cast(ubyte*)cast(void*)m_object; ptr += ElemSize; return *cast(int*)ptr; } private void checkInvariants() const { assert(m_magic == 0x1EE75817); assert(!m_object || refCount > 0); } } /// See issue #14194 private T internalEmplace(T, Args...)(void[] chunk, auto ref Args args) if (is(T == class)) in { import std.string, std.format; assert(chunk.length >= T.sizeof, format("emplace: Chunk size too small: %s < %s size = %s", chunk.length, T.stringof, T.sizeof)); assert((cast(size_t) chunk.ptr) % T.alignof == 0, format("emplace: Misaligned memory block (0x%X): it must be %s-byte aligned for type %s", &chunk[0], T.alignof, T.stringof)); } body { enum classSize = __traits(classInstanceSize, T); auto result = () @trusted { return cast(T) chunk.ptr; } (); // Initialize the object in its pre-ctor state () @trusted { static if (__VERSION__ < 2071) chunk[0 .. classSize] = typeid(T).init[]; else chunk[0 .. classSize] = typeid(T).initializer[]; // Avoid deprecation warning } (); // Call the ctor if any static if (is(typeof(result.__ctor(args)))) { // T defines a genuine constructor accepting args // Go the classic route: write .init first, then call ctor result.__ctor(args); } else { static assert(args.length == 0 && !is(typeof(&T.__ctor)), "Don't know how to initialize an object of type " ~ T.stringof ~ " with arguments " ~ Args.stringof); } return result; } /// Dittor private auto internalEmplace(T, Args...)(void[] chunk, auto ref Args args) @safe if (!is(T == class)) in { import std.string, std.format; assert(chunk.length >= T.sizeof, format("emplace: Chunk size too small: %s < %s size = %s", chunk.length, T.stringof, T.sizeof)); assert((cast(size_t) chunk.ptr) % T.alignof == 0, format("emplace: Misaligned memory block (0x%X): it must be %s-byte aligned for type %s", &chunk[0], T.alignof, T.stringof)); } body { return emplace(() @trusted { return cast(T*)chunk.ptr; } (), args); } private void logDebug_(ARGS...)(string msg, ARGS args) {} vibe.d-0.8.2/core/vibe/internal/interfaceproxy.d000066400000000000000000000004121324361747700216030ustar00rootroot00000000000000module vibe.internal.interfaceproxy; O asInterface(I, O)(O obj) if (is(I == interface) && is(O : I)) { return obj; } I interfaceProxy(I, O)(O o) { return o; } /// Dummy declaration to enable forward compatibility with vibe-core 1.0.0 alias InterfaceProxy(I) = I; vibe.d-0.8.2/core/vibe/internal/memory.d000066400000000000000000000001111324361747700200450ustar00rootroot00000000000000module vibe.internal.memory; public import vibe.internal.memory_legacy; vibe.d-0.8.2/crypto/000077500000000000000000000000001324361747700142265ustar00rootroot00000000000000vibe.d-0.8.2/crypto/dub.sdl000066400000000000000000000002671324361747700155110ustar00rootroot00000000000000name "crypto" description "Cryptographic helper routines" targetType "library" dependency "vibe-d:core" version="*" sourcePaths "." importPaths "." libs "advapi32" platform="windows" vibe.d-0.8.2/crypto/meson.build000066400000000000000000000026631324361747700163770ustar00rootroot00000000000000# Meson file for Vibe Crypto vibe_crypto_src_dir = include_directories('.') vibe_crypto_src = [ 'vibe/crypto/cryptorand.d', 'vibe/crypto/passwordhash.d' ] # # Install Includes # install_subdir('vibe/', install_dir: 'include/d/vibe/') # # Build Targets # crypto_link_with = [vibe_utils_lib, vibe_core_lib] # Cryptographic helper routines vibe_crypto_lib = library('vibe-crypto', [vibe_crypto_src], include_directories: [vibe_utils_src_dir, vibe_core_src_dir], install: true, link_with: [crypto_link_with], version: project_version, soversion: project_soversion ) pkgc.generate(name: 'vibe-crypto', libraries: [vibe_crypto_lib] + crypto_link_with, subdirs: 'd/vibe', version: project_version, description: 'Cryptographic helper routines for Vibe.' ) # # Tests # vibe_test_crypto_exe = executable('vibe-test_crypto', [vibe_crypto_src], include_directories: [vibe_utils_src_dir, vibe_core_src_dir, openssl_inc, libevent_inc], dependencies: [zlib_dep, crypto_dep, ssl_dep, libevent_dep], link_with: [crypto_link_with], d_args: meson.get_compiler('d').unittest_args(), link_args: '-main' ) test('vibe-test_crypto', vibe_test_crypto_exe) vibe.d-0.8.2/crypto/vibe/000077500000000000000000000000001324361747700151535ustar00rootroot00000000000000vibe.d-0.8.2/crypto/vibe/crypto/000077500000000000000000000000001324361747700164735ustar00rootroot00000000000000vibe.d-0.8.2/crypto/vibe/crypto/cryptorand.d000077500000000000000000000312751324361747700210400ustar00rootroot00000000000000/** Implements cryptographically secure random number generators. Copyright: © 2013 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Ilya Shipunov */ module vibe.crypto.cryptorand; import std.conv : text; import std.digest.sha; import vibe.core.stream; /** Creates a cryptographically secure random number generator. Note that the returned RNG will operate in a non-blocking mode, which means that if no sufficient entropy has been generated, new random numbers will be generated from previous state. */ RandomNumberStream secureRNG() @safe { static SystemRNG m_rng; if (!m_rng) m_rng = new SystemRNG; return m_rng; } /** Base interface for all cryptographically secure RNGs. */ interface RandomNumberStream : InputStream { /** Fills the buffer new random numbers. Params: dst = The buffer that will be filled with random numbers. It will contain buffer.length random ubytes. Supportes both heap-based and stack-based arrays. Throws: CryptoException on error. */ override size_t read(scope ubyte[] dst, IOMode mode) @safe; alias read = InputStream.read; } /** Operating system specific cryptography secure random number generator. It uses the "CryptGenRandom" function for Windows and "/dev/urandom" for Posix. It's recommended to combine the output use additional processing generated random numbers via provided functions for systems where security matters. Remarks: Windows "CryptGenRandom" RNG has known security vulnerabilities on Windows 2000 and Windows XP (assuming the attacker has control of the machine). Fixed for Windows XP Service Pack 3 and Windows Vista. See_Also: $(LINK http://en.wikipedia.org/wiki/CryptGenRandom) */ final class SystemRNG : RandomNumberStream { @safe: import std.exception; version(Windows) { //cryptographic service provider private HCRYPTPROV hCryptProv; } else version(Posix) { import core.stdc.errno : errno; import core.stdc.stdio : FILE, _IONBF, fopen, fclose, fread, setvbuf; //cryptographic file stream private FILE* m_file; } else { static assert(0, "OS is not supported"); } /** Creates new system random generator */ this() @trusted { version(Windows) { //init cryptographic service provider enforce!CryptoException(CryptAcquireContext(&this.hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) != 0, text("Cannot init SystemRNG: Error id is ", GetLastError())); } else version(Posix) { //open file m_file = fopen("/dev/urandom", "rb"); enforce!CryptoException(m_file !is null, "Failed to open /dev/urandom"); scope (failure) fclose(m_file); //do not use buffering stream to avoid possible attacks enforce!CryptoException(setvbuf(m_file, null, 0, _IONBF) == 0, "Failed to disable buffering for random number file handle"); } } ~this() @trusted { version(Windows) { CryptReleaseContext(this.hCryptProv, 0); } else version (Posix) { fclose(m_file); } } @property bool empty() { return false; } @property ulong leastSize() { return ulong.max; } @property bool dataAvailableForRead() { return true; } const(ubyte)[] peek() { return null; } size_t read(scope ubyte[] buffer, IOMode mode) @trusted in { assert(buffer.length, "buffer length must be larger than 0"); assert(buffer.length <= uint.max, "buffer length must be smaller or equal uint.max"); } body { version (Windows) { if(0 == CryptGenRandom(this.hCryptProv, cast(DWORD)buffer.length, buffer.ptr)) { throw new CryptoException(text("Cannot get next random number: Error id is ", GetLastError())); } } else version (Posix) { enforce!CryptoException(fread(buffer.ptr, buffer.length, 1, m_file) == 1, text("Failed to read next random number: ", errno)); } return buffer.length; } alias read = RandomNumberStream.read; } //test heap-based arrays unittest { import std.algorithm; import std.range; //number random bytes in the buffer enum uint bufferSize = 20; //number of iteration counts enum iterationCount = 10; auto rng = new SystemRNG(); //holds the random number ubyte[] rand = new ubyte[bufferSize]; //holds the previous random number after the creation of the next one ubyte[] prevRadn = new ubyte[bufferSize]; //create the next random number rng.read(prevRadn); assert(!equal(prevRadn, take(repeat(0), bufferSize)), "it's almost unbelievable - all random bytes is zero"); //take "iterationCount" arrays with random bytes foreach(i; 0..iterationCount) { //create the next random number rng.read(rand); assert(!equal(rand, take(repeat(0), bufferSize)), "it's almost unbelievable - all random bytes is zero"); assert(!equal(rand, prevRadn), "it's almost unbelievable - current and previous random bytes are equal"); //copy current random bytes for next iteration prevRadn[] = rand[]; } } //test stack-based arrays unittest { import std.algorithm; import std.range; import std.array; //number random bytes in the buffer enum uint bufferSize = 20; //number of iteration counts enum iterationCount = 10; //array that contains only zeros ubyte[bufferSize] zeroArray; zeroArray[] = take(repeat(cast(ubyte)0), bufferSize).array()[]; auto rng = new SystemRNG(); //holds the random number ubyte[bufferSize] rand; //holds the previous random number after the creation of the next one ubyte[bufferSize] prevRadn; //create the next random number rng.read(prevRadn); assert(prevRadn != zeroArray, "it's almost unbelievable - all random bytes is zero"); //take "iterationCount" arrays with random bytes foreach(i; 0..iterationCount) { //create the next random number rng.read(rand); assert(prevRadn != zeroArray, "it's almost unbelievable - all random bytes is zero"); assert(rand != prevRadn, "it's almost unbelievable - current and previous random bytes are equal"); //copy current random bytes for next iteration prevRadn[] = rand[]; } } /** Hash-based cryptographically secure random number mixer. This RNG uses a hash function to mix a specific amount of random bytes from the input RNG. Use only cryptographically secure hash functions like SHA-512, Whirlpool or SHA-256, but not MD5. Params: Hash: The hash function used, for example SHA1 factor: Determines how many times the hash digest length of input data is used as input to the hash function. Increase factor value if you need more security because it increases entropy level or decrease the factor value if you need more speed. */ final class HashMixerRNG(Hash, uint factor) : RandomNumberStream if(isDigest!Hash) { static assert(factor, "factor must be larger than 0"); //random number generator SystemRNG rng; /** Creates new hash-based mixer random generator. */ this() { //create random number generator this.rng = new SystemRNG(); } @property bool empty() { return false; } @property ulong leastSize() { return ulong.max; } @property bool dataAvailableForRead() { return true; } const(ubyte)[] peek() { return null; } size_t read(scope ubyte[] buffer, IOMode mode) in { assert(buffer.length, "buffer length must be larger than 0"); assert(buffer.length <= uint.max, "buffer length must be smaller or equal uint.max"); } body { auto len = buffer.length; //use stack to allocate internal buffer ubyte[factor * digestLength!Hash] internalBuffer = void; //init internal buffer this.rng.read(internalBuffer); //create new random number on stack ubyte[digestLength!Hash] randomNumber = digest!Hash(internalBuffer); //allows to fill buffers longer than hash digest length while(buffer.length > digestLength!Hash) { //fill the buffer's beginning buffer[0..digestLength!Hash] = randomNumber[0..$]; //receive the buffer's end buffer = buffer[digestLength!Hash..$]; //re-init internal buffer this.rng.read(internalBuffer); //create next random number randomNumber = digest!Hash(internalBuffer); } //fill the buffer's end buffer[0..$] = randomNumber[0..buffer.length]; return len; } alias read = RandomNumberStream.read; } /// A SHA-1 based mixing RNG. Alias for HashMixerRNG!(SHA1, 5). alias SHA1HashMixerRNG = HashMixerRNG!(SHA1, 5); //test heap-based arrays unittest { import std.algorithm; import std.range; import std.typetuple; import std.digest.md; //number of iteration counts enum iterationCount = 10; enum uint factor = 5; //tested hash functions foreach(Hash; TypeTuple!(SHA1, MD5)) { //test for different number random bytes in the buffer from 10 to 80 inclusive foreach(bufferSize; iota(10, 81)) { auto rng = new HashMixerRNG!(Hash, factor)(); //holds the random number ubyte[] rand = new ubyte[bufferSize]; //holds the previous random number after the creation of the next one ubyte[] prevRadn = new ubyte[bufferSize]; //create the next random number rng.read(prevRadn); assert(!equal(prevRadn, take(repeat(0), bufferSize)), "it's almost unbelievable - all random bytes is zero"); //take "iterationCount" arrays with random bytes foreach(i; 0..iterationCount) { //create the next random number rng.read(rand); assert(!equal(rand, take(repeat(0), bufferSize)), "it's almost unbelievable - all random bytes is zero"); assert(!equal(rand, prevRadn), "it's almost unbelievable - current and previous random bytes are equal"); //make sure that we have different random bytes in different hash digests if(bufferSize > digestLength!Hash) { //begin and end of random number array ubyte[] begin = rand[0..digestLength!Hash]; ubyte[] end = rand[digestLength!Hash..$]; //compare all nearby hash digests while(end.length >= digestLength!Hash) { assert(!equal(begin, end[0..digestLength!Hash]), "it's almost unbelievable - random bytes in different hash digests are equal"); //go to the next hash digests begin = end[0..digestLength!Hash]; end = end[digestLength!Hash..$]; } } //copy current random bytes for next iteration prevRadn[] = rand[]; } } } } //test stack-based arrays unittest { import std.algorithm; import std.range; import std.array; import std.typetuple; import std.digest.md; //number of iteration counts enum iterationCount = 10; enum uint factor = 5; //tested hash functions foreach(Hash; TypeTuple!(SHA1, MD5)) { //test for different number random bytes in the buffer foreach(bufferSize; TypeTuple!(10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80)) { //array that contains only zeros ubyte[bufferSize] zeroArray; zeroArray[] = take(repeat(cast(ubyte)0), bufferSize).array()[]; auto rng = new HashMixerRNG!(Hash, factor)(); //holds the random number ubyte[bufferSize] rand; //holds the previous random number after the creation of the next one ubyte[bufferSize] prevRadn; //create the next random number rng.read(prevRadn); assert(prevRadn != zeroArray, "it's almost unbelievable - all random bytes is zero"); //take "iterationCount" arrays with random bytes foreach(i; 0..iterationCount) { //create the next random number rng.read(rand); assert(prevRadn != zeroArray, "it's almost unbelievable - all random bytes is zero"); assert(rand != prevRadn, "it's almost unbelievable - current and previous random bytes are equal"); //make sure that we have different random bytes in different hash digests if(bufferSize > digestLength!Hash) { //begin and end of random number array ubyte[] begin = rand[0..digestLength!Hash]; ubyte[] end = rand[digestLength!Hash..$]; //compare all nearby hash digests while(end.length >= digestLength!Hash) { assert(!equal(begin, end[0..digestLength!Hash]), "it's almost unbelievable - random bytes in different hash digests are equal"); //go to the next hash digests begin = end[0..digestLength!Hash]; end = end[digestLength!Hash..$]; } } //copy current random bytes for next iteration prevRadn[] = rand[]; } } } } /** Thrown when an error occurs during random number generation. */ class CryptoException : Exception { this(string msg, string file = __FILE__, size_t line = __LINE__, Throwable next = null) @safe pure nothrow { super(msg, file, line, next); } } version(Windows) { import core.sys.windows.windows; private extern(Windows) nothrow { alias HCRYPTPROV = size_t; enum LPCTSTR NULL = cast(LPCTSTR)0; enum DWORD PROV_RSA_FULL = 1; enum DWORD CRYPT_VERIFYCONTEXT = 0xF0000000; BOOL CryptAcquireContextA(HCRYPTPROV *phProv, LPCTSTR pszContainer, LPCTSTR pszProvider, DWORD dwProvType, DWORD dwFlags); alias CryptAcquireContext = CryptAcquireContextA; BOOL CryptReleaseContext(HCRYPTPROV hProv, DWORD dwFlags); BOOL CryptGenRandom(HCRYPTPROV hProv, DWORD dwLen, BYTE *pbBuffer); } } vibe.d-0.8.2/crypto/vibe/crypto/passwordhash.d000066400000000000000000000054741324361747700213600ustar00rootroot00000000000000/** Password hashing routines Copyright: © 2012 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.crypto.passwordhash; import std.base64; import std.compiler; import std.exception; import std.random; /** Generates a password hash using MD5 together with a 32-bit salt. Params: password = The password for which a one-way hash is to be computed additional_salt = An optional string that is used to compute the final hash. The same string must be given to testSimplePassword to verify a password later. If this string is kept secret, it can enhance the security of this function. Returns: A base64 encoded string containing the salt and the hash value is returned. Remarks: MD5 is not considered safe and is computationally cheap. Although the use of salt helps a bit, using this function is discouraged for systems where security matters. See_Also: testSimplePasswordHash, vibe.crypto.md5 */ deprecated("This function is considered insecure and will be removed. The DUB packages dauth or scrypt may be suitable alternatives.") string generateSimplePasswordHash(string password, string additional_salt = null) { ubyte[4] salt; foreach( i; 0 .. 4 ) salt[i] = cast(ubyte)uniform(0, 256); ubyte[16] hash = md5hash(salt, password, additional_salt); return Base64.encode(salt ~ hash).idup; } /** Tests a password hash generated using generateSimplePasswordHash. Params: hashstring = The string that was returned by a call to generateSimplePasswordHash password = Password string to test against the hash additional_salt = The same optional salt that was given to the original call to generateSimplePasswordHash Returns: Returns true if the password matches the specified hash. See_Also: generateSimplePasswordHash, vibe.crypto.md5 */ deprecated("This function is considered insecure and will be removed. The DUB packages dauth or scrypt may be suitable alternatives.") bool testSimplePasswordHash(string hashstring, string password, string additional_salt = null) { import std.string : format; ubyte[] upass = Base64.decode(hashstring); enforce(upass.length == 20, format("Invalid binary password hash length: %s", upass.length)); auto salt = upass[0 .. 4]; auto hashcmp = upass[4 .. 20]; ubyte[16] hash = md5hash(salt, password, additional_salt); return hash == hashcmp; } private ubyte[16] md5hash(ubyte[] salt, string[] strs...) { static if( __traits(compiles, {import std.digest.md;}) ){ import std.digest.md; MD5 ctx; ctx.start(); ctx.put(salt); foreach( s; strs ) ctx.put(cast(ubyte[])s); return ctx.finish(); } else { import std.md5; ubyte[16] hash; MD5_CTX ctx; ctx.start(); ctx.update(salt); foreach( s; strs ) ctx.update(s); ctx.finish(hash); return hash; } } vibe.d-0.8.2/data/000077500000000000000000000000001324361747700136175ustar00rootroot00000000000000vibe.d-0.8.2/data/dub.sdl000066400000000000000000000002411324361747700150720ustar00rootroot00000000000000name "data" description "Data format and serialization support" dependency "vibe-d:utils" version=">=0.0.0" targetType "library" sourcePaths "." importPaths "." vibe.d-0.8.2/data/meson.build000066400000000000000000000024571324361747700157710ustar00rootroot00000000000000# Meson file for Vibe Data vibe_data_src_dir = include_directories('.') vibe_data_src = [ 'vibe/data/bson.d', 'vibe/data/json.d', 'vibe/data/serialization.d' ] # # Install Includes # install_subdir('vibe/', install_dir: 'include/d/vibe/') # # Build Targets # data_link_with = [vibe_utils_lib] # Data format and serialization support vibe_data_lib = library('vibe-data', [vibe_data_src], include_directories: [vibe_utils_src_dir], install: true, link_with: [data_link_with], version: project_version, soversion: project_soversion ) pkgc.generate(name: 'vibe-data', libraries: [vibe_data_lib] + data_link_with, subdirs: 'd/vibe', version: project_version, description: 'Data format and serialization support for Vibe.' ) # # Tests # vibe_test_data_exe = executable('vibe-test_data', [vibe_data_src], include_directories: [vibe_utils_src_dir, openssl_inc, libevent_inc], dependencies: [zlib_dep, crypto_dep, ssl_dep, libevent_dep], link_with: [data_link_with], d_args: meson.get_compiler('d').unittest_args(), link_args: '-main' ) test('vibe-test_data', vibe_test_data_exe) vibe.d-0.8.2/data/vibe/000077500000000000000000000000001324361747700145445ustar00rootroot00000000000000vibe.d-0.8.2/data/vibe/data/000077500000000000000000000000001324361747700154555ustar00rootroot00000000000000vibe.d-0.8.2/data/vibe/data/bson.d000066400000000000000000001457231324361747700165770ustar00rootroot00000000000000/** BSON serialization and value handling. Copyright: © 2012-2015 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.data.bson; /// unittest { void manipulateBson(Bson b) { import std.stdio; // retrieving the values is done using get() assert(b["name"].get!string == "Example"); assert(b["id"].get!int == 1); // semantic conversions can be done using to() assert(b["id"].to!string == "1"); // prints: // name: "Example" // id: 1 foreach (string key, value; b) writefln("%s: %s", key, value); // print out with JSON syntax: {"name": "Example", "id": 1} writefln("BSON: %s", b.toString()); // DEPRECATED: object members can be accessed using member syntax, just like in JavaScript //j = Bson.emptyObject; //j.name = "Example"; //j.id = 1; } } /// Constructing `Bson` objects unittest { // construct a BSON object {"field1": "foo", "field2": 42, "field3": true} // using the constructor Bson b1 = Bson(["field1": Bson("foo"), "field2": Bson(42), "field3": Bson(true)]); // using piecewise construction Bson b2 = Bson.emptyObject; b2["field1"] = "foo"; b2["field2"] = 42; b2["field3"] = true; // using serialization struct S { string field1; int field2; bool field3; } Bson b3 = S("foo", 42, true).serializeToBson(); } public import vibe.data.json; import std.algorithm; import std.array; import std.base64; import std.bitmanip; import std.conv; import std.datetime; import std.uuid: UUID; import std.exception; import std.range; import std.traits; import std.typecons : Tuple, tuple; alias bdata_t = immutable(ubyte)[]; /** Represents a BSON value. */ struct Bson { @safe: /// Represents the type of a BSON value enum Type : ubyte { end = 0x00, /// End marker - should never occur explicitly double_ = 0x01, /// A 64-bit floating point value string = 0x02, /// A UTF-8 string object = 0x03, /// An object aka. dictionary of string to Bson array = 0x04, /// An array of BSON values binData = 0x05, /// Raw binary data (ubyte[]) undefined = 0x06, /// Deprecated objectID = 0x07, /// BSON Object ID (96-bit) bool_ = 0x08, /// Boolean value date = 0x09, /// Date value (UTC) null_ = 0x0A, /// Null value regex = 0x0B, /// Regular expression dbRef = 0x0C, /// Deprecated code = 0x0D, /// JaveScript code symbol = 0x0E, /// Symbol/variable name codeWScope = 0x0F, /// JavaScript code with scope int_ = 0x10, /// 32-bit integer timestamp = 0x11, /// Timestamp value long_ = 0x12, /// 64-bit integer minKey = 0xff, /// Internal value maxKey = 0x7f, /// Internal value End = end, /// Compatibility alias - will be deprecated soon. Double = double_, /// Compatibility alias - will be deprecated soon. String = string, /// Compatibility alias - will be deprecated soon. Object = object, /// Compatibility alias - will be deprecated soon. Array = array, /// Compatibility alias - will be deprecated soon. BinData = binData, /// Compatibility alias - will be deprecated soon. Undefined = undefined, /// Compatibility alias - will be deprecated soon. ObjectID = objectID, /// Compatibility alias - will be deprecated soon. Bool = bool_, /// Compatibility alias - will be deprecated soon. Date = date, /// Compatibility alias - will be deprecated soon. Null = null_, /// Compatibility alias - will be deprecated soon. Regex = regex, /// Compatibility alias - will be deprecated soon. DBRef = dbRef, /// Compatibility alias - will be deprecated soon. Code = code, /// Compatibility alias - will be deprecated soon. Symbol = symbol, /// Compatibility alias - will be deprecated soon. CodeWScope = codeWScope, /// Compatibility alias - will be deprecated soon. Int = int_, /// Compatibility alias - will be deprecated soon. Timestamp = timestamp, /// Compatibility alias - will be deprecated soon. Long = long_, /// Compatibility alias - will be deprecated soon. MinKey = minKey, /// Compatibility alias - will be deprecated soon. MaxKey = maxKey /// Compatibility alias - will be deprecated soon. } /// Returns a new, empty Bson value of type Object. static @property Bson emptyObject() { return Bson(cast(Bson[string])null); } /// Returns a new, empty Bson value of type Array. static @property Bson emptyArray() { return Bson(cast(Bson[])null); } private { Type m_type = Type.undefined; bdata_t m_data; } /** Creates a new BSON value using raw data. A slice of the first bytes of `data` is stored, containg the data related to the value. An exception is thrown if `data` is too short. */ this(Type type, bdata_t data) { m_type = type; m_data = data; final switch(type){ case Type.end: m_data = null; break; case Type.double_: m_data = m_data[0 .. 8]; break; case Type.string: m_data = m_data[0 .. 4 + fromBsonData!int(m_data)]; break; case Type.object: m_data = m_data[0 .. fromBsonData!int(m_data)]; break; case Type.array: m_data = m_data[0 .. fromBsonData!int(m_data)]; break; case Type.binData: m_data = m_data[0 .. 5 + fromBsonData!int(m_data)]; break; case Type.undefined: m_data = null; break; case Type.objectID: m_data = m_data[0 .. 12]; break; case Type.bool_: m_data = m_data[0 .. 1]; break; case Type.date: m_data = m_data[0 .. 8]; break; case Type.null_: m_data = null; break; case Type.regex: auto tmp = m_data; tmp.skipCString(); tmp.skipCString(); m_data = m_data[0 .. $ - tmp.length]; break; case Type.dbRef: m_data = m_data[0 .. 0]; assert(false, "Not implemented."); case Type.code: m_data = m_data[0 .. 4 + fromBsonData!int(m_data)]; break; case Type.symbol: m_data = m_data[0 .. 4 + fromBsonData!int(m_data)]; break; case Type.codeWScope: m_data = m_data[0 .. 0]; assert(false, "Not implemented."); case Type.int_: m_data = m_data[0 .. 4]; break; case Type.timestamp: m_data = m_data[0 .. 8]; break; case Type.long_: m_data = m_data[0 .. 8]; break; case Type.minKey: m_data = null; break; case Type.maxKey: m_data = null; break; } } /** Initializes a new BSON value from the given D type. */ this(double value) { opAssign(value); } /// ditto this(string value, Type type = Type.string) { assert(type == Type.string || type == Type.code || type == Type.symbol); opAssign(value); m_type = type; } /// ditto this(in Bson[string] value) { opAssign(value); } /// ditto this(in Bson[] value) { opAssign(value); } /// ditto this(in BsonBinData value) { opAssign(value); } /// ditto this(in BsonObjectID value) { opAssign(value); } /// ditto this(bool value) { opAssign(value); } /// ditto this(in BsonDate value) { opAssign(value); } /// ditto this(typeof(null)) { opAssign(null); } /// ditto this(in BsonRegex value) { opAssign(value); } /// ditto this(int value) { opAssign(value); } /// ditto this(in BsonTimestamp value) { opAssign(value); } /// ditto this(long value) { opAssign(value); } /// ditto this(in Json value) { opAssign(value); } /// ditto this(in UUID value) { opAssign(value); } /** Assigns a D type to a BSON value. */ void opAssign(in Bson other) { m_data = other.m_data; m_type = other.m_type; } /// ditto void opAssign(double value) { m_data = toBsonData(value).idup; m_type = Type.double_; } /// ditto void opAssign(string value) { import std.utf; debug std.utf.validate(value); auto app = appender!bdata_t(); app.put(toBsonData(cast(int)value.length+1)); app.put(cast(bdata_t)value); app.put(cast(ubyte)0); m_data = app.data; m_type = Type.string; } /// ditto void opAssign(in Bson[string] value) { auto app = appender!bdata_t(); foreach( k, ref v; value ){ app.put(cast(ubyte)v.type); putCString(app, k); app.put(v.data); } auto dapp = appender!bdata_t(); dapp.put(toBsonData(cast(int)app.data.length+5)); dapp.put(app.data); dapp.put(cast(ubyte)0); m_data = dapp.data; m_type = Type.object; } /// ditto void opAssign(in Bson[] value) { auto app = appender!bdata_t(); foreach( i, ref v; value ){ app.put(v.type); putCString(app, to!string(i)); app.put(v.data); } auto dapp = appender!bdata_t(); dapp.put(toBsonData(cast(int)app.data.length+5)); dapp.put(app.data); dapp.put(cast(ubyte)0); m_data = dapp.data; m_type = Type.array; } /// ditto void opAssign(in BsonBinData value) { auto app = appender!bdata_t(); app.put(toBsonData(cast(int)value.rawData.length)); app.put(value.type); app.put(value.rawData); m_data = app.data; m_type = Type.binData; } /// ditto void opAssign(in BsonObjectID value) { m_data = value.m_bytes.idup; m_type = Type.objectID; } /// ditto void opAssign(bool value) { m_data = [value ? 0x01 : 0x00]; m_type = Type.bool_; } /// ditto void opAssign(in BsonDate value) { m_data = toBsonData(value.m_time).idup; m_type = Type.date; } /// ditto void opAssign(typeof(null)) { m_data = null; m_type = Type.null_; } /// ditto void opAssign(in BsonRegex value) { auto app = appender!bdata_t(); putCString(app, value.expression); putCString(app, value.options); m_data = app.data; m_type = type.regex; } /// ditto void opAssign(int value) { m_data = toBsonData(value).idup; m_type = Type.int_; } /// ditto void opAssign(in BsonTimestamp value) { m_data = toBsonData(value.m_time).idup; m_type = Type.timestamp; } /// ditto void opAssign(long value) { m_data = toBsonData(value).idup; m_type = Type.long_; } /// ditto void opAssign(in Json value) @trusted { auto app = appender!bdata_t(); m_type = writeBson(app, value); m_data = app.data; } /// ditto void opAssign(in UUID value) { opAssign(BsonBinData(BsonBinData.Type.uuid, value.data.idup)); } /** Returns the BSON type of this value. */ @property Type type() const { return m_type; } bool isNull() const { return m_type == Type.null_; } /** Returns the raw data representing this BSON value (not including the field name and type). */ @property bdata_t data() const { return m_data; } /** Converts the BSON value to a D value. If the BSON type of the value does not match the D type, an exception is thrown. See_Also: `deserializeBson`, `opt` */ T opCast(T)() const { return get!T(); } /// ditto @property T get(T)() const { static if( is(T == double) ){ checkType(Type.double_); return fromBsonData!double(m_data); } else static if( is(T == string) ){ checkType(Type.string, Type.code, Type.symbol); return cast(string)m_data[4 .. 4+fromBsonData!int(m_data)-1]; } else static if( is(Unqual!T == Bson[string]) || is(Unqual!T == const(Bson)[string]) ){ checkType(Type.object); Bson[string] ret; auto d = m_data[4 .. $]; while( d.length > 0 ){ auto tp = cast(Type)d[0]; if( tp == Type.end ) break; d = d[1 .. $]; auto key = skipCString(d); auto value = Bson(tp, d); d = d[value.data.length .. $]; ret[key] = value; } return cast(T)ret; } else static if( is(Unqual!T == Bson[]) || is(Unqual!T == const(Bson)[]) ){ checkType(Type.array); Bson[] ret; auto d = m_data[4 .. $]; while( d.length > 0 ){ auto tp = cast(Type)d[0]; if( tp == Type.end ) break; /*auto key = */skipCString(d); // should be '0', '1', ... auto value = Bson(tp, d); d = d[value.data.length .. $]; ret ~= value; } return cast(T)ret; } else static if( is(T == BsonBinData) ){ checkType(Type.binData); auto size = fromBsonData!int(m_data); auto type = cast(BsonBinData.Type)m_data[4]; return BsonBinData(type, m_data[5 .. 5+size]); } else static if( is(T == BsonObjectID) ){ checkType(Type.objectID); return BsonObjectID(m_data[0 .. 12]); } else static if( is(T == bool) ){ checkType(Type.bool_); return m_data[0] != 0; } else static if( is(T == BsonDate) ){ checkType(Type.date); return BsonDate(fromBsonData!long(m_data)); } else static if( is(T == BsonRegex) ){ checkType(Type.regex); auto d = m_data; auto expr = skipCString(d); auto options = skipCString(d); return BsonRegex(expr, options); } else static if( is(T == int) ){ checkType(Type.int_); return fromBsonData!int(m_data); } else static if( is(T == BsonTimestamp) ){ checkType(Type.timestamp); return BsonTimestamp(fromBsonData!long(m_data)); } else static if( is(T == long) ){ checkType(Type.long_); return fromBsonData!long(m_data); } else static if( is(T == Json) ){ pragma(msg, "Bson.get!Json() and Bson.opCast!Json() will soon be removed. Please use Bson.toJson() instead."); return this.toJson(); } else static if( is(T == UUID) ){ checkType(Type.binData); auto bbd = this.get!BsonBinData(); enforce(bbd.type == BsonBinData.Type.uuid, "BsonBinData value is type '"~to!string(bbd.type)~"', expected to be uuid"); const ubyte[16] b = bbd.rawData; return UUID(b); } else static assert(false, "Cannot cast "~typeof(this).stringof~" to '"~T.stringof~"'."); } /** Returns the native type for this BSON if it matches the current runtime type. If the runtime type does not match the given native type, the 'def' parameter is returned instead. */ T opt(T)(T def = T.init) { if (isNull()) return def; try return cast(T)this; catch (Exception e) return def; } /// ditto const(T) opt(T)(const(T) def = const(T).init) const { if (isNull()) return def; try return cast(T)this; catch (Exception e) return def; } /** Returns the length of a BSON value of type String, Array, Object or BinData. */ @property size_t length() const { switch( m_type ){ default: enforce(false, "Bson objects of type "~to!string(m_type)~" do not have a length field."); break; case Type.string, Type.code, Type.symbol: return (cast(string)this).length; case Type.array: return byValue.walkLength; case Type.object: return byValue.walkLength; case Type.binData: assert(false); //return (cast(BsonBinData)this).length; break; } assert(false); } /** Converts a given JSON value to the corresponding BSON value. */ static Bson fromJson(in Json value) @trusted { auto app = appender!bdata_t(); auto tp = writeBson(app, value); return Bson(tp, app.data); } /** Converts a BSON value to a JSON value. All BSON types that cannot be exactly represented as JSON, will be converted to a string. */ Json toJson() const { switch( this.type ){ default: assert(false); case Bson.Type.double_: return Json(get!double()); case Bson.Type.string: return Json(get!string()); case Bson.Type.object: Json[string] ret; foreach (k, v; this.byKeyValue) ret[k] = v.toJson(); return Json(ret); case Bson.Type.array: auto ret = new Json[this.length]; foreach (i, v; this.byIndexValue) ret[i] = v.toJson(); return Json(ret); case Bson.Type.binData: return Json(() @trusted { return cast(string)Base64.encode(get!BsonBinData.rawData); } ()); case Bson.Type.objectID: return Json(get!BsonObjectID().toString()); case Bson.Type.bool_: return Json(get!bool()); case Bson.Type.date: return Json(get!BsonDate.toString()); case Bson.Type.null_: return Json(null); case Bson.Type.regex: assert(false, "TODO"); case Bson.Type.dbRef: assert(false, "TODO"); case Bson.Type.code: return Json(get!string()); case Bson.Type.symbol: return Json(get!string()); case Bson.Type.codeWScope: assert(false, "TODO"); case Bson.Type.int_: return Json(get!int()); case Bson.Type.timestamp: return Json(get!BsonTimestamp().m_time); case Bson.Type.long_: return Json(get!long()); case Bson.Type.undefined: return Json(); } } /** Returns a string representation of this BSON value in JSON format. */ string toString() const { return toJson().toString(); } import std.typecons : Nullable; /** Check whether the BSON object contains the given key. */ Nullable!Bson tryIndex(string key) const { checkType(Type.object); foreach (string idx, v; this.byKeyValue) if(idx == key) return Nullable!Bson(v); return Nullable!Bson.init; } /** Allows accessing fields of a BSON object using `[]`. Returns a null value if the specified field does not exist. */ inout(Bson) opIndex(string idx) inout { foreach (string key, v; this.byKeyValue) if( key == idx ) return v; return Bson(null); } /// ditto void opIndexAssign(T)(in T value, string idx){ auto newcont = appender!bdata_t(); checkType(Type.object); auto d = m_data[4 .. $]; while( d.length > 0 ){ auto tp = cast(Type)d[0]; if( tp == Type.end ) break; d = d[1 .. $]; auto key = skipCString(d); auto val = Bson(tp, d); d = d[val.data.length .. $]; if( key != idx ){ // copy to new array newcont.put(cast(ubyte)tp); putCString(newcont, key); newcont.put(val.data); } } static if( is(T == Bson) ) alias bval = value; else auto bval = Bson(value); newcont.put(cast(ubyte)bval.type); putCString(newcont, idx); newcont.put(bval.data); auto newdata = appender!bdata_t(); newdata.put(toBsonData(cast(uint)(newcont.data.length + 5))); newdata.put(newcont.data); newdata.put(cast(ubyte)0); m_data = newdata.data; } /// unittest { Bson value = Bson.emptyObject; value["a"] = 1; value["b"] = true; value["c"] = "foo"; assert(value["a"] == Bson(1)); assert(value["b"] == Bson(true)); assert(value["c"] == Bson("foo")); } /// unittest { auto srcUuid = UUID("00010203-0405-0607-0809-0a0b0c0d0e0f"); Bson b = srcUuid; auto u = b.get!UUID(); assert(b.type == Bson.Type.binData); assert(b.get!BsonBinData().type == BsonBinData.Type.uuid); assert(u == srcUuid); } /** Allows index based access of a BSON array value. Returns a null value if the index is out of bounds. */ inout(Bson) opIndex(size_t idx) inout { foreach (size_t i, v; this.byIndexValue) if (i == idx) return v; return Bson(null); } /// unittest { Bson[] entries; entries ~= Bson(1); entries ~= Bson(true); entries ~= Bson("foo"); Bson value = Bson(entries); assert(value[0] == Bson(1)); assert(value[1] == Bson(true)); assert(value[2] == Bson("foo")); } /** Removes an entry from a BSON obect. If the key doesn't exit, this function will be a no-op. */ void remove(string key) { checkType(Type.object); auto d = m_data[4 .. $]; while (d.length > 0) { size_t start_remainder = d.length; auto tp = cast(Type)d[0]; if (tp == Type.end) break; d = d[1 .. $]; auto ekey = skipCString(d); auto evalue = Bson(tp, d); d = d[evalue.data.length .. $]; if (ekey == key) { m_data = m_data[0 .. $-start_remainder] ~ d; break; } } } unittest { auto o = Bson.emptyObject; o["a"] = Bson(1); o["b"] = Bson(2); o["c"] = Bson(3); assert(o.length == 3); o.remove("b"); assert(o.length == 2); assert(o["a"] == Bson(1)); assert(o["c"] == Bson(3)); o.remove("c"); assert(o.length == 1); assert(o["a"] == Bson(1)); o.remove("c"); assert(o.length == 1); assert(o["a"] == Bson(1)); o.remove("a"); assert(o.length == 0); } /** Allows foreach iterating over BSON objects and arrays. */ int opApply(scope int delegate(Bson obj) del) const @system { foreach (value; byValue) if (auto ret = del(value)) return ret; return 0; } /// ditto int opApply(scope int delegate(size_t idx, Bson obj) del) const @system { foreach (index, value; byIndexValue) if (auto ret = del(index, value)) return ret; return 0; } /// ditto int opApply(scope int delegate(string idx, Bson obj) del) const @system { foreach (key, value; byKeyValue) if (auto ret = del(key, value)) return ret; return 0; } /// Iterates over all values of an object or array. auto byValue() const { checkType(Type.array, Type.object); return byKeyValueImpl().map!(t => t[1]); } /// Iterates over all index/value pairs of an array. auto byIndexValue() const { checkType(Type.array); return byKeyValueImpl().map!(t => Tuple!(size_t, "key", Bson, "value")(t[0].to!size_t, t[1])); } /// Iterates over all key/value pairs of an object. auto byKeyValue() const { checkType(Type.object); return byKeyValueImpl(); } private auto byKeyValueImpl() const { checkType(Type.object, Type.array); alias T = Tuple!(string, "key", Bson, "value"); static struct Rng { private { immutable(ubyte)[] data; string key; Bson value; } @property bool empty() const { return data.length == 0; } @property T front() { return T(key, value); } @property Rng save() const { return this; } void popFront() { auto tp = cast(Type)data[0]; data = data[1 .. $]; if (tp == Type.end) return; key = skipCString(data); value = Bson(tp, data); data = data[value.data.length .. $]; } } auto ret = Rng(m_data[4 .. $]); ret.popFront(); return ret; } /// bool opEquals(ref const Bson other) const { if( m_type != other.m_type ) return false; return m_data == other.m_data; } /// ditto bool opEquals(const Bson other) const { if( m_type != other.m_type ) return false; return m_data == other.m_data; } private void checkType(in Type[] valid_types...) const { foreach( t; valid_types ) if( m_type == t ) return; throw new Exception("BSON value is type '"~to!string(m_type)~"', expected to be one of "~to!string(valid_types)); } } /** Represents a BSON binary data value (Bson.Type.binData). */ struct BsonBinData { @safe: enum Type : ubyte { generic = 0x00, function_ = 0x01, binaryOld = 0x02, uuid = 0x03, md5 = 0x05, userDefined = 0x80, Generic = generic, /// Compatibility alias - will be deprecated soon Function = function_, /// Compatibility alias - will be deprecated soon BinaryOld = binaryOld, /// Compatibility alias - will be deprecated soon UUID = uuid, /// Compatibility alias - will be deprecated soon MD5 = md5, /// Compatibility alias - will be deprecated soon UserDefined = userDefined, /// Compatibility alias - will be deprecated soon } private { Type m_type; bdata_t m_data; } this(Type type, immutable(ubyte)[] data) { m_type = type; m_data = data; } @property Type type() const { return m_type; } @property bdata_t rawData() const { return m_data; } } /** Represents a BSON object id (Bson.Type.binData). */ struct BsonObjectID { @safe: private { ubyte[12] m_bytes; static immutable uint MACHINE_ID; static immutable int ms_pid; static uint ms_inc = 0; } shared static this() { import std.process; import std.random; MACHINE_ID = uniform(0, 0xffffff); ms_pid = thisProcessID; } static this() { import std.random; ms_inc = uniform(0, 0xffffff); } /** Constructs a new object ID from the given raw byte array. */ this(in ubyte[] bytes) { assert(bytes.length == 12); m_bytes[] = bytes[]; } /** Creates an on object ID from a string in standard hexa-decimal form. */ static BsonObjectID fromString(string str) { import std.conv : ConvException; static const lengthex = new ConvException("BSON Object ID string must be 24 characters."); static const charex = new ConvException("Not a valid hex string."); if (str.length != 24) throw lengthex; BsonObjectID ret = void; uint b = 0; foreach( i, ch; str ){ ubyte n; if( ch >= '0' && ch <= '9' ) n = cast(ubyte)(ch - '0'); else if( ch >= 'a' && ch <= 'f' ) n = cast(ubyte)(ch - 'a' + 10); else if( ch >= 'A' && ch <= 'F' ) n = cast(ubyte)(ch - 'F' + 10); else throw charex; b <<= 4; b += n; if( i % 8 == 7 ){ auto j = i / 8; ret.m_bytes[j*4 .. (j+1)*4] = toBigEndianData(b)[]; b = 0; } } return ret; } /// ditto alias fromHexString = fromString; /** Generates a unique object ID. * * By default it will use `Clock.currTime(UTC())` as the timestamp * which guarantees that `BsonObjectID`s are chronologically * sorted. */ static BsonObjectID generate(in SysTime time = Clock.currTime(UTC())) { import std.datetime; BsonObjectID ret = void; ret.m_bytes[0 .. 4] = toBigEndianData(cast(uint)time.toUnixTime())[]; ret.m_bytes[4 .. 7] = toBsonData(MACHINE_ID)[0 .. 3]; ret.m_bytes[7 .. 9] = toBsonData(cast(ushort)ms_pid)[]; ret.m_bytes[9 .. 12] = toBigEndianData(ms_inc++)[1 .. 4]; return ret; } /** Creates a pseudo object ID that matches the given date. This kind of ID can be useful to query a database for items in a certain date interval using their ID. This works using the property of standard BSON object IDs that they store their creation date as part of the ID. Note that this date part is only 32-bit wide and is limited to the same timespan as a 32-bit Unix timestamp. */ static BsonObjectID createDateID(in SysTime time) { BsonObjectID ret; ret.m_bytes[0 .. 4] = toBigEndianData(cast(uint)time.toUnixTime())[]; return ret; } /** Returns true for any non-zero ID. */ @property bool valid() const { foreach( b; m_bytes ) if( b != 0 ) return true; return false; } /** Extracts the time/date portion of the object ID. For IDs created using the standard generation algorithm or using createDateID this will return the associated time stamp. */ @property SysTime timeStamp() const { ubyte[4] tm = m_bytes[0 .. 4]; return SysTime(unixTimeToStdTime(bigEndianToNative!uint(tm))); } /** Allows for relational comparison of different IDs. */ int opCmp(ref const BsonObjectID other) const { import core.stdc.string; return () @trusted { return memcmp(m_bytes.ptr, other.m_bytes.ptr, m_bytes.length); } (); } /** Converts the ID to its standard hexa-decimal string representation. */ string toString() const pure { enum hexdigits = "0123456789abcdef"; auto ret = new char[24]; foreach( i, b; m_bytes ){ ret[i*2+0] = hexdigits[(b >> 4) & 0x0F]; ret[i*2+1] = hexdigits[b & 0x0F]; } return ret; } inout(ubyte)[] opCast() inout { return m_bytes; } } unittest { auto t0 = SysTime(Clock.currTime(UTC()).toUnixTime.unixTimeToStdTime); auto id = BsonObjectID.generate(); auto t1 = SysTime(Clock.currTime(UTC()).toUnixTime.unixTimeToStdTime); assert(t0 <= id.timeStamp); assert(id.timeStamp <= t1); id = BsonObjectID.generate(t0); assert(id.timeStamp == t0); id = BsonObjectID.generate(t1); assert(id.timeStamp == t1); immutable dt = DateTime(2014, 07, 31, 19, 14, 55); id = BsonObjectID.generate(SysTime(dt, UTC())); assert(id.timeStamp == SysTime(dt, UTC())); } unittest { auto b = Bson(true); assert(b.opt!bool(false) == true); assert(b.opt!int(12) == 12); assert(b.opt!(Bson[])(null).length == 0); const c = b; assert(c.opt!bool(false) == true); assert(c.opt!int(12) == 12); assert(c.opt!(Bson[])(null).length == 0); } /** Represents a BSON date value (`Bson.Type.date`). BSON date values are stored in UNIX time format, counting the number of milliseconds from 1970/01/01. */ struct BsonDate { @safe: private long m_time; // milliseconds since UTC unix epoch /** Constructs a BsonDate from the given date value. The time-zone independent Date and DateTime types are assumed to be in the local time zone and converted to UTC if tz is left to null. */ this(in Date date, immutable TimeZone tz = null) { this(SysTime(date, tz)); } /// ditto this(in DateTime date, immutable TimeZone tz = null) { this(SysTime(date, tz)); } /// ditto this(in SysTime date) { this(fromStdTime(date.stdTime()).m_time); } /** Constructs a BsonDate from the given UNIX time. unix_time needs to be given in milliseconds from 1970/01/01. This is the native storage format for BsonDate. */ this(long unix_time) { m_time = unix_time; } /** Constructs a BsonDate from the given date/time string in ISO extended format. */ static BsonDate fromString(string iso_ext_string) { return BsonDate(SysTime.fromISOExtString(iso_ext_string)); } /** Constructs a BsonDate from the given date/time in standard time as defined in `std.datetime`. */ static BsonDate fromStdTime(long std_time) { enum zero = unixTimeToStdTime(0); return BsonDate((std_time - zero) / 10_000L); } /** The raw unix time value. This is the native storage/transfer format of a BsonDate. */ @property long value() const { return m_time; } /// ditto @property void value(long v) { m_time = v; } /** Returns the date formatted as ISO extended format. */ string toString() const { return toSysTime().toISOExtString(); } /* Converts to a SysTime. */ SysTime toSysTime() const { auto zero = unixTimeToStdTime(0); return SysTime(zero + m_time * 10_000L, UTC()); } /** Allows relational and equality comparisons. */ bool opEquals(ref const BsonDate other) const { return m_time == other.m_time; } /// ditto int opCmp(ref const BsonDate other) const { if( m_time == other.m_time ) return 0; if( m_time < other.m_time ) return -1; else return 1; } } /** Represents a BSON timestamp value `(Bson.Type.timestamp)`. */ struct BsonTimestamp { @safe: private long m_time; this( long time ){ m_time = time; } } /** Represents a BSON regular expression value `(Bson.Type.regex)`. */ struct BsonRegex { @safe: private { string m_expr; string m_options; } this(string expr, string options) { m_expr = expr; m_options = options; } @property string expression() const { return m_expr; } @property string options() const { return m_options; } } /** Serializes the given value to BSON. The following types of values are supported: $(DL $(DT `Bson`) $(DD Used as-is) $(DT `Json`) $(DD Converted to BSON) $(DT `BsonBinData`) $(DD Converted to `Bson.Type.binData`) $(DT `BsonObjectID`) $(DD Converted to `Bson.Type.objectID`) $(DT `BsonDate`) $(DD Converted to `Bson.Type.date`) $(DT `BsonTimestamp`) $(DD Converted to `Bson.Type.timestamp`) $(DT `BsonRegex`) $(DD Converted to `Bson.Type.regex`) $(DT `null`) $(DD Converted to `Bson.Type.null_`) $(DT `bool`) $(DD Converted to `Bson.Type.bool_`) $(DT `float`, `double`) $(DD Converted to `Bson.Type.double_`) $(DT `short`, `ushort`, `int`, `uint`, `long`, `ulong`) $(DD Converted to `Bson.Type.long_`) $(DT `string`) $(DD Converted to `Bson.Type.string`) $(DT `ubyte[]`) $(DD Converted to `Bson.Type.binData`) $(DT `T[]`) $(DD Converted to `Bson.Type.array`) $(DT `T[string]`) $(DD Converted to `Bson.Type.object`) $(DT `struct`) $(DD Converted to `Bson.Type.object`) $(DT `class`) $(DD Converted to `Bson.Type.object` or `Bson.Type.null_`) ) All entries of an array or an associative array, as well as all R/W properties and all fields of a struct/class are recursively serialized using the same rules. Fields ending with an underscore will have the last underscore stripped in the serialized output. This makes it possible to use fields with D keywords as their name by simply appending an underscore. The following methods can be used to customize the serialization of structs/classes: --- Bson toBson() const; static T fromBson(Bson src); Json toJson() const; static T fromJson(Json src); string toString() const; static T fromString(string src); --- The methods will have to be defined in pairs. The first pair that is implemented by the type will be used for serialization (i.e. `toBson` overrides `toJson`). See_Also: `deserializeBson` */ Bson serializeToBson(T)(T value, ubyte[] buffer = null) { return serialize!BsonSerializer(value, buffer); } template deserializeBson(T) { /** Deserializes a BSON value into the destination variable. The same types as for `serializeToBson()` are supported and handled inversely. See_Also: `serializeToBson` */ void deserializeBson(ref T dst, Bson src) { dst = deserializeBson!T(src); } /// ditto T deserializeBson(Bson src) { return deserialize!(BsonSerializer, T)(src); } } unittest { import std.stdio; enum Foo : string { k = "test" } enum Boo : int { l = 5 } static struct S { float a; double b; bool c; int d; string e; byte f; ubyte g; long h; ulong i; float[] j; Foo k; Boo l;} immutable S t = {1.5, -3.0, true, int.min, "Test", -128, 255, long.min, ulong.max, [1.1, 1.2, 1.3], Foo.k, Boo.l,}; S u; deserializeBson(u, serializeToBson(t)); assert(t.a == u.a); assert(t.b == u.b); assert(t.c == u.c); assert(t.d == u.d); assert(t.e == u.e); assert(t.f == u.f); assert(t.g == u.g); assert(t.h == u.h); assert(t.i == u.i); assert(t.j == u.j); assert(t.k == u.k); assert(t.l == u.l); } unittest { assert(uint.max == serializeToBson(uint.max).deserializeBson!uint); assert(ulong.max == serializeToBson(ulong.max).deserializeBson!ulong); } unittest { assert(deserializeBson!SysTime(serializeToBson(SysTime(0))) == SysTime(0)); assert(deserializeBson!SysTime(serializeToBson(SysTime(0, UTC()))) == SysTime(0, UTC())); assert(deserializeBson!Date(serializeToBson(Date.init)) == Date.init); assert(deserializeBson!Date(serializeToBson(Date(2001, 1, 1))) == Date(2001, 1, 1)); } @safe unittest { static struct A { int value; static A fromJson(Json val) @safe { return A(val.get!int); } Json toJson() const @safe { return Json(value); } Bson toBson() { return Bson(); } } static assert(!isStringSerializable!A && isJsonSerializable!A && !isBsonSerializable!A); static assert(!isStringSerializable!(const(A)) && !isJsonSerializable!(const(A)) && !isBsonSerializable!(const(A))); // assert(serializeToBson(const A(123)) == Bson(123)); // assert(serializeToBson(A(123)) == Bson(123)); static struct B { int value; static B fromBson(Bson val) @safe { return B(val.get!int); } Bson toBson() const @safe { return Bson(value); } Json toJson() { return Json(); } } static assert(!isStringSerializable!B && !isJsonSerializable!B && isBsonSerializable!B); static assert(!isStringSerializable!(const(B)) && !isJsonSerializable!(const(B)) && !isBsonSerializable!(const(B))); assert(serializeToBson(const B(123)) == Bson(123)); assert(serializeToBson(B(123)) == Bson(123)); static struct C { int value; static C fromString(string val) @safe { return C(val.to!int); } string toString() const @safe { return value.to!string; } Json toJson() { return Json(); } } static assert(isStringSerializable!C && !isJsonSerializable!C && !isBsonSerializable!C); static assert(!isStringSerializable!(const(C)) && !isJsonSerializable!(const(C)) && !isBsonSerializable!(const(C))); assert(serializeToBson(const C(123)) == Bson("123")); assert(serializeToBson(C(123)) == Bson("123")); static struct D { int value; string toString() const { return ""; } } static assert(!isStringSerializable!D && !isJsonSerializable!D && !isBsonSerializable!D); static assert(!isStringSerializable!(const(D)) && !isJsonSerializable!(const(D)) && !isBsonSerializable!(const(D))); assert(serializeToBson(const D(123)) == serializeToBson(["value": 123])); assert(serializeToBson(D(123)) == serializeToBson(["value": 123])); // test if const(class) is serializable static class E { int value; this(int v) @safe { value = v; } static E fromBson(Bson val) @safe { return new E(val.get!int); } Bson toBson() const @safe { return Bson(value); } Json toJson() { return Json(); } } static assert(!isStringSerializable!E && !isJsonSerializable!E && isBsonSerializable!E); static assert(!isStringSerializable!(const(E)) && !isJsonSerializable!(const(E)) && !isBsonSerializable!(const(E))); assert(serializeToBson(new const E(123)) == Bson(123)); assert(serializeToBson(new E(123)) == Bson(123)); } @safe unittest { static struct E { ubyte[4] bytes; ubyte[] more; } auto e = E([1, 2, 3, 4], [5, 6]); auto eb = serializeToBson(e); assert(eb["bytes"].type == Bson.Type.binData); assert(eb["more"].type == Bson.Type.binData); assert(e == deserializeBson!E(eb)); } @safe unittest { static class C { @safe: int a; private int _b; @property int b() const { return _b; } @property void b(int v) { _b = v; } @property int test() const @safe { return 10; } void test2() {} } C c = new C; c.a = 1; c.b = 2; C d; deserializeBson(d, serializeToBson(c)); assert(c.a == d.a); assert(c.b == d.b); const(C) e = c; // serialize const class instances (issue #653) deserializeBson(d, serializeToBson(e)); assert(e.a == d.a); assert(e.b == d.b); } unittest { static struct C { @safe: int value; static C fromString(string val) { return C(val.to!int); } string toString() const { return value.to!string; } } enum Color { Red, Green, Blue } { static class T { @safe: string[Color] enumIndexedMap; string[C] stringableIndexedMap; this() { enumIndexedMap = [ Color.Red : "magenta", Color.Blue : "deep blue" ]; stringableIndexedMap = [ C(42) : "forty-two" ]; } } T original = new T; original.enumIndexedMap[Color.Green] = "olive"; T other; deserializeBson(other, serializeToBson(original)); assert(serializeToBson(other) == serializeToBson(original)); } { static struct S { string[Color] enumIndexedMap; string[C] stringableIndexedMap; } S original; original.enumIndexedMap = [ Color.Red : "magenta", Color.Blue : "deep blue" ]; original.enumIndexedMap[Color.Green] = "olive"; original.stringableIndexedMap = [ C(42) : "forty-two" ]; S other; deserializeBson(other, serializeToBson(original)); assert(serializeToBson(other) == serializeToBson(original)); } } unittest { ubyte[] data = [1, 2, 3]; auto bson = serializeToBson(data); assert(bson.type == Bson.Type.binData); assert(deserializeBson!(ubyte[])(bson) == data); } unittest { // issue #709 ulong[] data = [2354877787627192443, 1, 2354877787627192442]; auto bson = Bson.fromJson(serializeToBson(data).toJson); assert(deserializeBson!(ulong[])(bson) == data); } unittest { // issue #709 uint[] data = [1, 2, 3, 4]; auto bson = Bson.fromJson(serializeToBson(data).toJson); // assert(deserializeBson!(uint[])(bson) == data); assert(deserializeBson!(ulong[])(bson).equal(data)); } unittest { import std.typecons; Nullable!bool x; auto bson = serializeToBson(x); assert(bson.type == Bson.Type.null_); deserializeBson(x, bson); assert(x.isNull); x = true; bson = serializeToBson(x); assert(bson.type == Bson.Type.bool_ && bson.get!bool == true); deserializeBson(x, bson); assert(x == true); } unittest { // issue #793 char[] test = "test".dup; auto bson = serializeToBson(test); //assert(bson.type == Bson.Type.string); //assert(bson.get!string == "test"); assert(bson.type == Bson.Type.array); assert(bson[0].type == Bson.Type.string && bson[0].get!string == "t"); } /** Serializes to an in-memory BSON representation. See_Also: `vibe.data.serialization.serialize`, `vibe.data.serialization.deserialize`, `serializeToBson`, `deserializeBson` */ struct BsonSerializer { import vibe.utils.array : AllocAppender; private { AllocAppender!(ubyte[]) m_dst; size_t[] m_compositeStack; Bson.Type m_type = Bson.Type.null_; Bson m_inputData; string m_entryName; size_t m_entryIndex = size_t.max; } this(Bson input) @safe { m_inputData = input; } this(ubyte[] buffer) @safe { import vibe.internal.utilallocator; m_dst = () @trusted { return AllocAppender!(ubyte[])(vibeThreadAllocator(), buffer); } (); } @disable this(this); template isSupportedValueType(T) { enum isSupportedValueType = is(typeof(getBsonTypeID(T.init))); } // // serialization // Bson getSerializedResult() @safe { auto ret = Bson(m_type, () @trusted { return cast(immutable)m_dst.data; } ()); () @trusted { m_dst.reset(); } (); m_type = Bson.Type.null_; return ret; } void beginWriteDictionary(Traits)() { writeCompositeEntryHeader(Bson.Type.object); m_compositeStack ~= m_dst.data.length; m_dst.put(toBsonData(cast(int)0)); } void endWriteDictionary(Traits)() { m_dst.put(Bson.Type.end); auto sh = m_compositeStack[$-1]; m_compositeStack.length--; m_dst.data[sh .. sh + 4] = toBsonData(cast(uint)(m_dst.data.length - sh))[]; } void beginWriteDictionaryEntry(Traits)(string name) { m_entryName = name; } void endWriteDictionaryEntry(Traits)(string name) {} void beginWriteArray(Traits)(size_t) { writeCompositeEntryHeader(Bson.Type.array); m_compositeStack ~= m_dst.data.length; m_dst.put(toBsonData(cast(int)0)); } void endWriteArray(Traits)() { endWriteDictionary!Traits(); } void beginWriteArrayEntry(Traits)(size_t idx) { m_entryIndex = idx; } void endWriteArrayEntry(Traits)(size_t idx) {} // auto ref does't work for DMD 2.064 void writeValue(Traits, T)(/*auto ref const*/ in T value) { writeValueH!(T, true)(value); } private void writeValueH(T, bool write_header)(/*auto ref const*/ in T value) { static if (write_header) writeCompositeEntryHeader(getBsonTypeID(value)); static if (is(T == Bson)) { m_dst.put(value.data); } else static if (is(T == Json)) { m_dst.put(Bson(value).data); } // FIXME: use .writeBsonValue else static if (is(T == typeof(null))) {} else static if (is(T == string)) { m_dst.put(toBsonData(cast(uint)value.length+1)); m_dst.putCString(value); } else static if (is(T == BsonBinData)) { m_dst.put(toBsonData(cast(int)value.rawData.length)); m_dst.put(value.type); m_dst.put(value.rawData); } else static if (is(T == BsonObjectID)) { m_dst.put(value.m_bytes[]); } else static if (is(T == BsonDate)) { m_dst.put(toBsonData(value.m_time)); } else static if (is(T == SysTime)) { m_dst.put(toBsonData(BsonDate(value).m_time)); } else static if (is(T == BsonRegex)) { m_dst.putCString(value.expression); m_dst.putCString(value.options); } else static if (is(T == BsonTimestamp)) { m_dst.put(toBsonData(value.m_time)); } else static if (is(T == bool)) { m_dst.put(cast(ubyte)(value ? 0x01 : 0x00)); } else static if (is(T : int) && isIntegral!T) { m_dst.put(toBsonData(cast(int)value)); } else static if (is(T : long) && isIntegral!T) { m_dst.put(toBsonData(value)); } else static if (is(T : double) && isFloatingPoint!T) { m_dst.put(toBsonData(cast(double)value)); } else static if (isBsonSerializable!T) { static if (!__traits(compiles, () @safe { return value.toBson(); } ())) pragma(msg, "Non-@safe toBson/fromBson methods are deprecated - annotate "~T.stringof~".toBson() with @safe."); m_dst.put(() @trusted { return value.toBson(); } ().data); } else static if (isJsonSerializable!T) { static if (!__traits(compiles, () @safe { return value.toJson(); } ())) pragma(msg, "Non-@safe toJson/fromJson methods are deprecated - annotate "~T.stringof~".toJson() with @safe."); m_dst.put(Bson(() @trusted { return value.toJson(); } ()).data); } else static if (is(T : const(ubyte)[])) { writeValueH!(BsonBinData, false)(BsonBinData(BsonBinData.Type.generic, value.idup)); } else static assert(false, "Unsupported type: " ~ T.stringof); } private void writeCompositeEntryHeader(Bson.Type tp) @safe { if (!m_compositeStack.length) { assert(m_type == Bson.Type.null_, "Overwriting root item."); m_type = tp; } if (m_entryName !is null) { m_dst.put(tp); m_dst.putCString(m_entryName); m_entryName = null; } else if (m_entryIndex != size_t.max) { import std.format; m_dst.put(tp); static struct Wrapper { @trusted: AllocAppender!(ubyte[])* app; void put(char ch) { (*app).put(ch); } void put(in char[] str) { (*app).put(cast(const(ubyte)[])str); } } auto wr = Wrapper(&m_dst); wr.formattedWrite("%d\0", m_entryIndex); m_entryIndex = size_t.max; } } // // deserialization // void readDictionary(Traits)(scope void delegate(string) @safe entry_callback) { enforce(m_inputData.type == Bson.Type.object, "Expected object instead of "~m_inputData.type.to!string()); auto old = m_inputData; foreach (string name, value; old.byKeyValue) { m_inputData = value; entry_callback(name); } m_inputData = old; } void beginReadDictionaryEntry(Traits)(string name) {} void endReadDictionaryEntry(Traits)(string name) {} void readArray(Traits)(scope void delegate(size_t) @safe size_callback, scope void delegate() @safe entry_callback) { enforce(m_inputData.type == Bson.Type.array, "Expected array instead of "~m_inputData.type.to!string()); auto old = m_inputData; foreach (value; old.byValue) { m_inputData = value; entry_callback(); } m_inputData = old; } void beginReadArrayEntry(Traits)(size_t index) {} void endReadArrayEntry(Traits)(size_t index) {} T readValue(Traits, T)() { static if (is(T == Bson)) return m_inputData; else static if (is(T == Json)) return m_inputData.toJson(); else static if (is(T == bool)) return m_inputData.get!bool(); else static if (is(T == uint)) return cast(T)m_inputData.get!int(); else static if (is(T : int)) { if(m_inputData.type == Bson.Type.long_) { enforce((m_inputData.get!long() >= int.min) && (m_inputData.get!long() <= int.max), "Long out of range while attempting to deserialize to int: " ~ m_inputData.get!long.to!string); return cast(T)m_inputData.get!long(); } else return m_inputData.get!int().to!T; } else static if (is(T : long)) { if(m_inputData.type == Bson.Type.int_) return cast(T)m_inputData.get!int(); else return cast(T)m_inputData.get!long(); } else static if (is(T : double)) return cast(T)m_inputData.get!double(); else static if (is(T == SysTime)) { // support legacy behavior to serialize as string if (m_inputData.type == Bson.Type.string) return SysTime.fromISOExtString(m_inputData.get!string); else return m_inputData.get!BsonDate().toSysTime(); } else static if (isBsonSerializable!T) { static if (!__traits(compiles, () @safe { return T.fromBson(Bson.init); } ())) pragma(msg, "Non-@safe toBson/fromBson methods are deprecated - annotate "~T.stringof~".fromBson() with @safe."); auto bval = readValue!(Traits, Bson); return () @trusted { return T.fromBson(bval); } (); } else static if (isJsonSerializable!T) { static if (!__traits(compiles, () @safe { return T.fromJson(Json.init); } ())) pragma(msg, "Non-@safe toJson/fromJson methods are deprecated - annotate "~T.stringof~".fromJson() with @safe."); auto jval = readValue!(Traits, Bson).toJson(); return () @trusted { return T.fromJson(jval); } (); } else static if (is(T : const(ubyte)[])) { auto ret = m_inputData.get!BsonBinData.rawData; static if (isStaticArray!T) return cast(T)ret[0 .. T.length]; else static if (is(T : immutable(char)[])) return ret; else return cast(T)ret.dup; } else return m_inputData.get!T(); } bool tryReadNull(Traits)() { if (m_inputData.type == Bson.Type.null_) return true; return false; } private static Bson.Type getBsonTypeID(T, bool accept_ao = false)(/*auto ref const*/ in T value) @safe { Bson.Type tp; static if (is(T == Bson)) tp = value.type; else static if (is(T == Json)) tp = jsonTypeToBsonType(value.type); else static if (is(T == typeof(null))) tp = Bson.Type.null_; else static if (is(T == string)) tp = Bson.Type.string; else static if (is(T == BsonBinData)) tp = Bson.Type.binData; else static if (is(T == BsonObjectID)) tp = Bson.Type.objectID; else static if (is(T == BsonDate)) tp = Bson.Type.date; else static if (is(T == SysTime)) tp = Bson.Type.date; else static if (is(T == BsonRegex)) tp = Bson.Type.regex; else static if (is(T == BsonTimestamp)) tp = Bson.Type.timestamp; else static if (is(T == bool)) tp = Bson.Type.bool_; else static if (isIntegral!T && is(T : int)) tp = Bson.Type.int_; else static if (isIntegral!T && is(T : long)) tp = Bson.Type.long_; else static if (isFloatingPoint!T && is(T : double)) tp = Bson.Type.double_; else static if (isBsonSerializable!T) tp = value.toBson().type; // FIXME: this is highly inefficient else static if (isJsonSerializable!T) tp = jsonTypeToBsonType(value.toJson().type); // FIXME: this is highly inefficient else static if (is(T : const(ubyte)[])) tp = Bson.Type.binData; else static if (accept_ao && isArray!T) tp = Bson.Type.array; else static if (accept_ao && isAssociativeArray!T) tp = Bson.Type.object; else static if (accept_ao && (is(T == class) || is(T == struct))) tp = Bson.Type.object; else static assert(false, "Unsupported type: " ~ T.stringof); return tp; } } private Bson.Type jsonTypeToBsonType(Json.Type tp) @safe { static immutable Bson.Type[Json.Type.max+1] JsonIDToBsonID = [ Bson.Type.undefined, Bson.Type.null_, Bson.Type.bool_, Bson.Type.long_, Bson.Type.long_, Bson.Type.double_, Bson.Type.string, Bson.Type.array, Bson.Type.object ]; return JsonIDToBsonID[tp]; } private Bson.Type writeBson(R)(ref R dst, in Json value) if( isOutputRange!(R, ubyte) ) { final switch(value.type){ case Json.Type.undefined: return Bson.Type.undefined; case Json.Type.null_: return Bson.Type.null_; case Json.Type.bool_: dst.put(cast(ubyte)(cast(bool)value ? 0x01 : 0x00)); return Bson.Type.bool_; case Json.Type.int_: dst.put(toBsonData(cast(long)value)); return Bson.Type.long_; case Json.Type.bigInt: dst.put(toBsonData(cast(long)value)); return Bson.Type.long_; case Json.Type.float_: dst.put(toBsonData(cast(double)value)); return Bson.Type.double_; case Json.Type.string: dst.put(toBsonData(cast(uint)value.length+1)); dst.put(cast(bdata_t)cast(string)value); dst.put(cast(ubyte)0); return Bson.Type.string; case Json.Type.array: auto app = appender!bdata_t(); foreach( size_t i, ref const Json v; value ){ app.put(cast(ubyte)(jsonTypeToBsonType(v.type))); putCString(app, to!string(i)); writeBson(app, v); } dst.put(toBsonData(cast(int)(app.data.length + int.sizeof + 1))); dst.put(app.data); dst.put(cast(ubyte)0); return Bson.Type.array; case Json.Type.object: auto app = appender!bdata_t(); foreach( string k, ref const Json v; value ){ app.put(cast(ubyte)(jsonTypeToBsonType(v.type))); putCString(app, k); writeBson(app, v); } dst.put(toBsonData(cast(int)(app.data.length + int.sizeof + 1))); dst.put(app.data); dst.put(cast(ubyte)0); return Bson.Type.object; } } unittest { Json jsvalue = parseJsonString("{\"key\" : \"Value\"}"); assert(serializeToBson(jsvalue).toJson() == jsvalue); jsvalue = parseJsonString("{\"key\" : [{\"key\" : \"Value\"}, {\"key2\" : \"Value2\"}] }"); assert(serializeToBson(jsvalue).toJson() == jsvalue); jsvalue = parseJsonString("[ 1 , 2 , 3]"); assert(serializeToBson(jsvalue).toJson() == jsvalue); } private string skipCString(ref bdata_t data) @safe { auto idx = data.countUntil(0); enforce(idx >= 0, "Unterminated BSON C-string."); auto ret = data[0 .. idx]; data = data[idx+1 .. $]; return cast(string)ret; } private void putCString(R)(ref R dst, string str) { dst.put(cast(bdata_t)str); dst.put(cast(ubyte)0); } ubyte[] toBsonData(T)(T v) { /*static T tmp; tmp = nativeToLittleEndian(v); return cast(ubyte[])((&tmp)[0 .. 1]);*/ if (__ctfe) return nativeToLittleEndian(v).dup; else { static ubyte[T.sizeof] ret; ret = nativeToLittleEndian(v); return ret; } } T fromBsonData(T)(in ubyte[] v) { assert(v.length >= T.sizeof); //return (cast(T[])v[0 .. T.sizeof])[0]; ubyte[T.sizeof] vu = v[0 .. T.sizeof]; return littleEndianToNative!T(vu); } ubyte[] toBigEndianData(T)(T v) { if (__ctfe) return nativeToBigEndian(v).dup; else { static ubyte[T.sizeof] ret; ret = nativeToBigEndian(v); return ret; } } private string underscoreStrip(string field_name) pure @safe { if( field_name.length < 1 || field_name[$-1] != '_' ) return field_name; else return field_name[0 .. $-1]; } /// private package template isBsonSerializable(T) { enum isBsonSerializable = is(typeof(T.init.toBson()) == Bson) && is(typeof(T.fromBson(Bson())) == T); } vibe.d-0.8.2/data/vibe/data/json.d000066400000000000000000002304521324361747700166010ustar00rootroot00000000000000/** JSON serialization and value handling. This module provides the Json struct for reading, writing and manipulating JSON values. De(serialization) of arbitrary D types is also supported and is recommended for handling JSON in performance sensitive applications. Copyright: © 2012-2015 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.data.json; /// @safe unittest { void manipulateJson(Json j) { import std.stdio; // retrieving the values is done using get() assert(j["name"].get!string == "Example"); assert(j["id"].get!int == 1); // semantic conversions can be done using to() assert(j["id"].to!string == "1"); // prints: // name: "Example" // id: 1 foreach (key, value; j.byKeyValue) writefln("%s: %s", key, value); // print out as JSON: {"name": "Example", "id": 1} writefln("JSON: %s", j.toString()); // DEPRECATED: object members can be accessed using member syntax, just like in JavaScript //j = Json.emptyObject; //j.name = "Example"; //j.id = 1; } } /// Constructing `Json` objects @safe unittest { // construct a JSON object {"field1": "foo", "field2": 42, "field3": true} // using the constructor Json j1 = Json(["field1": Json("foo"), "field2": Json(42), "field3": Json(true)]); // using piecewise construction Json j2 = Json.emptyObject; j2["field1"] = "foo"; j2["field2"] = 42.0; j2["field3"] = true; // using serialization struct S { string field1; double field2; bool field3; } Json j3 = S("foo", 42, true).serializeToJson(); // using serialization, converting directly to a JSON string string j4 = S("foo", 32, true).serializeToJsonString(); } public import vibe.data.serialization; public import std.json : JSONException; import std.algorithm; import std.array; import std.conv; import std.datetime; import std.exception; import std.format; import std.string; import std.range; import std.traits; import std.typecons : Tuple; import std.bigint; /******************************************************************************/ /* public types */ /******************************************************************************/ /** Represents a single JSON value. Json values can have one of the types defined in the Json.Type enum. They behave mostly like values in ECMA script in the way that you can transparently perform operations on them. However, strict typechecking is done, so that operations between differently typed JSON values will throw a JSONException. Additionally, an explicit cast or using get!() or to!() is required to convert a JSON value to the corresponding static D type. */ align(8) // ensures that pointers stay on 64-bit boundaries on x64 so that they get scanned by the GC struct Json { @safe: static assert(!hasElaborateDestructor!BigInt && !hasElaborateCopyConstructor!BigInt, "struct Json is missing required ~this and/or this(this) members for BigInt."); private { // putting all fields in a union results in many false pointers leading to // memory leaks and, worse, std.algorithm.swap triggering an assertion // because of internal pointers. This crude workaround seems to fix // the issues. enum m_size = max((BigInt.sizeof+(void*).sizeof), 2); // NOTE : DMD 2.067.1 doesn't seem to init void[] correctly on its own. // Explicity initializing it works around this issue. Using a void[] // array here to guarantee that it's scanned by the GC. void[m_size] m_data = (void[m_size]).init; static assert(m_data.offsetof == 0, "m_data must be the first struct member."); static assert(BigInt.alignof <= 8, "Json struct alignment of 8 isn't sufficient to store BigInt."); ref inout(T) getDataAs(T)() inout @trusted { static assert(T.sizeof <= m_data.sizeof); return (cast(inout(T)[1])m_data[0 .. T.sizeof])[0]; } @property ref inout(BigInt) m_bigInt() inout { return getDataAs!BigInt(); } @property ref inout(long) m_int() inout { return getDataAs!long(); } @property ref inout(double) m_float() inout { return getDataAs!double(); } @property ref inout(bool) m_bool() inout { return getDataAs!bool(); } @property ref inout(string) m_string() inout { return getDataAs!string(); } @property ref inout(Json[string]) m_object() inout { return getDataAs!(Json[string])(); } @property ref inout(Json[]) m_array() inout { return getDataAs!(Json[])(); } Type m_type = Type.undefined; version (VibeJsonFieldNames) { uint m_magic = 0x1337f00d; // works around Appender bug (DMD BUG 10690/10859/11357) string m_name; } } /** Represents the run time type of a JSON value. */ enum Type { undefined, /// A non-existent value in a JSON object null_, /// Null value bool_, /// Boolean value int_, /// 64-bit integer value bigInt, /// BigInt values float_, /// 64-bit floating point value string, /// UTF-8 string array, /// Array of JSON values object, /// JSON object aka. dictionary from string to Json Undefined = undefined, /// Compatibility alias - will be deprecated soon Null = null_, /// Compatibility alias - will be deprecated soon Bool = bool_, /// Compatibility alias - will be deprecated soon Int = int_, /// Compatibility alias - will be deprecated soon Float = float_, /// Compatibility alias - will be deprecated soon String = string, /// Compatibility alias - will be deprecated soon Array = array, /// Compatibility alias - will be deprecated soon Object = object /// Compatibility alias - will be deprecated soon } /// New JSON value of Type.Undefined static @property Json undefined() { return Json(); } /// New JSON value of Type.Object static @property Json emptyObject() { return Json(cast(Json[string])null); } /// New JSON value of Type.Array static @property Json emptyArray() { return Json(cast(Json[])null); } version(JsonLineNumbers) int line; /** Constructor for a JSON object. */ this(typeof(null)) @trusted { m_type = Type.null_; } /// ditto this(bool v) @trusted { m_type = Type.bool_; m_bool = v; } /// ditto this(byte v) { this(cast(long)v); } /// ditto this(ubyte v) { this(cast(long)v); } /// ditto this(short v) { this(cast(long)v); } /// ditto this(ushort v) { this(cast(long)v); } /// ditto this(int v) { this(cast(long)v); } /// ditto this(uint v) { this(cast(long)v); } /// ditto this(long v) @trusted { m_type = Type.int_; m_int = v; } /// ditto this(BigInt v) @trusted { m_type = Type.bigInt; initBigInt(); m_bigInt = v; } /// ditto this(double v) @trusted { m_type = Type.float_; m_float = v; } /// ditto this(string v) @trusted { m_type = Type.string; m_string = v; } /// ditto this(Json[] v) @trusted { m_type = Type.array; m_array = v; } /// ditto this(Json[string] v) @trusted { m_type = Type.object; m_object = v; } /** Allows assignment of D values to a JSON value. */ ref Json opAssign(Json v) { if (v.type != Type.bigInt) runDestructors(); auto old_type = m_type; m_type = v.m_type; final switch(m_type){ case Type.undefined: m_string = null; break; case Type.null_: m_string = null; break; case Type.bool_: m_bool = v.m_bool; break; case Type.int_: m_int = v.m_int; break; case Type.bigInt: if (old_type != Type.bigInt) initBigInt(); m_bigInt = v.m_bigInt; break; case Type.float_: m_float = v.m_float; break; case Type.string: m_string = v.m_string; break; case Type.array: opAssign(v.m_array); break; case Type.object: opAssign(v.m_object); break; } return this; } /// ditto void opAssign(typeof(null)) { runDestructors(); m_type = Type.null_; m_string = null; } /// ditto bool opAssign(bool v) { runDestructors(); m_type = Type.bool_; m_bool = v; return v; } /// ditto int opAssign(int v) { runDestructors(); m_type = Type.int_; m_int = v; return v; } /// ditto long opAssign(long v) { runDestructors(); m_type = Type.int_; m_int = v; return v; } /// ditto BigInt opAssign(BigInt v) { if (m_type != Type.bigInt) initBigInt(); m_type = Type.bigInt; m_bigInt = v; return v; } /// ditto double opAssign(double v) { runDestructors(); m_type = Type.float_; m_float = v; return v; } /// ditto string opAssign(string v) { runDestructors(); m_type = Type.string; m_string = v; return v; } /// ditto Json[] opAssign(Json[] v) { runDestructors(); m_type = Type.array; m_array = v; version (VibeJsonFieldNames) { if (m_magic == 0x1337f00d) { foreach (idx, ref av; m_array) av.m_name = format("%s[%s]", m_name, idx); } else m_name = null; } return v; } /// ditto Json[string] opAssign(Json[string] v) { runDestructors(); m_type = Type.object; m_object = v; version (VibeJsonFieldNames) { if (m_magic == 0x1337f00d) { foreach (key, ref av; m_object) av.m_name = format("%s.%s", m_name, key); } else m_name = null; } return v; } /** Allows removal of values from Type.Object Json objects. */ void remove(string item) { checkType!(Json[string])(); m_object.remove(item); } /** The current type id of this JSON object. */ @property Type type() const @safe { return m_type; } /** Clones a JSON value recursively. */ Json clone() const { final switch (m_type) { case Type.undefined: return Json.undefined; case Type.null_: return Json(null); case Type.bool_: return Json(m_bool); case Type.int_: return Json(m_int); case Type.bigInt: return Json(m_bigInt); case Type.float_: return Json(m_float); case Type.string: return Json(m_string); case Type.array: auto ret = Json.emptyArray; foreach (v; this.byValue) ret ~= v.clone(); return ret; case Type.object: auto ret = Json.emptyObject; foreach (name, v; this.byKeyValue) ret[name] = v.clone(); return ret; } } /** Allows direct indexing of array typed JSON values. */ ref inout(Json) opIndex(size_t idx) inout { checkType!(Json[])(); return m_array[idx]; } /// unittest { Json value = Json.emptyArray; value ~= 1; value ~= true; value ~= "foo"; assert(value[0] == 1); assert(value[1] == true); assert(value[2] == "foo"); } /** Allows direct indexing of object typed JSON values using a string as the key. Returns an object of `Type.undefined` if the key was not found. */ const(Json) opIndex(string key) const { checkType!(Json[string])(); if( auto pv = key in m_object ) return *pv; Json ret = Json.undefined; ret.m_string = key; version (VibeJsonFieldNames) ret.m_name = format("%s.%s", m_name, key); return ret; } /// ditto ref Json opIndex(string key) { checkType!(Json[string])(); if( auto pv = key in m_object ) return *pv; if (m_object is null) { m_object = ["": Json.init]; m_object.remove(""); } m_object[key] = Json.init; assert(m_object !is null); assert(key in m_object, "Failed to insert key '"~key~"' into AA!?"); m_object[key].m_type = Type.undefined; // DMDBUG: AAs are teh $H1T!!!11 assert(m_object[key].type == Type.undefined); m_object[key].m_string = key; version (VibeJsonFieldNames) m_object[key].m_name = format("%s.%s", m_name, key); return m_object[key]; } /// unittest { Json value = Json.emptyObject; value["a"] = 1; value["b"] = true; value["c"] = "foo"; assert(value["a"] == 1); assert(value["b"] == true); assert(value["c"] == "foo"); assert(value["not-existing"].type() == Type.undefined); } /** Returns a slice of a JSON array. */ inout(Json[]) opSlice() inout { checkType!(Json[])(); return m_array; } /// inout(Json[]) opSlice(size_t from, size_t to) inout { checkType!(Json[])(); return m_array[from .. to]; } /** Returns the number of entries of string, array or object typed JSON values. */ @property size_t length() const @trusted { checkType!(string, Json[], Json[string])("property length"); switch(m_type){ case Type.string: return m_string.length; case Type.array: return m_array.length; case Type.object: return m_object.length; default: assert(false); } } /** Allows foreach iterating over JSON objects and arrays. */ int opApply(scope int delegate(ref Json obj) del) @system { checkType!(Json[], Json[string])("opApply"); if( m_type == Type.array ){ foreach( ref v; m_array ) if( auto ret = del(v) ) return ret; return 0; } else { foreach( ref v; m_object ) if( v.type != Type.undefined ) if( auto ret = del(v) ) return ret; return 0; } } /// ditto int opApply(scope int delegate(ref const Json obj) del) const @system { checkType!(Json[], Json[string])("opApply"); if( m_type == Type.array ){ foreach( ref v; m_array ) if( auto ret = del(v) ) return ret; return 0; } else { foreach( ref v; m_object ) if( v.type != Type.undefined ) if( auto ret = del(v) ) return ret; return 0; } } /// ditto int opApply(scope int delegate(ref size_t idx, ref Json obj) del) @system { checkType!(Json[])("opApply"); foreach( idx, ref v; m_array ) if( auto ret = del(idx, v) ) return ret; return 0; } /// ditto int opApply(scope int delegate(ref size_t idx, ref const Json obj) del) const @system { checkType!(Json[])("opApply"); foreach( idx, ref v; m_array ) if( auto ret = del(idx, v) ) return ret; return 0; } /// ditto int opApply(scope int delegate(ref string idx, ref Json obj) del) @system { checkType!(Json[string])("opApply"); foreach( idx, ref v; m_object ) if( v.type != Type.undefined ) if( auto ret = del(idx, v) ) return ret; return 0; } /// ditto int opApply(scope int delegate(ref string idx, ref const Json obj) del) const @system { checkType!(Json[string])("opApply"); foreach( idx, ref v; m_object ) if( v.type != Type.undefined ) if( auto ret = del(idx, v) ) return ret; return 0; } private alias KeyValue = Tuple!(string, "key", Json, "value"); /// Iterates over all key/value pairs of an object. @property auto byKeyValue() @trusted { checkType!(Json[string])("byKeyValue"); return m_object.byKeyValue.map!(kv => KeyValue(kv.key, kv.value)).trustedRange; } /// ditto @property auto byKeyValue() const @trusted { checkType!(Json[string])("byKeyValue"); return m_object.byKeyValue.map!(kv => const(KeyValue)(kv.key, kv.value)).trustedRange; } /// Iterates over all index/value pairs of an array. @property auto byIndexValue() { checkType!(Json[])("byIndexValue"); return zip(iota(0, m_array.length), m_array); } /// ditto @property auto byIndexValue() const { checkType!(Json[])("byIndexValue"); return zip(iota(0, m_array.length), m_array); } /// Iterates over all values of an object or array. @property auto byValue() @trusted { checkType!(Json[], Json[string])("byValue"); static struct Rng { private { bool isArray; Json[] array; typeof(Json.init.m_object.byValue) object; } bool empty() @trusted { if (isArray) return array.length == 0; else return object.empty; } auto front() @trusted { if (isArray) return array[0]; else return object.front; } void popFront() @trusted { if (isArray) array = array[1 .. $]; else object.popFront(); } } if (m_type == Type.array) return Rng(true, m_array); else return Rng(false, null, m_object.byValue); } /// ditto @property auto byValue() const @trusted { checkType!(Json[], Json[string])("byValue"); static struct Rng { @safe: private { bool isArray; const(Json)[] array; typeof(const(Json).init.m_object.byValue) object; } bool empty() @trusted { if (isArray) return array.length == 0; else return object.empty; } auto front() @trusted { if (isArray) return array[0]; else return object.front; } void popFront() @trusted { if (isArray) array = array[1 .. $]; else object.popFront(); } } if (m_type == Type.array) return Rng(true, m_array); else return Rng(false, null, m_object.byValue); } /** Converts the JSON value to the corresponding D type - types must match exactly. Available_Types: $(UL $(LI `bool` (`Type.bool_`)) $(LI `double` (`Type.float_`)) $(LI `float` (Converted from `double`)) $(LI `long` (`Type.int_`)) $(LI `ulong`, `int`, `uint`, `short`, `ushort`, `byte`, `ubyte` (Converted from `long`)) $(LI `string` (`Type.string`)) $(LI `Json[]` (`Type.array`)) $(LI `Json[string]` (`Type.object`)) ) See_Also: `opt`, `to`, `deserializeJson` */ inout(T) opCast(T)() inout { return get!T; } /// ditto @property inout(T) get(T)() inout @trusted { static if (!is(T : bool) && is(T : long)) checkType!(long, BigInt)(); else checkType!T(); static if (is(T == bool)) return m_bool; else static if (is(T == double)) return m_float; else static if (is(T == float)) return cast(T)m_float; else static if (is(T == string)) return m_string; else static if (is(T == Json[])) return m_array; else static if (is(T == Json[string])) return m_object; else static if (is(T == BigInt)) return m_type == Type.bigInt ? m_bigInt : BigInt(m_int); else static if (is(T : long)) { if (m_type == Type.bigInt) { enforceJson(m_bigInt <= T.max && m_bigInt >= T.min, "Integer conversion out of bounds error"); return cast(T)m_bigInt.toLong(); } else { enforceJson(m_int <= T.max && m_int >= T.min, "Integer conversion out of bounds error"); return cast(T)m_int; } } else static assert(0, "JSON can only be cast to (bool, long, std.bigint.BigInt, double, string, Json[] or Json[string]. Not "~T.stringof~"."); } /** Returns the native type for this JSON if it matches the current runtime type. If the runtime type does not match the given native type, the 'def' parameter is returned instead. See_Also: `get` */ @property const(T) opt(T)(const(T) def = T.init) const { if( typeId!T != m_type ) return def; return get!T; } /// ditto @property T opt(T)(T def = T.init) { if( typeId!T != m_type ) return def; return get!T; } /** Converts the JSON value to the corresponding D type - types are converted as necessary. Automatically performs conversions between strings and numbers. See `get` for the list of available types. For converting/deserializing JSON to complex data types see `deserializeJson`. See_Also: `get`, `deserializeJson` */ @property inout(T) to(T)() inout { static if( is(T == bool) ){ final switch( m_type ){ case Type.undefined: return false; case Type.null_: return false; case Type.bool_: return m_bool; case Type.int_: return m_int != 0; case Type.bigInt: return m_bigInt != 0; case Type.float_: return m_float != 0; case Type.string: return m_string.length > 0; case Type.array: return m_array.length > 0; case Type.object: return m_object.length > 0; } } else static if( is(T == double) ){ final switch( m_type ){ case Type.undefined: return T.init; case Type.null_: return 0; case Type.bool_: return m_bool ? 1 : 0; case Type.int_: return m_int; case Type.bigInt: return bigIntToLong(); case Type.float_: return m_float; case Type.string: return .to!double(cast(string)m_string); case Type.array: return double.init; case Type.object: return double.init; } } else static if( is(T == float) ){ final switch( m_type ){ case Type.undefined: return T.init; case Type.null_: return 0; case Type.bool_: return m_bool ? 1 : 0; case Type.int_: return m_int; case Type.bigInt: return bigIntToLong(); case Type.float_: return m_float; case Type.string: return .to!float(cast(string)m_string); case Type.array: return float.init; case Type.object: return float.init; } } else static if( is(T == long) ){ final switch( m_type ){ case Type.undefined: return 0; case Type.null_: return 0; case Type.bool_: return m_bool ? 1 : 0; case Type.int_: return m_int; case Type.bigInt: return cast(long)bigIntToLong(); case Type.float_: return cast(long)m_float; case Type.string: return .to!long(m_string); case Type.array: return 0; case Type.object: return 0; } } else static if( is(T : long) ){ final switch( m_type ){ case Type.undefined: return 0; case Type.null_: return 0; case Type.bool_: return m_bool ? 1 : 0; case Type.int_: return cast(T)m_int; case Type.bigInt: return cast(T)bigIntToLong(); case Type.float_: return cast(T)m_float; case Type.string: return cast(T).to!long(cast(string)m_string); case Type.array: return 0; case Type.object: return 0; } } else static if( is(T == string) ){ switch( m_type ){ default: return toString(); case Type.string: return m_string; } } else static if( is(T == Json[]) ){ switch( m_type ){ default: return Json([this]); case Type.array: return m_array; } } else static if( is(T == Json[string]) ){ switch( m_type ){ default: return Json(["value": this]); case Type.object: return m_object; } } else static if( is(T == BigInt) ){ final switch( m_type ){ case Type.undefined: return BigInt(0); case Type.null_: return BigInt(0); case Type.bool_: return BigInt(m_bool ? 1 : 0); case Type.int_: return BigInt(m_int); case Type.bigInt: return m_bigInt; case Type.float_: return BigInt(cast(long)m_float); case Type.string: return BigInt(.to!long(m_string)); case Type.array: return BigInt(0); case Type.object: return BigInt(0); } } else static assert(0, "JSON can only be cast to (bool, long, std.bigint.BigInt, double, string, Json[] or Json[string]. Not "~T.stringof~"."); } /** Performs unary operations on the JSON value. The following operations are supported for each type: $(DL $(DT Null) $(DD none) $(DT Bool) $(DD ~) $(DT Int) $(DD +, -, ++, --) $(DT Float) $(DD +, -, ++, --) $(DT String) $(DD none) $(DT Array) $(DD none) $(DT Object) $(DD none) ) */ Json opUnary(string op)() const { static if( op == "~" ){ checkType!bool(); return Json(~m_bool); } else static if( op == "+" || op == "-" || op == "++" || op == "--" ){ checkType!(BigInt, long, double)("unary "~op); if( m_type == Type.int_ ) mixin("return Json("~op~"m_int);"); else if( m_type == Type.bigInt ) mixin("return Json("~op~"m_bigInt);"); else if( m_type == Type.float_ ) mixin("return Json("~op~"m_float);"); else assert(false); } else static assert(0, "Unsupported operator '"~op~"' for type JSON."); } /** Performs binary operations between JSON values. The two JSON values must be of the same run time type or a JSONException will be thrown. Only the operations listed are allowed for each of the types. $(DL $(DT Null) $(DD none) $(DT Bool) $(DD &&, ||) $(DT Int) $(DD +, -, *, /, %) $(DT Float) $(DD +, -, *, /, %) $(DT String) $(DD ~) $(DT Array) $(DD ~) $(DT Object) $(DD in) ) */ Json opBinary(string op)(ref const(Json) other) const { enforceJson(m_type == other.m_type, "Binary operation '"~op~"' between "~.to!string(m_type)~" and "~.to!string(other.m_type)~" JSON objects."); static if( op == "&&" ){ checkType!(bool)(op); return Json(m_bool && other.m_bool); } else static if( op == "||" ){ checkType!(bool)(op); return Json(m_bool || other.m_bool); } else static if( op == "+" ){ checkType!(BigInt, long, double)(op); if( m_type == Type.int_ ) return Json(m_int + other.m_int); else if( m_type == Type.bigInt ) return Json(() @trusted { return m_bigInt + other.m_bigInt; } ()); else if( m_type == Type.float_ ) return Json(m_float + other.m_float); else assert(false); } else static if( op == "-" ){ checkType!(BigInt, long, double)(op); if( m_type == Type.int_ ) return Json(m_int - other.m_int); else if( m_type == Type.bigInt ) return Json(() @trusted { return m_bigInt - other.m_bigInt; } ()); else if( m_type == Type.float_ ) return Json(m_float - other.m_float); else assert(false); } else static if( op == "*" ){ checkType!(BigInt, long, double)(op); if( m_type == Type.int_ ) return Json(m_int * other.m_int); else if( m_type == Type.bigInt ) return Json(() @trusted { return m_bigInt * other.m_bigInt; } ()); else if( m_type == Type.float_ ) return Json(m_float * other.m_float); else assert(false); } else static if( op == "/" ){ checkType!(BigInt, long, double)(op); if( m_type == Type.int_ ) return Json(m_int / other.m_int); else if( m_type == Type.bigInt ) return Json(() @trusted { return m_bigInt / other.m_bigInt; } ()); else if( m_type == Type.float_ ) return Json(m_float / other.m_float); else assert(false); } else static if( op == "%" ){ checkType!(BigInt, long, double)(op); if( m_type == Type.int_ ) return Json(m_int % other.m_int); else if( m_type == Type.bigInt ) return Json(() @trusted { return m_bigInt % other.m_bigInt; } ()); else if( m_type == Type.float_ ) return Json(m_float % other.m_float); else assert(false); } else static if( op == "~" ){ checkType!(string, Json[])(op); if( m_type == Type.string ) return Json(m_string ~ other.m_string); else if (m_type == Type.array) return Json(m_array ~ other.m_array); else assert(false); } else static assert(0, "Unsupported operator '"~op~"' for type JSON."); } /// ditto Json opBinary(string op)(Json other) if( op == "~" ) { static if( op == "~" ){ checkType!(string, Json[])(op); if( m_type == Type.string ) return Json(m_string ~ other.m_string); else if( m_type == Type.array ) return Json(m_array ~ other.m_array); else assert(false); } else static assert(0, "Unsupported operator '"~op~"' for type JSON."); } /// ditto void opOpAssign(string op)(Json other) if (op == "+" || op == "-" || op == "*" || op == "/" || op == "%" || op =="~") { enforceJson(m_type == other.m_type || op == "~" && m_type == Type.array, "Binary operation '"~op~"=' between "~.to!string(m_type)~" and "~.to!string(other.m_type)~" JSON objects."); static if( op == "+" ){ if( m_type == Type.int_ ) m_int += other.m_int; else if( m_type == Type.bigInt ) m_bigInt += other.m_bigInt; else if( m_type == Type.float_ ) m_float += other.m_float; else enforceJson(false, "'+=' only allowed for scalar types, not "~.to!string(m_type)~"."); } else static if( op == "-" ){ if( m_type == Type.int_ ) m_int -= other.m_int; else if( m_type == Type.bigInt ) m_bigInt -= other.m_bigInt; else if( m_type == Type.float_ ) m_float -= other.m_float; else enforceJson(false, "'-=' only allowed for scalar types, not "~.to!string(m_type)~"."); } else static if( op == "*" ){ if( m_type == Type.int_ ) m_int *= other.m_int; else if( m_type == Type.bigInt ) m_bigInt *= other.m_bigInt; else if( m_type == Type.float_ ) m_float *= other.m_float; else enforceJson(false, "'*=' only allowed for scalar types, not "~.to!string(m_type)~"."); } else static if( op == "/" ){ if( m_type == Type.int_ ) m_int /= other.m_int; else if( m_type == Type.bigInt ) m_bigInt /= other.m_bigInt; else if( m_type == Type.float_ ) m_float /= other.m_float; else enforceJson(false, "'/=' only allowed for scalar types, not "~.to!string(m_type)~"."); } else static if( op == "%" ){ if( m_type == Type.int_ ) m_int %= other.m_int; else if( m_type == Type.bigInt ) m_bigInt %= other.m_bigInt; else if( m_type == Type.float_ ) m_float %= other.m_float; else enforceJson(false, "'%=' only allowed for scalar types, not "~.to!string(m_type)~"."); } else static if( op == "~" ){ if (m_type == Type.string) m_string ~= other.m_string; else if (m_type == Type.array) { if (other.m_type == Type.array) m_array ~= other.m_array; else appendArrayElement(other); } else enforceJson(false, "'~=' only allowed for string and array types, not "~.to!string(m_type)~"."); } else static assert(0, "Unsupported operator '"~op~"=' for type JSON."); } /// ditto void opOpAssign(string op, T)(T other) if (!is(T == Json) && is(typeof(Json(other)))) { opOpAssign!op(Json(other)); } /// ditto Json opBinary(string op)(bool other) const { checkType!bool(); mixin("return Json(m_bool "~op~" other);"); } /// ditto Json opBinary(string op)(long other) const { checkType!(long, BigInt)(); if (m_type == Type.bigInt) mixin("return Json(m_bigInt "~op~" other);"); else mixin("return Json(m_int "~op~" other);"); } /// ditto Json opBinary(string op)(BigInt other) const { checkType!(long, BigInt)(); if (m_type == Type.bigInt) mixin("return Json(m_bigInt "~op~" other);"); else mixin("return Json(m_int "~op~" other);"); } /// ditto Json opBinary(string op)(double other) const { checkType!double(); mixin("return Json(m_float "~op~" other);"); } /// ditto Json opBinary(string op)(string other) const { checkType!string(); mixin("return Json(m_string "~op~" other);"); } /// ditto Json opBinary(string op)(Json[] other) { checkType!(Json[])(); mixin("return Json(m_array "~op~" other);"); } /// ditto Json opBinaryRight(string op)(bool other) const { checkType!bool(); mixin("return Json(other "~op~" m_bool);"); } /// ditto Json opBinaryRight(string op)(long other) const { checkType!(long, BigInt)(); if (m_type == Type.bigInt) mixin("return Json(other "~op~" m_bigInt);"); else mixin("return Json(other "~op~" m_int);"); } /// ditto Json opBinaryRight(string op)(BigInt other) const { checkType!(long, BigInt)(); if (m_type == Type.bigInt) mixin("return Json(other "~op~" m_bigInt);"); else mixin("return Json(other "~op~" m_int);"); } /// ditto Json opBinaryRight(string op)(double other) const { checkType!double(); mixin("return Json(other "~op~" m_float);"); } /// ditto Json opBinaryRight(string op)(string other) const if(op == "~") { checkType!string(); return Json(other ~ m_string); } /// ditto Json opBinaryRight(string op)(Json[] other) { checkType!(Json[])(); mixin("return Json(other "~op~" m_array);"); } /** Checks wheter a particular key is set and returns a pointer to it. For field that don't exist or have a type of `Type.undefined`, the `in` operator will return `null`. */ inout(Json)* opBinaryRight(string op)(string other) inout if(op == "in") { checkType!(Json[string])(); auto pv = other in m_object; if (!pv) return null; if (pv.type == Type.undefined) return null; return pv; } /// unittest { auto j = Json.emptyObject; j["a"] = "foo"; j["b"] = Json.undefined; assert("a" in j); assert(("a" in j).get!string == "foo"); assert("b" !in j); assert("c" !in j); } /** * The append operator will append arrays. This method always appends it's argument as an array element, so nested arrays can be created. */ void appendArrayElement(Json element) { enforceJson(m_type == Type.array, "'appendArrayElement' only allowed for array types, not "~.to!string(m_type)~"."); m_array ~= element; } /** Compares two JSON values for equality. If the two values have different types, they are considered unequal. This differs with ECMA script, which performs a type conversion before comparing the values. */ bool opEquals(ref const Json other) const { if( m_type != other.m_type ) return false; final switch(m_type){ case Type.undefined: return false; case Type.null_: return true; case Type.bool_: return m_bool == other.m_bool; case Type.int_: return m_int == other.m_int; case Type.bigInt: return m_bigInt == other.m_bigInt; case Type.float_: return m_float == other.m_float; case Type.string: return m_string == other.m_string; case Type.array: return m_array == other.m_array; case Type.object: return m_object == other.m_object; } } /// ditto bool opEquals(const Json other) const { return opEquals(other); } /// ditto bool opEquals(typeof(null)) const { return m_type == Type.null_; } /// ditto bool opEquals(bool v) const { return m_type == Type.bool_ && m_bool == v; } /// ditto bool opEquals(int v) const { return (m_type == Type.int_ && m_int == v) || (m_type == Type.bigInt && m_bigInt == v); } /// ditto bool opEquals(long v) const { return (m_type == Type.int_ && m_int == v) || (m_type == Type.bigInt && m_bigInt == v); } /// ditto bool opEquals(BigInt v) const { return (m_type == Type.int_ && m_int == v) || (m_type == Type.bigInt && m_bigInt == v); } /// ditto bool opEquals(double v) const { return m_type == Type.float_ && m_float == v; } /// ditto bool opEquals(string v) const { return m_type == Type.string && m_string == v; } /** Compares two JSON values. If the types of the two values differ, the value with the smaller type id is considered the smaller value. This differs from ECMA script, which performs a type conversion before comparing the values. JSON values of type Object cannot be compared and will throw an exception. */ int opCmp(ref const Json other) const { if( m_type != other.m_type ) return m_type < other.m_type ? -1 : 1; final switch(m_type){ case Type.undefined: return 0; case Type.null_: return 0; case Type.bool_: return m_bool < other.m_bool ? -1 : m_bool == other.m_bool ? 0 : 1; case Type.int_: return m_int < other.m_int ? -1 : m_int == other.m_int ? 0 : 1; case Type.bigInt: return () @trusted { return m_bigInt < other.m_bigInt; } () ? -1 : m_bigInt == other.m_bigInt ? 0 : 1; case Type.float_: return m_float < other.m_float ? -1 : m_float == other.m_float ? 0 : 1; case Type.string: return m_string < other.m_string ? -1 : m_string == other.m_string ? 0 : 1; case Type.array: return m_array < other.m_array ? -1 : m_array == other.m_array ? 0 : 1; case Type.object: enforceJson(false, "JSON objects cannot be compared."); assert(false); } } alias opDollar = length; /** Returns the type id corresponding to the given D type. */ static @property Type typeId(T)() { static if( is(T == typeof(null)) ) return Type.null_; else static if( is(T == bool) ) return Type.bool_; else static if( is(T == double) ) return Type.float_; else static if( is(T == float) ) return Type.float_; else static if( is(T : long) ) return Type.int_; else static if( is(T == string) ) return Type.string; else static if( is(T == Json[]) ) return Type.array; else static if( is(T == Json[string]) ) return Type.object; else static if( is(T == BigInt) ) return Type.bigInt; else static assert(false, "Unsupported JSON type '"~T.stringof~"'. Only bool, long, std.bigint.BigInt, double, string, Json[] and Json[string] are allowed."); } /** Returns the JSON object as a string. For large JSON values use writeJsonString instead as this function will store the whole string in memory, whereas writeJsonString writes it out bit for bit. See_Also: writeJsonString, toPrettyString */ string toString() const @trusted { // DMD BUG: this should actually be all @safe, but for some reason // @safe inference for writeJsonString doesn't work. auto ret = appender!string(); writeJsonString(ret, this); return ret.data; } /// ditto void toString(scope void delegate(const(char)[]) @safe sink, FormatSpec!char fmt) @trusted { // DMD BUG: this should actually be all @safe, but for some reason // @safe inference for writeJsonString doesn't work. static struct DummyRangeS { void delegate(const(char)[]) @safe sink; void put(const(char)[] str) @safe { sink(str); } void put(char ch) @trusted { sink((&ch)[0 .. 1]); } } auto r = DummyRangeS(sink); writeJsonString(r, this); } /// ditto void toString(scope void delegate(const(char)[]) @system sink, FormatSpec!char fmt) @system { // DMD BUG: this should actually be all @safe, but for some reason // @safe inference for writeJsonString doesn't work. static struct DummyRange { void delegate(const(char)[]) sink; @trusted: void put(const(char)[] str) { sink(str); } void put(char ch) { sink((&ch)[0 .. 1]); } } auto r = DummyRange(sink); writeJsonString(r, this); } /** Returns the JSON object as a "pretty" string. --- auto json = Json(["foo": Json("bar")]); writeln(json.toPrettyString()); // output: // { // "foo": "bar" // } --- Params: level = Specifies the base amount of indentation for the output. Indentation is always done using tab characters. See_Also: writePrettyJsonString, toString */ string toPrettyString(int level = 0) const @trusted { auto ret = appender!string(); writePrettyJsonString(ret, this, level); return ret.data; } private void checkType(TYPES...)(string op = null) const { bool matched = false; foreach (T; TYPES) if (m_type == typeId!T) matched = true; if (matched) return; string name; version (VibeJsonFieldNames) { if (m_name.length) name = m_name ~ " of type " ~ m_type.to!string; else name = "JSON of type " ~ m_type.to!string; } else name = "JSON of type " ~ m_type.to!string; string expected; static if (TYPES.length == 1) expected = typeId!(TYPES[0]).to!string; else { foreach (T; TYPES) { if (expected.length > 0) expected ~= ", "; expected ~= typeId!T.to!string; } } if (!op.length) throw new JSONException(format("Got %s, expected %s.", name, expected)); else throw new JSONException(format("Got %s, expected %s for %s.", name, expected, op)); } private void initBigInt() @trusted { BigInt[1] init_; // BigInt is a struct, and it has a special BigInt.init value, which differs from null. // m_data has no special initializer and when it tries to first access to BigInt // via m_bigInt(), we should explicitly initialize m_data with BigInt.init m_data[0 .. BigInt.sizeof] = cast(void[])init_; } private void runDestructors() { if (m_type != Type.bigInt) return; BigInt init_; // After swaping, init_ contains the real number from Json, and it // will be destroyed when this function is finished. // m_bigInt now contains static BigInt.init value and destruction may // be ommited for it. swap(init_, m_bigInt); } private long bigIntToLong() inout { assert(m_type == Type.bigInt, format("Converting non-bigInt type with bitIntToLong!?: %s", cast(Type)m_type)); enforceJson(m_bigInt >= long.min && m_bigInt <= long.max, "Number out of range while converting BigInt("~format("%d", m_bigInt)~") to long."); return m_bigInt.toLong(); } /*invariant() { assert(m_type >= Type.Undefined && m_type <= Type.Object); }*/ } @safe unittest { // issue #1234 - @safe toString auto j = Json(true); j.toString((str) @safe {}, FormatSpec!char("s")); assert(j.toString() == "true"); } /******************************************************************************/ /* public functions */ /******************************************************************************/ /** Parses the given range as a JSON string and returns the corresponding Json object. The range is shrunk during parsing, leaving any remaining text that is not part of the JSON contents. Throws a JSONException if any parsing error occured. */ Json parseJson(R)(ref R range, int* line = null, string filename = null) if( is(R == string) ) { Json ret; enforceJson(!range.empty, "JSON string is empty.", filename, 0); skipWhitespace(range, line); enforceJson(!range.empty, "JSON string contains only whitespaces.", filename, 0); version(JsonLineNumbers) { int curline = line ? *line : 0; } bool minus = false; switch( range.front ){ case 'f': enforceJson(range[1 .. $].startsWith("alse"), "Expected 'false', got '"~range[0 .. min(5, $)]~"'.", filename, line); range.popFrontN(5); ret = false; break; case 'n': enforceJson(range[1 .. $].startsWith("ull"), "Expected 'null', got '"~range[0 .. min(4, $)]~"'.", filename, line); range.popFrontN(4); ret = null; break; case 't': enforceJson(range[1 .. $].startsWith("rue"), "Expected 'true', got '"~range[0 .. min(4, $)]~"'.", filename, line); range.popFrontN(4); ret = true; break; case '-': case '0': .. case '9': bool is_long_overflow; bool is_float; auto num = skipNumber(range, is_float, is_long_overflow); if( is_float ) { ret = to!double(num); } else if (is_long_overflow) { ret = () @trusted { return BigInt(num.to!string); } (); } else { ret = to!long(num); } break; case '\"': ret = skipJsonString(range); break; case '[': auto arr = appender!(Json[]); range.popFront(); while (true) { skipWhitespace(range, line); enforceJson(!range.empty, "Missing ']' before EOF.", filename, line); if(range.front == ']') break; arr ~= parseJson(range, line, filename); skipWhitespace(range, line); enforceJson(!range.empty, "Missing ']' before EOF.", filename, line); enforceJson(range.front == ',' || range.front == ']', format("Expected ']' or ',' - got '%s'.", range.front), filename, line); if( range.front == ']' ) break; else range.popFront(); } range.popFront(); ret = arr.data; break; case '{': Json[string] obj; range.popFront(); while (true) { skipWhitespace(range, line); enforceJson(!range.empty, "Missing '}' before EOF.", filename, line); if(range.front == '}') break; string key = skipJsonString(range); skipWhitespace(range, line); enforceJson(range.startsWith(":"), "Expected ':' for key '" ~ key ~ "'", filename, line); range.popFront(); skipWhitespace(range, line); Json itm = parseJson(range, line, filename); obj[key] = itm; skipWhitespace(range, line); enforceJson(!range.empty, "Missing '}' before EOF.", filename, line); enforceJson(range.front == ',' || range.front == '}', format("Expected '}' or ',' - got '%s'.", range.front), filename, line); if (range.front == '}') break; else range.popFront(); } range.popFront(); ret = obj; break; default: enforceJson(false, format("Expected valid JSON token, got '%s'.", range[0 .. min(12, $)]), filename, line); assert(false); } assert(ret.type != Json.Type.undefined); version(JsonLineNumbers) ret.line = curline; return ret; } /** Parses the given JSON string and returns the corresponding Json object. Throws a JSONException if any parsing error occurs. */ Json parseJsonString(string str, string filename = null) @safe { auto strcopy = str; int line = 0; auto ret = parseJson(strcopy, () @trusted { return &line; } (), filename); enforceJson(strcopy.strip().length == 0, "Expected end of string after JSON value.", filename, line); return ret; } @safe unittest { // These currently don't work at compile time assert(parseJsonString("17559991181826658461") == Json(BigInt(17559991181826658461UL))); assert(parseJsonString("99999999999999999999999999") == () @trusted { return Json(BigInt("99999999999999999999999999")); } ()); auto json = parseJsonString(`{"hey": "This is @à test éhééhhéhéé !%/??*&?\ud83d\udcec"}`); assert(json.toPrettyString() == parseJsonString(json.toPrettyString()).toPrettyString()); bool test() { assert(parseJsonString("null") == Json(null)); assert(parseJsonString("true") == Json(true)); assert(parseJsonString("false") == Json(false)); assert(parseJsonString("1") == Json(1)); assert(parseJsonString("2.0") == Json(2.0)); assert(parseJsonString("\"test\"") == Json("test")); assert(parseJsonString("[1, 2, 3]") == Json([Json(1), Json(2), Json(3)])); assert(parseJsonString("{\"a\": 1}") == Json(["a": Json(1)])); assert(parseJsonString(`"\\\/\b\f\n\r\t\u1234"`).get!string == "\\/\b\f\n\r\t\u1234"); return true; } // Run at compile time and runtime assert(test()); static assert(test()); } @safe unittest { bool test() { try parseJsonString(" \t\n "); catch (Exception e) assert(e.msg.endsWith("JSON string contains only whitespaces.")); try parseJsonString(`{"a": 1`); catch (Exception e) assert(e.msg.endsWith("Missing '}' before EOF.")); try parseJsonString(`{"a": 1 x`); catch (Exception e) assert(e.msg.endsWith("Expected '}' or ',' - got 'x'.")); try parseJsonString(`[1`); catch (Exception e) assert(e.msg.endsWith("Missing ']' before EOF.")); try parseJsonString(`[1 x`); catch (Exception e) assert(e.msg.endsWith("Expected ']' or ',' - got 'x'.")); return true; } // Run at compile time and runtime assert(test()); static assert(test()); } /** Serializes the given value to JSON. The following types of values are supported: $(DL $(DT `Json`) $(DD Used as-is) $(DT `null`) $(DD Converted to `Json.Type.null_`) $(DT `bool`) $(DD Converted to `Json.Type.bool_`) $(DT `float`, `double`) $(DD Converted to `Json.Type.float_`) $(DT `short`, `ushort`, `int`, `uint`, `long`, `ulong`) $(DD Converted to `Json.Type.int_`) $(DT `BigInt`) $(DD Converted to `Json.Type.bigInt`) $(DT `string`) $(DD Converted to `Json.Type.string`) $(DT `T[]`) $(DD Converted to `Json.Type.array`) $(DT `T[string]`) $(DD Converted to `Json.Type.object`) $(DT `struct`) $(DD Converted to `Json.Type.object`) $(DT `class`) $(DD Converted to `Json.Type.object` or `Json.Type.null_`) ) All entries of an array or an associative array, as well as all R/W properties and all public fields of a struct/class are recursively serialized using the same rules. Fields ending with an underscore will have the last underscore stripped in the serialized output. This makes it possible to use fields with D keywords as their name by simply appending an underscore. The following methods can be used to customize the serialization of structs/classes: --- Json toJson() const; static T fromJson(Json src); string toString() const; static T fromString(string src); --- The methods will have to be defined in pairs. The first pair that is implemented by the type will be used for serialization (i.e. `toJson` overrides `toString`). See_Also: `deserializeJson`, `vibe.data.serialization` */ Json serializeToJson(T)(T value) { return serialize!JsonSerializer(value); } /// ditto void serializeToJson(R, T)(R destination, T value) if (isOutputRange!(R, char) || isOutputRange!(R, ubyte)) { serialize!(JsonStringSerializer!R)(value, destination); } /// ditto string serializeToJsonString(T)(T value) { auto ret = appender!string; serializeToJson(ret, value); return ret.data; } /// @safe unittest { struct Foo { int number; string str; } Foo f; f.number = 12; f.str = "hello"; string json = serializeToJsonString(f); assert(json == `{"number":12,"str":"hello"}`); Json jsonval = serializeToJson(f); assert(jsonval.type == Json.Type.object); assert(jsonval["number"] == Json(12)); assert(jsonval["str"] == Json("hello")); } /** Serializes the given value to a pretty printed JSON string. See_also: `serializeToJson`, `vibe.data.serialization` */ void serializeToPrettyJson(R, T)(R destination, T value) if (isOutputRange!(R, char) || isOutputRange!(R, ubyte)) { serialize!(JsonStringSerializer!(R, true))(value, destination); } /// ditto string serializeToPrettyJson(T)(T value) { auto ret = appender!string; serializeToPrettyJson(ret, value); return ret.data; } /// @safe unittest { struct Foo { int number; string str; } Foo f; f.number = 12; f.str = "hello"; string json = serializeToPrettyJson(f); assert(json == `{ "number": 12, "str": "hello" }`); } /** Deserializes a JSON value into the destination variable. The same types as for `serializeToJson()` are supported and handled inversely. See_Also: `serializeToJson`, `serializeToJsonString`, `vibe.data.serialization` */ void deserializeJson(T)(ref T dst, Json src) { dst = deserializeJson!T(src); } /// ditto T deserializeJson(T)(Json src) { return deserialize!(JsonSerializer, T)(src); } /// ditto T deserializeJson(T, R)(R input) if (!is(R == Json) && isInputRange!R) { return deserialize!(JsonStringSerializer!R, T)(input); } /// @safe unittest { struct Foo { int number; string str; } Foo f = deserializeJson!Foo(`{"number": 12, "str": "hello"}`); assert(f.number == 12); assert(f.str == "hello"); } @safe unittest { import std.stdio; enum Foo : string { k = "test" } enum Boo : int { l = 5 } static struct S { float a; double b; bool c; int d; string e; byte f; ubyte g; long h; ulong i; float[] j; Foo k; Boo l; } immutable S t = {1.5, -3.0, true, int.min, "Test", -128, 255, long.min, ulong.max, [1.1, 1.2, 1.3], Foo.k, Boo.l}; S u; deserializeJson(u, serializeToJson(t)); assert(t.a == u.a); assert(t.b == u.b); assert(t.c == u.c); assert(t.d == u.d); assert(t.e == u.e); assert(t.f == u.f); assert(t.g == u.g); assert(t.h == u.h); assert(t.i == u.i); assert(t.j == u.j); assert(t.k == u.k); assert(t.l == u.l); } @safe unittest { assert(uint.max == serializeToJson(uint.max).deserializeJson!uint); assert(ulong.max == serializeToJson(ulong.max).deserializeJson!ulong); } unittest { static struct A { int value; static A fromJson(Json val) @safe { return A(val.get!int); } Json toJson() const @safe { return Json(value); } } static struct C { int value; static C fromString(string val) @safe { return C(val.to!int); } string toString() const @safe { return value.to!string; } } static struct D { int value; } assert(serializeToJson(const A(123)) == Json(123)); assert(serializeToJson(A(123)) == Json(123)); assert(serializeToJson(const C(123)) == Json("123")); assert(serializeToJson(C(123)) == Json("123")); assert(serializeToJson(const D(123)) == serializeToJson(["value": 123])); assert(serializeToJson(D(123)) == serializeToJson(["value": 123])); } unittest { auto d = Date(2001,1,1); deserializeJson(d, serializeToJson(Date.init)); assert(d == Date.init); deserializeJson(d, serializeToJson(Date(2001,1,1))); assert(d == Date(2001,1,1)); struct S { immutable(int)[] x; } S s; deserializeJson(s, serializeToJson(S([1,2,3]))); assert(s == S([1,2,3])); struct T { @optional S s; @optional int i; @optional float f_; // underscore strip feature @optional double d; @optional string str; } auto t = T(S([1,2,3])); deserializeJson(t, parseJsonString(`{ "s" : null, "i" : null, "f" : null, "d" : null, "str" : null }`)); assert(text(t) == text(T())); } unittest { static class C { @safe: int a; private int _b; @property int b() const { return _b; } @property void b(int v) { _b = v; } @property int test() const { return 10; } void test2() {} } C c = new C; c.a = 1; c.b = 2; C d; deserializeJson(d, serializeToJson(c)); assert(c.a == d.a); assert(c.b == d.b); } unittest { static struct C { @safe: int value; static C fromString(string val) { return C(val.to!int); } string toString() const { return value.to!string; } } enum Color { Red, Green, Blue } { static class T { @safe: string[Color] enumIndexedMap; string[C] stringableIndexedMap; this() { enumIndexedMap = [ Color.Red : "magenta", Color.Blue : "deep blue" ]; stringableIndexedMap = [ C(42) : "forty-two" ]; } } T original = new T; original.enumIndexedMap[Color.Green] = "olive"; T other; deserializeJson(other, serializeToJson(original)); assert(serializeToJson(other) == serializeToJson(original)); } { static struct S { string[Color] enumIndexedMap; string[C] stringableIndexedMap; } S *original = new S; original.enumIndexedMap = [ Color.Red : "magenta", Color.Blue : "deep blue" ]; original.enumIndexedMap[Color.Green] = "olive"; original.stringableIndexedMap = [ C(42) : "forty-two" ]; S other; deserializeJson(other, serializeToJson(original)); assert(serializeToJson(other) == serializeToJson(original)); } } unittest { import std.typecons : Nullable; struct S { Nullable!int a, b; } S s; s.a = 2; auto j = serializeToJson(s); assert(j["a"].type == Json.Type.int_); assert(j["b"].type == Json.Type.null_); auto t = deserializeJson!S(j); assert(!t.a.isNull() && t.a == 2); assert(t.b.isNull()); } unittest { // #840 int[2][2] nestedArray = 1; assert(nestedArray.serializeToJson.deserializeJson!(typeof(nestedArray)) == nestedArray); } unittest { // #1109 static class C { @safe: int mem; this(int m) { mem = m; } static C fromJson(Json j) { return new C(j.get!int-1); } Json toJson() const { return Json(mem+1); } } const c = new C(13); assert(serializeToJson(c) == Json(14)); assert(deserializeJson!C(Json(14)).mem == 13); } unittest { // const and mutable json Json j = Json(1); const k = Json(2); assert(serializeToJson(j) == Json(1)); assert(serializeToJson(k) == Json(2)); } unittest { // issue #1660 - deserialize AA whose key type is string-based enum enum Foo: string { Bar = "bar", Buzz = "buzz" } struct S { int[Foo] f; } const s = S([Foo.Bar: 2000]); assert(serializeToJson(s)["f"] == Json([Foo.Bar: Json(2000)])); auto j = Json.emptyObject; j["f"] = [Foo.Bar: Json(2000)]; assert(deserializeJson!S(j).f == [Foo.Bar: 2000]); } /** Serializer for a plain Json representation. See_Also: vibe.data.serialization.serialize, vibe.data.serialization.deserialize, serializeToJson, deserializeJson */ struct JsonSerializer { template isJsonBasicType(T) { enum isJsonBasicType = std.traits.isNumeric!T || isBoolean!T || is(T == string) || is(T == typeof(null)) || isJsonSerializable!T; } template isSupportedValueType(T) { enum isSupportedValueType = isJsonBasicType!T || is(T == Json); } private { Json m_current; Json[] m_compositeStack; } this(Json data) @safe { m_current = data; } @disable this(this); // // serialization // Json getSerializedResult() @safe { return m_current; } void beginWriteDictionary(Traits)() { m_compositeStack ~= Json.emptyObject; } void endWriteDictionary(Traits)() { m_current = m_compositeStack[$-1]; m_compositeStack.length--; } void beginWriteDictionaryEntry(Traits)(string name) {} void endWriteDictionaryEntry(Traits)(string name) { m_compositeStack[$-1][name] = m_current; } void beginWriteArray(Traits)(size_t) { m_compositeStack ~= Json.emptyArray; } void endWriteArray(Traits)() { m_current = m_compositeStack[$-1]; m_compositeStack.length--; } void beginWriteArrayEntry(Traits)(size_t) {} void endWriteArrayEntry(Traits)(size_t) { m_compositeStack[$-1].appendArrayElement(m_current); } void writeValue(Traits, T)(in T value) if (!is(T == Json)) { static if (isJsonSerializable!T) { static if (!__traits(compiles, () @safe { return value.toJson(); } ())) pragma(msg, "Non-@safe toJson/fromJson methods are deprecated - annotate "~T.stringof~".toJson() with @safe."); m_current = () @trusted { return value.toJson(); } (); } else m_current = Json(value); } void writeValue(Traits, T)(Json value) if (is(T == Json)) { m_current = value; } void writeValue(Traits, T)(in Json value) if (is(T == Json)) { m_current = value.clone; } // // deserialization // void readDictionary(Traits)(scope void delegate(string) @safe field_handler) { enforceJson(m_current.type == Json.Type.object, "Expected JSON object, got "~m_current.type.to!string); auto old = m_current; foreach (string key, value; m_current.get!(Json[string])) { m_current = value; field_handler(key); } m_current = old; } void beginReadDictionaryEntry(Traits)(string name) {} void endReadDictionaryEntry(Traits)(string name) {} void readArray(Traits)(scope void delegate(size_t) @safe size_callback, scope void delegate() @safe entry_callback) { enforceJson(m_current.type == Json.Type.array, "Expected JSON array, got "~m_current.type.to!string); auto old = m_current; size_callback(m_current.length); foreach (ent; old.get!(Json[])) { m_current = ent; entry_callback(); } m_current = old; } void beginReadArrayEntry(Traits)(size_t index) {} void endReadArrayEntry(Traits)(size_t index) {} T readValue(Traits, T)() @safe { static if (is(T == Json)) return m_current; else static if (isJsonSerializable!T) { static if (!__traits(compiles, () @safe { return T.fromJson(m_current); } ())) pragma(msg, "Non-@safe toJson/fromJson methods are deprecated - annotate "~T.stringof~".fromJson() with @safe."); return () @trusted { return T.fromJson(m_current); } (); } else static if (is(T == float) || is(T == double)) { switch (m_current.type) { default: return cast(T)m_current.get!long; case Json.Type.null_: goto case; case Json.Type.undefined: return T.nan; case Json.Type.float_: return cast(T)m_current.get!double; case Json.Type.bigInt: return cast(T)m_current.bigIntToLong(); } } else { return m_current.get!T(); } } bool tryReadNull(Traits)() { return m_current.type == Json.Type.null_; } } /** Serializer for a range based plain JSON string representation. See_Also: vibe.data.serialization.serialize, vibe.data.serialization.deserialize, serializeToJson, deserializeJson */ struct JsonStringSerializer(R, bool pretty = false) if (isInputRange!R || isOutputRange!(R, char)) { private { R m_range; size_t m_level = 0; } template isJsonBasicType(T) { enum isJsonBasicType = std.traits.isNumeric!T || isBoolean!T || is(T == string) || is(T == typeof(null)) || isJsonSerializable!T; } template isSupportedValueType(T) { enum isSupportedValueType = isJsonBasicType!T || is(T == Json); } this(R range) { m_range = range; } @disable this(this); // // serialization // static if (isOutputRange!(R, char)) { private { bool m_firstInComposite; } void getSerializedResult() {} void beginWriteDictionary(Traits)() { startComposite(); m_range.put('{'); } void endWriteDictionary(Traits)() { endComposite(); m_range.put("}"); } void beginWriteDictionaryEntry(Traits)(string name) { startCompositeEntry(); m_range.put('"'); m_range.jsonEscape(name); static if (pretty) m_range.put(`": `); else m_range.put(`":`); } void endWriteDictionaryEntry(Traits)(string name) {} void beginWriteArray(Traits)(size_t) { startComposite(); m_range.put('['); } void endWriteArray(Traits)() { endComposite(); m_range.put(']'); } void beginWriteArrayEntry(Traits)(size_t) { startCompositeEntry(); } void endWriteArrayEntry(Traits)(size_t) {} void writeValue(Traits, T)(in T value) { static if (is(T == typeof(null))) m_range.put("null"); else static if (is(T == bool)) m_range.put(value ? "true" : "false"); else static if (is(T : long)) m_range.formattedWrite("%s", value); else static if (is(T == BigInt)) () @trusted { m_range.formattedWrite("%d", value); } (); else static if (is(T : real)) value == value ? m_range.formattedWrite("%.16g", value) : m_range.put("null"); else static if (is(T == string)) { m_range.put('"'); m_range.jsonEscape(value); m_range.put('"'); } else static if (is(T == Json)) m_range.writeJsonString(value); else static if (isJsonSerializable!T) { static if (!__traits(compiles, () @safe { return value.toJson(); } ())) pragma(msg, "Non-@safe toJson/fromJson methods are deprecated - annotate "~T.stringof~".toJson() with @safe."); m_range.writeJsonString!(R, pretty)(() @trusted { return value.toJson(); } (), m_level); } else static assert(false, "Unsupported type: " ~ T.stringof); } private void startComposite() { static if (pretty) m_level++; m_firstInComposite = true; } private void startCompositeEntry() { if (!m_firstInComposite) { m_range.put(','); } else { m_firstInComposite = false; } static if (pretty) indent(); } private void endComposite() { static if (pretty) { m_level--; if (!m_firstInComposite) indent(); } m_firstInComposite = false; } private void indent() { m_range.put('\n'); foreach (i; 0 .. m_level) m_range.put('\t'); } } // // deserialization // static if (isInputRange!(R)) { private { int m_line = 0; } void readDictionary(Traits)(scope void delegate(string) @safe entry_callback) { m_range.skipWhitespace(&m_line); enforceJson(!m_range.empty && m_range.front == '{', "Expecting object."); m_range.popFront(); bool first = true; while(true) { m_range.skipWhitespace(&m_line); enforceJson(!m_range.empty, "Missing '}'."); if (m_range.front == '}') { m_range.popFront(); break; } else if (!first) { enforceJson(m_range.front == ',', "Expecting ',' or '}', not '"~m_range.front.to!string~"'."); m_range.popFront(); m_range.skipWhitespace(&m_line); } else first = false; auto name = m_range.skipJsonString(&m_line); m_range.skipWhitespace(&m_line); enforceJson(!m_range.empty && m_range.front == ':', "Expecting ':', not '"~m_range.front.to!string~"'."); m_range.popFront(); entry_callback(name); } } void beginReadDictionaryEntry(Traits)(string name) {} void endReadDictionaryEntry(Traits)(string name) {} void readArray(Traits)(scope void delegate(size_t) @safe size_callback, scope void delegate() @safe entry_callback) { m_range.skipWhitespace(&m_line); enforceJson(!m_range.empty && m_range.front == '[', "Expecting array."); m_range.popFront(); bool first = true; while(true) { m_range.skipWhitespace(&m_line); enforceJson(!m_range.empty, "Missing ']'."); if (m_range.front == ']') { m_range.popFront(); break; } else if (!first) { enforceJson(m_range.front == ',', "Expecting ',' or ']'."); m_range.popFront(); } else first = false; entry_callback(); } } void beginReadArrayEntry(Traits)(size_t index) {} void endReadArrayEntry(Traits)(size_t index) {} T readValue(Traits, T)() { m_range.skipWhitespace(&m_line); static if (is(T == typeof(null))) { enforceJson(m_range.take(4).equal("null"), "Expecting 'null'."); return null; } else static if (is(T == bool)) { bool ret = m_range.front == 't'; string expected = ret ? "true" : "false"; foreach (ch; expected) { enforceJson(m_range.front == ch, "Expecting 'true' or 'false'."); m_range.popFront(); } return ret; } else static if (is(T : long)) { bool is_float; bool is_long_overflow; auto num = m_range.skipNumber(is_float, is_long_overflow); enforceJson(!is_float, "Expecting integer number."); enforceJson(!is_long_overflow, num.to!string~" is too big for long."); return to!T(num); } else static if (is(T : BigInt)) { bool is_float; bool is_long_overflow; auto num = m_range.skipNumber(is_float, is_long_overflow); enforceJson(!is_float, "Expecting integer number."); return BigInt(num); } else static if (is(T : real)) { bool is_float; bool is_long_overflow; auto num = m_range.skipNumber(is_float, is_long_overflow); return to!T(num); } else static if (is(T == string)) return m_range.skipJsonString(&m_line); else static if (is(T == Json)) return m_range.parseJson(&m_line); else static if (isJsonSerializable!T) { static if (!__traits(compiles, () @safe { return T.fromJson(Json.init); } ())) pragma(msg, "Non-@safe toJson/fromJson methods are deprecated - annotate "~T.stringof~".fromJson() with @safe."); return () @trusted { return T.fromJson(m_range.parseJson(&m_line)); } (); } else static assert(false, "Unsupported type: " ~ T.stringof); } bool tryReadNull(Traits)() { m_range.skipWhitespace(&m_line); if (m_range.front != 'n') return false; foreach (ch; "null") { enforceJson(m_range.front == ch, "Expecting 'null'."); m_range.popFront(); } assert(m_range.empty || m_range.front != 'l'); return true; } } } unittest { assert(serializeToJsonString(double.nan) == "null"); assert(serializeToJsonString(Json()) == "null"); assert(serializeToJsonString(Json(["bar":Json("baz"),"foo":Json()])) == `{"bar":"baz"}`); struct Foo{Json bar = Json();} Foo f; assert(serializeToJsonString(f) == `{"bar":null}`); } /** Writes the given JSON object as a JSON string into the destination range. This function will convert the given JSON value to a string without adding any white space between tokens (no newlines, no indentation and no padding). The output size is thus minimized, at the cost of bad human readability. Params: dst = References the string output range to which the result is written. json = Specifies the JSON value that is to be stringified. See_Also: Json.toString, writePrettyJsonString */ void writeJsonString(R, bool pretty = false)(ref R dst, in Json json, size_t level = 0) @safe // if( isOutputRange!R && is(ElementEncodingType!R == char) ) { final switch( json.type ){ case Json.Type.undefined: dst.put("null"); break; case Json.Type.null_: dst.put("null"); break; case Json.Type.bool_: dst.put(json.get!bool ? "true" : "false"); break; case Json.Type.int_: formattedWrite(dst, "%d", json.get!long); break; case Json.Type.bigInt: () @trusted { formattedWrite(dst, "%d", json.get!BigInt); } (); break; case Json.Type.float_: auto d = json.get!double; if (d != d) dst.put("null"); // JSON has no NaN value so set null else formattedWrite(dst, "%.16g", json.get!double); break; case Json.Type.string: dst.put('\"'); jsonEscape(dst, json.get!string); dst.put('\"'); break; case Json.Type.array: dst.put('['); bool first = true; foreach (ref const Json e; json.byValue) { if( !first ) dst.put(","); first = false; static if (pretty) { dst.put('\n'); foreach (tab; 0 .. level+1) dst.put('\t'); } if (e.type == Json.Type.undefined) dst.put("null"); else writeJsonString!(R, pretty)(dst, e, level+1); } static if (pretty) { if (json.length > 0) { dst.put('\n'); foreach (tab; 0 .. level) dst.put('\t'); } } dst.put(']'); break; case Json.Type.object: dst.put('{'); bool first = true; foreach (string k, ref const Json e; json.byKeyValue) { if( e.type == Json.Type.undefined ) continue; if( !first ) dst.put(','); first = false; static if (pretty) { dst.put('\n'); foreach (tab; 0 .. level+1) dst.put('\t'); } dst.put('\"'); jsonEscape(dst, k); dst.put(pretty ? `": ` : `":`); writeJsonString!(R, pretty)(dst, e, level+1); } static if (pretty) { if (json.length > 0) { dst.put('\n'); foreach (tab; 0 .. level) dst.put('\t'); } } dst.put('}'); break; } } unittest { auto a = Json.emptyObject; a["a"] = Json.emptyArray; a["b"] = Json.emptyArray; a["b"] ~= Json(1); a["b"] ~= Json.emptyObject; assert(a.toString() == `{"a":[],"b":[1,{}]}` || a.toString() == `{"b":[1,{}],"a":[]}`); assert(a.toPrettyString() == `{ "a": [], "b": [ 1, {} ] }` || a.toPrettyString() == `{ "b": [ 1, {} ], "a": [] }`); } unittest { // #735 auto a = Json.emptyArray; a ~= "a"; a ~= Json(); a ~= "b"; a ~= null; a ~= "c"; assert(a.toString() == `["a",null,"b",null,"c"]`); } unittest { auto a = Json.emptyArray; a ~= Json(1); a ~= Json(2); a ~= Json(3); a ~= Json(4); a ~= Json(5); auto b = Json(a[0..a.length]); assert(a == b); auto c = Json(a[0..$]); assert(a == c); assert(b == c); auto d = [Json(1),Json(2),Json(3)]; assert(d == a[0..a.length-2]); assert(d == a[0..$-2]); } unittest { auto j = Json(double.init); assert(j.toString == "null"); // A double nan should serialize to null j = 17.04f; assert(j.toString == "17.04"); // A proper double should serialize correctly double d; deserializeJson(d, Json.undefined); // Json.undefined should deserialize to nan assert(d != d); deserializeJson(d, Json(null)); // Json.undefined should deserialize to nan assert(d != d); } /** Writes the given JSON object as a prettified JSON string into the destination range. The output will contain newlines and indents to make the output human readable. Params: dst = References the string output range to which the result is written. json = Specifies the JSON value that is to be stringified. level = Specifies the base amount of indentation for the output. Indentation is always done using tab characters. See_Also: Json.toPrettyString, writeJsonString */ void writePrettyJsonString(R)(ref R dst, in Json json, int level = 0) // if( isOutputRange!R && is(ElementEncodingType!R == char) ) { writeJsonString!(R, true)(dst, json, level); } /** Helper function that escapes all Unicode characters in a JSON string. */ string convertJsonToASCII(string json) { auto ret = appender!string; jsonEscape!true(ret, json); return ret.data; } /// private private void jsonEscape(bool escape_unicode = false, R)(ref R dst, string s) { char lastch; for (size_t pos = 0; pos < s.length; pos++) { immutable(char) ch = s[pos]; switch (ch) { default: static if (escape_unicode) { if (ch > 0x20 && ch < 0x80) dst.put(ch); else { import std.utf : decode; int len; dchar codepoint = decode(s, pos); /* codepoint is in BMP */ if(codepoint < 0x10000) { dst.formattedWrite("\\u%04X", codepoint); } /* not in BMP -> construct a UTF-16 surrogate pair */ else { int first, last; codepoint -= 0x10000; first = 0xD800 | ((codepoint & 0xffc00) >> 10); last = 0xDC00 | (codepoint & 0x003ff); dst.formattedWrite("\\u%04X\\u%04X", first, last); } pos -= 1; } } else { if (ch < 0x20) dst.formattedWrite("\\u%04X", ch); else dst.put(ch); } break; case '\\': dst.put("\\\\"); break; case '\r': dst.put("\\r"); break; case '\n': dst.put("\\n"); break; case '\t': dst.put("\\t"); break; case '\"': dst.put("\\\""); break; case '/': // this avoids the sequence "= '0' && dc <= '9' ) uch += dc - '0'; else if( dc >= 'a' && dc <= 'f' ) uch += dc - 'a' + 10; else if( dc >= 'A' && dc <= 'F' ) uch += dc - 'A' + 10; else enforceJson(false, "Unicode sequence must be '\\uXXXX'."); } return uch; } auto uch = decode_unicode_escape(); if(0xD800 <= uch && uch <= 0xDBFF) { /* surrogate pair */ range.popFront(); // backslash '\' auto uch2 = decode_unicode_escape(); enforceJson(0xDC00 <= uch2 && uch2 <= 0xDFFF, "invalid Unicode"); { /* valid second surrogate */ uch = ((uch - 0xD800) << 10) + (uch2 - 0xDC00) + 0x10000; } } ret.put(uch); break; } break; default: ret.put(ch); range.popFront(); break; } } return ret.data; } private auto skipNumber(R)(ref R s, out bool is_float, out bool is_long_overflow) @safe if (isNarrowString!R) { auto r = s.representation; version (assert) auto rEnd = (() @trusted => r.ptr + r.length - 1)(); auto res = skipNumber(r, is_float, is_long_overflow); version (assert) assert(rEnd == (() @trusted => r.ptr + r.length - 1)()); // check nothing taken off the end s = s[$ - r.length .. $]; return res.assumeUTF(); } /// private private auto skipNumber(R)(ref R s, out bool is_float, out bool is_long_overflow) if (!isNarrowString!R && isForwardRange!R) { pragma(msg, R); auto sOrig = s.save; size_t idx = 0; is_float = false; is_long_overflow = false; ulong int_part = 0; if (s.front == '-') { s.popFront(); ++idx; } if (s.front == '0') { s.popFront(); ++idx; } else { enforceJson(isDigit(s.front), "Digit expected at beginning of number."); int_part = s.front - '0'; s.popFront(); ++idx; while( !s.empty && isDigit(s.front) ) { if (!is_long_overflow) { auto dig = s.front - '0'; if ((long.max / 10) > int_part || ((long.max / 10) == int_part && (long.max % 10) >= dig)) { int_part *= 10; int_part += dig; } else { is_long_overflow = true; } } s.popFront(); ++idx; } } if( !s.empty && s.front == '.' ) { s.popFront(); ++idx; is_float = true; while( !s.empty && isDigit(s.front) ) { s.popFront(); ++idx; } } if( !s.empty && (s.front == 'e' || s.front == 'E') ) { s.popFront(); ++idx; is_float = true; if( !s.empty && (s.front == '+' || s.front == '-') ) { s.popFront(); ++idx; } enforceJson( !s.empty && isDigit(s.front), "Expected exponent." ~ sOrig.takeExactly(idx).to!string); s.popFront(); ++idx; while( !s.empty && isDigit(s.front) ) { s.popFront(); ++idx; } } return sOrig.takeExactly(idx); } unittest { import std.meta : AliasSeq; // test for string and for a simple range foreach (foo; AliasSeq!(to!string, map!"a")) { auto test_1 = foo("9223372036854775806"); // lower then long.max auto test_2 = foo("9223372036854775807"); // long.max auto test_3 = foo("9223372036854775808"); // greater then long.max bool is_float; bool is_long_overflow; test_1.skipNumber(is_float, is_long_overflow); assert(!is_long_overflow); test_2.skipNumber(is_float, is_long_overflow); assert(!is_long_overflow); test_3.skipNumber(is_float, is_long_overflow); assert(is_long_overflow); } } /// private private string skipJsonString(R)(ref R s, int* line = null) { // TODO: count or disallow any newlines inside of the string enforceJson(!s.empty && s.front == '"', "Expected '\"' to start string."); s.popFront(); string ret = jsonUnescape(s); enforceJson(!s.empty && s.front == '"', "Expected '\"' to terminate string."); s.popFront(); return ret; } /// private private void skipWhitespace(R)(ref R s, int* line = null) { while (!s.empty) { switch (s.front) { default: return; case ' ', '\t': s.popFront(); break; case '\n': s.popFront(); if (!s.empty && s.front == '\r') s.popFront(); if (line) (*line)++; break; case '\r': s.popFront(); if (!s.empty && s.front == '\n') s.popFront(); if (line) (*line)++; break; } } } private bool isDigit(dchar ch) @safe nothrow pure { return ch >= '0' && ch <= '9'; } private string underscoreStrip(string field_name) @safe nothrow pure { if( field_name.length < 1 || field_name[$-1] != '_' ) return field_name; else return field_name[0 .. $-1]; } /// private package template isJsonSerializable(T) { enum isJsonSerializable = is(typeof(T.init.toJson()) == Json) && is(typeof(T.fromJson(Json())) == T); } private void enforceJson(string file = __FILE__, size_t line = __LINE__)(bool cond, lazy string message = "JSON exception") { enforceEx!JSONException(cond, message, file, line); } private void enforceJson(string file = __FILE__, size_t line = __LINE__)(bool cond, lazy string message, string err_file, int err_line) { enforceEx!JSONException(cond, format("%s(%s): Error: %s", err_file, err_line+1, message), file, line); } private void enforceJson(string file = __FILE__, size_t line = __LINE__)(bool cond, lazy string message, string err_file, int* err_line) { enforceJson!(file, line)(cond, message, err_file, err_line ? *err_line : -1); } private auto trustedRange(R)(R range) { static struct Rng { private R range; @property bool empty() @trusted { return range.empty; } @property auto front() @trusted { return range.front; } void popFront() @trusted { range.popFront(); } } return Rng(range); } // test for vibe.utils.DictionaryList @safe unittest { import vibe.utils.dictionarylist; static assert(isCustomSerializable!(DictionaryList!int)); DictionaryList!(int, false) b; b.addField("a", 1); b.addField("A", 2); auto app = appender!string(); serializeToJson(app, b); assert(app.data == `[{"key":"a","value":1},{"key":"A","value":2}]`, app.data); DictionaryList!(int, true, 2) c; c.addField("a", 1); c.addField("b", 2); c.addField("a", 3); c.remove("b"); auto appc = appender!string(); serializeToJson(appc, c); assert(appc.data == `[{"key":"a","value":1},{"key":"a","value":3}]`, appc.data); } // make sure Json is usable for CTFE @safe unittest { static assert(is(typeof({ struct Test { Json object_ = Json.emptyObject; Json array = Json.emptyArray; } })), "CTFE for Json type failed."); static Json test() { Json j; j = Json(42); j = Json([Json(true)]); j = Json(["foo": Json(null)]); j = Json("foo"); return j; } enum j = test(); static assert(j == Json("foo")); } @safe unittest { // XSS prevention assert(Json("some/path").toString() == `"<\/script>some/path"`); assert(serializeToJsonString("some/path") == `"<\/script>some/path"`); } @system unittest { // Recursive structures static struct Bar { Bar[] foos; int i; } auto b = deserializeJson!Bar(`{"i":1,"foos":[{"foos":[],"i":2}]}`); assert(b.i == 1); assert(b.foos.length == 1); assert(b.foos[0].i == 2); assert(b.foos[0].foos.length == 0); } vibe.d-0.8.2/data/vibe/data/serialization.d000066400000000000000000001677751324361747700205260ustar00rootroot00000000000000/** Generic serialization framework. This module provides general means for implementing (de-)serialization with a standardized behavior. Supported_types: The following rules are applied in order when serializing or deserializing a certain type: $(OL $(LI An `enum` type is serialized as its raw value, except if `@byName` is used, in which case the name of the enum value is serialized.) $(LI Any type that is specifically supported by the serializer is directly serialized. For example, the BSON serializer supports `BsonObjectID` directly.) $(LI Arrays and tuples (`std.typecons.Tuple`) are serialized using the array serialization functions where each element is serialized again according to these rules.) $(LI Associative arrays are serialized similar to arrays. The key type of the AA must satisfy the `isStringSerializable` trait and will always be serialized as a string.) $(LI Any `Nullable!T` will be serialized as either `null`, or as the contained value (subject to these rules again).) $(LI Any `Typedef!T` will be serialized as if it were just `T`.) $(LI Any `BitFlags!T` value will be serialized as `T[]`) $(LI Types satisfying the `isPolicySerializable` trait for the supplied `Policy` will be serialized as the value returned by the policy `toRepresentation` function (again subject to these rules).) $(LI Types satisfying the `isCustomSerializable` trait will be serialized as the value returned by their `toRepresentation` method (again subject to these rules).) $(LI Types satisfying the `isISOExtStringSerializable` trait will be serialized as a string, as returned by their `toISOExtString` method. This causes types such as `SysTime` to be serialized as strings.) $(LI Types satisfying the `isStringSerializable` trait will be serialized as a string, as returned by their `toString` method.) $(LI Struct and class types by default will be serialized as associative arrays, where the key is the name of the corresponding field (can be overridden using the `@name` attribute). If the struct/class is annotated with `@asArray`, it will instead be serialized as a flat array of values in the order of declaration. Null class references will be serialized as `null`.) $(LI Pointer types will be serialized as either `null`, or as the value they point to.) $(LI Built-in integers and floating point values, as well as boolean values will be converted to strings, if the serializer doesn't support them directly.) ) Note that no aliasing detection is performed, so that pointers, class references and arrays referencing the same memory will be serialized as multiple copies. When in turn deserializing the data, they will also end up as separate copies in memory. Field_names: By default, the field name of the serialized D type (for `struct` and `class` aggregates) is represented as-is in the serialized result. To circumvent name clashes with D's keywords, a single trailing underscore of any field name is stipped, so that a field name of `version_` results in just `"version"` as the serialized value. Names can also be freely customized using the `@name` annotation. Associative array keys are always represented using their direct string representation. Serializer_implementation: Serializers are implemented in terms of a struct with template methods that get called by the serialization framework: --- struct ExampleSerializer { enum isSupportedValueType(T) = is(T == string) || is(T == typeof(null)); // serialization auto getSerializedResult(); void beginWriteDocument(TypeTraits)(); void endWriteDocument(TypeTraits)(); void beginWriteDictionary(TypeTraits)(); void endWriteDictionary(TypeTraits)(); void beginWriteDictionaryEntry(ElementTypeTraits)(string name); void endWriteDictionaryEntry(ElementTypeTraits)(string name); void beginWriteArray(TypeTraits)(size_t length); void endWriteArray(TypeTraits)(); void beginWriteArrayEntry(ElementTypeTraits)(size_t index); void endWriteArrayEntry(ElementTypeTraits)(size_t index); void writeValue(TypeTraits, T)(T value); // deserialization void readDictionary(TypeTraits)(scope void delegate(string) entry_callback); void beginReadDictionaryEntry(ElementTypeTraits)(string); void endReadDictionaryEntry(ElementTypeTraits)(string); void readArray(TypeTraits)(scope void delegate(size_t) size_callback, scope void delegate() entry_callback); void beginReadArrayEntry(ElementTypeTraits)(size_t index); void endReadArrayEntry(ElementTypeTraits)(size_t index); T readValue(TypeTraits, T)(); bool tryReadNull(TypeTraits)(); } --- The `TypeTraits` type passed to the individual methods has the following members: $(UL $(LI `Type`: The original type of the field to serialize) $(LI `Attributes`: User defined attributes attached to the field) $(LI `Policy`: An alias to the policy used for the serialization process) ) `ElementTypeTraits` have the following additional members: $(UL $(LI `ContainerType`: The original type of the enclosing container type) $(LI `ContainerAttributes`: User defined attributes attached to the enclosing container) ) Copyright: © 2013-2016 rejectedsoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.data.serialization; import vibe.internal.meta.traits; import vibe.internal.meta.uda; import std.array : Appender, appender; import std.conv : to; import std.exception : enforce; import std.traits; import std.typetuple; /** Serializes a value with the given serializer. The serializer must have a value result for the first form to work. Otherwise, use the range based form. See_Also: `vibe.data.json.JsonSerializer`, `vibe.data.json.JsonStringSerializer`, `vibe.data.bson.BsonSerializer` */ auto serialize(Serializer, T, ARGS...)(T value, ARGS args) { auto serializer = Serializer(args); serialize(serializer, value); return serializer.getSerializedResult(); } /// ditto void serialize(Serializer, T)(ref Serializer serializer, T value) { serializeWithPolicy!(Serializer, DefaultPolicy)(serializer, value); } /** Note that there is a convenience function `vibe.data.json.serializeToJson` that can be used instead of manually invoking `serialize`. */ unittest { import vibe.data.json; struct Test { int value; string text; } Test test; test.value = 12; test.text = "Hello"; Json serialized = serialize!JsonSerializer(test); assert(serialized["value"].get!int == 12); assert(serialized["text"].get!string == "Hello"); } unittest { import vibe.data.json; // Make sure that immutable(char[]) works just like string // (i.e., immutable(char)[]). immutable key = "answer"; auto ints = [key: 42]; auto serialized = serialize!JsonSerializer(ints); assert(serialized[key].get!int == 42); } /** Serializes a value with the given serializer, representing values according to `Policy` when possible. The serializer must have a value result for the first form to work. Otherwise, use the range based form. See_Also: `vibe.data.json.JsonSerializer`, `vibe.data.json.JsonStringSerializer`, `vibe.data.bson.BsonSerializer` */ auto serializeWithPolicy(Serializer, alias Policy, T, ARGS...)(T value, ARGS args) { auto serializer = Serializer(args); serializeWithPolicy!(Serializer, Policy)(serializer, value); return serializer.getSerializedResult(); } /// ditto void serializeWithPolicy(Serializer, alias Policy, T)(ref Serializer serializer, T value) { static if (is(typeof(serializer.beginWriteDocument!T()))) serializer.beginWriteDocument!T(); serializeValueImpl!(Serializer, Policy).serializeValue!T(serializer, value); static if (is(typeof(serializer.endWriteDocument!T()))) serializer.endWriteDocument!T(); } /// version (unittest) { } /// unittest { import vibe.data.json; template SizePol(T) if (__traits(allMembers, T) == TypeTuple!("x", "y")) { import std.conv; import std.array; static string toRepresentation(T value) @safe { return to!string(value.x) ~ "x" ~ to!string(value.y); } static T fromRepresentation(string value) { string[] fields = value.split('x'); alias fieldT = typeof(T.x); auto x = to!fieldT(fields[0]); auto y = to!fieldT(fields[1]); return T(x, y); } } static struct SizeI { int x; int y; } SizeI sizeI = SizeI(1,2); Json serializedI = serializeWithPolicy!(JsonSerializer, SizePol)(sizeI); assert(serializedI.get!string == "1x2"); static struct SizeF { float x; float y; } SizeF sizeF = SizeF(0.1f,0.2f); Json serializedF = serializeWithPolicy!(JsonSerializer, SizePol)(sizeF); assert(serializedF.get!string == "0.1x0.2"); } /** Deserializes and returns a serialized value. serialized_data can be either an input range or a value containing the serialized data, depending on the type of serializer used. See_Also: `vibe.data.json.JsonSerializer`, `vibe.data.json.JsonStringSerializer`, `vibe.data.bson.BsonSerializer` */ T deserialize(Serializer, T, ARGS...)(ARGS args) { return deserializeWithPolicy!(Serializer, DefaultPolicy, T)(args); } /** Note that there is a convenience function `vibe.data.json.deserializeJson` that can be used instead of manually invoking `deserialize`. */ unittest { import vibe.data.json; struct Test { int value; string text; } Json serialized = Json.emptyObject; serialized["value"] = 12; serialized["text"] = "Hello"; Test test = deserialize!(JsonSerializer, Test)(serialized); assert(test.value == 12); assert(test.text == "Hello"); } /** Deserializes and returns a serialized value, interpreting values according to `Policy` when possible. serialized_data can be either an input range or a value containing the serialized data, depending on the type of serializer used. See_Also: `vibe.data.json.JsonSerializer`, `vibe.data.json.JsonStringSerializer`, `vibe.data.bson.BsonSerializer` */ T deserializeWithPolicy(Serializer, alias Policy, T, ARGS...)(ARGS args) { auto deserializer = Serializer(args); return deserializeValueImpl!(Serializer, Policy).deserializeValue!T(deserializer); } /// unittest { import vibe.data.json; template SizePol(T) if (__traits(allMembers, T) == TypeTuple!("x", "y")) { import std.conv; import std.array; static string toRepresentation(T value) @safe { return to!string(value.x) ~ "x" ~ to!string(value.y); } static T fromRepresentation(string value) @safe { string[] fields = value.split('x'); alias fieldT = typeof(T.x); auto x = to!fieldT(fields[0]); auto y = to!fieldT(fields[1]); return T(x, y); } } static struct SizeI { int x; int y; } Json serializedI = "1x2"; SizeI sizeI = deserializeWithPolicy!(JsonSerializer, SizePol, SizeI)(serializedI); assert(sizeI.x == 1); assert(sizeI.y == 2); static struct SizeF { float x; float y; } Json serializedF = "0.1x0.2"; SizeF sizeF = deserializeWithPolicy!(JsonSerializer, SizePol, SizeF)(serializedF); assert(sizeF.x == 0.1f); assert(sizeF.y == 0.2f); } private template serializeValueImpl(Serializer, alias Policy) { alias _Policy = Policy; static assert(Serializer.isSupportedValueType!string, "All serializers must support string values."); static assert(Serializer.isSupportedValueType!(typeof(null)), "All serializers must support null values."); // work around https://issues.dlang.org/show_bug.cgi?id=16528 static if (isSafeSerializer!Serializer) { void serializeValue(T, ATTRIBUTES...)(ref Serializer ser, T value) @safe { serializeValueDeduced!(T, ATTRIBUTES)(ser, value); } } else { void serializeValue(T, ATTRIBUTES...)(ref Serializer ser, T value) { serializeValueDeduced!(T, ATTRIBUTES)(ser, value); } } private void serializeValueDeduced(T, ATTRIBUTES...)(ref Serializer ser, T value) { import std.typecons : BitFlags, Nullable, Tuple, Typedef, TypedefType, tuple; alias TU = Unqual!T; alias Traits = .Traits!(TU, _Policy, ATTRIBUTES); static if (isPolicySerializable!(Policy, TU)) { alias CustomType = typeof(Policy!TU.toRepresentation(TU.init)); ser.serializeValue!(CustomType, ATTRIBUTES)(Policy!TU.toRepresentation(value)); } else static if (is(TU == enum)) { static if (hasPolicyAttributeL!(ByNameAttribute, Policy, ATTRIBUTES)) { ser.serializeValue!(string)(value.to!string()); } else { ser.serializeValue!(OriginalType!TU)(cast(OriginalType!TU)value); } } else static if (Serializer.isSupportedValueType!TU) { static if (is(TU == typeof(null))) ser.writeValue!Traits(null); else ser.writeValue!(Traits, TU)(value); } else static if (/*isInstanceOf!(Tuple, TU)*/is(T == Tuple!TPS, TPS...)) { import std.algorithm.searching: all; static if (all!"!a.empty"([TU.fieldNames]) && !hasPolicyAttributeL!(AsArrayAttribute, Policy, ATTRIBUTES)) { static if (__traits(compiles, ser.beginWriteDictionary!TU(0))) { auto nfields = value.length; ser.beginWriteDictionary!Traits(nfields); } else { ser.beginWriteDictionary!Traits(); } foreach (i, TV; TU.Types) { alias STraits = SubTraits!(Traits, TV); ser.beginWriteDictionaryEntry!STraits(underscoreStrip(TU.fieldNames[i])); ser.serializeValue!(TV, ATTRIBUTES)(value[i]); ser.endWriteDictionaryEntry!STraits(underscoreStrip(TU.fieldNames[i])); } static if (__traits(compiles, ser.endWriteDictionary!TU(0))) { ser.endWriteDictionary!Traits(nfields); } else { ser.endWriteDictionary!Traits(); } } else static if (TU.Types.length == 1) { ser.serializeValue!(typeof(value[0]), ATTRIBUTES)(value[0]); } else { ser.beginWriteArray!Traits(value.length); foreach (i, TV; T.Types) { alias STraits = SubTraits!(Traits, TV); ser.beginWriteArrayEntry!STraits(i); ser.serializeValue!(TV, ATTRIBUTES)(value[i]); ser.endWriteArrayEntry!STraits(i); } ser.endWriteArray!Traits(); } } else static if (isArray!TU) { alias TV = typeof(value[0]); alias STraits = SubTraits!(Traits, TV); ser.beginWriteArray!Traits(value.length); foreach (i, ref el; value) { ser.beginWriteArrayEntry!STraits(i); ser.serializeValue!(TV, ATTRIBUTES)(el); ser.endWriteArrayEntry!STraits(i); } ser.endWriteArray!Traits(); } else static if (isAssociativeArray!TU) { alias TK = KeyType!TU; alias TV = ValueType!TU; alias STraits = SubTraits!(Traits, TV); static if (__traits(compiles, ser.beginWriteDictionary!TU(0))) { auto nfields = value.length; ser.beginWriteDictionary!Traits(nfields); } else { ser.beginWriteDictionary!Traits(); } foreach (key, ref el; value) { string keyname; static if (is(TK : string)) keyname = key; else static if (is(TK : real) || is(TK : long) || is(TK == enum)) keyname = key.to!string; else static if (isStringSerializable!TK) keyname = key.toString(); else static assert(false, "Associative array keys must be strings, numbers, enums, or have toString/fromString methods."); ser.beginWriteDictionaryEntry!STraits(keyname); ser.serializeValue!(TV, ATTRIBUTES)(el); ser.endWriteDictionaryEntry!STraits(keyname); } static if (__traits(compiles, ser.endWriteDictionary!TU(0))) { ser.endWriteDictionary!Traits(nfields); } else { ser.endWriteDictionary!Traits(); } } else static if (/*isInstanceOf!(Nullable, TU)*/is(T == Nullable!TPS, TPS...)) { if (value.isNull()) ser.serializeValue!(typeof(null))(null); else ser.serializeValue!(typeof(value.get()), ATTRIBUTES)(value.get()); } else static if (isInstanceOf!(Typedef, TU)) { ser.serializeValue!(TypedefType!TU, ATTRIBUTES)(cast(TypedefType!TU)value); } else static if (is(TU == BitFlags!E, E)) { alias STraits = SubTraits!(Traits, E); size_t cnt = 0; foreach (v; EnumMembers!E) if (value & v) cnt++; ser.beginWriteArray!Traits(cnt); cnt = 0; foreach (v; EnumMembers!E) if (value & v) { ser.beginWriteArrayEntry!STraits(cnt); ser.serializeValue!(E, ATTRIBUTES)(v); ser.endWriteArrayEntry!STraits(cnt); cnt++; } ser.endWriteArray!Traits(); } else static if (isCustomSerializable!TU) { alias CustomType = typeof(T.init.toRepresentation()); ser.serializeValue!(CustomType, ATTRIBUTES)(value.toRepresentation()); } else static if (isISOExtStringSerializable!TU) { ser.serializeValue!(string, ATTRIBUTES)(value.toISOExtString()); } else static if (isStringSerializable!TU) { ser.serializeValue!(string, ATTRIBUTES)(value.toString()); } else static if (is(TU == struct) || is(TU == class)) { static if (!hasSerializableFields!(TU, Policy)) pragma(msg, "Serializing composite type "~T.stringof~" which has no serializable fields"); static if (is(TU == class)) { if (value is null) { ser.serializeValue!(typeof(null))(null); return; } } static if (hasPolicyAttributeL!(AsArrayAttribute, Policy, ATTRIBUTES)) { enum nfields = getExpandedFieldCount!(TU, SerializableFields!(TU, Policy)); ser.beginWriteArray!Traits(nfields); size_t fcount = 0; foreach (mname; SerializableFields!(TU, Policy)) { alias TMS = TypeTuple!(typeof(__traits(getMember, value, mname))); foreach (j, TM; TMS) { alias TA = TypeTuple!(__traits(getAttributes, TypeTuple!(__traits(getMember, T, mname))[j])); alias STraits = SubTraits!(Traits, TM, TA); ser.beginWriteArrayEntry!STraits(fcount); ser.serializeValue!(TM, TA)(tuple(__traits(getMember, value, mname))[j]); ser.endWriteArrayEntry!STraits(fcount); fcount++; } } ser.endWriteArray!Traits(); } else { static if (__traits(compiles, ser.beginWriteDictionary!Traits(0))) { enum nfields = getExpandedFieldCount!(TU, SerializableFields!(TU, Policy)); ser.beginWriteDictionary!Traits(nfields); } else { ser.beginWriteDictionary!Traits(); } foreach (mname; SerializableFields!(TU, Policy)) { alias TM = TypeTuple!(typeof(__traits(getMember, TU, mname))); alias TA = TypeTuple!(__traits(getAttributes, TypeTuple!(__traits(getMember, T, mname))[0])); enum name = getPolicyAttribute!(TU, mname, NameAttribute, Policy)(NameAttribute!DefaultPolicy(underscoreStrip(mname))).name; static if (TM.length == 1) { auto vt = __traits(getMember, value, mname); } else { auto vt = tuple!TM(__traits(getMember, value, mname)); } alias STraits = SubTraits!(Traits, typeof(vt), TA); ser.beginWriteDictionaryEntry!STraits(name); ser.serializeValue!(typeof(vt), TA)(vt); ser.endWriteDictionaryEntry!STraits(name); } static if (__traits(compiles, ser.endWriteDictionary!Traits(0))) { ser.endWriteDictionary!Traits(nfields); } else { ser.endWriteDictionary!Traits(); } } } else static if (isPointer!TU) { if (value is null) { ser.writeValue!Traits(null); return; } ser.serializeValue!(PointerTarget!TU)(*value); } else static if (is(TU == bool) || is(TU : real) || is(TU : long)) { ser.serializeValue!(string, ATTRIBUTES)(to!string(value)); } else static assert(false, "Unsupported serialization type: " ~ T.stringof); } } private struct Traits(T, alias POL, ATTRIBUTES...) { alias Type = T; alias Policy = POL; alias Attributes = TypeTuple!ATTRIBUTES; } private struct SubTraits(Traits, T, A...) { alias Type = Unqual!T; alias Attributes = TypeTuple!A; alias Policy = Traits.Policy; alias ContainerType = Traits.Type; alias ContainerAttributes = Traits.Attributes; } private template deserializeValueImpl(Serializer, alias Policy) { alias _Policy = Policy; static assert(Serializer.isSupportedValueType!string, "All serializers must support string values."); static assert(Serializer.isSupportedValueType!(typeof(null)), "All serializers must support null values."); // work around https://issues.dlang.org/show_bug.cgi?id=16528 static if (isSafeSerializer!Serializer) { T deserializeValue(T, ATTRIBUTES...)(ref Serializer ser) @safe { return deserializeValueDeduced!(T, ATTRIBUTES)(ser); } } else { T deserializeValue(T, ATTRIBUTES...)(ref Serializer ser) { return deserializeValueDeduced!(T, ATTRIBUTES)(ser); } } T deserializeValueDeduced(T, ATTRIBUTES...)(ref Serializer ser) if(!isMutable!T) { import std.algorithm.mutation : move; auto ret = deserializeValue!(Unqual!T, ATTRIBUTES)(ser); return () @trusted { return cast(T)ret.move; } (); } T deserializeValueDeduced(T, ATTRIBUTES...)(ref Serializer ser) if(isMutable!T) { import std.typecons : BitFlags, Nullable, Typedef, TypedefType, Tuple; alias Traits = .Traits!(T, _Policy, ATTRIBUTES); static if (isPolicySerializable!(Policy, T)) { alias CustomType = typeof(Policy!T.toRepresentation(T.init)); return Policy!T.fromRepresentation(ser.deserializeValue!(CustomType, ATTRIBUTES)); } else static if (is(T == enum)) { static if (hasPolicyAttributeL!(ByNameAttribute, Policy, ATTRIBUTES)) { return ser.deserializeValue!(string, ATTRIBUTES).to!T(); } else { return cast(T)ser.deserializeValue!(OriginalType!T); } } else static if (Serializer.isSupportedValueType!T) { return ser.readValue!(Traits, T)(); } else static if (/*isInstanceOf!(Tuple, TU)*/is(T == Tuple!TPS, TPS...)) { enum fieldsCount = T.Types.length; import std.algorithm.searching: all; static if (all!"!a.empty"([T.fieldNames]) && !hasPolicyAttributeL!(AsArrayAttribute, Policy, ATTRIBUTES)) { T ret; bool[fieldsCount] set; ser.readDictionary!Traits((name) { switch (name) { default: break; foreach (i, TV; T.Types) { enum fieldName = underscoreStrip(T.fieldNames[i]); alias STraits = SubTraits!(Traits, TV); case fieldName: { ser.beginReadDictionaryEntry!STraits(fieldName); ret[i] = ser.deserializeValue!(TV, ATTRIBUTES); ser.endReadDictionaryEntry!STraits(fieldName); set[i] = true; } break; } } }); foreach (i, fieldName; T.fieldNames) enforce(set[i], "Missing tuple field '"~fieldName~"' of type '"~T.Types[i].stringof~"' ("~Policy.stringof~")."); return ret; } else static if (fieldsCount == 1) { return T(ser.deserializeValue!(T.Types[0], ATTRIBUTES)()); } else { T ret; size_t currentField = 0; ser.readArray!Traits((sz) { assert(sz == 0 || sz == fieldsCount); }, { switch (currentField++) { default: break; foreach (i, TV; T.Types) { alias STraits = SubTraits!(Traits, TV); case i: { ser.beginReadArrayEntry!STraits(i); ret[i] = ser.deserializeValue!(TV, ATTRIBUTES); ser.endReadArrayEntry!STraits(i); } break; } } }); enforce(currentField == fieldsCount, "Missing tuple field(s) - expected '"~fieldsCount.stringof~"', received '"~currentField.stringof~"' ("~Policy.stringof~")."); return ret; } } else static if (isStaticArray!T) { alias TV = typeof(T.init[0]); alias STraits = SubTraits!(Traits, TV); T ret; size_t i = 0; ser.readArray!Traits((sz) { assert(sz == 0 || sz == T.length); }, { assert(i < T.length); ser.beginReadArrayEntry!STraits(i); ret[i] = ser.deserializeValue!(TV, ATTRIBUTES); ser.endReadArrayEntry!STraits(i); i++; }); return ret; } else static if (isDynamicArray!T) { alias TV = typeof(T.init[0]); alias STraits = SubTraits!(Traits, TV); //auto ret = appender!T(); T ret; // Cannot use appender because of DMD BUG 10690/10859/11357 ser.readArray!Traits((sz) @safe { ret.reserve(sz); }, () @safe { size_t i = ret.length; ser.beginReadArrayEntry!STraits(i); static if (__traits(compiles, () @safe { ser.deserializeValue!(TV, ATTRIBUTES); })) ret ~= ser.deserializeValue!(TV, ATTRIBUTES); else // recursive array https://issues.dlang.org/show_bug.cgi?id=16528 ret ~= (() @trusted => ser.deserializeValue!(TV, ATTRIBUTES))(); ser.endReadArrayEntry!STraits(i); }); return ret;//cast(T)ret.data; } else static if (isAssociativeArray!T) { alias TK = KeyType!T; alias TV = ValueType!T; alias STraits = SubTraits!(Traits, TV); T ret; ser.readDictionary!Traits((name) @safe { TK key; static if (is(TK == string) || (is(TK == enum) && is(OriginalType!TK == string))) key = cast(TK)name; else static if (is(TK : real) || is(TK : long) || is(TK == enum)) key = name.to!TK; else static if (isStringSerializable!TK) key = TK.fromString(name); else static assert(false, "Associative array keys must be strings, numbers, enums, or have toString/fromString methods."); ser.beginReadDictionaryEntry!STraits(name); ret[key] = ser.deserializeValue!(TV, ATTRIBUTES); ser.endReadDictionaryEntry!STraits(name); }); return ret; } else static if (isInstanceOf!(Nullable, T)) { if (ser.tryReadNull!Traits()) return T.init; return T(ser.deserializeValue!(typeof(T.init.get()), ATTRIBUTES)); } else static if (isInstanceOf!(Typedef, T)) { return T(ser.deserializeValue!(TypedefType!T, ATTRIBUTES)); } else static if (is(T == BitFlags!E, E)) { alias STraits = SubTraits!(Traits, E); T ret; size_t i = 0; ser.readArray!Traits((sz) {}, { ser.beginReadArrayEntry!STraits(i); ret |= ser.deserializeValue!(E, ATTRIBUTES); ser.endReadArrayEntry!STraits(i); i++; }); return ret; } else static if (isCustomSerializable!T) { alias CustomType = typeof(T.init.toRepresentation()); return T.fromRepresentation(ser.deserializeValue!(CustomType, ATTRIBUTES)); } else static if (isISOExtStringSerializable!T) { return T.fromISOExtString(ser.readValue!(Traits, string)()); } else static if (isStringSerializable!T) { return T.fromString(ser.readValue!(Traits, string)()); } else static if (is(T == struct) || is(T == class)) { static if (is(T == class)) { if (ser.tryReadNull!Traits()) return null; } T ret; string name; bool[getExpandedFieldsData!(T, SerializableFields!(T, Policy)).length] set; static if (is(T == class)) ret = new T; static if (hasPolicyAttributeL!(AsArrayAttribute, Policy, ATTRIBUTES)) { size_t idx = 0; ser.readArray!Traits((sz){}, { static if (hasSerializableFields!(T, Policy)) { switch (idx++) { default: break; foreach (i, FD; getExpandedFieldsData!(T, SerializableFields!(T, Policy))) { enum mname = FD[0]; enum msindex = FD[1]; alias MT = TypeTuple!(__traits(getMember, T, mname)); alias MTI = MT[msindex]; alias TMTI = typeof(MTI); alias TMTIA = TypeTuple!(__traits(getAttributes, MTI)); alias STraits = SubTraits!(Traits, TMTI, TMTIA); case i: static if (hasPolicyAttribute!(OptionalAttribute, Policy, MTI)) if (ser.tryReadNull!STraits()) return; set[i] = true; ser.beginReadArrayEntry!STraits(i); static if (MT.length == 1) { __traits(getMember, ret, mname) = ser.deserializeValue!(TMTI, TMTIA); } else { __traits(getMember, ret, mname)[msindex] = ser.deserializeValue!(TMTI, TMTIA); } ser.endReadArrayEntry!STraits(i); break; } } } else { pragma(msg, "Deserializing composite type "~T.stringof~" which has no serializable fields."); } }); } else { ser.readDictionary!Traits((name) { static if (hasSerializableFields!(T, Policy)) { switch (name) { default: break; foreach (i, mname; SerializableFields!(T, Policy)) { alias TM = TypeTuple!(typeof(__traits(getMember, T, mname))); alias TA = TypeTuple!(__traits(getAttributes, TypeTuple!(__traits(getMember, T, mname))[0])); alias STraits = SubTraits!(Traits, TM, TA); enum fname = getPolicyAttribute!(T, mname, NameAttribute, Policy)(NameAttribute!DefaultPolicy(underscoreStrip(mname))).name; case fname: static if (hasPolicyAttribute!(OptionalAttribute, Policy, TypeTuple!(__traits(getMember, T, mname))[0])) if (ser.tryReadNull!STraits()) return; set[i] = true; ser.beginReadDictionaryEntry!STraits(fname); static if (TM.length == 1) { __traits(getMember, ret, mname) = ser.deserializeValue!(TM, TA); } else { __traits(getMember, ret, mname) = ser.deserializeValue!(Tuple!TM, TA); } ser.endReadDictionaryEntry!STraits(fname); break; } } } else { pragma(msg, "Deserializing composite type "~T.stringof~" which has no serializable fields."); } }); } foreach (i, mname; SerializableFields!(T, Policy)) static if (!hasPolicyAttribute!(OptionalAttribute, Policy, TypeTuple!(__traits(getMember, T, mname))[0])) enforce(set[i], "Missing non-optional field '"~mname~"' of type '"~T.stringof~"' ("~Policy.stringof~")."); return ret; } else static if (isPointer!T) { if (ser.tryReadNull!Traits()) return null; alias PT = PointerTarget!T; auto ret = new PT; *ret = ser.deserializeValue!(PT, ATTRIBUTES); return ret; } else static if (is(T == bool) || is(T : real) || is(T : long)) { return to!T(ser.deserializeValue!string()); } else static assert(false, "Unsupported serialization type: " ~ T.stringof); } } /** Attribute for overriding the field name during (de-)serialization. Note that without the `@name` attribute there is a shorter alternative for using names that collide with a D keyword. A single trailing underscore will automatically be stripped when determining a field name. */ NameAttribute!Policy name(alias Policy = DefaultPolicy)(string name) { return NameAttribute!Policy(name); } /// unittest { struct CustomPolicy {} struct Test { // serialized as "screen-size": @name("screen-size") int screenSize; // serialized as "print-size" by default, // but as "PRINTSIZE" if CustomPolicy is used for serialization. @name("print-size") @name!CustomPolicy("PRINTSIZE") int printSize; // serialized as "version" int version_; } } /** Attribute marking a field as optional during deserialization. */ @property OptionalAttribute!Policy optional(alias Policy = DefaultPolicy)() { return OptionalAttribute!Policy(); } /// unittest { struct Test { // does not need to be present during deserialization @optional int screenSize = 100; } } /** Attribute for marking non-serialized fields. */ @property IgnoreAttribute!Policy ignore(alias Policy = DefaultPolicy)() { return IgnoreAttribute!Policy(); } /// unittest { struct Test { // is neither serialized not deserialized @ignore int screenSize; } } /// unittest { template CustomPolicy(T) { // ... } struct Test { // not (de)serialized for serializeWithPolicy!(Test, CustomPolicy) // but for other policies or when serialized without a policy @ignore!CustomPolicy int screenSize; } } /** Attribute for forcing serialization of enum fields by name instead of by value. */ @property ByNameAttribute!Policy byName(alias Policy = DefaultPolicy)() { return ByNameAttribute!Policy(); } /// unittest { enum Color { red, green, blue } struct Test { // serialized as an int (e.g. 1 for Color.green) Color color; // serialized as a string (e.g. "green" for Color.green) @byName Color namedColor; // serialized as array of ints Color[] colorArray; // serialized as array of strings @byName Color[] namedColorArray; } } /** Attribute for representing a struct/class as an array instead of an object. Usually structs and class objects are serialized as dictionaries mapping from field name to value. Using this attribute, they will be serialized as a flat array instead. Note that changing the layout will make any already serialized data mismatch when this attribute is used. */ @property AsArrayAttribute!Policy asArray(alias Policy = DefaultPolicy)() { return AsArrayAttribute!Policy(); } /// unittest { struct Fields { int f1; string f2; double f3; } struct Test { // serialized as name:value pairs ["f1": int, "f2": string, "f3": double] Fields object; // serialized as a sequential list of values [int, string, double] @asArray Fields array; } import vibe.data.json; static assert(is(typeof(serializeToJson(Test())))); } /// enum FieldExistence { missing, exists, defer } /// User defined attribute (not intended for direct use) struct NameAttribute(alias POLICY) { alias Policy = POLICY; string name; } /// ditto struct OptionalAttribute(alias POLICY) { alias Policy = POLICY; } /// ditto struct IgnoreAttribute(alias POLICY) { alias Policy = POLICY; } /// ditto struct ByNameAttribute(alias POLICY) { alias Policy = POLICY; } /// ditto struct AsArrayAttribute(alias POLICY) { alias Policy = POLICY; } /** Checks if a given type has a custom serialization representation. A class or struct type is custom serializable if it defines a pair of `toRepresentation`/`fromRepresentation` methods. Any class or struct type that has this trait will be serialized by using the return value of it's `toRepresentation` method instead of the original value. This trait has precedence over `isISOExtStringSerializable` and `isStringSerializable`. */ template isCustomSerializable(T) { enum bool isCustomSerializable = is(typeof(T.init.toRepresentation())) && is(typeof(T.fromRepresentation(T.init.toRepresentation())) == T); } /// unittest { // represented as a single uint when serialized static struct S { ushort x, y; uint toRepresentation() const { return x + (y << 16); } static S fromRepresentation(uint i) { return S(i & 0xFFFF, i >> 16); } } static assert(isCustomSerializable!S); } /** Checks if a given type has an ISO extended string serialization representation. A class or struct type is ISO extended string serializable if it defines a pair of `toISOExtString`/`fromISOExtString` methods. Any class or struct type that has this trait will be serialized by using the return value of it's `toISOExtString` method instead of the original value. This is mainly useful for supporting serialization of the the date/time types in `std.datetime`. This trait has precedence over `isStringSerializable`. */ template isISOExtStringSerializable(T) { enum bool isISOExtStringSerializable = is(typeof(T.init.toISOExtString()) == string) && is(typeof(T.fromISOExtString("")) == T); } /// unittest { import std.datetime; static assert(isISOExtStringSerializable!DateTime); static assert(isISOExtStringSerializable!SysTime); // represented as an ISO extended string when serialized static struct S { // dummy example implementations string toISOExtString() const { return ""; } static S fromISOExtString(string s) { return S.init; } } static assert(isISOExtStringSerializable!S); } /** Checks if a given type has a string serialization representation. A class or struct type is string serializable if it defines a pair of `toString`/`fromString` methods. Any class or struct type that has this trait will be serialized by using the return value of it's `toString` method instead of the original value. */ template isStringSerializable(T) { enum bool isStringSerializable = is(typeof(T.init.toString()) == string) && is(typeof(T.fromString("")) == T); } /// unittest { import std.conv; // represented as a string when serialized static struct S { int value; // dummy example implementations string toString() const { return value.to!string(); } static S fromString(string s) { return S(s.to!int()); } } static assert(isStringSerializable!S); } /** Default policy (performs no customization). */ template DefaultPolicy(T) { } /** Checks if a given policy supports custom serialization for a given type. A class or struct type is custom serializable according to a policy if the policy defines a pair of `toRepresentation`/`fromRepresentation` functions. Any class or struct type that has this trait for the policy supplied to `serializeWithPolicy` will be serialized by using the return value of the policy `toRepresentation` function instead of the original value. This trait has precedence over `isCustomSerializable`, `isISOExtStringSerializable` and `isStringSerializable`. See_Also: `vibe.data.serialization.serializeWithPolicy` */ template isPolicySerializable(alias Policy, T) { enum bool isPolicySerializable = is(typeof(Policy!T.toRepresentation(T.init))) && is(typeof(Policy!T.fromRepresentation(Policy!T.toRepresentation(T.init))) == T); } /// unittest { import std.conv; // represented as the boxed value when serialized static struct Box(T) { T value; } template BoxPol(S) { auto toRepresentation(S s) { return s.value; } S fromRepresentation(typeof(S.init.value) v) { return S(v); } } static assert(isPolicySerializable!(BoxPol, Box!int)); } /** Chains serialization policy. Constructs a serialization policy that given a type `T` will apply the first compatible policy `toRepresentation` and `fromRepresentation` functions. Policies are evaluated left-to-right according to `isPolicySerializable`. See_Also: `vibe.data.serialization.serializeWithPolicy` */ template ChainedPolicy(alias Primary, Fallbacks...) { static if (Fallbacks.length == 0) { alias ChainedPolicy = Primary; } else { alias ChainedPolicy = ChainedPolicy!(ChainedPolicyImpl!(Primary, Fallbacks[0]), Fallbacks[1..$]); } } /// unittest { import std.conv; // To be represented as the boxed value when serialized static struct Box(T) { T value; } // Also to berepresented as the boxed value when serialized, but has // a different way to access the value. static struct Box2(T) { private T v; ref T get() { return v; } } template BoxPol(S) { auto toRepresentation(S s) { return s.value; } S fromRepresentation(typeof(toRepresentation(S.init)) v) { return S(v); } } template Box2Pol(S) { auto toRepresentation(S s) { return s.get(); } S fromRepresentation(typeof(toRepresentation(S.init)) v) { S s; s.get() = v; return s; } } alias ChainPol = ChainedPolicy!(BoxPol, Box2Pol); static assert(!isPolicySerializable!(BoxPol, Box2!int)); static assert(!isPolicySerializable!(Box2Pol, Box!int)); static assert(isPolicySerializable!(ChainPol, Box!int)); static assert(isPolicySerializable!(ChainPol, Box2!int)); } private template ChainedPolicyImpl(alias Primary, alias Fallback) { template Pol(T) { static if (isPolicySerializable!(Primary, T)) { alias toRepresentation = Primary!T.toRepresentation; alias fromRepresentation = Primary!T.fromRepresentation; } else { alias toRepresentation = Fallback!T.toRepresentation; alias fromRepresentation = Fallback!T.fromRepresentation; } } alias ChainedPolicyImpl = Pol; } // heuristically determines @safe'ty of the serializer by testing readValue and writeValue for type int private enum isSafeSerializer(S) = __traits(compiles, (S s) @safe { alias T = Traits!(int, DefaultPolicy); s.writeValue!T(42); s.readValue!(T, int)(); }); private template hasAttribute(T, alias decl) { enum hasAttribute = findFirstUDA!(T, decl).found; } unittest { @asArray int i1; static assert(hasAttribute!(AsArrayAttribute!DefaultPolicy, i1)); int i2; static assert(!hasAttribute!(AsArrayAttribute!DefaultPolicy, i2)); } private template hasPolicyAttribute(alias T, alias POLICY, alias decl) { enum hasPolicyAttribute = hasAttribute!(T!POLICY, decl) || hasAttribute!(T!DefaultPolicy, decl); } unittest { template CP(T) {} @asArray!CP int i1; @asArray int i2; int i3; static assert(hasPolicyAttribute!(AsArrayAttribute, CP, i1)); static assert(hasPolicyAttribute!(AsArrayAttribute, CP, i2)); static assert(!hasPolicyAttribute!(AsArrayAttribute, CP, i3)); static assert(!hasPolicyAttribute!(AsArrayAttribute, DefaultPolicy, i1)); static assert(hasPolicyAttribute!(AsArrayAttribute, DefaultPolicy, i2)); static assert(!hasPolicyAttribute!(AsArrayAttribute, DefaultPolicy, i3)); } private template hasAttributeL(T, ATTRIBUTES...) { static if (ATTRIBUTES.length == 1) { enum hasAttributeL = is(typeof(ATTRIBUTES[0]) == T); } else static if (ATTRIBUTES.length > 1) { enum hasAttributeL = hasAttributeL!(T, ATTRIBUTES[0 .. $/2]) || hasAttributeL!(T, ATTRIBUTES[$/2 .. $]); } else { enum hasAttributeL = false; } } unittest { static assert(hasAttributeL!(AsArrayAttribute!DefaultPolicy, byName, asArray)); static assert(!hasAttributeL!(AsArrayAttribute!DefaultPolicy, byName)); } private template hasPolicyAttributeL(alias T, alias POLICY, ATTRIBUTES...) { enum hasPolicyAttributeL = hasAttributeL!(T!POLICY, ATTRIBUTES) || hasAttributeL!(T!DefaultPolicy, ATTRIBUTES); } private static T getAttribute(TT, string mname, T)(T default_value) { enum val = findFirstUDA!(T, __traits(getMember, TT, mname)); static if (val.found) return val.value; else return default_value; } private static auto getPolicyAttribute(TT, string mname, alias Attribute, alias Policy)(Attribute!DefaultPolicy default_value) { enum val = findFirstUDA!(Attribute!Policy, TypeTuple!(__traits(getMember, TT, mname))[0]); static if (val.found) return val.value; else { enum val2 = findFirstUDA!(Attribute!DefaultPolicy, TypeTuple!(__traits(getMember, TT, mname))[0]); static if (val2.found) return val2.value; else return default_value; } } private string underscoreStrip(string field_name) @safe nothrow @nogc { if( field_name.length < 1 || field_name[$-1] != '_' ) return field_name; else return field_name[0 .. $-1]; } private template hasSerializableFields(T, alias POLICY, size_t idx = 0) { enum hasSerializableFields = SerializableFields!(T, POLICY).length > 0; /*static if (idx < __traits(allMembers, T).length) { enum mname = __traits(allMembers, T)[idx]; static if (!isRWPlainField!(T, mname) && !isRWField!(T, mname)) enum hasSerializableFields = hasSerializableFields!(T, idx+1); else static if (hasAttribute!(IgnoreAttribute, __traits(getMember, T, mname))) enum hasSerializableFields = hasSerializableFields!(T, idx+1); else enum hasSerializableFields = true; } else enum hasSerializableFields = false;*/ } private template SerializableFields(COMPOSITE, alias POLICY) { alias SerializableFields = FilterSerializableFields!(COMPOSITE, POLICY, __traits(allMembers, COMPOSITE)); } private template FilterSerializableFields(COMPOSITE, alias POLICY, FIELDS...) { static if (FIELDS.length > 1) { alias FilterSerializableFields = TypeTuple!( FilterSerializableFields!(COMPOSITE, POLICY, FIELDS[0 .. $/2]), FilterSerializableFields!(COMPOSITE, POLICY, FIELDS[$/2 .. $])); } else static if (FIELDS.length == 1) { alias T = COMPOSITE; enum mname = FIELDS[0]; static if (isRWPlainField!(T, mname) || isRWField!(T, mname)) { alias Tup = TypeTuple!(__traits(getMember, COMPOSITE, FIELDS[0])); static if (Tup.length != 1) { alias FilterSerializableFields = TypeTuple!(mname); } else { static if (!hasPolicyAttribute!(IgnoreAttribute, POLICY, __traits(getMember, T, mname))) { alias FilterSerializableFields = TypeTuple!(mname); } else alias FilterSerializableFields = TypeTuple!(); } } else alias FilterSerializableFields = TypeTuple!(); } else alias FilterSerializableFields = TypeTuple!(); } private size_t getExpandedFieldCount(T, FIELDS...)() { size_t ret = 0; foreach (F; FIELDS) ret += TypeTuple!(__traits(getMember, T, F)).length; return ret; } private template getExpandedFieldsData(T, FIELDS...) { import std.meta : aliasSeqOf, staticMap; import std.range : repeat, zip, iota; enum subfieldsCount(alias F) = TypeTuple!(__traits(getMember, T, F)).length; alias processSubfield(alias F) = aliasSeqOf!(zip(repeat(F), iota(subfieldsCount!F))); alias getExpandedFieldsData = staticMap!(processSubfield, FIELDS); } /******************************************************************************/ /* General serialization unit testing */ /******************************************************************************/ version (unittest) { static assert(isSafeSerializer!TestSerializer); private struct TestSerializer { import std.array, std.conv, std.string; string result; enum isSupportedValueType(T) = is(T == string) || is(T == typeof(null)) || is(T == float) || is (T == int); string getSerializedResult() @safe { return result; } void beginWriteDictionary(Traits)() { result ~= "D("~Traits.Type.mangleof~"){"; } void endWriteDictionary(Traits)() { result ~= "}D("~Traits.Type.mangleof~")"; } void beginWriteDictionaryEntry(Traits)(string name) { result ~= "DE("~Traits.Type.mangleof~","~name~")("; } void endWriteDictionaryEntry(Traits)(string name) { result ~= ")DE("~Traits.Type.mangleof~","~name~")"; } void beginWriteArray(Traits)(size_t length) { result ~= "A("~Traits.Type.mangleof~")["~length.to!string~"]["; } void endWriteArray(Traits)() { result ~= "]A("~Traits.Type.mangleof~")"; } void beginWriteArrayEntry(Traits)(size_t i) { result ~= "AE("~Traits.Type.mangleof~","~i.to!string~")("; } void endWriteArrayEntry(Traits)(size_t i) { result ~= ")AE("~Traits.Type.mangleof~","~i.to!string~")"; } void writeValue(Traits, T)(T value) { if (is(T == typeof(null))) result ~= "null"; else { assert(isSupportedValueType!T); result ~= "V("~T.mangleof~")("~value.to!string~")"; } } // deserialization void readDictionary(Traits)(scope void delegate(string) @safe entry_callback) { skip("D("~Traits.Type.mangleof~"){"); while (result.startsWith("DE(")) { result = result[3 .. $]; auto idx = result.indexOf(','); auto idx2 = result.indexOf(")("); assert(idx > 0 && idx2 > idx); auto t = result[0 .. idx]; auto n = result[idx+1 .. idx2]; result = result[idx2+2 .. $]; entry_callback(n); skip(")DE("~t~","~n~")"); } skip("}D("~Traits.Type.mangleof~")"); } void beginReadDictionaryEntry(Traits)(string name) {} void endReadDictionaryEntry(Traits)(string name) {} void readArray(Traits)(scope void delegate(size_t) @safe size_callback, scope void delegate() @safe entry_callback) { skip("A("~Traits.Type.mangleof~")["); auto bidx = result.indexOf("]["); assert(bidx > 0); auto cnt = result[0 .. bidx].to!size_t; result = result[bidx+2 .. $]; size_t i = 0; while (result.startsWith("AE(")) { result = result[3 .. $]; auto idx = result.indexOf(','); auto idx2 = result.indexOf(")("); assert(idx > 0 && idx2 > idx); auto t = result[0 .. idx]; auto n = result[idx+1 .. idx2]; result = result[idx2+2 .. $]; assert(n == i.to!string); entry_callback(); skip(")AE("~t~","~n~")"); i++; } skip("]A("~Traits.Type.mangleof~")"); assert(i == cnt); } void beginReadArrayEntry(Traits)(size_t index) {} void endReadArrayEntry(Traits)(size_t index) {} T readValue(Traits, T)() { skip("V("~T.mangleof~")("); auto idx = result.indexOf(')'); assert(idx >= 0); auto ret = result[0 .. idx].to!T; result = result[idx+1 .. $]; return ret; } void skip(string prefix) @safe { assert(result.startsWith(prefix), prefix ~ " vs. " ~result); result = result[prefix.length .. $]; } bool tryReadNull(Traits)() { if (result.startsWith("null")) { result = result[4 .. $]; return true; } else return false; } } } unittest { // basic serialization behavior import std.typecons : Nullable; static void test(T)(T value, string expected) { assert(serialize!TestSerializer(value) == expected, serialize!TestSerializer(value)); static if (isPointer!T) { if (value) assert(*deserialize!(TestSerializer, T)(expected) == *value); else assert(deserialize!(TestSerializer, T)(expected) is null); } else static if (is(T == Nullable!U, U)) { if (value.isNull()) assert(deserialize!(TestSerializer, T)(expected).isNull); else assert(deserialize!(TestSerializer, T)(expected) == value); } else assert(deserialize!(TestSerializer, T)(expected) == value); } test("hello", "V(Aya)(hello)"); test(12, "V(i)(12)"); test(12.0, "V(Aya)(12)"); test(12.0f, "V(f)(12)"); assert(serialize!TestSerializer(null) == "null"); test(["hello", "world"], "A(AAya)[2][AE(Aya,0)(V(Aya)(hello))AE(Aya,0)AE(Aya,1)(V(Aya)(world))AE(Aya,1)]A(AAya)"); string mangleOfAA = (string[string]).mangleof; test(["hello": "world"], "D(" ~ mangleOfAA ~ "){DE(Aya,hello)(V(Aya)(world))DE(Aya,hello)}D(" ~ mangleOfAA ~ ")"); test(cast(int*)null, "null"); int i = 42; test(&i, "V(i)(42)"); Nullable!int j; test(j, "null"); j = 42; test(j, "V(i)(42)"); } unittest { // basic user defined types static struct S { string f; } enum Sm = S.mangleof; auto s = S("hello"); enum s_ser = "D("~Sm~"){DE(Aya,f)(V(Aya)(hello))DE(Aya,f)}D("~Sm~")"; assert(serialize!TestSerializer(s) == s_ser, serialize!TestSerializer(s)); assert(deserialize!(TestSerializer, S)(s_ser) == s); static class C { string f; } enum Cm = C.mangleof; C c; assert(serialize!TestSerializer(c) == "null"); c = new C; c.f = "hello"; enum c_ser = "D("~Cm~"){DE(Aya,f)(V(Aya)(hello))DE(Aya,f)}D("~Cm~")"; assert(serialize!TestSerializer(c) == c_ser); assert(deserialize!(TestSerializer, C)(c_ser).f == c.f); enum E { hello, world } assert(serialize!TestSerializer(E.hello) == "V(i)(0)"); assert(serialize!TestSerializer(E.world) == "V(i)(1)"); } unittest { // tuple serialization import std.typecons : Tuple; static struct S(T...) { T f; } enum Sm = S!(int, string).mangleof; enum Tum = Tuple!(int, string).mangleof; const s = S!(int, string)(42, "hello"); const ss = serialize!TestSerializer(s); const es = "D("~Sm~"){DE("~Tum~",f)(A("~Tum~")[2][AE(i,0)(V(i)(42))AE(i,0)AE(Aya,1)(V(Aya)(hello))AE(Aya,1)]A("~Tum~"))DE("~Tum~",f)}D("~Sm~")"; assert(ss == es); const dss = deserialize!(TestSerializer, typeof(s))(ss); assert(dss == s); static struct T { @asArray S!(int, string) g; } enum Tm = T.mangleof; const t = T(s); const st = serialize!TestSerializer(t); const et = "D("~Tm~"){DE("~Sm~",g)(A("~Sm~")[2][AE(i,0)(V(i)(42))AE(i,0)AE(Aya,1)(V(Aya)(hello))AE(Aya,1)]A("~Sm~"))DE("~Sm~",g)}D("~Tm~")"; assert(st == et); const dst = deserialize!(TestSerializer, typeof(t))(st); assert(dst == t); } unittest { // named tuple serialization import std.typecons : tuple; static struct I { int i; } static struct S { int x; string s_; } static struct T { @asArray typeof(tuple!(FieldNameTuple!I)(I.init.tupleof)) tuple1AsArray; @name(fullyQualifiedName!I) typeof(tuple!(FieldNameTuple!I)(I.init.tupleof)) tuple1AsDictionary; @asArray typeof(tuple!(FieldNameTuple!S)(S.init.tupleof)) tuple2AsArray; @name(fullyQualifiedName!S) typeof(tuple!(FieldNameTuple!S)(S.init.tupleof)) tuple2AsDictionary; } const i = I(42); const s = S(42, "hello"); const T t = { i.tupleof, i.tupleof, s.tupleof, s.tupleof }; const st = serialize!TestSerializer(t); enum Tm = T.mangleof; enum TuIm = typeof(T.tuple1AsArray).mangleof; enum TuSm = typeof(T.tuple2AsArray).mangleof; const et = "D("~Tm~")"~ "{"~ "DE("~TuIm~",tuple1AsArray)"~ "("~ "V(i)(42)"~ ")"~ "DE("~TuIm~",tuple1AsArray)"~ "DE("~TuIm~","~fullyQualifiedName!I~")"~ "("~ "D("~TuIm~")"~ "{"~ "DE(i,i)"~ "("~ "V(i)(42)"~ ")"~ "DE(i,i)"~ "}"~ "D("~TuIm~")"~ ")"~ "DE("~TuIm~","~fullyQualifiedName!I~")"~ "DE("~TuSm~",tuple2AsArray)"~ "("~ "A("~TuSm~")[2]"~ "["~ "AE(i,0)"~ "("~ "V(i)(42)"~ ")"~ "AE(i,0)"~ "AE(Aya,1)"~ "("~ "V(Aya)(hello)"~ ")"~ "AE(Aya,1)"~ "]"~ "A("~TuSm~")"~ ")"~ "DE("~TuSm~",tuple2AsArray)"~ "DE("~TuSm~","~fullyQualifiedName!S~")"~ "("~ "D("~TuSm~")"~ "{"~ "DE(i,x)"~ "("~ "V(i)(42)"~ ")"~ "DE(i,x)"~ "DE(Aya,s)"~ "("~ "V(Aya)(hello)"~ ")"~ "DE(Aya,s)"~ "}"~ "D("~TuSm~")"~ ")"~ "DE("~TuSm~","~fullyQualifiedName!S~")"~ "}"~ "D("~Tm~")"; assert(st == et); const dst = deserialize!(TestSerializer, typeof(t))(st); assert(dst == t); } unittest { // testing the various UDAs enum E { hello, world } enum Em = E.mangleof; static struct S { @byName E e; @ignore int i; @optional float f; } enum Sm = S.mangleof; auto s = S(E.world, 42, 1.0f); assert(serialize!TestSerializer(s) == "D("~Sm~"){DE("~Em~",e)(V(Aya)(world))DE("~Em~",e)DE(f,f)(V(f)(1))DE(f,f)}D("~Sm~")"); } unittest { // custom serialization support // iso-ext import std.datetime; auto t = TimeOfDay(6, 31, 23); assert(serialize!TestSerializer(t) == "V(Aya)(06:31:23)"); auto d = Date(1964, 1, 23); assert(serialize!TestSerializer(d) == "V(Aya)(1964-01-23)"); auto dt = DateTime(d, t); assert(serialize!TestSerializer(dt) == "V(Aya)(1964-01-23T06:31:23)"); auto st = SysTime(dt, UTC()); assert(serialize!TestSerializer(st) == "V(Aya)(1964-01-23T06:31:23Z)"); } @safe unittest { // custom serialization support // string static struct S1 { int i; string toString() const @safe { return "hello"; } static S1 fromString(string) @safe { return S1.init; } } static struct S2 { int i; string toString() const { return "hello"; } } enum S2m = S2.mangleof; static struct S3 { int i; static S3 fromString(string) { return S3.init; } } enum S3m = S3.mangleof; assert(serialize!TestSerializer(S1.init) == "V(Aya)(hello)"); assert(serialize!TestSerializer(S2.init) == "D("~S2m~"){DE(i,i)(V(i)(0))DE(i,i)}D("~S2m~")"); assert(serialize!TestSerializer(S3.init) == "D("~S3m~"){DE(i,i)(V(i)(0))DE(i,i)}D("~S3m~")"); // custom static struct C1 { int i; float toRepresentation() const @safe { return 1.0f; } static C1 fromRepresentation(float f) @safe { return C1.init; } } static struct C2 { int i; float toRepresentation() const { return 1.0f; } } enum C2m = C2.mangleof; static struct C3 { int i; static C3 fromRepresentation(float f) { return C3.init; } } enum C3m = C3.mangleof; assert(serialize!TestSerializer(C1.init) == "V(f)(1)"); assert(serialize!TestSerializer(C2.init) == "D("~C2m~"){DE(i,i)(V(i)(0))DE(i,i)}D("~C2m~")"); assert(serialize!TestSerializer(C3.init) == "D("~C3m~"){DE(i,i)(V(i)(0))DE(i,i)}D("~C3m~")"); } unittest // Testing corner case: member function returning by ref { import vibe.data.json; static struct S { int i; ref int foo() { return i; } } static assert(__traits(compiles, { S().serializeToJson(); })); static assert(__traits(compiles, { Json().deserializeJson!S(); })); auto s = S(1); assert(s.serializeToJson().deserializeJson!S() == s); } unittest // Testing corner case: Variadic template constructors and methods { import vibe.data.json; static struct S { int i; this(Args...)(Args args) {} int foo(Args...)(Args args) { return i; } ref int bar(Args...)(Args args) { return i; } } static assert(__traits(compiles, { S().serializeToJson(); })); static assert(__traits(compiles, { Json().deserializeJson!S(); })); auto s = S(1); assert(s.serializeToJson().deserializeJson!S() == s); } @safe unittest // Make sure serializing through properties still works { import vibe.data.json; static struct S { @safe: public int i; private int privateJ; @property int j() @safe { return privateJ; } @property void j(int j) @safe { privateJ = j; } } auto s = S(1, 2); assert(s.serializeToJson().deserializeJson!S() == s); } @safe unittest // Immutable data deserialization { import vibe.data.json; static struct S { int a; } static class C { immutable(S)[] arr; } auto c = new C; c.arr ~= S(10); auto d = c.serializeToJson().deserializeJson!(immutable C); static assert(is(typeof(d) == immutable C)); assert(d.arr == c.arr); } unittest { // test BitFlags serialization import std.typecons : BitFlags; enum Flag { a = 1<<0, b = 1<<1, c = 1<<2 } enum Flagm = Flag.mangleof; alias Flags = BitFlags!Flag; enum Flagsm = Flags.mangleof; enum Fi_ser = "A("~Flagsm~")[0][]A("~Flagsm~")"; assert(serialize!TestSerializer(Flags.init) == Fi_ser); enum Fac_ser = "A("~Flagsm~")[2][AE("~Flagm~",0)(V(i)(1))AE("~Flagm~",0)AE("~Flagm~",1)(V(i)(4))AE("~Flagm~",1)]A("~Flagsm~")"; assert(serialize!TestSerializer(Flags(Flag.a, Flag.c)) == Fac_ser); struct S { @byName Flags f; } enum Sm = S.mangleof; enum Sac_ser = "D("~Sm~"){DE("~Flagsm~",f)(A("~Flagsm~")[2][AE("~Flagm~",0)(V(Aya)(a))AE("~Flagm~",0)AE("~Flagm~",1)(V(Aya)(c))AE("~Flagm~",1)]A("~Flagsm~"))DE("~Flagsm~",f)}D("~Sm~")"; assert(serialize!TestSerializer(S(Flags(Flag.a, Flag.c))) == Sac_ser); assert(deserialize!(TestSerializer, Flags)(Fi_ser) == Flags.init); assert(deserialize!(TestSerializer, Flags)(Fac_ser) == Flags(Flag.a, Flag.c)); assert(deserialize!(TestSerializer, S)(Sac_ser) == S(Flags(Flag.a, Flag.c))); } @safe unittest { // issue #1182 struct T { int x; string y; } struct S { @asArray T t; } auto s = S(T(42, "foo")); enum Sm = S.mangleof; enum Tm = T.mangleof; enum s_ser = "D("~Sm~"){DE("~Tm~",t)(A("~Tm~")[2][AE(i,0)(V(i)(42))AE(i,0)AE(Aya,1)(V(Aya)(foo))AE(Aya,1)]A("~Tm~"))DE("~Tm~",t)}D("~Sm~")"; auto serialized = serialize!TestSerializer(s); assert(serialized == s_ser, serialized); assert(deserialize!(TestSerializer, S)(serialized) == s); } @safe unittest { // issue #1352 - ingore per policy struct P1 {} struct P2 {} struct T { @ignore int a = 5; @ignore!P1 @ignore!P2 int b = 6; @ignore!P1 c = 7; int d = 8; } auto t = T(1, 2, 3, 4); auto Tm = T.mangleof; auto t_ser_plain = "D("~Tm~"){DE(i,b)(V(i)(2))DE(i,b)DE(i,c)(V(i)(3))DE(i,c)DE(i,d)(V(i)(4))DE(i,d)}D("~Tm~")"; auto t_ser_p1 = "D("~Tm~"){DE(i,d)(V(i)(4))DE(i,d)}D("~Tm~")"; auto t_ser_p2 = "D("~Tm~"){DE(i,c)(V(i)(3))DE(i,c)DE(i,d)(V(i)(4))DE(i,d)}D("~Tm~")"; { auto serialized_plain = serialize!TestSerializer(t); assert(serialized_plain == t_ser_plain); assert(deserialize!(TestSerializer, T)(serialized_plain) == T(5, 2, 3, 4)); } { auto serialized_p1 = serializeWithPolicy!(TestSerializer, P1)(t); assert(serialized_p1 == t_ser_p1, serialized_p1); assert(deserializeWithPolicy!(TestSerializer, P1, T)(serialized_p1) == T(5, 6, 7, 4)); } { auto serialized_p2 = serializeWithPolicy!(TestSerializer, P2)(t); assert(serialized_p2 == t_ser_p2); assert(deserializeWithPolicy!(TestSerializer, P2, T)(serialized_p2) == T(5, 6, 3, 4)); } } unittest { import std.conv : to; import std.string : toLower, toUpper; template P(T) if (is(T == enum)) { @safe: static string toRepresentation(T v) { return v.to!string.toLower(); } static T fromRepresentation(string str) { return str.toUpper().to!T; } } enum E { RED, GREEN } assert(P!E.fromRepresentation("green") == E.GREEN); static assert(isPolicySerializable!(P, E)); auto ser_red = "V(Aya)(red)"; assert(serializeWithPolicy!(TestSerializer, P)(E.RED) == ser_red, serializeWithPolicy!(TestSerializer, P)(E.RED)); assert(deserializeWithPolicy!(TestSerializer, P, E)(ser_red) == E.RED); import vibe.data.json : Json, JsonSerializer; assert(serializeWithPolicy!(JsonSerializer, P)(E.RED) == Json("red")); } unittest { static struct R { int y; } static struct Custom { @safe: int x; R toRepresentation() const { return R(x); } static Custom fromRepresentation(R r) { return Custom(r.y); } } auto c = Custom(42); auto Rn = R.mangleof; auto ser = serialize!TestSerializer(c); assert(ser == "D("~Rn~"){DE(i,y)(V(i)(42))DE(i,y)}D("~Rn~")"); auto deser = deserialize!(TestSerializer, Custom)(ser); assert(deser.x == 42); } unittest { import std.typecons : Typedef; alias T = Typedef!int; auto ser = serialize!TestSerializer(T(42)); assert(ser == "V(i)(42)", ser); auto deser = deserialize!(TestSerializer, T)(ser); assert(deser == 42); } @safe unittest { static struct Foo { Foo[] foos; } Foo f; string ser = serialize!TestSerializer(f); assert(deserialize!(TestSerializer, Foo)(ser) == f); } @system unittest { static struct SystemSerializer { TestSerializer ser; alias ser this; this(string s) { ser.result = s; } T readValue(Traits, T)() @system { return ser.readValue!(Traits, T); } void writeValue(Traits, T)(T value) @system { ser.writeValue!(Traits, T)(value); } void readDictionary(Traits)(scope void delegate(string) @system entry_callback) { ser.readDictionary!Traits((s) @trusted { entry_callback(s); }); } void readArray(Traits)(scope void delegate(size_t) @system size_callback, scope void delegate() @system entry_callback) { ser.readArray!Traits((s) @trusted { size_callback(s); }, () @trusted { entry_callback(); }); } } static struct Bar { Bar[] foos; int i; } Bar f; string ser = serialize!SystemSerializer(f); assert(deserialize!(SystemSerializer, Bar)(ser) == f); } @safe unittest { static struct S { @name("+foo") int bar; } auto Sn = S.mangleof; auto s = S(42); string ser = serialize!TestSerializer(s); assert(ser == "D("~Sn~"){DE(i,+foo)(V(i)(42))DE(i,+foo)}D("~Sn~")", ser); auto deser = deserialize!(TestSerializer, S)(ser); assert(deser.bar == 42); } @safe unittest { static struct S { int bar_; } auto Sn = S.mangleof; auto s = S(42); string ser = serialize!TestSerializer(s); assert(ser == "D("~Sn~"){DE(i,bar)(V(i)(42))DE(i,bar)}D("~Sn~")", ser); auto deser = deserialize!(TestSerializer, S)(ser); assert(deser.bar_ == 42); } vibe.d-0.8.2/dub.sdl000066400000000000000000000035731324361747700141740ustar00rootroot00000000000000name "vibe-d" description "Event driven web and concurrency framework" homepage "http://vibed.org/" license "MIT" copyright "Copyright © 2012-2016 rejectedsoftware e.K." authors "Sönke Ludwig" "Jan Krüger" "Matthias Dondorff" "see github for more" systemDependencies "Optionally libevent 2.0.x, OpenSSL 1.0.x" dependency ":redis" version="*" dependency ":data" version="*" dependency ":core" version="*" dependency ":mongodb" version="*" dependency ":web" version="*" dependency ":utils" version="*" dependency ":http" version="*" dependency ":mail" version="*" dependency ":stream" version="*" dependency ":tls" version="*" dependency ":crypto" version="*" dependency ":textfilter" version="*" dependency ":inet" version="*" targetType "library" targetName "vibed" // NOTE: "lib" is a path with no D sources to work around an issue in DUB 1.0.0 // and below that results in the standard "source/" path to be added even // if an explicit "sourcePaths" directive is given. sourcePaths "lib" sourceFiles "source/vibe/d.d" "source/vibe/vibe.d" x:ddoxFilterArgs "--unittest-examples" "--min-protection=Protected"\ "--ex" "vibe.core.drivers." "--ex" "vibe.internal." "--ex" "vibe.web.internal."\ "--ex" "diet.internal" configuration "win32_mscoff" { subConfiguration "vibe-d:core" "win32_mscoff" } configuration "libevent" { subConfiguration "vibe-d:core" "libevent" } configuration "libasync" { subConfiguration "vibe-d:core" "libasync" } configuration "win32" { subConfiguration "vibe-d:core" "win32" } configuration "winrt" { subConfiguration "vibe-d:core" "winrt" } configuration "vibe-core" { subConfiguration "vibe-d:core" "vibe-core" } subPackage "utils" subPackage "data" subPackage "core" subPackage "stream" subPackage "tls" subPackage "crypto" subPackage "textfilter" subPackage "inet" subPackage "mail" subPackage "http" subPackage "mongodb" subPackage "redis" subPackage "web" vibe.d-0.8.2/examples/000077500000000000000000000000001324361747700145245ustar00rootroot00000000000000vibe.d-0.8.2/examples/.travis.run000066400000000000000000000004051324361747700166370ustar00rootroot00000000000000app_skeleton bench-http-request bench-http-server diet download echoserver form_interface http_info http_request http_reverse_proxy http_server https_server http_static_server json message rest serialization task_control tcp_separate udp uploader web websocket vibe.d-0.8.2/examples/app_skeleton/000077500000000000000000000000001324361747700172105ustar00rootroot00000000000000vibe.d-0.8.2/examples/app_skeleton/dub.json000066400000000000000000000004361324361747700206600ustar00rootroot00000000000000{ "name": "app-skeleton", "description": "An example project skeleton", "homepage": "http://my-project.org", "copyright": "Copyright © 2000, Toni Tester", "authors": [ "Toni Tester" ], "dependencies": { "vibe-d": {"path": "../../"} }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/examples/app_skeleton/public/000077500000000000000000000000001324361747700204665ustar00rootroot00000000000000vibe.d-0.8.2/examples/app_skeleton/public/styles/000077500000000000000000000000001324361747700220115ustar00rootroot00000000000000vibe.d-0.8.2/examples/app_skeleton/public/styles/common.css000066400000000000000000000001141324361747700240070ustar00rootroot00000000000000 body { font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; } vibe.d-0.8.2/examples/app_skeleton/source/000077500000000000000000000000001324361747700205105ustar00rootroot00000000000000vibe.d-0.8.2/examples/app_skeleton/source/app.d000066400000000000000000000012071324361747700214350ustar00rootroot00000000000000module app; import vibe.http.fileserver; import vibe.http.router; import vibe.http.server; import index; import std.functional : toDelegate; void showError(HTTPServerRequest req, HTTPServerResponse res, HTTPServerErrorInfo error) { res.render!("error.dt", req, error); } shared static this() { auto router = new URLRouter; router.get("/", &showHome); router.get("/about", staticTemplate!"about.dt"); router.get("*", serveStaticFiles("public")); auto settings = new HTTPServerSettings; settings.bindAddresses = ["127.0.0.1"]; settings.port = 8080; settings.errorPageHandler = toDelegate(&showError); listenHTTP(settings, router); } vibe.d-0.8.2/examples/app_skeleton/source/index.d000066400000000000000000000002651324361747700217670ustar00rootroot00000000000000module index; import vibe.http.server; void showHome(HTTPServerRequest req, HTTPServerResponse res) { string username = "Tester Test"; res.render!("home.dt", req, username); } vibe.d-0.8.2/examples/app_skeleton/views/000077500000000000000000000000001324361747700203455ustar00rootroot00000000000000vibe.d-0.8.2/examples/app_skeleton/views/about.dt000066400000000000000000000001521324361747700220060ustar00rootroot00000000000000extends layout block title - auto title = "About"; block body p This is a new project with no content.vibe.d-0.8.2/examples/app_skeleton/views/error.dt000066400000000000000000000002761324361747700220340ustar00rootroot00000000000000extends layout block title - auto title = "HTTP error " ~ to!string(error.code); block body p An error has occured. We are really sorry about that! p Error description: #{error.message}vibe.d-0.8.2/examples/app_skeleton/views/home.dt000066400000000000000000000002151324361747700216240ustar00rootroot00000000000000extends layout block title - auto title = "Home"; block body p This is the homepage of the new empty project. p a(href="/about") Aboutvibe.d-0.8.2/examples/app_skeleton/views/layout.dt000066400000000000000000000002301324361747700222060ustar00rootroot00000000000000doctype html html head link(rel="stylesheet", href="styles/common.css") block title title #{title} - Empty project body h1= title block bodyvibe.d-0.8.2/examples/auth_basic/000077500000000000000000000000001324361747700166265ustar00rootroot00000000000000vibe.d-0.8.2/examples/auth_basic/dub.json000066400000000000000000000002701324361747700202720ustar00rootroot00000000000000{ "name": "auth-basic-example", "description": "Demonstrates basic authentication.", "dependencies": { "vibe-d:http": {"path": "../../"} }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/examples/auth_basic/source/000077500000000000000000000000001324361747700201265ustar00rootroot00000000000000vibe.d-0.8.2/examples/auth_basic/source/app.d000066400000000000000000000014611324361747700210550ustar00rootroot00000000000000import vibe.appmain; import vibe.http.auth.basic_auth; import vibe.http.router; import vibe.http.server; import std.functional : toDelegate; bool checkPassword(string user, string password) { return user == "admin" && password == "secret"; } shared static this() { auto router = new URLRouter; // the following routes are accessible without authentication: router.get("/", staticTemplate!"index.dt"); // now any request is matched and checked for authentication: router.any("*", performBasicAuth("Site Realm", toDelegate(&checkPassword))); // the following routes can only be reached if authenticated: router.get("/internal", staticTemplate!"internal.dt"); auto settings = new HTTPServerSettings; settings.port = 8080; settings.bindAddresses = ["::1", "127.0.0.1"]; listenHTTP(settings, router); } vibe.d-0.8.2/examples/auth_basic/views/000077500000000000000000000000001324361747700177635ustar00rootroot00000000000000vibe.d-0.8.2/examples/auth_basic/views/index.dt000066400000000000000000000002701324361747700214220ustar00rootroot00000000000000doctype html html head title Basic Authentication Example body p Click on the a(href="/internal") link | to access a protected page. vibe.d-0.8.2/examples/auth_basic/views/internal.dt000066400000000000000000000001631324361747700221300ustar00rootroot00000000000000doctype html html head title Basic Authentication Example body p This page is protected. vibe.d-0.8.2/examples/auth_digest/000077500000000000000000000000001324361747700170245ustar00rootroot00000000000000vibe.d-0.8.2/examples/auth_digest/dub.json000066400000000000000000000002721324361747700204720ustar00rootroot00000000000000{ "name": "auth-digest-example", "description": "Demonstrates digest authentication.", "dependencies": { "vibe-d:http": {"path": "../../"} }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/examples/auth_digest/source/000077500000000000000000000000001324361747700203245ustar00rootroot00000000000000vibe.d-0.8.2/examples/auth_digest/source/app.d000066400000000000000000000016661324361747700212620ustar00rootroot00000000000000import vibe.appmain; import vibe.http.auth.digest_auth; import vibe.http.router; import vibe.http.server; import std.functional : toDelegate; string digestPassword(string realm, string user) { if (realm == "Site Realm" && user == "admin") return createDigestPassword(realm, user, "secret"); return ""; } shared static this() { auto authinfo = new DigestAuthInfo; authinfo.realm = "Site Realm"; auto router = new URLRouter; // the following routes are accessible without authentication: router.get("/", staticTemplate!"index.dt"); // now any request is matched and checked for authentication: router.any("*", performDigestAuth(authinfo, toDelegate(&digestPassword))); // the following routes can only be reached if authenticated: router.get("/internal", staticTemplate!"internal.dt"); auto settings = new HTTPServerSettings; settings.port = 8080; settings.bindAddresses = ["::1", "127.0.0.1"]; listenHTTP(settings, router); } vibe.d-0.8.2/examples/auth_digest/views/000077500000000000000000000000001324361747700201615ustar00rootroot00000000000000vibe.d-0.8.2/examples/auth_digest/views/index.dt000066400000000000000000000002701324361747700216200ustar00rootroot00000000000000doctype html html head title Digest Authentication Example body p Click on the a(href="/internal") link | to access a protected page. vibe.d-0.8.2/examples/auth_digest/views/internal.dt000066400000000000000000000001641324361747700223270ustar00rootroot00000000000000doctype html html head title Digest Authentication Example body p This page is protected. vibe.d-0.8.2/examples/bench-http-request/000077500000000000000000000000001324361747700202465ustar00rootroot00000000000000vibe.d-0.8.2/examples/bench-http-request/dub.json000066400000000000000000000002341324361747700217120ustar00rootroot00000000000000{ "name": "bench-http-request", "dependencies": { "vibe-d:http": {"path": "../../"} }, "versions": ["VibeCustomMain", "VibeManualMemoryManagement"] } vibe.d-0.8.2/examples/bench-http-request/source/000077500000000000000000000000001324361747700215465ustar00rootroot00000000000000vibe.d-0.8.2/examples/bench-http-request/source/app.d000066400000000000000000000047261324361747700225040ustar00rootroot00000000000000import vibe.core.args; import vibe.core.core; import vibe.http.client; import core.atomic; import std.datetime; import std.functional; import std.stdio; shared long nreq = 0; shared long nerr = 0; shared long nreqc = 1000; shared long ndisconns = 0; shared long nconn = 0; shared long g_concurrency = 100; shared long g_requestDelay = 0; shared long g_maxKeepAliveRequests = 1000; void request(bool disconnect) { atomicOp!"+="(nconn, 1); try { requestHTTP("http://127.0.0.1:8080/empty", (scope req){ req.headers.remove("Accept-Encoding"); if (disconnect) { atomicOp!"+="(ndisconns, 1); req.headers["Connection"] = "close"; } }, (scope res){ if (g_requestDelay) sleep(g_requestDelay.msecs()); res.dropBody(); } ); } catch (Exception) { atomicOp!"+="(nerr, 1); } atomicOp!"-="(nconn, 1); atomicOp!"+="(nreq, 1); } void distTask() { static shared int s_threadCount = 0; static shared int s_token = 0; int id = atomicOp!"+="(s_threadCount, 1) - 1; while (true) { while (atomicLoad(s_token) != id && g_concurrency > 0) {} if (g_concurrency == 0) break; runTask({ long keep_alives = 0; while (true) { bool disconnect = ++keep_alives >= g_maxKeepAliveRequests; request(disconnect); if (disconnect) keep_alives = 0; } }); atomicOp!"+="(g_concurrency, -1); atomicStore(s_token, cast(int)((id + 1) % workerThreadCount)); } } void benchmark() { atomicOp!"+="(g_concurrency, -1); if (g_concurrency > 0) { runWorkerTaskDist(&distTask); while (atomicLoad(nreq) == 0) { sleep(1.msecs); } } StopWatch sw; sw.start(); ulong next_ts = 100; long keep_alives = 0; while (true) { auto tm = sw.peek().msecs; if (nreq >= nreqc && tm >= next_ts) { writefln("%s iterations: %s req/s, %s err/s (%s active conn, %s disconnects/s)", nreq, (nreq*1_000)/tm, (nerr*1_000)/tm, nconn, (ndisconns*1_000)/tm); nreqc += 1000; next_ts += 100; } bool disconnect = ++keep_alives >= g_maxKeepAliveRequests; request(disconnect); if (disconnect) keep_alives = 0; // if (nreq >= 5000) exitEventLoop(true); } } void main() { import vibe.core.args; readOption("c", &g_concurrency, "The maximum number of concurrent requests"); readOption("d", &g_requestDelay, "Artificial request delay in milliseconds"); readOption("k", &g_maxKeepAliveRequests, "Maximum number of keep-alive requests for each connection"); if (!finalizeCommandLineOptions()) return; runTask(toDelegate(&benchmark)); runEventLoop(); } vibe.d-0.8.2/examples/bench-http-server/000077500000000000000000000000001324361747700200645ustar00rootroot00000000000000vibe.d-0.8.2/examples/bench-http-server/dub.json000066400000000000000000000002341324361747700215300ustar00rootroot00000000000000{ "name": "bench-http-server", "dependencies": { "vibe-d:http": {"path": "../../"} }, "versions": ["VibeDefaultMain", "VibeManualMemoryManagement"] } vibe.d-0.8.2/examples/bench-http-server/public/000077500000000000000000000000001324361747700213425ustar00rootroot00000000000000vibe.d-0.8.2/examples/bench-http-server/public/10000066400000000000000000000000121324361747700214760ustar00rootroot000000000000001234567890vibe.d-0.8.2/examples/bench-http-server/public/10k000066400000000000000000000234201324361747700216610ustar00rootroot000000000000001234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890vibe.d-0.8.2/examples/bench-http-server/public/1k000066400000000000000000000017501324361747700216030ustar00rootroot000000000000001234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890vibe.d-0.8.2/examples/bench-http-server/source/000077500000000000000000000000001324361747700213645ustar00rootroot00000000000000vibe.d-0.8.2/examples/bench-http-server/source/app.d000066400000000000000000000044171324361747700223170ustar00rootroot00000000000000import vibe.appmain; import vibe.core.core; import vibe.http.fileserver; import vibe.http.router; import vibe.http.server; import vibe.core.stream : pipe, nullSink; import std.functional : toDelegate; shared string data; void empty(scope HTTPServerRequest req, scope HTTPServerResponse res) { res.writeBody(""); } void static_10(scope HTTPServerRequest req, scope HTTPServerResponse res) { res.writeBody(cast(string)data[0 .. 10]); } void static_1k(scope HTTPServerRequest req, scope HTTPServerResponse res) { res.writeBody(cast(string)data[0 .. 1000]); } void static_10k(scope HTTPServerRequest req, scope HTTPServerResponse res) { res.writeBody(cast(string)data[0 .. 10_000]); } void static_100k(scope HTTPServerRequest req, scope HTTPServerResponse res) { res.writeBody(cast(string)data[0 .. 100_000]); } void quit(scope HTTPServerRequest req, scope HTTPServerResponse res) { res.writeBody("Exiting event loop..."); exitEventLoop(); } void staticAnswer(TCPConnection conn) @safe nothrow { try { conn.write("HTTP/1.0 200 OK\r\nContent-Length: 0\r\nContent-Type: text/plain\r\nConnection: close\r\n\r\n"); conn.close(); } catch (Exception e) { // increment error counter } } pure char[] generateData() { char[] data; data.length = 100_000; foreach (i; 0 .. data.length) { data[i] = (i % 10) + '0'; if (i % 100 == 99) data[i] = '\n'; } return data; } shared static this() { //setLogLevel(LogLevel.Trace); data = generateData(); runWorkerTaskDist({ auto settings = new HTTPServerSettings; settings.port = 8080; settings.bindAddresses = ["127.0.0.1"]; settings.options = HTTPServerOption.parseURL|HTTPServerOption.reusePort; //settings.accessLogToConsole = true; auto fsettings = new HTTPFileServerSettings; fsettings.serverPathPrefix = "/file"; auto routes = new URLRouter; routes.get("/", staticTemplate!"home.dt"); routes.get("/empty", &empty); routes.get("/static/10", &static_10); routes.get("/static/1k", &static_1k); routes.get("/static/10k", &static_10k); routes.get("/static/100k", &static_100k); routes.get("/quit", &quit); routes.get("/file/*", serveStaticFiles("./public", fsettings)); routes.rebuild(); listenHTTP(settings, routes); listenTCP(8081, toDelegate(&staticAnswer), "127.0.0.1", TCPListenOptions.reusePort); }); } vibe.d-0.8.2/examples/bench-http-server/views/000077500000000000000000000000001324361747700212215ustar00rootroot00000000000000vibe.d-0.8.2/examples/bench-http-server/views/home.dt000066400000000000000000000007171324361747700225070ustar00rootroot00000000000000doctype html html head title Benchmark site body h1 Available tests: ol li a(href="empty") Empty response li a(href="static/10") 10B static page li a(href="static/1k") 1kB static page li a(href="static/10k") 10kB static page li a(href="file/10") 10B file li a(href="file/1k") 1kB file li a(href="file/10k") 10kB file li a(href="http://127.0.0.1:8081/") static response li a(href="quit") Quit vibe.d-0.8.2/examples/bench-mongodb/000077500000000000000000000000001324361747700172265ustar00rootroot00000000000000vibe.d-0.8.2/examples/bench-mongodb/dub.json000066400000000000000000000003151324361747700206720ustar00rootroot00000000000000{ "name": "bench-urlrouter", "description": "Benchmark for the URLRouter class", "dependencies": { "vibe-d:mongodb": {"path": "../../"} }, "versions": ["VibeCustomMain", "VibeRouterTreeMatch"] } vibe.d-0.8.2/examples/bench-mongodb/source/000077500000000000000000000000001324361747700205265ustar00rootroot00000000000000vibe.d-0.8.2/examples/bench-mongodb/source/app.d000066400000000000000000000016101324361747700214510ustar00rootroot00000000000000import vibe.core.log; import vibe.db.mongo.mongo; import std.datetime; import std.string : format; Duration runTimed(scope void delegate() del) { StopWatch sw; sw.start(); del(); sw.stop(); return cast(Duration)sw.peek; } void main() { enum nqueries = 100_000; struct Item { BsonObjectID _id; int i; double d; //string s; } auto db = connectMongoDB("localhost").getDatabase("test"); auto coll = db["benchmark"]; coll.remove(); foreach (i; 0 .. 10) { Item itm; itm._id = BsonObjectID.generate(); itm.i = i; itm.d = i * 1.3; //itm.s = "Hello, World!"; coll.insert(itm); } logInfo("Running queries..."); auto dur_query = runTimed({ struct Q { int i; } foreach (i; 0 .. nqueries) { auto res = coll.find!Item(Q(5)); res.front; //logInfo("%s %s", res.front.d, res.front.s); res.popFront(); } }); logInfo(" %s queries: %s", nqueries, dur_query); } vibe.d-0.8.2/examples/bench-urlrouter/000077500000000000000000000000001324361747700176445ustar00rootroot00000000000000vibe.d-0.8.2/examples/bench-urlrouter/dub.json000066400000000000000000000003121324361747700213050ustar00rootroot00000000000000{ "name": "bench-urlrouter", "description": "Benchmark for the URLRouter class", "dependencies": { "vibe-d:http": {"path": "../../"} }, "versions": ["VibeCustomMain", "VibeRouterTreeMatch"] } vibe.d-0.8.2/examples/bench-urlrouter/source/000077500000000000000000000000001324361747700211445ustar00rootroot00000000000000vibe.d-0.8.2/examples/bench-urlrouter/source/app.d000066400000000000000000000040771324361747700221010ustar00rootroot00000000000000import vibe.core.log; import vibe.http.router; import vibe.http.server; import vibe.inet.url; import std.datetime; import std.string : format; void req(scope HTTPServerRequest req, scope HTTPServerResponse res) { if (!res.headerWritten) res.writeVoidBody(); } Duration runTimed(scope void delegate() del) { StopWatch sw; sw.start(); del(); sw.stop(); return cast(Duration)sw.peek; } void main() { enum nroutes = 1_000; enum nrequests = 1_000_000; auto router = new URLRouter; logInfo("Setting up routes..."); auto duradd = runTimed({ foreach (i; 0 .. nroutes) router.get(format("/%s/:test1/%s/:test2", i/100, i), &req); }); import std.random; foreach (i; 0 .. nroutes) router.get(format("/%s%s", uniform!uint(), uniform!uint()), &req); logInfo("Performing first request..."); auto req = createTestHTTPServerRequest(URL("http://localhost/0/test/0/test"), HTTPMethod.GET); auto res = createTestHTTPServerResponse(); auto durfirst = runTimed({ router.handleRequest(req, res); }); logInfo("Performing first match requests..."); auto durfirstmatch = runTimed({ foreach (i; 0 .. nrequests) router.handleRequest(req, res); }); logInfo("Performing last match requests..."); req = createTestHTTPServerRequest(URL(format("http://localhost/%s/test/%s/test", (nroutes-1)/100, nroutes-1)), HTTPMethod.GET); auto durlastmatch = runTimed({ foreach (i; 0 .. nrequests) router.handleRequest(req, res); }); logInfo("Performing non-match requests..."); req = createTestHTTPServerRequest(URL("http://localhost/test/x/test"), HTTPMethod.GET); auto durnonmatch = runTimed({ foreach (i; 0 .. nrequests) router.handleRequest(req, res); }); version (VibeRouterTreeMatch) enum method = "tree match"; else enum method = "linear probe"; logInfo("Results (%s):", method); logInfo(" Add %s routes: %s", nroutes, duradd); logInfo(" First request: %s", durfirst); logInfo(" %s first match requests: %s", nrequests, durfirstmatch); logInfo(" %s last match requests: %s", nrequests, durlastmatch); logInfo(" %s non-match requests: %s", nrequests, durnonmatch); } vibe.d-0.8.2/examples/daytime/000077500000000000000000000000001324361747700161605ustar00rootroot00000000000000vibe.d-0.8.2/examples/daytime/dub.json000066400000000000000000000003111324361747700176200ustar00rootroot00000000000000{ "name": "daytime-example", "description": "Requests the current time using the daytime protocol.", "dependencies": { "vibe-d:stream": {"path": "../../"} }, "versions": ["VibeCustomMain"] } vibe.d-0.8.2/examples/daytime/source/000077500000000000000000000000001324361747700174605ustar00rootroot00000000000000vibe.d-0.8.2/examples/daytime/source/app.d000066400000000000000000000004271324361747700204100ustar00rootroot00000000000000import vibe.core.core; import vibe.core.log; import vibe.core.net; import vibe.stream.operations; void main() { auto conn = connectTCP("time-c.nist.gov", 13); conn.readLine(256, "\n"); // skip first newline logInfo("The time is: %s", cast(string)conn.readLine(256, "\n")); } vibe.d-0.8.2/examples/diet/000077500000000000000000000000001324361747700154515ustar00rootroot00000000000000vibe.d-0.8.2/examples/diet/dub.json000066400000000000000000000002661324361747700171220ustar00rootroot00000000000000{ "name": "diet-example", "description": "Displays a page using a Diet template.", "dependencies": { "vibe-d:http": {"path": "../../"} }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/examples/diet/source/000077500000000000000000000000001324361747700167515ustar00rootroot00000000000000vibe.d-0.8.2/examples/diet/source/app.d000066400000000000000000000007261324361747700177030ustar00rootroot00000000000000import vibe.appmain; import vibe.http.server; void handleRequest(scope HTTPServerRequest req, scope HTTPServerResponse res) @safe { string local_var = "Hello, World!"; bool is_admin = false; res.headers["Content-Type"] = "text/html"; res.render!("diet.dt", req, local_var, is_admin); } shared static this() { auto settings = new HTTPServerSettings; settings.port = 8080; settings.bindAddresses = ["::1", "127.0.0.1"]; listenHTTP(settings, &handleRequest); } vibe.d-0.8.2/examples/diet/views/000077500000000000000000000000001324361747700166065ustar00rootroot00000000000000vibe.d-0.8.2/examples/diet/views/diet.dt000066400000000000000000000015031324361747700200630ustar00rootroot00000000000000doctype html html(lang="en") head title= "pageTitle" ~ "X " body h1#caption Diet test page #{2+2}X p.first b First Paragraph! p(style='color: red;', class="HELLO") This br b is br b a test em= 13*12 | One line of text <Phew!> | Another line of text p(style="white-space: pre-line"). Two lines of Different text p Your user level: input#adm(type='checkbox', checked=is_admin ? "checked" : null) label(for="adm") Admin input#usr(type='checkbox', checked=!is_admin ? "checked" : null) label(for="usr") User #sanity(style='background-color: lightgreen') - if( 12 == 13 ) p b WTF! - else p - foreach( i; 0 .. 10 ) b Everything OK! (#{i}) br div#versions.minor Program versions: ul - foreach ( i; 1 .. 4) li= i vibe.d-0.8.2/examples/download/000077500000000000000000000000001324361747700163335ustar00rootroot00000000000000vibe.d-0.8.2/examples/download/dub.json000066400000000000000000000003001324361747700177710ustar00rootroot00000000000000{ "name": "download-example", "description": "Requests a page using the download() function.", "dependencies": { "vibe-d:http": {"path": "../../"} }, "versions": ["VibeCustomMain"] }vibe.d-0.8.2/examples/download/source/000077500000000000000000000000001324361747700176335ustar00rootroot00000000000000vibe.d-0.8.2/examples/download/source/app.d000066400000000000000000000003141324361747700205560ustar00rootroot00000000000000import vibe.core.log; import vibe.inet.urltransfer; import vibe.stream.operations; void main() { download("http://google.com/", (scope res){ logInfo("Response: %s", cast(string)res.readAll()); }); } vibe.d-0.8.2/examples/echoserver/000077500000000000000000000000001324361747700166715ustar00rootroot00000000000000vibe.d-0.8.2/examples/echoserver/dub.json000066400000000000000000000002751324361747700203420ustar00rootroot00000000000000{ "name": "echoserver-example", "description": "Implementation of a minimal echo server.", "dependencies": { "vibe-d:core": {"path": "../../"} }, "versions": ["VibeDefaultMain"] }vibe.d-0.8.2/examples/echoserver/source/000077500000000000000000000000001324361747700201715ustar00rootroot00000000000000vibe.d-0.8.2/examples/echoserver/source/app.d000066400000000000000000000002701324361747700211150ustar00rootroot00000000000000import vibe.appmain; import vibe.core.net; import vibe.core.stream; shared static this() { listenTCP(2000, (conn) { try conn.pipe(conn); catch (Exception e) conn.close(); }); } vibe.d-0.8.2/examples/file_operations/000077500000000000000000000000001324361747700177065ustar00rootroot00000000000000vibe.d-0.8.2/examples/file_operations/dub.json000066400000000000000000000002771324361747700213610ustar00rootroot00000000000000{ "name": "file-operations-example", "description": "Read/write/append with task yielding.", "dependencies": { "vibe-d:core": {"path": "../../"} }, "versions": ["VibeDefaultMain"] }vibe.d-0.8.2/examples/file_operations/source/000077500000000000000000000000001324361747700212065ustar00rootroot00000000000000vibe.d-0.8.2/examples/file_operations/source/app.d000066400000000000000000000020651324361747700221360ustar00rootroot00000000000000import vibe.core.core; import vibe.core.file; import std.stdio; shared static this() { FileStream fs = openFile("./hello.txt", FileMode.createTrunc); import std.datetime; StopWatch sw; sw.start(); bool finished; auto task = runTask({ void print(ulong pos, size_t sz) { auto off = fs.tell(); fs.seek(pos); ubyte[] dst = new ubyte[sz]; fs.read(dst); writefln("%s", cast(string)dst); fs.seek(off); } writeln("Task 1: Starting write operations to hello.txt"); while(sw.peek().msecs < 150) { fs.write("Some string is being written here .."); } writeln("Task 1: Final offset: ", fs.tell(), "B, file size: ", fs.size(), "B", ", total time: ", sw.peek().msecs, " ms"); fs.close(); finished = true; }); runTask({ while(!finished) { writeln("Task 2: Task 1 has written ", fs.size(), "B so far in ", sw.peek().msecs, " ms"); sleep(10.msecs); } removeFile("./hello.txt"); writeln("Task 2: Done. Press CTRL+C to exit."); sw.stop(); }); writeln("Main Thread: Writing small chunks in a yielding task (Task 1) for 150 ms"); } vibe.d-0.8.2/examples/future/000077500000000000000000000000001324361747700160365ustar00rootroot00000000000000vibe.d-0.8.2/examples/future/dub.json000066400000000000000000000003201324361747700174760ustar00rootroot00000000000000{ "name": "future-example", "description": "Demonstrates async()/Future usage.", "authors": ["Sönke Ludwig"], "dependencies": { "vibe-d:core": {"path": "../../"} }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/examples/future/source/000077500000000000000000000000001324361747700173365ustar00rootroot00000000000000vibe.d-0.8.2/examples/future/source/app.d000066400000000000000000000011041324361747700202570ustar00rootroot00000000000000import vibe.appmain; import vibe.core.core; import vibe.core.log; import vibe.core.concurrency; import core.time; shared static this() { runTask({ auto val = async({ logInfo("Starting to compute value."); sleep(500.msecs); // simulate some lengthy computation logInfo("Finished computing value."); return 32; }); logInfo("Starting computation in main task"); sleep(200.msecs); // simulate some lengthy computation logInfo("Finished computation in main task. Waiting for async value."); logInfo("Result: %s", val.getResult()); exitEventLoop(); }); } vibe.d-0.8.2/examples/http_forward_proxy/000077500000000000000000000000001324361747700204705ustar00rootroot00000000000000vibe.d-0.8.2/examples/http_forward_proxy/dub.json000066400000000000000000000002741324361747700221400ustar00rootroot00000000000000{ "name": "http-forward-proxy-example", "description": "Sets up a simple forward proxy.", "dependencies": { "vibe-d:http": {"path": "../../"} }, "versions": ["VibeDefaultMain"] }vibe.d-0.8.2/examples/http_forward_proxy/source/000077500000000000000000000000001324361747700217705ustar00rootroot00000000000000vibe.d-0.8.2/examples/http_forward_proxy/source/app.d000066400000000000000000000003651324361747700227210ustar00rootroot00000000000000import vibe.appmain; import vibe.http.proxy; import vibe.http.server; shared static this() { auto settings = new HTTPServerSettings; settings.port = 8080; settings.bindAddresses = ["::1", "127.0.0.1"]; listenHTTPForwardProxy(settings); } vibe.d-0.8.2/examples/http_info/000077500000000000000000000000001324361747700165165ustar00rootroot00000000000000vibe.d-0.8.2/examples/http_info/dub.json000066400000000000000000000003101324361747700201550ustar00rootroot00000000000000{ "name": "http-info-example", "description": "Displays request information using a Diet template.", "dependencies": { "vibe-d:http": {"path": "../../"} }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/examples/http_info/source/000077500000000000000000000000001324361747700200165ustar00rootroot00000000000000vibe.d-0.8.2/examples/http_info/source/app.d000066400000000000000000000004371324361747700207470ustar00rootroot00000000000000import vibe.appmain; import vibe.http.server; shared static this() { auto settings = new HTTPServerSettings; settings.sessionStore = new MemorySessionStore(); settings.port = 8080; settings.bindAddresses = ["::1", "127.0.0.1"]; listenHTTP(settings, staticTemplate!("info.dt")); } vibe.d-0.8.2/examples/http_info/views/000077500000000000000000000000001324361747700176535ustar00rootroot00000000000000vibe.d-0.8.2/examples/http_info/views/info.dt000066400000000000000000000012771324361747700211460ustar00rootroot00000000000000doctype html html(lang="en") head title Info body h1 #{req.method} #{req.requestURL} h2 Headers dl - foreach( name, value; req.headers ) dt=name dd=value h2 Cookies dl - foreach( name, value; req.cookies ) dt=name dd=value h2 Session - if (req.session) ul - foreach (name; req.session) li=name - else p No session. h2 Query fields p Query string: #{req.queryString} dl - foreach( name, value; req.query ) dt=name dd=value h2 Form Data dl - foreach( name, value; req.form ) dt=name dd=value form( action="/", method="POST" ) input(type="text", name="message") input(type="submit")vibe.d-0.8.2/examples/http_request/000077500000000000000000000000001324361747700172535ustar00rootroot00000000000000vibe.d-0.8.2/examples/http_request/dub.json000066400000000000000000000003261324361747700207210ustar00rootroot00000000000000{ "name": "http-request-example", "description": "Performs a custom HTTP request.", "authors": [ "Sönke Ludwig" ], "dependencies": { "vibe-d:http": {"path": "../../"} }, "versions": ["VibeCustomMain"] }vibe.d-0.8.2/examples/http_request/source/000077500000000000000000000000001324361747700205535ustar00rootroot00000000000000vibe.d-0.8.2/examples/http_request/source/app.d000066400000000000000000000004051324361747700214770ustar00rootroot00000000000000import vibe.core.log; import vibe.http.client; void main() { requestHTTP("http://www.google.com/", (scope req) { }, (scope res) { logInfo("Response: %d", res.statusCode); foreach (k, v; res.headers) logInfo("Header: %s: %s", k, v); } ); } vibe.d-0.8.2/examples/http_reverse_proxy/000077500000000000000000000000001324361747700204775ustar00rootroot00000000000000vibe.d-0.8.2/examples/http_reverse_proxy/dub.json000066400000000000000000000003201324361747700221370ustar00rootroot00000000000000{ "name": "http-reverse-proxy-example", "description": "Sets up a simple reverse proxy to a foreign server.", "dependencies": { "vibe-d:http": {"path": "../../"} }, "versions": ["VibeDefaultMain"] }vibe.d-0.8.2/examples/http_reverse_proxy/source/000077500000000000000000000000001324361747700217775ustar00rootroot00000000000000vibe.d-0.8.2/examples/http_reverse_proxy/source/app.d000066400000000000000000000004061324361747700227240ustar00rootroot00000000000000import vibe.appmain; import vibe.http.proxy; import vibe.http.server; shared static this() { auto settings = new HTTPServerSettings; settings.port = 8080; settings.bindAddresses = ["::1", "127.0.0.1"]; listenHTTPReverseProxy(settings, "vibed.org", 80); } vibe.d-0.8.2/examples/http_server/000077500000000000000000000000001324361747700170715ustar00rootroot00000000000000vibe.d-0.8.2/examples/http_server/dub.json000066400000000000000000000002521324361747700205350ustar00rootroot00000000000000{ "name": "http-server-example", "description": "A minimal HTTP server.", "dependencies": { "vibe-d:http": {"path": "../../"} }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/examples/http_server/source/000077500000000000000000000000001324361747700203715ustar00rootroot00000000000000vibe.d-0.8.2/examples/http_server/source/app.d000066400000000000000000000005711324361747700213210ustar00rootroot00000000000000import vibe.appmain; import vibe.http.server; void handleRequest(scope HTTPServerRequest req, scope HTTPServerResponse res) { if (req.path == "/") res.writeBody("Hello, World!", "text/plain"); } shared static this() { auto settings = new HTTPServerSettings; settings.port = 8080; settings.bindAddresses = ["::1", "127.0.0.1"]; listenHTTP(settings, &handleRequest); } vibe.d-0.8.2/examples/http_static_server/000077500000000000000000000000001324361747700204405ustar00rootroot00000000000000vibe.d-0.8.2/examples/http_static_server/dub.json000066400000000000000000000003111324361747700221000ustar00rootroot00000000000000{ "name": "http-static-server-example", "description": "Simple HTTP server that serves static files.", "dependencies": { "vibe-d:http": {"path": "../../"} }, "versions": ["VibeDefaultMain"] }vibe.d-0.8.2/examples/http_static_server/public/000077500000000000000000000000001324361747700217165ustar00rootroot00000000000000vibe.d-0.8.2/examples/http_static_server/public/gzip/000077500000000000000000000000001324361747700226675ustar00rootroot00000000000000vibe.d-0.8.2/examples/http_static_server/public/gzip/index_large.html000066400000000000000000000446251324361747700260510ustar00rootroot00000000000000 Hello, World! Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent viverra bibendum est et congue. Aliquam sit amet turpis mollis, mattis purus sed, dictum libero. Curabitur adipiscing, lectus adipiscing porttitor hendrerit, orci eros pharetra odio, at tincidunt lectus nisl nec neque. Sed accumsan tristique quam, sed luctus turpis tempus et. Sed porta consequat erat vel auctor. Aenean in erat in turpis pulvinar sodales eu nec erat. Aliquam erat volutpat. Donec consequat neque diam, lobortis ornare purus posuere vel. Sed accumsan imperdiet sem, in posuere arcu tincidunt eu. Vestibulum adipiscing, erat ac auctor consequat, nisl lorem convallis metus, vel molestie tortor arcu sit amet massa. Vivamus nec accumsan mauris, nec cursus felis. Duis iaculis ante augue, a semper massa feugiat at. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed at tortor nec velit adipiscing dictum. Quisque commodo venenatis urna in auctor. Integer consectetur dictum ipsum at venenatis. Donec sed massa quis elit pretium pharetra. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In tellus diam, posuere eget mollis et, tempus vitae dolor. Nullam vel eros lorem. Cras vitae vulputate felis. Praesent a lacinia augue, ut mattis nisi. In tempor magna a tortor accumsan, id pretium enim vestibulum. Sed pellentesque tortor vel massa bibendum vestibulum. Fusce at risus suscipit, accumsan lorem eget, pellentesque mi. In sit amet mi dictum lacus facilisis tristique. Cras dignissim massa eu arcu aliquam, in sodales dolor euismod. Cras dolor arcu, gravida eget justo eget, porta placerat lectus. Ut ut vehicula eros. Nulla ut pretium lacus. Ut in mauris a arcu facilisis sagittis vel sed nunc. Aliquam id interdum lorem. Nulla ipsum enim, interdum id viverra quis, condimentum id odio. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc a aliquam risus, quis consequat purus. Phasellus ullamcorper lectus in tellus sollicitudin, nec venenatis massa ullamcorper. In in ipsum rhoncus, porta justo a, ornare dolor. Nunc ut ipsum ullamcorper, sodales justo ut, vulputate lacus. Curabitur et nibh tempor, bibendum ligula vitae, tempus dolor. Pellentesque ut metus vehicula, tempor risus sed, adipiscing mi. Ut vehicula leo pulvinar diam blandit, vel convallis ipsum accumsan. Mauris faucibus erat auctor orci feugiat rutrum. Pellentesque gravida tempor risus, eu laoreet libero. Morbi et enim cursus, fermentum nulla accumsan, aliquet dui. Maecenas eu est quis dolor fringilla tincidunt at at est. In hac habitasse platea dictumst. Nam in dapibus nunc. Donec ac tortor sit amet lorem faucibus imperdiet in sit amet turpis. Nullam imperdiet augue eu nunc ullamcorper, id rhoncus augue blandit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec rhoncus eget augue non gravida. Mauris eu nibh eu sem viverra pellentesque sed nec mauris. Ut dapibus est ac faucibus scelerisque. Curabitur rhoncus massa at augue venenatis, ut congue nulla ultrices. Ut sit amet sollicitudin dolor. Morbi at libero nisi. Curabitur at dolor et sem varius accumsan non pretium odio. Sed molestie congue ipsum id dapibus. Aliquam orci mi, imperdiet sit amet tincidunt quis, bibendum id metus. Proin interdum adipiscing mi sed pretium. Fusce enim leo, convallis sit amet pharetra suscipit, venenatis vitae massa. Donec bibendum metus in quam commodo tempor. Aliquam sagittis purus sed pretium consectetur. Etiam consequat enim sit amet lacus condimentum, a feugiat nisi imperdiet. Morbi consequat sollicitudin libero, id gravida lectus rhoncus ac. Nunc posuere augue eleifend orci tristique porttitor. Aenean felis augue, vulputate eget auctor at, egestas nec elit. Duis porta quam nisl, quis sagittis orci aliquam in. Maecenas nec tincidunt arcu. Aliquam erat volutpat. Etiam semper magna sed enim porta, euismod tincidunt odio mattis. Cras interdum eget nulla at gravida. Mauris tristique arcu mauris, ut malesuada nisi scelerisque vel. Etiam tortor libero, dictum sit amet commodo a, pretium a sapien. Curabitur tempor sem a ligula mollis convallis. Aliquam sapien libero, molestie quis fringilla quis, faucibus vitae ipsum. Mauris in ultricies justo. Fusce aliquam dolor ut tortor molestie pretium id in nulla. Aenean aliquam nisi quis libero pulvinar, vitae bibendum augue mollis. Aenean eget diam justo. Nunc non purus eleifend, pretium turpis quis, consectetur tortor. Maecenas pretium in neque ut hendrerit. Suspendisse tempor urna et dolor fringilla malesuada. Nunc in accumsan libero. Cras malesuada condimentum euismod. Etiam adipiscing purus tellus, sed tincidunt elit porttitor tempus. Pellentesque molestie mollis sem, a iaculis orci commodo ut. Suspendisse auctor fringilla arcu, eu lobortis elit. Vestibulum consequat vulputate velit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In iaculis, nunc quis adipiscing iaculis, nibh est interdum velit, in placerat urna erat sed velit. Donec sapien enim, tempor at rutrum ac, convallis id nulla. Proin pretium vestibulum tellus ac varius. Duis faucibus pharetra mi, ut sodales nunc tempus id. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras in dui sed nibh accumsan rhoncus. Etiam nunc lorem, gravida ut pellentesque eget, dignissim non est. Vestibulum vulputate neque sapien, eu accumsan lacus molestie non. Praesent vel ipsum placerat, placerat nulla at, varius diam. Quisque eget ultrices nisi, quis tempus ante. Donec eget laoreet lacus. Cras imperdiet nisl vitae dolor posuere, sit amet imperdiet ipsum pharetra. Proin lobortis commodo sapien, et sodales ipsum rutrum vel. Suspendisse potenti. Sed lobortis, orci vel feugiat luctus, velit nunc auctor erat, ac volutpat sapien neque vitae odio. Pellentesque et erat velit. Proin euismod libero a tortor congue lacinia. In hac habitasse platea dictumst. Ut eget est eros. Mauris egestas, sapien nec cursus dictum, nunc urna pretium odio, eget tristique magna dolor et erat. Aenean viverra nibh mauris. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin vulputate congue velit, vitae ultricies odio pharetra eu. Ut ornare mauris vitae massa dignissim, a hendrerit dolor imperdiet. Nullam non sagittis justo. Interdum et malesuada fames ac ante ipsum primis in faucibus. Phasellus elementum eros nec purus laoreet ullamcorper. Sed mauris diam, sollicitudin id nisl a, auctor ultrices lectus. Donec sollicitudin cursus enim, a interdum lacus imperdiet iaculis. Aenean ultricies vitae tellus ac porttitor. Mauris vulputate dui quis venenatis ultricies. Fusce quis est semper, laoreet augue dapibus, ultricies nunc. Maecenas dictum venenatis eros, ac consectetur nunc vehicula id. In imperdiet, turpis in posuere blandit, dui purus gravida dui, vel placerat nisl ligula at tortor. Pellentesque neque nunc, tristique vitae volutpat vitae, faucibus in ipsum. Nullam suscipit eros id turpis congue semper. In eget tortor sapien. Donec rutrum mattis risus ut laoreet. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed fringilla sem in libero tincidunt, id cursus nibh auctor. Fusce quis metus magna. Nulla dolor ligula, vehicula tristique blandit nec, pellentesque dictum nisl. Nullam lobortis massa sit amet magna convallis congue. Nullam eget ultricies sem. Ut semper malesuada justo, vel pulvinar ligula iaculis ac. Curabitur orci magna, ornare sit amet fermentum quis, scelerisque condimentum est. Nunc id tristique nisl. Vivamus faucibus orci dolor, a tempus purus condimentum quis. Aliquam erat volutpat. Maecenas lacinia lacus eget lobortis vulputate. Suspendisse ac diam at diam laoreet placerat sit amet sed metus. Sed euismod sollicitudin ornare. Praesent ut mauris sit amet erat tincidunt tempor a sit amet metus. Praesent et tellus ultricies, congue turpis sed, lacinia nibh. Nullam sit amet tincidunt ligula. Vestibulum consequat tincidunt lobortis. Maecenas odio felis, sagittis eu bibendum et, mattis eu sapien. In hac habitasse platea dictumst. Nulla eleifend neque mi, eu blandit risus ultrices in. Aenean nec aliquam velit. Vivamus ac massa egestas, euismod arcu sagittis, pretium metus. Pellentesque posuere sapien a diam interdum semper. Nunc lacus ipsum, auctor id libero et, hendrerit tempor felis. Duis a lacus velit. Maecenas porttitor nibh vitae nibh hendrerit pulvinar. Praesent quam enim, ornare ac sapien non, mollis mattis augue. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean nec sapien tellus. Nullam condimentum porta leo non fermentum. Aenean porttitor turpis nec nulla aliquet mollis. Fusce varius neque libero, vitae consequat mi dictum ut. Quisque et congue ante. In id vulputate tellus, eget semper nulla. In at leo ut magna condimentum placerat a a ipsum. Vivamus lobortis ante ac leo fringilla, vel vestibulum nisi fermentum. Mauris nisi metus, lobortis id nisi sed, sollicitudin placerat turpis. Donec aliquam neque vel nunc congue sollicitudin nec vitae tortor. Sed eu lobortis neque. Sed suscipit nisi et sapien laoreet auctor. Integer condimentum ligula vel leo laoreet fringilla. Sed enim lorem, pulvinar eu eleifend eget, porta vitae mauris. Duis in tempus massa. Phasellus vitae tincidunt quam, ac vehicula orci. Aenean aliquam scelerisque nisi eget feugiat. Morbi arcu tortor, aliquet quis vestibulum ut, placerat vel nunc. Aenean faucibus dapibus nisl. Etiam at ullamcorper augue, ac egestas augue. Aenean eget mauris felis. Sed vestibulum tortor id commodo cursus. Curabitur eget rhoncus dui. Praesent vestibulum purus ut eros facilisis malesuada. Phasellus neque ligula, egestas vel velit quis, ultrices faucibus massa. Curabitur id suscipit orci. Donec fringilla nibh quis porta dapibus. Nullam et erat id ligula imperdiet gravida. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla malesuada nec diam eget porta. In nunc massa, porttitor eu vulputate sollicitudin, sagittis sed dui. Curabitur lobortis eros nec lobortis ultricies. Aenean at dolor ornare, blandit nibh semper, venenatis massa. Praesent non risus eget tellus laoreet ullamcorper at at lorem. In ac euismod felis. Nulla vehicula nisi vitae ornare placerat. Donec vel nisi tortor. In bibendum sit amet dolor id interdum. Nam sollicitudin magna sit amet rutrum vestibulum. Nullam id ultricies magna. Pellentesque blandit lacinia malesuada. Suspendisse sagittis, tellus sed placerat dictum, dolor metus tincidunt mi, sed volutpat purus purus nec urna. Curabitur eu lectus elit. Phasellus sollicitudin mauris justo, posuere molestie eros mattis eu. In elementum felis nec eros congue, at dapibus quam egestas. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce tempor at ligula nec pharetra. Proin dictum, sapien eget aliquam consequat, nisl quam tincidunt magna, eget blandit nulla orci sed nisi. Vivamus lobortis, mi quis ultricies ornare, elit nunc malesuada leo, in egestas quam neque eget leo. Proin scelerisque nisi ac mollis vestibulum. Vivamus sagittis nisl ut tempor mattis. Aliquam adipiscing, lorem eget interdum cursus, mi quam tempor metus, ut semper lacus odio ut nulla. Proin rutrum tincidunt augue in congue. Praesent blandit lacinia ornare. Sed non urna a risus consequat consectetur iaculis sit amet purus. Sed tempus aliquet nunc, quis convallis tortor ullamcorper vitae. Integer fringilla massa a lectus faucibus, et congue ipsum accumsan. Vestibulum at elementum augue. Sed congue adipiscing ullamcorper. Sed facilisis justo a ante tincidunt pharetra. Fusce odio leo, vehicula ut purus vitae, pellentesque feugiat massa. Nam sodales tellus quam, eu tristique lacus facilisis ut. Morbi vel nisl consectetur, rhoncus justo id, facilisis diam. Nunc pharetra ipsum in pharetra condimentum. Nam malesuada in augue sit amet posuere. Phasellus ornare justo in auctor accumsan. Phasellus faucibus accumsan enim, ut tempor turpis egestas in. Curabitur dapibus congue sodales. Curabitur et enim in magna elementum lacinia. Proin ornare varius justo ac rutrum. Duis malesuada lectus at consequat blandit. Sed sed faucibus lectus. Fusce placerat eleifend hendrerit. Maecenas lacinia porta libero, sit amet rhoncus lectus bibendum in. Phasellus sit amet posuere nulla, sed ultrices arcu. Duis eget nisi ac dui luctus lacinia sed a turpis. Aliquam rhoncus, erat non aliquam dictum, dolor libero aliquet metus, nec ornare mauris tellus a nulla. Nullam faucibus bibendum dolor, vel pretium mi porttitor at. Ut et elit laoreet, pellentesque orci vitae, feugiat dolor. Nam augue diam, lacinia quis felis nec, vulputate porttitor augue. In nisi diam, fringilla eget nibh nec, malesuada euismod dolor. Ut rhoncus ligula quis lacus bibendum lobortis. Nulla bibendum fermentum nulla pulvinar porttitor. Suspendisse sed eros a libero volutpat interdum. Duis orci sapien, ullamcorper at purus quis, porta tempus tellus. Morbi congue sit amet leo a condimentum. Quisque vestibulum, urna ut consequat semper, odio velit egestas dolor, eu commodo quam nisl non lectus. Maecenas ut justo ligula. Etiam lacinia et neque eu faucibus. Duis ut tincidunt augue. Duis rhoncus nisl at arcu luctus egestas eget id justo. Aenean congue orci vitae semper gravida. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse ornare varius dui ac lacinia. Nulla faucibus ullamcorper nisi a volutpat. Praesent quam diam, dictum ut dictum et, faucibus eget libero. Nulla convallis velit sit amet dapibus porta. In lorem metus, facilisis id nisi vitae, scelerisque ultrices arcu. Phasellus iaculis fringilla magna, sit amet mollis turpis pellentesque et. Cras at massa et nulla faucibus tincidunt at eu quam. Ut mauris risus, cursus sed luctus in, euismod id tellus. Fusce nibh augue, vestibulum eget urna et, mattis sodales mi. Curabitur eu augue nec leo fringilla faucibus vel vel quam. Donec egestas ipsum ac nibh blandit ultricies. Nullam luctus facilisis urna, vel pellentesque quam ullamcorper sit amet. Nulla commodo auctor ultricies. In fringilla arcu at nisi molestie, aliquam volutpat lacus euismod. Nam at sagittis massa. Phasellus eu nisi fringilla, faucibus turpis ac, elementum nisl. Mauris sapien justo, placerat et hendrerit quis, aliquet at felis. Ut ac cursus sem. Etiam tincidunt nulla in arcu lacinia, in pellentesque dui aliquet. Curabitur non eros non mauris dapibus aliquet sit amet sit amet ante. Integer mollis, mi sit amet vehicula porta, tellus lacus sodales est, viverra pulvinar metus augue ut quam. Maecenas lacinia nulla mauris, tempus ornare erat luctus sed. Etiam laoreet a leo id suscipit. Etiam sit amet sem et velit convallis sodales et at massa. Phasellus ac orci risus. Sed in risus id ipsum tincidunt sagittis. Etiam sed tincidunt elit, at tempus lectus. Morbi sit amet lorem ultricies, lobortis urna a, vestibulum erat. Mauris eget pharetra ante, sollicitudin tincidunt dui. Mauris metus magna, suscipit sed sapien ac, bibendum gravida felis. Morbi fringilla urna non enim dictum mattis. Sed aliquet hendrerit velit, et accumsan lorem luctus at. In sed mi aliquet arcu molestie eleifend at vitae tortor. Nam at nisl non diam laoreet vulputate ac sollicitudin nisl. Quisque libero orci, faucibus et pharetra non, porta nec dui. Aenean sed condimentum nisl. Nunc ornare dui vitae adipiscing molestie. In eu metus nisi. Integer ullamcorper tellus nec diam bibendum, a egestas ipsum pharetra. Vestibulum varius molestie elementum. Integer ut nisl in felis hendrerit semper a ac felis. Phasellus vulputate iaculis mi id viverra. Phasellus imperdiet mi sed est congue malesuada. Nulla in egestas felis. Morbi scelerisque adipiscing vehicula. Cras sagittis mollis justo, eu posuere lorem. Phasellus dapibus diam eros, vel fermentum nisl pulvinar quis. Donec ut malesuada leo. Nullam viverra congue sodales. Sed quis vulputate neque, id mollis nunc. Cras a magna sit amet nisi adipiscing fringilla non non felis. Sed neque ante, fringilla id enim non, scelerisque fermentum metus. Proin augue purus, eleifend at egestas vel, scelerisque quis elit. Morbi ut nibh id velit faucibus auctor. Sed accumsan laoreet blandit. Vestibulum ultrices mi est. Sed id ipsum eu ante euismod fringilla. Vestibulum vel tincidunt turpis. Nam ante ipsum, congue consectetur gravida id, venenatis quis nisi. Quisque facilisis vehicula neque, id aliquet quam interdum in. Vivamus id ipsum fringilla, consectetur tortor eu, luctus magna. Pellentesque vel turpis leo. Ut non elementum mi, ac auctor ligula. Maecenas tincidunt enim eget massa mattis pharetra. Aenean ligula diam, pretium nec pharetra eget, faucibus at sem. Quisque vitae odio quis turpis ornare congue quis ut odio. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec aliquet tincidunt turpis, a ultricies augue commodo non. Duis aliquet tincidunt libero, ac egestas dui tristique non. Etiam consectetur urna ut urna mollis, egestas dignissim metus faucibus. Ut quis neque eu tortor commodo mattis. Donec eros erat, congue vel lorem hendrerit, ultrices facilisis arcu. Curabitur pulvinar feugiat orci sit amet blandit. Morbi tincidunt nunc vitae neque vulputate tempus. Curabitur leo mauris, sollicitudin ut placerat sit amet, laoreet ut sapien. Fusce vel lobortis sem. Cras tincidunt porttitor tincidunt. Sed vitae volutpat tellus, non placerat elit. Sed varius sem et massa congue, ac volutpat augue rhoncus. Maecenas pharetra, arcu quis adipiscing tristique, est erat molestie felis, et tempus sem purus sed lectus. Duis hendrerit, mi nec consectetur aliquam, tortor lacus pellentesque augue, eu accumsan massa enim vel sem. Sed iaculis eu orci ut pharetra. Nulla pharetra pellentesque sapien rutrum rhoncus. Proin dignissim leo sit amet mi sodales consequat. Pellentesque ac rutrum eros, sit amet aliquet ante. Maecenas in ultrices augue, eu tincidunt justo. Praesent rhoncus lacinia sollicitudin. Praesent ut ante justo. Pellentesque feugiat condimentum erat, in mattis enim lobortis porttitor. Praesent tincidunt, nunc in suscipit venenatis, mauris est dapibus purus, vel tincidunt tellus magna at tellus. Fusce vestibulum orci vitae nunc porta volutpat. Donec id leo arcu. Phasellus elit felis, pellentesque a sodales sed, condimentum pulvinar nisi. Vivamus volutpat turpis in faucibus molestie. Proin mollis rhoncus orci sed elementum. Suspendisse potenti. Nulla faucibus purus sed molestie porttitor. Ut laoreet tempus purus, eget consequat justo dignissim porttitor. Praesent aliquet sapien id turpis ornare dignissim. vibe.d-0.8.2/examples/http_static_server/public/gzip/index_large.html.gz000066400000000000000000000131601324361747700264560ustar00rootroot00000000000000qQindex_large.html\ێXn|v~.|kx`EϪLM1R./^ճX臙NI`/}}n?_i?iZu뗟O֗/kweZnk{7ǽ˼}܏nѶkߺqjKuq޻1нqmm]~;ƗߧqNn'4þˏc=no}wk]3 ñderAYcYNl]k=,ury,t51 io6m*}ӥuuzܷamlet;.;C~w\`DBl>Ʃeˌ(7n3IAb (mo<rz>Sz' vQWl &Cm8вe$uC&^{mW"A,t~k;^&73K,n\6݋4E)N1>|FK1M#Nnu/~H MYVH9vG)qƅ%7JGǹB5TV59]A g= ˔7Gǯ~&7`.#~3Jއ dQq]V 9&QiHI6D$~Iep8ۡ|A)k5f}<'2>qKU{}g.S{SO`O!mv=\JD k}-8Kiu vkD]FKg8o$r@뱯e{յ ^+fqgs3{ټ;H~;qʹP6g^@mk46IKĻ8+$'8ljmx- /!us a-Ĥό2@?dm<:)ؔ} ypGtp-{nZ=9hN$xG,b/(B<#PC^8[2}B{رamz *UM*(wnuo}%4A_E!qfz.s@C_ H&Wpr[xI,@% =93\TRaB_?mײDלft3eIz|iJ?޼phZ8wW(.~2SF}7'i/VZo0gժ*V$LaF{6T{EkGlQOƌn /[qE 'Hcr訌`?GGᮧGגHЍsj&' 32zE[>mA`xȏ݋|截+1f8[D帍1.\>mK3 :xd,f/[ \pnOY=2 d#ӡ*u_%&ԓ"#X x+21DMoz}Pf[%_l{ƒ-S8iڜ;`ݏCuC)Ki<,@2B_o}!*UEgFU!ܐ=N7VE?`u2 @~(2aN Wd4?l^83RH~#gcc7 !/Gq-+KFeVoy47B](;  0' gUqk^/‡ r hCSB/w RdžuXC:Q& JΊ̖FqT†a."q}wZ$Ӎ ֑%뤸tȻYM{} /t$WCќZ >(sAg{828M@?g8VS~tM3 n-vY:EWh1@2%zsQij$L7ӆ]d֯MB4U"9&3)FlA@IxkK֗EwԫW@uk΃Ų1zJLH-r⏅rf\;<=T3m(o *`Rcpaκ*1J- au/F`C,f+_F< .kl9&нŦC3ǜz;5 bE`ũRhSzkʑ4e%8-g )ڧy07d1j$,V:r6rjk=j s̞'.dz(lP'OlͲ̰3`vxȏZl6`C2;1r PeE&4_MIY|PKnJ3.[q'D4E4C1#6 gFiZF\?)@d+ʞ$" ~$1ۢ ,v}R Ĵs>RR!;[J^z'Y].^ #)ɛո^= 7l>"N2bNY(_ЁaVE2_cl+XoQQtO _TNxV>+Cq9,ARnƝc;X:ʟ5c&z)ɹ>ESރd+NB4 N3t0xd㖎v @vPަm\%$?O'ڇ(쒈 sR%kk"\ KY2m6\܎i\\CJ"a>! 2wԾP灠K 12f lɘWq;sI,qU\OIyEĞQ@v˵ظ\00Z0G?Q2d+*2psyWDe]׹grapu 9y)# )]3dF+`v~/!Oͣ;ƄDj ^͟tV2򜹐Q$s qBpuCPx1Ywɂ}U,OS͹B C3vK@:Z}od\).qG̀ ur<補T$ Z丄嬑1@aSk?<+FXZ'2uFUz|bA'p` Eb&Z> {kdGtUb^1iS_h~[6cZ5G/'{KAŖ́>GO#ܞPCE͔0dD\ 3> |EB/&@2޻d&nq \R&O-iodbk,> P:ngYxƈH)zOz/@eܧkӵ̍π5 *g`W3T8gp~ŋ> 냶 ) yHF,2q&)JNmȳj+润xG*x+~NU{ swcwWi Y% >PjQ'x4Pz!`bMT=C9e5= .17vrJA3;^Q9BնqhlzGSNpۛ Y-lp踀<`vIXf5 /66̹Us14`E 9(^;Xq5N͸;Q(d!ʙT< U>w5*x̄5ԙ;O"ZLe+ 9[ooKe>6{Oͯ {I9uEo>!*RKThf r'HÜ7xZ8 MAcծ(f2ܤWx^|۟X[;s1㋥A9&fsjt?Gٖ5ҕcJgs0D݊'D|g*5=8a$#m"Ahfy 6ݘ]d:&oE(EtÛb?vE=C=簇=S?'Ơ|Ήym9j UyʪS·(Q` "GA <Ȳ%ʖG:I^!> d9$ʪ8xwaJ!nq_iTҢv71B.c<̯|a**-Mz@(,10]D/Qڠё% 8dm4`tnuf Hello, World!

It works!

You have successfully installed the minimal static HTTP server!

vibe.d-0.8.2/examples/http_static_server/public/index_large.html000066400000000000000000000446251324361747700251000ustar00rootroot00000000000000 Hello, World! Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent viverra bibendum est et congue. Aliquam sit amet turpis mollis, mattis purus sed, dictum libero. Curabitur adipiscing, lectus adipiscing porttitor hendrerit, orci eros pharetra odio, at tincidunt lectus nisl nec neque. Sed accumsan tristique quam, sed luctus turpis tempus et. Sed porta consequat erat vel auctor. Aenean in erat in turpis pulvinar sodales eu nec erat. Aliquam erat volutpat. Donec consequat neque diam, lobortis ornare purus posuere vel. Sed accumsan imperdiet sem, in posuere arcu tincidunt eu. Vestibulum adipiscing, erat ac auctor consequat, nisl lorem convallis metus, vel molestie tortor arcu sit amet massa. Vivamus nec accumsan mauris, nec cursus felis. Duis iaculis ante augue, a semper massa feugiat at. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed at tortor nec velit adipiscing dictum. Quisque commodo venenatis urna in auctor. Integer consectetur dictum ipsum at venenatis. Donec sed massa quis elit pretium pharetra. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In tellus diam, posuere eget mollis et, tempus vitae dolor. Nullam vel eros lorem. Cras vitae vulputate felis. Praesent a lacinia augue, ut mattis nisi. In tempor magna a tortor accumsan, id pretium enim vestibulum. Sed pellentesque tortor vel massa bibendum vestibulum. Fusce at risus suscipit, accumsan lorem eget, pellentesque mi. In sit amet mi dictum lacus facilisis tristique. Cras dignissim massa eu arcu aliquam, in sodales dolor euismod. Cras dolor arcu, gravida eget justo eget, porta placerat lectus. Ut ut vehicula eros. Nulla ut pretium lacus. Ut in mauris a arcu facilisis sagittis vel sed nunc. Aliquam id interdum lorem. Nulla ipsum enim, interdum id viverra quis, condimentum id odio. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc a aliquam risus, quis consequat purus. Phasellus ullamcorper lectus in tellus sollicitudin, nec venenatis massa ullamcorper. In in ipsum rhoncus, porta justo a, ornare dolor. Nunc ut ipsum ullamcorper, sodales justo ut, vulputate lacus. Curabitur et nibh tempor, bibendum ligula vitae, tempus dolor. Pellentesque ut metus vehicula, tempor risus sed, adipiscing mi. Ut vehicula leo pulvinar diam blandit, vel convallis ipsum accumsan. Mauris faucibus erat auctor orci feugiat rutrum. Pellentesque gravida tempor risus, eu laoreet libero. Morbi et enim cursus, fermentum nulla accumsan, aliquet dui. Maecenas eu est quis dolor fringilla tincidunt at at est. In hac habitasse platea dictumst. Nam in dapibus nunc. Donec ac tortor sit amet lorem faucibus imperdiet in sit amet turpis. Nullam imperdiet augue eu nunc ullamcorper, id rhoncus augue blandit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec rhoncus eget augue non gravida. Mauris eu nibh eu sem viverra pellentesque sed nec mauris. Ut dapibus est ac faucibus scelerisque. Curabitur rhoncus massa at augue venenatis, ut congue nulla ultrices. Ut sit amet sollicitudin dolor. Morbi at libero nisi. Curabitur at dolor et sem varius accumsan non pretium odio. Sed molestie congue ipsum id dapibus. Aliquam orci mi, imperdiet sit amet tincidunt quis, bibendum id metus. Proin interdum adipiscing mi sed pretium. Fusce enim leo, convallis sit amet pharetra suscipit, venenatis vitae massa. Donec bibendum metus in quam commodo tempor. Aliquam sagittis purus sed pretium consectetur. Etiam consequat enim sit amet lacus condimentum, a feugiat nisi imperdiet. Morbi consequat sollicitudin libero, id gravida lectus rhoncus ac. Nunc posuere augue eleifend orci tristique porttitor. Aenean felis augue, vulputate eget auctor at, egestas nec elit. Duis porta quam nisl, quis sagittis orci aliquam in. Maecenas nec tincidunt arcu. Aliquam erat volutpat. Etiam semper magna sed enim porta, euismod tincidunt odio mattis. Cras interdum eget nulla at gravida. Mauris tristique arcu mauris, ut malesuada nisi scelerisque vel. Etiam tortor libero, dictum sit amet commodo a, pretium a sapien. Curabitur tempor sem a ligula mollis convallis. Aliquam sapien libero, molestie quis fringilla quis, faucibus vitae ipsum. Mauris in ultricies justo. Fusce aliquam dolor ut tortor molestie pretium id in nulla. Aenean aliquam nisi quis libero pulvinar, vitae bibendum augue mollis. Aenean eget diam justo. Nunc non purus eleifend, pretium turpis quis, consectetur tortor. Maecenas pretium in neque ut hendrerit. Suspendisse tempor urna et dolor fringilla malesuada. Nunc in accumsan libero. Cras malesuada condimentum euismod. Etiam adipiscing purus tellus, sed tincidunt elit porttitor tempus. Pellentesque molestie mollis sem, a iaculis orci commodo ut. Suspendisse auctor fringilla arcu, eu lobortis elit. Vestibulum consequat vulputate velit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In iaculis, nunc quis adipiscing iaculis, nibh est interdum velit, in placerat urna erat sed velit. Donec sapien enim, tempor at rutrum ac, convallis id nulla. Proin pretium vestibulum tellus ac varius. Duis faucibus pharetra mi, ut sodales nunc tempus id. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras in dui sed nibh accumsan rhoncus. Etiam nunc lorem, gravida ut pellentesque eget, dignissim non est. Vestibulum vulputate neque sapien, eu accumsan lacus molestie non. Praesent vel ipsum placerat, placerat nulla at, varius diam. Quisque eget ultrices nisi, quis tempus ante. Donec eget laoreet lacus. Cras imperdiet nisl vitae dolor posuere, sit amet imperdiet ipsum pharetra. Proin lobortis commodo sapien, et sodales ipsum rutrum vel. Suspendisse potenti. Sed lobortis, orci vel feugiat luctus, velit nunc auctor erat, ac volutpat sapien neque vitae odio. Pellentesque et erat velit. Proin euismod libero a tortor congue lacinia. In hac habitasse platea dictumst. Ut eget est eros. Mauris egestas, sapien nec cursus dictum, nunc urna pretium odio, eget tristique magna dolor et erat. Aenean viverra nibh mauris. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin vulputate congue velit, vitae ultricies odio pharetra eu. Ut ornare mauris vitae massa dignissim, a hendrerit dolor imperdiet. Nullam non sagittis justo. Interdum et malesuada fames ac ante ipsum primis in faucibus. Phasellus elementum eros nec purus laoreet ullamcorper. Sed mauris diam, sollicitudin id nisl a, auctor ultrices lectus. Donec sollicitudin cursus enim, a interdum lacus imperdiet iaculis. Aenean ultricies vitae tellus ac porttitor. Mauris vulputate dui quis venenatis ultricies. Fusce quis est semper, laoreet augue dapibus, ultricies nunc. Maecenas dictum venenatis eros, ac consectetur nunc vehicula id. In imperdiet, turpis in posuere blandit, dui purus gravida dui, vel placerat nisl ligula at tortor. Pellentesque neque nunc, tristique vitae volutpat vitae, faucibus in ipsum. Nullam suscipit eros id turpis congue semper. In eget tortor sapien. Donec rutrum mattis risus ut laoreet. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed fringilla sem in libero tincidunt, id cursus nibh auctor. Fusce quis metus magna. Nulla dolor ligula, vehicula tristique blandit nec, pellentesque dictum nisl. Nullam lobortis massa sit amet magna convallis congue. Nullam eget ultricies sem. Ut semper malesuada justo, vel pulvinar ligula iaculis ac. Curabitur orci magna, ornare sit amet fermentum quis, scelerisque condimentum est. Nunc id tristique nisl. Vivamus faucibus orci dolor, a tempus purus condimentum quis. Aliquam erat volutpat. Maecenas lacinia lacus eget lobortis vulputate. Suspendisse ac diam at diam laoreet placerat sit amet sed metus. Sed euismod sollicitudin ornare. Praesent ut mauris sit amet erat tincidunt tempor a sit amet metus. Praesent et tellus ultricies, congue turpis sed, lacinia nibh. Nullam sit amet tincidunt ligula. Vestibulum consequat tincidunt lobortis. Maecenas odio felis, sagittis eu bibendum et, mattis eu sapien. In hac habitasse platea dictumst. Nulla eleifend neque mi, eu blandit risus ultrices in. Aenean nec aliquam velit. Vivamus ac massa egestas, euismod arcu sagittis, pretium metus. Pellentesque posuere sapien a diam interdum semper. Nunc lacus ipsum, auctor id libero et, hendrerit tempor felis. Duis a lacus velit. Maecenas porttitor nibh vitae nibh hendrerit pulvinar. Praesent quam enim, ornare ac sapien non, mollis mattis augue. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aenean nec sapien tellus. Nullam condimentum porta leo non fermentum. Aenean porttitor turpis nec nulla aliquet mollis. Fusce varius neque libero, vitae consequat mi dictum ut. Quisque et congue ante. In id vulputate tellus, eget semper nulla. In at leo ut magna condimentum placerat a a ipsum. Vivamus lobortis ante ac leo fringilla, vel vestibulum nisi fermentum. Mauris nisi metus, lobortis id nisi sed, sollicitudin placerat turpis. Donec aliquam neque vel nunc congue sollicitudin nec vitae tortor. Sed eu lobortis neque. Sed suscipit nisi et sapien laoreet auctor. Integer condimentum ligula vel leo laoreet fringilla. Sed enim lorem, pulvinar eu eleifend eget, porta vitae mauris. Duis in tempus massa. Phasellus vitae tincidunt quam, ac vehicula orci. Aenean aliquam scelerisque nisi eget feugiat. Morbi arcu tortor, aliquet quis vestibulum ut, placerat vel nunc. Aenean faucibus dapibus nisl. Etiam at ullamcorper augue, ac egestas augue. Aenean eget mauris felis. Sed vestibulum tortor id commodo cursus. Curabitur eget rhoncus dui. Praesent vestibulum purus ut eros facilisis malesuada. Phasellus neque ligula, egestas vel velit quis, ultrices faucibus massa. Curabitur id suscipit orci. Donec fringilla nibh quis porta dapibus. Nullam et erat id ligula imperdiet gravida. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla malesuada nec diam eget porta. In nunc massa, porttitor eu vulputate sollicitudin, sagittis sed dui. Curabitur lobortis eros nec lobortis ultricies. Aenean at dolor ornare, blandit nibh semper, venenatis massa. Praesent non risus eget tellus laoreet ullamcorper at at lorem. In ac euismod felis. Nulla vehicula nisi vitae ornare placerat. Donec vel nisi tortor. In bibendum sit amet dolor id interdum. Nam sollicitudin magna sit amet rutrum vestibulum. Nullam id ultricies magna. Pellentesque blandit lacinia malesuada. Suspendisse sagittis, tellus sed placerat dictum, dolor metus tincidunt mi, sed volutpat purus purus nec urna. Curabitur eu lectus elit. Phasellus sollicitudin mauris justo, posuere molestie eros mattis eu. In elementum felis nec eros congue, at dapibus quam egestas. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce tempor at ligula nec pharetra. Proin dictum, sapien eget aliquam consequat, nisl quam tincidunt magna, eget blandit nulla orci sed nisi. Vivamus lobortis, mi quis ultricies ornare, elit nunc malesuada leo, in egestas quam neque eget leo. Proin scelerisque nisi ac mollis vestibulum. Vivamus sagittis nisl ut tempor mattis. Aliquam adipiscing, lorem eget interdum cursus, mi quam tempor metus, ut semper lacus odio ut nulla. Proin rutrum tincidunt augue in congue. Praesent blandit lacinia ornare. Sed non urna a risus consequat consectetur iaculis sit amet purus. Sed tempus aliquet nunc, quis convallis tortor ullamcorper vitae. Integer fringilla massa a lectus faucibus, et congue ipsum accumsan. Vestibulum at elementum augue. Sed congue adipiscing ullamcorper. Sed facilisis justo a ante tincidunt pharetra. Fusce odio leo, vehicula ut purus vitae, pellentesque feugiat massa. Nam sodales tellus quam, eu tristique lacus facilisis ut. Morbi vel nisl consectetur, rhoncus justo id, facilisis diam. Nunc pharetra ipsum in pharetra condimentum. Nam malesuada in augue sit amet posuere. Phasellus ornare justo in auctor accumsan. Phasellus faucibus accumsan enim, ut tempor turpis egestas in. Curabitur dapibus congue sodales. Curabitur et enim in magna elementum lacinia. Proin ornare varius justo ac rutrum. Duis malesuada lectus at consequat blandit. Sed sed faucibus lectus. Fusce placerat eleifend hendrerit. Maecenas lacinia porta libero, sit amet rhoncus lectus bibendum in. Phasellus sit amet posuere nulla, sed ultrices arcu. Duis eget nisi ac dui luctus lacinia sed a turpis. Aliquam rhoncus, erat non aliquam dictum, dolor libero aliquet metus, nec ornare mauris tellus a nulla. Nullam faucibus bibendum dolor, vel pretium mi porttitor at. Ut et elit laoreet, pellentesque orci vitae, feugiat dolor. Nam augue diam, lacinia quis felis nec, vulputate porttitor augue. In nisi diam, fringilla eget nibh nec, malesuada euismod dolor. Ut rhoncus ligula quis lacus bibendum lobortis. Nulla bibendum fermentum nulla pulvinar porttitor. Suspendisse sed eros a libero volutpat interdum. Duis orci sapien, ullamcorper at purus quis, porta tempus tellus. Morbi congue sit amet leo a condimentum. Quisque vestibulum, urna ut consequat semper, odio velit egestas dolor, eu commodo quam nisl non lectus. Maecenas ut justo ligula. Etiam lacinia et neque eu faucibus. Duis ut tincidunt augue. Duis rhoncus nisl at arcu luctus egestas eget id justo. Aenean congue orci vitae semper gravida. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse ornare varius dui ac lacinia. Nulla faucibus ullamcorper nisi a volutpat. Praesent quam diam, dictum ut dictum et, faucibus eget libero. Nulla convallis velit sit amet dapibus porta. In lorem metus, facilisis id nisi vitae, scelerisque ultrices arcu. Phasellus iaculis fringilla magna, sit amet mollis turpis pellentesque et. Cras at massa et nulla faucibus tincidunt at eu quam. Ut mauris risus, cursus sed luctus in, euismod id tellus. Fusce nibh augue, vestibulum eget urna et, mattis sodales mi. Curabitur eu augue nec leo fringilla faucibus vel vel quam. Donec egestas ipsum ac nibh blandit ultricies. Nullam luctus facilisis urna, vel pellentesque quam ullamcorper sit amet. Nulla commodo auctor ultricies. In fringilla arcu at nisi molestie, aliquam volutpat lacus euismod. Nam at sagittis massa. Phasellus eu nisi fringilla, faucibus turpis ac, elementum nisl. Mauris sapien justo, placerat et hendrerit quis, aliquet at felis. Ut ac cursus sem. Etiam tincidunt nulla in arcu lacinia, in pellentesque dui aliquet. Curabitur non eros non mauris dapibus aliquet sit amet sit amet ante. Integer mollis, mi sit amet vehicula porta, tellus lacus sodales est, viverra pulvinar metus augue ut quam. Maecenas lacinia nulla mauris, tempus ornare erat luctus sed. Etiam laoreet a leo id suscipit. Etiam sit amet sem et velit convallis sodales et at massa. Phasellus ac orci risus. Sed in risus id ipsum tincidunt sagittis. Etiam sed tincidunt elit, at tempus lectus. Morbi sit amet lorem ultricies, lobortis urna a, vestibulum erat. Mauris eget pharetra ante, sollicitudin tincidunt dui. Mauris metus magna, suscipit sed sapien ac, bibendum gravida felis. Morbi fringilla urna non enim dictum mattis. Sed aliquet hendrerit velit, et accumsan lorem luctus at. In sed mi aliquet arcu molestie eleifend at vitae tortor. Nam at nisl non diam laoreet vulputate ac sollicitudin nisl. Quisque libero orci, faucibus et pharetra non, porta nec dui. Aenean sed condimentum nisl. Nunc ornare dui vitae adipiscing molestie. In eu metus nisi. Integer ullamcorper tellus nec diam bibendum, a egestas ipsum pharetra. Vestibulum varius molestie elementum. Integer ut nisl in felis hendrerit semper a ac felis. Phasellus vulputate iaculis mi id viverra. Phasellus imperdiet mi sed est congue malesuada. Nulla in egestas felis. Morbi scelerisque adipiscing vehicula. Cras sagittis mollis justo, eu posuere lorem. Phasellus dapibus diam eros, vel fermentum nisl pulvinar quis. Donec ut malesuada leo. Nullam viverra congue sodales. Sed quis vulputate neque, id mollis nunc. Cras a magna sit amet nisi adipiscing fringilla non non felis. Sed neque ante, fringilla id enim non, scelerisque fermentum metus. Proin augue purus, eleifend at egestas vel, scelerisque quis elit. Morbi ut nibh id velit faucibus auctor. Sed accumsan laoreet blandit. Vestibulum ultrices mi est. Sed id ipsum eu ante euismod fringilla. Vestibulum vel tincidunt turpis. Nam ante ipsum, congue consectetur gravida id, venenatis quis nisi. Quisque facilisis vehicula neque, id aliquet quam interdum in. Vivamus id ipsum fringilla, consectetur tortor eu, luctus magna. Pellentesque vel turpis leo. Ut non elementum mi, ac auctor ligula. Maecenas tincidunt enim eget massa mattis pharetra. Aenean ligula diam, pretium nec pharetra eget, faucibus at sem. Quisque vitae odio quis turpis ornare congue quis ut odio. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec aliquet tincidunt turpis, a ultricies augue commodo non. Duis aliquet tincidunt libero, ac egestas dui tristique non. Etiam consectetur urna ut urna mollis, egestas dignissim metus faucibus. Ut quis neque eu tortor commodo mattis. Donec eros erat, congue vel lorem hendrerit, ultrices facilisis arcu. Curabitur pulvinar feugiat orci sit amet blandit. Morbi tincidunt nunc vitae neque vulputate tempus. Curabitur leo mauris, sollicitudin ut placerat sit amet, laoreet ut sapien. Fusce vel lobortis sem. Cras tincidunt porttitor tincidunt. Sed vitae volutpat tellus, non placerat elit. Sed varius sem et massa congue, ac volutpat augue rhoncus. Maecenas pharetra, arcu quis adipiscing tristique, est erat molestie felis, et tempus sem purus sed lectus. Duis hendrerit, mi nec consectetur aliquam, tortor lacus pellentesque augue, eu accumsan massa enim vel sem. Sed iaculis eu orci ut pharetra. Nulla pharetra pellentesque sapien rutrum rhoncus. Proin dignissim leo sit amet mi sodales consequat. Pellentesque ac rutrum eros, sit amet aliquet ante. Maecenas in ultrices augue, eu tincidunt justo. Praesent rhoncus lacinia sollicitudin. Praesent ut ante justo. Pellentesque feugiat condimentum erat, in mattis enim lobortis porttitor. Praesent tincidunt, nunc in suscipit venenatis, mauris est dapibus purus, vel tincidunt tellus magna at tellus. Fusce vestibulum orci vitae nunc porta volutpat. Donec id leo arcu. Phasellus elit felis, pellentesque a sodales sed, condimentum pulvinar nisi. Vivamus volutpat turpis in faucibus molestie. Proin mollis rhoncus orci sed elementum. Suspendisse potenti. Nulla faucibus purus sed molestie porttitor. Ut laoreet tempus purus, eget consequat justo dignissim porttitor. Praesent aliquet sapien id turpis ornare dignissim. vibe.d-0.8.2/examples/http_static_server/source/000077500000000000000000000000001324361747700217405ustar00rootroot00000000000000vibe.d-0.8.2/examples/http_static_server/source/app.d000066400000000000000000000012621324361747700226660ustar00rootroot00000000000000import vibe.appmain; import vibe.http.fileserver; import vibe.http.router; import vibe.http.server; void handleRequest(scope HTTPServerRequest req, scope HTTPServerResponse res) { res.redirect("/index.html"); } shared static this() { auto settings = new HTTPServerSettings; settings.port = 8080; settings.bindAddresses = ["::1", "127.0.0.1"]; auto router = new URLRouter; router.get("/", &handleRequest); auto fileServerSettings = new HTTPFileServerSettings; fileServerSettings.encodingFileExtension = ["gzip" : ".gz"]; router.get("/gzip/*", serveStaticFiles("./public/", fileServerSettings)); router.get("*", serveStaticFiles("./public/",)); listenHTTP(settings, router); } vibe.d-0.8.2/examples/https_server/000077500000000000000000000000001324361747700172545ustar00rootroot00000000000000vibe.d-0.8.2/examples/https_server/dub.json000066400000000000000000000003041324361747700207160ustar00rootroot00000000000000{ "name": "https-server-example", "description": "Uses the HTTPS protocol for serving requests.", "dependencies": { "vibe-d:http": {"path": "../../"} }, "versions": ["VibeDefaultMain"] }vibe.d-0.8.2/examples/https_server/server.crt000066400000000000000000000022741324361747700213010ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIDUjCCAjoCCQDPHygOhe1ZVjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQGEwJE RTEbMBkGA1UECBMSU2NobGVzd2lnLUhvbHN0ZWluMRAwDgYDVQQHFAdMw7xiZWNr MRkwFwYDVQQKExBvdXRlcnByb2R1Y3Qub3JnMRIwEAYDVQQDEwlsb2NhbGhvc3Qw HhcNMTIwMjE0MjAxNDM0WhcNMTMwMjEzMjAxNDM0WjBrMQswCQYDVQQGEwJERTEb MBkGA1UECBMSU2NobGVzd2lnLUhvbHN0ZWluMRAwDgYDVQQHFAdMw7xiZWNrMRkw FwYDVQQKExBvdXRlcnByb2R1Y3Qub3JnMRIwEAYDVQQDEwlsb2NhbGhvc3QwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4fLPWRShlq+o6vM5nhUCtR+IN mlAlQCzM3asWpQ76T/MOX1Ci1brypRgOXCmYI8c5lFGOIMpH1ZAh987t4UdkwVCn 76pXv5yY4U1jJ5i9v7R7IUeKZ7utwlq1jPo3WWhiZwm1o6AxVRHGiUQ5XrcX0Rgt 0bh9/5BWHLks3OJ44myjpgGv2J7n1LcyecRAd+suN4qsBiTITQBYq27WYsDCqrVB BoyCPhb51xTlaMlcAH2ekrm886FlC95VrwV7o4jb4sRGYdfKqT6HwXK1yTB3n742 2WavDgRj2vNQaL+XoPiBOrQZ8fj9PeWCyefSEtqz8/dpnJO+pxidKAow8As5AgMB AAEwDQYJKoZIhvcNAQEFBQADggEBAA8N27Wb9aq9JkAEGZ0Z/CLHbLeV3UQ5qb9V 6KG8vvSoew3oxMlcHa49kq89AKx/gewt4fqCAHk64qpx8aEdbYorTbo9VIbwoLek 9Lyp+AynmqDA6zk5+uOtPkwfN84f30khH04ouSmOvbV+uqD9bVZtR8ULTzbuE2h1 jbT64JQd+GW/uLQ770EKDVFml52BMJWrRFFgaRQhkm9k8krKqsCvYfMoULk3EQqS b5a/5q9pirXB7AHmiYAnqDu2xQL8N5e548RTZSWNl7mZD1NvVYc4l8tSKfCC3zG3 4wKngPl6t68pdnli67lX3YDTdHgOZWL+CsJT9TIRAOojfp5kWGY= -----END CERTIFICATE----- vibe.d-0.8.2/examples/https_server/server.key000066400000000000000000000032131324361747700212730ustar00rootroot00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAuHyz1kUoZavqOrzOZ4VArUfiDZpQJUAszN2rFqUO+k/zDl9Q otW68qUYDlwpmCPHOZRRjiDKR9WQIffO7eFHZMFQp++qV7+cmOFNYyeYvb+0eyFH ime7rcJatYz6N1loYmcJtaOgMVURxolEOV63F9EYLdG4ff+QVhy5LNzieOJso6YB r9ie59S3MnnEQHfrLjeKrAYkyE0AWKtu1mLAwqq1QQaMgj4W+dcU5WjJXAB9npK5 vPOhZQveVa8Fe6OI2+LERmHXyqk+h8Fytckwd5++Ntlmrw4EY9rzUGi/l6D4gTq0 GfH4/T3lgsnn0hLas/P3aZyTvqcYnSgKMPALOQIDAQABAoIBABdkiJEk18h8kgi8 pBdwSBEwyjMbXAo9JvEbMnR+nXWT6afq4hijrT7TPEel3AhUkRB2BBlXgw60v7/u 4ig7pofaE1YYB6t0unCQMPXfsXht9H6ga6fbG2se982JgLi/94JyukJz6v4WYVih UytLHUBB3SUCMLiZTT3+CmTr5TOamtcUi9ZNKtbxT2l+8iDbi7WaCUznrODZ8YMn /5RhE3XopBuCmeT8P7EhJSHe1THEcCcXtlChb7bMU7DMpvWYp9XBM4CQ2PpdHN5x bvKP8P6IH0TpjdBrdE16yO9P14saJoy1GSOx8y6zUxTMdgyFUnXK4bC+nUi3VRrq cikR3GECgYEA9MUsGAhVF8CRUsgvbn/q1QM1oFG1Dj1+LYEnXXNbdOugZVj2L8eT olAFFjprciemADmqhnxNgM0Ev+RVZzSDZFrAhQ+NYKw6JQe/EfIvnGyt5GXnoIJQ 4hsibRH2UDHoGzxWTwcxbOdM3mqnY3WCMA3JWoLDEqApGRDh/hFFYtUCgYEAwPOB Ryfx5wTg/HM2kaVETgPkML81PvGdJxgKDW6XabEVdqf3Ds1UfELHRCK0LH0RS+8L 5GDBuBeAuhpXtzkmwK30rTMfVqxi7IlddcYpBqCg9bHdyg6iAI2htwm+j9aLSCPw uNeCSqIYKIvLrcvrFWOlLRYonSxlyj7XLFypkNUCgYAnjkGs9JPDzePuS9mWcueh Wu5spSesUHW2ptuUt5K9F2MJXdITMJ6EKYhY6kH45b1m5erP5wCjYv50gFLo5cyi CCR6nGPNjqeq2lCfdtMI5WtIsMs43jZyA86Rb8itdxM6a4rLJK9xGQQMIZJBeXj7 iQ7UKLObq/RYT6kl5OagrQKBgGLsdRtGH3+RwMetSgzh7mMRG6ziWyoqNagVaxH3 4SkO4TI0azXrj6Ull4QXRsiIVpXXuQEdmjQH2LeRSedmJbgjd45U53xIZW9f/cqk DeSX9e4BgvRVDDm8Y2y0Uj7sf/w8cO5Tjzk0Ya5n/cTdB2mv7L9w3OG4IXfPQAI+ f7EBAoGBAKgvIg/bvF705Lg2bebjR2MVeVySDZP/SjY5my+4cF8VSJOK+8WA1MeJ dv4sukGjAMrMApegKmaiIngb2izINfanEd0xn4h1nCwVcRaNr9fSkZDBhi+JErol 0janntvmByXPD0BXguza7NVJGmtzCyZk+rOHtC1J+qG7kdXHpPYT -----END RSA PRIVATE KEY----- vibe.d-0.8.2/examples/https_server/source/000077500000000000000000000000001324361747700205545ustar00rootroot00000000000000vibe.d-0.8.2/examples/https_server/source/app.d000066400000000000000000000010711324361747700215000ustar00rootroot00000000000000import vibe.appmain; import vibe.http.server; import vibe.stream.tls; void handleRequest(scope HTTPServerRequest req, scope HTTPServerResponse res) { res.writeBody(cast(ubyte[])"Hello, World!", "text/plain"); } shared static this() { auto settings = new HTTPServerSettings; settings.port = 8080; settings.bindAddresses = ["::1", "127.0.0.1"]; settings.tlsContext = createTLSContext(TLSContextKind.server); settings.tlsContext.useCertificateChainFile("server.crt"); settings.tlsContext.usePrivateKeyFile("server.key"); listenHTTP(settings, &handleRequest); } vibe.d-0.8.2/examples/https_server_sni/000077500000000000000000000000001324361747700201255ustar00rootroot00000000000000vibe.d-0.8.2/examples/https_server_sni/dub.json000066400000000000000000000003341324361747700215720ustar00rootroot00000000000000{ "name": "https-sni-server-example", "description": "Uses SNI to serve multiple virtual hosts in a single HTTPS port.", "dependencies": { "vibe-d:http": {"path": "../../"} }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/examples/https_server_sni/hosta.crt000066400000000000000000000014361324361747700217610ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIICITCCAYoCCQCagvi0sfGTSjANBgkqhkiG9w0BAQsFADBVMQswCQYDVQQGEwJE RTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0 cyBQdHkgTHRkMQ4wDAYDVQQDDAVob3N0YTAeFw0xNDEwMTQxMzM0MDBaFw0yNDEw MTExMzM0MDBaMFUxCzAJBgNVBAYTAkRFMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDjAMBgNVBAMMBWhvc3Rh MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7Gt2DTBOU+v9KvrG0qvRsPvUK TxUEqRcN8mQteUE7kiFtfccl6lv5kOGdO9VHdGb7QgcP2eJivBr49gpoQh54YnIu wgea917bRi7J740W8LRB48AkQ+LCv5KEpQORlO7Rfy/9gVFL/glM+P4CSX5BhhfY XI1Tkq13CNTkv8eIewIDAQABMA0GCSqGSIb3DQEBCwUAA4GBABBdHl4NB5T8GH8j MoS/+q1u0irp9da5o9iMLqzZayLmzhC07VqBl5Hga57wNB9M7VRkjlxDnz/YWSqU 6Ym40vRYugz5HBTo9te28RJt8+yjCZCylwQYFIJdbLn2O7pvZ3z7+6OvsoTFTTxQ vZVTyXfaRTYw8/HVflhsgsua2ZPb -----END CERTIFICATE----- vibe.d-0.8.2/examples/https_server_sni/hosta.key000066400000000000000000000015671324361747700217660ustar00rootroot00000000000000-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQC7Gt2DTBOU+v9KvrG0qvRsPvUKTxUEqRcN8mQteUE7kiFtfccl 6lv5kOGdO9VHdGb7QgcP2eJivBr49gpoQh54YnIuwgea917bRi7J740W8LRB48Ak Q+LCv5KEpQORlO7Rfy/9gVFL/glM+P4CSX5BhhfYXI1Tkq13CNTkv8eIewIDAQAB AoGBAIWicoPMWlAV1TC1cobvcxO9A5cRVJm3i1fSv+oaqJS7klR5eTuDX52n9Pww N+yJHuRmDFUt8ZtDbqBSWqyMTOXFAXAR6GRdEvCqetWKSKbUgrrDjpWy1zMJ03s+ iZrofm3AMUOaUAs18FwklCdExqnNRlv1/L33zZB4AHOWW62BAkEA7VkLl2/2onlK PqryIrr/sak2s/bM6RSuqKR6/FC3wZgtkRzFxwSVoPMQjQ0IwowAC+6/4rAPWtrb fsvoIJu74wJBAMnPCRI4I1xtFSJncnCOF5yfai8qpDimlLfn7aVYzINZqz6K59vL b2guPsHe+JpthC3l1xXAziWlUk9E/x9I1IkCQAy62OdPZwAB11yTGJeKRgqGU9vF IepiZJfA8qOzxJdKjS8aRvVMpqXSQ5H9H/onPh1lub7zyG8MC/e6AgI1uBcCQQCf guafoQHKN2piFDQvZRCiupp6h5DgOkMIjeiYLfUQyVqCh9a2MzlutkbihHQp0/CL OsVkK06GEQNbJqUkvDNJAkBbOUOWQ/LtAn9prgB3aj8yBWM81FkqM6vSXnearE3X 3xsFzcdLAv0MUmoP9SHBfkH7UJtPhGsFKQoleHi5CKop -----END RSA PRIVATE KEY----- vibe.d-0.8.2/examples/https_server_sni/hostb.crt000066400000000000000000000014361324361747700217620ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIICITCCAYoCCQCX3gqWMkRyPjANBgkqhkiG9w0BAQsFADBVMQswCQYDVQQGEwJE RTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0 cyBQdHkgTHRkMQ4wDAYDVQQDDAVob3N0YjAeFw0xNDEwMTQxMzM0MTFaFw0yNDEw MTExMzM0MTFaMFUxCzAJBgNVBAYTAkRFMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDjAMBgNVBAMMBWhvc3Ri MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCd0m1HTzsUVNnYRLmqaxCD93kn TPnGV+4D/bKYqbAhjAS8Fl77NeXy3oKKyLQCRHi5LVhYlNvekvvFl2lypdUNt71X MMZJXpHx/zmJfuC8iEOSdmuLeSO2ABycJzhui7XXA3cyNpELeM1ea+QsRMCFztqO riTlb0dzLYCReXrP6wIDAQABMA0GCSqGSIb3DQEBCwUAA4GBAHGv9a8T5/FKsl1c Dmm7VQAdsBLVk8d9DMfCBiEKWevkwvr1NBXq1a7iXiDnykwYrgzaCFYJ4yPXvLKM giAcYUsnVGu9taLycyATJTc9hDNtUbST6n/EhEUsKIXEUPj6KQQECgkioMjlpnny vJwl2UqiXi89dAy8u0wOf84i1z6W -----END CERTIFICATE----- vibe.d-0.8.2/examples/https_server_sni/hostb.key000066400000000000000000000015671324361747700217670ustar00rootroot00000000000000-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQCd0m1HTzsUVNnYRLmqaxCD93knTPnGV+4D/bKYqbAhjAS8Fl77 NeXy3oKKyLQCRHi5LVhYlNvekvvFl2lypdUNt71XMMZJXpHx/zmJfuC8iEOSdmuL eSO2ABycJzhui7XXA3cyNpELeM1ea+QsRMCFztqOriTlb0dzLYCReXrP6wIDAQAB AoGBAIFP414kWyIDjCMZ3I73/qZCZTCAb7/GWC1I98cCcmBqW47JPbXTqb/f9VJF tMiO1ePUdajO/4BVKpnxv+LCYdf8He1KaR+fBLwehgqobO8j4rIcz9oG1DjlCGhb b5p6fjl0KSpM5SUfG/63n+qFRNm3QzDPO41gBved1p+IXcWBAkEAzIiIY/pWqnPR sSjUDPiHcfVF3LktMOoBMttZG0sIQ1Itz/209srgov0AepexeZEOJQVbcO4EnnIW g9wBCZqLSwJBAMWI4Qdnt9Dh6wJIKFZORR7qpDVhmE7GTs1OUWWwLU1kR+zWeHF7 Tzp1QNDIM94/nV0N4lzllN9/EGskGtIKSeECQQClhOg7YF+6WTgdEllolcempUMA OKslpnmJ2pDl0XbCZELGyx4jilL4E57Llu783jKAKzGw1i3Ou60U0HnWd8a5AkAy a3XExhyNHJ03v+NL5D6QXaP8XCTcNpH2pX7xTb7Cek5BjZzAmpDmgvdAU1mp6OLp 1ZlpzM/rHCu8rUKLSkUBAkAjUNAAINtfG0DA1S3xnMwXUr39i8g4ylYMhVCQfTEw a8HsSjeuVEQ8IusaC0k+ni0gxu+zQJtum8S7lJRCBRm2 -----END RSA PRIVATE KEY----- vibe.d-0.8.2/examples/https_server_sni/source/000077500000000000000000000000001324361747700214255ustar00rootroot00000000000000vibe.d-0.8.2/examples/https_server_sni/source/app.d000066400000000000000000000030231324361747700223500ustar00rootroot00000000000000import vibe.appmain; import vibe.core.log; import vibe.http.server; import vibe.stream.tls; shared static this() { { auto settings = new HTTPServerSettings; settings.port = 8080; settings.hostName = "hosta"; settings.bindAddresses = ["::1", "127.0.0.1"]; settings.tlsContext = createTLSContext(TLSContextKind.server); settings.tlsContext.useCertificateChainFile("hosta.crt"); settings.tlsContext.usePrivateKeyFile("hosta.key"); listenHTTP(settings, &handleRequestA); } { auto settings = new HTTPServerSettings; settings.port = 8080; settings.hostName = "hostb"; settings.bindAddresses = ["::1", "127.0.0.1"]; settings.tlsContext = createTLSContext(TLSContextKind.server); settings.tlsContext.useCertificateChainFile("hostb.crt"); settings.tlsContext.usePrivateKeyFile("hostb.key"); listenHTTP(settings, &handleRequestB); } logInfo( `This example shows how to run multiple HTTPS virtual hosts on the same port. For this to work, you need to add the following two lines to your /etc/hosts file: 127.0.0.1 hosta 127.0.0.1 hostb You can then navigate to either https://hosta:8080/ or https://hostb:8080/ and should be presented with a different certificate each time, matching the host name entered. `); } void handleRequestA(scope HTTPServerRequest req, scope HTTPServerResponse res) { res.writeBody(cast(ubyte[])"Hello, this is host A!", "text/plain"); } void handleRequestB(scope HTTPServerRequest req, scope HTTPServerResponse res) { res.writeBody(cast(ubyte[])"Hello, this is host B!", "text/plain"); } vibe.d-0.8.2/examples/json/000077500000000000000000000000001324361747700154755ustar00rootroot00000000000000vibe.d-0.8.2/examples/json/dub.json000066400000000000000000000003471324361747700171460ustar00rootroot00000000000000{ "name": "json-example", "description": "Performs some simple operations using the Json type.", "dependencies": { "vibe-d:data": {"path": "../../"}, "vibe-d:core": {"path": "../../"} }, "versions": ["VibeCustomMain"] }vibe.d-0.8.2/examples/json/source/000077500000000000000000000000001324361747700167755ustar00rootroot00000000000000vibe.d-0.8.2/examples/json/source/app.d000066400000000000000000000007661324361747700177330ustar00rootroot00000000000000import vibe.data.json; import std.stdio; import std.bigint; void main() { Json a = 1; Json b = 2; writefln("%s %s", a.type, b.type); auto c = a + b; c = c * 2; writefln("%d", cast(long)c); Json[string] obj; obj["item1"] = a; obj["item2"] = "Object"; Json parent = obj; parent.remove("item1"); foreach (i; obj) writeln(i); auto obj2 = parseJsonString(`{"serial":17559991181826658461}`); writeln("serial: ", obj2["serial"]); assert(obj2["serial"] == BigInt(17559991181826658461UL)); } vibe.d-0.8.2/examples/message/000077500000000000000000000000001324361747700161505ustar00rootroot00000000000000vibe.d-0.8.2/examples/message/dub.json000066400000000000000000000002761324361747700176220ustar00rootroot00000000000000{ "name": "message-example", "description": "Demonstrates cross-task message communication.", "dependencies": { "vibe-d:core": {"path": "../../"} }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/examples/message/source/000077500000000000000000000000001324361747700174505ustar00rootroot00000000000000vibe.d-0.8.2/examples/message/source/app.d000066400000000000000000000017701324361747700204020ustar00rootroot00000000000000import vibe.appmain; import vibe.core.core; import vibe.core.log; import vibe.core.concurrency; import core.time; shared static this() { auto t1 = runTask({ while (true) { logDebug("receive1"); receive( (string msg) { logInfo("Received string message: %s", msg); }, (int msg) { logInfo("Received int message: %s", msg); }); logDebug("receive2"); receive( (double msg) { logInfo("Received double: %s", msg); }, (int a, int b, int c) { logInfo("Received iii: %s %s %s", a, b, c); }); } }); auto t2 = runTask({ sleep(1.seconds()); logInfo("send Hello World"); t1.send("Hello, World!"); sleep(1.seconds()); logInfo("send int 1"); t1.send(1); sleep(1.seconds()); logInfo("send double 1.2"); t1.send(1.2); sleep(1.seconds()); logInfo("send int 2"); t1.send(2); sleep(1.seconds()); logInfo("send 3xint 1 2 3"); t1.send(1, 2, 3); sleep(1.seconds()); logInfo("send string Bye bye"); t1.send("Bye bye"); }); } vibe.d-0.8.2/examples/mongodb/000077500000000000000000000000001324361747700161515ustar00rootroot00000000000000vibe.d-0.8.2/examples/mongodb/dub.json000066400000000000000000000002601324361747700176140ustar00rootroot00000000000000{ "name": "mongodb-example", "description": "Basic MongoDB usage example.", "dependencies": { "vibe-d:mongodb": {"path": "../../"} }, "versions": ["VibeCustomMain"] }vibe.d-0.8.2/examples/mongodb/source/000077500000000000000000000000001324361747700174515ustar00rootroot00000000000000vibe.d-0.8.2/examples/mongodb/source/app.d000066400000000000000000000006611324361747700204010ustar00rootroot00000000000000import vibe.core.log; import vibe.db.mongo.mongo; import std.array; void main() { logInfo("Connecting to DB..."); auto db = connectMongoDB("localhost").getDatabase("test"); auto coll = db["test"]; logInfo("Querying DB..."); Bson query = Bson(["name" : Bson("hans")]); auto result = coll.find(query); logInfo("Iterating results..."); foreach (i, doc; result.byPair) logInfo("Item %d: %s", i, doc.toJson().toString()); } vibe.d-0.8.2/examples/read_write_mutex/000077500000000000000000000000001324361747700200735ustar00rootroot00000000000000vibe.d-0.8.2/examples/read_write_mutex/dub.json000066400000000000000000000005171324361747700215430ustar00rootroot00000000000000{ "name": "rwmutex-example", "description": "Randomly locks a TaskReadWriteMutex for reading or writing and logs the according operations and it's state.", "authors": [ "Manuel Frischknecht" ], "dependencies": { "vibe-d": {"version": "~master", "path": "../../"} }, "versions": [ "VibeDefaultMain", "RWMutexPrint", ], }vibe.d-0.8.2/examples/read_write_mutex/source/000077500000000000000000000000001324361747700213735ustar00rootroot00000000000000vibe.d-0.8.2/examples/read_write_mutex/source/app.d000066400000000000000000000054701324361747700223260ustar00rootroot00000000000000 import vibe.d; interface MyBlockingRestInterface { @path("/") int getIndex(); } class RestInterfaceImplementation : MyBlockingRestInterface { private { TaskReadWriteMutex m_mutex; } this() { m_mutex = new TaskReadWriteMutex(TaskReadWriteMutex.Policy.PREFER_WRITERS); } //This method naively simulates access to a shared resource protected //by a TaskReadWriteMutex. Read operations are performed frequently (95%) //and finish quickly (1ms wait time), while write operations occur rarely //(5%) and take much longer to process (50ms wait time). int getIndex() { import std.random; import std.stdio; auto i = uniform(0,20); if (i == 0) //In a rare case, lock for writing { synchronized(m_mutex.writer) { version(PrintRequests) writeln("Blocked for writing!"); //Simulate a slow operation vibe.core.core.sleep(100.msecs); } } else //More regularly, lock for reading { synchronized(m_mutex.reader) { version(PrintRequests) writeln("Blocked for reading!"); //Simulate a faster operation vibe.core.core.sleep(1.msecs); } } return 0; } } __gshared { TaskMutex s_taskMutex; TaskCondition s_taskCondition; ulong s_runningTasks; } shared static this() { s_taskMutex = new TaskMutex(); s_taskCondition = new TaskCondition(s_taskMutex); runWorkerTaskDist({ import core.thread : Thread; logInfo("Listen on thread %s", Thread.getThis().name); auto routes = new URLRouter; registerRestInterface(routes, new RestInterfaceImplementation()); auto settings = new HTTPServerSettings(); settings.port = 8080; settings.options = HTTPServerOption.parseURL|HTTPServerOption.reusePort; settings.bindAddresses = ["::1", "127.0.0.1"]; listenHTTP(settings, routes); }); //Wait for a couple of seconds for the server to be initialized properly and then start //multiple concurrent threads that simultaneously start queries on the rest interface defined above. setTimer(500.msecs, () @trusted { scope (failure) assert(false); scope(exit) exitEventLoop(true); //Start multiple tasks performing requests on "http://localhost:8080/" concurrently synchronized(s_taskMutex) s_runningTasks = workerThreadCount(); runWorkerTaskDist({ try { //Keep track of the number of currently running tasks scope (exit) { synchronized(s_taskMutex) s_runningTasks -= 1; s_taskCondition.notifyAll(); } //Perform a couple of request to the rest interface auto api = new RestInterfaceClient!MyBlockingRestInterface("http://127.0.0.1:8080"); for (int i = 0; i < 1000; ++i) api.getIndex(); } catch (Exception e) { logError("Performing client request failed: %s", e.msg); } }); //Wait for all tasks to complete synchronized(s_taskMutex) { do s_taskCondition.wait(); while(s_runningTasks > 0); } }); } vibe.d-0.8.2/examples/redis-pubsub/000077500000000000000000000000001324361747700171305ustar00rootroot00000000000000vibe.d-0.8.2/examples/redis-pubsub/dub.json000066400000000000000000000002721324361747700205760ustar00rootroot00000000000000{ "name": "redis-pubsub-example", "description": "Basic Redis Pub/Sub usage example.", "dependencies": { "vibe-d:redis": {"path": "../../"} }, "versions": ["VibeDefaultMain"] }vibe.d-0.8.2/examples/redis-pubsub/source/000077500000000000000000000000001324361747700204305ustar00rootroot00000000000000vibe.d-0.8.2/examples/redis-pubsub/source/app.d000066400000000000000000000013671324361747700213640ustar00rootroot00000000000000import core.time; import std.functional; import vibe.core.core; import vibe.core.log; import vibe.db.redis.redis; void printReply(string channel, string message) { logInfo("Received a message from channel %s: %s", channel, message); } RedisSubscriber subscriber; shared static this() { auto publisher = new RedisClient(); subscriber = publisher.createSubscriber(); subscriber.subscribe("test1", "test2"); auto task = subscriber.listen(toDelegate(&printReply)); publisher.getDatabase(0).publish("test1", "Hello World!"); publisher.getDatabase(0).publish("test2", "Hello from Channel 2"); runTask({ subscriber.subscribe("test-fiber"); publisher.getDatabase(0).publish("test-fiber", "Hello from the Fiber!"); subscriber.unsubscribe(); }); } vibe.d-0.8.2/examples/redis/000077500000000000000000000000001324361747700156325ustar00rootroot00000000000000vibe.d-0.8.2/examples/redis/dub.json000066400000000000000000000002521324361747700172760ustar00rootroot00000000000000{ "name": "redis-example", "description": "Basic Redis usage example.", "dependencies": { "vibe-d:redis": {"path": "../../"} }, "versions": ["VibeCustomMain"] }vibe.d-0.8.2/examples/redis/source/000077500000000000000000000000001324361747700171325ustar00rootroot00000000000000vibe.d-0.8.2/examples/redis/source/app.d000066400000000000000000000003251324361747700200570ustar00rootroot00000000000000import vibe.core.log; import vibe.db.redis.redis; void main() { auto redis = new RedisClient(); redis.getDatabase(0).setBit("test", 15, true); logInfo("Result: %s", redis.getDatabase(0).getBit("test", 15)); } vibe.d-0.8.2/examples/rest-collections/000077500000000000000000000000001324361747700200155ustar00rootroot00000000000000vibe.d-0.8.2/examples/rest-collections/dub.json000066400000000000000000000003611324361747700214620ustar00rootroot00000000000000{ "name": "rest-collections-example", "description": "Example project demonstrating the use of collections in REST interfaces.", "dependencies": { "vibe-d": {"path": "../../"} }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/examples/rest-collections/source/000077500000000000000000000000001324361747700213155ustar00rootroot00000000000000vibe.d-0.8.2/examples/rest-collections/source/api.d000066400000000000000000000022621324361747700222350ustar00rootroot00000000000000/// Defines the REST API module api; import vibe.web.rest; interface ForumAPI { // base path /threads/ Collection!ThreadAPI threads(); } interface ThreadAPI { // define the index parameters used to identify the collection items struct CollectionIndices { string _thread_name; } // base path /threads/:thread_number/posts/ Collection!PostAPI posts(string _thread_name); // POST /threads/ // Posts a new thread void post(string name, string message); // GET /threads/ // Returns a list of all thread names string[] get(); } interface PostAPI { // define the index parameters used to identify the collection items struct CollectionIndices { string _thread_name; int _post_index; } // POST /threads/:thread_number/posts/ // Posts a new thread reply void post(string _thread_name, string message); // GET /threads/:thread_name/ // Returns the number of posts in a thread int getLength(string _thread_name); // GET /threads/:thread_number/posts/:post_id // Returns a specific message string getMessage(string _thread_name, int _post_index); // GET /threads/:thread_number/posts/ // Returns all messages of a particular thread string[] get(string _thread_name); } vibe.d-0.8.2/examples/rest-collections/source/app.d000066400000000000000000000044321324361747700222450ustar00rootroot00000000000000module app; import api; import vibe.core.core; import vibe.core.log; import vibe.http.router; import vibe.http.server; import vibe.web.rest; class ForumData { // maps thread ID to a list of messages string[][string] threads; } class LocalForumAPI : ForumAPI { ForumData m_data; LocalThreadAPI m_threads; this() { m_data = new ForumData; m_threads = new LocalThreadAPI(m_data); } Collection!ThreadAPI threads() { return Collection!ThreadAPI(m_threads); } } class LocalThreadAPI : ThreadAPI { private { ForumData m_data; LocalPostAPI m_posts; } this(ForumData data) { m_data = data; m_posts = new LocalPostAPI(data); } Collection!PostAPI posts(string _thread_name) { return Collection!PostAPI(m_posts, _thread_name); } void post(string name, string message) { m_data.threads[name] = [message]; } string[] get() { return m_data.threads.keys; } } class LocalPostAPI : PostAPI { private { ForumData m_data; } this(ForumData data) { m_data = data; } void post(string _thread_name, string message) { m_data.threads[_thread_name] ~= message; } int getLength(string _thread_name) { return cast(int)m_data.threads[_thread_name].length; } string getMessage(string _thread_name, int _post_index) { return m_data.threads[_thread_name][_post_index]; } string[] get(string _thread_name) { return m_data.threads[_thread_name]; } } shared static this() { auto router = new URLRouter; router.registerRestInterface(new LocalForumAPI); auto settings = new HTTPServerSettings; settings.bindAddresses = ["127.0.0.1"]; settings.port = 8080; listenHTTP(settings, router); runTask({ auto api = new RestInterfaceClient!ForumAPI("http://127.0.0.1:8080/"); logInfo("Current number of threads: %s", api.threads.get().length); logInfo("Posting a topic..."); api.threads.post("RESTful services", "Hi, just wanted to post something!"); logInfo("Posting a reply..."); api.threads["RESTful services"].posts.post("Okay, but what do you actually want to say?"); logInfo("New list of threads:"); foreach (th; api.threads.get) { import std.array : replicate; logInfo("\n%s\n%s", th, "=".replicate(th.length)); foreach (m; api.threads[th].posts.get) logInfo("%s\n---", m); } logInfo("Leaving REST server running. Hit Ctrl+C to exit."); }); } vibe.d-0.8.2/examples/rest-js/000077500000000000000000000000001324361747700161135ustar00rootroot00000000000000vibe.d-0.8.2/examples/rest-js/dub.json000066400000000000000000000003011324361747700175520ustar00rootroot00000000000000{ "name": "rest-js-example", "description": "Simple dynamic web UI that accesses a REST interface", "dependencies": { "vibe-d": { "path": "../../" } }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/examples/rest-js/source/000077500000000000000000000000001324361747700174135ustar00rootroot00000000000000vibe.d-0.8.2/examples/rest-js/source/app.d000066400000000000000000000027011324361747700203400ustar00rootroot00000000000000import vibe.web.rest; // Defines a simple RESTful API interface ITest { // GET /compute_sum?a=...&b=... @method(HTTPMethod.GET) float computeSum(float a, float b); // POST /to_console {"text": ...} void postToConsole(string text); } // Local implementation that will be provided by the server class Test : ITest { import std.stdio; float computeSum(float a, float b) { return a + b; } void postToConsole(string text) { writeln(text); } } shared static this() { import vibe.core.log : logInfo; import vibe.inet.url : URL; import vibe.http.router : URLRouter; import vibe.http.server : HTTPServerSettings, listenHTTP, staticTemplate; // Set up the proper base URL, so that the JavaScript client // will find our REST service auto restsettings = new RestInterfaceSettings; restsettings.baseURL = URL("http://127.0.0.1:8080/"); auto router = new URLRouter; // Serve the generated JavaScript client at /test.js router.get("/test.js", serveRestJSClient!ITest(restsettings)); // Serve an example page at / // The page will use the test.js script to issue calls to the // REST service. router.get("/", staticTemplate!"index.dt"); // Finally register the REST interface defined above router.registerRestInterface(new Test, restsettings); auto settings = new HTTPServerSettings; settings.port = 8080; settings.bindAddresses = ["::1", "127.0.0.1"]; listenHTTP(settings, router); logInfo("Please open http://127.0.0.1:8080/ in your browser."); } vibe.d-0.8.2/examples/rest-js/views/000077500000000000000000000000001324361747700172505ustar00rootroot00000000000000vibe.d-0.8.2/examples/rest-js/views/index.dt000066400000000000000000000015511324361747700207120ustar00rootroot00000000000000doctype html html head script(src="test.js") script. function computeSum() { var a = document.getElementById('a').value; var b = document.getElementById('b').value; // perform the RESTful request using a simple function call, // similar to RestInterfaceClient within D code ITest.computeSum(a, b, function (r) { // the result comes back asynchronously document.getElementById('res').innerHTML = r; }); } function writeConsoleMessage() { var text = document.getElementById('test').value; // similar to the call above, but this time call a void // function with no result ITest.postToConsole(text); } body h1 Calculator input#a | + input#b button(onclick="computeSum()") Compute sum p Result: span#res h2 Console input#test button(onclick="writeConsoleMessage()") Write to console vibe.d-0.8.2/examples/rest/000077500000000000000000000000001324361747700155015ustar00rootroot00000000000000vibe.d-0.8.2/examples/rest/dub.json000066400000000000000000000003271324361747700171500ustar00rootroot00000000000000{ "name": "rest-example", "description": "Shows how the REST interface generator can be used for RPC communication.", "dependencies": { "vibe-d:web": {"path": "../../"} }, "versions": ["VibeDefaultMain"] }vibe.d-0.8.2/examples/rest/source/000077500000000000000000000000001324361747700170015ustar00rootroot00000000000000vibe.d-0.8.2/examples/rest/source/app.d000066400000000000000000000443471324361747700177420ustar00rootroot00000000000000/* This example module consists from several small example REST interfaces. * Features are not grouped by topic but by common their are needed. Each example * introduces few new more advanced features. Sometimes registration code in module constructor * is also important, it is then mentioned in example comment explicitly. */ import vibe.appmain; import vibe.core.core; import vibe.core.log; import vibe.data.json; import vibe.http.router; import vibe.http.server; import vibe.web.rest; import core.time; import std.typecons : Nullable; /* --------- EXAMPLE 1 ---------- */ /* Very simple REST API interface. No additional configurations is used, * all HTTP-specific information is generated based on few conventions. * * All types are serialized and deserialized automatically by vibe.d framework using JSON. */ @rootPathFromName interface Example1API { /* Default convention is based on camelCase */ /* Used HTTP method is "GET" because function name start with "get". * Remaining part is converted to lower case with words separated by _ * * Resulting matching request: "GET /some_info" */ string getSomeInfo(); /* Parameters are supported in a similar fashion. * Despite this is only an interface, make sure parameter names are not omitted, those are used for serialization. * If it is a GET request, parameters are embedded into query URL. * Stored in POST data for POST, of course. */ int postSum(int a, int b); /* @property getters are always GET. @property setters are always PUT. * All supported convention prefixes are documentated : http://vibed.org/api/vibe.web.rest/registerRestInterface * Rather obvious and thus omitted in this example interface. */ @property string getter(); } class Example1 : Example1API { override: // usage of this handy D feature is highly recommended string getSomeInfo() { return "Some Info!"; } int postSum(int a, int b) { return a + b; } @property string getter() { return "Getter"; } } unittest { auto router = new URLRouter; registerRestInterface(router, new Example1()); auto routes = router.getAllRoutes(); assert (routes[0].method == HTTPMethod.GET && routes[0].pattern == "/example1_api/some_info"); assert (routes[1].method == HTTPMethod.POST && routes[1].pattern == "/example1_api/sum"); assert (routes[2].method == HTTPMethod.GET && routes[2].pattern == "/example1_api/getter"); } /* --------- EXAMPLE 2 ---------- */ /* Step forward. Using some compound types and query parameters. * Shows example usage of non-default naming convention, please check module constructor for details on this. * UpperUnderscore method style will be used. */ @rootPathFromName interface Example2API { // Any D data type may be here. Serializer is not configurable and will send all declared fields. // This should be an API-specified type and may or may not be the same as data type used by other application code. struct Aggregate { string name; uint count; enum Type { Type1, Type2, Type3 } Type type; } /* As you may see, using aggregate types in parameters is just as easy. * Matching request for this function will be "GET /ACCUMULATE_ALL?input=" * Answer will be of "application/json" type. */ Aggregate queryAccumulateAll(Aggregate[] input); } class Example2 : Example2API { override: Aggregate queryAccumulateAll(Aggregate[] input) { import std.algorithm; // Some sweet functional D return reduce!( (a, b) => Aggregate(a.name ~ b.name, a.count + b.count, Aggregate.Type.Type3) )(Aggregate.init, input); } } unittest { auto router = new URLRouter; registerRestInterface(router, new Example2(), MethodStyle.upperUnderscored); auto routes = router.getAllRoutes(); assert (routes[0].method == HTTPMethod.GET && routes[0].pattern == "/EXAMPLE2_API/ACCUMULATE_ALL"); } /* --------- EXAMPLE 3 ---------- */ /* Nested REST interfaces may be used to better match your D code structure with URL paths. * Nested interfaces must always be getter properties, this is statically enforced by rest module. * * Some limited form of URL parameters exists via special "id" parameter. */ @rootPathFromName interface Example3API { /* Available under ./nested_module/ */ @property Example3APINested nestedModule(); /* "id" is special parameter name that is parsed from URL. No special magic happens here, * it uses usual vibe.d URL pattern matching functionality. * GET /:id/myid */ int getMyID(int id); } interface Example3APINested { /* In this example it will be available under "GET /nested_module/number" * But this interface does't really know it, it does not care about exact path * * Default parameter values work as expected - they get used if there are no data & for that parameter in request. */ int getNumber(int def_arg = 42); } class Example3 : Example3API { private: Example3Nested m_nestedImpl; public: this() { m_nestedImpl = new Example3Nested(); } override: int getMyID(int id) { return id; } @property Example3APINested nestedModule() { return m_nestedImpl; } } class Example3Nested : Example3APINested { override: int getNumber(int def_arg) { return def_arg; } } unittest { auto router = new URLRouter; registerRestInterface(router, new Example3()); auto routes = router.getAllRoutes(); assert (routes[0].method == HTTPMethod.GET && routes[0].pattern == "/example3_api/nested_module/number"); assert (routes[1].method == HTTPMethod.GET && routes[1].pattern == "/example3_api/:id/myid"); } /* If pre-defined conventions do not suit your needs, you can configure url and method * precisely via User Defined Attributes. */ @rootPathFromName interface Example4API { /* vibe.web.rest module provides two pre-defined UDA - @path and @method * You can use any one of those or both. In case @path is used, not method style * adjustment is made. */ @path("simple") @method(HTTPMethod.POST) void myNameDoesNotMatter(); /* Only @path is used here, so HTTP method is deduced in usual way (GET) * vibe.d does usual pattern matching on path and stores path parts marked with ":" * in request parameters. If function parameter starts with "_" and matches one * of stored request parameters, expected things happen. */ @path(":param/:another_param/data") int getParametersInURL(string _param, string _another_param); /* The underscore at the end of each parameter will be dropped in the * protocol, so that D keywords, such as "body" or "in" can be used as * identifiers. */ int querySpecialParameterNames(int body_, bool in_); } class Example4 : Example4API { override: void myNameDoesNotMatter() { } int getParametersInURL(string _param, string _another_param) { import std.conv; return to!int(_param) + to!int(_another_param); } int querySpecialParameterNames(int body_, bool in_) { return body_ * (in_ ? -1 : 1); } } unittest { auto router = new URLRouter; registerRestInterface(router, new Example4()); auto routes = router.getAllRoutes(); assert (routes[0].method == HTTPMethod.POST && routes[0].pattern == "/example4_api/simple"); assert (routes[1].method == HTTPMethod.GET && routes[1].pattern == "/example4_api/:param/:another_param/data"); assert (routes[2].method == HTTPMethod.GET && routes[2].pattern == "/example4_api/special_parameter_names"); } /* It is possible to attach function hooks to methods via User-Define Attributes. * * Such hook must be a free function that * 1) accepts HTTPServerRequest and HTTPServerResponse * 2) is attached to specific parameter of a method * 3) has same return type as that parameter type * * REST API framework will call attached functions before actual * method call and use their result as an input to method call. * * There is also another attribute function type that can be called * to post-process method return value. * * Refer to `vibe.internal.meta.funcattr` for more details. */ @rootPathFromName interface Example5API { import vibe.web.rest : before, after; @before!authenticate("user") @after!addBrackets() string getSecret(int num, User user); } User authenticate(HTTPServerRequest req, HTTPServerResponse res) { return User("admin", true); } struct User { string name; bool authorized; } string addBrackets(string result, HTTPServerRequest, HTTPServerResponse) { return "{" ~ result ~ "}"; } class Example5 : Example5API { string getSecret(int num, User user) { import std.conv : to; import std.string : format; if (!user.authorized) return ""; return format("secret #%s for %s", num, user.name); } } unittest { auto router = new URLRouter; registerRestInterface(router, new Example5()); auto routes = router.getAllRoutes(); assert (routes[0].method == HTTPMethod.GET && routes[0].pattern == "/example5_api/secret"); } /** * The default convention of this module is to pass parameters via: * - the URI for parameter starting with underscore (see example 4); * - query for GET/PUT requests; * - body for POST requests; * * This is configurable by means of: * - @headerParam : Get a parameter from the query header; * - @queryParam : Get a parameter from the query URL; * - @bodyParam : Get a parameter from the body; * * In addition, @headerParam have a special handling of 'out' and * 'ref' parameters: * - 'out' are neither send by the client nor read by the server, but * their value (except for null string) is returned by the server. * - 'ref' are send by the client, read by the server, returned by * the server, and read by the client. * This is to be consistent with the way D 'out' and 'ref' works. * However, it makes no sense to have 'ref' or 'out' parameters on * body or query parameter, so those are treated as error at compile time. * * If no Json fieldname is passed to @bodyParam, the entire Json body is deserialized into the respective field. */ @rootPathFromName interface Example6API { // The first parameter of @headerParam is the identifier (must match one of the parameter name). // The second is the name of the field in the header, such as "Accept", "Content-Type", "User-Agent"... @headerParam("auth", "Authorization") @headerParam("tester", "X-Custom-Tester") @headerParam("www", "WWW-Authenticate") string getPortal(string auth, ref string tester, out Nullable!string www); // As with @headerParam, the first parameter of @queryParam is the identifier. // The second being the field name, e.g for a query such as: 'GET /root/node?foo=bar', "foo" will be the second parameter. @queryParam("fortyTwo", "qparam") string postAnswer(string fortyTwo); // Finally, there is @bodyParam. It works as you expect it to work, // currently serializing passed data as Json and pass them through the body. @bodyParam("myFoo", "parameter") string postConcat(FooType myFoo); // If no field name is passed to @bodyParam the entire json object is // serialized into the parameter. // Moreover if only one bodyParameter is present, this is the default // behavior. @bodyParam("obj") string postConcatBody(FooType obj); struct FooType { int a; string s; double d; } } class Example6 : Example6API { override: string getPortal(string auth, ref string tester, out Nullable!string www) { // For a string parameter, null means 'not returned' // If you want to return something empty, use "". if (tester == "Chell") tester = "The cake is a lie"; else tester = null; // If the user provided credentials Aladdin / 'open sesame' if (auth == "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==") return "Hello, Caroline"; www = `Basic realm="Aperture"`; throw new HTTPStatusException(401); } string postAnswer(string fortyTwo) { if (fortyTwo == "Life_universe_and_the_rest") return "True"; return "False"; } string postConcat(FooType myFoo) { import std.conv : to; return to!string(myFoo.a)~myFoo.s~to!string(myFoo.d); } string postConcatBody(FooType obj) { return postConcat(obj); } } unittest { auto router = new URLRouter; registerRestInterface(router, new Example6()); auto routes = router.getAllRoutes(); assert (routes[0].method == HTTPMethod.GET && routes[0].pattern == "/example6_api/portal"); assert (routes[1].method == HTTPMethod.POST && routes[1].pattern == "/example6_api/answer"); assert (routes[0].method == HTTPMethod.GET && routes[2].pattern == "/example6_api/concat"); } @rootPathFromName interface Example7API { // GET /example7_api/ // returns a custom JSON response Json get(); } class Example7 : Example7API { Json get() { return serializeToJson(["foo": 42, "bar": 13]); } } shared static this() { // Registering our REST services in router auto routes = new URLRouter; registerRestInterface(routes, new Example1()); // note additional last parameter that defines used naming convention for compile-time introspection registerRestInterface(routes, new Example2(), MethodStyle.upperUnderscored); // naming style is default again, those can be router path specific. registerRestInterface(routes, new Example3()); registerRestInterface(routes, new Example4()); registerRestInterface(routes, new Example5()); registerRestInterface(routes, new Example6()); registerRestInterface(routes, new Example7()); auto settings = new HTTPServerSettings(); settings.port = 8080; settings.bindAddresses = ["::1", "127.0.0.1"]; listenHTTP(settings, routes); /* At this moment, server is prepared to process requests. * After a small delay to let socket become ready, the very same D interfaces * will be used to define some form of Remote Procedure Calling via HTTP in client code. * * It greatly simplifies writing client applications and gurantees that server and client API * will always stay in sync. Care about method style naming convention mismatch though. */ setTimer(1.seconds, { scope(exit) exitEventLoop(true); logInfo("Starting communication with REST interface. Use capture tool (i.e. wireshark) to check how it looks on HTTP protocol level"); // Example 1 { auto api = new RestInterfaceClient!Example1API("http://127.0.0.1:8080"); assert(api.getSomeInfo() == "Some Info!"); assert(api.getter == "Getter"); assert(api.postSum(2, 3) == 5); } // Example 2 { auto api = new RestInterfaceClient!Example2API("http://127.0.0.1:8080", MethodStyle.upperUnderscored); Example2API.Aggregate[] data = [ { "one", 1, Example2API.Aggregate.Type.Type1 }, { "two", 2, Example2API.Aggregate.Type.Type2 } ]; auto accumulated = api.queryAccumulateAll(data); assert(accumulated.type == Example2API.Aggregate.Type.Type3); assert(accumulated.count == 3); assert(accumulated.name == "onetwo"); } // Example 3 { auto api = new RestInterfaceClient!Example3API("http://127.0.0.1:8080"); assert(api.getMyID(9000) == 9000); assert(api.nestedModule.getNumber() == 42); assert(api.nestedModule.getNumber(1) == 1); } // Example 4 { auto api = new RestInterfaceClient!Example4API("http://127.0.0.1:8080"); api.myNameDoesNotMatter(); assert(api.getParametersInURL("20", "30") == 50); assert(api.querySpecialParameterNames(10, true) == -10); } // Example 5 { auto api = new RestInterfaceClient!Example5API("http://127.0.0.1:8080"); auto secret = api.getSecret(42, User.init); assert(secret == "{secret #42 for admin}"); } // Example 6 { import vibe.http.client : requestHTTP; import vibe.stream.operations : readAllUTF8; auto api = new RestInterfaceClient!Example6API("http://127.0.0.1:8080"); // First we make sure parameters are transmitted via headers. auto res = requestHTTP("http://127.0.0.1:8080/example6_api/portal", (scope r) { r.method = HTTPMethod.GET; r.headers["Authorization"] = "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="; r.headers["X-Custom-Tester"] = "GladOS"; }); assert(res.statusCode == 200); assert(!res.headers["X-Custom-Tester"].length, res.headers["X-Custom-Tester"]); assert(!("WWW-Authenticate" in res.headers), res.headers["WWW-Authenticate"]); assert(res.bodyReader.readAllUTF8() == `"Hello, Caroline"`); // Then we check that both can communicate together. string tester = "Chell"; Nullable!string www; try { // We shouldn't reach the assert, this will throw auto answer = api.getPortal("Oops", tester, www); assert(0, answer); } catch (RestException e) { assert(tester == "The cake is a lie", tester); assert(www == `Basic realm="Aperture"`, www); } } // Example 6 -- Query { import vibe.http.client : requestHTTP; import vibe.stream.operations : readAllUTF8; // First we make sure parameters are transmitted via query. auto res = requestHTTP("http://127.0.0.1:8080/example6_api/answer?qparam=Life_universe_and_the_rest", (scope r) { r.method = HTTPMethod.POST; }); assert(res.statusCode == 200); assert(res.bodyReader.readAllUTF8() == `"True"`); // Then we check that both can communicate together. auto api = new RestInterfaceClient!Example6API("http://127.0.0.1:8080"); auto answer = api.postAnswer("IDK"); assert(answer == "False"); Example6API.FooType fType = {a: 1, s: "str", d: 3.14}; auto expected = "1str3.14"; assert(api.postConcat(fType) == expected); assert(api.postConcatBody(fType) == expected); } // Example 7 -- Custom JSON response { auto api = new RestInterfaceClient!Example7API("http://127.0.0.1:8080"); auto result = api.get(); assert(result["foo"] == 42 && result["bar"] == 13); } // Example 6 -- Body { import vibe.http.client : requestHTTP; import vibe.stream.operations : readAllUTF8; enum expected = "42fortySomething51.42"; // to!string(51.42) doesn't work at CT auto api = new RestInterfaceClient!Example6API("http://127.0.0.1:8080"); // First we make sure parameters are transmitted via query. auto res = requestHTTP("http://127.0.0.1:8080/example6_api/concat", (scope r) { import vibe.data.json; r.method = HTTPMethod.POST; Json obj = Json.emptyObject; obj["parameter"] = serializeToJson(Example6API.FooType(42, "fortySomething", 51.42)); r.writeJsonBody(obj); }); assert(res.statusCode == 200); assert(res.bodyReader.readAllUTF8() == `"`~expected~`"`); // Then we check that both can communicate together. auto answer = api.postConcat(Example6API.FooType(42, "fortySomething", 51.42)); assert(answer == expected); } logInfo("Success."); }); } vibe.d-0.8.2/examples/sendmail/000077500000000000000000000000001324361747700163205ustar00rootroot00000000000000vibe.d-0.8.2/examples/sendmail/dub.json000066400000000000000000000003141324361747700177630ustar00rootroot00000000000000{ "name": "sendmail-example", "description": "Sends a mail (be sure to adjust addresses before running).", "dependencies": { "vibe-d:mail": {"path": "../../"} }, "versions": ["VibeCustomMain"] }vibe.d-0.8.2/examples/sendmail/source/000077500000000000000000000000001324361747700176205ustar00rootroot00000000000000vibe.d-0.8.2/examples/sendmail/source/app.d000066400000000000000000000010501324361747700205410ustar00rootroot00000000000000import vibe.core.log; import vibe.mail.smtp; void main() { auto settings = new SMTPClientSettings("smtp.example.com", 25); settings.connectionType = SMTPConnectionType.startTLS; settings.authType = SMTPAuthType.plain; settings.username = "username"; settings.password = "secret"; auto mail = new Mail; mail.headers["From"] = ""; mail.headers["To"] = ""; mail.headers["Subject"] = "Testmail"; mail.bodyText = "Hello, World!"; logInfo("Sending mail..."); sendMail(settings, mail); logInfo("done."); } vibe.d-0.8.2/examples/serialization/000077500000000000000000000000001324361747700174015ustar00rootroot00000000000000vibe.d-0.8.2/examples/serialization/dub.json000066400000000000000000000003351324361747700210470ustar00rootroot00000000000000{ "name": "serialization-example", "description": "Example of data (de-)serialization.", "dependencies": { "vibe-d:core": {"path": "../../"}, "vibe-d:data": {"path": "../../"} }, "versions": ["VibeCustomMain"] } vibe.d-0.8.2/examples/serialization/source/000077500000000000000000000000001324361747700207015ustar00rootroot00000000000000vibe.d-0.8.2/examples/serialization/source/app.d000066400000000000000000000044721324361747700216350ustar00rootroot00000000000000import vibe.core.log; import vibe.data.serialization; import vibe.data.json; import vibe.data.bson; import std.array : Appender, appender; void main() { // set up some data to serialize Data data; data.number = 13; data.requiredNumber = 42; data.messages ~= "Hello"; data.messages ~= "World"; // serialize to a Json runtime value logInfo("Serialize to Json value:"); auto json = serializeToJson(data); logInfo(" result: %s", json.toString()); auto dedata = deserializeJson!Data(json); logInfo(" deserialized: %s %s %s %s", dedata.number, dedata.requiredNumber, dedata.messages, dedata.custom.counter); logInfo(" "); // serialize directly as a JSON string using an output range (Appender) logInfo("Serialize to JSON string:"); auto app = appender!string(); serializeToJson(app, data); logInfo(" result: %s", app.data); app = appender!string(); serialize!(JsonStringSerializer!(Appender!string, true))(data, app); logInfo(" pretty result: %s", app.data); auto dedata2 = deserialize!(JsonStringSerializer!string, Data)(app.data); logInfo(" deserialized: %s %s %s %s", dedata2.number, dedata2.requiredNumber, dedata2.messages, dedata2.custom.counter); logInfo(" "); // serialize to a BSON value (binary in-memory representation) logInfo("Serialize to BSON:"); auto bson = serializeToBson(data); logInfo(" result: %s", bson.toJson().toString()); auto dedata3 = deserializeBson!Data(bson); logInfo(" deserialized: %s %s %s %s", dedata3.number, dedata3.requiredNumber, dedata3.messages, dedata3.custom.counter); } // The root data type used for serialization struct Data { // this field can be left out or set to null in the deserialization input @optional int number = 12; // change how the field is represented in the serialized output @name("required-number") int requiredNumber; // the toJson/fromJson methods of this type allow custom serialization CustomJsonRep custom; string[] messages; } // A type with custom JSON serialization support struct CustomJsonRep { ulong counter = 13371337; static CustomJsonRep fromJson(Json value) { CustomJsonRep ret; ret.counter = value["loword"].get!long | (value["hiword"].get!long << 16); return ret; } Json toJson() const { auto ret = Json.emptyObject; ret["loword"] = counter & 0xFFFF; ret["hiword"] = (counter >> 16) & 0xFFFF; return ret; } } vibe.d-0.8.2/examples/task_control/000077500000000000000000000000001324361747700172265ustar00rootroot00000000000000vibe.d-0.8.2/examples/task_control/dub.json000066400000000000000000000002621324361747700206730ustar00rootroot00000000000000{ "name": "task-control-example", "description": "Task manipulation example.", "dependencies": { "vibe-d:http": {"path": "../../"} }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/examples/task_control/source/000077500000000000000000000000001324361747700205265ustar00rootroot00000000000000vibe.d-0.8.2/examples/task_control/source/app.d000066400000000000000000000017251324361747700214600ustar00rootroot00000000000000import vibe.appmain; import vibe.core.core; import vibe.core.log; import vibe.http.router; import vibe.http.server; import core.time; Task g_task; void status(HTTPServerRequest req, HTTPServerResponse res) { auto task = g_task; res.render!("index.dt", task); } void interrupt(HTTPServerRequest req, HTTPServerResponse res) { g_task.interrupt(); res.redirect("/"); } shared static this() { g_task = runTask({ logInfo("Starting task, waiting for max. 10 seconds."); sleep(dur!"seconds"(10)); logInfo("Exiting task after 10 seconds."); }); runTask({ logInfo("Monitor task started. Waiting for first task to end."); g_task.join(); logInfo("Task has finished."); }); auto routes = new URLRouter; routes.get("/", &status); routes.post("/interrupt", &interrupt); auto settings = new HTTPServerSettings; settings.port = 8080; listenHTTP(settings, routes); logInfo("Please open http://localhost:8080/ in a browser to monitor or interrupt the task."); } vibe.d-0.8.2/examples/task_control/views/000077500000000000000000000000001324361747700203635ustar00rootroot00000000000000vibe.d-0.8.2/examples/task_control/views/index.dt000066400000000000000000000003741324361747700220270ustar00rootroot00000000000000doctype html html head title Task control test body h1 Task control test - if( task.running ) p The task is still running. form(action="interrupt", method="POST") button(type="submit") Interrupt - else p The task has terminated.vibe.d-0.8.2/examples/tcp_separate/000077500000000000000000000000001324361747700171765ustar00rootroot00000000000000vibe.d-0.8.2/examples/tcp_separate/dub.json000066400000000000000000000003721324361747700206450ustar00rootroot00000000000000{ "name": "tcp-separate-example", "description": "Example using a single TCP connection from different tasks.", "dependencies": { "vibe-d:core": {"path": "../../"}, "vibe-d:stream": {"path": "../../"} }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/examples/tcp_separate/source/000077500000000000000000000000001324361747700204765ustar00rootroot00000000000000vibe.d-0.8.2/examples/tcp_separate/source/app.d000066400000000000000000000016441324361747700214300ustar00rootroot00000000000000import vibe.appmain; import vibe.core.core : runTask, sleep; import vibe.core.log : logError, logInfo; import vibe.core.net : TCPConnection, listenTCP; import vibe.stream.operations : readLine; import core.time; shared static this() { // shows how to handle reading and writing of the TCP connection // in separate tasks listenTCP(7000, (conn) { auto wtask = runTask!TCPConnection((conn) { try { while (conn.connected) { conn.write("Hello, World!\r\n"); sleep(2.seconds()); } } catch (Exception e) { logError("Failed to write to client: %s", e.msg); conn.close(); } }, conn); try { while (!conn.empty) { auto ln = cast(const(char)[])conn.readLine(); if (ln == "quit") { logInfo("Client wants to quit."); break; } else logInfo("Got line: %s", ln); } } catch (Exception e) { logError("Failed to read from client: %s", e.msg); } conn.close(); }); } vibe.d-0.8.2/examples/udp/000077500000000000000000000000001324361747700153145ustar00rootroot00000000000000vibe.d-0.8.2/examples/udp/dub.json000066400000000000000000000002731324361747700167630ustar00rootroot00000000000000{ "name": "udp-example", "description": "Sends UDP packets from one socket to another.", "dependencies": { "vibe-d:core": {"path": "../../"} }, "versions": ["VibeDefaultMain"] }vibe.d-0.8.2/examples/udp/source/000077500000000000000000000000001324361747700166145ustar00rootroot00000000000000vibe.d-0.8.2/examples/udp/source/app.d000066400000000000000000000010061324361747700175360ustar00rootroot00000000000000import vibe.appmain; import vibe.core.core; import vibe.core.log; import vibe.core.net; import core.time; shared static this() { runTask({ auto udp_listener = listenUDP(1234); while (true) { auto pack = udp_listener.recv(); logInfo("Got packet: %s", cast(string)pack); } }); runTask({ auto udp_sender = listenUDP(0); udp_sender.connect("127.0.0.1", 1234); while (true) { sleep(dur!"msecs"(500)); logInfo("Sending packet..."); udp_sender.send(cast(ubyte[])"Hello, World!"); } }); } vibe.d-0.8.2/examples/unix_socket/000077500000000000000000000000001324361747700170575ustar00rootroot00000000000000vibe.d-0.8.2/examples/unix_socket/dub.json000066400000000000000000000004741324361747700205310ustar00rootroot00000000000000{ "name": "unit-socket-example", "description": "Example for sending http requests to unix sockets", "dependencies": { "vibe-d:http": {"path": "../../"}, "vibe-d:web": {"path": "../../"}, "vibe-d:core": {"path": "../../"} }, "versions": ["VibeNoSSL"], "subConfigurations": { "vibe-d:core": "libevent"} } vibe.d-0.8.2/examples/unix_socket/source/000077500000000000000000000000001324361747700203575ustar00rootroot00000000000000vibe.d-0.8.2/examples/unix_socket/source/app.d000066400000000000000000000004431324361747700213050ustar00rootroot00000000000000import vibe.inet.url; import vibe.http.client; import vibe.stream.operations; import std.stdio; void main() { URL url = URL("http+unix://%2Fvar%2Frun%2Fdocker.sock/containers/json"); writeln(url); requestHTTP(url,(scope req){},(scope res){ writeln(res.bodyReader.readAllUTF8); }); } vibe.d-0.8.2/examples/uploader/000077500000000000000000000000001324361747700163375ustar00rootroot00000000000000vibe.d-0.8.2/examples/uploader/dub.json000066400000000000000000000002721324361747700200050ustar00rootroot00000000000000{ "name": "uploader-example", "description": "Simple form based file upload example.", "dependencies": { "vibe-d:http": {"path": "../../"} }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/examples/uploader/source/000077500000000000000000000000001324361747700176375ustar00rootroot00000000000000vibe.d-0.8.2/examples/uploader/source/app.d000066400000000000000000000016031324361747700205640ustar00rootroot00000000000000import vibe.appmain; import vibe.core.file; import vibe.core.log; import vibe.core.path; import vibe.http.router; import vibe.http.server; import std.exception; void uploadFile(scope HTTPServerRequest req, scope HTTPServerResponse res) { auto pf = "file" in req.files; enforce(pf !is null, "No file uploaded!"); try moveFile(pf.tempPath, Path(".") ~ pf.filename); catch (Exception e) { logWarn("Failed to move file to destination folder: %s", e.msg); logInfo("Performing copy+delete instead."); copyFile(pf.tempPath, Path(".") ~ pf.filename); } res.writeBody("File uploaded!", "text/plain"); } shared static this() { auto router = new URLRouter; router.get("/", staticTemplate!"upload_form.dt"); router.post("/upload", &uploadFile); auto settings = new HTTPServerSettings; settings.port = 8080; settings.bindAddresses = ["::1", "127.0.0.1"]; listenHTTP(settings, router); } vibe.d-0.8.2/examples/uploader/views/000077500000000000000000000000001324361747700174745ustar00rootroot00000000000000vibe.d-0.8.2/examples/uploader/views/upload_form.dt000066400000000000000000000004061324361747700223340ustar00rootroot00000000000000doctype 5 html(lang="en") head title Uploader body h1 Uploader form(method="POST", action="/upload", enctype="multipart/form-data") p File: input(type="file", name="file", size="50", maxlength="100000") input(type="submit", value="Upload!") vibe.d-0.8.2/examples/web-auth/000077500000000000000000000000001324361747700162405ustar00rootroot00000000000000vibe.d-0.8.2/examples/web-auth/dub.json000066400000000000000000000002671324361747700177120ustar00rootroot00000000000000{ "name": "web-auth-example", "description": "Simple service using the web framework.", "dependencies": { "vibe-d:web": {"path": "../../"} }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/examples/web-auth/public/000077500000000000000000000000001324361747700175165ustar00rootroot00000000000000vibe.d-0.8.2/examples/web-auth/public/styles/000077500000000000000000000000001324361747700210415ustar00rootroot00000000000000vibe.d-0.8.2/examples/web-auth/public/styles/common.css000066400000000000000000000000701324361747700230400ustar00rootroot00000000000000body { font-family: sans-serif; } .error { color: red; }vibe.d-0.8.2/examples/web-auth/source/000077500000000000000000000000001324361747700175405ustar00rootroot00000000000000vibe.d-0.8.2/examples/web-auth/source/app.d000066400000000000000000000116621324361747700204730ustar00rootroot00000000000000// This module implements a simple web service with a login form and two // settings that can be changed by the logged in user. // It uses an authorization framework for fine-grained roles. module app; import std.exception : enforce; import vibe.core.log; import vibe.http.fileserver; import vibe.http.router; import vibe.http.server; import vibe.utils.validation; import vibe.web.auth; import vibe.web.web; // Aggregates information and roles about the currently logged in user struct AuthInfo { string userName; bool premium; bool admin; @safe: bool isAdmin() { return this.admin; } bool isPremiumUser() { return this.premium; } } /** The methods of this class will be mapped to HTTP routes and serve as request handlers. The @requiresAuth annotation demands that every public method is annotated with either: - @noAuth - @anyAuth - @auth(...) */ @requiresAuth class SampleService { // The authentication handler which will be called whenever auth info is needed. // Its return type can be injected into the routes of the associated service. // (for obvious reasons this shouldn't be a route itself) @noRoute AuthInfo authenticate(scope HTTPServerRequest req, scope HTTPServerResponse res) @safe { if (!req.session || !req.session.isKeySet("auth")) throw new HTTPStatusException(HTTPStatus.forbidden, "Not authorized to perform this action!"); return req.session.get!AuthInfo("auth"); } // All public routes wrapped into one block @noAuth { // "GET /" // overrides the path that gets inferred from the method name to // HTTPServer{Request, Response} parameters get automatically injected @path("/") void getHome(scope HTTPServerRequest req) { import std.typecons : Nullable; Nullable!AuthInfo auth; if (req.session && req.session.isKeySet("auth")) auth = req.session.get!AuthInfo("auth"); render!("home.dt", auth); } // Method name gets mapped to "GET /login" and a single optional // _error parameter is accepted (see postLogin) void getLogin(string _error = null) { string error = _error; render!("login.dt", error); } // Method name gets mapped to "POST /login" and two HTTP form parameters // (taken from HTTPServerRequest.form or .query) are accepted. // // The @errorDisplay attribute causes any exceptions to be passed to the // _error parameter of getLogin to render the error. The same happens for // validation errors (ValidUsername). @errorDisplay!getLogin void postLogin(ValidUsername user, string password, scope HTTPServerRequest req, scope HTTPServerResponse res) { enforce(password == "secret", "Invalid password."); AuthInfo s = {userName: user}; req.session = res.startSession; req.session.set("auth", s); redirect("./"); } } // Routes that require any kind of authentication @anyAuth { // GET /logout void postLogout() { terminateSession(); redirect("./"); } // GET /settings // authUser is automatically injected based on the authenticate() result void getSettings(AuthInfo auth, string _error = null) { auto error = _error; render!("settings.dt", error, auth); } // POST /settings // @errorDisplay will render errors using the getSettings method. // authUser gets injected with the associated authenticate() @errorDisplay!getSettings void postSettings(bool premium, bool admin, ValidUsername user_name, AuthInfo authUser, scope HTTPServerRequest req) { AuthInfo s = authUser; s.userName = user_name; s.premium = premium; s.admin = admin; req.session.set("auth", s); redirect("./"); } } /** With @auth specific roles can be required. Moreover, they can be combined: @auth(Role.admin) - requires an admin role @auth(Role.admin | Role.premium) - requires an admin or a premium role @auth(Role.admin & Role.premium) - requires an admin and a premium role The role is mapped to is of the type returned by the regarding authenticate method. For example, `Role.admin` will call `AuthInfo.isAdmin` */ // GET /premium @auth(Role.admin | Role.premiumUser) void getPremium() { render!("premium.dt"); } // GET /admin @auth(Role.admin) void getAdmin() { render!("admin.dt"); } } shared static this() { // Create the router that will dispatch each request to the proper handler method auto router = new URLRouter; // Register our sample service class as a web interface. Each public method // will be mapped to a route in the URLRouter router.registerWebInterface(new SampleService); // All requests that haven't been handled by the web interface registered above // will be handled by looking for a matching file in the public/ folder. router.get("*", serveStaticFiles("public/")); // Start up the HTTP server auto settings = new HTTPServerSettings; settings.port = 8080; settings.bindAddresses = ["::1", "127.0.0.1"]; settings.sessionStore = new MemorySessionStore; listenHTTP(settings, router); logInfo("Please open http://127.0.0.1:8080/ in your browser."); } vibe.d-0.8.2/examples/web-auth/views/000077500000000000000000000000001324361747700173755ustar00rootroot00000000000000vibe.d-0.8.2/examples/web-auth/views/admin.dt000066400000000000000000000001701324361747700210140ustar00rootroot00000000000000extends layout block head - auto title = "Admin area"; block contents a(href="#{req.rootDir}") Back p Admin Area. vibe.d-0.8.2/examples/web-auth/views/home.dt000066400000000000000000000007171324361747700206630ustar00rootroot00000000000000extends layout block head - auto title = "Home"; block contents - if (!auth.isNull) p Hello, #{auth.userName}! Welcome to your personal web service. p You can edit settings. p Currently your premium membership is #{auth.isPremiumUser ? "on" : "off"}. - if (auth.isAdmin) p View the admin panel - else p This is an example web service. p Please log in. vibe.d-0.8.2/examples/web-auth/views/layout.dt000066400000000000000000000004301324361747700212400ustar00rootroot00000000000000doctype html html head block head link(rel="stylesheet", href="#{req.rootDir}styles/common.css") title #{title} - Sample service body - if (req.session) form(method="POST", action="#{req.rootDir}logout") button(type="submit") Log out h1= title block contentsvibe.d-0.8.2/examples/web-auth/views/login.dt000066400000000000000000000005631324361747700210420ustar00rootroot00000000000000extends layout block head - auto title = "Log in"; block contents form(method="POST", action="login") div label(for="user") User name: input#user(name="user", type="text") div label(for="password") Password (use "secret"): input#password(name="password", type="password") - if (error.length) p.error= error div button(type="sumbit") Apply vibe.d-0.8.2/examples/web-auth/views/premium.dt000066400000000000000000000001741324361747700214060ustar00rootroot00000000000000extends layout block head - auto title = "Premium area"; block contents a(href="#{req.rootDir}") Back p Premium Area. vibe.d-0.8.2/examples/web-auth/views/settings.dt000066400000000000000000000013101324361747700215610ustar00rootroot00000000000000extends layout block head - auto title = "Settings"; block contents a(href="#{req.rootDir}") Back form(method="POST", action="settings") div - if (auth.isPremiumUser) input#premium(name="premium", type="checkbox", checked) - else input#premium(name="premium", type="checkbox") label(for="premium") Premium membership div - if (auth.isAdmin) input#admin(name="admin", type="checkbox", checked) - else input#admin(name="admin", type="checkbox") label(for="admin") Admin user div label(for="username") User name br input#username(name="user_name", type="text", value=auth.userName) - if (error.length) p.error= error div button(type="sumbit") OK vibe.d-0.8.2/examples/web-i18n/000077500000000000000000000000001324361747700160565ustar00rootroot00000000000000vibe.d-0.8.2/examples/web-i18n/dub.json000066400000000000000000000003651324361747700175270ustar00rootroot00000000000000{ "name": "web-framework-i18n-example", "description": "Internationalized web framework example.", "dependencies": { "vibe-d:web": {"path": "../../"} }, "stringImportPaths": ["views", "translations"], "versions": ["VibeDefaultMain"] }vibe.d-0.8.2/examples/web-i18n/public/000077500000000000000000000000001324361747700173345ustar00rootroot00000000000000vibe.d-0.8.2/examples/web-i18n/public/styles/000077500000000000000000000000001324361747700206575ustar00rootroot00000000000000vibe.d-0.8.2/examples/web-i18n/public/styles/common.css000066400000000000000000000000701324361747700226560ustar00rootroot00000000000000body { font-family: sans-serif; } .error { color: red; }vibe.d-0.8.2/examples/web-i18n/source/000077500000000000000000000000001324361747700173565ustar00rootroot00000000000000vibe.d-0.8.2/examples/web-i18n/source/app.d000066400000000000000000000040621324361747700203050ustar00rootroot00000000000000// This module shows the translation support of the vibe.web.web framework. module app; import vibe.core.log; import vibe.http.fileserver; import vibe.http.router; import vibe.http.server; import vibe.web.web; import vibe.web.i18n; // A "traits" structure used to define the available translation files at // compile time. struct TranslationContext { import std.typetuple; // Throw an error when an translation string is missing/mistyped. enum enforceExistingKeys = true; // The list of supported languages (the same family of languages will // automatically be matched to the closest candidate, e.g. en_GB->en_US) alias languages = TypeTuple!("en_US", "de_DE"); // The base name of the translation files - the full names will be // example.en_US.po and example.de_DE.po. Any number of these mixin // statements can be used. mixin translationModule!"example"; } // perform some generic translation to see if things are working... static assert(tr!(TranslationContext, "de_DE")("Welcome to the i18n example app!") == "Willkommen zum i18n-Beispiel!"); // Use the @translationContext attribute to make the translations defined // above available to our web service @translationContext!TranslationContext class SampleService { // Just render a simple static page for "GET /" requests. Use the browser's // language preferences to control if the text is shown in English or in German. @path("/") void getHome() { render!"home.dt"; } } shared static this() { // Create the router that will map the incoming requests to request handlers auto router = new URLRouter; // Register SampleService as a web serive router.registerWebInterface(new SampleService); // Handle all other requests by searching for matching files in the public/ folder. router.get("*", serveStaticFiles("public/")); // Start up the HTTP server. auto settings = new HTTPServerSettings; settings.port = 8080; settings.bindAddresses = ["::1", "127.0.0.1"]; settings.sessionStore = new MemorySessionStore; listenHTTP(settings, router); logInfo("Please open http://127.0.0.1:8080/ in your browser."); } vibe.d-0.8.2/examples/web-i18n/translations/000077500000000000000000000000001324361747700205775ustar00rootroot00000000000000vibe.d-0.8.2/examples/web-i18n/translations/example.de_DE.po000066400000000000000000000023731324361747700235360ustar00rootroot00000000000000msgid "" msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\\n" msgid "Welcome to the i18n example app!" msgstr "Willkommen zum i18n-Beispiel!" msgid "This is the internationalization example app." msgstr "Dies ist das Beispielprogramm für Internationalisierung." msgid "It can use string interpolation! See the title \"#{title}\" here as an example." msgstr "Es kann String-Interpolationen benutzen! Nehmen Sie den Titel \"#{title}\" hier als Beispiel." msgid "Here are some examples of context being used." msgstr "Hier sind einige Beispiele von Kontext verwendet." msgid "Cardinal directions:" msgstr "Himmelsrichtungen:" msgctxt "direction" msgid "N" msgstr "Norden" msgctxt "direction" msgid "S" msgstr "Süden" msgctxt "direction" msgid "E" msgstr "Osten" msgctxt "direction" msgid "W" msgstr "Westen" msgid "Letter mnemonics:" msgstr "Schreiben Mnemotechnik:" msgctxt "letter" msgid "N" msgstr "Nordpol" msgctxt "letter" msgid "S" msgstr "Sigfried" msgctxt "letter" msgid "E" msgstr "Emil" msgctxt "letter" msgid "W" msgstr "Wilhelm" msgid "Plural forms:" msgstr "Pluralformen:" msgid "One file created." msgid_plural "Several files created." msgstr "Eine Datei erstellt." msgstr[0] "%d Datei erstellt wurde." msgstr[1] "%d Dateien erstellt wurden." vibe.d-0.8.2/examples/web-i18n/translations/example.en_US.po000066400000000000000000000023121324361747700236000ustar00rootroot00000000000000msgid "" msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\\n" msgid "Welcome to the i18n example app!" msgstr "Welcome to the i18n example app!" msgid "This is the internationalization example app." msgstr "This is the internationalization example app." msgid "It can use string interpolation! See the title \"#{title}\" here as an example." msgstr "It can use string interpolation! See the title \"#{title}\" here as an example." msgid "Here are some examples of context being used." msgstr "Here are some examples of context being used." msgid "Cardinal directions:" msgstr "Cardinal directions:" msgctxt "direction" msgid "N" msgstr "North" msgctxt "direction" msgid "S" msgstr "South" msgctxt "direction" msgid "E" msgstr "East" msgctxt "direction" msgid "W" msgstr "West" msgid "Letter mnemonics:" msgstr "Letter mnemonics:" msgctxt "letter" msgid "N" msgstr "November" msgctxt "letter" msgid "S" msgstr "Sierra" msgctxt "letter" msgid "E" msgstr "Echo" msgctxt "letter" msgid "W" msgstr "Whiskey" msgid "Plural forms:" msgstr "Plural forms:" msgid "One file created." msgid_plural "Several files created." msgstr "One file created." msgstr[0] "%d file was created." msgstr[1] "%d files were created." vibe.d-0.8.2/examples/web-i18n/views/000077500000000000000000000000001324361747700172135ustar00rootroot00000000000000vibe.d-0.8.2/examples/web-i18n/views/home.dt000066400000000000000000000012541324361747700204760ustar00rootroot00000000000000extends layout block head - auto title = "Home"; block contents p& This is the internationalization example app. p& It can use string interpolation! See the title "#{title}" here as an example. - import vibe.web.web; p& Here are some examples of context being used. p& Cardinal directions: ul - foreach (direction; ["N","S","E","W"]) li= trWeb(direction, "direction") p& Letter mnemonics: ul - foreach (letter; ["N","S","E","W"]) li= trWeb(letter, "letter") p& Plural forms: - import std.string : format; ul li= format(trWeb("One file created.", "Several files created.", 1), 1) li= format(trWeb("One file created.", "Several files created.", 42), 42) vibe.d-0.8.2/examples/web-i18n/views/layout.dt000066400000000000000000000004301324361747700210560ustar00rootroot00000000000000doctype html html head block head link(rel="stylesheet", href="#{req.rootDir}styles/common.css") title #{title} - Sample service body - if (req.session) form(method="POST", action="#{req.rootDir}logout") button(type="submit") Log out h1= title block contentsvibe.d-0.8.2/examples/web/000077500000000000000000000000001324361747700153015ustar00rootroot00000000000000vibe.d-0.8.2/examples/web/dub.json000066400000000000000000000002761324361747700167530ustar00rootroot00000000000000{ "name": "web-framework-example", "description": "Simple service using the web framework.", "dependencies": { "vibe-d:web": {"path": "../../"} }, "versions": ["VibeDefaultMain"] }vibe.d-0.8.2/examples/web/public/000077500000000000000000000000001324361747700165575ustar00rootroot00000000000000vibe.d-0.8.2/examples/web/public/styles/000077500000000000000000000000001324361747700201025ustar00rootroot00000000000000vibe.d-0.8.2/examples/web/public/styles/common.css000066400000000000000000000000701324361747700221010ustar00rootroot00000000000000body { font-family: sans-serif; } .error { color: red; }vibe.d-0.8.2/examples/web/source/000077500000000000000000000000001324361747700166015ustar00rootroot00000000000000vibe.d-0.8.2/examples/web/source/app.d000066400000000000000000000116431324361747700175330ustar00rootroot00000000000000// This module implements a simple web service with a login form and two // settings that can be changed by the logged in user. module app; import std.exception : enforce; import vibe.core.log; import vibe.http.fileserver; import vibe.http.router; import vibe.http.server; import vibe.utils.validation; import vibe.web.web; // Aggregates all information about the currently logged in user (if any). struct UserSettings { bool loggedIn = false; string userName; bool someSetting; } // The methods of this class will be mapped to HTTP routes and serve as // request handlers. class SampleService { private { // Type-safe and convenient access of user settings. This // SessionVar will store the contents of the variable in the // HTTP session with the key "settings". A session will be // started automatically as soon as m_userSettings gets modified // modified. SessionVar!(UserSettings, "settings") m_userSettings; } // overrides the path that gets inferred from the method name to // "GET /" @path("/") void getHome() { auto settings = m_userSettings; render!("home.dt", settings); } // Method name gets mapped to "GET /login" and a single optional // _error parameter is accepted (see postLogin) void getLogin(string _error = null) { string error = _error; render!("login.dt", error); } // Method name gets mapped to "POST /login" and two HTTP form parameters // (taken from HTTPServerRequest.form or .query) are accepted. // // The @errorDisplay attribute causes any exceptions to be passed to the // _error parameter of getLogin to render the error. The same happens for // validation errors (ValidUsername). @errorDisplay!getLogin void postLogin(ValidUsername user, string password) { enforce(password == "secret", "Invalid password."); UserSettings s; s.loggedIn = true; s.userName = user; s.someSetting = false; m_userSettings = s; redirect("./"); } // GET /logout // This method accepts the raw HTTPServerResponse to access advanced fields void postLogout(scope HTTPServerResponse res) { m_userSettings = UserSettings.init; // NOTE: there is also a terminateSession() function in vibe.web.web // that avoids the need to work with a raw HTTPServerResponse. res.terminateSession(); redirect("./"); } // GET /settings // This method uses a custom @auth attribute (defined below) that injects // code to ensure correct authentication and that fills the _authUser parameter // with the authenticated user name @auth void getSettings(string _authUser, string _error = null) { UserSettings settings = m_userSettings; auto error = _error; render!("settings.dt", error, settings); } // POST /settings // Again uses the @auth custom attribute and @errorDisplay to render errors // using the getSettings method. @auth @errorDisplay!getSettings void postSettings(bool some_setting, ValidUsername user_name, string _authUser) { assert(m_userSettings.loggedIn); UserSettings s = m_userSettings; s.userName = user_name; s.someSetting = some_setting; m_userSettings = s; redirect("./"); } // Defines the @auth attribute in terms of an @before annotation. @before causes // the given method (ensureAuth) to be called before the request handler is run. // It's return value will be passed to the "_authUser" parameter of the handler. private enum auth = before!ensureAuth("_authUser"); // Implementation of the @auth attribute - ensures that the user is logged in and // redirects to the log in page otherwise (causing the actual request handler method // to be skipped). private string ensureAuth(scope HTTPServerRequest req, scope HTTPServerResponse res) { if (!SampleService.m_userSettings.loggedIn) redirect("/login"); return SampleService.m_userSettings.userName; } // Adds support for using private member functions with "before". The ensureAuth method // is only used internally in this class and should be private, but by default external // template code has no access to private symbols, even if those are explicitly passed // to the template. This mixin template defined in vibe.web.web creates a special class // member that enables this usage pattern. mixin PrivateAccessProxy; } shared static this() { // Create the router that will dispatch each request to the proper handler method auto router = new URLRouter; // Register our sample service class as a web interface. Each public method // will be mapped to a route in the URLRouter router.registerWebInterface(new SampleService); // All requests that haven't been handled by the web interface registered above // will be handled by looking for a matching file in the public/ folder. router.get("*", serveStaticFiles("public/")); // Start up the HTTP server auto settings = new HTTPServerSettings; settings.port = 8080; settings.bindAddresses = ["::1", "127.0.0.1"]; settings.sessionStore = new MemorySessionStore; listenHTTP(settings, router); logInfo("Please open http://127.0.0.1:8080/ in your browser."); } vibe.d-0.8.2/examples/web/views/000077500000000000000000000000001324361747700164365ustar00rootroot00000000000000vibe.d-0.8.2/examples/web/views/home.dt000066400000000000000000000005551324361747700177240ustar00rootroot00000000000000extends layout block head - auto title = "Home"; block contents - if (settings.loggedIn) p Hello, #{settings.userName}! Welcome to your personal web service. p You can edit settings. Currently your setting is #{settings.someSetting ? "on" : "off"}. - else p This is an example web service. p Please log in. vibe.d-0.8.2/examples/web/views/layout.dt000066400000000000000000000004301324361747700203010ustar00rootroot00000000000000doctype html html head block head link(rel="stylesheet", href="#{req.rootDir}styles/common.css") title #{title} - Sample service body - if (req.session) form(method="POST", action="#{req.rootDir}logout") button(type="submit") Log out h1= title block contentsvibe.d-0.8.2/examples/web/views/login.dt000066400000000000000000000005631324361747700201030ustar00rootroot00000000000000extends layout block head - auto title = "Log in"; block contents form(method="POST", action="login") div label(for="user") User name: input#user(name="user", type="text") div label(for="password") Password (use "secret"): input#password(name="password", type="password") - if (error.length) p.error= error div button(type="sumbit") Apply vibe.d-0.8.2/examples/web/views/settings.dt000066400000000000000000000007351324361747700206340ustar00rootroot00000000000000extends layout block head - auto title = "Settings"; block contents a(href="#{req.rootDir}") Back form(method="POST", action="settings") div input#somesetting(name="some_setting", type="checkbox", checked=settings.someSetting) label(for="somesetting") Some setting div label(for="username") User name br input#username(name="user_name", type="text", value=settings.userName) - if (error.length) p.error= error div button(type="sumbit") OK vibe.d-0.8.2/examples/web_ajax/000077500000000000000000000000001324361747700163045ustar00rootroot00000000000000vibe.d-0.8.2/examples/web_ajax/dub.json000066400000000000000000000003721324361747700177530ustar00rootroot00000000000000{ "name": "web-ajax-example", "description": "Uses the registerWebInterface function for making functions available to JavaScript and to Diet templates.", "dependencies": { "vibe-d:web": {"path": "../../"} }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/examples/web_ajax/source/000077500000000000000000000000001324361747700176045ustar00rootroot00000000000000vibe.d-0.8.2/examples/web_ajax/source/app.d000066400000000000000000000065161324361747700205410ustar00rootroot00000000000000/** This example demonstrates some possibilities of registerWebInterface in conjunction with AJAX requests. The tableview.dt uses JavaScript for just replacing the table if filter-data changes if no JavaScript is available the whole site gets reloaded. */ module app; import vibe.appmain; import vibe.http.router; import vibe.http.server; import vibe.web.web; import std.array; import std.algorithm; import std.conv; import std.stdio; import std.string; struct Address { string street; int door; int zip_code; } /** This class serves its users array as html table. Also have a look at views/createTable.dt. It's intended to be used by AJAX queries to provide HTML snippets to use as replacements for DOM parts. */ class DataProvider { enum Fields { nameid, surnameid, addressid } private { string[][] users = [ ["Tina", "Muster", "Wassergasse 12"], ["Martina", "Maier", "Broadway 6"], ["John", "Foo", "Church Street 7"] ]; } // GET /data_provider/data void getData() { auto table = users; render!("createTable.dt", table)(); } // GET /data_provider/data_filtered /** Overload that takes an enumeration for indexing the users array in a secure way and a value to filter on. Method code does not have to care about validating user data, no need to check that a field is actually present, no manual conversion, ... Say that this is not ingenious, I love D. */ void getDataFiltered(Fields field, string value) { auto table = users.filter!((a) => value.length==0 || a[field]==value)().array(); render!("createTable.dt", table)(); } // POST /data_provider/add_user /// Add a new user to the array, using this method from JavaScript is left as an exercise. void postAddUser(string name, string surname, string address) { users ~= [name, surname, address]; } // POST /data_provider/add_user_structured /// Add user with structured address void postAddUserStructured(string name, string surname, Address address) { users ~= [name, surname, address.street~" "~to!string(address.door)~"\n"~to!string(address.zip_code)]; } } class App { private { DataProvider m_provider; } this() { m_provider = new DataProvider; } // the methods of DataProvider will be available at /data_provider/* @property DataProvider dataProvider() { return m_provider; } // GET / void get() { redirect("/table"); } // GET /table void getTable() { auto table = m_provider.users; render!("tableview.dt", table)(); } // GET /table?field=...&value=... void getTable(DataProvider.Fields field, string value) { auto table = m_provider.users.filter!((a) => value.length==0 || a[field]==value)().array(); render!("tableview.dt", table, field, value); } // POST /add_user void postAddUser(string name, string surname, string address) { dataProvider.postAddUser(name, surname, address); redirect("/"); } // POST /add_user_structured void postAddUserStructured(string name, string surname, Address address) { dataProvider.postAddUserStructured(name, surname, address); redirect("/"); } // static methods are ignored. static void getSomethingStatic() { return; } } shared static this() { auto router = new URLRouter; router.registerWebInterface(new App); auto settings = new HTTPServerSettings; settings.port = 8080; settings.bindAddresses = ["::1", "127.0.0.1"]; listenHTTP(settings, router); } vibe.d-0.8.2/examples/web_ajax/views/000077500000000000000000000000001324361747700174415ustar00rootroot00000000000000vibe.d-0.8.2/examples/web_ajax/views/createTable.dt000066400000000000000000000001131324361747700222000ustar00rootroot00000000000000table - foreach(row; table) tr - foreach(column; row) td= column vibe.d-0.8.2/examples/web_ajax/views/layout.dt000066400000000000000000000002251324361747700213060ustar00rootroot00000000000000doctype html html(lang="en") head block head body block body .content block content .sidebar block sidebar .footer block footer vibe.d-0.8.2/examples/web_ajax/views/tableview.dt000066400000000000000000000034531324361747700217610ustar00rootroot00000000000000extends layout prepend block head title Welcome! block content .clear h1 Welcome! #datatable.datatable h2 Users include createTable .filterbycontainer h2 Filter users by field value form(onsubmit="return getTable(this.field.value, this.value.value)", action='/table', method='GET') table tr td Filter by: td select(name="field") option(value="nameid") Name option(value="surnameid") Surname option(value="addressid") Address tr td Value: td input(type="text", width="160", name="value") tr td td button(type="submit") Filter .additemcontainer h2 Add new user form(action='/add_user', method='POST') table - import std.string; - foreach ( item ; ["name", "surname", "address"] ) tr td= item[0..1].toUpper()~item[1..$] td input(type="text", width="160", name="#{item}") tr td td input(type='submit', value="Add") .additemcontainer h2 Add new user (structured address) form(action='/add_user_structured', method='POST') table - import std.string; - foreach ( item ; ["name", "surname"] ) tr td= item[0..1].toUpper()~item[1..$] td input(type="text", width="160", name="#{item}") tr - foreach ( item ; ["street", "door", "zip_code"] ) tr td= item[0..1].toUpper()~item[1..$] td input(type="text", width="160", name='#{"address_"~item}') tr td td input(type='submit', value="Add") script. function getTable(field, value) { var req = new XMLHttpRequest(); req.open('GET', '/data_provider/data_filtered?field='+field+'&value='+value, false); req.send(); var tablediv=document.getElementById('datatable'); tablediv.innerHTML = req.responseText; return false; } vibe.d-0.8.2/examples/web_websocket/000077500000000000000000000000001324361747700173475ustar00rootroot00000000000000vibe.d-0.8.2/examples/web_websocket/dub.json000066400000000000000000000004011324361747700210070ustar00rootroot00000000000000{ "name": "web-websockets-example", "description": "Example for using the WebSocket feature with WebInterface", "authors": [ "Darius C." ], "dependencies": { "vibe-d": {"version": "~master", "path": "../../"} }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/examples/web_websocket/public/000077500000000000000000000000001324361747700206255ustar00rootroot00000000000000vibe.d-0.8.2/examples/web_websocket/public/scripts/000077500000000000000000000000001324361747700223145ustar00rootroot00000000000000vibe.d-0.8.2/examples/web_websocket/public/scripts/websocket.js000066400000000000000000000012711324361747700246410ustar00rootroot00000000000000var socket function connect() { setText("connecting..."); socket = new WebSocket(getBaseURL() + "/ws"); socket.onopen = function() { setText("connected. waiting for timer..."); } socket.onmessage = function(message) { setText(message.data); } socket.onclose = function() { setText("connection closed."); } socket.onerror = function() { setText("Error!"); } } function closeConnection() { socket.close(); setText("closed."); } function setText(text) { document.getElementById("timer").innerHTML = text; } function getBaseURL() { var href = window.location.href.substring(7); // strip "http://" var idx = href.indexOf("/"); return "ws://" + href.substring(0, idx); } vibe.d-0.8.2/examples/web_websocket/source/000077500000000000000000000000001324361747700206475ustar00rootroot00000000000000vibe.d-0.8.2/examples/web_websocket/source/app.d000066400000000000000000000020601324361747700215720ustar00rootroot00000000000000module app; import vibe.core.core : sleep; import vibe.core.log; import vibe.http.fileserver : serveStaticFiles; import vibe.http.router : URLRouter; import vibe.http.server; import vibe.web.web; import vibe.http.websockets : WebSocket, handleWebSockets; import core.time; import std.conv : to; class WebsocketService { @path("/") void getHome() { render!("index.dt"); } @path("/ws") void getWebsocket(scope WebSocket socket){ int counter = 0; logInfo("Got new web socket connection."); while (true) { sleep(1.seconds); if (!socket.connected) break; counter++; logInfo("Sending '%s'.", counter); socket.send(counter.to!string); } logInfo("Client disconnected."); } } shared static this() { auto router = new URLRouter; router.registerWebInterface(new WebsocketService); router.get("*", serveStaticFiles("public/")); auto settings = new HTTPServerSettings; settings.port = 8080; settings.bindAddresses = ["::1", "127.0.0.1"]; listenHTTP(settings, router); logInfo("Please open http://127.0.0.1:8080/ in your browser."); } vibe.d-0.8.2/examples/web_websocket/views/000077500000000000000000000000001324361747700205045ustar00rootroot00000000000000vibe.d-0.8.2/examples/web_websocket/views/index.dt000066400000000000000000000005661324361747700221530ustar00rootroot00000000000000doctype html html head title WebSocket Test script(type='text/javascript', src='/scripts/websocket.js') style. pre#timer { border: 1px solid black; } body(onload='connect()') p The following box should show a running counter, updated by the server: pre#timer. button(type='button', onclick='closeConnection()') Close connection vibe.d-0.8.2/examples/websocket/000077500000000000000000000000001324361747700165125ustar00rootroot00000000000000vibe.d-0.8.2/examples/websocket/dub.json000066400000000000000000000002711324361747700201570ustar00rootroot00000000000000{ "name": "websocket-example", "description": "Example for using the WebSocket feature", "dependencies": { "vibe-d:http": {"path": "../../"} }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/examples/websocket/public/000077500000000000000000000000001324361747700177705ustar00rootroot00000000000000vibe.d-0.8.2/examples/websocket/public/index.html000066400000000000000000000006531324361747700217710ustar00rootroot00000000000000 WebSocket Test

The following box should show a running counter, updated by the server:


	


vibe.d-0.8.2/examples/websocket/public/scripts/000077500000000000000000000000001324361747700214575ustar00rootroot00000000000000vibe.d-0.8.2/examples/websocket/public/scripts/websocket.js000066400000000000000000000012661324361747700240100ustar00rootroot00000000000000var socket

function connect()
{
	setText("connecting...");
	socket = new WebSocket(getBaseURL() + "/ws");
	socket.onopen = function() {
		setText("connected. waiting for timer...");
	}
	socket.onmessage = function(message) {	
		setText(message.data);
	}
	socket.onclose = function() {
		setText("connection closed.");
	}
	socket.onerror = function() {
		setText("Error!");
	}
}

function closeConnection()
{
	socket.close();
	setText("closed.");
}

function setText(text)
{
	document.getElementById("timer").innerHTML = text;
}

function getBaseURL()
{
	var href = window.location.href.substring(7); // strip "http://"
	var idx = href.indexOf("/");
	return "ws://" + href.substring(0, idx);
}
vibe.d-0.8.2/examples/websocket/source/000077500000000000000000000000001324361747700200125ustar00rootroot00000000000000vibe.d-0.8.2/examples/websocket/source/app.d000066400000000000000000000016511324361747700207420ustar00rootroot00000000000000import vibe.core.core : sleep;
import vibe.core.log;
import vibe.http.fileserver : serveStaticFiles;
import vibe.http.router : URLRouter;
import vibe.http.server;
import vibe.http.websockets : WebSocket, handleWebSockets;

import core.time;
import std.conv : to;


shared static this()
{
	auto router = new URLRouter;
	router.get("/", staticRedirect("/index.html"));
	router.get("/ws", handleWebSockets(&handleWebSocketConnection));
	router.get("*", serveStaticFiles("public/"));

	auto settings = new HTTPServerSettings;
	settings.port = 8080;
	settings.bindAddresses = ["::1", "127.0.0.1"];
	listenHTTP(settings, router);
}

void handleWebSocketConnection(scope WebSocket socket)
{
	int counter = 0;
	logInfo("Got new web socket connection.");
	while (true) {
		sleep(1.seconds);
		if (!socket.connected) break;
		counter++;
		logInfo("Sending '%s'.", counter);
		socket.send(counter.to!string);
	}
	logInfo("Client disconnected.");
}
vibe.d-0.8.2/http/000077500000000000000000000000001324361747700136655ustar00rootroot00000000000000vibe.d-0.8.2/http/dub.sdl000066400000000000000000000005311324361747700151420ustar00rootroot00000000000000name "http"
description "HTTP server and client implementation and higher level HTTP functionality"
dependency "vibe-d:crypto" version="*"
dependency "vibe-d:inet" version="*"
dependency "vibe-d:tls" version="*"
dependency "vibe-d:textfilter" version="*"
dependency "diet-ng" version="~>1.2"
targetType "library"
sourcePaths "."
importPaths "."
vibe.d-0.8.2/http/meson.build000066400000000000000000000052701324361747700160330ustar00rootroot00000000000000# Meson file for Vibe HTTP

vibe_http_src_dir = include_directories('.')

vibe_http_src = [
    'vibe/http/auth/basic_auth.d',
    'vibe/http/auth/digest_auth.d',
    'vibe/http/client.d',
    'vibe/http/common.d',
    'vibe/http/dist.d',
    'vibe/http/fileserver.d',
    'vibe/http/form.d',
    'vibe/http/log.d',
    'vibe/http/proxy.d',
    'vibe/http/router.d',
    'vibe/http/server.d',
    'vibe/http/session.d',
    'vibe/http/status.d',
    'vibe/http/websockets.d'
]

#
# Install Includes
#
install_subdir('vibe/', install_dir: 'include/d/vibe/')

#
# Build Targets
#

http_link_with = [vibe_core_lib,
                  vibe_utils_lib,
                  vibe_data_lib,
                  vibe_stream_lib,
                  vibe_textfilter_lib,
                  vibe_inet_lib,
                  vibe_tls_lib,
                  vibe_crypto_lib]

# HTTP server and client implementation and higher level HTTP functionality
vibe_http_lib = library('vibe-http',
        [vibe_http_src],
        include_directories: [vibe_utils_src_dir,
                              vibe_core_src_dir,
                              vibe_data_src_dir,
                              vibe_stream_src_dir,
                              vibe_textfilter_src_dir,
                              vibe_inet_src_dir,
                              vibe_tls_src_dir,
                              vibe_crypto_src_dir,
                              openssl_inc],
        install: true,
        dependencies: [zlib_dep,
                       diet_dep],
        link_with: [http_link_with],
        version: project_version,
        soversion: project_soversion
)
pkgc.generate(name: 'vibe-http',
              libraries: [vibe_http_lib] + http_link_with,
              subdirs: 'd/vibe',
              version: project_version,
              requires: 'diet',
              description: 'Vibe HTTP server and client implementation and higher level HTTP functionality'
)

#
# Tests
#
vibe_test_http_exe = executable('vibe-test_http',
    [vibe_http_src],
    include_directories: [vibe_utils_src_dir,
                          vibe_core_src_dir,
                          vibe_data_src_dir,
                          vibe_stream_src_dir,
                          vibe_textfilter_src_dir,
                          vibe_inet_src_dir,
                          vibe_tls_src_dir,
                          vibe_crypto_src_dir,
                          openssl_inc],
    dependencies: [zlib_dep,
                   crypto_dep,
                   ssl_dep,
                   libevent_dep,
                   diet_dep],
    link_with: [http_link_with],
    d_args: meson.get_compiler('d').unittest_args(),
    link_args: '-main'
)
test('vibe-test_http', vibe_test_http_exe)
vibe.d-0.8.2/http/vibe/000077500000000000000000000000001324361747700146125ustar00rootroot00000000000000vibe.d-0.8.2/http/vibe/http/000077500000000000000000000000001324361747700155715ustar00rootroot00000000000000vibe.d-0.8.2/http/vibe/http/auth/000077500000000000000000000000001324361747700165325ustar00rootroot00000000000000vibe.d-0.8.2/http/vibe/http/auth/basic_auth.d000066400000000000000000000072441324361747700210100ustar00rootroot00000000000000/**
	Implements HTTP Basic Auth.

	Copyright: © 2012 RejectedSoftware e.K.
	License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file.
	Authors: Sönke Ludwig
*/
module vibe.http.auth.basic_auth;

import vibe.http.server;
import vibe.core.log;

import std.base64;
import std.exception;
import std.string;

@safe:


/**
	Returns a request handler that enforces request to be authenticated using HTTP Basic Auth.
*/
HTTPServerRequestDelegateS performBasicAuth(string realm, PasswordVerifyCallback pwcheck)
{
	void handleRequest(scope HTTPServerRequest req, scope HTTPServerResponse res)
	@safe {
		if (!checkBasicAuth(req, pwcheck)) {
			res.statusCode = HTTPStatus.unauthorized;
			res.contentType = "text/plain";
			res.headers["WWW-Authenticate"] = "Basic realm=\""~realm~"\"";
			res.bodyWriter.write("Authorization required");
		}
	}
	return &handleRequest;
}
/// Scheduled for deprecation - use a `@safe` callback instead.
HTTPServerRequestDelegateS performBasicAuth(string realm, bool delegate(string, string) @system pwcheck)
@system {
	return performBasicAuth(realm, (u, p) @trusted => pwcheck(u, p));
}


/**
	Enforces HTTP Basic Auth authentication on the given req/res pair.

	Params:
		req = Request object that is to be checked
		res = Response object that will be used for authentication errors
		realm = HTTP Basic Auth realm reported to the client
		pwcheck = A delegate queried for validating user/password pairs

	Returns: Returns the name of the authenticated user.

	Throws: Throws a HTTPStatusExeption in case of an authentication failure.
*/
string performBasicAuth(scope HTTPServerRequest req, scope HTTPServerResponse res, string realm, scope PasswordVerifyCallback pwcheck)
{
	if (checkBasicAuth(req, pwcheck))
		return req.username;

	res.headers["WWW-Authenticate"] = "Basic realm=\""~realm~"\"";
	throw new HTTPStatusException(HTTPStatus.unauthorized);
}
/// Scheduled for deprecation - use a `@safe` callback instead.
string performBasicAuth(scope HTTPServerRequest req, scope HTTPServerResponse res, string realm, scope bool delegate(string, string) @system pwcheck)
@system {
	return performBasicAuth(req, res, realm, (u, p) @trusted => pwcheck(u, p));
}


/**
	Checks for valid HTTP Basic Auth authentication on the given request.

	Upon successful authorization, the name of the authorized user will
	be stored in `req.username`.

	Params:
		req = Request object that is to be checked
		pwcheck = A delegate queried for validating user/password pairs

	Returns: Returns `true` $(I iff) a valid Basic Auth header is present
		and the credentials were verified successfully by the validation
		callback.

	Throws: Throws a `HTTPStatusExeption` with `HTTPStatusCode.badRequest`
		if the "Authorization" header is malformed.
*/
bool checkBasicAuth(scope HTTPServerRequest req, scope PasswordVerifyCallback pwcheck)
{
	auto pauth = "Authorization" in req.headers;
	if (pauth && (*pauth).startsWith("Basic ")) {
		string user_pw = () @trusted { return cast(string)Base64.decode((*pauth)[6 .. $]); } ();

		auto idx = user_pw.indexOf(":");
		enforceBadRequest(idx >= 0, "Invalid auth string format!");
		string user = user_pw[0 .. idx];
		string password = user_pw[idx+1 .. $];

		if (pwcheck(user, password)) {
			req.username = user;
			return true;
		}
	}

	return false;
}


/**
	Augments the given HTTP request with an HTTP Basic Auth header.
*/
void addBasicAuth(scope HTTPRequest req, string user, string password)
{
	string pwstr = user ~ ":" ~ password;
	string authstr = () @trusted { return cast(string)Base64.encode(cast(ubyte[])pwstr); } ();
	req.headers["Authorization"] = "Basic " ~ authstr;
}

alias PasswordVerifyCallback = bool delegate(string user, string password);
vibe.d-0.8.2/http/vibe/http/auth/digest_auth.d000066400000000000000000000126131324361747700212020ustar00rootroot00000000000000/**
	Implements HTTP Digest Authentication.

	This is a minimal implementation based on RFC 2069.

	Copyright: © 2015 RejectedSoftware e.K.
	License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file.
	Authors: Kai Nacke
*/
module vibe.http.auth.digest_auth;

import vibe.http.server;
import vibe.core.log;

import std.base64;
import std.datetime;
import std.digest.md;
import std.exception;
import std.string;
import std.uuid;

@safe:

enum NonceState { Valid, Expired, Invalid }

class DigestAuthInfo
{
	@safe:

	string realm;
	ubyte[] secret;
	ulong timeout;

	this()
	{
		secret = randomUUID().data.dup;
		timeout = 300;
	}

	string createNonce(in HTTPServerRequest req)
	{
		auto now = Clock.currTime(UTC()).stdTime();
		auto time = () @trusted { return *cast(ubyte[now.sizeof]*)&now; } ();
		MD5 md5;
		md5.put(time);
		md5.put(secret);
		auto data = md5.finish();
		return Base64.encode(time ~ data);
	}

	NonceState checkNonce(in string nonce, in HTTPServerRequest req)
	{
		auto now = Clock.currTime(UTC()).stdTime();
		ubyte[] decoded = Base64.decode(nonce);
		if (decoded.length != now.sizeof + secret.length) return NonceState.Invalid;
		auto timebytes = decoded[0 .. now.sizeof];
		auto time = () @trusted { return (cast(typeof(now)[])timebytes)[0]; } ();
		if (timeout + time > now) return NonceState.Expired;
		MD5 md5;
		md5.put(timebytes);
		md5.put(secret);
		auto data = md5.finish();
		if (data[] != decoded[now.sizeof .. $]) return NonceState.Invalid;
		return NonceState.Valid;
	}
}

private bool checkDigest(scope HTTPServerRequest req, DigestAuthInfo info, scope DigestHashCallback pwhash, out bool stale, out string username)
{
	stale = false;
	username = "";
	auto pauth = "Authorization" in req.headers;

	if (pauth && (*pauth).startsWith("Digest ")) {
		string realm, nonce, response, uri, algorithm;
		foreach (param; split((*pauth)[7 .. $], ",")) {
			auto kv = split(param, "=");
			switch (kv[0].strip().toLower()) {
				default: break;
				case "realm": realm = kv[1][1..$-1]; break;
				case "username": username = kv[1][1..$-1]; break;
				case "nonce": nonce = kv[1][1..$-1]; break;
				case "uri": uri = kv[1][1..$-1]; break;
				case "response": response = kv[1][1..$-1]; break;
				case "algorithm": algorithm = kv[1][1..$-1]; break;
			}
		}

		if (realm != info.realm)
			return false;
		if (algorithm !is null && algorithm != "MD5")
			return false;

		auto nonceState = info.checkNonce(nonce, req);
		if (nonceState != NonceState.Valid) {
			stale = nonceState == NonceState.Expired;
			return false;
		}

		auto ha1 = pwhash(realm, username);
		auto ha2 = toHexString!(LetterCase.lower)(md5Of(httpMethodString(req.method) ~ ":" ~ uri));
		auto calcresponse = toHexString!(LetterCase.lower)(md5Of(ha1 ~ ":" ~ nonce ~ ":" ~ ha2 ));
		if (response[] == calcresponse[])
			return true;
	}
	return false;
}

/**
	Returns a request handler that enforces request to be authenticated using HTTP Digest Auth.
*/
HTTPServerRequestDelegate performDigestAuth(DigestAuthInfo info, scope DigestHashCallback pwhash)
{
	void handleRequest(HTTPServerRequest req, HTTPServerResponse res)
	@safe {
		bool stale;
		string username;
		if (checkDigest(req, info, pwhash, stale, username)) {
			req.username = username;
			return ;
		}

		// else output an error page
		res.statusCode = HTTPStatus.unauthorized;
		res.contentType = "text/plain";
		res.headers["WWW-Authenticate"] = "Digest realm=\""~info.realm~"\", nonce=\""~info.createNonce(req)~"\", stale="~(stale?"true":"false");
		res.bodyWriter.write("Authorization required");
	}
	return &handleRequest;
}
/// Scheduled for deprecation - use a `@safe` callback instead.
HTTPServerRequestDelegate performDigestAuth(DigestAuthInfo info, scope string delegate(string, string) @system pwhash)
@system {
	return performDigestAuth(info, (r, u) @trusted => pwhash(r, u));
}

/**
	Enforces HTTP Digest Auth authentication on the given req/res pair.

	Params:
		req = Request object that is to be checked
		res = Response object that will be used for authentication errors
		info = Digest authentication info object
		pwhash = A delegate queried for returning the digest password

	Returns: Returns the name of the authenticated user.

	Throws: Throws a HTTPStatusExeption in case of an authentication failure.
*/
string performDigestAuth(scope HTTPServerRequest req, scope HTTPServerResponse res, DigestAuthInfo info, scope DigestHashCallback pwhash)
{
	bool stale;
	string username;
	if (checkDigest(req, info, pwhash, stale, username))
		return username;

	res.headers["WWW-Authenticate"] = "Digest realm=\""~info.realm~"\", nonce=\""~info.createNonce(req)~"\", stale="~(stale?"true":"false");
	throw new HTTPStatusException(HTTPStatus.unauthorized);
}
/// Scheduled for deprecation - use a `@safe` callback instead.
string performDigestAuth(scope HTTPServerRequest req, scope HTTPServerResponse res, DigestAuthInfo info, scope string delegate(string, string) @system pwhash)
@system {
	return performDigestAuth(req, res, info, (r, u) @trusted => pwhash(r, u));
}

/**
	Creates the digest password from the user name, realm and password.

	Params:
		realm = The realm
		user = The user name
		password = The plain text password

	Returns: Returns the digest password
*/
string createDigestPassword(string realm, string user, string password)
{
	return toHexString!(LetterCase.lower)(md5Of(user ~ ":" ~ realm ~ ":" ~ password)).dup;
}

alias DigestHashCallback = string delegate(string realm, string user);
vibe.d-0.8.2/http/vibe/http/client.d000066400000000000000000001132241324361747700172170ustar00rootroot00000000000000/**
	A simple HTTP/1.1 client implementation.

	Copyright: © 2012-2014 RejectedSoftware e.K.
	License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file.
	Authors: Sönke Ludwig, Jan Krüger
*/
module vibe.http.client;

public import vibe.core.net;
public import vibe.http.common;
public import vibe.inet.url;

import vibe.core.connectionpool;
import vibe.core.core;
import vibe.core.log;
import vibe.data.json;
import vibe.inet.message;
import vibe.inet.url;
import vibe.stream.counting;
import vibe.stream.tls;
import vibe.stream.operations;
import vibe.stream.wrapper : createConnectionProxyStream;
import vibe.stream.zlib;
import vibe.utils.array;
import vibe.internal.allocator;
import vibe.internal.freelistref;
import vibe.internal.interfaceproxy : InterfaceProxy, interfaceProxy;

import core.exception : AssertError;
import std.algorithm : splitter;
import std.array;
import std.conv;
import std.encoding : sanitize;
import std.exception;
import std.format;
import std.string;
import std.typecons;
import std.datetime;
import std.socket : AddressFamily;

version(Posix)
{
	version(VibeLibeventDriver)
	{
		version = UnixSocket;
	}
}


/**************************************************************************************************/
/* Public functions                                                                               */
/**************************************************************************************************/
@safe:

/**
	Performs a synchronous HTTP request on the specified URL.

	The requester parameter allows to customize the request and to specify the request body for
	non-GET requests before it is sent. A response object is then returned or passed to the
	responder callback synchronously.

	This function is a low-level HTTP client facility. It will not perform automatic redirect,
	caching or similar tasks. For a high-level download facility (similar to cURL), see the
	`vibe.inet.urltransfer` module.

	Note that it is highly recommended to use one of the overloads that take a responder callback,
	as they can avoid some memory allocations and are safe against accidentally leaving stale
	response objects (objects whose response body wasn't fully read). For the returning overloads
	of the function it is recommended to put a `scope(exit)` right after the call in which
	`HTTPClientResponse.dropBody` is called to avoid this.

	See_also: `vibe.inet.urltransfer.download`
*/
HTTPClientResponse requestHTTP(string url, scope void delegate(scope HTTPClientRequest req) requester = null, const(HTTPClientSettings) settings = defaultSettings)
{
	return requestHTTP(URL.parse(url), requester, settings);
}
/// ditto
HTTPClientResponse requestHTTP(URL url, scope void delegate(scope HTTPClientRequest req) requester = null, const(HTTPClientSettings) settings = defaultSettings)
{
	version(UnixSocket) {
		enforce(url.schema == "http" || url.schema == "https" || url.schema == "http+unix" || url.schema == "https+unix", "URL schema must be http(s) or http(s)+unix.");
	} else {
		enforce(url.schema == "http" || url.schema == "https", "URL schema must be http(s).");
	}
	enforce(url.host.length > 0, "URL must contain a host name.");
	bool use_tls;

	if (settings.proxyURL.schema !is null)
		use_tls = settings.proxyURL.schema == "https";
	else
	{
		version(UnixSocket)
			use_tls = url.schema == "https" || url.schema == "https+unix";
		else
			use_tls = url.schema == "https";
	}

	auto cli = connectHTTP(url.getFilteredHost, url.port, use_tls, settings);
	auto res = cli.request((req){
			if (url.localURI.length) {
				assert(url.path.absolute, "Request URL path must be absolute.");
				req.requestURL = url.localURI;
			}
			if (settings.proxyURL.schema !is null)
				req.requestURL = url.toString(); // proxy exception to the URL representation

			// Provide port number when it is not the default one (RFC2616 section 14.23)
			if (url.port && url.port != url.defaultPort)
				req.headers["Host"] = format("%s:%d", url.host, url.port);
			else
				req.headers["Host"] = url.host;

			if ("authorization" !in req.headers && url.username != "") {
				import std.base64;
				string pwstr = url.username ~ ":" ~ url.password;
				req.headers["Authorization"] = "Basic " ~
					cast(string)Base64.encode(cast(ubyte[])pwstr);
			}
			if (requester) requester(req);
		});

	// make sure the connection stays locked if the body still needs to be read
	if( res.m_client ) res.lockedConnection = cli;

	logTrace("Returning HTTPClientResponse for conn %s", () @trusted { return cast(void*)res.lockedConnection.__conn; } ());
	return res;
}
/// ditto
void requestHTTP(string url, scope void delegate(scope HTTPClientRequest req) requester, scope void delegate(scope HTTPClientResponse req) responder, const(HTTPClientSettings) settings = defaultSettings)
{
	requestHTTP(URL(url), requester, responder, settings);
}
/// ditto
void requestHTTP(URL url, scope void delegate(scope HTTPClientRequest req) requester, scope void delegate(scope HTTPClientResponse req) responder, const(HTTPClientSettings) settings = defaultSettings)
{
	version(UnixSocket) {
		enforce(url.schema == "http" || url.schema == "https" || url.schema == "http+unix" || url.schema == "https+unix", "URL schema must be http(s) or http(s)+unix.");
	} else {
		enforce(url.schema == "http" || url.schema == "https", "URL schema must be http(s).");
	}
	enforce(url.host.length > 0, "URL must contain a host name.");
	bool use_tls;

	if (settings.proxyURL.schema !is null)
		use_tls = settings.proxyURL.schema == "https";
	else
	{
		version(UnixSocket)
			use_tls = url.schema == "https";
		else
			use_tls = url.schema == "https" || url.schema == "https+unix";
	}

	auto cli = connectHTTP(url.getFilteredHost, url.port, use_tls, settings);
	cli.request((scope req) {
		if (url.localURI.length) {
			assert(url.path.absolute, "Request URL path must be absolute.");
			req.requestURL = url.localURI;
		}
		if (settings.proxyURL.schema !is null)
			req.requestURL = url.toString(); // proxy exception to the URL representation

		// Provide port number when it is not the default one (RFC2616 section 14.23)
		if (url.port && url.port != url.defaultPort)
			req.headers["Host"] = format("%s:%d", url.host, url.port);
		else
			req.headers["Host"] = url.host;

		if ("authorization" !in req.headers && url.username != "") {
			import std.base64;
			string pwstr = url.username ~ ":" ~ url.password;
			req.headers["Authorization"] = "Basic " ~
				cast(string)Base64.encode(cast(ubyte[])pwstr);
		}
		if (requester) requester(req);
	}, responder);
	assert(!cli.m_requesting, "HTTP client still requesting after return!?");
	assert(!cli.m_responding, "HTTP client still responding after return!?");
}

/** Posts a simple JSON request. Note that the server www.example.org does not
	exists, so there will be no meaningful result.
*/
unittest {
	import vibe.core.log;
	import vibe.http.client;
	import vibe.stream.operations;

	void test()
	{
		requestHTTP("http://www.example.org/",
			(scope req) {
				req.method = HTTPMethod.POST;
				//req.writeJsonBody(["name": "My Name"]);
			},
			(scope res) {
				logInfo("Response: %s", res.bodyReader.readAllUTF8());
			}
		);
	}
}


/**
	Returns a HTTPClient proxy object that is connected to the specified host.

	Internally, a connection pool is used to reuse already existing connections. Note that
	usually requestHTTP should be used for making requests instead of manually using a
	HTTPClient to do so.
*/
auto connectHTTP(string host, ushort port = 0, bool use_tls = false, const(HTTPClientSettings) settings = null)
{
	static struct ConnInfo { string host; ushort port; bool useTLS; string proxyIP; ushort proxyPort; NetworkAddress bind_addr; }
	static vibe.utils.array.FixedRingBuffer!(Tuple!(ConnInfo, ConnectionPool!HTTPClient), 16) s_connections;

	auto sttngs = settings ? settings : defaultSettings;

	if( port == 0 ) port = use_tls ? 443 : 80;
	auto ckey = ConnInfo(host, port, use_tls, sttngs.proxyURL.host, sttngs.proxyURL.port, sttngs.networkInterface);

	ConnectionPool!HTTPClient pool;
	s_connections.opApply((ref c) @safe {
		if (c[0] == ckey)
			pool = c[1];
		return 0;
	});

	if (!pool) {
		logDebug("Create HTTP client pool %s:%s %s proxy %s:%d", host, port, use_tls, sttngs.proxyURL.host, sttngs.proxyURL.port);
		pool = new ConnectionPool!HTTPClient({
				auto ret = new HTTPClient;
				ret.connect(host, port, use_tls, sttngs);
				return ret;
			});
		if (s_connections.full) s_connections.popFront();
		s_connections.put(tuple(ckey, pool));
	}

	return pool.lockConnection();
}


/**************************************************************************************************/
/* Public types                                                                                   */
/**************************************************************************************************/

/**
	Defines an HTTP/HTTPS proxy request or a connection timeout for an HTTPClient.
*/
class HTTPClientSettings {
	URL proxyURL;
	Duration defaultKeepAliveTimeout = 10.seconds;

	/// Forces a specific network interface to use for outgoing connections.
	NetworkAddress networkInterface = anyAddress;

	/// Can be used to force looking up IPv4/IPv6 addresses for host names.
	AddressFamily dnsAddressFamily = AddressFamily.UNSPEC;
}

///
unittest {
	void test() {

		HTTPClientSettings settings = new HTTPClientSettings;
		settings.proxyURL = URL.parse("http://proxyuser:proxypass@192.168.2.50:3128");
		settings.defaultKeepAliveTimeout = 0.seconds; // closes connection immediately after receiving the data.
		requestHTTP("http://www.example.org",
					(scope req){
			req.method = HTTPMethod.GET;
		},
		(scope res){
			logInfo("Headers:");
			foreach(key, ref value; res.headers) {
				logInfo("%s: %s", key, value);
			}
			logInfo("Response: %s", res.bodyReader.readAllUTF8());
		}, settings);

	}
}


/**
	Implementation of a HTTP 1.0/1.1 client with keep-alive support.

	Note that it is usually recommended to use requestHTTP for making requests as that will use a
	pool of HTTPClient instances to keep the number of connection establishments low while not
	blocking requests from different tasks.
*/
final class HTTPClient {
	@safe:

	enum maxHeaderLineLength = 4096;

	private {
		Rebindable!(const(HTTPClientSettings)) m_settings;
		string m_server;
		ushort m_port;
		bool m_useTLS;
		TCPConnection m_conn;
		InterfaceProxy!Stream m_stream;
		TLSStream m_tlsStream;
		TLSContext m_tls;
		static __gshared m_userAgent = "vibe.d/"~vibeVersionString~" (HTTPClient, +http://vibed.org/)";
		static __gshared void function(TLSContext) ms_tlsSetup;
		bool m_requesting = false, m_responding = false;
		SysTime m_keepAliveLimit;
		Duration m_keepAliveTimeout;
	}

	/** Get the current settings for the HTTP client. **/
	@property const(HTTPClientSettings) settings() const {
		return m_settings;
	}

	/**
		Sets the default user agent string for new HTTP requests.
	*/
	static void setUserAgentString(string str) @trusted { m_userAgent = str; }

	/**
		Sets a callback that will be called for every TLS context that is created.

		Setting such a callback is useful for adjusting the validation parameters
		of the TLS context.
	*/
	static void setTLSSetupCallback(void function(TLSContext) @safe func) @trusted { ms_tlsSetup = func; }

	/**
		Connects to a specific server.

		This method may only be called if any previous connection has been closed.
	*/
	void connect(string server, ushort port = 80, bool use_tls = false, const(HTTPClientSettings) settings = defaultSettings)
	{
		assert(!m_conn);
		assert(port != 0);
		disconnect();
		m_conn = TCPConnection.init;
		m_settings = settings;
		m_keepAliveTimeout = settings.defaultKeepAliveTimeout;
		m_keepAliveLimit = Clock.currTime(UTC()) + m_keepAliveTimeout;
		m_server = server;
		m_port = port;
		m_useTLS = use_tls;
		if (use_tls) {
			m_tls = createTLSContext(TLSContextKind.client);
			// this will be changed to trustedCert once a proper root CA store is available by default
			m_tls.peerValidationMode = TLSPeerValidationMode.none;
			() @trusted { if (ms_tlsSetup) ms_tlsSetup(m_tls); } ();
		}
	}

	/**
		Forcefully closes the TCP connection.

		Before calling this method, be sure that no request is currently being processed.
	*/
	void disconnect()
	{
		if (m_conn) {
			if (m_conn.connected) {
				try m_stream.finalize();
				catch (Exception e) logDebug("Failed to finalize connection stream when closing HTTP client connection: %s", e.msg);
				m_conn.close();
			}
			if (m_useTLS) {
				() @trusted { return destroy(m_stream); } ();
				m_stream = InterfaceProxy!Stream.init;
			}
			() @trusted { return destroy(m_conn); } ();
			m_conn = TCPConnection.init;
		}
	}

	private void doProxyRequest(T, U)(ref T res, U requester, ref bool close_conn, ref bool has_body)
	@trusted { // scope new
		import std.conv : to;
		import vibe.internal.utilallocator: RegionListAllocator;
		version (VibeManualMemoryManagement)
			scope request_allocator = new RegionListAllocator!(shared(Mallocator), false)(1024, Mallocator.instance);
		else
			scope request_allocator = new RegionListAllocator!(shared(GCAllocator), true)(1024, GCAllocator.instance);

		res.dropBody();
		scope(failure)
			res.disconnect();
		if (res.statusCode != 407) {
			throw new HTTPStatusException(HTTPStatus.internalServerError, "Proxy returned Proxy-Authenticate without a 407 status code.");
		}

		// send the request again with the proxy authentication information if available
		if (m_settings.proxyURL.username is null) {
			throw new HTTPStatusException(HTTPStatus.proxyAuthenticationRequired, "Proxy Authentication Required.");
		}

		m_responding = false;
		close_conn = false;
		bool found_proxy_auth;

		foreach (string proxyAuth; res.headers.getAll("Proxy-Authenticate"))
		{
			if (proxyAuth.length >= "Basic".length && proxyAuth[0.."Basic".length] == "Basic")
			{
				found_proxy_auth = true;
				break;
			}
		}

		if (!found_proxy_auth)
		{
			throw new HTTPStatusException(HTTPStatus.notAcceptable, "The Proxy Server didn't allow Basic Authentication");
		}

		SysTime connected_time;
		has_body = doRequestWithRetry(requester, true, close_conn, connected_time);
		m_responding = true;

		static if (is(T == HTTPClientResponse))
			res = new HTTPClientResponse(this, has_body, close_conn, request_allocator, connected_time);
		else
			res = scoped!HTTPClientResponse(this, has_body, close_conn, request_allocator, connected_time);

		if (res.headers.get("Proxy-Authenticate", null) !is null){
			res.dropBody();
			throw new HTTPStatusException(HTTPStatus.ProxyAuthenticationRequired, "Proxy Authentication Failed.");
		}

	}

	/**
		Performs a HTTP request.

		`requester` is called first to populate the request with headers and the desired
		HTTP method and version. After a response has been received it is then passed
		to the caller which can in turn read the reponse body. Any part of the body
		that has not been processed will automatically be consumed and dropped.

		Note that the `requester` callback might be invoked multiple times in the event
		that a request has to be resent due to a connection failure.

		Also note that the second form of this method (returning a `HTTPClientResponse`) is
		not recommended to use as it may accidentially block a HTTP connection when
		only part of the response body was read and also requires a heap allocation
		for the response object. The callback based version on the other hand uses
		a stack allocation and guarantees that the request has been fully processed
		once it has returned.
	*/
	void request(scope void delegate(scope HTTPClientRequest req) requester, scope void delegate(scope HTTPClientResponse) responder)
	@trusted { // scope new
		import vibe.internal.utilallocator: RegionListAllocator;
		version (VibeManualMemoryManagement)
			scope request_allocator = new RegionListAllocator!(shared(Mallocator), false)(1024, Mallocator.instance);
		else
			scope request_allocator = new RegionListAllocator!(shared(GCAllocator), true)(1024, GCAllocator.instance);

		bool close_conn;
		SysTime connected_time;
		bool has_body = doRequestWithRetry(requester, false, close_conn, connected_time);

		m_responding = true;
		auto res = scoped!HTTPClientResponse(this, has_body, close_conn, request_allocator, connected_time);

		// proxy implementation
		if (res.headers.get("Proxy-Authenticate", null) !is null) {
			doProxyRequest(res, requester, close_conn, has_body);
		}

		Exception user_exception;
		{
			scope (failure) {
				m_responding = false;
				disconnect();
			}
			try responder(res);
			catch (Exception e) {
				logDebug("Error while handling response: %s", e.toString().sanitize());
				user_exception = e;
			}
			if (m_responding) {
				logDebug("Failed to handle the complete response of the server - disconnecting.");
				res.disconnect();
			}
			assert(!m_responding, "Still in responding state after finalizing the response!?");

			if (user_exception || res.headers.get("Connection") == "close")
				disconnect();
		}
		if (user_exception) throw user_exception;
	}

	/// ditto
	HTTPClientResponse request(scope void delegate(HTTPClientRequest) requester)
	{
		bool close_conn;
		SysTime connected_time;
		bool has_body = doRequestWithRetry(requester, false, close_conn, connected_time);
		m_responding = true;
		auto res = new HTTPClientResponse(this, has_body, close_conn, () @trusted { return vibeThreadAllocator(); } (), connected_time);

		// proxy implementation
		if (res.headers.get("Proxy-Authenticate", null) !is null) {
			doProxyRequest(res, requester, close_conn, has_body);
		}

		return res;
	}

	private bool doRequestWithRetry(scope void delegate(HTTPClientRequest req) requester, bool confirmed_proxy_auth /* basic only */, out bool close_conn, out SysTime connected_time)
	{
		if (m_conn && m_conn.connected && connected_time > m_keepAliveLimit){
			logDebug("Disconnected to avoid timeout");
			disconnect();
		}

		// check if this isn't the first request on a connection
		bool is_persistent_request = m_conn && m_conn.connected;

		// retry the request if the connection gets closed prematurely and this is a persistent request
		bool has_body;
		foreach (i; 0 .. is_persistent_request ? 2 : 1) {
		 	connected_time = Clock.currTime(UTC());

			close_conn = false;
			has_body = doRequest(requester, close_conn, false, connected_time);

			logTrace("HTTP client waiting for response");
			if (!m_stream.empty) break;

			enforce(i != 1, "Second attempt to send HTTP request failed.");
		}
		return has_body;
	}

	private bool doRequest(scope void delegate(HTTPClientRequest req) requester, ref bool close_conn, bool confirmed_proxy_auth = false /* basic only */, SysTime connected_time = Clock.currTime(UTC()))
	{
		assert(!m_requesting, "Interleaved HTTP client requests detected!");
		assert(!m_responding, "Interleaved HTTP client request/response detected!");

		m_requesting = true;
		scope(exit) m_requesting = false;

		if (!m_conn || !m_conn.connected) {
			if (m_conn) m_conn.close(); // make sure all resources are freed
			if (m_settings.proxyURL.host !is null){

				enum AddressType {
					IPv4,
					IPv6,
					Host
				}

				static AddressType getAddressType(string host){
					import std.regex : regex, Captures, Regex, matchFirst;

					static IPv4Regex = regex(`^\s*((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\s*$`, ``);
					static IPv6Regex = regex(`^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$`, ``);

					if (!matchFirst(host, IPv4Regex).empty)
					{
						return AddressType.IPv4;
					}
					else if (!matchFirst(host, IPv6Regex).empty)
					{
						return AddressType.IPv6;
					}
					else
					{
						return AddressType.Host;
					}
				}

				import std.functional : memoize;
				alias findAddressType = memoize!getAddressType;

				bool use_dns;
				if (() @trusted { return findAddressType(m_settings.proxyURL.host); } () == AddressType.Host)
				{
					use_dns = true;
				}

				NetworkAddress proxyAddr = resolveHost(m_settings.proxyURL.host, m_settings.dnsAddressFamily, use_dns);
				proxyAddr.port = m_settings.proxyURL.port;
				m_conn = connectTCP(proxyAddr, m_settings.networkInterface);
			}
			else {
				version(UnixSocket)
				{
					import core.sys.posix.sys.un;
					import core.sys.posix.sys.socket;
					import std.regex : regex, Captures, Regex, matchFirst, ctRegex;
					import core.stdc.string : strcpy;

					NetworkAddress addr;
					if (m_server[0] == '/')
					{
						addr.family = AF_UNIX;
						sockaddr_un* s = addr.sockAddrUnix();
						enforce(s.sun_path.length > m_server.length, "Unix sockets cannot have that long a name.");
						s.sun_family = AF_UNIX;
						() @trusted { strcpy(cast(char*)s.sun_path.ptr,m_server.toStringz()); } ();
					} else
					{
						addr = resolveHost(m_server, m_settings.dnsAddressFamily);
						addr.port = m_port;
					}
					m_conn = connectTCP(addr, m_settings.networkInterface);
				} else
				{
					auto addr = resolveHost(m_server, m_settings.dnsAddressFamily);
					addr.port = m_port;
					m_conn = connectTCP(addr, m_settings.networkInterface);
				}
			}

			m_stream = m_conn;
			if (m_useTLS) {
				try m_tlsStream = createTLSStream(m_conn, m_tls, TLSStreamState.connecting, m_server, m_conn.remoteAddress);
				catch (Exception e) {
					m_conn.close();
					throw e;
				}
				m_stream = m_tlsStream;
			}
		}

		return () @trusted { // scoped
			auto req = scoped!HTTPClientRequest(m_stream, m_conn);
			if (m_useTLS)
				req.m_peerCertificate = m_tlsStream.peerCertificate;

			req.headers["User-Agent"] = m_userAgent;
			if (m_settings.proxyURL.host !is null){
				req.headers["Proxy-Connection"] = "keep-alive";
				close_conn = false; // req.headers.get("Proxy-Connection", "keep-alive") != "keep-alive";
				if (confirmed_proxy_auth)
				{
					import std.base64;
					ubyte[] user_pass = cast(ubyte[])(m_settings.proxyURL.username ~ ":" ~ m_settings.proxyURL.password);

					req.headers["Proxy-Authorization"] = "Basic " ~ cast(string) Base64.encode(user_pass);
				}
			}
			else {
				req.headers["Connection"] = "keep-alive";
				close_conn = false; // req.headers.get("Connection", "keep-alive") != "keep-alive";
			}
			req.headers["Accept-Encoding"] = "gzip, deflate";
			req.headers["Host"] = m_server;
			requester(req);
			req.finalize();

			return req.method != HTTPMethod.HEAD;
		} ();
	}
}


/**
	Represents a HTTP client request (as sent to the server).
*/
final class HTTPClientRequest : HTTPRequest {
	private {
		InterfaceProxy!OutputStream m_bodyWriter;
		FreeListRef!ChunkedOutputStream m_chunkedStream;
		bool m_headerWritten = false;
		FixedAppender!(string, 22) m_contentLengthBuffer;
		TCPConnection m_rawConn;
		TLSCertificateInformation m_peerCertificate;
	}


	/// private
	this(InterfaceProxy!Stream conn, TCPConnection raw_conn)
	{
		super(conn);
		m_rawConn = raw_conn;
	}

	@property NetworkAddress localAddress() const { return m_rawConn.localAddress; }
	@property NetworkAddress remoteAddress() const { return m_rawConn.remoteAddress; }

	@property ref inout(TLSCertificateInformation) peerCertificate() inout { return m_peerCertificate; }

	/**
		Accesses the Content-Length header of the request.

		Negative values correspond to an unset Content-Length header.
	*/
	@property long contentLength() const { return headers.get("Content-Length", "-1").to!long(); }
	/// ditto
	@property void contentLength(long value)
	{
		if (value >= 0) headers["Content-Length"] = clengthString(value);
		else if ("Content-Length" in headers) headers.remove("Content-Length");
	}

	/**
		Writes the whole request body at once using raw bytes.
	*/
	void writeBody(RandomAccessStream data)
	{
		writeBody(data, data.size - data.tell());
	}
	/// ditto
	void writeBody(InputStream data)
	{
		headers["Transfer-Encoding"] = "chunked";
		data.pipe(bodyWriter);
		finalize();
	}
	/// ditto
	void writeBody(InputStream data, ulong length)
	{
		headers["Content-Length"] = clengthString(length);
		data.pipe(bodyWriter, length);
		finalize();
	}
	/// ditto
	void writeBody(in ubyte[] data, string content_type = null)
	{
		if( content_type != "" ) headers["Content-Type"] = content_type;
		headers["Content-Length"] = clengthString(data.length);
		bodyWriter.write(data);
		finalize();
	}

	/**
		Writes the request body as JSON data.
	*/
	void writeJsonBody(T)(T data, bool allow_chunked = false)
	{
		import vibe.stream.wrapper : streamOutputRange;

		headers["Content-Type"] = "application/json";

		// set an explicit content-length field if chunked encoding is not allowed
		if (!allow_chunked) {
			import vibe.internal.rangeutil;
			long length = 0;
			auto counter = () @trusted { return RangeCounter(&length); } ();
			() @trusted { serializeToJson(counter, data); } ();
			headers["Content-Length"] = clengthString(length);
		}

		auto rng = streamOutputRange!1024(bodyWriter);
		() @trusted { serializeToJson(&rng, data); } ();
		rng.flush();
		finalize();
	}

	/** Writes the request body as form data.
	*/
	void writeFormBody(T)(T key_value_map)
	{
		import vibe.inet.webform : formEncode;
		import vibe.stream.wrapper : streamOutputRange;

		import vibe.internal.rangeutil;
		long length = 0;
		auto counter = () @trusted { return RangeCounter(&length); } ();
		counter.formEncode(key_value_map);
		headers["Content-Length"] = clengthString(length);
		headers["Content-Type"] = "application/x-www-form-urlencoded";
		auto dst = streamOutputRange!1024(bodyWriter);
		() @trusted { return &dst; } ().formEncode(key_value_map);
	}

	///
	unittest {
		void test(HTTPClientRequest req) {
			req.writeFormBody(["foo": "bar"]);
		}
	}

	void writePart(MultiPart part)
	{
		assert(false, "TODO");
	}

	/**
		An output stream suitable for writing the request body.

		The first retrieval will cause the request header to be written, make sure
		that all headers are set up in advance.s
	*/
	@property InterfaceProxy!OutputStream bodyWriter()
	{
		if (m_bodyWriter) return m_bodyWriter;

		assert(!m_headerWritten, "Trying to write request body after body was already written.");

		if ("Content-Length" !in headers && "Transfer-Encoding" !in headers
			&& headers.get("Connection", "") != "close")
		{
			headers["Transfer-Encoding"] = "chunked";
		}

		writeHeader();
		m_bodyWriter = m_conn;

		if (headers.get("Transfer-Encoding", null) == "chunked") {
			m_chunkedStream = createChunkedOutputStreamFL(m_bodyWriter);
			m_bodyWriter = m_chunkedStream;
		}

		return m_bodyWriter;
	}

	private void writeHeader()
	{
		import vibe.stream.wrapper;

		assert(!m_headerWritten, "HTTPClient tried to write headers twice.");
		m_headerWritten = true;

		auto output = streamOutputRange!1024(m_conn);

		formattedWrite(() @trusted { return &output; } (), "%s %s %s\r\n", httpMethodString(method), requestURL, getHTTPVersionString(httpVersion));
		logTrace("--------------------");
		logTrace("HTTP client request:");
		logTrace("--------------------");
		logTrace("%s", this);
		foreach (k, v; headers) {
			() @trusted { formattedWrite(&output, "%s: %s\r\n", k, v); } ();
			logTrace("%s: %s", k, v);
		}
		output.put("\r\n");
		logTrace("--------------------");
	}

	private void finalize()
	{
		// test if already finalized
		if (m_headerWritten && !m_bodyWriter)
			return;

		// force the request to be sent
		if (!m_headerWritten) writeHeader();
		else {
			bodyWriter.flush();
			if (m_chunkedStream) {
				m_bodyWriter.finalize();
				m_conn.flush();
			}
			m_bodyWriter = typeof(m_bodyWriter).init;
			m_conn = typeof(m_conn).init;
		}
	}

	private string clengthString(ulong len)
	{
		m_contentLengthBuffer.clear();
		() @trusted { formattedWrite(&m_contentLengthBuffer, "%s", len); } ();
		return () @trusted { return m_contentLengthBuffer.data; } ();
	}
}


/**
	Represents a HTTP client response (as received from the server).
*/
final class HTTPClientResponse : HTTPResponse {
	@safe:

	private {
		HTTPClient m_client;
		LockedConnection!HTTPClient lockedConnection;
		FreeListRef!LimitedInputStream m_limitedInputStream;
		FreeListRef!ChunkedInputStream m_chunkedInputStream;
		FreeListRef!ZlibInputStream m_zlibInputStream;
		FreeListRef!EndCallbackInputStream m_endCallback;
		InterfaceProxy!InputStream m_bodyReader;
		bool m_closeConn;
		int m_maxRequests;
	}

	/// Contains the keep-alive 'max' parameter, indicates how many requests a client can
	/// make before the server closes the connection.
	@property int maxRequests() const {
		return m_maxRequests;
	}

	/// private
	this(HTTPClient client, bool has_body, bool close_conn, IAllocator alloc, SysTime connected_time = Clock.currTime(UTC()))
	{
		m_client = client;
		m_closeConn = close_conn;

		scope(failure) finalize(true);

		// read and parse status line ("HTTP/#.# #[ $]\r\n")
		logTrace("HTTP client reading status line");
		string stln = () @trusted { return cast(string)client.m_stream.readLine(HTTPClient.maxHeaderLineLength, "\r\n", alloc); } ();
		logTrace("stln: %s", stln);
		this.httpVersion = parseHTTPVersion(stln);

		enforce(stln.startsWith(" "));
		stln = stln[1 .. $];
		this.statusCode = parse!int(stln);
		if( stln.length > 0 ){
			enforce(stln.startsWith(" "));
			stln = stln[1 .. $];
			this.statusPhrase = stln;
		}

		// read headers until an empty line is hit
		parseRFC5322Header(client.m_stream, this.headers, HTTPClient.maxHeaderLineLength, alloc, false);

		logTrace("---------------------");
		logTrace("HTTP client response:");
		logTrace("---------------------");
		logTrace("%s", this);
		foreach (k, v; this.headers)
			logTrace("%s: %s", k, v);
		logTrace("---------------------");

		Duration server_timeout;
		bool has_server_timeout;
		if (auto pka = "Keep-Alive" in this.headers) {
			foreach(s; splitter(*pka, ',')){
				auto pair = s.splitter('=');
				auto name = pair.front.strip();
				pair.popFront();
				if (icmp(name, "timeout") == 0) {
					has_server_timeout = true;
					server_timeout = pair.front.to!int().seconds;
				} else if (icmp(name, "max") == 0) {
					m_maxRequests = pair.front.to!int();
				}
			}
		}
		Duration elapsed = Clock.currTime(UTC()) - connected_time;
		if (this.headers.get("Connection") == "close") {
			// this header will trigger m_client.disconnect() in m_client.doRequest() when it goes out of scope
		} else if (has_server_timeout && m_client.m_keepAliveTimeout > server_timeout) {
			m_client.m_keepAliveLimit = Clock.currTime(UTC()) + server_timeout - elapsed;
		} else if (this.httpVersion == HTTPVersion.HTTP_1_1) {
			m_client.m_keepAliveLimit = Clock.currTime(UTC()) + m_client.m_keepAliveTimeout;
		}

		if (!has_body) finalize();
	}

	~this()
	{
		debug if (m_client) { import std.stdio; writefln("WARNING: HTTPClientResponse not fully processed before being finalized"); }
	}

	/**
		An input stream suitable for reading the response body.
	*/
	@property InterfaceProxy!InputStream bodyReader()
	{
		if( m_bodyReader ) return m_bodyReader;

		assert (m_client, "Response was already read or no response body, may not use bodyReader.");

		// prepare body the reader
		if (auto pte = "Transfer-Encoding" in this.headers) {
			enforce(*pte == "chunked");
			m_chunkedInputStream = createChunkedInputStreamFL(m_client.m_stream);
			m_bodyReader = this.m_chunkedInputStream;
		} else if (auto pcl = "Content-Length" in this.headers) {
			m_limitedInputStream = createLimitedInputStreamFL(m_client.m_stream, to!ulong(*pcl));
			m_bodyReader = m_limitedInputStream;
		} else if (isKeepAliveResponse) {
			m_limitedInputStream = createLimitedInputStreamFL(m_client.m_stream, 0);
			m_bodyReader = m_limitedInputStream;
		} else {
			m_bodyReader = m_client.m_stream;
		}

		if( auto pce = "Content-Encoding" in this.headers ){
			if( *pce == "deflate" ){
				m_zlibInputStream = createDeflateInputStreamFL(m_bodyReader);
				m_bodyReader = m_zlibInputStream;
			} else if( *pce == "gzip" || *pce == "x-gzip"){
				m_zlibInputStream = createGzipInputStreamFL(m_bodyReader);
				m_bodyReader = m_zlibInputStream;
			}
			else enforce(*pce == "identity" || *pce == "", "Unsuported content encoding: "~*pce);
		}

		// be sure to free resouces as soon as the response has been read
		m_endCallback = createEndCallbackInputStreamFL(m_bodyReader, &this.finalize);
		m_bodyReader = m_endCallback;

		return m_bodyReader;
	}

	/**
		Provides unsafe means to read raw data from the connection.

		No transfer decoding and no content decoding is done on the data.

		Not that the provided delegate must read the whole stream,
		as the state of the response is unknown after raw bytes have been
		taken. Failure to read the right amount of data will lead to
		protocol corruption in later requests.
	*/
	void readRawBody(scope void delegate(scope InterfaceProxy!InputStream stream) @safe del)
	{
		assert(!m_bodyReader, "May not mix use of readRawBody and bodyReader.");
		del(interfaceProxy!InputStream(m_client.m_stream));
		finalize();
	}
	/// ditto
	static if (!is(InputStream == InterfaceProxy!InputStream))
	void readRawBody(scope void delegate(scope InputStream stream) @safe del)
	{
		import vibe.internal.interfaceproxy : asInterface;

		assert(!m_bodyReader, "May not mix use of readRawBody and bodyReader.");
		del(m_client.m_stream.asInterface!(.InputStream));
		finalize();
	}

	/**
		Reads the whole response body and tries to parse it as JSON.
	*/
	Json readJson(){
		auto bdy = bodyReader.readAllUTF8();
		return () @trusted { return parseJson(bdy); } ();
	}

	/**
		Reads and discards the response body.
	*/
	void dropBody()
	{
		if (m_client) {
			if( bodyReader.empty ){
				finalize();
			} else {
				bodyReader.pipe(nullSink);
				assert(!lockedConnection.__conn);
			}
		}
	}

	/**
		Forcefully terminates the connection regardless of the current state.

		Note that this will only actually disconnect if the request has not yet
		been fully processed. If the whole body was already read, the
		connection is not owned by the current request operation anymore and
		cannot be accessed. Use a "Connection: close" header instead in this
		case to let the server close the connection.
	*/
	void disconnect()
	{
		finalize(true);
	}

	/**
		Switches the connection to a new protocol and returns the resulting ConnectionStream.

		The caller caller gets ownership of the ConnectionStream and is responsible
		for closing it.

		Notice:
			When using the overload that returns a `ConnectionStream`, the caller
			must make sure that the stream is not used after the
			`HTTPClientRequest` has been destroyed.

		Params:
			new_protocol = The protocol to which the connection is expected to
				upgrade. Should match the Upgrade header of the request. If an
				empty string is passed, the "Upgrade" header will be ignored and
				should be checked by other means.
	*/
	ConnectionStream switchProtocol(string new_protocol)
	{
		enforce(statusCode == HTTPStatus.switchingProtocols, "Server did not send a 101 - Switching Protocols response");
		string *resNewProto = "Upgrade" in headers;
		enforce(resNewProto, "Server did not send an Upgrade header");
		enforce(!new_protocol.length || !icmp(*resNewProto, new_protocol),
			"Expected Upgrade: " ~ new_protocol ~", received Upgrade: " ~ *resNewProto);
		auto stream = createConnectionProxyStream!(typeof(m_client.m_stream), typeof(m_client.m_conn))(m_client.m_stream, m_client.m_conn);
		m_client.m_responding = false;
		m_client = null;
		m_closeConn = true; // cannot reuse connection for further requests!
		return stream;
	}
	/// ditto
	void switchProtocol(string new_protocol, scope void delegate(ConnectionStream str) @safe del)
	{
		enforce(statusCode == HTTPStatus.switchingProtocols, "Server did not send a 101 - Switching Protocols response");
		string *resNewProto = "Upgrade" in headers;
		enforce(resNewProto, "Server did not send an Upgrade header");
		enforce(!new_protocol.length || !icmp(*resNewProto, new_protocol),
			"Expected Upgrade: " ~ new_protocol ~", received Upgrade: " ~ *resNewProto);
		scope stream = createConnectionProxyStream(m_client.m_stream, m_client.m_conn);
		m_client.m_responding = false;
		m_client = null;
		m_closeConn = true;
		del(stream);
	}

	private @property isKeepAliveResponse()
	const {
		string conn;
		if (this.httpVersion == HTTPVersion.HTTP_1_0) conn = this.headers.get("Connection", "close");
		else conn = this.headers.get("Connection", "keep-alive");
		return icmp(conn, "close") != 0;
	}

	private void finalize()
	{
		finalize(m_closeConn);
	}

	private void finalize(bool disconnect)
	{
		// ignore duplicate and too early calls to finalize
		// (too early happesn for empty response bodies)
		if (!m_client) return;

		auto cli = m_client;
		m_client = null;
		cli.m_responding = false;
		destroy(m_zlibInputStream);
		destroy(m_chunkedInputStream);
		destroy(m_limitedInputStream);
		if (disconnect) cli.disconnect();
		destroy(lockedConnection);
	}
}

/** Returns clean host string. In case of unix socket it performs urlDecode on host. */
package auto getFilteredHost(URL url)
{
	version(UnixSocket)
	{
		import vibe.textfilter.urlencode : urlDecode;
		if (url.schema == "https+unix" || url.schema == "http+unix")
			return urlDecode(url.host);
		else
			return url.host;
	} else
		return url.host;
}

// This object is a placeholder and should to never be modified.
package @property const(HTTPClientSettings) defaultSettings()
@trusted {
	__gshared HTTPClientSettings ret = new HTTPClientSettings;
	return ret;
}
vibe.d-0.8.2/http/vibe/http/common.d000066400000000000000000000565601324361747700172420ustar00rootroot00000000000000/**
	Common classes for HTTP clients and servers.

	Copyright: © 2012-2015 RejectedSoftware e.K.
	License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file.
	Authors: Sönke Ludwig, Jan Krüger
*/
module vibe.http.common;

public import vibe.http.status;

import vibe.core.log;
import vibe.core.net;
import vibe.inet.message;
import vibe.stream.operations;
import vibe.textfilter.urlencode : urlEncode, urlDecode;
import vibe.utils.array;
import vibe.internal.allocator;
import vibe.internal.freelistref;
import vibe.internal.interfaceproxy : InterfaceProxy, interfaceProxy;
import vibe.utils.string;

import std.algorithm;
import std.array;
import std.conv;
import std.datetime;
import std.exception;
import std.format;
import std.range : isOutputRange;
import std.string;
import std.typecons;


enum HTTPVersion {
	HTTP_1_0,
	HTTP_1_1
}


enum HTTPMethod {
	// HTTP standard, RFC 2616
	GET,
	HEAD,
	PUT,
	POST,
	PATCH,
	DELETE,
	OPTIONS,
	TRACE,
	CONNECT,

	// WEBDAV extensions, RFC 2518
	PROPFIND,
	PROPPATCH,
	MKCOL,
	COPY,
	MOVE,
	LOCK,
	UNLOCK,

	// Versioning Extensions to WebDAV, RFC 3253
	VERSIONCONTROL,
	REPORT,
	CHECKOUT,
	CHECKIN,
	UNCHECKOUT,
	MKWORKSPACE,
	UPDATE,
	LABEL,
	MERGE,
	BASELINECONTROL,
	MKACTIVITY,

	// Ordered Collections Protocol, RFC 3648
	ORDERPATCH,

	// Access Control Protocol, RFC 3744
	ACL
}


/**
	Returns the string representation of the given HttpMethod.
*/
string httpMethodString(HTTPMethod m)
@safe nothrow {
	switch(m){
		case HTTPMethod.BASELINECONTROL: return "BASELINE-CONTROL";
		case HTTPMethod.VERSIONCONTROL: return "VERSION-CONTROL";
		default:
			try return to!string(m);
			catch (Exception e) assert(false, e.msg);
	}
}

/**
	Returns the HttpMethod value matching the given HTTP method string.
*/
HTTPMethod httpMethodFromString(string str)
@safe {
	switch(str){
		default: throw new Exception("Invalid HTTP method: "~str);
		// HTTP standard, RFC 2616
		case "GET": return HTTPMethod.GET;
		case "HEAD": return HTTPMethod.HEAD;
		case "PUT": return HTTPMethod.PUT;
		case "POST": return HTTPMethod.POST;
		case "PATCH": return HTTPMethod.PATCH;
		case "DELETE": return HTTPMethod.DELETE;
		case "OPTIONS": return HTTPMethod.OPTIONS;
		case "TRACE": return HTTPMethod.TRACE;
		case "CONNECT": return HTTPMethod.CONNECT;

		// WEBDAV extensions, RFC 2518
		case "PROPFIND": return HTTPMethod.PROPFIND;
		case "PROPPATCH": return HTTPMethod.PROPPATCH;
		case "MKCOL": return HTTPMethod.MKCOL;
		case "COPY": return HTTPMethod.COPY;
		case "MOVE": return HTTPMethod.MOVE;
		case "LOCK": return HTTPMethod.LOCK;
		case "UNLOCK": return HTTPMethod.UNLOCK;

		// Versioning Extensions to WebDAV, RFC 3253
		case "VERSION-CONTROL": return HTTPMethod.VERSIONCONTROL;
		case "REPORT": return HTTPMethod.REPORT;
		case "CHECKOUT": return HTTPMethod.CHECKOUT;
		case "CHECKIN": return HTTPMethod.CHECKIN;
		case "UNCHECKOUT": return HTTPMethod.UNCHECKOUT;
		case "MKWORKSPACE": return HTTPMethod.MKWORKSPACE;
		case "UPDATE": return HTTPMethod.UPDATE;
		case "LABEL": return HTTPMethod.LABEL;
		case "MERGE": return HTTPMethod.MERGE;
		case "BASELINE-CONTROL": return HTTPMethod.BASELINECONTROL;
		case "MKACTIVITY": return HTTPMethod.MKACTIVITY;

		// Ordered Collections Protocol, RFC 3648
		case "ORDERPATCH": return HTTPMethod.ORDERPATCH;

		// Access Control Protocol, RFC 3744
		case "ACL": return HTTPMethod.ACL;
	}
}

unittest
{
	assert(httpMethodString(HTTPMethod.GET) == "GET");
	assert(httpMethodString(HTTPMethod.UNLOCK) == "UNLOCK");
	assert(httpMethodString(HTTPMethod.VERSIONCONTROL) == "VERSION-CONTROL");
	assert(httpMethodString(HTTPMethod.BASELINECONTROL) == "BASELINE-CONTROL");
	assert(httpMethodFromString("GET") == HTTPMethod.GET);
	assert(httpMethodFromString("UNLOCK") == HTTPMethod.UNLOCK);
	assert(httpMethodFromString("VERSION-CONTROL") == HTTPMethod.VERSIONCONTROL);
}


/**
	Utility function that throws a HTTPStatusException if the _condition is not met.
*/
T enforceHTTP(T)(T condition, HTTPStatus statusCode, lazy string message = null, string file = __FILE__, typeof(__LINE__) line = __LINE__)
{
	return enforce(condition, new HTTPStatusException(statusCode, message, file, line));
}

/**
	Utility function that throws a HTTPStatusException with status code "400 Bad Request" if the _condition is not met.
*/
T enforceBadRequest(T)(T condition, lazy string message = null, string file = __FILE__, typeof(__LINE__) line = __LINE__)
{
	return enforceHTTP(condition, HTTPStatus.badRequest, message, file, line);
}


/**
	Represents an HTTP request made to a server.
*/
class HTTPRequest {
	@safe:

	protected {
		InterfaceProxy!Stream m_conn;
	}

	public {
		/// The HTTP protocol version used for the request
		HTTPVersion httpVersion = HTTPVersion.HTTP_1_1;

		/// The HTTP _method of the request
		HTTPMethod method = HTTPMethod.GET;

		/** The request URI

			Note that the request URI usually does not include the global
			'http://server' part, but only the local path and a query string.
			A possible exception is a proxy server, which will get full URLs.
		*/
		string requestURI = "/";

		/// Compatibility alias - scheduled for deprecation
		alias requestURL = requestURI;

		/// All request _headers
		InetHeaderMap headers;
	}

	protected this(InterfaceProxy!Stream conn)
	{
		m_conn = conn;
	}

	protected this()
	{
	}

	public override string toString()
	{
		return httpMethodString(method) ~ " " ~ requestURL ~ " " ~ getHTTPVersionString(httpVersion);
	}

	/** Shortcut to the 'Host' header (always present for HTTP 1.1)
	*/
	@property string host() const { auto ph = "Host" in headers; return ph ? *ph : null; }
	/// ditto
	@property void host(string v) { headers["Host"] = v; }

	/** Returns the mime type part of the 'Content-Type' header.

		This function gets the pure mime type (e.g. "text/plain")
		without any supplimentary parameters such as "charset=...".
		Use contentTypeParameters to get any parameter string or
		headers["Content-Type"] to get the raw value.
	*/
	@property string contentType()
	const {
		auto pv = "Content-Type" in headers;
		if( !pv ) return null;
		auto idx = std.string.indexOf(*pv, ';');
		return idx >= 0 ? (*pv)[0 .. idx] : *pv;
	}
	/// ditto
	@property void contentType(string ct) { headers["Content-Type"] = ct; }

	/** Returns any supplementary parameters of the 'Content-Type' header.

		This is a semicolon separated ist of key/value pairs. Usually, if set,
		this contains the character set used for text based content types.
	*/
	@property string contentTypeParameters()
	const {
		auto pv = "Content-Type" in headers;
		if( !pv ) return null;
		auto idx = std.string.indexOf(*pv, ';');
		return idx >= 0 ? (*pv)[idx+1 .. $] : null;
	}

	/** Determines if the connection persists across requests.
	*/
	@property bool persistent() const
	{
		auto ph = "connection" in headers;
		switch(httpVersion) {
			case HTTPVersion.HTTP_1_0:
				if (ph && toLower(*ph) == "keep-alive") return true;
				return false;
			case HTTPVersion.HTTP_1_1:
				if (ph && toLower(*ph) != "keep-alive") return false;
				return true;
			default:
				return false;
		}
	}
}


/**
	Represents the HTTP response from the server back to the client.
*/
class HTTPResponse {
	@safe:

	public {
		/// The protocol version of the response - should not be changed
		HTTPVersion httpVersion = HTTPVersion.HTTP_1_1;

		/// The status code of the response, 200 by default
		int statusCode = HTTPStatus.OK;

		/** The status phrase of the response

			If no phrase is set, a default one corresponding to the status code will be used.
		*/
		string statusPhrase;

		/// The response header fields
		InetHeaderMap headers;

		/// All cookies that shall be set on the client for this request
		Cookie[string] cookies;
	}

	public override string toString()
	{
		auto app = appender!string();
		formattedWrite(app, "%s %d %s", getHTTPVersionString(this.httpVersion), this.statusCode, this.statusPhrase);
		return app.data;
	}

	/** Shortcut to the "Content-Type" header
	*/
	@property string contentType() const { auto pct = "Content-Type" in headers; return pct ? *pct : "application/octet-stream"; }
	/// ditto
	@property void contentType(string ct) { headers["Content-Type"] = ct; }
}


/**
	Respresents a HTTP response status.

	Throwing this exception from within a request handler will produce a matching error page.
*/
class HTTPStatusException : Exception {
	@safe:

	private {
		int m_status;
	}

	this(int status, string message = null, string file = __FILE__, size_t line = __LINE__, Throwable next = null)
	{
		super(message != "" ? message : httpStatusText(status), file, line, next);
		m_status = status;
	}

	/// The HTTP status code
	@property int status() const { return m_status; }

	string debugMessage;
}


final class MultiPart {
	string contentType;

	InputStream stream;
	//JsonValue json;
	string[string] form;
}

string getHTTPVersionString(HTTPVersion ver)
@safe nothrow {
	final switch(ver){
		case HTTPVersion.HTTP_1_0: return "HTTP/1.0";
		case HTTPVersion.HTTP_1_1: return "HTTP/1.1";
	}
}


HTTPVersion parseHTTPVersion(ref string str)
@safe {
	enforceBadRequest(str.startsWith("HTTP/"));
	str = str[5 .. $];
	int majorVersion = parse!int(str);
	enforceBadRequest(str.startsWith("."));
	str = str[1 .. $];
	int minorVersion = parse!int(str);

	enforceBadRequest( majorVersion == 1 && (minorVersion == 0 || minorVersion == 1) );
	return minorVersion == 0 ? HTTPVersion.HTTP_1_0 : HTTPVersion.HTTP_1_1;
}


/**
	Takes an input stream that contains data in HTTP chunked format and outputs the raw data.
*/
final class ChunkedInputStream : InputStream
{
	@safe:

	private {
		InterfaceProxy!InputStream m_in;
		ulong m_bytesInCurrentChunk = 0;
	}

	deprecated("Use createChunkedInputStream() instead.")
	this(InputStream stream)
	{
		this(interfaceProxy!InputStream(stream), true);
	}

	/// private
	this(InterfaceProxy!InputStream stream, bool dummy)
	{
		assert(!!stream);
		m_in = stream;
		readChunk();
	}

	@property bool empty() const { return m_bytesInCurrentChunk == 0; }

	@property ulong leastSize() const { return m_bytesInCurrentChunk; }

	@property bool dataAvailableForRead() { return m_bytesInCurrentChunk > 0 && m_in.dataAvailableForRead; }

	const(ubyte)[] peek()
	{
		auto dt = m_in.peek();
		return dt[0 .. min(dt.length, m_bytesInCurrentChunk)];
	}

	size_t read(scope ubyte[] dst, IOMode mode)
	{
		enforceBadRequest(!empty, "Read past end of chunked stream.");
		size_t nbytes = 0;

		while (dst.length > 0) {
			enforceBadRequest(m_bytesInCurrentChunk > 0, "Reading past end of chunked HTTP stream.");

			auto sz = cast(size_t)min(m_bytesInCurrentChunk, dst.length);
			m_in.read(dst[0 .. sz]);
			dst = dst[sz .. $];
			m_bytesInCurrentChunk -= sz;
			nbytes += sz;

			// FIXME: this blocks, but shouldn't for IOMode.once/immediat
			if( m_bytesInCurrentChunk == 0 ){
				// skip current chunk footer and read next chunk
				ubyte[2] crlf;
				m_in.read(crlf);
				enforceBadRequest(crlf[0] == '\r' && crlf[1] == '\n');
				readChunk();
			}

			if (mode != IOMode.all) break;
		}

		return nbytes;
	}

	alias read = InputStream.read;

	private void readChunk()
	{
		assert(m_bytesInCurrentChunk == 0);
		// read chunk header
		logTrace("read next chunk header");
		auto ln = () @trusted { return cast(string)m_in.readLine(); } ();
		logTrace("got chunk header: %s", ln);
		m_bytesInCurrentChunk = parse!ulong(ln, 16u);

		if( m_bytesInCurrentChunk == 0 ){
			// empty chunk denotes the end
			// skip final chunk footer
			ubyte[2] crlf;
			m_in.read(crlf);
			enforceBadRequest(crlf[0] == '\r' && crlf[1] == '\n');
		}
	}
}

/// Creates a new `ChunkedInputStream` instance.
ChunkedInputStream chunkedInputStream(IS)(IS source_stream) if (isInputStream!IS)
{
	return new ChunkedInputStream(interfaceProxy!InputStream(source_stream), true);
}

/// Creates a new `ChunkedInputStream` instance.
FreeListRef!ChunkedInputStream createChunkedInputStreamFL(IS)(IS source_stream) if (isInputStream!IS)
{
	return () @trusted { return FreeListRef!ChunkedInputStream(interfaceProxy!InputStream(source_stream), true); } ();
}


/**
	Outputs data to an output stream in HTTP chunked format.
*/
final class ChunkedOutputStream : OutputStream {
	@safe:

	alias ChunkExtensionCallback = string delegate(in ubyte[] data);
	private {
		InterfaceProxy!OutputStream m_out;
		AllocAppender!(ubyte[]) m_buffer;
		size_t m_maxBufferSize = 4*1024;
		bool m_finalized = false;
		ChunkExtensionCallback m_chunkExtensionCallback = null;
	}

	deprecated("Use createChunkedOutputStream() instead.")
	this(OutputStream stream, IAllocator alloc = theAllocator())
	{
		this(interfaceProxy!OutputStream(stream), alloc, true);
	}

	/// private
	this(InterfaceProxy!OutputStream stream, IAllocator alloc, bool dummy)
	{
		m_out = stream;
		m_buffer = AllocAppender!(ubyte[])(alloc);
	}

	/** Maximum buffer size used to buffer individual chunks.

		A size of zero means unlimited buffer size. Explicit flush is required
		in this case to empty the buffer.
	*/
	@property size_t maxBufferSize() const { return m_maxBufferSize; }
	/// ditto
	@property void maxBufferSize(size_t bytes) { m_maxBufferSize = bytes; if (m_buffer.data.length >= m_maxBufferSize) flush(); }

	/** A delegate used to specify the extensions for each chunk written to the underlying stream.

	 	The delegate has to be of type `string delegate(in const(ubyte)[] data)` and gets handed the
	 	data of each chunk before it is written to the underlying stream. If it's return value is non-empty,
	 	it will be added to the chunk's header line.

	 	The returned chunk extension string should be of the format `key1=value1;key2=value2;[...];keyN=valueN`
	 	and **not contain any carriage return or newline characters**.

	 	Also note that the delegate should accept the passed data through a scoped argument. Thus, **no references
	 	to the provided data should be stored in the delegate**. If the data has to be stored for later use,
	 	it needs to be copied first.
	 */
	@property ChunkExtensionCallback chunkExtensionCallback() const { return m_chunkExtensionCallback; }
	/// ditto
	@property void chunkExtensionCallback(ChunkExtensionCallback cb) { m_chunkExtensionCallback = cb; }

	private void append(scope void delegate(scope ubyte[] dst) @safe del, size_t nbytes)
	{
		assert(del !is null);
		auto sz = nbytes;
		if (m_maxBufferSize > 0 && m_maxBufferSize < m_buffer.data.length + sz)
			sz = m_maxBufferSize - min(m_buffer.data.length, m_maxBufferSize);

		if (sz > 0)
		{
			m_buffer.reserve(sz);
			() @trusted {
				m_buffer.append((scope ubyte[] dst) {
					debug assert(dst.length >= sz);
					del(dst[0..sz]);
					return sz;
				});
			} ();
		}
	}

	size_t write(in ubyte[] bytes_, IOMode mode)
	{
		assert(!m_finalized);
		const(ubyte)[] bytes = bytes_;
		size_t nbytes = 0;
		while (bytes.length > 0) {
			append((scope ubyte[] dst) {
					auto n = dst.length;
					dst[] = bytes[0..n];
					bytes = bytes[n..$];
					nbytes += n;
				}, bytes.length);
			if (mode == IOMode.immediate) break;
			if (mode == IOMode.once && nbytes > 0) break;
			if (bytes.length > 0)
				flush();
		}
		return nbytes;
	}

	alias write = OutputStream.write;

	void flush()
	{
		assert(!m_finalized);
		auto data = m_buffer.data();
		if( data.length ){
			writeChunk(data);
		}
		m_out.flush();
		() @trusted { m_buffer.reset(AppenderResetMode.reuseData); } ();
	}

	void finalize()
	{
		if (m_finalized) return;
		flush();
		() @trusted { m_buffer.reset(AppenderResetMode.freeData); } ();
		m_finalized = true;
		writeChunk([]);
		m_out.flush();
	}

	private void writeChunk(in ubyte[] data)
	{
		import vibe.stream.wrapper;
		auto rng = streamOutputRange(m_out);
		formattedWrite(() @trusted { return &rng; } (), "%x", data.length);
		if (m_chunkExtensionCallback !is null)
		{
			rng.put(';');
			auto extension = m_chunkExtensionCallback(data);
			assert(!extension.startsWith(';'));
			debug assert(extension.indexOf('\r') < 0);
			debug assert(extension.indexOf('\n') < 0);
			rng.put(extension);
		}
		rng.put("\r\n");
		rng.put(data);
		rng.put("\r\n");
	}
}

/// Creates a new `ChunkedInputStream` instance.
ChunkedOutputStream createChunkedOutputStream(OS)(OS destination_stream, IAllocator allocator = theAllocator()) if (isOutputStream!OS)
{
	return new ChunkedOutputStream(interfaceProxy!OutputStream(destination_stream), allocator, true);
}

/// Creates a new `ChunkedOutputStream` instance.
FreeListRef!ChunkedOutputStream createChunkedOutputStreamFL(OS)(OS destination_stream, IAllocator allocator = theAllocator()) if (isOutputStream!OS)
{
	return FreeListRef!ChunkedOutputStream(interfaceProxy!OutputStream(destination_stream), allocator, true);
}


final class Cookie {
	@safe:

	private {
		string m_value;
		string m_domain;
		string m_path;
		string m_expires;
		long m_maxAge;
		bool m_secure;
		bool m_httpOnly;
	}

	enum Encoding {
		url,
		raw,
		none = raw
	}

	/// Cookie payload
	@property void value(string value) { m_value = urlEncode(value); }
	/// ditto
	@property string value() const { return urlDecode(m_value); }

	/// Undecoded cookie payload
	@property void rawValue(string value) { m_value = value; }
	/// ditto
	@property string rawValue() const { return m_value; }

	/// The domain for which the cookie is valid
	@property void domain(string value) { m_domain = value; }
	/// ditto
	@property string domain() const { return m_domain; }

	/// The path/local URI for which the cookie is valid
	@property void path(string value) { m_path = value; }
	/// ditto
	@property string path() const { return m_path; }

	/// Expiration date of the cookie
	@property void expires(string value) { m_expires = value; }
	/// ditto
	@property void expires(SysTime value) { m_expires = value.toRFC822DateTimeString(); }
	/// ditto
	@property string expires() const { return m_expires; }

	/** Maximum life time of the cookie

		This is the modern variant of `expires`. For backwards compatibility it
		is recommended to set both properties, or to use the `expire` method.
	*/
	@property void maxAge(long value) { m_maxAge = value; }
	/// ditto
	@property void maxAge(Duration value) { m_maxAge = value.total!"seconds"; }
	/// ditto
	@property long maxAge() const { return m_maxAge; }

	/** Require a secure connection for transmission of this cookie
	*/
	@property void secure(bool value) { m_secure = value; }
	/// ditto
	@property bool secure() const { return m_secure; }

	/** Prevents access to the cookie from scripts.
	*/
	@property void httpOnly(bool value) { m_httpOnly = value; }
	/// ditto
	@property bool httpOnly() const { return m_httpOnly; }

	/** Sets the "expires" and "max-age" attributes to limit the life time of
		the cookie.
	*/
	void expire(Duration max_age)
	{
		this.expires = Clock.currTime(UTC()) + max_age;
		this.maxAge = max_age;
	}
	/// ditto
	void expire(SysTime expire_time)
	{
		this.expires = expire_time;
		this.maxAge = expire_time - Clock.currTime(UTC());
	}

	/// Sets the cookie value encoded with the specified encoding.
	void setValue(string value, Encoding encoding)
	{
		final switch (encoding) {
			case Encoding.url: m_value = urlEncode(value); break;
			case Encoding.none: validateValue(value); m_value = value; break;
		}
	}

	/// Writes out the full cookie in HTTP compatible format.
	void writeString(R)(R dst, string name)
		if (isOutputRange!(R, char))
	{
		import vibe.textfilter.urlencode;
		dst.put(name);
		dst.put('=');
		validateValue(this.value);
		dst.put(this.value);
		if (this.domain && this.domain != "") {
			dst.put("; Domain=");
			dst.put(this.domain);
		}
		if (this.path != "") {
			dst.put("; Path=");
			dst.put(this.path);
		}
		if (this.expires != "") {
			dst.put("; Expires=");
			dst.put(this.expires);
		}
		if (this.maxAge) dst.formattedWrite("; Max-Age=%s", this.maxAge);
		if (this.secure) dst.put("; Secure");
		if (this.httpOnly) dst.put("; HttpOnly");
	}

	private static void validateValue(string value)
	{
		enforce(!value.canFind(';') && !value.canFind('"'));
	}
}

unittest {
	import std.exception : assertThrown;

	auto c = new Cookie;
	c.value = "foo";
	assert(c.value == "foo");
	assert(c.rawValue == "foo");

	c.value = "foo$";
	assert(c.value == "foo$");
	assert(c.rawValue == "foo%24", c.rawValue);

	c.value = "foo&bar=baz?";
	assert(c.value == "foo&bar=baz?");
	assert(c.rawValue == "foo%26bar%3Dbaz%3F", c.rawValue);

	c.setValue("foo%", Cookie.Encoding.raw);
	assert(c.rawValue == "foo%");
	assertThrown(c.value);

	assertThrown(c.setValue("foo;bar", Cookie.Encoding.raw));
}


/**
*/
struct CookieValueMap {
	@safe:

	struct Cookie {
		/// Name of the cookie
		string name;

		/// The raw cookie value as transferred over the wire
		string rawValue;

		this(string name, string value, .Cookie.Encoding encoding = .Cookie.Encoding.url)
		{
			this.name = name;
			this.setValue(value, encoding);
		}

		/// Treats the value as URL encoded
		string value() const { return urlDecode(rawValue); }
		/// ditto
		void value(string val) { rawValue = urlEncode(val); }

		/// Sets the cookie value, applying the specified encoding.
		void setValue(string value, .Cookie.Encoding encoding = .Cookie.Encoding.url)
		{
			final switch (encoding) {
				case .Cookie.Encoding.none: this.rawValue = value; break;
				case .Cookie.Encoding.url: this.rawValue = urlEncode(value); break;
			}
		}
	}

	private {
		Cookie[] m_entries;
	}

	auto length(){
		return m_entries.length;
	}

	string get(string name, string def_value = null)
	const {
		foreach (ref c; m_entries)
			if (c.name == name)
				return c.value;
		return def_value;
	}

	string[] getAll(string name)
	const {
		string[] ret;
		foreach(c; m_entries)
			if( c.name == name )
				ret ~= c.value;
		return ret;
	}

	void add(string name, string value, .Cookie.Encoding encoding = .Cookie.Encoding.url){
		m_entries ~= Cookie(name, value, encoding);
	}

	void opIndexAssign(string value, string name)
	{
		m_entries ~= Cookie(name, value);
	}

	string opIndex(string name)
	const {
		import core.exception : RangeError;
		foreach (ref c; m_entries)
			if (c.name == name)
				return c.value;
		throw new RangeError("Non-existent cookie: "~name);
	}

	int opApply(scope int delegate(ref Cookie) @safe del)
	{
		foreach(ref c; m_entries)
			if( auto ret = del(c) )
				return ret;
		return 0;
	}

	int opApply(scope int delegate(ref Cookie) @safe del)
	const {
		foreach(Cookie c; m_entries)
			if( auto ret = del(c) )
				return ret;
		return 0;
	}

	int opApply(scope int delegate(string name, string value) @safe del)
	{
		foreach(ref c; m_entries)
			if( auto ret = del(c.name, c.value) )
				return ret;
		return 0;
	}

	int opApply(scope int delegate(string name, string value) @safe del)
	const {
		foreach(Cookie c; m_entries)
			if( auto ret = del(c.name, c.value) )
				return ret;
		return 0;
	}

	auto opBinaryRight(string op)(string name) if(op == "in")
	{
		return Ptr(&this, name);
	}

	auto opBinaryRight(string op)(string name) const if(op == "in")
	{
		return const(Ptr)(&this, name);
	}

	private static struct Ref {
		private {
			CookieValueMap* map;
			string name;
		}

		@property string get() const { return (*map)[name]; }
		void opAssign(string newval) {
			foreach (ref c; *map)
				if (c.name == name) {
					c.value = newval;
					return;
				}
			assert(false);
		}
		alias get this;
	}
	private static struct Ptr {
		private {
			CookieValueMap* map;
			string name;
		}
		bool opCast() const {
			foreach (ref c; map.m_entries)
				if (c.name == name)
					return true;
			return false;
		}
		inout(Ref) opUnary(string op : "*")() inout { return inout(Ref)(map, name); }
	}
}

unittest {
	CookieValueMap m;
	m["foo"] = "bar;baz%1";
	assert(m["foo"] == "bar;baz%1");

	m["foo"] = "bar";
	assert(m.getAll("foo") == ["bar;baz%1", "bar"]);

	assert("foo" in m);
	if (auto val = "foo" in m) {
		assert(*val == "bar;baz%1");
	} else assert(false);
	*("foo" in m) = "baz";
	assert(m["foo"] == "baz");
}
vibe.d-0.8.2/http/vibe/http/dist.d000066400000000000000000000032221324361747700167000ustar00rootroot00000000000000/**
	Interface for the VibeDist load balancer

	Copyright: © 2012-2013 RejectedSoftware e.K.
	License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file.
	Authors: Sönke Ludwig, Jan Krüger
*/
module vibe.http.dist;

import vibe.core.log;
import vibe.data.json;
import vibe.inet.url;
import vibe.http.client;
import vibe.http.server;

import std.conv;
import std.exception;
import std.process;


/**
	Listens for HTTP connections on the specified load balancer using the given HTTP server settings.

	This function is usable as direct replacement of listenHTTP
*/
HTTPListener listenHTTPDist(HTTPServerSettings settings, HTTPServerRequestDelegate handler, string balancer_address, ushort balancer_port = 11000)
@safe {
	Json regmsg = Json.emptyObject;
	regmsg["host_name"] = settings.hostName;
	regmsg["port"] = settings.port;
	regmsg["ssl_settings"] = "";
	regmsg["pid"] = thisProcessID;
	//regmsg.sslContext = settings.sslContext; // TODO: send key/cert contents

	HTTPServerSettings local_settings = settings.dup;
	local_settings.bindAddresses = ["127.0.0.1"];
	local_settings.port = 0;
	local_settings.disableDistHost = true;
	auto ret = listenHTTP(local_settings, handler);

	requestHTTP(URL("http://"~balancer_address~":"~to!string(balancer_port)~"/register"), (scope req){
			logInfo("Listening for VibeDist connections on port %d", req.localAddress.port);
			regmsg["local_address"] = "127.0.0.1";
			regmsg["local_port"] = req.localAddress.port;
			req.method = HTTPMethod.POST;
			req.writeJsonBody(regmsg);
		}, (scope res){
			enforce(res.statusCode == HTTPStatus.ok, "Failed to register with load balancer.");
		});

	return ret;
}
vibe.d-0.8.2/http/vibe/http/fileserver.d000066400000000000000000000317371324361747700201170ustar00rootroot00000000000000/**
	A static HTTP file server.

	Copyright: © 2012-2015 RejectedSoftware e.K.
	License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file.
	Authors: Sönke Ludwig
*/
module vibe.http.fileserver;

import vibe.core.file;
import vibe.core.log;
import vibe.core.stream : RandomAccessStream, pipe;
import vibe.http.server;
import vibe.inet.message;
import vibe.inet.mimetypes;
import vibe.inet.url;
import vibe.internal.interfaceproxy;

import std.conv;
import std.datetime;
import std.digest.md;
import std.string;
import std.algorithm;

@safe:


/**
	Returns a request handler that serves files from the specified directory.

	See `sendFile` for more information.

	Params:
		local_path = Path to the folder to serve files from.
		settings = Optional settings object enabling customization of how
			the files get served.

	Returns:
		A request delegate is returned, which is suitable for registering in
		a `URLRouter` or for passing to `listenHTTP`.

	See_Also: `serveStaticFile`, `sendFile`
*/
HTTPServerRequestDelegateS serveStaticFiles(NativePath local_path, HTTPFileServerSettings settings = null)
{
	import std.range.primitives : front;
	if (!settings) settings = new HTTPFileServerSettings;
	if (!settings.serverPathPrefix.endsWith("/")) settings.serverPathPrefix ~= "/";

	void callback(scope HTTPServerRequest req, scope HTTPServerResponse res)
	@safe {
		string srv_path;
		if (auto pp = "pathMatch" in req.params) srv_path = *pp;
		else if (req.path.length > 0) srv_path = req.path;
		else srv_path = req.requestURL;

		if (!srv_path.startsWith(settings.serverPathPrefix)) {
			logDebug("path '%s' not starting with '%s'", srv_path, settings.serverPathPrefix);
			return;
		}

		auto rel_path = srv_path[settings.serverPathPrefix.length .. $];
		auto rpath = PosixPath(rel_path);
		logTrace("Processing '%s'", srv_path);

		rpath.normalize();
		logDebug("Path '%s' -> '%s'", rel_path, rpath.toNativeString());
		if (rpath.absolute) {
			logDebug("Path is absolute, not responding");
			return;
		} else if (!rpath.empty && rpath.bySegment.front.name == "..")
			return; // don't respond to relative paths outside of the root path

		sendFileImpl(req, res, local_path ~ rpath, settings);
	}

	return &callback;
}
/// ditto
HTTPServerRequestDelegateS serveStaticFiles(string local_path, HTTPFileServerSettings settings = null)
{
	return serveStaticFiles(NativePath(local_path), settings);
}

///
unittest {
	import vibe.http.fileserver;
	import vibe.http.router;
	import vibe.http.server;

	void setupServer()
	{
		auto router = new URLRouter;
		// add other routes here
		router.get("*", serveStaticFiles("public/"));

		auto settings = new HTTPServerSettings;
		listenHTTP(settings, router);
	}
}

/** This example serves all files in the "public" sub directory
	with an added prefix "static/" so that they don't interfere
	with other registered routes.
*/
unittest {
	import vibe.http.fileserver;
	import vibe.http.router;
	import vibe.http.server;

	void setupRoutes()
	{
	 	auto router = new URLRouter;
		// add other routes here

		auto fsettings = new HTTPFileServerSettings;
		fsettings.serverPathPrefix = "/static";
		router.get("static/*", serveStaticFiles("public/", fsettings));

		auto settings = new HTTPServerSettings;
		listenHTTP(settings, router);
	}
}


/**
	Returns a request handler that serves a specific file on disk.

	See `sendFile` for more information.

	Params:
		local_path = Path to the file to serve.
		settings = Optional settings object enabling customization of how
			the file gets served.

	Returns:
		A request delegate is returned, which is suitable for registering in
		a `URLRouter` or for passing to `listenHTTP`.

	See_Also: `serveStaticFiles`, `sendFile`
*/
HTTPServerRequestDelegateS serveStaticFile(NativePath local_path, HTTPFileServerSettings settings = null)
{
	if (!settings) settings = new HTTPFileServerSettings;
	assert(settings.serverPathPrefix == "/", "serverPathPrefix is not supported for single file serving.");

	void callback(scope HTTPServerRequest req, scope HTTPServerResponse res)
	{
		sendFileImpl(req, res, local_path, settings);
	}

	return &callback;
}
/// ditto
HTTPServerRequestDelegateS serveStaticFile(string local_path, HTTPFileServerSettings settings = null)
{
	return serveStaticFile(NativePath(local_path), settings);
}


/**
	Sends a file to the given HTTP server response object.

	When serving a file, certain request headers are supported to avoid sending
	the file if the client has it already cached. These headers are
	`"If-Modified-Since"` and `"If-None-Match"`. The client will be delivered
	with the necessary `"Etag"` (generated from the path, size and last
	modification time of the file) and `"Last-Modified"` headers.

	The cache control directives `"Expires"` and `"Cache-Control"` will also be
	emitted if the `HTTPFileServerSettings.maxAge` field is set to a positive
	duration.

	Finally, HEAD requests will automatically be handled without reading the
	actual file contents. Am empty response body is written instead.

	Params:
		req = The incoming HTTP request - cache and modification headers of the
			request can influence the generated response.
		res = The response object to write to.
		settings = Optional settings object enabling customization of how the
			file gets served.
*/
void sendFile(scope HTTPServerRequest req, scope HTTPServerResponse res, NativePath path, HTTPFileServerSettings settings = null)
{
	static HTTPFileServerSettings default_settings;
	if (!settings) {
		if (!default_settings) default_settings = new HTTPFileServerSettings;
		settings = default_settings;
	}

	sendFileImpl(req, res, path, settings);
}


/**
	Configuration options for the static file server.
*/
class HTTPFileServerSettings {
	/// Prefix of the request path to strip before looking up files
	string serverPathPrefix = "/";

	/// Maximum cache age to report to the client (24 hours by default)
	Duration maxAge;// = hours(24);

	/// General options
	HTTPFileServerOption options = HTTPFileServerOption.defaults; /// additional options

	/** Maps from encoding scheme (e.g. "gzip") to file extension.

		If a request accepts a supported encoding scheme, then the file server
		will look for a file with the extension as a suffix and, if that exists,
		sends it as the encoded representation instead of sending the original
		file.

		Example:
			---
			settings.encodingFileExtension["gzip"] = ".gz";
			---
	*/
	string[string] encodingFileExtension;

	/**
		Called just before headers and data are sent.
		Allows headers to be customized, or other custom processing to be performed.

		Note: Any changes you make to the response, physicalPath, or anything
		else during this function will NOT be verified by Vibe.d for correctness.
		Make sure any alterations you make are complete and correct according to HTTP spec.
	*/
	void delegate(scope HTTPServerRequest req, scope HTTPServerResponse res, ref string physicalPath) preWriteCallback = null;

	this()
	{
		// need to use the contructor because the Ubuntu 13.10 GDC cannot CTFE dur()
		maxAge = 24.hours;
	}

	this(string path_prefix)
	{
		this();
		serverPathPrefix = path_prefix;
	}
}


/**
   Additional options for the static file server.
 */
enum HTTPFileServerOption {
	none = 0,
	/// respond with 404 if a file was not found
	failIfNotFound = 1 << 0,
	/// serve index.html for directories
	serveIndexHTML = 1 << 1,
	/// default options are serveIndexHTML
	defaults = serveIndexHTML,
}


private void sendFileImpl(scope HTTPServerRequest req, scope HTTPServerResponse res, NativePath path, HTTPFileServerSettings settings = null)
{
	auto pathstr = path.toNativeString();

	// return if the file does not exist
	if (!existsFile(pathstr)){
		if (settings.options & HTTPFileServerOption.failIfNotFound)
			throw new HTTPStatusException(HTTPStatus.NotFound);
		return;
	}

	FileInfo dirent;
	try dirent = getFileInfo(pathstr);
	catch(Exception){
		throw new HTTPStatusException(HTTPStatus.InternalServerError, "Failed to get information for the file due to a file system error.");
	}

	if (dirent.isDirectory) {
		if (settings.options & HTTPFileServerOption.serveIndexHTML)
			return sendFileImpl(req, res, path ~ "index.html", settings);
		logDebugV("Hit directory when serving files, ignoring: %s", pathstr);
		if (settings.options & HTTPFileServerOption.failIfNotFound)
			throw new HTTPStatusException(HTTPStatus.NotFound);
		return;
	}

	auto lastModified = toRFC822DateTimeString(dirent.timeModified.toUTC());
	// simple etag generation
	auto etag = "\"" ~ hexDigest!MD5(pathstr ~ ":" ~ lastModified ~ ":" ~ to!string(dirent.size)).idup ~ "\"";

	res.headers["Last-Modified"] = lastModified;
	res.headers["Etag"] = etag;
	if (settings.maxAge > seconds(0)) {
		auto expireTime = Clock.currTime(UTC()) + settings.maxAge;
		res.headers["Expires"] = toRFC822DateTimeString(expireTime);
		res.headers["Cache-Control"] = "max-age="~to!string(settings.maxAge.total!"seconds");
	}

	if( auto pv = "If-Modified-Since" in req.headers ) {
		if( *pv == lastModified ) {
			res.statusCode = HTTPStatus.NotModified;
			res.writeVoidBody();
			return;
		}
	}

	if( auto pv = "If-None-Match" in req.headers ) {
		if ( *pv == etag ) {
			res.statusCode = HTTPStatus.NotModified;
			res.writeVoidBody();
			return;
		}
	}

	auto mimetype = res.headers.get("Content-Type", getMimeTypeForFile(pathstr));

	// avoid double-compression
	if ("Content-Encoding" in res.headers && isCompressedFormat(mimetype))
		res.headers.remove("Content-Encoding");

	if (!("Content-Type" in res.headers))
		res.headers["Content-Type"] = mimetype;

	res.headers.addField("Accept-Ranges", "bytes");
	ulong rangeStart = 0;
	ulong rangeEnd = 0;
	auto prange = "Range" in req.headers;

	if (prange) {
		auto range = (*prange).chompPrefix("bytes=");
		if (range.canFind(','))
			throw new HTTPStatusException(HTTPStatus.notImplemented);
		auto s = range.split("-");
		if (s.length != 2)
			throw new HTTPStatusException(HTTPStatus.badRequest);
		// https://tools.ietf.org/html/rfc7233
		// Range can be in form "-\d", "\d-" or "\d-\d"
		try {
			if (s[0].length) {
				rangeStart = s[0].to!ulong;
				rangeEnd = s[1].length ? s[1].to!ulong : dirent.size;
			} else if (s[1].length) {
				rangeEnd = dirent.size;
				auto len = s[1].to!ulong;
				if (len >= rangeEnd)
					rangeStart = 0;
				else
					rangeStart = rangeEnd - len;
			} else {
				throw new HTTPStatusException(HTTPStatus.badRequest);
			}
		} catch (ConvException) {
			throw new HTTPStatusException(HTTPStatus.badRequest);
		}
		if (rangeEnd > dirent.size)
			rangeEnd = dirent.size;
		if (rangeStart > rangeEnd)
			rangeStart = rangeEnd;
		if (rangeEnd)
			rangeEnd--; // End is inclusive, so one less than length
		// potential integer overflow with rangeEnd - rangeStart == size_t.max is intended. This only happens with empty files, the + 1 will then put it back to 0
		res.headers["Content-Length"] = to!string(rangeEnd - rangeStart + 1);
		res.headers["Content-Range"] = "bytes %s-%s/%s".format(rangeStart < rangeEnd ? rangeStart : rangeEnd, rangeEnd, dirent.size);
		res.statusCode = HTTPStatus.partialContent;
	} else
		res.headers["Content-Length"] = dirent.size.to!string;

	// check for already encoded file if configured
	string encodedFilepath;
	auto pce = "Content-Encoding" in res.headers;
	if (pce) {
		if (auto pfe = *pce in settings.encodingFileExtension) {
			assert((*pfe).length > 0);
			auto p = pathstr ~ *pfe;
			if (existsFile(p))
				encodedFilepath = p;
		}
	}
	if (encodedFilepath.length) {
		auto origLastModified = dirent.timeModified.toUTC();

		try dirent = getFileInfo(encodedFilepath);
		catch(Exception){
			throw new HTTPStatusException(HTTPStatus.InternalServerError, "Failed to get information for the file due to a file system error.");
		}

		// encoded file must be younger than original else warn
		if (dirent.timeModified.toUTC() >= origLastModified){
			logTrace("Using already encoded file '%s' -> '%s'", path, encodedFilepath);
			path = NativePath(encodedFilepath);
			res.headers["Content-Length"] = to!string(dirent.size);
		} else {
			logWarn("Encoded file '%s' is older than the original '%s'. Ignoring it.", encodedFilepath, path);
			encodedFilepath = null;
		}
	}

	if(settings.preWriteCallback)
		settings.preWriteCallback(req, res, pathstr);

	// for HEAD responses, stop here
	if( res.isHeadResponse() ){
		res.writeVoidBody();
		assert(res.headerWritten);
		logDebug("sent file header %d, %s!", dirent.size, res.headers["Content-Type"]);
		return;
	}

	// else write out the file contents
	//logTrace("Open file '%s' -> '%s'", srv_path, pathstr);
	FileStream fil;
	try {
		fil = openFile(path);
	} catch( Exception e ){
		// TODO: handle non-existant files differently than locked files?
		logDebug("Failed to open file %s: %s", pathstr, () @trusted { return e.toString(); } ());
		return;
	}
	scope(exit) fil.close();

	if (prange) {
		fil.seek(rangeStart);
		fil.pipe(res.bodyWriter, rangeEnd - rangeStart + 1);
		logTrace("partially sent file %d-%d, %s!", rangeStart, rangeEnd, res.headers["Content-Type"]);
	} else {
		if (pce && !encodedFilepath.length)
			fil.pipe(res.bodyWriter);
		else res.writeRawBody(fil);
		logTrace("sent file %d, %s!", fil.size, res.headers["Content-Type"]);
	}
}
vibe.d-0.8.2/http/vibe/http/form.d000066400000000000000000000073171324361747700167110ustar00rootroot00000000000000/**
	Convenience functions for working with web forms.

	Copyright: © 2012-2015 RejectedSoftware e.K.
	License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file.
	Authors: Sönke Ludwig, Jan Krüger
*/
module vibe.http.form;

public import vibe.inet.webform;

import vibe.http.client : HTTPClientRequest; // for writeFormBody
import vibe.http.server;

import std.array;
import std.conv;
import std.range;
import std.string;
import std.typecons : isTuple;


/**
	Encodes the given dictionary as URL encoded form data.
*/
void writeFormData(R)(R dst, in string[string] data)
	if (isOutputRange!(R, char))
{
	import vibe.textfilter.urlencode;

	bool first = true;
	foreach (k, v; data) {
		if (first) first = false;
		else dst.put("&");
		filterURLEncode(dst, k);
		dst.put("=");
		filterURLEncode(dst, v);
	}
}

///
unittest {
	import std.array;
	import vibe.core.log;
	import vibe.http.form;

	void test()
	{
		auto dst = appender!string();
		dst.writeFormData(["field1": "value1", "field2": "value2"]);
		logInfo("Form data: %s", dst.data);
	}
}

/**
	Encodes the given ranges of `Tuple!(string, string)` as URL encoded form data
*/
void writeFormData(R, PairRange)(R dst, PairRange pr)
	if (isOutputRange!(R, char) && isTuple!(ElementType!PairRange) && ElementType!PairRange.length == 2)
{
	import vibe.textfilter.urlencode;

   if(pr.empty) return;

   auto fst = pr.front;
   pr.popFront();

   filterURLEncode(dst, fst[0]);
   dst.put("=");
   filterURLEncode(dst, fst[1]);

	foreach (pair; pr) {
		dst.put("&");
		filterURLEncode(dst, pair[0]);
		dst.put("=");
		filterURLEncode(dst, pair[1]);
	}
}

/**
	Writes a `vibe.http.client.HTTPClientRequest` body as URL encoded form data.
*/
void writeFormBody(HTTPClientRequest req, in string[string] form)
{
	import vibe.http.form;
	import vibe.stream.wrapper;

	StringLengthCountingRange len;
	writeFormData(&len, form);
	req.contentType = "application/x-www-form-urlencoded";
	req.contentLength = len.count;
	auto rng = streamOutputRange(req.bodyWriter);
	writeFormData(&rng, form);
}

///
unittest {
	import vibe.core.log;
	import vibe.http.client;
	import vibe.http.form;
	import vibe.stream.operations;

	void sendForm()
	{
		requestHTTP("http://example.com/form",
			(scope req) {
				req.method = HTTPMethod.POST;
				req.writeFormBody(["field1": "value1", "field2": "value2"]);
			},
			(scope res) {
				logInfo("Response: %s", res.bodyReader.readAllUTF8());
			});
	}
}

/**
	Writes a `vibe.http.client.HTTPClientRequest` body as URL encoded form data.

	Params:
	  form = range of `t = Tuple!(string, string)`,
			 where `t[0]` is the name and `t[1]` the
			 value of a form entry.
*/
void writeFormBody(PairRange)(HTTPClientRequest req, PairRange form)
   if(isTuple!(ElementType!PairRange) && ElementType!PairRange.length == 2)
{
	import vibe.http.form;
	import vibe.stream.wrapper;

	StringLengthCountingRange len;
	writeFormData(&len, form.save);
	req.contentType = "application/x-www-form-urlencoded";
	req.contentLength = len.count;
	auto rng = streamOutputRange(req.bodyWriter);
	writeFormData(&rng, form);
}

///
unittest {
	import vibe.core.log;
	import vibe.http.client;
	import vibe.http.form;
	import vibe.stream.operations;
	import std.range;

	void sendForm()
	{
		string[] names = ["foo", "bar", "baz"];
		string[] values = ["1", "2", "3"];
		auto form = zip(names, values);
		requestHTTP("http://example.com/form",
			(scope req) {
				req.method = HTTPMethod.POST;
				req.writeFormBody(form);
			},
			(scope res) {
				logInfo("Response: %s", res.bodyReader.readAllUTF8());
			});
	}
}


/// private
struct StringLengthCountingRange {
	import std.utf;
	size_t count = 0;
	void put(string str) { count += str.length; }
	void put(dchar ch) { count += codeLength!char(ch); }
}
vibe.d-0.8.2/http/vibe/http/log.d000066400000000000000000000152561324361747700165300ustar00rootroot00000000000000/**
	A HTTP 1.1/1.0 server implementation.

	Copyright: © 2012-2013 RejectedSoftware e.K.
	License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file.
	Authors: Sönke Ludwig, Jan Krüger
*/
module vibe.http.log;

import vibe.core.file;
import vibe.core.log;
import vibe.core.sync : InterruptibleTaskMutex, performLocked;
import vibe.http.server;
import vibe.utils.array : FixedAppender;

import std.array;
import std.conv;
import std.exception;
import std.string;


class HTTPLogger {
	@safe:

	private {
		string m_format;
		const(HTTPServerSettings) m_settings;
		InterruptibleTaskMutex m_mutex;
		Appender!(char[]) m_lineAppender;
	}

	this(in HTTPServerSettings settings, string format)
	{
		m_format = format;
		m_settings = settings;
		m_mutex = new InterruptibleTaskMutex;
		m_lineAppender.reserve(2048);
	}

	void close() {}

	final void log(scope HTTPServerRequest req, scope HTTPServerResponse res)
	{
		m_mutex.performLocked!(() @safe {
			m_lineAppender.clear();
			formatApacheLog(m_lineAppender, m_format, req, res, m_settings);
			writeLine(m_lineAppender.data);
		});
	}

	protected abstract void writeLine(const(char)[] ln);
}


final class HTTPConsoleLogger : HTTPLogger {
@safe:

	this(HTTPServerSettings settings, string format)
	{
		super(settings, format);
	}

	protected override void writeLine(const(char)[] ln)
	{
		logInfo("%s", ln);
	}
}


final class HTTPFileLogger : HTTPLogger {
@safe:

	private {
		FileStream m_stream;
	}

	this(HTTPServerSettings settings, string format, string filename)
	{
		m_stream = openFile(filename, FileMode.append);
		super(settings, format);
	}

	override void close()
	{
		m_stream.close();
		m_stream = FileStream.init;
	}

	protected override void writeLine(const(char)[] ln)
	{
		assert(!!m_stream);
		m_stream.write(ln);
		m_stream.write("\n");
		m_stream.flush();
	}
}

void formatApacheLog(R)(ref R ln, string format, scope HTTPServerRequest req, scope HTTPServerResponse res, in HTTPServerSettings settings)
@safe {
	import std.format : formattedWrite;
	enum State {Init, Directive, Status, Key, Command}

	State state = State.Init;
	bool conditional = false;
	bool negate = false;
	bool match = false;
	string statusStr;
	string key = "";
	while( format.length > 0 ) {
		final switch(state) {
			case State.Init:
				auto idx = format.indexOf('%');
				if( idx < 0 ) {
					ln.put( format );
					format = "";
				} else {
					ln.put( format[0 .. idx] );
					format = format[idx+1 .. $];

					state = State.Directive;
				}
				break;
			case State.Directive:
				if( format[0] == '!' ) {
					conditional = true;
					negate = true;
					format = format[1 .. $];
					state = State.Status;
				} else if( format[0] == '%' ) {
					ln.put("%");
					format = format[1 .. $];
					state = State.Init;
				} else if( format[0] == '{' ) {
					format = format[1 .. $];
					state = State.Key;
				} else if( format[0] >= '0' && format[0] <= '9' ) {
					conditional = true;
					state = State.Status;
				} else {
					state = State.Command;
				}
				break;
			case State.Status:
				if( format[0] >= '0' && format[0] <= '9' ) {
					statusStr ~= format[0];
					format = format[1 .. $];
				} else if( format[0] == ',' ) {
					statusStr = "";
					format = format[1 .. $];
				} else if( format[0] == '{' ) {
					format = format[1 .. $];
					state = State.Key;
				} else {
					state = State.Command;
				}
				if (statusStr.length == 3 && !match) {
					auto status = parse!int(statusStr);
					match = status == res.statusCode;
				}
				break;
			case State.Key:
				auto idx = format.indexOf('}');
				enforce(idx > -1, "Missing '}'");
				key = format[0 .. idx];
				format = format[idx+1 .. $];
				state = State.Command;
				break;
			case State.Command:
				if( conditional && negate == match ) {
					ln.put('-');
					format = format[1 .. $];
					state = State.Init;
					break;
				}
				switch(format[0]) {
					case 'a': //Remote IP-address
						ln.put(req.peer);
						break;
					//TODO case 'A': //Local IP-address
					//case 'B': //Size of Response in bytes, excluding headers
					case 'b': //same as 'B' but a '-' is written if no bytes where sent
						if (!res.bytesWritten) ln.put('-');
						else formattedWrite(() @trusted { return &ln; } (), "%s", res.bytesWritten);
						break;
					case 'C': //Cookie content {cookie}
						import std.algorithm : joiner;
						enforce(key != "", "cookie name missing");
						auto values = req.cookies.getAll(key);
						if (values.length) ln.formattedWrite("%s", values.joiner(";"));
						else ln.put("-");
						break;
					case 'D': //The time taken to serve the request
						auto d = res.timeFinalized - req.timeCreated;
						formattedWrite(() @trusted { return &ln; } (), "%s", d.total!"msecs"());
						break;
					//case 'e': //Environment variable {variable}
					//case 'f': //Filename
					case 'h': //Remote host
						ln.put(req.peer);
						break;
					case 'H': //The request protocol
						ln.put("HTTP");
						break;
					case 'i': //Request header {header}
						enforce(key != "", "header name missing");
						if (auto pv = key in req.headers) ln.put(*pv);
						else ln.put("-");
						break;
					case 'm': //Request method
						ln.put(httpMethodString(req.method));
						break;
					case 'o': //Response header {header}
						enforce(key != "", "header name missing");
						if( auto pv = key in res.headers ) ln.put(*pv);
						else ln.put("-");
						break;
					case 'p': //port
						formattedWrite(() @trusted { return &ln; } (), "%s", settings.port);
						break;
					//case 'P': //Process ID
					case 'q': //query string (with prepending '?')
						ln.put("?");
						ln.put(req.queryString);
						break;
					case 'r': //First line of Request
						ln.put(httpMethodString(req.method));
						ln.put(' ');
						ln.put(req.requestURL);
						ln.put(' ');
						ln.put(getHTTPVersionString(req.httpVersion));
						break;
					case 's': //Status
						formattedWrite(() @trusted { return &ln; } (), "%s", res.statusCode);
						break;
					case 't': //Time the request was received {format}
						ln.put(req.timeCreated.toSimpleString());
						break;
					case 'T': //Time taken to server the request in seconds
						auto d = res.timeFinalized - req.timeCreated;
						formattedWrite(() @trusted { return &ln; } (), "%s", d.total!"seconds");
						break;
					case 'u': //Remote user
						ln.put(req.username.length ? req.username : "-");
						break;
					case 'U': //The URL path without query string
						ln.put(req.path);
						break;
					case 'v': //Server name
						ln.put(req.host.length ? req.host : "-");
						break;
					default:
						throw new Exception("Unknown directive '" ~ format[0] ~ "' in log format string");
				}
				state = State.Init;
				format = format[1 .. $];
				break;
		}
	}
}
vibe.d-0.8.2/http/vibe/http/proxy.d000066400000000000000000000224061324361747700171230ustar00rootroot00000000000000/**
	HTTP (reverse) proxy implementation

	Copyright: © 2012 RejectedSoftware e.K.
	License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file.
	Authors: Sönke Ludwig
*/
module vibe.http.proxy;

import vibe.core.log;
import vibe.http.client;
import vibe.http.server;
import vibe.inet.message;
import vibe.stream.operations;
import vibe.internal.interfaceproxy : InterfaceProxy;

import std.conv;
import std.exception;


/*
	TODO:
		- use a client pool
		- implement a path based reverse proxy
*/

/**
	Transparently forwards all requests to the proxy to another host.

	The configurations set in 'settings' and 'proxy_settings' determines the exact
	behavior.
*/
void listenHTTPProxy(HTTPServerSettings settings, HTTPProxySettings proxy_settings)
{
	// disable all advanced parsing in the server
	settings.options = HTTPServerOption.None;
	listenHTTP(settings, proxyRequest(proxy_settings));
}
// Compatibility alias - will be deprecated soon.
alias listenHTTPReverseProxy = listenHTTPProxy;

/**
	Transparently forwards all requests to the proxy to a destination_host.

	You can use the hostName field in the 'settings' to combine multiple internal HTTP servers
	into one public web server with multiple virtual hosts.
*/
void listenHTTPReverseProxy(HTTPServerSettings settings, string destination_host, ushort destination_port)
{
	URL url;
	url.schema = "http";
	url.host = destination_host;
	url.port = destination_port;
	auto proxy_settings = new HTTPProxySettings(ProxyMode.reverse);
	proxy_settings.destination = url;
	listenHTTPReverseProxy(settings, proxy_settings);
}

/**
	Transparently forwards all requests to the proxy to the requestURL of the request.
*/
void listenHTTPForwardProxy(HTTPServerSettings settings) {
	auto proxy_settings = new HTTPProxySettings(ProxyMode.forward);
	proxy_settings.handleConnectRequests = true;
	listenHTTPProxy(settings, proxy_settings);
}

/**
	Returns a HTTP request handler that forwards any request to the specified or requested host/port.
*/
HTTPServerRequestDelegateS proxyRequest(HTTPProxySettings settings)
{
	static immutable string[] non_forward_headers = ["Content-Length", "Transfer-Encoding", "Content-Encoding", "Connection"];
	static InetHeaderMap non_forward_headers_map;
	if (non_forward_headers_map.length == 0)
		foreach (n; non_forward_headers)
			non_forward_headers_map[n] = "";

	void handleRequest(scope HTTPServerRequest req, scope HTTPServerResponse res)
	@safe {
		auto url = settings.destination;

		if (settings.proxyMode == ProxyMode.reverse) {
			url.localURI = req.requestURL;
		}
		else {
			url = URL(req.requestURL);
		}

		//handle connect tunnels
		if (req.method == HTTPMethod.CONNECT) {
			if (!settings.handleConnectRequests)
			{
				throw new HTTPStatusException(HTTPStatus.methodNotAllowed);
			}

			// CONNECT resources are of the form server:port and not
			// schema://server:port, so they need some adjustment
			// TODO: use a more efficient means to parse this
			url = URL.parse("http://"~req.requestURL);

			TCPConnection ccon;
			try ccon = connectTCP(url.getFilteredHost, url.port);
			catch (Exception e) {
				throw new HTTPStatusException(HTTPStatus.badGateway, "Connection to upstream server failed: "~e.msg);
			}

			res.writeVoidBody();
			auto scon = res.connectProxy();
			assert (scon);

			import vibe.core.core : runTask;
			runTask({ scon.pipe(ccon); });
			ccon.pipe(scon);
			return;
		}

		//handle protocol upgrades
		auto pUpgrade = "Upgrade" in req.headers;
		auto pConnection = "Connection" in req.headers;


		import std.algorithm : splitter, canFind;
		import vibe.utils.string : icmp2;
		bool isUpgrade = pConnection && (*pConnection).splitter(',').canFind!(a => a.icmp2("upgrade"));

		void setupClientRequest(scope HTTPClientRequest creq)
		{
			creq.method = req.method;
			creq.headers = req.headers.dup;
			creq.headers["Host"] = url.getFilteredHost;

			//handle protocol upgrades
			if (!isUpgrade) {
				creq.headers["Connection"] = "keep-alive";
			}
			if (settings.avoidCompressedRequests && "Accept-Encoding" in creq.headers)
				creq.headers.remove("Accept-Encoding");
			if (auto pfh = "X-Forwarded-Host" !in creq.headers) creq.headers["X-Forwarded-Host"] = req.headers["Host"];
			if (auto pfp = "X-Forwarded-Proto" !in creq.headers) creq.headers["X-Forwarded-Proto"] = req.tls ? "https" : "http";
			if (auto pff = "X-Forwarded-For" in req.headers) creq.headers["X-Forwarded-For"] = *pff ~ ", " ~ req.peer;
			else creq.headers["X-Forwarded-For"] = req.peer;
			req.bodyReader.pipe(creq.bodyWriter);
		}

		void handleClientResponse(scope HTTPClientResponse cres)
		{
			import vibe.utils.string;

			// copy the response to the original requester
			res.statusCode = cres.statusCode;

			//handle protocol upgrades
			if (cres.statusCode == HTTPStatus.switchingProtocols && isUpgrade) {
				res.headers = cres.headers.dup;

				auto scon = res.switchProtocol("");
				auto ccon = cres.switchProtocol("");

				import vibe.core.core : runTask;
				runTask({ ccon.pipe(scon); });

				scon.pipe(ccon);
				return;
			}

			// special case for empty response bodies
			if ("Content-Length" !in cres.headers && "Transfer-Encoding" !in cres.headers || req.method == HTTPMethod.HEAD) {
				foreach (key, ref value; cres.headers)
					if (icmp2(key, "Connection") != 0)
						res.headers[key] = value;
				res.writeVoidBody();
				return;
			}

			// enforce compatibility with HTTP/1.0 clients that do not support chunked encoding
			// (Squid and some other proxies)
			if (res.httpVersion == HTTPVersion.HTTP_1_0 && ("Transfer-Encoding" in cres.headers || "Content-Length" !in cres.headers)) {
				// copy all headers that may pass from upstream to client
				foreach (n, ref v; cres.headers)
					if (n !in non_forward_headers_map)
						res.headers[n] = v;

				if ("Transfer-Encoding" in res.headers) res.headers.remove("Transfer-Encoding");
				auto content = cres.bodyReader.readAll(1024*1024);
				res.headers["Content-Length"] = to!string(content.length);
				if (res.isHeadResponse) res.writeVoidBody();
				else res.bodyWriter.write(content);
				return;
			}

			// to perform a verbatim copy of the client response
			if ("Content-Length" in cres.headers) {
				if ("Content-Encoding" in res.headers) res.headers.remove("Content-Encoding");
				foreach (key, ref value; cres.headers)
					if (icmp2(key, "Connection") != 0)
						res.headers[key] = value;
				auto size = cres.headers["Content-Length"].to!size_t();
				if (res.isHeadResponse) res.writeVoidBody();
				else cres.readRawBody((scope InterfaceProxy!InputStream reader) { res.writeRawBody(reader, size); });
				assert(res.headerWritten);
				return;
			}

			// fall back to a generic re-encoding of the response
			// copy all headers that may pass from upstream to client
			foreach (n, ref v; cres.headers)
				if (n !in non_forward_headers_map)
					res.headers[n] = v;
			if (res.isHeadResponse) res.writeVoidBody();
			else cres.bodyReader.pipe(res.bodyWriter);
		}

		try requestHTTP(url, &setupClientRequest, &handleClientResponse);
		catch (Exception e) {
			throw new HTTPStatusException(HTTPStatus.badGateway, "Connection to upstream server failed: "~e.msg);
		}
	}

	return &handleRequest;
}
/// Compatibility alias - will be deprecated soon
alias reverseProxyRequest = proxyRequest;

/**
	Returns a HTTP request handler that forwards any request to the specified host/port.
*/
HTTPServerRequestDelegateS reverseProxyRequest(string destination_host, ushort destination_port)
{
	URL url;
	url.schema = "http";
	url.host = destination_host;
	url.port = destination_port;
	auto settings = new HTTPProxySettings(ProxyMode.reverse);
	settings.destination = url;
	return proxyRequest(settings);
}

/// ditto
HTTPServerRequestDelegateS reverseProxyRequest(URL destination)
{
	auto settings = new HTTPProxySettings(ProxyMode.reverse);
	settings.destination = destination;
	return proxyRequest(settings);
}

/**
	Returns a HTTP request handler that forwards any request to the requested host/port.
*/
HTTPServerRequestDelegateS forwardProxyRequest() {
    return proxyRequest(new HTTPProxySettings(ProxyMode.forward));
}

/**
	Enum to represent the two modes a proxy can operate as.
*/
enum ProxyMode {forward, reverse}

/**
	Provides advanced configuration facilities for reverse proxy servers.
*/
final class HTTPProxySettings {
	/// Scheduled for deprecation - use `destination.host` instead.
	@property string destinationHost() const { return destination.host; }
	/// ditto
	@property void destinationHost(string host) { destination.host = host; }
	/// Scheduled for deprecation - use `destination.port` instead.
	@property ushort destinationPort() const { return destination.port; }
	/// ditto
	@property void destinationPort(ushort port) { destination.port = port; }

	/// The destination URL to forward requests to
	URL destination = URL("http", InetPath(""));
	/// The mode of the proxy i.e forward, reverse
	ProxyMode proxyMode;
	/// Avoids compressed transfers between proxy and destination hosts
	bool avoidCompressedRequests;
	/// Handle CONNECT requests for creating a tunnel to the destination host
	bool handleConnectRequests;

	/// Empty default constructor for backwards compatibility - will be deprecated soon.
	this() { }
	/// Explicitly sets the proxy mode.
	this(ProxyMode mode) { proxyMode = mode; }
}
/// Compatibility alias - will be deprecated soon.
alias HTTPReverseProxySettings = HTTPProxySettings;
vibe.d-0.8.2/http/vibe/http/router.d000066400000000000000000001057561324361747700172740ustar00rootroot00000000000000/**
	Pattern based URL router for HTTP request.

	See `URLRouter` for more details.

	Copyright: © 2012-2015 RejectedSoftware e.K.
	License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file.
	Authors: Sönke Ludwig
*/
module vibe.http.router;

public import vibe.http.server;

import vibe.core.log;

import std.functional;


/**
	Routes HTTP requests based on the request method and URL.

	Routes are matched using a special URL match string that supports two forms
	of placeholders. See the sections below for more details.

	Registered routes are matched according to the same sequence as initially
	specified using `match`, `get`, `post` etc. Matching ends as soon as a route
	handler writes a response using `res.writeBody()` or similar means. If no
	route matches or if no route handler writes a response, the router will
	simply not handle the request and the HTTP server will automatically
	generate a 404 error.

	Match_patterns:
		Match patterns are character sequences that can optionally contain
		placeholders or raw wildcards ("*"). Raw wild cards match any character
		sequence, while placeholders match only sequences containing no slash
		("/") characters.

		Placeholders are started using a colon (":") and are directly followed
		by their name. The first "/" character (or the end of the match string)
		denotes the end of the placeholder name. The part of the string that
		matches a placeholder will be stored in the `HTTPServerRequest.params`
		map using the placeholder name as the key.

		Match strings are subject to the following rules:
		$(UL
			$(LI A raw wildcard ("*") may only occur at the end of the match string)
			$(LI At least one character must be placed between any two placeholders or wildcards)
			$(LI The maximum allowed number of placeholders in a single match string is 64)
		)

	Match_String_Examples:
		$(UL
			$(LI `"/foo/bar"` matches only `"/foo/bar"` itself)
			$(LI `"/foo/*"` matches `"/foo/"`, `"/foo/bar"`, `"/foo/bar/baz"` or _any other string beginning with `"/foo/"`)
			$(LI `"/:x/"` matches `"/foo/"`, `"/bar/"` and similar strings (and stores `"foo"`/`"bar"` in `req.params["x"]`), but not `"/foo/bar/"`)
			$(LI Matching partial path entries with wildcards is possible: `"/foo:x"` matches `"/foo"`, `"/foobar"`, but not `"/foo/bar"`)
			$(LI Multiple placeholders and raw wildcards can be combined: `"/:x/:y/*"`)
		)
*/
final class URLRouter : HTTPServerRequestHandler {
	@safe:

	private {
		MatchTree!Route m_routes;
		string m_prefix;
		bool m_computeBasePath;
	}

	this(string prefix = null)
	{
		m_prefix = prefix;
	}

	/** Sets a common prefix for all registered routes.

		All routes will implicitly have this prefix prepended before being
		matched against incoming requests.
	*/
	@property string prefix() const { return m_prefix; }

	/** Controls the computation of the "routerRootDir" parameter.

		This parameter is available as `req.params["routerRootDir"]` and
		contains the relative path to the base path of the router. The base
		path is determined by the `prefix` property.

		Note that this feature currently is requires dynamic memory allocations
		and is opt-in for this reason.
	*/
	@property void enableRootDir(bool enable) { m_computeBasePath = enable; }

	/// Returns a single route handle to conveniently register multiple methods.
	URLRoute route(string path)
	in { assert(path.length, "Cannot register null or empty path!"); }
	body { return URLRoute(this, path); }

	///
	unittest {
		void getFoo(scope HTTPServerRequest req, scope HTTPServerResponse res) { /* ... */ }
		void postFoo(scope HTTPServerRequest req, scope HTTPServerResponse res) { /* ... */ }
		void deleteFoo(scope HTTPServerRequest req, scope HTTPServerResponse res) { /* ... */ }

		auto r = new URLRouter;

		// using 'with' statement
		with (r.route("/foo")) {
			get(&getFoo);
			post(&postFoo);
			delete_(&deleteFoo);
		}

		// using method chaining
		r.route("/foo")
			.get(&getFoo)
			.post(&postFoo)
			.delete_(&deleteFoo);

		// without using route()
		r.get("/foo", &getFoo);
		r.post("/foo", &postFoo);
		r.delete_("/foo", &deleteFoo);
	}

	/// Adds a new route for requests matching the specified HTTP method and pattern.
	URLRouter match(Handler)(HTTPMethod method, string path, Handler handler)
		if (isValidHandler!Handler)
	{
		import std.algorithm;
		assert(path.length, "Cannot register null or empty path!");
		assert(count(path, ':') <= maxRouteParameters, "Too many route parameters");
		logDebug("add route %s %s", method, path);
		m_routes.addTerminal(path, Route(method, path, handlerDelegate(handler)));
		return this;
	}

	/// ditto
	URLRouter match(HTTPMethod method, string path, HTTPServerRequestDelegate handler)
	{
		return match!HTTPServerRequestDelegate(method, path, handler);
	}

	/// Adds a new route for GET requests matching the specified pattern.
	URLRouter get(Handler)(string url_match, Handler handler) if (isValidHandler!Handler) { return match(HTTPMethod.GET, url_match, handler); }
	/// ditto
	URLRouter get(string url_match, HTTPServerRequestDelegate handler) { return match(HTTPMethod.GET, url_match, handler); }

	/// Adds a new route for POST requests matching the specified pattern.
	URLRouter post(Handler)(string url_match, Handler handler) if (isValidHandler!Handler) { return match(HTTPMethod.POST, url_match, handler); }
	/// ditto
	URLRouter post(string url_match, HTTPServerRequestDelegate handler) { return match(HTTPMethod.POST, url_match, handler); }

	/// Adds a new route for PUT requests matching the specified pattern.
	URLRouter put(Handler)(string url_match, Handler handler) if (isValidHandler!Handler) { return match(HTTPMethod.PUT, url_match, handler); }
	/// ditto
	URLRouter put(string url_match, HTTPServerRequestDelegate handler) { return match(HTTPMethod.PUT, url_match, handler); }

	/// Adds a new route for DELETE requests matching the specified pattern.
	URLRouter delete_(Handler)(string url_match, Handler handler) if (isValidHandler!Handler) { return match(HTTPMethod.DELETE, url_match, handler); }
	/// ditto
	URLRouter delete_(string url_match, HTTPServerRequestDelegate handler) { return match(HTTPMethod.DELETE, url_match, handler); }

	/// Adds a new route for PATCH requests matching the specified pattern.
	URLRouter patch(Handler)(string url_match, Handler handler) if (isValidHandler!Handler) { return match(HTTPMethod.PATCH, url_match, handler); }
	/// ditto
	URLRouter patch(string url_match, HTTPServerRequestDelegate handler) { return match(HTTPMethod.PATCH, url_match, handler); }

	/// Adds a new route for requests matching the specified pattern, regardless of their HTTP verb.
	URLRouter any(Handler)(string url_match, Handler handler)
	{
		import std.traits;
		static HTTPMethod[] all_methods = [EnumMembers!HTTPMethod];
		foreach(immutable method; all_methods)
			match(method, url_match, handler);

		return this;
	}
	/// ditto
	URLRouter any(string url_match, HTTPServerRequestDelegate handler) { return any!HTTPServerRequestDelegate(url_match, handler); }


	/** Rebuilds the internal matching structures to account for newly added routes.

		This should be used after a lot of routes have been added to the router, to
		force eager computation of the match structures. The alternative is to
		let the router lazily compute the structures when the first request happens,
		which can delay this request.
	*/
	void rebuild()
	{
		m_routes.rebuildGraph();
	}

	/// Handles a HTTP request by dispatching it to the registered route handlers.
	void handleRequest(HTTPServerRequest req, HTTPServerResponse res)
	{
		auto method = req.method;

		string calcBasePath()
		@safe {
			import vibe.inet.path;
			auto p = InetPath(prefix.length ? prefix : "/");
			p.endsWithSlash = true;
			return p.relativeToWeb(InetPath(req.path)).toString();
		}

		auto path = req.path;
		if (path.length < m_prefix.length || path[0 .. m_prefix.length] != m_prefix) return;
		path = path[m_prefix.length .. $];

		while (true) {
			bool done = m_routes.match(path, (ridx, scope values) @safe {
				auto r = () @trusted { return &m_routes.getTerminalData(ridx); } ();
				if (r.method != method) return false;

				logDebugV("route match: %s -> %s %s %s", req.path, r.method, r.pattern, values);
				foreach (i, v; values) req.params[m_routes.getTerminalVarNames(ridx)[i]] = v;
				if (m_computeBasePath) req.params["routerRootDir"] = calcBasePath();
				r.cb(req, res);
				return res.headerWritten;
			});
			if (done) return;

			if (method == HTTPMethod.HEAD) method = HTTPMethod.GET;
			else break;
		}

		logDebug("no route match: %s %s", req.method, req.requestURL);
	}

	/// Returns all registered routes as const AA
	const(Route)[] getAllRoutes()
	{
		auto routes = new Route[m_routes.terminalCount];
		foreach (i, ref r; routes)
			r = m_routes.getTerminalData(i);
		return routes;
	}

	template isValidHandler(Handler) {
		@system {
			alias USDel = void delegate(HTTPServerRequest, HTTPServerResponse) @system;
			alias USFun = void function(HTTPServerRequest, HTTPServerResponse) @system;
			alias USDelS = void delegate(scope HTTPServerRequest, scope HTTPServerResponse) @system;
			alias USFunS = void function(scope HTTPServerRequest, scope HTTPServerResponse) @system;
		}

		static if (
				is(Handler : HTTPServerRequestDelegate) ||
				is(Handler : HTTPServerRequestFunction) ||
				is(Handler : HTTPServerRequestHandler) ||
				is(Handler : HTTPServerRequestDelegateS) ||
				is(Handler : HTTPServerRequestFunctionS) ||
				is(Handler : HTTPServerRequestHandlerS)
			)
		{
			enum isValidHandler = true;
		} else static if (
				is(Handler : USDel) || is(Handler : USFun) ||
				is(Handler : USDelS) || is(Handler : USFunS)
			)
		{
			enum isValidHandler = true;
		} else {
			enum isValidHandler = false;
		}
	}

	static void delegate(HTTPServerRequest, HTTPServerResponse) @safe handlerDelegate(Handler)(Handler handler)
	{
		import std.traits : isFunctionPointer;
		static if (isFunctionPointer!Handler) return handlerDelegate(() @trusted { return toDelegate(handler); } ());
		else static if (is(Handler == class) || is(Handler == interface)) return &handler.handleRequest;
		else static if (__traits(compiles, () @safe { handler(HTTPServerRequest.init, HTTPServerResponse.init); } ())) return handler;
		else return (req, res) @trusted { handler(req, res); };
	}

	unittest {
		static assert(isValidHandler!HTTPServerRequestFunction);
		static assert(isValidHandler!HTTPServerRequestDelegate);
		static assert(isValidHandler!HTTPServerRequestHandler);
		static assert(isValidHandler!HTTPServerRequestFunctionS);
		static assert(isValidHandler!HTTPServerRequestDelegateS);
		static assert(isValidHandler!HTTPServerRequestHandlerS);
		static assert(isValidHandler!(void delegate(HTTPServerRequest req, HTTPServerResponse res) @system));
		static assert(isValidHandler!(void function(HTTPServerRequest req, HTTPServerResponse res) @system));
		static assert(isValidHandler!(void delegate(scope HTTPServerRequest req, scope HTTPServerResponse res) @system));
		static assert(isValidHandler!(void function(scope HTTPServerRequest req, scope HTTPServerResponse res) @system));
		static assert(!isValidHandler!(int delegate(HTTPServerRequest req, HTTPServerResponse res) @system));
		static assert(!isValidHandler!(int delegate(HTTPServerRequest req, HTTPServerResponse res) @safe));
		void test(H)(H h)
		{
			static assert(isValidHandler!H);
		}
		test((HTTPServerRequest req, HTTPServerResponse res) {});
	}
}

///
@safe unittest {
	import vibe.http.fileserver;

	void addGroup(HTTPServerRequest req, HTTPServerResponse res)
	{
		// Route variables are accessible via the params map
		logInfo("Getting group %s for user %s.", req.params["groupname"], req.params["username"]);
	}

	void deleteUser(HTTPServerRequest req, HTTPServerResponse res)
	{
		// ...
	}

	void auth(HTTPServerRequest req, HTTPServerResponse res)
	{
		// TODO: check req.session to see if a user is logged in and
		//       write an error page or throw an exception instead.
	}

	void setup()
	{
		auto router = new URLRouter;
		// Matches all GET requests for /users/*/groups/* and places
		// the place holders in req.params as 'username' and 'groupname'.
		router.get("/users/:username/groups/:groupname", &addGroup);

		// Matches all requests. This can be useful for authorization and
		// similar tasks. The auth method will only write a response if the
		// user is _not_ authorized. Otherwise, the router will fall through
		// and continue with the following routes.
		router.any("*", &auth);

		// Matches a POST request
		router.post("/users/:username/delete", &deleteUser);

		// Matches all GET requests in /static/ such as /static/img.png or
		// /static/styles/sty.css
		router.get("/static/*", serveStaticFiles("public/"));

		// Setup a HTTP server...
		auto settings = new HTTPServerSettings;
		// ...

		// The router can be directly passed to the listenHTTP function as
		// the main request handler.
		listenHTTP(settings, router);
	}
}

/** Using nested routers to map components to different sub paths. A component
	could for example be an embedded blog engine.
*/
@safe unittest {
	// some embedded component:

	void showComponentHome(HTTPServerRequest req, HTTPServerResponse res)
	{
		// ...
	}

	void showComponentUser(HTTPServerRequest req, HTTPServerResponse res)
	{
		// ...
	}

	void registerComponent(URLRouter router)
	{
		router.get("/", &showComponentHome);
		router.get("/users/:user", &showComponentUser);
	}

	// main application:

	void showHome(HTTPServerRequest req, HTTPServerResponse res)
	{
		// ...
	}

	void setup()
	{
		auto c1router = new URLRouter("/component1");
		registerComponent(c1router);

		auto mainrouter = new URLRouter;
		mainrouter.get("/", &showHome);
		// forward all unprocessed requests to the component router
		mainrouter.any("*", c1router);

		// now the following routes will be matched:
		// / -> showHome
		// /component1/ -> showComponentHome
		// /component1/users/:user -> showComponentUser

		// Start the HTTP server
		auto settings = new HTTPServerSettings;
		// ...
		listenHTTP(settings, mainrouter);
	}
}

@safe unittest { // issue #1668
	auto r = new URLRouter;
	r.get("/", (req, res) {
		if ("foo" in req.headers)
			res.writeBody("bar");
	});

	r.get("/", (scope req, scope res) {
		if ("foo" in req.headers)
			res.writeBody("bar");
	});
	r.get("/", (req, res) {});
	r.post("/", (req, res) {});
	r.put("/", (req, res) {});
	r.delete_("/", (req, res) {});
	r.patch("/", (req, res) {});
	r.any("/", (req, res) {});
}

@safe unittest { // issue #1866
	auto r = new URLRouter;
	r.match(HTTPMethod.HEAD, "/foo", (scope req, scope res) { res.writeVoidBody; });
	r.match(HTTPMethod.HEAD, "/foo", (req, res) { res.writeVoidBody; });
	r.match(HTTPMethod.HEAD, "/foo", (scope HTTPServerRequest req, scope HTTPServerResponse res) { res.writeVoidBody; });
	r.match(HTTPMethod.HEAD, "/foo", (HTTPServerRequest req, HTTPServerResponse res) { res.writeVoidBody; });

	auto r2 = new URLRouter;
	r.match(HTTPMethod.HEAD, "/foo", r2);
}

@safe unittest {
	import vibe.inet.url;

	auto router = new URLRouter;
	string result;
	void a(HTTPServerRequest req, HTTPServerResponse) { result ~= "A"; }
	void b(HTTPServerRequest req, HTTPServerResponse) { result ~= "B"; }
	void c(HTTPServerRequest req, HTTPServerResponse) { assert(req.params["test"] == "x", "Wrong variable contents: "~req.params["test"]); result ~= "C"; }
	void d(HTTPServerRequest req, HTTPServerResponse) { assert(req.params["test"] == "y", "Wrong variable contents: "~req.params["test"]); result ~= "D"; }
	router.get("/test", &a);
	router.post("/test", &b);
	router.get("/a/:test", &c);
	router.get("/a/:test/", &d);

	auto res = createTestHTTPServerResponse();
	router.handleRequest(createTestHTTPServerRequest(URL("http://localhost/")), res);
	assert(result == "", "Matched for non-existent / path");
	router.handleRequest(createTestHTTPServerRequest(URL("http://localhost/test")), res);
	assert(result == "A", "Didn't match a simple GET request");
	router.handleRequest(createTestHTTPServerRequest(URL("http://localhost/test"), HTTPMethod.POST), res);
	assert(result == "AB", "Didn't match a simple POST request");
	router.handleRequest(createTestHTTPServerRequest(URL("http://localhost/a/"), HTTPMethod.GET), res);
	assert(result == "AB", "Matched empty variable. "~result);
	router.handleRequest(createTestHTTPServerRequest(URL("http://localhost/a/x"), HTTPMethod.GET), res);
	assert(result == "ABC", "Didn't match a trailing 1-character var.");
	// currently fails due to Path not accepting "//"
	//router.handleRequest(createTestHTTPServerRequest(URL("http://localhost/a//"), HTTPMethod.GET), res);
	//assert(result == "ABC", "Matched empty string or slash as var. "~result);
	router.handleRequest(createTestHTTPServerRequest(URL("http://localhost/a/y/"), HTTPMethod.GET), res);
	assert(result == "ABCD", "Didn't match 1-character infix variable.");
}

@safe unittest {
	import vibe.inet.url;

	auto router = new URLRouter("/test");

	string result;
	void a(HTTPServerRequest req, HTTPServerResponse) { result ~= "A"; }
	void b(HTTPServerRequest req, HTTPServerResponse) { result ~= "B"; }
	router.get("/x", &a);
	router.get("/y", &b);

	auto res = createTestHTTPServerResponse();
	router.handleRequest(createTestHTTPServerRequest(URL("http://localhost/test")), res);
	assert(result == "");
	router.handleRequest(createTestHTTPServerRequest(URL("http://localhost/test/x")), res);
	assert(result == "A");
	router.handleRequest(createTestHTTPServerRequest(URL("http://localhost/test/y")), res);
	assert(result == "AB");
}

@safe unittest {
	string ensureMatch(string pattern, string local_uri, string[string] expected_params = null)
	{
		import vibe.inet.url : URL;
		string ret = local_uri ~ " did not match " ~ pattern;
		auto r = new URLRouter;
		r.get(pattern, (req, res) {
			ret = null;
			foreach (k, v; expected_params) {
				if (k !in req.params) { ret = "Parameter "~k~" was not matched."; return; }
				if (req.params[k] != v) { ret = "Parameter "~k~" is '"~req.params[k]~"' instead of '"~v~"'."; return; }
			}
		});
		auto req = createTestHTTPServerRequest(URL("http://localhost"~local_uri));
		auto res = createTestHTTPServerResponse();
		r.handleRequest(req, res);
		return ret;
	}

	assert(ensureMatch("/foo bar/", "/foo%20bar/") is null);   // normalized pattern: "/foo%20bar/"
	//assert(ensureMatch("/foo%20bar/", "/foo%20bar/") is null); // normalized pattern: "/foo%20bar/"
	assert(ensureMatch("/foo/bar/", "/foo/bar/") is null);     // normalized pattern: "/foo/bar/"
	//assert(ensureMatch("/foo/bar/", "/foo%2fbar/") !is null);
	//assert(ensureMatch("/foo%2fbar/", "/foo%2fbar/") is null); // normalized pattern: "/foo%2Fbar/"
	//assert(ensureMatch("/foo%2Fbar/", "/foo%2fbar/") is null); // normalized pattern: "/foo%2Fbar/"
	//assert(ensureMatch("/foo%2fbar/", "/foo%2Fbar/") is null);
	//assert(ensureMatch("/foo%2fbar/", "/foo/bar/") !is null);
	//assert(ensureMatch("/:foo/", "/foo%2Fbar/", ["foo": "foo/bar"]) is null);
	assert(ensureMatch("/:foo/", "/foo/bar/") !is null);
}


/**
	Convenience abstraction for a single `URLRouter` route.

	See `URLRouter.route` for a usage example.
*/
struct URLRoute {
@safe:

	URLRouter router;
	string path;

	ref URLRoute get(Handler)(Handler h) { router.get(path, h); return this; }
	ref URLRoute post(Handler)(Handler h) { router.post(path, h); return this; }
	ref URLRoute put(Handler)(Handler h) { router.put(path, h); return this; }
	ref URLRoute delete_(Handler)(Handler h) { router.delete_(path, h); return this; }
	ref URLRoute patch(Handler)(Handler h) { router.patch(path, h); return this; }
	ref URLRoute any(Handler)(Handler h) { router.any(path, h); return this; }
	ref URLRoute match(Handler)(HTTPMethod method, Handler h) { router.match(method, path, h); return this; }
}


private enum maxRouteParameters = 64;

private struct Route {
	HTTPMethod method;
	string pattern;
	HTTPServerRequestDelegate cb;
}

private string skipPathNode(string str, ref size_t idx)
@safe {
	size_t start = idx;
	while( idx < str.length && str[idx] != '/' ) idx++;
	return str[start .. idx];
}

private string skipPathNode(ref string str)
@safe {
	size_t idx = 0;
	auto ret = skipPathNode(str, idx);
	str = str[idx .. $];
	return ret;
}

private struct MatchTree(T) {
@safe:

	import std.algorithm : countUntil;
	import std.array : array;

	private {
		struct Node {
			size_t terminalsStart; // slice into m_terminalTags
			size_t terminalsEnd;
			uint[ubyte.max+1] edges = uint.max; // character -> index into m_nodes
		}
		struct TerminalTag {
			size_t index; // index into m_terminals array
			size_t var; // index into Terminal.varNames/varValues or size_t.max
		}
		struct Terminal {
			string pattern;
			T data;
			string[] varNames;
			size_t[size_t] varMap; // maps node index to variable index
		}
		Node[] m_nodes; // all nodes as a single array
		TerminalTag[] m_terminalTags;
		Terminal[] m_terminals;

		enum TerminalChar = 0;
		bool m_upToDate = false;
	}

	@property size_t terminalCount() const { return m_terminals.length; }

	void addTerminal(string pattern, T data)
	{
		m_terminals ~= Terminal(pattern, data, null, null);
		m_upToDate = false;
	}

	bool match(string text, scope bool delegate(size_t terminal, scope string[] vars) @safe del)
	{
		// lazily update the match graph
		if (!m_upToDate) rebuildGraph();

		return doMatch(text, del);
	}

	const(string)[] getTerminalVarNames(size_t terminal) const { return m_terminals[terminal].varNames; }
	ref inout(T) getTerminalData(size_t terminal) inout { return m_terminals[terminal].data; }

	void print()
	const {
		import std.algorithm : map;
		import std.array : join;
		import std.conv : to;
		import std.range : iota;
		import std.string : format;

		logInfo("Nodes:");
		foreach (i, n; m_nodes) {
			logInfo("  %s %s", i, m_terminalTags[n.terminalsStart .. n.terminalsEnd]
				.map!(t => format("T%s%s", t.index, t.var != size_t.max ? "("~m_terminals[t.index].varNames[t.var]~")" : "")).join(" "));
			//logInfo("  %s %s-%s", i, n.terminalsStart, n.terminalsEnd);


			static string mapChar(ubyte ch) {
				if (ch == TerminalChar) return "$";
				if (ch >= '0' && ch <= '9') return to!string(cast(dchar)ch);
				if (ch >= 'a' && ch <= 'z') return to!string(cast(dchar)ch);
				if (ch >= 'A' && ch <= 'Z') return to!string(cast(dchar)ch);
				if (ch == '/') return "/";
				if (ch == '^') return "^";
				return ch.to!string;
			}

			void printRange(uint node, ubyte from, ubyte to)
			{
				if (to - from <= 10) logInfo("    %s -> %s", iota(from, cast(uint)to+1).map!(ch => mapChar(cast(ubyte)ch)).join("|"), node);
				else logInfo("    %s-%s -> %s", mapChar(from), mapChar(to), node);
			}

			uint last_to = uint.max;
			ubyte last_ch = 0;
			foreach (ch, e; n.edges)
				if (e != last_to) {
					if (last_to != uint.max)
						printRange(last_to, last_ch, cast(ubyte)(ch-1));
					last_ch = cast(ubyte)ch;
					last_to = e;
				}
			if (last_to != uint.max)
				printRange(last_to, last_ch, ubyte.max);
		}
	}

	private bool doMatch(string text, scope bool delegate(size_t terminal, scope string[] vars) @safe del)
	const {
		string[maxRouteParameters] vars_buf;// = void;

		import std.algorithm : canFind;

		// first, determine the end node, if any
		auto n = matchTerminals(text);
		if (!n) return false;

		// then, go through the terminals and match their variables
		foreach (ref t; m_terminalTags[n.terminalsStart .. n.terminalsEnd]) {
			auto term = &m_terminals[t.index];
			auto vars = vars_buf[0 .. term.varNames.length];
			matchVars(vars, term, text);
			if (vars.canFind!(v => v.length == 0)) continue; // all variables must be non-empty to match
			if (del(t.index, vars)) return true;
		}
		return false;
	}

	private inout(Node)* matchTerminals(string text)
	inout {
		if (!m_nodes.length) return null;

		auto n = &m_nodes[0];

		// follow the path through the match graph
		foreach (i, char ch; text) {
			auto nidx = n.edges[cast(size_t)ch];
			if (nidx == uint.max) return null;
			n = &m_nodes[nidx];
		}

		// finally, find a matching terminal node
		auto nidx = n.edges[TerminalChar];
		if (nidx == uint.max) return null;
		n = &m_nodes[nidx];
		return n;
	}

	private void matchVars(string[] dst, in Terminal* term, string text)
	const {
		auto nidx = 0;
		size_t activevar = size_t.max;
		size_t activevarstart;

		dst[] = null;

		// folow the path throgh the match graph
		foreach (i, char ch; text) {
			auto var = term.varMap.get(nidx, size_t.max);

			// detect end of variable
			if (var != activevar && activevar != size_t.max) {
				dst[activevar] = text[activevarstart .. i-1];
				activevar = size_t.max;
			}

			// detect beginning of variable
			if (var != size_t.max && activevar == size_t.max) {
				activevar = var;
				activevarstart = i;
			}

			nidx = m_nodes[nidx].edges[cast(ubyte)ch];
			assert(nidx != uint.max);
		}

		// terminate any active varible with the end of the input string or with the last character
		auto var = term.varMap.get(nidx, size_t.max);
		if (activevar != size_t.max) dst[activevar] = text[activevarstart .. (var == activevar ? $ : $-1)];
	}

	private void rebuildGraph()
	{
		import std.array : appender;

		if (m_upToDate) return;
		m_upToDate = true;

		m_nodes = null;
		m_terminalTags = null;

		if (!m_terminals.length) return;

		MatchGraphBuilder builder;
		foreach (i, ref t; m_terminals)
			t.varNames = builder.insert(t.pattern, i);
		//builder.print();
		builder.disambiguate();

		auto nodemap = new uint[builder.m_nodes.length];
		nodemap[] = uint.max;

		auto nodes = appender!(Node[]);
		nodes.reserve(1024);

		uint process(size_t n)
		{
			import std.algorithm : canFind;

			if (nodemap[n] != uint.max) return nodemap[n];
			auto nmidx = cast(uint)nodes.data.length;
			nodemap[n] = nmidx;
			nodes.put(Node.init);

			Node nn;
			nn.terminalsStart = m_terminalTags.length;
			foreach (t; builder.m_nodes[n].terminals) {
				auto var = t.var.length ? m_terminals[t.index].varNames.countUntil(t.var) : size_t.max;
				assert(!m_terminalTags[nn.terminalsStart .. $].canFind!(u => u.index == t.index && u.var == var));
				m_terminalTags ~= TerminalTag(t.index, var);
				if (var != size_t.max)
					m_terminals[t.index].varMap[nmidx] = var;
			}
			nn.terminalsEnd = m_terminalTags.length;
			foreach (ch, targets; builder.m_nodes[n].edges)
				foreach (to; targets)
					nn.edges[ch] = process(to);

			nodes.data[nmidx] = nn;

			return nmidx;
		}
		assert(builder.m_nodes[0].edges['^'].length == 1, "Graph must be disambiguated before purging.");
		process(builder.m_nodes[0].edges['^'][0]);

		m_nodes = nodes.data;

		logDebug("Match tree has %s(%s) nodes, %s terminals", m_nodes.length, builder.m_nodes.length, m_terminals.length);
	}
}

unittest {
	import std.string : format;
	MatchTree!int m;

	void testMatch(string str, size_t[] terms, string[] vars)
	{
		size_t[] mterms;
		string[] mvars;
		m.match(str, (t, scope vals) {
			mterms ~= t;
			mvars ~= vals;
			return false;
		});
		assert(mterms == terms, format("Mismatched terminals: %s (expected %s)", mterms, terms));
		assert(mvars == vars, format("Mismatched variables; %s (expected %s)", mvars, vars));
	}

	m.addTerminal("a", 0);
	m.addTerminal("b", 0);
	m.addTerminal("ab", 0);
	m.rebuildGraph();
	assert(m.getTerminalVarNames(0) == []);
	assert(m.getTerminalVarNames(1) == []);
	assert(m.getTerminalVarNames(2) == []);
	testMatch("a", [0], []);
	testMatch("ab", [2], []);
	testMatch("abc", [], []);
	testMatch("b", [1], []);

	m = MatchTree!int.init;
	m.addTerminal("ab", 0);
	m.addTerminal("a*", 0);
	m.rebuildGraph();
	assert(m.getTerminalVarNames(0) == []);
	assert(m.getTerminalVarNames(1) == []);
	testMatch("a", [1], []);
	testMatch("ab", [0, 1], []);
	testMatch("abc", [1], []);

	m = MatchTree!int.init;
	m.addTerminal("ab", 0);
	m.addTerminal("a:var", 0);
	m.rebuildGraph();
	assert(m.getTerminalVarNames(0) == []);
	assert(m.getTerminalVarNames(1) == ["var"], format("%s", m.getTerminalVarNames(1)));
	testMatch("a", [], []); // vars may not be empty
	testMatch("ab", [0, 1], ["b"]);
	testMatch("abc", [1], ["bc"]);

	m = MatchTree!int.init;
	m.addTerminal(":var1/:var2", 0);
	m.addTerminal("a/:var3", 0);
	m.addTerminal(":var4/b", 0);
	m.rebuildGraph();
	assert(m.getTerminalVarNames(0) == ["var1", "var2"]);
	assert(m.getTerminalVarNames(1) == ["var3"]);
	assert(m.getTerminalVarNames(2) == ["var4"]);
	testMatch("a", [], []);
	testMatch("a/a", [0, 1], ["a", "a", "a"]);
	testMatch("a/b", [0, 1, 2], ["a", "b", "b", "a"]);
	testMatch("a/bc", [0, 1], ["a", "bc", "bc"]);
	testMatch("ab/b", [0, 2], ["ab", "b", "ab"]);
	testMatch("ab/bc", [0], ["ab", "bc"]);

	m = MatchTree!int.init;
	m.addTerminal(":var1/", 0);
	m.rebuildGraph();
	assert(m.getTerminalVarNames(0) == ["var1"]);
	testMatch("ab/", [0], ["ab"]);
	testMatch("ab", [], []);
	testMatch("/ab", [], []);
	testMatch("a/b", [], []);
	testMatch("ab//", [], []);
}


private struct MatchGraphBuilder {
@safe:

	import std.array : array;
	import std.algorithm : filter;
	import std.string : format;

	private {
		enum TerminalChar = 0;
		struct TerminalTag {
			size_t index;
			string var;
			bool opEquals(in ref TerminalTag other) const { return index == other.index && var == other.var; }
		}
		struct Node {
			size_t idx;
			TerminalTag[] terminals;
			size_t[][ubyte.max+1] edges;
		}
		Node[] m_nodes;
	}

	string[] insert(string pattern, size_t terminal)
	{
		import std.algorithm : canFind;

		auto full_pattern = pattern;
		string[] vars;
		if (!m_nodes.length) addNode();

		// create start node and connect to zero node
		auto nidx = addNode();
		addEdge(0, nidx, '^', terminal, null);

		while (pattern.length) {
			auto ch = pattern[0];
			if (ch == '*') {
				assert(pattern.length == 1, "Asterisk is only allowed at the end of a pattern: "~full_pattern);
				pattern = null;

				foreach (v; ubyte.min .. ubyte.max+1) {
					if (v == TerminalChar) continue;
					addEdge(nidx, nidx, cast(ubyte)v, terminal, null);
				}
			} else if (ch == ':') {
				pattern = pattern[1 .. $];
				auto name = skipPathNode(pattern);
				assert(name.length > 0, "Missing placeholder name: "~full_pattern);
				assert(!vars.canFind(name), "Duplicate placeholder name ':"~name~"': '"~full_pattern~"'");
				vars ~= name;
				assert(!pattern.length || (pattern[0] != '*' && pattern[0] != ':'),
					"Cannot have two placeholders directly follow each other.");

				foreach (v; ubyte.min .. ubyte.max+1) {
					if (v == TerminalChar || v == '/') continue;
					addEdge(nidx, nidx, cast(ubyte)v, terminal, name);
				}
			} else {
				nidx = addEdge(nidx, ch, terminal, null);
				pattern = pattern[1 .. $];
			}
		}

		addEdge(nidx, TerminalChar, terminal, null);
		return vars;
	}

	void disambiguate()
	{
		import std.algorithm : map, sum;
		import std.array : appender, join;

//logInfo("Disambiguate");
		if (!m_nodes.length) return;

		import vibe.utils.hashmap;
		HashMap!(size_t[], size_t) combined_nodes;
		auto visited = new bool[m_nodes.length * 2];
		Stack!size_t node_stack;
		node_stack.reserve(m_nodes.length);
		node_stack.push(0);
		while (!node_stack.empty) {
			auto n = node_stack.pop();

			while (n >= visited.length) visited.length = visited.length * 2;
			if (visited[n]) continue;
//logInfo("Disambiguate %s", n);
			visited[n] = true;

			foreach (ch_; ubyte.min .. ubyte.max+1) {
				ubyte ch = cast(ubyte)ch_;
				auto chnodes = m_nodes[n].edges[ch_];

				// handle trivial cases
				if (chnodes.length <= 1) continue;

				// generate combined state for ambiguous edges
				if (auto pn = () @trusted { return chnodes in combined_nodes; } ()) { m_nodes[n].edges[ch] = singleNodeArray(*pn); continue; }

				// for new combinations, create a new node
				size_t ncomb = addNode();
				combined_nodes[chnodes] = ncomb;

				// allocate memory for all edges combined
				size_t total_edge_count = 0;
				foreach (chn; chnodes) {
					Node* cn = &m_nodes[chn];
					foreach (edges; cn.edges)
						total_edge_count +=edges.length;
				}
				auto mem = new size_t[total_edge_count];

				// write all edges
				size_t idx = 0;
				foreach (to_ch; ubyte.min .. ubyte.max+1) {
					size_t start = idx;
					foreach (chn; chnodes) {
						auto edges = m_nodes[chn].edges[to_ch];
						mem[idx .. idx + edges.length] = edges;
						idx += edges.length;
					}
					m_nodes[ncomb].edges[to_ch] = mem[start .. idx];
				}

				// add terminal indices
				foreach (chn; chnodes) addToArray(m_nodes[ncomb].terminals, m_nodes[chn].terminals);
				foreach (i; 1 .. m_nodes[ncomb].terminals.length)
					assert(m_nodes[ncomb].terminals[0] != m_nodes[ncomb].terminals[i]);

				m_nodes[n].edges[ch] = singleNodeArray(ncomb);
			}

			// process nodes recursively
			foreach (ch; ubyte.min .. ubyte.max+1)
				node_stack.push(m_nodes[n].edges[ch]);
		}
		debug logDebug("Disambiguate done: %s nodes, %s max stack size", m_nodes.length, node_stack.maxSize);
	}

	void print()
	const {
		import std.algorithm : map;
		import std.array : join;
		import std.conv : to;
		import std.string : format;

		logInfo("Nodes:");
		foreach (i, n; m_nodes) {
			string mapChar(ubyte ch) {
				if (ch == TerminalChar) return "$";
				if (ch >= '0' && ch <= '9') return to!string(cast(dchar)ch);
				if (ch >= 'a' && ch <= 'z') return to!string(cast(dchar)ch);
				if (ch >= 'A' && ch <= 'Z') return to!string(cast(dchar)ch);
				if (ch == '/') return "/";
				return ch.to!string;
			}
			logInfo("  %s %s", i, n.terminals.map!(t => format("T%s%s", t.index, t.var.length ? "("~t.var~")" : "")).join(" "));
			foreach (ch, tnodes; n.edges)
				foreach (tn; tnodes)
					logInfo("    %s -> %s", mapChar(cast(ubyte)ch), tn);
		}
	}

	private void addEdge(size_t from, size_t to, ubyte ch, size_t terminal, string var)
	{
		auto e = &m_nodes[from].edges[ch];
		if (!(*e).length) *e = singleNodeArray(to);
		else *e ~= to;
		addTerminal(to, terminal, var);
	}

	private size_t addEdge(size_t from, ubyte ch, size_t terminal, string var)
	{
		import std.algorithm : canFind;
		import std.string : format;
		assert(!m_nodes[from].edges[ch].length > 0, format("%s is in %s", ch, m_nodes[from].edges));
		auto nidx = addNode();
		addEdge(from, nidx, ch, terminal, var);
		return nidx;
	}

	private void addTerminal(size_t node, size_t terminal, string var)
	{
		foreach (ref t; m_nodes[node].terminals) {
			if (t.index == terminal) {
				assert(t.var.length == 0 || t.var == var, "Ambiguous route var match!? '"~t.var~"' vs. '"~var~"'");
				t.var = var;
				return;
			}
		}
		m_nodes[node].terminals ~= TerminalTag(terminal, var);
	}

	private size_t addNode()
	{
		auto idx = m_nodes.length;
		m_nodes ~= Node(idx, null, null);
		return idx;
	}

	private size_t[] singleNodeArray(size_t node)
	@trusted {
		return (&m_nodes[node].idx)[0 .. 1];
	}

	private static addToArray(T)(ref T[] arr, T[] elems) { foreach (e; elems) addToArray(arr, e); }
	private static addToArray(T)(ref T[] arr, T elem)
	{
		import std.algorithm : canFind;
		if (!arr.canFind(elem)) arr ~= elem;
	}
}

private struct Stack(E)
{
	private {
		E[] m_storage;
		size_t m_fill;
		debug size_t m_maxFill;
	}

	@property bool empty() const { return m_fill == 0; }

	debug @property size_t maxSize() const { return m_maxFill; }

	void reserve(size_t amt)
	{
		auto minsz = m_fill + amt;
		if (m_storage.length < minsz) {
			auto newlength = 64;
			while (newlength < minsz) newlength *= 2;
			m_storage.length = newlength;
		}
	}

	void push(E el)
	{
		reserve(1);
		m_storage[m_fill++] = el;
		debug if (m_fill > m_maxFill) m_maxFill = m_fill;
	}

	void push(E[] els)
	{
		reserve(els.length);
		foreach (el; els)
			m_storage[m_fill++] = el;
		debug if (m_fill > m_maxFill) m_maxFill = m_fill;
	}

	E pop()
	{
		assert(!empty, "Stack underflow.");
		return m_storage[--m_fill];
	}
}
vibe.d-0.8.2/http/vibe/http/server.d000066400000000000000000002273241324361747700172560ustar00rootroot00000000000000/**
	A HTTP 1.1/1.0 server implementation.

	Copyright: © 2012-2017 RejectedSoftware e.K.
	License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file.
	Authors: Sönke Ludwig, Jan Krüger, Ilya Shipunov
*/
module vibe.http.server;

public import vibe.core.net;
public import vibe.http.common;
public import vibe.http.session;

import vibe.core.file;
import vibe.core.log;
import vibe.data.json;
import vibe.http.dist;
import vibe.http.log;
import vibe.inet.message;
import vibe.inet.url;
import vibe.inet.webform;
import vibe.internal.interfaceproxy : InterfaceProxy;
import vibe.stream.counting;
import vibe.stream.operations;
import vibe.stream.tls;
import vibe.stream.wrapper : ConnectionProxyStream, createConnectionProxyStream, createConnectionProxyStreamFL;
import vibe.stream.zlib;
import vibe.textfilter.urlencode;
import vibe.utils.array;
import vibe.internal.allocator;
import vibe.internal.freelistref;
import vibe.utils.string;

import core.atomic;
import core.vararg;
import std.algorithm : canFind;
import std.array;
import std.conv;
import std.datetime;
import std.encoding : sanitize;
import std.exception;
import std.format;
import std.functional : toDelegate;
import std.string;
import std.traits : ReturnType;
import std.typecons;
import std.uri;


version (VibeNoSSL) version = HaveNoTLS;
else version (Have_botan) {}
else version (Have_openssl) {}
else version = HaveNoTLS;

/**************************************************************************************************/
/* Public functions                                                                               */
/**************************************************************************************************/

/**
	Starts a HTTP server listening on the specified port.

	request_handler will be called for each HTTP request that is made. The
	res parameter of the callback then has to be filled with the response
	data.

	request_handler can be either HTTPServerRequestDelegate/HTTPServerRequestFunction
	or a class/struct with a member function 'handleRequest' that has the same
	signature.

	Note that if the application has been started with the --disthost command line
	switch, listenHTTP() will automatically listen on the specified VibeDist host
	instead of locally. This allows for a seamless switch from single-host to
	multi-host scenarios without changing the code. If you need to listen locally,
	use listenHTTPPlain() instead.

	Params:
		settings = Customizes the HTTP servers functionality (host string or HTTPServerSettings object)
		request_handler = This callback is invoked for each incoming request and is responsible
			for generating the response.

	Returns:
		A handle is returned that can be used to stop listening for further HTTP
		requests with the supplied settings. Another call to `listenHTTP` can be
		used afterwards to start listening again.
*/
HTTPListener listenHTTP(Settings)(Settings _settings, HTTPServerRequestDelegate request_handler)
@safe
if (is(Settings == string) || is(Settings == HTTPServerSettings)) {
	// auto-construct HTTPServerSettings
	static if (is(Settings == string))
		auto settings = new HTTPServerSettings(_settings);
	else
		alias settings = _settings;

	enforce(settings.bindAddresses.length, "Must provide at least one bind address for a HTTP server.");

	// if a VibeDist host was specified on the command line, register there instead of listening
	// directly.
	if (s_distHost.length && !settings.disableDistHost) {
		return listenHTTPDist(settings, request_handler, s_distHost, s_distPort);
	} else {
		return listenHTTPPlain(settings, request_handler);
	}
}
/// ditto
HTTPListener listenHTTP(Settings)(Settings settings, HTTPServerRequestFunction request_handler)
@safe
if (is(Settings == string) || is(Settings == HTTPServerSettings)) {
	return listenHTTP(settings, () @trusted { return toDelegate(request_handler); } ());
}
/// ditto
HTTPListener listenHTTP(Settings)(Settings settings, HTTPServerRequestHandler request_handler)
@safe
if (is(Settings == string) || is(Settings == HTTPServerSettings)) {
	return listenHTTP(settings, &request_handler.handleRequest);
}
/// ditto
HTTPListener listenHTTP(Settings)(Settings settings, HTTPServerRequestDelegateS request_handler)
@safe
if (is(Settings == string) || is(Settings == HTTPServerSettings)) {
	return listenHTTP(settings, cast(HTTPServerRequestDelegate)request_handler);
}
/// ditto
HTTPListener listenHTTP(Settings)(Settings settings, HTTPServerRequestFunctionS request_handler)
@safe
if (is(Settings == string) || is(Settings == HTTPServerSettings)) {
	return listenHTTP(settings, () @trusted { return toDelegate(request_handler); } ());
}
/// ditto
HTTPListener listenHTTP(Settings)(Settings settings, HTTPServerRequestHandlerS request_handler)
@safe
if (is(Settings == string) || is(Settings == HTTPServerSettings)) {
	return listenHTTP(settings, &request_handler.handleRequest);
}

/// Scheduled for deprecation - use a `@safe` callback instead.
HTTPListener listenHTTP(Settings)(Settings settings, void delegate(HTTPServerRequest, HTTPServerResponse) @system request_handler)
@system
if (is(Settings == string) || is(Settings == HTTPServerSettings)) {
	return listenHTTP(settings, (req, res) @trusted => request_handler(req, res));
}
/// ditto
HTTPListener listenHTTP(Settings)(Settings settings, void function(HTTPServerRequest, HTTPServerResponse) @system request_handler)
@system
if (is(Settings == string) || is(Settings == HTTPServerSettings)) {
	return listenHTTP(settings, (req, res) @trusted => request_handler(req, res));
}
/// ditto
HTTPListener listenHTTP(Settings)(Settings settings, void delegate(scope HTTPServerRequest, scope HTTPServerResponse) @system request_handler)
@system
if (is(Settings == string) || is(Settings == HTTPServerSettings)) {
	return listenHTTP(settings, (scope req, scope res) @trusted => request_handler(req, res));
}
/// ditto
HTTPListener listenHTTP(Settings)(Settings settings, void function(scope HTTPServerRequest, scope HTTPServerResponse) @system request_handler)
@system
if (is(Settings == string) || is(Settings == HTTPServerSettings)) {
	return listenHTTP(settings, (scope req, scope res) @trusted => request_handler(req, res));
}

unittest
{
	void test()
	{
		static void testSafeFunction(HTTPServerRequest req, HTTPServerResponse res) @safe {}
		listenHTTP("0.0.0.0:8080", &testSafeFunction);
		listenHTTP(":8080", new class HTTPServerRequestHandler {
			void handleRequest(HTTPServerRequest req, HTTPServerResponse res) @safe {}
		});
		listenHTTP(":8080", (req, res) {});

		static void testSafeFunctionS(scope HTTPServerRequest req, scope HTTPServerResponse res) @safe {}
		listenHTTP(":8080", &testSafeFunctionS);
		void testSafeDelegateS(scope HTTPServerRequest req, scope HTTPServerResponse res) @safe {}
		listenHTTP(":8080", &testSafeDelegateS);
		listenHTTP(":8080", new class HTTPServerRequestHandler {
			void handleRequest(scope HTTPServerRequest req, scope HTTPServerResponse res) @safe {}
		});
		listenHTTP(":8080", (scope req, scope res) {});
	}
}


/** Treats an existing connection as an HTTP connection and processes incoming
	requests.

	After all requests have been processed, the connection will be closed and
	the function returns to the caller.

	Params:
		connections = The stream to treat as an incoming HTTP client connection.
		context = Information about the incoming listener and available
			virtual hosts
*/
void handleHTTPConnection(TCPConnection connection, HTTPServerContext context)
@safe {
	InterfaceProxy!Stream http_stream;
	http_stream = connection;

	scope (exit) connection.close();

	// Set NODELAY to true, to avoid delays caused by sending the response
	// header and body in separate chunks. Note that to avoid other performance
	// issues (caused by tiny packets), this requires using an output buffer in
	// the event driver, which is the case at least for the default libevent
	// based driver.
	connection.tcpNoDelay = true;

	version(HaveNoTLS) {} else {
		TLSStreamType tls_stream;
	}

	if (!connection.waitForData(10.seconds())) {
		logDebug("Client didn't send the initial request in a timely manner. Closing connection.");
		return;
	}

	// If this is a HTTPS server, initiate TLS
	if (context.tlsContext) {
		version (HaveNoTLS) assert(false, "No TLS support compiled in.");
		else {
			logDebug("Accept TLS connection: %s", context.tlsContext.kind);
			// TODO: reverse DNS lookup for peer_name of the incoming connection for TLS client certificate verification purposes
			tls_stream = createTLSStreamFL(http_stream, context.tlsContext, TLSStreamState.accepting, null, connection.remoteAddress);
			http_stream = tls_stream;
		}
	}

	while (!connection.empty) {
		HTTPServerSettings settings;
		bool keep_alive;

		() @trusted {
			import vibe.internal.utilallocator: RegionListAllocator;

			version (VibeManualMemoryManagement)
				scope request_allocator = new RegionListAllocator!(shared(Mallocator), false)(1024, Mallocator.instance);
			else
				scope request_allocator = new RegionListAllocator!(shared(GCAllocator), true)(1024, GCAllocator.instance);

			handleRequest(http_stream, connection, context, settings, keep_alive, request_allocator);
		} ();
		if (!keep_alive) { logTrace("No keep-alive - disconnecting client."); break; }

		logTrace("Waiting for next request...");
		// wait for another possible request on a keep-alive connection
		if (!connection.waitForData(settings.keepAliveTimeout)) {
			if (!connection.connected) logTrace("Client disconnected.");
			else logDebug("Keep-alive connection timed out!");
			break;
		}
	}

	logTrace("Done handling connection.");
}


/**
	Provides a HTTP request handler that responds with a static Diet template.
*/
@property HTTPServerRequestDelegateS staticTemplate(string template_file)()
{
	return (scope HTTPServerRequest req, scope HTTPServerResponse res){
		res.render!(template_file, req);
	};
}

/**
	Provides a HTTP request handler that responds with a static redirection to the specified URL.

	Params:
		url = The URL to redirect to
		status = Redirection status to use $(LPAREN)by default this is $(D HTTPStatus.found)$(RPAREN).

	Returns:
		Returns a $(D HTTPServerRequestDelegate) that performs the redirect
*/
HTTPServerRequestDelegate staticRedirect(string url, HTTPStatus status = HTTPStatus.found)
@safe {
	return (HTTPServerRequest req, HTTPServerResponse res){
		res.redirect(url, status);
	};
}
/// ditto
HTTPServerRequestDelegate staticRedirect(URL url, HTTPStatus status = HTTPStatus.found)
@safe {
	return (HTTPServerRequest req, HTTPServerResponse res){
		res.redirect(url, status);
	};
}

///
unittest {
	import vibe.http.router;

	void test()
	{
		auto router = new URLRouter;
		router.get("/old_url", staticRedirect("http://example.org/new_url", HTTPStatus.movedPermanently));

		listenHTTP(new HTTPServerSettings, router);
	}
}


/**
	Sets a VibeDist host to register with.
*/
void setVibeDistHost(string host, ushort port)
@safe {
	s_distHost = host;
	s_distPort = port;
}


/**
	Renders the given Diet template and makes all ALIASES available to the template.

	You can call this function as a pseudo-member of `HTTPServerResponse` using
	D's uniform function call syntax.

	See_also: `diet.html.compileHTMLDietFile`

	Examples:
		---
		string title = "Hello, World!";
		int pageNumber = 1;
		res.render!("mytemplate.dt", title, pageNumber);
		---
*/
@property void render(string template_file, ALIASES...)(HTTPServerResponse res)
{
	res.contentType = "text/html; charset=UTF-8";
	version (VibeUseOldDiet)
		pragma(msg, "VibeUseOldDiet is not supported anymore. Please undefine in the package recipe.");
	import vibe.stream.wrapper : streamOutputRange;
	import diet.html : compileHTMLDietFile;
	auto output = streamOutputRange!1024(res.bodyWriter);
	compileHTMLDietFile!(template_file, ALIASES, DefaultDietFilters)(output);
}

version (Have_diet_ng)
{
	import diet.traits;

	/**
		Provides the default `css`, `javascript`, `markdown` and `htmlescape` filters
	 */
	@dietTraits
	struct DefaultDietFilters {
		import diet.html : HTMLOutputStyle;
		import std.string : splitLines;

		version (VibeOutputCompactHTML) enum HTMLOutputStyle htmlOutputStyle = HTMLOutputStyle.compact;
		else enum HTMLOutputStyle htmlOutputStyle = HTMLOutputStyle.pretty;

		static string filterCss(I)(I text, size_t indent = 0)
		{
			auto lines = splitLines(text);

			string indent_string = "\n";
			while (indent-- > 0) indent_string ~= '\t';

			string ret = indent_string~"";

			return ret;
		}


		static string filterJavascript(I)(I text, size_t indent = 0)
		{
			auto lines = splitLines(text);

			string indent_string = "\n";
			while (indent-- > 0) indent_string ~= '\t';

			string ret = indent_string~"";

			return ret;
		}

		static string filterMarkdown(I)(I text)
		{
			import vibe.textfilter.markdown : markdown = filterMarkdown;
			// TODO: indent
			return markdown(text);
		}

		static string filterHtmlescape(I)(I text)
		{
			import vibe.textfilter.html : htmlEscape;
			// TODO: indent
			return htmlEscape(text);
		}

		static this()
		{
			filters["css"] = (input, scope output) { output(filterCss(input)); };
			filters["javascript"] = (input, scope output) { output(filterJavascript(input)); };
			filters["markdown"] = (input, scope output) { output(filterMarkdown(() @trusted { return cast(string)input; } ())); };
			filters["htmlescape"] = (input, scope output) { output(filterHtmlescape(input)); };
		}

		static SafeFilterCallback[string] filters;
	}


	unittest {
		static string compile(string diet)() {
			import std.array : appender;
			import std.string : strip;
			import diet.html : compileHTMLDietString;
			auto dst = appender!string;
			dst.compileHTMLDietString!(diet, DefaultDietFilters);
			return strip(cast(string)(dst.data));
		}

		assert(compile!":css .test" == "");
		assert(compile!":javascript test();" == "");
		assert(compile!":markdown **test**" == "

test\n

"); assert(compile!":htmlescape " == "<test>"); assert(compile!":css !{\".test\"}" == ""); assert(compile!":javascript !{\"test();\"}" == ""); assert(compile!":markdown !{\"**test**\"}" == "

test\n

"); assert(compile!":htmlescape !{\"\"}" == "<test>"); assert(compile!":javascript\n\ttest();" == ""); } } /** Creates a HTTPServerRequest suitable for writing unit tests. */ HTTPServerRequest createTestHTTPServerRequest(URL url, HTTPMethod method = HTTPMethod.GET, InputStream data = null) @safe { InetHeaderMap headers; return createTestHTTPServerRequest(url, method, headers, data); } /// ditto HTTPServerRequest createTestHTTPServerRequest(URL url, HTTPMethod method, InetHeaderMap headers, InputStream data = null) @safe { auto tls = url.schema == "https"; auto ret = new HTTPServerRequest(Clock.currTime(UTC()), url.port ? url.port : tls ? 443 : 80); ret.requestPath = url.path; ret.queryString = url.queryString; ret.username = url.username; ret.password = url.password; ret.requestURI = url.localURI; ret.method = method; ret.tls = tls; ret.headers = headers; ret.bodyReader = data; return ret; } /** Creates a HTTPServerResponse suitable for writing unit tests. */ HTTPServerResponse createTestHTTPServerResponse(OutputStream data_sink = null, SessionStore session_store = null) @safe { import vibe.stream.wrapper; HTTPServerSettings settings; if (session_store) { settings = new HTTPServerSettings; settings.sessionStore = session_store; } if (!data_sink) data_sink = new NullOutputStream; auto stream = createProxyStream(Stream.init, data_sink); auto ret = new HTTPServerResponse(stream, null, settings, () @trusted { return vibeThreadAllocator(); } ()); return ret; } /**************************************************************************************************/ /* Public types */ /**************************************************************************************************/ /// Delegate based request handler alias HTTPServerRequestDelegate = void delegate(HTTPServerRequest req, HTTPServerResponse res) @safe; /// Static function based request handler alias HTTPServerRequestFunction = void function(HTTPServerRequest req, HTTPServerResponse res) @safe; /// Interface for class based request handlers interface HTTPServerRequestHandler { /// Handles incoming HTTP requests void handleRequest(HTTPServerRequest req, HTTPServerResponse res) @safe ; } /// Delegate based request handler with scoped parameters alias HTTPServerRequestDelegateS = void delegate(scope HTTPServerRequest req, scope HTTPServerResponse res) @safe; /// Static function based request handler with scoped parameters alias HTTPServerRequestFunctionS = void function(scope HTTPServerRequest req, scope HTTPServerResponse res) @safe; /// Interface for class based request handlers with scoped parameters interface HTTPServerRequestHandlerS { /// Handles incoming HTTP requests void handleRequest(scope HTTPServerRequest req, scope HTTPServerResponse res) @safe; } unittest { static assert(is(HTTPServerRequestDelegateS : HTTPServerRequestDelegate)); static assert(is(HTTPServerRequestFunctionS : HTTPServerRequestFunction)); } /// Aggregates all information about an HTTP error status. final class HTTPServerErrorInfo { /// The HTTP status code int code; /// The error message string message; /// Extended error message with debug information such as a stack trace string debugMessage; /// The error exception, if any Throwable exception; } /// Delegate type used for user defined error page generator callbacks. alias HTTPServerErrorPageHandler = void delegate(HTTPServerRequest req, HTTPServerResponse res, HTTPServerErrorInfo error) @safe; /** Specifies optional features of the HTTP server. Disabling unneeded features can speed up the server or reduce its memory usage. Note that the options `parseFormBody`, `parseJsonBody` and `parseMultiPartBody` will also drain the `HTTPServerRequest.bodyReader` stream whenever a request body with form or JSON data is encountered. */ enum HTTPServerOption { none = 0, /// Deprecated: Fills the `.path` and `.queryString` fields in the request parseURL = 1<<0, /// Deprecated: Fills the `.query` field in the request parseQueryString = 1<<1 | parseURL, /// Deprecated: Fills the `.form` field in the request parseFormBody = 1<<2, /// Deprecated: Fills the `.json` field in the request parseJsonBody = 1<<3, /// Deprecated: Fills the `.files` field of the request for "multipart/mixed" requests parseMultiPartBody = 1<<4, /// Deprecated: Fills the `.cookies` field in the request parseCookies = 1<<5, /** Deprecated: Distributes request processing among worker threads Note that this functionality assumes that the request handler is implemented in a thread-safe way. However, the D type system is bypassed, so that no static verification takes place. For this reason, it is recommended to instead use `vibe.core.core.runWorkerTaskDist` and call `listenHTTP` from each task/thread individually. If the `reusePort` option is set, then all threads will be able to listen on the same port, with the operating system distributing the incoming connections. If possible, instead of threads, the use of separate processes is more robust and often faster. The `reusePort` option works the same way in this scenario. */ distribute = 1<<6, /** Enables stack traces (`HTTPServerErrorInfo.debugMessage`). Note that generating the stack traces are generally a costly operation that should usually be avoided in production environments. It can also reveal internal information about the application, such as function addresses, which can help an attacker to abuse possible security holes. */ errorStackTraces = 1<<7, /// Enable port reuse in `listenTCP()` reusePort = 1<<8, /** The default set of options. Includes all parsing options, as well as the `errorStackTraces` option if the code is compiled in debug mode. */ defaults = parseURL | parseQueryString | parseFormBody | parseJsonBody | parseMultiPartBody | parseCookies | () { debug return errorStackTraces; else return none; } (), /// deprecated None = none, /// deprecated ParseURL = parseURL, /// deprecated ParseQueryString = parseQueryString, /// deprecated ParseFormBody = parseFormBody, /// deprecated ParseJsonBody = parseJsonBody, /// deprecated ParseMultiPartBody = parseMultiPartBody, /// deprecated ParseCookies = parseCookies } /** Contains all settings for configuring a basic HTTP server. The defaults are sufficient for most normal uses. */ final class HTTPServerSettings { /** The port on which the HTTP server is listening. The default value is 80. If you are running a TLS enabled server you may want to set this to 443 instead. Using a value of `0` instructs the server to use any available port on the given `bindAddresses` the actual addresses and ports can then be queried with `TCPListener.bindAddresses`. */ ushort port = 80; /** The interfaces on which the HTTP server is listening. By default, the server will listen on all IPv4 and IPv6 interfaces. */ string[] bindAddresses = ["::", "0.0.0.0"]; /** Determines the server host name. If multiple servers are listening on the same port, the host name will determine which one gets a request. */ string hostName; /** Configures optional features of the HTTP server Disabling unneeded features can improve performance or reduce the server load in case of invalid or unwanted requests (DoS). By default, HTTPServerOption.defaults is used. */ HTTPServerOption options = HTTPServerOption.defaults; /** Time of a request after which the connection is closed with an error; not supported yet The default limit of 0 means that the request time is not limited. */ Duration maxRequestTime = 0.seconds; /** Maximum time between two request on a keep-alive connection The default value is 10 seconds. */ Duration keepAliveTimeout = 10.seconds; /// Maximum number of transferred bytes per request after which the connection is closed with /// an error ulong maxRequestSize = 2097152; /// Maximum number of transferred bytes for the request header. This includes the request line /// the url and all headers. ulong maxRequestHeaderSize = 8192; /// Sets a custom handler for displaying error pages for HTTP errors @property HTTPServerErrorPageHandler errorPageHandler() @safe { return errorPageHandler_; } /// ditto @property void errorPageHandler(HTTPServerErrorPageHandler del) @safe { errorPageHandler_ = del; } /// Scheduled for deprecation - use a `@safe` callback instead. @property void errorPageHandler(void delegate(HTTPServerRequest, HTTPServerResponse, HTTPServerErrorInfo) @system del) @system { this.errorPageHandler = (req, res, err) @trusted { del(req, res, err); }; } private HTTPServerErrorPageHandler errorPageHandler_ = null; /// If set, a HTTPS server will be started instead of plain HTTP. TLSContext tlsContext; /// Session management is enabled if a session store instance is provided SessionStore sessionStore; string sessionIdCookie = "vibe.session_id"; /// import vibe.core.core : vibeVersionString; string serverString = "vibe.d/" ~ vibeVersionString; /** Specifies the format used for the access log. The log format is given using the Apache server syntax. By default NCSA combined is used. --- "%h - %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-Agent}i\"" --- */ string accessLogFormat = "%h - %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-Agent}i\""; /// Spefifies the name of a file to which access log messages are appended. string accessLogFile = ""; /// If set, access log entries will be output to the console. bool accessLogToConsole = false; /** Specifies a custom access logger instance. */ HTTPLogger accessLogger; /// Returns a duplicate of the settings object. @property HTTPServerSettings dup() @safe { auto ret = new HTTPServerSettings; foreach (mem; __traits(allMembers, HTTPServerSettings)) { static if (mem == "sslContext") {} else static if (mem == "bindAddresses") ret.bindAddresses = bindAddresses.dup; else static if (__traits(compiles, __traits(getMember, ret, mem) = __traits(getMember, this, mem))) __traits(getMember, ret, mem) = __traits(getMember, this, mem); } return ret; } /// Disable support for VibeDist and instead start listening immediately. bool disableDistHost = false; /** Responds to "Accept-Encoding" by using compression if possible. Compression can also be manually enabled by setting the "Content-Encoding" header of the HTTP response appropriately before sending the response body. This setting is disabled by default. Also note that there are still some known issues with the GZIP compression code. */ bool useCompressionIfPossible = false; /** Interval between WebSocket ping frames. The default value is 60 seconds; set to Duration.zero to disable pings. */ Duration webSocketPingInterval = 60.seconds; /** Constructs a new settings object with default values. */ this() @safe {} /** Constructs a new settings object with a custom bind interface and/or port. The syntax of `bind_string` is `[][:]`, where either of the two parts can be left off. IPv6 addresses must be enclosed in square brackets, as they would within a URL. Throws: An exception is thrown if `bind_string` is malformed. */ this(string bind_string) @safe { this(); if (bind_string.startsWith('[')) { auto idx = bind_string.indexOf(']'); enforce(idx > 0, "Missing closing bracket for IPv6 address."); bindAddresses = [bind_string[1 .. idx]]; bind_string = bind_string[idx+1 .. $]; enforce(bind_string.length == 0 || bind_string.startsWith(':'), "Only a colon may follow the IPv6 address."); } auto idx = bind_string.indexOf(':'); if (idx < 0) { if (bind_string.length > 0) bindAddresses = [bind_string]; } else { if (idx > 0) bindAddresses = [bind_string[0 .. idx]]; port = bind_string[idx+1 .. $].to!ushort; } } /// unittest { auto s = new HTTPServerSettings(":8080"); assert(s.bindAddresses == ["::", "0.0.0.0"]); // default bind addresses assert(s.port == 8080); s = new HTTPServerSettings("123.123.123.123"); assert(s.bindAddresses == ["123.123.123.123"]); assert(s.port == 80); s = new HTTPServerSettings("[::1]:443"); assert(s.bindAddresses == ["::1"]); assert(s.port == 443); } } /** Options altering how sessions are created. Multiple values can be or'ed together. See_Also: HTTPServerResponse.startSession */ enum SessionOption { /// No options. none = 0, /** Instructs the browser to disallow accessing the session ID from JavaScript. See_Also: Cookie.httpOnly */ httpOnly = 1<<0, /** Instructs the browser to disallow sending the session ID over unencrypted connections. By default, the type of the connection on which the session is started will be used to determine if secure or noSecure is used. See_Also: noSecure, Cookie.secure */ secure = 1<<1, /** Instructs the browser to allow sending the session ID over unencrypted connections. By default, the type of the connection on which the session is started will be used to determine if secure or noSecure is used. See_Also: secure, Cookie.secure */ noSecure = 1<<2 } /** Represents a HTTP request as received by the server side. */ final class HTTPServerRequest : HTTPRequest { private { SysTime m_timeCreated; HTTPServerSettings m_settings; ushort m_port; string m_peer; } public { /// The IP address of the client @property string peer() @safe nothrow { if (!m_peer) { version (Have_vibe_core) {} else scope (failure) assert(false); // store the IP address (IPv4 addresses forwarded over IPv6 are stored in IPv4 format) auto peer_address_string = this.clientAddress.toString(); if (peer_address_string.startsWith("::ffff:") && peer_address_string[7 .. $].indexOf(':') < 0) m_peer = peer_address_string[7 .. $]; else m_peer = peer_address_string; } return m_peer; } /// ditto NetworkAddress clientAddress; /// Determines if the request should be logged to the access log file. bool noLog; /// Determines if the request was issued over an TLS encrypted channel. bool tls; /** Information about the TLS certificate provided by the client. Remarks: This field is only set if `tls` is true, and the peer presented a client certificate. */ TLSCertificateInformation clientCertificate; /** Deprecated: The _path part of the URL. Note that this function contains the decoded version of the requested path, which can yield incorrect results if the path contains URL encoded path separators. Use `requestPath` instead to get an encoding-aware representation. */ string path() @safe { if (_path.isNull) { _path = urlDecode(requestPath.toString); } return _path.get; } private Nullable!string _path; /** The path part of the requested URI. */ InetPath requestPath; /** The user name part of the URL, if present. */ string username; /** The _password part of the URL, if present. */ string password; /** The _query string part of the URL. */ string queryString; /** Contains the list of _cookies that are stored on the client. Note that the a single cookie name may occur multiple times if multiple cookies have that name but different paths or domains that all match the request URI. By default, the first cookie will be returned, which is the or one of the cookies with the closest path match. */ @property ref CookieValueMap cookies() @safe { if (_cookies.isNull) { _cookies = CookieValueMap.init; if (auto pv = "cookie" in headers) parseCookies(*pv, _cookies); } return _cookies.get; } private Nullable!CookieValueMap _cookies; /** Contains all _form fields supplied using the _query string. The fields are stored in the same order as they are received. */ @property ref FormFields query() @safe { if (_query.isNull) { _query = FormFields.init; parseURLEncodedForm(queryString, _query); } return _query.get; } Nullable!FormFields _query; import vibe.utils.dictionarylist; /** A map of general parameters for the request. This map is supposed to be used by middleware functionality to store information for later stages. For example vibe.http.router.URLRouter uses this map to store the value of any named placeholders. */ DictionaryList!(string, true, 8) params; import std.variant : Variant; /** A map of context items for the request. This is especially useful for passing application specific data down the chain of processors along with the request itself. For example, a generic route may be defined to check user login status, if the user is logged in, add a reference to user specific data to the context. This is implemented with `std.variant.Variant` to allow any type of data. */ DictionaryList!(Variant, true, 2) context; /** Supplies the request body as a stream. Note that when certain server options are set (such as HTTPServerOption.parseJsonBody) and a matching request was sent, the returned stream will be empty. If needed, remove those options and do your own processing of the body when launching the server. HTTPServerOption has a list of all options that affect the request body. */ InputStream bodyReader; /** Contains the parsed Json for a JSON request. A JSON request must have the Content-Type "application/json" or "application/vnd.api+json". */ @property ref Json json() @safe { if (_json.isNull) { if (icmp2(contentType, "application/json") == 0 || icmp2(contentType, "application/vnd.api+json") == 0 ) { auto bodyStr = bodyReader.readAllUTF8(); if (!bodyStr.empty) _json = parseJson(bodyStr); } else { _json = Json.undefined; } } return _json.get; } private Nullable!Json _json; /** Contains the parsed parameters of a HTML POST _form request. The fields are stored in the same order as they are received. Remarks: A form request must either have the Content-Type "application/x-www-form-urlencoded" or "multipart/form-data". */ @property ref FormFields form() @safe { if (_form.isNull) parseFormAndFiles(); return _form.get; } private Nullable!FormFields _form; private void parseFormAndFiles() @safe { _form = FormFields.init; assert(!!bodyReader); parseFormData(_form, _files, headers.get("Content-Type", ""), bodyReader, MaxHTTPHeaderLineLength); } /** Contains information about any uploaded file for a HTML _form request. */ @property ref FilePartFormFields files() @safe { // _form and _files are parsed in one step if (_form.isNull) { parseFormAndFiles(); assert(!_form.isNull); } return _files; } private FilePartFormFields _files; /** The current Session object. This field is set if HTTPServerResponse.startSession() has been called on a previous response and if the client has sent back the matching cookie. Remarks: Requires the HTTPServerOption.parseCookies option. */ Session session; } package { /** The settings of the server serving this request. */ @property const(HTTPServerSettings) serverSettings() const @safe { return m_settings; } } this(SysTime time, ushort port) @safe { m_timeCreated = time.toUTC(); m_port = port; } /** Time when this request started processing. */ @property SysTime timeCreated() const @safe { return m_timeCreated; } /** The full URL that corresponds to this request. The host URL includes the protocol, host and optionally the user and password that was used for this request. This field is useful to construct self referencing URLs. Note that the port is currently not set, so that this only works if the standard port is used. */ @property URL fullURL() const @safe { URL url; auto xfh = this.headers.get("X-Forwarded-Host"); auto xfp = this.headers.get("X-Forwarded-Port"); auto xfpr = this.headers.get("X-Forwarded-Proto"); // Set URL host segment. if (xfh.length) { url.host = xfh; } else if (!this.host.empty) { url.host = this.host; } else if (!m_settings.hostName.empty) { url.host = m_settings.hostName; } else { url.host = m_settings.bindAddresses[0]; } // Set URL schema segment. if (xfpr.length) { url.schema = xfpr; } else if (this.tls) { url.schema = "https"; } else { url.schema = "http"; } // Set URL port segment. if (xfp.length) { try { url.port = xfp.to!ushort; } catch (ConvException) { // TODO : Consider responding with a 400/etc. error from here. logWarn("X-Forwarded-Port header was not valid port (%s)", xfp); } } else if (!xfh) { if (url.schema == "https") { if (m_port != 443U) url.port = m_port; } else { if (m_port != 80U) url.port = m_port; } } if (url.host.startsWith('[')) { // handle IPv6 address auto idx = url.host.indexOf(']'); if (idx >= 0 && idx+1 < url.host.length && url.host[idx+1] == ':') url.host = url.host[1 .. idx]; } else { // handle normal host names or IPv4 address auto idx = url.host.indexOf(':'); if (idx >= 0) url.host = url.host[0 .. idx]; } url.username = this.username; url.password = this.password; url.localURI = this.requestURI; return url; } /** The relative path to the root folder. Using this function instead of absolute URLs for embedded links can be useful to avoid dead link when the site is piped through a reverse-proxy. The returned string always ends with a slash. */ @property string rootDir() const @safe { import std.range.primitives : walkLength; auto depth = requestPath.bySegment.walkLength; return depth == 0 ? "./" : replicate("../", depth); } } /** Represents a HTTP response as sent from the server side. */ final class HTTPServerResponse : HTTPResponse { private { InterfaceProxy!Stream m_conn; InterfaceProxy!ConnectionStream m_rawConnection; InterfaceProxy!OutputStream m_bodyWriter; IAllocator m_requestAlloc; FreeListRef!ChunkedOutputStream m_chunkedBodyWriter; FreeListRef!CountingOutputStream m_countingWriter; FreeListRef!ZlibOutputStream m_zlibOutputStream; HTTPServerSettings m_settings; Session m_session; bool m_headerWritten = false; bool m_isHeadResponse = false; bool m_tls; SysTime m_timeFinalized; } static if (!is(Stream == InterfaceProxy!Stream)) { this(Stream conn, ConnectionStream raw_connection, HTTPServerSettings settings, IAllocator req_alloc) @safe { this(InterfaceProxy!Stream(conn), InterfaceProxy!ConnectionStream(raw_connection), settings, req_alloc); } } this(InterfaceProxy!Stream conn, InterfaceProxy!ConnectionStream raw_connection, HTTPServerSettings settings, IAllocator req_alloc) @safe { m_conn = conn; m_rawConnection = raw_connection; m_countingWriter = createCountingOutputStreamFL(conn); m_settings = settings; m_requestAlloc = req_alloc; } /** Returns the time at which the request was finalized. Note that this field will only be set after `finalize` has been called. */ @property SysTime timeFinalized() const @safe { return m_timeFinalized; } /** Determines if the HTTP header has already been written. */ @property bool headerWritten() const @safe { return m_headerWritten; } /** Determines if the response does not need a body. */ bool isHeadResponse() const @safe { return m_isHeadResponse; } /** Determines if the response is sent over an encrypted connection. */ bool tls() const @safe { return m_tls; } /** Writes the entire response body at once. Params: data = The data to write as the body contents status = Optional response status code to set content_tyoe = Optional content type to apply to the response. If no content type is given and no "Content-Type" header is set in the response, this will default to `"application/octet-stream"`. See_Also: `HTTPStatusCode` */ void writeBody(in ubyte[] data, string content_type = null) @safe { if (content_type.length) headers["Content-Type"] = content_type; else if ("Content-Type" !in headers) headers["Content-Type"] = "application/octet-stream"; headers["Content-Length"] = formatAlloc(m_requestAlloc, "%d", data.length); bodyWriter.write(data); } /// ditto void writeBody(in ubyte[] data, int status, string content_type = null) @safe { statusCode = status; writeBody(data, content_type); } /// ditto void writeBody(scope InputStream data, string content_type = null) @safe { if (content_type.length) headers["Content-Type"] = content_type; else if ("Content-Type" !in headers) headers["Content-Type"] = "application/octet-stream"; data.pipe(bodyWriter); } /** Writes the entire response body as a single string. Params: data = The string to write as the body contents status = Optional response status code to set content_type = Optional content type to apply to the response. If no content type is given and no "Content-Type" header is set in the response, this will default to `"text/plain; charset=UTF-8"`. See_Also: `HTTPStatusCode` */ /// ditto void writeBody(string data, string content_type = null) @safe { if (!content_type.length && "Content-Type" !in headers) content_type = "text/plain; charset=UTF-8"; writeBody(cast(const(ubyte)[])data, content_type); } /// ditto void writeBody(string data, int status, string content_type = null) @safe { statusCode = status; writeBody(data, content_type); } /** Writes the whole response body at once, without doing any further encoding. The caller has to make sure that the appropriate headers are set correctly (i.e. Content-Type and Content-Encoding). Note that the version taking a RandomAccessStream may perform additional optimizations such as sending a file directly from the disk to the network card using a DMA transfer. */ void writeRawBody(RandomAccessStream)(RandomAccessStream stream) @safe if (isRandomAccessStream!RandomAccessStream) { assert(!m_headerWritten, "A body was already written!"); writeHeader(); if (m_isHeadResponse) return; auto bytes = stream.size - stream.tell(); stream.pipe(m_conn); m_countingWriter.increment(bytes); } /// ditto void writeRawBody(InputStream)(InputStream stream, size_t num_bytes = 0) @safe if (isInputStream!InputStream && !isRandomAccessStream!InputStream) { assert(!m_headerWritten, "A body was already written!"); writeHeader(); if (m_isHeadResponse) return; if (num_bytes > 0) { stream.pipe(m_conn, num_bytes); m_countingWriter.increment(num_bytes); } else stream.pipe(m_countingWriter, num_bytes); } /// ditto void writeRawBody(RandomAccessStream)(RandomAccessStream stream, int status) @safe if (isRandomAccessStream!RandomAccessStream) { statusCode = status; writeRawBody(stream); } /// ditto void writeRawBody(InputStream)(InputStream stream, int status, size_t num_bytes = 0) @safe if (isInputStream!InputStream && !isRandomAccessStream!InputStream) { statusCode = status; writeRawBody(stream, num_bytes); } /// Writes a JSON message with the specified status void writeJsonBody(T)(T data, int status, bool allow_chunked = false) { statusCode = status; writeJsonBody(data, allow_chunked); } /// ditto void writeJsonBody(T)(T data, int status, string content_type, bool allow_chunked = false) { statusCode = status; writeJsonBody(data, content_type, allow_chunked); } /// ditto void writeJsonBody(T)(T data, string content_type, bool allow_chunked = false) { headers["Content-Type"] = content_type; writeJsonBody(data, allow_chunked); } /// ditto void writeJsonBody(T)(T data, bool allow_chunked = false) { doWriteJsonBody!(T, false)(data, allow_chunked); } /// ditto void writePrettyJsonBody(T)(T data, bool allow_chunked = false) { doWriteJsonBody!(T, true)(data, allow_chunked); } private void doWriteJsonBody(T, bool PRETTY)(T data, bool allow_chunked = false) { import std.traits; import vibe.stream.wrapper; static if (!is(T == Json) && is(typeof(data.data())) && isArray!(typeof(data.data()))) { static assert(!is(T == Appender!(typeof(data.data()))), "Passed an Appender!T to writeJsonBody - this is most probably not doing what's indended."); } if ("Content-Type" !in headers) headers["Content-Type"] = "application/json; charset=UTF-8"; // set an explicit content-length field if chunked encoding is not allowed if (!allow_chunked) { import vibe.internal.rangeutil; long length = 0; auto counter = RangeCounter(() @trusted { return &length; } ()); static if (PRETTY) serializeToPrettyJson(counter, data); else serializeToJson(counter, data); headers["Content-Length"] = formatAlloc(m_requestAlloc, "%d", length); } auto rng = streamOutputRange!1024(bodyWriter); static if (PRETTY) serializeToPrettyJson(() @trusted { return &rng; } (), data); else serializeToJson(() @trusted { return &rng; } (), data); } /** * Writes the response with no body. * * This method should be used in situations where no body is * requested, such as a HEAD request. For an empty body, just use writeBody, * as this method causes problems with some keep-alive connections. */ void writeVoidBody() @safe { if (!m_isHeadResponse) { assert("Content-Length" !in headers); assert("Transfer-Encoding" !in headers); } assert(!headerWritten); writeHeader(); m_conn.flush(); } /** A stream for writing the body of the HTTP response. Note that after 'bodyWriter' has been accessed for the first time, it is not allowed to change any header or the status code of the response. */ @property InterfaceProxy!OutputStream bodyWriter() @safe { assert(!!m_conn); if (m_bodyWriter) return m_bodyWriter; assert(!m_headerWritten, "A void body was already written!"); if (m_isHeadResponse) { // for HEAD requests, we define a NullOutputWriter for convenience // - no body will be written. However, the request handler should call writeVoidBody() // and skip writing of the body in this case. if ("Content-Length" !in headers) headers["Transfer-Encoding"] = "chunked"; writeHeader(); m_bodyWriter = nullSink; return m_bodyWriter; } if ("Content-Encoding" in headers && "Content-Length" in headers) { // we do not known how large the compressed body will be in advance // so remove the content-length and use chunked transfer headers.remove("Content-Length"); } if (auto pcl = "Content-Length" in headers) { writeHeader(); m_countingWriter.writeLimit = (*pcl).to!ulong; m_bodyWriter = m_countingWriter; } else if (httpVersion <= HTTPVersion.HTTP_1_0) { if ("Connection" in headers) headers.remove("Connection"); // default to "close" writeHeader(); m_bodyWriter = m_conn; } else { headers["Transfer-Encoding"] = "chunked"; writeHeader(); m_chunkedBodyWriter = createChunkedOutputStreamFL(m_countingWriter); m_bodyWriter = m_chunkedBodyWriter; } if (auto pce = "Content-Encoding" in headers) { if (icmp2(*pce, "gzip") == 0) { m_zlibOutputStream = createGzipOutputStreamFL(m_bodyWriter); m_bodyWriter = m_zlibOutputStream; } else if (icmp2(*pce, "deflate") == 0) { m_zlibOutputStream = createDeflateOutputStreamFL(m_bodyWriter); m_bodyWriter = m_zlibOutputStream; } else { logWarn("Unsupported Content-Encoding set in response: '"~*pce~"'"); } } return m_bodyWriter; } /** Sends a redirect request to the client. Params: url = The URL to redirect to status = The HTTP redirect status (3xx) to send - by default this is $(D HTTPStatus.found) */ void redirect(string url, int status = HTTPStatus.Found) @safe { statusCode = status; headers["Location"] = url; writeBody("redirecting..."); } /// ditto void redirect(URL url, int status = HTTPStatus.Found) @safe { redirect(url.toString(), status); } /// @safe unittest { import vibe.http.router; void request_handler(HTTPServerRequest req, HTTPServerResponse res) { res.redirect("http://example.org/some_other_url"); } void test() { auto router = new URLRouter; router.get("/old_url", &request_handler); listenHTTP(new HTTPServerSettings, router); } } /** Special method sending a SWITCHING_PROTOCOLS response to the client. Notice: For the overload that returns a `ConnectionStream`, it must be ensured that the returned instance doesn't outlive the request handler callback. Params: protocol = The protocol set in the "Upgrade" header of the response. Use an empty string to skip setting this field. */ ConnectionStream switchProtocol(string protocol) @safe { statusCode = HTTPStatus.SwitchingProtocols; if (protocol.length) headers["Upgrade"] = protocol; writeVoidBody(); return createConnectionProxyStream(m_conn, m_rawConnection); } /// ditto void switchProtocol(string protocol, scope void delegate(scope ConnectionStream) @safe del) @safe { statusCode = HTTPStatus.SwitchingProtocols; if (protocol.length) headers["Upgrade"] = protocol; writeVoidBody(); () @trusted { auto conn = createConnectionProxyStreamFL(m_conn, m_rawConnection); del(conn); } (); finalize(); if (m_rawConnection && m_rawConnection.connected) m_rawConnection.close(); // connection not reusable after a protocol upgrade } /** Special method for handling CONNECT proxy tunnel Notice: For the overload that returns a `ConnectionStream`, it must be ensured that the returned instance doesn't outlive the request handler callback. */ ConnectionStream connectProxy() @safe { return createConnectionProxyStream(m_conn, m_rawConnection); } /// ditto void connectProxy(scope void delegate(scope ConnectionStream) @safe del) @safe { () @trusted { auto conn = createConnectionProxyStreamFL(m_conn, m_rawConnection); del(conn); } (); finalize(); m_rawConnection.close(); // connection not reusable after a protocol upgrade } /** Sets the specified cookie value. Params: name = Name of the cookie value = New cookie value - pass null to clear the cookie path = Path (as seen by the client) of the directory tree in which the cookie is visible */ Cookie setCookie(string name, string value, string path = "/", Cookie.Encoding encoding = Cookie.Encoding.url) @safe { auto cookie = new Cookie(); cookie.path = path; cookie.setValue(value, encoding); if (value is null) { cookie.maxAge = 0; cookie.expires = "Thu, 01 Jan 1970 00:00:00 GMT"; } cookies[name] = cookie; return cookie; } /** Initiates a new session. The session is stored in the SessionStore that was specified when creating the server. Depending on this, the session can be persistent or temporary and specific to this server instance. */ Session startSession(string path = "/", SessionOption options = SessionOption.httpOnly) @safe { assert(m_settings.sessionStore, "no session store set"); assert(!m_session, "Try to start a session, but already started one."); bool secure; if (options & SessionOption.secure) secure = true; else if (options & SessionOption.noSecure) secure = false; else secure = this.tls; m_session = m_settings.sessionStore.create(); m_session.set("$sessionCookiePath", path); m_session.set("$sessionCookieSecure", secure); auto cookie = setCookie(m_settings.sessionIdCookie, m_session.id, path); cookie.secure = secure; cookie.httpOnly = (options & SessionOption.httpOnly) != 0; return m_session; } /** Terminates the current session (if any). */ void terminateSession() @safe { if (!m_session) return; auto cookie = setCookie(m_settings.sessionIdCookie, null, m_session.get!string("$sessionCookiePath")); cookie.secure = m_session.get!bool("$sessionCookieSecure"); m_session.destroy(); m_session = Session.init; } @property ulong bytesWritten() @safe const { return m_countingWriter.bytesWritten; } /** Waits until either the connection closes, data arrives, or until the given timeout is reached. Returns: $(D true) if the connection was closed and $(D false) if either the timeout was reached, or if data has arrived for consumption. See_Also: `connected` */ bool waitForConnectionClose(Duration timeout = Duration.max) @safe { if (!m_rawConnection || !m_rawConnection.connected) return true; m_rawConnection.waitForData(timeout); return !m_rawConnection.connected; } /** Determines if the underlying connection is still alive. Returns $(D true) if the remote peer is still connected and $(D false) if the remote peer closed the connection. See_Also: `waitForConnectionClose` */ @property bool connected() @safe const { if (!m_rawConnection) return false; return m_rawConnection.connected; } /** Finalizes the response. This is usually called automatically by the server. This method can be called manually after writing the response to force all network traffic associated with the current request to be finalized. After the call returns, the `timeFinalized` property will be set. */ void finalize() @safe { if (m_zlibOutputStream) { m_zlibOutputStream.finalize(); m_zlibOutputStream.destroy(); } if (m_chunkedBodyWriter) { m_chunkedBodyWriter.finalize(); m_chunkedBodyWriter.destroy(); } // ignore exceptions caused by an already closed connection - the client // may have closed the connection already and this doesn't usually indicate // a problem. if (m_rawConnection && m_rawConnection.connected) { try if (m_conn) m_conn.flush(); catch (Exception e) logDebug("Failed to flush connection after finishing HTTP response: %s", e.msg); if (!isHeadResponse && bytesWritten < headers.get("Content-Length", "0").to!long) { logDebug("HTTP response only written partially before finalization. Terminating connection."); m_rawConnection.close(); } m_rawConnection = InterfaceProxy!ConnectionStream.init; } if (m_conn) { m_conn = InterfaceProxy!Stream.init; m_timeFinalized = Clock.currTime(UTC()); } } private void writeHeader() @safe { import vibe.stream.wrapper; assert(!m_bodyWriter && !m_headerWritten, "Try to write header after body has already begun."); m_headerWritten = true; auto dst = streamOutputRange!1024(m_conn); void writeLine(T...)(string fmt, T args) @safe { formattedWrite(() @trusted { return &dst; } (), fmt, args); dst.put("\r\n"); logTrace(fmt, args); } logTrace("---------------------"); logTrace("HTTP server response:"); logTrace("---------------------"); // write the status line writeLine("%s %d %s", getHTTPVersionString(this.httpVersion), this.statusCode, this.statusPhrase.length ? this.statusPhrase : httpStatusText(this.statusCode)); // write all normal headers foreach (k, v; this.headers) { dst.put(k); dst.put(": "); dst.put(v); dst.put("\r\n"); logTrace("%s: %s", k, v); } logTrace("---------------------"); // write cookies foreach (n, cookie; this.cookies) { dst.put("Set-Cookie: "); cookie.writeString(() @trusted { return &dst; } (), n); dst.put("\r\n"); } // finalize response header dst.put("\r\n"); } } /** Represents the request listener for a specific `listenHTTP` call. This struct can be used to stop listening for HTTP requests at runtime. */ struct HTTPListener { private { size_t[] m_virtualHostIDs; } private this(size_t[] ids) @safe { m_virtualHostIDs = ids; } @property NetworkAddress[] bindAddresses() { NetworkAddress[] ret; foreach (l; s_listeners) if (l.m_virtualHosts.canFind!(v => m_virtualHostIDs.canFind(v.id))) { NetworkAddress a; a = resolveHost(l.bindAddress); a.port = l.bindPort; ret ~= a; } return ret; } /** Stops handling HTTP requests and closes the TCP listening port if possible. */ void stopListening() @safe { import std.algorithm : countUntil; foreach (vhid; m_virtualHostIDs) { foreach (lidx, l; s_listeners) { if (l.removeVirtualHost(vhid)) { if (!l.hasVirtualHosts) { l.m_listener.stopListening(); logInfo("Stopped to listen for HTTP%s requests on %s:%s", l.tlsContext ? "S": "", l.bindAddress, l.bindPort); s_listeners = s_listeners[0 .. lidx] ~ s_listeners[lidx+1 .. $]; } } break; } } } } /** Represents a single HTTP server port. This class defines the incoming interface, port, and TLS configuration of the public server port. The public server port may differ from the local one if a reverse proxy of some kind is facing the public internet and forwards to this HTTP server. Multiple virtual hosts can be configured to be served from the same port. Their TLS settings must be compatible and each virtual host must have a unique name. */ final class HTTPServerContext { private struct VirtualHost { HTTPServerRequestDelegate requestHandler; HTTPServerSettings settings; HTTPLogger[] loggers; size_t id; } private { TCPListener m_listener; VirtualHost[] m_virtualHosts; string m_bindAddress; ushort m_bindPort; TLSContext m_tlsContext; static size_t s_vhostIDCounter = 1; } @safe: this(string bind_address, ushort bind_port) { m_bindAddress = bind_address; m_bindPort = bind_port; } /** Returns the TLS context associated with the listener. For non-HTTPS listeners, `null` will be returned. Otherwise, if only a single virtual host has been added, the TLS context of that host's settings is returned. For multiple virtual hosts, an SNI context is returned, which forwards to the individual contexts based on the requested host name. */ @property TLSContext tlsContext() { return m_tlsContext; } /// The local network interface IP address associated with this listener @property string bindAddress() const { return m_bindAddress; } /// The local port associated with this listener @property ushort bindPort() const { return m_bindPort; } /// Determines if any virtual hosts have been addded @property bool hasVirtualHosts() const { return m_virtualHosts.length > 0; } /** Adds a single virtual host. Note that the port and bind address defined in `settings` must match the ones for this listener. The `settings.host` field must be unique for all virtual hosts. Returns: Returns a unique ID for the new virtual host */ size_t addVirtualHost(HTTPServerSettings settings, HTTPServerRequestDelegate request_handler) { assert(settings.port == 0 || settings.port == m_bindPort, "Virtual host settings do not match bind port."); assert(settings.bindAddresses.canFind(m_bindAddress), "Virtual host settings do not match bind address."); VirtualHost vhost; vhost.id = s_vhostIDCounter++; vhost.settings = settings; vhost.requestHandler = request_handler; if (settings.accessLogger) vhost.loggers ~= settings.accessLogger; if (settings.accessLogToConsole) vhost.loggers ~= new HTTPConsoleLogger(settings, settings.accessLogFormat); if (settings.accessLogFile.length) vhost.loggers ~= new HTTPFileLogger(settings, settings.accessLogFormat, settings.accessLogFile); if (!m_virtualHosts.length) m_tlsContext = settings.tlsContext; enforce((m_tlsContext !is null) == (settings.tlsContext !is null), "Cannot mix HTTP and HTTPS virtual hosts within the same listener."); if (m_tlsContext) addSNIHost(settings); m_virtualHosts ~= vhost; if (settings.hostName.length) { auto proto = settings.tlsContext ? "https" : "http"; auto port = settings.tlsContext && settings.port == 443 || !settings.tlsContext && settings.port == 80 ? "" : ":" ~ settings.port.to!string; logInfo("Added virtual host %s://%s%s/ (%s)", proto, settings.hostName, m_bindPort, m_bindAddress); } return vhost.id; } /// Removes a previously added virtual host using its ID. bool removeVirtualHost(size_t id) { import std.algorithm.searching : countUntil; auto idx = m_virtualHosts.countUntil!(c => c.id == id); if (idx < 0) return false; auto ctx = m_virtualHosts[idx]; m_virtualHosts = m_virtualHosts[0 .. idx] ~ m_virtualHosts[idx+1 .. $]; return true; } private void addSNIHost(HTTPServerSettings settings) { if (settings.tlsContext !is m_tlsContext && m_tlsContext.kind != TLSContextKind.serverSNI) { logDebug("Create SNI TLS context for %s, port %s", bindAddress, bindPort); m_tlsContext = createTLSContext(TLSContextKind.serverSNI); m_tlsContext.sniCallback = &onSNI; } foreach (ctx; m_virtualHosts) { /*enforce(ctx.settings.hostName != settings.hostName, "A server with the host name '"~settings.hostName~"' is already " "listening on "~addr~":"~to!string(settings.port)~".");*/ } } private TLSContext onSNI(string servername) { foreach (vhost; m_virtualHosts) if (vhost.settings.hostName.icmp(servername) == 0) { logDebug("Found context for SNI host '%s'.", servername); return vhost.settings.tlsContext; } logDebug("No context found for SNI host '%s'.", servername); return null; } } /**************************************************************************************************/ /* Private types */ /**************************************************************************************************/ private enum MaxHTTPHeaderLineLength = 4096; private final class LimitedHTTPInputStream : LimitedInputStream { @safe: this(InterfaceProxy!InputStream stream, ulong byte_limit, bool silent_limit = false) { super(stream, byte_limit, silent_limit, true); } override void onSizeLimitReached() { throw new HTTPStatusException(HTTPStatus.requestEntityTooLarge); } } private final class TimeoutHTTPInputStream : InputStream { @safe: private { long m_timeref; long m_timeleft; InterfaceProxy!InputStream m_in; } this(InterfaceProxy!InputStream stream, Duration timeleft, SysTime reftime) { enforce(timeleft > 0.seconds, "Timeout required"); m_in = stream; m_timeleft = timeleft.total!"hnsecs"(); m_timeref = reftime.stdTime(); } @property bool empty() { enforce(m_in, "InputStream missing"); return m_in.empty(); } @property ulong leastSize() { enforce(m_in, "InputStream missing"); return m_in.leastSize(); } @property bool dataAvailableForRead() { enforce(m_in, "InputStream missing"); return m_in.dataAvailableForRead; } const(ubyte)[] peek() { return m_in.peek(); } size_t read(scope ubyte[] dst, IOMode mode) { enforce(m_in, "InputStream missing"); size_t nread = 0; checkTimeout(); // FIXME: this should use ConnectionStream.waitForData to enforce the timeout during the // read operation return m_in.read(dst, mode); } alias read = InputStream.read; private void checkTimeout() @safe { auto curr = Clock.currStdTime(); auto diff = curr - m_timeref; if (diff > m_timeleft) throw new HTTPStatusException(HTTPStatus.RequestTimeout); m_timeleft -= diff; m_timeref = curr; } } /**************************************************************************************************/ /* Private functions */ /**************************************************************************************************/ private { import core.sync.mutex; shared string s_distHost; shared ushort s_distPort = 11000; HTTPServerContext[] s_listeners; } /** [private] Starts a HTTP server listening on the specified port. This is the same as listenHTTP() except that it does not use a VibeDist host for remote listening, even if specified on the command line. */ private HTTPListener listenHTTPPlain(HTTPServerSettings settings, HTTPServerRequestDelegate request_handler) @safe { import vibe.core.core : runWorkerTaskDist; import std.algorithm : canFind, find; static TCPListener doListen(HTTPServerContext listen_info, bool dist, bool reusePort) @safe { try { TCPListenOptions options = TCPListenOptions.defaults; if(reusePort) options |= TCPListenOptions.reusePort; else options &= ~TCPListenOptions.reusePort; auto ret = listenTCP(listen_info.bindPort, (TCPConnection conn) nothrow @safe { try handleHTTPConnection(conn, listen_info); catch (Exception e) { logError("HTTP connection handler has thrown: %s", e.msg); debug logDebug("Full error: %s", () @trusted { return e.toString().sanitize(); } ()); try conn.close(); catch (Exception e) logError("Failed to close connection: %s", e.msg); } }, listen_info.bindAddress, options); // support port 0 meaning any available port if (listen_info.bindPort == 0) listen_info.m_bindPort = ret.bindAddress.port; auto proto = listen_info.tlsContext ? "https" : "http"; auto urladdr = listen_info.bindAddress; if (urladdr.canFind(':')) urladdr = "["~urladdr~"]"; logInfo("Listening for requests on %s://%s:%s/", proto, urladdr, listen_info.bindPort); return ret; } catch( Exception e ) { logWarn("Failed to listen on %s:%s", listen_info.bindAddress, listen_info.bindPort); return TCPListener.init; } } size_t[] vid; // Check for every bind address/port, if a new listening socket needs to be created and // check for conflicting servers foreach (addr; settings.bindAddresses) { HTTPServerContext linfo; auto l = s_listeners.find!(l => l.bindAddress == addr && l.bindPort == settings.port); if (!l.empty) linfo = l.front; else { auto li = new HTTPServerContext(addr, settings.port); if (auto tcp_lst = doListen(li, (settings.options & HTTPServerOption.distribute) != 0, (settings.options & HTTPServerOption.reusePort) != 0)) // DMD BUG 2043 { li.m_listener = tcp_lst; s_listeners ~= li; linfo = li; } } if (linfo) vid ~= linfo.addVirtualHost(settings, request_handler); } enforce(vid.length > 0, "Failed to listen for incoming HTTP connections on any of the supplied interfaces."); return HTTPListener(vid); } private alias TLSStreamType = ReturnType!(createTLSStreamFL!(InterfaceProxy!Stream)); private bool handleRequest(InterfaceProxy!Stream http_stream, TCPConnection tcp_connection, HTTPServerContext listen_info, ref HTTPServerSettings settings, ref bool keep_alive, scope IAllocator request_allocator) @safe { import std.algorithm.searching : canFind; SysTime reqtime = Clock.currTime(UTC()); // some instances that live only while the request is running FreeListRef!HTTPServerRequest req = FreeListRef!HTTPServerRequest(reqtime, listen_info.bindPort); FreeListRef!TimeoutHTTPInputStream timeout_http_input_stream; FreeListRef!LimitedHTTPInputStream limited_http_input_stream; FreeListRef!ChunkedInputStream chunked_input_stream; // store the IP address req.clientAddress = tcp_connection.remoteAddress; if (!listen_info.hasVirtualHosts) { logWarn("Didn't find a HTTP listening context for incoming connection. Dropping."); keep_alive = false; return false; } // Default to the first virtual host for this listener HTTPServerContext.VirtualHost context = listen_info.m_virtualHosts[0]; HTTPServerRequestDelegate request_task = context.requestHandler; settings = context.settings; // temporarily set to the default settings, the virtual host specific settings will be set further down req.m_settings = settings; // Create the response object InterfaceProxy!ConnectionStream cproxy = tcp_connection; auto res = FreeListRef!HTTPServerResponse(http_stream, cproxy, settings, request_allocator/*.Scoped_payload*/); req.tls = res.m_tls = listen_info.tlsContext !is null; if (req.tls) { version (HaveNoTLS) assert(false); else { static if (is(InterfaceProxy!ConnectionStream == ConnectionStream)) req.clientCertificate = (cast(TLSStream)http_stream).peerCertificate; else req.clientCertificate = http_stream.extract!TLSStreamType.peerCertificate; } } // Error page handler void errorOut(int code, string msg, string debug_msg, Throwable ex) @safe { assert(!res.headerWritten); // stack traces sometimes contain random bytes - make sure they are replaced debug_msg = sanitizeUTF8(cast(const(ubyte)[])debug_msg); res.statusCode = code; if (settings && settings.errorPageHandler) { /*scope*/ auto err = new HTTPServerErrorInfo; err.code = code; err.message = msg; err.debugMessage = debug_msg; err.exception = ex; settings.errorPageHandler_(req, res, err); } else { if (debug_msg.length) res.writeBody(format("%s - %s\n\n%s\n\nInternal error information:\n%s", code, httpStatusText(code), msg, debug_msg)); else res.writeBody(format("%s - %s\n\n%s", code, httpStatusText(code), msg)); } assert(res.headerWritten); } bool parsed = false; /*bool*/ keep_alive = false; // parse the request try { logTrace("reading request.."); // limit the total request time InterfaceProxy!InputStream reqReader = http_stream; if (settings.maxRequestTime > dur!"seconds"(0) && settings.maxRequestTime != Duration.max) { timeout_http_input_stream = FreeListRef!TimeoutHTTPInputStream(reqReader, settings.maxRequestTime, reqtime); reqReader = timeout_http_input_stream; } // basic request parsing parseRequestHeader(req, reqReader, request_allocator, settings.maxRequestHeaderSize); logTrace("Got request header."); // find the matching virtual host string reqhost; ushort reqport = 0; { string s = req.host; enforceHTTP(s.length > 0 || req.httpVersion <= HTTPVersion.HTTP_1_0, HTTPStatus.badRequest, "Missing Host header."); if (s.startsWith('[')) { // IPv6 address auto idx = s.indexOf(']'); enforce(idx > 0, "Missing closing ']' for IPv6 address."); reqhost = s[1 .. idx]; s = s[idx+1 .. $]; } else if (s.length) { // host name or IPv4 address auto idx = s.indexOf(':'); if (idx < 0) idx = s.length; enforceHTTP(idx > 0, HTTPStatus.badRequest, "Missing Host header."); reqhost = s[0 .. idx]; s = s[idx .. $]; } if (s.startsWith(':')) reqport = s[1 .. $].to!ushort; } foreach (ctx; listen_info.m_virtualHosts) if (icmp2(ctx.settings.hostName, reqhost) == 0 && (!reqport || reqport == ctx.settings.port)) { context = ctx; settings = ctx.settings; request_task = ctx.requestHandler; break; } req.m_settings = settings; res.m_settings = settings; // setup compressed output if (settings.useCompressionIfPossible) { if (auto pae = "Accept-Encoding" in req.headers) { if (canFind(*pae, "gzip")) { res.headers["Content-Encoding"] = "gzip"; } else if (canFind(*pae, "deflate")) { res.headers["Content-Encoding"] = "deflate"; } } } // limit request size if (auto pcl = "Content-Length" in req.headers) { string v = *pcl; auto contentLength = parse!ulong(v); // DMDBUG: to! thinks there is a H in the string enforceBadRequest(v.length == 0, "Invalid content-length"); enforceBadRequest(settings.maxRequestSize <= 0 || contentLength <= settings.maxRequestSize, "Request size too big"); limited_http_input_stream = FreeListRef!LimitedHTTPInputStream(reqReader, contentLength); } else if (auto pt = "Transfer-Encoding" in req.headers) { enforceBadRequest(icmp(*pt, "chunked") == 0); chunked_input_stream = createChunkedInputStreamFL(reqReader); InterfaceProxy!InputStream ciproxy = chunked_input_stream; limited_http_input_stream = FreeListRef!LimitedHTTPInputStream(ciproxy, settings.maxRequestSize, true); } else { limited_http_input_stream = FreeListRef!LimitedHTTPInputStream(reqReader, 0); } req.bodyReader = limited_http_input_stream; // handle Expect header if (auto pv = "Expect" in req.headers) { if (icmp2(*pv, "100-continue") == 0) { logTrace("sending 100 continue"); http_stream.write("HTTP/1.1 100 Continue\r\n\r\n"); } } // eagerly parse the URL as its lightweight and defacto @nogc auto url = URL.parse(req.requestURI); req.queryString = url.queryString; req.username = url.username; req.password = url.password; req.requestPath = url.path; // lookup the session if (settings.sessionStore) { // use the first cookie that contains a valid session ID in case // of multiple matching session cookies foreach (val; req.cookies.getAll(settings.sessionIdCookie)) { req.session = settings.sessionStore.open(val); res.m_session = req.session; if (req.session) break; } } // write default headers if (req.method == HTTPMethod.HEAD) res.m_isHeadResponse = true; if (settings.serverString.length) res.headers["Server"] = settings.serverString; res.headers["Date"] = formatRFC822DateAlloc(request_allocator, reqtime); if (req.persistent) res.headers["Keep-Alive"] = formatAlloc(request_allocator, "timeout=%d", settings.keepAliveTimeout.total!"seconds"()); // finished parsing the request parsed = true; logTrace("persist: %s", req.persistent); keep_alive = req.persistent; // handle the request logTrace("handle request (body %d)", req.bodyReader.leastSize); res.httpVersion = req.httpVersion; request_task(req, res); // if no one has written anything, return 404 if (!res.headerWritten) { string dbg_msg; logDiagnostic("No response written for %s", req.requestURI); if (settings.options & HTTPServerOption.errorStackTraces) dbg_msg = format("No routes match path '%s'", req.requestURI); errorOut(HTTPStatus.notFound, httpStatusText(HTTPStatus.notFound), dbg_msg, null); } } catch (HTTPStatusException err) { if (!res.headerWritten) errorOut(err.status, err.msg, err.debugMessage, err); else logDiagnostic("HTTPSterrorOutatusException while writing the response: %s", err.msg); debug logDebug("Exception while handling request %s %s: %s", req.method, req.requestURI, () @trusted { return err.toString().sanitize; } ()); if (!parsed || res.headerWritten || justifiesConnectionClose(err.status)) keep_alive = false; } catch (UncaughtException e) { auto status = parsed ? HTTPStatus.internalServerError : HTTPStatus.badRequest; string dbg_msg; if (settings.options & HTTPServerOption.errorStackTraces) dbg_msg = () @trusted { return e.toString().sanitize; } (); if (!res.headerWritten && tcp_connection.connected) errorOut(status, httpStatusText(status), dbg_msg, e); else logDiagnostic("Error while writing the response: %s", e.msg); debug logDebug("Exception while handling request %s %s: %s", req.method, req.requestURI, () @trusted { return e.toString().sanitize(); } ()); if (!parsed || res.headerWritten || !cast(Exception)e) keep_alive = false; } if (tcp_connection.connected) { if (req.bodyReader && !req.bodyReader.empty) { req.bodyReader.pipe(nullSink); logTrace("dropped body"); } } // finalize (e.g. for chunked encoding) res.finalize(); foreach (k, v ; req._files) { if (existsFile(v.tempPath)) { removeFile(v.tempPath); logDebug("Deleted upload tempfile %s", v.tempPath.toString()); } } if (!req.noLog) { // log the request to access log foreach (log; context.loggers) log.log(req, res); } //logTrace("return %s (used pool memory: %s/%s)", keep_alive, request_allocator.allocatedSize, request_allocator.totalSize); logTrace("return %s", keep_alive); return keep_alive != false; } private void parseRequestHeader(InputStream)(HTTPServerRequest req, InputStream http_stream, IAllocator alloc, ulong max_header_size) if (isInputStream!InputStream) { auto stream = FreeListRef!LimitedHTTPInputStream(http_stream, max_header_size); logTrace("HTTP server reading status line"); auto reqln = () @trusted { return cast(string)stream.readLine(MaxHTTPHeaderLineLength, "\r\n", alloc); }(); logTrace("--------------------"); logTrace("HTTP server request:"); logTrace("--------------------"); logTrace("%s", reqln); //Method auto pos = reqln.indexOf(' '); enforceBadRequest(pos >= 0, "invalid request method"); req.method = httpMethodFromString(reqln[0 .. pos]); reqln = reqln[pos+1 .. $]; //Path pos = reqln.indexOf(' '); enforceBadRequest(pos >= 0, "invalid request path"); req.requestURI = reqln[0 .. pos]; reqln = reqln[pos+1 .. $]; req.httpVersion = parseHTTPVersion(reqln); //headers parseRFC5322Header(stream, req.headers, MaxHTTPHeaderLineLength, alloc, false); foreach (k, v; req.headers) logTrace("%s: %s", k, v); logTrace("--------------------"); } private void parseCookies(string str, ref CookieValueMap cookies) @safe { import std.encoding : sanitize; import std.array : split; import std.string : strip; import std.algorithm.iteration : map, filter, each; import vibe.http.common : Cookie; () @trusted { return str.sanitize; } () .split(";") .map!(kv => kv.strip.split("=")) .filter!(kv => kv.length == 2) //ignore illegal cookies .each!(kv => cookies.add(kv[0], kv[1], Cookie.Encoding.raw) ); } unittest { auto cvm = CookieValueMap(); parseCookies("foo=bar;; baz=zinga; öö=üü ; møøse=was=sacked; onlyval1; =onlyval2; onlykey=", cvm); assert(cvm["foo"] == "bar"); assert(cvm["baz"] == "zinga"); assert(cvm["öö"] == "üü"); assert( "møøse" ! in cvm); //illegal cookie gets ignored assert( "onlyval1" ! in cvm); //illegal cookie gets ignored assert(cvm["onlykey"] == ""); assert(cvm[""] == "onlyval2"); assert(cvm.length() == 5); cvm = CookieValueMap(); parseCookies("", cvm); assert(cvm.length() == 0); cvm = CookieValueMap(); parseCookies(";;=", cvm); assert(cvm.length() == 1); assert(cvm[""] == ""); } shared static this() { version (VibeNoDefaultArgs) {} else { string disthost = s_distHost; ushort distport = s_distPort; import vibe.core.args : readOption; readOption("disthost|d", () @trusted { return &disthost; } (), "Sets the name of a vibedist server to use for load balancing."); readOption("distport", () @trusted { return &distport; } (), "Sets the port used for load balancing."); setVibeDistHost(disthost, distport); } } private string formatRFC822DateAlloc(IAllocator alloc, SysTime time) @safe { auto app = AllocAppender!string(alloc); writeRFC822DateTimeString(app, time); return () @trusted { return app.data; } (); } version (VibeDebugCatchAll) private alias UncaughtException = Throwable; else private alias UncaughtException = Exception; vibe.d-0.8.2/http/vibe/http/session.d000066400000000000000000000174071324361747700174320ustar00rootroot00000000000000/** Cookie based session support. Copyright: © 2012-2013 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Jan Krüger, Sönke Ludwig, Ilya Shipunov */ module vibe.http.session; import vibe.core.log; import vibe.crypto.cryptorand; import std.array; import std.base64; import std.traits : hasAliasing; import std.variant; //random number generator //TODO: Use Whirlpool or SHA-512 here private SHA1HashMixerRNG g_rng; //The "URL and Filename safe" Base64 without padding alias Base64URLNoPadding = Base64Impl!('-', '_', Base64.NoPadding); /** Represents a single HTTP session. Indexing the session object with string keys allows to store arbitrary key/value pairs. */ struct Session { private { SessionStore m_store; string m_id; SessionStorageType m_storageType; } // created by the SessionStore using SessionStore.createSessionInstance private this(SessionStore store, string id = null) @safe { assert(id.length > 0); m_store = store; m_id = id; m_storageType = store.storageType; } /** Checks if the session is active. This operator enables a $(D Session) value to be used in conditionals to check if they are actially valid/active. */ bool opCast() const @safe { return m_store !is null; } /// unittest { //import vibe.http.server; // workaround for cyclic module ctor compiler error class HTTPServerRequest { Session session; string[string] form; } class HTTPServerResponse { Session startSession() { assert(false); } } void login(scope HTTPServerRequest req, scope HTTPServerResponse res) { // TODO: validate username+password // ensure that there is an active session if (!req.session) req.session = res.startSession(); // update session variables req.session.set("loginUser", req.form["user"]); } } /// Returns the unique session id of this session. @property string id() const @safe { return m_id; } /// Queries the session for the existence of a particular key. bool isKeySet(string key) @safe { return m_store.isKeySet(m_id, key); } /** Gets a typed field from the session. */ const(T) get(T)(string key, lazy T def_value = T.init) @trusted { // Variant, deserializeJson/deserializeBson static assert(!hasAliasing!T, "Type "~T.stringof~" contains references, which is not supported for session storage."); auto val = m_store.get(m_id, key, serialize(def_value)); return deserialize!T(val); } /** Sets a typed field to the session. */ void set(T)(string key, T value) { static assert(!hasAliasing!T, "Type "~T.stringof~" contains references, which is not supported for session storage."); m_store.set(m_id, key, serialize(value)); } // Removes a field from a session void remove(string key) @safe { m_store.remove(m_id, key); } /** Enables foreach-iteration over all keys of the session. */ int opApply(scope int delegate(string key) @safe del) @safe { return m_store.iterateSession(m_id, del); } /// unittest { //import vibe.http.server; // workaround for cyclic module ctor compiler error class HTTPServerRequest { Session session; } class HTTPServerResponse { import vibe.core.stream; OutputStream bodyWriter() @safe { assert(false); } string contentType; } // sends all session entries to the requesting browser // assumes that all entries are strings void handleRequest(scope HTTPServerRequest req, scope HTTPServerResponse res) { res.contentType = "text/plain"; req.session.opApply((key) @safe { res.bodyWriter.write(key ~ ": " ~ req.session.get!string(key) ~ "\n"); return 0; }); } } package void destroy() @safe { m_store.destroy(m_id); } private Variant serialize(T)(T val) { import vibe.data.json; import vibe.data.bson; final switch (m_storageType) with (SessionStorageType) { case native: return () @trusted { return Variant(val); } (); case json: return () @trusted { return Variant(serializeToJson(val)); } (); case bson: return () @trusted { return Variant(serializeToBson(val)); } (); } } private T deserialize(T)(ref Variant val) { import vibe.data.json; import vibe.data.bson; final switch (m_storageType) with (SessionStorageType) { case native: return () @trusted { return val.get!T; } (); case json: return () @trusted { return deserializeJson!T(val.get!Json); } (); case bson: return () @trusted { return deserializeBson!T(val.get!Bson); } (); } } } /** Interface for a basic session store. A sesseion store is responsible for storing the id and the associated key/value pairs of a session. */ interface SessionStore { @safe: /// Returns the internal type used for storing session keys. @property SessionStorageType storageType() const; /// Creates a new session. Session create(); /// Opens an existing session. Session open(string id); /// Sets a name/value pair for a given session. void set(string id, string name, Variant value); /// Returns the value for a given session key. Variant get(string id, string name, lazy Variant defaultVal); /// Determines if a certain session key is set. bool isKeySet(string id, string key); /// Removes a key from a session void remove(string id, string key); /// Terminates the given session. void destroy(string id); /// Iterates all keys stored in the given session. int iterateSession(string id, scope int delegate(string key) @safe del); /// Creates a new Session object which sources its contents from this store. protected final Session createSessionInstance(string id = null) { if (!id.length) { ubyte[64] rand; if (!g_rng) g_rng = new SHA1HashMixerRNG(); g_rng.read(rand); id = () @trusted { return cast(immutable)Base64URLNoPadding.encode(rand); } (); } return Session(this, id); } } enum SessionStorageType { native, json, bson } /** Session store for storing a session in local memory. If the server is running as a single instance (no thread or process clustering), this kind of session store provies the fastest and simplest way to store sessions. In any other case, a persistent session store based on a database is necessary. */ final class MemorySessionStore : SessionStore { @safe: private { Variant[string][string] m_sessions; } @property SessionStorageType storageType() const { return SessionStorageType.native; } Session create() { auto s = createSessionInstance(); m_sessions[s.id] = null; return s; } Session open(string id) { auto pv = id in m_sessions; return pv ? createSessionInstance(id) : Session.init; } void set(string id, string name, Variant value) @trusted { // Variant m_sessions[id][name] = value; foreach(k, v; m_sessions[id]) logTrace("Csession[%s][%s] = %s", id, k, v); } Variant get(string id, string name, lazy Variant defaultVal) @trusted { // Variant assert(id in m_sessions, "session not in store"); foreach(k, v; m_sessions[id]) logTrace("Dsession[%s][%s] = %s", id, k, v); if (auto pv = name in m_sessions[id]) { return *pv; } else { return defaultVal; } } bool isKeySet(string id, string key) { return (key in m_sessions[id]) !is null; } void remove(string id, string key) { m_sessions[id].remove(key); } void destroy(string id) { m_sessions.remove(id); } int delegate(int delegate(ref string key, ref Variant value) @safe) @safe iterateSession(string id) { assert(id in m_sessions, "session not in store"); int iterator(int delegate(ref string key, ref Variant value) @safe del) @safe { foreach( key, ref value; m_sessions[id] ) if( auto ret = del(key, value) != 0 ) return ret; return 0; } return &iterator; } int iterateSession(string id, scope int delegate(string key) @safe del) @trusted { // hash map iteration assert(id in m_sessions, "session not in store"); foreach (key; m_sessions[id].byKey) if (auto ret = del(key)) return ret; return 0; } } vibe.d-0.8.2/http/vibe/http/status.d000066400000000000000000000204211324361747700172600ustar00rootroot00000000000000/** List of all standard HTTP status codes. Copyright: © 2012 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Jan Krüger */ module vibe.http.status; /** Definitions of all standard HTTP status codes. */ enum HTTPStatus { continue_ = 100, switchingProtocols = 101, ok = 200, created = 201, accepted = 202, nonAuthoritativeInformation = 203, noContent = 204, resetContent = 205, partialContent = 206, multipleChoices = 300, movedPermanently = 301, found = 302, seeOther = 303, notModified = 304, useProxy = 305, temporaryRedirect = 307, badRequest = 400, unauthorized = 401, paymentRequired = 402, forbidden = 403, notFound = 404, methodNotAllowed = 405, notAcceptable = 406, proxyAuthenticationRequired = 407, requestTimeout = 408, conflict = 409, gone = 410, lengthRequired = 411, preconditionFailed = 412, requestEntityTooLarge = 413, requestURITooLarge = 414, unsupportedMediaType = 415, requestedrangenotsatisfiable = 416, expectationFailed = 417, tooManyRequests = 429, unavailableForLegalReasons = 451, internalServerError = 500, notImplemented = 501, badGateway = 502, serviceUnavailable = 503, gatewayTimeout = 504, httpVersionNotSupported = 505, // WebDAV status codes multiStatus = 207, unprocessableEntity = 422, locked = 423, failedDependency = 424, insufficientStorage = 507, Continue = continue_, /// deprecated SwitchingProtocols = switchingProtocols, /// deprecated OK = ok, /// deprecated Created = created, /// deprecated Accepted = accepted, /// deprecated NonAuthoritativeInformation = nonAuthoritativeInformation, /// deprecated NoContent = noContent, /// deprecated ResetContent = resetContent, /// deprecated PartialContent = partialContent, /// deprecated MultipleChoices = multipleChoices, /// deprecated MovedPermanently = movedPermanently, /// deprecated Found = found, /// deprecated SeeOther = seeOther, /// deprecated NotModified = notModified, /// deprecated UseProxy = useProxy, /// deprecated TemporaryRedirect = temporaryRedirect, /// deprecated BadRequest = badRequest, /// deprecated Unauthorized = unauthorized, /// deprecated PaymentRequired = paymentRequired, /// deprecated Forbidden = forbidden, /// deprecated NotFound = notFound, /// deprecated MethodNotAllowed = methodNotAllowed, /// deprecated NotAcceptable = notAcceptable, /// deprecated ProxyAuthenticationRequired = proxyAuthenticationRequired, /// deprecated RequestTimeout = requestTimeout, /// deprecated Conflict = conflict, /// deprecated Gone = gone, /// deprecated LengthRequired = lengthRequired, /// deprecated PreconditionFailed = preconditionFailed, /// deprecated RequestEntityTooLarge = requestEntityTooLarge, /// deprecated RequestURITooLarge = requestURITooLarge, /// deprecated UnsupportedMediaType = unsupportedMediaType, /// deprecated Requestedrangenotsatisfiable = requestedrangenotsatisfiable, /// deprecated ExpectationFailed = expectationFailed, /// deprecated InternalServerError = internalServerError, /// deprecated NotImplemented = notImplemented, /// deprecated BadGateway = badGateway, /// deprecated ServiceUnavailable = serviceUnavailable, /// deprecated GatewayTimeout = gatewayTimeout, /// deprecated HTTPVersionNotSupported = httpVersionNotSupported, /// deprecated } @safe nothrow @nogc pure: /** Returns a standard text description of the specified HTTP status code. */ string httpStatusText(int code) { switch(code) { default: break; case HTTPStatus.continue_ : return "Continue"; case HTTPStatus.switchingProtocols : return "Switching Protocols"; case HTTPStatus.ok : return "OK"; case HTTPStatus.created : return "Created"; case HTTPStatus.accepted : return "Accepted"; case HTTPStatus.nonAuthoritativeInformation : return "Non-Authoritative Information"; case HTTPStatus.noContent : return "No Content"; case HTTPStatus.resetContent : return "Reset Content"; case HTTPStatus.partialContent : return "Partial Content"; case HTTPStatus.multipleChoices : return "Multiple Choices"; case HTTPStatus.movedPermanently : return "Moved Permanently"; case HTTPStatus.found : return "Found"; case HTTPStatus.seeOther : return "See Other"; case HTTPStatus.notModified : return "Not Modified"; case HTTPStatus.useProxy : return "Use Proxy"; case HTTPStatus.temporaryRedirect : return "Temporary Redirect"; case HTTPStatus.badRequest : return "Bad Request"; case HTTPStatus.unauthorized : return "Unauthorized"; case HTTPStatus.paymentRequired : return "Payment Required"; case HTTPStatus.forbidden : return "Forbidden"; case HTTPStatus.notFound : return "Not Found"; case HTTPStatus.methodNotAllowed : return "Method Not Allowed"; case HTTPStatus.notAcceptable : return "Not Acceptable"; case HTTPStatus.proxyAuthenticationRequired : return "Proxy Authentication Required"; case HTTPStatus.requestTimeout : return "Request Time-out"; case HTTPStatus.conflict : return "Conflict"; case HTTPStatus.gone : return "Gone"; case HTTPStatus.lengthRequired : return "Length Required"; case HTTPStatus.preconditionFailed : return "Precondition Failed"; case HTTPStatus.requestEntityTooLarge : return "Request Entity Too Large"; case HTTPStatus.requestURITooLarge : return "Request-URI Too Large"; case HTTPStatus.unsupportedMediaType : return "Unsupported Media Type"; case HTTPStatus.requestedrangenotsatisfiable : return "Requested range not satisfiable"; case HTTPStatus.expectationFailed : return "Expectation Failed"; case HTTPStatus.unavailableForLegalReasons : return "Unavailable For Legal Reasons"; case HTTPStatus.internalServerError : return "Internal Server Error"; case HTTPStatus.notImplemented : return "Not Implemented"; case HTTPStatus.badGateway : return "Bad Gateway"; case HTTPStatus.serviceUnavailable : return "Service Unavailable"; case HTTPStatus.gatewayTimeout : return "Gateway Time-out"; case HTTPStatus.httpVersionNotSupported : return "HTTP Version not supported"; // WebDAV case HTTPStatus.multiStatus : return "Multi-Status"; case HTTPStatus.unprocessableEntity : return "Unprocessable Entity"; case HTTPStatus.locked : return "Locked"; case HTTPStatus.failedDependency : return "Failed Dependency"; case HTTPStatus.insufficientStorage : return "Insufficient Storage"; } if( code >= 600 ) return "Unknown"; if( code >= 500 ) return "Unknown server error"; if( code >= 400 ) return "Unknown error"; if( code >= 300 ) return "Unknown redirection"; if( code >= 200 ) return "Unknown success"; if( code >= 100 ) return "Unknown information"; return "Unknown"; } /** Determines if the given status code justifies closing the connection (e.g. evil big request bodies) */ bool justifiesConnectionClose(int status) { switch(status) { default: return false; case HTTPStatus.requestEntityTooLarge: case HTTPStatus.requestURITooLarge: case HTTPStatus.requestTimeout: return true; } } /** Determines if status code is generally successful (>= 200 && < 300) */ bool isSuccessCode(HTTPStatus status) { return status >= 200 && status < 300; } vibe.d-0.8.2/http/vibe/http/websockets.d000066400000000000000000000777001324361747700201220ustar00rootroot00000000000000/** Implements WebSocket support and fallbacks for older browsers. Standards: $(LINK2 https://tools.ietf.org/html/rfc6455, RFC6455) Copyright: © 2012-2014 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Jan Krüger */ module vibe.http.websockets; /// @safe unittest { void handleConn(scope WebSocket sock) { // simple echo server while (sock.connected) { auto msg = sock.receiveText(); sock.send(msg); } } void startServer() { import vibe.http.router; auto router = new URLRouter; router.get("/ws", handleWebSockets(&handleConn)); // Start HTTP server using listenHTTP()... } } import vibe.core.core; import vibe.core.log; import vibe.core.net; import vibe.core.sync; import vibe.stream.operations; import vibe.http.server; import vibe.http.client; import vibe.core.connectionpool; import vibe.utils.array; import core.time; import std.array; import std.base64; import std.conv; import std.exception; import std.bitmanip; import std.digest.sha; import std.string; import std.functional; import std.uuid; import std.base64; import std.digest.sha; import vibe.crypto.cryptorand; @safe: alias WebSocketHandshakeDelegate = void delegate(scope WebSocket) nothrow; /// Exception thrown by $(D vibe.http.websockets). class WebSocketException: Exception { @safe pure nothrow: /// this(string msg, string file = __FILE__, size_t line = __LINE__, Throwable next = null) { super(msg, file, line, next); } /// this(string msg, Throwable next, string file = __FILE__, size_t line = __LINE__) { super(msg, next, file, line); } } /** Returns a WebSocket client object that is connected to the specified host. */ WebSocket connectWebSocket(URL url, const(HTTPClientSettings) settings = defaultSettings) @safe { import std.typecons : Tuple, tuple; auto host = url.host; auto port = url.port; bool use_tls = (url.schema == "wss") ? true : false; if (port == 0) port = (use_tls) ? 443 : 80; static struct ConnInfo { string host; ushort port; bool useTLS; string proxyIP; ushort proxyPort; } static vibe.utils.array.FixedRingBuffer!(Tuple!(ConnInfo, ConnectionPool!HTTPClient), 16) s_connections; auto ckey = ConnInfo(host, port, use_tls, settings ? settings.proxyURL.host : null, settings ? settings.proxyURL.port : 0); ConnectionPool!HTTPClient pool; foreach (c; s_connections) if (c[0].host == host && c[0].port == port && c[0].useTLS == use_tls && (settings is null || (c[0].proxyIP == settings.proxyURL.host && c[0].proxyPort == settings.proxyURL.port))) pool = c[1]; if (!pool) { logDebug("Create HTTP client pool %s:%s %s proxy %s:%d", host, port, use_tls, (settings) ? settings.proxyURL.host : string.init, (settings) ? settings.proxyURL.port : 0); pool = new ConnectionPool!HTTPClient({ auto ret = new HTTPClient; ret.connect(host, port, use_tls, settings); return ret; }); if (s_connections.full) s_connections.popFront(); s_connections.put(tuple(ckey, pool)); } auto rng = secureRNG(); auto challengeKey = generateChallengeKey(rng); auto answerKey = computeAcceptKey(challengeKey); auto cl = pool.lockConnection(); auto res = cl.request((scope req){ req.requestURL = (url.localURI == "") ? "/" : url.localURI; req.method = HTTPMethod.GET; req.headers["Upgrade"] = "websocket"; req.headers["Connection"] = "Upgrade"; req.headers["Sec-WebSocket-Version"] = "13"; req.headers["Sec-WebSocket-Key"] = challengeKey; }); enforce(res.statusCode == HTTPStatus.switchingProtocols, "Server didn't accept the protocol upgrade request."); auto key = "sec-websocket-accept" in res.headers; enforce(key !is null, "Response is missing the Sec-WebSocket-Accept header."); enforce(*key == answerKey, "Response has wrong accept key"); auto conn = res.switchProtocol("websocket"); auto ws = new WebSocket(conn, null, rng); return ws; } /// ditto void connectWebSocket(URL url, scope WebSocketHandshakeDelegate del, const(HTTPClientSettings) settings = defaultSettings) @safe { bool use_tls = (url.schema == "wss") ? true : false; url.schema = use_tls ? "https" : "http"; /*scope*/auto rng = secureRNG(); auto challengeKey = generateChallengeKey(rng); auto answerKey = computeAcceptKey(challengeKey); requestHTTP(url, (scope req) { req.method = HTTPMethod.GET; req.headers["Upgrade"] = "websocket"; req.headers["Connection"] = "Upgrade"; req.headers["Sec-WebSocket-Version"] = "13"; req.headers["Sec-WebSocket-Key"] = challengeKey; }, (scope res) { enforce(res.statusCode == HTTPStatus.switchingProtocols, "Server didn't accept the protocol upgrade request."); auto key = "sec-websocket-accept" in res.headers; enforce(key !is null, "Response is missing the Sec-WebSocket-Accept header."); enforce(*key == answerKey, "Response has wrong accept key"); res.switchProtocol("websocket", (scope conn) @trusted { scope ws = new WebSocket(conn, null, rng); del(ws); }); } ); } /// Scheduled for deprecation - use a `@safe` callback instead. void connectWebSocket(URL url, scope void delegate(scope WebSocket) @system nothrow del, const(HTTPClientSettings) settings = defaultSettings) @system { connectWebSocket(url, (scope ws) @trusted => del(ws), settings); } /// Scheduled for deprecation - use a `nothrow` callback instead. void connectWebSocket(URL url, scope void delegate(scope WebSocket) @safe del, const(HTTPClientSettings) settings = defaultSettings) @safe { connectWebSocket(url, (scope ws) nothrow { try del(ws); catch (Exception e) logWarn("WebSocket handler failed: %s", e.msg); }, settings); } /// ditto void connectWebSocket(URL url, scope void delegate(scope WebSocket) @system del, const(HTTPClientSettings) settings = defaultSettings) @system { connectWebSocket(url, (scope ws) nothrow { try del(ws); catch (Exception e) logWarn("WebSocket handler failed: %s", e.msg); }, settings); } /** Establishes a web socket conection and passes it to the $(D on_handshake) delegate. */ void handleWebSocket(scope WebSocketHandshakeDelegate on_handshake, scope HTTPServerRequest req, scope HTTPServerResponse res) @safe { auto pUpgrade = "Upgrade" in req.headers; auto pConnection = "Connection" in req.headers; auto pKey = "Sec-WebSocket-Key" in req.headers; //auto pProtocol = "Sec-WebSocket-Protocol" in req.headers; auto pVersion = "Sec-WebSocket-Version" in req.headers; auto isUpgrade = false; if( pConnection ) { auto connectionTypes = split(*pConnection, ","); foreach( t ; connectionTypes ) { if( t.strip().toLower() == "upgrade" ) { isUpgrade = true; break; } } } string req_error; if (!isUpgrade) req_error = "WebSocket endpoint only accepts \"Connection: upgrade\" requests."; else if (!pUpgrade || icmp(*pUpgrade, "websocket") != 0) req_error = "WebSocket endpoint requires \"Upgrade: websocket\" header."; else if (!pVersion || *pVersion != "13") req_error = "Only version 13 of the WebSocket protocol is supported."; else if (!pKey) req_error = "Missing \"Sec-WebSocket-Key\" header."; if (req_error.length) { logDebug("Browser sent invalid WebSocket request: %s", req_error); res.statusCode = HTTPStatus.badRequest; res.writeBody(req_error); return; } auto accept = () @trusted { return cast(string)Base64.encode(sha1Of(*pKey ~ s_webSocketGuid)); } (); res.headers["Sec-WebSocket-Accept"] = accept; res.headers["Connection"] = "Upgrade"; ConnectionStream conn = res.switchProtocol("websocket"); WebSocket socket = new WebSocket(conn, req, null); try { on_handshake(socket); } catch (Exception e) { logDiagnostic("WebSocket handler failed: %s", e.msg); } socket.close(); } /// Scheduled for deprecation - use a `@safe` callback instead. void handleWebSocket(scope void delegate(scope WebSocket) @system nothrow on_handshake, scope HTTPServerRequest req, scope HTTPServerResponse res) @system { handleWebSocket((scope ws) @trusted => on_handshake(ws), req, res); } /// Scheduled for deprecation - use a `nothrow` callback instead. void handleWebSocket(scope void delegate(scope WebSocket) @safe on_handshake, scope HTTPServerRequest req, scope HTTPServerResponse res) { handleWebSocket((scope ws) nothrow { try on_handshake(ws); catch (Exception e) logWarn("WebSocket handler failed: %s", e.msg); }, req, res); } /// ditto void handleWebSocket(scope void delegate(scope WebSocket) @system on_handshake, scope HTTPServerRequest req, scope HTTPServerResponse res) @system { handleWebSocket((scope ws) nothrow { try on_handshake(ws); catch (Exception e) logWarn("WebSocket handler failed: %s", e.msg); }, req, res); } /** Returns a HTTP request handler that establishes web socket conections. */ HTTPServerRequestDelegateS handleWebSockets(void function(scope WebSocket) @safe nothrow on_handshake) @safe { return handleWebSockets(() @trusted { return toDelegate(on_handshake); } ()); } /// ditto HTTPServerRequestDelegateS handleWebSockets(WebSocketHandshakeDelegate on_handshake) @safe { void callback(scope HTTPServerRequest req, scope HTTPServerResponse res) @safe { auto pUpgrade = "Upgrade" in req.headers; auto pConnection = "Connection" in req.headers; auto pKey = "Sec-WebSocket-Key" in req.headers; //auto pProtocol = "Sec-WebSocket-Protocol" in req.headers; auto pVersion = "Sec-WebSocket-Version" in req.headers; auto isUpgrade = false; if( pConnection ) { auto connectionTypes = split(*pConnection, ","); foreach( t ; connectionTypes ) { if( t.strip().toLower() == "upgrade" ) { isUpgrade = true; break; } } } if( !(isUpgrade && pUpgrade && icmp(*pUpgrade, "websocket") == 0 && pKey && pVersion && *pVersion == "13") ) { logDebug("Browser sent invalid WebSocket request."); res.statusCode = HTTPStatus.badRequest; res.writeVoidBody(); return; } auto accept = () @trusted { return cast(string)Base64.encode(sha1Of(*pKey ~ s_webSocketGuid)); } (); res.headers["Sec-WebSocket-Accept"] = accept; res.headers["Connection"] = "Upgrade"; res.switchProtocol("websocket", (scope conn) { // TODO: put back 'scope' once it is actually enforced by DMD /*scope*/ auto socket = new WebSocket(conn, req, null); try on_handshake(socket); catch (Exception e) { logDiagnostic("WebSocket handler failed: %s", e.msg); } socket.close(); }); } return &callback; } /// Scheduled for deprecation - use a `@safe` callback instead. HTTPServerRequestDelegateS handleWebSockets(void delegate(scope WebSocket) @system nothrow on_handshake) @system { return handleWebSockets(delegate (scope ws) @trusted => on_handshake(ws)); } /// Scheduled for deprecation - use a `@safe` callback instead. HTTPServerRequestDelegateS handleWebSockets(void function(scope WebSocket) @system nothrow on_handshake) @system { return handleWebSockets(delegate (scope ws) @trusted => on_handshake(ws)); } /// Scheduled for deprecation - use a `nothrow` callback instead. HTTPServerRequestDelegateS handleWebSockets(void delegate(scope WebSocket) @safe on_handshake) { return handleWebSockets(delegate (scope ws) nothrow { try on_handshake(ws); catch (Exception e) logWarn("WebSocket handler failed: %s", e.msg); }); } /// ditto HTTPServerRequestDelegateS handleWebSockets(void function(scope WebSocket) @safe on_handshake) { return handleWebSockets(delegate (scope ws) nothrow { try on_handshake(ws); catch (Exception e) logWarn("WebSocket handler failed: %s", e.msg); }); } /// ditto HTTPServerRequestDelegateS handleWebSockets(void delegate(scope WebSocket) @system on_handshake) @system { return handleWebSockets(delegate (scope ws) nothrow { try on_handshake(ws); catch (Exception e) logWarn("WebSocket handler failed: %s", e.msg); }); } /// ditto HTTPServerRequestDelegateS handleWebSockets(void function(scope WebSocket) @system on_handshake) @system { return handleWebSockets(delegate (scope ws) nothrow { try on_handshake(ws); catch (Exception e) logWarn("WebSocket handler failed: %s", e.msg); }); } /** * Represents a single _WebSocket connection. * * --- * shared static this () * { * runTask(() => connectToWS()); * } * * void connectToWS () * { * auto ws_url = URL("wss://websockets.example.com/websocket/auth_token"); * auto ws = connectWebSocket(ws_url); * logInfo("WebSocket connected"); * * while (ws.waitForData()) * { * auto txt = ws.receiveText; * logInfo("Received: %s", txt); * } * logFatal("Connection lost!"); * } * --- */ final class WebSocket { @safe: private { ConnectionStream m_conn; bool m_sentCloseFrame = false; IncomingWebSocketMessage m_nextMessage = null; const HTTPServerRequest m_request; Task m_reader; InterruptibleTaskMutex m_readMutex, m_writeMutex; InterruptibleTaskCondition m_readCondition; Timer m_pingTimer; uint m_lastPingIndex; bool m_pongReceived; short m_closeCode; const(char)[] m_closeReason; /// The entropy generator to use /// If not null, it means this is a server socket. RandomNumberStream m_rng; } /** * Private constructor, called from `connectWebSocket`. * * Params: * conn = Underlying connection string * request = HTTP request used to establish the connection * rng = Source of entropy to use. If null, assume we're a server socket */ private this(ConnectionStream conn, in HTTPServerRequest request, RandomNumberStream rng) { m_conn = conn; m_request = request; assert(m_conn); m_rng = rng; m_writeMutex = new InterruptibleTaskMutex; m_readMutex = new InterruptibleTaskMutex; m_readCondition = new InterruptibleTaskCondition(m_readMutex); m_readMutex.performLocked!({ m_reader = runTask(&startReader); if (request !is null && request.serverSettings.webSocketPingInterval != Duration.zero) { m_pongReceived = true; m_pingTimer = setTimer(request.serverSettings.webSocketPingInterval, &sendPing, true); } }); } /** Determines if the WebSocket connection is still alive and ready for sending. Note that for determining the ready state for $(EM reading), you need to use $(D waitForData) instead, because both methods can return different values while a disconnect is in proress. See_also: $(D waitForData) */ @property bool connected() { return m_conn.connected && !m_sentCloseFrame; } /** Returns the close code sent by the remote end. Note if the connection was never opened, is still alive, or was closed locally this value will be 0. If no close code was given by the remote end in the close frame, the value will be 1005. If the connection was not closed cleanly by the remote end, this value will be 1006. */ @property short closeCode() { return m_closeCode; } /** Returns the close reason sent by the remote end. Note if the connection was never opened, is still alive, or was closed locally this value will be an empty string. */ @property const(char)[] closeReason() { return m_closeReason; } /** The HTTP request that established the web socket connection. */ @property const(HTTPServerRequest) request() const { return m_request; } /** Checks if data is readily available for read. */ @property bool dataAvailableForRead() { return m_conn.dataAvailableForRead || m_nextMessage !is null; } /** Waits until either a message arrives or until the connection is closed. This function can be used in a read loop to cleanly determine when to stop reading. */ bool waitForData() { if (m_nextMessage) return true; m_readMutex.performLocked!({ while (connected && m_nextMessage is null) m_readCondition.wait(); }); return m_nextMessage !is null; } /// ditto bool waitForData(Duration timeout) { import std.datetime; if (m_nextMessage) return true; immutable limit_time = Clock.currTime(UTC()) + timeout; m_readMutex.performLocked!({ while (connected && m_nextMessage is null && timeout > 0.seconds) { m_readCondition.wait(timeout); timeout = limit_time - Clock.currTime(UTC()); } }); return m_nextMessage !is null; } /** Sends a text message. On the JavaScript side, the text will be available as message.data (type string). Throws: A `WebSocketException` is thrown if the connection gets closed before or during the transfer of the message. */ void send(scope const(char)[] data) { send( (scope message) { message.write(cast(const ubyte[])data); }, FrameOpcode.text); } /** Sends a binary message. On the JavaScript side, the text will be available as message.data (type Blob). Throws: A `WebSocketException` is thrown if the connection gets closed before or during the transfer of the message. */ void send(in ubyte[] data) { send((scope message){ message.write(data); }, FrameOpcode.binary); } /** Sends a message using an output stream. Throws: A `WebSocketException` is thrown if the connection gets closed before or during the transfer of the message. */ void send(scope void delegate(scope OutgoingWebSocketMessage) @safe sender, FrameOpcode frameOpcode) { m_writeMutex.performLocked!({ enforceEx!WebSocketException(!m_sentCloseFrame, "WebSocket connection already actively closed."); /*scope*/auto message = new OutgoingWebSocketMessage(m_conn, frameOpcode, m_rng); scope(exit) message.finalize(); sender(message); }); } /// Compatibility overload - will be removed soon. deprecated("Call the overload which requires an explicit FrameOpcode.") void send(scope void delegate(scope OutgoingWebSocketMessage) @safe sender) { send(sender, FrameOpcode.text); } /** Actively closes the connection. Params: code = Numeric code indicating a termination reason. reason = Message describing why the connection was terminated. */ void close(short code = 0, scope const(char)[] reason = "") { //control frame payloads are limited to 125 bytes assert(reason.length <= 123); if (connected) { send((scope msg) { m_sentCloseFrame = true; if (code != 0) msg.write(std.bitmanip.nativeToBigEndian(code)); msg.write(cast(const ubyte[])reason); }, FrameOpcode.close); } if (m_pingTimer) m_pingTimer.stop(); if (Task.getThis() != m_reader) m_reader.join(); } /** Receives a new message and returns its contents as a newly allocated data array. Params: strict = If set, ensures the exact frame type (text/binary) is received and throws an execption otherwise. Throws: WebSocketException if the connection is closed or if $(D strict == true) and the frame received is not the right type */ ubyte[] receiveBinary(bool strict = true) { ubyte[] ret; receive((scope message){ enforceEx!WebSocketException(!strict || message.frameOpcode == FrameOpcode.binary, "Expected a binary message, got "~message.frameOpcode.to!string()); ret = message.readAll(); }); return ret; } /// ditto string receiveText(bool strict = true) { string ret; receive((scope message){ enforceEx!WebSocketException(!strict || message.frameOpcode == FrameOpcode.text, "Expected a text message, got "~message.frameOpcode.to!string()); ret = message.readAllUTF8(); }); return ret; } /** Receives a new message using an InputStream. Throws: WebSocketException if the connection is closed. */ void receive(scope void delegate(scope IncomingWebSocketMessage) @safe receiver) { m_readMutex.performLocked!({ while (!m_nextMessage) { enforceEx!WebSocketException(connected, "Connection closed while reading message."); m_readCondition.wait(); } receiver(m_nextMessage); m_nextMessage = null; m_readCondition.notifyAll(); }); } private void startReader() { m_readMutex.performLocked!({}); //Wait until initialization scope (exit) m_readCondition.notifyAll(); try { while (!m_conn.empty) { assert(!m_nextMessage); /*scope*/auto msg = new IncomingWebSocketMessage(m_conn, m_rng); switch (msg.frameOpcode) { default: throw new WebSocketException("unknown frame opcode"); case FrameOpcode.ping: send((scope pong_msg) { pong_msg.write(msg.peek()); }, FrameOpcode.pong); break; case FrameOpcode.pong: // test if pong matches previous ping if (msg.peek.length != uint.sizeof || m_lastPingIndex != littleEndianToNative!uint(msg.peek()[0..uint.sizeof])) { logDebugV("Received PONG that doesn't match previous ping."); break; } logDebugV("Received matching PONG."); m_pongReceived = true; break; case FrameOpcode.close: logDebug("Got closing frame (%s)", m_sentCloseFrame); // If no close code was passed, we default to 1005 this.m_closeCode = 1005; // If provided in the frame, attempt to parse the close code/reason if (msg.peek().length >= short.sizeof) { this.m_closeCode = bigEndianToNative!short(msg.peek()[0..short.sizeof]); if (msg.peek().length > short.sizeof) { this.m_closeReason = cast(const(char) [])msg.peek()[short.sizeof..$]; } } if(!m_sentCloseFrame) close(); logDebug("Terminating connection (%s)", m_sentCloseFrame); m_conn.close(); return; case FrameOpcode.text: case FrameOpcode.binary: case FrameOpcode.continuation: // FIXME: add proper support for continuation frames! m_readMutex.performLocked!({ m_nextMessage = msg; m_readCondition.notifyAll(); while (m_nextMessage) m_readCondition.wait(); }); break; } } } catch (Exception e) { logDiagnostic("Error while reading websocket message: %s", e.msg); logDiagnostic("Closing connection."); } // If no close code was passed, e.g. this was an unclean termination // of our websocket connection, set the close code to 1006. if (this.m_closeCode == 0) this.m_closeCode = 1006; m_writeMutex.performLocked!({ m_conn.close(); }); } private void sendPing() nothrow { try { if (!m_pongReceived) { logDebug("Pong skipped. Closing connection."); m_writeMutex.performLocked!({ m_conn.close(); }); m_pingTimer.stop(); return; } m_pongReceived = false; send((scope msg) { msg.write(nativeToLittleEndian(++m_lastPingIndex)); }, FrameOpcode.ping); logDebugV("Ping sent"); } catch (Exception e) { logError("Failed to acquire write mutex for sending a WebSocket ping frame: %s", e.msg); } } } /** Represents a single outgoing _WebSocket message as an OutputStream. */ final class OutgoingWebSocketMessage : OutputStream { @safe: private { RandomNumberStream m_rng; Stream m_conn; FrameOpcode m_frameOpcode; Appender!(ubyte[]) m_buffer; bool m_finalized = false; } private this(Stream conn, FrameOpcode frameOpcode, RandomNumberStream rng) { assert(conn !is null); m_conn = conn; m_frameOpcode = frameOpcode; m_rng = rng; } size_t write(in ubyte[] bytes, IOMode mode) { assert(!m_finalized); if (!m_buffer.data.length) { ubyte[Frame.maxHeaderSize] header_padding; m_buffer.put(header_padding[]); } m_buffer.put(bytes); return bytes.length; } void flush() { assert(!m_finalized); if (m_buffer.data.length > 0) sendFrame(false); } void finalize() { if (m_finalized) return; m_finalized = true; sendFrame(true); } private void sendFrame(bool fin) { if (!m_buffer.data.length) write(null, IOMode.once); assert(m_buffer.data.length >= Frame.maxHeaderSize); Frame frame; frame.fin = fin; frame.opcode = m_frameOpcode; frame.payload = m_buffer.data[Frame.maxHeaderSize .. $]; auto hsize = frame.getHeaderSize(m_rng !is null); auto msg = m_buffer.data[Frame.maxHeaderSize-hsize .. $]; frame.writeHeader(msg[0 .. hsize], m_rng); m_conn.write(msg); m_conn.flush(); m_buffer.clear(); } alias write = OutputStream.write; } /** Represents a single incoming _WebSocket message as an InputStream. */ final class IncomingWebSocketMessage : InputStream { @safe: private { RandomNumberStream m_rng; Stream m_conn; Frame m_currentFrame; } private this(Stream conn, RandomNumberStream rng) { assert(conn !is null); m_conn = conn; m_rng = rng; skipFrame(); // reads the first frame } @property bool empty() const { return m_currentFrame.payload.length == 0; } @property ulong leastSize() const { return m_currentFrame.payload.length; } @property bool dataAvailableForRead() { return true; } /// The frame type for this nessage; @property FrameOpcode frameOpcode() const { return m_currentFrame.opcode; } const(ubyte)[] peek() { return m_currentFrame.payload; } /** * Retrieve the next websocket frame of the stream and discard the current * one * * This function is helpful if one wish to process frames by frames, * or minimize memory allocation, as `peek` will only return the current * frame data, and read requires a pre-allocated buffer. * * Returns: * `false` if the current frame is the final one, `true` if a new frame * was read. */ bool skipFrame() { if (m_currentFrame.fin) return false; m_currentFrame = Frame.readFrame(m_conn); return true; } size_t read(scope ubyte[] dst, IOMode mode) { size_t nread = 0; while (dst.length > 0) { enforceEx!WebSocketException(!empty , "cannot read from empty stream"); enforceEx!WebSocketException(leastSize > 0, "no data available" ); import std.algorithm : min; auto sz = cast(size_t)min(leastSize, dst.length); dst[0 .. sz] = m_currentFrame.payload[0 .. sz]; dst = dst[sz .. $]; m_currentFrame.payload = m_currentFrame.payload[sz .. $]; nread += sz; if (leastSize == 0) { if (mode == IOMode.immediate || mode == IOMode.once && nread > 0) break; this.skipFrame(); } } return nread; } alias read = InputStream.read; } /// Magic string defined by the RFC for challenging the server during upgrade private static immutable s_webSocketGuid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; /** * The Opcode is 4 bits, as defined in Section 5.2 * * Values are defined in section 11.8 * Currently only 6 values are defined, however the opcode is defined as * taking 4 bits. */ private enum FrameOpcode : ubyte { continuation = 0x0, text = 0x1, binary = 0x2, close = 0x8, ping = 0x9, pong = 0xA } static assert(FrameOpcode.max < 0b1111, "FrameOpcode is only 4 bits"); private struct Frame { @safe: enum maxHeaderSize = 14; bool fin; FrameOpcode opcode; ubyte[] payload; /** * Return the header length encoded with the expected amount of bits * * The WebSocket RFC define a variable-length payload length. * In short, it means that: * - If the length is <= 125, it is stored as the 7 least significant * bits of the second header byte. The first bit is reserved for MASK. * - If the length is <= 65_536 (so it fits in 2 bytes), a magic value of * 126 is stored in the aforementioned 7 bits, and the actual length * is stored in the next two bytes, resulting in a 4 bytes header * ( + masking key, if any). * - If the length is > 65_536, a magic value of 127 will be used for * the 7-bit field, and the next 8 bytes are expected to be the length, * resulting in a 10 bytes header ( + masking key, if any). * * Those functions encapsulate all this logic and allow to just get the * length with the desired size. * * Return: * - For `ubyte`, the value to store in the 7 bits field, either the * length or a magic value (126 or 127). * - For `ushort`, a value in the range [126; 65_536]. * If payload.length is not in this bound, an assertion will be triggered. * - For `ulong`, a value in the range [65_537; size_t.max]. * If payload.length is not in this bound, an assertion will be triggered. */ size_t getHeaderSize(bool mask) { size_t ret = 1; if (payload.length < 126) ret += 1; else if (payload.length < 65536) ret += 3; else ret += 9; if (mask) ret += 4; return ret; } void writeHeader(ubyte[] dst, RandomNumberStream sys_rng) { ubyte[4] buff; ubyte firstByte = cast(ubyte)opcode; if (fin) firstByte |= 0x80; dst[0] = firstByte; dst = dst[1 .. $]; auto b1 = sys_rng ? 0x80 : 0x00; if (payload.length < 126) { dst[0] = cast(ubyte)(b1 | payload.length); dst = dst[1 .. $]; } else if (payload.length < 65536) { dst[0] = cast(ubyte) (b1 | 126); dst[1 .. 3] = std.bitmanip.nativeToBigEndian(cast(ushort)payload.length); dst = dst[3 .. $]; } else { dst[0] = cast(ubyte) (b1 | 127); dst[1 .. 9] = std.bitmanip.nativeToBigEndian(cast(ulong)payload.length); dst = dst[9 .. $]; } if (sys_rng) { sys_rng.read(dst[0 .. 4]); for (size_t i = 0; i < payload.length; i++) payload[i] ^= dst[i % 4]; } } static Frame readFrame(InputStream stream) { Frame frame; ubyte[8] data; stream.read(data[0 .. 2]); frame.fin = (data[0] & 0x80) != 0; frame.opcode = cast(FrameOpcode)(data[0] & 0x0F); bool masked = !!(data[1] & 0b1000_0000); //parsing length ulong length = data[1] & 0b0111_1111; if (length == 126) { stream.read(data[0 .. 2]); length = bigEndianToNative!ushort(data[0 .. 2]); } else if (length == 127) { stream.read(data); length = bigEndianToNative!ulong(data); // RFC 6455, 5.2, 'Payload length': If 127, the following 8 bytes // interpreted as a 64-bit unsigned integer (the most significant // bit MUST be 0) enforceEx!WebSocketException(!(length >> 63), "Received length has a non-zero most significant bit"); } logDebug("Read frame: %s %s %s length=%d", frame.opcode, frame.fin ? "final frame" : "continuation", masked ? "masked" : "not masked", length); // Masking key is 32 bits / uint if (masked) stream.read(data[0 .. 4]); // Read payload // TODO: Provide a way to limit the size read, easy // DOS for server code here (rejectedsoftware/vibe.d#1496). enforceEx!WebSocketException(length <= size_t.max); frame.payload = new ubyte[](cast(size_t)length); stream.read(frame.payload); //de-masking if (masked) foreach (size_t i; 0 .. cast(size_t)length) frame.payload[i] = frame.payload[i] ^ data[i % 4]; return frame; } } unittest { import std.algorithm.searching : all; final class DummyRNG : RandomNumberStream { @safe: @property bool empty() { return false; } @property ulong leastSize() { return ulong.max; } @property bool dataAvailableForRead() { return true; } const(ubyte)[] peek() { return null; } size_t read(scope ubyte[] buffer, IOMode mode) @trusted { buffer[] = 13; return buffer.length; } alias read = RandomNumberStream.read; } ubyte[14] hdrbuf; auto rng = new DummyRNG; Frame f; f.payload = new ubyte[125]; assert(f.getHeaderSize(false) == 2); hdrbuf[] = 0; f.writeHeader(hdrbuf[0 .. 2], null); assert(hdrbuf[0 .. 2] == [0, 125]); assert(f.getHeaderSize(true) == 6); hdrbuf[] = 0; f.writeHeader(hdrbuf[0 .. 6], rng); assert(hdrbuf[0 .. 2] == [0, 128|125]); assert(hdrbuf[2 .. 6].all!(b => b == 13)); f.payload = new ubyte[126]; assert(f.getHeaderSize(false) == 4); hdrbuf[] = 0; f.writeHeader(hdrbuf[0 .. 4], null); assert(hdrbuf[0 .. 4] == [0, 126, 0, 126]); assert(f.getHeaderSize(true) == 8); hdrbuf[] = 0; f.writeHeader(hdrbuf[0 .. 8], rng); assert(hdrbuf[0 .. 4] == [0, 128|126, 0, 126]); assert(hdrbuf[4 .. 8].all!(b => b == 13)); f.payload = new ubyte[65535]; assert(f.getHeaderSize(false) == 4); hdrbuf[] = 0; f.writeHeader(hdrbuf[0 .. 4], null); assert(hdrbuf[0 .. 4] == [0, 126, 255, 255]); assert(f.getHeaderSize(true) == 8); hdrbuf[] = 0; f.writeHeader(hdrbuf[0 .. 8], rng); assert(hdrbuf[0 .. 4] == [0, 128|126, 255, 255]); assert(hdrbuf[4 .. 8].all!(b => b == 13)); f.payload = new ubyte[65536]; assert(f.getHeaderSize(false) == 10); hdrbuf[] = 0; f.writeHeader(hdrbuf[0 .. 10], null); assert(hdrbuf[0 .. 10] == [0, 127, 0, 0, 0, 0, 0, 1, 0, 0]); assert(f.getHeaderSize(true) == 14); hdrbuf[] = 0; f.writeHeader(hdrbuf[0 .. 14], rng); assert(hdrbuf[0 .. 10] == [0, 128|127, 0, 0, 0, 0, 0, 1, 0, 0]); assert(hdrbuf[10 .. 14].all!(b => b == 13)); } /** * Generate a challenge key for the protocol upgrade phase. */ private string generateChallengeKey(scope RandomNumberStream rng) { ubyte[16] buffer; rng.read(buffer); return Base64.encode(buffer); } private string computeAcceptKey(string challengekey) { immutable(ubyte)[] b = challengekey.representation; immutable(ubyte)[] a = s_webSocketGuid.representation; SHA1 hash; hash.start(); hash.put(b); hash.put(a); auto result = Base64.encode(hash.finish()); return to!(string)(result); } vibe.d-0.8.2/inet/000077500000000000000000000000001324361747700136455ustar00rootroot00000000000000vibe.d-0.8.2/inet/dub.sdl000066400000000000000000000003461324361747700151260ustar00rootroot00000000000000name "inet" description "Internet standard functionality" targetType "library" dependency "vibe-d:core" version="*" dependency "vibe-d:stream" version="*" dependency "vibe-d:textfilter" version="*" sourcePaths "." importPaths "." vibe.d-0.8.2/inet/meson.build000066400000000000000000000036101324361747700160070ustar00rootroot00000000000000# Meson file for Vibe INet vibe_inet_src_dir = include_directories('.') vibe_inet_src = [ 'vibe/inet/message.d', 'vibe/inet/mimetypes.d', 'vibe/inet/path.d', 'vibe/inet/url.d', 'vibe/inet/urltransfer.d', 'vibe/inet/webform.d', ] # # Install Includes # install_subdir('vibe/', install_dir: 'include/d/vibe/') # # Build Targets # inet_link_with = [vibe_utils_lib, vibe_core_lib, vibe_data_lib, vibe_stream_lib, vibe_textfilter_lib] # Internet standard functionality vibe_inet_lib = library('vibe-inet', [vibe_inet_src], include_directories: [vibe_utils_src_dir, vibe_core_src_dir, vibe_data_src_dir, vibe_stream_src_dir, vibe_textfilter_src_dir], install: true, link_with: [inet_link_with], version: project_version, soversion: project_soversion ) pkgc.generate(name: 'vibe-inet', libraries: [vibe_inet_lib] + inet_link_with, subdirs: 'd/vibe', version: project_version, description: 'Internet standard functionality for Vibe.' ) # # Tests # vibe_test_inet_exe = executable('vibe-test_inet', [vibe_inet_src], include_directories: [vibe_utils_src_dir, vibe_core_src_dir, vibe_data_src_dir, vibe_stream_src_dir, vibe_textfilter_src_dir, openssl_inc, libevent_inc], dependencies: [zlib_dep, crypto_dep, ssl_dep, libevent_dep], link_with: [inet_link_with], d_args: meson.get_compiler('d').unittest_args(), link_args: '-main' ) test('vibe-test_inet', vibe_test_inet_exe) vibe.d-0.8.2/inet/vibe/000077500000000000000000000000001324361747700145725ustar00rootroot00000000000000vibe.d-0.8.2/inet/vibe/inet/000077500000000000000000000000001324361747700155315ustar00rootroot00000000000000vibe.d-0.8.2/inet/vibe/inet/message.d000066400000000000000000000243101324361747700173220ustar00rootroot00000000000000/** Internet message handling according to RFC822/RFC5322 Copyright: © 2012-2014 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.inet.message; import vibe.core.log; import vibe.core.stream; import vibe.stream.operations; import vibe.utils.array; import vibe.internal.allocator; import vibe.utils.string; import vibe.utils.dictionarylist; import std.conv; import std.datetime; import std.exception; import std.range; import std.string; /** Parses an internet header according to RFC5322 (with RFC822 compatibility). Params: input = Input stream from which the header is parsed dst = Destination map to write into max_line_length = The maximum allowed length of a single line alloc = Custom allocator to use for allocating strings rfc822_compatible = Flag indicating that duplicate fields should be merged using a comma */ void parseRFC5322Header(InputStream)(InputStream input, ref InetHeaderMap dst, size_t max_line_length = 1000, IAllocator alloc = vibeThreadAllocator(), bool rfc822_compatible = true) if (isInputStream!InputStream) { string hdr, hdrvalue; void addPreviousHeader() { if (!hdr.length) return; if (rfc822_compatible) { if (auto pv = hdr in dst) { *pv ~= "," ~ hdrvalue; // RFC822 legacy support } else { dst[hdr] = hdrvalue; } } else dst.addField(hdr, hdrvalue); } string readStringLine() @safe { auto ret = input.readLine(max_line_length, "\r\n", alloc); return () @trusted { return cast(string)ret; } (); } string ln; while ((ln = readStringLine()).length > 0) { if (ln[0] != ' ' && ln[0] != '\t') { addPreviousHeader(); auto colonpos = ln.indexOf(':'); enforce(colonpos >= 0, "Header is missing ':'."); enforce(colonpos > 0, "Header name is empty."); hdr = ln[0..colonpos].stripA(); hdrvalue = ln[colonpos+1..$].stripA(); } else { hdrvalue ~= " " ~ ln.stripA(); } } addPreviousHeader(); } unittest { // test usual, empty and multiline header import vibe.stream.memory; ubyte[] hdr = cast(ubyte[])"A: a \r\nB: \r\nC:\r\n\tc\r\n\r\n".dup; InetHeaderMap map; parseRFC5322Header(createMemoryStream(hdr), map); assert(map.length == 3); assert(map["A"] == "a"); assert(map["B"] == ""); assert(map["C"] == " c"); } unittest { // fail for empty header names import std.exception; import vibe.stream.memory; auto hdr = cast(ubyte[])": test\r\n\r\n".dup; InetHeaderMap map; assertThrown(parseRFC5322Header(createMemoryStream(hdr), map)); } private immutable monthStrings = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; /** Writes an RFC-822/5322 date string to the given output range. */ void writeRFC822DateString(R)(ref R dst, SysTime time) { writeRFC822DateString(dst, cast(Date)time); } /// ditto void writeRFC822DateString(R)(ref R dst, Date date) { static immutable dayStrings = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; dst.put(dayStrings[date.dayOfWeek]); dst.put(", "); writeDecimal2(dst, date.day); dst.put(' '); dst.put(monthStrings[date.month-1]); dst.put(' '); writeDecimal(dst, date.year); } /** Writes an RFC-822 time string to the given output range. */ void writeRFC822TimeString(R)(ref R dst, SysTime time) { writeRFC822TimeString(dst, cast(TimeOfDay)time, getRFC822TimeZoneOffset(time)); } /// ditto void writeRFC822TimeString(R)(ref R dst, TimeOfDay time, int tz_offset) { writeDecimal2(dst, time.hour); dst.put(':'); writeDecimal2(dst, time.minute); dst.put(':'); writeDecimal2(dst, time.second); if (tz_offset == 0) dst.put(" GMT"); else { dst.put(' '); dst.put(tz_offset >= 0 ? '+' : '-'); if (tz_offset < 0) tz_offset = -tz_offset; writeDecimal2(dst, tz_offset / 60); writeDecimal2(dst, tz_offset % 60); } } /** Writes an RFC-822 date+time string to the given output range. */ void writeRFC822DateTimeString(R)(ref R dst, SysTime time) { writeRFC822DateTimeString(dst, cast(DateTime)time, getRFC822TimeZoneOffset(time)); } /// ditto void writeRFC822DateTimeString(R)(ref R dst, DateTime time, int tz_offset) { writeRFC822DateString(dst, time.date); dst.put(' '); writeRFC822TimeString(dst, time.timeOfDay, tz_offset); } /** Returns the RFC-822 time string representation of the given time. */ string toRFC822TimeString(SysTime time) @trusted { auto ret = new FixedAppender!(string, 14); writeRFC822TimeString(ret, time); return ret.data; } /** Returns the RFC-822/5322 date string representation of the given time. */ string toRFC822DateString(SysTime time) @trusted { auto ret = new FixedAppender!(string, 16); writeRFC822DateString(ret, time); return ret.data; } /** Returns the RFC-822 date+time string representation of the given time. */ string toRFC822DateTimeString(SysTime time) @trusted { auto ret = new FixedAppender!(string, 31); writeRFC822DateTimeString(ret, time); return ret.data; } /** Returns the offset of the given time from UTC in minutes. */ int getRFC822TimeZoneOffset(SysTime time) @safe { return cast(int)time.utcOffset.total!"minutes"; } /// Parses a date+time string according to RFC-822/5322. alias parseRFC822DateTimeString = parseRFC822DateTime; unittest { import std.typecons; auto times = [ tuple("Wed, 02 Oct 2002 08:00:00 GMT", SysTime(DateTime(2002, 10, 02, 8, 0, 0), UTC())), tuple("Wed, 02 Oct 2002 08:00:00 +0200", SysTime(DateTime(2002, 10, 02, 8, 0, 0), new immutable SimpleTimeZone(120.minutes))), tuple("Wed, 02 Oct 2002 08:00:00 -0130", SysTime(DateTime(2002, 10, 02, 8, 0, 0), new immutable SimpleTimeZone(-90.minutes))) ]; foreach (t; times) { auto st = parseRFC822DateTimeString(t[0]); auto ts = toRFC822DateTimeString(t[1]); assert(st == t[1], "Parse error: "~t[0]); assert(parseRFC822DateTimeString(ts) == t[1], "Stringify error: "~ts); } } /** Decodes a string in encoded-word form. See_Also: $(LINK http://tools.ietf.org/html/rfc2047#section-2) */ string decodeEncodedWords()(string encoded) { import std.array; Appender!string dst; () @trusted { dst = appender!string(); decodeEncodedWords(dst, encoded); } (); return dst.data; } /// ditto void decodeEncodedWords(R)(ref R dst, string encoded) { import std.base64; import std.encoding; while(!encoded.empty){ auto idx = encoded.indexOf("=?"); if( idx >= 0 ){ auto end = encoded.indexOf("?="); enforce(end > idx); dst.put(encoded[0 .. idx]); auto code = encoded[idx+2 .. end]; encoded = encoded[end+2 .. $]; idx = code.indexOf('?'); auto cs = code[0 .. idx]; auto enc = code[idx+1]; auto data = code[idx+3 .. $]; ubyte[] textenc; switch(enc){ default: textenc = cast(ubyte[])data; break; case 'B': textenc = Base64.decode(data); break; case 'Q': textenc = QuotedPrintable.decode(data, true); break; } switch(cs){ default: dst.put(sanitizeUTF8(textenc)); break; case "UTF-8": dst.put(cast(string)textenc); break; case "ISO-8859-15": // hack... case "ISO-8859-1": string tmp; transcode(cast(Latin1String)textenc, tmp); dst.put(tmp); break; } } else { dst.put(encoded); break; } } } /** Decodes a From/To header value as it appears in emails. */ void decodeEmailAddressHeader(string header, out string name, out string address) @safe { import std.utf; scope(failure) logDebug("emailbase %s", header); header = decodeEncodedWords(header); scope(failure) logDebug("emaildec %s", header); if( header[$-1] == '>' ){ auto sidx = header.lastIndexOf('<'); enforce(sidx >= 0); address = header[sidx+1 .. $-1]; header = header[0 .. sidx].strip(); if( header[0] == '"' ){ name = header[1 .. $-1]; } else { name = header.strip(); } } else { name = header; address = header; } validate(name); } /** Decodes a message body according to the specified content transfer encoding ("Content-Transfer-Encoding" header). The result is returned as a UTF-8 string. */ string decodeMessage(in ubyte[] message_body, string content_transfer_encoding) @safe { import std.algorithm; import std.base64; const(ubyte)[] msg = message_body; switch (content_transfer_encoding) { default: break; case "quoted-printable": msg = QuotedPrintable.decode(cast(const(char)[])msg); break; case "base64": try msg = Base64.decode(msg); catch(Exception e){ auto dst = appender!(ubyte[])(); try { auto dec = Base64.decoder(filter!(ch => ch != '\r' && ch != '\n')(msg)); while( !dec.empty ){ dst.put(dec.front); dec.popFront(); } } catch(Exception e){ dst.put(cast(const(ubyte)[])"\r\n-------\r\nDECODING ERROR: "); dst.put(cast(const(ubyte)[])() @trusted { return e.toString(); } ()); } msg = dst.data(); } break; } // TODO: do character encoding etc. return sanitizeUTF8(msg); } /** Behaves similar to string[string] but case does not matter for the key, the insertion order is not changed and multiple values per key are supported. This kind of map is used for MIME headers (e.g. for HTTP), where the case of the key strings does not matter. Note that the map can contain fields with the same key multiple times if addField is used for insertion. Insertion order is preserved. Note that despite case not being relevant for matching keyse, iterating over the map will yield the original case of the key that was put in. */ alias InetHeaderMap = DictionaryList!(string, false, 12); /** Performs quoted-printable decoding. */ struct QuotedPrintable { static ubyte[] decode(in char[] input, bool in_header = false) @safe { auto ret = appender!(ubyte[])(); for( size_t i = 0; i < input.length; i++ ){ if( input[i] == '=' ){ auto code = input[i+1 .. i+3]; i += 2; if( code != cast(const(ubyte)[])"\r\n" ) ret.put(code.parse!ubyte(16)); } else if( in_header && input[i] == '_') ret.put(' '); else ret.put(input[i]); } return ret.data(); } } private void writeDecimal2(R)(ref R dst, uint n) { auto d1 = n % 10; auto d2 = (n / 10) % 10; dst.put(cast(char)(d2 + '0')); dst.put(cast(char)(d1 + '0')); } private void writeDecimal(R)(ref R dst, uint n) { if( n == 0 ){ dst.put('0'); return; } // determine all digits uint[10] digits; int i = 0; while( n > 0 ){ digits[i++] = n % 10; n /= 10; } // write out the digits in reverse order while( i > 0 ) dst.put(cast(char)(digits[--i] + '0')); } vibe.d-0.8.2/inet/vibe/inet/mimetypes.d000066400000000000000000001125041324361747700177150ustar00rootroot00000000000000/** Maps file name extensions to standard mime types. Copyright: © 2012 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.inet.mimetypes; import std.path; import std.string; /** Returns the standard mime type for the extension of the specified file name. Any unknown file extension will map to "application/octet-stream". */ string getMimeTypeForFile(string filename) @safe pure { string ext = extension(filename); if( ext.length == 0 ) return "application/octet-stream"; assert(ext[0] == '.'); switch (toLower(ext[1 .. $])) { default: return "application/octet-stream"; case "ez": return "application/andrew-inset"; case "aw": return "application/applixware"; case "atom": return "application/atom+xml"; case "atomcat": return "application/atomcat+xml"; case "atomsvc": return "application/atomsvc+xml"; case "ccxml": return "application/ccxml+xml"; case "cdmia": return "application/cdmi-capability"; case "cdmic": return "application/cdmi-container"; case "cdmid": return "application/cdmi-domain"; case "cdmio": return "application/cdmi-object"; case "cdmiq": return "application/cdmi-queue"; case "cu": return "application/cu-seeme"; case "davmount": return "application/davmount+xml"; case "dssc": return "application/dssc+der"; case "xdssc": return "application/dssc+xml"; case "ecma": return "application/ecmascript"; case "emma": return "application/emma+xml"; case "epub": return "application/epub+zip"; case "exi": return "application/exi"; case "pfr": return "application/font-tdpfr"; case "stk": return "application/hyperstudio"; case "ink","inkml": return "application/inkml+xml"; case "ipfix": return "application/ipfix"; case "jar": return "application/java-archive"; case "ser": return "application/java-serialized-object"; case "class": return "application/java-vm"; case "js": return "application/javascript"; case "json": return "application/json"; case "lostxml": return "application/lost+xml"; case "hqx": return "application/mac-binhex40"; case "cpt": return "application/mac-compactpro"; case "mads": return "application/mads+xml"; case "mrc": return "application/marc"; case "mrcx": return "application/marcxml+xml"; case "ma","nb","mb": return "application/mathematica"; case "mathml": return "application/mathml+xml"; case "mbox": return "application/mbox"; case "mscml": return "application/mediaservercontrol+xml"; case "meta4": return "application/metalink4+xml"; case "mets": return "application/mets+xml"; case "mods": return "application/mods+xml"; case "m21","mp21": return "application/mp21"; case "mp4s": return "application/mp4"; case "doc","dot": return "application/msword"; case "mxf": return "application/mxf"; case "bin","dms","lha","lrf","lzh","so","iso","dmg","dist","distz","pkg","bpk","dump","elc","deploy": return "application/octet-stream"; case "oda": return "application/oda"; case "opf": return "application/oebps-package+xml"; case "ogx": return "application/ogg"; case "onetoc","onetoc2","onetmp","onepkg": return "application/onenote"; case "oxps": return "application/oxps"; case "xer": return "application/patch-ops-error+xml"; case "pdf": return "application/pdf"; case "pgp": return "application/pgp-encrypted"; case "asc","sig": return "application/pgp-signature"; case "prf": return "application/pics-rules"; case "p10": return "application/pkcs10"; case "p7m","p7c": return "application/pkcs7-mime"; case "p7s": return "application/pkcs7-signature"; case "p8": return "application/pkcs8"; case "ac": return "application/pkix-attr-cert"; case "cer": return "application/pkix-cert"; case "crl": return "application/pkix-crl"; case "pkipath": return "application/pkix-pkipath"; case "pki": return "application/pkixcmp"; case "pls": return "application/pls+xml"; case "ai","eps","ps": return "application/postscript"; case "cww": return "application/prs.cww"; case "pskcxml": return "application/pskc+xml"; case "rdf": return "application/rdf+xml"; case "rif": return "application/reginfo+xml"; case "rnc": return "application/relax-ng-compact-syntax"; case "rl": return "application/resource-lists+xml"; case "rld": return "application/resource-lists-diff+xml"; case "rs": return "application/rls-services+xml"; case "gbr": return "application/rpki-ghostbusters"; case "mft": return "application/rpki-manifest"; case "roa": return "application/rpki-roa"; case "rsd": return "application/rsd+xml"; case "rss": return "application/rss+xml"; case "rtf": return "application/rtf"; case "sbml": return "application/sbml+xml"; case "scq": return "application/scvp-cv-request"; case "scs": return "application/scvp-cv-response"; case "spq": return "application/scvp-vp-request"; case "spp": return "application/scvp-vp-response"; case "sdp": return "application/sdp"; case "setpay": return "application/set-payment-initiation"; case "setreg": return "application/set-registration-initiation"; case "shf": return "application/shf+xml"; case "smi","smil": return "application/smil+xml"; case "rq": return "application/sparql-query"; case "srx": return "application/sparql-results+xml"; case "gram": return "application/srgs"; case "grxml": return "application/srgs+xml"; case "sru": return "application/sru+xml"; case "ssml": return "application/ssml+xml"; case "sqlite","s3db","db3": return "application/x-sqlite3"; case "tei","teicorpus": return "application/tei+xml"; case "tfi": return "application/thraud+xml"; case "tsd": return "application/timestamped-data"; case "plb": return "application/vnd.3gpp.pic-bw-large"; case "psb": return "application/vnd.3gpp.pic-bw-small"; case "pvb": return "application/vnd.3gpp.pic-bw-var"; case "tcap": return "application/vnd.3gpp2.tcap"; case "pwn": return "application/vnd.3m.post-it-notes"; case "aso": return "application/vnd.accpac.simply.aso"; case "imp": return "application/vnd.accpac.simply.imp"; case "acu": return "application/vnd.acucobol"; case "atc","acutc": return "application/vnd.acucorp"; case "air": return "application/vnd.adobe.air-application-installer-package+zip"; case "fxp","fxpl": return "application/vnd.adobe.fxp"; case "xdp": return "application/vnd.adobe.xdp+xml"; case "xfdf": return "application/vnd.adobe.xfdf"; case "ahead": return "application/vnd.ahead.space"; case "azf": return "application/vnd.airzip.filesecure.azf"; case "azs": return "application/vnd.airzip.filesecure.azs"; case "azw": return "application/vnd.amazon.ebook"; case "acc": return "application/vnd.americandynamics.acc"; case "ami": return "application/vnd.amiga.ami"; case "apk": return "application/vnd.android.package-archive"; case "cii": return "application/vnd.anser-web-certificate-issue-initiation"; case "fti": return "application/vnd.anser-web-funds-transfer-initiation"; case "atx": return "application/vnd.antix.game-component"; case "mpkg": return "application/vnd.apple.installer+xml"; case "m3u8": return "application/vnd.apple.mpegurl"; case "swi": return "application/vnd.aristanetworks.swi"; case "iota": return "application/vnd.astraea-software.iota"; case "aep": return "application/vnd.audiograph"; case "mpm": return "application/vnd.blueice.multipass"; case "bmi": return "application/vnd.bmi"; case "rep": return "application/vnd.businessobjects"; case "cdxml": return "application/vnd.chemdraw+xml"; case "mmd": return "application/vnd.chipnuts.karaoke-mmd"; case "cdy": return "application/vnd.cinderella"; case "cla": return "application/vnd.claymore"; case "rp9": return "application/vnd.cloanto.rp9"; case "c4g","c4d","c4f","c4p","c4u": return "application/vnd.clonk.c4group"; case "c11amc": return "application/vnd.cluetrust.cartomobile-config"; case "c11amz": return "application/vnd.cluetrust.cartomobile-config-pkg"; case "csp": return "application/vnd.commonspace"; case "cdbcmsg": return "application/vnd.contact.cmsg"; case "cmc": return "application/vnd.cosmocaller"; case "clkx": return "application/vnd.crick.clicker"; case "clkk": return "application/vnd.crick.clicker.keyboard"; case "clkp": return "application/vnd.crick.clicker.palette"; case "clkt": return "application/vnd.crick.clicker.template"; case "clkw": return "application/vnd.crick.clicker.wordbank"; case "wbs": return "application/vnd.criticaltools.wbs+xml"; case "pml": return "application/vnd.ctc-posml"; case "ppd": return "application/vnd.cups-ppd"; case "car": return "application/vnd.curl.car"; case "pcurl": return "application/vnd.curl.pcurl"; case "rdz": return "application/vnd.data-vision.rdz"; case "uvf","uvvf","uvd","uvvd": return "application/vnd.dece.data"; case "uvt","uvvt": return "application/vnd.dece.ttml+xml"; case "uvx","uvvx": return "application/vnd.dece.unspecified"; case "uvz","uvvz": return "application/vnd.dece.zip"; case "fe_launch": return "application/vnd.denovo.fcselayout-link"; case "dna": return "application/vnd.dna"; case "mlp": return "application/vnd.dolby.mlp"; case "dpg": return "application/vnd.dpgraph"; case "dfac": return "application/vnd.dreamfactory"; case "ait": return "application/vnd.dvb.ait"; case "svc": return "application/vnd.dvb.service"; case "geo": return "application/vnd.dynageo"; case "mag": return "application/vnd.ecowin.chart"; case "nml": return "application/vnd.enliven"; case "esf": return "application/vnd.epson.esf"; case "msf": return "application/vnd.epson.msf"; case "qam": return "application/vnd.epson.quickanime"; case "slt": return "application/vnd.epson.salt"; case "ssf": return "application/vnd.epson.ssf"; case "es3","et3": return "application/vnd.eszigno3+xml"; case "ez2": return "application/vnd.ezpix-album"; case "ez3": return "application/vnd.ezpix-package"; case "fdf": return "application/vnd.fdf"; case "mseed": return "application/vnd.fdsn.mseed"; case "seed","dataless": return "application/vnd.fdsn.seed"; case "gph": return "application/vnd.flographit"; case "ftc": return "application/vnd.fluxtime.clip"; case "fm","frame","maker","book": return "application/vnd.framemaker"; case "fnc": return "application/vnd.frogans.fnc"; case "ltf": return "application/vnd.frogans.ltf"; case "fsc": return "application/vnd.fsc.weblaunch"; case "oas": return "application/vnd.fujitsu.oasys"; case "oa2": return "application/vnd.fujitsu.oasys2"; case "oa3": return "application/vnd.fujitsu.oasys3"; case "fg5": return "application/vnd.fujitsu.oasysgp"; case "bh2": return "application/vnd.fujitsu.oasysprs"; case "ddd": return "application/vnd.fujixerox.ddd"; case "xdw": return "application/vnd.fujixerox.docuworks"; case "xbd": return "application/vnd.fujixerox.docuworks.binder"; case "fzs": return "application/vnd.fuzzysheet"; case "txd": return "application/vnd.genomatix.tuxedo"; case "ggb": return "application/vnd.geogebra.file"; case "ggt": return "application/vnd.geogebra.tool"; case "gex","gre": return "application/vnd.geometry-explorer"; case "gxt": return "application/vnd.geonext"; case "g2w": return "application/vnd.geoplan"; case "g3w": return "application/vnd.geospace"; case "gmx": return "application/vnd.gmx"; case "kml": return "application/vnd.google-earth.kml+xml"; case "kmz": return "application/vnd.google-earth.kmz"; case "gqf","gqs": return "application/vnd.grafeq"; case "gac": return "application/vnd.groove-account"; case "ghf": return "application/vnd.groove-help"; case "gim": return "application/vnd.groove-identity-message"; case "grv": return "application/vnd.groove-injector"; case "gtm": return "application/vnd.groove-tool-message"; case "tpl": return "application/vnd.groove-tool-template"; case "vcg": return "application/vnd.groove-vcard"; case "hal": return "application/vnd.hal+xml"; case "zmm": return "application/vnd.handheld-entertainment+xml"; case "hbci": return "application/vnd.hbci"; case "les": return "application/vnd.hhe.lesson-player"; case "hpgl": return "application/vnd.hp-hpgl"; case "hpid": return "application/vnd.hp-hpid"; case "hps": return "application/vnd.hp-hps"; case "jlt": return "application/vnd.hp-jlyt"; case "pcl": return "application/vnd.hp-pcl"; case "pclxl": return "application/vnd.hp-pclxl"; case "sfd-hdstx": return "application/vnd.hydrostatix.sof-data"; case "x3d": return "application/vnd.hzn-3d-crossword"; case "mpy": return "application/vnd.ibm.minipay"; case "afp","listafp","list3820": return "application/vnd.ibm.modcap"; case "irm": return "application/vnd.ibm.rights-management"; case "sc": return "application/vnd.ibm.secure-container"; case "icc","icm": return "application/vnd.iccprofile"; case "igl": return "application/vnd.igloader"; case "ivp": return "application/vnd.immervision-ivp"; case "ivu": return "application/vnd.immervision-ivu"; case "igm": return "application/vnd.insors.igm"; case "xpw","xpx": return "application/vnd.intercon.formnet"; case "i2g": return "application/vnd.intergeo"; case "qbo": return "application/vnd.intu.qbo"; case "qfx": return "application/vnd.intu.qfx"; case "rcprofile": return "application/vnd.ipunplugged.rcprofile"; case "irp": return "application/vnd.irepository.package+xml"; case "xpr": return "application/vnd.is-xpr"; case "fcs": return "application/vnd.isac.fcs"; case "jam": return "application/vnd.jam"; case "rms": return "application/vnd.jcp.javame.midlet-rms"; case "jisp": return "application/vnd.jisp"; case "joda": return "application/vnd.joost.joda-archive"; case "ktz","ktr": return "application/vnd.kahootz"; case "karbon": return "application/vnd.kde.karbon"; case "chrt": return "application/vnd.kde.kchart"; case "kfo": return "application/vnd.kde.kformula"; case "flw": return "application/vnd.kde.kivio"; case "kon": return "application/vnd.kde.kontour"; case "kpr","kpt": return "application/vnd.kde.kpresenter"; case "ksp": return "application/vnd.kde.kspread"; case "kwd","kwt": return "application/vnd.kde.kword"; case "htke": return "application/vnd.kenameaapp"; case "kia": return "application/vnd.kidspiration"; case "kne","knp": return "application/vnd.kinar"; case "skp","skd","skt","skm": return "application/vnd.koan"; case "sse": return "application/vnd.kodak-descriptor"; case "lasxml": return "application/vnd.las.las+xml"; case "lbd": return "application/vnd.llamagraphics.life-balance.desktop"; case "lbe": return "application/vnd.llamagraphics.life-balance.exchange+xml"; case "123": return "application/vnd.lotus-1-2-3"; case "apr": return "application/vnd.lotus-approach"; case "pre": return "application/vnd.lotus-freelance"; case "nsf": return "application/vnd.lotus-notes"; case "org": return "application/vnd.lotus-organizer"; case "scm": return "application/vnd.lotus-screencam"; case "lwp": return "application/vnd.lotus-wordpro"; case "portpkg": return "application/vnd.macports.portpkg"; case "mcd": return "application/vnd.mcd"; case "mc1": return "application/vnd.medcalcdata"; case "cdkey": return "application/vnd.mediastation.cdkey"; case "mwf": return "application/vnd.mfer"; case "mfm": return "application/vnd.mfmp"; case "flo": return "application/vnd.micrografx.flo"; case "igx": return "application/vnd.micrografx.igx"; case "mif": return "application/vnd.mif"; case "daf": return "application/vnd.mobius.daf"; case "dis": return "application/vnd.mobius.dis"; case "mbk": return "application/vnd.mobius.mbk"; case "mqy": return "application/vnd.mobius.mqy"; case "msl": return "application/vnd.mobius.msl"; case "plc": return "application/vnd.mobius.plc"; case "txf": return "application/vnd.mobius.txf"; case "mpn": return "application/vnd.mophun.application"; case "mpc": return "application/vnd.mophun.certificate"; case "xul": return "application/vnd.mozilla.xul+xml"; case "cil": return "application/vnd.ms-artgalry"; case "cab": return "application/vnd.ms-cab-compressed"; case "xls","xlm","xla","xlc","xlt","xlw": return "application/vnd.ms-excel"; case "xlam": return "application/vnd.ms-excel.addin.macroenabled.12"; case "xlsb": return "application/vnd.ms-excel.sheet.binary.macroenabled.12"; case "xlsm": return "application/vnd.ms-excel.sheet.macroenabled.12"; case "xltm": return "application/vnd.ms-excel.template.macroenabled.12"; case "eot": return "application/vnd.ms-fontobject"; case "chm": return "application/vnd.ms-htmlhelp"; case "ims": return "application/vnd.ms-ims"; case "lrm": return "application/vnd.ms-lrm"; case "thmx": return "application/vnd.ms-officetheme"; case "cat": return "application/vnd.ms-pki.seccat"; case "stl": return "application/vnd.ms-pki.stl"; case "ppt","pps","pot": return "application/vnd.ms-powerpoint"; case "ppam": return "application/vnd.ms-powerpoint.addin.macroenabled.12"; case "pptm": return "application/vnd.ms-powerpoint.presentation.macroenabled.12"; case "sldm": return "application/vnd.ms-powerpoint.slide.macroenabled.12"; case "ppsm": return "application/vnd.ms-powerpoint.slideshow.macroenabled.12"; case "potm": return "application/vnd.ms-powerpoint.template.macroenabled.12"; case "mpp","mpt": return "application/vnd.ms-project"; case "docm": return "application/vnd.ms-word.document.macroenabled.12"; case "dotm": return "application/vnd.ms-word.template.macroenabled.12"; case "wps","wks","wcm","wdb": return "application/vnd.ms-works"; case "wpl": return "application/vnd.ms-wpl"; case "xps": return "application/vnd.ms-xpsdocument"; case "mseq": return "application/vnd.mseq"; case "mus": return "application/vnd.musician"; case "msty": return "application/vnd.muvee.style"; case "taglet": return "application/vnd.mynfc"; case "nlu": return "application/vnd.neurolanguage.nlu"; case "nnd": return "application/vnd.noblenet-directory"; case "nns": return "application/vnd.noblenet-sealer"; case "nnw": return "application/vnd.noblenet-web"; case "ngdat": return "application/vnd.nokia.n-gage.data"; case "n-gage": return "application/vnd.nokia.n-gage.symbian.install"; case "rpst": return "application/vnd.nokia.radio-preset"; case "rpss": return "application/vnd.nokia.radio-presets"; case "edm": return "application/vnd.novadigm.edm"; case "edx": return "application/vnd.novadigm.edx"; case "ext": return "application/vnd.novadigm.ext"; case "odc": return "application/vnd.oasis.opendocument.chart"; case "otc": return "application/vnd.oasis.opendocument.chart-template"; case "odb": return "application/vnd.oasis.opendocument.database"; case "odf": return "application/vnd.oasis.opendocument.formula"; case "odft": return "application/vnd.oasis.opendocument.formula-template"; case "odg": return "application/vnd.oasis.opendocument.graphics"; case "otg": return "application/vnd.oasis.opendocument.graphics-template"; case "odi": return "application/vnd.oasis.opendocument.image"; case "oti": return "application/vnd.oasis.opendocument.image-template"; case "odp": return "application/vnd.oasis.opendocument.presentation"; case "otp": return "application/vnd.oasis.opendocument.presentation-template"; case "ods": return "application/vnd.oasis.opendocument.spreadsheet"; case "ots": return "application/vnd.oasis.opendocument.spreadsheet-template"; case "odt": return "application/vnd.oasis.opendocument.text"; case "odm": return "application/vnd.oasis.opendocument.text-master"; case "ott": return "application/vnd.oasis.opendocument.text-template"; case "oth": return "application/vnd.oasis.opendocument.text-web"; case "xo": return "application/vnd.olpc-sugar"; case "dd2": return "application/vnd.oma.dd2+xml"; case "oxt": return "application/vnd.openofficeorg.extension"; case "pptx": return "application/vnd.openxmlformats-officedocument.presentationml.presentation"; case "sldx": return "application/vnd.openxmlformats-officedocument.presentationml.slide"; case "ppsx": return "application/vnd.openxmlformats-officedocument.presentationml.slideshow"; case "potx": return "application/vnd.openxmlformats-officedocument.presentationml.template"; case "xlsx": return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; case "xltx": return "application/vnd.openxmlformats-officedocument.spreadsheetml.template"; case "docx": return "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; case "dotx": return "application/vnd.openxmlformats-officedocument.wordprocessingml.template"; case "mgp": return "application/vnd.osgeo.mapguide.package"; case "dp": return "application/vnd.osgi.dp"; case "pdb","pqa","oprc": return "application/vnd.palm"; case "paw": return "application/vnd.pawaafile"; case "str": return "application/vnd.pg.format"; case "ei6": return "application/vnd.pg.osasli"; case "efif": return "application/vnd.picsel"; case "wg": return "application/vnd.pmi.widget"; case "plf": return "application/vnd.pocketlearn"; case "pbd": return "application/vnd.powerbuilder6"; case "box": return "application/vnd.previewsystems.box"; case "mgz": return "application/vnd.proteus.magazine"; case "qps": return "application/vnd.publishare-delta-tree"; case "ptid": return "application/vnd.pvi.ptid1"; case "qxd","qxt","qwd","qwt","qxl","qxb": return "application/vnd.quark.quarkxpress"; case "bed": return "application/vnd.realvnc.bed"; case "mxl": return "application/vnd.recordare.musicxml"; case "musicxml": return "application/vnd.recordare.musicxml+xml"; case "cryptonote": return "application/vnd.rig.cryptonote"; case "cod": return "application/vnd.rim.cod"; case "rm": return "application/vnd.rn-realmedia"; case "link66": return "application/vnd.route66.link66+xml"; case "st": return "application/vnd.sailingtracker.track"; case "see": return "application/vnd.seemail"; case "sema": return "application/vnd.sema"; case "semd": return "application/vnd.semd"; case "semf": return "application/vnd.semf"; case "ifm": return "application/vnd.shana.informed.formdata"; case "itp": return "application/vnd.shana.informed.formtemplate"; case "iif": return "application/vnd.shana.informed.interchange"; case "ipk": return "application/vnd.shana.informed.package"; case "twd","twds": return "application/vnd.simtech-mindmapper"; case "mmf": return "application/vnd.smaf"; case "teacher": return "application/vnd.smart.teacher"; case "sdkm","sdkd": return "application/vnd.solent.sdkm+xml"; case "dxp": return "application/vnd.spotfire.dxp"; case "sfs": return "application/vnd.spotfire.sfs"; case "sdc": return "application/vnd.stardivision.calc"; case "sda": return "application/vnd.stardivision.draw"; case "sdd": return "application/vnd.stardivision.impress"; case "smf": return "application/vnd.stardivision.math"; case "sdw","vor": return "application/vnd.stardivision.writer"; case "sgl": return "application/vnd.stardivision.writer-global"; case "smzip": return "application/vnd.stepmania.package"; case "sm": return "application/vnd.stepmania.stepchart"; case "sxc": return "application/vnd.sun.xml.calc"; case "stc": return "application/vnd.sun.xml.calc.template"; case "sxd": return "application/vnd.sun.xml.draw"; case "std": return "application/vnd.sun.xml.draw.template"; case "sxi": return "application/vnd.sun.xml.impress"; case "sti": return "application/vnd.sun.xml.impress.template"; case "sxm": return "application/vnd.sun.xml.math"; case "sxw": return "application/vnd.sun.xml.writer"; case "sxg": return "application/vnd.sun.xml.writer.global"; case "stw": return "application/vnd.sun.xml.writer.template"; case "sus","susp": return "application/vnd.sus-calendar"; case "svd": return "application/vnd.svd"; case "sis","sisx": return "application/vnd.symbian.install"; case "xsm": return "application/vnd.syncml+xml"; case "bdm": return "application/vnd.syncml.dm+wbxml"; case "xdm": return "application/vnd.syncml.dm+xml"; case "tao": return "application/vnd.tao.intent-module-archive"; case "pcap","cap","dmp": return "application/vnd.tcpdump.pcap"; case "tmo": return "application/vnd.tmobile-livetv"; case "tpt": return "application/vnd.trid.tpt"; case "mxs": return "application/vnd.triscape.mxs"; case "tra": return "application/vnd.trueapp"; case "ufd","ufdl": return "application/vnd.ufdl"; case "utz": return "application/vnd.uiq.theme"; case "umj": return "application/vnd.umajin"; case "unityweb": return "application/vnd.unity"; case "uoml": return "application/vnd.uoml+xml"; case "vcx": return "application/vnd.vcx"; case "vsd","vst","vss","vsw": return "application/vnd.visio"; case "vis": return "application/vnd.visionary"; case "vsf": return "application/vnd.vsf"; case "wbxml": return "application/vnd.wap.wbxml"; case "wmlc": return "application/vnd.wap.wmlc"; case "wmlsc": return "application/vnd.wap.wmlscriptc"; case "wtb": return "application/vnd.webturbo"; case "nbp": return "application/vnd.wolfram.player"; case "wpd": return "application/vnd.wordperfect"; case "wqd": return "application/vnd.wqd"; case "stf": return "application/vnd.wt.stf"; case "xar": return "application/vnd.xara"; case "xfdl": return "application/vnd.xfdl"; case "hvd": return "application/vnd.yamaha.hv-dic"; case "hvs": return "application/vnd.yamaha.hv-script"; case "hvp": return "application/vnd.yamaha.hv-voice"; case "osf": return "application/vnd.yamaha.openscoreformat"; case "osfpvg": return "application/vnd.yamaha.openscoreformat.osfpvg+xml"; case "saf": return "application/vnd.yamaha.smaf-audio"; case "spf": return "application/vnd.yamaha.smaf-phrase"; case "cmp": return "application/vnd.yellowriver-custom-menu"; case "zir","zirz": return "application/vnd.zul"; case "zaz": return "application/vnd.zzazz.deck+xml"; case "vxml": return "application/voicexml+xml"; case "wgt": return "application/widget"; case "hlp": return "application/winhlp"; case "wsdl": return "application/wsdl+xml"; case "wspolicy": return "application/wspolicy+xml"; case "7z": return "application/x-7z-compressed"; case "abw": return "application/x-abiword"; case "ace": return "application/x-ace-compressed"; case "aab","x32","u32","vox": return "application/x-authorware-bin"; case "aam": return "application/x-authorware-map"; case "aas": return "application/x-authorware-seg"; case "bcpio": return "application/x-bcpio"; case "torrent": return "application/x-bittorrent"; case "bz": return "application/x-bzip"; case "bz2","boz": return "application/x-bzip2"; case "vcd": return "application/x-cdlink"; case "chat": return "application/x-chat"; case "pgn": return "application/x-chess-pgn"; case "cpio": return "application/x-cpio"; case "csh": return "application/x-csh"; case "deb","udeb": return "application/x-debian-package"; case "dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa": return "application/x-director"; case "wad": return "application/x-doom"; case "ncx": return "application/x-dtbncx+xml"; case "dtb": return "application/x-dtbook+xml"; case "res": return "application/x-dtbresource+xml"; case "dvi": return "application/x-dvi"; case "bdf": return "application/x-font-bdf"; case "gsf": return "application/x-font-ghostscript"; case "psf": return "application/x-font-linux-psf"; case "otf": return "application/x-font-otf"; case "pcf": return "application/x-font-pcf"; case "snf": return "application/x-font-snf"; case "ttf","ttc": return "application/x-font-ttf"; case "pfa","pfb","pfm","afm": return "application/x-font-type1"; case "woff": return "application/x-font-woff"; case "spl": return "application/x-futuresplash"; case "gnumeric": return "application/x-gnumeric"; case "gtar": return "application/x-gtar"; case "hdf": return "application/x-hdf"; case "jnlp": return "application/x-java-jnlp-file"; case "latex": return "application/x-latex"; case "prc","mobi": return "application/x-mobipocket-ebook"; case "application": return "application/x-ms-application"; case "wmd": return "application/x-ms-wmd"; case "wmz": return "application/x-ms-wmz"; case "xbap": return "application/x-ms-xbap"; case "mdb": return "application/x-msaccess"; case "obd": return "application/x-msbinder"; case "crd": return "application/x-mscardfile"; case "clp": return "application/x-msclip"; case "exe","dll","com","bat","msi": return "application/x-msdownload"; case "mvb","m13","m14": return "application/x-msmediaview"; case "wmf": return "application/x-msmetafile"; case "mny": return "application/x-msmoney"; case "pub": return "application/x-mspublisher"; case "scd": return "application/x-msschedule"; case "trm": return "application/x-msterminal"; case "wri": return "application/x-mswrite"; case "nc","cdf": return "application/x-netcdf"; case "p12","pfx": return "application/x-pkcs12"; case "p7b","spc": return "application/x-pkcs7-certificates"; case "p7r": return "application/x-pkcs7-certreqresp"; case "rar": return "application/x-rar-compressed"; case "sh": return "application/x-sh"; case "shar": return "application/x-shar"; case "swf": return "application/x-shockwave-flash"; case "xap": return "application/x-silverlight-app"; case "sit": return "application/x-stuffit"; case "sitx": return "application/x-stuffitx"; case "sv4cpio": return "application/x-sv4cpio"; case "sv4crc": return "application/x-sv4crc"; case "tar": return "application/x-tar"; case "tcl": return "application/x-tcl"; case "tex": return "application/x-tex"; case "tfm": return "application/x-tex-tfm"; case "texinfo","texi": return "application/x-texinfo"; case "ustar": return "application/x-ustar"; case "src": return "application/x-wais-source"; case "der","crt": return "application/x-x509-ca-cert"; case "fig": return "application/x-xfig"; case "xpi": return "application/x-xpinstall"; case "xdf": return "application/xcap-diff+xml"; case "xenc": return "application/xenc+xml"; case "xhtml","xht": return "application/xhtml+xml"; case "xml","xsl": return "application/xml"; case "dtd": return "application/xml-dtd"; case "xop": return "application/xop+xml"; case "xslt": return "application/xslt+xml"; case "xspf": return "application/xspf+xml"; case "mxml","xhvml","xvml","xvm": return "application/xv+xml"; case "yang": return "application/yang"; case "yin": return "application/yin+xml"; case "zip": return "application/zip"; case "adp": return "audio/adpcm"; case "au","snd": return "audio/basic"; case "mid","midi","kar","rmi": return "audio/midi"; case "mp4a": return "audio/mp4"; case "mpga","mp2","mp2a","mp3","m2a","m3a": return "audio/mpeg"; case "oga","ogg","spx": return "audio/ogg"; case "uva","uvva": return "audio/vnd.dece.audio"; case "eol": return "audio/vnd.digital-winds"; case "dra": return "audio/vnd.dra"; case "dts": return "audio/vnd.dts"; case "dtshd": return "audio/vnd.dts.hd"; case "lvp": return "audio/vnd.lucent.voice"; case "pya": return "audio/vnd.ms-playready.media.pya"; case "ecelp4800": return "audio/vnd.nuera.ecelp4800"; case "ecelp7470": return "audio/vnd.nuera.ecelp7470"; case "ecelp9600": return "audio/vnd.nuera.ecelp9600"; case "rip": return "audio/vnd.rip"; case "weba": return "audio/webm"; case "aac": return "audio/x-aac"; case "aif","aiff","aifc": return "audio/x-aiff"; case "m3u": return "audio/x-mpegurl"; case "wax": return "audio/x-ms-wax"; case "wma": return "audio/x-ms-wma"; case "ram","ra": return "audio/x-pn-realaudio"; case "rmp": return "audio/x-pn-realaudio-plugin"; case "wav": return "audio/x-wav"; case "cdx": return "chemical/x-cdx"; case "cif": return "chemical/x-cif"; case "cmdf": return "chemical/x-cmdf"; case "cml": return "chemical/x-cml"; case "csml": return "chemical/x-csml"; case "xyz": return "chemical/x-xyz"; case "bmp": return "image/bmp"; case "cgm": return "image/cgm"; case "g3": return "image/g3fax"; case "gif": return "image/gif"; case "ief": return "image/ief"; case "jpeg","jpg","jpe": return "image/jpeg"; case "ktx": return "image/ktx"; case "png": return "image/png"; case "btif": return "image/prs.btif"; case "svg","svgz": return "image/svg+xml"; case "tiff","tif": return "image/tiff"; case "psd": return "image/vnd.adobe.photoshop"; case "uvi","uvvi","uvg","uvvg": return "image/vnd.dece.graphic"; case "sub": return "image/vnd.dvb.subtitle"; case "djvu","djv": return "image/vnd.djvu"; case "dwg": return "image/vnd.dwg"; case "dxf": return "image/vnd.dxf"; case "fbs": return "image/vnd.fastbidsheet"; case "fpx": return "image/vnd.fpx"; case "fst": return "image/vnd.fst"; case "mmr": return "image/vnd.fujixerox.edmics-mmr"; case "rlc": return "image/vnd.fujixerox.edmics-rlc"; case "mdi": return "image/vnd.ms-modi"; case "npx": return "image/vnd.net-fpx"; case "wbmp": return "image/vnd.wap.wbmp"; case "xif": return "image/vnd.xiff"; case "webp": return "image/webp"; case "ras": return "image/x-cmu-raster"; case "cmx": return "image/x-cmx"; case "fh","fhc","fh4","fh5","fh7": return "image/x-freehand"; case "ico": return "image/x-icon"; case "pcx": return "image/x-pcx"; case "pic","pct": return "image/x-pict"; case "pnm": return "image/x-portable-anymap"; case "pbm": return "image/x-portable-bitmap"; case "pgm": return "image/x-portable-graymap"; case "ppm": return "image/x-portable-pixmap"; case "rgb": return "image/x-rgb"; case "xbm": return "image/x-xbitmap"; case "xpm": return "image/x-xpixmap"; case "xwd": return "image/x-xwindowdump"; case "eml","mime": return "message/rfc822"; case "igs","iges": return "model/iges"; case "msh","mesh","silo": return "model/mesh"; case "dae": return "model/vnd.collada+xml"; case "dwf": return "model/vnd.dwf"; case "gdl": return "model/vnd.gdl"; case "gtw": return "model/vnd.gtw"; case "mts": return "model/vnd.mts"; case "vtu": return "model/vnd.vtu"; case "wrl","vrml": return "model/vrml"; case "ics","ifb": return "text/calendar"; case "css": return "text/css"; case "csv": return "text/csv"; case "html","htm": return "text/html"; case "n3": return "text/n3"; case "txt","text","conf","def","list","log","in": return "text/plain"; case "dsc": return "text/prs.lines.tag"; case "rtx": return "text/richtext"; case "sgml","sgm": return "text/sgml"; case "tsv": return "text/tab-separated-values"; case "t","tr","roff","man","me","ms": return "text/troff"; case "ttl": return "text/turtle"; case "uri","uris","urls": return "text/uri-list"; case "vcard": return "text/vcard"; case "curl": return "text/vnd.curl"; case "dcurl": return "text/vnd.curl.dcurl"; case "scurl": return "text/vnd.curl.scurl"; case "mcurl": return "text/vnd.curl.mcurl"; case "fly": return "text/vnd.fly"; case "flx": return "text/vnd.fmi.flexstor"; case "gv": return "text/vnd.graphviz"; case "3dml": return "text/vnd.in3d.3dml"; case "spot": return "text/vnd.in3d.spot"; case "jad": return "text/vnd.sun.j2me.app-descriptor"; case "wml": return "text/vnd.wap.wml"; case "wmls": return "text/vnd.wap.wmlscript"; case "s","asm": return "text/x-asm"; case "c","cc","cxx","cpp","h","hh","dic": return "text/x-c"; case "f","for","f77","f90": return "text/x-fortran"; case "p","pas": return "text/x-pascal"; case "java": return "text/x-java-source"; case "etx": return "text/x-setext"; case "uu": return "text/x-uuencode"; case "vcs": return "text/x-vcalendar"; case "vcf": return "text/x-vcard"; case "3gp": return "video/3gpp"; case "3g2": return "video/3gpp2"; case "h261": return "video/h261"; case "h263": return "video/h263"; case "h264": return "video/h264"; case "jpgv": return "video/jpeg"; case "jpm","jpgm": return "video/jpm"; case "mj2","mjp2": return "video/mj2"; case "mp4","mp4v","mpg4": return "video/mp4"; case "mpeg","mpg","mpe","m1v","m2v": return "video/mpeg"; case "ogv": return "video/ogg"; case "qt","mov": return "video/quicktime"; case "uvh","uvvh": return "video/vnd.dece.hd"; case "uvm","uvvm": return "video/vnd.dece.mobile"; case "uvp","uvvp": return "video/vnd.dece.pd"; case "uvs","uvvs": return "video/vnd.dece.sd"; case "uvv","uvvv": return "video/vnd.dece.video"; case "dvb": return "video/vnd.dvb.file"; case "fvt": return "video/vnd.fvt"; case "mxu","m4u": return "video/vnd.mpegurl"; case "pyv": return "video/vnd.ms-playready.media.pyv"; case "uvu","uvvu": return "video/vnd.uvvu.mp4"; case "viv": return "video/vnd.vivo"; case "webm": return "video/webm"; case "f4v": return "video/x-f4v"; case "fli": return "video/x-fli"; case "flv": return "video/x-flv"; case "m4v": return "video/x-m4v"; case "asf","asx": return "video/x-ms-asf"; case "wm": return "video/x-ms-wm"; case "wmv": return "video/x-ms-wmv"; case "wmx": return "video/x-ms-wmx"; case "wvx": return "video/x-ms-wvx"; case "avi": return "video/x-msvideo"; case "movie": return "video/x-sgi-movie"; case "ice": return "x-conference/x-cooltalk"; case "gz": return "application/gzip"; case "tgz": return "application/gzip"; } } /** Returns true for a selected but incomplete list of mime-types that are describing a compressed format. This function is useful for avoiding redundant compression. */ bool isCompressedFormat(string mimetype) @safe nothrow pure @nogc { switch(mimetype){ default: return false; case "application/gzip", "application/x-compress", "application/png", "application/zip", "audio/x-mpeg", "image/png", "image/jpeg", "video/mpeg", "video/quicktime", "video/x-msvideo", "application/font-woff", "application/x-font-woff", "font/woff": return true; } } vibe.d-0.8.2/inet/vibe/inet/path.d000066400000000000000000000004261324361747700166340ustar00rootroot00000000000000/** Compatibility module - use `vibe.core.path` instead. Copyright: © 2016 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.inet.path; public import vibe.core.path; vibe.d-0.8.2/inet/vibe/inet/url.d000066400000000000000000000323771324361747700165140ustar00rootroot00000000000000/** URL parsing routines. Copyright: © 2012-2017 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.inet.url; public import vibe.core.path; import vibe.textfilter.urlencode; import vibe.utils.string; import std.array; import std.conv; import std.exception; import std.string; import std.traits : isInstanceOf; /** Represents a URL decomposed into its components. */ struct URL { @safe: private { string m_schema; string m_pathString; string m_host; ushort m_port; string m_username; string m_password; string m_queryString; string m_anchor; } /// Constructs a new URL object from its components. this(string schema, string host, ushort port, InetPath path) { m_schema = schema; m_host = host; m_port = port; version (Have_vibe_core) m_pathString = path.toString(); else m_pathString = urlEncode(path.toString(), "/"); } /// ditto this(string schema, InetPath path) { this(schema, null, 0, path); } version (Have_vibe_core) { /// ditto this(string schema, string host, ushort port, PosixPath path) { this(schema, host, port, cast(InetPath)path); } /// ditto this(string schema, PosixPath path) { this(schema, null, 0, cast(InetPath)path); } /// ditto this(string schema, string host, ushort port, WindowsPath path) { this(schema, host, port, cast(InetPath)path); } /// ditto this(string schema, WindowsPath path) { this(schema, null, 0, cast(InetPath)path); } } /** Constructs a URL from its string representation. TODO: additional validation required (e.g. valid host and user names and port) */ this(string url_string) { auto str = url_string; enforce(str.length > 0, "Empty URL."); if( str[0] != '/' ){ auto idx = str.indexOfCT(':'); enforce(idx > 0, "No schema in URL:"~str); m_schema = str[0 .. idx]; str = str[idx+1 .. $]; bool requires_host = false; if (isDoubleSlashSchema(m_schema)) { // proto://server/path style enforce(str.startsWith("//"), "URL must start with proto://..."); requires_host = true; str = str[2 .. $]; } if (schema != "file") { auto si = str.indexOfCT('/'); if( si < 0 ) si = str.length; auto ai = str[0 .. si].indexOfCT('@'); sizediff_t hs = 0; if( ai >= 0 ){ hs = ai+1; auto ci = str[0 .. ai].indexOfCT(':'); if( ci >= 0 ){ m_username = str[0 .. ci]; m_password = str[ci+1 .. ai]; } else m_username = str[0 .. ai]; enforce(m_username.length > 0, "Empty user name in URL."); } m_host = str[hs .. si]; auto findPort ( string src ) { auto pi = src.indexOfCT(':'); if(pi > 0) { enforce(pi < src.length-1, "Empty port in URL."); m_port = to!ushort(src[pi+1..$]); } return pi; } auto ip6 = m_host.indexOfCT('['); if (ip6 == 0) { // [ must be first char auto pe = m_host.indexOfCT(']'); if (pe > 0) { findPort(m_host[pe..$]); m_host = m_host[1 .. pe]; } } else { auto pi = findPort(m_host); if(pi > 0) { m_host = m_host[0 .. pi]; } } enforce(!requires_host || m_schema == "file" || m_host.length > 0, "Empty server name in URL."); str = str[si .. $]; } } this.localURI = str; } /// ditto static URL parse(string url_string) { return URL(url_string); } /// ditto static URL fromString(string url_string) { return URL(url_string); } invariant() { assert(isURLEncoded(m_pathString), "Wrong URL encoding of '"~m_pathString~"'"); } /// The schema/protocol part of the URL @property string schema() const { return m_schema; } /// ditto @property void schema(string v) { m_schema = v; } /// The url encoded path part of the URL @property string pathString() const { return m_pathString; } /// Set the path part of the URL. It should be properly encoded. @property void pathString(string s) { enforce(isURLEncoded(s), "Wrong URL encoding of the path string '"~s~"'"); m_pathString = s; } /// The path part of the URL @property InetPath path() const { version (Have_vibe_core) return InetPath(m_pathString); else return Path(urlDecode(m_pathString)); } version (Have_vibe_core) { /// ditto @property void path(Path)(Path p) if (isInstanceOf!(GenericPath, Path)) { m_pathString = (cast(InetPath)p).toString(); } } else { /// ditto @property void path(Path p) { m_pathString = p.toString().urlEncode("/"); } } /// The host part of the URL (depends on the schema) @property string host() const { return m_host; } /// ditto @property void host(string v) { m_host = v; } /// The port part of the URL (optional) @property ushort port() const { return m_port; } /// ditto @property port(ushort v) { m_port = v; } /// Get the default port for the given schema or 0 static ushort defaultPort(string schema) { switch(schema){ default: case "file": return 0; case "http": return 80; case "https": return 443; case "ftp": return 21; case "spdy": return 443; case "sftp": return 22; } } /// ditto ushort defaultPort() const { return defaultPort(m_schema); } /// The user name part of the URL (optional) @property string username() const { return m_username; } /// ditto @property void username(string v) { m_username = v; } /// The password part of the URL (optional) @property string password() const { return m_password; } /// ditto @property void password(string v) { m_password = v; } /// The query string part of the URL (optional) @property string queryString() const { return m_queryString; } /// ditto @property void queryString(string v) { m_queryString = v; } /// The anchor part of the URL (optional) @property string anchor() const { return m_anchor; } /// The path part plus query string and anchor @property string localURI() const { auto str = appender!string(); // m_pathString is already encoded str.put(m_pathString); if( queryString.length ) { str.put("?"); str.put(queryString); } if( anchor.length ) { str.put("#"); str.put(anchor); } return str.data; } /// ditto @property void localURI(string str) { auto ai = str.indexOfCT('#'); if( ai >= 0 ){ m_anchor = str[ai+1 .. $]; str = str[0 .. ai]; } else m_anchor = null; auto qi = str.indexOfCT('?'); if( qi >= 0 ){ m_queryString = str[qi+1 .. $]; str = str[0 .. qi]; } else m_queryString = null; this.pathString = str; } /// The URL to the parent path with query string and anchor stripped. @property URL parentURL() const { URL ret; ret.schema = schema; ret.host = host; ret.port = port; ret.username = username; ret.password = password; ret.path = path.parentPath; return ret; } /// Converts this URL object to its string representation. string toString() const { import std.format; auto dst = appender!string(); dst.put(schema); dst.put(":"); if (isDoubleSlashSchema(schema)) dst.put("//"); if (m_username.length || m_password.length) { dst.put(username); dst.put(':'); dst.put(password); dst.put('@'); } import std.algorithm : canFind; auto ipv6 = host.canFind(":"); if ( ipv6 ) dst.put('['); dst.put(host); if ( ipv6 ) dst.put(']'); if( m_port > 0 ) formattedWrite(dst, ":%d", m_port); dst.put(localURI); return dst.data; } bool startsWith(const URL rhs) const { if( m_schema != rhs.m_schema ) return false; if( m_host != rhs.m_host ) return false; // FIXME: also consider user, port, querystring, anchor etc version (Have_vibe_core) return this.path.bySegment.startsWith(rhs.path.bySegment); else return this.path.startsWith(rhs.path); } URL opBinary(string OP, Path)(Path rhs) const if (OP == "~" && isAnyPath!Path) { return URL(m_schema, m_host, m_port, this.path ~ rhs); } URL opBinary(string OP, Path)(Path.Segment rhs) const if (OP == "~" && isAnyPath!Path) { return URL(m_schema, m_host, m_port, this.path ~ rhs); } void opOpAssign(string OP, Path)(Path rhs) if (OP == "~" && isAnyPath!Path) { this.path = this.path ~ rhs; } void opOpAssign(string OP, Path)(Path.Segment rhs) if (OP == "~" && isAnyPath!Path) { this.path = this.path ~ rhs; } /// Tests two URLs for equality using '=='. bool opEquals(ref const URL rhs) const { if( m_schema != rhs.m_schema ) return false; if( m_host != rhs.m_host ) return false; if( m_pathString != rhs.m_pathString ) return false; return true; } /// ditto bool opEquals(const URL other) const { return opEquals(other); } int opCmp(ref const URL rhs) const { if( m_schema != rhs.m_schema ) return m_schema.cmp(rhs.m_schema); if( m_host != rhs.m_host ) return m_host.cmp(rhs.m_host); if( m_pathString != rhs.m_pathString ) return cmp(m_pathString, rhs.m_pathString); return true; } } private enum isAnyPath(P) = is(P == InetPath) || is(P == PosixPath) || is(P == WindowsPath); private bool isDoubleSlashSchema(string schema) @safe nothrow @nogc { switch (schema) { case "ftp", "http", "https", "http+unix", "https+unix": case "spdy", "sftp", "ws", "wss", "file", "redis", "tcp": return true; default: return false; } } unittest { // IPv6 auto urlstr = "http://[2003:46:1a7b:6c01:64b:80ff:fe80:8003]:8091/abc"; auto url = URL.parse(urlstr); assert(url.schema == "http", url.schema); assert(url.host == "2003:46:1a7b:6c01:64b:80ff:fe80:8003", url.host); assert(url.port == 8091); assert(url.path == InetPath("/abc"), url.path.toString()); assert(url.toString == urlstr); url.host = "abcd:46:1a7b:6c01:64b:80ff:fe80:8abc"; urlstr = "http://[abcd:46:1a7b:6c01:64b:80ff:fe80:8abc]:8091/abc"; assert(url.toString == urlstr); } unittest { auto urlstr = "https://www.example.net/index.html"; auto url = URL.parse(urlstr); assert(url.schema == "https", url.schema); assert(url.host == "www.example.net", url.host); assert(url.path == InetPath("/index.html"), url.path.toString()); assert(url.toString == urlstr); urlstr = "http://jo.doe:password@sub.www.example.net:4711/sub2/index.html?query#anchor"; url = URL.parse(urlstr); assert(url.schema == "http", url.schema); assert(url.username == "jo.doe", url.username); assert(url.password == "password", url.password); assert(url.port == 4711, to!string(url.port)); assert(url.host == "sub.www.example.net", url.host); assert(url.path.toString() == "/sub2/index.html", url.path.toString()); assert(url.queryString == "query", url.queryString); assert(url.anchor == "anchor", url.anchor); assert(url.toString == urlstr); } unittest { // issue #1044 URL url = URL.parse("http://example.com/p?query#anchor"); assert(url.schema == "http"); assert(url.host == "example.com"); assert(url.queryString == "query"); assert(url.anchor == "anchor"); assert(url.pathString == "/p"); url.localURI = "/q"; assert(url.schema == "http"); assert(url.host == "example.com"); assert(url.queryString == ""); assert(url.anchor == ""); assert(url.pathString == "/q"); url.localURI = "/q?query"; assert(url.schema == "http"); assert(url.host == "example.com"); assert(url.queryString == "query"); assert(url.anchor == ""); assert(url.pathString == "/q"); url.localURI = "/q#anchor"; assert(url.schema == "http"); assert(url.host == "example.com"); assert(url.queryString == ""); assert(url.anchor == "anchor"); assert(url.pathString == "/q"); } //websocket unittest unittest { URL url = URL("ws://127.0.0.1:8080/echo"); assert(url.host == "127.0.0.1"); assert(url.port == 8080); assert(url.localURI == "/echo"); } unittest { auto p = PosixPath("/foo bar/boo oom/"); URL url = URL("http", "example.com", 0, p); // constructor test assert(url.path == cast(InetPath)p); url.path = p; assert(url.path == cast(InetPath)p); // path assignement test assert(url.pathString == "/foo%20bar/boo%20oom/"); assert(url.toString() == "http://example.com/foo%20bar/boo%20oom/"); url.pathString = "/foo%20bar/boo%2foom/"; assert(url.pathString == "/foo%20bar/boo%2foom/"); assert(url.toString() == "http://example.com/foo%20bar/boo%2foom/"); } unittest { auto url = URL("http://example.com/some%2bpath"); assert((cast(PosixPath)url.path).toString() == "/some+path", url.path.toString()); } unittest { assert(URL("file:///test").pathString == "/test"); assert(URL("file:///test").path.toString() == "/test"); assert(URL("file://test").pathString == "test"); assert(URL("file://test").path.toString() == "test"); assert(URL("file://./test").pathString == "./test"); assert(URL("file://./test").path.toString() == "./test"); } unittest { // issue #1318 try { URL("http://something/inval%id"); assert(false, "Expected to throw an exception."); } catch (Exception e) {} } unittest { assert(URL("http+unix://%2Fvar%2Frun%2Fdocker.sock").schema == "http+unix"); assert(URL("https+unix://%2Fvar%2Frun%2Fdocker.sock").schema == "https+unix"); assert(URL("http+unix://%2Fvar%2Frun%2Fdocker.sock").host == "%2Fvar%2Frun%2Fdocker.sock"); assert(URL("http+unix://%2Fvar%2Frun%2Fdocker.sock").pathString == ""); assert(URL("http+unix://%2Fvar%2Frun%2Fdocker.sock/container/json").pathString == "/container/json"); auto url = URL("http+unix://%2Fvar%2Frun%2Fdocker.sock/container/json"); assert(URL(url.toString()) == url); } unittest { import vibe.data.serialization; static assert(isStringSerializable!URL); } unittest { // issue #1732 auto url = URL("tcp://0.0.0.0:1234"); url.port = 4321; assert(url.toString == "tcp://0.0.0.0:4321", url.toString); } vibe.d-0.8.2/inet/vibe/inet/urltransfer.d000066400000000000000000000065761324361747700202630ustar00rootroot00000000000000/** Downloading and uploading of data from/to URLs. Note that this module is scheduled for deprecation and will be replaced by another module in the future. All functions are defined as templates to avoid this dependency issue when building the library. Copyright: © 2012-2015 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.inet.urltransfer; import vibe.core.log; import vibe.core.file; import vibe.inet.url; import vibe.core.stream; import vibe.internal.interfaceproxy : asInterface; import std.exception; import std.string; /** Downloads a file from the specified URL. Any redirects will be followed until the actual file resource is reached or if the redirection limit of 10 is reached. Note that only HTTP(S) is currently supported. */ void download(HTTPClient_ = void*)(URL url, scope void delegate(scope InputStream) callback, HTTPClient_ client_ = null) { import vibe.http.client; assert(url.username.length == 0 && url.password.length == 0, "Auth not supported yet."); assert(url.schema == "http" || url.schema == "https", "Only http(s):// supported for now."); HTTPClient client; static if (is(HTTPClient_ == HTTPClient)) client = client_; if (!client) client = new HTTPClient(); scope (exit) { if (client_ !is null) client.disconnect(); } if (!url.port) url.port = url.defaultPort; foreach( i; 0 .. 10 ){ client.connect(url.host, url.port, url.schema == "https"); logTrace("connect to %s", url.host); bool done = false; client.request( (scope HTTPClientRequest req) { req.requestURL = url.localURI; logTrace("REQUESTING %s!", req.requestURL); }, (scope HTTPClientResponse res) { logTrace("GOT ANSWER!"); switch( res.statusCode ){ default: throw new HTTPStatusException(res.statusCode, "Server responded with "~httpStatusText(res.statusCode)~" for "~url.toString()); case HTTPStatus.OK: done = true; callback(res.bodyReader.asInterface!InputStream); break; case HTTPStatus.movedPermanently: case HTTPStatus.found: case HTTPStatus.seeOther: case HTTPStatus.temporaryRedirect: logTrace("Status code: %s", res.statusCode); auto pv = "Location" in res.headers; enforce(pv !is null, "Server responded with redirect but did not specify the redirect location for "~url.toString()); logDebug("Redirect to '%s'", *pv); if( startsWith((*pv), "http:") || startsWith((*pv), "https:") ){ logTrace("parsing %s", *pv); auto nurl = URL(*pv); if (!nurl.port) nurl.port = nurl.defaultPort; if (url.host != nurl.host || url.schema != nurl.schema || url.port != nurl.port) client.disconnect(); url = nurl; } else url.localURI = *pv; break; } } ); if (done) return; } enforce(false, "Too many redirects!"); assert(false); } /// ditto void download(HTTPClient_ = void*)(string url, scope void delegate(scope InputStream) callback, HTTPClient_ client_ = null) { download(URL(url), callback, client_); } /// ditto void download()(string url, string filename) { download(url, (scope input){ auto fil = openFile(filename, FileMode.createTrunc); scope(exit) fil.close(); fil.write(input); }); } /// ditto void download()(URL url, Path filename) { download(url.toString(), filename.toNativeString()); } vibe.d-0.8.2/inet/vibe/inet/webform.d000066400000000000000000000475631324361747700173560ustar00rootroot00000000000000/** Contains HTML/urlencoded form parsing and construction routines. Copyright: © 2012-2014 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig, Jan Krüger */ module vibe.inet.webform; import vibe.core.file; import vibe.core.log; import vibe.core.path; import vibe.inet.message; import vibe.stream.operations; import vibe.textfilter.urlencode; import vibe.utils.string; import vibe.utils.dictionarylist; import std.range : isOutputRange; import std.traits : ValueType, KeyType; import std.array; import std.exception; import std.string; /** Parses form data according to an HTTP Content-Type header. Writes the form fields into a key-value of type $(D FormFields), parsed from the specified $(D InputStream) and using the corresponding Content-Type header. Parsing is gracefully aborted if the Content-Type header is unrelated. Params: fields = The key-value map to which form fields must be written files = The $(D FilePart)s mapped to the corresponding key in which details on transmitted files will be written to. content_type = The value of the Content-Type HTTP header. body_reader = A valid $(D InputSteram) data stream consumed by the parser. max_line_length = The byte-sized maximum length of lines used as boundary delimitors in Multi-Part forms. */ bool parseFormData(ref FormFields fields, ref FilePartFormFields files, string content_type, InputStream body_reader, size_t max_line_length) @safe { auto ct_entries = content_type.split(";"); if (!ct_entries.length) return false; switch (ct_entries[0].strip()) { default: return false; case "application/x-www-form-urlencoded": parseURLEncodedForm(body_reader.readAllUTF8(), fields); break; case "multipart/form-data": parseMultiPartForm(fields, files, content_type, body_reader, max_line_length); break; } return false; } /** Parses a URL encoded form and stores the key/value pairs. Writes to the $(D FormFields) the key-value map associated to an "application/x-www-form-urlencoded" MIME formatted string, ie. all '+' characters are considered as ' ' spaces. */ void parseURLEncodedForm(string str, ref FormFields params) @safe { while (str.length > 0) { // name part auto idx = str.indexOf("="); if (idx == -1) { idx = vibe.utils.string.indexOfAny(str, "&;"); if (idx == -1) { params.addField(formDecode(str[0 .. $]), ""); return; } else { params.addField(formDecode(str[0 .. idx]), ""); str = str[idx+1 .. $]; continue; } } else { auto idx_amp = vibe.utils.string.indexOfAny(str, "&;"); if (idx_amp > -1 && idx_amp < idx) { params.addField(formDecode(str[0 .. idx_amp]), ""); str = str[idx_amp+1 .. $]; continue; } else { string name = formDecode(str[0 .. idx]); str = str[idx+1 .. $]; // value part for( idx = 0; idx < str.length && str[idx] != '&' && str[idx] != ';'; idx++) {} string value = formDecode(str[0 .. idx]); params.addField(name, value); str = idx < str.length ? str[idx+1 .. $] : null; } } } } /** This example demonstrates parsing using all known form separators, it builds a key-value map into the destination $(D FormFields) */ unittest { FormFields dst; parseURLEncodedForm("a=b;c;dee=asd&e=fgh&f=j%20l", dst); assert("a" in dst && dst["a"] == "b"); assert("c" in dst && dst["c"] == ""); assert("dee" in dst && dst["dee"] == "asd"); assert("e" in dst && dst["e"] == "fgh"); assert("f" in dst && dst["f"] == "j l"); } /** Parses a form in "multipart/form-data" format. If any files are contained in the form, they are written to temporary files using $(D vibe.core.file.createTempFile) and their details returned in the files field. Params: fields = The key-value map to which form fields must be written files = The $(D FilePart)s mapped to the corresponding key in which details on transmitted files will be written to. content_type = The value of the Content-Type HTTP header. body_reader = A valid $(D InputSteram) data stream consumed by the parser. max_line_length = The byte-sized maximum length of lines used as boundary delimitors in Multi-Part forms. */ void parseMultiPartForm(InputStream)(ref FormFields fields, ref FilePartFormFields files, string content_type, InputStream body_reader, size_t max_line_length) if (isInputStream!InputStream) { import std.algorithm : strip; auto pos = content_type.indexOf("boundary="); enforce(pos >= 0 , "no boundary for multipart form found"); auto boundary = content_type[pos+9 .. $].strip('"'); auto firstBoundary = () @trusted { return cast(string)body_reader.readLine(max_line_length); } (); enforce(firstBoundary == "--" ~ boundary, "Invalid multipart form data!"); while (parseMultipartFormPart(body_reader, fields, files, cast(const(ubyte)[])("\r\n--" ~ boundary), max_line_length)) {} } alias FormFields = DictionaryList!(string, true, 16); alias FilePartFormFields = DictionaryList!(FilePart, true, 0); @safe unittest { import vibe.stream.memory; auto content_type = "multipart/form-data; boundary=\"AaB03x\""; auto input = createMemoryStream(cast(ubyte[])( "--AaB03x\r\n" ~ "Content-Disposition: form-data; name=\"submit-name\"\r\n" ~ "\r\n" ~ "Larry\r\n" ~ "--AaB03x\r\n" ~ "Content-Disposition: form-data; name=\"files\"; filename=\"file1.txt\"\r\n" ~ "Content-Type: text/plain\r\n" ~ "\r\n" ~ "... contents of file1.txt ...\r\n" ~ "--AaB03x--\r\n").dup, false); FormFields fields; FilePartFormFields files; parseMultiPartForm(fields, files, content_type, input, 4096); assert(fields["submit-name"] == "Larry"); assert(files["files"].filename == "file1.txt"); } unittest { // issue #1220 - wrong handling of Content-Length import vibe.stream.memory; auto content_type = "multipart/form-data; boundary=\"AaB03x\""; auto input = createMemoryStream(cast(ubyte[])( "--AaB03x\r\n" ~ "Content-Disposition: form-data; name=\"submit-name\"\r\n" ~ "\r\n" ~ "Larry\r\n" ~ "--AaB03x\r\n" ~ "Content-Disposition: form-data; name=\"files\"; filename=\"file1.txt\"\r\n" ~ "Content-Type: text/plain\r\n" ~ "Content-Length: 29\r\n" ~ "\r\n" ~ "... contents of file1.txt ...\r\n" ~ "--AaB03x--\r\n" ~ "Content-Disposition: form-data; name=\"files\"; filename=\"file2.txt\"\r\n" ~ "Content-Type: text/plain\r\n" ~ "\r\n" ~ "... contents of file1.txt ...\r\n" ~ "--AaB03x--\r\n").dup, false); FormFields fields; FilePartFormFields files; parseMultiPartForm(fields, files, content_type, input, 4096); assert(fields["submit-name"] == "Larry"); assert(files["files"].filename == "file1.txt"); } unittest { // use of unquoted strings in Content-Disposition import vibe.stream.memory; auto content_type = "multipart/form-data; boundary=\"AaB03x\""; auto input = createMemoryStream(cast(ubyte[])( "--AaB03x\r\n" ~ "Content-Disposition: form-data; name=submitname\r\n" ~ "\r\n" ~ "Larry\r\n" ~ "--AaB03x\r\n" ~ "Content-Disposition: form-data; name=files; filename=file1.txt\r\n" ~ "Content-Type: text/plain\r\n" ~ "Content-Length: 29\r\n" ~ "\r\n" ~ "... contents of file1.txt ...\r\n" ~ "--AaB03x--\r\n").dup, false); FormFields fields; FilePartFormFields files; parseMultiPartForm(fields, files, content_type, input, 4096); assert(fields["submitname"] == "Larry"); assert(files["files"].filename == "file1.txt"); } /** Single part of a multipart form. A FilePart is the data structure for individual "multipart/form-data" parts according to RFC 1867 section 7. */ struct FilePart { InetHeaderMap headers; NativePath.Segment filename; NativePath tempPath; } private bool parseMultipartFormPart(InputStream)(InputStream stream, ref FormFields form, ref FilePartFormFields files, const(ubyte)[] boundary, size_t max_line_length) if (isInputStream!InputStream) { //find end of quoted string auto indexOfQuote(string str) { foreach (i, ch; str) { if (ch == '"' && (i == 0 || str[i-1] != '\\')) return i; } return -1; } auto parseValue(ref string str) { string res; if (str[0]=='"') { str = str[1..$]; auto pos = indexOfQuote(str); res = str[0..pos].replace(`\"`, `"`); str = str[pos..$]; } else { auto pos = str.indexOf(';'); if (pos < 0) { res = str; str = ""; } else { res = str[0 .. pos]; str = str[pos..$]; } } return res; } InetHeaderMap headers; stream.parseRFC5322Header(headers); auto pv = "Content-Disposition" in headers; enforce(pv, "invalid multipart"); auto cd = *pv; string name; auto pos = cd.indexOf("name="); if (pos >= 0) { cd = cd[pos+5 .. $]; name = parseValue(cd); } string filename; pos = cd.indexOf("filename="); if (pos >= 0) { cd = cd[pos+9 .. $]; filename = parseValue(cd); } if (filename.length > 0) { FilePart fp; fp.headers = headers; version (Have_vibe_core) fp.filename = NativePath.Segment(filename); else fp.filename = PathEntry.validateFilename(filename); auto file = createTempFile(); fp.tempPath = file.path; if (auto plen = "Content-Length" in headers) { import std.conv : to; stream.pipe(file, (*plen).to!long); enforce(stream.skipBytes(boundary), "Missing multi-part end boundary marker."); } else stream.readUntil(file, boundary); logDebug("file: %s", fp.tempPath.toString()); file.close(); files.addField(name, fp); // TODO: temp files must be deleted after the request has been processed! } else { auto data = () @trusted { return cast(string)stream.readUntil(boundary); } (); form.addField(name, data); } ubyte[2] ub; stream.read(ub, IOMode.all); if (ub == "--") { stream.pipe(nullSink()); return false; } enforce(ub == cast(const(ubyte)[])"\r\n"); return true; } /** Encodes a Key-Value map into a form URL encoded string. Writes to the $(D OutputRange) an application/x-www-form-urlencoded MIME formatted string, ie. all spaces ' ' are replaced by the '+' character Params: dst = The destination $(D OutputRange) where the resulting string must be written to. map = An iterable key-value map iterable with $(D foreach(string key, string value; map)). sep = A valid form separator, common values are '&' or ';' */ void formEncode(R, T)(auto ref R dst, T map, char sep = '&') if (isFormMap!T && isOutputRange!(R, char)) { formEncodeImpl(dst, map, sep, true); } /** The following example demonstrates the use of $(D formEncode) with a json map, the ordering of keys will be preserved in $(D Bson) and $(D DictionaryList) objects only. */ unittest { import std.array : Appender; string[string] map; map["numbers"] = "123456789"; map["spaces"] = "1 2 3 4 a b c d"; Appender!string app; app.formEncode(map); assert(app.data == "spaces=1+2+3+4+a+b+c+d&numbers=123456789" || app.data == "numbers=123456789&spaces=1+2+3+4+a+b+c+d"); } /** Encodes a Key-Value map into a form URL encoded string. Returns an application/x-www-form-urlencoded MIME formatted string, ie. all spaces ' ' are replaced by the '+' character Params: map = An iterable key-value map iterable with $(D foreach(string key, string value; map)). sep = A valid form separator, common values are '&' or ';' */ string formEncode(T)(T map, char sep = '&') if (isFormMap!T) { return formEncodeImpl(map, sep, true); } /** Writes to the $(D OutputRange) an URL encoded string as specified in RFC 3986 section 2 Params: dst = The destination $(D OutputRange) where the resulting string must be written to. map = An iterable key-value map iterable with $(D foreach(string key, string value; map)). */ void urlEncode(R, T)(auto ref R dst, T map) if (isFormMap!T && isOutputRange!(R, char)) { formEncodeImpl(dst, map, "&", false); } /** Returns an URL encoded string as specified in RFC 3986 section 2 Params: map = An iterable key-value map iterable with $(D foreach(string key, string value; map)). */ string urlEncode(T)(T map) if (isFormMap!T) { return formEncodeImpl(map, '&', false); } /** Tests if a given type is suitable for storing a web form. Types that define iteration support with the key typed as $(D string) and the value either also typed as $(D string), or as a $(D vibe.data.json.Json) like value. The latter case specifically requires a $(D .type) property that is tested for equality with $(D T.Type.string), as well as a $(D .get!string) method. */ template isFormMap(T) { import std.conv; enum isFormMap = isStringMap!T || isJsonLike!T; } private template isStringMap(T) { enum isStringMap = __traits(compiles, () { foreach (string key, string value; T.init) {} } ()); } unittest { static assert(isStringMap!(string[string])); static struct M { int opApply(int delegate(string key, string value)) { return 0; } } static assert(isStringMap!M); } private template isJsonLike(T) { enum isJsonLike = __traits(compiles, () { import std.conv; string r; foreach (string key, value; T.init) r = value.type == T.Type.string ? value.get!string : value.to!string; } ()); } unittest { import vibe.data.json; import vibe.data.bson; static assert(isJsonLike!Json); static assert(isJsonLike!Bson); } private string formEncodeImpl(T)(T map, char sep, bool form_encode) if (isStringMap!T) { import std.array : Appender; Appender!string dst; size_t len; foreach (key, ref value; map) { len += key.length; len += value.length; } // characters will be expanded, better use more space the first time and avoid additional allocations dst.reserve(len*2); dst.formEncodeImpl(map, sep, form_encode); return dst.data; } private string formEncodeImpl(T)(T map, char sep, bool form_encode) if (isJsonLike!T) { import std.array : Appender; Appender!string dst; size_t len; foreach (string key, T value; map) { len += key.length; len += value.length; } // characters will be expanded, better use more space the first time and avoid additional allocations dst.reserve(len*2); dst.formEncodeImpl(map, sep, form_encode); return dst.data; } private void formEncodeImpl(R, T)(auto ref R dst, T map, char sep, bool form_encode) if (isOutputRange!(R, string) && isStringMap!T) { bool flag; foreach (key, value; map) { if (flag) dst.put(sep); else flag = true; filterURLEncode(dst, key, null, form_encode); dst.put("="); filterURLEncode(dst, value, null, form_encode); } } private void formEncodeImpl(R, T)(auto ref R dst, T map, char sep, bool form_encode) if (isOutputRange!(R, string) && isJsonLike!T) { bool flag; foreach (string key, T value; map) { if (flag) dst.put(sep); else flag = true; filterURLEncode(dst, key, null, form_encode); dst.put("="); if (value.type == T.Type.string) filterURLEncode(dst, value.get!string, null, form_encode); else { static if (T.stringof == "Json") filterURLEncode(dst, value.to!string, null, form_encode); else filterURLEncode(dst, value.toString(), null, form_encode); } } } unittest { import vibe.utils.dictionarylist : DictionaryList; import vibe.data.json : Json; import vibe.data.bson : Bson; string[string] aaMap; DictionaryList!string dlMap; Json jsonMap = Json.emptyObject; Bson bsonMap = Bson.emptyObject; aaMap["unicode"] = "╤╳"; aaMap["numbers"] = "123456789"; aaMap["spaces"] = "1 2 3 4 a b c d"; aaMap["slashes"] = "1/2/3/4/5"; aaMap["equals"] = "1=2=3=4=5=6=7"; aaMap["complex"] = "╤╳/=$$\"'1!2()'\""; aaMap["╤╳"] = "1"; dlMap["unicode"] = "╤╳"; dlMap["numbers"] = "123456789"; dlMap["spaces"] = "1 2 3 4 a b c d"; dlMap["slashes"] = "1/2/3/4/5"; dlMap["equals"] = "1=2=3=4=5=6=7"; dlMap["complex"] = "╤╳/=$$\"'1!2()'\""; dlMap["╤╳"] = "1"; jsonMap["unicode"] = "╤╳"; jsonMap["numbers"] = "123456789"; jsonMap["spaces"] = "1 2 3 4 a b c d"; jsonMap["slashes"] = "1/2/3/4/5"; jsonMap["equals"] = "1=2=3=4=5=6=7"; jsonMap["complex"] = "╤╳/=$$\"'1!2()'\""; jsonMap["╤╳"] = "1"; bsonMap["unicode"] = "╤╳"; bsonMap["numbers"] = "123456789"; bsonMap["spaces"] = "1 2 3 4 a b c d"; bsonMap["slashes"] = "1/2/3/4/5"; bsonMap["equals"] = "1=2=3=4=5=6=7"; bsonMap["complex"] = "╤╳/=$$\"'1!2()'\""; bsonMap["╤╳"] = "1"; assert(urlEncode(aaMap) == "complex=%E2%95%A4%E2%95%B3%2F%3D%24%24%22%271%212%28%29%27%22&unicode=%E2%95%A4%E2%95%B3&spaces=1%202%203%204%20a%20b%20c%20d&numbers=123456789&slashes=1%2F2%2F3%2F4%2F5&equals=1%3D2%3D3%3D4%3D5%3D6%3D7&%E2%95%A4%E2%95%B3=1" || urlEncode(aaMap) == "slashes=1%2F2%2F3%2F4%2F5&spaces=1%202%203%204%20a%20b%20c%20d&equals=1%3D2%3D3%3D4%3D5%3D6%3D7&%E2%95%A4%E2%95%B3=1&unicode=%E2%95%A4%E2%95%B3&numbers=123456789&complex=%E2%95%A4%E2%95%B3%2F%3D%24%24%22%271%212%28%29%27%22"); assert(urlEncode(dlMap) == "unicode=%E2%95%A4%E2%95%B3&numbers=123456789&spaces=1%202%203%204%20a%20b%20c%20d&slashes=1%2F2%2F3%2F4%2F5&equals=1%3D2%3D3%3D4%3D5%3D6%3D7&complex=%E2%95%A4%E2%95%B3%2F%3D%24%24%22%271%212%28%29%27%22&%E2%95%A4%E2%95%B3=1"); assert(urlEncode(jsonMap) == "%E2%95%A4%E2%95%B3=1&equals=1%3D2%3D3%3D4%3D5%3D6%3D7&unicode=%E2%95%A4%E2%95%B3&spaces=1%202%203%204%20a%20b%20c%20d&numbers=123456789&complex=%E2%95%A4%E2%95%B3%2F%3D%24%24%22%271%212%28%29%27%22&slashes=1%2F2%2F3%2F4%2F5" || urlEncode(jsonMap) == "slashes=1%2F2%2F3%2F4%2F5&spaces=1%202%203%204%20a%20b%20c%20d&equals=1%3D2%3D3%3D4%3D5%3D6%3D7&%E2%95%A4%E2%95%B3=1&unicode=%E2%95%A4%E2%95%B3&numbers=123456789&complex=%E2%95%A4%E2%95%B3%2F%3D%24%24%22%271%212%28%29%27%22"); assert(urlEncode(bsonMap) == "unicode=%E2%95%A4%E2%95%B3&numbers=123456789&spaces=1%202%203%204%20a%20b%20c%20d&slashes=1%2F2%2F3%2F4%2F5&equals=1%3D2%3D3%3D4%3D5%3D6%3D7&complex=%E2%95%A4%E2%95%B3%2F%3D%24%24%22%271%212%28%29%27%22&%E2%95%A4%E2%95%B3=1"); { FormFields aaFields; parseURLEncodedForm(urlEncode(aaMap), aaFields); assert(urlEncode(aaMap) == urlEncode(aaFields)); FormFields dlFields; parseURLEncodedForm(urlEncode(dlMap), dlFields); assert(urlEncode(dlMap) == urlEncode(dlFields)); FormFields jsonFields; parseURLEncodedForm(urlEncode(jsonMap), jsonFields); assert(urlEncode(jsonMap) == urlEncode(jsonFields)); FormFields bsonFields; parseURLEncodedForm(urlEncode(bsonMap), bsonFields); assert(urlEncode(bsonMap) == urlEncode(bsonFields)); } assert(formEncode(aaMap) == "complex=%E2%95%A4%E2%95%B3%2F%3D%24%24%22%271%212%28%29%27%22&unicode=%E2%95%A4%E2%95%B3&spaces=1+2+3+4+a+b+c+d&numbers=123456789&slashes=1%2F2%2F3%2F4%2F5&equals=1%3D2%3D3%3D4%3D5%3D6%3D7&%E2%95%A4%E2%95%B3=1" || formEncode(aaMap) == "slashes=1%2F2%2F3%2F4%2F5&spaces=1+2+3+4+a+b+c+d&equals=1%3D2%3D3%3D4%3D5%3D6%3D7&%E2%95%A4%E2%95%B3=1&unicode=%E2%95%A4%E2%95%B3&numbers=123456789&complex=%E2%95%A4%E2%95%B3%2F%3D%24%24%22%271%212%28%29%27%22"); assert(formEncode(dlMap) == "unicode=%E2%95%A4%E2%95%B3&numbers=123456789&spaces=1+2+3+4+a+b+c+d&slashes=1%2F2%2F3%2F4%2F5&equals=1%3D2%3D3%3D4%3D5%3D6%3D7&complex=%E2%95%A4%E2%95%B3%2F%3D%24%24%22%271%212%28%29%27%22&%E2%95%A4%E2%95%B3=1"); assert(formEncode(jsonMap) == "%E2%95%A4%E2%95%B3=1&equals=1%3D2%3D3%3D4%3D5%3D6%3D7&unicode=%E2%95%A4%E2%95%B3&spaces=1+2+3+4+a+b+c+d&numbers=123456789&complex=%E2%95%A4%E2%95%B3%2F%3D%24%24%22%271%212%28%29%27%22&slashes=1%2F2%2F3%2F4%2F5" || formEncode(jsonMap) == "slashes=1%2F2%2F3%2F4%2F5&spaces=1+2+3+4+a+b+c+d&equals=1%3D2%3D3%3D4%3D5%3D6%3D7&%E2%95%A4%E2%95%B3=1&unicode=%E2%95%A4%E2%95%B3&numbers=123456789&complex=%E2%95%A4%E2%95%B3%2F%3D%24%24%22%271%212%28%29%27%22"); assert(formEncode(bsonMap) == "unicode=%E2%95%A4%E2%95%B3&numbers=123456789&spaces=1+2+3+4+a+b+c+d&slashes=1%2F2%2F3%2F4%2F5&equals=1%3D2%3D3%3D4%3D5%3D6%3D7&complex=%E2%95%A4%E2%95%B3%2F%3D%24%24%22%271%212%28%29%27%22&%E2%95%A4%E2%95%B3=1"); { FormFields aaFields; parseURLEncodedForm(formEncode(aaMap), aaFields); assert(formEncode(aaMap) == formEncode(aaFields)); FormFields dlFields; parseURLEncodedForm(formEncode(dlMap), dlFields); assert(formEncode(dlMap) == formEncode(dlFields)); FormFields jsonFields; parseURLEncodedForm(formEncode(jsonMap), jsonFields); assert(formEncode(jsonMap) == formEncode(jsonFields)); FormFields bsonFields; parseURLEncodedForm(formEncode(bsonMap), bsonFields); assert(formEncode(bsonMap) == formEncode(bsonFields)); } } vibe.d-0.8.2/lib/000077500000000000000000000000001324361747700134545ustar00rootroot00000000000000vibe.d-0.8.2/lib/subprojects/000077500000000000000000000000001324361747700160175ustar00rootroot00000000000000vibe.d-0.8.2/lib/subprojects/diet.wrap000066400000000000000000000001301324361747700176310ustar00rootroot00000000000000[wrap-git] directory=diet url=https://github.com/rejectedsoftware/diet-ng revision=head vibe.d-0.8.2/lib/win-amd64/000077500000000000000000000000001324361747700151625ustar00rootroot00000000000000vibe.d-0.8.2/lib/win-amd64/libeay32.dll000066400000000000000000077620001324361747700173050ustar00rootroot00000000000000MZ@ !L!This program cannot be run in DOS mode. $xAf/5/5/5H5/5H5/5H5/5H5/5v5/5.52/5/5/55/55/5K5/55/5Rich/5PEd X"  B @ `rtH *B8p.text{ `.rdatab@@.data @.pdata *,n@@.rsrcH@@.relocBD@BH(HL$0HT$8LD$@LL$HH wHL$0HT$8LD$@LL$HHH(`H(HL$0HT$8LD$@LL$HH 'HL$0HT$8LD$@LL$HHlH(`H(HL$0HT$8LD$@LL$HH AגHL$0HT$8LD$@LL$HHH(`H(HL$0HT$8LD$@LL$HH 臒HL$0HT$8LD$@LL$HH̎H(` H(HL$0HT$8LD$@LL$HH 7HL$0HT$8LD$@LL$HH|H(`(H(HL$0HT$8LD$@LL$HH QHL$0HT$8LD$@LL$HH,H(`0H(HL$0HT$8LD$@LL$HH 藑HL$0HT$8LD$@LL$HH܍H(`8H(HL$0HT$8LD$@LL$HH GHL$0HT$8LD$@LL$HHH(`@H(HL$0HT$8LD$@LL$HH a HL$0HT$8LD$@LL$HH<H(`HH(HL$0HT$8LD$@LL$HH  觐HL$0HT$8LD$@LL$HHH(`PH(HL$0HT$8LD$@LL$HH  WHL$0HT$8LD$@LL$HHH(`XH(HL$0HT$8LD$@LL$HH q HL$0HT$8LD$@LL$HHLH(``H(HL$0HT$8LD$@LL$HH ! 跏HL$0HT$8LD$@LL$HHH(`hH(HL$0HT$8LD$@LL$HH ыgHL$0HT$8LD$@LL$HHH(`pH(HL$0HT$8LD$@LL$HH HL$0HT$8LD$@LL$HH\H(`xH(HL$0HT$8LD$@LL$HH 1ǎHL$0HT$8LD$@LL$HH H(H(HL$0HT$8LD$@LL$HH wHL$0HT$8LD$@LL$HHH(H(HL$0HT$8LD$@LL$HH 'HL$0HT$8LD$@LL$HHlH(H(HL$0HT$8LD$@LL$HH A׍HL$0HT$8LD$@LL$HHH(H(HL$0HT$8LD$@LL$HH 臍HL$0HT$8LD$@LL$HH̉H(H(HL$0HT$8LD$@LL$HH 7HL$0HT$8LD$@LL$HH|H(H(HL$0HT$8LD$@LL$HH QHL$0HT$8LD$@LL$HH,H(̋LDuDHÐ1H H ÐH|$Ht$HHI1GA1GenuAineIA ntelA AuthAentiA cAMDA ua=rSA¸A AAr6LI¸D8AAr,AAAAr 1_Au@us AtwAA AAs 1Ѓt A!gI DLL H|$Ht$ÐH1HsHt HHIuÐHt HRHIHHRHHIuHuÐffffffH1H1M1M1M1M1HD$ÐHrHHDÐHrHHDH|$Ht$HHHLUSATAVAWHHH<E]MU H9AAAADAA1BxjA!A1DVDAA1BVA!A1DVD AA1Bp $A!A1DV DAA1BνA!A1DVDAA1B|A!A1DVDAA1B*ƇGA!A1DVD AA1BF0A!A1DVDAA1BFA!A1DV DAA1BؘiA!A1DV$DAA1BDA!A1DV(D AA1B[A!A1DV,DAA1B\A!A1DV0DAA1B"kA!A1DV4DAA1BqA!A1DV8D AA1BCyA!A1DVyZ1AAi(DT$$D1D!؍2yZD1AEq,Dl$(AD1!F-yZAD1AAQ0DDt$,D1!G&yZAD1AAi4T$0D1D!FyZA1AAEq8l$4DAD1D!=yZ1AAQnD1A3l$$D؉T$ 3l$,D13l$2nD1AD3t$(l$$D3t$0D1D3t$F-nD1AAA3T$,Dt$(D3T$4D13T$ G&n1AA3l$0DT$,D3l$813l$Fn1AAAD3t$4Dl$0DD3t$<1D3t$=nD1AA3T$8DDt$43$D13T$A6nD1A3l$nD1A3l$ D؉T$3l$(D13,$2nD1AD3t$$Dl$ DD3t$,D!؉D3t$F-ܼD1AA!AA3T$(DDt$$D3T$0!D3T$G&ܼ1A!AA3l$,T$(3l$4!D3l$ Fܼ1AD!AAAD3t$0l$,D3t$8D!DD3t$=ܼD1AD!A3T$4DDt$0D3T$ܼD1D!A3l$DT$D3l$$D!3l$<2ܼD1D!AD3t$ Dl$DD3t$(D!؉D34$F-ܼD1AA!AA3T$$DDt$ D3T$,!D3T$G&ܼ1A!AA3l$(T$$3l$0!D3l$Fܼ1AD!AAAD3t$,l$(D3t$4D!DD3t$ =ܼD1AD!A3T$0DDt$,D3T$8D!3T$A6ܼD1D!A3l$4T$03l$bD1A3l$D؉T$3l$ D13l$82bD1AD3t$l$D3t$$D1D3t$VWSUATAUAVAWH@I@xIL~L9]IL_L9FH@@HXHhL`LhLpIIMMMVWSUATAUAVAWH@I@xIL:L9LL9HpIHVWSUATAUAVAWH@I@xIIqMY8ENL9riIESNL9sUIHxI HHXHhL`LhLpIIMMMHxHpIIIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8oH@A_A^A]A\][_^H|$Ht$HHHLLs;E ESE[A A(A(M7A@AE AP'AbSUATAUAVAWIHH`HHH|$@Ht$HHT$PL\$X_OW DGDODWD_H-g1D&EAAAEE1A E1D$$A1E!AEE1A E1EADeA1A1AAD!AEA1DEHmEDfAEAADA1A D1Dd$E1!AED1A A1ADDeE11AAA!AEE1DEHmEDfAEAAAA1A E1Dd$E1A!AEE1A A1EEDeE1E1AED!AEA1DEHmEDf AEAAA1A 1Dd$ E1!AE1A A1ADDeE1D1AEA!AEE1DEHmEDfAEAAAA1A A1Dd$E1A!AAA1A A1EEDeE1E1ADD!AE1EDHmDDfEAAAE1A 1Dd$A1D!AA1A E1ADeA1D1ADA!AED1EDHmDDfEAAAEE1A A1Dd$A1E!AAA1A E1EADeA1A1AD!AE1EDHmDDfEAAADE1A D1Dd$A1D!AAD1A E1ADeA11AA!AED1EDHmDDf EAAAEE1A E1Dd$ A1E!AEE1A E1EADeA1A1AAD!AEA1DEHmEDf$AEAADA1A D1Dd$$E1!AED1A A1ADDeE11AAA!AEE1DEHmEDf(AEAAAA1A E1Dd$(E1A!AEE1A A1EEDeE1E1AED!AEA1DEHmEDf,AEAAA1A 1Dd$,E1!AE1A A1ADDeE1D1AEA!AEE1DEHmEDf0AEAAAA1A A1Dd$0E1A!AAA1A A1EEDeE1E1ADD!AE1EDHmDDf4EAAAE1A 1Dd$4A1D!AA1A E1ADeA1D1ADA!AED1EDHmDDf8EAAAEE1A A1Dd$8A1E!AAA1A E1EADeA1A1AD!AE1EDHmDDfLvLnLfHn H^(Hf0H|$Ht$Ð/BD7q۵/BD7q۵[V9Y?^[V9Y?^[1$} U[1$} Ut]rހܛtt]rހܛtiGƝ̡ $iGƝ̡ $o,-tJܩ\ڈvo,-tJܩ\ڈvRQ>m1'YRQ>m1'Y GQcg)) GQcg)) '8!.m,M 8S '8!.m,M 8STs e jv.,rTs e jv.,r迢KfpK£Qlǡ迢KfpK£Ql$օ5pj$օ5pjl7LwH'4l7LwH'4 9JNOʜ[o.h 9JNOʜ[o.htocxxȄnjtocxxȄnjlPxqlPxq        SHA256 block transform for x86_64, CRYPTOGAMS by H|$Ht$HHHLHd$)p)xD)@D)HD)PH ooWfofpfpɱfpfDof:floofon f8ov0foAff8fDo8fpfDo8foAff88fpHv@88foAff88fpfof:f88foAf88fpfof:f88fof88fpfof:f88foA f88fpfof:f88foA@f88fpfof:f88foA`f88fpfof:f88fof88fpfof:f88fof88fpfof:f88fof88fpfof:f88fof88fpfof:f88fof88fpfof:f88fo f88fpfof:8ffo@f8fp8fAo8fo`fƐ8fpHʐ8fAfA&fpұfpfpɱfmf:W(p(xD(@D(HD(PHH|$Ht$ÐH|$Ht$HHHLSUATAUAVAWIHHHHH|$@Ht$HHT$PL\$X)t$`)|$pD)$D)$_OW DGDODWD_ fo=ooNoV f8o^0H-f8foefom f8ffou@f8fo}`ffff$$Afl$ft$ 1f|$0EHAfoDEfoA E1E1AA1f:E!E1f:D$AE1A foA1EfoAD!frA1E1fADfrAAfpEAfrEEfA A1E1Afr E1fA!A1fr DT$DfE1A fo1EfAA!E1fr EA1fADfsEAEfAEAA fsA1E1fAE1A!fpA1DL$EfsE1A E1EAfD!E1EfpPD1ADfoAAfr EAfsEAfA A1A1AE1fsA!A1DD$ fDA1A fpD1EfouAA!fsE1EE1fADEfAEf4$AfoEAfoA A1A1AE1f:A!A1f:T$EA1A foE1DfoAD!frE1DD1fAAfrEfpAAfrDAfA E1A1Afr A1fE!E1fr L$fA1A foD1DfAA!A1fr DE1fAAfsDEAfADEA fsE1A1fAA1E!fpE1\$AfsA1A A1DAfD!A1DfpP1AAfoEfr AAfsDEfA E1E1AA1fsE!E1D$fE1A fp1Dfou AA!fsA1DA1fAADfEAft$AfoDEfoA E1E1AA1f:E!E1f:D\$ AE1A foA1EfoAD!frA1E1fADfrAAfpEAfrEEfA A1E1Afr E1fA!A1fr DT$$DfE1A fo1EfAA!E1fr EA1fADfsEAEfAEAA fsA1E1fAE1A!fpA1DL$(EfsE1A E1EAfD!E1EfpPD1ADfoAAfr EAfsEAfA A1A1AE1fsA!A1DD$,fDA1A fpD1Efou@AA!fsE1EE1fADEfAEft$ AfoEAfoA A1A1AE1f:A!A1f:T$0EA1A foE1DfoAD!frE1DD1fAAfrEfpAAfrDAfA E1A1Afr A1fE!E1fr L$4fA1A foD1DfAA!A1fr DE1fAAfsDEAfADEA fsE1A1fAA1E!fpE1\$8AfsA1A A1DAfD!A1DfpP1AAfoEfr AAfsDEfA E1E1AA1fsE!E1D$LvLnLfHn H^(Hf0H|$Ht$ÐH|$Ht$HHHLSUATAUAVAWIHHHHH|$@Ht$HHT$PL\$X)t$`)|$pD)$D)$w_OW DGDODWD_yoyo o=ooNoV o^0yH-yqieam u@}`$$Al$t$ 1|$0EHqEDEaE E1E1rEA1E!E1D$ArE1E A1rEED!A1E1pEDAr AEEEEE r A1E1EE1A!A1r DT$DE1E 1EsEA!E1EA1EDEAsEEEAE A1IE1EE1A!A1DL$pPEE1E r E1EEsD!E1ED1EDsAAEEEAIE A1A1EE1A!uA1DD$ DA1E D1EEA!E1EE1EDEAE4$iEEAyE A1A1rEE1A!A1T$ErA1E E1rDED!E1DD1pEAr EAEDAE r E1A1EA1E!E1r L$A1E D1DsEA!A1DE1EADEsAEDEE E1IA1EA1E!E1\$pPAA1E r A1DEsD!A1D1EAsEAEDEIE E1E1EA1E!u E1D$E1E 1DEA!A1DA1EADEAt$aEDEqE E1E1rEA1E!E1D\$ ArE1E A1rEED!A1E1pEDAr AEEEEE r A1E1EE1A!A1r DT$$DE1E 1EsEA!E1EA1EDEAsEEEAE A1IE1EE1A!A1DL$(pPEE1E r E1EEsD!E1ED1EDsAAEEEAIE A1A1EE1A!u@A1DD$,DA1E D1EEA!E1EE1EDEAEt$ yEEAiE A1A1rEE1A!A1T$0ErA1E E1rDED!E1DD1pEAr EAEDAE r E1A1EA1E!E1r L$4A1E D1DsEA!A1DE1EADEsAEDEE E1IA1EA1E!E1\$8pPAA1E r A1DEsD!A1D1EAsEAEDEIE E1E1EA1E!u`E1D$LvLnLfHn H^(Hf0H|$Ht$ÐH|$Ht$HHHLSUATAUAVAWIH`HHHHH|$@Ht$HHT$PL\$X)t$`)|$pD)$D)$wHI_H9֋OLDW DGDODWD_}o<}o To=oFoNoVo^}8$u8L$}m8T$ ue8\$0H-meem u@}`$$E1l$ Hd$4$1|$ EH Hd$uD$E!C{eC{ B0G#rB8E1C{G#E1Arc{G+A1rc{ c{BD!E11pE1E;Er D$A!c{{ G3G"r BhA1c{G"E1Dr C{G*1C{ C{B sA!E1A1E1G:AD$A!c{sc{ G2G !BpE1c{MG !E1EC{G )E1pPC{ C{B r D!E1D1sE1E 9AD$A!c{s{ G 1G b`A1c{MG E1DC{G(D1uC{ C{BA!E1E1E1G8A4$m$A!c{}c{ G0B"rbxE1c{B"E1ErC{B*E1rC{ C{ED!E1D1pE1:Ar $E!C{{ B2B !r b A1C{B !E1r c{B )D1c{ c{E sA!E1E1E1B 9E$E!C{sC{ B 1B#b(E1C{MB#E1Ac{B+A1pPc{ c{E r D!E11sE1;E$E!C{s{ B3B B0A1C{MB E1c{B(1u c{ c{EA!E1A1E1B8Et$ Hd$eD$E!C{uC{ B0G#rB8E1C{G#E1Arc{G+A1rc{ c{BD!E11pE1E;Er D$A!c{{ G3G"r BhA1c{G"E1Dr C{G*1C{ C{B sA!E1A1E1G:AD$A!c{sc{ G2G !BpE1c{MG !E1EC{G )E1pPC{ C{B r D!E1D1sE1E 9AD$A!c{s{ G 1G b`A1c{MG E1DC{G(D1u@C{ C{BA!E1E1E1G8A4$}$A!c{mc{ G0B"rbxE1c{B"E1ErC{B*E1rC{ C{ED!E1D1pE1:Ar $E!C{{ B2B !r b A1C{B !E1r c{B )D1c{ c{E sA!E1E1E1B 9E$E!C{sC{ B 1B#b(E1C{MB#E1Ac{B+A1pPc{ c{E r D!E11sE1;E$E!C{s{ B3B B0A1C{MB E1c{B(1u`c{ c{EA!E1A1E1B8Et$ H}GD\$@E!C{C{ B0G#B8E1C{G#E1Ac{G+A1c{ c{BD!E11E1E;EDT$DA!c{{ G3G"BhA1c{G"E1DC{G*1C{ C{B A!E1A1E1G:ADL$HA!c{c{ G2G !BpE1c{G !E1EC{G )E1C{ C{B D!E1D1E1E 9ADD$LA!c{{ G 1G b`A1c{G E1DC{G(D1C{ C{BA!E1E1E1G8AT$`A!c{c{ G0B"bxE1c{B"E1EC{B*E1C{ C{ED!E1D1E1:AL$dE!C{{ B2B !b A1C{B !E1c{B )D1c{ c{E A!E1E1E1B 9E\$hE!C{C{ B 1B#b(E1C{B#E1Ac{B+A1c{ c{E D!E11E1;ED$lE!C{{ B3B B0A1C{B E1c{B(1c{ c{EA!E1A1E1B8ED$E!C{C{ B0G#B8E1C{G#E1Ac{G+A1c{ c{BD!E11E1E;EDT$A!c{{ G3G"BhA1c{G"E1DC{G*1C{ C{B A!E1A1E1G:ADL$A!c{c{ G2G !BpE1c{G !E1EC{G )E1C{ C{B D!E1D1E1E 9ADD$ A!c{{ G 1G b`A1c{G E1DC{G(D1C{ C{BA!E1E1E1G8AT$ A!c{c{ G0B"bxE1c{B"E1EC{B*E1C{ C{ED!E1D1E1:AL$$E!C{{ B2B !b A1C{B !E1c{B )D1c{ c{E A!E1E1E1B 9E\$(E!C{C{ B 1B#b(E1C{B#E1Ac{B+A1c{ c{E D!E11E1;ED$,E!C{{ B3B B0A1C{B E1c{B(1c{ c{EA!E1A1E1B8EH$DH$_OW DGDODWD__OW DGDODWD_H;uPE11ED]E!C{C{ B0G#B8E1C{G#E1Ac{G+A1c{ c{BD!E11E1E;EDUA!c{{ G3G"BhA1c{G"E1DC{G*1C{ C{B A!E1A1E1G:ADMA!c{c{ G2G !BpE1c{G !E1EC{G )E1C{ C{B D!E1D1E1E 9ADEA!c{{ G 1G b`A1c{G E1DC{G(D1C{ C{BA!E1E1E1G8AU0A!c{c{ G0B"bxE1c{B"E1EC{B*E1C{ C{ED!E1D1E1:AM4E!C{{ B2B !b A1C{B !E1c{B )D1c{ c{E A!E1E1E1B 9E]8E!C{C{ B 1B#b(E1C{B#E1Ac{B+A1c{ c{E D!E11E1;EELvLnLfHn H^(Hf0H|$Ht$ÐVWSUATAUAVAWH@I@xIIqMY8ENL9IESNL9LcL9r H%HHH@XH@0HXHhL`LhLpLxIIMMMMLbL9rHv`IHHxHpIIIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8;"H@A_A^A]A\][_^ÐVWSUATAUAVAWH@I@xILL9UL#L9EHpI H,H|$Ht$HHHLLE ESE[AA(A( :A@AE AP'SUATAUAVAWIHHHHH$H$H$L$HH_HOHWLG LO(LW0L_8HH-H1L&MIIIMM1IM1L$$I1M!IMM1IM1MILeI1I1IIL!IMI1LMHmMLfIMIILI1IL1Ld$M1H!IML1II1ILLeM1H1III!IMM1LMHmMLfIMIIII1IM1Ld$M1I!IMM1II1MMLeM1M1IML!IMI1LMHmMLfIMIIHI1IH1Ld$M1H!IMH1II1ILLeM1L1IMI!IMM1LMHmMLf IMIIII1II1Ld$ M1I!III1II1MMLeM1M1ILL!IMH1MLHmLLf(MIIIHM1IH1Ld$(I1L!IIH1IM1IHLeI1L1ILI!IML1MLHmLLf0MIIIMM1II1Ld$0I1M!III1IM1MILeI1I1IHL!IMH1MLHmLLf8MIIILM1IL1Ld$8I1L!IIL1IM1IHLeI1H1IHI!IML1MLHmLLf@MIIIMM1IM1Ld$@I1M!IMM1IM1MILeI1I1IIL!IMI1LMHmMLfHIMIILI1IL1Ld$HM1H!IML1II1ILLeM1H1III!IMM1LMHmMLfPIMIIII1IM1Ld$PM1I!IMM1II1MMLeM1M1IML!IMI1LMHmMLfXIMIIHI1IH1Ld$XM1H!IMH1II1ILLeM1L1IMI!IMM1LMHmMLf`IMIIII1II1Ld$`M1I!III1II1MMLeM1M1ILL!IMH1MLHmLLfhMIIIHM1IH1Ld$hI1L!IIH1IM1IHLeI1L1ILI!IML1MLHmLLfpMIIIMM1II1Ld$pI1M!III1IM1MILeI1I1IHL!IMH1MLHmLLfxMIIILM1IL1Ld$xI1L!IIL1IM1IHLeI1H1IHI!IML1MLHmLl$L|$pMILMI*M1IIM1IIM1M1Ld$HL$$MMIIMM1IM1L$$I1M!IMM1IM1MILeI1I1IIL!IMI1LMHmLl$H|$xMIMIH*M1IIL1IHM1L1Ld$PLd$IIMILI1IL1Ld$M1H!IML1II1ILLeM1H1III!IMM1LMHmLl$L<$MIMMI*M1IIM1IIM1M1Ld$XLd$IMMIII1IM1Ld$M1I!IMM1II1MMLeM1M1IML!IMI1LMHmLl$ H|$MIMIH*M1IIL1IHM1L1Ld$`Ld$IIMIHI1IH1Ld$M1H!IMH1II1ILLeM1L1IMI!IMM1LMHmLl$(L|$MIMMI*M1IIM1IIM1M1Ld$hLd$ IMMIII1II1Ld$ M1I!III1II1MMLeM1M1ILL!IMH1MLHmLl$0H|$MILIH*M1IIL1IHM1L1Ld$pLd$(MIIIHM1IH1Ld$(I1L!IIH1IM1IHLeI1L1ILI!IML1MLHmLl$8L|$ MILMI*M1IIM1IIM1M1Ld$xLd$0MMIIMM1II1Ld$0I1M!III1IM1MILeI1I1IHL!IMH1MLHmLl$@H|$(MILIH*M1IIL1IHM1L1L$$Ld$8MIIILM1IL1Ld$8I1L!IIL1IM1IHLeI1H1IHI!IML1MLHmLl$HL|$0MILMI*M1IIM1IIM1M1Ld$Ld$@MMIIMM1IM1Ld$@I1M!IMM1IM1MILeI1I1IIL!IMI1LMHmLl$PH|$8MIMIH*M1IIL1IHM1L1Ld$Ld$HIIMILI1IL1Ld$HM1H!IML1II1ILLeM1H1III!IMM1LMHmLl$XL|$@MIMMI*M1IIM1IIM1M1Ld$Ld$PIMMIII1IM1Ld$PM1I!IMM1II1MMLeM1M1IML!IMI1LMHmLl$`H|$HMIMIH*M1IIL1IHM1L1Ld$ Ld$XIIMIHI1IH1Ld$XM1H!IMH1II1ILLeM1L1IMI!IMM1LMHmLl$hL|$PMIMMI*M1IIM1IIM1M1Ld$(Ld$`IMMIII1II1Ld$`M1I!III1II1MMLeM1M1ILL!IMH1MLHmLl$pH|$XMILIH*M1IIL1IHM1L1Ld$0Ld$hMIIIHM1IH1Ld$hI1L!IIH1IM1IHLeI1L1ILI!IML1MLHmLl$xL|$`MILMI*M1IIM1IIM1M1Ld$8Ld$pMMIIMM1II1Ld$pI1M!III1IM1MILeI1I1IHL!IMH1MLHmL,$H|$hMILIH*M1IIL1IHM1L1Ld$@Ld$xMIIILM1IL1Ld$xI1L!IIL1IM1IHLeI1H1IHI!IML1MLHm}H$LHHH_HOHWLG LO(LW0L_8H;$HH_HOHWLG LO(LW0L_8H$L>LvLnLfHn H^(Hf0H|$Ht$Ð"(ט/Be#D7q"(ט/Be#D7q/;Mۉ۵/;Mۉ۵8H[V9Y8H[V9YO?m^O?m^BؾopE[BؾopE[N1$} UN1$} Uo{t]r;ހo{t]r;ހ5%ܛ&it5%ܛ&itJi%O8GJi%O8GՌƝew̡ $ՌƝew̡ $u+Yo,-ntJu+Yo,-ntJAܩ\SڈvAܩ\SڈvfRQ>2-m1fRQ>2-m1?!'Y?!'Y= % G= % GoQcpn g))oQcpn g))/F '&&\8!./F '&&\8!.*Zm,M߳ 8S*Zm,M߳ 8ScTs ew< jvcTs ew< jvG.;5,rG.;5,rdL迢0BKfdL迢0BKfpK0TQlǑpK0TQlReU$ReU$* qW5ѻ2pj* qW5ѻ2pjҸSAQl7ҸSAQl7LwH'Hᵼ4LwH'Hᵼ4cZų 9ˊAJNcZų 9ˊAJNscwOʜ[o.hscwOʜ[o.h]t`/Cocx]t`/CocxrxȄ9dnjrxȄ9dnj(c#齂lP(c#齂lPyƲ+SrxqyƲ+SrxqƜa&>'!Ǹќa&>'!Ǹ}xnO}}xnO}orgȢ}c orgȢ}c ?G5 q ?G5 q}#w($@{2}#w($@{2 ˾L*~e)YB>˾L*~e)Y:o_XGJDl:o_XGJDl  SHA512 block transform for x86_64, CRYPTOGAMS by H|$Ht$HHHLSUATAUAVAWIHHHHH$H$H$L$)$)$D)$D)$D)$D)$wHH_HOHWLG LO(LW0L_8yooH-=oNoV yo^0qof@ionPaov`Yo~pQyEIqMAiUa]y$YEyL$QM yT$ IU@y\$0A]`yD$@IyL$PHyT$`H1y\$pM HcqILcQMIHx8M1M19sII1yM!M1L$IǏHxM1IA9I1MIL!hxI1MA9H1IũsLIyIMޏHx*IMA!MII1M1A!IM1I!I1yLT$LM1IyUH1MII!M1MI1ILMIMy$ciIMcIIIHx8I1M19sIM1qI!I1LL$M׏HxM1IA9M1MIL!hxM1MA9L1IũsLIqIMΏHx*IMA!III1I1A!IM1I!I1qLD$LI1IqUL1MII!M1MM1ILMIMyT$caIMcAIIHx8I1I19sIM1iI!I1HT$ MǏHxI1IA9M1LIL!hxM1LA9L1IũsIHiMI֏Hx*ILA!IIM1I1A!II1M!M1iHL$(HI1IiUL1LII!I1LM1IILMIyT$ cYILcyMIHx8M1I19sII1aM!M1H\$0IϏHxI1IA9I1LIL!hxI1LA9H1IũsIHaMIޏHx*ILA!MIM1M1A!II1M!M1aHD$8HM1IaUH1LII!I1LI1IILMIyT$0cQILcqMIHx8M1M19sII1YM!M1L\$@IǏHxM1IA9I1MIL!hxI1MA9H1IũsLIYIMޏHx*IMA!MII1M1A!IM1I!I1YLT$HLM1IYUH1MII!M1MI1ILMIMyT$@cIIMciIIHx8I1M19sIM1QI!I1LL$PM׏HxM1IA9M1MIL!hxM1MA9L1IũsLIQIMΏHx*IMA!III1I1A!IM1I!I1QLD$XLI1IQU L1MII!M1MM1ILMIMyT$PcAIMcaIIHx8I1I19sIM1II!I1HT$`MǏHxI1IA9M1LIL!hxM1LA9L1IũsIHIMI֏Hx*ILA!IIM1I1A!II1M!M1IHL$hHI1IIU@L1LII!I1LM1IILMIyT$`cyILcYMIHx8M1I19sII1AM!M1H\$pIϏHxI1IA9I1LIL!hxI1LA9H1IũsIHAMIޏHx*ILA!MIM1M1A!II1M!M1AHD$xHM1IAU`H1LII!I1LI1IILMIyT$pILMIM1M1II1M!M1L$IM1II1MIL!I1MH1ILIIMIMMII1M1IM1I!I1LT$LM1IH1MII!M1MI1ILMIMIMIII1M1IM1I!I1LL$MM1IM1MIL!M1ML1ILIIMIMIII1I1IM1I!I1LD$LI1IL1MII!M1MM1ILMIMIMIII1I1IM1I!I1HT$ MI1IM1LIL!M1LL1IIHMIILIIM1I1II1M!M1HL$(HI1IL1LII!I1LM1IILMIILMIM1I1II1M!M1H\$0II1II1LIL!I1LH1IIHMIILMIM1M1II1M!M1HD$8HM1IH1LII!I1LI1IILMIILMIM1M1II1M!M1L\$@IM1II1MIL!I1MH1ILIIMIMMII1M1IM1I!I1LT$HLM1IH1MII!M1MI1ILMIMIMIII1M1IM1I!I1LL$PMM1IM1MIL!M1ML1ILIIMIMIII1I1IM1I!I1LD$XLI1IL1MII!M1MM1ILMIMIMIII1I1IM1I!I1HT$`MI1IM1LIL!M1LL1IIHMIILIIM1I1II1M!M1HL$hHI1IL1LII!I1LM1IILMIILMIM1I1II1M!M1H\$pII1II1LIL!I1LH1IIHMIILMIM1M1II1M!M1HD$xHM1IH1LII!I1LI1IILMIH$LHHH_HOHWLG LO(LW0L_8H;$HH_HOHWLG LO(LW0L_8H$w($($D($D($D($D($L>LvLnLfHn H^(Hf0H|$Ht$ÐH|$Ht$HHHLSUATAUAVAWIHHHHH$H$H$L$)$)$D)$D)$D)$D)$wHH_HOHWLG LO(LW0L_8yooH-=oNoV yo^0qof@ionPaov`Yo~pQyEIqMAiUa]y$YEyL$QM yT$ IU@y\$0A]`yD$@IyL$PHyT$`H1y\$pM HcqMLcQMM)sM1M1yMI1!sM!M11s8L$IA!M1M)sI1MA9ML!1sI1MA9H1MšsLIA9IMũsMMyMMűsI1M1A!MM1)s*I!I1A!LT$L1s*M1MA!H1MA!MI!yM1MyUI1MLMIMy$ciMMcIIM)sI1M1qMM1!sI!I11s8LL$MA!M1M)sM1MA9ML!1sM1MA9L1MšsLIA9IMũsMMqIMűsI1I1A!MM1)s*I!I1A!LD$L1s*I1MA!L1MA!MI!qM1MqUM1MLMIMyT$caMMcAIM)sI1I1iMM1!sI!I11s8HT$ MA!I1M)sM1LA9ML!1sM1LA9L1MšsIHA9MIũsMLiIMűsM1I1A!MI1)s*M!M1A!HL$(H1s*I1MA!L1LA!MI!iI1LiUM1MILMIyT$ cYMLcyMM)sM1I1aMI1!sM!M11s8H\$0IA!I1M)sI1LA9ML!1sI1LA9H1MšsIHA9MIũsMLaMMűsM1M1A!MI1)s*M!M1A!HD$8H1s*M1MA!H1LA!MI!aI1LaUI1MILMIyT$0cQMLcqMM)sM1M1YMI1!sM!M11s8L\$@IA!M1M)sI1MA9ML!1sI1MA9H1MšsLIA9IMũsMMYMMűsI1M1A!MM1)s*I!I1A!LT$HL1s*M1MA!H1MA!MI!YM1MYUI1MLMIMyT$@cIMMciIM)sI1M1QMM1!sI!I11s8LL$PMA!M1M)sM1MA9ML!1sM1MA9L1MšsLIA9IMũsMMQIMűsI1I1A!MM1)s*I!I1A!LD$XL1s*I1MA!L1MA!MI!QM1MQU M1MLMIMyT$PcAMMcaIM)sI1I1IMM1!sI!I11s8HT$`MA!I1M)sM1LA9ML!1sM1LA9L1MšsIHA9MIũsMLIIMűsM1I1A!MI1)s*M!M1A!HL$hH1s*I1MA!L1LA!MI!II1LIU@M1MILMIyT$`cyMLcYMM)sM1I1AMI1!sM!M11s8H\$pIA!I1M)sI1LA9ML!1sI1LA9H1MšsIHA9MIũsMLAMMűsM1M1A!MI1)s*M!M1A!HD$xH1s*M1MA!H1LA!MI!AI1LAU`I1MILMIyT$pMLMMM1M1MI1M!M1L$IM1MI1MML!I1MH1MLIIMMMMMI1M1MM1I!I1LT$LM1MH1MMI!M1MI1MLMIMMMIMI1M1MM1I!I1LL$MM1MM1MML!M1ML1MLIIMMMIMI1I1MM1I!I1LD$LI1ML1MMI!M1MM1MLMIMMMIMI1I1MM1I!I1HT$ MI1MM1LML!M1LL1MIHMIMLIMM1I1MI1M!M1HL$(HI1ML1LMI!I1LM1MILMIMLMMM1I1MI1M!M1H\$0II1MI1LML!I1LH1MIHMIMLMMM1M1MI1M!M1HD$8HM1MH1LMI!I1LI1MILMIMLMMM1M1MI1M!M1L\$@IM1MI1MML!I1MH1MLIIMMMMMI1M1MM1I!I1LT$HLM1MH1MMI!M1MI1MLMIMMMIMI1M1MM1I!I1LL$PMM1MM1MML!M1ML1MLIIMMMIMI1I1MM1I!I1LD$XLI1ML1MMI!M1MM1MLMIMMMIMI1I1MM1I!I1HT$`MI1MM1LML!M1LL1MIHMIMLIMM1I1MI1M!M1HL$hHI1ML1LMI!I1LM1MILMIMLMMM1I1MI1M!M1H\$pII1MI1LML!I1LH1MIHMIMLMMM1M1MI1M!M1HD$xHM1MH1LMI!I1LI1MILMIH$LHHH_HOHWLG LO(LW0L_8H;$HH_HOHWLG LO(LW0L_8 H$w($($D($D($D($D($L>LvLnLfHn H^(Hf0H|$Ht$ÐH|$Ht$HHHLSUATAUAVAWIHHHHHĀH$H$H$L$)$)$D)$D)$D)$D)$wHHIH_H9HOLDHWLG LO(LW0L_8 oFoNoVH-o^ofonovo~}o}8$u8L$}m8T$ ue8\$0m]8d$@eU8l$P]M8t$`UE8|$p}EMuMEmUe]}$]E}L$ UM }T$@MU@}\$`Hd$E]`}$M1}L$ H}T$@H1}\$`MHHd$cuL$M!C)cUCJ0O#-sBM1C}%sO#M1I5s8A%c'O+I1-sA=c"cJ5sA=L!M1H1ťsA=M1M;Mŭs}L$I!c)ŵsA%O3O"-s*A%BI1c5s*A%O"M1LA%C'O*H1}C"CJ }UI!M1I1M1O:I}$cmL$ I!c)cMcO2O !-sBM1cu%sO !M1M5s8A%C'O )M1-sA=C"CJ 5sA=L!M1L1ťsA=M1M 9IŭsuL$(I!c)ŵsA%O 1O -s*A%bI1c5s*A%O M1LA%C'O(L1uC"CJuUI!M1M1M1O8I}T$ ceH$@I!c)cEcO0J"-sbM1cm%sJ"M1M5s8A%C'J*M1-sA=C"CM5sA=L!M1L1ťsA=M1H:IŭsmH$HM!C)ŵsA%J2J !-s*A%bI1C5s*A%J !M1HA%c'J )L1mc"cM mUI!M1M1M1J 9M}T$@c]H$`M!C)c}CJ 1J#-sbM1Ce%sJ#M1I5s8A%c'J+I1-sA=c"cM 5sA=L!M1H1ťsA=M1H;MŭseH$hM!C)ŵsA%J3J -s*A%BI1C5s*A%J M1HA%c'J(H1ec"cMeUI!M1I1M1J8M}T$`Hd$cUL$M!C)cuCJ0O#-sBM1C]%sO#M1I5s8A%c'O+I1-sA=c"cJ5sA=L!M1H1ťsA=M1M;Mŭs]L$I!c)ŵsA%O3O"-s*A%BI1c5s*A%O"M1LA%C'O*H1]C"CJ ]UI!M1I1M1O:I}$cML$ I!c)cmcO2O !-sBM1cU%sO !M1M5s8A%C'O )M1-sA=C"CJ 5sA=L!M1L1ťsA=M1M 9IŭsUL$(I!c)ŵsA%O 1O -s*A%bI1c5s*A%O M1LA%C'O(L1UC"CJUU I!M1M1M1O8I}T$ cEH$@I!c)cecO0J"-sbM1cM%sJ"M1M5s8A%C'J*M1-sA=C"CM5sA=L!M1L1ťsA=M1H:IŭsMH$HM!C)ŵsA%J2J !-s*A%bI1C5s*A%J !M1HA%c'J )L1Mc"cM MU@I!M1M1M1J 9M}T$@c}H$`M!C)c]CJ 1J#-sbM1CE%sJ#M1I5s8A%c'J+I1-sA=c"cM 5sA=L!M1H1ťsA=M1H;MŭsEH$hM!C)ŵsA%J3J -s*A%BI1C5s*A%J M1HA%c'J(H1Ec"cMEU`I!M1I1M1J8M}T$`H}?L$M!C)CJ0O#BM1CO#M1Ic'O+I1c"cJL!M1H1M1M;ML$I!c)O3O"BI1cO"M1LC'O*H1C"CJ I!M1I1M1O:IL$I!c)cO2O !BM1cO !M1MC'O )M1C"CJ L!M1L1M1M 9IL$I!c)O 1O bI1cO M1LC'O(L1C"CJI!M1M1M1O8IH$I!c)cO0J"bM1cJ"M1MC'J*M1C"CML!M1L1M1H:IH$M!C)J2J !bI1CJ !M1Hc'J )L1c"cM I!M1M1M1J 9MH$M!C)CJ 1J#bM1CJ#M1Ic'J+I1c"cM L!M1H1M1H;MH$M!C)J3J BI1CJ M1Hc'J(H1c"cMI!M1I1M1J8ML$M!C)CJ0O#BM1CO#M1Ic'O+I1c"cJL!M1H1M1M;MLT$I!c)O3O"BI1cO"M1LC'O*H1C"CJ I!M1I1M1O:ILL$ I!c)cO2O !BM1cO !M1MC'O )M1C"CJ L!M1L1M1M 9ILD$(I!c)O 1O bI1cO M1LC'O(L1C"CJI!M1M1M1O8IHT$@I!c)cO0J"bM1cJ"M1MC'J*M1C"CML!M1L1M1H:IHL$HM!C)J2J !bI1CJ !M1Hc'J )L1c"cM I!M1M1M1J 9MH\$`M!C)CJ 1J#bM1CJ#M1Ic'J+I1c"cM L!M1H1M1H;MHD$hM!C)J3J BI1CJ M1Hc'J(H1c"cMI!M1I1M1J8MH$LH$HH_HOHWLG LO(LW0L_8HH_HOHWLG LO(LW0L_8H;M1HH1M L]M!C)CJ0O#BM1CO#M1Ic'O+I1c"cJL!M1H1M1M;MLUI!c)O3O"BI1cO"M1LC'O*H1C"CJ I!M1I1M1O:ILM0I!c)cO2O !BM1cO !M1MC'O )M1C"CJ L!M1L1M1M 9ILE8I!c)O 1O bI1cO M1LC'O(L1C"CJI!M1M1M1O8IHUPI!c)cO0J"bM1cJ"M1MC'J*M1C"CML!M1L1M1H:IHMXM!C)J2J !bI1CJ !M1Hc'J )L1c"cM I!M1M1M1J 9MH]pM!C)CJ 1J#bM1CJ#M1Ic'J+I1c"cM L!M1H1M1H;MHExM!C)J3J BI1CJ M1Hc'J(H1c"cMI!M1I1M1J8MHmH9H$LH$HH_HOHWLG LO(HLW0IL_8H;$HLDH_HOHWLG LO(LW0L_8H,$HeH$w($($D($D($D($D($L>LvLnLfHn H^(Hf0H|$Ht$VWSUATAUAVAWH@I@xIIqMY8ENL9IESNL9LSL9r H%HHHH@0HXHhL`LhLpLxIIMMMMLL9rHI HHxHpIIIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8H@A_A^A]A\][_^H|$Ht$HHHLH H=N+"2HSUH$X)4$)|$D)D$ D)L$0D)PD)XD)`D)hD)pD)xH HH$H-xH$$1LN9Oхɉ LNLNN9OхɉKLNLV N(9OхɉKLNL^0N89OхɉK LN݅)DoH$Do_ Dog@Doo`Dofom`fDo}fAnM@@fAnMI@fAnMR@fAn#M[@fbfAnHfbfEnIfbfEnBf8fAn{fAbfEofEfDbfAofAofArfAfAfAbfEof@fDfAnPfArffAofEfEnIfrfDfArfEf8fEnBfDfAn{fAbfEofEfDbfAofAofArfAfAfAbfEofHfDfAnXfArffAofEfEnIfrfDfArfEf8fEnBfDfAn{fAbfEofEfDbfAofAofArfAfAfAbfEofPfDfAn`fArffAofEfEnIfrfDfArfEf8fEnBfDfAn{fAbfEofEfDbfAofAofArfAfAfAbfEofXfDfAn@fArffAofEfEnIfrfDfArfEf8fEnBfDfAn{fAbfEofEfDbfAofAofArfAfAfAbfEof`fDfAnHfArffAofEfEnIfrfDfArfEf8fEnBfDfAn{fAbfEofEfDbfAofAofArfAfAfAbfEof@fDfAnPfArffAofEfEnIfrfDfArfEf8fEnBfDfAn{fAbfEofEfDbfAofAofArfAfAfAbfEofHfDfAnXfArffAofEfEnIfrfDfArfEf8fEnBfDfAn{fAbfEofEfDbfAofAofArfAfAfAbfEofPfDfAn`fArffAofEfEnIfrfDfArfEf8fEnBfDfAn{fAbfEofEfDbfAofAofArfAfAfAbfEoffDfAn@fArffAofEfEnIfrfDfArfEf8fEnBfDfAn{fAbfEofEfDbfAofAofArfAfAfAbfEof`fDfAnHfArffAofEfEnIfrfDfArfEf8fEnBfDfAn{fAbfEofEfDbfAofAofArfAfAfAbfEof@ fDfAnPfArffAofEfEnIfrfDfArfEf8fEnBfDfAn{fAbfEofEfDbfAofAofArfAfAfAbfEofH0fDfAnXfArffAofEfEnIfrfDfArfEf8fEnBfDfAn{fAbfEofEfDbfAofAofArfAfAfAbfEofP@fDfAn`fArffAofEfEnIfrfDfArfEf8fEnBfDfAn{fAbfEofEfDbfAofAofArfAfAfAbfEofXPfDfAn@fArffAofEfEnIfrfDfArfEf8fEnBfDfoHfAn{fAbfEofEfDbfAofAofArAH?fAfAfAbfEof``fDfArffAoAI?fEfrfDAJ?fArfEf8AK?fDfoPffoXfEoffEfAofArffAofAfofAfEofrff@pfDfArffAofEfrfDfArfEffDffo`fEofPfEfAofArffAofAfofAfEofrffHfDfArffAofEfrfDfArfEffDffo@fEofX fEfAofArffAofAfofAfEofrffPfDfArffAofEfrfDfArfEffDffoHfEof`0fEfAofArffAofAfofAfEofrffXfDfArffAofEfrfDfArfEffDffoPfEof@@fEfAofArffAofAfofAfEofrff`fDfArffAofEfrfDfArfEffDfDo}ffoXfEofAofHPfEfArfAfEof@fDffArfAfAofrfofEfrfDffArfEffDffo fEofAofP`fEfArfAfEofHfDffArfAfAofrfofEfrfDffArfEffDffo@fEofAofXpfEfArfAfEofPfDffArfAfAofrfofEfrfDffArfEffDffoH fEofAof`fEfArfAfEofXfDffArfAfAofrfofEfrfDffArfEffDffoP0fEofAof@fEfArfAfEof fDffArfAfAofrfofEfrfDffArfEffDffoX@fEofAofHfEfArfAfEof@fDffArfAfAofrfofEfrfDffArfEffDffo`PfEofAofPfEfArfAfEofH fDffArfAfAofrfofEfrfDffArfEffDffo@`fEofAofXfEfArfAfEofP0fDffArfAfAofrfofEfrfDffArfEffDffoHpfEofAof`fEfArfAfEofX@fDffArfAfAofrfofEfrfDffArfEffDffoPfEofAof@fEfArfAfEof`PfDffArfAfAofrfofEfrfDffArfEffDffoXfEofAofHfEfArfAfEof@`fDffArfAfAofrfofEfrfDffArfEffDffo`fEofAoffEfArfAfEofHpfDffArfAfAofrfofEfrfDffArfEffDffo@fEofAofXfEfArfAfEofPfDffArfAfAofrfofEfrfDffArfEffDffoHfEofAof` fEfArfAfEofXfDffArfAfAofrfofEfrfDffArfEffDffoPfEofAof@0fEfArfAfEof`fDffArfAfAofrfofEfrfDffArfEffDffoXfEofAofH@fEfArfAfEof@fDffArfAfAofrfofEfrfDffArfEffDffo`fEofAofPPfEfArfAfEofHfDffArfAfAofrfofEfrfDffArfEffDffofEofAofX`fEfArfAfEofPfDffArfAfAofrfofEfrfDffArfEffDffoHfEofAof`pfEfArfAfEofXfDffArfAfAofrfofEfrfDffArfEffDffoP fEofAof@fEfArfAfEof`fDffArfAfAofrfofEfrfDffArfEffDfDo} ffoX0fEofAofHffEfArfEofAfAofofArfDfAffDfEfrfAfAofrffDfArfEffDffo`@fEofAofPffEfArfEofAfAofofArfDfAfHfDfEfrfAfAofrffDfArfEffDffo@PfEofAofXffEfArfEofAfAofofArfDfAfP fDfEfrfAfAofrffDfArfEffDffoH`fEofAof`ffEfArfEofAfAofofArfDfAfX0fDfEfrfAfAofrffDfArfEffDffoPpfEofAof@ffEfArfEofAfAofofArfDfAf`@fDfEfrfAfAofrffDfArfEffDffoXfEofAofHffEfArfEofAfAofofArfDfAf@PfDfEfrfAfAofrffDfArfEffDffo`fEofAofPffEfArfEofAfAofofArfDfAfH`fDfEfrfAfAofrffDfArfEffDffo@fEofAofffEfArfEofAfAofofArfDfAfPpfDfEfrfAfAofrffDfArfEffDffoHfEofAof`ffEfArfEofAfAofofArfDfAfXfDfEfrfAfAofrffDfArfEffDffoPfEofAof@ ffEfArfEofAfAofofArfDfAf`fDfEfrfAfAofrffDfArfEffDffoXfEofAofH0ffEfArfEofAfAofofArfDfAf@fDfEfrfAfAofrffDfArfEffDffo`fEofAofP@ffEfArfEofAfAofofArfDfAfHfDfEfrfAfAofrffDfArfEffDffo@fEofAofXPffEfArfEofAfAofofArfDfAfPfDfEfrfAfAofrffDfArfEffDffofEofAof``ffEfArfEofAfAofofArfDfAfXfDfEfrfAfAofrffDfArfEffDffoPfEofAof@pffEfArfEofAfAofofArfDfAf`fDfEfrfAfAofrffDfArfEffDffoX fEofAofHffEfArfEofAfAofofArfDfAf@fDfEfrfAfAofrffDfArfEffDffo`0fEofAofPffEfArfEofAfAofofArfDfAffDfEfrfAfAofrffDfArfEffDffo@@fEofAofXffEfArfEofAfAofofArfDfAfPfDfEfrfAfAofrffDfArfEffDffoHPfEofAof`ffEfArfEofAfAofofArfDfAfX fDfEfrfAfAofrffDfArfEffDffoP`fEofAof@ffEfArfEofAfAofofArfDfAf`0fDfEfrfAfAofrffDfArfEffDfDo}@ffoXpfEofAofHfEfArfAfEof@@fDffArfAfAofrfofEfrfDffArfEffDffo`fEofAofPfEfArfAfEofHPfDffArfAfAofrfofEfrfDffArfEffDffo@fEofAofXfEfArfAfEofP`fDffArfAfAofrfofEfrfDffArfEffDffoHfEofAof fEfArfAfEofXpfDffArfAfAofrfofEfrfDffArfEffDffoPfEofAof@fEfArfAfEof`fDffArfAfAofrfofEfrfDffArfEffDffoXfEofAofH fEfArfAfEof@fDffArfAfAofrfofEfrfDffArfEffDffo`fEofAofP0fEfArfAfEofHfDffArfAfAofrfofEfrfDffArfEffDffo@fEofAofX@fEfArfAfEofPfDffArfAfAofrfofEfrfDffArfEffDffoHfEofAof`PfEfArfAfEofXfDffArfAfAofrfofEfrfDffArfEffDffofEofAof@`fEfArfAfEof`fDffArfAfAofrfofEfrfDffArfEffDffoXfEofAofHpfEfArfAfEof@fDffArfAfAofrfofEfrfDffArfEffDffo` fEofAofPfEfArfAfEofHfDffArfAfAofrfofEfrfDffArfEffDffo@0fEofAofXfEfArfAfEofDffArfAfAofrfofEfrfDffArfEffDffoH@fEofAof`fEfArfAfEofDffArfAfAofrfofEfrfDffArfEffDffoPPfEofAof@fEfArfAfEofDffArfAfAofrfofEfrfDffArfEffDffoX`fEofAofHfEfArfAfEofDffArfAfAofrfofEfrfDffArfEffDffo`pfEofAofPfEfArfAfEofDffArfAfAofrfofEfrfDffArfEffDffo@fEofAofXfEfArfAfEofDffArfAfAofrfofEfrfDffArfEffDffoHfEofAof`fEfArfAfEofDffArfAfAofrfofEfrfDffArfEffDfEofEfAofArfAfEofDfArfAofAfrfEfDfArfEfDfo; fELM;KfoLM;KfAfLM;K fLMo7fDo fDfDDoG@fDfDDoO`fDfEofDDfED_ fDDg@Do`Dffom`fDo}_$HHv@H$(H(XD(hD(xD(PD(XD(`D(hD(pD(xHhHXH H|$Ht$ÐH|$Ht$HHHLHSUH$X)4$)|$D)D$ D)L$0D)PD)XD)`D)hD)pD)xH HH@H$H$foM$1LN9Oхɉ LNLNN9OхɉKLN̅~G~g~/~w ~@fbfbfDoflfDmfp?fDpfpfEpAo EoAohEoaAop f8Eoi fD8Aox0M@@f8Eoq0MI@fD8fL$PffDL$pfEfD$@fofDD$`fEo:8E:E8f8AH8fD8AIE8f8fofD8fEo:8E:E8f8fEE8fofEo:8E:E88E8f8fEE8fofEo:8E:E88E8f8fEE8fofEo:8E:E88E8f8fEE8fofEo:8E:E88E8f8fEE8fofEo:8E:E88E8f8fEE8fofEo:8E:E88E8f8fEE8fofEo:8E:E88E8f8fEE8fofEo:8E:E88E8f8fEE8fofEo:8E:E88E8f8fEE8fofEo:8E:E88E8f8fEE8fofEo:8E:E88E8f8fEE8fofEo:8E:E88E8f8fEE8fofEo:8E:E88E8f8fEE8fofEo:8E:E88E8f8fEE8fofEo:8E:E88E8ffEf; LMfofEo:8E:E88E8;KLM~3fofEo:8E:E8fDpfDpUfofDffDffofEo:8E:D8fffAfAfEfEffD$@fL$PfDD$`fDL$pf3$fpfEpfofAbfAjfAjfGfsf7fsfGfsfw fO@HHv  (H(XD(hD(xD(PD(XD(`D(hD(pD(xHhHXH H|$Ht$ÐH|$Ht$HHHLH r! !HSUH$X)4$)|$D)D$ D)L$0D)PD)XD)`D)hD)pD)xH HH$H-CFH$w$1LN9Oхɉ LNLNN9OхɉKLNLV N(9OхɉKLNL^0N89OхɉK LN݅ zoH$zo_ zog@zoo`zoom` yo}ynM@@ynMI@y"MR@i"M[@ynHbAynIyq"JC1"KA 9r!!@ qb1rynPArA9AynI !rA q!i"RC1"KA9r))Hib1rynXArA9AynI)rAi)a"ZC1"KA9r Pab1ryn`ArA9AynI rAa Y"bC1"KA!9rX!Yb1ryn@ArA9AynI!rA!Yy"BC1"KA)9r`)yb1rynHArA9AynI)rA)yq"JC1"KA 9r!!@ qb1rynPArA9AynI !rA q!i"RC1"KA9r))Hib1rynXArA9AynI)rAi)a"ZC1"KA9r Pab1ryn`ArA9AynI rAa Y"bC1"KA!9r!Yb1ryn@ArA9AynI!rA!Yy"BC1"KA)9r`)yb1rynHArA9AynI)rA)yq"JC1"KA 9r!!@ qb1rynPArA9AynI !rA q!i"RC1"KA9r))H0ib1rynXArA9AynI)rAi)a"ZC1"KA9r P@ab1ryn`ArA9AynI rAa Y"bC1"KA!9rXP!Yb1ryn@ArA9AynI!rA!YoHy"BC1"KA)AH?9r``)yb1rAI?ArA9AJ?)rA)AK?yoPoXA 9r!!@p 1rArA9 r!rA !o`A9r))HP1rArA9r)rA)o@A9r PX 1rArA9r rA oHA!9rX!`01rArA9!rrA!oPA)9r`)@@1rArA9)rrA)yo}oX9rA @ HP1rIArA9 r!rA !o 9rAHP`1rIArA9r)rA)o@9rA!PXp1rIArA9r rA oH 9rA!)X!`1rIArA9!rrA!oP09rA)  )@1rIArA9)rrA)oX@9rA @ H1rIArA9 r!rA !o`P9rAH P1rIArA9r)rA)o@`9rA!P0X1rIArA9r rA oHp9rA!)X@!`1rIArA9!rrA!oP9rA) `P)@1rIArA9)rrA)oX9rA @` H1rIArA9 r!rA !o`9rAHp1rIArA9r)rA)o@9rA!PX1rIArA9r rA oH9rA!)X!` 1rIArA9!rrA!oP9rA) `)@01rIArA9)rrA)oX9rA @ H@1rIArA9 r!rA !o`9rAHPP1rIArA9r)rA)o9rA!PX`1rIArA9r rA oH9rA!)X!`p1rIArA9!rrA!oP 9rA) `)@1rIArA9)rrA)yo} oX0A 9rH 1r A9rIAr !rA !o`@A9rP1rHA9rIAr)rA)o@PA9r!X1r!P A9rIAr rA oH`A!9r)`!1r)X0!A9rIAr!rA!oPpA)9r @)1r `@)A9rIAr)rA)oXA 9rH 1r@P A9rIAr !rA !o`A9rP1rH`A9rIAr)rA)o@A9r!1r!PpA9rIAr rA oHA!9r)`!1r)X!A9rIAr!rA!oPA)9r @ )1r `)A9rIAr)rA)oXA 9rH0 1r@ A9rIAr !rA !o`A9rP@1rHA9rIAr)rA)o@A9r!XP1r!PA9rIAr rA oA!9r)``!1r)X!A9rIAr!rA!oPA)9r @p)1r `)A9rIAr)rA)oX A 9rH 1r@ A9rIAr !rA !o`0A9rP1rA9rIAr)rA)o@@A9r!X1r!PA9rIAr rA oHPA!9r)`!1r)X !A9rIAr!rA!oP`A)9r @)1r `0)A9rIAr)rA)yo}@oXp9rA @@ H1rIArA9 r!rA !o`9rAHPP1rIArA9r)rA)o@9rA!P`X1rIArA9r rA oH9rA!)Xp! 1rIArA9!rrA!oP9rA) `)@1rIArA9)rrA)oX9rA @ H 1rIArA9 r!rA !o`9rAHP01rIArA9r)rA)o@9rA!PX@1rIArA9r rA oH9rA!)X!`P1rIArA9!rrA!o9rA) `)@`1rIArA9)rrA)oX9rA @ Hp1rIArA9 r!rA !o` 9rAHP1rIArA9r)rA)o@09rA!X1rIArA9r rA oH@9rA!)!`1rIArA9!rrA!oPP9rA) )@1rIArA9)rrA)oX`9rA  H1rIArA9 r!rA !o`p9rAP1rIArA9r)rA)o@9rA!X1rIArA9r rA oH9rA!)!`1rIArA9!rrA!9rA) 1r)IArA9)rA); LM;KLM;KLM;K LMo3A9oAf)!)!_ g@ o` zz_ zg@zo`z3om`$HHv@H$w(H(XD(hD(xD(PD(XD(`D(hD(pD(xHhHXH H|$Ht$ÐH|$Ht$HHHLHSUATAUAVAWH$X)4$)|$D)D$ D)L$0D)T$@D)\$PD)`D)hD)pD)xH@HH$ H-c$w$(1H$L&N9Oхɉ LNLnN9OхɉKLNLv N(9OхɉKLNL~0N89OхɉK LNLF@NH9OхɉKLNLNPNX9OхɉKLNLV`Nh9OхɉKLNL^pNx9OхɉKLNoH$oO H$oW@o_`o~oM`}o}Ayn$Md$@Ayn M@@yn}Mm@yn1MI@C)"Mv@C""MR@A"?M@-bI"3M[@bAyn\$C-8Ayn@B-yn}ynqC!"^C9"BA"%bI"s=b]r}P]C%8ŽrAynd$rEAyn@rB%yn}ynqC"fC9"BA"bI"s=ber}XeC8ŽrAynl$rEAyn@rByn}ynqC"nC9"BA"bI"s=bmr}`mC8ŽrAynt$rEAyn@rByn}ynqC "vC9"BA" bI"s=bur}huC 8ŽrAynT$rEAyn@rB yn}ynqC)"VC9"BA"-bI"s=b}r}0}C-8ŽrAyn\$rEAyn@rB-yn}ynqC!"^C9"BA"%bI"s=b]r}P ]C%8ŽrAynd$rEAyn@rB%yn}ynqC"fC9"BA"bI"s=ber}X@eC8ŽrAynl$rEAyn@rByn}ynqC"nC9"BA"bI"s=bmr}``mC8ŽrAynt$rEAyn@rByn}ynqC "vC9"BA" bI"s=bur}kuC 8ŽrAynT$rEAyn@rB yn}ynqC)"VC9"BA"-bI"s=b}r}s}C-8ŽrAyn\$rEAyn@rB-yn}ynqC!"^C9"BA"%bI"s=b]r}S]C%8ŽrAynd$rEAyn@rB%yn}ynqC"fC9"BA"bI"s=ber}[eC8ŽrAynl$rEAyn@rByn}ynqC"nC9"BA"bI"s=bmr}#mC8ŽrAynt$rEAyn@rByn}ynqC "vC9"BA" bI"s=bur}k uC 8ŽrAynT$rEAyn@rB }oXyn}ynqC)"VC9"BA"-bI"s=b}AL$?r}s@}C-8ŽrAM?rEAN?rAO?B-}o`A%}oh]rAH?}S`]%[ŽrA%AI?rEAJ?5rA%rAK?A%A}oper}XecŽrArE5rArAA}omr}`mkŽrArE5rArAA }oX ur}hu sŽrA rE5rA rA A-}o`@}r}p}-ŽrA-rE5rA-rA-}o}A%}oh`r]}]%[ ŽrA%rE5rA%rA%A}osre}X ec@ŽrArE5rArAA}oSrm}`@mk`ŽrArE5rArAA }o[ru}h`u pŽrA rE5rA rA A-}ocr}}s}-PŽrA-rE5rA-rA-A%}o+r]}S]%XŽrA%rE5rA%rA%A}os re}[e`ŽrArE5rArAA}oS@rm}cm(ŽrArE5rArAA }o[`ru}+u p ŽrA rE5rA rA A-}o`r}}s }-P@ŽrA-rE5rA-rA-A%}ohr]}S@]%X`ŽrA%rE5rA%rA%A}opre}[`ecŽrArE5rArAA}oPrm}`mkŽrArE5rArAA }oru}hu sŽrA rE5rA rA A-}o` r}}p}-SŽrA-rE5rA-rA-A%}oh@r]}P]%ŽrA%rE5rA%rA%A}op`re}ec ŽrArE5rArAA}oSrm}` mk@ŽrArE5rArAA }o[ru}h@u s`ŽrA rE5rA rA A-}ocr}}p`}-PŽrA-rE5rA-rA-}o} A%}ok]r%XŽrA%~S]E5rA%rrA%A}o3er`ŽrA~[eE5rArrAA}oS mrhŽrA~cmE5rArrAA }o[@ur 0ŽrA ~kuE5rA rrA A-}oc`}r-P ŽrA-~3}E5rA-rrA-A%}oh]r%X@ŽrA%~S ]E5rA%rrA%A}oper``ŽrA~[@eE5rArrAA}oPmrkŽrA~c`mE5rArrAA }oXur sŽrA ~huE5rA rrA A-}o }r-SŽrA-~p}E5rA-rrA-A%}oh ]r%[ŽrA%~P]E5rA%rrA%A}op@er#ŽrA~XeE5rArrAA}oP`mrk ŽrA~ mE5rArrAA }o[ur s@ŽrA ~h uE5rA rrA A-}oc}r-S`ŽrA-~p@}E5rA-rrA-A%}ok]r%XŽrA%~P`]E5rA%rrA%A}oser`ŽrA~[eE5rArrAA}omrhŽrA~cmE5rArrAA }o[ ur pŽrA ~kuE5rA rrA A-}oc@}r-ŽrA-~s}E5rA-rrA-}o}@A%}ok`r]}]%X ŽrA%rE5rA%rA%A}opre}[ e`@ŽrArE5rArAA}oPrm}c@mh`ŽrArE5rArAA }oXru}k`u sŽrA rE5rA rA A-}o`r}}p}-SŽrA-rE5rA-rA-A%}o(r]}P]%[ŽrA%rE5rA%rA%A}op re}XecŽrArE5rArAA}oP@rm}`m+ŽrArE5rArAA }oX`ru}(u s ŽrA rE5rA rA A-}ocr}}p }-S@ŽrA-rE5rA-rA-A%}okr]}P@]%[`ŽrA%rE5rA%rA%A}osre}X`e`ŽrArE5rArAA}oSrmmhŽrArE5rArAA }oruu pŽrA rE5rA rA A-}oc r}}-PŽrA-rE5rA-rA-A%}ok@r]]%ŽrA%rE5rA%rA%A}os`ree` ŽrArE5rArAA}oPrmmh@ŽrArE5rArAA }oXruu p`ŽrA rE5rA rA r}Žr}rErֹH$; LM;KLM;KLM;K LM;KLM;KLM;KLM;KLMo+ofO W@_`O W@_`+H$~oM`H$ w(((8D(HD(XD(hD(xD(`D(hD(pD(xLxLpLhL`HhHXH H|$Ht$ÐyZyZyZyZyZyZyZyZnnnnnnnnܼܼܼܼܼܼܼܼbbbbbbbb     SHA1 multi-block transform for x86_64, CRYPTOGAMS by VWSUATAUAVAWH@I@xIIqMY8ENL9rHIESNL9s4HHXHhIIHHIHHxHpIIIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8RH@A_A^A]A\][_^ÐVWSUATAUAVAWH@I@xIIqMY8ENL9DIESNL9,I HXHhL`LhLpLxIIMMMMH(IHH|$Ht$HHHLH H=(1HSUH$X)4$)|$D)D$ D)L$0D)PD)XD)`D)hD)pD)xH HH$H-wH$H$1LN9Oхɉ LNLNN9OхɉKLNLV N(9OхɉKLNL^0N89OхɉK LN݅+'DoGH$DoODoWDo_Do'Doo Dow@Do`o5~fAofAfAn(fAnfAn fAnfbfbfbfAof8fAofrfAofrfhfAfr ffrfmffrfAoffAofrfAfAffAoffAofrfffAofAofr fAfr fffr fffr ffEofr ffDfDffDfDfAnhfAnAfAnJfAnSfbfbfbfAofAof8frfAofrfhfAfr ffrfmffrfAoffAofrfAfAffAoffAofrfffAofAofr fAfr fffr fffr ffEofr ffDfDffDfDfAnhfAnAfAnJfAnSfbfbfbfAof8fAofrfAofrfhfAfr ffrfmffrfAoffAofrfAfAffAoffAofrfffAofAofr fAfr fffr fffr ffEofr ffDfDffDfDfAnh fAnA fAnJ fAnS fbfbfbfAofAof8frfAofrfhfAfr ffrfmffrfAoffAofrfAfAffAoffAofrfffAofAofr fAfr fffr fffr ffEofr ffDfDffDfDfAnhfAnAfAnJfAnSfbfbfbfAof8fAofrfAofrfhfAfr ffrfmffrfAoffAofrfAfAffAoffAofrfffAofAofr fAfr fffr fffr ffEofr ffDfDffDfDfAnhfAnAfAnJfAnSfbfbfbfAofAof8frfAofrfhfAfr ffrfm ffrfAoffAofrfAfAffAoffAofrfffAofAofr fAfr fffr fffr ffEofr ffDfDffDfDfAnhfAnAfAnJfAnSfbfbfbfAof8fAofrfAofrfhfAfr ffrfm@ffrfAoffAofrfAfAffAoffAofrfffAofAofr fAfr fffr fffr ffEofr ffDfDffDfDfAnhfAnAfAnJfAnSfbfbfbfAofAof8frfAofrfhfAfr ffrfm`ffrfAoffAofrfAfAffAoffAofrfffAofAofr fAfr fffr fffr ffEofr ffDfDffDfDHfAnh fAnA fAnJ fAnS fbfbfbfAof8fAofrfAofrf(fAfr ffrfmffrfAoffAofrfAfAffAoffAofrfffAofAofr fAfr fffr fffr ffEofr ffDfDffDfDfAnh$fAnA$fAnJ$fAnS$fbfbfbfAofAof8frfAofrfhfAfr ffrfmffrfAoffAofrfAfAffAoffAofrfffAofAofr fAfr fffr fffr ffEofr ffDfDffDfDfAnh(fAnA(fAnJ(fAnS(fbfbfbfAof8fAofrfAofrfh fAfr ffrfmffrfAoffAofrfAfAffAoffAofrfffAofAofr fAfr fffr fffr ffEofr ffDfDffDfDfAnh,fAnA,fAnJ,fAnS,fbfbfbfAofAof8frfAofrfh0fAfr ffrfmffrfAoffAofrfAfAffAoffAofrfffAofAofr fAfr fffr fffr ffEofr ffDfDffDfDfAnh0fAnA0fAnJ0fAnS0fbfbfbfAof8fAofrfAofrfh@fAfr ffrfmffrfAoffAofrfAfAffAoffAofrfffAofAofr fAfr fffr fffr ffEofr ffDfDffDfDfAnh4fAnA4fAnJ4fAnS4fbfbfbfAofAof8frfAofrfhPfAfr ffrfm ffrfAoffAofrfAfAffAoffAofrfffAofAofr fAfr fffr fffr ffEofr ffDfDffDfDfAnh8fAnA8fAnJ8fAnS8fbfbfbfAof8fAofrfAofrfh`fAfr ffrfm@ffrfAoffAofrfAfAffAoffAofrfffAofAofr fAfr fffr fffr ffEofr ffDfDffDfDfAnhRQ>RQ>RQ>RQ>RQ>RQ>RQ>m1m1m1m1m1m1m1m1''''''''YYYYYYYY GGGGGGGGQcQcQcQcQcQcQcQcg))g))g))g))g))g))g))g)) ' ' ' ' ' ' ' '8!.8!.8!.8!.8!.8!.8!.8!.m,Mm,Mm,Mm,Mm,Mm,Mm,Mm,M 8S 8S 8S 8S 8S 8S 8S 8STs eTs eTs eTs eTs eTs eTs eTs e jv jv jv jv jv jv jv jv........,r,r,r,r,r,r,r,r迢迢迢迢迢迢迢迢KfKfKfKfKfKfKfKfpKpKpKpKpKpKpKpK£QlǣQlǣQlǣQlǣQlǣQlǣQlǣQl$$$$$$$$օ55555555pjpjpjpjpjpjpjpjl7l7l7l7l7l7l7l7LwH'LwH'LwH'LwH'LwH'LwH'LwH'LwH'44444444 9 9 9 9 9 9 9 9JNJNJNJNJNJNJNJNOʜ[Oʜ[Oʜ[Oʜ[Oʜ[Oʜ[Oʜ[Oʜ[o.ho.ho.ho.ho.ho.ho.ho.httttttttocxocxocxocxocxocxocxocxxȄxȄxȄxȄxȄxȄxȄxȄnjnjnjnjnjnjnjnjlPlPlPlPlPlPlPlPxqxqxqxqxqxqxqxq    /BD7q۵[V9Y?^[1$} Ut]rހܛtiGƝ̡ $o,-tJܩ\ڈvRQ>m1'Y GQcg)) '8!.m,M 8STs e jv.,r迢KfpK£Ql$օ5pjl7LwH'4 9JNOʜ[o.htocxxȄnjlPxqSHA256 multi-block transform for x86_64, CRYPTOGAMS by VWSUATAUAVAWH@I@xIIqMY8ENL9rHIESNL9s4HHXHhIIHHIHHxHpIIIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8DH@A_A^A]A\][_^ÐVWSUATAUAVAWH@I@xIIqMY8ENL9DIESNL9,I HXHhL`LhLpLxIIMMMMH(IHH|$Ht$HHHLLH u H|$Ht$SATAUIIIM1H1HDWO*D3H1AL)M)BIA[HIrtAI)BA‹BA2$C,Md$HuIrIBDًDIBTD\IBTDًD IBT D\IBTDًDIBTD\IBTD@ًDIBTDAIIM3$O,Md$IIvIcHt5I)BA‹BA2$C,Md$HuHH1ɈJ4fЋ^f:ffsfЋ^ffC,Md$fɉӋFۉVf Ћ^ VfӋFۉV f Ћ^VfӋFۉVf Ћ^VfӋF ۉVf Ћ^$V fӋF(ۉV$f Ћ^,V(fӋF0ۉV,f Ћ^4V0fӋF8ۉV4f Ћ^<V8fAAo$ۉVVWSUATAUAVAWH@I@xILL9r8ILL9s%H@HXL`LhIMMHxHpIII/VWSUATAUAVAWH@IHxHpIIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8H@A_A^A]A\][_^H|$Ht$HHHLLLD$(LL$0I SUATAUAVAWH(IMIIMH1H1H@oO@M)H4IMLd$L\$EEKESE[ D$DL$DT$ED\$ fE1ԉE!EЋ^AxjE1EAEfnEfɋE1̉E!E_ӋFAVE1ۉVEA Efn EËE1ĉE!EWЋ^ Ap $E1VEAEfEڋE1܉E!EO ӋFAνE1ۉV EAEf EыE1ԉE!EGЋ^A|E1VEAEfEȋE1̉E!E_ӋFA*ƇGE1ۉVEA Ef EËE1ĉE!EWЋ^AF0E1VEAEfEڋE1܉E!EOӋF AFE1ۉVEAEf EыE1ԉE!EG Ћ^$AؘiE1V EAEfEȋE1̉E!E_$ӋF(AïDE1ۉV$EA Ef EËE1ĉE!EW(Ћ^,A±[E1V(EAEfEڋE1܉E!EO,ӋF0A\E1ۉV,EAEf EыE1ԉE!EG0Ћ^4A"kE1V0EAEfEȋE1̉E!E_4ӋF8AÓqE1ۉV4EA Ef EËE1ĉE!EW8Ћ^A,.A46AAE1DE1DA<>A1A1G G,.A1AAE1A,.A46A<>AA E1A1A1A1DDD1D1L;|$AAA!A!DDADAD D)D)AAAAA1A1D1D1AA!!D1D1DAAD AD1D1AD AD))D1D1AAẢA1A1AD1D1A6D1A~@D1ED1A1D1E1A3A3_A3OA3W ÐH|$Ht$HHHLSUATAUAVAWIHJHH)HHH)H Ht$LT$IE_OW AK,/L<$Hl$L5H$L)HM4.LL$Ht$AAYAIAQ L>LvLnLfHn H^(Hf0H|$Ht$ÐA3A3_A3OA3W EAEEE$E3TE3\EE3dE3DME3TE3\E3dE3TE3\E3DAW E3dAE3DD1A_AOD1D1D1AOME6E>E$.E6A<>A,.A1A1A46A<>A1A1A46A<>A,.A1A1A1A46A<>A,.A1A1A1AWA46A<>AGA1A1A_AOMD1D1D1D1ÐMAxAhEPEXA8Ah EP@EX`A3A3_A3OA3W MDDDDGGG$&GE 6E,>A,.A46AAE1DE1DA<>A1A1G A,.A1G,.AAA1E1E1A46A>A .AD1D1D1D1L;|$IH H IH H IIII!I!LLILIL L)L)I!I!H!H!I1I1IIM!M!LLIO IO$L)L)I!I!H!H!I1I1IIM!M!LLII1II1L)L)O O,$I1I1I!I!H!H!I1I1L1L1M1M1HHM1H M1H M1M1M1M1D1I D1I D1D1MAMAI D1I D1AMAMI D1I D1I6AI~@AIAMD1AD1MD1D1dA3A3_A3OA3W ÐH|$Ht$HHHLSUATAUAVAWIHJHH)HHH)H Ht$LT$IE_OW AK,/L<$Hl$L5zH$L)HM4.HIxLL$Ht$AAYAIAQ L>LvLnLfHn H^(Hf0H|$Ht$ÐH|$Ht$HHHLSUATAUAVAWH'Hl$(H\$0H8H|$Ht$ÐHHHkH^H-W HE]DEUE] DE@U`t$0HHHVHHWH 1W \51\51\51\513G3GG3GG3G GH |GP H1HH^HVHH_HWH 1W\51\51\51\513G3GG3GG 3G G$t3GG(3GG,HGH H1HH^HNHVHH_HOHWH 1W\51\51\51\513G 3GG$3GG(3G G,tZ‹G\51\51\51\51؉G03GG43GG83GGLvLnLfHn H^(Hf0H|$Ht$Ðcccc||||wwww{{{{ kkkkooooTT`00P`00PggggV++}V++}bbMMvvvvEE@@}}}}YYYYGGɎGG AAgg__EE##SSrrrr[[uu==L&&jL&&jl66Zl66Z~??A~??AOOh44\h44\QQ44qqqqssb11Sb11S*?*?  RRF##eF##e^^0(0(77  //  $6$6==&&N''iN''iuuuu  X,,tX,,t4.4.6-6-nnnnZZZZ[[RRRRv;;Mv;;Maa}}R)){R)){>>^//q^//qSSSShh,,@ `@ `yyȶ[[[[jjjjFFggr99Kr99KJJޔJJޘLLԘLL԰XXXXJJkk**OOCCņCCŚMMךMMf33Uf33UEEϊEEPPPPx<!>!KKݖKKaa pppp|>>B|>>BqqffffHHؐHHaaaaj55_j55_WWWWiiXX:':'''88++"3"3iiiipp33--<"<" IIUUUUP((xP((xzzYY   ee11BBƄBBhhhhAAÂAA))Z--wZ--w{{˨TTTTmm,:,:c|w{ko0g+׫vʂ}YGԢr&6?4q1#'u ,nZR;ֳ)/S [j˾9JLXCM3EPfHa5WiَU(ߌ BhA-Tc|w{ko0g+׫vʂ}YGԢr&6?4q1#'u ,nZR;ֳ)/S [j˾9JLXCM3EPfHa5WiَU(ߌ BhA-Tc|w{ko0g+׫vʂ}YGԢr&6?4q1#'u ,nZR;ֳ)/S [j˾9JLXCM3EPfHa5WiَU(ߌ BhA-Tc|w{ko0g+׫vʂ}YGԢr&6?4q1#'u ,nZR;ֳ)/S [j˾9JLXCM3EPfHa5WiَU(ߌ BhA-T @6QPQP~AeS~AeS:'^:'^;k;kEEXXKK 0U 0UvmvmvvL%L%OO**&5D&5DbbޱZIޱZI%g%gEE]]/u/uLLFFkk__mzmzRYڕRYԾ-Ծ-Xt!Xt!Ii)Ii)DDu‰ju‰jyxyxX>kX>k'q'qݾOO f f}:}:cJcJ11Q3`Q3`bSEbSEdwdwkk++pHhXpHhXEEllR{R{s#s#rKrKWWfU*fU*((//{{770(0(##jj\\++yyNiNiee4b4bĦĦ4.S4.SUU22uu 9 9@`@`^q^qnQnQ>!>!==>>MFMFTTq]q]oo`P`P$$ֽֽ闉@C̉@CgٞwgٞwBB[8[8yyۡ| G| G|B|B 2+H2+HpplZrNlZrN8V8V==6-9'6-9' d dh\!h\![Tћ[T$6.:$6.: g gWWҴOOa a ZwKiZwKi⓺ ⓺ **<"C<"C  ǭǭ--WWuLuLݻݻ``&&\r\rDf;Df;[~4[~4C)vC)v##ܶhhcc11BcBc"@"@  J$}J$}һ=һ=22)m)m/K/Kܲ0ܲ0 R Rww+l+lppHHGd"Gd"ĨĠ??V},V},"3"3INLJIN88ʢʢ 6 6Ϧϥz(z(ڷ&ڷ&??,:,:Px Px j_̛j_̛T~FbT~Fbظظ.9^.9^ïï]]iГ|iГ|o-o-%%Ȭ;Ȭ;}}cncn;{;{&x &x nYnY욷욷OOnene~~!!ٺJo6Jo6 )|)|11*?#1*?#1ƥ0ƥ05f5ftN7tN7ʦʦаа33JJAAPP//vM֍vM֍CMCM̪MT̪MTߞѵѵLjLj,,FeQFeQ^^5]5]tsts A. A.gZgZRRV3V3mGmGaa7 z7 zYY<<Ω'Ω'a5a5zGh>8$4,8$4,£@_£@_rr% % (Ky xZݨ31Y'_`QJ -zɜ;M*Ky xZݨ31Y'_`QJ -zɜ;M*Ky xZݨ31Y'_`QJ -zɜ;M*Ky xZݨ31Y'_`QJ -zɜ;M*VWSUATAUAVAWH@I@xIIqMY8ENL9r^IESNL9sJH@H@0HXHhL`LhLpLxIIMMMMHxHpIIIVWSUATAUAVAWH@I@xIIqMY8ENL9rZIESNL9sFH@8HXHhL`LhLpLxIIMMMMHxHpIIIVWSUATAUAVAWH@I@xILL9LL9rCLL9r L L9r+IL3L9sZH@L"L9sJH@H@8HXHhL`LhLpLxIIMMMMHxHpIIIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8H@A_A^A]A\][_^IAfAofo fAo)frfAf8fo f8fIfL zfAofAof8f8ffAoffCoLf8fCo$fAof8foff8Iff8Iff8I0HffAofAoffrfAf8fAoff8fAoff8fAoff8fAoff8Ao)f,fAobfAoBf8ff8fCoL@ff8IыfAofoZ fIfrAo)IfAf8foC I0Lh f8I0ffo- fIMfAobfAoJf8f8ffAo"ffAoJf8f8f8ffAob ffAoJ0f8f8f8ffAob@ffAoJPf8f8f8fIf: fHfAoffAofrfAf8fAoff8fAoff8ffAof8fAoff8AoffAob`f8ffAoBpfAof8ff8ÐfDo ofoLfoL HufCo f8I0wmt !HoGfoff:HtRАoGvfoHtfpfofofoАL) HufCo f8LH Hf ffffffffÐfp΀fpffffoÐffA:fE:ffpf:fofsffofsff==fAoffrfAfAof8ffAof8ffAof8ffAof8ffAof8ffAof8fAof8fffoÐfAoffrfAfAof8fAoCf8fÐfofo-Hu/Hf%sf8fof8ff8fLfAoffrfAfAof8fAo[f8ff8fAoS f8ffAo[0f8ff8fAoS@f8ffAo[Pf8ff8fAoS`f8ffAo[pf8fHfCo f8II0ÐH|$Ht$HHHLH$H)t$)|$ D)D$0D)L$@D)T$PD)\$`D)d$pD)$D)$D)$A0(t$(|$ D(D$0D(L$@D(T$PD(\$`D(d$pD($D($D($H$1H|$Ht$ÐH|$Ht$HHHLH$H)t$)|$ D)D$0D)L$@D)T$PD)\$`D)d$pD)$D)$D)$HTAAA A !(t$(|$ D(D$0D(L$@D(T$PD(\$`D(d$pD($D($D($H$1H|$Ht$ÐH|$Ht$HHHLH$H)t$)|$ D)D$0D)L$@D)T$PD)\$`D)d$pD)$D)$D)$ovQ(t$(|$ D(D$0D(L$@D(T$PD(\$`D(d$pD($D($D($H$H|$Ht$ÐH|$Ht$HHHLH$H)t$)|$ D)D$0D)L$@D)T$PD)\$`D)d$pD)$D)$D)$o(t$(|$ D(D$0D(L$@D(T$PD(\$`D(d$pD($D($D($H$H|$Ht$ÐH|$Ht$HHHLLLD$(LL$0HHH$H)t$)|$ D)D$0D)L$@D)T$PD)\$`D)d$pD)$D)$D)$Ao0H)At2offo>HHs2ofoffo>HHsA0(t$(|$ D(D$0D(L$@D(T$PD(\$`D(d$pD($D($D($H$H|$Ht$LyfEoRfEoZfEo fEoj0fEob@fEozPfEor`Ð       p*Zx"RM|1}0L>PˏᛱD*nzߥ#6. ;$q Ɠz/U^) @iJ#cǽomxzj_t5+Aѐ                                    }|M*p[[[[[[[[[[[[[[[[`)Ih!APQ \] G@]Ziܵ6_wA(G]Z@6wA(i_POLSJ[Ȃ4~o%ՆPOLS{O1 j^~o[%4J3'bQvE鬟_T [PENAJe`㆔rwֆSLOPI;e,^rW}9D*n$< 1)Bd"F&`gYͦkU2> &Fd`B"ͦU 2>Ykg@~S->ԹmDVYKVector Permutation AES for x86_64/SSSE3, Mike Hamburg (Stanford University)VWSUATAUAVAWH@I@xIIqMY8ENL9r/IESNL9sHpIHHHxHpIIIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8 rH@A_A^A]A\][_^L).fDoH@fAo{PfEfAfAfAfD8f8fAfAf8f8fAfAf8f8f8f8fAo;fEoCfDofsfDofsffffffsffsfAfAfDofsfEofAsffDffDffsfAfAsfAfEfAo{ fDofsfDofsfffAfAffsffsfAfAfDofsfEofAsffDfAfEffsfAfAsfAfEfDofsfDofsffffffsffsfAfAfDofsfEofAsffDffDffsfAfAsfAfEAYfD8f@fH fP0fD8f8fX@f`Pf8f8fh`fppf8f8f8f8HfffAffAfffffffffDofDofDofDofDofDfDfDfEofDfAofEfEofEfEfDfEfEfAfEfDofEfEfEfEfDofDofDfDfEofEfEfAfEfEfEfDofAfDofEfDofDfDofEfDfDfEfEfEfAfEofEfEfDofEofEfEfEofEfDfEfEfEofDfEfEfDfEfEfEfEfDofofEofEfDffAfAffAfEffEfEfEofEofEfEfEfEfDfDfAfAfEfEfAfDfEfAfAfEfffDofofDffEofEofEfEfEfDfDffAfAfEfAfAffEfAfEfEfEofEfDffAfAffAfAfAfffAfffAfDffffffAfApfDpfDfDp˓fAfDpՓfAfDpړfAfDpfAfDpfAfDpfAfAfEffDfEpNfDfpNfDfDfDfAfDfpNfDfDpNfDfpNfDfpNfDfpNfAfpNfEfAfAfAfofAfAofAo{0fAo{@fAo;fEoCfDofsfDofsffffffsffsfAfAfDofsfEofAsffDffDffsfAfAsfAfEfAo{ fDofsfDofsfffAfAffsffsfAfAfDofsfEofAsffDfAfEffsfAfAsfAfEfDofsfDofsffffffsffsfAfAfDofsfEofAsffDffDffsfAfAsfAfEfo8fffffffDfÐL%fDoH@fAo{fEfAfAfAfD8f8fAfAf8f8fAfAf8f8f8f8fAo;fEoCfDofsfDofsffffffsffsfAfAfDofsfEofAsffDffDffsfAfAsfAfEfAo{ fDofsfDofsfffAfAffsffsfAfAfDofsfEofAsffDfAfEffsfAfAsfAfEfDofsfDofsffffffsffsfAfAfDofsfEofAsffDffDffsfAfAsfAfEAYfD8f@fH fP0fD8f8fX@f`Pf8f8fh`fppf8f8f8f8HfffffffDffAfAffDofDofDofDofDofEfDfDfEofEfAofDfEofEfEfDfEfEfAfEfDofDfEfEfEfDofDofDfDfEofEfEfAfEfEfEfDofAfEofEfDofDfDofDfDfDfEfEfEfAfEofEfEfDofEofEfEfEofEfDfEfEfEofDfEfEfDfEfEfEfEfDofofEofEfDffAfAffAfDffEfEfEofEofEfEfEfDfDffAfAfEfAfAffEfAfAfAfffDofofEffEofEofEfEfEfEfDfDfAfAfEfEfAfDfEfAfEfEfEofEfDffAfAffAfAfEfffffffffAfffffAfAfApNfDpNfAfDpNfDfDpNfDfDpNfDfDpNfDfEfAfDpNfDffAfDpNfDfAfAfDfAfAfAfAfAfAfAfAfApfDpfDfDp͓fAfDpӓfAfDpٓfAfDpfAfDpfAfDpfAfAfEffDfEpNfDfpNfDfDfDfAfDfpNfDfDpNfDfpNfDfpNfDfpNfAfpNfEfDfAfDfofAfAofAofofAofAo{fAo{fAo;fEoCfDofsfDofsffffffsffsfAfAfDofsfEofAsffDffDffsfAfAsfAfEfAo{ fDofsfDofsfffAfAffsffsfAfAfDofsfEofAsffDfAfEffsfAfAsfAfEfDofsfDofsffffffsffsfAfAfDofsfEofAsffDffDffsfAfAsfAfEfo8fffffffDfÐLo9HIfAofAoKfAoS fAo[0fAoc@fvo1f8H@Af8fDofDofDfDfDofDtfsfDofDtfsfDfDfDofDtfsfDofDtfsfDofDofDfDfDfDfDfDtfsfDHfDtfsHIfDfDfDP fDtfsfDX0fDtfso1fDfDfD`@fDhPfDp`fDxpHAfAo{PÐD\$0AIHUSATAUAVAWHd$L$H$`)t$@)|$PD)D$`D)L$pD)$D)$D)$D)$D)$D)$HAIIMMLIHH`H)HLAf<$f0f<$Do3IEo<$AoD$AoL$ AoT$0Ao\$@Aod$PHAol$`AAot$pfDu fD} Ao<$EoD$fEoL$ fAEoT$0fAEo\$@fAEod$PfAEol$`fAEot$pfAE}M$AEAm A]0AM@AuPAU`AepMIIEo<$HAIAoD$zAoL$ IAoT$0Ao\$@I+Aod$PAol$`fDu \fD} Ao<$EoD$fEoL$ fAEoT$0fAEo\$@fAEod$PfAEot$`fAE}AEAm A]0AM@AuPAU`fDu fD} Ao<$EoD$fEoL$ fAEoT$0fAEo\$@fAEot$PfAE}AEAm A]0AM@AuPvfDu EfD} Ao<$EoD$fEoL$ fAEoT$0fAEot$@fAE}AEAm A]0AM@fDu fD} Ao<$EoD$fEoL$ fAEot$0fAE}AEAm A]0fDu ufD} Ao<$EoD$fEot$ fAE}AEAm _fDu %fD} Ao<$Eot$fE}AE!I $HU MfDu EufEoD3H$fff@H@ H9wHe(u@(}PD(E`D(MpD(D(D(D(D(D(HL|$HLt$PLl$XLd$`H\$hHD$pHd$xHÐHUSATAUAVAWHd$L$H$`)t$@)|$PD)D$`D)L$pD)$D)$D)$D)$D)$D)$HAoAIIMMfE IHH`H)HLAff8fDo$LfDo} fAo{fD8fD8fD$fD} fAofAofAfAofAKfAofAS fAofA[0fAofAc@fAofAkPfAs`fDo$HD$fAo{fEfAfAfAfD8f8fAfAf8f8fAfAf8f8f8f8LEAtIAo<$EoD$EoL$ EoT$0Eo\$@Eod$PEol$`Eot$pM$fAfDo} fAA}fAAEfAA] fAAm0fAAU@fAAuPfAAM`LAepMfE{p|IAo<$fDE}IEoD$fAAEEoL$ fAA] IEoT$0fAAm0Eo\$@fAAU@IriEod$PfAAuPtUEol$`fAAM`AHM HU0M`Ao$Md$E,fE0AEMmD$,IuH$fff@H@ H9wHe(u@(}PD(E`D(MpD(D(D(D(D(D(HL|$HLt$PLl$XLd$`H\$hHD$pHd$xHÐHUSATAUAVAWHd$L$L$H$`)t$@)|$PD)D$`D)L$pD)$D)$D)$D)$D)$D)$HIIMMI HU M ALHH`H)HLAff8IHfou fEfDo%fDfIO fEpfEfDof4$ffEfDffAfEpfEfoft$ffEfDffAAo<$fEpfEfoft$ ffEfDffAEoD$fDfEpfEfoft$0ffEfDffAEoL$ fAfEpfEfoft$@ffEfDffAEoT$0fAfEpfEfoft$PffEfDffAEo\$@fAfEpfEfoft$`ffEfDffAEod$PfAEol$`fAEot$pM$ft$pfAH$fAA+fD<$fD$E}f\$ AEfl$0A] fT$@Am0ft$PAU@fL$`AuPfd$pAM`AepMfot$pfEfDo%fDffEpfEffEfDffAIIƀhfEpfEfDof4$ffEfDffAfEpfEfoft$ffEfDffAAo<$IfEpfEfoft$ ffEfDffAEoD$I JfDfEpfEfoft$0ffEfDffAEoL$ I0fAfEpfEfoft$@ffEfDffAEoT$0I@fAfEpfEfoft$PffEfDffAEo\$@IP`fAfEpfEfoft$`ffEfDffAEod$PI`fAEol$`fAft$pMd$pfAH$AfD<$fD$E}f\$ AEfl$0A] fT$@Am0ft$PAU@fL$`AuPAM`Mmpfot$pCfAMd$`fAH$A!fD<$fD$E}f\$ AEfl$0A] fT$@Am0ft$PAU@AuPMm`fot$`fAMd$PfAH$AfD<$fD$E}f\$ AEfl$0A] fT$@Am0AU@MmPfot$PKfAMd$@fAH$A1fD<$fD$E}f\$ AEfl$0A] Am0Mm@fot$@fAMd$0fAH$AfD<$fD$E}f\$ AEA] Mm0fot$0fDMd$ fAH$AqfD<$fD$E}AEMm fot$ BfAMd$f} HM HU MfD} E}Mmfot$tKLA$JMd$B HRuEo}HM fDHU fD} M覞fu AuH$fff@H@ H9wHe(u@(}PD(E`D(MpD(D(D(D(D(D(HL|$HLt$PLl$XLd$`H\$hHD$pHd$xHÐHUSATAUAVAWHd$L$L$H$`)t$@)|$PD)D$`D)L$pD)$D)$D)$D)$D)$D)$HIIMMI HU MlALHH`H)HLAf<$f0f<$1IHI)Hfou fEfDo%Y fDfIGfEpfEfDof4$ffEfDffAfEpfEfoft$ffEfDffAAo<$fEpfEfoft$ ffEfDffAEoD$fDfEpfEfoft$0ffEfDffAEoL$ fAfEpfEfoft$@ffEfDffAEoT$0fAfEpfEfoft$PffEfDffAEo\$@fAfEpfEfoft$`ffEfDffAEod$PfAEol$`fAEot$pM$ft$pfAH$fAAfD<$fD$E}fl$ AEf\$0Am fL$@A]0ft$PAM@fT$`AuPfd$pAU`AepMfot$pfEfDo%0fDffEpfEffEfDffAIIƀhfEpfEfDof4$ffEfDffAfEpfEfoft$ffEfDffAAo<$IfEpfEfoft$ ffEfDffAEoD$I JfDfEpfEfoft$0ffEfDffAEoL$ I0fAfEpfEfoft$@ffEfDffAEoT$0I@fAfEpfEfoft$PffEfDffAEo\$@IP`fAfEpfEfoft$`ffEfDffAEod$PI`fAEol$`fAft$pMd$pfAH$AfD<$fD$E}fl$ AEf\$0Am fL$@A]0ft$PAM@fT$`AuPAU`Mmpfot$pCfAMd$`fAH$AfD<$fD$E}fl$ AEf\$0Am fL$@A]0ft$PAM@AuPMm`fot$`fAMd$PfAH$AqfD<$fD$E}fl$ AEf\$0Am fL$@A]0AM@MmPfot$PKfAMd$@fAH$AfD<$fD$E}fl$ AEf\$0Am A]0Mm@fot$@fAMd$0fAH$AfD<$fD$E}fl$ AEAm Mm0fot$0fDMd$ fAH$AAfD<$fD$E}AEMm fot$ BfAMd$f} HM HU MfD} E}Mmfot$fEfDo%tfDffEpfoffEEo<$fAHM fDHU fD} M薛fu LAuAD$ Md$JHRuEo}HM fDHU fD} MKfm AmH$fff@H@ H9wHe(u@(}PD(E`D(MpD(D(D(D(D(D(HL|$HLt$PLl$XLd$`H\$hHD$pHd$xHÐ        UUUUUUUUUUUUUUUU3333333333333333                   ccccccccccccccccBit-sliced AES for x86_64/SSSE3, Emilia Käsper, Peter Schwabe, Andy PolyakovVWSUATAUAVAWH@I@xIIqMY8ENL9r|IESNL9shIHp@IHHHhpHXhL``LhXLpPLxHH@xIIMMMMIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8@H@A_A^A]A\][_^AAAHM@ Wf8AM@uf8fffÐAAAHM@ Wf8AM@uf8fffÐIWWA HL HHf8f8 H f8f8Duf8f8f8f8ÐIWWA HL HHf8f8 H f8f8Duf8f8f8f8ÐIWWWA HL HHf8f8f8 H f8f8f8Duf8f8f8f8f8f8IWWWA HL HHf8f8f8 H f8f8f8Duf8f8f8f8f8f8IWWWWA HL HHf8f8f8f8 H f8f8f8f8Duf8f8f8f8f8f8f8f8ÐIWWWWA HL HHf8f8f8f8 H f8f8f8f8Duf8f8f8f8f8f8f8f8ÐIWfff8HL Hf8fff8fHf8f8f8f8f8f8 H f8f8f8f8f8f8Duf8f8f8f8f8f8f8f8f8f8f8f8ÐIWfff8HL Hf8fff8fHf8f8f8f8f8f8 H f8f8f8f8f8f8Duf8f8f8f8f8f8f8f8f8f8f8f8ÐIWWfffHL Hf8ffDf8fDHf8f8f8f8f8f8fD8fD8 H f8f8f8f8f8f8fD8fD8Duf8f8f8f8f8f8fD8fD8f8f8f8f8f8f8fD8fD8ÐIWWfffHL Hf8ffDf8fDHf8f8f8f8f8f8fD8fD8 H f8f8f8f8f8f8fD8fD8Duf8f8f8f8f8f8fD8fD8f8f8f8f8f8f8fD8fD8ÐH|$Ht$HHHLLLD$(Hd$)4$)|$D)D$ D)L$0HBIAEFHoo_og oo0ow@oPDoG`DoOpHH^LoD^o_f og n0oo0v@ow@~PoPDF`DoG`DNpHDoOpHHsL^Df n0v@~PDF`DNpHH€=H rp_g H@o0w@H`PDoG`EWG^f n0v@~PDF`IHI Wf8 HIuf8k^ ^f _^f n0;W^f n0v@^f n0v@~PHoo_og oo0ow@oPDoG`DoOpHHhLoD^o_f og n0oo0v@ow@~PoPDF`DoG`DNpHDoOpHAHsfL^fDf fn0fv@f~PfDF`fEDNpfEHH€H _g H@o0w@H`PLDG`EWf^ff fn0fv@f~PfDF`fEfE,IHI Wf8 HIuf8f+f^ff^ff ff^ff fn0f~Wf^ff fn0fv@ff?f^ff fn0fv@f~PfWf(4$)$(|$)D$D(D$ )D$ D(L$0)D$0Hd$XH|$Ht$ÐH|$Ht$HHHLLLD$(LL$0Hd$)4$)|$D)D$ D)L$0Ao0fDo -fo=-ALAofoHL f8I)ALDWAKAWWAC f8f8 H f8f8Duf8f8fAHf8f8HDWfoDf8HvufffAffEf(4$)$(|$)D$D(D$ )D$ D(L$0)D$0Hd$XH|$Ht$ÐH|$Ht$HHHLLLD$(LL$0Hd$)4$)|$D)D$ D)L$0A0AofDo ,fo=,(AIf8IHI Wf8 HIuf8ADfAHL)KL IDWfoDHvf8HtuALAKDWWAWAC f8f8 H f8f8DuDfAf8f8f8f8HwAAAKDWM[ AWf8A M[uf8fffAffEf(4$)$(|$)D$D(D$ )D$ D(L$0)D$0Hd$XH|$Ht$ÐH|$Ht$HHHLLLD$(HuLAIHI Wf8 HIuf8ffWfWr H$UH H)X)hD)xD)HD)PD)XD)`D)hD)pD)xHhAooE@ fDY f$AfofofofT$@fT$PfT$`IfT$pI@IPD1D1f:"I@f\$f:"LMPfd$ D1Af:"E1fl$0MHDT$LAMPE1ADL$\E1MHDT$lADE1A@DL$|Ifot$@fo|$PHHA@tHHA0AHL I) ABDf8DD1f88D$ A@f8D18D$f8A@D1f88D$,A@f8BLD1f88D$Hvoo_fDoog fDooo0fDoow@fDooPfDoH`fDofAfEofAfA^fAf fALn0fADv@HvPH`ffoHP>HvH_D(Hg D(Ho0D(Hw@D(D(WJfAE(fAfA^ffAf ffAn0fHv@foffHD(IHI Wf8 HIuf8AWE(D(gfAE(fAfofHvD(fAE(fAfA^ffofHv eD(fAE(fAfA^ffAf ffofHv0fffEHu f!)$fҹHH)H4$ff$Wf(t$)D$(|$ )D$ D(D$0)D$0D(L$@)D$@D(T$P)D$PD(\$`)D$`D(d$p)D$pD($)$D($)$D($)$He]H|$Ht$ÐHguVILA AM@HIA f8f8M@HIAAHL9wAf8ffHÐHHHsMjAWD#I@( AAf:>f:,f:!f:f: f: f:@f:Ȁf:f:6PP1fo-Afo% foAf8f8frH@fofsffsffsff@foAufo%f8f8frfofsffsffsfffof8f8fofsffsffsff@P`1~Q AtmAf:f:f:f:f:f: f:@|f:ʀP0H1fo-fo%AAffof8f8frH@fofsffsffsffpffsfff@AuP 1Q H@AAAPf: f:f:f:f:f:f:f:f:f:f: f: f:@~PH1fo-(fo%@AAfoAP f8f8fofsffsffsffrfAt@fpff8fofsffsffsffPH@ fo녉P1HffffffHÐH@WWWÐH@(foWfsWfpUfffpfÐ(D(NXH@ 벐H@WWWÐH@WWɪWÐ      AES for Intel AES-NI, CRYPTOGAMS by VWSUATAUAVAWH@I@xIIqMY8ENL9IESNL9H0IHH@XVWSUATAUAVAWH@I@xIIqMY8ENL9IESNL9IH`IH[VWSUATAUAVAWH@IIL L9rGLQL9r7LL9s/HpIHIH(H@II@xHxHpIIIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8H@A_A^A]A\][_^DLI=g%AA@E APiÐH|$Ht$HHHLLLD$(LL$0LT$8SUATAUAVAWH$)t$`)|$pD)$D)$D)$D)$D)$D)$D)$D)$IIILypAoLD$XIM)EML#AAYAIAQ Ai1!fAo[@fEo+Ao"AojAor Aoz0f8f8f8I@fAf8fAfAf$$fAfl$fAft$ fAEAGE4$EWAWAOf8fDp1fDofD,$fDl1fAs!1fDfD1ωT$fE1fDl$0AGf8!fAo1fEo1fs fEL$fAr1fDo!1frfE1lj\$ AOf8fArfD1fAo!fE1fDp1fEofA؉D$fDl1fAs!1fDAGf8fD1׉l$fE1f$!fEo1fEo1fAs fEɉT$fAr1AOf8fAo!1fArfE1߉L$frfE1fEoc!fD1fDp1fAofE\$ Af8fDl1fs!1fDfA1D$$fD1fDd$!fEo1AOf8fAo1fAs fE҉l$(fr1fEo!1fArfD1ωT$,fArfE1fEokAG f8!fE1fDp1fEofEL$0fEl1fAs!1fDfE1lj\$4AO0f8fE1fDl$ !fAo1fEo1fs fEۉD$8fAr1fDo!1frA r*AG@f8AOPf8tAG`f8AOpf8f8AGfE1׉l$LvLnLfHn H^(Hf0H|$Ht$ÐH|$Ht$HHHLLLD$(LL$0LT$8SUATAUAVAWH$)t$`)|$pD)$D)$D)$D)$D)$D)$D)$D)$wIIILypAzo LD$XIM)EMLbAAYAIAQ Ai1!yos@AyozozoJzoR zoZ0yI@qiayqi$$l$t$ AxAxwAzo,$AABAx1q,$)1Źs!191ωT$Y1yL$0BAxw!Źr11űs L$1Y9r!11rY1lj\$ BAxY1!11iD$)1Źs!19BAxw1׉l$Q1y $!Źr11űs T$1Q9rBAx!11rQ1߉L$Q1AyoS!11a\$ BAx7)1Źs!191D$$I1yL$!Źr1BAx1űs l$(1I9r!11rI1ωT$,I1BAxw !11YL$0)1Źs!191lj\$4BAx0A1yL$ !Źr11űs D$81A9r!11rAA r.BAxw@BAxPtBAxw`BAxpBAxAxw1׉l$LvLnLfHn H^(Hf0H|$Ht$ÐyZyZyZyZnnnnܼܼܼܼbbbb   AESNI-CBC+SHA1 stitch for x86_64, CRYPTOGAMS by H|$Ht$HHHLLLD$(LL$0LT$8H$X)X)hD)xD)HD)PD)XD)`D)hD)pD)xEofEnIfo=DH)D9AHIpfEpfEpD7EWAWIf8AofEof8AobfEoAf8f8fDAoj MR@fAIf8fAfEof8E:D8Af88AorfEof8If8E:D8f8f8fEoE:D8If88f8A f8fEoE:D8I0f88f8A r&A@f8IPf8tA`f8Ipf8f8AfEoE:D8DwEW>AWIf88f8Af8fEoE:D8If88f8Af8fEoE:D8If88f8f8fEoE:D8If88f8A f8fEoE:D8I0f88f8A r&A@f8IPf8tA`f8Ipf8f8AfEoE:D8Dw EWT>AWIf88f8Af8fEoE:D8If88f8Af8fEoE:D8If88f8f8fEoE:D8If88f8A f8fEoE:D8I0f88f8A r&A@f8IPf8tA`f8Ipf8f8AfEoE:D8Dw0EWT> AWIf88f8Af8fEoE:D8If88f8Af8fEoE:D88fIf8fEoE:D88f8fAofEoE:D8If8fEoE:D8A f8I0f8A r&A@f8IPf8tA`f8Ipf8f8AHfET>0H@GfEpfEpAEfE~I(X(hD(xD(HD(PD(XD(`D(hD(pD(xHH|$Ht$ÐVWSUATAUAVAWH@I@xIIqMY8ENL9IESNL9LL9rH0IHH`Hp`IHHL8LpLhL`Hh HX(H@0IIMMMMHxHpIIIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8H@A_A^A]A\][_^LɡHtSAMSI=AMI AA(A(4&A 1Ht Ð/BD7q۵/BD7q۵[V9Y?^[V9Y?^[1$} U[1$} Ut]rހܛtt]rހܛtiGƝ̡ $iGƝ̡ $o,-tJܩ\ڈvo,-tJܩ\ڈvRQ>m1'YRQ>m1'Y GQcg)) GQcg)) '8!.m,M 8S '8!.m,M 8STs e jv.,rTs e jv.,r迢KfpK£Qlǡ迢KfpK£Ql$օ5pj$օ5pjl7LwH'4l7LwH'4 9JNOʜ[o.h 9JNOʜ[o.htocxxȄnjtocxxȄnjlPxqlPxq    AESNI-CBC+SHA256 stitch for x86_64, CRYPTOGAMS by H|$Ht$HHHLLLD$(LL$0LT$8SUATAUAVAWIH HHH)I)HHt$HHT$PLD$`LL$hLT$pL\$x)$)$D)$D)$D)$D)$D)$D)$D)$D)$wIHL-DwpMLAzoI AA_AOAW EGEOEWE_yotyolyod zoW o=ġzo&ġzoL&ġzoT& ġzo\&0yH-qieam u@}`$$Al$t$ 1|$0E HAzo $Ld$@qADaEE1ŏxA E1rAA1E!A1zoWE1D$AǏx A E1A1AED!x A1E1Dr AAAEޏxAEEA1A E1AE1A!A1A1sDT$DA E11AEA!x E1Er A1DяxAEAEAEAA1A E1sAE1A!B1zoWA1DL$EA E1uE1AED!E1ED1DAAAEAEAA1A A1AE1A!B1zoWA1DD$ DA A1D1AEA!E1EE1DAEAE4$iAEyAA1ŏxA A1rAE1A!B1zoWA1T$EǏx A A1E1ADD!x E1DD1Ar AEA֏xADAE1A A1AA1E!B1zoWE1sL$A A1D1ADA!x A1Dr E1AʏxADEAADEE1A A1sAA1E!B1zoWE1\$AA A1u A1ADD!A1D1AAEAADEE1A E1AA1E!B1zoWE1D$A E11ADA!A1DA1AADEAt$aADqEE1ŏxA E1rAA1E!B1zoE1D\$ AǏx A E1A1AED!x A1E1Dr AAAEޏxAEEA1A E1AE1A!B1zoWA1sDT$$DA E11AEA!x E1Er A1DяxAEAEAEAA1A E1sAE1A!B1zoW A1DL$(EA E1u@E1AED!E1ED1DAAAEAEAA1A A1AE1A!B1B1zoW0A1DD$,DA A1D1AEA!E1EE1DAEAEt$ yAEiAA1ŏxA A1rAE1A!A!B1zoW@A1T$0EǏx A A1E1ADD!x E1DD1Ar AEA֏xADAE1A A1AA1E!B1B1zoWPE1sL$4A A1D1ADA!x A1Dr E1AʏxADEAADEE1A A1sAA1E!A!B1zoW`E1\$8AA A1u`A1ADD!A1D1AAEAADEE1A E1AA1E!A9B1zoWE1D$LvLnLfHn H^(Hf0H|$Ht$ÐH|$Ht$HHHLLLD$(LL$0LT$8SUATAUAVAWIH HHH)I)HHt$HHT$PLD$`LL$hLT$pL\$x)$)$D)$D)$D)$D)$D)$D)$D)$D)$wIHL-DwpMLAzoI AA_AOAW EGEOEWE_yotyolyod zoW o=ġzo&ġzoL&ġzoT& ġzo\&0yH-qieam u@}`$$Al$t$ 1|$0E HAzo $Ld$@qEDEaE1E E1rEA1E!A1zoWE1D$ArE E1A1rEED!A1E1pDEAr AEEEEA1r E E1EE1A!A1A1r DT$DE E11EsEA!E1EA1DEEAsEEEAA1E pE1EE1sA!B1zoWA1DL$EE E1pPE1EEr D!E1EsD1DEAAEsEEAA1E A1pEE1A!sB1zoWA1DD$ DE A1D1uEEA!E1EE1DEEAE4$iEEAyA1E A1rEE1A!B1zoWA1T$ErE A1E1rEDD!E1DD1pAEr EAEDAE1r E A1EA1E!B1zoWE1r L$E A1D1EsDA!A1DE1AEDEsAEDEE1E pA1EA1sE!B1zoWE1\$AE A1pPA1EDr D!A1Ds1AEEAsEDEE1E E1pEA1E!sB1zoWE1D$E E11u EDA!A1DA1AEDEAt$aEDEqE1E E1rEA1E!B1zoE1D\$ ArE E1A1rEED!A1E1pDEAr AEEEEA1r E E1EE1A!B1zoWA1r DT$$DE E11EsEA!E1EA1DEEAsEEEAA1E pE1EE1sA!B1zoW A1DL$(EE E1pPE1EEr D!E1EsD1DEAAEsEEAA1E A1pEE1A!sB1B1zoW0A1DD$,DE A1D1u@EEA!E1EE1DEEAEt$ yEEAiA1E A1rEE1A!A!B1zoW@A1T$0ErE A1E1rEDD!E1DD1pAEr EAEDAE1r E A1EA1E!B1B1zoWPE1r L$4E A1D1EsDA!A1DE1AEDEsAEDEE1E pA1EA1sE!A!B1zoW`E1\$8AE A1pPA1EDr D!A1Ds1AEEAsEDEE1E E1pEA1E!sA9B1zoWE1D$LvLnLfHn H^(Hf0H|$Ht$ÐH|$Ht$HHHLLLD$(LL$0LT$8SUATAUAVAWIHHHHH)I)HHT$PLD$`LL$hLT$pL\$x)$)$D)$D)$D)$D)$D)$D)$D)$D)$wIc"HL%>DwpMLAzoMvyo4yolyod IAN$.A_I9AOLDAW EGEOEWE_zoWo=zoD5zoL5zoT5zo\5}8$u8L$}m8T$ ue8\$0H-lmMmeem u@}`$$E1l$ Hd$4$1|$ EHAzoMC"Hd$uD$E!C{eC{ B0G#rB8E1C{G#E1Arc{G+A1rc{ c{BD!A1zoWE11pE1E3Er D$A!c{{ G3G"r BhA1c{G"E1Dr C{G*1C{ C{B sA!A1E1A1E1G:AD$A!c{sc{ G2G !BpE1c{pG !E1EsC{G )E1C{ C{B pPD!B1zoWE1D1r E1E 1AsD$A!c{{ G 1G sb`A1c{G E1DpC{G(D1sC{ C{BA!B1zoWE1E1uE1G8A4$m$A!c{}c{ G0B"rbxE1c{B"E1ErC{B*E1rC{ C{ED!B1zoWE1D1pE12Ar $E!C{{ B2B !r b A1C{B !E1r c{B )D1c{ c{E sA!B1zoWE1E1E1B 9E$E!C{sC{ B 1B#b(E1C{pB#E1Asc{B+A1c{ c{E pPD!B1zoWE11r E13Es$E!C{{ B3B sB0A1C{B E1pc{B(1sc{ c{EA!B1zoWE1A1u E1B8Et$ Hd$eD$E!C{uC{ B0G#rB8E1C{G#E1Arc{G+A1rc{ c{BD!B1zoE11pE1E3Er D$A!c{{ G3G"r BhA1c{G"E1Dr C{G*1C{ C{B sA!B1zoWE1A1E1G:AD$A!c{sc{ G2G !BpE1c{pG !E1EsC{G )E1C{ C{B pPD!B1zoW E1D1r E1E 1AsD$A!c{{ G 1G sb`A1c{G E1DpC{G(D1sC{ C{BA!B1B1zoW0E1E1u@E1G8A4$}$A!c{mc{ G0B"rbxE1c{B"E1ErC{B*E1rC{ C{ED!A!B1zoW@E1D1pE12Ar $E!C{{ B2B !r b A1C{B !E1r c{B )D1c{ c{E sA!B1B1zoWPE1E1E1B 9E$E!C{sC{ B 1B#b(E1C{pB#E1Asc{B+A1c{ c{E pPD!A!B1zoW`E11r E13Es$E!C{{ B3B sB0A1C{B E1pc{B(1sc{ c{EA!A9B1zoWE1A1u`E1B8Et$ A~CA!A9z/MmH}AAzoMC"D\$@E!C{C{ B0G#B8E1C{G#E1Ac{G+A1c{ c{BD!A1zoWE11E1E3EDT$DA!c{{ G3G"BhA1c{G"E1DC{G*1C{ C{B A!A1E1A1E1G:ADL$HA!c{c{ G2G !BpE1c{G !E1EC{G )E1C{ C{B D!B1zoWE1D1E1E 1ADD$LA!c{{ G 1G b`A1c{G E1DC{G(D1C{ C{BA!B1zoWE1E1E1G8AT$`A!c{c{ G0B"bxE1c{B"E1EC{B*E1C{ C{ED!B1zoWE1D1E12AL$dE!C{{ B2B !b A1C{B !E1c{B )D1c{ c{E A!B1zoWE1E1E1B 9E\$hE!C{C{ B 1B#b(E1C{B#E1Ac{B+A1c{ c{E D!B1zoWE11E13ED$lE!C{{ B3B B0A1C{B E1c{B(1c{ c{EA!B1zoWE1A1E1B8ED$E!C{C{ B0G#B8E1C{G#E1Ac{G+A1c{ c{BD!B1zoE11E1E3EDT$A!c{{ G3G"BhA1c{G"E1DC{G*1C{ C{B A!B1zoWE1A1E1G:ADL$A!c{c{ G2G !BpE1c{G !E1EC{G )E1C{ C{B D!B1zoW E1D1E1E 1ADD$ A!c{{ G 1G b`A1c{G E1DC{G(D1C{ C{BA!B1B1zoW0E1E1E1G8AT$ A!c{c{ G0B"bxE1c{B"E1EC{B*E1C{ C{ED!A!B1zoW@E1D1E12AL$$E!C{{ B2B !b A1C{B !E1c{B )D1c{ c{E A!B1B1zoWPE1E1E1B 9E\$(E!C{C{ B 1B#b(E1C{B#E1Ac{B+A1c{ c{E D!A!B1zoW`E11E13ED$,E!C{{ B3B B0A1C{B E1c{B(1c{ c{EA!A9B1zoWE1A1E1B8ECA~L$(DH$A!A9z,MmAA_AOAW EGEOEWE_AA_AOAW EGEOEWE_L;mPE1E1AzoMC"D]E!C{C{ B0G#B8E1C{G#E1Ac{G+A1c{ c{BD!A1zoWE11E1E3EDUA!c{{ G3G"BhA1c{G"E1DC{G*1C{ C{B A!A1E1A1E1G:ADMA!c{c{ G2G !BpE1c{G !E1EC{G )E1C{ C{B D!B1zoWE1D1E1E 1ADEA!c{{ G 1G b`A1c{G E1DC{G(D1C{ C{BA!B1zoWE1E1E1G8AU0A!c{c{ G0B"bxE1c{B"E1EC{B*E1C{ C{ED!B1zoWE1D1E12AM4E!C{{ B2B !b A1C{B !E1c{B )D1c{ c{E A!B1zoWE1E1E1B 9E]8E!C{C{ B 1B#b(E1C{B#E1Ac{B+A1c{ c{E D!B1zoWE11E13EELvLnLfHn H^(Hf0H|$Ht$ÐH|$Ht$HHHLLLD$(LL$0LT$8H$X)X)hD)xD)HD)PD)XD)`D)hD)pD)xHоAo AoQfoDH)D9aHIpfpfpɱfpfof:flEoEoZEob fD8Eoj0fo@fAfD8fDofDoD7EWAWif88fpaf88fo@fAfD8MR@if88fpaf88fo@fAfD8E8if88fpfAofA:fD!f88fo@fAE8E8if88fpa f8fAofA:fD8fofAE8E8i0f88fpfAofA:fDA r&a@f8iPf8ta`f8ipf8f8a8DwEW4>AWif8fo@ fAE8E8af88fpfAofA:fDif88fo@@fAE8E8af88fpfAofA:fDif88fo@`fAE8E8!f88fpfAofA:fDif88fofAE8E8a f88fpfAofA:fDi0f8A r&a@f8iPf8ta`f8ipf8f8a8Dw EWt>AWif8fofAE8E8af88fpfAofA:fDif88fofAE8E8af88fpfAofA:fDif88fofAE8E8!f88fpfAofA:fDif88fofAE8E8a f88fpfAofA:fDi0f88fo fAE8E8A r&a@f8iPf8ta`f8ipf8f8a8fpfAofA:fDDw0EWt> AWif8af88fo@fAE8foif88fpaf88fo`fAif8!f88fpif88a f8i0f8A r&a@f8iPf8ta`f8ipf8f8afAfAHt>0H@fpұfpfpɱfmf:A0A AQ(4$(|$D(D$ D(L$0D(T$@D(\$PD(d$`D(l$pD($D($H$H|$Ht$ÐVWSUATAUAVAWH@I@xIIqMY8ENL9IESNL9LL9rH0IHH|LL9r H%HHH@xH@0HXHhL`LhLpLxIIMMMMHIHHxHpIIIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8H@A_A^A]A\][_^H|$Ht$HHHLƒr WHSUATAUAVAWH$X)4$)|$D)D$ D)L$0D)T$@D)\$PD)d$`D)hD)pD)xH0HHD$Do&HvxHPT$1ҋOLG9LgOхoWȉL$ LNċOLO9LoOхo_L$$LN̋OL9LwOхogL$(LNԋO8L_(9L0Oхoo@L$,LN܅NfAFfA܋FxfAAo0fAAo9fEofEo fAfAfDoT$ H1HHl$H)f8ALALf8ALALf8f8N;L$ f8f8f8LMLOf8F;L$$f8f8f8LMLOf8N;L$(f8f8f8LMLOf8F;L$,f8f8f8LMLOf8NfEof8ALALf8ALALf8f8FfEf8fEfDoff8fEfDT$ f8f8N f8f8f8f8F(rif8f8f8f8N8f8f8f8f8FHt7f8f8f8f8NXf8f8f8f8Fhf8f8f8f8Ao4oNf8Ao<fAf8EofAf8Eo fEf8oFfEATfA\fAdfAAlfAHD$T$H(((8D(HD(XD(hD(xD(`LxLpLhL`HhHXH H|$Ht$ÐH|$Ht$HHHLƒr SS HSUATAUAVAWH$X)4$)|$D)D$ D)L$0D)T$@D)\$PD)d$`D)hD)pD)xH0HHD$Do&HvxHPT$1ҋOLG9LgOхowȉL$ LNċOLO9LoOхoL$$LN̋OL9LwOхDoGL$(LNԋO8L_(9L0OхDoO@L$,LN܅NFFxAoAofAAo"fAAo+fAfAfDoT$ H1HHl$H)f8ALALf8ALALf8f8N;L$ f8f8f8LMLOf8F;L$$f8f8f8LMLOf8N;L$(f8f8f8LMLOf8F;L$,f8f8f8LMLOf8NfEof8ALALf8ALALf8f8FfEf8fEfDoff8fEfDT$ f8f8N f8f8f8f8F(rif8f8f8f8N8f8f8f8f8FHt7f8f8f8f8NXf8f8f8f8Fhf8f8f8fff8oNfDfDoFf8f8AotAo|fA8fA8EoDEoLATAoA\AofAAdAo$fAAlAo,fAfAHD$T$H(((8D(HD(XD(hD(xD(`LxLpLhL`HhHXH H|$Ht$H|$Ht$HHHLHSUATAUAVAWH$X)4$)|$D)D$ D)L$0D)T$@D)\$PD)`D)hD)pD)xHHHD$wzo>HvxH1ҋpL`9HhOхoxL$ LNL)H\$@OLO9HoOхo_L$$LNL)Hl$HOLW9HoOхogȉL$(LNL)Hl$POL_9HoOхooL$,LNL)Hl$XOL'9HoOхowL$0LNL)Hl$`O8Lo(9Ho0Oхo@L$4LNL)Hl$hO`LwP9HoXOхzoGhL$8LNL)Hl$pLx9HOхzoL$HvxH1ҋpL`9HhOхoxL$ LNL)H\$@$OLO9HoOхo_L$$LNL)Hl$H$OLW9HoOхogȉL$(LNL)Hl$P$OL_9HoOхooL$,LNL)Hl$X$OL'9HoOхowL$0LNL)Hl$`$O8Lo(9Ho0Oхo@L$4LNL)Hl$h$O`LwP9HoXOхzoGhL$8LNL)Hl$pz$ Lx9HOхzoL$DDNDVAD^ AAAKAAAEEAEMEUE] L<$Lt$Ll$Hl$H\$ Hd$(H|$Ht$ÐE3E3FE3^E3V A^AFD1D1L3T3L3T333A^AF1A1A1A1D1D1L3T3L3T333A^ AF$1A1A1A1D1D1L3T3L3T333A^(AF,1A1A1A1D1D1L3T3L3T333A^0AF41A1A1A1D1D1L3T3L3T333A^8AF<1A1A1A1D1D1L3T3L3T333A^@AFD1A1A1A1Mv@M9AVAN t#D!D A1A1D!D A1A1bD1D1D1D1AAAAÐ)ȹH|$Ht$HHHLLSUAUAVAWIIH-_ M4?DDNDVAD^ AAAKAAAEEAEMEUE] L<$Lt$Ll$Hl$H\$ Hd$(H|$Ht$ÐE3E3FE3^E3V A^AFD1D1L3T3L3T333A^AF1A1A1A1D1D1L3T3L3T333A^AF1A1A1A1D1D1L3T3L3T333A^AF1A1A1A1D1D1L3T3L3T333A^AF1A1A1A1D1D1L3T3L3T333A^AF1A1A1A1D1D1L3T3L3T333A^AF1A1A1A1MvM9AANt$D!D A1A1D!D A1A1cD1D1D1D1AAAAÐH|$Ht$HHHLSUAUAVAWAIDDNDVD^ AAAAEMEEE]EU ItSDFDNIt DVD^ EEAAAAAAEM EE$E](EU,E3ME3EE3]E3U L5.H-gAAFD1D1L3T3L3T333A^AF 1A1A1A1D1D1L3T3L3T333A^AF1A1A1A1E3ME3EE3]E3U D1D1L3T3L3T333A^AF1A1A1A1D1D1L3T3L3T333A^ AF$1A1A1A1IMI I M M IEI]MEMUIHII1I1L HL IEI]MIMI1I1M IM MEMUMIMI1I1M IM MEMUIHII"I"L HL IEI]MIMI1I1M IM MEIHII1I1L HL I]MIMI1I1M IM MEMUIHII/I/L HL IEI]IHII/I/L HL IEI]MI"MIIM I"M ME MU(IHII/I/L HL IE0I]8MIMI/I/M IM ME@MUHLEM0EE4E]8EU>>^^^!!! 999OOONNN]]]eeeZZZQQQlll|||ttt+++΄>>>000444___vvv^^^mmmũ :::999222GGG]]]SSS===ZZZzzzQQQ$$$VVVlll```MMMiii fffbbbTTT---dddttt+++ uuu ߇LLL444sss~~~vvvmmmRRR111сooocccXXX:::aaa)))///222xxxqqqSSS"""rrrDDD666***zzz<<<$$$@@@CCC```iiiwwwPPP'''}}}555bbb AAATTT[[[!!!NNNdddeeeҽďHHH000___uuuGGG=== ???VVVMMM \\\fff---JJJ 333sssLLLggg~~~111RRRXXXaaa&&&777;;;"""DDDoooKKKccc...PPPyyy}}}[[[nnn)))HHH///???YYYxxx\\\JJJjjj333gggFFFqqqԛ%%%&&&777BBB;;;KKK...rrryyynnnUUU YYY666IIIjjj***FFFhhh<<<%%%888BBB@@@(((UUU{{{ IIIhhhCCC888((({{{www888AAAXXXvvvgggNNN```rrr ®jjjuuu]]]WWWFFF'''Ɋ222KKKBBB''':::%%%III{{{ CCCqqq\\\___>>>>>>ggg|||```nnn///444 MMMSSSrrreeeꎎzzz---kkk+++666555MMM333fffaaaXXXZZZ:::$$$ VVV@@@xxxccc BBB333̿&&&充aaahhh???;;; oooSSSbbb...((( ,,,tttooo666"""888ddd999NNN,,, 000 yyyDDD"""eeeYYYkkk===###HHHtttQQQTTT000~~~(((UUUUUUhhhAAAPPPCCC111///˨***<<<+++ppp222iii bbb$$$GGGEEEsssmmm~~~)))JJJø...攔%%%!!!HHHfff{{{;;;qqq)))777ͱlllLLLdddnnncccvvv---KKK&&&}}}___\\\OOOFFF???777yyy^^^GGGRRRmmm[[[^^^iiiZZZ<<<111LLL 555󌌌###uuu]]]jjjJJJWWWՄ!!!DDDEEEQQQ}}}999sssܪ|||wwwYYYVVVlllTTT444xxxpppIIIRRR PPPwwwݓ䆆***[[[zzz@@@===OOOH|$Ht$HHHLLLD$(LL$0HSUATAUAVAWHH@HLQI)IIL)IILIDLD$(Hl$0H- HEHu H}@L]`HHIHO<>AHHIL4$HT$HL$L9DDKDSD[ E3$E3L$E3T$AE3\$ AAAlL4$AHT$AHL$AEEAEMEUMd$E] I9MmuHuLl$(EEEMEUE] dH1HD$HD$ HD$LH|$ fLd$HD$(HD$KMHHHL4$IHT$HL$HH[E$EL$ET$AE\$ AHD$AH\$ AL4$HT$HL$AI$AI\$AD3D$AD3L$D3T$ Md$D3\$$I9t!EEEMEUE] MmxHT$(Hu%EEEMEUE] HHZVWSUATAUAVAWHd$I@xIIqMY8ENL9rOIESNL9s;H@(HXHhLhLpLxIIMMMHxHpIIIVWSUATAUAVAWHd$I@xIL3L9L_L9r_ILL9LKL9v4H@LJL9r$H@L]L9vH@L]L9rH@H@0H@0HXHhL`LhLpLxIIMMMMHxHpIIIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8LHd$@A_A^A]A\][_^H|$Ht$HHHSUATLGLH1H1DDLDL LIHMʊIL3DILvLnLfHn H^(Hf0H|$Ht$ÐH)4$ofpNfpfofsffs?fffsff-CffpNfoffofpNff:Df:Df:Dfffofsfsfffofofsffsffs9fofsfsfffofsfffsffsffpNfpNffAf:a fofpNff:Df:Df:Dfffofsfsfffofofsffsffs9fofsfsfffofsfffsffsffofofpNff:Df:Df:Dfffofsfsfffofofsffsffs9fofsfsfffofsfffsffsffpNfpNfi0fA@f:aP(4$Hd$Ðofo-oob f8fofpNff:Df:Df:Dfffofsfsfffofofsffsffs9fofsfsfffofsfffsffsff8ÐH$xH`)p)xD)D)HD)P D)X0D)`@D)hPD)p`D)xpfDooooz fA8Iuor I0L%@=@<I0H `@Dor0Doz@AoX0EoX fA8fE8fofpNff:Df:Df:DfEofEpNfEfD:DfD:DfD:DAWAWzPAWEoXEofE8fE8fEofEpNfAfEfE:DfofDpNfDfE:DfD:DAWAWM@@I@ fA:DAWEoX0fE8fA:DWAoX fEofD:DfEpNWfEfA8z DWfD:DfpNfDfofDffEofD:DfAsfAsfAfDoMfAfLnfDfE8fDfD:DfAs9fEofAsf:DfAsfAfAEofDofsf:DAWEoXfE8f:DAWzPfE8fAfDfsfEofAfEpNfAfAfEfE:DfsffofE:DAWfDpNfDfD:DAWM@@I@{fA:DfA:DfD:DAWWWffDfDffEofAsfAsfAfAfofofsffsffs9fofsfsfffofsfffsffsfI@oz IEoAoXfE8fA8fAfofpNff:Df:Df:DM@ I fofDofpNff:Df:Df:DffEofDfE8AoXfDfAfAfA8fDofAsfsfAffofDofDofsfDf:DfsfAfs9fDofsfAsfAfpNfAffDofsf:DfAfDfsfAM@ fsf:DfI fofDofpNff:Df:Df:DfffDfDfAfDofAsfsfAffofofsffsffs9fofsfsfffofsfffsffsfMEofE8fAfofpNff:Df:Df:Dfffofsfsfffofofsffsffs9fofsfsfffofsfffsffsffA8(4$(|$D(D$ D(L$0D(T$@D(\$PD(d$`D(l$pD($D($H$ÐH)4$wopNps?sfs-4 moAYimyDyDaDsss9s>s?sssssomyDyDaDsss9s>s?ssssspNpN)AHI0Iaiw(4$Hd$ÐH$xH`)p)xD)D)HD)P D)X0D)`@D)hPD)p`D)xpwzoLGHR@zo-+B)IIAzopporB ozA mAzox` DA1B DorAmAzopP1DA9B DA mDorA1Azox@9DozB DAm Do21DA9Azop0DB Dor A m9Doz@A1Azox DB Dor0Am1DA9AzopDB DorPA m9DozpA1Azo8 DB Dor`1DMILAIAmAzoppA9cDB cDorA mc9DozA1Azox` D)B D WorAm1DA8WAzopPADA1sDsA)orB A WA m9DozA1Azox@C) DB Do2Am1DA8WAzop0C)DDB Dor A m9Doz@A1Azox DB Dor0Am1DA9A(WAzopC)DB DorPC)DAWA m9DozpA1Azo8 DB Dor`A1DAMIIzotOorozB oooIAmDA9AzopDorB 9DsIiAmDA9AzopDorB 9DozI"AmDA9AzopDo2B 9DsIAmDA9AzopDor B 9Doz@IAmDA9AzopDor0B 9DsItRAmDA9AzopDorPB 9D~zxIAAmDA9D9DAzo"aYQQűssA)!C)DC)A)C)DC)A)A)IB)zw(4$(|$D(D$ D(L$0D(T$@D(\$PD(d$`D(l$pD($D($H$Ð  @8`$plHT @`FN V   ^ f(n0v8~@89;:H?><=P6754X1023`$%'&&h#" .!p*+)6(x-,.>/pBqsrwJv tu~R}|yZxz{lbm$onkjj,hibrc4a`ezd΀BƓJ ΔR֝Zޚb$揨j,r4z<DȮ LЧTؠ\"d*l2t:|GHASH for x86_64, CRYPTOGAMS by VWSUATAUAVAWH@I@xIIqMY8ENL9r9IESNL9s%H@HXHhL`IIMHxHpIIIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8,H@A_A^A]A\][_^zoS Hzoyq)!Aqd$ zoYʼnA)A!zADAQADM1M9b1oD$8AADb)A AADb!zoYIbyD9bI`xyyDb yDO4&B19D$yDoD$HB)M8nXB!M8fPBLl$(BLd$0zoiB xyyDB1yDB)yDB!yDoD$XBBzoI B xyyDB1yDB)M8nHyDB!M8f@yDoD$hBLl$8BLd$@zoQ@B xyyDB1yDB)M8n8yD9D$xB!M8f0yDBLl$HBLd$PzoYPB xy9DB19DB)M8n(9DB!M8f c9DBLl$XBLd$`B xyszo[B1AB)M8nB!M8fYYDLl$hBLd$pB B b1xyb)sb!bM8nbM8&b I B1B)B!BBB b1b)b!bbxy0b I@B1B)B!BBB b1b)b!bbxyPb I`mzoqzok0AIS@IzoY)b)!b!A)bA!őbb qB1|$cYB)YDB!GBo Bw0B @_Pzob1zoS b)Ll$xH`b!L$Hv`zoybbb I`HrBxNAqxVyox^yoxfyoxnyoxvyoo|$(9D$9ÐH|$Ht$HHHLLLD$(LL$0M1H`H$SUATAUAVAWH$X)()8D)HD)XD)hD)xD)`D)hD)pD)xwzoHĀAX LLqAAzoHzoHMI@ipb9M!I!M)r IsL)oPL7og@L@oo0HM1ow AoWYoQd$0Il$@it$PaT$`\$p/xNxVx^xfxnxvB9AzAw(((8D(HD(XD(hD(xD(`D(hD(pD(xLxLpLhL`HhHXH LH|$Ht$ÐoazoS LmxyLaq́q))!!ʼn B1B)B!BBB Ax<$Md$Auzo$B1'B)oB!w BaG0BW@B _PH`b1b)b!Bbb xxVx^ xf0xn@xvPHv`Ðqzok0AIS@I)b)!b!)b!őbb q H|$Ht$HHHLLLD$(LL$0M1H H$SUATAUAVAWH$X)()8D)HD)XD)hD)xD)`D)hD)pD)xwzoHĀAX L^LqAHzoH䀋ipM!I!M)r IsL)L6L@Hb1)zD$p!T$`d$Pl$@ t$0UAzoMI@H Ab9o|$ zozoYmAzo9xNb1xVb)x^b!xfbxnbxvb zL$ot$0zoAmADADqDzoL$@IDzoY1mIDQiDAzoy0oL$P1DzoA mc1D1QDoT$`qDzoY@mqDqYDAzoy`9D$piDzoAPA9miDA1AD9DzoY mc9DqC1DAzo9ŹűzoAA DImc DiűsqDAQsDzoYAmcDA1AC9iDAzoy0DzoA !mcDqAW|$C1D1C9DCA8W!DzoY@)mc!DiC9A!qDAzoy`qWC9DCA8W)DzoAPA9mc)DA1A)iD9D9D1DAszo[sQ9c9D99c9D9B9AzAw(((8D(HD(XD(hD(xD(`D(hD(pD(xLxLpLhL`HhHXH LH|$Ht$Ð AES-NI GCM module for x86_64, CRYPTOGAMS by VWSUATAUAVAWH@I@xIIqMY8ENL9rqIESNL9s]I@xLxLpLhL`HhHXMMMMIIH(IHHxHpIIIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8 H@A_A^A]A\][_^H|$Ht$HHHLLLD$(LL$0EHAu.Ar(DH9A1SUATAUAVAWIINTIIM)IK$L$L9w H$L$L9wJDIMI$HM1M1LHIHIIHIHFHIM*IJHMMHNlIHIJHMIHM9uIHHMHNlIMH1MHNlJMvKM1LL$HIHHIIHIHFHLT$IM IJHMNHNlIHIJHMIIMHM9uIHHMNHNlIH1MHMHNlJMvM9:M1H$H4$M JJJDMvIuHM1H!HHH!MH ΐJN4JMvIuJtL~LvLnLfHnH^H&H|$Ht$ÐH|$Ht$HHHLLLD$(LL$0EHAASUATAUAVAWIINTIIM)IK$L$L9wH$L$L9wJDJ|IMI$HM1M1LHIHIIHIHFHHHIHAHIHHHFHLMHH<$IHIJDHIHIJDHMHNlHHIJDHIHHJHLHJ|IHIJHIHIJDHMHNlHHIJDHMIHHJDHLHJ|IM95HIJDHIHIJDHMHNlHHIJDHIHHHHLHJ|IH1MHNlJVWSUATAUAVAWH@I@xIIqMY8ENL9IESNL9MJD[VWSUATAUAVAWH@I@xIIqMY8ENL9rgESNL9rIESNL9sFH@(HXHhL`LhLpLxIIMMMMHxHpIIIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8% H@A_A^A]A\][_^H|$Ht$HHHLLLD$(LL$0EHAuDifnl$8SUATAUAVAWIINIIM)IK$L$L9wH$L$L9wL'3JDLfAofAoJNT̨IfpfofoffvgfoffvfABpfoffvfAfoffvfAfoffvfAfoffvfAfoffvfAfoffvfAfoffvfAfoffvfAfoffvfAfoffvfAfoffvfA foffvfA0fgfvfA@fvfAPfAD$@fAL$PfAT$`fA`fA\$pfffAod$fAol$fAoT$fAbpfAo\$fA۪ffAےffAۚfffAod$fAol$fAoT$fAۢfAo\$fA۪ffAےffAۚfffAo$$fAol$fAoT$ fAۢfAo\$0fA۪ffAےffAۚ ffffpNfM$fH~MHM1M1LHIHIIHIHFHIM(IJHMMHNlIHIJHMIHM9uIHMHNlIMH1MHNlJMvJ̘HfffAoD$fAoL$fAoT$fAo\$fBfJffRffZfffAoD$fAoL$fAoT$fAo\$fBfJffRffZfffAo$fAoL$fAoT$ fAo\$0ffJffR ffZ0fffAoD$@fAoL$PfAoT$`fAo\$pfB@fJPffR`ffZpffffpNfM$HfH~M1LL$HIHHIIHIHFHLT$IM%IJHMNHNlIHIJHMIIMHM9uIHMNHNlIH1MHMHNlJMvM9 M1H$H4$M JJJDMvIuHM1H!HHH!MH ΐJN4JMvIuJtL~LvLnLfHnH^H&H|$Ht$ÐH|$Ht$HHHLLLD$(LL$0gHAA SUATAUAVAWgAOIINLHI)IM9rL)JM(O JMM)AMBL)HII)II$+L$H9wH$L$H9wIHD$(BHt$(L~LvLnLfHnH^H&H|$Ht$ÐIfnh8H,N IfofoHNT LfpfoggfoffvgfoffvfABpfoffvfAfoffvfAfoffvfAfoffvfAfoffvfAfoffvfAfoffvfAfoffvfAfoffvfAfoffvfAfoffvfA foffvfA0fgfvfA@fvfAPfAD$@fAL$PfAT$`fA`fA\$pfffAod$fAol$fAoT$fAbpfAo\$fA۪ffAےffAۚfffAod$fAol$fAoT$fAۢfAo\$fA۪ffAےffAۚfffAo$$fAol$fAoT$ fAۢfAo\$0fA۪ffAےffAۚ ffffpNfM$fH~Ll$H|$@MHJ4ILHIHILt$HIHIJDHHHIHAHIHHJDHLMy HI HI>IHIHAMv HIHIJD>HMHMnHHIHAHIHHJ>HLHI~IHIHHIHIJD>HMHMnHHIHAHIHHJD>HLHI HI>II 9HIHAMv HIHIHFHMHMnHHIHAHIHHJHLHI~IJ H1MHMnIfffAoD$fAoL$fAoT$fAo\$fBfJffRffZfffAoD$fAoL$fAoT$fAo\$fBfJffRffZfffAo$fAoL$fAoT$ fAo\$0ffJffR ffZ0fffAoD$@fAoL$PfAoT$`fAo\$pfB@fJPffR`ffZpffffpNfM$fH~OLHIHHIII>O4HIJDHHHIHAHM^HIHHJDHLMy HI HI HIHAHMVMv HIHIJD>HMHI~HHIHAHM^HIHHJ>HLHMnIHIHHMHIHIJD>HMHI~HHIHAHM^HIHHJD>HLHI HMnII HIHAHMVMv HIHIHFHMHI~HHIHHiHM^HIHHJHLHMnII~J H1MHM.HMnL;d$H1L)ML H)KL!H)LHH|$@IM1LmLuL} H|$Ht$HHHLLLD$(LL$0HDkAASUATAUAVAWAGIIMNLHI)IM9r L)JM O JMM)AMBL)HII)II$+L$H9wH$L$H9wMILD$ HD$(fHnfHnfInfHnA |7 r- h# ^ fH~fH~HHD$(LD$ Ht$(L~LvLnLfHnH^H&H|$Ht$ÐIj J4LLt.J|L8HD.H|/H\.IIIHILT/IIHHL\/IH\.IIHIHMIIHIIMILTHIIHIIIIHH\IIMIIIHLIIIIHH\IIMIIIHLTIIIIHH\IIMIIIHL\IIHI IIHIIMILTH0IIHmHMHL/IHWLt.J|L8HD.H|/H\.IILT/IHHLT/IIIHHL\/IIL\/M1H\.IIHHLd/IIIIHHMIILT/HM HIIHIIL,IgIIHH\IIMIIILHIILdHIIIIHHMIILTHugIIHMHL/IHWHLvJ|L8HFH|/H^IIIHIIIIHLWIIMH^IIIHL_IIIIHIIMILWIIHFHMHL/IHWHHM1L)M1LHHGHWLHD.H|$8M1L_O$VI?N,YI?M LWMHIL_IHD.L'IKVLoMI?NYI?M LW MHIL_(HH.H_IHmLGMH@O$VI?N,YI?M LWMHIL_IHD.LgIKVLoMI?NYI?M LMHIL_HH.H_IO$VLGMI?N,YI?M LWMHIL_IHD.L'IKVLoMI?NYI?M LW MHIL_(HHD.H_ILGMH@H  O$VgI?N,YI?M LWMHIL_IHFLgIKVLoMI?NYI?M HIHIH_LGfH~H1I )JTL8HL$J| 8HT$IJ<fHLOLWL_Lg Lo(Lw0L8HH@gIH\$(HEHHEIIIHIHEHMH\0IIHIHEHMHt$(IIHIHE HIMIIHIHE(HMIIHIHE0HMIIHIHE8HMIIHHIHEHMII.Hm@H1HT$H;l$fLLOLWL_Lg Lo(Lw0L8HH\$pHEHIHELIIHIHEHMHIIHIHEHMIIHIHE HMIIHIHE(HMIIHIHE0HMIIHIHE8HMIIHH\(IHMHEII3Hm@HT$H;l$sCH\$pHHELLOLWL_Lg Lo(Lw0L8HH1LIIIIIIIHHLLOLWL_Lg Lo(Lw0L8HHMH1fH~LLOfI~LWL_Lg Lo(Lw0L8H@H9ÐLeJLfH~HfH~HIM1LmLuL}LeLmLuL}Hm IIIII!I!I!I!IL#LkLsL{L'H[ LoMLwLH HuMIÐD$0t1ÐH|$Ht$HHHLLLD$(LL$0gHSUATAUAVAWAOIIMNLHI)IM9r'L)JM:O JMM)AMBL)HII)II$+L$H9wH$L$H9wMILD$ HD$(MHD$0fooVo^ fBof0fBDH@ffBD fPfBD0fX f`0H@@I@ufHnfHngHfInD,AAu$J<6fHD$0Ht$(&TfHD$0Ht$(ff@f@ f@0H@@I uL~LvLnLfHnH^H&H|$Ht$ÐH|$Ht$HHHLLLD$(LL$0HSUATAUAVAWAOIIMNLHI)IM9r L)JM O JMM)AMBL)HII)II$+L$H9wH$L$H9wLD$ HD$(;Ht$(L~LvLnLfHnH^H&H|$Ht$ÐLL$MIIIN I fnh8IHLl$LL$ H|$@fofoHNTHfpfogfogffvfoffvfABpfoffvfAfoffvfAfoffvfAfoffvfAfoffvfAfoffvfAfoffvfAfoffvfAfoffvfAfoffvfAfoffvfA fogffvfA0ffvfA@fvfAPfG@fOPfW`fA`f_pfffogfoofoWfAbpfo_fA۪ffAےffAۚfffogfoofoWfAۢfo_fA۪ffAےffAۚfffo'foofoW fAۢfo_0fA۪ffAےffAۚ ffffpNfHfH~H\$hIbfIbnIIbvMLD$(H1LH|$Hv fL8fL8bfL8M8bYfL8M8baH|$ LSfL8M8byLL[fL8L8HI Lc fL8fM8bvfL8FfM8bvggLfL8fL8Hv H[ M8b9fL8M8byfL8M8byLSfL8L[M8byLLcfL8L8HI LkHKHD$IH4MH|$HLsLfggffoGfoOfoWfAۂfo_fAۊffAے ffAۚ0fffoGfoOfoWfAۂ@fo_fAۊPffAے`ffAۚpfffofoOfoW fAۂfo_0fAۊffAےffAۚfffoG@foOPfoW`fAۂfo_pfAۊffAےffAۚffffpNfHfH~H+H\ bH1IbfL8CfM8bnL8[fM8bvL8cfL8H Hv L8kfL8L8MLD$(LH1H|$bfL8M8bYfL8M8bafL8M8byLH|$ LSfL8L[L8LcHI fL8M8bvfL8L8FfL8[M8bvLfL8cL8fL8kL8Hv H[ fL8M8b9fL8M8byfL8M8byLSfL8M8L[byLHI LcfL8L8LkH,HD$IH+;H|$LT$MH4HLsL9LQIL$H,HH<1M1M)MM HL)HT$@ILmM1LuL} H|$Ht$HHHLLLD$(LL$0HSUATAUAVAWAOIIMNLHI)IM9r(L)JM;O JMM)AMBL)HII)II$+L$H9wH$L$H9wMIffHnfHnfInfHnLD$ HD$( x n d Z MHfH~fH~HD$(Ht$(L~LvLnLfHnH^H&H|$Ht$ÐH|$8J,LL$Hl$+fff.>ffGfG fG0fG@fGPfG`fGpHI@uHM1M1M1M1M1M1H|$8H1FfM8L8FfM8L8fM8L8 fM8L8F(fM8L8F0fM8I8b~8HVfL8L8L@LGLOHH1^FfM8L8^ fM8L8(fM8L80fM8M8b8HVfL8L8fM8L8fL8LGLO ^F fM8L8^(fM8L80fM8M8b8>HVfL8L8fM8LG(LO0F L8fL8^(fM8L8F0fM8M8bf8HV Lv(fL8L8L~0fM8L8fL8LG8LO@³LF8fM8«L8fM8£LL8fM8fH8‹BLHv@fM8L8fL8L8ggBfM8fL8H;t$HHILG@fL8OHfL8WPfL8_XLg`LohLwpLxH.HHHVHD$H|$ 1LbEfH8M8bMfL8M8bUfL8M8b]fL8M8b fL8M8bm(fL8M8bu0HϻfL8M8b8HTfL8L8fL8gHIHm@HH;l$tWH+\$fHVfL8fL8OLWL_Lg Lo(Lw0L8H@gH1HD$L+D$HL$ H1LH9LOLILWLQL_LYLg La Lo(Li(Lw0Lq0L8Ly8HLOHfH~LWPL_XLg`LohLwpH|$8HL_M1LL$M8LgLoM8fI8HL M8fI8L_(HH_M8fI8HTLg0M8fI8Lo8HGH_M8fI8HTHI LW@M8fI8L_HHG H_(M8fI8.HM8fI8LgPLoXHG0H_8H@ fI8HG0H_8H@fH~1H\$(HT$8JL HL$H|$H|$8LOLWL_Lg IHLo(Lw0L8HD$ H@H1HLbEfH8M8bMfL8M8bUfL8M8b]fL8M8b HLfL8M8T$(HHDxbm(fL8M8bu0fL8M8b}8HfL8L8fL8gggH@HH;l$HT$8LHm@HfL8OfL8WL_Lg Lo(Lw0L8H@HH1HD$ LbEfH8M8bMfL8M8bUfL8M8b]fL8M8b fL8M8bm(fL8M8bu0fL8M8b}8H̀fL8L8HLfL8HLH;l$sEH+t$HT$8Hm@LLOLWL_Lg Lo(Lw0L8H@HHH1HD$H1LD$ IIIIIIIHH+t$LfH~LOHu8fH~LWL_Lg Lo(Lw0L8HH\$(HT@LLG@LOLWL_Lg Lo(Lw0L8H|@L;D$ÐLeIIHHfH~fH~ILmM1LuL}LeLmLuL}bHm bbbIL'LoLwLL"H LjMLrLzHR HuIÐLLYA MGGARÐtOHHIIMuÐL$HHnHfAnfofoHMH$fpfofoffvfoffvf@foffvfHfoffvfPfoffvfXfoffvf@foffvfHfoffvfPfoffvfXfoffvffoffvfHfoffvfP foffvfX0foffvf@@foffvfHPfoffvfP`fofXpfffAoCfAoKfAoSf@fAo[fHffPffXfffAoCfAoKfAoSf@fAo[fHffPffXfffAofAoKfAoS ffAo[0fHffP ffX0fffAoC@fAoKPfAoS`f@@fAo[pfHPffP`ffXpfffMfpNffHII"Montgomery Multiplication with scatter/gather for x86_64, CRYPTOGAMS by VWSUATAUAVAWH@I@xIIqMY8ENL9ESNL9r2IESNL9s`LL9wMJDH@(HXHhL`LhLpLxIIMMMMHxHpIIIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8wH@A_A^A]A\][_^HIH4IH<I!L$H?O H?NH!H?HH?H!HHH>H!HH1HH=H1HH1H1MH$M1LL$MLT$M1Ll$M1L\$ M1LL$(M1LT$0M1Ll$8M1Ld$@M1LL$HM1LT$PM1Ll$XM1Lt$`LLL$hH!LT$pHLl$xLH!H~LH!HH LHHH!~ HVWSUATAUAVAWH@IILL9rPLpPLhXL``HhhHXpHxxHIIIIMMMHIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8H@A_A^A]A\][_^H|$Ht$HHHLLLD$(SUATAUAVAWHHHHFH$AD#ʚAED$HHIHFIHIHFIIHIHF IIHIHF(IIHIHF0IIHIHF8IIHIHIIMLMHH$IILD$H?LFHFIIHFHHIIHF HIHHIIHF(HIHHIIHF0HIHHIIHF8HIHHIILHIILIHNQLMHIIILL$LT$H?LNHFIIHF HHIIHF(HIHHIIHF0HIHHIMN$cIHF8HIHHII?ILHIIILO,jHIIIL\$ Ld$(H?LVHF IIHF(HHIIHF0HIHHIMN4qIHF8HIHHII?ILHIIILO<|HIIILl$0Lt$8H?L^ HF(IIHF0HHIIHF8HMNCIHHII?ILHIIILO LHIIIL|$@LD$HH?Lf(HF0IIHF8HHIILMNQHI?IIILO_HIIILL$PLT$XLn0HF8IILIIM1HMMMHIIIL\$`Ld$hHF8HIHILl$pLt$xL$LL$LT$L\$Ld$ Ll$(Lt$0L|$8LD$@LL$HLT$PL\$XLd$`Ll$hLt$pL|$xHLLD$HAWD$fHnfHnbbVH1b^fL8bf fL8bn(fL8b0fL8fL8b8fL8fL8LMI1fL8HVfL8H$LD$^L8fL8bL8fM8^ L8fL8bF(L8fM80L8fL8b8L8fL8L8LMI1HVfL8fL8fL8LL$L$bL8fM8N L8fL8bN(L8fM80L8fL8b8L8fL8L8LMI1fL8fL8HVfL8L\$ L$( L8fL8bV(L8fM8^0L8fL8bV8L8fL8L8fLMI1fL8fL8HV fL8Ll$0Lt$8b(L8fM8N0L8fL8b^8L8fL8L8LMI1fL8fL8HV(fL8L|$@LD$H0L8fL8b8L8fL8L8LMI1fL8fL8HV0fL8LL$PLT$Xb8L8L8M1MMI1fL8fL8HV8fL8L$`L$hL8H8fILl$pLt$xfH~fH~H$L$LL$LT$L\$Ld$ Ll$(Lt$0L|$8 LD$@LL$HLT$PL\$XLd$`Ll$hLt$pL|$xHW LLD$HAH$LxLpLhL`HhHXH H|$Ht$ÐH|$Ht$HHHLLLD$(SUATAUAVAWHfHnfHnL$AD#AtIHH^ fH~fH~L$LL$LT$L\$Ld$ Ll$(Lt$0L|$8 OHHfH~fH~H$L$LL$LT$L\$Ld$ Ll$(Lt$0L|$87 LD$@LL$HLT$PL\$XLd$`Ll$hLt$pL|$xH H$LxLpLhL`HhHXH H|$Ht$ÐH|$Ht$HHHLLLD$(LL$0SUATAUAVAWHH)$)$D)$D)$D)$D)$D)$D)$D)$ D)$0fEnfo wfo_fEpfofoffAvfoffAvfoffAvfoffAvfoffAvffAvffAvfAvfDofDoJfDoR fDoZ0fDfDob@fDfDojPfDfDor`fDfDozpHfDfDfDfDfEfEfEfEfEfEfEfEpNfEAD#AwfL~L$H$H$HHNHH$HIHIHFIIHIHFIIHIHF IIHIHF(IIHIHF0IIHIHF8IIHIHIIH|$fDoEfDoMfDoU fDo]0fDfDoe@fDfDomPfDfDou`fDfDo}pHfDfDfDfDfEfEfEfEfEfEfEfEpNfEfL~HIHFLIIHIHFHMIIHIHFHMIIHIHF HMIIHIHF(HMIIHIHF0HMIIHIHF8HMIIHIHHMIIHLLOLWL_Lg Lo(Lw0L8H$H$L$LL$LT$L\$Ld$ Ll$(Lt$0L|$8VfL~L$H$H$bH$1bNbVfL8b^fL8bf fL8bn(fL8bv0fL8b~8fL8fL8gLfL8HfDoEfDoMfDoU fDo]0fDfDoe@fDfDomPfDfDou`fDfDo}pHfDfDfDfDfEfEfEfEfEfEfEfEpNfEfL~bfH8M8bNfL8M8bVfL8M8bfL8M8bf fL8M8bn(fL8M8b0fL8gM8b~8H\@fL8L8LfL8HLD$@LL$HLT$PL\$XLd$`Ll$hLt$pL|$xH$H$H$L$LL$LT$L\$Ld$ Ll$(Lt$0L|$8QLD$@LL$HLT$PL\$XLd$`Ll$hLt$pL|$xHH$(p(xD(@D(HD(PD(X(D(`8D(hHD(pXD(xhHLxLpLhL`HhHXH H|$Ht$ÐH|$Ht$HHHLLLD$(LL$0SUATAUAVAWEHOfHnfHnfInH$HAD#AtUHfH~fH~L$LL$LT$L\$Ld$ Ll$(Lt$0L|$8[HfH~fH~H$L$LL$LT$L\$Ld$ Ll$(Lt$0L|$8LD$@LL$HLT$PL\$XLd$`Ll$hLt$pL|$xfH~HELLLLLLLLH$LxLpLhL`HhHXH H|$Ht$ÐH|$Ht$HHHLLSUATAUAVAWHHH$LfLNLVL^Lf Ln(Lv0L~8f$fD$fD$ fD$0fD$@fD$PfD$`%=t hH$SLLOLWL_Lg Lo(Lw0L8H$LxLpLhL`HhHXH H|$Ht$ÐLH$HE HHEIIIHIHEHMIIHIHEHMIIHIHE HMH$HIHIHE(HIMIIHIHE0HMIIHIHE8HMIIHHIHEHMII0ÐIH1LbEfH8M8bMfL8M8bUfL8M8b]fL8M8b HLfL8M8$Hbm(fL8M8b0fL8M8b}8HfL8L8fL8CÐLLOLWL_Lg Lo(Lw0L8LELMIII!LUI!IL]I!ILe I!ILm(I!ILu0I!IL}8I!II!LLOLWL_Lg Lo(Lw0L8LLOLWL_Lg Lo(Lw0L8ÐH|$HHHHFIHIHFIIHIHFIIHIHF IIHIHF(IIHIHF0IIHIHF8IIHIHIIHmHH]HIHFLIIHIHFHMIIHIHFHMIIHIHF HMIIHIHF(HMIIHIHF0HMIIHIHF8HMIHmIHIHHMIIH1LLOLWL_Lg Lo(Lw0L8ÐbHbNH\$bVIb^Ibf Ibn(Ibv0Ib~8HUIIIH1LbfH8M8bNfL8M8bVfL8M8b^fL8M8>b fL8M8bn(fL8M8bv0fL8M8b~8HT@H\@fL8L8fL8HQLbfH8M8bfL8M8bfL8M8b^fL8M8bf fL8M8bn(fL8M8b0fL8M8b8fL8L8fL8H\$@LD$HLL$PLT$XL\$`Ld$hLl$pLt$xL$ÐJ AHHRHHAuÐH)4$)|$D)D$ D)L$0D)T$@D)\$PD)d$`D)l$pD)$D)$fEnfo fofEpfofoffAvfoffAvfoffAvfoffAvfoffAvffAvffAvfAvA fDofDoJfDoR fDoZ0fDfDob@fDfDojPfDfDor`fDfDozpHfDfDfDfDfEfEfEfEfEfEfEfEpNfEfDHIAb(4$(|$D(D$ D(L$0D(T$@D(\$PD(d$`D(l$pD($D($HĨÐVWSUATAUAVAWH@I@xIIqMY8ENL9IESNL9ssHHL9uHH(IHHXHhL`LhLpLxIIMMMMHxHpIIIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8H@A_A^A]A\][_^H|$Ht$HHHLLLD$(H$SUATAUAVAWwH$X)()8x)Hx)Xx)hx)xx)`x)hx)px)xHIH@MHHIII@I A5H@~oEH~oM~oU~o]~oe~om ~ou@~o}`A~oL$~E~M~U~]~e~m ~u@~}`A~A~HoNoVo^o&on ov@o~`~oH$b}Y=9L$L$b}YV}I}Q}Y}a})}q A=}y@A5A}A`ŭFb}Y^~K`uA~L$mA~L$eA~L$]A~L$UA~ $MA~L$ EA~L$@A=b}YVA~L$`IAB}Y_ŭFԃ@-Iԋ`-QS-Y[-ac-)k-q 3-y@{ A-A`B}YW=C@@`%fmA%qeA%i]A%aUA%1MA%i EA%a@A=%A`B}Y_C`S[-n]A-aUA-qMA-)EA-a A=A-q@}-I`B}YuL$ck%fMA%qEA%)A=A%a }A%q@u%Q`B}Y_ mT$3{ -&A=A-1}A-i uA-a@m-Y`B}YW@e\$~C@C`H[%n uA%a mA%q@e%a`B}Y_`]d$~L$~T$-f@eA-q@}Y]-i`B}YWU,$~\$~d$M%f`U%q`Mt$ ~,$E|$@~t$ ~|$@Md$AV~o$o$ o$@H$ sA=ťsuCA5CۓC C%A=C5umK`H$LT$L\$Ld$oL$ oSo[ocoko3o{ I%ynHIEB}YIHIEIIHIEMIIUIL%A ynB}YAUHIEuIAuHIEmA]gIgHIEIeAUIM]Au LUA]@%MAU`EAynA=B}YA]A~ouHIEuAUA~o]IHIEmLIA A~oULeA%A~ou8gI]A-A~oX%UA A~oUxMA%A~onIEEA-A~ou}YA=A5A~o]IA~omA A~oUuA%A~omA-A~o]ga~~,$eA A~oU0]A%A~ouPUA-A~o]pMA IA~oLEA%IA=A-%ynA~o]gA5B}YA}uA~oUHIELT$m%A~ouIHIEgIL\$e-A~o](IHIE] A~oUHIUIKU%A~ouhI-MA~o%E HT$=%A5AnIAL$A5C`uL$mT$e\$]d$U,$Mt$ E|$@A=D$`ōs}ťsuŝsCmŕsCۓeCC CC%}CuCmC5e]ōs}ťsuŝsCmŕsCۓeCC CC%}CuGCmOC5eW]_ōs]ťsUŝsCMŕsCۓE}sCA=CC C%]CUCMC}EA=ōs]ťsUŝsCMŕsCۓE}sCA=CC C%]CU'CMo C}Ew@A=`~HAwH(((8D(HD(XD(hD(xD(`D(hD(pD(xLxLpLhL`HhHXH H|$Ht$ÐH|$Ht$HHHLLLD$(H$SUATAUAVAWwH$X)()8x)Hx)Xx)hx)xx)`x)hx)px)xHwIH@ggIII@I IIEMEIHHHII@ggI H@oAHoIoQoYo!oi oq@oy`~oH$AIQY!i q@y`~}o~HI]B}YU$M1gM1M1M1~o=A ~ŵsHHFLILVLT$IA%IL^L\$ILfLd$ŭFyn-fB}Ym-neeŭ-f U-n@MŭF`Cɓ-B}YUA=HHAIHHAIHHAIIHQIM%ia~uťA%ae%)]ťA %a@M%i`C5Eťe=HHFI~ofHHFI~onLA%H^IAynoFuAB}Y~ofm}~onAoF8]A~ofXU}~onxA~oEAA=A5B}YUHHAIoAHHAI~oaIHQIM}a~~oiAoAmA~oae}~oi8AoAXUA~oaxM}~oAA=AA5oFHHFL~ofIA%H^I}yn~onAB}YoFmA~ofe}~on0AoFPUA~ofpM}~oAA=AB}YUA5oAHHAI~oaHQII}a~~oiAoAmA~oae}~oi0AoAPUA~oapM}~oAoFA=A~ofA5MH^ILA%}yn~onAB}YoFmA~ofe}~on(AoFHUA~ofhM}~oAA=AB}YU A5I oAHAII~oa}a~~oiA$moAA~oae}~oi(AoAHUA~oahM}~oMAL $=AAnA5ACŝ$ŝs}ŕsuŭsCmťsCeCCғCCۓ}C-uC%mC e]ŝs}ŕsuŭsCmťsCeCғCCۓC}C-uC%mC e]GOW_ŝs]ŕsUŭsCMťsCE}sCғA=CۓCC]C-UC%MC}EA=ŝs]ŕsUŭsCMťsCE}sCғA=CۓCC]C-UC%MC}EA='o w@`~wH(((8D(HD(XD(hD(xD(`D(hD(pD(xLxLpLhL`HhHXH H|$Ht$ÐHH1LBLJLRIIMI:ILLLIHLLBLJIMI4I LLIHALLZLBIMI.ILLIHALLRLZI MI(ILLIHALLJLRLZII"MI?ILLLIHA LLJLRIMI9ILLIHA(LLBLJIMI3I LLIHA0LLLBIMI-ILLIHA8LLRLZI MI'ILLIHA@LLJ LR(LZ0II!MI>ILLLIHAHLLJ8LR@IMI8ILLIHAPLLBHLJPIMI2ILLIHAXLLZXLB`IMI,ILLIHA`LLRhLZpI MI&ILLIHAhLLJxLLII MI=ILLLIHApLLLIMI7I LLIHAxLÐHLLJMII!LYMII!LQM:I!LALRMII!LAM4I!LILZMII!LIM.I!LQLB MI I!LQM(I!LYLJ(MII!LYMI"I!LQM?I!LALR0MII!LAM9I!LILZ8MII!LIM3I!LQLB@MII!LM-I!LYLJHMI I!LYM'I!LALRPMII!LA MI!I!LY(M>I!LI0LZXMII!LI8M8I!LQ@LB`MII!LQHM2I!LYPLJhMII!LYXM,I!LA`LRpMI I!LAhM&I!LIpLZxMII!LIxMI I!LM=I!LM1MII!LM7I!LLLLLÐwo-UAJ  oHR U6HuwÐwIH$xH`)p)xx)@x)Hx)P x)X0x)`@x)hPx)p`x)xpH$HLHD$yn}o}oJ }oj@}Xvvvvvvmv ev@==v`55v--v%%vvv vv}ozHA oBoJoRoZۀۈېۘooJ oR@oZ`ۀۈ ې@ۘ`Žۂŵۊŭےťۚŝۂŕۊ ōے@Ņۚ`H}9E6)HI AwA(XA(hE(xE(KE(SE([E(cE(kE(sE({I#Ð^!Dƒ ÐVWSUATAUAVAWH@I@xIIqMY8ENL9rtIESNL9s`ILxLpLhL`HhHXMMMMIIH(IHHxHpIIIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8HH@A_A^A]A\][_^H|$Ht$HHHATAULM1LNMLVML^H5 LMMLIL+LLNLVML^ILBLBLLBLOMBLWL_A]A\H|$Ht$ÐH|$Ht$HHHATAULLNLVLL^H5pLM1LLLNLVML^IH1HLDLDLDMDLDLIH?LII H?LII H?II?I M LLOLWL_A]A\H|$Ht$ÐH|$Ht$HHHATAULM1LNMLVML^LMMLIILL IMLILBLBLBMBM1LLNLLVL^LIILL OIMLQILBLBLLBLOMBLWL_A]A\H|$Ht$ÐH|$Ht$HHHLATAULM1LNLVL^H5LLJLLRLZLIL+LLNLVML^ILBLBLLBLOMBLWL_A]A\H|$Ht$ÐH|$Ht$HHHLATAULM1LNLVL^H5-L+LJLLRLZLILLLNLVML^MLDLDLLDLOMDLWL_A]A\H|$Ht$ÐH|$Ht$HHHATAUM1M1M1M1M1L+LNLVLL^H5LILLLNLVML^MLDLDLLDLOMDLWL_A]A\H|$Ht$ÐH|$Ht$HHHֹ# ZWH:H|$Ht$HHHL¹# WUSATAUAVAWt-HHLLVL^LfS/HHLLVL^LfHvA_A^A]A\[]H|$Ht$ÐHIL5;IHIIL=8IHHIIIHHIIILHM1ILI IH MIIHCIIM1HH&IHHHHfIHIHHHHfIHIHHHHfIHILIILI IH MIIHCIIM1HH&IHHHHfIHIHHHHfIHIHHHHfIHILIILI IH MIIHCIIM1HH&IHHHHfIHIHHHHfIHIHHHHfIHILIILI IH MILIILIILMILMILBLBL'LBLoLBLGLOÐH|$Ht$HHHֹ# :TUSATAUAVAWt0HLvL~LF\2HLvL~LFHvHA_A^A]A\[]H|$Ht$ÐIIILIIILHIIILHIIILHHIILHIIIIM1IHIIMMMMMMIHIHFHHIIHFHHHIIHFHHHIILIH5H-LI HH MIILHLI IHH MIILHLI IHH MIILHLI IHH MIIHM1MMMMIMIIMIILIIMBMBL'MBLoLBLwLÐBBA M1BL=IBLI‰I‹IIIHSIIIM1fL8L8fL8L8fL8L8LfL8‰L8‹fM8M8IIIHSIIIM1fL8L8fL8L8fL8L8LfL8‰L8‹fM8M8IIIHSIIIM1fL8L8fL8L8fL8L8LfL8‰L8‹fM8M8IIILL5ILII1LIMILMILBLBL'LBLoLBLGLOÐBB1IBLIIM1fL8L8LfL8L8IBHM1fM8L8fM8M8HfM8L8fM8HfM8L8fM8gHL8fM8L8 L8ggLL8L8H-ZIIbLIIIIbLIIIIbLIIIIbIIH1MH5MMMMMH1IMIIMIHMBMBL'MBLoMBLwLÐH|$Ht$HHHATAUHL-WLNLVL^IL%1HI IH MIILHLI IIH MIILHLI IIH MIILHLI IIH MILILHILMIILMLELELLELOLDLWL_A]A\H|$Ht$ÐL H$xH`)p)xD)D)HD)P D)X0D)`@D)hPD)p`D)xpfo,fAnfffffffDofpfEofDfDvfDo fDoRfDoZ fDob0fDoj@fDorPHR`fEfEfAfEfAfEfAfEfAfEfAfAHuYa i0q@yP(4$(|$D(D$ D(L$0D(T$@D(\$PD(d$`D(l$pD($D($H$Ð2K H$xH`)p)xD)D)HD)P D)X0D)`@D)hPD)p`D)xpfDofAnfffffAofp@fEofDfDo fDoRfDvfDoZ fDob0HR@fEfEfAfEfAfEfAfAHuYa i0(4$(|$D(D$ D(L$0D(T$@D(\$PD(d$`D(l$pD($D($H$ÐwH$xH`)p)xx)@x)Hx)P x)X0x)`@x)hPx)p`x)xpoo-}oynm6ɸo2oz }oB@}oZ`}o}oUv-v-HMEA=A%AA]me]HuY a@w(4$(|$D(D$ D(L$0D(T$@D(\$PD(d$`D(l$pD($D($H$ÐwH$xH`)p)xx)@x)Hx)P x)X0x)`@x)hPx)p`x)xpowo%'}o?}o%Wynm6ɸo*or }oJ@}oR`}o}ov=vv=HA5A-AA memeHuo*or vY w(4$(|$D(D$ D(L$0D(T$@D(\$PD(d$`D(l$pD($D($H$ÐM1L#LkLLCLKLIILMIMMILBLBL'LBLoMBLGLOÐL+#LkLLCLKLMILMIMMMLDLDL'LDLoMDLGLOÐL)LILMIMHILHMMMLELELEMEÐM1MMLMMLIILMIMMILBLBL'LBLoMBLGLOÐH|$Ht$HHHֹ# EUSATAUAVAWHoHoNLf Ln(LF0LN8L5 L=fD$`fL$pLW L_@fHnfInfInH<$HF@LvHL~PLFXHv@H|$@QH$Lt$H4$L|$LD$H<$1HC LK@LSHL[PLcXHs@H[ fH~+Ld$`Ll$hH\$@LD$pLL$xH|$ Ld$`Ll$hH\$@LD$pLL$xH|$@H$Lt$H4$L|$LD$fH~M1LIMILIMIIH1HLDMDLDMDLDLIH?MII I?LIM H?L'ILoI?I M LwLHD$@H\$@LL$ LT$(Ht$ L\$0Ld$8H|$ H$H\$ H|$ xHD$`H\$`L $LT$H4$L\$Ld$H<$H$AHD$ Lt$(Ht$ L|$0LD$8fH~~H$MMIIeH$Hl$HL$LT$H<$HD$ H\$ M1L$$MLl$MDLD$H4$MDLL$MH<$,fH~fH~HĨA_A^A]A\[]H|$Ht$H|$Ht$HHHL¹# wBUSATAUAVAWHHooNoV o^0of@onPHHf$f$f$f$f$f$fofpݱoNoV fo^0HF@LvHL~PLFXf$fpf$oF@oNPf$f$ffffHnHv@H$ L$(L$0L$8H|$`fvfpffpfpfffvfpHC@LsHL{PLCXfHnHs@H|$ \H$ H$ LL$`LT$hHt$`L\$pLd$xH$FH$H$LL$ LT$(Ht$ L\$0Ld$8H$H$H$L$L$H$L$L$H$H$H$L$L$H$L$L$H$H$H|$@TM foM M ffInH$H$LL$`LT$hHt$`L\$pLd$xH$(H$H$LL$ LT$(Ht$ L\$0Ld$8H$H$H<$M M M >uufI~fI~MufMtAfH~fGG G0G@GPfH~fH~HĠHD$@Lt$HHt$@L|$PLD$XH|$`H$H$L $LT$H4$L\$Ld$H$` H$Lt$H4$L|$LD$H|$ H$ H$ L$`L$hH$`L$pL$xH$`H$H$LL$ LT$(Ht$ L\$0Ld$8H$uH$H$LL$ LT$(Ht$ L\$0Ld$8H$?M1MHt$`MLMMLIILMIMMILBHLBHnLBHNMBLV%H$H$ H$H$H$L$H$@L'LoLGLOH$H$L$L$H$L$L$H$OH$@H$@LL$@LT$HHt$@L\$PLd$XH$@H$H$@fH~fofof߄$`fofߌ$pfof۔$ fۜ$0fffofoffoffof۔$fۜ$ffW@_Pfofof߄$ fofߌ$0fof۔$fۜ$fffofoffoffof۔$fۜ$ff_fofof߄$@fofߌ$Pfof۔$fۜ$fffofoffoffof۔$fۜ$ffW _0HHA_A^A]A\[]H|$Ht$ÐH|$Ht$HHHL¹# :USATAUAVAWHoHoNoV o^0of@onPHF@LvHL~PLFXf$@f$Pf$`f$pf$f$fofpݱoKoS fo[0f$fpf$ffHnf$f$ffffHv@H|$ ,fvfpHMffpfpMffMfvfpHt$ MH<$H$@H|$@H$H$LL$ LT$(Ht$ L\$0Ld$8H|$ H$H$LL$@LT$HHt$@L\$PLd$XH$ H$H$LL$ LT$(Ht$ L\$0Ld$8H|$ YH$`H|$`'HD$@Lt$HHt$@L|$PLD$XH$HD$`Lt$hHt$`L|$pLD$xH$H$H$LL$@LT$HHt$@L\$PLd$XH$H$@H$@L$L$H$L$L$H<$M1MH$MLMMLIILMIMMILBHLBHnLBHNMBLVgH$H$H$Hl$HL$LT$H|$@5L'LoLGLOH$`H$`L$L$H$L$L$H|$ HD$`H\$`LL$@LT$HHt$@L\$PLd$XH|$@wH\$ H$EfH~fofof߄$ fofߌ$0fofffffofoffoffof۔$fۜ$ffW@_Pfofof߄$fofߌ$fof۔$fۜ$fffofoffoffof۔$@fۜ$Pff_fofof߄$fofߌ$fof۔$fۜ$fffofoffoffof۔$`fۜ$pffW _0HA_A^A]A\[]H|$Ht$ÐM1L#LkLLCLKLIM1ILMIMMILBLBL'LBLoMBLGLOÐM1L#LkLLCLKLIM1ILMIMMILCLCL'LCLoMCLGLOÐM1LLILMIIM1HILHMMILBLBLBMBÐM1MMLMMLIM1ILMIMMILBLBL'LBLoMBLGLOÐH|$Ht$HHHUSATAUAVAWHoHoNLf Ln(LF0LN8L5AL=JfD$`fL$pLW L_@fHnfInfInH<$&HV@LvHL~PLFXHvH|$@H$Lt$Ht$L|$LD$H<$HS LK@LSHL[PLcXHsH[ fH~Ld$`Ll$hH\$@LD$pLL$xH|$ yLd$`Ll$hH\$@LD$pLL$xH|$@H$Lt$Ht$L|$LD$fH~M1LIMILIMIIH1HLDMDLDMDLDLIH?MII I?LIM H?L'ILoI?I M LwLHT$@H\$@LL$ LT$(Ht$L\$0Ld$8H|$ H$H\$ H|$ mHT$`H\$`L $LT$Ht$L\$Ld$H<$H$UHT$ Lt$(Ht$L|$0LD$8fH~H$MMIIYH$Hl$HL$LT$H<$HT$ H\$ M1L$$MLl$MDLD$Ht$MDLL$MH<$fH~fH~HĨA_A^A]A\[]H|$Ht$ÐH|$Ht$HHHLUSATAUAVAWHHooNoV o^0of@onPHHf$f$f$f$f$f$fofpݱoNoV fo^0HV@LvHL~PLFXf$fpf$oF@oNPf$f$ffffHnHvH$ L$(L$0L$8H|$`fvfpffpfpfffvfpHS@LsHL{PLCXfHnHsH|$ H$ H$ LL$`LT$hHt$L\$pLd$xH$H$H$LL$ LT$(Ht$L\$0Ld$8H$H$H$L$L$Ht$`L$L$H$H$H$L$L$H$L$L$H$`H$H|$@NM foM M ffInH$H$LL$`LT$hHt$L\$pLd$xH$H$H$LL$ LT$(Ht$L\$0Ld$8H$H$H<$M M M >uofI~fI~Mu`Mt;fH~fGG G0G@GPfH~fH~HĠHT$@Lt$HHt$L|$PLD$XH|$`}H$H$L $LT$Ht$L\$Ld$H$`H$Lt$Ht$L|$LD$H|$ &H$ H$ L$`L$hH$L$pL$xH$`H$H$LL$ LT$(Ht$L\$0Ld$8H$SH$H$LL$ LT$(Ht$L\$0Ld$8H$M1MHt$`MLMMLIILMIMMILBHLBHnLBHNMBLV#H$H$ H$H$H$L$H$@L'LoLGLOH$H$L$L$Ht$`L$L$H$0H$@H$@LL$@LT$HHt$L\$PLd$XH$@H$H$@fH~fofof߄$`fofߌ$pfof۔$ fۜ$0fffofoffoffof۔$fۜ$ffW@_Pfofof߄$ fofߌ$0fof۔$fۜ$fffofoffoffof۔$fۜ$ff_fofof߄$@fofߌ$Pfof۔$fۜ$fffofoffoffof۔$fۜ$ffW _0HHA_A^A]A\[]H|$Ht$ÐH|$Ht$HHHLUSATAUAVAWHoHoNoV o^0of@onPHV@LvHL~PLFXf$@f$Pf$`f$pf$f$fofpݱoKoS fo[0f$fpf$ffHnf$f$ffffHvH|$ fvfpHMffpfpMffMfvfpHt$MH<$H$@H|$@H$H$LL$ LT$(Ht$L\$0Ld$8H|$ H$H$LL$@LT$HHt$L\$PLd$XH$ H$H$LL$ LT$(Ht$L\$0Ld$8H|$ PH$`H|$`>HT$@Lt$HHt$L|$PLD$XH$xHT$`Lt$hHt$L|$pLD$xH$RH$H$LL$@LT$HHt$L\$PLd$XH$H$@H$@L$L$H4$L$L$H<$M1MH$MLMMLIILMIMMILBHLBHnLBHNMBLVH$H$ H$Hl$HL$LT$H|$@PL'LoLGLOH$`H$`L$L$Ht$ L$L$H|$ HT$`H\$`LL$@LT$HHt$L\$PLd$XH|$@uH\$ H$cfH~fofof߄$ fofߌ$0foftf|fffofoffoffof۔$fۜ$ffW@_Pfofof߄$fofߌ$fof۔$fۜ$fffofoffoffof۔$@fۜ$Pff_fofof߄$fofߌ$fof۔$fۜ$fffofoffoffof۔$`fۜ$pffW _0HA_A^A]A\[]H|$Ht$H|$Ht$HHHLSUATAUAVAWIHHL$I:IrIRMZ LH-H1H1LLOLWL_Lg Lo(Lw0L8L$LL$LT$L\$Ld$ Ll$(Lt$0L|$8L3L3NL3VL3^L3f L3n(L3v0L3~8LD$@LL$HLT$PL\$XLd$`Ll$hLt$pL|$xH1HsL$\$H4 H<L3DLLD$H4 H<LTL\H4 H<LdLl\$ H4 H<LtL|H4 H<L3LL3TD$H4 H<L3\L3dH4 H<L3lL3t\$H4 H<L3|L3DH4 H<L3TL3\D$H4 H<L3dL3lH4 H<L3tL3|\$H4 H<L3DL3LH4 H<L3\L3dD$ H4 H<L3lL3tH4 H<L3|L3D\$$H4 H<L3LL3TH4 H<L3dL3lD$(H4 H<L3tL3|H4 H<L3DL3L\$,H4 H<L3TL3\H4 H<L3lL3tD$0H4 H<L3|L3DH4 H<L3LL3T\$4H4 H<L3\L3dH4 H<L3tL3|D$8H4 H<L3DL3LH4 H<L3TL3\\$

LvLnLfHn H^(Hf0H|$Ht$Ð`x0`x0###F&###F&?~?~oo&Lˇ&L˸ڸbmڸbm  OO!OBn OO!OBn 666l666lYQYQo޽ o޽ yyyyyyooo_0ooo_0~?m~?mRRURRRUR```'G```'Gʼve5ʼve5V+7V+7q[ңq[ 0 `<l 0 `<l{{{{{{555j555jti:ti:SGݳSGݳ{!{!/^활/^활...m\C...m\CKK1Kbz)KK1Kbz)!]!]WWAWWWAWTA*TA*wwwwww777n777n{Vמ{VמF#F###JJ5Jj JJ5Jj OڞDOڞDXX}X%XX}X%ʏʏ)))UR|)))UR| ( P"Z ( P"ZOPOPi]ɠi]kkkkkk.\م.\ٽνsg<νsg<]]i]4]]i]4@P @P   >>>|>>>|( -( -gggxgggxsS՗sS՗'''%N'''%NAAA2XsAAA2Xs, , QSQS}}}ϔ}}}ϔn7In7IG؎VG؎V0p0p#q#q|||Ǒ|||ǑfffqfffqSݦ{Sݦ{\K.\K.GGGFEGGGFEB!B!ʼnʼn---uZX---uZXƿyc.ƿyc.8?8?#G#GZZuZ/ZZuZ/6l6l333f333fccc?\ccc?\  98I98Iqqqqqqύύd}2d}2II9Irp;II9Irp;Cن_Cن_11KHۨKHۨ[[q[*[[q[*4 4 R)>R)>&&&-L &&&-L 222d222dJ}YJ}Yjj<x3w<x3ws榷3s榷3:t:t¾|a'¾|a'&އ&އ444h444hHH=Hzu2HH=Hzu2$T$Tzzzzzz􍐐z=dz=d__a_>__a_> @= @=hhhghhhghr4hr4ʮ,A,A^u}^u}TTMTTTMTΓv;v;""" D/""" D/dddcdddc**ssssssHZ$HZ$@@@:]z@@@:]z @(H @(H+V蛕+V蛕3{3{KۖMKۖMa_a_===z===zȗf3[f3[6ԃ6ԃ+++EVn+++EVnvvvvvvႂ2d悂2d((lw6lw6õ[wt[wt)C)CjjjwjjjwPP]P PP]P EE ELWEE ELW88000`000`+t+t???~???~UUIUUUIUǢyYۢyYeeeeejeeejҺhiҺhi///e^J///e^J'N睎'N睎_޾`_޾`pl8pl8.F.FMM)MRdMM)MRdr9vr9vuuuuuu0 60 6$ $ @yK@yKcYхcYх8p6~8p6~|c>|c>bbb7Ubbb7Uw:w:)2M)2Mb1Rb1R:b:b3f3f%%%5J%%%5JYYyY YYyY *TЄ*Trrrrrr999r999rLL-LZaLL-LZa^^e^;^^e^;xxxxxx888p888p匌  cƲcƲA W䥥A WCM١CM١aaa/Naaa/NE{BE{B!!!B4!!!B4J%J%xf<xfс>сDU"DU"  NN%NJkNN%NJkQsfQsf ` `<<|>|j5@j5@  ޹go޹goL_&L_&,,,}XQ,,,}XQkָkָk\ӌk\ӌnnnW9nnnW97n7n  VVEVVVEVDD DI^DD DI^ߞߞ!7O!7O***MTg***MTgֻmk ֻmk #F⟇#F⟇SSQSSSQSWܮrWܮr , X'S , X'SN'N'lllG+lllG+111b111btttttt  FFF CLFFF CL &E &E<<PD(PD([Bߺ[BߺXN,XN,:::t:::tiiioiiio $ H-A $ H-Apppppp׶TqoTqogηgη;~;~.ۅ.ۅBBB*WhBBB*WhZ-,Z-,IUIU(((]Pu(((]Pu\\m\1\\m\1?k?k"D†"D#臸O6yoR` {5.KWw7JX) k]>g'A}|fG-Z3VWSUATAUAVAWH@I@xILL9r`ILhL9sMHH@0HXHhL`LhLpLxIIMMMMHxHpIIIIy(LƹHLH1HVLLNLV(L^8LfLT$ L\$(Ld$0HL$8=H@A_A^A]A\][_^H\$Hl$Ht$H|$ AV0.H+HcLLH-}LPPHH=t$ >LHcHHI+HfAM@fBDfuHHuN3=Hu:H HH+H+fffHIfD fuHH HHHH<Hu3H H~H+H+HIfD fu_HHu6H HAH+H+ffHIfD fuHH ;1 H HHEH\$@Hl$HIE3HЉEHfWH B/HËHHMH3[ H] H}(He]HL$HT$LD$LL$ USVWAVAWx*H+Hl$PH{H3Hn.HHtRHU.tEL`LhHM.x3LMHUDHHt$  .L`I={ HHHH;w HHHwH+3H\$PHu HD33ɉ|$(H\$ >-u+HHt#ffH`HLfLSH;rHH~ASL >LEZ ErEzffHtH HHpLPAJDAt9t/ȉu%AA DOLdJLhAJL$I[IsI_̉ @S0 H+3t_HL$ LSKA4uHT$ H ϺjtLA"JH0[H\$W0@ H+=SLHٍPA HL$ 9tHT$ H tfLAJ?LJA%LJA %HT$ H c` qtUtKȉvuALe CJA )333L?AJqH\$@H0_@S@ H+H=HuH=ܸ+LrAJH|$PHL$0=tHT$0H 6tfL6AJL4JAL2JA%HT$0H 1L*AJ\H 3H\$ H|$(Ht4LD$ HH DL$(EtDD$,HH赣LAJH u=oHt H=jH kHtauH VH=JLAJLAJpDH|$PAt9t/ȉu%ALJA D%LAJ H@[HL$(a H+H=~tJLPHA:H ]LD$0H$LJA=H(@W0H+H=HLPHAH\$@SصHL$ =ݵtHT$ H ׵rtfLrAJLpJALnJA%UHT$ H m(ZLfAJsHcLJAHnt7 t-ɉ u#LJA -LAJHt"E3LHAPj[HHl^H\$@H0_@S0DH+3ZWLSK A/HL$ 95tHT$ H /tfLAJ\LJABLJA(%HT$ H ųLAJ[HL$JADPAt9`t/ȉTu%ALBJA DL9AJkH0[Hl$Ht$W0H+AHHLnAJH\$@HL$ |=tHT$ H 2tfL2AJL0JAL.JA%HT$ H -L&AJXHaA8qHHtmH=ѱu)HH HHu H:H~H HHs{Hk C0HC(UHtHC(LAJD7H\$@At9Bt/ȉ6u%AL$JA DgLAJMHl$HHt$P3H0_@S0H+3hLSSK AHL$ c9tHT$ H tfLAJLJALJAx%HT$ H LAJ@HtfDHuL`AJ DAt9t/ȉu%ALJA DULxAJH0[̸(H+H(̸(H+~iiEkH(@S H+I0y0HHI(HtHH [H [̸8fH+HDIDALHQI0HD$ AH8LH L;u3ÃL;G̋‹ikiʻEøhH+H=t{HL$ H\$pH HT$ iHHtIH|$`Hx(HtH ܭG0HK0{0HC(HtO0HH|$`HH\$pHh3Hh̸(VH+H( @SVWP2H+HH3H$@HHHH\$@H9#H$tbH8LDHL$(HL$ HL$@$3HL$@8D$@t=s H9uH\$@H؋GDO0H$@D$(HGL]H+HHD$ Ř3H8t=s H9uHatGHO ҖH$@L#H+HDu3H8t=s H9uH؋DOH$@LH+HˉD$ 038t=s H;uHHT$@<\FGF H@3HTHL$0HHL$@>HcL HHL$@DȋGLzD$(HGH+HHD$ 蒗3HL$@8D$@tD=s H9uLO 3IA8 ts H:uA}ID+HD;HL$@}McH }3AHL+,O3HL$@8D$@t=s H9uHcLD$@H+IL<˖HHT$@ZH(HtHT$0H(H$H$@H3 HP_^[̸ ̅uHÃuHÃuHÃuHvH~tH@S H+LJPHA L; JAH [̸(F H+H HuR t/H H H l3H^HOH(H\$Ht$W0 H+II HHuH\$@Ht$HH0_LLNjH\$@Ht$HH0_$ @VAUAVAW8~ H+ML3~ LHu H8A_A^A]^H\$`Hl$hL$JAH|$pI6Ld$0IOLcI~EB HAHHt#33E~IOPHHDI;|LAJGELd$0~'Hu"L VlNDFAD$  .3|33H~aHHtNHxtGIHu3;|3 ILDMIJHHL$(A L$ IARHH;|HtHoHl$hH\$`H|$pH8A_A^A]^@VATAV@ H+3MLI90u FH@A^A\^L|$0LHuL|$0H@A^A\^H\$`Hl$hLJAH|$xLl$8IOIDA;DLIcE~KB HAHHt)33E~ fDIOuHHDH;|LZAJlELl$8~*Hu%L NVjNDFAD$ /,333H~vIHu3;|3 IHD$pH Ht.LQ Mt%HALD$pDHD$(IỈD$ AHD$pLIsHH;|HtH|H|$xHl$hH\$`L|$0H@A^A\^@VAUAV@ H+3MLH95&L|$0LHsH\$`Hl$hLAVNAH|$pLd$8IO LcI~MB HAHHt+33E~"IOHHDI;|LAJELd$8~(Hu#L VkNDFAD$ _*33H~bHHtNHxtGIHu3?;|3 I LDMIJHHL$(A L$ IARHH;|HtHIHt IH|$pHl$hH\$`L|$0H@A^A]^ø(& H+HlHu H[H(H`H\$Ht$W H+H1IHHu oHLH׋H\$0Ht$8H _H` ̸( H+HܢHu "HˢH(H H\$Ht$W [ H+HIHHu HLH׋H\$0Ht$8H _H`(H\$W H+HH Hu 3H\$0H _n;}H H\$0H _6̸( H+HHu BHH(H\$Hl$Ht$W0v H+LIIMu LLLNj֋H\$@Hl$HHt$PH0_IbH\$Ht$W H+HQIHHu H8LH׋H\$0Ht$8H _H`Hl$Ht$W0 H+H9IHu=HHu0L nPfHD@AD$ g&3Hl$HHt$PH0_HH\$@;H3t-;~HLŋH\$@Hl$HHt$PH0_úfL D$ oJDBo&3H\$W H+HL;PHA3@H9u H=LAJH\$0H _H\$Hl$Ht$WAVAW0R H+DHMHwHAbIHHu#L lWiODGBD$ d%D8LpHhHD$pLLHF HD$xJAlHFYHKP;CHK3tZHK3;C~{LƍO׉KHKLAwJH\$PHl$XHt$`H0A_A^_úhL D$ oJDB$H@S  H+HHIHOHH [Q@VP H+H=1uu3HP^úLA>JH|$ht$01H HT$0HHuVHqHAAH\$`.HHt/0xHCHu HH HJHH\$`L.ARJHuL ,WiODGAD$ Tu#HH|$hHP^@S H+LrPHAXFH=u"HE)H  3HHDٺL>AJH [̸(V H+LPڍHAHHH =L~HEAH ]JH(̸( H+ Hu H3EHN3H(3H(@S H+H HuH [HK@ C HH [@S@d H+HD$0LL$hHHD$ ZpD\$hk9A B DAADAi:DACiȠ⻷DAADAi+ȸ=DC DAADиgfffAiʏ и颋.D+AAAkdA=DL$0D[ ‰CRD+иųADSAA иSA鸉EAADAAAk<+Ak ~DL33ɉl$(HD$  uHHtfHfADNH;rHIz HHPIw Mt Ii HHPu2V H> HHP HHf9X,Lp,tfHs HfA9<^uH|$8HXH|$0HM33DD$(HD$  u Ht@A~HHLj9WH;rHƀWHHXJ 3HH^[̸(v H+^3H(@S0T H+:u CH0[úmL !D$ ]DBJ3H0[̋jDZH\$Ht$H|$AV H+ZXHzL;HHH8v%A@H ;3L+ 3HDCIA8H ;3L+ AFAG8AFH׈G9AFIΈG:AFG;AFGAFG?N@HAFX9,AH\$0H|$@FFNANNFFNANNF F N AV V ʸN NVHt$8H A^@S t H+D@<3H #EgCCܺC vT2H [̸(& H+D@H(6Hl$Ht$ W H+IHHMAB ;sFINNXHH\$0Lt$8FHtvLvI@sJH@sI ~X@H+IL AIHFXHH+3IIFIFIFIF IF(IF0IF8HHHtLHHIHHH+HtHNLHՉ~X0 H\$0Lt$8Hl$@Ht$HH _MHL$SVW` H+yYDY 1Hl$XLd$PLl$HLt$@|$\$ D\$(IL|$8DHDJDRH$BAD B3#D BA3D BAD$D BDD3D BD#D B D3EDL$ D B EDZ DAD B D3D B E#D3DT$D BEDZD BED3D A BD$ B B E#щ$BDj D3EEDzE3 BAE# BE3DZ BD|$AA BA3 BA#A3 BzA B\$$E BE3 B!D#E3‰|$D B"DEDJ$D B#A3A A#D B%A3D B&AD B'Db(z,j0Dz4DD B)E3DL$D#D B*D3ED B+EEAD B-D3E# B.E3ED B/DE3 B1AE#A B2A3D3ˉ|$ B3EEE B5A D B6A#E3A3D B7D D#E3DEAB9r8Dr<EHR@ BD3E# BE3E BEDAD BE3E#AD3A3D BDEEyZD A A#AA3AA #DA# $DɋAA#E AA# yZ$DAE#D AyZEEA AAA A#A# ȁyZA A#AD# ȁyZL$ DɋAA#E AA# yZD$DAE#D AyZDD$EA AAA A#A# AÁyZAA #DA#ʍyZ ȁyZL$DɋAA#E AAyZA# yZD$$DAE#D AyZEEA AAA A#A# AA #A#  $EyZEyZDNjD #AA# D$DAE#D DD$EEA E3EA#D E#D AAÙyZEDA A3E3AnD$DAA3nADA AAA3A3n$DA A3ʋA3nDAAA3A3ˁnL$DAA3nADA AAA3A3nD$$DA A3ʋA3nAnAnDAAA3A3ˁnL$ DAA3D$En ËA3DnA3D$ 3ϋA3DnnAD؋AA3A3 $DAnAA3D$DA AA3A3D$DAA A3A3AH$DDL$0DɋL$ ADHDL$HL$ ًL$(AAʉH H$L$(DHL|$8Lt$@Ll$HLd$PHl$XH`_^[@SVW H+H8H3H$HMH(HL$ HIE/u3/HL$ LHHT$ HHL$ \!HH$H3X HĐ_^[H\$Ht$H|$AV 5 H+ZXHzL;HHH8v%A@H ;3L+2 3HDCI!A8H ;3L+ AFAG8AFH׈G9AFIΈG:AFG;AFGAFG?!@HAFX AH\$0H|$@FFNANNFFNANNF F N AV V ʸN NVHt$8H A^̸( H+D@H( Hl$Ht$ W H+IHHMAB ;sFINNXHH\$0Lt$8FHtvLvI@sJH@sIu ~X@H+ILZ AIH! FXHH+3IIFIFIFIF IF(IF0IF8HHHtLHHHHH+HtHNLHՉ~X H\$0Lt$8Hl$@Ht$HH _@SVW H+H؂H3H$HMH؄HL$ HIEu3/HL$ LHwHT$ HHL$ \;HH$H3 HĐ_^[H\$Ht$H|$AV H+Z\HrL3HHH8v%A@H 33L+ 3HDCIA8H 33L+ AFAF8AFHֈF9AFIΈF:AFF;AFFAFF?@HAF\9AGGOANGGGOANGG G O AN G G GOAVOOH\$0Ht$8OWH|$@H A^̸(V H+D@H(6Hl$Ht$ W + H+IHHMAB ;sFINN\HH\$0Lt$8FHtvLvI@sJH@sI ~\@H+IL AIHF\HH+3IIFIFIFIF IF(IF0IF8HHHtLHHIHHH+HtHNLHՉ~\` H\$0Lt$8Hl$@Ht$HH _LD$HL$SUVWATAUAVAWX H+DI ADA1iDL$@EDD$D3d$4I@ALl$HA3 AMA# AA3ыˉ$ED3l$E3D3l$yZ3l$D,$3l$43l$$DAA3Aȉl$#A3ҁyZ3t$03t$(DAA33Aɉt$A#A3Ӂ™yZDDAA3EA#A3™yZDADAA3DA#AAA3Ё™yZE33|$,D$AD3t$3|$(A3D3t$,A#3A3Aˁ™yZA3l$ D$DD3|$3l$8DD3|$ E3t$0A3t$A3E3A3D3¡nDDʋ3A3DA3Dl$A3AɁ¡nADDҋA3DA3AAʁ¡nDDAA3EA3Aˁ¡nAAA3AA3Ӌˁ¡nDDDAD3l$AAA3E3DD3l$L$3L$03A3ρ¡n3L$DʉL$$AEA3AA3DыL$$nDADыL$ A33L$3A3A3̉L$ADًL$nDADً$A33L$A3AA33ωL$AًL$nAً$A33L$ A3A3L$$3͉L$DL$nDD$3L$A33 $$AAA3Dɋ$3ӁnDDɋ$A3L$3A3A33L$$AADы$nDADыL$33A3A3L$3 $L$ADًL$nDADً$A3A3A3AA33L$L$ AًL$ nAً$A33L$$A3A33L$ $D $nDDL$3A33L$L$Dd$AAA3DɋL$3ӁnDDAAA333A33L$ ¡nL$,AADыL$A3DҋDT$,3͋$3 $3A3ЉL$ A3Dt$3l$A3Aʉl$(AšnDًL$ nDADA3AnAA3AAA3A3A݋$A3A3D|$$3l$,D3D3|$ l$AE3D|$0DAt$AA #A# ыAA3D,$3L$(AD|$ A3EܼDʉL$ ׋E#A# A3L$$AAT$3A3EܼD҉L$A E‹A## ыL$AA3T$A3L$03L$EܼDډL$AA AEA## ы$AA3T$A3L$3L$,AܼډL$$AA ADA#A#A AD$T$$D3d$AܼD3d$AD3d$ AA##D ы$Dd$43L$A3L$(AAD3d$0A3EܼDʉ$ ׋EA##E3 A$3L$$AE3$D$3D3t$A3EܼD3t$D҉$E‹A A#A#Dd$ AAEܼ$ADA#AA E# AAܼAAE3D4$l$,$D|$43t$D3|$AD3|$ A 3A#A3Dl$(t$ADD3|$A#A ыAAܼA#AA DA# ыAA#֋t$Eܼ3t$ Dʋ3t$ EA#A3Dd$$ AE3AEܼD3E3Dҋ׋A A#E#Ӊt$,Dd$( AD|$AAEܼAADAA E#AA#A D$D3t$0$ܼ3l$E33l$Dl$D3D3l$0A3Dd$D3d$ܼAA AAA#A#A AܼE3D3$$׋AADt$ Dt$$AD3t$#AӋE3D3l$ Ӊl$A#Aܼ ыDl$8ADd$# DA#AAܼ ыA#ADʋ E# AAADD3D3t$l$4D$3l$D3|$4ܼEڋA33l$,A A#ցܼA#E3Dt$ D3|$l$0AD|$4AAA#DAA A# AAA3֋$A33t$$bAA33t$(DΉt$ADDAA3A3bDADɋ$3A3L$ 3L$ D҉$AA33Ab$Dы$33L$3 $3l$A$3l$,DAA33Ab$DAA3A3L$1L$ A3l$ A3A3ځbL$ A$A3̋3L$,l$,1 $A$A3A3ADbAD$A3Dt$A3L$(D3DAA3Dt$Ab3ADD3t$ DAD3t$(AD34$3A3DAbDt$(DA3AA3bAAAEAD3\$A3ʋD3\$A3AD3\$bA$A3D$3\$ E3D\$D3l$3DE3\$ AEDD$AD3D$8A33E3D\$0D3\$D3D$ bD3D3$ˋ\$3\$DA3EA33΁bAAED3EA3ρbAAEDAA3AA3́bAA3\$DT$4D$D3T$0D3L$E3E3AD3T$,D3L$(A3A3́bAA3͋A3́bAAD$A3AE33T$43D߁b3E33T$D3<$AAEDً́b3E3ρbыACD$3E3D3D$ A3ˋAD3D$ DA33DDA H$bA 2DBL$@DD$AFF?@HAF\AGGOANGGGOANGG G O AN G G GOAVOOH\$0Ht$8OWH|$@H A^@S H+D@@3H #EgCCܺC vT2CøH [̸(覾 H+D@H(Hl$Ht$ W { H+IHHMAB ;sFINN\HH\$0Lt$8FHtvLvI@sJH@sIE ~\@H+IL* AIH1F\HH+3IIFIFIFIF IF(IF0IF8HHHtLHHHHH+HtHNLHՉ~\谾 H\$0Lt$8Hl$@Ht$HH _@SVWR H+HhH3H$HMHjHL$ HIEu3/HL$ LHHT$ H HL$ ` HH$H3Ƚ HĐ_^[@SVW貼 H+HhH3H$HMH0jHL$ HIEu3/HL$ LHHT$ HHL$ `kHH$H3( HĐ_^[@SVW H+HhgH3H$MHHH5iHL$ IE3DBp HL$ LHD$ ؞D$$|6D$(p0D$,9YD$01 D$4XhD$8dD$G AF?dX@IΉwhGlA tIv3H[ CCCKGl;rCCKOCCCKOCC C K O C C CKOCCCKOCCCKOCCCKOCCCKCCKOCCCKOCC C K O C C CKOCCCKOCCCKWKKKSH\$0Ht$8H|$@Lt$HH A_@S 脶 H+D@P3H衷 g jCgCrn+hDŽ$@HD$HHkAكHD$PHy!~[HD$X3HD$`HD$h${HT$ H.HL$ HH$H3ܲ H[H\$Ht$H|$AV ű H+DHrPHA6IHIpv&AI 63M+轲 E3HEFH轞ApI 63M+藲 G@AFG@HHHψF~G@HF}G@HF|HG@H F{HG@H(FzGFFyGGFxGHFwGHHFvGHHFuGHHFtHGHH FsHGHH(FrGNFqGOFpHu3P0p@uHHH8HH0CHH(CHH CHHCHHCHHCKHOHH8CHH0C HH(C HH C HHC HHC HHCKHOHH8CHH0CHH(CHH CHHCHHCHHCKHOHH8CHH0CHH(CHH CHHCHHCHHCKHO HH8C HH0C!HH(C"HH C#HHC$HHC%HHC&K'HO(HH8C(HH0C)HH(C*HH C+HHC,HHC-HHC.K/HO0HH8C0HH0C1HH(C2HH C3HHC4HHC5HHC6K7HO8HH8C8HH0C9HH(C:HH C;HHCK?HHH8HH0CHH(CHH CHHCHHCHHCKHOHH8CHH0C HH(C HH C HHC HHC HHCKHOHH8CHH0CHH(CHH CHHCHHCHHCKHOHH8CHH0CHH(CHH CHHCHHCHHCKHO HH8C HH0C!HH(C"HH C#HHC$HHC%HHC&K'HW(HHH8HC(HH0C)HH(C*HH C+K,HHK-HHK.S/H\$0Ht$8H|$@H A^Hɼg jǁ@HH;ʄgHAH+rn+hHA(HkAكHA0Hy!~[HA83HA@HAH̸(趫 H+D@H(H\$Hl$Ht$ W 膫 H+IHHHiPMHA@J H;sHGHHLt$0HO@H=HGHtHAH (L+I;s O fM? AHHLJI+I6HrLHHIHH+HtLHH Lt$0H\$8Hl$@Ht$HH _H\$W 耪 H+HڋHCuu9uD‹AHKD+H3p HSAHHC HHCH\$0HGH _HRRRRRRRRAHQ H%%%%%%%%HQH\$Hl$Ht$W Ʃ H+IHHHtCHH+HH;s ª TL趪 HWAHH+HPHHvLHH9H+tH.HOLl H\$0Hl$8Ht$@H _MS H+HbTH3H$H$H$H$L$IhL$HHLq HLyfC;sIH[ C C C|$(|$ C CA&A'A@A  t$,t$$g9HT$0I6HT$0HL$ ArI=9HT$0I6HT$0HL$(AqDD$(T$,D33|$ 33t$$A>AFAFA~AVAFAFAVEAAGAAAGEGAwAGAGAwHL$L$H$H$H$H$H3 H[@SVWP H+HhRH3HD$@HMHcUHL$ HIEu3/HL$ LHHT$ H-HL$ HHL$@H3莧 HP_^[@SUVWAVAWh} H+HQH3H$PH$L$HHHTHL$hIEHHEH$HL$8HD$0Ht/Ht*HL$hH$HL$8HD$0HL$0LEHHD$ tjH|$0tbL$HL$8H#tIHL$0MH_t5HL$h!H$HL$8 HL$0 {H2HL$hH$HL$8HL$0 F3H$PH3 HhA_A^_^][@S H+HH8HKh|HKs HH [H\$W 谤 H+HHH8H8HShHOhHSHO  HHH\$0H _3H\$0H _@S 责 H+HH8HKh|HKsHH [H\$W p H+HH8oHKhdHKH\$0H _OH\$ UVW H+HtNH3HD$pH9IHHtYLD$ HT$0H* tBHWhHOi t1DD$ HT$0HOB tHOLHt3HL$pH3腣 H$HĀ_^]H\$Hl$Ht$W0f H+IAHHHt'Mt"H8$HKhHKHLDHHHD$ !H\$@Hl$HHt$PH0_@SUVWATAVݡ H+H3MH3H$L$3IIcLHMt!L; tHEL H)HL$HH蕶D=~LdH }tD;}RHOMHOHOLI hLHHOM6F(8HLI LA6At&A3D+HHˡ HL$ HHH+HLHL$ HH46A46AH|HO8MHZHZHT$ HO8Lc tmDHL$ HH4\A4\AH|HOhMHt.HHT$ HOhLc= tHW8HO< u3L$H$H3w HĸA^A\_^][̸(f H+H9u3H(HH(̸@@S $ H+HY HtHKHtHc'HH [-H [̃tAH\$Ht$H|$AV 赞 H+ALH-HHt-IDH6tLúWH t H'-3H\$0Ht$8H|$@H A^H\$W 0 H+HY HHtGH:Ht$0u D@_HQ}Ą3HLcHSH Ht$0tHc HH\$8H _H\$W 谝 H+HD@.H'}@UHHu H\$8H _Ht$03HH H0Hppp@ H_(H\$8wHFHt$0H _H\$W 0 H+HHbu H\$8H _H(Ht$0Hs(HHN H7HW HN *tHWHt#DGHNP4u3Ht$0H\$8H _Ht$0H\$8H _@S 蔜 H+HY(HK HKHt!HcCtHHK€HCHH [魀@S 4 H+HI(HHyu3H [HOHtLWH}H [@S H+HI(HڋRHKHΰHWHC(H [H\$Ht$W 苛 H+Hq(IIHf H记y3H\$8Ht$@H _HHHtHN LD$0H tϋD$0HH\$8Ht$@H _̸8 H+LQ(Ltgt;t H8HAM IJ HP ICDHRHD$ u/H8MuEA|IJI2u 3H8M H8@S t H+MHMu3H [L yHL+ʐDB D+uHuEu#HK(AIH13ۅËH [LyL+f B+uH…uusHT$@IH|$07R HHu H|$0H [DD$@HK(A}H3 ~H|$0H [HH13Hυ}H|$0H [øH [̸(V H+HA HH(H 3ɅH(@S $ H+HH (H H H ǃ H [Ht$W 谘 H+ HHu 3Ht$8H _ tHH\$0 HHHcL芙 HHLt HHL^ HHLH H\$0 Ht$8H _Ht#S H+HH-|H [H@S 褗 H+D@BHFw(L~HHuH [H&ǃ HH [H\$Ht$ AV J H+ MHHu3H\$@Ht$HH A^Hl$0H|$8裦HcI.HHc ;u3}LHHL+ÐA`HI2AA_HuRƄ+~H3LcH͗ ~'HHLH+A@HI2A ?IuDLHHCuHHt3Hl$0H|$8H\$@Ht$HH A^H\$Ht$H|$Lt$ AW0 H+IIHHHuVHuVH9T$`HM? u34H5DE3E33Ht$ jtH>LcHtLD$`E3HHD$ 8tHHcS HtHtH5DLE33HHt$ bHĤHLLcHE:HHEHHHIE3E33HHt$ wMH3ܕ LJ H\$@Ht$HH|$PLt$XH0A_H\$Hl$ V k H+ IHHu3H\$@Hl$HH ^HuCH\$@Hl$HH ^H|$0Lt$8譣HcHc ~NLHHL+I;LBHM D I+tmLHDHI襨tlH;v0@HDLH{tBH+HH;wHLH袔 H|$0Lt$8H\$@Hl$HH ^3̸8F H+ u3H8HE3E33HD$ H8@VE3H\$HHMcE~^Hl$H|$ HLH+AhIHfff҈D;}I DtHAI I;|H|$ Hl$H\$tADA0D3^̸ ̸(V H+HI Ht H(QH(@S $ H+HiHC(HuH [CHH [Ht$W H+HH"HG(Ht-H\$03Hȉ_HHV(ËH\$0Ht$8H _Ht$8H _̸(膑 H+HI(H(H\$Ht$W [ H+HHHHtHS(HyuH=3H\$0Ht$8H _LǺ~HrH\$0Ht$8H _@S H+HںHHHC(H [̸(覐 H+HI(H(6@S0脐 H+HY(MtUt t H0[HAE33HD$ Mt#ExMcE3IHD$ Hu+3H0[HQHtHR HLtE3E33H0[@V0 H+MHMu3H0^L oHL+ʐDB D+uHuH\$@EuU3IʋA8tD=s H8u%| HN(LcE3IH\$ 2tH\$@H0^L -oHL+DB D+uHuEuFIVLHu H\$@H0^HFHN(E33HD$ 3ۅËH\$@H0^LnL+D B+uH…uuoHT$PIH|$HG HHuH|$HH\$@H0^HcD$P3ۅx HN(LE3HH\$ =tHrH|$HH\$@H0^øH\$@H0^̸(& H+HI HI(3ɅH(H\$Ht$H|$AV H+Z\HrL3HHH8v%A@H 33L+ 3HDCIA8H 33L+轎 AFAF8AFHֈF9AFIΈF:AFF;AFFAFF?@HAF\IAH\$0GGOANOGGOANOG G O AN O G GOAVWʸOOWHt$8H|$@H A^̸(f H+D@H(6Hl$Ht$ W ; H+IHHMAB ;sFINN\HH\$0Lt$8FHtvLvI@sJH@sI ~\@H+IL AIHF\HH+3IIFIFIFIF IF(IF0IF8HHHtLHHIHHH+HtHNLHՉ~\p H\$0Lt$8Hl$@Ht$HH _MAT H+DQH$H$H$qH|$xy Ll$pLt$hL|$`DyILDT$(|$,D|$0t$4fDE$AT$HH$AD$A3ED AD$A3A D AD$EDT$DD A AD$AE3 AD$D$ED$DL$P AD$ AD$ މ$D AD$ D3DAt$ D AD$ DAD AD$ DADD$ AD$A33 AD$A|$A AD$t$ AD$A AD$Al$El$  AD$EA D3D3É|$DAt$ AD$EA E AD$ED3 AD$E3Dωt$ AD$EAD AD$DE3A AD$E3DADA\$A3 AD$$ AAD$A E AD$!A3\$D AD$"AD AD$#D Dl$ A3AD$%E|$(Et$0A3A  AT$$D AD$&I4 Ld$X AD$A3D3 AD$A3AT$ D AD$AED$D AD$D AD$AD|$@D AD$3D3D AD$DE D AD$A EڋD AD$A3AA3D AD$ADD$D 3Dt$8AA LT$XE$$ABAzI D ABLT$XDDD ABE3 D3D ABE DArADd$$ ABDE3 ABD3E ABDt$< ABAE ABDE3 E3DA |$HEEE3A AA DE3A3DDۋ\$ADA#A3yZAA AA3A #A3yZD$D A3AEA#A3yZADȋA3A AEA#3yZ$DAA3A A EA#A3yZADAA3A A DA#A3yZ$AA3A A#A3yZDA3 AEA#A3yZD$DȋA3AEA#3yZADAEA l$AA3A A#A3yZ$DAA3A A DA#A3yZD$ AA3A A#A3yZD$DA3 A EA#A3yZD$DȋA3A A EA#3yZDAA3A AEA#A3yZDAA3A DA#A A3yZAA A A3nD$DA EA A A3nADAA A EA 3nDAAEA A A3nD$DAADA A A3nD$ AA A A3nDA EA A3nADAA EA A 3n$DAAEA A3nD$DAADA A A A3nAA A A3n$D A EA A3n$DAAEA A 3nADAA AEA A3nDAA DA A A3nD$AA A A3nADAEA3A#3ܼ$ DAA EA3#A3A ܼD$ DAA EA3A#A3ܼA DAADA3A#A3ܼAA AЋA3A#A3ܼA $DAEA3A#3ܼA DAAEA3#A3ܼAA DAA EA3A#A3ܼD$A DAADA3A#A3ܼAA  AЋA3A#A3A ܼD$DAEA3A#3ܼ DAAEA3#A3ܼA DAAEA3A#A3ܼA DAADA3A#A3ܼD$A AЋA3A#A3ܼA $DAEA3A#3ܼD$ DȋA A EA3A NSD$DAA A EA3A NS$DAA ADA3A NSD$AA A A3NSD$ DA A EA3 NSDȋA A AEA3NSADAA AEA3A NSD$DAA A DA3A NSAAA A3A NSDA AEA3NS $ANSDȋNSA A EA A3ENSNSD$DAA A ENSA EA3AEDAE A AAENSDA E3Dl$$A DT$D\$L拢PA EDD$(A3$DAA AEDL$,A A3DAA AEDT$PA A3DA D$0AA3ED\$4AAA拢PD D3ED\$DDAA E A3AD拢PDȋA A EA拢PA3$DA AA A EA A3A拢PD$ DAA A DA A3拢PD$AA AA 3拢PD$DAA E A3拢PD$DȋAA EA3拢PDAEA AЋ\$@t$8A A A3拢P$DAAA DA A3拢PAA AA 3拢PD$ DAA E A3拢P$DȋAA EA A3拢PDAAA EA A3拢PD$DAA A DA A3拢PAA3A#A3$M\$DA EA A3A#3 $M\D$DAA EA3#A3$M\D$A DAAEA3A#A3$M\D$A DAADA3A#A3$M\$A A A3A#A3$M\A DAEA3A#3$M\ D$DAA EA3#A3$M\A DAA EA3A#A3$M\D$pmDAA E A A 3>pmD$DAA AEA A3>pm$DAA ADA A3>pmD$A A A A3>pmD$D AEA A3>pmD$pm$DAAEA A A3>pmD$ DAADA A A3>pmD$A A A A3>pmD$ DA EA A3>pmDAA AEA 3>pmD$DAAEA A A3>pmDAA A DA A3>pm$A A A A3>pmD$DAEA A3>pmDA3AEA#A 3vmzD$ DAA3AEA#A3A vmzvmz$DAA3A ADA#A3vmzD$AA3A A#A3vmz$DA3 A EA#A3vmzD$DA3A AEA#3vmzD$DAA3A AAEA3A#A3DA AADA3A#A3فvmz$A AA#3A3vmz|$AA#A3Ávmz  A3 DvmzA3#3 vmzl$A A#33ׁvmzT$$ AD #D33D$ D DA DE3E#D3AvmzDL$A DADE#ED3E3AvmzA DT$@ADADE#A3E3AvmzD\$g H+$Ld$xMA$ALLEHl$pL+΅MEUDC E E EL$pM E  IՉL$tHL$p0L$pD$pEEED$tML$tEEEMC7HcI2)AF)9EHl$pfD΅MEUDC E E EL$pM E  IՉL$tHL$p/L$pD$pEEED$tML$tEEEMAHcI ((I2AV4Hl$XHt$`A$H\$PH A_A^A]A\_H\$Hl$Ht$LL$ WATAUAVAW e H+$L$AA$LLEH$Ll$xLd$hL+D΅MEULD$pM E E E$M E  Iԉ$H$4$$EEE$M$EEEMC7HcI2)AF) EH$Ll$xLd$h΅MEULD$pM E E E$M E  Iԉ$H$3$$EEE$M$EEEMAHcI ((I2AVL$Hl$XHt$`A$H\$PH A_A^A]A\_@UVATAVAWHl$b H+H H3HEHEoLU_L]gE`HEHEwAEDEHEHLELUL]DeA@HL@H$AXH$8AL$LE A@ A@ A@ A@  ك}HE;AL-‹ȃ+‰ME+ȉMfLMHMMIE+}]$2ET$EE33MAwoC,wIEFIAAFID AFID AFID AVIAFI AFI AFI 3UD3EMIAwWCLwIHAHAHAHDH΋H΋H΋HΈEI u @u ALjU@}DE]E@}}EHME]EEUHU߈EAEAADEE3LcHcEH*p UDMDU]DED]AD DD$ DEDEAA AUAD ADEAD ]ADMAMD DU}MD @D]M E@M]]@ @}@}@E]MD]DED$ AA  D$   A A LUL]E;E;AL-‹ȃ+‰ME+ȉMAL$MAHMfffLMHME+MID}}].DEAE3LE3AwsClwIEfIAAFID AFID AFID E~IAAFID AFID AFID EL u A@u AA@}߈]HUHM߈E@}}ED}DeE]EAEAEAEAEAEAE3LcHcEH#m UDMDU]DED]AD DD$ DEDEAA AUAD ADEAD ]ADMAMD DU}MD @D]M E@M]]@ @}@}@E]MD]DED$ ADEA HU D$   A A D3}D3eHAw^AAwIHAHAHAHD&HAHAHAHD>D}DeLUL]HE;LEHEL$@8AA@AxH$AXA@A@AXH$HMH3[ HİA_A^A\^]Ðpppppypkp_p&qqqqqppptttsssssvvvtvnvcvXvMv@USWATAWHl$ḐY H+HOH3HEHEoHEHEAELMwHAKDELMD+ADЉEA@D}Lc?AIAAIH$AqL$L$EqLMMD AID AID AA AA  }E;(L=BA+‰EA@EDHUE+HMADuu"LcMIE33AwhCL~IDGHAGHD GHD GHD WHGH GH GH 3UD3EIIAwWCl~IHAHAHAHDHˋHˋHˋHˈHcMIHH u D5H@u DA$DEDEDuuUEu HcMHUAHHMg DUHcETLDAA ЈUBT BD AA ЈUBT BD AA ЈUBT BD AA ЈUBT BD AA ЈUBT BD AA ЈUBT BD AA ЈUBT BD A ЈUDuuEE;E;A+‰EA@E@HUE+HMADeDuu? LcEIE3E3AwtHuB~HDgHAGHD GHD GHD DHAGHD GHD GHD HcMIHH u DA;H@u EA*DMDuuD}DeEu"HcMHUEAHHMe DED]HcETLDAAA ЈUBTBDAA ЈUBTBDAA ЈUBTBDAA ЈUBTBDAA ЈUBTBDAA ЈUBTBDAA ЈUBTBDA ЈUDuuD3}D3eIAwdHIc~HHAHAHAHD#HAHAHAHD;DeIEE;zLMHEL$D0AAAAAAEqL$AqAAAAAqH$HMH3sT HĐA_A\_[]^yRyFyHEDAAAGDGDOAGAAGDOA]HMH3Q H$HpA_A^A]A\_^]H\$UATAUAVAW0P H+E3MIcALDH9u7D@H$H3D H$H_^]H\$Ht$ WC H+H1H3H$3HHHHH8uE3LcEЅA :A%}ȃ}A%}ȃH0 0QDAD2AA3D2%}ȃHAHH+AE2ȀUA20JIAM;kHHT$0HVLL$0DHHHt$ %HL$0߉HH$H3C L$I[ Is(I_H\$LL$ UVWATAUAVAW qB H+$H$HHMcDDHHLPAD ABD ABD ABD AB D ELl$xE`ExAH"pAI|CC+s C C C C C HrI33AweIcNjHsHCH CH CH kHCH CH CH H$AA3IՉ$A3$ $$DHODD3ΈGD3AGOW‹IGGWHnI0hHHP B B B B  E]AHEhHL$`CD;DcH$E3D CIH[D CD CD$D CD CD D$ $3$3ƋI|:GGG@oGGHGgIAw^HmIcŋHHϋHϋHϋH@/HϋHϋHϋH@7LL$xA3A3AIHL$`H\$hH A_A^A]A\_^]Ó{qh\PF}H\$Hl$Ht$H|$ AVLT$0AAZAzD;LAB ABAL AL AB AB AB E3fDD;ID΅~wDA~AHD AHDËAAǁ-sAAظ+i+ظ+i+EMt AA{IAAYHl$Ht$ H|$(H\$A^@S 4= H+HٺHIuHuH(H [3H [H\$Ht$W < H+DYDHAIHE3IA3%D3D3AA3D3D3AA3%3333D3ЍD3AA3%D3D3AA3ʁUUUUA3‰ HA3ÉF AHH E3HH DFA3%UUUU3D3A3%D33A3%33333ЍD3A3H\$0D33A3ʁ3A3ȉNHt$8H _H\$LL$ UVWATAUAVAWH n; H+}xMEHLyLmpLeXAsAEEUEEAML]hD AED AED AED AE D D~IA؍4fAAFANMI AF AF AFA3 AFU@I AF A3LE`MDHM@ DU@DEDL]hAHCACACACACACACACI;FHcL3ɋуwrL 6hHcAhIANIAFI AFI AFI AVIAFI AFI AF A3LE`A3҉MDU@HM@MI DU@DEDAˆACACACACACACACEUAAEAAAEEUEEAAEAAAEEEoHEpL]`AxD DhHLEhLxAL}HD AGD AGD AGD AG D DIA؍<lj}xAFA6A~MHM@ AFIMI AF AFu@ AF AF }DM@UDLUXLEhL]`A3A3Ո HDDCCKSCCSICL}H}xAFAVA6ANM AFM AF AFu@ AF  HM@UxUDICU@DEDGA3HcE3Hكw_L NeHcAIHAHAHAHDHˋHˋHˋSDmxDHEpD AAAAAGEgEoAAGAAAGEoH\$pH A_A^A]A\_^].! ڗؚ͚šH\$Ht$H|$Lt$ DQD HA¿HSd A3%D3D3AA3D3D3AA3%3333D3ȍD3AA3%D3D3AA3ɁUUUUA3D E3AEILrffEVAVMvD33DAH?ADAVH ?D3AIH?D3AH?D3AH ?D3AIH?D3F3F3EVE3E3A3DAH?ADH ?D3AIH?D3AH?D3AH ?D3AIH?D3F3F3A3H;LrpEV AVMvD33DAH?ADAVH ?D3AIH?D3AH?D3AH ?D3AIH?D3F3F3EVE3E3A3DAH?ADH ?D3AIH?D3AH?D3AH ?D3AIH?D3F3F3A3HH\$H|$Lt$ AA3ˁUUUUD33A3ȁ3D3ًA3ˁ3333D3ٍ 3A33D3ڋA3Ӂ3A3ˉVHt$H\$Ht$H|$Lt$ DYHAH` EBLrEVAVMvE3A3DAH?ADAVH ?D3AIH?D3AH?D3AH ?D3AIH?D3F3F3EVA3D33DAH?ADH ?D3AIH?D3AH?D3AH ?D3AIH?D3F3F3E3H;LrpEV AVMvE3A3DAH?ADAVH ?D3AIH?D3AH?D3AH ?D3AIH?D3F3F3EVA3D33DAH?ADH ?D3AIH?D3AH?D3AH ?D3AIH?D3F3F3E3HHt$Lt$ AH\$D_H|$H\$Ht$W K/ H+DYDHAIAIA3%D3D3AA3D3D3AA3%3333D3ЍD3AA3%D3D3AA3ʁUUUUA3‰ HA3ÉFnE3HH`AHHODFA3%UUUU3D3A3%D33A3%33333ЍD3A3H\$0D33A3ʁ3A3ȉNHt$8H _H\$Ht$LL$ UWATAVAWH0- H+}XEHLuLePAsAD$E$ED$AL$I|$D GH}PD GD GD G D H}HD~IA؍4AAFANI AF AF AFA3 AFUH AF A3AMHMDUDEAHCACACACACACACACI@H}PFHcL3ɋуwrL ZHcAIANIAFI AFI AFI AVIAFI AFI AF A3A3AUHUHMHMDUDEAˆACACACACACACACE$AAAGDWDGAGAAGDGkHEPLl$`AxD DhHLxAL}D AGD AGD AGD AG D DIA؍<lj}XfAFA6A~HME3 AFII AF AFu AF AF }bMULMHA3̈ A3ՋHDCDCKSCCSINL}}XAFAVA6ANE3 AF AF AFu AF  HMUXUIUDEGA3HcE3Hكw_L WHcAIHAHAHAHDHˋHˋHˋSDmXDHEPD AAAAAGEgEoAAGAAAGEoLl$`H\$hHt$pH0A_A^A\_]ujukeZODH\$Hl$Ht$H|$ ATAUAVAW3EELHjL-V xDHݾDSEAE3AE#A#׋D3AD3ҋS3E3A3A3DH?AESH ?E3AIH?E3AH?E3AH ?E3AIH?E3DG3G3A3DAD3AE#A#DAD3D3AD33A33DH?AEH ?E3AH?E3AH?E3AIH H[?E3AIH?E3DG3G3E3H|DAEHZH\$(Hl$0Ht$8H|$@AA3ȁUUUUD33A3ȁ3D3A3ȁ3333D3 3A33D3‹A3ЁA33AT$A $A_A^A]A\̸(% H+LH(H\$Hl$ VWAV% H+HH3H$MAALuAAH-S(0BtDAENH$(03ۋAM@HˆJrHT$0H$HT$0HL$ DDzHD$ AȈ$$MNA $$$L$$$$$$2ɺ@DtAuAHuI*AIIuEV IH$H3$% L$I[ Ik8IA^_^ÃȐHs HrC& H\$LL$ UVWATAUAVAW@# H+H$HHDD`HHPED BD BD BD$D B H$D8D@HP@D JD BDd$ D BD BD$D B D $D$L$AuD$AFEENANI~D GH$D GD GD G D ɅDvAIA؍4Ɖ$H$fffUEMH E E EA3A E3T$(H E A3A3̉L$,HL$(DD$(DL$,E3E3HDCACACACDKACACACI=H$$D$L$FHcH3ɋуwjLOHcApIMHEH EH EH UHEH EH E A3A3AA3A3̉T$(H$L$,HL$(DD$(DL$,E3E3DACACACDKACACACEAAAGDGDOAGAAGDOH$AD8D`HLpALt$8D AFD AFD AFD AF D EAEEElHL$0D$D$@ffEu}HL$(I EH E A3ʼnD$(E E E A3E3D$,L$(T$,D$L$A3A3H3T$ A3DKDCCKSCHL$0CS0Lt$8D$AE}Mu EI E 3$D$(E E  HL$(A3E3D$,5T$(DD$,AEA33$E3HcD3D$ AHAw_LOLIcAIHAHAHAHDHˋHˋHˋSDDH$D8AAAAAFE~EfAAFAAAFEfH$H@A_A^A]A\_^]԰Ȱ׳̳AV0 H+HD$`H\$@HDHLP@Hl$HIEJD ABH|$(LIcD ABD ABD AB D E'Ht$PL|$ L=JApH|GCDSD CD CD C C C HxH3E3wkHcAISHCH CH CH DCHACHD CHD CHD E3A3HL$`DD$`T$dAHyD\$`DL$dHHL|$ Ht$PH|$(Hl$HH\$@MtAEAAFAAAFE^ENAAFAAFAAFAA% AAA  H0A^Ð ܵеĵH\$LL$ UVWATAUAVAWHP H+HEpEHH-0DpHLxAAL} AG AG AGD AG HExDDHL`@LeD AL$D AD$D AD$D AD$DEPD AD$ IcHED DMHLeACL-GEfDHUhHMAuDuvuDuMHcHE3I3҃AIDGHAGHD GHD GHD WHGH GH GH EGDG G G GD GD GD HD3EA3HMUHUXDEAzHU`1uD1uHME3cHUX1uD1uHMAIDMD}AIAHDMЈCACACACACACACIQLeD}PL}DEPHEp@0AAGAwEwAAGAAAGHExEwDAA$AAAD$ED$EL$AAD$AAAD$EL$DDPHL`EsA$IcLeD AD$D AD$D AD$D AD$ HExD8D@Lh@LmD AMD AED AED AED AE D DEHAL-DEHUhHMADMDUUEWEE3EPGH G G GMЉM GHM G ЉU؉UHUXHU`1EEPHM1EAHUX1EEPHM1EE3DEUE3A3HymHHAIcAIHˋHˋHˋHˈHAHAHAHD:DACAACDCSCHCSD}DeDDUPHAHZLmDeLeDEHEpDAA$AAAD$EL$ET$AAD$AAAD$HExET$D8AAEAAAEE}EEAAEAAAEEEH$HPA_A^A]A\_^]fŸsti^YOE;̸( H+H(̸8 H+H8̸8 H+H8j̸Hv H+HH ̸HV H+HH:̸(6 H+H(:̸8 H+H8麪̸( H+H(z̸H H+HH:̸X H+HXz̸H H+HH隿̸8v H+H8̸8V H+H8̸(6 H+H(̸( H+H(̸( H+H(̸( H+H(̸( H+H(:̸8 H+H8̸8v H+H8̸8V H+H8̸(6 H+H(銣̸8 H+H8z̸8 H+H8j̸( H+H(̸( H+H(̸( H+H(j̸(v H+H(*̸(V H+H(j̸(6 H+H(:̸( H+H(̸H H+HH ̸( H+PH(@SVW@ H+HH3H$0HHDL$ MH$0HL$0A观 ؅uHL$0LHqHL$0rVH$0`VH$0H3 H@_^[H\$ W@ H+HfH3H$0HLDD$ H$0HL$0A ؅u HL$0HHL$0UH$0UH$0H3 H$hH@_@S t H+ADLHQD AD AD AIDT$0 AC  IЉL$4HL$0Et^L$0D$0CCD$4KL$4CCCKH [̸ H+Ht$H<$;LOAE~ E;EOELcʅ~L+IAHIAHuCLKH5D L;}7H\$ILHM+HR 1JIuH\$EKA۸AAA+ALcH<$CKH#1MtMcfBL HRH31IuHt$MIR~A@fJM@HR A@IuHH\$LL$ UVWAVAWH0B H+}XEHLkH}PAsGDDGH}D GD GD GD GD GD H}HD~IA؍4AAFANI AF AF AFA3 AFUH AF A3ȉMHMDUDEAHCACACACACACACACIFH}FHcL3ɋуwrL 9HcAxIANIAFI AFI AFI AVIAFI AFI AF A3A3ȉUHUHMHMDUDEAˆACACACACACACACDAGAAGDWDGAGAAGDGH\$pH0A_A^_^]L}PLd$`Ll$hAGE'EoAxL}D AGD AGD AGD AGD AGD DIA؍<lj}XDAFA6A~HMI AFI AF AFu AF AF }MULMHA3̈ A3ՋHDCDCKSCCSIQL}}XAFAVA6AN AF AF AFu AF  HMUXUI'UDEGA3HcE3Hكw_L B6HcAIHAHAHAHDHˋHˋHˋSDmXDH\$pE'AAGAAAGEgLd$`EoAAGAAAGEoLl$hH0A_A^_^]ÐH;.#  H\$Ht$H|$Lt$ DAEADHLD_HA Hv AA#+AAA A#++NA#+AA#+A+V DAAA#A +ыA#+ы+VDAAA#A +ыA#++VDAdtEAʃAÃ?+AA?D+AɃ?ED+ȃ?ED+ EH\$Ht$H|$AE A EAFLt$ H\$Ht$H|$Lt$ DAEALLDOHfDЋHv#A#VADAD ًA#A#VAD AD AAA##Vʋٍ ًӋA#A#Vʋ Adt6ȃA?EAA˃?EAȃ?A˃?A*Ht$H|$AAD H\$ EAFLt$ H\$Hl$Ht$WATAUAVAW > H+$Ld$xMA$ALLEHl$pL+΅MEU E E EL$pM E  IՉL$tHL$pL$pD$pEEED$tML$tEEEMC7HcI2)AF)=EHl$p΅MEU E E EL$pM E  IՉL$tHL$pL$pD$pEEED$tML$tEEEMAHcI ((I2AV8Hl$XHt$`A$H\$PH A_A^A]A\_H\$UVWATAUAVAWHP# H+HyH3HEHE`LmhHDA]HxOHELWD GELGD GE3LMLmD GDUDU A AE AUԈUEAEEEEELmL+DEA΅u[HMIDUЋUDMDEADMDEEAEAEEEALjEHcHL2NAL4EuLmEt:HEDAAAGDWDGGGWA]HMH3k H$HPA_A^A]A\_^]̸(V H+H(jGH\$LL$ UVWAVAWH0" H+}XEHL|H}PAsDGDGAAD GH}D GD GD GD GD H}HD~IA؍4@fAANAF AFI AF AFA3 AFUH AF A3ȉMHM_DUDEAHCACACAˆCACACACACIFH}FHcL3ɋуwrL ,HcAIANIAFI AFI AFI AVIAFI AFI AF A3A3ȉUHUHMHMYDUDEAACACAˆCACACACACAAGAGDWAGAGAGDGH\$pH0A_A^_^]L}PLd$`Ll$hE'AGEoAAD AGAxL}D AGD AGD AGD AGD DIA؍<lj}XfA6AFA~ AFHMII AF AFu AF AF }MULMHA3A3ՋHDDCCCKCCCSILL}}XAVA6AFAN AF AF AFu AF HMUXUI"UDEGA3HcE3Hكw\L *HcAIHDHAHAHADHˈHˋHˋSDmXDH\$pAAAAGAAGEgLd$`AAGAAGAAGEoLl$hH0A_A^_^]tgZRE8+#B8.) H\$Ht$H|$Lt$ D 9qELLDEtAED+ADE+A{A[IKE[ D+EDEtAED+ADE+D+ȋA3D؋A DEEtAED+AD+ DD+E+ËqA3DADEtAED+ADD+D+EE3D3AE33YDADEtAED+ADD+ۋY yDAD+ADDEtAED+ADD+ӋY$D+AA3DDEtAED+ADD+ˋq(D+A3NjA؅t+؋++DE3D3ϋA3A3ËY,DDEtAED+ADD+ۋY8y0DI4D+DADEtAED+ADD+ӋY H+$Ld$xMA$ALLEHl$pL+΅MUE E E EL$pM E IՉL$tHL$psL$pEED$pML$tEEED$tMEC7HcI2)AF)=EHl$p΅MUE E E EL$pM E IՉL$tHL$pL$pEED$pML$tEEED$tMEAHcI ((I2AV8Hl$XHt$`A$H\$PH A_A^A]A\_H\$UVWATAUAVAWHP# H+HyYH3HEHE`LmhEDD@A]HxHEAHOAD GLHWE3D GLMD GLmDUDUD B AD EADEDEEAEAEAEAEELmL+AEA΅u\HMIDUDEAAEDUUEAEAEAEAEAALjEHcHL2NAL4EuLmEt=HMAAADWDOAGAAGDGWA]HMH3Z H$HPA_A^A]A\_^]H̸(6 H+H(z̸( H+H(z̸( H+Au H( H(k̸Hƫ H+H HD$8$D$0HD$xHD$(HD$pHD$ MHH̸Hv H+HL HD$8$D$0HD$xHD$(HD$pHD$ JHH̸H& H+H HD$8$D$0HD$xHD$(HD$pHD$ cLHH̸H֪ H+H HD$0HD$xHD$(HD$pHD$ OHH̸H薪 H+Hl HD$8H$HD$0HD$xHD$(HD$pHD$ 9HH@USVWATAUAVH츀8 H+HUH3HEHuhMLMMHLHtHt MtHuLH 觍}pvLH ы臍AtLҋH iL|$x HH~IMIHAH;w HCH;sIFH;wEHCI;rANHtFffHUHMMfEoMHH[fO(HuA>AN(|$`(t$pL$HMH3 HĀA_A^A\_^[]̸8 H+D$`LhLT$(HD$ iH8̸8趡 H+D$`LLT$(HD$ )kH8̸(膡 H+Au H(H(̸HV H+HHD$0HD$xHD$(HD$pHD$ FHH̸H H+H|HD$8$D$0HD$xHD$(HD$pHD$ #CHH̸HƠ H+H,HD$8$D$0HD$xHD$(HD$pHD$ #@HH̸Hv H+HHD$8$D$0HD$xHD$(HD$pHD$ AHH̸H& H+HHD$8H$HD$0HD$xHD$(HD$pHD$ 1/HH̸(֟ H+H(j̸(趟 H+LHAH( A̸(膟 H+LHAH(M=@S T H+IDHt;Ht6B?u!@tHAD3H [øH [ÃH [H\$Hl$Ht$H|$ ATAUAVAWA DyEHxi L-l H3ME@|ALD A AD A AD A AE3E3 A D3AAE AE3AE3E3\EAAE AE3AE3E3TEAAE AE3AE3E3DC C C{ CEVp3C CD3 C A3EFtE3D3AAE AE3AE3E3\EAAE AE3AEVhE3E3LEAAE AE3AE3E3DA3CEFlD3E3E3D3AAE AE3AE3E3\EAAE AE3AEV`E3E3LEAAE AE3AE3E3DA3CEFd3D3E3D3AAE AE3AE3E3\EAAE AE3AE3E3LEAAE E3EVXAAE3E3DA3CEF\D3E3E3D3AAE AE3AE3E3\EAAE AE3AEVPE3E3LEAAE AE3AE3E3DA3CEFT3D3E3D3AAE AE3AE3E3\EAAE AE3AEVHE3E3LEAAE AE3AE3E3DA3CEFLD3E3E3D3AAE AE3AE3E3\EAAE AE3AE3E3LEAAE AE3AE3E3DEV@CA33EFDD3E3D3AAE AE3AE3E3\EAAE AE3AEV8E3E3LEAAE AE3AE3E3DA3CEFH|$`HL$@H3i HhA_A^A\^][H\$ UAVAW0g H+MILHIw3H\$hH0A_A^]Ht$PHt$pH|$XILd$`Ld$xDLd$(Ht$ H+LHL3HH rfHGHVHHH;wH;sNHLHӃL+HH+fDoo H H@ fHoLo@fHI;rH;s(HH+H1H+fff H@0HHuMHHAIVLIg Ld$`H\$hAFHt$PH/H|$XH0A_A^]@SUVATAUAWh|f H+HH3HD$PL$L$MIHHIs3H|$`Hu|$(Ll$ AHHH+HtLD$(Ll$ AHH3H >HT$0D$(HD$0HD$8HD$@HD$HHD$@MAHD$ AHL$0LHf HT$0HL$0MA D$(Ll$ ALGHT$0Hf HGHH|$`HL$PH3Rf HhA_A]A\^][@UVWATAVAWxMHHAB 2*3Ȉ * 2Hu t'Ht"AH)IH2ÈF)uL$HLLIL+IkHH|$pH|$xfDLHHAՃs>ADMD+LL+AAK M@JHI3@HIPIuHII3IuH|$pLT$xL$Ht1MHHAfffB1)2ˆ1)HuAH\$`H A_A^A]A\_^]LL$ SUVWATAW( [ H+H$H$MыILLt(@HtII (HA2L$AOuL$HLl$`ILILt$ MH+L+IkHIHLLL|$hL|$xMHHAуs'+HI H@H3HHLHuL$HI3IuL|$hLT$xH$Lt$ Ll$`Ht$MHHAB!2)B9HuH(A_A\_^][H\$VAVAW Y H+Hy8LhIL`LHtH\$PH A_A^^HI0H HH;H;H|$HtHN0t.HtAI0D1@Hǃuu`HV`HN@AHl$@HHtHV`HN@LMALH+Hl$@Ht&HN@L+fffADHI0AHutH|$H3H\$PH A_A^^ÃH\$PH A_A^^@SVWATAUAVH|X H+HxL`LhHD$(HHHI8HD$ HIMIHH;KI;BtH$HK8L|$@tHS`HK@AǃtpD{ Aω$tDMt,HDHI2ˆF0T@Ń$uHS`HK@AI HHK`LS@IHH Hl$0HiLL$Lt$ @HA LIAHl$(AHSMHAHAHȉC HGH3CHFHGH3CHFIuHL$0HK`LS@uL$$MIHS`HK@LAIrpHl$(MIIkLL$Lt$ DHSMHAHAHȉC HGH3CHFHGH3CHFIuL$$Mt;LD$ HSHT$(AAD{ fD :D0L@22IuL|$@pH$3HHA^A]A\_^[ÃHHA^A]A\_^[@SUWAVAWPU H+HH`HHD$0HhHI8HD$8IHMILH;I;tH$HK8Ld$HtHS`HK@ǃtpDc Ả$tKMt-AHDII2ˆE0T@ƃ$u2HS`HK@Ll$@L$I r}HIHH HiLHS`HK@A MT$8LL$0AHIH\$ AAH AI ȉC Hu$MItGHS`HK@IMMHT$8LL$0LHIH\$ $DIAMM+ȉC Ll$@Mt;LD$0HSHxAADc B :D0L@2*IuLd$HpH$3HPA_A^_][ÃHPA_A^_][@SVWATAVPnS H+HxL`HHD$(HMHD$ HhHI8HD$8IHIHH;VI;MtH$HK8L|$@tHS`HK@AǃtpD{ Aω$tBMt*HHDI2FG0D@Ń$uHS`HK@ALl$HI Hl$(HIHH HL$0HiLL$Lt$ AffHSMHAHAHȉC HFH3CHGHFH3CHGIuLHS`HK@A T$8HL$0uL$$IHHD$0IrpHl$(MIIkLL$Lt$ HSMHAHAHȉC HFH3CHGHFH3CHGIuL$$HD$0LHS`HK@L+LT$8Ll$HMt9LD$ HSHT$(AAD{ @1D3Ј90T@IuL|$@pH$3HPA^A\_^[ÃHPA^A\_^[@SUWAVAWPP H+HH`HHD$0HhHI8HD$8IHMMHH;I;tH$HK8Ld$HtHS`HK@ǃtpDc Ả$tIMt+IHDI2EAG0D@ƃ$uTHS`HK@L$Ll$@I HIHH HiLL$Lt$0fMAIHH\$ AAHS`AHK@A MljC T$8L$I H Hu$L$MItCLL$0IIHHH\$ LADHS`AHK@MMIC M+T$8MLl$@MtALD$0HSHxAADc f)D3B90T@IuLd$HpH$3HPA_A^_][ÃHPA_A^_][H\$Hl$Ht$H|$ ATAVAW N H+Hy0Hq8L`HHpMLHu tt HQ`H@AHHS`HK@HH1{@H1sHAHC H1C@HC(H1CHMtIwHK@MI)H\$@Hl$HHt$PH|$XH A_A^A\H\$Hl$Ht$W VM H+IH3AHkN HVPHNPLHxHHFPfHH@HHHHu(tV'tL%@HN`HVP=@un"H'$H`H9$>BHH`H]"HN`HVPHH`HH\$0Hl$8HhHt$@H _H\$Ht$W ;L H+HHH{.A2HHtLHHHH\$0Ht$8H _Ht(S K H+ຈHH(0H [@SVWAUAV K H+L`E3IL1LqLq@LqHLq0Lq8LpHHI uAxBAArHl$XLD$PIILd$`HLL|$hILyHkHM H+HH3HD$`9L$HA(MLA0IHHLT$HLD$@@|$0HD$8@@uHQHC LT$HLD$@@ǿE3DAD+D;s#AHA+@D:HRH HHuCCH H;tHFHHHC H H9C v HLl$xAHH~HCMIHD$(LHH\$ AHHLH+BLKHIMAIfffA@M@@HKHHAHHt HuHuHAI)0DH;rLD$@HKHT$8LD$@HT$PHT$8AH }FJ<0HD$PHL;w HD$PH;s]H)L;wH;sOHHAH+@Ao /BoD.taD;~D$ JDBV3@UATAUAVAW,# H+Hl$@HHHHhH3HIcq3MLM@MLExHU`HHMpE HEhE8D3 I' I$؉E0u?A~u$IH8uE9~u3HA_' H' HH/.HHt LHE+LHEH LIHgH H}`A|$I#=mH]p9{ |H H)H IEPMM$H HD$(IEHD$ HE`HH 3҉{SHxHHIHuυ{uSE w A|$I #=zH]p9{ |H H")H( IEMM$H HD$(IEPHD$ HE`HH 3҉{SH8fHHIHRυGDp2Y~x AO}4| M8}4Ѝ6;‹ʉU(OȋM8 M8 },A@HcHAH;w HH* H+Ll$@%H)@A.HEhH LLcE8IM?3L+I@I ! }8 HcE(IuTLLUPUHI ljUXUHU@HuHEHHHME\ELmhLLDt7HAHHL;}fHIJLHEHJLL;|u7H}&%LGHHHMLHD$ Ǽ+}4HU@HE`xu=H$y1HEHHU`HL$ L@HMHL~uTLmHLM@LE`HUH3HD$ tHEHHUHHL$ L@HMHL*tLEHcUPI@PHE(;}+HcHEHH<3HHcU;}+HcHEH<3HHEH3L$~fI@ HHLILH;|HME3MHSHcUPHMHAMSHUHH}(HMLM̉t$(H|$ HMAMHSAHMM̉t$(LHH|$ uHMMcMHcSEA |AAH]@fffH}(HUHHMAFD$0MMljt$(H|$ "HMLMHSC<6A}DH](HMM̉t$(LHH\$ HMLcMHR |H]@HAH]@Ab]0AH}(C6IcHHE@@HUHHMAFD$0MMljt$(H|$ \!HMLMHJRHMMLHщt$(H|$ /LM@HMMHRHE@AHA|]0A }SIcA~Lu(DHUHHM|$0MMljt$(Lt$ HMLMHQH|‹]0Lu(H}x˸gfffE3Ѝ+x+DE萋HAF,hyLu(Dm0LDE0HMMcIMQ@ Lmx@3DwIˍ{u$HH8uD9su3HA~HIH$IIHHH$HHxHL$P莡{HtH-HTFHHL$PM5MLIH$7u3HD$0L$A~Dk4A~A#AO~AADDOD;~|LL$PLHHLd$ AMHHcH;}KIfHܐH]H܈LL$PLHLd$ 踣8HH;|HH͋\$4AHL$8Au2u LL$PLHHLd$ SEAE3A~6Ld$8A~x$It A+DA;|Ld$@|$4Au33ۅ~-fffLL$PLHHLd$ ȢtL;|LcLL$PHIHLd$ NĐ蛢tA+lj|$4_D\$0L$I(HL$PΞD$0H$H$L$H$H3 HA_A\][@UWATAW H+HUH3H$PA@L$IMLL$8HD$@Ld$HHHt(~L D$ IJDB AHH$L$hPDu?Au$IH8uE9wu3HA^HIH$xL$pIIHHHD$PH*H!MMHH3{u3H\D$0t$0A~Do4A~A#AO~AADDOD;~vMLHHLd$ 1HAMHcH;}@fIHDPHVHTHMLHLd$ 06HH;|¿HH͉\$0Ay3 HL$@AR u0uMLHHLd$ t0EAE3A~6Ld$@A~x$I t A+DA;|Ld$H|$0Au23ۅ~,ffLL$8LHHLd$ /tP;|LL$8LcHIHLd$ NDP/t&A+L|$8D\$0~3IL$pH$xH$L$hH$PH3 HĈA_A\_]HL$SUVWATAVhi H+D$LHcAAILD$($A;l$ I I6Hu HhA^A\_^][LHl$HAlE3҅'LcI@E33҅~4L@M@3΍A#I@كHH#L ;|I$IINLL;|ANAAL$JA@E3#McLl$ #؃HHD$0A#ʃ؃HHD$8A#؃HHD$@B#ڃHH$HcL|$`HHD$P@f3E3MLd$0Ll$8IHIMHHH|$@IMH,M@fffJ EAH#HL(H#D3M#H J H@L AQI#I AAA#ڃHH#H H$IuH|$(L$Ll$ L\$HH|$PI$IJ\Ll$ H|$(M;$L|$`L$Al$~%EHcI$HHHRHuͅAl$A|$u AD$HhA^A\_^][H\$ ATAVAW k H+E3IDLMu LHHuH\$XH A_A^A\H|$P3Eu {HHl$@Ht$HAn;s H HHuMtI3vs{A$HAH Md$uHH<3oEuыS~"BHcHLIM@HuʅS{uCHHt$HHl$@H|$PH\$XH A_A^A\H\$Ht$W + H+AHHptH HcH ƃDDЅt:AH[A‹ȃ+HLc NIDCEuAH\$0Ht$8H _@S  H+HH Ht HcS HL3CCH [LɅy3˙?‹ȃ?+DA9I~IHcHAȸHHH!AQ~.BHcILfffIM@HuʅAQAyuAAHt`W  H+HH H\$0HtHcW HKGuH_HKH\$0tHH _HHxDAD;BtAEAEEu EXAAEKDABD;~A}AAx(HLIcH L+АI LI;wrHHy3Ã3HH\$Ht$H|$LcRHYIcHI3H?IcHˍFMH#HD3DRA1H wH1HHA L;};@HJ JIINDL3L#I3H IN1DL;|ILIHHHPHH3H#H3IHHIH1PHILIH@HP@H3H#H3IH@IH1P@ILIH8HP8H3H#H3IH8IH1P8ILIH0HP0H3H#H3IH0IH1P0ILIH(HP(H3H#H3IH(IH1P(ILIH HP H3H#H3IH IH1P ILIHHPH3H#H3IHIH1PILIHHPH3H#H3IHIH1PILIHHPH3H#H3IHIH1PLIHt$IHH|$H3H#H\$H3IIH1ÐkI'H\$W  H+HHH;uHH\$0H _ËR;Q Hb Hu H\$0H _D_L LAE~.IJIRMBIAIIIQMAII I EҋOtt uIBIAIBIAIIGCGCHH\$0H _@W H+HHu3H _H\$0HHtHHHuH'3H\$0H _HH\$0H _HtKS 0 H+HH Ht CuwCt HH [cHCH [̅u&Ãu"Ãu3D ËA~HuHH33HHAHALy3˙?‹ȃ?+DA9H~IHcHAHLɅy3˙?‹ȃ?+DA;I}uAI!AHcAAAILHHHI!AQ~.BHcILfffIM@HuʅAQAyuAA̸8 H+HHA>Hu%L PqD@AHD$ 13H83@HHHHH8@S $ H+AXuH [H HcH H [HHHHt;HHtH8HcH w 8H0HcH kw 0HHtH(HcH Fw (H HcH 0w  øHt6HtHHcH w HHcH v HtHHcH v HcH v @S H+Hمy3H [Hl$0Ht$8™H|$@?‹?+9q=~;y HHt@HcSLcI;}3HHHLI;|{HHc֋LкHI Ht$8Hl$0H|$@H [̅tytAADҺDZxA;ˋAO /ExE;ӋEOADExE;ËEOADExE;EOAD ߪH\$Ht$W [ H+y HH}'PHHt@H HtH3C H 3HSH9SH\$0Ht$8H _H\$0Ht$8H _H\$Ht$H|$qzLDQDI DAHHHBAB A BAϋƃ Ht$ LDRDJ DBKH\$zH|$DAA+Bu/L HA@HcȅxHL+ILI;u HHy3ÃI;GHs H\$Ht$H|$IcHLٍFHcEyMcHI+HH:u]HIxE~"IcE~H9IH:uLHHHITLDI;tFI;GH\$Ht$H|$ÃH\$Ht$H|$øH\$Ht$H|$ÍFHcȅx HL+@ILI;uHHyH\$Ht$H|$3IcLLTL\M;tM;GA@Hcȅx&HL+ffILI;u HHy3ÃI;GHt$W H+H;Q ~hHl$8HHtFH\$0HHt*Gs CGH+CHl$8HH\$0Ht$@H _H}Hl$8Ht$@H _Ht$@H _LH\$Ht$W H+H;Q ~0IHHuH\$0Ht$8H _H HtH3{ Ht$8HH\$0H _@S0t H+Hف~&L PHHD@BD$ (*3H0[At(xL D$ ,JDB*3H0[Í HA/H|$@LHHu+L PxHD@AD$ 1K*H|$@3H0[L MtlD[AE~7fIIIQMAIAIJIRMBII I EҋKtt uIIIJIIIJI I HH|$@H0[̋A4LtȉA4I(I@ I(DEH0E;s=A@E+ʍPA+A@Et$AɅuI@HIHEuEP0A@8Ht5S H+y,Ht HI HHH [@S0d H+y4Huey8u_H|$@HHu2L PtHD@mC8D$ )(H|$@3H0[3HC0HH|$@H0[3H0[@S H+H3HC0C(C8H [̸8 H+HHANHu%L PjD@AHD$ '3H83HHHHHHHHH HH(HH0H8H8@S0$ H+A4Hمu>9A8u9S0H Fu.L ;HD@mD$ b'C4H0[A4H0[@V H+H9Ht[H\$0H|$8HfDH;tHHHuHHHNHHFHHuH|$8H\$0H ^@S 4 H+QH;QAHH|$@AHHHu H|$@H [Hl$0Ht$8HfHHHHuHCHt$8HHl$0HH;uH; HCHCCH{H{HH|$@H [Åu HHAuHAHHKHƒH @HCHȍJKH [Ht$AV / H+H1LHtFH\$0H|$8H޿H;tHZHHuHHuH|$8H\$0IHt$@AFIFH A^H\$Hl$Ht$W H+A H9Au^t<@ HAR-HHt>CtHDHIt { tH H3{ KH,CH\$0Hl$8Ht$@H _LL$ HT$SVWATAUAVAW@ H+HczIcpE3IMLL>HH$$}M;t M;tIH&HHEAGA3EC+uAu<{ |H HlHH CMEIdVMEAx HDu HDANAAH$C,?mLHA;{A;v;h ~ HHh;k H HHKIH$MEHH HD$0A+A+Eωt$(|$ $C,;h ~ HKH;k H H.HIH$MEHH HD$0A+A+Eωt$(|$ $C@$;K HH$HtmKMMIH Dljt$ S~'BHcHLDIM@HuʅS39{u{L;tHIHt 3H$H$H@A_A^A]A\_^[3H@A_A^A]A\_^[H\$Hl$Ht$WAVAW H+\$`MALHD;} LMAHcDIH4H E3iMiHHIHfMNHMDI^HF~`MDIH^H~FMNHMDIv^HF~)MNHMDIY^H HFI H H\$@Hl$HHt$PH A_A^_LD$HT$HL$U H+IcLMȃ}+D$D$DDD$HĠ]zH$HHD$`HH$H$$H+DHD$XL$@DI-$HL$`H$D+ՋDŽ$T$HDH$HL$P[ЃnHcHXHH$L$HT$XHD+ʼnD$  HL$`LD$PH$+HDΉD$ H$L$HT$XHD+ʼnD$ D$HHL$`L$HT$PHDΉD$ DŽ$D$@H$LD$XH$HDωD$ n HL$`LD$PH$+HDΉD$ I DŽ$WD$@H$LD$XH$HDωD$  D$HHL$`L$HT$PHDΉD$ H$mHHH$H L@@HHL$p^L$H$H$^H$L$H$HI@DH@t$ HL$@ m3++Lc9H$IHH H$Ht$@:LD$`mLHcHcHL 3HLL$0L$(HD$@HLL$hL$ HDHD$p HD$hL$H$H$HD$03D͉D$(D$ ŋϙ+ЉD$H;+ȅuyLD$hH$+HD$@LD$0LD$P+DHT$XHȉt$(HD$@|$ ~D$H m+Lc3HcH$IH Ht$@~yLT$@LD$hL$+LD$0LD$PL$(+DHT$XILT$@D$ o m3ҋ++Lc9H$IHH ? Ht$@LD$@H$3IHHD$@ }%} LL$PHT$Xt$ Ht$@DH[D$H+;|;|;;+;}LD$hHT$X+LD$0LD$Pt$(Ht$@+DHΉ|$ H$@LOHIH+LcHHoD8+tHD8+uI;uA hL D$ }JDB L|$0Ld$HH|$xH\$`MtI腺Lt$8HtHHl$pELl$@uHtHW3HP^HHP^H\$W0 H+HI3ۅu!D@HH H\$HH0_HAMHt$@CHHu1L PiHD@AD$ OHHt$@H\$HH0_L9_t-L@9_uA0IGLcxiLP @ff8fffHJH…ut%HHBIA@BA@yIyH\$HHHt$@AH0_@SATAUAVAW H+E3LLAEHHt$`H|$h<-uEeIAIB 6 tHH~Hl$PPB,'l$XM8IHu,_HHu)3Hl$PHt$`H|$hH A_A^A]A\[3H^=??;C H HHkIk+׃ADxNH#NJAMv0HcHH4AuHHHHIAyËl$XS~-BHcHLfffIM@HuʅSD9kuDkID9ktDcM9/H|3H A_A^A]A\[@VATAVAW( H+3E3LLHH\$PH|$`<-uDfI33B 3 tHH~Hl$XmB,'MYI7Hu*hHHu'3Hl$XH\$PH|$`H(A_A^A\^3Hi=??;F H HHE3ɅLl$ HcE3Af3A;AMLLcM+MfAHЃ vHwHHwH3HHcIH IMHA+IITAI+݅Ll$ DNE~&AAHcHHHHRHuAEDN~uFI7~tDfI?Hc3H(A_A^A\^@S0 H+=u8HDHLNPHD$ @iHH0[HH0[Hl$ WAVAW  H+3LHD9zt&D@H޴0tHl$XH A_A^_A9~uHAH0uAFH\$@Ht$HLd$PHcxUL%J f<fffIHHutHcAHIE0u/yHyHt$HH\$@Ld$PHl$XH A_A^_AH\$Ht$W H+HHmJH*HHuH\$0Ht$8H _E3LHAPj #HHHϋ%Ht$8H\$0H _̸8 H+DL$ EDHэHmH8̸8f H+DL$ EDHэH=H8̸(6 H+LHэHH(Q̸8 H+DL$ EDH3H8̸( H+LH3H(H\$Ht$H|$ AV0 H+L5H2LEAxIHھdRAxGIHl$@@u3HPHUH@UE3AHAօHHx;LHH諘HHxLHH膘tHH_y?D$ L z]E3AHAօtSt/HHyڸHl$@H\$HHt$PH|$XH0A^D$ L 3zJDB3zL D$ JDB3HT$SUAUAWX H+E3EH‹Eu1AD9$3HVAGHXA_A]][Au EH$H|$PLd$HA@ApLt$@Lc}΃ƍNAHȰAAADt$0HHu#L PHD@AD$ HL$8 HL$8W AHOu^IE~QDH$A$HH$D$ hL D$ L UApAIIYIAGtqH$MMIHHl$ tOHt$0LMIHt5HH豫D$ L AoyJgML;$IHE3荹AHu LHt\uHH8u u3HcI u:L;tfI)\u7IH8u.Hu诰LHuE3H I.3H譯릺yL WD$ [JDB3H$H@A_A^A]A\_^]H\$Hl$Ht$H|$ ATAVAW ̮ H+LIIML3胺H;HH0HHtiHtdIHHtTIHHtD~HHΉ{y HHHHH HtHI説HEHH\$@Hl$HHt$PH|$XH A_A^A\LL$ LD$HL$UVWAUAV` H+E3BIHA@H\$XILd$PL|$HxH0HL%HHHHHLHLH$HHD$0H@H$Hu虮H$H H諱3H衱HHvHH$IHZHEoD9muIHlxL$MHHRAHHX=tE3D9mL$3HAӬuaD9k~HtMHHx HHH茬t~DHH3IAauaD9n~HtMHH?xHH<It~DIId_IHx!LHHw:MHHLHHwLIIxD9mH$=}0HǬIϋ转;u(IlLIIvvH艬Iύx~;H|$0HHnHI#y(IJLII vLIIu!LHI3u III΅y 蟮@蓮LIIuH$LMIIHD$ yANILIIH8uA~uHulIH8uA~u HHweuJIH8uA~uDAHH?u$HH诧HIHHL$LIHHLHsLA݃}HHH$EyE3LHHntAuoIH8ufAu_~u/HH.y H$HHH$H#H$H$LLHHt2LSnL D$ JDBE3H$ E3H IH$H$uH譧H赱L|$HLd$PH\$XIH`A^A]_^]H`A^A]_^]H\$ LD$HT$HL$UVWATAUAVAWp臧 H+E3IMACIIHIHILڱIHD$8ͱIL±IH跱H<H$HulHHD$0HI~3HtH$HDHH$H+HDsD9wuHH=xJDt$THHT$@HD$@GM̉D$HG LÉD$LGHωD$PGD$TmAHL$8D$lHHD$XCLD$XD$`C LωD$dCIՉD$hCLd$ D$lDuHT$8HMMHHILHHpLAރIL\Ey%Hl$0H$LHH,qH${uXHH8uO{uI~u$HHyHl$0HH蠣HHl$0MLHHt,L=L hDBD$ jHl$0E3H$uH菤I藮H$IHpA_A^A]A\_^]H\$Ht$W 苤 H+HًJ3HD{~4Ht,~ HtLHHoHH~1Ht)HHt[HH谟y+HHH HHt2HHwt#ƋOft$DHHu3H\$0Ht$8H _Ht$8HH\$0H _̸(膣 H+EDLHt7 tt3H(MAAH(IaIAHt MAAAиH(LL$ DD$SUVAUAVAW8 H+3DLD|pR| ||&|m|^|O^|@,| 1| "|M裭HHHH|$pLd$0H转LHH$H$@fff3@ffH$AHu I$$LHl$ ILt9 Ht/tt&LA3WHGHt LGA3иAŅ$u3E3LŋIH|$ H$9IIt};}rE3LIAQH|$ t]H$E3LIAQH|$ t1tEEH)tH$3HcH۪Ld$0H|$pH8A_A^A]^][̸8f H+LL$ E3H8LD$SVWAVAWP: H+AMHAHD$@ HH诛3HPA_A^_^[ÅH轡=| H褡=R| H苡=| Hr=&| HY=| H@=|rH*=^|\H=,| FH=| 0H=|HҠ=MKH$HL$tYH= L%) fHEHtYHI;|L$Mt#A t&OMA֋AQ;Mt7ICIAHtMAA֋L$H$HPA_A^_^[vHHHL$ک{t2H茨LHHHUH|AELHWHLLHHHD$HHG4$EMII1HL$hEI1LD$hEIIH\$PHl$XHt$`H A_A^A]A\_H\$HL$UVWPI H+IcHIǙ+HcuHH\$xHP_^]uHH\$xHP_^]A}DHH\$xHP_^]uHDHHD$@HHHD$ ™DŽ$~LD$ DHH"yHT$ DLH DŽ$$?HcHH HD$0HL$8uHLDHHHD$(H 0L3HL$(V LL$8HH\$pHDH\$0LL$8HT$ HDLH\$pDHHpLD$(DIHHD$8HL$@Ht$8LD$(HDH+9t%/LcHcHHIHI;s H@H@tH\$xHP_^]H\$H|$EIHE 3H\$H|$E3AfffH LE3ILI;AL;LHJLCIIE3LI;AL;LGHJLCIIE3LI;AL;LGHJLCIE3ILI;AL;LGIAH H H AZEtBH+H+@fffH L3IHRLI;L;LDLIAuH\$H|$IH\$Hl$ VWAV  H+E3IHHٍhMu H1ILd$@L|$HA@ED+H;rH+Et+HMcE+IHHAHAHHIH HLDAI IHH I;uM 3HILMHIMII+Iu+HH @H H H;vM+HII+I+ItHH H LH;sIH+I;sHIt!I+HMH H I H H WL|$HLd$@M IH\$PHl$XH A^_^H\$Ht$H|$E3IAHLE3H\$Ht$H|$@fffHMIKHMLM;ILL;MHGIIHI;LIHH;IKHGIKIIHI;LIHH;IKHGIKIIHI;LIHH;IKIH I Tt=I+@fJMM[MHM;LILL;MCIuH\$Ht$H|$IH\$Ht$H|$IHIHH"HHGLH#LLL;HIHcLL;LFHHE3LAEL;EHcLL;HGIHH;AHcLL;HGIHH;MH#LL;LNHGIHH;MH#HH;HGILL;AHcHH;HGILL;MHcHH;HILL;MHcHH;ILL;HNHGMAHcLL;HGILL;HcLL;HGILL;IHcLL;LV HGILL;IHcLL;HGIHH;AHcLL;LF(HGH|$HHH;IHcH\$HH;HN0HJHF8Ht$H\$Ht$H|$IIHHH"HHGLH#LLL;HIHcLL;LFHHE3LAEL;HcLL;HGIHH;AHcLL;HGIHH;MH#LL;LNHGIEHH;MH#HH;HGILL;AHcHH;HGILL;MHcHH;HILL;MHcHH;ILL;HNHMAHc LL;HGILL;HcLL;HGILL;IHcLL;HGILL;IHcLL;HG ILL;IH#LL;LF HG(IELL;IH#LL;HG IHH;AHcLL;HGIHH;MHcLL;HGIHH;MHcLL;HGIHH;MHc LL;HEIHH;MHc(LL;LN(HIEHH;MHc0HH;HGILL;AHc(HH;HGILL;MHc HH;HGILL;MHcHH;HG ILL;MHcHH;HG(ILL;MHcHH;HG0ILL;MH#HH;HN0HG8ILL;MH#LL;ILL;AHG0HcLL;HG(ILL;MHcLL;HG ILL;MHcLL;HGILL;MHc LL;HGILL;MHc(LL;HGILL;MHc0LL;HILL;MHc8LL;LF8HGIELL;MHc8LL;HGILL;AHc0LL;HGILL;MHc(LL;ILL;MHG AHc LL;HG(ILL;MHcLL;HG0ILL;MHcLL;HG8ILL;MHcLL;LV@HG8ILL;MHcLL;HG0ILL;HcLL;HG(ILL;IHc LL;HG ILL;IHc(LL;HGILL;IHc0LL;HGILL;IHc8LL;ILL;LNHHGIEHc8LL;HG IHH;AHc0LL;HG(IHH;MHc(LL;HG0IHH;MHc LL;HG8IHH;MHcLL;LFPHG8IEHH;MHc HH;HG0ILL;AHc(HH;HG(ILL;MHc0HH;HG ILL;MHc8HH;HNXHG(ILL;MHc8LAL;HG0ILL;Hc0LL;HG8ILL;IHc(LL;LN`HG8ILL;IHc0LL;HG0IHH;AHc8LL;LFhHG8H|$HHH;IHc8H\$HH;HNpHJHFxHt$Hl$Ht$WE3IALHE3Hl$Ht$ _AH\$IHLLJ HIBHI;LHHIHNIBHI;HLLHHNIBHI;HLIH;HNII H uH\$t0I+@IMRHJ LH;JLIuHl$Ht$ I_H\$Ht$H|$HHHHHHLHgLLL;ILL;LIHGH3LDDL;DAHLL;HHLL;AHgLHL;HLL;LLL;LFHHLL;LHgLHL;HLL;ALL;HGHLL;LHgLHL;HLL;LLL;LVHGHLL;LHLL;HGDHLL;AHgLHL;HLL;LLL;L^ HGHLL;LHgLHL;HLL;LL;LN(HGH|$HLL;HHLL;LF0HHH\$HF8Ht$H\$H|$HHHHHHLHcLLL;ILL;LIHCHE3LEEL;AHLL;HILL;AHcLHL;ILL;MLL;LGHIELL;MHcLHL;ILL;ALL;HCILL;MHcLHL;ILL;MLL;LWHCILL;MHLL;HCEILL;AHcLHL;ILL;MLL;HILL;MHc LHL;ILL;MLL;LO HIELL;MHc(LHL;ILL;ALL;HCILL;MHc LHL;ILL;MLL;HCILL;MHcLHL;ILL;MLL;ILL;LG(HCMEHLL;HCILL;AHc LHL;ILL;MLL;HCILL;MHc(LHL;ILL;MLL;HILL;MHc0LHL;ILL;MLL;LW0HIELL;MHc8LHL;ILL;ALL;HCILL;MHc0LHL;ILL;MLL;HCILL;MHc(LHL;ILL;MLL;HCILL;MHc LHL;ILL;MLL;LO8HC IELL;MHLL;HCILL;AHc(LHL;ILL;MLL;HCILL;MHc0LHL;ILL;MLL;HCILL;MHc8LL;HILL;MLL;LG@HCIELL;MHc8LHL;ILL;ALL;HCILL;MHc0LHL;ILL;MLL;HC ILL;MHc(LHL;ILL;MLL;LWHHC(IELL;MHLL;HC ILL;AHc0LHL;ILL;MLL;ILHCL;MHc8LHL;ILL;MLL;LOPHC IELL;MHc8LHL;ILL;ALL;HC(ILL;MHc0LHL;ILL;MLL;LGXHC0IELL;MHLL;HC(ILL;AHc8LHL;ILL;MLL;LW`HC0ILL;MHc8LHL;ILL;ALL;LOhHC8H\$HLL;IHLL;LGpHJHGxH|$LEAt[fffIAH@I HHQHAIBHHQHAIBHHQHAIBHHQHAAuEt&fffIHIMRHHQHAAu̸z H+3LLEH\$H<$A@II8HcHH+H+IH;t3H;IZIxHcHH+H+ISH;t3H;IZIxHcHH+H+ISH;t3H;IZIxHcHH+H+ISH;t3H;AI I I AREt:M+M+IK<HcHH+H+KH;t3H;IAuH<$H\$HH@SUVWATAUAVAWHiy H+H$H3H$0L$HD$0H|$p?MHH+LHL%H@HtHH@HǀH@HIH HHIIL$LMIILt$ 6L/ LIILt$ L LIHLt$ LMHHLt$ E3HIAHIMLHHD$ 4AHIMLHHD$  AHIyMLHHD$ AHIOMLHHD$ AHI%LLHHLt$ AHIAIHMLLHHLt$ AHIMLHHD$ -AHIMLHHD$ A HIrMLHHD$ AHIHLLHHLt$ 2AHI!AIHpLLHHLt$ AHID$ MLHHPA HIMLHHD$ &AHILLHHLt$ AHInAIHLLHHLt$ GAHI6MLHHD$ AHI MLHHD$ sAHILLHHLt$ AHIAIH Lt$ LLHHA HIMLHHD$ AHIYLLHHLt$ CAHI2A IHLLHHLt$ A HIMLHHD$ aAHILLHHLt$ AHIA IHLLHHLt$ A HIqMLHHD$ AHIGLLHHLt$ 1AHI AIHoLLHHLt$ AHIMLHHD$ OAHILLHHLt$ AHIED$IAHMLHHD$ ƃ‹ȃ+IHcF!AHALLHHLt$ MLHHD$ E$IAHKLLHHLt$ L LHHLt$ HIHL$0AH$0H3s HHA_A^A]A\_^][@SUVWATAUAVAWq H+H/H3H$H$HD$@L$?MHL+IHL$0HI@E3HIAIHHMHCIAHHCIAHHCIA HHC IA(HHC(IA0HHC0IA8HHC8H$IMLHHl$ .IAIiILMHD$ ܰAHI;fDILMHˉ|$(L|$ Bǃ|A}?IHDA$LMHHD$ kMMHHˉ|$(Hl$ κ>fB<.LMHHD$ "MMHӉD$(HHl$ 胺LMHHD$ MMHHˉ|$(Hl$ MHyHL$0LMHHL$@ƶH$H3p HA_A^A]A\_^][Ht2S po H+H%oHKoC8tHSH [@S 4o H+HoHKo3HC0C8H [@S o H+D@,H^H UHHuH [HHoHK?o3C8HC0HH [H\$W n H+HHmHu H\$0H _HK3sH?pC4C0H\$0H _H\$Hl$Ht$ WATAUAVAW0.n H+L$HIIMHE3yIxIHHD$`xLHu ItxHHu IdxHHM}HtHkHIBsy83H$rIHkIHu Lw3>@w/I.oG0;O;w4tHOMDHG44DG0HL$`IHT$`LGMI{+w0IHDȥMLHIDe{MIHE:toHHDcA?rx;ƃxLHH:t>Ht-HHryD9ctEeDcAEA3GEI vAH\$hHl$pHt$xH0A_A^A]A\_úL [D$ JDBzH\$Hl$Ht$H|$ ATAVAW0k H+H\$pLMHIHE3}wH5vHHtJHt*HHH;uL%t.LLdztHMLI3H\$ DHuH\$PHl$XHt$`H|$hAH0A_A^A\H\$Hl$Ht$WAVAW0k H+LIIALvHpuHHt(HmtML3IH\$ :EHxtH\$PHl$XHt$`H0A_A^_H\$W pj H+HHH;uHH\$0H _HHhHu 3H\$0H _HW HK hHtHW8HK8hHtϋHGPHCPHGXHCXHH\$0H _Ht?S i H+HHdHK dHK8dC`tHNH [H\$W i H+H3HyiHK iHK8iH{XH{P{`H\$0H _@S 4i H+HJYHHAUOHHuH [HHoiHK fiHK8]iHCXHCPC`HH [Ht$ WAVAW`h H+3ILL9zu3H$H`A_A^_IH$EtHrHHsIN IH$L$fH>HL$@A~0hHD$0IHD$@HD$Li?IN?3҃AlIN@ kILD$@IVHLHHL$0HH|$8D$H賹HA@HHٝAH9{t A苦 HltnLL$@L3HHt$ 6tS9{~HHHINPIN3I~XkAIN@jtMN MFIV3Ht$ T6AEH$L$HpH$H$H`A_A^_H\$Hl$Ht$H|$ AV f H+MHILVHA BHLVAֹAHusHHtLIHu HU3KLVA&ֹ AH?t H*HHL{VA,ֹ yAHH\$0Hl$8Ht$@H|$HH A^H\$Hl$Ht$WAVAW e H+LIIMH3YqHpHHt HHcHtMHI+H!oHl$HHt$PH\$@H A_A^_HT$HL$SUVAVAW@e H+Mcp(IHLEu3ۉYCH@A_A^^][C6;Z H HlHu H@A_A^^][ËE0HcH|$81FHcFHU Ld$0L&H$H;} I[IYLHD$@HH$H$HYHD$(HYHHt$hYHHD$HH6HYHHD$0HMHHzD9vIH=MHHHl$pLl$`PHˋxPMcl$D$ D;n H AHVHHcFHII;} H H+3IMLHA9(u 3BEUHH|$PIHHHHt)AH AtMLIHH\$ HGH|$PH\$XHl$`H0A_A^^H\$ UAVAE3IcLHمu H\$0A^]Ht$H|$ xxqHcDL|$(IILAHI<t+MǺ?HMtH;}AAAHIyA@IyL|$(H|$ Ht$D;}IcAAAH\$0A^]H1 H H H H @SUVWAW`o< H+HH3HD$PzjL:IHHWH} HA@H HAu3H@[~&H;u KHH^:3H@Nj3L$H;tT9^ |H HCHu L$HL$PH3< H`A__^][IL6IIGIFIGIFME3Hcȅ~LHIWHL$ I|< ;}+HcHcH|$ H<3HT$0DT$ AD\$$ANDD$4A~DL$(IHLAV AH L= IHIANH I ANHD$,ILA~H I8HIAV H IAVHANH IHAVH ~!BDIHcHIIM賿HHL$8DMI虿HcHT$8HHH#HI#HH#H HIHAIFHAIFH^HfHHIHu˅^u^7LN LHHx`%@USVWAUAVHx9 H+HH3HEzDrH2IHLyH H ?bH H ?u3I=^~(L;u NHI73H@Ƌ4L$L;tcA9] |I IAHu!L$HMH39 HxA^A]_^[]HMeI$HFID$HFID$HFID$LE3AFL|$pEAHc~3HEDH+HfffHHHLHLH;|;}H}A+HcIcH<3HHMH}HEH LH LELDEI I DL HEED$HH LEL IH H H IHEIHH H H H HH HMIHEV3HUHUUIHLEH H DHEIIH H HMILEDIIL}HuLuH}襼E3H}L}LEDIID}LuD}L}xIL$H=lH AwL ~,AIILcIMD>Mt$I AD#FyAI+ILcIMD^HWLcIHHH#HH#HH DL HMDIIcHUHHH#HI#HH#H HI$HAID$HAID$HAID$IMA]HHHIHu˅A]uE}L|$pLG LHI\@SUVWAT5 H+H5H3HD$`zjH2IHLKH HE;4H n H.;u3I:W~&L;u GHI33H@Ƌ/L|$pL;t_A9\$ |I I<=Hu L|$pHL$`H36 HĀA\_^][HM<$IHFIGHFIGHFIGLE3Lt$xHcȅ~LHHV HL$ I5 ;}+HcHcH|$ H<3HDt$4DL$8|$AM,H ~$ADIHcLIIIMHHyDDI+IHL@IMIHGIGHGIGHGIGHG IG HG(IG(HG0IG0HG8IG8HG@IG@L3AED΋Lc~1HEEH+H@HHHLHLտI;|D;}H}A+HcIcH<3HHUHELEH HH H7DH HMHMHH H7H HUHEHH H7H HMHEHH H7H HUHEHH H7H HMHEHH H7H HUHEHH H7H HMHEHH HMH7IH IHEIg@L@ HMDI聰HUHHI#HH#H HIHAIGHAIGHAIGHA IG HA(IG(HA0IG0HA8IG8HA@IG@IA^H@ffHHIHu˅A^uAvL LHI3QH\$Hl$Ht$H|$ ATAVAWP\* H+H$3MHD$8H$EDHHD$@D$0Hu}+HHtJHHD$0MEHD$(H$AHHD$ 踆tHu HtH)L\$PIk(Is0HEI[ HI{8IA_A^A\̸H) H+HD$pMLD$0LL$ MD$ HD$(HH̸XV) H+H$MD$HD$8HD$0LD$@MD$0HD$ ̈HX̸() H+LPXH v H(m!̸(( H+LP8H H(=!̸(( H+LH H( !̸(v( H+LH ) H( ̸(F( H+LH H( ̸(( H+LH I H({ ̸(' H+LH  H(K ̸(' H+LH H( @SUAUAVH' H+H$MIxLHD$0HHt$pH$H|$xHL$L|$@2Mu H1LHu H1HH1HH1HHD$8s1L$H$MLILRH$MLH4HL$8LLIy5LMHHpxHLLHHF5|LLIH=xHbLMHH5ILHH3{Hl$8tLHHLMHHHt$ KMHH3IDBHI$HL$fDIdLMIHjvu-HH8u$uALHAQ1Ld$ ӄu6LHHt;3IDBoHId#HkE3IAPJD$0H.D$0L|$@L$H|$xHt$pHHA^A]][3HHA^A]][Hl$ VWAT }$ H+IAHLA@H\$@D@E3ɋLt$HL|$PVH/H.E3LAE3ɋHEAUtYLIII%O; Á|H-AALt$HH\$@L|$PHl$XH A\_^Hj-33Hl$XH A\_^H\$Hl$Ht$H|$ ATAVAWP\# H+H$LIHML3 /Hu H-HH$Hu H-HE3E3HAQeTt_E3E3HAQeTtIH$L$MHD$@H$H\$8HD$0IIH|$(Ht$ EHf,L\$PI[ Ik(Is0I{8IA_A^A\H\$Hl$V0[" H+IIH Hu3H\$HHl$PH0^Ã{~HuH]tH|$@3DHm~WDLHHt$ 藁uAHs]tW3HD0~ALAQHHt$ VtDǺH~H|$@H\$HHl$PH0^3LD$SWATAWH[! H+DIIIHA#=@~-AWiL EGjJD$ TAHHA_A\_[HS HK&.D$ L hJDB]TAHHA_A\_[HK"= ~HK "@~D$ L zLt$0+LH:Hl$pHHt$@Ll$8C,I*IH$*HKL"AH)HcH$HqMhH_$tgtQt;tD$ L AvC3ELljD$(HHD$ 54ELNjH3"ELNjHh0ELNjH+L$HMHHSI$xD$ L yACltLCHKpMκ [HHCpH{LKLC HD$(IILt$ W0tdI H$̓+HcIH}+ȅ~Hc3D"D$ L AAhJRIO(I(Ll$8HtHHeHHl$pHt$@Lt$0AHHA_A\_[LD$HT$L$SUWAUx H+3IAH|$@|$0H|$8D)HHH$Ld$pHLt$hL|$`)HQ(HLF(HKHzArHLcAFLMHH$t\t:tD$ L EEwD$L$AHJ8D$L$AHs0D$L$AH(xMAIPHaHSI["xD$ L A*CluHT$0LH'HD$8HuD$ L D@D9|$0u.H&HHD$@HuD$ L HD$8LLIH Cl iH{0t H{8tH{@tH{Ht H{PBrMHL$HFHK(HT$HHHT$0HD$HAD$PA D$TAD$XID$\ ȃL$\ HC(HD$0CltLCHKpLͺ 说HHCpH{LKLD$0HD$(IHHl$ W0H|$@HD$8HtLLHHJ_$u HSLIIHIOHH$H΃A+HcHyA+ȅ~Hc3E>HCLLIHP(t'SD$ tL AAfJMH.$H$Ld$pH$MtIIYaILt$hL|$`AHxA]_][AHxA]_][HT$L$SVAUP H+IIIM=@~)L >VhNDFjD$ s/MHPA]^[HS HK7+D$ xL gJDBLHPA]^[HK/= ~HK @~D$ L L|$0$LHUH$H|$HHLd$@Lt$8$I#IH#HKLAHLcAHHM}HtD$pA;~D$ L {AlfHL$xLNjH[HSHxD$ L QA$CltLCHKpMϺ cH HCpLSLKLC HD$(HIL|$ AR0$u&I$ tHSMItHIqDtKt1tD$ L AvoLAIDt$ &E(LAIDt$ Q+LAIDt$ $y9D$ L o ArD$ L AAgJJI IM!Ld$@H|$HHtIH^H;H$Lt$8L|$0HPA]^[HT$L$SUVATAW H+3IMD$@HD$PD!HHH$HLl$xLt$p!"H HHD$H HKLAH HcLHD$HHMM$;~D$ L DFmH$L7HHSHL$H@xD$ L A^Clu}HT$@LH LHuD$ L m D@D(|$@u&HHD$PHuD$ L T HD$PHT$HLLISl H{0t H{8tH{@tH{Ht H{PrCHK(LD$XHLD$@HD$XAD$`A D$dAD$hID$l ȃL$l HC(HD$@tLCHKpLͺ 蠭H@HCpLSLKLD$@HT$HHD$(IHl$ AR0u"HCHT$HLLIP(MtHT$PLMI"XII $DtjtStHKxLMź ԪHLEHLϺ 質HCltLCHKpLϺ 菪HClLK8H|$ Iu$uDIH tD$ L DB,`HT$0D3H\$0HH@H3H9D$0DHH_HHHHt膯tD$ L zHH G;tD$ L oAdMtjFHHt)H HG;tD$ L BAoHWILcHR HGHcH$HAQHWD9*uHRMI] tD$ L D$ L Ah+HHt$x$H?HPH\$pAH$H@A_A^A]A\_H\$Hl$H|$AV H+LHT$H3AH\$HHc37;uHT$HLI DHL$HH>HL$HH\$0Hl$8H|$@H A^Hl$VWAWP- H+HT$8HL$03MxD$4DD$0H$^;~1L WuODGoD$ SP*3H$HPA__^HAVH\$pbHHu"L PvHD@AD$ X)3SHT$xHL$0HD$xdL$MHӋ͉|$ +[3 H$HO=HH\$pH$HPA__^Hl$Ht$H|$ ATAVAW@ H+H$MEHL3\$;t%L UxMDEwD$ t)3HAxH\$`:HHu#L PxHD@AD$ z(LLI׋D$ 7Z~aHT$0D3H\$0HHtED90uHPMI uh xL VD$ JDBZ(HHH;HH\$`Hl$hHt$pH|$xH@A_A^A\̸( H+ hHu H3"H>3H("H(Hl$V00 H+BAID;~-lL 3D$ KJDB'3Hl$PH0^+H\$@H|$HHyHcHOL HOLHHD H|$HH\$@Hl$PH0^Hl$Ht$ AV0z H+BAMD;~3mL D$ JDB&3Hl$PHt$XH0A^H\$@HY+HÃHˋs3VH|$H3~/;u!fffHC~@;tH;|HKLI H|$HH\$@Hl$PHt$XH0A^3̸8 H+AAD9D$`A8IPH\$0AYE3~@:u=AHD;|D;udpL D$ }JDB%H\$0H8À:uHĺpL HD$ tJDBd%H\$0H8A}-pL ED$ JDB1%H\$0H8ÃA+A;~-pL #D$ JDB$H\$0H8D H\$0H8úpL D$ gJDB$H8H\$WATAUAVAW0 H+3McMDLEHl$`Ht$hHc$D;O FHAkHHu=L |WqODGAD$ $ Hl$`Ht$hH\$pH0A_A^A]A\_L3HH I+H +MIl MEADDXAD#؍AA#D#A;~:LMfAAMIP##D ҋA#A# D;|̍WA++ˋA33 ȍG A33#AuHcLcIH Hu qL eD$ JDB."H\$pH0A_A^A]A\_Hl$Ht$ AV0 H+BAMD;~2nL D$ IJDh"3Hl$PHt$XH0A^H\$@HY+Hà Hˋ3eH|$H3~0;u!fffH~N;tH;|HLIH HK Cy H|$HH\$@Hl$PHt$XH0A^3̸8 H+DLA }&L (P:HD@7D$ pi!H8AA9D$`A8IPH\$0AY3Ʌ~fDH„t;|;IID<u HAH|Au,APsL D$ JDB H\$0H8Ã+A;~-rL D$ JDB H\$0H8DI H\$0H8úrL 8D$ JDBL H\$0H8úrL D$ tJDB H8̸8 H+ID;~'kL D$ EDBJ3H8}'kL D$ JDBJ3H8EHH H8H\$Hl$Ht$W0 H+IcHcIH;~#L P?HD@=D$ WE$3+Lc HLH+HH H\$@Hl$HHt$PH0_@SUVWATAUAVAWi H+HH3H$H$ LHL$0ADL$$MH|$(3AXH_D3ffHT$(HL$0E3@|$#D$ D$!D$"QHL$0LcI6TttHT$ HL$0ATt[A4E3HL$0;HcIPt<'HT$`Pt*HcHT$`+ILcy ݋t$$;AE3HL$0SAH$H3 HĸA_A^A]A\_^][̸H H+3HD$8HD$0D$xD$(HD$pHD$ HH@SUVWAUAVAW H+HH3H$L$ H$H$(EDL$0LD$8HHD$HjMu<LHIIDH|$@DHc6D+AMD;~)L lDBD$ :3;})L UDBD$ @_3Hc$HL$HL$LcL{L3E3MH\$(HLt$ MJDt$0J &3E+AMc HT$8IcHcEH+H+IA I+DCUHLHu%L KDCAD$ WLl$@DMNjHLl$ mӅ~| rwEHcJ1N!L;wM;s_%}ȃDD+@HcBo Bo 0fB B HcBo 1Bo!fB !A;|HcHcH;})MJ M+H+fffAHI0AHuHL$PDMċLl$ ~x rsFHcHD$PHJ9L;w HD$PH;sR%}ȃ+@HcBo8oLPfB 8C HcBo9oL PfB 9;|HcH;},HT$PJ 8I+H+@f HI0AHuI I3L$H$H3 HİA_A^A]_^][̸X H+3HD$@HD$8$D$0H$HD$($D$ HXH\$UVWATAUAVAW H+HH3H$H$XHc$PH$pE3HD$XH$hAMcMT$8HL$PHD$@AAHu !HD$@HHHDHt$HhHc9|$8EA;= u;.HA+͋HAHHD$0HJHAL3H MI+Lt$0II  AI^HIL#HD$HDMƋ։L$H+ސEAMRAуP##D ʋ#D#A@AAD A#A D#HuEt7AGDD+D9l$8}OL DBD$ UAHl$0L DBD$ *HL$PHcMcH Hl$0HtHHtHA'L eDBD$ 븃H$H3* H$8HA_A^A]A\_^]@SWH H+Hy0HXWHy8LHyAHy 6Hy(+Hl$`Ht$hLd$pLl$@Lt$8L|$0HLLLLHHZMQMHM?M6H-HO 9Yu.HH9u&yu 3L D$ QS{KDCeHG x~Hu 3L D$ US{KDCeVHO0E3E33U?t 3L D$ [S{KDB HO8E3E33?t 3L D$ aS{KDBLG8HW0LHGu\HWHt 3L D$ kS{KDCHW0HL跪tHW8IL蟪tLMHItLMHI/jMM3IHl$ MLG HW(MHHl$ H-~uHH8u~t!3ۺ{L KDD$ H@PHHEHP:HW0HLũLG(LI3Hl$ GHW@It 3L VD$ S{KDC|?HW8HL[PLG(LI3Hl$ ݬ2HWHIt 3L D$ S{KDC}LG0HW8LHB/HHWPHt:3D$ L DC~D$ KL DCB{JoHIIIIHL|$0Lt$8Ll$@Ld$pHt$hHl$`HH_[ú{L LD$ >JDB3HH_[̸8V H+L POHD@JD$ pH8̸8 H+L tPMHD@JD$ xuH8̸8 H+L dPNHD@JD$ 5H8̸8 H+L PLHD@JD$ H8H)̸8F H+D$`D$(HD$ H8LL$ LD$UVWAVAW H+HH$3HLIDH$ILcH$$AHMLd$xLl$ppHDhADAu A6IÃAA+߃HAHHD$ L HD@A Ld$xLl$pH$HĀA_A^_^]ÃuHBL qDBD$ S AGD;RD$ L NDBڹsHAHL$8A+EHIHD$0QFH$HL$8E3|@}Hy HL$8AB^H$HL$8MBAtHL$8LcHB%HT$0HL$8E3*? HL$8xBH$LD$0UEIHD$ 8+HcIH€r rkCHcH1LH;wL;sS%}ȃDD+oHcH o 0G HcfJoBo 1fJA;|LcLcM;}fffA0IHR0BM;|EtA+A IcĿBD0HH&̸8 H+D$`D$(LL$ E3H8@SVWATAU~ H+HԂH3H$H$@HHL$PMILD$@HT$HE3!DMHLDrD$0H$$HuZHOL$HDxA >AϺtWL DBD$ v; "u}L QDBD$ o EuHύF;}'L GDBD$ ~ Hcǀ|t'L .DBD$ +L$HALcIHD$8诼HHu%L HD@AD$ G &LD$8Ll$ Lcl$0E͋H&Aԅ~n riGHcHL1H;wL;sQ%}ȃDD+@Hco0o f 0B Hco o1f 1A;|HcI;}!H+H 0L+ HI0AIuEtA+ A8uOH;} HD8 tHcÀ<0t'L DBD$ "x/+;t'L DBD$ HT$@HL$PE3x;Ht HL$PA=HT$HHL$PM=tw+tHcHL$PLcH=t\H$HL$PE3+:tCHT$8H$M t$L 2DBD$ ,AHL$L$H$HL$P=AH$H3W HA]A\_^[̃@t&`tttø5ø6ø4ø3Hl$V0 H+IcI+փy,L POHD@>D$ QRHl$PH0^H|$HHyuj1k~#BH\$@HHcغL HH\$@HDHH Hl$P>H|$HH0^̸8F H+LD9L$`EAB<H\$0IPAkudAY3~ H€t u9;|+؅uBD$ L JDB PH\$0H8D$ {L AYHcÀ<t-L D$ JDB H\$0H8DI H\$0H8úL UD$ pJDB H8@S $ H+HڅuHHH [ÃuH 'HH [øH [̸( H+HH r H(ЎHr ̸( H+HH r H(頎Hr ̸(f H+Hs H((Hs ̸(6 H+H s H(!̸( H+H s H('Hr ̸( H+H r H(S!̸( H+L q H(9̸( H+L q H(8̸( H+L s H(8̸(f H+L \r H(8̸(F H+Lq H(/̸(& H+Llq H(.̸( H+Lr H(.̸( H+Lq H(.H\$Hl$Ht$H|$ ATAVAW@ H+MMDiHHHtYHta3fsHt=à |LL$ LAHD$ Lt$(L|$0t HHHtHHtHF3H\$`Hl$hHt$pH|$xH@A_A^A\H\$W0 H+HI I=t0L DBD$ &H\$@H0_LL$hL3HH\$@OʋH0_H\$U0P H+HY AHD$@IHD$(APHAD$  3H\$PH0]ËD$@uH\$PH0]ÃuHHHtH|$`Ht$HtJHZHHuHHt$H3H\$PH0]ùHL$`LHALAHHHt$HH\$PH0]H\$W0@ H+HHHT$HHH HD$H؅~H`E3HHHD$HEA\$(HD$ tH\$@H0_HL$H23H\$@H0_@S0 H+HT$ HLD$PHT$XE33t8DD$PHT$X3Hu*AL AD$ e3H0[LHѬH0[H\$W H+HHQ HHK HRHIu)HW HK HR HI uH\$0H _3H\$0H _@S0 H+H3Hu*AL UAD$ y3H0[LHH0[̸(F H+HI H(H\$W@ H+HHHT$XHH HD$X؅/D$ L DBX3H\$PH@_ù\$0AHHD$XE3HD$(HHD$ uD$ L 떸H\$PH@_@S0d H+HT$ HLD$PHT$XE33t8DD$PHT$X3`Hu*AL AD$ y3H0[LH聪H0[̸( H+HI H(/̸( H+HI HIH(r̸( H+HI H(̸(v H+HR E3H(s̸(V H+HR DHH(RHl$ VWAW - H+HH EIH=HWH\$@3Lt$PHt;:u6HBHHHL$HHBHT$HD3aHHtHHpHHELHHwDHtHwHtH芹H\$@ELt$Pu3Hl$XH A__^Ht3EHHHl$XH A__^ HuHH$~Hl$XH A__^ø8 H+ME3LL$ HcH3 HELL$ E33I EHT$ ItH|$ tuHL$ E3EAHH8Eu I H8Au5Id H8Eu IH8AuIH8E H8AH8øH8f    <  a  H\$Hl$Ht$H|$ ATAVAW0 H+E3HHJEAHEAHtvHcȅHEHK HtSHcH;HBEHK(Ht&HcH;HBHK0HtHcH;HBHK8HtHcH;HBHK@HtHcH;HBHKHHtHcH;HBHKPHtrHcH;HBO HA7HHu%L HD@AD$ HKHt DAHi]Et0L9s(t*HoEH4]8HmL=v(H}EH ]H{L=LCLHΉl$ LC LIHΉl$ ELC(HGLHΉl$ hLC0H=LHΉl$ Ft~LC8H'LHΉl$ (t`LC@HLHΉl$ tBLCHHLHΉl$ t$LCPHLHΉl$ tAHH\$PHl$XHt$`H|$hAH0A_A^A\̸8 H+Hu H8UH H\$08qHHHu L =HDBD$ HH\$0H8@SWAUAVH H+HكE3LHu HHA^A]_[L$E33H薄gH$H uHHA^A]_[=t/L DBD$ /HHA^A]_[H$Hl$pHt$@HP3Ld$8L|$0H:HBHHH$HBH$D3HHWHHHKHH LHYH QLHEHsHthH=tD$ DL AHF8tD$ HL AH@LhH@HFHH1AADǺIHD$(D$ L|$(E3A AWAID|$ ~yAWAAILd$(D|$ ~SAWA AILl$(t$ bO&3D$ 6L AHL|$0Ld$8Ht$@HtHlHl$pHHA^A]_[@SVWPB H+3HH$=L$E33HHD$x́Ht1HD$xWAHD$(AHΉ|$  3HP_^[ËD$xu,H H$E3EAH/HP_^[ÃuHD$0A HD$(AHΉ|$ dHD$8AHD$(AHΉ|$ 5HD$@A HD$(AHΉ|$ Hl$pHHHT$0H;HT$8HK~`LHHCHHHT$@DHUu HJLq HKLHAL$HH!Ht5 L$H$HA褯H$HHl$pH$HtHP_^[H\$W0м H+HD$H ^HHD$PE3E33HHD$ ]Ht9AHD$HAHD$(APHD$  3H\$@H0_ËT$HuJ E3EA(uHHHtĹy LAHL$PH蓮H\$@H0_H\$W0 H+H5]E3HHD$PE33HHD$ \HL$PH uH\$@H0_=uLD$PE3H3H\$@H0_LD$H3ҋt|$Ht3H\$@H0_@SVW@B H+3HH|$xp DO HHD$pAHD$(Hˉ|$ 9HD$0WAHD$(AHˉ|$ } HD$hWDGHD$(AHˉ|$ RD$huHL$pD$h6u1HL$pH+cHÉD$h蕜ȨuL$hfHH|$htnHHCHtST$hHftCHT$pHht2HT$0HKt LD$xHHHEHt HD$xH@_^[HL$xHt3H@_^[H\$W 蠹 H+HHH@t#HHu H\$0H _HHw1H\$0H _H\$Hl$Ht$ W 6 H+3HHH9HʋH|$0@uGHt@tZHHtYHH0BLD$0HHHt4(HHt'LL$0HHA H|$0HL$0HtHtH}H9>@NjH\$8Hl$@Ht$HH _@S D H+HHtEHyt>H =u/HS:u&HBHHHL$0HBHT$0D3*H [3H [@S0Է H+HHu H0[韐H =tD$ L AMHuD$ L A1H E~H&Hu&D$ L A3H0[H\$Hl$Ht$H|$ AV  H+3AMHHHuH~@HxgAHHH8HHHt H]K HvH,H_AHGHH0HWHHtBHJHHHMt IJHmHlgHHPAHHQH)HWHHt`d H7~mHkHAHtJHH~7HWHHtd H~H2HH\$0Hl$8H|$HHt$@H A^HT$SVATAUX˴ H+LIMI؃=t-L NDBD$ U HXA]A\^[HSH$H|$P3Lt$HL|$@H:HBHHH$HBH$D3HHHHHOHH'HHD$8HH^LHHOHt&_Dy D$ nL >ApAHOHt$_tD$ yL +A=Mt(H$E3MILd$ 0$E3kH$E3HD$0HD$(EL$ ADd$ HL$0Iϋ{;tD$ L AH\$8H$ADƺLd$(D$ `H$ADBLd$(Dt$ 2~ZH$AAH\$(Dd$ O&3D$ \L AH L|$@Lt$HH|$PHtHH$HXA]A\^[H\$Hl$Ht$W ֱ H+AHH蕘HHt.HHtE3DHHmHϋ3H\$0Hl$8Ht$@H _H\$Hl$Ht$W0V H+AHH,H HHu"L PtHD@D$ H3,E3LHAPjADHHHϋH\$@Hl$HHt$PH0_@S İ H+HD@GHCH0kHuH [3@HHHH HH(HH8HH@HHH@0HHHC(CHHK@H [H\$W @ H+HHbu 3H\$0H _H[(H(HKHtWHGHtЋCGHC HG HC(HG(H{@t,HO@Ht3HSHHK@HG@HtHCHHGHH\$0H _@S 蔯 H+HY(Ht7HKHt:HK8Ht̓HK@Ht输HH [鱓H [H\$Hl$VWATAVAW0$ H+HAHY(HHK Hx MMHH7L$HcL;t*L DBD$ EHK $_u9{uHD$`LEI׹_H|$(HD$ GD$`zCHNQHcIFH;s*L IDBD$ >HHu(L 5HD@AD$ |HK8MI HK LHK8D$ AHS8ANLu6HK LEƋHD$`IH|$(HD$ HD$`~HHC0LK HS8D$(HC(MHHD$ nHKHS8D$ LC$L‰D$ ILx HI$H\$hHl$pH0A_A^A\_^H\$Hl$VWAV@踬 H+Hy(HIHO GMHHVH8u.HKlH%A(HG8HuKLKLG8$MI HD$ 4؃|CHO HcHO8);t)L @DBD$ <j3HO ;t)L *DBD$ A43HHW8LH转 t+H[L΋HC E3HD$8H$3HD$0HD$`Hl$(HD$ ݯ[\$` LK$LMI HՉD$ !؅y HcIH\$hHl$pH@A^_^H\$Hl$Ht$ WATAV0Ҫ H+HAHY(HHK Lp MIHH{u%DD$pLIԋLt$(t$ 贮<躿HcH9L$pt*L DBD$ yCu)LD$PL3HHt$ WLD$PuHH tLC8MHՋD$ C0LK(LC D$(HC8IIHD$ -3ɅoH{8u)H蓔HLAOHC8H4CLC8MHՋΉD$ jLctL;D$puHS8I` u3H\$XHl$`Ht$hH0A^A\_H\$Hl$Ht$WAVAW@ H+HY(MMCHHHIHI H{8u+HO贓HmApHC8HuHC(D$HK8HD$8HC MHD$0CHՉD$(HC@HD$ 誾tLOHS8D$ LƋLI$LI։D$ MI Q x HIH\$`Hl$hHt$pH@A_A^_H\$Hl$Ht$H|$ AVP H+HY(IMCHHH{8u.HI衒HZA]HC8HuLOLC8$MI HD$ ) HcЅ3Ʌ~LC8A<u HH;|HC(LcDLC8HD$@HC HD$8CHD+ɉD$0HC@HHD$(T$ CLI$LMI H։D$ x HIH\$`Hl$hHt$pH|$xHPA^H\$Hl$Ht$W0薦 H+HY(IIcHʃ w`H Hc‹.HSIL tlH{ 5HC I'D$ {L DBH\$@Hl$HHt$PH0_ÍFwFHK u3ЃuE  uE tH{ u ~HC s띺D$ L qDBq gH H.HCAG{t"D$ L 5DBuC0As0}"D$ !L DB3MtHKLD$0HHD$0AD$8A D$Hڐu HH HyHL$HHD$pHL$0E3IHD$(HD$ 8T$XH$0LHDHH诽H$LHTRHL$HAA;IH$$HH$HHwHL$HHQHT$xH־lH|$8H$LL3H|$ U蒌H$HL?RHH\$PLH$RjH$HH\$`x&HL$PALAQ1H\$ H+H$AōD;H$H|$XLt$HL$KHDBJ|$XLt$HUDŽ$HT$PH$L?H$$HT$p$0$2H$E3$1vHT$0H$MHZ+ H$AH$0H$AtH$0H$E3oH$0Mċ:}HTH$LL$PH$HD$(LIHt$ ["H$yugHH8u^yuX$y"BIILDO$H$H$jHDBiH$H\$PD$@HOH;tHt艃HHGHOH\$xH;tHteHHGHO HtKH$΂HHG tHL$@tHOt;LGHT$@HL$@=LD$@LD$XHGpLP(HGPMt%HD$0HGMLG HHHl$(HD$ ALOHW HD$(HHl$ I_LOLH3Hl$ AALGHT$XL3NHH"IMHtdmI]I $HtRmI4$A kL WD$ JDBs3H$HpA_A^A]A\_H\$WATAUAVAWq H+E3IMDLM9y IIHM9y H$Es`HKs='~AD$ TL WrO EGg詤H$H$HĠA_A^A]A\_HL$PH$dqHL$hZqH$Mq(|HHID9y D9yHSLvIND9yD9yHS#vLCIVHL$hLfHOLD$PID;DOAhH,LKLD$hHT$PHL$PHt$ ݔLKILD$hHL$hHt$ 躔CHt!LCHKPLκ LHHKpHCLQ Mt;LC L|$@Ht$8HD$0HD$hLL$PHD$(HC(H$HHD$ A3LK(HS L|$8Ht$0HD$(HD$hLD$PH$HD$ t:LKL$HT$P3Ht$ {>tIHL$Pt3@Džy qL ʔD$ JDBnHtH1yHL$PnHL$hnH$nH$3qD$ OL 3JDBaqL D$ HJDBĨIH̸(Fn H+HIPHtUH(HْH\$Hl$Ht$H|$ AV`m H+IAHDHHt`H$DLHD$HH$AHD$PHD$@HHD$0H$D$@HD$(H|$ tH H3L\$`I[IkIs I{(IA^@VPDm H+HT$ HLL$0HT$HLD$x3cuHP^LL$0LD$8HT$p3H\$`H|$h_D$puYHL$8HT$@HAHD$@D3HHL PuH D@hD$ \)H\$`H|$h3HP^Ãt7t2uL D$ fJDBH\$`H|$h3HP^FHHu0L OPuH D@AD$ b谟H\$`H|$h3HP^DD$xHT$H3-HHu L VPuH D@hD$ kg93HkHC(HuEL KPuH D@lD$ p4HHtHH\$`H|$h3HP^HLútHMH\$`H|$hHP^H\$Hl$Ht$ W0Fk H+Hz 3HHD$H9Z(H9_H9_H9_ UvHHuSD$ L vJDB]HL$HHt.OHtHu3H\$@Hl$PHt$XH0_HPHD$ L Y뙾HT$HHGD$ L Lat蕷LDHHD$HH͉|$(HD$ bAU@SVWATAUAVAW`i H+3LHT$ LHT$0LL$@L$3DDWuH`A_A^A]A\_^[LL$@LD$8H$3H$[HD$0D$3ɀ80HT$0u}4HHHX3HZHHZ}uAHMHL$8$^HL$8A8IHXaHD$HHH-xu/HA^rD$HT$H3HH$HL$8HAHT$PHD$PD3HH3HHG0HuD$ L uD@miHG(HuD$ L oD@AqsLHuD$ L jD@A`LOLG0HW HO(HD$ >uD$ L WD@m-LǺtIQIA*D$ L JAhsJHIqH$HtHH;WHpAH`A_A^A]A\_^[H\$Hl$Ht$ W@&g H+HB 3HHH|$XHH9x0JrHHuD$ +L ÎD@AHK HPMD$ 1L AAGHK 3HI0HHuD$ :L D@mhHT$XH-H΋ot詳\$0AHHD$XE3HD$(HH|$ Rt)@D$ $L ؍AetJ腙HL$XHtVJHtHp3H\$PHl$`Ht$hH@_̸(e H+HI H(&̸(e H+HI HIH(bgHA HtHxtHxt Hx t3øH\$Ht$W Ke H+HHJ HHIdHHu3H\$0Ht$8H _HC HHHtdHC HpHO HIDdHHtHC HHHtdHC HpHO HI dHHtHC HH HtkdHC Ht$8H\$0Hx H _H\$W pd H+HHR HHI HRHI_uBHS HO HRHI_u)HS HO HR HI _uH\$0H _3H\$0H _̸(c H+HHQ HH HR(HI(k_3ɅH(̸(c H+HI H(@S0c H+H3wHu(A L %PwAD$ Җ3H0[LtHDH0[̸(c H+HI H(̸(b H+HR E3H(#̸(b H+HR DHH(̸(b H+HR DHH(@S0b H+H3'Hu(A L UPzAD$ 3H0[LtHCH0[̸(&b H+HI H(6@SUAV0b H+EIHMuHtËH0A^][I@EHT$`3HD$`H|$XHH2H3Ht$PHtecHcȅHEHOHtBcHcH;HBN HRA$HHHu;L XP}H D@AD$ &衔HHt$PH|$XH0A^][L|$hAHFEHA;u?LHćLHDt$ Ȭt!LGH͇LHDt$ 詬AEHDL|$hHNHt$PH|$XH0A^][EHHH|$XH0A^][H\$W@@` H+MHt,tH\$PH@_AH\$PH@_EHD$8LL$0E33IHD$ HL$0HH H聮؅HuHL$XD`L$XϬHL$8E3HAQH\$PH@_AH\$PH@_EuLL$0LD$83IkHL$8HtKH HtC؅t8HvtHL$XDǻtL$X:HL$0E3HAfH\$PH@_H\$Hl$VWAUAVAW0^ H+3EHHAu Lr0Lj(LE~Lj(LLd$`Au L%L%HALEHJHt `HcȅHEHNHt_HcH;HBHN Ht_HcH;HBMtI_HcH;HBMtI~_HcH;HBٍK HACDHHu#L PhH D@AD$ ݐMt?AAH肷HN_HڅMDHLH1LMHD|$ H7LMHD|$ بtcLFH=LHD|$ 蹨tDLFHFLHD|$ 蚨t%LF HOLHD|$ {EH@Ld$`H\$hHl$pH0A_A^A]_^@S 4\ H+HD@4HBHuH [@3HHHHHC(HCHHC@AH [H\$W [ H+HHD@4H$eBLHtZ@3I@I@LC(CHIHHK@HO(AAA@HAI@HAI@H\$0H _H\$0H _̸(&[ H+HI(Ht H(q?H(H\$Hl$Ht$ W0Z H+HALQ(IIJHh IHHt0p@DD$`HL$@Hl$(HL$ LH׋~ D$@HH\$HHl$PHt$XH0_H\$Hl$Ht$W0VZ H+HALQ(IIJHh IHHto@DD$`LHӋHl$(|$ H\$@Hl$HHt$PH0_H\$W0Y H+Hy(Iفʃ HcHyHH o@tjHntt]HnBtPHn=tAHn=t2Hn=t#Hn=tD$ L H_H\$@H0_HGIH\$@H0_úxL ͂D$ JDBaH\$@H0_A|DH\$@H0_ÁtpuHn@tKHn=ttE3DHH<Hϋ#93H\$0Hl$8Ht$@H _H\$Hl$Ht$W0T H+AHHHHHu"L ~PiH D@D$ HLJ3,E3LHAPjqDHHHϋ)H\$@Hl$HHt$PH0_H\$Ht$W S H+HH:HHt=HH*=t.E3HHEA;Hϋ 8H\$0Ht$8H _H\$0Ht$83H _H\$Ht$W0kS H+HHHHHu0L }PeH D@D$ W识3H\$@Ht$HH0_E3LHAPjKHHHϋHt$HH\$@H0_̸(R H+ =}zHu H,}3%H΃3H(H(̸8R H+HtTHtOHL@ Mu&lL D$ JD΅3H8AHu9D$ L D@jD$ L AClJ舅3H8̸8Q H+HtEHt@HL@MuD$ L .Al2AHu9D$ L 'D@jD$ L ACmJ3H8@W0tQ H+HHu&L PNHD@D$ ˄3H0_Hu/Hy8Hu&L fW~O%DGoD$ 藄3H0_AH\$@Ht$Hu.HA(HtHHL@0MtHAHH3HNj8tfDs H8uHAW7HHu0L P~H%D@AD$ H\$@Ht$H3H0_H8ts HÀ8uHHDC賡H\$@HHt$HH0_ø8P H+DHu&L ܆P6HD@ D$ (mH8tatRtCHHtLX(Mt AH8InL D$ <JDBH8D A3H8DA3H8ËAH8Hu3ËA@S0TO H+HHu&L RP?HD@D$ 諂3H0[L DHAD$ B$HHPHt/H҅u&L PoH%D@kD$ G3H0[HHPHHt/H҅u&L PoH%D@fD$ 3H0[HK;HK8Ht2HK@Ht2H2H0[H̸8&N H+Hu%L 7PGD@ HD$ R老3H8HA8H8ø8M H+Hu%L WPHD@ HD$ @3H8HA@H8@S0M H+H"HHu=HPXHu(L (D$ DBJ3H0[HH0[HH\$Hl$Ht$W06M H+3AHHHu=IHHu%L VpN%DFAD$ u3hH{8tD$ L AnHt(HH%upD$ L D`H{8uD$ L Ao=HHPHuD$ L wDBlH҅u2D$ L qD@gp%tH3HH\$@Hl$HHt$PH0_̸8K H+E3Ht8Ht3Au%HA0Ht LH8HLP8MtALIH8úL D$ vDBJ3H8̸(vK H+3H(H\$W0PK H+H=Hu HAjHAH1HHu+L PqH%D@AD$ lx~3H\$@H0_3HHCHCHCHC HC(HC0HC8HC@1:HCHu3L PqH%D@AD$ s~H.3H\$@H0_HCHD=H;HG@HtHЅuHK7H.3HH\$@H0_H\$Ht$W0J H+HAHHHuLHPMu3L ~D$ JDBU}H\$@Ht$HH0_DHHH\$@Ht$HH0_IH !Ht$W0I H+HHHHHy@t+L PQHD@>D$ a|3Ht$PH0_H\$@3H‹Hl$H8 ts H8uHjAe/HHu7L fH%D@AD$ gM|3H\$@Hl$HHt$PH0_H8ts HÀ8uHHDC HN8Ht,Hn8릺L D$ ]JDB{Ht$P3H0_HH̸8&H H+Hu%L PBD@ HD$ F{3H8MtHA(IHQ(H8̸8G H+Hu%L '}P:D@ HD$ {3H8úL }HDBD$ H8H~̸(FG H+H(Z H\$Hl$Ht$W0G H+3H3HHu%L SxK%DCoD$ az3HU HHu9L PxH%D@gD$ +zL HNLigHA9-HHuD$ L D@A&H0HMH6uGD$ L D@ixJyH*HtHt*Ht HT 3 H}@H\$@Hl$HHt$PH0_@S0E H+HHu&L PIHD@D$ +y3H0[HI*5} H0[HKH|$@5HHu+L UPyH%D@hD$ xH|$@3H0[HT u7L =PyH%D@kD$ xHKHb5H|$@3H0[H])H|$@H0[H\$W0D H+HHHHHI<4}D$ L AiHK4HKP5HuD$ L ́D@hlHHS HujL ΁PwH%D@jD$ wL L}HɁLǹg3H\$@H0_D$ L ACwJew3H\$@H0_H\$W0C H+HHHHHI,3}D$ L `AiHK3HKP4HuD$ L LD@hlHHR HujL NPvH%D@jD$ vL \|HILǹe3H\$@H0_D$ L ACvJUv3H\$@H0_H\$Ht$W0B H+3HH‹8ts H@80uHzHR Hu?H{HR Hu*H{HR HupKALH{KAOH{(HHu0L {P}H%D@mD$ Quu3H\$@Ht$HH0_LHHzuHz=R Ht$HHH\$@H0_H\$Hl$Ht$H|$ AV0A H+3IHHDHHu%L zPVHD@D$ t3HA8tfs H@80uH+zA'HHuD$ L 'zpHH+H[DukHu|H8 ts H@80uHqyA d'HHu'D$ L uyJDBs3HH+HD9uE3sHHuD$ L yAHHILHu/L yH%D@AD$ !sHY$3H>u#H~uHHAFFIFHFAFFHF0HuIF0HF0AF8F8<\t HĈA^A\^[HL HK 3H$`@8$`ts Hǀ8uE~$A;|A~HcH$`IL > B#G]@UV< H+HH3H$pHH lwNK HHu'L wwH%D@lD$ o3lHpwHH$K HHHu-K L gwK%DClD$ o3H$HXwL$L$jK HKwHLWK 3ҍJLHHu0HJ L ,wO&DGmD$ +o3HT$0HD$08AׅuHJ H;J 3THL$XHJ HHHu"HT$0AօuHJ HI 3wJ HI HL$H$L$H$H$pH3; HĈ^]HivHl$ W0: H+3HHu+L rPWHD@D$ n3Hl$XH0_H9 tJH9j uH9j0uH9j@t H9JtJJ(H9j tH9j0uH9j@tJ8H9j0tH9j@tJHu-L crD$ JDBm3Hl$XH0_H[rALt$P LHu2L ZrH%D@AD$ AmLt$P3Hl$XH0_H\$@Ht$HH9/tLqINfAqAFLcGHI oH uH0uH@t,HcB0\ HWHtLcGHI HcoBD5:HO HcW(HHH+H;~w@L HIH+tHHtHHOH>H=HL=LM(HH}u94HEHH}u 4HEHA%jL qD$ JDB fIAu(W7W I6AHAu"AV6tyAVI6tiA 6tVHI6tGAT$hHMMDLl$(L|$ 轎t#E3IAPJtHMHcZ6u"jL pD$ JDB&e3L|$0Lt$8Ll$@Ld$xHt$pHl$`HtHI;H;HH_[H\$Hl$Ht$H|$ ATAVAW`<1 H+E3HAEAArHt$0H _̸(+ H+HH(H`HS0+ H+HL GlD@HhD$ HHP(HtHHHtyLCpHӹ5HKHtz&HKHtl&HK@Ht^&HKHHtP&HKPHtrHK`Ht4&HK Ht&&HK(Ht&H@H0[̸(* H+HLHu H;H(̸(* H+HpH(v5̸8v* H+HD$`HD$(LL$ ML‹ѹ5H8̸(6* H+3H(H\$W0* H+HD@NH7jH`HHu+L 8jPiHD@AD$ Q]3H\$HH0_HMHu H<HHtHHu3L iPiHD@&D$ \H 3H\$HH0_H 3 HHHtPEHHu?L iPiHD@&D$ \HH] 3H\$HH0_HChHt$@3LCpHH3HsHssHs Hs(Hs@HsHHsPsXHs`Hs8H0 K0Nu4HHP Ht6H҅u-HHt{LCpHӹ2H HHt$@HH\$HH0_H ̸(( H+HpH(F4H\$W ' H+HHHHP(HtHHtHǃHHG HtHиH\$0H _̸(' H+HIJ)H(̸8V' H+L gPD@HhD$ t3ɃH8H\$UVW0' H+3HH*L2HHHLt$P2Hk1LHHL|$XR1LHH9o@,HOH;"~HHWHO*"y7LOLG@HWIHt$ M8A~uIH8uA9nt HO@E3L3˅u LO@LGIIHt$ lAuIH8uA9ot HOHHtyI!tm @hHOQuYHH8u9iuHOYcH t: 5u-HH8u$9iuHO -cHHt  HOE3L3u -H9o@u'HWI_tE3L3IɄu L|$XH.Hh/Lt$PH\$`H0_^]Hl$Ht$WAVAW0$ H+3ILA(L!0HHHH\$P0H@/HHUH))HI& IVH"Ht`HqctOHIxMF@Mt/MNIHHt$ t{uHH8u9ktH-HN.H\$PHt$`Hl$XH0A_A^_̸(# H+ dKHu Hd3%RHNg3H(RH(H\$Hl$Ht$H|$ AV@p# H+IIDHHt6LL$ DAHD$ H|$(Ht$0tH HO3H\$PHl$XHt$`H|$hH@A^̸(" H+HI H(@VP" H+HT$ HLL$8HT$HLD$x3uHP^LL$8LD$@HT$p3H\$`H|$h|$pt2lL VhD$ rJDBUH\$`H|$h3HP^HL$@HT$0HAHD$0DHc 3H9FuHHu0L hPlHD@hD$ {yUH\$`H|$h3HP^DD$xHT$H3HHu8L gPlHD@hD$ 0UHH\$`H|$h3HP^3HHC Hu@L gPlHD@mD$ TH]HH\$`H|$h3HP^H;HFLËHH\$`H|$hHP^H\$Hl$VWAV0 H+Hz HLHD$X-,HHuQD$ L gmJDB5THL$XHtHtH+3H\$PHl$`H0A^_^HPH HH9Fu;D$ L fHO 3RHHtHT$XHHϋ#D$ L fEHFPmLAHHD$XIΉl$(HD$ !5H\$Ht$WP H+HT$ HLL$8HT$@LD$x33ɋO LL$8LD$HHT$p3|$pDD$xHT$@3lHHHT$HHd HJHL$0D3HT$0H9FuHHtb3HHC(HuD$ L meD@jOHtPHFLH΋RHJ(H\$`Ht$hHP_D$ L 6eArnJRHH(H\$`Ht$h3HP_Hl$VWAV@M H+HLHD$p)HHu&D$ L dAAAHčQjQHN HPH) H9FuD$ L dGHN 3HI(HHu L dD@jHPoD$ QWHT$pHH\$`@H͋'HN j\$0AHHD$pE3HD$(IH|$ dMH\$`u,HL$pHtHtH/(3Hl$hH@A^_^øHl$hH@A^_^@S0 H+H HH9Au 3j3ALHu'L cPkDD$ AP3H0[HCHˋH0[̸(f H+HA L L9AHu H(H(̸(& H+HI H(̸( H+HI HIH(H\$W  H+HHR HHI HRHIbuOHW HK HRHIIu6H H9CuHW HK HR@HI@#uH\$0H _3H\$0H _̸(V H+HI E3Hu H9BHR AH(0HA HtHxt Hxt3øH\$W  H+HHu H\$0H _HW HK HR HI nH\$03ɅH _̸8 H+HR D$ H8̸8v H+HR D$  H8̸8F H+HR D$ R H8̸( H+tu2ABH(Au IH(Eu IH(H(H\$W  H+HeHHtAHHuH3H\$0H _HH\$0H _̸8V H+D@E3D$ _ H8H\$W0  H+H%HHtnH-HunHD$(LD$PHT$HE3HHD$ t>HT$HHt4LD$PMt*Hqu+L vaPuHD@qD$ )L3H\$@H0_HHu+L TaPuHD@rD$ /K3H\$@H0_øH\$@H0_@USVWAUAWHX* H+3LH]@D$HHu HXA_A]_^[]HL$Lt$P*LEPHUHE3IH\$(LH\$ 1LMHHME33 3dH9Eu|IN 3HI LHHU@H<IDqEHU@HMPE8$HEP`HEPHH]@dHMHHE3A AHDBhH\$(D$ LDgHEAHD$(DBhHΉ\$ tL;Au.AHDBhH\$(D$ BL  AHMHu3`AHD$(DBhHHE؉\$ K+@LEHUHItIHL Ha(DWcA HD$(DBhHΉ\$ KNI%D/HH2A cHHGHHI&HOu HO轥H_A HDBhH\$(D|$ JHMHt**HMLcmIH+eLHLA HDBhLl$(Dt$ J~dHU@HH]@UHM@DHtVtH HHt7HU@EH!H]@aHMHLHAHM@HtLt$PL$HtHiHXA_A]_^[]@SWATAWX? H+MLLLD$@H$HL$03ۋ8HL$0b=ia$SIH$HH38'HH H$Lt$PIH)ID9lHD$8HEHT$8E3蓦LHu L [SvKDChD$ F~3HHF Hu L [PvHD@mD$ F6HHt)HELHϋHIH VOIڠHtH-Lt$PHtHH$H$HXA_A\_[ËHXA_A\_[@SVWATAV@n H+HL3H$L$H΋DPH$H `=t,L ZSwKDCpD$ EH@A^A\_^[úAIDBhH\$(D$ wGAHD$(DBhIΉ\$ JGH$HB8H@L|$xHHHL$0HBHT$0HHD3LHeHHH<IHl$p`@_HHHHĨ%=E3E3HHH\$ 螋IWH !H A DBhIH\$(D$ JFH"]A HD$(DBhIΉ\$ F~bH$Ht(%H$LchIHB`HHt-A IDBhH|$(Dd$ E~HHl$pIHtHSL|$xH@A^A\_^[H\$Hl$ VATAUAVAW@ H+D$E3AHHEAuLz(HB L|$0HD$xMLl$0E~ HB HD$xLl$xHJH|$pH+HcHKHtHcH;HBHK@HtHcH;HBHKHHtHcH;HBHK`HtHcH;HBHD$xHtHrHcH;HBMtIOHcH;HBAu L=tUL={UHUALEO HUAwLHu D@AjAHNhHKH^UMDH .LD$0HLUMHΉl$ YLD$xH6UMHΉl$ YLCH UMHΉl$ YLCH UMHΉl$ cYLC@MtHTMHΉl$ BH\$0Ht$8H _Á;H\$0Ht$8H _Á HcH3XH{{ H\$0Ht$8H _Ã{{H\$0Ht$8H _Ã{H\$0Ht$8H _ÍGr{H\$0Ht$8H _ÃuC$H\$0Ht$8H _ÍG5@{$H\$0Ht$8H _LK0H\$0Ht$8H _HC0IH\$0Ht$8H _EH{HH\$0Ht$8H _ËCHAH\$0Ht$8H _HK8HtyHs8HtH{@H\$0Ht$8H _HC@H\$0Ht$8H _HK8I C@H\$0Ht$8H _HK(Ht袐Hs(H\$0Ht$8H _HC(IH\$0Ht$8H _H\$0Ht$8H _Â`'@\~'H\$W0  H+LfLIHL+HffDF E+uHEuEu8IL ADBHHD$(D$ X8H\$@H0_L LHL+DB D+uHuEu)H[(H /CH\$@H0_L KHL+DB D+uHuEu8H ADBHHD$(D$ 7H\$@H0_L KHL+ʐDB D+uHuEu8H= ADBHHD$(D$ I7H\$@H0_LGKL+@ B+uH…uu8H ADBHHD$(D$ 6H\$@H0_øH\$@H0_Hl$W@  H+Hy(HDGEtRAt(AtAtHl$`H@_ RLH[Hl$`H@_Hy8Ht$XtHHL$ Ht$ mP3H\$PtBHHHHtuB3L|$PLcHD$HHD$@HD$8D$0HD$(ILHHD$ p~H HN~3H$L\$`Ik(Is0IA_A^_H\$Ht$W0 H+HHyH5ZHHu0L >HPeHD@D$ G13H\$@Ht$HH0_E3LHAPj{RHHHϋ6UHt$HH\$@H0_@S  H+HHtTH } 8H HC(H y HCH{HC@tHtH{t HH [H3H [@S H+Ht+HL$`HtHV8&HtAHtHAH\$@Hl$HHt$PH|$XH A_A^A\H\$Hl$Ht$W0V H+IIHHMt,Ht'(LT$`LLT$(LHHHD$ H$L b"DBD$ t3H\$@Hl$HHt$PH0_@UVWATAWP H+E3MIHHD|$0t/L "AOEGjD$ $3HPA_A\_^]H$H$HuLHHHL$L$HHLHLHHD$8HD$@Ht#HL MtSLF8LIHA҅uC|$0HL$L$MtIH$HPA_A\_^]Lv8A~IH8A~HL MtAHtLFLHHA҅nM`HLF LIH =HtHVHH0M"HV IaHLGhLII"Hu%L S HD@D$ W2HLt$8LHuMIHLGhIIHt#HLFMHHH\$ rMthHHl$@H\$ HuMMHHLOhMIH(HLF LIHH\$ @UVATAVAWp H+E3MILHLd$XM;uL$HpA_A^A\^]IIօuHtHIHpA_A^A\^]HH|$hH$Ll$`LHHD$PHutHD$XHHHH$HHHHHD$0sHHD$@fHH$VHH$FHHD$89HD$HHE9fPt*HL$0HUHHL$@HU HnMF8LHHT$PHT$0LELHH|$ AՅMN8LHHH|$ AՅHT$@LE LHH|$ AՅ{D9ePt0H$IVPH[H$IV 6HtLE8LHHT$P,H$MFLHH|$ AՅ LM8LHHH|$ AՅH$MF LHH|$ AՅL$HT$0HL$8LNhlL$HT$@HL$HLNhIHD$8D9`uFHD$HD9`u!HLLIHD[IO83OEgPA4HT$0L$LNhHwHT$@L$LNhHVEPt1E9fPtHl$8IO8HHftIV8HH/E9fPtHU8HHMN8LE8HHH|$ AՅHl$8IW8LHLH|$ AՅcLD$HLt$PLHHEgPAօALH$LHHAօ"LD$0H$LHH|$ AՅL$LNhIOHLFhIWHH$LNhLHlLL$HLHHH|$ AՅLt$8LHMIH|$ AՅtmLD$@MLt$0HIH|$ AՅtNLNhMHHt8D9c~HtLFhHH藕tIO HDEHtH?HD$XH$HtHAH|$hLl$`HpA_A^A\^]HT$SVWAUAW` H+HE3IIMHLl$X+tHK83|DkPAEH`A_A]_^[HH$L$HLHL$8Ld$PHuHD$XHHHL$RH HHHLHHD$0HD$@HOLHE9oPtZIGHLHD$HAԅ)LFhHIdLNhMHHLHAD9MG8IAԅMgLNhMIHLd$HILd$0LNhIMMLIHH|$ T$8kLFhIHTMHIGHLHD$HAԅ/LFhHIjLNhMHHMG8LIHAԅLMIHAԅLMIHH|$ T$8LILNhIvMg E9oPtIHHMO8MHHH|$ T$8\L$LFhHIO8<HT$@MLd$PLHEoPAԅLL$@LD$HHT$0HH|$ T$8HT$0LNhAHHT$0LFhHILMIHAԅLNhLIILD$@LHHAԅtuLd$@LNhAIHtWHT$0LNhMH}t?LMHHH|$ T$8t&H$LNhMH HEDEHHD$XL$HtH(AH$L$H`A_A]_^[H\$W H+HHu9C(tHK HWhLH\$0H _H\$0H _39B@HT$SWAVAWh+ H+IHE3AFtAFHhA_A^_[HLd$XLl$PLHHD$0Hu)LHHbHH$Ht$`H=HH2HH'HH$HD$@HH$LHHHLHD$8T$0H$xP5L@8LHHT$0H$LLHT$0~L$HT$@LHH|$ AՅ[tOH$LChH6L$LKhHHLKhLHH7L$LHHH|$ AՅLKhLHH6LL$8LHHH|$ AՅLL$@LHHH|$ AՅL;LLKhHHteLL$8LHHH|$ AՅtKLLKhHHt1L$LHI HT$0tHH3E3AHRHt$`H$MtILd$XLl$PAHhA_A^_[H\$Hl$VWATAVAWp4 H+E3IIHLEGHI΅t8AAR%t ?D9fPt6D9gPt0HWHNnuHW HN ]tAAIL$LHHD$`Ll$PHuLHHH7HHHD$HHHD$XHHD$0HD$@HcD9PuALG8LHIT$`DLL$@HT$HLFIHl$ AՅ#HD$HHFHD$8D9~PuCHT$0LF8LIT$`LL$0HT$XLGIHl$ AՅLl$XLoHL$8I t D9Pu@LD$@LO8IIHl$ T$PLL$@HT$HLF IHl$ T$Ptg HF HD$8D9~Pu=LD$0LN8Ht$PIIHl$ օt7LL$0HT$XLG IHl$ օtLo HL$8IoA߅HMtIL$L\$pI[8Ik@IA_A^A\_^H\$Hl$ VWAV0h H+3IHL9ZPzHuHHHHLd$PL|$XHHLLHt`LMHIH|$ tFMMHIH|$ t,9uPu"fL D$ JDB#HdL|$XLd$PHtHH\$`Hl$hH0A^_^LD$SUVATAVAWXH H+3ILHHl$@DDHuBHXA_A^A\^][H$MuWHD$@HHHLl$PHqHLfHD$8MjHaB H AeLH;HMtIH HI;rH$H9j@tI $H8ɻH.HL(MtI$LHAI $AM;spIHH+$HL$HLA9i@t"LD9H9HI8HHt$ HT9H 97H]HL$HIHM;rH$KTLChLIHu%L HD@D$ %HLMt4LMIHA҅HLMIHMwMIJ3H0[MIHH0[SS̸8薵 H+MLLMu%L JPLHD@7D$ 3H8IILT$ RH8̸86 H+ILMLMu'L D$ DBJ~3H8MAIIHD$ RH8̸8ƴ H+ILLMu'L D$ "DBJ3H8HIH8N̸8f H+HHHu(L `D$ -DBAH3H8H蔲3HH8H p ̸( H+HHH(HI蛳HI;s0DLOHMHHl$ )HHI;rH$HCL;sNLMIHófDLMIH蟳uHHrH$IL;+H$L|$0LLIH茻E3H$L bLHXHH0H@HD$8H{ HCHUHN`HAL{(HD$ =t6ADc-D$ /L DBNE3H$HtH膣HD$@HtHL$HtHHt(HHHtHgHCH[HuH}MtIEMtI8AHPA^A]A\_^][D$ 5L GAH$G̸( H+ Hu H3UH3H(CH(@SP贘 H+3مH^ H|$`HfD9tHH HQr)HHL$0L)D$0)L$@lHHu/L HDBD$ k H|$`3HP[ËH蛭HH|$`HP[3H9 tHHHr3H HHH\$HLE3LfffIML+B +uHutIIIr3H\$MBDH\$LHtDHt?AQI;LBMt-H ffJM@HR AHHJIHIuQ@S H+H$Ht$xH|$pLd$h3Ll$`E33Lt$XL|$PH3E3E3H$E3LL$0HT$@H$סLHu%L KDCAD$ $HEE3HcHHcxHpH$HHD$8讎LHH >E3蔎H$H?E3HcHpHHD$0HHEHtbHHHt'LLL$0L$IHLt$ AR(D$  L DI>Hl$8H$L}MIupHHu4D$  L yHHuD$  L sHl$8H'L DBD$ YH苯HHLIHtA9u$L DBD$ cUE3MHHH\$(H|$ 訮t6HHu"L HD@zD$ jEL|$PHtH|MtIHtH肪H\$XHl$`H0A^_^Hl$Ht$WAVAW0W H+LHMIHHcu3HA_H\$PvHHtbHH躉tKHuIHHuH9t3AHLLHIL|$ <uHuH[Ht3 HsHH\$PHl$XHt$`H0A_A^_H\$Ht$W0[ H+HHL$ IIHD$ 蜼u3H\$@Ht$HH0_HT$ LLHHL$ H6Ht$HHH\$@H0_H\$Hl$Ht$ ATAVAW0ю H+L|$pME3L|$(AHHD$ LטHHtjHhAGH|$PFuHHt(LDHIL|$(H\$ 蓘HHu r3MċȆHHrHH|$PH\$XHl$`Ht$hH0A_A^A\H\$Hl$VAVAW0 H+LL$(IE3ALLHD$ HHHAH|$PmtHHtILDIIHt$(H\$ 躗Ht! ]HA,tHHu Hq3PHLHt7L FfDAHM@HBBB BHuHkqHH|$PH\$XHl$`H0A_A^^H Hy HY Hٕ H H HI H٘ H\$W P H+H33JH軡=uIH9t>fH@Ã8uuH\$0H _ÃuH\$0H _3H\$0H _H\$Ht$H|$AV0赋 H+IILHHIH=uWtNtEt<t2u)MtAHtHt$L DBD$ w萾3H\$@Ht$HH|$PH0A^H\$W0 H+HHHtiHHE=u3t*t uHtH\$@H0_úL DBD$ a3H\$@H0_Ht$H|$ AV0: H+HLHL W HT$H3HD$HfHHuAL HD@uD$ nH 33Ht$PH|$XH0A^HH\$@@HHu3L HD@D$ H HI3/HtHHtHH H!HD$HIHH\$@Ht$PH|$XH0A^Hl$Ht$W0+ H+AHHHH:H\$@HtHHuD%HHu7L HD@AD$ M3H\$@Hl$HHt$PH0_HKDHWHu5L DD$ HtH9tH!HtHH땺L D$ JDBHl$HHt$P3H0_Ht$H|$ AV0 H+HLHL ב HT$H3HD$H6HHu4L 2DD$ =3Ht$PH|$XH0A^H\$@HtHHu2$HHu%L HD@AD$ H~tHKHtёHNHCH{uD$ L DYHNH.LCHIHCHuD$ L D@HKHt肞HKHHCHuD$ *L DHFHtaHcL@D$ 8L nAdALHKHD$ C$ԏu\D$ ?L DDoLCHKE3HD$(HD$ ţuD$ EL D0K HtHHD$HI8D$ "L A}>HtH9tH,3H H[Ht$PH|$XHH\$@H0A^@SUVWATAWHm H+3HHDD@$HQHHH9:?H9z5L$Lt$@{LHjHHHBHn3H|$ LMH=u%–uAD$ L bDzMuD$ L UDUIUHcH$H6LcH$HuH$HDŽ$H$jH AjLHuD$ L HI}HH$HuD$ L D@NL$MuH$AHD$0dH AASjLHuD$ L D@AHH(}LcuD$ L D@Ld$0D$H$H HT$0HKEӎt~H9}Pt_H9{u#.HCHuD$ L f D@AdHC`HCHDEXHUPHK?u#D$ L D (HKHt H{$D$ L A MtIfMt-If#D$ L AAAHϺ讵L$MtIفLt$@HtHǁHHA_A\_^][3HHA_A\_^][@SUVAT8Ё H+E3HHAHgH^H H|$hHtHNHtHw?HȋHHu2L HD@D$ HδH|$hAH8A\^][Lt$pL|$0聂HHuD$ NL E3E3HHLd$ ߒu&L DD$ SJ3H.HFHL w HD@ D$ YH R HHFHuD$ kL J H襒Hˉu&L 9 DD$ t褳\hHGHu%L D@HD$ yo'upHT$`H  HGHuD$ L ET$`H,L D@ HD$ HN=H֔=9DEt~DEtr9ujH z HGHuD$ L MD8HGDpHGpAHtH~Lt$pL|$0H|$hAH8A\^][úL kDBD$ w HGHuD$ L AAAHAPYӱ3H8A\^][@SUH3~ H+Ht$`H|$hLd$pLl$@Lt$8LL|$0H3eHHu'D$ *L DB[uMu%H j EHHuD$ 0L vIHSHuD$ ;L _DHSHuD$ AL KDHLHuD$ GL <D@qHE3IHDHl$(DHl$ -LHuD$ OL DZHARcHHuD$ SL D@A!LEIHHD$(L|$ 趆HuD$ WL DH{u&I HCHuD$ [L D@AHKEHuD$ _L E3HHÎuD$ eL DgHS H)HC HuD$ jL 6E3HHtOHS(H)HC(Hu:D$ rL rA MuH H!3L|$0Lt$8Ll$@Ld$pH|$hHtHzHt$`HtH_HHH][H\$W0{ H+HHHuAH  fHHu]L HD@AD$ >3H\$@H0_ËuHJHtuHJHt H& AHɋHυt譌t% 3 HCHuHm H3H\$@H0_HH\$@H0_@WATHz H+HAH\$`Hl$hHt$pLl$@Lt$8L|$033E3E3HHH9H9XHAHHHHJHzL@MmI9XcE3qHHuD$ L DC_HFE3HHHIqLHuD$ L D@)HNH =HFLpE.A~D$ L UA-zHHuD$ L FD@AINt=u`INHuD$ L -{$A;~~H{D$ L AO=I~HuD$ L !AG;O;~z;~t~pH{HzWHzWHz3HzE3MHHD$ L gA~=uD$ "L TDB_D$ &L TAsE=HFHHHuD$ 2L : 3$HHuD$ 7L /D@ D9`D9`HxD=~D$ BL !AE3MHHHHuD$ NL DxHFL9`tqHOPHtZHFHAVHH \HHGPHuD$ WL D@AHFHPLcHRw HFHHHcHGXL9f lHFH_L9`UHLHeHNHQH LFIMcM@HHD$ ~uD$ nL tDHN H"HHuD$ tL aD@ xxHvAM;~D$ |L UAzHN(Hu=ItE3MLIH]D$ L 9DVI4"LHuD$ L D@ ,D$ xL AzD$ `L YAşH~cD$ <L Ag=D$ IL Ag&D$ L 5D$ L As_3Lt$8Ll$@Ht$pHtHsH\$`HtHosHl$hMtI]sL|$0MtI{HHHA\_ø8vs H+Hu%L PfHD@DD$ Ц3H8ËH\$0uGHInHHuD$ L D@wzHԇHH\$0H8ÃuAHIHHuD$ L D63H莇HH\$0H8Ãt$D$ L As3H\$0H8H\$W0`r H+H3CHHu-L tHD@xD$ 諥3H\$@H0_LG{ HHuɝSHKLt$P9iLqu&L vD$ DDAjAP7葝LKE3HHt$(Lt$ 裇uD$ HL HHKHuD$ LL <(HKHIEex'D$ UL *DBLCHKE3HHt$(Hl$ u#D$ ZL D踜@LCHKLH#t$L DBD$ ^}Lt$PH9sHtĤH|$HHt$@H\$XH0]úL DBD$ .#H\$X3H0]!Q,Ht$W0ph H+HHHJHAHJH\$@Ht72&HNHHtxHy{HFHt|HWHutlHt7Ht0HNHtHOHFHt>HWHFt.Ht9H~uiHFHtHWHNfHu3H\$@Ht$PH0_HN0Hl$HoH_0Ht5HKSHtWHK LKLCHL$ HN0Hpt6HHuˋG F G$F$G,F,HHl$HH\$@Ht$PH0_3纲L DBD$ rHt$P3H0_H\$W f H+HHHtHH2HuH%3H\$0H _HH\$0H _HS0lf H+HL D@H(D$ q;HHKHtvHKHtHKHtIaHK0@n8H#H[JH0[H\$VWAV0e H+E3HAAHH9YHl$PgHHL|$XpLHH_Hu fHHtuHOMH*xtbfDHHetM9stHwHuHOjHHt.HOE3LHL|$(Lt$ ƂtH_HwAHdHtHuH~HtHuHdMtIoL|$XAHl$PH\$`H0A^_^úL DBD$ H\$`3H0A^_^̋A,H\$Hl$Ht$W Fd H+IHHIL@PHA?HM0LLHm!L)JAH?Hl$8Ht$@HH\$0H _H\$Hl$Ht$WAVAW0c H+ILLILPHA?Hl$pIN0LLHlHHuIN0LLIHl$ l!LAJ>Hl$XHt$`HH\$PH0A_A^_̸8c H+D@HpIHu'L uD@AHD$ ML3H83H@(HHHHHHH HH0@$H8H\$W b H+fHHtHCHuH3H\$0H _HH\$0H _̸(&b H+HIHu3H(H(v̸(a H+HIHt H(vH(̸(a H+Q$HIHt H(xH( Q,H\$W a H+HHIHHt rHq3HHCH\$0H _H\$W 0a H+HHIHHtI\Ha`3HHCH\$0H _H\$W ` H+HHIHHtzHSH-z3HHCH\$0H _@SUATAV8` H+E3ILHHL9aHM~H|$hkHHuH|$hH8A^A\][HHt$`kHKS~HH HLl$pL|$0jHLjLHHKH]uHKH|$ LMH=u&oHKMMHH|$ Pz t~HKMMHH|$ ztcII[u2IH[u#HHat6H%t*A"L %DBD$ 藒Ll$pL|$0HhHMiHxHt$`H|$hAH8A^A\][ùL DA3D$ x;3H8A^A\][̸8^ H+L dPD@H(D$ 33ɃH8@S T^ H+HHh^H^H^H [@S ^ H+HHh]H]HH []@S ] H+HHhXHXHX3ǃHHH [H\$U p] H+HHHhHh[Hu H\$@H ]HHHt$0[HuHt$0H\$@H ]HHH|$8u[H??‰; HHdHt6??; HHcdHu3jHcE3;}"HHHRLD;|Hc;}"HHHRLD;|H|$8Ht$0H\$@H ]H\$Hl$WAVAW0[ H+HHhMIE3YHEGHHKhHt$PHt=L AODBD$ 辎AHt$PH\$XHl$`H0A_A^_LHH<tʋ??; HHbHtHc;}-HfffHHRL|;|LHI:??; HHWbHHc;})HHHRL|;|AH\$Hl$Ht$W Y H+3IIHHHtHQhH$XHt9HtHH XHtHtHHWHtH\$0Hl$8Ht$@H _̸(VY H+Hh[H(H\$Ht$H|$ AV0%Y H+3HLHu2^dHHHu"L KDCAD$ ,caHHl$@dH\cHHt%MIHt 9]EHl$@HtH]bHtHbHt$PH|$XH\$HH0A^@S TX H+HHXHK XHK8XH [@S X H+HHWHK WHK8H [W@S W H+HHRHK RHK8RCPH [H\$W W H+HHHHUHu 3H\$0H _HS HO UHtHS8HO8UHtϋCPH\$0GPH _̸(W H+HJ8BP3[H(H\$Ht$W0V H+3IHMMt}HOIHl$@!UHtPHO3ZHO HUHt4HO 3eZp\HO8HTHtHO83DZ_PHl$@H\$HHt$PH0_úL DBD$ 裉H\$HHt$P3H0_H\$Hl$Ht$W0U H+IIH3rt'L MDEjD$ ?3[HN8HGQt&L gDBD$ 3GHtHVHSHt/3H=YHtHV HSHt3HYH\$@Hl$HHt$PH0_HT$SUWAUAW` U H+H3IMMHىl$0qIՅuHqtIH?m@ŋH`A_A]_][H$H$Hu_HHH(HL$L$J`H_HHD$8^HHD$@^HHD$X^HHD$H^HH^HL^HL^HD$PHt~APt&HL$8IWnRHtdHL$@IW [RHLL$@LD$8IHHt$ |nt3A}PL|$XtfIUI RHtIU Ll$HI RHu`\$0HY]L$L$HtH]H$H`A_A]_][LL$HMIHHt$ mtLl$HHL$8IXHT$8HL$PMqHT$@MIYHLL$PMIHHt$ 5HLMHHLHHMHHuLD$PHL$@IX A9GHMMIHHt$ MIIHLMHHjMHHTLHH:LII$HMMIHHt$ LIIyMIIcH$MLHHt$ qH$HqT$0EӋ̸8Q H+LL$ MH8H\$Ht$W P H+IHHluF9C(tALHHmuH\$0Ht$8H _HK HSLH\$0Ht$8H _pH\$0Ht$8H _@UVWAVAW@NP H+ILL3hltFH@A_A^_^]IHHHD$0H$A9oP,HuC[HHHHH\$pL$[HWZHLLZHHMIWHLd$xMOLHIH|$ $tvMG HHTtcMOLHIH|$ $tFMHH!t0MG LIIT$0tMHHt 39s@Ld$xL$H\$pHtHXHtH!YH@A_A^_^]H\$Hl$VWATAVAWPN H+3IILLDjHI̅tj@Ƌ6jt #A9wPt39uPt.HUIOIuHU IO ItHufYLHHHL$YHXHHD$0rXHHD$8eXHHD$@XXLHtfLL$8LD$0IIH|$ VhtHL|$@MHIMH|$ 7ht)HL$0IIuHL$8IIޅtL$HtHWMtIWL\$PI[8Ik@IA_A^A\_^H\$Hl$ VWAW0L H+3IHL9zP iHuXHHHHLd$PLt$XwXH/WHL$WLHtZLMHIH\$ >@HNIJHt/HN IJHtHN8Pt FPLt$XLd$PHtHUHtH^VH\$`Hl$hH0A__^H\$Hl$Ht$H|$ AV K H+3IMHHHt)ffHILHt(HH;rH\$0Hl$8Ht$@H|$HH A^3@S0TK H+MMHLMIHH0[̸(K H+ILLHIH(w @S0J H+MMHLIhMIHH0[HYW ̸(J H+H(ڟLL$ LD$HT$SWAWsJ H+IHLD$@I;u,L ;PPHD@D$ }3HĀA__[MAxMI9f9GPtH$H$Ht$xHUHgTHH\THH#Ld$pLl$hLt$`EwpLcLk D;u H AHQHD;v H AHQHE;t$ I AI`QHE;u I AIAQH|H$MHH=YHMDILLII'ILMII MIIL$IEAIIAIcHIu HHtHuAIIcHL$HE @IHHD$PHfffHEMH#HHIDEMHH8DH$H$HD$0HMMIHt$(Hl$  L$LHI)EMHHCEMHHCHHD$PQHL$HL$IHIHL$H H$H$H|$8Ll$0LA HQLILd$(Ht$ tbuH$IgtI!H$HK8mKt-CP3IJ3IJD$@H$Ll$hLd$pLt$`HePD$@Ht$xH$HĀA__[HIHĀA__[g̸(VF H+H(*H\$Hl$ HT$VWATAUAV@F H+L$3MIHHDMuIQLLHL|$pHt IIyMuHXdHcHHHcLH%HH4fHt`LOLHHLt$ 9stHMHHHLMIHLt$ MH$H$H+H$L LHHLt$ ItiHxtHMHHtJHLMIHLt$ t,H$HHI;rHL$xI\t3HR^MtD$ NL HD@Aj3H$H$HĀA^^[H$HL$@H$u&HuD$ TDL 뙹=l$0DE3IHH|$(H\$ f3ɅiD$ QL DAljL DBD$ :i3HĀA^^[̸(V6 H+HI H(&oH\$W 06 H+H7HHuZ3H\$0H _HK 袎E3HHHtH7Hϋ5H\$0H _̸(5 H+HI HtUHt3H(øH(H\$W 5 H+HHJ HEHHu 3H\$0H _HO HtHEH\$0H _H\$W 5 H+HI H衍HK H蕍Ht'Ht"E3HHM@3ɅH\$0H _øH\$0H _̸(4 H+HI H(@S04 H+H37Hu*AL AD$ g3H0[LHH0[̸(4 H+HI H(f̸(3 H+HR E3H(̸(3 H+HR DHH(r̸(3 H+HR DHH(R@S03 H+H3gHu(L HDBD$ f3H0[LHH0[̸(&3 H+HI H(H\$W@3 H+MHt]tuDABH\$PH@_AuIH\$PH@_;EuIH\$PH@_H\$PH@_EHD$8LL$0E33IHD$ _HL$0HH H؅HGHL$XDL$X^HL$8E3HAz$H\$PH@_AH\$PH@_EuLL$0LD$83IjHL$8HtKH HtCs؅t8HGHL$XDVtL$X~HL$0E3HAfH\$PH@_H\$ DD$HL$UVWATAUAVAW@,1 H+3AHxH\$0D$DDDHiH蕉HD$8HS2HHAxH"HGHHH;HO u HO̺H_AAIH\$(D|$ `LEHM@EH蚫ȅHE@A HD$(L$ IA_~bHU@HH]@vHM@DHtTtFA5HHt5HU@EH6M8H]@wHMHLHA9HM@HtHtHLd$`Ht$hHpA_A^_[]@W0t) H+Hu3H0_LD$HHT$P_tD$HH\$@3=u=AAHH\$(D$ ^~tAAHH\$(D$ y^~JL$PvHHt4HD$(AAHω\$ =^ËH\$@H0_3H\$@H0_H\$Hl$VWAV@X( H+ILL3LD$0HT$xHL$(H\$ OHL$(v=L$xttHT$0HD$ HuDI+HHH yHHD$ HHH(tfH=H͋BHD$8HtJtFHT$8HL$ DbHt/HHHt"HT$ H3HIxjOHL$ HtHtH Hl$hH\$`H@A^_^@SWAV@' H+HLLD$8HT$x3HH\$pt;HL$xH uI΋Du+L dKDBD$  Z3H@A^_[HT$xHB8uH@Ht$hHHHL$0HBHT$0HHD3HH HHHHHl$`u:tHHHH辽%=E3E3HHH\$ 蘠HVH6~~H5AAIH\$(D$ D[~NLD$8HL$pDHۦt5HL$pA HL$(IAD$ [~ H\$pHl$`HEHL$pHt$hHt H@A^_[H\$Ht$H|$AV0% H+IHLMI}HHH$6t$H7t rHAu/HHtfHPH!H/D$ cDL )HA$D$ QL GDAlW3H\$@Ht$HH|$PH0A^H\$W0$ H+Hu4HBDHT$P3HD$P譚HHuzD$ L 6HHuD$ L $D@AsHnr׊HHt2HR8HHtH 4HH\$@H0_Hռ3H\$@H0_D$ L ɹAVH\$@3H0_@S # H+HD@>HH HuH [3f@HHHHHHH HH8HH(HH0HC(AH [H\$Ht$W " H+HHD@>HH ? HHf@Hl$03H(HhHhHh Hh8Hh(Hh0HF(H(HHt f2HHtQHGHCHOHt8HCHt2GCHG HC HG8HC8HO(Ht)HW0qHC(Hu3Hl$0H\$8Ht$@H _Hk(HG0HC0H\$8Ht$@H _@S ! H+HY(Ht6H Ht2HKHtHK(HtHH [H [H\$Hl$VWAV0(! H+HAHq(MHx IHHHu YHcH tYHcH9 s&L DBD$ LT3FHNHt*6@DD$pHL$PH|$(HL$ LI֋i~ D$PHH\$XHl$`H0A^_^H\$Hl$Ht$W0F H+HALQ(IIJHh IHHt5@DD$`LHӋHl$(|$ kH\$@Hl$HHt$PH0_H\$Ht$ WAVAW@ H+HY(E3I{LHu HC8HuIBrI9 HAHL9qHKHl$hHuHH wH1AHHcHL$`HHuHl$hH\$pHt$xH@A_A^_LD$`HH= H|$`t7HC HLHD$0HC0LHD$(HC(IHD$ RDEHHeH A|L ַDBD$ R3XH\$Ht$W0[ H+HY(IcILNʃ H gLHc‹ HI3@tHs3=tpHd3=taHU3=tRHF3=tCH73=t4L TDBD$ Q3H\$@Ht$HH0_H{H\$@Ht$HH0_HCIH\$@Ht$HH0_Ë萄HHu2L HDBD$ !P3H\$@Ht$HH0_H Ht-H;H\$@Ht$HH0_ÁH KHc‹ HH Hu4L @DBD$ +"P3H\$@Ht$HH0_ËY1H\$@Ht$HH0_Ãu>Cu3L ɰHD@[D$ I3Ht$HH|$PH0A^H\$@HHt6LHHVHtH:uIHYu3 HO H\$@Ht$HH|$PH0A^H\$Ht$W0 H+HAHY(IHHHIHH[HuHX Hu7H nH'HcȸHH\$@Ht$HH0_HI rHLHLHD$ G~LD$HHLHωl$ ;[Lt$8HLMHωl$ [LD$`Mt-LL$XHêHωl$ LH\$Hl$Ht$W0 H+AHHH=jHHu$L HD@D$ MA3,E3LHAPjbDHHHϋGeH\$@Hl$HHt$PH0_H\$Ht$W  H+HHHHt=HHt.E3HHEA$Hϋ*H\$0Ht$8H _H\$0Ht$83H _H\$Ht$W0 H+HHH%iHHu2L HD@ D$ k@3H\$@Ht$HH0_E3LHAPjiaHHHϋ$dHt$HH\$@H0_H\$Hl$Ht$W H+AHHHHt.HHtE3DHH}Hϋ3H\$0Hl$8Ht$@H _H\$Hl$Ht$W0f H+AHHŇHgHHu$L ަHD@ D$ \?3,E3LHAPjO`DHHHϋcH\$@Hl$HHt$PH0_@SUVAT H+H&H3H$IMHHMu A@fH$$ L$E3~5HL$ ;POLc HT$ DH9l 3AHxLHi~L$IL$HAIM+fDIHHHkH;u3GHL$! LcD$  DGHT$ HkEI L ^IHsHH;H+LD蹣~gHH;yHNAHDkAAL$L$H$L$H$H3 HA\^][3LD$HT$WATAUAVH H+E3ILEMu,L PHD@D$ RC=3HHA^A]A\_H\$pAHl$@t%tttD$ [L Ϧ3utD$ _L ͦu7It'D$ eL ʦgJDB<33))HhL|$0 LcIGtJ}H;t'gL D$ rJDBU<3H$Hu LHHtHHt$8tH,HH$HH_H$L$AHH;H$IUh x&D$ L AfAHQW;u%H\$xL$DIHH|$ H$LAHI^HIUhHi xD$ L ~yu,D9f~ HCuA;tD$ L eHH\$xL$LIHH|$ 't;LHI##AkL 5D$ AHQW:AHHt$8MtIWAL|$0H\$pHl$@HHA^A]A\_H\$Hl$Ht$ HT$WATAUAVAW@ H+A@3IEH٩Av"t8Ht)H$sD$ L UhDEdY@.XHKhHcH|$8LgAtL$}HL9$shD$ L DBL$Mu0HLHIIQIHD$0DLHLD$0HT$xLHL|$ tpANuA}~IEtAFD6HL$0$HHcH+H;v>D$ L hJDB8IHHQHtH~3HH|$8HZHL$0H3HcHGHH;tD$ L AFu[IrHHcH+H;vD$ (L IHtH<33HHH3IHcHI;tD$ 4L [ I HtHqI#hD$ L D¹{73L\$@I[0Ik@IsHIA_A^A]A\_H\$ HT$UVWATAW@ H+E3AML|$8H(H$HuHD$8HHADžHLl$pL$$%H HL HH HHD$0 LH&HL$0LFhLI) HLL9 u3MHHHMLIHH\$ .LFhIH1(LNhMHIH\$ R'D9tJLd$0LFhHI%mLNhMHH3$SLNhLIIy(uHLHL HMt,LA҅Ld$0LNhHHMH\$ &Ld$0H\$ MLNhLII#HLL MtLHHA҅LLNhII^#~LFhLIIJHuq 2%=u7ou,%L HDBŹD$ 4L 9DAD$ s4AMA~ IED0AuANj$;tsHVhu\LIsGA;uL ܜDBD$ 4L לAnD$ 3jMIt[E9}~ IED0AuA;t$L DBD$ 3HT$xMMHH\$ . EEH HD$8L$Ll$pHtH! AH$H@A_A\_^]LD$HT$VWATAVXH+E3IHEMu+L cPHHD@ D$ 523HXA^A\_^H$AHl$Pt%tttD$ >L 3utD$ BL u9It)D$ HL DBV23hz^L|$@ LcIGtJ}H;t)L ҝDBD$ U13H$Hu LHHtHLl$H HHLHH$HD$0HH$MAH|HjHVhIx'D$ iL 4AfAHAP:A13u#H$DMHHH|$ yH$L$AHIHL$HVhIxD$ uL muUH\$0HMMHHH|$ D9c~ HuA;tD$ |L |H$MMHHH|$ ytAt9LL$0Ayt-HLD$8HHLt$ t[{~ HtHL$0bIHcH+I;v@D$ L DB-IHHHtH~3HHZHL$0H3HcIEHH;tD$ L AGu`L|$8IIHcH+I;vD$ L mGHtH<33HHH3IQHcHI;tD$ L G I:HtHI&D$ L Ah,3L\$@I[0Ik@IsHIA_A^A]A\_LD$HT$SUVWAV@H+3EHdH$Hu"HHHu H@A^_^][ËLd$pEHLl$8$L|$0fHHLHLHLLHH$LIzLA9wuHLIӹEHMIHQHLMIHH\$ +HMI輟MII覟LLIIɱun@(%=u7tu,L vDBʹD$ *L gDAD$ *tA9u~IEAuDHMMIHH\$ t>D;$tMIIɞt"HT$xMMHH\$ mEH{L|$0Ll$8Ld$pHtHH@A^_^][̸8vH+HLMu+u&ARzL EBBJD$ )3H8H;t'zL D$ DBJ)3H8t'xHD$`HD$ u H86H8H8I̸8H+HLMu+u&AR{L ĕEBBJD$ )3H8H;t'{L D$ DBJ(3H8t1xHD$hHD$(HD$`HD$ u VH8H8H8I8H+HLMu-u(L EBBAJD$ r^(3H8H;t(L ΔD$ wDBAH1(3H8t'xHD$`HD$ u H8sH8H8I̸8fH+HLMu+u&AR}L EBBJD$ N'3H8H;t'}L D$ SDBJ'3H8t'xHD$`HD$ u H8H8H8I@USVWHl$hH+HH3HEPIIHtD$ L zAjVHcC4HS3LHL$0HL$8HL$@HL$HHL$0I_HcC(HS 3LHL$PHL$XHL$`HL$hHL$PI'HcC@HS83LHL$pHL$xHMHMHL$pIHT$pHM;HUHMnyLD$0HUHM|vHtHUHMHUHtpHt@LEHUHMDvLD$PHUHM2vHUHM0HU0HYt+&D$ L ?A%3HMPH3Hh_^[]@S H+HyJHtH t H [HK`L bL+H3HH [@SVWATAUAVAW@jH+E3HLHL LH`AEL|$0AIILHD$8Hu2L ֓HEGqD$ }$3H@A_A^A]A\_^[H tH@A_A^A]A\_^[IH$HH$HHuHD$0HHtjHWHHHt=LHI)t+9{L 0DAbD$ <#HHtHHD$0HmHtHHtHcHtH MtI AH$H@A_A^A]A\_^[HǒAC@PwHH$Hu%L HD@AD$ D#K?IH+H@H$ IH LHHIHuEfIHUAffLHI2 2IcHcHWHHHHH HW HK AffLLHIÃ|H$Ń%mLL$8MIIHt$ AA@ H$HH$HEH H]L L`IN`HHD$ LuHEI@IAL DBD$ eH!H$H$|@USVWATAUAVAWH+Hl$PHHH3HHH$L$ 3LHMPH$HHUHIUHM 3MMH]0@ H!H)H1H9H}H}H}H}8H;t)D$ L WDAUd 3{MuMuHIx aMtHH;unHI;rMuHELH I[MIEHE(Hu9L N DFmD$ D$ L AAIHcHHH BLHHBDHHHBLHBDBLHHBDHHBLHBDHHD;|I!}K<!HI+3Iz3IIEIEIEIELcBHRIIIM z(3HHAHAHALcB(HR IIIM@z@3HHAHAHALcB@HR8ISIM`IoIU`IMrIU`I \oIIIoI I6oII #oI IM-rII@MrIIMrII MqI@InII`nII@MqII`MqII@MqHMHEL}@H]XLePHI!HE3EHMHL}@H]XI;HuHM LeH}(D$ L ?{DB L}LeHE`HtHؼMtI˼MtI込AHH3<HhA_A^A]A\_^[]ùD$ {L zDAH]0L}?AWu?+‹##HU HDADAIffEAIcI;;LuNHk!DAAHM8HE0L+@HB0H1B 0 A??+ʋ#ϋǃ# ȋHLHHHt$ nHHt HKHHt$HHH\$@H0_̸(H+Hu3H(3H(@S H+HHIHt耝LC Hӹ 0HrHH [饵LD$HT$HL$UATAVP"H+E3MHv*L fuPHD@D$ {oHPA^A\]Ht$H)HH8H|$@HLl$8L|$0H>HL3ILHHu)dL uH+DD$ H|$xIH$(IHk s*LIHtRLLIIt=IHDLHu;D$ L tdJDBlH|$xD$ L stL$E3HHHt$(H|$ au*D$ L ~tdJDB H|$xHkHHt$ MMIH=uu+D$ L CtuD$ L ItHoIσHcLcL;v%dL (tD$ JDBTH(tA{LHu#L ,tPdH+D@AD$ H3HI+LJ3I1HcL;t"dL sD$ JDBkH$Ht=LD$pLL$xHIHu L sPdH+D@fD$ 'l$x!Hl$xHL$pIH;HGLHl$xIH$HH L|$0Ll$8MtHIIH|$@Ht$HHPA^A\]HqH\$Hl$Ht$W0VH+HIIIHHtLPHD$`LLHHHD$ ARH\$@Hl$HHt$PH0_̸(H+ rHu Hr3EH.s3H(3H(@USVATAUAWHl$H+HwH3HEHEoL}wE3HD$8HEMLD$(HHHD$0I@H@rI@eHH$L$`HL$@Hc8HT$0HL$@E3Eu3HT$(HL$@MD$ c5fffHT$ HL$@A;5HT$8HL$@M!5E3HL$@H;rlH1H+tHT$0HL$@E3HA2HT$(AHL$@MDt$#D$"AD$!AD$ 4R.HU1t!HULH,HMHAHL$@4L$H$A3HMH3HA_A]A\^[]H\$W0H+HD@GHqHHHu+L qPdH*D@AD$ y3H\$@H0_HHyHu HyHCH{Hu 脳HCHKHtJbHCHuLHHHt$ aHHt HKHHt$HHH\$@H0_̸(H+Hu3H(3H(@S dH+HHIHt`LC Hӹ 0HR HH [酩̸(H+HC H(̸(H+H C H(c̸(H+L C H(.̸(H+LC H(s$HL$SUVWATAUXH+3IMDMHHHH蓪HD$HHMHHuD$ rL oDEBHL$L|$PHHLHHD$@rHLHD$8bHH$RHD$0Hu&D$ |L 1oAAPcJLIHDu#L !oPfH*D@D$ I $9q9qItIL$9qf9q]IMIT$LMIHuD$ L n;IDBA;~AFD,AL$H$A$HuD$ L nBA;~5H$AAHE+AuD$ L vnLt$8Ll$@H$MIMH\$ uD$ L YncI$MMIH\$ uD$ L Jn4HHHu#L NnD@APfH*D$ / LL$HMHHH\$(Lt$ =u&D$ L "nAAPVJHKHLt$0E3H\$ HHM=uau+D$ L muD$ L mLMIIuD$ L m0I$Im3@"fL lD$ JDB#3HiHL|$PL$Ht9HgHXA]A\_^][D$ lL kAgfJHXA]A\_^][H\$Hl$ HL$VWATAUAW`H+H$3MHL$@HL$0HL$8HMDHHuHHHD$HHD$PHHHHHuD$ L qiDFAHhL$LH;HH*HD$8HHD$0HHL$HMHuD$ L 1iD@HB ;~D,ALD$0H$AFHuD$ L hD@B;~5HT$0AHD+duD$ L hD@ULl$8Mt,Mt'HII踼Hu9D$ +L hH$LD$@LIgH\$@LHT$PLILt$ LD$0LIHtdLLHHLt$ }t3}MwM=D$ CL hAjsD$ 9L hA\D$ 5L HhAED$ 1L hA.*D$ $L gDD$ L !gAA*eHLl$83MtI8HD$0L$HtHMtIHtHtHL$@HtշH$D$ L YfACeJ3L\$`I[@IkHIA_A]A\_^LL$ LD$HT$SUWATHBH+3HDHMHH<Lt$8Hu<^LHu2L 'dSgK*DCAD$ jhLt$83HHA\_][LHt$pLl$@L|$0 HLHLH%MHH HLHu&D$ yL cAAHQ=MHHuD$ }L cHH%stLHHH蹼Hϋ诼;LHHͅq3E3LIHLt$(H\$ XHxHE3Lt$ MIH=uu!D$ L HcMLIIPA9] HHI蝾u#L JcD@H*PgD$ kLMHILt$ u#L -cD@H*PgD$ .WAOHHc;H\$@uILHHNLt$HHl$PHt$XH0_H\$Ht$H|$ AV uH+HY0LPIcHmxH;;v;Mt[~WHSHl$0HcLIZH)+F t!HkHl$0H\$8Ht$@H|$HH A^HKLH)<H;uϋ^(t Hx̸(ƘH+E3HD8tAs HA8uAH(H\$Ht$H|$ AV eH+Hy0LPAH]C;Lȅ A3HW3HcɋH~@À< tHH;|H~0Hx HcH;vHl$0Mt;~7HWHcILH)/F tHo-HOLH)H?u^(t H2Hl$0~HcB0H\$8Ht$@H|$HH A^H\$Hl$Ht$H|$ AV @H+Hy0MAHXH XHc; l; HLOMF tHOHH+HIHGcLG3IHL3H9BDF(<Mt5HGI,HFnLv0MtI9^ DF3Hl$8Ht$@H|$HH\$0H A^Ð: ; ; =; B; H; N; L; "; 3; ; L;    @S 蔕H+HHuH [HC0CCC(H [@S DH+HHu3H [Ãyt-yt'HI0HtC tHAFHC0H [@W0H+HHu&L RPNHD@CD$ f;3H0_H\$@y#38t@=s H9uHcH Q(HHu H\$@H0_H@0HHXH\$@HxI A(HH0_HQA3Ht8tD=s H:u3ʃ wHcH> H3f > > > > > > > > > > > > 3ABQ(HQ03HHiQH\$Ht$W H+H3IcHN(LHaH΋Sw+t HcHt$8H\$0H _H\$Ht$W 蛒H+IcHHHt^3*O(LHKaHϋtCwt HH\$0Ht$8H _H\$0Ht$83H _̸(H+E3HD8tAs HA8uAH(@VW(賑H+H\$@Lt$PLrIc3L|$ LHHLI;stHl$HfHtc3AO(AH8`Iϋa~; t0HI;r&EwYt IHl$HL|$ Lt$P@;H\$@@8>ts Hǀ>uH(_^H\$Ht$H|$AV 赐H+MAHXH ѾHcA A H3O(E3R_RO(D3@_@H,AwG(_*tMtG(A_(_ DG3Ht$8H|$@H\$0H A^FA ZA A A A A lA A HA A     3A(A AHA0@S H+HHu3H [Ãytyt I(]CC H [̃w$HHc,C $C H3fC C ̸(H+Av3H(.H(H\$Ht$W 軍H+H ?LXHHuH\$0Ht$8H _DDǺhHHt$8HH\$0H _HK@S DH+yIcHt@Ht;LI0A HHAt[EH [EH [3H [@S0ԌH+yHHHLI0A H|$@HMct [HZuC t HK0)[ HK0 tS L KJDD$ 輿L KJDBD$ 蜿H|$@H0[ËH|$@H0[3H0[@S H+3LH8tDs HÀ8uyt;LI0A HcIAt ZEH [lEH [3H [H\$W `H+3AHLA0A HϋtYHuH\$0H _ۛHt8ts HÀ?uH\$0H _H\$Ht$H|$ AV0ՊH+HHI0MAXсLHcATJ A(J IE3G t  YgKZG t XD7G t X! H^Lw0#É_G™L;rHL;s HG t#HO0t@bE@XIr@t@xH#ÉG@t#AHL$H@t H5IHH0I?ƃt@tHI@t HIAHIAHL$HHL$HH@u3yHIuLH3@fAHRDu.yHIuLH3ffAHRDuHT$HIHӗL HӹDD$ HjHL HHD$(HD$HHvHMƹHD$ $tD$ JDBL QH蔻3Ht$PH|$XH\$@H0A^úHHG0_ҺtD$ L GJDBMtI 뫋_릉wG tTVLf,G TG wG J J J I G I 6H I     3A AA(HA0@S 贆H+HHu3H [ÃytՑȃ~w r&t! tt&t3H(øH(H\$Ht$W k~H+HHQ0A:Ht ~H3MHcK(E3DHJHˋ3(t HH\$0Ht$8H _H\$Hl$Ht$W }H+HHQ03ۃ:AHt ؅~MHtF3HcO(E3DHHϋt H H\$0Hl$8Ht$@H _̸(F}H+E3HD8tAs HA8uAH(H\$UVW`|H+HD(H3HD$PHY0IHzHcHW \W HH3} r;tmHH^3MIEɃ}t>Ht-Eu HCHH3HL$PH3|H$H`_^]Mt܉}EuHKHtC`HHCD;uHKHt"`HjHCAu[AIAQAAE D$0L$(T$ HL$@L >HKHt_HL$@HCC6A,E L=HL$@ HKHt_HL$@HCfC DC}tMtE(A}(}DELKMtdDHLKMtE3HAPdDCE3HAQfLC8HVHC8IJU V V U U V MW U 1U V V EU U   H\$W yH+3HA(YY H;H A(6`Hu&HXHXHX8X3fXXHH$HH,HHG0ËH\$0H _@S $yH+HHu3H [ÃyH|$0Hy0tbHcA(t$?uHȺHcK(C(Ht$HOHt"]HOHt]H ]3HC0C CH|$0H [Ãt3HI0LA8H\$W `xH+HH 9HHt,E3LHAPdttHH\$0H _H*3H\$0H _H8@S wH+HHcI(t%HC08u ъHcK(ߊC(H [H\$Hl$VWATAVAW0wH+HB8E3HHHLEȃL%D~fHA\_ IH_H;t<:t {HCt8/t H8uHOHt0[HKwHGH-D?HOHW0 HOHHW Z13HG$HG,O fD$6fG&GO G G ADBG(HE(9tM(4HcM(LL$hAD$hD$ D$hL 47ADD$ HGLGL %7H"7HD$ ?sL 7JDBD$ 诨H-HcM(HW$AE$y?x HD}$@M(i2D$hMtDHA֋ ȃ@sL 5D$ JDBLGH5AHsL W5D$ JDB賧(L i5ADD$ 艧HGLGL Z5HW5HD$ ԖsL H5JDBD$ D.sL ;5D$ JDBHGLGL 4H)5HD$ joL P5AADD$ ҦHGLGL 5H<5HD$ sL )5JDBD$ 荦zHDD$hL 5AAD$ _HGLGL 5H5HD$ 誕sL 4JDBD$ 3Mt DHAH\$`Hl$pH0A_A^A\_^fZ [ 0[ Y[ \ *_ \ [ @W 4rH+HHt@LD$XMIIʉD$ DD$TDL$PL$3L7HAuMu+I$HH9D$XH$t I$HHD$XT$ LD$XMII.rHL$XH$HH H$H`A_A^A]A\_^]@ tG@#t8@+t)@-t@0t AAAAAA@6stD$PD @EIF HA@*u-D H7DD$TL$HDL$PLʐ3CDD$TDL$PL$3L#@.u AA@rtCD$TDL$PL$LZHHD@wE@F@DD$TA@*cD7HDD$THQ@Ltk@htQ@lt@qud7HDuc?luwHǽHDuF7HDu27HDu7HǽA@֍BۃSHA s Ar IHtttHcC HCHCD|$@DD$8 DL$0L$(LD$XMIIHD$ L$LA A@HtttK HKK@ou@u DD|$@DD$8DL$0D$(HL$ LD$XIMI!EL$Lj D|$8DD$0DL$(HLD$XD$ MII"HHD$ LD$XMIIHHEyAMuE$DD$8DL$0LD$XMIID|$(HD$ S HcHAD|$@DD$8DL$0D$(qH Hu D$Xf(uD$XuHD$XH T$ ?H73HADDʉT$PDDD$T3m n n ]o yo o xp r q q q p q ir q Br q r r        H\$Ht$H|$AV %^H+IIHLHt|II9utH=v3HIH Hu8HB"ADHHtLMt IH^IL""AEHtHHH;sID$PHtH HH\$0Ht$8H|$@H A^@SUVWATAUAVAWx9]H+HH3HD$hD$$IE3EWDHHH$MHf/EAv W EP-tA+ EDE % D;DT$0DOD$AD,(EtYu- ,fn\f/rAEtYufAn\Y,fn\f/r;|A+L=OgfffIAAЍD+IcDB8BD7tI|ADDMcI3B\,8McDffgfffIЍ+HcB8BDOM;|˃DLc\$4I$3EҋBDLLHL$p!D$ |$pHD$pt@As HAƀ8uLD$PAHL$pA؋H0H3QHPA^A]A\_^[]"S̸8PH+DL$ ELHH yH8Ht$WATAUAVAW xPH+Lc|$p3MEDHAAGH\$PHl$XHc{HtuL HEHKF#HH7FAuHHHH;|tuL HEHGD'HHHl$XH\$PHt$`H A_A^A]A\_̸(vOH+MD@H(H%@SUWROH+HH3H$3H3H\$@HT$HLD$@HcD$@HD$HHD$PHD$XD$`aH9\$@u H|$@vLH T2u] tEyaL JDD$ [eL JDBD$ \-H$H8HH HHHf|$HL$LH$`L$J`H?eHA4HBL yPeH D@AD$ BjH{HcT$@HL$hD$0 HD$( HL$ L$HL$HAЅ>H$8$t=s H8uHL$h8\$htDs HÀ9uHHtLJA"5HIA3Hu L HPeH D@AD$ I|HL$hL$L3HL$ HHHSHHDDֺDDT$8D\$0DL$(DDD$ LDH$H$H3)MHİ_][H\$ UWATAVAWHl$ɸLH+HZH3HE'E3HHMAEDe tHrHHEHtH$IL$H8t,:uH/t HD8 uD HtD#HHIL9%CAH H$HtH xHHHHUHM3HEHEHEEfDm]AfEH#LHL+@B +uHuHUH EM E E \]EH=<>3HEEHEHEHEHEHEHt4P:HYHtD8fEID>*u D8fuDmILMLEHHH]H{wDkAHS HMMcJHDeMDBo\LWu+LMDGIcκED$ A\AEMcHUEI\%9\D\=@'QEMMMMEHt,L*HL+B +uHuu2Efu3HEEHEf?[E MDBl[HcHUEHp[Hϋ[I̍{[MSDC[DcD;D}.[L * JDD$ {LEL $ H! jiL  JDB D$ S{_L EǍJD$ 2{LEL  H jiD$ JDB L zD}HM+L$H$EuAt IcmZAAHM'H3"HH$HA_A^A\_]IcκYuaZL } JDD$ bzLEL C Hp iiD$ JDBL S +A)H\$Hl$Ht$W0vFH+HHٍhy#L UiMDEkD$ {y7;~AL AQJ!HXHHu L PjH D@fD$ \yafxt"jL D$ JDB3y8H@3HHBHAFHBHAFHBHAFL AJ tH Lù7h3H\$@Hl$HHt$PH0_H\$W0EH+HHHu+L C P;HD@AD$ dx3H\$PH0_Hl$@TtMT L JDD$  upL JDB D$ tH8øH8@S0DAH+HcS؅y',TL 8 JDD$ 3tH0[@S0@H+T$@LD$@Hcɺ~fS؅y%SL JDD$ 3/t3H0[H\$W @H+HH3HD$3HLDH|$H<$L$DAM[BЃ w6AA@BA=v3HL$H3AH\$0H _Ã.uEtAtAI뛃ʅuAuEt $B L$KL$KL$ KH\$Hl$Ht$H|$ ATAVAW0?H+LPEH蘓H8H_0eE3fDtL9w8<L9w8tʺH=Dw$KHSobNHHH芗HH{H%HH,vD9s tHK(Ht($HHHH轛HHHH覛HGHKHS$0HcD9st2sw(L9w8HO8EIHϋH\$PHl$XHt$`H|$hH0A_A^A\údL D$ JDB:qHtuH轔AD몺 H6AG$AHPD$ L NAjD$ L AodJpAA?H\$Hl$Ht$H|$ ATAVAW0 =H+LPEHH8H_0eE3fDtL9w8<L9w8tʺH譐Dw$KHS-ob込HHHHH_yH"HHsD9s t*HK(Ht(蔑HHHH-HHHHHGHKHS$HcD9stsw(L9w8HO8EI%Hϋ苏H\$PHl$XHt$`H|$hH0A_A^A\údL 6D$ JDBnHtuH-AD몺 H覛AG$AHND$ L AjD$ L AodJ4nAA?̸(:H+E3HD8tAs HA8uAH(H\$Ht$H|$AV 5:H+Hy0MHXH PhHc Ș HH3Y^ HHMEu"^HOHtIXHGD;u_Au|HO(Ht莐Lw(hDG b^AF(GDF^G~tMtGA_1,~tMtHGI^DF DG$_$3Ht$8H|$@H\$0H A^Ǘ ߗ H N i    @S $8H+HAA(A D@rHHHt=3HHHHHHHHH HH(@H$HC0CAH [H [@S 7H+HHu3H [ÃyH|$0Hy0tHHt2HOHtHOHtHO(HtNH3HC0C CH|$0H [H\$W 7H+HH C螒HHt,E3LHAPvtHH\$0H _Hʍ3H\$0H _HH\$W 6H+HY0HHcCt&HȺoIHcK}ICG(H\$0H _H\$W0 6H+HHHt$HfDAfAtAu"Hy8Hy8t3Ht$HH\$PH0_úHl$@ljG$KHSDu*PH2G$Hl$@Ht$HH\$PH0_Åx賵HHHHHTrH|HHl{ t0u L PdH D@iD$ }h9HK(Ht mHHt#HH HtHHHHuHtHŋ3&HJHu1QdL SD$ JDB gHt$HH\$PH0_ËR$;LwLwL9s(ubK H<A1 HC(HuޱH+HBzՔHLIAi+ȸgfffHK(HL$0H ЋD$0;} +ʁ@BL$4+A;}3HA+S0u9S4t ;uW9K4|RDiMbAHcO(D$ ALL$0ºD$0=*y H 2L(HL$XH3/H\$xH`_@S $H+HHu3H [Ãyt'ytHcI(*HcK(*3CC H [̸8H+LA0Ax(Ax,~THcI(MbLL$@Ah4D$ Ai@0AЉT$@N)y H S]'H8H\$HT$W0;H+AHHt-LIMu2D3E~HIfDH9ttHA;|H\$@H0_ÃyuHcHIA&HT$HCHtHCDHSHL$HA|$(HD$ \HtH+CHH\$@H0_H\$UAVAW lH+ILLD@\H HHtMIFHHCAFACAA9AOK HCHuHY3H\$PH A_A^]H|$H39S~HCHIH|;S|Ht$@9;~*HIFH HtAHKHHt&H;;|HHt$@H|$HH\$PH A_A^]ÍGHcxHCH HtHyHKHtH3LHtCx? ;}9IALcJ;t$LcM;}DIIJIHJH M;|A 3E3Lɋ A…~MYMI9t I;|3Åx>;}:HcM;t*LcI;}"fffIAH HHAHI;|A IH\$W `H+HHIHHt:WHHLAeMHHu#HKHtwHo3H\$0H _HCLcHWIGCGCHGHCHH\$0H _̸(H+D@H(V̸(H+D@H(6Ht,S pH+HHIHtHH [H\$Ht$W +H+IcHHHu3H\$0Ht$8H _ËQ;*HIL AHtHCCCHc;}GxCLCHMPH;|)H+M+I HfffIHIHAHuHCH4 HHCH4Ht$8CH\$0H _̸HtAH\$W 0H+HH AHHt(HA HCHuHF3H\$0H _3HHCHHHCHHHCHHH{C KHH\$0H _̸(H+3H(8HuËHHt#~D@ExD;}HBIcHD3HtnHl$W H+H\$03HH9~%Ht$8HGH HtH;|Ht$8HOH\$0Ht/H'Hl$@H _̸(H+DH(WHtx;}HAHcLI3HAHQH;tALHu3Ë ~I@Lt+3LcɅ~"fffI@H HHAHI;|AIHt=S H+yHu!LIMtHcHID@CH [̸(H+E3H(WHtx;} HAHcH3Ht5S `H+HcHم~HIL3IoH [H\$W H+HًI C$HHH [ø(&H+.HtHH(HtH(H3H(̸(H+ Hu H3EH3H(3H(̃LD$HT$L$8H+)t$ Wt`up yEIEA+A+tt;ct; _t5!p D BD?= ;H9t5o H  HL$@(ֺHL$HWHL$PW(t$ H8H\$Ht$H|$Ld$ AUAVAWpH+)$`)$PHҚH3H$@3H|$PD|$0H rHH HD$8H HDDDHt&HHyLHHfLMMt|HD$@HD$ E3E3H~3Aׅun HL$@HL$@AHD$@HD$ E3E3Hg3Aׅun PDHL$@HL$@AHt HHt;HGHLHLHLHIHLLLMMMD$ AE33HL$PA׻@t=L$HL$PAօtWҋH$ADl$03HL$PAԉ|$ AL3HL$PAׅtOL$HL$PAօt/WH*HyXm H$PADl$03HL$PAHt H8H HHHHWLHHDHHH1LMtAHD$`WҺHL$`Ht5DŽ$ H$ օtql $ H$ uMt#A։D$Htk HL$HMHLt$8M |$@H IHHIoH$HIWLH$H I<LH$HI!HHILH$HHL$8HD$pHHL$8H$HHL$8H$HHL$8HD$xHHL$8HD$`HHL$8xH$HMMHMH9|$pL$MH9$H9|$xyH9|$`nHe3ҍJLH$HI3H$H$H$H$HDŽ$ Et =D$@IcH$H$IӅfA*D|$X5j @i $H$3H$H$H$H$H$H$H$HDŽ$8L$$H$$tOP\$hf(֋$H$YH$AԅtHt7+=s ˉ\$h6D|$XAD|$XDl$0|$@L$L$H$5h H$I$tEt+=s EL$DŽ$8EtH$IT$p5h tCfD(֋$H$iH$IAׅtHtD+=rDŽ$ Et%H$ I$tW= h Ll$x(׋$ H$ H$ IAՅtHt+=rDl$0DŽ$8EtH$IT$`tDH$(֋$H$tH$IӅtHtP+=rH$IHtmHL$8H$@'f 8H$@D$Hf HL$HH$@H3L$pI[ Is(I{0Mc8A(sA({IA_A^A]̸(vH+H(̸VH+HH3H$\H$H$H$H$L$3L$L$<HȺHK H͋;AH͋8LD$@ HL*DD$PT$HL$DD$REDD|$LE3T$hL$dfDD$lH:AAD$`(fD$nLd$pLd$xL$HHA܅~y@fffHD$`Dd$0AHD$(DIHH|$ WҽL$E3IHLd$(HD$ JWH$;|HIH3L$L$L$H$H$H$H$H$H3BH̸(6H+=t2HL$8uqWHL$8=VuWHL$0D$0H(H\$W H+L\PHAh31HڙHuHtGHJH [AjHH H HHtHغL.ApJ HH\$0H _̸(H+LPٍHAw苾H 4HtzHLA|J H(QH\$W H+HH֘3HHu H\$0H _úLAJHHLJAHսHH\$0H _H\$W H+H%HFHHu H\$0H _úLPAJjHHLCJ AHBHH\$0H _H\$W H+HH3HHu H\$0H _úLAJݼHHLJ AH赼HH\$0H _H\$W H+LPHA3qH"HuHtMHҷH AHH *HIHږHt זHغLAJ HH\$0H _HtIS0@H+H9Ht-L }D@H rD$ RHH0[@S H+HH3P(HD$8HuH [úL)AJCHL$8HLJAHHHL$8R0HH [@S dH+HiHP(HD$8HuH [úLƶAJ谺HL$8H#LJ AH膺H'HL$8R0HH [@S H+HH3P(HD$8HL[AJHL$8H=Hu,H Ht uH HLAJ 趹HWHL$8P0HtHjH [@S H+LPHA*i 7Lӵ !J A,?H [HU H+H\$0Ht$8H|$@Lt$HHHE3HpHHt tL7D3HHHuHLt$HH|$@Ht$8H\$0H ]̉L$HT$LD$LL$ (H+HT$8H(H\$ VATAW H+HDHܵH1ADDx0jHHHl$@H|$H33Lt$PE~wLsI^MvHt_3H8t=s H9uA;~)D}LzAQAWHPHHMcHHI-A;|H؋DHcHHtt5HDŽHDŽH|$HHl$@Lt$PH\$XH A_A\^HH\$Hl$Ht$H|$ AV `H+E3HHHDD@HHt tL7D3LǃHHHuH\$0Ht$@H|$HLHl$8H A^@S H+HHAHEHHH [M8SVATPyH+HυH3H$ H$H$HL$@D%A L$8IHAD|$@L$0D$DH=HL$Hl$HP3DHtLpAHL$H ʼnD$HHPHHtHhARLMuDL$@L^AV@H$rHuLQU@HL$`ErL$@MuDL$DL8AW@H$rMH$HL$`IEHH$HEHT$0MHL$(IELEHHHD$ YrL$0H8t=s H@89uHCH;uFHv@LsLI:HJHtH;vI>:HHHpHuH$HH$L$8H$ H3JHPA\^[̸(6H+>H_H(H`@S0H+  HL$ % ÉD$ H PHuH0[H@H0[̸(H+Hύ3H(H`(@S tH+,H؋;u3H [Hl$0Ht$8%}ȃHclPDPHHtthHDŽDŽHt$8Hl$0H [H\$Lt$ AW H+LLlH؋;u3H\$@Lt$HH A_Hl$0Ht$8%}ȃHclPDPMt2Mt-HPHuHIA IAHHttfHDŽLt$HDŽHt$8H\$@Hl$0H A_H\$UWATAVAW H+MMHLeH؋;u3H\$`H A_A^A\_]Ht$PLl$X%}ȃHc3DlP|PMt0Ht+HPHuH~I$}I$EMu-HHtt ZH3HHuHIMtA>IMt AHt$PH\$`ALl$XH A_A^A\_]̸(H+ HH(̸(fH+n HH(H`PH\$W`0H+HH3H$P& HL$ HT$ HL$0H.HL$0P8HHHA苺HHtpHT$ H趧E3HLHAPffLDH@HIHuHHP@HHHR8H;tHHHtHHH$PH3H$pH`_̸(H+ H/3H(H @S0H+ HHL$ \$ PHuH0[H@H0[@S H+ =ūHt"@HHPH;u=Hܰt ffHaHPH;u=H|t&ffH1 HPH;u =8H1t+@fffH HPH;uH [H\$W H+Hڋ;t#t @ HHPH;uH\$0H _ø(6H+Hȋ;u3H(%}ȃHDPH(H\$W H+HHLA;u 3H\$0H _%}ȃHcATPHtD$@HHED$PLH$pHD$8D$DDΉD$0HD$HHD$(HD$pHD$ ]3H$p8$pt=s H9uH$pLӅ~!LL$@LD$PHT$DHL$H_GH$H$pH3HĀ_^[̸(H+HH 9H((H+IDHHH($H\$WH+IH?HL$ HU#E3HL$ APjLHFHL$ L\H$HĐ_Hl$Ht$W +H+H=IHuuHl$8Ht$@H _HAH\$0衩HHH .Hh%HӉC;Hs辸HHtTH Ht&#;~H LGHOPH̦H\$0Hl$8Ht$@H _HxhtH蝦3@S $H+H xHttHH|$0y,nA,肶y@H GrH CH蟱H|$0HHH [Hx,H|$0H [̸HH+L$ H ؒHT$(LD$0HwLD$ ]HHHl$Ht$WP;H+L$ H IHPH^A;ɧHD$(HH TH]H\$`HD$8HD$ LD$0H3ۉ|$0HD$@\$$辵HcT$$HL$(L DC9\$$~'fffHL$(HH H;\$$|HL$(̤H\$`Hl$hHt$pHP_H\$Ht$W@;H+3ۋHHtqH Hut\H pHT$ Ht$(D$ 7Ht7xt=Hu8à H@H /HT$ HD$(Hu3H\$PHt$XH@_H@H\$PHt$XH@_̸(膿H+H=ېt H(ùHH 7rH3H9H(@UVAW@!H+LH |IHHu5H豱lHX蛱H LHu 3H@A_^]ËH\$`H|$hLd$pLl$8Lt$0D5;L-E33AWH^AH-HHHTL+HCLcH H|Ұ;=|H yAyMtL8HtHhHtHpALl$8Ld$pH|$hH\$`Lt$0H@A_^]újL ƢD$ ZJDB*3̸H薽H+HH Hu3HHH\$PHD$(T$ HT$ HHtSH Ht0H|$@8Ѭ;~H 蟮LCHKPH|$@HuH\$PHHH\$PHH̸(H+L9u HRH(I`H(LHH@IPH+: u Hu3̋9uLcBHBJ BHt*(aH+ȍx;u HIH(ø(6H+H(zH\$W H+HH kHt0;臫;~%H TUHKȋ3H\$0H _HKŴȋH\$03H _H\$W 蠻H+HH+u|H Ht$0Ht43 ;~)H ֌׬HWHKHt$0H\$8H _H`HCHWH+А: uHu3Ht$0H\$8H _Ht$0H\$8H _H\$W`H+HFfH3HD$PWW3H9GHD$0L$@u-HH ˱HHu3PHHt$x4HHH.A!HD$HH9^t+H9_t%H0AHD$0HH9t!HW1AǠHD$8HthH9^t!Hp2A蠠HD$@HtAH|$0HHtH 9HrƯHtH H~΃f FOiL )4D$ /JDBH\$0H Ht辝HHuHtH訝3Ht$xHL$PH3$H$H`_̸8H+HD$`D$(HD$ H8H\$VWATAUAV ٸH+33EALLEu3H\$`H A^A]A\_^Hl$P3L|$XL|$pE~D.I̙+AHcIHAׅy~k;|҅t D$xu=39D$xt2~${AAHcIIAׅuAHcIL|$XHl$PH\$`HH A^A]A\_^̸(H+=\tPH(H <HtPHA,D$ HGHHAH8ts HD89uMt:A~ A.IAE>IcHILA;~LE HcLD+|$ H|$ wtLHL$0DϺ\FAHD$08\$0ts HD88uMt.E~)IcHT$0IL;A;~LE HcLD+\$ D$$HtHHD$ 3@W`dH+HHL$0H }Ht3HD$0HT$ D$ HD$(qHt H@@H`_H|$0H\$pHl$xH$H5p E3AH-, C +D؍ HcH݋ HHLL+B:u Hu3yE~ EKE;|Hl$xu"HtH\$pH DH$H`_H\$pH$3H`_H\$W @H+3&HHHϋ8H\$0H _@S@H+Hمu"u H9t .H@[AL33H|$08 3H|$0H@[A3Hl$PHt$8HAȋAHHtWHL$`AD3HD$`D$ GHL$`ALË$8HT$hD3Ht$hP>HH腎HHt$8Hl$PH|$0H@[̸(H+H(*̸(֩H+H(̸(趩H+DA+HIHREAtEAtAu4A+BH(HAHt/HRHt6H+D: uNHu3H(HHuH(HHu H(H+D: uHu3H(H(LcAA+BuHRHIH(H(@S ĨH+HHIt5t$tt3H [DAnHI葡D`H 脡DSALQDA~AE3DAɸ*MRAAЍR+ABD3IűA?A H [̋yuM‰ryHA@HAH HA@@S 货H+HAHHu HI4HH [̸(vH+LcAA+BuHRHIH(fH(@SUV0BH+3HHu 3H0^][A u HH0^][Lt$X~4LHu-L %PeHD@ D$ PhLt$X3H0^][ËNH%ASH|$PL|$`zLHHVHt LcFHM~FAFFIAFI^HFHtM8ts H8uH%A_NjHHtvHVLcHVInHHtL8ts HÀ9uHY%AhHc诌HHt HLHIF AF IQeL 3%D$ sJDB'HtHHtHMtII؉3H|$PL|$`Lt$XH0^][̸(FH+ $(Hu H$3H%3H(H(Hl$Ht$W H+H=Au*H P苓HHu3Hl$8Ht$@H _H=uH WHHtHd%A H\$0/HHt#(pxH XH蠔u H褈30H 1H联tH &!H H\$0Hl$8Ht$@H _H\$ WPH+H6OH3HD$@L$0H ~IHHt$HT$0xH ~ HHu/A H'H EAHL$0HD$ MHHtHtAHtAHL$@H3/H\$xHP_@SP$H+HzNH3HD$HHH ~HD$8T$}HHHP HtH QH HQ0HtHҺHUHHKHcP`UH\$0Ht$8H _̸(H+3E3HHAHAHAHA HA(H(H\$Ht$W0˘H+HPIH跭HKHtHHtH9HWHtdHt>Heu<L HDBD$ 3H\$@Ht$HH0_ËfHHHHHu:L HDBD$ xHd3H\$@Ht$HH0_HsHH;Htx`tHK|HCCH;`HGHmAHC(O`;~HCHu}L cHD@AD$ 3H\$@Ht$HH0_HCYH;HML ODB D$ 3H\$@Ht$HH0_HK Ht.AAH\$(D$ k oCtH\$@Ht$HH0_HHH\$@Ht$HH0_H`̸(vH+H(Ha(@S TH+HHHt]Hx0tUu HHP0HHt7x`t1H{t*H&uHHKHcP`HKIzHK HtHKHta3HHCHCHCHC HC(H [̸(薕H+3HHAHAHAHA HA(H(H\$W0`H+HHHrH:hHJHt4vbu+L PnHD@&D$ 43H\$HH0_HHt$@H9uHsH3H}OKG C Ht'HH`tHtQHsHHWHKLc@`HG(HC(HO HtsSHC HueHHt$@3H\$HH0_HAE{HCHuL PnHD@AD$ GHt$@3H\$HH0_HL@(MtHHHt$@H\$HH0_IHt$@H\$HH0_únL D$ .JDBH0A_A^A]_^ÉH0A_A^A]_^Ld$pD$E 3ELd$pA8@NjH0A_A^A]_^AltD$Ld$pH0A_A^A]_^Hl$hh vL| H kk3H\$`A9~xtILI贈L_MLIIDd$ Lt;v'A9~u!).AFxHcIILfA~xt.H\$`Hl$hLd$pH0A_A^A]_^̸(H+H( Hl$Ht$ AV0چH+HMH@Ht9E3E3P y3Hl$PHt$XH0A^AHl$PHt$XH0A^H\$@X vL H $jt4FlFt6t$L D$ JDB 诹3IA;+;sH|$HH~8HcHH|$HHLF8LHHP tAH\$@Hl$PHt$XH0A^H\$Hl$Ht$W0覅H+IIHHHt D@p3赆LE3HHD$(Ht$ H\$@Hl$HHt$PH0_̸8FH+HD$`D$(HD$ H8@VWAVAW(H+HMI@LHt.LcL$pMP y 3H(A_A^_^ÉH(A_A^_^H\$PHc\$p3H\$PAH(A_A^_^Hl$XHciu%Y|u LMP t E3Ll$ LchA ~LH \hLd$`tVEHO8ID+HD;~LG_3uMc6HLG8MIHP t7IcA+D.LM3Am#+݅~HLcMIHP u3 tHcHO8LcĪoLd$`Ll$ Hl$XH\$PH(A_A^_^H\$UVWATAUAVAWHl$QH+H.H3HEyLuwL}q 3MLL$0LD$@LHL$8D$$؉D$ @~LE H ^ f~L` H y fMuHL$HHL$HE3IkDeoDÉ\$(tDD$ HUHL$H;LcEgHT$0HL$H HD$@HtHL$HAHLD$ HUHL$HfD;vY@HL$HE3I DD$ HUHL$HeLD$ HUHL$H A;rDD$ 3tA;tMt TIAVut!A;tA;tMt TIAWuutHL$HE3Iwt\$(HD$8@D$$HL$HHM@FD$$HMH3H$HA_A^A]A\_^]̀=yRu3HmR̸8ƀH+DL$ MD3H8@SUVWAVP菀H+H+H3H$@IADHMuD8 QHQHDHHHuvLMHHE3t$(Dt$ $t!Hl$0LL$@E3HHωt$(Dt$ HHϋHL$@H$@H3謀HPA^_^][̸(H+Hu QH(HH QAOEQH(̸(VH+.3H(æ̸(6H+HH ]E3H(陛H\$V0H+H5eHHZHHu-L HDBD$ RB3H\$HH0^HH|$@36nHpL UHHHL+DB D+uHuEuPHT$PH|$P~{L .DBD$ e許H|$@3H\$HH0^úL DBD$ jtHGLGL H HD$ 迠HUm;H|$@H\$HH0^úL tDBD$ ZH|$@H\$H3H0^̸(f}H+HApLHǀHQpI H(@S $}H+Iكt H [úHc3H [HH [H\$Hl$VWAV |H+HIIHchLHL;rBL|$@LH+L+I@DOLGpIH HIH;vL|$@H\$HHl$PH A^_^H\$ UWAV0=|H+MIHHI@rvHt$PLd$XIHL|$`La(LyXHiL@fLMpA@HHL|$(Ld$ a0H@H@HuL|$`Ld$XHt$PMt$LMpHEXHM(HD$(HL$ EHH0H\$hH0A^_]H\$VWAV0]{H+MLIpIMHHMtHA(MHHD$ AI@r]Hl$PIL|$XHLy(HiLCLKpA@D$(HHL|$ LH@H@HuL|$XHl$PMt"CLKpHK(D$(HL$ EHHLH\$`H0A^_^H\$ VWAV@mzH+MIHHI@rpHl$`Ld$hIHL|$pLa(LyXHiLCLKpA@D$0HHL|$(Ld$ H@H@HuL|$pLd$hHl$`Mt+CLKpHKXD$0HL$(HS(HT$ EHHUH\$xH@A^_^LL$ SVAUAVAWPyH+IML;LLIBM#H$H$L$H;L$3MIu(@f@ŹA$HHT$A*ȸHHL$@EB"7$D$@AED$0IEpHt$(HD$ D$A$@HҀB"? B?I;uH$H+LLH;H$HBHH$H$L$HPA_A^A]^[øHPA_A^A]^[H\$UVAV@xH+MIHHI@rnH|$`IL|$hHLy(HiLfDCA@AD$0HCpHHL|$(HD$ H@H@HuL|$hH|$`Mt-CHK(EΉD$0HCpHL$(AHHHD$ UH\$pH@A^^]H H9 H Hy H H9 H\$W vH+HH貆HOpLË蔋H\$0H _H\$VWAV0vH+MIHHI@rcHl$PIL|$XHLy(HiLfDCLKpA@D$(HHL|$ 菍H@H@HuL|$XHl$PMt"CLKpHK(D$(HL$ EHHKH\$`H0A^_^H\$Hl$Ht$H|$ AV@uH+@IIL;LHIBMtEH;r@FLNpHNXD$0HL$(HV(HT$ DHI萚H+HLH;HBHuH\$PHl$XHt$`H|$hH@A^H\$Hl$VWAV uH+HIIHchLHL;rBL|$@LH+L+I@DOLGpIHH%t,HT$ H肆HSpHL$ $HL$ % HSpHWH$H3sH$0H_H\$Hl$VWAV rH+HIIHcpLHL;r>L|$@LH+L+I@LEpIH调HIH;vL|$@H\$HHl$PH A^_^H\$VWAV0-rH+MIHHI@rcHl$PIL|$XHLy(HiLfDCLKpA@D$(HHL|$ qH@H@HuL|$XHl$PMt"CLKpHK(D$(HL$ EHHKqH\$`H0A^_^H\$ UWAV0]qH+MIHHI@rvHt$PLd$XIHL|$`La(LyXHiL@fLMpA@HHL|$(Ld$ AH@H@HuL|$`Ld$XHt$PMt$LMpHEXHM(HD$(HL$ EHHH\$hH0A^_]H\$Hl$Ht$H|$ AV@ppH+@IIL;LHIBMtEH;r@FLNpHNXD$0HL$(HV(HT$ DHIP}H+HLH;HBHuH\$PHl$XHt$`H|$hH@A^H Hi H H H\$W oH+HypHHHHLJHHKH\$0OG O0 G@0OP@G`POp`pH _H\$W nH+HYpHHHHǃ0HHO HHOH\$0H _H\$W nH+IHtH\$0H _ËQhHz 3H\$0H _H`h| HKQh| HKBH\$0H _H\$Hl$VWAV0mH+HIIHchLHL;rLL|$PLH+L+ILGpGIID$(MHL$ HRHIH;vL|$PH\$XHl$`H0A^_^Hl$ VWAV@]mH+IIHLI@H\$`Ld$hIHL|$pLa(LyXHiHfMNpL|$8Ld$0IIA@HD$(HL$ HHH@H@HuL|$pLd$hH\$`Ht~=;~5HHF(H;t')HpAs+HHtGw~uHN8LIEGn~dWHV8LI`Eu%LcHI;EǃGY +ǃHLILt$0D~t7H+HP3Lt$0H\$8Hl$@Ht$HH _ǃՃ{LcHH~ ;~LcHcHI+HKDHcHHHHJHAHIu H Huǃ/~HcLIH+HCLcHHǃ sAF8AAF@AA FDNCFD ȃ~uNDFCkHIypHtH; HHF(H9uIA(H)H/A|(HHLcHHB 4 4 4 4 4 4 4 ˌ 4 4 4 4 4 4 V ) ; 4 4 T 4 *H H HE H  Hh HEH O H HEH o Hȹ HEH Ϻ H( HEH o HȻ HEjH H HEJH H HE*H  Hh HEHY H  Hر HEH  Hػ HEH  Hس HEH ? H HEzH _ H HEZH H HE:H _ H HEH  Hػ HEH HX HEH HX HEHi H H HEH  Hh HEjH O H HEJH o H HE*H H( HE H o H HEH H HEH H HEH  Hh HEH zH H HEH\$VWATAVAW09=H+HypAIMHLI;ZHPyED$ LEHl$`Ll$hLcHIW8HHIHHA9GH3H rbHH;uVH H9huFE3E3HLH@LHD$(HIHl$ 7(H8HHL2LL+HIHD$ \LLIHyHD@H!DcH3Hr}H@H;uqH 4H9huaE3E3H tHl$`Ll$hH\$pH0A_A^A\_^LH@LHD$(HIHl$ #H8HHL2LL+HIHD$ YLLIHu7D@IW8HBIIO8A?t HHDLJLJA)H\$pH0A_A^A\_^̸8:H+HL$(HT$ LD$ H]HxH8ø8f:H+HL$(HT$ LD$ H-HxH8ø86:H+HL$(HT$ LD$ HHxH8ø8:H+HL$(HT$ LD$ HHxH8@S 9H+HHu3H [S ŇLúHevt؋ 芑 #LúHH [>vH\$W `9H+HES ^LúHHuu 3H\$0H _Ë  謅LúHutыKt=9 t9LǺHutK̐KdLǺHuH\$0H _̸(8H+HkvavYvTa= u |H(̸(V8H+PH(w̸(68H+PH(w̸(8H+yL HHQtLA3H(H`HIE3H(H`̸(7H+HHQpHH(H\$VWAV07H+MIHHI@rcHl$PIL|$XHLy(HiLfDCLKpA@D$(HHL|$ H@H@HuL|$XHl$PMt"CLKpHK(D$(HL$ McHHH\$`H0A^_^H\$Hl$Ht$H|$ AV@6H+@IIL;LHIBMtEH;r@FLNpHNXD$0HL$(HV(HT$ LcHIH+HLH;HBHuH\$PHl$XHt$`H|$hH@A^H\$Hl$VWAV 6H+HIIHchLHL;rBL|$@LH+L+I@DOLGpIHlHIH;vL|$@H\$HHl$PH A^_^H\$ UWAV05H+MIHHI@rvHt$PLd$XIHL|$`La(LyXHiL@fLMpA@HHL|$(Ld$ 聿H@H@HuL|$`Ld$XHt$PMt$LMpHEXHM(HD$(HL$ McHH6H\$hH0A^_]H HI H H H\$W p4H+HHQpHHLCpHGIHKpHGH\$0HH _H\$UVAV@ 4H+IILHI@r{H|$`IL|$hHLy(HiHfDLKpCA@D$8IIHL$0HT$(IHL|$ H@I@HuL|$hH|$`Ht:LKpCLC(D$8IIHL$0HT$(LD$ DIH[H\$pH@A^^]Hٺ H\$Ht$W 2H+HYpHHBHOpD HL$%H\$0Ht$8H _H\$Ht$W 2H+3HHHt]LL$8PE3{D$8=uX@uX8 (DHBLGDHH\$0Ht$@H _>RHt$@H\$0H _H\$UVWP1H+HTH3HD$H3HH\$0HAvLH sLD$8HT$0DHO;D$0:uxFxux =uqx~&HD$8E3E33HD$(HD$ tdE3DHAQ6HΙ蓡HL$HH32H$HP_^]úmL D$ JDBdd@S 0H+HمtEt,t H [E~HApDH [3H [HApA H [P@HKpH [H\$UVAV0=0H+MIHHI@rgH|$PIL|$XHLy(HiLfDLKpCA@D$(HHIL|$ {#H@H@HuL|$XH|$PMt&CLKpHK(D$(HL$ IHEH3#H\$`H0A^^]H\$Hl$Ht$H|$ AV@`/H+@IIL;LHIBMtIH;rDFLNpHNXD$0HL$(HV(HT$ IDIH*H+HLH;HBHuH\$PHl$XHt$`H|$hH@A^H\$Hl$VWAV .H+HIIHchLHL;rFL|$@LH+L+I@LGpDOIIHHIH;vL|$@H\$HHl$PH A^_^H\$ UWAV0.H+MIHHI@rzHt$PLd$XIHL|$`La(LyXHiL@fLMpA@HHIL|$(Ld$ m+H@H@HuL|$`Ld$XHt$PMt(LMpHEXHM(HD$(HL$ EHIH+H\$hH0A^_]H9 Hɶ H9 H H9 Hɵ H\$W ,H+HH<HOpLËUH\$0H _H\$VWAV0,H+MIHHI@rcHl$PIL|$XHLy(HiLfDCLKpA@D$(HHL|$ lH@H@HuL|$XHl$PMt"CLKpHK(D$(HL$ EHHklH\$`H0A^_^H\$Hl$Ht$H|$ AV@+H+@IIL;LHIBMtEH;r@FLNpHNXD$0HL$(HV(HT$ DHI{H+HLH;HBHuH\$PHl$XHt$`H|$hH@A^H\$Hl$VWAV +H+HIIHchLHL;rBL|$@LH+L+I@DOLGpIHljHIH;vL|$@H\$HHl$PH A^_^H\$ UWAV0}*H+MIHHI@rvHt$PLd$XIHL|$`La(LyXHiL@fLMpA@HHL|$(Ld$ {H@H@HuL|$`Ld$XHt$PMt$LMpHEXHM(HD$(HL$ EHH{H\$hH0A^_]H HY H H ̸H9 ̸(F)H+HIH(D̸(&)H+HIH(E̸()H+HHQHH(CH9 ̸((H+HIH(P̸((H+HHQHH(PNHY ̸((H+HIH(6S̸(f(H+HHQHH(`QHy ̸(6(H+HIH(i̸((H+HIH(l̸('H+HIH(Vq̸('H+HIH(q̸('H+HHQHH(m('H+HIH(s̸(v'H+HIH({̸(V'H+HIH({̸(6'H+HHQHH(@uH H Hy Hٵ H9 ̸(&H+HIH(̸(&H+HIH(̸(&H+HHQHH(PH9 ̸(V&H+HHQHH(eHy ̸(&&H+HIH(gH ̸(%H+HIH({̸(%H+HIH({̸(%H+HHQHH({H ̸(%H+HIH(&̸(f%H+HHQHH(PHٶ H9 @S0$%H+H9tE3E33HHD$ Ls;su L9sHKHt LsHL$PHt DHD;HHD$PHuHt HHD$PHu$L ODBD$ 'G3HtH{HCsH\$XHl$`H0A^_^̸8fH+A9Et%L [P`D@2HD$ MF3H8MI LAD$ >xH8̸8H+A9Et&L P_HD@2D$ M\FH8MI LAD$ }wH8H\$Ht$W H+3HHHE~|Hl$0Hi0HtHI8HtFs{t8~4DHH{u"PHMf3Hl$0H\$8Ht$@H _H{8tH"fH*fH\$8Ht$@3H _H\$V H+HHHu 3H\$@H ^Hl$0Hi0HtbHI8HtYH|$8Tp{t.~*DHH {H|$8Hl$0H\$@H ^úHqeHyeHl$0H\$@3H ^̸(6H+HI0HD;@}3H(LD$@UwL$@NʋH(H\$Hl$Ht$H|$ AV H+XBHHI0IE=w9H>H D LAtOHE3w؅~LHO8EƋd؋H\$0Hl$8Ht$@H|$HH A^ÃtHI3I _ɃtLO0뽺H8dHO8LEƋWdHϋ-dE3I w؅~GvHII0rzuc e w  8 @S H+Hi{HuH [3HC0AKK H [@S H+HHu3H [HI0h{3HC0CC H [H٘H\$Hl$WATAUAVAW0sH+HY0LPE3ELAeb{tHKCL+Dkq{|LpH z;~LH {C9}LH ʚ|;Ht$`+{fDHcCIN8HS|HDn];~LH Cs{~LH C9}LH š+vL+MEAID;Om1C~LwH HcCHZ+{IA;AOHLc {DCA HZHK|n=~L;H \*C9}L\H u DkIZ`qVUUUHK|ЍC K2H;t%+Hcυ~H+A6MvAFHu{L$E5t$0$Hl$PIM[Lt$@DHt$HL$K}{IgLs|tHZI΃D,e~HcƀY=uπX=u;t"+HcHZHZHLckL$3Olj!LZHKLI։l$ f3kkxBD9+AIN;IHcLU${;;uHD+LL$+3H$HXA_A]A\_̸(H+E3HD8tAs HA8uAH(H\$Hl$Ht$WAVAW rH+HY0xBMEHdw*H 3H D LA{{3{HN8M_YH\$@Hl$HHt$PH A_A^_Ã{~ϋC9}LďH ݏ;+{u59{t89{t3릋C9}LŏH ޏd;+{zENjb3C9t @E33HPC9uH es!DCEtHZHK|JfH{9{t9{HKtHS|LÉ{Eg눺HXHN8MENj5XH΋ Xf 3 @S DH+HD@VH\ HuH [3@@HHHHHC0CK AK(H [@S H+HHu3H [HI03HC0CC H [H H\$Hl$VWATAVAW0tH+HY0LPEHEiV;+{~-HcCHM8HHDcC+MELl$`CHCAD;HMOHLÉ|$ vD+HcNj;LC~5@HcCHM8HHDvb~LC+HErHUALl$`H\$hHl$pH0A_A^A\_^HhUH\UE;tE+AH0UC33@UVAUAVAW0H+3ELLHu3H0A_A^A]^]H\$`HY0HH9q8~H|$h~;HcCH+kIA;AOHHcLkCLD+9uH3Ld$pEf{IO8HA^;IO8`LHKLIԉ{ qCC5LHKLLIԉD$ t;Ct)D93AN3~%HcIILD+LsE8ISISukLd$pH|$hH\$`H0A_A^A]^]ÅD뿺IZSC33H\$`H0A_A^A]^]H\$Hl$Ht$WATAUAVAW0H+Lq0XэBMEDH=wKH -H D LAAF(3IND$(E3E3A^AV HT$ 9pMAHM8ER؋H\$`Hl$hHt$pH0A_A^A]A\_A~~AA+^AFA9tgH}0H?R+_~=fDHcGHM8HHD^~ G+؅ H RxJAFA9uA~ 3H((H(̸(VH+ILL;tMHIbH(H ̸(H+ H((H+辂H衂H贂HגH߿jHҿMHſ`H踿蓂H諿趒H螿YH葿LH脿L]H b 6L]H b5߁HGLPH -5L@H -5H uHLH 5LH m5蘁H軑H賾^H覾qH虾DH茾GHHr荈HepHX胈HKFH>LH 4LH 4IH,H?HHڽLSH Xb4L[H `J4H蝽hH落{H能>HvHiH\LH 3LH 3gHJH]H HLH 3LH h3LH P3H裼H薼H艼H|LeH j3LeH j2LeH n2LmH v2藵HʴHHH#Hۻ薵Hλ)H\H贻蟵H觻肴H蚻uH荻LH c2LޝH 1(HP[HC讵H6聵H)贵H'H躵HH HHۺL\H ac1L\H aK1覶H螺ٵH葺,H脺Hw2Hj襶H]8HPkHC讶H6葵H)脶HL͜H Ҝ0L͜H ͜0VH߹VHҹnHŹoH踹H諹ƔH螹ٔH葹輔H脹ϔHwHjLKH \/L[H l/H-訔H 軔H螔H豔HĔHLH .t/L-H >\/הH诸芔H袸蝔H蕸耔H舸蓔H{覔HnLH .LH H(.̸(H+H膸QHyLڛH ۛ.LƛH ӛy.dH;+{D9kXt5fD~+HM8HS`DHSJHcHs+D9kXuHCDkXH9u HLkMIcHH=v +3AHK`HcIH LH;D+LH;r H7teE<H==HE=AHt$XH|$`Ll$ H\$PLd$(H0A_A^]H=HIuDk 뼺H<33@UATAUAVAW H+E3ELHEHu3H A_A^A]A\]H\$PHY0H3L9a8)D9aHt$XH|$`ED9kXtf3HS`I+sA;AOHSHcLLH{HCDLD+H9u.HCLCLkL+tHS`HK`LH1L+DkXEtUHM8AHS`HD+rF~8HH{\u HtVD9k\u HitDD9k ~ E:H;H;AHt$XH|$`H\$PH A_A^A]A\]úHT;33H\$PH A_A^A]A\]H\$Hl$Ht$WAVAW H+Hy0XBMEHow:H H D LA3H_ _\HHGHGHGGXHN8M:؋H\$@Hl$HHt$PH A_A^_à ~σXtɋ+_뾃XuHKu3븃XtGXu3_$_ ENjHHG녺H3:HN8MENjR:H΋(:f_ ^HO(E3I Mt^C~t HG(I13( > F W  H\$W H+HHA(HHu H\$8H _Ht$03HH(H@ @\H0HpHpHppXQwH_0H\$8w FHt$0H _@S H+HHu3H [HI0H(NHK0(+HK03HC0CC H [HiH\$Hl$Ht$ WpH+HlH3HD$`HY0HCa{` Cb Cc HC(HH9 r|HSdHK(D=MtoHT$ HK(E3ItZHC(oHK`HcpHT$ HLu)HNHCHCH+CXHKC HM73HL$`H3L\$pI[Ik Is(I_H\$Ht$W H+HY0HHK(ˆScDC`CaHSdCbALt>HS`HK(E3HHt'HC(HcHCXH H\$0Ht$8H _úH6H\$0Ht$83H _HtADADIDQHHHfDDAEDHuDADIAH\$Ht$WpH+HQH3HD$`Hq0HHV(B+N;YHN(E3HLHF(HVHN@Lc@H`HHF(HN@HcPHtADADIDQHHHfDDAEDHuDADIAHF(HcH3HN8H t=s H9uDH HN(AJHT$ HN(E3+Gt{HF(H^HN`HcxHT$ HL3ɅH;HFu9LF\L;tHV`HN`L+HHFHFH)F Ho43HL$`H3@L\$pI[Is I_H\$Ht$W H+HY0HLK(AAHcHHHK(E3IGHC(HK@P-HC(HS@HK`Lc@H HC(HK`HcPH 9HK(HcAH ڊH38ϊt=s H9uDHHK(AHt?HS`HK(E3H}Et(HC(HcHHCXH H\$0Ht$8H _úH3H\$0Ht$83H _@WH+H:H3H$HHL$ HL$0E3E33Eu3H$mHHu#L 6PoHD@AD$ OHL$08-HˋuJL PoHD@vD$ TLD$0HL$@PtLD$@HXHCL@@Mt)HHAЅuD$ \L NJAH,D$ `L ÊAoJ8H3H$H$H3HĠ_̸(vH+3H(H\$Ht$W0KH+H HHu0L ?PqHD@AD$ w3H\$@Ht$HH0_É0HGHtmL@HMtMHHAЅuD$ L AUHCWHHHIHH\$@Ht$HH0_D$ L ։AD$ L ׉AvqJH H\$@Ht$H3H0_̸(FH+H0*3HH(̸8H+D$`H0D$ 3HH8̸8H+D$`H0D$ 3HH8̸(H+HI0H(̸(H+HI0H(v̸(vH+HI0H(6̸8VH+tAt%L P8D@=HD$ 3H8HAHH8HH8@SUVWATAUH+HCH3H$L$0MAHH)H 3D$D|$@Ht"HT$@tH kHu0AHBH;m EAHL$@HD$ 8!HKHL$Dp L$LxHu%u H8]ts H@88uuyHAA'H褡HHPtD$ L DB-H: 3L$L$H$H3HA]A\_^]['HHHqPtD$ L =DB,H땋$8MDÉD$0HIH|$(Ht$ AׅuD$ L -PtHD@xOLtL D$ JDBd HL$`HuDFPHJ* LƺP[oLD$`H3H\$Hl$Ht$H|$ AV0pH+IIDHt HHt HDDA3Hl$ *H\$@Hl$HHt$PH|$XH0A^H\$Hl$Ht$W0H+H=AAuH HHtH8A`HHu&L ,DBD$ 3%H K(pxX HD$`HBH\$@Hl$HHt$PH0_̸(&H+H H5HH(H\$WPH+IIu 3H\$`HP_ÉL$0H T$4Ht%HT$0tH HHu/AH`HYi EAHL$0HD$ VHHtHtAHtA H$HtHAHH\$`HP_̋+uA+BLH A+uA@+A@USWATAUAVAWHl$и0H+H+H3HELLHL$8HL$PIALE3{BH?HOHHAHT$@H$(HD$@D3HHuHL PuHED$rD$ c3H$(HMH3H0A_A^A]A\_[]HHHuyHHHD$0HL$HMuA&u!AIA8ts HD8 uHL$PE3I;HL$PLcI >LcD$0HT$HHL$P=HHUHL$PE3:hIHc;~\@HL$PE3I0;(HUHL$PLw=HUHL$PE3:;|Ihk@~LH EkICkHUHMLcI~L'H H.IIHcHUDȸHMA+LHHcHL$8D$(HELME3IHD$ Dt0HM@"HMк@HMAHL$Pvts Hǀ8uHM`MDHHD$ /uHM`,3UPL$)D@ffA;AAOHU`D$0AHL$@Dl$3D$1AD$2,$LcD$4HT$8HL$@1HT$0HL$@A1HHL$@E3-HL$@,LcHMH"D;8@HU`HL$@,HHL$@MF1MHHL$@E3j-1HL$@+E3Ʌ G3HcHHLH;w HL;s`%}ȃDD+HcI oof B Hco of A;|M;})LIIL+I+@A H@0HHuA;PAI+ljPHM`*L$HH3cHA^A]A\_^[]HM`X*HL$@N*3HM`A*3H\$Hl$Ht$W@H+AIHL$LT$8DT$xDDT$0HD$(D$pLNjH͉D$ /H\$PHl$XHt$`H@_H\$Hl$Ht$WAVAW@H+3ELHM8A9.MQM!IBHT$x3HD$xEHHuD$ L 3}HH EtD$ L '}A|HKH H艕HuD$ L }D@k$E3E3HHΉl$(H|$ K?HSHHRyD$ L |AzLH$L l$0MIHD$(H$EIHHD$ U"D$ L |ArvJHH\$`Hl$hHt$pH@A_A^_@SUVATAUAVAWH+H0xH3H$E3IDD$@LLAA虊HuD$ L {AIb@vL{H { #H;HKHT$HHAHD$HD3HHuD$ L {[IHNHt#x;tD$ L {A{+HNHt H E3LL$DAHLt$ uD$ )L {D@}L$DHFLHuD$ /L w{D@}H8tD$ 4L o{A~H@HNH$Hx)wT$@HL$PDHL$8l$0ILLd$(D$ `H$tK$ LL$PE3D$(3ILt$ rHluHKH訞u.L oHDBD$ <H\$@H0_HKHt؟HLDBHH{HCH\$@H0_úHOL oDB D$ KdH\$@H0_úL oDBD$ rH\$@H0_úL nDBD$ BH\$@H0_H\$Hl$Ht$W0薺H+IIHHHHHHy t(iL WmD$ JDB.@thHIHcȅu"PiL 3mHDBBD$ 3}HuHFpH9s$iL mD$ JDB2I3GHD$`LLLHHHD$ A%iL lD$ JDB-H\$@Hl$HHt$PH0_@S0TH+HHtAHHt9Ht/A HHu BH0[҅4C H0[úL kDB D$ fH0[H\$Hl$Ht$W0趸H+IIHHHHHHxHy t*L umDB D$ p@tlHI8Hcȅu$L MmHDBD$ s3~HuHFqH9s&L /mDBD$ si3FHD$`LLLHHHD$ ARH'L lDB D$ l$H\$@Hl$HHt$PH0_@S0tH+HHt;HHt3HxHt,A HP@Hu BH0[҅4C H0[úL kDB D$ ZH0[̸8H+HtHHHt@LPXMt7y t*L ClDB D$ 5H8H8I⺎L kDBD$ H8@S0dH+HHt;HHt3HxXt,A HPPHu BH0[҅4C H0[úL ZkDBD$ ||H0[H\$Hl$Ht$W0ֵH+IIHHHHHHxhy t*L %hDBD$ @tlHIXHcȅu$L gHDBD$ 3~HuHFqH9s&L gDB D$ 3FHD$`LLLHHHD$ ARh'L RgDBD$ DH\$@Hl$HHt$PH0_@S0蔴H+HHt;HHt3Hxht,A HP`Hu BH0[҅4C H0[úL iDBD$ H0[HuAHÅx;QH H@@Hcʋ3HQ8H\$W0гH+HHHHHHx8t|y t0L iDBD$ H\$@H0_HtH:u 5HHtHHHP8H 裗HH\$@H0_úL CiDBD$ H\$@H0_@S0H+HHt;HHt3Hx8t,A HP0Hu BH0[҅4C H0[úL hDBD$ {H0[H\$Hl$Ht$W@VH+3AIH|$0HHtKHA~4AHEAHl$(t$ ~HT$0HH|$0HHH\$PHl$XHt$`H@_H\$W0H+HHHHHHx(y t0L ]gDBD$ _H\$@H0_HtH:u;!HHu.L 2gHD@AD$ jH\$@H0_HHHP(H aHH\$@H0_úL fDBD$ ZKH\$@H0_@S0褰H+HHt;HHt3Hx(t,A HP Hu BH0[҅4C H0[úL eDBD$ IH0[HHQHA̸(H+MHIA@IA@IɉPH(Ia8@SUVWAVϯH+H%[H3H$Hq MHHH@tJHuLHPxHYHHHLMHHPxH΋qH@x3HHHL$8HL$8HtetHL$XLL$8MHHPxLD$0HT$pHL$8:HL$8uEtAD$0HO LL$pMHHD$ [3H$H3裯HA^_^][Ëޅt L3HH xHE3M3HHD$ ~̸8VH+HD$`D$(HD$ <H8@UVWAV H+HvYH3H$HA L3HIHH9HL$8@HL$8IguxH$tHL$XLL$8DHHLD$0HT$pHL$8HL$8'u#tD$0IN LL$pLHHD$ bH$H$H36HA^_^]̸8&H+HD$`D$(HD$ H8H\$Hl$VWAV0H+Hy Ht$pIILHuIHBHC HC HtZH@uXHuSHT$PH~L$PHEtHHu)L bDBD$ U3|$xHK Ht3LMtHAЅ~HC @ 903L@pMtHAЅ~HC @ @ n~HK 3ADNH|$(t$ ifMtHK IHK HBtLHH@ƋH\$XHl$`H0A^_^H\$Ht$W [H+HypH‹QhLHEt褮HH#3KHt$8HLJTC dK0tC@KPKC K0C@KPH\$0H _@SUWATAUAVAWZH+HUH3H$Hip3HLHL$H@+LMMH\$@HL$PHDžAt3hH$9WIuM*ID$$HL;W HCHT$@HL;IH+H+HHILHH HD$PHL$HH(ILHD$@LIHD$0H|$(HL$ IĵHL$PHT$@H|$HHHHHHH9s HHHMJ)L+H M;M;tMJ+I L+K<'HHAHTdHtNF N0F@NP HHIAA+M;sIK<'I+HD$HI L+H(LMHD$(HD$ EcHG(L+IJ +LMD$(HD$ 7H$HIA,A,L ȁ|I%rIIHIAG(Is3IHG(LMI׉\$(HD$ 莠GD>AFIDD$P+ DAHH+AAA+A3HA3I+M H?DL$XA3HH#A,H#HH|$@A,HT$HH HH$@ 4H0D@@HP II@r;@II+HHHLp LL+H)|$@H|$@DLHDH^^ALLT$`MHI+H+HD$pI?HHD$hO 'I+JHH8H8"A"€ AAB (A@}HAHH?AIH#A EH3H$Hqp3A@D+<LHMMLD$PLHL$HHl$@HdžHAt3H$9yLIuM*ID$0HL;PHCH|$@ Am-m%@ J/L;II+H+HHHl$@HI(MH LT$PHL$HH(K*LHLIHD$0H|$(HL$ IH|$@HHLHHH9s LLH|$PHMJ/HM+ M;I;tMH/I /L+<K<'HHUA HdtHKC K0C@KPC`h HHI AA+M;sIK<'I+HD$HI /L+H(LMHD$(HD$ 蒉HD$HL+I/H(H /LMD$(HD$ aHA(H$LMIʉl$(HHD$ 5IOA4MA4LL ȸHMHG!L;s3)L+LGD>AFI+DD$P DAH!H+AAA+A3HA3I+M H?DL$XA3HH#A4OHH#H|$@A4NHT$HHPHH$@ 4H0D@@THP@` I I@r;@II+<HHHLO LL+H)|$@H|$@D<H+LDHkHkAHkLLT$`MHI+H+HD$pI?HHD$hO 'I+IHH8H8A""AA B (A@HAHH?AIH#A E<<-LT$`K'DHD$pH?HH## # C# C# C # C# C# C# CH|$@HD$hIM;AH@sJ<(@H+3HLA8H|$@AHI+AIHH?H#A EtH&q3XH\$`IcHLH$gA̸B D;HH\$`HOD7Ht4JLGHtH>ImHHl$hHt$pH0A_A^A]A\_AW0eH+LHHu 3H0A_Hl$HHt$PHc1H|$(y@t{HIHƀ|u HHHcLuTtJt>t2t& t@t3MtFH\$@Lt$ M7A>HRIHcILeLH\$@~ ϸA FM7Lt$ Hl$HH|$(FHt$PH0A_@SUVWAVAW]dH+HH3H$3EAHHT$PHuiNfqHHHT$XHL$P[uLHt{uEtENjH}utaAF2cwUH^Ht HcHHApJHHuSL H D@AD$ t HtHn3H$H3UdHĘA_A^_^][HNHtGH^ENANQL=AkdD+AD$@AFD$8AFD$0AF D$(L$ HJ@8;tDs Hǀ;uFHƉ>D̸(bH+H3H(̸bH+H H3H$HT$(HHL$0uH$H36cHĘHT$XHL$(sHtLL$0LD$XHT$$HL$ QutD$ ~H$H3bHĘyH$H3bHĘËL$$3H$H3bHĘ̸(aH+E3E3H(H\$Ht$W@kaH+3HHD$$H8ts HÀ8uHT$(HT$ 3ɉ\$ Ut3HtDHHltGH\$PHt$XH@_H\$PHt$X3H@_@W0`H+zHt3H0_LZH\$@Hl$HHt$PLd$XLt$(Lc23L|$ A DŋDIL=@AuB,+IcAts IA2}AdDOAAGDO DO DODAIAHt/HcB ZuA;@ŋAը-DDՍCA;LcúMAA< EHAAЃ0< wyA DIF HE;f|`E;fVHtHu Ei HuAkutDNjHitFHT$0Dσ2DH̓cwHL$`H3 YHx_^][̸(XH+Au H(Bu H(43H(@SVWWH+HH3HD$xIHHMu9HL$ gHT$PHL$ hHuH3HL$xH3dXHĀ_^[A@uHL$PIuHL$PItHu!HL$ ;gHT$(HL$ lhHu7뒋CuHL$(H0rHL$(H(]LL$(LD$PHH jE̸(VH+H, H(cH ̸(VH+H H(̸(fVH+E3E3H(@S@DVH+3HL8tD=s IA8uHL$ HT$(D$0D$$D$ GuHL$ D$$1u3H@[HtHT$ H_tH@[Ht$W UH+AHHuH\$0HtHHuHHtGHtHDHu$HW`3ɅHDHH\$0Ht$@H _A3`u3H\$0Ht$@H _ËHGHl$8Hk85HcHHLsHxGHWLH踥Hl$8HH\$0Ht$@H _3Ht$@H _̸(TH+L H(ý̸(fTH+L H(#@S DTH+YB%;tEH []tH [3DHu3ËA=uEAHcL  H D@AD$ 觃HtMtI9>tH [3u GG;u tH΍FHcHN9;ufDtAHIʀ;tuHcAB8TIHA@~=M@H[A@$G;u tHLcHHkPHOHt3L7MtI>I,$HHl$XH\$PL|$`Ht$hH0A^A\_H\$VWAV@NH+ALHHtHHu \HH@ILL$0LD$xHT$`HL$8t$ HD$8r\yAf3|$xtAs$L$`HL A:5HHuID@AL D  D$ R赁HtHtH9tH.Y3H\$hH@A^_^CD$`t2HT$8:utHȉD$`HT$8LcHNHcD$`HD$8HKHt2HsD$`HtHHD$8IHH\$hH@A^_^Ht$W MH+E3@2HHu 3Ht$8H _DYH\$0HcAuSHQu uE;Eu ~1@2&=u#~D8u HH;| @AAHLEtA9IHcuAvEuDHQIM`LABIHcLLA8u~AIIA8tAIIAA~AMIM@AAHcHHt$8H\$0H _ø(6LH+H( V̸(LH+H(V̸KH+E3҃NLEHtp tiH$EZH@ʅt.IAvA:wHrEAEE˄uH$Et HøEuH̸VKH+yLt3HDA%}ȃuLIE3IAE~D8uD8XuD8Xu HA;|A;|H\$D;~$DDIBIA M@AIA;|EAMJEÃAҍXNMtwA toH<$Hʅt.IAvA:wHrDA DEÄuH<$EtABH\$HøEuABH\$H̸(IH+HtIHtDDD;uDE܋U뢺L F DBD$ PyUIA+WHtHIH(33L\$pI[ Is(I{0IA_A^]H\$ UWAUAVAW@iEH+3EMLHًHu3Ht$x4x9H63HAֹ+;H63HAyENjչL$jTDM IMEDHL$p$L$ HL$pT9$H'4yHD$pHHD$0 4HA%+LHuD$ L xHˋ3~;IHD$pHH5HT$pHA֋D$pH+HvʼnF3;|Lt$pHMuLl$0E+o3L AIHcTHAAq*HHu)D$ L  DBw3HHD$p3~:IwfffLcHVHL$pwDHcHHD$pHv2;|McHIODH'Iw'AH2~,fHf4HT$pHAHq2;|HD$pIEAL$Ht$xH$H@A_A^A]_]@SUV0BH+IHHMu 3H0^][3HH|$PHALH )HHu-L PoH D@AD$ NuH|$P3H0^][HT$`HHD$`HT$h3DH|$hHHV&H|$PHH0^][@S0AH+HHHD$HHtH+E3LEAՍHHu.L PkH EEAD$ qHpA_A]A\_]H$H$L$bfHI+Hw\IH+HHH;HHUDIH諜y H~HcHH;HH]LL$HA+LD$DHT$LHL$0I߉D$ H\$0KȉD$@y[l%=bL$@D$0+HLt#A)D$ L A{HcL$LEt7u39L$Du-AEIOD$ L 3ZHHI+H;IA@H+HHH7H;HtcHI;HIGH;舊H+Ht(HUDIH>~xHHH+uI?sMHuL$LHcII;LD$ L AD$ L uD$ L :AAdD$ L AMD$ L AA6D$ L uH$H(A-D$ L AkJ!oHهH$H$L$HpA_A]A\_]H\$Hl$VWATAVAW0T;H+HL3IM3DpADGZHȋ!HHu"L WtO DGAD$ \n3OHT$`IHD$`ADHH辛;t"~+HHcDH衛;uE3HAH\$hHl$pH0A_A^A\_^H\$Hl$Ht$W0v:H+IHHյH HHu"L PuH D@D$ Im3,E3LHAPjaLHHHϋH\$@Hl$HHt$PH0_H\$Hl$Ht$W09H+IHLHT$X3HHD$XoHT$XHu$L \O DGAD$ m3>DHT;t#~+HHcDHT$X5;u3HL$XH\$@Hl$HHt$PH0_H\$Hl$Ht$W09H+IHHeH蝔HHu$L ~H D@D$ {El3,E3LHAPjLHHHϋ觏H\$@Hl$HHt$PH0_3DHu3ËA= uEAHcLMHwH@LML$H$LHH|$(Ll$ AҋuRHcHD$0Ht$@H6HL$8HtAvHL$8HtHHvHD$0 " L aDAD$ b~H$AG tJI^Ht'IuDDH$Ët $%D$ L AoAO$IF@EHt{E3DHH!$Mt{E3DHI L$H$HT$8%ILc:HHcA(Ht$0HT$8HHtHtzMH著t;LD$0HH~t'HOHtKD$0gH_3ۃO4 L >DAHD$0D$ 2'a L DA4HD$0D$ +`D$ L cA `3H$HPA_A^A]A\_^]H\$Hl$Ht$ HL$WATAUAVAW -H+3HL$HMMLD\$0șH$IIDHta}qHKu Hs'Ht9tHCHIH |MyHH9pǃ|H$3H$HALcAH$HLHADD$0HMcHZHT$@HL|$@$HL$HE3HHL$HMI=LD$0HL$HLH INHtD$0AfIv3ANA&D$ L JDB^DDHL$HMtAIQrIHtIcH9rHqD$0L$I[8Ik@IsHIA_A^A]A\_úD$ L HJDB"vL D$0JDBD$ $^TL cD$0JDBD$ ]'H\$Hl$Ht$ WAVAW0R*H+LH3IMIHARHcHHu$L H D@AD$ S}]3AHT$PHHD$PLL$pHMHHD$(L|$ tHH\$XHl$`Ht$hH0A_A^_H\$W@)H+IHLHT$0HIHD$0+HL$0Hu 3H\$PH@_LL$pHcLHD$(H|$ VtHL$0x H\$PH@_H\$Ht$H|$ ATAVAWp(H+H$MILLHD$8Hu%L BPUHD@D$ \ yAxu1A@t*L * DBD$ [AHL$@2IwLD$0H$Fu%L H DBD$ [$H$HFHt|LMtpHL$@MMIHt$(H|$ Aҋ؃HT$8MIxHT$8H L DA4D$ ZBL U DBD$ ZUuHHHu%L 9H DBD$ ZL$07HN;t'L # DBD$ ]ZHL$@E3L3Ht$ yD$ L ]HL$@LcuD$ L ;HL$8HmHL$8 LcHWHL$@.x&D$ L  DAY3H$HL$@轏L\$pI[(Is0I{8IA_A^A\H\$VWATAVAW`%H+LHL$0MIHڃ譒H tsHvLHu%L rODBD$ YY6~u+Ft%L aD$ ^JDBSX3IH$AHQAcȋ HHu%L SH D@AD$ eXH$IH$AHL$0E3It\HL$0LcHKtHHHkH L$DHVHL$0kD$ wL $D$ mL AJW3H$HL$0H$H`A_A^A\_^̸H&$H+3D$0D$(D$pD$ HH@SAUAVAW#H+HDH3HD$pE3EDL$4ALLD|$0HL$HAu AH8ts HD88u$H$(H$H$DAL$$ t(zL HD$ JDB&Vt(zL D$ }JDB oV$ ;zL D$ JDB+VLHL$PDκ LD$PHlEHt(zL 3D$ tJDBU\UAHEL%LD$@Hx+HHMtDžuDT$4zL D$ JDB QU$~[;~WzL D$ JDBULHL$PDκ LD$PH[D7H$L TE‹IHD$ 2y(zL D$ JDBT$tDt9t. s s  MM6MtINE2Ht E>M~AnBA-LHu(D$ L zJDBS&HD$HL0L$4;u'DII+D$ L 밁t>t-tu[L=8D$0G?L=D$07|$0L=*HD$0DL ID|$0HD$ L=L$0HpASHD$8Hu!EtI*D$ L UD$0DD$4MAHD$8IFHcL$0HD$8HD$8IHD$ L$H$H$H$HL$pH3HĘA_A^A][HHLAAHHLAA@A@AHH@S H+HDH HcȸH H [@S 4H+HD3aH [H\$Hl$VWAV H+IAHمLt$`u HωL$Hu HL$HC ȃL$H]u7 HL$HC ȉL$HC ȉL$HC ȃL$HLD$HHx9L$H+HHHt IՅ~ OH\$@Hl$PH A^_^ÃH\$Ht$W H+Ht9w1Av,Av$AЃ v tH S,Hutvt v s v uH\$0Ht$8H _ÉH\$0Ht$8H _̸(6H+LHH H( ̸(H+LHH  H( @SPH+HD$0HHD$hHt^HcBwUH D AtCDHR3HL$hA HD$8D$0D$@D$ GxHD$8HD$0HP[ÃHP[̸8FH+Eu H8VDL$ ELHH [H8H\$V0H+AHEuQ3H|$@֕HHuH|$@H\$HH0^DHH-VHϋqH|$@H\$HH0^LHDL$ H DH\$HH0^H\$UVWATAUAVAWpVH+HH3HD$hL$LcH$EDD$4EL$N$3DT$8HHL$XHT$@LD$PHI;}AɃL$HA@H;u At@ @2tkt[t=@ L$0C ȉL$0C ȉL$0C HL$0\ L$0C HL$0B HÉL$06LD$0AHL$0HT$@LD$PDL$4HA@HI;u A@AEAtUD3HL$`WCLc~YA fHD$PL<`LL$@M@HD$ pxPHI;|LD$ LA @MIx)I;t'HT$@LD$PL$HHD$XDL$4DT$8HL$hH3XH$HpA_A^A]A\_^]H\$Hl$Ht$ W06H+IHD@HPHIՅu rD LCHHxpCHL$ 3҉D$ H\$(蔮HA=ȋ~HHtHT$HHL$ HD$HbDLHHHϋkCH\$@Hl$PHt$XH0_@VWHSH+HH3HD$8H$IvH\$@v%DL"HL$( c HT$(iv%DLHL$( 6HT$(MtAHT$ DH׃DًH\$@HL$8H3ZHH_^ûHwHDׅuHT$ DH׻묨t)DLGHL$( tHT$(w\d[HTH\$Hl$Ht$ WAVAW H+McIHHHtXK<0H;tOL=Ϋ @ff HT$HAHB8D$HB9HΈD$IՅt%HH;uC6H\$@Hl$PHt$XH A_A^_ÃH\$Hl$Ht$W H+3AHHE~HQAHՅt ;|H\$0Hl$8Ht$@H _3@UVATAVAWH+HH3H$3ELD$PELDHLEACu :H$(H$$0ǻL$%\$,=tt=tN=t(=HnDk\$ HD$0H^_HiA\$ HD$0HW=HBA\$ HD$0H0HAHD$0H Dl$ E3HD$8s HHD$,H\$PHD$XH ЉD$H3D$$ Dǁ`AHL$`JDD$@L$(EuH H؃tRI;hu|$ HT$8DAօ/HT$0EAօEII~C,CHˉD$DHHHHHD$hkaHD$`H=`H=@t:t6Hu͍x }`H@H= uͿ^H'H8AHL$pLAQO?bHT$p33H8ts HÀ8uIDAօ;}'$0t+IID|$,HT$XIDAօtj;H\$h$0usAE3D LIIx/L$(D$$ɉD$$L$(;D$H}l$DH\$PDD$@H$H$(L$H$H3HA_A^A\^]H\$Hl$VWATAVAW@H+IcyE3AMAHLƄ$DtRH8ts HÀ8uHDAօHAHAօ@@ u"GwH <u@tuAIOH$HD$0EDLt$(HD$ x}$@tHu}@tHAHAօtFAIOHl$0EDLt$(HD$ x@tHAHAօuMLI֋ xH\$pHl$xH@A_A^A\_^@S $H+AHu AH [o3;H [@S H+AHHu AH [LLcúH3H;‹H [H H H\$W pH+HHHH fu#HOHuH9Ku H\$0H _HS5H\$0H _̸(H+HH H( ( H+H H(eHtIHHt$IAHuËMt IAHHI̸( H+H H(_H\$Hl$Ht$W f H+IAHHHu3]AtHyu 蜝HCH{tH HtH3t'HKuHtJHC LŋH\$0Hl$8Ht$@H _̸( H+L H(v̸( H+L , H(u̸( H+L| H(Cl̸(f H+L H(#l̸(F H+H H(cH ̸( H+H | H(]̸( H+L \ H(3u̸( H+L< H(k̸( H+u H HIH(̸( H+H H(3cH\$W0` H+HHHIHt.L PD@HD$ iHCH\$@H0_H{VHHu+L PwH D@AD$ d>3H\$@H0_H H YHϋruD$ L D@oHGL@ MHHAЅuD$ L iD@} LAJH{ t LAHH{LAH{HOL DB D$ 1HH\$@H0_D$ L A|wJA=H3H\$@H0_L\$(Ht ILLHtICHHH ICAMtIIHi ̸(F H+H L H(ZH\$V0 H+HHHu 3H\$HH0^H  H|$@tZHHHFHtnL@(MtNHHAЅuD$ gL D@~XH Ht H ``H;H|$@H\$HH0^D$ kL A|D$ oL AoxJ;HX H`H|$@H\$H3H0^@S H+HH uH [H|$0H|$PHt4HCHHHt;HCHxHKD$XHC`HCHH|$0H [H\$VWAV H+HLHL HT$H3HD$HpHHtnHHb HH_HtOHHl$@Hl$HHHHu3Hl$@H\$PH A^_^I.Ht HkHH3H\$PH A^_^H\$VWAV H+HLHL ʞ HT$H3HD$HoHHtnH)H HHG^HtOHHl$@Hl$H HHHu3Hl$@H\$PH A^_^I.Ht H軟HH3H\$PH A^_^Ht$H|$ AV H+HLHL  HT$83HD$86oHHuHt$@H|$HH A^HH\$0PHɝ HHn]Hu3HD$8IHt HHHH\$0Ht$@H|$HH A^H\$VWAV ]H+HLHL Z HT$H3HD$HnHHtnHH2 HH\HtOHHl$@Hl$HHHUHu3Hl$@H\$PH A^_^I.Ht HHH3H\$PH A^_^̸(H+L H(mH\$V0H+HHHu 3H\$HH0^H|$@+HHu2L H D@AD$ &7H|$@3H\$HH0^HHvHHHϋaH|$@H\$HH0^H\$V0H+HHHu 3H\$HH0^H|$@{HHu2L H D@AD$ M7H|$@3H\$HH0^HH6HH+HϋH|$@H\$HH0^@S $H+HHD$0Hu3H [HHL$0tHL$0L HbHL$0H ZH [H\$V0H+HHHu 3H\$HH0^H|$@[HHu2L ,H D@AD$ 5H|$@3H\$HH0^HHHH HϋH|$@H\$HH0^̸(H+L H(a̸(H+H\ H(YHI ̸(H+H , H(#S̸(H+L H(j̸(vH+L H(3a@S TH+HuHC(HuH [øH [H ̸(H+H| H(X̸(H+H \ H(SR̸(H+HH ɚ H(о(H+H H(SXH ̸(vH+H | H(Q̸(VH+L \ H(i̸(6H+L H(si̸(H+L H(_̸(H+Ll H(_HY H\$Hl$Ht$H|$ AV H+DH I3QHHtgAL_HHGHt/ΏHHt"HOHtLƋHٵHH- HVHtHh3H\$0Hl$8Ht$@H|$HH A^̸(H+HH ٙ H((H+H H(VH ̸(H+H H(P̸(H+L l H(g̸(fH+LL H(#^@S DH+H3HHH [@S H+HH Ht$B t+HH [HH [H\$W H+H9HHuH\$8H _HHt$0g@HttHHH2H:H\$8Ht$0H _H\$Ht$W +H+H9AHHu tHHtOLHHuOH Ht5HD$X@ tH3H\$0Ht$8H _H3H\$0Ht$8H _H\$0Ht$8H _@S H+HHF,uH [HUHY3ɅH [HY Hy ̋B ̋B Ht$W H+9HA;y uHt$8H _H\$0y+ߋDHDAAHt@EtHHƈNAAHcЅx H 2HˆHyЈHHuH\$0Ht$8C H _̸86H+LA~)D$ L k DB.3H83Et DQuDMcM~%fDEt  HIuEt+HD$h;H uD$ L |A H8̸(vH+DHH(鐓Hٕ H @WAVAWP0H+H:LD;LL Ֆ DOH$HT$@HD$8$HL$xD$0$H|$@D$($HD$xD$ HD$Hc]I>H\$pt 3IHL$H3H$H$H\$HHT$@HKH+EHKLD$@HHIL+mHL$x3~gDHL$x3HH~-HvHЉhH HtPHz;|H^HL$xb;|HL$xDH\tCHL$@II8HtH HPPL \ DBD$ +3H$H$H\$pHPA_A^_H\$W 0H+HH{tHx6Hx*HSHt$0Hc2HtHRHLH7Ht$0H\$8H _H\$W0H+HD@_H?HgHHt> HHt1FHCHt#3CHCC HH\$@H0_úL  DBD$ *HtH HtH3H\$@H0_Ht]W H+H\$0HHHt5HK$CH HHKHt'HHH\$0H _̸(H+HD$PHDH23ҹNʋH(Hɒ Hi ̸(6H+HH I H(@(H+H, H(M̸(H+H H(cG̸(H+HH H((H+HԒ H(cMH ̸(H+H H(F@S dH+HHtHHtCH9t0H p H|$0^HHtH HT LH;H|$03H9H [3H [@SWAW H+LJH0iHөV)uI3@NjH A__[IOHl$@AG Ht$HAu3I_Lt$P~fxt HÅH{HcH~"Dxt HυMw3~Ox9at#A ICHDŽx#@u AAIH;|E+wE7Lt$PHl$@Ht$HH A__[̸(H+L Đ H(\̸(H+L H(\̸(fH+L H(#S̸(FH+L\ H(SH\$Hl$Ht$ W0H+3HH~CHfL_ HL$@AHD$ HD$@NxHQ;|H\$HHl$PHt$XH0_̸(H+H( ̸(vH+HLH(3@SUAUAVHOH+3LHIAHt I^IuA^ HHA^A]][H$rHHlIH|$@Ld$8L|$0Dl@IA5LD9ht('HHHHEoH CHHI$JHOHIWdHHIAD;e3HH,AAF HD$pHtaHIF~LfHVLO HT$pHL$xAD$ HD$xLxHA;|H!HiL|$0Ld$8H|$@H$HHA^A]][H H&HH\$Hl$ VWAV0HH+LHD$X3ۃHD$XHI3~_IvH9ht)iHHHL$XH0nHHIH;|Lm HL$XA3D$ KINHcHLΰPH AIHI(LJAIHT$ HI(Dy3HPA_A^A]][IH$H$HI(L$D;E3IAHI(qHHH裎HOHHu0HtIHHRːunMtI} AAD$pHuIHpA+~6HO8uHPHttHO;|H$IAHI(D;13H$H$L$HPA_A^A]][̸(H+H HtHI(Htu HoH(H\$W H+HPHl$0vLCHE3HHE3E3HHC(Ht HH]E3E3HAQZkE3E3AQXHHC UE3E3HHC8>HC@HtH{8uKH3Hh0H~]Ht$8HSHH/=YuK~~=t Zt=uH7;|KHt$8HMHl$0tHChHPHH҅3H\$@H _HChHPHt H҅tHK Ht HK(HtWHK8nHK@nHK`HH\$@H _Hv3C4H{(H{ {HCh{0H{pH{`H{8H{@H\$@H _̸(H+HL H(S7̸(H+H , H(0̸(fH+t H(H(H\$Hl$Ht$W 6H+HHIHHAIHtHhHpHxHX H\$0Hl$8Ht$@H _H\$W0H+HHH{(uH tHC(HK(Ht#HtCDH\$@H0_úL D$ oDBAHH\$@3H0_̸(FH+HH y H(P(&H+H\ H(5Hl$Ht$H|$ AV H+HqhILH~Ht.IH\$0qHHf9LIHLVH\$03Hl$8Ht$@H|$HH A^̸(H+HAhLPMt E3H(I3H(H ̸(FH+H | H(.HHHEHHQp̸(H+HAhL@ MtH(I3H(̸(H+HH HH H(̸(H+HH } H(頚(vH+H} H(#4̸(VH+H } H(-H\$Hl$VWATAVAW $H+HHE3Lp(EAI~:fIfLD$PE3HȺH.HHu*|$PtROH\$XHl$`H A_A^A\_^LL9g`uHG`HHO`HLD$PE3ɺHL{HHu|$PuC HĢHΉC gH[Dd$PHL$P;}=t*L  DBD$ ZH8HI H8cHI H8lXHI H8@V0H+HAHHt`LMtH0^IHtGHxHt@H\$@H|$HF3HHtHHHϋH|$HH\$@H0^úL  DBD$ OH0^̸(VH+E3E3H(H\$DL$ HT$UVWATAUAVAWPH+E3AE%ALHA A=uA H*EDAu5D@H0HA H0Au{LUHL AzMcALDIM~$MR@ffAHI;|L$0LL$(L$ L/H;H[h>A@uRH>EH:hHUDDH蠳HAH/EHA!H/LHHgHE HHHEcHʞH+qI.HHHuL3H`gHE3HEAgHoA LHHgILx(IL|$@bu#LHxHfsAIω$);QIMAAALH=覍LQHHxf[IHb؅~E9gIG(Lp+Ë؅~2@ffH}AH-˅HH]*wGXs=EIVH-A;Hg#IOIODXHJH)A;}IOȽ2$L|$@D$L$A%IHHLHH+eH胻L5tH-ϝAHBLHLHHdHHHn`HLH(HMEdAEHH\u"LJHHxdHSHHAH,~>HA診D;2H8HкA r8MGIWHiu$yL D$ JDBE3H$HPA_A^A]A\_^]H\$Ht$W0H+HHEH%&HHu0L .PzH D@D$ P3H\$@Ht$HH0_E3LHAPjkE3E3HHHϋ !Ht$HH\$@H0_@SUVWAV`H+LcLB3HDDA C|ZDIIHD,0< HH H |A A@ HA@ PA@P/$A@D4A@EF4pAF PA@L$L$Eh A@AL$DHI+D$;u5HsD83t$HLAI$uD83tHA uL /D$ (JDB HH|$`Ht$XH\$PAH0A_A^]H\$Hl$ VWAV`HH+HnH3HD$PLH4HT\<I3HI(H/AHc؋跩HHD$0HIHT$0HI(e谛H3LD$8E3HH\$(HD$ 'DD<8HӕH[HH|HҦHH[~IHH0Hy/HcHOLD$8E3H\$(HD$ a'tM@fDD8H{H;[~'HH|HH[ H@3HL$PH3L\$`I[0Ik8IA^_^̸(H+E3E3H(H\$DD$UVWATAUAVAW0qH+3AA%ALHƄ$ D=uƄ$ A L*EDDDp@u2D@HL!HHEH!@u1IH lLђH&DHHˉD$ Y@H%AHw!lI'Hu HN~H L SLMHHLDkYDfDA:AHD; HDDHFD(#YHD;|BHk~u LLD$(HIDHLD$ X~z$@uIUE3H~Z@uk$H0HDX~6ItDEHHxHAH 3H\$pH0A_A^A]A\_^]$@ HӐAH~HҐAH~IHHP HtHÐAH}rIHHP HRWHAHE:@@uYHDHtWItDEHHӢHЏAH@H>A!HLяHJHVIE0HHHxR}HuH!fI1sHHHuLpHVHE3HEA蚥H袡 r~I}8t8L0HHOVIU8A HI}@t8LHHVIU@A HFrMEHHDHD$  R rMGIWHY rIE3H91H\$Hl$Ht$H|$ AV00H+AAHL7HHHu"L %PvH D@D$ Zn3/E3MHAPjDDHH7HϋH\$@Hl$HHt$PH|$XH0A^ø(薻H+E3E3H(4H\$Hl$Ht$WATAUAVAW ^H+Lc"LjE3AHAAE~98Ѝ ;u.H3AHDŋH<~sF+HL A;HMLDHS~DHI;|HAHAAH\$PHl$XHt$`H A_A^A]A\_3H\$Ht$W@kH+HH΍IH3H\$PHt$XH@_HHO~HtXLD$hHT$0!tCT$h3R`Ht3LMt'3LHDI HL$ HAH\$PHt$XH@_HHtA HH\$PHt$XH@_%H)H\$PHt$X3ɅH@_@SWAWqH+HdH3H$EHHHfH$3H$L$H9*H 'A@L HL$(HH@D$ *RHD~U@uHHg@2HA7E3HL$0AQPLHT$0H6HA+D;|HSHL H?QEH9oH hAGL ^HL$(H'H@D$ hQHOD輧~W@uHH@2HOAsE3HL$0AQPLHT$0HrHOAfD;|HƌHRL ʼnHHPHGHt"H@L HEHHD$ PH9ot}L HEHPHG9(~GHL=L5VH@MƅD 0HcHMEOPHGHv;(|HJAHL$H$H$H$H3迷HĠA__[H\$Hl$Ht$H|$ AV0蠶H+LHHOIH bLHDHHˉD$ OINH &IVE3HIE3HI3foL@HȋLHHJOHrLHH,OIHHR-LHHOIHHP Ht HNH2HNMHM@0E3HD$ JIHh(HHHdHqNH3~}H账HmHHbNHHdHhHHNHWHLHɊH-NLGHZE3HD$ OJHe;|MFIVHAH\$@Hl$HHt$PH|$XH0A^H\$Ht$W0苴H+HH/H%HHu2L H D@D$ K3H\$@Ht$HH0_E3LHAPjiHH^Hϋ$ Ht$HH\$@H0_@SUWAWHH+MIHHMuA@HHA__][AxHt$pH=L$D$H5AAHE {{u HLHL3ۅËUHLd$xLt$@$LŃ3HHƉL΋L$0Ht$(L$ HLL3A>-HL HHLDLIWH葬AGtI3Lc~yL%ńk;u)HH~^AUAH tHF>L ;HHMDyK~!HI;|HAH3Ld$xLt$@Ht$pL$HHA__][H\$Hl$Ht$ WAVAW ұH+HHHJHLIH |u Hy(HqLHJH H HHHuHiJE3HEA裙H諕HL@A8tM@HSH[JHKH u HLHDLH)JHC3Hc(Lx~uLd$@L%ff98Ѝ ;uHAHF>L ;HHMDIHH;|Ld$@H·AH<H\$HHl$PHt$XH A_A^_H\$Hl$Ht$W H+AHIL HlDH@IHH;t?@SHGt"@uH9HM HHB @2HH;uHH& H\$0Hl$8Ht$@H _HzLLtVIAML+fDB +uHut0IAML+B +uHutIIyuAH\$W H+HHIHAiy 3H\$0H _HtDNjHVFtݸH\$0H _̸(薮H+E3H(7@S tH+HHL$83E3H\$8 HO\$8HH [H\$W 0H+HHHu 3H\$8H _HBHtL@Mt H\$8H _IHt$03:uBtbtAt?u HtH@H3Ht$0HH\$8H _Ht$0HH\$8H _ËB Ht$0H\$8H _HqAVHHuHt$0H\$8H _HpH H93H\$8@ƋHt$0H _H\$W0H+HHRDAt& >& >& & ,& >& H\$Hl$Ht$H|$ AV00H+HHR3AHHt LrMuLHwfL=A( IHtMHBHtDHH2Ht5HHt-HHHSHHtHfH\$@Hl$HHt$PH|$XH0A^HHMtE3LH3Aօ1tu/K HȁAHH9LcC 3HQLÃH5MnE3LHAIAօQMtE3LH3Aօ-uGK H]ArHHLcC 3HƪL3H2HH3Hk9s~,HH%5HHZt^H ;s|ME3LHAIAօyL D$ JDBHH3_yL D$ JDBX38& ' J' & & B' ' ̸(覨H+Ht.HBHtL@ MtH(I:tzu B H(HH(̸(VH+E3H(HL$(1H+HL$0E3H(@S H+HHtOHBHtL@MtH [I:u&H9H زHHH [ËJt HHXH;tzt\t;tdtH 菲HHH [H S4HH [Ht B H [H [3H H 舋HH [H\$Ht$ AV H+HLtoH|$0H93Hh~4@H6HD$8VHL$8HE3^H4;|HH|$0IH\$@Ht$HH A^ÁRDHIH\$@Ht$HH A^H#VWAT 9H+HHREHt H9Lt$PHt LrMuE3HȃL.H\$@A- IHVHHt HHHsMtE3LHAIAփUHH01;FHcHHH^H1HH>H HBHHHHBHHHLƃHH.MtE3LHAIAփHHHl$H.HcVHnHH3HH~BL|$XE3HH-LHtHH?0IHdH ;^|L|$XHl$HMtE3LHAIAEuH蝈HH\$@Lt$PH A\_^+ , , w, , , , H\$ VWAUAVAW@H+MP3HALEIDT$4t H9u3NMt IBHLEHHl$p$LAp1 l$0ILF$IHωD$ MLM$ALIHωD$ +MtE3LHAIAׅtaHH.x=;F}8HcHHH^H.$AL$ LIH VMtE3LHAIA3:$LIHωD$ AR(MtIHIARMA$# A   BЉT$4H$LLI,t~ $Ӊ$Au?Al$0MtE3LHAIAׅ*$Ld$xLf9^~xAIH*HD$8H%HHU-L$0LD$8L$ A3H$+;I $;n|Dd$4EA跰D$8MD$0D$EAIΉD$ Lf9^~UAIHO)HHt\HH,L$0AL$ LIHI ;^|l$8|$4uIdMtE3LHAIAׅu 3Ld$xHl$pH$H@A_A^A]_^ÐM. / . 8/ / x. r/ ̸(&H+E3H(̸(H+AH(̸8H+AD$ "H8HT$(豟H+IALLHtH@0HtH(AuAytH9uH(<u HHAAyuHLPAAH\$ HtHc3 HIHHX3ɋAtAyttAy ~H\$ H(Ay tD$HHL$Hu3MHT$8HDI 9H\$ H(3MHT$8HDI QH\$ H(Ay Iu"@tMt3LXH\$ H(HHMttHLcIkH\$ H(2 3 2 13 2 2 13 13 13 3 H\$Hl$VWATAVAW0H+A@AMMHLD$p3҉D$pLE3؋D$pD@Av tAn3u3su3DsDHtHt$DDAHωD$ OHLD$pMIEt HHcHtDƋA覬H\$`Hl$hH0A_A^A\_^HL$SUV0H+AIHHH:u|DL$ HL$P3AH|$`~)HtAnLt$hZLHuLt$hH|$`H0^][HT$XHL$PALHD$Xt$ ^L3DL$ HL$PADH0^][@SVWATAWPH+3MALHH\$09$膋HL$mH6tA @腂LHt;H6tAL$aLHD$@Hu&I3L$L$HPA_A\_^[HH$HD$0~iD$IvH覌HT$0HL$8HD$8HD$0AMDl$ HF HHvFHD$8HF胊;|Ll$@HrL RAHcIѫI$HHD$0F~/IvLcHVHL$0śHcHHD$0Hv;|Ճ$HD$0H$I$u7H~+IvLH賊HHvʼn;|I~I~H蟉~@$@HfHL$8AMIԉt$ HD$8H_;|˸HPA_A\_^[H\$Ht$ LD$WATAUAVAWP莙H+A8D$3ELL@tAtEpAt AAA?H$L$8 s iA rl$0@MmM@t @t ˉL$8At@u Dt$4t$<ɋÉ\$<D$4I͋;~YIHD$HH$PHL$HA3LDd$ nt6+;+I;|l$0DD$4Ӌ輧D$@uWtEƋЋ蚧D$@Mt~tt$ t$0EDIϋ֧t$0D$kD$ ^L MkALNjIMtE3LIAIAԅHEIE MgHHEǃuAHELMo3HD$PEwD$Ht$@L$8HED|$0HMWHD$(HE_HD$ `uD$ vL j HuMtAEtLmOEGEeD+E EoDeWEG8]_u' L jAQkD$ I9u#HItuD$ L qjHEHtE3LIAIЅyH_E3D9~At,E3HI)LHtHIfIHAH D;|HG3HE_D9_AHIHHHIHHEELA|>u ~GD;u2$HULEHT$(HULjD$ HuǃuHMHD+EHE_AH HE_D;C3EotA|b>u]~uWH}GusEtnD$ L JiA!EoHuD$ L hAD+EAL hD$ AHQkD;}JLe_AIIoHHthHIHHAI D;|H]ODLD+HItLHEHtE3LIAIЅt0H3AyL ihD$ AHQk$D$ L dhAdxJ3ۃ}u HIHt'HG(LCL JhHdHD$ LG(Hdݮ3L$HĠA_A^A]_^[]ÐB< A I@ > Z> < A ̃wHcH !1 3̸X膋H+H6H3HD$HHD$0D$0HD$(D$ ;HL$HH3>HXH\$Hl$Ht$WATAUAVAW@H+L$H$$M$MMHHLT$8MHtj;teHcCKDCDK SLLT$8$D$DL$0hL PdD$ JDB Ht3L$LD$0H$HL$8t$ :$D$DL$0LT$8HtCA‰KA+DCDK Cc;YhL cD$ JDB3m3o$xA;uD9$uuHttAA+Mt$AH$Ht HtMMtEHtDM$H\$pHl$xH$H@A_A^A]A\_À$tHthL cD$ JDB@蠼3HT$HL$UWhH+LAIc$LT$PH鈄$HuuI:HAHh_]H$Ht$`E`I|A:u AzvLL$LLD$HHT$DHL$XLT$XIډ|$ N$x-;L$Hu $;T$Lt!D$ L bA$LT$Xt A+߉\$D\$DDLT$PA$ D$@t=$ DÉD$0T$(L$ HT$PHLT$PTtPHt@HcmH$+HcmHT$PHH$HMLc衈LT$PHcLLT$PA+$H$jL `D$ OJDB褺3I$LT$PjL _D$ 5JDB5f3jL `D$ EJDB[?3zL `D$ \JDB3VD$ L 8`AfhJjL y_JDBD$ >չ3H$LH$Ht$`Hh_]LL$ HL$UVATAUHl$ḸH+3ELEHuHuHuHu.L cPN D@D$ C3HĸA]A\^]A9H$H$L$u }gAAyDugH]L$<ExD$ L ScA@8uwtD$ L ScA~mL:L}Hti@83tdCK{ SEHcCIljMˉ}HE߄hL ^D$ JDBWHt@3D$ L bDD$ LMHULEHM聒Mˋ}׋HtDEωCEA+DCK{ CoAA;chL ]D$ JDB3·kEAuDMoI$H\$PLMHEEwE3D$HL$@Dt$8HEDl$0HMHD$(HE3HD$ u)D$ L !bA:lJ63u G@8u w1fs'lL bD$ #JDBnն3QDMDEˉt$0HUHMt$(ED$  LuHMAFHcu#L aPlH D@AD$ 5fHEH]Ic@4L}H]HcELDru2Ht@3DEM<$EtFUHMt{H]DE+>@8uuкlL `D$ JDB0ܵ3[H]HcEDE+DHHE_HMGDHD$(HEEIHD$ `t I$}tHMHt_fL$H$H$L$HĸA]A\^]H\$ HT$UWAUAVAW0褁H+H$E3ALPEHEAMt0MR(Mt'HD$(H$HD$ AH\$xH0A_A^A]_]ÃxHt$`Ld$pu>H9HuHHWHT$hH;/tE3H7HT$hLH_E L-HA S IHT$hEHHHt uLALd$pHt$`H\$xAH0A_A^A]_]Et'L Y_ DBD$ sHAt'L C_ DBD$ {赳baHT$hEHCHT$hEH1/H*H A% ʼnAu+AtUL ^MDB D$ 8u+At%L ^MDB D$ H3Hu6贌HHu"L ^H D@AD$ ̲|HnL$E8<$t#HNHtcHD$hD6HFE<$LHT$hEH4L j^H D@AD$ YHL;HM M}cQ Q Q Q .Q P Q Q Q Q @SWAVPq~H+HHcLEuH;HHPA^_[Hl$HHt$@@|;u{u HtraL$LD$0HT$pHL$8HH\$8|$ ˋxKHL$8t +ߋӉ\$pT$p$Hو$tHcH+zuAI]hL @WD$ JDBD$ L VA:D$ L VA 3Hl$HHt$@HPA^_[@VWAVp}H+ILHHu 3HpA^_^A HHD$h$H$H$3H$H\$PD$HAAL$@D$8DD$0HD$hLL$`HL$dHD$(H$E3HD$ 6Hl$huD$ &L Xu ,$u;D$ ,L XJDB覯3H$H$HpA^_^H\$(\$dHT$hLHDD$ uD$ 2L OXJDBHD$h+݀|$`t8|8uxuHItD$ :L !XAtD$ CL &XAwJۮHH@%H$$HpA^_^ DD$UVATAV {H+MALHHu3HĈA^A\^]HH$AH$Ll$xL|$pHD$` E3tAIA $L$L$L|$PD$H|$@L$8DD$0HD$`HD$(H$E33Ll$ u'L WH D@:D$ u袭3`DHHu uiH:Hi~.@HiHD$hAVHL$hHrHZiL9.uD$ L VAA$~qH\$`|D8+u D8kLl$hAVL|$8Dl$0HT$`HL$hLDDl$(D$ .+\$`HT$hHit]D8$TD$ L VAHH\$`D8$(D$ L UAD$ L VAAD$ L UtUAQHT$`DLH$HHD$8$D$0AF|$(D$ CD$ L UUAQHT$`LH$DHD$8$HΈD$0\$(D$ u1D$ L UA:JbIH3uH\$`I$Ll$xH$H$L|$pHĈA^A\^]H\$Hl$V0{wH+AHHuHH\$HHl$PH0^H|$@RHHHH Hu H@(Ht>bt#W3DHG~D9tNH(;|HG Hu&t nL VD$ JDB6P3H|$@H\$HHl$PH0^H̸8vH+AL<t<uEI@Ht<@t6HcH I uBH8D@L UD$ vKH83H8HtW(1vH+H Ht>HBHt5@t/H\$ HcX HtH Ht\Z3C HCH\$ H(Ht/H Ht'HBHt@tHc@ Ht3@ HHH\$Ht$W uH+HHMt`IHtXIAHtO@tIHcX Ht@{ u:HtLcCHHkvHcCHHtCH\$0Ht$8H _H\$0Ht$83H _H\$Ht$W tH+IcHHtqH HtiIAHt`@tZHcX HtQH HtYHaTA\[HHuH\$0Ht$8H _LHHu{C H\$0Ht$8H _HcRHtHËBHMcHL AAH  ̸(sH+HL H(H9 ̸(sH+H  H(3̸(sH+Hl H(SHY ̸(vsH+H < H(HI ̸(FsH+Hl H(HY ̸(sH+H < H(HI ̸(rH+H H(H  ̸(rH+H  H(#̸(rH+Hl H(CHY ̸(frH+H < H(̸(FrH+H H(H ̸(rH+H  H(̸(qH+H H(H ̸(qH+H  H(3̸(qH+H\ H(SHI ̸(vqH+H , H(HI H ̸(6qH+H H(H ̸(qH+H  H(s̸(pH+H, H(H ̸(pH+H  H(#̸(pH+H H(CH ̸(fpH+H  H(H Hi HI ̸(pH+H H(Hy ̸(oH+H \ H(SH ̸(oH+H H(c̸(oH+H  H(̸(voH+H  H(#H ̸(FoH+H  H(̸(&oH+H, H(H ̸(nH+H  H(c̸(nH+H H(H ̸(nH+H  H(̸(nH+H H(3H ̸(VnH+H  H(ÿ̸(6nH+H H(H ̸(nH+H  H(s̸(mH+Hl H(HY ̸(mH+H < H(#̸(mH+L  H(̸(vmH+L < H(̸(VmH+L | H(̸(6mH+L l H(s̸(mH+L  H(S̸(lH+L  H(3̸(lH+L  H(̸(lH+L l H(̸(lH+L  H(̸(vlH+L  H(̸(VlH+L  H(̸(6lH+L  H(s̸(lH+L , H(S̸(kH+L l H(3̸(kH+L  H(̸(kH+L L H(̸(kH+L  H(̸(vkH+L  H(̸(VkH+L  H(̸(6kH+L  H(s̸(kH+L  H(S̸(jH+LL H(̸(jH+L H(̸(jH+L H(s̸(jH+L H(S̸(vjH+LL H(3̸(VjH+L H(̸(6jH+L, H(̸(jH+L H(̸(iH+L| H(̸(iH+L, H(̸(iH+L H(s̸(iH+L\ H(S̸(viH+L H(3̸(ViH+L H(̸(6iH+L, H(̸(iH+L H(̸(hH+L H(̸(hH+L H(̸(hH+L H(s̸(hH+LL H(S̸(vhH+L H(3̋A̋A̸86hH+D@HPJHNHu'L \JD@AH D$ Y{3H83HHHHH8̉Q̉̉Q̉Q ̉QHT$HgH+HD$pHIHHEE3AuIA(HT$8DT$0HD$(HT$XLT$ HHH\$Ht$WATAUAVAW`gH+IAL$3IELHHtH9XtHL$@DD$HLt$PL`LAL$uAytYH9uTAtD9$u(L$L$ALt$ {u3%HHH~LH$AHBn HMIMt IEHLt$ }H$Lt$0EHD$(H$LIHHD$ ]n$H$u#L$LAHLt$ 9HFHtSLP0MtJL 7EIHLt$ A҅HGHHHGLHWIIx&;F}!HcIHH^HLHHnGDHËdH$H$9$u&LLAHLt$ +H$HuHt2AHtHFHFMt$LL$@LI׹AԅHn9^~`ffAHIoLHHIEEMHHLt$ 1thH ;^|L$AtL 5HVFEHx2MtLL$@LI׹ AԅtH%FH3H$L\$`I[8Is@IA_A^A]A\_Ðk l l Ln k k l H\$ WATAUAVAW0cH+IxL$EL$ML$LAL|$ HD$puH\$xH0A_A^A]A\_Ht2HG8Ht)EMIHL$H\$xH0A_A^A]A\_HHl$`3A}Ht$hu IpAuuHAt-"b'IHuAHx0Lpu aHŃuHYEH蕿@ŋHt*HHxdH-EHaMHHcq lq HAuAE u HDHDH DHDHH3RHHHH˾H΅NEHH詚zHHmIMH]MEHHLHPDHd~TDHWEHˉl$ Z`NEGHH]DD$pttHDH3Hl$`Ht$hH\$xH0A_A^A]A\_fp !p dp p p p p q H\$Hl$Ht$W _H+IIH~#HBAHuz+;HBDH;u^HD$PHB@HEHu Hu CeHtHH~ Ht/HHtHBL3-Hм3HBAHËH\$0Hl$8Ht$@H _H\$Ht$W ^H+zAHHu*DBH.BA43H\$0Ht$8H _HA33H\$0Ht$8H _DE~HSDNH% ~H\$0Ht$8H _H\$Ht$ W;^H+H H3HD$pHHH褪AH&0HHL$ AQOLHELL$ H;ALH3ɅHL$pH3^L$I[ Is(I_Hl$Ht$WATAUAVAW@]H+L$E!MAALHt AQHp(3AH\$p@t3I^ARHtrDŨtEH?H ?AHDIFL '/HD$(HL$ H?H#-3-L .H?HH\$ 3IuE3HA@L~u~H-?H)~HMH$AVL|$8D$0DEH$LHLd$(Ld$ !ZHK;|u"DEL I.H%?HM&At!L &.H>DH&,AVL|$8D$0DIHLHt$(H\$ H\$pHl$xH$H@A_A^A]A\_@S [H+H-HHu H k&JH-Hu3H [HHKtH \-7LH [H\$W [H+E3ɋAQE3HHt9HȉxUu7Ct$HKHt-?HKHt?H?3H\$0H _øH\$0H _HB HA HB(HA(HB0HA0HB8HA8HB@HA@HBHHAHHBPHAPHHHHHBXHAXHB`HA`HBhHAhHBpHApHBxHAxHHHHHHHHHHHHHHHt$ WYH+H$ HH-H$H +HD$0|$0H$Ht!HT$0FxH n+JH0AH<H$EAHl$ HtHHtHt Ct{3H$ Ht"QHtHHP HHH$H$(H_@SVAVAW(XH+E3ALHAu AH8ts HD88uH|$`HtMHL$PDQHHt5HL$P%HL$PIDqHD$PHHH|$`H(A_A^^[L>Hl$XLd$ AL%;I@H * HtjG ;}tHyI }I<H )VIHGu8HOAL8ts IE88u;uLcIgt HtH3Hl$XLd$ H|$`H(A_A^^[Ht@S 0WH+AHt$HIHtv;HKHth;H`;H [̸(VH+y3H(à }HcH i:HH(ÍQH (H(HLT$0Mu3HtAHtABMtABAMtIBIHL$(HtIBH̸(6VH+H L(Ht E H(ø H(H\$Hl$Ht$H|$ AV UH+IA#DHX9AHIH@IHPHT$HHGHT$HDxLHu$D$ HL /A {HL$`TH HIH@H3#IHPA_A^A\_^[]̸(HH+E3H(@USWAUAVAWH$XGH+H:H3H@HHL$`E3DL$TMLAbHu3H H$L$P HHH 7 HHD6詔HHFHHHFHHHkHF3HHHwLg 3LcHFHD ӦЉD$PHGHHH 0HHGHH.HHGHHQHHGHHAMu8LZ 3H`H H΋?H8 H0HZ,AA-HHD$HHu'D$ L H,AAAHAPayUHFHT$HHHHvL$PH(,A,HD$HHuD$ L ,HH(,AQuD$ L ,wHGL HT$HHHHD$HHAHZHNIHI蚌HML+HMALDA׉D$@t'AgL +D$ AHAP;xYAHM8Et=s HD81uD$@D9t$TtLSHcT$@LEHME3Lt$(HD$ +u+D$@fEEHoLt$8HHLMHD$0D$@E3HD$(D$ HMvHGHHHAHD$HLHL$`E3HLt$ ԾtUHT$HD$PLD$@HL$`LʉD$ t2HcT$@LD$XHL$`HT$HtL IH螣DHL$`Hz HrH HcAH$L$PH@H3qDHXA_A^A]_[]H\$DL$ HT$HL$UVWATAUAVAW@GCH+MB EI33E3\$0?;!LcI~~C|0 u LcC0C| u LcC0E3C|\AE3M~6MIIfD,0<6wHIsHAI I;|AHcB0ItA>0D$0uA~0uIvA+ԋ%}ȃ/™+HcD<;E;~DD,_HuH)AA(L)AAH*HHE3Ʌ~]LcfE3BHЃ wHwW Hwo7K I * Ȉ *I|IHL;|AEtVD$H$IЃ|d\$0:D$ L H)AAYD$ L I)ABH$D9HiCD$ L (AD$ L )AeJRtH*%3H$H@A_A^A]A\_^]@UWAV @H+3LHHu 3H A^_]ËH\$@Ht$Pu0D@H(FH\$@Ht$PH A^_]Ë߅~Ht6k#;uH'AHuYIVH 'A2HD$H2HT$HH͈D$I覠uHA;tQKHtS0?H+HL (D@HPD$ FHKHtY1HKHt[JHKHt#HK(Ht {0t#H#H0[@S0?H+D@=H^'H(%HHu(L _'H D@AD$ mFr3H0[H|$@381HCHtOKHCHu 3H|$@H0[3H{{ H{({0H{8H|$@HC@HCHCPHH0[H\$Ht$DD$UWAVHp0>H+HHHHUE:HEHtHHuHHuHK$DE0HHMEu HE IcHHEHU0HMNuHNHEDEHUHKHE0HuHOEDEHK+EHUDHEHEDEHuHPE+EEHKH щHHC8Hu E̥HWUHCHH9u,HQHc~Ė^.HRHK@L> 3HC@HCHHMHOuNeDẺML$ L % .pU+HNHtHtH9tH3HEHHtHHL\$pI[ Is(IA^_]H\$W@@<H+HHHDD$ LL$0HT$hLD$XHL$8HD$8IyAf|$XtAu |$ht2AjL $ D$ mKoH\$PH@_HL$8HAHtHH\$PH@_H\$Ht$W0{;H+HD3JHt:HAHL$H3ED$ HD$H(KHD$H@0HD$HHHH\$@Ht$PH0_H H ̸(:H+HH Y H((:H+H< H(s̸(:H+H  H(̸(:H+L H(ã̸(f:H+L , H(飣̸(F:H+L H(̸(&:H+L H(@UVAV@:H+ALHHEHy8H\$`HY0Hu3H\$`H@A^^]Ld$8L|$0E3EH|$pD Kt|Y;sHM8DDOCICHc~){DL+D9cuuHDHLEAOH|$pLd$8L|$0H\$`H@A^^]HcSDCHM8HSљ~)CtC>Dc/DC$3BH+ƉC;C~Li"H "`HCHL$hDHD$hC DK$3҉D$ mHsLC0AHH LC(AHHD$ H$33H@A^^]̸(7H+HI8Hu3H(H(銖̸(7H+IIB<uH(H\$Hl$Ht$H|$ AV07H+HY0IEHHB= HeH HIHC(IAHC0HC(IHC0IAIHC8IAHC@HC8IHC@IALKXHCXI}H~8tb;u!LC8AHHD$ qt<;uLC@AHH~2;u HN8LEHa3HN8Ht}H\$@Hl$HHt$PH|$XH0A^f њ s H\$W `5H+HD@uHH@HHtHuH3H\$0H _H_0H\$0GG H _H\$W 4H+Hy0HHu 3H\$0H _HOHtH3CHC0C H\$0H _H\$W04H+HILL$ PfE3览~HL$ HHL$(H H\$@H0_H\$W004H+HILL$ PhE3W~HL$ HHL$(H H\$@H0_̸83H+HT$ LD$(LL$ P]E3 H8̸83H+HT$ LD$(LL$ P_E3هH8HH\$Hl$ WATAW g3H+MDBPEHHE}HcRTHI8Ht$@HWHLt$H ~P)wPDGPE~wTHcWTHM8HWH!MtLOXLGPHWHHAD'GTLt$HHt$@H\$PHl$XH A_A\_H\$W 2H+HH)ADHCHu H\$0H _3{C$HCHCHCHHCPHC@HC8HC0HC(HCXH\$0H _H\$Ht$W 2H+AIHHMt/LJXLBPHHЅuPH3H\$0Ht$8H _Ã{PD$POHt$8H\$0H _HT$UVAVP1H+IpILH0H~%D@HyHH\$pH$ HHIHH^LHHHLHH LH H$LL$0HT$xWLŹ D$8Lt$0V~XHD$xHkLHHD$8E3HCHD$@HLsHC(HC HD$8H\$pH$HPA^^]HtHhHtH3̺L 3 DBD$ jc3HPA^^]Ht$W 0H+IHMu 3Ht$8H _H\$0I3LCH 迏HA{HD$HHt'HC(HD$HHT$HHLCH 脏HC H8u3H\$0Ht$8H _ËH\$0+Ht$8H _Ht$W @/H+IHMu 3Ht$8H _H\$0IHK(Hto3HC(H\$0HHt$8H _Ht$W@.H+IHMu 3Ht$XH@_H\$PILL$ HCHӹ LPHCHD$(HCHD$ HC HD$0LCAR~XLCH 3SHAHD$hHt,HC(HD$hHT$hHLCH HK HDHu3H\$PHt$XH@_HHC K(+H\$PAȉHt$XH@_H\$Ht$ AV -H+IILMtOHl$0H|$8I9HO(Ht3Ho(I..H H|$8H+EHl$0H\$@Ht$HH A^H\$@Ht$H3H A^H\$Hl$Ht$H|$ AV00-H+AILH|*HĈHHu$L }H D@AD$ l`3OHH HL$`DHL$ LIHHE3E3AQ HϋHH諃H\$@Hl$HHt$PH|$XH0A^H\$Ht$H|$AV0U,H+ILD$`HHALeHD$hDLHIHD$ LD$`HI΋4Ht$HH|$PH\$@H0A^H\$UVW0+H+H$H3H$ AHHHSHH/HH輈HyQHT$ AH"ffHT$ DH0HT$ AHtHHPHT$ AH-~zfHc3HT ~!f u u HʅtHT$ DH蟋tH0AH膋HT$ AH賃E3E3HAQ ~HH}H$ H3H+H$`H0_^]Hl$ VWAW`-*H+3MHHH$HtHHHu3L VH DBD$ b]3H$H`A__^HHHT$@HHD$@H$DH HH.HHH!L ,HL+fDDB D+uH…uEHKHHT$0HD$0xHKHHPHL$HHHϋH$"HfPH2HHWHHu6L H DBD$ \HHHP37HHT$@HHD$@L$_HLHIHHH<L HL+DB D+uH…uEtiLL+B+uHutHL  DBD$ C[MFHJH7 HoBH& H^IH HHuRL 7H DBD$ ZHH3L$H$H$H`A__^HHt3HH~HHHHHz HL D¹ D$ AZpL  DBD$ ZHSH[3BH HEL ADB D$ Y3 L -HL+DBD+uHuEtyL&L+fffB+uHutML  DBD$ WYLCHHHK H3jH5 HmIHHGL H DBD$ X3 H H#L DB D$ X3@SUW`%H+HhH3H$PHH HHu'L ^H DBD$ 8JX3@H\HT$0HHD$0H$HHHHHHL@L+B+uHut<L * DBD$ AWLFH=G~H HHT$PAH訂ȅ~+fDHT$PHHT$PAH}ȅ33L b DBD$ <WH% H]3H$H$PH3c$H`_][H\$ UVWATAUAVAWpF#H+HH3HD$hH$L$3A HD$8HyL=ZH5 ELCA H HCMHT$0HH-A@MS HL$@/3D@$< }07D@HH |H LHD$`誻H H蛻HMH艻H2HIHLD$@H+LHHt$ SH<LLH>LD$@HJLH'H\$0Hl$8LEIHHl$ LL$@HLHHt$ HMHѺH"LH迺H(LH譺H>H螺HWLLH艺E3E3HHHl$ LL$@HGLHHt$(Ht$ R#$u H2Nu4$u H'3IuH&H /HH=uH)H-2H;LHعHAHɹHZLLH费H]MH袹HtH^LH苹H\LLHvHWLLHaHl$8HT$0EMHHl$ VHQ LH*HL$hH3 H$HpA_A^A]A\_^]H\$Hl$Ht$ LD$WAVAWPH+L$ALI^HhA@AHH{HL$0WLL$0HH$MD$8S~zHT$8DIQLL$0H$M MSH\$83ɅNH;tUHr{HL$8HvH\$8H;u4L   DBD$ ~GR3HEIH\$pHl$xH$HPA_A^_H\$Hl$Ht$ WAVAW rH+HHLE333 ftHAHIϽHlȋ'lHHtAH@hHt8LL$PUE33Ѕ~HT$PHq{HL$P78t-t@tu4HOHFHX=H4t%)t\Et3#HHzDHuHzI ;H\$@Hl$HHt$XH A_A^_H>Hz3H\$Ht$W0H+HH=HxHHu2L H D@AD$ -P3H\$@Ht$HH0_HHyE3HHHHHu L XH D@nD$ OE3E3HAQ pHxHEsH\$@HHt$HH0_H\$Hl$Ht$W0H+AIHA ssLD$`IHHu$L  H D@AD$ }AO3RDHHE3E3AQ HoHxHHrHH;uLHHL$`H\$@Hl$HHt$PH0_H\$Hl$VAVAW 7H+3MLHtOHkHHu3H@8(t3H|$@;],t A,H@8+uH|$@HMtIxkHHtH AbiHtH0HhIOH H\$HHl$PH A_A^^@S dH+HH HtHKHtHKHt H HH [H\$Hl$Ht$H|$ AV H+E3HHtEjHHu3HD80t,fD;-+t +HD83uIHt;HMjHHtHD80t&;*t *HD83uIH` A?HH_H =H(HpHHCIDHH\$0Hl$8Ht$@H|$HH A^HHHt7H LMt,L+B: uHuE3AEAAH E3AH9HAD+A@S H+HH HtHKHtHH [@UATAUAWHNH+HH3H$0LHL$ H *3E3LHeHT$0AI!qGH$xH$H$L$@HtL$0)uT$0E3Ht$0H\$0 L-E  GHAD I:HH^L;u1HIH IHHoE3H^A~h(ucDY)uTAO=uJ뎀;u'H˿IHLzE3H^"u "DVHƄLl$ uVt<"t='t CHÄu3HtIH9IHHRHC38HEσu?t <"f't CHÄu3HIHLHD$0H;tHT$0AInH$H$H$xL$@IH$0H3HHA_A]A\]HC38HErS x Ǻ Ӻ H\$ UVWATAUAVAW@FH+HH3H$03E33ILHHL$(H@82t@s H@8(uE2A_HT$0AHHD$ Hmދσu'3HD$08L$0t@s H8uu!3IA8]ts HÀ8uC;`HBHL$0A%uDHcHL$2IL%u,HL$2D@HH%AAEHc3HL/~!fD< u< u HɅEtCE2Ht HL$ H H^oHHE3E3HgEtHAHStDtHT$0DH CH5LŹ|2H\$hH0A_A^_^]r\CHsHu=HcD8<(t4L N DB D$ IBH\$hH0A_A^_^]3H\$hH0A_A^_^]uHA=H H;t6L  DBD$ TLBH\$hH0A_A^_^]LKLAH  H\$hH0A_A^_^]LL$`LD$pAH DD$`T$pD|$(AD|$ HLH\$hH0A_A^_^]E3D$(APE3D$(APE3D$(D$ AQE3E3D$(E3AQHu%L N DBD$ y9A(HQAHuC H\$hH0A_A^_^]HAHu C HAHu C HXAHu C 끺L 8 DBD$ r@a 6 - @UWAV@ H+H\$`Ht$hLd$p3Ll$8L|$0EIHDE3H|$ HHHtxHHHHHH3~JL$HEGMHHHSHtxHHStiH;|HT$ HAu^7؅x;,LHt.AIFHtE&HL$ HHIFHD$ HL$ HtL|$0Ll$8Ld$pH\$`HtHH/Ht$hHt HH躉IH@A^_]H\$Ht$W  H+3Hu"H8ts H@88uHC H ;XuHLcH(Ht%HH1rσH\$0Ht$8H _Ë@ H\$0Ht$8H _H\$UWAVPm H+AL轚HHu0L H D@AD$ =3H\$xHPA^_]Ht$pMH5>EIEH?8H HH4>+L s DBD$ 5=t'L g DB D$  =~3HSHL$0HD$8HD$0Ht$@ŤD$ L 6At'L : DBD$ <H3HCHTD$ L At'L  DB D$ ?<3H]HCHD$ L A`t'L  DBD$ ;WHCHuD$ L D@AAHHuD$ L D@AHChHKHD$ L Au uE |HKDAH։D$ vD$ L AA[L  DBD$ :WHCHu%L H D@AD$ :$uPH$HuHHuD$ L fAHCHH$HKHChu.AHHuHC`HCH+Hu;u6L W(DGHHD$ -'uD$ L A9L  DBD$ 98D$ L A 9HLƹ(H>3Ht$pH\$xHPA^_]Ð } c 7 H\$Ht$W0H+IHcHHtMD@HT$@ HT$@Ht:t H ;H;u&y4L 3 DBD$ 783H\$HHt$PH0_AH諜u2L H D@AD$ ;g83H\$HHt$PH0_H\$HHt$PH0_@USVWATAVAWH$0H+HH3H 3IEHHD$pL HV,DFHt$@DDHD$pD$|HD$ $t 3AL$xAvT$|DHM9Hu 3A2| 3HUELH\$ HHt|$pu 9uHT$@HtHD|$pHL$@HL$HtnLL$PLD$`HT$0HL$HDd$ ZD]D$@+D$HDAtDD$p3AT$0T$0DD$p3A AHcH\$tH H~${ D3ɋ׉{}AH[D;|HDALHHD$89~JH]ffKDKDSL$ HL$8{t HD$8HD$8H;|DL$pAt.L$tuAA DFDD$0L$ HL$8A+HT$HHL$8McQHT$XD3Lt$X5HHL$@HtcMtIVHH H3H0A_A^A\_^[]H\$Ht$H|$ AV@H+IMHcHHtMD@HT$02HT$0Ht:t H 7H;w&y)L  DBD$ 43AHtz+tt Ata|փ>uAHHMOZHHMOH8AZH]Hc}H߃}H]u }z)}_H;]HMA H녃 DEHEHUD3HEHHH]OHAHZ~ uH]AHY39~3fHFHMOH)DH;>|փ>AHAH9u}H]OHAH3{!uCCH\$@Hl$HHt$PH|$XH0A^@S`H+HjH3HD$XDɋLHL$@GLHL$0D˺ .HD$0L LD$@HHD$ HL$XH3H`[̃y!u'yu!A~|6H8u.xu(HHAtAt yAtA >3A ?3ø̸(&H+ }Hu Hl3uH3H(cH(H\$Hl$Ht$ W`H+3AHHH|$pH|$@H|$PH|$HHuB CCtVS H+-CtHHHN>HtHL$pHD$HHFHtN{~HDC DKD+HC(HC HD$0CML$(HL$pHӉD$ hHtTHD$pHcHL$@9t3HT$pHcLcHRHL$HCuC(+CHD$p8C HL$pHtHL$HHt3L\$`I[Ik Is(I_@SPTH+HD$@E3HD$0$DT$(D$ DT$@DD$@HEt!L  D$ HHP[H\$Hl$Ht$ WAVAW@H+HEALHDD$ LL$4LD$0HT$hHL$83HD$8yxL$0 |XL DǺ D$ HtHtH9tH_3H\$`Hl$pHt$xH@A_A^_^Au뜃|$0uDIHn|HtHHu JHHtL$htIH# AkHHuxA?LcD$hHT$8HHcD$h8HcL$hHL$8HCHt HL$h H{D$0CHtHHD$8IHH\$ VWAW0MH+EAHHHu3H\$hH0A__^Au~H\$hH0A__^Hl$XLt$`D1A3yHtFH3HL$PHD$PGDσED|$ LcHSHL$PHcHD$PHHl$XLt$`H\$hH0A__^Ht$Ll$ UAVAWHl$ѸrH+}wEMcLH~HE3H$HtHHuHH{IELMLEHUHMH$HEDt$ yHEfD9}tHE t_HM߉EE3E Eo}LmHMED}EuH}J1HEDEwHUHu HMEGHEMυ9 | H{HuRHAHHu%HEAHtHtH9tH,3eHKHtjMHULcH HcE8HcMHMHC3Ht H3Mω H{D{HEHtHIEHH$H$L$Is0Mk8IA_A^]H\$Hl$Ht$WAVAW0bH+\$p@2EH=ADu?H 9HeHu'D$ L DBJ3AHuAHHAHuD$ L 밃D0H@X@` XtptxDx @tH ķHH\$PHl$XHt$`H0A_A^_̸(VH+H HtHHmH(H(̸XH+HlH3HD$HAL$0HH HL$0EAHD$ +HuL|$0MMLHt$nL HDD$ IN 2dH;AB$ 薱HHu#L PnH D@AD$ 0HL$HC$LD$`LIHH\$hD$ ).HcD$`H$LD$`J(HΉy-D$`HN`L$MHH\$htD$HI ,AHN`3H6L|$0Lt$8Ll$@Ld$xHt$pHtH-HH_]@SUVWATAUAVAWH+HtH3H$Lc$8H$(L$ L$03AILD$XHT$PHL$@HD$HM~I ރ9uVHI \0;OHI;| 6HAXگHHuHL PoH D@AD$ ZtoL kD$ QJDBOH\$@Hm,HK`5HT$XHK`/HB8$8HT$PD$0HD$HHMLLt$(HD$ D~NM~AL+fI >HI c/HHDE*HADHLcHHHI;|D$8HdHL$`@AH$H3HĸA_A^A]A\_^][@UVWAVAWH+HsH3H$Hc$MHLAILH`I0H$L$L$AfA;LD$0AOHT$@ILΉ\$ AD$0LL$@LD$0HIΉD$ *HcD$0AHHc+HL$L$H$H$H3HİA_A^_^]H\$Hl$Ht$H|$ AV0H+IIHLAH"HHu"L mPsH D@D$ Q31E3MHAPjhLLHH7HHHH\$@Hl$HHt$PH|$XH0A^@UAVHl$H+H#qH3HEH$H$H$3L$L$L$LMLEH}H}H}lj}LHHMHu0ϴLHu&L WtO EEAD$ kL\HHHELMLEHUHDHD$ D DLML-IM+B +uHuLIM+B +uHu[LIM+B +uHuu:H2H>*HI蝴pHHDLIM+fB +uHuuH~H=uH~LIM+DB +uHuulH~H_H~8~0蛄HFHHMHx3A8t=s H9u ,LMA2LIM+B +uHuulH~HIH~8~0 HFHHMHx3At8t=s H9u LMAL~IM+B +uHuH~Hy:;H~8~0wHFHHMHx3A8tfD=s H9u ~ALMHHHtuHME>HUwHELMHULEHMHD$ jQHEHEEDMLEHAHLM3MtIHMHtHMHtHMHELMLEHUHD$ H}H}H}DDf^%lH>uH~uH~uH~8tHI`t}HvDEHUHH7D$ L 9HVR3t=HEHF8EF0LMH}D$ L jtJDB3]HtH/u>I΋~ IӱH I;|M;tILHML$L$L$H$H$H$Ht_HMHtQHMHtCIHMH3HA^]@SUVWAUAVAW諿H+HkH3H$L$xL$3IIHLMt7It Hu#L PUuM DEqD$ AHSL$HJLc8MC0D$@Hu#L WuO DGD$ NhHKJ HHu#L PuH D@qD$ _-8tfs H@8(uG A=vLH e"H$ @$DG LK H$H D$@L$HMI͉D$ +HR$pL|$0HR LLILt$(D$ 10~HHt I4~L$HL$PH$H$H3yHA_A^A]_^][H\$Hl$Ht$H|$ AV0PH+IIHL8HHHu"L PfH D@D$ 3EE3LHAPj8HD$hLHD$(HD$`LHIHD$ C6HHHH\$@Hl$HHt$PH|$XH0A^H\$Hl$Ht$H|$ AVP耼H+IIHL7HHHu"L EPhH D@D$ M3nE3LHAPjhH$LHD$@H$LHD$8$HՉD$0H$IHD$(H$HD$ (HϋH\$`Hl$hHt$pH|$xHPA^@USVWATAUAVAWH$x葻H+HfH3HpHLLHILD$hHL$XHHD$HHL$P3HT$`DًDHtMH2 LHt HRu%iL D$ fJDBnHD$H3HADy(iL D$ lJDB5E3HHArXHHu#L PiH D@AD$ tqHL$HHT$pHD$pA։D$@H"Mu[HD$XLL$PEGHMpHuXD%iL yD$ JDB}D$@L}pDWҋH~ ~LMH f|V HM H\$8LE HHE0MHD$0HD$(Dt$ 6rHEpL;uHMpwE3IAA8 $ts H8uF A=vLH ˜H|HMpA]p H#HMpA HHMpA DF LM HMpI"HMY(HE LM0HME3HHD$ 83t:D$@LD$DHMLH׉D$ H3tHcT$DLD$@HMH^1uAHM>%t>D$@D$DD$@ EpE3HT$`HL$hLEpLωD$ D$@ANHM0@HM HMHMpHtAHH HpH3苸HĈA_A^A]A\_^[]@SUVWATAUAVAWiH+HbH3HD$pH$H$L$3HD$PIMLHD$0LLL$8LD$@HT$HHHD$ Ht$HHt$@Ht$8 taH\$HHHH0HL$@&HL$8HD$0LL$8LD$@HT$HHHD$ uR%luHaHLf3HL$pH3WHĈA_A^A]A\_^][Hl$@HT$XHH|$8t@HD$PLD$0HL$XMHHD$ tD$0I?A$MtIMuHPHHuH4tdL D$ tJDB :L3H۵Lt$PL|$XH\$`H0_^]H\$Hl$Ht$W vH+HIcHAIHUAHHDHAH/E3HA8tf=s HD8 u mȁVLŅ~?HcDLi HHRHHB JHOB JIuHcIcH Af1 H\$0Hl$8Ht$@H _@VWAVAWXoH+H^H3H$0H9E8IL$MHHD$Du E3H$PH$0Hu9Ћ؅'jL D$ JDB_3-H$HHn'HHD$8HH$L$0LHD$0D$(\$ /HL$PD|$@("HL$HL$PE3Hl$ )؅tuHtvH1HHtHHtl[HHAGHXI~9HT$HD3-Ht%H9tDL$@LD$XH諣HHu {L D$ JDBHL$HZHcT$@HL$P蚽HL$PZH$pHH$`H3EwHxA^_][H\$Hl$Ht$W@&vH+H3IIHHu$L H D@D$ k3HL$XMHt*HUPHL$XMcytHU0HL$XE3$uDHL$XsEJ'HAs%L ID$ JDBE}Lv[ LM0HME3HH\$ aML$LD$0HMILD|$ ;HcT$0LD$0HMIOAFAEFA AFD AD ARSA2ADSS23HE5fE=E? LM0HME3HH\$ HM0ǯML$LD$0HMLID|$ wHcT$0LD$0HMIYAFAEFA AFD AD ARSA2t;u/L  DBD$ wH\$PH@^ÃH\$PH@^Ht$W @ZH+HHL$@E3HD$@DyHt$0H _HT$@DHHL$@T>;DHt$0H _Ht$W YH+HD@HL$@HD$@yHt$0H _HT$@DHoHL$@=;DHt$0H _H\$Hl$Ht$WAVAW RYH+HDMHD@DH`HAI?HHtNHEtAHIH[AHuE3AHoQHID=I?t L73H\$@Hl$HHt$PH A_A^_H\$Hl$Ht$W XH+HHJAHQZHσHVDtHVAHbHV DHSHυt HV(D HV0A4HH\$0Hl$8Ht$@HH@H@HH _H\$Hl$Ht$H|$ AV WH+HLHAHYHϙHHc_QřLC+L~'fffA M@AHH[HuI.~+~IHc3LwXIH\$0Hl$8Ht$@H|$HH A^H\$Hl$Ht$WATAUAVAW VH+LHJEHXHMD,AXHU DxAIAHuIHxXH΃HHcNPǙLC+L~&ffA M@AHH[HuI>EuZHU0EIOHU8EI@HU@EI1HUHEI"HUPEIHU(EIH\$PHl$XHt$`H A_A^A]A\_HHHɗHHHAH\$Ht$W0[UH+IHHHt7HH誁Ht_ALHAHD$ xu=HtJ艷HHnHt#ALHAQHD$ xt3H\$@Ht$HH0_HtH\$@Ht$HH0_@S0TH+H)HHHu3H0[AE3HAQHD$ 3xζHH賀HtAE3HAQHD$ xxH0[Ht$WAVAW0SH+MDH[gHHu/L P{H D@AD$ ME3Ht$`H0A_A^_HH\$PHHI(Hl$X+Ct+`HHHHHHhHTtvHHStgHK 3H (HtTHK AiրQHI(Ht;HHHHTHϋ[7tR*IHL贏u Hxe3Hl$XH\$PHHt$`H0A_A^_DD$S RH+HAu3H [HHHH JLD$@Hˋ H [̸(VRH+HH HRHIH(≮(&RH+D@HHHHH(SH\$W QH+HyHHtyt3c^yH\$0H _Htt3H8^xHcK +G uHWLHKRH\$0H _@SPdQH+HH3HD$H3H]#*HcS HKLD$0E3HD$(HD$ PuHL$HH3QHP[L$2D$3 L$1 L$0 HL$HH3QHP[H\$WpPH+HH3HD$`3H32]HL$ xSHL$ e'HL$ HE3薷tRHWHL$ LHRݹt9HT$PHL$ E3臶t#L$Q\$SD$R  L$P HL$ 趹HL$`H3PH$Hp_@UATAVAW(OH+EILLAu3H(A_A^A\]H\$PDL$hHt$XHuI AL3IH t 83bIH|$ HHI0CHH8HH ٧HHha=umAr <AD$hH>;}I1bH͋U@HLH usH*3IHt#HI0ICH=uUAr<U3LD$hH؅u@H>;|IaLD$hHϋ8:393HtH2H|$ t)CŃwt΃H!=IH0LHNUuHNHt(H;;|3Ht$HH\$@Lt$PH A__]IH\$Hl$Ht$H|$ AV 0KH+HH3:~wH3H(HH@(H\$W JH+HH:HWHKSu HWHKH\$0H _H\$Ht$WpIH+HH3HD$`HHL$ 3jHE3HI3H HL$ HE3聰H8t=s H8uDHL$ HA諲t]H-HHL$ HPDHR臲t9HT$PHL$ E31t#L$Q\$SD$R  L$P HL$ `HL$`H3IL\$pI[Is I_̸(HH+HH HRHIH(l̸(VHH+H HIH(̸(6HH+H HIH(S̸(HH+HH HR(HI(H(̸(GH+H HI(H(c̸(GH+H HI(H(H\$W GH+IH9HI HHY=uHtt;H\$0H _Ër<H\$0H _3H\$0H _=u"tut3H\$0H _ø:H\$0H _ø9H\$0H _H\$ UVWATAUAVAWFH+H H3H$E3ALHT$8HHL$@Hu1LH(HȋIOD!RHu2Mt MgI*HcH ILVBD#HE3H\$H3ۉ\$05^fDHV7LH諔tHHuMHL$`PVHl$`E3HA@8}tfs HD8uIF0SxLHu{%}ȃugAAAL$XT$TD$P~0ILƀ9tHƒDPHHIuL$XT$TD$P D$\ uHD$TDD$P D$\D$PD$TD$XAȅ~3ILfDHƒ|PtA, <^vHIIuIcA9DAIMtAEIHcI_D;l$HI/HDHHcEHcHHC=IFL@~h3LL%fDHƒ|Pt9AA^w H&f\xHHHB CB!CHIIuLd$8H|$@\$0HÉ\$003;Mt MgI'|$0uA$IH$H3XDH$HA_A^A]A\_^]D$ L nAA&D$ L 7D$ {L AtJvI;3|̸(BH+H H_3HH(̸8BH+H D$`H(D$ o`3HH8ø8BH+H D$`H(D$ `3HH8ø8VBH+H D$`H(D$ ?a3HH8ø(&BH+AH(H\$Hl$Ht$H|$ AV AH+ALH3=HHMHGHHWHLIqHGBHHt`0HCHtRHH1tC3͉{賎HHH9x(u0HHA(HtHHHI(1tHDBH\3H\$0Hl$8Ht$@H|$HH A^H\$Ht$W0@H+3HHtH HtHI M5HHHH#tGt+tD$ L AtfD$ L AsO=uD$ L A/uD$ L D@VD$ L %Au sHX$Ht$HH\$@H0_̸(?H+H HI(H(#_Ht;tBHu3ø̸(?H+H HI(H(c`̸(f?H+H HI(H(CR̸(F?H+H HI(H(s`̸(&?H+H HI(H(`HIH\$W >H+HHt7H9t1HHt%;t HAHI(QuH;u3H\$8H _HHI(_H؃xtHXHH .tHK3/HHt;uHKHQHT$0MHT$0LHC3D臧H\$8H _̸(>H+HtH Ht HI H(23H(H )H\$Hl$Ht$H|$ AV0=H+MHH/=HHuCL P~H D@AD$ O qH<3H\$@Hl$HHt$PH|$XH0A^HAVHĀHCAH$HKHAHCHHHtHHH<tHHHuHHBH΋I!XHtMHHw=H?H\$Ht$W0<H+H%3H8tfDs HÀ8uKHAX#HHu2L H D@AD$ Yo3H\$@Ht$HH0_DHHmy:L D$ ^JDBioHA 3H\$@Ht$HH0_HT$PD3H|$PdHH Ht$HHH\$@H0_H\$Hl$Ht$ W0v;H+3H dH Apȋ" 6HAqH!HHt2Ht-HT$HHH|$HcDHHHfH2HYHQL JDBD$ uQn3H\$@Hl$PHt$XH0_̸(:H+HtH Ht H H(/3H(̸(v:H+HtH Ht H(-13H(@SATAVAW8>:H+Hy@MMHLYHz@NHy8Hz8 HH HRHIt.iL hD$ aJDBLm3H8A_A^A\[AZHI,u,L jPiH D@nD$ f m3H8A_A^A\[AHIl,u,PiL FH DBD$ jl3H8A_A^A\[IV8HK8.iL 'D$ oJDBl3H8A_A^A\[MtLII[~IH[.iL D$ uJDB:l3H8A_A^A\[Hl$hHt$pH|$0H[HHbH;MHHHR:6HHHR:HHHR :;MF83DNHωt$ 'LHˋM~0HvLAHHLHL;|HHh(HR'~PH$)HT$`ILHZu!HZHD$`HtaHHXtHH';|MtMtMIHvpt(HHt$pHl$hH|$0H8A_A^A\[HL$`ZiL f~D$ JDBjHtHX3몺iL U}D$ \JDBYj3H8A_A^A\[úiL }D$ WJDB+j3H8A_A^A\[H\$W 6H+H3HHt HHO(HtH9uH_(HHt HHHtHH%HLH׹@H\$03HHH _Ht#S 5H+H5HH [HHHH̸(f5H+HHu3H(H(WHH̸̋̋(4H+HH(?̸84H+HD$`HD$(LL$ ML‹ѹ"@H8̋H\$Hl$Ht$W0v4H+33HLALIiHi HHi0HHHHHHHHHHHH HC(Hu%L 3|M DEAD$ RgHt%HWH<HO(HK@HOpHt) HHH {,HK(HuD$ L {8Ht HG8HuHHCPHt HG0HuHZHCHHt HG(HuH2HC@Ht HG HuH(0HC8Ht HG@HuHHCXHtHGHHtHC`Hk`Ht HGPHuHNHChHt HGXHuHHCpHt HG`HuH aHHt HGhHuHbHHLHӹHCx*>t,D$ L zAAAPNAHeH3H\$@Hl$HHt$PH0_@S01H+HyAT HHu(L yH D@AD$ V "e3H0[3AH2HH0[H\$Hl$Ht$W0f1H+AAHEutmfEu)D$ 0 L xAy Q{d3Dxu$$EuD$ 8 L x뼋DuXt!EuD$ E L xD@y독t HE(xuxt HE(xuXH\$@Hl$HHt$PH0_H\$W `0H+HHI(HHtH{(H\$0H _HS(H\$0H _@S 0H+HH覙HuH [HK(HH [j̸(/H+HI(H(v̸̉(/H+HH(;̸(/H+HI(H(6̸(f/H+DE33H(̸(F/H+HI(IH(C̸(&/H+DE33H(HQ@H9*HQ0HAHø(.H+3H(@UVAVH츀.H+HH3HEDQD LALHAu,AAwA@AI HMA fE(3AA wA@AI HMA EAH$3EBJUǃH3PH$L|$8Ld$@Ht$HHl$PHtjMtI}4u ǃHXA^A]_[H\$Ht$W !H+HA(IH@Hu1Bt(ǁ$H3S@u3H\$8Ht$@H _HT$0LH4Ct6HD$0x uH\$8Ht$@H _H3ǃS@tH\$8Ht$@H _H\$Ht$W H+Hq(HHFtH3HHHH H u/ǃ H3HS@u 3H\$0Ht$8H _~ ǃ HHHH HIu2ǃH3HS@tH\$0Ht$8H _yǃ H\$Hl$Ht$ WATAUAVAW H+Ly@E3E3HٍpL9t3Dh'HA(H Dgx#F/HHC(DhE39HcHD$PffHHK(AHu0@@t'H3ǃ"HAׅH|$Pu0G@t'H3ǃ(HAׅiH6Ѓt)tt0HK(A tMtHtBǃ%HC(@ t,v'ǃH3ɉHAׅHC(x~NE3AAH17tHK(A t,t'H3ǃHAׅ~;G@ u5G8t-AD;~#H3ǃHAׅtcG@ uA s;GǃH3S@tHRH\$0Hl$8Ht$@H|$HH A^@S H+HHt 3H [LILHHL$ u H [HL$HHC H$0H{(HD$@HtHC@HL$ H|$HHD$`H$Q~KHH$H HˍP HH HύPs HHh3@HL$ VH$0H [H\$W H+Hy@HHu 3H\$0H _Hz8tHH HIHRuD@ZHHv tAHHa tHS8HO@HS8HO8H\$03ɅH _H\$Hl$Ht$WAVAW0H+HH LINM~3Ht;I7ޅ~/fI6 ENE3HHL|$ 迺';|Յ@ƋH\$PHl$XHt$`H0A_A^_øH\$Ht$W [H+HA(HqHHx0H?tLHH=HCH3ǃ>ǃHS@u3H\$0Ht$8H _HWHt>LG E3H/+HCH3ǃ?ǃHS@tHW(HtBLG0E3Hh/HCH3ǃ@ǃHS@\H\$0Ht$8H _H\$Ht$W ;H+HIIH/ȅuAH\$0Ht$8H _HC(@u3H\$0Ht$8H _ÉH3HHHC@H\$0Ht$8H _HH\$Hl$Ht$WATAUAVAW0H+HHfHHt @@ ~@@H,HLILE3c#DhA} ACIF#Iύx;#;t ACAUIP#AIHB#O9HuACaIHHAH"HLHpd uIHtACI^HEt$H3DHS@Hx;~WffHHPxHt0HIt$toH3ɉHS@tZ;[H\$`Hl$hHt$pH0A_A^A]A\_újL =]D$ &JDBHǃ3@S0tH+HHt H0[LI(LHAAMI(HD$ ?iu2L 4]H D@AD$ Gǃ3H0[ÃHH|$@xl;~NH2@@tH3Hǃ*S@t"H;|H|$@H0[3H|$@H0[Ãu&H3Hǃǃ+HC@H0[HHC(@HӹHǃS@H0[@SPH+HA(HًHu HP[Ld$8Ll$0E3tHID`!L9tLd$8Ll$0HP[EHl$pHt$HH|$@Lt$(L|$ EEVHADLl$`ILl$hLLH@@HDLK`DHT$`HMtLALD$hL#Ht$hHT$`HHShHt&HHShtvLHHSptdtHT$`LHSptKHL$`Q3HI3Ll$`ILl$hD;t =6H3ǃS@HL$`3H2Lt:AE;Lt$(Hl$pHt$HH|$@L|$ Ld$8Ll$0HP[3H\$Hl$Ht$W H+Hi@HH:;}kfDHHK(E3QHH fu"H3ɉHǃՅt~H;|HC(@tfH9|DH3|HHHHt1HL3XH"ǃ H\$0Hl$8Ht$@H _H\$Hl$Ht$H|$ ATAVAW |H+HHHHhMML;tHIV HHO%uA tAI4$H;}LfHbHHHHܼuIV H$t~HJ;|HG(@tqHO3.~bffHOHHZHHouIV H$tHO;|A I4$I4$AH\$@Hl$HHt$PH|$XH A_A^A\Hl$WAVAW H+B0MEHHu A@tt&3Hl$PH A_A^_èt3Hl$PH A_A^_ËB4H\$@Ht$HAHIh3+~NHMhEHHHdtHW(HtNHHu?HMh;|HG(HtH8uA u!3H\$@Ht$HHl$PH A_A^_ËFA!H\$Hl$Ht$H|$ AV H+ALAHi!3ۋx)DHT!uH%!H HHAI'!x&DI!u?I HHHu HuGHtHHË3H\$0Hl$8Ht$@H|$HH A^Ht$W H+HHHIHpHuAAAHt$8H _H\$03X~3@HO%8uHHH褹t!HO%;|3H\$0Ht$8H _H\$0Ht$8H _H\$Hl$Ht$H|$ AV @ H+HHMH3~1fDHIHLHUPu+H;|3H\$0Hl$8Ht$@H|$HH A^HH\$Ht$H|$ AV` H+3HIILHD$PD$pHD$HHD$X,LC DLD$0HHD$@HD$(DL$@HD$pLL$PLD$XHT$HHHD$ Yu]HHHHu HL$HHuIHD$0HD$@LL$PHD$(HD$pLD$XHT$HHHD$ H+HHL$HHt2HD$PHD$pD$@HD$XIH3L\$`I[Is I{(IA^Hl$ HT$VWATAVAW t H+A(E3IEI0MLAD|$`AuHA(@uA`t=3Hl$hH A_A^A\_^A@tЅF4u3Hl$hH A_A^A\_^H9~@uHL$pH\$PH莾HSHt F0 u3 |$`Fu|$`IF(@tLxHIHI+HHH HtIty At@|$`LD$XLL$`HI\$`pHL$pLL$`DH#tL$`ЅG A,$H\$PHl$hH A_A^A\_^LL$ LD$HT$HL$SUVWATAUAWpH+HH$L$(E3IEH\$PAL|$HL|$@AZL$Lt$h@ILD$0HT$HLH$H\$ MΉL$0I;|RtN;u4Ht/MLHT$8MIM@HL$4;t$|$4|$8~Dl$0ILt$HLt$@Lt$@IdH\$P;WAHH$H Hts(H$H$H;L0H$.HOL CODBD(D$ H$H Ht(L;H$LLHLd$ ,Lt$hAAHpA_A]A\_^][ATAUAVAW8H+HA(MM@ LLHDP@E QA snH\$`Hl$hHt$pH$3H|$0H΋ ~*HIHHu3H;|ImHt$pHl$hH\$`H|$0H8A_A^A]A\IF(@tHhHHHIP)HHH HtH7ty AtA $HOL MDBD$ I}j@S0H+HHR0HH?HHt,HHL KDBD$ AH0[H0[@WAV(RH+HLHMHD9H\$@Hl$HHt$Pu4HiHt}:u HRHtoH3@ƋHZ:u[HjHtDHYHtIH3^~-H08uHPH诱tH1;|3~HI3L|$ ~afINHOL~,HOIH*tHLt$@+HLF;tFtSHpAv΋HN;H};}HvH;|H|$8Hl$0ILt$@H\$HH ^3H\$HH ^̸(H+Hu3H(H H(;H\$W H+HHt$H ;~xHH\$0H _3H\$0H _H\$W @H+HA?HuH\$0H _DHHH\$0H _H\$Ht$ AV H+ALHuH\$@Ht$HH A^Hl$0H)HH|$8H;Ë;}"HIH Jt#;|Hl$0H|$8H\$@Ht$HH A^ËH\$Ht$W KH+HAI>HuH\$0Ht$8H _DLHHH\$0Ht$8H _H\$Hl$Ht$WATAUAVAW H+EILLHt9L9IO3ޅ~$DIIHIt&;|H\$PHl$XHt$`H A_A^A]A\_ÅxI;~IHtHpAM;OHtHVHcHLR+H\$Hl$Ht$W0H+HIAC=HHu"L lFPlH D@mD$ M#3$LDHH(HHuH|HH\$@Hl$HHt$PH0_H\$Hl$Ht$H|$ AV0pH+MAHHHtHHu-蟴HHu L EPmH D@AD$ "aHtJH |HGHEHKCEIVtHt H?uHHHtH;tH3H\$@Hl$HHt$PH|$XH0A^3Ht9AHu3HAHu3ÃAAEAø(VH+Hu3H(DHIHR3ɅH(H\$Hl$Ht$WAVAW0H+3ALHHu#L DP8HD@D$ Q!HHu /HHt9H?D;HDI訲HHt?EHHBuUhL BDD$ JDB HtH聲HtH3H\$PHl$XHt$`H0A_A^_H?uHHH\$W H+HA@:HuH\$0H _DHHH\$0H _H\$Hl$W H+A؋HHuH\$8Hl$@H _øHt$0H;}#HH~u&t;|݃Ht$0H\$8Hl$@H _Ë̸(H+Hu3H(H(̸8H+H H0H8z̸(H+H H03HH(̸(H+H HI0H( ̸(vH+H HI0H(S ̸(VH+H HI0H(3̸(6H+H HI0H(c ̸(H+H HI0H(C̸(H+H HI0H(̸(H+H HI0H(z̸8H+HH8x̸(H+Hj3HH(̸(fH+HIH( ̸(FH+HIH(& ̸(&H+HIH(̸(H+HIH(6 ̸(H+HIH(̸(H+HIH(̸(H+HIH(Vy̸8H+H HHH8w̸(fH+H HH73HH(̸(6H+H HIHH(̸(H+H HIHH( ̸(H+H HIHH(̸(H+H HIHH( ̸(H+H HIHH(̸(H+H HIHH(c̸(vH+H HIHH(#x̸(VH+yu HIH(3H9AH(H\$Hl$Ht$W0H+HIAS5HHu$L >H D@mD$ [3,D$`LDHH͉D$ .HHuHtHH\$@Hl$HHt$PH0_H\$Hl$Ht$H|$ AV0pH+IEHHHtHHu/HHu"L H>H D@AD$ THt=H tH?DL$`LAHHtHt H?uHHHtH;tH3H\$@Hl$HHt$PH|$XH0A^H\$Hl$Ht$H|$ AV0H+HL3HIAg;HHu6L =H D@wD$ Hl=OL- 3'D$`LDHIΉD$ HHsHH\$@Hl$HHt$PH|$XH0A^H\$W0H+AUHHt,H5;t-L E=D$ vJDB!3H\$@H0_HCH\$@H0_H\$W pH+HHu 3H\$0H _Ãyu HI 3H9A;}Ճ{uHKH\$0H _HCH\$0H _H\$Hl$VWAUAVAW0H+333EMLHu32Ld$`DAtNH {3DEI3ɉD$ 'HHu%L ;H D@ D$ 4h-At'HHEIHtqIFHtaA~uH*|ntHHt=AuEuMŋHt!LËHk3INHuL -;D$ XJDB)HsH3Ld$`H\$hHl$pH0A_A^A]_^H\$W `H+HHHt(Ht#H 5pH;HH\$0H _3H\$0H _H\$Hl$Ht$W0H+3HHHu L :PWHD@D$ HnHHu )HHtHHHtHJD$ L %AHJD$ L u%AeH\$`Hl$hHt$pH|$xH@A_A^A\@S H+H#HpA蜲HHuH [H H|$0}HC3H{ H{(HC5HCHtHLCxOHH{0H{8H{@H{HH{PH{XH{`H{hH{p?uHKҸH誯3H|$0H [H|$0ǃHH [̸(H+HIH(5̸(H+HI8H(ø(H+HIH(8HQh̸(H+HIH(8̸(H+HIH(8HtIS `H+HكuHIHH [靮u HIH臮H [̸(H+LHA+u/ttH(HRIHH(wHRIHH(鵁H(@VW(H+HuH3H$T$ IHt-tH$LD$PHD$(HD$@H$%H$pL$HD$(H$H$pHT$ H$ |xzHtuHH$PX訸;}P@Hv;L$ u:tu"HT$(HHvHT$(HH踀uHX;|H$PH$ H$H3H(_^H\$Ht$W@{H+IHH LNHVHHH\$0E3H|$(HD$ 5H\$PHt$XH@_H\$W0 H+HHLLGHWHH\$ H\$@H0_H\$Hl$Ht$W0H+IIHHRLLHHH|$ H\$@Hl$HHt$PH0_H\$Hl$Ht$W0fH+IIHHLLHHH|$ 謝H\$@Hl$HHt$PH0_H\$W H+HHHHLH\$0H _ZH\$Ht$H|$AV@H+HIH@DHLMNMFHSH|$0HHt$(H\$ tH\$PHt$XH|$`H@A^H\$Ht$W0KH+HHH@DHLNLFHSHH|$(H\$ 貕H\$@Ht$HH0_H\$Hl$Ht$W0H+IIHH2LLHHH|$ ,H\$@Hl$HHt$PH0_H\$Hl$Ht$W0H+IIHHLLHHH|$ ̛H\$@Hl$HHt$PH0_H\$Ht$W@+H+IHHLNHVHHH\$0E3H|$(HD$ H\$PHt$XH@_H\$W0H+HHLOHWHHE3H\$(HD$ BH\$@H0_H\$W0H+HHRLLGHWHH\$ ZH\$@H0_H\$Hl$Ht$W0&H+IIHHrLLHHH|$ lH\$@Hl$HHt$PH0_H\$W H+HH"HHLH\$0H _H\$Ht$W0H+IIHxHuH\$@Ht$HH0_HcHHLLHD$(Ht$ u(H\$@Ht$HH0_H\$Ht$H|$AV@H+HIH@\HL'MNMFHSH|$0HHt$(H\$ đH\$PHt$XH|$`H@A^H\$Ht$W0H+HHH@\HLNLFHSHH|$(H\$ H\$@Ht$HH0_H\$W0@H+HHHHRHI觳t 3H\$@H0_AL LCHSHH|$ H\$@H0_̸(H+LLHfHH BH(v̸(H+LLH6HH BH(ƀ̸(vH+LLHƹH OBH(̸(FH+LLHH BH(f̸(H+LLH8H ]H(̸(H+LLH8H ]H(̸(H+LLHƹH ]H(V̸(H+LLHH _]H(H\$W PH+HHrLHHH\$0H _*H\$W H+HH2LHHH\$0H _z̸(ֿH+LLHH /H(v~̸(覿H+LLHH H(~̸(vH+LLHƽH H(~̸(FH+LLHH oH(f~̸(H+LLHH ϥH(}̸(H+LLHH H(~̸(趾H+LLHfH oH(V}̸(膾H+LLH6H ?H(}H\$W PH+HHLHHH\$0H _*~H\$W H+HHRLHHH\$0H _z~H\$W нH+HHBLHHH\$0H _}H\$W 落H+HHLHHH\$0H _}̸(VH+LLHַH H({̸(&H+LLHH ߻H(F|H\$W H+HHLHHH\$0H _|H\$W 谼H+HHBLHHH\$0H _}H\$W pH+HHһLHHH\$0H _J|H\$W 0H+HH蒻LHHH\$0H _|H\$W H+HHBLHHH\$0H _{H\$W 谻H+HHLHHH\$0H _|̸(vH+LHH BH(̸(FH+LHH VBH(靀̸(H+LHH vH(̸(H+LHH FH(≠(趺H+LHH VIH(-̸(膺H+LHH &IH(̸(VH+LHH fH(~̸(&H+LHH 6H(}H\$W H+HHLHHH\$0H _H\$W 谹H+HHLHHH\$0H _jH\$W pH+HHHHu H\$0H _H XLH}HϋsH\$0H _H\$W H+HHHHu H\$0H _H LHM~HϋH\$0H _̸(趸H+LHH H(-}̸(膸H+LHH H(}̸(VH+LHH ƶH(|̸(&H+LHH H(}}̸(H+LHH H(m|̸(ƷH+LHH H(}̸(薷H+LHH vH( |̸(fH+LHH FH(|H\$W 0H+HHrLHHH\$0H _}H\$W H+HH2LHHH\$0H _}H\$W 谶H+HH"LHHH\$0H _|H\$W pH+HHLHHH\$0H _*}̸(6H+LHH fH(z̸(H+LHH 6H(]{H\$W еH+HHbLHHH\$0H _{H\$W 萵H+HH"LHHH\$0H _J|H\$W PH+HH貴LHHH\$0H _:{H\$W H+HHrLHHH\$0H _{H\$W дH+HH"LHHH\$0H _zH\$W 萴H+HHLHHH\$0H _J{̸(VH+C/LHcA IHLH(HHH(HdH(HxH(HH(HH(HH(HH(HH(HH(HH(H H(H$H(HHH(HlH(HH(HH(HH(HH(HH(HH(HH(H$H(H0H(H<H(H`H(HtH(HH(HH(HH(HH(HH(HH(H H(HDH(HhH(HH(HH(HH(HH(HH(HH(H<H(HhH(HtH(HH(HH(HH(HH(HH(HH(H0H(HTH(HpH(HH(HH(HH(HH(HH(HH(H$H(H0H(H<H(HHH(HlH(HH(DLH Jd`JH9H(Í )5AMYeq} %1=IUmay   ! - 9 E Q ] i u    @S ԯH+HHHtH8uHxt IH [E3HZC@ ЃH [̸(vH+Ht IH(MH(@S DH+HE3HC@ ЃH [H\$U H+HHuCH\$@H ]HKHt$0H|$83Ht2U~'HK%H};tgHK.;|H Ht6~-fH H>;t/H ;|ܸHt$0H|$8H\$@H ]øH\$Hl$Ht$WAVAW`H+AMMwy+L$0H HuHT$0u xuOH{A(kHHu'D$ L tJDB3@3y3+}HcH HHH W賞HCt HK葑IHCHuD$ L x$c kCH$3LsHC u[HHu,H X茛HmHuD$ L HHuD$ L L\$`I[ Ik(Is0IA_A^_H\$Ht$W KH+HpH{Httt HK 肐HzH(HuH ~HΛH\$0H5~Ht$8H _̸(֫H+y3H(Ã}HcH H%HH(ÍQH J~H( ̸X膫H+AwAHXÉL$ H ~HuHXHT$ 葘tHHX̸(6H+H }HuAH(誚HH(H\$W`H+BHwB"H }T$0Ht)HT$0ttH\$pH`_úL F DBD$ H\$p3H`_HH H\$Ht$WP[H+AHuBH\$`Ht$hHP_ÅuEHE3E3HG@ ЃH\$`Ht$hHP_ÍBwJ"H |T$ Ht8HT$ t)Ht!DHHH\$`Ht$hHP_H`DH׋H\$`Ht$hHP_Ht2S `H+AH٨tt HI覍H融H [H\$W0 H+3MHAu]rSHHuOSAHHÅu[L fSeK DChD$ o7H\$@H0_IAuEIËH\$@H0_EËH\$@H0_HH\$ AV0?H+3HLAtH\$XH0A^HHH|$P!HHu3L sH D@D$ bH|$P3H\$XH0A^E3E33HHl$@HHHu$L 3M DE D$  3nH͋ ~OHt$HH֘HHHt IN"HVHt IN^H–;|Ht$HHHHl$@H|$PH\$XH0A^H\$Hl$VAVAW0H+E3ALHAHuBlH|$P."HfHHlMHDBE3E33H%HHt6HMH1HE3E33HHHu%lu~ DaoL D$ JDBz?uI3HHHuD$ L D@ NHMHtDHtCHL9D$ L AdD$ L 4 AoJHtHtH|$PAH\$XHl$`H0A_A^^H\$Hl$VAVAW0'H+E3ALHAHuBlH|$Pn HHHlMHDBE3E33Hu HHt6HMHH_E3E33H? HHu"%lu~ DapL v D$ JDB?uI3H)HHuD$ L R D@ NHMH tDHtCH9D$ L 3 AdD$ L ApJ1HtHH|$PAH\$XHl$`H0A_A^^@S0tH+HYIunAuUMHHuMAHH؅uL Q PfD@gH D$ H0[EHHH0[3H0[H\$W ТH+HD@wH HwHHtHHuH3H\$0H _HCH_H\$0H _@S dH+HYHKHt H-H Ht{HH [鎆@SWATAUH+HeMH3H$E3LL$pIHcLMu3=H$\$`H$u3H$ H5ftL$HH$H$Ht$PHD$h:H$L$H$H$HD$hH HD$PHHuD$ 'L  D@rL$MuHLt$XL$OINADd$DD$@L臐INTLHAĀ9tfD=s H9uH̓Hc-IukI~tdAW L A:Jt$H |INHT$H譍xINΑH؋xIA Ld ACJ{AILd$PfMHUHM|$8Ld$0LM t$(D$ /T9HMH$x6IuEFHUIIuEFHUIpt눺 L A|J{IMHT$`HI輌AtIMHIҐHI L AJzIAW L AJzHD$@HT$HD$HIN>xIN_HHuaH A萅HHD$@{HӉINu-Lt P H A#zH9{}{ LZ AJyHu6|$DLt$XINlj|$D׍;}Tt$@KD$ L (HL$pAHFHA!D$ 5L AAAP&JoH'L$L$"D$ "L ApgJ3H$H$AH$H3耞HA]A\_[H)@WATAU@`H+ELHH:H\$`Hl$hHt$pLt$8L|$0LfDA<;t1MAMfA+HO3肌~YHcHOPH3H8t@=s H:uH;uDItHO);|HO;HuHGHHAHHH qDhNHAHC߂HHH{HDIyHHcHOH3t[AIƄ"dL -D$ JDB)3Lt$8Ht$pHl$hH\$`L|$0H@A]A\_H\HKHt He0H뭺dL D$ JDB 3H@A]A\_@S H+HH HtaHKHt H輊HH [?HH;vH\$W 蠚H+Hy(HHuHC(Hu H\$0H _HK(H車H\$03ɅH _@V DH+HH 'mHuH HmHumH ^HH|$8GtGH lH\$0]HHtH HK04~H,~H l莅H\$0HlH|$8HH3ɅH ^̸(膙H+HI0MLPH(Ҹ!QHt,S @H+H5 HK0}H}H [̸(H+}HcH OHk8HH(ÍQH kH(EHA0H@̸(趘H+H kHt 2H(øH(ËAH\$ W pH+HHHuBH\$HH _ËJLt$@Lr0 KtCtLt$@H\$HH _Hl$0Ht$8t39jtu9ku BCuztu9su BCuz tu{ u B C uCu HBcHCtCB CuHz(t#uH{(uHR(H uHG0H8thu HC0H8uZHC0HHtH9HC0HIHt+LH莁HK0HHK0H9ttAFAuHG0Hxt0u HC0Hxu!HK0MN MFHQ H?t2uHG0Hx(t'u HC0Hx(uMF0IV(Hu3Ht$8Hl$0Lt$@H\$HH _̸xVH+HL$0H 7iHt"HT$0xtH i蕇HxA8HH,LEAHL$0HD$ Hx@S H+H:HA|HHt?3H;AHHCHCHCHC HC(H8HC0R|HuHy3H [3HHHH HH0HHHHHHH(HHC0THH [H\$W 0H+YHÃA_H\$0H _̸(H+HI0HMHQ HLH(U̸(ƔH+HI0ML3H(̸(薔H+HIu!ItHI0MLHQ0H(H(3H(@SWHCH+H?H3HD$0HHL$ T=Hc؅t Ht Ht3PH0HL$ Hl$pHHt$@Hw0HHtHO(Ht8xHo(HtHHl$pHt$@HL$0H3蠔HH_[H\$W 萓H+HH HHtwH"3HHH\$0H _Ht$W @H+HHHu 3Ht$@H _HI(Ht H H\$0Hu3ۍFH_(H\$0Ht$@H _XHG(HuH\$0Ht$@H _HHl$83P~8H"HZHHtGHO(Ht/H;|ȁOHl$8H\$0Ht$@H _HK3̉Q Q€tIHA0P̸(H+HH(醧̃IHQ̸(֑H+HH(̸(趑H+H dHt HPkHdH(H\$Ht$H|$Lt$ AW `H+IILLMt@IHu$H8ts HÀ?u HHHu3!3ۋIHt[uI7MtIH\$0Ht$8H|$@Lt$HH A_H\$Hl$Ht$W 趐H+IIHMt)MtJMAHwL3HHt13Mt!3IA8t=s H9u3Ht |uH˅uHHtH.HHtmHthHHHHtH?ujHHu HJt3;HH+u'H/tHWuH;}H3H\$0Hl$8Ht$@H _LHHIH+А: u Hu3̸(VH+D@&H H(o|HLL+B: u Hu3HS H+H|$03HH9HyHyA HI(HtH~H{(H[0H HtHl~H;HKHtrHKH{Ht rH{H{ HK(Ht rH{(H{0H|$0H [H9FLD$S 0H+HڋLD$@H '(HSLD$@H r(HD$@H [Hl$V@H+H EINHHu+L PfH"D@AD$ o(3Hl$`H@^H\$PHH|$X3}H~LZ HHHHL+ѐD FE+uHEuEu HH(-L! L+B+uHuu>HVH;+H|;rHH\$PH|$XHl$`H@^úfL D$ {JDB9HGLHD$0H L HD$(HGH HD$ pHiDH13|̸(VH+HHHu>L J H"DBD$ _vL O HT KLHl$ ȨHtWMtAHI蟗HJI=u;H$Hl$xH\$pH|$@HHA_A^A]A\3H\$Ht$W@[H+HHHL$ IIrHL$ LLHOH\$PHt$XH@_H\$Hl$Ht$WPH+HHHL$0IA HL$xH\$xnHL$xt!HT$xDDHHt$ HD$xHL$0DDHHD$ H\$`Hl$hHt$pHP_H\$Ht$W0KH+IHu2L ; H"DBD$ 藷3H\$@Ht$HH0_LDƋHH\$@Ht$HH0_H\$LL$ VWAV0ȃH+LHL$hIHRHL$hHυt#HT$hDDH\$ H\$XH0A^_^Hl$PHl$hDDHIHl$ wHHu>L H"DBD$ _诶L H KLHl$ Hl$PHH\$XH0A^_^H\$Hl$LL$ VWAV0ӂH+LHL$hAH]HL$ht!HT$hDDHH|$ HD$hDDHIHD$ H\$PHl$XH0A^_^̸8FH+LI0MtHA(HtL@Mt IH8IຎL D$ DBJ~3H8̸8H+LQ0MtHA(HtLMt IH8IẏL s D$ DBJ3H8Ht%(聁H+HA(L@MtHI0AH(Hy HQ0HA(HD$(HQLAHA D$0LIH) HQ0HA(Ht%(H+HA(L@MtHI0AH(H\$Hl$VWAV@؀H+HAIADHHtVHD$`HT$`LHuymL D$ JDB3H\$hHl$pH@A^_^3IS(H+ Aȋ gHD$`HtHT$0HHD$0S(hHHtHL$`LDHHA3ɉ0HHZHHlHt$WAVAW0H+EEHHEu/L ) PgHD@RD$ }3Ht$`H0A_A^_AH\$P HHu'L H"DBD$ Բ3HxHHl$XHl$p}@uHUH薁HHHt>Hn~2LHHSH}@HtHHnHNL D$ JDB6AL  H LHl$ ~}@HkH@8HtLD$pHHHHu9HCXHH0tZH(tSLD$pHHHHLEAHHKHHtHHHkHSH`L b D$ JDBF<L ` D$ JDB$AHY Lx3Hl$XH\$PHt$`H0A_A^_H\$W P}H+H3HH8t=s H:u rXHM A Hnu>K H DtKH+uHH\$0H _3H\$0H _H\$Ht$W |H+H3HH8t=s H@8:ur#H AHu HxDH@8;ts Hǀ8urVH] AHjutfKH+uHH\$0Ht$8H _H\$0Ht$83H _H\$Hl$Ht$WATAUAVAW@{H+L33AELߋbLHu*L WtO"DGsD$ ̮MH huHT$0I3Hu H$IH|$8iHHuvHߺtL m D$ JDbMHl 辝IH΅HtH_H\$pHl$xH$HH@A_A^A]A\_HT$8HAHˉD$0 H\$8Hf蝇HHu#L PtH"D@AD$ %跭dHXD$0LEI3ɉH腊H?Hl$V@yH+IUiHHu+L PgH"D@AD$ ?3Hl$`H@^H\$PHH|$X3.i~?HkHHHHuHH3iHHt.HiHh;|HH\$PH|$XHl$`H@^H,igL k JDBD$ 藬HGLHD$0Hd L e HD$(HGH] HD$ Λ3H\$WxH+H$H3H$HHLD$ 3)h~@DHiHL$0PLLD$ HT$03cHg;|HD$ H$H30yH$HĐ_H2̸(xH+H1H(̸(wH+H 1H(S̸(wH+L 1H(̸(wH+L1H(c@S0wH+HHtv tpD@'H H|$@^HHu-L H"D@AD$ X贪H|$@3H0[LcHSH@xHc8HH|$@H0[3H0[@W0vH+IMu&L P4HD@;D$ f;3H0_ùH\$@HHtuCu Au+H]HAD͋CMAAHHuD$ QL Ax/H_bH6HLËJaHAD͋]H?u/`HHuAEHH`AD͋+AfD$puD$ gL < J3H\$PHt$XH|$`Ld$hH0A_A^A]Hl$ VWATAUAV )pH+E3IMDHAHu,MtAMtA3Hl$hH A^A]A\_^H\$XMt AAHAL|$`Q_;fHaLHkA;u Hu-HuIH_;|MAIHtpMt H譀AHtOHtCHWHJHL$PHHHtHT$P3LHGDTL.DHT$P3P LIHtMtA3L|$`H\$XHl$hH A^A]A\_^̸(nH+At H(RH(H\$Hl$VWATAUAV@dnH+LE3HAALLd$8XHHtztRt%udIUDIDHRIUDIDHRD$ {m\L @Hn DI<3ۋ3IML|$pHAHD$0HGHtHT$03LIED DHT$03W LHuDDIIΉ\$ lHG0Ht0IHLHtqL .@H DIHD$ @SHG@Ht-E3IHHHD$8Ht0DODIAHGPHtDMIHЅu3HL$8Hz\MtIPHGHtIHGIWL|$pH\$xH$H@A^A]A\_^H\$Hl$Ht$W 6lH+H3AAHHtDDHHHϋH\$0Hl$8Ht$@H _H8H\$Hl$Ht$ AV kH+AEHHH|$0Et H+[u4L >H- EHH[uH+ HH3ZtL K>H EHc~H HNH\HL@Mu HPLHMu I| H tH H[HQZ;iH|$0H\$8Hl$@Ht$HH A^@SWATAW8jH+HIEMHYH8A_A\_[Ht$hHt*H|$ $L ?=H HDU$Hl$`ILl$pLt$03YL-<IL5] P[Ht!L <H; DHHqHHuHzMH HMEDOEHHu&L b<DGH H}HUH葡H AH ~6IX;%Ll$pHl$`Lt$0Ht$hH8A_A\_[3̸8hH+AAAtBAtAujHRDHRH8DHRD$`DHRH8h|$`DtL j;H H8L N;H nH83H8Hl$Ht$ W@ hH+AHHHu3Hl$`Ht$hH@_H\$PHLt$X3dWIPfH&YLLPMA t(@:wIrAHIu IA8MEA:+uI3MID$0DIHD$(D$ &st1HV;pH\$PLt$XHl$`Ht$hH@_3H\$Hl$Ht$H|$ AV0fH+333MHHt wHHtkHtHbHHtVA[He AHTMHHt8I>u UIHt%HHsH{IHVtIiL 0 D$ fJDB贙HtHJHtHzJHtHmJ3H\$@Hl$HHt$PH|$XH0A^ø(eH+H uH H(̸(eH+tH H(H(H\$V eH+IHHuBH\$8H ^3H|$0XHHuH|$0H\$8H ^LHH2HϋIH|$0H\$8H ^̸(eH+H(HtGS dH+HHIHt,IHKHtIH HtIH IH [@S@dH+HALHHML LL+ȐAC +uIuL HL+DB D+uHuEL G HL+DDB D+uHuEL 7 HL+DDB D+uHuEL 7 HL+DDB D+uHuEOL HL+DDB D+uHuEL HL+DDB D+uHuEL HL+DDB D+uHuEL HL+DDB D+uHuE}L c HL+DDB D+uHuEtQL ; HL+fDB D+uHuEt!L L+B +uHuu$AH@[AH@[únL D$ JDB葕HCLHD$0H L HD$(HCH HD$ Ȅ3H@[H\$W@aH+HHQH3HuFHCLL HD$0Hu H~ HD$(HCHD$ ^3H\$PH@_H\$PHH@_H\$Hl$VWAV0(aH+HD$XDZLHuD$ !L  D@Ae3HH+  DAtBA,HAhDHLD$XHH3H{R:u"HϽHHH{+,u&HH{HHtsLD$X3H1SHÄCuiHeHuTmD$ bL DjmD$ PL K DQD$ 2L 5D$ ?L  $HHSHHuAD$ lL @ Alm"ICHL$XH:O33HLD$XWICHD$XH\$PHl$`H0A^_^H\$Ht$W _H+H E3AQUE3HHHHIHH HHHNH$HNH\$0Ht$8HH _H\$Hl$Ht$W0^H+AIHHHurHu"3H8t=s H9uHvI3HoHuHv |uHDLHHHD$(D$ H\$@Hl$HHt$PH0_H\$Hl$Ht$W0]H+AIHHHusHu"3H8t=s H9uHvI3HoHuHv |uHHD$`DLHD$(HHD$ (H\$@Hl$HHt$PH0_̸8&]H+HuBH8HD$(D$ H8@SWh\H+H9H3HD$PHHHuBs:HH$PlHtHL$@HɃ~HD$8LL$L$<w2T$0w&DD$8AwL$AD$@T$BDD$C3HcuA3E3E3SUHH$esHH|H3_K~fLt$`DsfH&M8u9H@3LHMt*t$xu;uHT$@LI\ADޅuHJ;|Lt$`HH$H$HL$PH3.\Hh_[̸(&[H+HH(JH\$W [H+P5E3E3HlrHHHH HHHJHH\$0H _Hl$W ZH+E3E33 rHHu Hl$@H _HHt$83IH\$0HKHH=ufH[;u]H[{uSH{tL;tGHuH HHHtSHSHDŽ$ Iv:.u $HH SHEA AHHD$@Mu&AH8t=s H@8)uDAE3E3IAQUkL$HHHAC~ZfHfE98u)>HHHWH~{If@8u]HxuSHtL?tGHuH =HHtgHWH;uHOXHt9HH>t*I>;|HH\$@Hl$HHt$PH A_A^_HcH+>3H\$W0@NH+HHtEtA }H A4LHu+L PoH"D@AD$ n3H\$@H0_Å~H\$PHl$XH|$`Lt$hLHƀ:t|>H@Xt W@Wt WC< w C<w`éG< w G<wJ@ǩ@ IA^>pMtE+E4$ILt$hH|$`Hl$XH\$PL|$0H8A\^Ie*qL JDD$ fy3봺qL  D$ JDBByI*3@S EH+9Ht VtHÀ;u3H [À;u3H [Ht$03HˋH|$8=s H@81uH{HH;t |Vt HH;u H;t@w@83H|$8HDHt$0HH [H\$Hl$Ht$WATAUAVAW DH+33ELLXHLHIH*ugI >IGӃH;t B|!.t3HAtuHmA<v2A<*w Hr".uukC-u]uX4t,II+H+HrH AH TuHI>I; u |H3H\$PHl$XHt$`H A_A^A]A\_LD$VAVAW@|CH+J E3MHH9$s 3H@A_A^^Ld$8D$Ll$0L$LDd$ MLD$pH\$`H|$hIMII+J.Dd$ H$HHuHD$p8.uH;At+Dv%H$rHV AIRtnHKH;u;*t=H;t8I?f A<-w IrA<v Et0.u+HH;uԸH|$hH\$`Ld$8Ll$0H@A_A^^3̸(BH+ M iHu H< 3epH 3H(SpH(HYHH̸(AH+HH(C̸(vAH+H H(̸(VAH+H,H(H̸(&AH+H H(铒̸(AH+ALHHHc;LoAIHRIIDH(HRIIPDH(HRIIkJDH(HRIIvDH(HRII!DH(HRII̘DAH(Ð((=(Rg̸(@H+LHiH H(I̸(?H+H\H(郗̃9Lt3Ht HAHH Mt IAHHILHtHcwHm`HI@3ÐWWWWWWWWW̸(&?H+H H(铐H\$Ht$W >H+HH IHcHuH\$0Ht$8H _H0Ht$8HxHCH\$0H _̃wLlHcEDMALA=========H\$W @>H+HHHt+Ht&HH 袖uHSHOH\$0H _H\$0H _̸(=H+HH(铕̸(=H+H H(3̸(=H+L H(̸(=H+L H(æ̸(f=H+L <H(飦̸(F=H+L H(郦̸(&=H+L\H(̸(=H+LH(Ü̸(<H+LH(飜̸(<H+LH(郜@USHl$x<H+HH3HEPH$HL$hLI3+rH$L$pL$`L=J L%jI-H\$@HcAIH H ) H- H 6 H: H C HPLD$@H HRHPLD$@H 4 HRHPLD$@H > HRybHHHT$PAH 3H@Hxu>OWGDD$0L$(T$ HL$PL H D$P3DGL AHL$HD ;HL$PHHɀyHIuLD$H3@ffAHRDut+HD$PHfxH@u3@A HRLuÃdH  *H H L@HL$PH HT$PLD$@"H\$@I);L$`L$pH$L$hH$HuI)HHMPH3:Hx[]f<ϕ\uHl$ WAVAW0|9H+MHL(HHu1L H"D@AD$ <l3Hl$hH0A_A^_H\$PHt$XLd$`E3IA(Is*H HHHu8HKHt/L L+fB+uHuuE3BHKH DuPHCHtGLd L+B +uHuu&DBHHu8H|H$(3:LLI3Dd$ HtHH{(I'; HHt$XH\$PLd$`Hl$hH0A_A^_Hl$ WAVAW07H+ILL;'HHu1L H"D@AD$ #k3Hl$hH0A_A^_H\$PHt$XLd$`E3HA'H(H HHHuUHNHtLLP L+fB+uHuu"HI.u8H#H&3:LMI3Dd$ HtHH"'HX&;SHHt$XH\$PLd$`Hl$hH0A_A^_H\$W06H+HcHHك H dDtLAHo HwH\$HH0_Hh HXH\$HH0_Ha H9H\$HH0_LBH^ HM@H\$HH0_LBHC HM@H\$HH0_LBH$ HM@H\$HH0_H HHWAE3HH\$HH0_HBHxu8OGDODD$(L$ H HIH\$HH0_ÃHulH Ht$@ fffDGH= AHD HHuH> H:Ht$@H\$HH0_H^ H\$HH0_HZ HHWH.H\$HH0_fjǛ<pGHl$Ht$H|$ AV04H+H|$`IcILHu%L P PtHD@LD$ Qg3H\$@HtHكHaHlHHuL  H"D@AD$ f3HUHu9L  H"D@wD$ fH] LǹVQHC3HR|$hHtsHCHL H"D@vD$ VfH# LǹULHHD$ L ALHHucD$ L t A?HCHt@E3HD8tfDAs HA9uAHH=t3HJD$ L J AAD$ L  A"VeMuH3H\$@Hl$HHt$PH|$XH0A^3\\ƟƟ\QH\$Hl$Ht$H|$ ATAVAW0\1H+33ELH9u *HAHuH9YHt HH HAHHiAHAP1>xHF>HL8Hc;HEtH=I:HtZ}HHtMHpHI3 tV0DH3*>yFbD$ L AA,D$ yL Q AAD$ dL  A}zJcH7H;3H\$PHl$XHt$`H|$hH0A_A^A\H\$Ht$W0/H+HHH9HIHP%AFxbHKhFHzH跻HHtjH3~(H HHt+H;|HH\$@Ht$HH0_D$ 'L AA,D$ L V A~D$ L  A{JLbH\$@Ht$H3H0_H\$Hl$Ht$WAVAW0.H+3ILL8HHtEIHHHu`L 6 N"DBD$ TaH; NM QHh8HH荬H\$PHl$XHt$`H0A_A^_AHHtI_H\$Hl$Ht$W -H+HHPHIV=HHu3HGHtHHȽHKHHOHAHt+H& A?KHHtHcHHL=3H3 HOHHHO3H9H\$0Hl$8Ht$@H _@W`,H+HJH3H$PHcLLD$@(H[<HH H H H H H IQLD$@H K HRVIQLD$@H ս HR8IQLD$@H ߽ HRIIHT$PAAH z SIAHxu>OWGDD$0L$(T$ HL$PLF $H e H$pH$D$PH5 3ېDGLe AHL$HD HL$PHHɀyHIuLD$H3@ffAHRDut*HD$PHfxH@u3@ HRLuÃeH$H$pH *H] H f MAHL$PYH j HT$PLD$@HD$@H$PH3~+H`_ÐA_.}8V*H+MLH3D$ H8Hl$VWAV0*H+IHL|HHu.L E PvH"D@AD$ f]3Hl$`H0A^_^H\$PL|$XE3HAN~=H LI3LD|$ KHHt1HH;|HH\$PL|$XHl$`H0A^_^H{&3H\$Hl$Ht$H|$ AV00)H+IyIYIHLHu#L x PED@LHD$ y\Hi HuHHv HjuHuH HRuH]Hι H:uHEH H"uH-H H uHH Hu"3ɋD$`DLƉD$(HIH|$ 5uL D$ &JD[H LùJ3H\$@Hl$HHt$PH|$XH0A^̸('H+HJH(d@W'H+HH3H$HHi II+DD E+uHEuEt HL*H$4HHu#L & PsH"D@AD$ rZH?HGHuH9GHt HHH HyHGHHA0HxHuD$ L lHcHOLL$0LD$@HD$(HD$ ŋtRDD$0HT$@H?2uD$ L D@AH,D$ zL b ArsJYHG13H$H$H3 'HĐ_H\$W0&H+HI23HHu+L PpH"D@AD$ WLY3H\$@H0_HT$XHHCHuH03H\$@H0_ËD$XHH\$@H0_LD$S p%H+H H|$0HHt/HILD$@H HH;H LD$@HWHt3nLHD$@HOH|$0Ht5HILD$@H i HHH> HD$@H [IH [H\$Hl$Ht$WATAUAVAW@$H+E3IML@2@2ELt$0A IL߹ HHHHL+fD FE+uHEuEuAH@@HL L+fffB +uHuuk@fL} L+ffB+uHuHC@Ht+LJ L+B +uHu@ҸDI; MI]H@AHAPSM:xH:Ht HrL@uWMuRD$ L EF{gwL D$ JDBlVLCH E:@tMt@umHZH,HLG~H/-HMtHu@wD$ L JDBUI,Hr-Ij-I NHHtMtcHHt6HHt)HHktLgHHsHkL3gwD$ L  JDBfHt$0HkL3HsH2A}u|M$D$ L s AywJU3H\$pHl$xH$H@A_A^A]A\_H\$W `!H+AIHL VH DHkH?tHL$XALHtFH ;|H\$XHH\$@Ht$HH0_ú}L D$ JDBtQH\$@Ht$H3H0_̸(H+HLH(u̸(H+H ,H(#oH\$Hl$VAVAW0H+E3AIHLHHMu 3IA8ts HD80u@~$~L  D$ JDBP3qH|$PH9Hu-H snHHH3MI?HHwHt;~L D$ JDB"P3H|$PH\$XHl$`H0A_A^^H mLHtYu$3H8tDs HÀ9uHHDH'tHOI{ t I.z~L . D$ JDBzOHsIsHHsI.~L D$ JDB0O3H\$Ht$W0H+H3AIHu0P}L H"DBD$ N3H\$@Ht$HH0_DLHHH\$@Ht$HH0_H\$Hl$Ht$H|$ AV0H+LHAI*(HHt!HHtDLHI#*L U D$ JDB!NH%3H\$@Hl$HHt$PH|$XH0A^̸(fH+HLH(rH\$Hl$Ht$W 6H+HHIH3 ~,HO HHH#t&HO ;|3H\$0Hl$8Ht$@H _HFH\$W0H+H3HHu-L ߳ H"DBD$ M3H\$@H0_HH#HHx$HH\$@H0_H\$Ht$W0;H+HHҋk&HHt7Ht)HHHH$HH\$@Ht$HH0_úL @ D$ JDBLLH#H\$@Ht$H3H0_̸(H+H H(j̸(H+L lH(Á̸(fH+L H(飁̸(FH+L,H(x̸(&H+LH(w@VATAUAW8H+HEILE3wTH\$`Hl$hH|$pLt$0AI0 L Hb EHH԰HHiH> HuLsMI3IHH&f-tcHt3EEL LH aHHH HtPL EEHӶ .HWEEH'HGL EEHHH HL$ HIK;HIA8D;Lt$0H|$pHl$hH\$`H8A_A]A\^@SATAW@`H+ILLHu,L H"D@AD$ I3H@A_A\[Hl$`Ht$hHH|$pLt$x´HHu&"L DD$ YITE3HAVH$HHxLHML IM+B+uHuu DrA9@u?IQI HHEHI@ HIH袓H13I jHHH *fHHH8HI;Hi;HگHIH|$pHt$hHl$`Lt$xH@A_A\[úL D$ JDBHHCL ¯ HD$0H H HwHlD$ L D$ L ϰ JDBGL m D$ JDByGHCL  HD$0Hj H[ >L D$ JDB9GHCL j HD$0H H LHD$(HCHD$ p6HHAHI23H HHIHIHH ̸(H+HH(j̸(H+H dH(3d̸(H+HH(Sj̸(H+H H(c̸(fH+H|H(j̸(FH+H \H(c̸(&H+HLH(i̸(H+H ,H(sc̸(H+H|H(i̸(H+H \H(3cH\$Ht$W0H+H:L HDZ AH謪HWH@H HnH H L [HEH_ DHHD$ [HWDHHtH\$@Ht$HH0_h L Hj H\$@Ht$HH0_̸(H+L tH(z̸(H+L H(y̸(H+L H(y̸(vH+L H(y̸(VH+L H(y̸(6H+LH(o̸(H+LH(o̸(H+L H(o̸(H+LH(o̸(H+LLH(soH\$Hl$Ht$WATAUAVAW@~H+H EL`LH\IHuD$ .L D@DH `LHIIG3(DIfL L@HIM+fD BD+uHuEAIIFHt9HVE3HD8tAs HA9uAH?D$ oL AAJAH~If3H\$pHl$xH$H@A_A^A]A\_L IM+B +uHuuxIHuH e_HHbIHEt @@HVE3HD8tAs HA8uH ANH* I+AA+uIu IHuH U^HHIHNHHtzHtnHKH(HHϋIu;IHHxt H8D$ hL ADL Z D$ VJDB @HFLHD$0HS L  HD$(HFHD HD$ =/L 4 D$ _JDB?HFLHD$0H- L HD$(HFH HD$ .IH\$Ht$W0 H+HHH3H~;@H3HPHtIHHt#H ;|ɸH\$@Ht$HH0_D$ L AAD$ L AJ>H4HH\$@Ht$H3H0_H\$Hl$Ht$H|$ ATAVAW@ H+LH ELD\HHnI3>fDIHLHHh II+fDD+uHuEuHO3L_HuH7Hؤ IH~u HFH M[HHHNHP>WHHbHCHHWE3HD8tAs HA9uAH[}HOH )HW:@lHIHHEHIHIH豇HH~u HFHNHlI;bH>D$ L  AL ҥ D$ JDB>II605Hp%H`HύP59pL D$ JDB'H  EIHHtIHpIHy3H\$PHl$XHt$`H0A_A^_@UAVAW H+LHE3ϑHHu 3H A_A^]M9>uH\$@Ht$HHH|$PALd$XgL%H&HxM9>u ~IHtuL9=ItK@HCLL+fDB +uHut HL9{uIAtL9{tH;qAH4HLd$XH|$PHt$HH\$@AH A_A^]̸(H+B@t BHu3H(Et HH(. tBDtިtBLtԸH(ø(H+B@t BHu3H(Et HH( tBL@tިtBDtԸH(ø(FH+B@tBHt0Et HH( tBL@ttBDt t BD u3H(øH(̸(H+LAEI tEuAA@t AADu3H(̸(H+LAEIb tEuAA@t AAD u3H(EtTJ@DAtBDt?t Ë%@ =@ uEtt BLt3B@tBDt@S H+HEtfJ@уt CDtH [Ë%@ =@ u H [Åt H [tgCLtaH [ËB@tJD?uDt?t;zH@u5AHAPRxH$Ht H [3H [EtTJ@DAtBDt?t Ë%@ =@ uEtt BLt3øH\$Hl$Ht$WAVAW`H+AAMDwy+L$0H HuHT$0u x uH$HCY>H{HC Ht~cH$ kHC(3D{LsuUHHu)H `H|HuD$ L  6HHuD$ L  #D$ L AAAPHJv 3L\$`I[ Ik(Is0IA_A^_H\$Ht$W H+H ٿH uH H{Ht$ttHKHKHH0HuH\$0H5Ht$8H _̸(6H+y3H(à }HcH i H@HHH(ÍQH 'H(fHA̸XH+AwAHXÉL$ H HuHXHT$ tH HXH\$Ht$W {H+L H3H5 DMuAA IL n ;}ly3' }HcH@HHSIL 8H@ LL+fDB +uHut녋H\$0Ht$8H _H\$0Ht$8H _ø(H+H ԽHuA H(*H H(̋̋AH\$W``H+BHwB"H lT$0Ht)HT$0qt tH\$pH`_úL V D$ JDBrH\$p3H`_Ht$W H+HHHu 3Ht$8H _H Ht"HVPHt_tHt$8H _H\$0H_HtHEHHufHHt+H3~H8t H;|3H\$0Ht$8H _HXHtH诞HHtH\$0Ht$8H _@S H+A@Hu:LΎ PHAE=H%LɎ JAGC@ЃtCDtRtH [Ëȁ@ @ u H [Åt H [ètCLt H [3H [H\$Ht$W H+HHH蚝HHϝHHtH\$0Ht$8H _HCH;HVXHt HuMF@t!G@tI39H٩H̸(H+HH(32̸(fH+H H(+̸(FH+HH(1̸(&H+H H(+̸(H+L ,H(CC̸(H+L \H(#C̸(H+HnH(̸(H+L̨H(c9̸(H+LH(C9H\$Ht$W [H+H:AIHtQL uH3 DH`rHHmH AH9HtFL H DHr~vHWH訇~fHу AH9~MHtXL ҫH DHq~)HWHtH AHB93H\$0Ht$8H _H\$0Ht$8H _H\$W H+AIHL CH2 DH+q 3H\$0H _HH H\$03ɅH _H\$W H+AIHL ԪHƂ DHp 3H\$0H _HH?lH\$03ɅH _̸(FH+H(*fH\$W H+HHHt"LcHQH+HcHH\$0H _ËH\$0H _H\$Hl$Ht$W0H+IcHHHtHHueHHDHnu;HtHtH9tHfL 0 D$ JDB 3H.HtHHH\$@Hl$HHt$PH0_̸(&H+H(*H\$W H+AIHL H€ DH o 3H\$0H _AHHiH\$03ɅH _̸(H+H( dH\$Hl$Ht$H|$ AV `H+AILL ~H& DHknIAE3HϹIN3~t,6DINeL H DHH n~HHHi~9H HG2~&HVH~IN(;|3H\$0Hl$8Ht$@H|$HH A^ø(fH+H|H(,Hi̸(6H+H LH(%̸(H+L ,H(S≠(H+L H(3@UAWHH+I7LHu*L x H"D@AD$ {3HHA_]H\$`Ht$hH|$pHLt$@3HHHx&HHH33(HK3L%(HMHH $IHtH;t!LHH+L+I;uHHuH_HUHx/H\$@Hl$HHt$PH A_A^_H\$Hl$Ht$WAVAW H+LH 3Hߋ苴~iDHVH A9u-H9xuAH9xu;tIADuX/utH5;|A;u/Z1SHN~DHNH A9uHxuHxuIEt//uHNѳ;|3H\$@Hl$HHt$PH A_A^_ø0̸(H+DAAt8At!At 3H(HRHIH(HRHIH(LBHAMPHPE Eu3H(ËA;~+HHA.tz.t /H(I/H(HRHIH(>Ht$W 0H+HrHIHPHx/x/H\$0HX:HHu/P/H|HuH8t=s H9u+Åu5H\$0Ht$8H _À>.uHc;~5LHcI+H 9u#LcHHuH\$0Ht$8H _ø/H\$0Ht$8H _ø5Ht$8H _H9̸(H+HH(Hy̸(H+H \H(S̸(H+H̘H(s̸(H+H H(̸(H+L H(*̸(fH+L lH(*̸(FH+LH(!̸(&H+L,H( H\$Ht$W0H+AIHL "Hir DHZHHHto Her YH5p H9L ݓHSr DHYHVHHQUH&p HHFH@Ht'H@HtL Hr DHHD$ nYH\$@Ht$HH0_H\$Hl$Ht$WATAUAVAWPH+E3ILEL$Ll$@Ll$H^AHLZQfI&HHPH<@tL9c<@unHIϾ1=HHAfH;},HʰLL$HLD$@H$HPËuHI="LL$HLD$@H$HI臮;/H$HmH guoL9d$HthL o D$ JDB#L Zo D$ JDBHCL co HD$0H_o HHo fLHu%L o H"D@AD$ H@HIL$HD$HHAHD$@I$Ll$@HCL o Ho HD$0Hn >L ]n D$ JDBAHCL fn HD$0Hbn HKn LHD$(HCHD$ xH$Ht*HcJ L n D$ JDBHL$@Ht BKLl$@HL$HHtKH7XIL\$PII[0Ik8Is@IA_A^A]A\_@SVWATAWp޼H+H4hH3H$PHAIE3L n HMHEHL+fDDB D+uHuH$hL$`EL9't`L Yn D$ UJDBHCLHD$0HRn L Sn HD$(HCHKn HD$ 3lHK3HHPL 'n H"D@nD$ [VHCLHD$0Hn L n HD$(HCHn HD$ 3L n HL+fDB D+uHuEM9"t`L m D$ bJDBHCLHD$0Hm L m HD$(HCHm HD$ 3\IH"YDL m H"DBD$ hJHCLHD$0Hm L m HD$(HCHm HD$ 3Lm L+B +uHuIL9&usHIHHu`L Qm H"D@AD$ rHCLHD$0HEm L Fm HD$(HCH>m HD$ 3OAHKH#m A3HKHT$@HrHHuCL l H"D@qD$ ~HCL l HD$0Hl Hl HD$@Ll HIAkHHtBHHhHLcD$@Hc HJHMHD$@HHcH@D$HfXHYHL`HL l JDBD$ D LHCHD$0L l Hl H~l Hl AHK8HWh H*2LHuCL cl H"D@ D$ HCL gl HD$0Hcl HLl ZHT$PAIHcfuIuIIL Fg D$ JDBRHCL Cg HD$0HKg HL f D$ JDBsHCL e HD$0Hf H f LHD$(HCHD$ Et HmDL&3L$`H$hH$PH3qHpA_A\_^[@UW(cH+Hy`Ld$PLt$XL|$ LHEL3ʤH HGHH\$@IHt$H3蕤~mIfE3HHHtRHH=uH9/H!HOHupHOHtkI(;|H\$@Ht$HHIFL|$ Lt$XLd$PHOH#HGH(_]ÃAO@H@S@H+HHIHT$(HT$ ;u3H@[HKSH@[Ht@S H+HH HtHKHt HhHH [@SWAV qH+HD@cHg 3LHu H A^_[Hl$@H8HxH@@LD$HE3ɺHHt$PHC`L|$XHHu |$HBHHuH9xHty^AFHVINiE3LD$HHAQYHu|$HDD$HHHD$HLD$HE3ɺHHu |$HuKHHD$H~6LD$HE3ɺHHHu |$HuINHuK@HtH|HtH?Ht$PHl$@L|$XH A^_[@S 贱H+Hy`HuDLe PHAHLe JAHC`H [HA`H [@S DH+HHtzu3H [H ]H [̸(H+HH HRHIH(l H\$Hl$Ht$H|$ AV H+ILHD@UHAe HI^HHL0Hp@HtIINF=u Hu\H_,HuH $HGHOHt6H芠t*Ht1H}u 蕟HEHMHt I`u Hd3 HtFHH\$0Hl$8Ht$@H|$HH A^H\$Hl$Ht$H|$ AV 谯H+HHIMH3)~;DHNHH9huHIHIt,HN;|3H\$0Hl$8Ht$@H|$HH A^H̸(&H+HHHHHRHIH(̸(H+H H(飝̸(֮H+H(*H\$Ht$W 諮H+AH:IuitdHO3~.DHOHHt!HO;|3H\$0Ht$8H _øH\$0Ht$8H _HOIHt$83ۅËH\$0H _@S`H+HT$@HD$8HT$ HD$ Hu3H`[ËH.H`[@S 褭H+HHI:uHKHUPHKHe:@HH [ÑHl$Ht$W KH+AHHuHu3Hl$8Ht$@H _Ht HHHuHl$8Ht$@H _3AcHa H\$0AH褓HHt#GHCHuH&HtH93DHtH{HHCHHtHFHCHFHCHH\$0Hl$8Ht$@H _H\$Hl$Ht$H|$ AUAVAW ,H+Lq`LHL3襛Iϋ蓛IaHHH=H=HIHHuIIHtYDH3A;HHtWIHHH HKINɛu H/HWHK諛tHoIٚ;FHeIH\$@Ht$PH|$XHl$HH A_A^A]ÃAM@H\$UVWATAW ڪH+L3IDD$pI HL$PHL$XHHL$PHMwVHHp(HH\$`H A_A\_^]ÃH\$`H A_A\_^]ÉH\$`H A_A\_^]ÉH|$PHHHσu@>E؋H\$`H A_A\_^]H|$PHuH\$`H A_A\_^]HT$XtbLD$XIHtNu HL$X-HtI?>H HH\$`H A_A\_^]H63H\$`H A_A\_^]L'Z('9'z'z'x'`'HW H+HHIH\$0Ht$8胖HO HØH39w~;H Ht|HKHt H藘HKHtH ;w|HOHt$8H\$0Ht H_HHߌH _̸(fH+HHtt H(魌H(H\$W 0H+HH HHuHHu%H\$0H _BtH\$0H _H H2H\$03ɅH _H\$Hl$Ht$W 覧H+IMHHMuILPII3DAHHt.HLL$PLHH HHKHnHu H3H\$0Hl$8Ht$@H _HT$SVATAU( H+LcAHHILLiITHtIu H(A]A\^[HIHl$PH|$`Lt$hM4$L|$ AE9|$IInHttIN I 3~WIHH9hu5HHu`HHu3QH茓uHH茖tI辕;|AE;|$|H\$XH;u IMH Lt$hH|$`Hl$PL|$ H(A]A\^[@SVAT ѥH+HHMHMH A\^[HcKHHl$@HH|$HLt$PLt3H΋~+HH:=H;|HL|$XԔH袖IHL$HHuGMtgIID3AHILHQ 3HPMFHHH{ u9HC Ht"HK Ht?H6;bL|$XH|$HHl$@Lt$PH A\^[ÃK(3H\$Hl$Ht$W FH+HHH9y~PH hHHH tPCuLHH_t5HHuH ;~|H\$0Hl$8Ht$@H _3HT$HL$SUVWAUAWH褣H+HAHAHALcs3AuLt$8 sE3Eu s3A}D;uAE}Ld$@D$EAAH腔AA HHûH;HH+E@ su HyAD܅~ u΋At;LAH$ytA;u uFH$H[W A03LH$HAHMW 3AX(A\$I\$I\$I\$ I$Hu I}TM3HI5I$El$DE3H3HME3HHHD$EHAfAHH[ HHHML V AAD$ LvHkI?u EuE@ tEu E@ uAAGxA;DLu E@ uAGx;LAH$PL$H$L E I3Ld$@Lt$8HHA_A]_^][H\$Hl$Ht$WATAUAVAW0~H+HHIMLE3HNA‘FHH(EtwHmH轏9GH3誏fHvHHLL%HuLMIHLl$ HX;|LxuFH3DHPAGHHI $MLHQHHPHHtTHNAD;LFMtI$E3HiHt*H\$`Hl$hHt$pH0A_A^A]A\_Hj3H\$Hl$Ht$WATAUAVAW H+LHJLE3iIL$A3IM3L3C~PIMMFIMHHtE3LIIHtlIM;|uMEMtE3IIhHt8IL$AƍD;]H\$PHl$XHt$`H A_A^A]A\_3H\$Hl$Ht$H|$ AV H+BHrHHt=HRx/H"HtHHIHHayE3ffHwH Hx-HЎD9puHHIH諁HyHGHtD9puHHHtIHOyLwH;}uHGH\$0Hl$8Ht$@H|$HHH A^̸(֜H+Hu3H(HAHttHIH(H(̸(薜H+Hu3H(H\$ 3H9YHIHt؋H\$ H(Hu3HH@Hu3HH@Htx;Q} HcHH3Hu3HAHu3A(tHAHA Hu3ËA̸(ƛH+H,H(郋ATAWH袛H+HLHL$hHT$xHD$hE3HD$x.Hu HHA_A\Lt$ Lt$hA9MvHl$@AAnIff ; 蕊LHfLl$(H\$`Ht$8H|$0AfDfAAvIffAf f}f;tHO AHf+aHHNHIڊ3HO A-HHIHDxHfwLHO f+HGH*f fOHH8HO HH0H O HH(H O HH H O HHH O HHH O HHH O HH O PHff f;r[f+HG(HfW0frDfO2HO3PHff f;uHfW@HG8faH}HIE3H|$0Ht$8H\$`Ll$(Hl$@HL$h'HD$xLt$ I$IHHA_A\H\$ VAUAV0ܘH+HEIL3VHl$PH|$XL|$`IL kHN EHH1L kEEHN H1 HGHM 1L kEEHN Hl1GLOAUAHˉD$ GL WkEEHM H41HW HL 2kEEHM H1G0HfuHM 0LO(AUAD$ GL jEEHM H0O2G3u-<u <uHM HL0DHM DHo0L {jEEHUM HU0G@LO8L XjEEHIM 40GLAUAHˉD$ WFIm;}HFL H/IR; L|$`H|$XHl$PH\$hH0A^A]^Ht+S 耖H+HH HtzHzH [H\$UVWP>H+HAH3HD$HHHa#HHrסLLHw/$HL+HILIIi\&L+HIL+IL3I 7HHHHH+HHH i+GLL HL$0Lȉ\$ .HT$0H 9HHHz"HL$HH3MH$HP_^]@S 4H+HIHHH [̸(H+HH(rH\$Hl$Ht$W0֔H+IAHHDHHLH\$ -H\$@Hl$HHt$PH0_@S 脔H+ HHu3H [H8u уHHtH|$0/HHHtH H脄u HH3H|$0H [HH|$0H [@S H+l HHu3H [H8u AHHtH|$0?H7HHtH HuHHP3H|$0H [HH|$0H [Hl$Ht$W0[H+HH HHuHl$HHt$PH0_HH\$@3趂~/fH膄8uHHHuFt?H臂;|H[HtDHpH\$@Hl$HHt$PH0_úL .J D$ JDB "3@S 脒H+HyHuH [HXH [H\$W0@H+H؅~#HOL I DBD$ NgH\$@H0_@S0H+HHuH0[úHKL I DBHXD$ fH0[@VWAV0葑H+HHLHu H0A^_^HHl$XH@ H*HHu.L G PnH.D@iD$ Hl$X3H0A^_^E3LL$`HAPH\$P;H͋E3E3HHT$`ID詝IH\$P`HBt%twt=HHHl$XH0A^_^CE3HHHl$XH0A^_^Nt7=t0nL G D$ JDB.Hl$X3H0A^_^øHl$XH0A^_^H\$Ht$W0H+HHHtH@3HHHuy t HI H[HHHgtEt7t(tD$ L E AHKkHNHWH=CHtHHH\$@Ht$HH0_NHuOH!3H\$@Ht$HH0_HH\$@Ht$HH0_D$ rL ME AoJJH\$@Ht$H3H0_@S0褎H+HH f=tt,tuAHCH@HH0[HCH@HH0[HCH0[Ãtc=tJ=t1HC8tкL D D$ JDB3H0[HCH@HH0[HCH@(HH0[HCH@HH0[̸(ƍH+HtHH(H(H\$AV0菍H+3LHu H\$PH0A^HHt$@H|$H|~pfI~H8uGHu |HHtkHVHp}tLHNL D DBHD$ 77bI}|;|HHt$@H|$HH\$PH0A^HiH|3H\$AV0蟌H+3LHu H\$PH0A^HHt$@H|$H{~pfI}H8uGHu {HHtkHVH|tLHNL D DBHD$ SGaI{;|HHt$@H|$HH\$PH0A^HH{3̸(趋H+HHuH(3H9H(H\$W 耋H+HUHHu 3H\$0H _HtHHHtH 3H;H\$0H _H\$W0 H+fHHt[t$HHtcHH\$@H0_H8u:HHu-L A H.D@AD$ L33H\$@H0_HH H\$@H0_@S0tH+ HHHtrH|$@HHHHtHH8u;HHu.L A H.D@AD$ L臽H|$@HH0[HH H|$@HH0[H\$Ht$W0ˉH+HHMHL$XE33{HL$XvHˋwHHt]E3LL$HHAPxHL$HaHٞ;teHL$HKHӞ;tOHHHHusL n@ D$ JDB蒼3H\$@Ht$PH0_HT$HHH\$@Ht$PH0_H\$W0ЈH+LHL$HE33zHL$HHbPHHu+PtL ? H.DB!D$ j3H\$@H0_yHHHt$E3LHAPotHH\$@H0_útL Z? D$ oJDB薻HtH3H\$@H0_H\$W H+B HHE1 E3DHHH\$0H _z@S0脇H+HH Ft:t(L > D$ JDBͺ3H0[HCH@H0[HCHH0[@S0H+HH :t*t tu8HCH@H0[HCH@H0[HCH@H0[=t/=tֺL = D$ JDB3H0[HCH@(H0[@S0tH+HH 6tCt(L = D$ JDB轹3H0[HCH@HtHH0[HCH H0[H\$W H+HHH;HH3uHxHOH|1H\$0H _H\$W 谅H+HAHA HXHSPHuH\$0H _HH\$0H _/9H\$Ht$W0KH+HHHHHtmH:HH誏tFHHKH2t.H?tHHHH\$@Ht$HH0_HHL < .DBD$ {H\$@Ht$H3H0_H\$W0pH+HAHA HHKPHu/L c< .DBD$ 護3H\$@H0_諎HHu-L D< H.D@AD$ s3H\$@H0_HHtHH\$@H0_H\$Ht$W 諃H+AHHDHLHH\$0Ht$8H _H\$W `H+HHrHHLH\$0H _ H\H\H9]H]̸(H+uCH\$ HHK@Ht(gHK8HtZH{xt HKHJH\$ H(øH(H^HY_H9`H`HaHaHbHbHb̸(H+HuHHHt=fH(H)cHcH d@W 蔁H+H:u4HO0H\$0+HO0}H\$0HG(H _ÃuHO(HtRHO09H _HdHeHeHf̸(րH+uyHH\$ u=HXHK(HteHK Ht@HK0Ht=袹H\$ H(ÃtuHXHK HtHS(HK dH\$ H(HgHYhHhHjHjHk@S H+IHtjH|$0H: t)tt1uAIQH13H|$0H [IIH~HHhHCHtϸH|$0H [øH [HI[H)oHeHdHlHkH)lHykH mHm̸X~H+AHT$8LD$@AHLnHL$8DL${D$xAD$ D$$D$0D$yAD$zHD$xHD$(HD$ HD$HHX̸(~H+H3HH(̸8}H+D$`HD$ 袛3HH8̸8}H+D$`HD$ қ3HH8̸8}H+D$`HD$ r3HH8̸(V}H+HIH(馜̸(6}H+HIH(̸֜(}H+HIH(̸(|H+HIH(֏̸(|H+HIH(̸(|H+HIH(v̸8|H+D$`H0D$ 肛3HH8̸(f|H+HI0H(̸(F|H+HI0H(&̸(&|H+HI0H(VH\$W |H+HHHHLH\$0H _:JH\$W0{H+HHHHt3H8u: HHu-L > H.D@AD$ L3H\$@H0_HHH`HH\$@HHH0_̸86{H+LL$(LD$ LLH \H> 蠽H8̸8zH+LL$(LD$ LLH HU> @H8̸XzH+3LLHD$@HD$8D$0HD$(H> H HD$ HX̸XfzH+3LLHD$@HD$8D$0HD$(H= H HD$ 耾HXH\$Hl$Ht$W0zH+AIHHDHD$(Hs= LHHHD$ `MH\$@Hl$HHt$PH0_H\$W yH+HHHHLH\$0H _:OH\$Hl$Ht$H|$ ATAVAW@LyH+LH AMHHϋ[HDu LGIX3*DMHD$8H\$0HIDd$(t$ UH\$`Hl$hHt$pH|$xH@A_A^A\H\$W xH+HHLHHH\$0H _8H\$W pxH+HHLHHH\$0H _Z>H\$Hl$Ht$W0&xH+AIHH2DLHHHD$ [H\$@Hl$HHt$PH0_H\$Hl$Ht$W0wH+IIHH5Hzt$yL q= D$ JDB3YHu HdtLL3HM~HHAHHtDD$hHL$`HwHHϋH\$@Hl$HHt$PH0_Hl$Ht$H|$ AV0vH+IIHLHu"L < PJHD@ND$ C3lH\$@HHtNLLHH Mt9|$`@@u 3HTPu!DE3IH u H3HH\$@Hl$HHt$PH|$XH0A^̸8&vH+L 4; P0D@_HD$ @腩3H8H\$Hl$V0uH+AHH3Ht2mL I; D$ JDB"3H\$HHl$PH0^3HH|$@lHHtDHHHϋH|$@H\$HHl$PH0^H\$Ht$W +uH+HHHt# r/DE3HHuH3H\$0Ht$8H _Ht$8HH\$0H _H\$Ht$H|$AW0tH+IILH2HYt'pL 9 D$ JDB"3Hu H@tD$hHCHHt A0A0MuHu#HuH9|$`uFFLIHtHHHHtDD$hHL$`HHH΋H\$@Ht$HH|$PH0A_H\$Hl$Ht$ HT$WATAUAVAW0sH+IMHL;3HLbL$IdHH諈uRHtMHH5u;MHH6HI&3E33H΋w6uHuYiH\$hIjb;|D$ L 7 AqJ43H\$`Hl$pHt$xH0A_A^A]A\_D$ L 6 Ap뽸H\$Hl$Ht$H|$ ATAVAW0LrH+ELLk:3HHa~THcHH腇u,EIHXHI2E33H΋WOHja;|L B6 D$ JDB63H\$PHl$XHt$`H|$hH0A_A^A\øH\$Hl$WATAUAVAW@cqH+E3ILAL鉜$u9LHtMMMQAZ0$IBGD$0u%L 4 PsH/D@~D$ `y38IHt$pAr`HcHD$8fI6bHH+;uvAA;u!LMHIkJHtHH2u6IH<4HI03Hˋ%4Hu>~H9|$8uBl$0I_;_EtGHuB9$u9藔GS$u 胔A?D$ L 3 ApD$ L 3 ArJA3Ht$pH\$xH$H@A_A^A]A\_H\$Ht$W {oH+AHHHuEHH,HHt3@@u 3H r/DE3HHuH3H\$0Ht$8H _Ht$8HH\$0H _Hl$Ht$H|$ AV0nH+AMHH,H艽t$vL `4 D$ JDB3bHu Hs tHHH\$@_HHt4DHI tAHHr,HHH\$@Hl$HHt$PH|$XH0A^H\$Hl$Ht$WAVAW0mH+HIALn-HHu%L 1 PwH.D@AD$ 5835E3HA3]~+H_DHH74HtiH];|@@u 3H4P3H>HHuYL 1 PH.D@hD$ 訠H3wL 0 D$ &JDByH3qDHI@E3E3AQ H HH"u L 1 PH.D@gD$  AHPEu HC3HH\$PHl$XHt$`H0A_A^_H\$Hl$Ht$WAVAW0BlH+LIEIH3HHu"L 0 WO.DGhD$ 胟3aEHI@E3E3AQ HHH4u L 0 PH.D@gD$ 2HHp H\$PHl$XHt$`H0A_A^_H\$Hl$Ht$WAVAW0bkH+MIHL>HHH l$pHt2E3LIHωl$ HuD$ L 1 D@cH3}Z~0fHF\HH{t@HMZ;|@@u 3HyPuDE3IH0t'H1D$ L 1 AAJHtH3H\$PHl$XHt$`H0A_A^_Hl$Ht$ WATAV0jH+t$pE3IIH@LMHE3L33H\$Pt$ L|$XFHHtVHHt=E3LHHˉt$ LHuHL 0 H.EFcD$ H 3H\$PL|$XHl$`Ht$hH0A^A\_ILHHtȋHH5HHtIIrMt&DE3HHtHAAH8HEoHqL / D$ JDB /3T̸8hH+L - PdD@_HD$ :3H8LD$HT$UVWATAUAVXChH+E3MLLd$0Ld$8AAAMu?jHtL9 u0cL |- D$ xJDBp3HXA^A]A\_^]IH$L|$P;HHPW%L (. D$ >JDBHW~8HXLD$@E33HLd$ jH9t$@tHV;|HVD$;tH$EIHV;t^L - D$ MJDB~HMI;HQHHHHI;uA utIHD$0A r IHD$8HAV~DH$fHWLL$8LD$0HHD|$ VHU;|AuGHAU~8HWHH[xH  HU;|MtdIu=uUE3LL$HIAPHL$HHH$Hu0L f, H.D@AD$ xIL$HIjHHsH$EHXAu>HAT~'HVHHI ~!HT;|H$A L + D$ JDBdH$H菼HD$0L|$PH$HtHQwHyTHD$8HtHhH`TAHXA^A]A\_^]H\$W0`dH+D$`MM؃HE3ɉD$(MIHD$ H~ HHCH\$@H0_̸8dH+NHtH8t H8úcL U) D$ xDBJI3H8@UVWAVAW@cH+HH3H$03EHLHuDH,H.At%x:At/IHy=u PkL ' H.DB!D$ fH$I;tHkH$0H39cH@A_A^_^]Hl$H|$ ATAVAW bH+LHIMLUHHu3NH\$@HHt$H3oQ~*HASHHH3Rt/HEQ;|3H\$@Ht$HHl$PH|$XH A_A^A\IIVLIIR3I΋U۹OH\$Hl$Ht$W@6aH+IIHLD$03E33Ht$ LD$0HL$@LHo,u"L ' N.DBD$ [H ' HL$@0Ht HL$@H&}HL$@7IHL$@~+L & DBˍJD$ H& LQHL$@)L$@I[IkIs I_Ht$W `H+HHHt5H\$0HuHH HHtH;uH\$0Ht$8H _Ht$8H _鎷̸(_H+ ]/ 蘇Hu HL/ 3H< 3H(H(̸(f_H+3HH(̸(6_H+HIu HIH( u HIH(JH(HtHA@HMtHA8IMtHAIHT$(HtHA HHAHHAxLQAu%Mt IBHIMt"IBHHI ÃuHtIBH3H\$W0@^H+HHHt9HJL @ D@ӍPD$ S3HK@HteBHHC@HK8HtpH{8H\$@H0_@SWAV@]H+HHIHD$`H v诫HW%LHu H@A^_[AHLd$0AP5qAHl$x33Ht$832HHt D@U4LHD$ HKH DD$pHT$`HK(:hALd$0H@A^_[Hl$Ht$ W0+[H+Hy@HHD$@u0L k> PhHD@VD$ tHl$PHt$XH0_HIH\$HH 衩ڨH"HHHNHHF@HVxHNHE3LHD$ aHtvHNHT$@L2HT$@HtVHNHLcHL$@>~:HV(HNHLcHR L = D$ JDB肍HNHH\$HHl$PHt$XH0_H\$UVWYH+H$H3H$HHL$8H3HxHO3DODGHH=HHu%L < K/DCsD$ <ՌLFHL$8H_vLD$0HT$pHL$8c%L < D$ FJDB9HtsD$0;t%L < D$ OJDBMHWHL$pLYt'L < D$ UJDB3HL$8h`HN@3HHHHAAHHl$(D$ ˍ~^HH~x6tIHV(D$0LL$pLcHRHHD$ ؅"L ; D$ iJDBK3HѐHL$8WH$H3XH$H_^]LD$HT$HL$SWAUAVXqWH+LHIIMI u+PfL ; H.DB"D$ 赊3HXA^A]_[H$Ht$PHLd$HL|$@HHHpHHAIA oHKL ; DB D$ +IML ; DBD$ +HOHH_@Lo8bD$HGxAs>}A E3HOIMMuHHT$0H<L$0"HLHuD$ :L : AHOIHN3aE~DHN2GHL$8E3L3GHL$8vI΋ k;tHNE;|HNE;GHHt#IHpHNHEucHHGD$ L y7 AAfJ覈HtHHѬ3Ld$HHt$PH$L|$@HXA^A]_[EAu3HtAHu(DHGHcA rJHL$8HD$8Ll$8؅t IH+HrFI:DL$H$As6HH A@uHWH$AuIHEt{tOHO@3hHGxHHSHOxAALt$(D$ F H$HWxHOHE3MHD$ $VH~(u BHF(HN(HHCH8H\$Hl$H|$ AV %SH+3A؋LE~>HHtHlu3Ht$0JEHHuHtaHWHELDHH-EI>u BIHtIHBt H|D3Ht$0H\$8Hl$@H|$HH A^@S0DRH+HHHT$PHHD$PE3H0[LL$PAHˉD$ HL$PQ6H0[@S QH+HٹԟH\HtAHf)褟HLHtA)H6-tHHtA-HAHm AHT trAHAP-@ t^%HDB[+ tI%HDB t4AHAP  t %HDBt H [3H [@S0PH+HH Ft(L m4 D$ HJDBу3H0[HCHuH0[H@(H0[H\$Ht$W0PH+HH 3۞t$L 4 K.DClD$ HfHvHuHHv(HHl$@Q?~DH#AHHx8t"Hu ?HHt>HU8H?t&H ?;|HHl$@H\$HHt$PH0_H<3DD$SAUAVAW8:OH+HH LE3t/L 3 EGlJD$ H聂H8A_A^A][LkMuH8A_A^A][IM(Hl$`ImLd$0E3P>Ht$hH|$xIM(A@HHx8I3>fI?HNH؅uHIHMuHIHtI=;|UHt;HKL 0 DBD$ P#HN@Htb2HHF@HN8Ht`H^8AH~8D$pH3Q=fH?8u1HNHXuHIHwuHIHtH<;|UHt;HKL / DBD$ z"HN@Ht1HHF@HN8Ht_H^8AIM(A4HCxHLD$0HT$pHL$@H[ HK@3H+ ApHcHL$8/HHu%D$ rL + JDBH|D$0LL$pLD$8HHHD$ ՏDD$8HK@}3HV+ A{9/HHuD$ }L J+ LK@LD$0HL$@H:&u*L :+ H.DBD$ {H~,DD$0HK(HTHL$@蜱HtHH$H3HHA^_^][H\$Ht$W GH+HA評H1HtDNjHH\$0Ht$8H _0H\$0Ht$8H _H\$Hl$Ht$ AV05GH+HH HE3t%L + EFlJD$ H|zAHvHuIHv(HH|$@Ae6~DH68HH;t#HxHWHMHH tMH!6;|D$ L * AlJy3H|$@H\$HHl$PHt$XH0A^ù3蔓AHEAHHuD$ L S* D@r띺3LHDBD$ AA̸8EH+LY@ICHttLMthLDºIA҃u'L * D@H0D$ y3H8Å'L * D$ DBōJx3H8øH8H\$Ht$W +EH+HHI34~T@HKu6u ;}*"u ;}u ;}HKT4;|HK E4~+HK 68u ;}HK 4;|HKH Jt ;}HK(3~FHK(5HH9u8};} 8}HK(3;|;}H\$0Ht$8H _H\$W0CH+AHEEtHAt+L +( PbHD@fD$ ,w3H\$@H0_HuH\$@H0_HtΉ;H\$@H0_@S0TCH+HyHH趔HCHu(L F' H.D@AD$ Sv3H0[ùEHKHQHHCHHAH HHCH0[H 脑t麅L & D$ HJDBv3H0[H\$V pBH+HUHHu H\$8H ^H|$0HHHuHH|$03H\$8H ^ùdH{HMHOHHHOH|$0HH\$8H ^H\$UVWAH+H H3H$HHL$8AH3tH[HL$8HLC蟷LD$0HT$pHL$8裧tjHSD$0;t L l& VuN.DFyD$ }t_HRHL$pL*Bt"uL J& D$ JDB)vt(!DD$0HKHT$pLξE΋HL$8bH$H3AH$H_^]̸(@H+HIHIH(钷H\$W0`@H+HEHHt9H5Ht$HHE3E3HtHH\$@H0_HԪ|L % D$ JDBtsH\$@3H0_̸8?H+DEtEAt6At%L ) PND@cHD$ 3"s3H8E3H8)H8 H8- ̸8f?H+DEtUAtGAt9At%L ( PqD@bHD$ Kr3H8AH8)H8? H84H8̋u HAH@0Ãu HAH@(3ø8>H+9Lt%L & PQD@CHD$ }r3H8HAHPMtH@IMtHIMtHBIHL$`E3HtHBHtHHLHL$hHtHBHtH@HH8LH8̸X>H+9Ht*L o% D$ DBJ[qHXHQD$4D$@HD$8DD$0HRHHL$0bHX̸8=H+9t(L # PSD@DHD$ JpH8HIHIH8E̸86=H+9t%L o# PVD@DHD$ 'p3H8HIHtHA(HMtHA IMtHAIH8̸8<H+9t%L # PWD@DHD$ > p3H8HIHIH8̸8v<H+9t%L w$ PXD@CHD$ o3H8HAHP L@(H8̸8&<H+9t%L " PYD@DHD$ So3H8HAHP(H8H\$Hl$Ht$H|$ ATAVAW0;H+HH IMvt%L D$ OJDBoLMSH?H+H t%D$ ,L " dJDBnH薌HHZH}HHGH=L$Mt$襸HMHVHBHFHxIOH*HNDD$xHT$pLf Hn(H ^GHNH$HAHFHHHtL1HFHPH$HB蓇HNE3HA,Hˁt8t-t"dL ! D$ 6JDB5bme H;D$ ;L }! rdL ! D$ lJDBmHtVHH;3H\$PHl$XHt$`H|$hH0A_A^A\H\$Hl$Ht$H|$ AV009H+HH EH3t%L f K.DCkD$ OulHvH讹HVHHHrHHuD$ L  D@qHt.tD$ L  A}ZELHH.ELHH t?HNH(t HHFD$ L W AAeJkHtڸHH迏HtHR3H\$@Hl$HHt$PH|$XH0A^@S07H+HH 膆t(L  D$ OJDBk3H0[HCHuH0[H@H0[H\$VAVAW0\7H+HAHE3HpHCLHHL9~>HKHl$PH|$XHi3H&~lHs(t;t*tDBHH %HHHH+ HHgH5&;|HK AHN H|$XHl$PHFHt"HV(}HN HF HF(EtWIH\$`H0A_A^^úL  D$ KJDBi}L  D$ JDB~igI3H\$`H0A_A^^@SUV@5H+H( H3H$0HZHA3HhH9s u'L = N.DBD$  i3HKH FȁtttH HS(H;t'L  D$ JDBh3.HC8}%L  D$ JDBshHK HLD$0蘈t%L  D$ JDB4hHCH AH$pLHHu"L  H.D@AD$ g[LKHL$0LAMI3҉D$ T*L d D$ JDBgHxHH} HE(H$pHL$0{H$0H34H@^][@UVW@3H+H H3H$0HAHz3HO HhHu'L  N.DBD$ f3HW(LD$0H=t%L  D$ JDBfM(H AH$pHHu"L u H.D@AD$ lf\E(LM HL$0L3҉D$ *L H D$ JDB,fHHODHs?H$pHL$0yH$0H3U3H@_^]H\$Hl$VWAV082H+HZHA3LC(Hp3LMu'L  O.DBD$ ye33IhkHC0HtHWr;IR&HK0A ALt$(|$ 9g%L  D$ JDBdLKHK0LD$PIcMI3HD$ pL$PHu AHHu"L s H.D@AD$ dtLKHK0LD$PIcMIHHD$ p"L ? D$ JDBCd-HN HtHV(wHN H~ HD$PHF(HK0Ht iHC0u HtHH\$XHl$`H0A^_^@SVAV0A0H+3E3H9t)L  P]HD@LD$ hc3H0A^^[HAHl$PHjH|$`H}0L|$hLxHt3Hk 'HM(3FiHHHRvA AHHt$(\$ *e%L : D$ ~JDBbIG(MO LD$X3HHD$ t~xL$XH AHHu"L  H.D@AD$ b8IG(MO LD$XHHHD$ 4t~DD$XHMH;3DsHgHE0HtH AH|$`Hl$PL|$hH0A^^[H\$Hl$Ht$H|$ AV0p.H+EIHHHHHGHE3DAsADHHH*tpHML  DBD$ 5HNL  DB D$ Hs(Hk As#3H;gHC0Ht HJt33H(tH\$@Hl$HHt$PH|$XH0A^H\$W0`-H+Hمu HAH@(ufHAHH(HtYqHtOHHHLMttLDǺHA҃u-L ~ H0D@D$ {]`3H\$@H0_Å-L ` D$ JDB,`3H\$@H0_øH\$@H0_H\$V p,H+HYHHH Hl$0H|$83~-H tPu9}H ;|HK~0fHKe8tHKu;|Hl$0H|$8H\$@H ^@S +H+9H}x$;}nHKH|$03~6HKJvKuH@9tHK;|ʃ;tH{uH{ tH|$0H [H|$0H [@S0+H+HyHuu貪Hj|HHCHu&L G P~H.D@AD$ Z@^3H0[3HwHKHQHH 艷wHHCH0[H Jyt麃L  D$ OJDB]3H0[@S04*H+HH xt(L m D$ OJDB]3H0[HCH0[̸()H+HAHt(LMtE3LL$0APA҅~ D$0H(3H(H\$Hl$Ht$W0v)H+IIHHMMHtZ+HzHCHuD$ L  D@AhkvHHCHCLLHHHhHH wtD$ L  AzD$ L [ A{J0\3H\$@Hl$HHt$PH0_H\$Hl$Ht$W v(H+IIHHHQMt,H AA HC Ht)LHHZ)H{(Ht ouHH\$0Hl$8Ht$@H _H\$Hl$Ht$ WATAUAVAW`'H+H4 H3HD$PLq33E33E3H9qHىt$8@,HPLHu#L ! VxN.EEAD$ XZ.LL$0E3H{tTHCH9s tHsHL$0E3E3HЉ|$(Ht$ ҘeD$ pL  AeAPJZhIu uHHuPxL  H.DBD$ iNZ)HL$0H8sIHL$0k6~HL$@2Ll$@HL$0T6Hct H9s HL A HHuUL H PxH.D@AD$ YIVK6xL  D$ JDBwYRHL$0H=L9c uHs 3Hk(t D$8:JH9k(t@S(HL$0/u_D9c0uYHS(HK lHK Hs 3Hk(ILK HL$0E33҉|$(Ll$ 6D$ L } !xL T D$ JDBX~ttuIFHu L U D@APxH.D$ nXLHL$0H/6#AfL 6 D$ APJ:XIN9u MfAHK Ht&|$8tEuHS(kHK HC HtHHkHEtI IW{3HL$PH3(%L\$`I[8Ik@IsHIA_A^A]A\_̸($H+HAHHHyt HxtH(H\$Hl$Ht$H|$ AV0#H+IEHͤHuHHHHt DHV0$3DB )/t]H HI/~hHKHHD$`HCHCHtHCHpHJHCDpH7L D$ JDBhVHtHHz3H\$@Hl$HHt$PH|$XH0A^@S "H+HɣHHH [IzLHtHHHA8uMt@AMt%IMtAMt HAHHI HL$(HtIBH̸("H+>HH(sH\$Ht$W0!H+3HHH|$PHT$PLH薁x%LL$PDGHΉD$ 踣t L D$ DBJTHL$PHtH\$@Ht$HH0_H\$W @!H+HHHtHqnAHEAḤHHu H\$0H _$HHCHHuH\$0H _HtHH\$0H _HHkxH\$0H _@SUVWAW H+H H3H$H3HH|$8HHLHHHt%L ] O.DBD$ SH,Hn=t"L 9 D$ JDBMSeHHHH98L$H HVBLHuHL H.DB D$ RL$H$H3D HĐA__^][H΋~4HIVHH(H(tH;|H;uD$ L A3IDHlAEAHHrHHuD$ L S AHMH TmlH5HHjtLELL$@HHD$0HHD$ ?D$0;tD$ *L  A2HSHL$@LtD$ 0L A23kAHEAH莠HuD$ :L AIVH#vtD$ AL AHT$8H(H\$8"L D$ HJDBP7IVH !'t"L D$ NJDB PHt4 AH\$pHHL$6HI+M+L$ILH׉D$ LL+L$HILωt$ ڈL$+L$HIΉD$ 跈E3E33IHl$ rL$LHIΉ|$ 興KC2C2KHS"C2"Ȁu! AHH;rDI $IHHWH#H\$pH0A_A^A]A\_^]H\$Ht$WAVAW0H+HHL$pIMLLc3HFIIHIMI;s3HwH@3AHKLIֈCAFЈCAFЈC0HFH;vHN+H˃L~HL$pLD$hLHӉ|$ 诊HL$pLD$hLHӉ|$ 薊I?H\$PHt$XH0A_A^_̸(H+H u HIH(]uHIH H(阉H(LAuIL\$(Mt IBHI L\$0Mt IBHHI 3HtHMtIMtYIÃuQHt IBHH Mt IBHHIMt IBHHI HL$(3HtHHL$0HtH3H\$UVW0H+I@HHHc0HhHHD$`HGHT$hHL$`LLD$(HD$ tGHCHXHK HtHS(8UHK oHL$`HK HL$hHK(H\$PH0_^]HL$`Ht<3H\$PH0_^]̸8 H+9Lt%L  PwHD@}D$ O A3H8Ht HAHHH Mt IAHHIH8̃9u HAH03@S0$ H+9MHt&P}L HDBD$ px@3H0[HALT$`HP3MtILD$hMtIMtIHtHMtIu*Mt HBHI MtZHBHHIH0[ÃuMt:HBIH0[ÃgHt HBHH Mt HBHHI H0[̸8& H+9t%L PtD@}HD$ `?3H8HAH@ H8̸8 H+9t(L  PvHD@}D$ 0?H8HAHHu HIH8{u HIH8鹅H8H\$W ` H+HyHHO(Ht XDHG(Ht"3HDHHt(HMtH_(H\$0H _HD3H\$0H _@S@ H+:Ht&L PrHD@uD$ ;>3H@[HAHl$PH|$8HzLt$0LpIVHo HHHt$hHw>u 览H[HFH3HH3~ifHHO(HPH6M~hMN(MF HT$XHL$`D$(H|$ >t@DD$XHT$`HNH];|Ht$hH|$8Hl$PLt$0H@[3H\$Hl$Ht$H|$ AV0 H+EIHHLHZHHCHt<wHZHN HHuWHH`3HAs7HxZHHHHHHHHtHZuRH HH_tHHPtHOL DB D$ }H{H\$@Hl$HHt$PH|$XH0A^H\$Ht$W KH+HH3H3H|$@AHHtXH1U~DHT$@H0T~3HAHL$@3xAHHtHxJ~ H^(H@HL$@Ht"H\$0Ht$8H _@SUVWATAUAVAWH+H H3H$H$LMHM0ML33CHcHL$8H@v3HM(LD$8HT$@KH$LL$@HM0D$(E33H\$ xtiLD$0HM0M3D|$ {tML$0H AHHt/LD$0HM0MHD|$ {tHcD$0I$IEHT$8HL$@Mu HtHHM0zsHM(?HE(H$H3GHĘA_A^A]A\_^][H\$Ht$W0+H+Hy0HH蹝HϋHt)H3%=H\$@Ht$HH0_H),u连03E3E3HL$ HHHH\$@Ht$HH0_̸(vH+ X-Hu H| 33H~ 3H(3H(H\$W@ H+H^ HHHu HG HL$ PHD$ HL$ HH|$0P0H\$PH@_H\$WPH+HH3HHHu+L PhHD@D$ 83H\$`HP_H Hu iH HL$0PHD$0HL$0HH\$@P0HϋK[H\$`HP_@S@H+HR HHu H> HL$ PHD$ HL$ H\$0P H@[H\$Hl$Ht$ W@H+3IHH\$PHu4LL$PEu \$P(H\$XHl$`Ht$hH@_ËD$PH Hu ZH HL$ PHL$ LHHl$0HHtLD$ HL$ AP8tfHD$ HL$ P@LD$ W HHHL$ AP8uSH\$WPH+HHHtHH Hu H HL$0PH\$@Hu+L 1 WlODGkD$ -53H\$`HP_HL$0HH\$`HP_H\$Ht$WP+H+IHHHu:HueL PmHD@jD$ Ar53H\$`Ht$hHP_H! Hu H HL$0PHL$0LHH\$@H\$`Ht$hHP_H\$Ht$W0{H+HHH HI{HHu0L PdHD@D$ i43H\$@Ht$HH0_LHH*HHXHt$HHH\$@H0_H\$Ht$W@H+H IHHHu H HL$ PHD$ HL$ LHHt$0P(H\$PHt$X3ɅHEL$0HH@_H\$Ht$W0[H+HH3HI5{HHu0L PgHD@D$ z33H\$@Ht$HH0_LHHHHWHt$HHH\$@H0_H ! H\$W H+H HHHu H HPH{H\$0H _̸8vH+Hu&iL HDD$ r23H8HH8H`0H\$W0 H+HH3HyHHu+L . PjHD@D$ fg23H\$@H0_Hu!iL  KDD$ r62HHHP0HUH\$@H0_Ht(H+HPH(Ht(aH+HP H(H\$V0@H+IHMu+L ; P@HD@D$ O13H\$HH0^H|$@HHuH|$@H\$HH0^HHP8t*HHP@HHˍPHP8uH|$@H\$HH0^ø8H+Hu%L  P4D@1HD$ (03H8Hu'lL D$ -DBJ03H8H8H\$Ht$W0 H+IHHHuqPmHHu*L D@jD$ AR03H\$@Ht$HH0_L AlD$ D&0L [ H| LƹH|$ v3H\$@Ht$HH0_̸8fH+Hu%L P9D@1HD$ /3H8HH8H`H̸8H+Hu%L w P6D@1HD$ p/3H8HH8H`(H\$Ht$W0H+HH3HIvHHu0L PrHD@D$ .3H\$@Ht$HH0_Hu L SnKDCiD$ .HLHHP(H?RHt$HH\$@H0_̸8H+HHuHPHu L PoHD@AD$ M.3H8H\$Ht$W H+HzHHIHIIuH\$0Ht$8H _HNH}HHt%HHzHKHKHH\$0Ht$8H _HtRS H+HAHHt3@,HIHLHKH,gHK^H [̸HH+Ht&Ht!HIHT$ HT$ HD$(HH3HH̸HvH+Ht/Ht*HIHT$ HT$ HD$(Ht H@HH3HHH\$Ht$W@H+IHHMu3H\$PHt$XH@_HHtNHIHT$ HT$ LD$(HuYH6 H+ +uHÅuuH9HuEHNH HT$ HD$ H|$(HjH@H\$PHt$XH@_IH\$PHt$XH@_@S 4H+HHu3H [HyuHCH \'HCHtոH [H\$Hl$Ht$H|$ AV H+HL2HHH/ A_HH3H8]ts HÀ9uH AËHHtHLcHHoHGHwINH?HtL H $HHHtHX3H\$0Hl$8Ht$@H|$HH A^̸(H+H(JH\$W H+HHIH H\$03H _HLE3M HI;t!L+B: u HuAuPHJHt0IRHt'H+fD:u HuAEAAI;Ju3ÃHD̸(H+HyHtHHH(ZH(̸(H+H( AV H+HyLu~Ht$8HqH|$@Hx;H\$0fDHHHHHKHyH\$0H|$@HtHIfI^Ht$8H A^ƒ0H\$W H+HD@eHg xHHt"HWuH3H\$0H _HH\$0H _Hu3Ha HAHH HAHu3H HAHH HA@S H+HHtH\H [3H [̸(H+Hu3H(H(H\$Ht$W0H+HHHO HI0mHHum#$WxO%=u*L " DGrD$ &3H\$@Ht$HH0_L  AD$ &3H\$@Ht$HH0_LHHHϋJHt$HH\$@H0_H\$ UVWATAUAVAWH+H H3HD$xHq3ILD$@HT$`LHt$8\$0E3AHHD$HHu#L SyKDCD$ %YH CLHD$PHu&D$ L m AAAH͍Qk%IuD$ L [ IILHu#L _ D@gHPyD$ P%H33:>fHL$`HcAH]HJ3ƃH8 ts H8uDub3Hc|$4~)HSAHL+< t< uHIHEtA;u |$4 D$0Hc@<E3|4IWDFIcHMB t~ AB u AH}3IH׉t$XMWHAtAuGHHBuAB4<[=GHHBtAuGHHBuL@fffIýAJ tHHPAJtHHftHHl$HHHBtA uJHHBu ]tL;LqLD$PL3I@0|Ld$PXIILH)IImLHL " PyHD@gD$ H"HI3LЀ8:ux:uHPIH@0HxLAIWIHtfDuAHHu9=NHA2IWHHD AtuCHHuAu@AHBtHH;tBtHH;u@qHg AgLHHHID38ts H@82uH[ AmIuIEHP3L8ts IA81uHDAH7?MELHItuMHL+DB D+uHuEHIHHIcHD$ }L PyHD@g Hl$H\$0Ht$8H|$@HQ9MtIdHtL HL$hD˺ DLD$hH IOH;tHt IGMt$IMHtIMHtI3HL$xH3kH$HĀA_A^A]A\_^]IMHIHl$HE3|$4HHc8r\$0yL D$ JDB~H18MtIDRyL D$ >JDB:D$ L ^ yJDBdD$ pL D$ hL ͺyD$ YL W JDB"̸(FH+HILH0H(HAPHY H ̸H+LIfA AuAAtBHfA AtHH$AAf AIft?BHDAAu#A;u BA;uHBHAAtA;uql@tOBHDLCu/A;t'C tBHAAu8BHLCtA;u tBAAu HuHAA7H$H̸8H+LILLMtHAH IHD$ 謂H8H IH8锂LAAfDA @ tBHJA@tHHfAtHHLD$HT$HL$SUWATAVPH+IHLD$038LHD$8Hu HPA^A\_][3H8t=s H@8)uH$ILl$HL|$@Hc4AA Af IVHcJ@tkHD DJAu=A;t5A t KHJu"ID$Hň  IVDJHAtAA;A uHfAt^HD Ju4A;u CA;u#HIL$HÈ IFHHtA;A'H ttDCHBBkAruID$ ň AnuID$ ň AbuID$ň ID$AtAADň $\CLCE3<{u EL$}I<(u A)IE3ALIfDBtffGHfDBu?:u;:u5GINLHMD$0:LfDAtGHfDAuD?LEt E;HII LMtD$0A$E}M3IA8tDs H8uLd$8IH+HI$3AtID$Mvň AHvuL$HH$E}&ID$HÈ (eD$ 4L L JDBLd$8I13Ll$HH$L|$@HPA^A\_][úeL G D$ MJDB붺eD$ HL JDBID$H$HcHHt;ID$IH+h̸(H+H >Ht HH(E5H\$0H|$ 趎3ҋ8ts H8uH 8 ts H€8uA H ËHHuH\$0H|$ H(Hc:LHH|5Ha LH4Hs LH4H\$0HH|$ H(̋AHA ̉QHQ ̸(vH+MLH3c3HH(HQ(̸(6H+H ~ZH\$ H o HHHPHtHHH HKOHKFH>H / bH\$ H  =H H(̸(H+H\$0IDH ͵ xXH|$ @fH H HHHtԒHOHyH|$ H c H\$0uH N yH> H(Hl$V H+AHHt5HtL3Hu1@ tLa 3HwHu Hl$@H ^HHH|$8HHuH|$8Hl$@H ^HH\$03~7fHDHL@HPC@tH;|˸H\$0H|$8Hl$@H ^H\$Hl$Ht$WAVAW H+H33ELHHtZHuHHtMHE3HH!At+/%ruEIH{HuHHH\$@Hl$HHt$PH A_A^_̸(H+Ht$8H|$ H K xfH\$0fffH ) BH؃x H8ut,H  H HtDHKHyH\$0H Ӳ H|$ Ht$8uH H H(H\$ UATAW0<H+MADHHu/L PGHD@CD$ ;3H\$hH0A_A\]Ht$PH|$XLt$`Lt$pDt$tDt CHÄuAHTHH;t_;tZHtHx!H3=s H9uH{Ht tfOHu+HˍW33MAׅ~Ht H^IH|$XHt$PLt$`H\$hH0A_A\]Hl$Ht$H|$ AV H+H=* IIHLu7H HtnHT A0H\$0_HHt>HL0<.HCHt"H ̰ HHsH{C u H3HH\$0Hl$8Ht$@H|$HH A^H\$Ht$W H+PH|3HHt+$H8tD=s H8uH # Hl$0Y~HyHNHNHtHNHL|$ DAHl$HH|$PLt$(HNAHcL4HMu3~CH Ht蒺H;>|*3~$HHH;rI;v HtfH;.|HNA`HHAyLt$(H|$PHl$HHNKL|$ HH\$@H0^@S H+H;|A 3H [HCHcH HuC 3H [IC H [H\$Hl$Ht$H|$ AV 0H+3LHً91~AHCH94t+HCHHt I҅tHKIH -Hu#H;+|HKI"uC YHC0C k$3G93~>HHCH<t&HCHHt I҅tHKIH H;3|ŸH\$0Hl$8Ht$@H|$HH A^̉T$HL$VATh:H+Hl$XH|$P3Ll$HHcD`$L|$8AF#LHAHo yDEYH M8蔺HHZ8HhHh)HFH>H\$`DE`H NHFHDEbH /HFHLt$@L~@HFHHlHFHlH;|IG{@$tAIIc IGH$HcIWEHD++IW$<H Iu:#t38tD=s H9uHcŀ| kD /H A1HHcL3HE3AII_I t,fD uEtjHE3\AHH u@(I;u_@8+uZHIHNIJ$H HH`LAT@(HHI;}IHeD$D$HH`H2 H\$(|$ AE3Lt$@H\$`IL|$8Ll$HH|$PHl$XEt^AuHB HH`Ht2HNHt蝾HNHtoHNHtaHY3HhA\^HHhA\^HT$HL$SATAVAW8H+HE3ALH1HKHl$xHt$0H|$(Ll$ DHc3HEfDHKE33HH~8H Ht38t=s H9uDHH;|ЋIB@HctyI^3H~;H Ht$t< u\HHHÈCuH HH;|HL$`C A+^IVD0;uDH\$hA;%EILl$ H|$(Ht$0Hl$xAH8A_A^A\[HYHHHHHHHHHYHH\$W H+IH t)tt1uAIQHZ!13H\$0H _HII}~HH&HCHtϸH\$0H _̸(&H+u H HI8rH(̸(H+u H HI H(H HI̸(H+HH(S%̸(H+H lH(̸(fH+HH(%̸(FH+H |H(̸(&H+HH($̸(H+H H(s̸(H+HlH($̸(H+H LH(3̸(H+HH(S$̸(H+H |H(̸(fH+HH($̸(FH+H H(̸(&H+HH(#̸(H+H |H(s̸(H+HlH(#̸(H+H LH(3̸(H+HlH(S#̸(H+H LH(̸(fH+HH H(p(FH+HH("̸(&H+H H(̸8H+LL$ L bcH8̸(H+L \H(4̸(H+L H(3̸(H+L ̼H(3̸(vH+L lH(3̸(VH+L H(3̸(6H+L ,H(s3̸(H+L |H(S3̸(H+L lH(33̸(H+L \H(3̸(H+L |H(2̸(H+LH(S)̸(vH+L\H(3)̸(VH+LH()̸(6H+L,H((̸(H+LH((̸(H+LH((̸(H+L\H((̸(H+LH(s(̸(H+L H(S(̸(vH+LH(3(̸(VH+LH((HtHAHHt$W0 H+HH H3}tu 3Ht$HH0_H}HOHxtHOHIHo#HWHOHAHtHH\$@]}HHH@HLME3LHAPA҃uD$ L p lD$ #L { AWH蛫HNL { DBD$ )ZH\$@Hw Ht$HH0_D$ L AJ_HtH2H\$@Ht$H3H0_HtHA8HMtHAIMtHA IH\$Hl$Ht$W0vH+HH HPIIrH{HKHHKHI;H!HHKHAHHOL DB D$ y)HH{8M&HKE3EAHCLWMtCMMt7E3LHAPA҅~@tD$ L AD$ L AJ3H\$@Hl$HHt$PH0_H\$W0 H+HHIHt2t-dL H D$ 0JDB d3H\$@H0_H[ HH;u84HHu+L % PdH!D@AD$ 73H\$@H0_úHOL  DBD$ :谙H H赴uH3H\$@H0_øH\$@H0_H\$W0 H+HHIHt2t-eL D$ PJDB d3H\$@H0_H[ HH;u84HHu+L PeH!D@AD$ W3H\$@H0_úHOL q DBD$ [谘H H赳uH)3H\$@H0_øH\$@H0_H\$Ht$W H+HHHHt9HHt"HH;tHH\$0Ht$8H _H\H\$0Ht$83H _H\$W0H+HHIH^t;t-fL I D$ JDB 3H\$@H0_HC HH0HC HHH莲H\$@3ɅH0_H\$Hl$VWAV0H+IILHMuLHT$hIG~yL$hH蒉HHu"L . H!DBD$ *>HHt1LLIHtHH+tH Hz3H\$PHl$XH0A^_^H\$UWAW0=H+HHILt5t0gL % D$ JDB 3H\$`H0A__]HC IOHt$PH HxHh Lt$XE3HAދO~$H!Hy;tVH+;|HHtQPHCHtC HHHHC議u HQ>IH蔰AA*H1gL U JDBD$ 3Ht$PLt$XH\$`H0A__]H\$W H+HHIHu"HWHK LBHHIH\$0H _s3H\$0H _H\$Ht$W {H+H>HHt:H\t$HHtH\$0Ht$8H _HH\$0Ht$83H _H\$Ht$W0H+HHIA txthD$ iL { DBuAHC Ht H@(Hx t3CH\$@Ht$HH0_øCH\$@Ht$HH0_D$ cL buN{t5HC HH(HI uHK HI(HI LHK 3HQ(HB H\$@Ht$HH0_D$ UL y hD¹!wH\$@Ht$H3H0_@S ԽH+HHt1Hy t*HI uHC H@ H [HKm t3H [H\$W 耽H+HًI H{ HCH\$0H _H\$W0@H+HHIH t;t-lL D$ MJDB3H\$@H0_HC HX(HC HXH.u+PlL ` H!DB$D$ U<3H\$@H0_H{H\$@H0_H\$W0耼H+HHIH> t\t-mL ( D$ JDB3H\$@H0_HC HHHtHC HxH\$@H0_HC HH(HtHC H\$@Hx(H0_H\$W0лH+HHIH u}LLC MHIAHu+L , P~H!D@AD$ 3H\$@H0_HC HHHAHHK HQHH\$@H0_ú~L D$ JDBH\$@H0_H\$W0H+Hʋ1H HcDLAHGHG HH gOHO YHG 3H\$@H0_ùHGHG HHGHG H1HfHO H f dHO HQ(HH\$@H0_HG HG HH3IfHO HQHH\$@H0_HGSHG HH3etuHO HQHH\$@H0_HGHG Ht>H3et0H\$@H0_únL  D$ JDB3H\$@H0_fLf]H\$W иH+HHJHtpt^t/umHC HH(LAMuiAHHK HQ(LHB=HC HHLAMu>AHLHC HHLAHC HH(LA LC Mu 3H\$0H _AHH\$0I@HH _̸(H+ M Hu H< 3UH. 3H(CH(H\$ W`谷H+HHIHD$pH eHFHHHL$0P$HC8H$HL$0E3LHD$ ~KH$AEAH\$(D$ ID$ L  JDB HL$pHtQHL$0 3H$H`_HKHT$pLHT$pHtHL$0Lc* ~HL$pLD$xHL$03HD$pzL$xH A$HD$pHeLD$xHL$0HdH;|MA׋艚HHtHH薊uKHZ3DHNMA׋QHHvHLxHu H3H\$@Hl$HHt$PH A_A^_H\$WH+HE H3H$HHIH4Hu23Hhu$D$ L  JDB3rLD$0HT$@Hu$L H!D@D$ 38DD$0HT$@HduD$ L ѳ H73ɅH$H3ΙH$HĐ_Hl$W 谘H+HHHt~HtyH\$0HHt$83~*HHHHt%H;|3H\$0Ht$8Hl$@H _Ã~uHN辇tHN3菉3Hl$@H _H\$Hl$Ht$WAVAW@H+LL3II3WHHEHCDOAHHl$(|$ >%L  O!DBD$ LMLD$03IcMIHHD$ L$0H A}HHu"L H!D@AD$ oLMLD$0HIcMIHHD$ $3L Ѯ K!DCD$ H'IHtIcI {D$0I>AHu HtHzHl$hHt$pH\$`H@A_A^_H\$UVATAVAW0IH+LHI 3McLKHHuH\$pH0A_A^A\^]3HH|$hHHHAAHLt$(t$ k%L D$ JDB'LD$`M3HL|$ ~uL$`H̬ A1|HHu"L Ҭ H!D@AD$ 5LD$`MHHL|$ ~DD$`INHH޾HjyHHtHUyH|$hH\$pH0A_A^A\^]@SUVWHH+H@ H3H$0IIHHHu%QrL ! O!DBD$ 3HI=t'rL D$ JDB3Ht4HHFu%L PrH!D@D$ 3LE3HHHHu%L ش PrH!D@wD$ !Q3\$,H_HHu-L PrH!D@AD$ ) HA3 HHHHu5L PrH!D@AD$ .HH3HHn~(H = uE3E3HAQq@3ۅDH|HT$0AH؅~.HT$0DH;uBHT$0AHY؅Hϻ膢= uSpE3E3Hu3H0H$0H3NHH_^][H\$Hl$Ht$H|$ AV00H+AILHHHu L = PsH!D@AD$ vMHt-HHuJD$ L  PsH!D@y63oHW3H\$@Hl$HHt$PH|$XH0A^H3~(HHH7Ht+H;| rDIH0tH뒺sD$ L JDB\H\$Hl$Ht$H|$ AV0H+L3AH3HHu$L \ O!DGAD$ u33`DHIdE3E3AQ HHHdu"L $ H!DB D$ ~HH\$@Hl$HHt$PH|$XH0A^ATAVAW0 H+ELLHu+L PLHD@_D$ q3H0A_A^A\HIt-|L z D$ JDB63H0A_A^A\IHl$XHH!2|L Q D$ JDBHl$X3H0A_A^A\Ht$`~HHu%L 2 P|H!D@AD$ 3H\$PHH|$h3~~hHrHxMtLGHIBHu$Au]IF HHHtPLGHBHt?HHtPH8~;|HH\$PH|$hHt$`Hl$XH0A_A^A\ú|L D$ JDBH{3H\$Ht$WAVAW07H+MIHLHHu"L d PtH!D@AD$ L}3wHHl$PtRHFtAl$pHt[E3LIHωl$ HuAPtL  H!DB%D$ WH93Hl$PH\$XHt$`H0A_A^_@u5H3|~'H~HHtH|;|@@tE3HD PuDIHkHmH\$Hl$Ht$W0֌H+HHIHIIL?u'D$ L y D@J3LLHH`HHu'L a H!D@|D$ ؿ3|$`@uHH t3H t J{HHuD$ L D@ALAHS)HSHtA)H #A-H7 AHAHAHAP-%HDB[%HDBAHAP tz%HDBteHH/tVH|Hzs)HHrHHH\$@Hl$HHt$PH0_H~|HFz3@SUVWATAU]H+H5 H3H$`H$D$3MLL$@LD$8HD$PHH|$0H|$HHu%QuL  N!DBD$ p3HIt'uL D$ JDB;3E3E3HAQt(Mu#AUuL ާ EEzJD$ 3ZHL$LHHxEHHL$xLHu0L$xL$H$`H3HĈA]A\_^][A HzxEAIAzHT$8HL$`LEu(LN MI"THS HL$`yXE3S^A rHV HL$`HRޤHL$`t_؅HL$`4SD$0HL$`QIw;QLl$@M I=E3LL$8IAP7HL$8HD$HHD$ eL ަ uJDB=%D$ @L < uJDBLl$@E3L9l$Hu MtHH7ItA;uL ; D$ PJDȺL$0H8 LD$ EL ڥ iIHD$HHHHH`At>HHHuD$ pL E3E3HH\$PH$`AHE~3HtH$`DHXH$`AH΅tDHT$PH-au+PuL H!DB D$ 諹H3H&AuLE3IAu~:IdwIHWwLHHL~IXu;|A&uL  D$ JDBuL D$ 0JDB3IH\$Ht$W KH+HAIHLHtDNjHH\$0Ht$8H _`H\$0Ht$8H _H\$Hl$Ht$W0քH+H3HHNt~DH vHH;t2HH/t~HWHMHH tEH t;|L Z D$ JDBַ3H\$@Hl$HHt$PH0_HOHtDHPHr@S0H+HHHu43YHu(L æ H!D@AD$ Z3H0[ú4LHDBH0[H\$Hl$Ht$W 薃H+AHHuHHt9DHH/t3LHDBt H3H\$0Hl$8Ht$@H _H\$W H+HڍPH_Ht 3H\$0H _Hu K0Hغ2LHDBH\$0H _H\$Ht$W0蛂H+HHݍHHu0L PvH!D@AD$ K3H\$@Ht$HH0_sHSHLL˺AHΉH\$@Ht$HH0_z@S H+ວWHHt38u.HHHQHT$8HsHT$8LHC3DH [3H [H\$Hl$Ht$W0薁H+AHsHHu'D$ hL wJDB޴3H?H~qHCHuD$ pL MHHuD$ tL 땋Hj-uD$ xL sHCHxHCHHqH\$@Hl$HHt$PH0_H\$Hl$Ht$W0膀H+AIHH袱DHD$(HO LHHHD$ SH\$@Hl$HHt$PH0_H\$W H+HHBHHLH\$0H _UH\$Hl$Ht$WAVAW@H+LHJAMHu LS Iz3Ұ MHD$8H|$0HDID$(l$ \H\$`Hl$hHt$pH@A_A^_H\$Hl$Ht$W06H+AIHHRDLHHHD$ bH\$@Hl$HHt$PH0_H\$W ~H+HHHHLH\$0H _MH\$W0~H+HHHu+L ޡ PpH#D@AD$ c3H\$@H0_ùH{HHH\$@H0_H\$Hl$Ht$H|$ AV@ ~H+IALMHHu%L v PqH#D@AD$ wg3&HHdEH$HT$8T$xHT$0T$pET$(DMHЋHt$ I6HCHu*L  PqH#D@AD$ Hz3HH\$PHl$XHt$`H|$hH@A^̸(&}H+HIH(v5H\$Hl$Ht$H|$ AV0|H+AAHLHHu"L ş PuH#D@AD$ H63zLGHIHiHuD$ ML HHu-D$ QL AAAP4JկH3HxHHH\$@Hl$HHt$PH|$XH0A^H\$W |H+HYHqLC HH貝H\$03HH _H\$V0{H+HuHHu+L N PrH#D@AD$ 3H\$HH0^ùH|$@HC蕈HC HuD$ L  D@A,BLC HHHu:D$ L  D@drJ~H覯H|$@3H\$HH0^H|$@HH\$HH0^H\$Hl$Ht$H|$ AV0zH+IALmHHu%L ƞ PsH#D@AD$ 3 HcuD$ L D@xPHADL$`T$hLHt H迣膠HHuD$ L w D@AzHC HHHIkHC HHHyHC HHHIۄDHHD$pMHD$(HD$ HK HQHBHu,D$ L  D@gsJH3HH\$@Hl$HHt$PH|$XH0A^@S04yH+HHIHIt(L ȝ D$ JDB|3H0[oHKHI HH0[際@S0xH+HHIt(L D$ JDB3H0[HK HH0[2Hl$Ht$W0[xH+HHIAHt3Hl$HHt$PH0_HG H\$@HX-DHHG LHHHCD$(HIHD$ H\$@Hl$HHt$PH0_H)tHsHIuHrHuHIv̸(fwH+HsH(̸(FwH+H sH(̸(&wH+HHu,[HHm3HH[CIA[D;4Lu|$PHt$DEHMDHLt$ 6L}OHcH [E3AH\$@M}EDEHL$@DILt$(D$ HHJAIJxIHKHHAXIHHUHtAHDD$HEtHUHH\$@HMu'YLHtlt HW3H[RAHnHHtHIkZumt IWMHtH諞MtHIYHtHHY3HMH3jHA_A^A]A\_^[]H\$@HHkYIHHtIHku HoHI+Yt1Ld$0D$(E3AIHDd$ Pu HLHFH\$W iH+AHHHAFyH\$0H _ËHxHOH謅H\$03HH _H\$V hH+HHHuAH\$8H ^H9H|$0uWHHt+3H HXu%tH UH3H|$0H\$8H ^H|$0H\$8H ^@WPgH+EL$D$8MHD$@HHD$0HD$HEHD$(AMIIӉD$ Hu&L Z PjD@uH#D$ 3HP_DD$@H\$`H\$HH$L3H$$Ht HcT$@H`HuL WjDGeO#D$ 蝚HuKH\$`HHP_H\$Hl$Ht$H|$ AVPfH+LHAIHHD$@tHHu%L PlH#D@AD$ 3H$HT$@LNLL$@HcMu/lL } D$ JDBљH 3D$8HCH\$0HD$(DHIΉ|$ zHu4L F PlH#D@gD$ wHL$@MJH3$$t HL$@HHL$@ JHH\$`Hl$hHt$pH|$xHPA^@SUVWATAVAWeH+H H3H$$PL$XL$`HHL$@MAH$hLKH D$(HD$@DHHD$ "u%L / PwH#D@sD$ W耘3HL$@tH A[ (KHHu#L # PwH#D@AD$ \4LD$0HL$@MHЉl$ fu*HH3L SwK#DCD$ c\Hc|$0LD$0HL$@H;Pu*HH3L Ӌ SwK#DCtD$ l褗Mt L$0AMtIHL$@HH$H3dHA_A^A\_^][H\$W0cH+FHHu+L PmH#D@AD$ F3H\$@H0_H述HKHAtD$ SL Aw*pHKHA Hu5D$ NL D@AmJ蔖Hl3H\$@H0_HH\$@H0_H\$W`bH+AIHu HL$PщL$pHLL$pLD$PfHu+L b PnH#D@AD$ \3H\$xH`_HL$PT$pH$DLHD$@H$HD$8$D$0$D$($D$ 7؅~HL$PHtHcT$p=HL$PsFH\$xH`_LD$HL$WATAVAWaH+HL$XEDH$vH$LcvD$4y3HĨA_A^A\_H$H$H[ AAH$L$%HHV AHD$@ HAOHY AHHD$PGLAD$AǙAAEtAFAǙAA3 .H- AL$0GHD$8t)Ht$H>u裒IHtH3ʍHt)Ht1H?u JHHtfHHKtW HtHmHJHHuHmHJiD$ sL AqvJgMt IHt5?Ht HHtcmHtHVmHtHJmHrJ3H\$PHl$XHt$`H0A_A^_H\$ DD$HT$HL$UVWP_ZH+3IH\$0IHKHD$8HHH3Ht HHHL$8HKHtHhH 轨-)t60H$D$HT$xHKLHD$ 'HKH d=H HHHtDEHUH0sHD$8Ht5HL$@Ha=x$HT$@DHqHL$@=H$HYIHt$p]HtXH?uRD$HT$xHHHtlHyHHH?HtH?uHKyHHt7\$0HÉ\$0H;CH$HP_^]Hk3H$HP_^]Hl$ VATAV03H8̸( H+H R H(HAX@S0T H+|HHt[H|$H3HCXHt6LD$@E33HЅ~#LL$@HH LÉ|$(D$ HHHuH|$HH0[@S0 H+HAXHHt=LD$@E33Ѕ~-LL$@HYH z LD$(D$ H0[øH0[@S0d H+HAXHHt=LD$@E33Ѕ~-LL$@HH LD$(D$ H0[øH0[HQX̸(H+HH H(p@W H+HAXHHt\H\$@LD$0E33Ht$H3Hc~3fDHD$0HT$8E3D HWXt HL$8[DHH;|H\$@Ht$HH _̸(FH+H  H(̸8&H+HA`HtDHT$@E3Ѕt HD$@H8úL sX D$ DBAH^;3H8̸(H+H H(@SUAV H+LQ`ALHMu 3H A^][Ht$HH|$Pu3H8ts HÀ8uLD$XE333AHc~^HD$XHT$@E3D HU`HD$@HH3H8t@=s H:u;uLcItHH;|3Ht$HH|$PH A^][HD$@@S@H+HWHT$0DD$8PލHD$ L.W AH \ LD$ HHD$ Ht HD$ L W AJHHD$(H@[@S0H+̸(H+HlH(CD̸(vH+H LH(≠(VH+H H(D̸(6H+H H(≠(H+H<H(CH)̸(H+H H(S≠(H+H H(sC̸(H+H H(≠(H+H|H(3C̸(fH+H \H(≮(FH+HH(BH̸(H+H |H(≮(H+HH(B̸(H+H H(C≮(H+HH(cB̸(H+H |H(≮(vH+H,H(#B̸(VH+H H(;̸(6H+H|H(AHi̸(H+H LH(s;̸(H+H H(A̸(H+H H(3;̸(H+H<H(SAH)̸(vH+H H(:̸(VH+H|H(A̸(6H+H \H(:̸(H+HH(@̸(H+H |H(c:̸(H+L lH(R̸(H+L H(Q̸(H+L LH(Q̸(vH+L H(Q̸(VH+L H(Q̸(6H+L ,H(sQ̸(H+L |H(SQ̸(H+L H(3Q̸(H+L H(Q̸(H+L lH(P̸(H+L H(P̸(vH+L H(P̸(VH+L H(P̸(6H+L \H(sP̸(H+L H(SP̸(H+LH(F̸(H+LH(F̸(H+LlH(sF̸(H+LH(SF̸(vH+LH(3F̸(VH+LLH(F̸(6H+LH(E̸(H+LH(E̸(H+LH(E̸(H+LH(E̸(H+LH(sE̸(H+LH(SE̸(vH+L H(3E̸(VH+L|H(E̸(6H+LH(D̸8H+H H H83s̸(H+H H 3HH(̸(H+H HI H(̸(H+H HI H(St̸(H+H HI H(c̸(fH+H HI H(C̸(FH+H HI H(s̸(&H+H HI H(S̸(H+H HI H(̸8H+HH8r̸(H+H3HH(̸(H+HIH(̸(vH+HIH(&s̸(VH+HIH(6̸(6H+HIH(̸(H+HIH(F̸(H+HIH(&̸(H+HIH(̸8H+H HH8p̸(H+H Hg3HH(̸(fH+H HIH(̸(FH+H HIH(q̸(&H+H HIH(̸(H+H HIH(̸(H+H HIH(̸(H+H HIH(̸(H+H HIH(s̸8H+H H8o̸(fH+H :3HH(̸(6H+HI H(̸(H+HI H(p̸(H+HI H(̸(H+HI H(̸(H+HI H(̸(H+HI H(̸(vH+HI H(FH\$W PH+HHHtbHt.H Ht&4tp-Ht HH`HuL3ҹp[HlHHHH\$0H _H\$0H _H\$Ht$W H+H3lHHt)HH+tL3ҹr([HHlH\$0Ht$8HH _̸(VH+H H H(sH\$Hl$Ht$W &H+HH HHIAnHAHI nyyE>y5H HIHHI HHKHPd3ɅH\$0Hl$8Ht$@H _H\$W pH+HH HHIAnByH\$0H _H HI HAH HH\$03HH _H\$Hl$Ht$H|$ AV H+IHL3HHMt kHHthAIH`tUHtkHCHtBHt4HtjHCHt!HHtL3ҹoXHHH\$0Hl$8Ht$@HH|$HH A^̸(H+H HH(3H\$Hl$H|$ AV H+HH3ULHHIHHt$0HH9/ IFHH9/tuHHtz)HHth3HCHtZ5jHHtMHAHt:HCHHCHpINltHuM3ҹsWHHt$0ICH\$8H|$HHHl$@H A^H\$Hl$Ht$WPH+A3EHHNDC3ɋH7 AeȉD$08HD$8HttDKHL$xD3HD$x\$ BHL$xHt LcHe ~'LD$0E3ɺnHD$ CiEHL$8HtZHl$hHt$pH\$`HP_H\$W H+IHHu 3H\$0H _HI <8~Ht+HK H|6 Am;uHK H 8~HK HU6 AB;u H\$0H _@S 4H+HHI Ht01HKHtrHH [e@S H+MHHI L 5 MELHr3H [ H [H\$Ht$W H+IHHL3HR9HK H7Dr3H\$0Ht$8H _HS LHZ~Ht$8H\$0H _H\$Ht$W H+H3u3DCHSHK7HSHK D9; C~$x@fHK E3LL$0AP,HcHL$0LǺ HDCHSHK S1M;CZ;HKutDHL$0t"< t< uHHL$0u @81VHK E3LL$0AP+ЃHL$0HAHL$0<0ylDAAHs(HL$0E~+EffHS(AHL$0 ЉS(IuC(;C,wdAC(HK E3E3AQB+;C(H\$8Ht$@H _HK 73H\$8Ht$@H _;{݁tKtuDAHK Hz2 Y7uHK E3E3AQ*C(HK E3LL$0AP}*DC(HKA+HT$07~f)C(HK E3E3AQ@*HKE3E3AQ -*~-HK6H\$8Ht$@H _HK^6H\$8Ht$@H _H\$Ht$W {H+IHHJuIHK LL$HPE3)HT$HLD3>HHuH\$0Ht$8H _øH\$0Ht$8H _H\$Ht$W H+HD@XH0 H萻HH@,@HZ0HsC(HC ~{CKHI0 A6HCHtH{ tHH\$0Ht$8H _HK HtU+HKHt藸H菸H\$0Ht$83H _H\$W H+HHLHHH\$0H _*Hl$WAVAW H+3ALD(HHuHl$PH A_A^_H\$@Ht$H[HHP؃tuOP I 4u>HO E3LL$XAP~'HT$XLD3|3H\$0Ht$8H _Ht$8HH\$0H _H\$W0H+HyHHu {HCH[Hu 3H\$@H0_HtFH{uHCHtHKH˷tɺHOL w$ DBD$ 薜H\$@H0_H\$Ht$W +H+HHHHtHHHuH3H\$0Ht$8H _HHHHtHHt$8HXH\$0H _H\$Hl$Ht$H|$ AV@H+HHMIHY|HH.tE%HFHt7HHHxuMnL `# H'DD$ HNHF3H\$PHl$XHt$`H|$hH@A^H^LKHHHLt$0E3H|$(HD$ 躔tD$xuMHHtH|$p3H1~+HHH[H;|ոV̸(VH+HuH(H HIH(ƴH\$V H+AHHuH\$8H ^H|$0y3HHxHv;})fHFHHt!HM;|كH|$0H\$8H ^H|$0H\$8H ^H\$Hl$Ht$WAVAW0rH+IMHLHtEH3HxHݳ~0fH覵HHt)H譳;|3H\$PHl$XHt$`H0A_A^_ÅxIHI\H$LL$xLD$pHL$ HHMtA̸(H+Hu3H(H HIH(@S0tH+HYHu&L P?D@tt%uI_OHFIHHIt-H2H|$`uEgL  D$ JDBHs3H\$@Ht$HH|$PLt$XH0A_HHFHtHL$`HjHtAn$MHGHtAH tL@SVWATAVAWh H+Hbk H3HD$XH$LHIIMMkru;L  PhH'D@nD$ 93HL$XH3HhA_A^A\_^[$uIIHgtH3 ~,DHְHH;tHݮ;|$HHXtMLD$@E3HI}NHCHRHT$@AHxV7"ItHKHd$uH3HI;H=LLNHVLd$0L|$(LD$ HE3hLT$(LMu3Ht IHH MtIBIMtIBIMtIBI3H9A̸(H+H HIH(s̸(ֽH+H HIH(3H\$Ht$W 諽H+HHHtjH|tTHuHH\$0Ht$8H _HGHt.m HOHH_xLCHH HuHH\$0Ht$83H _H\$Hl$Ht$H|$ ATAVAW0H+L:LrED@H HfIhH HD@DU@It)H AHbIWHޅH AH9IO3ԫ~TIO襭AHHHLCHv EHD$ sQIO耫;|MGHa EHD$ >QtlMt`MFIH6IN=~DfINHHINHHT2IN;|Ÿ3H\$PHl$XHt$`H|$hH0A_A^A\H\$UVWAUAV0H+HzHH 3EHD HiH bDHD9tHH;rL L@Hf HSHtHHr H"HHOOH? =mt%HQ HH\$pH0A^A]_^]HLHIL|$hL8IfH( HD@D9SH* HIW tu'HRDAH|lHRAE3HeH HRIWHH HRIOLd$`DffIOA贪HIOA蟪AHHH#H~HH9tHH;rL L@HV HR?uHHN HQHHHOHtH H DH,D9tHH;rL? L@H HQZH HkQCHVH7/H9nt+H H:QHVHHs AHLF H EHD$ #MHx AHvIOAD;)MG H EHD$ LtgMFIVH~SINʦ~AfDIN蕨HHjINHH-IN艦;|ŽLd$`L|$hIH\$pH0A^A]_^]H9Hbf9tHH;rHt H@H9Hf9tHH;rHD H@HyHf9tHH;rH H@H\$Ht$W H+HL Hg AH,OL Hc DHOHHHJL HT DHNHWAHWhL HA DHNHWAH,hL i H. DHNHWH7dH HxNH\$0Ht$8H _H\$Hl$Ht$ LD$WATAUAVAW0 H+HHLHx3HHAMDCLHt{ s-(@8IL$HLH@u`IGjLHt.*M $MD$IT$HL|$ oIϋŘD$ iL  AuL$p@@uVMt$MtLHtGI訠HL蝣~0fHfIH;t@Hm;|HL$0MMI6u5D$ L H D@ 3D$ uL  AAHL$0HL$0脊HL$0}HL$0L|IHL$0-~iL  JDBD$ H LmrbDIIuS@ uMIvIύPKE3H[t L  WiO'DGpD$ (Mt5H5I]$D$ \L  AviJI|$t HtIҟL$0I[0Ik8IsHIA_A^A]A\_Ht$WAVAW0 H+LHIAMHHu%QtL r D$ {JDB V3IHPH:H$PHZH$X@uHIH@fHHuaHH-fHHuED$ L . PtH'D@v3H$PH$XH$`H0A_A^_ s@uYHfI^HMLCHHH|$ HϋL tD$ L  JDBl@LIHL$0@tE3MNMI |uD$ L  PtH'D@ HL$0HL$0+HL$0aHL$0yLHL$0{tL S JDBD$ HO LtL  D$ JDB K3@UWAW0豯H+LH3,kL  D$ JDBH0A__]H\$P3HHt$XLt$`ȠH0I;~'DH覠HL0Iu&;|I7Ht$XH\$PLt$`H0A__]HIHH mHt$W0ЮH+HHHHpHD$@B.lL  D$ JDBHt$PH0_HT$@H3HH\$H̟HHH諟HT$@LH{xstaE3HC@tCH tH\$HHt$PH0_újL R D$ hJDBVH\$H3Ht$PH0_HT$@LHH\$HHt$PH0_@VP蔭H+HX H3HD$8:HuHR!bHL$8H3THP^H|$@Hz?t3yHH\$pHl$H3ǜ~TH薞HLD$ E3HHkHH;L$ uHOH;L$(u G;D$0t2Hs;|3Hl$HH\$pH|$@HL$8H3豭HP^H@SUW袬H+HW H3HD$pIHHHH H$H ;tHtHHuAL  PmH'D@wD$ ?H$HL$pH3HĀ_][HKHcxHC98uvHC98unHaLD$0E3HHtHSHL$0LHRЬu6LD$0E3HH HSHL$0HRL褬3ۅËS3LI3~/H֜E3HH%H֚;|Ҹ ̸(&H+ } Hu Hl 3uHN 3H(cH(̸(֪H+  Hu H 3%H 3H(H(Ht$W0耪H+HHHu,L  P=HD@D$ Ht$HH0_AH H\$@AHHHt2Hp3p8pHpH9wu)rHGHuHH\$@Ht$HH0_Hs Hs(HOHH\$@Ht$HH0_Ht$W0蠩H+HHHu,L  P=HD@D$ Ht$HH0_AH H\$@AH HHt2Hp3p8pHpH9wu)蒘HGHuHH\$@Ht$HH0_Hs Hs(HOH:H\$@Ht$HH0_̸XƨH+H$HD$@$D$8H$D$0D$(HD$ HXH\$W0pH+LL$(DD$ DHE3H4HHtHu$谗HGHuHH\$@H0_ËD$`HC(HӉC D$hC$HOOH\$@H0_HAHQH\$W0H+LL$(DD$ DHE3HHHtHu$HGHuHoH\$@H0_ËD$`HӉC D$hC$HD$pHC(HO螗H\$@H0_H\$ UVW@H+HtR H3HD$8HIHLH0Mt AH i D$$b fD$(X D$*P D$,I fD$0A fD$ Hu33ɋ8t=s H8 uMt'IA8t@s H:uxH AHHtHcHT$$HLLHHHtHT$,LHLHHHT$ LHHHL$8H3¦H\$xH@_^]H\$W 谥H+HH HAVUHHt+3HHHCHCHCHC HC(HC0HHH\$0H _̸8FH+Hu&L  P7HD@ D$ H8t7t(oL  D$ 'JDBpH8ËA(H8ËA(EtA(H8A(H8@S 褤H+HH HHH [Hl$Ht$H|$ AV0eH+E3HAHt6HHHu&L  PeH(EFAD$ Hu L ? WnO)DGDD$ x{AHI H\$@AH蛊HHtSHp@8DpLpL9uuHEHu H Ls Ls(HMHؓH\$@Hl$HHt$PH|$XH0A^Hl$Ht$H|$ AV0EH+E3HAHt6HHHu&L m PfH(EFAD$ mHu L  WnO)DGDD$ X{AH) H\$@AH{HHtSHp@8DpLpL9uuHEHu Hn Ls Ls(HMH踒H\$@Hl$HHt$PH|$XH0A^H\$Hl$Ht$H|$ ATAVAWPH+3IMLDHt6HHHu&L  PnH(EGAD$ 4TMt!IoHHuD$ <L  OHt!HIHHuD$ DL  )H$HtZLHuMD$ LL  AAAP-JHtH蘅HtH苅HtH~>H$LLHD$@$HӉD$8D$0ID$(L|$  L\$PI[ Ik(Is0I{8IA_A^A\Hl$Ht$W0蛠H+3IAHHt=H0Hu0L 4 PgH(D@AD$ 3Hl$HHt$PH0_AHHEH\$@H|$(l$  HHtIH~u肏HFHu H*D$`HG(H׉G D$hG$HN-؅Hl$HHt$PH\$@H0_H\$Hl$Ht$W0薟H+3IAHHt0H+Hu#L G PjH(D@AD$ sHHDKDCH|$(l$  HHtJH~u萎HFHu H+D$`H׉G D$hG$HD$pHG(HN:؅ˋH\$@Hl$HHt$PH0_Ht?S 谞H+HHIHjLCHӹ HH [HHu3Ë tuHB H\$W0@H+Hy+L  P;HD@7D$ 3H\$@H0_HI萍;|-kL  D$ JDB\3H\$@H0_HO4HHtȃwHAH\$@H0_HtȃwHA3Hu3Ã9uHA(̸(VH+HDq Hu H3q H(̸(&H+HH(̸8H+HD$`HD$(LL$ ML‹ѹ RH8Hu3ËAHt ȃwA$ÃHt ȃwA ÃHu3ËHtHA(3HtHA3HtHA3HtHA03HtHA 3HtHA3HtHQ(3ÃHtHQ3ÃHtHQ3ÃHtHQ03ÃHtHQ 3ÃHtHQ3Ãø(覛H+3H(H\$W0耛H+HD@!H_ (HHu+L a PhH(D@AD$ S3H\$@H0_HuH!o Hu _ Ho HH83LCHӍH HCHCC(ԦHH\$@H0_H\$W КH+H3HHPHt҅C(Ht$8tH YHAHKHl$03~0H+H9}tHKًHHU~vHK;|HHPHtH҃tVtMHK3踉~H@H+H} tHK{HHU tt3HK|;| Hl$0Ht$8HHP(HtH҅H\$@H _ËH\$@H _H m ̸(膙H+HH(鶥HHH\$ UVW`NH+HD H3HD$P3IHHIA80ts Hƀ8ua(H*HBHuD$ ZL tA8HO([Hu0HO0IHu H8uYHG0HOGHG(HO5DJ L HL$@ 1DO$Lo HL$0 1;w }_M(iL S JDBD$ ?HP L U HD$(HD$0LD$@HK HD$ ̺G$;~\M(iL 5 JDBD$ F)H2 L 7 HD$(HD$0LD$@H- HD$ fDHHt lL  D$ JDBoHÀ;uH$D$DD$xHD$($IH͉D$ HHtLH}uaHEHuSC8t)HKy;uHK yHK(yHK0yHyH\$PH|$XHl$`H0A_A^^Ls Hs(H{0HMHH\$Hl$Ht$ AV0H+3AEHHu"L  P=HD@D$ TuAAH|$@H|$hw(Hu#L  WmO(DGiD$ H5AH AH?{HtL$`EHhÉ0HxX8HH|$@H\$HHl$PHt$XH0A^̸h6H+3HD$ HD$(HD$0HD$8HD$@HD$HHD$PHD$XID$ HL$(LHMtHT$ IAхHh3HhH\$W H+HHH/tUHsHh HH H|h HH lh HE3H&H Gh H LH 0h ңHJAH׃HDHsHHHH+D +uHut.H g HD .H g Y3H\$0H _øH\$0H _HdHg HH ug HAHHDH\$0H _@S $H+HHw%HHg HH f H [̸(ƑH+L\ PHA;mH@ H Y f UHf Hu 3Htf H- H * (Haf HuH`HKf H(̸(&H+ՠH f H;tH f H`H;tL AZJelH(H ̸(覐H+HLe H#Hd Hd Hxd Hd ۡHd H(H%ġ̸(&H+H<HH,Hd HH'd qHHc XH Hc ?HHc &Hd H(@V`tH+H: H3H$ H$H$XL$HL$@3L$8L$0EAL52d 50d Ld @t$ Dn u|H$PH|$ pH ADňGA;tu@7HH$PHL$ 8D$ t4D=s(H@81uLvc HL$ HtiH Zc uXH Ic uGHL$ AٝHt Et@0H c tLD$ IIIc L$0L$8L$@L$HH$DH$XuH b H? =b |HL$ H$ H3bH`^@S0TH+H8 H3HD$(HHL$ LúHt-HL$ HtӸHL$(H3H0[HL$(H3ݍH0[̉ a H\$Hl$ WATAV@跌H+3IALLA}Ht$`HHtuL|$hD{ME3HHD|$(|$ ؅x89$t!Lt$0ME3HHD|$(|$ e؅x HGH]L|$hOߋHt$`H\$pHl$xH@A^A\_H\$ W@H+H67 H3H$0DL$ M;ODHT$0HL$0׋H$0H3|H$hH@_̸8fH+H8̸(FH+H(JHHHHɘHHiHəH)Hi̸(薊H+H\H(C̸(vH+H <H(̸(VH+HlH(HY̸(&H+H <H(̸(H+HlH(̸(H+H LH(S̸(ƉH+H|H(s̸(覉H+H \H(̸(膉H+HH(3Hy̸(VH+H \H(̸(6H+HH(̸(H+H H(̸(H+H|H(̸(ֈH+H \H(C̸(趈H+HH(c̸(薈H+H H(̸(vH+HlH(#̸(VH+H LH(̸(6H+H,H(̸(H+H H(̸(H+HH(̸(ևH+H |H(C̸(趇H+L ̕H(̸(薇H+L \H(̸(vH+L ܖH(̸(VH+L \H(̸(6H+L H(s̸(H+L H(S̸(H+L |H(3̸(ֆH+L ̕H(̸(趆H+L H(̸(薆H+L H(̸(vH+L H(̸(VH+LlH(̸(6H+LH(̸(H+L|H(̸(H+LH(̸(օH+LH(̸(超H+L<H(s̸(薅H+LH(S̸(vH+LlH(3̸(VH+LLH(̸(6H+L,H(̸(H+LH(Ht(H+IiH(H\$W ЄH+HHD@'H HtkLHu H\$0H _HIXH\$0II@IH _HE3LHuHPHt%HI;tHHRHuHI;LDILHI;LDIH\$H|$AV H+HHLHuHHH\$8H|$@H A^Ht$03fffAHH߄3t-HH[HuH_H~HHt$0H\$8H|$@H A^3H_HuI≯(vH+D@5Hx H jHuH(3HHHH(HtHHtHPH3HHtHPH@SPH+HHt]H|$`@KCDSD[{DKDCD$@L$8DT$0D\$(H |$ JH[HuH|$`HP[H 3HtfDHIHu@SVWbH+H- H3H$MHHH]W HL$ IE3AUHL$ LHHT$ HHH$H3H_^[H\$Hl$Ht$WATAUAVAW 辁H+LEADIAALHL9sHHHu HHHrEu EcAE+HE;HAoAA@A@ Et@AT8@@l8@HIǁrHW@AHW83EtxA+@@l8@_A/A@Et@AT8@@l8@uHW@AH733EtA+@@l8@3A̸AE3A"E3ID:@AH+uHW@EFH73ۉH@u-HH Ht!LIHR7H HLj+H;r5H+I׋؋HO@HD踀HW@AHL63HO@LHII臀3H\H\$PHl$XHt$`H A_A^A]A\_H\$W H+HHDAtAD@AD@AA v7A@sHJ@A@AHE+3HS@AH&6E3sA AHK@HE+3HCHA@H H@HRHHHHHHHHHHHHHHHIuHS@AH5Ht;HKOC G K0O0 H\$0H _3H\$0H _̸(}H+3A~H(@VATAU0}H+HMLHL;H\$PHl$`H|$hILt$(L|$ HziHC(H [39A ̸(vyH+HI(H(V̸(VyH+HI(H(6̸(6yH+HI(H(f̸(yH+HI(H(F̸(xH+HI(H(ƌ̸(xH+HI(H(̸(xH+H H($A @S0xH+HH9Qu H0[HH|$@QHHu+L PwH/D@AD$ T身H|$@3H0[HKQH{H|$@H0[@S0xH+HH9Qu H0[HH|$@+HHu+L q PxH/D@AD$ :H|$@3H0[HKH{H|$@H0[@S0wH+HH9Qu H0[HH|$@HHu+L PyH/D@AD$ 躪H|$@3H0[HKH{H|$@H0[ø(wH+H H(g#H\$W vH+HHHu 3H\$0H _HHv HDHCHH<Ha HH\HHuHR H<HL HH\HHuH5 hH^;H+ AHHH  L H LEHHvHH+=H\$0H _H\$W0uH+3HH9QtMHt;Hu)HHu+L PsH/D@AD$ 3H\$@H0_HOYH_H\$@H0_H\$W00uH+3HH9QtMHt;H(HHu+L  PtH/D@AD$ o3H\$@H0_HOH_H\$@H0_@S0tH+HH9u H0[HH|$@q(HHu+L r PuH/D@AD$ H|$@3H0[H VH;H|$@H0[@S04tH+HH9u H0[HH|$@NHHu-L 2 H/D@AD$ LiH|$@3H0[H dNH;H|$@H0[H\$Ht$W sH+HHIIHFHOH_yNH\$0HwHt$8H _̸(fsH+HH:3HH(̸(6sH+HIHH(醒Ht.S sH+HHIHH/8bHCHH [̸(rH+HIHH(鶓̸(rH+HIHH(閅̸(rH+HIHH(Ɠ̸(vrH+HIHH(馅̸(VrH+HIHH(&̸(6rH+HIHH(39A0@S0rH+HH9Q(u H0[HH|$@JHHu-L H/D@AD$ 8H|$@3H0[HK(JH{(H|$@H0[@S0tqH+HH9Qu H0[HH|$@JHHu-L H/D@AD$ 訤H|$@3H0[HKJH{H|$@H0[@S0pH+HH9Q8u H0[HH|$@$HHu-L  H/D@AD$ 7H|$@3H0[HK8H{8H|$@H0[A0@S0DpH+HH9Qu H0[HH|$@HHu-L a H/D@AD$ xH|$@3H0[HKH{H|$@H0[@S0oH+HH9Qu H0[HH|$@p#HHu-L  H/D@AD$ H|$@3H0[HKRH{H|$@H0[@S0$oH+HH9Q u H0[HH|$@yHHu-L H/D@AD$ XH|$@3H0[HK H{ H|$@H0[@S0nH+HH9Q@u H0[HH|$@`.HHu-L H/D@AD$ LȡH|$@3H0[HK@R.H{@H|$@H0[H\$Hl$Ht$W mH+HHH+HHzHHTHHHt H2 Hs Hw HHHt H2 Hf Hj HHHt H2 HY H] HuH\$0Hl$8Ht$@H _H\$W mH+HH H+H*HHhH H HSHt#HSHHH\$0H _HR HH\$0H _H\$Hl$Ht$H|$ AV `lH+LH H{ICH˃wLcH H NQ H CH H4IN3[~Q~H HmINB]E3HHOH HEIN:[;|uH{ HH| HInHtS95 H= |DHt)ƃ~H HxLGH HeH?}uH! HIH> H:H\$0Hl$8Ht$@H|$HH A^H\$W jH+HHHu 3H\$8H _HH HDH HH$HH 1HPHHf0H HH_~HHuH kHa/H> AHHe H=HUHH H AHH> HH^HHuH/ HH] AH{HsH L H LEHH HH9WHHuH uHk.H AHH HGHXHuH H+?E3H3Ht$0;HHtE3E3HHHHXHt$0H/ AHHYHH/H\$8H _H\$Hl$Ht$W0fhH+E3H3\?HHHHDGtwH9{u?HCHth(HHt[HHIrHGHt@HKHH &Xt-HK3HIHHIHKHAHtH2H'H>qL 9 JDBD$ u3H\$@Hl$HHt$PH0_H\$Hl$Ht$W06gH+HH>HHH8uVHHE3H>HHtxHHAUt_HHWtH3HV~=@HXHHtQHHVtBH V;|HY3&HS=qL  JDBD$ uÙH=rL JDBD$ I蛙3H\$@Hl$HHt$PH0_H\$Hl$VWAV0eH+HL3H3CH Aȋ}LHHuD$ L `HT$`HHD$`CpHHt2DHH7qt HIL˺AI赯3D$ L T AAAP/J貘H:pHI3H\$PHl$XH0A^_^H\$W0dH+H"HHxuHCHtHKAVu-|L  D$ JDB3H\$@H0_øH\$@H0_ QLH\$W0PdH+Hy(HHuSHC(HtHK(HvTu-}L . D$ JDB肗3H\$@H0_øH\$@H0_H\$Ht$W0cH+3HHH9Yu%SHGHt5HTHHt%HOHStH\$@Ht$HH0_ú~L S D$ JDBזH?H\$@Ht$H3H0_Ht|S cH+HH uHKiGHKHuRHKHRHK HK(WPHK0HK8HK@HGH [@S0bH+D@|H Hh>IHHu&L PH/D@AD$ ؕ3H0[3AHncHYHCPHHC`HHCpHH0[H\$Hl$Ht$H|$ AV0aH+HHI0AAHK8E3Ls0HK@Ls8Ls@tHC0HtNH t@tHC8Ht.H t tgHC@HtH uKHK0OHK8Ls0BHK@Ls85L a JDBLs@D$ <葔3H\$@Hl$HHt$PH|$XH0A^H\$W0`H+HHIHHtHWsPHCHt>HHCHu-L U H/D@AD$ 3H\$@H0_øH\$@H0_̃v3ÉQHH\$W0 `H+HHI HHtH豸HC Hu-L H/D@AD$ X3H\$@H0_øH\$@H0_HQpLAxH\$W0_H+HHٍPHE39xt-L D$ DBJԒ3H\$@H0_H HtqHOL DBH;D$ V4H\$@H0_H\$W0^H+HHIHHt9CHOL Q DB H{D$ 3H\$@H0_H\$Hl$Ht$WAVAW0^H+3IDL9HHHA HthHHtuHD@8utAs HA@80uAHHitAH9sumMHCHt-HKH8NtHIHt L  D$ rJDB'H/8HH\$PHl$XHt$`H0A_A^_H\$Ht$W []H+HHI4H< uLNjHH\$0Ht$8H _|H\$0Ht$8H _@SVW \H+HH3Ht'L VH$VH3H _^[Hl$@Ld$HHLt$PL|$X3HLxLHMDHO(K;}YHO(MHHqD;HDHtIOHt:t0L Hx3H3OHuL> I蔴HH)q9t%Lv H1H3Lt$PLd$HHl$@L|$XH _^[H\$Hl$W0{[H+3HHHHH5HHu#L UzM/DEAD$ 謎3Hm7HHu$L PH_HHt$@5HHt(H3?tHH|t L D$ rJDBH53Ht$@tHHqtH&0IIH\$`Hl$hHH0A_A^A\_^Hl$Ht$H|$ AV0VH+HHE3E3AQHHD$@tjD$ L G D E3IHHHHm<3H:>HL$8LL$0LIH Lt$0Ld$@II3HSHHT$PAHLMHHXD$ L AmEAMtIHML EGAImD$ O!$D$ L  Anj/iH$hH虣Hr^I;HB9AH$PH3LHpA_A^A]A\_^[H\$Ht$W {KH+HHHZ#HHt*LHHD Hϋ:&H\$0Ht$8H _H\$0Ht$8H _H\$Hl$Ht$WAVAW0KH+HIEL.1HH3HHt5HH NuVHKHt ,uCHNHt u0HM `D;u"HM-MIHKu"dL @ D$ JDB}H\$PHl$XHt$`H0A_A^_@S0$JH+HH7Hu&L  PeD@iH/D$ s}3H0[HHt(eL D$ DBJ<}3H0[øH0[@SUAV IH+3ۃ9LHD$@u HHIHR(iu CH A^][E3LL$@IAPUH|$P`HHHt$H33H8;}(H:HH3@ÅtэC tC3ۅÅu%HxLL$@SUE3IE`HHu HtHNHt$HH|$PH A^][H\$Hl$VWAV0xHH+HȨHHuB3DgL _ D$ 7JDB{IH\$PHl$XH0A^_^H@HHHL$`HBHT$`D3n#3LHtH(3HW9HHLyH\7~BHύ^L7;~3H9HH 8H7;|վ@@SUVWXaGH+H H3H$@7HH<  3҈L$@HL$AAHc3HHL$w L55 M4L5 HNw6~HN:HHSH~L$L$PL= Hx L% fSHNtau/HL$@H@yHIu3@AHRDu3HD$@HxH@uL3ҐA HRLuHI;|L$PL$|$@u  D$HD$@hL D$ JDBGyHL$@H HL$0H  HHL$(HEL H MHD$ shH)L$3H$@H3QFHX_^][ø@SUVWAVAWx-EH+H H3H$`L$HHIM?+H3I/HH/6IHt?H觓H HHuXD$ nL ) M/DE~ xI6H(A.H/3H$`H3hEHxA_A^_^][HYxH AwA+HHu D$ xL H/D@AxHL$0HhHT$`AH襢~2HT$`HL$0Lc^6HT$`AHsHHL$0E3诩H\$V CH+HHHHE3HH|$0\H32~d@H4HH9u=HIHH;u-HAH;u A;uHJHt-Ht!Ht2;|H|$0H\$8H ^ËH|$0H\$8H ^ÃH\$8H ^H\$Hl$VWAV0BH+3H2~=H3HLW+;]IWH1;|HG A;L|$P(LHu&L F PiH/D@AD$ <wu3c3dHHt1~JHF3HL;W~/HIHcVLHH'RHH*1;|IL|$PH\$XHl$`H0A^_^H\$W `AH+HHHtNHtIH 0uDHt$8DHt$@L艴$$@@tHu@y@t"MFIVLL$0HyHt$0@t2Ht%L D$ JDBrU@t@I^HҗHH觗t%fL o D$ SJDBr@tEF0IV(IN L@tSIN8H$LL$@LD$8HHD$ sLd$@L|$8D$LIIk@ tIN@HAt~@@t6Mt1HIu"L H/D@oD$ qB@y2INHHu"L H/D@pD$ |q DŽ$HPI/I7"$H$HPA_A^A]A\_^]Hl$Ht$ W =H+HHHHuL PYH 4!HtLH7HH\$0nLt$8#HtDHHGHu6HHHHuHl$@Ht$HH _Ã'H蛕HHH.HG HtHwHLt6H\$0Ht$8H _'AL H HH`LBH\$0Ht$83H _@S 41H+IHMuL 3Ht5H u)@L H HH`L`B3H [øH [H\$Hl$Ht$W 0H+3IIHMu4L" u3Hu#B@L  H HH`LAJ3HSHHu# @L H HH`LAHHEH Hl$8Ht$@H\$0H _Ht$W0/H+L 3HL+HfffDBD+uHuEuA@Ht$HH0_H\$@}HHt\L HL+B +uHuuE3HH|$ AQdEAH4t4L M D$ JDBbHJ LƹQHtH8H\$@Ht$HH0_Hl$Ht$H|$ AV .H+IL 3L1Hu&Y>L H HH`M?H9HHu##>L \ HH`H M?vHu=L 5 HH\$0~>HHHHuHHHtNHHtHv;|¾H\$0HHHl$8H|$HHt$@H A^c=L H5 HH`M?̸8v-H+LD$ DHL H8̸8F-H+LD$ DHL H8Hl$VAVAW -H+ML 3L/Ht3HHHu#<L Hb HH`M5>uH\$@HH|$H7~NHHHHuHH3rHHtTHItHSH;|H\$@H|$HHOHHl$PH A_A^^;L H HH`M}=H\$Ht$W +H+IL IH.Hu3;L H* HH`L%=3H\$0Ht$8H _LHHhH\$0Ht$8H _H\$Hl$Ht$W V+H+3IIHMu4Lz .Hu#:L s H HH`L<%HHHtHHREH=Hl$8Ht$@H\$0H _H\$Hl$Ht$W *H+3IIHMu4L e-Hu#2:L H HH`L;*HHHHtHL$PH=EHHl$8Ht$@H\$0H _̸8*H+LD$ DHL ^H8H;̸()H+H uHAH(ÃuHIHtH:MH(Ãu uH(HI<H<Hy=H≯(&)H+HH i<H(0()H+HL<H(鳀̸((H+H ,<H(Sz̸((H+HH ;H(((H+H|;H(S̸((H+H \;H(y̸(f(H+HH <H(p(F(H+H;H(̸(&(H+H ;H(y@S0(H+HHIvt*D$ (L ! A/QeN[3H0[E3E3HAQht(L D$ .JDB[3H0[HC HX(HKGv=tD$ 6L {HK 9tD$ =L A^HIL n8HT$@HAHD$@D3fH0[ø('H+HH <H((&H+H<H(~̸(&H+H l<H(3x̸(&H+HH :H((&H+H:H(3~̸(f&H+H :H(w̸(F&H+HH Y;H(P(&&H+H<;H(}̸(&H+H ;H(sw̸(%H+HH I8H((%H+H,8H(s}̸(%H+H 8H(w̸(%H+HH I7H((f%H+H,7H(}̸(F%H+H 7H(v̸(&%H+HH Y6H(0(%H+H<6H(|̸($H+H 6H(Sv̸($H+L 8H(̸($H+L |7H(̸($H+L <8H(Í̸(f$H+L :H(飍̸(F$H+L l8H(郍̸(&$H+LLHH H(̸(#H+LLHH oH(̸(#H+L 8H(̸(#H+LLHH H(F̸(v#H+LLHH OH(̸(F#H+L 5H(郌̸(&#H+LLHH _H(̸("H+LLHH /H(̸("H+L 4H(̸("H+L 3H(̸("H+LLHH H(&̸(V"H+LLHH OH(v̸(&"H+Ll5H(̸("H+L4H(Á̸(!H+L5H(飁̸(!H+Ll7H(郁̸(!H+L5H(c̸(!H+LHH H(̸(V!H+LHH H(̸(&!H+L<6H(̸(!H+LHH H(}̸( H+LHH H(-̸( H+L 3H(c̸( H+LHH H(̸(V H+LHH H(̸(& H+L1H(̸( H+L<1H(̸(H+LHH H(]̸(H+LHH H( @S0H+HH H sH{tZvD$ L AcHKHt H0vHK"HCHuD$ L A%v H0[D$ L s AJ`R3H0[Hl$Ht$H|$ AV0H+IHLHt_HtZMtU)HHtHH\$@HHt$LMHHH|$ Eu H3H(HH\$@3Hl$HHt$PH|$XH0A^H\$Hl$ HL$VWATAUAW0H+33E3MMHHHMM)HHLt$h LHHHtzHHtmLD$`LIHH|$ OtGIH LHt4LLIIH|$ BtLMHHH|$ >u H3Hb'I:H2ILt$hH3H\$pHl$xH0A_A]A\_^H\$LL$ HT$VWATAVAW@H+33E3IMLHt$0H9$HHzMqHhH9$Z'HHIHl$pHHHHzLHL$MIHH|$ IIHD$0HMLHHH|$ |@HT$xMLHH|$ AtgL$H$LIm*tHH$MHft1HHt$MLHHH|$ u H3Hy%HQHIIAHL$0Hl$pH3H$H@A_A^A\_^H\$Hl$WATAUAVAW0H+33MMLLMHHMH$HHt$`%HHtrHHteLMIHHt$ &tKLLIHHt$ >t1HHt$LMHHHt$ u H3H?$HHt$`H3H\$hHl$pH0A_A^A]A\_@SUVH+H H3HD$hIHHHQHHH?H/HHHLt$pAHv Hc؍ LHL3HH|$xH5HL$ ݅HL$ HE3IHHHL$ LHcIGHH|HL$ LHcI)IHT$PHL$ E3~HL$ %E3HL$PAPH|$xHtxu H3Lt$pHL$hH38HĀ^][3@UVW"H+Hx H3HD$hIHHHHMLt$pA H# LHuLt$pHL$hH3HĀ_^]HL$ H\$xojHL$ HE3~3Hϋ8t=s H8uDHL$ HAʀH HL$ A賀H8ts HÀ8uDHL$ HA腀HT$PHL$ E33}HL$ HE3}IHHHL$ ILc/IHT$PHL$ AHT$PHL$ E3|HL$ E3HL$PAPH\$x3̸(FH+H( H\$Hl$Ht$ AV H+3HLHtXHtSK!HHtFH|$0IHHtLLIHpHCHHWIN$HCHE3HI)I~HwHt$pt3V I9tIX 3H= IH A ; H , H+ L;uL;tLHHt H 3 H H = EH= 3eH%0HHH;t3H u t C>H H a >uHq H Z !; u HH% H9=> t!H 5 @tLźI  H\$@Hl$HH|$PLd$XH A_A^A]H\$Ht$WH IHuwLNjHH\$0Ht$8H _HHXHpHxAVH0ILX u9 u 3ۉXBw7HPHtЋ؉D$ LƋI؉D$ LƋI#؉D$ u4u0L3IL3IHHt L3IЅtu7LƋI#ˋىL$ tHHtLƋIЋ؉D$ 3ۉ\$ ƣ H\$@Ht$HH|$PH0A^% % % % % % % % LcA.JzbRB2"ܚ̚Л*:rfXH6""*4>HR`jxΖؖ$,6@LT^hrz—ʗҗܗ",4BNXblvԘ:Xpʙؙʕts74   op`d XWpp X Сܡ  8HX`x,4ȢآDTlt ,4<D MD4 part of OpenSSL 1.0.2k 26 Jan 2017MD5 part of OpenSSL 1.0.2k 26 Jan 2017SHA part of OpenSSL 1.0.2k 26 Jan 2017SHA1 part of OpenSSL 1.0.2k 26 Jan 2017SHA-256 part of OpenSSL 1.0.2k 26 Jan 2017SHA-512 part of OpenSSL 1.0.2k 26 Jan 2017WW$022223W44 555 66@7~~P?`?~??0@P@@A0AARIPE-MD160 part of OpenSSL 1.0.2k 26 Jan 2017  ##%%&&))**,,//1122447788;;==>>@@CCEEFFIIJJLLOOQQRRTTWWXX[[]]^^aabbddgghhkkmmnnppssuuvvyyzz||        0 0 0  0 0  0 0  0           0  0 0 0 0  0  0  0          $$  $ $ $$  $ $             $$  $ $ $$  $ $                  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0                            ((  ((  ((  ((  ((  ((  ((  ((          """"   " " " " ((((((((    """" ( ( ( ("("("("(DES part of OpenSSL 1.0.2k 26 Jan 2017libdes part of OpenSSL 1.0.2k 26 Jan 2017@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                            @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @@ @ @ @ @@ @ @@ @B@B@B@@@BB@BBB@B@@@@BBB@BB@BB@@               !"#$% !"#$%&'()*+,-./0123456789:;<=>?@ABCD./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzRC2 part of OpenSSL 1.0.2k 26 Jan 2017xݵ(yJ؝~7+vSbLdDYOaEm }2@놷{ !"\kNTe`sVu;B=0<&oFiW'C>/fހRr5Mj*qZItK^AnQ$Pp9|:#z6[%U1-]㊒)glឨ,c?X≩ 843H _.G奜w hIDEA part of OpenSSL 1.0.2k 26 Jan 2017j?$.Dsp"8 1).lN!(Ew8fTl 4)P|ɵՄ? Gy 1Ѭߘr/Ḗ~&jE|,G$l iciNWqX~=t XrX͋qJT{YZ90`*#`(yA8۸y:`l>w'K1/x`\`U%U攫UbHW@cj9U*4\̴ATr|*oc]ũ+1t>\3֯\$lS2zw(H;Kkē!(f a!`|H2]]]u#&܈e>#Ŭom9BD . Ji^Bh!la gӫҠQjh/T(3Ql n;zP;*~ev9>YfCoEå}^;uos D@jVbNw?6r=B$7H ۛIrS{y%P;LylO`@ž\^c$johSl>9oR;Qm,0DE ^J3(fK.WtE9_ ӹyU 2`yr,@%g̣饎"2u<kaP/R=2`#H{1S>W\o.ViB~(2gsUO'[iXʻ]=!lJ[-ySeEIҐK3~ˤAb Lw6~д+MەqՓkю%ǯ/[{AI~-%^q h"W6d$ cUYCxSZ٢[} Źv&ϕbhAJsN-GJ{RQ)S?Wƛv`+t恵oWk *!ec.4dV]-SGjnpzKD). u#&İn}ߧI`fqilRdVឱ¥6)L u@Y>:䚘T?eB[k?ҡ08-M]% L&pc^?kh >\D}W7: P tAu8/;21>8TNmO Bo ,y|$ryVw.?rU$qk.P̈́GXzt}K:zfC cdG27;C$CMQe*P:qUN1w_V5kǣ;< $Y,n<pEㆱo ^*>Zw=Ne)։>%fRxL.jxS<- N=+6&9`y#RnfE{7(2åZl!Xeh;/ۭ}*/n[(!pa)uGa0a4c\s9pL ު˼,b`\ndi#PZe2Zh@*<1! T_~}=b7w-_h)5ǡޖXxWcr"ÃF T0.SHُ(1mX4a(s<|J]d]B> EꫪOlOBBǵj;Oe!AyMjGKPb=bF&[$ti GV[ Htb#*BXU >ap?#r3A~_;"lY7|`t˧@n2w΄PU5ai Z .zD4Egɞs͈Uy_g@Cge48>q(= m!>J=+hZ=@&L4)i Av.khq$j 3ԷCaP.9FE$tO!@MpE/f m1'A9UG%ښ ʫ%xP()Sچ, mbhiHפh'?Oz|Ϊ_7әxB*k@5 ٫9N;VmK1f&tn:2C[Ah xN جV@E'H::SU kKмgUXc)3VJ*%1?~^|1)p/'\,(H"m?H܆AyG@n]Q_2Տd5A4x{%`*`lc´2Of#k>3b $;" r(-Exb}doITH}'>AcG t.no:7`L knU{7,gm;e' )̒9 i{f} ϑ^و/$[Qy{;v.97yY̗&-1.Bh;+jLu.x7BjQ满PcKkؽ%=YBD n *Ngd_ڈ鿾dW{x`M``FѰ8Ew63kBqA_^;Z4ٷ,Q+:Ֆ}}>(-}|%rZLZq)GW;()f(.y_xU`uD^mm%adâW<'*:m?!cf&(3uU4V<wQ( gQ̫_QM08bX7 z{>d!Q2Ow~㶨F=)iSHd$m-if! FEdlX [@X̻k~jEY:D 5>ʹrdfGof,ҏ"W##v215VbuZ6ns҈bIPLVq z2E{Sb%ҽ5iq"|˶+v>S@`8G% 8vFšw``u N˅؍芰z~L\HjiԐ\-% ?2aN[wߏWr:Blowfish part of OpenSSL 1.0.2k 26 Jan 2017@0 /kz%?/?!M@`Iɟ'Կ@uИcnafŽ"o;h(Yy#P_w@CV/|-ҢɡHl4ma/T"2*kT:V"AӢ@f/9/Mҹ-?JDvR7,YQoz Zh{.T"5Y/mKdPIf-徐"3;䎴]4K@E?1.eUʱծ-mԢP @"8On ׿r[O/LVSTIiFXEŅc]ՊSW9j7=T*_}x:vbj Bz)^'rgP8ƌDŽZ*'JkѢ*V`C u\B&Ʉq-ls5&5 M{n0f&%HVV^c ϲc|E pPr(pH# yM;-AB G&LjMG\^ |Y#јr8S#/nqFnEV 9q +A|iCHy}B{BIZݿe\ [ ~iC?9zaz UQry吝5rNcZպ60ę _}֡{/6Y DYD̃Aѱ* ;{ B[A%zzӤ0XޘN?wiy{$[Ĭ%5P_aT1bcKU !h]Yfsc=4·~!+g\ab906;Wd/`:5F- 'zy㠌l0^7%oo;j tE'4:NiOM>dY58EfCr3c%N? (Υ'R¦սTUdpfM w&ۄgC!`X0TroSUGڿ]bVhkʃ;n-Ӧ\= wL3{9+^S_aodC x^c"&gI{ڷ"%-U^7rRyL H[k0 cq/޹ S E!5(T<)c)A|-nRPf4,0P1`sY&D\dwR3A+ٺ|o!PaH?ek«dv&4{^% ;MM1$~I,;jx`]sVz\/1Co0TyXR^/2zj0>՚1B°I #ڸ(0q_`ɣaM/Ǚ."płNؼ40y;'ƸaiH?;(ZC/v7ܱӧßn>ƼB7Q(heRwj-K'5.n\ )^XOX{iT̨g&H`K`8# ~8lI `s5GƱVL>#8d^BFzk Od^AE#\;]>rC|m~ll9`qpsv#E@]%=`GK6DήPQH<p}}d^(O= &g.yr?U+HԼ?^!@WNFRWs3NɷdŸW1O g_?@k{C=K۵cUȗn-J(JqoCCl< _P/~׿PZG.Q>pX.0_|r *,]I鎸P'WIoyR}}Yr@EEt]>uOiVA#. '`vteyvvwHNma}/ 4H<0(Ow Vܒ M"7)}V'|@|硴f^aÝ <є`AFv\;x,WGl"}NC~8<=Q8d{h'فI]j~vh]9K9 ;#Im<Eub'z\aBΒ~Brrp }ȡ[(Ob<51)BSjO[}m(Ki\j#MŌ?,-ҖXRg[HJI \EkӉ7`:SRqDIK @sg4|~q6UO/Т`?mPьGnU?墼38Wg} =3{r3O̫]ňv{{uWBdBc+ri/n+_mazgaq%9̸L!gуb>ܷν8\ =Dmn`I:T`H'W+8$ ږ%Eh;}E `P/(b4 ٠m+1+dZ0RXBA\1>26F3S75 {s{OJWdCQz(~c5_ yCdcdJ$_(͸O@C " 0 O7-{$MgQLq_-_d !S^>'_aB%rqK=;&o~~TLmDl߫I&Ǡ36~?Pa w8Pr.PwWFgOT3ɏ1 i5M\=fȦ[]oڑo/"F}F9mOCCN!и  ?X(>nH&p׋wt|% - y#;(8itb߷@!{7Ȋ@ YVvO@/{U MVi35'#WȯVeka^u˅nwU2?-ɿ[%;з$;mc fÀ(82 Tɪס2Zb,gTzuw11&o6F HjyZVLj~CRv/ t,t* M|k .TA5B=!&|,aRe1i%& !\1cr ^Iy p1 d>>̶Ոî 0rlqn/kءDVÈ9/ű1(x⤣2}o~X$Ū{s0a!-!)۳*)e\,0?Б\,ԩT _w:^VxV޾\!uQųåҶw#)Ei/z毲p[v F98/gsD)k)/Ifingӛ/~p%Q^$Slj>!DYܷ)eyCy9A+MWN )zkS< ~U3rŅ?~  ~tn,fy3jXDD1Zs"*ˁc8:$zi HIĀ@8HުL H_%A@N$A UeQr% 9jyMc@hV 틕Z Vqק)N-fcqw*7 5Wa"ɠBր[t!h!hl iwW~@PճMװx QV$AV ʔUWnྵa$ XK'aU{whkldMDfd~i/IO70j5,s@IvM;B(HDLns) _ɋ}oaOw.+rץ<}+FYYEEهTNoHm| ǥcs_DVj͈prͳ]ny` E`1©\1BN"r\,rN@%/N2g@#x\n܃"ukMxnXO DH?{vw#Vu*F_( +8=6 JRft;QZylu eX&hJpFS(l\v0k)h76*g$ k%ֿh,DUueI40" WIbuU~bڨv^FESGml,gHL|3ەCh\SU2` ߝWc9^28aI37~^b<#NygCHKJf-ۄoH Ja)Yfc(` 0qt&@3/C~A^ l( ؒ0~of˜os*`ژ46K-%#= %IH6Jo8C@TzWOpA:Z„TU|5YŗZ:G:%Sj~=eI&TwQ[P]vlDȨ!帊iX`[ŗY)L;]J5ULkD$5鰽bעT/I18T(q)9H[/u@g+3-fVo*ɛ`( ')dMP˲,\26K_A !PNhذy\CPIMAC8wn\e0Rԋ@+>`xT7}02m-yyS"wuXȃoxkcZ\3]ùzv٣Byqj3ƚ`'PC=+mvN%ύHf6AN( aϩI=߹_d: }+p?PO+Zbbyj.H@,Z@"ғ-ES4n)olIIBr~V>olbfLTq*+9)XLVRf.S9v.i硦>iFt+LVvuOx39]O#2]2=&K/~~<O^?vf)o=E4ӷ+4grN=U"g`k8=ü0}8QcÐӝXyTGָaYwSW-XVcNx.F~eyUڑ0@5㶼P?!@=LXI6QpӱڍyKoqK 0ݻ맕d5w$,ϩ/ tцB*v:-7ޚ, )p@ :$7ѴyN] h1 HZ޻Bf1畏?r 3uQB}\cmd!@ WS1zݨ]3CoFq"8ԚέiGb[UgfN G[oLĎnrWxzdD]Ջ` l_9 ]c2֋~ pIPӻߘ)* mS~H~X.t;/RG'~[!<8zvOB9`55'{ɸ6g {pqT3^-ZId, =4pBwbO&Ҹ$d%FN`7>͕xE_{ ۫v"{.1ן%$r_m L=mPO%os#(ĴyI%4aĘnzn|l6AT޾'VAJJ{` ,8I%vK$%Gv XY f 0NndQ& #PhꃢCAST part of OpenSSL 1.0.2k 26 Jan 2017AES part of OpenSSL 1.0.2k 26 Jan 2017CAMELLIA part of OpenSSL 1.0.2k 26 Jan 2017)TPD ,$!%\QM@CCPQA< `cC#( (D@D  "%xsK;;.pp@0 <3?(0226tpD4, TSG\PLXSK=$ $ psC3 2, ,'prB2 ``@ PP@#+  6LCO7XRJxpH8&/`aA!4@AAPRB|qM=  PSC7!=trF6,#/$#'0 +"lbN.LAM haI)|pL<  ?/3>d`D$,".HCK   !!hcK+dbF&5 3|rN>xrJ:DCG%$"&-!000437.426 ""8084'DAEL@L )415 <0 <2><*:LBNTQE83 ;h`H(|sO?HBJ TRFtsG7 -DBF5(# +daE%:#91\RN9&2011*laM-\SO$0 82 :XPH`bB"(! )033( xqI9hbJ*(" *088(! -,&ܳ38/`@ `QET@DDcO/lcK+hSKXbB"`3305! )( "ࣇ'Б <264CK H/쀈`L,l(4AED!3?<1 =< ((BNL62><%9 # +(bF&drJ:x#'$#/,1rB2pBB@AA@sC3pcG'd, 7- ,,*044 .)QM\8SGT. ̂9?qM=|1105 bJ*h1 "" `H(hqA1pؑaA!`>&QIXQAPܒ#+Ё CGD #,쁍 ?sK;xPL\"!cC#`## AM LȒ2 :8 ".,:bN.lRJX23AI HpH8x ;p@0pqE5tsO?|154`D$daM-lpD4t԰4* rF6t >@@@ ్=:0" *(RN\)RFTCC@ 0%@HHqI9x<!!  SO\sG7tPDT2 !%$COLBFD-PHXRBP+rN>| =000aE%d0 <<6$䳋;pL<| P@P1 98"&$220aI)h374' $$$ SCP @L L3 ;8BJ H7)DTP ,%$!M\QC@CAPQ< C#`c(( DD@  "%K;xs;.@0pp ?<3(2026D4tp, GTSL\PKXS=$$ C3ps 2 ,, 'B2prц @ ``@PP#+ 6OLC7JXRH8xp&/A!`aÄ4A@ABPRM=|q  CPS7!=F6tr/,#'$#0  +"N.lbM LAI)haL<|p  ?/3>D$d`.,"K HC ! !K+hcF&db5 3N>|rJ:xrGDC%&$"-Ӂ!000743.642" "8804'EDAL L@)541  <<0A1pqÉ E5tq;8IXQ?I HA 981G'dcӈ8 B@B# #L,l`ӄ$4401HH@O/lc =<1 -,!@@@>><2<*:NLBETQ ;83H(h`O?|sJ HBFTRG7ts -FDB5 +(#E%da:#91N\R9&2101*M-laO\S$0  :82HXPB"`b )(!303( I9xqJ*hb *("880(-,! &38/ ``@TQED@D/lcO+hcKXSK"`bB3035)(! "' <642 HCK/,l`L(4DAE!?<3=<1 (( LBN6><2%9  +(# &dbF:xrJ'$#/,#12prB@BB@AA3psC'dcG, 7- ,, *440  .)\QM8TSG. 9?=|qM1015 *hbJ1 " "(h`H1pqA!`aA>&XQIPQA#+ DCG #, ?;xsK\PL"!#`cC# # LAM:82 .,":.lbNXRJ23 HAI8xpH ;0pp@5tqE?|sO541$d`D-laM4tpD4*  6trF >@@@ =:0*(" \RN)TRF@CC 0%H@H9xqI<! !  \SO7tsGTPD2 %$!LCODBF-XPHPRB+>|rN =000%daE<<0 6$;<|pL PP@981 &$"202)haI743'$$ $ PSC   L@L;83 HBJ7pKBig Number part of OpenSSL 1.0.2k 26 Jan 20170123456789ABCDEF %)+/5;=CGIOSYaegkmq %379=KQ[]agou{  #-39;AKQWY_eikw)+57;=GUY[_mqsw %'-?CEIOU]ci  ')/QW]ew #+/=AGIMSU[ey '7EKOQUWamsy!#')3?AQSY]_iq   # % + / 5 C I M O U Y _ k q w   ! 1 9 = I W a c g o u {      # ) - ? G Q W ] e o {   % / 1 A [ _ a m s w      ! + - = ? O U i y !'/5;KWY]kqu}  %)1CGMOSY[gk!%+9=?Qisy{ '-9EGY_cio #)+17AGS_qsy} '-7CEIOW]gim{!/3;EMYkoqu %)+7=ACI_egk} %39=EOUimou #'3A]cw{57;CIMUgqw}13EIQ[y!#-/5?MQik{}#%/17;AGOUYeks '+-3=EKOUs !#59?AKS]ciqu{} %+/=IMOmq 9IKQgu{   ' ) - 3 G M Q _ c e i w } !!5!A!I!O!Y![!_!s!}!!!!!!!!!!!!!!!!!" """!"%"+"1"9"K"O"c"g"s"u"""""""""""""""# # #'#)#/#3#5#E#Q#S#Y#c#k################$ $$$)$=$A$C$M$_$g$k$y$}$$$$$$$$$$$$$$$$$$%%%%'%1%=%C%K%O%s%%%%%%%%%%%%%%%%& &&&'&)&5&;&?&K&S&Y&e&i&o&{&&&&&&&&&&&&&&&''5'7'M'S'U'_'k'm's'w''''''''''''''(( ((((!(1(=(?(I(Q([(](a(g(u((((((((((((()))!)#)?)G)])e)i)o)u))))))))))))))))***%*/*O*U*_*e*k*m*s***************+'+1+3+=+?+K+O+U+i+m+o+{++++++++++++++ ,,,#,/,5,9,A,W,Y,i,w,,,,,,,,,,,,,,,,---;-C-I-M-a-e-q-----------... ...%.-.3.7.9.?.W.[.o.y................/ / //'/)/A/E/K/M/Q/W/o/u/}///////////////0 0#0)070;0U0Y0[0g0q0y0}000000000000000001 11!1'1-191C1E1K1]1a1g1m1s11111111111111 2222)252Y2]2c2k2o2u2w2{22222222222222223%3+3/353A3G3[3_3g3k3s3y33333333333334444474E4U4W4c4i4m44444444444444 555-535;5A5Q5e5o5q5w5{5}555555555555555666#6165676;6M6O6S6Y6a6k6m6666666666667777?7E7I7O7]7a7u7777777777778 8!83858A8G8K8S8W8_8e8o8q8}8888888888888899#9%9)9/9=9A9M9[9k9y9}999999999999999999::::':+:1:K:Q:[:c:g:m:y::::::::::::;;;!;#;-;9;E;S;Y;_;q;{;;;;;;;;;;;;;;;;;;< <<<<)<5 >>>>#>)>/>3>A>W>c>e>w>>>>>>>>>>>>>>>> ? ?7?;?=?A?Y?_?e?g?y?}????????????@!@%@+@1@?@C@E@]@a@g@m@@@@@@@@@@@@@ A AAA!A3A5A;A?AYAeAkAwA{AAAAAAAAAAABBBB#B)B/BCBSBUB[BaBsB}BBBBBBBBBBBBBBCCC%C'C3C7C9COCWCiCCCCCCCCCCCCCCCCC D DD#D)D;D?DEDKDQDSDYDeDoDDDDDDDDDDDDDDEEE+E1EAEIESEUEaEwE}EEEEEEEE@@ADEPQTU`x` bPc d`@aa`bc ڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB:6 ڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQSڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQ[=|cH6UӚi?$_e]#ܣbV R)pmg 5NJtl#s'ڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQ[=|cH6UӚi?$_e]#ܣbV R)pmg 5NJtl!|2^F.6;w,']oLR+X9I|j&rZhڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQ[=|cH6UӚi?$_e]#ܣbV R)pmg 5NJtl!|2^F.6;w,']oLR+X9I|j&rZ-3 Pz3U!dX qW] }ǫ 3J%a&k/يdvs>jdR+{ Wza]lw FOt1C[K :ڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQ[=|cH6UӚi?$_e]#ܣbV R)pmg 5NJtl!|2^F.6;w,']oLR+X9I|j&rZ-3 Pz3U!dX qW] }ǫ 3J%a&k/يdvs>jdR+{ Wza]lw FOt1C[K !r<׈q[&'j<h4 %*Lۻގ.ʦ(|YGNk]Oâ#;Q[a)pׯv!pH'հZ꘍ܐM541ڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQ[=|cH6UӚi?$_e]#ܣbV R)pmg 5NJtl!|2^F.6;w,']oLR+X9I|j&rZ-3 Pz3U!dX qW] }ǫ 3J%a&k/يdvs>jdR+{ Wza]lw FOt1C[K !r<׈q[&'j<h4 %*Lۻގ.ʦ(|YGNk]Oâ#;Q[a)pׯv!pH'հZ꘍ܐM546|p&ܲ`&Fuv=7S8/A0jS'1'Z>ϛDlԻG%K3 QQ+ׯBo7ҿYK2rnt^p/F @1 Y#z~6̈EXZK+AT̏m~H^7ৗ(ՋvP=̱\V.28n<h>f?H`-[ ttm@$ڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQ[=|cH6UӚi?$_e]#ܣbV R)pmg 5NJtl!|2^F.6;w,']oLR+X9I|j&rZ-3 Pz3U!dX qW] }ǫ 3J%a&k/يdvs>jdR+{ Wza]lw FOt1C[K !r<׈q[&'j<h4 %*Lۻގ.ʦ(|YGNk]Oâ#;Q[a)pׯv!pH'հZ꘍ܐM546|p&ܲ`&Fuv=7S8/A0jS'1'Z>ϛDlԻG%K3 QQ+ׯBo7ҿYK2rnt^p/F @1 Y#z~6̈EXZK+AT̏m~H^7ৗ(ՋvP=̱\V.28n<h>f?H`-[ ttmYto8w|2ߌؾs1;2tG%vk$f:cZh4#t+x#e-"".|W#4sdl0kKȆ/Kyh3[:+)E\\*=05jzjgszͬs1/>䘎k-nAPZV9.ѝ**慎"7 tn;bYAT*8U]U)l:T^8rv 6J&,o])(|1 `~zC|_cM7-X Hzj)sBО)Sg92dQ>a!@r[󸴉 V9Q~{R;5s߈=,4EkP?ƅ͞>f#Bd9?!(`kM=K^wY('3HjB~~1f9)jx;\_,}٘DIWDh'>f,r^&@P?a5ƶ"߹\k% cd 9:hSIxBwiɉrioHJetizg+*=}p_$܀AH1ihD5޳xĶ\Y*Wc."=9ZʧB=G`b%ki})wZx7X+J"8"cs73KIܶjmvHCzb1?B@;` uy`2}kl;ATuq/}7ya”, <ܨl3d+XW=?';<} ]n@TS FTh"k9{^]qR&  S;+˚ah2Wl $?XKzL/,8 ه'pQ !^&)jgh\HS`TP_Z扏9 U+"o;onl]A|'`Kk,BGc@w}-39Eؘ–OBJ|+3Wk1^˶@h7Qc%Q MinghuaQu)rx?|*b^fv |*b^fv e9މp+" Hr9Z^kU𘨜寇$>u|*b^v(߬ea'WMinghuaQuS^ |*b^fv a'L \,Q]tL K 蒴dВCF.7Gnn6 ظY| K MinghuaQu :Ds6yuyy=$<,^R- (`|,[Z9[-zu 8MinghuaQu41;ѳY̛^),eXm]{j^W)2@'jM:q_KD?$rs;L8,zv06M~51k‚S3)E\\*=#֖vVVI0% dX &D#sao55b(0'yX1^9ov`֖vV]h~Z U){Կ6YOzj{&^/͸GNgL敺x$MinghuaQu[ӭ!:  kV!DA%pVKc)xAߘ3Ccn~sKNP1#:dM[ӭ֖vVZ!: 娉A_es&jFVWsL!VP1e-#fHmy@6m&]$iT3S{דNm^\]8X2.68ڣ ,OT(Fx*a-ܴ k)ʑ:XiCwVgVxzxvTC^BﯲQ Hœ' `SQ/xtJ2b~hԙF74>6lq OE\ ys$w #L3?MinghuaQuwű0zQiq{@ ȩ{Ièz[|1G_JtloaybSr%7: jJwD:̒I֖vVQ7ȡo"cZQ7>g >iwpɻ'L7~*j[Cٶ}.g~Q5 a~Δ3V)'"LlZVTr2:~s)/ck Lna&S}UZg'͛VV[nst՟kA=K4K Pfd~l3, #X!;3; B_}ˬ!9u_e96sqUj5x( g6qo~Rt/i"&@)s '&L{*eU05v1.T05u1*]ƷeS Zy|x$!?xD?;bS&_#Vzi¬$XI(681]Bo~EFYb6N4aw"Y.uw&]E1;y9%ݐOp.%U~;͆ SghT$Բ Qo5ݰgyE9`[*|ﭳ4`_eI:q! L'ϸ|`b".U@7Fi |NB)4`x/'2Qe_lBRzXcH(k_ @U}^[K\_4@W֟y!= LKMBb! !\Ku;{GkB.gGa֬'ȩr/lzUOP1{T_]H`ЈݳIk `dub`DJwM[4%ZQV`yNTyaϫk+$jv6ŧXOTЏ8QOKO@6ds֦3_|</d7٢sH%nY?1?䬜`$HCpG0MΰѺ9IGvGMʈRrI܀O7OJ;ʕ1MՌ0zTm,IyDOrܶ {20YL>ǣPc䳑ۑA80K98޴\wc|H*X:3Hka:#%~"!)q/\jˌkJY3+gVn)JZxRM9 )Urz4V)l CWbFS/Qn#<H'[aUsh#ݜ=Qtn/NGv`֖vVT%FCR4"xu2Ȕ5RBQ}$ <8K MoiF=y2=t3#!Yf?XHʟȂMSL D֖vVX wıف|Qrg8NH@t3O8 $&nNm MĆ&qۛlhMf%8#џM۷P\MinghuaQuj6&=>%ViTG*V8oHT%+{|WM ϊ"RGu޽5Y ^H?q=  n)\@}9Ж{pK ]G dގ3( †g`)JWoS-ֺ}a6+jV,SsW+ &NT'D֖vVU/'(fS{ggRcjheT&@'kdRbg.EWxogTb 62ײ67J v[43^3)2E$@Ðgȓq/$֖vVX\@(wMwwǷfmfC q'O ($+|їbj8 (Zj(xCCbm`!:>zC}f PPe($ksSQ-Ƅ֖vVPgxmlGV ""Vw~wwq&τyYc2?7]LOCDއFP n8&TZ9aW]Y6njL|{UUUUUUUUUUUa h(>HaZb!.`4+D9*?cߕYzxUN'ѥzU玚Ê_ ذa}\#{l!.-^Ոq~!/KMinghuaQuq ]2W|T1:FgVCB>'uxWxvy9/02| Ã"Wp.| [pnVk~|RaPw?k&itNqdǩac MBI*IfG*/ߤ֖vV]&g''}B0wWg#Vtc%Sf&dyVT_P7eA͂J/.?wREr/ͷK(NiG4vҹ1p LVg3LE;^,qbV}TSn"~3UUUUUUUUUUUUUUL# ;_JN"(q-Bu+,@ M͵ qg+|4*Up:o?̄@a,l b-w# qݍiWk.aBA0^ʰ^]ޝ#THn1rE{{b!'. i1IQ 7~_-Q Dt(x6ZۗU CyڦxyNqf@9`Us@{^j_<,z>\&(ZdOt &៾n qQ~@P(2RzAj^& T;VW*VW*-\?ahDC-L+5I $֖vVX[3-ƀVggjeK uO5n FV|FgUVVFg#VVTfVW$r|I6?]R}]E]94V&t+c)#<%wgy8A6j.:$ߜkޘz"9S)TpHy9HO{N#exhW-0Z@q(k򆼡(k򆼡(kkV, Oqtu;/p % R"%nyU [Gxv/ Q*j 2 E,v X0<4E87N I-dDGjuSUz‚VFųJ9Lk"'!oj_{>ܺbزRWs,Yb:E8C|хZڨ*P#Q-rIي]ǰS.Q;zy @1[g6`'~ #Llj]9[#lĭ,* ЕloaThM͏ٴ}CYTL놂7ژ*gZbmNPszb8&]j˰L/z}ᨛb]jY7`@4@4@4@4@4@4@4@4@4#p;^ƍ5 IJfyy pxKJcx\ms@3{LjІl  |D۟$ ^^J_spY`ǭb4{⢀tat]XB4O-g^Xկ?jObF1ZgGz8GAfcc!^J_spY`YP)@` ^J_spY`ǭb^J_spY`ǭb zUkmS[{Q,M}z \U󀱙;49~de#xq||a$Cw!R^J_spY`YP)@` *6ͧF0эGmbj@v91@ƚ(F(|(̣rOD~o%d~S3l /\HS7_j[_H(Iw?)*6ͧF/k[Ĭ*6ͧF0эGmb*6ͧF0эGmboxhh޴;5hT.'{y:匂<0(.?,Dja) ~,Vg":*D|*6ͧF/k[Ĭ4&Cf*0%uׇWډ~h,l)S QN*ذ*YҟC%!5f۳r8l@ ),~\4#}ƌLLn}XVrro$ƸNͬ$5Kʣv4&Cf*0%uKm޼4&Cf*0%uׇWډ~4&Cf*0%uׇWډ~K3}A{'  Ld`jD%8BNv.I`)Հt>V??M| KA j_FL4&Cf*0%uKm޼ Wۡ>f rn;#& ( HnSw}Z u,0Wu0AzU&\lJKD0&\lJKD0ٻ|)\kҮ~W,KH/'#:DS2bT~5FawE-T\T/iWۡ>f q9zaHV Wۡ>f rn;#& ( HnSwWۡ>f rn;#& ( HnStf,a0Nfs= vį/I%j+f q9zaHV(^G 6O Vm?;5yfu}RBӭ@ho?A4T1͈E9o^C~SظRĎ7 ~* 9UEȫ@$w'^CqxwjREi.^G 6O}I4lO ~xho3W$Rc:z'H>fqz0NXwBE_^G 6Ob|9ɔ:PLdhE:?kG~O &46FGԯu ¤\뎕Rb )XdO)(FF!wBA&g@P^( c#.dZ!2.Ljp;b ;xԍPh{}_|mPG@j^h5" "}8]Vc2꿩x" ${[IJ_H^[K؊'c+/Tx:ݝċ?30cp3pU>\AL&AaGӁ]ݵi@ݝċ?30cp3q}MhB͡*检(/-ƅ(`VX:Hݝċ?30cp3q}MhB͡*检(/-ƅ(`VX:H|Dnh! IRxPK>6+#e@EE%Sev6WgB>d\x¦$Xmޝu91=Qs\>w֔:d_o&5[SKՕȒ7lN041ٓ!!k߆'0nmᘶ2ݝċ?30cp3pU>\AL&AaGӁ]ݵiF@G(GPPGxGpG GНGp HHH0xHHH I@IphI0IIIИ J8J@`JJPJJp KHKxKPKKLHLpLLLЬM00M`MбMM0MN0N@XNNNN`N@ O HOpOOPOOP8PxPбPP P(QpPQxQQQP RRR`SS@SS T`PT0TTTU0@U`pUUY``  YPE 0Y@Y` DY` HY] PY`Y` hYD pYD xY`  Y_ (Y_ 0YY`` YE Y0` YZ` Z` ZE (Z]   8Z\Y` Y` Y`  dd] d0` d_ d E `Y` d`` d0E 0de]  e_ (e@E `s s s @t v w `x x `y y y  z z z { |  Ѐ p `   Ѕ  `  `  І iXj    Ж   `  0   0          p 0  `  P  @  p  p  y y  z z `P    p  p @ `  @       P <0y_u%bw+syU7v_ VWS\J%!݈҅]%q<0y_u%bw+syU7v_ VWS\J%!݈҅]%qMF}3jِ"s;:=2aH6/o#,-;[ Qwx'N?}J'ˇwf~t?j&맃\LaG>X.1ẋ)j̍F ts#PF 謬 kAbsWL-Gqb.6lkcZL9La\Į}Sd vЪ#OJ0+hshz~@5-vsJfw>7G9@>l4OtU[ s6!TYKKw bӓS+)cL$_JmɤO;N5F<+# >>QM[?0G({]BgAw;g$nꏧL'U4oŵ*Fk,* #ecwI-S}2!`{<vwV N&nuAYD,k0[3_zwE]{V/n+_Yf,9I %H,}sB$Gav݀x@+ ?8:we-}_J;TqxEb &}n䝵sdp>N+ava垓%=d %#hhwiҧ3Z4ޫ^87 $VwNC[ 7Vfmފ"(ʊ#S| .Kc% oig5U?ԼYSws+u5.tth["d|iJfϰ[BHn`&T.2skX]-'7"V)e*>.'[`ؼrK~V#p$t3 C]ăcOR@%BT5fחGwަdyp B e k.?uXI,|/#_>@MJy).AGoZgZH^rf< O\*K{&&M9olen%:6hA,uw"×((\TkiL6-wJ$X^f{Ym% 1z3)+Y]ٙN[]xAԢf^?a^5L.V}Get0;?ZlP*mbgԝa<)>uzGՆv0o/5*#=҅ jX3w_A5#Mj- d5:t\]>yhP-Svn.7i@X_B'|,G`J)'q/qHofw{hЃ(8m5@Pu mF+a1./#{KPQV㡈IIu˓1iv{s^]Y7جgkힴo23.*CeBg(bɍKP9Cc̖1YhVÍ{2a8uz&UK$τŊb9ZD_{Z.0*,sBjOIj.Kp^ Xo;Lxї-1KhC-,>RK0(#sS.۪jk=>9=h*K -HhJxRX@_̴2fj]^X :'pJH=`HYf♈ \sfۘG$Ga|w9i;**7C2$eOINz:  HdD~@.{‘1b4EfVhK|΅We Dhh3:+jGX( Ut?vO` c/Cl<| ƥʔgus[d>0݂q] {ooˢ&V<2st W Y~v>#d.tȴ4A !B dʩj댐:eRxT 0<1z#k$zb+!X^=БnWW =Jlei5:͔+ӂNƠQ E&m HΌ{FUE6wt딣߇c'<}D+P o>ڭ,FX>bCaXcM,H1#Q;."ctl=`|ew;- 8Y̜1YքMÀ¤BYةF Zod6}#16SX/c#}vf.{NdG$i >.h<%  rfL '2u{-Fe 46tYC^n%/pfF..I`Mb"(ooq"9OaO b\ڰG~.MWY2w{J +\_ǥU/0LYC[Ήdz%}fXѮP,5` K=}Ϩ}$?OsŀYtٷ=ۅlabARЂM;͑ݲO_yG|Z|ӁF _ҍ%4_P sf;KlD#4}$z9*{8by&nl 2XGWx2m4}O+xGǥ3+iD%Ł .w,:ِIu@n3\x%[ 1)ÄcnXbB+?ZfCE]UWe8=`u<(96Ob Zq ktK!U"ʮ{Nԓ]Q'mnƭw0A4kػ)eImCG9@Zf9ط& uRu\2AӬB ! iS'av(L+۷O۫ ^(|Z[d'}&؎xM6G~H¹xRhjh~+۸ ⚉DzF:kqCbÔAd?;P?^ C/C?\ ң$sN 7e_^Qabh=⥙-L1YDn&Ei.(u2ZB4|hdX)zb5".#þK'\&~MlT85yF?_٬Ȩ.4f01:dA!Ro/=ҼURFCYڡS[B_|U.Q.Ol%o(Q&~pªebD~6w=땕?nUV0%[1FJ 0I\+ŕ괦'uhjL?%z~@AďjVD`CjcQtJ ?*[K![N,lv(z2>)[8W8̌j02Y* *xa HWz2&&vDl) ʙ~od_r_0?b3cz>Sp>_-VAGgVI7F\NicШ!6|Ѣ'˷S݊+LgB 鄠7ww|QfzFIbn(hىA6#39gooL u5,"QQO 2 Lg6O@!fUY ~Sq5DJi 5V8|pN0 #|p@jm۹s 8ƒ }8V/eB=~,=|]Bp#.m9rK,cG |b}}[0CAw1NI2e -ZRA<~JW}j) 7L>5=@:TM 3Es?;*1?@s4O? hR=a ll8Q'Cb*]r\)mR/uҺ !"2y:DpOς֡rdl cx>nxc 1qwu6\83Ő)Ea.bmxz: 30-Z1eB' U,߄K383 7&˓V\V.AtxLahLT^3׋kF^(A{i:tɹ)sb.97M!k5GI:Uxf8i'O:4Gh68tbeY*؅ zBU=rL >rO3\atXJ ]LLm$`jމ(@.fWG7tb(tk"@ t_-Wq@#U׺Ov{aY`Jo&It-KYZpYZW-r&y$+= Uͳ d䯙Ev/0_<=d7b5o-Q1Z{ f k Tc`g\sYPƙ?OsYv!T*NdSEh^/XY3谟S ۘI4[ <@V5.\Ht]A•b [FVĻ! 3 5qQ\ZZ-l碛 %_*:4J"o%a&^THܾ"j\_%/h2xvs}KaHO*!V7sUH%@rcEA:e+G '."T%m 4HRiܬN̅7uRP䉀ɖilt&NA`6Ȳ $m驪xQ!{'ͱucC۳YS1n98DP\wX챠nI@(nsO{ aԛ2{Bqg#7a WG=qx5x5TA6s_:g dP@)7'qv"L- Zx:YeR(Řt \U )Z-Agp.u\:%/KS!t?#GG>8F& b?DVkOgrk{-rrpS 2YC"- dF&$: j,T,; &)l9&̖Siߥ ofͼ3ţ0w]6]UcyӜ æ^,UU[⤙Q7 uSJ5W eK+S.4풆aIjc>쳧,0q<ΈdO-F.SKݶ tH{1'gd[_]̓1t6=Օɮ A.00h̠x"2Yh 2 AFנh9 :Kwcפ 5ǽ3È;{^ƅh=9H0-F|uWmn|CHχ[%Rm"'FC-ub͞uQ'ZHuzI_= yOgbuLM߃,)c4qC)tWrmgXvi>yV^Ų!y^%I=VY–z@Z*hq CzrqQ\!B vRYW%|@ƍX52UW va6یw?nŤ!mG/3$v][Y#ǺrJSba_&;E:S4?Zb{iŽ:' aUu#J*D]WO"#y&;M"ڑalM2pm7^WD0p"dd3wQ]4&ιDVHUUƀ Bd `18C@Kes>(f`EK]Bv_HTs>i5FLc #,ݖ0m ۤ "V)ǖr_'&&YGSh yma.5dևY P&}Cp pؽd_4nPšτgLB 9&cGmΧ*b\YR>R5"WlwŎ )_+b~Fܩ%Op~)r $K1!] Z0zdswNKw]DsciJ$ԯF|=RP;e!q XWt5StѲG{K]r@Է+o`7llzqТzMΥ NţW&W+*݈1 l> 9@Xp&Gܧiw"Ux*Q8 v"7\ [K8uHͨ; ]@ΰR#zsp&Cbv[8 &Rot&,P:R!EU`|/<\}CkiD?6=yBޥ~>l6͵("g~zН}.#iEj h@M UHz4Z} <;SRC+{OR$njuS8IlQq97`n-HGb_ GTr70aF<7u,P5hGOM{1j/ \o)ZS`_EI_7뇺]^JV biN;菊EѝF|i[%r_Ž131I]od,X ۔@cvO]Bo^`%6pugK&&0@9=*v7 ^c!0go |?߈PmQfǍEqp=Z9Mc!mUh.5 e>Σ,`zs{.WHu++F /s@:T !l<6ʚ$hRh %کDE* ֑bR%E5u({(';{f.:3!b[W3 ͢z;'0N犵km.*[l=Q`(ĖAKN .1糅dnRw$>Mm/JhAHQU!}aql*̓cdP.?sf1cK%8议:6;by#;T&dn%X q7#. Z3ƪ^蠆*=y_4.:5@ N[FIɄehBӕbu\NV Fs򮤔x7Ɣuwe]IzN( bG޺dEp*1ߚ%WOKh=U_Ge"s31ڄeiQmltNAŒ\9:dzGN50$]^vKn>" Ss.\ݥ\l:ArR6jSm`HpSduQʆT ]FY\se*6@)U:\6Z|$XԸߐkbVٜ^`ǂ>6 V1ìq.J$vrND=^ܪ n&x`o&[nN"'aeZY93a=7c@hÛ͠R-тš'{%zI O*_t}*bQEy-Xet0dpmBu 5|#Qr^4q]4 N۵SޒFy'(s"G$2ᆮ QgPYww^0\ a,օkXf06lhF09eȩ"ǬeʄG#>#}wq*g}%/Dj~iz=fu. k&F8dZf6ڲذMLTv==G}V> *,t6SS'~B{G>~&A0؊F*J8^䩹JfoA8-JG&:e9CL* e76e=U3ߒ*bz ۮl.tZ5gF@NlC -a#oy=i~ w(6P,)ٴVCuڎjzߥM)pP|omMB6_: ҄dqӻ)AA 1x ;j!&t(aGV$JxMH gf2C7@ƅ·ͺ@~d`'QS 4#81f5hPZ:k5[T1uYϚU/I]PM.f`UOIC9 ߖ$ LFL@;Zvw]%WǾDdcz$['8 <Nutnq C•.yf2).vzp,ft/p#k+ka\T׋ (E"w*3Z';c+E(ȺHc8a", .LPTqYϨ ŎGWP)U MT,s&cI쓷Vq%z־M?@΍7MRL SYI䵡}_sRj3kgݚ۶2QUURx R؜;ki  an:Tʿls?eI[) nr;Yр~SyXY175&WLn` MS[/ px@ O]hP>&-hh|ǮoRQ0ARXuHЂau'm`MsI6%9>P*.$ɑP[g~6P:(~\:?j1j6}`"$)ubS#AC܉M3΃C*c٠+\7tȈBC]/gI1Fl{N:6-EN N(T9aвNi-H3oYV[Y8IqLڂ7 J0q!Di-!t;q_.qVL|RB>J7I! vD&I״:`0l~ebF'Mo[sӲ3ֹ:UH۔*,ZyG@.I U+3ijVcwAϙzM۽{!, 6Gp)ou}LAgDYMfЪ]zegxD ~ 6vH?"Kw{מLtQDtW[Ђ䅘N_+3R )k"5D#0@(GYYsK |LT2|':S_&潣GWirO蝃k0z%ȑZܼnIlΨxp5X9HlpAX&lRd0џR,L0Vo1k+=ncYHaueKo)nV6m'REAbW_l ހD~Zm97 K=XrWkOkUxI' {h44: Qad |(ۓ݋f$%%OV?$A"䃲?x9Yx %5R'b 8y?kKmFn#6`shmCvͯ!Ե?(\frճM ^LXjt5pܹN~&T:YK5!n^nj1AµM^4o cbaNo&r% 6`;5@)7DžNLu[@oN?5s:|Y3τP N~[;7Tqr5&'XG][S:]1h=bfz{ry\W6 ߖ3ja~&ȳS [c C<ږ:Gj2%IOޕ|e 8{dT$Ԧn|FtCl?T-3lDx?wѕ'q*W 4e )P^WN]E\2װ̖G$aU]wAE18 rąPK5S-ȦJ8TA#>\N4Z5l1?8©>{%;ň-:͚|=R,7P\oїH>Pxnیtj`!HRNH v@G<&^^h0Hy1xo_Fc蟖} bIA/T&u\#\d{ΣLh'b)?0z1>WZA $Ofg=؁ ,]ǒx\T|O{F,0=^>j<>NL 0[ R$32]h28DXihZI_7E~ 5X ax<'..֮,GgėLUWZ }y]}wYףIq 4ԪL3`(,Jsh;7,4TtLf-]hB1gh`6Զh,mB) Ohwub~_K& wqNjNFO_x*$x55彑[d^H,>${F:-F7#\|7R7NTjy l[(bQ\LǼ"Xqm!k;]'-05#6\_@] 2~+M mdA]m=͏HiCo1+v3Ag5~!Hҟ/UKFk1yX1ƍM۽oܛ  +5=rZPMđKm-"sJ۫uPIK޶g`n#%c61];FFG%$ubm4RjZ ]^#}G<2v 1x? &SER<-V1 zw Yci;e*i/XpJ 9'6y6EkcTN'sc棇 AQ3HM`$ r)L-)iuBY+fŖ^9_2ЀD'[zhzےdG{P`duPȀW}łN ?Sm#NtisWP$a#Hs;1^i@cMX—"/1to'+^12ՏfO~8* sE7:FWh.m.`cI 6iچEovVYQR+؄IҦ~I:T)Pl(QQ|2& <|UGٔIأ/Vf3+7¤..<35h@:?cax8B*<\t~퓴H܇:K008|XЋ=vրM-8Fu9(18C| 7V~$jbc4çtmh~DX K߅$ 4WVvs#ácS Ls'5k^ֵ="$S+qLef8*@T{/_֥? 4a6OC󻹎*};8.PWRw[bz| tM(ie-V XI1-n\sPPNhkUvmQ-zSUWs:U|7QUM?_15]>*DF(dIam2ӕ#,Y}ܚ$n 2SqDa~fEdB|:-[Z ( Na AWkj7YJeE澗V9ڶĻhFY& -aY =،95_0Aa5!7qp9$48p7%a_eCЧ &Y܊sw9&dczІnX.A2Y8 ZȚ_׍΢8f"PL'*Ը$0{YSS412_ ܧtb%]Y` uP(xת=wxnqёrVT_lI?[9qn 2f+{}ZkF-mZj룰uރ?3V6AolQe1t Flu{n;k'wr܂CB9uNEr}C7q 2{x7?R{B}7*[(]IQ4d;jn& "=XZ+K%x#VI:K{wtP`q [b3aɸC G]Tut2jOJw"sUSqē4{Kdi0Y=C׈Ko\JՒ$dg< ͫ/c5ȮT,c^L)@.#r2Nb,쪌=؈VqL *v~O|@wpL!OGY44R+D5X#T U]ȳ-"fBkAHi1Ю<BcY,v4SH<7-N !3achIea IlAQ5f mFO:2 ˸jajnX9 ї _wӇzeP>Tua 1G.WeŁb> h% TC f\{%R}\`a5to^nO4˚&hd 2#i`9}f#9i ʟmj|W,f$O؍1%i+u`r#|D~ eF =&H}؈9( n\GE wfykl'څ:ӐOG  vs ʏÁ:n"})9٥nǎK |y4(Q|̀cSZʖBUL}MRhJ"ė@" ug·B,ְZ`Fn*;j{K2B]՛M|EjN~[lfێ?SƇ`FO! ?kV&W 7JN0mfS$%{/K;h)j Az ̊3:z:u9e<+2Ǜy~#Ff)T&z{F?@7C/2z* 3,l9 :U` +~P9+dX1g|{ 9ՖWBsrQu؋D]d}߮Kk*/34 y},=%vXRѩ[w\<0WB$$ X隸ͣHiB.FAt@E?WTTu:jC*!C-Jo8ͷJWX^s\ĚUJ+T>Dđתǵ^{4\0OI/ bz7؟䅖I{ʫ?z 5n>!`kv ι'{P({[cU|'Ck[:O;Dbie.+ʰ ԨOl?$ ߜwW?"%BS4JmUa%e93!8{RTf 2 }f7ixZkOVXINn'vrsL։ymdyLFrZ1VwGf5%qukBƴkR~P2TɲeЁqFM8$R9 AT}N (fn+7"u g֠N4 uދHF=N=Knnҙm1CLV_>TD|!v3P(5 wuݱiQ|Ϝ1< @_Q1H툇<˭~Jq.RuO.:'ӻ~FU*D'}0twcnjKt]w*(Ղb=1* ^`Eºqfj:M:V,M:!H Km5 ]Jq:my0Mg** }?Ձh| +^;B&!fJEk6^ O8cv1(UPHx' )٪Sɽb{݆[ow^e }[y_GE(? ƨh),6Aq(`sQRS?n#_tɶ1P.| @btiw(7P}%:Z&C=0ƙwϖVaq Q{0^:> qկM ^͋50?G h:CO/h *TMՓeƊEaЌ3mXt)4Ytg R%>).LќsYbKh̖ړdУ]-<k:*🧥 %(-1)xq?{XE aeSnͥG#_{l :%LEFy8XՈr O wr&B`syrڂPj]çVXe."3diYgPybd4)m1ӮeN^T$(G ̊$":fd2n(ZYV C@:zy *Y$veJJ^K?FReӞT0mzW]ܷM}8vhJ-v Gx][M6ynV 8%@7-`f *ӯgЁD 0IXB=&Ǵ#A ^4tpr&a Oe;OQch,u4kFJPQvu*V+'UmpZ?ą(#/qI`څFc/!Sp&ہP%y4SQ8_d`\H㯖oVDwj1ihBMm _Pv s.^ hVq1c G+Awrs#^3hZ{ШU4廍Bg&1_&XH:6acfe-BmkcOiILV]Gw0I:/{0E}ne*+zv>$ON.GlqGaV,;g]*Fذ4 F\.Aw&r7<'Ơh|"𛙋B} @BH]f\| ԚV‡&g "!?h<`yNjKˢKn{`AU? @}(>ؓK ̸mP<ȩL8Ϯz\EK C&ؙT;Jh$J 6i>{lvnךSEf I2nCciO"A'A)ҵ7T'ВR3˧j7 %Z"T-47 8f-c pZRL%`|qA"[mδC-k]eIeb7K)qTQ©aq Q=\-H3ZSا}XqhRo;չSP-!!>]K^,3ۉ(+`դ]!+S!QPj2ajL3 $[fo@es%K],O05"F Dax|TW~xJ.axZ/{򜛑T&n4N #>}qss3Y!fWd ߮]%' >4[=\u_~oTiI[pW燬zX31G 50Lg>5{G ]VzģtdYvlfHa4H>XwA0˯!g/ouE!$k*"J'dX*e׏9;@L\+D*6wHοbx qz͛ KS1߃έ9T?j&CDa'qGFڋnG~@#j<W~90_dx)s٣P2Z#/ L^DUz_G3=t [}fjcn,T,>S&>n>]0Bw,.x$h5q`gu޴$N%a^ލ?T %HHޕ"enq7B_󭢗Oy<eYp]- 'ӄ#@Ez^2BA=-WsU hL< kga[ D|[%1u+@A!!#U-h5[Ϟ^qo'HN ~< h ƍslpqtD+Sa4;*\aspL۞I gҏȄ?bK>Sem.XqgA+ g%L u}W6*^PR$"=|..X/+L)+o7$?F(5A;g0pU4buҸ&Y kjy g4[ְT F]xȗaɤafBB yndop%ŸV٘F|R3V{חB}$4k*Age%]t ( ]zV@YsaJ!(k=4ܚa8)9n^:ܲ!Mtr.;n\-$KtmUmq̌3&> }ƻ6[,iO}^DQN!d)6>4uԲбs` c(^aJ_R=I)OϚN+Í >lp]>e Kq^ KǒD[5켓rS7͇n^bsΐL>+4jE)2G\fy EYgnhZJfYF%s8O.;xt:z$ ^A3PD#z=QcN/ x-"9h0a]b;xt(Op^ n1Z uJ~,0ouD [^yXX7uc .9aQqh[ LU ؚnwʛY-b"PhSݤAIQO,nEcC5)=.TEz4˗ ʏZ+;#^|25!TV'C u^}s6[՜UDwr}ڍ5- 0Ll٠<!uJ4CA2ܟ(m*Zu?3!E 9*}KHVvz%2'6M}c|dEtP@jB+VN4[ȨJMU宗kMJ7T,Lux'q9\`yPlB=64It( /,spap貣C̈'ì9.+9B*`gi%3e̅%Ty!֛ WwO J`d V$+(Sc'"YEuc?+\ﳧWqwL,h11]K$hqѶ 1?]Nr! 8 [|'a 7jR.3oxW!Q,L$嵍Ozؐ/:ьimS-O o9|,{<$f{A-<7 3?W HyȤވ#pԨD 6 ${i;5| O:/_b(s!VQeF 9 iI}-9l5PZ aª%T9݀|\KlҽS [+=9hUpsZl &v7YQShA0(pKޑ\b1lfzwը]b$95yzA=I,'#BĸG=JG*pB 볶D)s^PaG>&|_3r[ֶu&eJm.fd!ac@0Pp3(oh|K'f:/%;twT`J+lPRF4*>9UYau"!KEPxJuEԟ; 0>>t#Q+MH2i q̀bIcVwD{C'z,;P|#H%3/3gsi%YR4A& X)6} Gb %"55A10K"*[=clhŧRSr,8d+XCn }3Gt2mX47q|Q@_ee/?PDnRv~gcɝAi3LQ, ڵ^O{<C(Ŧ<~ fwg#ד@{xMsw{[pF$= C'8:D3DZZbC궣va2F: /jq[?tJx+jg^MLA"k'ܛ{[bߴwY[K,BоuqN"sJ7}'&V'4C, +V\‚>-l>mJ*;rKw 6!ҹUlr *T1WuGhݷ ߇㸼qQ2?68?+n<h&޷d-@{nZ 0V6Hm8KXEy.A):6Vc2MYj Qm1 ݏz2lj\q#` ,ڨ @/Ex`kATuĨIX 65vͬbO7(vjF{'Dګ@7HZj2wETIrS¢toS (ԏCD1mB"%^#9#db/S ZW8x# g $'ry[*Xv,$Ѩj\(. shy@]g_孄!E&}za| >.h!'iY|?M˅*>BI_6x&=Oğ rkCv϶:U'9aDW _n c 3d&!YYe2&%P"X rvX=YP,=ֱxqhpO0K%y2=?:ܶe=y6'(;àikɸ3.ۗziJܾ Y=QXlWNk/ct3y6m梼3h97GfS8UbraNmArQx@anD c 1m.RѺ?A?vZh  aUĤ!`o·}-_%DLƌvO5sP^$,E8UߺRjΧ乵"F S>ɮ(;2QJײG-׺ʐe\X1nqAؒ(ggΚƉЮQd2R =cdET72PMMS% E0!v4[*K5N{jזYقE=$AZ4.Ef Tuױ/ǜc$fanCMLUzMDw`xC 2`J u dz̃TNϺ9 vA=LM>i_3''1GF"4$[|keODjnZFzFZrhlgGF:3&͜ǁ+)"SӦiv-F$Cg~O\W2Q= k?~ratڶ ;Goޡ^Ķ9[Խ@DM~4nxTYr!cטQ M:fA,'qKynt>WK6n@PKF?u{ؘ m\-G;Qw&ydՑxh*s!#rhg+f;XѦ:m'Q∑ʰㆎd8o}-XH|d) ;{cf%vuْHvE̹zIj)s"_q-2p9.H \2v;eeԖw)];=6vFu$k(X,+99#:0Lm׭hjNJ{*pnusݶuC<[rRKh(,z)  #K]Q9j0~v^ϓKS8R4i͈ WǯQ"ݨ58 Uv^5%g.2W ԵNwyo( (mpҶB"}dAN"гڟAn +Fqrjg lM|.6yd.w0%.eƷ:Lf L'LCWɳYg6NA ʪR%1>-2^Rosjfa[BXuIg{&V|]62e5$t&^BQnůZnC"?kvUH1"2#RkwI%%<,a. |Tҭ"|%E?꛱',d҆Bj՟"Ip6K+`aj7ft?gwLވq-K9fkjPɨO^XLske3X ).b[nӮr\5DE~_`եw`r`;ҿI0p7c3Ԇsg{xwVǪK7H^ys 0sMd|R_nٸD1dhZ4N@MfKZ=xT 2:瀲9 JVۇ2=6bVemn ~]E#0rTz:"ϡřz:#K_/fs]}/0V"T pQ ֊$izaˮr ɇ'cuC[ve,P`B<Cnhc2YȣO#&MĐL>P8) ?*+ƿ>m}*ңV+& *v~9ǚC^WTcjb:5'aUل&;4;O-> N3'j@3* |9WD]ຼЎ.S8 h7;1QX+å/\4>~s^ #}B a?b"[I^oV$X[ߥHCܨ.#bג JDX==hX^:@W<dž9y^cǕTO ck_~indкws,_t(zXyarPf,$/2x1'Ô3=)1qՁ'B .6@6-zeZtĿ;s ĨF)W[ou03+ 2b؝YuYG(jvg;:w:)x e22&Ar8*>EY|Cfj~.db("0l6gFEʞ P!zRX zS0!@?5 ).wK d[!w&V K,uVwRb+@ќjT\G< 秼* ceݣۧt0{r) 3 3~_kB\C7y=c\"tTH<$dyodAg߈I$K- qbk˃m2of:䳁=e0J2Z!~#P o+G!/c b'w|@nNۘMG3~=O?AqPǦxJԾ wvt(1pCuY ,;=Q{qk#lY-NyiJ̝OX$(%9`H}%/d2];*(OLh.Zp3'YD{,`̀EW>&3-2Jprh[KI]@zMO'v(IW@ "PV8إ :xUY"8 /5iCSD{Q$|}?T[[B<=n̝C݁<ׁ_T^ ymk: M zޯ= S۳q8n]@IZ?f$͛E\ ;aIeMAn0<[`ʸ$ߟ*Ջ _ECR&CCQk׵U0Es}Tۏu&,-7f/ ɻ0d~y^DqPt yB恝`O3u޻ Q\X_} PcGsf !$Hdc;db/2X50Q5Ց4<HAOώ4z%*1S!ͯ^#ׄ\oL-3kf剙 a5` ˄HJ爴@P&Әs)@צt*bUL`ňKQSlB~gE% F^h/@xi>13v/Gb`J";KDsPEIF tLY^m`62pX-"И8~jLRG[e UE+GH62$|S)6f*\D͈ad+oVfYY?A A }G&8z,qp\vCtHtvI 7 F}EzZpYMƹ*IݣՋn:K g`pnno4Ekf%Ogfei;hZ! ${ 327SsMaC P_+!~QY.pEfU).#JDާ1~{V^alEhJ.U`/U s-DbG7{xE51ޣ5F!ƻo&YBG37LQbq:<;5!G?BSϵGuzg~y(ȅ XEE;ƬL{jLZAt.[K#[=%ڠNn`gupmuR9hߎYS yIڶOI_#]/زjN@Ý\a Ƨ7IV`Mmzznp^$+W@!W3?r>6;u.戻 hjupi~Q<Tdj=z:\h kPE's{5FO|$ N޻nĄJ.OW?ݡF7C4w{''tZG^o+}7aZ (Rx)g%xQpr2'}S~[ȓ#o5tk1BZے۬`Ǝ8naC8x Wa=y΃R jV`9V);EGٸH .=}:4{ -o Uf>qmsNs 7ig4!f FHY&fQS$XlF&8/3k~G' ?V Kk`F:wD|jw@E`sQI*9M(cHݼo]i7,>zJV*UvDehRB^v T+Ҡ/O4bl\ ,W:Afai^/ \a`M =R7{oH| 毬miةP %Ċ oVHa[_U^Cktl',4$^Ք |p5 L,|b%}2ol'v/#U&p-WxQ ˋrsQ,^+NNtv&eb>. 1UԗWY[#n0?Xϭ`-I =S'\޵K@=#v^=`83xS/ ]!/_@Bn$lpMJ&M~s3CM5V(at^6ȲAR?,vVG.nNbeأPش+F՚pW h*AxAfpE$m$LTh{[}b̈5B.iOŔ MĖێXAy'jÞ-]T䎐^.om5rĢt1BQfN'v͞/^s:gN(dqnkV2ya>~RN>Ylu蚳ce6 o*UmZˊf׍*Wjh 5̴"xPVS;GHBg7~;R.P  [ uJ5**_b*1)?8*ߗǰf_?ТoLKG2xVo\?6-0f43Mӑx8A٭s㯙ʼƪ T#eAǡd/Z`OYz4O鼈5}u2blG"n<4xD u,kj8 eܾe{]@Ur햓8vft6թ5]T|Hj1?L*맇_ wN*\43v9.|h;5Аa\gZBȏ6/jag .1[1Jr Afޫl`>,l}CRtij'PxCf:}8ZJ3rPWpxBRޗLJ>laF V,DK+@ūVg0rc+ZWI3pJ1W{D/isxB|+&"rt nS.+S.ơ4,̛F,B8\O(U?Y5qX} fp+2 *jNXcA뢐X4m|Gpk,sŸJYN<Ŷʹ9o!5l>(F#LUZ+Pl6翠,>D\ eEԒóUL $52 iryT&XvZGW#/VqVn9?dhV92U(+uX cBke-cNUGKOE $OVu`vG*$Lu"h#rd?_ zC/9z $&Y KB-#Lcw! @N*e׊1@/olYO]EfdfC XB @.K_޿4бǕ.=C8G6fBwBpk_EUUHvn%*S$eďڒT\tB!_;|fb.R7D)r{OjpXINdK8uY8`cPczc^M :KBGkћ~ a{'*5pBd}B6P_5"v,S6kWN<&06Lis:/6S8E 8uXxX1cJ<S퉩X=(lm@wvf9S3or =D0sjfz1#ΈXI\ Asca};޺6\GBܳfzK*(ڙ :c}81ewdu_qdv]<(D*qA)␑#πֽlRܢގmw[xysQ&d^41䴐麫%~kEnY#BE' 3L:H*Q…/\ӄf4{;#>3ͳ-Kńy9X~ '.R[C |-tr̩,n٦L@!Y]~Dbu `c60+! K~J*3}>*wR-]$ɨ< wy?]x@8gJ> ZzUA2"Gp I(iz1m4+PW7wZ˦G_dJYw4 b`,(Nkz }{h.gn8< -$+?.*s=v85BvIg͐~+O.n/"8plY$ZRg^+#_H>f11GNK#ˠO";{O )a@kXs.~MNPX*>].gțQQ9ڥvڜfԸfjK&t2'`ޝfdSJ0#`8eX\^ ŋP8/?j('+qIeTIO&[#}^xq{HthX@eN}!(0;Q5[i6fJ; ]M=#5Ku3cNS _սp3\,zCptNLj (_nҋ"թ&/ĒQ0@v% o6ܹlX$MyBd ܕ=l7Dԩ5mm,Pg-Ǵߟ5L ˸A(V/` z0~cz7eaGw 4*^ O.;^_pO̩- ]dɋrNRҠJIO:[_^#?D嗫:C虏/Tsj^-rdHWv[f<>28=k;s<|1T欗DqR `߰@.1B9gj8(1DT%$]Bϧ2ē`Mq +:3[:?tyabiϯי?-UltioG{H:TIԄBuO4{Q= i(i/AlΆ#ͭUKgN\xS8#w|wcw(YgTeBFEon#p$b?jd+Ƞv2ڴR0ߴ*kT׬9*)v fJYk&¨s%;Ui#3}"=<3Ut;R|N >$s!yE!5;24`U/J7Y|J`upekۥb?8sx ȼk4p W%F!`jLTKTzNj=1 RKup]'kKdBlzp\gU`J0HgXӪ(sgRܘ̯ÈIK͸-j.>o2Œˡc:xэg=ZwnhmyjnV,3:A:/Ș٤7_VR!ir@r`6܌ي,} fGd#f\ l@$5_c٩Q@*|Dڢ]͈#T}C}(dg9ͻa>B+ -eӍ}g>{j˱ץZE ʎ>+ݕ6^9ы& :Y:T|}{ҁ?F]V,ΜQug>c\`GoJJw/EBFMRӤo¬mAFrB+N38$/I-2e0Cυr 9X"$;YއP{YFex*HVP^&$6c m@ k Q[R{hb^|}Eq18b&{ j:GC1V8(:6j/lZ}Y)Ru'-,‡z"hquwqk˭ 8ղz)[NbzY7,9Ɇԡ^lzö IGeQ l$ӱhP`tb,ݱڧ9a݃}P@o?ͧv)56ްAW?=^ҩNbood¹J-_]-Û[f7@7F/9nMEVg6M!Szٰ;- N_~|2~կHI@3J/LE[~uJv_cϧK@i/֊߯3_Nwe 9;FkH,- bCgXZD]J icA=PɊ f%N-$⵳ viah;R%iv%ߛ>UTl I[YJY2ʉ-eKQ5b 6PAGN_4l&: q;[z%&jj](=#z`{DZH vhc aFAbi=Fi:je̋Ŵ%X6B@pτGk`_'?ϹJ s ݊ NcI8T-sTx ..) j <Ų'u2sJw2~-Kd ³"h2&&%p7qBi#zFX?1}iPZ]FKC$O%,]]=>-Gxv1&1oP꺢K[^rfKBd,kXKlQT~[I,`ߩzN٭8A} dKi=GsF`kCʡ:yN"UV K'9IŧuQ kiZ#xx{'RYne[9}OELu1 ӢzqN̜]E=cK]f7Ah Peo߉yHs8=?f3B_]gufxC΁t8*uJ% M EdDŽr1lķ">@^&N2^pVY"BY_Lq)1haRAe"hcFQZt%'ǨGw13\^d!`'"/lʝF&[<VL.o3Ѯ3d0VPnV9.WP4$![ ϔԉ.X R1 aS&v&*o\҃FNywo1υj#3k+/ǴT)Uefoifkr 5tPEe쥹#}"J#ʕݘauȩ`_>mZ7"cJ-jjD&)PL?  5Umf+tQ^2PF^WO%/v*\3o䝈΃`dis'5*A45ѭ huuyUuҬO8uuء^.Ŧƻ+=- 3_2F $'g}ɛZț2s2B)}~W4)诔 BCeAwdn.MFH"lv Lsl.mb|TӅ8q2E"@KFnyqmd#SnY|A& H1TBRmqRrJMLf~?xJko#lK1(]fL4Mv8W GxRqqEGq~{us@{،8r gV5u f1xK yYX;iSKVRzQU׭=dX* r]1L$1]**uC#3,ݱUJ~yjE:JrFyg&NR1@}pcل0c~fUܜoD.+s+N9.qn@}JMc>+tBۀ,@aRWZ5+tf/V;"mmLN%(Gu0%f?}Pi&_{u ޥ @mY33s>)xּp4Iok@7 ;-9kIoQ)P6r1ij烢9ϴ7'uCh,=pFUa/(JɤV GS=_ _$7*xq?"+'Ge@!ÊdEYP3 ?diZב5دj A:n *UcjSj:$-| <uqHgoOs{r6yUT <(+hS*+и''2H!;)@kĸ}. |/^ytR저 sh^_k M W;5jNfO&3\W_NA ^!`@ehgRFdN?Uv.kj͸& NKU&qާ%ĎiVll{s1"Ĺd.˼d; j z_ Gt5yZeL 2'(BkJj dET`K\ݞnP m_e5R| Xd*qC=;uL:@{_`]d4`5JA(\rP-L]m鑛ѩGLvE ,WC0R6|u%WX۶lXl)z @zr|o Ƌ\5~Jv}z뽧Tgd3V~bgD$ȸA 2OHz6cL݃4 GqRʫMɡ# ̑ "?j,4J2 ¼B/nt AKKsFV{@WE]XaRsB4g1lpvX5|5aҢk d $ C?էPW?6h'yx$3Ej%Tb~ z[m\dwzQi4_ +wi. &Dt;:6`3|ngULs3Qz1s4ԙa4%}/\2w3^\  ,p-ȅ<Σ#3sVaA0k~НrxG'_}eOk.@=W oBze*~tj t\&*jCMo۪e?̰sk8xAX)&ςOpi^/ øP%pZWj{Y/$(YMK]մ|z~")]o81 MaMo^+܆b hCv`jq=Fjǻ&6ݎ-WA;L̲:]F5gž4ވ O7Ɖ"E9B1Ô{Dl&rB6FP8:cwd|klƼMd{b(&@ZK1De", =0{Bv1eR-EySTVHԭ\醉H /mшAMPȎzaNs AYW|WM2KlϮ_æF̥6x"qm_&VqK2t-q87M [elH:!媧y&N =vp)P-fnsH"u;f]WS ~;E!bwxT%,7 zK%ؐW?uZFŽMQyd| VfK2 YRoUCXYV07;mۉG/ɵrl}F9%Hb躺#/(b&2QZwyC).eAK_o4/O)D0w|{VP1/+ԌnX~%ؕ>Qݿ s\wIʷ^:W3if\\B*BZ\bh.W%(5T ooQVt+RWG lƽk!W̢h-75'|a4Bra%VU Ҁ GO^Du3P6S^uqUh3T%ȬfE~FkFqHe1j3/PAɪMq DXXwQ iOTm1 `gh'XI4F6|GGE|f{p" ͌Mb#5UDDd?;40G3($-, <5[*[rC9oWgax܁HY} ^kPՓV 2}9,"QaF| d-6M>N0jI꫷}ұzޯ#aXӆfYtok]J{6 O1L 2'ʊ֥Ε? :eh6{|6rb5 q!]#1{U^PgMj~C@l0s||0) ӳ7[\%LRRQWa68yއ*i TȀ{(vfv41PI9e=ƟGS Bfا\X4;:g)XGDj{|f`욼ݟ{ig4FA /gJ!z2t<ĠeUOwKej `B;*es=;\]Zn'_R]Di] v F-l)1b2X 9cFͥB,q;uC#h/ל_Z)E#W? 2lR.N\xP㋫s 'c~e=^o7[IȒۻiAC.$oQZD%iI P*c+Hf F>WEp0uλbq۽ ]9^PzyWMCh,j5`63K;l-AWt[ȇ-:qt<ޔ["`ku+]|T5<3<>tɃA\}~4p 9JӷІ5p6`+'vJ SE)Mi#XIZ>{Lz~/Ƴ4Gh|ggO?'~^ى.%A}ɹaǯSYga& ]*g%@+91Yё$t<;#A}?n#p(`IbcI+KeU6r-m_vV"^l^ XD{p7;G*,*=*w{Z0 WNd.JJnRSJ 0#&âjt(@L)d1Q ZQHV{YBTH:|q}Xee+$$z˖Yۊ3ZQ`uVȱи(qf 7A*#:p$a hWiRCTM Ojѭ o5UOHN.8U} n/෵I&vkN`m'F6Ѻ`(K|!Ȓ-cTЦLG.HKrQ`eF!d{iuН2.lY[Ndhsev!#^^UrƮ`ªB@3f)-=uP#3HЍL\cQA\{*<|Bfl{$=O 2.`Ch. (,R/l%x=^DC&QC24U gi(b'WJzuӖ?P #8$J6"t堍؂NƗ.uPp5P2Akv;Sg ղمJ-4:/RIv;I[ iBT8ǝhD}*x@?,ߞ.𲳷^ 6#0 k$h֫ 3#@hN^?!,];їCD{-;p8 Opb ӥxJPF~cC*(=&&l%Y ;s䵢ŒO0:;C \fe=)#>U(+ p#J豶B4r&-.f qޖЉ2s2T~lCw3%ss2V~pIΠ|~_+]naZPy|Hm{X'2jrn4?= Gd_YŸb& ti A H!՗;%|>0GK.:7bs^N&pfFz G 5FQ~^1ೳyXѾgty?-O@:rC\OT Feg_uȕ&J|Mi.l-^m>!#w;X袣`/ H^ zڣJA;ݪ&IJkMjx2ckUnޠ*\pR!_mS'VL )"D_ ѾC[sHCy)y?iLaL:V2ŚwQot'y_lRn%Bڮ&\rp"!]o('Ƚ2ϝEc}!p7Kh{\Y07e7;&j%ޛ,(RyݼTU[D{3}KI4f$m| oPL2#." /,tǢt{H` h,ӳ6{y_jPϻ2d}G h`v%єTkɧq#nŠ-|]ݡԶE<"z>Hz,4(.1җZXMހ|''•]$\oM@-Bӈ2܄L{&t|ff68~eYm70^ˆ` ofa 3A?'V $dݭ]&@+fk:+RGmFFbiaI Q<{7!F^2,dR{ms u{p9Z,?IZ~wlM5UZoQ"pS)*7 MW(2,;ǓؽaA`b/'N]j,Z`|98ezF):O4mIkڳ?z u;Շz{&EV9h6]|&_+y& O7L= A~m%Rs3C1$1-稕!x@/M)m'dzT̀B68w/6RM~]qY>bH0/[vS! e=Խ{9tӟ Y_a{T@롏Hz~D{2в+/mld*^5"yblPNbռ$~!5DGh7GϜl? H;q <{:Kճ/]i65:[ARDYwŢ0=G܁~WJ4)J \:҈䟺Ga5C35rhM(%S]ף֓ } +A:GI55W78X^WatS O+o%K_3lOwNTT/4GCiI "W"Ӥx8 HnP7GX8,v:ҎD{mz/:3R$>Z]u  [l߈ʍp8ˌί5"c j=Z5,%-yer"!agn>e_Juǵ |+?~: Pr)ab}{qkxӿcstd5)6'{V71:e6Ȥ)+\DkmY:~ڼj^(?;꟤wE2C*a0pn ZaEvLaF#bgn?MwN|%#-j{͛>uq9Blxui('jKҷ8gՉrk@4Eբ [)\vKDREґv c2w७dLT[NЯ':t %n}EN2 s/ 7K) `:zQF=Ui؂Anq}HTiiFH.PUX83XV*ȰbeӅiOz.5eCQf82֕Ыn<~O@ JxĥXXJT-S=PIԛtw$3 G]۔4b/ѽX{.W_zH<|UҞU.dᢂk)z÷KFz"}S =MҚj$#{`,a]pPu0@ƕ?0}qt ndU"xJ_|(=Ydj[== x32? a}~gmN\ ÕZ E-;n给+g`!J>ՄTِ+*w$WN <ɤ>)U,>cSœ:[U#9QKtWjY۲?aesߙ0ՙdW JnY bW6"\fCrF+Y̕ B6uZz_-mnAњʁ л?lnM$C%7YH=oOBɅex;Oll_ s ȮU 4BtUh"VDy^h/Iز)hSɄ[Q;[ ޣN`UaKR NW_ Ƴ \Edۃ}+J=XLVQ-]MbDϋz ng =#N"u#6+E$ٓ9tJ*{!+IC 4]hH,'=OZzf#1w/Wf]5|*Ύ u&}o3x`i"]7>ux ZH$E?9Amria7@ H9߳ aEm;AT&X'be$aEIU_㿙^Q{p2p2|&k(_wG"ھ2]Rö3Y(Ԗ{K417Gaiӵ?= O=ќxfitHʟ0$ǻTKs:Y$Kv^)n_kJ花 )a6`~S"8#f2U}v~EdY2%Ea/S'Cy.H#y#YJ6uvΏBm ̣Pk0Ό֠][VH B+H~ p?2f,CN*1*סhF DzE;-j eR %_)Y# q!!|L|~=$仌e7Sg6* 뺜$h^GR*Jvp)XiQ:w.)'*eD &.juqzKր*  M'jIkwT02 _r͸ jC7aIv?&B5ڎ8JԢhh2n_\a8欙j,5CUJNsJnotfVܮ4a7ib^:{-uYvZ\?uVccfWV?-AvRJɥ\^s *ePLZ@Ѡmѡڀߡ3.@/PdJ' \%aڐyhyTb?NG-cE %@L'_5=3ڸ\]TDe√gTb_$Ksw G(j3p,h1F簪s4vy4Af^SWw‡C.u,zrh;o֩dD)%!]/N`!U~(HK9 5-:)E!5%b-%2k|Rm7L(6u΁/) ]]0>5507~ [qî+V31tPR1D0\V_xK$r@:mIRkKV;-Wơ9ѱ &4V3ThD%7m7XSCNQf.(3Xl]9tθ[D.Hog^k[}ʲ%@A%Z7iWGb*1}xnWm_l0"-at',O6e~ Rfw||ɖ։aap!PcA1|>M-mZ{g*4}":+&?O1NzNfj'fGve >1:)L}>'f4͐bJ7>t2SK}.egUkr݅fՓeT%\=.ٙmgH7CV aޢ>u"Ks@@΃z?މkfg#)4/ϓ`E^[׋C[M?>5]|Mh|~6ܰ .F'ݺ9H$eyj5yRE#`B@MB>hc[N忰x$4T{Aܐߘ3$☨J4v—gvey=ѠY a]:#gmNtwr\҉΃ f zקJM0L (-(wB{-;r' |8ǏF/o4\PFaf75^Vd>:ʈ#.=u 㶻_<~H8*$g#8lu#-X":^PuBe(2x#IٴSCր4؄H05 eG0e 8E;O ?q;5J$t+cltFsĕbޣ; ҾߊxDD\|mXfJ7I-zyelz àU:NӚez6!PLn Pl|tIVb屻6N '@ UsøËߟX[oݕ3 Y^:ekXa8fwaƻI4/A;R7]}WlQ*hdf0ZEKH%@_QG[9Jlq=%:u,rChwG"v5L?Z땃=a2D`ITSŒp R_{3[x}, o4kO!9K|oT?u^$6b"`eCx L-@VstLDpB<^h߶[CaI=_*pYĻi_Ek6b]^|OCǹO) &X|c5=(sG!&)tIPwIah5~"%,?~Αۋk4;][LK~lO767 ! 3@u3'ްk`ŗ)9H񒐲8o*lb>0T*8DIdwP6Qd=(-׶@w,JdvQεti9pq3"?\kVTm(W*a;Tgה-@F4G޵>'SMN{)w@޿fηqPq2k:$W k",i`9PTvMq~hgԔ{HspuA@: o@R0ҍW=m=?w׳K+xB $@VL8^.WL{&5i(};2gl:8UF7pK8Yrf;;Qo0,FYm KP }//4/j(.m/!O xO &6j@S5)[a+,!{ik0c,Eo|B]p7.>bGaİ$FBJOm:s߼2aAV5`4J䉪j5 Fuov=dыbҲnqa]JQP WУ;.ajADpFaPw0öMB?!9`ُG!P ̽ ֽ]g 1zbTh#t}f<6U_8+Qws)cP,G{OlFS8c1ņ)z!ڑ!#{T w}y;l%@^*c@F(%g~ds2¤sLnN,<$@~Թ*Ya;8y@`Va1oRɮ=iɾ]xvޟ Ʈ&!2'ni9/8AOȘ[ҿ!a n S"үXvϪؾ&dDV8»sEG?xX;#AL#~\2dhf_9)'⩁pIz[\x-5X5c?"fzi>-yWTb?˂}Nߌ^-t!w5Dxv)|.AQe?T C aWq.[M0ꢫMm^ (?3Z0(\3GtּW8)8Il;4h! I̗6HrX,N۪=1^Q-hkSu5CJ@Uu渽gQ{{c/QVmHTVu:&"o|;?edF78O8_|mCrR\ ݸKǷrDQ+Y5/7OsR`Ukޔ͵ʞ%`njcl&~˸!B&c swt Ǹh9PQWp,8KJi\I[pTàA"1!SR) Ӧ'`ks16.LhQ;XY˨2kΙcڬ?4eUjg5r5YS|#}醻!r֭-vĥpIyKByQQբf` ~r񨇍,3OBmqNmF; Pbؗ ؁v(?qw\}n;Xno̕MDbb80F2<ʹi`!Bֱ+na) WdkL _t/1e 6?uE~ŶEAѡm^אD^J=FO"((t Vxg$a>B]q&` l@Jvm:u\d!xR-&o+L d!/4pN9J >eNN|nf# JdԪ--FD-z'ߕMFqdPew3!שjZ|pKPk NҭwV ~_e'R惘O]If] fX|f5"e"ݍ'L<HEn6j11@ K2Cң|؃I's|qU;aM=}L2m~JOs.gUL=qNo?zufبEꔕN!TSƁV:kg)8+vin 9wks˟R&'Wwe1ulx٤~4KPl߆ \-|[B4ڏ|Y_tv7Qy@ `*{+1O%GdnvbZ'Qѳ?H/}]߾—2y'N):urJC_jPoӟH1͐p i8xW@ٹaúh&E\%`,ZFDGn!6i$R Q S5fcy͗(d58)7dBoyddse#ZرK]sq!DN؀BݒϨ/"e^Ĉ?\[j>wbgEWR1FʋL \F!Yۮ@7l j]J7lM_R`#|ސ !̲Iy(noof]e>&Z4=922!P$}i HMC'H>gk0mkzr^a&yLĄN\Gm5h M놱9Mk<8œPߩ{*avoxb`PۆQ"Lm:6!qlǎq@ڞ6+|* Ηѳ\hk59ӯn b,+ƂS$bpD*pxtW?Xo9 J%R=Wx-zM~XOy^ qeDTdq{^Kb5s0la٢:g iN߈+6I:Γŏs-}24l_7fy@]H//5W,eU Dv vC+syY;ODZJC;7lػqǰ0ZB5K9k;1=i`mVqKW/d[HIC'W,/Z>)#bɍ "Q dqm0 fHQWZx.Z1t;K %dt~싵11nN$O*jHݥe$OPF"TBҕ.=9|yeЧib'Q+-LVQ!#QrL<;̻Gh_y~n#.4bb/Ԕ1mx໊2 qb/2E`c-.e'f,PP-; 7ŽZ:1r)O˵d˸lG84i#۷5٤[-ͤ`d[TQx֝KDBDcܪO3mh#U\l]F5ފnJ"}Fh_UgIݽC!(fTZ`ÿxZQB2HVǝz2TD( pQ5"+K9h'={i?Y.\Q(IMGRD6OyUfQ_> |YgK~̟n. މ $BVrdғ;WOUDNrj׽OBpBs33z;r)x:L4磉^V..Q{I]>.#]Oy3 ̗Xz^Եz\s- T fxn}# Mp@sA3ʛ3bI-Ԇ #ie 7 $%.I-Eke+:s* 4X=2!bufͩs0GT 5a=Z%AhPtpOYX$p` HM{Y׻rcU pL1M+F2l͞b>3:ݰ9 ˧Z\7ā0_u^WPο:_ZԶudSbc[ƑC9ҵGeGVx|7̎ f* Wk;EЛu"F vQA$tƞU8sj[6Z{b^FW]3x m/"3xjKLz=7k`m|H'[:#Qt{%O×+TϰIUHgoxu'ḀNV?iiGZ/U?mD#Nh􆜮}b*Gºɴ`L}ؒ}XDYN[?NNp(>ɴ!ʁ8=|Ɂ0nPמ&v/s-"ćN|K n!AECOkq,T xے c&ɊG$ jH$`?;&Vj"VNj zAw&eE6zUncq*,vJEdsZT'|7+s,?7ӿܯ ?RBBP-SX|} ȍfu}-䐗4gO(7|h_% lPvZJA\>#R70C+%xm峻`@HG.I 6uMcy mSl|Ђuò%?)+\.dкIZt2X0H +sXPy!EO>[L>S̆0iiDX-,ITx/o\':6k G^!M9-PGY!bR.9`H)"Qj{Jd~3oPUNTטJo#"\hY twZJHɾ3+f2rsYNmh1\$zN( $Gf}3`L 38]߰z%sƻk]`ԿǞlrF$آueWBI 撌6]NosWd G8zk` ͷ?Ƕ $# awO8:f畆~.,}JTѳ?onGA]" T:ǥ8VZt hΐK.kyW\&H Ðr9~ .if.F_ ՜1dd\`e+*Pߖ̕$E5Vٔ;{JCC̅SP>C}ݩ4 Plb=JFKZCw$i3=+IX:bL=5>?}NEa?d86LeN[t^A2f,}:x/u7ٴHZhmx-Uo)-# ~>`RDGmpkQvԩi_4G-u#v5]"_QniLY 5yP3cy0JYo"+Ym5n,FW}5X~yяDʦ\|>__Pe@\IebP-Gu țΑ5ށXIpO:g(_ꄓtI7U8ؒ{H[k]roME"7a FF |zzVz~a'Z sH$!C(5O.i.3GU,?Nj+X$JXsZvճ:8iэGnoa"ۓߧQDibﴴʚ%/MFaP 0Uv1tUil`rгH|\Tezi@Y xP&U 8گCiTa7 _v!+v*28/0Hgn>|l$&]ndVݜ 8Kr/.q 2фCdr?ɦ]矠@Uu2#p"t98寨˯V Ah&_ez(|6e >fP M8.MV:QYJBzK1m;B޻9Ҩ/b"P2PPYMm(wĒϢC r9rWй9LJ#ZxM%_qzoYv wm~*7n \V2R u׫Q25+MdFQx2 s # Sx:ڽEjwfrfqwBh9Vwڑ&g0?$ {ȊULtQ}fY]3x0(u[ih9@wގK@}T"YhU`c|ȗt+ZC P~50p] |;X(m }`D{Wk0oe 'lםV 3%KgkZV rc[yfS}IhdFs!thjTb:> RC귴#e5%`aZѮO_)Pk#_ v,hN2DF]\Yyw ǜ;Uʭˢkm R |h-`0NN8rv]P!97wy2Cum+N@ oܔ Ss%5F!ȇ L/L^s}*ݦB0wdzdg r[=Wg u}DEP!bxo/wk09 1ljy-~gr\{ 0N ZH)w>FiU W*M!N-TaN-n05UZş:'fwt瓘-l~QxrZZBV{7,g;$2C&XT mP=>0ҁsC:m/!dq}~ <ƹc?"rj3O)5cEG 8n/GI.›)n2''{3y3dv.k D ؤ8/\e>;[wV71iB)|C{Ed]L3#I 6hO'.K_Hlx$0X5Q.[cb6|DŧJ77?XEAVnOPmR"H?3b<2j?>p Rh[-E!Q˶~~IU3~i/j4su$L3|x_qn> NfftWEvMiܸ4Q ptBmmC'fp[Xo I+ѝ\>`ķ?üQ*9/p-2} Q"ȺTxNiP:@U _NX5B* W/'O wx'Z*^ˬLP$T\b )49QTOY j8ʿ4ESl]ƸR4TE@[=-ZAJ`HU*g0\fh0XB4*H"]>vke70rq$%S.UlfNR,@M7Ys5}lTe)vF'l k/.fG"A;ՅzQѧv}'gej73*9'R d5-i!œw <șY`Ǹr DiM{ח܂_\]Qacg0SڨKĐIY>aӸ0h-) %e 2f M0 EG+E@[Rtd4 p8D"הC.Ȃݯ[_߭7CtLsq;.E~CBgXJS,½CQ ^S+T;6nH_7p^;T7 @Vb̼ q;,Ƌ&?_E$$7έkSk|Ωme$d\6)枚[PSpao?S~jJ绔<ߋSӒa8CdNh| A-X01C Dax*ELF0>7= 9vrz'ɿN] PF#Gw  |K=iSF뉒իFϾ!t 6 !gϳp|G釧p9+MD*qi?BjL"BDxPTr]T%aj '3?g udZʤ2{kVV /b"GoXishENL>VCx%ǝT M&=BB NYW z!Osy6.)z~"w=ꬂit^[}(i/D&Ѧ_).祁1u:(6bzTlt3ʐeo!_UEaxAXoB4Do46UZ 󚣙VYKԊ/`D 4eu8} c\rS, ԏ߷|ht#\@v6,9(}ZA0xoӁO 2$AI>; xs:Yh0ImI#C@zAq֞pՠi1aC^Wu#(gKORbve@V{8u',*\8n3l"%o 3?`0>y> ": -Fxph)ػiVY2LnÅ~/;0q!F_8[[f%g}0x|ɇw<γWTM=U*žM6sŹ]G ,kn}ős`cd2M3g* ^ U=!Ͳh䉒ӓ":!ˊx?(k"5i)tB5- :gaOu[%´#T*llgb`X#ȸ YU:s(3IGK0v5ص2w,X Vq,h@]""#pD/NX%cTQYM]i/QA R2~ { Om&%Mljd^uyvtiW5m/Xkh8]r~s-v7b__d3 r7w +fsX잤j筪ktYĻ!!'c)Q,(~!3y APdm:>#SqR̰ѿ*;P}]'Y.n*؂,ۆg i˙F, k3ҁ^6WEXRxQfFԍ5&Ёr"оD]R3-+K Og[CC'cq#pa-mG!rF})Ԅt`nڄ#[SPgzD6ܴw!n]MSd 6I7%Ot SBvGdzdȥaBVoӮɚA jW0ihrkߚa:&Dʏ~i-L4uGv~;6mhl<@9مl2$ꅚ^^g 5ܩO,@=1>]Bk >7 j0kGo^ldg.5hcrCCe5Juha$vBoi猥_h+^]T\`o'1gqN ^V_ m[rLPZ?Tc C;1Y(FÜ_3 /<5ZGޥ"A{` U-QF,VF:_A em_"g`Y;C;8V蓶mD/R2\fWQxP/6/pð]GT7]FkԤ763pۏLccȉ }ҫg!u!Dt*ʯ;DA8OjTc{A?WHGpATkW( *Ǽw%m3% D¨bg܏Úcp8եZ$!ԇasqsvewS#>D!F{]h.w{v4}#H_v!C ;rc&v7M)WkR;XHӭ2H &=8PkCG4j\Ӯ;NFҡӃBzAhRKռ#N0$?$6nCam ;j&|w-E}R%aBFK{(KĖK/VTRǓe JI#?,SHi]xbkV4$j.$dg]i/HB'g] !Q7e٨% ED9jGe} dYVIw6˅pR05=kuƘ=2bNjKޜ?AT0}dV+O#-%+ wv4s>}Bn+|j:司Nk*wH31Cqf2NerF?AH..q-,l@P6&Bap:X`7$|1T&^U0 e-BWGl}_O-dAs\c:#?dCZxӜ5u|h S.u=vJ\7ϊUL2=D\ÎK/bd'MI{[pQ},v\ y}2~}0bYkg"fn9&z}ElP$ZuW`12ȏ}3M-d}j˥{ۑeWA%=@՝Y0vRkZhi#s!BGQj|<+UzI=nZ W9{ucIy#8Ћ01Su3\۪wOUigi<3Ng/Йp/QQ먪͎݉g"tԕ0}El Yz1_|'BNu! n{S$ ,2y{0x0<6vm oi=Z>O zpOXV6޺qs +G_O@8y3R(J<юdFv.>6c6 Sďsp4U^899/4.m_ 8njsbu@d;ɪR AdL[wjJd7w*"G^W &b,CfSIɬ"UA"IRY:hEMDMU UIE wYg> )rqGkϛwQ0"8&*[dAYBcpLm~`퇸 U$ Qֺqc1,0Ś >Q|=jz -ukTxToiE올@A: z"A&ޙ -4@'57++pVv}/ʴ% D>Lb ig"tur4M+mY֙)vOIP|̃FتYMI( ܩuLnJ?uX'e,fQM( k:52Gf^R#/1"jz- \=Bkd=oXHTHq>#vK.x:"!^O!$ wB 7I(LQҝm!05)o En<g]oeK8\R't 3D^PZFx>^W,|*D ?fB=;LGEWa=GtN:>榀S71 a)sAzW=)~!lno>$y0O=p*q/4>2/w7ֹ4kF B}(I/㭠|X|UQOyٶfP;y z.>"<_Ki]sxzU҅U`v||cF*f~+! rMh<EݮAy \n.PBڄMBK^s +!ڂ,K-8_b$5ܪ{TBʵӲ,k" _iq? 4 ZXu"Nu6Q̂W^p*ș Xu"L5p^A{S` @"Ϫ/e̪Wa*oPabRkGUN$ 2}?&aՃ'DN5dIn9-޳h:?r`暢 RBlfHy퇯Y QlJ4~/aҏvؔ 2sጓB>F< ƫa]ܺĚ6ɢ g O!)*̈́8%RhԮ=6Yz&@ ٦ XMQdQp`.13[ۦ)u!d~#[#L -$yR̳k&],6,ϒR *8Y9Il"aCb<_m"I;6%ɹl \ېIߨeLMFJ<m?ĥ[ͣDIQ`+k\Lgp-դ ]i\s\ބ'%cRr/ “5/ )ܦ-kBDq v3K Ǟ;X _ixЉCr d(1tA@3Ag{;RY` pVڄ>VXW;w}TKR]0$}?v:XB`i|78%J,&!{A_tʸWQ-/Go1&p\6SpK(֦z0 U%Dg-Āp5 AxckM"qVS+YwFL!+_ vzb+b0M%U>_6Rn~=Uv1qcĭG8%#G5ʵnbHЇd[kHy .qXcʐ@rV|`Q"Dr6Vݞ\C.QbTN L*7{>DE~^hcG%8K61PxAt Nh [rf<FU>ުW~-eՋm_;% HG%hNˇtc~+,C#ӄ(Cg* (1gjJC*1þGU9Vsꏉ$^5dGLeRHq,r/f2 Lk?/AE ^i2CSLZ7?z܏ aB<S4Kb0nӆvCwRlb.vtSdg"rrQc0sWAȡR( !"%sy'?ߪM5,8 h\5bh0CŴ\#!y'r9;B>D?WfMD{]uC4f hМi/j5$!\nS\:IՔy{"g,?5SO1$c"ؼHbN)BUk_jj#$>6M KDhq0 i$HpsTB1󾡗GpGHN"1K'yߪX坤QsHXw$a6&Jj;%δtD^]L:|g{;UOC +!>rUNyZ(.)ZQL[h+Ze]-:6}ƪu"f45 +*çyCK󷁦u=3s=Gwq@k}`11!hWSo$g31 Z/p;i~]|$I)INH2},RYnq_"3e32i|HhvL&-Cq?0GfQ8ml@$$y^mJ:g AEhQ,[3vS`*I-|LQ$ pv"G~T +i>l ur0:y6 ܧd=c7/G%ÂFfQTvby\oYWp(Ioq&A nRA,aTwD M՝yqDNkv>\KF mM\V6M.Kx["Zvlf;12%0bVPQV!3Yײ 9uu%Fb&-C6`K RH,OcY(ͅo|(50( l^f^`.]x=}@YS9R(}l*yzU).ovc3QaZ,١687"f |A[|o˚edti?F|qϧuX+?.M _GDK Z@J/|g&lw@ڠvoY4wfA'@7F_Wg께*Fc<0F{^L@4TkHsÂ[53yJڨ$-L\kCrz3 <^"R_:s 澜4.p^i9HPkҳ<)*-9N|rO,h)zeR<<>l;ߒ}w2CAAz|ӻ d^ECL M&?@|7VHcCCcK}VKRZġs8~HO8?H`O ĔW֨T% 1э?.g' lyil"l7ql`R2lWf vS:RcUo <ҴQި:ۚV 8]G70(|#kʈ12'0𛛝3Z; f#k$_~IxhIiryӋH >oCk]"M׾\Z'aݪhe[OH/m V_a|I5i? 0/]f!r$+RaC Tb]mq!wQ{2ӨDˌT˼IO.LX(q`DBK۫g?K1fa2 C/嬈vg}R$KL6;̃ucR Zܛ%} Fk\BVJ䟹{+(A !#O'N\}7bI<S%TPk+LOߦ:iN`IJи c_$D,!ƪ ܮRRVN{TuH_3p EKAjͦk0` 9x S>p߅+̂e\bP#MD˪:׊絣YA?oLJ" XBJy;B`]ADާ"&r$YII9W)Z0ŭGe=4C] ]$@D4ZS khbV6ViGκ#Z좥ν>cxPR,WqWD!'92`PyUZڀg]~s 0 s:0R_ؒ@r(I\#rMj0ϧ}0 b| X}LtXԌrL̏1캵iq$"\f$pmӔE%͋-HHةXG~GpP *E Qc/9Oox'usB&p&NAqZo2ͫQgL0mzՎZѫ>Ӏw;,=yNh_lmOMTz>/kt5T UV?7hzʹTBÊJ Fv| E鉖㉵x&Bk7n&%xmlU-It.0&IR0C8gvAu& |- jxuMTXdl~w]UG77#<@'1E{_9YNWmKO-) ĔaDgIΫ7EBB4: LsBrpێ\5GQxW!;5Y`k:s #(ɣ)<>@4r,_9RUK`\ 2x._I f%֒֞__BOOjъ͐jTGVR4TzETlR!/=w.9~Qhؚi!TX`q!כ`>vA G2QE._z+rf-t/Rp8<s]1>BJQۮrA˹[bT 𘉩`h9T~JSNdjܪ;ٞ5D LThiQGx,`ث:n;4# Hg>?SpiD.RU Fxʲxqb{LXKQ,\-_'/TAQf8]CH8Gwr_ Lq؊IFop]fb~1 J"kz߂ܐ/CQ6p],ť٠{ ڝ|;>GL[D55՟utlF#mR*F5Y˼=aaճ (`^0pTl!Hd܋%asr/b8p'w s[y>PkF8P5մnBR t?,8.)4tfOքL/ Q0쁯D>a PGW rCjhƇ~~2RR:ҤR!̴JM޶8t)J9oED[U}n2WJ :Ѽ=[Ea%'ba9k+Aq+) iĹLREK{"Kb,p+m;lB*ΰ-XBao-&n4 /).a%|/d|0a9)fuG= 6AR9cw8f*Y E|@=kSN6'O$^\i} 82WZSz@T nO"#M0t-&8hXBoX5AC?nN^[,5tNt5$ÚPa|k̉Z2&g|Vi-L >,Bh$V诱zR 1>Vp@C Ӕё\ȸm1Xt.ߵ|<iωhd]9EVfNy~£ unN$dVPѹ~swy{ziv|}htrz,(K>ZU j]* 2qLWc_nW ^9}6Splw$7zRQ[0 א"nӖ|Xŀ:< oKK7 -RXۘ65'T&kSN8+F^}wsG>VW-F7 i.='<8% 5 Ul~4MX}mfi#_@) GFij>e$ hΧCn3AAEsVʈ&ԵâӞkOH'.Tcg [FuQQ"E -h2Ixb>7,o>󖯥?7g:1k#7)3S*٧Q .[Y6)E6f⪂6A9e3Rq&Iu 1 ˗_S@o=s*:n# pp&cڌz|rRfKR,Ddx^`{k,; o8T7>$C? <2e2(cI/V$vUÁ{8 OkY"ԶBW% ^yOu`Џc2cb:RODaU3{^=^> kgae`p5bdOB6&ڟA趾i/j pmP:O @[T2W[~ Z@;xvV0TK- < &0nH3icqGzPgא{p{`m{9d:cP3C 71ˮ/#Ɨº'k+J*OExHGrYΒyA%I]f𼽈ٟ'ߦ]_4Tp$Kہo<&}|[y7IPpEM-qƼBV 0n$HbLѻRVsoc85G2^<Gn[$ O^Pr"VV>he:C"? JsBvFm)ɢG#F g{syW*Ƨ50Xę?46WT8IaWNu?û<}br#(N?3.ߎCIDxvP;{C8B@Z§nQ_i0D sm{c c۲KҽcUOԚ6 QH_Z&V"Ƙc' :w4vvz0 6}ϝL$th\d:4y'_WS̊H怅~P&)W}e?K<$36SoՏiշ'"m͵UO'^",l\ CȤY4=L&i>G<ݩӭ>gХؼs3lH]yX%羫[].S"L}rA&g"Xa-+ziV^;L.MVz#!zHpdVug5J) IW) d:ZbX4E_\F"g;y̪PGqO#;>>5ưNw!qBc82ί6%viɵAuzPiOgvVRtk<,vn:6E>6`m6EAW7Ho1ie%8ʍTZLNVQ:s)j <ڎ+Ӎ L_'<nROj &q/ g2^HC!zuWu ) }BzJ880j+sêX ^Χ˕ O=o_'l9]C寨{43%d qP؍bPb:L7X)i/8P>5^[t0fHt&+(ÇyEm^>$lOK>9[),8MY+lF H'4]#=Jmͪ Up>]TS%.mȄ|j iT\]KV1ME*ye{sDhODa`ȹb*yFkq wiwڵ9?zs, ^+~dK=f<=10[,Բ1)*U, BFy ֵ Fk%r)n$K;őe3XVDd7oHmCU9VԼk(t@U|]Qzxs7TAFANJs )+9dCK@赂9LcdqOh}ҡeXQdLBX%6f.ךS[:/ЃWNx ReP+ɞʙ/)Dj |*L  ˠNdp{T\*h@FA{z6] yc2 )??R5+9o9Lߩɦ$"hfu#A lGm]yJ$lD+uJ 7_C0#``Z֑SCPgѰ/60btjw抃Y8ʃ='oo5>z;3ˮa SGWn4' F.$)Α/J!{Ա'"g'0~ \d!wu,$o )q`w<Л޻s%2H/h'e\fAyV@1 A @h!Aq8tnVHt4qw[~s*3۠YݽYRW2Mۜp"8%;yV7KVνv/' az7rC:bߋ0SY}AZ_2Z j ʮC$,|JvzcrRbѸ"᮲C!\MV w_5&#R4{?BA=^Ժ`]Bo2'ϒ~R3NYs/MA`}ڷN^M16ӒQ߻վ-}lcy)ʇimk۟|du8zKDOf'N{8󴲊[0r4h=@ehq472ִW<w&O58K,EC`j@ ȓi3<# c`FE%TM_=1<<@b$rN'qEyyC&7se!:ODUskg6,D(g}1 ^XvQpBB4VD h &Nnn͢]:CD}7L!a_9)TqmB!rAqtWZTRFU -XPALbUŞIw܇,o2ɰn>ͥj{QZx1>nڠՊM"JE'(࿟%/idnY!5;IOrFur`7 m/=&]kV'0-鴵n>^ʪ;qV!Qa W3i+,BxHhhehc3we\d(s${pA˜ҧK!|VdExI&MZk8lM'[0̕Of,(|(:F&v@kMWr-/sz YUi2;6M8FoҊ_X׵wM?`Eň/XkN/ !3/#*$VʅHއ}$a`90_qu `bPՂP^9dúu)!MVR//ZVO^ "{I,1lיWj=_ ʠcS%s qRe*(1GI?8bvl$0P6iSwC#ǍJvh@][ ̿yhӋB"uj@اv|2$EwcdqþH cnhsRN 2>?>J4&F=MojLXl/UӫrxԒN ٔ;b^tPXu=}ٝd1iЋɢwl|k)b"-̑_qcyr/sH ;|^)쬀|[I0k-"8}5-PDR5fyvRRGNly"VG[giD(V]}G3!7-@\h.1|AҒ'$qBg\mX* {pw,!sT5w![ͨ*YYiXwdK0) }G>o9*&L[v[K%aL|T;֥]A|񡈠w,Q)#Iz&J{$ ~4);WRt/l{io?B- yl#qbx>[htr{M>U8*"d[HTiW.K'!GjvjX&WF/4M@ 8DJi(D4DX oELu\<_ɨܙ9LG >e1R`T^rIzJ .!7%,Uƣ֧k$C7(ёo)YjS4AѩYP8BG % ':"&Ylbu~`mjE'}c"D+>sJ,*l_\D?qաjF ps !yIgjIG φ"6s0Fi#c8twlLYP`ac7jqlYz0eSc^Ɂ$\@?hi,즎x+3Fe<%΀"̄[}NW4Е!ܝ?4c"+LUZi YU@ÜU݅wrt.]] 0 ӻ^\B}-'=:q>*Cu'G^V2bs oc ҨdUz-x\?+uTg"{C^k6^uTŕT_rN+,}aK_BT*>pg*NDb 넿8dS2ܺIquOAP}ƺ1's=%(nh0г U{Qs1љrg+ _c3ȭىj!4) “Zo@o)*Fb=u}ew&{ qYuwPS)XHm_ai 7V4 YDꙅj/09,ht4IVcDl Dw֗# jwͥr΍N& ((TCrh!(v-0ť9|si5~EWZaH?IeÔ.MZK2 |Ft j,cC>uX?$p)K` qؔJjO ٪f2 ۶x{R1ҋ^ad H "v $m8ڐȁf-^?U>P_|[*Ņ>GR(hݽ1xT$J''G~x6,9C9x# PܼEќUwΣ1='Ek_o3MۅT~zièN˧enqPOC/zt11S=>ڨUUy/ ǐ*`r6.&AK(hϭ /Bc$+VD"  T6;&J,V]zRXU  =$oX8{'ie?}ֵiv #gT믣HU>mA$_E*C=2jřg+C P(UH [UITkߗ)o zYyVo:5]Ywu$q+1G*T-U`5KGy M0b$aԴh]CV l@'hs~IytF ;B!y; . +FsVM%G]fw9> 6B膫KW>Z9Jdv?srJOe*"zlbwpٵ(Z72  1>hYT~+ ;GHoL"[~ h| _80BMwmґr dYN98 jdUT6tĩhsIma*F5ڃh=ji-ɤ/ 6K_&sƋqF+ZbZIG͸3(8,y4)#bHa!sɌ^V/wWEȥ)(oE+vV\ي".t<|r[f pv]S_"smLogKWjIFApHV ([+{UѬ* |tv_Bi;es 0W/5j͉Ϣ@Mt |#EM̙Mii7\2lGX$cl X(radwbSh&+#uS3E6y//I5m3^foi3oά[i`|R,YqEe{5urt~+Eszq 6Bl-AMBD_QN]#hQrg#E q`'VZy䑔[(^pL*]O?#zJ4njJF`28)fkqTm_fC=ȌM6ϡIlqm,f:lV(r[Py1L44_%O!9W'SdzXl%ނΜǷnyYn'1p)0 D7u e,?Mр5f iȿ7 g(S&|t c6H"ʏ? \֎Ç|$㞻bFwKޮ7vy GakL 5?$yUiU2P ºH[)}6a{D0"ÞCQk;nй?c{,A4Wn>W0K~ o£ΓtV?K]Џ`j*v%SV$xw(Rg4I՟[uxfPTx@F9(DβhAlxYC# RoE$`>]sSsuI;K F'pYkuS2)Ab`m^+^d]r-_H8zggvnclbh; #U6'IyxUl`-y -4+{ܽi5BHɡX[`F)ղ~p)O Ej,YQ7W[Qjղ5b&Q{0LB"i|$/ʾRs YcZl}UdI6' 9*<ث 0;+섫YjƤh 2<Tm8ōķNė|)x~_x"$MF*E'NSfHtcP5IFɵz |B8Z"h$/cD"D8}x_3Xܔ Jm_9|&R\5Ok ]=if/QtLl ՁgTH.M!-\TJIPR I&ckRAdX%wFxHp)X?;!|pkΠ81k&T J`Hp|wlx.dZ7>ϛF0"G 4WCEYY#)h.$@b:Qu%rۦ 7K-6IqJul\/J 4%E`3bl+(?H) g!ms8 'f \AZܴ$CJoIP_W3|\$1Y5sE~6 z~g0 (KD35;0~;A$Hpp~ѽTeNz^U<ɕtTxl˪Q4mRZkߖ2$Pcg6/5^6]6ѬɮsY,K2Zׅдz NCE 9CVܙ 1w%ҴWJ׬%P>K)Lܤ_HpZjLS+9Kk1 fw!vJcps(crh(!|$Mh؟r;ݍH.aRdTᴫĬFl 6GwC@)a?4%T%5F|Fs1zJ€k zXd3h4jT3bj^;PHhn}YyUߖL\Zż,A붂Y,ݪ•eW.'ӮJwvh"7;>HW $ynIYS¼鿯{[m:=2"p,Y;v> zK6l)!wĂr~6xp V1U4s~^ԒaR#4u%3RkUYiu{t^WKX~Oi6`v6"Hpk;7?iRxy3%%ߗ-8F؉XFlepn0\ C0OødV1&]w7jfn׋s m9#Êlf0N 긷eHK͎ow,ߊv!F}a2S}k#y"jl$dْsqx(qV2HUOh%u'*" 6gAg &EBc$ ML_="*ՉɢI7ߒڦ >8;I)6QJD UX;7S*6eXu,xA~ #P0_?G0}:Ϥ\He D\dGjW++{*|Ŵ >62Lz5MhRX P;w ٖ*xWw=ZktdAWƈg?TEOF8kH71w￀u9%'ӿ ƜٵJtzm8k@ }甎c,*80nNwPer%Fl :搯/4`sz8_y?G~{F|3oxq}9/\U ?J# | %EvۄGTȓ;"|@xSdPDqt80zC? XI^r彧PoiI.W2d1&ߪI-ugl1nG˲ u3~WMq?{N1O4ݵ cRl,ȋA_5B>%V1\M~ӵygXC.nT `ݥ a7\1kYL  (E-"ay*W6$V>1RHԡ*1Sbq?ڨ 'JŨ1E9`4ɏԜ$Щ#0\Vⓡ\aso=H*m $ˤA\ߌ3fa6r-NrPn;]{;9!n9CMB!7kЖV7f:T @ N60ozVgWI |5z=j ~2 ^f$/&&`/By,:&K -:}r%DB:~9nf+ t0x*݋[ z5Vgdn!ٟ-j;ML@8S^ۡI+ҭQ 6y뺭[Xz K ~uQbK!iݟ{Vʢ .s 3=ĵCH^yXMbJsj{Efh(H|89k(&sqf`ny2ƐFNffbN's Jtl'g{ k#9 -A6?S.>BMԳK:|k;CvrݭRT' ^@}uoP59<5kDD~'@/Md}HH+`E4F»lG?Cȷ!@g.Q_nVI2{-E=݁Kx,L9b㮫d1|xcgQA*zU:wQK/s@'0qo' ɟ)@E5>[Y*SILWQF{EԱ-؟#߇[D$uYb<ġp@3rEj$!E1w.U䋘UQ+sWN:@<jonЮ/4$HypYkf[ݶjR=硋ve*0IWW}lͬGk7w *?Q|d9>{|\YtP%)V5ĕ|TLc 2G$kw!pӪ㓥Osehr#M; u3Ps orn-[ͯHqw q}=pD^6ari{#w|+P'$b7㋋J-zK7.s ʮ8.% ;kCc-+1zA\3qB.GЀ \%˘sJ+cKEJ1\Z/۰U])ft8k$X!kSr܁[.jЇEq\E@o}x`c,rɹ[)$m|ɦ$jA ) Ӄ O [#mn`3i,@.)M^R>.wcMŘ[]t*f*foGԴ*-|\Ew ïߦWPUb.|= ,*#Lꐏ4Z]U5=ӏ'Pڮj# ,L2y18k]Mh9 uF+ez&]u֤ >@;>4>se=g 2b3ozkPxjY ")JVldn3@" bRjg+"X74hA,Ѡ'vzR۴ESçiQ)iAƴ$Yu)C᥎u|ع@ڋƏ-^eVt_Q=yOJS_!0:;hnu.t\|Xr15giP=k}}TGݙӔn)eв{' Pg^]%F!GQ2ʟ( Ck?ܛoXˇ/? Z f_b7f@-rH q@5=)CU,NDov_`tؔe^`%M9Zr4D@g$ OSzr\:˕Vޡq2=],fjiQm:Qn!Krڠ~x$_ 􋮊;-=]]y4kծ:4X$W32i cw'2>lϠ|ݻ1Qv #aJ^rrR~ͫ66u 7|ӽx9MzeBNN H!̑2c#ZG{Xb8<J/>﷢M&372 J@Ztٟ;N}3k3h_jEiCb{=[\%Mÿ\q#Λ[t%GatRf_q"go=C/˅2xp'ͷp)\/?,86 Ɩc2w9 ن?vwn)*T$4?5zBq1 j}QwT3k _<aa7j&LQ<8Y)crK坞]. ;%%_== C^ead9=̶ `塃j-ǡŇUG.MhEq&v SJ;%G2 ?\qhTndw )GfONתIGS2L6T>Htt: ȴl mB@mRodR'b}F€"rI{C)XjfRѰénKd&AW<dUUϣ۔RP} t ׹b,N %9>xL D!\RZ&i)Ke۹4튝Y2.5c5@Oګ8, ?fN5iBl$5RUOo&HkPn>w1N$^jK7BO㙾h] W%]ŏbXX++%hCۨȍ::8Δ5̆l:F~e:CF%d^0m]5;{44eMf$x$ܖi>fM-Ͼ,wT7瘙؁B_ [ R#joyE4Pe a\QxaVY q+ր9 otɾz_; Jy h6fP A@~tN|6*^mS30GM߹;S +?rA|sU1|U6HF(`y 2 sыx)ݯRgBC֣~_[`mіkpEKI{%=tv[Z=]H !ӹiRckHg Y>dexi8l-S"_m#fpnSia f qɬ/kz0 ;Vo}s Ai*Xc 6$4cCQWQS:>Dv[]@뒿kVNua_tbK9ƪAWj[D nwR e3ck1c_8 'ѽ" %AB Sg]! `MrFW"2[20AޡQQL/ CvXyE\b6ҳ,}C\"i#J=p.1,UjJjk%4\qR D@GbxAtۨ'0N_U}%o4Bw%1ŝA$[g]jnWnEClXܪK[=daAC2,h&U tv_2½Jah:-` `'>W.]R: ;\lHtͰ&|3vh=׽ުohiĜW"Ɠ̹al$Mi<5!!Ƹ@ld錭E³+;G ,:~J- _To|ȫk8foc+E[WwN-IWB~gbp%x;+8$dD~^UI~f;` Y½I%ݺdn< jVSgKإG.T̶zsAgoZQqzAx.3 ¹ ժA[6~\Sʒ5teȌbIBkBcT`e r/ExxSžE0w ՜h"ޚx5hb>><}J:Sp-E,j3]"f$-v/:!v*1~PtEs?!FK| Y7%ԙ g^g͇0VpgfJg(oxjRI_èzED7|-)ܞPdoyYaaJPqVTm=-SG1!&iI~Riz_*XQ*KyTo8|Qb;z߁AGXJ rAGT&"sA+D0fIT#¢RMc]ixO_:t^OQQz.볮f<Q; GC^k1Tb65Zd|lDcW4Kmm)O mfᥢs`@YC31 ( t(~rZsԜ1O!<%%vآ\X qz[sRIrE>U}.\{؇ 2Ѐq zW[.3&mӎ$E,5U⊚Nidj. e?vM"$nZ {SPj@zdKJ:rDQ w-g2/)􂓂!;WR[;{j#e_c"ŅlYf-ZAY,)|sH\W B4jmeWbQiʫ¬#tЁ*%gpe.MH֒CjhY'i+EEȘu7ξǵRf\OU7{8+SXenn颉Ha:Ghy޽lEJ0Z˸sD5b[=ObTB D̥.}{b3`,Vc!PP=PQ"aihFr%_D.Wqb^?GK!]!i uGwWOCR$m EuKosLNE=4~Qէ Zָ:ܰc(ݳi{ub=AN_2ڝ`*ZEtzotK`= |\ c+ݴhhf2[ Nyb*\jiyir,h2RֿXA9$M !ܸt`Z̉!3:%Dq;n,q}~enozLI5XB퇰?d"(rҌۻt<]v jV*d9Od4TDo(ʭ LҖ,t4O_h%!!˹z:v ( O*-B*R/iWNp R@KeC z FFɨ9Okrn0!^0sG0͓j$ ?bOs'? P}Uqv-  P|iC Bā~;f:QZVVHG{+\+$3}'vE4rZ_[Xw?liwqL:K'=7Y<,&c%p?b|11Jv2w0 Aخxy(z3nc51.lqip DgDCghHY8s(O2/ЙAJGs?Q /6 &" &6!#!dT;L@׺oK2F@7B9p&\y+%lcvɥx\"bno`\#s{'G[ ~À'1l98#4grEGg wt+ N7CJ'ɋ`=`æͬQ5`&ѶY8qK/u0~]&EtȩN)d{{rx@ FI  R HKW)\LG}o~8ɠIfkH ,5Bbjt5'oS*X]`7)l<<+{ *q5yHll!/dHPP]bK9F"'wħBHDKN(G١ȃDaw'jA.úNp{i]WSEZX!14P$10a_8! 7򆿪MQX86) mvώpq/-{55"W> rw4rsM) R;C)g|.\1QnD⓺V(.*e˻Fi0?5+r&"B ^fұp2I y)\Izf`hixvE6H) Ij4 72W PBs &3{Z~n&eWE)~NZ-!8t6O98jgԔPH|,fZ&NF:&lNAr+\31YjY4V)a %$Z`*jl8!QCL4Eud@})ޢfDק%T!gB/DCO 6E0)PKM"c`'DžH-|p. E:`ރدޔ.6YbЍnmvos^ #Vuy VZas L7eεX I۩oX:N&@a.\#:4x^us2.Yy_jOcPQberQ`^4ʀjdHh֧R<Hcõǁ2{ʎpRTH iB ?>#tT^ Ui y̨umQk:Rh&jJm+Mҿy9 `))-Uּj #((á AnAǰDNK dpG!B`zڸ&Y}F/ 4N149J[ޝf2M~/YPm8A?Ogݜs@X!pfBIxse!-B$&{֚F@[0MĆkJ`KL>fH圍iX Kh sW !57m:eaHZZ+C=i:rā 隇j-ǺCfl?][(L|:#f$S  ]^Q芬ogc J#}QU^u ~Na]KY4ֽ;m|:$O5P\*}yh>*AX5hE@O𙤾4vV EqpL?uO죤ה Jc;]Z37z݆w@%)(*$JQa9?IU_η|ԡ-6/m2 ]}3ۖ9v; ۷ Ԟ\pK9Sn^G'|_7! F?E$Z,ol*>͆yKEi'KK[C7W+WN )u'ޙg)&qGݲeYe\Bэo V3%ȽO5EQ*E)@]Jj`o2]R{t, 9AJMZswfC(A[^~HǕ ET1? 4 6֢W<9C/*2tǩ+v0L L[*J);a[x/OAJt8 =U?E*ڔy< `z[/8.i@-^?=dxtGTSSQ:MqBclW=8}XI;b_bDb[>c }dةRe cCPtHHaژ0鑯. j~Dk(Wd:pr55"/yw#nj%N~ c`t5Ƨ>?B R/ybXCN~8(ڝկ Ó=6_2 F1ȑ>Kߓ[5(1b!,sj#e{SNodMsh0]7$! Dʢ*xF[sߛ\Ǥp6`,m+=cdoD7鷟4xt !>6O^4eDM46QZeMBW:T `U#la70Kbf}rԅH@rߘe"QI.kST r1=fIKOrۇ9yjAVj&{$mk@ B>?i _к;;sr gPD$5s?J>D2 'fMٚ@o3lMոCPsZgtif1ۏ}Aݶ/G9M' &~>O+'Hχ.F-^!ྛBҚ/(!_[]*ܗ҉b0fUƱAOAam.8C6g@-b6bX+[V̻ma9^RB!r.yҒc+Cc2/?KBМfN46R^Xn"=)J;ڜۣ8qӑ%rNu>[ ӎ4͗bZB|58 ԟEmkFsEUxt@`Xfp*9iC!l WK O%L2qMsg{\(M..<#ܺ-4k:t?erQXK>`zȡgqr=~ (GdVу^=.Z$mkTqFSVi[@b "!A*$1fo!>d]yQD_!T93&ػOưICZ鯣3ֆ'jJ䫗8?~C_OFLpѮ^{8IF|w)a]c-S 0jzg'L0X7bƋJ?MH![sl*'27t%HiGJVA>p %7Nl!eI|VL&u@ h蚻9N1=@97 W(D3CR6% ѝĞ tB=mvg*b9xep/O2Ī#?@:c~~l\V7Dc&6\SȨà;MZ=N7S0FL-e=x<&߸?HZۘ:1}Wru re%|HvCeMpkӀ8|/{M /%`AFvTY%[7J!<{HɛGY0@j%fwE:hfU;>a hjw}HwdZσ3f4˨C`<6k~U`CEA/cݼ͋cFCf|؟YrTGݨR|EKͧuSm4ꃻC~[ S @R 4 I4\1Kv$Wdxq^:4X 315ۂ\ L=u5bBdTub|ѪgÕ_yyPc513'p2\؍I ZKWl*f 4Vsw8,{o 5cx}fZ%8ٳYve~ڛNמ0`wIt즢E?X?H#;7-mB:tTg~Oʲ@(wK;#?eɴ{ ˚&u& 0}+ '>ոo^8j@o6LP 9}uYOQS%Iw#`wn+c#M6ܾO(a1ȆJ v%+}oVTlya0{miV"IYW(EGOC?$h6+?R6_⻓ d\+cگTY);yH/Yy=ǘ_{j!g> ۱(U4)>*;HDU^Lo 1--Re.8Zo'g0dWq]p^;G/Ɩ}=\x]y1 J[Y&4{񬑏7D4RΏpEy~8hIr9*>#Rju81lě JJol('!HL1<0z dz~bE`߹T&3 \Y.a "7 `=.t1|nsdB*iO`ӑ{"yc>De!f;t<e8q?+d'EoIm-21'%NIs?ujyDM;IР6 G)"R)C5ŬѸYh֕}ilNvCÃ҃E4 < F,9$j{eCkoj'Aׄ4NȹJ$nBdޔD ڿ4<@8I2]yXXcm?S;*@+/nDQ-E1ԙO$G;HKp:(LUu/E%0nPPei1H5峰[O<& 0|DeŰ.u/i6myY; gV zA3 ' p b$68F#! ԰.X%"vL߼dWSzuoSR}:\ Gt̳sȾS}J&Y $~UUZTڻỿ;ïwvW\ saI"9|OxTex 7ӕwhiϵ(lz@Q~iGT7EO͕_bۃ͡ tm^|9}CQBfbrmhDնKuDn 7*,Cآh#}b%mePn%sϧH\.GSO~c,v'g#UFJ srBҭ9c>Cg[Th;7gS_p3Rq[R{{琭xO%, VcM? Pc(0/tIovfQ )㫪X'P*s0xR)#lyj "P wt!~MoZ~( :U<ȃwm#<7x0b% Yi<2B`4IF,mZq njv_B ZVt_9~iR@2%5jgZ#®_ݰwap}Q ^-l34wgphއ aʄ54Ku=O:1LkO}2&2͵I쵮]@Pcgz\[/Q<{@.Q@fZG!*}Q9*VUQnV-JA7 ayf+VAOC-I~KY3=mTPIQZT BI̊;2(-/#c E;q&W'U8Ʈ{&);XB븓 "S-^ʷ3ƚTɞa#?DNsϐ^[4L7+F~D2aP:v" !l 'Jʉ28Vmo)YoOa)e܋Wĩ, jQ8TZvrv<j GdΣ73șBai ֬Y?c FWa !I6cCЮv+}kUk |zORpvL`ZO3md2"Cl,KĦ, }grwci.d1&Lh.IvD&ݨS˝t3fبx( 5Fo@\W[-x!dw#OU[2}E`YiFX4f3(GP0w&OoZb,3{Hg~GtYXncDo_G{|) ?y#e5ױp}Ki,hmQ#ߴ4Mr"!HRhE+?a,p{.mzP"T 5_MV 2̜L4V(jeN+弆ZL c|-GB ΋;CNGĺ/#.*Ş_u3 . xsF%m- L\k] w84H9$/aevF~*2fsec|`-|i 7#T)I |'j<'\l 91 i @)9x:QCD'kRȒFn<ڴgp 31Pڶڹ RK@SItv;'yAH푿C)LaAUQ]TA a^4ʬ]{>6zxڝS H3 Z!0vf¯FCQ8מ3DI!b/VU,g47vAj}ܬ6 =t&w~rf7N&yE;">|vGy!v3Er:7a^NNAe$~"*n~J9ODFT$vV!*YT'ίCF gLn@GAX= {wx {+Iv%:_K+M,4bP\] 330Q8B3;go-X֡g->ȪbFiy5{'yU# y3]|&wSOtSYSJI~\dϼ8rӀT~a@E>u MW=[cB,{\`9 Q ;l\(55}_Āc }P*Ƹ$Z<?Uҝbn92諆 -JR 2]%Sv*D룑:>Dl%zK˔|[fk pu}D'_=Ҙ[t ԰@V%!Bڹv6 "ZΤp;y[Dѿ~  ,?1U1k?L `MܝD,yJH6U[ i^)}԰YedcCH}xI<'T4l@o&Jj(PrH[oG֊;x\Ŋe9_/2wi*_ c/L\l:GMջr㧫| ۢtF7^ii!]##D^ mZ#e<@hdYr08Ԛ™FaPGtyd!.#B{Y.wESöUQGS `(4yv1GZ 5c">/ss0!wv9PL^aF"fkRKFg-%Ck"I؈e+3EyG`Hw L5^x|Su_IC&PB/ԓ& .PW{ﯽ֚ %Bg [)$H^3,r.UzC*0"TԴ|InzT!sg8(KĄ@s1KDX?jUnܜF,Hq.Mϗ5؟ m(X׀@2fqAͭ(l_ 3xj+Fa_ b1W{FoeGlʍ4A>x8qک3]z .wZ)-M13ׇ>1j!655MRϠLqH!)8 r7֑% Q*{D[Xׇyw(}z^ȗNJIHeF&=x d-45P6f_2u4z̨/t$jXgr@!2K,tN_5uws=QTfgUcxncӫ49qmai>pi._^;TrlPaЗ:p^ C2y/ dn')W,ul]G>FkVއfobBO~`L{:fw 86K MFj5c(p!kJQ-x7gJqʢ7RjA8w~n>D140ќ_PV<"+u~ݎؔE+MC ީ?{SU_!bA @LR:K_۩5!05 )md3Kְ^<%x,5J (K,C)ngfeH’yn|= 1Q"ϊ#ՅcA]OGBZZn N]#8f'2nIgb[? fxMݯM2X; dž[;@No_p#i&q04[|H\: C{H}yq7@E{tX>n:Ę,6FC:|q슪cCoD' Cww/ӂ܌ _rDc̚ s\k5/0 K0czճ4MA̚* BbjB*îJ?$,_S@|>2 L?[yQ|?NIhuu}WXĂ0tU+xc:/Lgo؍e5U>N;L7)>7WŶo>4(kcR,7a#-)B?RTj6P?; i?u-4ԐK h9we I9QTAba׾t">ZzdP5[1k==ǿ:])k9D ; 7=^d=L*"'=y5)_)#ÎW>peSp>94g|Q5ҕ^R}r M/\uoXe&hƕ8 v{ Ã֩9f ^ȳS Q޽jj<TbФ7Nl= XiC^DD S-ȰOIu壁~$D9C}sHe)7Jڦ5ŦbdJ6ɞh٦a<{y j웗/y5`=Rpks.?1Vod |H[ &si#݅&1F oTطmW$eyBH_6Շcak9X{8w1ޜJw>We_A06@Pgluʖ@yރB(D~jM=YKL1Ψ<0& Gq}|hOMRzr6BcDI |6nP2)%ju4\eC֤ßiikޘ*hr< ND+wު B^FzLˁRrmҪ#HxD(n%6*4n| ݛbF QrQ{.3}K(3"B?+K7 3b6^vmFMbjğ INZpwz-(ݖr]wOq>y6Q³a?(ë}"6M:Qa'v߿}U RDnH0c˟:/Nϝm΋a hM|Ek+'(M@<&Ď_= @p 0)Ŵޏ?T^9j&6^J h[ z*=by .%X&1?4*kf[Ruq:@i-&̮"Jp2{l%rPGmF7l 1G9چncB8&q6}A,op[6q7/g+9on IC2-7e$ChX f~&]Yqm=byMȏ֍I0(":|χ] D:Xg ÖWךwl: |5.<~=..yF妹ȕbmkU5\ʑ$)"D#MssF29>4:hY6a'S({z~a&>ٜwȹI3@ym >CpSަKMYhfOgu{#GCqZ`/=pUdu<鳉z,:]u![%hTg~3.WsZхCU^Dt6N' ħr)xN3lW`ANR{.2L.*>WI ( PChGg:yy.^ԭ'6J~U mKVr &C_ /)pkkc&LV*5=@jsEM] kU} 3\ XiɄ")c i52|a|f-\6G5|X-F޴y,^=O#]A=gȩUUSoO΄\A`HӺқ_fSۓe10j\U#ep~(6`5.xٍPR-7|GŪbacԙ/t8N[6[ʼ nh u> 4R #Y*obq]}"ݞȲ^%r W%~Ŷ(QnT-$,_ʟE!zҤf 1#L:% @ P 7LCSlV]Arx^6e""Z"p|2<_>4|6eXg_e8>Рa!#QRFt%쑥L?ɝ@´xUCܯ a;*^k87/Qa W-[V>ݧ,01sS]%!UMU`*/cuxGͰ5-jX-$kp-Fq;# ӝ1'pSN.F~yhZNk ?BB~Lh%][^ShI C3ۘ3f Ks̯޸_ _7zp` dATbI~~z$9)~$ tUo+.ecIÐyBA~pO)]TMCQދ6c&0|vvX%sqQ)Uȴ'-,O'-U NDue(vQF8{@k9I0^%65\F][ :'&lʋBgS.= yWWZ ޅzM޵6ٸ$vT&~tAcMxهuצ:`fXf>1~q3ZjFb2L9|Sȡăߌ91b^[F<k䦤]NOC`*+I)/I$f-g,7؊/`:~YsDް VAmq9.ј:`d6H@f?O7.?IN?8)gnMp>tv ۏ3 .jTufDZ*Cy-ޏU?uWS-9:kJoAϝJ eMH{fh<ْߘni<'iaP#k`'^jB:mӎj[jA(U#E+!{i4HǓR ˖J:yqT:5x3[KsF8uBQPs‡tܡK- V,s>=;7uϼkZtlO2sjcE?ّY@-]^JY; KSV<Ӟhb:Vlqxaw'h@ = uF!5{e! u%=_)SMuk'ܥ./P0&gɾn\GT* y px^ެ0i״RhЖT FKaЮ }?A4bdHd^\iB&;/nmGR`p݂$yQ:}A,$+.X_+HOp]Ⱦ[22ĈMEQРSmOD:V?4X"\tmE }aM@G9,)&+,b2><^ԌCު@Ih'0ګ*2"˷MMv{  ^@9})f^ZN^ſDb7۱S_ h-B0DYE8aܣ$v}kM0pVvC6dK:K hʀV|SNtuJ&*ؕZtlz%=mT=:iW3.5=? 0'U6U4!܆!\,Qeh?r5 #Z~9obx;+Eûqw,Yz=;"Й9aVeÚ֋pe߭X72~r*11}/۳ΏoOx>5оo-F,[uEF|'|,V2|raݮ]ʢ|bdoF9+tDbM)* 1K'Ch@q )]hR'3^YT;8M#}JrU[0NJ-ȊYsBi)JPDg7ݎ(Pف=]prٸqb"CPBQrB00ݝ}S*C|2,irޘ(_(챃~F1#3g(2KȜ px/^diO%e:Id$SAٵ_F0i"쨽 bjیeJ"}c3\lYʭ2 5 +:[:d\:@9@u,lb>jC=R:݀7;+F⮙Q$zd>` u\R3Dn74Z+_`,a:zA?h$R hÈn`uku8TO$tj4KlB%XFTזz~]G Y1jdm?1)苼: 6)+rC$* Ivp618Y0qHxz%̙TiidޫBr c,2d\v)t[f,Z)7Ը0yC_QvD(CtUF7q_:zxNIjog!9(- z-&j'cF9e `]l6'n/◑nuE]*P q?!{L&WUAtIh{x}[ğpUDU90k]҄Q̺厃 ΣnW AdúhtA577Z e/%|υg@ǒ!~I8T؈U'%-3VKfeop(wzY龋mhcXЛK*SM^g[jVKK!f QQ<{juaqf݀˃6? P<ʙ]l;PՃ` sS gϳsCSϿZO Ri3B@2>(%_ Y"DXۥ&޿3a`q4B , 7L@a}XLuC'4l8݋vR3mxH׿z6 v·bC0E&Oix{EdF. {@ Ʋlhl5vs.Q;;}%^Z݉b aQǃ1R]MO *ϵj݈%gl{wkYmLbqSO@}, GbFu+_6SɸJ"14k\)n:lV+pR:]1†D`5,k6}FyNNAL/C| s AwWmWq$R&X ,<~?|&TR::i4ȿ;rB#&E*=0L2^ԇTe% [/5l2H'iLUEK4oj]E3u!]gy k^rp37}̀P!.}>$%D߬|1Z#u "xUΰ # MS[;6z'A,6y-ΰl g$#"cd(.}48Cib2""pA=ցm.̮_;}%lc\#JEX놲7PD|CฤbYbҐ>(Tpܮ-˾Gew}_vx +c.9A/|0y>0Mir YѹyX_jP'T9$,+N ssqTD7SN v;$B<g4Kx컁H8y8-9 3C3S`+9aFѬ}bD眹cLH^sƞtV켇k8FxΗDifb%e^d}i&1YX|?X^Màބhà Лh<̷ eM=:U 8}>7{g.6*swp4 G'=y.g^6چlzMG\}$m(S:Ix|4#zw 6DQz%>* ʫ96`9-dirO\.}Çw!oO6COWD514px2zX8-5WLeN\(SB׮c Q  vWB}9V=:?)I=@VJLbڊtd '4\&Q{ɂ\@dE\,")6 ,[cu/U$nǐg"fe3<.m>FC*a7H:EÌ+ge`>~'N#ih \Cm|^NGl1E_ݐLVZ#9 T;6P/Arcn#{t@ D\f?X֚>~$DղCC%Wt6s>a,<*}3H9wOB#ˈBϡ2dȨ?9oI 2:?c/m a= uWb(~ 9ƊPVؠFOG`Q'Jz,OrqA̍8cLKZ4Yֽ‘ު6iϕ4#E=Fw 2]\#6a ڱ)Ry!ty Ҍ!װEəl-uuO ֙XGp_ֆ]mZKB}3,i9C q#Np~[("}ǃ<^$AT4i;'҉˧}ުzhhÎi $x@&(ܷn/7n6kp t@fzPU+<ʹ@?jpSuNNHn.'JQ**gZSB'~6ۜ {ϠN'k Fxr z̿sR֝c(pETzlVO8Sغ&.#7R-0(VmMč}1Mb+y]:*Dƿj5p4XуRqHFGZi7mn ^ d&" VrmFQl4TLW1YmHrNX01W6hUR9Yq&[‹t;:-Wx-aSt2U I]J:vXM+iA0 !3xStT8n<=[ S1i"^)5dO7ʳ-?Hj3 XqEF# $2=F-z>} @|턺纲ݍժ9q铣m?'=i:Hr`+o'L c"@(H5w1CkX0RژAXfk|O6]?|3kyG/97gcǙ" ]yvoI3-+:V01f|Ղv 3 4ME{a"rRXP_Z!SsDԸ0>6m}PuxX/mDCs-2_h#hý`s+J,z{`XoKB9}'`ڽ9 kFtrĘzteLx|!yX)H}̻_| IQt(oD&Z;%Ϧ2zj4ԴP{r\aK. 9MLky0E$b%I.OX @EO K%XdCQU Sm@W!UfQMNE۬ 84/*OJ+(9tܓfpktɫ~A܀݁EF)Q 6G?)V A[o@#i4$N΄.qZ5o{o3#% lۮoٚ~SZQ8x]{n .2>G6葽IZe^ VcGXH4gJFh\N=JR_"ۥ^O[EњK[6k[6H%l羁"ӱA*%u)4A. nʾk%bf#:}HpX)ؓ aeJL^?K01e\}YLT$/7šXҬZilPlO+2k=fx=g9rBa]4i|<_y_ҒgFv@0̪tCyp#QڌT"/PrߩrXaq_݂+Y:.#5'0v2ZP!@>n{J5{A'k8 Db-&CLA,Υ+bCg7Ɇ&BzG *)ǒw\ld:=phJ}ENό9=椯AQ{Bjp5oô뜹`SXO<v◰ހc"~ll;D3zqdĖJДVs,wJ7Ո[=c^+UkQ&LbWfZzg @eJ`R*~n2%n z8??`Bt֫fVGG@Ʒ=IX1 YXcsZRrˬ#D=ͧ8|^t=\zmm_*^FPvzչ 2TRqX>7^0g>2{GW8%(9;̰C\W6x'j%-p"\/mmΞOlY{0d؎\VަaX/j/֧XɘALw;!x]V!z0ڿR,Ҍaorl5=-[lcD#0/)mS'7ܮ.fӌѹ&O䶙' H|&몠OJGE_V|M6[[Dƀg} f?fxܢkfwothFM*:U%dv%we?0]r}R{ɶUpW[:%:. tu]j*\` 0BHr{|8B=Dxcf8r2Mŕb$)2/l?YDq 3,ycw52d&H/T@M6&awŧWX/Nҝ 4Zm湂ݹ4iw#,7;:ǔQoOGvWLX ܚ:x61PƟmKeB6%jлɰ+sV u Kk M$&8@CbÏ` i SrgEjF6K,{u_{t ƌ[vhXkŀ~QS[tKĸR䟘GsX_tpo*6A Qc{s5Ls!,ʝ̚Vƚx6%"2[jvX Qo#NhXW:5oÕZP# K j' ->$3:w49`8vS*DðL"&?. P';c p߶1 _i#Q`6~㰇d=҆kLC~L4z1bSOz= `?>g̡TI35AUEw`)9Q(+o t K'ʭX[4'^Vd|MgW⩧%,Il0ש,) 56YHL0|QGFjI_։=o#C V?xQ12v)3}F]&6C~ j %mCݾ49$ބY*.MD x0~hnM<ͽe[j:63lua:[K/\'#x39Pu.r&I|CrI-FW1V}rQMŵ1J Pl_)zf!^p59*|& m V;ўib{ |"\3{hC[溗4mpl{y*bzp}e]g?Op MP IVO⭙tJ,Z;uQ˹H^ڎؠlw<0F7XUd7SI[죲pb;Jd-{wYs?J=* t 2Z?&m*0TP=c:8h44dGbL/ )+J$GC5EF#M܁¾-*= E=IE>mB\=Rp`+h ,E488x[8>%Gw$CIn 2d}ͩ߹WIXNU`{3퇈_5;P8q-S*]X Ct@Eٺ[ FŶ(f!T.)`(G]U8$78H"yhW*m@-~{"CO4{HK=v~o6(#QsIuLZm5V`3y ~IiZmOl͓HW [kOz.n:OcS "?xF߀$d ZƋe.< UMe&&(d4t8(K>K<|f-٪ $-28*.Z_;ibuS~lOM0nBgGeTU d4kk/sn٢:b0MF 6\޿'H2G+R& 4m/?SvX7 WQ6O-u܌Q"dz惴މXEsY!`?׋C޴]͕E5H2 Vn}- JN^TZ!Bɒ-?b4!x@`ql lc kTM T/*n7H.CR#^*klৢXU=#[ByDpUL; !>.q6KlorOFGvCi2~-Q*@đ"P[ԯ5dQ508'ޡtFǺOSc@5fw L \~Rwl% =tԫd;l{8N=L& eas L A~PyP\~jQ<\1pzQُؑC cEQuM}{Wd耚 FӾ+:EA ɀkb14z+JY9x둦mB?5H|eIf)!@:z3!|Tn H/̘$V}3>9r*!f)z|n^隢U3z[ϸuңUZ%ɯC>1A9:1eڕ>zgc,F87_`zxDCW.#w˼GB σ.[zh񰐮S]yPH@wㅏbg,ShfPQ.gjA\%pZVIc}f*CPذ 3)n[tM/h`Zr^BíF삼>'LFĦbܺYdrovJ1ϴk'V*l SўW qE7 8^et]6RBA`hLӄۥ2spkVҸ6_wEX t_Yx 3" ouxn(t: Z 'n~kXZr(FљBӎ[k˕N#kÛw,111CԱ2s{$ዮza;*(?@#/=L3XhFcgt1|@mlۺVbfOc,p㲄QT@ʶ&Q2<7StY tZ KT8vGҜE+Eau/c0-20EjXE?S_ܬ#<:'k.yBnFhfM2c½mܢWת_g!9SuO"\ k5QUi(D0A[@ 47ٺܛ :^5[SewƓ1S v)Qz;Y"+d!$\tq}axe_T;&)ܐXEwBYyD],2&s~AWt. p\E|rUtLk/G~Cp+\ a/xƶ3byPT#q$nSgcJe7Ϡ7~B|Gg n _HOE2@6@ԀidLÿZNTPiۚiu<⚡mLauD> hOM q0[(<Ξy|'~A)#1 fz7pT8Y]Aㅟ'ǔ(Bo;lۦC\0*wO3D9_4(Jm=#t9;@ZJ7 ^Uę*;K/:Pm& s4&ݏ''6Ɵs#QP4m좖Rk N+Bi/=SDz?ƗJ|vۮ%T 6}qM݄o1ρR:>jÍF s哆r@'3K}W;MiE"54 S8Rx䏗]ԒU}G_?rQ<2s5x|ub>>'=N5X(r~1U흜l޳*^&Mn0rC?xWϠIڐZ WI캋QFVN3/2:˜z/A0% 6Q}{ }A+&"⿑*k'h D3i_O#lX?v3 tNbI]{g hmlͱW$r_aYJpJWG_~FW^΀M ~G4 P]CO9DߗM Wgx"ob4 o6꼑G<6vƂ($=[W(R'nyLJ^@ {H0j8v@ 1OJL~>"b 9U`gFF?a^&kJ$/\ECKh/Qf "TƖ~pOB,/.$N=͜WS>Mwb{őw#֍zʄ@I(($n=zl+PL@W_v9q<4}->~K%,18bOb>4*gic׿}H:S;/G=\ɉWMY1̍<*K&Y{.-2IłWv:al_‚柇Y=%> V 3w( =RkPX:0 _}J|ݭ/UBÒl )>fw]"Jߝ晞4IeN.d A&YuGMc:I{i3|GFAe $6H8Xha6w~|XYlq\̥NYxžeAN,ӣ$4ַS<>H -c}9]Jn+LhyKUl-b3+ Q4R:d![XUh)"q 5F)Ԍ?' H˓rtV s9]ZVx1a9p]q-S0Yx rX]͠u\;`gH[p=e,>hDA!1A`|o|s(H mɫT~eB}yh-faԉdŞzޠuVNI]JQ?&̓Z竄/`P*d#͆hᦐh!Y"[A1n 5(VzޚuNt ܃o]9A9urg6!U+΄?Vo8pAvSYO)tN9/OZK^9/xТ{-c/ndKh*C6DNC cm jBc2p"6^&Xz"7(*ٶ;:mM~<_2T qӣ|-ǔ? #;rG#'D4_McjױTwPO|O,g "ҧ pA@Y @1XB(փYI˟ڄs;h`ٶ=iac\6`t4YT}s75b+yy,xș:>7=`s#kaY$xk8Ñ{WH Z o;iޅ67-sp8q7l,GNv!z/B,9dۘ4bSc[hF^1+WÌ[.[@s1i~{+fփZ"v<ȣn*#:[[GQ c&Co)4‘ * 'QVH0RrC!OFtq74%|x -oulޝr M@~l=E{X ԄfDH\B鐾C>Sz;YӒ)?}lvᬯ_ uZGS6uh( sl¶u6Bmͤ!Xkp-6\D >ztqYqs90.\)q{ XaV ̭-LTY/:]S^5ժesz!,bod?;7yx9 77ߋb0+8?dt]X'vcLN3cf5r xa}T[9]'.cl$!3mmXs,&8W t``4*OzR="RڈC2__j=^y,șt`UCp8ߡ@gu &#\>pKف%%D+93g?~v Lq^W# .B<T-k_ݧFU~*gFBkzOc5n,\K@a Í׶bk/#D9#3ZI4 hH㛕|xT3 /'SOI_j7JDJ<{l 颈?J]D󲬐##h2;slRv-tŕSIs\Xb[Y0ꮞ! [/:Y %J2s'i%fgX-]ŻVAvPvI^a@QAp";,@;7 Fq?ՃhH=\{$Mˑ5Hpۣd%L"C!& +OȨ n !T zm PW(GΚqqM&dq;V..AJ[4݄0&-[UqВwT/`>5gΨ/xi4a."]ܸS.D|–$t6&l,$2r5LRo[DR%1&G U,F+?>h#T /{w(V틲Ь4SR/g5}6~֞70Hs4NulyJ;BfDT= ]Bmύõ"]`3>kҪ{p:t؞'ןuPt3S2;+wcڐGX{i4Յڽq'Sb{8;}+˰tP-+͸:ðUр"t Ͱh ۷ZԀ:Ɲ_IK;x-Y=% [?/p|ӻAi΄Cy ]81Ag a.5Z.MI@`Y̴,aU6z5AE*fWZb!MKuGBБ# ;PEP_&<6N2 =13d2(s-!j5B~bJ '"XJ&]7w3HG0Tv~:++Xl{ZgҜ . ԅq3HLnf͎?2j' X^-vAA:\ϕx9q6 #m>6뇃H4Kq_ɹy𐕁(˨neP{e+ Qlڱ&ԕbw({?jO &TDPm2lGf3STu (OR5N)cP jȵOA_b"+jFyiz,yt`+TR ³e_x ƫOCa)6gFE!-ߥDsϧ|gq; E6 ^0R λcϙm?wdHHpy"4i0yjf*ﯳճ-*:Ob=&sf9Rb:z+4/\MΜz-zмa!Mtb 4[:l#NJXƚʸ/"CJ\ǀd,Qz kA0|g %K؍=!2~Iva\7 +]hOL gb ;si =>i^HrO-35-w Sl?)u {+1SpZ#Peض;1XGú @^[^"p J-VgM6.P wܠ?PjKD?ۥQm}Acnj(`G.%6 1FV\[W>p00<|t897TUä$b99vK~) =7;ZJ=F;W{(uT,+rcr H?zV-? 1-'=i_g.ZۥJQA=e6<5?Z΄E;(Ff,nۅC5D*$]-L._Q{_{ MM.2~YA}6Uu?S{)Xq9ݎxR^1k3{uG?g~ :Ș%/~'AuL47~f%>>^J4#;@:4cT(ck(d|I5{'~7'j$Wbcf5hSd:z1)9 K'xf7$I *7}Ph:pf2dVԬ nr :@{i0ZZKpj8a\QXBw+Ceg!A`:7u| sY&1F}W]([! >1EiS0ׅI'tˇ;=&w**ay~+zXބ~0ӃLH:XDxSzv }ȓGl7]7=Y*u:kŠ HmRzh) %-.hB0!u+e*30. a(hq酮!>4fI[BAG>;G*!Y`%92Mf3ʼ%6\If,Vɋ4F0M2~@p bF:sԨ$ð2Ֆ![7{_ } G>;O_Rˢj2 "n@Ԇ`e4?FQvN~ڃءHֈrX&O0ơ'<l%S5\Y݅ z2U r"iA UY6[ErʵAv $1Xuw-ukFu2l;otaz@t%)_  &KUls(//΢7pܔA@<y6E4?D{QL_`悩TL&͑4^k|_1<$GIRuZeee&)07ޠd!Q^f:R5NljϬb&}>s#HD/;HkN"@e;Sԑ쿪&]]ܭO.??dI 6@['8LM40Qi"FxPAΨ.yAu[7[Qԗ\YO}':O2O4e}Q9чƏ\0X4䂟<\dD:%z8+A*Z( tIhhn­8ϯV !H d|oo -8'~SIJ2;Fb_Lx6p%kF׼Ne\#݄<E&^G W)Qh;lxgas>aU$})b ( ^߃TQ_l<ú  fxRrBoN(Ej'pI͟$ID%tWZX~}1,nјl,O|毼{PZg|FeW ˭U*wH"~q n2p(1O\,nRG?}jB*"I ,{$}6L~ӏ'LN&+O~(*ƈm{}AG_lܓK#3'![rnnݺK0"ta/v#P P }] \jD.-Nb<Ţ5&NCFKlG?O2ۣj67I{'pd;!9,2y}P(Xt %&f"UMW GMytR _⽨6rK}^*32a|gj(5ax .V+ Do ;WFw ]9FL`PG[R{(X 54sдHah)pa+ݷ)9ym_rA^%=aPI 16!.sPnnz6.£ 36ߗ+ʸȺ]w mOی(4bGa^ŽJo|ApKg[;{zFd?j,G*&_6g_h;abpFhoi aH5_ƙ{= ۞]ٷ RIij5kfzz2K(kڅP=N3SqHBdL.1Ӄp*3M5cWAK:^26k[;1/׋;`Fzcɏ!> bY0<ǣ΃"C:A?J0$)F_R&Jq?a^yxe֩'7ݱ΂ECDH part of OpenSSL 1.0.2k 26 Jan 2017ECDSA part of OpenSSL 1.0.2k 26 Jan 2017hy ly pPpy??$@Stack part of OpenSSL 1.0.2k 26 Jan 2017lhash part of OpenSSL 1.0.2k 26 Jan 2017RAND part of OpenSSL 1.0.2k 26 Jan 2017@@??@@@@"@1@F@C      p  P   l[]\^lnmo~ o +<>!,=?-P|tBqFC)cW  }"#$.Xr_9n{ DEb%'&(axzy{u|`hw*As   )@d z }! pkxrZrWm\qYs625gXt&%{kg~w|"#0u8~tcY/+S-.,R !y89:;3=<>47QHIJKLVG1@ABCDEF?MNOP265'U(T* cbdef}CFED ijhQNZJPOSRHIQXYWMUVTLGK.*7/,6438-5+120Z[ `a\_]  g9<?>=@;:BAee&'(VS)k3qHLJ:OGN;KIMlvp_/^]hi0Tvfmy#"$[nisq~}|_plwotvum{xyzsrnkghjica`befd@:;<ABC=X.P/QWVDE !"FGH#$%I>?063ST45UJK&'(LMN)*+O71  ,-   89R2^YZ\[]4URzj`ba%jwx71pou$dkpm~t-Q/SR+1,2)0'U(TV*z&'(XHLJG:ON9;KIMroqnsEZw ZWgXY~YVSTUR! l^xr[]\^\qlnmos6y~ 25t&%{ +<>!,=?-kgP zw||tCBqF"#)0xu8cwYc.W   !y}89:;3=<>47HIJKLG@ABCDEF?MNOP65 cbdef}CFED ijhQNZJPOSRHIQXYWMUVTLGK.*7/,6438-5+120[ `a\_]  g9<?>=@;:BA"#$.eeorh_`kZ3{lvm p D_/^]hivb%'&(axzy{fuwmy|#"$[{n   iq~}|_pltvusrnkghjica`befd@:;<ABC=X.P/QWVDE !"FGH#$%I>?063ST45UJK&'(LMN)*+O71  ,-   89R2\[])@sA*4zjd`ba%jx71pou$d}{ | zQ} dijk[\]^_`abcdefghijklmnopqrstceuvwxyz{|RSTUVWXgYZ~Y~x`_      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^lmno_`abcdefghijk|}~%&h-yCB* )@Fsupqrstuv$|'()*+,-/012wwxyz{43MNOP56789:;<=>?@ABCDEFGHIJKLtq    9   TURSQV/ !%,x  !"#$%&'()*+,-./0123456789:CDEFGHIJKLMNOPQRSTUVWXYZ[Z\]_`abcdefghijkl  :;lpA DE012345678X[;<=>?@ABmnopqrstuvw"#GHIJKLMNO}}"*H *H *H *H *H *H *H *H *H *H UUUUUUU U U*H *H *H *H *H *H *H *H *H ++ +++<*H ++*H +*H  *H  *H  *H  *H  *H  *H  *H  *H  *H  `HB`HB`HB+*H + + *H  *H  +`HB`HB`HB`HB`HB`HB`HB `HB `HBUUUUUUUUU U#+UUeUdU*UU+U+UU U *H}B *H}B *H8+*H8+$+$*H )*H  U%++++++++7+7+7 +7 +7 `HBUUU+e*H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H *H ++*H  *H *H *H  +7*H  U)U.++0++0+0+ **H*H8*H8*H *H *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H   *H   *H   *H   *H   *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H ++++++++ + + + +++++++++ + + + + +++++++++++ +++++ +++++++++ + + + + +++++++++++++++++++++++++ + + +++++++++++ + + + + + + + + + + + + + +0+0+0+0+0+0+0+0+0+0+0 +0 +0 ++ U++++++++++++:X &,d &,d UU7*H + + + UHU$U7U8*H=*H=*H=*H=*H=*H=*H=*H=*H=*H=*H=*H=+7`He`He`He`He`He`He`He`He`He)`He*`He+`He,U*H8*H8*H8 & &, &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d% &,d& &,d' &,d( &,d) &,d* &,d+ &,d- &,d. &,d/ &,d0 &,d1 &,d2 &,d3 &,d4 &,d5 &,d6 &,d7 &,d8U-+++++U,UAg*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g* g* g* g* g* g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g* g*!g*"g*#g*$g*%g*&g*'g*(g*)g**g*+g*,g*-g*.g*/g*0g*1g*2g*3g*4g*5g*6g*7g*8g*9g*:g*;g*g*?g*@g*Ag*Bg*Cg*Dg*Eg*Fg*Gg*Hg*Ig*Jg*Kg*Lg*Mg*Ng*Og*Pg*Qg*Rg*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g* g* g* g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*"g*#g*g*g*{*H  *H g+7+7U U++++U+*H  *H  *H  *H `He`He`He`He++g+g+*H=*H=*H=*H=*H=*H=*H=*H=*H=*H=*H=*H=*H= *H= *H= *H= *H= *H=*H=*H=*H=*H=*H=*H=+++++ ++++ +!+ +"+#+++++++++++++++$+%+&+'g+g+g+g+g+g+g+g+ g+ g+ g+ U U!U6*K=*K=*K=1 1 1 )1 1 1 ,1 1 1 +U UU*D*D*D*D*D++*H}B *H}B++0*H   *H  `He`He`He-*H=*H=*H=*H=*H=*H=*H *H *H  *H  *H  `He`He(7** *** * ******b*c************* * * * * *!*!*!*#*#*#*#*$*$***** * * * * * +7U.+UUUUUUUUUUUUUUUUUU U!U"U#U$U%U&U'U(U/U0U1U2U3U4U5U6*H   `He`He`He`He`He`He`He.`He/`He0*K=*K=*K=U%*H *H  *H *H>+$+$+$+$+$+$+$+$+$ +$ +$ +$ +$ +$*H  +H?+ + + + +H?+++++y+y+y+y+7<+7<+7<78,8P8~t88~~ %~,L-~ 9@9 5~`9x9 >~99 G~9: P~8:X: Y~:: b~:; c~8; e~̼x;h~;k~;n~D <q~Th<t~|w~<<{~=0= ~X== ~== ~>P> ~>> ~>? ~D?d?~?? ~??~@(@~H@h@~@@ ~@@!A@A" ~hAA#AA$B(B%~HBhB&BB'BB(ܽ)~8CXC*~CC+CD,~(DHD-hDD.DD/D E0 HExE1 EE2 "E0F3 +XFF4 4FF5 =G8G6 FhGG7 OG H8 XXHH9aHH:h8I`I;pII<IJ=0JxJ>JJ?JK@x KHKA }pKKBKKCL(LD TLLE LLFM0MG `MMH MMI N@NJ xNNK NNL (OpOM OON P(PO `PPPP<QxR0SxTU`VȹW HpX ȺY0ZDl[ \Dl]^h_`"ܹaHbLc&tPd)pe,g/0`h2i7$Իj:@k=`l @mn@hop I8qR`rsYt^8`uewjxp @y`z{|x0H} ~p~(HP 8 ˀp Հ ߀ H` (Hh  0P  ( 2H <ܻ F Q8 \$ gx r }0 Px       8Xʁhxҁځ 8P p   0P | ,D\t&-58=XxELtMN4LQdV\d l8X ux   8X x    Hp Ƃ т ܂8h  ( X  0 X ) 4  ?Hp J U( `X k vH x  (X   8h à ΃H ك ( `  @x   X & 1@ <x G RP ] h(P s ~H  ( X  8h  ˄( քX  (X  0 h  #H . 9@ D( O Zbi p(@wTl~  (L l    P8`Džυׅ P߅0h0X8X'x/7?8X Gx!O"WP#_$g8%oX&w'(,)Hx*+8,h-.P/0dž81φ2׆H3߆4H56P7(8p9:H; < (X= 10> :x? C@@ LA U8B ^xCg(DohEw0 Fp  G  HH x I  J 8 Kh  L  M( ` N  OLJ( x Pχ  Qׇ0R߇PxST(UHpVW XHpYZ@['h\/]78h_?`G(aO`bWc_0`dgeofw0Pgphij(Hkplm n Dpo p ʈ q ӈHpr ܈s t 8Pu lv w x(Hy`xzLĹ{| } (H~#h'+/ @3d7;?0 D4p M WPaxd hq0Xy @ x     !4!P!p!!!!"0"P"p"""""#0#P#ljp##ω##׉#$߉0$P$p$$ $$ $% H%% %% (&`& && $'@' -x'' 6'0( ?p(( H(0) Qp)) Z))c *H*fx**m*+tH+h+{\|+ ,(,X, ,, ,- @-h- x-- -- -- Ɗ-. Њ. . ڊ(.8. D.L. X.h. x.. .. .. .. / / *8/P/ 4h/x/ >// H/ R// \// f00 p0(0 z80H0 T0\0 h0x0 00 00 00 00 01 ʋ1(1 ԋ81P1 ދh11 11 11 11 22 (202 82P2 $h2x2 .22 822 B22 L23 V3(3 `83P3 jh3x3 t33 ~33 34 404 H4X4 h44 44 44 Č44 Ό5 5 ،85P5 h55 55 55 55 56(686H6`6x66"66(66/7 7687H79T7`7<77>77A77D78G 888Jh88M88P88T89 X909 \P9h9 `99 d99 h(:H:lp::p::t; ;xH;`;|;;;;<<8<P<<<<<<=@=p===>8>p>>>?0?P?p?? ??!?@"0@P@#p@@$č@@%ȍA(A&̍PAxA'ЍAA(ԍAB)؍0BPB*܍pBB+BB,BC- C@C.pCC/CC0D0D1PDxD2DD3DE40E`E5EE6 E F7@FhF8FF9F G:PGG; GH<$@HhH=(HH>, IHI?0xII@4IIA8J`JB<JJC@JJDDK0KEH`KxKFLKKGPKLHT@LLIXLLJ\LMK`HMpMLdMMMhM(NNl`NNOpNNPtOXOQxOOR|OPSHPpPTP(UPVطWPXظYPpZ[8`\]^p_`a0bPpcмdĎeȎ Xf̎gЎ 8hԎXi؎ؾj܎@klпm(nPpopq(Prxs tHpu vw(Hxpy#z)({/Hh|5}9~= 8A`EIM8Rh Z4l0`c d̽ n`8P8Xp,@xx{T~(h @Xh   @` ÏD ̏ļ Տ<t ޏԽ (H ,0H h   @$p,4< 8DPhLT\(dHhlt|(@Xp(HhƐ(HːhАՐڐ8`ߐ(XHx Hp 8` %Hx*/84h9>HCxHM(XRW0\hafHkp(`uz@x(h8pHp 0 p @xɑ Pёّ@x@pP0p hPh  0  H` (x 0 8 @0 IXxRZ b8h m x(P x 8hP Hxɒђ ْ(H!h" # $(H%h&' (h() *Hh+#,)-/ .8`/50; 1AP2G3M0h4T5[X6b7i `8p9w `:~; h<=@>? `@A0xBCPDēE˓`FғGٓPHI@J K@  L  M0 ` N   O  PP  Q  R' @ S/x  T7 @ U?  VG(W@`X OYXZ[8`[c\f]i8`^l_o0`rXaubxHc{xd~eHfgHhxij$Hkh|lmn8o`xpqr(Pstu0Xvwx(@yXxz{Ô|Ɣ8} ɔXp~ Ԕ ݔ 8 Xp   0 Pp  @X % 0 ;8Fl J S Hx( `     \!(!e@!`! l!! u!! ~ "@" `"" "" "#  #@# `## ## #$ ƕ $@$ ϕ`$x$ ؕ$$ $%  %X% %%&8&p&&&'P'' '(@((#())@))/))*8*`***+0+P+p++ 5++ ?++ I,@, Sp,, ],, h0-P- s*)A@B)tF@C`_hq@ts@wu@"t#t')+(),T)RU)S@@0,<,,H,`,T,,l,,,--x,,,,P- ---,,---,8--.,D----\-h-t--ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/>?456789:;<=  !"#$%&'()*+,-./0123EVP part of OpenSSL 1.0.2k 26 Jan 2017PT PV  ` T PT @W  ` T -PT pU  ` T PT T  ` T PT  X  ` T PT Y  ` T [ Z [ H ` ] Z [ H ` ^ Z  ] H ` \ Z \ H ` "@^ _  ` #@^ 0a  ` .@^ P`  ` $@^ ^  ` + b `e 0c Jݢ,y!< b f 0c > b Pd 0c   b c 0c ,b `e 0c =b f 0c ?b Pd 0c !b c 0c b g 0c b h 0c b j n q (n q (n `q (n po (n  p (n p (n q (n q (n `q ( n po ( n  p ( n p ( n q ( n q ( n `q (n po (n  p (n p ( t `t a t `t  v0~   @  v0t   @  v0~   @  v0t   @  v0~   @  v0t   @  q` p v  qv p v @q` p v @qv p v  wP @ Pw  wpz @ Pw  wP @ Pw  wpz @ Pw  wP @ Pw  wpz @ Pw 2  2   2  y P{ 0  y { 0 ` y { 0 { y 0| 0 0| y | 0 | y | 0 | y 0~ 0 0~ y P{ 0  y { 0 ` y { 0 { y 0| 0 0| y | 0 | y | 0 | y 0~ 0 0~  y P{  0   y {  0 `  y {  0 {  y 0|  0 0|  y |  0 |  y |  0 |  y 0~  0 0~            P@   ` %J p    'K @    (L     &I     J p    bJ p    l   ` n   ` o 0  ` m   ` P P P p   @dp   @d)* 0 P @h@A  ` @h   @x   @x0 `  @ @ `  $@  0 @BB  ` VPWtBqF@htq  ` VPWtBqF@h_`   (uw 0 P @h  `   @hP `     D@ E @^a@^,@^+@^%@^b@^   @ @ !*)6666666666666666jjjjjjjjjjjjjjjjc ;; ;cc ;; ;@x(  0123456789ABCDEFX 0hhx`` ] hH {  { h ȗ З] i`iЙ ؙ` j` _   ` ( jpj0( 8 @] pkj P`] p] l``  plPHP`` @a mp n` `n(     n@P _ _     ( 0` 8Ȝ] @؜] H po o`   ] pHo,`` `` c `   pq( ȝ @rН_  {  r( 8 P_ X ` h {  x { ( 0 s@sH   ] thsxȞ` _ 0u`  ] uПv`v ``  `   v @ @ ȱر 0HXhز=P()(8HXh] p|] |`` d @}}p`  ` }~ p~`` `^ ̺`     , (40 < P T` p  t     (08@D<@HP`px \8HXhx%-18sASN.1 part of OpenSSL 1.0.2k 26 Jan 2017 @(((@(@(01(6(7(c(d(e(i@(` _ p x P] _ _   h_ p x]   p(PEM part of OpenSSL 1.0.2k 26 Jan 20170123456789ABCDEF0123456789ABCDEFX.509 part of OpenSSL 1.0.2k 26 Jan 2017<dx<x<x<x<xWpCCC`=^ h=_ pp=G] GE>S] GE?~YXWpYXWD`` DH_ 0ZZI_ 0ZZJ_ 0ZZK_ 0ZZL_ 0ZZM_ 0ZZN_ 0ZZ0123456789ABCDEF``` `] P``c `c aa a_ 0a_ @aa Pa `apa_ a` a`` 0 aaaU0VЙR` Zp@TPh^ h^ `(hX_ _ _ ^ `h  @j_ j` jj_ k0pkYP@lHXlpl`` lll] l_ l0l`` lplmmc   m0mc @m_ PmgpP0 YpP0trrss(s8sHs`sxssssssst(t8tttp httt] t` uu0u@uPu^  r^ `u] pu^ u^ @ uGSUWY~   {`` ({8{P{ `{oPr^ ^ `` npq0`  P s0@|` }}_ } }`` 8}`` P}`}p}@0@~_ X~_ p~php_ x_  `` ` _ Ѐ5685680P `a xa a NRЊ` `` p`  (NOH` LNP `  p (` 0 `` ؋] ` 0O`0` 8 PNhN x@O(pRЮ0N@OЌ``  p` 088` $N@ X` 8h`` ] p` Ѝ^ ؍OROp(DOH` Xx ] PRȎ` P PP` Pl` (  @OPXx` ^ Op` P ؏` 0`    8` 0Hh`` p] `OPPRPзxА` ؐ`ORpO  ((@` H XNl` p x` pO  ȑ` `OR   ((N0@ 8` @P  H`x`  N Ȓ] Вp` ؒPOQQQQ0QQH`` XQ hx   ȓ` 0`  R0@X` ``` p` ` 0  ` Д`  _ p``  ] CONF part of OpenSSL 1.0.2k 26 Jan 2017CONF_def part of OpenSSL 1.0.2k 26 Jan 2017TXT_DB part of OpenSSL 1.0.2k 26 Jan 2017_ 0 ($ ,`  0p8@X_ `x_ < l` 0    0 ]  p`    0 H Xd`` l(t_  ( T`  p0_ `    (` 0( p@8L T_ `x_ _ ` ` (``   p` ` _  Z ` _ ] ` ` _ 0 `` (Z8H] X h x0ZYYYpP`` Z 0Z p 0a0@A  ` @h$$$%$H%p%%%%0&8&l&x&)_ ))^ )0 ) ()*`* (*] 4*  @*P*_ X*_ `*^ h*t* * ** *] * ** *` *` +_   +(+0+ H+X+_ `+p++ @ +++++`` +` `,,^ (,p8,H, X,` @h,x,^ ,^ ,,0` ,P,0`  ,+,@-^ -^  (- (@-Content-Type: application/ocsp-request Content-Length: %d %s %s HTTP/1.0 00000111 1(181H1X1p1111D_ D_ D` DD_ D@_ DE_ E@_ EFEF EP0EF@ELE_ XE_ `E] lEF xEF(EPEFEE_ E` EE_ E` EF_  F` F(F_ 0F@_ 8FF@FF HF_ (PF^ 0XFF8`F_ @hFG` HxFPFGF Pjj_ jc j] 0kXkdkpkxkk_ `kk` kPkk`k@k`l pl` ll_ lpl`` l_  l^ (l  0ll_ l_ l_ mm_ m`` (mp4m_  j^ (j0j^ 8j_ @jHj 0Чp }RSDS )iK6 kPD:\CFILES\Projects\WinSSL\openssl-1.0.2k\out32dll\libeay32.pdbTTB!t`٬#!t`٬#!4ũ@!4ũ@d T 4R!t }!  4t }!t4 }!4!*5t 4 3rP8!t4`@!d T!!`@? U.S)Op`0P`EEtT 4 R `!,O!,Om m hT 4 R p`!43P!3PtdT!4p!pd4 p 0!4T!T!t /!/  !4l!t t!t!l#p`0@!T!d T 4Rp!4fP!4fPZ ZtET ;4 b`!04!04r`! t!$$tT 4  t!.R!.Rr`!!""t T 4 !0!0!!FFt `!4 HX!HX`0! t T !t T !!  4p!pp`0!) ) T   !  !  4Ep!Ep "!  4p!p!  40up!0up#p`0#p`0!  4p!p! &g&c! &g&c!"0 o o o7F o}FT ozTm q: p f 0 V    G> >E E'g g3 p} p pVH p) 0!, , tdT((!(( p`0@( p`P0!/B0!/B0$4p`Pp(- p`P0P!d33d!33dCCd42p!d44d!d44d!t@77>!  tT>>!>>!>>d2p!4??!??R`!4AB!4AB!33t 4AB!t 4ABd T2 p!  4pEEp!pEEp !22 - ( tdT4FF!FF tdT4r0B p`0P!dg! gIg$!gIg$!dg* *d *T *4 *2p) `P!''t4oo!oo(p0Pp!  dwDx!wDx. 4  p`P`4R P!t 8!d L!L!t d 8!t 8pPP!d 40!0!d 40. 4  p`PH`P! t 4@t$! tE0!tE0!@t$*d4 p'4p`P" "4 "2 p ` P' 'd'4 'RpP! s!s% %4%2 p ` P- T!4 p `" "4"r p ` PR!88t T 4Ĵ`!  d Ĵ4h!Ĵ4h!Ĵ`% %4% p ` P%4p0#p`00!dr!t"!4"!"!"!rt d4!   `!`   ,!   4!4td T4!!4!R p ` P!   !8 *t3*d2*41**P@t d4!   @!@xh p`0PP  p`0PP!hp'4*!p'4* \1e2 \78 \T8g8 \1;?= `] mee mqff magg m1hh mii * n v  @x @MS @,   A     l )p  S S S1 SH2L S)MpS 0nU6Y 0nY] 0n^Oe 0nen o.p Qss vU~  tdT4 tdT44 2 p`P!   0__x!0__x% p`P0P! `\]!`\]v vr p`P0 dr pP0V V It ?d 4 R P& `P0@!  t hiD!hiD* `0PP!t @ff!@ff& `P0P!t e_e!e_eQ Q It ?T 4 R `& `P0@!t oLo$!oLo$& p`PP!4plld! ll!ll!plld& `P0P!t 0kk!0kk" "4 "2 p ` P1"4"p`PH!0sts !0sts #p``!--T4Pqq`!Pqq`B p`P0! vw!vw2p`0!T g!  g~!g~!g4 2 `!t xlx@!TlxxP!lxxP!xlx@p`0!T@~~! ~8!~8!@~~ p`0!T0yy!0yypP0! dz0!z @!z @!z0! d{Z|0!Z||!Z||!{Z|0* *d *T *4 *p&&d &T&4&2p!N!N, 4 p`PP, 4r p`P8' p`P0`! l! l)  p`P0X%p`0PP#pP8! d 4P!P#pP@!// * d 4!,!!,  J>h"33 .)$ xh Ⱥ K p ` 0!##T<g gt bT R `0! ڧ(! ڧ('4p`0p!1 d! d!1 d!2T3#&!2T3#&BE1t"*d!#4 C P((pP0!d  !d  !   d  ! d  ! &1pPP!-40+!.d/+!+!+&9P0!5t7пN!d8N!6a(!a(!N!пN p`P0!@7! 7!7!@7!4 |1! |1NNt 4 2 !  d T@!@!4/!4/00t(d#T20!4T0M\!T40M\!T0M\!0M\!t@#!t@#!tPn#!tPn#!Pn#!  t4!d2!  t4T !T !t>T t 4 T !t T 4 T !- !- ! T 2 0!==T t d Z !t d T Z ! Z  P0! t dp !p t d 4 R!TF !F !TF bp0!  d T E !d T E !    ! Rp0! d  ` !T 0 l ! 0 l ! d T  ` ! d  ` L LGTd 42 p!t``'!_>`'!T_>`'!d``'!d``'!``'# #t#d#T#4#`!  t 4 pdd((!t 4 pdd((d T 4Rp p`0!Tg!ht(!g!ht(d T 4 rpR R T4 R p `RP0!  d t oo(! t d oo(!t oo(# #t#d#T#4#!T 40!T 40!0!  d 4@T!d 4@T!t:#!t:#&Q`0p!tY)!PTVR)!R)!)!PtYTV)"Q`Pp!4U[`*!PWtV[t*![t*![`*mmtT 4 R `T Rp! ͗*!  d 4 ͗*p0!! ! dT `s+!`s+JJdT42 p' 't'd'T'4'ggtr `0!Tp+!p+!dިG! Ӫb! Ӫ+!Ӫ+!Ӫb!4 8!8!  t 4 (((!t 4 (((T r p`!4 `6p,!`6p,w wt T 4 r `::Td42 p p`0P!  Ĺ,!Ĺ,p0!Tpֽ-!dֽ -! 4-!4-!ֽ -!Tpֽ-!pֽ-rp`0!@7-!T7-!7-!@7-dT p!4 -! -4 d T rpp`P!  4pD.!4pD.!  Bl.!Bl.!pD.) `P0!t0.!0.0P!"t!@/!d ;/!#;(/!;(/!;/!#"t!d @/!"t!d @/!"t!@/!@/!4T!d 4/!4T!t`}40!`}402 0!t@]40!@]40T 4d Rp!4!4d42 prp`P0!00!00!4qT!4qT!40R!40R!46l!6l!46l2p!4`|1!`|1!4P!t1!1!P!4P!t1!1!PR p`!4 82!4 82!T 47\2!7\p2!7\p2!47\2!82T 4 2 p `!2!2Rp`P0!  d3!d3 T 4 2 p `! `<3!`<3p`P!4Qx3!Q}3!Q}3!4Qx3 t  `P!4  3!  3k kcT p`0! 1 4! 1 4J J E  p0!  d T X4! X4 T4 p `!p  4!p  4T 4 R p `!   @  4!@  4O Ot `P0! `  5!`  5 d b p P 0!p E L5!p E L5!t p  Z!p  Z" " p P 0!d$@' c( 5!d$@' c( 5!@' c( 5 p`P0!3 4 5!3 4 5!3 4 5Rp!4% & H6!% & H6R p!4% <% t6!% <% t6' '4'Rp`P!t 9 "9 ?!t 9 "9 ?!9 "9 ?0!-- (   t dT: : 6! t: : 6! t: : 6! t: : 6! t: : 6! : : 6!: : 6! @? ? !@? ? !t B 0C Z!B 0C Zd T R p!4 PA A 8!PA A 8!t C D !C D 4t d R {{4t d R r `P0!  p` ` 8!t` ga 8!` ga 8!p` ` 8!4H H P!4H H P!H H P!t@d d !@d d b`P0!t O P D9!  t O P D9!t O P D9!O P D9 p`P0!  @L L 9!@L L 9!@L L 9p!  T 4 W W :! dW W :!W W :!T W W :!W W :!W W :P0!d S S :!  t S S :!S S :!S S :!4@^ y^ }!4@^ y^ }42p!4@i oi !  T 4@i oi !T 4@i oi !@i oi !T k l ^! l l ;!l l ;!k l ^4 RP!df g ;!t g +g ;! +g g ;!+g g ;!g +g ;!f g ;bP0!t q eq @<!d t q eq @<!  q q d<!q q d<! q eq @<42P!d@t t <!td@t t <T 4 R p!d v Iv <!d v Iv <!v Iv <!Tx x !x x d 4 R p!Tz { \=!z { \= pP0!d| } =!} 1} =!} 1} =!d| } =rp`P!  4` ߁ =!߁  >!߁  >!` ߁ = T4 p `! T>! T>T 4 R p `!   >! >$ $T$4$rp`! ֋ >! ֋ >r ` P 0!t ?!t ?! t ?  p0!  dT0 ̇ \?! ̇ h?!̇ h?!0 ̇ \?I I Dd p0Pt d 4R0`P!  t 4Ж , ?!t 4Ж , ?`0!T Й ,@!tЙ 2 8@!Й 2 8@!tT Й ,@! Й ,@' '4'rp`P4 rpT 4 r p `!4@ y T!4@ y Trp0!d = @!T = A!= A! = @!T S d!T S d! S dd4r p!T Q A! Q A!T Q A!4p !4p hh4t d R  4 p`P%`P0!t  $B! d!T > d! > d42`!tTп g!tTп g!Tп g d T 4 R pKK4 p!--d ` g!T g! g!d T ` g!` g''d 'T '4 'R!t@ k h!@ k h! 0 #!0 #! 0 #R `P!gg#t 4 th!t 4 th!4 th!4 ! RP!4 @ n h! t d n i!n i! t d 4 @ n h!4 @ n h2 P!00t +d 4 ; i!t d 4 ; i!4 ; iEEd42p,dT4p`!p!4  j!  j( p`P0! t @j! t @j! t @j4 p, & p0P!d% M j! M j!d% M j1 \ p`0P![ k! k![ k+  `P0!t  Xk!  Xk  !!t #!t #!4`  }!`  }Td 4 R p&p`P0%p`P!4# # l!# # l1  p`0P!5 &6 \l!5 &6 \l+  pP0!dP' ' l!P' ' l!T`/ / m!`/ / m!T`/ / m!/ Z1 m1  p`0P!0N N 8m!0N N 8m+  p`P!4> G? |m!> G? |m"p`0p!TpG G m!pG G m!TpG G m!H uI n' p`P0H! W _X ,n!W _X ,n p`P`!4\ @\ ln!\ @\ ln!t^ ^ !^ ^ 4 R`!t g g n!g g nbp`!d Kd n!4 Kd xd o!Kd xd o!T de ye Xo!4 d Kd n!T 4 d Kd n!d Kd n p`Pp!4f f o!4f f o!f f o"Ph!( (#td4_ ` o!_ ` o55t-d (T R!  4 l l @p! l l @p! l l @p d T R p!4 j k p!j k p4 R P!  t d `i i p!`i i p !# # d T 4p q T!p q T#pP0!ds s Lq!s s Lq!# # d T 4v $v T!  d T 4v $v T!v $v T p`0x!p`P0`!4| N| \!4| N| \!  T4| N| \!| N| \774d2p| | cT Z4 d R p4 r p`  !4 r! r!4` Ά r!tΆ / r!Ά / r!4` Ά r42 p4r pP!d@ v $s!v Ɍ 8s!v Ɍ 8s!v Ɍ 8s!@ v $s$ $t$d$4$P!t N Z!t N Zy yqdi4 pP"4 rp8* *d*T*4*pdT4p' '4'p`P! !d !T !4 !Rp4 p`!T m dt! m dt" "t"d"4"!T t! t  tdwT0pT 42 p `!t ж !t ж ! ж p`8!4` Tu!` Tu!4` Tu, 4 p`Ph! !d !T !4!2p T4r p `( `P!&&t4% X u! X u!t !t [[4t d2 !t + !t + !TP v!TP v!P v!t0 [ !t0 [ 4 2 p`!T v!T v! v!t !t !T A v!T A v! A v))t2044d42p114d2p!tP x >\!4p>>\!T4p>>\!T4p>>\p00!  dTp==!p==2`!tp77!477!77!p77!tBB40!BB40# # #t#d#4#2T r`!  t 4 C%D!t 4 C%D! t 4 E1FW!t 4 E1FW42 p  T 4 Rp`iiT 4 R p `!td T4J K0!tdT4J K0dT 4 pB__4 d R p!T QxR!QxR!  t 4 WX!t 4 WX%4p!t0ZZZ#!t0ZZZ#!0ZZZ#Rp!4Z[T!4Z[T  z z b4 T 2 p`' ' 't 'd '4 'R''d 'T'4'2!tefĞ!efĞ T4r p `!@cd!@cdbp0!MMH@T d 0glg8!d T 0glg8!t0l^l!t0l^l))tR0!tЈn!tЈnT 4 R p `b`! i!  t T 4  i!  t T 4 i@@dT2p!4w_w`!w_w`p0P!Tt u!d uu! uu!uu! uu!t u"4pP"dp`!4Pyy(!Pyy(d T r p!  4 ii`! 4 ii`RRtFd20`P!tb!tb!4ׇԡ!ׇԡ!O!O!Or `!0jD!  t 4 jP!jP!t 4 0jD4 R pP!d P{{!d P{{!P{{# #p ` P 0!,pP!d14.!!d0ƜG!0ƜG#/0PP!-d23p!,.t53[!3[!3pT R p`!  4 أ! 4 أ!4l!lm m hd c4 T R p!p!4nX!nX20!t@V!@V!t ! !t d 4R p!  t 4 @!@b`!t T 4 ,!,r0!t d T Pl!td T Plb p`P! 4 R! Rb`P!   !4  !t n! n! !% %d%T%4%rp2p!d$!4d$!d4$!$* *d*T*4 *Rp!40i!0i||Td 4 R pT T Lt Dd ?42Pd T r p!4 \!\d4 p!45!45! !d!T!4!p!  tT @_!d_!td@_!@_T2`!  t4 Z4! Z4*  p`P0 p!  dT4 ! dT4 P!t d 4 +ب!td 4 +ب%d!p!4;$!;$ddd \4 T rp% %d%T%4%p4 pP!  dP  !P  !4!4!u u mT p`0PBpP!  Pd$!  d 4d0!d0!Pd$!  d 4Pd$s s jd ?T2p0ss4dT2 p' 't 'd 'T '4'24 2 p`P2 p!  d4((!((S Sp ` P 0!..4!..4n ne `t [T B `02`0! t T+,! ,r,!,r,! t T+,! t T+,JJ!T6o6!td 4 o66(!o66(!6o64 R `! t T 89|!89|$4p`PHRp`!T @Q@Ь!4 @@!@@!T @Q@Ь!t0=g=>P!4P>>P!  t d DRD!t d DRD!t==z{!4?{{!{{!z{!0$p`P0!d`d!d`d) 0!tdT%ІGH!ІGH' '4'rp`P,,tR0WW4Rp!4T!))d 4T!d 4TOOtR0!4НT!4НTd R p!  T 4 @8!T @8!tH!tH!HR`0!  t T !t T !T4 p!dP!P!dPd 4 r pb42p!d@kd!d@kd!t#!#!t#!#!t#!#!t,#!,#!t#!#!t <#! <#!t#!#!t #!#!t <#! <#!t `|#!`|#!d 4 ! !t #!#2P0!  t d ?L!t d ?L!d 40K!0K2p`!4!T  ! ! p ` P 0!4!4aat041.`wwTd 4 R p!++d$4T!dT4!T!4@Y@!4@Y@!@Y@t T42!d ! DD4T 2 p!d 4,!4,d42 p!t #!d t #!t d #( p`P0 T 4 R p!d }!}!t  !t  DDdt42 T4 r p `& p`0X4R p`P! |! Q!Q!|d,& p!T+4* ! !T+4* * *d/*T-*4,*&p`8!t $b$L!  T 4b$x$\!b$x$\!tT 4 $b$Ld Rp!4 "Z#!4 "Z#!"Z#RpP! d 4 "O"! d 4 "O" pP0p!d%E%<!%E%<!d%E%<yy4d T R p' 't'd'T'4'!4(g(!4(g(!4`..l!`..l!40''!40''!4@--l!@--l$4rp`P8!Td67 y!67 y$4p`PPd T 4 R!t<<!<<T R `!t ;X;!4 X;;!X;;!t 4 ;X;R0(!L` !2 2F*G HITK4P@BaBP!tJaBBd!aBBd!@BaBP%4MHp0T4r p!d D(E! (E:E!(E:E!D(Et42 !dMM4!dMM4!t NN?!NN?R`! t T 4 0T_T!0T_T#p`0 !t0YVY#!t0YVY#!tW%W#!tW%W#!t0ZVZ#!t0ZVZ#!tYY#!tYY#!t]]#!t]]#!tpaa#!tpaa#!t@`f`#!t@`f`#!tb&b#!tb&b#!tbb#!tbb#!t__#!t__#!t]%]#!t]%]#!t``#!t``#!t cFc#!t cFc#!dfhd!fhdT 4 R p!d0vv!0vvh h c [ VT2p`0t d T R!4zb{l!zb{l! !d !T !4 !Rp p`Pp!4|}!|}+  p`0P!T V!V4(&pT 4 R p `!t0d!t0d!0d 4 p`P$+p`P0@!2P!*1!!PT 4 R p `! ! ! ( p`P0`[[t 2P0!d |! |!4\p!\p!4\p!04 2 pP! dL!LT 4 2 `!tk@!k@!40@!0@^^4d RpT 2 `!  t 4!!t 4!4!!4 d T 2 p!4 4!4!4 4T 2`! t40S!t40S!0S4!d E!E$ $T$4$Rp`!  !  `P0h!j@!tjT!jT!j@ p`Ph!Թ!Թ!4"'!Թ!43l!3l$$4$rp`!Tz !z d T42!tͻX!ͻX `P0h!t`!`B p`P0! k!k!k!k%4`!tc$!c$,  p`P0, E p`P0 Rp0!  T p! d !!T p!p%4E@p !d4!d4!4%4D@p !dCt!t!4`!4`334d2pBB  b t dT42  t T 4220t d 4R{^^ud%d42 p  4 2pP@P20}`2P  4 2P  4 2p X{c($L^} 0~ P `^ ^ 0_ P   b b ` o P p p P P 0 @ 0` & 0- 3 | @' j 0 @a B C ( ( ) 0 * *  * p- PY C pK L R 0. j . P/ p0 Y `D 0M = > R 1 @ P 0 ` R R p 2 ghi`  @ ``0`l"@@   #po` 0f P P`;p ` @ ! p" 0`p  PpPP0ЮХ00`0QNcR| }V Z0UPW}@~@  @ 6 ;$ @@Z0  p, G00 0 P @ `  PN > B B F 0 1 2 2 F H 0I 7 8 @; 3 4 p5 5 J L L Ь P ` 0 p P ^ ^ ^ 0^  pZ Z Z j j Pj pj j j j j Z ` P a a b b ` Ф t P R p 0p@*0'''p 0    @* ` p*  0 P   P% p& P0K P @0  0@@ "# U`446U6G07p7#V7 8P9X9H::*;;P<=[>PH??+@ AApC\DHE`E0Pp 0Pp0Pp p  @ P ``@@` P 66668`00 pp   0 ` p @`p  0Ж 0 @`Pp 0``)@4 `   0   p`P0 0 P  0 P p  @ `   }0  P@ p` 00000P| }p PPТ @ ` {|| |0|@| `p`- P0`*0   @`ЉpШ` _ } 0 AC@M@P`V d p d d e e @e `e e e f ` @`XXX  @`` `p 0 P 0  0 p  ` @@ d`jwДpiPc0l~0`P__P@ d0@ PFpF_bЋЍ f p f 0 `g g g g g @ h h ` pX@pY@Y@ ` @`  @ `  0 pp 0 P p `  p P p = ` @   ` P P  p P @ `  P p  P 0 P p00 p  0@.) :pD6> @% p6, t pA 0+@/P2.P . 55`h p 0 @ p@`!#p 0 pP `  `@2 Pp000P@0pEC^PEppqh `i Pp* @2   p `  @p   ` @d f 0@  p 0   @g` P Wbb@bceпpc0h  001P1 2P`@23 u  0u Pu `EE & 59= C[0\@J]PLL _P_@cpeP jk0ll mopd 0} E g P} E0 < g `d @ P К  P 0`PДp    `pP0^`@ $PHp P{ P SSVV0]\\^ lmnoz|~p`\pZ[PZ[p[P[ [0\Z[ZP\[[ZЉ P^p]td0p  0 @ ` 0 0 p0PPYYZ`YX Yi `f h @f i f @i f @ P p 0  pp`Pоp P@`п0OpOP0PpPЈ0pr  ^ `@pl`Me ] l 0 P 0 @NL@0OLpM@LLM `0` `   NPMP & ' @P3`* ! PPГ   @ < c @RpRTPR0I @0 P ` d ^ P H@>P`  #`c p ` @^ c Ra T @0{ ] @pI0 Dp} A p)0{ @6 0 @ 4P" b T09P 0c  `%@6` " ` 0&@0a ap^ P  Пз c I@i pP %p_ ^ ` 0@^ a b 0 Pp_ J@ 0 `* ] @: P'7 b @@?p< @i &_ Г  C0c  _ ` _ ! 0i c pQQ_PGp?0` h A< POpCO 0 pMNO` e @` STg TP`T@P0 p @' @P`0  . . P @ P0p0Ў`P`P` @ `ЫE0@$  _ @``P p`p= ~= P00@P0 k 2 @ P @ 0B @  rvv 0 0 p`Шj l  0 p} ` d p @Ш  k l p@`00o . = = ppsН@0`* PP@ `ic PF- _(PM _ p0 @ 0 Y@0 ` F5@g @a `KPa /`Jp@ @p, 0Z 1 *01JP< `I^ P `@0 B  `п@ /p\ @`0) Ip@GI> Y0'H X ` ` 0H`.@[ `1 F `J @2 0к@ K0@0@Yp  J`5` @ X@J@G  4 G`* `4Pj0p`I0Zp@ з@  > 0  { p3@Z U_ 4P   Ѓ TPH@-@00 p PY.F` P Р@@_ J @c @pJ PG нp y ,U0^ F 5` FЮ)P` %@  ^ 08Kp `` K`; d 0`p pJ&c PJH0 4P_ p 8 P3`K@-З # @a ` Pc 0P p0Zp`] 0   0! pTP   \ 306pL pJ6_ `C @50pCp>  `p 4 8  0 @Na 8 5A0@K`; P8` H` ``Y* PGKp5 IG I0F [  `L  H  @40 5^ `8Lp B b `%` HIP1]  LpP7[ 5@P5JG; ) Z`\  Z`[ F # )@FI  p] Lp%G0 a P0g@`I` &@L$ ` @IY0 P6`H %8 P @ 2G] @] @)K P0 LP 5`) `^ ,@c( 50` `F I6А@6 a @# | P=5`h p& `G`` 0P @pp@`*   @ p DE `R & '% P pb j h @b `b f j   " , @#  p ` oj &0 Z ` Z @&`j @p @.0pPkЪ ppp@0P  0@ PP @F  b0o @ &p` pP Le @i @} @d o 0x@9B 5P! p * p` Џ `PA p?o `m P `8E U`p> >?  s ~?@k pB N@ {J0 5; pU  `@ o 00p: 5 p @M Bp p5c(  ` P_ 0.pG 0 0B ! @?@ `P1P 0I`  0p # P{АP8 0 @p8@@! @ @7 p k z@? m I 1  4` 5y`* ` ` E P P=< p 505  p 0P5p% `E Gp <P N@U7005`;p n p? C 0 p &<p 5 @ : ip @J} 0 0 Лp7L 0.9 08P p1 &  pa j A @ PyH    @f 00IN ?@NaPB } ML`p?`8@Щp09A @A 00@1120002`01s s s 0s @s Ps `s s ps s s s s s s s t t z@ `2 p, 0 % @ pi p'`* p2 `i 0P  p `-  2`A[0 [ \ `[ P w @P 0 @ /0p P  W0= rgPN`TY `iX^rp?FcP i0?wPUPWpU0<`e~v[R0[0brs\@Y0] @ pVTN<0F@fSUPXY=@`ps@T0P>ZbpT@PrPmRVE CpT s p T DS U @pA0TUC0F0z0` @ R 00O` @ x = @X@ 0j `Ы0v M0 b  0ZT] `# \ppa PO@{ Wб`a _p` rP ` `i Я h } `Н P UW }   p sZ QP@h O0_0W#  Y`* .  a P @eP v p   o^@ r0Y` p `X pP @ Х@ P v 0]Pm Ь ]Pz , !  `/  x P  U  P^ `0oYШX`! fPpwp`P0  { j $ P`* 0X  `} _mpVY  w` { X   `* ^YW  0 pR`D0_d- 0` Y@@  P`` P @}  i r`Pt Rp ! qp 0v  pa@y 0   ^ j `* `*  `i <0?N`m0\P 0 ZЮ00pX`_  0r0w P @0p Z  _Np c 0Tj PPmW  P pql0WP 0bP i 0@ps Ъ Wpi Ph "P  z p@`e e -    R ) p \ i ^} @_` XPp{ n@Xp0 @? 55 Q h@fPq0_avei`\t0s@`Pp00p q  @ Pm Б ;P 0i p @ 080 В I  99:8;@=p>:`:cЅP@@~PP^ plo4  @Pox0kppP0y{4 0 @P_ ` @ P` ``p: P;`9 @0ЁЃp=<sst < =tp  P 0@ P s  L 0 00Pj py M P  sP0 p` Вp S  98^0 ?p$ 8p@ P 08` 0} {7{M{d{w{{{{{{{{{||&|:|N|]|j|v|||||||}'}?}W}k}}}}}}}}}~~+~D~_~y~~~~~~,CWi|"0CTcsЀ 9Md|ρ0HauÂԂ*AQbsăۃ*:Kbńڄ$2BQ`m{˅م.<JYwÆ܆ 7IYj}·';Ia҈ ,=K\nЉ2CTg{̊ߊ $1>Pcuڋ 0G\rȌӌތ/CUeyʍ %.:FVi|ŎՎ(1>TezΏ %5EMYftʐՐ"5@LT_lu~đϑّ .>L_l}ɒڒ';Rk|Փ+>IU`lw˔۔#7G[r•ו +;Rctۖ  *9BO]dv~Зח,CZqƘۘ "->IZjʙؙ1GR^izʚښ +4@Odlzƛқٛ %-5BO\o{͜ޜ/<G`w՝$7Ke͞5Loş$Dh͠ ,Msʡ #<WtТ4R`mƣӣ$>KTboФ "7H^o}¥إ /Kgʦ%4Kiܧ,HSft̨ڨ0@Woͩ 5Nbt٪$6FZnի 3I[qҬ(>Yoӭ(;Rk~ʮܮ$@Uhzӯ;TgͰ,Kẖ"3G[i|в'9H]mij >UxӴ %3DZo˵ܵ+9I[kͶ&3AN[hsķз%1E[nƸ׸+EUeuùٹ$6K^rʺ޺ !-:FR`ktϻ߻ "9IXapyм޼!2@Mbku~ͽ߽ /@OfqǾݾ(BSm̿.>Wi+>Tj} 2E\t.Qg %<Tk *<Tk'7Lav"4HUcp} 8Mbu(Lu&6GRiv)9HYk #;Rn";Kl 5Qgw0H_r.D[s *Fj )8HYix ";Sj*=Xiw %;Rg} %Gdr -E\w.D\p2H]u %6EYr,HYq/DZo~1Maz%@Zs/FVaq+>P[k~"1BSgw,AWiw%2APfx&C^o,FYq-D[s$:Odt 0EWi*=Phz&?Zq 1H^u$7EScx'A]m~#4GXhx#4DTdt1F[q "7LZjx!3DUgw&3BO\dlx-:JWdv~1BTev $9L`ev,>Qao~&9J\n~ (:J[cgqz*?KYhv/J^p1DYl} ,<KYfv  ,;FR^z.Qn-<Ui.=M_o$@a|*@Qg{*<Pfz!9Ti1E_w"6FUiu2Kbt ( 9 K \ y        ( 7 K Z m          % 8 L \ m            , 8 E V e u            5 M ` q ~        0FYy'9Qcu)@dw $<Nd,E\p-E\q#<Sk-A\p5Pi| -=Rey'7So~1IU_w'4ETe}%<K]k&8Odz &<Vj%;Rk 4BVo  ) 7 T ^ l x        !!!-!C!X!i!{!!!!!!!""&"3"L"c"{""""""""##-#;#J#^#p#######$$3$P$n$$$$$$$$$$$%%$%.%@%U%a%k%%%%%%%%%% &&&)&5&?&O&^&r&&&&&&&&''(':'M'^'o'''''''''(( (((7(G(b(((((( )!)6)S)u))))))**%*9*L*_*v*********++7+H+\+i+z++++++++++++,,,#,/,@,N,U,b,n,|,,,,,,,,,,,--'-2-C-S-e-p-{--------..%.8.Q.e.|.........///4/E/X/a/k/{///////0(0B0Z0l0000000 1&1:1X1m111111122/2B2[2s2222222223323M3b3u3333333344-4B4U4m4444444 5555K5r555555686P6h6t66666666 7#7<7Q7d7x77777778828M8h8888889949K9`9t9999999:0:G:\:p::::::::;;3;A;M;Z;e;u;;;;;;;<<'</<A<U<h<}<<<<<<<<=%=;=J=^=q========>4>I>^>t>>>>>>>> ??'?5?E?S?b?l?v???????? @&@5@J@^@r@@@@@@@@AA&A7ALA]AqAAAAAAA B!B8BIBaBpBBBBBBBB CC/C>CMC\ClC|CCCCCCCD D=DPDdD}DDDDDD EE.E@ETEhEzEEEEEEEEFF,FBFSFiFvFFFFFFFFGG2GOGfG{GGGGGGGG H#H;HRHjHHHHHHHH II1IMIeIIIIIIIJJ$J?J\JsJJJJJJJJK-KKK_KtKKKKKKLL2LMLhLvLLLLLLLMM5MOM^MqM~MMMMMMMMN:NUNnN}NNNNNNNN O O1OFOXOoOOOOOOO PP/PAPTPnPPPPPPQQ#Q:QHQ\QnQQQQQQR RR(R:RLRhR|RRRRRRRSS3SDSVSkSSSSSSTT9TWTeTqT~TTTTTU%UEU_UyUUUUUV V@VcVwVVVVVV W(WAWZWuWWWWWWX(X;XQXaXwXXXXXXYY,YJYaYvYYYYYYYZZ*Z9ZPZ^ZjZwZZZZZ[[6[V[r[[[[[[ \'\C\]\{\\\\\]-]H]d]]]]]]]]^ ^2^B^P^a^q^^^^^^^^^ __'_0_@___t_~_______`7`V`s```````` a!a1aLabayaaaaaaab*b2bBbRbjb~bbbbbbbc1cRchcccccccdd/dAdRdgdyddddddddee0eGebe{eeeeeeeef f8fPfcf{ffffffffg+gFg[gdg~gggggg h!hyLyXyhywyyyyyyyyy zz*z=zKzXzjz{zzzzzzzzz{"{2{C{P{]{j{v{{{{{{{|-|;|R|f|w||||||||}}+}<}P}i}}}}}}}}~~'~8~K~Y~g~~~~~~~~ #;Ofr #8IXk}ɀڀ#4EUkс+=N^q҂&:IYj{ƒ׃ .;KVfzńׄ+@Qg˅1Ld̆ۆ (7ETgyćՇ 1@Seo{ˈֈ1AUhwщ"2EYg{Ɋي-=Qk|Njً.;PeoxҌ $-=HR^jxÍύ,BOYgnv͎Վ܎';L^ b   ! XY #= U<$ E   s" M   A>a RwM y k < ; QEg{ b'  , 3~ x*W W } \  ^   ` K34[56   7+ E0 q &  ! 3 D > ^ )  _ ?  >O J"#z + $% p   & @ i '()*+,-a 2$iLW3 q56) y p 789:;<>?@ABD=%&FGHIJK 49MN8N O PQRYS SWQUTUVWXYZ [\^_ac>d'efghijkM l x  R mnn f [    % DX D z Toopq ighj rs^uwv! xyz{B|}m~} , {tF  j  ` l/ N < k  t " u8-  2          {0ra}gsxwyz3nt~uct1o4}m2q|pfhsdvxjkHGwxyz_y z { }  u n  x p v r | m t w  4 qoOD?/>('# &+ ll  "*,-.)%s q p r >  n& i oA$! qr mn k o  ps       ! '_b()*+~a{LRPc]^`eZ[q  X r   v\5467Nffb_d  h 9 * b=   q ; m  ur|v#~ B o VW (J W yQ| g  + * L< 4z n  P L  d  ~5 D     ( ]  ; %I N - e G r P aY E s p K\ O 7 ) #  k  2 Ri   2 )$ g { OKv B n S C  S a : M   ' ^ c 6+(9H @ F 8 `     0 g dZ e =I L -; | H     s :  d `o x Y b  8 d h p  7 } 8( e 3 h   r \9  @ j|&3c &/_ 20:^ :L< $;=p!) b _  \ w $ / m c M   l E 7*1Y q)T+!%&ZMpBy(QuUi Q !}J7QJh -'#{.CBVRO8 n B [u.V]tk_& IMn:y 'yT !#$n z S  R  -  y /   n%&'()* + ,-./ 0 123 456789:;<=>?@ BCNDEFGHIIMKFJKL F   2! 5 D mt    2N A j  0 ~ T  I    S Q ?  / RSTUVWXY    ZP [lj\k ]hi^_ LOz PQRS`bcdeqfghijkMlm  X =  U   \ + * W 6 ] H u ] " * f _ P C < E J   X 8 Pdhcimlm   3 d & ; 1  . 1 6 o V  [  ' 2 P h V R } l   y U ( , 9   v , U [ % RSk C H  s B   CA?  { y  w unopqrstuvwxyz {|}~b/!| 'O   bM4:^t.owqQ _ \uD9g    7  6  o  Z F  \ N { # *0G " x '    /  A "5[kq01rfsaetuviW 2j4h`$ " 'M  :  @ lZ  Xa pv   YY  p;:6 Le76Zo      5   EGCJDHL . E O T 0Z cl^g@]X Y 3l 2/4 .,*0?GaxSz)c~Xs]:hl1PjClps_rY)Unf6F=m AW1+i->kAz%7:h=Er@Z<v%^<  H K 5  G  ( X 5  . K ! -  s L c u  C e  T L `  ; nm4f,` gB o m } nh r   U] V W   c     V aV ";b .    7. Nj !"#$%&'()*+,-./0123456r 789:yw;<=>?@ABCDEF: GHI~ | JK L MNOPQv RSt)Fz8A TB UXV 9 VRWb TOX> YZ [P\]^_5`a bcfdefghitQ j/ k lm e K n  0    opqP5rst[u # `  = v wCv  1 Jl W]^UT S F \ U  ![xzST XY_Z {"V| }~d e [c O\j "   i * w 4 G  N u<8  eZ  ? ] % Z w   i p  3  "#$%& V I  w. Bs J G f 4 1 Kg [t w { C xs =;}iN?A ,8  X` z Rq  t |  T  S 2 O J W & 8 m /zv v~#  g 9-1aIOd~*g|`BqT% ./0u x 1D2 45|678dH9df : ;<:< go=J>@>?@A9B"  { F t[ F w $ k 7 @  CDGE  D Q y I  xt FGHIJK LMNOPQz{}!  RSTUVWe =@,0$oX;#XY]ZS9[\]^_`Qabcdefghijklm, 6nopqrstuvwxyz{|}~' $ } wA  >c    j uvtLIBEAY32.dllACCESS_DESCRIPTION_freeACCESS_DESCRIPTION_itACCESS_DESCRIPTION_newAES_bi_ige_encryptAES_cbc_encryptAES_cfb128_encryptAES_cfb1_encryptAES_cfb8_encryptAES_ctr128_encryptAES_decryptAES_ecb_encryptAES_encryptAES_ige_encryptAES_ofb128_encryptAES_optionsAES_set_decrypt_keyAES_set_encrypt_keyAES_unwrap_keyAES_wrap_keyASN1_ANY_itASN1_BIT_STRING_checkASN1_BIT_STRING_freeASN1_BIT_STRING_get_bitASN1_BIT_STRING_itASN1_BIT_STRING_name_printASN1_BIT_STRING_newASN1_BIT_STRING_num_ascASN1_BIT_STRING_setASN1_BIT_STRING_set_ascASN1_BIT_STRING_set_bitASN1_BMPSTRING_freeASN1_BMPSTRING_itASN1_BMPSTRING_newASN1_BOOLEAN_itASN1_ENUMERATED_freeASN1_ENUMERATED_getASN1_ENUMERATED_itASN1_ENUMERATED_newASN1_ENUMERATED_setASN1_ENUMERATED_to_BNASN1_FBOOLEAN_itASN1_GENERALIZEDTIME_adjASN1_GENERALIZEDTIME_checkASN1_GENERALIZEDTIME_freeASN1_GENERALIZEDTIME_itASN1_GENERALIZEDTIME_newASN1_GENERALIZEDTIME_printASN1_GENERALIZEDTIME_setASN1_GENERALIZEDTIME_set_stringASN1_GENERALSTRING_freeASN1_GENERALSTRING_itASN1_GENERALSTRING_newASN1_IA5STRING_freeASN1_IA5STRING_itASN1_IA5STRING_newASN1_INTEGER_cmpASN1_INTEGER_dupASN1_INTEGER_freeASN1_INTEGER_getASN1_INTEGER_itASN1_INTEGER_newASN1_INTEGER_setASN1_INTEGER_to_BNASN1_NULL_freeASN1_NULL_itASN1_NULL_newASN1_OBJECT_createASN1_OBJECT_freeASN1_OBJECT_itASN1_OBJECT_newASN1_OCTET_STRING_NDEF_itASN1_OCTET_STRING_cmpASN1_OCTET_STRING_dupASN1_OCTET_STRING_freeASN1_OCTET_STRING_itASN1_OCTET_STRING_newASN1_OCTET_STRING_setASN1_PCTX_freeASN1_PCTX_get_cert_flagsASN1_PCTX_get_flagsASN1_PCTX_get_nm_flagsASN1_PCTX_get_oid_flagsASN1_PCTX_get_str_flagsASN1_PCTX_newASN1_PCTX_set_cert_flagsASN1_PCTX_set_flagsASN1_PCTX_set_nm_flagsASN1_PCTX_set_oid_flagsASN1_PCTX_set_str_flagsASN1_PRINTABLESTRING_freeASN1_PRINTABLESTRING_itASN1_PRINTABLESTRING_newASN1_PRINTABLE_freeASN1_PRINTABLE_itASN1_PRINTABLE_newASN1_PRINTABLE_typeASN1_SEQUENCE_ANY_itASN1_SEQUENCE_itASN1_SET_ANY_itASN1_STRING_TABLE_addASN1_STRING_TABLE_cleanupASN1_STRING_TABLE_getASN1_STRING_clear_freeASN1_STRING_cmpASN1_STRING_copyASN1_STRING_dataASN1_STRING_dupASN1_STRING_freeASN1_STRING_get_default_maskASN1_STRING_lengthASN1_STRING_length_setASN1_STRING_newASN1_STRING_printASN1_STRING_print_exASN1_STRING_print_ex_fpASN1_STRING_setASN1_STRING_set0ASN1_STRING_set_by_NIDASN1_STRING_set_default_maskASN1_STRING_set_default_mask_ascASN1_STRING_to_UTF8ASN1_STRING_typeASN1_STRING_type_newASN1_T61STRING_freeASN1_T61STRING_itASN1_T61STRING_newASN1_TBOOLEAN_itASN1_TIME_adjASN1_TIME_checkASN1_TIME_diffASN1_TIME_freeASN1_TIME_itASN1_TIME_newASN1_TIME_printASN1_TIME_setASN1_TIME_set_stringASN1_TIME_to_generalizedtimeASN1_TYPE_cmpASN1_TYPE_freeASN1_TYPE_getASN1_TYPE_get_int_octetstringASN1_TYPE_get_octetstringASN1_TYPE_newASN1_TYPE_setASN1_TYPE_set1ASN1_TYPE_set_int_octetstringASN1_TYPE_set_octetstringASN1_UNIVERSALSTRING_freeASN1_UNIVERSALSTRING_itASN1_UNIVERSALSTRING_newASN1_UNIVERSALSTRING_to_stringASN1_UTCTIME_adjASN1_UTCTIME_checkASN1_UTCTIME_cmp_time_tASN1_UTCTIME_freeASN1_UTCTIME_itASN1_UTCTIME_newASN1_UTCTIME_printASN1_UTCTIME_setASN1_UTCTIME_set_stringASN1_UTF8STRING_freeASN1_UTF8STRING_itASN1_UTF8STRING_newASN1_VISIBLESTRING_freeASN1_VISIBLESTRING_itASN1_VISIBLESTRING_newASN1_add_oid_moduleASN1_bn_printASN1_check_infinite_endASN1_const_check_infinite_endASN1_d2i_bioASN1_d2i_fpASN1_digestASN1_dupASN1_generate_nconfASN1_generate_v3ASN1_get_objectASN1_i2d_bioASN1_i2d_fpASN1_item_d2iASN1_item_d2i_bioASN1_item_d2i_fpASN1_item_digestASN1_item_dupASN1_item_ex_d2iASN1_item_ex_freeASN1_item_ex_i2dASN1_item_ex_newASN1_item_freeASN1_item_i2dASN1_item_i2d_bioASN1_item_i2d_fpASN1_item_ndef_i2dASN1_item_newASN1_item_packASN1_item_printASN1_item_signASN1_item_sign_ctxASN1_item_unpackASN1_item_verifyASN1_mbstring_copyASN1_mbstring_ncopyASN1_object_sizeASN1_pack_stringASN1_parseASN1_parse_dumpASN1_primitive_freeASN1_primitive_newASN1_put_eocASN1_put_objectASN1_seq_packASN1_seq_unpackASN1_signASN1_tag2bitASN1_tag2strASN1_template_d2iASN1_template_freeASN1_template_i2dASN1_template_newASN1_unpack_stringASN1_verifyAUTHORITY_INFO_ACCESS_freeAUTHORITY_INFO_ACCESS_itAUTHORITY_INFO_ACCESS_newAUTHORITY_KEYID_freeAUTHORITY_KEYID_itAUTHORITY_KEYID_newBASIC_CONSTRAINTS_freeBASIC_CONSTRAINTS_itBASIC_CONSTRAINTS_newBF_cbc_encryptBF_cfb64_encryptBF_decryptBF_ecb_encryptBF_encryptBF_ofb64_encryptBF_optionsBF_set_keyBIGNUM_itBIO_acceptBIO_asn1_get_prefixBIO_asn1_get_suffixBIO_asn1_set_prefixBIO_asn1_set_suffixBIO_callback_ctrlBIO_clear_flagsBIO_copy_next_retryBIO_ctrlBIO_ctrl_get_read_requestBIO_ctrl_get_write_guaranteeBIO_ctrl_pendingBIO_ctrl_reset_read_requestBIO_ctrl_wpendingBIO_debug_callbackBIO_dgram_non_fatal_errorBIO_dumpBIO_dump_cbBIO_dump_fpBIO_dump_indentBIO_dump_indent_cbBIO_dump_indent_fpBIO_dup_chainBIO_f_asn1BIO_f_base64BIO_f_bufferBIO_f_cipherBIO_f_mdBIO_f_nbio_testBIO_f_nullBIO_f_reliableBIO_fd_non_fatal_errorBIO_fd_should_retryBIO_find_typeBIO_freeBIO_free_allBIO_get_accept_socketBIO_get_callbackBIO_get_callback_argBIO_get_ex_dataBIO_get_ex_new_indexBIO_get_host_ipBIO_get_portBIO_get_retry_BIOBIO_get_retry_reasonBIO_gethostbynameBIO_getsBIO_hex_stringBIO_indentBIO_int_ctrlBIO_method_nameBIO_method_typeBIO_newBIO_new_CMSBIO_new_NDEFBIO_new_PKCS7BIO_new_acceptBIO_new_bio_pairBIO_new_connectBIO_new_dgramBIO_new_fdBIO_new_fileBIO_new_fpBIO_new_mem_bufBIO_new_socketBIO_nextBIO_nreadBIO_nread0BIO_number_readBIO_number_writtenBIO_nwriteBIO_nwrite0BIO_popBIO_printfBIO_ptr_ctrlBIO_pushBIO_putsBIO_readBIO_s_acceptBIO_s_bioBIO_s_connectBIO_s_datagramBIO_s_fdBIO_s_fileBIO_s_memBIO_s_nullBIO_s_socketBIO_setBIO_set_callbackBIO_set_callback_argBIO_set_cipherBIO_set_ex_dataBIO_set_flagsBIO_set_tcp_ndelayBIO_snprintfBIO_sock_cleanupBIO_sock_errorBIO_sock_initBIO_sock_non_fatal_errorBIO_sock_should_retryBIO_socket_ioctlBIO_socket_nbioBIO_test_flagsBIO_vfreeBIO_vprintfBIO_vsnprintfBIO_writeBN_BLINDING_convertBN_BLINDING_convert_exBN_BLINDING_create_paramBN_BLINDING_freeBN_BLINDING_get_flagsBN_BLINDING_get_thread_idBN_BLINDING_invertBN_BLINDING_invert_exBN_BLINDING_newBN_BLINDING_set_flagsBN_BLINDING_set_thread_idBN_BLINDING_thread_idBN_BLINDING_updateBN_CTX_endBN_CTX_freeBN_CTX_getBN_CTX_initBN_CTX_newBN_CTX_startBN_GENCB_callBN_GF2m_addBN_GF2m_arr2polyBN_GF2m_modBN_GF2m_mod_arrBN_GF2m_mod_divBN_GF2m_mod_div_arrBN_GF2m_mod_expBN_GF2m_mod_exp_arrBN_GF2m_mod_invBN_GF2m_mod_inv_arrBN_GF2m_mod_mulBN_GF2m_mod_mul_arrBN_GF2m_mod_solve_quadBN_GF2m_mod_solve_quad_arrBN_GF2m_mod_sqrBN_GF2m_mod_sqr_arrBN_GF2m_mod_sqrtBN_GF2m_mod_sqrt_arrBN_GF2m_poly2arrBN_MONT_CTX_copyBN_MONT_CTX_freeBN_MONT_CTX_initBN_MONT_CTX_newBN_MONT_CTX_setBN_MONT_CTX_set_lockedBN_RECP_CTX_freeBN_RECP_CTX_initBN_RECP_CTX_newBN_RECP_CTX_setBN_X931_derive_prime_exBN_X931_generate_XpqBN_X931_generate_prime_exBN_addBN_add_wordBN_asc2bnBN_bin2bnBN_bn2binBN_bn2decBN_bn2hexBN_bn2mpiBN_bntest_randBN_clearBN_clear_bitBN_clear_freeBN_cmpBN_consttime_swapBN_copyBN_dec2bnBN_divBN_div_recpBN_div_wordBN_dupBN_expBN_freeBN_from_montgomeryBN_gcdBN_generate_primeBN_generate_prime_exBN_get0_nist_prime_192BN_get0_nist_prime_224BN_get0_nist_prime_256BN_get0_nist_prime_384BN_get0_nist_prime_521BN_get_paramsBN_get_wordBN_hex2bnBN_initBN_is_bit_setBN_is_primeBN_is_prime_exBN_is_prime_fasttestBN_is_prime_fasttest_exBN_kroneckerBN_lshiftBN_lshift1BN_mask_bitsBN_mod_addBN_mod_add_quickBN_mod_expBN_mod_exp2_montBN_mod_exp_montBN_mod_exp_mont_consttimeBN_mod_exp_mont_wordBN_mod_exp_recpBN_mod_exp_simpleBN_mod_inverseBN_mod_lshiftBN_mod_lshift1BN_mod_lshift1_quickBN_mod_lshift_quickBN_mod_mulBN_mod_mul_montgomeryBN_mod_mul_reciprocalBN_mod_sqrBN_mod_sqrtBN_mod_subBN_mod_sub_quickBN_mod_wordBN_mpi2bnBN_mulBN_mul_wordBN_newBN_nist_mod_192BN_nist_mod_224BN_nist_mod_256BN_nist_mod_384BN_nist_mod_521BN_nnmodBN_num_bitsBN_num_bits_wordBN_optionsBN_printBN_print_fpBN_pseudo_randBN_pseudo_rand_rangeBN_randBN_rand_rangeBN_reciprocalBN_rshiftBN_rshift1BN_set_bitBN_set_negativeBN_set_paramsBN_set_wordBN_sqrBN_subBN_sub_wordBN_swapBN_to_ASN1_ENUMERATEDBN_to_ASN1_INTEGERBN_uaddBN_ucmpBN_usubBN_value_oneBUF_MEM_freeBUF_MEM_growBUF_MEM_grow_cleanBUF_MEM_newBUF_memdupBUF_reverseBUF_strdupBUF_strlcatBUF_strlcpyBUF_strndupBUF_strnlenCAST_cbc_encryptCAST_cfb64_encryptCAST_decryptCAST_ecb_encryptCAST_encryptCAST_ofb64_encryptCAST_set_keyCBIGNUM_itCERTIFICATEPOLICIES_freeCERTIFICATEPOLICIES_itCERTIFICATEPOLICIES_newCMAC_CTX_cleanupCMAC_CTX_copyCMAC_CTX_freeCMAC_CTX_get0_cipher_ctxCMAC_CTX_newCMAC_FinalCMAC_InitCMAC_UpdateCMAC_resumeCMS_ContentInfo_freeCMS_ContentInfo_itCMS_ContentInfo_newCMS_ContentInfo_print_ctxCMS_EncryptedData_decryptCMS_EncryptedData_encryptCMS_EncryptedData_set1_keyCMS_EnvelopedData_createCMS_ReceiptRequest_create0CMS_ReceiptRequest_freeCMS_ReceiptRequest_get0_valuesCMS_ReceiptRequest_itCMS_ReceiptRequest_newCMS_RecipientEncryptedKey_cert_cmpCMS_RecipientEncryptedKey_get0_idCMS_RecipientInfo_decryptCMS_RecipientInfo_encryptCMS_RecipientInfo_get0_pkey_ctxCMS_RecipientInfo_kari_decryptCMS_RecipientInfo_kari_get0_algCMS_RecipientInfo_kari_get0_ctxCMS_RecipientInfo_kari_get0_orig_idCMS_RecipientInfo_kari_get0_reksCMS_RecipientInfo_kari_orig_id_cmpCMS_RecipientInfo_kari_set0_pkeyCMS_RecipientInfo_kekri_get0_idCMS_RecipientInfo_kekri_id_cmpCMS_RecipientInfo_ktri_cert_cmpCMS_RecipientInfo_ktri_get0_algsCMS_RecipientInfo_ktri_get0_signer_idCMS_RecipientInfo_set0_keyCMS_RecipientInfo_set0_passwordCMS_RecipientInfo_set0_pkeyCMS_RecipientInfo_typeCMS_SharedInfo_encodeCMS_SignedData_initCMS_SignerInfo_cert_cmpCMS_SignerInfo_get0_algsCMS_SignerInfo_get0_md_ctxCMS_SignerInfo_get0_pkey_ctxCMS_SignerInfo_get0_signatureCMS_SignerInfo_get0_signer_idCMS_SignerInfo_set1_signer_certCMS_SignerInfo_signCMS_SignerInfo_verifyCMS_SignerInfo_verify_contentCMS_add0_CertificateChoicesCMS_add0_RevocationInfoChoiceCMS_add0_certCMS_add0_crlCMS_add0_recipient_keyCMS_add0_recipient_passwordCMS_add1_ReceiptRequestCMS_add1_certCMS_add1_crlCMS_add1_recipient_certCMS_add1_signerCMS_add_simple_smimecapCMS_add_smimecapCMS_add_standard_smimecapCMS_compressCMS_dataCMS_dataFinalCMS_dataInitCMS_data_createCMS_decryptCMS_decrypt_set1_keyCMS_decrypt_set1_passwordCMS_decrypt_set1_pkeyCMS_digest_createCMS_digest_verifyCMS_encryptCMS_finalCMS_get0_RecipientInfosCMS_get0_SignerInfosCMS_get0_contentCMS_get0_eContentTypeCMS_get0_signersCMS_get0_typeCMS_get1_ReceiptRequestCMS_get1_certsCMS_get1_crlsCMS_is_detachedCMS_set1_eContentTypeCMS_set1_signers_certsCMS_set_detachedCMS_signCMS_sign_receiptCMS_signed_add1_attrCMS_signed_add1_attr_by_NIDCMS_signed_add1_attr_by_OBJCMS_signed_add1_attr_by_txtCMS_signed_delete_attrCMS_signed_get0_data_by_OBJCMS_signed_get_attrCMS_signed_get_attr_by_NIDCMS_signed_get_attr_by_OBJCMS_signed_get_attr_countCMS_streamCMS_uncompressCMS_unsigned_add1_attrCMS_unsigned_add1_attr_by_NIDCMS_unsigned_add1_attr_by_OBJCMS_unsigned_add1_attr_by_txtCMS_unsigned_delete_attrCMS_unsigned_get0_data_by_OBJCMS_unsigned_get_attrCMS_unsigned_get_attr_by_NIDCMS_unsigned_get_attr_by_OBJCMS_unsigned_get_attr_countCMS_verifyCMS_verify_receiptCOMP_CTX_freeCOMP_CTX_newCOMP_compress_blockCOMP_expand_blockCOMP_rleCOMP_zlibCOMP_zlib_cleanupCONF_dump_bioCONF_dump_fpCONF_freeCONF_get1_default_config_fileCONF_get_numberCONF_get_sectionCONF_get_stringCONF_imodule_get_flagsCONF_imodule_get_moduleCONF_imodule_get_nameCONF_imodule_get_usr_dataCONF_imodule_get_valueCONF_imodule_set_flagsCONF_imodule_set_usr_dataCONF_loadCONF_load_bioCONF_load_fpCONF_module_addCONF_module_get_usr_dataCONF_module_set_usr_dataCONF_modules_finishCONF_modules_freeCONF_modules_loadCONF_modules_load_fileCONF_modules_unloadCONF_parse_listCONF_set_default_methodCONF_set_nconfCRL_DIST_POINTS_freeCRL_DIST_POINTS_itCRL_DIST_POINTS_newCRYPTO_128_unwrapCRYPTO_128_wrapCRYPTO_THREADID_cmpCRYPTO_THREADID_cpyCRYPTO_THREADID_currentCRYPTO_THREADID_get_callbackCRYPTO_THREADID_hashCRYPTO_THREADID_set_callbackCRYPTO_THREADID_set_numericCRYPTO_THREADID_set_pointerCRYPTO_add_lockCRYPTO_cbc128_decryptCRYPTO_cbc128_encryptCRYPTO_ccm128_aadCRYPTO_ccm128_decryptCRYPTO_ccm128_decrypt_ccm64CRYPTO_ccm128_encryptCRYPTO_ccm128_encrypt_ccm64CRYPTO_ccm128_initCRYPTO_ccm128_setivCRYPTO_ccm128_tagCRYPTO_cfb128_1_encryptCRYPTO_cfb128_8_encryptCRYPTO_cfb128_encryptCRYPTO_cleanup_all_ex_dataCRYPTO_ctr128_encryptCRYPTO_ctr128_encrypt_ctr32CRYPTO_cts128_decryptCRYPTO_cts128_decrypt_blockCRYPTO_cts128_encryptCRYPTO_cts128_encrypt_blockCRYPTO_dbg_freeCRYPTO_dbg_get_optionsCRYPTO_dbg_mallocCRYPTO_dbg_reallocCRYPTO_dbg_set_optionsCRYPTO_destroy_dynlockidCRYPTO_dup_ex_dataCRYPTO_ex_data_new_classCRYPTO_freeCRYPTO_free_ex_dataCRYPTO_free_lockedCRYPTO_gcm128_aadCRYPTO_gcm128_decryptCRYPTO_gcm128_decrypt_ctr32CRYPTO_gcm128_encryptCRYPTO_gcm128_encrypt_ctr32CRYPTO_gcm128_finishCRYPTO_gcm128_initCRYPTO_gcm128_newCRYPTO_gcm128_releaseCRYPTO_gcm128_setivCRYPTO_gcm128_tagCRYPTO_get_add_lock_callbackCRYPTO_get_dynlock_create_callbackCRYPTO_get_dynlock_destroy_callbackCRYPTO_get_dynlock_lock_callbackCRYPTO_get_dynlock_valueCRYPTO_get_ex_dataCRYPTO_get_ex_data_implementationCRYPTO_get_ex_new_indexCRYPTO_get_id_callbackCRYPTO_get_lock_nameCRYPTO_get_locked_mem_ex_functionsCRYPTO_get_locked_mem_functionsCRYPTO_get_locking_callbackCRYPTO_get_mem_debug_functionsCRYPTO_get_mem_debug_optionsCRYPTO_get_mem_ex_functionsCRYPTO_get_mem_functionsCRYPTO_get_new_dynlockidCRYPTO_get_new_lockidCRYPTO_is_mem_check_onCRYPTO_lockCRYPTO_mallocCRYPTO_malloc_lockedCRYPTO_mem_ctrlCRYPTO_mem_leaksCRYPTO_mem_leaks_cbCRYPTO_mem_leaks_fpCRYPTO_memcmpCRYPTO_new_ex_dataCRYPTO_nistcts128_decryptCRYPTO_nistcts128_decrypt_blockCRYPTO_nistcts128_encryptCRYPTO_nistcts128_encrypt_blockCRYPTO_num_locksCRYPTO_ofb128_encryptCRYPTO_pop_infoCRYPTO_push_info_CRYPTO_reallocCRYPTO_realloc_cleanCRYPTO_remallocCRYPTO_remove_all_infoCRYPTO_set_add_lock_callbackCRYPTO_set_dynlock_create_callbackCRYPTO_set_dynlock_destroy_callbackCRYPTO_set_dynlock_lock_callbackCRYPTO_set_ex_dataCRYPTO_set_ex_data_implementationCRYPTO_set_id_callbackCRYPTO_set_locked_mem_ex_functionsCRYPTO_set_locked_mem_functionsCRYPTO_set_locking_callbackCRYPTO_set_mem_debug_functionsCRYPTO_set_mem_debug_optionsCRYPTO_set_mem_ex_functionsCRYPTO_set_mem_functionsCRYPTO_strdupCRYPTO_thread_idCRYPTO_xts128_encryptCamellia_cbc_encryptCamellia_cfb128_encryptCamellia_cfb1_encryptCamellia_cfb8_encryptCamellia_ctr128_encryptCamellia_decryptCamellia_ecb_encryptCamellia_encryptCamellia_ofb128_encryptCamellia_set_keyDES_cbc_cksumDES_cbc_encryptDES_cfb64_encryptDES_cfb_encryptDES_check_key_parityDES_cryptDES_decrypt3DES_ecb3_encryptDES_ecb_encryptDES_ede3_cbc_encryptDES_ede3_cbcm_encryptDES_ede3_cfb64_encryptDES_ede3_cfb_encryptDES_ede3_ofb64_encryptDES_enc_readDES_enc_writeDES_encrypt1DES_encrypt2DES_encrypt3DES_fcryptDES_is_weak_keyDES_key_schedDES_ncbc_encryptDES_ofb64_encryptDES_ofb_encryptDES_optionsDES_pcbc_encryptDES_quad_cksumDES_random_keyDES_read_2passwordsDES_read_passwordDES_set_keyDES_set_key_checkedDES_set_key_uncheckedDES_set_odd_parityDES_string_to_2keysDES_string_to_keyDES_xcbc_encryptDH_KDF_X9_42DH_OpenSSLDH_checkDH_check_pub_keyDH_compute_keyDH_compute_key_paddedDH_freeDH_generate_keyDH_generate_parametersDH_generate_parameters_exDH_get_1024_160DH_get_2048_224DH_get_2048_256DH_get_default_methodDH_get_ex_dataDH_get_ex_new_indexDH_newDH_new_methodDH_set_default_methodDH_set_ex_dataDH_set_methodDH_sizeDH_up_refDHparams_dupDHparams_printDHparams_print_fpDIRECTORYSTRING_freeDIRECTORYSTRING_itDIRECTORYSTRING_newDISPLAYTEXT_freeDISPLAYTEXT_itDISPLAYTEXT_newDIST_POINT_NAME_freeDIST_POINT_NAME_itDIST_POINT_NAME_newDIST_POINT_freeDIST_POINT_itDIST_POINT_newDIST_POINT_set_dpnameDSA_OpenSSLDSA_SIG_freeDSA_SIG_newDSA_do_signDSA_do_verifyDSA_dup_DHDSA_freeDSA_generate_keyDSA_generate_parametersDSA_generate_parameters_exDSA_get_default_methodDSA_get_ex_dataDSA_get_ex_new_indexDSA_newDSA_new_methodDSA_printDSA_print_fpDSA_set_default_methodDSA_set_ex_dataDSA_set_methodDSA_signDSA_sign_setupDSA_sizeDSA_up_refDSA_verifyDSAparams_dupDSAparams_printDSAparams_print_fpDSO_METHOD_beosDSO_METHOD_dlDSO_METHOD_dlfcnDSO_METHOD_nullDSO_METHOD_opensslDSO_METHOD_vmsDSO_METHOD_win32DSO_bind_funcDSO_bind_varDSO_convert_filenameDSO_ctrlDSO_flagsDSO_freeDSO_get_default_methodDSO_get_filenameDSO_get_loaded_filenameDSO_get_methodDSO_global_lookupDSO_loadDSO_mergeDSO_newDSO_new_methodDSO_pathbyaddrDSO_set_default_methodDSO_set_filenameDSO_set_methodDSO_set_name_converterDSO_up_refECDH_KDF_X9_62ECDH_OpenSSLECDH_compute_keyECDH_get_default_methodECDH_get_ex_dataECDH_get_ex_new_indexECDH_set_default_methodECDH_set_ex_dataECDH_set_methodECDSA_METHOD_freeECDSA_METHOD_get_app_dataECDSA_METHOD_newECDSA_METHOD_set_app_dataECDSA_METHOD_set_flagsECDSA_METHOD_set_nameECDSA_METHOD_set_signECDSA_METHOD_set_sign_setupECDSA_METHOD_set_verifyECDSA_OpenSSLECDSA_SIG_freeECDSA_SIG_newECDSA_do_signECDSA_do_sign_exECDSA_do_verifyECDSA_get_default_methodECDSA_get_ex_dataECDSA_get_ex_new_indexECDSA_set_default_methodECDSA_set_ex_dataECDSA_set_methodECDSA_signECDSA_sign_exECDSA_sign_setupECDSA_sizeECDSA_verifyECPKParameters_printECPKParameters_print_fpECParameters_printECParameters_print_fpEC_GF2m_simple_methodEC_GFp_mont_methodEC_GFp_nist_methodEC_GFp_simple_methodEC_GROUP_checkEC_GROUP_check_discriminantEC_GROUP_clear_freeEC_GROUP_cmpEC_GROUP_copyEC_GROUP_dupEC_GROUP_freeEC_GROUP_get0_generatorEC_GROUP_get0_seedEC_GROUP_get_asn1_flagEC_GROUP_get_basis_typeEC_GROUP_get_cofactorEC_GROUP_get_curve_GF2mEC_GROUP_get_curve_GFpEC_GROUP_get_curve_nameEC_GROUP_get_degreeEC_GROUP_get_mont_dataEC_GROUP_get_orderEC_GROUP_get_pentanomial_basisEC_GROUP_get_point_conversion_formEC_GROUP_get_seed_lenEC_GROUP_get_trinomial_basisEC_GROUP_have_precompute_multEC_GROUP_method_ofEC_GROUP_newEC_GROUP_new_by_curve_nameEC_GROUP_new_curve_GF2mEC_GROUP_new_curve_GFpEC_GROUP_precompute_multEC_GROUP_set_asn1_flagEC_GROUP_set_curve_GF2mEC_GROUP_set_curve_GFpEC_GROUP_set_curve_nameEC_GROUP_set_generatorEC_GROUP_set_point_conversion_formEC_GROUP_set_seedEC_KEY_check_keyEC_KEY_clear_flagsEC_KEY_copyEC_KEY_dupEC_KEY_freeEC_KEY_generate_keyEC_KEY_get0_groupEC_KEY_get0_private_keyEC_KEY_get0_public_keyEC_KEY_get_conv_formEC_KEY_get_enc_flagsEC_KEY_get_flagsEC_KEY_get_key_method_dataEC_KEY_insert_key_method_dataEC_KEY_newEC_KEY_new_by_curve_nameEC_KEY_precompute_multEC_KEY_printEC_KEY_print_fpEC_KEY_set_asn1_flagEC_KEY_set_conv_formEC_KEY_set_enc_flagsEC_KEY_set_flagsEC_KEY_set_groupEC_KEY_set_private_keyEC_KEY_set_public_keyEC_KEY_set_public_key_affine_coordinatesEC_KEY_up_refEC_METHOD_get_field_typeEC_POINT_addEC_POINT_bn2pointEC_POINT_clear_freeEC_POINT_cmpEC_POINT_copyEC_POINT_dblEC_POINT_dupEC_POINT_freeEC_POINT_get_Jprojective_coordinates_GFpEC_POINT_get_affine_coordinates_GF2mEC_POINT_get_affine_coordinates_GFpEC_POINT_hex2pointEC_POINT_invertEC_POINT_is_at_infinityEC_POINT_is_on_curveEC_POINT_make_affineEC_POINT_method_ofEC_POINT_mulEC_POINT_newEC_POINT_oct2pointEC_POINT_point2bnEC_POINT_point2hexEC_POINT_point2octEC_POINT_set_Jprojective_coordinates_GFpEC_POINT_set_affine_coordinates_GF2mEC_POINT_set_affine_coordinates_GFpEC_POINT_set_compressed_coordinates_GF2mEC_POINT_set_compressed_coordinates_GFpEC_POINT_set_to_infinityEC_POINTs_make_affineEC_POINTs_mulEC_curve_nid2nistEC_curve_nist2nidEC_get_builtin_curvesEDIPARTYNAME_freeEDIPARTYNAME_itEDIPARTYNAME_newENGINE_addENGINE_add_conf_moduleENGINE_by_idENGINE_cleanupENGINE_cmd_is_executableENGINE_ctrlENGINE_ctrl_cmdENGINE_ctrl_cmd_stringENGINE_finishENGINE_freeENGINE_get_DHENGINE_get_DSAENGINE_get_ECDHENGINE_get_ECDSAENGINE_get_RANDENGINE_get_RSAENGINE_get_STOREENGINE_get_cipherENGINE_get_cipher_engineENGINE_get_ciphersENGINE_get_cmd_defnsENGINE_get_ctrl_functionENGINE_get_default_DHENGINE_get_default_DSAENGINE_get_default_ECDHENGINE_get_default_ECDSAENGINE_get_default_RANDENGINE_get_default_RSAENGINE_get_destroy_functionENGINE_get_digestENGINE_get_digest_engineENGINE_get_digestsENGINE_get_ex_dataENGINE_get_ex_new_indexENGINE_get_finish_functionENGINE_get_firstENGINE_get_flagsENGINE_get_idENGINE_get_init_functionENGINE_get_lastENGINE_get_load_privkey_functionENGINE_get_load_pubkey_functionENGINE_get_nameENGINE_get_nextENGINE_get_pkey_asn1_methENGINE_get_pkey_asn1_meth_engineENGINE_get_pkey_asn1_meth_strENGINE_get_pkey_asn1_methsENGINE_get_pkey_methENGINE_get_pkey_meth_engineENGINE_get_pkey_methsENGINE_get_prevENGINE_get_ssl_client_cert_functionENGINE_get_static_stateENGINE_get_table_flagsENGINE_initENGINE_load_builtin_enginesENGINE_load_cryptodevENGINE_load_dynamicENGINE_load_opensslENGINE_load_private_keyENGINE_load_public_keyENGINE_load_rdrandENGINE_load_ssl_client_certENGINE_newENGINE_pkey_asn1_find_strENGINE_register_DHENGINE_register_DSAENGINE_register_ECDHENGINE_register_ECDSAENGINE_register_RANDENGINE_register_RSAENGINE_register_STOREENGINE_register_all_DHENGINE_register_all_DSAENGINE_register_all_ECDHENGINE_register_all_ECDSAENGINE_register_all_RANDENGINE_register_all_RSAENGINE_register_all_STOREENGINE_register_all_ciphersENGINE_register_all_completeENGINE_register_all_digestsENGINE_register_all_pkey_asn1_methsENGINE_register_all_pkey_methsENGINE_register_ciphersENGINE_register_completeENGINE_register_digestsENGINE_register_pkey_asn1_methsENGINE_register_pkey_methsENGINE_removeENGINE_set_DHENGINE_set_DSAENGINE_set_ECDHENGINE_set_ECDSAENGINE_set_RANDENGINE_set_RSAENGINE_set_STOREENGINE_set_ciphersENGINE_set_cmd_defnsENGINE_set_ctrl_functionENGINE_set_defaultENGINE_set_default_DHENGINE_set_default_DSAENGINE_set_default_ECDHENGINE_set_default_ECDSAENGINE_set_default_RANDENGINE_set_default_RSAENGINE_set_default_ciphersENGINE_set_default_digestsENGINE_set_default_pkey_asn1_methsENGINE_set_default_pkey_methsENGINE_set_default_stringENGINE_set_destroy_functionENGINE_set_digestsENGINE_set_ex_dataENGINE_set_finish_functionENGINE_set_flagsENGINE_set_idENGINE_set_init_functionENGINE_set_load_privkey_functionENGINE_set_load_pubkey_functionENGINE_set_load_ssl_client_cert_functionENGINE_set_nameENGINE_set_pkey_asn1_methsENGINE_set_pkey_methsENGINE_set_table_flagsENGINE_unregister_DHENGINE_unregister_DSAENGINE_unregister_ECDHENGINE_unregister_ECDSAENGINE_unregister_RANDENGINE_unregister_RSAENGINE_unregister_STOREENGINE_unregister_ciphersENGINE_unregister_digestsENGINE_unregister_pkey_asn1_methsENGINE_unregister_pkey_methsENGINE_up_refERR_add_error_dataERR_add_error_vdataERR_clear_errorERR_error_stringERR_error_string_nERR_free_stringsERR_func_error_stringERR_get_err_state_tableERR_get_errorERR_get_error_lineERR_get_error_line_dataERR_get_implementationERR_get_next_error_libraryERR_get_stateERR_get_string_tableERR_lib_error_stringERR_load_ASN1_stringsERR_load_BIO_stringsERR_load_BN_stringsERR_load_BUF_stringsERR_load_CMS_stringsERR_load_COMP_stringsERR_load_CONF_stringsERR_load_CRYPTO_stringsERR_load_DH_stringsERR_load_DSA_stringsERR_load_DSO_stringsERR_load_ECDH_stringsERR_load_ECDSA_stringsERR_load_EC_stringsERR_load_ENGINE_stringsERR_load_ERR_stringsERR_load_EVP_stringsERR_load_OBJ_stringsERR_load_OCSP_stringsERR_load_PEM_stringsERR_load_PKCS12_stringsERR_load_PKCS7_stringsERR_load_RAND_stringsERR_load_RSA_stringsERR_load_TS_stringsERR_load_UI_stringsERR_load_X509V3_stringsERR_load_X509_stringsERR_load_crypto_stringsERR_load_stringsERR_peek_errorERR_peek_error_lineERR_peek_error_line_dataERR_peek_last_errorERR_peek_last_error_lineERR_peek_last_error_line_dataERR_pop_to_markERR_print_errorsERR_print_errors_cbERR_print_errors_fpERR_put_errorERR_reason_error_stringERR_release_err_state_tableERR_remove_stateERR_remove_thread_stateERR_set_error_dataERR_set_implementationERR_set_markERR_unload_stringsESS_CERT_ID_dupESS_CERT_ID_freeESS_CERT_ID_newESS_ISSUER_SERIAL_dupESS_ISSUER_SERIAL_freeESS_ISSUER_SERIAL_newESS_SIGNING_CERT_dupESS_SIGNING_CERT_freeESS_SIGNING_CERT_newEVP_BytesToKeyEVP_CIPHER_CTX_block_sizeEVP_CIPHER_CTX_cipherEVP_CIPHER_CTX_cleanupEVP_CIPHER_CTX_clear_flagsEVP_CIPHER_CTX_copyEVP_CIPHER_CTX_ctrlEVP_CIPHER_CTX_flagsEVP_CIPHER_CTX_freeEVP_CIPHER_CTX_get_app_dataEVP_CIPHER_CTX_initEVP_CIPHER_CTX_iv_lengthEVP_CIPHER_CTX_key_lengthEVP_CIPHER_CTX_newEVP_CIPHER_CTX_nidEVP_CIPHER_CTX_rand_keyEVP_CIPHER_CTX_set_app_dataEVP_CIPHER_CTX_set_flagsEVP_CIPHER_CTX_set_key_lengthEVP_CIPHER_CTX_set_paddingEVP_CIPHER_CTX_test_flagsEVP_CIPHER_asn1_to_paramEVP_CIPHER_block_sizeEVP_CIPHER_do_allEVP_CIPHER_do_all_sortedEVP_CIPHER_flagsEVP_CIPHER_get_asn1_ivEVP_CIPHER_iv_lengthEVP_CIPHER_key_lengthEVP_CIPHER_nidEVP_CIPHER_param_to_asn1EVP_CIPHER_set_asn1_ivEVP_CIPHER_typeEVP_CipherEVP_CipherFinalEVP_CipherFinal_exEVP_CipherInitEVP_CipherInit_exEVP_CipherUpdateEVP_DecodeBlockEVP_DecodeFinalEVP_DecodeInitEVP_DecodeUpdateEVP_DecryptFinalEVP_DecryptFinal_exEVP_DecryptInitEVP_DecryptInit_exEVP_DecryptUpdateEVP_DigestEVP_DigestFinalEVP_DigestFinal_exEVP_DigestInitEVP_DigestInit_exEVP_DigestSignFinalEVP_DigestSignInitEVP_DigestUpdateEVP_DigestVerifyFinalEVP_DigestVerifyInitEVP_EncodeBlockEVP_EncodeFinalEVP_EncodeInitEVP_EncodeUpdateEVP_EncryptFinalEVP_EncryptFinal_exEVP_EncryptInitEVP_EncryptInit_exEVP_EncryptUpdateEVP_MD_CTX_cleanupEVP_MD_CTX_clear_flagsEVP_MD_CTX_copyEVP_MD_CTX_copy_exEVP_MD_CTX_createEVP_MD_CTX_destroyEVP_MD_CTX_initEVP_MD_CTX_mdEVP_MD_CTX_set_flagsEVP_MD_CTX_test_flagsEVP_MD_block_sizeEVP_MD_do_allEVP_MD_do_all_sortedEVP_MD_flagsEVP_MD_pkey_typeEVP_MD_sizeEVP_MD_typeEVP_OpenFinalEVP_OpenInitEVP_PBE_CipherInitEVP_PBE_alg_addEVP_PBE_alg_add_typeEVP_PBE_cleanupEVP_PBE_findEVP_PKCS82PKEYEVP_PKEY2PKCS8EVP_PKEY2PKCS8_brokenEVP_PKEY_CTX_ctrlEVP_PKEY_CTX_ctrl_strEVP_PKEY_CTX_dupEVP_PKEY_CTX_freeEVP_PKEY_CTX_get0_peerkeyEVP_PKEY_CTX_get0_pkeyEVP_PKEY_CTX_get_app_dataEVP_PKEY_CTX_get_cbEVP_PKEY_CTX_get_dataEVP_PKEY_CTX_get_keygen_infoEVP_PKEY_CTX_get_operationEVP_PKEY_CTX_newEVP_PKEY_CTX_new_idEVP_PKEY_CTX_set0_keygen_infoEVP_PKEY_CTX_set_app_dataEVP_PKEY_CTX_set_cbEVP_PKEY_CTX_set_dataEVP_PKEY_add1_attrEVP_PKEY_add1_attr_by_NIDEVP_PKEY_add1_attr_by_OBJEVP_PKEY_add1_attr_by_txtEVP_PKEY_asn1_add0EVP_PKEY_asn1_add_aliasEVP_PKEY_asn1_copyEVP_PKEY_asn1_findEVP_PKEY_asn1_find_strEVP_PKEY_asn1_freeEVP_PKEY_asn1_get0EVP_PKEY_asn1_get0_infoEVP_PKEY_asn1_get_countEVP_PKEY_asn1_newEVP_PKEY_asn1_set_ctrlEVP_PKEY_asn1_set_freeEVP_PKEY_asn1_set_itemEVP_PKEY_asn1_set_paramEVP_PKEY_asn1_set_privateEVP_PKEY_asn1_set_publicEVP_PKEY_assignEVP_PKEY_base_idEVP_PKEY_bitsEVP_PKEY_cmpEVP_PKEY_cmp_parametersEVP_PKEY_copy_parametersEVP_PKEY_decryptEVP_PKEY_decrypt_initEVP_PKEY_decrypt_oldEVP_PKEY_delete_attrEVP_PKEY_deriveEVP_PKEY_derive_initEVP_PKEY_derive_set_peerEVP_PKEY_encryptEVP_PKEY_encrypt_initEVP_PKEY_encrypt_oldEVP_PKEY_freeEVP_PKEY_get0EVP_PKEY_get0_asn1EVP_PKEY_get1_DHEVP_PKEY_get1_DSAEVP_PKEY_get1_EC_KEYEVP_PKEY_get1_RSAEVP_PKEY_get_attrEVP_PKEY_get_attr_by_NIDEVP_PKEY_get_attr_by_OBJEVP_PKEY_get_attr_countEVP_PKEY_get_default_digest_nidEVP_PKEY_idEVP_PKEY_keygenEVP_PKEY_keygen_initEVP_PKEY_meth_add0EVP_PKEY_meth_copyEVP_PKEY_meth_findEVP_PKEY_meth_freeEVP_PKEY_meth_get0_infoEVP_PKEY_meth_newEVP_PKEY_meth_set_cleanupEVP_PKEY_meth_set_copyEVP_PKEY_meth_set_ctrlEVP_PKEY_meth_set_decryptEVP_PKEY_meth_set_deriveEVP_PKEY_meth_set_encryptEVP_PKEY_meth_set_initEVP_PKEY_meth_set_keygenEVP_PKEY_meth_set_paramgenEVP_PKEY_meth_set_signEVP_PKEY_meth_set_signctxEVP_PKEY_meth_set_verifyEVP_PKEY_meth_set_verify_recoverEVP_PKEY_meth_set_verifyctxEVP_PKEY_missing_parametersEVP_PKEY_newEVP_PKEY_new_mac_keyEVP_PKEY_paramgenEVP_PKEY_paramgen_initEVP_PKEY_print_paramsEVP_PKEY_print_privateEVP_PKEY_print_publicEVP_PKEY_save_parametersEVP_PKEY_set1_DHEVP_PKEY_set1_DSAEVP_PKEY_set1_EC_KEYEVP_PKEY_set1_RSAEVP_PKEY_set_typeEVP_PKEY_set_type_strEVP_PKEY_signEVP_PKEY_sign_initEVP_PKEY_sizeEVP_PKEY_typeEVP_PKEY_verifyEVP_PKEY_verify_initEVP_PKEY_verify_recoverEVP_PKEY_verify_recover_initEVP_SealFinalEVP_SealInitEVP_SignFinalEVP_VerifyFinalEVP_add_alg_moduleEVP_add_cipherEVP_add_digestEVP_aes_128_cbcEVP_aes_128_cbc_hmac_sha1EVP_aes_128_cbc_hmac_sha256EVP_aes_128_ccmEVP_aes_128_cfb1EVP_aes_128_cfb128EVP_aes_128_cfb8EVP_aes_128_ctrEVP_aes_128_ecbEVP_aes_128_gcmEVP_aes_128_ofbEVP_aes_128_wrapEVP_aes_128_xtsEVP_aes_192_cbcEVP_aes_192_ccmEVP_aes_192_cfb1EVP_aes_192_cfb128EVP_aes_192_cfb8EVP_aes_192_ctrEVP_aes_192_ecbEVP_aes_192_gcmEVP_aes_192_ofbEVP_aes_192_wrapEVP_aes_256_cbcEVP_aes_256_cbc_hmac_sha1EVP_aes_256_cbc_hmac_sha256EVP_aes_256_ccmEVP_aes_256_cfb1EVP_aes_256_cfb128EVP_aes_256_cfb8EVP_aes_256_ctrEVP_aes_256_ecbEVP_aes_256_gcmEVP_aes_256_ofbEVP_aes_256_wrapEVP_aes_256_xtsEVP_bf_cbcEVP_bf_cfb64EVP_bf_ecbEVP_bf_ofbEVP_camellia_128_cbcEVP_camellia_128_cfb1EVP_camellia_128_cfb128EVP_camellia_128_cfb8EVP_camellia_128_ecbEVP_camellia_128_ofbEVP_camellia_192_cbcEVP_camellia_192_cfb1EVP_camellia_192_cfb128EVP_camellia_192_cfb8EVP_camellia_192_ecbEVP_camellia_192_ofbEVP_camellia_256_cbcEVP_camellia_256_cfb1EVP_camellia_256_cfb128EVP_camellia_256_cfb8EVP_camellia_256_ecbEVP_camellia_256_ofbEVP_cast5_cbcEVP_cast5_cfb64EVP_cast5_ecbEVP_cast5_ofbEVP_cleanupEVP_des_cbcEVP_des_cfb1EVP_des_cfb64EVP_des_cfb8EVP_des_ecbEVP_des_edeEVP_des_ede3EVP_des_ede3_cbcEVP_des_ede3_cfb1EVP_des_ede3_cfb64EVP_des_ede3_cfb8EVP_des_ede3_ecbEVP_des_ede3_ofbEVP_des_ede3_wrapEVP_des_ede_cbcEVP_des_ede_cfb64EVP_des_ede_ecbEVP_des_ede_ofbEVP_des_ofbEVP_desx_cbcEVP_dssEVP_dss1EVP_ecdsaEVP_enc_nullEVP_get_cipherbynameEVP_get_digestbynameEVP_get_pw_promptEVP_idea_cbcEVP_idea_cfb64EVP_idea_ecbEVP_idea_ofbEVP_md4EVP_md5EVP_md_nullEVP_mdc2EVP_rc2_40_cbcEVP_rc2_64_cbcEVP_rc2_cbcEVP_rc2_cfb64EVP_rc2_ecbEVP_rc2_ofbEVP_rc4EVP_rc4_40EVP_rc4_hmac_md5EVP_read_pw_stringEVP_read_pw_string_minEVP_ripemd160EVP_seed_cbcEVP_seed_cfb128EVP_seed_ecbEVP_seed_ofbEVP_set_pw_promptEVP_shaEVP_sha1EVP_sha224EVP_sha256EVP_sha384EVP_sha512EVP_whirlpoolEXTENDED_KEY_USAGE_freeEXTENDED_KEY_USAGE_itEXTENDED_KEY_USAGE_newFIPS_modeFIPS_mode_setGENERAL_NAMES_freeGENERAL_NAMES_itGENERAL_NAMES_newGENERAL_NAME_cmpGENERAL_NAME_dupGENERAL_NAME_freeGENERAL_NAME_get0_otherNameGENERAL_NAME_get0_valueGENERAL_NAME_itGENERAL_NAME_newGENERAL_NAME_printGENERAL_NAME_set0_othernameGENERAL_NAME_set0_valueGENERAL_SUBTREE_freeGENERAL_SUBTREE_itGENERAL_SUBTREE_newHMACHMAC_CTX_cleanupHMAC_CTX_copyHMAC_CTX_initHMAC_CTX_set_flagsHMAC_FinalHMAC_InitHMAC_Init_exHMAC_UpdateISSUING_DIST_POINT_freeISSUING_DIST_POINT_itISSUING_DIST_POINT_newKRB5_APREQBODY_freeKRB5_APREQBODY_itKRB5_APREQBODY_newKRB5_APREQ_freeKRB5_APREQ_itKRB5_APREQ_newKRB5_AUTHDATA_freeKRB5_AUTHDATA_itKRB5_AUTHDATA_newKRB5_AUTHENTBODY_freeKRB5_AUTHENTBODY_itKRB5_AUTHENTBODY_newKRB5_AUTHENT_freeKRB5_AUTHENT_itKRB5_AUTHENT_newKRB5_CHECKSUM_freeKRB5_CHECKSUM_itKRB5_CHECKSUM_newKRB5_ENCDATA_freeKRB5_ENCDATA_itKRB5_ENCDATA_newKRB5_ENCKEY_freeKRB5_ENCKEY_itKRB5_ENCKEY_newKRB5_PRINCNAME_freeKRB5_PRINCNAME_itKRB5_PRINCNAME_newKRB5_TICKET_freeKRB5_TICKET_itKRB5_TICKET_newKRB5_TKTBODY_freeKRB5_TKTBODY_itKRB5_TKTBODY_newLONG_itMD4MD4_FinalMD4_InitMD4_TransformMD4_UpdateMD5MD5_FinalMD5_InitMD5_TransformMD5_UpdateMDC2MDC2_FinalMDC2_InitMDC2_UpdateNAME_CONSTRAINTS_checkNAME_CONSTRAINTS_freeNAME_CONSTRAINTS_itNAME_CONSTRAINTS_newNCONF_WIN32NCONF_defaultNCONF_dump_bioNCONF_dump_fpNCONF_freeNCONF_free_dataNCONF_get_number_eNCONF_get_sectionNCONF_get_stringNCONF_loadNCONF_load_bioNCONF_load_fpNCONF_newNETSCAPE_CERT_SEQUENCE_freeNETSCAPE_CERT_SEQUENCE_itNETSCAPE_CERT_SEQUENCE_newNETSCAPE_SPKAC_freeNETSCAPE_SPKAC_itNETSCAPE_SPKAC_newNETSCAPE_SPKI_b64_decodeNETSCAPE_SPKI_b64_encodeNETSCAPE_SPKI_freeNETSCAPE_SPKI_get_pubkeyNETSCAPE_SPKI_itNETSCAPE_SPKI_newNETSCAPE_SPKI_printNETSCAPE_SPKI_set_pubkeyNETSCAPE_SPKI_signNETSCAPE_SPKI_verifyNETSCAPE_X509_freeNETSCAPE_X509_itNETSCAPE_X509_newNOTICEREF_freeNOTICEREF_itNOTICEREF_newOBJ_NAME_addOBJ_NAME_cleanupOBJ_NAME_do_allOBJ_NAME_do_all_sortedOBJ_NAME_getOBJ_NAME_initOBJ_NAME_new_indexOBJ_NAME_removeOBJ_add_objectOBJ_add_sigidOBJ_bsearch_OBJ_bsearch_ex_OBJ_cleanupOBJ_cmpOBJ_createOBJ_create_objectsOBJ_dupOBJ_find_sigid_algsOBJ_find_sigid_by_algsOBJ_ln2nidOBJ_new_nidOBJ_nid2lnOBJ_nid2objOBJ_nid2snOBJ_obj2nidOBJ_obj2txtOBJ_sigid_freeOBJ_sn2nidOBJ_txt2nidOBJ_txt2objOCSP_BASICRESP_add1_ext_i2dOCSP_BASICRESP_add_extOCSP_BASICRESP_delete_extOCSP_BASICRESP_freeOCSP_BASICRESP_get1_ext_d2iOCSP_BASICRESP_get_extOCSP_BASICRESP_get_ext_by_NIDOCSP_BASICRESP_get_ext_by_OBJOCSP_BASICRESP_get_ext_by_criticalOCSP_BASICRESP_get_ext_countOCSP_BASICRESP_itOCSP_BASICRESP_newOCSP_CERTID_dupOCSP_CERTID_freeOCSP_CERTID_itOCSP_CERTID_newOCSP_CERTSTATUS_freeOCSP_CERTSTATUS_itOCSP_CERTSTATUS_newOCSP_CRLID_freeOCSP_CRLID_itOCSP_CRLID_newOCSP_ONEREQ_add1_ext_i2dOCSP_ONEREQ_add_extOCSP_ONEREQ_delete_extOCSP_ONEREQ_freeOCSP_ONEREQ_get1_ext_d2iOCSP_ONEREQ_get_extOCSP_ONEREQ_get_ext_by_NIDOCSP_ONEREQ_get_ext_by_OBJOCSP_ONEREQ_get_ext_by_criticalOCSP_ONEREQ_get_ext_countOCSP_ONEREQ_itOCSP_ONEREQ_newOCSP_REQINFO_freeOCSP_REQINFO_itOCSP_REQINFO_newOCSP_REQUEST_add1_ext_i2dOCSP_REQUEST_add_extOCSP_REQUEST_delete_extOCSP_REQUEST_freeOCSP_REQUEST_get1_ext_d2iOCSP_REQUEST_get_extOCSP_REQUEST_get_ext_by_NIDOCSP_REQUEST_get_ext_by_OBJOCSP_REQUEST_get_ext_by_criticalOCSP_REQUEST_get_ext_countOCSP_REQUEST_itOCSP_REQUEST_newOCSP_REQUEST_printOCSP_REQ_CTX_add1_headerOCSP_REQ_CTX_freeOCSP_REQ_CTX_get0_mem_bioOCSP_REQ_CTX_httpOCSP_REQ_CTX_i2dOCSP_REQ_CTX_nbioOCSP_REQ_CTX_nbio_d2iOCSP_REQ_CTX_newOCSP_REQ_CTX_set1_reqOCSP_RESPBYTES_freeOCSP_RESPBYTES_itOCSP_RESPBYTES_newOCSP_RESPDATA_freeOCSP_RESPDATA_itOCSP_RESPDATA_newOCSP_RESPID_freeOCSP_RESPID_itOCSP_RESPID_newOCSP_RESPONSE_freeOCSP_RESPONSE_itOCSP_RESPONSE_newOCSP_RESPONSE_printOCSP_REVOKEDINFO_freeOCSP_REVOKEDINFO_itOCSP_REVOKEDINFO_newOCSP_SERVICELOC_freeOCSP_SERVICELOC_itOCSP_SERVICELOC_newOCSP_SIGNATURE_freeOCSP_SIGNATURE_itOCSP_SIGNATURE_newOCSP_SINGLERESP_add1_ext_i2dOCSP_SINGLERESP_add_extOCSP_SINGLERESP_delete_extOCSP_SINGLERESP_freeOCSP_SINGLERESP_get1_ext_d2iOCSP_SINGLERESP_get_extOCSP_SINGLERESP_get_ext_by_NIDOCSP_SINGLERESP_get_ext_by_OBJOCSP_SINGLERESP_get_ext_by_criticalOCSP_SINGLERESP_get_ext_countOCSP_SINGLERESP_itOCSP_SINGLERESP_newOCSP_accept_responses_newOCSP_archive_cutoff_newOCSP_basic_add1_certOCSP_basic_add1_nonceOCSP_basic_add1_statusOCSP_basic_signOCSP_basic_verifyOCSP_cert_id_newOCSP_cert_status_strOCSP_cert_to_idOCSP_check_nonceOCSP_check_validityOCSP_copy_nonceOCSP_crlID_newOCSP_crl_reason_strOCSP_id_cmpOCSP_id_get0_infoOCSP_id_issuer_cmpOCSP_onereq_get0_idOCSP_parse_urlOCSP_request_add0_idOCSP_request_add1_certOCSP_request_add1_nonceOCSP_request_is_signedOCSP_request_onereq_countOCSP_request_onereq_get0OCSP_request_set1_nameOCSP_request_signOCSP_request_verifyOCSP_resp_countOCSP_resp_findOCSP_resp_find_statusOCSP_resp_get0OCSP_response_createOCSP_response_get1_basicOCSP_response_statusOCSP_response_status_strOCSP_sendreq_bioOCSP_sendreq_nbioOCSP_sendreq_newOCSP_set_max_response_lengthOCSP_single_get0_statusOCSP_url_svcloc_newOPENSSL_DIR_endOPENSSL_DIR_readOPENSSL_add_all_algorithms_confOPENSSL_add_all_algorithms_noconfOPENSSL_asc2uniOPENSSL_cleanseOPENSSL_configOPENSSL_cpuid_setupOPENSSL_gmtimeOPENSSL_gmtime_adjOPENSSL_gmtime_diffOPENSSL_ia32cap_locOPENSSL_initOPENSSL_isserviceOPENSSL_issetugidOPENSSL_load_builtin_modulesOPENSSL_memcmpOPENSSL_no_configOPENSSL_showfatalOPENSSL_stderrOPENSSL_strcasecmpOPENSSL_strncasecmpOPENSSL_uni2ascOSSL_DES_versionOSSL_libdes_versionOTHERNAME_cmpOTHERNAME_freeOTHERNAME_itOTHERNAME_newOpenSSLDieOpenSSL_add_all_ciphersOpenSSL_add_all_digestsPBE2PARAM_freePBE2PARAM_itPBE2PARAM_newPBEPARAM_freePBEPARAM_itPBEPARAM_newPBKDF2PARAM_freePBKDF2PARAM_itPBKDF2PARAM_newPEM_ASN1_readPEM_ASN1_read_bioPEM_ASN1_writePEM_ASN1_write_bioPEM_SealFinalPEM_SealInitPEM_SealUpdatePEM_SignFinalPEM_SignInitPEM_SignUpdatePEM_X509_INFO_readPEM_X509_INFO_read_bioPEM_X509_INFO_write_bioPEM_bytes_read_bioPEM_def_callbackPEM_dek_infoPEM_do_headerPEM_get_EVP_CIPHER_INFOPEM_proc_typePEM_readPEM_read_CMSPEM_read_DHparamsPEM_read_DSAPrivateKeyPEM_read_DSA_PUBKEYPEM_read_DSAparamsPEM_read_ECPKParametersPEM_read_ECPrivateKeyPEM_read_EC_PUBKEYPEM_read_NETSCAPE_CERT_SEQUENCEPEM_read_PKCS7PEM_read_PKCS8PEM_read_PKCS8_PRIV_KEY_INFOPEM_read_PUBKEYPEM_read_PrivateKeyPEM_read_RSAPrivateKeyPEM_read_RSAPublicKeyPEM_read_RSA_PUBKEYPEM_read_X509PEM_read_X509_AUXPEM_read_X509_CERT_PAIRPEM_read_X509_CRLPEM_read_X509_REQPEM_read_bioPEM_read_bio_CMSPEM_read_bio_DHparamsPEM_read_bio_DSAPrivateKeyPEM_read_bio_DSA_PUBKEYPEM_read_bio_DSAparamsPEM_read_bio_ECPKParametersPEM_read_bio_ECPrivateKeyPEM_read_bio_EC_PUBKEYPEM_read_bio_NETSCAPE_CERT_SEQUENCEPEM_read_bio_PKCS7PEM_read_bio_PKCS8PEM_read_bio_PKCS8_PRIV_KEY_INFOPEM_read_bio_PUBKEYPEM_read_bio_ParametersPEM_read_bio_PrivateKeyPEM_read_bio_RSAPrivateKeyPEM_read_bio_RSAPublicKeyPEM_read_bio_RSA_PUBKEYPEM_read_bio_X509PEM_read_bio_X509_AUXPEM_read_bio_X509_CERT_PAIRPEM_read_bio_X509_CRLPEM_read_bio_X509_REQPEM_writePEM_write_CMSPEM_write_DHparamsPEM_write_DHxparamsPEM_write_DSAPrivateKeyPEM_write_DSA_PUBKEYPEM_write_DSAparamsPEM_write_ECPKParametersPEM_write_ECPrivateKeyPEM_write_EC_PUBKEYPEM_write_NETSCAPE_CERT_SEQUENCEPEM_write_PKCS7PEM_write_PKCS8PEM_write_PKCS8PrivateKeyPEM_write_PKCS8PrivateKey_nidPEM_write_PKCS8_PRIV_KEY_INFOPEM_write_PUBKEYPEM_write_PrivateKeyPEM_write_RSAPrivateKeyPEM_write_RSAPublicKeyPEM_write_RSA_PUBKEYPEM_write_X509PEM_write_X509_AUXPEM_write_X509_CERT_PAIRPEM_write_X509_CRLPEM_write_X509_REQPEM_write_X509_REQ_NEWPEM_write_bioPEM_write_bio_ASN1_streamPEM_write_bio_CMSPEM_write_bio_CMS_streamPEM_write_bio_DHparamsPEM_write_bio_DHxparamsPEM_write_bio_DSAPrivateKeyPEM_write_bio_DSA_PUBKEYPEM_write_bio_DSAparamsPEM_write_bio_ECPKParametersPEM_write_bio_ECPrivateKeyPEM_write_bio_EC_PUBKEYPEM_write_bio_NETSCAPE_CERT_SEQUENCEPEM_write_bio_PKCS7PEM_write_bio_PKCS7_streamPEM_write_bio_PKCS8PEM_write_bio_PKCS8PrivateKeyPEM_write_bio_PKCS8PrivateKey_nidPEM_write_bio_PKCS8_PRIV_KEY_INFOPEM_write_bio_PUBKEYPEM_write_bio_ParametersPEM_write_bio_PrivateKeyPEM_write_bio_RSAPrivateKeyPEM_write_bio_RSAPublicKeyPEM_write_bio_RSA_PUBKEYPEM_write_bio_X509PEM_write_bio_X509_AUXPEM_write_bio_X509_CERT_PAIRPEM_write_bio_X509_CRLPEM_write_bio_X509_REQPEM_write_bio_X509_REQ_NEWPKCS12_AUTHSAFES_itPKCS12_BAGS_freePKCS12_BAGS_itPKCS12_BAGS_newPKCS12_MAC_DATA_freePKCS12_MAC_DATA_itPKCS12_MAC_DATA_newPKCS12_MAKE_KEYBAGPKCS12_MAKE_SHKEYBAGPKCS12_PBE_addPKCS12_PBE_keyivgenPKCS12_SAFEBAGS_itPKCS12_SAFEBAG_freePKCS12_SAFEBAG_itPKCS12_SAFEBAG_newPKCS12_add_CSPName_ascPKCS12_add_certPKCS12_add_friendlyname_ascPKCS12_add_friendlyname_uniPKCS12_add_keyPKCS12_add_localkeyidPKCS12_add_safePKCS12_add_safesPKCS12_certbag2x509PKCS12_certbag2x509crlPKCS12_createPKCS12_decrypt_skeyPKCS12_freePKCS12_gen_macPKCS12_get_attr_genPKCS12_get_friendlynamePKCS12_initPKCS12_itPKCS12_item_decrypt_d2iPKCS12_item_i2d_encryptPKCS12_item_pack_safebagPKCS12_key_gen_ascPKCS12_key_gen_uniPKCS12_newPKCS12_newpassPKCS12_pack_authsafesPKCS12_pack_p7dataPKCS12_pack_p7encdataPKCS12_parsePKCS12_pbe_cryptPKCS12_set_macPKCS12_setup_macPKCS12_unpack_authsafesPKCS12_unpack_p7dataPKCS12_unpack_p7encdataPKCS12_verify_macPKCS12_x5092certbagPKCS12_x509crl2certbagPKCS1_MGF1PKCS5_PBE_addPKCS5_PBE_keyivgenPKCS5_PBKDF2_HMACPKCS5_PBKDF2_HMAC_SHA1PKCS5_pbe2_setPKCS5_pbe2_set_ivPKCS5_pbe_setPKCS5_pbe_set0_algorPKCS5_pbkdf2_setPKCS5_v2_PBE_keyivgenPKCS7_ATTR_SIGN_itPKCS7_ATTR_VERIFY_itPKCS7_DIGEST_freePKCS7_DIGEST_itPKCS7_DIGEST_newPKCS7_ENCRYPT_freePKCS7_ENCRYPT_itPKCS7_ENCRYPT_newPKCS7_ENC_CONTENT_freePKCS7_ENC_CONTENT_itPKCS7_ENC_CONTENT_newPKCS7_ENVELOPE_freePKCS7_ENVELOPE_itPKCS7_ENVELOPE_newPKCS7_ISSUER_AND_SERIAL_digestPKCS7_ISSUER_AND_SERIAL_freePKCS7_ISSUER_AND_SERIAL_itPKCS7_ISSUER_AND_SERIAL_newPKCS7_RECIP_INFO_freePKCS7_RECIP_INFO_get0_algPKCS7_RECIP_INFO_itPKCS7_RECIP_INFO_newPKCS7_RECIP_INFO_setPKCS7_SIGNED_freePKCS7_SIGNED_itPKCS7_SIGNED_newPKCS7_SIGNER_INFO_freePKCS7_SIGNER_INFO_get0_algsPKCS7_SIGNER_INFO_itPKCS7_SIGNER_INFO_newPKCS7_SIGNER_INFO_setPKCS7_SIGNER_INFO_signPKCS7_SIGN_ENVELOPE_freePKCS7_SIGN_ENVELOPE_itPKCS7_SIGN_ENVELOPE_newPKCS7_add0_attrib_signing_timePKCS7_add1_attrib_digestPKCS7_add_attrib_content_typePKCS7_add_attrib_smimecapPKCS7_add_attributePKCS7_add_certificatePKCS7_add_crlPKCS7_add_recipientPKCS7_add_recipient_infoPKCS7_add_signaturePKCS7_add_signed_attributePKCS7_add_signerPKCS7_cert_from_signer_infoPKCS7_content_newPKCS7_ctrlPKCS7_dataDecodePKCS7_dataFinalPKCS7_dataInitPKCS7_dataVerifyPKCS7_decryptPKCS7_digest_from_attributesPKCS7_dupPKCS7_encryptPKCS7_finalPKCS7_freePKCS7_get0_signersPKCS7_get_attributePKCS7_get_issuer_and_serialPKCS7_get_signed_attributePKCS7_get_signer_infoPKCS7_get_smimecapPKCS7_itPKCS7_newPKCS7_print_ctxPKCS7_set0_type_otherPKCS7_set_attributesPKCS7_set_cipherPKCS7_set_contentPKCS7_set_digestPKCS7_set_signed_attributesPKCS7_set_typePKCS7_signPKCS7_sign_add_signerPKCS7_signatureVerifyPKCS7_simple_smimecapPKCS7_streamPKCS7_to_TS_TST_INFOPKCS7_verifyPKCS8_PRIV_KEY_INFO_freePKCS8_PRIV_KEY_INFO_itPKCS8_PRIV_KEY_INFO_newPKCS8_add_keyusagePKCS8_decryptPKCS8_encryptPKCS8_pkey_get0PKCS8_pkey_set0PKCS8_set_brokenPKEY_USAGE_PERIOD_freePKEY_USAGE_PERIOD_itPKEY_USAGE_PERIOD_newPOLICYINFO_freePOLICYINFO_itPOLICYINFO_newPOLICYQUALINFO_freePOLICYQUALINFO_itPOLICYQUALINFO_newPOLICY_CONSTRAINTS_freePOLICY_CONSTRAINTS_itPOLICY_CONSTRAINTS_newPOLICY_MAPPINGS_itPOLICY_MAPPING_freePOLICY_MAPPING_itPOLICY_MAPPING_newPROXY_CERT_INFO_EXTENSION_freePROXY_CERT_INFO_EXTENSION_itPROXY_CERT_INFO_EXTENSION_newPROXY_POLICY_freePROXY_POLICY_itPROXY_POLICY_newRAND_SSLeayRAND_addRAND_bytesRAND_cleanupRAND_egdRAND_egd_bytesRAND_eventRAND_file_nameRAND_get_rand_methodRAND_load_fileRAND_pollRAND_pseudo_bytesRAND_query_egd_bytesRAND_screenRAND_seedRAND_set_rand_engineRAND_set_rand_methodRAND_statusRAND_write_fileRC2_cbc_encryptRC2_cfb64_encryptRC2_decryptRC2_ecb_encryptRC2_encryptRC2_ofb64_encryptRC2_set_keyRC4RC4_optionsRC4_set_keyRIPEMD160RIPEMD160_FinalRIPEMD160_InitRIPEMD160_TransformRIPEMD160_UpdateRSAPrivateKey_dupRSAPrivateKey_itRSAPublicKey_dupRSAPublicKey_itRSA_OAEP_PARAMS_freeRSA_OAEP_PARAMS_itRSA_OAEP_PARAMS_newRSA_PKCS1_SSLeayRSA_PSS_PARAMS_freeRSA_PSS_PARAMS_itRSA_PSS_PARAMS_newRSA_X931_hash_idRSA_blinding_offRSA_blinding_onRSA_check_keyRSA_flagsRSA_freeRSA_generate_keyRSA_generate_key_exRSA_get_default_methodRSA_get_ex_dataRSA_get_ex_new_indexRSA_get_methodRSA_memory_lockRSA_newRSA_new_methodRSA_null_methodRSA_padding_add_PKCS1_OAEPRSA_padding_add_PKCS1_OAEP_mgf1RSA_padding_add_PKCS1_PSSRSA_padding_add_PKCS1_PSS_mgf1RSA_padding_add_PKCS1_type_1RSA_padding_add_PKCS1_type_2RSA_padding_add_SSLv23RSA_padding_add_X931RSA_padding_add_noneRSA_padding_check_PKCS1_OAEPRSA_padding_check_PKCS1_OAEP_mgf1RSA_padding_check_PKCS1_type_1RSA_padding_check_PKCS1_type_2RSA_padding_check_SSLv23RSA_padding_check_X931RSA_padding_check_noneRSA_printRSA_print_fpRSA_private_decryptRSA_private_encryptRSA_public_decryptRSA_public_encryptRSA_set_default_methodRSA_set_ex_dataRSA_set_methodRSA_setup_blindingRSA_signRSA_sign_ASN1_OCTET_STRINGRSA_sizeRSA_up_refRSA_verifyRSA_verify_ASN1_OCTET_STRINGRSA_verify_PKCS1_PSSRSA_verify_PKCS1_PSS_mgf1SEED_cbc_encryptSEED_cfb128_encryptSEED_decryptSEED_ecb_encryptSEED_encryptSEED_ofb128_encryptSEED_set_keySHASHA1SHA1_FinalSHA1_InitSHA1_TransformSHA1_UpdateSHA224SHA224_FinalSHA224_InitSHA224_UpdateSHA256SHA256_FinalSHA256_InitSHA256_TransformSHA256_UpdateSHA384SHA384_FinalSHA384_InitSHA384_UpdateSHA512SHA512_FinalSHA512_InitSHA512_TransformSHA512_UpdateSHA_FinalSHA_InitSHA_TransformSHA_UpdateSMIME_crlf_copySMIME_read_ASN1SMIME_read_CMSSMIME_read_PKCS7SMIME_textSMIME_write_ASN1SMIME_write_CMSSMIME_write_PKCS7SRP_Calc_ASRP_Calc_BSRP_Calc_client_keySRP_Calc_server_keySRP_Calc_uSRP_Calc_xSRP_VBASE_freeSRP_VBASE_get1_by_userSRP_VBASE_get_by_userSRP_VBASE_initSRP_VBASE_newSRP_Verify_A_mod_NSRP_Verify_B_mod_NSRP_check_known_gN_paramSRP_create_verifierSRP_create_verifier_BNSRP_get_default_gNSRP_user_pwd_freeSSLeaySSLeay_versionSXNETID_freeSXNETID_itSXNETID_newSXNET_add_id_INTEGERSXNET_add_id_ascSXNET_add_id_ulongSXNET_freeSXNET_get_id_INTEGERSXNET_get_id_ascSXNET_get_id_ulongSXNET_itSXNET_newTS_ACCURACY_dupTS_ACCURACY_freeTS_ACCURACY_get_microsTS_ACCURACY_get_millisTS_ACCURACY_get_secondsTS_ACCURACY_newTS_ACCURACY_set_microsTS_ACCURACY_set_millisTS_ACCURACY_set_secondsTS_ASN1_INTEGER_print_bioTS_CONF_get_tsa_sectionTS_CONF_load_certTS_CONF_load_certsTS_CONF_load_keyTS_CONF_set_accuracyTS_CONF_set_certsTS_CONF_set_clock_precision_digitsTS_CONF_set_crypto_deviceTS_CONF_set_def_policyTS_CONF_set_default_engineTS_CONF_set_digestsTS_CONF_set_ess_cert_id_chainTS_CONF_set_orderingTS_CONF_set_policiesTS_CONF_set_serialTS_CONF_set_signer_certTS_CONF_set_signer_keyTS_CONF_set_tsa_nameTS_MSG_IMPRINT_dupTS_MSG_IMPRINT_freeTS_MSG_IMPRINT_get_algoTS_MSG_IMPRINT_get_msgTS_MSG_IMPRINT_newTS_MSG_IMPRINT_print_bioTS_MSG_IMPRINT_set_algoTS_MSG_IMPRINT_set_msgTS_OBJ_print_bioTS_REQ_add_extTS_REQ_delete_extTS_REQ_dupTS_REQ_ext_freeTS_REQ_freeTS_REQ_get_cert_reqTS_REQ_get_extTS_REQ_get_ext_by_NIDTS_REQ_get_ext_by_OBJTS_REQ_get_ext_by_criticalTS_REQ_get_ext_countTS_REQ_get_ext_d2iTS_REQ_get_extsTS_REQ_get_msg_imprintTS_REQ_get_nonceTS_REQ_get_policy_idTS_REQ_get_versionTS_REQ_newTS_REQ_print_bioTS_REQ_set_cert_reqTS_REQ_set_msg_imprintTS_REQ_set_nonceTS_REQ_set_policy_idTS_REQ_set_versionTS_REQ_to_TS_VERIFY_CTXTS_RESP_CTX_add_failure_infoTS_RESP_CTX_add_flagsTS_RESP_CTX_add_mdTS_RESP_CTX_add_policyTS_RESP_CTX_freeTS_RESP_CTX_get_requestTS_RESP_CTX_get_tst_infoTS_RESP_CTX_newTS_RESP_CTX_set_accuracyTS_RESP_CTX_set_certsTS_RESP_CTX_set_clock_precision_digitsTS_RESP_CTX_set_def_policyTS_RESP_CTX_set_extension_cbTS_RESP_CTX_set_serial_cbTS_RESP_CTX_set_signer_certTS_RESP_CTX_set_signer_keyTS_RESP_CTX_set_status_infoTS_RESP_CTX_set_status_info_condTS_RESP_CTX_set_time_cbTS_RESP_create_responseTS_RESP_dupTS_RESP_freeTS_RESP_get_status_infoTS_RESP_get_tokenTS_RESP_get_tst_infoTS_RESP_newTS_RESP_print_bioTS_RESP_set_status_infoTS_RESP_set_tst_infoTS_RESP_verify_responseTS_RESP_verify_signatureTS_RESP_verify_tokenTS_STATUS_INFO_dupTS_STATUS_INFO_freeTS_STATUS_INFO_newTS_STATUS_INFO_print_bioTS_TST_INFO_add_extTS_TST_INFO_delete_extTS_TST_INFO_dupTS_TST_INFO_ext_freeTS_TST_INFO_freeTS_TST_INFO_get_accuracyTS_TST_INFO_get_extTS_TST_INFO_get_ext_by_NIDTS_TST_INFO_get_ext_by_OBJTS_TST_INFO_get_ext_by_criticalTS_TST_INFO_get_ext_countTS_TST_INFO_get_ext_d2iTS_TST_INFO_get_extsTS_TST_INFO_get_msg_imprintTS_TST_INFO_get_nonceTS_TST_INFO_get_orderingTS_TST_INFO_get_policy_idTS_TST_INFO_get_serialTS_TST_INFO_get_timeTS_TST_INFO_get_tsaTS_TST_INFO_get_versionTS_TST_INFO_newTS_TST_INFO_print_bioTS_TST_INFO_set_accuracyTS_TST_INFO_set_msg_imprintTS_TST_INFO_set_nonceTS_TST_INFO_set_orderingTS_TST_INFO_set_policy_idTS_TST_INFO_set_serialTS_TST_INFO_set_timeTS_TST_INFO_set_tsaTS_TST_INFO_set_versionTS_VERIFY_CTX_cleanupTS_VERIFY_CTX_freeTS_VERIFY_CTX_initTS_VERIFY_CTX_newTS_X509_ALGOR_print_bioTS_ext_print_bioTXT_DB_create_indexTXT_DB_freeTXT_DB_get_by_indexTXT_DB_insertTXT_DB_readTXT_DB_writeUI_OpenSSLUI_UTIL_read_pwUI_UTIL_read_pw_stringUI_add_error_stringUI_add_info_stringUI_add_input_booleanUI_add_input_stringUI_add_user_dataUI_add_verify_stringUI_construct_promptUI_create_methodUI_ctrlUI_destroy_methodUI_dup_error_stringUI_dup_info_stringUI_dup_input_booleanUI_dup_input_stringUI_dup_verify_stringUI_freeUI_get0_action_stringUI_get0_output_stringUI_get0_resultUI_get0_result_stringUI_get0_test_stringUI_get0_user_dataUI_get_default_methodUI_get_ex_dataUI_get_ex_new_indexUI_get_input_flagsUI_get_methodUI_get_result_maxsizeUI_get_result_minsizeUI_get_string_typeUI_method_get_closerUI_method_get_flusherUI_method_get_openerUI_method_get_prompt_constructorUI_method_get_readerUI_method_get_writerUI_method_set_closerUI_method_set_flusherUI_method_set_openerUI_method_set_prompt_constructorUI_method_set_readerUI_method_set_writerUI_newUI_new_methodUI_processUI_set_default_methodUI_set_ex_dataUI_set_methodUI_set_resultUSERNOTICE_freeUSERNOTICE_itUSERNOTICE_newUTF8_getcUTF8_putcWHIRLPOOLWHIRLPOOL_BitUpdateWHIRLPOOL_FinalWHIRLPOOL_InitWHIRLPOOL_UpdateX509V3_EXT_CRL_add_confX509V3_EXT_CRL_add_nconfX509V3_EXT_REQ_add_confX509V3_EXT_REQ_add_nconfX509V3_EXT_addX509V3_EXT_add_aliasX509V3_EXT_add_confX509V3_EXT_add_listX509V3_EXT_add_nconfX509V3_EXT_add_nconf_skX509V3_EXT_cleanupX509V3_EXT_confX509V3_EXT_conf_nidX509V3_EXT_d2iX509V3_EXT_freeX509V3_EXT_getX509V3_EXT_get_nidX509V3_EXT_i2dX509V3_EXT_nconfX509V3_EXT_nconf_nidX509V3_EXT_printX509V3_EXT_print_fpX509V3_EXT_val_prnX509V3_NAME_from_sectionX509V3_add1_i2dX509V3_add_standard_extensionsX509V3_add_valueX509V3_add_value_boolX509V3_add_value_bool_nfX509V3_add_value_intX509V3_add_value_ucharX509V3_conf_freeX509V3_extensions_printX509V3_get_d2iX509V3_get_sectionX509V3_get_stringX509V3_get_value_boolX509V3_get_value_intX509V3_parse_listX509V3_section_freeX509V3_set_conf_lhashX509V3_set_ctxX509V3_set_nconfX509V3_string_freeX509_ALGORS_itX509_ALGOR_cmpX509_ALGOR_dupX509_ALGOR_freeX509_ALGOR_get0X509_ALGOR_itX509_ALGOR_newX509_ALGOR_set0X509_ALGOR_set_mdX509_ATTRIBUTE_countX509_ATTRIBUTE_createX509_ATTRIBUTE_create_by_NIDX509_ATTRIBUTE_create_by_OBJX509_ATTRIBUTE_create_by_txtX509_ATTRIBUTE_dupX509_ATTRIBUTE_freeX509_ATTRIBUTE_get0_dataX509_ATTRIBUTE_get0_objectX509_ATTRIBUTE_get0_typeX509_ATTRIBUTE_itX509_ATTRIBUTE_newX509_ATTRIBUTE_set1_dataX509_ATTRIBUTE_set1_objectX509_CERT_AUX_freeX509_CERT_AUX_itX509_CERT_AUX_newX509_CERT_AUX_printX509_CERT_PAIR_freeX509_CERT_PAIR_itX509_CERT_PAIR_newX509_CINF_freeX509_CINF_itX509_CINF_newX509_CRL_INFO_freeX509_CRL_INFO_itX509_CRL_INFO_newX509_CRL_METHOD_freeX509_CRL_METHOD_newX509_CRL_add0_revokedX509_CRL_add1_ext_i2dX509_CRL_add_extX509_CRL_check_suitebX509_CRL_cmpX509_CRL_delete_extX509_CRL_diffX509_CRL_digestX509_CRL_dupX509_CRL_freeX509_CRL_get0_by_certX509_CRL_get0_by_serialX509_CRL_get_extX509_CRL_get_ext_by_NIDX509_CRL_get_ext_by_OBJX509_CRL_get_ext_by_criticalX509_CRL_get_ext_countX509_CRL_get_ext_d2iX509_CRL_get_meth_dataX509_CRL_http_nbioX509_CRL_itX509_CRL_matchX509_CRL_newX509_CRL_printX509_CRL_print_fpX509_CRL_set_default_methodX509_CRL_set_issuer_nameX509_CRL_set_lastUpdateX509_CRL_set_meth_dataX509_CRL_set_nextUpdateX509_CRL_set_versionX509_CRL_signX509_CRL_sign_ctxX509_CRL_sortX509_CRL_verifyX509_EXTENSIONS_itX509_EXTENSION_create_by_NIDX509_EXTENSION_create_by_OBJX509_EXTENSION_dupX509_EXTENSION_freeX509_EXTENSION_get_criticalX509_EXTENSION_get_dataX509_EXTENSION_get_objectX509_EXTENSION_itX509_EXTENSION_newX509_EXTENSION_set_criticalX509_EXTENSION_set_dataX509_EXTENSION_set_objectX509_INFO_freeX509_INFO_newX509_LOOKUP_by_aliasX509_LOOKUP_by_fingerprintX509_LOOKUP_by_issuer_serialX509_LOOKUP_by_subjectX509_LOOKUP_ctrlX509_LOOKUP_fileX509_LOOKUP_freeX509_LOOKUP_hash_dirX509_LOOKUP_initX509_LOOKUP_newX509_LOOKUP_shutdownX509_NAME_ENTRY_create_by_NIDX509_NAME_ENTRY_create_by_OBJX509_NAME_ENTRY_create_by_txtX509_NAME_ENTRY_dupX509_NAME_ENTRY_freeX509_NAME_ENTRY_get_dataX509_NAME_ENTRY_get_objectX509_NAME_ENTRY_itX509_NAME_ENTRY_newX509_NAME_ENTRY_set_dataX509_NAME_ENTRY_set_objectX509_NAME_add_entryX509_NAME_add_entry_by_NIDX509_NAME_add_entry_by_OBJX509_NAME_add_entry_by_txtX509_NAME_cmpX509_NAME_delete_entryX509_NAME_digestX509_NAME_dupX509_NAME_entry_countX509_NAME_freeX509_NAME_get_entryX509_NAME_get_index_by_NIDX509_NAME_get_index_by_OBJX509_NAME_get_text_by_NIDX509_NAME_get_text_by_OBJX509_NAME_hashX509_NAME_hash_oldX509_NAME_itX509_NAME_newX509_NAME_onelineX509_NAME_printX509_NAME_print_exX509_NAME_print_ex_fpX509_NAME_setX509_OBJECT_free_contentsX509_OBJECT_idx_by_subjectX509_OBJECT_retrieve_by_subjectX509_OBJECT_retrieve_matchX509_OBJECT_up_ref_countX509_PKEY_freeX509_PKEY_newX509_POLICY_NODE_printX509_PUBKEY_freeX509_PUBKEY_getX509_PUBKEY_get0_paramX509_PUBKEY_itX509_PUBKEY_newX509_PUBKEY_setX509_PUBKEY_set0_paramX509_PURPOSE_addX509_PURPOSE_cleanupX509_PURPOSE_get0X509_PURPOSE_get0_nameX509_PURPOSE_get0_snameX509_PURPOSE_get_by_idX509_PURPOSE_get_by_snameX509_PURPOSE_get_countX509_PURPOSE_get_idX509_PURPOSE_get_trustX509_PURPOSE_setX509_REQ_INFO_freeX509_REQ_INFO_itX509_REQ_INFO_newX509_REQ_add1_attrX509_REQ_add1_attr_by_NIDX509_REQ_add1_attr_by_OBJX509_REQ_add1_attr_by_txtX509_REQ_add_extensionsX509_REQ_add_extensions_nidX509_REQ_check_private_keyX509_REQ_delete_attrX509_REQ_digestX509_REQ_dupX509_REQ_extension_nidX509_REQ_freeX509_REQ_get1_emailX509_REQ_get_attrX509_REQ_get_attr_by_NIDX509_REQ_get_attr_by_OBJX509_REQ_get_attr_countX509_REQ_get_extension_nidsX509_REQ_get_extensionsX509_REQ_get_pubkeyX509_REQ_itX509_REQ_newX509_REQ_printX509_REQ_print_exX509_REQ_print_fpX509_REQ_set_extension_nidsX509_REQ_set_pubkeyX509_REQ_set_subject_nameX509_REQ_set_versionX509_REQ_signX509_REQ_sign_ctxX509_REQ_to_X509X509_REQ_verifyX509_REVOKED_add1_ext_i2dX509_REVOKED_add_extX509_REVOKED_delete_extX509_REVOKED_dupX509_REVOKED_freeX509_REVOKED_get_extX509_REVOKED_get_ext_by_NIDX509_REVOKED_get_ext_by_OBJX509_REVOKED_get_ext_by_criticalX509_REVOKED_get_ext_countX509_REVOKED_get_ext_d2iX509_REVOKED_itX509_REVOKED_newX509_REVOKED_set_revocationDateX509_REVOKED_set_serialNumberX509_SIG_freeX509_SIG_itX509_SIG_newX509_STORE_CTX_cleanupX509_STORE_CTX_freeX509_STORE_CTX_get0_current_crlX509_STORE_CTX_get0_current_issuerX509_STORE_CTX_get0_paramX509_STORE_CTX_get0_parent_ctxX509_STORE_CTX_get0_policy_treeX509_STORE_CTX_get0_storeX509_STORE_CTX_get1_chainX509_STORE_CTX_get1_issuerX509_STORE_CTX_get_chainX509_STORE_CTX_get_current_certX509_STORE_CTX_get_errorX509_STORE_CTX_get_error_depthX509_STORE_CTX_get_ex_dataX509_STORE_CTX_get_ex_new_indexX509_STORE_CTX_get_explicit_policyX509_STORE_CTX_initX509_STORE_CTX_newX509_STORE_CTX_purpose_inheritX509_STORE_CTX_set0_crlsX509_STORE_CTX_set0_paramX509_STORE_CTX_set_certX509_STORE_CTX_set_chainX509_STORE_CTX_set_defaultX509_STORE_CTX_set_depthX509_STORE_CTX_set_errorX509_STORE_CTX_set_ex_dataX509_STORE_CTX_set_flagsX509_STORE_CTX_set_purposeX509_STORE_CTX_set_timeX509_STORE_CTX_set_trustX509_STORE_CTX_set_verify_cbX509_STORE_CTX_trusted_stackX509_STORE_add_certX509_STORE_add_crlX509_STORE_add_lookupX509_STORE_freeX509_STORE_get1_certsX509_STORE_get1_crlsX509_STORE_get_by_subjectX509_STORE_load_locationsX509_STORE_newX509_STORE_set1_paramX509_STORE_set_default_pathsX509_STORE_set_depthX509_STORE_set_flagsX509_STORE_set_lookup_crls_cbX509_STORE_set_purposeX509_STORE_set_trustX509_STORE_set_verify_cbX509_TRUST_addX509_TRUST_cleanupX509_TRUST_get0X509_TRUST_get0_nameX509_TRUST_get_by_idX509_TRUST_get_countX509_TRUST_get_flagsX509_TRUST_get_trustX509_TRUST_setX509_TRUST_set_defaultX509_VAL_freeX509_VAL_itX509_VAL_newX509_VERIFY_PARAM_add0_policyX509_VERIFY_PARAM_add0_tableX509_VERIFY_PARAM_add1_hostX509_VERIFY_PARAM_clear_flagsX509_VERIFY_PARAM_freeX509_VERIFY_PARAM_get0X509_VERIFY_PARAM_get0_nameX509_VERIFY_PARAM_get0_peernameX509_VERIFY_PARAM_get_countX509_VERIFY_PARAM_get_depthX509_VERIFY_PARAM_get_flagsX509_VERIFY_PARAM_inheritX509_VERIFY_PARAM_lookupX509_VERIFY_PARAM_newX509_VERIFY_PARAM_set1X509_VERIFY_PARAM_set1_emailX509_VERIFY_PARAM_set1_hostX509_VERIFY_PARAM_set1_ipX509_VERIFY_PARAM_set1_ip_ascX509_VERIFY_PARAM_set1_nameX509_VERIFY_PARAM_set1_policiesX509_VERIFY_PARAM_set_depthX509_VERIFY_PARAM_set_flagsX509_VERIFY_PARAM_set_hostflagsX509_VERIFY_PARAM_set_purposeX509_VERIFY_PARAM_set_timeX509_VERIFY_PARAM_set_trustX509_VERIFY_PARAM_table_cleanupX509_add1_ext_i2dX509_add1_reject_objectX509_add1_trust_objectX509_add_extX509_alias_get0X509_alias_set1X509_certificate_typeX509_chain_check_suitebX509_chain_up_refX509_check_akidX509_check_caX509_check_emailX509_check_hostX509_check_ipX509_check_ip_ascX509_check_issuedX509_check_private_keyX509_check_purposeX509_check_trustX509_cmpX509_cmp_current_timeX509_cmp_timeX509_delete_extX509_digestX509_dupX509_email_freeX509_find_by_issuer_and_serialX509_find_by_subjectX509_freeX509_get0_pubkey_bitstrX509_get0_signatureX509_get1_emailX509_get1_ocspX509_get_default_cert_areaX509_get_default_cert_dirX509_get_default_cert_dir_envX509_get_default_cert_fileX509_get_default_cert_file_envX509_get_default_private_dirX509_get_ex_dataX509_get_ex_new_indexX509_get_extX509_get_ext_by_NIDX509_get_ext_by_OBJX509_get_ext_by_criticalX509_get_ext_countX509_get_ext_d2iX509_get_issuer_nameX509_get_pubkeyX509_get_pubkey_parametersX509_get_serialNumberX509_get_signature_nidX509_get_subject_nameX509_gmtime_adjX509_http_nbioX509_issuer_and_serial_cmpX509_issuer_and_serial_hashX509_issuer_name_cmpX509_issuer_name_hashX509_issuer_name_hash_oldX509_itX509_keyid_get0X509_keyid_set1X509_load_cert_crl_fileX509_load_cert_fileX509_load_crl_fileX509_newX509_ocspid_printX509_policy_checkX509_policy_level_get0_nodeX509_policy_level_node_countX509_policy_node_get0_parentX509_policy_node_get0_policyX509_policy_node_get0_qualifiersX509_policy_tree_freeX509_policy_tree_get0_levelX509_policy_tree_get0_policiesX509_policy_tree_get0_user_policiesX509_policy_tree_level_countX509_printX509_print_exX509_print_ex_fpX509_print_fpX509_pubkey_digestX509_reject_clearX509_set_ex_dataX509_set_issuer_nameX509_set_notAfterX509_set_notBeforeX509_set_pubkeyX509_set_serialNumberX509_set_subject_nameX509_set_versionX509_signX509_sign_ctxX509_signature_dumpX509_signature_printX509_subject_name_cmpX509_subject_name_hashX509_subject_name_hash_oldX509_supported_extensionX509_time_adjX509_time_adj_exX509_to_X509_REQX509_trust_clearX509_verifyX509_verify_certX509_verify_cert_error_stringX509at_add1_attrX509at_add1_attr_by_NIDX509at_add1_attr_by_OBJX509at_add1_attr_by_txtX509at_delete_attrX509at_get0_data_by_OBJX509at_get_attrX509at_get_attr_by_NIDX509at_get_attr_by_OBJX509at_get_attr_countX509v3_add_extX509v3_delete_extX509v3_get_extX509v3_get_ext_by_NIDX509v3_get_ext_by_OBJX509v3_get_ext_by_criticalX509v3_get_ext_countZLONG_it_ossl_096_des_random_seed_ossl_old_crypt_ossl_old_des_cbc_cksum_ossl_old_des_cbc_encrypt_ossl_old_des_cfb64_encrypt_ossl_old_des_cfb_encrypt_ossl_old_des_crypt_ossl_old_des_decrypt3_ossl_old_des_ecb3_encrypt_ossl_old_des_ecb_encrypt_ossl_old_des_ede3_cbc_encrypt_ossl_old_des_ede3_cfb64_encrypt_ossl_old_des_ede3_ofb64_encrypt_ossl_old_des_enc_read_ossl_old_des_enc_write_ossl_old_des_encrypt_ossl_old_des_encrypt2_ossl_old_des_encrypt3_ossl_old_des_fcrypt_ossl_old_des_is_weak_key_ossl_old_des_key_sched_ossl_old_des_ncbc_encrypt_ossl_old_des_ofb64_encrypt_ossl_old_des_ofb_encrypt_ossl_old_des_options_ossl_old_des_pcbc_encrypt_ossl_old_des_quad_cksum_ossl_old_des_random_key_ossl_old_des_random_seed_ossl_old_des_read_2passwords_ossl_old_des_read_password_ossl_old_des_read_pw_ossl_old_des_read_pw_string_ossl_old_des_set_key_ossl_old_des_set_odd_parity_ossl_old_des_string_to_2keys_ossl_old_des_string_to_key_ossl_old_des_xcbc_encrypt_shadow_DES_check_key_shadow_DES_rw_modea2d_ASN1_OBJECTa2i_ASN1_ENUMERATEDa2i_ASN1_INTEGERa2i_ASN1_STRINGa2i_GENERAL_NAMEa2i_IPADDRESSa2i_IPADDRESS_NCa2i_ipaddasn1_Finishasn1_GetSequenceasn1_add_errorasn1_const_Finishasn1_do_adbasn1_do_lockasn1_enc_freeasn1_enc_initasn1_enc_restoreasn1_enc_saveasn1_ex_c2iasn1_ex_i2casn1_get_choice_selectorasn1_get_field_ptrasn1_set_choice_selectorb2i_PVK_biob2i_PrivateKeyb2i_PrivateKey_biob2i_PublicKeyb2i_PublicKey_biobn_add_wordsbn_div_wordsbn_dup_expandbn_expand2bn_mul_add_wordsbn_mul_wordsbn_sqr_wordsbn_sub_wordsc2i_ASN1_BIT_STRINGc2i_ASN1_INTEGERc2i_ASN1_OBJECTcheck_deferd2i_ACCESS_DESCRIPTIONd2i_ASN1_BIT_STRINGd2i_ASN1_BMPSTRINGd2i_ASN1_BOOLEANd2i_ASN1_ENUMERATEDd2i_ASN1_GENERALIZEDTIMEd2i_ASN1_GENERALSTRINGd2i_ASN1_IA5STRINGd2i_ASN1_INTEGERd2i_ASN1_NULLd2i_ASN1_OBJECTd2i_ASN1_OCTET_STRINGd2i_ASN1_PRINTABLEd2i_ASN1_PRINTABLESTRINGd2i_ASN1_SEQUENCE_ANYd2i_ASN1_SETd2i_ASN1_SET_ANYd2i_ASN1_T61STRINGd2i_ASN1_TIMEd2i_ASN1_TYPEd2i_ASN1_UINTEGERd2i_ASN1_UNIVERSALSTRINGd2i_ASN1_UTCTIMEd2i_ASN1_UTF8STRINGd2i_ASN1_VISIBLESTRINGd2i_ASN1_bytesd2i_ASN1_type_bytesd2i_AUTHORITY_INFO_ACCESSd2i_AUTHORITY_KEYIDd2i_AutoPrivateKeyd2i_BASIC_CONSTRAINTSd2i_CERTIFICATEPOLICIESd2i_CMS_ContentInfod2i_CMS_ReceiptRequestd2i_CMS_biod2i_CRL_DIST_POINTSd2i_DHparamsd2i_DHxparamsd2i_DIRECTORYSTRINGd2i_DISPLAYTEXTd2i_DIST_POINTd2i_DIST_POINT_NAMEd2i_DSAPrivateKeyd2i_DSAPrivateKey_biod2i_DSAPrivateKey_fpd2i_DSAPublicKeyd2i_DSA_PUBKEYd2i_DSA_PUBKEY_biod2i_DSA_PUBKEY_fpd2i_DSA_SIGd2i_DSAparamsd2i_ECDSA_SIGd2i_ECPKParametersd2i_ECParametersd2i_ECPrivateKeyd2i_ECPrivateKey_biod2i_ECPrivateKey_fpd2i_EC_PUBKEYd2i_EC_PUBKEY_biod2i_EC_PUBKEY_fpd2i_EDIPARTYNAMEd2i_ESS_CERT_IDd2i_ESS_ISSUER_SERIALd2i_ESS_SIGNING_CERTd2i_EXTENDED_KEY_USAGEd2i_GENERAL_NAMEd2i_GENERAL_NAMESd2i_ISSUING_DIST_POINTd2i_KRB5_APREQd2i_KRB5_APREQBODYd2i_KRB5_AUTHDATAd2i_KRB5_AUTHENTd2i_KRB5_AUTHENTBODYd2i_KRB5_CHECKSUMd2i_KRB5_ENCDATAd2i_KRB5_ENCKEYd2i_KRB5_PRINCNAMEd2i_KRB5_TICKETd2i_KRB5_TKTBODYd2i_NETSCAPE_CERT_SEQUENCEd2i_NETSCAPE_SPKACd2i_NETSCAPE_SPKId2i_NETSCAPE_X509d2i_NOTICEREFd2i_Netscape_RSAd2i_OCSP_BASICRESPd2i_OCSP_CERTIDd2i_OCSP_CERTSTATUSd2i_OCSP_CRLIDd2i_OCSP_ONEREQd2i_OCSP_REQINFOd2i_OCSP_REQUESTd2i_OCSP_RESPBYTESd2i_OCSP_RESPDATAd2i_OCSP_RESPIDd2i_OCSP_RESPONSEd2i_OCSP_REVOKEDINFOd2i_OCSP_SERVICELOCd2i_OCSP_SIGNATUREd2i_OCSP_SINGLERESPd2i_OTHERNAMEd2i_PBE2PARAMd2i_PBEPARAMd2i_PBKDF2PARAMd2i_PKCS12d2i_PKCS12_BAGSd2i_PKCS12_MAC_DATAd2i_PKCS12_SAFEBAGd2i_PKCS12_biod2i_PKCS12_fpd2i_PKCS7d2i_PKCS7_DIGESTd2i_PKCS7_ENCRYPTd2i_PKCS7_ENC_CONTENTd2i_PKCS7_ENVELOPEd2i_PKCS7_ISSUER_AND_SERIALd2i_PKCS7_RECIP_INFOd2i_PKCS7_SIGNEDd2i_PKCS7_SIGNER_INFOd2i_PKCS7_SIGN_ENVELOPEd2i_PKCS7_biod2i_PKCS7_fpd2i_PKCS8PrivateKey_biod2i_PKCS8PrivateKey_fpd2i_PKCS8_PRIV_KEY_INFOd2i_PKCS8_PRIV_KEY_INFO_biod2i_PKCS8_PRIV_KEY_INFO_fpd2i_PKCS8_biod2i_PKCS8_fpd2i_PKEY_USAGE_PERIODd2i_POLICYINFOd2i_POLICYQUALINFOd2i_PROXY_CERT_INFO_EXTENSIONd2i_PROXY_POLICYd2i_PUBKEYd2i_PUBKEY_biod2i_PUBKEY_fpd2i_PrivateKeyd2i_PrivateKey_biod2i_PrivateKey_fpd2i_PublicKeyd2i_RSAPrivateKeyd2i_RSAPrivateKey_biod2i_RSAPrivateKey_fpd2i_RSAPublicKeyd2i_RSAPublicKey_biod2i_RSAPublicKey_fpd2i_RSA_NETd2i_RSA_OAEP_PARAMSd2i_RSA_PSS_PARAMSd2i_RSA_PUBKEYd2i_RSA_PUBKEY_biod2i_RSA_PUBKEY_fpd2i_SXNETd2i_SXNETIDd2i_TS_ACCURACYd2i_TS_MSG_IMPRINTd2i_TS_MSG_IMPRINT_biod2i_TS_MSG_IMPRINT_fpd2i_TS_REQd2i_TS_REQ_biod2i_TS_REQ_fpd2i_TS_RESPd2i_TS_RESP_biod2i_TS_RESP_fpd2i_TS_STATUS_INFOd2i_TS_TST_INFOd2i_TS_TST_INFO_biod2i_TS_TST_INFO_fpd2i_USERNOTICEd2i_X509d2i_X509_ALGORd2i_X509_ALGORSd2i_X509_ATTRIBUTEd2i_X509_AUXd2i_X509_CERT_AUXd2i_X509_CERT_PAIRd2i_X509_CINFd2i_X509_CRLd2i_X509_CRL_INFOd2i_X509_CRL_biod2i_X509_CRL_fpd2i_X509_EXTENSIONd2i_X509_EXTENSIONSd2i_X509_NAMEd2i_X509_NAME_ENTRYd2i_X509_PKEYd2i_X509_PUBKEYd2i_X509_REQd2i_X509_REQ_INFOd2i_X509_REQ_biod2i_X509_REQ_fpd2i_X509_REVOKEDd2i_X509_SIGd2i_X509_VALd2i_X509_biod2i_X509_fpget_rfc2409_prime_1024get_rfc2409_prime_768get_rfc3526_prime_1536get_rfc3526_prime_2048get_rfc3526_prime_3072get_rfc3526_prime_4096get_rfc3526_prime_6144get_rfc3526_prime_8192hex_to_stringi2a_ACCESS_DESCRIPTIONi2a_ASN1_ENUMERATEDi2a_ASN1_INTEGERi2a_ASN1_OBJECTi2a_ASN1_STRINGi2b_PVK_bioi2b_PrivateKey_bioi2b_PublicKey_bioi2c_ASN1_BIT_STRINGi2c_ASN1_INTEGERi2d_ACCESS_DESCRIPTIONi2d_ASN1_BIT_STRINGi2d_ASN1_BMPSTRINGi2d_ASN1_BOOLEANi2d_ASN1_ENUMERATEDi2d_ASN1_GENERALIZEDTIMEi2d_ASN1_GENERALSTRINGi2d_ASN1_IA5STRINGi2d_ASN1_INTEGERi2d_ASN1_NULLi2d_ASN1_OBJECTi2d_ASN1_OCTET_STRINGi2d_ASN1_PRINTABLEi2d_ASN1_PRINTABLESTRINGi2d_ASN1_SEQUENCE_ANYi2d_ASN1_SETi2d_ASN1_SET_ANYi2d_ASN1_T61STRINGi2d_ASN1_TIMEi2d_ASN1_TYPEi2d_ASN1_UNIVERSALSTRINGi2d_ASN1_UTCTIMEi2d_ASN1_UTF8STRINGi2d_ASN1_VISIBLESTRINGi2d_ASN1_bio_streami2d_ASN1_bytesi2d_AUTHORITY_INFO_ACCESSi2d_AUTHORITY_KEYIDi2d_BASIC_CONSTRAINTSi2d_CERTIFICATEPOLICIESi2d_CMS_ContentInfoi2d_CMS_ReceiptRequesti2d_CMS_bioi2d_CMS_bio_streami2d_CRL_DIST_POINTSi2d_DHparamsi2d_DHxparamsi2d_DIRECTORYSTRINGi2d_DISPLAYTEXTi2d_DIST_POINTi2d_DIST_POINT_NAMEi2d_DSAPrivateKeyi2d_DSAPrivateKey_bioi2d_DSAPrivateKey_fpi2d_DSAPublicKeyi2d_DSA_PUBKEYi2d_DSA_PUBKEY_bioi2d_DSA_PUBKEY_fpi2d_DSA_SIGi2d_DSAparamsi2d_ECDSA_SIGi2d_ECPKParametersi2d_ECParametersi2d_ECPrivateKeyi2d_ECPrivateKey_bioi2d_ECPrivateKey_fpi2d_EC_PUBKEYi2d_EC_PUBKEY_bioi2d_EC_PUBKEY_fpi2d_EDIPARTYNAMEi2d_ESS_CERT_IDi2d_ESS_ISSUER_SERIALi2d_ESS_SIGNING_CERTi2d_EXTENDED_KEY_USAGEi2d_GENERAL_NAMEi2d_GENERAL_NAMESi2d_ISSUING_DIST_POINTi2d_KRB5_APREQi2d_KRB5_APREQBODYi2d_KRB5_AUTHDATAi2d_KRB5_AUTHENTi2d_KRB5_AUTHENTBODYi2d_KRB5_CHECKSUMi2d_KRB5_ENCDATAi2d_KRB5_ENCKEYi2d_KRB5_PRINCNAMEi2d_KRB5_TICKETi2d_KRB5_TKTBODYi2d_NETSCAPE_CERT_SEQUENCEi2d_NETSCAPE_SPKACi2d_NETSCAPE_SPKIi2d_NETSCAPE_X509i2d_NOTICEREFi2d_Netscape_RSAi2d_OCSP_BASICRESPi2d_OCSP_CERTIDi2d_OCSP_CERTSTATUSi2d_OCSP_CRLIDi2d_OCSP_ONEREQi2d_OCSP_REQINFOi2d_OCSP_REQUESTi2d_OCSP_RESPBYTESi2d_OCSP_RESPDATAi2d_OCSP_RESPIDi2d_OCSP_RESPONSEi2d_OCSP_REVOKEDINFOi2d_OCSP_SERVICELOCi2d_OCSP_SIGNATUREi2d_OCSP_SINGLERESPi2d_OTHERNAMEi2d_PBE2PARAMi2d_PBEPARAMi2d_PBKDF2PARAMi2d_PKCS12i2d_PKCS12_BAGSi2d_PKCS12_MAC_DATAi2d_PKCS12_SAFEBAGi2d_PKCS12_bioi2d_PKCS12_fpi2d_PKCS7i2d_PKCS7_DIGESTi2d_PKCS7_ENCRYPTi2d_PKCS7_ENC_CONTENTi2d_PKCS7_ENVELOPEi2d_PKCS7_ISSUER_AND_SERIALi2d_PKCS7_NDEFi2d_PKCS7_RECIP_INFOi2d_PKCS7_SIGNEDi2d_PKCS7_SIGNER_INFOi2d_PKCS7_SIGN_ENVELOPEi2d_PKCS7_bioi2d_PKCS7_bio_streami2d_PKCS7_fpi2d_PKCS8PrivateKeyInfo_bioi2d_PKCS8PrivateKeyInfo_fpi2d_PKCS8PrivateKey_bioi2d_PKCS8PrivateKey_fpi2d_PKCS8PrivateKey_nid_bioi2d_PKCS8PrivateKey_nid_fpi2d_PKCS8_PRIV_KEY_INFOi2d_PKCS8_PRIV_KEY_INFO_bioi2d_PKCS8_PRIV_KEY_INFO_fpi2d_PKCS8_bioi2d_PKCS8_fpi2d_PKEY_USAGE_PERIODi2d_POLICYINFOi2d_POLICYQUALINFOi2d_PROXY_CERT_INFO_EXTENSIONi2d_PROXY_POLICYi2d_PUBKEYi2d_PUBKEY_bioi2d_PUBKEY_fpi2d_PrivateKeyi2d_PrivateKey_bioi2d_PrivateKey_fpi2d_PublicKeyi2d_RSAPrivateKeyi2d_RSAPrivateKey_bioi2d_RSAPrivateKey_fpi2d_RSAPublicKeyi2d_RSAPublicKey_bioi2d_RSAPublicKey_fpi2d_RSA_NETi2d_RSA_OAEP_PARAMSi2d_RSA_PSS_PARAMSi2d_RSA_PUBKEYi2d_RSA_PUBKEY_bioi2d_RSA_PUBKEY_fpi2d_SXNETi2d_SXNETIDi2d_TS_ACCURACYi2d_TS_MSG_IMPRINTi2d_TS_MSG_IMPRINT_bioi2d_TS_MSG_IMPRINT_fpi2d_TS_REQi2d_TS_REQ_bioi2d_TS_REQ_fpi2d_TS_RESPi2d_TS_RESP_bioi2d_TS_RESP_fpi2d_TS_STATUS_INFOi2d_TS_TST_INFOi2d_TS_TST_INFO_bioi2d_TS_TST_INFO_fpi2d_USERNOTICEi2d_X509i2d_X509_ALGORi2d_X509_ALGORSi2d_X509_ATTRIBUTEi2d_X509_AUXi2d_X509_CERT_AUXi2d_X509_CERT_PAIRi2d_X509_CINFi2d_X509_CRLi2d_X509_CRL_INFOi2d_X509_CRL_bioi2d_X509_CRL_fpi2d_X509_EXTENSIONi2d_X509_EXTENSIONSi2d_X509_NAMEi2d_X509_NAME_ENTRYi2d_X509_PKEYi2d_X509_PUBKEYi2d_X509_REQi2d_X509_REQ_INFOi2d_X509_REQ_bioi2d_X509_REQ_fpi2d_X509_REVOKEDi2d_X509_SIGi2d_X509_VALi2d_X509_bioi2d_X509_fpi2d_re_X509_tbsi2o_ECPublicKeyi2s_ASN1_ENUMERATEDi2s_ASN1_ENUMERATED_TABLEi2s_ASN1_INTEGERi2s_ASN1_OCTET_STRINGi2t_ASN1_OBJECTi2v_ASN1_BIT_STRINGi2v_GENERAL_NAMEi2v_GENERAL_NAMESidea_cbc_encryptidea_cfb64_encryptidea_ecb_encryptidea_encryptidea_ofb64_encryptidea_optionsidea_set_decrypt_keyidea_set_encrypt_keylh_deletelh_doalllh_doall_arglh_freelh_insertlh_newlh_node_statslh_node_stats_biolh_node_usage_statslh_node_usage_stats_biolh_num_itemslh_retrievelh_statslh_stats_biolh_strhashname_cmpo2i_ECPublicKeypitem_freepitem_newpqueue_findpqueue_freepqueue_insertpqueue_iteratorpqueue_newpqueue_nextpqueue_peekpqueue_poppqueue_printpqueue_sizeprivate_AES_set_decrypt_keyprivate_AES_set_encrypt_keyprivate_RC4_set_keys2i_ASN1_INTEGERs2i_ASN1_OCTET_STRINGsk_deep_copysk_deletesk_delete_ptrsk_dupsk_findsk_find_exsk_freesk_insertsk_is_sortedsk_newsk_new_nullsk_numsk_popsk_pop_freesk_pushsk_setsk_set_cmp_funcsk_shiftsk_sortsk_unshiftsk_valuesk_zerostring_to_hexv2i_ASN1_BIT_STRINGv2i_GENERAL_NAMEv2i_GENERAL_NAMESv2i_GENERAL_NAME_ex00 X PƘPPTPzb>.JzbRB2"ܚ̚Л*:rfXH6""*4>HR`jxΖؖ$,6@LT^hrz—ʗҗܗ",4BNXblvԘ:Xpʙؙʕts74   opWS2_32.dll0CreateCompatibleBitmapDeleteObjectGetDeviceCapsGetDIBits)GetObjectWGDI32.dllDeregisterEventSourceRegisterEventSourceWReportEventWADVAPI32.dllGetProcessWindowStationGetUserObjectInformationWQMessageBoxW6GetDCReleaseDCUSER32.dllO_snwprintfX_exit`getenv strtoulstrchrkwcsstr__iob_funcsscanf_vsnprintf_vsnwprintfraisememcmpreallocmallocPfreememcpyY_localtime64_time64memset_gmtime64u_stricmp_strnicmpO_errnocallocmemmove_readp_writepisdigitisxdigitatoisprintfstrncpystrstrKfputs"fclose+feof-ferror3fflush6fgetsj_filenoFfopenNfreadVfseekXftell[fwriteU_wfopenB_setmodeperrorqsortstrcmp__fdopensetvbuf_chmod_openl_stat64i32 strerrorvisspacelisalnum3tolowerstrncmpwisupperstrrchrHfprintfmemchrstrtolsignal_getchprintfMSVCR120.dll__crt_debugger_hook__crtUnhandledException__crtTerminateProcess}__crtCaptureCurrentContext~__crtCapturePreviousContext\__C_specific_handler]__CppXcptFilter_amsg_exitl_malloc_crt_initterm_initterm_e[_lock_unlock _calloc_crt__dllonexit_onexit{__clean_type_info_names_internalWExitProcessmGetModuleHandleWGetProcAddressGetStdHandleEGetFileTypeWriteFileVGetLastErrorGetCurrentThreadIdMultiByteToWideCharnFindCloseyFindFirstFileWFindNextFileWWideCharToMultiByteRtlVirtualUnwindCloseHandleFreeLibraryLoadLibraryALoadLibraryWSetLastErrorGetSystemTimelSystemTimeToFileTime0QueryPerformanceCounterGetCurrentProcessIdGetTickCount,GlobalMemoryStatusFlushConsoleInputBufferjIsDebuggerPresentpIsProcessorFeaturePresent%EncodePointerDecodePointerGetSystemTimeAsFileTimeKERNEL32.dllP@0 p`P@%S OPENSSL_Uplink(%p,%02X): unimplemented functionno host applicationOPENSSL_Applinkno OPENSSL_Applinkno ApplinkTabledynamicERROROPENSSL_ia32cap%I64i<>errex_datax509x509_infodsax509_pkeyrsax509_crlsslx509_reqrand2BIOevp_pkeydhx509_storedsossl_ctxssl_certengineuissl_sessionecssl_sess_certssl_methodrandecdsabndebug_mallocgethostbynamegetservbynamereaddirRSA_blindingdebug_malloc2dynlockecdhec_pre_compstorecompfipsfips2.\crypto\cryptlib.c.\crypto\cryptlib.c.\crypto\cryptlib.c.\crypto\cryptlib.c.\crypto\cryptlib.c.\crypto\cryptlib.c.\crypto\cryptlib.c.\crypto\cryptlib.c.\crypto\cryptlib.c.\crypto\cryptlib.c.\crypto\cryptlib.c.\crypto\cryptlib.c.\crypto\cryptlib.c.\crypto\cryptlib.c.\crypto\cryptlib.c.\crypto\cryptlib.c.\crypto\cryptlib.c.\crypto\cryptlib.c.\crypto\cryptlib.c.\crypto\cryptlib.c_OPENSSL_isserviceService-0xno stack?OpenSSLOpenSSL: FATALpointer != NULL.\crypto\cryptlib.c%s(%d): OpenSSL internal error, assertion failed: %s .\crypto\mem.c.\crypto\mem_dbg.c.\crypto\mem_dbg.c" [%02d:%02d:%02d] %5lu file=%s, line=%d, thread=%lu, number=%d, address=%08lX thread=%lu, file=%s, line=%d, info="%ld bytes leaked in %d chunks .\crypto\mem_dbg.c.\crypto\mem_dbg.c.\crypto\mem_dbg.c.\crypto\mem_dbg.c.\crypto\mem_dbg.c.\crypto\mem_dbg.c.\crypto\mem_dbg.c.\crypto\mem_dbg.c.\crypto\mem_dbg.c.\crypto\mem_dbg.c.\crypto\mem_dbg.c.\crypto\mem_dbg.cOpenSSL 1.0.2k 26 Jan 2017built on: reproducible build, date unspecifiedcompiler: cl -D_USING_V110_SDK71_ -D_WINSOCK_DEPRECATED_NO_WARNINGS /MD /Ox -DOPENSSL_THREADS -DDSO_WIN32 -D_USING_V110_SDK71_ -D_WINSOCK_DEPRECATED_NO_WARNINGS -W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DOPENSSL_USE_APPLINK -I. -DOPENSSL_NO_RC5 -DOPENSSL_NO_MD2 -DOPENSSL_NO_SSL2 -DOPENSSL_NO_KRB5 -DOPENSSL_NO_JPAKE -DOPENSSL_NO_WEAK_SSL_CIPHERS -DOPENSSL_NO_STATIC_ENGINE VC-WIN64AOPENSSLDIR: "/usr/local/ssl"not available.\crypto\ex_data.c.\crypto\ex_data.cdp0.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c.\crypto\ex_data.c@ppP`د0CRYPTO_get_ex_new_indexCRYPTO_get_new_dynlockidCRYPTO_get_new_lockidCRYPTO_set_ex_dataDEF_ADD_INDEXDEF_GET_CLASSFIPS_mode_setINT_DUP_EX_DATAINT_FREE_EX_DATAINT_NEW_EX_DATAepdfips mode not supportedno dynlock create callback/**.\crypto\o_fips.cȰj <= (int)sizeof(ctx->key).\crypto\hmac\hmac.c.\crypto\hmac\hm_ameth.cHMACOpenSSL HMAC method.\crypto\hmac\hm_pmeth.ckeyhexkey.\crypto\cmac\cmac.cCMACOpenSSL CMAC methodkeycipherhexkeyidxcisc2intlongdes(%s,%s,%s,%s).\crypto\des\enc_read.c.\crypto\des\enc_read.c.\crypto\des\enc_read.c.\crypto\des\enc_writ.cidea(int)idea(short)blowfish(idx)aes(partial)in && out && key && ivec.\crypto\aes\aes_ige.c(AES_ENCRYPT == enc) || (AES_DECRYPT == enc).\crypto\aes\aes_ige.c(length % AES_BLOCK_SIZE) == 0.\crypto\aes\aes_ige.cin && out && key && ivec.\crypto\aes\aes_ige.c(AES_ENCRYPT == enc) || (AES_DECRYPT == enc).\crypto\aes\aes_ige.c(length % AES_BLOCK_SIZE) == 0.\crypto\aes\aes_ige.c.\crypto\modes\gcm128.c.\crypto\bn\bn_add.c.\crypto\bn\bn_div.c.\crypto\bn\bn_div.c.\crypto\bn\bn_exp.c.\crypto\bn\bn_exp.c.\crypto\bn\bn_exp.c.\crypto\bn\bn_exp.c.\crypto\bn\bn_exp.c.\crypto\bn\bn_exp.c.\crypto\bn\bn_exp.c.\crypto\bn\bn_exp.c.\crypto\bn\bn_lib.c.\crypto\bn\bn_lib.c.\crypto\bn\bn_lib.c.\crypto\bn\bn_lib.c.\crypto\bn\bn_lib.c.\crypto\bn\bn_lib.c.\crypto\bn\bn_ctx.c.\crypto\bn\bn_ctx.c.\crypto\bn\bn_ctx.c.\crypto\bn\bn_ctx.c.\crypto\bn\bn_ctx.c.\crypto\bn\bn_ctx.c.\crypto\bn\bn_mod.c.\crypto\bn\bn_print.c%llu%019llu-0bn(%d,%d)0.\crypto\bn\bn_print.c.\crypto\bn\bn_print.c.\crypto\bn\bn_print.c.\crypto\bn\bn_print.c.\crypto\bn\bn_print.c.\crypto\bn\bn_rand.c.\crypto\bn\bn_rand.c.\crypto\bn\bn_rand.c.\crypto\bn\bn_rand.c.\crypto\bn\bn_rand.c.\crypto\bn\bn_rand.c.\crypto\bn\bn_shift.c.\crypto\bn\bn_shift.c.\crypto\bn\bn_blind.c.\crypto\bn\bn_blind.c.\crypto\bn\bn_blind.c.\crypto\bn\bn_blind.c.\crypto\bn\bn_blind.c.\crypto\bn\bn_blind.c.\crypto\bn\bn_sqrt.c.\crypto\bn\bn_sqrt.c.\crypto\bn\bn_sqrt.c.\crypto\bn\bn_sqrt.c.\crypto\bn\bn_sqrt.c.\crypto\bn\bn_sqrt.c.\crypto\bn\bn_gcd.c.\crypto\bn\bn_gcd.c@P8`Pp`x@,ȼ ܼ0 @0P@`Pph `ȽP(8P`p оؾ 0BNRANDBN_BLINDING_convert_exBN_BLINDING_create_paramBN_divBN_BLINDING_invert_exBN_BLINDING_newBN_BLINDING_updateBN_bn2decBN_bn2hexBN_CTX_getBN_CTX_newBN_CTX_startBN_div_no_branchBN_expBN_div_recpbn_expand2BN_EXPAND_INTERNALBN_GF2m_modBN_GF2m_mod_expBN_GF2m_mod_mulBN_GF2m_mod_solve_quadBN_GF2m_mod_solve_quad_arrBN_GF2m_mod_sqrBN_GF2m_mod_sqrtBN_newBN_lshiftBN_mod_exp2_montBN_mod_exp_montBN_mod_exp_mont_consttimeBN_mod_exp_mont_wordBN_mod_exp_recpBN_mod_exp_simpleBN_mod_inverseBN_mod_inverse_no_branchBN_mod_lshift_quickBN_mod_mul_reciprocalBN_mod_sqrtBN_mpi2bnBN_randBN_rand_rangeBN_rshiftBN_usubd@ePr`vpfghinjswo(k8lHtXphqxmarg2 lt arg3bad reciprocalbignum too longbits too smallcalled with even modulusdiv by zeroencoding errorexpand on static bignum datainput not reducedinvalid lengthinvalid rangeinvalid shiftnot a squarenot initializedno inverseno solutionp is not primetoo many iterationstoo many temporary variables.\crypto\bn\bn_recp.c.\crypto\bn\bn_recp.c.\crypto\bn\bn_mont.c.\crypto\bn\bn_mont.c.\crypto\bn\bn_mont.c.\crypto\bn\bn_mont.c.\crypto\bn\bn_mont.c.\crypto\bn\bn_mpi.c.\crypto\bn\bn_mpi.c.\crypto\bn\bn_exp2.c.\crypto\bn\bn_gf2m.c.\crypto\bn\bn_gf2m.c.\crypto\bn\bn_gf2m.c.\crypto\bn\bn_gf2m.c.\crypto\bn\bn_gf2m.c.\crypto\bn\bn_gf2m.c.\crypto\bn\bn_gf2m.c.\crypto\bn\bn_gf2m.c.\crypto\bn\bn_gf2m.c.\crypto\bn\bn_gf2m.c.\crypto\bn\bn_gf2m.c.\crypto\bn\bn_gf2m.c.\crypto\bn\bn_gf2m.cPP P`Eric Young's PKCS#1 RSA.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_eay.c.\crypto\rsa\rsa_gen.c.\crypto\rsa\rsa_gen.c.\crypto\rsa\rsa_lib.c.\crypto\rsa\rsa_lib.c.\crypto\rsa\rsa_lib.c.\crypto\rsa\rsa_lib.c.\crypto\rsa\rsa_lib.c.\crypto\rsa\rsa_lib.c.\crypto\rsa\rsa_lib.c.\crypto\rsa\rsa_lib.c.\crypto\rsa\rsa_sign.c.\crypto\rsa\rsa_sign.c.\crypto\rsa\rsa_sign.c.\crypto\rsa\rsa_sign.c.\crypto\rsa\rsa_sign.c.\crypto\rsa\rsa_sign.c.\crypto\rsa\rsa_sign.c.\crypto\rsa\rsa_sign.c.\crypto\rsa\rsa_sign.c.\crypto\rsa\rsa_sign.c.\crypto\rsa\rsa_sign.c.\crypto\rsa\rsa_sign.c.\crypto\rsa\rsa_sign.c.\crypto\rsa\rsa_sign.c.\crypto\rsa\rsa_sign.c.\crypto\rsa\rsa_sign.c.\crypto\rsa\rsa_sign.c.\crypto\rsa\rsa_saos.c.\crypto\rsa\rsa_saos.c.\crypto\rsa\rsa_saos.c.\crypto\rsa\rsa_saos.c.\crypto\rsa\rsa_saos.c.\crypto\rsa\rsa_saos.c.\crypto\rsa\rsa_saos.calgorithm mismatchbad e valuebad fixed header decryptbad pad byte countbad signatureblock type is not 01block type is not 02data greater than mod lendata too largedata too large for key sizedata too large for modulusdata too smalldata too small for key sizedigest does not matchdigest too big for rsa keydmp1 not congruent to ddmq1 not congruent to dd e not congruent to 1first octet invalidillegal or unsupported padding modeinvalid digestinvalid digest lengthinvalid headerinvalid keybitsinvalid labelinvalid message lengthinvalid mgf1 mdinvalid oaep parametersinvalid paddinginvalid padding modeinvalid pss parametersinvalid pss saltleninvalid salt lengthinvalid trailerinvalid x931 digestiqmp not inverse of qkey size too smalllast octet invalidmodulus too largenon fips rsa methodno public exponentnull before block missingn does not equal p qoaep decoding erroroperation not allowed in fips modeoperation not supported for this keytypepadding check failedpkcs decoding errorp not primeq not primersa operations not supportedsalt length check failedsalt length recovery failedsslv3 rollback attackthe asn1 object identifier is not known for this mdunknown algorithm typeunknown digestunknown mask digestunknown padding typeunknown pss digestunsupported encryption typeunsupported label sourceunsupported mask algorithmunsupported mask parameterunsupported signature typevalue missingwrong signature length  @0 (@ Ph x  P`p0H ` x  0@P` p8Ph @ (@Xp  00@@` Pp h   P`p8HhP CHECK_PADDING_MDDO_RSA_PRINTINT_RSA_VERIFYMEMORY_LOCKOLD_RSA_PRIV_DECODEPKEY_RSA_CTRLPKEY_RSA_CTRL_STRPKEY_RSA_SIGNPKEY_RSA_VERIFYPKEY_RSA_VERIFYRECOVERRSA_ALGOR_TO_MDRSA_BUILTIN_KEYGENRSA_check_keyRSA_CMS_DECRYPTRSA_EAY_PRIVATE_DECRYPTRSA_EAY_PRIVATE_ENCRYPTRSA_EAY_PUBLIC_DECRYPTRSA_EAY_PUBLIC_ENCRYPTRSA_generate_keyRSA_generate_key_exRSA_ITEM_VERIFYRSA_memory_lockRSA_MGF1_TO_MDRSA_new_methodRSA_NULLRSA_NULL_MOD_EXPRSA_NULL_PRIVATE_DECRYPTRSA_NULL_PRIVATE_ENCRYPTRSA_NULL_PUBLIC_DECRYPTRSA_NULL_PUBLIC_ENCRYPTRSA_padding_add_noneRSA_padding_add_PKCS1_OAEPRSA_padding_add_PKCS1_OAEP_mgf1RSA_padding_add_PKCS1_PSSRSA_padding_add_PKCS1_PSS_mgf1RSA_padding_add_PKCS1_type_1RSA_padding_add_PKCS1_type_2RSA_padding_add_SSLv23RSA_padding_add_X931RSA_padding_check_noneRSA_padding_check_PKCS1_OAEPRSA_padding_check_PKCS1_OAEP_mgf1RSA_padding_check_PKCS1_type_1RSA_padding_check_PKCS1_type_2RSA_padding_check_SSLv23RSA_padding_check_X931RSA_printRSA_print_fpRSA_private_decryptRSA_private_encryptRSA_PRIV_DECODERSA_PRIV_ENCODERSA_PSS_TO_CTXRSA_public_decryptRSA_public_encryptRSA_PUB_DECODERSA_setup_blindingRSA_signRSA_sign_ASN1_OCTET_STRINGRSA_verifyRSA_verify_ASN1_OCTET_STRINGRSA_verify_PKCS1_PSSRSA_verify_PKCS1_PSS_mgf1d@eXfhghjklmn0oPz`p|}{@Phx0HX~pxiq y8Pxr8sXtpuv8Xxw.\crypto\rsa\rsa_pk1.c.\crypto\rsa\rsa_pk1.c.\crypto\rsa\rsa_pk1.c.\crypto\rsa\rsa_pk1.c.\crypto\rsa\rsa_pk1.c.\crypto\rsa\rsa_pk1.c.\crypto\rsa\rsa_pk1.c.\crypto\rsa\rsa_pk1.c.\crypto\rsa\rsa_pk1.c.\crypto\rsa\rsa_pk1.c.\crypto\rsa\rsa_ssl.c.\crypto\rsa\rsa_ssl.c.\crypto\rsa\rsa_ssl.c.\crypto\rsa\rsa_ssl.c.\crypto\rsa\rsa_ssl.c.\crypto\rsa\rsa_ssl.c.\crypto\rsa\rsa_none.c.\crypto\rsa\rsa_none.c.\crypto\rsa\rsa_none.c.\crypto\rsa\rsa_oaep.c.\crypto\rsa\rsa_oaep.c.\crypto\rsa\rsa_oaep.c.\crypto\rsa\rsa_oaep.c.\crypto\rsa\rsa_oaep.c.\crypto\rsa\rsa_oaep.c.\crypto\rsa\rsa_oaep.c.\crypto\rsa\rsa_oaep.c.\crypto\rsa\rsa_oaep.c.\crypto\rsa\rsa_chk.c.\crypto\rsa\rsa_chk.c.\crypto\rsa\rsa_chk.c.\crypto\rsa\rsa_chk.c.\crypto\rsa\rsa_chk.c.\crypto\rsa\rsa_chk.c.\crypto\rsa\rsa_chk.c.\crypto\rsa\rsa_chk.c.\crypto\rsa\rsa_chk.c.\crypto\rsa\rsa_chk.c.\crypto\rsa\rsa_chk.c` P P Null RSA.\crypto\rsa\rsa_null.c.\crypto\rsa\rsa_null.c.\crypto\rsa\rsa_null.c.\crypto\rsa\rsa_null.c.\crypto\rsa\rsa_pss.c.\crypto\rsa\rsa_pss.c.\crypto\rsa\rsa_pss.c.\crypto\rsa\rsa_pss.c.\crypto\rsa\rsa_pss.c.\crypto\rsa\rsa_pss.c.\crypto\rsa\rsa_pss.c.\crypto\rsa\rsa_pss.c.\crypto\rsa\rsa_pss.c.\crypto\rsa\rsa_pss.c.\crypto\rsa\rsa_pss.c.\crypto\rsa\rsa_pss.c.\crypto\rsa\rsa_pss.c.\crypto\rsa\rsa_x931.c.\crypto\rsa\rsa_x931.c.\crypto\rsa\rsa_x931.c.\crypto\rsa\rsa_x931.c.\crypto\rsa\rsa_x931.cversionnedpqdmp1dmq1iqmpRSAneRSAhashAlgorithmmaskGenAlgorithmsaltLengthtrailerFieldRSA_PSS_PARAMShashFuncmaskGenFuncpSourceFuncRSA_OAEP_PARAMS.\crypto\rsa\rsa_ameth.c.\crypto\rsa\rsa_ameth.cRSA.\crypto\rsa\rsa_ameth.c .\crypto\rsa\rsa_ameth.c .\crypto\rsa\rsa_ameth.c with .\crypto\rsa\rsa_ameth.c .\crypto\rsa\rsa_ameth.c .\crypto\rsa\rsa_ameth.c .\crypto\rsa\rsa_ameth.c.\crypto\rsa\rsa_ameth.cOpenSSL RSA method.\crypto\rsa\rsa_ameth.c.\crypto\rsa\rsa_ameth.c.\crypto\rsa\rsa_ameth.c.\crypto\rsa\rsa_ameth.c.\crypto\rsa\rsa_ameth.c.\crypto\rsa\rsa_ameth.cPrivate-Key: (%d bit) modulus:publicExponent:Public-Key: (%d bit) Modulus:Exponent:privateExponent:prime1:prime2:exponent1:exponent2:coefficient: (INVALID PSS PARAMETERS) Hash Algorithm: sha1 (default)Mask Algorithm: INVALIDmgf1 with sha1 (default)Salt Length: 0x14 (default)Trailer Field: 0xBC (default).\crypto\rsa\rsa_ameth.c.\crypto\rsa\rsa_ameth.c.\crypto\rsa\rsa_ameth.c.\crypto\rsa\rsa_ameth.c.\crypto\rsa\rsa_prn.c.\crypto\rsa\rsa_pmeth.c.\crypto\rsa\rsa_pmeth.cpkcs1sslv23pss.\crypto\rsa\rsa_pmeth.c.\crypto\rsa\rsa_pmeth.c.\crypto\rsa\rsa_pmeth.c.\crypto\rsa\rsa_pmeth.c.\crypto\rsa\rsa_pmeth.c.\crypto\rsa\rsa_pmeth.c.\crypto\rsa\rsa_pmeth.c.\crypto\rsa\rsa_pmeth.c.\crypto\rsa\rsa_pmeth.c.\crypto\rsa\rsa_pmeth.c.\crypto\rsa\rsa_pmeth.c.\crypto\rsa\rsa_pmeth.c.\crypto\rsa\rsa_pmeth.c.\crypto\rsa\rsa_pmeth.c.\crypto\rsa\rsa_pmeth.c.\crypto\rsa\rsa_pmeth.c.\crypto\rsa\rsa_pmeth.c.\crypto\rsa\rsa_pmeth.crsa_padding_modenoneoeapoaepx931.\crypto\rsa\rsa_pmeth.crsa_pss_saltlenrsa_keygen_bitsrsa_keygen_pubexprsa_mgf1_md.\crypto\rsa\rsa_pmeth.crsa_oaep_md.\crypto\rsa\rsa_pmeth.crsa_oaep_label.\crypto\rsa\rsa_crpt.c.\crypto\rsa\rsa_crpt.c.\crypto\rsa\rsa_crpt.c.\crypto\dsa\dsa_gen.c.\crypto\dsa\dsa_gen.c.\crypto\dsa\dsa_gen.c.\crypto\dsa\dsa_gen.c.\crypto\dsa\dsa_lib.c.\crypto\dsa\dsa_lib.c.\crypto\dsa\dsa_lib.c.\crypto\dsa\dsa_lib.c.\crypto\dsa\dsa_lib.c.\crypto\dsa\dsa_lib.c.\crypto\dsa\dsa_asn1.c.\crypto\dsa\dsa_asn1.crsDSA_SIGversionpqgDSApub_keypriv_keypqgDSAppub_keyqgDSADSApub_key.\crypto\dsa\dsa_sign.c  @ P      p @p P h0 x@ P `         0 @  d2i_DSA_SIGDO_DSA_PRINTDSAparams_printDSAparams_print_fpDSA_BUILTIN_PARAMGEN2DSA_do_signDSA_do_verifyDSA_generate_keySIG_CBDSA_generate_parameters_exDSA_new_methodDSA_PARAM_DECODEDSA_print_fpDSA_PRIV_DECODEDSA_PRIV_ENCODEDSA_PUB_DECODEDSA_PUB_ENCODEDSA_signDSA_sign_setupDSA_SIG_newDSA_SIG_PRINTDSA_verifyi2d_DSA_SIGOLD_DSA_PRIV_DECODEPKEY_DSA_CTRLPKEY_DSA_KEYGENf @l Pm `d ph j p e g n o k 0i Hq hbad q valuebn decode errorbn errordata too large for key sizedecode errorinvalid digest typeinvalid parametersmissing parametersmodulus too largeneed new setup valuesnon fips dsa methodno parameters setparameter encoding errorq not primeZ ]_`cpcOpenSSL DSA method.\crypto\dsa\dsa_ossl.c.\crypto\dsa\dsa_ossl.c.\crypto\dsa\dsa_ossl.c.\crypto\dsa\dsa_ossl.c.\crypto\dsa\dsa_ossl.c.\crypto\dsa\dsa_ossl.c.\crypto\dsa\dsa_ossl.c.\crypto\dsa\dsa_ameth.c.\crypto\dsa\dsa_ameth.cpriv: .\crypto\dsa\dsa_ameth.cpub: .\crypto\dsa\dsa_ameth.cP: DSA.\crypto\dsa\dsa_ameth.cQ: .\crypto\dsa\dsa_ameth.cG: .\crypto\dsa\dsa_ameth.cr: .\crypto\dsa\dsa_ameth.cs: .\crypto\dsa\dsa_ameth.c.\crypto\dsa\dsa_ameth.c.\crypto\dsa\dsa_ameth.c.\crypto\dsa\dsa_ameth.c.\crypto\dsa\dsa_ameth.c.\crypto\dsa\dsa_ameth.c.\crypto\dsa\dsa_ameth.c.\crypto\dsa\dsa_ameth.c.\crypto\dsa\dsa_ameth.cPrivate-KeyPublic-KeyDSA-Parameters.\crypto\dsa\dsa_ameth.c.\crypto\dsa\dsa_ameth.c%s: (%d bit) .\crypto\dsa\dsa_ameth.c.\crypto\dsa\dsa_ameth.c.\crypto\dsa\dsa_ameth.c.\crypto\dsa\dsa_ameth.cOpenSSL DSA method.\crypto\dsa\dsa_pmeth.c.\crypto\dsa\dsa_pmeth.c.\crypto\dsa\dsa_pmeth.c.\crypto\dsa\dsa_pmeth.c.\crypto\dsa\dsa_pmeth.cdsa_paramgen_bitsdsa_paramgen_q_bitsdsa_paramgen_md.\crypto\dsa\dsa_prn.c.\crypto\dsa\dsa_prn.c %P %` %p0 %@ %@%P%`% %%p%%% %00%8%H%`%p%%%%%%%%@% %0%@%P%h %%%0%@%P%P%`%p%%%0p%H%X`%h%x%%%BEOS_BIND_FUNCBEOS_BIND_VARBEOS_LOADBEOS_NAME_CONVERTERBEOS_UNLOADDLFCN_BIND_FUNCDLFCN_BIND_VARDLFCN_LOADDLFCN_MERGERDLFCN_NAME_CONVERTERDLFCN_UNLOADDL_BIND_FUNCDL_BIND_VARDL_LOADDL_MERGERDL_NAME_CONVERTERDL_UNLOADDSO_bind_funcDSO_bind_varDSO_convert_filenameDSO_ctrlDSO_freeDSO_get_filenameDSO_get_loaded_filenameDSO_global_lookupDSO_loadDSO_mergeDSO_new_methodDSO_pathbyaddrDSO_set_filenameDSO_set_name_converterDSO_up_refGLOBAL_LOOKUP_FUNCPATHBYADDRVMS_BIND_SYMVMS_LOADVMS_MERGERVMS_UNLOADWIN32_BIND_FUNCWIN32_BIND_VARWIN32_GLOBALLOOKUPWIN32_GLOBALLOOKUP_FUNCWIN32_JOINERWIN32_LOADWIN32_MERGERWIN32_NAME_CONVERTERWIN32_PATHBYADDRWIN32_SPLITTERWIN32_UNLOADcontrol command failedd%n%q%r%0e%8f%Ps%pg%m%o%t%h%p%i%0j%Pk%l%dso already loadedempty file structurefailurefilename too bigcleanup method function failedincorrect file syntaxcould not load the shared libraryname translation failedno filenameno file specificationa null shared library handle was usedset filename failedthe meth_data stack is corruptcould not bind to the requested symbol namecould not unload the shared libraryfunctionality not supported.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c.\crypto\dso\dso_lib.c NULL shared library method.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.c\\.\crypto\dso\dso_win32.c/.\crypto\dso\dso_win32.c\.\crypto\dso\dso_win32.c:.\crypto\dso\dso_win32.c%s.dll%s.\crypto\dso\dso_win32.c).\crypto\dso\dso_win32.c).\crypto\dso\dso_win32.c).\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.cKERNEL32.DLL.\crypto\dso\dso_win32.cCreateToolhelp32Snapshot.\crypto\dso\dso_win32.cModule32FirstModule32Next.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.cKERNEL32.DLL.\crypto\dso\dso_win32.cCreateToolhelp32Snapshot.\crypto\dso\dso_win32.cModule32FirstModule32Next.\crypto\dso\dso_win32.c OpenSSL 'win32' shared library method.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.cfilename(.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.csymname(.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.csymname(.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.c.\crypto\dso\dso_win32.cpglengthDHseedpcounterint_dhvparamsgqjvparamsint_dhx942_dh.\crypto\dh\dh_gen.c.\crypto\dh\dh_gen.ch`p0ФOpenSSL DH Method.\crypto\dh\dh_key.c.\crypto\dh\dh_key.c.\crypto\dh\dh_key.c.\crypto\dh\dh_key.c.\crypto\dh\dh_key.c.\crypto\dh\dh_lib.c.\crypto\dh\dh_lib.c.\crypto\dh\dh_lib.c.\crypto\dh\dh_lib.c.\crypto\dh\dh_lib.c.\crypto\dh\dh_lib.c`PP `0pH `0p@@p 8HCOMPUTE_KEYDHparams_print_fpDH_BUILTIN_GENPARAMSDH_CMS_DECRYPTDH_CMS_SET_PEERKEYDH_CMS_SET_SHARED_INFODH_compute_keyDH_generate_keyDH_generate_parameters_exDH_new_methodDH_PARAM_DECODEDH_PRIV_DECODEDH_PRIV_ENCODEDH_PUB_DECODEDH_PUB_ENCODEDO_DH_PRINTGENERATE_KEYGENERATE_PARAMETERSPKEY_DH_DERIVEPKEY_DH_KEYGENe`mpjhfplngok d8iPqprbad generatorbn decode errorbn errordecode errorinvalid public keykdf parameter errorkeys not setkey size too smallmodulus too largenon fips methodno parameters setno private valueparameter encoding errorpeer key errorshared info error.\crypto\dh\dh_ameth.c.\crypto\dh\dh_ameth.c.\crypto\dh\dh_ameth.c.\crypto\dh\dh_ameth.c.\crypto\dh\dh_ameth.c.\crypto\dh\dh_ameth.c.\crypto\dh\dh_ameth.c.\crypto\dh\dh_ameth.c.\crypto\dh\dh_ameth.c.\crypto\dh\dh_ameth.c.\crypto\dh\dh_ameth.c.\crypto\dh\dh_ameth.c.\crypto\dh\dh_ameth.cDH Private-KeyDH Public-KeyDH Parameters.\crypto\dh\dh_ameth.c%s: (%d bit) private-key:public-key:prime: generator::subgroup order:subgroup factor:seed:%02x%s counter:DHrecommended-private-length: %d bits .\crypto\dh\dh_ameth.cOpenSSL PKCS#3 DH methodX9.42 DHOpenSSL X9.42 DH method.\crypto\dh\dh_ameth.c.\crypto\dh\dh_ameth.c.\crypto\dh\dh_ameth.c.\crypto\dh\dh_ameth.c.\crypto\dh\dh_ameth.c.\crypto\dh\dh_pmeth.c.\crypto\dh\dh_pmeth.c.\crypto\dh\dh_pmeth.c.\crypto\dh\dh_pmeth.cdh_paramgen_prime_lendh_rfc5114dh_paramgen_generatordh_paramgen_subprime_lendh_paramgen_type.\crypto\dh\dh_prn.c"S.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ec_lib.c.\crypto\ec\ecp_smpl.c.\crypto\ec\ecp_smpl.c.\crypto\ec\ecp_smpl.c.\crypto\ec\ecp_smpl.c.\crypto\ec\ecp_smpl.c.\crypto\ec\ecp_smpl.c.\crypto\ec\ecp_smpl.c.\crypto\ec\ecp_smpl.c.\crypto\ec\ecp_mont.c.\crypto\ec\ecp_mont.c.\crypto\ec\ecp_mont.c.\crypto\ec\ecp_mont.c.\crypto\ec\ecp_mont.c.\crypto\ec\ecp_mont.c.\crypto\ec\ecp_nist.c.\crypto\ec\ecp_nist.c.\crypto\ec\ecp_nist.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.c.\crypto\ec\ec_mult.cBN_TO_FELEMCOMPUTE_WNAFd2i_ECParametersd2i_ECPKParametersd2i_ECPrivateKeyDO_EC_KEY_PRINTECDH_CMS_DECRYPTECDH_CMS_SET_SHARED_INFOECKEY_PARAM2TYPEECKEY_PARAM_DECODEECKEY_PRIV_DECODEECKEY_PRIV_ENCODEECKEY_PUB_DECODEECKEY_PUB_ENCODEECKEY_TYPE2PARAMECParameters_printECParameters_print_fpECPKParameters_printECPKParameters_print_fpecp_nistz256_get_affineecp_nistz256_mult_precomputeecp_nistz256_points_mulecp_nistz256_pre_comp_newecp_nistz256_set_wordsecp_nistz256_windowed_mulECP_NIST_MOD_192ECP_NIST_MOD_224ECP_NIST_MOD_256ECP_NIST_MOD_521EC_ASN1_GROUP2CURVEEC_ASN1_GROUP2FIELDIDEC_ASN1_GROUP2PARAMETERSEC_ASN1_GROUP2PKPARAMETERSEC_ASN1_PARAMETERS2GROUPEC_ASN1_PKPARAMETERS2GROUPEC_EX_DATA_set_dataEC_GF2M_MONTGOMERY_POINT_MULTIPLYec_GF2m_simple_group_check_discriminantec_GF2m_simple_group_set_curveec_GF2m_simple_oct2pointec_GF2m_simple_point2octec_GF2m_simple_point_get_affine_coordinatesec_GF2m_simple_point_set_affine_coordinatesec_GF2m_simple_set_compressed_coordinatesec_GFp_mont_field_decodeec_GFp_mont_field_encodeec_GFp_mont_field_mulec_GFp_mont_field_set_to_oneec_GFp_mont_field_sqrec_GFp_mont_group_set_curveEC_GFP_MONT_GROUP_SET_CURVE_GFPec_GFp_nistp224_group_set_curveec_GFp_nistp224_points_mulec_GFp_nistp224_point_get_affine_coordinatesec_GFp_nistp256_group_set_curveec_GFp_nistp256_points_mulec_GFp_nistp256_point_get_affine_coordinatesec_GFp_nistp521_group_set_curveec_GFp_nistp521_points_mulec_GFp_nistp521_point_get_affine_coordinatesec_GFp_nist_field_mulec_GFp_nist_field_sqrec_GFp_nist_group_set_curveec_GFp_simple_group_check_discriminantec_GFp_simple_group_set_curveEC_GFP_SIMPLE_GROUP_SET_CURVE_GFPEC_GFP_SIMPLE_GROUP_SET_GENERATORec_GFp_simple_make_affineec_GFp_simple_oct2pointec_GFp_simple_point2octec_GFp_simple_points_make_affineec_GFp_simple_point_get_affine_coordinatesEC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES_GFPec_GFp_simple_point_set_affine_coordinatesEC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES_GFPec_GFp_simple_set_compressed_coordinatesEC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES_GFPEC_GROUP_checkEC_GROUP_check_discriminantEC_GROUP_copyEC_GROUP_get0_generatorEC_GROUP_get_cofactorEC_GROUP_get_curve_GF2mEC_GROUP_get_curve_GFpEC_GROUP_get_degreeEC_GROUP_get_orderEC_GROUP_get_pentanomial_basisEC_GROUP_get_trinomial_basisEC_GROUP_newEC_GROUP_new_by_curve_nameEC_GROUP_NEW_FROM_DATAEC_GROUP_precompute_multEC_GROUP_set_curve_GF2mEC_GROUP_set_curve_GFpEC_GROUP_SET_EXTRA_DATAEC_GROUP_set_generatorEC_KEY_check_keyEC_KEY_copyEC_KEY_generate_keyEC_KEY_newEC_KEY_printEC_KEY_print_fpEC_KEY_set_public_key_affine_coordinatesEC_POINTs_make_affineEC_POINT_addEC_POINT_cmpEC_POINT_copyEC_POINT_dblEC_POINT_get_affine_coordinates_GF2mEC_POINT_get_affine_coordinates_GFpEC_POINT_get_Jprojective_coordinates_GFpEC_POINT_invertEC_POINT_is_at_infinityEC_POINT_is_on_curveEC_POINT_make_affineEC_POINT_mulEC_POINT_newEC_POINT_oct2pointEC_POINT_point2octEC_POINT_set_affine_coordinates_GF2mEC_POINT_set_affine_coordinates_GFpEC_POINT_set_compressed_coordinates_GF2mEC_POINT_set_compressed_coordinates_GFpEC_POINT_set_Jprojective_coordinates_GFpEC_POINT_set_to_infinityEC_PRE_COMP_DUPEC_PRE_COMP_NEWec_wNAF_mulec_wNAF_precompute_multi2d_ECParametersi2d_ECPKParametersi2d_ECPrivateKeyi2o_ECPublicKeyNISTP224_PRE_COMP_NEWNISTP256_PRE_COMP_NEWNISTP521_PRE_COMP_NEWo2i_ECPublicKeyOLD_EC_PRIV_DECODEPKEY_EC_CTRLPKEY_EC_CTRL_STRPKEY_EC_DERIVEPKEY_EC_KEYGENPKEY_EC_PARAMGENPKEY_EC_SIGNs09t@9X9dp99u99v9w9: :x8:yX:ex:p:n:m:::;f;g0;h@;zP;h;{;;;;|;};<(<~H<oX<h<x<<<<j<k<=l =q0=H=X=rh=x===asn1 errorasn1 unknown fieldbignum out of rangebuffer too smallcoordinates out of ranged2i ecpkparameters failuredecode errordiscriminant is zeroec group new by name failurefield too largegf2m not supportedgroup2pkparameters failurei2d ecpkparameters failureincompatible objectsinvalid argumentinvalid compressed pointinvalid compression bitinvalid curveinvalid digestinvalid digest typeinvalid encodinginvalid fieldinvalid forminvalid group orderinvalid pentanomial basisinvalid private keyinvalid trinomial basiskdf parameter errorkeys not setmissing parametersmissing private keynot a NIST primenot a supported NIST primenot implementednot initializedno field modno parameters setpassed null parameterpeer key errorpkparameters2group failurepoint at infinitypoint is not on curveshared info errorslot fullundefined generatorundefined orderunknown groupunknown orderunsupported fieldwrong curve parameterswrong order& & 0& H& `& x&&& &@ &P &` 'p  ' 8' P'0 h'@ 'P '` ''0'(@(P8( P( p( ( ( ( ( ( )  ) @) `)0 ) ) )0 ) * (* H*0 x*@ *P*`*0+ 0+@P+ h+p++@+ +`,p8,X,,,, , - (-P H-` p-@-P-`-p..0.p X.. .. /H/ x/ //// / 0 000 H0 h00 0 00 01 181 P1 h10 x1` 1@ 1P 1P1122 (2082p H2@p2P2 2`2p23  303@3X3 p33 334H4 h4@ x4 4 4 4 4 4p 405 585 P5 `5P x5` 5 5p 5 5 5SECG/WTLS curve over a 112 bit prime fieldSECG curve over a 112 bit prime fieldSECG curve over a 128 bit prime fieldSECG curve over a 128 bit prime fieldSECG curve over a 160 bit prime fieldSECG curve over a 160 bit prime fieldSECG/WTLS curve over a 160 bit prime fieldSECG curve over a 192 bit prime fieldSECG curve over a 224 bit prime fieldNIST/SECG curve over a 224 bit prime fieldSECG curve over a 256 bit prime fieldNIST/SECG curve over a 384 bit prime fieldNIST/SECG curve over a 521 bit prime fieldNIST/X9.62/SECG curve over a 192 bit prime fieldB-163X9.62 curve over a 192 bit prime fieldX9.62 curve over a 192 bit prime fieldX9.62 curve over a 239 bit prime fieldX9.62 curve over a 239 bit prime fieldX9.62 curve over a 239 bit prime fieldX9.62/SECG curve over a 256 bit prime fieldSECG curve over a 113 bit binary fieldSECG curve over a 113 bit binary fieldSECG/WTLS curve over a 131 bit binary fieldSECG curve over a 131 bit binary fieldNIST/SECG/WTLS curve over a 163 bit binary fieldB-233SECG curve over a 163 bit binary fieldNIST/SECG curve over a 163 bit binary fieldSECG curve over a 193 bit binary fieldSECG curve over a 193 bit binary fieldNIST/SECG/WTLS curve over a 233 bit binary fieldB-283NIST/SECG/WTLS curve over a 233 bit binary fieldB-409SECG curve over a 239 bit binary fieldNIST/SECG curve over a 283 bit binary fieldNIST/SECG curve over a 283 bit binary fieldNIST/SECG curve over a 409 bit binary fieldNIST/SECG curve over a 409 bit binary fieldNIST/SECG curve over a 571 bit binary fieldNIST/SECG curve over a 571 bit binary fieldX9.62 curve over a 163 bit binary fieldX9.62 curve over a 163 bit binary fieldX9.62 curve over a 163 bit binary fieldX9.62 curve over a 176 bit binary fieldX9.62 curve over a 191 bit binary fieldX9.62 curve over a 191 bit binary fieldX9.62 curve over a 191 bit binary fieldX9.62 curve over a 208 bit binary fieldX9.62 curve over a 239 bit binary fieldX9.62 curve over a 239 bit binary fieldX9.62 curve over a 239 bit binary fieldX9.62 curve over a 272 bit binary fieldX9.62 curve over a 304 bit binary fieldX9.62 curve over a 359 bit binary fieldX9.62 curve over a 368 bit binary fieldX9.62 curve over a 431 bit binary fieldWTLS curve over a 113 bit binary fieldNIST/SECG/WTLS curve over a 163 bit binary fieldB-571SECG curve over a 113 bit binary fieldX9.62 curve over a 163 bit binary fieldSECG/WTLS curve over a 112 bit prime fieldSECG/WTLS curve over a 160 bit prime fieldWTLS curve over a 112 bit prime fieldWTLS curve over a 160 bit prime fieldNIST/SECG/WTLS curve over a 233 bit binary fieldK-163NIST/SECG/WTLS curve over a 233 bit binary fieldK-233WTLS curvs over a 224 bit prime field IPSec/IKE/Oakley curve #3 over a 155 bit binary field. Not suitable for ECDSA. Questionable extension field!RFC 5639 curve over a 160 bit prime field.\crypto\ec\ec_curve.c IPSec/IKE/Oakley curve #4 over a 185 bit binary field. Not suitable for ECDSA. Questionable extension field!K-283RFC 5639 curve over a 160 bit prime fieldRFC 5639 curve over a 192 bit prime fieldRFC 5639 curve over a 192 bit prime fieldRFC 5639 curve over a 224 bit prime fieldRFC 5639 curve over a 224 bit prime fieldRFC 5639 curve over a 256 bit prime fieldRFC 5639 curve over a 256 bit prime fieldRFC 5639 curve over a 320 bit prime fieldRFC 5639 curve over a 320 bit prime fieldRFC 5639 curve over a 384 bit prime fieldRFC 5639 curve over a 384 bit prime fieldRFC 5639 curve over a 512 bit prime fieldRFC 5639 curve over a 512 bit prime field.\crypto\ec\ec_curve.c.\crypto\ec\ec_curve.c.\crypto\ec\ec_curve.c.\crypto\ec\ec_curve.c.\crypto\ec\ec_curve.c.\crypto\ec\ec_curve.c.\crypto\ec\ec_curve.c.\crypto\ec\ec_curve.c.\crypto\ec\ec_curve.c.\crypto\ec\ec_curve.c.\crypto\ec\ec_curve.cK-4094IKK p> NULL> ? ? @ @ B B file descriptorpD D E PF F J K FILE pointer.\crypto\bio\bss_file.c')','fopen('.\crypto\bio\bss_file.c.\crypto\bio\bss_file.c.\crypto\bio\bss_file.c.\crypto\bio\bss_file.ca+ar+wrb.\crypto\bio\bss_file.ct').\crypto\bio\bss_file.c','fopen('.\crypto\bio\bss_file.c` O O 0P P Q  socket @S S pT T X X 0Y socket connect.\crypto\bio\bss_conn.c.\crypto\bio\bss_conn.chost=.\crypto\bio\bss_conn.c:host=:.\crypto\bio\bss_conn.c.\crypto\bio\bss_conn.chost=.\crypto\bio\bss_conn.c:host=:.\crypto\bio\bss_conn.c.\crypto\bio\bss_conn.chost=.\crypto\bio\bss_conn.c.\crypto\bio\bss_conn.c:host=%d.\crypto\bio\bss_conn.c.\crypto\bio\bss_conn.cnot initialized%d.%d.%d.%d_ _ @`  p`  a p> p NULL filter Pa  c d d e i pj p buffer.\crypto\bio\bf_buff.c.\crypto\bio\bf_buff.c.\crypto\bio\bf_buff.c.\crypto\bio\bf_buff.c.\crypto\bio\bf_buff.c.\crypto\bio\bf_buff.c.\crypto\bio\bf_buff.c00x0123456789ABCDEF0123456789abcdef01234567890123456789.\crypto\bio\b_print.c.\crypto\bio\b_print.c.\crypto\bio\b_print.cdoapr()%04x - %02x%c %c %s%04x - %*s%02X: %*s%02X.\crypto\bio\b_sock.c'port='*.\crypto\bio\b_sock.c.\crypto\bio\b_sock.c'port=''.\crypto\bio\b_sock.c.\crypto\bio\b_sock.cport='.\crypto\bio\b_sock.csa.len.s <= sizeof(sa.from)tcp.\crypto\bio\b_sock.c.\crypto\bio\b_sock.c.\crypto\bio\b_sock.cgetnameinfossl.\crypto\bio\b_sock.c.\crypto\bio\b_sock.c.\crypto\bio\b_sock.c%s:%s.\crypto\bio\b_sock.c.\crypto\bio\b_sock.c%d.%d.%d.%d:%d.\crypto\bio\b_sock.c.\crypto\bio\b_sock.c.\crypto\bio\b_sock.c.\crypto\bio\b_sock.c.\crypto\bio\b_sock.chost=.\crypto\bio\b_sock.c.\crypto\bio\b_sock.c.\crypto\bio\b_sock.chttptelnetsockshttpsftpgopher'.\crypto\bio\b_sock.cservice='*.\crypto\bio\b_sock.c.\crypto\bio\b_sock.c.\crypto\bio\b_sock.cgetaddrinfofreeaddrinfo `   p   socket accept.\crypto\bio\bss_acpt.c.\crypto\bio\bss_acpt.c.\crypto\bio\bss_acpt.c.\crypto\bio\bss_acpt.c   @`  p`   p non-blocking IO test filter.\crypto\bio\bf_nbio.c      BIO pair.\crypto\bio\bss_bio.c.\crypto\bio\bss_bio.c.\crypto\bio\bss_bio.c.\crypto\bio\bss_bio.c.\crypto\bio\bss_bio.c.\crypto\bio\bss_bio.c.\crypto\bio\bss_bio.c.\crypto\bio\bss_bio.c.\crypto\bio\bss_bio.c.\crypto\bio\bss_bio.c.\crypto\bio\bss_bio.c.\crypto\bio\bss_bio.c.\crypto\bio\bss_bio.c.\crypto\bio\bss_bio.c`    ж @ datagram socket.\crypto\bio\bss_dgram.cgetsockoptsetsockoptsetsockoptsa.len.s <= sizeof(sa.peer).\crypto\bio\bss_dgram.csetsockoptgetsockoptsetsockoptgetsockoptsetsockoptsetsockopt.\crypto\stack\stack.c.\crypto\stack\stack.c.\crypto\stack\stack.c.\crypto\stack\stack.c.\crypto\stack\stack.c.\crypto\stack\stack.c.\crypto\lhash\lhash.c.\crypto\lhash\lhash.c.\crypto\lhash\lhash.c.\crypto\lhash\lhash.c.\crypto\lhash\lhash.cnum_items = %lu num_nodes = %u num_alloc_nodes = %u num_expands = %lu num_expand_reallocs = %lu num_contracts = %lu num_contract_reallocs = %lu num_hash_calls = %lu num_comp_calls = %lu num_insert = %lu num_replace = %lu num_delete = %lu num_no_delete = %lu num_retrieve = %lu num_retrieve_miss = %lu num_hash_comps = %lu node %6u -> %3u %lu nodes used out of %u %lu items load %d.%02d actual load %d.%02d .\crypto\rand\md_rand.c.\crypto\rand\md_rand.c.\crypto\rand\md_rand.c.\crypto\rand\md_rand.c.\crypto\rand\md_rand.c.\crypto\rand\md_rand.c.\crypto\rand\md_rand.c.\crypto\rand\md_rand.c.\crypto\rand\md_rand.c.....................\crypto\rand\md_rand.c.\crypto\rand\md_rand.c.\crypto\rand\md_rand.c.\crypto\rand\md_rand.cYou need to read the OpenSSL FAQ, http://www.openssl.org/support/faq.html.\crypto\rand\md_rand.c.\crypto\rand\md_rand.c.\crypto\rand\md_rand.c.\crypto\rand\md_rand.c.\crypto\rand\md_rand.c.\crypto\rand\md_rand.c  @    wbwbRANDFILEHOMEC:.rnd/.rndrbP$`$ؤ@$RAND_get_rand_methodRAND_init_fipsSSLEAY_RAND_BYTESh$`f$xg$e$d$Хdual ec drbg disablederror initialising drbgerror instantiating drbgno fips random method setPRNG not seededADVAPI32.DLLKERNEL32.DLLNETAPI32.DLLNetStatisticsGetNetApiBufferFreeLanmanWorkstationLanmanServerCryptAcquireContextWCryptGenRandomCryptReleaseContextIntel Hardware Cryptographic Service ProviderUSER32.DLLGetForegroundWindowGetCursorInfoGetQueueStatusCreateToolhelp32SnapshotCloseToolhelp32SnapshotHeap32FirstHeap32NextHeap32ListFirstHeap32ListNextProcess32FirstProcess32NextThread32FirstThread32NextModule32FirstModule32Next.\crypto\rand\rand_win.c.\crypto\err\err.c.\crypto\err\err.cint_thread_get (err.c).\crypto\err\err.cNA.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.cunknown.\crypto\err\err.clib(%lu)func(%lu)reason(%lu)error:%08lX:%s:%s:%s.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c 8Xp    Э(@ P!`"p#$%/Ȯ&'-.0 unknown librarysystem librarybignum routinesrsa routinesDiffie-Hellman routinesdigital envelope routinesmemory buffer routinesobject identifier routinesPEM routinesdsa routinesx509 certificate routinesasn1 encoding routinesconfiguration file routinescommon libcrypto routineselliptic curve routinesSSL routinesBIO routinesPKCS7 routinesX509 V3 routinesPKCS12 routinesrandom number generatorDSO support routinestime stamp routinesengine routinesOCSP routinesFIPS routinesCMS routinesHMAC routines 0@P`$p,4@PXfopenconnectgetservbynamesocketioctlsocketbindlistenacceptWSAstartupopendirfreadȲвز     0<H P!X"h#x$%&'/:ȳ;<=>8?P@dApBCDEдsystem libBN libRSA libDH libEVP libBUF libOBJ libPEM libDSA libX509 libASN1 libCONF libCRYPTO libEC libSSL libBIO libPKCS7 libX509V3 libPKCS12 libRAND libDSO libENGINE libOCSP libTS libnested asn1 errorbad asn1 object headerbad get asn1 object callexpecting an asn1 sequenceasn1 length mismatchmissing asn1 eosfatalmalloc failurecalled a function you should not callpassed a null parameterinternal errorcalled a function that was disabled at compile-time.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.cint_err_get (err.c).\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c.\crypto\err\err.c%lu:%s:%s:%d:%s %s.\crypto\objects\o_names.c.\crypto\objects\o_names.c.\crypto\objects\o_names.c.\crypto\objects\o_names.csetct-CertResTBEid-ceBF-CBCGNsetct-CRLNotificationTBSbf-cbcSNsubjectKeyIdentifiersetct-CRLNotificationTBSBF-ECBDSAX509v3 Subject Key Identifiersetct-CRLNotificationResTBSRLEkeyUsagebf-ecbwapsetct-CRLNotificationResTBSwapX509v3 Key UsageBF-CFBISOsetct-BCIDistributionTBSbf-cfbisoprivateKeyUsagePeriodsetct-BCIDistributionTBSBF-OFBMD4X509v3 Private Key Usage Periodsetext-genCryptsubjectAltNamegeneric cryptogrammd4X509v3 Subject Alternative Name.\crypto\objects\obj_dat.cORGsetext-miAuthissuerAltNamemerchant initiated authX509v3 Issuer Alternative Namesetext-pinSecurebf-ofborgbasicConstraintsRC4-40DODsetext-pinSecurerc4-40dodX509v3 Basic ConstraintstitlestreetDCsetext-pinAnycrlNumberid-pplpsssetext-pinAnyX509v3 CRL Numberid-pplpsssetext-track2certificatePoliciesuclsetext-track2X509v3 Certificate Policiesuclsetext-cvkeyBagUIDauthorityKeyIdentifieradditional verificationX509v3 Authority Key Identifier.\crypto\objects\obj_dat.cset-policy-rootset-policy-rootsetCext-hashedRootMD2setCext-hashedRootmd2setCext-certTypetitlekeyBagMD5setCext-certTypeid-kpcrlBagmd5setCext-merchDatacrlBagRC4setCext-merchDataSHA256rc4setCext-cCertRequiredMDC2setCext-cCertRequiredmdc2setCext-tunnelingsha256CNRSA-MDC2id-kpSHA384CsetCext-tunnelingsha384Lmdc2WithRSASTsetCext-setExtsetCext-setExtsetCext-setQualfITU-TSHA512ORC2-40-CBCOUsetCext-setQualfitu-tsha512RSArc2-40-cbcrsa.\crypto\objects\obj_dat.cSHAsetCext-PGWYcapabilitiesmsUPNSHA224shasetCext-PGWYcapabilitiesmsSGCsha224givenNamesetCext-TokenIdentifiersetCext-TokenIdentifiersurnamesetCext-Track2DatainitialssetCext-Track2DatainitialssetCext-TokenTypecrlDistributionPointssetCext-TokenTypeX509v3 CRL Distribution PointssetCext-IssuerCapabilitiesRSA-NP-MD5setCext-IssuerCapabilitiesmd5WithRSA.\crypto\objects\obj_dat.csetAttr-CertserialNumbersetAttr-CertserialNumbersetAttr-PGWYcappayment gateway capabilitiessetAttr-TokenTypedescriptionsetAttr-TokenTypedescriptionsetAttr-IssCapCAST5-CBCissuer capabilitiescast5-cbcset-rootKeyThumbCAST5-ECBset-rootKeyThumbcast5-ecbset-addPolicyCAST5-CFBset-addPolicycast5-cfbsetAttr-Token-EMVCAST5-OFBsetAttr-Token-EMVcast5-ofbsetAttr-Token-B0PrimepbeWithMD5AndCast5CBCsetAttr-Token-B0PrimepbeWithMD5AndCast5CBC.\crypto\objects\obj_dat.csetAttr-IssCap-CVMDSA-SHA1setAttr-IssCap-CVMdsaWithSHA1setAttr-IssCap-T2MD5-SHA1setAttr-IssCap-T2md5-sha1setAttr-IssCap-SigRSA-SHA1-2setAttr-IssCap-Sigsha1WithRSAsetAttr-GenCryptgrmgenerate cryptogramdsaEncryptionsetAttr-T2EncRIPEMD160encrypted track 2ripemd160setAttr-T2cleartxtRSA-RIPEMD160cleartext track 2ripemd160WithRSAsetAttr-TokICCsigRC5-CBCICC or token signaturerc5-cbcsetAttr-SecDevSigRC5-ECBsecure device signaturerc5-ecbset-brand-IATA-ATARC5-CFBset-brand-IATA-ATArc5-cfbset-brand-DinersRC5-OFBset-brand-Dinersrc5-ofbset-brand-AmericanExpressset-brand-AmericanExpressrun length compressionset-brand-JCBZLIBset-brand-JCBzlib compressionset-brand-VisaextendedKeyUsageset-brand-VisaX509v3 Extended Key Usageset-brand-MasterCardPKIXset-brand-MasterCardPKIXset-brand-Novusset-brand-NovusDES-CDMFserverAuthdes-cdmfTLS Web Server AuthenticationrsaOAEPEncryptionSETclientAuthrsaOAEPEncryptionSETTLS Web Client AuthenticationcodeSigningCode SigningJOINT-ISO-ITU-TemailProtectionjoint-iso-itu-tE-mail Protectioninternational-organizationstimeStampingInternational OrganizationsTime StampingmsSmartcardLoginmsCodeIndMicrosoft SmartcardloginMicrosoft Individual Code SigningmsCodeComMicrosoft Universal Principal NameMicrosoft Commercial Code SigningAES-128-CFB1msCTLSignaes-128-cfb1Microsoft Trust List SigningAES-192-CFB1aes-192-cfb1Microsoft Server Gated CryptoAES-256-CFB1msEFSaes-256-cfb1Microsoft Encrypted File SystemAES-128-CFB8nsSGCaes-128-cfb8Netscape Server Gated CryptoAES-192-CFB8deltaCRLaes-192-cfb8X509v3 Delta CRL IndicatorAES-256-CFB8CRLReasonaes-256-cfb8X509v3 CRL Reason CodeDES-CFB1invalidityDatedes-cfb1Invalidity DateDES-CFB8SXNetIDdes-cfb8Strong Extranet IDDES-EDE3-CFB1PBE-SHA1-RC4-128des-ede3-cfb1pbeWithSHA1And128BitRC4DES-EDE3-CFB8PBE-SHA1-RC4-40des-ede3-cfb8pbeWithSHA1And40BitRC4PBE-SHA1-3DESstreetAddresspbeWithSHA1And3-KeyTripleDES-CBCpostalCodePBE-SHA1-2DESpostalCodepbeWithSHA1And2-KeyTripleDES-CBCPBE-SHA1-RC2-128pbeWithSHA1And128BitRC2-CBCproxyCertInfoPBE-SHA1-RC2-40Proxy Certificate InformationpbeWithSHA1And40BitRC2-CBCid-ppl-anyLanguageAny languageid-ppl-inheritAllpkcs8ShroudedKeyBag.\crypto\objects\obj_dat.cInherit allpkcs8ShroudedKeyBagnameConstraintscertBagX509v3 Name ConstraintscertBagid-ppl-independentIndependentRSA-SHA256secretBagsha256WithRSAEncryptionsecretBagRSA-SHA384safeContentsBagsha384WithRSAEncryptionsafeContentsBagRSA-SHA512friendlyNamesha512WithRSAEncryptionfriendlyNameRSA-SHA224localKeyIDsha224WithRSAEncryptionlocalKeyIDx509Certificatex509CertificatesdsiCertificatesdsiCertificatex509Crlx509CrlPBES2PBES2identified-organizationPBMAC1identified-organizationPBMAC1certicom-archmacWithSHA1certicom-archmacWithSHA1id-qt-cpsPolicy Qualifier CPSwap-wsgid-qt-unoticewap-wsgPolicy Qualifier User Noticeid-characteristic-two-basisRC2-64-CBCid-characteristic-two-basisrc2-64-cbconBasisSMIME-CAPSonBasisS/MIME CapabilitiestpBasisPBE-MD2-RC2-64tpBasispbeWithMD2AndRC2-CBCppBasisPBE-MD5-RC2-64ppBasispbeWithMD5AndRC2-CBCc2pnb163v1PBE-SHA1-DESc2pnb163v1pbeWithSHA1AndDES-CBCc2pnb163v2msExtReqc2pnb163v2Microsoft Extension Requestc2pnb163v3extReqc2pnb163v3Extension Requestc2pnb176v1namec2pnb176v1namec2tnb191v1dnQualifierc2tnb191v1dnQualifierc2tnb191v2id-pec2tnb191v2id-pec2tnb191v3id-adc2tnb191v3id-adc2onb191v4authorityInfoAccessc2onb191v4Authority Information Accessc2onb191v5OCSPc2onb191v5OCSPc2pnb208w1caIssuersc2pnb208w1CA Issuersc2tnb239v1OCSPSigningc2tnb239v1OCSP Signingc2tnb239v2c2tnb239v2c2tnb239v3member-bodyc2tnb239v3ISO Member Bodyc2onb239v4ISO-USc2onb239v4ISO US Member Bodyc2onb239v5X9-57c2onb239v5X9.57c2pnb272w1X9cmc2pnb272w1X9.57 CM ?c2pnb304w1pkcs1.%luc2pnb304w1pkcs1c2tnb359v1pkcs5c2tnb359v1pkcs5c2pnb368w1SMIMEc2pnb368w1S/MIMEc2tnb431r1id-smime-modc2tnb431r1id-smime-modsecp112r1id-smime-ctsecp112r1id-smime-ctsecp112r2id-smime-aasecp112r2id-smime-aasecp128r1id-smime-algsecp128r1id-smime-algsecp128r2id-smime-cdsecp128r2id-smime-cdsecp160k1id-smime-spqsecp160k1id-smime-spqsecp160r1id-smime-ctisecp160r1id-smime-ctisecp160r2id-smime-mod-cmssecp160r2id-smime-mod-cmssecp192k1id-smime-mod-esssecp192k1id-smime-mod-esssecp224k1id-smime-mod-oidsecp224k1id-smime-mod-oidsecp224r1id-smime-mod-msg-v3secp224r1id-smime-mod-msg-v3secp256k1id-smime-mod-ets-eSignature-88secp256k1id-smime-mod-ets-eSignature-88secp384r1id-smime-mod-ets-eSignature-97secp384r1id-smime-mod-ets-eSignature-97secp521r1id-smime-mod-ets-eSigPolicy-88secp521r1id-smime-mod-ets-eSigPolicy-88sect113r1id-smime-mod-ets-eSigPolicy-97sect113r1id-smime-mod-ets-eSigPolicy-97sect113r2id-smime-ct-receiptsect113r2id-smime-ct-receiptsect131r1id-smime-ct-authDatasect131r1id-smime-ct-authDatasect131r2id-smime-ct-publishCertsect131r2id-smime-ct-publishCertsect163k1id-smime-ct-TSTInfosect163k1id-smime-ct-TSTInfosect163r1id-smime-ct-TDTInfosect163r1id-smime-ct-TDTInfosect163r2id-smime-ct-contentInfosect163r2id-smime-ct-contentInfosect193r1id-smime-ct-DVCSRequestDatasect193r1id-smime-ct-DVCSRequestDatasect193r2id-smime-ct-DVCSResponseDatasect193r2id-smime-ct-DVCSResponseDatasect233k1id-smime-aa-receiptRequestsect233k1id-smime-aa-receiptRequestsect233r1id-smime-aa-securityLabelsect233r1id-smime-aa-securityLabelsect239k1id-smime-aa-mlExpandHistorysect239k1id-smime-aa-mlExpandHistorysect283k1id-smime-aa-contentHintsect283k1id-smime-aa-contentHintsect283r1id-smime-aa-msgSigDigestsect283r1id-smime-aa-msgSigDigestsect409k1id-smime-aa-encapContentTypesect409k1id-smime-aa-encapContentTypesect409r1id-smime-aa-contentIdentifiersect409r1id-smime-aa-contentIdentifiersect571k1id-smime-aa-macValuesect571k1id-smime-aa-macValuesect571r1id-smime-aa-equivalentLabelssect571r1id-smime-aa-equivalentLabelswap-wsg-idm-ecid-wtls1id-smime-aa-contentReferencewap-wsg-idm-ecid-wtls1id-smime-aa-contentReferencewap-wsg-idm-ecid-wtls3id-smime-aa-encrypKeyPrefwap-wsg-idm-ecid-wtls3id-smime-aa-encrypKeyPrefwap-wsg-idm-ecid-wtls4id-smime-aa-signingCertificatewap-wsg-idm-ecid-wtls4id-smime-aa-signingCertificatewap-wsg-idm-ecid-wtls5id-smime-aa-smimeEncryptCertswap-wsg-idm-ecid-wtls5id-smime-aa-smimeEncryptCertswap-wsg-idm-ecid-wtls6id-smime-aa-timeStampTokenwap-wsg-idm-ecid-wtls6id-smime-aa-timeStampTokenwap-wsg-idm-ecid-wtls7id-smime-aa-ets-sigPolicyIdwap-wsg-idm-ecid-wtls7id-smime-aa-ets-sigPolicyIdwap-wsg-idm-ecid-wtls8id-smime-aa-ets-commitmentTypewap-wsg-idm-ecid-wtls8id-smime-aa-ets-commitmentTypewap-wsg-idm-ecid-wtls9id-smime-aa-ets-signerLocationwap-wsg-idm-ecid-wtls9id-smime-aa-ets-signerLocationwap-wsg-idm-ecid-wtls10id-smime-aa-ets-signerAttrwap-wsg-idm-ecid-wtls10id-smime-aa-ets-signerAttrwap-wsg-idm-ecid-wtls11id-smime-aa-ets-otherSigCertwap-wsg-idm-ecid-wtls11id-smime-aa-ets-otherSigCertwap-wsg-idm-ecid-wtls12id-smime-aa-ets-contentTimestampwap-wsg-idm-ecid-wtls12id-smime-aa-ets-contentTimestampanyPolicyid-smime-aa-ets-CertificateRefsX509v3 Any Policyid-smime-aa-ets-CertificateRefspolicyMappingsid-smime-aa-ets-RevocationRefsX509v3 Policy Mappingsid-smime-aa-ets-RevocationRefsinhibitAnyPolicyid-smime-aa-ets-certValuesX509v3 Inhibit Any Policyid-smime-aa-ets-certValuesOakley-EC2N-3id-smime-aa-ets-revocationValuesipsec3id-smime-aa-ets-revocationValuesOakley-EC2N-4id-smime-aa-ets-escTimeStampipsec4id-smime-aa-ets-escTimeStampCAMELLIA-128-CBCid-smime-aa-ets-certCRLTimestampcamellia-128-cbcid-smime-aa-ets-certCRLTimestampCAMELLIA-192-CBCid-smime-aa-ets-archiveTimeStampcamellia-192-cbcid-smime-aa-ets-archiveTimeStampCAMELLIA-256-CBCid-smime-aa-signatureTypecamellia-256-cbcid-smime-aa-signatureTypeCAMELLIA-128-ECBid-smime-aa-dvcs-dvccamellia-128-ecbid-smime-aa-dvcs-dvcCAMELLIA-192-ECBid-smime-alg-ESDHwith3DEScamellia-192-ecbid-smime-alg-ESDHwith3DESCAMELLIA-256-ECBid-smime-alg-ESDHwithRC2camellia-256-ecbid-smime-alg-ESDHwithRC2CAMELLIA-128-CFBid-smime-alg-3DESwrapcamellia-128-cfbid-smime-alg-3DESwrapCAMELLIA-192-CFBid-smime-alg-RC2wrapcamellia-192-cfbid-smime-alg-RC2wrapCAMELLIA-256-CFBid-smime-alg-ESDHcamellia-256-cfbid-smime-alg-ESDHCAMELLIA-128-CFB1id-smime-alg-CMS3DESwrapcamellia-128-cfb1id-smime-alg-CMS3DESwrapCAMELLIA-192-CFB1id-smime-alg-CMSRC2wrapcamellia-192-cfb1id-smime-alg-CMSRC2wrapCAMELLIA-256-CFB1id-smime-cd-ldapcamellia-256-cfb1id-smime-cd-ldapCAMELLIA-128-CFB8id-smime-spq-ets-sqt-uricamellia-128-cfb8id-smime-spq-ets-sqt-uriCAMELLIA-192-CFB8id-smime-spq-ets-sqt-unoticecamellia-192-cfb8id-smime-spq-ets-sqt-unoticeCAMELLIA-256-CFB8id-smime-cti-ets-proofOfOrigincamellia-256-cfb8id-smime-cti-ets-proofOfOriginCAMELLIA-128-OFBid-smime-cti-ets-proofOfReceiptcamellia-128-ofbid-smime-cti-ets-proofOfReceiptCAMELLIA-192-OFBid-smime-cti-ets-proofOfDeliverycamellia-192-ofbid-smime-cti-ets-proofOfDeliveryCAMELLIA-256-OFBid-smime-cti-ets-proofOfSendercamellia-256-ofbid-smime-cti-ets-proofOfSendersubjectDirectoryAttributesid-smime-cti-ets-proofOfApprovalX509v3 Subject Directory Attributesid-smime-cti-ets-proofOfApprovalissuingDistributionPointid-smime-cti-ets-proofOfCreationX509v3 Issuing Distrubution Pointid-smime-cti-ets-proofOfCreationcertificateIssuerX509v3 Certificate IssuerKISAid-pkix-modkisaid-pkix-modSEED-ECBid-qtseed-ecbid-qtSEED-CBCid-itseed-cbcid-itSEED-OFBid-pkipseed-ofbid-pkipSEED-CFBid-algseed-cfbid-algHMAC-MD5id-cmchmac-md5id-cmcHMAC-SHA1id-onhmac-sha1id-onid-PasswordBasedMACid-pdapassword based MACid-pdaid-DHBasedMacid-acaDiffie-Hellman based MACid-acaid-it-suppLangTagsid-qcsid-it-suppLangTagsid-qcscaRepositoryid-cctCA Repositoryid-cctid-smime-ct-compressedDataid-pkix1-explicit-88id-smime-ct-compressedDataid-pkix1-explicit-88id-ct-asciiTextWithCRLFid-pkix1-implicit-88id-ct-asciiTextWithCRLFid-pkix1-implicit-88id-aes128-wrapid-pkix1-explicit-93.\crypto\objects\obj_dat.cid-aes128-wrapid-pkix1-explicit-93.\crypto\objects\obj_dat.cid-aes192-wrapid-pkix1-implicit-93id-aes192-wrapid-pkix1-implicit-93id-aes256-wrapid-mod-crmfid-aes256-wrapid-mod-crmfecdsa-with-Recommendedid-mod-cmcecdsa-with-Recommendedid-mod-cmcecdsa-with-Specifiedid-mod-kea-profile-88ecdsa-with-Specifiedid-mod-kea-profile-88ecdsa-with-SHA224id-mod-kea-profile-93ecdsa-with-SHA224id-mod-kea-profile-93ecdsa-with-SHA256id-mod-cmpecdsa-with-SHA256id-mod-cmpecdsa-with-SHA384id-mod-qualified-cert-88ecdsa-with-SHA384id-mod-qualified-cert-88ecdsa-with-SHA512id-mod-qualified-cert-93ecdsa-with-SHA512id-mod-qualified-cert-93hmacWithMD5id-mod-attribute-certhmacWithMD5id-mod-attribute-certhmacWithSHA224id-mod-timestamp-protocolhmacWithSHA224id-mod-timestamp-protocolhmacWithSHA256id-mod-ocsphmacWithSHA256id-mod-ocsphmacWithSHA384id-mod-dvcshmacWithSHA384id-mod-dvcshmacWithSHA512id-mod-cmp2000hmacWithSHA512id-mod-cmp2000dsa_with_SHA224biometricInfodsa_with_SHA224Biometric Infodsa_with_SHA256qcStatementsdsa_with_SHA256qcStatementswhirlpoolac-auditEntitywhirlpoolac-auditEntitycryptoproac-targetingcryptoproac-targetingcryptocomaaControlscryptocomaaControlsid-GostR3411-94-with-GostR3410-2001sbgp-ipAddrBlockGOST R 34.11-94 with GOST R 34.10-2001sbgp-ipAddrBlockid-GostR3411-94-with-GostR3410-94sbgp-autonomousSysNumGOST R 34.11-94 with GOST R 34.10-94sbgp-autonomousSysNummd_gost94sbgp-routerIdentifierGOST R 34.11-94sbgp-routerIdentifierid-HMACGostR3411-94textNoticeHMAC GOST 34.11-94textNoticegost2001ipsecEndSystemGOST R 34.10-2001IPSec End Systemgost94ipsecTunnelGOST R 34.10-94IPSec Tunnelgost89ipsecUserGOST 28147-89IPSec Usergost89-cntDVCSgost89-cntdvcsgost-macid-it-caProtEncCertGOST 28147-89 MACid-it-caProtEncCertprf-gostr3411-94id-it-signKeyPairTypesGOST R 34.11-94 PRFid-it-signKeyPairTypesid-GostR3410-2001DHid-it-encKeyPairTypesGOST R 34.10-2001 DHid-it-encKeyPairTypesid-GostR3410-94DHid-it-preferredSymmAlgGOST R 34.10-94 DHid-it-preferredSymmAlgid-Gost28147-89-CryptoPro-KeyMeshingid-it-caKeyUpdateInfoid-Gost28147-89-CryptoPro-KeyMeshingid-it-caKeyUpdateInfoid-Gost28147-89-None-KeyMeshingid-it-currentCRLid-Gost28147-89-None-KeyMeshingid-it-currentCRLid-GostR3411-94-TestParamSetid-it-unsupportedOIDsid-GostR3411-94-TestParamSetid-it-unsupportedOIDsid-GostR3411-94-CryptoProParamSetid-it-subscriptionRequestid-GostR3411-94-CryptoProParamSetid-it-subscriptionRequestid-Gost28147-89-TestParamSetid-it-subscriptionResponseid-Gost28147-89-TestParamSetid-it-subscriptionResponseid-Gost28147-89-CryptoPro-A-ParamSetid-it-keyPairParamReqid-Gost28147-89-CryptoPro-A-ParamSetid-it-keyPairParamReqid-Gost28147-89-CryptoPro-B-ParamSetid-it-keyPairParamRepid-Gost28147-89-CryptoPro-B-ParamSetid-it-keyPairParamRepid-Gost28147-89-CryptoPro-C-ParamSetid-it-revPassphraseid-Gost28147-89-CryptoPro-C-ParamSetid-it-revPassphraseid-Gost28147-89-CryptoPro-D-ParamSetid-it-implicitConfirmid-Gost28147-89-CryptoPro-D-ParamSetid-it-implicitConfirmid-Gost28147-89-CryptoPro-Oscar-1-1-ParamSetid-it-confirmWaitTimeid-Gost28147-89-CryptoPro-Oscar-1-1-ParamSetid-it-confirmWaitTimeid-Gost28147-89-CryptoPro-Oscar-1-0-ParamSetid-it-origPKIMessageid-Gost28147-89-CryptoPro-Oscar-1-0-ParamSetid-it-origPKIMessageid-Gost28147-89-CryptoPro-RIC-1-ParamSetid-regCtrlid-Gost28147-89-CryptoPro-RIC-1-ParamSetid-regCtrlid-GostR3410-94-TestParamSetid-regInfoid-GostR3410-94-TestParamSetid-regInfoid-GostR3410-94-CryptoPro-A-ParamSetid-regCtrl-regTokenid-GostR3410-94-CryptoPro-A-ParamSetid-regCtrl-regTokenid-GostR3410-94-CryptoPro-B-ParamSetid-regCtrl-authenticatorid-GostR3410-94-CryptoPro-B-ParamSetid-regCtrl-authenticatorid-GostR3410-94-CryptoPro-C-ParamSetid-regCtrl-pkiPublicationInfoid-GostR3410-94-CryptoPro-C-ParamSetid-regCtrl-pkiPublicationInfoid-GostR3410-94-CryptoPro-D-ParamSetid-regCtrl-pkiArchiveOptionsid-GostR3410-94-CryptoPro-D-ParamSetid-regCtrl-pkiArchiveOptionsid-GostR3410-94-CryptoPro-XchA-ParamSetid-regCtrl-oldCertIDid-GostR3410-94-CryptoPro-XchA-ParamSetid-regCtrl-oldCertIDid-GostR3410-94-CryptoPro-XchB-ParamSetid-regCtrl-protocolEncrKeyid-GostR3410-94-CryptoPro-XchB-ParamSetid-regCtrl-protocolEncrKeyid-GostR3410-94-CryptoPro-XchC-ParamSetid-regInfo-utf8Pairsid-GostR3410-94-CryptoPro-XchC-ParamSetid-regInfo-utf8Pairsid-GostR3410-2001-TestParamSetid-regInfo-certReqid-GostR3410-2001-TestParamSetid-regInfo-certReqid-GostR3410-2001-CryptoPro-A-ParamSetid-alg-des40id-GostR3410-2001-CryptoPro-A-ParamSetid-alg-des40id-GostR3410-2001-CryptoPro-B-ParamSetid-alg-noSignatureid-GostR3410-2001-CryptoPro-B-ParamSetid-alg-noSignatureid-GostR3410-2001-CryptoPro-C-ParamSetid-alg-dh-sig-hmac-sha1id-GostR3410-2001-CryptoPro-C-ParamSetid-alg-dh-sig-hmac-sha1id-GostR3410-2001-CryptoPro-XchA-ParamSetid-alg-dh-popid-GostR3410-2001-CryptoPro-XchA-ParamSetid-alg-dh-popid-GostR3410-2001-CryptoPro-XchB-ParamSetid-cmc-statusInfoid-GostR3410-2001-CryptoPro-XchB-ParamSetid-cmc-statusInfoid-GostR3410-94-aid-cmc-identificationid-GostR3410-94-aid-cmc-identificationid-GostR3410-94-aBisid-cmc-identityProofid-GostR3410-94-aBisid-cmc-identityProofid-GostR3410-94-bid-cmc-dataReturnid-GostR3410-94-bid-cmc-dataReturnid-GostR3410-94-bBisid-cmc-transactionIdid-GostR3410-94-bBisid-cmc-transactionIdid-Gost28147-89-ccid-cmc-senderNonceGOST 28147-89 Cryptocom ParamSetid-cmc-senderNoncegost94ccid-cmc-recipientNonceGOST 34.10-94 Cryptocomid-cmc-recipientNoncegost2001ccid-cmc-addExtensionsGOST 34.10-2001 Cryptocomid-cmc-addExtensionsid-GostR3411-94-with-GostR3410-94-ccid-cmc-encryptedPOPGOST R 34.11-94 with GOST R 34.10-94 Cryptocomid-cmc-encryptedPOPid-GostR3411-94-with-GostR3410-2001-ccid-cmc-decryptedPOPGOST R 34.11-94 with GOST R 34.10-2001 Cryptocomid-cmc-decryptedPOPid-GostR3410-2001-ParamSet-ccid-cmc-lraPOPWitnessGOST R 3410-2001 Parameter Set Cryptocomid-cmc-lraPOPWitnessHMACid-cmc-getCerthmacid-cmc-getCertLocalKeySetid-cmc-getCRLMicrosoft Local Key setid-cmc-getCRLfreshestCRLid-cmc-revokeRequestX509v3 Freshest CRLid-cmc-revokeRequestid-on-permanentIdentifierid-cmc-regInfoPermanent Identifierid-cmc-regInfosearchGuideid-cmc-responseInfosearchGuideid-cmc-responseInfobusinessCategoryid-cmc-queryPendingbusinessCategoryid-cmc-queryPendingpostalAddressid-cmc-popLinkRandompostalAddressid-cmc-popLinkRandompostOfficeBoxid-cmc-popLinkWitnesspostOfficeBoxid-cmc-popLinkWitnessphysicalDeliveryOfficeNameid-cmc-confirmCertAcceptancephysicalDeliveryOfficeNameid-cmc-confirmCertAcceptancetelephoneNumberid-on-personalDatatelephoneNumberid-on-personalDatatelexNumberid-pda-dateOfBirthtelexNumberid-pda-dateOfBirthteletexTerminalIdentifierid-pda-placeOfBirthteletexTerminalIdentifierid-pda-placeOfBirthfacsimileTelephoneNumberid-pda-genderfacsimileTelephoneNumberid-pda-genderx121Addressid-pda-countryOfCitizenshipx121Addressid-pda-countryOfCitizenshipinternationaliSDNNumberid-pda-countryOfResidenceinternationaliSDNNumberid-pda-countryOfResidenceregisteredAddressid-aca-authenticationInforegisteredAddressid-aca-authenticationInfodestinationIndicatorid-aca-accessIdentitydestinationIndicatorid-aca-accessIdentitypreferredDeliveryMethodid-aca-chargingIdentitypreferredDeliveryMethodid-aca-chargingIdentitypresentationAddressid-aca-grouppresentationAddressid-aca-groupsupportedApplicationContextid-aca-rolesupportedApplicationContextid-aca-rolememberid-qcs-pkixQCSyntax-v1memberid-qcs-pkixQCSyntax-v1ownerid-cct-crsownerid-cct-crsroleOccupantid-cct-PKIDataroleOccupantid-cct-PKIDataseeAlsoid-cct-PKIResponseseeAlsoid-cct-PKIResponseuserPasswordad_timestampinguserPasswordAD Time StampinguserCertificateAD_DVCSuserCertificatead dvcscACertificatebasicOCSPResponsecACertificateBasic OCSP ResponseauthorityRevocationListNonceauthorityRevocationListOCSP NoncecertificateRevocationListCrlIDcertificateRevocationListOCSP CRL IDcrossCertificatePairacceptableResponsescrossCertificatePairAcceptable OCSP ResponsesenhancedSearchGuidenoCheckenhancedSearchGuideOCSP No CheckprotocolInformationarchiveCutoffprotocolInformationOCSP Archive CutoffdistinguishedNameserviceLocatordistinguishedNameOCSP Service LocatoruniqueMemberextendedStatusuniqueMemberExtended OCSP StatushouseIdentifiervalidhouseIdentifiervalidsupportedAlgorithmspathsupportedAlgorithmspathdeltaRevocationListtrustRootdeltaRevocationListTrust RootdmdNamealgorithmdmdNamealgorithmid-alg-PWRI-KEKrsaSignatureid-alg-PWRI-KEKrsaSignatureCMACX500algorithmscmacdirectory services - algorithmsid-aes128-GCMaes-128-gcmid-aes128-CCMaes-128-ccmid-aes128-wrap-padIANAid-aes128-wrap-padianaid-aes192-GCMdirectoryaes-192-gcmDirectoryid-aes192-CCMmgmtaes-192-ccmManagementid-aes192-wrap-padexperimentalid-aes192-wrap-padExperimentalid-aes256-GCMprivateaes-256-gcmPrivateid-aes256-CCMsecurityaes-256-ccmSecurityid-aes256-wrap-padsnmpv2id-aes256-wrap-padSNMPv2AES-128-CTRMailaes-128-ctrMailAES-192-CTRenterprisesaes-192-ctrEnterprisesAES-256-CTRdcobjectaes-256-ctrdcObjectid-camellia128-wrapid-camellia128-wrapdomainComponentid-camellia192-wrapdomainid-camellia192-wrapDomainid-camellia256-wrapNULLid-camellia256-wrapNULLanyExtendedKeyUsageselected-attribute-typesAny Extended Key UsageSelected Attribute TypesMGF1clearancemgf1clearanceRSASSA-PSSRSA-MD4rsassaPssmd4WithRSAEncryptionAES-128-XTSac-proxyingaes-128-xtsac-proxyingAES-256-XTSsubjectInfoAccessaes-256-xtsSubject Information AccessRC4-HMAC-MD5id-aca-encAttrsrc4-hmac-md5id-aca-encAttrsAES-128-CBC-HMAC-SHA1roleaes-128-cbc-hmac-sha1roleAES-192-CBC-HMAC-SHA1policyConstraintsaes-192-cbc-hmac-sha1X509v3 Policy ConstraintsAES-256-CBC-HMAC-SHA1targetInformationaes-256-cbc-hmac-sha1X509v3 AC TargetingRSAES-OAEPnoRevAvailrsaesOaepX509v3 No Revocation AvailabledhpublicnumberNULLX9.42 DHNULLbrainpoolP160r1ansi-X9-62brainpoolP160r1ANSI X9.62brainpoolP160t1prime-fieldbrainpoolP160t1prime-fieldbrainpoolP192r1characteristic-two-fieldbrainpoolP192r1characteristic-two-fieldbrainpoolP192t1id-ecPublicKeybrainpoolP192t1id-ecPublicKeybrainpoolP224r1prime192v1brainpoolP224r1prime192v1brainpoolP224t1prime192v2brainpoolP224t1prime192v2brainpoolP256r1prime192v3brainpoolP256r1prime192v3brainpoolP256t1prime239v1brainpoolP256t1prime239v1brainpoolP320r1prime239v2brainpoolP320r1prime239v2brainpoolP320t1prime239v3brainpoolP320t1prime239v3brainpoolP384r1prime256v1brainpoolP384r1prime256v1brainpoolP384t1ecdsa-with-SHA1brainpoolP384t1ecdsa-with-SHA1brainpoolP512r1CSPNamebrainpoolP512r1Microsoft CSP NamebrainpoolP512t1AES-128-ECBbrainpoolP512t1aes-128-ecbPSPECIFIEDAES-128-CBCpSpecifiedaes-128-cbcdhSinglePass-stdDH-sha1kdf-schemeAES-128-OFBdhSinglePass-stdDH-sha1kdf-schemeaes-128-ofbdhSinglePass-stdDH-sha224kdf-schemeAES-128-CFBdhSinglePass-stdDH-sha224kdf-schemeaes-128-cfbdhSinglePass-stdDH-sha256kdf-schemeAES-192-ECBdhSinglePass-stdDH-sha256kdf-schemeaes-192-ecbdhSinglePass-stdDH-sha384kdf-schemeAES-192-CBCdhSinglePass-stdDH-sha384kdf-schemeaes-192-cbcdhSinglePass-stdDH-sha512kdf-schemeAES-192-OFBdhSinglePass-stdDH-sha512kdf-schemeaes-192-ofbdhSinglePass-cofactorDH-sha1kdf-schemeAES-192-CFBdhSinglePass-cofactorDH-sha1kdf-schemeaes-192-cfbdhSinglePass-cofactorDH-sha224kdf-schemeAES-256-ECBdhSinglePass-cofactorDH-sha224kdf-schemeaes-256-ecbdhSinglePass-cofactorDH-sha256kdf-schemeAES-256-CBCdhSinglePass-cofactorDH-sha256kdf-schemeaes-256-cbcdhSinglePass-cofactorDH-sha384kdf-schemeAES-256-OFBdhSinglePass-cofactorDH-sha384kdf-schemeaes-256-ofbdhSinglePass-cofactorDH-sha512kdf-schemeAES-256-CFBdhSinglePass-cofactorDH-sha512kdf-schemeaes-256-cfbdh-std-kdfholdInstructionCodedh-std-kdfHold Instruction Codedh-cofactor-kdfholdInstructionNonedh-cofactor-kdfHold Instruction NoneAES-128-CBC-HMAC-SHA256holdInstructionCallIssueraes-128-cbc-hmac-sha256Hold Instruction Call IssuerAES-192-CBC-HMAC-SHA256holdInstructionRejectaes-192-cbc-hmac-sha256Hold Instruction RejectAES-256-CBC-HMAC-SHA256dataaes-256-cbc-hmac-sha256datact_precert_sctsCT Precertificate SCTsct_precert_poisonCT Precertificate Poisonct_precert_signerpilotCT Precertificate Signerpilotct_cert_sctspilotAttributeTypeCT Certificate SCTspilotAttributeTypejurisdictionLpilotAttributeSyntaxjurisdictionLocalityNamepilotAttributeSyntaxjurisdictionSTpilotObjectClassjurisdictionStateOrProvinceNamepilotObjectClassjurisdictionCpilotGroupsjurisdictionCountryNamepilotGroupsiA5StringSyntaxiA5StringSyntaxcaseIgnoreIA5StringSyntaxcaseIgnoreIA5StringSyntaxpilotObjectpilotObjectpilotPersonpilotPersonaccountaccountdocumentdocumentroomroomdocumentSeriesdocumentSeriesrFC822localPartrFC822localPartdNSDomaindNSDomaindomainRelatedObjectdomainRelatedObjectfriendlyCountryfriendlyCountrysimpleSecurityObjectsimpleSecurityObjectpilotOrganizationpilotOrganizationpilotDSApilotDSAqualityLabelledDataqualityLabelledDatauserIdtextEncodedORAddresstextEncodedORAddressmailrfc822MailboxinfoinfofavouriteDrinkfavouriteDrinkroomNumberroomNumberphotophotouserClassuserClasshosthostmanagermanagerdocumentIdentifierdocumentIdentifierdocumentTitledocumentTitledocumentVersiondocumentVersiondocumentAuthordocumentAuthordocumentLocationdocumentLocationhomeTelephoneNumberhomeTelephoneNumbersecretarysecretaryotherMailboxotherMailboxlastModifiedTimelastModifiedTimelastModifiedBylastModifiedByaRecordaRecordpilotAttributeType27pilotAttributeType27mXRecordmXRecordnSRecordnSRecordsOARecordsOARecordcNAMERecordcNAMERecordassociatedDomainassociatedDomainassociatedNameassociatedNamehomePostalAddresshomePostalAddresspersonalTitlepersonalTitlemobileTelephoneNumbermobileTelephoneNumberpagerTelephoneNumberpagerTelephoneNumberfriendlyCountryNamefriendlyCountryNameorganizationalStatusorganizationalStatusjanetMailboxjanetMailboxmailPreferenceOptionmailPreferenceOptionbuildingNamebuildingNamedSAQualitydSAQualitysingleLevelQualitysingleLevelQualitysubtreeMinimumQualitysubtreeMinimumQualitysubtreeMaximumQualitysubtreeMaximumQualitypersonalSignaturepersonalSignaturedITRedirectdITRedirectaudioaudiodocumentPublisherdocumentPublisherx500UniqueIdentifierx500UniqueIdentifiermime-mhsMIME MHSmime-mhs-headingsmime-mhs-headingsmime-mhs-bodiesmime-mhs-bodiesid-hex-partial-messageid-hex-partial-messageid-hex-multipart-messageid-hex-multipart-messagegenerationQualifiergenerationQualifierpseudonympseudonymid-setSecure Electronic Transactionsset-ctypecontent typesset-msgExtmessage extensionsset-attrset-attrset-policyUNDEFset-policyundefinedset-certExtrsadsicertificate extensionsRSA Data Security, Inc.set-brandpkcsset-brandRSA Data Security, Inc. PKCSsetct-PANDatasetct-PANDatasetct-PANTokensetct-PANTokensetct-PANOnlysetct-PANOnlysetct-OIDatarsaEncryptionsetct-OIDatarsaEncryptionsetct-PIRSA-MD2setct-PImd2WithRSAEncryptionsetct-PIDataRSA-MD5setct-PIDatamd5WithRSAEncryptionsetct-PIDataUnsignedPBE-MD2-DESsetct-PIDataUnsignedpbeWithMD2AndDES-CBCsetct-HODInputPBE-MD5-DESsetct-HODInputpbeWithMD5AndDES-CBCsetct-AuthResBaggageX500setct-AuthResBaggagedirectory services (X.500)setct-AuthRevReqBaggageX509setct-AuthRevReqBaggageX509setct-AuthRevResBaggagesetct-AuthRevResBaggagecommonNamesetct-CapTokenSeqsetct-CapTokenSeqcountryNamesetct-PInitResDatasetct-PInitResDatalocalityNamesetct-PI-TBSsetct-PI-TBSstateOrProvinceNamesetct-PResDatasetct-PResDataorganizationNamesetct-AuthReqTBSsetct-AuthReqTBSorganizationalUnitNamesetct-AuthResTBSsetct-AuthResTBSsetct-AuthResTBSXpkcs7setct-AuthResTBSXpkcs7setct-AuthTokenTBSpkcs7-datasetct-AuthTokenTBSpkcs7-datasetct-CapTokenDatapkcs7-signedDatasetct-CapTokenDatapkcs7-signedDatasetct-CapTokenTBSpkcs7-envelopedDatasetct-CapTokenTBSpkcs7-envelopedDatasetct-AcqCardCodeMsgpkcs7-signedAndEnvelopedDatasetct-AcqCardCodeMsgpkcs7-signedAndEnvelopedDatasetct-AuthRevReqTBSpkcs7-digestDatasetct-AuthRevReqTBSpkcs7-digestDatasetct-AuthRevResDatapkcs7-encryptedDatasetct-AuthRevResDatapkcs7-encryptedDatasetct-AuthRevResTBSpkcs3setct-AuthRevResTBSpkcs3setct-CapReqTBSdhKeyAgreementsetct-CapReqTBSdhKeyAgreementsetct-CapReqTBSXDES-ECBsetct-CapReqTBSXdes-ecbsetct-CapResDataDES-CFBsetct-CapResDatades-cfbsetct-CapRevReqTBSDES-CBCsetct-CapRevReqTBSdes-cbcsetct-CapRevReqTBSXDES-EDEsetct-CapRevReqTBSXdes-edesetct-CapRevResDataDES-EDE3setct-CapRevResDatades-ede3setct-CredReqTBSIDEA-CBCsetct-CredReqTBSidea-cbcsetct-CredReqTBSXIDEA-CFBsetct-CredReqTBSXidea-cfbsetct-CredResDataIDEA-ECBsetct-CredResDataidea-ecbsetct-CredRevReqTBSRC2-CBCsetct-CredRevReqTBSrc2-cbcsetct-CredRevReqTBSXRC2-ECBsetct-CredRevReqTBSXrc2-ecbsetct-CredRevResDataRC2-CFBsetct-CredRevResDatarc2-cfbsetct-PCertReqDataRC2-OFBsetct-PCertReqDatarc2-ofbsetct-PCertResTBSsetct-PCertResTBSsetct-BatchAdminReqDataRSA-SHAsetct-BatchAdminReqDatashaWithRSAEncryptionsetct-BatchAdminResDataDES-EDE-CBCsetct-BatchAdminResDatades-ede-cbcsetct-CardCInitResTBSDES-EDE3-CBCsetct-CardCInitResTBSdes-ede3-cbcsetct-MeAqCInitResTBSDES-OFBsetct-MeAqCInitResTBSdes-ofbsetct-RegFormResTBSIDEA-OFBsetct-RegFormResTBSidea-ofbsetct-CertReqDatapkcs9setct-CertReqDatapkcs9setct-CertReqTBSemailAddresssetct-CertReqTBSemailAddresssetct-CertResDataunstructuredNamesetct-CertResDataunstructuredNamesetct-CertInqReqTBScontentTypesetct-CertInqReqTBScontentTypesetct-ErrorTBSmessageDigest.\crypto\objects\obj_dat.csetct-ErrorTBSmessageDigestsetct-PIDualSignedTBEsigningTimesetct-PIDualSignedTBEsigningTimesetct-PIUnsignedTBEcountersignaturesetct-PIUnsignedTBEcountersignaturesetct-AuthReqTBEchallengePasswordsetct-AuthReqTBEchallengePasswordsetct-AuthResTBEunstructuredAddress.\crypto\objects\obj_dat.csetct-AuthResTBEunstructuredAddresssetct-AuthResTBEXextendedCertificateAttributessetct-AuthResTBEXextendedCertificateAttributessetct-AuthTokenTBENetscapesetct-AuthTokenTBENetscape Communications Corp.setct-CapTokenTBEnsCertExtsetct-CapTokenTBENetscape Certificate Extension.\crypto\objects\obj_dat.csetct-CapTokenTBEXnsDataTypesetct-CapTokenTBEXNetscape Data Typesetct-AcqCardCodeMsgTBEDES-EDE-CFBsetct-AcqCardCodeMsgTBEdes-ede-cfbsetct-AuthRevReqTBEDES-EDE3-CFBsetct-AuthRevReqTBEdes-ede3-cfbsetct-AuthRevResTBEDES-EDE-OFB.\crypto\objects\obj_dat.csetct-AuthRevResTBEdes-ede-ofbsetct-AuthRevResTBEBDES-EDE3-OFBsetct-AuthRevResTBEBdes-ede3-ofbsetct-CapReqTBESHA1setct-CapReqTBEsha1setct-CapReqTBEXRSA-SHA1setct-CapReqTBEXsha1WithRSAEncryptionsetct-CapResTBEDSA-SHAsetct-CapResTBEdsaWithSHAsetct-CapRevReqTBEDSA-oldsetct-CapRevReqTBEdsaEncryption-oldsetct-CapRevReqTBEXPBE-SHA1-RC2-64setct-CapRevReqTBEXpbeWithSHA1AndRC2-CBCsetct-CapRevResTBEPBKDF2.\crypto\objects\obj_dat.csetct-CapRevResTBEPBKDF2setct-CredReqTBEDSA-SHA1-oldsetct-CredReqTBEdsaWithSHA1-oldsetct-CredReqTBEXnsCertTypesetct-CredReqTBEXNetscape Cert Typesetct-CredResTBEnsBaseUrlsetct-CredResTBENetscape Base Urlsetct-CredRevReqTBEnsRevocationUrlsetct-CredRevReqTBENetscape Revocation Urlsetct-CredRevReqTBEXnsCaRevocationUrlsetct-CredRevReqTBEXNetscape CA Revocation Urlsetct-CredRevResTBEnsRenewalUrlsetct-CredRevResTBENetscape Renewal Urlsetct-BatchAdminReqTBEnsCaPolicyUrlsetct-BatchAdminReqTBENetscape CA Policy Urlsetct-BatchAdminResTBEnsSslServerName.\crypto\objects\obj_dat.csetct-BatchAdminResTBENetscape SSL Server Namesetct-RegFormReqTBEnsCommentsetct-RegFormReqTBENetscape Commentsetct-CertReqTBEnsCertSequencesetct-CertReqTBENetscape Certificate Sequencesetct-CertReqTBEXDESX-CBCsetct-CertReqTBEXdesx-cbcsetct-CertResTBEid-ce.\crypto\objects\obj_lib.c.\crypto\objects\obj_lib.c.\crypto\objects\obj_lib.c.\crypto\objects\obj_lib.c.\crypto\objects\obj_lib.cQ@QPRR` Rp0R@ROBJ_add_objectOBJ_createOBJ_dupOBJ_NAME_new_indexOBJ_nid2lnOBJ_nid2objOBJ_nid2sndReRmalloc failureunknown nid.\crypto\objects\obj_xref.cctx->length <= (int)sizeof(ctx->enc_data).\crypto\evp\encode.cn < (int)sizeof(ctx->enc_data).\crypto\evp\encode.c.\crypto\evp\digest.c.\crypto\evp\digest.c.\crypto\evp\digest.c.\crypto\evp\digest.c.\crypto\evp\digest.c.\crypto\evp\digest.cctx->digest->md_size <= EVP_MAX_MD_SIZE.\crypto\evp\digest.c.\crypto\evp\digest.c.\crypto\evp\digest.c.\crypto\evp\digest.c.\crypto\evp\digest.c.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.cctx->cipher->block_size == 1 || ctx->cipher->block_size == 8 || ctx->cipher->block_size == 16.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.cEVP_CIPHER_CTX_iv_length(ctx) <= (int)sizeof(ctx->iv).\crypto\evp\evp_enc.cbl <= (int)sizeof(ctx->buf).\crypto\evp\evp_enc.cb <= sizeof ctx->buf.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.cb <= sizeof ctx->final.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.cb <= sizeof ctx->final.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.c.\crypto\evp\evp_enc.cnkey <= EVP_MAX_KEY_LENGTH.\crypto\evp\evp_key.cniv <= EVP_MAX_IV_LENGTH.\crypto\evp\evp_key.c.\crypto\evp\evp_cnf.cfips_mode.\crypto\evp\evp_cnf.c.\crypto\evp\evp_cnf.c.\crypto\evp\evp_cnf.c, value=name=alg_section.\crypto\evp\e_camellia.c.\crypto\evp\e_aes.c.\crypto\evp\e_aes.c.\crypto\evp\e_aes.c.\crypto\evp\e_aes.c.\crypto\evp\e_rc2.cl <= sizeof(iv).\crypto\evp\e_rc2.c.\crypto\evp\p_open.c.\crypto\evp\p_open.c.\crypto\evp\p_open.c.\crypto\evp\p_sign.c.\crypto\evp\p_sign.c.\crypto\evp\p_verify.c.\crypto\evp\p_verify.c.\crypto\evp\p_lib.c.\crypto\evp\p_lib.c.\crypto\evp\p_lib.c.\crypto\evp\p_lib.c.\crypto\evp\p_lib.c.\crypto\evp\p_lib.c.\crypto\evp\p_lib.c.\crypto\evp\p_lib.c.\crypto\evp\p_lib.c.\crypto\evp\p_lib.c.\crypto\evp\p_lib.c%s algorithm "%s" unsupported Public KeyPrivate KeyParameters.\crypto\evp\p_enc.c.\crypto\evp\p_dec.cP\ п     p message digestctx->buf_len >= ctx->buf_off.\crypto\evp\bio_b64.cctx->buf_len >= ctx->buf_off.\crypto\evp\bio_b64.cctx->buf_len >= ctx->buf_off.\crypto\evp\bio_b64.cbase64 encoding.\crypto\evp\bio_b64.c ]0 `  0 p  p ctx->buf_len >= ctx->buf_off.\crypto\evp\bio_b64.cctx->buf_off + i < (int)sizeof(ctx->buf)i <= n.\crypto\evp\bio_b64.cctx->buf_off < (int)sizeof(ctx->buf).\crypto\evp\bio_b64.cctx->buf_len <= (int)sizeof(ctx->buf).\crypto\evp\bio_b64.cctx->buf_len >= ctx->buf_off.\crypto\evp\bio_b64.c.\crypto\evp\bio_b64.cctx->buf_off <= (int)sizeof(ctx->buf).\crypto\evp\bio_b64.cctx->buf_len >= ctx->buf_off.\crypto\evp\bio_b64.cctx->tmp_len <= 3.\crypto\evp\bio_b64.cctx->buf_len <= (int)sizeof(ctx->buf).\crypto\evp\bio_b64.cctx->buf_len >= ctx->buf_off.\crypto\evp\bio_b64.cctx->buf_len <= (int)sizeof(ctx->buf).\crypto\evp\bio_b64.cctx->buf_len >= ctx->buf_off.\crypto\evp\bio_b64.cctx->buf_len <= (int)sizeof(ctx->buf).\crypto\evp\bio_b64.cctx->buf_len >= ctx->buf_off.\crypto\evp\bio_b64.ci <= n.\crypto\evp\bio_b64.cctx->buf_off <= (int)sizeof(ctx->buf).\crypto\evp\bio_b64.c a0   P  p cipher.\crypto\evp\bio_enc.cP f fPf f g g  g 0g Hg0 Xg@pg g`gpgg@gg0 gh(hPHh`hxhh h`h0h h@hii0ipHihi` i iiip i i j  j@jXj pjpjj j0jj k0 k(k@ 8kP Pkhkxkkk k kkll`  l 0lp Hl `l l l l lPl`l@ lm 0m@mXmAESNI_INIT_KEYAESNI_XTS_CIPHERAES_INIT_KEYAES_T4_INIT_KEYAES_XTSAES_XTS_CIPHERALG_MODULE_INITCAMELLIA_INIT_KEYCMAC_INITCMLL_T4_INIT_KEYD2I_PKEYDO_SIGVER_INITDSAPKEY2PKCS8DSA_PKEY2PKCS8ECDSA_PKEY2PKCS8ECKEY_PKEY2PKCS8EVP_CipherInit_exEVP_CIPHER_CTX_copyEVP_CIPHER_CTX_ctrlEVP_CIPHER_CTX_set_key_lengthEVP_DecryptFinal_exEVP_DigestInit_exEVP_EncryptFinal_exEVP_MD_CTX_copy_exEVP_MD_sizeEVP_OpenInitEVP_PBE_alg_addEVP_PBE_alg_add_typeEVP_PBE_CipherInitEVP_PKCS82PKEYEVP_PKCS82PKEY_BROKENEVP_PKEY2PKCS8_brokenEVP_PKEY_copy_parametersEVP_PKEY_CTX_ctrlEVP_PKEY_CTX_ctrl_strEVP_PKEY_CTX_dupEVP_PKEY_decryptEVP_PKEY_decrypt_initEVP_PKEY_decrypt_oldEVP_PKEY_deriveEVP_PKEY_derive_initEVP_PKEY_derive_set_peerEVP_PKEY_encryptEVP_PKEY_encrypt_initEVP_PKEY_encrypt_oldEVP_PKEY_get1_DHEVP_PKEY_get1_DSAEVP_PKEY_GET1_ECDSAEVP_PKEY_get1_EC_KEYEVP_PKEY_get1_RSAEVP_PKEY_keygenEVP_PKEY_keygen_initEVP_PKEY_newEVP_PKEY_paramgenEVP_PKEY_paramgen_initEVP_PKEY_signEVP_PKEY_sign_initEVP_PKEY_verifyEVP_PKEY_verify_initEVP_PKEY_verify_recoverEVP_PKEY_verify_recover_initEVP_RIJNDAELEVP_SignFinalEVP_VerifyFinalFIPS_CIPHERINITFIPS_CIPHER_CTX_COPYFIPS_CIPHER_CTX_CTRLFIPS_CIPHER_CTX_SET_KEY_LENGTHFIPS_DIGESTINITFIPS_MD_CTX_COPYHMAC_Init_exINT_CTX_NEWPKCS5_PBE_keyivgenPKCS5_v2_PBE_keyivgenPKCS5_V2_PBKDF2_KEYIVGENPKCS8_set_brokenPKEY_SET_TYPERC2_MAGIC_TO_METHRC5_CTRLaes iv setup failedhmr(r8rdPr`rpprqrrrzrrrs0srXsehssssssswst(t@tXtptttottttu uf8uxHuXupuguuuutuuvhvi8vXvvuvvvjw w0w@wPwy`wxwwkw{w|wlx} xv0x~Xxpxmxnxaes key setup failedasn1 libbad block lengthbad decryptbad key lengthbn decode errorbn pubkey errorbuffer too smallcamellia key setup failedcipher parameter errorcommand not supportedctrl not implementedctrl operation not implementeddata not multiple of block lengthdecode errordifferent key typesdifferent parametersdisabled for fipsencode errorerror loading sectionerror setting fips modeevp pbe cipherinit errorexpecting an rsa keyexpecting a dh keyexpecting a dsa keyexpecting a ecdsa keyexpecting a ec keyfips mode not supportedinitialization errorinput not initializedinvalid digestinvalid fips modeinvalid keyinvalid key lengthinvalid operationiv too largekeygen failuremessage digest is nullmethod not supportedmissing parametersno cipher setno default digestno digest setno dsa parametersno key setno operation setno sign function configuredno verify function configuredoperation not supported for this keytypeoperaton not initializedpkcs8 unknown broken typeprivate key decode errorprivate key encode errorpublic key not rsatoo largeunknown cipherunknown digestunknown optionunknown pbe algorithmunsuported number of roundsunsupported algorithmunsupported cipherunsupported keylengthunsupported key derivation functionunsupported key sizeunsupported prfunsupported private key algorithmunsupported salt typewrap mode not allowedwrong final block lengthwrong public key typeDESX-CBCDESXDESDESX-CBCdesxdesDES-CBCDES-CBCDES-EDE3-CBCDES3DES-EDE3-CBCdes3IDEA-CBCIDEARC2IDEA-CBCidearc2SEED-CBCSEEDBF-CBCBFSEED-CBCseedBF-CBCbfRC2-CBCRC2-CBCBF-CBCblowfishAES128CAST5-CBCCASTCAST5-CBCcastCAST5-CBCCAST-cbcCAST5-CBCcast-cbcAES-128-CBCAES-128-CBCaes128AES-192-CBCAES192AES-192-CBCaes192AES-256-CBCAES256AES-256-CBCaes256CAMELLIA-128-CBCCAMELLIA128CAMELLIA-128-CBCcamellia128CAMELLIA-192-CBCCAMELLIA192CAMELLIA-192-CBCcamellia192CAMELLIA-256-CBCCAMELLIA256CAMELLIA-256-CBCcamellia256MD5MD5ssl2-md5ssl3-md5SHA1ssl3-sha1RSA-SHA1RSA-SHA1-2DSA-SHA1DSA-SHA1-oldDSA-SHA1DSS1DSA-SHA1dss1RIPEMD160ripemdRIPEMD160rmd160l <= sizeof(c->iv).\crypto\evp\evp_lib.cj <= sizeof(c->iv).\crypto\evp\evp_lib.c.\crypto\evp\evp_lib.cThe quick brown fox jumped over the lazy dog's back.The quick brown fox jumped over the lazy dog's back.The quick brown fox jumped over the lazy dog's back.The quick brown fox jumped over the lazy dog's back. @~@     p reliable.\crypto\evp\bio_ok.c.\crypto\evp\evp_pkey.c.\crypto\evp\evp_pkey.cTYPE=.\crypto\evp\evp_pkey.c.\crypto\evp\evp_pkey.c.\crypto\evp\evp_pkey.c.\crypto\evp\evp_pkey.c.\crypto\evp\evp_pkey.c.\crypto\evp\evp_pkey.c.\crypto\evp\evp_pkey.c.\crypto\evp\evp_pbe.c.\crypto\evp\evp_pbe.c.\crypto\evp\evp_pbe.cNULLTYPE=.\crypto\evp\evp_pbe.c.\crypto\evp\evp_pbe.c.\crypto\evp\evp_pbe.c.\crypto\evp\p5_crpt.c.\crypto\evp\p5_crpt.cEVP_CIPHER_key_length(cipher) <= (int)sizeof(md_tmp).\crypto\evp\p5_crpt.cEVP_CIPHER_iv_length(cipher) <= 16.\crypto\evp\p5_crpt.c.\crypto\evp\p5_crpt2.c.\crypto\evp\p5_crpt2.c.\crypto\evp\p5_crpt2.c.\crypto\evp\p5_crpt2.c.\crypto\evp\p5_crpt2.c.\crypto\evp\p5_crpt2.ckeylen <= sizeof key.\crypto\evp\p5_crpt2.c.\crypto\evp\p5_crpt2.c.\crypto\evp\p5_crpt2.c.\crypto\evp\p5_crpt2.c.\crypto\evp\p5_crpt2.c.\crypto\evp\p5_crpt2.c.\crypto\evp\p5_crpt2.c w`p`.\crypto\evp\pmeth_lib.c.\crypto\evp\pmeth_lib.cdigest.\crypto\evp\pmeth_lib.c.\crypto\evp\pmeth_lib.c.\crypto\evp\pmeth_lib.c.\crypto\evp\pmeth_lib.c.\crypto\evp\pmeth_lib.c.\crypto\evp\pmeth_lib.c.\crypto\evp\pmeth_lib.c.\crypto\evp\pmeth_lib.c.\crypto\evp\pmeth_lib.c.\crypto\evp\pmeth_lib.c.\crypto\evp\pmeth_lib.c.\crypto\evp\pmeth_lib.c.\crypto\evp\pmeth_lib.c.\crypto\evp\pmeth_lib.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_gn.c.\crypto\evp\pmeth_gn.c.\crypto\evp\pmeth_gn.c.\crypto\evp\pmeth_gn.c.\crypto\evp\pmeth_gn.c.\crypto\evp\pmeth_gn.c.\crypto\evp\pmeth_gn.c.\crypto\evp\m_sigver.c `P& P' 0`/ `P& P' 0`/  `= > `pG `= > `pG  W W (\ .\crypto\asn1\a_object.c.\crypto\asn1\a_object.c.\crypto\asn1\a_object.c.\crypto\asn1\a_object.c.\crypto\asn1\a_object.c.\crypto\asn1\a_object.c.\crypto\asn1\a_object.cNULL.\crypto\asn1\a_object.c.\crypto\asn1\a_object.c.\crypto\asn1\a_object.c.\crypto\asn1\a_object.c.\crypto\asn1\a_object.c.\crypto\asn1\a_object.c.\crypto\asn1\a_object.c.\crypto\asn1\a_object.c.\crypto\asn1\a_bitstr.c.\crypto\asn1\a_bitstr.c.\crypto\asn1\a_bitstr.c.\crypto\asn1\a_bitstr.c.\crypto\asn1\a_bitstr.c.\crypto\asn1\a_utctm.c.\crypto\asn1\a_utctm.c%02d%02d%02d%02d%02d%02dZ.\crypto\asn1\a_gentm.c.\crypto\asn1\a_gentm.c%04d%02d%02d%02d%02d%02dZASN1_TIME.\crypto\asn1\a_time.c1920.\crypto\asn1\a_int.c.\crypto\asn1\a_int.c.\crypto\asn1\a_int.c.\crypto\asn1\a_int.c.\crypto\asn1\a_int.c.\crypto\asn1\a_int.c.\crypto\asn1\a_int.c.\crypto\asn1\a_int.c.\crypto\asn1\a_int.c.\crypto\asn1\a_int.c.\crypto\asn1\a_set.c.\crypto\asn1\a_set.c.\crypto\asn1\a_set.c.\crypto\asn1\a_set.c.\crypto\asn1\a_set.c.\crypto\asn1\a_set.c.\crypto\asn1\a_set.c.\crypto\asn1\a_set.c.\crypto\asn1\a_set.c.\crypto\asn1\a_dup.c.\crypto\asn1\a_dup.c.\crypto\asn1\a_dup.c.\crypto\asn1\a_d2i_fp.c.\crypto\asn1\a_d2i_fp.c.\crypto\asn1\a_d2i_fp.c.\crypto\asn1\a_d2i_fp.c.\crypto\asn1\a_d2i_fp.c.\crypto\asn1\a_d2i_fp.c.\crypto\asn1\a_d2i_fp.c.\crypto\asn1\a_d2i_fp.c.\crypto\asn1\a_d2i_fp.c.\crypto\asn1\a_d2i_fp.c.\crypto\asn1\a_d2i_fp.c.\crypto\asn1\a_d2i_fp.c.\crypto\asn1\a_i2d_fp.c.\crypto\asn1\a_i2d_fp.c.\crypto\asn1\a_i2d_fp.c.\crypto\asn1\a_i2d_fp.c.\crypto\asn1\a_i2d_fp.c.\crypto\asn1\a_enum.c.\crypto\asn1\a_enum.c.\crypto\asn1\a_enum.c.\crypto\asn1\a_enum.c.\crypto\asn1\a_enum.c.\crypto\asn1\a_enum.c.\crypto\asn1\a_sign.c.\crypto\asn1\a_sign.c.\crypto\asn1\a_sign.c.\crypto\asn1\a_sign.c.\crypto\asn1\a_sign.c.\crypto\asn1\a_sign.c.\crypto\asn1\a_sign.c.\crypto\asn1\a_sign.c.\crypto\asn1\a_sign.c.\crypto\asn1\a_sign.c.\crypto\asn1\a_sign.c.\crypto\asn1\a_sign.c.\crypto\asn1\a_digest.c.\crypto\asn1\a_digest.c.\crypto\asn1\a_verify.c.\crypto\asn1\a_verify.c.\crypto\asn1\a_verify.c.\crypto\asn1\a_verify.c.\crypto\asn1\a_verify.c.\crypto\asn1\a_verify.c.\crypto\asn1\a_verify.c.\crypto\asn1\a_verify.c.\crypto\asn1\a_verify.c.\crypto\asn1\a_verify.c.\crypto\asn1\a_verify.c.\crypto\asn1\a_verify.c.\crypto\asn1\a_verify.c.\crypto\asn1\a_verify.c.\crypto\asn1\a_verify.c.\crypto\asn1\a_verify.c.\crypto\asn1\a_mbstr.c.\crypto\asn1\a_mbstr.c.\crypto\asn1\a_mbstr.c.\crypto\asn1\a_mbstr.c.\crypto\asn1\a_mbstr.c%ld%ldminsize=.\crypto\asn1\a_mbstr.cmaxsize=.\crypto\asn1\a_mbstr.c.\crypto\asn1\a_mbstr.c.\crypto\asn1\a_mbstr.c.\crypto\asn1\a_mbstr.c.\crypto\asn1\a_mbstr.c'()+,-./:=?\W%08lX\U%04lX\\%02X\\#:.\crypto\asn1\a_strex.c"" + ,+, + ; + = =X509_ALGORalgorithmsX509_ALGORSalgorithmparameternotBeforenotAfterX509_VALalgorpublic_keyX509_PUBKEY.\crypto\asn1\x_pubkey.c.\crypto\asn1\x_pubkey.c.\crypto\asn1\x_pubkey.c.\crypto\asn1\x_pubkey.c.\crypto\asn1\x_pubkey.c.\crypto\asn1\x_pubkey.c.\crypto\asn1\x_pubkey.c.\crypto\asn1\x_pubkey.c.\crypto\asn1\x_pubkey.c.\crypto\asn1\x_pubkey.c.\crypto\asn1\x_pubkey.c.\crypto\asn1\x_pubkey.c.\crypto\asn1\x_pubkey.c.\crypto\asn1\x_pubkey.c.\crypto\asn1\x_pubkey.calgordigestX509_SIGversionsubjectpubkeyattributesX509_REQ_INFOreq_infosig_algsignatureX509_REQvalue.setvalue.singleX509_ATTRIBUTEobjectX509_ATTRIBUTE p    0 BIGNUMBIGNUM.\crypto\asn1\x_long.c.\crypto\asn1\x_long.c%ld LONG     @ ZLONG.\crypto\asn1\x_name.c.\crypto\asn1\x_name.c.\crypto\asn1\x_name.cobjectvalueX509_NAME_ENTRYRDNSX509_NAME_ENTRIESNameX509_NAME_INTERNALX509_NAME.\crypto\asn1\x_name.c.\crypto\asn1\x_name.cversionserialNumbersignatureissuerkeyvaliditysubjectissuerUIDsubjectUIDextensionsX509_CINFcert_infosig_algsignatureX509pp == NULL || *pp != NULL.\crypto\asn1\x_x509.c.\crypto\asn1\x_x509.ctrustrejectaliaskeyidotherX509_CERT_AUXforwardreverseX509_CERT_PAIRserialNumberrevocationDateextensionscrlX509_REVOKED   versionsig_algissuerlastUpdatenextUpdaterevokedextensionsX509_CRL_INFOsig_algsignatureX509_CRL.\crypto\asn1\x_crl.c.\crypto\asn1\x_crl.c.\crypto\asn1\x_crl.c.\crypto\asn1\x_crl.c.\crypto\asn1\x_info.c.\crypto\asn1\x_info.c.\crypto\asn1\x_info.cpubkeychallengeNETSCAPE_SPKACspkacsig_algorsignatureNETSCAPE_SPKItypecertsNETSCAPE_CERT_SEQUENCENETSCAPE_X509headercert.\crypto\asn1\d2i_pu.c.\crypto\asn1\d2i_pu.c.\crypto\asn1\d2i_pu.c.\crypto\asn1\d2i_pu.c.\crypto\asn1\d2i_pu.c.\crypto\asn1\d2i_pu.c.\crypto\asn1\d2i_pr.c.\crypto\asn1\d2i_pr.c.\crypto\asn1\d2i_pr.c.\crypto\asn1\d2i_pr.c.\crypto\asn1\i2d_pu.c.\crypto\asn1\i2d_pr.c%12scritical: %s %16s .\crypto\asn1\t_req.c.\crypto\asn1\t_req.cCertificate Request: Data: -%8sVersion: %s%lu (%s0x%lx) Subject:%c Subject Public Key Info: %12sPublic Key Algorithm: %12sUnable to load Public Key %8sAttributes: %12sa0:00 %12s: unable to print attribute %8sRequested Extensions: .\crypto\asn1\t_x509.cCertificate: Data: -%8sVersion: %lu (0x%lx) %02x%c Serial Number: %s%lu (%s0x%lx) (Negative) %12s%s Issuer:%c Validity Not Before: Not After : : Subject:%c Subject Public Key Info: %02x%s %12sPublic Key Algorithm: Jan%12sUnable to load Public Key %8sIssuer Unique ID: %8sSubject Unique ID: X509v3 extensionsFeb Subject OCSP hash: Mar.\crypto\asn1\t_x509.c%02X Public key OCSP hash: %02X Signature Algorithm: AprBad time value\ĤLĥȥ̥ХԥإܥMayJunJulAugSepOctNovDec GMT%s %2d %02d:%02d:%02d%.*s %d%sBad time value GMT%s %2d %02d:%02d:%02d %d%s, Bad time value.\crypto\asn1\t_x509.c%*sTrusted Uses: %*s, %*sNo Trusted Uses. %*sRejected Uses: %*s, %*sNo Rejected Uses. %*sAlias: %s %*sKey Id: :%s%02X .\crypto\asn1\t_crl.cCertificate Revocation List (CRL): %8sVersion %lu (0x%lx) %8sIssuer: %s %8sLast Update: %8sNext Update: NONECRL extensionsRevoked Certificates: No Revoked Certificates. Serial Number: Revocation Date: CRL entry extensions-%s 0 %s %s%lu (%s0x%lx) : (Negative)%s%s%02x%s Netscape SPKI: UNKNOWN Public Key Algorithm: %s : Unable to load public key Challenge String: %s UNKNOWN Signature Algorithm: %s%02x%s %*s, .\crypto\asn1\tasn_new.c.\crypto\asn1\tasn_new.c.\crypto\asn1\tasn_new.c.\crypto\asn1\tasn_new.c.\crypto\asn1\tasn_new.c.\crypto\asn1\tasn_new.c.\crypto\asn1\tasn_enc.c.\crypto\asn1\tasn_enc.c.\crypto\asn1\tasn_enc.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.cField=.\crypto\asn1\tasn_dec.cType=.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c, Type=.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_utl.c.\crypto\asn1\tasn_utl.c.\crypto\asn1\tasn_utl.cASN1_INTEGERASN1_ENUMERATEDASN1_BIT_STRINGASN1_OCTET_STRINGASN1_NULLASN1_OBJECTASN1_UTF8STRINGASN1_PRINTABLESTRINGASN1_T61STRINGASN1_IA5STRINGASN1_GENERALSTRINGASN1_UTCTIMEASN1_GENERALIZEDTIMEASN1_VISIBLESTRINGASN1_UNIVERSALSTRINGASN1_BMPSTRINGASN1_ANYASN1_SEQUENCEASN1_PRINTABLEDISPLAYTEXTDIRECTORYSTRINGASN1_BOOLEANASN1_TBOOLEANASN1_FBOOLEANASN1_OCTET_STRING_NDEFASN1_SEQUENCE_ANYASN1_SEQUENCE_ANYASN1_SET_ANYASN1_SET_ANY .\crypto\asn1\tasn_prn.c { .\crypto\asn1\tasn_prn.c SET:EXTERNAL TYPE %s ERROR: selector [%d] invalid %*s} Unprocessed type %d SEQUENCE%*s} : %*s%s OF %s { %*s%s: %*s (%s)BOOL ABSENTFALSETRUENULL :%s (%s) (%ld unused bits) .\crypto\asn1\ameth_lib.cuPv{|p}@~@ȵ0123456789ABCDEF-00\ .\crypto\asn1\f_int.c.\crypto\asn1\f_int.c.\crypto\asn1\f_int.c.\crypto\asn1\f_int.c.\crypto\asn1\f_int.c.\crypto\asn1\f_int.c0123456789ABCDEF0\ .\crypto\asn1\f_string.c.\crypto\asn1\f_string.c.\crypto\asn1\f_string.c.\crypto\asn1\f_string.c.\crypto\asn1\f_string.c.\crypto\asn1\f_string.cosenckeyNETSCAPE_ENCRYPTED_PKEYversionalgorprivate_keyNETSCAPE_PKEY.\crypto\asn1\n_pkey.c.\crypto\asn1\n_pkey.c.\crypto\asn1\n_pkey.c.\crypto\asn1\n_pkey.cprivate-key.\crypto\asn1\n_pkey.cEnter Private Key password:.\crypto\asn1\n_pkey.cSGCKEYSALT.\crypto\asn1\n_pkey.cprivate-key.\crypto\asn1\n_pkey.c.\crypto\asn1\n_pkey.cEnter Private Key password:.\crypto\asn1\n_pkey.cSGCKEYSALT.\crypto\asn1\n_pkey.c.\crypto\asn1\n_pkey.c`0123456789ABCDEF00\ .\crypto\asn1\f_enum.c.\crypto\asn1\f_enum.c.\crypto\asn1\f_enum.c.\crypto\asn1\f_enum.c.\crypto\asn1\f_enum.c.\crypto\asn1\f_enum.c.\crypto\asn1\x_pkey.c.\crypto\asn1\x_pkey.c.\crypto\asn1\x_pkey.c.\crypto\asn1\x_pkey.c.\crypto\asn1\a_bool.cX509_EXTENSIONExtensionX509_EXTENSIONSobjectcriticalvalue0     P М p asn1.\crypto\asn1\bio_asn1.c.\crypto\asn1\bio_asn1.cctx->buflen <= ctx->bufsize.\crypto\asn1\bio_asn1.c.\crypto\asn1\bio_ndef.c.\crypto\asn1\bio_ndef.c.\crypto\asn1\bio_ndef.c.\crypto\asn1\bio_ndef.c.\crypto\asn1\asn_mime.c-----BEGIN %s----- ,-----END %s----- md5.\crypto\asn1\asn_mime.c .\crypto\asn1\asn_mime.csha1 sha-256sha-384sha-512gostr3411-94unknownsmime.p7m%sapplication/x-pkcs7-application/pkcs7- MIME-Version: 1.0%s Content-Type: multipart/signed; protocol="%ssignature";type: -- micalg="type: --"; boundary="----%s"%s%stype: This is an S/MIME signed message%s%s------%s%s%s------%s%sContent-Type: %ssignature; name="smime.p7s"%sContent-Transfer-Encoding: base64%sContent-Disposition: attachment; filename="smime.p7s"%s%s%s------%s--%s%senveloped-datasigned-receiptsigned-datacerts-onlycompressed-datasmime.p7zMIME-Version: 1.0%sContent-Disposition: attachment; filename="%s"%sContent-Type: %smime; smime-type=%s; name="%s"%sContent-Transfer-Encoding: base64%s%s.\crypto\asn1\asn_mime.c.\crypto\asn1\asn_mime.ccontent-type.\crypto\asn1\asn_mime.cmultipart/signedboundary.\crypto\asn1\asn_mime.c.\crypto\asn1\asn_mime.c.\crypto\asn1\asn_mime.ccontent-type.\crypto\asn1\asn_mime.capplication/x-pkcs7-signatureapplication/pkcs7-signature.\crypto\asn1\asn_mime.c.\crypto\asn1\asn_mime.capplication/x-pkcs7-mimeapplication/pkcs7-mime.\crypto\asn1\asn_mime.c.\crypto\asn1\asn_mime.cContent-Type: text/plain .\crypto\asn1\asn_mime.ccontent-type.\crypto\asn1\asn_mime.ctext/plain.\crypto\asn1\asn_mime.c.\crypto\asn1\asn_mime.c.\crypto\asn1\asn_mime.c.\crypto\asn1\asn_mime.c.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.ctag=ASCIIHEX.\crypto\asn1\asn1_gen.cChar=INT.\crypto\asn1\asn1_gen.cOID.\crypto\asn1\asn1_gen.cUTF8OBJECTUTCBITLIST.\crypto\asn1\asn1_gen.cOCT.\crypto\asn1\asn1_gen.cBITSTRIA5.\crypto\asn1\asn1_gen.cBMP.\crypto\asn1\asn1_gen.cT61.\crypto\asn1\asn1_gen.cBOOLGENSTRSEQBOOLEANNULLINTEGERENUMENUMERATEDSETUTCTIMEGENERALIZEDTIMEGENTIMEOCTETSTRINGEXPBITSTRINGIMPUNIVERSALSTRINGUNIVIA5STRINGUTF8FORMATUTF8StringBMPSTRINGVISIBLESTRINGVISIBLEPRINTABLESTRINGPRINTABLET61STRINGTELETEXSTRINGGeneralStringNUMERICNUMERICSTRINGSEQUENCEEXPLICITIMPLICITOCTWRAPSEQWRAPSETWRAPBITWRAPFORM.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.cstring=.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.c.\crypto\asn1\asn1_gen.c:-%02X00 BAD ENUMERATED EOCBOOLEANINTEGERBIT STRINGSETOCTET STRINGNULLOBJECTOBJECT DESCRIPTORcons: EXTERNALREALprim: ENUMERATED::UTF8STRING:%d: :SEQUENCE%5ld:-NUMERICSTRINGPRINTABLESTRINGT61STRING00VIDEOTEXSTRINGIA5STRINGUTCTIMEGENERALIZEDTIMEGRAPHICSTRINGVISIBLESTRINGGENERALSTRINGUNIVERSALSTRINGBMPSTRING(unknown)priv [ %d ] cont [ %d ]appl [ %d ]BAD RECURSION DEPTH Error in encoding d=%-2d hl=%ld l=%4ld d=%-2d hl=%ld l=inf length is greater than %ld :BAD OBJECTBad boolean [HEX DUMP]:%02X%02XBAD INTEGER.\crypto\asn1\asn1_lib.c.\crypto\asn1\asn1_lib.c%lu.\crypto\asn1\asn1_lib.c%d.\crypto\asn1\asn1_lib.c.\crypto\asn1\asn1_lib.c.\crypto\asn1\asn1_lib.c.\crypto\asn1\asn1_lib.c offset=address=@ P ` p  p ( @ H X p          0 @ `   0 @ P ` p    0 P h ` 0  p P   ` ( @ X h   0     @ P 0 0 H X` hp        @ 0 @ X p @        00 H@ XP h` p        ( 8 H X0 h   P 0 @  P `  ` p 0 Hp X p@ P        ( 8a2d_ASN1_OBJECTa2i_ASN1_ENUMERATEDa2i_ASN1_INTEGERbn liba2i_ASN1_STRINGAPPEND_EXPASN1_BIT_STRING_set_bitASN1_CBASN1_CHECK_TLENASN1_COLLATE_PRIMITIVEASN1_COLLECTASN1_D2I_EX_PRIMITIVEASN1_d2i_fpASN1_D2I_READ_BIOASN1_digestASN1_DO_ADBASN1_dupASN1_ENUMERATED_setASN1_ENUMERATED_to_BNASN1_EX_C2IASN1_FIND_ENDASN1_GENERALIZEDTIME_adjASN1_GENERALIZEDTIME_setASN1_generate_v3ASN1_get_objectASN1_HEADER_NEWASN1_i2d_bioASN1_i2d_fpASN1_INTEGER_setASN1_INTEGER_to_BNASN1_item_d2i_fpASN1_item_dupASN1_ITEM_EX_COMBINE_NEWASN1_ITEM_EX_D2IASN1_item_i2d_bioASN1_item_i2d_fpASN1_item_packASN1_item_signASN1_item_sign_ctxASN1_item_unpackASN1_item_verifyASN1_mbstring_ncopyASN1_OBJECT_newASN1_OUTPUT_DATAASN1_pack_stringASN1_PCTX_newASN1_PKCS5_PBE_SETASN1_seq_packASN1_seq_unpackASN1_signASN1_STR2TYPEASN1_STRING_setASN1_STRING_TABLE_addASN1_STRING_type_newASN1_TEMPLATE_EX_D2IASN1_TEMPLATE_NEWASN1_TEMPLATE_NOEXP_D2IASN1_TIME_adjASN1_TIME_setASN1_TYPE_get_int_octetstringASN1_TYPE_get_octetstringASN1_unpack_stringASN1_UTCTIME_adjASN1_UTCTIME_setASN1_verifyB64_READ_ASN1B64_WRITE_ASN1BIO_new_NDEFBITSTR_CBBN_to_ASN1_ENUMERATEDBN_to_ASN1_INTEGERc2i_ASN1_BIT_STRINGc2i_ASN1_INTEGERc2i_ASN1_OBJECTCOLLECT_DATAD2I_ASN1_BIT_STRINGd2i_ASN1_BOOLEANd2i_ASN1_bytesD2I_ASN1_GENERALIZEDTIMED2I_ASN1_HEADERD2I_ASN1_INTEGERd2i_ASN1_OBJECTd2i_ASN1_SETd2i_ASN1_type_bytesd2i_ASN1_UINTEGERD2I_ASN1_UTCTIMEd2i_AutoPrivateKeyd2i_Netscape_RSAD2I_NETSCAPE_RSA_2d2i_PrivateKeyd2i_PublicKeyd2i_RSA_NETD2I_RSA_NET_2D2I_X509D2I_X509_CINFd2i_X509_PKEYi2d_ASN1_bio_streami2d_ASN1_SETI2D_ASN1_TIMEi2d_DSA_PUBKEYi2d_EC_PUBKEYi2d_PrivateKeyi2d_PublicKeyi2d_RSA_NETi2d_RSA_PUBKEYLONG_C2IOID_MODULE_INITPARSE_TAGGINGPKCS5_pbe2_set_ivPKCS5_pbe_setPKCS5_pbe_set0_algorPKCS5_pbkdf2_setSMIME_read_ASN1SMIME_textX509_CINF_NEWX509_CRL_add0_revokedX509_INFO_newX509_NAME_ENCODEX509_NAME_EX_D2IX509_NAME_EX_NEWX509_NEWX509_PKEY_newasn1 parse error  H d e (f 8g Ph h pi j k l  m n o  ( 8p ` p q r s t u v (w @x `y z {   |     8 H} ` p ~      ( H h         @ X h x         8 P h         8 P h       ( @ P h       0 X h        0 P h     adding objectasn1 sig parse erroraux errorbad classbad object headerbad password readbad tagbmpstring is wrong lengthboolean is wrong lengthbuffer too smallcipher has no object identifiercontext not initialiseddata is wrongdecode errordecoding errordepth exceededdigest and key type not supportedencode errorerror getting timeerror loading sectionerror parsing set elementerror setting cipher paramsexpecting an integerexpecting an objectexpecting a booleanexpecting a timeexplicit length mismatchexplicit tag not constructedfield missingfirst num too largeheader too longillegal bitstring formatillegal booleanillegal charactersillegal formatillegal hexillegal implicit tagillegal integerillegal nested taggingillegal nullillegal null valueillegal objectillegal optional anyillegal options on item templateillegal tagged anyillegal time valueinteger not ascii formatinteger too large for longinvalid bit string bits leftinvalid bmpstring lengthinvalid digitinvalid mime typeinvalid modifierinvalid numberinvalid object encodinginvalid separatorinvalid time formatinvalid universalstring lengthinvalid utf8stringiv too largelength errorlist errormime no content typemime parse errormime sig parse errormissing eocmissing second numbermissing valuemstring not universalmstring wrong tagnested asn1 stringnon hex charactersnot ascii formatnot enough datano content typeno default digestno matching choice typeno multipart body failureno multipart boundaryno sig content typenull is wrong lengthobject not ascii formatodd number of charsprivate key header missingsecond number too largesequence length mismatchsequence not constructedsequence or set needs configshort linesig invalid mime typestreaming not supportedstring too longstring too shorttag value too highthe asn1 object identifier is not known for this mdtime not ascii formattoo longtype not constructedtype not primitiveunable to decode rsa keyunable to decode rsa private keyunexpected eocuniversalstring is wrong lengthunknown formatunknown message digest algorithmunknown object typeunknown public key typeunknown signature algorithmunknown tagunknown formatunsupported any defined by typeunsupported cipherunsupported encryption algorithmunsupported public key typeunsupported typewrong public key typewrong tagwrong type.\crypto\asn1\a_bytes.c.\crypto\asn1\a_bytes.c.\crypto\asn1\a_bytes.c.\crypto\asn1\a_bytes.c MASK:nombstrpkixutf8onlydefault.\crypto\asn1\a_strnid.c.\crypto\asn1\a_strnid.c.\crypto\asn1\a_strnid.c.\crypto\asn1\evp_asn1.c.\crypto\asn1\evp_asn1.c.\crypto\asn1\asn_pack.c.\crypto\asn1\asn_pack.c.\crypto\asn1\asn_pack.c.\crypto\asn1\asn_pack.c.\crypto\asn1\asn_pack.c.\crypto\asn1\asn_pack.c.\crypto\asn1\asn_pack.c.\crypto\asn1\asn_pack.c.\crypto\asn1\asn_pack.c.\crypto\asn1\asn_pack.c.\crypto\asn1\asn_pack.c.\crypto\asn1\asn_pack.c.\crypto\asn1\asn_pack.csaltiterPBEPARAM.\crypto\asn1\p5_pbe.c.\crypto\asn1\p5_pbe.c.\crypto\asn1\p5_pbe.c.\crypto\asn1\p5_pbe.c.\crypto\asn1\p5_pbe.ckeyfuncencryptionPBE2PARAMsaltiterprfkeylengthPBKDF2PARAM.\crypto\asn1\p5_pbev2.c.\crypto\asn1\p5_pbev2.c.\crypto\asn1\p5_pbev2.c.\crypto\asn1\p5_pbev2.c.\crypto\asn1\p5_pbev2.cversionpkeyalgpkeyattributesPKCS8_PRIV_KEY_INFO.\crypto\asn1\asn_moid.c.\crypto\asn1\asn_moid.coid_section.\crypto\asn1\asn_moid.c.\crypto\pem\pem_sign.c.\crypto\pem\pem_sign.c.\crypto\pem\pem_seal.c.\crypto\pem\pem_seal.c.\crypto\pem\pem_seal.c.\crypto\pem\pem_seal.c.\crypto\pem\pem_seal.c.\crypto\pem\pem_seal.c.\crypto\pem\pem_info.c.\crypto\pem\pem_info.cCERTIFICATEX509 CERTIFICATETRUSTED CERTIFICATEX509 CRLRSA PRIVATE KEYDSA PRIVATE KEYEC PRIVATE KEY.\crypto\pem\pem_info.c.\crypto\pem\pem_info.c.\crypto\pem\pem_info.c.\crypto\pem\pem_info.c.\crypto\pem\pem_info.cstrlen(objstr) + 23 + 2 * enc->iv_len + 13 <= sizeof buf.\crypto\pem\pem_info.cRSA PRIVATE KEYPARAMETERSX9.42 DH PARAMETERSCMSDH PARAMETERSX509 CERTIFICATEPKCS7CMSCERTIFICATE NEW CERTIFICATE REQUESTCERTIFICATE REQUEST CERTIFICATE,TRUSTED CERTIFICATEX509 CERTIFICATEPKCS7TRUSTED CERTIFICATECERTIFICATEPKCS #7 SIGNED DATACERTIFICATEPKCS7Expecting: .\crypto\pem\pem_lib.c.\crypto\pem\pem_lib.c.\crypto\pem\pem_lib.c.\crypto\pem\pem_lib.c.\crypto\pem\pem_lib.c.\crypto\pem\pem_lib.cenc->iv_len <= (int)sizeof(iv).\crypto\pem\pem_lib.cstrlen(objstr) + 23 + 2 * enc->iv_len + 13 <= sizeof buf----- .\crypto\pem\pem_lib.c.\crypto\pem\pem_lib.c.\crypto\pem\pem_lib.cProc-Type: .\crypto\pem\pem_lib.cENCRYPTED.\crypto\pem\pem_lib.c.\crypto\pem\pem_lib.cDEK-Info: .\crypto\pem\pem_lib.c.\crypto\pem\pem_lib.c.\crypto\pem\pem_lib.c.\crypto\pem\pem_lib.c-----BEGIN .\crypto\pem\pem_lib.c-----END ----- .\crypto\pem\pem_lib.c.\crypto\pem\pem_lib.c.\crypto\pem\pem_lib.c.\crypto\pem\pem_lib.c-----BEGIN ----- .\crypto\pem\pem_lib.c.\crypto\pem\pem_lib.c.\crypto\pem\pem_lib.c-----END .\crypto\pem\pem_lib.c-----END .\crypto\pem\pem_lib.c-----END ----- .\crypto\pem\pem_lib.c.\crypto\pem\pem_lib.c.\crypto\pem\pem_lib.cEnter PEM pass phrase:.\crypto\pem\pem_lib.cphrase is too short, needs to be at least %d chars ENCRYPTEDMIC-CLEARMIC-ONLYBAD-TYPEProc-Type: 4,DEK-Info: .\crypto\pem\pem_lib.cANY PRIVATE KEYENCRYPTED PRIVATE KEYPRIVATE KEYPRIVATE KEYPARAMETERSEC PARAMETERSEC PRIVATE KEYEC PRIVATE KEYPUBLIC KEYPUBLIC KEYPUBLIC KEYPUBLIC KEYDH PARAMETERSDH PARAMETERSX9.42 DH PARAMETERSX9.42 DH PARAMETERSPUBLIC KEYPUBLIC KEYPUBLIC KEYPUBLIC KEYCERTIFICATE REQUESTCERTIFICATE REQUESTCERTIFICATE REQUESTCERTIFICATE REQUESTNEW CERTIFICATE REQUESTNEW CERTIFICATE REQUESTX509 CRLPKCS7X509 CRLPKCS7X509 CRLPKCS7X509 CRLPKCS7CERTIFICATECERTIFICATECERTIFICATECERTIFICATERSA PRIVATE KEYRSA PRIVATE KEYRSA PUBLIC KEYRSA PUBLIC KEYRSA PUBLIC KEYRSA PUBLIC KEYPUBLIC KEYPUBLIC KEYPUBLIC KEYPUBLIC KEYDSA PRIVATE KEYDSA PRIVATE KEYPUBLIC KEYPUBLIC KEYPUBLIC KEYPUBLIC KEYDSA PARAMETERSDSA PARAMETERSDSA PARAMETERSDSA PARAMETERSEC PARAMETERSEC PARAMETERSEC PARAMETERSB2I_DSSb2i_PVK_bioB2I_RSACHECK_BITLEN_DSADO_B2ICHECK_BITLEN_RSAd2i_PKCS8PrivateKey_biod2i_PKCS8PrivateKey_fpDO_B2I_BIODO_BLOB_HEADERDO_PK8PKEYDO_PK8PKEY_FPDO_PVK_BODYDO_PVK_HEADERI2B_PVKi2b_PVK_bioLOAD_IVPEM_ASN1_readPEM_ASN1_read_bioPEM_ASN1_writePEM_ASN1_write_bioPEM_def_callbackPEM_do_headerPEM_F_PEM_WRITE_PKCS8PRIVATEKEYPEM_get_EVP_CIPHER_INFOPEM_PK8PKEYPEM_readPEM_read_bioPEM_READ_BIO_DHPARAMSPEM_read_bio_ParametersPEM_READ_BIO_PRIVATEKEYPEM_READ_DHPARAMSPEM_READ_PRIVATEKEYPEM_SealFinalPEM_SealInitPEM_SignFinalPEM_writePEM_write_bioPEM_WRITE_PRIVATEKEYPEM_X509_INFO_readPEM_X509_INFO_read_bioPEM_X509_INFO_write_biod `e xf g t h u v  s w 8x X xy z { i j k l  m  n 8 | P } h o x p q r ~ bad base64 decodebad decryptbad end linebad iv charsbad magic numberbad password readbad version numberbio write failurecipher is nullerror converting private keyexpecting private key blobexpecting public key blobheader too longinconsistent headerkeyblob header parse errorkeyblob too shortnot dek infonot encryptednot proc typeno start lineproblems getting passwordpublic key no rsapvk data too shortpvk too shortread keyshort headerunsupported cipherunsupported encryptionunsupported key components p x   0   @ P `   (p 8 H X `P p` xp   @  `  p ( 8 H X p          0 8@ PP hCERTIFICATECERTIFICATECERTIFICATECERTIFICATETRUSTED CERTIFICATETRUSTED CERTIFICATETRUSTED CERTIFICATETRUSTED CERTIFICATECERTIFICATE PAIRCERTIFICATE PAIRCERTIFICATE PAIRCERTIFICATE PAIR.\crypto\pem\pem_oth.c.\crypto\pem\pem_pk8.c.\crypto\pem\pem_pk8.c.\crypto\pem\pem_pk8.c.\crypto\pem\pem_pk8.c.\crypto\pem\pem_pk8.cENCRYPTED PRIVATE KEYENCRYPTED PRIVATE KEYENCRYPTED PRIVATE KEYENCRYPTED PRIVATE KEYPRIVATE KEYPRIVATE KEYPRIVATE KEYPRIVATE KEYANY PRIVATE KEYPRIVATE KEYENCRYPTED PRIVATE KEY.\crypto\pem\pem_pkey.cPRIVATE KEY.\crypto\pem\pem_pkey.c%s PRIVATE KEYPARAMETERSPARAMETERS.\crypto\pem\pem_pkey.c%s PARAMETERS.\crypto\pem\pem_pkey.c.\crypto\pem\pem_pkey.cDH PARAMETERSX9.42 DH PARAMETERS.\crypto\pem\pem_pkey.c.\crypto\pem\pem_pkey.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c.\crypto\pem\pvkfmt.c/usr/local/ssl/private/usr/local/ssl/usr/local/ssl/certs/usr/local/ssl/cert.pemSSL_CERT_DIRSSL_CERT_FILE.\crypto\x509\x509_r2x.c.\crypto\x509\x509_cmp.c.\crypto\x509\x509_cmp.c.\crypto\x509\x509_cmp.c.\crypto\x509\x509_cmp.cNO X509_NAME.\crypto\x509\x509_obj.c.\crypto\x509\x509_obj.c.\crypto\x509\x509_obj.c.\crypto\x509\x509_req.c.\crypto\x509\x509_req.c.\crypto\x509\x509_req.c.\crypto\x509\x509_req.c.\crypto\x509\x509_req.c.\crypto\x509\x509_req.c.\crypto\x509\x509_req.c.\crypto\x509\x509spki.c.\crypto\x509\x509spki.c.\crypto\x509\x509spki.c.\crypto\x509\x509spki.c.\crypto\x509\x509spki.c.\crypto\x509\x509spki.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.cOPENSSL_ALLOW_PROXY_CERTS.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.cdefault.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.c.\crypto\x509\x509_vfy.cakid mismatchbad x509 filetypebase64 decode errorcant check dh keycert already in hash tablecrl already deltacrl verify failureerr asn1 libidp mismatchinvalid directoryinvalid field nameinvalid trustissuer mismatchkey type mismatchkey values mismatchloading cert dirloading defaultsmethod not supportedname too longnewer crl not newerno cert set for us to verifyno crl numberpublic key decode errorpublic key encode errorshould retryunable to find parameters in chainunable to get certs public keyunknown key typeunknown nidunknown purpose idunknown trust idunsupported algorithmwrong lookup typewrong type@ !P ! ! 8!` H!p X! p!  !p ! ! ! ! " 8" X" x" "0 " " " "@ # 0# H# `#  x#0 #0 #@ #P #` $p $ ($ 8$ X$ p$ $ $ $ $ $ %` % @%P X% h% x%ADD_CERT_DIRBY_FILE_CTRLCHECK_NAME_CONSTRAINTSCHECK_POLICYDIR_CTRLGET_CERT_BY_SUBJECTNETSCAPE_SPKI_b64_decodeNETSCAPE_SPKI_b64_encodeX509at_add1_attrX509v3_add_extX509_ATTRIBUTE_create_by_NIDX509_ATTRIBUTE_create_by_OBJX509_ATTRIBUTE_create_by_txtX509_ATTRIBUTE_get0_dataX509_ATTRIBUTE_set1_dataX509_check_private_keyX509_CRL_diffX509_CRL_print_fpX509_EXTENSION_create_by_NIDX509_EXTENSION_create_by_OBJX509_get_pubkey_parametersX509_load_cert_crl_fileX509_load_cert_fileX509_load_crl_fileX509_NAME_add_entryX509_NAME_ENTRY_create_by_NIDX509_NAME_ENTRY_create_by_txtX509_NAME_ENTRY_set_objectX509_NAME_onelineX509_NAME_printX509_print_ex_fpX509_PUBKEY_getX509_PUBKEY_setX509_REQ_check_private_keyX509_REQ_print_exX509_REQ_print_fpX509_REQ_to_X509X509_STORE_add_certX509_STORE_add_crlX509_STORE_CTX_get1_issuerX509_STORE_CTX_initX509_STORE_CTX_newX509_STORE_CTX_purpose_inheritX509_to_X509_REQX509_TRUST_addX509_TRUST_setX509_verify_certn d v r 0e H h f  q w {  s t g 8h P| h  i  } ~ j k l @u `m xy x o p z .\crypto\x509\x509name.c.\crypto\x509\x509name.cname=.\crypto\x509\x509name.c.\crypto\x509\x509name.c.\crypto\x509\x509_v3.c.\crypto\x509\x509_v3.c.\crypto\x509\x509_v3.c.\crypto\x509\x509_v3.c.\crypto\x509\x509_att.c.\crypto\x509\x509_att.cname=.\crypto\x509\x509_att.c.\crypto\x509\x509_att.c.\crypto\x509\x509_att.c.\crypto\x509\x509_att.c.\crypto\x509\x509_att.c.\crypto\x509\x509_att.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.c.\crypto\x509\x509_lu.cokunable to get issuer certificateunable to get certificate CRLunable to decrypt certificate's signatureunable to decrypt CRL's signatureunable to decode issuer public keycertificate signature failureCRL signature failurecertificate is not yet validCRL is not yet validcertificate has expiredCRL has expiredformat error in certificate's notBefore fieldformat error in certificate's notAfter fieldformat error in CRL's lastUpdate fieldformat error in CRL's nextUpdate fieldout of memoryself signed certificateself signed certificate in certificate chainunable to get local issuer certificateunable to verify the first certificatecertificate chain too longcertificate revokedinvalid CA certificateinvalid non-CA certificate (has CA markings)path length constraint exceededproxy path length constraint exceededproxy certificates not allowed, please set the appropriate flagunsupported certificate purposecertificate not trustedcertificate rejectedapplication verification failuresubject issuer mismatchauthority and subject key identifier mismatchauthority and issuer serial number mismatchkey usage does not include certificate signingunable to get CRL issuer certificateunhandled critical extensionkey usage does not include CRL signingkey usage does not include digital signatureunhandled critical CRL extensioninvalid or inconsistent certificate extensioninvalid or inconsistent certificate policy extensionno explicit policyDifferent CRL scopeUnsupported extension featureRFC 3779 resource not subset of parent's resourcespermitted subtree violationexcluded subtree violationname constraints minimum and maximum not supportedunsupported name constraint typeunsupported or invalid name constraint syntaxunsupported or invalid name syntaxCRL path validation errorSuite B: certificate version invalidSuite B: invalid public key algorithmSuite B: invalid ECC curveSuite B: invalid signature algorithmSuite B: curve not allowed for this LOSSuite B: cannot sign P-384 with P-256Hostname mismatchEmail address mismatchIP address mismatchInvalid certificate verification contextIssuer certificate lookup errorproxy subject name violationerror number %ld.\crypto\x509\x509_trs.c.\crypto\x509\x509_trs.c.\crypto\x509\x509_trs.c.\crypto\x509\x509_trs.c.\crypto\x509\x509_trs.c.\crypto\x509\x509_trs.c"p"p8!8!8!8!8@"8@"8!8compatibleSSL ClientSSL ServerS/MIME emailObject SignerOCSP responderOCSP requestTSA server@9(Load file into cache.\crypto\x509\by_file.c.\crypto\x509\by_file.c.\crypto\x509\by_file.c.\crypto\x509\by_file.c.\crypto\x509\by_file.c.\crypto\x509\by_file.c.\crypto\x509\by_file.c.\crypto\x509\by_file.c.\crypto\x509\by_file.cr.\crypto\x509\by_file.c.\crypto\x509\by_file.c:.P/@./Load certs from files in a directory.\crypto\x509\by_dir.c.\crypto\x509\by_dir.c.\crypto\x509\by_dir.c.\crypto\x509\by_dir.c.\crypto\x509\by_dir.c.\crypto\x509\by_dir.cr.\crypto\x509\by_dir.c.\crypto\x509\by_dir.c.\crypto\x509\by_dir.c.\crypto\x509\by_dir.c.\crypto\x509\by_dir.c%s%08lx.%s%d%s%c%08lx.%s%d.\crypto\x509\by_dir.c.\crypto\x509\by_dir.c.\crypto\x509\by_dir.c.\crypto\x509\by_dir.c.\crypto\x509\by_dir.c.\crypto\x509\by_dir.c.\crypto\x509\by_dir.cdefaultpkcs7smime_signssl_clientssl_server.\crypto\x509\x509_vpm.c.\crypto\x509\x509_vpm.c.\crypto\x509\x509_vpm.ccapathlenBASIC_CONSTRAINTSCApathlen.\crypto\x509v3\v3_bcons.cCApathlen.\crypto\x509v3\v3_bcons.c,value:,name:section:>>>>? ??(?0?8?D?L?X?h?p??SSL ClientclientSSL ServerserverS/MIMEemailObject SigningobjsignUnusedreservedSSL CAsslCAS/MIME CAemailCAObject Signing CAobjCA@@@@@@AA0A@APAhAxAAAAAADigital SignaturedigitalSignature,name:Non RepudiationnonRepudiationKey EnciphermentkeyEnciphermentData EnciphermentdataEnciphermentKey AgreementkeyAgreementCertificate SignkeyCertSignCRL SigncRLSignEncipher OnlyencipherOnlyDecipher OnlydecipherOnly.\crypto\x509v3\v3_bitst.c.\crypto\x509v3\v3_bitst.c.\crypto\x509v3\v3_bitst.c,value:section:.\crypto\x509v3\v3_conf.c.\crypto\x509v3\v3_conf.cname=.\crypto\x509v3\v3_conf.c.\crypto\x509v3\v3_conf.c.\crypto\x509v3\v3_conf.ccritical,DER:ASN1:.\crypto\x509v3\v3_conf.cname=.\crypto\x509v3\v3_conf.cvalue=.\crypto\x509v3\v3_conf.c.\crypto\x509v3\v3_conf.c.\crypto\x509v3\v3_conf.c H@H`HH.\crypto\x509v3\v3_conf.c, value=name=.\crypto\x509v3\v3_conf.c.\crypto\x509v3\v3_conf.c.\crypto\x509v3\v3_conf.c,section=name=EXTENDED_KEY_USAGEEXTENDED_KEY_USAGE.\crypto\x509v3\v3_extku.c.\crypto\x509v3\v3_extku.c,value:,name:section:.\crypto\x509v3\v3_ia5.c.\crypto\x509v3\v3_ia5.c.\crypto\x509v3\v3_ia5.c.\crypto\x509v3\v3_ia5.c.\crypto\x509v3\v3_lib.c.\crypto\x509v3\v3_lib.c.\crypto\x509v3\v3_lib.c.\crypto\x509v3\v3_lib.c.\crypto\x509v3\v3_lib.c.\crypto\x509v3\v3_lib.c.\crypto\x509v3\v3_lib.cX(`PБ8Д@ PП0p0@@p 0H.\crypto\x509v3\v3_lib.c.\crypto\x509v3\v3_lib.c%*s%*scritical: %s %*s%*s%*s%*s , %s:%s %*s%s%*s%s: .\crypto\x509v3\v3_utl.c.\crypto\x509v3\v3_utl.cY.\crypto\x509v3\v3_utl.cy.\crypto\x509v3\v3_utl.cTRUEtrueYESyesFALSEfalseNnNOno.\crypto\x509v3\v3_utl.c,value:,name:section:,value:,name:section:.\crypto\x509v3\v3_utl.c.\crypto\x509v3\v3_utl.c.\crypto\x509v3\v3_utl.c.\crypto\x509v3\v3_utl.c.\crypto\x509v3\v3_utl.c.\crypto\x509v3\v3_utl.c.\crypto\x509v3\v3_utl.c.\crypto\x509v3\v3_utl.c.\crypto\x509v3\v3_utl.c.\crypto\x509v3\v3_utl.c.\crypto\x509v3\v3_utl.c.\crypto\x509v3\v3_utl.c.\crypto\x509v3\v3_utl.cxn--xn--%d.%d.%d.%d.\crypto\x509v3\v3_utl.c.\crypto\x509v3\v3_utl.cTRUEFALSETRUE.\crypto\x509v3\v3_utl.c@ "0P "HP "hP"P"P "P"Pp"Pp "P@ "P "Q"Q"(QP "@Q"XQ"pQ@"QP"Q0"Q` "Q "Q "Q@"Q"R" R "8R0"PR "`R"xR"R"R"R"R"R0 "SP"S"0Sp"PS`"hS`"Sp"S`"SP"S "S "S "S0 "T " T "8T "PT "`T@"T"T"T"T"T"TP "T"U "U"0U"HU"`U"xU"U"Ua2i_GENERAL_NAMEASIDENTIFIERCHOICE_CANONIZEASIDENTIFIERCHOICE_IS_CANONICALCOPY_EMAILCOPY_ISSUERDO_DIRNAMEDO_EXT_CONFDO_EXT_I2DDO_EXT_NCONFDO_I2V_NAME_CONSTRAINTSGNAMES_FROM_SECTNAMEhex_to_stringi2s_ASN1_ENUMERATEDI2S_ASN1_IA5STRINGi2s_ASN1_INTEGERI2V_AUTHORITY_INFO_ACCESSNOTICE_SECTIONNREF_NOSPOLICY_SECTIONPROCESS_PCI_VALUER2I_CERTPOLR2I_PCIS2I_ASN1_IA5STRINGs2i_ASN1_INTEGERs2i_ASN1_OCTET_STRINGS2I_ASN1_SKEY_IDS2I_SKEY_IDSET_DIST_POINT_NAMEstring_to_hexSXNET_add_id_ascSXNET_add_id_INTEGERSXNET_add_id_ulongSXNET_get_id_ascSXNET_get_id_ulongV2I_ASIDENTIFIERSv2i_ASN1_BIT_STRINGV2I_AUTHORITY_INFO_ACCESSV2I_AUTHORITY_KEYIDV2I_BASIC_CONSTRAINTSV2I_CRLDV2I_EXTENDED_KEY_USAGEv2i_GENERAL_NAMESv2i_GENERAL_NAME_exV2I_IDPV2I_IPADDRBLOCKSV2I_ISSUER_ALTV2I_NAME_CONSTRAINTSV2I_POLICY_CONSTRAINTSV2I_POLICY_MAPPINGSV2I_SUBJECT_ALTV3_ADDR_VALIDATE_PATH_INTERNALV3_GENERIC_EXTENSIONX509V3_add1_i2dX509V3_add_valueX509V3_EXT_addX509V3_EXT_add_aliasX509V3_EXT_confX509V3_EXT_freeX509V3_EXT_i2dX509V3_EXT_nconfX509V3_get_sectionX509V3_get_stringX509V3_get_value_boolX509V3_parse_listX509_PURPOSE_addX509_PURPOSE_setv" Zw"0Zd"@Ze"PZ"pZ"Z"Z"Z"Z"Z"[" ["8[s"P[f"h[g"[t"["[q"["["\" \h"0\i"H\"h\"\"\j"\k"\l"\m"\"]"]n"(]"H]"X]"x]"]"]"]"]~"]|"]"^" ^y"8^"P^"h^"^r"^}"^p"^"^"_"_"0_"H_"p_"_"_z"_{"`o" `"@`"X`x"p`u"`"`"`bad ip addressbad objectbn dec2bn errorbn to asn1 integer errorcannot find free functiondirname errordistpoint already setduplicate zone iderror converting zoneerror creating extensionerror in extensionexpected a section nameextension existsextension name errorextension not foundextension setting not supportedextension value errorillegal empty extensionillegal hex digitincorrect policy syntax taginvalid asnumberinvalid asrangeinvalid boolean stringinvalid extension stringinvalid inheritanceinvalid ipaddressinvalid multiple rdnsinvalid nameinvalid null argumentinvalid null nameinvalid null valueinvalid numberinvalid numbersinvalid object identifierinvalid optioninvalid policy identifierinvalid proxy policy settinginvalid purposeinvalid safiinvalid sectioninvalid syntaxissuer decode errormissing valueneed organization and numbersno config databaseno issuer certificateno issuer detailsno policy identifierno proxy cert policy language definedno public keyno subject detailsodd number of digitsoperation not definedothername errorpolicy language already definedpolicy path lengthpolicy path length already definedpolicy syntax not currently supportedpolicy when proxy language requires no policysection not foundunable to get issuer detailsunable to get issuer keyidunknown bit string argumentunknown extensionunknown extension nameunknown optionunsupported optionunsupported typeuser too longtype_idvalueOTHERNAMEnameAssignerpartyNameEDIPARTYNAMEd.otherNamed.rfc822Named.dNSNamed.x400Addressd.directoryNamed.ediPartyNamed.uniformResourceIdentifierd.iPAddressd.registeredIDGENERAL_NAMEGeneralNamesGENERAL_NAMESothername:X400Name:EdiPartyName::%Xemail:%sDNS:%sURI:%s DirName: issuerURIIP Address:%d.%d.%d.%dIP AddressDNSIP Address:Registered ID.\crypto\x509v3\v3_alt.ccopyemailvalue=RID.\crypto\x509v3\v3_alt.cemailvalue=IP.\crypto\x509v3\v3_alt.cemailDNS.\crypto\x509v3\v3_alt.cname=URI.\crypto\x509v3\v3_alt.ccopymoveemail%X.\crypto\x509v3\v3_alt.c:.\crypto\x509v3\v3_alt.c.\crypto\x509v3\v3_alt.c.\crypto\x509v3\v3_alt.c.\crypto\x509v3\v3_alt.c.\crypto\x509v3\v3_alt.c.\crypto\x509v3\v3_alt.c.\crypto\x509v3\v3_alt.c.\crypto\x509v3\v3_alt.c.\crypto\x509v3\v3_alt.c.\crypto\x509v3\v3_alt.c.\crypto\x509v3\v3_alt.c.\crypto\x509v3\v3_alt.cdirNameotherName.\crypto\x509v3\v3_alt.c.\crypto\x509v3\v3_alt.c.\crypto\x509v3\v3_alt.csection=othernameX400NameEdiPartyNameDirName%d.%d.%d.%dIP AddressIP AddressRegistered ID.\crypto\x509v3\v3_skey.chash.\crypto\x509v3\v3_skey.c.\crypto\x509v3\v3_skey.c.\crypto\x509v3\v3_skey.c.\crypto\x509v3\v3_skey.ckeyidserialkeyidalwaysissueralways.\crypto\x509v3\v3_akey.cname=.\crypto\x509v3\v3_akey.c.\crypto\x509v3\v3_akey.c.\crypto\x509v3\v3_akey.c.\crypto\x509v3\v3_akey.cnotBeforenotAfter%*sPKEY_USAGE_PERIOD, Not Before: Not After: hixiiiiiiiijj0jHj`jpjj jj jjUnspecifiedunspecifiedKey CompromisekeyCompromiseCA CompromiseCACompromiseAffiliation ChangedaffiliationChangedSupersededsupersededCessation Of OperationcessationOfOperationCertificate HoldcertificateHoldRemove From CRLremoveFromCRLPrivilege WithdrawnprivilegeWithdrawnAA CompromiseAACompromisezoneuserSXNETIDversionidsSXNET%*sVersion: %ld (0x%lX) %*sZone: %s, User: .\crypto\x509v3\v3_sxnet.c.\crypto\x509v3\v3_sxnet.c.\crypto\x509v3\v3_sxnet.c.\crypto\x509v3\v3_sxnet.c.\crypto\x509v3\v3_sxnet.c.\crypto\x509v3\v3_sxnet.c.\crypto\x509v3\v3_sxnet.c.\crypto\x509v3\v3_sxnet.cCERTIFICATEPOLICIESCPSCERTIFICATEPOLICIES policyid,name: qualifierssPOLICYINFO, d.otherd.cpsuriia5org d.usernoticepqualidPOLICYQUALINFOPOLICYQUALINFOnoticeref,name: exptextUSERNOTICEorganizationnoticenosNOTICEREF.\crypto\x509v3\v3_cpols.c.\crypto\x509v3\v3_cpols.c.\crypto\x509v3\v3_cpols.c,value:section:,name:.\crypto\x509v3\v3_cpols.c,value:section:,name:.\crypto\x509v3\v3_cpols.c,value:section:,name:.\crypto\x509v3\v3_cpols.c.\crypto\x509v3\v3_cpols.cpolicyIdentifier,name:.\crypto\x509v3\v3_cpols.c,value:section:,name:.\crypto\x509v3\v3_cpols.cuserNotice.\crypto\x509v3\v3_cpols.c,value:section:,name:.\crypto\x509v3\v3_cpols.c,value:section:,name:.\crypto\x509v3\v3_cpols.c,value:section:%*s%s .\crypto\x509v3\v3_cpols.c.\crypto\x509v3\v3_cpols.c.\crypto\x509v3\v3_cpols.cexplicitTextorganizationnoticeNumbers.\crypto\x509v3\v3_cpols.c,value:section:.\crypto\x509v3\v3_cpols.c,value:section:.\crypto\x509v3\v3_cpols.c.\crypto\x509v3\v3_cpols.c.\crypto\x509v3\v3_cpols.c.\crypto\x509v3\v3_cpols.c%*sPolicy: %*sCPS: %s %*sUser Notice: %*sUnknown Qualifier: %*sOrganization: %s %*sNumber%s: %*sExplicit Text: %s %*sPolicy: CriticalNon Critical%*sNo Qualifiers .\crypto\x509v3\v3_crld.cfullnameUnused, relativename.\crypto\x509v3\v3_crld.cunused .\crypto\x509v3\v3_crld.conlyCA%*s.\crypto\x509v3\v3_crld.conlyCA Key CompromisekeyCompromiseCA CompromiseCACompromiseAffiliation Changed affiliationChanged SupersededsupersededCessation Of OperationcessationOfOperationCertificate HoldonlyAAcertificateHoldPrivilege WithdrawnprivilegeWithdrawnAA CompromiseAACompromise%*s%s: %*s ,name:reasonsCRLissuer.\crypto\x509v3\v3_crld.cname.fullnamename.relativenameDIST_POINT_NAMEdistpointreasonsCRLissuerDIST_POINTCRLDistributionPointsCRL_DIST_POINTSdistpointonlyuseronlysomereasonsindirectCRLonlyattrISSUING_DIST_POINTonlyuserindirectCRLonlysomereasons.\crypto\x509v3\v3_crld.c,value:section:.\crypto\x509v3\v3_crld.c%*sFull Name: %*sRelative Name: %*s%*sOnly User Certificates %*sOnly CA Certificates %*sIndirect CRL Only Some Reasons%*sOnly Attribute Certificates %*s Reasons%*sCRL Issuer: .\crypto\x509v3\v3_purp.c.\crypto\x509v3\v3_purp.cany.\crypto\x509v3\v3_purp.c.\crypto\x509v3\v3_purp.c.\crypto\x509v3\v3_purp.c.\crypto\x509v3\v3_purp.c.\crypto\x509v3\v3_purp.c.\crypto\x509v3\v3_purp.cyy yypzz(z8zHz`zPpzzP zLwzz zzSSL clientsslclientSSL serversslserverNetscape SSL servernssslserverS/MIME signingsmimesignS/MIME encryptionsmimeencryptCRL signingcrlsignAny PurposeOCSP helperocsphelperTime Stamp signingtimestampsign.\crypto\x509v3\v3_purp.c.\crypto\x509v3\v3_purp.cmethodlocation - ACCESS_DESCRIPTIONGeneralNamesAUTHORITY_INFO_ACCESS.\crypto\x509v3\v3_info.c.\crypto\x509v3\v3_info.c.\crypto\x509v3\v3_info.c.\crypto\x509v3\v3_info.c.\crypto\x509v3\v3_info.c.\crypto\x509v3\v3_info.c.\crypto\x509v3\v3_info.c.\crypto\x509v3\v3_info.cvalue=.\crypto\x509v3\v3_ocsp.c%*s%*sIssuer: %*s - %*scrlUrl: %*scrlNum: %*scrlTime: %*s%*skeyidissuerserialAUTHORITY_KEYIDissuerDomainPolicysubjectDomainPolicyPOLICY_MAPPINGPOLICY_MAPPINGSPOLICY_MAPPINGS.\crypto\x509v3\v3_pmaps.c.\crypto\x509v3\v3_pmaps.c,value:,name:section:,name:.\crypto\x509v3\v3_pmaps.c,value:section:.\crypto\x509v3\v3_pmaps.crequireExplicitPolicyinhibitPolicyMappingPOLICY_CONSTRAINTSRequire Explicit PolicyInhibit Policy Mapping.\crypto\x509v3\v3_pcons.crequireExplicitPolicyinhibitPolicyMapping.\crypto\x509v3\v3_pcons.c,value:,name:section:.\crypto\x509v3\v3_pcons.cbaseminimummaximumGENERAL_SUBTREEpermittedSubtrees%*sexcludedSubtrees NAME_CONSTRAINTSIP:permitted%Xexcluded/.\crypto\x509v3\v3_ncons.c:.\crypto\x509v3\v3_ncons.cPermittedExcluded%*s%s: %d.%d.%d.%d/%d.%d.%d.%dIP Address:policyLanguagepolicyPROXY_POLICYpcPathLengthConstraintproxyPolicyPROXY_CERT_INFO_EXTENSION.\crypto\x509v3\v3_pci.c.\crypto\x509v3\v3_pci.c,name: ,value:section:text:,name: .\crypto\x509v3\v3_pci.c,name:r.\crypto\x509v3\v3_pci.c,name:,value:section:.\crypto\x509v3\v3_pci.c,value:section:.\crypto\x509v3\v3_pci.c,value:section:.\crypto\x509v3\v3_pci.c,value:,name:section:.\crypto\x509v3\v3_pci.c,value:,name:section:,value:,name:section:.\crypto\x509v3\v3_pci.c.\crypto\x509v3\v3_pci.c.\crypto\x509v3\v3_pci.c%*sPath Length Constraint: infinite%*sPolicy Language: %*sPolicy Text: %s language.\crypto\x509v3\v3_pci.c,value:,name:section:.\crypto\x509v3\v3_pci.c,value:,name:section:pathlen.\crypto\x509v3\v3_pci.c,value:,name:section:.\crypto\x509v3\v3_pci.c,value:,name:section:policy.\crypto\x509v3\v3_pci.c,value:,name:section:hex:.\crypto\x509v3\v3_pci.c,value:,name:section:.\crypto\x509v3\v3_pci.c.\crypto\x509v3\v3_pci.c,value:,name:section:file:.\crypto\x509v3\v3_pci.c,value:,name:section:.\crypto\x509v3\pcy_cache.c.\crypto\x509v3\pcy_cache.c.\crypto\x509v3\pcy_cache.c.\crypto\x509v3\pcy_node.c.\crypto\x509v3\pcy_data.c.\crypto\x509v3\pcy_tree.c.\crypto\x509v3\pcy_tree.c.\crypto\x509v3\pcy_tree.c.\crypto\x509v3\v3_scts.c.\crypto\x509v3\v3_scts.c %*sSigned Certificate Timestamp:v1(0)%s %*sVersion : %*sLog ID : %*sTimestamp : %*sExtensions: none %*sSignature : %*s unknown %*s%02X%02X%.14s.%03dZ.\crypto\cms\cms_lib.c.\crypto\cms\cms_lib.c.\crypto\cms\cms_lib.c.\crypto\cms\cms_lib.c.\crypto\cms\cms_lib.c.\crypto\cms\cms_lib.c.\crypto\cms\cms_lib.c.\crypto\cms\cms_lib.c.\crypto\cms\cms_lib.c.\crypto\cms\cms_lib.c.\crypto\cms\cms_lib.c.\crypto\cms\cms_lib.c.\crypto\cms\cms_lib.c.\crypto\cms\cms_lib.c.\crypto\cms\cms_lib.c.\crypto\cms\cms_lib.c.\crypto\cms\cms_lib.c.\crypto\cms\cms_lib.c.\crypto\cms\cms_lib.c.\crypto\cms\cms_lib.cotherCertFormatotherCertCMS_OtherCertificateFormatsidd.certificated.extendedCertificated.v1AttrCertd.v2AttrCertd.otherCMS_CertificateChoicesd.issuerAndSerialNumberd.subjectKeyIdentifierCMS_SignerIdentifiereContentTypeeContentd.crlridCMS_EncapsulatedContentInforidversiondigestAlgorithmsignedAttrsukmsignatureAlgorithmmacsignatured.ktriunsignedAttrsCMS_SignerInfootherRevInfoFormatotherRevInfoCMS_OtherRevocationInfoFormatd.otherCMS_RevocationInfoChoiceversiondigestAlgorithmsencapContentInfocertificatescrlssignerInfosCMS_SignedDatacertificatescrlsCMS_OriginatorInfocontentTypecontentEncryptionAlgorithmencryptedContentCMS_EncryptedContentInfoversionkeyEncryptionAlgorithmencryptedKeyCMS_KeyTransRecipientInfokeyAttrIdkeyAttrCMS_OtherKeyAttributesubjectKeyIdentifierdateotherCMS_RecipientKeyIdentifierd.issuerAndSerialNumberd.rKeyIdCMS_KeyAgreeRecipientIdentifierencryptedKeyCMS_RecipientEncryptedKeyalgorithmpublicKeyCMS_OriginatorPublicKeyd.issuerAndSerialNumberd.subjectKeyIdentifierd.originatorKeyCMS_OriginatorIdentifierOrKeyversionoriginatorkeyEncryptionAlgorithmrecipientEncryptedKeysCMS_KeyAgreeRecipientInfokeyIdentifierdateotherCMS_KEKIdentifierversionkekidkeyEncryptionAlgorithmencryptedKeyCMS_KEKRecipientInfoversionkeyDerivationAlgorithmkeyEncryptionAlgorithmencryptedKeyCMS_PasswordRecipientInfooriTypeoriValueCMS_OtherRecipientInfod.karid.kekrid.pwrid.oriCMS_RecipientInfoversionoriginatorInforecipientInfosencryptedContentInfounprotectedAttrsCMS_EnvelopedDataversiondigestAlgorithmencapContentInfodigestCMS_DigestedDataversionencryptedContentInfounprotectedAttrsCMS_EncryptedDataversionoriginatorInforecipientInfosmacAlgorithmdigestAlgorithmencapContentInfoauthAttrsunauthAttrsCMS_AuthenticatedDataversioncompressionAlgorithmencapContentInfoCMS_CompressedDatad.otherd.datad.signedDatad.envelopedDatad.digestedDatad.encryptedDatad.authenticatedDatad.compressedDatacontentTypeCMS_ContentInfoCMS_ContentInfoCMS_ATTRIBUTESCMS_Attributes_SignCMS_ATTRIBUTESCMS_Attributes_Verifyd.allOrFirstTierd.receiptListCMS_ReceiptsFromsignedContentIdentifierreceiptsFromreceiptsToCMS_ReceiptRequestversioncontentTypesignedContentIdentifieroriginatorSignatureValueCMS_ReceiptkeyInfoentityUInfosuppPubInfoCMS_SharedInfoissuerserialNumberCMS_IssuerAndSerialNumber.\crypto\cms\cms_io.cCMSCMSCMSCMSCMS.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.csmime_sign.\crypto\cms\cms_smime.cVerify error:.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.c.\crypto\cms\cms_smime.cadd signer errorcertificate already presentcertificate has no keyidno keycertificate verify errorcipher initialisation errorcipher parameter initialisation errorcms datafinal errorcms libcontentidentifier mismatchcontent not foundcontent type mismatchcontent type not compressed datacontent type not enveloped datacontent type not signed datacontent verify errorctrl errorctrl failuredecrypt errordigest errorerror getting public keyerror reading messagedigest attributeerror setting keyerror setting recipientinfoinvalid encrypted key lengthinvalid key encryption parameterinvalid key lengthmd bio init errormessagedigest attribute wrong lengthmessagedigest wrong lengthmsgsigdigest errormsgsigdigest verification failuremsgsigdigest wrong lengthneed one signernot a signed receiptnot encrypted datanot keknot key agreementnot key transportnot pwrinot supported for this key typeno cipherno contentno content typeno default digestno digest setno key or certno matching digestno matching recipientno matching signatureno msgsigdigestno passwordno private keyno public keyno receipt requestno signersprivate key does not match certificatereceipt decode errorrecipient errorsigner certificate not foundsignfinal errorsmime text errorstore init errortype not compressed datatype not datatype not digested datatype not encrypted datatype not enveloped dataunable to finalize contextunknown cipherunknown digest algorihmunknown idunsupported compression algorithmunsupported content typeunsupported kek algorithmunsupported key encryption algorithmunsupported recipient typeunsupported recpientinfo typeunsupported typeunwrap errorunwrap failureverification failurewrap errorCHECK_CONTENTCMS_add0_recipient_key0.H@ .@.XP . .P.Ȧ`.p....8.X.p.....ȧ` . .0.@.8P.X`.x .p...ب...8.X.x ....ة .0.@. P.@ .P .h .`. . . . .  .H .pp...ث...8.X.x.p .Ȭ . . .( .H .` .p .0 .@ .P .ȭ` .p . . .0 .P0 .p . . .CMS_add0_certCMS_add0_recipient_passwordCMS_add1_ReceiptRequestCMS_add1_recipient_certCMS_add1_signerCMS_ADD1_SIGNINGTIMECMS_compresscms_CompressedData_createcms_CompressedData_init_bioCMS_COPY_CONTENTCMS_COPY_MESSAGEDIGESTCMS_dataCMS_dataFinalCMS_dataInitCMS_decryptCMS_decrypt_set1_keyCMS_decrypt_set1_passwordCMS_decrypt_set1_pkeycms_DigestAlgorithm_find_ctxcms_DigestAlgorithm_init_biocms_DigestedData_do_finalCMS_digest_verifycms_encode_ReceiptCMS_encryptcms_EncryptedContent_init_bioCMS_EncryptedData_decryptCMS_EncryptedData_encryptCMS_EncryptedData_set1_keyCMS_EnvelopedData_createcms_EnvelopedData_init_bioCMS_ENVELOPED_DATA_INITcms_env_asn1_ctrlCMS_finalCMS_GET0_CERTIFICATE_CHOICESCMS_get0_contentCMS_GET0_ECONTENT_TYPEcms_get0_envelopedCMS_GET0_REVOCATION_CHOICESCMS_GET0_SIGNEDcms_msgSigDigest_add1CMS_ReceiptRequest_create0cms_Receipt_verifyCMS_RecipientInfo_decryptCMS_RecipientInfo_encryptcms_RecipientInfo_kari_encryptCMS_RecipientInfo_kari_get0_algCMS_RecipientInfo_kari_get0_orig_idCMS_RecipientInfo_kari_get0_reksCMS_RecipientInfo_kari_orig_id_cmpCMS_RECIPIENTINFO_KEKRI_DECRYPTCMS_RECIPIENTINFO_KEKRI_ENCRYPTCMS_RecipientInfo_kekri_get0_idCMS_RecipientInfo_kekri_id_cmpCMS_RecipientInfo_ktri_cert_cmpCMS_RECIPIENTINFO_KTRI_DECRYPTCMS_RECIPIENTINFO_KTRI_ENCRYPTCMS_RecipientInfo_ktri_get0_algsCMS_RecipientInfo_ktri_get0_signer_idcms_RecipientInfo_pwri_cryptCMS_RecipientInfo_set0_keyCMS_RecipientInfo_set0_passwordCMS_RecipientInfo_set0_pkeyCMS_SD_ASN1_CTRLcms_set1_iascms_set1_keyidcms_set1_SignerIdentifierCMS_set_detachedCMS_signCMS_SIGNED_DATA_INITCMS_SIGNERINFO_CONTENT_SIGNCMS_SignerInfo_signCMS_SignerInfo_verifyCMS_SIGNERINFO_VERIFY_CERTCMS_SignerInfo_verify_contentCMS_sign_receiptCMS_streamCMS_uncompressCMS_verifyc.@.X.xd.e.f.g.h. .(i.H.`j.xk.l.m.n.o.p..(q.8r.Xs.t.u..؛v.w.x.0y.X.x...؜.z.{.. |.8.P}.`~.....ȝ..؝....0.@.P.`.p....؞....0.H.h.x........@.`...Ƞ.... .8.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_sd.c.\crypto\cms\cms_dd.c.\crypto\cms\cms_dd.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_env.c.\crypto\cms\cms_enc.c.\crypto\cms\cms_enc.c.\crypto\cms\cms_enc.c.\crypto\cms\cms_enc.c.\crypto\cms\cms_enc.c.\crypto\cms\cms_enc.c.\crypto\cms\cms_enc.c.\crypto\cms\cms_enc.c.\crypto\cms\cms_enc.c.\crypto\cms\cms_enc.c.\crypto\cms\cms_enc.c.\crypto\cms\cms_enc.c.\crypto\cms\cms_enc.c.\crypto\cms\cms_enc.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_kari.c.\crypto\cms\cms_kari.c.\crypto\cms\cms_kari.c.\crypto\cms\cms_kari.c.\crypto\cms\cms_kari.c.\crypto\cms\cms_kari.c.\crypto\cms\cms_kari.cP@``pp@p0P`(@Xp PCONF_dump_fpCONF_loadCONF_load_bioCONF_load_fpCONF_modules_loadCONF_parse_listDEF_LOADDEF_LOAD_BIOMODULE_INITMODULE_LOAD_DSOMODULE_RUNNCONF_dump_bioNCONF_dump_fpNCONF_get_numberNCONF_get_number_eNCONF_get_sectionNCONF_get_stringNCONF_loadNCONF_load_bioNCONF_load_fpNCONF_newSTR_COPYerror loading dsonsde8oPphmfijkrlgq(h@list cannot be nullmissing close square bracketmissing equal signmissing finish functionmissing init functionmodule initialization errorno close braceno confno conf or environment variableno sectionno such fileno valueunable to create new sectionunknown module namevariable has no valuerb.\crypto\conf\conf_lib.c name=.\crypto\conf\conf_lib.cgroup=.\crypto\conf\conf_lib.c.\crypto\conf\conf_lib.c.\crypto\conf\conf_lib.c.\crypto\conf\conf_lib.c.\crypto\conf\conf_lib.c.\crypto\conf\conf_lib.c.\crypto\conf\conf_lib.c.\crypto\conf\conf_lib.c.\crypto\conf\conf_lib.c.\crypto\conf\conf_lib.c.\crypto\conf\conf_lib.c.\crypto\conf\conf_lib.cENVdefault.\crypto\conf\conf_api.c.\crypto\conf\conf_api.cvv == NULL.\crypto\conf\conf_api.c@pOpenSSL default`ppWIN32.\crypto\conf\conf_def.crb.\crypto\conf\conf_def.c%ld.\crypto\conf\conf_def.cline .\crypto\conf\conf_def.cdefault.\crypto\conf\conf_def.c.\crypto\conf\conf_def.c.\crypto\conf\conf_def.c.\crypto\conf\conf_def.c.\crypto\conf\conf_def.c.\crypto\conf\conf_def.c.\crypto\conf\conf_def.c.\crypto\conf\conf_def.c.\crypto\conf\conf_def.c.\crypto\conf\conf_def.c.\crypto\conf\conf_def.c.\crypto\conf\conf_def.c.\crypto\conf\conf_def.c.\crypto\conf\conf_def.c.\crypto\conf\conf_def.c.\crypto\conf\conf_def.c[%s] %s=%s [[%s]] @@ @ OPENSSL_CONFopenssl.cnf/.\crypto\conf\conf_mod.copenssl.cnf.\crypto\conf\conf_mod.copenssl_conf.\crypto\conf\conf_mod.cmodule=.\crypto\conf\conf_mod.c%-8d, retcode=, value=module=pathOPENSSL_initOPENSSL_finish.\crypto\conf\conf_mod.c, path=module=.\crypto\conf\conf_mod.c.\crypto\conf\conf_mod.c.\crypto\conf\conf_mod.c.\crypto\conf\conf_mod.c.\crypto\txt_db\txt_db.c.\crypto\txt_db\txt_db.c.\crypto\txt_db\txt_db.c.\crypto\txt_db\txt_db.cwrong number of fields on line %ld (looking for field %d, got %d, '%s' left) failure in sk_push OPENSSL_malloc failure PKCS7_ENC_CONTENTversionrecipientinfomd_algsenc_datacertcrlsigner_infomdPKCS7_SIGN_ENVELOPEcrlversionenc_datadigestPKCS7_ENCRYPTversioncontentsPKCS7_DIGESTPKCS7_ATTRIBUTESPKCS7_ATTR_SIGNPKCS7_ATTRIBUTESPKCS7_ATTR_VERIFYd.otherd.datad.signd.envelopedd.signed_and_envelopedd.digestd.encryptedtypePKCS7PKCS7versionmd_algscontentscertsigner_infoPKCS7_SIGNEDversionissuer_and_serialdigest_algauth_attrdigest_enc_algenc_digestunauth_attrPKCS7_SIGNER_INFOissuerserialPKCS7_ISSUER_AND_SERIALversionrecipientinfoenc_dataPKCS7_ENVELOPEversionissuer_and_serialkey_enc_algorenc_keyPKCS7_RECIP_INFOcontent_typealgorithmenc_data.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.c.\crypto\pkcs7\pk7_lib.ccertificate verify errorcipher has no object identifiercipher not initializedcontent and data presentctrl errordecode errordecrypted key is wrong lengthdecrypt errordigest failureencryption ctrl failureencryption not supported for this key typeerror adding recipienterror setting cipherinvalid mime typeinvalid null pointerinvalid signed data typemime no content typemime parse errormime sig parse errormissing ceripend infono contentno content typeno default digestno matching digest type foundno multipart body failureno multipart boundaryno recipient matches certificateno recipient matches keyno signatures on datano signersno sig content typeoperation not supported on this typepkcs7 add signature errorpkcs7 add signer errorpkcs7 datafinalpkcs7 datafinal errorpkcs7 datasignpkcs7 parse errorpkcs7 sig parse errorprivate key does not match certificatesignature failuresigner certificate not foundsigning ctrl failuresigning not supported for this key typesig invalid mime typesmime text errorunable to find certificateunable to find mem biounable to find message digestunknown digest typeunknown operationunsupported cipher typeunsupported content typewrong content typewrong pkcs7 type!!!!p!`!@!0P!H`!X0!xp!!!!!!!!(!8 !PP!`@!x0!`!!! !!!!(!@@!P!`!x!!p!P!!!B64_READ_PKCS7B64_WRITE_PKCS7DO_PKCS7_SIGNED_ATTRIBi2d_PKCS7_bio_streamPKCS7_add0_attrib_signing_timePKCS7_add_attrib_smimecapPKCS7_add_certificatePKCS7_add_crlPKCS7_add_recipient_infoPKCS7_add_signaturePKCS7_add_signerPKCS7_BIO_ADD_DIGESTPKCS7_COPY_EXISTING_DIGESTPKCS7_ctrlPKCS7_dataDecodePKCS7_dataFinalPKCS7_dataInitPKCS7_DATASIGNPKCS7_dataVerifyPKCS7_decryptPKCS7_DECRYPT_RINFOPKCS7_ENCODE_RINFOPKCS7_encryptPKCS7_finalPKCS7_FIND_DIGESTPKCS7_get0_signersPKCS7_RECIP_INFO_setPKCS7_set_cipherPKCS7_set_contentPKCS7_set_digestPKCS7_set_typePKCS7_signPKCS7_signatureVerifyPKCS7_SIGNER_INFO_setPKCS7_SIGNER_INFO_signPKCS7_sign_add_signerPKCS7_simple_smimecapPKCS7_verifySMIME_read_PKCS7SMIME_textu!p!t!v!!!d!w!(e!8!H!`x!y!!!!!!(!@g!Xz!p!!!!!s!!({!H!`!ph!|!!~!}!!! !8!Pi!x!!!!!j! k!@l!Xm!xn!o!p!q!r!.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_doit.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.csmime_sign.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.cVerify error:.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_smime.c.\crypto\pkcs7\pk7_attr.c.\crypto\pkcs7\pk7_attr.c.\crypto\pkcs7\pk7_attr.c.\crypto\pkcs7\pk7_attr.c.\crypto\pkcs7\pk7_attr.c.\crypto\pkcs7\pk7_attr.cPKCS7.\crypto\pkcs12\p12_add.c.\crypto\pkcs12\p12_add.c.\crypto\pkcs12\p12_add.c.\crypto\pkcs12\p12_add.c.\crypto\pkcs12\p12_add.c.\crypto\pkcs12\p12_add.c.\crypto\pkcs12\p12_add.c.\crypto\pkcs12\p12_add.c.\crypto\pkcs12\p12_add.c.\crypto\pkcs12\p12_add.c.\crypto\pkcs12\p12_add.c.\crypto\pkcs12\p12_add.c.\crypto\pkcs12\p12_add.c.\crypto\pkcs12\p12_add.c.\crypto\pkcs12\p12_add.cversionauthsafesmacPKCS12dinfosaltiterPKCS12_MAC_DATAvalue.othervalue.x509certvalue.x509crlvalue.sdsicerttypePKCS12_BAGSPKCS12_BAGSvalue.othervalue.keybagvalue.shkeybagvalue.safesvalue.bagvalue.bagvalue.bagtypePKCS12_SAFEBAGattribPKCS12_SAFEBAGPKCS12_SAFEBAGSPKCS12_SAFEBAGSPKCS12_AUTHSAFESPKCS12_AUTHSAFES.\crypto\pkcs12\p12_crpt.c.\crypto\pkcs12\p12_crpt.c.\crypto\pkcs12\p12_crpt.c.\crypto\pkcs12\p12_crpt.c.\crypto\pkcs12\p12_crt.c.\crypto\pkcs12\p12_decr.c.\crypto\pkcs12\p12_decr.c.\crypto\pkcs12\p12_decr.c.\crypto\pkcs12\p12_decr.c.\crypto\pkcs12\p12_decr.c.\crypto\pkcs12\p12_decr.c.\crypto\pkcs12\p12_decr.c.\crypto\pkcs12\p12_decr.c.\crypto\pkcs12\p12_decr.c.\crypto\pkcs12\p12_decr.c.\crypto\pkcs12\p12_init.c.\crypto\pkcs12\p12_init.c.\crypto\pkcs12\p12_init.c.\crypto\pkcs12\p12_key.c.\crypto\pkcs12\p12_key.c.\crypto\pkcs12\p12_key.c.\crypto\pkcs12\p12_key.c.\crypto\pkcs12\p12_key.c.\crypto\pkcs12\p12_key.c.\crypto\pkcs12\p12_kiss.c.\crypto\pkcs12\p12_kiss.c.\crypto\pkcs12\p12_kiss.c.\crypto\pkcs12\p12_kiss.c.\crypto\pkcs12\p12_kiss.c.\crypto\pkcs12\p12_mutl.c.\crypto\pkcs12\p12_mutl.c.\crypto\pkcs12\p12_mutl.c.\crypto\pkcs12\p12_mutl.c.\crypto\pkcs12\p12_mutl.c.\crypto\pkcs12\p12_mutl.c.\crypto\pkcs12\p12_mutl.c.\crypto\pkcs12\p12_mutl.c.\crypto\pkcs12\p12_mutl.c.\crypto\pkcs12\p12_mutl.c.\crypto\pkcs12\p12_mutl.c.\crypto\pkcs12\p12_mutl.c.\crypto\pkcs12\p12_mutl.c.\crypto\pkcs12\p12_utl.c.\crypto\pkcs12\p12_utl.c.\crypto\pkcs12\p12_npas.c.\crypto\pkcs12\p12_npas.c.\crypto\pkcs12\p12_npas.c#p#@# #8`#X#x#####P###(#@#X#p #0#`#p#### #0#0#H#`#xPARSE_BAGPARSE_BAGSPKCS12_ADD_FRIENDLYNAMEPKCS12_add_friendlyname_ascPKCS12_add_friendlyname_uniPKCS12_add_localkeyidPKCS12_createPKCS12_gen_macPKCS12_initPKCS12_item_decrypt_d2iPKCS12_item_i2d_encryptPKCS12_item_pack_safebagPKCS12_key_gen_ascPKCS12_key_gen_uniPKCS12_MAKE_KEYBAGPKCS12_MAKE_SHKEYBAGPKCS12_newpassPKCS12_pack_p7dataPKCS12_pack_p7encdataPKCS12_parsePKCS12_pbe_cryptPKCS12_PBE_keyivgenPKCS12_setup_macPKCS12_set_macPKCS12_unpack_authsafesPKCS12_unpack_p7dataPKCS12_verify_macPKCS8_add_keyusagePKCS8_encryptd#y#e#0f#@g#Px#`h#i#j#k#l#m#n#o#p#0q#Hr#`s#pt#u#v#w#cant pack structurecontent type not datadecode errorencode errorencrypt errorerror setting encrypted data typeinvalid null argumentinvalid null pkcs12 pointeriv gen errorkey gen errormac absentmac generation errormac setup errormac string set errormac verify errormac verify failureparse errorpkcs12 algor cipherinit errorpkcs12 cipherfinal errorpkcs12 pbe crypt errorunknown digest algorithmunsupported pkcs12 mode.\crypto\pkcs12\p12_p8e.c.\crypto\pkcs12\p12_p8e.c.\crypto\pkcs12\p12_p8e.c.\crypto\comp\comp_lib.c0)@)P)`)BIO_ZLIB_FLUSHBIO_ZLIB_NEWBIO_ZLIB_READBIO_ZLIB_WRITEc)Pd)he)zlib deflate errorzlib inflate errorzlib not supported|run length compression@(undef)@ & P & ` & p & & &0  &@ &`  &p  & & &  &  &  & 0&  &  &8 @&P p&` &p & ` & p &  & & &  & &( &@  &P  &`  &x  &  &  &  &  & & DYNAMIC_CTRLDYNAMIC_GET_DATA_CTXDYNAMIC_LOADDYNAMIC_SET_DATA_CTXENGINE_addENGINE_by_idENGINE_cmd_is_executableENGINE_ctrlENGINE_ctrl_cmdENGINE_ctrl_cmd_stringENGINE_finishENGINE_FREE_UTILENGINE_get_cipherENGINE_GET_DEFAULT_TYPEENGINE_get_digestENGINE_get_nextENGINE_get_pkey_asn1_methENGINE_get_pkey_methENGINE_get_prevENGINE_initENGINE_LIST_ADDENGINE_LIST_REMOVEENGINE_load_private_keyENGINE_load_public_keyENGINE_load_ssl_client_certENGINE_newENGINE_removeENGINE_set_default_stringENGINE_SET_DEFAULT_TYPEENGINE_set_idENGINE_set_nameENGINE_TABLE_REGISTERENGINE_UNLOAD_KEYENGINE_UNLOCKED_FINISHENGINE_up_refINT_CTRL_HELPERINT_ENGINE_CONFIGUREINT_ENGINE_MODULE_INITLOG_MESSAGEd&&&&&g&(w&@&`&xh&&&f&i&&& &@j&`k&pl&m&n&&&&& &8u&Hp&Xx&h&}&&t&~&q&&&&(e&@&`already loadedargument is not a numbercmd not executablecommand takes inputcommand takes no inputconflicting engine idctrl command not implementeddh not implementeddsa not implementedDSO failuredso not foundengines section errorengine configuration errorengine is not in the listengine section errorfailed loading private keyfailed loading public keyfinish failedcould not obtain hardware handle'id' or 'name' missinginit failedinternal list errorinvalid argumentinvalid cmd nameinvalid cmd numberinvalid init valueinvalid stringnot initialisednot loadedno control functionno indexno load functionno referenceno such engineno unload functionprovide parametersrsa not implementedunimplemented cipherunimplemented digestunimplemented public key methodversion incompatibility.\crypto\engine\eng_lib.c.\crypto\engine\eng_lib.c.\crypto\engine\eng_lib.c.\crypto\engine\eng_lib.c.\crypto\engine\eng_lib.c.\crypto\engine\eng_lib.c.\crypto\engine\eng_lib.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.cID.\crypto\engine\eng_list.c2.\crypto\engine\eng_list.c1.\crypto\engine\eng_list.cid=.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.cdynamicOPENSSL_ENGINES/usr/local/ssl/lib/enginesdynamicDIR_LOADDIR_ADDLIST_ADDLOAD.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_list.c.\crypto\engine\eng_init.c.\crypto\engine\eng_init.c.\crypto\engine\eng_init.c.\crypto\engine\eng_init.c.\crypto\engine\eng_init.c.\crypto\engine\eng_init.c.\crypto\engine\eng_init.c.\crypto\engine\eng_init.c.\crypto\engine\eng_init.c.\crypto\engine\eng_init.cH.\crypto\engine\eng_ctrl.c.\crypto\engine\eng_ctrl.c%s.\crypto\engine\eng_ctrl.c%s%s.\crypto\engine\eng_ctrl.c.\crypto\engine\eng_ctrl.c.\crypto\engine\eng_ctrl.c.\crypto\engine\eng_ctrl.c.\crypto\engine\eng_ctrl.c.\crypto\engine\eng_ctrl.c.\crypto\engine\eng_ctrl.c.\crypto\engine\eng_ctrl.c.\crypto\engine\eng_ctrl.c.\crypto\engine\eng_ctrl.c.\crypto\engine\eng_ctrl.c.\crypto\engine\eng_ctrl.c.\crypto\engine\eng_ctrl.c.\crypto\engine\eng_ctrl.c.\crypto\engine\eng_ctrl.c.\crypto\engine\eng_ctrl.c.\crypto\engine\eng_ctrl.c.\crypto\engine\eng_ctrl.c.\crypto\engine\eng_table.c.\crypto\engine\eng_table.c.\crypto\engine\eng_table.c.\crypto\engine\eng_table.c.\crypto\engine\eng_table.c.\crypto\engine\eng_table.c.\crypto\engine\eng_table.c.\crypto\engine\eng_table.c.\crypto\engine\eng_table.c.\crypto\engine\eng_table.c.\crypto\engine\eng_pkey.c.\crypto\engine\eng_pkey.c.\crypto\engine\eng_pkey.c.\crypto\engine\eng_pkey.c.\crypto\engine\eng_pkey.c.\crypto\engine\eng_pkey.c.\crypto\engine\eng_pkey.c.\crypto\engine\eng_pkey.c.\crypto\engine\eng_pkey.c.\crypto\engine\eng_pkey.c.\crypto\engine\eng_pkey.c.\crypto\engine\eng_pkey.c.\crypto\engine\eng_pkey.c.\crypto\engine\eng_pkey.c.\crypto\engine\eng_pkey.c.\crypto\engine\eng_pkey.c.\crypto\engine\eng_pkey.c.\crypto\engine\eng_pkey.c.\crypto\engine\eng_pkey.c.\crypto\engine\eng_pkey.cALLRSADSAECDHECDSADHRANDCIPHERSDIGESTSPKEYPKEY_CRYPTOPKEY_ASN1.\crypto\engine\eng_fat.cstr=.\crypto\engine\tb_cipher.c.\crypto\engine\tb_digest.c.\crypto\engine\tb_pkmeth.c.\crypto\engine\tb_asnmth.c.\crypto\engine\tb_asnmth.c.\crypto\engine\tb_asnmth.c"openssl"Software engine supporta@(TEST_ENG_OPENSSL_RC4) test_init_key() called r(TEST_ENG_OPENSSL_PKEY)Loading Private key %s .\crypto\engine\eng_cnf.cengine_id2soft_loaddynamic_pathdynamicSO_PATHLIST_ADDLOADEMPTYinitinit.\crypto\engine\eng_cnf.cdefault_algorithms.\crypto\engine\eng_cnf.c, value=, name=section=.\crypto\engine\eng_cnf.cengines$dynamic$Dynamic engine loading supportSO_PATHSpecifies the path to the new ENGINE shared libraryIDNO_VCHECKSpecifies to continue even if version checking fails (boolean)Specifies an ENGINE id name for loadingLIST_ADDWhether to add a loaded ENGINE to the internal list (0=no,1=yes,2=mandatory)DIR_LOADSpecifies whether to load from 'DIR_ADD' directories (0=no,1=yes,2=mandatory)DIR_ADDAdds a directory from which ENGINEs can be loadedLOADLoad up the ENGINE specified by other settings.\crypto\engine\eng_dyn.c.\crypto\engine\eng_dyn.cv_checkbind_engine.\crypto\engine\eng_dyn.c.\crypto\engine\eng_dyn.c.\crypto\engine\eng_dyn.c.\crypto\engine\eng_dyn.c.\crypto\engine\eng_dyn.c.\crypto\engine\eng_dyn.c.\crypto\engine\eng_dyn.c.\crypto\engine\eng_dyn.c.\crypto\engine\eng_dyn.c.\crypto\engine\eng_dyn.c.\crypto\engine\eng_dyn.c.\crypto\engine\eng_dyn.c.\crypto\engine\eng_dyn.c.\crypto\engine\eng_dyn.c.\crypto\engine\eng_dyn.c.\crypto\engine\eng_dyn.c.\crypto\engine\eng_dyn.c.\crypto\engine\eng_dyn.cP x)rdrand)Intel RDRAND engineversionresponderIdproducedAtresponsesresponseExtensionsOCSP_RESPDATAtbsResponseDatasignatureAlgorithmsignaturecertsOCSP_BASICRESPcrlUrlcrlNumcrlTimeOCSP_CRLIDissuerlocatorOCSP_SERVICELOCsignatureAlgorithmsignaturecertsOCSP_SIGNATUREhashAlgorithmissuerNameHashissuerKeyHashserialNumberOCSP_CERTIDreqCertsingleRequestExtensionsOCSP_ONEREQversionrequestorNamerequestListrequestExtensionsOCSP_REQINFOtbsRequestoptionalSignatureOCSP_REQUESTresponseTyperesponsecertIdOCSP_RESPBYTESresponseStatusresponseBytesOCSP_RESPONSEvalue.byNamevalue.byKeyOCSP_RESPIDrevocationTimerevocationReasonOCSP_REVOKEDINFOvalue.goodvalue.revokedvalue.unknownOCSP_CERTSTATUScertStatusthisUpdatenextUpdatesingleExtensionsOCSP_SINGLERESP.\crypto\ocsp\ocsp_ext.c.\crypto\ocsp\ocsp_ht.c.\crypto\ocsp\ocsp_ht.c/: POSTCode= .\crypto\ocsp\ocsp_ht.c.\crypto\ocsp\ocsp_ht.c.\crypto\ocsp\ocsp_ht.c.\crypto\ocsp\ocsp_ht.c,Reason=Code=.\crypto\ocsp\ocsp_lib.c.\crypto\ocsp\ocsp_lib.chttp80https443/.\crypto\ocsp\ocsp_lib.c.\crypto\ocsp\ocsp_lib.c.\crypto\ocsp\ocsp_cl.c.\crypto\ocsp\ocsp_cl.c.\crypto\ocsp\ocsp_cl.c.\crypto\ocsp\ocsp_cl.c.\crypto\ocsp\ocsp_cl.c.\crypto\ocsp\ocsp_cl.c.\crypto\ocsp\ocsp_cl.c.\crypto\ocsp\ocsp_cl.c.\crypto\ocsp\ocsp_cl.c.\crypto\ocsp\ocsp_cl.c.\crypto\ocsp\ocsp_srv.c.\crypto\ocsp\ocsp_srv.c.\crypto\ocsp\ocsp_srv.c%*sCertificate ID: %*sHash Algorithm: %*sIssuer Name Hash: %*sIssuer Key Hash: %*sSerial Number: (UNKNOWN)successfulmalformedrequestinternalerrortrylatersigrequiredunauthorizedgoodrevokedunknownunspecifiedkeyCompromisecACompromiseaffiliationChangedsupersededcessationOfOperationcertificateHoldremoveFromCRLOCSP Request Data: Version: %lu (0x%lx) Requestor Name: Requestor List: Request Single ExtensionsRequest ExtensionsOCSP Response Data: OCSP Response Status: %s (0x%lx) Response Type: (unknown response type) Version: %lu (0x%lx) Responder Id: Produced At: Responses: Cert Status: %s Revocation Time: Revocation Reason: %s (0x%lx) This Update: Next Update: Response Single ExtensionsResponse Extensions.\crypto\ocsp\ocsp_vfy.c.\crypto\ocsp\ocsp_vfy.c.\crypto\ocsp\ocsp_vfy.c.\crypto\ocsp\ocsp_vfy.c.\crypto\ocsp\ocsp_vfy.cVerify error:.\crypto\ocsp\ocsp_vfy.c.\crypto\ocsp\ocsp_vfy.c.\crypto\ocsp\ocsp_vfy.c.\crypto\ocsp\ocsp_vfy.c.\crypto\ocsp\ocsp_vfy.c.\crypto\ocsp\ocsp_vfy.c.\crypto\ocsp\ocsp_vfy.c.\crypto\ocsp\ocsp_vfy.c.\crypto\ocsp\ocsp_vfy.c.\crypto\ocsp\ocsp_vfy.c.\crypto\ocsp\ocsp_vfy.cVerify error:@'`7`'x7p'7'7'7P'7'7'7'80' 8'88 'P8'`8@'x8'8'8P'8`'8'8ASN1_STRING_encodeD2I_OCSP_NONCEOCSP_basic_add1_statusOCSP_basic_signOCSP_basic_verifyOCSP_cert_id_newOCSP_CHECK_DELEGATEDOCSP_CHECK_IDSOCSP_CHECK_ISSUEROCSP_check_validityOCSP_MATCH_ISSUERIDOCSP_parse_urlOCSP_request_signOCSP_request_verifyOCSP_response_get1_basicOCSP_sendreq_bioOCSP_sendreq_nbioPARSE_HTTP_LINE1REQUEST_VERIFYd';e';f'0;z'@;{'`;y';g';|';h';i';j'<k' <l'0<m'H<n'X<'<o'<p'<q'<r'<s'=t'(=u'@=v'X=}'x=~'='=w'=x'='=bad datacertificate verify errordigest errerror in nextupdate fielderror in thisupdate fielderror parsing urlmissing ocspsigning usagenextupdate before thisupdatenot basic responseno certificates in chainno contentno public keyno response datano revoked timeprivate key does not match certificaterequest not signedresponse contains no revocation dataroot ca not trustedserver read errorserver response errorserver response parse errorserver write errorsignature failuresigner certificate not foundstatus expiredstatus not yet validstatus too oldunknown message digestunknown nidunsupported requestorname type(>(>@(?( ?P((?`(@?(X?p(p?(?(?(?(?GENERAL_ALLOCATE_BOOLEANGENERAL_ALLOCATE_PROMPTGENERAL_ALLOCATE_STRINGUI_ctrlUI_dup_error_stringUI_dup_info_stringUI_dup_input_booleanUI_dup_input_stringUI_dup_verify_stringUI_get0_resultUI_new_methodUI_set_resulth(P@f(p@g(@i(@d(@e(@j(@common ok and cancel charactersindex too largeindex too smallno result bufferresult too largeresult too smallunknown control command.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.cEnter for :%d.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.c%d.\crypto\ui\ui_lib.c characters to You must type in .\crypto\ui\ui_lib.c characters to You must type in .\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.c.\crypto\ui\ui_lib.cD??=@OpenSSL default user interfaceVerifying - %sVerify failure r.\crypto\ui\ui_openssl.cconwcon.\crypto\ui\ui_openssl.cetypekvnocipherKRB5_ENCDATAnametypenamestringKRB5_PRINCNAMEtktvnorealmsnameencdataKRB5_TKTBODYKRB5_TICKETKRB5_TICKETpvnomsgtypeapoptionsticketauthenticatorKRB5_APREQBODYKRB5_APREQKRB5_APREQctypechecksumKRB5_CHECKSUMktypekeyvalueKRB5_ENCKEYadtypeaddataKRB5_AUTHDATAavnocrealmcnamecksumcusecctimesubkeyseqnumauthorizationKRB5_AUTHENTBODYKRB5_AUTHENTKRB5_AUTHENT.\crypto\pqueue\pqueue.c.\crypto\pqueue\pqueue.citem %02x%02x%02x%02x%02x%02x%02x%02x 0 /`J/pJ/J/J/J /JP /J@ /K0/K@/0KP/HK@/`KP/xK`/Kp/K/K /K /K/L`/Lp/0L/HL/`L/xL/L/L/L/L/L/M/(M /@M0/`M@/MP/M`/Mp/M` /M/N/ N/@N/XN/xN/N/N/N/N/O/O/(O /8Od2i_TS_RESPDEF_SERIAL_CBDEF_TIME_CBESS_ADD_SIGNING_CERTESS_CERT_ID_NEW_INITESS_SIGNING_CERT_NEW_INITINT_TS_RESP_VERIFY_TOKENPKCS7_to_TS_TST_INFOTS_ACCURACY_set_microsTS_ACCURACY_set_millisTS_ACCURACY_set_secondsTS_CHECK_IMPRINTSTS_CHECK_NONCESTS_CHECK_POLICYTS_CHECK_SIGNING_CERTSTS_CHECK_STATUS_INFOTS_COMPUTE_IMPRINTTS_CONF_set_default_engineTS_GET_STATUS_TEXTTS_MSG_IMPRINT_set_algoTS_REQ_set_msg_imprintTS_REQ_set_nonceTS_REQ_set_policy_idTS_RESP_create_responseTS_RESP_CREATE_TST_INFOTS_RESP_CTX_add_failure_infoTS_RESP_CTX_add_mdTS_RESP_CTX_add_policyTS_RESP_CTX_newTS_RESP_CTX_set_accuracyTS_RESP_CTX_set_certsTS_RESP_CTX_set_def_policyTS_RESP_CTX_set_signer_certTS_RESP_CTX_set_status_infoTS_RESP_GET_POLICYTS_RESP_SET_GENTIME_WITH_PRECISIONTS_RESP_set_status_infoTS_RESP_set_tst_infoTS_RESP_SIGNTS_RESP_verify_signatureTS_RESP_verify_tokenTS_TST_INFO_set_accuracyTS_TST_INFO_set_msg_imprintTS_TST_INFO_set_nonceTS_TST_INFO_set_policy_idTS_TST_INFO_set_serialTS_TST_INFO_set_timeTS_TST_INFO_set_tsaTS_VERIFYTS_VERIFY_CERTTS_VERIFY_CTX_new/Q/Qd/Q/Qs/Q/R/Rt/0Re/PRf/pRu/Rg/Rh/Ri/Rj/Rk/Sv/ Sw/@S/`Sl/Sx/Sy/Sm/Sn/Sz/T/ T/8To/HTp/`T{/pT|/T}/T~/Tq/Tr/Tbad pkcs7 typebad typecertificate verify errorcould not set enginecould not set timed2i ts resp int faileddetached contentess add signing cert erroress signing certificate errorinvalid null pointerinvalid signer certificate purposemessage imprint mismatchnonce mismatchnonce not returnedno contentno time stamp tokenpkcs7 add signature errorpkcs7 add signed attr errorpkcs7 to ts tst info failedpolicy mismatchprivate key does not match certificateresponse setup errorsignature failurethere must be one signertime syscall errortoken not presenttoken presenttsa name mismatchtsa untrustedtst info setup errorts datasignunacceptable policyunsupported md algorithmunsupported versionwrong content type.\crypto\ts\ts_req_utils.c.\crypto\ts\ts_req_utils.c.\crypto\ts\ts_req_utils.c.\crypto\ts\ts_req_utils.cVersion: %d Policy OID: unspecified Nonce: unspecified yesnoCertificate required: %s .\crypto\ts\ts_rsp_utils.c.\crypto\ts\ts_rsp_utils.c.\crypto\ts\ts_rsp_utils.c.\crypto\ts\ts_rsp_utils.c.\crypto\ts\ts_rsp_utils.c.\crypto\ts\ts_rsp_utils.c.\crypto\ts\ts_rsp_utils.c.\crypto\ts\ts_rsp_utils.c.\crypto\ts\ts_rsp_utils.c.\crypto\ts\ts_rsp_utils.c.\crypto\ts\ts_rsp_utils.cStatus info: TST info: %s Not included. WWWWXXGranted. Granted with modifications. Rejected. Waiting., Revocation warning.%sRevoked.unrecognized or unsupported algorithm identifier(XXY@YhYYZYtransaction not permitted or supportedthe data submitted has the wrong formatthe TSA's time source is not availablethe requested TSA policy is not supported by the TSAthe requested extension is not supported by the TSA the request cannot be handled due to system failurethe additional information requested could not be understood or is not available Status: out of bounds Status description: unspecified Failure info: unspecifiedyesVersion: %d Policy OID: Serial number: unspecifiednoTime stamp: Accuracy: unspecified Ordering: %s Nonce: unspecifiedTSA: unspecifiedunspecified seconds, unspecified millis, unspecified micros.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.cBad request format or system error..\crypto\ts\ts_rsp_sign.cError during response generation.Bad request version.Message digest algorithm is not supported.Superfluous message digest parameter.Bad message digest..\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.cRequested policy is not supported..\crypto\ts\ts_rsp_sign.cError during TSTInfo generation..%06ld.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.cError during signature generation..\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c%04d%02d%02d%02d%02d%02d.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.cError during serial number generation..\crypto\ts\ts_rsp_sign.cTime is not available.Unsupported extension..\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_sign.c.\crypto\ts\ts_rsp_verify.c,.\crypto\ts\ts_rsp_verify.c.\crypto\ts\ts_rsp_verify.c.\crypto\ts\ts_rsp_verify.cunknown codeunspecified.\crypto\ts\ts_rsp_verify.c, failure codes: unspecified, status text: status code: .\crypto\ts\ts_rsp_verify.c.\crypto\ts\ts_rsp_verify.c.\crypto\ts\ts_rsp_verify.c.\crypto\ts\ts_rsp_verify.c.\crypto\ts\ts_rsp_verify.c.\crypto\ts\ts_rsp_verify.c.\crypto\ts\ts_rsp_verify.c.\crypto\ts\ts_rsp_verify.c.\crypto\ts\ts_rsp_verify.c(d0d@dPdXdpdgrantedgrantedWithModsrejectionwaitingrevocationWarningrevocationNotificationbadAlgde e0eHe`exeebadRequestbadDataFormattimeNotAvailableunacceptedPolicyunacceptedExtensionaddInfoNotAvailablesystemFailure.\crypto\ts\ts_rsp_verify.c.\crypto\ts\ts_rsp_verify.c.\crypto\ts\ts_rsp_verify.c.\crypto\ts\ts_rsp_verify.c.\crypto\ts\ts_rsp_verify.c.\crypto\ts\ts_rsp_verify.c.\crypto\ts\ts_rsp_verify.cVerify error:.\crypto\ts\ts_verify_ctx.c.\crypto\ts\ts_verify_ctx.cctx != NULL.\crypto\ts\ts_verify_ctx.creq != NULL.\crypto\ts\ts_verify_ctx.c.\crypto\ts\ts_verify_ctx.c0x%s Extensions: critical: %s %4s UNKNOWNHash Algorithm: %s Message data: runable to load certificate: %s rrunable to load certificates: %s tsaunable to load private key: %s variable lookup failed for %s::%s tsainvalid variable value for %s::%s yesdefault_tsanodefault_tsaserialserialcrypto_devicecrypto_devicebuiltinchil.\crypto\ts\ts_conf.cengine:signer_certsigner_certcertssigner_keysigner_keydefault_policydefault_policydefault_policyother_policiesother_policiesother_policiesdigestsdigestsdigestsdigestsdigestsaccuracyaccuracysecsmillisecsmicrosecsaccuracyclock_precision_digitsclock_precision_digitsorderingtsa_nameess_cert_id_chaintimeaccuracynoncetsaorderingstatusextensionsTS_TST_INFOtextfailure_infoTS_STATUS_INFO.\crypto\ts\ts_asn1.c.\crypto\ts\ts_asn1.c.\crypto\ts\ts_asn1.cstatus_infotokenTS_RESPissuerserialESS_ISSUER_SERIALhashissuer_serialESS_CERT_IDcert_idspolicy_infoESS_SIGNING_CERT.\crypto\ts\ts_asn1.c.\crypto\ts\ts_asn1.c.\crypto\ts\ts_asn1.c.\crypto\ts\ts_asn1.chash_algohashed_msgTS_MSG_IMPRINTversionmsg_imprintpolicy_idnoncecert_reqextensionsTS_REQsecondsmillismicrosTS_ACCURACYversionpolicy_idmsg_imprintserial/Ɵ[Cv8Qn/lrSK?NvہTG= `yȱ4g|"UCР;X)z`KQ'nU_O_MKaLۻ{*z'9AYst t ^yU /)f:`ϰgi9PکH 1K#=gwu홠)sP`=1er/X^fJ2Akn o00: тK[C1tOFٺ wl]azW {+Rdj>svd/k&Νa%J3 یᦅ} ]Wq Xd߫!U3zP 3-ĪZr&j|I9X+RLo]ŵ좃',w;6.F^2|!ltJN5 gmp)՞R Vb#]e_$?iU6Hژc|=[Qf(IK|$Zk8\ k7BL~^bvEQmm5O7_m +0C:ͳ4yJQ"; tgN)܀b4h!145Mܷݏ괓Z'Hp!vp)a[Q;#ÐO]kNGY|(ʾ.»L*% 4hsvd/k&Νa%J3 یᦅ} ]Wq Xd߫!U3zP 3-ĪZr&j|I9X+RLo]ŵ좃',w;6.F^2|!ltJN5 gmp)՞R Vb#]e_$?iU6Hژc|=[Qf(IK|$Zk8\ k7BL~^bvEQmm5O7_m +0C:ͳ4yJQ"; tgN)܀b4h!`q@@s``$@mtt [-`H?f>hZ'1'Sj0A/8S7=vuF&`&p|Ҵ645Mܷݏ괓Z'Hp!vp)a[Q;#ÐO]kNGY|(ʾ.»L*% 4hsvd/k&Νa%J3 یᦅ} ]Wq Xd߫!U3zP 3-ĪZr&j|I9X+RLo]ŵ좃',w;6.F^2|!ltJN5 gmp)՞R Vb#]e_$?iU6Hژc|=[Qf(IK|$Zk8\ k7BL~^bvEQmm5O7_m +0C:ͳ4yJQ"; tgN)܀b4h!݀`qnVߔVvP0wVGXGn +8.lHC @F5hksM~ձ~]HFd]%E6jt1-D?*mx<+:[3hyK݅/Kk0lds4#W|.""ي-e#x+t#4hZc:f$kv%Gtӝ2;1sľ،2|w8otYmtt [-`H?f>hZ'1'Sj0A/8S7=vuF&`&p|Ҵ645Mܷݏ괓Z'Hp!vp)a[Q;#ÐO]kNGY|(ʾ.»L*% 4hsvd/k&Νa%J3 یᦅ} ]Wq Xd߫!U3zP 3-ĪZr&j|I9X+RLo]ŵ좃',w;6.F^2|!ltJN5 gmp)՞R Vb#]e_$?iU6Hژc|=[Qf(IK|$Zk8\ k7BL~^bvEQmm5O7_m +0C:ͳ4yJQ"; tgN)܀b4h!vzzz8192{zz{zxs{z`s{zo{zo{zm{zm614440963072204815361024.\crypto\srp\srp_lib.c.\crypto\srp\srp_lib.c.\crypto\srp\srp_lib.c:0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./.\crypto\srp\srp_vfy.c.\crypto\srp\srp_vfy.c.\crypto\srp\srp_vfy.c.\crypto\srp\srp_vfy.c*.\crypto\srp\srp_vfy.c.\crypto\srp\srp_vfy.c2-+] fuKP;@+0{ kp [`NP>@"x $4`47h7+Fp=F&T=TmMqFM҉ #Mͨ b  M S>(m>(E8ME3gHMg?X hxTmM,1q2]7(8 =8s80;K=@]=BP=efXffh ggxghhiM_m8M,=M(]8 &H0PEPXh| xMM_11LL|S UBYmY]][eme&no:p=ssva~(͎8 x-JPL`HM)ͽP `-Lpm'MOMMImVM 0@ @H(ME#m#$ %%`,./<M< F K2N0M:ap@@Х./D@///B0B0)2 )2I24P2w2@22Dk>o>\p>>}>>>>>&?&?0?0?H?`??@??,>,a,p,///}0,0}00U0@`00t00t021t@11t11t11@2#2@02S2@`22f@fffhhhhiDii`iixi%k(0kkkQlQlllplldlll4n4nnnooLo$Loo@ooToHqPqq`q sx s%s0sts tss<ssPtvvwwwwwxlx@lxxPxxdxyxy0y0yyy{{{ {Z|0Z|||}}-~-~<~@~~~88 z0z @  X mlm||KPcHp΅0Ѕgg~~ه ه0ĈЈNN``apPLP9@, l Pl`>M@P@A@AAABB CC`Dh`Dbp@bxbbbL%>?`%?9Cp%9CXC%`CC%CC%CD%DH%HH%HH &HI &IN0&NN@O/O`&/OiOp&iOP&P5P&5PHP&PP"Q ;0QR& RJR@PRjR@pRR}RR@RTGTT&TT@T0U ;0UUtUU}UDV#PVVX&@X`X@`X}X@XX@XX@XX@XX@YY@ Y=Y@@Y]Y@`YyY@YYYY@ZZ@ Z9Z@@ZZ@Z]' ]o] 'o]]4']^L'^_`'__x'_>`'>``'``'``'` c' cc'c1c(1cVc'pcc@cid(pdd((d)e0()eeeH(eeeH(e3fH(3f`fH(`fg`(g!ht(!hFj(Fjrj(jk(k l@l.l@`l2m0@mm ;mn@n*n@0nn#nn@nn@nn@oo@ oo#oo@oo(op(pGq)Gqcq)pqr@suu(uu{@{|0)|||}H }}}:~0@~~~"@0}@}@Ta)a)H}`t#Ѓ}Ѓ}o#p4}@X@`0 H) O`)O|x)}R}p@܋:#:w)w)ӌ)})R)RX *X`$*`~4*~D*[`*[t***ז*͗*͗*ڙ*ϛ*Л&P/>Z`/Z^p/^b/bf/ft/P122(2P1?1?P1PQ1`|1116l6D1X1h18}@]40]<0%P000_0_y0`0Ht0HV0`}40}0$0 Z 6> > $7> > H7> > h7> ? 7? ,? 7,? @? 7@? ? ? A 7 A CA 7PA A 8A 1B 81B EB 08PB B B 0C Z0C C 7C C 7C D  D D @8D D T8`E E ;E F ?F dG pG H d8H H PH I 8 I `I 8`I I 9I >L x8@L L 9L O 9O O 9O O 9O P D9P P T9P S h9S oS 9oS {S 9S S :S S :S V :V V :V V :V W W W :W W :W ] $:] ^ D: ^ ^ X:^ -^ p:-^ @^ :@^ y^ }y^ ^ :^ _ ;_ D_ ;P_ `  ` f` }p` ` 8` ga 8ga c 8c c 8c 2d 8@d d d {e 9{e e 49e f f g ;g +g ;+g g ;g h ;h h <h h <h *i 0<@i oi oi .j ,;.j j @;j j X;j j p;j 6k ;@k k &k l ^l l ;l l ;l m ;m Fm ;`m m Hm n n *o }0o o ;o o @o o @o p @0p xp ;p p ;p q ; q eq @<eq q P<q q d<q r |<r r <r s < s [s }`s s  Ȃ >Ȃ ڂ 4>ڂ D> T> s l>s > > > ΅ >Ѕ S x` # Ɇ @І # & @0 ̇ \?̇ h? # ?# H ?H ^ ?` v @ ֋ >֋ > ̍ >Ѝ = @ u  ?  ? C ,?C @?    ? ʖ 0Ж , ?, " ?" @ Й ,@Й 2 8@2 q L@q `@ p@ R @` z @ ; ! @0 ;  ; * @0 # @ ݝ @ @  @ # @ i @p C @P < @ ? ?@ y Ty 5 @5 B @P @ = @= A s As ,A C@ } } I }P } D 1 ? 0? ? 0? ? @@ @ hJ@ 9@ tJ9@ @ J@ @ J@ @ J@ qB JB B (T@ ; ; J ;P @@ Z @ M @P p @p V V V @  @ t V  TW n dWn  xW  l\ > c> @p> > > ;? d> f f ̿ gп g R (gR k @gk } Xg @ x  k> _ 4k_  Dk    Լ  Xk  xk Q k`  } J kJ v k # # k k 1 @ Z @` { @  0> G? |mG? CG mCG fG mpG G mG G mG H mH uI nuI K nK L mL M t M zM tM ,N H0N N 8mN V XmV V lmW W ;W _X ,n_X [ Hn[ [ \n\ @\ ln@\ ] n] B^ n`^ ^ d^ ^ ^ _ n_ )_ n0_ _ }_ ` o` c pc c 0pd Kd nKd xd oxd d od d 0od de @ode ye Xoye e poe e oe f @f f of *g o*g Bg oBg g og g og g ng Jh nJh Wh n`h yh @h h @i Vi @`i i pi j pj j pj k pk k pk l p l l @pl m Tpm 1m lp1m Jm pPm o o +o @0o p q p

& L|>& J& L|J& l& `|p& ) ) \) @`) y) @) ) ) * 6 ~>6 R6 ~R6 U6 ,~U6 X7 D~X7 7 X~7 8 h~8 8 x~8 : ~: ; ~; ; ; < @< E XE F l0F wF 0F H tH K K O dP vP |vP .Q .Q S  S 4S @S T T T T U U uV uV V 4V -Z D0Z lZ HlZ [ [ [ [ x[ }[ [ [ [ [ [  \ \ 0\ i] 0] ] @] ^ @^ -^ @@^ ]^ @p^ ^ @^ ^ @^ ^ @_ _ @ _ =_ @P_ m_ @p_ _ @_ _ @_ _ @_ ` @` -` @@` ]` @` ` @` ` @` ` @a a @ a =a @Pa ma @a a @a a @b b @ b =b @@b ]b @pb b @b b @b b @b b @c -c @0c Mc @`c }c @c c @c c @c c @d d @ d =d @@d ]d @`d }d @d d @d d @d d @d d @e e @ e =e @@e ]e @`e }e @e e @e e @e e @e e @f f @ f =f @@f ]f @`f }f @f f @f f @f f @f f @g g @ g =g @@g ]g @`g }g @g g @g g @g g @g g @h h @ h =h @@h ]h @`h }h @h h @h h @h h @h h @i i @ i =i @@i ]i @i i }0j j Ѐj ak ؀ak en en n n Fo 0Fo lq Dlq q \q r Hr ds 0ps t t t %v 0v v d@>>d>>d>5?d@??d??d?%@d0@u@d@@d@Ad AzAdAAdABd BeBdpBBdBCd CeCdpCCdCDdDjDdpDDdDEdEUEd`EEdEEdF+F+FWFWFzFFFFFȍFF܍G+G+GWGlWGzGGG@GH}HEH}PHHdHHdH%I}0IeI}pII}II}I5Jd@JJdJJdJ%Kd0KKPL5L}@LuL}LL}LL}MEMdPMMdMMdM5Nd@NNdNNdN0Od0OuOdOvPP QQRRSSTdT^Td`TTdTUd UUUVVW,WXXY4Y[[L[[x[`[*\0\\\]p]D^ԎD^8_8______,_%`<0`I`@P`h`@p``@``@`bbedhpd-e0effj<k llvlvllllЏlcncnnno op#pr$rv\vfw\pwwȎwPxȎPxyHQyyHyzxz{P|} }}#}[`@@B ;PǁЁOOσĐЃGP!0 ;]]b8p=xp@ ;!Ԑ0T@`}@@ĉ@Љ@ @ ;̎TЎ@0}0`}`}@xАڑ@0M@Pm@p@@dΓ@#0`(=@@j@p<Lǚhǚ#0ޛ ; Py@ݜ@}0ŸП?#@AP ;֡4P4~4T~4<6`<6j6j6666ԛ>> >f> ;p>>\>>h>>|>]?]?i???@??@@5@@@@@p@*BH`BB@BB40BoCLoCpC`CCC%D%DDDVE`E}E@EE@EE@EE@E1FW1FGĜGGGH H6H@@HVH@`HvH@HH@HHLI(I@0III7J ;@JJLJJ@J K0 KDL@DLHL`PLLLLWM`MMMNNdOpOO}O(P}0P[PPPPQ#QxRxR?T?TSTĝ`TU ;UV0VWtWXX}Xԝ}XXXYYY@YY@Y Z@Z-Z@0ZZZ#ZZZZZ0ZZDZ[T[[\[[p[)\#0\] ]]#]^@^y^=>K>̭P>>P>>`>"?t0?g?C0>CjC@pCCC>D>DRD,RDD<DNGPGMHPMHHlHHHHHHH,L,LSL̽`LL0LMMN#NNHNO ;OOO P-i @ibjpjkklLlKm`mmmnno oo#oppiqqr rrrs sDtPtt0t!vP0vvvGw,GwOx@Pxz}zb{lb{{{{|y|H|}}}}}~0ց>_`22]`0GP@ ;zB0B\H\g`p]]GGKKW`-0@=@@'(a d@$MPH]@TT%%?@``{0 H`4VS_VERSION_INFO  ?BStringFileInfo040904b0z-CompanyNameThe OpenSSL Project, http://www.openssl.org/VFileDescriptionOpenSSL Shared Library.FileVersion1.0.2k2 InternalNamelibeay32B OriginalFilenamelibeay32.dllHProductNameThe OpenSSL Toolkit2ProductVersion1.0.2kuLegalCopyrightCopyright 1998-2005 The OpenSSL Project. Copyright 1995-1998 Eric A. Young, Tim J. Hudson. All rights reserved.DVarFileInfo$Translation  @HPX`hpxȠРؠ (08@HPX`hpx@HPXx08PX (HХإ@ x`0H`(Ȥp<HpТآ08PXpxȣ(8PXpxȤ (@HXxȥХإ (08@H(08Xhxȧ8`Ȩب08PXpxȩ08PXpxȪ (8Xpxȫ (08@HPX`hpxȯp(8Ƞ08HXhء08PXpx (08@HPX`hpxУأ (08@HP`ȤHPXhpx (PhȦȬЬج8@HPX`hpȭЭح (08@HhpxȮخ (08@HPX`hpxȯЯ8Ȯخ(8HXhxȯد(8HXhxȠؠ(8HXhxȡء(8HXhxȢآ(8HXhxȣأ(8HXhxȤؤ(8HXhxȥإ(8HXhxȦئ(8HXhxȧا(8HXhxШب (@H`hxЩة08PXhȪ08PXpxȫ (8XpxȬ@H`hЭح (@PhpxȮ (08@HPX`hpȯЯد0 08@Hhpx (L(08@HPX`hpxȠРؠ (8@HP,ؠ (08@HPdЦئ (8HP`pxȧا(8@P`hxȨب(0@PXhxȩЩ 0@HXhpЪ 08HX`pЫث (HP`pxȬ(8@`hxح(0@PXhxȮЮ 0@HXhpЯD08X`Рؠ (8HP`pxȡء(8@P`hxȢآ(0@PXhxȣУ 0@HXhpФ08X`pХإ (8HP`Ȧئ(8@P`hxا(0@PXxȨШ 0@HXhp 08HX`pЪت (8HP`pxȫث(8@P`hxȬج(0@PXhxȭЭ 0@HXhpЮ 08HX`pЯدl (8HP`pxȠؠ(8@P`hxȡء(0@PXhxȢТ 0@HXhpУ 08HX`pФؤ (8HP`pxȥإ(8@P`hxȦئ(0@PXhxȧЧ 0@HXhpШ 08HX`pЩة (8HP`pxȪت(8@P`hxȫث(0@PXhxȬЬ 0@HXhpЭ 08HX`pЮخ (8HP`pxȯدh(8@P`hxȠؠ(0@PXhxȡС 0@HXhpТ 08HX`pУأ (8HP`pxȤؤ(8@P`hxȥإ(0@PXhxȦЦ 0@HXhpЧ 08HX`pШب (8HP`pxȩة(8@P`hxȪت(0@PXhxȫЫ 0@HXhpЬ X`pЭح (8HP`pxȮخ(8@P`hxȯدl(0@PXhxȠР 0@HXhpС 08HX`pТآ (8HP`pxȣأ(8@P`hxȤؤ(0@PXhxȥХ 0@HXhpЦ 08HX`pЧا (8HP`pxȨب(8@P`hxȩة(0@PXhxȪЪ 0@HXhpЫ 08HX`pЬج (8HP`pxȭح(8@P`hxȮخ(0@PXhxȯЯh 0@HXhpР 08HX`pСء (8HP`pxȢآ(8@P`hxȣأ(0@PXhxȤФ 0@HXhpХ 08HЦئ (8HP`pxȧا(8@P`hxȨب(0@PXhxȩЩ 0@HXhpЪ 08HX`pЫث (8HP`pxȬج(8@P`hxȭح(0@PXhxȮЮ 0@HXhpЯX 08HX`pРؠ (8HP`pxȡء(8@P`hxȢآ(0@PXhxȣУ 0@HXhpФ 08HX`pХإ (8HP`pxȦئ(8@P`hxȧا(0@PXhxȨШ 0@HXhpЩ 08HX`pЪت (8HPpxȫث8@`hج(0PXxȭЭ 0@HXhpЮ 08HX`pЯدL (8HP`pxȠؠ(8@P`hxȡء(0@PXhxȢТ 0@HXhpУ 08HX`pФؤ (8HP`pxȥإ(8@P`hxȦئ(0@PXhxȧЧ 0@HXhpШ 08HX`pЩة (8HP`pxȪت(8@P`hxث(0@PXhxȬЬ 0@Hhp08HX`pЮخHP`ȯدl(8@P`hxȠؠ(0@PXhxȡС 0@HXhpТ 08HX`pУأ (8HP`pxȤؤ(8@P`hxإ(0@PXhxȦЦ 0@HXhpЧ 08HX`pШب (8HP`pxȩة(8@P`hxȪت(0@PXhxȫЫ @HXhpЬ 08HX`pЭح (8HP`pxȮخ(8@P`hxȯد (0@PXhxȠР 0@HXhpС 08X`pТآ (8HP`pxȣ8@P`hxȤؤ(0PXxȥХ 0@HXhpЦ 08HX`pЧا (8HP`pxȨب(8@P`hxȩة(0@PXxȪЪ 0@HXhpЫ  (08@HPX`hpxȮЮخ (00X`xؠ 8@Hxء8@X`h X`xأ 8@xؤ8@X`ȥ(X` Hxا8@hȨ(X` xت8@X` xح8@X`@ xؠ8@Hhȡ(X`hȢ (Hxأ8@hȤ(X` Hxئ8@X` xة8@X` xج8@X` xدP8@X` xآ8@X` xإ8@X` xب8@ (X`xت 8@Hxث8@X` X`x (0HP(0px`LPX`xȠР08@X` 8@ `hpУأHPФ0H`xإh@HXxȨ (8Xxȩة08HhЪت08HXhȫث08Hhج(8XhЭح (8XpxЮخ`ȯpp (@H`hȠؠ08HXhȡ8PXpxȢ8Xȣ (@H`hxФؤ(@H`hxХإ(8HXxȦ8Hxب8hȩ(XHxث8hЬجPXpxȭ8HhЮخ 0@P`pЯX 0@P`pР 0@P`pС 08@HPX`hpxȢТآ (H`hХإ08HhЦئ(8HHP@Hة (@XȪ8px (`Ȭ0X`ȭ(0h`hЯدd(@H`hȠ (@HXxȡء@x@Hȣ@pxȤؤHp(Pئ08Hhا08X`pШب (HPpxȩ08PXhȪتHPث (8@PXhpȬЬ (8HXpxȭ8PXpxЮخ(8xدhHȠ08Hhx0XȢ@HPXأ`ФؤPXȥ8HȦ(hpȧ08PXhȨب08Hhxȩ0`hت08PXpxȫ08PXhЬ08PXpxȭح (8XpxȮ (@H`hЯد(@H`hРؠ08Hhء08Hhآ(8H`hУأ(HhФؤ08HXhȥإ08PXpxȦ (8Xpxȧ (@H`hxШب08Hhȩ08PXpxȪ (@H`hȫث08PXhȬЬ @Hhpح08PXhxخ(@H`hxЯد(@H`hؠ08HhءȢ (@H`hУأ(@H`hؤ(@HXx08X`ئ (@HXhxЧا08HhȨ (@HXhxȩ (@HXxȪ (8HXpxȫ (@HXxЬج (HPpxȭ(H`hخ(0PXpȯ08HhX`ء 8@X`xآ (@H`hأ08PXhȤ08PXhȥ08PXpxȦ8PXpxȧ (8XpxȨ8PXpxȩ08PXpxȪ (@HXx(8HXhxȬج (@HXxȭ (@H`hxȮ (@H`hЯد  (@HXxȠ (8XpxСء08PXpxȢآ(@H`hأ (8HXpxȤ8PXpxȥ08PXpxЦئ (@H`hxЧا08PXpxШبXd (08@HPX`hpx (08@HثȮخ(8HXHXȠHXhxȩة(8HXhxȪت(8HXhxȫث(8HXhxȯد$(أ  (8HXhxȢآ(8HXhxȣأ(8HXhxȤؤ(8HXhxȥȫث(8HXhxȬج(8HXhxȭح(8HXhxȮخ(8HXhxȯȣУؠ(8HXhxȡء(8HXhXhxȤؤ(8HXhxȬج(8HXhxȭح(8HXhxȮخ(8@(8HXhxȣأ`PX`hp\ (08@HȢآ(8HXhxȣhxȥإ(8H0(8HXhxȦئ(8HXhxȧا(8HXhxȨبȭح(8HXhxȮخ(8HXhxȯد@(8HXhxȠؠ(8HXhxȡء(8HXhxȢآ(8HXhxȣأ(8HXhxȤؤ(8HXhxȥإ(8HXhxP( 0@P`p`جȭЭp0𥨧ȧ(8HX(8H(8HXh(8HxȦئ(8HXhxȧا(8HXhx(8HXhxȫث(8HXhxHPX`hpx (0X`hpxȠРؠ (0@HPxhpxȤФؤ (0@HPتhpx (0@HPt (08(8H(8HXhxȫث(8HXhxȬ8HXhxȯدPhxȠؠ(8HXhxȡء(8HXhxP<hxȡXh(08@H8@HP`hpx`X`hȡء(8HXhxȢآ(8HXhxȣأ(8HXhxȤؤ(8HXhxȥإ(8HXhxȭح(8HXhxȮخ(8HXhxȯدpX(8HXhxȠؠ(8HXhxȡء (084 (HPxب8hpȩЩ$Ъت`hpx8@H `hpx8`hpxxX (d(8HXhxȭح(8HXhxȮخ(8HXhxȯد(8HXhxȠؠ(8HXhxȡء(8HXhxȢآ(8HXhxȣأ(8HXhxhxȮخ(8HXhxȯد(8HXhxȠؠ(8HXhxȡء(8HXhxȢآ(8HXhxȣأ(8HXhxȤؤ(8HXhxȥإȥإ(8HXhxȦئ(8H(8HXhxȪت(8HXhxȫث(8HXhxL(8HXhxȮخ(8HXhxȯد l(8HXhxȠؠ蠘ȥإ(8HXhxȦئ(8HXhx0l 8@`hا(0PXpx (8@PXhpȯЯ@(0@HX`ȣ裠ȦЦئ (08@HPX`hpxȧЧا(8HXhxȬج(8HXhxȭح(8HXhxȮخ(8HXhxȯدPȥإ(8HXhxȦئ(8HXhxȧا(8HXhxȨب(8HXhxȩة`0hpȨШ(0@Hp@ (0PX` @HPpxxȡء(8HXhxȢآ(8HXhxȣأ(8HXhxȤؤ(8HXhxȥإ(8HXhȮخ(8HXhxȯد(8HXhxȠؠ(8HXhxȡء(8HXhxȢآ(8HXhxȣأ|(8HXhxȡء(8(8HXhxȤؤ褰ȨШب (08@HPX((8HXhxȯد(8HXhxȠؠ(8HXhx(8HXhxȥإ(8HXhxȦئ(8HXhxȧا(8HXhxD(8HXhxȮخ(8HXhxȯدȢآ(8HXhxȣأ裈(8ȧXhxȨب(8HXhxȩة(8HXhx(8HXhxȮخ(8HXhxȯد (8HXhx H`hp0(8HXhxȦئ(8H(8HXhxȩة(8HXhxȪت(8HXhxد@(8(8HXhxȧا(8HXhxȨب(8HXhxȩة(8HXhxȯدPT(8HXhxȠؠ(8HXhxhxȨب`, Ȥؤحȯp@`xЪ (08@HPX`hpxvibe.d-0.8.2/lib/win-amd64/libeay32.lib000066400000000000000000030375301324361747700172770ustar00rootroot00000000000000! / 1485441930 0 193091 ` D| V VNN66``::ZZ>>~~ddJJ44zzZZ::ttXXHH44""ppPP,,  xxTT00vvPP 6 6         x x   X X   @ @  **  hhTTBB**  ||\\>>**  zzVV>>""rrVV8800      !d!d!!"B"B""######$^$^$$%8%8%%&&&&&&'h'h''(P(P(()))4)4* * **+++x+x++,d,d,,-N-N--.4.4..//////0^0^001F1F112(2(223333334d4d445V5V556*6*66667l7l778H8H88999999:f:f::;@;@;;<<<<<<=f=f==>B>B>>? ? ????@f@f@@ABABAABBBBCCCnCnCCDDDDDDE$E$EEEEFlFlFFGFGFGGHHHHHHIbIbIIJBJBJJKKKKL L LLLLMdMdMMNJNJNNO0O0OOP P PrPrPPQFQFQQRRRRRRSTSTSST8T8TTUUUUUUVlVlVVWJWJWWX2X2XXYYYYZZZjZjZZ[>[>[[\\\\\\]`]`]]^4^4^^___r_r__`F`F``a,a,aaaabhbhbbcJcJccd*d*dde e eteteefVfVffg,g,gghhhjhjhhiFiFiijjjjjjkXkXkkl4l4llmmmrmrmmnHnHnnoooooopXpXq0q0ppqqrrrhrhrrs8s8sstttntnttuBuBuuvvv|v|vvwLwLwwxxxxxxyhyhyyzBzBzz{{{{{{|b|b||}L}L}}~(~(~~~~ff::  xx``BB..zzLL^^66ddDD$$~~^^>>ddFF""xxTT&&^^..jj::xxFFxxNN""||ddDD||RR00xxJJ  ddNN,,ppTT00  vvLLPP,,vvFFXX00pp@@LLff22ppJJòòĄĄXX,,ƚƚ  ttLLȼȼ&&ɎɎxx\\44̪̪||NNθθ**ϚϚ  ЄЄttbbPP@@ԴԴ44մմ,,֤֤""ממؚؚٚٚژژےے܎܎݊݊ނނjjRR@@6600  ^^LL..||``BB~~VV@@$$ffNN00  XX::bbVVDD00  ll\\TTFF44((llHHbb44nn X X   D D   0 0     n n   R R  ::nnPP22ffVVBB66pp^^HH**vvdd R R  !:!:!!""""###x#x##$^$^$$%:%:%%&&&&'''|'|''(h(h(()H)H))*.*.**++++,,,,---~-~--.t.t../Z/Z//0X0X001N1N112B2B223.3.334444445^5^556:6:667777778r8r889h9h99:T:T::;6;6;;<<<<<<=f=f==>`>`>>?`?`??@P@P@@ADADAAB<B<BBC2C2CCD"D"DDDDEpEpEEFXFXFFG@G@GGH$H$HHIIIzIzIIJTJTJJK2K2KKLLLzLzLLMRMRMMN2N2NNOOOOPPPjPjPPQ@Q@QQRRR|R|RRSVSVSST4T4TTU U UzUzUUVRVRVVW4W4WWXXXXXXYfYfYYZDZDZZ[[[|[|[[\V\V\\]0]0]]^^^^^^_f_f__`H`H``a&a&aaaabjbjbbcBcBccdddzdzddeVeVeef8f8ffgggggghdhdhhiFiFiij j jjkkkjkjkkl>l>llmmm|m|mmnPnPnno>o>oop p ppppqdqdqqr6r6rrsssssstVtVttu$u$uuuuvfvfvvwDwDwwxxxxxxyhyhyyzBzBzz{{{{{{|R|R||}4}4}}~~~~~~TT&&ttTT((vvXX<<xx``NN00ttPP66  ff@@jjRR22ff<<xxbbLL22xxZZDD..``::  ~~ddJJ**ppHH,,  zzbbTT44VV,,44&&  ||^^22xx||rrNN22¢¢~~ZZ00ŦŦ~~^^44ȠȠ||VV44˪˪̌̌vv``LL::ЪЪ  ѐѐvv\\66ԬԬ՘՘քքjjddNN<<ڪڪ,,ۢۢ܀܀nnRR<<߬߬&&vvZZ@@&&ttbbVVRRDD00&&jjFF  ppVV>>**xxbbJJ$$vv\\DD..nnPP,,  ~~``FF22       h h   L L   2 2      rrZZBB&&  ~~hhNN22llTT<<&&xxZZBB((vv R R  !4!4!!""""###t#t##$X$X$$%@%@%%&*&*&&''''''(l(l(()Z)Z))*:*:**+*+*++,,,,- - ----.f.f../J/J//000000111111223>3>3344442h2h445f5f556@6@667777778l8l9D9D99:":"::::;p;p;;>>|>|>>?X?X??@8@8@@AAAAAABjBjBBCJCJCCD(D(DDEEEzEzEEFVFVFFG2G2GGH H HtHtHHIJIJIIJ(J(JJKKKrKrKKLJLJLLM.M.MMNNNNNNOlOlOOPVPVPPQDQDQQR*R*RRSSSSTTTvTvTTU^U^UUVNVNVVW4W4WWXXXXXXYhYhYYZTZTZZ[8[8[[\ \ \\]]]]]]^`^`^^_6_6__`"`"``aaavavaabVbVbbc>c>ccd d ddddejejeefHfHffg*g*ggh h hhhhililiijTjTjjk4k4kkllllllmjmjmmnRnRnno:o:oop(p(ppqqqqrrrvrvrrsdsdsst\t\ttu@u@uuv"v"vvw w w~w~wwxhxhxxyFyFyyz(z(zz{ { {x{x{{|T|T||}.}.}}~~~~~~ff@@nnVV44~~ZZ66^^::jjRR00  zzVV22llFF00nnXX<<""  ~~\\66  vvLLbbBB    llJJ""XX**~~TT((^^00rrFFff<<~~TT""ZZ<<$$hhFF""  ^^HH00ttNN**ddDDøø,,ĞĞ~~XX44ǢǢȆȆjjHHʶʶ&&˔˔ttPP;;**ΘΘ  zzXX22ѢѢ~~FFӮӮԀԀJJղղքքNN׶׶؈؈ppTTھھ**ۖۖjjHHݸݸ&&ގގffHH88vv\\::""ttRR((llNN$$nnDDZZ22xxJJZZ..ppllVV44||^^>>   r r   V V   @ @   6 6         f f   L L   4 4       x x T T : : " "     p p   R R   8 8         f f   @ @         n n   T T   8 8         l l   \ \   F F   6 6   . .   , ,     !n !n ! ! "V "V " " #4 #4 # # $ $ $ $ $ $ %b %b % % &< &< & & ' ' ' ' ' ' (j (j ( ( )H )H ) ) *2 *2 * * + + + + , , ,x ,x , , -X -X - - .8 .8 . . / / / / / / 0t 0t 0 0 1R 1R 1 1 2: 2: 2 2 3" 3" 3 3 3 3 4| 4| 4 4 5j 5j 5 5 6D 6D 6 6 7" 7" 7 7 8 8 8v 8v 8 8 9P 9P 9 9 :: :: : : ; ; ; ; ; ; " >" > > > > ?d ?d ? ? @8 @8 @ @ A$ A$ A A A A Bf Bf B B C< C< C C D D D D D D EZ EZ E E F6 F6 F F G G G| G| G G HT HT H H I* I* I I J J J J J J Kb Kb K K L8 L8 L L M M M M M M NZ NZ N N O@ O@ O O P& P& P P Q Q Q Q Q Q R` R` R R SH SH S S T. T. T T U U U U U U Vf Vf V V WF WF W W X X X X Y Y Y Y Y Y Zn Zn Z Z [Z [Z [ [ \L \L \ \ ]: ]: ] ] ^" ^" ^ ^ _ _ _ _ _ _ `n `n ` ` a\ a\ a a bD bD b b c c c c c c dp dp d d eT eT e e f> f> f f g. g. h h h h g g h h iz iz i i jZ jZ j j kD kD k k l" l" l l m m mx mx m m n\ n\ n n o@ o@ o o p& p& p p q q q q r r rv rv r r sh sh s s t` t` t t u u v8 v8 uJ uJ v v w8 w8 w w x x x x y y y y y y zn zn z z {\ {\ { { |D |D | | }. }. } } ~ ~ ~v ~v ~ ~ X X   : :   l l L L . . " "   p p P P 0 0 x x ` ` 2 2     t t H H , , x x R R : :   n n J J . . v v V V : :   h h F F , ,   n n ` ` N N 8 8   h h V V < < $ $   v v j j P P . .   v v N N * *   p p R R ( ( r r d d H H   j j H H 0 0   x x ` ` < <     v v N N * * ~ ~ ` ` 8 8 Ī Ī   Ŋ Ŋ t t X X : : Ȫ Ȫ & & ɠ ɠ   ʌ ʌ h h 8 8 ̠ ̠ p p D D ΰ ΰ " " ώ ώ f f B B Ѫ Ѫ   Ҏ Ҏ f f D D Ԯ Ԯ   Ն Ն ` ` , , ז ז l l J J ٸ ٸ ( ( ږ ږ   r r T T 4 4 ݦ ݦ   ކ ކ b b < < x x ^ ^ > >   ~ ~ X X N N B B 6 6       j j F F " "   t t V V 2 2   v v F F 2 2   b b > > l l < <   v v J J   \ \ , , l l : :   ~ ~   L L         h h   > >         Z Z   > >     z z b b : :     v v   & &     b b   B B         j j   8 8         r r   T T   > >   , ,     z z   \ \   T T   @ @   . .         l l !N !N ! ! "6 "6 " " # # # # $ $ $z $z $ $ %T %T % % &, &, & & ' ' 'v 'v ' ' (V (V ( ( )B )B ) ) *$ *$ * * + + +t +t + + ,V ,V , , -, -, - - . . . . . . /b /b / / 0R 0R 0 0 16 16 1 1 2 2 2 2 3 3 3r 3r 3 3 4\ 4\ 4 4 5X 5X 5 5 6J 6J 6 6 7< 7< 7 7 84 84 8 8 9 9 9 9 9 9 :j :j : : ;L ;L ; ; <& <& < < = = = = = = >l >l > > ?N ?N ? ? @4 @4 @ @ A A A A A A Bh Bh B B CP CP C C D@ D@ D D E6 E6 E E F F F F G G G G G G Hn Hn H H IR IR I I J6 J6 J J K K K K L L L L L L Mp Mp M M NT NT N N O> O> O O P P P P Q Q Qr Qr Q Q RN RN R R S, S, S S T T Th Th T T UJ UJ U U V, V, V V W W W~ W~ W W Xb Xb X X Y6 Y6 Y Y Z Z Z Z Z Z [l [l [ [ \D \D \ \ ], ], ] ] ^ ^ ^~ ^~ ^ ^ _b _b _ _ `@ `@ ` ` a a a a b b bt bt b b cZ cZ c c dJ dJ d d e. e. e e f f f f g g gv gv g g hL hL h h i i i i j j jl jl j j kF kF k k l l l l l l mV mV m m n6 n6 n n o o o o o o pr pr p p qT qT q q r8 r8 r r s s s s t t tp tp t t uN uN u u v( v( v v w w wr wr w w xR xR x x y4 y4 y y z z z z { { {v {v { { |^ |^ | | }@ }@ } } ~" ~" ~ ~   v v   X X > >   ` ` : :   ^ ^ D D 8 8 " " h h N N 6 6   h h D D   h h L L 4 4   ^ ^ 6 6   p p ` ` F F * * j j F F 6 6   t t P P . . " "   ~ ~ l l L L < < v v d d @ @ n n f f T T < < $ $ n n ^ ^ > >   j j Z Z J J & & l l J J * *     ^ ^ ® ® @ @ " " Î Î j j L L ž ž . . Ƣ Ƣ   nj nj   x x ^ ^ < < ʪ ʪ   ˊ ˊ   z z h h Z Z : : Ϥ Ϥ   Є Є f f R R B B Ӹ Ӹ * * Ԕ Ԕ j j J J 6 6 ׮ ׮ ، ، j j P P 8 8 ۦ ۦ   ܈ ܈   | | r r V V B B * * r r b b Z Z T T D D 2 2 & &     v v d d P P > > , ,     l l P P 2 2   t t ` ` N N 4 4   f f J J . .   z z N N D D : :   " "             v v   ^ ^   R R   F F   > > 2 2 , ,   ` `   < <   & &     p p   L L   ( (     | |   P P   0 0     n n   X X   2 2         l l   ` `   T T   < <         t t !R !R ! ! "2 "2 " " # # # # $ $ $t $t $ $ %X %X % % &D &D & & '0 '0 ' ' ( ( (r (r ( ( )Z )Z ) ) *0 *0 * * + + + + , , ,~ ,~ , , -v -v - - .d .d . . /b /b / / 0D 0D 0 0 1 1 1 1 1 1 2j 2j 2 2 3J 3J 3 3 4* 4* 4 4 5 5 5 5 5 5 6V 6V 6 6 74 74 7 7 8 8 8 8 9 9 9| 9| 9 9 :V :V : : ;2 ;2 ; ; < < < < < < =j =j = = >V >V > > ?< ?< ? ? @ @ @ @ A A Ar Ar A A BN BN B B C6 C6 C C D D D D D D El El E E FZ FZ F F GL GL G G H2 H2 H H I" I" I I J J J J K K K K Ll Ll K K L L MR MR M M N@ N@ N N O2 O2 O O P P P P Q Q Q Q Q Q Rv Rv R R Sd Sd S S TR TR T T UH UH U U V: V: V V W W W W X X Xn Xn X X YJ YJ Y Y Z$ Z$ Z Z Z Z [d [d [ [ \@ \@ \ \ ] ] ] ] ] ] ^Z ^Z ^ ^ _0 _0 _ _ ` ` ` ` ` ` a` a` a a b< b< b b c c c c c c dX dX d d e. e. e e f f fl fl f f gL gL g g h$ h$ h h i i iz iz i i jZ jZ j j kD kD k k l" l" l l l l m m mp mp nV nV n n o4 o4 o o p p p~ p~ p p qZ qZ q q r> r> r r s$ s$ s s t t tz tz t t u\ u\ u u vF vF v v w, w, w w x x xr xr x x yP yP y y z* z* z z { { { { { { |` |` | | }< }< } } ~ ~ ~ ~ ~ ~ ^ ^   : :   h h D D * * | | \ \ < <   h h F F , , | | V V 4 4   \ \ < <   n n L L " " f f H H f f J J 6 6   d d N N > > " " l l X X . .   r r R R . .   f f B B   f f > > " " j j @ @   j j F F   ` ` @ @   b b D D " " f f D D ^ ^ < < $ $ h h H H º º ( ( Ö Ö   n n N N . . Ƣ Ƣ   DŽ DŽ d d N N ɾ ɾ , , ʘ ʘ   z z ` ` > > ͬ ͬ   Έ Έ j j J J о о 0 0 ќ ќ   ҆ ҆ p p V V 0 0 բ բ x x X X 6 6 ئ ئ   ٌ ٌ f f F F ۰ ۰   ܈ ܈ f f F F ޸ ޸ $ $ ߔ ߔ   p p R R 8 8   f f D D & &   r r N N 6 6   ` ` @ @   f f D D & &   z z R R * * r r N N " " t t ^ ^ < <   r r V V D D 2 2   ~ ~ \ \   8 8   " "     b b   > >         p p   P P   , ,   z z Z Z , , ~ ~ Z Z   2 2     v v   T T   6 6   t t     R R   , ,     r r   P P . .       ~ ~   X X   2 2     | |   P P   $ $     r r   X X !: !: " " ! ! " " " " #h #h # # $@ $@ $ $ % % % % % % &f &f & & '6 '6 ' ' ( ( (h (h ( ( )D )D ) ) *, *, * * + + +f +f + + ,8 ,8 , , - - -t -t - - .F .F . . / / / / / / 0\ 0\ 0 0 1. 1. 1 1 2 2 2| 2| 2 2 3h 3h 3 3 4J 4J 4 4 5 5 5 5 5 5 6R 6R 6 6 7 7 7 7 7 7 8V 8V 8 8 9$ 9$ 9 9 9 9 :X :X : : ;* ;* ; ; ; ; <^ <^ < < =* =* = = >v >v > > > > =B =__IMPORT_DESCRIPTOR_LIBEAY32__NULL_IMPORT_DESCRIPTORLIBEAY32_NULL_THUNK_DATASSLeay__imp_SSLeayACCESS_DESCRIPTION_free__imp_ACCESS_DESCRIPTION_freeACCESS_DESCRIPTION_it__imp_ACCESS_DESCRIPTION_itACCESS_DESCRIPTION_new__imp_ACCESS_DESCRIPTION_newAES_bi_ige_encrypt__imp_AES_bi_ige_encryptAES_cbc_encrypt__imp_AES_cbc_encryptAES_cfb128_encrypt__imp_AES_cfb128_encryptAES_cfb1_encrypt__imp_AES_cfb1_encryptAES_cfb8_encrypt__imp_AES_cfb8_encryptAES_ctr128_encrypt__imp_AES_ctr128_encryptAES_decrypt__imp_AES_decryptAES_ecb_encrypt__imp_AES_ecb_encryptAES_encrypt__imp_AES_encryptAES_ige_encrypt__imp_AES_ige_encryptAES_ofb128_encrypt__imp_AES_ofb128_encryptAES_options__imp_AES_optionsAES_set_decrypt_key__imp_AES_set_decrypt_keyAES_set_encrypt_key__imp_AES_set_encrypt_keyAES_unwrap_key__imp_AES_unwrap_keyAES_wrap_key__imp_AES_wrap_keyASN1_ANY_it__imp_ASN1_ANY_itASN1_BIT_STRING_check__imp_ASN1_BIT_STRING_checkASN1_BIT_STRING_free__imp_ASN1_BIT_STRING_freeASN1_BIT_STRING_get_bit__imp_ASN1_BIT_STRING_get_bitASN1_BIT_STRING_it__imp_ASN1_BIT_STRING_itASN1_BIT_STRING_name_print__imp_ASN1_BIT_STRING_name_printASN1_BIT_STRING_new__imp_ASN1_BIT_STRING_newASN1_BIT_STRING_num_asc__imp_ASN1_BIT_STRING_num_ascASN1_BIT_STRING_set__imp_ASN1_BIT_STRING_setASN1_BIT_STRING_set_asc__imp_ASN1_BIT_STRING_set_ascASN1_BIT_STRING_set_bit__imp_ASN1_BIT_STRING_set_bitASN1_BMPSTRING_free__imp_ASN1_BMPSTRING_freeASN1_BMPSTRING_it__imp_ASN1_BMPSTRING_itASN1_BMPSTRING_new__imp_ASN1_BMPSTRING_newASN1_BOOLEAN_it__imp_ASN1_BOOLEAN_itASN1_ENUMERATED_free__imp_ASN1_ENUMERATED_freeASN1_ENUMERATED_get__imp_ASN1_ENUMERATED_getASN1_ENUMERATED_it__imp_ASN1_ENUMERATED_itASN1_ENUMERATED_new__imp_ASN1_ENUMERATED_newASN1_ENUMERATED_set__imp_ASN1_ENUMERATED_setASN1_ENUMERATED_to_BN__imp_ASN1_ENUMERATED_to_BNASN1_FBOOLEAN_it__imp_ASN1_FBOOLEAN_itASN1_GENERALIZEDTIME_adj__imp_ASN1_GENERALIZEDTIME_adjASN1_GENERALIZEDTIME_check__imp_ASN1_GENERALIZEDTIME_checkASN1_GENERALIZEDTIME_free__imp_ASN1_GENERALIZEDTIME_freeASN1_GENERALIZEDTIME_it__imp_ASN1_GENERALIZEDTIME_itASN1_GENERALIZEDTIME_new__imp_ASN1_GENERALIZEDTIME_newASN1_GENERALIZEDTIME_print__imp_ASN1_GENERALIZEDTIME_printASN1_GENERALIZEDTIME_set__imp_ASN1_GENERALIZEDTIME_setASN1_GENERALIZEDTIME_set_string__imp_ASN1_GENERALIZEDTIME_set_stringASN1_GENERALSTRING_free__imp_ASN1_GENERALSTRING_freeASN1_GENERALSTRING_it__imp_ASN1_GENERALSTRING_itASN1_GENERALSTRING_new__imp_ASN1_GENERALSTRING_newASN1_IA5STRING_free__imp_ASN1_IA5STRING_freeASN1_IA5STRING_it__imp_ASN1_IA5STRING_itASN1_IA5STRING_new__imp_ASN1_IA5STRING_newASN1_INTEGER_cmp__imp_ASN1_INTEGER_cmpASN1_INTEGER_dup__imp_ASN1_INTEGER_dupASN1_INTEGER_free__imp_ASN1_INTEGER_freeASN1_INTEGER_get__imp_ASN1_INTEGER_getASN1_INTEGER_it__imp_ASN1_INTEGER_itASN1_INTEGER_new__imp_ASN1_INTEGER_newASN1_INTEGER_set__imp_ASN1_INTEGER_setASN1_INTEGER_to_BN__imp_ASN1_INTEGER_to_BNASN1_NULL_free__imp_ASN1_NULL_freeASN1_NULL_it__imp_ASN1_NULL_itASN1_NULL_new__imp_ASN1_NULL_newASN1_OBJECT_create__imp_ASN1_OBJECT_createASN1_OBJECT_free__imp_ASN1_OBJECT_freeASN1_OBJECT_it__imp_ASN1_OBJECT_itASN1_OBJECT_new__imp_ASN1_OBJECT_newASN1_OCTET_STRING_NDEF_it__imp_ASN1_OCTET_STRING_NDEF_itASN1_OCTET_STRING_cmp__imp_ASN1_OCTET_STRING_cmpASN1_OCTET_STRING_dup__imp_ASN1_OCTET_STRING_dupASN1_OCTET_STRING_free__imp_ASN1_OCTET_STRING_freeASN1_OCTET_STRING_it__imp_ASN1_OCTET_STRING_itASN1_OCTET_STRING_new__imp_ASN1_OCTET_STRING_newASN1_OCTET_STRING_set__imp_ASN1_OCTET_STRING_setASN1_PCTX_free__imp_ASN1_PCTX_freeASN1_PCTX_get_cert_flags__imp_ASN1_PCTX_get_cert_flagsASN1_PCTX_get_flags__imp_ASN1_PCTX_get_flagsASN1_PCTX_get_nm_flags__imp_ASN1_PCTX_get_nm_flagsASN1_PCTX_get_oid_flags__imp_ASN1_PCTX_get_oid_flagsASN1_PCTX_get_str_flags__imp_ASN1_PCTX_get_str_flagsASN1_PCTX_new__imp_ASN1_PCTX_newASN1_PCTX_set_cert_flags__imp_ASN1_PCTX_set_cert_flagsASN1_PCTX_set_flags__imp_ASN1_PCTX_set_flagsASN1_PCTX_set_nm_flags__imp_ASN1_PCTX_set_nm_flagsASN1_PCTX_set_oid_flags__imp_ASN1_PCTX_set_oid_flagsASN1_PCTX_set_str_flags__imp_ASN1_PCTX_set_str_flagsASN1_PRINTABLESTRING_free__imp_ASN1_PRINTABLESTRING_freeASN1_PRINTABLESTRING_it__imp_ASN1_PRINTABLESTRING_itASN1_PRINTABLESTRING_new__imp_ASN1_PRINTABLESTRING_newASN1_PRINTABLE_free__imp_ASN1_PRINTABLE_freeASN1_PRINTABLE_it__imp_ASN1_PRINTABLE_itASN1_PRINTABLE_new__imp_ASN1_PRINTABLE_newASN1_PRINTABLE_type__imp_ASN1_PRINTABLE_typeASN1_SEQUENCE_ANY_it__imp_ASN1_SEQUENCE_ANY_itASN1_SEQUENCE_it__imp_ASN1_SEQUENCE_itASN1_SET_ANY_it__imp_ASN1_SET_ANY_itASN1_STRING_TABLE_add__imp_ASN1_STRING_TABLE_addASN1_STRING_TABLE_cleanup__imp_ASN1_STRING_TABLE_cleanupASN1_STRING_TABLE_get__imp_ASN1_STRING_TABLE_getASN1_STRING_clear_free__imp_ASN1_STRING_clear_freeASN1_STRING_cmp__imp_ASN1_STRING_cmpASN1_STRING_copy__imp_ASN1_STRING_copyASN1_STRING_data__imp_ASN1_STRING_dataASN1_STRING_dup__imp_ASN1_STRING_dupASN1_STRING_free__imp_ASN1_STRING_freeASN1_STRING_get_default_mask__imp_ASN1_STRING_get_default_maskASN1_STRING_length__imp_ASN1_STRING_lengthASN1_STRING_length_set__imp_ASN1_STRING_length_setASN1_STRING_new__imp_ASN1_STRING_newASN1_STRING_print__imp_ASN1_STRING_printASN1_STRING_print_ex__imp_ASN1_STRING_print_exASN1_STRING_print_ex_fp__imp_ASN1_STRING_print_ex_fpASN1_STRING_set0__imp_ASN1_STRING_set0ASN1_STRING_set__imp_ASN1_STRING_setASN1_STRING_set_by_NID__imp_ASN1_STRING_set_by_NIDASN1_STRING_set_default_mask__imp_ASN1_STRING_set_default_maskASN1_STRING_set_default_mask_asc__imp_ASN1_STRING_set_default_mask_ascASN1_STRING_to_UTF8__imp_ASN1_STRING_to_UTF8ASN1_STRING_type__imp_ASN1_STRING_typeASN1_STRING_type_new__imp_ASN1_STRING_type_newASN1_T61STRING_free__imp_ASN1_T61STRING_freeASN1_T61STRING_it__imp_ASN1_T61STRING_itASN1_T61STRING_new__imp_ASN1_T61STRING_newASN1_TBOOLEAN_it__imp_ASN1_TBOOLEAN_itASN1_TIME_adj__imp_ASN1_TIME_adjASN1_TIME_check__imp_ASN1_TIME_checkASN1_TIME_diff__imp_ASN1_TIME_diffASN1_TIME_free__imp_ASN1_TIME_freeASN1_TIME_it__imp_ASN1_TIME_itASN1_TIME_new__imp_ASN1_TIME_newASN1_TIME_print__imp_ASN1_TIME_printASN1_TIME_set__imp_ASN1_TIME_setASN1_TIME_set_string__imp_ASN1_TIME_set_stringASN1_TIME_to_generalizedtime__imp_ASN1_TIME_to_generalizedtimeASN1_TYPE_cmp__imp_ASN1_TYPE_cmpASN1_TYPE_free__imp_ASN1_TYPE_freeASN1_TYPE_get__imp_ASN1_TYPE_getASN1_TYPE_get_int_octetstring__imp_ASN1_TYPE_get_int_octetstringASN1_TYPE_get_octetstring__imp_ASN1_TYPE_get_octetstringASN1_TYPE_new__imp_ASN1_TYPE_newASN1_TYPE_set1__imp_ASN1_TYPE_set1ASN1_TYPE_set__imp_ASN1_TYPE_setASN1_TYPE_set_int_octetstring__imp_ASN1_TYPE_set_int_octetstringASN1_TYPE_set_octetstring__imp_ASN1_TYPE_set_octetstringASN1_UNIVERSALSTRING_free__imp_ASN1_UNIVERSALSTRING_freeASN1_UNIVERSALSTRING_it__imp_ASN1_UNIVERSALSTRING_itASN1_UNIVERSALSTRING_new__imp_ASN1_UNIVERSALSTRING_newASN1_UNIVERSALSTRING_to_string__imp_ASN1_UNIVERSALSTRING_to_stringASN1_UTCTIME_adj__imp_ASN1_UTCTIME_adjASN1_UTCTIME_check__imp_ASN1_UTCTIME_checkASN1_UTCTIME_cmp_time_t__imp_ASN1_UTCTIME_cmp_time_tASN1_UTCTIME_free__imp_ASN1_UTCTIME_freeASN1_UTCTIME_it__imp_ASN1_UTCTIME_itASN1_UTCTIME_new__imp_ASN1_UTCTIME_newASN1_UTCTIME_print__imp_ASN1_UTCTIME_printASN1_UTCTIME_set__imp_ASN1_UTCTIME_setASN1_UTCTIME_set_string__imp_ASN1_UTCTIME_set_stringASN1_UTF8STRING_free__imp_ASN1_UTF8STRING_freeASN1_UTF8STRING_it__imp_ASN1_UTF8STRING_itASN1_UTF8STRING_new__imp_ASN1_UTF8STRING_newASN1_VISIBLESTRING_free__imp_ASN1_VISIBLESTRING_freeASN1_VISIBLESTRING_it__imp_ASN1_VISIBLESTRING_itASN1_VISIBLESTRING_new__imp_ASN1_VISIBLESTRING_newASN1_add_oid_module__imp_ASN1_add_oid_moduleASN1_bn_print__imp_ASN1_bn_printASN1_check_infinite_end__imp_ASN1_check_infinite_endASN1_const_check_infinite_end__imp_ASN1_const_check_infinite_endASN1_d2i_bio__imp_ASN1_d2i_bioASN1_d2i_fp__imp_ASN1_d2i_fpASN1_digest__imp_ASN1_digestASN1_dup__imp_ASN1_dupASN1_generate_nconf__imp_ASN1_generate_nconfASN1_generate_v3__imp_ASN1_generate_v3ASN1_get_object__imp_ASN1_get_objectASN1_i2d_bio__imp_ASN1_i2d_bioASN1_i2d_fp__imp_ASN1_i2d_fpASN1_item_d2i__imp_ASN1_item_d2iASN1_item_d2i_bio__imp_ASN1_item_d2i_bioASN1_item_d2i_fp__imp_ASN1_item_d2i_fpASN1_item_digest__imp_ASN1_item_digestASN1_item_dup__imp_ASN1_item_dupASN1_item_ex_d2i__imp_ASN1_item_ex_d2iASN1_item_ex_free__imp_ASN1_item_ex_freeASN1_item_ex_i2d__imp_ASN1_item_ex_i2dASN1_item_ex_new__imp_ASN1_item_ex_newASN1_item_free__imp_ASN1_item_freeASN1_item_i2d__imp_ASN1_item_i2dASN1_item_i2d_bio__imp_ASN1_item_i2d_bioASN1_item_i2d_fp__imp_ASN1_item_i2d_fpASN1_item_ndef_i2d__imp_ASN1_item_ndef_i2dASN1_item_new__imp_ASN1_item_newASN1_item_pack__imp_ASN1_item_packASN1_item_print__imp_ASN1_item_printASN1_item_sign__imp_ASN1_item_signASN1_item_sign_ctx__imp_ASN1_item_sign_ctxASN1_item_unpack__imp_ASN1_item_unpackASN1_item_verify__imp_ASN1_item_verifyASN1_mbstring_copy__imp_ASN1_mbstring_copyASN1_mbstring_ncopy__imp_ASN1_mbstring_ncopyASN1_object_size__imp_ASN1_object_sizeASN1_pack_string__imp_ASN1_pack_stringASN1_parse__imp_ASN1_parseASN1_parse_dump__imp_ASN1_parse_dumpASN1_primitive_free__imp_ASN1_primitive_freeASN1_primitive_new__imp_ASN1_primitive_newASN1_put_eoc__imp_ASN1_put_eocASN1_put_object__imp_ASN1_put_objectASN1_seq_pack__imp_ASN1_seq_packASN1_seq_unpack__imp_ASN1_seq_unpackASN1_sign__imp_ASN1_signASN1_tag2bit__imp_ASN1_tag2bitASN1_tag2str__imp_ASN1_tag2strASN1_template_d2i__imp_ASN1_template_d2iASN1_template_free__imp_ASN1_template_freeASN1_template_i2d__imp_ASN1_template_i2dASN1_template_new__imp_ASN1_template_newASN1_unpack_string__imp_ASN1_unpack_stringASN1_verify__imp_ASN1_verifyAUTHORITY_INFO_ACCESS_free__imp_AUTHORITY_INFO_ACCESS_freeAUTHORITY_INFO_ACCESS_it__imp_AUTHORITY_INFO_ACCESS_itAUTHORITY_INFO_ACCESS_new__imp_AUTHORITY_INFO_ACCESS_newAUTHORITY_KEYID_free__imp_AUTHORITY_KEYID_freeAUTHORITY_KEYID_it__imp_AUTHORITY_KEYID_itAUTHORITY_KEYID_new__imp_AUTHORITY_KEYID_newBASIC_CONSTRAINTS_free__imp_BASIC_CONSTRAINTS_freeBASIC_CONSTRAINTS_it__imp_BASIC_CONSTRAINTS_itBASIC_CONSTRAINTS_new__imp_BASIC_CONSTRAINTS_newBF_cbc_encrypt__imp_BF_cbc_encryptBF_cfb64_encrypt__imp_BF_cfb64_encryptBF_decrypt__imp_BF_decryptBF_ecb_encrypt__imp_BF_ecb_encryptBF_encrypt__imp_BF_encryptBF_ofb64_encrypt__imp_BF_ofb64_encryptBF_options__imp_BF_optionsBF_set_key__imp_BF_set_keyBIGNUM_it__imp_BIGNUM_itBIO_accept__imp_BIO_acceptBIO_asn1_get_prefix__imp_BIO_asn1_get_prefixBIO_asn1_get_suffix__imp_BIO_asn1_get_suffixBIO_asn1_set_prefix__imp_BIO_asn1_set_prefixBIO_asn1_set_suffix__imp_BIO_asn1_set_suffixBIO_callback_ctrl__imp_BIO_callback_ctrlBIO_clear_flags__imp_BIO_clear_flagsBIO_copy_next_retry__imp_BIO_copy_next_retryBIO_ctrl__imp_BIO_ctrlBIO_ctrl_get_read_request__imp_BIO_ctrl_get_read_requestBIO_ctrl_get_write_guarantee__imp_BIO_ctrl_get_write_guaranteeBIO_ctrl_pending__imp_BIO_ctrl_pendingBIO_ctrl_reset_read_request__imp_BIO_ctrl_reset_read_requestBIO_ctrl_wpending__imp_BIO_ctrl_wpendingBIO_debug_callback__imp_BIO_debug_callbackBIO_dgram_non_fatal_error__imp_BIO_dgram_non_fatal_errorBIO_dump__imp_BIO_dumpBIO_dump_cb__imp_BIO_dump_cbBIO_dump_fp__imp_BIO_dump_fpBIO_dump_indent__imp_BIO_dump_indentBIO_dump_indent_cb__imp_BIO_dump_indent_cbBIO_dump_indent_fp__imp_BIO_dump_indent_fpBIO_dup_chain__imp_BIO_dup_chainBIO_f_asn1__imp_BIO_f_asn1BIO_f_base64__imp_BIO_f_base64BIO_f_buffer__imp_BIO_f_bufferBIO_f_cipher__imp_BIO_f_cipherBIO_f_md__imp_BIO_f_mdBIO_f_nbio_test__imp_BIO_f_nbio_testBIO_f_null__imp_BIO_f_nullBIO_f_reliable__imp_BIO_f_reliableBIO_fd_non_fatal_error__imp_BIO_fd_non_fatal_errorBIO_fd_should_retry__imp_BIO_fd_should_retryBIO_find_type__imp_BIO_find_typeBIO_free__imp_BIO_freeBIO_free_all__imp_BIO_free_allBIO_get_accept_socket__imp_BIO_get_accept_socketBIO_get_callback__imp_BIO_get_callbackBIO_get_callback_arg__imp_BIO_get_callback_argBIO_get_ex_data__imp_BIO_get_ex_dataBIO_get_ex_new_index__imp_BIO_get_ex_new_indexBIO_get_host_ip__imp_BIO_get_host_ipBIO_get_port__imp_BIO_get_portBIO_get_retry_BIO__imp_BIO_get_retry_BIOBIO_get_retry_reason__imp_BIO_get_retry_reasonBIO_gethostbyname__imp_BIO_gethostbynameBIO_gets__imp_BIO_getsBIO_hex_string__imp_BIO_hex_stringBIO_indent__imp_BIO_indentBIO_int_ctrl__imp_BIO_int_ctrlBIO_method_name__imp_BIO_method_nameBIO_method_type__imp_BIO_method_typeBIO_new__imp_BIO_newBIO_new_CMS__imp_BIO_new_CMSBIO_new_NDEF__imp_BIO_new_NDEFBIO_new_PKCS7__imp_BIO_new_PKCS7BIO_new_accept__imp_BIO_new_acceptBIO_new_bio_pair__imp_BIO_new_bio_pairBIO_new_connect__imp_BIO_new_connectBIO_new_dgram__imp_BIO_new_dgramBIO_new_fd__imp_BIO_new_fdBIO_new_file__imp_BIO_new_fileBIO_new_fp__imp_BIO_new_fpBIO_new_mem_buf__imp_BIO_new_mem_bufBIO_new_socket__imp_BIO_new_socketBIO_next__imp_BIO_nextBIO_nread0__imp_BIO_nread0BIO_nread__imp_BIO_nreadBIO_number_read__imp_BIO_number_readBIO_number_written__imp_BIO_number_writtenBIO_nwrite0__imp_BIO_nwrite0BIO_nwrite__imp_BIO_nwriteBIO_pop__imp_BIO_popBIO_printf__imp_BIO_printfBIO_ptr_ctrl__imp_BIO_ptr_ctrlBIO_push__imp_BIO_pushBIO_puts__imp_BIO_putsBIO_read__imp_BIO_readBIO_s_accept__imp_BIO_s_acceptBIO_s_bio__imp_BIO_s_bioBIO_s_connect__imp_BIO_s_connectBIO_s_datagram__imp_BIO_s_datagramBIO_s_fd__imp_BIO_s_fdBIO_s_file__imp_BIO_s_fileBIO_s_mem__imp_BIO_s_memBIO_s_null__imp_BIO_s_nullBIO_s_socket__imp_BIO_s_socketBIO_set__imp_BIO_setBIO_set_callback__imp_BIO_set_callbackBIO_set_callback_arg__imp_BIO_set_callback_argBIO_set_cipher__imp_BIO_set_cipherBIO_set_ex_data__imp_BIO_set_ex_dataBIO_set_flags__imp_BIO_set_flagsBIO_set_tcp_ndelay__imp_BIO_set_tcp_ndelayBIO_snprintf__imp_BIO_snprintfBIO_sock_cleanup__imp_BIO_sock_cleanupBIO_sock_error__imp_BIO_sock_errorBIO_sock_init__imp_BIO_sock_initBIO_sock_non_fatal_error__imp_BIO_sock_non_fatal_errorBIO_sock_should_retry__imp_BIO_sock_should_retryBIO_socket_ioctl__imp_BIO_socket_ioctlBIO_socket_nbio__imp_BIO_socket_nbioBIO_test_flags__imp_BIO_test_flagsBIO_vfree__imp_BIO_vfreeBIO_vprintf__imp_BIO_vprintfBIO_vsnprintf__imp_BIO_vsnprintfBIO_write__imp_BIO_writeBN_BLINDING_convert__imp_BN_BLINDING_convertBN_BLINDING_convert_ex__imp_BN_BLINDING_convert_exBN_BLINDING_create_param__imp_BN_BLINDING_create_paramBN_BLINDING_free__imp_BN_BLINDING_freeBN_BLINDING_get_flags__imp_BN_BLINDING_get_flagsBN_BLINDING_get_thread_id__imp_BN_BLINDING_get_thread_idBN_BLINDING_invert__imp_BN_BLINDING_invertBN_BLINDING_invert_ex__imp_BN_BLINDING_invert_exBN_BLINDING_new__imp_BN_BLINDING_newBN_BLINDING_set_flags__imp_BN_BLINDING_set_flagsBN_BLINDING_set_thread_id__imp_BN_BLINDING_set_thread_idBN_BLINDING_thread_id__imp_BN_BLINDING_thread_idBN_BLINDING_update__imp_BN_BLINDING_updateBN_CTX_end__imp_BN_CTX_endBN_CTX_free__imp_BN_CTX_freeBN_CTX_get__imp_BN_CTX_getBN_CTX_init__imp_BN_CTX_initBN_CTX_new__imp_BN_CTX_newBN_CTX_start__imp_BN_CTX_startBN_GENCB_call__imp_BN_GENCB_callBN_GF2m_add__imp_BN_GF2m_addBN_GF2m_arr2poly__imp_BN_GF2m_arr2polyBN_GF2m_mod__imp_BN_GF2m_modBN_GF2m_mod_arr__imp_BN_GF2m_mod_arrBN_GF2m_mod_div__imp_BN_GF2m_mod_divBN_GF2m_mod_div_arr__imp_BN_GF2m_mod_div_arrBN_GF2m_mod_exp__imp_BN_GF2m_mod_expBN_GF2m_mod_exp_arr__imp_BN_GF2m_mod_exp_arrBN_GF2m_mod_inv__imp_BN_GF2m_mod_invBN_GF2m_mod_inv_arr__imp_BN_GF2m_mod_inv_arrBN_GF2m_mod_mul__imp_BN_GF2m_mod_mulBN_GF2m_mod_mul_arr__imp_BN_GF2m_mod_mul_arrBN_GF2m_mod_solve_quad__imp_BN_GF2m_mod_solve_quadBN_GF2m_mod_solve_quad_arr__imp_BN_GF2m_mod_solve_quad_arrBN_GF2m_mod_sqr__imp_BN_GF2m_mod_sqrBN_GF2m_mod_sqr_arr__imp_BN_GF2m_mod_sqr_arrBN_GF2m_mod_sqrt__imp_BN_GF2m_mod_sqrtBN_GF2m_mod_sqrt_arr__imp_BN_GF2m_mod_sqrt_arrBN_GF2m_poly2arr__imp_BN_GF2m_poly2arrBN_MONT_CTX_copy__imp_BN_MONT_CTX_copyBN_MONT_CTX_free__imp_BN_MONT_CTX_freeBN_MONT_CTX_init__imp_BN_MONT_CTX_initBN_MONT_CTX_new__imp_BN_MONT_CTX_newBN_MONT_CTX_set__imp_BN_MONT_CTX_setBN_MONT_CTX_set_locked__imp_BN_MONT_CTX_set_lockedBN_RECP_CTX_free__imp_BN_RECP_CTX_freeBN_RECP_CTX_init__imp_BN_RECP_CTX_initBN_RECP_CTX_new__imp_BN_RECP_CTX_newBN_RECP_CTX_set__imp_BN_RECP_CTX_setBN_X931_derive_prime_ex__imp_BN_X931_derive_prime_exBN_X931_generate_Xpq__imp_BN_X931_generate_XpqBN_X931_generate_prime_ex__imp_BN_X931_generate_prime_exBN_add__imp_BN_addBN_add_word__imp_BN_add_wordBN_asc2bn__imp_BN_asc2bnBN_bin2bn__imp_BN_bin2bnBN_bn2bin__imp_BN_bn2binBN_bn2dec__imp_BN_bn2decBN_bn2hex__imp_BN_bn2hexBN_bn2mpi__imp_BN_bn2mpiBN_bntest_rand__imp_BN_bntest_randBN_clear__imp_BN_clearBN_clear_bit__imp_BN_clear_bitBN_clear_free__imp_BN_clear_freeBN_cmp__imp_BN_cmpBN_consttime_swap__imp_BN_consttime_swapBN_copy__imp_BN_copyBN_dec2bn__imp_BN_dec2bnBN_div__imp_BN_divBN_div_recp__imp_BN_div_recpBN_div_word__imp_BN_div_wordBN_dup__imp_BN_dupBN_exp__imp_BN_expBN_free__imp_BN_freeBN_from_montgomery__imp_BN_from_montgomeryBN_gcd__imp_BN_gcdBN_generate_prime__imp_BN_generate_primeBN_generate_prime_ex__imp_BN_generate_prime_exBN_get0_nist_prime_192__imp_BN_get0_nist_prime_192BN_get0_nist_prime_224__imp_BN_get0_nist_prime_224BN_get0_nist_prime_256__imp_BN_get0_nist_prime_256BN_get0_nist_prime_384__imp_BN_get0_nist_prime_384BN_get0_nist_prime_521__imp_BN_get0_nist_prime_521BN_get_params__imp_BN_get_paramsBN_get_word__imp_BN_get_wordBN_hex2bn__imp_BN_hex2bnBN_init__imp_BN_initBN_is_bit_set__imp_BN_is_bit_setBN_is_prime__imp_BN_is_primeBN_is_prime_ex__imp_BN_is_prime_exBN_is_prime_fasttest__imp_BN_is_prime_fasttestBN_is_prime_fasttest_ex__imp_BN_is_prime_fasttest_exBN_kronecker__imp_BN_kroneckerBN_lshift1__imp_BN_lshift1BN_lshift__imp_BN_lshiftBN_mask_bits__imp_BN_mask_bitsBN_mod_add__imp_BN_mod_addBN_mod_add_quick__imp_BN_mod_add_quickBN_mod_exp2_mont__imp_BN_mod_exp2_montBN_mod_exp__imp_BN_mod_expBN_mod_exp_mont__imp_BN_mod_exp_montBN_mod_exp_mont_consttime__imp_BN_mod_exp_mont_consttimeBN_mod_exp_mont_word__imp_BN_mod_exp_mont_wordBN_mod_exp_recp__imp_BN_mod_exp_recpBN_mod_exp_simple__imp_BN_mod_exp_simpleBN_mod_inverse__imp_BN_mod_inverseBN_mod_lshift1__imp_BN_mod_lshift1BN_mod_lshift1_quick__imp_BN_mod_lshift1_quickBN_mod_lshift__imp_BN_mod_lshiftBN_mod_lshift_quick__imp_BN_mod_lshift_quickBN_mod_mul__imp_BN_mod_mulBN_mod_mul_montgomery__imp_BN_mod_mul_montgomeryBN_mod_mul_reciprocal__imp_BN_mod_mul_reciprocalBN_mod_sqr__imp_BN_mod_sqrBN_mod_sqrt__imp_BN_mod_sqrtBN_mod_sub__imp_BN_mod_subBN_mod_sub_quick__imp_BN_mod_sub_quickBN_mod_word__imp_BN_mod_wordBN_mpi2bn__imp_BN_mpi2bnBN_mul__imp_BN_mulBN_mul_word__imp_BN_mul_wordBN_new__imp_BN_newBN_nist_mod_192__imp_BN_nist_mod_192BN_nist_mod_224__imp_BN_nist_mod_224BN_nist_mod_256__imp_BN_nist_mod_256BN_nist_mod_384__imp_BN_nist_mod_384BN_nist_mod_521__imp_BN_nist_mod_521BN_nnmod__imp_BN_nnmodBN_num_bits__imp_BN_num_bitsBN_num_bits_word__imp_BN_num_bits_wordBN_options__imp_BN_optionsBN_print__imp_BN_printBN_print_fp__imp_BN_print_fpBN_pseudo_rand__imp_BN_pseudo_randBN_pseudo_rand_range__imp_BN_pseudo_rand_rangeBN_rand__imp_BN_randBN_rand_range__imp_BN_rand_rangeBN_reciprocal__imp_BN_reciprocalBN_rshift1__imp_BN_rshift1BN_rshift__imp_BN_rshiftBN_set_bit__imp_BN_set_bitBN_set_negative__imp_BN_set_negativeBN_set_params__imp_BN_set_paramsBN_set_word__imp_BN_set_wordBN_sqr__imp_BN_sqrBN_sub__imp_BN_subBN_sub_word__imp_BN_sub_wordBN_swap__imp_BN_swapBN_to_ASN1_ENUMERATED__imp_BN_to_ASN1_ENUMERATEDBN_to_ASN1_INTEGER__imp_BN_to_ASN1_INTEGERBN_uadd__imp_BN_uaddBN_ucmp__imp_BN_ucmpBN_usub__imp_BN_usubBN_value_one__imp_BN_value_oneBUF_MEM_free__imp_BUF_MEM_freeBUF_MEM_grow__imp_BUF_MEM_growBUF_MEM_grow_clean__imp_BUF_MEM_grow_cleanBUF_MEM_new__imp_BUF_MEM_newBUF_memdup__imp_BUF_memdupBUF_reverse__imp_BUF_reverseBUF_strdup__imp_BUF_strdupBUF_strlcat__imp_BUF_strlcatBUF_strlcpy__imp_BUF_strlcpyBUF_strndup__imp_BUF_strndupBUF_strnlen__imp_BUF_strnlenCAST_cbc_encrypt__imp_CAST_cbc_encryptCAST_cfb64_encrypt__imp_CAST_cfb64_encryptCAST_decrypt__imp_CAST_decryptCAST_ecb_encrypt__imp_CAST_ecb_encryptCAST_encrypt__imp_CAST_encryptCAST_ofb64_encrypt__imp_CAST_ofb64_encryptCAST_set_key__imp_CAST_set_keyCBIGNUM_it__imp_CBIGNUM_itCERTIFICATEPOLICIES_free__imp_CERTIFICATEPOLICIES_freeCERTIFICATEPOLICIES_it__imp_CERTIFICATEPOLICIES_itCERTIFICATEPOLICIES_new__imp_CERTIFICATEPOLICIES_newCMAC_CTX_cleanup__imp_CMAC_CTX_cleanupCMAC_CTX_copy__imp_CMAC_CTX_copyCMAC_CTX_free__imp_CMAC_CTX_freeCMAC_CTX_get0_cipher_ctx__imp_CMAC_CTX_get0_cipher_ctxCMAC_CTX_new__imp_CMAC_CTX_newCMAC_Final__imp_CMAC_FinalCMAC_Init__imp_CMAC_InitCMAC_Update__imp_CMAC_UpdateCMAC_resume__imp_CMAC_resumeCMS_ContentInfo_free__imp_CMS_ContentInfo_freeCMS_ContentInfo_it__imp_CMS_ContentInfo_itCMS_ContentInfo_new__imp_CMS_ContentInfo_newCMS_ContentInfo_print_ctx__imp_CMS_ContentInfo_print_ctxCMS_EncryptedData_decrypt__imp_CMS_EncryptedData_decryptCMS_EncryptedData_encrypt__imp_CMS_EncryptedData_encryptCMS_EncryptedData_set1_key__imp_CMS_EncryptedData_set1_keyCMS_EnvelopedData_create__imp_CMS_EnvelopedData_createCMS_ReceiptRequest_create0__imp_CMS_ReceiptRequest_create0CMS_ReceiptRequest_free__imp_CMS_ReceiptRequest_freeCMS_ReceiptRequest_get0_values__imp_CMS_ReceiptRequest_get0_valuesCMS_ReceiptRequest_it__imp_CMS_ReceiptRequest_itCMS_ReceiptRequest_new__imp_CMS_ReceiptRequest_newCMS_RecipientEncryptedKey_cert_cmp__imp_CMS_RecipientEncryptedKey_cert_cmpCMS_RecipientEncryptedKey_get0_id__imp_CMS_RecipientEncryptedKey_get0_idCMS_RecipientInfo_decrypt__imp_CMS_RecipientInfo_decryptCMS_RecipientInfo_encrypt__imp_CMS_RecipientInfo_encryptCMS_RecipientInfo_get0_pkey_ctx__imp_CMS_RecipientInfo_get0_pkey_ctxCMS_RecipientInfo_kari_decrypt__imp_CMS_RecipientInfo_kari_decryptCMS_RecipientInfo_kari_get0_alg__imp_CMS_RecipientInfo_kari_get0_algCMS_RecipientInfo_kari_get0_ctx__imp_CMS_RecipientInfo_kari_get0_ctxCMS_RecipientInfo_kari_get0_orig_id__imp_CMS_RecipientInfo_kari_get0_orig_idCMS_RecipientInfo_kari_get0_reks__imp_CMS_RecipientInfo_kari_get0_reksCMS_RecipientInfo_kari_orig_id_cmp__imp_CMS_RecipientInfo_kari_orig_id_cmpCMS_RecipientInfo_kari_set0_pkey__imp_CMS_RecipientInfo_kari_set0_pkeyCMS_RecipientInfo_kekri_get0_id__imp_CMS_RecipientInfo_kekri_get0_idCMS_RecipientInfo_kekri_id_cmp__imp_CMS_RecipientInfo_kekri_id_cmpCMS_RecipientInfo_ktri_cert_cmp__imp_CMS_RecipientInfo_ktri_cert_cmpCMS_RecipientInfo_ktri_get0_algs__imp_CMS_RecipientInfo_ktri_get0_algsCMS_RecipientInfo_ktri_get0_signer_id__imp_CMS_RecipientInfo_ktri_get0_signer_idCMS_RecipientInfo_set0_key__imp_CMS_RecipientInfo_set0_keyCMS_RecipientInfo_set0_password__imp_CMS_RecipientInfo_set0_passwordCMS_RecipientInfo_set0_pkey__imp_CMS_RecipientInfo_set0_pkeyCMS_RecipientInfo_type__imp_CMS_RecipientInfo_typeCMS_SharedInfo_encode__imp_CMS_SharedInfo_encodeCMS_SignedData_init__imp_CMS_SignedData_initCMS_SignerInfo_cert_cmp__imp_CMS_SignerInfo_cert_cmpCMS_SignerInfo_get0_algs__imp_CMS_SignerInfo_get0_algsCMS_SignerInfo_get0_md_ctx__imp_CMS_SignerInfo_get0_md_ctxCMS_SignerInfo_get0_pkey_ctx__imp_CMS_SignerInfo_get0_pkey_ctxCMS_SignerInfo_get0_signature__imp_CMS_SignerInfo_get0_signatureCMS_SignerInfo_get0_signer_id__imp_CMS_SignerInfo_get0_signer_idCMS_SignerInfo_set1_signer_cert__imp_CMS_SignerInfo_set1_signer_certCMS_SignerInfo_sign__imp_CMS_SignerInfo_signCMS_SignerInfo_verify__imp_CMS_SignerInfo_verifyCMS_SignerInfo_verify_content__imp_CMS_SignerInfo_verify_contentCMS_add0_CertificateChoices__imp_CMS_add0_CertificateChoicesCMS_add0_RevocationInfoChoice__imp_CMS_add0_RevocationInfoChoiceCMS_add0_cert__imp_CMS_add0_certCMS_add0_crl__imp_CMS_add0_crlCMS_add0_recipient_key__imp_CMS_add0_recipient_keyCMS_add0_recipient_password__imp_CMS_add0_recipient_passwordCMS_add1_ReceiptRequest__imp_CMS_add1_ReceiptRequestCMS_add1_cert__imp_CMS_add1_certCMS_add1_crl__imp_CMS_add1_crlCMS_add1_recipient_cert__imp_CMS_add1_recipient_certCMS_add1_signer__imp_CMS_add1_signerCMS_add_simple_smimecap__imp_CMS_add_simple_smimecapCMS_add_smimecap__imp_CMS_add_smimecapCMS_add_standard_smimecap__imp_CMS_add_standard_smimecapCMS_compress__imp_CMS_compressCMS_dataFinal__imp_CMS_dataFinalCMS_dataInit__imp_CMS_dataInitCMS_data__imp_CMS_dataCMS_data_create__imp_CMS_data_createCMS_decrypt__imp_CMS_decryptCMS_decrypt_set1_key__imp_CMS_decrypt_set1_keyCMS_decrypt_set1_password__imp_CMS_decrypt_set1_passwordCMS_decrypt_set1_pkey__imp_CMS_decrypt_set1_pkeyCMS_digest_create__imp_CMS_digest_createCMS_digest_verify__imp_CMS_digest_verifyCMS_encrypt__imp_CMS_encryptCMS_final__imp_CMS_finalCMS_get0_RecipientInfos__imp_CMS_get0_RecipientInfosCMS_get0_SignerInfos__imp_CMS_get0_SignerInfosCMS_get0_content__imp_CMS_get0_contentCMS_get0_eContentType__imp_CMS_get0_eContentTypeCMS_get0_signers__imp_CMS_get0_signersCMS_get0_type__imp_CMS_get0_typeCMS_get1_ReceiptRequest__imp_CMS_get1_ReceiptRequestCMS_get1_certs__imp_CMS_get1_certsCMS_get1_crls__imp_CMS_get1_crlsCMS_is_detached__imp_CMS_is_detachedCMS_set1_eContentType__imp_CMS_set1_eContentTypeCMS_set1_signers_certs__imp_CMS_set1_signers_certsCMS_set_detached__imp_CMS_set_detachedCMS_sign__imp_CMS_signCMS_sign_receipt__imp_CMS_sign_receiptCMS_signed_add1_attr__imp_CMS_signed_add1_attrCMS_signed_add1_attr_by_NID__imp_CMS_signed_add1_attr_by_NIDCMS_signed_add1_attr_by_OBJ__imp_CMS_signed_add1_attr_by_OBJCMS_signed_add1_attr_by_txt__imp_CMS_signed_add1_attr_by_txtCMS_signed_delete_attr__imp_CMS_signed_delete_attrCMS_signed_get0_data_by_OBJ__imp_CMS_signed_get0_data_by_OBJCMS_signed_get_attr__imp_CMS_signed_get_attrCMS_signed_get_attr_by_NID__imp_CMS_signed_get_attr_by_NIDCMS_signed_get_attr_by_OBJ__imp_CMS_signed_get_attr_by_OBJCMS_signed_get_attr_count__imp_CMS_signed_get_attr_countCMS_stream__imp_CMS_streamCMS_uncompress__imp_CMS_uncompressCMS_unsigned_add1_attr__imp_CMS_unsigned_add1_attrCMS_unsigned_add1_attr_by_NID__imp_CMS_unsigned_add1_attr_by_NIDCMS_unsigned_add1_attr_by_OBJ__imp_CMS_unsigned_add1_attr_by_OBJCMS_unsigned_add1_attr_by_txt__imp_CMS_unsigned_add1_attr_by_txtCMS_unsigned_delete_attr__imp_CMS_unsigned_delete_attrCMS_unsigned_get0_data_by_OBJ__imp_CMS_unsigned_get0_data_by_OBJCMS_unsigned_get_attr__imp_CMS_unsigned_get_attrCMS_unsigned_get_attr_by_NID__imp_CMS_unsigned_get_attr_by_NIDCMS_unsigned_get_attr_by_OBJ__imp_CMS_unsigned_get_attr_by_OBJCMS_unsigned_get_attr_count__imp_CMS_unsigned_get_attr_countCMS_verify__imp_CMS_verifyCMS_verify_receipt__imp_CMS_verify_receiptCOMP_CTX_free__imp_COMP_CTX_freeCOMP_CTX_new__imp_COMP_CTX_newCOMP_compress_block__imp_COMP_compress_blockCOMP_expand_block__imp_COMP_expand_blockCOMP_rle__imp_COMP_rleCOMP_zlib__imp_COMP_zlibCOMP_zlib_cleanup__imp_COMP_zlib_cleanupCONF_dump_bio__imp_CONF_dump_bioCONF_dump_fp__imp_CONF_dump_fpCONF_free__imp_CONF_freeCONF_get1_default_config_file__imp_CONF_get1_default_config_fileCONF_get_number__imp_CONF_get_numberCONF_get_section__imp_CONF_get_sectionCONF_get_string__imp_CONF_get_stringCONF_imodule_get_flags__imp_CONF_imodule_get_flagsCONF_imodule_get_module__imp_CONF_imodule_get_moduleCONF_imodule_get_name__imp_CONF_imodule_get_nameCONF_imodule_get_usr_data__imp_CONF_imodule_get_usr_dataCONF_imodule_get_value__imp_CONF_imodule_get_valueCONF_imodule_set_flags__imp_CONF_imodule_set_flagsCONF_imodule_set_usr_data__imp_CONF_imodule_set_usr_dataCONF_load__imp_CONF_loadCONF_load_bio__imp_CONF_load_bioCONF_load_fp__imp_CONF_load_fpCONF_module_add__imp_CONF_module_addCONF_module_get_usr_data__imp_CONF_module_get_usr_dataCONF_module_set_usr_data__imp_CONF_module_set_usr_dataCONF_modules_finish__imp_CONF_modules_finishCONF_modules_free__imp_CONF_modules_freeCONF_modules_load__imp_CONF_modules_loadCONF_modules_load_file__imp_CONF_modules_load_fileCONF_modules_unload__imp_CONF_modules_unloadCONF_parse_list__imp_CONF_parse_listCONF_set_default_method__imp_CONF_set_default_methodCONF_set_nconf__imp_CONF_set_nconfCRL_DIST_POINTS_free__imp_CRL_DIST_POINTS_freeCRL_DIST_POINTS_it__imp_CRL_DIST_POINTS_itCRL_DIST_POINTS_new__imp_CRL_DIST_POINTS_newCRYPTO_128_unwrap__imp_CRYPTO_128_unwrapCRYPTO_128_wrap__imp_CRYPTO_128_wrapCRYPTO_THREADID_cmp__imp_CRYPTO_THREADID_cmpCRYPTO_THREADID_cpy__imp_CRYPTO_THREADID_cpyCRYPTO_THREADID_current__imp_CRYPTO_THREADID_currentCRYPTO_THREADID_get_callback__imp_CRYPTO_THREADID_get_callbackCRYPTO_THREADID_hash__imp_CRYPTO_THREADID_hashCRYPTO_THREADID_set_callback__imp_CRYPTO_THREADID_set_callbackCRYPTO_THREADID_set_numeric__imp_CRYPTO_THREADID_set_numericCRYPTO_THREADID_set_pointer__imp_CRYPTO_THREADID_set_pointerCRYPTO_add_lock__imp_CRYPTO_add_lockCRYPTO_cbc128_decrypt__imp_CRYPTO_cbc128_decryptCRYPTO_cbc128_encrypt__imp_CRYPTO_cbc128_encryptCRYPTO_ccm128_aad__imp_CRYPTO_ccm128_aadCRYPTO_ccm128_decrypt__imp_CRYPTO_ccm128_decryptCRYPTO_ccm128_decrypt_ccm64__imp_CRYPTO_ccm128_decrypt_ccm64CRYPTO_ccm128_encrypt__imp_CRYPTO_ccm128_encryptCRYPTO_ccm128_encrypt_ccm64__imp_CRYPTO_ccm128_encrypt_ccm64CRYPTO_ccm128_init__imp_CRYPTO_ccm128_initCRYPTO_ccm128_setiv__imp_CRYPTO_ccm128_setivCRYPTO_ccm128_tag__imp_CRYPTO_ccm128_tagCRYPTO_cfb128_1_encrypt__imp_CRYPTO_cfb128_1_encryptCRYPTO_cfb128_8_encrypt__imp_CRYPTO_cfb128_8_encryptCRYPTO_cfb128_encrypt__imp_CRYPTO_cfb128_encryptCRYPTO_cleanup_all_ex_data__imp_CRYPTO_cleanup_all_ex_dataCRYPTO_ctr128_encrypt__imp_CRYPTO_ctr128_encryptCRYPTO_ctr128_encrypt_ctr32__imp_CRYPTO_ctr128_encrypt_ctr32CRYPTO_cts128_decrypt__imp_CRYPTO_cts128_decryptCRYPTO_cts128_decrypt_block__imp_CRYPTO_cts128_decrypt_blockCRYPTO_cts128_encrypt__imp_CRYPTO_cts128_encryptCRYPTO_cts128_encrypt_block__imp_CRYPTO_cts128_encrypt_blockCRYPTO_dbg_free__imp_CRYPTO_dbg_freeCRYPTO_dbg_get_options__imp_CRYPTO_dbg_get_optionsCRYPTO_dbg_malloc__imp_CRYPTO_dbg_mallocCRYPTO_dbg_realloc__imp_CRYPTO_dbg_reallocCRYPTO_dbg_set_options__imp_CRYPTO_dbg_set_optionsCRYPTO_destroy_dynlockid__imp_CRYPTO_destroy_dynlockidCRYPTO_dup_ex_data__imp_CRYPTO_dup_ex_dataCRYPTO_ex_data_new_class__imp_CRYPTO_ex_data_new_classCRYPTO_free__imp_CRYPTO_freeCRYPTO_free_ex_data__imp_CRYPTO_free_ex_dataCRYPTO_free_locked__imp_CRYPTO_free_lockedCRYPTO_gcm128_aad__imp_CRYPTO_gcm128_aadCRYPTO_gcm128_decrypt__imp_CRYPTO_gcm128_decryptCRYPTO_gcm128_decrypt_ctr32__imp_CRYPTO_gcm128_decrypt_ctr32CRYPTO_gcm128_encrypt__imp_CRYPTO_gcm128_encryptCRYPTO_gcm128_encrypt_ctr32__imp_CRYPTO_gcm128_encrypt_ctr32CRYPTO_gcm128_finish__imp_CRYPTO_gcm128_finishCRYPTO_gcm128_init__imp_CRYPTO_gcm128_initCRYPTO_gcm128_new__imp_CRYPTO_gcm128_newCRYPTO_gcm128_release__imp_CRYPTO_gcm128_releaseCRYPTO_gcm128_setiv__imp_CRYPTO_gcm128_setivCRYPTO_gcm128_tag__imp_CRYPTO_gcm128_tagCRYPTO_get_add_lock_callback__imp_CRYPTO_get_add_lock_callbackCRYPTO_get_dynlock_create_callback__imp_CRYPTO_get_dynlock_create_callbackCRYPTO_get_dynlock_destroy_callback__imp_CRYPTO_get_dynlock_destroy_callbackCRYPTO_get_dynlock_lock_callback__imp_CRYPTO_get_dynlock_lock_callbackCRYPTO_get_dynlock_value__imp_CRYPTO_get_dynlock_valueCRYPTO_get_ex_data__imp_CRYPTO_get_ex_dataCRYPTO_get_ex_data_implementation__imp_CRYPTO_get_ex_data_implementationCRYPTO_get_ex_new_index__imp_CRYPTO_get_ex_new_indexCRYPTO_get_id_callback__imp_CRYPTO_get_id_callbackCRYPTO_get_lock_name__imp_CRYPTO_get_lock_nameCRYPTO_get_locked_mem_ex_functions__imp_CRYPTO_get_locked_mem_ex_functionsCRYPTO_get_locked_mem_functions__imp_CRYPTO_get_locked_mem_functionsCRYPTO_get_locking_callback__imp_CRYPTO_get_locking_callbackCRYPTO_get_mem_debug_functions__imp_CRYPTO_get_mem_debug_functionsCRYPTO_get_mem_debug_options__imp_CRYPTO_get_mem_debug_optionsCRYPTO_get_mem_ex_functions__imp_CRYPTO_get_mem_ex_functionsCRYPTO_get_mem_functions__imp_CRYPTO_get_mem_functionsCRYPTO_get_new_dynlockid__imp_CRYPTO_get_new_dynlockidCRYPTO_get_new_lockid__imp_CRYPTO_get_new_lockidCRYPTO_is_mem_check_on__imp_CRYPTO_is_mem_check_onCRYPTO_lock__imp_CRYPTO_lockCRYPTO_malloc__imp_CRYPTO_mallocCRYPTO_malloc_locked__imp_CRYPTO_malloc_lockedCRYPTO_mem_ctrl__imp_CRYPTO_mem_ctrlCRYPTO_mem_leaks__imp_CRYPTO_mem_leaksCRYPTO_mem_leaks_cb__imp_CRYPTO_mem_leaks_cbCRYPTO_mem_leaks_fp__imp_CRYPTO_mem_leaks_fpCRYPTO_memcmp__imp_CRYPTO_memcmpCRYPTO_new_ex_data__imp_CRYPTO_new_ex_dataCRYPTO_nistcts128_decrypt__imp_CRYPTO_nistcts128_decryptCRYPTO_nistcts128_decrypt_block__imp_CRYPTO_nistcts128_decrypt_blockCRYPTO_nistcts128_encrypt__imp_CRYPTO_nistcts128_encryptCRYPTO_nistcts128_encrypt_block__imp_CRYPTO_nistcts128_encrypt_blockCRYPTO_num_locks__imp_CRYPTO_num_locksCRYPTO_ofb128_encrypt__imp_CRYPTO_ofb128_encryptCRYPTO_pop_info__imp_CRYPTO_pop_infoCRYPTO_push_info___imp_CRYPTO_push_info_CRYPTO_realloc__imp_CRYPTO_reallocCRYPTO_realloc_clean__imp_CRYPTO_realloc_cleanCRYPTO_remalloc__imp_CRYPTO_remallocCRYPTO_remove_all_info__imp_CRYPTO_remove_all_infoCRYPTO_set_add_lock_callback__imp_CRYPTO_set_add_lock_callbackCRYPTO_set_dynlock_create_callback__imp_CRYPTO_set_dynlock_create_callbackCRYPTO_set_dynlock_destroy_callback__imp_CRYPTO_set_dynlock_destroy_callbackCRYPTO_set_dynlock_lock_callback__imp_CRYPTO_set_dynlock_lock_callbackCRYPTO_set_ex_data__imp_CRYPTO_set_ex_dataCRYPTO_set_ex_data_implementation__imp_CRYPTO_set_ex_data_implementationCRYPTO_set_id_callback__imp_CRYPTO_set_id_callbackCRYPTO_set_locked_mem_ex_functions__imp_CRYPTO_set_locked_mem_ex_functionsCRYPTO_set_locked_mem_functions__imp_CRYPTO_set_locked_mem_functionsCRYPTO_set_locking_callback__imp_CRYPTO_set_locking_callbackCRYPTO_set_mem_debug_functions__imp_CRYPTO_set_mem_debug_functionsCRYPTO_set_mem_debug_options__imp_CRYPTO_set_mem_debug_optionsCRYPTO_set_mem_ex_functions__imp_CRYPTO_set_mem_ex_functionsCRYPTO_set_mem_functions__imp_CRYPTO_set_mem_functionsCRYPTO_strdup__imp_CRYPTO_strdupCRYPTO_thread_id__imp_CRYPTO_thread_idCRYPTO_xts128_encrypt__imp_CRYPTO_xts128_encryptCamellia_cbc_encrypt__imp_Camellia_cbc_encryptCamellia_cfb128_encrypt__imp_Camellia_cfb128_encryptCamellia_cfb1_encrypt__imp_Camellia_cfb1_encryptCamellia_cfb8_encrypt__imp_Camellia_cfb8_encryptCamellia_ctr128_encrypt__imp_Camellia_ctr128_encryptCamellia_decrypt__imp_Camellia_decryptCamellia_ecb_encrypt__imp_Camellia_ecb_encryptCamellia_encrypt__imp_Camellia_encryptCamellia_ofb128_encrypt__imp_Camellia_ofb128_encryptCamellia_set_key__imp_Camellia_set_keyDES_cbc_cksum__imp_DES_cbc_cksumDES_cbc_encrypt__imp_DES_cbc_encryptDES_cfb64_encrypt__imp_DES_cfb64_encryptDES_cfb_encrypt__imp_DES_cfb_encryptDES_check_key_parity__imp_DES_check_key_parityDES_crypt__imp_DES_cryptDES_decrypt3__imp_DES_decrypt3DES_ecb3_encrypt__imp_DES_ecb3_encryptDES_ecb_encrypt__imp_DES_ecb_encryptDES_ede3_cbc_encrypt__imp_DES_ede3_cbc_encryptDES_ede3_cbcm_encrypt__imp_DES_ede3_cbcm_encryptDES_ede3_cfb64_encrypt__imp_DES_ede3_cfb64_encryptDES_ede3_cfb_encrypt__imp_DES_ede3_cfb_encryptDES_ede3_ofb64_encrypt__imp_DES_ede3_ofb64_encryptDES_enc_read__imp_DES_enc_readDES_enc_write__imp_DES_enc_writeDES_encrypt1__imp_DES_encrypt1DES_encrypt2__imp_DES_encrypt2DES_encrypt3__imp_DES_encrypt3DES_fcrypt__imp_DES_fcryptDES_is_weak_key__imp_DES_is_weak_keyDES_key_sched__imp_DES_key_schedDES_ncbc_encrypt__imp_DES_ncbc_encryptDES_ofb64_encrypt__imp_DES_ofb64_encryptDES_ofb_encrypt__imp_DES_ofb_encryptDES_options__imp_DES_optionsDES_pcbc_encrypt__imp_DES_pcbc_encryptDES_quad_cksum__imp_DES_quad_cksumDES_random_key__imp_DES_random_keyDES_read_2passwords__imp_DES_read_2passwordsDES_read_password__imp_DES_read_passwordDES_set_key__imp_DES_set_keyDES_set_key_checked__imp_DES_set_key_checkedDES_set_key_unchecked__imp_DES_set_key_uncheckedDES_set_odd_parity__imp_DES_set_odd_parityDES_string_to_2keys__imp_DES_string_to_2keysDES_string_to_key__imp_DES_string_to_keyDES_xcbc_encrypt__imp_DES_xcbc_encryptDH_KDF_X9_42__imp_DH_KDF_X9_42DH_OpenSSL__imp_DH_OpenSSLDH_check__imp_DH_checkDH_check_pub_key__imp_DH_check_pub_keyDH_compute_key__imp_DH_compute_keyDH_compute_key_padded__imp_DH_compute_key_paddedDH_free__imp_DH_freeDH_generate_key__imp_DH_generate_keyDH_generate_parameters__imp_DH_generate_parametersDH_generate_parameters_ex__imp_DH_generate_parameters_exDH_get_1024_160__imp_DH_get_1024_160DH_get_2048_224__imp_DH_get_2048_224DH_get_2048_256__imp_DH_get_2048_256DH_get_default_method__imp_DH_get_default_methodDH_get_ex_data__imp_DH_get_ex_dataDH_get_ex_new_index__imp_DH_get_ex_new_indexDH_new__imp_DH_newDH_new_method__imp_DH_new_methodDH_set_default_method__imp_DH_set_default_methodDH_set_ex_data__imp_DH_set_ex_dataDH_set_method__imp_DH_set_methodDH_size__imp_DH_sizeDH_up_ref__imp_DH_up_refDHparams_dup__imp_DHparams_dupDHparams_print__imp_DHparams_printDHparams_print_fp__imp_DHparams_print_fpDIRECTORYSTRING_free__imp_DIRECTORYSTRING_freeDIRECTORYSTRING_it__imp_DIRECTORYSTRING_itDIRECTORYSTRING_new__imp_DIRECTORYSTRING_newDISPLAYTEXT_free__imp_DISPLAYTEXT_freeDISPLAYTEXT_it__imp_DISPLAYTEXT_itDISPLAYTEXT_new__imp_DISPLAYTEXT_newDIST_POINT_NAME_free__imp_DIST_POINT_NAME_freeDIST_POINT_NAME_it__imp_DIST_POINT_NAME_itDIST_POINT_NAME_new__imp_DIST_POINT_NAME_newDIST_POINT_free__imp_DIST_POINT_freeDIST_POINT_it__imp_DIST_POINT_itDIST_POINT_new__imp_DIST_POINT_newDIST_POINT_set_dpname__imp_DIST_POINT_set_dpnameDSA_OpenSSL__imp_DSA_OpenSSLDSA_SIG_free__imp_DSA_SIG_freeDSA_SIG_new__imp_DSA_SIG_newDSA_do_sign__imp_DSA_do_signDSA_do_verify__imp_DSA_do_verifyDSA_dup_DH__imp_DSA_dup_DHDSA_free__imp_DSA_freeDSA_generate_key__imp_DSA_generate_keyDSA_generate_parameters__imp_DSA_generate_parametersDSA_generate_parameters_ex__imp_DSA_generate_parameters_exDSA_get_default_method__imp_DSA_get_default_methodDSA_get_ex_data__imp_DSA_get_ex_dataDSA_get_ex_new_index__imp_DSA_get_ex_new_indexDSA_new__imp_DSA_newDSA_new_method__imp_DSA_new_methodDSA_print__imp_DSA_printDSA_print_fp__imp_DSA_print_fpDSA_set_default_method__imp_DSA_set_default_methodDSA_set_ex_data__imp_DSA_set_ex_dataDSA_set_method__imp_DSA_set_methodDSA_sign__imp_DSA_signDSA_sign_setup__imp_DSA_sign_setupDSA_size__imp_DSA_sizeDSA_up_ref__imp_DSA_up_refDSA_verify__imp_DSA_verifyDSAparams_dup__imp_DSAparams_dupDSAparams_print__imp_DSAparams_printDSAparams_print_fp__imp_DSAparams_print_fpDSO_METHOD_beos__imp_DSO_METHOD_beosDSO_METHOD_dl__imp_DSO_METHOD_dlDSO_METHOD_dlfcn__imp_DSO_METHOD_dlfcnDSO_METHOD_null__imp_DSO_METHOD_nullDSO_METHOD_openssl__imp_DSO_METHOD_opensslDSO_METHOD_vms__imp_DSO_METHOD_vmsDSO_METHOD_win32__imp_DSO_METHOD_win32DSO_bind_func__imp_DSO_bind_funcDSO_bind_var__imp_DSO_bind_varDSO_convert_filename__imp_DSO_convert_filenameDSO_ctrl__imp_DSO_ctrlDSO_flags__imp_DSO_flagsDSO_free__imp_DSO_freeDSO_get_default_method__imp_DSO_get_default_methodDSO_get_filename__imp_DSO_get_filenameDSO_get_loaded_filename__imp_DSO_get_loaded_filenameDSO_get_method__imp_DSO_get_methodDSO_global_lookup__imp_DSO_global_lookupDSO_load__imp_DSO_loadDSO_merge__imp_DSO_mergeDSO_new__imp_DSO_newDSO_new_method__imp_DSO_new_methodDSO_pathbyaddr__imp_DSO_pathbyaddrDSO_set_default_method__imp_DSO_set_default_methodDSO_set_filename__imp_DSO_set_filenameDSO_set_method__imp_DSO_set_methodDSO_set_name_converter__imp_DSO_set_name_converterDSO_up_ref__imp_DSO_up_refECDH_KDF_X9_62__imp_ECDH_KDF_X9_62ECDH_OpenSSL__imp_ECDH_OpenSSLECDH_compute_key__imp_ECDH_compute_keyECDH_get_default_method__imp_ECDH_get_default_methodECDH_get_ex_data__imp_ECDH_get_ex_dataECDH_get_ex_new_index__imp_ECDH_get_ex_new_indexECDH_set_default_method__imp_ECDH_set_default_methodECDH_set_ex_data__imp_ECDH_set_ex_dataECDH_set_method__imp_ECDH_set_methodECDSA_METHOD_free__imp_ECDSA_METHOD_freeECDSA_METHOD_get_app_data__imp_ECDSA_METHOD_get_app_dataECDSA_METHOD_new__imp_ECDSA_METHOD_newECDSA_METHOD_set_app_data__imp_ECDSA_METHOD_set_app_dataECDSA_METHOD_set_flags__imp_ECDSA_METHOD_set_flagsECDSA_METHOD_set_name__imp_ECDSA_METHOD_set_nameECDSA_METHOD_set_sign__imp_ECDSA_METHOD_set_signECDSA_METHOD_set_sign_setup__imp_ECDSA_METHOD_set_sign_setupECDSA_METHOD_set_verify__imp_ECDSA_METHOD_set_verifyECDSA_OpenSSL__imp_ECDSA_OpenSSLECDSA_SIG_free__imp_ECDSA_SIG_freeECDSA_SIG_new__imp_ECDSA_SIG_newECDSA_do_sign__imp_ECDSA_do_signECDSA_do_sign_ex__imp_ECDSA_do_sign_exECDSA_do_verify__imp_ECDSA_do_verifyECDSA_get_default_method__imp_ECDSA_get_default_methodECDSA_get_ex_data__imp_ECDSA_get_ex_dataECDSA_get_ex_new_index__imp_ECDSA_get_ex_new_indexECDSA_set_default_method__imp_ECDSA_set_default_methodECDSA_set_ex_data__imp_ECDSA_set_ex_dataECDSA_set_method__imp_ECDSA_set_methodECDSA_sign__imp_ECDSA_signECDSA_sign_ex__imp_ECDSA_sign_exECDSA_sign_setup__imp_ECDSA_sign_setupECDSA_size__imp_ECDSA_sizeECDSA_verify__imp_ECDSA_verifyECPKParameters_print__imp_ECPKParameters_printECPKParameters_print_fp__imp_ECPKParameters_print_fpECParameters_print__imp_ECParameters_printECParameters_print_fp__imp_ECParameters_print_fpEC_GF2m_simple_method__imp_EC_GF2m_simple_methodEC_GFp_mont_method__imp_EC_GFp_mont_methodEC_GFp_nist_method__imp_EC_GFp_nist_methodEC_GFp_simple_method__imp_EC_GFp_simple_methodEC_GROUP_check__imp_EC_GROUP_checkEC_GROUP_check_discriminant__imp_EC_GROUP_check_discriminantEC_GROUP_clear_free__imp_EC_GROUP_clear_freeEC_GROUP_cmp__imp_EC_GROUP_cmpEC_GROUP_copy__imp_EC_GROUP_copyEC_GROUP_dup__imp_EC_GROUP_dupEC_GROUP_free__imp_EC_GROUP_freeEC_GROUP_get0_generator__imp_EC_GROUP_get0_generatorEC_GROUP_get0_seed__imp_EC_GROUP_get0_seedEC_GROUP_get_asn1_flag__imp_EC_GROUP_get_asn1_flagEC_GROUP_get_basis_type__imp_EC_GROUP_get_basis_typeEC_GROUP_get_cofactor__imp_EC_GROUP_get_cofactorEC_GROUP_get_curve_GF2m__imp_EC_GROUP_get_curve_GF2mEC_GROUP_get_curve_GFp__imp_EC_GROUP_get_curve_GFpEC_GROUP_get_curve_name__imp_EC_GROUP_get_curve_nameEC_GROUP_get_degree__imp_EC_GROUP_get_degreeEC_GROUP_get_mont_data__imp_EC_GROUP_get_mont_dataEC_GROUP_get_order__imp_EC_GROUP_get_orderEC_GROUP_get_pentanomial_basis__imp_EC_GROUP_get_pentanomial_basisEC_GROUP_get_point_conversion_form__imp_EC_GROUP_get_point_conversion_formEC_GROUP_get_seed_len__imp_EC_GROUP_get_seed_lenEC_GROUP_get_trinomial_basis__imp_EC_GROUP_get_trinomial_basisEC_GROUP_have_precompute_mult__imp_EC_GROUP_have_precompute_multEC_GROUP_method_of__imp_EC_GROUP_method_ofEC_GROUP_new__imp_EC_GROUP_newEC_GROUP_new_by_curve_name__imp_EC_GROUP_new_by_curve_nameEC_GROUP_new_curve_GF2m__imp_EC_GROUP_new_curve_GF2mEC_GROUP_new_curve_GFp__imp_EC_GROUP_new_curve_GFpEC_GROUP_precompute_mult__imp_EC_GROUP_precompute_multEC_GROUP_set_asn1_flag__imp_EC_GROUP_set_asn1_flagEC_GROUP_set_curve_GF2m__imp_EC_GROUP_set_curve_GF2mEC_GROUP_set_curve_GFp__imp_EC_GROUP_set_curve_GFpEC_GROUP_set_curve_name__imp_EC_GROUP_set_curve_nameEC_GROUP_set_generator__imp_EC_GROUP_set_generatorEC_GROUP_set_point_conversion_form__imp_EC_GROUP_set_point_conversion_formEC_GROUP_set_seed__imp_EC_GROUP_set_seedEC_KEY_check_key__imp_EC_KEY_check_keyEC_KEY_clear_flags__imp_EC_KEY_clear_flagsEC_KEY_copy__imp_EC_KEY_copyEC_KEY_dup__imp_EC_KEY_dupEC_KEY_free__imp_EC_KEY_freeEC_KEY_generate_key__imp_EC_KEY_generate_keyEC_KEY_get0_group__imp_EC_KEY_get0_groupEC_KEY_get0_private_key__imp_EC_KEY_get0_private_keyEC_KEY_get0_public_key__imp_EC_KEY_get0_public_keyEC_KEY_get_conv_form__imp_EC_KEY_get_conv_formEC_KEY_get_enc_flags__imp_EC_KEY_get_enc_flagsEC_KEY_get_flags__imp_EC_KEY_get_flagsEC_KEY_get_key_method_data__imp_EC_KEY_get_key_method_dataEC_KEY_insert_key_method_data__imp_EC_KEY_insert_key_method_dataEC_KEY_new__imp_EC_KEY_newEC_KEY_new_by_curve_name__imp_EC_KEY_new_by_curve_nameEC_KEY_precompute_mult__imp_EC_KEY_precompute_multEC_KEY_print__imp_EC_KEY_printEC_KEY_print_fp__imp_EC_KEY_print_fpEC_KEY_set_asn1_flag__imp_EC_KEY_set_asn1_flagEC_KEY_set_conv_form__imp_EC_KEY_set_conv_formEC_KEY_set_enc_flags__imp_EC_KEY_set_enc_flagsEC_KEY_set_flags__imp_EC_KEY_set_flagsEC_KEY_set_group__imp_EC_KEY_set_groupEC_KEY_set_private_key__imp_EC_KEY_set_private_keyEC_KEY_set_public_key__imp_EC_KEY_set_public_keyEC_KEY_set_public_key_affine_coordinates__imp_EC_KEY_set_public_key_affine_coordinatesEC_KEY_up_ref__imp_EC_KEY_up_refEC_METHOD_get_field_type__imp_EC_METHOD_get_field_typeEC_POINT_add__imp_EC_POINT_addEC_POINT_bn2point__imp_EC_POINT_bn2pointEC_POINT_clear_free__imp_EC_POINT_clear_freeEC_POINT_cmp__imp_EC_POINT_cmpEC_POINT_copy__imp_EC_POINT_copyEC_POINT_dbl__imp_EC_POINT_dblEC_POINT_dup__imp_EC_POINT_dupEC_POINT_free__imp_EC_POINT_freeEC_POINT_get_Jprojective_coordinates_GFp__imp_EC_POINT_get_Jprojective_coordinates_GFpEC_POINT_get_affine_coordinates_GF2m__imp_EC_POINT_get_affine_coordinates_GF2mEC_POINT_get_affine_coordinates_GFp__imp_EC_POINT_get_affine_coordinates_GFpEC_POINT_hex2point__imp_EC_POINT_hex2pointEC_POINT_invert__imp_EC_POINT_invertEC_POINT_is_at_infinity__imp_EC_POINT_is_at_infinityEC_POINT_is_on_curve__imp_EC_POINT_is_on_curveEC_POINT_make_affine__imp_EC_POINT_make_affineEC_POINT_method_of__imp_EC_POINT_method_ofEC_POINT_mul__imp_EC_POINT_mulEC_POINT_new__imp_EC_POINT_newEC_POINT_oct2point__imp_EC_POINT_oct2pointEC_POINT_point2bn__imp_EC_POINT_point2bnEC_POINT_point2hex__imp_EC_POINT_point2hexEC_POINT_point2oct__imp_EC_POINT_point2octEC_POINT_set_Jprojective_coordinates_GFp__imp_EC_POINT_set_Jprojective_coordinates_GFpEC_POINT_set_affine_coordinates_GF2m__imp_EC_POINT_set_affine_coordinates_GF2mEC_POINT_set_affine_coordinates_GFp__imp_EC_POINT_set_affine_coordinates_GFpEC_POINT_set_compressed_coordinates_GF2m__imp_EC_POINT_set_compressed_coordinates_GF2mEC_POINT_set_compressed_coordinates_GFp__imp_EC_POINT_set_compressed_coordinates_GFpEC_POINT_set_to_infinity__imp_EC_POINT_set_to_infinityEC_POINTs_make_affine__imp_EC_POINTs_make_affineEC_POINTs_mul__imp_EC_POINTs_mulEC_curve_nid2nist__imp_EC_curve_nid2nistEC_curve_nist2nid__imp_EC_curve_nist2nidEC_get_builtin_curves__imp_EC_get_builtin_curvesEDIPARTYNAME_free__imp_EDIPARTYNAME_freeEDIPARTYNAME_it__imp_EDIPARTYNAME_itEDIPARTYNAME_new__imp_EDIPARTYNAME_newENGINE_add__imp_ENGINE_addENGINE_add_conf_module__imp_ENGINE_add_conf_moduleENGINE_by_id__imp_ENGINE_by_idENGINE_cleanup__imp_ENGINE_cleanupENGINE_cmd_is_executable__imp_ENGINE_cmd_is_executableENGINE_ctrl__imp_ENGINE_ctrlENGINE_ctrl_cmd__imp_ENGINE_ctrl_cmdENGINE_ctrl_cmd_string__imp_ENGINE_ctrl_cmd_stringENGINE_finish__imp_ENGINE_finishENGINE_free__imp_ENGINE_freeENGINE_get_DH__imp_ENGINE_get_DHENGINE_get_DSA__imp_ENGINE_get_DSAENGINE_get_ECDH__imp_ENGINE_get_ECDHENGINE_get_ECDSA__imp_ENGINE_get_ECDSAENGINE_get_RAND__imp_ENGINE_get_RANDENGINE_get_RSA__imp_ENGINE_get_RSAENGINE_get_STORE__imp_ENGINE_get_STOREENGINE_get_cipher__imp_ENGINE_get_cipherENGINE_get_cipher_engine__imp_ENGINE_get_cipher_engineENGINE_get_ciphers__imp_ENGINE_get_ciphersENGINE_get_cmd_defns__imp_ENGINE_get_cmd_defnsENGINE_get_ctrl_function__imp_ENGINE_get_ctrl_functionENGINE_get_default_DH__imp_ENGINE_get_default_DHENGINE_get_default_DSA__imp_ENGINE_get_default_DSAENGINE_get_default_ECDH__imp_ENGINE_get_default_ECDHENGINE_get_default_ECDSA__imp_ENGINE_get_default_ECDSAENGINE_get_default_RAND__imp_ENGINE_get_default_RANDENGINE_get_default_RSA__imp_ENGINE_get_default_RSAENGINE_get_destroy_function__imp_ENGINE_get_destroy_functionENGINE_get_digest__imp_ENGINE_get_digestENGINE_get_digest_engine__imp_ENGINE_get_digest_engineENGINE_get_digests__imp_ENGINE_get_digestsENGINE_get_ex_data__imp_ENGINE_get_ex_dataENGINE_get_ex_new_index__imp_ENGINE_get_ex_new_indexENGINE_get_finish_function__imp_ENGINE_get_finish_functionENGINE_get_first__imp_ENGINE_get_firstENGINE_get_flags__imp_ENGINE_get_flagsENGINE_get_id__imp_ENGINE_get_idENGINE_get_init_function__imp_ENGINE_get_init_functionENGINE_get_last__imp_ENGINE_get_lastENGINE_get_load_privkey_function__imp_ENGINE_get_load_privkey_functionENGINE_get_load_pubkey_function__imp_ENGINE_get_load_pubkey_functionENGINE_get_name__imp_ENGINE_get_nameENGINE_get_next__imp_ENGINE_get_nextENGINE_get_pkey_asn1_meth__imp_ENGINE_get_pkey_asn1_methENGINE_get_pkey_asn1_meth_engine__imp_ENGINE_get_pkey_asn1_meth_engineENGINE_get_pkey_asn1_meth_str__imp_ENGINE_get_pkey_asn1_meth_strENGINE_get_pkey_asn1_meths__imp_ENGINE_get_pkey_asn1_methsENGINE_get_pkey_meth__imp_ENGINE_get_pkey_methENGINE_get_pkey_meth_engine__imp_ENGINE_get_pkey_meth_engineENGINE_get_pkey_meths__imp_ENGINE_get_pkey_methsENGINE_get_prev__imp_ENGINE_get_prevENGINE_get_ssl_client_cert_function__imp_ENGINE_get_ssl_client_cert_functionENGINE_get_static_state__imp_ENGINE_get_static_stateENGINE_get_table_flags__imp_ENGINE_get_table_flagsENGINE_init__imp_ENGINE_initENGINE_load_builtin_engines__imp_ENGINE_load_builtin_enginesENGINE_load_cryptodev__imp_ENGINE_load_cryptodevENGINE_load_dynamic__imp_ENGINE_load_dynamicENGINE_load_openssl__imp_ENGINE_load_opensslENGINE_load_private_key__imp_ENGINE_load_private_keyENGINE_load_public_key__imp_ENGINE_load_public_keyENGINE_load_rdrand__imp_ENGINE_load_rdrandENGINE_load_ssl_client_cert__imp_ENGINE_load_ssl_client_certENGINE_new__imp_ENGINE_newENGINE_pkey_asn1_find_str__imp_ENGINE_pkey_asn1_find_strENGINE_register_DH__imp_ENGINE_register_DHENGINE_register_DSA__imp_ENGINE_register_DSAENGINE_register_ECDH__imp_ENGINE_register_ECDHENGINE_register_ECDSA__imp_ENGINE_register_ECDSAENGINE_register_RAND__imp_ENGINE_register_RANDENGINE_register_RSA__imp_ENGINE_register_RSAENGINE_register_STORE__imp_ENGINE_register_STOREENGINE_register_all_DH__imp_ENGINE_register_all_DHENGINE_register_all_DSA__imp_ENGINE_register_all_DSAENGINE_register_all_ECDH__imp_ENGINE_register_all_ECDHENGINE_register_all_ECDSA__imp_ENGINE_register_all_ECDSAENGINE_register_all_RAND__imp_ENGINE_register_all_RANDENGINE_register_all_RSA__imp_ENGINE_register_all_RSAENGINE_register_all_STORE__imp_ENGINE_register_all_STOREENGINE_register_all_ciphers__imp_ENGINE_register_all_ciphersENGINE_register_all_complete__imp_ENGINE_register_all_completeENGINE_register_all_digests__imp_ENGINE_register_all_digestsENGINE_register_all_pkey_asn1_meths__imp_ENGINE_register_all_pkey_asn1_methsENGINE_register_all_pkey_meths__imp_ENGINE_register_all_pkey_methsENGINE_register_ciphers__imp_ENGINE_register_ciphersENGINE_register_complete__imp_ENGINE_register_completeENGINE_register_digests__imp_ENGINE_register_digestsENGINE_register_pkey_asn1_meths__imp_ENGINE_register_pkey_asn1_methsENGINE_register_pkey_meths__imp_ENGINE_register_pkey_methsENGINE_remove__imp_ENGINE_removeENGINE_set_DH__imp_ENGINE_set_DHENGINE_set_DSA__imp_ENGINE_set_DSAENGINE_set_ECDH__imp_ENGINE_set_ECDHENGINE_set_ECDSA__imp_ENGINE_set_ECDSAENGINE_set_RAND__imp_ENGINE_set_RANDENGINE_set_RSA__imp_ENGINE_set_RSAENGINE_set_STORE__imp_ENGINE_set_STOREENGINE_set_ciphers__imp_ENGINE_set_ciphersENGINE_set_cmd_defns__imp_ENGINE_set_cmd_defnsENGINE_set_ctrl_function__imp_ENGINE_set_ctrl_functionENGINE_set_default__imp_ENGINE_set_defaultENGINE_set_default_DH__imp_ENGINE_set_default_DHENGINE_set_default_DSA__imp_ENGINE_set_default_DSAENGINE_set_default_ECDH__imp_ENGINE_set_default_ECDHENGINE_set_default_ECDSA__imp_ENGINE_set_default_ECDSAENGINE_set_default_RAND__imp_ENGINE_set_default_RANDENGINE_set_default_RSA__imp_ENGINE_set_default_RSAENGINE_set_default_ciphers__imp_ENGINE_set_default_ciphersENGINE_set_default_digests__imp_ENGINE_set_default_digestsENGINE_set_default_pkey_asn1_meths__imp_ENGINE_set_default_pkey_asn1_methsENGINE_set_default_pkey_meths__imp_ENGINE_set_default_pkey_methsENGINE_set_default_string__imp_ENGINE_set_default_stringENGINE_set_destroy_function__imp_ENGINE_set_destroy_functionENGINE_set_digests__imp_ENGINE_set_digestsENGINE_set_ex_data__imp_ENGINE_set_ex_dataENGINE_set_finish_function__imp_ENGINE_set_finish_functionENGINE_set_flags__imp_ENGINE_set_flagsENGINE_set_id__imp_ENGINE_set_idENGINE_set_init_function__imp_ENGINE_set_init_functionENGINE_set_load_privkey_function__imp_ENGINE_set_load_privkey_functionENGINE_set_load_pubkey_function__imp_ENGINE_set_load_pubkey_functionENGINE_set_load_ssl_client_cert_function__imp_ENGINE_set_load_ssl_client_cert_functionENGINE_set_name__imp_ENGINE_set_nameENGINE_set_pkey_asn1_meths__imp_ENGINE_set_pkey_asn1_methsENGINE_set_pkey_meths__imp_ENGINE_set_pkey_methsENGINE_set_table_flags__imp_ENGINE_set_table_flagsENGINE_unregister_DH__imp_ENGINE_unregister_DHENGINE_unregister_DSA__imp_ENGINE_unregister_DSAENGINE_unregister_ECDH__imp_ENGINE_unregister_ECDHENGINE_unregister_ECDSA__imp_ENGINE_unregister_ECDSAENGINE_unregister_RAND__imp_ENGINE_unregister_RANDENGINE_unregister_RSA__imp_ENGINE_unregister_RSAENGINE_unregister_STORE__imp_ENGINE_unregister_STOREENGINE_unregister_ciphers__imp_ENGINE_unregister_ciphersENGINE_unregister_digests__imp_ENGINE_unregister_digestsENGINE_unregister_pkey_asn1_meths__imp_ENGINE_unregister_pkey_asn1_methsENGINE_unregister_pkey_meths__imp_ENGINE_unregister_pkey_methsENGINE_up_ref__imp_ENGINE_up_refERR_add_error_data__imp_ERR_add_error_dataERR_add_error_vdata__imp_ERR_add_error_vdataERR_clear_error__imp_ERR_clear_errorERR_error_string__imp_ERR_error_stringERR_error_string_n__imp_ERR_error_string_nERR_free_strings__imp_ERR_free_stringsERR_func_error_string__imp_ERR_func_error_stringERR_get_err_state_table__imp_ERR_get_err_state_tableERR_get_error__imp_ERR_get_errorERR_get_error_line__imp_ERR_get_error_lineERR_get_error_line_data__imp_ERR_get_error_line_dataERR_get_implementation__imp_ERR_get_implementationERR_get_next_error_library__imp_ERR_get_next_error_libraryERR_get_state__imp_ERR_get_stateERR_get_string_table__imp_ERR_get_string_tableERR_lib_error_string__imp_ERR_lib_error_stringERR_load_ASN1_strings__imp_ERR_load_ASN1_stringsERR_load_BIO_strings__imp_ERR_load_BIO_stringsERR_load_BN_strings__imp_ERR_load_BN_stringsERR_load_BUF_strings__imp_ERR_load_BUF_stringsERR_load_CMS_strings__imp_ERR_load_CMS_stringsERR_load_COMP_strings__imp_ERR_load_COMP_stringsERR_load_CONF_strings__imp_ERR_load_CONF_stringsERR_load_CRYPTO_strings__imp_ERR_load_CRYPTO_stringsERR_load_DH_strings__imp_ERR_load_DH_stringsERR_load_DSA_strings__imp_ERR_load_DSA_stringsERR_load_DSO_strings__imp_ERR_load_DSO_stringsERR_load_ECDH_strings__imp_ERR_load_ECDH_stringsERR_load_ECDSA_strings__imp_ERR_load_ECDSA_stringsERR_load_EC_strings__imp_ERR_load_EC_stringsERR_load_ENGINE_strings__imp_ERR_load_ENGINE_stringsERR_load_ERR_strings__imp_ERR_load_ERR_stringsERR_load_EVP_strings__imp_ERR_load_EVP_stringsERR_load_OBJ_strings__imp_ERR_load_OBJ_stringsERR_load_OCSP_strings__imp_ERR_load_OCSP_stringsERR_load_PEM_strings__imp_ERR_load_PEM_stringsERR_load_PKCS12_strings__imp_ERR_load_PKCS12_stringsERR_load_PKCS7_strings__imp_ERR_load_PKCS7_stringsERR_load_RAND_strings__imp_ERR_load_RAND_stringsERR_load_RSA_strings__imp_ERR_load_RSA_stringsERR_load_TS_strings__imp_ERR_load_TS_stringsERR_load_UI_strings__imp_ERR_load_UI_stringsERR_load_X509V3_strings__imp_ERR_load_X509V3_stringsERR_load_X509_strings__imp_ERR_load_X509_stringsERR_load_crypto_strings__imp_ERR_load_crypto_stringsERR_load_strings__imp_ERR_load_stringsERR_peek_error__imp_ERR_peek_errorERR_peek_error_line__imp_ERR_peek_error_lineERR_peek_error_line_data__imp_ERR_peek_error_line_dataERR_peek_last_error__imp_ERR_peek_last_errorERR_peek_last_error_line__imp_ERR_peek_last_error_lineERR_peek_last_error_line_data__imp_ERR_peek_last_error_line_dataERR_pop_to_mark__imp_ERR_pop_to_markERR_print_errors__imp_ERR_print_errorsERR_print_errors_cb__imp_ERR_print_errors_cbERR_print_errors_fp__imp_ERR_print_errors_fpERR_put_error__imp_ERR_put_errorERR_reason_error_string__imp_ERR_reason_error_stringERR_release_err_state_table__imp_ERR_release_err_state_tableERR_remove_state__imp_ERR_remove_stateERR_remove_thread_state__imp_ERR_remove_thread_stateERR_set_error_data__imp_ERR_set_error_dataERR_set_implementation__imp_ERR_set_implementationERR_set_mark__imp_ERR_set_markERR_unload_strings__imp_ERR_unload_stringsESS_CERT_ID_dup__imp_ESS_CERT_ID_dupESS_CERT_ID_free__imp_ESS_CERT_ID_freeESS_CERT_ID_new__imp_ESS_CERT_ID_newESS_ISSUER_SERIAL_dup__imp_ESS_ISSUER_SERIAL_dupESS_ISSUER_SERIAL_free__imp_ESS_ISSUER_SERIAL_freeESS_ISSUER_SERIAL_new__imp_ESS_ISSUER_SERIAL_newESS_SIGNING_CERT_dup__imp_ESS_SIGNING_CERT_dupESS_SIGNING_CERT_free__imp_ESS_SIGNING_CERT_freeESS_SIGNING_CERT_new__imp_ESS_SIGNING_CERT_newEVP_BytesToKey__imp_EVP_BytesToKeyEVP_CIPHER_CTX_block_size__imp_EVP_CIPHER_CTX_block_sizeEVP_CIPHER_CTX_cipher__imp_EVP_CIPHER_CTX_cipherEVP_CIPHER_CTX_cleanup__imp_EVP_CIPHER_CTX_cleanupEVP_CIPHER_CTX_clear_flags__imp_EVP_CIPHER_CTX_clear_flagsEVP_CIPHER_CTX_copy__imp_EVP_CIPHER_CTX_copyEVP_CIPHER_CTX_ctrl__imp_EVP_CIPHER_CTX_ctrlEVP_CIPHER_CTX_flags__imp_EVP_CIPHER_CTX_flagsEVP_CIPHER_CTX_free__imp_EVP_CIPHER_CTX_freeEVP_CIPHER_CTX_get_app_data__imp_EVP_CIPHER_CTX_get_app_dataEVP_CIPHER_CTX_init__imp_EVP_CIPHER_CTX_initEVP_CIPHER_CTX_iv_length__imp_EVP_CIPHER_CTX_iv_lengthEVP_CIPHER_CTX_key_length__imp_EVP_CIPHER_CTX_key_lengthEVP_CIPHER_CTX_new__imp_EVP_CIPHER_CTX_newEVP_CIPHER_CTX_nid__imp_EVP_CIPHER_CTX_nidEVP_CIPHER_CTX_rand_key__imp_EVP_CIPHER_CTX_rand_keyEVP_CIPHER_CTX_set_app_data__imp_EVP_CIPHER_CTX_set_app_dataEVP_CIPHER_CTX_set_flags__imp_EVP_CIPHER_CTX_set_flagsEVP_CIPHER_CTX_set_key_length__imp_EVP_CIPHER_CTX_set_key_lengthEVP_CIPHER_CTX_set_padding__imp_EVP_CIPHER_CTX_set_paddingEVP_CIPHER_CTX_test_flags__imp_EVP_CIPHER_CTX_test_flagsEVP_CIPHER_asn1_to_param__imp_EVP_CIPHER_asn1_to_paramEVP_CIPHER_block_size__imp_EVP_CIPHER_block_sizeEVP_CIPHER_do_all__imp_EVP_CIPHER_do_allEVP_CIPHER_do_all_sorted__imp_EVP_CIPHER_do_all_sortedEVP_CIPHER_flags__imp_EVP_CIPHER_flagsEVP_CIPHER_get_asn1_iv__imp_EVP_CIPHER_get_asn1_ivEVP_CIPHER_iv_length__imp_EVP_CIPHER_iv_lengthEVP_CIPHER_key_length__imp_EVP_CIPHER_key_lengthEVP_CIPHER_nid__imp_EVP_CIPHER_nidEVP_CIPHER_param_to_asn1__imp_EVP_CIPHER_param_to_asn1EVP_CIPHER_set_asn1_iv__imp_EVP_CIPHER_set_asn1_ivEVP_CIPHER_type__imp_EVP_CIPHER_typeEVP_CipherFinal__imp_EVP_CipherFinalEVP_CipherFinal_ex__imp_EVP_CipherFinal_exEVP_CipherInit__imp_EVP_CipherInitEVP_CipherInit_ex__imp_EVP_CipherInit_exEVP_CipherUpdate__imp_EVP_CipherUpdateEVP_Cipher__imp_EVP_CipherEVP_DecodeBlock__imp_EVP_DecodeBlockEVP_DecodeFinal__imp_EVP_DecodeFinalEVP_DecodeInit__imp_EVP_DecodeInitEVP_DecodeUpdate__imp_EVP_DecodeUpdateEVP_DecryptFinal__imp_EVP_DecryptFinalEVP_DecryptFinal_ex__imp_EVP_DecryptFinal_exEVP_DecryptInit__imp_EVP_DecryptInitEVP_DecryptInit_ex__imp_EVP_DecryptInit_exEVP_DecryptUpdate__imp_EVP_DecryptUpdateEVP_DigestFinal__imp_EVP_DigestFinalEVP_DigestFinal_ex__imp_EVP_DigestFinal_exEVP_DigestInit__imp_EVP_DigestInitEVP_DigestInit_ex__imp_EVP_DigestInit_exEVP_DigestSignFinal__imp_EVP_DigestSignFinalEVP_DigestSignInit__imp_EVP_DigestSignInitEVP_DigestUpdate__imp_EVP_DigestUpdateEVP_DigestVerifyFinal__imp_EVP_DigestVerifyFinalEVP_DigestVerifyInit__imp_EVP_DigestVerifyInitEVP_Digest__imp_EVP_DigestEVP_EncodeBlock__imp_EVP_EncodeBlockEVP_EncodeFinal__imp_EVP_EncodeFinalEVP_EncodeInit__imp_EVP_EncodeInitEVP_EncodeUpdate__imp_EVP_EncodeUpdateEVP_EncryptFinal__imp_EVP_EncryptFinalEVP_EncryptFinal_ex__imp_EVP_EncryptFinal_exEVP_EncryptInit__imp_EVP_EncryptInitEVP_EncryptInit_ex__imp_EVP_EncryptInit_exEVP_EncryptUpdate__imp_EVP_EncryptUpdateEVP_MD_CTX_cleanup__imp_EVP_MD_CTX_cleanupEVP_MD_CTX_clear_flags__imp_EVP_MD_CTX_clear_flagsEVP_MD_CTX_copy__imp_EVP_MD_CTX_copyEVP_MD_CTX_copy_ex__imp_EVP_MD_CTX_copy_exEVP_MD_CTX_create__imp_EVP_MD_CTX_createEVP_MD_CTX_destroy__imp_EVP_MD_CTX_destroyEVP_MD_CTX_init__imp_EVP_MD_CTX_initEVP_MD_CTX_md__imp_EVP_MD_CTX_mdEVP_MD_CTX_set_flags__imp_EVP_MD_CTX_set_flagsEVP_MD_CTX_test_flags__imp_EVP_MD_CTX_test_flagsEVP_MD_block_size__imp_EVP_MD_block_sizeEVP_MD_do_all__imp_EVP_MD_do_allEVP_MD_do_all_sorted__imp_EVP_MD_do_all_sortedEVP_MD_flags__imp_EVP_MD_flagsEVP_MD_pkey_type__imp_EVP_MD_pkey_typeEVP_MD_size__imp_EVP_MD_sizeEVP_MD_type__imp_EVP_MD_typeEVP_OpenFinal__imp_EVP_OpenFinalEVP_OpenInit__imp_EVP_OpenInitEVP_PBE_CipherInit__imp_EVP_PBE_CipherInitEVP_PBE_alg_add__imp_EVP_PBE_alg_addEVP_PBE_alg_add_type__imp_EVP_PBE_alg_add_typeEVP_PBE_cleanup__imp_EVP_PBE_cleanupEVP_PBE_find__imp_EVP_PBE_findEVP_PKCS82PKEY__imp_EVP_PKCS82PKEYEVP_PKEY2PKCS8__imp_EVP_PKEY2PKCS8EVP_PKEY2PKCS8_broken__imp_EVP_PKEY2PKCS8_brokenEVP_PKEY_CTX_ctrl__imp_EVP_PKEY_CTX_ctrlEVP_PKEY_CTX_ctrl_str__imp_EVP_PKEY_CTX_ctrl_strEVP_PKEY_CTX_dup__imp_EVP_PKEY_CTX_dupEVP_PKEY_CTX_free__imp_EVP_PKEY_CTX_freeEVP_PKEY_CTX_get0_peerkey__imp_EVP_PKEY_CTX_get0_peerkeyEVP_PKEY_CTX_get0_pkey__imp_EVP_PKEY_CTX_get0_pkeyEVP_PKEY_CTX_get_app_data__imp_EVP_PKEY_CTX_get_app_dataEVP_PKEY_CTX_get_cb__imp_EVP_PKEY_CTX_get_cbEVP_PKEY_CTX_get_data__imp_EVP_PKEY_CTX_get_dataEVP_PKEY_CTX_get_keygen_info__imp_EVP_PKEY_CTX_get_keygen_infoEVP_PKEY_CTX_get_operation__imp_EVP_PKEY_CTX_get_operationEVP_PKEY_CTX_new__imp_EVP_PKEY_CTX_newEVP_PKEY_CTX_new_id__imp_EVP_PKEY_CTX_new_idEVP_PKEY_CTX_set0_keygen_info__imp_EVP_PKEY_CTX_set0_keygen_infoEVP_PKEY_CTX_set_app_data__imp_EVP_PKEY_CTX_set_app_dataEVP_PKEY_CTX_set_cb__imp_EVP_PKEY_CTX_set_cbEVP_PKEY_CTX_set_data__imp_EVP_PKEY_CTX_set_dataEVP_PKEY_add1_attr__imp_EVP_PKEY_add1_attrEVP_PKEY_add1_attr_by_NID__imp_EVP_PKEY_add1_attr_by_NIDEVP_PKEY_add1_attr_by_OBJ__imp_EVP_PKEY_add1_attr_by_OBJEVP_PKEY_add1_attr_by_txt__imp_EVP_PKEY_add1_attr_by_txtEVP_PKEY_asn1_add0__imp_EVP_PKEY_asn1_add0EVP_PKEY_asn1_add_alias__imp_EVP_PKEY_asn1_add_aliasEVP_PKEY_asn1_copy__imp_EVP_PKEY_asn1_copyEVP_PKEY_asn1_find__imp_EVP_PKEY_asn1_findEVP_PKEY_asn1_find_str__imp_EVP_PKEY_asn1_find_strEVP_PKEY_asn1_free__imp_EVP_PKEY_asn1_freeEVP_PKEY_asn1_get0__imp_EVP_PKEY_asn1_get0EVP_PKEY_asn1_get0_info__imp_EVP_PKEY_asn1_get0_infoEVP_PKEY_asn1_get_count__imp_EVP_PKEY_asn1_get_countEVP_PKEY_asn1_new__imp_EVP_PKEY_asn1_newEVP_PKEY_asn1_set_ctrl__imp_EVP_PKEY_asn1_set_ctrlEVP_PKEY_asn1_set_free__imp_EVP_PKEY_asn1_set_freeEVP_PKEY_asn1_set_item__imp_EVP_PKEY_asn1_set_itemEVP_PKEY_asn1_set_param__imp_EVP_PKEY_asn1_set_paramEVP_PKEY_asn1_set_private__imp_EVP_PKEY_asn1_set_privateEVP_PKEY_asn1_set_public__imp_EVP_PKEY_asn1_set_publicEVP_PKEY_assign__imp_EVP_PKEY_assignEVP_PKEY_base_id__imp_EVP_PKEY_base_idEVP_PKEY_bits__imp_EVP_PKEY_bitsEVP_PKEY_cmp__imp_EVP_PKEY_cmpEVP_PKEY_cmp_parameters__imp_EVP_PKEY_cmp_parametersEVP_PKEY_copy_parameters__imp_EVP_PKEY_copy_parametersEVP_PKEY_decrypt__imp_EVP_PKEY_decryptEVP_PKEY_decrypt_init__imp_EVP_PKEY_decrypt_initEVP_PKEY_decrypt_old__imp_EVP_PKEY_decrypt_oldEVP_PKEY_delete_attr__imp_EVP_PKEY_delete_attrEVP_PKEY_derive__imp_EVP_PKEY_deriveEVP_PKEY_derive_init__imp_EVP_PKEY_derive_initEVP_PKEY_derive_set_peer__imp_EVP_PKEY_derive_set_peerEVP_PKEY_encrypt__imp_EVP_PKEY_encryptEVP_PKEY_encrypt_init__imp_EVP_PKEY_encrypt_initEVP_PKEY_encrypt_old__imp_EVP_PKEY_encrypt_oldEVP_PKEY_free__imp_EVP_PKEY_freeEVP_PKEY_get0__imp_EVP_PKEY_get0EVP_PKEY_get0_asn1__imp_EVP_PKEY_get0_asn1EVP_PKEY_get1_DH__imp_EVP_PKEY_get1_DHEVP_PKEY_get1_DSA__imp_EVP_PKEY_get1_DSAEVP_PKEY_get1_EC_KEY__imp_EVP_PKEY_get1_EC_KEYEVP_PKEY_get1_RSA__imp_EVP_PKEY_get1_RSAEVP_PKEY_get_attr__imp_EVP_PKEY_get_attrEVP_PKEY_get_attr_by_NID__imp_EVP_PKEY_get_attr_by_NIDEVP_PKEY_get_attr_by_OBJ__imp_EVP_PKEY_get_attr_by_OBJEVP_PKEY_get_attr_count__imp_EVP_PKEY_get_attr_countEVP_PKEY_get_default_digest_nid__imp_EVP_PKEY_get_default_digest_nidEVP_PKEY_id__imp_EVP_PKEY_idEVP_PKEY_keygen__imp_EVP_PKEY_keygenEVP_PKEY_keygen_init__imp_EVP_PKEY_keygen_initEVP_PKEY_meth_add0__imp_EVP_PKEY_meth_add0EVP_PKEY_meth_copy__imp_EVP_PKEY_meth_copyEVP_PKEY_meth_find__imp_EVP_PKEY_meth_findEVP_PKEY_meth_free__imp_EVP_PKEY_meth_freeEVP_PKEY_meth_get0_info__imp_EVP_PKEY_meth_get0_infoEVP_PKEY_meth_new__imp_EVP_PKEY_meth_newEVP_PKEY_meth_set_cleanup__imp_EVP_PKEY_meth_set_cleanupEVP_PKEY_meth_set_copy__imp_EVP_PKEY_meth_set_copyEVP_PKEY_meth_set_ctrl__imp_EVP_PKEY_meth_set_ctrlEVP_PKEY_meth_set_decrypt__imp_EVP_PKEY_meth_set_decryptEVP_PKEY_meth_set_derive__imp_EVP_PKEY_meth_set_deriveEVP_PKEY_meth_set_encrypt__imp_EVP_PKEY_meth_set_encryptEVP_PKEY_meth_set_init__imp_EVP_PKEY_meth_set_initEVP_PKEY_meth_set_keygen__imp_EVP_PKEY_meth_set_keygenEVP_PKEY_meth_set_paramgen__imp_EVP_PKEY_meth_set_paramgenEVP_PKEY_meth_set_sign__imp_EVP_PKEY_meth_set_signEVP_PKEY_meth_set_signctx__imp_EVP_PKEY_meth_set_signctxEVP_PKEY_meth_set_verify__imp_EVP_PKEY_meth_set_verifyEVP_PKEY_meth_set_verify_recover__imp_EVP_PKEY_meth_set_verify_recoverEVP_PKEY_meth_set_verifyctx__imp_EVP_PKEY_meth_set_verifyctxEVP_PKEY_missing_parameters__imp_EVP_PKEY_missing_parametersEVP_PKEY_new__imp_EVP_PKEY_newEVP_PKEY_new_mac_key__imp_EVP_PKEY_new_mac_keyEVP_PKEY_paramgen__imp_EVP_PKEY_paramgenEVP_PKEY_paramgen_init__imp_EVP_PKEY_paramgen_initEVP_PKEY_print_params__imp_EVP_PKEY_print_paramsEVP_PKEY_print_private__imp_EVP_PKEY_print_privateEVP_PKEY_print_public__imp_EVP_PKEY_print_publicEVP_PKEY_save_parameters__imp_EVP_PKEY_save_parametersEVP_PKEY_set1_DH__imp_EVP_PKEY_set1_DHEVP_PKEY_set1_DSA__imp_EVP_PKEY_set1_DSAEVP_PKEY_set1_EC_KEY__imp_EVP_PKEY_set1_EC_KEYEVP_PKEY_set1_RSA__imp_EVP_PKEY_set1_RSAEVP_PKEY_set_type__imp_EVP_PKEY_set_typeEVP_PKEY_set_type_str__imp_EVP_PKEY_set_type_strEVP_PKEY_sign__imp_EVP_PKEY_signEVP_PKEY_sign_init__imp_EVP_PKEY_sign_initEVP_PKEY_size__imp_EVP_PKEY_sizeEVP_PKEY_type__imp_EVP_PKEY_typeEVP_PKEY_verify__imp_EVP_PKEY_verifyEVP_PKEY_verify_init__imp_EVP_PKEY_verify_initEVP_PKEY_verify_recover__imp_EVP_PKEY_verify_recoverEVP_PKEY_verify_recover_init__imp_EVP_PKEY_verify_recover_initEVP_SealFinal__imp_EVP_SealFinalEVP_SealInit__imp_EVP_SealInitEVP_SignFinal__imp_EVP_SignFinalEVP_VerifyFinal__imp_EVP_VerifyFinalEVP_add_alg_module__imp_EVP_add_alg_moduleEVP_add_cipher__imp_EVP_add_cipherEVP_add_digest__imp_EVP_add_digestEVP_aes_128_cbc__imp_EVP_aes_128_cbcEVP_aes_128_cbc_hmac_sha1__imp_EVP_aes_128_cbc_hmac_sha1EVP_aes_128_cbc_hmac_sha256__imp_EVP_aes_128_cbc_hmac_sha256EVP_aes_128_ccm__imp_EVP_aes_128_ccmEVP_aes_128_cfb128__imp_EVP_aes_128_cfb128EVP_aes_128_cfb1__imp_EVP_aes_128_cfb1EVP_aes_128_cfb8__imp_EVP_aes_128_cfb8EVP_aes_128_ctr__imp_EVP_aes_128_ctrEVP_aes_128_ecb__imp_EVP_aes_128_ecbEVP_aes_128_gcm__imp_EVP_aes_128_gcmEVP_aes_128_ofb__imp_EVP_aes_128_ofbEVP_aes_128_wrap__imp_EVP_aes_128_wrapEVP_aes_128_xts__imp_EVP_aes_128_xtsEVP_aes_192_cbc__imp_EVP_aes_192_cbcEVP_aes_192_ccm__imp_EVP_aes_192_ccmEVP_aes_192_cfb128__imp_EVP_aes_192_cfb128EVP_aes_192_cfb1__imp_EVP_aes_192_cfb1EVP_aes_192_cfb8__imp_EVP_aes_192_cfb8EVP_aes_192_ctr__imp_EVP_aes_192_ctrEVP_aes_192_ecb__imp_EVP_aes_192_ecbEVP_aes_192_gcm__imp_EVP_aes_192_gcmEVP_aes_192_ofb__imp_EVP_aes_192_ofbEVP_aes_192_wrap__imp_EVP_aes_192_wrapEVP_aes_256_cbc__imp_EVP_aes_256_cbcEVP_aes_256_cbc_hmac_sha1__imp_EVP_aes_256_cbc_hmac_sha1EVP_aes_256_cbc_hmac_sha256__imp_EVP_aes_256_cbc_hmac_sha256EVP_aes_256_ccm__imp_EVP_aes_256_ccmEVP_aes_256_cfb128__imp_EVP_aes_256_cfb128EVP_aes_256_cfb1__imp_EVP_aes_256_cfb1EVP_aes_256_cfb8__imp_EVP_aes_256_cfb8EVP_aes_256_ctr__imp_EVP_aes_256_ctrEVP_aes_256_ecb__imp_EVP_aes_256_ecbEVP_aes_256_gcm__imp_EVP_aes_256_gcmEVP_aes_256_ofb__imp_EVP_aes_256_ofbEVP_aes_256_wrap__imp_EVP_aes_256_wrapEVP_aes_256_xts__imp_EVP_aes_256_xtsEVP_bf_cbc__imp_EVP_bf_cbcEVP_bf_cfb64__imp_EVP_bf_cfb64EVP_bf_ecb__imp_EVP_bf_ecbEVP_bf_ofb__imp_EVP_bf_ofbEVP_camellia_128_cbc__imp_EVP_camellia_128_cbcEVP_camellia_128_cfb128__imp_EVP_camellia_128_cfb128EVP_camellia_128_cfb1__imp_EVP_camellia_128_cfb1EVP_camellia_128_cfb8__imp_EVP_camellia_128_cfb8EVP_camellia_128_ecb__imp_EVP_camellia_128_ecbEVP_camellia_128_ofb__imp_EVP_camellia_128_ofbEVP_camellia_192_cbc__imp_EVP_camellia_192_cbcEVP_camellia_192_cfb128__imp_EVP_camellia_192_cfb128EVP_camellia_192_cfb1__imp_EVP_camellia_192_cfb1EVP_camellia_192_cfb8__imp_EVP_camellia_192_cfb8EVP_camellia_192_ecb__imp_EVP_camellia_192_ecbEVP_camellia_192_ofb__imp_EVP_camellia_192_ofbEVP_camellia_256_cbc__imp_EVP_camellia_256_cbcEVP_camellia_256_cfb128__imp_EVP_camellia_256_cfb128EVP_camellia_256_cfb1__imp_EVP_camellia_256_cfb1EVP_camellia_256_cfb8__imp_EVP_camellia_256_cfb8EVP_camellia_256_ecb__imp_EVP_camellia_256_ecbEVP_camellia_256_ofb__imp_EVP_camellia_256_ofbEVP_cast5_cbc__imp_EVP_cast5_cbcEVP_cast5_cfb64__imp_EVP_cast5_cfb64EVP_cast5_ecb__imp_EVP_cast5_ecbEVP_cast5_ofb__imp_EVP_cast5_ofbEVP_cleanup__imp_EVP_cleanupEVP_des_cbc__imp_EVP_des_cbcEVP_des_cfb1__imp_EVP_des_cfb1EVP_des_cfb64__imp_EVP_des_cfb64EVP_des_cfb8__imp_EVP_des_cfb8EVP_des_ecb__imp_EVP_des_ecbEVP_des_ede3__imp_EVP_des_ede3EVP_des_ede3_cbc__imp_EVP_des_ede3_cbcEVP_des_ede3_cfb1__imp_EVP_des_ede3_cfb1EVP_des_ede3_cfb64__imp_EVP_des_ede3_cfb64EVP_des_ede3_cfb8__imp_EVP_des_ede3_cfb8EVP_des_ede3_ecb__imp_EVP_des_ede3_ecbEVP_des_ede3_ofb__imp_EVP_des_ede3_ofbEVP_des_ede3_wrap__imp_EVP_des_ede3_wrapEVP_des_ede__imp_EVP_des_edeEVP_des_ede_cbc__imp_EVP_des_ede_cbcEVP_des_ede_cfb64__imp_EVP_des_ede_cfb64EVP_des_ede_ecb__imp_EVP_des_ede_ecbEVP_des_ede_ofb__imp_EVP_des_ede_ofbEVP_des_ofb__imp_EVP_des_ofbEVP_desx_cbc__imp_EVP_desx_cbcEVP_dss1__imp_EVP_dss1EVP_dss__imp_EVP_dssEVP_ecdsa__imp_EVP_ecdsaEVP_enc_null__imp_EVP_enc_nullEVP_get_cipherbyname__imp_EVP_get_cipherbynameEVP_get_digestbyname__imp_EVP_get_digestbynameEVP_get_pw_prompt__imp_EVP_get_pw_promptEVP_idea_cbc__imp_EVP_idea_cbcEVP_idea_cfb64__imp_EVP_idea_cfb64EVP_idea_ecb__imp_EVP_idea_ecbEVP_idea_ofb__imp_EVP_idea_ofbEVP_md4__imp_EVP_md4EVP_md5__imp_EVP_md5EVP_md_null__imp_EVP_md_nullEVP_mdc2__imp_EVP_mdc2EVP_rc2_40_cbc__imp_EVP_rc2_40_cbcEVP_rc2_64_cbc__imp_EVP_rc2_64_cbcEVP_rc2_cbc__imp_EVP_rc2_cbcEVP_rc2_cfb64__imp_EVP_rc2_cfb64EVP_rc2_ecb__imp_EVP_rc2_ecbEVP_rc2_ofb__imp_EVP_rc2_ofbEVP_rc4__imp_EVP_rc4EVP_rc4_40__imp_EVP_rc4_40EVP_rc4_hmac_md5__imp_EVP_rc4_hmac_md5EVP_read_pw_string__imp_EVP_read_pw_stringEVP_read_pw_string_min__imp_EVP_read_pw_string_minEVP_ripemd160__imp_EVP_ripemd160EVP_seed_cbc__imp_EVP_seed_cbcEVP_seed_cfb128__imp_EVP_seed_cfb128EVP_seed_ecb__imp_EVP_seed_ecbEVP_seed_ofb__imp_EVP_seed_ofbEVP_set_pw_prompt__imp_EVP_set_pw_promptEVP_sha1__imp_EVP_sha1EVP_sha224__imp_EVP_sha224EVP_sha256__imp_EVP_sha256EVP_sha384__imp_EVP_sha384EVP_sha512__imp_EVP_sha512EVP_sha__imp_EVP_shaEVP_whirlpool__imp_EVP_whirlpoolEXTENDED_KEY_USAGE_free__imp_EXTENDED_KEY_USAGE_freeEXTENDED_KEY_USAGE_it__imp_EXTENDED_KEY_USAGE_itEXTENDED_KEY_USAGE_new__imp_EXTENDED_KEY_USAGE_newFIPS_mode__imp_FIPS_modeFIPS_mode_set__imp_FIPS_mode_setGENERAL_NAMES_free__imp_GENERAL_NAMES_freeGENERAL_NAMES_it__imp_GENERAL_NAMES_itGENERAL_NAMES_new__imp_GENERAL_NAMES_newGENERAL_NAME_cmp__imp_GENERAL_NAME_cmpGENERAL_NAME_dup__imp_GENERAL_NAME_dupGENERAL_NAME_free__imp_GENERAL_NAME_freeGENERAL_NAME_get0_otherName__imp_GENERAL_NAME_get0_otherNameGENERAL_NAME_get0_value__imp_GENERAL_NAME_get0_valueGENERAL_NAME_it__imp_GENERAL_NAME_itGENERAL_NAME_new__imp_GENERAL_NAME_newGENERAL_NAME_print__imp_GENERAL_NAME_printGENERAL_NAME_set0_othername__imp_GENERAL_NAME_set0_othernameGENERAL_NAME_set0_value__imp_GENERAL_NAME_set0_valueGENERAL_SUBTREE_free__imp_GENERAL_SUBTREE_freeGENERAL_SUBTREE_it__imp_GENERAL_SUBTREE_itGENERAL_SUBTREE_new__imp_GENERAL_SUBTREE_newHMAC__imp_HMACHMAC_CTX_cleanup__imp_HMAC_CTX_cleanupHMAC_CTX_copy__imp_HMAC_CTX_copyHMAC_CTX_init__imp_HMAC_CTX_initHMAC_CTX_set_flags__imp_HMAC_CTX_set_flagsHMAC_Final__imp_HMAC_FinalHMAC_Init__imp_HMAC_InitHMAC_Init_ex__imp_HMAC_Init_exHMAC_Update__imp_HMAC_UpdateISSUING_DIST_POINT_free__imp_ISSUING_DIST_POINT_freeISSUING_DIST_POINT_it__imp_ISSUING_DIST_POINT_itISSUING_DIST_POINT_new__imp_ISSUING_DIST_POINT_newKRB5_APREQBODY_free__imp_KRB5_APREQBODY_freeKRB5_APREQBODY_it__imp_KRB5_APREQBODY_itKRB5_APREQBODY_new__imp_KRB5_APREQBODY_newKRB5_APREQ_free__imp_KRB5_APREQ_freeKRB5_APREQ_it__imp_KRB5_APREQ_itKRB5_APREQ_new__imp_KRB5_APREQ_newKRB5_AUTHDATA_free__imp_KRB5_AUTHDATA_freeKRB5_AUTHDATA_it__imp_KRB5_AUTHDATA_itKRB5_AUTHDATA_new__imp_KRB5_AUTHDATA_newKRB5_AUTHENTBODY_free__imp_KRB5_AUTHENTBODY_freeKRB5_AUTHENTBODY_it__imp_KRB5_AUTHENTBODY_itKRB5_AUTHENTBODY_new__imp_KRB5_AUTHENTBODY_newKRB5_AUTHENT_free__imp_KRB5_AUTHENT_freeKRB5_AUTHENT_it__imp_KRB5_AUTHENT_itKRB5_AUTHENT_new__imp_KRB5_AUTHENT_newKRB5_CHECKSUM_free__imp_KRB5_CHECKSUM_freeKRB5_CHECKSUM_it__imp_KRB5_CHECKSUM_itKRB5_CHECKSUM_new__imp_KRB5_CHECKSUM_newKRB5_ENCDATA_free__imp_KRB5_ENCDATA_freeKRB5_ENCDATA_it__imp_KRB5_ENCDATA_itKRB5_ENCDATA_new__imp_KRB5_ENCDATA_newKRB5_ENCKEY_free__imp_KRB5_ENCKEY_freeKRB5_ENCKEY_it__imp_KRB5_ENCKEY_itKRB5_ENCKEY_new__imp_KRB5_ENCKEY_newKRB5_PRINCNAME_free__imp_KRB5_PRINCNAME_freeKRB5_PRINCNAME_it__imp_KRB5_PRINCNAME_itKRB5_PRINCNAME_new__imp_KRB5_PRINCNAME_newKRB5_TICKET_free__imp_KRB5_TICKET_freeKRB5_TICKET_it__imp_KRB5_TICKET_itKRB5_TICKET_new__imp_KRB5_TICKET_newKRB5_TKTBODY_free__imp_KRB5_TKTBODY_freeKRB5_TKTBODY_it__imp_KRB5_TKTBODY_itKRB5_TKTBODY_new__imp_KRB5_TKTBODY_newLONG_it__imp_LONG_itMD4__imp_MD4MD4_Final__imp_MD4_FinalMD4_Init__imp_MD4_InitMD4_Transform__imp_MD4_TransformMD4_Update__imp_MD4_UpdateMD5__imp_MD5MD5_Final__imp_MD5_FinalMD5_Init__imp_MD5_InitMD5_Transform__imp_MD5_TransformMD5_Update__imp_MD5_UpdateMDC2__imp_MDC2MDC2_Final__imp_MDC2_FinalMDC2_Init__imp_MDC2_InitMDC2_Update__imp_MDC2_UpdateNAME_CONSTRAINTS_check__imp_NAME_CONSTRAINTS_checkNAME_CONSTRAINTS_free__imp_NAME_CONSTRAINTS_freeNAME_CONSTRAINTS_it__imp_NAME_CONSTRAINTS_itNAME_CONSTRAINTS_new__imp_NAME_CONSTRAINTS_newNCONF_WIN32__imp_NCONF_WIN32NCONF_default__imp_NCONF_defaultNCONF_dump_bio__imp_NCONF_dump_bioNCONF_dump_fp__imp_NCONF_dump_fpNCONF_free__imp_NCONF_freeNCONF_free_data__imp_NCONF_free_dataNCONF_get_number_e__imp_NCONF_get_number_eNCONF_get_section__imp_NCONF_get_sectionNCONF_get_string__imp_NCONF_get_stringNCONF_load__imp_NCONF_loadNCONF_load_bio__imp_NCONF_load_bioNCONF_load_fp__imp_NCONF_load_fpNCONF_new__imp_NCONF_newNETSCAPE_CERT_SEQUENCE_free__imp_NETSCAPE_CERT_SEQUENCE_freeNETSCAPE_CERT_SEQUENCE_it__imp_NETSCAPE_CERT_SEQUENCE_itNETSCAPE_CERT_SEQUENCE_new__imp_NETSCAPE_CERT_SEQUENCE_newNETSCAPE_SPKAC_free__imp_NETSCAPE_SPKAC_freeNETSCAPE_SPKAC_it__imp_NETSCAPE_SPKAC_itNETSCAPE_SPKAC_new__imp_NETSCAPE_SPKAC_newNETSCAPE_SPKI_b64_decode__imp_NETSCAPE_SPKI_b64_decodeNETSCAPE_SPKI_b64_encode__imp_NETSCAPE_SPKI_b64_encodeNETSCAPE_SPKI_free__imp_NETSCAPE_SPKI_freeNETSCAPE_SPKI_get_pubkey__imp_NETSCAPE_SPKI_get_pubkeyNETSCAPE_SPKI_it__imp_NETSCAPE_SPKI_itNETSCAPE_SPKI_new__imp_NETSCAPE_SPKI_newNETSCAPE_SPKI_print__imp_NETSCAPE_SPKI_printNETSCAPE_SPKI_set_pubkey__imp_NETSCAPE_SPKI_set_pubkeyNETSCAPE_SPKI_sign__imp_NETSCAPE_SPKI_signNETSCAPE_SPKI_verify__imp_NETSCAPE_SPKI_verifyNETSCAPE_X509_free__imp_NETSCAPE_X509_freeNETSCAPE_X509_it__imp_NETSCAPE_X509_itNETSCAPE_X509_new__imp_NETSCAPE_X509_newNOTICEREF_free__imp_NOTICEREF_freeNOTICEREF_it__imp_NOTICEREF_itNOTICEREF_new__imp_NOTICEREF_newOBJ_NAME_add__imp_OBJ_NAME_addOBJ_NAME_cleanup__imp_OBJ_NAME_cleanupOBJ_NAME_do_all__imp_OBJ_NAME_do_allOBJ_NAME_do_all_sorted__imp_OBJ_NAME_do_all_sortedOBJ_NAME_get__imp_OBJ_NAME_getOBJ_NAME_init__imp_OBJ_NAME_initOBJ_NAME_new_index__imp_OBJ_NAME_new_indexOBJ_NAME_remove__imp_OBJ_NAME_removeOBJ_add_object__imp_OBJ_add_objectOBJ_add_sigid__imp_OBJ_add_sigidOBJ_bsearch___imp_OBJ_bsearch_OBJ_bsearch_ex___imp_OBJ_bsearch_ex_OBJ_cleanup__imp_OBJ_cleanupOBJ_cmp__imp_OBJ_cmpOBJ_create__imp_OBJ_createOBJ_create_objects__imp_OBJ_create_objectsOBJ_dup__imp_OBJ_dupOBJ_find_sigid_algs__imp_OBJ_find_sigid_algsOBJ_find_sigid_by_algs__imp_OBJ_find_sigid_by_algsOBJ_ln2nid__imp_OBJ_ln2nidOBJ_new_nid__imp_OBJ_new_nidOBJ_nid2ln__imp_OBJ_nid2lnOBJ_nid2obj__imp_OBJ_nid2objOBJ_nid2sn__imp_OBJ_nid2snOBJ_obj2nid__imp_OBJ_obj2nidOBJ_obj2txt__imp_OBJ_obj2txtOBJ_sigid_free__imp_OBJ_sigid_freeOBJ_sn2nid__imp_OBJ_sn2nidOBJ_txt2nid__imp_OBJ_txt2nidOBJ_txt2obj__imp_OBJ_txt2objOCSP_BASICRESP_add1_ext_i2d__imp_OCSP_BASICRESP_add1_ext_i2dOCSP_BASICRESP_add_ext__imp_OCSP_BASICRESP_add_extOCSP_BASICRESP_delete_ext__imp_OCSP_BASICRESP_delete_extOCSP_BASICRESP_free__imp_OCSP_BASICRESP_freeOCSP_BASICRESP_get1_ext_d2i__imp_OCSP_BASICRESP_get1_ext_d2iOCSP_BASICRESP_get_ext__imp_OCSP_BASICRESP_get_extOCSP_BASICRESP_get_ext_by_NID__imp_OCSP_BASICRESP_get_ext_by_NIDOCSP_BASICRESP_get_ext_by_OBJ__imp_OCSP_BASICRESP_get_ext_by_OBJOCSP_BASICRESP_get_ext_by_critical__imp_OCSP_BASICRESP_get_ext_by_criticalOCSP_BASICRESP_get_ext_count__imp_OCSP_BASICRESP_get_ext_countOCSP_BASICRESP_it__imp_OCSP_BASICRESP_itOCSP_BASICRESP_new__imp_OCSP_BASICRESP_newOCSP_CERTID_dup__imp_OCSP_CERTID_dupOCSP_CERTID_free__imp_OCSP_CERTID_freeOCSP_CERTID_it__imp_OCSP_CERTID_itOCSP_CERTID_new__imp_OCSP_CERTID_newOCSP_CERTSTATUS_free__imp_OCSP_CERTSTATUS_freeOCSP_CERTSTATUS_it__imp_OCSP_CERTSTATUS_itOCSP_CERTSTATUS_new__imp_OCSP_CERTSTATUS_newOCSP_CRLID_free__imp_OCSP_CRLID_freeOCSP_CRLID_it__imp_OCSP_CRLID_itOCSP_CRLID_new__imp_OCSP_CRLID_newOCSP_ONEREQ_add1_ext_i2d__imp_OCSP_ONEREQ_add1_ext_i2dOCSP_ONEREQ_add_ext__imp_OCSP_ONEREQ_add_extOCSP_ONEREQ_delete_ext__imp_OCSP_ONEREQ_delete_extOCSP_ONEREQ_free__imp_OCSP_ONEREQ_freeOCSP_ONEREQ_get1_ext_d2i__imp_OCSP_ONEREQ_get1_ext_d2iOCSP_ONEREQ_get_ext__imp_OCSP_ONEREQ_get_extOCSP_ONEREQ_get_ext_by_NID__imp_OCSP_ONEREQ_get_ext_by_NIDOCSP_ONEREQ_get_ext_by_OBJ__imp_OCSP_ONEREQ_get_ext_by_OBJOCSP_ONEREQ_get_ext_by_critical__imp_OCSP_ONEREQ_get_ext_by_criticalOCSP_ONEREQ_get_ext_count__imp_OCSP_ONEREQ_get_ext_countOCSP_ONEREQ_it__imp_OCSP_ONEREQ_itOCSP_ONEREQ_new__imp_OCSP_ONEREQ_newOCSP_REQINFO_free__imp_OCSP_REQINFO_freeOCSP_REQINFO_it__imp_OCSP_REQINFO_itOCSP_REQINFO_new__imp_OCSP_REQINFO_newOCSP_REQUEST_add1_ext_i2d__imp_OCSP_REQUEST_add1_ext_i2dOCSP_REQUEST_add_ext__imp_OCSP_REQUEST_add_extOCSP_REQUEST_delete_ext__imp_OCSP_REQUEST_delete_extOCSP_REQUEST_free__imp_OCSP_REQUEST_freeOCSP_REQUEST_get1_ext_d2i__imp_OCSP_REQUEST_get1_ext_d2iOCSP_REQUEST_get_ext__imp_OCSP_REQUEST_get_extOCSP_REQUEST_get_ext_by_NID__imp_OCSP_REQUEST_get_ext_by_NIDOCSP_REQUEST_get_ext_by_OBJ__imp_OCSP_REQUEST_get_ext_by_OBJOCSP_REQUEST_get_ext_by_critical__imp_OCSP_REQUEST_get_ext_by_criticalOCSP_REQUEST_get_ext_count__imp_OCSP_REQUEST_get_ext_countOCSP_REQUEST_it__imp_OCSP_REQUEST_itOCSP_REQUEST_new__imp_OCSP_REQUEST_newOCSP_REQUEST_print__imp_OCSP_REQUEST_printOCSP_REQ_CTX_add1_header__imp_OCSP_REQ_CTX_add1_headerOCSP_REQ_CTX_free__imp_OCSP_REQ_CTX_freeOCSP_REQ_CTX_get0_mem_bio__imp_OCSP_REQ_CTX_get0_mem_bioOCSP_REQ_CTX_http__imp_OCSP_REQ_CTX_httpOCSP_REQ_CTX_i2d__imp_OCSP_REQ_CTX_i2dOCSP_REQ_CTX_nbio__imp_OCSP_REQ_CTX_nbioOCSP_REQ_CTX_nbio_d2i__imp_OCSP_REQ_CTX_nbio_d2iOCSP_REQ_CTX_new__imp_OCSP_REQ_CTX_newOCSP_REQ_CTX_set1_req__imp_OCSP_REQ_CTX_set1_reqOCSP_RESPBYTES_free__imp_OCSP_RESPBYTES_freeOCSP_RESPBYTES_it__imp_OCSP_RESPBYTES_itOCSP_RESPBYTES_new__imp_OCSP_RESPBYTES_newOCSP_RESPDATA_free__imp_OCSP_RESPDATA_freeOCSP_RESPDATA_it__imp_OCSP_RESPDATA_itOCSP_RESPDATA_new__imp_OCSP_RESPDATA_newOCSP_RESPID_free__imp_OCSP_RESPID_freeOCSP_RESPID_it__imp_OCSP_RESPID_itOCSP_RESPID_new__imp_OCSP_RESPID_newOCSP_RESPONSE_free__imp_OCSP_RESPONSE_freeOCSP_RESPONSE_it__imp_OCSP_RESPONSE_itOCSP_RESPONSE_new__imp_OCSP_RESPONSE_newOCSP_RESPONSE_print__imp_OCSP_RESPONSE_printOCSP_REVOKEDINFO_free__imp_OCSP_REVOKEDINFO_freeOCSP_REVOKEDINFO_it__imp_OCSP_REVOKEDINFO_itOCSP_REVOKEDINFO_new__imp_OCSP_REVOKEDINFO_newOCSP_SERVICELOC_free__imp_OCSP_SERVICELOC_freeOCSP_SERVICELOC_it__imp_OCSP_SERVICELOC_itOCSP_SERVICELOC_new__imp_OCSP_SERVICELOC_newOCSP_SIGNATURE_free__imp_OCSP_SIGNATURE_freeOCSP_SIGNATURE_it__imp_OCSP_SIGNATURE_itOCSP_SIGNATURE_new__imp_OCSP_SIGNATURE_newOCSP_SINGLERESP_add1_ext_i2d__imp_OCSP_SINGLERESP_add1_ext_i2dOCSP_SINGLERESP_add_ext__imp_OCSP_SINGLERESP_add_extOCSP_SINGLERESP_delete_ext__imp_OCSP_SINGLERESP_delete_extOCSP_SINGLERESP_free__imp_OCSP_SINGLERESP_freeOCSP_SINGLERESP_get1_ext_d2i__imp_OCSP_SINGLERESP_get1_ext_d2iOCSP_SINGLERESP_get_ext__imp_OCSP_SINGLERESP_get_extOCSP_SINGLERESP_get_ext_by_NID__imp_OCSP_SINGLERESP_get_ext_by_NIDOCSP_SINGLERESP_get_ext_by_OBJ__imp_OCSP_SINGLERESP_get_ext_by_OBJOCSP_SINGLERESP_get_ext_by_critical__imp_OCSP_SINGLERESP_get_ext_by_criticalOCSP_SINGLERESP_get_ext_count__imp_OCSP_SINGLERESP_get_ext_countOCSP_SINGLERESP_it__imp_OCSP_SINGLERESP_itOCSP_SINGLERESP_new__imp_OCSP_SINGLERESP_newOCSP_accept_responses_new__imp_OCSP_accept_responses_newOCSP_archive_cutoff_new__imp_OCSP_archive_cutoff_newOCSP_basic_add1_cert__imp_OCSP_basic_add1_certOCSP_basic_add1_nonce__imp_OCSP_basic_add1_nonceOCSP_basic_add1_status__imp_OCSP_basic_add1_statusOCSP_basic_sign__imp_OCSP_basic_signOCSP_basic_verify__imp_OCSP_basic_verifyOCSP_cert_id_new__imp_OCSP_cert_id_newOCSP_cert_status_str__imp_OCSP_cert_status_strOCSP_cert_to_id__imp_OCSP_cert_to_idOCSP_check_nonce__imp_OCSP_check_nonceOCSP_check_validity__imp_OCSP_check_validityOCSP_copy_nonce__imp_OCSP_copy_nonceOCSP_crlID_new__imp_OCSP_crlID_newOCSP_crl_reason_str__imp_OCSP_crl_reason_strOCSP_id_cmp__imp_OCSP_id_cmpOCSP_id_get0_info__imp_OCSP_id_get0_infoOCSP_id_issuer_cmp__imp_OCSP_id_issuer_cmpOCSP_onereq_get0_id__imp_OCSP_onereq_get0_idOCSP_parse_url__imp_OCSP_parse_urlOCSP_request_add0_id__imp_OCSP_request_add0_idOCSP_request_add1_cert__imp_OCSP_request_add1_certOCSP_request_add1_nonce__imp_OCSP_request_add1_nonceOCSP_request_is_signed__imp_OCSP_request_is_signedOCSP_request_onereq_count__imp_OCSP_request_onereq_countOCSP_request_onereq_get0__imp_OCSP_request_onereq_get0OCSP_request_set1_name__imp_OCSP_request_set1_nameOCSP_request_sign__imp_OCSP_request_signOCSP_request_verify__imp_OCSP_request_verifyOCSP_resp_count__imp_OCSP_resp_countOCSP_resp_find__imp_OCSP_resp_findOCSP_resp_find_status__imp_OCSP_resp_find_statusOCSP_resp_get0__imp_OCSP_resp_get0OCSP_response_create__imp_OCSP_response_createOCSP_response_get1_basic__imp_OCSP_response_get1_basicOCSP_response_status__imp_OCSP_response_statusOCSP_response_status_str__imp_OCSP_response_status_strOCSP_sendreq_bio__imp_OCSP_sendreq_bioOCSP_sendreq_nbio__imp_OCSP_sendreq_nbioOCSP_sendreq_new__imp_OCSP_sendreq_newOCSP_set_max_response_length__imp_OCSP_set_max_response_lengthOCSP_single_get0_status__imp_OCSP_single_get0_statusOCSP_url_svcloc_new__imp_OCSP_url_svcloc_newOPENSSL_DIR_end__imp_OPENSSL_DIR_endOPENSSL_DIR_read__imp_OPENSSL_DIR_readOPENSSL_add_all_algorithms_conf__imp_OPENSSL_add_all_algorithms_confOPENSSL_add_all_algorithms_noconf__imp_OPENSSL_add_all_algorithms_noconfOPENSSL_asc2uni__imp_OPENSSL_asc2uniOPENSSL_cleanse__imp_OPENSSL_cleanseOPENSSL_config__imp_OPENSSL_configOPENSSL_cpuid_setup__imp_OPENSSL_cpuid_setupOPENSSL_gmtime__imp_OPENSSL_gmtimeOPENSSL_gmtime_adj__imp_OPENSSL_gmtime_adjOPENSSL_gmtime_diff__imp_OPENSSL_gmtime_diffOPENSSL_ia32cap_loc__imp_OPENSSL_ia32cap_locOPENSSL_init__imp_OPENSSL_initOPENSSL_isservice__imp_OPENSSL_isserviceOPENSSL_issetugid__imp_OPENSSL_issetugidOPENSSL_load_builtin_modules__imp_OPENSSL_load_builtin_modulesOPENSSL_memcmp__imp_OPENSSL_memcmpOPENSSL_no_config__imp_OPENSSL_no_configOPENSSL_showfatal__imp_OPENSSL_showfatalOPENSSL_stderr__imp_OPENSSL_stderrOPENSSL_strcasecmp__imp_OPENSSL_strcasecmpOPENSSL_strncasecmp__imp_OPENSSL_strncasecmpOPENSSL_uni2asc__imp_OPENSSL_uni2ascOTHERNAME_cmp__imp_OTHERNAME_cmpOTHERNAME_free__imp_OTHERNAME_freeOTHERNAME_it__imp_OTHERNAME_itOTHERNAME_new__imp_OTHERNAME_newOpenSSLDie__imp_OpenSSLDieOpenSSL_add_all_ciphers__imp_OpenSSL_add_all_ciphersOpenSSL_add_all_digests__imp_OpenSSL_add_all_digestsPBE2PARAM_free__imp_PBE2PARAM_freePBE2PARAM_it__imp_PBE2PARAM_itPBE2PARAM_new__imp_PBE2PARAM_newPBEPARAM_free__imp_PBEPARAM_freePBEPARAM_it__imp_PBEPARAM_itPBEPARAM_new__imp_PBEPARAM_newPBKDF2PARAM_free__imp_PBKDF2PARAM_freePBKDF2PARAM_it__imp_PBKDF2PARAM_itPBKDF2PARAM_new__imp_PBKDF2PARAM_newPEM_ASN1_read__imp_PEM_ASN1_readPEM_ASN1_read_bio__imp_PEM_ASN1_read_bioPEM_ASN1_write__imp_PEM_ASN1_writePEM_ASN1_write_bio__imp_PEM_ASN1_write_bioPEM_SealFinal__imp_PEM_SealFinalPEM_SealInit__imp_PEM_SealInitPEM_SealUpdate__imp_PEM_SealUpdatePEM_SignFinal__imp_PEM_SignFinalPEM_SignInit__imp_PEM_SignInitPEM_SignUpdate__imp_PEM_SignUpdatePEM_X509_INFO_read__imp_PEM_X509_INFO_readPEM_X509_INFO_read_bio__imp_PEM_X509_INFO_read_bioPEM_X509_INFO_write_bio__imp_PEM_X509_INFO_write_bioPEM_bytes_read_bio__imp_PEM_bytes_read_bioPEM_def_callback__imp_PEM_def_callbackPEM_dek_info__imp_PEM_dek_infoPEM_do_header__imp_PEM_do_headerPEM_get_EVP_CIPHER_INFO__imp_PEM_get_EVP_CIPHER_INFOPEM_proc_type__imp_PEM_proc_typePEM_read__imp_PEM_readPEM_read_CMS__imp_PEM_read_CMSPEM_read_DHparams__imp_PEM_read_DHparamsPEM_read_DSAPrivateKey__imp_PEM_read_DSAPrivateKeyPEM_read_DSA_PUBKEY__imp_PEM_read_DSA_PUBKEYPEM_read_DSAparams__imp_PEM_read_DSAparamsPEM_read_ECPKParameters__imp_PEM_read_ECPKParametersPEM_read_ECPrivateKey__imp_PEM_read_ECPrivateKeyPEM_read_EC_PUBKEY__imp_PEM_read_EC_PUBKEYPEM_read_NETSCAPE_CERT_SEQUENCE__imp_PEM_read_NETSCAPE_CERT_SEQUENCEPEM_read_PKCS7__imp_PEM_read_PKCS7PEM_read_PKCS8__imp_PEM_read_PKCS8PEM_read_PKCS8_PRIV_KEY_INFO__imp_PEM_read_PKCS8_PRIV_KEY_INFOPEM_read_PUBKEY__imp_PEM_read_PUBKEYPEM_read_PrivateKey__imp_PEM_read_PrivateKeyPEM_read_RSAPrivateKey__imp_PEM_read_RSAPrivateKeyPEM_read_RSAPublicKey__imp_PEM_read_RSAPublicKeyPEM_read_RSA_PUBKEY__imp_PEM_read_RSA_PUBKEYPEM_read_X509__imp_PEM_read_X509PEM_read_X509_AUX__imp_PEM_read_X509_AUXPEM_read_X509_CERT_PAIR__imp_PEM_read_X509_CERT_PAIRPEM_read_X509_CRL__imp_PEM_read_X509_CRLPEM_read_X509_REQ__imp_PEM_read_X509_REQPEM_read_bio__imp_PEM_read_bioPEM_read_bio_CMS__imp_PEM_read_bio_CMSPEM_read_bio_DHparams__imp_PEM_read_bio_DHparamsPEM_read_bio_DSAPrivateKey__imp_PEM_read_bio_DSAPrivateKeyPEM_read_bio_DSA_PUBKEY__imp_PEM_read_bio_DSA_PUBKEYPEM_read_bio_DSAparams__imp_PEM_read_bio_DSAparamsPEM_read_bio_ECPKParameters__imp_PEM_read_bio_ECPKParametersPEM_read_bio_ECPrivateKey__imp_PEM_read_bio_ECPrivateKeyPEM_read_bio_EC_PUBKEY__imp_PEM_read_bio_EC_PUBKEYPEM_read_bio_NETSCAPE_CERT_SEQUENCE__imp_PEM_read_bio_NETSCAPE_CERT_SEQUENCEPEM_read_bio_PKCS7__imp_PEM_read_bio_PKCS7PEM_read_bio_PKCS8__imp_PEM_read_bio_PKCS8PEM_read_bio_PKCS8_PRIV_KEY_INFO__imp_PEM_read_bio_PKCS8_PRIV_KEY_INFOPEM_read_bio_PUBKEY__imp_PEM_read_bio_PUBKEYPEM_read_bio_Parameters__imp_PEM_read_bio_ParametersPEM_read_bio_PrivateKey__imp_PEM_read_bio_PrivateKeyPEM_read_bio_RSAPrivateKey__imp_PEM_read_bio_RSAPrivateKeyPEM_read_bio_RSAPublicKey__imp_PEM_read_bio_RSAPublicKeyPEM_read_bio_RSA_PUBKEY__imp_PEM_read_bio_RSA_PUBKEYPEM_read_bio_X509__imp_PEM_read_bio_X509PEM_read_bio_X509_AUX__imp_PEM_read_bio_X509_AUXPEM_read_bio_X509_CERT_PAIR__imp_PEM_read_bio_X509_CERT_PAIRPEM_read_bio_X509_CRL__imp_PEM_read_bio_X509_CRLPEM_read_bio_X509_REQ__imp_PEM_read_bio_X509_REQPEM_write__imp_PEM_writePEM_write_CMS__imp_PEM_write_CMSPEM_write_DHparams__imp_PEM_write_DHparamsPEM_write_DHxparams__imp_PEM_write_DHxparamsPEM_write_DSAPrivateKey__imp_PEM_write_DSAPrivateKeyPEM_write_DSA_PUBKEY__imp_PEM_write_DSA_PUBKEYPEM_write_DSAparams__imp_PEM_write_DSAparamsPEM_write_ECPKParameters__imp_PEM_write_ECPKParametersPEM_write_ECPrivateKey__imp_PEM_write_ECPrivateKeyPEM_write_EC_PUBKEY__imp_PEM_write_EC_PUBKEYPEM_write_NETSCAPE_CERT_SEQUENCE__imp_PEM_write_NETSCAPE_CERT_SEQUENCEPEM_write_PKCS7__imp_PEM_write_PKCS7PEM_write_PKCS8PrivateKey__imp_PEM_write_PKCS8PrivateKeyPEM_write_PKCS8PrivateKey_nid__imp_PEM_write_PKCS8PrivateKey_nidPEM_write_PKCS8__imp_PEM_write_PKCS8PEM_write_PKCS8_PRIV_KEY_INFO__imp_PEM_write_PKCS8_PRIV_KEY_INFOPEM_write_PUBKEY__imp_PEM_write_PUBKEYPEM_write_PrivateKey__imp_PEM_write_PrivateKeyPEM_write_RSAPrivateKey__imp_PEM_write_RSAPrivateKeyPEM_write_RSAPublicKey__imp_PEM_write_RSAPublicKeyPEM_write_RSA_PUBKEY__imp_PEM_write_RSA_PUBKEYPEM_write_X509__imp_PEM_write_X509PEM_write_X509_AUX__imp_PEM_write_X509_AUXPEM_write_X509_CERT_PAIR__imp_PEM_write_X509_CERT_PAIRPEM_write_X509_CRL__imp_PEM_write_X509_CRLPEM_write_X509_REQ__imp_PEM_write_X509_REQPEM_write_X509_REQ_NEW__imp_PEM_write_X509_REQ_NEWPEM_write_bio__imp_PEM_write_bioPEM_write_bio_ASN1_stream__imp_PEM_write_bio_ASN1_streamPEM_write_bio_CMS__imp_PEM_write_bio_CMSPEM_write_bio_CMS_stream__imp_PEM_write_bio_CMS_streamPEM_write_bio_DHparams__imp_PEM_write_bio_DHparamsPEM_write_bio_DHxparams__imp_PEM_write_bio_DHxparamsPEM_write_bio_DSAPrivateKey__imp_PEM_write_bio_DSAPrivateKeyPEM_write_bio_DSA_PUBKEY__imp_PEM_write_bio_DSA_PUBKEYPEM_write_bio_DSAparams__imp_PEM_write_bio_DSAparamsPEM_write_bio_ECPKParameters__imp_PEM_write_bio_ECPKParametersPEM_write_bio_ECPrivateKey__imp_PEM_write_bio_ECPrivateKeyPEM_write_bio_EC_PUBKEY__imp_PEM_write_bio_EC_PUBKEYPEM_write_bio_NETSCAPE_CERT_SEQUENCE__imp_PEM_write_bio_NETSCAPE_CERT_SEQUENCEPEM_write_bio_PKCS7__imp_PEM_write_bio_PKCS7PEM_write_bio_PKCS7_stream__imp_PEM_write_bio_PKCS7_streamPEM_write_bio_PKCS8PrivateKey__imp_PEM_write_bio_PKCS8PrivateKeyPEM_write_bio_PKCS8PrivateKey_nid__imp_PEM_write_bio_PKCS8PrivateKey_nidPEM_write_bio_PKCS8__imp_PEM_write_bio_PKCS8PEM_write_bio_PKCS8_PRIV_KEY_INFO__imp_PEM_write_bio_PKCS8_PRIV_KEY_INFOPEM_write_bio_PUBKEY__imp_PEM_write_bio_PUBKEYPEM_write_bio_Parameters__imp_PEM_write_bio_ParametersPEM_write_bio_PrivateKey__imp_PEM_write_bio_PrivateKeyPEM_write_bio_RSAPrivateKey__imp_PEM_write_bio_RSAPrivateKeyPEM_write_bio_RSAPublicKey__imp_PEM_write_bio_RSAPublicKeyPEM_write_bio_RSA_PUBKEY__imp_PEM_write_bio_RSA_PUBKEYPEM_write_bio_X509__imp_PEM_write_bio_X509PEM_write_bio_X509_AUX__imp_PEM_write_bio_X509_AUXPEM_write_bio_X509_CERT_PAIR__imp_PEM_write_bio_X509_CERT_PAIRPEM_write_bio_X509_CRL__imp_PEM_write_bio_X509_CRLPEM_write_bio_X509_REQ__imp_PEM_write_bio_X509_REQPEM_write_bio_X509_REQ_NEW__imp_PEM_write_bio_X509_REQ_NEWPKCS12_AUTHSAFES_it__imp_PKCS12_AUTHSAFES_itPKCS12_BAGS_free__imp_PKCS12_BAGS_freePKCS12_BAGS_it__imp_PKCS12_BAGS_itPKCS12_BAGS_new__imp_PKCS12_BAGS_newPKCS12_MAC_DATA_free__imp_PKCS12_MAC_DATA_freePKCS12_MAC_DATA_it__imp_PKCS12_MAC_DATA_itPKCS12_MAC_DATA_new__imp_PKCS12_MAC_DATA_newPKCS12_MAKE_KEYBAG__imp_PKCS12_MAKE_KEYBAGPKCS12_MAKE_SHKEYBAG__imp_PKCS12_MAKE_SHKEYBAGPKCS12_PBE_add__imp_PKCS12_PBE_addPKCS12_PBE_keyivgen__imp_PKCS12_PBE_keyivgenPKCS12_SAFEBAGS_it__imp_PKCS12_SAFEBAGS_itPKCS12_SAFEBAG_free__imp_PKCS12_SAFEBAG_freePKCS12_SAFEBAG_it__imp_PKCS12_SAFEBAG_itPKCS12_SAFEBAG_new__imp_PKCS12_SAFEBAG_newPKCS12_add_CSPName_asc__imp_PKCS12_add_CSPName_ascPKCS12_add_cert__imp_PKCS12_add_certPKCS12_add_friendlyname_asc__imp_PKCS12_add_friendlyname_ascPKCS12_add_friendlyname_uni__imp_PKCS12_add_friendlyname_uniPKCS12_add_key__imp_PKCS12_add_keyPKCS12_add_localkeyid__imp_PKCS12_add_localkeyidPKCS12_add_safe__imp_PKCS12_add_safePKCS12_add_safes__imp_PKCS12_add_safesPKCS12_certbag2x509__imp_PKCS12_certbag2x509PKCS12_certbag2x509crl__imp_PKCS12_certbag2x509crlPKCS12_create__imp_PKCS12_createPKCS12_decrypt_skey__imp_PKCS12_decrypt_skeyPKCS12_free__imp_PKCS12_freePKCS12_gen_mac__imp_PKCS12_gen_macPKCS12_get_attr_gen__imp_PKCS12_get_attr_genPKCS12_get_friendlyname__imp_PKCS12_get_friendlynamePKCS12_init__imp_PKCS12_initPKCS12_item_decrypt_d2i__imp_PKCS12_item_decrypt_d2iPKCS12_item_i2d_encrypt__imp_PKCS12_item_i2d_encryptPKCS12_item_pack_safebag__imp_PKCS12_item_pack_safebagPKCS12_it__imp_PKCS12_itPKCS12_key_gen_asc__imp_PKCS12_key_gen_ascPKCS12_key_gen_uni__imp_PKCS12_key_gen_uniPKCS12_new__imp_PKCS12_newPKCS12_newpass__imp_PKCS12_newpassPKCS12_pack_authsafes__imp_PKCS12_pack_authsafesPKCS12_pack_p7data__imp_PKCS12_pack_p7dataPKCS12_pack_p7encdata__imp_PKCS12_pack_p7encdataPKCS12_parse__imp_PKCS12_parsePKCS12_pbe_crypt__imp_PKCS12_pbe_cryptPKCS12_set_mac__imp_PKCS12_set_macPKCS12_setup_mac__imp_PKCS12_setup_macPKCS12_unpack_authsafes__imp_PKCS12_unpack_authsafesPKCS12_unpack_p7data__imp_PKCS12_unpack_p7dataPKCS12_unpack_p7encdata__imp_PKCS12_unpack_p7encdataPKCS12_verify_mac__imp_PKCS12_verify_macPKCS12_x5092certbag__imp_PKCS12_x5092certbagPKCS12_x509crl2certbag__imp_PKCS12_x509crl2certbagPKCS1_MGF1__imp_PKCS1_MGF1PKCS5_PBE_add__imp_PKCS5_PBE_addPKCS5_PBE_keyivgen__imp_PKCS5_PBE_keyivgenPKCS5_PBKDF2_HMAC__imp_PKCS5_PBKDF2_HMACPKCS5_PBKDF2_HMAC_SHA1__imp_PKCS5_PBKDF2_HMAC_SHA1PKCS5_pbe2_set__imp_PKCS5_pbe2_setPKCS5_pbe2_set_iv__imp_PKCS5_pbe2_set_ivPKCS5_pbe_set0_algor__imp_PKCS5_pbe_set0_algorPKCS5_pbe_set__imp_PKCS5_pbe_setPKCS5_pbkdf2_set__imp_PKCS5_pbkdf2_setPKCS5_v2_PBE_keyivgen__imp_PKCS5_v2_PBE_keyivgenPKCS7_ATTR_SIGN_it__imp_PKCS7_ATTR_SIGN_itPKCS7_ATTR_VERIFY_it__imp_PKCS7_ATTR_VERIFY_itPKCS7_DIGEST_free__imp_PKCS7_DIGEST_freePKCS7_DIGEST_it__imp_PKCS7_DIGEST_itPKCS7_DIGEST_new__imp_PKCS7_DIGEST_newPKCS7_ENCRYPT_free__imp_PKCS7_ENCRYPT_freePKCS7_ENCRYPT_it__imp_PKCS7_ENCRYPT_itPKCS7_ENCRYPT_new__imp_PKCS7_ENCRYPT_newPKCS7_ENC_CONTENT_free__imp_PKCS7_ENC_CONTENT_freePKCS7_ENC_CONTENT_it__imp_PKCS7_ENC_CONTENT_itPKCS7_ENC_CONTENT_new__imp_PKCS7_ENC_CONTENT_newPKCS7_ENVELOPE_free__imp_PKCS7_ENVELOPE_freePKCS7_ENVELOPE_it__imp_PKCS7_ENVELOPE_itPKCS7_ENVELOPE_new__imp_PKCS7_ENVELOPE_newPKCS7_ISSUER_AND_SERIAL_digest__imp_PKCS7_ISSUER_AND_SERIAL_digestPKCS7_ISSUER_AND_SERIAL_free__imp_PKCS7_ISSUER_AND_SERIAL_freePKCS7_ISSUER_AND_SERIAL_it__imp_PKCS7_ISSUER_AND_SERIAL_itPKCS7_ISSUER_AND_SERIAL_new__imp_PKCS7_ISSUER_AND_SERIAL_newPKCS7_RECIP_INFO_free__imp_PKCS7_RECIP_INFO_freePKCS7_RECIP_INFO_get0_alg__imp_PKCS7_RECIP_INFO_get0_algPKCS7_RECIP_INFO_it__imp_PKCS7_RECIP_INFO_itPKCS7_RECIP_INFO_new__imp_PKCS7_RECIP_INFO_newPKCS7_RECIP_INFO_set__imp_PKCS7_RECIP_INFO_setPKCS7_SIGNED_free__imp_PKCS7_SIGNED_freePKCS7_SIGNED_it__imp_PKCS7_SIGNED_itPKCS7_SIGNED_new__imp_PKCS7_SIGNED_newPKCS7_SIGNER_INFO_free__imp_PKCS7_SIGNER_INFO_freePKCS7_SIGNER_INFO_get0_algs__imp_PKCS7_SIGNER_INFO_get0_algsPKCS7_SIGNER_INFO_it__imp_PKCS7_SIGNER_INFO_itPKCS7_SIGNER_INFO_new__imp_PKCS7_SIGNER_INFO_newPKCS7_SIGNER_INFO_set__imp_PKCS7_SIGNER_INFO_setPKCS7_SIGNER_INFO_sign__imp_PKCS7_SIGNER_INFO_signPKCS7_SIGN_ENVELOPE_free__imp_PKCS7_SIGN_ENVELOPE_freePKCS7_SIGN_ENVELOPE_it__imp_PKCS7_SIGN_ENVELOPE_itPKCS7_SIGN_ENVELOPE_new__imp_PKCS7_SIGN_ENVELOPE_newPKCS7_add0_attrib_signing_time__imp_PKCS7_add0_attrib_signing_timePKCS7_add1_attrib_digest__imp_PKCS7_add1_attrib_digestPKCS7_add_attrib_content_type__imp_PKCS7_add_attrib_content_typePKCS7_add_attrib_smimecap__imp_PKCS7_add_attrib_smimecapPKCS7_add_attribute__imp_PKCS7_add_attributePKCS7_add_certificate__imp_PKCS7_add_certificatePKCS7_add_crl__imp_PKCS7_add_crlPKCS7_add_recipient__imp_PKCS7_add_recipientPKCS7_add_recipient_info__imp_PKCS7_add_recipient_infoPKCS7_add_signature__imp_PKCS7_add_signaturePKCS7_add_signed_attribute__imp_PKCS7_add_signed_attributePKCS7_add_signer__imp_PKCS7_add_signerPKCS7_cert_from_signer_info__imp_PKCS7_cert_from_signer_infoPKCS7_content_new__imp_PKCS7_content_newPKCS7_ctrl__imp_PKCS7_ctrlPKCS7_dataDecode__imp_PKCS7_dataDecodePKCS7_dataFinal__imp_PKCS7_dataFinalPKCS7_dataInit__imp_PKCS7_dataInitPKCS7_dataVerify__imp_PKCS7_dataVerifyPKCS7_decrypt__imp_PKCS7_decryptPKCS7_digest_from_attributes__imp_PKCS7_digest_from_attributesPKCS7_dup__imp_PKCS7_dupPKCS7_encrypt__imp_PKCS7_encryptPKCS7_final__imp_PKCS7_finalPKCS7_free__imp_PKCS7_freePKCS7_get0_signers__imp_PKCS7_get0_signersPKCS7_get_attribute__imp_PKCS7_get_attributePKCS7_get_issuer_and_serial__imp_PKCS7_get_issuer_and_serialPKCS7_get_signed_attribute__imp_PKCS7_get_signed_attributePKCS7_get_signer_info__imp_PKCS7_get_signer_infoPKCS7_get_smimecap__imp_PKCS7_get_smimecapPKCS7_it__imp_PKCS7_itPKCS7_new__imp_PKCS7_newPKCS7_print_ctx__imp_PKCS7_print_ctxPKCS7_set0_type_other__imp_PKCS7_set0_type_otherPKCS7_set_attributes__imp_PKCS7_set_attributesPKCS7_set_cipher__imp_PKCS7_set_cipherPKCS7_set_content__imp_PKCS7_set_contentPKCS7_set_digest__imp_PKCS7_set_digestPKCS7_set_signed_attributes__imp_PKCS7_set_signed_attributesPKCS7_set_type__imp_PKCS7_set_typePKCS7_sign__imp_PKCS7_signPKCS7_sign_add_signer__imp_PKCS7_sign_add_signerPKCS7_signatureVerify__imp_PKCS7_signatureVerifyPKCS7_simple_smimecap__imp_PKCS7_simple_smimecapPKCS7_stream__imp_PKCS7_streamPKCS7_to_TS_TST_INFO__imp_PKCS7_to_TS_TST_INFOPKCS7_verify__imp_PKCS7_verifyPKCS8_PRIV_KEY_INFO_free__imp_PKCS8_PRIV_KEY_INFO_freePKCS8_PRIV_KEY_INFO_it__imp_PKCS8_PRIV_KEY_INFO_itPKCS8_PRIV_KEY_INFO_new__imp_PKCS8_PRIV_KEY_INFO_newPKCS8_add_keyusage__imp_PKCS8_add_keyusagePKCS8_decrypt__imp_PKCS8_decryptPKCS8_encrypt__imp_PKCS8_encryptPKCS8_pkey_get0__imp_PKCS8_pkey_get0PKCS8_pkey_set0__imp_PKCS8_pkey_set0PKCS8_set_broken__imp_PKCS8_set_brokenPKEY_USAGE_PERIOD_free__imp_PKEY_USAGE_PERIOD_freePKEY_USAGE_PERIOD_it__imp_PKEY_USAGE_PERIOD_itPKEY_USAGE_PERIOD_new__imp_PKEY_USAGE_PERIOD_newPOLICYINFO_free__imp_POLICYINFO_freePOLICYINFO_it__imp_POLICYINFO_itPOLICYINFO_new__imp_POLICYINFO_newPOLICYQUALINFO_free__imp_POLICYQUALINFO_freePOLICYQUALINFO_it__imp_POLICYQUALINFO_itPOLICYQUALINFO_new__imp_POLICYQUALINFO_newPOLICY_CONSTRAINTS_free__imp_POLICY_CONSTRAINTS_freePOLICY_CONSTRAINTS_it__imp_POLICY_CONSTRAINTS_itPOLICY_CONSTRAINTS_new__imp_POLICY_CONSTRAINTS_newPOLICY_MAPPINGS_it__imp_POLICY_MAPPINGS_itPOLICY_MAPPING_free__imp_POLICY_MAPPING_freePOLICY_MAPPING_it__imp_POLICY_MAPPING_itPOLICY_MAPPING_new__imp_POLICY_MAPPING_newPROXY_CERT_INFO_EXTENSION_free__imp_PROXY_CERT_INFO_EXTENSION_freePROXY_CERT_INFO_EXTENSION_it__imp_PROXY_CERT_INFO_EXTENSION_itPROXY_CERT_INFO_EXTENSION_new__imp_PROXY_CERT_INFO_EXTENSION_newPROXY_POLICY_free__imp_PROXY_POLICY_freePROXY_POLICY_it__imp_PROXY_POLICY_itPROXY_POLICY_new__imp_PROXY_POLICY_newRAND_SSLeay__imp_RAND_SSLeayRAND_add__imp_RAND_addRAND_bytes__imp_RAND_bytesRAND_cleanup__imp_RAND_cleanupRAND_egd__imp_RAND_egdRAND_egd_bytes__imp_RAND_egd_bytesRAND_event__imp_RAND_eventRAND_file_name__imp_RAND_file_nameRAND_get_rand_method__imp_RAND_get_rand_methodRAND_load_file__imp_RAND_load_fileRAND_poll__imp_RAND_pollRAND_pseudo_bytes__imp_RAND_pseudo_bytesRAND_query_egd_bytes__imp_RAND_query_egd_bytesRAND_screen__imp_RAND_screenRAND_seed__imp_RAND_seedRAND_set_rand_engine__imp_RAND_set_rand_engineRAND_set_rand_method__imp_RAND_set_rand_methodRAND_status__imp_RAND_statusRAND_write_file__imp_RAND_write_fileRC2_cbc_encrypt__imp_RC2_cbc_encryptRC2_cfb64_encrypt__imp_RC2_cfb64_encryptRC2_decrypt__imp_RC2_decryptRC2_ecb_encrypt__imp_RC2_ecb_encryptRC2_encrypt__imp_RC2_encryptRC2_ofb64_encrypt__imp_RC2_ofb64_encryptRC2_set_key__imp_RC2_set_keyRC4__imp_RC4RC4_options__imp_RC4_optionsRC4_set_key__imp_RC4_set_keyRIPEMD160__imp_RIPEMD160RIPEMD160_Final__imp_RIPEMD160_FinalRIPEMD160_Init__imp_RIPEMD160_InitRIPEMD160_Transform__imp_RIPEMD160_TransformRIPEMD160_Update__imp_RIPEMD160_UpdateRSAPrivateKey_dup__imp_RSAPrivateKey_dupRSAPrivateKey_it__imp_RSAPrivateKey_itRSAPublicKey_dup__imp_RSAPublicKey_dupRSAPublicKey_it__imp_RSAPublicKey_itRSA_OAEP_PARAMS_free__imp_RSA_OAEP_PARAMS_freeRSA_OAEP_PARAMS_it__imp_RSA_OAEP_PARAMS_itRSA_OAEP_PARAMS_new__imp_RSA_OAEP_PARAMS_newRSA_PKCS1_SSLeay__imp_RSA_PKCS1_SSLeayRSA_PSS_PARAMS_free__imp_RSA_PSS_PARAMS_freeRSA_PSS_PARAMS_it__imp_RSA_PSS_PARAMS_itRSA_PSS_PARAMS_new__imp_RSA_PSS_PARAMS_newRSA_X931_hash_id__imp_RSA_X931_hash_idRSA_blinding_off__imp_RSA_blinding_offRSA_blinding_on__imp_RSA_blinding_onRSA_check_key__imp_RSA_check_keyRSA_flags__imp_RSA_flagsRSA_free__imp_RSA_freeRSA_generate_key__imp_RSA_generate_keyRSA_generate_key_ex__imp_RSA_generate_key_exRSA_get_default_method__imp_RSA_get_default_methodRSA_get_ex_data__imp_RSA_get_ex_dataRSA_get_ex_new_index__imp_RSA_get_ex_new_indexRSA_get_method__imp_RSA_get_methodRSA_memory_lock__imp_RSA_memory_lockRSA_new__imp_RSA_newRSA_new_method__imp_RSA_new_methodRSA_null_method__imp_RSA_null_methodRSA_padding_add_PKCS1_OAEP__imp_RSA_padding_add_PKCS1_OAEPRSA_padding_add_PKCS1_OAEP_mgf1__imp_RSA_padding_add_PKCS1_OAEP_mgf1RSA_padding_add_PKCS1_PSS__imp_RSA_padding_add_PKCS1_PSSRSA_padding_add_PKCS1_PSS_mgf1__imp_RSA_padding_add_PKCS1_PSS_mgf1RSA_padding_add_PKCS1_type_1__imp_RSA_padding_add_PKCS1_type_1RSA_padding_add_PKCS1_type_2__imp_RSA_padding_add_PKCS1_type_2RSA_padding_add_SSLv23__imp_RSA_padding_add_SSLv23RSA_padding_add_X931__imp_RSA_padding_add_X931RSA_padding_add_none__imp_RSA_padding_add_noneRSA_padding_check_PKCS1_OAEP__imp_RSA_padding_check_PKCS1_OAEPRSA_padding_check_PKCS1_OAEP_mgf1__imp_RSA_padding_check_PKCS1_OAEP_mgf1RSA_padding_check_PKCS1_type_1__imp_RSA_padding_check_PKCS1_type_1RSA_padding_check_PKCS1_type_2__imp_RSA_padding_check_PKCS1_type_2RSA_padding_check_SSLv23__imp_RSA_padding_check_SSLv23RSA_padding_check_X931__imp_RSA_padding_check_X931RSA_padding_check_none__imp_RSA_padding_check_noneRSA_print__imp_RSA_printRSA_print_fp__imp_RSA_print_fpRSA_private_decrypt__imp_RSA_private_decryptRSA_private_encrypt__imp_RSA_private_encryptRSA_public_decrypt__imp_RSA_public_decryptRSA_public_encrypt__imp_RSA_public_encryptRSA_set_default_method__imp_RSA_set_default_methodRSA_set_ex_data__imp_RSA_set_ex_dataRSA_set_method__imp_RSA_set_methodRSA_setup_blinding__imp_RSA_setup_blindingRSA_sign__imp_RSA_signRSA_sign_ASN1_OCTET_STRING__imp_RSA_sign_ASN1_OCTET_STRINGRSA_size__imp_RSA_sizeRSA_up_ref__imp_RSA_up_refRSA_verify__imp_RSA_verifyRSA_verify_ASN1_OCTET_STRING__imp_RSA_verify_ASN1_OCTET_STRINGRSA_verify_PKCS1_PSS__imp_RSA_verify_PKCS1_PSSRSA_verify_PKCS1_PSS_mgf1__imp_RSA_verify_PKCS1_PSS_mgf1SEED_cbc_encrypt__imp_SEED_cbc_encryptSEED_cfb128_encrypt__imp_SEED_cfb128_encryptSEED_decrypt__imp_SEED_decryptSEED_ecb_encrypt__imp_SEED_ecb_encryptSEED_encrypt__imp_SEED_encryptSEED_ofb128_encrypt__imp_SEED_ofb128_encryptSEED_set_key__imp_SEED_set_keySHA1__imp_SHA1SHA1_Final__imp_SHA1_FinalSHA1_Init__imp_SHA1_InitSHA1_Transform__imp_SHA1_TransformSHA1_Update__imp_SHA1_UpdateSHA224__imp_SHA224SHA224_Final__imp_SHA224_FinalSHA224_Init__imp_SHA224_InitSHA224_Update__imp_SHA224_UpdateSHA256__imp_SHA256SHA256_Final__imp_SHA256_FinalSHA256_Init__imp_SHA256_InitSHA256_Transform__imp_SHA256_TransformSHA256_Update__imp_SHA256_UpdateSHA384__imp_SHA384SHA384_Final__imp_SHA384_FinalSHA384_Init__imp_SHA384_InitSHA384_Update__imp_SHA384_UpdateSHA512__imp_SHA512SHA512_Final__imp_SHA512_FinalSHA512_Init__imp_SHA512_InitSHA512_Transform__imp_SHA512_TransformSHA512_Update__imp_SHA512_UpdateSHA__imp_SHASHA_Final__imp_SHA_FinalSHA_Init__imp_SHA_InitSHA_Transform__imp_SHA_TransformSHA_Update__imp_SHA_UpdateSMIME_crlf_copy__imp_SMIME_crlf_copySMIME_read_ASN1__imp_SMIME_read_ASN1SMIME_read_CMS__imp_SMIME_read_CMSSMIME_read_PKCS7__imp_SMIME_read_PKCS7SMIME_text__imp_SMIME_textSMIME_write_ASN1__imp_SMIME_write_ASN1SMIME_write_CMS__imp_SMIME_write_CMSSMIME_write_PKCS7__imp_SMIME_write_PKCS7SRP_Calc_A__imp_SRP_Calc_ASRP_Calc_B__imp_SRP_Calc_BSRP_Calc_client_key__imp_SRP_Calc_client_keySRP_Calc_server_key__imp_SRP_Calc_server_keySRP_Calc_u__imp_SRP_Calc_uSRP_Calc_x__imp_SRP_Calc_xSRP_VBASE_free__imp_SRP_VBASE_freeSRP_VBASE_get1_by_user__imp_SRP_VBASE_get1_by_userSRP_VBASE_get_by_user__imp_SRP_VBASE_get_by_userSRP_VBASE_init__imp_SRP_VBASE_initSRP_VBASE_new__imp_SRP_VBASE_newSRP_Verify_A_mod_N__imp_SRP_Verify_A_mod_NSRP_Verify_B_mod_N__imp_SRP_Verify_B_mod_NSRP_check_known_gN_param__imp_SRP_check_known_gN_paramSRP_create_verifier__imp_SRP_create_verifierSRP_create_verifier_BN__imp_SRP_create_verifier_BNSRP_get_default_gN__imp_SRP_get_default_gNSRP_user_pwd_free__imp_SRP_user_pwd_freeSSLeay_version__imp_SSLeay_versionSXNETID_free__imp_SXNETID_freeSXNETID_it__imp_SXNETID_itSXNETID_new__imp_SXNETID_newSXNET_add_id_INTEGER__imp_SXNET_add_id_INTEGERSXNET_add_id_asc__imp_SXNET_add_id_ascSXNET_add_id_ulong__imp_SXNET_add_id_ulongSXNET_free__imp_SXNET_freeSXNET_get_id_INTEGER__imp_SXNET_get_id_INTEGERSXNET_get_id_asc__imp_SXNET_get_id_ascSXNET_get_id_ulong__imp_SXNET_get_id_ulongSXNET_it__imp_SXNET_itSXNET_new__imp_SXNET_newTS_ACCURACY_dup__imp_TS_ACCURACY_dupTS_ACCURACY_free__imp_TS_ACCURACY_freeTS_ACCURACY_get_micros__imp_TS_ACCURACY_get_microsTS_ACCURACY_get_millis__imp_TS_ACCURACY_get_millisTS_ACCURACY_get_seconds__imp_TS_ACCURACY_get_secondsTS_ACCURACY_new__imp_TS_ACCURACY_newTS_ACCURACY_set_micros__imp_TS_ACCURACY_set_microsTS_ACCURACY_set_millis__imp_TS_ACCURACY_set_millisTS_ACCURACY_set_seconds__imp_TS_ACCURACY_set_secondsTS_ASN1_INTEGER_print_bio__imp_TS_ASN1_INTEGER_print_bioTS_CONF_get_tsa_section__imp_TS_CONF_get_tsa_sectionTS_CONF_load_cert__imp_TS_CONF_load_certTS_CONF_load_certs__imp_TS_CONF_load_certsTS_CONF_load_key__imp_TS_CONF_load_keyTS_CONF_set_accuracy__imp_TS_CONF_set_accuracyTS_CONF_set_certs__imp_TS_CONF_set_certsTS_CONF_set_clock_precision_digits__imp_TS_CONF_set_clock_precision_digitsTS_CONF_set_crypto_device__imp_TS_CONF_set_crypto_deviceTS_CONF_set_def_policy__imp_TS_CONF_set_def_policyTS_CONF_set_default_engine__imp_TS_CONF_set_default_engineTS_CONF_set_digests__imp_TS_CONF_set_digestsTS_CONF_set_ess_cert_id_chain__imp_TS_CONF_set_ess_cert_id_chainTS_CONF_set_ordering__imp_TS_CONF_set_orderingTS_CONF_set_policies__imp_TS_CONF_set_policiesTS_CONF_set_serial__imp_TS_CONF_set_serialTS_CONF_set_signer_cert__imp_TS_CONF_set_signer_certTS_CONF_set_signer_key__imp_TS_CONF_set_signer_keyTS_CONF_set_tsa_name__imp_TS_CONF_set_tsa_nameTS_MSG_IMPRINT_dup__imp_TS_MSG_IMPRINT_dupTS_MSG_IMPRINT_free__imp_TS_MSG_IMPRINT_freeTS_MSG_IMPRINT_get_algo__imp_TS_MSG_IMPRINT_get_algoTS_MSG_IMPRINT_get_msg__imp_TS_MSG_IMPRINT_get_msgTS_MSG_IMPRINT_new__imp_TS_MSG_IMPRINT_newTS_MSG_IMPRINT_print_bio__imp_TS_MSG_IMPRINT_print_bioTS_MSG_IMPRINT_set_algo__imp_TS_MSG_IMPRINT_set_algoTS_MSG_IMPRINT_set_msg__imp_TS_MSG_IMPRINT_set_msgTS_OBJ_print_bio__imp_TS_OBJ_print_bioTS_REQ_add_ext__imp_TS_REQ_add_extTS_REQ_delete_ext__imp_TS_REQ_delete_extTS_REQ_dup__imp_TS_REQ_dupTS_REQ_ext_free__imp_TS_REQ_ext_freeTS_REQ_free__imp_TS_REQ_freeTS_REQ_get_cert_req__imp_TS_REQ_get_cert_reqTS_REQ_get_ext__imp_TS_REQ_get_extTS_REQ_get_ext_by_NID__imp_TS_REQ_get_ext_by_NIDTS_REQ_get_ext_by_OBJ__imp_TS_REQ_get_ext_by_OBJTS_REQ_get_ext_by_critical__imp_TS_REQ_get_ext_by_criticalTS_REQ_get_ext_count__imp_TS_REQ_get_ext_countTS_REQ_get_ext_d2i__imp_TS_REQ_get_ext_d2iTS_REQ_get_exts__imp_TS_REQ_get_extsTS_REQ_get_msg_imprint__imp_TS_REQ_get_msg_imprintTS_REQ_get_nonce__imp_TS_REQ_get_nonceTS_REQ_get_policy_id__imp_TS_REQ_get_policy_idTS_REQ_get_version__imp_TS_REQ_get_versionTS_REQ_new__imp_TS_REQ_newTS_REQ_print_bio__imp_TS_REQ_print_bioTS_REQ_set_cert_req__imp_TS_REQ_set_cert_reqTS_REQ_set_msg_imprint__imp_TS_REQ_set_msg_imprintTS_REQ_set_nonce__imp_TS_REQ_set_nonceTS_REQ_set_policy_id__imp_TS_REQ_set_policy_idTS_REQ_set_version__imp_TS_REQ_set_versionTS_REQ_to_TS_VERIFY_CTX__imp_TS_REQ_to_TS_VERIFY_CTXTS_RESP_CTX_add_failure_info__imp_TS_RESP_CTX_add_failure_infoTS_RESP_CTX_add_flags__imp_TS_RESP_CTX_add_flagsTS_RESP_CTX_add_md__imp_TS_RESP_CTX_add_mdTS_RESP_CTX_add_policy__imp_TS_RESP_CTX_add_policyTS_RESP_CTX_free__imp_TS_RESP_CTX_freeTS_RESP_CTX_get_request__imp_TS_RESP_CTX_get_requestTS_RESP_CTX_get_tst_info__imp_TS_RESP_CTX_get_tst_infoTS_RESP_CTX_new__imp_TS_RESP_CTX_newTS_RESP_CTX_set_accuracy__imp_TS_RESP_CTX_set_accuracyTS_RESP_CTX_set_certs__imp_TS_RESP_CTX_set_certsTS_RESP_CTX_set_clock_precision_digits__imp_TS_RESP_CTX_set_clock_precision_digitsTS_RESP_CTX_set_def_policy__imp_TS_RESP_CTX_set_def_policyTS_RESP_CTX_set_extension_cb__imp_TS_RESP_CTX_set_extension_cbTS_RESP_CTX_set_serial_cb__imp_TS_RESP_CTX_set_serial_cbTS_RESP_CTX_set_signer_cert__imp_TS_RESP_CTX_set_signer_certTS_RESP_CTX_set_signer_key__imp_TS_RESP_CTX_set_signer_keyTS_RESP_CTX_set_status_info__imp_TS_RESP_CTX_set_status_infoTS_RESP_CTX_set_status_info_cond__imp_TS_RESP_CTX_set_status_info_condTS_RESP_CTX_set_time_cb__imp_TS_RESP_CTX_set_time_cbTS_RESP_create_response__imp_TS_RESP_create_responseTS_RESP_dup__imp_TS_RESP_dupTS_RESP_free__imp_TS_RESP_freeTS_RESP_get_status_info__imp_TS_RESP_get_status_infoTS_RESP_get_token__imp_TS_RESP_get_tokenTS_RESP_get_tst_info__imp_TS_RESP_get_tst_infoTS_RESP_new__imp_TS_RESP_newTS_RESP_print_bio__imp_TS_RESP_print_bioTS_RESP_set_status_info__imp_TS_RESP_set_status_infoTS_RESP_set_tst_info__imp_TS_RESP_set_tst_infoTS_RESP_verify_response__imp_TS_RESP_verify_responseTS_RESP_verify_signature__imp_TS_RESP_verify_signatureTS_RESP_verify_token__imp_TS_RESP_verify_tokenTS_STATUS_INFO_dup__imp_TS_STATUS_INFO_dupTS_STATUS_INFO_free__imp_TS_STATUS_INFO_freeTS_STATUS_INFO_new__imp_TS_STATUS_INFO_newTS_STATUS_INFO_print_bio__imp_TS_STATUS_INFO_print_bioTS_TST_INFO_add_ext__imp_TS_TST_INFO_add_extTS_TST_INFO_delete_ext__imp_TS_TST_INFO_delete_extTS_TST_INFO_dup__imp_TS_TST_INFO_dupTS_TST_INFO_ext_free__imp_TS_TST_INFO_ext_freeTS_TST_INFO_free__imp_TS_TST_INFO_freeTS_TST_INFO_get_accuracy__imp_TS_TST_INFO_get_accuracyTS_TST_INFO_get_ext__imp_TS_TST_INFO_get_extTS_TST_INFO_get_ext_by_NID__imp_TS_TST_INFO_get_ext_by_NIDTS_TST_INFO_get_ext_by_OBJ__imp_TS_TST_INFO_get_ext_by_OBJTS_TST_INFO_get_ext_by_critical__imp_TS_TST_INFO_get_ext_by_criticalTS_TST_INFO_get_ext_count__imp_TS_TST_INFO_get_ext_countTS_TST_INFO_get_ext_d2i__imp_TS_TST_INFO_get_ext_d2iTS_TST_INFO_get_exts__imp_TS_TST_INFO_get_extsTS_TST_INFO_get_msg_imprint__imp_TS_TST_INFO_get_msg_imprintTS_TST_INFO_get_nonce__imp_TS_TST_INFO_get_nonceTS_TST_INFO_get_ordering__imp_TS_TST_INFO_get_orderingTS_TST_INFO_get_policy_id__imp_TS_TST_INFO_get_policy_idTS_TST_INFO_get_serial__imp_TS_TST_INFO_get_serialTS_TST_INFO_get_time__imp_TS_TST_INFO_get_timeTS_TST_INFO_get_tsa__imp_TS_TST_INFO_get_tsaTS_TST_INFO_get_version__imp_TS_TST_INFO_get_versionTS_TST_INFO_new__imp_TS_TST_INFO_newTS_TST_INFO_print_bio__imp_TS_TST_INFO_print_bioTS_TST_INFO_set_accuracy__imp_TS_TST_INFO_set_accuracyTS_TST_INFO_set_msg_imprint__imp_TS_TST_INFO_set_msg_imprintTS_TST_INFO_set_nonce__imp_TS_TST_INFO_set_nonceTS_TST_INFO_set_ordering__imp_TS_TST_INFO_set_orderingTS_TST_INFO_set_policy_id__imp_TS_TST_INFO_set_policy_idTS_TST_INFO_set_serial__imp_TS_TST_INFO_set_serialTS_TST_INFO_set_time__imp_TS_TST_INFO_set_timeTS_TST_INFO_set_tsa__imp_TS_TST_INFO_set_tsaTS_TST_INFO_set_version__imp_TS_TST_INFO_set_versionTS_VERIFY_CTX_cleanup__imp_TS_VERIFY_CTX_cleanupTS_VERIFY_CTX_free__imp_TS_VERIFY_CTX_freeTS_VERIFY_CTX_init__imp_TS_VERIFY_CTX_initTS_VERIFY_CTX_new__imp_TS_VERIFY_CTX_newTS_X509_ALGOR_print_bio__imp_TS_X509_ALGOR_print_bioTS_ext_print_bio__imp_TS_ext_print_bioTXT_DB_create_index__imp_TXT_DB_create_indexTXT_DB_free__imp_TXT_DB_freeTXT_DB_get_by_index__imp_TXT_DB_get_by_indexTXT_DB_insert__imp_TXT_DB_insertTXT_DB_read__imp_TXT_DB_readTXT_DB_write__imp_TXT_DB_writeUI_OpenSSL__imp_UI_OpenSSLUI_UTIL_read_pw__imp_UI_UTIL_read_pwUI_UTIL_read_pw_string__imp_UI_UTIL_read_pw_stringUI_add_error_string__imp_UI_add_error_stringUI_add_info_string__imp_UI_add_info_stringUI_add_input_boolean__imp_UI_add_input_booleanUI_add_input_string__imp_UI_add_input_stringUI_add_user_data__imp_UI_add_user_dataUI_add_verify_string__imp_UI_add_verify_stringUI_construct_prompt__imp_UI_construct_promptUI_create_method__imp_UI_create_methodUI_ctrl__imp_UI_ctrlUI_destroy_method__imp_UI_destroy_methodUI_dup_error_string__imp_UI_dup_error_stringUI_dup_info_string__imp_UI_dup_info_stringUI_dup_input_boolean__imp_UI_dup_input_booleanUI_dup_input_string__imp_UI_dup_input_stringUI_dup_verify_string__imp_UI_dup_verify_stringUI_free__imp_UI_freeUI_get0_action_string__imp_UI_get0_action_stringUI_get0_output_string__imp_UI_get0_output_stringUI_get0_result__imp_UI_get0_resultUI_get0_result_string__imp_UI_get0_result_stringUI_get0_test_string__imp_UI_get0_test_stringUI_get0_user_data__imp_UI_get0_user_dataUI_get_default_method__imp_UI_get_default_methodUI_get_ex_data__imp_UI_get_ex_dataUI_get_ex_new_index__imp_UI_get_ex_new_indexUI_get_input_flags__imp_UI_get_input_flagsUI_get_method__imp_UI_get_methodUI_get_result_maxsize__imp_UI_get_result_maxsizeUI_get_result_minsize__imp_UI_get_result_minsizeUI_get_string_type__imp_UI_get_string_typeUI_method_get_closer__imp_UI_method_get_closerUI_method_get_flusher__imp_UI_method_get_flusherUI_method_get_opener__imp_UI_method_get_openerUI_method_get_prompt_constructor__imp_UI_method_get_prompt_constructorUI_method_get_reader__imp_UI_method_get_readerUI_method_get_writer__imp_UI_method_get_writerUI_method_set_closer__imp_UI_method_set_closerUI_method_set_flusher__imp_UI_method_set_flusherUI_method_set_opener__imp_UI_method_set_openerUI_method_set_prompt_constructor__imp_UI_method_set_prompt_constructorUI_method_set_reader__imp_UI_method_set_readerUI_method_set_writer__imp_UI_method_set_writerUI_new__imp_UI_newUI_new_method__imp_UI_new_methodUI_process__imp_UI_processUI_set_default_method__imp_UI_set_default_methodUI_set_ex_data__imp_UI_set_ex_dataUI_set_method__imp_UI_set_methodUI_set_result__imp_UI_set_resultUSERNOTICE_free__imp_USERNOTICE_freeUSERNOTICE_it__imp_USERNOTICE_itUSERNOTICE_new__imp_USERNOTICE_newUTF8_getc__imp_UTF8_getcUTF8_putc__imp_UTF8_putcWHIRLPOOL__imp_WHIRLPOOLWHIRLPOOL_BitUpdate__imp_WHIRLPOOL_BitUpdateWHIRLPOOL_Final__imp_WHIRLPOOL_FinalWHIRLPOOL_Init__imp_WHIRLPOOL_InitWHIRLPOOL_Update__imp_WHIRLPOOL_UpdateX509V3_EXT_CRL_add_conf__imp_X509V3_EXT_CRL_add_confX509V3_EXT_CRL_add_nconf__imp_X509V3_EXT_CRL_add_nconfX509V3_EXT_REQ_add_conf__imp_X509V3_EXT_REQ_add_confX509V3_EXT_REQ_add_nconf__imp_X509V3_EXT_REQ_add_nconfX509V3_EXT_add__imp_X509V3_EXT_addX509V3_EXT_add_alias__imp_X509V3_EXT_add_aliasX509V3_EXT_add_conf__imp_X509V3_EXT_add_confX509V3_EXT_add_list__imp_X509V3_EXT_add_listX509V3_EXT_add_nconf__imp_X509V3_EXT_add_nconfX509V3_EXT_add_nconf_sk__imp_X509V3_EXT_add_nconf_skX509V3_EXT_cleanup__imp_X509V3_EXT_cleanupX509V3_EXT_conf__imp_X509V3_EXT_confX509V3_EXT_conf_nid__imp_X509V3_EXT_conf_nidX509V3_EXT_d2i__imp_X509V3_EXT_d2iX509V3_EXT_free__imp_X509V3_EXT_freeX509V3_EXT_get__imp_X509V3_EXT_getX509V3_EXT_get_nid__imp_X509V3_EXT_get_nidX509V3_EXT_i2d__imp_X509V3_EXT_i2dX509V3_EXT_nconf__imp_X509V3_EXT_nconfX509V3_EXT_nconf_nid__imp_X509V3_EXT_nconf_nidX509V3_EXT_print__imp_X509V3_EXT_printX509V3_EXT_print_fp__imp_X509V3_EXT_print_fpX509V3_EXT_val_prn__imp_X509V3_EXT_val_prnX509V3_NAME_from_section__imp_X509V3_NAME_from_sectionX509V3_add1_i2d__imp_X509V3_add1_i2dX509V3_add_standard_extensions__imp_X509V3_add_standard_extensionsX509V3_add_value__imp_X509V3_add_valueX509V3_add_value_bool__imp_X509V3_add_value_boolX509V3_add_value_bool_nf__imp_X509V3_add_value_bool_nfX509V3_add_value_int__imp_X509V3_add_value_intX509V3_add_value_uchar__imp_X509V3_add_value_ucharX509V3_conf_free__imp_X509V3_conf_freeX509V3_extensions_print__imp_X509V3_extensions_printX509V3_get_d2i__imp_X509V3_get_d2iX509V3_get_section__imp_X509V3_get_sectionX509V3_get_string__imp_X509V3_get_stringX509V3_get_value_bool__imp_X509V3_get_value_boolX509V3_get_value_int__imp_X509V3_get_value_intX509V3_parse_list__imp_X509V3_parse_listX509V3_section_free__imp_X509V3_section_freeX509V3_set_conf_lhash__imp_X509V3_set_conf_lhashX509V3_set_ctx__imp_X509V3_set_ctxX509V3_set_nconf__imp_X509V3_set_nconfX509V3_string_free__imp_X509V3_string_freeX509_ALGORS_it__imp_X509_ALGORS_itX509_ALGOR_cmp__imp_X509_ALGOR_cmpX509_ALGOR_dup__imp_X509_ALGOR_dupX509_ALGOR_free__imp_X509_ALGOR_freeX509_ALGOR_get0__imp_X509_ALGOR_get0X509_ALGOR_it__imp_X509_ALGOR_itX509_ALGOR_new__imp_X509_ALGOR_newX509_ALGOR_set0__imp_X509_ALGOR_set0X509_ALGOR_set_md__imp_X509_ALGOR_set_mdX509_ATTRIBUTE_count__imp_X509_ATTRIBUTE_countX509_ATTRIBUTE_create__imp_X509_ATTRIBUTE_createX509_ATTRIBUTE_create_by_NID__imp_X509_ATTRIBUTE_create_by_NIDX509_ATTRIBUTE_create_by_OBJ__imp_X509_ATTRIBUTE_create_by_OBJX509_ATTRIBUTE_create_by_txt__imp_X509_ATTRIBUTE_create_by_txtX509_ATTRIBUTE_dup__imp_X509_ATTRIBUTE_dupX509_ATTRIBUTE_free__imp_X509_ATTRIBUTE_freeX509_ATTRIBUTE_get0_data__imp_X509_ATTRIBUTE_get0_dataX509_ATTRIBUTE_get0_object__imp_X509_ATTRIBUTE_get0_objectX509_ATTRIBUTE_get0_type__imp_X509_ATTRIBUTE_get0_typeX509_ATTRIBUTE_it__imp_X509_ATTRIBUTE_itX509_ATTRIBUTE_new__imp_X509_ATTRIBUTE_newX509_ATTRIBUTE_set1_data__imp_X509_ATTRIBUTE_set1_dataX509_ATTRIBUTE_set1_object__imp_X509_ATTRIBUTE_set1_objectX509_CERT_AUX_free__imp_X509_CERT_AUX_freeX509_CERT_AUX_it__imp_X509_CERT_AUX_itX509_CERT_AUX_new__imp_X509_CERT_AUX_newX509_CERT_AUX_print__imp_X509_CERT_AUX_printX509_CERT_PAIR_free__imp_X509_CERT_PAIR_freeX509_CERT_PAIR_it__imp_X509_CERT_PAIR_itX509_CERT_PAIR_new__imp_X509_CERT_PAIR_newX509_CINF_free__imp_X509_CINF_freeX509_CINF_it__imp_X509_CINF_itX509_CINF_new__imp_X509_CINF_newX509_CRL_INFO_free__imp_X509_CRL_INFO_freeX509_CRL_INFO_it__imp_X509_CRL_INFO_itX509_CRL_INFO_new__imp_X509_CRL_INFO_newX509_CRL_METHOD_free__imp_X509_CRL_METHOD_freeX509_CRL_METHOD_new__imp_X509_CRL_METHOD_newX509_CRL_add0_revoked__imp_X509_CRL_add0_revokedX509_CRL_add1_ext_i2d__imp_X509_CRL_add1_ext_i2dX509_CRL_add_ext__imp_X509_CRL_add_extX509_CRL_check_suiteb__imp_X509_CRL_check_suitebX509_CRL_cmp__imp_X509_CRL_cmpX509_CRL_delete_ext__imp_X509_CRL_delete_extX509_CRL_diff__imp_X509_CRL_diffX509_CRL_digest__imp_X509_CRL_digestX509_CRL_dup__imp_X509_CRL_dupX509_CRL_free__imp_X509_CRL_freeX509_CRL_get0_by_cert__imp_X509_CRL_get0_by_certX509_CRL_get0_by_serial__imp_X509_CRL_get0_by_serialX509_CRL_get_ext__imp_X509_CRL_get_extX509_CRL_get_ext_by_NID__imp_X509_CRL_get_ext_by_NIDX509_CRL_get_ext_by_OBJ__imp_X509_CRL_get_ext_by_OBJX509_CRL_get_ext_by_critical__imp_X509_CRL_get_ext_by_criticalX509_CRL_get_ext_count__imp_X509_CRL_get_ext_countX509_CRL_get_ext_d2i__imp_X509_CRL_get_ext_d2iX509_CRL_get_meth_data__imp_X509_CRL_get_meth_dataX509_CRL_http_nbio__imp_X509_CRL_http_nbioX509_CRL_it__imp_X509_CRL_itX509_CRL_match__imp_X509_CRL_matchX509_CRL_new__imp_X509_CRL_newX509_CRL_print__imp_X509_CRL_printX509_CRL_print_fp__imp_X509_CRL_print_fpX509_CRL_set_default_method__imp_X509_CRL_set_default_methodX509_CRL_set_issuer_name__imp_X509_CRL_set_issuer_nameX509_CRL_set_lastUpdate__imp_X509_CRL_set_lastUpdateX509_CRL_set_meth_data__imp_X509_CRL_set_meth_dataX509_CRL_set_nextUpdate__imp_X509_CRL_set_nextUpdateX509_CRL_set_version__imp_X509_CRL_set_versionX509_CRL_sign__imp_X509_CRL_signX509_CRL_sign_ctx__imp_X509_CRL_sign_ctxX509_CRL_sort__imp_X509_CRL_sortX509_CRL_verify__imp_X509_CRL_verifyX509_EXTENSIONS_it__imp_X509_EXTENSIONS_itX509_EXTENSION_create_by_NID__imp_X509_EXTENSION_create_by_NIDX509_EXTENSION_create_by_OBJ__imp_X509_EXTENSION_create_by_OBJX509_EXTENSION_dup__imp_X509_EXTENSION_dupX509_EXTENSION_free__imp_X509_EXTENSION_freeX509_EXTENSION_get_critical__imp_X509_EXTENSION_get_criticalX509_EXTENSION_get_data__imp_X509_EXTENSION_get_dataX509_EXTENSION_get_object__imp_X509_EXTENSION_get_objectX509_EXTENSION_it__imp_X509_EXTENSION_itX509_EXTENSION_new__imp_X509_EXTENSION_newX509_EXTENSION_set_critical__imp_X509_EXTENSION_set_criticalX509_EXTENSION_set_data__imp_X509_EXTENSION_set_dataX509_EXTENSION_set_object__imp_X509_EXTENSION_set_objectX509_INFO_free__imp_X509_INFO_freeX509_INFO_new__imp_X509_INFO_newX509_LOOKUP_by_alias__imp_X509_LOOKUP_by_aliasX509_LOOKUP_by_fingerprint__imp_X509_LOOKUP_by_fingerprintX509_LOOKUP_by_issuer_serial__imp_X509_LOOKUP_by_issuer_serialX509_LOOKUP_by_subject__imp_X509_LOOKUP_by_subjectX509_LOOKUP_ctrl__imp_X509_LOOKUP_ctrlX509_LOOKUP_file__imp_X509_LOOKUP_fileX509_LOOKUP_free__imp_X509_LOOKUP_freeX509_LOOKUP_hash_dir__imp_X509_LOOKUP_hash_dirX509_LOOKUP_init__imp_X509_LOOKUP_initX509_LOOKUP_new__imp_X509_LOOKUP_newX509_LOOKUP_shutdown__imp_X509_LOOKUP_shutdownX509_NAME_ENTRY_create_by_NID__imp_X509_NAME_ENTRY_create_by_NIDX509_NAME_ENTRY_create_by_OBJ__imp_X509_NAME_ENTRY_create_by_OBJX509_NAME_ENTRY_create_by_txt__imp_X509_NAME_ENTRY_create_by_txtX509_NAME_ENTRY_dup__imp_X509_NAME_ENTRY_dupX509_NAME_ENTRY_free__imp_X509_NAME_ENTRY_freeX509_NAME_ENTRY_get_data__imp_X509_NAME_ENTRY_get_dataX509_NAME_ENTRY_get_object__imp_X509_NAME_ENTRY_get_objectX509_NAME_ENTRY_it__imp_X509_NAME_ENTRY_itX509_NAME_ENTRY_new__imp_X509_NAME_ENTRY_newX509_NAME_ENTRY_set_data__imp_X509_NAME_ENTRY_set_dataX509_NAME_ENTRY_set_object__imp_X509_NAME_ENTRY_set_objectX509_NAME_add_entry__imp_X509_NAME_add_entryX509_NAME_add_entry_by_NID__imp_X509_NAME_add_entry_by_NIDX509_NAME_add_entry_by_OBJ__imp_X509_NAME_add_entry_by_OBJX509_NAME_add_entry_by_txt__imp_X509_NAME_add_entry_by_txtX509_NAME_cmp__imp_X509_NAME_cmpX509_NAME_delete_entry__imp_X509_NAME_delete_entryX509_NAME_digest__imp_X509_NAME_digestX509_NAME_dup__imp_X509_NAME_dupX509_NAME_entry_count__imp_X509_NAME_entry_countX509_NAME_free__imp_X509_NAME_freeX509_NAME_get_entry__imp_X509_NAME_get_entryX509_NAME_get_index_by_NID__imp_X509_NAME_get_index_by_NIDX509_NAME_get_index_by_OBJ__imp_X509_NAME_get_index_by_OBJX509_NAME_get_text_by_NID__imp_X509_NAME_get_text_by_NIDX509_NAME_get_text_by_OBJ__imp_X509_NAME_get_text_by_OBJX509_NAME_hash__imp_X509_NAME_hashX509_NAME_hash_old__imp_X509_NAME_hash_oldX509_NAME_it__imp_X509_NAME_itX509_NAME_new__imp_X509_NAME_newX509_NAME_oneline__imp_X509_NAME_onelineX509_NAME_print__imp_X509_NAME_printX509_NAME_print_ex__imp_X509_NAME_print_exX509_NAME_print_ex_fp__imp_X509_NAME_print_ex_fpX509_NAME_set__imp_X509_NAME_setX509_OBJECT_free_contents__imp_X509_OBJECT_free_contentsX509_OBJECT_idx_by_subject__imp_X509_OBJECT_idx_by_subjectX509_OBJECT_retrieve_by_subject__imp_X509_OBJECT_retrieve_by_subjectX509_OBJECT_retrieve_match__imp_X509_OBJECT_retrieve_matchX509_OBJECT_up_ref_count__imp_X509_OBJECT_up_ref_countX509_PKEY_free__imp_X509_PKEY_freeX509_PKEY_new__imp_X509_PKEY_newX509_POLICY_NODE_print__imp_X509_POLICY_NODE_printX509_PUBKEY_free__imp_X509_PUBKEY_freeX509_PUBKEY_get0_param__imp_X509_PUBKEY_get0_paramX509_PUBKEY_get__imp_X509_PUBKEY_getX509_PUBKEY_it__imp_X509_PUBKEY_itX509_PUBKEY_new__imp_X509_PUBKEY_newX509_PUBKEY_set0_param__imp_X509_PUBKEY_set0_paramX509_PUBKEY_set__imp_X509_PUBKEY_setX509_PURPOSE_add__imp_X509_PURPOSE_addX509_PURPOSE_cleanup__imp_X509_PURPOSE_cleanupX509_PURPOSE_get0__imp_X509_PURPOSE_get0X509_PURPOSE_get0_name__imp_X509_PURPOSE_get0_nameX509_PURPOSE_get0_sname__imp_X509_PURPOSE_get0_snameX509_PURPOSE_get_by_id__imp_X509_PURPOSE_get_by_idX509_PURPOSE_get_by_sname__imp_X509_PURPOSE_get_by_snameX509_PURPOSE_get_count__imp_X509_PURPOSE_get_countX509_PURPOSE_get_id__imp_X509_PURPOSE_get_idX509_PURPOSE_get_trust__imp_X509_PURPOSE_get_trustX509_PURPOSE_set__imp_X509_PURPOSE_setX509_REQ_INFO_free__imp_X509_REQ_INFO_freeX509_REQ_INFO_it__imp_X509_REQ_INFO_itX509_REQ_INFO_new__imp_X509_REQ_INFO_newX509_REQ_add1_attr__imp_X509_REQ_add1_attrX509_REQ_add1_attr_by_NID__imp_X509_REQ_add1_attr_by_NIDX509_REQ_add1_attr_by_OBJ__imp_X509_REQ_add1_attr_by_OBJX509_REQ_add1_attr_by_txt__imp_X509_REQ_add1_attr_by_txtX509_REQ_add_extensions__imp_X509_REQ_add_extensionsX509_REQ_add_extensions_nid__imp_X509_REQ_add_extensions_nidX509_REQ_check_private_key__imp_X509_REQ_check_private_keyX509_REQ_delete_attr__imp_X509_REQ_delete_attrX509_REQ_digest__imp_X509_REQ_digestX509_REQ_dup__imp_X509_REQ_dupX509_REQ_extension_nid__imp_X509_REQ_extension_nidX509_REQ_free__imp_X509_REQ_freeX509_REQ_get1_email__imp_X509_REQ_get1_emailX509_REQ_get_attr__imp_X509_REQ_get_attrX509_REQ_get_attr_by_NID__imp_X509_REQ_get_attr_by_NIDX509_REQ_get_attr_by_OBJ__imp_X509_REQ_get_attr_by_OBJX509_REQ_get_attr_count__imp_X509_REQ_get_attr_countX509_REQ_get_extension_nids__imp_X509_REQ_get_extension_nidsX509_REQ_get_extensions__imp_X509_REQ_get_extensionsX509_REQ_get_pubkey__imp_X509_REQ_get_pubkeyX509_REQ_it__imp_X509_REQ_itX509_REQ_new__imp_X509_REQ_newX509_REQ_print__imp_X509_REQ_printX509_REQ_print_ex__imp_X509_REQ_print_exX509_REQ_print_fp__imp_X509_REQ_print_fpX509_REQ_set_extension_nids__imp_X509_REQ_set_extension_nidsX509_REQ_set_pubkey__imp_X509_REQ_set_pubkeyX509_REQ_set_subject_name__imp_X509_REQ_set_subject_nameX509_REQ_set_version__imp_X509_REQ_set_versionX509_REQ_sign__imp_X509_REQ_signX509_REQ_sign_ctx__imp_X509_REQ_sign_ctxX509_REQ_to_X509__imp_X509_REQ_to_X509X509_REQ_verify__imp_X509_REQ_verifyX509_REVOKED_add1_ext_i2d__imp_X509_REVOKED_add1_ext_i2dX509_REVOKED_add_ext__imp_X509_REVOKED_add_extX509_REVOKED_delete_ext__imp_X509_REVOKED_delete_extX509_REVOKED_dup__imp_X509_REVOKED_dupX509_REVOKED_free__imp_X509_REVOKED_freeX509_REVOKED_get_ext__imp_X509_REVOKED_get_extX509_REVOKED_get_ext_by_NID__imp_X509_REVOKED_get_ext_by_NIDX509_REVOKED_get_ext_by_OBJ__imp_X509_REVOKED_get_ext_by_OBJX509_REVOKED_get_ext_by_critical__imp_X509_REVOKED_get_ext_by_criticalX509_REVOKED_get_ext_count__imp_X509_REVOKED_get_ext_countX509_REVOKED_get_ext_d2i__imp_X509_REVOKED_get_ext_d2iX509_REVOKED_it__imp_X509_REVOKED_itX509_REVOKED_new__imp_X509_REVOKED_newX509_REVOKED_set_revocationDate__imp_X509_REVOKED_set_revocationDateX509_REVOKED_set_serialNumber__imp_X509_REVOKED_set_serialNumberX509_SIG_free__imp_X509_SIG_freeX509_SIG_it__imp_X509_SIG_itX509_SIG_new__imp_X509_SIG_newX509_STORE_CTX_cleanup__imp_X509_STORE_CTX_cleanupX509_STORE_CTX_free__imp_X509_STORE_CTX_freeX509_STORE_CTX_get0_current_crl__imp_X509_STORE_CTX_get0_current_crlX509_STORE_CTX_get0_current_issuer__imp_X509_STORE_CTX_get0_current_issuerX509_STORE_CTX_get0_param__imp_X509_STORE_CTX_get0_paramX509_STORE_CTX_get0_parent_ctx__imp_X509_STORE_CTX_get0_parent_ctxX509_STORE_CTX_get0_policy_tree__imp_X509_STORE_CTX_get0_policy_treeX509_STORE_CTX_get0_store__imp_X509_STORE_CTX_get0_storeX509_STORE_CTX_get1_chain__imp_X509_STORE_CTX_get1_chainX509_STORE_CTX_get1_issuer__imp_X509_STORE_CTX_get1_issuerX509_STORE_CTX_get_chain__imp_X509_STORE_CTX_get_chainX509_STORE_CTX_get_current_cert__imp_X509_STORE_CTX_get_current_certX509_STORE_CTX_get_error__imp_X509_STORE_CTX_get_errorX509_STORE_CTX_get_error_depth__imp_X509_STORE_CTX_get_error_depthX509_STORE_CTX_get_ex_data__imp_X509_STORE_CTX_get_ex_dataX509_STORE_CTX_get_ex_new_index__imp_X509_STORE_CTX_get_ex_new_indexX509_STORE_CTX_get_explicit_policy__imp_X509_STORE_CTX_get_explicit_policyX509_STORE_CTX_init__imp_X509_STORE_CTX_initX509_STORE_CTX_new__imp_X509_STORE_CTX_newX509_STORE_CTX_purpose_inherit__imp_X509_STORE_CTX_purpose_inheritX509_STORE_CTX_set0_crls__imp_X509_STORE_CTX_set0_crlsX509_STORE_CTX_set0_param__imp_X509_STORE_CTX_set0_paramX509_STORE_CTX_set_cert__imp_X509_STORE_CTX_set_certX509_STORE_CTX_set_chain__imp_X509_STORE_CTX_set_chainX509_STORE_CTX_set_default__imp_X509_STORE_CTX_set_defaultX509_STORE_CTX_set_depth__imp_X509_STORE_CTX_set_depthX509_STORE_CTX_set_error__imp_X509_STORE_CTX_set_errorX509_STORE_CTX_set_ex_data__imp_X509_STORE_CTX_set_ex_dataX509_STORE_CTX_set_flags__imp_X509_STORE_CTX_set_flagsX509_STORE_CTX_set_purpose__imp_X509_STORE_CTX_set_purposeX509_STORE_CTX_set_time__imp_X509_STORE_CTX_set_timeX509_STORE_CTX_set_trust__imp_X509_STORE_CTX_set_trustX509_STORE_CTX_set_verify_cb__imp_X509_STORE_CTX_set_verify_cbX509_STORE_CTX_trusted_stack__imp_X509_STORE_CTX_trusted_stackX509_STORE_add_cert__imp_X509_STORE_add_certX509_STORE_add_crl__imp_X509_STORE_add_crlX509_STORE_add_lookup__imp_X509_STORE_add_lookupX509_STORE_free__imp_X509_STORE_freeX509_STORE_get1_certs__imp_X509_STORE_get1_certsX509_STORE_get1_crls__imp_X509_STORE_get1_crlsX509_STORE_get_by_subject__imp_X509_STORE_get_by_subjectX509_STORE_load_locations__imp_X509_STORE_load_locationsX509_STORE_new__imp_X509_STORE_newX509_STORE_set1_param__imp_X509_STORE_set1_paramX509_STORE_set_default_paths__imp_X509_STORE_set_default_pathsX509_STORE_set_depth__imp_X509_STORE_set_depthX509_STORE_set_flags__imp_X509_STORE_set_flagsX509_STORE_set_lookup_crls_cb__imp_X509_STORE_set_lookup_crls_cbX509_STORE_set_purpose__imp_X509_STORE_set_purposeX509_STORE_set_trust__imp_X509_STORE_set_trustX509_STORE_set_verify_cb__imp_X509_STORE_set_verify_cbX509_TRUST_add__imp_X509_TRUST_addX509_TRUST_cleanup__imp_X509_TRUST_cleanupX509_TRUST_get0__imp_X509_TRUST_get0X509_TRUST_get0_name__imp_X509_TRUST_get0_nameX509_TRUST_get_by_id__imp_X509_TRUST_get_by_idX509_TRUST_get_count__imp_X509_TRUST_get_countX509_TRUST_get_flags__imp_X509_TRUST_get_flagsX509_TRUST_get_trust__imp_X509_TRUST_get_trustX509_TRUST_set__imp_X509_TRUST_setX509_TRUST_set_default__imp_X509_TRUST_set_defaultX509_VAL_free__imp_X509_VAL_freeX509_VAL_it__imp_X509_VAL_itX509_VAL_new__imp_X509_VAL_newX509_VERIFY_PARAM_add0_policy__imp_X509_VERIFY_PARAM_add0_policyX509_VERIFY_PARAM_add0_table__imp_X509_VERIFY_PARAM_add0_tableX509_VERIFY_PARAM_add1_host__imp_X509_VERIFY_PARAM_add1_hostX509_VERIFY_PARAM_clear_flags__imp_X509_VERIFY_PARAM_clear_flagsX509_VERIFY_PARAM_free__imp_X509_VERIFY_PARAM_freeX509_VERIFY_PARAM_get0__imp_X509_VERIFY_PARAM_get0X509_VERIFY_PARAM_get0_name__imp_X509_VERIFY_PARAM_get0_nameX509_VERIFY_PARAM_get0_peername__imp_X509_VERIFY_PARAM_get0_peernameX509_VERIFY_PARAM_get_count__imp_X509_VERIFY_PARAM_get_countX509_VERIFY_PARAM_get_depth__imp_X509_VERIFY_PARAM_get_depthX509_VERIFY_PARAM_get_flags__imp_X509_VERIFY_PARAM_get_flagsX509_VERIFY_PARAM_inherit__imp_X509_VERIFY_PARAM_inheritX509_VERIFY_PARAM_lookup__imp_X509_VERIFY_PARAM_lookupX509_VERIFY_PARAM_new__imp_X509_VERIFY_PARAM_newX509_VERIFY_PARAM_set1__imp_X509_VERIFY_PARAM_set1X509_VERIFY_PARAM_set1_email__imp_X509_VERIFY_PARAM_set1_emailX509_VERIFY_PARAM_set1_host__imp_X509_VERIFY_PARAM_set1_hostX509_VERIFY_PARAM_set1_ip__imp_X509_VERIFY_PARAM_set1_ipX509_VERIFY_PARAM_set1_ip_asc__imp_X509_VERIFY_PARAM_set1_ip_ascX509_VERIFY_PARAM_set1_name__imp_X509_VERIFY_PARAM_set1_nameX509_VERIFY_PARAM_set1_policies__imp_X509_VERIFY_PARAM_set1_policiesX509_VERIFY_PARAM_set_depth__imp_X509_VERIFY_PARAM_set_depthX509_VERIFY_PARAM_set_flags__imp_X509_VERIFY_PARAM_set_flagsX509_VERIFY_PARAM_set_hostflags__imp_X509_VERIFY_PARAM_set_hostflagsX509_VERIFY_PARAM_set_purpose__imp_X509_VERIFY_PARAM_set_purposeX509_VERIFY_PARAM_set_time__imp_X509_VERIFY_PARAM_set_timeX509_VERIFY_PARAM_set_trust__imp_X509_VERIFY_PARAM_set_trustX509_VERIFY_PARAM_table_cleanup__imp_X509_VERIFY_PARAM_table_cleanupX509_add1_ext_i2d__imp_X509_add1_ext_i2dX509_add1_reject_object__imp_X509_add1_reject_objectX509_add1_trust_object__imp_X509_add1_trust_objectX509_add_ext__imp_X509_add_extX509_alias_get0__imp_X509_alias_get0X509_alias_set1__imp_X509_alias_set1X509_certificate_type__imp_X509_certificate_typeX509_chain_check_suiteb__imp_X509_chain_check_suitebX509_chain_up_ref__imp_X509_chain_up_refX509_check_akid__imp_X509_check_akidX509_check_ca__imp_X509_check_caX509_check_email__imp_X509_check_emailX509_check_host__imp_X509_check_hostX509_check_ip__imp_X509_check_ipX509_check_ip_asc__imp_X509_check_ip_ascX509_check_issued__imp_X509_check_issuedX509_check_private_key__imp_X509_check_private_keyX509_check_purpose__imp_X509_check_purposeX509_check_trust__imp_X509_check_trustX509_cmp__imp_X509_cmpX509_cmp_current_time__imp_X509_cmp_current_timeX509_cmp_time__imp_X509_cmp_timeX509_delete_ext__imp_X509_delete_extX509_digest__imp_X509_digestX509_dup__imp_X509_dupX509_email_free__imp_X509_email_freeX509_find_by_issuer_and_serial__imp_X509_find_by_issuer_and_serialX509_find_by_subject__imp_X509_find_by_subjectX509_free__imp_X509_freeX509_get0_pubkey_bitstr__imp_X509_get0_pubkey_bitstrX509_get0_signature__imp_X509_get0_signatureX509_get1_email__imp_X509_get1_emailX509_get1_ocsp__imp_X509_get1_ocspX509_get_default_cert_area__imp_X509_get_default_cert_areaX509_get_default_cert_dir__imp_X509_get_default_cert_dirX509_get_default_cert_dir_env__imp_X509_get_default_cert_dir_envX509_get_default_cert_file__imp_X509_get_default_cert_fileX509_get_default_cert_file_env__imp_X509_get_default_cert_file_envX509_get_default_private_dir__imp_X509_get_default_private_dirX509_get_ex_data__imp_X509_get_ex_dataX509_get_ex_new_index__imp_X509_get_ex_new_indexX509_get_ext__imp_X509_get_extX509_get_ext_by_NID__imp_X509_get_ext_by_NIDX509_get_ext_by_OBJ__imp_X509_get_ext_by_OBJX509_get_ext_by_critical__imp_X509_get_ext_by_criticalX509_get_ext_count__imp_X509_get_ext_countX509_get_ext_d2i__imp_X509_get_ext_d2iX509_get_issuer_name__imp_X509_get_issuer_nameX509_get_pubkey__imp_X509_get_pubkeyX509_get_pubkey_parameters__imp_X509_get_pubkey_parametersX509_get_serialNumber__imp_X509_get_serialNumberX509_get_signature_nid__imp_X509_get_signature_nidX509_get_subject_name__imp_X509_get_subject_nameX509_gmtime_adj__imp_X509_gmtime_adjX509_http_nbio__imp_X509_http_nbioX509_issuer_and_serial_cmp__imp_X509_issuer_and_serial_cmpX509_issuer_and_serial_hash__imp_X509_issuer_and_serial_hashX509_issuer_name_cmp__imp_X509_issuer_name_cmpX509_issuer_name_hash__imp_X509_issuer_name_hashX509_issuer_name_hash_old__imp_X509_issuer_name_hash_oldX509_it__imp_X509_itX509_keyid_get0__imp_X509_keyid_get0X509_keyid_set1__imp_X509_keyid_set1X509_load_cert_crl_file__imp_X509_load_cert_crl_fileX509_load_cert_file__imp_X509_load_cert_fileX509_load_crl_file__imp_X509_load_crl_fileX509_new__imp_X509_newX509_ocspid_print__imp_X509_ocspid_printX509_policy_check__imp_X509_policy_checkX509_policy_level_get0_node__imp_X509_policy_level_get0_nodeX509_policy_level_node_count__imp_X509_policy_level_node_countX509_policy_node_get0_parent__imp_X509_policy_node_get0_parentX509_policy_node_get0_policy__imp_X509_policy_node_get0_policyX509_policy_node_get0_qualifiers__imp_X509_policy_node_get0_qualifiersX509_policy_tree_free__imp_X509_policy_tree_freeX509_policy_tree_get0_level__imp_X509_policy_tree_get0_levelX509_policy_tree_get0_policies__imp_X509_policy_tree_get0_policiesX509_policy_tree_get0_user_policies__imp_X509_policy_tree_get0_user_policiesX509_policy_tree_level_count__imp_X509_policy_tree_level_countX509_print__imp_X509_printX509_print_ex__imp_X509_print_exX509_print_ex_fp__imp_X509_print_ex_fpX509_print_fp__imp_X509_print_fpX509_pubkey_digest__imp_X509_pubkey_digestX509_reject_clear__imp_X509_reject_clearX509_set_ex_data__imp_X509_set_ex_dataX509_set_issuer_name__imp_X509_set_issuer_nameX509_set_notAfter__imp_X509_set_notAfterX509_set_notBefore__imp_X509_set_notBeforeX509_set_pubkey__imp_X509_set_pubkeyX509_set_serialNumber__imp_X509_set_serialNumberX509_set_subject_name__imp_X509_set_subject_nameX509_set_version__imp_X509_set_versionX509_sign__imp_X509_signX509_sign_ctx__imp_X509_sign_ctxX509_signature_dump__imp_X509_signature_dumpX509_signature_print__imp_X509_signature_printX509_subject_name_cmp__imp_X509_subject_name_cmpX509_subject_name_hash__imp_X509_subject_name_hashX509_subject_name_hash_old__imp_X509_subject_name_hash_oldX509_supported_extension__imp_X509_supported_extensionX509_time_adj__imp_X509_time_adjX509_time_adj_ex__imp_X509_time_adj_exX509_to_X509_REQ__imp_X509_to_X509_REQX509_trust_clear__imp_X509_trust_clearX509_verify__imp_X509_verifyX509_verify_cert__imp_X509_verify_certX509_verify_cert_error_string__imp_X509_verify_cert_error_stringX509at_add1_attr__imp_X509at_add1_attrX509at_add1_attr_by_NID__imp_X509at_add1_attr_by_NIDX509at_add1_attr_by_OBJ__imp_X509at_add1_attr_by_OBJX509at_add1_attr_by_txt__imp_X509at_add1_attr_by_txtX509at_delete_attr__imp_X509at_delete_attrX509at_get0_data_by_OBJ__imp_X509at_get0_data_by_OBJX509at_get_attr__imp_X509at_get_attrX509at_get_attr_by_NID__imp_X509at_get_attr_by_NIDX509at_get_attr_by_OBJ__imp_X509at_get_attr_by_OBJX509at_get_attr_count__imp_X509at_get_attr_countX509v3_add_ext__imp_X509v3_add_extX509v3_delete_ext__imp_X509v3_delete_extX509v3_get_ext__imp_X509v3_get_extX509v3_get_ext_by_NID__imp_X509v3_get_ext_by_NIDX509v3_get_ext_by_OBJ__imp_X509v3_get_ext_by_OBJX509v3_get_ext_by_critical__imp_X509v3_get_ext_by_criticalX509v3_get_ext_count__imp_X509v3_get_ext_countZLONG_it__imp_ZLONG_it__imp__ossl_096_des_random_seed_ossl_096_des_random_seed__imp__ossl_old_crypt_ossl_old_crypt__imp__ossl_old_des_cbc_cksum_ossl_old_des_cbc_cksum__imp__ossl_old_des_cbc_encrypt_ossl_old_des_cbc_encrypt__imp__ossl_old_des_cfb64_encrypt_ossl_old_des_cfb64_encrypt__imp__ossl_old_des_cfb_encrypt_ossl_old_des_cfb_encrypt__imp__ossl_old_des_crypt_ossl_old_des_crypt__imp__ossl_old_des_decrypt3_ossl_old_des_decrypt3__imp__ossl_old_des_ecb3_encrypt_ossl_old_des_ecb3_encrypt__imp__ossl_old_des_ecb_encrypt_ossl_old_des_ecb_encrypt__imp__ossl_old_des_ede3_cbc_encrypt_ossl_old_des_ede3_cbc_encrypt__imp__ossl_old_des_ede3_cfb64_encrypt_ossl_old_des_ede3_cfb64_encrypt__imp__ossl_old_des_ede3_ofb64_encrypt_ossl_old_des_ede3_ofb64_encrypt__imp__ossl_old_des_enc_read_ossl_old_des_enc_read__imp__ossl_old_des_enc_write_ossl_old_des_enc_write__imp__ossl_old_des_encrypt2_ossl_old_des_encrypt2__imp__ossl_old_des_encrypt3_ossl_old_des_encrypt3__imp__ossl_old_des_encrypt_ossl_old_des_encrypt__imp__ossl_old_des_fcrypt_ossl_old_des_fcrypt__imp__ossl_old_des_is_weak_key_ossl_old_des_is_weak_key__imp__ossl_old_des_key_sched_ossl_old_des_key_sched__imp__ossl_old_des_ncbc_encrypt_ossl_old_des_ncbc_encrypt__imp__ossl_old_des_ofb64_encrypt_ossl_old_des_ofb64_encrypt__imp__ossl_old_des_ofb_encrypt_ossl_old_des_ofb_encrypt__imp__ossl_old_des_options_ossl_old_des_options__imp__ossl_old_des_pcbc_encrypt_ossl_old_des_pcbc_encrypt__imp__ossl_old_des_quad_cksum_ossl_old_des_quad_cksum__imp__ossl_old_des_random_key_ossl_old_des_random_key__imp__ossl_old_des_random_seed_ossl_old_des_random_seed__imp__ossl_old_des_read_2passwords_ossl_old_des_read_2passwords__imp__ossl_old_des_read_password_ossl_old_des_read_password__imp__ossl_old_des_read_pw_ossl_old_des_read_pw__imp__ossl_old_des_read_pw_string_ossl_old_des_read_pw_string__imp__ossl_old_des_set_key_ossl_old_des_set_key__imp__ossl_old_des_set_odd_parity_ossl_old_des_set_odd_parity__imp__ossl_old_des_string_to_2keys_ossl_old_des_string_to_2keys__imp__ossl_old_des_string_to_key_ossl_old_des_string_to_key__imp__ossl_old_des_xcbc_encrypt_ossl_old_des_xcbc_encrypt__imp__shadow_DES_check_key_shadow_DES_check_key__imp__shadow_DES_rw_mode_shadow_DES_rw_mode__imp_a2d_ASN1_OBJECTa2d_ASN1_OBJECT__imp_a2i_ASN1_ENUMERATEDa2i_ASN1_ENUMERATED__imp_a2i_ASN1_INTEGERa2i_ASN1_INTEGER__imp_a2i_ASN1_STRINGa2i_ASN1_STRING__imp_a2i_GENERAL_NAMEa2i_GENERAL_NAME__imp_a2i_IPADDRESSa2i_IPADDRESS__imp_a2i_IPADDRESS_NCa2i_IPADDRESS_NC__imp_a2i_ipadda2i_ipadd__imp_asn1_Finishasn1_Finish__imp_asn1_GetSequenceasn1_GetSequence__imp_asn1_add_errorasn1_add_error__imp_asn1_const_Finishasn1_const_Finish__imp_asn1_do_adbasn1_do_adb__imp_asn1_do_lockasn1_do_lock__imp_asn1_enc_freeasn1_enc_free__imp_asn1_enc_initasn1_enc_init__imp_asn1_enc_restoreasn1_enc_restore__imp_asn1_enc_saveasn1_enc_save__imp_asn1_ex_c2iasn1_ex_c2i__imp_asn1_ex_i2casn1_ex_i2c__imp_asn1_get_choice_selectorasn1_get_choice_selector__imp_asn1_get_field_ptrasn1_get_field_ptr__imp_asn1_set_choice_selectorasn1_set_choice_selector__imp_b2i_PVK_biob2i_PVK_bio__imp_b2i_PrivateKeyb2i_PrivateKey__imp_b2i_PrivateKey_biob2i_PrivateKey_bio__imp_b2i_PublicKeyb2i_PublicKey__imp_b2i_PublicKey_biob2i_PublicKey_bio__imp_bn_add_wordsbn_add_words__imp_bn_div_wordsbn_div_words__imp_bn_dup_expandbn_dup_expand__imp_bn_expand2bn_expand2__imp_bn_mul_add_wordsbn_mul_add_words__imp_bn_mul_wordsbn_mul_words__imp_bn_sqr_wordsbn_sqr_words__imp_bn_sub_wordsbn_sub_words__imp_c2i_ASN1_BIT_STRINGc2i_ASN1_BIT_STRING__imp_c2i_ASN1_INTEGERc2i_ASN1_INTEGER__imp_c2i_ASN1_OBJECTc2i_ASN1_OBJECT__imp_check_defercheck_defer__imp_d2i_ACCESS_DESCRIPTIONd2i_ACCESS_DESCRIPTION__imp_d2i_ASN1_BIT_STRINGd2i_ASN1_BIT_STRING__imp_d2i_ASN1_BMPSTRINGd2i_ASN1_BMPSTRING__imp_d2i_ASN1_BOOLEANd2i_ASN1_BOOLEAN__imp_d2i_ASN1_ENUMERATEDd2i_ASN1_ENUMERATED__imp_d2i_ASN1_GENERALIZEDTIMEd2i_ASN1_GENERALIZEDTIME__imp_d2i_ASN1_GENERALSTRINGd2i_ASN1_GENERALSTRING__imp_d2i_ASN1_IA5STRINGd2i_ASN1_IA5STRING__imp_d2i_ASN1_INTEGERd2i_ASN1_INTEGER__imp_d2i_ASN1_NULLd2i_ASN1_NULL__imp_d2i_ASN1_OBJECTd2i_ASN1_OBJECT__imp_d2i_ASN1_OCTET_STRINGd2i_ASN1_OCTET_STRING__imp_d2i_ASN1_PRINTABLESTRINGd2i_ASN1_PRINTABLESTRING__imp_d2i_ASN1_PRINTABLEd2i_ASN1_PRINTABLE__imp_d2i_ASN1_SEQUENCE_ANYd2i_ASN1_SEQUENCE_ANY__imp_d2i_ASN1_SETd2i_ASN1_SET__imp_d2i_ASN1_SET_ANYd2i_ASN1_SET_ANY__imp_d2i_ASN1_T61STRINGd2i_ASN1_T61STRING__imp_d2i_ASN1_TIMEd2i_ASN1_TIME__imp_d2i_ASN1_TYPEd2i_ASN1_TYPE__imp_d2i_ASN1_UINTEGERd2i_ASN1_UINTEGER__imp_d2i_ASN1_UNIVERSALSTRINGd2i_ASN1_UNIVERSALSTRING__imp_d2i_ASN1_UTCTIMEd2i_ASN1_UTCTIME__imp_d2i_ASN1_UTF8STRINGd2i_ASN1_UTF8STRING__imp_d2i_ASN1_VISIBLESTRINGd2i_ASN1_VISIBLESTRING__imp_d2i_ASN1_bytesd2i_ASN1_bytes__imp_d2i_ASN1_type_bytesd2i_ASN1_type_bytes__imp_d2i_AUTHORITY_INFO_ACCESSd2i_AUTHORITY_INFO_ACCESS__imp_d2i_AUTHORITY_KEYIDd2i_AUTHORITY_KEYID__imp_d2i_AutoPrivateKeyd2i_AutoPrivateKey__imp_d2i_BASIC_CONSTRAINTSd2i_BASIC_CONSTRAINTS__imp_d2i_CERTIFICATEPOLICIESd2i_CERTIFICATEPOLICIES__imp_d2i_CMS_ContentInfod2i_CMS_ContentInfo__imp_d2i_CMS_ReceiptRequestd2i_CMS_ReceiptRequest__imp_d2i_CMS_biod2i_CMS_bio__imp_d2i_CRL_DIST_POINTSd2i_CRL_DIST_POINTS__imp_d2i_DHparamsd2i_DHparams__imp_d2i_DHxparamsd2i_DHxparams__imp_d2i_DIRECTORYSTRINGd2i_DIRECTORYSTRING__imp_d2i_DISPLAYTEXTd2i_DISPLAYTEXT__imp_d2i_DIST_POINTd2i_DIST_POINT__imp_d2i_DIST_POINT_NAMEd2i_DIST_POINT_NAME__imp_d2i_DSAPrivateKeyd2i_DSAPrivateKey__imp_d2i_DSAPrivateKey_biod2i_DSAPrivateKey_bio__imp_d2i_DSAPrivateKey_fpd2i_DSAPrivateKey_fp__imp_d2i_DSAPublicKeyd2i_DSAPublicKey__imp_d2i_DSA_PUBKEYd2i_DSA_PUBKEY__imp_d2i_DSA_PUBKEY_biod2i_DSA_PUBKEY_bio__imp_d2i_DSA_PUBKEY_fpd2i_DSA_PUBKEY_fp__imp_d2i_DSA_SIGd2i_DSA_SIG__imp_d2i_DSAparamsd2i_DSAparams__imp_d2i_ECDSA_SIGd2i_ECDSA_SIG__imp_d2i_ECPKParametersd2i_ECPKParameters__imp_d2i_ECParametersd2i_ECParameters__imp_d2i_ECPrivateKeyd2i_ECPrivateKey__imp_d2i_ECPrivateKey_biod2i_ECPrivateKey_bio__imp_d2i_ECPrivateKey_fpd2i_ECPrivateKey_fp__imp_d2i_EC_PUBKEYd2i_EC_PUBKEY__imp_d2i_EC_PUBKEY_biod2i_EC_PUBKEY_bio__imp_d2i_EC_PUBKEY_fpd2i_EC_PUBKEY_fp__imp_d2i_EDIPARTYNAMEd2i_EDIPARTYNAME__imp_d2i_ESS_CERT_IDd2i_ESS_CERT_ID__imp_d2i_ESS_ISSUER_SERIALd2i_ESS_ISSUER_SERIAL__imp_d2i_ESS_SIGNING_CERTd2i_ESS_SIGNING_CERT__imp_d2i_EXTENDED_KEY_USAGEd2i_EXTENDED_KEY_USAGE__imp_d2i_GENERAL_NAMESd2i_GENERAL_NAMES__imp_d2i_GENERAL_NAMEd2i_GENERAL_NAME__imp_d2i_ISSUING_DIST_POINTd2i_ISSUING_DIST_POINT__imp_d2i_KRB5_APREQBODYd2i_KRB5_APREQBODY__imp_d2i_KRB5_APREQd2i_KRB5_APREQ__imp_d2i_KRB5_AUTHDATAd2i_KRB5_AUTHDATA__imp_d2i_KRB5_AUTHENTBODYd2i_KRB5_AUTHENTBODY__imp_d2i_KRB5_AUTHENTd2i_KRB5_AUTHENT__imp_d2i_KRB5_CHECKSUMd2i_KRB5_CHECKSUM__imp_d2i_KRB5_ENCDATAd2i_KRB5_ENCDATA__imp_d2i_KRB5_ENCKEYd2i_KRB5_ENCKEY__imp_d2i_KRB5_PRINCNAMEd2i_KRB5_PRINCNAME__imp_d2i_KRB5_TICKETd2i_KRB5_TICKET__imp_d2i_KRB5_TKTBODYd2i_KRB5_TKTBODY__imp_d2i_NETSCAPE_CERT_SEQUENCEd2i_NETSCAPE_CERT_SEQUENCE__imp_d2i_NETSCAPE_SPKACd2i_NETSCAPE_SPKAC__imp_d2i_NETSCAPE_SPKId2i_NETSCAPE_SPKI__imp_d2i_NETSCAPE_X509d2i_NETSCAPE_X509__imp_d2i_NOTICEREFd2i_NOTICEREF__imp_d2i_Netscape_RSAd2i_Netscape_RSA__imp_d2i_OCSP_BASICRESPd2i_OCSP_BASICRESP__imp_d2i_OCSP_CERTIDd2i_OCSP_CERTID__imp_d2i_OCSP_CERTSTATUSd2i_OCSP_CERTSTATUS__imp_d2i_OCSP_CRLIDd2i_OCSP_CRLID__imp_d2i_OCSP_ONEREQd2i_OCSP_ONEREQ__imp_d2i_OCSP_REQINFOd2i_OCSP_REQINFO__imp_d2i_OCSP_REQUESTd2i_OCSP_REQUEST__imp_d2i_OCSP_RESPBYTESd2i_OCSP_RESPBYTES__imp_d2i_OCSP_RESPDATAd2i_OCSP_RESPDATA__imp_d2i_OCSP_RESPIDd2i_OCSP_RESPID__imp_d2i_OCSP_RESPONSEd2i_OCSP_RESPONSE__imp_d2i_OCSP_REVOKEDINFOd2i_OCSP_REVOKEDINFO__imp_d2i_OCSP_SERVICELOCd2i_OCSP_SERVICELOC__imp_d2i_OCSP_SIGNATUREd2i_OCSP_SIGNATURE__imp_d2i_OCSP_SINGLERESPd2i_OCSP_SINGLERESP__imp_d2i_OTHERNAMEd2i_OTHERNAME__imp_d2i_PBE2PARAMd2i_PBE2PARAM__imp_d2i_PBEPARAMd2i_PBEPARAM__imp_d2i_PBKDF2PARAMd2i_PBKDF2PARAM__imp_d2i_PKCS12d2i_PKCS12__imp_d2i_PKCS12_BAGSd2i_PKCS12_BAGS__imp_d2i_PKCS12_MAC_DATAd2i_PKCS12_MAC_DATA__imp_d2i_PKCS12_SAFEBAGd2i_PKCS12_SAFEBAG__imp_d2i_PKCS12_biod2i_PKCS12_bio__imp_d2i_PKCS12_fpd2i_PKCS12_fp__imp_d2i_PKCS7d2i_PKCS7__imp_d2i_PKCS7_DIGESTd2i_PKCS7_DIGEST__imp_d2i_PKCS7_ENCRYPTd2i_PKCS7_ENCRYPT__imp_d2i_PKCS7_ENC_CONTENTd2i_PKCS7_ENC_CONTENT__imp_d2i_PKCS7_ENVELOPEd2i_PKCS7_ENVELOPE__imp_d2i_PKCS7_ISSUER_AND_SERIALd2i_PKCS7_ISSUER_AND_SERIAL__imp_d2i_PKCS7_RECIP_INFOd2i_PKCS7_RECIP_INFO__imp_d2i_PKCS7_SIGNEDd2i_PKCS7_SIGNED__imp_d2i_PKCS7_SIGNER_INFOd2i_PKCS7_SIGNER_INFO__imp_d2i_PKCS7_SIGN_ENVELOPEd2i_PKCS7_SIGN_ENVELOPE__imp_d2i_PKCS7_biod2i_PKCS7_bio__imp_d2i_PKCS7_fpd2i_PKCS7_fp__imp_d2i_PKCS8PrivateKey_biod2i_PKCS8PrivateKey_bio__imp_d2i_PKCS8PrivateKey_fpd2i_PKCS8PrivateKey_fp__imp_d2i_PKCS8_PRIV_KEY_INFOd2i_PKCS8_PRIV_KEY_INFO__imp_d2i_PKCS8_PRIV_KEY_INFO_biod2i_PKCS8_PRIV_KEY_INFO_bio__imp_d2i_PKCS8_PRIV_KEY_INFO_fpd2i_PKCS8_PRIV_KEY_INFO_fp__imp_d2i_PKCS8_biod2i_PKCS8_bio__imp_d2i_PKCS8_fpd2i_PKCS8_fp__imp_d2i_PKEY_USAGE_PERIODd2i_PKEY_USAGE_PERIOD__imp_d2i_POLICYINFOd2i_POLICYINFO__imp_d2i_POLICYQUALINFOd2i_POLICYQUALINFO__imp_d2i_PROXY_CERT_INFO_EXTENSIONd2i_PROXY_CERT_INFO_EXTENSION__imp_d2i_PROXY_POLICYd2i_PROXY_POLICY__imp_d2i_PUBKEYd2i_PUBKEY__imp_d2i_PUBKEY_biod2i_PUBKEY_bio__imp_d2i_PUBKEY_fpd2i_PUBKEY_fp__imp_d2i_PrivateKeyd2i_PrivateKey__imp_d2i_PrivateKey_biod2i_PrivateKey_bio__imp_d2i_PrivateKey_fpd2i_PrivateKey_fp__imp_d2i_PublicKeyd2i_PublicKey__imp_d2i_RSAPrivateKeyd2i_RSAPrivateKey__imp_d2i_RSAPrivateKey_biod2i_RSAPrivateKey_bio__imp_d2i_RSAPrivateKey_fpd2i_RSAPrivateKey_fp__imp_d2i_RSAPublicKeyd2i_RSAPublicKey__imp_d2i_RSAPublicKey_biod2i_RSAPublicKey_bio__imp_d2i_RSAPublicKey_fpd2i_RSAPublicKey_fp__imp_d2i_RSA_NETd2i_RSA_NET__imp_d2i_RSA_OAEP_PARAMSd2i_RSA_OAEP_PARAMS__imp_d2i_RSA_PSS_PARAMSd2i_RSA_PSS_PARAMS__imp_d2i_RSA_PUBKEYd2i_RSA_PUBKEY__imp_d2i_RSA_PUBKEY_biod2i_RSA_PUBKEY_bio__imp_d2i_RSA_PUBKEY_fpd2i_RSA_PUBKEY_fp__imp_d2i_SXNETIDd2i_SXNETID__imp_d2i_SXNETd2i_SXNET__imp_d2i_TS_ACCURACYd2i_TS_ACCURACY__imp_d2i_TS_MSG_IMPRINTd2i_TS_MSG_IMPRINT__imp_d2i_TS_MSG_IMPRINT_biod2i_TS_MSG_IMPRINT_bio__imp_d2i_TS_MSG_IMPRINT_fpd2i_TS_MSG_IMPRINT_fp__imp_d2i_TS_REQd2i_TS_REQ__imp_d2i_TS_REQ_biod2i_TS_REQ_bio__imp_d2i_TS_REQ_fpd2i_TS_REQ_fp__imp_d2i_TS_RESPd2i_TS_RESP__imp_d2i_TS_RESP_biod2i_TS_RESP_bio__imp_d2i_TS_RESP_fpd2i_TS_RESP_fp__imp_d2i_TS_STATUS_INFOd2i_TS_STATUS_INFO__imp_d2i_TS_TST_INFOd2i_TS_TST_INFO__imp_d2i_TS_TST_INFO_biod2i_TS_TST_INFO_bio__imp_d2i_TS_TST_INFO_fpd2i_TS_TST_INFO_fp__imp_d2i_USERNOTICEd2i_USERNOTICE__imp_d2i_X509d2i_X509__imp_d2i_X509_ALGORSd2i_X509_ALGORS__imp_d2i_X509_ALGORd2i_X509_ALGOR__imp_d2i_X509_ATTRIBUTEd2i_X509_ATTRIBUTE__imp_d2i_X509_AUXd2i_X509_AUX__imp_d2i_X509_CERT_AUXd2i_X509_CERT_AUX__imp_d2i_X509_CERT_PAIRd2i_X509_CERT_PAIR__imp_d2i_X509_CINFd2i_X509_CINF__imp_d2i_X509_CRLd2i_X509_CRL__imp_d2i_X509_CRL_INFOd2i_X509_CRL_INFO__imp_d2i_X509_CRL_biod2i_X509_CRL_bio__imp_d2i_X509_CRL_fpd2i_X509_CRL_fp__imp_d2i_X509_EXTENSIONSd2i_X509_EXTENSIONS__imp_d2i_X509_EXTENSIONd2i_X509_EXTENSION__imp_d2i_X509_NAMEd2i_X509_NAME__imp_d2i_X509_NAME_ENTRYd2i_X509_NAME_ENTRY__imp_d2i_X509_PKEYd2i_X509_PKEY__imp_d2i_X509_PUBKEYd2i_X509_PUBKEY__imp_d2i_X509_REQd2i_X509_REQ__imp_d2i_X509_REQ_INFOd2i_X509_REQ_INFO__imp_d2i_X509_REQ_biod2i_X509_REQ_bio__imp_d2i_X509_REQ_fpd2i_X509_REQ_fp__imp_d2i_X509_REVOKEDd2i_X509_REVOKED__imp_d2i_X509_SIGd2i_X509_SIG__imp_d2i_X509_VALd2i_X509_VAL__imp_d2i_X509_biod2i_X509_bio__imp_d2i_X509_fpd2i_X509_fp__imp_get_rfc2409_prime_1024get_rfc2409_prime_1024__imp_get_rfc2409_prime_768get_rfc2409_prime_768__imp_get_rfc3526_prime_1536get_rfc3526_prime_1536__imp_get_rfc3526_prime_2048get_rfc3526_prime_2048__imp_get_rfc3526_prime_3072get_rfc3526_prime_3072__imp_get_rfc3526_prime_4096get_rfc3526_prime_4096__imp_get_rfc3526_prime_6144get_rfc3526_prime_6144__imp_get_rfc3526_prime_8192get_rfc3526_prime_8192__imp_hex_to_stringhex_to_string__imp_i2a_ACCESS_DESCRIPTIONi2a_ACCESS_DESCRIPTION__imp_i2a_ASN1_ENUMERATEDi2a_ASN1_ENUMERATED__imp_i2a_ASN1_INTEGERi2a_ASN1_INTEGER__imp_i2a_ASN1_OBJECTi2a_ASN1_OBJECT__imp_i2a_ASN1_STRINGi2a_ASN1_STRING__imp_i2b_PVK_bioi2b_PVK_bio__imp_i2b_PrivateKey_bioi2b_PrivateKey_bio__imp_i2b_PublicKey_bioi2b_PublicKey_bio__imp_i2c_ASN1_BIT_STRINGi2c_ASN1_BIT_STRING__imp_i2c_ASN1_INTEGERi2c_ASN1_INTEGER__imp_i2d_ACCESS_DESCRIPTIONi2d_ACCESS_DESCRIPTION__imp_i2d_ASN1_BIT_STRINGi2d_ASN1_BIT_STRING__imp_i2d_ASN1_BMPSTRINGi2d_ASN1_BMPSTRING__imp_i2d_ASN1_BOOLEANi2d_ASN1_BOOLEAN__imp_i2d_ASN1_ENUMERATEDi2d_ASN1_ENUMERATED__imp_i2d_ASN1_GENERALIZEDTIMEi2d_ASN1_GENERALIZEDTIME__imp_i2d_ASN1_GENERALSTRINGi2d_ASN1_GENERALSTRING__imp_i2d_ASN1_IA5STRINGi2d_ASN1_IA5STRING__imp_i2d_ASN1_INTEGERi2d_ASN1_INTEGER__imp_i2d_ASN1_NULLi2d_ASN1_NULL__imp_i2d_ASN1_OBJECTi2d_ASN1_OBJECT__imp_i2d_ASN1_OCTET_STRINGi2d_ASN1_OCTET_STRING__imp_i2d_ASN1_PRINTABLESTRINGi2d_ASN1_PRINTABLESTRING__imp_i2d_ASN1_PRINTABLEi2d_ASN1_PRINTABLE__imp_i2d_ASN1_SEQUENCE_ANYi2d_ASN1_SEQUENCE_ANY__imp_i2d_ASN1_SETi2d_ASN1_SET__imp_i2d_ASN1_SET_ANYi2d_ASN1_SET_ANY__imp_i2d_ASN1_T61STRINGi2d_ASN1_T61STRING__imp_i2d_ASN1_TIMEi2d_ASN1_TIME__imp_i2d_ASN1_TYPEi2d_ASN1_TYPE__imp_i2d_ASN1_UNIVERSALSTRINGi2d_ASN1_UNIVERSALSTRING__imp_i2d_ASN1_UTCTIMEi2d_ASN1_UTCTIME__imp_i2d_ASN1_UTF8STRINGi2d_ASN1_UTF8STRING__imp_i2d_ASN1_VISIBLESTRINGi2d_ASN1_VISIBLESTRING__imp_i2d_ASN1_bio_streami2d_ASN1_bio_stream__imp_i2d_ASN1_bytesi2d_ASN1_bytes__imp_i2d_AUTHORITY_INFO_ACCESSi2d_AUTHORITY_INFO_ACCESS__imp_i2d_AUTHORITY_KEYIDi2d_AUTHORITY_KEYID__imp_i2d_BASIC_CONSTRAINTSi2d_BASIC_CONSTRAINTS__imp_i2d_CERTIFICATEPOLICIESi2d_CERTIFICATEPOLICIES__imp_i2d_CMS_ContentInfoi2d_CMS_ContentInfo__imp_i2d_CMS_ReceiptRequesti2d_CMS_ReceiptRequest__imp_i2d_CMS_bioi2d_CMS_bio__imp_i2d_CMS_bio_streami2d_CMS_bio_stream__imp_i2d_CRL_DIST_POINTSi2d_CRL_DIST_POINTS__imp_i2d_DHparamsi2d_DHparams__imp_i2d_DHxparamsi2d_DHxparams__imp_i2d_DIRECTORYSTRINGi2d_DIRECTORYSTRING__imp_i2d_DISPLAYTEXTi2d_DISPLAYTEXT__imp_i2d_DIST_POINTi2d_DIST_POINT__imp_i2d_DIST_POINT_NAMEi2d_DIST_POINT_NAME__imp_i2d_DSAPrivateKeyi2d_DSAPrivateKey__imp_i2d_DSAPrivateKey_bioi2d_DSAPrivateKey_bio__imp_i2d_DSAPrivateKey_fpi2d_DSAPrivateKey_fp__imp_i2d_DSAPublicKeyi2d_DSAPublicKey__imp_i2d_DSA_PUBKEYi2d_DSA_PUBKEY__imp_i2d_DSA_PUBKEY_bioi2d_DSA_PUBKEY_bio__imp_i2d_DSA_PUBKEY_fpi2d_DSA_PUBKEY_fp__imp_i2d_DSA_SIGi2d_DSA_SIG__imp_i2d_DSAparamsi2d_DSAparams__imp_i2d_ECDSA_SIGi2d_ECDSA_SIG__imp_i2d_ECPKParametersi2d_ECPKParameters__imp_i2d_ECParametersi2d_ECParameters__imp_i2d_ECPrivateKeyi2d_ECPrivateKey__imp_i2d_ECPrivateKey_bioi2d_ECPrivateKey_bio__imp_i2d_ECPrivateKey_fpi2d_ECPrivateKey_fp__imp_i2d_EC_PUBKEYi2d_EC_PUBKEY__imp_i2d_EC_PUBKEY_bioi2d_EC_PUBKEY_bio__imp_i2d_EC_PUBKEY_fpi2d_EC_PUBKEY_fp__imp_i2d_EDIPARTYNAMEi2d_EDIPARTYNAME__imp_i2d_ESS_CERT_IDi2d_ESS_CERT_ID__imp_i2d_ESS_ISSUER_SERIALi2d_ESS_ISSUER_SERIAL__imp_i2d_ESS_SIGNING_CERTi2d_ESS_SIGNING_CERT__imp_i2d_EXTENDED_KEY_USAGEi2d_EXTENDED_KEY_USAGE__imp_i2d_GENERAL_NAMESi2d_GENERAL_NAMES__imp_i2d_GENERAL_NAMEi2d_GENERAL_NAME__imp_i2d_ISSUING_DIST_POINTi2d_ISSUING_DIST_POINT__imp_i2d_KRB5_APREQBODYi2d_KRB5_APREQBODY__imp_i2d_KRB5_APREQi2d_KRB5_APREQ__imp_i2d_KRB5_AUTHDATAi2d_KRB5_AUTHDATA__imp_i2d_KRB5_AUTHENTBODYi2d_KRB5_AUTHENTBODY__imp_i2d_KRB5_AUTHENTi2d_KRB5_AUTHENT__imp_i2d_KRB5_CHECKSUMi2d_KRB5_CHECKSUM__imp_i2d_KRB5_ENCDATAi2d_KRB5_ENCDATA__imp_i2d_KRB5_ENCKEYi2d_KRB5_ENCKEY__imp_i2d_KRB5_PRINCNAMEi2d_KRB5_PRINCNAME__imp_i2d_KRB5_TICKETi2d_KRB5_TICKET__imp_i2d_KRB5_TKTBODYi2d_KRB5_TKTBODY__imp_i2d_NETSCAPE_CERT_SEQUENCEi2d_NETSCAPE_CERT_SEQUENCE__imp_i2d_NETSCAPE_SPKACi2d_NETSCAPE_SPKAC__imp_i2d_NETSCAPE_SPKIi2d_NETSCAPE_SPKI__imp_i2d_NETSCAPE_X509i2d_NETSCAPE_X509__imp_i2d_NOTICEREFi2d_NOTICEREF__imp_i2d_Netscape_RSAi2d_Netscape_RSA__imp_i2d_OCSP_BASICRESPi2d_OCSP_BASICRESP__imp_i2d_OCSP_CERTIDi2d_OCSP_CERTID__imp_i2d_OCSP_CERTSTATUSi2d_OCSP_CERTSTATUS__imp_i2d_OCSP_CRLIDi2d_OCSP_CRLID__imp_i2d_OCSP_ONEREQi2d_OCSP_ONEREQ__imp_i2d_OCSP_REQINFOi2d_OCSP_REQINFO__imp_i2d_OCSP_REQUESTi2d_OCSP_REQUEST__imp_i2d_OCSP_RESPBYTESi2d_OCSP_RESPBYTES__imp_i2d_OCSP_RESPDATAi2d_OCSP_RESPDATA__imp_i2d_OCSP_RESPIDi2d_OCSP_RESPID__imp_i2d_OCSP_RESPONSEi2d_OCSP_RESPONSE__imp_i2d_OCSP_REVOKEDINFOi2d_OCSP_REVOKEDINFO__imp_i2d_OCSP_SERVICELOCi2d_OCSP_SERVICELOC__imp_i2d_OCSP_SIGNATUREi2d_OCSP_SIGNATURE__imp_i2d_OCSP_SINGLERESPi2d_OCSP_SINGLERESP__imp_i2d_OTHERNAMEi2d_OTHERNAME__imp_i2d_PBE2PARAMi2d_PBE2PARAM__imp_i2d_PBEPARAMi2d_PBEPARAM__imp_i2d_PBKDF2PARAMi2d_PBKDF2PARAM__imp_i2d_PKCS12i2d_PKCS12__imp_i2d_PKCS12_BAGSi2d_PKCS12_BAGS__imp_i2d_PKCS12_MAC_DATAi2d_PKCS12_MAC_DATA__imp_i2d_PKCS12_SAFEBAGi2d_PKCS12_SAFEBAG__imp_i2d_PKCS12_bioi2d_PKCS12_bio__imp_i2d_PKCS12_fpi2d_PKCS12_fp__imp_i2d_PKCS7i2d_PKCS7__imp_i2d_PKCS7_DIGESTi2d_PKCS7_DIGEST__imp_i2d_PKCS7_ENCRYPTi2d_PKCS7_ENCRYPT__imp_i2d_PKCS7_ENC_CONTENTi2d_PKCS7_ENC_CONTENT__imp_i2d_PKCS7_ENVELOPEi2d_PKCS7_ENVELOPE__imp_i2d_PKCS7_ISSUER_AND_SERIALi2d_PKCS7_ISSUER_AND_SERIAL__imp_i2d_PKCS7_NDEFi2d_PKCS7_NDEF__imp_i2d_PKCS7_RECIP_INFOi2d_PKCS7_RECIP_INFO__imp_i2d_PKCS7_SIGNEDi2d_PKCS7_SIGNED__imp_i2d_PKCS7_SIGNER_INFOi2d_PKCS7_SIGNER_INFO__imp_i2d_PKCS7_SIGN_ENVELOPEi2d_PKCS7_SIGN_ENVELOPE__imp_i2d_PKCS7_bioi2d_PKCS7_bio__imp_i2d_PKCS7_bio_streami2d_PKCS7_bio_stream__imp_i2d_PKCS7_fpi2d_PKCS7_fp__imp_i2d_PKCS8PrivateKeyInfo_bioi2d_PKCS8PrivateKeyInfo_bio__imp_i2d_PKCS8PrivateKeyInfo_fpi2d_PKCS8PrivateKeyInfo_fp__imp_i2d_PKCS8PrivateKey_bioi2d_PKCS8PrivateKey_bio__imp_i2d_PKCS8PrivateKey_fpi2d_PKCS8PrivateKey_fp__imp_i2d_PKCS8PrivateKey_nid_bioi2d_PKCS8PrivateKey_nid_bio__imp_i2d_PKCS8PrivateKey_nid_fpi2d_PKCS8PrivateKey_nid_fp__imp_i2d_PKCS8_PRIV_KEY_INFOi2d_PKCS8_PRIV_KEY_INFO__imp_i2d_PKCS8_PRIV_KEY_INFO_bioi2d_PKCS8_PRIV_KEY_INFO_bio__imp_i2d_PKCS8_PRIV_KEY_INFO_fpi2d_PKCS8_PRIV_KEY_INFO_fp__imp_i2d_PKCS8_bioi2d_PKCS8_bio__imp_i2d_PKCS8_fpi2d_PKCS8_fp__imp_i2d_PKEY_USAGE_PERIODi2d_PKEY_USAGE_PERIOD__imp_i2d_POLICYINFOi2d_POLICYINFO__imp_i2d_POLICYQUALINFOi2d_POLICYQUALINFO__imp_i2d_PROXY_CERT_INFO_EXTENSIONi2d_PROXY_CERT_INFO_EXTENSION__imp_i2d_PROXY_POLICYi2d_PROXY_POLICY__imp_i2d_PUBKEYi2d_PUBKEY__imp_i2d_PUBKEY_bioi2d_PUBKEY_bio__imp_i2d_PUBKEY_fpi2d_PUBKEY_fp__imp_i2d_PrivateKeyi2d_PrivateKey__imp_i2d_PrivateKey_bioi2d_PrivateKey_bio__imp_i2d_PrivateKey_fpi2d_PrivateKey_fp__imp_i2d_PublicKeyi2d_PublicKey__imp_i2d_RSAPrivateKeyi2d_RSAPrivateKey__imp_i2d_RSAPrivateKey_bioi2d_RSAPrivateKey_bio__imp_i2d_RSAPrivateKey_fpi2d_RSAPrivateKey_fp__imp_i2d_RSAPublicKeyi2d_RSAPublicKey__imp_i2d_RSAPublicKey_bioi2d_RSAPublicKey_bio__imp_i2d_RSAPublicKey_fpi2d_RSAPublicKey_fp__imp_i2d_RSA_NETi2d_RSA_NET__imp_i2d_RSA_OAEP_PARAMSi2d_RSA_OAEP_PARAMS__imp_i2d_RSA_PSS_PARAMSi2d_RSA_PSS_PARAMS__imp_i2d_RSA_PUBKEYi2d_RSA_PUBKEY__imp_i2d_RSA_PUBKEY_bioi2d_RSA_PUBKEY_bio__imp_i2d_RSA_PUBKEY_fpi2d_RSA_PUBKEY_fp__imp_i2d_SXNETIDi2d_SXNETID__imp_i2d_SXNETi2d_SXNET__imp_i2d_TS_ACCURACYi2d_TS_ACCURACY__imp_i2d_TS_MSG_IMPRINTi2d_TS_MSG_IMPRINT__imp_i2d_TS_MSG_IMPRINT_bioi2d_TS_MSG_IMPRINT_bio__imp_i2d_TS_MSG_IMPRINT_fpi2d_TS_MSG_IMPRINT_fp__imp_i2d_TS_REQi2d_TS_REQ__imp_i2d_TS_REQ_bioi2d_TS_REQ_bio__imp_i2d_TS_REQ_fpi2d_TS_REQ_fp__imp_i2d_TS_RESPi2d_TS_RESP__imp_i2d_TS_RESP_bioi2d_TS_RESP_bio__imp_i2d_TS_RESP_fpi2d_TS_RESP_fp__imp_i2d_TS_STATUS_INFOi2d_TS_STATUS_INFO__imp_i2d_TS_TST_INFOi2d_TS_TST_INFO__imp_i2d_TS_TST_INFO_bioi2d_TS_TST_INFO_bio__imp_i2d_TS_TST_INFO_fpi2d_TS_TST_INFO_fp__imp_i2d_USERNOTICEi2d_USERNOTICE__imp_i2d_X509i2d_X509__imp_i2d_X509_ALGORSi2d_X509_ALGORS__imp_i2d_X509_ALGORi2d_X509_ALGOR__imp_i2d_X509_ATTRIBUTEi2d_X509_ATTRIBUTE__imp_i2d_X509_AUXi2d_X509_AUX__imp_i2d_X509_CERT_AUXi2d_X509_CERT_AUX__imp_i2d_X509_CERT_PAIRi2d_X509_CERT_PAIR__imp_i2d_X509_CINFi2d_X509_CINF__imp_i2d_X509_CRLi2d_X509_CRL__imp_i2d_X509_CRL_INFOi2d_X509_CRL_INFO__imp_i2d_X509_CRL_bioi2d_X509_CRL_bio__imp_i2d_X509_CRL_fpi2d_X509_CRL_fp__imp_i2d_X509_EXTENSIONSi2d_X509_EXTENSIONS__imp_i2d_X509_EXTENSIONi2d_X509_EXTENSION__imp_i2d_X509_NAMEi2d_X509_NAME__imp_i2d_X509_NAME_ENTRYi2d_X509_NAME_ENTRY__imp_i2d_X509_PKEYi2d_X509_PKEY__imp_i2d_X509_PUBKEYi2d_X509_PUBKEY__imp_i2d_X509_REQi2d_X509_REQ__imp_i2d_X509_REQ_INFOi2d_X509_REQ_INFO__imp_i2d_X509_REQ_bioi2d_X509_REQ_bio__imp_i2d_X509_REQ_fpi2d_X509_REQ_fp__imp_i2d_X509_REVOKEDi2d_X509_REVOKED__imp_i2d_X509_SIGi2d_X509_SIG__imp_i2d_X509_VALi2d_X509_VAL__imp_i2d_X509_bioi2d_X509_bio__imp_i2d_X509_fpi2d_X509_fp__imp_i2d_re_X509_tbsi2d_re_X509_tbs__imp_i2o_ECPublicKeyi2o_ECPublicKey__imp_i2s_ASN1_ENUMERATEDi2s_ASN1_ENUMERATED__imp_i2s_ASN1_ENUMERATED_TABLEi2s_ASN1_ENUMERATED_TABLE__imp_i2s_ASN1_INTEGERi2s_ASN1_INTEGER__imp_i2s_ASN1_OCTET_STRINGi2s_ASN1_OCTET_STRING__imp_i2t_ASN1_OBJECTi2t_ASN1_OBJECT__imp_i2v_ASN1_BIT_STRINGi2v_ASN1_BIT_STRING__imp_i2v_GENERAL_NAMESi2v_GENERAL_NAMES__imp_i2v_GENERAL_NAMEi2v_GENERAL_NAME__imp_idea_cbc_encryptidea_cbc_encrypt__imp_idea_cfb64_encryptidea_cfb64_encrypt__imp_idea_ecb_encryptidea_ecb_encrypt__imp_idea_encryptidea_encrypt__imp_idea_ofb64_encryptidea_ofb64_encrypt__imp_idea_optionsidea_options__imp_idea_set_decrypt_keyidea_set_decrypt_key__imp_idea_set_encrypt_keyidea_set_encrypt_key__imp_lh_deletelh_delete__imp_lh_doalllh_doall__imp_lh_doall_arglh_doall_arg__imp_lh_freelh_free__imp_lh_insertlh_insert__imp_lh_newlh_new__imp_lh_node_statslh_node_stats__imp_lh_node_stats_biolh_node_stats_bio__imp_lh_node_usage_statslh_node_usage_stats__imp_lh_node_usage_stats_biolh_node_usage_stats_bio__imp_lh_num_itemslh_num_items__imp_lh_retrievelh_retrieve__imp_lh_statslh_stats__imp_lh_stats_biolh_stats_bio__imp_lh_strhashlh_strhash__imp_name_cmpname_cmp__imp_o2i_ECPublicKeyo2i_ECPublicKey__imp_pitem_freepitem_free__imp_pitem_newpitem_new__imp_pqueue_findpqueue_find__imp_pqueue_freepqueue_free__imp_pqueue_insertpqueue_insert__imp_pqueue_iteratorpqueue_iterator__imp_pqueue_newpqueue_new__imp_pqueue_nextpqueue_next__imp_pqueue_peekpqueue_peek__imp_pqueue_poppqueue_pop__imp_pqueue_printpqueue_print__imp_pqueue_sizepqueue_size__imp_private_AES_set_decrypt_keyprivate_AES_set_decrypt_key__imp_private_AES_set_encrypt_keyprivate_AES_set_encrypt_key__imp_private_RC4_set_keyprivate_RC4_set_key__imp_s2i_ASN1_INTEGERs2i_ASN1_INTEGER__imp_s2i_ASN1_OCTET_STRINGs2i_ASN1_OCTET_STRING__imp_sk_deep_copysk_deep_copy__imp_sk_deletesk_delete__imp_sk_delete_ptrsk_delete_ptr__imp_sk_dupsk_dup__imp_sk_findsk_find__imp_sk_find_exsk_find_ex__imp_sk_freesk_free__imp_sk_insertsk_insert__imp_sk_is_sortedsk_is_sorted__imp_sk_newsk_new__imp_sk_new_nullsk_new_null__imp_sk_numsk_num__imp_sk_popsk_pop__imp_sk_pop_freesk_pop_free__imp_sk_pushsk_push__imp_sk_setsk_set__imp_sk_set_cmp_funcsk_set_cmp_func__imp_sk_shiftsk_shift__imp_sk_sortsk_sort__imp_sk_unshiftsk_unshift__imp_sk_valuesk_value__imp_sk_zerosk_zero__imp_string_to_hexstring_to_hex__imp_v2i_ASN1_BIT_STRINGv2i_ASN1_BIT_STRING__imp_v2i_GENERAL_NAMESv2i_GENERAL_NAMES__imp_v2i_GENERAL_NAMEv2i_GENERAL_NAME__imp_v2i_GENERAL_NAME_exv2i_GENERAL_NAME_ex__imp_OSSL_DES_version__imp_OSSL_libdes_version / 1485441930 0 193105 ` fD|V N6`:Z>~dJ4zZ:tXH4"pP, xT0vP6     x  X  @  * hTB* |\>* zV>"rV80   d!!B""###^$$8%%&&&h''P(()4) **+x++d,,N--4..///^00F11(22333d44V55*666l77H88999f::@;;<<<f==B>> ???f@@BAABBCnCCDDD$EEElFFFGGHHHbIIBJJKK LLLdMMJNN0OO PrPPFQQRRRTSS8TTUUUlVVJWW2XXYYZjZZ>[[\\\`]]4^^_r__F``,aaahbbJcc*dd eteeVff,gghjhhFiijjjXkk4llmrmmHnnoooXp0qpqrhrr8sstnttBuuv|vvLwwxxxhyyBzz{{{b||L}}(~~~f: x`ԃB.zL^̉6dҌD$~^А>dؓF"xT&^ƙ.j֛:xܝFxޟN"|dأD|R0xJ dܫN,pT0 vޱLP,vܶFXʹ0pػ@Lf2pJX, tL&x\4|N* tbP@4,"jR@60 ^L.|`B~V@$fN0 X:bVD0 l\TF4(lHb4nX  D  0   n  R  :nP2fVB6p^H*vdR  :!!""#x##^$$:%%&&'|''h((H)).**++,,-~--t..Z//X00N11B22.33444^55:66777r88h99T::6;;<<<f==`>>`??P@@DAAllm|mmPnn>oo pppdqq6rrsssVtt$uuufvvDwwxxxhyyBzz{{{R||4}}~~~T&tT(vX΅<x`ԉNĊ0tPƍ6 fҐ@jޓR”2fҗ<xb֛L2xZСD.`Ц: ~dةJ*pڭH, zbTʲ4V,4& |^Ⱥ2x|rN2~Z0~^4|V4v`L: v\6jdN<,nR<&vZ@&tbVRD0&jF pV>*xbJ$v\D.nP, ~`F2   h  L  2    rZB& ~hN2lT<&xZB(vR  4!!""#t##X$$@%%*&&'''l((Z)):***++,, ---f..J//0001112>3344h24f55@66777l8D99":::p;;N<<84==>|>>X??8@@AAAjBBJCC(DDEzEEVFF2GG HtHHJII(JJKrKKJLL.MMNNNlOOVPPDQQ*RRSSTvTT^UUNVV4WWXXXhYYTZZ8[[ \\]]]`^^6__"``avaaVbb>cc dddjeeHff*gg hhhliiTjj4kkllljmmRnn:oo(ppqqrvrrdss\tt@uu"vv w~wwhxxFyy(zz {x{{T||.}}~~~f@năV4~ZȆ6^̉:jR0 zVĐ2lԒF0nXʗ<" ~\ʛ6 vLbҠB  lܣJ"X*~T(^ī0rܭFfҰ<~T"ZƵ<$hָF" ^μH0tN*dD,~X4jH&tP* zX2~FJNpT*jH&fH8v\:"tR(lN$nDZ2xJZ.plV4|^> r  V  @  6     f  L  4    x T : "   p  R  8     f  @     n  T  8     l  \  F  6  .  ,   n! ! V" " 4# # $ $ $ b% % <& & ' ' ' j( ( H) ) 2* * + + , x, , X- - 8. . / / / t0 0 R1 1 :2 2 "3 3 3 |4 4 j5 5 D6 6 "7 7 8 v8 8 P9 9 :: : ; ; ; b< < "> > > d? ? 8@ @ $A A A fB B f f .g h h g h zi i Zj j Dk k "l l m xm m \n n @o o &p p q q r vr r hs s `t t u 8v Ju v 8w w x x y y y nz z \{ { D| | .} } ~ v~ ~ X  :  l ܂ L . "  p ކ P ć 0 x ` 2  ʊ  t ܍ H , x R ȑ :  n ڔ J . v V ʘ :  h ֛ F ,  n ` ڠ N ơ 8  h ܤ V ȥ < $  v j ܪ P .  v N *  p R ( r d ص H  j ظ H 0  x ` ʼ <   v N * ~ ` 8  t X : &  h 8 p D " f B  f D  ` , l J (  r T 4  b < x ^ >  ~ X N B 6    j F "  t V 2  v F 2  b > l <  v J  \ , l :  ~  L     h  >     Z  >   z b :   v  &   b  B     j  8     r  T  >  ,   z  \  T  @  .     l N! ! 6" " # # $ z$ $ T% % ,& & ' v' ' V( ( B) ) $* * + t+ + V, , ,- - . . . b/ / R0 0 61 1 2 2 3 r3 3 \4 4 X5 5 J6 6 <7 7 48 8 9 9 9 j: : L; ; &< < = = = l> > N? ? 4@ @ A A A hB B PC C @D D 6E E F F G G G nH H RI I 6J J K K L L L pM M TN N >O O P P Q rQ Q NR R ,S S T hT T JU U ,V V W ~W W bX X 6Y Y Z Z Z l[ [ D\ \ ,] ] ^ ~^ ^ b_ _ @` ` a a b tb b Zc c Jd d .e e f f g vg g Lh h i i j lj j Fk k l l l Vm m 6n n o o o rp p Tq q 8r r s s t pt t Nu u (v v w rw w Rx x 4y y z z { v{ { ^| | @} } "~ ~  v  X ʀ >  ` ̃ :  ^ І D 8 " h ؋ N ƌ 6  h ؏ D  h ڒ L 4  ^ ̖ 6  p ` Ԛ F * j ֝ F 6  t P . "  ~ l ܦ L Ƨ < v d ҫ @ n f T ư < $ n ^ ʵ >  j Z ҹ J & l ڼ J *   ^ @ " j L .   x ^ <   z h Z :  f R B * j J 6 j P 8   | r V B * r b Z T D 2 &   v d P > ,   l P 2  t ` N 4  f J .  z N D :  "       v  ^  R  F  > 2 ,  `  <  &   p  L  (   |  P  0   n  X  2     l  `  T  <     t R! ! 2" " # # $ t$ $ X% % D& & 0' ' ( r( ( Z) ) 0* * + + , ~, , v- - d. . b/ / D0 0 1 1 1 j2 2 J3 3 *4 4 5 5 5 V6 6 47 7 8 8 9 |9 9 V: : 2; ; < < < j= = V> > r r $s s t zt t \u u Fv v ,w w x rx x Py y *z z { { { `| | <} } ~ ~ ~ ^  :  h ւ D * | \ ̆ <  h ؉ F , | V ƍ 4  \ ̐ <  n L " f ؖ H f ڙ J Ě 6  d ڝ N Ğ > " l ܡ X Ƣ .  r R .  f Ш B  f Ы > " j ֮ @  j ڱ F  ` д @  ҷ b D " f ֺ D ^ Ƚ < $ h H (  n N .  d N ,  z ` >  j J 0  p V 0 x X 6  f F  f F $  p R 8  f D &  r N 6  ` @  f D &  z R * r N " t ^ <  r V D 2  ~ \  8  "   b  >     p  P  ,  z Z , ~ Z  2   v  T  6  t   R  ,   r  P .    ~  X  2   |  P  $   r  X :! " ! " " h# # @$ $ % % % f& & 6' ' ( h( ( D) ) ,* * + f+ + 8, , - t- - F. . / / / \0 0 .1 1 2 |2 2 h3 3 J4 4 5 5 5 R6 6 7 7 7 V8 8 $9 9 9 X: : *; ; ; ^< < *= = v> > > B= =   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwyxz{|}~      !"#$%&'()*+,-./0123457689;:<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTWUVXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0128345679:;<=>?@AKBCDEFGHIJLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()2*+,-./01345678:9;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX^YZ[\]_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@DABCEFGHIJKLMNOPQRSTUVWXYZ[\^]_`abcdefghijklmnopqrstuvwxyz{|}~                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 P 9 : ; < = > ? @ A B C D E F G H I J K L M N O Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " #   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwyxz{|}~      !"#$%&'()*+,-./0123457689;:<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTWUVXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0128345679:;<=>?@AKBCDEFGHIJLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()2*+,-./01345678:9;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX^YZ[\]_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ef      !"#$%&'()*+,-./0123456789:;<=>?@DABCEFGHIJKLMNOPQRSTUVWXYZ[\^]_`abcdefghijklmnopqrstuvwxyz{|}~                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 P 9 : ; < = > ? @ A B C D E F G H I J K L M N O Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 5 3 4 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) + * , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W Y X Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`acbd$ % & ' ( ) * + , - . / 0 1 2 5 3 4 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) + * , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W Y X Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`acbdACCESS_DESCRIPTION_freeACCESS_DESCRIPTION_itACCESS_DESCRIPTION_newAES_bi_ige_encryptAES_cbc_encryptAES_cfb128_encryptAES_cfb1_encryptAES_cfb8_encryptAES_ctr128_encryptAES_decryptAES_ecb_encryptAES_encryptAES_ige_encryptAES_ofb128_encryptAES_optionsAES_set_decrypt_keyAES_set_encrypt_keyAES_unwrap_keyAES_wrap_keyASN1_ANY_itASN1_BIT_STRING_checkASN1_BIT_STRING_freeASN1_BIT_STRING_get_bitASN1_BIT_STRING_itASN1_BIT_STRING_name_printASN1_BIT_STRING_newASN1_BIT_STRING_num_ascASN1_BIT_STRING_setASN1_BIT_STRING_set_ascASN1_BIT_STRING_set_bitASN1_BMPSTRING_freeASN1_BMPSTRING_itASN1_BMPSTRING_newASN1_BOOLEAN_itASN1_ENUMERATED_freeASN1_ENUMERATED_getASN1_ENUMERATED_itASN1_ENUMERATED_newASN1_ENUMERATED_setASN1_ENUMERATED_to_BNASN1_FBOOLEAN_itASN1_GENERALIZEDTIME_adjASN1_GENERALIZEDTIME_checkASN1_GENERALIZEDTIME_freeASN1_GENERALIZEDTIME_itASN1_GENERALIZEDTIME_newASN1_GENERALIZEDTIME_printASN1_GENERALIZEDTIME_setASN1_GENERALIZEDTIME_set_stringASN1_GENERALSTRING_freeASN1_GENERALSTRING_itASN1_GENERALSTRING_newASN1_IA5STRING_freeASN1_IA5STRING_itASN1_IA5STRING_newASN1_INTEGER_cmpASN1_INTEGER_dupASN1_INTEGER_freeASN1_INTEGER_getASN1_INTEGER_itASN1_INTEGER_newASN1_INTEGER_setASN1_INTEGER_to_BNASN1_NULL_freeASN1_NULL_itASN1_NULL_newASN1_OBJECT_createASN1_OBJECT_freeASN1_OBJECT_itASN1_OBJECT_newASN1_OCTET_STRING_NDEF_itASN1_OCTET_STRING_cmpASN1_OCTET_STRING_dupASN1_OCTET_STRING_freeASN1_OCTET_STRING_itASN1_OCTET_STRING_newASN1_OCTET_STRING_setASN1_PCTX_freeASN1_PCTX_get_cert_flagsASN1_PCTX_get_flagsASN1_PCTX_get_nm_flagsASN1_PCTX_get_oid_flagsASN1_PCTX_get_str_flagsASN1_PCTX_newASN1_PCTX_set_cert_flagsASN1_PCTX_set_flagsASN1_PCTX_set_nm_flagsASN1_PCTX_set_oid_flagsASN1_PCTX_set_str_flagsASN1_PRINTABLESTRING_freeASN1_PRINTABLESTRING_itASN1_PRINTABLESTRING_newASN1_PRINTABLE_freeASN1_PRINTABLE_itASN1_PRINTABLE_newASN1_PRINTABLE_typeASN1_SEQUENCE_ANY_itASN1_SEQUENCE_itASN1_SET_ANY_itASN1_STRING_TABLE_addASN1_STRING_TABLE_cleanupASN1_STRING_TABLE_getASN1_STRING_clear_freeASN1_STRING_cmpASN1_STRING_copyASN1_STRING_dataASN1_STRING_dupASN1_STRING_freeASN1_STRING_get_default_maskASN1_STRING_lengthASN1_STRING_length_setASN1_STRING_newASN1_STRING_printASN1_STRING_print_exASN1_STRING_print_ex_fpASN1_STRING_setASN1_STRING_set0ASN1_STRING_set_by_NIDASN1_STRING_set_default_maskASN1_STRING_set_default_mask_ascASN1_STRING_to_UTF8ASN1_STRING_typeASN1_STRING_type_newASN1_T61STRING_freeASN1_T61STRING_itASN1_T61STRING_newASN1_TBOOLEAN_itASN1_TIME_adjASN1_TIME_checkASN1_TIME_diffASN1_TIME_freeASN1_TIME_itASN1_TIME_newASN1_TIME_printASN1_TIME_setASN1_TIME_set_stringASN1_TIME_to_generalizedtimeASN1_TYPE_cmpASN1_TYPE_freeASN1_TYPE_getASN1_TYPE_get_int_octetstringASN1_TYPE_get_octetstringASN1_TYPE_newASN1_TYPE_setASN1_TYPE_set1ASN1_TYPE_set_int_octetstringASN1_TYPE_set_octetstringASN1_UNIVERSALSTRING_freeASN1_UNIVERSALSTRING_itASN1_UNIVERSALSTRING_newASN1_UNIVERSALSTRING_to_stringASN1_UTCTIME_adjASN1_UTCTIME_checkASN1_UTCTIME_cmp_time_tASN1_UTCTIME_freeASN1_UTCTIME_itASN1_UTCTIME_newASN1_UTCTIME_printASN1_UTCTIME_setASN1_UTCTIME_set_stringASN1_UTF8STRING_freeASN1_UTF8STRING_itASN1_UTF8STRING_newASN1_VISIBLESTRING_freeASN1_VISIBLESTRING_itASN1_VISIBLESTRING_newASN1_add_oid_moduleASN1_bn_printASN1_check_infinite_endASN1_const_check_infinite_endASN1_d2i_bioASN1_d2i_fpASN1_digestASN1_dupASN1_generate_nconfASN1_generate_v3ASN1_get_objectASN1_i2d_bioASN1_i2d_fpASN1_item_d2iASN1_item_d2i_bioASN1_item_d2i_fpASN1_item_digestASN1_item_dupASN1_item_ex_d2iASN1_item_ex_freeASN1_item_ex_i2dASN1_item_ex_newASN1_item_freeASN1_item_i2dASN1_item_i2d_bioASN1_item_i2d_fpASN1_item_ndef_i2dASN1_item_newASN1_item_packASN1_item_printASN1_item_signASN1_item_sign_ctxASN1_item_unpackASN1_item_verifyASN1_mbstring_copyASN1_mbstring_ncopyASN1_object_sizeASN1_pack_stringASN1_parseASN1_parse_dumpASN1_primitive_freeASN1_primitive_newASN1_put_eocASN1_put_objectASN1_seq_packASN1_seq_unpackASN1_signASN1_tag2bitASN1_tag2strASN1_template_d2iASN1_template_freeASN1_template_i2dASN1_template_newASN1_unpack_stringASN1_verifyAUTHORITY_INFO_ACCESS_freeAUTHORITY_INFO_ACCESS_itAUTHORITY_INFO_ACCESS_newAUTHORITY_KEYID_freeAUTHORITY_KEYID_itAUTHORITY_KEYID_newBASIC_CONSTRAINTS_freeBASIC_CONSTRAINTS_itBASIC_CONSTRAINTS_newBF_cbc_encryptBF_cfb64_encryptBF_decryptBF_ecb_encryptBF_encryptBF_ofb64_encryptBF_optionsBF_set_keyBIGNUM_itBIO_acceptBIO_asn1_get_prefixBIO_asn1_get_suffixBIO_asn1_set_prefixBIO_asn1_set_suffixBIO_callback_ctrlBIO_clear_flagsBIO_copy_next_retryBIO_ctrlBIO_ctrl_get_read_requestBIO_ctrl_get_write_guaranteeBIO_ctrl_pendingBIO_ctrl_reset_read_requestBIO_ctrl_wpendingBIO_debug_callbackBIO_dgram_non_fatal_errorBIO_dumpBIO_dump_cbBIO_dump_fpBIO_dump_indentBIO_dump_indent_cbBIO_dump_indent_fpBIO_dup_chainBIO_f_asn1BIO_f_base64BIO_f_bufferBIO_f_cipherBIO_f_mdBIO_f_nbio_testBIO_f_nullBIO_f_reliableBIO_fd_non_fatal_errorBIO_fd_should_retryBIO_find_typeBIO_freeBIO_free_allBIO_get_accept_socketBIO_get_callbackBIO_get_callback_argBIO_get_ex_dataBIO_get_ex_new_indexBIO_get_host_ipBIO_get_portBIO_get_retry_BIOBIO_get_retry_reasonBIO_gethostbynameBIO_getsBIO_hex_stringBIO_indentBIO_int_ctrlBIO_method_nameBIO_method_typeBIO_newBIO_new_CMSBIO_new_NDEFBIO_new_PKCS7BIO_new_acceptBIO_new_bio_pairBIO_new_connectBIO_new_dgramBIO_new_fdBIO_new_fileBIO_new_fpBIO_new_mem_bufBIO_new_socketBIO_nextBIO_nreadBIO_nread0BIO_number_readBIO_number_writtenBIO_nwriteBIO_nwrite0BIO_popBIO_printfBIO_ptr_ctrlBIO_pushBIO_putsBIO_readBIO_s_acceptBIO_s_bioBIO_s_connectBIO_s_datagramBIO_s_fdBIO_s_fileBIO_s_memBIO_s_nullBIO_s_socketBIO_setBIO_set_callbackBIO_set_callback_argBIO_set_cipherBIO_set_ex_dataBIO_set_flagsBIO_set_tcp_ndelayBIO_snprintfBIO_sock_cleanupBIO_sock_errorBIO_sock_initBIO_sock_non_fatal_errorBIO_sock_should_retryBIO_socket_ioctlBIO_socket_nbioBIO_test_flagsBIO_vfreeBIO_vprintfBIO_vsnprintfBIO_writeBN_BLINDING_convertBN_BLINDING_convert_exBN_BLINDING_create_paramBN_BLINDING_freeBN_BLINDING_get_flagsBN_BLINDING_get_thread_idBN_BLINDING_invertBN_BLINDING_invert_exBN_BLINDING_newBN_BLINDING_set_flagsBN_BLINDING_set_thread_idBN_BLINDING_thread_idBN_BLINDING_updateBN_CTX_endBN_CTX_freeBN_CTX_getBN_CTX_initBN_CTX_newBN_CTX_startBN_GENCB_callBN_GF2m_addBN_GF2m_arr2polyBN_GF2m_modBN_GF2m_mod_arrBN_GF2m_mod_divBN_GF2m_mod_div_arrBN_GF2m_mod_expBN_GF2m_mod_exp_arrBN_GF2m_mod_invBN_GF2m_mod_inv_arrBN_GF2m_mod_mulBN_GF2m_mod_mul_arrBN_GF2m_mod_solve_quadBN_GF2m_mod_solve_quad_arrBN_GF2m_mod_sqrBN_GF2m_mod_sqr_arrBN_GF2m_mod_sqrtBN_GF2m_mod_sqrt_arrBN_GF2m_poly2arrBN_MONT_CTX_copyBN_MONT_CTX_freeBN_MONT_CTX_initBN_MONT_CTX_newBN_MONT_CTX_setBN_MONT_CTX_set_lockedBN_RECP_CTX_freeBN_RECP_CTX_initBN_RECP_CTX_newBN_RECP_CTX_setBN_X931_derive_prime_exBN_X931_generate_XpqBN_X931_generate_prime_exBN_addBN_add_wordBN_asc2bnBN_bin2bnBN_bn2binBN_bn2decBN_bn2hexBN_bn2mpiBN_bntest_randBN_clearBN_clear_bitBN_clear_freeBN_cmpBN_consttime_swapBN_copyBN_dec2bnBN_divBN_div_recpBN_div_wordBN_dupBN_expBN_freeBN_from_montgomeryBN_gcdBN_generate_primeBN_generate_prime_exBN_get0_nist_prime_192BN_get0_nist_prime_224BN_get0_nist_prime_256BN_get0_nist_prime_384BN_get0_nist_prime_521BN_get_paramsBN_get_wordBN_hex2bnBN_initBN_is_bit_setBN_is_primeBN_is_prime_exBN_is_prime_fasttestBN_is_prime_fasttest_exBN_kroneckerBN_lshiftBN_lshift1BN_mask_bitsBN_mod_addBN_mod_add_quickBN_mod_expBN_mod_exp2_montBN_mod_exp_montBN_mod_exp_mont_consttimeBN_mod_exp_mont_wordBN_mod_exp_recpBN_mod_exp_simpleBN_mod_inverseBN_mod_lshiftBN_mod_lshift1BN_mod_lshift1_quickBN_mod_lshift_quickBN_mod_mulBN_mod_mul_montgomeryBN_mod_mul_reciprocalBN_mod_sqrBN_mod_sqrtBN_mod_subBN_mod_sub_quickBN_mod_wordBN_mpi2bnBN_mulBN_mul_wordBN_newBN_nist_mod_192BN_nist_mod_224BN_nist_mod_256BN_nist_mod_384BN_nist_mod_521BN_nnmodBN_num_bitsBN_num_bits_wordBN_optionsBN_printBN_print_fpBN_pseudo_randBN_pseudo_rand_rangeBN_randBN_rand_rangeBN_reciprocalBN_rshiftBN_rshift1BN_set_bitBN_set_negativeBN_set_paramsBN_set_wordBN_sqrBN_subBN_sub_wordBN_swapBN_to_ASN1_ENUMERATEDBN_to_ASN1_INTEGERBN_uaddBN_ucmpBN_usubBN_value_oneBUF_MEM_freeBUF_MEM_growBUF_MEM_grow_cleanBUF_MEM_newBUF_memdupBUF_reverseBUF_strdupBUF_strlcatBUF_strlcpyBUF_strndupBUF_strnlenCAST_cbc_encryptCAST_cfb64_encryptCAST_decryptCAST_ecb_encryptCAST_encryptCAST_ofb64_encryptCAST_set_keyCBIGNUM_itCERTIFICATEPOLICIES_freeCERTIFICATEPOLICIES_itCERTIFICATEPOLICIES_newCMAC_CTX_cleanupCMAC_CTX_copyCMAC_CTX_freeCMAC_CTX_get0_cipher_ctxCMAC_CTX_newCMAC_FinalCMAC_InitCMAC_UpdateCMAC_resumeCMS_ContentInfo_freeCMS_ContentInfo_itCMS_ContentInfo_newCMS_ContentInfo_print_ctxCMS_EncryptedData_decryptCMS_EncryptedData_encryptCMS_EncryptedData_set1_keyCMS_EnvelopedData_createCMS_ReceiptRequest_create0CMS_ReceiptRequest_freeCMS_ReceiptRequest_get0_valuesCMS_ReceiptRequest_itCMS_ReceiptRequest_newCMS_RecipientEncryptedKey_cert_cmpCMS_RecipientEncryptedKey_get0_idCMS_RecipientInfo_decryptCMS_RecipientInfo_encryptCMS_RecipientInfo_get0_pkey_ctxCMS_RecipientInfo_kari_decryptCMS_RecipientInfo_kari_get0_algCMS_RecipientInfo_kari_get0_ctxCMS_RecipientInfo_kari_get0_orig_idCMS_RecipientInfo_kari_get0_reksCMS_RecipientInfo_kari_orig_id_cmpCMS_RecipientInfo_kari_set0_pkeyCMS_RecipientInfo_kekri_get0_idCMS_RecipientInfo_kekri_id_cmpCMS_RecipientInfo_ktri_cert_cmpCMS_RecipientInfo_ktri_get0_algsCMS_RecipientInfo_ktri_get0_signer_idCMS_RecipientInfo_set0_keyCMS_RecipientInfo_set0_passwordCMS_RecipientInfo_set0_pkeyCMS_RecipientInfo_typeCMS_SharedInfo_encodeCMS_SignedData_initCMS_SignerInfo_cert_cmpCMS_SignerInfo_get0_algsCMS_SignerInfo_get0_md_ctxCMS_SignerInfo_get0_pkey_ctxCMS_SignerInfo_get0_signatureCMS_SignerInfo_get0_signer_idCMS_SignerInfo_set1_signer_certCMS_SignerInfo_signCMS_SignerInfo_verifyCMS_SignerInfo_verify_contentCMS_add0_CertificateChoicesCMS_add0_RevocationInfoChoiceCMS_add0_certCMS_add0_crlCMS_add0_recipient_keyCMS_add0_recipient_passwordCMS_add1_ReceiptRequestCMS_add1_certCMS_add1_crlCMS_add1_recipient_certCMS_add1_signerCMS_add_simple_smimecapCMS_add_smimecapCMS_add_standard_smimecapCMS_compressCMS_dataCMS_dataFinalCMS_dataInitCMS_data_createCMS_decryptCMS_decrypt_set1_keyCMS_decrypt_set1_passwordCMS_decrypt_set1_pkeyCMS_digest_createCMS_digest_verifyCMS_encryptCMS_finalCMS_get0_RecipientInfosCMS_get0_SignerInfosCMS_get0_contentCMS_get0_eContentTypeCMS_get0_signersCMS_get0_typeCMS_get1_ReceiptRequestCMS_get1_certsCMS_get1_crlsCMS_is_detachedCMS_set1_eContentTypeCMS_set1_signers_certsCMS_set_detachedCMS_signCMS_sign_receiptCMS_signed_add1_attrCMS_signed_add1_attr_by_NIDCMS_signed_add1_attr_by_OBJCMS_signed_add1_attr_by_txtCMS_signed_delete_attrCMS_signed_get0_data_by_OBJCMS_signed_get_attrCMS_signed_get_attr_by_NIDCMS_signed_get_attr_by_OBJCMS_signed_get_attr_countCMS_streamCMS_uncompressCMS_unsigned_add1_attrCMS_unsigned_add1_attr_by_NIDCMS_unsigned_add1_attr_by_OBJCMS_unsigned_add1_attr_by_txtCMS_unsigned_delete_attrCMS_unsigned_get0_data_by_OBJCMS_unsigned_get_attrCMS_unsigned_get_attr_by_NIDCMS_unsigned_get_attr_by_OBJCMS_unsigned_get_attr_countCMS_verifyCMS_verify_receiptCOMP_CTX_freeCOMP_CTX_newCOMP_compress_blockCOMP_expand_blockCOMP_rleCOMP_zlibCOMP_zlib_cleanupCONF_dump_bioCONF_dump_fpCONF_freeCONF_get1_default_config_fileCONF_get_numberCONF_get_sectionCONF_get_stringCONF_imodule_get_flagsCONF_imodule_get_moduleCONF_imodule_get_nameCONF_imodule_get_usr_dataCONF_imodule_get_valueCONF_imodule_set_flagsCONF_imodule_set_usr_dataCONF_loadCONF_load_bioCONF_load_fpCONF_module_addCONF_module_get_usr_dataCONF_module_set_usr_dataCONF_modules_finishCONF_modules_freeCONF_modules_loadCONF_modules_load_fileCONF_modules_unloadCONF_parse_listCONF_set_default_methodCONF_set_nconfCRL_DIST_POINTS_freeCRL_DIST_POINTS_itCRL_DIST_POINTS_newCRYPTO_128_unwrapCRYPTO_128_wrapCRYPTO_THREADID_cmpCRYPTO_THREADID_cpyCRYPTO_THREADID_currentCRYPTO_THREADID_get_callbackCRYPTO_THREADID_hashCRYPTO_THREADID_set_callbackCRYPTO_THREADID_set_numericCRYPTO_THREADID_set_pointerCRYPTO_add_lockCRYPTO_cbc128_decryptCRYPTO_cbc128_encryptCRYPTO_ccm128_aadCRYPTO_ccm128_decryptCRYPTO_ccm128_decrypt_ccm64CRYPTO_ccm128_encryptCRYPTO_ccm128_encrypt_ccm64CRYPTO_ccm128_initCRYPTO_ccm128_setivCRYPTO_ccm128_tagCRYPTO_cfb128_1_encryptCRYPTO_cfb128_8_encryptCRYPTO_cfb128_encryptCRYPTO_cleanup_all_ex_dataCRYPTO_ctr128_encryptCRYPTO_ctr128_encrypt_ctr32CRYPTO_cts128_decryptCRYPTO_cts128_decrypt_blockCRYPTO_cts128_encryptCRYPTO_cts128_encrypt_blockCRYPTO_dbg_freeCRYPTO_dbg_get_optionsCRYPTO_dbg_mallocCRYPTO_dbg_reallocCRYPTO_dbg_set_optionsCRYPTO_destroy_dynlockidCRYPTO_dup_ex_dataCRYPTO_ex_data_new_classCRYPTO_freeCRYPTO_free_ex_dataCRYPTO_free_lockedCRYPTO_gcm128_aadCRYPTO_gcm128_decryptCRYPTO_gcm128_decrypt_ctr32CRYPTO_gcm128_encryptCRYPTO_gcm128_encrypt_ctr32CRYPTO_gcm128_finishCRYPTO_gcm128_initCRYPTO_gcm128_newCRYPTO_gcm128_releaseCRYPTO_gcm128_setivCRYPTO_gcm128_tagCRYPTO_get_add_lock_callbackCRYPTO_get_dynlock_create_callbackCRYPTO_get_dynlock_destroy_callbackCRYPTO_get_dynlock_lock_callbackCRYPTO_get_dynlock_valueCRYPTO_get_ex_dataCRYPTO_get_ex_data_implementationCRYPTO_get_ex_new_indexCRYPTO_get_id_callbackCRYPTO_get_lock_nameCRYPTO_get_locked_mem_ex_functionsCRYPTO_get_locked_mem_functionsCRYPTO_get_locking_callbackCRYPTO_get_mem_debug_functionsCRYPTO_get_mem_debug_optionsCRYPTO_get_mem_ex_functionsCRYPTO_get_mem_functionsCRYPTO_get_new_dynlockidCRYPTO_get_new_lockidCRYPTO_is_mem_check_onCRYPTO_lockCRYPTO_mallocCRYPTO_malloc_lockedCRYPTO_mem_ctrlCRYPTO_mem_leaksCRYPTO_mem_leaks_cbCRYPTO_mem_leaks_fpCRYPTO_memcmpCRYPTO_new_ex_dataCRYPTO_nistcts128_decryptCRYPTO_nistcts128_decrypt_blockCRYPTO_nistcts128_encryptCRYPTO_nistcts128_encrypt_blockCRYPTO_num_locksCRYPTO_ofb128_encryptCRYPTO_pop_infoCRYPTO_push_info_CRYPTO_reallocCRYPTO_realloc_cleanCRYPTO_remallocCRYPTO_remove_all_infoCRYPTO_set_add_lock_callbackCRYPTO_set_dynlock_create_callbackCRYPTO_set_dynlock_destroy_callbackCRYPTO_set_dynlock_lock_callbackCRYPTO_set_ex_dataCRYPTO_set_ex_data_implementationCRYPTO_set_id_callbackCRYPTO_set_locked_mem_ex_functionsCRYPTO_set_locked_mem_functionsCRYPTO_set_locking_callbackCRYPTO_set_mem_debug_functionsCRYPTO_set_mem_debug_optionsCRYPTO_set_mem_ex_functionsCRYPTO_set_mem_functionsCRYPTO_strdupCRYPTO_thread_idCRYPTO_xts128_encryptCamellia_cbc_encryptCamellia_cfb128_encryptCamellia_cfb1_encryptCamellia_cfb8_encryptCamellia_ctr128_encryptCamellia_decryptCamellia_ecb_encryptCamellia_encryptCamellia_ofb128_encryptCamellia_set_keyDES_cbc_cksumDES_cbc_encryptDES_cfb64_encryptDES_cfb_encryptDES_check_key_parityDES_cryptDES_decrypt3DES_ecb3_encryptDES_ecb_encryptDES_ede3_cbc_encryptDES_ede3_cbcm_encryptDES_ede3_cfb64_encryptDES_ede3_cfb_encryptDES_ede3_ofb64_encryptDES_enc_readDES_enc_writeDES_encrypt1DES_encrypt2DES_encrypt3DES_fcryptDES_is_weak_keyDES_key_schedDES_ncbc_encryptDES_ofb64_encryptDES_ofb_encryptDES_optionsDES_pcbc_encryptDES_quad_cksumDES_random_keyDES_read_2passwordsDES_read_passwordDES_set_keyDES_set_key_checkedDES_set_key_uncheckedDES_set_odd_parityDES_string_to_2keysDES_string_to_keyDES_xcbc_encryptDH_KDF_X9_42DH_OpenSSLDH_checkDH_check_pub_keyDH_compute_keyDH_compute_key_paddedDH_freeDH_generate_keyDH_generate_parametersDH_generate_parameters_exDH_get_1024_160DH_get_2048_224DH_get_2048_256DH_get_default_methodDH_get_ex_dataDH_get_ex_new_indexDH_newDH_new_methodDH_set_default_methodDH_set_ex_dataDH_set_methodDH_sizeDH_up_refDHparams_dupDHparams_printDHparams_print_fpDIRECTORYSTRING_freeDIRECTORYSTRING_itDIRECTORYSTRING_newDISPLAYTEXT_freeDISPLAYTEXT_itDISPLAYTEXT_newDIST_POINT_NAME_freeDIST_POINT_NAME_itDIST_POINT_NAME_newDIST_POINT_freeDIST_POINT_itDIST_POINT_newDIST_POINT_set_dpnameDSA_OpenSSLDSA_SIG_freeDSA_SIG_newDSA_do_signDSA_do_verifyDSA_dup_DHDSA_freeDSA_generate_keyDSA_generate_parametersDSA_generate_parameters_exDSA_get_default_methodDSA_get_ex_dataDSA_get_ex_new_indexDSA_newDSA_new_methodDSA_printDSA_print_fpDSA_set_default_methodDSA_set_ex_dataDSA_set_methodDSA_signDSA_sign_setupDSA_sizeDSA_up_refDSA_verifyDSAparams_dupDSAparams_printDSAparams_print_fpDSO_METHOD_beosDSO_METHOD_dlDSO_METHOD_dlfcnDSO_METHOD_nullDSO_METHOD_opensslDSO_METHOD_vmsDSO_METHOD_win32DSO_bind_funcDSO_bind_varDSO_convert_filenameDSO_ctrlDSO_flagsDSO_freeDSO_get_default_methodDSO_get_filenameDSO_get_loaded_filenameDSO_get_methodDSO_global_lookupDSO_loadDSO_mergeDSO_newDSO_new_methodDSO_pathbyaddrDSO_set_default_methodDSO_set_filenameDSO_set_methodDSO_set_name_converterDSO_up_refECDH_KDF_X9_62ECDH_OpenSSLECDH_compute_keyECDH_get_default_methodECDH_get_ex_dataECDH_get_ex_new_indexECDH_set_default_methodECDH_set_ex_dataECDH_set_methodECDSA_METHOD_freeECDSA_METHOD_get_app_dataECDSA_METHOD_newECDSA_METHOD_set_app_dataECDSA_METHOD_set_flagsECDSA_METHOD_set_nameECDSA_METHOD_set_signECDSA_METHOD_set_sign_setupECDSA_METHOD_set_verifyECDSA_OpenSSLECDSA_SIG_freeECDSA_SIG_newECDSA_do_signECDSA_do_sign_exECDSA_do_verifyECDSA_get_default_methodECDSA_get_ex_dataECDSA_get_ex_new_indexECDSA_set_default_methodECDSA_set_ex_dataECDSA_set_methodECDSA_signECDSA_sign_exECDSA_sign_setupECDSA_sizeECDSA_verifyECPKParameters_printECPKParameters_print_fpECParameters_printECParameters_print_fpEC_GF2m_simple_methodEC_GFp_mont_methodEC_GFp_nist_methodEC_GFp_simple_methodEC_GROUP_checkEC_GROUP_check_discriminantEC_GROUP_clear_freeEC_GROUP_cmpEC_GROUP_copyEC_GROUP_dupEC_GROUP_freeEC_GROUP_get0_generatorEC_GROUP_get0_seedEC_GROUP_get_asn1_flagEC_GROUP_get_basis_typeEC_GROUP_get_cofactorEC_GROUP_get_curve_GF2mEC_GROUP_get_curve_GFpEC_GROUP_get_curve_nameEC_GROUP_get_degreeEC_GROUP_get_mont_dataEC_GROUP_get_orderEC_GROUP_get_pentanomial_basisEC_GROUP_get_point_conversion_formEC_GROUP_get_seed_lenEC_GROUP_get_trinomial_basisEC_GROUP_have_precompute_multEC_GROUP_method_ofEC_GROUP_newEC_GROUP_new_by_curve_nameEC_GROUP_new_curve_GF2mEC_GROUP_new_curve_GFpEC_GROUP_precompute_multEC_GROUP_set_asn1_flagEC_GROUP_set_curve_GF2mEC_GROUP_set_curve_GFpEC_GROUP_set_curve_nameEC_GROUP_set_generatorEC_GROUP_set_point_conversion_formEC_GROUP_set_seedEC_KEY_check_keyEC_KEY_clear_flagsEC_KEY_copyEC_KEY_dupEC_KEY_freeEC_KEY_generate_keyEC_KEY_get0_groupEC_KEY_get0_private_keyEC_KEY_get0_public_keyEC_KEY_get_conv_formEC_KEY_get_enc_flagsEC_KEY_get_flagsEC_KEY_get_key_method_dataEC_KEY_insert_key_method_dataEC_KEY_newEC_KEY_new_by_curve_nameEC_KEY_precompute_multEC_KEY_printEC_KEY_print_fpEC_KEY_set_asn1_flagEC_KEY_set_conv_formEC_KEY_set_enc_flagsEC_KEY_set_flagsEC_KEY_set_groupEC_KEY_set_private_keyEC_KEY_set_public_keyEC_KEY_set_public_key_affine_coordinatesEC_KEY_up_refEC_METHOD_get_field_typeEC_POINT_addEC_POINT_bn2pointEC_POINT_clear_freeEC_POINT_cmpEC_POINT_copyEC_POINT_dblEC_POINT_dupEC_POINT_freeEC_POINT_get_Jprojective_coordinates_GFpEC_POINT_get_affine_coordinates_GF2mEC_POINT_get_affine_coordinates_GFpEC_POINT_hex2pointEC_POINT_invertEC_POINT_is_at_infinityEC_POINT_is_on_curveEC_POINT_make_affineEC_POINT_method_ofEC_POINT_mulEC_POINT_newEC_POINT_oct2pointEC_POINT_point2bnEC_POINT_point2hexEC_POINT_point2octEC_POINT_set_Jprojective_coordinates_GFpEC_POINT_set_affine_coordinates_GF2mEC_POINT_set_affine_coordinates_GFpEC_POINT_set_compressed_coordinates_GF2mEC_POINT_set_compressed_coordinates_GFpEC_POINT_set_to_infinityEC_POINTs_make_affineEC_POINTs_mulEC_curve_nid2nistEC_curve_nist2nidEC_get_builtin_curvesEDIPARTYNAME_freeEDIPARTYNAME_itEDIPARTYNAME_newENGINE_addENGINE_add_conf_moduleENGINE_by_idENGINE_cleanupENGINE_cmd_is_executableENGINE_ctrlENGINE_ctrl_cmdENGINE_ctrl_cmd_stringENGINE_finishENGINE_freeENGINE_get_DHENGINE_get_DSAENGINE_get_ECDHENGINE_get_ECDSAENGINE_get_RANDENGINE_get_RSAENGINE_get_STOREENGINE_get_cipherENGINE_get_cipher_engineENGINE_get_ciphersENGINE_get_cmd_defnsENGINE_get_ctrl_functionENGINE_get_default_DHENGINE_get_default_DSAENGINE_get_default_ECDHENGINE_get_default_ECDSAENGINE_get_default_RANDENGINE_get_default_RSAENGINE_get_destroy_functionENGINE_get_digestENGINE_get_digest_engineENGINE_get_digestsENGINE_get_ex_dataENGINE_get_ex_new_indexENGINE_get_finish_functionENGINE_get_firstENGINE_get_flagsENGINE_get_idENGINE_get_init_functionENGINE_get_lastENGINE_get_load_privkey_functionENGINE_get_load_pubkey_functionENGINE_get_nameENGINE_get_nextENGINE_get_pkey_asn1_methENGINE_get_pkey_asn1_meth_engineENGINE_get_pkey_asn1_meth_strENGINE_get_pkey_asn1_methsENGINE_get_pkey_methENGINE_get_pkey_meth_engineENGINE_get_pkey_methsENGINE_get_prevENGINE_get_ssl_client_cert_functionENGINE_get_static_stateENGINE_get_table_flagsENGINE_initENGINE_load_builtin_enginesENGINE_load_cryptodevENGINE_load_dynamicENGINE_load_opensslENGINE_load_private_keyENGINE_load_public_keyENGINE_load_rdrandENGINE_load_ssl_client_certENGINE_newENGINE_pkey_asn1_find_strENGINE_register_DHENGINE_register_DSAENGINE_register_ECDHENGINE_register_ECDSAENGINE_register_RANDENGINE_register_RSAENGINE_register_STOREENGINE_register_all_DHENGINE_register_all_DSAENGINE_register_all_ECDHENGINE_register_all_ECDSAENGINE_register_all_RANDENGINE_register_all_RSAENGINE_register_all_STOREENGINE_register_all_ciphersENGINE_register_all_completeENGINE_register_all_digestsENGINE_register_all_pkey_asn1_methsENGINE_register_all_pkey_methsENGINE_register_ciphersENGINE_register_completeENGINE_register_digestsENGINE_register_pkey_asn1_methsENGINE_register_pkey_methsENGINE_removeENGINE_set_DHENGINE_set_DSAENGINE_set_ECDHENGINE_set_ECDSAENGINE_set_RANDENGINE_set_RSAENGINE_set_STOREENGINE_set_ciphersENGINE_set_cmd_defnsENGINE_set_ctrl_functionENGINE_set_defaultENGINE_set_default_DHENGINE_set_default_DSAENGINE_set_default_ECDHENGINE_set_default_ECDSAENGINE_set_default_RANDENGINE_set_default_RSAENGINE_set_default_ciphersENGINE_set_default_digestsENGINE_set_default_pkey_asn1_methsENGINE_set_default_pkey_methsENGINE_set_default_stringENGINE_set_destroy_functionENGINE_set_digestsENGINE_set_ex_dataENGINE_set_finish_functionENGINE_set_flagsENGINE_set_idENGINE_set_init_functionENGINE_set_load_privkey_functionENGINE_set_load_pubkey_functionENGINE_set_load_ssl_client_cert_functionENGINE_set_nameENGINE_set_pkey_asn1_methsENGINE_set_pkey_methsENGINE_set_table_flagsENGINE_unregister_DHENGINE_unregister_DSAENGINE_unregister_ECDHENGINE_unregister_ECDSAENGINE_unregister_RANDENGINE_unregister_RSAENGINE_unregister_STOREENGINE_unregister_ciphersENGINE_unregister_digestsENGINE_unregister_pkey_asn1_methsENGINE_unregister_pkey_methsENGINE_up_refERR_add_error_dataERR_add_error_vdataERR_clear_errorERR_error_stringERR_error_string_nERR_free_stringsERR_func_error_stringERR_get_err_state_tableERR_get_errorERR_get_error_lineERR_get_error_line_dataERR_get_implementationERR_get_next_error_libraryERR_get_stateERR_get_string_tableERR_lib_error_stringERR_load_ASN1_stringsERR_load_BIO_stringsERR_load_BN_stringsERR_load_BUF_stringsERR_load_CMS_stringsERR_load_COMP_stringsERR_load_CONF_stringsERR_load_CRYPTO_stringsERR_load_DH_stringsERR_load_DSA_stringsERR_load_DSO_stringsERR_load_ECDH_stringsERR_load_ECDSA_stringsERR_load_EC_stringsERR_load_ENGINE_stringsERR_load_ERR_stringsERR_load_EVP_stringsERR_load_OBJ_stringsERR_load_OCSP_stringsERR_load_PEM_stringsERR_load_PKCS12_stringsERR_load_PKCS7_stringsERR_load_RAND_stringsERR_load_RSA_stringsERR_load_TS_stringsERR_load_UI_stringsERR_load_X509V3_stringsERR_load_X509_stringsERR_load_crypto_stringsERR_load_stringsERR_peek_errorERR_peek_error_lineERR_peek_error_line_dataERR_peek_last_errorERR_peek_last_error_lineERR_peek_last_error_line_dataERR_pop_to_markERR_print_errorsERR_print_errors_cbERR_print_errors_fpERR_put_errorERR_reason_error_stringERR_release_err_state_tableERR_remove_stateERR_remove_thread_stateERR_set_error_dataERR_set_implementationERR_set_markERR_unload_stringsESS_CERT_ID_dupESS_CERT_ID_freeESS_CERT_ID_newESS_ISSUER_SERIAL_dupESS_ISSUER_SERIAL_freeESS_ISSUER_SERIAL_newESS_SIGNING_CERT_dupESS_SIGNING_CERT_freeESS_SIGNING_CERT_newEVP_BytesToKeyEVP_CIPHER_CTX_block_sizeEVP_CIPHER_CTX_cipherEVP_CIPHER_CTX_cleanupEVP_CIPHER_CTX_clear_flagsEVP_CIPHER_CTX_copyEVP_CIPHER_CTX_ctrlEVP_CIPHER_CTX_flagsEVP_CIPHER_CTX_freeEVP_CIPHER_CTX_get_app_dataEVP_CIPHER_CTX_initEVP_CIPHER_CTX_iv_lengthEVP_CIPHER_CTX_key_lengthEVP_CIPHER_CTX_newEVP_CIPHER_CTX_nidEVP_CIPHER_CTX_rand_keyEVP_CIPHER_CTX_set_app_dataEVP_CIPHER_CTX_set_flagsEVP_CIPHER_CTX_set_key_lengthEVP_CIPHER_CTX_set_paddingEVP_CIPHER_CTX_test_flagsEVP_CIPHER_asn1_to_paramEVP_CIPHER_block_sizeEVP_CIPHER_do_allEVP_CIPHER_do_all_sortedEVP_CIPHER_flagsEVP_CIPHER_get_asn1_ivEVP_CIPHER_iv_lengthEVP_CIPHER_key_lengthEVP_CIPHER_nidEVP_CIPHER_param_to_asn1EVP_CIPHER_set_asn1_ivEVP_CIPHER_typeEVP_CipherEVP_CipherFinalEVP_CipherFinal_exEVP_CipherInitEVP_CipherInit_exEVP_CipherUpdateEVP_DecodeBlockEVP_DecodeFinalEVP_DecodeInitEVP_DecodeUpdateEVP_DecryptFinalEVP_DecryptFinal_exEVP_DecryptInitEVP_DecryptInit_exEVP_DecryptUpdateEVP_DigestEVP_DigestFinalEVP_DigestFinal_exEVP_DigestInitEVP_DigestInit_exEVP_DigestSignFinalEVP_DigestSignInitEVP_DigestUpdateEVP_DigestVerifyFinalEVP_DigestVerifyInitEVP_EncodeBlockEVP_EncodeFinalEVP_EncodeInitEVP_EncodeUpdateEVP_EncryptFinalEVP_EncryptFinal_exEVP_EncryptInitEVP_EncryptInit_exEVP_EncryptUpdateEVP_MD_CTX_cleanupEVP_MD_CTX_clear_flagsEVP_MD_CTX_copyEVP_MD_CTX_copy_exEVP_MD_CTX_createEVP_MD_CTX_destroyEVP_MD_CTX_initEVP_MD_CTX_mdEVP_MD_CTX_set_flagsEVP_MD_CTX_test_flagsEVP_MD_block_sizeEVP_MD_do_allEVP_MD_do_all_sortedEVP_MD_flagsEVP_MD_pkey_typeEVP_MD_sizeEVP_MD_typeEVP_OpenFinalEVP_OpenInitEVP_PBE_CipherInitEVP_PBE_alg_addEVP_PBE_alg_add_typeEVP_PBE_cleanupEVP_PBE_findEVP_PKCS82PKEYEVP_PKEY2PKCS8EVP_PKEY2PKCS8_brokenEVP_PKEY_CTX_ctrlEVP_PKEY_CTX_ctrl_strEVP_PKEY_CTX_dupEVP_PKEY_CTX_freeEVP_PKEY_CTX_get0_peerkeyEVP_PKEY_CTX_get0_pkeyEVP_PKEY_CTX_get_app_dataEVP_PKEY_CTX_get_cbEVP_PKEY_CTX_get_dataEVP_PKEY_CTX_get_keygen_infoEVP_PKEY_CTX_get_operationEVP_PKEY_CTX_newEVP_PKEY_CTX_new_idEVP_PKEY_CTX_set0_keygen_infoEVP_PKEY_CTX_set_app_dataEVP_PKEY_CTX_set_cbEVP_PKEY_CTX_set_dataEVP_PKEY_add1_attrEVP_PKEY_add1_attr_by_NIDEVP_PKEY_add1_attr_by_OBJEVP_PKEY_add1_attr_by_txtEVP_PKEY_asn1_add0EVP_PKEY_asn1_add_aliasEVP_PKEY_asn1_copyEVP_PKEY_asn1_findEVP_PKEY_asn1_find_strEVP_PKEY_asn1_freeEVP_PKEY_asn1_get0EVP_PKEY_asn1_get0_infoEVP_PKEY_asn1_get_countEVP_PKEY_asn1_newEVP_PKEY_asn1_set_ctrlEVP_PKEY_asn1_set_freeEVP_PKEY_asn1_set_itemEVP_PKEY_asn1_set_paramEVP_PKEY_asn1_set_privateEVP_PKEY_asn1_set_publicEVP_PKEY_assignEVP_PKEY_base_idEVP_PKEY_bitsEVP_PKEY_cmpEVP_PKEY_cmp_parametersEVP_PKEY_copy_parametersEVP_PKEY_decryptEVP_PKEY_decrypt_initEVP_PKEY_decrypt_oldEVP_PKEY_delete_attrEVP_PKEY_deriveEVP_PKEY_derive_initEVP_PKEY_derive_set_peerEVP_PKEY_encryptEVP_PKEY_encrypt_initEVP_PKEY_encrypt_oldEVP_PKEY_freeEVP_PKEY_get0EVP_PKEY_get0_asn1EVP_PKEY_get1_DHEVP_PKEY_get1_DSAEVP_PKEY_get1_EC_KEYEVP_PKEY_get1_RSAEVP_PKEY_get_attrEVP_PKEY_get_attr_by_NIDEVP_PKEY_get_attr_by_OBJEVP_PKEY_get_attr_countEVP_PKEY_get_default_digest_nidEVP_PKEY_idEVP_PKEY_keygenEVP_PKEY_keygen_initEVP_PKEY_meth_add0EVP_PKEY_meth_copyEVP_PKEY_meth_findEVP_PKEY_meth_freeEVP_PKEY_meth_get0_infoEVP_PKEY_meth_newEVP_PKEY_meth_set_cleanupEVP_PKEY_meth_set_copyEVP_PKEY_meth_set_ctrlEVP_PKEY_meth_set_decryptEVP_PKEY_meth_set_deriveEVP_PKEY_meth_set_encryptEVP_PKEY_meth_set_initEVP_PKEY_meth_set_keygenEVP_PKEY_meth_set_paramgenEVP_PKEY_meth_set_signEVP_PKEY_meth_set_signctxEVP_PKEY_meth_set_verifyEVP_PKEY_meth_set_verify_recoverEVP_PKEY_meth_set_verifyctxEVP_PKEY_missing_parametersEVP_PKEY_newEVP_PKEY_new_mac_keyEVP_PKEY_paramgenEVP_PKEY_paramgen_initEVP_PKEY_print_paramsEVP_PKEY_print_privateEVP_PKEY_print_publicEVP_PKEY_save_parametersEVP_PKEY_set1_DHEVP_PKEY_set1_DSAEVP_PKEY_set1_EC_KEYEVP_PKEY_set1_RSAEVP_PKEY_set_typeEVP_PKEY_set_type_strEVP_PKEY_signEVP_PKEY_sign_initEVP_PKEY_sizeEVP_PKEY_typeEVP_PKEY_verifyEVP_PKEY_verify_initEVP_PKEY_verify_recoverEVP_PKEY_verify_recover_initEVP_SealFinalEVP_SealInitEVP_SignFinalEVP_VerifyFinalEVP_add_alg_moduleEVP_add_cipherEVP_add_digestEVP_aes_128_cbcEVP_aes_128_cbc_hmac_sha1EVP_aes_128_cbc_hmac_sha256EVP_aes_128_ccmEVP_aes_128_cfb1EVP_aes_128_cfb128EVP_aes_128_cfb8EVP_aes_128_ctrEVP_aes_128_ecbEVP_aes_128_gcmEVP_aes_128_ofbEVP_aes_128_wrapEVP_aes_128_xtsEVP_aes_192_cbcEVP_aes_192_ccmEVP_aes_192_cfb1EVP_aes_192_cfb128EVP_aes_192_cfb8EVP_aes_192_ctrEVP_aes_192_ecbEVP_aes_192_gcmEVP_aes_192_ofbEVP_aes_192_wrapEVP_aes_256_cbcEVP_aes_256_cbc_hmac_sha1EVP_aes_256_cbc_hmac_sha256EVP_aes_256_ccmEVP_aes_256_cfb1EVP_aes_256_cfb128EVP_aes_256_cfb8EVP_aes_256_ctrEVP_aes_256_ecbEVP_aes_256_gcmEVP_aes_256_ofbEVP_aes_256_wrapEVP_aes_256_xtsEVP_bf_cbcEVP_bf_cfb64EVP_bf_ecbEVP_bf_ofbEVP_camellia_128_cbcEVP_camellia_128_cfb1EVP_camellia_128_cfb128EVP_camellia_128_cfb8EVP_camellia_128_ecbEVP_camellia_128_ofbEVP_camellia_192_cbcEVP_camellia_192_cfb1EVP_camellia_192_cfb128EVP_camellia_192_cfb8EVP_camellia_192_ecbEVP_camellia_192_ofbEVP_camellia_256_cbcEVP_camellia_256_cfb1EVP_camellia_256_cfb128EVP_camellia_256_cfb8EVP_camellia_256_ecbEVP_camellia_256_ofbEVP_cast5_cbcEVP_cast5_cfb64EVP_cast5_ecbEVP_cast5_ofbEVP_cleanupEVP_des_cbcEVP_des_cfb1EVP_des_cfb64EVP_des_cfb8EVP_des_ecbEVP_des_edeEVP_des_ede3EVP_des_ede3_cbcEVP_des_ede3_cfb1EVP_des_ede3_cfb64EVP_des_ede3_cfb8EVP_des_ede3_ecbEVP_des_ede3_ofbEVP_des_ede3_wrapEVP_des_ede_cbcEVP_des_ede_cfb64EVP_des_ede_ecbEVP_des_ede_ofbEVP_des_ofbEVP_desx_cbcEVP_dssEVP_dss1EVP_ecdsaEVP_enc_nullEVP_get_cipherbynameEVP_get_digestbynameEVP_get_pw_promptEVP_idea_cbcEVP_idea_cfb64EVP_idea_ecbEVP_idea_ofbEVP_md4EVP_md5EVP_md_nullEVP_mdc2EVP_rc2_40_cbcEVP_rc2_64_cbcEVP_rc2_cbcEVP_rc2_cfb64EVP_rc2_ecbEVP_rc2_ofbEVP_rc4EVP_rc4_40EVP_rc4_hmac_md5EVP_read_pw_stringEVP_read_pw_string_minEVP_ripemd160EVP_seed_cbcEVP_seed_cfb128EVP_seed_ecbEVP_seed_ofbEVP_set_pw_promptEVP_shaEVP_sha1EVP_sha224EVP_sha256EVP_sha384EVP_sha512EVP_whirlpoolEXTENDED_KEY_USAGE_freeEXTENDED_KEY_USAGE_itEXTENDED_KEY_USAGE_newFIPS_modeFIPS_mode_setGENERAL_NAMES_freeGENERAL_NAMES_itGENERAL_NAMES_newGENERAL_NAME_cmpGENERAL_NAME_dupGENERAL_NAME_freeGENERAL_NAME_get0_otherNameGENERAL_NAME_get0_valueGENERAL_NAME_itGENERAL_NAME_newGENERAL_NAME_printGENERAL_NAME_set0_othernameGENERAL_NAME_set0_valueGENERAL_SUBTREE_freeGENERAL_SUBTREE_itGENERAL_SUBTREE_newHMACHMAC_CTX_cleanupHMAC_CTX_copyHMAC_CTX_initHMAC_CTX_set_flagsHMAC_FinalHMAC_InitHMAC_Init_exHMAC_UpdateISSUING_DIST_POINT_freeISSUING_DIST_POINT_itISSUING_DIST_POINT_newKRB5_APREQBODY_freeKRB5_APREQBODY_itKRB5_APREQBODY_newKRB5_APREQ_freeKRB5_APREQ_itKRB5_APREQ_newKRB5_AUTHDATA_freeKRB5_AUTHDATA_itKRB5_AUTHDATA_newKRB5_AUTHENTBODY_freeKRB5_AUTHENTBODY_itKRB5_AUTHENTBODY_newKRB5_AUTHENT_freeKRB5_AUTHENT_itKRB5_AUTHENT_newKRB5_CHECKSUM_freeKRB5_CHECKSUM_itKRB5_CHECKSUM_newKRB5_ENCDATA_freeKRB5_ENCDATA_itKRB5_ENCDATA_newKRB5_ENCKEY_freeKRB5_ENCKEY_itKRB5_ENCKEY_newKRB5_PRINCNAME_freeKRB5_PRINCNAME_itKRB5_PRINCNAME_newKRB5_TICKET_freeKRB5_TICKET_itKRB5_TICKET_newKRB5_TKTBODY_freeKRB5_TKTBODY_itKRB5_TKTBODY_newLONG_itMD4MD4_FinalMD4_InitMD4_TransformMD4_UpdateMD5MD5_FinalMD5_InitMD5_TransformMD5_UpdateMDC2MDC2_FinalMDC2_InitMDC2_UpdateNAME_CONSTRAINTS_checkNAME_CONSTRAINTS_freeNAME_CONSTRAINTS_itNAME_CONSTRAINTS_newNCONF_WIN32NCONF_defaultNCONF_dump_bioNCONF_dump_fpNCONF_freeNCONF_free_dataNCONF_get_number_eNCONF_get_sectionNCONF_get_stringNCONF_loadNCONF_load_bioNCONF_load_fpNCONF_newNETSCAPE_CERT_SEQUENCE_freeNETSCAPE_CERT_SEQUENCE_itNETSCAPE_CERT_SEQUENCE_newNETSCAPE_SPKAC_freeNETSCAPE_SPKAC_itNETSCAPE_SPKAC_newNETSCAPE_SPKI_b64_decodeNETSCAPE_SPKI_b64_encodeNETSCAPE_SPKI_freeNETSCAPE_SPKI_get_pubkeyNETSCAPE_SPKI_itNETSCAPE_SPKI_newNETSCAPE_SPKI_printNETSCAPE_SPKI_set_pubkeyNETSCAPE_SPKI_signNETSCAPE_SPKI_verifyNETSCAPE_X509_freeNETSCAPE_X509_itNETSCAPE_X509_newNOTICEREF_freeNOTICEREF_itNOTICEREF_newOBJ_NAME_addOBJ_NAME_cleanupOBJ_NAME_do_allOBJ_NAME_do_all_sortedOBJ_NAME_getOBJ_NAME_initOBJ_NAME_new_indexOBJ_NAME_removeOBJ_add_objectOBJ_add_sigidOBJ_bsearch_OBJ_bsearch_ex_OBJ_cleanupOBJ_cmpOBJ_createOBJ_create_objectsOBJ_dupOBJ_find_sigid_algsOBJ_find_sigid_by_algsOBJ_ln2nidOBJ_new_nidOBJ_nid2lnOBJ_nid2objOBJ_nid2snOBJ_obj2nidOBJ_obj2txtOBJ_sigid_freeOBJ_sn2nidOBJ_txt2nidOBJ_txt2objOCSP_BASICRESP_add1_ext_i2dOCSP_BASICRESP_add_extOCSP_BASICRESP_delete_extOCSP_BASICRESP_freeOCSP_BASICRESP_get1_ext_d2iOCSP_BASICRESP_get_extOCSP_BASICRESP_get_ext_by_NIDOCSP_BASICRESP_get_ext_by_OBJOCSP_BASICRESP_get_ext_by_criticalOCSP_BASICRESP_get_ext_countOCSP_BASICRESP_itOCSP_BASICRESP_newOCSP_CERTID_dupOCSP_CERTID_freeOCSP_CERTID_itOCSP_CERTID_newOCSP_CERTSTATUS_freeOCSP_CERTSTATUS_itOCSP_CERTSTATUS_newOCSP_CRLID_freeOCSP_CRLID_itOCSP_CRLID_newOCSP_ONEREQ_add1_ext_i2dOCSP_ONEREQ_add_extOCSP_ONEREQ_delete_extOCSP_ONEREQ_freeOCSP_ONEREQ_get1_ext_d2iOCSP_ONEREQ_get_extOCSP_ONEREQ_get_ext_by_NIDOCSP_ONEREQ_get_ext_by_OBJOCSP_ONEREQ_get_ext_by_criticalOCSP_ONEREQ_get_ext_countOCSP_ONEREQ_itOCSP_ONEREQ_newOCSP_REQINFO_freeOCSP_REQINFO_itOCSP_REQINFO_newOCSP_REQUEST_add1_ext_i2dOCSP_REQUEST_add_extOCSP_REQUEST_delete_extOCSP_REQUEST_freeOCSP_REQUEST_get1_ext_d2iOCSP_REQUEST_get_extOCSP_REQUEST_get_ext_by_NIDOCSP_REQUEST_get_ext_by_OBJOCSP_REQUEST_get_ext_by_criticalOCSP_REQUEST_get_ext_countOCSP_REQUEST_itOCSP_REQUEST_newOCSP_REQUEST_printOCSP_REQ_CTX_add1_headerOCSP_REQ_CTX_freeOCSP_REQ_CTX_get0_mem_bioOCSP_REQ_CTX_httpOCSP_REQ_CTX_i2dOCSP_REQ_CTX_nbioOCSP_REQ_CTX_nbio_d2iOCSP_REQ_CTX_newOCSP_REQ_CTX_set1_reqOCSP_RESPBYTES_freeOCSP_RESPBYTES_itOCSP_RESPBYTES_newOCSP_RESPDATA_freeOCSP_RESPDATA_itOCSP_RESPDATA_newOCSP_RESPID_freeOCSP_RESPID_itOCSP_RESPID_newOCSP_RESPONSE_freeOCSP_RESPONSE_itOCSP_RESPONSE_newOCSP_RESPONSE_printOCSP_REVOKEDINFO_freeOCSP_REVOKEDINFO_itOCSP_REVOKEDINFO_newOCSP_SERVICELOC_freeOCSP_SERVICELOC_itOCSP_SERVICELOC_newOCSP_SIGNATURE_freeOCSP_SIGNATURE_itOCSP_SIGNATURE_newOCSP_SINGLERESP_add1_ext_i2dOCSP_SINGLERESP_add_extOCSP_SINGLERESP_delete_extOCSP_SINGLERESP_freeOCSP_SINGLERESP_get1_ext_d2iOCSP_SINGLERESP_get_extOCSP_SINGLERESP_get_ext_by_NIDOCSP_SINGLERESP_get_ext_by_OBJOCSP_SINGLERESP_get_ext_by_criticalOCSP_SINGLERESP_get_ext_countOCSP_SINGLERESP_itOCSP_SINGLERESP_newOCSP_accept_responses_newOCSP_archive_cutoff_newOCSP_basic_add1_certOCSP_basic_add1_nonceOCSP_basic_add1_statusOCSP_basic_signOCSP_basic_verifyOCSP_cert_id_newOCSP_cert_status_strOCSP_cert_to_idOCSP_check_nonceOCSP_check_validityOCSP_copy_nonceOCSP_crlID_newOCSP_crl_reason_strOCSP_id_cmpOCSP_id_get0_infoOCSP_id_issuer_cmpOCSP_onereq_get0_idOCSP_parse_urlOCSP_request_add0_idOCSP_request_add1_certOCSP_request_add1_nonceOCSP_request_is_signedOCSP_request_onereq_countOCSP_request_onereq_get0OCSP_request_set1_nameOCSP_request_signOCSP_request_verifyOCSP_resp_countOCSP_resp_findOCSP_resp_find_statusOCSP_resp_get0OCSP_response_createOCSP_response_get1_basicOCSP_response_statusOCSP_response_status_strOCSP_sendreq_bioOCSP_sendreq_nbioOCSP_sendreq_newOCSP_set_max_response_lengthOCSP_single_get0_statusOCSP_url_svcloc_newOPENSSL_DIR_endOPENSSL_DIR_readOPENSSL_add_all_algorithms_confOPENSSL_add_all_algorithms_noconfOPENSSL_asc2uniOPENSSL_cleanseOPENSSL_configOPENSSL_cpuid_setupOPENSSL_gmtimeOPENSSL_gmtime_adjOPENSSL_gmtime_diffOPENSSL_ia32cap_locOPENSSL_initOPENSSL_isserviceOPENSSL_issetugidOPENSSL_load_builtin_modulesOPENSSL_memcmpOPENSSL_no_configOPENSSL_showfatalOPENSSL_stderrOPENSSL_strcasecmpOPENSSL_strncasecmpOPENSSL_uni2ascOTHERNAME_cmpOTHERNAME_freeOTHERNAME_itOTHERNAME_newOpenSSLDieOpenSSL_add_all_ciphersOpenSSL_add_all_digestsPBE2PARAM_freePBE2PARAM_itPBE2PARAM_newPBEPARAM_freePBEPARAM_itPBEPARAM_newPBKDF2PARAM_freePBKDF2PARAM_itPBKDF2PARAM_newPEM_ASN1_readPEM_ASN1_read_bioPEM_ASN1_writePEM_ASN1_write_bioPEM_SealFinalPEM_SealInitPEM_SealUpdatePEM_SignFinalPEM_SignInitPEM_SignUpdatePEM_X509_INFO_readPEM_X509_INFO_read_bioPEM_X509_INFO_write_bioPEM_bytes_read_bioPEM_def_callbackPEM_dek_infoPEM_do_headerPEM_get_EVP_CIPHER_INFOPEM_proc_typePEM_readPEM_read_CMSPEM_read_DHparamsPEM_read_DSAPrivateKeyPEM_read_DSA_PUBKEYPEM_read_DSAparamsPEM_read_ECPKParametersPEM_read_ECPrivateKeyPEM_read_EC_PUBKEYPEM_read_NETSCAPE_CERT_SEQUENCEPEM_read_PKCS7PEM_read_PKCS8PEM_read_PKCS8_PRIV_KEY_INFOPEM_read_PUBKEYPEM_read_PrivateKeyPEM_read_RSAPrivateKeyPEM_read_RSAPublicKeyPEM_read_RSA_PUBKEYPEM_read_X509PEM_read_X509_AUXPEM_read_X509_CERT_PAIRPEM_read_X509_CRLPEM_read_X509_REQPEM_read_bioPEM_read_bio_CMSPEM_read_bio_DHparamsPEM_read_bio_DSAPrivateKeyPEM_read_bio_DSA_PUBKEYPEM_read_bio_DSAparamsPEM_read_bio_ECPKParametersPEM_read_bio_ECPrivateKeyPEM_read_bio_EC_PUBKEYPEM_read_bio_NETSCAPE_CERT_SEQUENCEPEM_read_bio_PKCS7PEM_read_bio_PKCS8PEM_read_bio_PKCS8_PRIV_KEY_INFOPEM_read_bio_PUBKEYPEM_read_bio_ParametersPEM_read_bio_PrivateKeyPEM_read_bio_RSAPrivateKeyPEM_read_bio_RSAPublicKeyPEM_read_bio_RSA_PUBKEYPEM_read_bio_X509PEM_read_bio_X509_AUXPEM_read_bio_X509_CERT_PAIRPEM_read_bio_X509_CRLPEM_read_bio_X509_REQPEM_writePEM_write_CMSPEM_write_DHparamsPEM_write_DHxparamsPEM_write_DSAPrivateKeyPEM_write_DSA_PUBKEYPEM_write_DSAparamsPEM_write_ECPKParametersPEM_write_ECPrivateKeyPEM_write_EC_PUBKEYPEM_write_NETSCAPE_CERT_SEQUENCEPEM_write_PKCS7PEM_write_PKCS8PEM_write_PKCS8PrivateKeyPEM_write_PKCS8PrivateKey_nidPEM_write_PKCS8_PRIV_KEY_INFOPEM_write_PUBKEYPEM_write_PrivateKeyPEM_write_RSAPrivateKeyPEM_write_RSAPublicKeyPEM_write_RSA_PUBKEYPEM_write_X509PEM_write_X509_AUXPEM_write_X509_CERT_PAIRPEM_write_X509_CRLPEM_write_X509_REQPEM_write_X509_REQ_NEWPEM_write_bioPEM_write_bio_ASN1_streamPEM_write_bio_CMSPEM_write_bio_CMS_streamPEM_write_bio_DHparamsPEM_write_bio_DHxparamsPEM_write_bio_DSAPrivateKeyPEM_write_bio_DSA_PUBKEYPEM_write_bio_DSAparamsPEM_write_bio_ECPKParametersPEM_write_bio_ECPrivateKeyPEM_write_bio_EC_PUBKEYPEM_write_bio_NETSCAPE_CERT_SEQUENCEPEM_write_bio_PKCS7PEM_write_bio_PKCS7_streamPEM_write_bio_PKCS8PEM_write_bio_PKCS8PrivateKeyPEM_write_bio_PKCS8PrivateKey_nidPEM_write_bio_PKCS8_PRIV_KEY_INFOPEM_write_bio_PUBKEYPEM_write_bio_ParametersPEM_write_bio_PrivateKeyPEM_write_bio_RSAPrivateKeyPEM_write_bio_RSAPublicKeyPEM_write_bio_RSA_PUBKEYPEM_write_bio_X509PEM_write_bio_X509_AUXPEM_write_bio_X509_CERT_PAIRPEM_write_bio_X509_CRLPEM_write_bio_X509_REQPEM_write_bio_X509_REQ_NEWPKCS12_AUTHSAFES_itPKCS12_BAGS_freePKCS12_BAGS_itPKCS12_BAGS_newPKCS12_MAC_DATA_freePKCS12_MAC_DATA_itPKCS12_MAC_DATA_newPKCS12_MAKE_KEYBAGPKCS12_MAKE_SHKEYBAGPKCS12_PBE_addPKCS12_PBE_keyivgenPKCS12_SAFEBAGS_itPKCS12_SAFEBAG_freePKCS12_SAFEBAG_itPKCS12_SAFEBAG_newPKCS12_add_CSPName_ascPKCS12_add_certPKCS12_add_friendlyname_ascPKCS12_add_friendlyname_uniPKCS12_add_keyPKCS12_add_localkeyidPKCS12_add_safePKCS12_add_safesPKCS12_certbag2x509PKCS12_certbag2x509crlPKCS12_createPKCS12_decrypt_skeyPKCS12_freePKCS12_gen_macPKCS12_get_attr_genPKCS12_get_friendlynamePKCS12_initPKCS12_itPKCS12_item_decrypt_d2iPKCS12_item_i2d_encryptPKCS12_item_pack_safebagPKCS12_key_gen_ascPKCS12_key_gen_uniPKCS12_newPKCS12_newpassPKCS12_pack_authsafesPKCS12_pack_p7dataPKCS12_pack_p7encdataPKCS12_parsePKCS12_pbe_cryptPKCS12_set_macPKCS12_setup_macPKCS12_unpack_authsafesPKCS12_unpack_p7dataPKCS12_unpack_p7encdataPKCS12_verify_macPKCS12_x5092certbagPKCS12_x509crl2certbagPKCS1_MGF1PKCS5_PBE_addPKCS5_PBE_keyivgenPKCS5_PBKDF2_HMACPKCS5_PBKDF2_HMAC_SHA1PKCS5_pbe2_setPKCS5_pbe2_set_ivPKCS5_pbe_setPKCS5_pbe_set0_algorPKCS5_pbkdf2_setPKCS5_v2_PBE_keyivgenPKCS7_ATTR_SIGN_itPKCS7_ATTR_VERIFY_itPKCS7_DIGEST_freePKCS7_DIGEST_itPKCS7_DIGEST_newPKCS7_ENCRYPT_freePKCS7_ENCRYPT_itPKCS7_ENCRYPT_newPKCS7_ENC_CONTENT_freePKCS7_ENC_CONTENT_itPKCS7_ENC_CONTENT_newPKCS7_ENVELOPE_freePKCS7_ENVELOPE_itPKCS7_ENVELOPE_newPKCS7_ISSUER_AND_SERIAL_digestPKCS7_ISSUER_AND_SERIAL_freePKCS7_ISSUER_AND_SERIAL_itPKCS7_ISSUER_AND_SERIAL_newPKCS7_RECIP_INFO_freePKCS7_RECIP_INFO_get0_algPKCS7_RECIP_INFO_itPKCS7_RECIP_INFO_newPKCS7_RECIP_INFO_setPKCS7_SIGNED_freePKCS7_SIGNED_itPKCS7_SIGNED_newPKCS7_SIGNER_INFO_freePKCS7_SIGNER_INFO_get0_algsPKCS7_SIGNER_INFO_itPKCS7_SIGNER_INFO_newPKCS7_SIGNER_INFO_setPKCS7_SIGNER_INFO_signPKCS7_SIGN_ENVELOPE_freePKCS7_SIGN_ENVELOPE_itPKCS7_SIGN_ENVELOPE_newPKCS7_add0_attrib_signing_timePKCS7_add1_attrib_digestPKCS7_add_attrib_content_typePKCS7_add_attrib_smimecapPKCS7_add_attributePKCS7_add_certificatePKCS7_add_crlPKCS7_add_recipientPKCS7_add_recipient_infoPKCS7_add_signaturePKCS7_add_signed_attributePKCS7_add_signerPKCS7_cert_from_signer_infoPKCS7_content_newPKCS7_ctrlPKCS7_dataDecodePKCS7_dataFinalPKCS7_dataInitPKCS7_dataVerifyPKCS7_decryptPKCS7_digest_from_attributesPKCS7_dupPKCS7_encryptPKCS7_finalPKCS7_freePKCS7_get0_signersPKCS7_get_attributePKCS7_get_issuer_and_serialPKCS7_get_signed_attributePKCS7_get_signer_infoPKCS7_get_smimecapPKCS7_itPKCS7_newPKCS7_print_ctxPKCS7_set0_type_otherPKCS7_set_attributesPKCS7_set_cipherPKCS7_set_contentPKCS7_set_digestPKCS7_set_signed_attributesPKCS7_set_typePKCS7_signPKCS7_sign_add_signerPKCS7_signatureVerifyPKCS7_simple_smimecapPKCS7_streamPKCS7_to_TS_TST_INFOPKCS7_verifyPKCS8_PRIV_KEY_INFO_freePKCS8_PRIV_KEY_INFO_itPKCS8_PRIV_KEY_INFO_newPKCS8_add_keyusagePKCS8_decryptPKCS8_encryptPKCS8_pkey_get0PKCS8_pkey_set0PKCS8_set_brokenPKEY_USAGE_PERIOD_freePKEY_USAGE_PERIOD_itPKEY_USAGE_PERIOD_newPOLICYINFO_freePOLICYINFO_itPOLICYINFO_newPOLICYQUALINFO_freePOLICYQUALINFO_itPOLICYQUALINFO_newPOLICY_CONSTRAINTS_freePOLICY_CONSTRAINTS_itPOLICY_CONSTRAINTS_newPOLICY_MAPPINGS_itPOLICY_MAPPING_freePOLICY_MAPPING_itPOLICY_MAPPING_newPROXY_CERT_INFO_EXTENSION_freePROXY_CERT_INFO_EXTENSION_itPROXY_CERT_INFO_EXTENSION_newPROXY_POLICY_freePROXY_POLICY_itPROXY_POLICY_newRAND_SSLeayRAND_addRAND_bytesRAND_cleanupRAND_egdRAND_egd_bytesRAND_eventRAND_file_nameRAND_get_rand_methodRAND_load_fileRAND_pollRAND_pseudo_bytesRAND_query_egd_bytesRAND_screenRAND_seedRAND_set_rand_engineRAND_set_rand_methodRAND_statusRAND_write_fileRC2_cbc_encryptRC2_cfb64_encryptRC2_decryptRC2_ecb_encryptRC2_encryptRC2_ofb64_encryptRC2_set_keyRC4RC4_optionsRC4_set_keyRIPEMD160RIPEMD160_FinalRIPEMD160_InitRIPEMD160_TransformRIPEMD160_UpdateRSAPrivateKey_dupRSAPrivateKey_itRSAPublicKey_dupRSAPublicKey_itRSA_OAEP_PARAMS_freeRSA_OAEP_PARAMS_itRSA_OAEP_PARAMS_newRSA_PKCS1_SSLeayRSA_PSS_PARAMS_freeRSA_PSS_PARAMS_itRSA_PSS_PARAMS_newRSA_X931_hash_idRSA_blinding_offRSA_blinding_onRSA_check_keyRSA_flagsRSA_freeRSA_generate_keyRSA_generate_key_exRSA_get_default_methodRSA_get_ex_dataRSA_get_ex_new_indexRSA_get_methodRSA_memory_lockRSA_newRSA_new_methodRSA_null_methodRSA_padding_add_PKCS1_OAEPRSA_padding_add_PKCS1_OAEP_mgf1RSA_padding_add_PKCS1_PSSRSA_padding_add_PKCS1_PSS_mgf1RSA_padding_add_PKCS1_type_1RSA_padding_add_PKCS1_type_2RSA_padding_add_SSLv23RSA_padding_add_X931RSA_padding_add_noneRSA_padding_check_PKCS1_OAEPRSA_padding_check_PKCS1_OAEP_mgf1RSA_padding_check_PKCS1_type_1RSA_padding_check_PKCS1_type_2RSA_padding_check_SSLv23RSA_padding_check_X931RSA_padding_check_noneRSA_printRSA_print_fpRSA_private_decryptRSA_private_encryptRSA_public_decryptRSA_public_encryptRSA_set_default_methodRSA_set_ex_dataRSA_set_methodRSA_setup_blindingRSA_signRSA_sign_ASN1_OCTET_STRINGRSA_sizeRSA_up_refRSA_verifyRSA_verify_ASN1_OCTET_STRINGRSA_verify_PKCS1_PSSRSA_verify_PKCS1_PSS_mgf1SEED_cbc_encryptSEED_cfb128_encryptSEED_decryptSEED_ecb_encryptSEED_encryptSEED_ofb128_encryptSEED_set_keySHASHA1SHA1_FinalSHA1_InitSHA1_TransformSHA1_UpdateSHA224SHA224_FinalSHA224_InitSHA224_UpdateSHA256SHA256_FinalSHA256_InitSHA256_TransformSHA256_UpdateSHA384SHA384_FinalSHA384_InitSHA384_UpdateSHA512SHA512_FinalSHA512_InitSHA512_TransformSHA512_UpdateSHA_FinalSHA_InitSHA_TransformSHA_UpdateSMIME_crlf_copySMIME_read_ASN1SMIME_read_CMSSMIME_read_PKCS7SMIME_textSMIME_write_ASN1SMIME_write_CMSSMIME_write_PKCS7SRP_Calc_ASRP_Calc_BSRP_Calc_client_keySRP_Calc_server_keySRP_Calc_uSRP_Calc_xSRP_VBASE_freeSRP_VBASE_get1_by_userSRP_VBASE_get_by_userSRP_VBASE_initSRP_VBASE_newSRP_Verify_A_mod_NSRP_Verify_B_mod_NSRP_check_known_gN_paramSRP_create_verifierSRP_create_verifier_BNSRP_get_default_gNSRP_user_pwd_freeSSLeaySSLeay_versionSXNETID_freeSXNETID_itSXNETID_newSXNET_add_id_INTEGERSXNET_add_id_ascSXNET_add_id_ulongSXNET_freeSXNET_get_id_INTEGERSXNET_get_id_ascSXNET_get_id_ulongSXNET_itSXNET_newTS_ACCURACY_dupTS_ACCURACY_freeTS_ACCURACY_get_microsTS_ACCURACY_get_millisTS_ACCURACY_get_secondsTS_ACCURACY_newTS_ACCURACY_set_microsTS_ACCURACY_set_millisTS_ACCURACY_set_secondsTS_ASN1_INTEGER_print_bioTS_CONF_get_tsa_sectionTS_CONF_load_certTS_CONF_load_certsTS_CONF_load_keyTS_CONF_set_accuracyTS_CONF_set_certsTS_CONF_set_clock_precision_digitsTS_CONF_set_crypto_deviceTS_CONF_set_def_policyTS_CONF_set_default_engineTS_CONF_set_digestsTS_CONF_set_ess_cert_id_chainTS_CONF_set_orderingTS_CONF_set_policiesTS_CONF_set_serialTS_CONF_set_signer_certTS_CONF_set_signer_keyTS_CONF_set_tsa_nameTS_MSG_IMPRINT_dupTS_MSG_IMPRINT_freeTS_MSG_IMPRINT_get_algoTS_MSG_IMPRINT_get_msgTS_MSG_IMPRINT_newTS_MSG_IMPRINT_print_bioTS_MSG_IMPRINT_set_algoTS_MSG_IMPRINT_set_msgTS_OBJ_print_bioTS_REQ_add_extTS_REQ_delete_extTS_REQ_dupTS_REQ_ext_freeTS_REQ_freeTS_REQ_get_cert_reqTS_REQ_get_extTS_REQ_get_ext_by_NIDTS_REQ_get_ext_by_OBJTS_REQ_get_ext_by_criticalTS_REQ_get_ext_countTS_REQ_get_ext_d2iTS_REQ_get_extsTS_REQ_get_msg_imprintTS_REQ_get_nonceTS_REQ_get_policy_idTS_REQ_get_versionTS_REQ_newTS_REQ_print_bioTS_REQ_set_cert_reqTS_REQ_set_msg_imprintTS_REQ_set_nonceTS_REQ_set_policy_idTS_REQ_set_versionTS_REQ_to_TS_VERIFY_CTXTS_RESP_CTX_add_failure_infoTS_RESP_CTX_add_flagsTS_RESP_CTX_add_mdTS_RESP_CTX_add_policyTS_RESP_CTX_freeTS_RESP_CTX_get_requestTS_RESP_CTX_get_tst_infoTS_RESP_CTX_newTS_RESP_CTX_set_accuracyTS_RESP_CTX_set_certsTS_RESP_CTX_set_clock_precision_digitsTS_RESP_CTX_set_def_policyTS_RESP_CTX_set_extension_cbTS_RESP_CTX_set_serial_cbTS_RESP_CTX_set_signer_certTS_RESP_CTX_set_signer_keyTS_RESP_CTX_set_status_infoTS_RESP_CTX_set_status_info_condTS_RESP_CTX_set_time_cbTS_RESP_create_responseTS_RESP_dupTS_RESP_freeTS_RESP_get_status_infoTS_RESP_get_tokenTS_RESP_get_tst_infoTS_RESP_newTS_RESP_print_bioTS_RESP_set_status_infoTS_RESP_set_tst_infoTS_RESP_verify_responseTS_RESP_verify_signatureTS_RESP_verify_tokenTS_STATUS_INFO_dupTS_STATUS_INFO_freeTS_STATUS_INFO_newTS_STATUS_INFO_print_bioTS_TST_INFO_add_extTS_TST_INFO_delete_extTS_TST_INFO_dupTS_TST_INFO_ext_freeTS_TST_INFO_freeTS_TST_INFO_get_accuracyTS_TST_INFO_get_extTS_TST_INFO_get_ext_by_NIDTS_TST_INFO_get_ext_by_OBJTS_TST_INFO_get_ext_by_criticalTS_TST_INFO_get_ext_countTS_TST_INFO_get_ext_d2iTS_TST_INFO_get_extsTS_TST_INFO_get_msg_imprintTS_TST_INFO_get_nonceTS_TST_INFO_get_orderingTS_TST_INFO_get_policy_idTS_TST_INFO_get_serialTS_TST_INFO_get_timeTS_TST_INFO_get_tsaTS_TST_INFO_get_versionTS_TST_INFO_newTS_TST_INFO_print_bioTS_TST_INFO_set_accuracyTS_TST_INFO_set_msg_imprintTS_TST_INFO_set_nonceTS_TST_INFO_set_orderingTS_TST_INFO_set_policy_idTS_TST_INFO_set_serialTS_TST_INFO_set_timeTS_TST_INFO_set_tsaTS_TST_INFO_set_versionTS_VERIFY_CTX_cleanupTS_VERIFY_CTX_freeTS_VERIFY_CTX_initTS_VERIFY_CTX_newTS_X509_ALGOR_print_bioTS_ext_print_bioTXT_DB_create_indexTXT_DB_freeTXT_DB_get_by_indexTXT_DB_insertTXT_DB_readTXT_DB_writeUI_OpenSSLUI_UTIL_read_pwUI_UTIL_read_pw_stringUI_add_error_stringUI_add_info_stringUI_add_input_booleanUI_add_input_stringUI_add_user_dataUI_add_verify_stringUI_construct_promptUI_create_methodUI_ctrlUI_destroy_methodUI_dup_error_stringUI_dup_info_stringUI_dup_input_booleanUI_dup_input_stringUI_dup_verify_stringUI_freeUI_get0_action_stringUI_get0_output_stringUI_get0_resultUI_get0_result_stringUI_get0_test_stringUI_get0_user_dataUI_get_default_methodUI_get_ex_dataUI_get_ex_new_indexUI_get_input_flagsUI_get_methodUI_get_result_maxsizeUI_get_result_minsizeUI_get_string_typeUI_method_get_closerUI_method_get_flusherUI_method_get_openerUI_method_get_prompt_constructorUI_method_get_readerUI_method_get_writerUI_method_set_closerUI_method_set_flusherUI_method_set_openerUI_method_set_prompt_constructorUI_method_set_readerUI_method_set_writerUI_newUI_new_methodUI_processUI_set_default_methodUI_set_ex_dataUI_set_methodUI_set_resultUSERNOTICE_freeUSERNOTICE_itUSERNOTICE_newUTF8_getcUTF8_putcWHIRLPOOLWHIRLPOOL_BitUpdateWHIRLPOOL_FinalWHIRLPOOL_InitWHIRLPOOL_UpdateX509V3_EXT_CRL_add_confX509V3_EXT_CRL_add_nconfX509V3_EXT_REQ_add_confX509V3_EXT_REQ_add_nconfX509V3_EXT_addX509V3_EXT_add_aliasX509V3_EXT_add_confX509V3_EXT_add_listX509V3_EXT_add_nconfX509V3_EXT_add_nconf_skX509V3_EXT_cleanupX509V3_EXT_confX509V3_EXT_conf_nidX509V3_EXT_d2iX509V3_EXT_freeX509V3_EXT_getX509V3_EXT_get_nidX509V3_EXT_i2dX509V3_EXT_nconfX509V3_EXT_nconf_nidX509V3_EXT_printX509V3_EXT_print_fpX509V3_EXT_val_prnX509V3_NAME_from_sectionX509V3_add1_i2dX509V3_add_standard_extensionsX509V3_add_valueX509V3_add_value_boolX509V3_add_value_bool_nfX509V3_add_value_intX509V3_add_value_ucharX509V3_conf_freeX509V3_extensions_printX509V3_get_d2iX509V3_get_sectionX509V3_get_stringX509V3_get_value_boolX509V3_get_value_intX509V3_parse_listX509V3_section_freeX509V3_set_conf_lhashX509V3_set_ctxX509V3_set_nconfX509V3_string_freeX509_ALGORS_itX509_ALGOR_cmpX509_ALGOR_dupX509_ALGOR_freeX509_ALGOR_get0X509_ALGOR_itX509_ALGOR_newX509_ALGOR_set0X509_ALGOR_set_mdX509_ATTRIBUTE_countX509_ATTRIBUTE_createX509_ATTRIBUTE_create_by_NIDX509_ATTRIBUTE_create_by_OBJX509_ATTRIBUTE_create_by_txtX509_ATTRIBUTE_dupX509_ATTRIBUTE_freeX509_ATTRIBUTE_get0_dataX509_ATTRIBUTE_get0_objectX509_ATTRIBUTE_get0_typeX509_ATTRIBUTE_itX509_ATTRIBUTE_newX509_ATTRIBUTE_set1_dataX509_ATTRIBUTE_set1_objectX509_CERT_AUX_freeX509_CERT_AUX_itX509_CERT_AUX_newX509_CERT_AUX_printX509_CERT_PAIR_freeX509_CERT_PAIR_itX509_CERT_PAIR_newX509_CINF_freeX509_CINF_itX509_CINF_newX509_CRL_INFO_freeX509_CRL_INFO_itX509_CRL_INFO_newX509_CRL_METHOD_freeX509_CRL_METHOD_newX509_CRL_add0_revokedX509_CRL_add1_ext_i2dX509_CRL_add_extX509_CRL_check_suitebX509_CRL_cmpX509_CRL_delete_extX509_CRL_diffX509_CRL_digestX509_CRL_dupX509_CRL_freeX509_CRL_get0_by_certX509_CRL_get0_by_serialX509_CRL_get_extX509_CRL_get_ext_by_NIDX509_CRL_get_ext_by_OBJX509_CRL_get_ext_by_criticalX509_CRL_get_ext_countX509_CRL_get_ext_d2iX509_CRL_get_meth_dataX509_CRL_http_nbioX509_CRL_itX509_CRL_matchX509_CRL_newX509_CRL_printX509_CRL_print_fpX509_CRL_set_default_methodX509_CRL_set_issuer_nameX509_CRL_set_lastUpdateX509_CRL_set_meth_dataX509_CRL_set_nextUpdateX509_CRL_set_versionX509_CRL_signX509_CRL_sign_ctxX509_CRL_sortX509_CRL_verifyX509_EXTENSIONS_itX509_EXTENSION_create_by_NIDX509_EXTENSION_create_by_OBJX509_EXTENSION_dupX509_EXTENSION_freeX509_EXTENSION_get_criticalX509_EXTENSION_get_dataX509_EXTENSION_get_objectX509_EXTENSION_itX509_EXTENSION_newX509_EXTENSION_set_criticalX509_EXTENSION_set_dataX509_EXTENSION_set_objectX509_INFO_freeX509_INFO_newX509_LOOKUP_by_aliasX509_LOOKUP_by_fingerprintX509_LOOKUP_by_issuer_serialX509_LOOKUP_by_subjectX509_LOOKUP_ctrlX509_LOOKUP_fileX509_LOOKUP_freeX509_LOOKUP_hash_dirX509_LOOKUP_initX509_LOOKUP_newX509_LOOKUP_shutdownX509_NAME_ENTRY_create_by_NIDX509_NAME_ENTRY_create_by_OBJX509_NAME_ENTRY_create_by_txtX509_NAME_ENTRY_dupX509_NAME_ENTRY_freeX509_NAME_ENTRY_get_dataX509_NAME_ENTRY_get_objectX509_NAME_ENTRY_itX509_NAME_ENTRY_newX509_NAME_ENTRY_set_dataX509_NAME_ENTRY_set_objectX509_NAME_add_entryX509_NAME_add_entry_by_NIDX509_NAME_add_entry_by_OBJX509_NAME_add_entry_by_txtX509_NAME_cmpX509_NAME_delete_entryX509_NAME_digestX509_NAME_dupX509_NAME_entry_countX509_NAME_freeX509_NAME_get_entryX509_NAME_get_index_by_NIDX509_NAME_get_index_by_OBJX509_NAME_get_text_by_NIDX509_NAME_get_text_by_OBJX509_NAME_hashX509_NAME_hash_oldX509_NAME_itX509_NAME_newX509_NAME_onelineX509_NAME_printX509_NAME_print_exX509_NAME_print_ex_fpX509_NAME_setX509_OBJECT_free_contentsX509_OBJECT_idx_by_subjectX509_OBJECT_retrieve_by_subjectX509_OBJECT_retrieve_matchX509_OBJECT_up_ref_countX509_PKEY_freeX509_PKEY_newX509_POLICY_NODE_printX509_PUBKEY_freeX509_PUBKEY_getX509_PUBKEY_get0_paramX509_PUBKEY_itX509_PUBKEY_newX509_PUBKEY_setX509_PUBKEY_set0_paramX509_PURPOSE_addX509_PURPOSE_cleanupX509_PURPOSE_get0X509_PURPOSE_get0_nameX509_PURPOSE_get0_snameX509_PURPOSE_get_by_idX509_PURPOSE_get_by_snameX509_PURPOSE_get_countX509_PURPOSE_get_idX509_PURPOSE_get_trustX509_PURPOSE_setX509_REQ_INFO_freeX509_REQ_INFO_itX509_REQ_INFO_newX509_REQ_add1_attrX509_REQ_add1_attr_by_NIDX509_REQ_add1_attr_by_OBJX509_REQ_add1_attr_by_txtX509_REQ_add_extensionsX509_REQ_add_extensions_nidX509_REQ_check_private_keyX509_REQ_delete_attrX509_REQ_digestX509_REQ_dupX509_REQ_extension_nidX509_REQ_freeX509_REQ_get1_emailX509_REQ_get_attrX509_REQ_get_attr_by_NIDX509_REQ_get_attr_by_OBJX509_REQ_get_attr_countX509_REQ_get_extension_nidsX509_REQ_get_extensionsX509_REQ_get_pubkeyX509_REQ_itX509_REQ_newX509_REQ_printX509_REQ_print_exX509_REQ_print_fpX509_REQ_set_extension_nidsX509_REQ_set_pubkeyX509_REQ_set_subject_nameX509_REQ_set_versionX509_REQ_signX509_REQ_sign_ctxX509_REQ_to_X509X509_REQ_verifyX509_REVOKED_add1_ext_i2dX509_REVOKED_add_extX509_REVOKED_delete_extX509_REVOKED_dupX509_REVOKED_freeX509_REVOKED_get_extX509_REVOKED_get_ext_by_NIDX509_REVOKED_get_ext_by_OBJX509_REVOKED_get_ext_by_criticalX509_REVOKED_get_ext_countX509_REVOKED_get_ext_d2iX509_REVOKED_itX509_REVOKED_newX509_REVOKED_set_revocationDateX509_REVOKED_set_serialNumberX509_SIG_freeX509_SIG_itX509_SIG_newX509_STORE_CTX_cleanupX509_STORE_CTX_freeX509_STORE_CTX_get0_current_crlX509_STORE_CTX_get0_current_issuerX509_STORE_CTX_get0_paramX509_STORE_CTX_get0_parent_ctxX509_STORE_CTX_get0_policy_treeX509_STORE_CTX_get0_storeX509_STORE_CTX_get1_chainX509_STORE_CTX_get1_issuerX509_STORE_CTX_get_chainX509_STORE_CTX_get_current_certX509_STORE_CTX_get_errorX509_STORE_CTX_get_error_depthX509_STORE_CTX_get_ex_dataX509_STORE_CTX_get_ex_new_indexX509_STORE_CTX_get_explicit_policyX509_STORE_CTX_initX509_STORE_CTX_newX509_STORE_CTX_purpose_inheritX509_STORE_CTX_set0_crlsX509_STORE_CTX_set0_paramX509_STORE_CTX_set_certX509_STORE_CTX_set_chainX509_STORE_CTX_set_defaultX509_STORE_CTX_set_depthX509_STORE_CTX_set_errorX509_STORE_CTX_set_ex_dataX509_STORE_CTX_set_flagsX509_STORE_CTX_set_purposeX509_STORE_CTX_set_timeX509_STORE_CTX_set_trustX509_STORE_CTX_set_verify_cbX509_STORE_CTX_trusted_stackX509_STORE_add_certX509_STORE_add_crlX509_STORE_add_lookupX509_STORE_freeX509_STORE_get1_certsX509_STORE_get1_crlsX509_STORE_get_by_subjectX509_STORE_load_locationsX509_STORE_newX509_STORE_set1_paramX509_STORE_set_default_pathsX509_STORE_set_depthX509_STORE_set_flagsX509_STORE_set_lookup_crls_cbX509_STORE_set_purposeX509_STORE_set_trustX509_STORE_set_verify_cbX509_TRUST_addX509_TRUST_cleanupX509_TRUST_get0X509_TRUST_get0_nameX509_TRUST_get_by_idX509_TRUST_get_countX509_TRUST_get_flagsX509_TRUST_get_trustX509_TRUST_setX509_TRUST_set_defaultX509_VAL_freeX509_VAL_itX509_VAL_newX509_VERIFY_PARAM_add0_policyX509_VERIFY_PARAM_add0_tableX509_VERIFY_PARAM_add1_hostX509_VERIFY_PARAM_clear_flagsX509_VERIFY_PARAM_freeX509_VERIFY_PARAM_get0X509_VERIFY_PARAM_get0_nameX509_VERIFY_PARAM_get0_peernameX509_VERIFY_PARAM_get_countX509_VERIFY_PARAM_get_depthX509_VERIFY_PARAM_get_flagsX509_VERIFY_PARAM_inheritX509_VERIFY_PARAM_lookupX509_VERIFY_PARAM_newX509_VERIFY_PARAM_set1X509_VERIFY_PARAM_set1_emailX509_VERIFY_PARAM_set1_hostX509_VERIFY_PARAM_set1_ipX509_VERIFY_PARAM_set1_ip_ascX509_VERIFY_PARAM_set1_nameX509_VERIFY_PARAM_set1_policiesX509_VERIFY_PARAM_set_depthX509_VERIFY_PARAM_set_flagsX509_VERIFY_PARAM_set_hostflagsX509_VERIFY_PARAM_set_purposeX509_VERIFY_PARAM_set_timeX509_VERIFY_PARAM_set_trustX509_VERIFY_PARAM_table_cleanupX509_add1_ext_i2dX509_add1_reject_objectX509_add1_trust_objectX509_add_extX509_alias_get0X509_alias_set1X509_certificate_typeX509_chain_check_suitebX509_chain_up_refX509_check_akidX509_check_caX509_check_emailX509_check_hostX509_check_ipX509_check_ip_ascX509_check_issuedX509_check_private_keyX509_check_purposeX509_check_trustX509_cmpX509_cmp_current_timeX509_cmp_timeX509_delete_extX509_digestX509_dupX509_email_freeX509_find_by_issuer_and_serialX509_find_by_subjectX509_freeX509_get0_pubkey_bitstrX509_get0_signatureX509_get1_emailX509_get1_ocspX509_get_default_cert_areaX509_get_default_cert_dirX509_get_default_cert_dir_envX509_get_default_cert_fileX509_get_default_cert_file_envX509_get_default_private_dirX509_get_ex_dataX509_get_ex_new_indexX509_get_extX509_get_ext_by_NIDX509_get_ext_by_OBJX509_get_ext_by_criticalX509_get_ext_countX509_get_ext_d2iX509_get_issuer_nameX509_get_pubkeyX509_get_pubkey_parametersX509_get_serialNumberX509_get_signature_nidX509_get_subject_nameX509_gmtime_adjX509_http_nbioX509_issuer_and_serial_cmpX509_issuer_and_serial_hashX509_issuer_name_cmpX509_issuer_name_hashX509_issuer_name_hash_oldX509_itX509_keyid_get0X509_keyid_set1X509_load_cert_crl_fileX509_load_cert_fileX509_load_crl_fileX509_newX509_ocspid_printX509_policy_checkX509_policy_level_get0_nodeX509_policy_level_node_countX509_policy_node_get0_parentX509_policy_node_get0_policyX509_policy_node_get0_qualifiersX509_policy_tree_freeX509_policy_tree_get0_levelX509_policy_tree_get0_policiesX509_policy_tree_get0_user_policiesX509_policy_tree_level_countX509_printX509_print_exX509_print_ex_fpX509_print_fpX509_pubkey_digestX509_reject_clearX509_set_ex_dataX509_set_issuer_nameX509_set_notAfterX509_set_notBeforeX509_set_pubkeyX509_set_serialNumberX509_set_subject_nameX509_set_versionX509_signX509_sign_ctxX509_signature_dumpX509_signature_printX509_subject_name_cmpX509_subject_name_hashX509_subject_name_hash_oldX509_supported_extensionX509_time_adjX509_time_adj_exX509_to_X509_REQX509_trust_clearX509_verifyX509_verify_certX509_verify_cert_error_stringX509at_add1_attrX509at_add1_attr_by_NIDX509at_add1_attr_by_OBJX509at_add1_attr_by_txtX509at_delete_attrX509at_get0_data_by_OBJX509at_get_attrX509at_get_attr_by_NIDX509at_get_attr_by_OBJX509at_get_attr_countX509v3_add_extX509v3_delete_extX509v3_get_extX509v3_get_ext_by_NIDX509v3_get_ext_by_OBJX509v3_get_ext_by_criticalX509v3_get_ext_countZLONG_it__IMPORT_DESCRIPTOR_LIBEAY32__NULL_IMPORT_DESCRIPTOR__imp_ACCESS_DESCRIPTION_free__imp_ACCESS_DESCRIPTION_it__imp_ACCESS_DESCRIPTION_new__imp_AES_bi_ige_encrypt__imp_AES_cbc_encrypt__imp_AES_cfb128_encrypt__imp_AES_cfb1_encrypt__imp_AES_cfb8_encrypt__imp_AES_ctr128_encrypt__imp_AES_decrypt__imp_AES_ecb_encrypt__imp_AES_encrypt__imp_AES_ige_encrypt__imp_AES_ofb128_encrypt__imp_AES_options__imp_AES_set_decrypt_key__imp_AES_set_encrypt_key__imp_AES_unwrap_key__imp_AES_wrap_key__imp_ASN1_ANY_it__imp_ASN1_BIT_STRING_check__imp_ASN1_BIT_STRING_free__imp_ASN1_BIT_STRING_get_bit__imp_ASN1_BIT_STRING_it__imp_ASN1_BIT_STRING_name_print__imp_ASN1_BIT_STRING_new__imp_ASN1_BIT_STRING_num_asc__imp_ASN1_BIT_STRING_set__imp_ASN1_BIT_STRING_set_asc__imp_ASN1_BIT_STRING_set_bit__imp_ASN1_BMPSTRING_free__imp_ASN1_BMPSTRING_it__imp_ASN1_BMPSTRING_new__imp_ASN1_BOOLEAN_it__imp_ASN1_ENUMERATED_free__imp_ASN1_ENUMERATED_get__imp_ASN1_ENUMERATED_it__imp_ASN1_ENUMERATED_new__imp_ASN1_ENUMERATED_set__imp_ASN1_ENUMERATED_to_BN__imp_ASN1_FBOOLEAN_it__imp_ASN1_GENERALIZEDTIME_adj__imp_ASN1_GENERALIZEDTIME_check__imp_ASN1_GENERALIZEDTIME_free__imp_ASN1_GENERALIZEDTIME_it__imp_ASN1_GENERALIZEDTIME_new__imp_ASN1_GENERALIZEDTIME_print__imp_ASN1_GENERALIZEDTIME_set__imp_ASN1_GENERALIZEDTIME_set_string__imp_ASN1_GENERALSTRING_free__imp_ASN1_GENERALSTRING_it__imp_ASN1_GENERALSTRING_new__imp_ASN1_IA5STRING_free__imp_ASN1_IA5STRING_it__imp_ASN1_IA5STRING_new__imp_ASN1_INTEGER_cmp__imp_ASN1_INTEGER_dup__imp_ASN1_INTEGER_free__imp_ASN1_INTEGER_get__imp_ASN1_INTEGER_it__imp_ASN1_INTEGER_new__imp_ASN1_INTEGER_set__imp_ASN1_INTEGER_to_BN__imp_ASN1_NULL_free__imp_ASN1_NULL_it__imp_ASN1_NULL_new__imp_ASN1_OBJECT_create__imp_ASN1_OBJECT_free__imp_ASN1_OBJECT_it__imp_ASN1_OBJECT_new__imp_ASN1_OCTET_STRING_NDEF_it__imp_ASN1_OCTET_STRING_cmp__imp_ASN1_OCTET_STRING_dup__imp_ASN1_OCTET_STRING_free__imp_ASN1_OCTET_STRING_it__imp_ASN1_OCTET_STRING_new__imp_ASN1_OCTET_STRING_set__imp_ASN1_PCTX_free__imp_ASN1_PCTX_get_cert_flags__imp_ASN1_PCTX_get_flags__imp_ASN1_PCTX_get_nm_flags__imp_ASN1_PCTX_get_oid_flags__imp_ASN1_PCTX_get_str_flags__imp_ASN1_PCTX_new__imp_ASN1_PCTX_set_cert_flags__imp_ASN1_PCTX_set_flags__imp_ASN1_PCTX_set_nm_flags__imp_ASN1_PCTX_set_oid_flags__imp_ASN1_PCTX_set_str_flags__imp_ASN1_PRINTABLESTRING_free__imp_ASN1_PRINTABLESTRING_it__imp_ASN1_PRINTABLESTRING_new__imp_ASN1_PRINTABLE_free__imp_ASN1_PRINTABLE_it__imp_ASN1_PRINTABLE_new__imp_ASN1_PRINTABLE_type__imp_ASN1_SEQUENCE_ANY_it__imp_ASN1_SEQUENCE_it__imp_ASN1_SET_ANY_it__imp_ASN1_STRING_TABLE_add__imp_ASN1_STRING_TABLE_cleanup__imp_ASN1_STRING_TABLE_get__imp_ASN1_STRING_clear_free__imp_ASN1_STRING_cmp__imp_ASN1_STRING_copy__imp_ASN1_STRING_data__imp_ASN1_STRING_dup__imp_ASN1_STRING_free__imp_ASN1_STRING_get_default_mask__imp_ASN1_STRING_length__imp_ASN1_STRING_length_set__imp_ASN1_STRING_new__imp_ASN1_STRING_print__imp_ASN1_STRING_print_ex__imp_ASN1_STRING_print_ex_fp__imp_ASN1_STRING_set__imp_ASN1_STRING_set0__imp_ASN1_STRING_set_by_NID__imp_ASN1_STRING_set_default_mask__imp_ASN1_STRING_set_default_mask_asc__imp_ASN1_STRING_to_UTF8__imp_ASN1_STRING_type__imp_ASN1_STRING_type_new__imp_ASN1_T61STRING_free__imp_ASN1_T61STRING_it__imp_ASN1_T61STRING_new__imp_ASN1_TBOOLEAN_it__imp_ASN1_TIME_adj__imp_ASN1_TIME_check__imp_ASN1_TIME_diff__imp_ASN1_TIME_free__imp_ASN1_TIME_it__imp_ASN1_TIME_new__imp_ASN1_TIME_print__imp_ASN1_TIME_set__imp_ASN1_TIME_set_string__imp_ASN1_TIME_to_generalizedtime__imp_ASN1_TYPE_cmp__imp_ASN1_TYPE_free__imp_ASN1_TYPE_get__imp_ASN1_TYPE_get_int_octetstring__imp_ASN1_TYPE_get_octetstring__imp_ASN1_TYPE_new__imp_ASN1_TYPE_set__imp_ASN1_TYPE_set1__imp_ASN1_TYPE_set_int_octetstring__imp_ASN1_TYPE_set_octetstring__imp_ASN1_UNIVERSALSTRING_free__imp_ASN1_UNIVERSALSTRING_it__imp_ASN1_UNIVERSALSTRING_new__imp_ASN1_UNIVERSALSTRING_to_string__imp_ASN1_UTCTIME_adj__imp_ASN1_UTCTIME_check__imp_ASN1_UTCTIME_cmp_time_t__imp_ASN1_UTCTIME_free__imp_ASN1_UTCTIME_it__imp_ASN1_UTCTIME_new__imp_ASN1_UTCTIME_print__imp_ASN1_UTCTIME_set__imp_ASN1_UTCTIME_set_string__imp_ASN1_UTF8STRING_free__imp_ASN1_UTF8STRING_it__imp_ASN1_UTF8STRING_new__imp_ASN1_VISIBLESTRING_free__imp_ASN1_VISIBLESTRING_it__imp_ASN1_VISIBLESTRING_new__imp_ASN1_add_oid_module__imp_ASN1_bn_print__imp_ASN1_check_infinite_end__imp_ASN1_const_check_infinite_end__imp_ASN1_d2i_bio__imp_ASN1_d2i_fp__imp_ASN1_digest__imp_ASN1_dup__imp_ASN1_generate_nconf__imp_ASN1_generate_v3__imp_ASN1_get_object__imp_ASN1_i2d_bio__imp_ASN1_i2d_fp__imp_ASN1_item_d2i__imp_ASN1_item_d2i_bio__imp_ASN1_item_d2i_fp__imp_ASN1_item_digest__imp_ASN1_item_dup__imp_ASN1_item_ex_d2i__imp_ASN1_item_ex_free__imp_ASN1_item_ex_i2d__imp_ASN1_item_ex_new__imp_ASN1_item_free__imp_ASN1_item_i2d__imp_ASN1_item_i2d_bio__imp_ASN1_item_i2d_fp__imp_ASN1_item_ndef_i2d__imp_ASN1_item_new__imp_ASN1_item_pack__imp_ASN1_item_print__imp_ASN1_item_sign__imp_ASN1_item_sign_ctx__imp_ASN1_item_unpack__imp_ASN1_item_verify__imp_ASN1_mbstring_copy__imp_ASN1_mbstring_ncopy__imp_ASN1_object_size__imp_ASN1_pack_string__imp_ASN1_parse__imp_ASN1_parse_dump__imp_ASN1_primitive_free__imp_ASN1_primitive_new__imp_ASN1_put_eoc__imp_ASN1_put_object__imp_ASN1_seq_pack__imp_ASN1_seq_unpack__imp_ASN1_sign__imp_ASN1_tag2bit__imp_ASN1_tag2str__imp_ASN1_template_d2i__imp_ASN1_template_free__imp_ASN1_template_i2d__imp_ASN1_template_new__imp_ASN1_unpack_string__imp_ASN1_verify__imp_AUTHORITY_INFO_ACCESS_free__imp_AUTHORITY_INFO_ACCESS_it__imp_AUTHORITY_INFO_ACCESS_new__imp_AUTHORITY_KEYID_free__imp_AUTHORITY_KEYID_it__imp_AUTHORITY_KEYID_new__imp_BASIC_CONSTRAINTS_free__imp_BASIC_CONSTRAINTS_it__imp_BASIC_CONSTRAINTS_new__imp_BF_cbc_encrypt__imp_BF_cfb64_encrypt__imp_BF_decrypt__imp_BF_ecb_encrypt__imp_BF_encrypt__imp_BF_ofb64_encrypt__imp_BF_options__imp_BF_set_key__imp_BIGNUM_it__imp_BIO_accept__imp_BIO_asn1_get_prefix__imp_BIO_asn1_get_suffix__imp_BIO_asn1_set_prefix__imp_BIO_asn1_set_suffix__imp_BIO_callback_ctrl__imp_BIO_clear_flags__imp_BIO_copy_next_retry__imp_BIO_ctrl__imp_BIO_ctrl_get_read_request__imp_BIO_ctrl_get_write_guarantee__imp_BIO_ctrl_pending__imp_BIO_ctrl_reset_read_request__imp_BIO_ctrl_wpending__imp_BIO_debug_callback__imp_BIO_dgram_non_fatal_error__imp_BIO_dump__imp_BIO_dump_cb__imp_BIO_dump_fp__imp_BIO_dump_indent__imp_BIO_dump_indent_cb__imp_BIO_dump_indent_fp__imp_BIO_dup_chain__imp_BIO_f_asn1__imp_BIO_f_base64__imp_BIO_f_buffer__imp_BIO_f_cipher__imp_BIO_f_md__imp_BIO_f_nbio_test__imp_BIO_f_null__imp_BIO_f_reliable__imp_BIO_fd_non_fatal_error__imp_BIO_fd_should_retry__imp_BIO_find_type__imp_BIO_free__imp_BIO_free_all__imp_BIO_get_accept_socket__imp_BIO_get_callback__imp_BIO_get_callback_arg__imp_BIO_get_ex_data__imp_BIO_get_ex_new_index__imp_BIO_get_host_ip__imp_BIO_get_port__imp_BIO_get_retry_BIO__imp_BIO_get_retry_reason__imp_BIO_gethostbyname__imp_BIO_gets__imp_BIO_hex_string__imp_BIO_indent__imp_BIO_int_ctrl__imp_BIO_method_name__imp_BIO_method_type__imp_BIO_new__imp_BIO_new_CMS__imp_BIO_new_NDEF__imp_BIO_new_PKCS7__imp_BIO_new_accept__imp_BIO_new_bio_pair__imp_BIO_new_connect__imp_BIO_new_dgram__imp_BIO_new_fd__imp_BIO_new_file__imp_BIO_new_fp__imp_BIO_new_mem_buf__imp_BIO_new_socket__imp_BIO_next__imp_BIO_nread__imp_BIO_nread0__imp_BIO_number_read__imp_BIO_number_written__imp_BIO_nwrite__imp_BIO_nwrite0__imp_BIO_pop__imp_BIO_printf__imp_BIO_ptr_ctrl__imp_BIO_push__imp_BIO_puts__imp_BIO_read__imp_BIO_s_accept__imp_BIO_s_bio__imp_BIO_s_connect__imp_BIO_s_datagram__imp_BIO_s_fd__imp_BIO_s_file__imp_BIO_s_mem__imp_BIO_s_null__imp_BIO_s_socket__imp_BIO_set__imp_BIO_set_callback__imp_BIO_set_callback_arg__imp_BIO_set_cipher__imp_BIO_set_ex_data__imp_BIO_set_flags__imp_BIO_set_tcp_ndelay__imp_BIO_snprintf__imp_BIO_sock_cleanup__imp_BIO_sock_error__imp_BIO_sock_init__imp_BIO_sock_non_fatal_error__imp_BIO_sock_should_retry__imp_BIO_socket_ioctl__imp_BIO_socket_nbio__imp_BIO_test_flags__imp_BIO_vfree__imp_BIO_vprintf__imp_BIO_vsnprintf__imp_BIO_write__imp_BN_BLINDING_convert__imp_BN_BLINDING_convert_ex__imp_BN_BLINDING_create_param__imp_BN_BLINDING_free__imp_BN_BLINDING_get_flags__imp_BN_BLINDING_get_thread_id__imp_BN_BLINDING_invert__imp_BN_BLINDING_invert_ex__imp_BN_BLINDING_new__imp_BN_BLINDING_set_flags__imp_BN_BLINDING_set_thread_id__imp_BN_BLINDING_thread_id__imp_BN_BLINDING_update__imp_BN_CTX_end__imp_BN_CTX_free__imp_BN_CTX_get__imp_BN_CTX_init__imp_BN_CTX_new__imp_BN_CTX_start__imp_BN_GENCB_call__imp_BN_GF2m_add__imp_BN_GF2m_arr2poly__imp_BN_GF2m_mod__imp_BN_GF2m_mod_arr__imp_BN_GF2m_mod_div__imp_BN_GF2m_mod_div_arr__imp_BN_GF2m_mod_exp__imp_BN_GF2m_mod_exp_arr__imp_BN_GF2m_mod_inv__imp_BN_GF2m_mod_inv_arr__imp_BN_GF2m_mod_mul__imp_BN_GF2m_mod_mul_arr__imp_BN_GF2m_mod_solve_quad__imp_BN_GF2m_mod_solve_quad_arr__imp_BN_GF2m_mod_sqr__imp_BN_GF2m_mod_sqr_arr__imp_BN_GF2m_mod_sqrt__imp_BN_GF2m_mod_sqrt_arr__imp_BN_GF2m_poly2arr__imp_BN_MONT_CTX_copy__imp_BN_MONT_CTX_free__imp_BN_MONT_CTX_init__imp_BN_MONT_CTX_new__imp_BN_MONT_CTX_set__imp_BN_MONT_CTX_set_locked__imp_BN_RECP_CTX_free__imp_BN_RECP_CTX_init__imp_BN_RECP_CTX_new__imp_BN_RECP_CTX_set__imp_BN_X931_derive_prime_ex__imp_BN_X931_generate_Xpq__imp_BN_X931_generate_prime_ex__imp_BN_add__imp_BN_add_word__imp_BN_asc2bn__imp_BN_bin2bn__imp_BN_bn2bin__imp_BN_bn2dec__imp_BN_bn2hex__imp_BN_bn2mpi__imp_BN_bntest_rand__imp_BN_clear__imp_BN_clear_bit__imp_BN_clear_free__imp_BN_cmp__imp_BN_consttime_swap__imp_BN_copy__imp_BN_dec2bn__imp_BN_div__imp_BN_div_recp__imp_BN_div_word__imp_BN_dup__imp_BN_exp__imp_BN_free__imp_BN_from_montgomery__imp_BN_gcd__imp_BN_generate_prime__imp_BN_generate_prime_ex__imp_BN_get0_nist_prime_192__imp_BN_get0_nist_prime_224__imp_BN_get0_nist_prime_256__imp_BN_get0_nist_prime_384__imp_BN_get0_nist_prime_521__imp_BN_get_params__imp_BN_get_word__imp_BN_hex2bn__imp_BN_init__imp_BN_is_bit_set__imp_BN_is_prime__imp_BN_is_prime_ex__imp_BN_is_prime_fasttest__imp_BN_is_prime_fasttest_ex__imp_BN_kronecker__imp_BN_lshift__imp_BN_lshift1__imp_BN_mask_bits__imp_BN_mod_add__imp_BN_mod_add_quick__imp_BN_mod_exp__imp_BN_mod_exp2_mont__imp_BN_mod_exp_mont__imp_BN_mod_exp_mont_consttime__imp_BN_mod_exp_mont_word__imp_BN_mod_exp_recp__imp_BN_mod_exp_simple__imp_BN_mod_inverse__imp_BN_mod_lshift__imp_BN_mod_lshift1__imp_BN_mod_lshift1_quick__imp_BN_mod_lshift_quick__imp_BN_mod_mul__imp_BN_mod_mul_montgomery__imp_BN_mod_mul_reciprocal__imp_BN_mod_sqr__imp_BN_mod_sqrt__imp_BN_mod_sub__imp_BN_mod_sub_quick__imp_BN_mod_word__imp_BN_mpi2bn__imp_BN_mul__imp_BN_mul_word__imp_BN_new__imp_BN_nist_mod_192__imp_BN_nist_mod_224__imp_BN_nist_mod_256__imp_BN_nist_mod_384__imp_BN_nist_mod_521__imp_BN_nnmod__imp_BN_num_bits__imp_BN_num_bits_word__imp_BN_options__imp_BN_print__imp_BN_print_fp__imp_BN_pseudo_rand__imp_BN_pseudo_rand_range__imp_BN_rand__imp_BN_rand_range__imp_BN_reciprocal__imp_BN_rshift__imp_BN_rshift1__imp_BN_set_bit__imp_BN_set_negative__imp_BN_set_params__imp_BN_set_word__imp_BN_sqr__imp_BN_sub__imp_BN_sub_word__imp_BN_swap__imp_BN_to_ASN1_ENUMERATED__imp_BN_to_ASN1_INTEGER__imp_BN_uadd__imp_BN_ucmp__imp_BN_usub__imp_BN_value_one__imp_BUF_MEM_free__imp_BUF_MEM_grow__imp_BUF_MEM_grow_clean__imp_BUF_MEM_new__imp_BUF_memdup__imp_BUF_reverse__imp_BUF_strdup__imp_BUF_strlcat__imp_BUF_strlcpy__imp_BUF_strndup__imp_BUF_strnlen__imp_CAST_cbc_encrypt__imp_CAST_cfb64_encrypt__imp_CAST_decrypt__imp_CAST_ecb_encrypt__imp_CAST_encrypt__imp_CAST_ofb64_encrypt__imp_CAST_set_key__imp_CBIGNUM_it__imp_CERTIFICATEPOLICIES_free__imp_CERTIFICATEPOLICIES_it__imp_CERTIFICATEPOLICIES_new__imp_CMAC_CTX_cleanup__imp_CMAC_CTX_copy__imp_CMAC_CTX_free__imp_CMAC_CTX_get0_cipher_ctx__imp_CMAC_CTX_new__imp_CMAC_Final__imp_CMAC_Init__imp_CMAC_Update__imp_CMAC_resume__imp_CMS_ContentInfo_free__imp_CMS_ContentInfo_it__imp_CMS_ContentInfo_new__imp_CMS_ContentInfo_print_ctx__imp_CMS_EncryptedData_decrypt__imp_CMS_EncryptedData_encrypt__imp_CMS_EncryptedData_set1_key__imp_CMS_EnvelopedData_create__imp_CMS_ReceiptRequest_create0__imp_CMS_ReceiptRequest_free__imp_CMS_ReceiptRequest_get0_values__imp_CMS_ReceiptRequest_it__imp_CMS_ReceiptRequest_new__imp_CMS_RecipientEncryptedKey_cert_cmp__imp_CMS_RecipientEncryptedKey_get0_id__imp_CMS_RecipientInfo_decrypt__imp_CMS_RecipientInfo_encrypt__imp_CMS_RecipientInfo_get0_pkey_ctx__imp_CMS_RecipientInfo_kari_decrypt__imp_CMS_RecipientInfo_kari_get0_alg__imp_CMS_RecipientInfo_kari_get0_ctx__imp_CMS_RecipientInfo_kari_get0_orig_id__imp_CMS_RecipientInfo_kari_get0_reks__imp_CMS_RecipientInfo_kari_orig_id_cmp__imp_CMS_RecipientInfo_kari_set0_pkey__imp_CMS_RecipientInfo_kekri_get0_id__imp_CMS_RecipientInfo_kekri_id_cmp__imp_CMS_RecipientInfo_ktri_cert_cmp__imp_CMS_RecipientInfo_ktri_get0_algs__imp_CMS_RecipientInfo_ktri_get0_signer_id__imp_CMS_RecipientInfo_set0_key__imp_CMS_RecipientInfo_set0_password__imp_CMS_RecipientInfo_set0_pkey__imp_CMS_RecipientInfo_type__imp_CMS_SharedInfo_encode__imp_CMS_SignedData_init__imp_CMS_SignerInfo_cert_cmp__imp_CMS_SignerInfo_get0_algs__imp_CMS_SignerInfo_get0_md_ctx__imp_CMS_SignerInfo_get0_pkey_ctx__imp_CMS_SignerInfo_get0_signature__imp_CMS_SignerInfo_get0_signer_id__imp_CMS_SignerInfo_set1_signer_cert__imp_CMS_SignerInfo_sign__imp_CMS_SignerInfo_verify__imp_CMS_SignerInfo_verify_content__imp_CMS_add0_CertificateChoices__imp_CMS_add0_RevocationInfoChoice__imp_CMS_add0_cert__imp_CMS_add0_crl__imp_CMS_add0_recipient_key__imp_CMS_add0_recipient_password__imp_CMS_add1_ReceiptRequest__imp_CMS_add1_cert__imp_CMS_add1_crl__imp_CMS_add1_recipient_cert__imp_CMS_add1_signer__imp_CMS_add_simple_smimecap__imp_CMS_add_smimecap__imp_CMS_add_standard_smimecap__imp_CMS_compress__imp_CMS_data__imp_CMS_dataFinal__imp_CMS_dataInit__imp_CMS_data_create__imp_CMS_decrypt__imp_CMS_decrypt_set1_key__imp_CMS_decrypt_set1_password__imp_CMS_decrypt_set1_pkey__imp_CMS_digest_create__imp_CMS_digest_verify__imp_CMS_encrypt__imp_CMS_final__imp_CMS_get0_RecipientInfos__imp_CMS_get0_SignerInfos__imp_CMS_get0_content__imp_CMS_get0_eContentType__imp_CMS_get0_signers__imp_CMS_get0_type__imp_CMS_get1_ReceiptRequest__imp_CMS_get1_certs__imp_CMS_get1_crls__imp_CMS_is_detached__imp_CMS_set1_eContentType__imp_CMS_set1_signers_certs__imp_CMS_set_detached__imp_CMS_sign__imp_CMS_sign_receipt__imp_CMS_signed_add1_attr__imp_CMS_signed_add1_attr_by_NID__imp_CMS_signed_add1_attr_by_OBJ__imp_CMS_signed_add1_attr_by_txt__imp_CMS_signed_delete_attr__imp_CMS_signed_get0_data_by_OBJ__imp_CMS_signed_get_attr__imp_CMS_signed_get_attr_by_NID__imp_CMS_signed_get_attr_by_OBJ__imp_CMS_signed_get_attr_count__imp_CMS_stream__imp_CMS_uncompress__imp_CMS_unsigned_add1_attr__imp_CMS_unsigned_add1_attr_by_NID__imp_CMS_unsigned_add1_attr_by_OBJ__imp_CMS_unsigned_add1_attr_by_txt__imp_CMS_unsigned_delete_attr__imp_CMS_unsigned_get0_data_by_OBJ__imp_CMS_unsigned_get_attr__imp_CMS_unsigned_get_attr_by_NID__imp_CMS_unsigned_get_attr_by_OBJ__imp_CMS_unsigned_get_attr_count__imp_CMS_verify__imp_CMS_verify_receipt__imp_COMP_CTX_free__imp_COMP_CTX_new__imp_COMP_compress_block__imp_COMP_expand_block__imp_COMP_rle__imp_COMP_zlib__imp_COMP_zlib_cleanup__imp_CONF_dump_bio__imp_CONF_dump_fp__imp_CONF_free__imp_CONF_get1_default_config_file__imp_CONF_get_number__imp_CONF_get_section__imp_CONF_get_string__imp_CONF_imodule_get_flags__imp_CONF_imodule_get_module__imp_CONF_imodule_get_name__imp_CONF_imodule_get_usr_data__imp_CONF_imodule_get_value__imp_CONF_imodule_set_flags__imp_CONF_imodule_set_usr_data__imp_CONF_load__imp_CONF_load_bio__imp_CONF_load_fp__imp_CONF_module_add__imp_CONF_module_get_usr_data__imp_CONF_module_set_usr_data__imp_CONF_modules_finish__imp_CONF_modules_free__imp_CONF_modules_load__imp_CONF_modules_load_file__imp_CONF_modules_unload__imp_CONF_parse_list__imp_CONF_set_default_method__imp_CONF_set_nconf__imp_CRL_DIST_POINTS_free__imp_CRL_DIST_POINTS_it__imp_CRL_DIST_POINTS_new__imp_CRYPTO_128_unwrap__imp_CRYPTO_128_wrap__imp_CRYPTO_THREADID_cmp__imp_CRYPTO_THREADID_cpy__imp_CRYPTO_THREADID_current__imp_CRYPTO_THREADID_get_callback__imp_CRYPTO_THREADID_hash__imp_CRYPTO_THREADID_set_callback__imp_CRYPTO_THREADID_set_numeric__imp_CRYPTO_THREADID_set_pointer__imp_CRYPTO_add_lock__imp_CRYPTO_cbc128_decrypt__imp_CRYPTO_cbc128_encrypt__imp_CRYPTO_ccm128_aad__imp_CRYPTO_ccm128_decrypt__imp_CRYPTO_ccm128_decrypt_ccm64__imp_CRYPTO_ccm128_encrypt__imp_CRYPTO_ccm128_encrypt_ccm64__imp_CRYPTO_ccm128_init__imp_CRYPTO_ccm128_setiv__imp_CRYPTO_ccm128_tag__imp_CRYPTO_cfb128_1_encrypt__imp_CRYPTO_cfb128_8_encrypt__imp_CRYPTO_cfb128_encrypt__imp_CRYPTO_cleanup_all_ex_data__imp_CRYPTO_ctr128_encrypt__imp_CRYPTO_ctr128_encrypt_ctr32__imp_CRYPTO_cts128_decrypt__imp_CRYPTO_cts128_decrypt_block__imp_CRYPTO_cts128_encrypt__imp_CRYPTO_cts128_encrypt_block__imp_CRYPTO_dbg_free__imp_CRYPTO_dbg_get_options__imp_CRYPTO_dbg_malloc__imp_CRYPTO_dbg_realloc__imp_CRYPTO_dbg_set_options__imp_CRYPTO_destroy_dynlockid__imp_CRYPTO_dup_ex_data__imp_CRYPTO_ex_data_new_class__imp_CRYPTO_free__imp_CRYPTO_free_ex_data__imp_CRYPTO_free_locked__imp_CRYPTO_gcm128_aad__imp_CRYPTO_gcm128_decrypt__imp_CRYPTO_gcm128_decrypt_ctr32__imp_CRYPTO_gcm128_encrypt__imp_CRYPTO_gcm128_encrypt_ctr32__imp_CRYPTO_gcm128_finish__imp_CRYPTO_gcm128_init__imp_CRYPTO_gcm128_new__imp_CRYPTO_gcm128_release__imp_CRYPTO_gcm128_setiv__imp_CRYPTO_gcm128_tag__imp_CRYPTO_get_add_lock_callback__imp_CRYPTO_get_dynlock_create_callback__imp_CRYPTO_get_dynlock_destroy_callback__imp_CRYPTO_get_dynlock_lock_callback__imp_CRYPTO_get_dynlock_value__imp_CRYPTO_get_ex_data__imp_CRYPTO_get_ex_data_implementation__imp_CRYPTO_get_ex_new_index__imp_CRYPTO_get_id_callback__imp_CRYPTO_get_lock_name__imp_CRYPTO_get_locked_mem_ex_functions__imp_CRYPTO_get_locked_mem_functions__imp_CRYPTO_get_locking_callback__imp_CRYPTO_get_mem_debug_functions__imp_CRYPTO_get_mem_debug_options__imp_CRYPTO_get_mem_ex_functions__imp_CRYPTO_get_mem_functions__imp_CRYPTO_get_new_dynlockid__imp_CRYPTO_get_new_lockid__imp_CRYPTO_is_mem_check_on__imp_CRYPTO_lock__imp_CRYPTO_malloc__imp_CRYPTO_malloc_locked__imp_CRYPTO_mem_ctrl__imp_CRYPTO_mem_leaks__imp_CRYPTO_mem_leaks_cb__imp_CRYPTO_mem_leaks_fp__imp_CRYPTO_memcmp__imp_CRYPTO_new_ex_data__imp_CRYPTO_nistcts128_decrypt__imp_CRYPTO_nistcts128_decrypt_block__imp_CRYPTO_nistcts128_encrypt__imp_CRYPTO_nistcts128_encrypt_block__imp_CRYPTO_num_locks__imp_CRYPTO_ofb128_encrypt__imp_CRYPTO_pop_info__imp_CRYPTO_push_info___imp_CRYPTO_realloc__imp_CRYPTO_realloc_clean__imp_CRYPTO_remalloc__imp_CRYPTO_remove_all_info__imp_CRYPTO_set_add_lock_callback__imp_CRYPTO_set_dynlock_create_callback__imp_CRYPTO_set_dynlock_destroy_callback__imp_CRYPTO_set_dynlock_lock_callback__imp_CRYPTO_set_ex_data__imp_CRYPTO_set_ex_data_implementation__imp_CRYPTO_set_id_callback__imp_CRYPTO_set_locked_mem_ex_functions__imp_CRYPTO_set_locked_mem_functions__imp_CRYPTO_set_locking_callback__imp_CRYPTO_set_mem_debug_functions__imp_CRYPTO_set_mem_debug_options__imp_CRYPTO_set_mem_ex_functions__imp_CRYPTO_set_mem_functions__imp_CRYPTO_strdup__imp_CRYPTO_thread_id__imp_CRYPTO_xts128_encrypt__imp_Camellia_cbc_encrypt__imp_Camellia_cfb128_encrypt__imp_Camellia_cfb1_encrypt__imp_Camellia_cfb8_encrypt__imp_Camellia_ctr128_encrypt__imp_Camellia_decrypt__imp_Camellia_ecb_encrypt__imp_Camellia_encrypt__imp_Camellia_ofb128_encrypt__imp_Camellia_set_key__imp_DES_cbc_cksum__imp_DES_cbc_encrypt__imp_DES_cfb64_encrypt__imp_DES_cfb_encrypt__imp_DES_check_key_parity__imp_DES_crypt__imp_DES_decrypt3__imp_DES_ecb3_encrypt__imp_DES_ecb_encrypt__imp_DES_ede3_cbc_encrypt__imp_DES_ede3_cbcm_encrypt__imp_DES_ede3_cfb64_encrypt__imp_DES_ede3_cfb_encrypt__imp_DES_ede3_ofb64_encrypt__imp_DES_enc_read__imp_DES_enc_write__imp_DES_encrypt1__imp_DES_encrypt2__imp_DES_encrypt3__imp_DES_fcrypt__imp_DES_is_weak_key__imp_DES_key_sched__imp_DES_ncbc_encrypt__imp_DES_ofb64_encrypt__imp_DES_ofb_encrypt__imp_DES_options__imp_DES_pcbc_encrypt__imp_DES_quad_cksum__imp_DES_random_key__imp_DES_read_2passwords__imp_DES_read_password__imp_DES_set_key__imp_DES_set_key_checked__imp_DES_set_key_unchecked__imp_DES_set_odd_parity__imp_DES_string_to_2keys__imp_DES_string_to_key__imp_DES_xcbc_encrypt__imp_DH_KDF_X9_42__imp_DH_OpenSSL__imp_DH_check__imp_DH_check_pub_key__imp_DH_compute_key__imp_DH_compute_key_padded__imp_DH_free__imp_DH_generate_key__imp_DH_generate_parameters__imp_DH_generate_parameters_ex__imp_DH_get_1024_160__imp_DH_get_2048_224__imp_DH_get_2048_256__imp_DH_get_default_method__imp_DH_get_ex_data__imp_DH_get_ex_new_index__imp_DH_new__imp_DH_new_method__imp_DH_set_default_method__imp_DH_set_ex_data__imp_DH_set_method__imp_DH_size__imp_DH_up_ref__imp_DHparams_dup__imp_DHparams_print__imp_DHparams_print_fp__imp_DIRECTORYSTRING_free__imp_DIRECTORYSTRING_it__imp_DIRECTORYSTRING_new__imp_DISPLAYTEXT_free__imp_DISPLAYTEXT_it__imp_DISPLAYTEXT_new__imp_DIST_POINT_NAME_free__imp_DIST_POINT_NAME_it__imp_DIST_POINT_NAME_new__imp_DIST_POINT_free__imp_DIST_POINT_it__imp_DIST_POINT_new__imp_DIST_POINT_set_dpname__imp_DSA_OpenSSL__imp_DSA_SIG_free__imp_DSA_SIG_new__imp_DSA_do_sign__imp_DSA_do_verify__imp_DSA_dup_DH__imp_DSA_free__imp_DSA_generate_key__imp_DSA_generate_parameters__imp_DSA_generate_parameters_ex__imp_DSA_get_default_method__imp_DSA_get_ex_data__imp_DSA_get_ex_new_index__imp_DSA_new__imp_DSA_new_method__imp_DSA_print__imp_DSA_print_fp__imp_DSA_set_default_method__imp_DSA_set_ex_data__imp_DSA_set_method__imp_DSA_sign__imp_DSA_sign_setup__imp_DSA_size__imp_DSA_up_ref__imp_DSA_verify__imp_DSAparams_dup__imp_DSAparams_print__imp_DSAparams_print_fp__imp_DSO_METHOD_beos__imp_DSO_METHOD_dl__imp_DSO_METHOD_dlfcn__imp_DSO_METHOD_null__imp_DSO_METHOD_openssl__imp_DSO_METHOD_vms__imp_DSO_METHOD_win32__imp_DSO_bind_func__imp_DSO_bind_var__imp_DSO_convert_filename__imp_DSO_ctrl__imp_DSO_flags__imp_DSO_free__imp_DSO_get_default_method__imp_DSO_get_filename__imp_DSO_get_loaded_filename__imp_DSO_get_method__imp_DSO_global_lookup__imp_DSO_load__imp_DSO_merge__imp_DSO_new__imp_DSO_new_method__imp_DSO_pathbyaddr__imp_DSO_set_default_method__imp_DSO_set_filename__imp_DSO_set_method__imp_DSO_set_name_converter__imp_DSO_up_ref__imp_ECDH_KDF_X9_62__imp_ECDH_OpenSSL__imp_ECDH_compute_key__imp_ECDH_get_default_method__imp_ECDH_get_ex_data__imp_ECDH_get_ex_new_index__imp_ECDH_set_default_method__imp_ECDH_set_ex_data__imp_ECDH_set_method__imp_ECDSA_METHOD_free__imp_ECDSA_METHOD_get_app_data__imp_ECDSA_METHOD_new__imp_ECDSA_METHOD_set_app_data__imp_ECDSA_METHOD_set_flags__imp_ECDSA_METHOD_set_name__imp_ECDSA_METHOD_set_sign__imp_ECDSA_METHOD_set_sign_setup__imp_ECDSA_METHOD_set_verify__imp_ECDSA_OpenSSL__imp_ECDSA_SIG_free__imp_ECDSA_SIG_new__imp_ECDSA_do_sign__imp_ECDSA_do_sign_ex__imp_ECDSA_do_verify__imp_ECDSA_get_default_method__imp_ECDSA_get_ex_data__imp_ECDSA_get_ex_new_index__imp_ECDSA_set_default_method__imp_ECDSA_set_ex_data__imp_ECDSA_set_method__imp_ECDSA_sign__imp_ECDSA_sign_ex__imp_ECDSA_sign_setup__imp_ECDSA_size__imp_ECDSA_verify__imp_ECPKParameters_print__imp_ECPKParameters_print_fp__imp_ECParameters_print__imp_ECParameters_print_fp__imp_EC_GF2m_simple_method__imp_EC_GFp_mont_method__imp_EC_GFp_nist_method__imp_EC_GFp_simple_method__imp_EC_GROUP_check__imp_EC_GROUP_check_discriminant__imp_EC_GROUP_clear_free__imp_EC_GROUP_cmp__imp_EC_GROUP_copy__imp_EC_GROUP_dup__imp_EC_GROUP_free__imp_EC_GROUP_get0_generator__imp_EC_GROUP_get0_seed__imp_EC_GROUP_get_asn1_flag__imp_EC_GROUP_get_basis_type__imp_EC_GROUP_get_cofactor__imp_EC_GROUP_get_curve_GF2m__imp_EC_GROUP_get_curve_GFp__imp_EC_GROUP_get_curve_name__imp_EC_GROUP_get_degree__imp_EC_GROUP_get_mont_data__imp_EC_GROUP_get_order__imp_EC_GROUP_get_pentanomial_basis__imp_EC_GROUP_get_point_conversion_form__imp_EC_GROUP_get_seed_len__imp_EC_GROUP_get_trinomial_basis__imp_EC_GROUP_have_precompute_mult__imp_EC_GROUP_method_of__imp_EC_GROUP_new__imp_EC_GROUP_new_by_curve_name__imp_EC_GROUP_new_curve_GF2m__imp_EC_GROUP_new_curve_GFp__imp_EC_GROUP_precompute_mult__imp_EC_GROUP_set_asn1_flag__imp_EC_GROUP_set_curve_GF2m__imp_EC_GROUP_set_curve_GFp__imp_EC_GROUP_set_curve_name__imp_EC_GROUP_set_generator__imp_EC_GROUP_set_point_conversion_form__imp_EC_GROUP_set_seed__imp_EC_KEY_check_key__imp_EC_KEY_clear_flags__imp_EC_KEY_copy__imp_EC_KEY_dup__imp_EC_KEY_free__imp_EC_KEY_generate_key__imp_EC_KEY_get0_group__imp_EC_KEY_get0_private_key__imp_EC_KEY_get0_public_key__imp_EC_KEY_get_conv_form__imp_EC_KEY_get_enc_flags__imp_EC_KEY_get_flags__imp_EC_KEY_get_key_method_data__imp_EC_KEY_insert_key_method_data__imp_EC_KEY_new__imp_EC_KEY_new_by_curve_name__imp_EC_KEY_precompute_mult__imp_EC_KEY_print__imp_EC_KEY_print_fp__imp_EC_KEY_set_asn1_flag__imp_EC_KEY_set_conv_form__imp_EC_KEY_set_enc_flags__imp_EC_KEY_set_flags__imp_EC_KEY_set_group__imp_EC_KEY_set_private_key__imp_EC_KEY_set_public_key__imp_EC_KEY_set_public_key_affine_coordinates__imp_EC_KEY_up_ref__imp_EC_METHOD_get_field_type__imp_EC_POINT_add__imp_EC_POINT_bn2point__imp_EC_POINT_clear_free__imp_EC_POINT_cmp__imp_EC_POINT_copy__imp_EC_POINT_dbl__imp_EC_POINT_dup__imp_EC_POINT_free__imp_EC_POINT_get_Jprojective_coordinates_GFp__imp_EC_POINT_get_affine_coordinates_GF2m__imp_EC_POINT_get_affine_coordinates_GFp__imp_EC_POINT_hex2point__imp_EC_POINT_invert__imp_EC_POINT_is_at_infinity__imp_EC_POINT_is_on_curve__imp_EC_POINT_make_affine__imp_EC_POINT_method_of__imp_EC_POINT_mul__imp_EC_POINT_new__imp_EC_POINT_oct2point__imp_EC_POINT_point2bn__imp_EC_POINT_point2hex__imp_EC_POINT_point2oct__imp_EC_POINT_set_Jprojective_coordinates_GFp__imp_EC_POINT_set_affine_coordinates_GF2m__imp_EC_POINT_set_affine_coordinates_GFp__imp_EC_POINT_set_compressed_coordinates_GF2m__imp_EC_POINT_set_compressed_coordinates_GFp__imp_EC_POINT_set_to_infinity__imp_EC_POINTs_make_affine__imp_EC_POINTs_mul__imp_EC_curve_nid2nist__imp_EC_curve_nist2nid__imp_EC_get_builtin_curves__imp_EDIPARTYNAME_free__imp_EDIPARTYNAME_it__imp_EDIPARTYNAME_new__imp_ENGINE_add__imp_ENGINE_add_conf_module__imp_ENGINE_by_id__imp_ENGINE_cleanup__imp_ENGINE_cmd_is_executable__imp_ENGINE_ctrl__imp_ENGINE_ctrl_cmd__imp_ENGINE_ctrl_cmd_string__imp_ENGINE_finish__imp_ENGINE_free__imp_ENGINE_get_DH__imp_ENGINE_get_DSA__imp_ENGINE_get_ECDH__imp_ENGINE_get_ECDSA__imp_ENGINE_get_RAND__imp_ENGINE_get_RSA__imp_ENGINE_get_STORE__imp_ENGINE_get_cipher__imp_ENGINE_get_cipher_engine__imp_ENGINE_get_ciphers__imp_ENGINE_get_cmd_defns__imp_ENGINE_get_ctrl_function__imp_ENGINE_get_default_DH__imp_ENGINE_get_default_DSA__imp_ENGINE_get_default_ECDH__imp_ENGINE_get_default_ECDSA__imp_ENGINE_get_default_RAND__imp_ENGINE_get_default_RSA__imp_ENGINE_get_destroy_function__imp_ENGINE_get_digest__imp_ENGINE_get_digest_engine__imp_ENGINE_get_digests__imp_ENGINE_get_ex_data__imp_ENGINE_get_ex_new_index__imp_ENGINE_get_finish_function__imp_ENGINE_get_first__imp_ENGINE_get_flags__imp_ENGINE_get_id__imp_ENGINE_get_init_function__imp_ENGINE_get_last__imp_ENGINE_get_load_privkey_function__imp_ENGINE_get_load_pubkey_function__imp_ENGINE_get_name__imp_ENGINE_get_next__imp_ENGINE_get_pkey_asn1_meth__imp_ENGINE_get_pkey_asn1_meth_engine__imp_ENGINE_get_pkey_asn1_meth_str__imp_ENGINE_get_pkey_asn1_meths__imp_ENGINE_get_pkey_meth__imp_ENGINE_get_pkey_meth_engine__imp_ENGINE_get_pkey_meths__imp_ENGINE_get_prev__imp_ENGINE_get_ssl_client_cert_function__imp_ENGINE_get_static_state__imp_ENGINE_get_table_flags__imp_ENGINE_init__imp_ENGINE_load_builtin_engines__imp_ENGINE_load_cryptodev__imp_ENGINE_load_dynamic__imp_ENGINE_load_openssl__imp_ENGINE_load_private_key__imp_ENGINE_load_public_key__imp_ENGINE_load_rdrand__imp_ENGINE_load_ssl_client_cert__imp_ENGINE_new__imp_ENGINE_pkey_asn1_find_str__imp_ENGINE_register_DH__imp_ENGINE_register_DSA__imp_ENGINE_register_ECDH__imp_ENGINE_register_ECDSA__imp_ENGINE_register_RAND__imp_ENGINE_register_RSA__imp_ENGINE_register_STORE__imp_ENGINE_register_all_DH__imp_ENGINE_register_all_DSA__imp_ENGINE_register_all_ECDH__imp_ENGINE_register_all_ECDSA__imp_ENGINE_register_all_RAND__imp_ENGINE_register_all_RSA__imp_ENGINE_register_all_STORE__imp_ENGINE_register_all_ciphers__imp_ENGINE_register_all_complete__imp_ENGINE_register_all_digests__imp_ENGINE_register_all_pkey_asn1_meths__imp_ENGINE_register_all_pkey_meths__imp_ENGINE_register_ciphers__imp_ENGINE_register_complete__imp_ENGINE_register_digests__imp_ENGINE_register_pkey_asn1_meths__imp_ENGINE_register_pkey_meths__imp_ENGINE_remove__imp_ENGINE_set_DH__imp_ENGINE_set_DSA__imp_ENGINE_set_ECDH__imp_ENGINE_set_ECDSA__imp_ENGINE_set_RAND__imp_ENGINE_set_RSA__imp_ENGINE_set_STORE__imp_ENGINE_set_ciphers__imp_ENGINE_set_cmd_defns__imp_ENGINE_set_ctrl_function__imp_ENGINE_set_default__imp_ENGINE_set_default_DH__imp_ENGINE_set_default_DSA__imp_ENGINE_set_default_ECDH__imp_ENGINE_set_default_ECDSA__imp_ENGINE_set_default_RAND__imp_ENGINE_set_default_RSA__imp_ENGINE_set_default_ciphers__imp_ENGINE_set_default_digests__imp_ENGINE_set_default_pkey_asn1_meths__imp_ENGINE_set_default_pkey_meths__imp_ENGINE_set_default_string__imp_ENGINE_set_destroy_function__imp_ENGINE_set_digests__imp_ENGINE_set_ex_data__imp_ENGINE_set_finish_function__imp_ENGINE_set_flags__imp_ENGINE_set_id__imp_ENGINE_set_init_function__imp_ENGINE_set_load_privkey_function__imp_ENGINE_set_load_pubkey_function__imp_ENGINE_set_load_ssl_client_cert_function__imp_ENGINE_set_name__imp_ENGINE_set_pkey_asn1_meths__imp_ENGINE_set_pkey_meths__imp_ENGINE_set_table_flags__imp_ENGINE_unregister_DH__imp_ENGINE_unregister_DSA__imp_ENGINE_unregister_ECDH__imp_ENGINE_unregister_ECDSA__imp_ENGINE_unregister_RAND__imp_ENGINE_unregister_RSA__imp_ENGINE_unregister_STORE__imp_ENGINE_unregister_ciphers__imp_ENGINE_unregister_digests__imp_ENGINE_unregister_pkey_asn1_meths__imp_ENGINE_unregister_pkey_meths__imp_ENGINE_up_ref__imp_ERR_add_error_data__imp_ERR_add_error_vdata__imp_ERR_clear_error__imp_ERR_error_string__imp_ERR_error_string_n__imp_ERR_free_strings__imp_ERR_func_error_string__imp_ERR_get_err_state_table__imp_ERR_get_error__imp_ERR_get_error_line__imp_ERR_get_error_line_data__imp_ERR_get_implementation__imp_ERR_get_next_error_library__imp_ERR_get_state__imp_ERR_get_string_table__imp_ERR_lib_error_string__imp_ERR_load_ASN1_strings__imp_ERR_load_BIO_strings__imp_ERR_load_BN_strings__imp_ERR_load_BUF_strings__imp_ERR_load_CMS_strings__imp_ERR_load_COMP_strings__imp_ERR_load_CONF_strings__imp_ERR_load_CRYPTO_strings__imp_ERR_load_DH_strings__imp_ERR_load_DSA_strings__imp_ERR_load_DSO_strings__imp_ERR_load_ECDH_strings__imp_ERR_load_ECDSA_strings__imp_ERR_load_EC_strings__imp_ERR_load_ENGINE_strings__imp_ERR_load_ERR_strings__imp_ERR_load_EVP_strings__imp_ERR_load_OBJ_strings__imp_ERR_load_OCSP_strings__imp_ERR_load_PEM_strings__imp_ERR_load_PKCS12_strings__imp_ERR_load_PKCS7_strings__imp_ERR_load_RAND_strings__imp_ERR_load_RSA_strings__imp_ERR_load_TS_strings__imp_ERR_load_UI_strings__imp_ERR_load_X509V3_strings__imp_ERR_load_X509_strings__imp_ERR_load_crypto_strings__imp_ERR_load_strings__imp_ERR_peek_error__imp_ERR_peek_error_line__imp_ERR_peek_error_line_data__imp_ERR_peek_last_error__imp_ERR_peek_last_error_line__imp_ERR_peek_last_error_line_data__imp_ERR_pop_to_mark__imp_ERR_print_errors__imp_ERR_print_errors_cb__imp_ERR_print_errors_fp__imp_ERR_put_error__imp_ERR_reason_error_string__imp_ERR_release_err_state_table__imp_ERR_remove_state__imp_ERR_remove_thread_state__imp_ERR_set_error_data__imp_ERR_set_implementation__imp_ERR_set_mark__imp_ERR_unload_strings__imp_ESS_CERT_ID_dup__imp_ESS_CERT_ID_free__imp_ESS_CERT_ID_new__imp_ESS_ISSUER_SERIAL_dup__imp_ESS_ISSUER_SERIAL_free__imp_ESS_ISSUER_SERIAL_new__imp_ESS_SIGNING_CERT_dup__imp_ESS_SIGNING_CERT_free__imp_ESS_SIGNING_CERT_new__imp_EVP_BytesToKey__imp_EVP_CIPHER_CTX_block_size__imp_EVP_CIPHER_CTX_cipher__imp_EVP_CIPHER_CTX_cleanup__imp_EVP_CIPHER_CTX_clear_flags__imp_EVP_CIPHER_CTX_copy__imp_EVP_CIPHER_CTX_ctrl__imp_EVP_CIPHER_CTX_flags__imp_EVP_CIPHER_CTX_free__imp_EVP_CIPHER_CTX_get_app_data__imp_EVP_CIPHER_CTX_init__imp_EVP_CIPHER_CTX_iv_length__imp_EVP_CIPHER_CTX_key_length__imp_EVP_CIPHER_CTX_new__imp_EVP_CIPHER_CTX_nid__imp_EVP_CIPHER_CTX_rand_key__imp_EVP_CIPHER_CTX_set_app_data__imp_EVP_CIPHER_CTX_set_flags__imp_EVP_CIPHER_CTX_set_key_length__imp_EVP_CIPHER_CTX_set_padding__imp_EVP_CIPHER_CTX_test_flags__imp_EVP_CIPHER_asn1_to_param__imp_EVP_CIPHER_block_size__imp_EVP_CIPHER_do_all__imp_EVP_CIPHER_do_all_sorted__imp_EVP_CIPHER_flags__imp_EVP_CIPHER_get_asn1_iv__imp_EVP_CIPHER_iv_length__imp_EVP_CIPHER_key_length__imp_EVP_CIPHER_nid__imp_EVP_CIPHER_param_to_asn1__imp_EVP_CIPHER_set_asn1_iv__imp_EVP_CIPHER_type__imp_EVP_Cipher__imp_EVP_CipherFinal__imp_EVP_CipherFinal_ex__imp_EVP_CipherInit__imp_EVP_CipherInit_ex__imp_EVP_CipherUpdate__imp_EVP_DecodeBlock__imp_EVP_DecodeFinal__imp_EVP_DecodeInit__imp_EVP_DecodeUpdate__imp_EVP_DecryptFinal__imp_EVP_DecryptFinal_ex__imp_EVP_DecryptInit__imp_EVP_DecryptInit_ex__imp_EVP_DecryptUpdate__imp_EVP_Digest__imp_EVP_DigestFinal__imp_EVP_DigestFinal_ex__imp_EVP_DigestInit__imp_EVP_DigestInit_ex__imp_EVP_DigestSignFinal__imp_EVP_DigestSignInit__imp_EVP_DigestUpdate__imp_EVP_DigestVerifyFinal__imp_EVP_DigestVerifyInit__imp_EVP_EncodeBlock__imp_EVP_EncodeFinal__imp_EVP_EncodeInit__imp_EVP_EncodeUpdate__imp_EVP_EncryptFinal__imp_EVP_EncryptFinal_ex__imp_EVP_EncryptInit__imp_EVP_EncryptInit_ex__imp_EVP_EncryptUpdate__imp_EVP_MD_CTX_cleanup__imp_EVP_MD_CTX_clear_flags__imp_EVP_MD_CTX_copy__imp_EVP_MD_CTX_copy_ex__imp_EVP_MD_CTX_create__imp_EVP_MD_CTX_destroy__imp_EVP_MD_CTX_init__imp_EVP_MD_CTX_md__imp_EVP_MD_CTX_set_flags__imp_EVP_MD_CTX_test_flags__imp_EVP_MD_block_size__imp_EVP_MD_do_all__imp_EVP_MD_do_all_sorted__imp_EVP_MD_flags__imp_EVP_MD_pkey_type__imp_EVP_MD_size__imp_EVP_MD_type__imp_EVP_OpenFinal__imp_EVP_OpenInit__imp_EVP_PBE_CipherInit__imp_EVP_PBE_alg_add__imp_EVP_PBE_alg_add_type__imp_EVP_PBE_cleanup__imp_EVP_PBE_find__imp_EVP_PKCS82PKEY__imp_EVP_PKEY2PKCS8__imp_EVP_PKEY2PKCS8_broken__imp_EVP_PKEY_CTX_ctrl__imp_EVP_PKEY_CTX_ctrl_str__imp_EVP_PKEY_CTX_dup__imp_EVP_PKEY_CTX_free__imp_EVP_PKEY_CTX_get0_peerkey__imp_EVP_PKEY_CTX_get0_pkey__imp_EVP_PKEY_CTX_get_app_data__imp_EVP_PKEY_CTX_get_cb__imp_EVP_PKEY_CTX_get_data__imp_EVP_PKEY_CTX_get_keygen_info__imp_EVP_PKEY_CTX_get_operation__imp_EVP_PKEY_CTX_new__imp_EVP_PKEY_CTX_new_id__imp_EVP_PKEY_CTX_set0_keygen_info__imp_EVP_PKEY_CTX_set_app_data__imp_EVP_PKEY_CTX_set_cb__imp_EVP_PKEY_CTX_set_data__imp_EVP_PKEY_add1_attr__imp_EVP_PKEY_add1_attr_by_NID__imp_EVP_PKEY_add1_attr_by_OBJ__imp_EVP_PKEY_add1_attr_by_txt__imp_EVP_PKEY_asn1_add0__imp_EVP_PKEY_asn1_add_alias__imp_EVP_PKEY_asn1_copy__imp_EVP_PKEY_asn1_find__imp_EVP_PKEY_asn1_find_str__imp_EVP_PKEY_asn1_free__imp_EVP_PKEY_asn1_get0__imp_EVP_PKEY_asn1_get0_info__imp_EVP_PKEY_asn1_get_count__imp_EVP_PKEY_asn1_new__imp_EVP_PKEY_asn1_set_ctrl__imp_EVP_PKEY_asn1_set_free__imp_EVP_PKEY_asn1_set_item__imp_EVP_PKEY_asn1_set_param__imp_EVP_PKEY_asn1_set_private__imp_EVP_PKEY_asn1_set_public__imp_EVP_PKEY_assign__imp_EVP_PKEY_base_id__imp_EVP_PKEY_bits__imp_EVP_PKEY_cmp__imp_EVP_PKEY_cmp_parameters__imp_EVP_PKEY_copy_parameters__imp_EVP_PKEY_decrypt__imp_EVP_PKEY_decrypt_init__imp_EVP_PKEY_decrypt_old__imp_EVP_PKEY_delete_attr__imp_EVP_PKEY_derive__imp_EVP_PKEY_derive_init__imp_EVP_PKEY_derive_set_peer__imp_EVP_PKEY_encrypt__imp_EVP_PKEY_encrypt_init__imp_EVP_PKEY_encrypt_old__imp_EVP_PKEY_free__imp_EVP_PKEY_get0__imp_EVP_PKEY_get0_asn1__imp_EVP_PKEY_get1_DH__imp_EVP_PKEY_get1_DSA__imp_EVP_PKEY_get1_EC_KEY__imp_EVP_PKEY_get1_RSA__imp_EVP_PKEY_get_attr__imp_EVP_PKEY_get_attr_by_NID__imp_EVP_PKEY_get_attr_by_OBJ__imp_EVP_PKEY_get_attr_count__imp_EVP_PKEY_get_default_digest_nid__imp_EVP_PKEY_id__imp_EVP_PKEY_keygen__imp_EVP_PKEY_keygen_init__imp_EVP_PKEY_meth_add0__imp_EVP_PKEY_meth_copy__imp_EVP_PKEY_meth_find__imp_EVP_PKEY_meth_free__imp_EVP_PKEY_meth_get0_info__imp_EVP_PKEY_meth_new__imp_EVP_PKEY_meth_set_cleanup__imp_EVP_PKEY_meth_set_copy__imp_EVP_PKEY_meth_set_ctrl__imp_EVP_PKEY_meth_set_decrypt__imp_EVP_PKEY_meth_set_derive__imp_EVP_PKEY_meth_set_encrypt__imp_EVP_PKEY_meth_set_init__imp_EVP_PKEY_meth_set_keygen__imp_EVP_PKEY_meth_set_paramgen__imp_EVP_PKEY_meth_set_sign__imp_EVP_PKEY_meth_set_signctx__imp_EVP_PKEY_meth_set_verify__imp_EVP_PKEY_meth_set_verify_recover__imp_EVP_PKEY_meth_set_verifyctx__imp_EVP_PKEY_missing_parameters__imp_EVP_PKEY_new__imp_EVP_PKEY_new_mac_key__imp_EVP_PKEY_paramgen__imp_EVP_PKEY_paramgen_init__imp_EVP_PKEY_print_params__imp_EVP_PKEY_print_private__imp_EVP_PKEY_print_public__imp_EVP_PKEY_save_parameters__imp_EVP_PKEY_set1_DH__imp_EVP_PKEY_set1_DSA__imp_EVP_PKEY_set1_EC_KEY__imp_EVP_PKEY_set1_RSA__imp_EVP_PKEY_set_type__imp_EVP_PKEY_set_type_str__imp_EVP_PKEY_sign__imp_EVP_PKEY_sign_init__imp_EVP_PKEY_size__imp_EVP_PKEY_type__imp_EVP_PKEY_verify__imp_EVP_PKEY_verify_init__imp_EVP_PKEY_verify_recover__imp_EVP_PKEY_verify_recover_init__imp_EVP_SealFinal__imp_EVP_SealInit__imp_EVP_SignFinal__imp_EVP_VerifyFinal__imp_EVP_add_alg_module__imp_EVP_add_cipher__imp_EVP_add_digest__imp_EVP_aes_128_cbc__imp_EVP_aes_128_cbc_hmac_sha1__imp_EVP_aes_128_cbc_hmac_sha256__imp_EVP_aes_128_ccm__imp_EVP_aes_128_cfb1__imp_EVP_aes_128_cfb128__imp_EVP_aes_128_cfb8__imp_EVP_aes_128_ctr__imp_EVP_aes_128_ecb__imp_EVP_aes_128_gcm__imp_EVP_aes_128_ofb__imp_EVP_aes_128_wrap__imp_EVP_aes_128_xts__imp_EVP_aes_192_cbc__imp_EVP_aes_192_ccm__imp_EVP_aes_192_cfb1__imp_EVP_aes_192_cfb128__imp_EVP_aes_192_cfb8__imp_EVP_aes_192_ctr__imp_EVP_aes_192_ecb__imp_EVP_aes_192_gcm__imp_EVP_aes_192_ofb__imp_EVP_aes_192_wrap__imp_EVP_aes_256_cbc__imp_EVP_aes_256_cbc_hmac_sha1__imp_EVP_aes_256_cbc_hmac_sha256__imp_EVP_aes_256_ccm__imp_EVP_aes_256_cfb1__imp_EVP_aes_256_cfb128__imp_EVP_aes_256_cfb8__imp_EVP_aes_256_ctr__imp_EVP_aes_256_ecb__imp_EVP_aes_256_gcm__imp_EVP_aes_256_ofb__imp_EVP_aes_256_wrap__imp_EVP_aes_256_xts__imp_EVP_bf_cbc__imp_EVP_bf_cfb64__imp_EVP_bf_ecb__imp_EVP_bf_ofb__imp_EVP_camellia_128_cbc__imp_EVP_camellia_128_cfb1__imp_EVP_camellia_128_cfb128__imp_EVP_camellia_128_cfb8__imp_EVP_camellia_128_ecb__imp_EVP_camellia_128_ofb__imp_EVP_camellia_192_cbc__imp_EVP_camellia_192_cfb1__imp_EVP_camellia_192_cfb128__imp_EVP_camellia_192_cfb8__imp_EVP_camellia_192_ecb__imp_EVP_camellia_192_ofb__imp_EVP_camellia_256_cbc__imp_EVP_camellia_256_cfb1__imp_EVP_camellia_256_cfb128__imp_EVP_camellia_256_cfb8__imp_EVP_camellia_256_ecb__imp_EVP_camellia_256_ofb__imp_EVP_cast5_cbc__imp_EVP_cast5_cfb64__imp_EVP_cast5_ecb__imp_EVP_cast5_ofb__imp_EVP_cleanup__imp_EVP_des_cbc__imp_EVP_des_cfb1__imp_EVP_des_cfb64__imp_EVP_des_cfb8__imp_EVP_des_ecb__imp_EVP_des_ede__imp_EVP_des_ede3__imp_EVP_des_ede3_cbc__imp_EVP_des_ede3_cfb1__imp_EVP_des_ede3_cfb64__imp_EVP_des_ede3_cfb8__imp_EVP_des_ede3_ecb__imp_EVP_des_ede3_ofb__imp_EVP_des_ede3_wrap__imp_EVP_des_ede_cbc__imp_EVP_des_ede_cfb64__imp_EVP_des_ede_ecb__imp_EVP_des_ede_ofb__imp_EVP_des_ofb__imp_EVP_desx_cbc__imp_EVP_dss__imp_EVP_dss1__imp_EVP_ecdsa__imp_EVP_enc_null__imp_EVP_get_cipherbyname__imp_EVP_get_digestbyname__imp_EVP_get_pw_prompt__imp_EVP_idea_cbc__imp_EVP_idea_cfb64__imp_EVP_idea_ecb__imp_EVP_idea_ofb__imp_EVP_md4__imp_EVP_md5__imp_EVP_md_null__imp_EVP_mdc2__imp_EVP_rc2_40_cbc__imp_EVP_rc2_64_cbc__imp_EVP_rc2_cbc__imp_EVP_rc2_cfb64__imp_EVP_rc2_ecb__imp_EVP_rc2_ofb__imp_EVP_rc4__imp_EVP_rc4_40__imp_EVP_rc4_hmac_md5__imp_EVP_read_pw_string__imp_EVP_read_pw_string_min__imp_EVP_ripemd160__imp_EVP_seed_cbc__imp_EVP_seed_cfb128__imp_EVP_seed_ecb__imp_EVP_seed_ofb__imp_EVP_set_pw_prompt__imp_EVP_sha__imp_EVP_sha1__imp_EVP_sha224__imp_EVP_sha256__imp_EVP_sha384__imp_EVP_sha512__imp_EVP_whirlpool__imp_EXTENDED_KEY_USAGE_free__imp_EXTENDED_KEY_USAGE_it__imp_EXTENDED_KEY_USAGE_new__imp_FIPS_mode__imp_FIPS_mode_set__imp_GENERAL_NAMES_free__imp_GENERAL_NAMES_it__imp_GENERAL_NAMES_new__imp_GENERAL_NAME_cmp__imp_GENERAL_NAME_dup__imp_GENERAL_NAME_free__imp_GENERAL_NAME_get0_otherName__imp_GENERAL_NAME_get0_value__imp_GENERAL_NAME_it__imp_GENERAL_NAME_new__imp_GENERAL_NAME_print__imp_GENERAL_NAME_set0_othername__imp_GENERAL_NAME_set0_value__imp_GENERAL_SUBTREE_free__imp_GENERAL_SUBTREE_it__imp_GENERAL_SUBTREE_new__imp_HMAC__imp_HMAC_CTX_cleanup__imp_HMAC_CTX_copy__imp_HMAC_CTX_init__imp_HMAC_CTX_set_flags__imp_HMAC_Final__imp_HMAC_Init__imp_HMAC_Init_ex__imp_HMAC_Update__imp_ISSUING_DIST_POINT_free__imp_ISSUING_DIST_POINT_it__imp_ISSUING_DIST_POINT_new__imp_KRB5_APREQBODY_free__imp_KRB5_APREQBODY_it__imp_KRB5_APREQBODY_new__imp_KRB5_APREQ_free__imp_KRB5_APREQ_it__imp_KRB5_APREQ_new__imp_KRB5_AUTHDATA_free__imp_KRB5_AUTHDATA_it__imp_KRB5_AUTHDATA_new__imp_KRB5_AUTHENTBODY_free__imp_KRB5_AUTHENTBODY_it__imp_KRB5_AUTHENTBODY_new__imp_KRB5_AUTHENT_free__imp_KRB5_AUTHENT_it__imp_KRB5_AUTHENT_new__imp_KRB5_CHECKSUM_free__imp_KRB5_CHECKSUM_it__imp_KRB5_CHECKSUM_new__imp_KRB5_ENCDATA_free__imp_KRB5_ENCDATA_it__imp_KRB5_ENCDATA_new__imp_KRB5_ENCKEY_free__imp_KRB5_ENCKEY_it__imp_KRB5_ENCKEY_new__imp_KRB5_PRINCNAME_free__imp_KRB5_PRINCNAME_it__imp_KRB5_PRINCNAME_new__imp_KRB5_TICKET_free__imp_KRB5_TICKET_it__imp_KRB5_TICKET_new__imp_KRB5_TKTBODY_free__imp_KRB5_TKTBODY_it__imp_KRB5_TKTBODY_new__imp_LONG_it__imp_MD4__imp_MD4_Final__imp_MD4_Init__imp_MD4_Transform__imp_MD4_Update__imp_MD5__imp_MD5_Final__imp_MD5_Init__imp_MD5_Transform__imp_MD5_Update__imp_MDC2__imp_MDC2_Final__imp_MDC2_Init__imp_MDC2_Update__imp_NAME_CONSTRAINTS_check__imp_NAME_CONSTRAINTS_free__imp_NAME_CONSTRAINTS_it__imp_NAME_CONSTRAINTS_new__imp_NCONF_WIN32__imp_NCONF_default__imp_NCONF_dump_bio__imp_NCONF_dump_fp__imp_NCONF_free__imp_NCONF_free_data__imp_NCONF_get_number_e__imp_NCONF_get_section__imp_NCONF_get_string__imp_NCONF_load__imp_NCONF_load_bio__imp_NCONF_load_fp__imp_NCONF_new__imp_NETSCAPE_CERT_SEQUENCE_free__imp_NETSCAPE_CERT_SEQUENCE_it__imp_NETSCAPE_CERT_SEQUENCE_new__imp_NETSCAPE_SPKAC_free__imp_NETSCAPE_SPKAC_it__imp_NETSCAPE_SPKAC_new__imp_NETSCAPE_SPKI_b64_decode__imp_NETSCAPE_SPKI_b64_encode__imp_NETSCAPE_SPKI_free__imp_NETSCAPE_SPKI_get_pubkey__imp_NETSCAPE_SPKI_it__imp_NETSCAPE_SPKI_new__imp_NETSCAPE_SPKI_print__imp_NETSCAPE_SPKI_set_pubkey__imp_NETSCAPE_SPKI_sign__imp_NETSCAPE_SPKI_verify__imp_NETSCAPE_X509_free__imp_NETSCAPE_X509_it__imp_NETSCAPE_X509_new__imp_NOTICEREF_free__imp_NOTICEREF_it__imp_NOTICEREF_new__imp_OBJ_NAME_add__imp_OBJ_NAME_cleanup__imp_OBJ_NAME_do_all__imp_OBJ_NAME_do_all_sorted__imp_OBJ_NAME_get__imp_OBJ_NAME_init__imp_OBJ_NAME_new_index__imp_OBJ_NAME_remove__imp_OBJ_add_object__imp_OBJ_add_sigid__imp_OBJ_bsearch___imp_OBJ_bsearch_ex___imp_OBJ_cleanup__imp_OBJ_cmp__imp_OBJ_create__imp_OBJ_create_objects__imp_OBJ_dup__imp_OBJ_find_sigid_algs__imp_OBJ_find_sigid_by_algs__imp_OBJ_ln2nid__imp_OBJ_new_nid__imp_OBJ_nid2ln__imp_OBJ_nid2obj__imp_OBJ_nid2sn__imp_OBJ_obj2nid__imp_OBJ_obj2txt__imp_OBJ_sigid_free__imp_OBJ_sn2nid__imp_OBJ_txt2nid__imp_OBJ_txt2obj__imp_OCSP_BASICRESP_add1_ext_i2d__imp_OCSP_BASICRESP_add_ext__imp_OCSP_BASICRESP_delete_ext__imp_OCSP_BASICRESP_free__imp_OCSP_BASICRESP_get1_ext_d2i__imp_OCSP_BASICRESP_get_ext__imp_OCSP_BASICRESP_get_ext_by_NID__imp_OCSP_BASICRESP_get_ext_by_OBJ__imp_OCSP_BASICRESP_get_ext_by_critical__imp_OCSP_BASICRESP_get_ext_count__imp_OCSP_BASICRESP_it__imp_OCSP_BASICRESP_new__imp_OCSP_CERTID_dup__imp_OCSP_CERTID_free__imp_OCSP_CERTID_it__imp_OCSP_CERTID_new__imp_OCSP_CERTSTATUS_free__imp_OCSP_CERTSTATUS_it__imp_OCSP_CERTSTATUS_new__imp_OCSP_CRLID_free__imp_OCSP_CRLID_it__imp_OCSP_CRLID_new__imp_OCSP_ONEREQ_add1_ext_i2d__imp_OCSP_ONEREQ_add_ext__imp_OCSP_ONEREQ_delete_ext__imp_OCSP_ONEREQ_free__imp_OCSP_ONEREQ_get1_ext_d2i__imp_OCSP_ONEREQ_get_ext__imp_OCSP_ONEREQ_get_ext_by_NID__imp_OCSP_ONEREQ_get_ext_by_OBJ__imp_OCSP_ONEREQ_get_ext_by_critical__imp_OCSP_ONEREQ_get_ext_count__imp_OCSP_ONEREQ_it__imp_OCSP_ONEREQ_new__imp_OCSP_REQINFO_free__imp_OCSP_REQINFO_it__imp_OCSP_REQINFO_new__imp_OCSP_REQUEST_add1_ext_i2d__imp_OCSP_REQUEST_add_ext__imp_OCSP_REQUEST_delete_ext__imp_OCSP_REQUEST_free__imp_OCSP_REQUEST_get1_ext_d2i__imp_OCSP_REQUEST_get_ext__imp_OCSP_REQUEST_get_ext_by_NID__imp_OCSP_REQUEST_get_ext_by_OBJ__imp_OCSP_REQUEST_get_ext_by_critical__imp_OCSP_REQUEST_get_ext_count__imp_OCSP_REQUEST_it__imp_OCSP_REQUEST_new__imp_OCSP_REQUEST_print__imp_OCSP_REQ_CTX_add1_header__imp_OCSP_REQ_CTX_free__imp_OCSP_REQ_CTX_get0_mem_bio__imp_OCSP_REQ_CTX_http__imp_OCSP_REQ_CTX_i2d__imp_OCSP_REQ_CTX_nbio__imp_OCSP_REQ_CTX_nbio_d2i__imp_OCSP_REQ_CTX_new__imp_OCSP_REQ_CTX_set1_req__imp_OCSP_RESPBYTES_free__imp_OCSP_RESPBYTES_it__imp_OCSP_RESPBYTES_new__imp_OCSP_RESPDATA_free__imp_OCSP_RESPDATA_it__imp_OCSP_RESPDATA_new__imp_OCSP_RESPID_free__imp_OCSP_RESPID_it__imp_OCSP_RESPID_new__imp_OCSP_RESPONSE_free__imp_OCSP_RESPONSE_it__imp_OCSP_RESPONSE_new__imp_OCSP_RESPONSE_print__imp_OCSP_REVOKEDINFO_free__imp_OCSP_REVOKEDINFO_it__imp_OCSP_REVOKEDINFO_new__imp_OCSP_SERVICELOC_free__imp_OCSP_SERVICELOC_it__imp_OCSP_SERVICELOC_new__imp_OCSP_SIGNATURE_free__imp_OCSP_SIGNATURE_it__imp_OCSP_SIGNATURE_new__imp_OCSP_SINGLERESP_add1_ext_i2d__imp_OCSP_SINGLERESP_add_ext__imp_OCSP_SINGLERESP_delete_ext__imp_OCSP_SINGLERESP_free__imp_OCSP_SINGLERESP_get1_ext_d2i__imp_OCSP_SINGLERESP_get_ext__imp_OCSP_SINGLERESP_get_ext_by_NID__imp_OCSP_SINGLERESP_get_ext_by_OBJ__imp_OCSP_SINGLERESP_get_ext_by_critical__imp_OCSP_SINGLERESP_get_ext_count__imp_OCSP_SINGLERESP_it__imp_OCSP_SINGLERESP_new__imp_OCSP_accept_responses_new__imp_OCSP_archive_cutoff_new__imp_OCSP_basic_add1_cert__imp_OCSP_basic_add1_nonce__imp_OCSP_basic_add1_status__imp_OCSP_basic_sign__imp_OCSP_basic_verify__imp_OCSP_cert_id_new__imp_OCSP_cert_status_str__imp_OCSP_cert_to_id__imp_OCSP_check_nonce__imp_OCSP_check_validity__imp_OCSP_copy_nonce__imp_OCSP_crlID_new__imp_OCSP_crl_reason_str__imp_OCSP_id_cmp__imp_OCSP_id_get0_info__imp_OCSP_id_issuer_cmp__imp_OCSP_onereq_get0_id__imp_OCSP_parse_url__imp_OCSP_request_add0_id__imp_OCSP_request_add1_cert__imp_OCSP_request_add1_nonce__imp_OCSP_request_is_signed__imp_OCSP_request_onereq_count__imp_OCSP_request_onereq_get0__imp_OCSP_request_set1_name__imp_OCSP_request_sign__imp_OCSP_request_verify__imp_OCSP_resp_count__imp_OCSP_resp_find__imp_OCSP_resp_find_status__imp_OCSP_resp_get0__imp_OCSP_response_create__imp_OCSP_response_get1_basic__imp_OCSP_response_status__imp_OCSP_response_status_str__imp_OCSP_sendreq_bio__imp_OCSP_sendreq_nbio__imp_OCSP_sendreq_new__imp_OCSP_set_max_response_length__imp_OCSP_single_get0_status__imp_OCSP_url_svcloc_new__imp_OPENSSL_DIR_end__imp_OPENSSL_DIR_read__imp_OPENSSL_add_all_algorithms_conf__imp_OPENSSL_add_all_algorithms_noconf__imp_OPENSSL_asc2uni__imp_OPENSSL_cleanse__imp_OPENSSL_config__imp_OPENSSL_cpuid_setup__imp_OPENSSL_gmtime__imp_OPENSSL_gmtime_adj__imp_OPENSSL_gmtime_diff__imp_OPENSSL_ia32cap_loc__imp_OPENSSL_init__imp_OPENSSL_isservice__imp_OPENSSL_issetugid__imp_OPENSSL_load_builtin_modules__imp_OPENSSL_memcmp__imp_OPENSSL_no_config__imp_OPENSSL_showfatal__imp_OPENSSL_stderr__imp_OPENSSL_strcasecmp__imp_OPENSSL_strncasecmp__imp_OPENSSL_uni2asc__imp_OSSL_DES_version__imp_OSSL_libdes_version__imp_OTHERNAME_cmp__imp_OTHERNAME_free__imp_OTHERNAME_it__imp_OTHERNAME_new__imp_OpenSSLDie__imp_OpenSSL_add_all_ciphers__imp_OpenSSL_add_all_digests__imp_PBE2PARAM_free__imp_PBE2PARAM_it__imp_PBE2PARAM_new__imp_PBEPARAM_free__imp_PBEPARAM_it__imp_PBEPARAM_new__imp_PBKDF2PARAM_free__imp_PBKDF2PARAM_it__imp_PBKDF2PARAM_new__imp_PEM_ASN1_read__imp_PEM_ASN1_read_bio__imp_PEM_ASN1_write__imp_PEM_ASN1_write_bio__imp_PEM_SealFinal__imp_PEM_SealInit__imp_PEM_SealUpdate__imp_PEM_SignFinal__imp_PEM_SignInit__imp_PEM_SignUpdate__imp_PEM_X509_INFO_read__imp_PEM_X509_INFO_read_bio__imp_PEM_X509_INFO_write_bio__imp_PEM_bytes_read_bio__imp_PEM_def_callback__imp_PEM_dek_info__imp_PEM_do_header__imp_PEM_get_EVP_CIPHER_INFO__imp_PEM_proc_type__imp_PEM_read__imp_PEM_read_CMS__imp_PEM_read_DHparams__imp_PEM_read_DSAPrivateKey__imp_PEM_read_DSA_PUBKEY__imp_PEM_read_DSAparams__imp_PEM_read_ECPKParameters__imp_PEM_read_ECPrivateKey__imp_PEM_read_EC_PUBKEY__imp_PEM_read_NETSCAPE_CERT_SEQUENCE__imp_PEM_read_PKCS7__imp_PEM_read_PKCS8__imp_PEM_read_PKCS8_PRIV_KEY_INFO__imp_PEM_read_PUBKEY__imp_PEM_read_PrivateKey__imp_PEM_read_RSAPrivateKey__imp_PEM_read_RSAPublicKey__imp_PEM_read_RSA_PUBKEY__imp_PEM_read_X509__imp_PEM_read_X509_AUX__imp_PEM_read_X509_CERT_PAIR__imp_PEM_read_X509_CRL__imp_PEM_read_X509_REQ__imp_PEM_read_bio__imp_PEM_read_bio_CMS__imp_PEM_read_bio_DHparams__imp_PEM_read_bio_DSAPrivateKey__imp_PEM_read_bio_DSA_PUBKEY__imp_PEM_read_bio_DSAparams__imp_PEM_read_bio_ECPKParameters__imp_PEM_read_bio_ECPrivateKey__imp_PEM_read_bio_EC_PUBKEY__imp_PEM_read_bio_NETSCAPE_CERT_SEQUENCE__imp_PEM_read_bio_PKCS7__imp_PEM_read_bio_PKCS8__imp_PEM_read_bio_PKCS8_PRIV_KEY_INFO__imp_PEM_read_bio_PUBKEY__imp_PEM_read_bio_Parameters__imp_PEM_read_bio_PrivateKey__imp_PEM_read_bio_RSAPrivateKey__imp_PEM_read_bio_RSAPublicKey__imp_PEM_read_bio_RSA_PUBKEY__imp_PEM_read_bio_X509__imp_PEM_read_bio_X509_AUX__imp_PEM_read_bio_X509_CERT_PAIR__imp_PEM_read_bio_X509_CRL__imp_PEM_read_bio_X509_REQ__imp_PEM_write__imp_PEM_write_CMS__imp_PEM_write_DHparams__imp_PEM_write_DHxparams__imp_PEM_write_DSAPrivateKey__imp_PEM_write_DSA_PUBKEY__imp_PEM_write_DSAparams__imp_PEM_write_ECPKParameters__imp_PEM_write_ECPrivateKey__imp_PEM_write_EC_PUBKEY__imp_PEM_write_NETSCAPE_CERT_SEQUENCE__imp_PEM_write_PKCS7__imp_PEM_write_PKCS8__imp_PEM_write_PKCS8PrivateKey__imp_PEM_write_PKCS8PrivateKey_nid__imp_PEM_write_PKCS8_PRIV_KEY_INFO__imp_PEM_write_PUBKEY__imp_PEM_write_PrivateKey__imp_PEM_write_RSAPrivateKey__imp_PEM_write_RSAPublicKey__imp_PEM_write_RSA_PUBKEY__imp_PEM_write_X509__imp_PEM_write_X509_AUX__imp_PEM_write_X509_CERT_PAIR__imp_PEM_write_X509_CRL__imp_PEM_write_X509_REQ__imp_PEM_write_X509_REQ_NEW__imp_PEM_write_bio__imp_PEM_write_bio_ASN1_stream__imp_PEM_write_bio_CMS__imp_PEM_write_bio_CMS_stream__imp_PEM_write_bio_DHparams__imp_PEM_write_bio_DHxparams__imp_PEM_write_bio_DSAPrivateKey__imp_PEM_write_bio_DSA_PUBKEY__imp_PEM_write_bio_DSAparams__imp_PEM_write_bio_ECPKParameters__imp_PEM_write_bio_ECPrivateKey__imp_PEM_write_bio_EC_PUBKEY__imp_PEM_write_bio_NETSCAPE_CERT_SEQUENCE__imp_PEM_write_bio_PKCS7__imp_PEM_write_bio_PKCS7_stream__imp_PEM_write_bio_PKCS8__imp_PEM_write_bio_PKCS8PrivateKey__imp_PEM_write_bio_PKCS8PrivateKey_nid__imp_PEM_write_bio_PKCS8_PRIV_KEY_INFO__imp_PEM_write_bio_PUBKEY__imp_PEM_write_bio_Parameters__imp_PEM_write_bio_PrivateKey__imp_PEM_write_bio_RSAPrivateKey__imp_PEM_write_bio_RSAPublicKey__imp_PEM_write_bio_RSA_PUBKEY__imp_PEM_write_bio_X509__imp_PEM_write_bio_X509_AUX__imp_PEM_write_bio_X509_CERT_PAIR__imp_PEM_write_bio_X509_CRL__imp_PEM_write_bio_X509_REQ__imp_PEM_write_bio_X509_REQ_NEW__imp_PKCS12_AUTHSAFES_it__imp_PKCS12_BAGS_free__imp_PKCS12_BAGS_it__imp_PKCS12_BAGS_new__imp_PKCS12_MAC_DATA_free__imp_PKCS12_MAC_DATA_it__imp_PKCS12_MAC_DATA_new__imp_PKCS12_MAKE_KEYBAG__imp_PKCS12_MAKE_SHKEYBAG__imp_PKCS12_PBE_add__imp_PKCS12_PBE_keyivgen__imp_PKCS12_SAFEBAGS_it__imp_PKCS12_SAFEBAG_free__imp_PKCS12_SAFEBAG_it__imp_PKCS12_SAFEBAG_new__imp_PKCS12_add_CSPName_asc__imp_PKCS12_add_cert__imp_PKCS12_add_friendlyname_asc__imp_PKCS12_add_friendlyname_uni__imp_PKCS12_add_key__imp_PKCS12_add_localkeyid__imp_PKCS12_add_safe__imp_PKCS12_add_safes__imp_PKCS12_certbag2x509__imp_PKCS12_certbag2x509crl__imp_PKCS12_create__imp_PKCS12_decrypt_skey__imp_PKCS12_free__imp_PKCS12_gen_mac__imp_PKCS12_get_attr_gen__imp_PKCS12_get_friendlyname__imp_PKCS12_init__imp_PKCS12_it__imp_PKCS12_item_decrypt_d2i__imp_PKCS12_item_i2d_encrypt__imp_PKCS12_item_pack_safebag__imp_PKCS12_key_gen_asc__imp_PKCS12_key_gen_uni__imp_PKCS12_new__imp_PKCS12_newpass__imp_PKCS12_pack_authsafes__imp_PKCS12_pack_p7data__imp_PKCS12_pack_p7encdata__imp_PKCS12_parse__imp_PKCS12_pbe_crypt__imp_PKCS12_set_mac__imp_PKCS12_setup_mac__imp_PKCS12_unpack_authsafes__imp_PKCS12_unpack_p7data__imp_PKCS12_unpack_p7encdata__imp_PKCS12_verify_mac__imp_PKCS12_x5092certbag__imp_PKCS12_x509crl2certbag__imp_PKCS1_MGF1__imp_PKCS5_PBE_add__imp_PKCS5_PBE_keyivgen__imp_PKCS5_PBKDF2_HMAC__imp_PKCS5_PBKDF2_HMAC_SHA1__imp_PKCS5_pbe2_set__imp_PKCS5_pbe2_set_iv__imp_PKCS5_pbe_set__imp_PKCS5_pbe_set0_algor__imp_PKCS5_pbkdf2_set__imp_PKCS5_v2_PBE_keyivgen__imp_PKCS7_ATTR_SIGN_it__imp_PKCS7_ATTR_VERIFY_it__imp_PKCS7_DIGEST_free__imp_PKCS7_DIGEST_it__imp_PKCS7_DIGEST_new__imp_PKCS7_ENCRYPT_free__imp_PKCS7_ENCRYPT_it__imp_PKCS7_ENCRYPT_new__imp_PKCS7_ENC_CONTENT_free__imp_PKCS7_ENC_CONTENT_it__imp_PKCS7_ENC_CONTENT_new__imp_PKCS7_ENVELOPE_free__imp_PKCS7_ENVELOPE_it__imp_PKCS7_ENVELOPE_new__imp_PKCS7_ISSUER_AND_SERIAL_digest__imp_PKCS7_ISSUER_AND_SERIAL_free__imp_PKCS7_ISSUER_AND_SERIAL_it__imp_PKCS7_ISSUER_AND_SERIAL_new__imp_PKCS7_RECIP_INFO_free__imp_PKCS7_RECIP_INFO_get0_alg__imp_PKCS7_RECIP_INFO_it__imp_PKCS7_RECIP_INFO_new__imp_PKCS7_RECIP_INFO_set__imp_PKCS7_SIGNED_free__imp_PKCS7_SIGNED_it__imp_PKCS7_SIGNED_new__imp_PKCS7_SIGNER_INFO_free__imp_PKCS7_SIGNER_INFO_get0_algs__imp_PKCS7_SIGNER_INFO_it__imp_PKCS7_SIGNER_INFO_new__imp_PKCS7_SIGNER_INFO_set__imp_PKCS7_SIGNER_INFO_sign__imp_PKCS7_SIGN_ENVELOPE_free__imp_PKCS7_SIGN_ENVELOPE_it__imp_PKCS7_SIGN_ENVELOPE_new__imp_PKCS7_add0_attrib_signing_time__imp_PKCS7_add1_attrib_digest__imp_PKCS7_add_attrib_content_type__imp_PKCS7_add_attrib_smimecap__imp_PKCS7_add_attribute__imp_PKCS7_add_certificate__imp_PKCS7_add_crl__imp_PKCS7_add_recipient__imp_PKCS7_add_recipient_info__imp_PKCS7_add_signature__imp_PKCS7_add_signed_attribute__imp_PKCS7_add_signer__imp_PKCS7_cert_from_signer_info__imp_PKCS7_content_new__imp_PKCS7_ctrl__imp_PKCS7_dataDecode__imp_PKCS7_dataFinal__imp_PKCS7_dataInit__imp_PKCS7_dataVerify__imp_PKCS7_decrypt__imp_PKCS7_digest_from_attributes__imp_PKCS7_dup__imp_PKCS7_encrypt__imp_PKCS7_final__imp_PKCS7_free__imp_PKCS7_get0_signers__imp_PKCS7_get_attribute__imp_PKCS7_get_issuer_and_serial__imp_PKCS7_get_signed_attribute__imp_PKCS7_get_signer_info__imp_PKCS7_get_smimecap__imp_PKCS7_it__imp_PKCS7_new__imp_PKCS7_print_ctx__imp_PKCS7_set0_type_other__imp_PKCS7_set_attributes__imp_PKCS7_set_cipher__imp_PKCS7_set_content__imp_PKCS7_set_digest__imp_PKCS7_set_signed_attributes__imp_PKCS7_set_type__imp_PKCS7_sign__imp_PKCS7_sign_add_signer__imp_PKCS7_signatureVerify__imp_PKCS7_simple_smimecap__imp_PKCS7_stream__imp_PKCS7_to_TS_TST_INFO__imp_PKCS7_verify__imp_PKCS8_PRIV_KEY_INFO_free__imp_PKCS8_PRIV_KEY_INFO_it__imp_PKCS8_PRIV_KEY_INFO_new__imp_PKCS8_add_keyusage__imp_PKCS8_decrypt__imp_PKCS8_encrypt__imp_PKCS8_pkey_get0__imp_PKCS8_pkey_set0__imp_PKCS8_set_broken__imp_PKEY_USAGE_PERIOD_free__imp_PKEY_USAGE_PERIOD_it__imp_PKEY_USAGE_PERIOD_new__imp_POLICYINFO_free__imp_POLICYINFO_it__imp_POLICYINFO_new__imp_POLICYQUALINFO_free__imp_POLICYQUALINFO_it__imp_POLICYQUALINFO_new__imp_POLICY_CONSTRAINTS_free__imp_POLICY_CONSTRAINTS_it__imp_POLICY_CONSTRAINTS_new__imp_POLICY_MAPPINGS_it__imp_POLICY_MAPPING_free__imp_POLICY_MAPPING_it__imp_POLICY_MAPPING_new__imp_PROXY_CERT_INFO_EXTENSION_free__imp_PROXY_CERT_INFO_EXTENSION_it__imp_PROXY_CERT_INFO_EXTENSION_new__imp_PROXY_POLICY_free__imp_PROXY_POLICY_it__imp_PROXY_POLICY_new__imp_RAND_SSLeay__imp_RAND_add__imp_RAND_bytes__imp_RAND_cleanup__imp_RAND_egd__imp_RAND_egd_bytes__imp_RAND_event__imp_RAND_file_name__imp_RAND_get_rand_method__imp_RAND_load_file__imp_RAND_poll__imp_RAND_pseudo_bytes__imp_RAND_query_egd_bytes__imp_RAND_screen__imp_RAND_seed__imp_RAND_set_rand_engine__imp_RAND_set_rand_method__imp_RAND_status__imp_RAND_write_file__imp_RC2_cbc_encrypt__imp_RC2_cfb64_encrypt__imp_RC2_decrypt__imp_RC2_ecb_encrypt__imp_RC2_encrypt__imp_RC2_ofb64_encrypt__imp_RC2_set_key__imp_RC4__imp_RC4_options__imp_RC4_set_key__imp_RIPEMD160__imp_RIPEMD160_Final__imp_RIPEMD160_Init__imp_RIPEMD160_Transform__imp_RIPEMD160_Update__imp_RSAPrivateKey_dup__imp_RSAPrivateKey_it__imp_RSAPublicKey_dup__imp_RSAPublicKey_it__imp_RSA_OAEP_PARAMS_free__imp_RSA_OAEP_PARAMS_it__imp_RSA_OAEP_PARAMS_new__imp_RSA_PKCS1_SSLeay__imp_RSA_PSS_PARAMS_free__imp_RSA_PSS_PARAMS_it__imp_RSA_PSS_PARAMS_new__imp_RSA_X931_hash_id__imp_RSA_blinding_off__imp_RSA_blinding_on__imp_RSA_check_key__imp_RSA_flags__imp_RSA_free__imp_RSA_generate_key__imp_RSA_generate_key_ex__imp_RSA_get_default_method__imp_RSA_get_ex_data__imp_RSA_get_ex_new_index__imp_RSA_get_method__imp_RSA_memory_lock__imp_RSA_new__imp_RSA_new_method__imp_RSA_null_method__imp_RSA_padding_add_PKCS1_OAEP__imp_RSA_padding_add_PKCS1_OAEP_mgf1__imp_RSA_padding_add_PKCS1_PSS__imp_RSA_padding_add_PKCS1_PSS_mgf1__imp_RSA_padding_add_PKCS1_type_1__imp_RSA_padding_add_PKCS1_type_2__imp_RSA_padding_add_SSLv23__imp_RSA_padding_add_X931__imp_RSA_padding_add_none__imp_RSA_padding_check_PKCS1_OAEP__imp_RSA_padding_check_PKCS1_OAEP_mgf1__imp_RSA_padding_check_PKCS1_type_1__imp_RSA_padding_check_PKCS1_type_2__imp_RSA_padding_check_SSLv23__imp_RSA_padding_check_X931__imp_RSA_padding_check_none__imp_RSA_print__imp_RSA_print_fp__imp_RSA_private_decrypt__imp_RSA_private_encrypt__imp_RSA_public_decrypt__imp_RSA_public_encrypt__imp_RSA_set_default_method__imp_RSA_set_ex_data__imp_RSA_set_method__imp_RSA_setup_blinding__imp_RSA_sign__imp_RSA_sign_ASN1_OCTET_STRING__imp_RSA_size__imp_RSA_up_ref__imp_RSA_verify__imp_RSA_verify_ASN1_OCTET_STRING__imp_RSA_verify_PKCS1_PSS__imp_RSA_verify_PKCS1_PSS_mgf1__imp_SEED_cbc_encrypt__imp_SEED_cfb128_encrypt__imp_SEED_decrypt__imp_SEED_ecb_encrypt__imp_SEED_encrypt__imp_SEED_ofb128_encrypt__imp_SEED_set_key__imp_SHA__imp_SHA1__imp_SHA1_Final__imp_SHA1_Init__imp_SHA1_Transform__imp_SHA1_Update__imp_SHA224__imp_SHA224_Final__imp_SHA224_Init__imp_SHA224_Update__imp_SHA256__imp_SHA256_Final__imp_SHA256_Init__imp_SHA256_Transform__imp_SHA256_Update__imp_SHA384__imp_SHA384_Final__imp_SHA384_Init__imp_SHA384_Update__imp_SHA512__imp_SHA512_Final__imp_SHA512_Init__imp_SHA512_Transform__imp_SHA512_Update__imp_SHA_Final__imp_SHA_Init__imp_SHA_Transform__imp_SHA_Update__imp_SMIME_crlf_copy__imp_SMIME_read_ASN1__imp_SMIME_read_CMS__imp_SMIME_read_PKCS7__imp_SMIME_text__imp_SMIME_write_ASN1__imp_SMIME_write_CMS__imp_SMIME_write_PKCS7__imp_SRP_Calc_A__imp_SRP_Calc_B__imp_SRP_Calc_client_key__imp_SRP_Calc_server_key__imp_SRP_Calc_u__imp_SRP_Calc_x__imp_SRP_VBASE_free__imp_SRP_VBASE_get1_by_user__imp_SRP_VBASE_get_by_user__imp_SRP_VBASE_init__imp_SRP_VBASE_new__imp_SRP_Verify_A_mod_N__imp_SRP_Verify_B_mod_N__imp_SRP_check_known_gN_param__imp_SRP_create_verifier__imp_SRP_create_verifier_BN__imp_SRP_get_default_gN__imp_SRP_user_pwd_free__imp_SSLeay__imp_SSLeay_version__imp_SXNETID_free__imp_SXNETID_it__imp_SXNETID_new__imp_SXNET_add_id_INTEGER__imp_SXNET_add_id_asc__imp_SXNET_add_id_ulong__imp_SXNET_free__imp_SXNET_get_id_INTEGER__imp_SXNET_get_id_asc__imp_SXNET_get_id_ulong__imp_SXNET_it__imp_SXNET_new__imp_TS_ACCURACY_dup__imp_TS_ACCURACY_free__imp_TS_ACCURACY_get_micros__imp_TS_ACCURACY_get_millis__imp_TS_ACCURACY_get_seconds__imp_TS_ACCURACY_new__imp_TS_ACCURACY_set_micros__imp_TS_ACCURACY_set_millis__imp_TS_ACCURACY_set_seconds__imp_TS_ASN1_INTEGER_print_bio__imp_TS_CONF_get_tsa_section__imp_TS_CONF_load_cert__imp_TS_CONF_load_certs__imp_TS_CONF_load_key__imp_TS_CONF_set_accuracy__imp_TS_CONF_set_certs__imp_TS_CONF_set_clock_precision_digits__imp_TS_CONF_set_crypto_device__imp_TS_CONF_set_def_policy__imp_TS_CONF_set_default_engine__imp_TS_CONF_set_digests__imp_TS_CONF_set_ess_cert_id_chain__imp_TS_CONF_set_ordering__imp_TS_CONF_set_policies__imp_TS_CONF_set_serial__imp_TS_CONF_set_signer_cert__imp_TS_CONF_set_signer_key__imp_TS_CONF_set_tsa_name__imp_TS_MSG_IMPRINT_dup__imp_TS_MSG_IMPRINT_free__imp_TS_MSG_IMPRINT_get_algo__imp_TS_MSG_IMPRINT_get_msg__imp_TS_MSG_IMPRINT_new__imp_TS_MSG_IMPRINT_print_bio__imp_TS_MSG_IMPRINT_set_algo__imp_TS_MSG_IMPRINT_set_msg__imp_TS_OBJ_print_bio__imp_TS_REQ_add_ext__imp_TS_REQ_delete_ext__imp_TS_REQ_dup__imp_TS_REQ_ext_free__imp_TS_REQ_free__imp_TS_REQ_get_cert_req__imp_TS_REQ_get_ext__imp_TS_REQ_get_ext_by_NID__imp_TS_REQ_get_ext_by_OBJ__imp_TS_REQ_get_ext_by_critical__imp_TS_REQ_get_ext_count__imp_TS_REQ_get_ext_d2i__imp_TS_REQ_get_exts__imp_TS_REQ_get_msg_imprint__imp_TS_REQ_get_nonce__imp_TS_REQ_get_policy_id__imp_TS_REQ_get_version__imp_TS_REQ_new__imp_TS_REQ_print_bio__imp_TS_REQ_set_cert_req__imp_TS_REQ_set_msg_imprint__imp_TS_REQ_set_nonce__imp_TS_REQ_set_policy_id__imp_TS_REQ_set_version__imp_TS_REQ_to_TS_VERIFY_CTX__imp_TS_RESP_CTX_add_failure_info__imp_TS_RESP_CTX_add_flags__imp_TS_RESP_CTX_add_md__imp_TS_RESP_CTX_add_policy__imp_TS_RESP_CTX_free__imp_TS_RESP_CTX_get_request__imp_TS_RESP_CTX_get_tst_info__imp_TS_RESP_CTX_new__imp_TS_RESP_CTX_set_accuracy__imp_TS_RESP_CTX_set_certs__imp_TS_RESP_CTX_set_clock_precision_digits__imp_TS_RESP_CTX_set_def_policy__imp_TS_RESP_CTX_set_extension_cb__imp_TS_RESP_CTX_set_serial_cb__imp_TS_RESP_CTX_set_signer_cert__imp_TS_RESP_CTX_set_signer_key__imp_TS_RESP_CTX_set_status_info__imp_TS_RESP_CTX_set_status_info_cond__imp_TS_RESP_CTX_set_time_cb__imp_TS_RESP_create_response__imp_TS_RESP_dup__imp_TS_RESP_free__imp_TS_RESP_get_status_info__imp_TS_RESP_get_token__imp_TS_RESP_get_tst_info__imp_TS_RESP_new__imp_TS_RESP_print_bio__imp_TS_RESP_set_status_info__imp_TS_RESP_set_tst_info__imp_TS_RESP_verify_response__imp_TS_RESP_verify_signature__imp_TS_RESP_verify_token__imp_TS_STATUS_INFO_dup__imp_TS_STATUS_INFO_free__imp_TS_STATUS_INFO_new__imp_TS_STATUS_INFO_print_bio__imp_TS_TST_INFO_add_ext__imp_TS_TST_INFO_delete_ext__imp_TS_TST_INFO_dup__imp_TS_TST_INFO_ext_free__imp_TS_TST_INFO_free__imp_TS_TST_INFO_get_accuracy__imp_TS_TST_INFO_get_ext__imp_TS_TST_INFO_get_ext_by_NID__imp_TS_TST_INFO_get_ext_by_OBJ__imp_TS_TST_INFO_get_ext_by_critical__imp_TS_TST_INFO_get_ext_count__imp_TS_TST_INFO_get_ext_d2i__imp_TS_TST_INFO_get_exts__imp_TS_TST_INFO_get_msg_imprint__imp_TS_TST_INFO_get_nonce__imp_TS_TST_INFO_get_ordering__imp_TS_TST_INFO_get_policy_id__imp_TS_TST_INFO_get_serial__imp_TS_TST_INFO_get_time__imp_TS_TST_INFO_get_tsa__imp_TS_TST_INFO_get_version__imp_TS_TST_INFO_new__imp_TS_TST_INFO_print_bio__imp_TS_TST_INFO_set_accuracy__imp_TS_TST_INFO_set_msg_imprint__imp_TS_TST_INFO_set_nonce__imp_TS_TST_INFO_set_ordering__imp_TS_TST_INFO_set_policy_id__imp_TS_TST_INFO_set_serial__imp_TS_TST_INFO_set_time__imp_TS_TST_INFO_set_tsa__imp_TS_TST_INFO_set_version__imp_TS_VERIFY_CTX_cleanup__imp_TS_VERIFY_CTX_free__imp_TS_VERIFY_CTX_init__imp_TS_VERIFY_CTX_new__imp_TS_X509_ALGOR_print_bio__imp_TS_ext_print_bio__imp_TXT_DB_create_index__imp_TXT_DB_free__imp_TXT_DB_get_by_index__imp_TXT_DB_insert__imp_TXT_DB_read__imp_TXT_DB_write__imp_UI_OpenSSL__imp_UI_UTIL_read_pw__imp_UI_UTIL_read_pw_string__imp_UI_add_error_string__imp_UI_add_info_string__imp_UI_add_input_boolean__imp_UI_add_input_string__imp_UI_add_user_data__imp_UI_add_verify_string__imp_UI_construct_prompt__imp_UI_create_method__imp_UI_ctrl__imp_UI_destroy_method__imp_UI_dup_error_string__imp_UI_dup_info_string__imp_UI_dup_input_boolean__imp_UI_dup_input_string__imp_UI_dup_verify_string__imp_UI_free__imp_UI_get0_action_string__imp_UI_get0_output_string__imp_UI_get0_result__imp_UI_get0_result_string__imp_UI_get0_test_string__imp_UI_get0_user_data__imp_UI_get_default_method__imp_UI_get_ex_data__imp_UI_get_ex_new_index__imp_UI_get_input_flags__imp_UI_get_method__imp_UI_get_result_maxsize__imp_UI_get_result_minsize__imp_UI_get_string_type__imp_UI_method_get_closer__imp_UI_method_get_flusher__imp_UI_method_get_opener__imp_UI_method_get_prompt_constructor__imp_UI_method_get_reader__imp_UI_method_get_writer__imp_UI_method_set_closer__imp_UI_method_set_flusher__imp_UI_method_set_opener__imp_UI_method_set_prompt_constructor__imp_UI_method_set_reader__imp_UI_method_set_writer__imp_UI_new__imp_UI_new_method__imp_UI_process__imp_UI_set_default_method__imp_UI_set_ex_data__imp_UI_set_method__imp_UI_set_result__imp_USERNOTICE_free__imp_USERNOTICE_it__imp_USERNOTICE_new__imp_UTF8_getc__imp_UTF8_putc__imp_WHIRLPOOL__imp_WHIRLPOOL_BitUpdate__imp_WHIRLPOOL_Final__imp_WHIRLPOOL_Init__imp_WHIRLPOOL_Update__imp_X509V3_EXT_CRL_add_conf__imp_X509V3_EXT_CRL_add_nconf__imp_X509V3_EXT_REQ_add_conf__imp_X509V3_EXT_REQ_add_nconf__imp_X509V3_EXT_add__imp_X509V3_EXT_add_alias__imp_X509V3_EXT_add_conf__imp_X509V3_EXT_add_list__imp_X509V3_EXT_add_nconf__imp_X509V3_EXT_add_nconf_sk__imp_X509V3_EXT_cleanup__imp_X509V3_EXT_conf__imp_X509V3_EXT_conf_nid__imp_X509V3_EXT_d2i__imp_X509V3_EXT_free__imp_X509V3_EXT_get__imp_X509V3_EXT_get_nid__imp_X509V3_EXT_i2d__imp_X509V3_EXT_nconf__imp_X509V3_EXT_nconf_nid__imp_X509V3_EXT_print__imp_X509V3_EXT_print_fp__imp_X509V3_EXT_val_prn__imp_X509V3_NAME_from_section__imp_X509V3_add1_i2d__imp_X509V3_add_standard_extensions__imp_X509V3_add_value__imp_X509V3_add_value_bool__imp_X509V3_add_value_bool_nf__imp_X509V3_add_value_int__imp_X509V3_add_value_uchar__imp_X509V3_conf_free__imp_X509V3_extensions_print__imp_X509V3_get_d2i__imp_X509V3_get_section__imp_X509V3_get_string__imp_X509V3_get_value_bool__imp_X509V3_get_value_int__imp_X509V3_parse_list__imp_X509V3_section_free__imp_X509V3_set_conf_lhash__imp_X509V3_set_ctx__imp_X509V3_set_nconf__imp_X509V3_string_free__imp_X509_ALGORS_it__imp_X509_ALGOR_cmp__imp_X509_ALGOR_dup__imp_X509_ALGOR_free__imp_X509_ALGOR_get0__imp_X509_ALGOR_it__imp_X509_ALGOR_new__imp_X509_ALGOR_set0__imp_X509_ALGOR_set_md__imp_X509_ATTRIBUTE_count__imp_X509_ATTRIBUTE_create__imp_X509_ATTRIBUTE_create_by_NID__imp_X509_ATTRIBUTE_create_by_OBJ__imp_X509_ATTRIBUTE_create_by_txt__imp_X509_ATTRIBUTE_dup__imp_X509_ATTRIBUTE_free__imp_X509_ATTRIBUTE_get0_data__imp_X509_ATTRIBUTE_get0_object__imp_X509_ATTRIBUTE_get0_type__imp_X509_ATTRIBUTE_it__imp_X509_ATTRIBUTE_new__imp_X509_ATTRIBUTE_set1_data__imp_X509_ATTRIBUTE_set1_object__imp_X509_CERT_AUX_free__imp_X509_CERT_AUX_it__imp_X509_CERT_AUX_new__imp_X509_CERT_AUX_print__imp_X509_CERT_PAIR_free__imp_X509_CERT_PAIR_it__imp_X509_CERT_PAIR_new__imp_X509_CINF_free__imp_X509_CINF_it__imp_X509_CINF_new__imp_X509_CRL_INFO_free__imp_X509_CRL_INFO_it__imp_X509_CRL_INFO_new__imp_X509_CRL_METHOD_free__imp_X509_CRL_METHOD_new__imp_X509_CRL_add0_revoked__imp_X509_CRL_add1_ext_i2d__imp_X509_CRL_add_ext__imp_X509_CRL_check_suiteb__imp_X509_CRL_cmp__imp_X509_CRL_delete_ext__imp_X509_CRL_diff__imp_X509_CRL_digest__imp_X509_CRL_dup__imp_X509_CRL_free__imp_X509_CRL_get0_by_cert__imp_X509_CRL_get0_by_serial__imp_X509_CRL_get_ext__imp_X509_CRL_get_ext_by_NID__imp_X509_CRL_get_ext_by_OBJ__imp_X509_CRL_get_ext_by_critical__imp_X509_CRL_get_ext_count__imp_X509_CRL_get_ext_d2i__imp_X509_CRL_get_meth_data__imp_X509_CRL_http_nbio__imp_X509_CRL_it__imp_X509_CRL_match__imp_X509_CRL_new__imp_X509_CRL_print__imp_X509_CRL_print_fp__imp_X509_CRL_set_default_method__imp_X509_CRL_set_issuer_name__imp_X509_CRL_set_lastUpdate__imp_X509_CRL_set_meth_data__imp_X509_CRL_set_nextUpdate__imp_X509_CRL_set_version__imp_X509_CRL_sign__imp_X509_CRL_sign_ctx__imp_X509_CRL_sort__imp_X509_CRL_verify__imp_X509_EXTENSIONS_it__imp_X509_EXTENSION_create_by_NID__imp_X509_EXTENSION_create_by_OBJ__imp_X509_EXTENSION_dup__imp_X509_EXTENSION_free__imp_X509_EXTENSION_get_critical__imp_X509_EXTENSION_get_data__imp_X509_EXTENSION_get_object__imp_X509_EXTENSION_it__imp_X509_EXTENSION_new__imp_X509_EXTENSION_set_critical__imp_X509_EXTENSION_set_data__imp_X509_EXTENSION_set_object__imp_X509_INFO_free__imp_X509_INFO_new__imp_X509_LOOKUP_by_alias__imp_X509_LOOKUP_by_fingerprint__imp_X509_LOOKUP_by_issuer_serial__imp_X509_LOOKUP_by_subject__imp_X509_LOOKUP_ctrl__imp_X509_LOOKUP_file__imp_X509_LOOKUP_free__imp_X509_LOOKUP_hash_dir__imp_X509_LOOKUP_init__imp_X509_LOOKUP_new__imp_X509_LOOKUP_shutdown__imp_X509_NAME_ENTRY_create_by_NID__imp_X509_NAME_ENTRY_create_by_OBJ__imp_X509_NAME_ENTRY_create_by_txt__imp_X509_NAME_ENTRY_dup__imp_X509_NAME_ENTRY_free__imp_X509_NAME_ENTRY_get_data__imp_X509_NAME_ENTRY_get_object__imp_X509_NAME_ENTRY_it__imp_X509_NAME_ENTRY_new__imp_X509_NAME_ENTRY_set_data__imp_X509_NAME_ENTRY_set_object__imp_X509_NAME_add_entry__imp_X509_NAME_add_entry_by_NID__imp_X509_NAME_add_entry_by_OBJ__imp_X509_NAME_add_entry_by_txt__imp_X509_NAME_cmp__imp_X509_NAME_delete_entry__imp_X509_NAME_digest__imp_X509_NAME_dup__imp_X509_NAME_entry_count__imp_X509_NAME_free__imp_X509_NAME_get_entry__imp_X509_NAME_get_index_by_NID__imp_X509_NAME_get_index_by_OBJ__imp_X509_NAME_get_text_by_NID__imp_X509_NAME_get_text_by_OBJ__imp_X509_NAME_hash__imp_X509_NAME_hash_old__imp_X509_NAME_it__imp_X509_NAME_new__imp_X509_NAME_oneline__imp_X509_NAME_print__imp_X509_NAME_print_ex__imp_X509_NAME_print_ex_fp__imp_X509_NAME_set__imp_X509_OBJECT_free_contents__imp_X509_OBJECT_idx_by_subject__imp_X509_OBJECT_retrieve_by_subject__imp_X509_OBJECT_retrieve_match__imp_X509_OBJECT_up_ref_count__imp_X509_PKEY_free__imp_X509_PKEY_new__imp_X509_POLICY_NODE_print__imp_X509_PUBKEY_free__imp_X509_PUBKEY_get__imp_X509_PUBKEY_get0_param__imp_X509_PUBKEY_it__imp_X509_PUBKEY_new__imp_X509_PUBKEY_set__imp_X509_PUBKEY_set0_param__imp_X509_PURPOSE_add__imp_X509_PURPOSE_cleanup__imp_X509_PURPOSE_get0__imp_X509_PURPOSE_get0_name__imp_X509_PURPOSE_get0_sname__imp_X509_PURPOSE_get_by_id__imp_X509_PURPOSE_get_by_sname__imp_X509_PURPOSE_get_count__imp_X509_PURPOSE_get_id__imp_X509_PURPOSE_get_trust__imp_X509_PURPOSE_set__imp_X509_REQ_INFO_free__imp_X509_REQ_INFO_it__imp_X509_REQ_INFO_new__imp_X509_REQ_add1_attr__imp_X509_REQ_add1_attr_by_NID__imp_X509_REQ_add1_attr_by_OBJ__imp_X509_REQ_add1_attr_by_txt__imp_X509_REQ_add_extensions__imp_X509_REQ_add_extensions_nid__imp_X509_REQ_check_private_key__imp_X509_REQ_delete_attr__imp_X509_REQ_digest__imp_X509_REQ_dup__imp_X509_REQ_extension_nid__imp_X509_REQ_free__imp_X509_REQ_get1_email__imp_X509_REQ_get_attr__imp_X509_REQ_get_attr_by_NID__imp_X509_REQ_get_attr_by_OBJ__imp_X509_REQ_get_attr_count__imp_X509_REQ_get_extension_nids__imp_X509_REQ_get_extensions__imp_X509_REQ_get_pubkey__imp_X509_REQ_it__imp_X509_REQ_new__imp_X509_REQ_print__imp_X509_REQ_print_ex__imp_X509_REQ_print_fp__imp_X509_REQ_set_extension_nids__imp_X509_REQ_set_pubkey__imp_X509_REQ_set_subject_name__imp_X509_REQ_set_version__imp_X509_REQ_sign__imp_X509_REQ_sign_ctx__imp_X509_REQ_to_X509__imp_X509_REQ_verify__imp_X509_REVOKED_add1_ext_i2d__imp_X509_REVOKED_add_ext__imp_X509_REVOKED_delete_ext__imp_X509_REVOKED_dup__imp_X509_REVOKED_free__imp_X509_REVOKED_get_ext__imp_X509_REVOKED_get_ext_by_NID__imp_X509_REVOKED_get_ext_by_OBJ__imp_X509_REVOKED_get_ext_by_critical__imp_X509_REVOKED_get_ext_count__imp_X509_REVOKED_get_ext_d2i__imp_X509_REVOKED_it__imp_X509_REVOKED_new__imp_X509_REVOKED_set_revocationDate__imp_X509_REVOKED_set_serialNumber__imp_X509_SIG_free__imp_X509_SIG_it__imp_X509_SIG_new__imp_X509_STORE_CTX_cleanup__imp_X509_STORE_CTX_free__imp_X509_STORE_CTX_get0_current_crl__imp_X509_STORE_CTX_get0_current_issuer__imp_X509_STORE_CTX_get0_param__imp_X509_STORE_CTX_get0_parent_ctx__imp_X509_STORE_CTX_get0_policy_tree__imp_X509_STORE_CTX_get0_store__imp_X509_STORE_CTX_get1_chain__imp_X509_STORE_CTX_get1_issuer__imp_X509_STORE_CTX_get_chain__imp_X509_STORE_CTX_get_current_cert__imp_X509_STORE_CTX_get_error__imp_X509_STORE_CTX_get_error_depth__imp_X509_STORE_CTX_get_ex_data__imp_X509_STORE_CTX_get_ex_new_index__imp_X509_STORE_CTX_get_explicit_policy__imp_X509_STORE_CTX_init__imp_X509_STORE_CTX_new__imp_X509_STORE_CTX_purpose_inherit__imp_X509_STORE_CTX_set0_crls__imp_X509_STORE_CTX_set0_param__imp_X509_STORE_CTX_set_cert__imp_X509_STORE_CTX_set_chain__imp_X509_STORE_CTX_set_default__imp_X509_STORE_CTX_set_depth__imp_X509_STORE_CTX_set_error__imp_X509_STORE_CTX_set_ex_data__imp_X509_STORE_CTX_set_flags__imp_X509_STORE_CTX_set_purpose__imp_X509_STORE_CTX_set_time__imp_X509_STORE_CTX_set_trust__imp_X509_STORE_CTX_set_verify_cb__imp_X509_STORE_CTX_trusted_stack__imp_X509_STORE_add_cert__imp_X509_STORE_add_crl__imp_X509_STORE_add_lookup__imp_X509_STORE_free__imp_X509_STORE_get1_certs__imp_X509_STORE_get1_crls__imp_X509_STORE_get_by_subject__imp_X509_STORE_load_locations__imp_X509_STORE_new__imp_X509_STORE_set1_param__imp_X509_STORE_set_default_paths__imp_X509_STORE_set_depth__imp_X509_STORE_set_flags__imp_X509_STORE_set_lookup_crls_cb__imp_X509_STORE_set_purpose__imp_X509_STORE_set_trust__imp_X509_STORE_set_verify_cb__imp_X509_TRUST_add__imp_X509_TRUST_cleanup__imp_X509_TRUST_get0__imp_X509_TRUST_get0_name__imp_X509_TRUST_get_by_id__imp_X509_TRUST_get_count__imp_X509_TRUST_get_flags__imp_X509_TRUST_get_trust__imp_X509_TRUST_set__imp_X509_TRUST_set_default__imp_X509_VAL_free__imp_X509_VAL_it__imp_X509_VAL_new__imp_X509_VERIFY_PARAM_add0_policy__imp_X509_VERIFY_PARAM_add0_table__imp_X509_VERIFY_PARAM_add1_host__imp_X509_VERIFY_PARAM_clear_flags__imp_X509_VERIFY_PARAM_free__imp_X509_VERIFY_PARAM_get0__imp_X509_VERIFY_PARAM_get0_name__imp_X509_VERIFY_PARAM_get0_peername__imp_X509_VERIFY_PARAM_get_count__imp_X509_VERIFY_PARAM_get_depth__imp_X509_VERIFY_PARAM_get_flags__imp_X509_VERIFY_PARAM_inherit__imp_X509_VERIFY_PARAM_lookup__imp_X509_VERIFY_PARAM_new__imp_X509_VERIFY_PARAM_set1__imp_X509_VERIFY_PARAM_set1_email__imp_X509_VERIFY_PARAM_set1_host__imp_X509_VERIFY_PARAM_set1_ip__imp_X509_VERIFY_PARAM_set1_ip_asc__imp_X509_VERIFY_PARAM_set1_name__imp_X509_VERIFY_PARAM_set1_policies__imp_X509_VERIFY_PARAM_set_depth__imp_X509_VERIFY_PARAM_set_flags__imp_X509_VERIFY_PARAM_set_hostflags__imp_X509_VERIFY_PARAM_set_purpose__imp_X509_VERIFY_PARAM_set_time__imp_X509_VERIFY_PARAM_set_trust__imp_X509_VERIFY_PARAM_table_cleanup__imp_X509_add1_ext_i2d__imp_X509_add1_reject_object__imp_X509_add1_trust_object__imp_X509_add_ext__imp_X509_alias_get0__imp_X509_alias_set1__imp_X509_certificate_type__imp_X509_chain_check_suiteb__imp_X509_chain_up_ref__imp_X509_check_akid__imp_X509_check_ca__imp_X509_check_email__imp_X509_check_host__imp_X509_check_ip__imp_X509_check_ip_asc__imp_X509_check_issued__imp_X509_check_private_key__imp_X509_check_purpose__imp_X509_check_trust__imp_X509_cmp__imp_X509_cmp_current_time__imp_X509_cmp_time__imp_X509_delete_ext__imp_X509_digest__imp_X509_dup__imp_X509_email_free__imp_X509_find_by_issuer_and_serial__imp_X509_find_by_subject__imp_X509_free__imp_X509_get0_pubkey_bitstr__imp_X509_get0_signature__imp_X509_get1_email__imp_X509_get1_ocsp__imp_X509_get_default_cert_area__imp_X509_get_default_cert_dir__imp_X509_get_default_cert_dir_env__imp_X509_get_default_cert_file__imp_X509_get_default_cert_file_env__imp_X509_get_default_private_dir__imp_X509_get_ex_data__imp_X509_get_ex_new_index__imp_X509_get_ext__imp_X509_get_ext_by_NID__imp_X509_get_ext_by_OBJ__imp_X509_get_ext_by_critical__imp_X509_get_ext_count__imp_X509_get_ext_d2i__imp_X509_get_issuer_name__imp_X509_get_pubkey__imp_X509_get_pubkey_parameters__imp_X509_get_serialNumber__imp_X509_get_signature_nid__imp_X509_get_subject_name__imp_X509_gmtime_adj__imp_X509_http_nbio__imp_X509_issuer_and_serial_cmp__imp_X509_issuer_and_serial_hash__imp_X509_issuer_name_cmp__imp_X509_issuer_name_hash__imp_X509_issuer_name_hash_old__imp_X509_it__imp_X509_keyid_get0__imp_X509_keyid_set1__imp_X509_load_cert_crl_file__imp_X509_load_cert_file__imp_X509_load_crl_file__imp_X509_new__imp_X509_ocspid_print__imp_X509_policy_check__imp_X509_policy_level_get0_node__imp_X509_policy_level_node_count__imp_X509_policy_node_get0_parent__imp_X509_policy_node_get0_policy__imp_X509_policy_node_get0_qualifiers__imp_X509_policy_tree_free__imp_X509_policy_tree_get0_level__imp_X509_policy_tree_get0_policies__imp_X509_policy_tree_get0_user_policies__imp_X509_policy_tree_level_count__imp_X509_print__imp_X509_print_ex__imp_X509_print_ex_fp__imp_X509_print_fp__imp_X509_pubkey_digest__imp_X509_reject_clear__imp_X509_set_ex_data__imp_X509_set_issuer_name__imp_X509_set_notAfter__imp_X509_set_notBefore__imp_X509_set_pubkey__imp_X509_set_serialNumber__imp_X509_set_subject_name__imp_X509_set_version__imp_X509_sign__imp_X509_sign_ctx__imp_X509_signature_dump__imp_X509_signature_print__imp_X509_subject_name_cmp__imp_X509_subject_name_hash__imp_X509_subject_name_hash_old__imp_X509_supported_extension__imp_X509_time_adj__imp_X509_time_adj_ex__imp_X509_to_X509_REQ__imp_X509_trust_clear__imp_X509_verify__imp_X509_verify_cert__imp_X509_verify_cert_error_string__imp_X509at_add1_attr__imp_X509at_add1_attr_by_NID__imp_X509at_add1_attr_by_OBJ__imp_X509at_add1_attr_by_txt__imp_X509at_delete_attr__imp_X509at_get0_data_by_OBJ__imp_X509at_get_attr__imp_X509at_get_attr_by_NID__imp_X509at_get_attr_by_OBJ__imp_X509at_get_attr_count__imp_X509v3_add_ext__imp_X509v3_delete_ext__imp_X509v3_get_ext__imp_X509v3_get_ext_by_NID__imp_X509v3_get_ext_by_OBJ__imp_X509v3_get_ext_by_critical__imp_X509v3_get_ext_count__imp_ZLONG_it__imp__ossl_096_des_random_seed__imp__ossl_old_crypt__imp__ossl_old_des_cbc_cksum__imp__ossl_old_des_cbc_encrypt__imp__ossl_old_des_cfb64_encrypt__imp__ossl_old_des_cfb_encrypt__imp__ossl_old_des_crypt__imp__ossl_old_des_decrypt3__imp__ossl_old_des_ecb3_encrypt__imp__ossl_old_des_ecb_encrypt__imp__ossl_old_des_ede3_cbc_encrypt__imp__ossl_old_des_ede3_cfb64_encrypt__imp__ossl_old_des_ede3_ofb64_encrypt__imp__ossl_old_des_enc_read__imp__ossl_old_des_enc_write__imp__ossl_old_des_encrypt__imp__ossl_old_des_encrypt2__imp__ossl_old_des_encrypt3__imp__ossl_old_des_fcrypt__imp__ossl_old_des_is_weak_key__imp__ossl_old_des_key_sched__imp__ossl_old_des_ncbc_encrypt__imp__ossl_old_des_ofb64_encrypt__imp__ossl_old_des_ofb_encrypt__imp__ossl_old_des_options__imp__ossl_old_des_pcbc_encrypt__imp__ossl_old_des_quad_cksum__imp__ossl_old_des_random_key__imp__ossl_old_des_random_seed__imp__ossl_old_des_read_2passwords__imp__ossl_old_des_read_password__imp__ossl_old_des_read_pw__imp__ossl_old_des_read_pw_string__imp__ossl_old_des_set_key__imp__ossl_old_des_set_odd_parity__imp__ossl_old_des_string_to_2keys__imp__ossl_old_des_string_to_key__imp__ossl_old_des_xcbc_encrypt__imp__shadow_DES_check_key__imp__shadow_DES_rw_mode__imp_a2d_ASN1_OBJECT__imp_a2i_ASN1_ENUMERATED__imp_a2i_ASN1_INTEGER__imp_a2i_ASN1_STRING__imp_a2i_GENERAL_NAME__imp_a2i_IPADDRESS__imp_a2i_IPADDRESS_NC__imp_a2i_ipadd__imp_asn1_Finish__imp_asn1_GetSequence__imp_asn1_add_error__imp_asn1_const_Finish__imp_asn1_do_adb__imp_asn1_do_lock__imp_asn1_enc_free__imp_asn1_enc_init__imp_asn1_enc_restore__imp_asn1_enc_save__imp_asn1_ex_c2i__imp_asn1_ex_i2c__imp_asn1_get_choice_selector__imp_asn1_get_field_ptr__imp_asn1_set_choice_selector__imp_b2i_PVK_bio__imp_b2i_PrivateKey__imp_b2i_PrivateKey_bio__imp_b2i_PublicKey__imp_b2i_PublicKey_bio__imp_bn_add_words__imp_bn_div_words__imp_bn_dup_expand__imp_bn_expand2__imp_bn_mul_add_words__imp_bn_mul_words__imp_bn_sqr_words__imp_bn_sub_words__imp_c2i_ASN1_BIT_STRING__imp_c2i_ASN1_INTEGER__imp_c2i_ASN1_OBJECT__imp_check_defer__imp_d2i_ACCESS_DESCRIPTION__imp_d2i_ASN1_BIT_STRING__imp_d2i_ASN1_BMPSTRING__imp_d2i_ASN1_BOOLEAN__imp_d2i_ASN1_ENUMERATED__imp_d2i_ASN1_GENERALIZEDTIME__imp_d2i_ASN1_GENERALSTRING__imp_d2i_ASN1_IA5STRING__imp_d2i_ASN1_INTEGER__imp_d2i_ASN1_NULL__imp_d2i_ASN1_OBJECT__imp_d2i_ASN1_OCTET_STRING__imp_d2i_ASN1_PRINTABLE__imp_d2i_ASN1_PRINTABLESTRING__imp_d2i_ASN1_SEQUENCE_ANY__imp_d2i_ASN1_SET__imp_d2i_ASN1_SET_ANY__imp_d2i_ASN1_T61STRING__imp_d2i_ASN1_TIME__imp_d2i_ASN1_TYPE__imp_d2i_ASN1_UINTEGER__imp_d2i_ASN1_UNIVERSALSTRING__imp_d2i_ASN1_UTCTIME__imp_d2i_ASN1_UTF8STRING__imp_d2i_ASN1_VISIBLESTRING__imp_d2i_ASN1_bytes__imp_d2i_ASN1_type_bytes__imp_d2i_AUTHORITY_INFO_ACCESS__imp_d2i_AUTHORITY_KEYID__imp_d2i_AutoPrivateKey__imp_d2i_BASIC_CONSTRAINTS__imp_d2i_CERTIFICATEPOLICIES__imp_d2i_CMS_ContentInfo__imp_d2i_CMS_ReceiptRequest__imp_d2i_CMS_bio__imp_d2i_CRL_DIST_POINTS__imp_d2i_DHparams__imp_d2i_DHxparams__imp_d2i_DIRECTORYSTRING__imp_d2i_DISPLAYTEXT__imp_d2i_DIST_POINT__imp_d2i_DIST_POINT_NAME__imp_d2i_DSAPrivateKey__imp_d2i_DSAPrivateKey_bio__imp_d2i_DSAPrivateKey_fp__imp_d2i_DSAPublicKey__imp_d2i_DSA_PUBKEY__imp_d2i_DSA_PUBKEY_bio__imp_d2i_DSA_PUBKEY_fp__imp_d2i_DSA_SIG__imp_d2i_DSAparams__imp_d2i_ECDSA_SIG__imp_d2i_ECPKParameters__imp_d2i_ECParameters__imp_d2i_ECPrivateKey__imp_d2i_ECPrivateKey_bio__imp_d2i_ECPrivateKey_fp__imp_d2i_EC_PUBKEY__imp_d2i_EC_PUBKEY_bio__imp_d2i_EC_PUBKEY_fp__imp_d2i_EDIPARTYNAME__imp_d2i_ESS_CERT_ID__imp_d2i_ESS_ISSUER_SERIAL__imp_d2i_ESS_SIGNING_CERT__imp_d2i_EXTENDED_KEY_USAGE__imp_d2i_GENERAL_NAME__imp_d2i_GENERAL_NAMES__imp_d2i_ISSUING_DIST_POINT__imp_d2i_KRB5_APREQ__imp_d2i_KRB5_APREQBODY__imp_d2i_KRB5_AUTHDATA__imp_d2i_KRB5_AUTHENT__imp_d2i_KRB5_AUTHENTBODY__imp_d2i_KRB5_CHECKSUM__imp_d2i_KRB5_ENCDATA__imp_d2i_KRB5_ENCKEY__imp_d2i_KRB5_PRINCNAME__imp_d2i_KRB5_TICKET__imp_d2i_KRB5_TKTBODY__imp_d2i_NETSCAPE_CERT_SEQUENCE__imp_d2i_NETSCAPE_SPKAC__imp_d2i_NETSCAPE_SPKI__imp_d2i_NETSCAPE_X509__imp_d2i_NOTICEREF__imp_d2i_Netscape_RSA__imp_d2i_OCSP_BASICRESP__imp_d2i_OCSP_CERTID__imp_d2i_OCSP_CERTSTATUS__imp_d2i_OCSP_CRLID__imp_d2i_OCSP_ONEREQ__imp_d2i_OCSP_REQINFO__imp_d2i_OCSP_REQUEST__imp_d2i_OCSP_RESPBYTES__imp_d2i_OCSP_RESPDATA__imp_d2i_OCSP_RESPID__imp_d2i_OCSP_RESPONSE__imp_d2i_OCSP_REVOKEDINFO__imp_d2i_OCSP_SERVICELOC__imp_d2i_OCSP_SIGNATURE__imp_d2i_OCSP_SINGLERESP__imp_d2i_OTHERNAME__imp_d2i_PBE2PARAM__imp_d2i_PBEPARAM__imp_d2i_PBKDF2PARAM__imp_d2i_PKCS12__imp_d2i_PKCS12_BAGS__imp_d2i_PKCS12_MAC_DATA__imp_d2i_PKCS12_SAFEBAG__imp_d2i_PKCS12_bio__imp_d2i_PKCS12_fp__imp_d2i_PKCS7__imp_d2i_PKCS7_DIGEST__imp_d2i_PKCS7_ENCRYPT__imp_d2i_PKCS7_ENC_CONTENT__imp_d2i_PKCS7_ENVELOPE__imp_d2i_PKCS7_ISSUER_AND_SERIAL__imp_d2i_PKCS7_RECIP_INFO__imp_d2i_PKCS7_SIGNED__imp_d2i_PKCS7_SIGNER_INFO__imp_d2i_PKCS7_SIGN_ENVELOPE__imp_d2i_PKCS7_bio__imp_d2i_PKCS7_fp__imp_d2i_PKCS8PrivateKey_bio__imp_d2i_PKCS8PrivateKey_fp__imp_d2i_PKCS8_PRIV_KEY_INFO__imp_d2i_PKCS8_PRIV_KEY_INFO_bio__imp_d2i_PKCS8_PRIV_KEY_INFO_fp__imp_d2i_PKCS8_bio__imp_d2i_PKCS8_fp__imp_d2i_PKEY_USAGE_PERIOD__imp_d2i_POLICYINFO__imp_d2i_POLICYQUALINFO__imp_d2i_PROXY_CERT_INFO_EXTENSION__imp_d2i_PROXY_POLICY__imp_d2i_PUBKEY__imp_d2i_PUBKEY_bio__imp_d2i_PUBKEY_fp__imp_d2i_PrivateKey__imp_d2i_PrivateKey_bio__imp_d2i_PrivateKey_fp__imp_d2i_PublicKey__imp_d2i_RSAPrivateKey__imp_d2i_RSAPrivateKey_bio__imp_d2i_RSAPrivateKey_fp__imp_d2i_RSAPublicKey__imp_d2i_RSAPublicKey_bio__imp_d2i_RSAPublicKey_fp__imp_d2i_RSA_NET__imp_d2i_RSA_OAEP_PARAMS__imp_d2i_RSA_PSS_PARAMS__imp_d2i_RSA_PUBKEY__imp_d2i_RSA_PUBKEY_bio__imp_d2i_RSA_PUBKEY_fp__imp_d2i_SXNET__imp_d2i_SXNETID__imp_d2i_TS_ACCURACY__imp_d2i_TS_MSG_IMPRINT__imp_d2i_TS_MSG_IMPRINT_bio__imp_d2i_TS_MSG_IMPRINT_fp__imp_d2i_TS_REQ__imp_d2i_TS_REQ_bio__imp_d2i_TS_REQ_fp__imp_d2i_TS_RESP__imp_d2i_TS_RESP_bio__imp_d2i_TS_RESP_fp__imp_d2i_TS_STATUS_INFO__imp_d2i_TS_TST_INFO__imp_d2i_TS_TST_INFO_bio__imp_d2i_TS_TST_INFO_fp__imp_d2i_USERNOTICE__imp_d2i_X509__imp_d2i_X509_ALGOR__imp_d2i_X509_ALGORS__imp_d2i_X509_ATTRIBUTE__imp_d2i_X509_AUX__imp_d2i_X509_CERT_AUX__imp_d2i_X509_CERT_PAIR__imp_d2i_X509_CINF__imp_d2i_X509_CRL__imp_d2i_X509_CRL_INFO__imp_d2i_X509_CRL_bio__imp_d2i_X509_CRL_fp__imp_d2i_X509_EXTENSION__imp_d2i_X509_EXTENSIONS__imp_d2i_X509_NAME__imp_d2i_X509_NAME_ENTRY__imp_d2i_X509_PKEY__imp_d2i_X509_PUBKEY__imp_d2i_X509_REQ__imp_d2i_X509_REQ_INFO__imp_d2i_X509_REQ_bio__imp_d2i_X509_REQ_fp__imp_d2i_X509_REVOKED__imp_d2i_X509_SIG__imp_d2i_X509_VAL__imp_d2i_X509_bio__imp_d2i_X509_fp__imp_get_rfc2409_prime_1024__imp_get_rfc2409_prime_768__imp_get_rfc3526_prime_1536__imp_get_rfc3526_prime_2048__imp_get_rfc3526_prime_3072__imp_get_rfc3526_prime_4096__imp_get_rfc3526_prime_6144__imp_get_rfc3526_prime_8192__imp_hex_to_string__imp_i2a_ACCESS_DESCRIPTION__imp_i2a_ASN1_ENUMERATED__imp_i2a_ASN1_INTEGER__imp_i2a_ASN1_OBJECT__imp_i2a_ASN1_STRING__imp_i2b_PVK_bio__imp_i2b_PrivateKey_bio__imp_i2b_PublicKey_bio__imp_i2c_ASN1_BIT_STRING__imp_i2c_ASN1_INTEGER__imp_i2d_ACCESS_DESCRIPTION__imp_i2d_ASN1_BIT_STRING__imp_i2d_ASN1_BMPSTRING__imp_i2d_ASN1_BOOLEAN__imp_i2d_ASN1_ENUMERATED__imp_i2d_ASN1_GENERALIZEDTIME__imp_i2d_ASN1_GENERALSTRING__imp_i2d_ASN1_IA5STRING__imp_i2d_ASN1_INTEGER__imp_i2d_ASN1_NULL__imp_i2d_ASN1_OBJECT__imp_i2d_ASN1_OCTET_STRING__imp_i2d_ASN1_PRINTABLE__imp_i2d_ASN1_PRINTABLESTRING__imp_i2d_ASN1_SEQUENCE_ANY__imp_i2d_ASN1_SET__imp_i2d_ASN1_SET_ANY__imp_i2d_ASN1_T61STRING__imp_i2d_ASN1_TIME__imp_i2d_ASN1_TYPE__imp_i2d_ASN1_UNIVERSALSTRING__imp_i2d_ASN1_UTCTIME__imp_i2d_ASN1_UTF8STRING__imp_i2d_ASN1_VISIBLESTRING__imp_i2d_ASN1_bio_stream__imp_i2d_ASN1_bytes__imp_i2d_AUTHORITY_INFO_ACCESS__imp_i2d_AUTHORITY_KEYID__imp_i2d_BASIC_CONSTRAINTS__imp_i2d_CERTIFICATEPOLICIES__imp_i2d_CMS_ContentInfo__imp_i2d_CMS_ReceiptRequest__imp_i2d_CMS_bio__imp_i2d_CMS_bio_stream__imp_i2d_CRL_DIST_POINTS__imp_i2d_DHparams__imp_i2d_DHxparams__imp_i2d_DIRECTORYSTRING__imp_i2d_DISPLAYTEXT__imp_i2d_DIST_POINT__imp_i2d_DIST_POINT_NAME__imp_i2d_DSAPrivateKey__imp_i2d_DSAPrivateKey_bio__imp_i2d_DSAPrivateKey_fp__imp_i2d_DSAPublicKey__imp_i2d_DSA_PUBKEY__imp_i2d_DSA_PUBKEY_bio__imp_i2d_DSA_PUBKEY_fp__imp_i2d_DSA_SIG__imp_i2d_DSAparams__imp_i2d_ECDSA_SIG__imp_i2d_ECPKParameters__imp_i2d_ECParameters__imp_i2d_ECPrivateKey__imp_i2d_ECPrivateKey_bio__imp_i2d_ECPrivateKey_fp__imp_i2d_EC_PUBKEY__imp_i2d_EC_PUBKEY_bio__imp_i2d_EC_PUBKEY_fp__imp_i2d_EDIPARTYNAME__imp_i2d_ESS_CERT_ID__imp_i2d_ESS_ISSUER_SERIAL__imp_i2d_ESS_SIGNING_CERT__imp_i2d_EXTENDED_KEY_USAGE__imp_i2d_GENERAL_NAME__imp_i2d_GENERAL_NAMES__imp_i2d_ISSUING_DIST_POINT__imp_i2d_KRB5_APREQ__imp_i2d_KRB5_APREQBODY__imp_i2d_KRB5_AUTHDATA__imp_i2d_KRB5_AUTHENT__imp_i2d_KRB5_AUTHENTBODY__imp_i2d_KRB5_CHECKSUM__imp_i2d_KRB5_ENCDATA__imp_i2d_KRB5_ENCKEY__imp_i2d_KRB5_PRINCNAME__imp_i2d_KRB5_TICKET__imp_i2d_KRB5_TKTBODY__imp_i2d_NETSCAPE_CERT_SEQUENCE__imp_i2d_NETSCAPE_SPKAC__imp_i2d_NETSCAPE_SPKI__imp_i2d_NETSCAPE_X509__imp_i2d_NOTICEREF__imp_i2d_Netscape_RSA__imp_i2d_OCSP_BASICRESP__imp_i2d_OCSP_CERTID__imp_i2d_OCSP_CERTSTATUS__imp_i2d_OCSP_CRLID__imp_i2d_OCSP_ONEREQ__imp_i2d_OCSP_REQINFO__imp_i2d_OCSP_REQUEST__imp_i2d_OCSP_RESPBYTES__imp_i2d_OCSP_RESPDATA__imp_i2d_OCSP_RESPID__imp_i2d_OCSP_RESPONSE__imp_i2d_OCSP_REVOKEDINFO__imp_i2d_OCSP_SERVICELOC__imp_i2d_OCSP_SIGNATURE__imp_i2d_OCSP_SINGLERESP__imp_i2d_OTHERNAME__imp_i2d_PBE2PARAM__imp_i2d_PBEPARAM__imp_i2d_PBKDF2PARAM__imp_i2d_PKCS12__imp_i2d_PKCS12_BAGS__imp_i2d_PKCS12_MAC_DATA__imp_i2d_PKCS12_SAFEBAG__imp_i2d_PKCS12_bio__imp_i2d_PKCS12_fp__imp_i2d_PKCS7__imp_i2d_PKCS7_DIGEST__imp_i2d_PKCS7_ENCRYPT__imp_i2d_PKCS7_ENC_CONTENT__imp_i2d_PKCS7_ENVELOPE__imp_i2d_PKCS7_ISSUER_AND_SERIAL__imp_i2d_PKCS7_NDEF__imp_i2d_PKCS7_RECIP_INFO__imp_i2d_PKCS7_SIGNED__imp_i2d_PKCS7_SIGNER_INFO__imp_i2d_PKCS7_SIGN_ENVELOPE__imp_i2d_PKCS7_bio__imp_i2d_PKCS7_bio_stream__imp_i2d_PKCS7_fp__imp_i2d_PKCS8PrivateKeyInfo_bio__imp_i2d_PKCS8PrivateKeyInfo_fp__imp_i2d_PKCS8PrivateKey_bio__imp_i2d_PKCS8PrivateKey_fp__imp_i2d_PKCS8PrivateKey_nid_bio__imp_i2d_PKCS8PrivateKey_nid_fp__imp_i2d_PKCS8_PRIV_KEY_INFO__imp_i2d_PKCS8_PRIV_KEY_INFO_bio__imp_i2d_PKCS8_PRIV_KEY_INFO_fp__imp_i2d_PKCS8_bio__imp_i2d_PKCS8_fp__imp_i2d_PKEY_USAGE_PERIOD__imp_i2d_POLICYINFO__imp_i2d_POLICYQUALINFO__imp_i2d_PROXY_CERT_INFO_EXTENSION__imp_i2d_PROXY_POLICY__imp_i2d_PUBKEY__imp_i2d_PUBKEY_bio__imp_i2d_PUBKEY_fp__imp_i2d_PrivateKey__imp_i2d_PrivateKey_bio__imp_i2d_PrivateKey_fp__imp_i2d_PublicKey__imp_i2d_RSAPrivateKey__imp_i2d_RSAPrivateKey_bio__imp_i2d_RSAPrivateKey_fp__imp_i2d_RSAPublicKey__imp_i2d_RSAPublicKey_bio__imp_i2d_RSAPublicKey_fp__imp_i2d_RSA_NET__imp_i2d_RSA_OAEP_PARAMS__imp_i2d_RSA_PSS_PARAMS__imp_i2d_RSA_PUBKEY__imp_i2d_RSA_PUBKEY_bio__imp_i2d_RSA_PUBKEY_fp__imp_i2d_SXNET__imp_i2d_SXNETID__imp_i2d_TS_ACCURACY__imp_i2d_TS_MSG_IMPRINT__imp_i2d_TS_MSG_IMPRINT_bio__imp_i2d_TS_MSG_IMPRINT_fp__imp_i2d_TS_REQ__imp_i2d_TS_REQ_bio__imp_i2d_TS_REQ_fp__imp_i2d_TS_RESP__imp_i2d_TS_RESP_bio__imp_i2d_TS_RESP_fp__imp_i2d_TS_STATUS_INFO__imp_i2d_TS_TST_INFO__imp_i2d_TS_TST_INFO_bio__imp_i2d_TS_TST_INFO_fp__imp_i2d_USERNOTICE__imp_i2d_X509__imp_i2d_X509_ALGOR__imp_i2d_X509_ALGORS__imp_i2d_X509_ATTRIBUTE__imp_i2d_X509_AUX__imp_i2d_X509_CERT_AUX__imp_i2d_X509_CERT_PAIR__imp_i2d_X509_CINF__imp_i2d_X509_CRL__imp_i2d_X509_CRL_INFO__imp_i2d_X509_CRL_bio__imp_i2d_X509_CRL_fp__imp_i2d_X509_EXTENSION__imp_i2d_X509_EXTENSIONS__imp_i2d_X509_NAME__imp_i2d_X509_NAME_ENTRY__imp_i2d_X509_PKEY__imp_i2d_X509_PUBKEY__imp_i2d_X509_REQ__imp_i2d_X509_REQ_INFO__imp_i2d_X509_REQ_bio__imp_i2d_X509_REQ_fp__imp_i2d_X509_REVOKED__imp_i2d_X509_SIG__imp_i2d_X509_VAL__imp_i2d_X509_bio__imp_i2d_X509_fp__imp_i2d_re_X509_tbs__imp_i2o_ECPublicKey__imp_i2s_ASN1_ENUMERATED__imp_i2s_ASN1_ENUMERATED_TABLE__imp_i2s_ASN1_INTEGER__imp_i2s_ASN1_OCTET_STRING__imp_i2t_ASN1_OBJECT__imp_i2v_ASN1_BIT_STRING__imp_i2v_GENERAL_NAME__imp_i2v_GENERAL_NAMES__imp_idea_cbc_encrypt__imp_idea_cfb64_encrypt__imp_idea_ecb_encrypt__imp_idea_encrypt__imp_idea_ofb64_encrypt__imp_idea_options__imp_idea_set_decrypt_key__imp_idea_set_encrypt_key__imp_lh_delete__imp_lh_doall__imp_lh_doall_arg__imp_lh_free__imp_lh_insert__imp_lh_new__imp_lh_node_stats__imp_lh_node_stats_bio__imp_lh_node_usage_stats__imp_lh_node_usage_stats_bio__imp_lh_num_items__imp_lh_retrieve__imp_lh_stats__imp_lh_stats_bio__imp_lh_strhash__imp_name_cmp__imp_o2i_ECPublicKey__imp_pitem_free__imp_pitem_new__imp_pqueue_find__imp_pqueue_free__imp_pqueue_insert__imp_pqueue_iterator__imp_pqueue_new__imp_pqueue_next__imp_pqueue_peek__imp_pqueue_pop__imp_pqueue_print__imp_pqueue_size__imp_private_AES_set_decrypt_key__imp_private_AES_set_encrypt_key__imp_private_RC4_set_key__imp_s2i_ASN1_INTEGER__imp_s2i_ASN1_OCTET_STRING__imp_sk_deep_copy__imp_sk_delete__imp_sk_delete_ptr__imp_sk_dup__imp_sk_find__imp_sk_find_ex__imp_sk_free__imp_sk_insert__imp_sk_is_sorted__imp_sk_new__imp_sk_new_null__imp_sk_num__imp_sk_pop__imp_sk_pop_free__imp_sk_push__imp_sk_set__imp_sk_set_cmp_func__imp_sk_shift__imp_sk_sort__imp_sk_unshift__imp_sk_value__imp_sk_zero__imp_string_to_hex__imp_v2i_ASN1_BIT_STRING__imp_v2i_GENERAL_NAME__imp_v2i_GENERAL_NAMES__imp_v2i_GENERAL_NAME_ex_ossl_096_des_random_seed_ossl_old_crypt_ossl_old_des_cbc_cksum_ossl_old_des_cbc_encrypt_ossl_old_des_cfb64_encrypt_ossl_old_des_cfb_encrypt_ossl_old_des_crypt_ossl_old_des_decrypt3_ossl_old_des_ecb3_encrypt_ossl_old_des_ecb_encrypt_ossl_old_des_ede3_cbc_encrypt_ossl_old_des_ede3_cfb64_encrypt_ossl_old_des_ede3_ofb64_encrypt_ossl_old_des_enc_read_ossl_old_des_enc_write_ossl_old_des_encrypt_ossl_old_des_encrypt2_ossl_old_des_encrypt3_ossl_old_des_fcrypt_ossl_old_des_is_weak_key_ossl_old_des_key_sched_ossl_old_des_ncbc_encrypt_ossl_old_des_ofb64_encrypt_ossl_old_des_ofb_encrypt_ossl_old_des_options_ossl_old_des_pcbc_encrypt_ossl_old_des_quad_cksum_ossl_old_des_random_key_ossl_old_des_random_seed_ossl_old_des_read_2passwords_ossl_old_des_read_password_ossl_old_des_read_pw_ossl_old_des_read_pw_string_ossl_old_des_set_key_ossl_old_des_set_odd_parity_ossl_old_des_string_to_2keys_ossl_old_des_string_to_key_ossl_old_des_xcbc_encrypt_shadow_DES_check_key_shadow_DES_rw_modea2d_ASN1_OBJECTa2i_ASN1_ENUMERATEDa2i_ASN1_INTEGERa2i_ASN1_STRINGa2i_GENERAL_NAMEa2i_IPADDRESSa2i_IPADDRESS_NCa2i_ipaddasn1_Finishasn1_GetSequenceasn1_add_errorasn1_const_Finishasn1_do_adbasn1_do_lockasn1_enc_freeasn1_enc_initasn1_enc_restoreasn1_enc_saveasn1_ex_c2iasn1_ex_i2casn1_get_choice_selectorasn1_get_field_ptrasn1_set_choice_selectorb2i_PVK_biob2i_PrivateKeyb2i_PrivateKey_biob2i_PublicKeyb2i_PublicKey_biobn_add_wordsbn_div_wordsbn_dup_expandbn_expand2bn_mul_add_wordsbn_mul_wordsbn_sqr_wordsbn_sub_wordsc2i_ASN1_BIT_STRINGc2i_ASN1_INTEGERc2i_ASN1_OBJECTcheck_deferd2i_ACCESS_DESCRIPTIONd2i_ASN1_BIT_STRINGd2i_ASN1_BMPSTRINGd2i_ASN1_BOOLEANd2i_ASN1_ENUMERATEDd2i_ASN1_GENERALIZEDTIMEd2i_ASN1_GENERALSTRINGd2i_ASN1_IA5STRINGd2i_ASN1_INTEGERd2i_ASN1_NULLd2i_ASN1_OBJECTd2i_ASN1_OCTET_STRINGd2i_ASN1_PRINTABLEd2i_ASN1_PRINTABLESTRINGd2i_ASN1_SEQUENCE_ANYd2i_ASN1_SETd2i_ASN1_SET_ANYd2i_ASN1_T61STRINGd2i_ASN1_TIMEd2i_ASN1_TYPEd2i_ASN1_UINTEGERd2i_ASN1_UNIVERSALSTRINGd2i_ASN1_UTCTIMEd2i_ASN1_UTF8STRINGd2i_ASN1_VISIBLESTRINGd2i_ASN1_bytesd2i_ASN1_type_bytesd2i_AUTHORITY_INFO_ACCESSd2i_AUTHORITY_KEYIDd2i_AutoPrivateKeyd2i_BASIC_CONSTRAINTSd2i_CERTIFICATEPOLICIESd2i_CMS_ContentInfod2i_CMS_ReceiptRequestd2i_CMS_biod2i_CRL_DIST_POINTSd2i_DHparamsd2i_DHxparamsd2i_DIRECTORYSTRINGd2i_DISPLAYTEXTd2i_DIST_POINTd2i_DIST_POINT_NAMEd2i_DSAPrivateKeyd2i_DSAPrivateKey_biod2i_DSAPrivateKey_fpd2i_DSAPublicKeyd2i_DSA_PUBKEYd2i_DSA_PUBKEY_biod2i_DSA_PUBKEY_fpd2i_DSA_SIGd2i_DSAparamsd2i_ECDSA_SIGd2i_ECPKParametersd2i_ECParametersd2i_ECPrivateKeyd2i_ECPrivateKey_biod2i_ECPrivateKey_fpd2i_EC_PUBKEYd2i_EC_PUBKEY_biod2i_EC_PUBKEY_fpd2i_EDIPARTYNAMEd2i_ESS_CERT_IDd2i_ESS_ISSUER_SERIALd2i_ESS_SIGNING_CERTd2i_EXTENDED_KEY_USAGEd2i_GENERAL_NAMEd2i_GENERAL_NAMESd2i_ISSUING_DIST_POINTd2i_KRB5_APREQd2i_KRB5_APREQBODYd2i_KRB5_AUTHDATAd2i_KRB5_AUTHENTd2i_KRB5_AUTHENTBODYd2i_KRB5_CHECKSUMd2i_KRB5_ENCDATAd2i_KRB5_ENCKEYd2i_KRB5_PRINCNAMEd2i_KRB5_TICKETd2i_KRB5_TKTBODYd2i_NETSCAPE_CERT_SEQUENCEd2i_NETSCAPE_SPKACd2i_NETSCAPE_SPKId2i_NETSCAPE_X509d2i_NOTICEREFd2i_Netscape_RSAd2i_OCSP_BASICRESPd2i_OCSP_CERTIDd2i_OCSP_CERTSTATUSd2i_OCSP_CRLIDd2i_OCSP_ONEREQd2i_OCSP_REQINFOd2i_OCSP_REQUESTd2i_OCSP_RESPBYTESd2i_OCSP_RESPDATAd2i_OCSP_RESPIDd2i_OCSP_RESPONSEd2i_OCSP_REVOKEDINFOd2i_OCSP_SERVICELOCd2i_OCSP_SIGNATUREd2i_OCSP_SINGLERESPd2i_OTHERNAMEd2i_PBE2PARAMd2i_PBEPARAMd2i_PBKDF2PARAMd2i_PKCS12d2i_PKCS12_BAGSd2i_PKCS12_MAC_DATAd2i_PKCS12_SAFEBAGd2i_PKCS12_biod2i_PKCS12_fpd2i_PKCS7d2i_PKCS7_DIGESTd2i_PKCS7_ENCRYPTd2i_PKCS7_ENC_CONTENTd2i_PKCS7_ENVELOPEd2i_PKCS7_ISSUER_AND_SERIALd2i_PKCS7_RECIP_INFOd2i_PKCS7_SIGNEDd2i_PKCS7_SIGNER_INFOd2i_PKCS7_SIGN_ENVELOPEd2i_PKCS7_biod2i_PKCS7_fpd2i_PKCS8PrivateKey_biod2i_PKCS8PrivateKey_fpd2i_PKCS8_PRIV_KEY_INFOd2i_PKCS8_PRIV_KEY_INFO_biod2i_PKCS8_PRIV_KEY_INFO_fpd2i_PKCS8_biod2i_PKCS8_fpd2i_PKEY_USAGE_PERIODd2i_POLICYINFOd2i_POLICYQUALINFOd2i_PROXY_CERT_INFO_EXTENSIONd2i_PROXY_POLICYd2i_PUBKEYd2i_PUBKEY_biod2i_PUBKEY_fpd2i_PrivateKeyd2i_PrivateKey_biod2i_PrivateKey_fpd2i_PublicKeyd2i_RSAPrivateKeyd2i_RSAPrivateKey_biod2i_RSAPrivateKey_fpd2i_RSAPublicKeyd2i_RSAPublicKey_biod2i_RSAPublicKey_fpd2i_RSA_NETd2i_RSA_OAEP_PARAMSd2i_RSA_PSS_PARAMSd2i_RSA_PUBKEYd2i_RSA_PUBKEY_biod2i_RSA_PUBKEY_fpd2i_SXNETd2i_SXNETIDd2i_TS_ACCURACYd2i_TS_MSG_IMPRINTd2i_TS_MSG_IMPRINT_biod2i_TS_MSG_IMPRINT_fpd2i_TS_REQd2i_TS_REQ_biod2i_TS_REQ_fpd2i_TS_RESPd2i_TS_RESP_biod2i_TS_RESP_fpd2i_TS_STATUS_INFOd2i_TS_TST_INFOd2i_TS_TST_INFO_biod2i_TS_TST_INFO_fpd2i_USERNOTICEd2i_X509d2i_X509_ALGORd2i_X509_ALGORSd2i_X509_ATTRIBUTEd2i_X509_AUXd2i_X509_CERT_AUXd2i_X509_CERT_PAIRd2i_X509_CINFd2i_X509_CRLd2i_X509_CRL_INFOd2i_X509_CRL_biod2i_X509_CRL_fpd2i_X509_EXTENSIONd2i_X509_EXTENSIONSd2i_X509_NAMEd2i_X509_NAME_ENTRYd2i_X509_PKEYd2i_X509_PUBKEYd2i_X509_REQd2i_X509_REQ_INFOd2i_X509_REQ_biod2i_X509_REQ_fpd2i_X509_REVOKEDd2i_X509_SIGd2i_X509_VALd2i_X509_biod2i_X509_fpget_rfc2409_prime_1024get_rfc2409_prime_768get_rfc3526_prime_1536get_rfc3526_prime_2048get_rfc3526_prime_3072get_rfc3526_prime_4096get_rfc3526_prime_6144get_rfc3526_prime_8192hex_to_stringi2a_ACCESS_DESCRIPTIONi2a_ASN1_ENUMERATEDi2a_ASN1_INTEGERi2a_ASN1_OBJECTi2a_ASN1_STRINGi2b_PVK_bioi2b_PrivateKey_bioi2b_PublicKey_bioi2c_ASN1_BIT_STRINGi2c_ASN1_INTEGERi2d_ACCESS_DESCRIPTIONi2d_ASN1_BIT_STRINGi2d_ASN1_BMPSTRINGi2d_ASN1_BOOLEANi2d_ASN1_ENUMERATEDi2d_ASN1_GENERALIZEDTIMEi2d_ASN1_GENERALSTRINGi2d_ASN1_IA5STRINGi2d_ASN1_INTEGERi2d_ASN1_NULLi2d_ASN1_OBJECTi2d_ASN1_OCTET_STRINGi2d_ASN1_PRINTABLEi2d_ASN1_PRINTABLESTRINGi2d_ASN1_SEQUENCE_ANYi2d_ASN1_SETi2d_ASN1_SET_ANYi2d_ASN1_T61STRINGi2d_ASN1_TIMEi2d_ASN1_TYPEi2d_ASN1_UNIVERSALSTRINGi2d_ASN1_UTCTIMEi2d_ASN1_UTF8STRINGi2d_ASN1_VISIBLESTRINGi2d_ASN1_bio_streami2d_ASN1_bytesi2d_AUTHORITY_INFO_ACCESSi2d_AUTHORITY_KEYIDi2d_BASIC_CONSTRAINTSi2d_CERTIFICATEPOLICIESi2d_CMS_ContentInfoi2d_CMS_ReceiptRequesti2d_CMS_bioi2d_CMS_bio_streami2d_CRL_DIST_POINTSi2d_DHparamsi2d_DHxparamsi2d_DIRECTORYSTRINGi2d_DISPLAYTEXTi2d_DIST_POINTi2d_DIST_POINT_NAMEi2d_DSAPrivateKeyi2d_DSAPrivateKey_bioi2d_DSAPrivateKey_fpi2d_DSAPublicKeyi2d_DSA_PUBKEYi2d_DSA_PUBKEY_bioi2d_DSA_PUBKEY_fpi2d_DSA_SIGi2d_DSAparamsi2d_ECDSA_SIGi2d_ECPKParametersi2d_ECParametersi2d_ECPrivateKeyi2d_ECPrivateKey_bioi2d_ECPrivateKey_fpi2d_EC_PUBKEYi2d_EC_PUBKEY_bioi2d_EC_PUBKEY_fpi2d_EDIPARTYNAMEi2d_ESS_CERT_IDi2d_ESS_ISSUER_SERIALi2d_ESS_SIGNING_CERTi2d_EXTENDED_KEY_USAGEi2d_GENERAL_NAMEi2d_GENERAL_NAMESi2d_ISSUING_DIST_POINTi2d_KRB5_APREQi2d_KRB5_APREQBODYi2d_KRB5_AUTHDATAi2d_KRB5_AUTHENTi2d_KRB5_AUTHENTBODYi2d_KRB5_CHECKSUMi2d_KRB5_ENCDATAi2d_KRB5_ENCKEYi2d_KRB5_PRINCNAMEi2d_KRB5_TICKETi2d_KRB5_TKTBODYi2d_NETSCAPE_CERT_SEQUENCEi2d_NETSCAPE_SPKACi2d_NETSCAPE_SPKIi2d_NETSCAPE_X509i2d_NOTICEREFi2d_Netscape_RSAi2d_OCSP_BASICRESPi2d_OCSP_CERTIDi2d_OCSP_CERTSTATUSi2d_OCSP_CRLIDi2d_OCSP_ONEREQi2d_OCSP_REQINFOi2d_OCSP_REQUESTi2d_OCSP_RESPBYTESi2d_OCSP_RESPDATAi2d_OCSP_RESPIDi2d_OCSP_RESPONSEi2d_OCSP_REVOKEDINFOi2d_OCSP_SERVICELOCi2d_OCSP_SIGNATUREi2d_OCSP_SINGLERESPi2d_OTHERNAMEi2d_PBE2PARAMi2d_PBEPARAMi2d_PBKDF2PARAMi2d_PKCS12i2d_PKCS12_BAGSi2d_PKCS12_MAC_DATAi2d_PKCS12_SAFEBAGi2d_PKCS12_bioi2d_PKCS12_fpi2d_PKCS7i2d_PKCS7_DIGESTi2d_PKCS7_ENCRYPTi2d_PKCS7_ENC_CONTENTi2d_PKCS7_ENVELOPEi2d_PKCS7_ISSUER_AND_SERIALi2d_PKCS7_NDEFi2d_PKCS7_RECIP_INFOi2d_PKCS7_SIGNEDi2d_PKCS7_SIGNER_INFOi2d_PKCS7_SIGN_ENVELOPEi2d_PKCS7_bioi2d_PKCS7_bio_streami2d_PKCS7_fpi2d_PKCS8PrivateKeyInfo_bioi2d_PKCS8PrivateKeyInfo_fpi2d_PKCS8PrivateKey_bioi2d_PKCS8PrivateKey_fpi2d_PKCS8PrivateKey_nid_bioi2d_PKCS8PrivateKey_nid_fpi2d_PKCS8_PRIV_KEY_INFOi2d_PKCS8_PRIV_KEY_INFO_bioi2d_PKCS8_PRIV_KEY_INFO_fpi2d_PKCS8_bioi2d_PKCS8_fpi2d_PKEY_USAGE_PERIODi2d_POLICYINFOi2d_POLICYQUALINFOi2d_PROXY_CERT_INFO_EXTENSIONi2d_PROXY_POLICYi2d_PUBKEYi2d_PUBKEY_bioi2d_PUBKEY_fpi2d_PrivateKeyi2d_PrivateKey_bioi2d_PrivateKey_fpi2d_PublicKeyi2d_RSAPrivateKeyi2d_RSAPrivateKey_bioi2d_RSAPrivateKey_fpi2d_RSAPublicKeyi2d_RSAPublicKey_bioi2d_RSAPublicKey_fpi2d_RSA_NETi2d_RSA_OAEP_PARAMSi2d_RSA_PSS_PARAMSi2d_RSA_PUBKEYi2d_RSA_PUBKEY_bioi2d_RSA_PUBKEY_fpi2d_SXNETi2d_SXNETIDi2d_TS_ACCURACYi2d_TS_MSG_IMPRINTi2d_TS_MSG_IMPRINT_bioi2d_TS_MSG_IMPRINT_fpi2d_TS_REQi2d_TS_REQ_bioi2d_TS_REQ_fpi2d_TS_RESPi2d_TS_RESP_bioi2d_TS_RESP_fpi2d_TS_STATUS_INFOi2d_TS_TST_INFOi2d_TS_TST_INFO_bioi2d_TS_TST_INFO_fpi2d_USERNOTICEi2d_X509i2d_X509_ALGORi2d_X509_ALGORSi2d_X509_ATTRIBUTEi2d_X509_AUXi2d_X509_CERT_AUXi2d_X509_CERT_PAIRi2d_X509_CINFi2d_X509_CRLi2d_X509_CRL_INFOi2d_X509_CRL_bioi2d_X509_CRL_fpi2d_X509_EXTENSIONi2d_X509_EXTENSIONSi2d_X509_NAMEi2d_X509_NAME_ENTRYi2d_X509_PKEYi2d_X509_PUBKEYi2d_X509_REQi2d_X509_REQ_INFOi2d_X509_REQ_bioi2d_X509_REQ_fpi2d_X509_REVOKEDi2d_X509_SIGi2d_X509_VALi2d_X509_bioi2d_X509_fpi2d_re_X509_tbsi2o_ECPublicKeyi2s_ASN1_ENUMERATEDi2s_ASN1_ENUMERATED_TABLEi2s_ASN1_INTEGERi2s_ASN1_OCTET_STRINGi2t_ASN1_OBJECTi2v_ASN1_BIT_STRINGi2v_GENERAL_NAMEi2v_GENERAL_NAMESidea_cbc_encryptidea_cfb64_encryptidea_ecb_encryptidea_encryptidea_ofb64_encryptidea_optionsidea_set_decrypt_keyidea_set_encrypt_keylh_deletelh_doalllh_doall_arglh_freelh_insertlh_newlh_node_statslh_node_stats_biolh_node_usage_statslh_node_usage_stats_biolh_num_itemslh_retrievelh_statslh_stats_biolh_strhashname_cmpo2i_ECPublicKeypitem_freepitem_newpqueue_findpqueue_freepqueue_insertpqueue_iteratorpqueue_newpqueue_nextpqueue_peekpqueue_poppqueue_printpqueue_sizeprivate_AES_set_decrypt_keyprivate_AES_set_encrypt_keyprivate_RC4_set_keys2i_ASN1_INTEGERs2i_ASN1_OCTET_STRINGsk_deep_copysk_deletesk_delete_ptrsk_dupsk_findsk_find_exsk_freesk_insertsk_is_sortedsk_newsk_new_nullsk_numsk_popsk_pop_freesk_pushsk_setsk_set_cmp_funcsk_shiftsk_sortsk_unshiftsk_valuesk_zerostring_to_hexv2i_ASN1_BIT_STRINGv2i_GENERAL_NAMEv2i_GENERAL_NAMESv2i_GENERAL_NAME_exLIBEAY32_NULL_THUNK_DATA LIBEAY32.dll/ 1485441930 0 498 ` d X.debug$SB@B.idata$2@0.idata$6@  LIBEAY32.dll' Microsoft (R) LINK LIBEAY32.dll@comp.id.idata$2@h.idata$6.idata$4@h.idata$5@h!:T__IMPORT_DESCRIPTOR_LIBEAY32__NULL_IMPORT_DESCRIPTORLIBEAY32_NULL_THUNK_DATALIBEAY32.dll/ 1485441930 0 251 ` d X.debug$SBd@B.idata$3@0 LIBEAY32.dll' Microsoft (R) LINK@comp.id__NULL_IMPORT_DESCRIPTOR LIBEAY32.dll/ 1485441930 0 288 ` d X.debug$SB@B.idata$5@@.idata$4@@ LIBEAY32.dll' Microsoft (R) LINK@comp.idLIBEAY32_NULL_THUNK_DATALIBEAY32.dll/ 1485441930 0 57 ` d X%ACCESS_DESCRIPTION_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X# ACCESS_DESCRIPTION_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ACCESS_DESCRIPTION_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X AES_bi_ige_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d Xc AES_cbc_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X AES_cfb128_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X AES_cfb1_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X AES_cfb8_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X AES_ctr128_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X AES_decryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X AES_ecb_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X AES_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XAES_ige_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X AES_ofb128_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X AES_optionsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!" AES_set_decrypt_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! AES_set_encrypt_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XYAES_unwrap_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XZAES_wrap_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X ASN1_ANY_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#ASN1_BIT_STRING_checkLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X" ASN1_BIT_STRING_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%$ASN1_BIT_STRING_get_bitLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X > ASN1_BIT_STRING_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(VASN1_BIT_STRING_name_printLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!ASN1_BIT_STRING_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%ASN1_BIT_STRING_num_ascLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!=ASN1_BIT_STRING_setLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%ASN1_BIT_STRING_set_ascLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%%ASN1_BIT_STRING_set_bitLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! ASN1_BMPSTRING_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X ASN1_BMPSTRING_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X ASN1_BMPSTRING_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XF ASN1_BOOLEAN_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"ASN1_ENUMERATED_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!ASN1_ENUMERATED_getLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X ASN1_ENUMERATED_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!ASN1_ENUMERATED_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!ASN1_ENUMERATED_setLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#ASN1_ENUMERATED_to_BNLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X ASN1_FBOOLEAN_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&ASN1_GENERALIZEDTIME_adjLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(ASN1_GENERALIZEDTIME_checkLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'tASN1_GENERALIZEDTIME_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%# ASN1_GENERALIZEDTIME_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&NASN1_GENERALIZEDTIME_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(ASN1_GENERALIZEDTIME_printLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&ASN1_GENERALIZEDTIME_setLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 65 ` d X-ASN1_GENERALIZEDTIME_set_stringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X% ASN1_GENERALSTRING_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X# ASN1_GENERALSTRING_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ ASN1_GENERALSTRING_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!ASN1_IA5STRING_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X ASN1_IA5STRING_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X ASN1_IA5STRING_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XASN1_INTEGER_cmpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XBASN1_INTEGER_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X?ASN1_INTEGER_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XASN1_INTEGER_getLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d Xb ASN1_INTEGER_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XSASN1_INTEGER_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XASN1_INTEGER_setLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X ASN1_INTEGER_to_BNLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XxASN1_NULL_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XN ASN1_NULL_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XzASN1_NULL_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X ASN1_OBJECT_createLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X ASN1_OBJECT_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d Xl ASN1_OBJECT_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X ASN1_OBJECT_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'= ASN1_OCTET_STRING_NDEF_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#ASN1_OCTET_STRING_cmpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#<ASN1_OCTET_STRING_dupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ASN1_OCTET_STRING_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" ASN1_OCTET_STRING_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#RASN1_OCTET_STRING_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#ASN1_OCTET_STRING_setLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XASN1_PCTX_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&FASN1_PCTX_get_cert_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!hASN1_PCTX_get_flagsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ASN1_PCTX_get_nm_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%ASN1_PCTX_get_oid_flagsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%ASN1_PCTX_get_str_flagsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X|ASN1_PCTX_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&ASN1_PCTX_set_cert_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! ASN1_PCTX_set_flagsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ASN1_PCTX_set_nm_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%cASN1_PCTX_set_oid_flagsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%(ASN1_PCTX_set_str_flagsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'ASN1_PRINTABLESTRING_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X% ASN1_PRINTABLESTRING_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&ASN1_PRINTABLESTRING_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! ASN1_PRINTABLE_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X- ASN1_PRINTABLE_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X ASN1_PRINTABLE_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! ASN1_PRINTABLE_typeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"4ASN1_SEQUENCE_ANY_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X ASN1_SEQUENCE_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XyASN1_SET_ANY_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#ASN1_STRING_TABLE_addLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'ASN1_STRING_TABLE_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#+ASN1_STRING_TABLE_getLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$X ASN1_STRING_clear_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XASN1_STRING_cmpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XASN1_STRING_copyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XASN1_STRING_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XASN1_STRING_dupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XASN1_STRING_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*ASN1_STRING_get_default_maskLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X ASN1_STRING_lengthLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$XASN1_STRING_length_setLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XASN1_STRING_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XASN1_STRING_printLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X" ASN1_STRING_print_exLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%~ ASN1_STRING_print_ex_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XASN1_STRING_setLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X]ASN1_STRING_set0LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$ASN1_STRING_set_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*ASN1_STRING_set_default_maskLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 66 ` d X.ASN1_STRING_set_default_mask_ascLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! ASN1_STRING_to_UTF8LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XASN1_STRING_typeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"ASN1_STRING_type_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!ASN1_T61STRING_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X ASN1_T61STRING_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X ASN1_T61STRING_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X_ ASN1_TBOOLEAN_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XASN1_TIME_adjLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X ASN1_TIME_checkLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XASN1_TIME_diffLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XASN1_TIME_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X ASN1_TIME_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XASN1_TIME_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XASN1_TIME_printLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XASN1_TIME_setLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"ASN1_TIME_set_stringLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*a ASN1_TIME_to_generalizedtimeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XLASN1_TYPE_cmpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XASN1_TYPE_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XASN1_TYPE_getLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+4ASN1_TYPE_get_int_octetstringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'5ASN1_TYPE_get_octetstringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XASN1_TYPE_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XASN1_TYPE_setLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X\ASN1_TYPE_set1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+6ASN1_TYPE_set_int_octetstringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'7ASN1_TYPE_set_octetstringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X' ASN1_UNIVERSALSTRING_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X% ASN1_UNIVERSALSTRING_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X& ASN1_UNIVERSALSTRING_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 64 ` d X,ASN1_UNIVERSALSTRING_to_stringLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XASN1_UTCTIME_adjLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X ASN1_UTCTIME_checkLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% ASN1_UTCTIME_cmp_time_tLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XASN1_UTCTIME_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X ASN1_UTCTIME_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X ASN1_UTCTIME_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X ASN1_UTCTIME_printLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XASN1_UTCTIME_setLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%8ASN1_UTCTIME_set_stringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X",ASN1_UTF8STRING_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X ASN1_UTF8STRING_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!ASN1_UTF8STRING_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%FASN1_VISIBLESTRING_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#1 ASN1_VISIBLESTRING_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ASN1_VISIBLESTRING_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!r ASN1_add_oid_moduleLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XASN1_bn_printLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%ASN1_check_infinite_endLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+'ASN1_const_check_infinite_endLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XASN1_d2i_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XASN1_d2i_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XASN1_digestLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d XASN1_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! ASN1_generate_nconfLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X ASN1_generate_v3LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X ASN1_get_objectLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X!ASN1_i2d_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X"ASN1_i2d_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X ASN1_item_d2iLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X ASN1_item_d2i_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X4 ASN1_item_d2i_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X ASN1_item_digestLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X ASN1_item_dupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X ASN1_item_ex_d2iLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XE ASN1_item_ex_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X ASN1_item_ex_i2dLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X ASN1_item_ex_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X? ASN1_item_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X_ ASN1_item_i2dLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X* ASN1_item_i2d_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X ASN1_item_i2d_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X ASN1_item_ndef_i2dLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X` ASN1_item_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X@ ASN1_item_packLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XASN1_item_printLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X ASN1_item_signLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X ?ASN1_item_sign_ctxLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XP ASN1_item_unpackLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X ASN1_item_verifyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X ASN1_mbstring_copyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!KASN1_mbstring_ncopyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X#ASN1_object_sizeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XASN1_pack_stringLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X$ASN1_parseLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X{ ASN1_parse_dumpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! ASN1_primitive_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X , ASN1_primitive_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X ASN1_put_eocLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X%ASN1_put_objectLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XASN1_seq_packLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XASN1_seq_unpackLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d X&ASN1_signLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X ASN1_tag2bitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XqASN1_tag2strLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X ASN1_template_d2iLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X ASN1_template_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X ASN1_template_i2dLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X ASN1_template_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X ASN1_unpack_stringLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X'ASN1_verifyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(AUTHORITY_INFO_ACCESS_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X& AUTHORITY_INFO_ACCESS_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'AUTHORITY_INFO_ACCESS_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"AUTHORITY_KEYID_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X A AUTHORITY_KEYID_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!AUTHORITY_KEYID_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$BASIC_CONSTRAINTS_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"j BASIC_CONSTRAINTS_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#BASIC_CONSTRAINTS_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X(BF_cbc_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X)BF_cfb64_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XBF_decryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X*BF_ecb_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X+BF_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X,BF_ofb64_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X-BF_optionsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X.BF_set_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d Xb BIGNUM_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d X3BIO_acceptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!%BIO_asn1_get_prefixLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!jBIO_asn1_get_suffixLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!MBIO_asn1_set_prefixLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!XBIO_asn1_set_suffixLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XBIO_callback_ctrlLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XBIO_clear_flagsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!BIO_copy_next_retryLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d X4BIO_ctrlLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'BIO_ctrl_get_read_requestLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X* BIO_ctrl_get_write_guaranteeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XBIO_ctrl_pendingLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)rBIO_ctrl_reset_read_requestLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X BIO_ctrl_wpendingLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X 6BIO_debug_callbackLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'BIO_dgram_non_fatal_errorLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d X7BIO_dumpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XBIO_dump_cbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X* BIO_dump_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d Xz BIO_dump_indentLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X qBIO_dump_indent_cbLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X BIO_dump_indent_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X8BIO_dup_chainLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d X BIO_f_asn1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X9BIO_f_base64LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X:BIO_f_bufferLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X;BIO_f_cipherLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d X<BIO_f_mdLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XBIO_f_nbio_testLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d X=BIO_f_nullLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XBIO_f_reliableLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$?BIO_fd_non_fatal_errorLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!@BIO_fd_should_retryLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XABIO_find_typeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d XBBIO_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XCBIO_free_allLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#EBIO_get_accept_socketLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XBIO_get_callbackLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X">BIO_get_callback_argLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X&BIO_get_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"'BIO_get_ex_new_indexLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XGBIO_get_host_ipLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XHBIO_get_portLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XIBIO_get_retry_BIOLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"JBIO_get_retry_reasonLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XKBIO_gethostbynameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d XLBIO_getsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XBIO_hex_stringLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X BIO_indentLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X5BIO_int_ctrlLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X:BIO_method_nameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XBIO_method_typeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 41 ` d XNBIO_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XOBIO_new_CMSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X9BIO_new_NDEFLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XBIO_new_PKCS7LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XOBIO_new_acceptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X BIO_new_bio_pairLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XPBIO_new_connectLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X BIO_new_dgramLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XQBIO_new_fdLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XRBIO_new_fileLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XSBIO_new_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XZBIO_new_mem_bufLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XTBIO_new_socketLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d X BIO_nextLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d XTBIO_nreadLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XXBIO_nread0LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XBIO_number_readLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X BIO_number_writtenLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XRBIO_nwriteLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XVBIO_nwrite0LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 41 ` d XUBIO_popLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XVBIO_printfLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XBIO_ptr_ctrlLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d XWBIO_pushLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d XXBIO_putsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d XYBIO_readLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XZBIO_s_acceptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d XBIO_s_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XIO_s_connectLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X BIO_s_datagramLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d X\BIO_s_fdLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X]BIO_s_fileLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d X_BIO_s_memLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d X`BIO_s_nullLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XbBIO_s_socketLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 41 ` d XdBIO_setLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X?BIO_set_callbackLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"BIO_set_callback_argLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XeBIO_set_cipherLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X(BIO_set_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XBIO_set_flagsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X fBIO_set_tcp_ndelayLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XBIO_snprintfLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XgBIO_sock_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XhBIO_sock_errorLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XiBIO_sock_initLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&jBIO_sock_non_fatal_errorLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#kBIO_sock_should_retryLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XlBIO_socket_ioctlLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XNBIO_socket_nbioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XBIO_test_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d X BIO_vfreeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X BIO_vprintfLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X BIO_vsnprintfLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d XmBIO_writeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!BN_BLINDING_convertLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ BN_BLINDING_convert_exLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&yBN_BLINDING_create_paramLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XBN_BLINDING_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#BN_BLINDING_get_flagsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X' BN_BLINDING_get_thread_idLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X BN_BLINDING_invertLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X# BN_BLINDING_invert_exLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XBN_BLINDING_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#S BN_BLINDING_set_flagsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'BN_BLINDING_set_thread_idLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#BN_BLINDING_thread_idLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X BN_BLINDING_updateLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XBN_CTX_endLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XnBN_CTX_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XBN_CTX_getLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XoBN_CTX_initLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XoBN_CTX_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XBN_CTX_startLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X BN_GENCB_callLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X BN_GF2m_addLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X BN_GF2m_arr2polyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X BN_GF2m_modLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d Xg BN_GF2m_mod_arrLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X\ BN_GF2m_mod_divLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!BN_GF2m_mod_div_arrLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XBN_GF2m_mod_expLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!! BN_GF2m_mod_exp_arrLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X BN_GF2m_mod_invLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!BN_GF2m_mod_inv_arrLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X BN_GF2m_mod_mulLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!& BN_GF2m_mod_mul_arrLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$EBN_GF2m_mod_solve_quadLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(Y BN_GF2m_mod_solve_quad_arrLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XE BN_GF2m_mod_sqrLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! BN_GF2m_mod_sqr_arrLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X BN_GF2m_mod_sqrtLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"{ BN_GF2m_mod_sqrt_arrLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X BN_GF2m_poly2arrLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XUBN_MONT_CTX_copyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XpBN_MONT_CTX_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XpBN_MONT_CTX_initLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XqBN_MONT_CTX_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XrBN_MONT_CTX_setLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ BN_MONT_CTX_set_lockedLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XjBN_RECP_CTX_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XhBN_RECP_CTX_initLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XiBN_RECP_CTX_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XkBN_RECP_CTX_setLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%BN_X931_derive_prime_exLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X" BN_X931_generate_XpqLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'BN_X931_generate_prime_exLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 40 ` d XsBN_addLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XtBN_add_wordLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d X_BN_asc2bnLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d XvBN_bin2bnLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d XxBN_bn2binLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d XBN_bn2decLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d XwBN_bn2hexLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d X"BN_bn2mpiLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X BN_bntest_randLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d XyBN_clearLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XzBN_clear_bitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X{BN_clear_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 40 ` d X|BN_cmpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XCBN_consttime_swapLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 41 ` d X}BN_copyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d XBN_dec2bnLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 40 ` d X~BN_divLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XnBN_div_recpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XBN_div_wordLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 40 ` d XBN_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 40 ` d XBN_expLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 41 ` d XBN_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X BN_from_montgomeryLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 40 ` d XBN_gcdLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XBN_generate_primeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"~BN_generate_prime_exLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$ BN_get0_nist_prime_192LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$ BN_get0_nist_prime_224LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$-BN_get0_nist_prime_256LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$ BN_get0_nist_prime_384LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$|BN_get0_nist_prime_521LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XBN_get_paramsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XBN_get_wordLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d XuBN_hex2bnLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 41 ` d XGBN_initLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XBN_is_bit_setLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XBN_is_primeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X BN_is_prime_exLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"BN_is_prime_fasttestLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%BN_is_prime_fasttest_exLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X BN_kroneckerLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d XBN_lshiftLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XBN_lshift1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XBN_mask_bitsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X BN_mod_addLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d Xk BN_mod_add_quickLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XBN_mod_expLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XBN_mod_exp2_montLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XBN_mod_exp_montLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X' BN_mod_exp_mont_consttimeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"a BN_mod_exp_mont_wordLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XmBN_mod_exp_recpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XBN_mod_exp_simpleLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XBN_mod_inverseLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X0 BN_mod_lshiftLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XO BN_mod_lshift1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" BN_mod_lshift1_quickLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!= BN_mod_lshift_quickLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XBN_mod_mulLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#BN_mod_mul_montgomeryLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#lBN_mod_mul_reciprocalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d X BN_mod_sqrLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X BN_mod_sqrtLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d X BN_mod_subLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d Xu BN_mod_sub_quickLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XBN_mod_wordLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d X#BN_mpi2bnLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 40 ` d XBN_mulLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XBN_mul_wordLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 40 ` d XBN_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X BN_nist_mod_192LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X BN_nist_mod_224LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XvBN_nist_mod_256LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X9BN_nist_mod_384LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XBN_nist_mod_521LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d X. BN_nnmodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XBN_num_bitsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XBN_num_bits_wordLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XBN_optionsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d XBN_printLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XBN_print_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XBN_pseudo_randLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" BN_pseudo_rand_rangeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 41 ` d XBN_randLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X BN_rand_rangeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XBN_reciprocalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d XBN_rshiftLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XBN_rshift1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XBN_set_bitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X3BN_set_negativeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XBN_set_paramsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XBN_set_wordLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 40 ` d XBN_sqrLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 40 ` d XBN_subLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XBN_sub_wordLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 41 ` d X BN_swapLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#BN_to_ASN1_ENUMERATEDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X BN_to_ASN1_INTEGERLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 41 ` d XBN_uaddLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 41 ` d XBN_ucmpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 41 ` d XBN_usubLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XBN_value_oneLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XBUF_MEM_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XBUF_MEM_growLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X BUF_MEM_grow_cleanLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XBUF_MEM_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d X BUF_memdupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XBUF_reverseLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XBUF_strdupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X BUF_strlcatLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X BUF_strlcpyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X BUF_strndupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XBUF_strnlenLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XCAST_cbc_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X CAST_cfb64_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XCAST_decryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XCAST_ecb_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XCAST_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X CAST_ofb64_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XCAST_set_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X CBIGNUM_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&CERTIFICATEPOLICIES_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$ CERTIFICATEPOLICIES_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%CERTIFICATEPOLICIES_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X CMAC_CTX_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X CMAC_CTX_copyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X CMAC_CTX_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X& CMAC_CTX_get0_cipher_ctxLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XCMAC_CTX_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XCMAC_FinalLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d XCMAC_InitLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XCMAC_UpdateLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XCMAC_resumeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"|CMS_ContentInfo_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X CMS_ContentInfo_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!CMS_ContentInfo_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'1CMS_ContentInfo_print_ctxLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'CMS_EncryptedData_decryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'CMS_EncryptedData_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(CMS_EncryptedData_set1_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&sCMS_EnvelopedData_createLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(CMS_ReceiptRequest_create0LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%bCMS_ReceiptRequest_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 64 ` d X,CMS_ReceiptRequest_get0_valuesLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#CMS_ReceiptRequest_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$CMS_ReceiptRequest_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 68 ` d X0~CMS_RecipientEncryptedKey_cert_cmpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 67 ` d X/CMS_RecipientEncryptedKey_get0_idLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'CMS_RecipientInfo_decryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'hCMS_RecipientInfo_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 65 ` d X-CMS_RecipientInfo_get0_pkey_ctxLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 64 ` d X,tCMS_RecipientInfo_kari_decryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 65 ` d X-yCMS_RecipientInfo_kari_get0_algLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 65 ` d X-CMS_RecipientInfo_kari_get0_ctxLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 69 ` d X1CMS_RecipientInfo_kari_get0_orig_idLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 66 ` d X.CMS_RecipientInfo_kari_get0_reksLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 68 ` d X0xCMS_RecipientInfo_kari_orig_id_cmpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 66 ` d X.CMS_RecipientInfo_kari_set0_pkeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 65 ` d X-CMS_RecipientInfo_kekri_get0_idLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 64 ` d X,CMS_RecipientInfo_kekri_id_cmpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 65 ` d X-zCMS_RecipientInfo_ktri_cert_cmpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 66 ` d X.{CMS_RecipientInfo_ktri_get0_algsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 71 ` d X3CMS_RecipientInfo_ktri_get0_signer_idLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(CMS_RecipientInfo_set0_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 65 ` d X-4CMS_RecipientInfo_set0_passwordLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)CMS_RecipientInfo_set0_pkeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$CMS_RecipientInfo_typeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#CMS_SharedInfo_encodeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!CMS_SignedData_initLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%CMS_SignerInfo_cert_cmpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&oCMS_SignerInfo_get0_algsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(CMS_SignerInfo_get0_md_ctxLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*uCMS_SignerInfo_get0_pkey_ctxLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+CMS_SignerInfo_get0_signatureLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+CMS_SignerInfo_get0_signer_idLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 65 ` d X-CMS_SignerInfo_set1_signer_certLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!CMS_SignerInfo_signLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#CMS_SignerInfo_verifyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+vCMS_SignerInfo_verify_contentLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)dCMS_add0_CertificateChoicesLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+CMS_add0_RevocationInfoChoiceLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XCMS_add0_certLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XuCMS_add0_crlLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$CMS_add0_recipient_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)2CMS_add0_recipient_passwordLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%CMS_add1_ReceiptRequestLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XpCMS_add1_certLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X5CMS_add1_crlLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%CMS_add1_recipient_certLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XCMS_add1_signerLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%~CMS_add_simple_smimecapLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XCMS_add_smimecapLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'CMS_add_standard_smimecapLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XCMS_compressLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d XCMS_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XCMS_dataFinalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XCMS_dataInitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XCMS_data_createLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XCMS_decryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"nCMS_decrypt_set1_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'3CMS_decrypt_set1_passwordLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#CMS_decrypt_set1_pkeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XCMS_digest_createLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XCMS_digest_verifyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XrCMS_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d X}CMS_finalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%CMS_get0_RecipientInfosLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"CMS_get0_SignerInfosLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XCMS_get0_contentLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#CMS_get0_eContentTypeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XCMS_get0_signersLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XCMS_get0_typeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%CMS_get1_ReceiptRequestLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XCMS_get1_certsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XCMS_get1_crlsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XCMS_is_detachedLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#CMS_set1_eContentTypeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$CMS_set1_signers_certsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XqCMS_set_detachedLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d XCMS_signLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XgCMS_sign_receiptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"CMS_signed_add1_attrLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)CMS_signed_add1_attr_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)CMS_signed_add1_attr_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)CMS_signed_add1_attr_by_txtLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$iCMS_signed_delete_attrLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)CMS_signed_get0_data_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!CMS_signed_get_attrLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(CMS_signed_get_attr_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(CMS_signed_get_attr_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'CMS_signed_get_attr_countLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XCMS_streamLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XtCMS_uncompressLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$CMS_unsigned_add1_attrLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+CMS_unsigned_add1_attr_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+eCMS_unsigned_add1_attr_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+CMS_unsigned_add1_attr_by_txtLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&CMS_unsigned_delete_attrLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+wCMS_unsigned_get0_data_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#yCMS_unsigned_get_attrLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X*kCMS_unsigned_get_attr_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*CMS_unsigned_get_attr_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)CMS_unsigned_get_attr_countLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XlCMS_verifyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X CMS_verify_receiptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XICOMP_CTX_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XHCOMP_CTX_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!xCOMP_compress_blockLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XyCOMP_expand_blockLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d XzCOMP_rleLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d X{COMP_zlibLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X`COMP_zlib_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XCONF_dump_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XCONF_dump_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d XCONF_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+z CONF_get1_default_config_fileLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XCONF_get_numberLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XCONF_get_sectionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XCONF_get_stringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X${ CONF_imodule_get_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%| CONF_imodule_get_moduleLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#~ CONF_imodule_get_nameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X' CONF_imodule_get_usr_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$v CONF_imodule_get_valueLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$ CONF_imodule_set_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'o CONF_imodule_set_usr_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d XCONF_loadLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X CONF_load_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XCONF_load_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d Xy CONF_module_addLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&q CONF_module_get_usr_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&w CONF_module_set_usr_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!s CONF_modules_finishLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X CONF_modules_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X} CONF_modules_loadLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$n CONF_modules_load_fileLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!u CONF_modules_unloadLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d Xx CONF_parse_listLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%CONF_set_default_methodLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X CONF_set_nconfLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"CRL_DIST_POINTS_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X 5 CRL_DIST_POINTS_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!CRL_DIST_POINTS_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XrCRYPTO_128_unwrapLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XpCRYPTO_128_wrapLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!PCRYPTO_THREADID_cmpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!ECRYPTO_THREADID_cpyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%CRYPTO_THREADID_currentLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X*@CRYPTO_THREADID_get_callbackLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"0CRYPTO_THREADID_hashLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*CRYPTO_THREADID_set_callbackLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)CRYPTO_THREADID_set_numericLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)?CRYPTO_THREADID_set_pointerLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XCRYPTO_add_lockLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#CRYPTO_cbc128_decryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#CRYPTO_cbc128_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X)CRYPTO_ccm128_aadLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#(CRYPTO_ccm128_decryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)CRYPTO_ccm128_decrypt_ccm64LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#CRYPTO_ccm128_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)CRYPTO_ccm128_encrypt_ccm64LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X $CRYPTO_ccm128_initLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!!CRYPTO_ccm128_setivLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X'CRYPTO_ccm128_tagLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%CRYPTO_cfb128_1_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%CRYPTO_cfb128_8_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#CRYPTO_cfb128_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(, CRYPTO_cleanup_all_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#CRYPTO_ctr128_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)CRYPTO_ctr128_encrypt_ctr32LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#CRYPTO_cts128_decryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)CRYPTO_cts128_decrypt_blockLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#CRYPTO_cts128_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)CRYPTO_cts128_encrypt_blockLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XCRYPTO_dbg_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$CRYPTO_dbg_get_optionsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XCRYPTO_dbg_mallocLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X CRYPTO_dbg_reallocLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$mCRYPTO_dbg_set_optionsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&m CRYPTO_destroy_dynlockidLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X CRYPTO_dup_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X& CRYPTO_ex_data_new_classLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XCRYPTO_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!CRYPTO_free_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X CRYPTO_free_lockedLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X#CRYPTO_gcm128_aadLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#+CRYPTO_gcm128_decryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)-CRYPTO_gcm128_decrypt_ctr32LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#CRYPTO_gcm128_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X).CRYPTO_gcm128_encrypt_ctr32LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"/CRYPTO_gcm128_finishLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X *CRYPTO_gcm128_initLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X&CRYPTO_gcm128_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#CRYPTO_gcm128_releaseLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!CRYPTO_gcm128_setivLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XCRYPTO_gcm128_tagLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X*CRYPTO_get_add_lock_callbackLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 68 ` d X0t CRYPTO_get_dynlock_create_callbackLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 69 ` d X1r CRYPTO_get_dynlock_destroy_callbackLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 66 ` d X.q CRYPTO_get_dynlock_lock_callbackLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&s CRYPTO_get_dynlock_valueLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X CRYPTO_get_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 67 ` d X/? CRYPTO_get_ex_data_implementationLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%CRYPTO_get_ex_new_indexLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$CRYPTO_get_id_callbackLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"CRYPTO_get_lock_nameLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 68 ` d X0 CRYPTO_get_locked_mem_ex_functionsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 65 ` d X-CRYPTO_get_locked_mem_functionsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)CRYPTO_get_locking_callbackLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 64 ` d X,oCRYPTO_get_mem_debug_functionsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*CRYPTO_get_mem_debug_optionsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)' CRYPTO_get_mem_ex_functionsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&CRYPTO_get_mem_functionsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&j CRYPTO_get_new_dynlockidLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#CRYPTO_get_new_lockidLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$pCRYPTO_is_mem_check_onLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XCRYPTO_lockLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XCRYPTO_mallocLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"CRYPTO_malloc_lockedLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XCRYPTO_mem_ctrlLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XCRYPTO_mem_leaksLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!CRYPTO_mem_leaks_cbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!CRYPTO_mem_leaks_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XBCRYPTO_memcmpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X CRYPTO_new_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'%CRYPTO_nistcts128_decryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 65 ` d X-CRYPTO_nistcts128_decrypt_blockLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'CRYPTO_nistcts128_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 65 ` d X-"CRYPTO_nistcts128_encrypt_blockLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X CRYPTO_num_locksLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#CRYPTO_ofb128_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XrCRYPTO_pop_infoLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XsCRYPTO_push_info_LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XCRYPTO_reallocLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" CRYPTO_realloc_cleanLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XCRYPTO_remallocLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$nCRYPTO_remove_all_infoLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*CRYPTO_set_add_lock_callbackLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 68 ` d X0o CRYPTO_set_dynlock_create_callbackLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 69 ` d X1l CRYPTO_set_dynlock_destroy_callbackLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 66 ` d X.p CRYPTO_set_dynlock_lock_callbackLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X CRYPTO_set_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 67 ` d X/ CRYPTO_set_ex_data_implementationLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$CRYPTO_set_id_callbackLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 68 ` d X0 CRYPTO_set_locked_mem_ex_functionsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 65 ` d X-CRYPTO_set_locked_mem_functionsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)CRYPTO_set_locking_callbackLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 64 ` d X,qCRYPTO_set_mem_debug_functionsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*tCRYPTO_set_mem_debug_optionsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X) CRYPTO_set_mem_ex_functionsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&CRYPTO_set_mem_functionsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XCRYPTO_strdupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XCRYPTO_thread_idLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#CRYPTO_xts128_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"Camellia_cbc_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%Camellia_cfb128_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#Camellia_cfb1_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#Camellia_cfb8_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%Camellia_ctr128_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XCamellia_decryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"Camellia_ecb_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XCamellia_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%Camellia_ofb128_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XCamellia_set_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X DES_cbc_cksumLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X DES_cbc_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X DES_cfb64_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X DES_cfb_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"DES_check_key_parityLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d XDES_cryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XDES_decrypt3LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XDES_ecb3_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XDES_ecb_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"DES_ede3_cbc_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#DES_ede3_cbcm_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$DES_ede3_cfb64_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" DES_ede3_cfb_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$DES_ede3_ofb64_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XDES_enc_readLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XDES_enc_writeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XDES_encrypt1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XDES_encrypt2LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XDES_encrypt3LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XDES_fcryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XDES_is_weak_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XDES_key_schedLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XDES_ncbc_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XDES_ofb64_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XDES_ofb_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XDES_optionsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X DES_pcbc_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X!DES_quad_cksumLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X"DES_random_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! DES_read_2passwordsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X DES_read_passwordLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X(DES_set_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!`DES_set_key_checkedLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#cDES_set_key_uncheckedLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X )DES_set_odd_parityLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!*DES_string_to_2keysLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X+DES_string_to_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X,DES_xcbc_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XDH_KDF_X9_42LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XbDH_OpenSSLLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d XDH_checkLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XDH_check_pub_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XDH_compute_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#|DH_compute_key_paddedLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 41 ` d XDH_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XDH_generate_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$DH_generate_parametersLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'DH_generate_parameters_exLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XMDH_get_1024_160LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XSDH_get_2048_224LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XQDH_get_2048_256LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#dDH_get_default_methodLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X^DH_get_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!_DH_get_ex_new_indexLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 40 ` d XDH_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XaDH_new_methodLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#fDH_set_default_methodLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X[DH_set_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X\DH_set_methodLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 41 ` d XDH_sizeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d Xr DH_up_refLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XDHparams_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XDHparams_printLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XDHparams_print_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"DIRECTORYSTRING_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X DIRECTORYSTRING_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!YDIRECTORYSTRING_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XDISPLAYTEXT_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X DISPLAYTEXT_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XsDISPLAYTEXT_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X" DIST_POINT_NAME_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X DIST_POINT_NAME_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! DIST_POINT_NAME_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XDIST_POINT_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X DIST_POINT_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XDIST_POINT_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#wDIST_POINT_set_dpnameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X]DSA_OpenSSLLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X6DSA_SIG_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X5DSA_SIG_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X7DSA_do_signLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X8DSA_do_verifyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XODSA_dup_DHLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d XDSA_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XDSA_generate_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%DSA_generate_parametersLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(gDSA_generate_parameters_exLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$DSA_get_default_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XgDSA_get_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"cDSA_get_ex_new_indexLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 41 ` d XDSA_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X`DSA_new_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d XDSA_printLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XDSA_print_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$DSA_set_default_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XeDSA_set_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XDSA_set_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d XDSA_signLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XDSA_sign_setupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d XDSA_sizeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X DSA_up_refLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XDSA_verifyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XDSAparams_dupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XDSAparams_printLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X DSAparams_print_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XDSO_METHOD_beosLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XDSO_METHOD_dlLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XDSO_METHOD_dlfcnLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XDSO_METHOD_nullLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X DSO_METHOD_opensslLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X DSO_METHOD_vmsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XDSO_METHOD_win32LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d Xi DSO_bind_funcLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XDSO_bind_varLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X": DSO_convert_filenameLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d XDSO_ctrlLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d XDSO_flagsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d XDSO_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$DSO_get_default_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X+ DSO_get_filenameLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% DSO_get_loaded_filenameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XDSO_get_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XcDSO_global_lookupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d XDSO_loadLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d XDSO_mergeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 41 ` d XDSO_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XDSO_new_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XDSO_pathbyaddrLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$DSO_set_default_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X> DSO_set_filenameLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XDSO_set_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$! DSO_set_name_converterLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X DSO_up_refLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XECDH_KDF_X9_62LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d Xr ECDH_OpenSSLLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X<ECDH_compute_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% ECDH_get_default_methodLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xn ECDH_get_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#ECDH_get_ex_new_indexLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X% ECDH_set_default_methodLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XECDH_set_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XECDH_set_methodLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XECDSA_METHOD_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'ECDSA_METHOD_get_app_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XECDSA_METHOD_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'ECDSA_METHOD_set_app_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$vECDSA_METHOD_set_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#sECDSA_METHOD_set_nameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#}ECDSA_METHOD_set_signLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)wECDSA_METHOD_set_sign_setupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%ECDSA_METHOD_set_verifyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X$ECDSA_OpenSSLLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X ECDSA_SIG_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XC ECDSA_SIG_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d Xp ECDSA_do_signLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XWECDSA_do_sign_exLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XXECDSA_do_verifyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X& ECDSA_get_default_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X ECDSA_get_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ECDSA_get_ex_new_indexLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&)ECDSA_set_default_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XECDSA_set_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XECDSA_set_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XECDSA_signLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XK ECDSA_sign_exLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XX ECDSA_sign_setupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XzECDSA_sizeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XRECDSA_verifyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"ECPKParameters_printLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%} ECPKParameters_print_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X ECParameters_printLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#hECParameters_print_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#EC_GF2m_simple_methodLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X EC_GFp_mont_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X EC_GFp_nist_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" EC_GFp_simple_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X EC_GROUP_checkLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X), EC_GROUP_check_discriminantLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! EC_GROUP_clear_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X+EC_GROUP_cmpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X EC_GROUP_copyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XMEC_GROUP_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X= EC_GROUP_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X% EC_GROUP_get0_generatorLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X EC_GROUP_get0_seedLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$EC_GROUP_get_asn1_flagLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%5EC_GROUP_get_basis_typeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#{ EC_GROUP_get_cofactorLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X% EC_GROUP_get_curve_GF2mLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ EC_GROUP_get_curve_GFpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%oEC_GROUP_get_curve_nameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! EC_GROUP_get_degreeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$EC_GROUP_get_mont_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X EC_GROUP_get_orderLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 64 ` d X,Q EC_GROUP_get_pentanomial_basisLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 68 ` d X0M EC_GROUP_get_point_conversion_formLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X# EC_GROUP_get_seed_lenLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X* EC_GROUP_get_trinomial_basisLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+e EC_GROUP_have_precompute_multLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X  EC_GROUP_method_ofLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X EC_GROUP_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(EC_GROUP_new_by_curve_nameLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%6 EC_GROUP_new_curve_GF2mLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$E EC_GROUP_new_curve_GFpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X& EC_GROUP_precompute_multLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$EC_GROUP_set_asn1_flagLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% EC_GROUP_set_curve_GF2mLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ EC_GROUP_set_curve_GFpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% EC_GROUP_set_curve_nameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ EC_GROUP_set_generatorLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 68 ` d X0!EC_GROUP_set_point_conversion_formLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X EC_GROUP_set_seedLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XEC_KEY_check_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X EC_KEY_clear_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X) EC_KEY_copyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XEC_KEY_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X^ EC_KEY_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! EC_KEY_generate_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X EC_KEY_get0_groupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%EC_KEY_get0_private_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ EC_KEY_get0_public_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"< EC_KEY_get_conv_formLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"&EC_KEY_get_enc_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XEC_KEY_get_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(J EC_KEY_get_key_method_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+ EC_KEY_insert_key_method_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XOEC_KEY_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X& EC_KEY_new_by_curve_nameLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$. EC_KEY_precompute_multLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XEC_KEY_printLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d Xf EC_KEY_print_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"H EC_KEY_set_asn1_flagLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"s EC_KEY_set_conv_formLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"QEC_KEY_set_enc_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XEC_KEY_set_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X EC_KEY_set_groupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$ EC_KEY_set_private_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#bEC_KEY_set_public_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 74 ` d X6EC_KEY_set_public_key_affine_coordinatesLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XZ EC_KEY_up_refLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X& EC_METHOD_get_field_typeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X EC_POINT_addLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XF EC_POINT_bn2pointLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! EC_POINT_clear_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X EC_POINT_cmpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X EC_POINT_copyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X EC_POINT_dblLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d Xt EC_POINT_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d Xq EC_POINT_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 74 ` d X6 EC_POINT_get_Jprojective_coordinates_GFpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 70 ` d X2LEC_POINT_get_affine_coordinates_GF2mLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 69 ` d X1] EC_POINT_get_affine_coordinates_GFpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X EC_POINT_hex2pointLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XP EC_POINT_invertLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%8 EC_POINT_is_at_infinityLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X" EC_POINT_is_on_curveLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"* EC_POINT_make_affineLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X $ EC_POINT_method_ofLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X EC_POINT_mulLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d Xl EC_POINT_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X  EC_POINT_oct2pointLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X3 EC_POINT_point2bnLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X SEC_POINT_point2hexLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X j EC_POINT_point2octLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 74 ` d X6 EC_POINT_set_Jprojective_coordinates_GFpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 70 ` d X2 EC_POINT_set_affine_coordinates_GF2mLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 69 ` d X13 EC_POINT_set_affine_coordinates_GFpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 74 ` d X6*EC_POINT_set_compressed_coordinates_GF2mLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 73 ` d X5% EC_POINT_set_compressed_coordinates_GFpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&h EC_POINT_set_to_infinityLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X# EC_POINTs_make_affineLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X| EC_POINTs_mulLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XPEC_curve_nid2nistLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XLEC_curve_nist2nidLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#w EC_get_builtin_curvesLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XC EDIPARTYNAME_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X EDIPARTYNAME_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xo EDIPARTYNAME_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X ENGINE_addLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$ ENGINE_add_conf_moduleLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X ENGINE_by_idLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X ENGINE_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X& ENGINE_cmd_is_executableLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X ENGINE_ctrlLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XT ENGINE_ctrl_cmdLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$D ENGINE_ctrl_cmd_stringLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X ENGINE_finishLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X ENGINE_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X ENGINE_get_DHLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X ENGINE_get_DSALIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XENGINE_get_ECDHLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XENGINE_get_ECDSALIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X ENGINE_get_RANDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X ENGINE_get_RSALIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XTENGINE_get_STORELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X ENGINE_get_cipherLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X& ENGINE_get_cipher_engineLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X ENGINE_get_ciphersLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"b ENGINE_get_cmd_defnsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X& ENGINE_get_ctrl_functionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X# ENGINE_get_default_DHLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ ENGINE_get_default_DSALIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%; ENGINE_get_default_ECDHLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&NENGINE_get_default_ECDSALIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% ENGINE_get_default_RANDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ ENGINE_get_default_RSALIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X) ENGINE_get_destroy_functionLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X ENGINE_get_digestLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X& ENGINE_get_digest_engineLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X ENGINE_get_digestsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X ( ENGINE_get_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% ENGINE_get_ex_new_indexLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X( ENGINE_get_finish_functionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X ENGINE_get_firstLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X_ ENGINE_get_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X ENGINE_get_idLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X& ENGINE_get_init_functionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X ENGINE_get_lastLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 66 ` d X.d ENGINE_get_load_privkey_functionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 65 ` d X- ENGINE_get_load_pubkey_functionLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X ENGINE_get_nameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X ENGINE_get_nextLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'7ENGINE_get_pkey_asn1_methLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 66 ` d X.,ENGINE_get_pkey_asn1_meth_engineLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+)ENGINE_get_pkey_asn1_meth_strLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(ENGINE_get_pkey_asn1_methsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X":ENGINE_get_pkey_methLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)IENGINE_get_pkey_meth_engineLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#ENGINE_get_pkey_methsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X ENGINE_get_prevLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 69 ` d X1ENGINE_get_ssl_client_cert_functionLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%A ENGINE_get_static_stateLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$G ENGINE_get_table_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X ENGINE_initLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X) ENGINE_load_builtin_enginesLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#9 ENGINE_load_cryptodevLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! ENGINE_load_dynamicLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!a ENGINE_load_opensslLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X% ENGINE_load_private_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ ENGINE_load_public_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X ENGINE_load_rdrandLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)ENGINE_load_ssl_client_certLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d X ENGINE_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'ENGINE_pkey_asn1_find_strLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X  ENGINE_register_DHLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! ENGINE_register_DSALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X" ENGINE_register_ECDHLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X# ENGINE_register_ECDSALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"1 ENGINE_register_RANDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!h ENGINE_register_RSALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#eENGINE_register_STORELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$[ ENGINE_register_all_DHLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%f ENGINE_register_all_DSALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&>ENGINE_register_all_ECDHLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'JENGINE_register_all_ECDSALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X& ENGINE_register_all_RANDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% ENGINE_register_all_RSALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X' ENGINE_register_all_STORELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X) ENGINE_register_all_ciphersLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X* ENGINE_register_all_completeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)M ENGINE_register_all_digestsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 69 ` d X1.ENGINE_register_all_pkey_asn1_methsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 64 ` d X,ENGINE_register_all_pkey_methsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%< ENGINE_register_ciphersLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&} ENGINE_register_completeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%I ENGINE_register_digestsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 65 ` d X-ENGINE_register_pkey_asn1_methsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(!ENGINE_register_pkey_methsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X ENGINE_removeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X ENGINE_set_DHLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X ENGINE_set_DSALIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X ENGINE_set_ECDHLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XENGINE_set_ECDSALIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X ENGINE_set_RANDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X ENGINE_set_RSALIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X ENGINE_set_STORELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X t ENGINE_set_ciphersLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"; ENGINE_set_cmd_defnsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X& ENGINE_set_ctrl_functionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X ENGINE_set_defaultLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X# ENGINE_set_default_DHLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ ENGINE_set_default_DSALIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%ENGINE_set_default_ECDHLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X& ENGINE_set_default_ECDSALIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% ENGINE_set_default_RANDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ ENGINE_set_default_RSALIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X( ENGINE_set_default_ciphersLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(e ENGINE_set_default_digestsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 68 ` d X0aENGINE_set_default_pkey_asn1_methsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+ENGINE_set_default_pkey_methsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'p ENGINE_set_default_stringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X) ENGINE_set_destroy_functionLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X y ENGINE_set_digestsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X ENGINE_set_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X( ENGINE_set_finish_functionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XZ ENGINE_set_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X ENGINE_set_idLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X& ENGINE_set_init_functionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 66 ` d X.c ENGINE_set_load_privkey_functionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 65 ` d X- ENGINE_set_load_pubkey_functionLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 74 ` d X6ENGINE_set_load_ssl_client_cert_functionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X ENGINE_set_nameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(9ENGINE_set_pkey_asn1_methsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#ENGINE_set_pkey_methsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ ENGINE_set_table_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"e ENGINE_unregister_DHLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#i ENGINE_unregister_DSALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$q ENGINE_unregister_ECDHLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%ENGINE_unregister_ECDSALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ ENGINE_unregister_RANDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X# ENGINE_unregister_RSALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%8 ENGINE_unregister_STORELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X' ENGINE_unregister_ciphersLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X' ENGINE_unregister_digestsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 67 ` d X/ENGINE_unregister_pkey_asn1_methsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X*~ENGINE_unregister_pkey_methsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X ENGINE_up_refLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X 9ERR_add_error_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!ERR_add_error_vdataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XERR_clear_errorLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XERR_error_stringLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X ERR_error_string_nLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XERR_free_stringsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#ERR_func_error_stringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%ERR_get_err_state_tableLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XERR_get_errorLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X ERR_get_error_lineLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%ERR_get_error_line_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$) ERR_get_implementationLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(ERR_get_next_error_libraryLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XERR_get_stateLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"ERR_get_string_tableLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"ERR_lib_error_stringLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#ERR_load_ASN1_stringsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"ERR_load_BIO_stringsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!ERR_load_BN_stringsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"ERR_load_BUF_stringsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"fERR_load_CMS_stringsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X# ERR_load_COMP_stringsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#ERR_load_CONF_stringsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%ERR_load_CRYPTO_stringsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!ERR_load_DH_stringsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"ERR_load_DSA_stringsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"ERR_load_DSO_stringsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#ERR_load_ECDH_stringsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$4ERR_load_ECDSA_stringsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!! ERR_load_EC_stringsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X% ERR_load_ENGINE_stringsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"ERR_load_ERR_stringsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"ERR_load_EVP_stringsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"ERR_load_OBJ_stringsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#i ERR_load_OCSP_stringsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"ERR_load_PEM_stringsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%ERR_load_PKCS12_stringsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ERR_load_PKCS7_stringsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#ERR_load_RAND_stringsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"ERR_load_RSA_stringsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!ERR_load_TS_stringsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! ERR_load_UI_stringsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%ERR_load_X509V3_stringsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#ERR_load_X509_stringsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%ERR_load_crypto_stringsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XERR_load_stringsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XERR_peek_errorLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!ERR_peek_error_lineLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&ERR_peek_error_line_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! ERR_peek_last_errorLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X& ERR_peek_last_error_lineLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+ ERR_peek_last_error_line_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X ERR_pop_to_markLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XERR_print_errorsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!s ERR_print_errors_cbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!ERR_print_errors_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XERR_put_errorLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%ERR_reason_error_stringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X) ERR_release_err_state_tableLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XERR_remove_stateLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%]ERR_remove_thread_stateLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X :ERR_set_error_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$ ERR_set_implementationLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X ERR_set_markLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X A ERR_unload_stringsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XkESS_CERT_ID_dupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X}ESS_CERT_ID_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XESS_CERT_ID_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#ESS_ISSUER_SERIAL_dupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$'ESS_ISSUER_SERIAL_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#4ESS_ISSUER_SERIAL_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"dESS_SIGNING_CERT_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#ESS_SIGNING_CERT_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"!ESS_SIGNING_CERT_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XEVP_BytesToKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X''EVP_CIPHER_CTX_block_sizeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#0EVP_CIPHER_CTX_cipherLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$EVP_CIPHER_CTX_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(EVP_CIPHER_CTX_clear_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!EVP_CIPHER_CTX_copyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!` EVP_CIPHER_CTX_ctrlLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"3EVP_CIPHER_CTX_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!EVP_CIPHER_CTX_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)1EVP_CIPHER_CTX_get_app_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!EVP_CIPHER_CTX_initLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&;EVP_CIPHER_CTX_iv_lengthLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'EVP_CIPHER_CTX_key_lengthLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X EVP_CIPHER_CTX_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X EVP_CIPHER_CTX_nidLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%EVP_CIPHER_CTX_rand_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)EVP_CIPHER_CTX_set_app_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&EVP_CIPHER_CTX_set_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+_ EVP_CIPHER_CTX_set_key_lengthLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X( EVP_CIPHER_CTX_set_paddingLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'EVP_CIPHER_CTX_test_flagsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&;EVP_CIPHER_asn1_to_paramLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#EVP_CIPHER_block_sizeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XEVP_CIPHER_do_allLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&MEVP_CIPHER_do_all_sortedLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XEVP_CIPHER_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$=EVP_CIPHER_get_asn1_ivLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"EVP_CIPHER_iv_lengthLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#!EVP_CIPHER_key_lengthLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X%EVP_CIPHER_nidLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&<EVP_CIPHER_param_to_asn1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$>EVP_CIPHER_set_asn1_ivLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XqEVP_CIPHER_typeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d X"EVP_CipherLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XEVP_CipherFinalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X * EVP_CipherFinal_exLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XEVP_CipherInitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d Xc EVP_CipherInit_exLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XEVP_CipherUpdateLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XEVP_DecodeBlockLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XEVP_DecodeFinalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XEVP_DecodeInitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XEVP_DecodeUpdateLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XEVP_DecryptFinalLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!` EVP_DecryptFinal_exLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X EVP_DecryptInitLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X EVP_DecryptInit_exLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X EVP_DecryptUpdateLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d X] EVP_DigestLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X EVP_DigestFinalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X x EVP_DigestFinal_exLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X EVP_DigestInitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X% EVP_DigestInit_exLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!EVP_DigestSignFinalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X 0EVP_DigestSignInitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X EVP_DigestUpdateLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#nEVP_DigestVerifyFinalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"EVP_DigestVerifyInitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XEVP_EncodeBlockLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XEVP_EncodeFinalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XEVP_EncodeInitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XEVP_EncodeUpdateLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XEVP_EncryptFinalLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!d EVP_EncryptFinal_exLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XEVP_EncryptInitLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X N EVP_EncryptInit_exLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XEVP_EncryptUpdateLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X  EVP_MD_CTX_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$ EVP_MD_CTX_clear_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XEVP_MD_CTX_copyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X  EVP_MD_CTX_copy_exLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X EVP_MD_CTX_createLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X m EVP_MD_CTX_destroyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XF EVP_MD_CTX_initLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X8EVP_MD_CTX_mdLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"+EVP_MD_CTX_set_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#EVP_MD_CTX_test_flagsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X2EVP_MD_block_sizeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XZEVP_MD_do_allLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"EVP_MD_do_all_sortedLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XEVP_MD_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X EVP_MD_pkey_typeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XEVP_MD_sizeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XEVP_MD_typeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XEVP_OpenFinalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XEVP_OpenInitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X rEVP_PBE_CipherInitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X*EVP_PBE_alg_addLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"UEVP_PBE_alg_add_typeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X,EVP_PBE_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X"EVP_PBE_findLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X&EVP_PKCS82PKEYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X'EVP_PKEY2PKCS8LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#EVP_PKEY2PKCS8_brokenLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XEVP_PKEY_CTX_ctrlLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#[EVP_PKEY_CTX_ctrl_strLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XEVP_PKEY_CTX_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XNEVP_PKEY_CTX_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'qEVP_PKEY_CTX_get0_peerkeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$EVP_PKEY_CTX_get0_pkeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'EVP_PKEY_CTX_get_app_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!CEVP_PKEY_CTX_get_cbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#zEVP_PKEY_CTX_get_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X*)EVP_PKEY_CTX_get_keygen_infoLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(REVP_PKEY_CTX_get_operationLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XEVP_PKEY_CTX_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!EVP_PKEY_CTX_new_idLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+vEVP_PKEY_CTX_set0_keygen_infoLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'EVP_PKEY_CTX_set_app_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!EVP_PKEY_CTX_set_cbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#VEVP_PKEY_CTX_set_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X jEVP_PKEY_add1_attrLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X' EVP_PKEY_add1_attr_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'EVP_PKEY_add1_attr_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'R EVP_PKEY_add1_attr_by_txtLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X "EVP_PKEY_asn1_add0LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%~EVP_PKEY_asn1_add_aliasLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X KEVP_PKEY_asn1_copyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X EVP_PKEY_asn1_findLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$EVP_PKEY_asn1_find_strLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X EVP_PKEY_asn1_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X EVP_PKEY_asn1_get0LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%EVP_PKEY_asn1_get0_infoLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%EVP_PKEY_asn1_get_countLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X8EVP_PKEY_asn1_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$EVP_PKEY_asn1_set_ctrlLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$REVP_PKEY_asn1_set_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$EVP_PKEY_asn1_set_itemLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% EVP_PKEY_asn1_set_paramLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'EVP_PKEY_asn1_set_privateLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&KEVP_PKEY_asn1_set_publicLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XEVP_PKEY_assignLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XEVP_PKEY_base_idLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XEVP_PKEY_bitsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d Xi EVP_PKEY_cmpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%EVP_PKEY_cmp_parametersLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&EVP_PKEY_copy_parametersLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X.EVP_PKEY_decryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#EVP_PKEY_decrypt_initLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"EVP_PKEY_decrypt_oldLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"(EVP_PKEY_delete_attrLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X$EVP_PKEY_deriveLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"|EVP_PKEY_derive_initLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&EVP_PKEY_derive_set_peerLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X/EVP_PKEY_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#DEVP_PKEY_encrypt_initLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"CEVP_PKEY_encrypt_oldLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XEVP_PKEY_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XWEVP_PKEY_get0LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X SEVP_PKEY_get0_asn1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XPEVP_PKEY_get1_DHLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XEVP_PKEY_get1_DSALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"9 EVP_PKEY_get1_EC_KEYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XEVP_PKEY_get1_RSALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d Xo EVP_PKEY_get_attrLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&EVP_PKEY_get_attr_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&CEVP_PKEY_get_attr_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% EVP_PKEY_get_attr_countLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 65 ` d X-\EVP_PKEY_get_default_digest_nidLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XvEVP_PKEY_idLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X/EVP_PKEY_keygenLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"WEVP_PKEY_keygen_initLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X ^EVP_PKEY_meth_add0LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X EVP_PKEY_meth_copyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X uEVP_PKEY_meth_findLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X lEVP_PKEY_meth_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%EVP_PKEY_meth_get0_infoLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X`EVP_PKEY_meth_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'EVP_PKEY_meth_set_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$EVP_PKEY_meth_set_copyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$EVP_PKEY_meth_set_ctrlLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X''EVP_PKEY_meth_set_decryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&EVP_PKEY_meth_set_deriveLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X' EVP_PKEY_meth_set_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$EVP_PKEY_meth_set_initLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&EVP_PKEY_meth_set_keygenLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(EVP_PKEY_meth_set_paramgenLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$EVP_PKEY_meth_set_signLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'JEVP_PKEY_meth_set_signctxLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&EVP_PKEY_meth_set_verifyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 66 ` d X.EVP_PKEY_meth_set_verify_recoverLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)EVP_PKEY_meth_set_verifyctxLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)EVP_PKEY_missing_parametersLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XEVP_PKEY_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"NEVP_PKEY_new_mac_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XEVP_PKEY_paramgenLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$EVP_PKEY_paramgen_initLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#oEVP_PKEY_print_paramsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$EVP_PKEY_print_privateLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#EVP_PKEY_print_publicLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&EVP_PKEY_save_parametersLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X;EVP_PKEY_set1_DHLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XEVP_PKEY_set1_DSALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"z EVP_PKEY_set1_EC_KEYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XEVP_PKEY_set1_RSALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XEVP_PKEY_set_typeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#(EVP_PKEY_set_type_strLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XEVP_PKEY_signLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X EVP_PKEY_sign_initLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XEVP_PKEY_sizeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XEVP_PKEY_typeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XEVP_PKEY_verifyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"zEVP_PKEY_verify_initLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%EVP_PKEY_verify_recoverLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X*UEVP_PKEY_verify_recover_initLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XEVP_SealFinalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X EVP_SealInitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X!EVP_SignFinalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X"EVP_VerifyFinalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X EVP_add_alg_moduleLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X$EVP_add_cipherLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X%EVP_add_digestLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d Xo EVP_aes_128_cbcLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'EVP_aes_128_cbc_hmac_sha1LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X){EVP_aes_128_cbc_hmac_sha256LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XEVP_aes_128_ccmLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X EVP_aes_128_cfb1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X EVP_aes_128_cfb128LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X EVP_aes_128_cfb8LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XEVP_aes_128_ctrLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XT EVP_aes_128_ecbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XEVP_aes_128_gcmLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X EVP_aes_128_ofbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XEVP_aes_128_wrapLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XEVP_aes_128_xtsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XS EVP_aes_192_cbcLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X EVP_aes_192_ccmLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X EVP_aes_192_cfb1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X EVP_aes_192_cfb128LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X EVP_aes_192_cfb8LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XEVP_aes_192_ctrLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X. EVP_aes_192_ecbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XEVP_aes_192_gcmLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X EVP_aes_192_ofbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XzEVP_aes_192_wrapLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X EVP_aes_256_cbcLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'0EVP_aes_256_cbc_hmac_sha1LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)EVP_aes_256_cbc_hmac_sha256LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XEVP_aes_256_ccmLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X EVP_aes_256_cfb1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X EVP_aes_256_cfb128LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X EVP_aes_256_cfb8LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XEVP_aes_256_ctrLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X EVP_aes_256_ecbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XEVP_aes_256_gcmLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X EVP_aes_256_ofbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XoEVP_aes_256_wrapLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XEVP_aes_256_xtsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d X&EVP_bf_cbcLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X'EVP_bf_cfb64LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X(EVP_bf_ecbLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X)EVP_bf_ofbLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"EVP_camellia_128_cbcLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#EVP_camellia_128_cfb1LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%EVP_camellia_128_cfb128LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#EVP_camellia_128_cfb8LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"EVP_camellia_128_ecbLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"EVP_camellia_128_ofbLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"EVP_camellia_192_cbcLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#EVP_camellia_192_cfb1LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%EVP_camellia_192_cfb128LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#EVP_camellia_192_cfb8LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"EVP_camellia_192_ecbLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"EVP_camellia_192_ofbLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"EVP_camellia_256_cbcLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#EVP_camellia_256_cfb1LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%EVP_camellia_256_cfb128LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#EVP_camellia_256_cfb8LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"EVP_camellia_256_ecbLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"EVP_camellia_256_ofbLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XEVP_cast5_cbcLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XEVP_cast5_cfb64LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XEVP_cast5_ecbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XEVP_cast5_ofbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X*EVP_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X+EVP_des_cbcLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X EVP_des_cfb1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X,EVP_des_cfb64LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X EVP_des_cfb8LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X-EVP_des_ecbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X.EVP_des_edeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X/EVP_des_ede3LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X0EVP_des_ede3_cbcLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X EVP_des_ede3_cfb1LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X 1EVP_des_ede3_cfb64LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X EVP_des_ede3_cfb8LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X EVP_des_ede3_ecbLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X2EVP_des_ede3_ofbLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XEVP_des_ede3_wrapLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X3EVP_des_ede_cbcLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X4EVP_des_ede_cfb64LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X EVP_des_ede_ecbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X5EVP_des_ede_ofbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X6EVP_des_ofbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X7EVP_desx_cbcLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 41 ` d X8EVP_dssLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d X9EVP_dss1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d XEVP_ecdsaLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X:EVP_enc_nullLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X";EVP_get_cipherbynameLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"<EVP_get_digestbynameLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X=EVP_get_pw_promptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X>EVP_idea_cbcLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X?EVP_idea_cfb64LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X@EVP_idea_ecbLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XAEVP_idea_ofbLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 41 ` d X EVP_md4LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 41 ` d XCEVP_md5LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XDEVP_md_nullLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d XEVP_mdc2LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XEVP_rc2_40_cbcLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XOEVP_rc2_64_cbcLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XEEVP_rc2_cbcLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XFEVP_rc2_cfb64LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XGEVP_rc2_ecbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XHEVP_rc2_ofbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 41 ` d XIEVP_rc4LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XEVP_rc4_40LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XEVP_rc4_hmac_md5LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X JEVP_read_pw_stringLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$EVP_read_pw_string_minLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XEVP_ripemd160LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XJEVP_seed_cbcLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XNEVP_seed_cfb128LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XLEVP_seed_ecbLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XGEVP_seed_ofbLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XKEVP_set_pw_promptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 41 ` d XLEVP_shaLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d XMEVP_sha1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X EVP_sha224LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X EVP_sha256LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X EVP_sha384LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X EVP_sha512LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XEVP_whirlpoolLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%G EXTENDED_KEY_USAGE_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X# EXTENDED_KEY_USAGE_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ EXTENDED_KEY_USAGE_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d X FIPS_modeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X FIPS_mode_setLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X GENERAL_NAMES_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X GENERAL_NAMES_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XGENERAL_NAMES_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XGENERAL_NAME_cmpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X3GENERAL_NAME_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XGENERAL_NAME_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)GENERAL_NAME_get0_otherNameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%GENERAL_NAME_get0_valueLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X" GENERAL_NAME_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XGENERAL_NAME_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X 6 GENERAL_NAME_printLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)EGENERAL_NAME_set0_othernameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%GENERAL_NAME_set0_valueLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X" GENERAL_SUBTREE_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X nGENERAL_SUBTREE_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!u GENERAL_SUBTREE_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 38 ` d XHMACLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X HMAC_CTX_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XHMAC_CTX_copyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X HMAC_CTX_initLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X HMAC_CTX_set_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XHMAC_FinalLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d XHMAC_InitLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X HMAC_Init_exLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XHMAC_UpdateLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%3ISSUING_DIST_POINT_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#OISSUING_DIST_POINT_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ISSUING_DIST_POINT_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! KRB5_APREQBODY_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X KRB5_APREQBODY_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X B KRB5_APREQBODY_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d Xk KRB5_APREQ_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X KRB5_APREQ_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X KRB5_APREQ_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X KRB5_AUTHDATA_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X1 KRB5_AUTHDATA_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X KRB5_AUTHDATA_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X# KRB5_AUTHENTBODY_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! KRB5_AUTHENTBODY_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X" KRB5_AUTHENTBODY_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XU KRB5_AUTHENT_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X KRB5_AUTHENT_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X KRB5_AUTHENT_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X J KRB5_CHECKSUM_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X KRB5_CHECKSUM_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X KRB5_CHECKSUM_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X KRB5_ENCDATA_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X KRB5_ENCDATA_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X KRB5_ENCDATA_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X KRB5_ENCKEY_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X KRB5_ENCKEY_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X KRB5_ENCKEY_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! KRB5_PRINCNAME_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X KRB5_PRINCNAME_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X KRB5_PRINCNAME_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XT KRB5_TICKET_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XR KRB5_TICKET_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X KRB5_TICKET_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X@ KRB5_TKTBODY_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X KRB5_TKTBODY_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X KRB5_TKTBODY_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 41 ` d X0 LONG_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 37 ` d X MD4LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d X MD4_FinalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d X MD4_InitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X MD4_TransformLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d X MD4_UpdateLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 37 ` d XSMD5LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d XTMD5_FinalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d XUMD5_InitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XMD5_TransformLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XVMD5_UpdateLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 38 ` d XWMDC2LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XXMDC2_FinalLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d XYMDC2_InitLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XZMDC2_UpdateLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$NAME_CONSTRAINTS_checkLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X# NAME_CONSTRAINTS_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! NAME_CONSTRAINTS_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X" NAME_CONSTRAINTS_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X NCONF_WIN32LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X NCONF_defaultLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XNCONF_dump_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XNCONF_dump_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XNCONF_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XNCONF_free_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X NCONF_get_number_eLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XNCONF_get_sectionLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XNCONF_get_stringLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XNCONF_loadLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XNCONF_load_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XNCONF_load_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d XNCONF_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)NETSCAPE_CERT_SEQUENCE_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X' NETSCAPE_CERT_SEQUENCE_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(NETSCAPE_CERT_SEQUENCE_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X![NETSCAPE_SPKAC_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XQ NETSCAPE_SPKAC_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X \NETSCAPE_SPKAC_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&mNETSCAPE_SPKI_b64_decodeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&kNETSCAPE_SPKI_b64_encodeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X ]NETSCAPE_SPKI_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&lNETSCAPE_SPKI_get_pubkeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X NETSCAPE_SPKI_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X^NETSCAPE_SPKI_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!iNETSCAPE_SPKI_printLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&jNETSCAPE_SPKI_set_pubkeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X _NETSCAPE_SPKI_signLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"`NETSCAPE_SPKI_verifyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X NETSCAPE_X509_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XNETSCAPE_X509_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XNETSCAPE_X509_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XNOTICEREF_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X NOTICEREF_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XNOTICEREF_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XMOBJ_NAME_addLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XPOBJ_NAME_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X{ OBJ_NAME_do_allLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ OBJ_NAME_do_all_sortedLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XQOBJ_NAME_getLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XROBJ_NAME_initLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X SOBJ_NAME_new_indexLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XTOBJ_NAME_removeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XaOBJ_add_objectLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XOBJ_add_sigidLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XOBJ_bsearch_LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XOBJ_bsearch_ex_LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XcOBJ_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 41 ` d XdOBJ_cmpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XeOBJ_createLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X OBJ_create_objectsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 41 ` d XfOBJ_dupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!OBJ_find_sigid_algsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$rOBJ_find_sigid_by_algsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XgOBJ_ln2nidLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XhOBJ_new_nidLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XiOBJ_nid2lnLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XjOBJ_nid2objLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XkOBJ_nid2snLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XlOBJ_obj2nidLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XNOBJ_obj2txtLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XOBJ_sigid_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XmOBJ_sn2nidLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XnOBJ_txt2nidLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XOBJ_txt2objLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X) OCSP_BASICRESP_add1_ext_i2dLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ OCSP_BASICRESP_add_extLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X' OCSP_BASICRESP_delete_extLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! OCSP_BASICRESP_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)Y OCSP_BASICRESP_get1_ext_d2iLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$> OCSP_BASICRESP_get_extLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+ OCSP_BASICRESP_get_ext_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+ OCSP_BASICRESP_get_ext_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 68 ` d X0V OCSP_BASICRESP_get_ext_by_criticalLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X* OCSP_BASICRESP_get_ext_countLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X OCSP_BASICRESP_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X  OCSP_BASICRESP_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XOCSP_CERTID_dupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X OCSP_CERTID_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X OCSP_CERTID_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X OCSP_CERTID_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"] OCSP_CERTSTATUS_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X , OCSP_CERTSTATUS_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!+ OCSP_CERTSTATUS_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XX OCSP_CRLID_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X7 OCSP_CRLID_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X^ OCSP_CRLID_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&I OCSP_ONEREQ_add1_ext_i2dLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!v OCSP_ONEREQ_add_extLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$^ OCSP_ONEREQ_delete_extLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X OCSP_ONEREQ_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X& OCSP_ONEREQ_get1_ext_d2iLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!# OCSP_ONEREQ_get_extLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X( OCSP_ONEREQ_get_ext_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(+ OCSP_ONEREQ_get_ext_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 65 ` d X-g OCSP_ONEREQ_get_ext_by_criticalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X' OCSP_ONEREQ_get_ext_countLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X` OCSP_ONEREQ_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XQ OCSP_ONEREQ_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XD OCSP_REQINFO_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X OCSP_REQINFO_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X= OCSP_REQINFO_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X' OCSP_REQUEST_add1_ext_i2dLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X" OCSP_REQUEST_add_extLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% OCSP_REQUEST_delete_extLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X OCSP_REQUEST_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'F OCSP_REQUEST_get1_ext_d2iLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"K OCSP_REQUEST_get_extLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X) OCSP_REQUEST_get_ext_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X) OCSP_REQUEST_get_ext_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 66 ` d X.Y OCSP_REQUEST_get_ext_by_criticalLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(9 OCSP_REQUEST_get_ext_countLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X OCSP_REQUEST_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X OCSP_REQUEST_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X OCSP_REQUEST_printLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&OCSP_REQ_CTX_add1_headerLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XQOCSP_REQ_CTX_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'eOCSP_REQ_CTX_get0_mem_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XiOCSP_REQ_CTX_httpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XdOCSP_REQ_CTX_i2dLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XjOCSP_REQ_CTX_nbioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#nOCSP_REQ_CTX_nbio_d2iLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XmOCSP_REQ_CTX_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#OCSP_REQ_CTX_set1_reqLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!n OCSP_RESPBYTES_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X OCSP_RESPBYTES_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X OCSP_RESPBYTES_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X  OCSP_RESPDATA_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X OCSP_RESPDATA_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X OCSP_RESPDATA_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X4 OCSP_RESPID_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X OCSP_RESPID_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X OCSP_RESPID_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X e OCSP_RESPONSE_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X' OCSP_RESPONSE_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X OCSP_RESPONSE_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! OCSP_RESPONSE_printLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X# OCSP_REVOKEDINFO_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! OCSP_REVOKEDINFO_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X" OCSP_REVOKEDINFO_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"< OCSP_SERVICELOC_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X OCSP_SERVICELOC_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!2 OCSP_SERVICELOC_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! OCSP_SIGNATURE_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X OCSP_SIGNATURE_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X / OCSP_SIGNATURE_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*2 OCSP_SINGLERESP_add1_ext_i2dLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% OCSP_SINGLERESP_add_extLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(7 OCSP_SINGLERESP_delete_extLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" OCSP_SINGLERESP_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*p OCSP_SINGLERESP_get1_ext_d2iLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%W OCSP_SINGLERESP_get_extLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 64 ` d X, OCSP_SINGLERESP_get_ext_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 64 ` d X, OCSP_SINGLERESP_get_ext_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 69 ` d X1\ OCSP_SINGLERESP_get_ext_by_criticalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+ OCSP_SINGLERESP_get_ext_countLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X OCSP_SINGLERESP_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! OCSP_SINGLERESP_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X' OCSP_accept_responses_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X% OCSP_archive_cutoff_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"( OCSP_basic_add1_certLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X# OCSP_basic_add1_nonceLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$3 OCSP_basic_add1_statusLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XQ OCSP_basic_signLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X OCSP_basic_verifyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xi OCSP_cert_id_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"W OCSP_cert_status_strLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X OCSP_cert_to_idLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XS OCSP_check_nonceLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! OCSP_check_validityLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X~ OCSP_copy_nonceLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d Xm OCSP_crlID_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! OCSP_crl_reason_strLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X OCSP_id_cmpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X OCSP_id_get0_infoLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X z OCSP_id_issuer_cmpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! OCSP_onereq_get0_idLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XV OCSP_parse_urlLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X") OCSP_request_add0_idLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$- OCSP_request_add1_certLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%: OCSP_request_add1_nonceLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ OCSP_request_is_signedLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X' OCSP_request_onereq_countLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X& OCSP_request_onereq_get0LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$ OCSP_request_set1_nameLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d Xw OCSP_request_signLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! OCSP_request_verifyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X OCSP_resp_countLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X- OCSP_resp_findLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X# OCSP_resp_find_statusLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X! OCSP_resp_get0LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"V OCSP_response_createLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&\ OCSP_response_get1_basicLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" OCSP_response_statusLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&& OCSP_response_status_strLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X OCSP_sendreq_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XSOCSP_sendreq_nbioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XTOCSP_sendreq_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*lOCSP_set_max_response_lengthLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% OCSP_single_get0_statusLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! OCSP_url_svcloc_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XD OPENSSL_DIR_endLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XIOPENSSL_DIR_readLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 65 ` d X- OPENSSL_add_all_algorithms_confLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 67 ` d X/ OPENSSL_add_all_algorithms_noconfLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XOPENSSL_asc2uniLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X OPENSSL_cleanseLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d Xt OPENSSL_configLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!COPENSSL_cpuid_setupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XOPENSSL_gmtimeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X OPENSSL_gmtime_adjLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!OPENSSL_gmtime_diffLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! OPENSSL_ia32cap_locLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XOPENSSL_initLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XOPENSSL_isserviceLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X OPENSSL_issetugidLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X* OPENSSL_load_builtin_modulesLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XOPENSSL_memcmpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X OPENSSL_no_configLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XDOPENSSL_showfatalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XBOPENSSL_stderrLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X OPENSSL_strcasecmpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!OPENSSL_strncasecmpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XOPENSSL_uni2ascLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XOSSL_DES_versionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!OSSL_libdes_versionLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XOTHERNAME_cmpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X@OTHERNAME_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X OTHERNAME_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XOTHERNAME_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d X OpenSSLDieLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%OpenSSL_add_all_ciphersLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%OpenSSL_add_all_digestsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X|PBE2PARAM_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X PBE2PARAM_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XzPBE2PARAM_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X!PBEPARAM_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X PBEPARAM_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XPBEPARAM_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XxPBKDF2PARAM_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X PBKDF2PARAM_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XvPBKDF2PARAM_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XoPEM_ASN1_readLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XpPEM_ASN1_read_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XqPEM_ASN1_writeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X rPEM_ASN1_write_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XsPEM_SealFinalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XtPEM_SealInitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XuPEM_SealUpdateLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XvPEM_SignFinalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XwPEM_SignInitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XxPEM_SignUpdateLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X yPEM_X509_INFO_readLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$zPEM_X509_INFO_read_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%{PEM_X509_INFO_write_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X PEM_bytes_read_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X PEM_def_callbackLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X|PEM_dek_infoLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X}PEM_do_headerLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%~PEM_get_EVP_CIPHER_INFOLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XPEM_proc_typeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d XPEM_readLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XPEM_read_CMSLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XPEM_read_DHparamsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$PEM_read_DSAPrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!PEM_read_DSA_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X PEM_read_DSAparamsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%cPEM_read_ECPKParametersLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#0PEM_read_ECPrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X "PEM_read_EC_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 65 ` d X-PEM_read_NETSCAPE_CERT_SEQUENCELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XPEM_read_PKCS7LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XPEM_read_PKCS8LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*PEM_read_PKCS8_PRIV_KEY_INFOLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XPEM_read_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!PEM_read_PrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$PEM_read_RSAPrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#PEM_read_RSAPublicKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!PEM_read_RSA_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XPEM_read_X509LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X}PEM_read_X509_AUXLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X% PEM_read_X509_CERT_PAIRLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XPEM_read_X509_CRLLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XPEM_read_X509_REQLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XPEM_read_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XPEM_read_bio_CMSLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#PEM_read_bio_DHparamsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(PEM_read_bio_DSAPrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%(PEM_read_bio_DSA_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$PEM_read_bio_DSAparamsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)P PEM_read_bio_ECPKParametersLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'PEM_read_bio_ECPrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ PEM_read_bio_EC_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 69 ` d X1PEM_read_bio_NETSCAPE_CERT_SEQUENCELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X PEM_read_bio_PKCS7LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X PEM_read_bio_PKCS8LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 66 ` d X.PEM_read_bio_PKCS8_PRIV_KEY_INFOLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!PEM_read_bio_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%PEM_read_bio_ParametersLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%PEM_read_bio_PrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(PEM_read_bio_RSAPrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'PEM_read_bio_RSAPublicKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%!PEM_read_bio_RSA_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XPEM_read_bio_X509LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#PEM_read_bio_X509_AUXLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)PEM_read_bio_X509_CERT_PAIRLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#PEM_read_bio_X509_CRLLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#PEM_read_bio_X509_REQLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d XPEM_writeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XcPEM_write_CMSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X PEM_write_DHparamsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!NPEM_write_DHxparamsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%PEM_write_DSAPrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"5PEM_write_DSA_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!PEM_write_DSAparamsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&;PEM_write_ECPKParametersLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$_PEM_write_ECPrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!PEM_write_EC_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 66 ` d X.PEM_write_NETSCAPE_CERT_SEQUENCELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XPEM_write_PKCS7LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XPEM_write_PKCS8LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'PEM_write_PKCS8PrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+uPEM_write_PKCS8PrivateKey_nidLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+PEM_write_PKCS8_PRIV_KEY_INFOLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XPEM_write_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"PEM_write_PrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%PEM_write_RSAPrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$PEM_write_RSAPublicKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"/PEM_write_RSA_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XPEM_write_X509LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X PEM_write_X509_AUXLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&pPEM_write_X509_CERT_PAIRLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X PEM_write_X509_CRLLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X PEM_write_X509_REQLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$PEM_write_X509_REQ_NEWLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XPEM_write_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'PEM_write_bio_ASN1_streamLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XxPEM_write_bio_CMSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&rPEM_write_bio_CMS_streamLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$PEM_write_bio_DHparamsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%RPEM_write_bio_DHxparamsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)PEM_write_bio_DSAPrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&PEM_write_bio_DSA_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%PEM_write_bio_DSAparamsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X* PEM_write_bio_ECPKParametersLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(` PEM_write_bio_ECPrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% PEM_write_bio_EC_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 70 ` d X2PEM_write_bio_NETSCAPE_CERT_SEQUENCELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!PEM_write_bio_PKCS7LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(]PEM_write_bio_PKCS7_streamLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!PEM_write_bio_PKCS8LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+PEM_write_bio_PKCS8PrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 67 ` d X/vPEM_write_bio_PKCS8PrivateKey_nidLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 67 ` d X/PEM_write_bio_PKCS8_PRIV_KEY_INFOLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"EPEM_write_bio_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&:PEM_write_bio_ParametersLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&PEM_write_bio_PrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)PEM_write_bio_RSAPrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(PEM_write_bio_RSAPublicKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&PEM_write_bio_RSA_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X PEM_write_bio_X509LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$PEM_write_bio_X509_AUXLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*h PEM_write_bio_X509_CERT_PAIRLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$PEM_write_bio_X509_CRLLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$PEM_write_bio_X509_REQLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(PEM_write_bio_X509_REQ_NEWLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! PKCS12_AUTHSAFES_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XPKCS12_BAGS_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X PKCS12_BAGS_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XPKCS12_BAGS_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"PKCS12_MAC_DATA_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X PKCS12_MAC_DATA_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! PKCS12_MAC_DATA_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X PKCS12_MAKE_KEYBAGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"PKCS12_MAKE_SHKEYBAGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XPKCS12_PBE_addLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!PKCS12_PBE_keyivgenLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X 8 PKCS12_SAFEBAGS_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!PKCS12_SAFEBAG_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X PKCS12_SAFEBAG_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X PKCS12_SAFEBAG_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$7 PKCS12_add_CSPName_ascLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XPKCS12_add_certLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)PKCS12_add_friendlyname_ascLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)PKCS12_add_friendlyname_uniLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XPKCS12_add_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#PKCS12_add_localkeyidLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X PKCS12_add_safeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X PKCS12_add_safesLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!p PKCS12_certbag2x509LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ PKCS12_certbag2x509crlLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XPKCS12_createLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! PKCS12_decrypt_skeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X PKCS12_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XPKCS12_gen_macLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!PKCS12_get_attr_genLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%PKCS12_get_friendlynameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XPKCS12_initLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d X[ PKCS12_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X% PKCS12_item_decrypt_d2iLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X% PKCS12_item_i2d_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&G PKCS12_item_pack_safebagLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X PKCS12_key_gen_ascLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X PKCS12_key_gen_uniLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X PKCS12_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X]PKCS12_newpassLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X# PKCS12_pack_authsafesLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X PKCS12_pack_p7dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#PKCS12_pack_p7encdataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XPKCS12_parseLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XPKCS12_pbe_cryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XPKCS12_set_macLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XPKCS12_setup_macLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%O PKCS12_unpack_authsafesLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"| PKCS12_unpack_p7dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% PKCS12_unpack_p7encdataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XPKCS12_verify_macLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!$ PKCS12_x5092certbagLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ PKCS12_x509crl2certbagLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X PKCS1_MGF1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XPKCS5_PBE_addLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X PKCS5_PBE_keyivgenLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XPKCS5_PBKDF2_HMACLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$PKCS5_PBKDF2_HMAC_SHA1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XPKCS5_pbe2_setLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XPKCS5_pbe2_set_ivLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X+PKCS5_pbe_setLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"PKCS5_pbe_set0_algorLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X1PKCS5_pbkdf2_setLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#PKCS5_v2_PBE_keyivgenLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X H PKCS7_ATTR_SIGN_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" PKCS7_ATTR_VERIFY_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XPKCS7_DIGEST_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X# PKCS7_DIGEST_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XPKCS7_DIGEST_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X PKCS7_ENCRYPT_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d Xy PKCS7_ENCRYPT_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XPKCS7_ENCRYPT_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$PKCS7_ENC_CONTENT_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"( PKCS7_ENC_CONTENT_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#PKCS7_ENC_CONTENT_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!PKCS7_ENVELOPE_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X PKCS7_ENVELOPE_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X PKCS7_ENVELOPE_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 64 ` d X,PKCS7_ISSUER_AND_SERIAL_digestLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*PKCS7_ISSUER_AND_SERIAL_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X( PKCS7_ISSUER_AND_SERIAL_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)PKCS7_ISSUER_AND_SERIAL_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#PKCS7_RECIP_INFO_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'PKCS7_RECIP_INFO_get0_algLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! PKCS7_RECIP_INFO_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"PKCS7_RECIP_INFO_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"0PKCS7_RECIP_INFO_setLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XPKCS7_SIGNED_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X PKCS7_SIGNED_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XPKCS7_SIGNED_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$PKCS7_SIGNER_INFO_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)PKCS7_SIGNER_INFO_get0_algsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X" PKCS7_SIGNER_INFO_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#PKCS7_SIGNER_INFO_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#PKCS7_SIGNER_INFO_setLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$PKCS7_SIGNER_INFO_signLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&PKCS7_SIGN_ENVELOPE_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$B PKCS7_SIGN_ENVELOPE_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%PKCS7_SIGN_ENVELOPE_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 64 ` d X,#PKCS7_add0_attrib_signing_timeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&6PKCS7_add1_attrib_digestLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+\PKCS7_add_attrib_content_typeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'lPKCS7_add_attrib_smimecapLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!rPKCS7_add_attributeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#PKCS7_add_certificateLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XPKCS7_add_crlLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!1PKCS7_add_recipientLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&2PKCS7_add_recipient_infoLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!PKCS7_add_signatureLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(sPKCS7_add_signed_attributeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XPKCS7_add_signerLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)PKCS7_cert_from_signer_infoLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XPKCS7_content_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XPKCS7_ctrlLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XPKCS7_dataDecodeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XPKCS7_dataFinalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XPKCS7_dataInitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XPKCS7_dataVerifyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XgPKCS7_decryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X*tPKCS7_digest_from_attributesLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d XPKCS7_dupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XbPKCS7_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XPKCS7_finalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XPKCS7_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X fPKCS7_get0_signersLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!uPKCS7_get_attributeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)vPKCS7_get_issuer_and_serialLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(wPKCS7_get_signed_attributeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#PKCS7_get_signer_infoLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X jPKCS7_get_smimecapLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d XX PKCS7_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d XPKCS7_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XPKCS7_print_ctxLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#PKCS7_set0_type_otherLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"PKCS7_set_attributesLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X3PKCS7_set_cipherLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XPKCS7_set_contentLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XPKCS7_set_digestLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)PKCS7_set_signed_attributesLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XPKCS7_set_typeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XkPKCS7_signLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#PKCS7_sign_add_signerLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#5PKCS7_signatureVerifyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#iPKCS7_simple_smimecapLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XPKCS7_streamLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"PKCS7_to_TS_TST_INFOLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XaPKCS7_verifyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&%PKCS8_PRIV_KEY_INFO_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$ PKCS8_PRIV_KEY_INFO_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%#PKCS8_PRIV_KEY_INFO_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X PKCS8_add_keyusageLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X PKCS8_decryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XPKCS8_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XPKCS8_pkey_get0LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XPKCS8_pkey_set0LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X(PKCS8_set_brokenLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$PKEY_USAGE_PERIOD_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"N PKEY_USAGE_PERIOD_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#PKEY_USAGE_PERIOD_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XPOLICYINFO_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X POLICYINFO_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XPOLICYINFO_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!POLICYQUALINFO_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X; POLICYQUALINFO_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X POLICYQUALINFO_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% POLICY_CONSTRAINTS_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#APOLICY_CONSTRAINTS_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ POLICY_CONSTRAINTS_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X mPOLICY_MAPPINGS_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X![ POLICY_MAPPING_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X POLICY_MAPPING_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X POLICY_MAPPING_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 64 ` d X, PROXY_CERT_INFO_EXTENSION_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X* PROXY_CERT_INFO_EXTENSION_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+ PROXY_CERT_INFO_EXTENSION_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X PROXY_POLICY_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X PROXY_POLICY_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X PROXY_POLICY_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XYRAND_SSLeayLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d XRAND_addLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XRAND_bytesLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XRAND_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d XRAND_egdLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d Xb RAND_egd_bytesLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XRAND_eventLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XRAND_file_nameLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"qRAND_get_rand_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XRAND_load_fileLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d Xw RAND_pollLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XRAND_pseudo_bytesLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X" RAND_query_egd_bytesLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XRAND_screenLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d XRAND_seedLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X" RAND_set_rand_engineLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"ZRAND_set_rand_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XRAND_statusLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XRAND_write_fileLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XRC2_cbc_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XRC2_cfb64_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XRC2_decryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XRC2_ecb_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XRC2_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XRC2_ofb64_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XRC2_set_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 37 ` d XRC4LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XRC4_optionsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XRC4_set_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d XRIPEMD160LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XRIPEMD160_FinalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XRIPEMD160_InitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!RIPEMD160_TransformLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XRIPEMD160_UpdateLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XRSAPrivateKey_dupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XZ RSAPrivateKey_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XRSAPublicKey_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X RSAPublicKey_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"RSA_OAEP_PARAMS_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X RSA_OAEP_PARAMS_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!qRSA_OAEP_PARAMS_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XRSA_PKCS1_SSLeayLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!<RSA_PSS_PARAMS_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X;RSA_PSS_PARAMS_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X 7RSA_PSS_PARAMS_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X RSA_X931_hash_idLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XRSA_blinding_offLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XRSA_blinding_onLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XMRSA_check_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d XRSA_flagsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d XRSA_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XRSA_generate_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!fRSA_generate_key_exLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$8RSA_get_default_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XRSA_get_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"RSA_get_ex_new_indexLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X7RSA_get_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X[RSA_memory_lockLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 41 ` d XRSA_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XRSA_new_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XpRSA_null_methodLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(RSA_padding_add_PKCS1_OAEPLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 65 ` d X-RSA_padding_add_PKCS1_OAEP_mgf1LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X' RSA_padding_add_PKCS1_PSSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 64 ` d X,RSA_padding_add_PKCS1_PSS_mgf1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*RSA_padding_add_PKCS1_type_1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*RSA_padding_add_PKCS1_type_2LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$ RSA_padding_add_SSLv23LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" RSA_padding_add_X931LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" RSA_padding_add_noneLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*RSA_padding_check_PKCS1_OAEPLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 67 ` d X/RSA_padding_check_PKCS1_OAEP_mgf1LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 64 ` d X, RSA_padding_check_PKCS1_type_1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 64 ` d X, RSA_padding_check_PKCS1_type_2LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X& RSA_padding_check_SSLv23LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$ RSA_padding_check_X931LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$RSA_padding_check_noneLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d XRSA_printLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XRSA_print_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!RSA_private_decryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!RSA_private_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X RSA_public_decryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X RSA_public_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$RSA_set_default_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XRSA_set_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X6RSA_set_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X RSA_setup_blindingLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d XRSA_signLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(RSA_sign_ASN1_OCTET_STRINGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d XRSA_sizeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X RSA_up_refLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XRSA_verifyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*RSA_verify_ASN1_OCTET_STRINGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" RSA_verify_PKCS1_PSSLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'RSA_verify_PKCS1_PSS_mgf1LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XFSEED_cbc_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!HSEED_cfb128_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XDSEED_decryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XKSEED_ecb_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XESEED_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!ISEED_ofb128_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XMSEED_set_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 37 ` d XSHALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 38 ` d XSHA1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XSHA1_FinalLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d XSHA1_InitLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XSHA1_TransformLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XSHA1_UpdateLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 40 ` d X SHA224LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X SHA224_FinalLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X/SHA224_InitLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X SHA224_UpdateLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 40 ` d XFSHA256LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XSHA256_FinalLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X SHA256_InitLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XPSHA256_TransformLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XSHA256_UpdateLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 40 ` d XSHA384LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XSHA384_FinalLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XSHA384_InitLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X SHA384_UpdateLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 40 ` d XUSHA512LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X SHA512_FinalLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X1SHA512_InitLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X[SHA512_TransformLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X SHA512_UpdateLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d XSHA_FinalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d XSHA_InitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XSHA_TransformLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XSHA_UpdateLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XdSMIME_crlf_copyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XSMIME_read_ASN1LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XmSMIME_read_CMSLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X_SMIME_read_PKCS7LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XhSMIME_textLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XASMIME_write_ASN1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XSMIME_write_CMSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X^SMIME_write_PKCS7LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XSRP_Calc_ALIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XSRP_Calc_BLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!SRP_Calc_client_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!SRP_Calc_server_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d XSRP_Calc_uLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XSRP_Calc_xLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XSRP_VBASE_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$Y SRP_VBASE_get1_by_userLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#SRP_VBASE_get_by_userLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XSRP_VBASE_initLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XSRP_VBASE_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X SRP_Verify_A_mod_NLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X SRP_Verify_B_mod_NLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&SRP_check_known_gN_paramLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!SRP_create_verifierLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$SRP_create_verifier_BNLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X SRP_get_default_gNLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XZ SRP_user_pwd_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 40 ` d XSSLeayLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XSSLeay_versionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X4SXNETID_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d Xm SXNETID_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X3SXNETID_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"SXNET_add_id_INTEGERLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XSXNET_add_id_ascLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X SXNET_add_id_ulongLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X0SXNET_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"SXNET_get_id_INTEGERLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XSXNET_get_id_ascLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X SXNET_get_id_ulongLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d X5 SXNET_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d X/SXNET_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X-TS_ACCURACY_dupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XTS_ACCURACY_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$TS_ACCURACY_get_microsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$+TS_ACCURACY_get_millisLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%TS_ACCURACY_get_secondsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XTS_ACCURACY_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$TS_ACCURACY_set_microsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$1TS_ACCURACY_set_millisLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%TS_ACCURACY_set_secondsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'TS_ASN1_INTEGER_print_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%@TS_CONF_get_tsa_sectionLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XTS_CONF_load_certLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X TS_CONF_load_certsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XHTS_CONF_load_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"bTS_CONF_set_accuracyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XTS_CONF_set_certsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 68 ` d X0TS_CONF_set_clock_precision_digitsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'yTS_CONF_set_crypto_deviceLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$TS_CONF_set_def_policyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(TS_CONF_set_default_engineLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!TS_CONF_set_digestsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+TS_CONF_set_ess_cert_id_chainLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"TTS_CONF_set_orderingLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"{TS_CONF_set_policiesLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X TS_CONF_set_serialLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%TS_CONF_set_signer_certLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$*TS_CONF_set_signer_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"dTS_CONF_set_tsa_nameLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X TS_MSG_IMPRINT_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!TS_MSG_IMPRINT_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%YTS_MSG_IMPRINT_get_algoLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$TS_MSG_IMPRINT_get_msgLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X tTS_MSG_IMPRINT_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&^TS_MSG_IMPRINT_print_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%;TS_MSG_IMPRINT_set_algoLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$iTS_MSG_IMPRINT_set_msgLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XTS_OBJ_print_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XTS_REQ_add_extLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XmTS_REQ_delete_extLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d X2TS_REQ_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XQTS_REQ_ext_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XkTS_REQ_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!TS_REQ_get_cert_reqLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XTS_REQ_get_extLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#TS_REQ_get_ext_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#TS_REQ_get_ext_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(TS_REQ_get_ext_by_criticalLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"TS_REQ_get_ext_countLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X DTS_REQ_get_ext_d2iLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XmTS_REQ_get_extsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$qTS_REQ_get_msg_imprintLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XtTS_REQ_get_nonceLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"`TS_REQ_get_policy_idLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X TS_REQ_get_versionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XsTS_REQ_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XZTS_REQ_print_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!TS_REQ_set_cert_reqLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$TS_REQ_set_msg_imprintLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XTS_REQ_set_nonceLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"*TS_REQ_set_policy_idLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X VTS_REQ_set_versionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%TS_REQ_to_TS_VERIFY_CTXLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X*oTS_RESP_CTX_add_failure_infoLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#gTS_RESP_CTX_add_flagsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X 7TS_RESP_CTX_add_mdLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$TS_RESP_CTX_add_policyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XTS_RESP_CTX_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%GTS_RESP_CTX_get_requestLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&>TS_RESP_CTX_get_tst_infoLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XTS_RESP_CTX_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&TS_RESP_CTX_set_accuracyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#TS_RESP_CTX_set_certsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 72 ` d X4nTS_RESP_CTX_set_clock_precision_digitsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(TS_RESP_CTX_set_def_policyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*TS_RESP_CTX_set_extension_cbLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'TS_RESP_CTX_set_serial_cbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)TS_RESP_CTX_set_signer_certLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(BTS_RESP_CTX_set_signer_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)XTS_RESP_CTX_set_status_infoLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 66 ` d X.TS_RESP_CTX_set_status_info_condLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%TS_RESP_CTX_set_time_cbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%TS_RESP_create_responseLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X TS_RESP_dupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X2TS_RESP_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%TS_RESP_get_status_infoLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X,TS_RESP_get_tokenLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"TS_RESP_get_tst_infoLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XjTS_RESP_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XTS_RESP_print_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%.TS_RESP_set_status_infoLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"TS_RESP_set_tst_infoLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%TS_RESP_verify_responseLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&?TS_RESP_verify_signatureLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"TS_RESP_verify_tokenLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X lTS_STATUS_INFO_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!TS_STATUS_INFO_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X BTS_STATUS_INFO_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&{TS_STATUS_INFO_print_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!TS_TST_INFO_add_extLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$&TS_TST_INFO_delete_extLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X8TS_TST_INFO_dupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"TS_TST_INFO_ext_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XTS_TST_INFO_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&;TS_TST_INFO_get_accuracyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!TS_TST_INFO_get_extLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(iTS_TST_INFO_get_ext_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(>TS_TST_INFO_get_ext_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 65 ` d X-TS_TST_INFO_get_ext_by_criticalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'FTS_TST_INFO_get_ext_countLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%TS_TST_INFO_get_ext_d2iLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"TS_TST_INFO_get_extsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)TS_TST_INFO_get_msg_imprintLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#TS_TST_INFO_get_nonceLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&TS_TST_INFO_get_orderingLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'TS_TST_INFO_get_policy_idLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$sTS_TST_INFO_get_serialLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"TS_TST_INFO_get_timeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!ATS_TST_INFO_get_tsaLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%TS_TST_INFO_get_versionLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XTS_TST_INFO_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#TS_TST_INFO_print_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&[TS_TST_INFO_set_accuracyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)TS_TST_INFO_set_msg_imprintLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#TS_TST_INFO_set_nonceLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&=TS_TST_INFO_set_orderingLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'TS_TST_INFO_set_policy_idLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$wTS_TST_INFO_set_serialLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"&TS_TST_INFO_set_timeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!_TS_TST_INFO_set_tsaLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%=TS_TST_INFO_set_versionLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#TS_VERIFY_CTX_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X TS_VERIFY_CTX_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X TS_VERIFY_CTX_initLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X TS_VERIFY_CTX_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%TS_X509_ALGOR_print_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XTS_ext_print_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!TXT_DB_create_indexLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XTXT_DB_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!TXT_DB_get_by_indexLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XTXT_DB_insertLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XTXT_DB_readLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XTXT_DB_writeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d X UI_OpenSSLLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X UI_UTIL_read_pwLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ UI_UTIL_read_pw_stringLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!I UI_add_error_stringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X L UI_add_info_stringLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" UI_add_input_booleanLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!6 UI_add_input_stringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X UI_add_user_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" UI_add_verify_stringLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! UI_construct_promptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XH UI_create_methodLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 41 ` d X UI_ctrlLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X) UI_destroy_methodLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! UI_dup_error_stringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X Y UI_dup_info_stringLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"6 UI_dup_input_booleanLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! UI_dup_input_stringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"/ UI_dup_verify_stringLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 41 ` d XL UI_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#" UI_get0_action_stringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#. UI_get0_output_stringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X UI_get0_resultLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X# UI_get0_result_stringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! UI_get0_test_stringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X UI_get0_user_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X# UI_get_default_methodLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X UI_get_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!t UI_get_ex_new_indexLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X UI_get_input_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X UI_get_methodLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X# UI_get_result_maxsizeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#M UI_get_result_minsizeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X d UI_get_string_typeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" UI_method_get_closerLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#v UI_method_get_flusherLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X" UI_method_get_openerLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 66 ` d X.UI_method_get_prompt_constructorLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" UI_method_get_readerLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" UI_method_get_writerLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" UI_method_set_closerLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X# UI_method_set_flusherLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"D UI_method_set_openerLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 66 ` d X.UI_method_set_prompt_constructorLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"f UI_method_set_readerLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" UI_method_set_writerLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 40 ` d XU UI_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XM UI_new_methodLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d Xa UI_processLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X# UI_set_default_methodLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X UI_set_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X UI_set_methodLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X UI_set_resultLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XUSERNOTICE_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X< USERNOTICE_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XUSERNOTICE_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d XoUTF8_getcLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d XnUTF8_putcLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d X5WHIRLPOOLLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!gWHIRLPOOL_BitUpdateLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XWHIRLPOOL_FinalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X-WHIRLPOOL_InitLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XaWHIRLPOOL_UpdateLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%X509V3_EXT_CRL_add_confLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X& X509V3_EXT_CRL_add_nconfLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%hX509V3_EXT_REQ_add_confLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&C X509V3_EXT_REQ_add_nconfLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XX509V3_EXT_addLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"X509V3_EXT_add_aliasLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!X509V3_EXT_add_confLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!pX509V3_EXT_add_listLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X" X509V3_EXT_add_nconfLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% X509V3_EXT_add_nconf_skLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X X509V3_EXT_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XX509V3_EXT_confLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!X509V3_EXT_conf_nidLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XX509V3_EXT_d2iLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XX509V3_EXT_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XX509V3_EXT_getLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X X509V3_EXT_get_nidLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XnX509V3_EXT_i2dLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X X509V3_EXT_nconfLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"~ X509V3_EXT_nconf_nidLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XX509V3_EXT_printLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!X509V3_EXT_print_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X oX509V3_EXT_val_prnLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&iX509V3_NAME_from_sectionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X X509V3_add1_i2dLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 64 ` d X,X509V3_add_standard_extensionsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XX509V3_add_valueLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#X509V3_add_value_boolLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&sX509V3_add_value_bool_nfLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"X509V3_add_value_intLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$ X509V3_add_value_ucharLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XX509V3_conf_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% X509V3_extensions_printLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XX509V3_get_d2iLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X X509V3_get_sectionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XX509V3_get_stringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#X509V3_get_value_boolLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"X509V3_get_value_intLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XX509V3_parse_listLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!X509V3_section_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#X509V3_set_conf_lhashLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XX509V3_set_ctxLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X X509V3_set_nconfLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X X509V3_string_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XVX509_ALGORS_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X^ X509_ALGOR_cmpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XX509_ALGOR_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XX509_ALGOR_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XWX509_ALGOR_get0LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X X509_ALGOR_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XX509_ALGOR_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XXX509_ALGOR_set0LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XX509_ALGOR_set_mdLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"X509_ATTRIBUTE_countLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#X509_ATTRIBUTE_createLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X*X509_ATTRIBUTE_create_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*X509_ATTRIBUTE_create_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*X509_ATTRIBUTE_create_by_txtLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X X509_ATTRIBUTE_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!X509_ATTRIBUTE_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&X509_ATTRIBUTE_get0_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(X509_ATTRIBUTE_get0_objectLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&X509_ATTRIBUTE_get0_typeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X X509_ATTRIBUTE_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X X509_ATTRIBUTE_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&X509_ATTRIBUTE_set1_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(X509_ATTRIBUTE_set1_objectLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X X509_CERT_AUX_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X X509_CERT_AUX_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XX509_CERT_AUX_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!X509_CERT_AUX_printLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! X509_CERT_PAIR_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X X509_CERT_PAIR_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X dX509_CERT_PAIR_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X X509_CINF_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X X509_CINF_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X X509_CINF_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X X509_CRL_INFO_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X X509_CRL_INFO_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X X509_CRL_INFO_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"X509_CRL_METHOD_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!X509_CRL_METHOD_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X# X509_CRL_add0_revokedLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X# X509_CRL_add1_ext_i2dLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X X509_CRL_add_extLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#WX509_CRL_check_suitebLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XX509_CRL_cmpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!X509_CRL_delete_extLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XbX509_CRL_diffLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XW X509_CRL_digestLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XX509_CRL_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XX509_CRL_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X##X509_CRL_get0_by_certLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%<X509_CRL_get0_by_serialLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XX509_CRL_get_extLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%X509_CRL_get_ext_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%X509_CRL_get_ext_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X*X509_CRL_get_ext_by_criticalLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$X509_CRL_get_ext_countLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"X509_CRL_get_ext_d2iLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$X509_CRL_get_meth_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X cX509_CRL_http_nbioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d X X509_CRL_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XX509_CRL_matchLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XX509_CRL_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XX509_CRL_printLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XX509_CRL_print_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)/X509_CRL_set_default_methodLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X& X509_CRL_set_issuer_nameLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% X509_CRL_set_lastUpdateLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$X509_CRL_set_meth_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% X509_CRL_set_nextUpdateLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X" X509_CRL_set_versionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XX509_CRL_signLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X8X509_CRL_sign_ctxLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X/ X509_CRL_sortLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XX509_CRL_verifyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X OX509_EXTENSIONS_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*X509_EXTENSION_create_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*X509_EXTENSION_create_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X X509_EXTENSION_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!X509_EXTENSION_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)X509_EXTENSION_get_criticalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%X509_EXTENSION_get_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X' X509_EXTENSION_get_objectLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d Xk X509_EXTENSION_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X !X509_EXTENSION_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)"X509_EXTENSION_set_criticalLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%#X509_EXTENSION_set_dataLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'$X509_EXTENSION_set_objectLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X%X509_INFO_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X&X509_INFO_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"'X509_LOOKUP_by_aliasLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X((X509_LOOKUP_by_fingerprintLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*)X509_LOOKUP_by_issuer_serialLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$*X509_LOOKUP_by_subjectLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X+X509_LOOKUP_ctrlLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X,X509_LOOKUP_fileLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X-X509_LOOKUP_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X".X509_LOOKUP_hash_dirLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X/X509_LOOKUP_initLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X0X509_LOOKUP_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"1X509_LOOKUP_shutdownLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+2X509_NAME_ENTRY_create_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+3X509_NAME_ENTRY_create_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+X509_NAME_ENTRY_create_by_txtLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!4X509_NAME_ENTRY_dupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"5X509_NAME_ENTRY_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&6X509_NAME_ENTRY_get_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(7X509_NAME_ENTRY_get_objectLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X s X509_NAME_ENTRY_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!8X509_NAME_ENTRY_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&9X509_NAME_ENTRY_set_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(:X509_NAME_ENTRY_set_objectLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!;X509_NAME_add_entryLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(zX509_NAME_add_entry_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(X509_NAME_add_entry_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(xX509_NAME_add_entry_by_txtLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X<X509_NAME_cmpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$=X509_NAME_delete_entryLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X>X509_NAME_digestLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X?X509_NAME_dupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#@X509_NAME_entry_countLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XAX509_NAME_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!BX509_NAME_get_entryLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(CX509_NAME_get_index_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(DX509_NAME_get_index_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'EX509_NAME_get_text_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'FX509_NAME_get_text_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XGX509_NAME_hashLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X X509_NAME_hash_oldLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X; X509_NAME_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XHX509_NAME_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XIX509_NAME_onelineLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XJX509_NAME_printLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X  X509_NAME_print_exLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#} X509_NAME_print_ex_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XKX509_NAME_setLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'LX509_OBJECT_free_contentsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X( X509_OBJECT_idx_by_subjectLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 65 ` d X-MX509_OBJECT_retrieve_by_subjectLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X( X509_OBJECT_retrieve_matchLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&NX509_OBJECT_up_ref_countLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XOX509_PKEY_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XPX509_PKEY_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$X509_POLICY_NODE_printLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XQX509_PUBKEY_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XRX509_PUBKEY_getLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$X509_PUBKEY_get0_paramLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d Xw X509_PUBKEY_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XSX509_PUBKEY_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XTX509_PUBKEY_setLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$uX509_PUBKEY_set0_paramLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X*X509_PURPOSE_addLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"GX509_PURPOSE_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X{X509_PURPOSE_get0LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$X509_PURPOSE_get0_nameLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%9X509_PURPOSE_get0_snameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$X509_PURPOSE_get_by_idLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'X509_PURPOSE_get_by_snameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$X509_PURPOSE_get_countLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!X509_PURPOSE_get_idLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$X509_PURPOSE_get_trustLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XB X509_PURPOSE_setLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X UX509_REQ_INFO_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XC X509_REQ_INFO_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XVX509_REQ_INFO_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X X509_REQ_add1_attrLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'X509_REQ_add1_attr_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'X509_REQ_add1_attr_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'X509_REQ_add1_attr_by_txtLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%YX509_REQ_add_extensionsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)WX509_REQ_add_extensions_nidLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X( X509_REQ_check_private_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"X509_REQ_delete_attrLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X: X509_REQ_digestLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XWX509_REQ_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$SX509_REQ_extension_nidLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XXX509_REQ_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!c X509_REQ_get1_emailLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XX509_REQ_get_attrLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&X509_REQ_get_attr_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&X509_REQ_get_attr_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%X509_REQ_get_attr_countLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)UX509_REQ_get_extension_nidsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%PX509_REQ_get_extensionsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!YX509_REQ_get_pubkeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X? X509_REQ_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XZX509_REQ_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X[X509_REQ_printLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X X509_REQ_print_exLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X\X509_REQ_print_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)QX509_REQ_set_extension_nidsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!]X509_REQ_set_pubkeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'^X509_REQ_set_subject_nameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"_X509_REQ_set_versionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X`X509_REQ_signLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X6X509_REQ_sign_ctxLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XaX509_REQ_to_X509LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XbX509_REQ_verifyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X' X509_REVOKED_add1_ext_i2dLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"cX509_REVOKED_add_extLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%dX509_REVOKED_delete_extLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XgX509_REVOKED_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XeX509_REVOKED_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"fX509_REVOKED_get_extLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)gX509_REVOKED_get_ext_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)hX509_REVOKED_get_ext_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 66 ` d X.iX509_REVOKED_get_ext_by_criticalLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(jX509_REVOKED_get_ext_countLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&uX509_REVOKED_get_ext_d2iLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XR X509_REVOKED_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XkX509_REVOKED_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 65 ` d X-0 X509_REVOKED_set_revocationDateLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+ X509_REVOKED_set_serialNumberLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XlX509_SIG_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X X509_SIG_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XmX509_SIG_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$nX509_STORE_CTX_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!X509_STORE_CTX_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 65 ` d X-X509_STORE_CTX_get0_current_crlLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 68 ` d X0X509_STORE_CTX_get0_current_issuerLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X' X509_STORE_CTX_get0_paramLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 64 ` d X,X509_STORE_CTX_get0_parent_ctxLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 65 ` d X-X509_STORE_CTX_get0_policy_treeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'fX509_STORE_CTX_get0_storeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'X509_STORE_CTX_get1_chainLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X( X509_STORE_CTX_get1_issuerLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&X509_STORE_CTX_get_chainLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 65 ` d X-X509_STORE_CTX_get_current_certLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&X509_STORE_CTX_get_errorLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 64 ` d X,X509_STORE_CTX_get_error_depthLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(X509_STORE_CTX_get_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 65 ` d X-LX509_STORE_CTX_get_ex_new_indexLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 68 ` d X0 X509_STORE_CTX_get_explicit_policyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!oX509_STORE_CTX_initLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X X509_STORE_CTX_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 64 ` d X,X509_STORE_CTX_purpose_inheritLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X& X509_STORE_CTX_set0_crlsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X' X509_STORE_CTX_set0_paramLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%X509_STORE_CTX_set_certLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&X509_STORE_CTX_set_chainLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X( X509_STORE_CTX_set_defaultLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&1 X509_STORE_CTX_set_depthLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&X509_STORE_CTX_set_errorLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(X509_STORE_CTX_set_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X& X509_STORE_CTX_set_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(X509_STORE_CTX_set_purposeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% X509_STORE_CTX_set_timeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&X509_STORE_CTX_set_trustLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X* X509_STORE_CTX_set_verify_cbLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X* X509_STORE_CTX_trusted_stackLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!pX509_STORE_add_certLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X X509_STORE_add_crlLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#qX509_STORE_add_lookupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XrX509_STORE_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#QX509_STORE_get1_certsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"6X509_STORE_get1_crlsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'sX509_STORE_get_by_subjectLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'tX509_STORE_load_locationsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XuX509_STORE_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#\X509_STORE_set1_paramLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X*vX509_STORE_set_default_pathsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" X509_STORE_set_depthLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"$ X509_STORE_set_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+aX509_STORE_set_lookup_crls_cbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ X509_STORE_set_purposeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" X509_STORE_set_trustLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&X509_STORE_set_verify_cbLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XX509_TRUST_addLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X X509_TRUST_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XX509_TRUST_get0LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"X509_TRUST_get0_nameLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"X509_TRUST_get_by_idLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X">X509_TRUST_get_countLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"X509_TRUST_get_flagsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"X509_TRUST_get_trustLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X X509_TRUST_setLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$X509_TRUST_set_defaultLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XwX509_VAL_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X X509_VAL_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XxX509_VAL_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+DX509_VERIFY_PARAM_add0_policyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X*wX509_VERIFY_PARAM_add0_tableLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)X509_VERIFY_PARAM_add1_hostLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+X509_VERIFY_PARAM_clear_flagsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ X509_VERIFY_PARAM_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$X509_VERIFY_PARAM_get0LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)X509_VERIFY_PARAM_get0_nameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 65 ` d X-X509_VERIFY_PARAM_get0_peernameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)X509_VERIFY_PARAM_get_countLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X) X509_VERIFY_PARAM_get_depthLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)X509_VERIFY_PARAM_get_flagsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'2 X509_VERIFY_PARAM_inheritLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&KX509_VERIFY_PARAM_lookupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#m X509_VERIFY_PARAM_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$X509_VERIFY_PARAM_set1LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*XX509_VERIFY_PARAM_set1_emailLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)^X509_VERIFY_PARAM_set1_hostLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'_X509_VERIFY_PARAM_set1_ipLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+VX509_VERIFY_PARAM_set1_ip_ascLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)U X509_VERIFY_PARAM_set1_nameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 65 ` d X-T X509_VERIFY_PARAM_set1_policiesLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)G X509_VERIFY_PARAM_set_depthLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)] X509_VERIFY_PARAM_set_flagsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 65 ` d X-X509_VERIFY_PARAM_set_hostflagsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+V X509_VERIFY_PARAM_set_purposeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(X509_VERIFY_PARAM_set_timeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X) X509_VERIFY_PARAM_set_trustLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 65 ` d X- X509_VERIFY_PARAM_table_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X X509_add1_ext_i2dLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%"X509_add1_reject_objectLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$\X509_add1_trust_objectLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XyX509_add_extLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XX509_alias_get0LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XX509_alias_set1LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#{X509_certificate_typeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%TX509_chain_check_suitebLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XUX509_chain_up_refLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XX509_check_akidLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X X509_check_caLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XYX509_check_emailLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XZX509_check_hostLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X`X509_check_ipLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X[X509_check_ip_ascLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X X509_check_issuedLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$|X509_check_private_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X X509_check_purposeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X#X509_check_trustLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d XWX509_cmpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#}X509_cmp_current_timeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X X509_cmp_timeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X~X509_delete_extLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XX509_digestLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d XX509_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d Xe X509_email_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 64 ` d X,X509_find_by_issuer_and_serialLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"X509_find_by_subjectLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d XX509_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%f X509_get0_pubkey_bitstrLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!\X509_get0_signatureLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d Xd X509_get1_emailLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XPX509_get1_ocspLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(X509_get_default_cert_areaLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'X509_get_default_cert_dirLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+X509_get_default_cert_dir_envLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(X509_get_default_cert_fileLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 64 ` d X,X509_get_default_cert_file_envLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*X509_get_default_private_dirLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XX509_get_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#X509_get_ex_new_indexLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d XX509_get_extLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!X509_get_ext_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!X509_get_ext_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&X509_get_ext_by_criticalLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X X509_get_ext_countLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XX509_get_ext_d2iLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"X509_get_issuer_nameLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XX509_get_pubkeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(X509_get_pubkey_parametersLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#X509_get_serialNumberLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$]X509_get_signature_nidLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#X509_get_subject_nameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XX509_gmtime_adjLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XkX509_http_nbioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(X509_issuer_and_serial_cmpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)X509_issuer_and_serial_hashLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"X509_issuer_name_cmpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#X509_issuer_name_hashLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'X509_issuer_name_hash_oldLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 41 ` d X X509_itLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X# X509_keyid_get0LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X X509_keyid_set1LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%X509_load_cert_crl_fileLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!X509_load_cert_fileLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X X509_load_crl_fileLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d XX509_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X X509_ocspid_printLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XX509_policy_checkLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X) X509_policy_level_get0_nodeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X*j X509_policy_level_node_countLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X*+ X509_policy_node_get0_parentLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 62 ` d X* X509_policy_node_get0_policyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 66 ` d X.x X509_policy_node_get0_qualifiersLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X# X509_policy_tree_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X) X509_policy_tree_get0_levelLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 64 ` d X,5 X509_policy_tree_get0_policiesLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 69 ` d X1HX509_policy_tree_get0_user_policiesLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X* X509_policy_tree_level_countLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d XX509_printLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X X509_print_exLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X X509_print_ex_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XX509_print_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X O X509_pubkey_digestLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XX509_reject_clearLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XvX509_set_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"X509_set_issuer_nameLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XX509_set_notAfterLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X X509_set_notBeforeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XX509_set_pubkeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#X509_set_serialNumberLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#X509_set_subject_nameLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XX509_set_versionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d XX509_signLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X=X509_sign_ctxLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!9X509_signature_dumpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X" X509_signature_printLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#X509_subject_name_cmpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$X509_subject_name_hashLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(X509_subject_name_hash_oldLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X& X509_supported_extensionLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X X509_time_adjLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XfX509_time_adj_exLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XX509_to_X509_REQLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XX509_trust_clearLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d XX509_verifyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XX509_verify_certLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+X509_verify_cert_error_stringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XX509at_add1_attrLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%X509at_add1_attr_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%X509at_add1_attr_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%X509at_add1_attr_by_txtLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X X509at_delete_attrLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%[X509at_get0_data_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XX509at_get_attrLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$X509at_get_attr_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$X509at_get_attr_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#X509at_get_attr_countLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XX509v3_add_extLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XX509v3_delete_extLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XX509v3_get_extLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#X509v3_get_ext_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#X509v3_get_ext_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(X509v3_get_ext_by_criticalLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"X509v3_get_ext_countLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d X ZLONG_itLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X' _ossl_096_des_random_seedLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X_ossl_old_cryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X% _ossl_old_des_cbc_cksumLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'@ _ossl_old_des_cbc_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X) _ossl_old_des_cfb64_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X' _ossl_old_des_cfb_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!^ _ossl_old_des_cryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ _ossl_old_des_decrypt3LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(& _ossl_old_des_ecb3_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'[ _ossl_old_des_ecb_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 64 ` d X, _ossl_old_des_ede3_cbc_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 66 ` d X. _ossl_old_des_ede3_cfb64_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 66 ` d X. _ossl_old_des_ede3_ofb64_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$x _ossl_old_des_enc_readLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X% _ossl_old_des_enc_writeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X# _ossl_old_des_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$ _ossl_old_des_encrypt2LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$ _ossl_old_des_encrypt3LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" _ossl_old_des_fcryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X' _ossl_old_des_is_weak_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%j _ossl_old_des_key_schedLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X( _ossl_old_des_ncbc_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)q _ossl_old_des_ofb64_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X' _ossl_old_des_ofb_encryptLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#4 _ossl_old_des_optionsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X( _ossl_old_des_pcbc_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X& _ossl_old_des_quad_cksumLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X& _ossl_old_des_random_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'#_ossl_old_des_random_seedLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 63 ` d X+$_ossl_old_des_read_2passwordsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)%_ossl_old_des_read_passwordLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#&_ossl_old_des_read_pwLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X*'_ossl_old_des_read_pw_stringLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X# _ossl_old_des_set_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 62 ` d X* _ossl_old_des_set_odd_parityLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+ _ossl_old_des_string_to_2keysLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X) _ossl_old_des_string_to_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(W _ossl_old_des_xcbc_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#J _shadow_DES_check_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! _shadow_DES_rw_modeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d Xa2d_ASN1_OBJECTLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!a2i_ASN1_ENUMERATEDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xa2i_ASN1_INTEGERLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d Xa2i_ASN1_STRINGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xxa2i_GENERAL_NAMELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X/ a2i_IPADDRESSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xa2i_IPADDRESS_NCLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d Xa2i_ipaddLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d Xasn1_FinishLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xasn1_GetSequenceLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XCasn1_add_errorLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d Xtasn1_const_FinishLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X asn1_do_adbLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X asn1_do_lockLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X asn1_enc_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X asn1_enc_initLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XK asn1_enc_restoreLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X asn1_enc_saveLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d XH asn1_ex_c2iLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d Xg asn1_ex_i2cLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X& asn1_get_choice_selectorLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X 5 asn1_get_field_ptrLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&2 asn1_set_choice_selectorLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d Xb2i_PVK_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d Xb2i_PrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X b2i_PrivateKey_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d Xb2i_PublicKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XLb2i_PublicKey_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d Xbn_add_wordsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d Xbn_div_wordsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d Xh bn_dup_expandLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d Xbn_expand2LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d Xbn_mul_add_wordsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d Xbn_mul_wordsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d Xbn_sqr_wordsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d X\bn_sub_wordsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!u c2i_ASN1_BIT_STRINGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xx c2i_ASN1_INTEGERLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X| c2i_ASN1_OBJECTLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d Xcheck_deferLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$d2i_ACCESS_DESCRIPTIONLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!d2i_ASN1_BIT_STRINGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X Dd2i_ASN1_BMPSTRINGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d Xd2i_ASN1_BOOLEANLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!d2i_ASN1_ENUMERATEDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&d2i_ASN1_GENERALIZEDTIMELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$ d2i_ASN1_GENERALSTRINGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X d2i_ASN1_IA5STRINGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d Xd2i_ASN1_INTEGERLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d Xyd2i_ASN1_NULLLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d Xd2i_ASN1_OBJECTLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#d2i_ASN1_OCTET_STRINGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X d2i_ASN1_PRINTABLELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&d2i_ASN1_PRINTABLESTRINGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#d2i_ASN1_SEQUENCE_ANYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d Xd2i_ASN1_SETLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d Xd2i_ASN1_SET_ANYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X d2i_ASN1_T61STRINGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d Xd2i_ASN1_TIMELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d Xd2i_ASN1_TYPELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d Xtd2i_ASN1_UINTEGERLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X& d2i_ASN1_UNIVERSALSTRINGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d Xd2i_ASN1_UTCTIMELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!>d2i_ASN1_UTF8STRINGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$<d2i_ASN1_VISIBLESTRINGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d Xd2i_ASN1_bytesLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!d2i_ASN1_type_bytesLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'~d2i_AUTHORITY_INFO_ACCESSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!d2i_AUTHORITY_KEYIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X d2i_AutoPrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#d2i_BASIC_CONSTRAINTSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%d2i_CERTIFICATEPOLICIESLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!d2i_CMS_ContentInfoLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$d2i_CMS_ReceiptRequestLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d Xjd2i_CMS_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!d2i_CRL_DIST_POINTSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d Xd2i_DHparamsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XOd2i_DHxparamsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!@d2i_DIRECTORYSTRINGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XBd2i_DISPLAYTEXTLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d Xd2i_DIST_POINTLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! d2i_DIST_POINT_NAMELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d Xd2i_DSAPrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#d2i_DSAPrivateKey_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"d2i_DSAPrivateKey_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d Xd2i_DSAPublicKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d Xd2i_DSA_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X -d2i_DSA_PUBKEY_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d Xd2i_DSA_PUBKEY_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X9d2i_DSA_SIGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d Xd2i_DSAparamsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d Xd2i_ECDSA_SIGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X d2i_ECPKParametersLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d Xd2i_ECParametersLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X d2i_ECPrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" d2i_ECPrivateKey_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!Yd2i_ECPrivateKey_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d Xa d2i_EC_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X{d2i_EC_PUBKEY_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xd2i_EC_PUBKEY_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X d2i_EDIPARTYNAMELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d Xd2i_ESS_CERT_IDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#d2i_ESS_ISSUER_SERIALLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"Sd2i_ESS_SIGNING_CERTLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$r d2i_EXTENDED_KEY_USAGELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d Xd2i_GENERAL_NAMELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d Xd2i_GENERAL_NAMESLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$d2i_ISSUING_DIST_POINTLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X d2i_KRB5_APREQLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X u d2i_KRB5_APREQBODYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X} d2i_KRB5_AUTHDATALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X d2i_KRB5_AUTHENTLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X" d2i_KRB5_AUTHENTBODYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X d2i_KRB5_CHECKSUMLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X d2i_KRB5_ENCDATALIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XU d2i_KRB5_ENCKEYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X d2i_KRB5_PRINCNAMELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X d2i_KRB5_TICKETLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X d2i_KRB5_TKTBODYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(d2i_NETSCAPE_CERT_SEQUENCELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X d2i_NETSCAPE_SPKACLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d Xd2i_NETSCAPE_SPKILIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XTd2i_NETSCAPE_X509LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d Xd2i_NOTICEREFLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xd2i_Netscape_RSALIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X d2i_OCSP_BASICRESPLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X3 d2i_OCSP_CERTIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! d2i_OCSP_CERTSTATUSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X d2i_OCSP_CRLIDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d XP d2i_OCSP_ONEREQLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XK d2i_OCSP_REQINFOLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XX d2i_OCSP_REQUESTLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X d2i_OCSP_RESPBYTESLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X d2i_OCSP_RESPDATALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X d2i_OCSP_RESPIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X d2i_OCSP_RESPONSELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"' d2i_OCSP_REVOKEDINFOLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! d2i_OCSP_SERVICELOCLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X 9 d2i_OCSP_SIGNATURELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!n d2i_OCSP_SINGLERESPLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X0d2i_OTHERNAMELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X{d2i_PBE2PARAMLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X d2i_PBEPARAMLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d Xwd2i_PBKDF2PARAMLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d X d2i_PKCS12LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d Xd2i_PKCS12_BAGSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!d2i_PKCS12_MAC_DATALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X d2i_PKCS12_SAFEBAGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d Xd2i_PKCS12_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d Xd2i_PKCS12_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d Xd2i_PKCS7LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xd2i_PKCS7_DIGESTLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d Xd2i_PKCS7_ENCRYPTLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#d2i_PKCS7_ENC_CONTENTLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X d2i_PKCS7_ENVELOPELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)d2i_PKCS7_ISSUER_AND_SERIALLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"d2i_PKCS7_RECIP_INFOLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d Xd2i_PKCS7_SIGNEDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#d2i_PKCS7_SIGNER_INFOLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%d2i_PKCS7_SIGN_ENVELOPELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d Xd2i_PKCS7_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d Xd2i_PKCS7_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%wd2i_PKCS8PrivateKey_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$d2i_PKCS8PrivateKey_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%$d2i_PKCS8_PRIV_KEY_INFOLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)d2i_PKCS8_PRIV_KEY_INFO_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(d2i_PKCS8_PRIV_KEY_INFO_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d Xd2i_PKCS8_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d Xd2i_PKCS8_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#d2i_PKEY_USAGE_PERIODLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d Xd2i_POLICYINFOLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X d2i_POLICYQUALINFOLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+ d2i_PROXY_CERT_INFO_EXTENSIONLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X d2i_PROXY_POLICYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d Xd2i_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X d2i_PUBKEY_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X d2i_PUBKEY_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d Xd2i_PrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X d2i_PrivateKey_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d Xd2i_PrivateKey_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d Xd2i_PublicKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d Xd2i_RSAPrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#d2i_RSAPrivateKey_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"d2i_RSAPrivateKey_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d Xd2i_RSAPublicKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"d2i_RSAPublicKey_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!d2i_RSAPublicKey_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d Xh d2i_RSA_NETLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!d2i_RSA_OAEP_PARAMSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X :d2i_RSA_PSS_PARAMSLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d Xd2i_RSA_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X d2i_RSA_PUBKEY_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d Xd2i_RSA_PUBKEY_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d X.d2i_SXNETLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X2d2i_SXNETIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d Xbd2i_TS_ACCURACYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X d2i_TS_MSG_IMPRINTLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$Jd2i_TS_MSG_IMPRINT_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#Pd2i_TS_MSG_IMPRINT_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d Xd2i_TS_REQLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d Xed2i_TS_REQ_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d Xd2i_TS_REQ_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d Xd2i_TS_RESPLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d Xd2i_TS_RESP_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X+d2i_TS_RESP_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X hd2i_TS_STATUS_INFOLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X}d2i_TS_TST_INFOLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!d2i_TS_TST_INFO_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X d2i_TS_TST_INFO_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d Xd2i_USERNOTICELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d Xd2i_X509LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d Xd2i_X509_ALGORLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d Xad2i_X509_ALGORSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X d2i_X509_ATTRIBUTELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d Xd2i_X509_AUXLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XCd2i_X509_CERT_AUXLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X rd2i_X509_CERT_PAIRLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d Xd2i_X509_CINFLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d Xd2i_X509_CRLLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d Xd2i_X509_CRL_INFOLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xd2i_X509_CRL_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d Xd2i_X509_CRL_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X d2i_X509_EXTENSIONLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!Ud2i_X509_EXTENSIONSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d Xd2i_X509_NAMELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!d2i_X509_NAME_ENTRYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d Xd2i_X509_PKEYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d Xd2i_X509_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d Xd2i_X509_REQLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d Xd2i_X509_REQ_INFOLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xd2i_X509_REQ_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d Xd2i_X509_REQ_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xd2i_X509_REVOKEDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d Xd2i_X509_SIGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d Xd2i_X509_VALLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d Xd2i_X509_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d Xd2i_X509_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$get_rfc2409_prime_1024LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#get_rfc2409_prime_768LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$get_rfc3526_prime_1536LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$get_rfc3526_prime_2048LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$get_rfc3526_prime_3072LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$get_rfc3526_prime_4096LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$get_rfc3526_prime_6144LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$get_rfc3526_prime_8192LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d Xhex_to_stringLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$& i2a_ACCESS_DESCRIPTIONLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!i2a_ASN1_ENUMERATEDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X/i2a_ASN1_INTEGERLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X0i2a_ASN1_OBJECTLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X1i2a_ASN1_STRINGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d Xi2b_PVK_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X i2b_PrivateKey_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d Xi2b_PublicKey_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!v i2c_ASN1_BIT_STRINGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xy i2c_ASN1_INTEGERLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$i2d_ACCESS_DESCRIPTIONLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!2i2d_ASN1_BIT_STRINGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X Ei2d_ASN1_BMPSTRINGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X3i2d_ASN1_BOOLEANLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!i2d_ASN1_ENUMERATEDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X&i2d_ASN1_GENERALIZEDTIMELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$ i2d_ASN1_GENERALSTRINGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X 5i2d_ASN1_IA5STRINGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X6i2d_ASN1_INTEGERLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X}i2d_ASN1_NULLLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X7i2d_ASN1_OBJECTLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#8i2d_ASN1_OCTET_STRINGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X 9i2d_ASN1_PRINTABLELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 58 ` d X&ei2d_ASN1_PRINTABLESTRINGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#Ii2d_ASN1_SEQUENCE_ANYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X:i2d_ASN1_SETLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d Xei2d_ASN1_SET_ANYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X g i2d_ASN1_T61STRINGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d Xi2d_ASN1_TIMELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X;i2d_ASN1_TYPELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 58 ` d X& i2d_ASN1_UNIVERSALSTRINGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X<i2d_ASN1_UTCTIMELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!=i2d_ASN1_UTF8STRINGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$;i2d_ASN1_VISIBLESTRINGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!i2d_ASN1_bio_streamLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X=i2d_ASN1_bytesLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 59 ` d X'i2d_AUTHORITY_INFO_ACCESSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!i2d_AUTHORITY_KEYIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#i2d_BASIC_CONSTRAINTSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%i2d_CERTIFICATEPOLICIESLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!hi2d_CMS_ContentInfoLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$i2d_CMS_ReceiptRequestLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d Xi2d_CMS_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X pi2d_CMS_bio_streamLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!i2d_CRL_DIST_POINTSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X>i2d_DHparamsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d XKi2d_DHxparamsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!?i2d_DIRECTORYSTRINGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XAi2d_DISPLAYTEXTLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d Xi2d_DIST_POINTLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! i2d_DIST_POINT_NAMELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X?i2d_DSAPrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#@i2d_DSAPrivateKey_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"Ai2d_DSAPrivateKey_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XBi2d_DSAPublicKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d Xi2d_DSA_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X i2d_DSA_PUBKEY_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d Xi2d_DSA_PUBKEY_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X:i2d_DSA_SIGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XCi2d_DSAparamsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X#i2d_ECDSA_SIGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X i2d_ECPKParametersLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X i2d_ECParametersLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X i2d_ECPrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"| i2d_ECPrivateKey_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!Gi2d_ECPrivateKey_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d X i2d_EC_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d Xi2d_EC_PUBKEY_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xui2d_EC_PUBKEY_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X\ i2d_EDIPARTYNAMELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X i2d_ESS_CERT_IDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#i2d_ESS_ISSUER_SERIALLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"Gi2d_ESS_SIGNING_CERTLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$ i2d_EXTENDED_KEY_USAGELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d Xi2d_GENERAL_NAMELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d Xi2d_GENERAL_NAMESLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$xi2d_ISSUING_DIST_POINTLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X i2d_KRB5_APREQLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X % i2d_KRB5_APREQBODYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X i2d_KRB5_AUTHDATALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xl i2d_KRB5_AUTHENTLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"8 i2d_KRB5_AUTHENTBODYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X i2d_KRB5_CHECKSUMLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XA i2d_KRB5_ENCDATALIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X i2d_KRB5_ENCKEYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X i2d_KRB5_PRINCNAMELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X i2d_KRB5_TICKETLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X i2d_KRB5_TKTBODYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 60 ` d X(i2d_NETSCAPE_CERT_SEQUENCELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X Di2d_NETSCAPE_SPKACLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XEi2d_NETSCAPE_SPKILIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XHi2d_NETSCAPE_X509LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d Xi2d_NOTICEREFLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XFi2d_Netscape_RSALIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X i2d_OCSP_BASICRESPLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X i2d_OCSP_CERTIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! i2d_OCSP_CERTSTATUSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X i2d_OCSP_CRLIDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X i2d_OCSP_ONEREQLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X i2d_OCSP_REQINFOLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d X i2d_OCSP_REQUESTLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X i2d_OCSP_RESPBYTESLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XE i2d_OCSP_RESPDATALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XR i2d_OCSP_RESPIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d Xz i2d_OCSP_RESPONSELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"J i2d_OCSP_REVOKEDINFOLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! i2d_OCSP_SERVICELOCLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X i2d_OCSP_SIGNATURELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X! i2d_OCSP_SINGLERESPLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d Xi2d_OTHERNAMELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d Xyi2d_PBE2PARAMLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d Xi2d_PBEPARAMLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d Xui2d_PBKDF2PARAMLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d Xi2d_PKCS12LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d Xi2d_PKCS12_BAGSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! i2d_PKCS12_MAC_DATALIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X i2d_PKCS12_SAFEBAGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d Xi2d_PKCS12_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d Xi2d_PKCS12_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d XGi2d_PKCS7LIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d XHi2d_PKCS7_DIGESTLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XIi2d_PKCS7_ENCRYPTLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#Ji2d_PKCS7_ENC_CONTENTLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X Ki2d_PKCS7_ENVELOPELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)Li2d_PKCS7_ISSUER_AND_SERIALLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d X i2d_PKCS7_NDEFLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"Mi2d_PKCS7_RECIP_INFOLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XNi2d_PKCS7_SIGNEDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#Oi2d_PKCS7_SIGNER_INFOLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%Pi2d_PKCS7_SIGN_ENVELOPELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XQi2d_PKCS7_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"i2d_PKCS7_bio_streamLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XRi2d_PKCS7_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)i2d_PKCS8PrivateKeyInfo_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(i2d_PKCS8PrivateKeyInfo_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%{i2d_PKCS8PrivateKey_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 56 ` d X$|i2d_PKCS8PrivateKey_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 61 ` d X)i2d_PKCS8PrivateKey_nid_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(~i2d_PKCS8PrivateKey_nid_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 57 ` d X%"i2d_PKCS8_PRIV_KEY_INFOLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)i2d_PKCS8_PRIV_KEY_INFO_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 60 ` d X(i2d_PKCS8_PRIV_KEY_INFO_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d Xi2d_PKCS8_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d Xi2d_PKCS8_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#i2d_PKEY_USAGE_PERIODLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d Xi2d_POLICYINFOLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X i2d_POLICYQUALINFOLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 63 ` d X+ i2d_PROXY_CERT_INFO_EXTENSIONLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X i2d_PROXY_POLICYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d Xi2d_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d X i2d_PUBKEY_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X i2d_PUBKEY_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d XSi2d_PrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X i2d_PrivateKey_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d Xi2d_PrivateKey_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d XTi2d_PublicKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d XUi2d_RSAPrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 55 ` d X#Vi2d_RSAPrivateKey_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 54 ` d X"Wi2d_RSAPrivateKey_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d XXi2d_RSAPublicKeyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"i2d_RSAPublicKey_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!i2d_RSAPublicKey_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d Xf i2d_RSA_NETLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!i2d_RSA_OAEP_PARAMSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X >i2d_RSA_PSS_PARAMSLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d Xi2d_RSA_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X i2d_RSA_PUBKEY_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d XAi2d_RSA_PUBKEY_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d X-i2d_SXNETLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X1i2d_SXNETIDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d Xi2d_TS_ACCURACYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X i2d_TS_MSG_IMPRINTLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 56 ` d X$i2d_TS_MSG_IMPRINT_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#i2d_TS_MSG_IMPRINT_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d X%i2d_TS_REQLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d Xi2d_TS_REQ_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d Xi2d_TS_REQ_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d Xi2d_TS_RESPLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d Xpi2d_TS_RESP_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 48 ` d Xi2d_TS_RESP_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X Yi2d_TS_STATUS_INFOLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d Xi2d_TS_TST_INFOLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!<i2d_TS_TST_INFO_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X $i2d_TS_TST_INFO_fpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d Xi2d_USERNOTICELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d XYi2d_X509LIBEAY32.dllLIBEAY32.dll/ 1485441930 0 48 ` d XZi2d_X509_ALGORLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X^i2d_X509_ALGORSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X [i2d_X509_ATTRIBUTELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d XTi2d_X509_AUXLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d Xi2d_X509_CERT_AUXLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X :i2d_X509_CERT_PAIRLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X\i2d_X509_CINFLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X]i2d_X509_CRLLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d X^i2d_X509_CRL_INFOLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d X_i2d_X509_CRL_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X`i2d_X509_CRL_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 52 ` d X ai2d_X509_EXTENSIONLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 53 ` d X!Ri2d_X509_EXTENSIONSLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d Xbi2d_X509_NAMELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!ci2d_X509_NAME_ENTRYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d Xdi2d_X509_PKEYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d Xei2d_X509_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d Xfi2d_X509_REQLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d Xgi2d_X509_REQ_INFOLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xhi2d_X509_REQ_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d Xii2d_X509_REQ_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xji2d_X509_REVOKEDLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d Xki2d_X509_SIGLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d Xli2d_X509_VALLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d Xmi2d_X509_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d Xni2d_X509_fpLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d Xi2d_re_X509_tbsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d X- i2o_ECPublicKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!i2s_ASN1_ENUMERATEDLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 59 ` d X'i2s_ASN1_ENUMERATED_TABLELIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xi2s_ASN1_INTEGERLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#i2s_ASN1_OCTET_STRINGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d Xi2t_ASN1_OBJECTLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!7i2v_ASN1_BIT_STRINGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xi2v_GENERAL_NAMELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d Xi2v_GENERAL_NAMESLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xoidea_cbc_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X pidea_cfb64_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 50 ` d Xqidea_ecb_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d Xridea_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 52 ` d X sidea_ofb64_encryptLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d Xtidea_optionsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"uidea_set_decrypt_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 54 ` d X"videa_set_encrypt_keyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d Xwlh_deleteLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d Xxlh_doallLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d Xylh_doall_argLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 41 ` d Xzlh_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d X{lh_insertLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 40 ` d X|lh_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 47 ` d X}lh_node_statsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 51 ` d X~lh_node_stats_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!lh_node_usage_statsLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 57 ` d X%lh_node_usage_stats_bioLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d Xlh_num_itemsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d Xlh_retrieveLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d Xlh_statsLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d Xlh_stats_bioLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 44 ` d Xlh_strhashLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d Xname_cmpLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d X( o2i_ECPublicKeyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d Xpitem_freeLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d X% pitem_newLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X~ pqueue_findLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d Xxpqueue_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d Xpqueue_insertLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 49 ` d XB pqueue_iteratorLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d Xpqueue_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d Xpqueue_nextLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 45 ` d X pqueue_peekLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d X?pqueue_popLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 46 ` d Xd pqueue_printLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d Xpqueue_sizeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)private_AES_set_decrypt_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 61 ` d X)private_AES_set_encrypt_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X! private_RC4_set_keyLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xs2i_ASN1_INTEGERLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 55 ` d X#s2i_ASN1_OCTET_STRINGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d Xsk_deep_copyLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 43 ` d Xsk_deleteLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d Xsk_delete_ptrLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 40 ` d Xsk_dupLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 41 ` d Xsk_findLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d X sk_find_exLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 41 ` d Xsk_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 43 ` d Xsk_insertLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 46 ` d X sk_is_sortedLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 40 ` d Xsk_newLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d Xk sk_new_nullLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 40 ` d Xvsk_numLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 40 ` d Xsk_popLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 45 ` d Xsk_pop_freeLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 41 ` d Xsk_pushLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 40 ` d Xwsk_setLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 49 ` d Xsk_set_cmp_funcLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 42 ` d Xsk_shiftLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 41 ` d Xsk_sortLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 44 ` d Xsk_unshiftLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 42 ` d Xusk_valueLIBEAY32.dllLIBEAY32.dll/ 1485441930 0 41 ` d Xsk_zeroLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 47 ` d Xstring_to_hexLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!v2i_ASN1_BIT_STRINGLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 50 ` d Xv2i_GENERAL_NAMELIBEAY32.dllLIBEAY32.dll/ 1485441930 0 51 ` d Xv2i_GENERAL_NAMESLIBEAY32.dll LIBEAY32.dll/ 1485441930 0 53 ` d X!v2i_GENERAL_NAME_exLIBEAY32.dll vibe.d-0.8.2/lib/win-amd64/ssleay32.dll000066400000000000000000012610001324361747700173240ustar00rootroot00000000000000MZ@ !L!This program cannot be run in DOS mode. $Uat'''$''W''W''W''W''E''''E'#'E''''E''Rich'PEd X"  ` )0PHP( `8@p .text{ `.rdata(@@.data(P0@.pdata(P*$@@.rsrcHN@@.reloc T@B3́uH3HíuHA3@VWATAWH{H+H3y3HL$xWҍWD$xDts3LPMuHpDHHLEF,H\}0tHM}sHVH$H9u(L @D$ JDB3r Hl$@Ll$8Lt$09t "DuDnHHAA!!tCg^L AD$ \JDBq HNE3E3AQ F(gq HF(NH";!wHc0HHΉ~D8؅. HHǀ"!FH!~`,FH{HΉ~D`؅FH!HD$ppHAt'HtHHT$pHm؅-džFH0!~`Hx>؅]t!~`AEƉFHFH@!~`HHA$u:Au1H<؅P!"E~`FHZAFHP!~`EHHPsHpHus rmuhxdtJHHH`HtOHHB(t&pHHB(E;AFH`!~`Hb+?3IbHHu&XPL *0HD@AS8D$ K bHb0HbPL /S8KDCD$ Q a@tH/DHH`HMH$A AHRHIBABIuLH$A@HIHD$ aH΋aD$ _ L /A>D$ L .A J`2DúHGHH$H$HHHt!D`HHǁH!HL$H`IaAH$H3WiH$HA_A^_@VWATAUAW@hH+LQHD$p!HD$(ADBEHD$ E3E3AR`D9d$p/HH$Hl$8Lt$0@t/t*D$ L a.JDB>_(>~3D9t*L 9.D$ JDB`s_ qADk t D$ L .A.HFXHD$x}^LHuD$ L -H\$xHCk CH\$x E;t2D$ L -DCmE3 AF;{AH CH\$x DD;HT$xD3_LHt_HH9D$xu6II]tE3D;H\$xD$ L b-2D$ L 9-DCUD$ L -A 2D$ L ,DCU2D$ L ,DCUI\h>u(D$ L ,Au@ttD$ L ,HHtdHuXXP>IHMD|D$ L ,AJ\DúHH0HHt ^I3\HH0HH0|H0HHuuHH0HH0HHuLD$ L +AAJA\FHMtIk]Mt|WAAA ILL$0 ȍA;t7u A2D$ L E!AILL$0ك0} A3D$ L #!A[HL$x0NfHT$0LϋLDd$ LLL\$00A{DK3ADQAD"AD"3AAٍB"D"t8DA3D3ÍQA@"AAA""D E"MEEACDBLwM@A"A" CLHT$0AB"LrBDA" BLHT$0BLsBDA"A" ABLHT$0BLtB"DA" ABLHT$0BLuB"DA" BLBLvHT$0BDA"A" I@BLH0s L\$09HFH0LD$0LHA0HAR0H0HHL$0JA D$ L AA @A;~AAA ILL$0#@tD$ + L A AׅtFB;t?u+L D$ 3 JDB JA( ILL$0@tA @tHAIcHk8HLl`MtA}u I} Hu@D$ E L NAP HHuD$ L L 8A* ucH0H.KHHt.IHaJA;uHHJLHtH>JI^ (D$ [ L A E3I;IHHu(L KDBD$ c aIM HL$0LH=IHc2A(L D$ k AVcEFݍJIHHR HHHHLMt IHHHHFH0LD$0LHDHARH׋H0HHL$0"HM] @pMeIHD$PHu(L HD@AD$ I KHM @`tHHxLa HLIIILIHL$PILIILd$PIHIHHD$HHu(L QHD@AD$ d GM@yD$ n L $A7H0HHHD$XHtD8uA/D$ 2 L As HD$p @IsHH sHH3AHHuDpPD$ [ L D@AHAD$ _ L p AD&H0HjALHtHH@ @LL$`LD$@HT$dHL$0\$ ? |$@D9l$`HcD$dLL$0LD$pHT$xHHD$ a@D$ { L HFH0LD$xLHA HAR H0HHL$x>AAHA L|$(D$ ?AA"D$ s L U AJ?I?H?EtBAuD$ L 9 AA(J>EƺHLl$8HL$X)?HL$Hm?HD$PHtH?I>FHH$L$HPH34GH$H`A_A^A]^]@S0FH+HHكu22L 2DB2D$ =CHH0[HA"HL$@HL$(DBHACD$ P`|$@Hu22L DB1D$ p=CHH0[Ã}CH3H0[ËS`Ht$PHsXH|$X>G;~Ht$PH|$XCH3H0[D>OHl$H;u@Hp A6m<H`Hu+L p HD@A2D$ 8<CH3HVLHE@hHl$HHt$PH|$XH0[H\$W DH+yH"HHcHAHIPHRtHi;uCHH\$0H _HCHHCPItHHHAAALcHDHCDLHAQxHCHHH\$0H _H@USVWATAUAVAWH8CH+yH`!HHyPHAHH}XRtHWHHHUPZLcD3HEPHNIAHEPHBptMHUHHiCHMPHcHLÈHMPAHMPHUHHHMPCHEPHDH}XHHDuHHEPA\E3HHE`HHE9ffAH93HL;HNHHϋ؋RtAp96HFHUPHHFPytIHxIcH H}Pu"HEPXHEP;AA ;È_DDH]`HA8H}XD;4HFEHHFPQtHHPHcEHHAHUPHEP DxHFHEPLAQxHFHBpF`HMXHce8u@D$ XL AAH 9FHqD$ ;L HFPHcN`HHHMPHEPHHEPHEPHHEPHEPHHEPHEPF`FHa!HFHHH8A_A^A]A\_^[]@S @H+yH !HuHAE33LAQxCH!!HCHHH [HH\$Ht$H|$ UATAUAVAWH$@v@H+HH3H0yH!HLXH03]=RHqAU 7LH2HL$P7HM8H0HT$0L|$0/HT$@D3L|$@HHE33HDpDD;HT$0HL|$0H˅1yHGHQtHOP†A6XHGHHGPQtHPHT$0IHt6HMD$(LL$PHL$ LH HЅH76MHL$PHHE3HD$ q66IHMALLt$ `7A D9tA H0HD$0HL$0HHL$0D9tA H0HL$0HHL$0D9tA H0HL$0HHL$0D9uH0DD1H\$0 HHL$PH\$0HD$075HL$0HLc >HL$P5HT$0LD$8HcMDd$ HHL$PHT$0"5]HT$0HcD$8LD$8HHL$PHT$044LD$0HcD$8HMLHLD$0L+5 HT$0LD$HEHux2H)INHBptLeAIFHMHRtm(u%L jHD@D$ l)IFADeHIFPYtHXT$0H]HcH|u@A sD#HLAt+AD{HCAA+ą~+H3HDHCHcD$0LKHcL$0HHL(HcT$0HcLHىT$0cEyAD$HHT$8fCHEHCHcHL1HL$8'E3HLd$8E3AIpHAĀ9t=s H9uIpHAĀ9t=s H9uCIpHHAĀ:Ht=s H9uDHAPIpHAĀ9t@=s H9uHLmMfA}IFHApL}fHM'Ipu HHHME3&hIHMA H&CIHMA H &HUHMLc&LD$0HMI&HcL$0LD2IE LKHUHD$(HD$4EĹrHD$ %'L JDAD$ %LD$4D$4CD$4IFDƺ HIPxHMAFHQ!%IFIHHM/H3K.L$I[8Is@I{HIA_A^A]A\]D$ L DA&%PHUHIFHApt5LHI.uxPD$ L LD@D1HUHHME3$IHMA H$IHMA H $~dHUHMLc$~PHSLD$0HMM$~7D$0D$0CD$0IFHAp`XD$ L ~D$ L zA;L AfD$ 6#KD$ BL A(#DǺI胰L|$8MtI"HL$@#HM#AFHH\$Hl$Ht$ WATAUAVAW0+H+HE33ARLAT$WHL$`ED$`i$"3?HPHuHpAHHHEC,H5-0tH&-sH9t DL-̞D{HAActi9+HKE3E3AQ C(!KHC(KH0HcA`iA iIHDcD{HK HSCH Dc`H;A&#HC3H8D9t CHD9tCHDc`CH0Dc`HXuCHDc`HHAu;Au2H2 D9@EDc`CHiACH@Dc`SHHCHPDc`|!H-CH`Dc`H 7oHHAtHHD9pDc`EȉKHH? CHDc`{HAHD‰CHt{HDc`8HODc`KHAH詽}HD9Dc`EH0CHHHHHHuH0DH0HCHHRHCHLAP UHSCH7HCHLDBAAHMI@D$ HCH HD9t4ǀHtDCHHD`Dc`D9tǀDc`ǀDc`H -CHDc`_HCH@Dc`=HD9uHDB D9EDc`CHHpǃCH@dADc8HtHDB֋%=CL9cPu-HH@HHkPIHƼ3H2HtHpCH@`HDc` HDHD9uOEuJD9xtHKAV E3E3GHt{HA;tAHD{H։{HEqHHKPHt LcPHuH/HDc`DDc<7D9t HpHFHC0Hp@hHWDHL AiJD$ 6HDBN'CHLL bD$ JDBCH L D$ JDB{K,HtHHt DǺHH\$hHl$pHt$xH0A_A^A]A\_Ða)btb c;c]ccc$dGd%efeeeh     ́uHE3HDH\$W0!H+HcA3Hхx.Hk8HL:HHtHdHH_Hu"L TDA0D$ HH\$@H0_@UVATAVX!H+pHHHDbDrA$AH0H\$PH|$HLl$@LL|$8Mu#L VZNDFD$ ^IH$IH$IcEu1HI0K'AD$ L A0A@tD$ L A}A`tD$ L A~Hk8JL+HHhJL+H׉$HDAt%AσtD$ L qAFAt$Aǃ<tD$ L gAEƻAD$HHQ(ʃu$Aǃ!~8H@t+HDB D$ IL A"HnXH Fz LHuD$ QL _D@AH]H}H$Ht/ HL vuH%A] HHHHHHuD$ _L DAAhLHGHH  $t2ILDffAHHRM@IuGHHFHApGH ؋+ŃA;v+HDB0覕D$ rL GAHLxhHDHLHDHLHDHLHD0HLHHDhHLHDHLHDHLHDDHHh,H()u)PD@PHuD$ L 6AAwHGD7HAD +A;$tVHDB0"D$ L A$HDB0D$ }L AhAEEA;GH A;dH$D3H$LH HH9$IIMA;rH$ǀHHHHt HWpHLMAI3MtH'I=AHl$@H\$HH|$8HPA_A^A]A\^D$ L AAHDB0萒D$ L A uVHDB0YD$ L ZA ^ u"HDB0%D$ L *HDB0D$ L AJFHH\$ UVATAUAVHl$P$ H+HZH3HE@E3HHMELl$0Ll$pLl$XLl$`Ll$HLl$hLl$@LVHD$x@HD$(DBAHΉD$ AR`DD9d$xHH$L$ HXÈt0L ED$ JDBgD$8 AsHH0HHpHHt HpLHǀH0H~XHH}HHHtH0HLH0HHHtH0HLH0HHHt2H0HL@=HH0HHHDxD$82%D|$PD$TA}(L D$ JDBGIeG ȁ~0L D$8(JDBD$ I!AF;~*L yA<JD$ IYHcHOHH0HH0L9u0L /D$8(JDBD$ qID$TD+/AAA}D$ L ADGH AF;~D$ L A^E3HD{HHu0D$ L AQyILLHcHAA+ǃ}D$ L qAGAH AA+;~D$ L IA]bE3HDHHuD$ L #LHcHAA+ǃ}D$ L AAAA+H;~D$ L A_E3HDfHHuD$ L AHA+ǃ}D$ !L AGAH AA+;~D$ )L A\JE3HDHHuD$ /L k4HcHT$8HHE+@uD$ 6L MAs \$Pt$H0HHILHD$0` H0HHLHD$0d>H@(u"D$8 D$ QL AQ HHD$XHuD$ UL D@AGA}D$ [L A GH AF;~D$ aL |Ay LAHD{_HL$XHAHuD$ gL RHcHAA+ǃ}D$ mL =Av GAH AA+;~D$ uL Ax> LA HDHL$XHA HuD$ {L %HcE+HD$PH0HHIHHHD$0HHB(DEA;-L D$8 JDBgD$ r H0LHHD$XLl$XH7D$ L 9ADb~LHD$`HuD$ L $D@/A}D$ L A GH AF;~D$ L An E3HD{HID$HuD$ L HcHAA+ǃ}D$ L Ac GAH AA+;~D$ L Al+ E3HDID$HuD$ L nHcHAA+ǃ}D$ L YA GAH AA+;~D$ L 1Am E3HD&HID$ HuD$ L HcE+HD9iuD$ L A@ ID$D9h\HPID$D9h'Hu HH8 |HHIT$HiHHYIL$HJH˅xDD$ L Aw%\$Pt!H0HHILHD$0,t$H0HHpLHD$0MH0HHD$`Ll$`HHD$ L  D$ L AwD$ L A+vLHD$HHu+L HD@AD$ !YILpA}D$ 2L kADAHH/ uD$ :L LAzOu"D$8PD$ AL -A:HHu+D$ GL JDBILHIuD$ KL HInHHHB(t1H=~"D$8<D$ VL A64HLHD$@H}HD$hHjDANHD;:HT$@ELHEHD$ \$PAIE+t!H0HHILHD$0,@t$H0HH0LHD$0MH\$HHT$@HH0Ll$HHHHL$hHL$@Ll$hLl$@MHFHApt\A},D$ L AJH\$0HL$pMLHtHA HD$pA}D$ L LGIA A;D;EA<$HFHApLeHM>Hpu HHHME3"HHMA HHHMA H HUHMMcLD$THMIL$TLD3Ld$0LOHUID$ EŹrHD$(Dt$ y0L D$83JDBD$ IL D$83JDBD$ IL D$ JDBH\$0D$8PHT$pHME3HHMA H~rHHMA H o~QHUHMMc[~=HWHMMEhD$83D$ L A{D$8PD$ L AD$ L AD$ iL 5A2L D$ _JDBhIt+D$8 D$ L APD|$PD$TMAHst L CD$ JDBH\$0L|$@Ld$HH`HD$XHtHHD$`HtHHL$hHIxMtIHMFHH$L$HM@H3FH$HPA^A]A\^]D|$PD$TEtD$ L |AEIHM8D$8/D$ L AJIDD$8H}@S@4H+HAHٺHL$PDBAHL$(HD$ @P`|$P+Hl$XHt$`H|$8Lt$0}2D$ L DGmHsX.F~ F F F G;t2D$  L FDGmkH0zDHXA@t s HAPHt q0H033BLHuDxPD$ L D@AtDǺHf|CHH01L0H0E3H0HtH0L8HA, H0H0H0H0Hu.L ZDA-D$ . CHYHcHVLH0@H0H8H0LKDLCHHNHLt$(HD$ NH|$8Ht$`Hl$XLt$0H@[@SUATAUAW@H+LQHD$p0HD$(DBAL3D$ E3E3AR`9l$pI tH@ t ^H$H|$8Lt$0 t D$ L DChIXLHu%D$ L JDBWG7H G F;t2D$ L DCmOE3t|AF;#GAH G DD;HT$xD3H|$x HHHH9D$xuwHI tTH|$x3D;rII'E9@A|(D$ L YAD$ L -2D$ L DCUS*D$ L DC62D$ L DCU2D$ L mDCUJ&HHI0HHtF%I03IHL#E3HHELIHAt A tAMUI@EIHHcyD$ %L !A&IHsTx#;t/D$ /L AL HMDB{D$ 3(Hk8HHHHtH/H{I0HHtL HMDBD$ ?I0H-{LsI0HHtMI0LI0A|IED$ L AIJDúIvAGHI HHILt$0H|$8H$H@A_A]A\][ǁH@A_A]A\][@S0H+HAHٺ`HL$@DBAHL$(HD$ P`|$@tJ~AHDB0uL JDBD$ CHH0[øH0[@SWAUpH+LQLxIH@pt ǁ H$AHD$(DBD$ NAR`$$NHKHl$hHt$`HLd$XE3@pLt$PL|$Ht`HDuIHD9!uǂD$ L ؾ DGhO AP HtD$ L HSXH$9HT$02B u r`TH@Tt)L ]AJD$ 3e`HCH0 H$DA;kD8BaHHH$JH$DH H$HnH$ ;L9HH0L90L$@0HPH0HD$(H$LBE3HHHD$ HH$HuHH$|eH0HH$L0A;nDIVHLHL{A;FhusH INlDTu\ǃL D$ JDBx3ADL D$ APNJ/L AWcOD$ H0D9`Dv3Hc0H0LLhDH0H$HHH$IHHH$%dHHu(x/L HWcAD$ 8%HCHApu AEEeF$AEnFAE aFAETHC33HcH$H~HHMy*/L AWcOD$ 3H0HHt @D9tH9$2L gD$ DGAW`O/L _AWcOD$ )td/L A,WcOD$ M=L D$ JDBx+ H$P щFDǺHnCHLt$PLd$XHt$`Hl$hL|$HHpA]_[H\$ W@@H+3yHpHH|$XH|$Pu{HHhHtPHpЅyC(H\$hH@_u%HDBN]mCH3H\$hH@_C(HυqKH{HqHt$`HpH9tEHHpH|$8HLHD$PH|$0LL$XHH|$(HD$ ȅu%HpLMtLD$PHT$XHAыȋyHt$`C(H\$hH@_C(u`H9|$Pt5HL$XHt+HHCHq݇tHT$PH<u($L DBӋD$ HL$XHt=HL$PHtzt HvuL;u3HDB(HkHt$`H\$hH@_HǀCHr{HruzHCHst HH8HH{uJL HD@DD$ 4HDBN%kHt$`CH3H\$hH@_HCHHHt$`H\$hH@_H\$Ht$H|$ UATAUAVAWH$06H+HlH3HE3yHHEELd$PLd$HHAHHFPDqtLpHHAH0HHu'D$ L =ADAHAPTHHu3HIHHHH8?Hx H2H^HL$Z.D$XD$Y!~eH0I@0>~IHT$XLύH/MƉD$ 2DbD$  L DB߹GMHL$HMtIMtIHL$PFHi>~ D{AHFH0LD$XLHA0HAR0H0HHL$X7L DBD$ H 7H0LMu1AWEG HRhD$ L ~AODB\IHuIHHHtFHHHIHtoHHD$ L "DBqHHHu D$ L HD@AHsu/D$ L DA_H? HW LI7LcM9uHED$ L HFH0ELMHHARM3ҋH0HIHtHEHK ^IVDAE~HK JHAnGH0HHu6QDA HYfL ݹDB\D$  5HHu6H0bLHD$PH8HX HHHHHHuHlLHD$0Hu'D$ ? L gAAAHAPWIHHu%L ID@HD$ D ^Iwu'D$ \ L @A+AHAPm+HD$ h L ˃MLÙILd$ HcHc؅D$ n L HFH0DLMHHARH0LÉAI3IE3HEAHLd$(Ld$ UHA HLHD$HMHIHcPMAHHD$HHHD$(H\$ INILcDxAHL$HIgHL$0I]HFEǺLHAQxFHHFHHHH3qL$I[8Is@I{HIA_A^A]A\]D$ L D$ 9 L D$ - L ٶ ~H0HHHu5HhHu)L AJD$ 3HL]HHuD$ L ҪHHM `)HMHiHHRvHA HHxRHA HH T.LD$D@*OvD$  L l+LE)HHD$8@AQ8LMLD$8HUA ILt$ XD$  L \$0HU%@ffBHcHRD9D$0D$0HcBD9\$0É\$0IuD$0G\$0HFDúLHAQxFHHMI1HFHHHM'H3WL$I[8Is@IA_A^A\_]D$ L |AD5HMVIFH@U H+yHHH\$0Ht$8hFH|$@Lt$HA DD+HAPHx@wH`HOFHNHE3D48H\$0CA6@JODHt$8GDwLt$HH|$@BE`EHEdHH ]`HAPLHAAEAAAAAAA@AdA`̸(fH+PH(`̸(FH+HH(H\$Ht$W0H+BIHwBHu2L HD@AD$ PV3H\$@Ht$HH0_Ãt`t?t1u^H3H\$@Ht$HH0_HHpH3H\$@Ht$HH0_HHp83H\$@Ht$HH0_HHp(H\$@Ht$H3H0_H\$ VATAUAVAW (H+HE3@MHH\$PuCTuLMLIE3?Hl$XH|$`AIH@$tHNHBpHHC SKDCt   A _os Hht|G(t tAt t3ttPWHu?t;HIx,ta@@t[HtKMu ILH\$PIAD;IHl$XH|$`H\$hH A_A^A]A\^ËIkIH\$hH A_A^A]A\^H\$Hl$Ht$H|$ ATAVAW \H+H)HHHt HHE3H@HtHL@HHHtWHLHHHtEHLHDHHHHHLDHtHLHL9tH~.HHHt6HLH3AHHHHHHHHLHDHDcpDHDHDHDH`HtsL`DhH\$@Hl$HHt$PH|$XH A_A^A\H\$Hl$Ht$WAVAW0"H+3BIMcDHًvBw7Hu'L HD@AD$ z M3AAvsH@IcDHዻJH8H HH8HHH9x HH`H@Hu+D$ L "ACc3HHHu'L HD@D$ ,3aHHH HtHHx 5L DA.D$ 3HuD$ L FHHHuD$ L D@$HHH0HtiHHx0D$ L \ABHuD$ L MHuD$ L =D@+u.H,u"HD$ L A+nHHH@HtHHp@D$ L AB/EHHt HHH@8.ts Hŀ8uHH=w,HHHumD$ L ~D@DD$ L VA?D$  L \A@uHD HHH\$PHl$XHt$`H0A_A^_HHHHHHHtHDHCHApHt uwk`Et J>HHEt ,"HHEt  ZHHHAHHHAuZ9{8=HHH&At AFH;HHHHuHA aH0HL(H HH5H,@AAFMv ؋tHH;rHHMLHHLAHfHDpPHME3H7|HE3HeHMAHHHAHI.9{8H9HHHtHtHH Ht HHH9{82HMHOHpHEHRHEE3HkHEAHiNHCHApH0HHHH@HHHӼ9{8eH0HUHHEH9uH9u H9&HHHHt H貾*HHt H袾HHtH蒾t H>MH蓼3>H0HHHHHpH9}qHpH9 Zr;@ŋr;@ŋr;@ŋr;@ŋ;@ŋi"W=ȿڿ  0Q}/?Tn&Fe/ ///////////////////////////////////////// / ////////////////////// //!"#$%&'()/*///+,-/.L HL&6HcAAIMA(MA8MAHLLLÁL8ÁL0ÁL@3+O8f}    H\$Ht$W0H+H BIHtH 4HD,LAH~ HN`H迸@~qH\$@Ht$HH0_Ht7HxHHt'HN Ht̹H^ H\$@Ht$HH0_úD$ L QJDA˷3H\$@Ht$HH0_D$ L 4JDBHvHHuD$ L HD@HN0HtIH^0H\$@Ht$HH0_D$ L Hu D$ L ݶJDBBH HHu D$ L HD@u%HuH辷D$ L HN@Ht蟷H^@H\$@Ht$HH0_D$ L eHH\$@Ht$HH0_HuC0H\$@Ht$HH0_A0t"D$ L "JAEJ;u6ABAAAA H\$@Ht$HH0_AAAAA H\$@Ht$HH0_HH\$@Ht$HH0_HHHt3HHHDHӋEtfs H8uwZHEt=s H9ur8HGHHH)D$ L HD@DD$ L ʹJAeHHH@H\$@Ht$HH0_ÁH(H\$@Ht$HH0_DH\$@Ht$HH0_McHHLH\$@Ht$HH0_SHHLH\$@Ht$HH0_DFPH\$@Ht$HH0_McE3HHH\$@Ht$HH0_E3HHH\$@Ht$HH0_McAHHH\$@Ht$HH0_uAHHH\$@Ht$HH0_McHHH\$@Ht$HH0_( HWHH\$@Ht$HH0_EHHE3H\$@Ht$HH0_]EHHAH\$@Ht$HH0_:Hu1HHHH$H\$@Ht$HH0_HHu EIH\$@Ht$HH0_HHH3HH\$@Ht$HH0_HHEtH\$@Ht$HH0_H\$@Ht$HH0_=HHEtH\$@Ht$HH0_H\$@Ht$HH0_jHHHI H\$@Ht$HH0_HHH\$@Ht$HH0_AHH\$@Ht$HH0_gPwf$8T##I 6pe+Kh!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! !!!!!!!!!!!!! !!!!!!!!!!!!!!!!!! H;S H+HHsHHtHMHHtHNHH@Ht良HHHtׯHHHtӰHHHt HHHHt.HHtH9HHHtHɥHޮḪHǃH [̃}sHk8HH+3̸h膷H+AHL$ A} ЉT$0H[FHhH\$Hl$Ht$ WAVAW 2H+L3HIHDDHt!M H胷H GHT$@ѶHAATDEHtEHT$@L@IIDJtt uDq AHHT$@Iuρ>HHQ| sf t$Eut EuEt Hc8>utHc8Hc8t Hc8Et Hc8`t->|;EutHc8AEuEt Hc8B>|Et Hc9@H\$HHl$PHt$XH A_A^_H\$W pH+HHkA MHHu H\$0H _3AH輵3HHLHHHGHPH\$0H _̸}̸(ִH+DHH(́yLtH u$3HtI%=t3ËJ̸(VH+E3H(H\$Hl$Ht$W0&H+H3AAH?HtHHDLǀHCHˉ|$ PhDu1Hu!HCC,DLźHˉ|$ PhK,HǀAH\$@Hl$HHt$PH0_Hy0tHt3ǀ@S $H+HHكt[uRuI0u=HCH0ǀHHH [3H [H\$Ht$W 苲H+HHIHHtnHLJHtUHtPHv3H\$0Ht$8H _HߩA$HHtLHH薲H H\$0Ht$8H _@S0H+y@HyH@IDu-PE3KDH+6HtUH0[HtHCHPxu- H0[u HCE3E33HD$ PhCDt{DuHt3H0[ADH0[H\$Ht$W H+H3AHHtHHHC H9Cyu#DLƺH5ȅ~HHHKE3E3AQ C(耧~WHC(;H HH@H\$0Ht$8H _HCDLƺHPpȅ~H\$0Ht$8H _HHt1HHt%HAR,HApt0uËÃ@USVWATAVAWHl$ٸ薯H+HeH3HEHDELHEtLHXL``HxTLH L`HxIϦHyLc3Ҹ0ILL$XDL$PLFAEHIHƒ}AЉHEH %IVH\$XHMIL%HMHұMcH HDNB+AD$HHDDFDB\$@LBDHELLd$8HD$0HFLL$(LD$XLMIIHD$ LiHM褥HMD$PFIAFAF(NLD$XHMI聥5IcHHMLcHMAHIHT$PHMA-HMAIDFHVHMHME3IHMI]LD$XHMI趤~nHaHML蟤~WLD$XHMI芤~BLEHMI|~.EHMHD$XOHGHu HH HyD$X HM)L$PHMH3ʬHA_A^A\_^[]̃swoH HcXH3ø øøø(ø)ø*ø+ø,ø-ø.ø/øsøVà $*06<BNTHT   ̸8H+LD$ E3E3H8@SUVWAUAVݪH+HaH3H$L3DIIT$8@(HDD$0IHD$@HuLH +qHHHuHHL$@L$A[H9tA.AHݭAHHHWHLHHL|$HQHuRD$ L JDB:3L$L$@H$H3HA^A]_^][HHt 腣HHtpHkHHuD$ L *4HH9@u(HA@HHH@HH9@tPH3HHHHH9tAJAH¬AH賟HHu D$ L JDBHiLHHL|$HڶHuD$ 'L HHt LHHt4H2HHu D$ 4L YJDB ?H3HHTHH`EtIşHHLULcHl$@Hס|$0tEHHQ(t 3y;|t 3y@ǃH臡ЉD$4At7A!t1B O,.u Hh_^][Ë$uu 3Hh_^][HHXH0HH蔌HHHq$x$H99L$E3ɋHD$ D$@U~[L ޙWQODG-D$ ͋Hh_^][Ë$3DŽ$H9Rt-+HǀHcD$@t HcH+HcH$G{Hu'u %=u~GGHHH|$HHHt3HCHBpt"蒍%uuH܊3틄$H$HcHωFHVHNHtEHuIPhL HDB%D$ aHh_^][3DLFHFHF$t2VHCALHHAQ,$FH~H~tnHCHLAFHL$HFALMt,H3LIHD$0JAH\$(HD$ A҃F$$Fu^D$@HL$PL$H$HDLHHHHh_^][H\$W@pH+HH3ɉLQDIL$ IHjHǁH\$PH@_HuHKE3E3AQ LMt7LHHD$0AIAHH\$(HD$ ALPMuHpLMt(H@HDAD AыH\$PH@_H\$W0@H+AH !EHHHuoH0Ht4yt.HHHCHHRu:H\$@H0_ùL $DAqD$ 13H\$@H0_HCHLAP tCHHCHt HQPDAXHQ@DAHHCLHLIAR(ȅu-L +HD@D$D$ 蠆3H\$@H0_HH\$@H0_@S0H+HHADHXCLKHSD$ y3H0[ÉCHCHCH0[@S0脎H+HHA@H CLKHS D$ 踈y3H0[ÉCHC HCH0[H\$ VWATAUAVH+HODH3H$HH0E3 HEH Ht$@t7A@D9u+L ݑEFDJD$ N'ML$ H${LAu {pHE3HDAQ7}LHshCLMt*HL3HD$03AH\$(HD$ AFnVff F ЉWu ;lfA#f;HHHH;wHt$@CpW;vADHdHShCLGHI@EHWH;HWHCHL3ADHHH觃HH蒃H脃@vLfH Յ7w;H%u E;Hԅ%uHL$PDDHLt$P')o )oDwLwHCH$E3LHAQxMtH$LI臅tAGHDIH;E3ELMtQGIDH; HA@IH FLNHV D$ FHF HFGI@H;DwDspAA Ht$@L D$ mJDB|ȁ͋3uHuHu ?J F 2D$ L DGnD$ $L ŽDGMD$ L A D$ AL A*D$ +L wAdD$ L +APD$ L DGl1D$ L AD$ L qA腀DǺHw L )D$ JDB|SH$L$ H$H3H$(HA^A]A\_^@SUATAUAVAWh{H+H>H3HD$PH3EMDHDH9u # t=Et AEw9$t.At(L ΍D$ JDB ALA9IDE~B@fH9v&AAIAGHIAEH9v7@A HDAHMI;rA 9k,uGH00t8HS0u(L ՌD$ JDBQw~H$H|$` HC(H 9ot {LuHc?t9ot HLA9t ?CDD;UuMDXIuTMAIEE+D9GDBGEt!WA HGBAGOAuE9 S8[HC@86H0H&H9LA8A8 A8LMt,HDBHD$0I3H\$(HD$ AH/GH79+HHHS0YH9HC(_qHH H~AtwH~ujH9u[;~SrJuAH0Ht5H9t,HpuHˉoDBc0HLMt5LHHD$0IA3H\$(HD$ AHPHtLHpHHLEMtDƺ@HAD Aԃ,HHHd:~'D$ L 4AS%CD?9o~HG8qH9J&oLMt+HLOHD$0A3H\$(HD$ AHHǀw)9k, CH%u$u9k8ǃEC<CHHS0H9HC(tnHH,| H|VD$ L hAD$ mL ~@2D$ ZL UDG7xKDD$ L TAPJutHC(DL @D$ sxLVHL$@Db{LD$@HU{H0HX sDe/D$ L AD$ L AD$ L A|/D$ L DG8dD$ )L цJDBQw~oH9t=9t5KH s vtwǂjD$ mL tAD$ UL JADD$ JL AC(o H莖oHC(kHyHk HyH 0tIAuCH9u:D$ L ̈́EEM JMvDǺH?qE~[D;wWIDGwHWE 9$u7D)wDw9ou*CLotH9uHjA oC(3H$H|$`HL$PH3~HhA_A^A]A\][@VWATAW8~H+EEH H8A_A\_^Hl$hLt$0LII>uu*H\$`Ic^A+.EuVtD$ RsA^t!HGHApuB+uHLl$pH\$`Hl$hLt$0H8A_A\_^H\$Ht$W k{H+HAHALAQ`;u FuxxtuH0Ht HX\HǀH@H@HuHCHH\$0Ht$8H _H`xH\$0Ht$8H _@SUVWATAVAWzH+H0H3H$LA(AAILD$8DT$0HvL_H p>tHE3HHcD|0t@D9c,u:HS0u*L -AL$DBGD$ ]q;}*L DBqD$ /qVE9t5HL>ADHHL$A<DB;%L9L9 HCHApHH sAuAt'IHt;oMdH'HE3AQE7sB 4;}4H}AmoIHu(L }HD@AD$ oHcIDB D+D;@ffHtHCHPxȅ-B B4D;r D$` D$`HLL$HHHTLd$HHL$pHD$yDBD$zHD$pDD$xfD${HD$PLd$XqD$@)A;IHD$8HL$HHcLL$HHHDBHD$hHD$PLd$XqHD$`A[HH[;L$`s!HxHHDULUtD$@LD$hE3EAHHAT$LHDǀHHˉA;B D+D;(I,mD|$0Ht$8M+fDLc;AHDGLDd$ ~{;Au Ht$8+HSIlM>;y*HKHtouIqlMHL$H$H3uHĠA_A^A\_^][I%lE3;tHCHBpuHc HD;u"tHCHApuH+ >XH\$W0tH+HHD9L9t 9@3HOHt%G(HcDHFn%L yDBD$ [k;t<~+‰HGHApt ǃH\$@H0_ǃHG(H\$@H0_úL yDBD$ OjH\$@H0_H\$Hl$Ht$W FsH+AHL{PHAf3mt H HHt#;)uLAMtIIIHAuH LzApJgmHuHzAriHH\$0Hl$8Ht$@H _H\$Hl$Ht$W vrH+IHILazPHA{lt H HHt1HH;tHu$9BsHrHBH*HBHz3 L zAJlHtHhH\$0Hl$8Ht$@H _H\$Ht$W@qH+HAPLcAdDI`L@HyH\$PHt$XH@_ÃuHCPHcSdDHPHS`;uTLMt3KdLKPDMIHcHHL$0H\$(HT$ AҸH\$PHt$XH@_{dHt$X+׉S`H\$P3H@_@S0pH+HAHHL$@HL$(HAD$ @P`|$@tHHt$HH|$Pu D$ L wAeǀHHc;t2D$ L YwDG=/HKXHLzjtG3D$ L 8wDGbJugDǺHgHt$HH|$P3H0[Á{ uJ@~LwH wiHLHHpH@XH@~LvH veiHLHHYoH@Ht$HH|$PH0[H\$Hl$Ht$H|$ AV@oH+H3AEH9tlEx-HD9t~ D$ bL FvAiHD$xHAPDAHHHHHHKXC`HAPHx9QHfD{`}>ffHcC`LSALHD+ȉt$ ARhȅ~cC`{`|9s8uj@87ue@8wu_@8wuY@8wuSLs`MtHLHD$0A3H\$(HD$ AbHD$xC(0x#;t D$ L .uADHGo G ;l$pvD/D$ L tDGiJdDǺHHD$x00tBHKPEHccu/L tHD@D$ ]dHD$x0HHCPDsHHHs`HHKXHHkX+{`~4@LcC`HCDϺHLʼnt$ PhȅC`+HCPHH9uHHSPDC`HHRALMt3HcK`LKPHMIHHD$0H\$(HL$ 3AAHD$xC`H\$PHl$XHt$`H|$hH@A^@S kH+HAHLA@tLD$0D$0螉uH [HSDD$0H+HtDDD$0HAHtHCP HHDD$0AD$0ADD$0HCAHDD$0LAQxHCHD$0AtH [@S jH+LHMMt(MHpP%HHǁH [@S jH+LHMMt'MHp3HHǀH [̸(&jH+9QHuHAPHPHA`DAHH(9H\$Hl$H|$ AV iH+MEH9QH(HALDD$PLHAPIAjtIHhAR(Hc3HLH͉HHt$0Hi{uJ@~LqH q0cHLHHiH@XH@~L_qH pqbHLHHYOiH@HCDǺLHAQxHt$0DsHHCHHH\$8Hl$@H|$HH A^@S ThH+H)uH [H3ɅH [H\$W0hH+HAHHHzpHHHCA tǀH@uHHpDǺ7Hu-L oHD@AD$ ^3H\$@H0_HHHHHHHShH\$@H0_H\$W0gH+HAHHBpEHHPHHrH rHSHHpD38HHu-L nHD@A#D$ ]3H\$@H0_HHHHH\$@H0_@S $fH+LHItVAHHAtHLZPDBXHLY@DAHHCIILHAR(HH [H\$Hl$Ht$W eH+HHHu H^HHHu3vtuXl=u^=,tR=RtK=+t==St6Ht=t=u1HH]s s HuH\Hl$8Ht$@H\$0H _ɃAwNHHc''H0ø*ø3ø-ø,øPø(ø+ø.Ð'''''''''H\$UVWATAUAVAWcH+H H3H$BE3EAHT$(A+HHL$0D$$A\$ E;sLlH -l{]@vL'lH @l^]HD$@Lt$@H؃?LD;v A+3ҋLǃIL+3cA;t$$HL$(DT$ DDDD+|$ LIAAD.AC8A2E2A2MI 2A2D ʋD2AAE"AD"G4AA3A+3 A3D#A;rHt$0Lt?ffˋH HvB0B1+ψF33 3#IuH$H3{bH$HA_A^A]A\_^]@USVWATAVAWH$@aH+HH3HH H0A(HD$PH8LL$XMLEHUHELHM@D|$HD$$HrLXjH j_[IXHX=tk;t9=HM[A H H[EV.HM[AH < H[EVHM[AA0H H[2EVD|$HHMN[~\HM A0AHD$@H7[A~PDT$$tUt*LhH ei 3ZMtE3M&3FHMZ~AH HZEV.HMZ~ADH HZDT$$HL$@DHL$A Dt$ HD$0Dl$,EtD@A EDl$,D(E۸ADE3ҋA+E+E3EAADL$-Hl$Xf{H""ρ t C8HtHDBC L9sPu&HHH@HGtgHkPH褸HpCH"@lDs`HVkH;K AHˉ{H։kH0HDsDx4I/H}G"sL ZAJD$ +HK,Lt$`Hl$XHt DǺ H֋H0_^[̸(vPH+u H(bu H(u H(u H(3H(HuH\$Hl$ VWAUAVAW`OH+H*H3HD$XE3yH"HAAuwhAU H H{hD$HGfD$PG D$RcYGuiucu;~LYH Z6I;}WH@TtGD$ L YA{<uG<<rlu`CH"{H"HKhA)D$DA \D$ L YAW<ruCH"4rCH"rCH"< Gur  u sD$ \L WA* vG |x|u|u>r"rH =WAHmH 'WAHdmtlH WAHJmtRH WAH0mt8H WAHm D$ L VA/D$ L VA }D$ L 6WAUHxDCpHShHD+HzLMt,KpHLKh+HD$0H\$(HL$ LE33ɋALshI AFE~AVEND AFAO AFD HCPHxA;KptD$ L VA-D$DGG L$LgHD;DG3AHHGA+HGEIHHGKDo LW!H#EEt9AOMFJfE8huA@AGHDIHuEJHAAGD/HCP+xA|$A$AD$HL$ǀHǀH+uD$ "L oUAF HuD$ ZL UUAHHCiWHCH!uQCLkpL9uHHHT$HLcHHKhJH DkpDHDHCHP HS0FwHDk`T#%D$ L TAvJ@HL$XH3pIL\$`I[@IkHIA_A^A]_^@SU8HH+Ht$XLt$hHL|$0E33EiAWWHL$PD$PA*@3\HPHuHpAHHHEC,HoJ0tH`JsH#H|$`sH!V 1tStK?3HD{DBCH L90D{8HtHDBCL9{Pu-K>LH@H>>LsPMHHծHpCH@`D{`D9xtHKE3E3AQ F>H{H;AHˉsHՉ{HHmxAIK,L|$0Ht$XMtIH=Lt$hHt DǺHՋH|$`H8][̸(fFH+u H($u H(!u H(u H(3H(HylH\$ UVWATAUAVAW@EH+DE3HAD$Ճt8.AHHx<~Hp<x$tHZ<;|ADnAsA%=AEAsA%=EAsArt(L9HAE샿AEL9AEHHGPLxL$O3HHH t-3e KKCHK H|=~HuAEH@Tt*tL PA{JD$ ;A;uA3u AEn%u AEEAHυ&AGEwMg Eo),E3MHHLHcȅu*D$ L OAtJ ;AOL AGfAGDDE3Ew A+AHcAG HHHHHHAHH;HMcIHHhCE+EFEIWAEG AA@G`Ew Eo HI L$I#AGAOEg*L MGHHsKHcȅuD$ L ENAOIAuHpHHt8DAD$HE3CE~'HpAH8AHKE;|H{)D$ L MAL$HSL$M@HZLHu-D$PHD$ (L MADAG+$AWAGƒAG@vD$ 7L WMADpAIOD1DA%=uA~ADiHE+QIWDG`AHGd,GHGdH؃LMt[PHLcHWPHD$0LJH|$(LD$ QE3IAtL KD$ JDBK7iLOPHAMIHD$0H|$(HD$ AҍCAHcHGPLHHHD$0H|$(HL$ AHIH$H@A_A^A]A\_^]@SP?H+PHHl$hHt$pH|$xH{hLt$HL|$@/DwD@̈́y,u&u AuD$ {L sKAoG<cutOE;uu ]<uu z@<uu =#<(H0HC;~LJH J)8?OLPMuHpLMtGD@AHD ALMtXHLHD$0A3H\$(HD$ AHLOHD$0A3H\$(HD$ C(DGD$ AL JHJHCH CLCpHuHH3HHSh*fDrDzHǀHHCHP(K`HHS0HL$ +H|$@D SHHxHD$ LAL+fDB +uHuuZ`HD$ LCL+DB +uHuuZt0HD$ LCL+DB +uHuu{HO-ЅuHO-ЅtXL3MtHF 9Xu9tAHHI;rBTHH\HH|$@H\$HHL$8H32HP^33H\$UVWATAUAVAWH@2H+E39IMLHLHUH}HALAAptF;3HL(~,I(@u@@uIt(;|ALEHuHuI3ILEHL; HH38ts H8uHI+HC H;AHEHD@HMHHCHHHMHHEHKHHMHHCHHHMHHEHKHHEHHHEHHMHHHHMHHEHXHMHHHHMH1LEHLLEHLE@E33H{u\D$ .L M>HHH^HTHHL;2HHCI+H;AHEHL@ HMHHCHHHMHHEHKHHEHHHEHHMHHHMH.HH]HLMLE@3HHE@@H]HvD$ jL =uHUHHH;xHHCH+H;eHEHHU@@ HMHHCHHLHMHHEHKHHMHHHHHMHHEHXHMHHHMH-H]HE3E3HAQ =<uL0MtI0t M8|H0tyH0HtmHxtfD0H<AA#H0H0H0H0HfH0EHR-H0L8MuE3H0HtHxtHUHH;HIFH+H;HEH@#HMHIHHHMHHEHDpH]HHH]HMt*H0MHH0,H]HIH]HH]HHGHApt ~HU@H+LH;VHHHH+H;CHU@HMHA HMHHHHMHMHHEHANHHMHIHHHMHHEHDpHMHHHMH+H]HIH]HHE33!~EffH!3H@&HHHL!;|HHt3%ULcE3K7HHH(Ht HL(HHt LL$LxI;IH+HEMHfIf H+H;HE]DeffAHf EIfD H+At3AAAH;BLMt:HADHD$(L$ LH3AҺAAAt3fQfAEuH fDA;L|fA^AFAfIf DD;$H09HNf;LAOH%A, HH0HH5H0IHDH0H H0H38tfD=s H9uA;LJPHHt<3H8t=s H:uA;uDI4u3A+L$2E3$AHIH+H{H$I;H.</@L %DBAE(D$ * 3f fE]Aȋ;u~HutKH}$A\ HHbHUHDHHAƀ9tfD=s H9u;AE23Bf ]A;uك|ԃH0HHtH0LH0H#AL|HH0HHH0HULHH0H f E]Aă; H0H(H #A L HH0H(HH0LcHUL H0H( Rf#u0H8H9H?AEP3%H+AE23AE/3L$H@A_A^A]_^][HT$SUVWATAUAVAWHu H+HH2E3DHHDHMIcHED$ED$HtHELL$HH+LIHFHfHf H+IH;tI23HF>nffHf FAf IĹt3H+IHT$8H;LMt3HDHD$(L$ LH˺Aչt3Afu*Hgf^AD$f O>;XH0HǀH0HHtHA HH0HHH0HVLHH0H D$D$Ht$8IH+IH}H$K,H;AHHH0HRHH0HH0HHAp3f#u[H8HtL@DHHЅE3E3HAQ fǃfu%fǃf;HLpMMdD3Etf1@A;rA;+IHT$0HHD$(DD$ L$LA҅H`t$HA TH`HD$HT$0H$hHǀfHyfdF ȍB;J~B;;HHHtH@A9 HHHHHHHVLHfA;u-DMHHrAD$fu'tHCHApt%fuDMHHpL|$(HT$ D3LHl\HAP3lA23aAn3VA/3KHuEu=u3r-AL DBA(D$ 3HHA_A^A]A\_^][H\$H|$LE3LMP HAAHAAJBpt A~uA|EPAHIBT%=tc=tN=t>A9[8tHHHt HPFH8Ht H@1H%(H7H0H Ht=LIHPII tt uy AHIuEuA@A@ "u AHAH u AH@AH @I`uAHAH AA@uAHAH H\$H|$H\$Hl$H|$ AV@EH+3IELHH CD9tHHrLu G;t)ML DB%D$ ?X3Ht$PAMA HT$0HL$4%\9]8u-LD$0HT$4HouD$ IL Az]HpTtw8\$4D$5<u?t_D$ SL {<?tAD$ YL mA|M3HpTHT$8HHt$DHT$8D:u J8Ot HHH;rH;u3?ut&ML DB%D$ m3\HIHu$ML HDB#D$ r3%H0HtHHtH@HHHt$PH\$XHl$`H|$hH@A^@SVAVAW(H+E3IMHMHl$PH|$XH|$pLd$`HLl$ L-uLa H+@ȃHAxI!xY poHteSttuSHtN 3: 0u:Tt HH;r3MT$IMt&AL$CMD$IT$LIA$%IHHMHI;=Ll$ Ld$`H|$XHl$PAH(A_A^^[ŠɊЊ(H+ȃwKHRtHHH(H(H(aH(@H(UH(R3H(ŋ΋׋LA@T%==ti=tRy8tIHHtHHHPI8HtHHH@H~HHHHHHnHH\$W PH+HHMu 3H\$0H _I3L rfA9ѨtHHr3H\$0H _EѬAtA9HtHHr3H\$0H _ALtCDH\$0H _H\$Hl$Ht$W H+IAHHADBAD A;3t#T9 ;rz;wvrHHHtHAHHHHHuP$HWDEH3 A2H\$0Hl$8Ht$@H _H\$W0pH+HpHD$PD$@LHHMHLMHLD$@HT$PHD$(HˉD$ A҅HHL$@H A'HHHHHuP3H\$HH0_DD$@HT$PHL$@HǀH\$HH0_@UVW0BH+HHAHHuH0_^]Á8tHH0_^]L@ HT$hHL$ H\$PHϋu3H\$PH0_^]3HT$ LD$h9^8HLt$XHDDt_tHGTto8\$ uED$!<u <u1H`HtHXH;t HHH;rH;u3#uu#:HALt$XH\$PH0_^]H\$ LD$HT$HL$UVWATAUAVAW0H+LHc$E3AuTIMLAEt|u.MEH%I$I$III+HXHHHHH?H Hk8MEXLIAmTI@MxLD$(l$$HL$xH$HLHucBHHHIkHc؃mHk8IEXAPHAETHL$xHD$(DEl$$t.EtA HDM3 u EHD$p%= M9(tA}wuH1mHcËHAqM8Mt=M@IMtIHA<u8t HHI;rI;u Eu~HT$xDI`u EIσ A~BIDIH$tI`;|EEt0Ht$xH\$pAHHEA t@ ELD9s8u IAfIHHHtp8t HJL@ H$HL$ H΋H\$pt5D9s8HT$ L$IDH~tIZ;x EHt$xD9s8WD9t$$LH$tWttt:=t+=u9HEιDB sDI!A@AEu  _AIHt A HHILc~A;t HI;|  r EHHHNu  rVHHkt  r=I~1AIHH:uIAD;| Eu sEt A#A;uLD$(HD$p%=u|A@0u Ixt Eu @tAx0 A`03H$H0A_A^A]A\_^]ޒޒޒ8fH+LLIu>D8u9LAPTt;AyHHAu=+uAyt3H8=,uAyt`tJt;IIHuIA9J8tA9HPuH %8/H $!H $ H $t)L RDA0D$ 3H8HA:EQD:u AA8AtIHL;߸H8@S0H+HLMtAL0MMt.M3MtAA: tHI;rI;u3H0[Hu BH0[Hl$@Ht$HH|$PLt$XE3H5#L5#H-#H=#@EtI0H(H oIAT%=tQ=t@=t2IIHu8A9C8t9APu Hƺ8#HźIƺHuZHAuHtEE3Ht$D fDD8u K8Ht IHL;rL;t=A{8t AA$L RDA0D$ 3H|$PHt$HHl$@Lt$XH0[H\$Ht$W ;H+HH@THX@+u@,k@HT$0E3@|$1D$0IHxPujHxHucH,HCHHHHH3H=u@:H\$8Ht$@H _ÃxPt 33ۅËH\$8Ht$@H _HuH9XHËH\$8Ht$@H _HHHtiHHt\H 3H=DtD$0 D$0HT$0E3HΈD$1H\$8Ht$@H _H\$8Ht$@3H _H\$W pH+AHAuH\$0H _H3Dt;H\$0H _H`Ht#HXHD;tHHH;r3H\$0H _@S H+HY HCH [̸ ̃|wHcH <D3́#tt AøøÁ;HcHcHøøøøøøøø ø ø ø ø øøøøøøøøøøøø3OU[agmsy %+17=CI @S DH+HH0Ht-HH [ 4@S0H+ILхt$H0H(IH0H HHTtjtTtEIIIHuSA9B8tIxPuH8/H!H HIt1L RDA0D$ H3H0[HI H0[H\$W@H+H٨t-;L $ODB3D$ &H\$`H@_0U{,KH2A%Lt$X_LHuLt$XH\$`H@_f@AFINHt$PAF AD$ L ;DA0qIHt$PLt$XH\$`H@_IND$ L A%MHAQoxAHHt+HAHL$0AHMH\$(HD$ %ǃIMHt$PLt$XH\$`H@_ú;L DBD$ H\$`H@_ú;L SDB2D$ cH\$`H@_@S H+L3ILL]HuMu HHt+A 3A9ìt HHrAèMtAMuHtXAI3fA9LtHHrE3EHMtEHtEtt HH [@S H+Hi3uH [HCHPH [@VWHH+HLHH0Mt,$HLHD$0HL$(HT$ A3AH$s 3HH_^GH\$`_ ؍C;v3H\$`HH_^Hl$hLt$pL|$@HoD{H3AALHt>Hx_HGLHHGH ;IEMƺHl؅x6HHt*HAAHL$0Ht$(HT$ AHMIHy86u/u*ME ;uBdž3Lt$pHl$hL|$@H\$`HH_^@SAW(H+HL uH(A_[Hl$@3Ht$HHXH9`H|$PH Lt$ fDFtt uJx Lk8I|hu-ADŽIDhHuǃHChHHH;`rLt$ H|$PIHt$HHl$@@TuKHu YHHuCH7HChHu $HH(A_[H\$Hl$Ht$WAVAW0rH+L|$p3IcLH*IIP E3E3H>HH;rHFHApt HHH+H;~HC Hff HH+H;~HH HH+H;|HHH+H~bHHH+H|R@fC SffHf Cf HH+DI;|f#t*IHH+H}3H\$PHl$XHt$`H0A_A^_fudžHHuGDMHHL|$(l$ EttdždžvH\$Ht$W H+HAHIcHHApt]Hu3H\$0Ht$8H _H(HtRHCA8H(HtLHHH0H\$0Ht$8H _@S0H+E3E33HD$ E3E33HD$ E3E33HD$ E3E33HD$ E3E33HD$ iE3E33HD$ QH0[H\$Ht$H|$ATAVAW 1H+LLMC HzAI3HH<LHL UfA @t/tqHcAܬAtIA9A,AA AA:Ay     @vj^R F@:." uU HAHIA@H; IHtH ?IIH\$@Ht$HH|$PH A_A^A\H3fǫӫ߫ǪԪ"1@O^m|f H\$ W`H+HH3H$HIHHL$0:L aHL$ DBHHD$0mtHuCLL$0LD$8HHH$H3DH$H_H\$Ht$ W H+IHHMu3H\$@Ht$HH _IHl$0HHt HHu3wHLt$8E3H=At ECHt)HHt!HEu ELt$8Hl$0H\$@Ht$HH _@SVAW0H+HL3HXHt!IHXIH`IHphIIHIIHIIHI0IHHIhIHIIHIIHIIH9(IULt$`LXH9`Hl$PI H|$XDAFtt uJx Hk8H|hu-ADŽHDhHuǃHChHIH;`rH|$XHl$PILt$`@TuKHu MHHu7H+HChHu HIHXOL JDB)D$ S A/IAP^3H0A_^[ùL ODA-D$ L APIAP^3H0A_^[H H0A_^[H\$Hl$Ht$ WAVAW0H+HLE3sTHXHtLXL`E9w8uHHHt u HP.H8Ht u H@HT$PIEH|$PHA@uuH(L0HH(LH0LMH3Hl$ Hcȅt6HALHt,LMHHHl$ HcLXH`H\$XHl$`Ht$hH0A_A^_H\$Ht$H|$ AV uH+EIHHAt3HRAnHl$0:HHE3LHwLK 3A9¨tHHrA¬K3DA9HtHHrALHt?t:AIA@IL;rEt-HHHtHHHP+H3$H8HtkH8H@Hl$0H\$8Ht$@H|$HH A^H\$W0 H+HVH3H$ HHHL$0:AHL$ L DBHHD$0-tHuCLD$0HT$8DH$H$ H3H$PH0_@SVHH+y8Hu HH^[H|$83uVH@TtDHHA=+uH|$8HH^[=,DH|$8HH^[ËLL$ LD$pt$LL$`LD$xH҃u3H|$8HH^[LT$ Hl$@Lt$0Mu @tHl$`L5A.Hl$`Hu@uLt$pL  Lt$pLL$xHHtDILMt&ED:uAA8Au;t8IHM;rHIH;rÃDHl$@Lt$0H|$8HH^[A AA ȃ|ՃwH=fHc|@USVWATAUAVAWH$hH+HNJH3HPHXLHHL$P3LL$@ELD&HMp-HHt7HL$PMFt$(HL$ LMpIHЅruDfyIH;IFH;HHL$PALHt$ I^LHMpE3HH\$ HL$PD$4HMp L$4D;;HL$P0HMp7HPH3HhA_A^A]A\_^[]D+HL$PIIcLjHHL$PE3NHL$PLcD$4J3H&HMpnWHcIFHHMpHD$8?+HA DA~HHLL$8LD$0HMpHD|$ YHcT$0LD$4HMpHAHMpH*D$4D$0DD$0HT$83H\$8BzHHHt2HctHT$@HOHL\E_DI}@ƍFx?iHMpHUHMp~HL$Pd:LL$ DD$HT$SWAVAWaH+DE3L$H$3AAH$ AtL$H$vHu҅k$0Hc$HH$H$(H$H$8L$LAD3L$$0HLc$L$H$3GH$@$ ANH$H$ D$0L$\$pH|$hD$`H$AHHD$X$EʼnD$PH$HD$H$D$@H$HD$8$D$0H$HD$($D$ i3IDȅ~p rkЍCHcH9L1H;wL;sQ%}ȃDD+HcI o0o 8f 0B Hco 9o1f 1A;|L;}!LHI1L+I+A H@0HHuAL$H$AdF|L$H$H$L$HĨA_A^_[úL DB*D$ E3A먹L DA0D$ AHĨA_A^_[@USVWATAUAVAWHl$X4H+HjH3HE@HLLLHEHHD$8MAHHD$0nD$HyLH HL$PVHMMHMDHMBDL3ҹWHEHzHME3L3HD$ \HUHL$PFMtLcHL$PI%MtLcHL$PIMtLcHL$PIMtLcHL$PIH}HtLcHL$PHZLD$@HUHL$PHUHL$Plt$H@fLD$@HUHL$P:;~HT$PHMk MtLcHL$PIMtLcHL$PIMtLcHL$PIzMtLcHL$PIYHtLcHL$PH8tHL$P;~KHT$8LEtdHELD$@HUHD$8HM+tCHUHL$Px+LD$@HUtHL$8HULcD$0HMHL$PHMHM~HM@D$0HM@H3HXA_A^A]A\_^[]̃sH`>HclH3ø øøøøø(ø*ø+ø,ø-ø.ø/ø0ø1ø2ø3ø<øFøGøPøZødønøoøpøqørøsøVÃ÷h &,b28>DJPV\h @UVAV`H+HMHHt#u H`A^^]H$H$33HHH HtH;tIHH0|̺L ?DB&D$ 觿3H$H$H`A^^]HHcHHHtHL$0茿HL$0H%~L$HL$0I脿 DŽ$HL$0S$xH\$UVWATAUAVAWvH+H}H3H$H$LHE3HHEQ(L$$HH$$@IA,t L9tA/H2Az贽HHH膾LH3L$HHHHt tLHt{HKYHHuD$ L AtHL9@u(HA@EHHH@HL9@HEHApu H3HHHHHHA,t L9tHEHApuAHHHELHL$Apt蛾HHcHH3HH@HHt LHt/HKHHuD$ L eA HEHApu H3HHTHHH`H\H$H$EtIbHILcHH$D(D$r$DtIHHQ(t 3yD;|tAE3yAAIz%uD` IDt>!t9C nJ+C4LcLuLcLL$LADŽ$9BmHDŽ$B pLcHLcLB aLH$H;~D$ L ADqH$Lc$HH$蕽rRH$$LD3iHHL$E33HHD$ 1yH赺$H$H赼HHzH$|$xH$PHD$pH$LHD$hDt$`Ll$XE3Dt$PLt$HDt$@Lt$8D$0 EFHt$(D$ ZL$EHHC$HH\$xH$HD$pH$EFHD$hDt$`HHD$XDt$PLt$HDt$@Lt$8D$0 HLH|$(D$ $L$D9$u6IcL.H<D$ L ADa$E3H0H$HDp胻H$%E3MHӉt$(Hσu?Lt$ tMEĺHCu@D$ :L ADL|$ ӺuD$ ?L D@DHs>H$DEt.L$H̺uD$ GL cD@DdH$@H$P@H$ H$ ۶&D$ tL AA(3H$H3H$HĠA_A^A]A\_^]H\$Hl$ VWATAUAW@TH+HuH3HD$8E3HEH蹶Ht0H訶H蚶yLH HHHXHuMHLHGHApI4%I辸HKH9Kt&ML.H7HH`A'~@s H̵Ht0H軵H譵yLH HHH HuM HLLt$xL90fH]MTHLcs˷HD$ +HtHTHHGHAptVHt  L$(t  L$)BD$*BfD$.HD$(HD$(%HHJHHD$(fDu HH HyLL$(D$0DBHΈD$1D$2CD$3CD$4GDtjDC^L$ tUtUADəD+AQtHtIEMcI;}DHCHTI;|DKuEt 3At$ t3LCHSEHNHD葶AsEEtIf%uuHCHCCH?HtH.H DD$ ;tuEDHHpdEt)u%D)cDCHSHK HCHCLt$xHL$8H3茻L\$@I[@IkHIA_A]A\_^LL$ HT$HL$UVH+H$H$L$MH3AAL$L$許LHH$H$L@9$tILHAAcHHH$LHкH$HO H>L>H1L19$t0H$HH"HD1\1HuHt HLOHAH4HAHHH;uF;uF :HH;uF;uF :H$HH0H{& Dl$xLt$pH$HD$hCE3ɉD$`H|$Xl$PHl$Hl$@Hl$8l$0EHHl$(l$ TIH΋ͯII¯;D$ L ;AoD$ L 4AA:L$L$H$H$MtIRL$HtH=HĨ^]@UVWAUAVH$`H+HLnH3HH3LMDEHULDH}H9t H$HML$L$NLEHU3D /fIEtkHM IHHcHHtBx>H+;1HM莱tLEHMHt9]tAHAALEHUAHq.i3I0HLxMILEHU3ɋD:.A ?M AtLEHU.uޅMLEDʋHUM3HcHEHH-fDE AHMHDELMDt$pHUA+HUDHT$h3҉T$`HT$XT$PHT$HT$@HT$8D$0HEIHD$(ED$ tyHELELL+I֐A H@0HHuLEHU-FAD$ L AFD$ L AD׬AHMHEHM+Hc>HMI2L$L$H$EDEAHH3VHĠA^A]_^]H\$Hl$Ht$H|$ ATAVAW輴H+HH0AILH{LLt$xHl$pLt$hȋCHD$`H|$X3D$PHD$HD$@HD$8D$0 D@ ML|$(D$ L$I[ Ik(Is0I{8IA_A^A\H\$Hl$ VWAVH+H.jH3H$HH0AHHMHD$x03ҋH$HD$pH\$hl$`Lt$XT$PHT$HD$@ H|$8T$0HT$(DB HLD$ H$0K0H$H3萳L$I[(Ik8IA^_^H\$UVWATAUAVAWHl$ٸH+H'iH3HEHEHUHEtLLXHXTLL HXI&HLcyLH iIHUDžuHMI9HULuHGHAptNHEt  MEt  CMECfEHEHHEAEoHHLAEEEAGEAGEEHǫ%IYHEOHULML@@Dd$HD$@IGLD$8Ll$0LL$(LMLEIHD$ "Ouu HM蹨HMH3bH$HİA_A^A]A\_^]HUA I菨~EGIWI{~HULEI'~u HMDHGHApuHKH@u HH HyEZ@VWXSH+H3Ht$xt$p9t FHX_^H0HD$0LL$xHD$(HD$pL$H$HD$ u)L EHDBD$ O3HX_^HH$H\$PHHH$HHD$xHD$pH$Hl$HLt$@莩H$yl$pH HA#LHu'D$ L DA-}HH|AHLťHHuD$ L TDLIHtuudHG8XHǀH0HHt4y u HH0Hyu HHcH#HLt$@Hl$HH\$PHX_^̸HH+H HHH̸H趭H+H HHH\̃#wH!!Hrt3t t3øHl$ LD$VWATAUAW@DH+HMIDLt HƨHƘI83H\$pLt$xH9nGE3H3HD$8HL$0EtADI9LMTMt?IDALL$0HD$(H$LD$8IHD$ A҅HL$0IH+HIH+HH;ADHGAGHD$0HGD$0GLD$0MtHT$8H詬H|$0ADШuLH IDfALHtAMLLD$8IHI0H;nH$H8Lt$xH\$pH$H@A_A]A\_^3HE3AH9Qv"H@ffDHH@0H;QrH\$Hl$Ht$W &H+IIHMuMu#wH!!Hrjt3tbtZwRLGL3IMt;t:HH0I;rA@LA@I*HHHuHG3H\$0Hl$8Ht$@H _HGH @3HHHHD$XHiHA HD$PHqHAHD$`fHA(HGH\$W0 H+HIEЋLمtHHL@H3MtD;tHH0I;rH\$@H0_ÅuAuHD$hn3H\$@H0_AtHD$h23H\$@H0_HY ffAHtHA(LL$`LHD$(HD$hAIHD$ H\$@H0_H\$W 0H+HBHHHt+H H@H HHu H\$0H _HCHGH\$0H _̸(֨H+H Ht H(ŸH(́uHÁuHÁuH3HHH@SUVWAT0/H+H3E3HL$`WAT$D$`A脟3(HPHuHpAHHHEHHHcxC,軩0tH謩sHHxH9u0L tDBD$ H0A\_^][Ll$hLt$pL|$x9tH)&DLADsHHAA!\!t-HKE3E3AQ {(ޝHDk(KH0! HcHHDcDH$Hde| HHǀ!CH!Dc` `CHTHDcDA1 H$A;u!E3E3HAQ 耄 s CH!CH0!Dc`MHHAHAT{H0!HDxHf(HfD$HfD&Hc {HCH!ǀ!;dH WHˉZ#Hbj*D9t D9!!EDc`CHCH@!Dc`HHAuCAu:H"HhD9P!"EDc`CHACHP!Dc`HHPDsHpL9upukxgAtOHHH`HtRHHB(t+HHB(E;ACH`!Dc`H!HkCH`!Dc`@AtmH0L9tuXLIBtt> u:Bu1HE!H/_WCHp!Dc`THADCHp!7H@!HgHǀ!CH!Dc`HD9tH9Dc`CH!H3KCH!Dc`uCH!Dc`HKH@pCH!Dc`t@H0L9hHL9{ H*<LHIHP8HCLLI @HAQ8H2CH!Dc`HD9uHD8!HDB0H@ D9tCHDc`vD9!!EDc`CHVHo`7CH!Dc`4H[CHP!Dc`HH0HHHCHHR=!HDB_HCCH!Dc`L"HAP H;HC!HLDBAAXMIPD$ /6GHCH!D9tǀ!Dc`*ǀDc`DADk8Ht EźH֋%={C L9cPu/)HH@HH{PH6HDc`D8HD{H0t.AH蕬HuHpCH!@l1HD9u}Hp@pCH !HD9uJuFD9xtHKU E3E3褕Ht{HA;tEź HDsH։{HAHSHJHt́HKāHNHH@MHHuHHP2HHtDfDHKHIHtnHKeHHHPHHuHHpӅHHtEHKHIHtHKH菅HHp莅HHuHHH\$0H _xH\$W 谉H+HHHX;HHt,HK&8HHHXHHuH\$0H _H\$W @H+HHH`˄HHt,HK7H蠄HH`蟄HHuH\$0H _H\$Ht$W ˈH+B3AHhTH }H DLAIHH+H\$0Ht$8H _HIHHpH9HpH9uHr?ËH\$0Ht$8H _r?ËH\$0Ht$8H _3H\$0Ht$8H _7;|H|H\$0Ht$8H _H\$0Ht$8H _k7f70;|HH\$0Ht$8H _HHt$8H\$0H _åf@S 褆H+HHHH@HHP HHXHH`HHpЁH&}HǃH [̸(H+NHtxu3H(H\$W@ЅH+H<H3HD$8HHHuu3HL$(]HT$ HL$(UHL$ H>ޱH+HBzՔHLIAi+ȸgfffHA;|3u9~)HHD))Sy C@B;u{:}3HHHL$8H3CH\$PH@_@S ĄH+HT$8HH|$8|$<HffHf3H [̸(փH+HT$8Ht|$8|$< H(3H(H\$W 萃H+HH^E3A HAQ bHHǀxd]~HoE3LAP.HHzH\$0H _@W H+HuH _HA@H\$0yHH 3A@HSZ~H@N~HPB~HX6~H`*~Hp8t ǃ3H|H@HtNHPt:HXt0H`t&Ht!HGHHPH\$0H _Ht}HPHt}HXHt}H`Ht}HpHtr}Hx3H\$0H _H\$W 蠁H+HHuu fHHHHHmE3LAP-HH\$0H _1xH\$W H+HH3HHHHfHHdmE3LAP-HwHH\$0H _<@S@tH+H6H3HD$8HHL$($HT$ HL$(LD$ H>ޱL+HBzՔIHi€D+gfffAЉSHL$8H3TH@[LD$SWAVAWHH+HEIDHt3LH 9yELAHHHA_A^_[ tHAPxEuD9$u 3HHA_A^_[H0Hl$pHt$xHL$Ll$@t<xRH9tCD$ L hsAAPOHDBAHCPoHpՈ@nVH NG FGFfFFVN@n;tH DHH%LMt(HHD$0H\$(HL$ 3LAA3HHGHGHGHG HG(HG0HG8Hxuf(HCPHHC`H HKXH\$`Hl$hHt$pH|$xH@A_A^A\H\$UVWATAUAVAWHl$ḠVH+H H3HEHuEALEHE3D9.HCA LEAQ HDl$ Ph! yMD}}DEDMDUD]3AHEHEHEHEHEHEHEHEEfAf ED EA AD]D E A E UfMD} H};$Hf;(tD9xft;D9k8D9EEEELMt+HLMHD$0A3H\$(HD$ ALAHDk``>tC`HMH3YUH$HĠA_A^A]A\_^]HULHHULHN D$ L pHUEHDt;HCPEAVHHHCDH Dl$ LHPhC(D.JA;tA/D$ L KpELDcH{`A/D$ L oAD$ L oA AQKEƺHCDk`D.L3HHBHBHBHB HB(HB0HB8IA@ A@ ȉJAHA@ff fJA@AH A@ ȉJ A@ AH  A@  ȉJH\$W@SH+H٨MEtD$ L pAn7T0{,HpA%Lt$XILHf@HHHHHt$P>K~vIN,K~dA%MHAQAxIHHt+HAHL$0AHMH\$(HD$ %H,ǃHt$PIHLt$XH\$`H@_D$ L oAD$ L MoAm1HH\$`H@_@S TQH+yHtHIMHK JHK@Ht(HHKHHtHHH [ HH\$Hl$Ht$H|$ AV PH+DHoH03AGHHt`tHjAGHHt8H{@EtLHjAnGHHuHtH_GHWG3D3HIPHsHHH\$0Hl$8Ht$@H|$HH A^øH\$Ht$W0OH+DJ zHًJHIH;v9D$ ;L k A:G/H\$@Ht$HH0_AH;vD$ @L jHHKPHW%Fu5L jHD@ D$ NFPH\$@Ht$HH0_HHHHHFfH\$@Ht$H3H0_ËH;tD$ \L $j@VWHNH+HLHH0Mt,$HLHD$0HL$(HT$ A3AH$s 3HH_^Á@wGH\$`_ ؍C;v3H\$`HH_^Hl$hLt$pL|$@Lk@HkADLHt>Hx_HGLIH%NH ;FIDDMƺH؅x5HHt)HAHL$0Ht$(HT$ AHMI'Dy<:u3u.AAG ;uHdž3Lt$pHl$hL|$@H\$`HH_^@SUVWATAVAWPLH+HH3H$@ZHJ ˃E3MH;JH3HD$0B D$6BHT$0D$7HXHHHt;^IEHDFD(fE;*AA ;HfEu >;^tMHHlxLE;G;w_3ҋLHtNNHF @ N0H0tWHEMF@D˺HDd$ Ph;t2IE'H$@H3KHPA_A^A\_^][Å~HL$0IFHtHHHXFHuhLfH foD뎅tE@wHEDLD$@HDd$ PhD+uǸ;H\$W JH+HH|t9H2E3AQ1HE3bA|+ȉHǀ|HE3E3AQ1H)A+H9E3E3HAQ ( HE3E3AQ(H@HHE3E3AQ1H@+H9sNHSE3E3AQ1H@H+HH#DE3HAQ*O@H\$0H _3H\$0H _H\$W IH+Hم~4iLeH(eHH`A/iH\$0H _t-HJ0u+u"HW5HCH\$0H _HH\$0H _H\$ UVWATAUAVAWPVHH+HH3H$@ZHRLN E3M; ALE;G;I3HT$0HD$0F D$6FD$7HXCLHuANWHHNHF @ N0H0@Dm E HhF9Eu{L9mHu@@wIFDLD$@IDl$ Ph~3+u˸;DF IFDLE@IDl$ Ph;tAMuHE,$H$@H3IGH$HPA_A^A]A\_^]Å~H=?DN AD;HEHAMcIAAN D;|LcF IAA8`HHUHF ;}(LcfHEHKAN M@;|DF DA@AHcA8hHHUHD9nLjaH a?FHUHD@8hIcH8u&AAxIc<uHyH<LmHMUHL$0H-AHuoIHHXAHL`H a??HAHL$HH3BL\$PI[8Ik@IsHIA_A^A]A\_cH^HH`bHl$VWAW BH+MHAH\$@fDHHX=HHttHHX(f9SsUHXU={tHKd=HK :HK@Ht8HKHHt}8Hu8H<xH{Ht3f;SuHXLt$HDs<DHH!uS HNPDCHIH HHS@AHH<u AA!DźH\F`ALt$HH\$@Hl$PH A__^H\$W @H+AH9QHHAPLHAH&f$9A`u6Hf&H%AIH$AIC`HE3DCd$ƁDLfAPH{{HHH\$0H _D\$(Eu.LE9xuA&fA$Hf&H$DDfD$0DHB ̸(F?H+H(J̸(&?H+HHHH(mHxHt$HpHuHpHt HHu3̸(>H+HHpHH(H\$Hl$Ht$WAVAW0r>H+3AMHHt$HpHuHpHt HHuHH4DHu)3L d]HDB/D$ ~5AF~ A;~)3L A]DB8D$ I5KAHKCE~#Hr4HH K@CA;|BuA3H\$PHl$XHt$`H0A_A^_ø8V=H+LHA}*4L [HDB7D$ o4H8Hxu,4L a[DB=D$ ui4H8fHxH JIxHJBA3H8@VAVAW0<H+LHX3LHu.5L [HDB5D$ 3AFH0A_A^^H\$PHl$XH|$`Ld$hL%Z:H\HHtHH+ 3H8t=s H9uH=ZItHDH 3H8t@=s H:u;uDHC\tYHH;uD$ L ZAl52IM2H|$`Hl$XH\$PLd$hH0A_A^^HIM4y HI2Ht HuM73D$ L @ZAaLL$ SATAUAW8:H+IELLA}76L 9ZHDB+D$ %322H8A_A]A\[BHl$`*IA %}ȃtD$ 1L YAaED;}D$ 9L YAaH|$pLt$0Ht$LpMuLpMt MMuE3HǁxI0tUHt$hA7AOIA 3ۅ~"I09pt;| I$xuH\$xHt$hALt$0H|$pAM;t@D$ aL YA`60Hl$`2H8A_A]A\[3Hl$`H8A_A]A\[Hl$ AV09H+MHAt:D$ L aW7DB*\0A2Hl$XH0A^ B ȃtD$ L &WBHt$Hr zt?7L WDB)D$ /Ht$HA/Hl$XH0A^H\$@HHpHu HpHHHHH|$P3.~H.9ptWH.;|7L VDB*D$ ?/A2H|$PH\$@Ht$HHl$XH0A^HxA3Ӻ7L VDB0D$ .A2̸8F7H+L LWD@ HܺD$  .3H8̸87H+H?A8HD$ V3H8̸(6H+tHH(HL0H(̸86H+HtCH Ht7HHHt,HQHuD$ L \A!HH83D$ L |\A-3H8ø(6H+LHu7\t"Bt3H(E3I3H(^M33H(dWBTLHAXAIEH(I ATA ATH(I AD#@TD@TAH(IIH(HVWWW!W*W3WHHRL RLGHWLDH H\$@HD$ 6HOH\$@HG$:*HxHH RR'HHuD$ L RAH R 'HHuD$ L RAH R&HHuD$ L RA$HHfLH׹)HH@pu HHLJ@HH%~*H%~H% @HHHHHHHHHQALJ B#H HgH(H HwQhH AHh#HH(Ht$PH(HhHHhHHl$HHH0_D$ L ^PAHA ̸(+H+HxH((H\$Ht$W [+H+HHAHHt>"HNA$"HHuH\$0Ht$8H _LHH+Ht$8H\$03H _HL̸(*H+H H(sZH\$W *H+HHIHHt'H{H\$0H _HSH\$0H _HL̸8F*H+H LLAHQH HD$ DHt,H u' L JHDBD$ gq!3H8øH8HH̸()H+HIH(.&̸()H+HH(%H\$W p)H+HHLMPHA# LMJAHp#H\$0H _H0HLHLHH̸((H+HxH(I%̸̉8(H+A v'L LHDB6D$ 3H8DDHHE(H8̸8&(H+H:LHHLAHQL KLDH IHD$ HtH~ H8úL JDBwDH(3H(HHt틀H(HATA ATH(HAD#@TD@TAH(Mt(HHHtIHH(HA33H(HHAH(H&k7kdk kkkkkkKkxkkllZl   H\$W0H+Hy0Hٍxu.L >HD@`D$ ^H\$@H0_HAPXCH0usHS0H\$@H0_H\$W H+HHpHHu H\$@H _ËHl$0HˉGHt$8CHGHCH0t H^PHGHHCPHt-HHt|IHCHHODH HzHHHHHH@@HtHHHHH8LH8HPHHPxxlHOHtE3LKAP KHOHt(H;OtE3LKAP $HCHCG(HC(G,C,HG0HC0G8C8GD$ Y3HLEtIH)HL$0E3Iu'L D@ H>D$ dF3HL$06H$m~8H$`IHLH$5;|HL$0cH~/HIHLXH;|ҸL$XH$PL$0I[0Ik8IA_A\_HL$03H\$Hl$Ht$W0H+HH3IIxuDHADIcMt\ HT$XHNHL$XHD$XHHD$XH@xHD$XyD$ -L %D$ %L A?AH 3H\$@Hl$HHt$PH0_@VAV8H+H$XH$`H93L$hL$0EHLDH9/u%L zPMAD$ UH$PAHH*HO ~VfHOHHFu+%= eHO;|HHuET%= eFHxHHEAtHoLHL$0LHu%L zHD@ LD$ 5AT$THL$0HL$0A؅At%AtAAHL$0AHVL LDArD$ rHL$0%HLYHL$0HL$0HOHt HbHHMAtIHM~=HAH͍P<E3HH%C@ tH2HEHoEDH$PL$hH$`H$XAL$0tH}AH8A^^H\$W H+HHHt5H{u HCHKHtHtH\$0H _3H\$0H _H\$W0H+HHHtVH{u <HCHKHt=H9t1HOL UDBD$ B<H\$@H0_3H\$@H0_H(H+H\$0Ht$8H|$ xHYp3fHKHt ~HsHKHt HsH HtHYzH3HKHt HsHscH8HuH|$ Ht$8H\$0H(@SW8CH+HHA HHu)L HD@AD$ |3H8_[3AHqǃHH+H%I$I$IHXHHKXHHH?HHk8HH GCG C GCGCGCHO Ht HG HC HG(Hl$PHt$XHC(HO0Lt$`L|$0HHC0HD$ L HD@HK HtQHK0HtcHK@HtiH0H/H3Lt$`Ht$XHl$PL|$0H8_[HG0HH(Ht7HHu"D$ L !DAXHC0HH(HG0HH Ht&VHHuD$ L HC0HH HG8HC8HO@Ht.HC@Hu D$ L HD@HGHE3LHCHGPAHw`L+CPHNHt&IL6L DBHD$ 'HHt(I6HL DB HD$ ,HNHtID6HE|6(L9~tHCHu-L QHDB-D$ S3H\$@H0_H;CtHHǿt޺HL DB D$ 蟹H0Ht>H0|H\$@H0_H0Ht Hǃ0HpHH;StH7JH\$@H0_Hu3HHLPH\$Ht$W0˿H+9IcHHH0Hl$@3Ht 蛶H0OH:A-yH0Hu7L 4HD@A&D$ /Ѷ3Hl$@H\$HHt$PH0_Ht/f8H0LHAHHAH0HI蕿f(H0HhH\$HHt$P3H0_Hu3H8L@H\$Hl$Ht$W 覾H+IHH3Hx~DHHttà r3H\$0Hl$8Ht$@H _à sH\$Hl$Ht$ AV %H+3EHHH9ZDH|$0EtLPHA<HM H)HH;uHM Hֻ6HHHpEt LADJ-t#LJHEPHtHHH*H|$0H\$8Hl$@Ht$HH A^Ë@S 4H+H0HtDADu>0u2H r$H0HXAH [3H [@SVW0¼H+H5HHuH0_^[HXLt$XHDuHzH0E3Ht (L0Hl$Pu CDV=uD=u9=u.=u#=u=u =lCD D9t=DsDHHa舲HHLD$ L R LRAJ(H8HuHXH5HpHHE L(AJCDLD$`HSHHωD$`օuD$ L A-D$`tUKD;wNs?u+3DHHHHzCDDCDHSHH٪D$ L A.lL DBzD$ HP3D$ L A$DsD v0D$ L AD轱H33H HKlL覺ChH0DHl$PLt$XH0_^[@USVWATAUAVAWH$XH+HoH3H3IMcH+LHHt$0I;ZEHD$0AEHD$ DDX~JDE{H\$0H{HX@@D}D$@Eu3HMMI~ LLJAezHXHT$@HI HD$0Ht$HL $DB D$ i諱 LAkJH\$0HHX@xH\$0HHXLPXM9LEIHDžAHD$0HHX9t)HL$0L DB HD$ HXA@u HT$0H\$0HChDA;uOH HKlDu8@tyEutL 6HDBAt0At!AtAu`H5~H5nH5qvH5mH5dH5F[A@tNA@t?At-AtAt H5F+H5q"H5,H5H5FH5L #AAC?-AAItu HHHtHHHDAE,HHHEtHHHDHHHH~HuAwAt6At$AtAu6HFH=H4H+AtA t HHmHTA@?wUAdADIH==H=4H=+H="H=H=H=H=Mu,AH}AEAɤLHuHxQA} H~?H$MMLHD$HH|$@H\$8Ht$0IcIHl$(L|$ IL$L\$PI[@IkHIA^A]A\_^ì=IU1( :̸(vH+HAHH(HHtHtA4A03̋AHtHAHHuHAuHÃHtHHt$W0H+HHj:a?>!H\$@6H AkHHuHD$ L *0HxRH aHH4xKH¨D$ L A5nH\$@Ht$HH0_H DaHt(H诡tgH\$@3Ht$HH0_H蟡CD$ L DBL A3D$ С3Ht$HH0_øHt$HH0_̸(&H+H `HHz`H(̸(H+HW`H(HtHA3H9`H 2`H\$Hl$Ht$W0覩H+IHHH D@H<3ugT OTH H"A ugTp OT_H HA ugT OT4H HA ugT OT OTHPpuIKtL DB8D$ 3kL A{D$ 3Mt/tu)HH HDHHHGPH\$@Hl$HHt$PH0_̸(H+H(̸(H+L PHAgH=3^JLA?LJA%H=]H iH]HtoHAH\$ 7HHt:HCHt8u HH ]H@HHCH d]藤H\$ 莤LdAJH(^LcAH(HLHA+Hl$V 耦H+HtOHtJH\$0H|$8*3ۋ~H9(t;|3H\$0H|$8Hl$@H ^3Hl$@H ^DD$T$VATAUAWH+D\$xL$L$M$3AEMDtMIMIHH\$@\$pHl$l$hH|$$HcL4$Dt$`H$fIM2HtMRMRHx;z0L$Ht JL$Pt JEt DjEt Dr t j$tJ(#tJ(# s B(qAuYxaI;t>I;uLHHPHtHHHJHPHtHHHJI@L@LH@@AuVxI;I;uLHHPHtHHHJHPHtHHHJI@L@LH@AuWxI;tAI;uL@HPHtHHHJHPHtHHHJIA3LHHPPL`3҉PYAuSL;uLH HPHHHJL;uL@HP@HtHHHJHPHtHHHJ3HPHPH$H;H|$Hl$H\$@L4$MM$HA_A]A\^MM$HA_A]A\^Hl$Ht$ ATAVAWDt$@l$Ht$PDHT$XEEAAAHtHHHAHRHuEH\$ H|$(HIHDHDDPDXX EtEt-EtEt#EtEtEtDtttHHH8H8HuH|$(H\$ Hl$0Ht$8HA_A^A\̅DL$ DD$HL$UVWAVHʡH+H$)t$ H\$xLd$@D$Ll$8fHnflD$3L|$0D$H_$DH3HtH8tC$Hu7xu2Dhu,D` u&Dx$u HCHCHCH HD$pA;|L|$0Ll$8Ld$@H\$xH$HGHG MHGA;=Wfo-A%}ȃfoDLGPD+ȸfnfnҍBMfpffoff8%ffofffnfAֈhfsfAHf8%fpffffofAֈ`fsffAHf8%fff8%ffffAHfsfA@fsfAHfA@A;6LcLcM;}EILGHLM+BM@ HcHcHHHHI@IHIu֍EHcHcHHHHL8HcHHD8H$H8EHcH$HHH(t$ HHA^_^]̋QA`tè@uttètèt3è ts BH\$Hl$Ht$ WAVAW0bH+HD$p3HAA  HMHHL$PAMH\$P\$pHt)HD$(HL$pE3E33H\$ ǛL$pNˉL$pHL$PHt诚9\$pu /HHL$PAH\$P\$pzHt)HD$(HL$pE3E33H\$ _L$pNˉL$pHL$PHtGA9\$puD %=uD  ˺H9 |TAADȋH9\TDº ȋH9ATDº ȋH9&TDº ȋH9 TADA ȋH9SD ȋH9SDº@ ȋH9SDº ȋH9SAD ȋH9SAD ȋH9lSD ȋH9VSAD ȋH9?S ȋA H9 RDH9R D ȋH9RAD ȋH9RAD ȋH9R A H9Rt9uAA Hl$`Ht$hH\$XH0A_A^_@SUVAVAW@ΛH+HMMHHHu3H@A_A^^][H|$pH$Ld$xE3HtBH QL'D$ Ht$HT$ mxH Q!HL'H}MtCL$L-=w\tSȃ?AAIAyrng耘jY=w3t*=t=t=u1 4 -& =t= u L& HICHC ȃwlAAIA HcIͨBIMt AػAH$Ht/AB#M&MtE'H$HtD { @MDHL$HM9&u0Mt E9'M%={u{ uH Huz{@u{ uH Hu]{u{ uH ҖHu={@u{ uH 赖Hu {u{ uH 蕖HtHM&3H|$pLd$xH@A_A^^][:BLSZe^ OLL$ LD$HT$VAVH+HD$`$/H$H$H$L$L$H L$D<-uxAD|$tHE3E3E33E3DT$xD\$pDL$h\$lDD$dE3DE3HH$3I?B<-wIrB<w^HAH<+uAt N$kt$H <;w HHrFHƄu9HA^^H\$Hl$ ATAVAW0fH+LE3LLAMtE9`t I9X0OX0M@Mu HhAcHHu'L fHD@AD$ es3C3HLcH|$XIaIHtD9bt HHcH0DHRHuHcHt$PD9d~wMMMIMt`IMtXHIRMRHx;Y0u>D9`t8I;t3I;uML@MtMPLMtHHIHIALHLL"H;uMMHwHt$PH H|$XH\$`Hl$hH0A_A^A\LL$ USVATAUH츀ǐH+3MLHHuHuMtHtMtHUPLEHu3HĀA]A\^[]HELMLEHUHMH$HD$ L$HAȋE*LHu'L HD@AD$ 膇3DMDEHEHD$HHEHD$@EL|$8D$0EHˉD$(EL$D$ LUH}MALMt`fIMtVHIQ@L tA9quH H>υH hH>輅H ]H>詅H bH>薅H _H>胅H \H>pH qH>]H vH>JH sH>7H pH>$H mH>H FH{>躀HH=~=yL>H g H j}HHw=~=yLQH zЀH @HE=Ht*H@~Z=yLgH 莀H 3HHL$HAH\$HH<\$@!Ht+HD$(HL$@E3E33H\$ L$@NˉL$@L$@HD$HHt HL$@<ɺ EH p<eHHw<j}H <DHH^<I}o<H0[s H],HH"HHHHHH HHHHHHHHHHHHHHHHHHHHHHHHÐ'/7?GOW_gow s HM<  HHHHHHHHHHHHH"H2HBHJHRHZHbHjHzHHHHHHHHHH*H:Ð' /     7 ? G O W _ g o w          uHżHռtHuHپHپtHվ̋QLt ttHHHJH̋QLt ttHNH.HH̋AH= QC=3it t=HHH=-=wHH HHHHHHHHHHHHHHHHHHHHHHݼHݼH=HH=!,t"=!t= lHHoH=";--!=3HHTHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHYHYH)="t=@tHCHH f $ , 4   < D L T \ d l t |        ` h p x     v   f   PX          (08@H    ` h p x v           ̋QH A t.t!tHSH˻HoHۻÁHcHDHHQHiHHHHɼHHH!HAHaHHHHѽHHH1HQHqHHHHHÁt-t t HlHHHH,Á"VH!fHcHHH2HRHrHHHH¾HҾHHH H"H:HRHjHHHHʿHHHH2HRHjHHHHHHH"H:HbH HÁ"tH0t8@t(Pt`tHHrH*HHHÐ08@HPX`hpx'/7?GOW (g            f_gow'/?GOW'/7g####################################### ############## ############## ############################################################################################################################## ##############!"@S0tH+HHu&L P~HD@D$ ak3H0[H|$@H Hu-L HD@AD$ ekH|$@3H0[HHH|$@H0[H\$W0tH+LD$PHLD$P3qHHu-L bHD@ D$ ?k3H\$@H0_HHHϋkH\$@H0_H\$Hl$Ht$H|$ AV0psH+AHL3QpHgmHHu%L NDFD$ tjlLHDB&jD$ yL YA|uMM3Hύkpu@3Hύk pHHuD$ L &D,HIHˋj$D$ L A|iHriH\$@Hl$HH|$XHt$PH0A^@S04rH+HHu(L ʽHD@D$ i3H0[Ht$@H H蝞u-L HD@AD$ GiHt$@3H0[H|$HkHHu2L kHD@D$ iH|$HHt$@3H0[HhLúH>oHjH|$HHt$@3H0[HHHϋ5iH|$HHt$@H0[H\$W0qH+HT$HHHT$H3nHHu-L HD@ D$ T?h3H\$@H0_HHiHϋiH\$@H0_H\$Hl$Ht$H|$ AV0ppH+AHL3QmHgjHHu%L NDFD$ *glLHDB&gD$ /L A|u3Hύk m uNMM3HύkmHHuD$ ?L D,HI^Hˋh$D$ ;L {A|fHrfH\$@Hl$HH|$XHt$PH0A^@S04oH+HHu&L *P{HD@D$ ~f3H0[H|$@H H蟛u-L HD@AD$ IfH|$@3H0[HHH|$@H0[H\$LD$W0nH+DHHT$P38gHHu-L HD@ D$ e3H\$@H0_HHHϋfH\$@H0_H\$Hl$Ht$ W0mH+HH3jejHgHHu%L bNDFD$ /eWlLHDBd'L 0DAD$ dLL3HLt$@XkLHu%L HD@ D$ dHHoiPXE3E3H6LL3H>jHHt6E3LHAPY6tFLL3HjHHujȁ u%luc H(e3IeLt$@HacH\$HHl$PHt$XH0_H\$Hl$Ht$H|$ AV0lH+AHL3hHfHHu%L >NDFD$ KclLHDBbD$ L A|u3Hύk wi uNMM3HύkhHHuD$ L ֶD,HIHˋc$D$ L A|bHbH\$@Hl$HH|$XHt$PH0A^H\$Hl$V0jH+IHHHHHHLHWHHIAIAQHHcH;*ILH+uH H|$@uD$ L wH HHu9D$ L DA0Pa3H|$@H\$HHl$PH0^HI LAaeHHuD$ L ֶPDA-H LHHQ H HHHI jH LHHHY(H u PD$ L {DB4H>;PL DB4D$ `3H\$HHl$PH0^ùL ŵPDA/D$ e`H\$HHl$P3H0^H\$Ht$ UWATAVAWHphH+HH3HEѵ3HLDH]ȉ]H]EH]DHjHaSeHibLHuD$ L DCIlLHDB5_D$ L xAHELMLEHUIHHD$ e@fLMЋIA8tf=s H8uDEHUEts H8u;NHMEt@=s H8uDHUIAUHEH@ȍB;L̴AAHbHHLcEHUI lgHcEHML]HMH]]HMH]]HELMLEHUIHD$ H]HdHtqMHID$ L /AAqD$ L AZD$ L ѳACD$ L A,D$ L AD$ L <ACQ]]HM\HM\HM\H\MtI\HMH3fL\$pI[@IsHIA_A^A\_]@S0teH+HHu(L HD@D$ 3\3H0[H|$@HHݑu-L ʯHD@AD$ 7\H|$@3H0[HHH|$@H0[g H\$W0dH+LD$PHLD$P3bHHu-L HD@ D$ r\3H\$@H0_HHHϋw\H\$@H0_H\$Hl$Ht$H|$ AV0@dH+AHL3!aH7^HHu%L ήNDFD$ G{[lLHDBZD$ LL Au$Mp3HMMkau@3Hύk aHHuD$ ]L \D,HIHˋb[$D$ YL !A|ZH8ZH\$@Hl$HH|$XHt$PH0A^@S0bH+HHu(L *HD@D$ GZ3H0[Ht$@HH]u-L HD@AD$ ZHt$@3H0[H|$Hf\HHu2L ˰HD@D$ YH|$HHt$@3H0[H~YLúH_HZ[H|$HHt$@3H0[HHwHϋYH|$HHt$@H0[H\$W0aH+HT$HHHT$H3_HHu-L "HD@ D$ $X3H\$@H0_HHiHϋZH\$@H0_H\$Hl$Ht$H|$ AV00aH+AHL3^H'[HHu%L NDFD$ kXlLHDBWD$ L yAu3Hύk ^'uUMp3HMMk^HHuD$ L <D,HITHˋY$D$ L A|WH(WH\$@Hl$HH|$XHt$PH0A^@S0_H+HHu(L HD@D$ H7W3H0[H|$@HHMu-L zHD@AD$ LVH|$@3H0[HHH|$@H0[WH\$HT$W0;_H+HHT$H3WHHu-L RHD@ D$ V3H\$@H0_HHHϋWH\$@H0_H\$Hl$Ht$H|$ AV0^H+AHL3[HXHHu%L ~NDFD$ \UlLHDBfUD$ aL IAu3Hύk \'uUMp3HMMka[HHuD$ qL D,HIHˋV$D$ lL ѫA|"UHTH\$@Hl$HH|$XHt$PH0A^H\$H\$(3EILHHtfHtaIr[DAIADIrBAQIHHI;w&E;tHL+u3H\$I HH\$H\$H\$Ht$ W@\H+IHHHHHl$PLt$XL5|3HGHtWH LLHMtf;t1IH0M;rHl$0LE3HLt$(Hl$ ltOHHrEGOHHH;w-HHH+\CHl$PLt$XH\$`Ht$hH@_3H\$`Ht$h3H@_H\$Hl$Ht$W@[H+I3LD$0HT$8IH\$8H\$0`gt8HT$0HL$8LDH|$ uHD$p2 Ë3H\$PHl$XHt$`H@_MtHD$(23øHt$H|$AV0ZH+LHHSHHu3L HDBMD$ /R3Ht$HH|$PH0A^HHy=L DB8D$ QHmR3Ht$HH|$PH0A^H\$@HHk8IHS`HtIHXQHK`9u HI Wu&HS`HVuHK`RHC`vQHQHKXHXHtRHNL DBD$ RH|$PH3Ht$HIH\$@AFH0A^H\$Ht$ W0kYH+:HHuHHHt VEH8uHtHUEP 3^؅y4L tDB6D$ dP3H\$PHt$XH0_HcHl$@Lt$HH^XLk8IH HsQHHu.L $HD@AD$ P3P3HHTVHjPO?u HO !Vu"H HUuH PH3DIL6`Ht"PHOL DB D$ QI|6`HFHl$@Lt$HH\$PHt$XH0_DD$USVWATAVAWHl$ٸWH+HLLHUE:HEHtHHuHHu E߄7DEwIHEE3HEHEHMHEEuLe IcHHEHUwHMwUu EߊHEDEHUHMHELeDe UHu EߎDEËEHM+EDDEHtMDELeDeHEHUHMHETHu EߖdEHM+EETHMHt jMLeDeHMDEHUHMHMLeDegTHu EߡE+EEÃu3}tEEߥ HMA  AVt"=ttEE߷ }tEE߰ HE@LHM ЉHEDEHUHESHu E߾3 EϹ +EEËE;OECDE;~LH D"OEHUHKHLcUHEDEHUHMHESHu E E+EEËE0~ C0CLcCHUHK=UẢM9MtlHU:ǃCLeDeLEDeHM9HMLMoLEHMHUgD$ 6CyE;EQ!uMDE+MADDEgDEgHUHMIHu EQs!u,UHM+UUÉUgIuE?EQBE+EEL9et"HMI@HMEBLeDe"L98tD9cDt ǃ@D@EDeLeHM9HMLMoLEHMHUgD$ ByE;E]!uMDE+MADDEgDEgHUHMHHu E][!u,UHM+UUÉUgHuE?E]*E+EEHEHtH0HcEH8L0MDeLeHE8L$ LMoLEHMHUgHE,AyE;Ei!uMDE+MADDEgDEgHUHMGHu Eii!u,UHM+UUÉUgGuE?Ei8EϋM+EHEMHtHM9@MHEDeLe8L$ LMoLEHMHUgHE>@yE;Et!uMDE+MADDEgDEgHUHMFHu Et~!u)UHM+UUÉUgFuE?EtPEHM+EEHt#HcU#?HHHMO?LeDeLHHMsFuOE~EDEgJL DD$ ?UIA+YFHtMtI9tH要3HEIMtIHHİA_A^A\_^[]@USWATAUAWH$XGH+HH3H@3HT$`HDDD\$T\$\\$P\$D\$H\$X\$L\$@Hu3 H9u9tH0HL$pH$D$pD$tHD$xL$P'EH8HMHEEEEHD$D$<D$=EL$=D$<9t"EED$8HD$8HEGEEHGEHE؋GDEEHGHEHEGhEHGlHEGEHGHE t"H HM0E0HE8E4Ct"HHMHEHHEPELCt"HHM`E`HEhEdCHHt.H8t=s H8uE|HExH0Ht8DžH@~.H(HDžHDž CHHt6H8tf=s H8uDžHHHt4H8t=s H8uDžHHHHt4H8t=s H8uDžHHL$p3)BHM3ҋBHM3BHM3BHM3BD9gv HM3AD9t HM03AAADAD9t!HMH3AAAHDAHHt3@AAHDAHM3eAAAHDuA؃t"HM`3/AAAHЉD$TJA؃@~%H3AA AHЉD$PAH0t%H3@A AHЉD$D@Ht"HMx3@AAHЉD$\@؃t"HM3@A AHЉD$L@Ht%H3X@AAHЉD$Hg@Ht%H3)@AAHЉD$X8@HHt%H3?A AHЉD$@ @AAH?HD$`HCHAHL$0AQDD$ HD$0?HT$0HL$p?HT$0HMr?HT$0HMp?HT$0HMb?HT$0HMT?vH\$0HT$0HM;?$ t,AHL$0EAD$ )?HT$0HM0>t-AHL$0EAQD$ >HT$0HMH>Ht0AHL$0EAQD$ >HHT$0=AHL$0EAQD$ >HT$0HM`>t/DD$TAHL$0AQD$ T>HT$0HM`>Ht/DD$\AHL$0AQD$ >HT$0HMx=Ht2DD$HAHL$0AQD$ =HT$0H=Ht2DD$XAHL$0AQD$ =HT$0Hw=@~2DD$PA HL$0AQD$ k=HT$0H0=H0t2DD$DA HL$0AQD$ /=HT$0H=t/DD$LA HL$0AQD$ <HT$0HM<HHt2DD$@A HL$0AQD$ <HT$0H<HT$`HD$0HL$PH$H@H3>HXA_A]A\_[]H\$Ht$W0 >H+HHH&HJO<u L?w=u L7g=u L/W=u L'G=u L7=u L'=u LLH =LEHH;tLMuC%=uHDH};(DHHh;M@HHS; HH0;39sDv3@fffDDHHߌH ;;sDrH͌H:39shv.@ffDDlHH:~t;shrHH:~Z39sv&fDDDHHy:~4;srHHS:~Cu%H{H9:C3H\$@Ht$PH0_3t+fffDDHGH :~;srH9H9~HL3H HHLE9~HH9kHLH݊HHLE9?HHe9(HHLHHHLEE9D@EtHԋH"9H0t;HH8D8H0AH8tmHD$HE3E3HD$(3HHD$ HD$HRHD$HHHuDH8LHDHMIg8DEtHHD8DEtH{H!8HȉH7HmH76DHdLH7~H\$@Ht$PH0_H\$Ht$W09H+HH6H3HHu2L >HD@D$ `[03H\$@Ht$HH0_E3LHAPj/HHHϋ/Ht$HH\$@H0_̸(8H+7Hb76HU76HH76H;76H.76H!7&0H76H76H66H66H66H66H66H66H66H66H66H61H~6LH 5LH 50HA6L|H 5LH 5"2H6.H52H52H5`5H5LGH P:5LOH T"5LOH T 55H{5脌/H(̸(f6H+HA E3LAPbHtH3H(HI3H(̸(6H+HA E3LAPfHtH3H(HI3H(̸(5H+HA E3LAP\HtHH3H(HIq3H(H\$Ht$H|$ AV e5H+pHLuG$Hl$03t;:+uHÀ;-uHH҈HUuu95tm3@taLHL+B +uHuu=INHtE3DAQ^IN Ht~E3DAQ^@kH/uHr/w,HHdINHtE3LAP5IN HtE3LAPH,@ŋHl$0H\$8Ht$@H|$HH A^H\$W 3H+HHIHD@Ht DHK Ht H.DH\$03EH _@W03H+LHu H0_HA@H,HA8HA(H\$@HL$ L DBIʁ.HO( H\$@H0_̸83H+Hu H8HuBH8HHA@ HL$ HQ8,L DBH.H8H\$W 2H+HHHuAH\$0H _HCHt HaHC HtAHHH\$03H _H\$W 02H+HHHuAH\$0H _HCHt DHnHC HtAHHH\$03H _̸(1H+D@ً u H(ètHIHtD3EH(H\$Hl$H|$ AV U1H+3HHDuGH9yuH9y u Ht$0.H%+HHtvlLHDB (~VE3E33H/HHt>HKHtE3LAPDHK HtE3LAPHDH(H'Ht$0E@NjH\$8Hl$@H|$HH A^!̸Ht,S @0H+HHIHt,'H$'H [̸(0H+HH A`&Ht$3ɉHHHHHH HHHH(HH0HH8HH@H(H\$Ht$W /H+3HHt HR&HHuH\$0Ht$8H _HNHtn&H^Ht#@8;ts Hǀ;uHFH~H\$0Ht$8H _ 3HQ HAHtHHA(HHTHA0HA(HA03HQHA HtHHA(H HTHA0HA(HA0H\$HT$V0{.H+IHHu-NL HDB3D$ %3H\$PH0^HT$HuH\$PH0^H|$@H|$HHH-HHuFH|$@H\$PH0^HH~H|$@H\$PH0^ÃtBNL aDB2D$ %L \HaLǹHt$ (3H|$@H\$PH0^t:H yLÃHHC@HC8tH|$@H\$PH0^t6NL DB4D$ *$HLǹy'H|$@H\$PH0^H\$W ,H+IHHtu 3H\$0H _~IHHtHt ;E3L@! ~HcHHHt)H\$0H _ÃtDH\$0H _HT$S ,H+HT$8HtHT$8HHt @H [3H [Ht$AV +H+HLHu3Ht$@H A^H\$0H|$83H0zEAt.HCHt%LL+B +uHutAAtHKHt HKt%HH H r3H\$0H|$8Ht$@H A^HH\$W +H+HHHH HLKMtj3H8t=s H:uLCI;vht ILKuVtLCHSHzKu_tD$ L AQ)ǃH\$@Hl$HHt$PH|$XH0A^@S`H+HH3HD$PHHL$ 0RHL$PH3H`[LHL$ 0`HL$ 0H LHHLHHDʋHL$PH3<H`[HT$SVWAW8H+H3HHHl$`Lt$0DD#LHHLHHHHHHHHHLgHHHLHL|$(HL$ HL9LHt}HLd$pLl$x AHLcA LHtDHI HOHT$hLEMHARII̋r Id  Ld$pLl$xIr Hj Lt$0Hl$`Ht/H8ts HÀ8uH΋ H I$ H8A__^[H\$Ht$ WATAV0H+LHHH3ALHHHHHLHHLHD$ zHHHHl$PL|$XR AbH0LcA HHt%@%B%D%F%H%J%L%N%P%R%T%V%X%Z%\%^%`%b%d%f%h%j%l%n%p%r%t%v%x%z%|%~%%%%%%%%%%%%%%%%%%%%$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%%%%%% %"%$%&%(%*%,%.%0%2%4%6%8%:%<%>%@%B%D%F%H%J%L%N%P%R%T%V%X%Z%\%^%`%b%d%f%h%j%l%n%p%r%t%v%x%z%|%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % % % H(MA8HI H(@SH EHLAALtA@McPLHcL#IcJHCHHKAt AHLL3IH [}ffHL$L\$M3LT$L+MBeL%M;sfAMAM;uL$L\$HffH; ٵuHfuHa%* % % @SH HEwHu=u \ H [YHL$H8 t)H ۶8HD$8H·HD$8HHRHHHD$@H  HkH HHkH HL HkH HL H INH8H(H(̉L$H( tD$0)H JHD$(HڶHD$(HHjHöH4 HkH T$0HH M6H(H\$Hl$Ht$WH333γDۋDntelDAAineIGenuD ÍGD AAAuthAentiE فcAMDD @3DDȉ\$T$ EtOЁ?t+`t#pt° w$HHsDyADnDe@tAA`| ADE;|"3$L$T$  s ADAsPAs5As.@ tmg.H\$ Hl$(Ht$03H_@SH HHHHHuC#H#H H ;3H [HHXHhHxL` AUAVAWH 3IL5 D eH%0HHH;t3H uAtbH HHH ϷLLLIL;rZI9>t3I9tI3HIH H xHL;uL;tLHHt H3^H?H@=*EH=3eH%0HHH;t3H ܶuնt =>HH ^uHH Au HHqH9=t!H <tLźIg)H\$@Hl$HH|$PLd$XH A_A^A]H\$Ht$WH IHusLNjHH\$0Ht$8H _HHXHpHxAVH0ILX=u9u 3ۉXBw7HHHtЋ؉D$ LƋI؉D$ LƋIs؉D$ u4u0L3IWL3IHOHHt L3IЅtu7LƋI#ˋىL$ tHHHtLƋIЋ؉D$ 3ۉ\$ JH\$@Ht$HH|$PH0A^%%%%%%%LcA@N@b@~@@@@@@@@ B4on{vx  8;F  +% x N !" o PNz.o l q j  O ^   R<b{  W}|k m ] M<vD/= bA<;z Z HINm_!03" c CBxyY9` / P1[Ugmr   LUR]Tx 4 R 0Nx?%  ~ B w5UCAJb:|zlurtvm 2 V G ?| ID ]onpL YUW {wy proq{:;68t'%#CXz VM9+0I>ES 0{J$%[k uv < >>>?$?B?T?b?j?x?????????>>>|>r>h>^>T>J>@>6>,>>>8` XW X 0`p`P @p@p0`TP @p@@p0Tp`P @p@`jpSSLv3 part of OpenSSL 1.0.2k 26 Jan 20176666666666666666jjjjjjjjjjjjjjjj0@9@CRQRTT[PQPP`9P0@9TRQRTT[PQPP;P0@T@CRQRTT[PQPPEP0@`p`P @p@Tp0@`p`P @p@Tp`0@`p`P @p@Tp0@`TP @p@@Up0@`TP @p@@Up`0@`TP @p@@Up0@Tp`P @p@Up0@Tp`P @p@Up`0@Tp`P @p@Up   TLSv1 part of OpenSSL 1.0.2k 26 Jan 2017   P L2(Pp@ p P L2(Pp@ pP P L2(Pp@ pP TP L2(Pp@ p TP L2(Pp@ pP TP L2(Pp@ pP TP L2(Pp@ p TP L2(Pp@ pP TP L2(Pp@ pPDTLSv1 part of OpenSSL 1.0.2k 26 Jan 2017 4<D LT\`h p@x`ļ ̼Լؼ@@ (0 8 @DHPTX\dhlt| @ 00н̽0$< \dlܽt @̾Ծ !0 H!`     $ 8 @ P @h @x  ,4        @0 @ H X@p  UV`V\ V(80XHXX`YpYxYLpZZpCDppBRSDSv BtD:\CFILES\Projects\WinSSL\openssl-1.0.2k\out32dll\ssleay32.pdbAA> -tQ-dP-4O-HP04p`! T`*h!`*h!T`*h  p`0PT R p`!4 Q|R!Q|R8 *t)*d(*4'* P b p`0Pr p`! T4P##P!P##P3 "4u"l `PP!tts4t5!4t5)d! p!T 4@!@!t d EeF!  T t d EeF!EeF% %d%T%4 %Rp! !d !T !4 !Rpp0!' ' "  d T ! `!t T4 pxx!pxx!tT4 pxxr0!t d T :(!:(!t vv!t vv!vv2 $d&$4%$ p P4 rp!d !d > -t-d-4-zP- 43* `P@!2t1~!~!2t1~r P0! tdpx!px`P! t 4 k\k!t 4 k\k!k\k2P! t d4!d T 4Rp  ! !d !T !4 !2p4 2 `!  t T X!t T X!X2 0' 't 'd 'T '4'2! !d !T !4 !Rpd42 prp!P !P !  d4 16<!d16<!dP  ( p`P0T T4 p`PUU4dT2 pc c ^ 2p`P!4 1!1+  p`0P!* ,! ,!4`!`!T P! tdT P, 4 p`P*  p`P04 rp' P0P!  t d?!?*  p`P0!X!X!X: :5T bp`!4 t!t:!t:!tR0p`P0, 4% p`!T#$(!(!  t d P!t d P!Pd 4 r p# #t #d #T #4 #rt T42!d@""!@""dT42p/ 4# p`P4 txTd 42 1 x p`0P!w0*q,h!h:q,Q0!q,Q0!0*q,h!w0*q,hRp`0!T  99!99. T4 p `X! <@! <@bP0!t  d @CPC\! t @CPC\!t @CPC\ 4r p`P0!  t dT LL!LL42p!dSS!SS`0!tŵ8!tŵ8! Ttŵ8!tTŵ8" "t "d "4"2%4pd42 p 4 r p`P4 p`Pd 4R pR`0! P !t T ,!,!P 4 rp! 0x!))d 0x! d 0x!0xp`!4 p! T 4 p%4*&p t d42!T0!0, ,4,Rp`PB0!  d TP|!t |!|!P|t T 4 r!d Ї]!Ї]  t43 "M p`0PP!t `p%q!t `p%qr08!t `WWh!t `WWh@@Td 42 p!`!`} } xt sd nTR0Rp`P!4 :! 4 :4 Rp!!rp ` P 0! u@v4d T 4 R!ttzt\!tzt\!ttzt\  p`P020B`0! t T 0Y!0Y`8!11t4 PXX!t4 PXX!4 PXX/ 4>4 p`P T 4 p`. T4r p `8!Y!Y.4p`P!234<c!c`P!t4`$!t4`$0 "4 " p`P- T4 p ``P!= =5t4 >! >! >- + p`0P@""p0!AA+dTE!E!dTE' 't'd'T'4'  U UP4Tr p `Rp`P0!  ! "4 rp8!4 C !4 C !KK?3't d T (!() `P0!x!t!!x p0! dTP  !P  4 rp0!t)*(!)*(XX4d T R p+ 4! p`P! h!hd T 4Rp ;T0!IIt:d./*T 4 R p `(4 %d%T%4%pH' 't'd'T '4 'r! 99x!d 99L!99L! 99x!4 =>! T 4 =>0 "4" p`P# #t #d#T#4#2d 4R p**4T 2 p`! JJ!JJ/ 45* p`P@* * p`P0@b 0!T 0QQ!  tQQ!d QJR!QJR!QQ!T 0QQT R!d SS!4d SS!t S T4!S T4!t d 4SS!d 4SSR`! t T 4 OO! t T 4 OO' '4'2p`P4Rp!4w,w0!w,w0!4x,x0!x,x0d T R p!4[ ^\![ ^\!tgg!tgg!4t.t!4t.tt d2 !4yy!Tyz!yz!T4yy!yy"1`0p!t00|o|P!0|o|PR`!  t T @}}!t T @}}!4q~,!q~,42`!t@uiu!Tt@uiuIId0R0_0s000xy{ont ,-0'KNL}\um|zsMIwyk{  5v$ hb&.G;CDH=Ee %~Si !UQJ"#$%&'W()*+,|-.`/cj0367~89:;<}/(>?d"#@lA<>BgADEFGxHIJKLMN7OPf4!QqRSTURV +)WXY213?@Z[a ]^_O`abcdefghij*kmnopqrstu98:T]Vvw SSLEAY32.dllBIO_f_sslBIO_new_buffer_ssl_connectBIO_new_sslBIO_new_ssl_connectBIO_ssl_copy_session_idBIO_ssl_shutdownDTLS_client_methodDTLS_methodDTLS_server_methodDTLSv1_2_client_methodDTLSv1_2_methodDTLSv1_2_server_methodDTLSv1_client_methodDTLSv1_methodDTLSv1_server_methodERR_load_SSL_stringsPEM_read_SSL_SESSIONPEM_read_bio_SSL_SESSIONPEM_write_SSL_SESSIONPEM_write_bio_SSL_SESSIONSRP_Calc_A_paramSRP_generate_client_master_secretSRP_generate_server_master_secretSSL_CIPHER_descriptionSSL_CIPHER_findSSL_CIPHER_get_bitsSSL_CIPHER_get_idSSL_CIPHER_get_nameSSL_CIPHER_get_versionSSL_COMP_add_compression_methodSSL_COMP_free_compression_methodsSSL_COMP_get_compression_methodsSSL_COMP_get_nameSSL_COMP_set0_compression_methodsSSL_CONF_CTX_clear_flagsSSL_CONF_CTX_finishSSL_CONF_CTX_freeSSL_CONF_CTX_newSSL_CONF_CTX_set1_prefixSSL_CONF_CTX_set_flagsSSL_CONF_CTX_set_sslSSL_CONF_CTX_set_ssl_ctxSSL_CONF_cmdSSL_CONF_cmd_argvSSL_CONF_cmd_value_typeSSL_CTX_SRP_CTX_freeSSL_CTX_SRP_CTX_initSSL_CTX_add_client_CASSL_CTX_add_client_custom_extSSL_CTX_add_server_custom_extSSL_CTX_add_sessionSSL_CTX_callback_ctrlSSL_CTX_check_private_keySSL_CTX_ctrlSSL_CTX_flush_sessionsSSL_CTX_freeSSL_CTX_get0_certificateSSL_CTX_get0_paramSSL_CTX_get0_privatekeySSL_CTX_get_cert_storeSSL_CTX_get_client_CA_listSSL_CTX_get_client_cert_cbSSL_CTX_get_ex_dataSSL_CTX_get_ex_new_indexSSL_CTX_get_info_callbackSSL_CTX_get_quiet_shutdownSSL_CTX_get_ssl_methodSSL_CTX_get_timeoutSSL_CTX_get_verify_callbackSSL_CTX_get_verify_depthSSL_CTX_get_verify_modeSSL_CTX_load_verify_locationsSSL_CTX_newSSL_CTX_remove_sessionSSL_CTX_sess_get_get_cbSSL_CTX_sess_get_new_cbSSL_CTX_sess_get_remove_cbSSL_CTX_sess_set_get_cbSSL_CTX_sess_set_new_cbSSL_CTX_sess_set_remove_cbSSL_CTX_sessionsSSL_CTX_set1_paramSSL_CTX_set_alpn_protosSSL_CTX_set_alpn_select_cbSSL_CTX_set_cert_cbSSL_CTX_set_cert_storeSSL_CTX_set_cert_verify_callbackSSL_CTX_set_cipher_listSSL_CTX_set_client_CA_listSSL_CTX_set_client_cert_cbSSL_CTX_set_client_cert_engineSSL_CTX_set_cookie_generate_cbSSL_CTX_set_cookie_verify_cbSSL_CTX_set_default_passwd_cbSSL_CTX_set_default_passwd_cb_userdataSSL_CTX_set_default_verify_pathsSSL_CTX_set_ex_dataSSL_CTX_set_generate_session_idSSL_CTX_set_info_callbackSSL_CTX_set_msg_callbackSSL_CTX_set_next_proto_select_cbSSL_CTX_set_next_protos_advertised_cbSSL_CTX_set_psk_client_callbackSSL_CTX_set_psk_server_callbackSSL_CTX_set_purposeSSL_CTX_set_quiet_shutdownSSL_CTX_set_session_id_contextSSL_CTX_set_srp_cb_argSSL_CTX_set_srp_client_pwd_callbackSSL_CTX_set_srp_passwordSSL_CTX_set_srp_strengthSSL_CTX_set_srp_usernameSSL_CTX_set_srp_username_callbackSSL_CTX_set_srp_verify_param_callbackSSL_CTX_set_ssl_versionSSL_CTX_set_timeoutSSL_CTX_set_tlsext_use_srtpSSL_CTX_set_tmp_dh_callbackSSL_CTX_set_tmp_ecdh_callbackSSL_CTX_set_tmp_rsa_callbackSSL_CTX_set_trustSSL_CTX_set_verifySSL_CTX_set_verify_depthSSL_CTX_use_PrivateKeySSL_CTX_use_PrivateKey_ASN1SSL_CTX_use_PrivateKey_fileSSL_CTX_use_RSAPrivateKeySSL_CTX_use_RSAPrivateKey_ASN1SSL_CTX_use_RSAPrivateKey_fileSSL_CTX_use_certificateSSL_CTX_use_certificate_ASN1SSL_CTX_use_certificate_chain_fileSSL_CTX_use_certificate_fileSSL_CTX_use_psk_identity_hintSSL_CTX_use_serverinfoSSL_CTX_use_serverinfo_fileSSL_SESSION_freeSSL_SESSION_get0_peerSSL_SESSION_get_compress_idSSL_SESSION_get_ex_dataSSL_SESSION_get_ex_new_indexSSL_SESSION_get_idSSL_SESSION_get_timeSSL_SESSION_get_timeoutSSL_SESSION_newSSL_SESSION_printSSL_SESSION_print_fpSSL_SESSION_set1_id_contextSSL_SESSION_set_ex_dataSSL_SESSION_set_timeSSL_SESSION_set_timeoutSSL_SRP_CTX_freeSSL_SRP_CTX_initSSL_acceptSSL_add_client_CASSL_add_dir_cert_subjects_to_stackSSL_add_file_cert_subjects_to_stackSSL_alert_desc_stringSSL_alert_desc_string_longSSL_alert_type_stringSSL_alert_type_string_longSSL_cache_hitSSL_callback_ctrlSSL_certs_clearSSL_check_chainSSL_check_private_keySSL_clearSSL_connectSSL_copy_session_idSSL_ctrlSSL_do_handshakeSSL_dupSSL_dup_CA_listSSL_export_keying_materialSSL_extension_supportedSSL_freeSSL_get0_alpn_selectedSSL_get0_next_proto_negotiatedSSL_get0_paramSSL_get1_sessionSSL_get_SSL_CTXSSL_get_certificateSSL_get_cipher_listSSL_get_ciphersSSL_get_client_CA_listSSL_get_current_cipherSSL_get_current_compressionSSL_get_current_expansionSSL_get_default_timeoutSSL_get_errorSSL_get_ex_dataSSL_get_ex_data_X509_STORE_CTX_idxSSL_get_ex_new_indexSSL_get_fdSSL_get_finishedSSL_get_info_callbackSSL_get_peer_cert_chainSSL_get_peer_certificateSSL_get_peer_finishedSSL_get_privatekeySSL_get_psk_identitySSL_get_psk_identity_hintSSL_get_quiet_shutdownSSL_get_rbioSSL_get_read_aheadSSL_get_rfdSSL_get_selected_srtp_profileSSL_get_servernameSSL_get_servername_typeSSL_get_sessionSSL_get_shared_ciphersSSL_get_shared_sigalgsSSL_get_shutdownSSL_get_sigalgsSSL_get_srp_NSSL_get_srp_gSSL_get_srp_userinfoSSL_get_srp_usernameSSL_get_srtp_profilesSSL_get_ssl_methodSSL_get_verify_callbackSSL_get_verify_depthSSL_get_verify_modeSSL_get_verify_resultSSL_get_versionSSL_get_wbioSSL_get_wfdSSL_has_matching_session_idSSL_is_serverSSL_library_initSSL_load_client_CA_fileSSL_load_error_stringsSSL_newSSL_peekSSL_pendingSSL_readSSL_renegotiateSSL_renegotiate_abbreviatedSSL_renegotiate_pendingSSL_rstate_stringSSL_rstate_string_longSSL_select_next_protoSSL_set1_paramSSL_set_SSL_CTXSSL_set_accept_stateSSL_set_alpn_protosSSL_set_bioSSL_set_cert_cbSSL_set_cipher_listSSL_set_client_CA_listSSL_set_connect_stateSSL_set_debugSSL_set_ex_dataSSL_set_fdSSL_set_generate_session_idSSL_set_info_callbackSSL_set_msg_callbackSSL_set_psk_client_callbackSSL_set_psk_server_callbackSSL_set_purposeSSL_set_quiet_shutdownSSL_set_read_aheadSSL_set_rfdSSL_set_sessionSSL_set_session_id_contextSSL_set_session_secret_cbSSL_set_session_ticket_extSSL_set_session_ticket_ext_cbSSL_set_shutdownSSL_set_srp_server_paramSSL_set_srp_server_param_pwSSL_set_ssl_methodSSL_set_stateSSL_set_tlsext_use_srtpSSL_set_tmp_dh_callbackSSL_set_tmp_ecdh_callbackSSL_set_tmp_rsa_callbackSSL_set_trustSSL_set_verifySSL_set_verify_depthSSL_set_verify_resultSSL_set_wfdSSL_shutdownSSL_srp_server_param_with_usernameSSL_stateSSL_state_stringSSL_state_string_longSSL_use_PrivateKeySSL_use_PrivateKey_ASN1SSL_use_PrivateKey_fileSSL_use_RSAPrivateKeySSL_use_RSAPrivateKey_ASN1SSL_use_RSAPrivateKey_fileSSL_use_certificateSSL_use_certificate_ASN1SSL_use_certificate_fileSSL_use_psk_identity_hintSSL_versionSSL_wantSSL_writeSSLv23_client_methodSSLv23_methodSSLv23_server_methodSSLv2_client_methodSSLv2_methodSSLv2_server_methodSSLv3_client_methodSSLv3_methodSSLv3_server_methodTLSv1_1_client_methodTLSv1_1_methodTLSv1_1_server_methodTLSv1_2_client_methodTLSv1_2_methodTLSv1_2_server_methodTLSv1_client_methodTLSv1_methodTLSv1_server_methodd2i_SSL_SESSIONi2d_SSL_SESSIONssl3_ciphers`1>p=>0A@&@>@N@b@~@@@@@@@@ B4on{vx  8;F  +% x N !" o PNz.o l q j  O ^   R<b{  W}|k m ] M<vD/= bA<;z Z HINm_!03" c CBxyY9` / P1[Ugmr   LUR]Tx 4 R 0Nx?%  ~ B w5UCAJb:|zlurtvm 2 V G ?| ID ]onpL YUW {wy proq{:;68t'%#CXz VM9+0I>ES 0{J$%[k uv < >>>?$?B?T?b?j?x?????????>>>|>r>h>^>T>J>@>6>,>>>LIBEAY32.dll__iob_funcHfprintf_time64memmovestrncpymemcmpmemcpymemsetstrncmpstrchrO_errnoabortu_stricmp_strnicmpMSVCR120.dll__crt_debugger_hook__crtUnhandledException__crtTerminateProcess}__crtCaptureCurrentContext~__crtCapturePreviousContext]__CppXcptFilter_amsg_exitPfreel_malloc_crt_initterm_initterm_e\__C_specific_handler[_lock_unlock _calloc_crt__dllonexit_onexit{__clean_type_info_names_internalSetLastErrorGetSystemTimelSystemTimeToFileTimeVGetLastErrorjIsDebuggerPresentpIsProcessorFeaturePresent%EncodePointerDecodePointer0QueryPerformanceCounterGetCurrentProcessIdGetCurrentThreadIdGetSystemTimeAsFileTimeDisableThreadLibraryCallsKERNEL32.dll.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.cGOST signature length is %d.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_srvr.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.c.\ssl\s3_clnt.cECDH-RSA-AES256-SHA384ECDHE-ECDSA-AES128-GCM-SHA256ECDHE-ECDSA-AES256-GCM-SHA384ECDH-ECDSA-AES128-GCM-SHA256ECDH-ECDSA-AES256-GCM-SHA384ECDHE-RSA-AES128-GCM-SHA256ECDHE-RSA-AES256-GCM-SHA384ECDH-RSA-AES128-GCM-SHA256ECDH-RSA-AES256-GCM-SHA384CLNTSRVR.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.cRC4-MD5 0 0(gA0A0A0 A0p( A0p@A0pXA0ppA0pA0A0p/@00@0؄1@02@03@0 4@0050@60X70p8090:0; 0<@0Ѕ=0>@0?@0@@0(A08B0PC0hD0E0F0g@0Ȇh0i0j0k0(l@0@m0XDpD @ @0ȇ0000(0@A0PA0ph@00A0A0A0ȈA0A0A0@  @8@X @x@ @@؉ @@ @8@P @h@ 0@A0@A0p@@0Ȋ@0@ 0@A0@A0p0 @@0H @0`   0x  A0  A0p @0 0؋ 0A0A0p @080P 0`A0pA0p@00A0pЌA0pA0p@0(@0@@0X 0p!0"0#@@$@ %@@&@  '@8( P) @e*  (e+@@He,@ @he-@@e.@ @e/@e0 @e1 @f2  @RC4-SHAP@ $$f,fT.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.c.\ssl\s3_lib.cNULL-MD5NULL-SHAIDEA-CBC-SHADES-CBC3-SHADH-DSS-DES-CBC3-SHADH-RSA-DES-CBC3-SHAEDH-DSS-DES-CBC3-SHAEDH-RSA-DES-CBC3-SHAADH-RC4-MD5ADH-DES-CBC3-SHAAES128-SHADH-DSS-AES128-SHADH-RSA-AES128-SHADHE-DSS-AES128-SHADHE-RSA-AES128-SHAADH-AES128-SHAAES256-SHADH-DSS-AES256-SHADH-RSA-AES256-SHADHE-DSS-AES256-SHADHE-RSA-AES256-SHAADH-AES256-SHANULL-SHA256AES128-SHA256AES256-SHA256DH-DSS-AES128-SHA256DH-RSA-AES128-SHA256DHE-DSS-AES128-SHA256CAMELLIA128-SHADH-DSS-CAMELLIA128-SHADH-RSA-CAMELLIA128-SHADHE-DSS-CAMELLIA128-SHADHE-RSA-CAMELLIA128-SHAADH-CAMELLIA128-SHADHE-RSA-AES128-SHA256DH-DSS-AES256-SHA256DH-RSA-AES256-SHA256DHE-DSS-AES256-SHA256DHE-RSA-AES256-SHA256ADH-AES128-SHA256ADH-AES256-SHA256GOST94-GOST89-GOST89GOST2001-GOST89-GOST89GOST94-NULL-GOST94GOST2001-NULL-GOST94CAMELLIA256-SHADH-DSS-CAMELLIA256-SHADH-RSA-CAMELLIA256-SHADHE-DSS-CAMELLIA256-SHADHE-RSA-CAMELLIA256-SHAADH-CAMELLIA256-SHAPSK-RC4-SHAPSK-3DES-EDE-CBC-SHAPSK-AES128-CBC-SHAPSK-AES256-CBC-SHASEED-SHADH-DSS-SEED-SHADH-RSA-SEED-SHADHE-DSS-SEED-SHADHE-RSA-SEED-SHAADH-SEED-SHAAES128-GCM-SHA256AES256-GCM-SHA384DHE-RSA-AES128-GCM-SHA256DHE-RSA-AES256-GCM-SHA384DH-RSA-AES128-GCM-SHA256DH-RSA-AES256-GCM-SHA384DHE-DSS-AES128-GCM-SHA256DHE-DSS-AES256-GCM-SHA384DH-DSS-AES128-GCM-SHA256DH-DSS-AES256-GCM-SHA384ADH-AES128-GCM-SHA256ADH-AES256-GCM-SHA384ECDH-ECDSA-NULL-SHAECDH-ECDSA-RC4-SHAECDH-ECDSA-DES-CBC3-SHAECDH-ECDSA-AES128-SHAECDH-ECDSA-AES256-SHAECDHE-ECDSA-NULL-SHAECDHE-ECDSA-RC4-SHAECDHE-ECDSA-DES-CBC3-SHAECDHE-ECDSA-AES128-SHAECDHE-ECDSA-AES256-SHAECDH-RSA-NULL-SHAECDH-RSA-RC4-SHAECDH-RSA-DES-CBC3-SHAECDH-RSA-AES128-SHAECDH-RSA-AES256-SHAECDHE-RSA-NULL-SHAECDHE-RSA-RC4-SHAECDHE-RSA-DES-CBC3-SHAECDHE-RSA-AES128-SHAECDHE-RSA-AES256-SHAAECDH-NULL-SHAAECDH-RC4-SHAAECDH-DES-CBC3-SHAAECDH-AES128-SHAAECDH-AES256-SHASRP-3DES-EDE-CBC-SHASRP-RSA-3DES-EDE-CBC-SHASRP-DSS-3DES-EDE-CBC-SHASRP-AES-128-CBC-SHASRP-RSA-AES-128-CBC-SHASRP-DSS-AES-128-CBC-SHASRP-AES-256-CBC-SHASRP-RSA-AES-256-CBC-SHASRP-DSS-AES-256-CBC-SHAECDHE-ECDSA-AES128-SHA256ECDHE-ECDSA-AES256-SHA384ECDH-ECDSA-AES128-SHA256ECDH-ECDSA-AES256-SHA384ECDHE-RSA-AES128-SHA256ECDHE-RSA-AES256-SHA384ECDH-RSA-AES128-SHA256.\ssl\s3_enc.c.\ssl\s3_enc.c.\ssl\s3_enc.c.\ssl\s3_enc.c.\ssl\s3_enc.c.\ssl\s3_enc.c.\ssl\s3_enc.c.\ssl\s3_enc.c.\ssl\s3_enc.c.\ssl\s3_enc.c.\ssl\s3_enc.c.\ssl\s3_enc.c.\ssl\s3_enc.cPTXABBCCCm.\ssl\s3_enc.c666666666666666666666666666666666666666666666666\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\.\ssl\s3_enc.c.\ssl\s3_enc.c.\ssl\s3_enc.c.\ssl\s3_enc.c.\ssl\s3_enc.c.\ssl\s3_enc.c.\ssl\s3_enc.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.cmac_size <= EVP_MAX_MD_SIZE%d.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.cs->s3->wnum <= INT_MAX.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.cSSL alert number .\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_pkt.c.\ssl\s3_both.c.\ssl\s3_both.c.\ssl\s3_both.ci <= EVP_MAX_MD_SIZE.\ssl\s3_both.ci <= EVP_MAX_MD_SIZE.\ssl\s3_both.c.\ssl\s3_both.c.\ssl\s3_both.c.\ssl\s3_both.c.\ssl\s3_both.c.\ssl\s3_both.c.\ssl\s3_both.c.\ssl\s3_both.c.\ssl\s3_both.c.\ssl\s3_both.c.\ssl\s3_both.c.\ssl\s3_both.ci <= EVP_MAX_MD_SIZE.\ssl\s3_both.ci <= EVP_MAX_MD_SIZE.\ssl\s3_both.corig_len >= md_size0.\ssl\s3_cbc.cmd_size <= EVP_MAX_MD_SIZE.\ssl\s3_cbc.cdata_plus_mac_plus_padding_size < 1024 * 1024.\ssl\s3_cbc.c.\ssl\s3_cbc.cmd_length_size <= MAX_HASH_BIT_COUNT_BYTES.\ssl\s3_cbc.cmd_block_size <= MAX_HASH_BLOCK_SIZE.\ssl\s3_cbc.cmd_size <= EVP_MAX_MD_SIZE.\ssl\s3_cbc.cmac_secret_length <= sizeof(hmac_pad).\ssl\s3_cbc.c.\ssl\s23_srvr.c.\ssl\s23_srvr.cGET POST HEAD PUT .\ssl\s23_srvr.cCONNECT.\ssl\s23_srvr.cs->version <= TLS_MAX_VERSION.\ssl\s23_srvr.c.\ssl\s23_srvr.c.\ssl\s23_srvr.c.\ssl\s23_srvr.c.\ssl\s23_srvr.c.\ssl\s23_srvr.c.\ssl\s23_srvr.c.\ssl\s23_srvr.c.\ssl\s23_clnt.c.\ssl\s23_clnt.c.\ssl\s23_clnt.c.\ssl\s23_clnt.c.\ssl\s23_clnt.c.\ssl\s23_clnt.c.\ssl\s23_clnt.c.\ssl\s23_clnt.c.\ssl\s23_clnt.c.\ssl\s23_clnt.c.\ssl\s23_clnt.cs->version <= TLS_MAX_VERSION.\ssl\s23_clnt.c.\ssl\s23_clnt.c.\ssl\s23_clnt.c.\ssl\s23_lib.c.\ssl\s23_lib.c.\ssl\s23_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c   ``p t   ` RSA   ` .\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c@.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.cpayload + padding <= 16381DSA.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.cECDSA.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.cclient finishedserver finishedclient finishedserver finishedclient finishedserver finished.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.c.\ssl\t1_lib.cchunk >= 0.\ssl\t1_enc.c.\ssl\t1_enc.c.\ssl\t1_enc.ckey expansion.\ssl\t1_enc.c.\ssl\t1_enc.c.\ssl\t1_enc.c.\ssl\t1_enc.cclient write keyn >= 0server write keyn >= 0.\ssl\t1_enc.c.\ssl\t1_enc.cIV blockt >= 0.\ssl\t1_enc.c.\ssl\t1_enc.c.\ssl\t1_enc.c.\ssl\t1_enc.c.\ssl\t1_enc.c.\ssl\t1_enc.c.\ssl\t1_enc.c.\ssl\t1_enc.c.\ssl\t1_enc.c.\ssl\t1_enc.c.\ssl\t1_enc.c%s:%d: rec->data != rec->input .\ssl\t1_enc.c.\ssl\t1_enc.c.\ssl\t1_enc.cmaster secret.\ssl\t1_enc.c.\ssl\t1_enc.cclient finishedserver finishedmaster secretkey expansion.\ssl\t1_enc.c.\ssl\t1_enc.c!(meth->ext_flags & SSL_EXT_FLAG_SENT).\ssl\t1_ext.c.\ssl\t1_ext.c.\ssl\d1_srvr.c.\ssl\d1_srvr.c.\ssl\d1_srvr.c.\ssl\d1_srvr.c.\ssl\d1_srvr.c.\ssl\d1_srvr.c.\ssl\d1_clnt.c.\ssl\d1_clnt.c.\ssl\d1_lib.c   `أ  P   `  Pclient finishedserver finishedclient finishedserver finished.\ssl\d1_lib.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.cmac_size <= EVP_MAX_MD_SIZE%d.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.cSSL alert number 0.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.clen <= SSL3_RT_MAX_PLAIN_LENGTH.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_pkt.c.\ssl\d1_both.c.\ssl\d1_both.cs->d1->mtu >= dtls1_min_mtu(s).\ssl\d1_both.cs->init_num == (int)s->d1->w_msg_hdr.msg_len + DTLS1_HM_HEADER_LENGTH.\ssl\d1_both.clen == (unsigned int)ret.\ssl\d1_both.c.\ssl\d1_both.c.\ssl\d1_both.c.\ssl\d1_both.c.\ssl\d1_both.c.\ssl\d1_both.c.\ssl\d1_both.c((long)msg_hdr->msg_len) > 0.\ssl\d1_both.citem != NULL.\ssl\d1_both.citem != NULL.\ssl\d1_both.c.\ssl\d1_both.c.\ssl\d1_both.c.\ssl\d1_both.c.\ssl\d1_both.c.\ssl\d1_both.cinvalid state reached %s:%ddtls1_retransmit_message() failed s->init_off == 0.\ssl\d1_both.cretransmit: message %d non-existant s->d1->w_msg_hdr.msg_len + ((s->version==DTLS1_BAD_VER)?3:DTLS1_CCS_HEADER_LENGTH) == (unsigned int)s->init_num.\ssl\d1_both.cs->d1->w_msg_hdr.msg_len + DTLS1_HM_HEADER_LENGTH == (unsigned int)s->init_num.\ssl\d1_both.c.\ssl\d1_both.c.\ssl\d1_both.c.\ssl\d1_both.c.\ssl\d1_both.cpayload + padding <= 16381.\ssl\d1_both.c.\ssl\d1_both.c?.\ssl\d1_both.c.\ssl\d1_srtp.c.\ssl\d1_srtp.c.\ssl\d1_srtp.c.\ssl\d1_srtp.c.\ssl\d1_srtp.c.\ssl\d1_srtp.c.\ssl\d1_srtp.c 8SRTP_AES128_CM_SHA1_80SRTP_AES128_CM_SHA1_32.\ssl\d1_srtp.c.\ssl\d1_srtp.c.\ssl\d1_srtp.c.\ssl\d1_srtp.c.\ssl\d1_srtp.c.\ssl\d1_srtp.c.\ssl\d1_srtp.c.\ssl\d1_srtp.c.\ssl\d1_srtp.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.cTLSv1.2TLSv1.1TLSv1SSLv3SSLv2DTLSv0.9DTLSv1DTLSv1.2SSLv2unknown.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.cssl->sid_ctx_length <= sizeof(ssl->sid_ctx).\ssl\ssl_lib.c.\ssl\ssl_lib.cTTTTTTTTTV.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.cOpenSSL 1.0.2k 26 Jan 2017.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.cALL:!EXPORT:!LOW:!aNULL:!eNULL:!SSLv2.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.cs->sid_ctx_length <= sizeof s->sid_ctx.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.cSSLv2.\ssl\ssl_lib.cALL:!EXPORT:!LOW:!aNULL:!eNULL:!SSLv2.\ssl\ssl_lib.cssl2-md5.\ssl\ssl_lib.c.\ssl\ssl_lib.cssl3-md5.\ssl\ssl_lib.c.\ssl\ssl_lib.cssl3-sha1.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_lib.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c%s/%s').\ssl\ssl_cert.c.\ssl\ssl_cert.cOPENSSL_DIR_read(&ctx, '.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.cVerify error:.\ssl\ssl_cert.c.\ssl\ssl_cert.cSSL for verify callback.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.cSSL for verify callback.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_cert.cssl_clientssl_server.\ssl\ssl_cert.c.\ssl\ssl_cert.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.c.\ssl\ssl_sess.cSSL SESSION PARAMETERSSSL SESSION PARAMETERSSSL SESSION PARAMETERSSSL SESSION PARAMETERS(NONE)WWWWW @ALLkDHCOMPLEMENTOFALLCOMPLEMENTOFDEFAULTkRSAkDHrkDHdkEDHkDHEDHkKRB5kECDHrkECDHekECDHkEECDHkECDHEECDHkPSKkSRPkGOSTaRSAaDSSDSSaKRB5aNULLaDHaECDHaECDSAECDSAaPSKaGOST94aGOST01aGOSTaSRPEDHDHEEECDHECDHENULLKRB5RSAADHAECDHPSKSRPDES3DESRC4RC2IDEASEEDeNULLAES128AES.\ssl\ssl_ciph.cAES256AESGCMMD5.\ssl\ssl_ciph.cSHACAMELLIA128EXPCAMELLIA256LOWCAMELLIAGOST94RC4.\ssl\ssl_ciph.cSHA1SHA256MD5GOST89MACSHA384RSA.\ssl\ssl_ciph.cSSLv2SSLv3TLSv1EXPORTDHTLSv1.2EXPORT40MEDIUMPSKEXPORT56SHA256SRP.\ssl\ssl_ciph.cHIGHFIPSSHA384RSAEXP-DHE-DSS-DES-CBC-SHADHE-DSS-DES-CBC-SHADSSDHE-DSS-DES-CBC3-SHAEXP-DHE-RSA-DES-CBC-SHADHE-RSA-DES-CBC-SHADHDHE-RSA-DES-CBC3-SHADES-CBCDES-EDE3-CBCRC2-CBCIDEA-CBCgost94PSKAES-128-CBCSRPAES-256-CBCMD5CAMELLIA-128-CBCSSLv2DH/RSACAMELLIA-256-CBCgost89-cntSEED-CBCid-aes128-GCMid-aes256-GCMssl_mac_secret_size[SSL_MD_MD5_IDX] >= 0.\ssl\ssl_ciph.cSHA1ssl_mac_secret_size[SSL_MD_SHA1_IDX] >= 0.\ssl\ssl_ciph.cmd_gost94ssl_mac_secret_size[SSL_MD_GOST94_IDX] >= 0.\ssl\ssl_ciph.cgost-macgost-mac.\ssl\ssl_ciph.c.\ssl\ssl_ciph.c.\ssl\ssl_ciph.c.\ssl\ssl_ciph.c.\ssl\ssl_ciph.c.\ssl\ssl_ciph.cRC4-HMAC-MD5AES-128-CBC-HMAC-SHA1AES-256-CBC-HMAC-SHA1AES-128-CBC-HMAC-SHA256AES-256-CBC-HMAC-SHA256gost2001.\ssl\ssl_ciph.c.\ssl\ssl_ciph.c.\ssl\ssl_ciph.cSTRENGTH.\ssl\ssl_ciph.cSUITEB128ONLYSUITEB128C2SUITEB128SUITEB192.\ssl\ssl_ciph.c.\ssl\ssl_ciph.cECDHE-ECDSA-AES256-GCM-SHA384ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384ECDHE-ECDSA-AES128-GCM-SHA256ECDHE-ECDSA-AES256-GCM-SHA384.\ssl\ssl_ciph.c.\ssl\ssl_ciph.c.\ssl\ssl_ciph.c.\ssl\ssl_ciph.cDEFAULTALL:!EXPORT:!LOW:!aNULL:!eNULL:!SSLv2%-23s %s Kx=%-8s Au=%-4s Enc=%-9s Mac=%-4s%s exportSSLv3TLSv1.2unknownRSA(512)RSA(1024)DH/DSSKRB5DH(512)DH(1024)ECDH/RSAECDH/ECDSAECDHGOSTunknownKRB5ECDHNoneECDSAGOST94GOST01unknownDES(40)DES(56)3DES(168)RC4(40)RC4(56)RC4(64)RC4(128)RC2(40)RC2(56)RC2(128)IDEA(128)NoneAES(128)AES(256)AESGCM(128)AESGCM(256)Camellia(128)Camellia(256)SEED(128)GOST89(256)unknownSHA1SHA256SHA384AEADGOST89GOST94unknown.\ssl\ssl_ciph.cOPENSSL_malloc ErrorBuffer too small(NONE)TLSv1/SSLv3SSLv2unknownDTLS1 write hello verify request Bunknown stateread headerWread bodyPINIT Fread doneAINIT UunknownCINIT SSLOK SSLERR3FLUSH3WCH_A3WCH_B3RSH_A3RSH_B3RSC_A3RSC_B3RSKEA3RSKEB3RCR_A3RCR_B3RSD_A3RSD_B3WCC_A3WCC_B3WCC_C3WCC_D3WCKEA3WCKEB3WCV_A3WCV_B3WCCSA3WCCSB3WFINA3WFINB3RCCSA3RCCSB3RFINA3RFINB3WHR_A3WHR_B3WHR_C3RCH_A3RCH_B3RCH_C3WSH_A3WSH_B3WSC_A3WSC_B3WSKEA3WSKEB3WCR_A3WCR_B3WSD_A3WSD_B3RCC_A3RCC_B3RCKEA3RCKEB3RCV_A3RCV_B23WCHA23WCHB23RSHA23RSHA23RCHA23RCHBDRCHVADRCHVBDWCHVADWCHVBUNKWN warningfatalunknownCNUMBMDFHFNCBCUCCRCECUIPDCROCAADDECYERPVISIEUSNRUECOUNBRBHUPUKRHclose notifyunexpected_messageRBbad record macdecompression failurehandshake failureRDno certificatebad certificateunsupported certificatecertificate revokedcertificate expiredcertificate unknownillegal parameterdecryption failedrecord overflowunknown CAaccess denieddecode errordecrypt errorexport restrictionprotocol versionerrorinsufficient securityinternal erroruser canceledno renegotiationunsupported extensioncertificate unobtainableunrecognized namebad certificate status responsebad certificate hash valueunknown PSK identityunknownunknownbefore SSL initializationbefore accept initializationbefore connect initializationSSL negotiation finished successfullySSL renegotiate ciphersbefore/connect initializationok/connect SSL initializationbefore/accept initializationok/accept SSL initializationSSLv3 write client hello ASSLv3 write client hello BSSLv3 read server hello ASSLv3 read server hello BSSLv3 read server certificate ASSLv3 read server certificate BSSLv3 read server key exchange ASSLv3 read server key exchange BSSLv3 read server certificate request ASSLv3 read server certificate request BSSLv3 read server session ticket ASSLv3 read server session ticket BSSLv3 read server done ASSLv3 read server done BSSLv3 write client certificate ASSLv3 write client certificate BSSLv3 write client certificate CSSLv3 write client certificate DSSLv3 write client key exchange ASSLv3 write client key exchange BSSLv3 write certificate verify ASSLv3 write certificate verify BSSLv3 write change cipher spec ASSLv3 write change cipher spec BSSLv3 write finished ASSLv3 write finished BSSLv3 read change cipher spec ASSLv3 read change cipher spec BSSLv3 read finished ASSLv3 read finished BSSLv3 flush dataSSLv3 read client hello ASSLv3 read client hello BSSLv3 read client hello CSSLv3 write hello request ASSLv3 write hello request BSSLv3 write hello request CSSLv3 write server hello ASSLv3 write server hello BSSLv3 write certificate ASSLv3 write certificate BSSLv3 write key exchange ASSLv3 write key exchange BSSLv3 write certificate request ASSLv3 write certificate request BSSLv3 write session ticket ASSLv3 write session ticket BSSLv3 write server done ASSLv3 write server done BSSLv3 read client certificate ASSLv3 read client certificate BSSLv3 read client key exchange ASSLv3 read client key exchange BSSLv3 read certificate verify ASSLv3 read certificate verify BSSLv2/v3 write client hello ASSLv2/v3 write client hello BSSLv2/v3 read server hello ASSLv2/v3 read server hello BSSLv2/v3 read client hello ASSLv2/v3 read client hello BDTLS1 read hello verify request ADTLS1 read hello verify request BDTLS1 write hello verify request A.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.cSERVERINFO FOR .\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.c.\ssl\ssl_rsa.cos.length <= (int)sizeof(ret->session_id).\ssl\ssl_asn1.c.\ssl\ssl_asn1.c.\ssl\ssl_txt.cSSL-Session: SSLv2SSLv3TLSv1.2TLSv1.1TLSv1DTLSv1DTLSv1.2%sDTLSv1-bad%sunknown Protocol : %s %s Cipher : %06lX Cipher : %04lX unknown Cipher : %s Session-ID: %02X Session-ID-ctx: %02X Master-Key: %02X Key-Arg : None%02X PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: %ld (seconds) TLS session ticket: Compression: %d Compression: %d (%s) Start Time: %ld Timeout : %ld (sec) Verify return code: %ld (%s) MD5MD5ssl2-md5ssl3-md5SHA1ssl3-sha1RSA-SHA1RSA-SHA1-2DSA-SHA1DSA-SHA1-oldDSA-SHA1DSS1DSA-SHA1dss1no_ssl2no_ssl3no_tls1no_tls1_1no_tls1_2bugsstrictALLno_compecdh_singlekeyno_ticketCurvesserverpreflegacy_renegotiationlegacy_server_connectno_resumption_on_renegno_legacy_server_connectautomaticautoSSLv2SSLv3TLSv1TLSv1.1TLSv1.2SessionTicketEmptyFragmentsBugsCompressionServerPreferenceNoResumptionOnRenegotiationDHSingleECDHSingleUnsafeLegacyRenegotiationSignatureAlgorithmssigalgsClientSignatureAlgorithmsclient_sigalgscurvesECDHParametersnamed_curveCipherStringcipherProtocolOptionsCertificatecertPrivateKeyServerInfoFileDHParametersdhparam.\ssl\ssl_conf.c.\ssl\ssl_conf.c, value=cmd=.\ssl\ssl_conf.ccmd=.\ssl\ssl_conf.c.\ssl\bio_ssl.c.\ssl\bio_ssl.c.\ssl\bio_ssl.c.\ssl\bio_ssl.c.\ssl\bio_ssl.c0cdf@f kk lsslonly tls allowed in fips modeopaque PRF input too longpacket length too longparse tlsextpath too longpeer did not return a certificatepeer errorpeer error certificatepeer error no certificatepeer error no cipherpeer error unsupported certificate typepem name bad prefixpem name too shortpre mac length too longproblems mapping cipher functionsprotocol is shutdownpsk identity not foundpsk no client cbpsk no server cbpublic key encrypt errorpublic key is not rsapublic key not rsaread bio not setread timeout expiredread wrong packet typerecord length mismatchrecord too largerecord too smallrenegotiate ext too longrenegotiation encoding errrenegotiation mismatchrequired cipher missingrequired compresssion algorithm missingreuse cert length not zeroreuse cert type not zeroreuse cipher list not zeroscsv received when renegotiatingserverhello tlsextsession id context uninitializedshort readshutdown while in initsignature algorithms errorsignature for non signing certificateerror with the srp paramssrtp could not allocate profilessrtp protection profile list too longsrtp unknown protection profilessl23 doing session id reusessl2 connection id too longssl3 ext invalid ecpointformatssl3 ext invalid servernamessl3 ext invalid servername typessl3 session id too longssl3 session id too shortsslv3 alert bad certificatesslv3 alert bad record macsslv3 alert certificate expiredsslv3 alert certificate revokedsslv3 alert certificate unknownsslv3 alert decompression failuresslv3 alert handshake failuresslv3 alert illegal parametersslv3 alert no certificatesslv3 alert unexpected messagesslv3 alert unsupported certificatessl ctx has no default ssl versionssl handshake failuressl library has no ciphersssl session id callback failedssl session id conflictssl session id context too longssl session id has bad lengthssl session id is differenttlsv1 alert access deniedtlsv1 alert decode errortlsv1 alert decryption failedtlsv1 alert decrypt errortlsv1 alert export restrictiontlsv1 alert inappropriate fallbacktlsv1 alert insufficient securitytlsv1 alert internal errortlsv1 alert no renegotiationtlsv1 alert protocol versiontlsv1 alert record overflowtlsv1 alert unknown catlsv1 alert user cancelledtlsv1 bad certificate hash valuetlsv1 bad certificate status responsetlsv1 certificate unobtainabletlsv1 unrecognized nametlsv1 unsupported extensiontls client cert req with anon cipherpeer does not accept heartbeatsheartbeat request already pendingtls illegal exporter labeltls invalid ecpointformat listtoo many warn alertstls peer did not respond with certificate listtls rsa encrypted value length is wrongtried to use unsupported cipherunable to decode dh certsunable to decode ecdh certsunable to extract public keyunable to find dh parametersunable to find ecdh parametersunable to find public key parametersunable to find ssl methodunable to load ssl2 md5 routinesunable to load ssl3 md5 routinesunable to load ssl3 sha1 routinesunexpected messageunexpected recorduninitializedunknown alert typeunknown certificate typeunknown cipher returnedunknown cipher typeunknown cmd nameunknown digestunknown key exchange typeunknown pkey typeunknown protocolunknown remote error typeunknown ssl versionunknown stateunsafe legacy renegotiation disabledunsupported cipherunsupported compression algorithmunsupported digest typeunsupported elliptic curveunsupported protocolunsupported ssl versionunsupported status typeuse srtp not negotiatedwrite bio not setwrong certificate typewrong cipher returnedwrong curvewrong message typewrong number of key bitswrong signature lengthwrong signature sizewrong signature typewrong ssl versionwrong version numberx509 libx509 verification setup problemsCHECK_SUITEB_CIPHER_LISTCLIENT_CERTIFICATECLIENT_FINISHEDCLIENT_HELLOCLIENT_MASTER_KEYd2i_SSL_SESSIONdo_dtls1_writeDO_SSL3_WRITEdtls1_acceptDTLS1_ADD_CERT_TO_BUFDTLS1_BUFFER_RECORDdtls1_check_timeout_numdtls1_client_hellodtls1_connectDTLS1_GET_HELLO_VERIFYdtls1_get_messageDTLS1_GET_MESSAGE_FRAGMENTdtls1_get_recorddtls1_handle_timeoutdtls1_heartbeatdtls1_output_cert_chainDTLS1_PREPROCESS_FRAGMENTDTLS1_PROCESS_BUFFERED_RECORDSDTLS1_PROCESS_OUT_OF_SEQ_MESSAGEDTLS1_PROCESS_RECORDdtls1_read_bytesdtls1_read_faileddtls1_send_certificate_requestdtls1_send_client_certificatedtls1_send_client_key_exchangedtls1_send_client_verifyDTLS1_SEND_HELLO_VERIFY_REQUESTdtls1_send_server_certificatedtls1_send_server_hellodtls1_send_server_key_exchangedtls1_write_app_data_bytesGET_CLIENT_FINISHEDGET_CLIENT_HELLOGET_CLIENT_MASTER_KEYGET_SERVER_FINISHEDGET_SERVER_HELLOGET_SERVER_STATIC_DH_KEYGET_SERVER_VERIFYi2d_SSL_SESSIONREAD_NREQUEST_CERTIFICATESERVER_FINISHSERVER_HELLOSERVER_VERIFYssl23_acceptSSL23_CLIENT_HELLOssl23_connectSSL23_GET_CLIENT_HELLOSSL23_GET_SERVER_HELLOssl23_peekssl23_readssl23_writessl2_acceptssl2_connectssl2_enc_initssl2_generate_key_materialssl2_peekssl2_readSSL2_READ_INTERNALssl2_set_certificatessl2_writessl3_acceptSSL3_ADD_CERT_TO_BUFssl3_callback_ctrlssl3_change_cipher_statessl3_check_cert_and_algorithmssl3_check_client_helloSSL3_CHECK_FINISHEDssl3_client_hellossl3_connectssl3_ctrlssl3_ctx_ctrlssl3_digest_cached_recordsssl3_do_change_cipher_specssl3_encSSL3_GENERATE_KEY_BLOCKssl3_generate_master_secretssl3_get_certificate_requestssl3_get_cert_statusssl3_get_cert_verifyssl3_get_client_certificatessl3_get_client_hellossl3_get_client_key_exchangessl3_get_finishedssl3_get_key_exchangessl3_get_messagessl3_get_new_session_ticketssl3_get_next_protoSSL3_GET_RECORDssl3_get_server_certificatessl3_get_server_donessl3_get_server_hellossl3_handshake_macSSL3_NEW_SESSION_TICKETssl3_output_cert_chainssl3_peekssl3_read_bytesssl3_read_nssl3_send_certificate_requestssl3_send_client_certificatessl3_send_client_key_exchangessl3_send_client_verifyssl3_send_server_certificatessl3_send_server_hellossl3_send_server_key_exchangessl3_setup_key_blockssl3_setup_read_bufferssl3_setup_write_bufferssl3_write_bytesssl3_write_pendingssl_add_cert_chainSSL_ADD_CERT_TO_BUFssl_add_clienthello_renegotiate_extssl_add_clienthello_tlsextssl_add_clienthello_use_srtp_extSSL_add_dir_cert_subjects_to_stackSSL_add_file_cert_subjects_to_stackssl_add_serverhello_renegotiate_extssl_add_serverhello_tlsextssl_add_serverhello_use_srtp_extssl_bad_methodssl_build_cert_chainssl_bytes_to_cipher_listssl_cert_dupssl_cert_instSSL_CERT_INSTANTIATEssl_cert_newSSL_check_private_keySSL_CHECK_SERVERHELLO_TLSEXTssl_check_srvr_ecc_cert_and_algSSL_CIPHER_PROCESS_RULESTRSSL_CIPHER_STRENGTH_SORTSSL_clearSSL_COMP_add_compression_methodSSL_CONF_cmdssl_create_cipher_listSSL_ctrlSSL_CTX_check_private_keySSL_CTX_MAKE_PROFILESSSL_CTX_newSSL_CTX_set_cipher_listSSL_CTX_set_client_cert_engineSSL_CTX_set_purposeSSL_CTX_set_session_id_contextSSL_CTX_set_ssl_versionSSL_CTX_set_trustSSL_CTX_use_certificateSSL_CTX_use_certificate_ASN1SSL_CTX_use_certificate_chain_fileSSL_CTX_use_certificate_fileSSL_CTX_use_PrivateKeySSL_CTX_use_PrivateKey_ASN1SSL_CTX_use_PrivateKey_fileSSL_CTX_use_psk_identity_hintSSL_CTX_use_RSAPrivateKeySSL_CTX_use_RSAPrivateKey_ASN1SSL_CTX_use_RSAPrivateKey_fileSSL_CTX_use_serverinfoSSL_CTX_use_serverinfo_fileSSL_do_handshakessl_get_new_sessionssl_get_prev_sessionSSL_GET_SERVER_CERT_INDEXSSL_GET_SERVER_SEND_CERTssl_get_server_send_pkeyssl_get_sign_pkeyssl_init_wbio_bufferSSL_load_client_CA_fileSSL_newssl_parse_clienthello_renegotiate_extssl_parse_clienthello_tlsextssl_parse_clienthello_use_srtp_extssl_parse_serverhello_renegotiate_extssl_parse_serverhello_tlsextssl_parse_serverhello_use_srtp_extSSL_peekssl_prepare_clienthello_tlsextssl_prepare_serverhello_tlsextSSL_readSSL_RSA_PRIVATE_DECRYPTSSL_RSA_PUBLIC_ENCRYPTSSL_SCAN_CLIENTHELLO_TLSEXTSSL_SCAN_SERVERHELLO_TLSEXTssl_session_dupSSL_SESSION_newSSL_SESSION_print_fpapp data in handshakeSSL_SESSION_set1_id_contextattempt to reuse session in different contextssl_sess_cert_newbad alert recordSSL_SET_CERTbad authentication typeSSL_set_cipher_listbad change cipher specSSL_set_fdbad checksumSSL_SET_PKEYbad dataSSL_set_purposebad data returned by callbackSSL_set_rfdbad decompressionSSL_set_sessionbad dh g lengthSSL_set_session_id_contextbad dh g valueSSL_set_session_ticket_extbad dh pub key lengthSSL_set_trustbad dh pub key valueSSL_set_wfdbad dh p lengthSSL_shutdownbad dh p valueSSL_SRP_CTX_initbad digest lengthssl_undefined_const_functionbad dsa signaturessl_undefined_functionbad ecc certssl_undefined_void_functionbad ecdsa signatureSSL_use_certificatebad ecpointSSL_use_certificate_ASN1bad handshake lengthSSL_use_certificate_filebad hello requestSSL_use_PrivateKeybad lengthSSL_use_PrivateKey_ASN1bad mac decodeSSL_use_PrivateKey_filebad mac lengthSSL_use_psk_identity_hintbad message typeSSL_use_RSAPrivateKeybad packet lengthSSL_use_RSAPrivateKey_ASN1bad protocol version numberSSL_use_RSAPrivateKey_filebad psk identity hint lengthssl_verify_cert_chainbad response argumentSSL_writebad rsa decrypttls12_check_peer_sigalgbad rsa encrypttls1_cert_verify_macbad rsa e lengthtls1_change_cipher_statebad rsa modulus lengthTLS1_CHECK_SERVERHELLO_TLSEXTbad rsa signaturetls1_encbad signaturetls1_export_keying_materialbad srp a lengthTLS1_GET_CURVELISTbad srp b lengthtls1_heartbeatbad srp g lengthTLS1_PREPARE_CLIENTHELLO_TLSEXTbad srp n lengthTLS1_PREPARE_SERVERHELLO_TLSEXTbad srp parameterstls1_prfbad srp s lengthtls1_setup_key_blockbad srtp mki valuetls1_set_server_sigalgsbad srtp protection profile listWRITE_PENDINGdPefgh8jXklwm 8 n`  o p 0 1@ 2p L i  q0 MX r s t <0 uh v w x y zP {x [ \ ]^8sp_`a|#}#~###$$4$@$X$h$$y$$$$% %8%P%Wp%%3%%%&4 &0&P&h&&t&&&N&5'=0'>P'Bp'C'v'6'b(((H(h((((c(d()0)@)|P)uh)T)))U))**e0*HH*E`****** *!+"0+#H+$`+%+&+'+++,:(:;;(;@;~`;}x;;;;;<f0<P<7h<<<<Z<<= =8=P=h======K=> >J@>>>>>>>S?D ?P?xh?g?????X@0@{X@)G @Xhx(@Xp0H8`x*OPQ0VHpY8Hh`ijkl8+XAx?@, @`(Hh-.(/Hh$>(/P8xL.BZ0YXWXVmn oHh98Xx:(Px p8HhR FH;`Iqz(8Pp r    bad ssl filetypebad ssl session id lengthbad statebad valuebad write retrybio not setblock cipher pad is wrongbn libca dn length mismatchca dn too longccs received earlycertificate verify failedcert cb errorcert length mismatchchallenge is differentcipher code wrong lengthcipher or hash unavailablecipher table src errorclienthello tlsextcompressed length too longcompression disabledcompression failurecompression id not within private rangecompression library errorconnection id is differentconnection type not setcookie mismatchdata between ccs and finisheddata length too longdecryption faileddecryption failed or bad record macdh key too smalldh public value length is wrongdigest check faileddtls message too bigduplicate compression idecc cert not for key agreementecc cert not for signingecc cert should have rsa signatureecc cert should have sha1 signatureecdh required for suiteb modeecgroup too large for cipherempty srtp protection profile listencrypted length too longerror generating tmp rsa keyerror in received cipher listexcessive message sizeextra data in messagegot a fin before a ccsgot next proto before a ccsgot next proto without seeing extensionhttps proxy requesthttp requestillegal paddingillegal Suite B digestinappropriate fallbackinconsistent compressioninvalid challenge lengthinvalid commandinvalid compression algorithminvalid null cmd nameinvalid purposeinvalid serverinfo datainvalid srp usernameinvalid status responseinvalid ticket keys lengthinvalid trustkey arg too longkrb5krb5 client cc principal (no tkt?)krb5 client get credkrb5 client initkrb5 client mk_req (expired tkt?)krb5 server bad ticketkrb5 server initkrb5 server rd_req (keytab perms?)krb5 server tkt expiredkrb5 server tkt not yet validkrb5 server tkt skewlength mismatchlength too shortlibrary bug @@p XPh`xpP`pp0@Xp(P h0@P`p8Xp@(H`px 0@P`p(8HXhx0H h00@P PP@ `@P@hp0H`x    (0 @X@ hP x` p       8 X p0  P(0Hp p `@ 0@ X x `  0 p`p8@ XP h`  P    @ X xP     ( @ `  0 @ 8P P h ` p    (0X`xp @ ` p   0   (0H x0  `@( @ P p  0 P  @ ` X p         @ h        P        0  h     0@P0 @  library has no ciphersmessage too longmissing dh dsa certmissing dh keymissing dh rsa certmissing dsa signing certmissing ecdh certmissing ecdsa signing certmissing export tmp dh keymissing export tmp rsa keymissing rsa certificatemissing rsa encrypting certmissing rsa signing certcan't find SRP server parammissing tmp dh keymissing tmp ecdh keymissing tmp rsa keymissing tmp rsa pkeymissing verify messagemultiple sgc restartsnon sslv2 initial packetno certificates returnedno certificate assignedno certificate returnedno certificate setno certificate specifiedno ciphers availableno ciphers passedno ciphers specifiedno cipher listno cipher matchno client cert methodno client cert receivedno compression specifiedPeer haven't sent GOST certificate, required for selected ciphersuiteno method specifiedno pem extensionsno privatekeyno private key assignedno protocols availableno publickeyno renegotiationdigest requred for handshake isn't computedno shared cipherno shared sigature algorithmsno srtp profilesno verify callbacknull ssl ctxnull ssl method passedold session cipher not returnedold session compression algorithm not returnedonly DTLS 1.2 allowed in Suite B modeonly TLS 1.2 allowed in Suite B mode.\ssl\t1_reneg.c.\ssl\t1_reneg.c.\ssl\t1_reneg.c.\ssl\t1_reneg.c.\ssl\t1_reneg.c.\ssl\t1_reneg.c!expected_len || s->s3->previous_client_finished_len.\ssl\t1_reneg.c!expected_len || s->s3->previous_server_finished_len.\ssl\t1_reneg.c.\ssl\t1_reneg.c.\ssl\t1_reneg.c.\ssl\t1_reneg.c.\ssl\t1_reneg.c.\ssl\t1_reneg.c.\ssl\tls_srp.c.\ssl\tls_srp.c.\ssl\tls_srp.c.\ssl\tls_srp.c2-+] fu`*h*|"@""N#P##P#'`''|'44t5t5MEMEtEEeFeFFFG0G$GL0G!HD0H8K8@KKKfP@pP!Q0QQQ|R|RRRSSb`p`Rj\jkk\k\kpp%p%p5p@p`qL`qlrprvxvvvZx`Zxdxtdxjxpxxx}}}}~ ~>8>bPb`:(:e0ekPpxPPlpӢӢܢ44  ȥХkk}<ٹ00XX)0u`h9DPj00<@ - , L`2\@CP;;11ee dQ`p-0!P 1(16<6Ph^|`8@(nHn`?? 0 Htt::~Xx}fpLP[p[ e p 4!@!!!!"7"0@"""####$$ %%%&&&f'@(0*$0*q,hq,Q0Q022U3U3v3v3[4`4404%5H057P`990999;;;;<0 <@@A8A9CL@CPC\PCEhEEEEEF00FLLLLOOOOqPDPPPP0PP0QQRRRSSSSTT,T(0TT V?V\V_W`WWhWD@e%0x\\X`.0fpAP||$$>>q(0թ]`55JP ,5@5JXJ>h@x0ݴDݴXŵ8ŵ D %X%xXxKlKs EEi(iwHwXԽH`$"0"H\YY >>cc++IPx  `3@dpMDPs0@r\@N(P0(<h hDpDHDPu D0PX`NP0 D C C   q (  D  D B hP    TDhx&&&&&&L'P'''{((A)P)))*(**0**D*++-.//22)5005|8 99x99L9c:`c:}:t}:::#;0;< <y==>>&>&>f?p?ApACDCCDCFLGJ JJJjK(jK}K<K_LDLL0M#M0pMM0MNNO\OOOPP(Q0QQQQQJRJRRRRRRRSSSSS S T4 TTLTT`TTpTTTU\ UIU\PUU0UV\VY0YZ\[-[00[c[\[[0[[0[ ^\ ^,^l,^```0`Ma`a}a0aaDaNb\pbb0bb0bcDpcc0cc\dd\dd0dd0de0 e=e0Peme0pe3f@fnfff0ff0fg\gggHhHhZiZitiiiijjm0mmmpppqes\t.t.t~t~tt u / 1485441939 0 18591 ` 2nnJJ..xxZZ@@xxddRRFF&&||zzhh^^@@$$ ZZBB(( ~~\\<<""nn^^DD44&&zzhhTT:: ~~rrbbZZPPRRBBúú00ĮĮ22ŰŰ..ƠƠǔǔȊȊvvllffRRHH22΢΢όόЀЀttff``VVDDղղ&&֠֠אאrrVV88ڲڲ((ۚۚ~~TTDD::߲߲&& zzVV22ttHH.. ~~ffBB&&||nnPP>>ppZZ<<((llXX<<$$llJJ00nnFF**zzTT$$rrXX@@hhHH00   r r   ` `   L L   4 4        hhXXBB22rrTT22zzbbDD**vvbbDDbb > >  !"!"!!!!"r"r""#R#R##$2$2$$%%%%%%&b&b&__IMPORT_DESCRIPTOR_SSLEAY32__NULL_IMPORT_DESCRIPTORSSLEAY32_NULL_THUNK_DATABIO_f_ssl__imp_BIO_f_sslBIO_new_buffer_ssl_connect__imp_BIO_new_buffer_ssl_connectBIO_new_ssl__imp_BIO_new_sslBIO_new_ssl_connect__imp_BIO_new_ssl_connectBIO_ssl_copy_session_id__imp_BIO_ssl_copy_session_idBIO_ssl_shutdown__imp_BIO_ssl_shutdownDTLS_client_method__imp_DTLS_client_methodDTLS_method__imp_DTLS_methodDTLS_server_method__imp_DTLS_server_methodDTLSv1_2_client_method__imp_DTLSv1_2_client_methodDTLSv1_2_method__imp_DTLSv1_2_methodDTLSv1_2_server_method__imp_DTLSv1_2_server_methodDTLSv1_client_method__imp_DTLSv1_client_methodDTLSv1_method__imp_DTLSv1_methodDTLSv1_server_method__imp_DTLSv1_server_methodERR_load_SSL_strings__imp_ERR_load_SSL_stringsPEM_read_SSL_SESSION__imp_PEM_read_SSL_SESSIONPEM_read_bio_SSL_SESSION__imp_PEM_read_bio_SSL_SESSIONPEM_write_SSL_SESSION__imp_PEM_write_SSL_SESSIONPEM_write_bio_SSL_SESSION__imp_PEM_write_bio_SSL_SESSIONSRP_Calc_A_param__imp_SRP_Calc_A_paramSRP_generate_client_master_secret__imp_SRP_generate_client_master_secretSRP_generate_server_master_secret__imp_SRP_generate_server_master_secretSSL_CIPHER_description__imp_SSL_CIPHER_descriptionSSL_CIPHER_find__imp_SSL_CIPHER_findSSL_CIPHER_get_bits__imp_SSL_CIPHER_get_bitsSSL_CIPHER_get_id__imp_SSL_CIPHER_get_idSSL_CIPHER_get_name__imp_SSL_CIPHER_get_nameSSL_CIPHER_get_version__imp_SSL_CIPHER_get_versionSSL_COMP_add_compression_method__imp_SSL_COMP_add_compression_methodSSL_COMP_free_compression_methods__imp_SSL_COMP_free_compression_methodsSSL_COMP_get_compression_methods__imp_SSL_COMP_get_compression_methodsSSL_COMP_get_name__imp_SSL_COMP_get_nameSSL_COMP_set0_compression_methods__imp_SSL_COMP_set0_compression_methodsSSL_CONF_CTX_clear_flags__imp_SSL_CONF_CTX_clear_flagsSSL_CONF_CTX_finish__imp_SSL_CONF_CTX_finishSSL_CONF_CTX_free__imp_SSL_CONF_CTX_freeSSL_CONF_CTX_new__imp_SSL_CONF_CTX_newSSL_CONF_CTX_set1_prefix__imp_SSL_CONF_CTX_set1_prefixSSL_CONF_CTX_set_flags__imp_SSL_CONF_CTX_set_flagsSSL_CONF_CTX_set_ssl__imp_SSL_CONF_CTX_set_sslSSL_CONF_CTX_set_ssl_ctx__imp_SSL_CONF_CTX_set_ssl_ctxSSL_CONF_cmd__imp_SSL_CONF_cmdSSL_CONF_cmd_argv__imp_SSL_CONF_cmd_argvSSL_CONF_cmd_value_type__imp_SSL_CONF_cmd_value_typeSSL_CTX_SRP_CTX_free__imp_SSL_CTX_SRP_CTX_freeSSL_CTX_SRP_CTX_init__imp_SSL_CTX_SRP_CTX_initSSL_CTX_add_client_CA__imp_SSL_CTX_add_client_CASSL_CTX_add_client_custom_ext__imp_SSL_CTX_add_client_custom_extSSL_CTX_add_server_custom_ext__imp_SSL_CTX_add_server_custom_extSSL_CTX_add_session__imp_SSL_CTX_add_sessionSSL_CTX_callback_ctrl__imp_SSL_CTX_callback_ctrlSSL_CTX_check_private_key__imp_SSL_CTX_check_private_keySSL_CTX_ctrl__imp_SSL_CTX_ctrlSSL_CTX_flush_sessions__imp_SSL_CTX_flush_sessionsSSL_CTX_free__imp_SSL_CTX_freeSSL_CTX_get0_certificate__imp_SSL_CTX_get0_certificateSSL_CTX_get0_param__imp_SSL_CTX_get0_paramSSL_CTX_get0_privatekey__imp_SSL_CTX_get0_privatekeySSL_CTX_get_cert_store__imp_SSL_CTX_get_cert_storeSSL_CTX_get_client_CA_list__imp_SSL_CTX_get_client_CA_listSSL_CTX_get_client_cert_cb__imp_SSL_CTX_get_client_cert_cbSSL_CTX_get_ex_data__imp_SSL_CTX_get_ex_dataSSL_CTX_get_ex_new_index__imp_SSL_CTX_get_ex_new_indexSSL_CTX_get_info_callback__imp_SSL_CTX_get_info_callbackSSL_CTX_get_quiet_shutdown__imp_SSL_CTX_get_quiet_shutdownSSL_CTX_get_ssl_method__imp_SSL_CTX_get_ssl_methodSSL_CTX_get_timeout__imp_SSL_CTX_get_timeoutSSL_CTX_get_verify_callback__imp_SSL_CTX_get_verify_callbackSSL_CTX_get_verify_depth__imp_SSL_CTX_get_verify_depthSSL_CTX_get_verify_mode__imp_SSL_CTX_get_verify_modeSSL_CTX_load_verify_locations__imp_SSL_CTX_load_verify_locationsSSL_CTX_new__imp_SSL_CTX_newSSL_CTX_remove_session__imp_SSL_CTX_remove_sessionSSL_CTX_sess_get_get_cb__imp_SSL_CTX_sess_get_get_cbSSL_CTX_sess_get_new_cb__imp_SSL_CTX_sess_get_new_cbSSL_CTX_sess_get_remove_cb__imp_SSL_CTX_sess_get_remove_cbSSL_CTX_sess_set_get_cb__imp_SSL_CTX_sess_set_get_cbSSL_CTX_sess_set_new_cb__imp_SSL_CTX_sess_set_new_cbSSL_CTX_sess_set_remove_cb__imp_SSL_CTX_sess_set_remove_cbSSL_CTX_sessions__imp_SSL_CTX_sessionsSSL_CTX_set1_param__imp_SSL_CTX_set1_paramSSL_CTX_set_alpn_protos__imp_SSL_CTX_set_alpn_protosSSL_CTX_set_alpn_select_cb__imp_SSL_CTX_set_alpn_select_cbSSL_CTX_set_cert_cb__imp_SSL_CTX_set_cert_cbSSL_CTX_set_cert_store__imp_SSL_CTX_set_cert_storeSSL_CTX_set_cert_verify_callback__imp_SSL_CTX_set_cert_verify_callbackSSL_CTX_set_cipher_list__imp_SSL_CTX_set_cipher_listSSL_CTX_set_client_CA_list__imp_SSL_CTX_set_client_CA_listSSL_CTX_set_client_cert_cb__imp_SSL_CTX_set_client_cert_cbSSL_CTX_set_client_cert_engine__imp_SSL_CTX_set_client_cert_engineSSL_CTX_set_cookie_generate_cb__imp_SSL_CTX_set_cookie_generate_cbSSL_CTX_set_cookie_verify_cb__imp_SSL_CTX_set_cookie_verify_cbSSL_CTX_set_default_passwd_cb__imp_SSL_CTX_set_default_passwd_cbSSL_CTX_set_default_passwd_cb_userdata__imp_SSL_CTX_set_default_passwd_cb_userdataSSL_CTX_set_default_verify_paths__imp_SSL_CTX_set_default_verify_pathsSSL_CTX_set_ex_data__imp_SSL_CTX_set_ex_dataSSL_CTX_set_generate_session_id__imp_SSL_CTX_set_generate_session_idSSL_CTX_set_info_callback__imp_SSL_CTX_set_info_callbackSSL_CTX_set_msg_callback__imp_SSL_CTX_set_msg_callbackSSL_CTX_set_next_proto_select_cb__imp_SSL_CTX_set_next_proto_select_cbSSL_CTX_set_next_protos_advertised_cb__imp_SSL_CTX_set_next_protos_advertised_cbSSL_CTX_set_psk_client_callback__imp_SSL_CTX_set_psk_client_callbackSSL_CTX_set_psk_server_callback__imp_SSL_CTX_set_psk_server_callbackSSL_CTX_set_purpose__imp_SSL_CTX_set_purposeSSL_CTX_set_quiet_shutdown__imp_SSL_CTX_set_quiet_shutdownSSL_CTX_set_session_id_context__imp_SSL_CTX_set_session_id_contextSSL_CTX_set_srp_cb_arg__imp_SSL_CTX_set_srp_cb_argSSL_CTX_set_srp_client_pwd_callback__imp_SSL_CTX_set_srp_client_pwd_callbackSSL_CTX_set_srp_password__imp_SSL_CTX_set_srp_passwordSSL_CTX_set_srp_strength__imp_SSL_CTX_set_srp_strengthSSL_CTX_set_srp_username__imp_SSL_CTX_set_srp_usernameSSL_CTX_set_srp_username_callback__imp_SSL_CTX_set_srp_username_callbackSSL_CTX_set_srp_verify_param_callback__imp_SSL_CTX_set_srp_verify_param_callbackSSL_CTX_set_ssl_version__imp_SSL_CTX_set_ssl_versionSSL_CTX_set_timeout__imp_SSL_CTX_set_timeoutSSL_CTX_set_tlsext_use_srtp__imp_SSL_CTX_set_tlsext_use_srtpSSL_CTX_set_tmp_dh_callback__imp_SSL_CTX_set_tmp_dh_callbackSSL_CTX_set_tmp_ecdh_callback__imp_SSL_CTX_set_tmp_ecdh_callbackSSL_CTX_set_tmp_rsa_callback__imp_SSL_CTX_set_tmp_rsa_callbackSSL_CTX_set_trust__imp_SSL_CTX_set_trustSSL_CTX_set_verify__imp_SSL_CTX_set_verifySSL_CTX_set_verify_depth__imp_SSL_CTX_set_verify_depthSSL_CTX_use_PrivateKey__imp_SSL_CTX_use_PrivateKeySSL_CTX_use_PrivateKey_ASN1__imp_SSL_CTX_use_PrivateKey_ASN1SSL_CTX_use_PrivateKey_file__imp_SSL_CTX_use_PrivateKey_fileSSL_CTX_use_RSAPrivateKey__imp_SSL_CTX_use_RSAPrivateKeySSL_CTX_use_RSAPrivateKey_ASN1__imp_SSL_CTX_use_RSAPrivateKey_ASN1SSL_CTX_use_RSAPrivateKey_file__imp_SSL_CTX_use_RSAPrivateKey_fileSSL_CTX_use_certificate__imp_SSL_CTX_use_certificateSSL_CTX_use_certificate_ASN1__imp_SSL_CTX_use_certificate_ASN1SSL_CTX_use_certificate_chain_file__imp_SSL_CTX_use_certificate_chain_fileSSL_CTX_use_certificate_file__imp_SSL_CTX_use_certificate_fileSSL_CTX_use_psk_identity_hint__imp_SSL_CTX_use_psk_identity_hintSSL_CTX_use_serverinfo__imp_SSL_CTX_use_serverinfoSSL_CTX_use_serverinfo_file__imp_SSL_CTX_use_serverinfo_fileSSL_SESSION_free__imp_SSL_SESSION_freeSSL_SESSION_get0_peer__imp_SSL_SESSION_get0_peerSSL_SESSION_get_compress_id__imp_SSL_SESSION_get_compress_idSSL_SESSION_get_ex_data__imp_SSL_SESSION_get_ex_dataSSL_SESSION_get_ex_new_index__imp_SSL_SESSION_get_ex_new_indexSSL_SESSION_get_id__imp_SSL_SESSION_get_idSSL_SESSION_get_time__imp_SSL_SESSION_get_timeSSL_SESSION_get_timeout__imp_SSL_SESSION_get_timeoutSSL_SESSION_new__imp_SSL_SESSION_newSSL_SESSION_print__imp_SSL_SESSION_printSSL_SESSION_print_fp__imp_SSL_SESSION_print_fpSSL_SESSION_set1_id_context__imp_SSL_SESSION_set1_id_contextSSL_SESSION_set_ex_data__imp_SSL_SESSION_set_ex_dataSSL_SESSION_set_time__imp_SSL_SESSION_set_timeSSL_SESSION_set_timeout__imp_SSL_SESSION_set_timeoutSSL_SRP_CTX_free__imp_SSL_SRP_CTX_freeSSL_SRP_CTX_init__imp_SSL_SRP_CTX_initSSL_accept__imp_SSL_acceptSSL_add_client_CA__imp_SSL_add_client_CASSL_add_dir_cert_subjects_to_stack__imp_SSL_add_dir_cert_subjects_to_stackSSL_add_file_cert_subjects_to_stack__imp_SSL_add_file_cert_subjects_to_stackSSL_alert_desc_string__imp_SSL_alert_desc_stringSSL_alert_desc_string_long__imp_SSL_alert_desc_string_longSSL_alert_type_string__imp_SSL_alert_type_stringSSL_alert_type_string_long__imp_SSL_alert_type_string_longSSL_cache_hit__imp_SSL_cache_hitSSL_callback_ctrl__imp_SSL_callback_ctrlSSL_certs_clear__imp_SSL_certs_clearSSL_check_chain__imp_SSL_check_chainSSL_check_private_key__imp_SSL_check_private_keySSL_clear__imp_SSL_clearSSL_connect__imp_SSL_connectSSL_copy_session_id__imp_SSL_copy_session_idSSL_ctrl__imp_SSL_ctrlSSL_do_handshake__imp_SSL_do_handshakeSSL_dup__imp_SSL_dupSSL_dup_CA_list__imp_SSL_dup_CA_listSSL_export_keying_material__imp_SSL_export_keying_materialSSL_extension_supported__imp_SSL_extension_supportedSSL_free__imp_SSL_freeSSL_get0_alpn_selected__imp_SSL_get0_alpn_selectedSSL_get0_next_proto_negotiated__imp_SSL_get0_next_proto_negotiatedSSL_get0_param__imp_SSL_get0_paramSSL_get1_session__imp_SSL_get1_sessionSSL_get_SSL_CTX__imp_SSL_get_SSL_CTXSSL_get_certificate__imp_SSL_get_certificateSSL_get_cipher_list__imp_SSL_get_cipher_listSSL_get_ciphers__imp_SSL_get_ciphersSSL_get_client_CA_list__imp_SSL_get_client_CA_listSSL_get_current_cipher__imp_SSL_get_current_cipherSSL_get_current_compression__imp_SSL_get_current_compressionSSL_get_current_expansion__imp_SSL_get_current_expansionSSL_get_default_timeout__imp_SSL_get_default_timeoutSSL_get_error__imp_SSL_get_errorSSL_get_ex_data__imp_SSL_get_ex_dataSSL_get_ex_data_X509_STORE_CTX_idx__imp_SSL_get_ex_data_X509_STORE_CTX_idxSSL_get_ex_new_index__imp_SSL_get_ex_new_indexSSL_get_fd__imp_SSL_get_fdSSL_get_finished__imp_SSL_get_finishedSSL_get_info_callback__imp_SSL_get_info_callbackSSL_get_peer_cert_chain__imp_SSL_get_peer_cert_chainSSL_get_peer_certificate__imp_SSL_get_peer_certificateSSL_get_peer_finished__imp_SSL_get_peer_finishedSSL_get_privatekey__imp_SSL_get_privatekeySSL_get_psk_identity__imp_SSL_get_psk_identitySSL_get_psk_identity_hint__imp_SSL_get_psk_identity_hintSSL_get_quiet_shutdown__imp_SSL_get_quiet_shutdownSSL_get_rbio__imp_SSL_get_rbioSSL_get_read_ahead__imp_SSL_get_read_aheadSSL_get_rfd__imp_SSL_get_rfdSSL_get_selected_srtp_profile__imp_SSL_get_selected_srtp_profileSSL_get_servername__imp_SSL_get_servernameSSL_get_servername_type__imp_SSL_get_servername_typeSSL_get_session__imp_SSL_get_sessionSSL_get_shared_ciphers__imp_SSL_get_shared_ciphersSSL_get_shared_sigalgs__imp_SSL_get_shared_sigalgsSSL_get_shutdown__imp_SSL_get_shutdownSSL_get_sigalgs__imp_SSL_get_sigalgsSSL_get_srp_N__imp_SSL_get_srp_NSSL_get_srp_g__imp_SSL_get_srp_gSSL_get_srp_userinfo__imp_SSL_get_srp_userinfoSSL_get_srp_username__imp_SSL_get_srp_usernameSSL_get_srtp_profiles__imp_SSL_get_srtp_profilesSSL_get_ssl_method__imp_SSL_get_ssl_methodSSL_get_verify_callback__imp_SSL_get_verify_callbackSSL_get_verify_depth__imp_SSL_get_verify_depthSSL_get_verify_mode__imp_SSL_get_verify_modeSSL_get_verify_result__imp_SSL_get_verify_resultSSL_get_version__imp_SSL_get_versionSSL_get_wbio__imp_SSL_get_wbioSSL_get_wfd__imp_SSL_get_wfdSSL_has_matching_session_id__imp_SSL_has_matching_session_idSSL_is_server__imp_SSL_is_serverSSL_library_init__imp_SSL_library_initSSL_load_client_CA_file__imp_SSL_load_client_CA_fileSSL_load_error_strings__imp_SSL_load_error_stringsSSL_new__imp_SSL_newSSL_peek__imp_SSL_peekSSL_pending__imp_SSL_pendingSSL_read__imp_SSL_readSSL_renegotiate__imp_SSL_renegotiateSSL_renegotiate_abbreviated__imp_SSL_renegotiate_abbreviatedSSL_renegotiate_pending__imp_SSL_renegotiate_pendingSSL_rstate_string__imp_SSL_rstate_stringSSL_rstate_string_long__imp_SSL_rstate_string_longSSL_select_next_proto__imp_SSL_select_next_protoSSL_set1_param__imp_SSL_set1_paramSSL_set_SSL_CTX__imp_SSL_set_SSL_CTXSSL_set_accept_state__imp_SSL_set_accept_stateSSL_set_alpn_protos__imp_SSL_set_alpn_protosSSL_set_bio__imp_SSL_set_bioSSL_set_cert_cb__imp_SSL_set_cert_cbSSL_set_cipher_list__imp_SSL_set_cipher_listSSL_set_client_CA_list__imp_SSL_set_client_CA_listSSL_set_connect_state__imp_SSL_set_connect_stateSSL_set_debug__imp_SSL_set_debugSSL_set_ex_data__imp_SSL_set_ex_dataSSL_set_fd__imp_SSL_set_fdSSL_set_generate_session_id__imp_SSL_set_generate_session_idSSL_set_info_callback__imp_SSL_set_info_callbackSSL_set_msg_callback__imp_SSL_set_msg_callbackSSL_set_psk_client_callback__imp_SSL_set_psk_client_callbackSSL_set_psk_server_callback__imp_SSL_set_psk_server_callbackSSL_set_purpose__imp_SSL_set_purposeSSL_set_quiet_shutdown__imp_SSL_set_quiet_shutdownSSL_set_read_ahead__imp_SSL_set_read_aheadSSL_set_rfd__imp_SSL_set_rfdSSL_set_session__imp_SSL_set_sessionSSL_set_session_id_context__imp_SSL_set_session_id_contextSSL_set_session_secret_cb__imp_SSL_set_session_secret_cbSSL_set_session_ticket_ext__imp_SSL_set_session_ticket_extSSL_set_session_ticket_ext_cb__imp_SSL_set_session_ticket_ext_cbSSL_set_shutdown__imp_SSL_set_shutdownSSL_set_srp_server_param__imp_SSL_set_srp_server_paramSSL_set_srp_server_param_pw__imp_SSL_set_srp_server_param_pwSSL_set_ssl_method__imp_SSL_set_ssl_methodSSL_set_state__imp_SSL_set_stateSSL_set_tlsext_use_srtp__imp_SSL_set_tlsext_use_srtpSSL_set_tmp_dh_callback__imp_SSL_set_tmp_dh_callbackSSL_set_tmp_ecdh_callback__imp_SSL_set_tmp_ecdh_callbackSSL_set_tmp_rsa_callback__imp_SSL_set_tmp_rsa_callbackSSL_set_trust__imp_SSL_set_trustSSL_set_verify__imp_SSL_set_verifySSL_set_verify_depth__imp_SSL_set_verify_depthSSL_set_verify_result__imp_SSL_set_verify_resultSSL_set_wfd__imp_SSL_set_wfdSSL_shutdown__imp_SSL_shutdownSSL_srp_server_param_with_username__imp_SSL_srp_server_param_with_usernameSSL_state__imp_SSL_stateSSL_state_string__imp_SSL_state_stringSSL_state_string_long__imp_SSL_state_string_longSSL_use_PrivateKey__imp_SSL_use_PrivateKeySSL_use_PrivateKey_ASN1__imp_SSL_use_PrivateKey_ASN1SSL_use_PrivateKey_file__imp_SSL_use_PrivateKey_fileSSL_use_RSAPrivateKey__imp_SSL_use_RSAPrivateKeySSL_use_RSAPrivateKey_ASN1__imp_SSL_use_RSAPrivateKey_ASN1SSL_use_RSAPrivateKey_file__imp_SSL_use_RSAPrivateKey_fileSSL_use_certificate__imp_SSL_use_certificateSSL_use_certificate_ASN1__imp_SSL_use_certificate_ASN1SSL_use_certificate_file__imp_SSL_use_certificate_fileSSL_use_psk_identity_hint__imp_SSL_use_psk_identity_hintSSL_version__imp_SSL_versionSSL_want__imp_SSL_wantSSL_write__imp_SSL_writeSSLv23_client_method__imp_SSLv23_client_methodSSLv23_method__imp_SSLv23_methodSSLv23_server_method__imp_SSLv23_server_methodSSLv2_client_method__imp_SSLv2_client_methodSSLv2_method__imp_SSLv2_methodSSLv2_server_method__imp_SSLv2_server_methodSSLv3_client_method__imp_SSLv3_client_methodSSLv3_method__imp_SSLv3_methodSSLv3_server_method__imp_SSLv3_server_methodTLSv1_1_client_method__imp_TLSv1_1_client_methodTLSv1_1_method__imp_TLSv1_1_methodTLSv1_1_server_method__imp_TLSv1_1_server_methodTLSv1_2_client_method__imp_TLSv1_2_client_methodTLSv1_2_method__imp_TLSv1_2_methodTLSv1_2_server_method__imp_TLSv1_2_server_methodTLSv1_client_method__imp_TLSv1_client_methodTLSv1_method__imp_TLSv1_methodTLSv1_server_method__imp_TLSv1_server_method__imp_d2i_SSL_SESSIONd2i_SSL_SESSION__imp_i2d_SSL_SESSIONi2d_SSL_SESSION__imp_ssl3_ciphers / 1485441939 0 18603 ` D̑2nؗJ.xZΛ@xdҟRҠF&|zh^Ц@$ ZЪB( ~\Ư<"n^ҴD4&zh޹T̺: ~rb޿ZPRB02.vlfRH2tf`VD&rV8(~TD:& zV2tH. ~fB&|nP>pZ<(lX<$lJ0nF*zT$rX@hH0 r  `  L  4     hXB2rT2zbD*vbDb>  "!!!r""R##2$$%%%b&&  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@A  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDBCBIO_f_sslBIO_new_buffer_ssl_connectBIO_new_sslBIO_new_ssl_connectBIO_ssl_copy_session_idBIO_ssl_shutdownDTLS_client_methodDTLS_methodDTLS_server_methodDTLSv1_2_client_methodDTLSv1_2_methodDTLSv1_2_server_methodDTLSv1_client_methodDTLSv1_methodDTLSv1_server_methodERR_load_SSL_stringsPEM_read_SSL_SESSIONPEM_read_bio_SSL_SESSIONPEM_write_SSL_SESSIONPEM_write_bio_SSL_SESSIONSRP_Calc_A_paramSRP_generate_client_master_secretSRP_generate_server_master_secretSSL_CIPHER_descriptionSSL_CIPHER_findSSL_CIPHER_get_bitsSSL_CIPHER_get_idSSL_CIPHER_get_nameSSL_CIPHER_get_versionSSL_COMP_add_compression_methodSSL_COMP_free_compression_methodsSSL_COMP_get_compression_methodsSSL_COMP_get_nameSSL_COMP_set0_compression_methodsSSL_CONF_CTX_clear_flagsSSL_CONF_CTX_finishSSL_CONF_CTX_freeSSL_CONF_CTX_newSSL_CONF_CTX_set1_prefixSSL_CONF_CTX_set_flagsSSL_CONF_CTX_set_sslSSL_CONF_CTX_set_ssl_ctxSSL_CONF_cmdSSL_CONF_cmd_argvSSL_CONF_cmd_value_typeSSL_CTX_SRP_CTX_freeSSL_CTX_SRP_CTX_initSSL_CTX_add_client_CASSL_CTX_add_client_custom_extSSL_CTX_add_server_custom_extSSL_CTX_add_sessionSSL_CTX_callback_ctrlSSL_CTX_check_private_keySSL_CTX_ctrlSSL_CTX_flush_sessionsSSL_CTX_freeSSL_CTX_get0_certificateSSL_CTX_get0_paramSSL_CTX_get0_privatekeySSL_CTX_get_cert_storeSSL_CTX_get_client_CA_listSSL_CTX_get_client_cert_cbSSL_CTX_get_ex_dataSSL_CTX_get_ex_new_indexSSL_CTX_get_info_callbackSSL_CTX_get_quiet_shutdownSSL_CTX_get_ssl_methodSSL_CTX_get_timeoutSSL_CTX_get_verify_callbackSSL_CTX_get_verify_depthSSL_CTX_get_verify_modeSSL_CTX_load_verify_locationsSSL_CTX_newSSL_CTX_remove_sessionSSL_CTX_sess_get_get_cbSSL_CTX_sess_get_new_cbSSL_CTX_sess_get_remove_cbSSL_CTX_sess_set_get_cbSSL_CTX_sess_set_new_cbSSL_CTX_sess_set_remove_cbSSL_CTX_sessionsSSL_CTX_set1_paramSSL_CTX_set_alpn_protosSSL_CTX_set_alpn_select_cbSSL_CTX_set_cert_cbSSL_CTX_set_cert_storeSSL_CTX_set_cert_verify_callbackSSL_CTX_set_cipher_listSSL_CTX_set_client_CA_listSSL_CTX_set_client_cert_cbSSL_CTX_set_client_cert_engineSSL_CTX_set_cookie_generate_cbSSL_CTX_set_cookie_verify_cbSSL_CTX_set_default_passwd_cbSSL_CTX_set_default_passwd_cb_userdataSSL_CTX_set_default_verify_pathsSSL_CTX_set_ex_dataSSL_CTX_set_generate_session_idSSL_CTX_set_info_callbackSSL_CTX_set_msg_callbackSSL_CTX_set_next_proto_select_cbSSL_CTX_set_next_protos_advertised_cbSSL_CTX_set_psk_client_callbackSSL_CTX_set_psk_server_callbackSSL_CTX_set_purposeSSL_CTX_set_quiet_shutdownSSL_CTX_set_session_id_contextSSL_CTX_set_srp_cb_argSSL_CTX_set_srp_client_pwd_callbackSSL_CTX_set_srp_passwordSSL_CTX_set_srp_strengthSSL_CTX_set_srp_usernameSSL_CTX_set_srp_username_callbackSSL_CTX_set_srp_verify_param_callbackSSL_CTX_set_ssl_versionSSL_CTX_set_timeoutSSL_CTX_set_tlsext_use_srtpSSL_CTX_set_tmp_dh_callbackSSL_CTX_set_tmp_ecdh_callbackSSL_CTX_set_tmp_rsa_callbackSSL_CTX_set_trustSSL_CTX_set_verifySSL_CTX_set_verify_depthSSL_CTX_use_PrivateKeySSL_CTX_use_PrivateKey_ASN1SSL_CTX_use_PrivateKey_fileSSL_CTX_use_RSAPrivateKeySSL_CTX_use_RSAPrivateKey_ASN1SSL_CTX_use_RSAPrivateKey_fileSSL_CTX_use_certificateSSL_CTX_use_certificate_ASN1SSL_CTX_use_certificate_chain_fileSSL_CTX_use_certificate_fileSSL_CTX_use_psk_identity_hintSSL_CTX_use_serverinfoSSL_CTX_use_serverinfo_fileSSL_SESSION_freeSSL_SESSION_get0_peerSSL_SESSION_get_compress_idSSL_SESSION_get_ex_dataSSL_SESSION_get_ex_new_indexSSL_SESSION_get_idSSL_SESSION_get_timeSSL_SESSION_get_timeoutSSL_SESSION_newSSL_SESSION_printSSL_SESSION_print_fpSSL_SESSION_set1_id_contextSSL_SESSION_set_ex_dataSSL_SESSION_set_timeSSL_SESSION_set_timeoutSSL_SRP_CTX_freeSSL_SRP_CTX_initSSL_acceptSSL_add_client_CASSL_add_dir_cert_subjects_to_stackSSL_add_file_cert_subjects_to_stackSSL_alert_desc_stringSSL_alert_desc_string_longSSL_alert_type_stringSSL_alert_type_string_longSSL_cache_hitSSL_callback_ctrlSSL_certs_clearSSL_check_chainSSL_check_private_keySSL_clearSSL_connectSSL_copy_session_idSSL_ctrlSSL_do_handshakeSSL_dupSSL_dup_CA_listSSL_export_keying_materialSSL_extension_supportedSSL_freeSSL_get0_alpn_selectedSSL_get0_next_proto_negotiatedSSL_get0_paramSSL_get1_sessionSSL_get_SSL_CTXSSL_get_certificateSSL_get_cipher_listSSL_get_ciphersSSL_get_client_CA_listSSL_get_current_cipherSSL_get_current_compressionSSL_get_current_expansionSSL_get_default_timeoutSSL_get_errorSSL_get_ex_dataSSL_get_ex_data_X509_STORE_CTX_idxSSL_get_ex_new_indexSSL_get_fdSSL_get_finishedSSL_get_info_callbackSSL_get_peer_cert_chainSSL_get_peer_certificateSSL_get_peer_finishedSSL_get_privatekeySSL_get_psk_identitySSL_get_psk_identity_hintSSL_get_quiet_shutdownSSL_get_rbioSSL_get_read_aheadSSL_get_rfdSSL_get_selected_srtp_profileSSL_get_servernameSSL_get_servername_typeSSL_get_sessionSSL_get_shared_ciphersSSL_get_shared_sigalgsSSL_get_shutdownSSL_get_sigalgsSSL_get_srp_NSSL_get_srp_gSSL_get_srp_userinfoSSL_get_srp_usernameSSL_get_srtp_profilesSSL_get_ssl_methodSSL_get_verify_callbackSSL_get_verify_depthSSL_get_verify_modeSSL_get_verify_resultSSL_get_versionSSL_get_wbioSSL_get_wfdSSL_has_matching_session_idSSL_is_serverSSL_library_initSSL_load_client_CA_fileSSL_load_error_stringsSSL_newSSL_peekSSL_pendingSSL_readSSL_renegotiateSSL_renegotiate_abbreviatedSSL_renegotiate_pendingSSL_rstate_stringSSL_rstate_string_longSSL_select_next_protoSSL_set1_paramSSL_set_SSL_CTXSSL_set_accept_stateSSL_set_alpn_protosSSL_set_bioSSL_set_cert_cbSSL_set_cipher_listSSL_set_client_CA_listSSL_set_connect_stateSSL_set_debugSSL_set_ex_dataSSL_set_fdSSL_set_generate_session_idSSL_set_info_callbackSSL_set_msg_callbackSSL_set_psk_client_callbackSSL_set_psk_server_callbackSSL_set_purposeSSL_set_quiet_shutdownSSL_set_read_aheadSSL_set_rfdSSL_set_sessionSSL_set_session_id_contextSSL_set_session_secret_cbSSL_set_session_ticket_extSSL_set_session_ticket_ext_cbSSL_set_shutdownSSL_set_srp_server_paramSSL_set_srp_server_param_pwSSL_set_ssl_methodSSL_set_stateSSL_set_tlsext_use_srtpSSL_set_tmp_dh_callbackSSL_set_tmp_ecdh_callbackSSL_set_tmp_rsa_callbackSSL_set_trustSSL_set_verifySSL_set_verify_depthSSL_set_verify_resultSSL_set_wfdSSL_shutdownSSL_srp_server_param_with_usernameSSL_stateSSL_state_stringSSL_state_string_longSSL_use_PrivateKeySSL_use_PrivateKey_ASN1SSL_use_PrivateKey_fileSSL_use_RSAPrivateKeySSL_use_RSAPrivateKey_ASN1SSL_use_RSAPrivateKey_fileSSL_use_certificateSSL_use_certificate_ASN1SSL_use_certificate_fileSSL_use_psk_identity_hintSSL_versionSSL_wantSSL_writeSSLv23_client_methodSSLv23_methodSSLv23_server_methodSSLv2_client_methodSSLv2_methodSSLv2_server_methodSSLv3_client_methodSSLv3_methodSSLv3_server_methodTLSv1_1_client_methodTLSv1_1_methodTLSv1_1_server_methodTLSv1_2_client_methodTLSv1_2_methodTLSv1_2_server_methodTLSv1_client_methodTLSv1_methodTLSv1_server_method__IMPORT_DESCRIPTOR_SSLEAY32__NULL_IMPORT_DESCRIPTOR__imp_BIO_f_ssl__imp_BIO_new_buffer_ssl_connect__imp_BIO_new_ssl__imp_BIO_new_ssl_connect__imp_BIO_ssl_copy_session_id__imp_BIO_ssl_shutdown__imp_DTLS_client_method__imp_DTLS_method__imp_DTLS_server_method__imp_DTLSv1_2_client_method__imp_DTLSv1_2_method__imp_DTLSv1_2_server_method__imp_DTLSv1_client_method__imp_DTLSv1_method__imp_DTLSv1_server_method__imp_ERR_load_SSL_strings__imp_PEM_read_SSL_SESSION__imp_PEM_read_bio_SSL_SESSION__imp_PEM_write_SSL_SESSION__imp_PEM_write_bio_SSL_SESSION__imp_SRP_Calc_A_param__imp_SRP_generate_client_master_secret__imp_SRP_generate_server_master_secret__imp_SSL_CIPHER_description__imp_SSL_CIPHER_find__imp_SSL_CIPHER_get_bits__imp_SSL_CIPHER_get_id__imp_SSL_CIPHER_get_name__imp_SSL_CIPHER_get_version__imp_SSL_COMP_add_compression_method__imp_SSL_COMP_free_compression_methods__imp_SSL_COMP_get_compression_methods__imp_SSL_COMP_get_name__imp_SSL_COMP_set0_compression_methods__imp_SSL_CONF_CTX_clear_flags__imp_SSL_CONF_CTX_finish__imp_SSL_CONF_CTX_free__imp_SSL_CONF_CTX_new__imp_SSL_CONF_CTX_set1_prefix__imp_SSL_CONF_CTX_set_flags__imp_SSL_CONF_CTX_set_ssl__imp_SSL_CONF_CTX_set_ssl_ctx__imp_SSL_CONF_cmd__imp_SSL_CONF_cmd_argv__imp_SSL_CONF_cmd_value_type__imp_SSL_CTX_SRP_CTX_free__imp_SSL_CTX_SRP_CTX_init__imp_SSL_CTX_add_client_CA__imp_SSL_CTX_add_client_custom_ext__imp_SSL_CTX_add_server_custom_ext__imp_SSL_CTX_add_session__imp_SSL_CTX_callback_ctrl__imp_SSL_CTX_check_private_key__imp_SSL_CTX_ctrl__imp_SSL_CTX_flush_sessions__imp_SSL_CTX_free__imp_SSL_CTX_get0_certificate__imp_SSL_CTX_get0_param__imp_SSL_CTX_get0_privatekey__imp_SSL_CTX_get_cert_store__imp_SSL_CTX_get_client_CA_list__imp_SSL_CTX_get_client_cert_cb__imp_SSL_CTX_get_ex_data__imp_SSL_CTX_get_ex_new_index__imp_SSL_CTX_get_info_callback__imp_SSL_CTX_get_quiet_shutdown__imp_SSL_CTX_get_ssl_method__imp_SSL_CTX_get_timeout__imp_SSL_CTX_get_verify_callback__imp_SSL_CTX_get_verify_depth__imp_SSL_CTX_get_verify_mode__imp_SSL_CTX_load_verify_locations__imp_SSL_CTX_new__imp_SSL_CTX_remove_session__imp_SSL_CTX_sess_get_get_cb__imp_SSL_CTX_sess_get_new_cb__imp_SSL_CTX_sess_get_remove_cb__imp_SSL_CTX_sess_set_get_cb__imp_SSL_CTX_sess_set_new_cb__imp_SSL_CTX_sess_set_remove_cb__imp_SSL_CTX_sessions__imp_SSL_CTX_set1_param__imp_SSL_CTX_set_alpn_protos__imp_SSL_CTX_set_alpn_select_cb__imp_SSL_CTX_set_cert_cb__imp_SSL_CTX_set_cert_store__imp_SSL_CTX_set_cert_verify_callback__imp_SSL_CTX_set_cipher_list__imp_SSL_CTX_set_client_CA_list__imp_SSL_CTX_set_client_cert_cb__imp_SSL_CTX_set_client_cert_engine__imp_SSL_CTX_set_cookie_generate_cb__imp_SSL_CTX_set_cookie_verify_cb__imp_SSL_CTX_set_default_passwd_cb__imp_SSL_CTX_set_default_passwd_cb_userdata__imp_SSL_CTX_set_default_verify_paths__imp_SSL_CTX_set_ex_data__imp_SSL_CTX_set_generate_session_id__imp_SSL_CTX_set_info_callback__imp_SSL_CTX_set_msg_callback__imp_SSL_CTX_set_next_proto_select_cb__imp_SSL_CTX_set_next_protos_advertised_cb__imp_SSL_CTX_set_psk_client_callback__imp_SSL_CTX_set_psk_server_callback__imp_SSL_CTX_set_purpose__imp_SSL_CTX_set_quiet_shutdown__imp_SSL_CTX_set_session_id_context__imp_SSL_CTX_set_srp_cb_arg__imp_SSL_CTX_set_srp_client_pwd_callback__imp_SSL_CTX_set_srp_password__imp_SSL_CTX_set_srp_strength__imp_SSL_CTX_set_srp_username__imp_SSL_CTX_set_srp_username_callback__imp_SSL_CTX_set_srp_verify_param_callback__imp_SSL_CTX_set_ssl_version__imp_SSL_CTX_set_timeout__imp_SSL_CTX_set_tlsext_use_srtp__imp_SSL_CTX_set_tmp_dh_callback__imp_SSL_CTX_set_tmp_ecdh_callback__imp_SSL_CTX_set_tmp_rsa_callback__imp_SSL_CTX_set_trust__imp_SSL_CTX_set_verify__imp_SSL_CTX_set_verify_depth__imp_SSL_CTX_use_PrivateKey__imp_SSL_CTX_use_PrivateKey_ASN1__imp_SSL_CTX_use_PrivateKey_file__imp_SSL_CTX_use_RSAPrivateKey__imp_SSL_CTX_use_RSAPrivateKey_ASN1__imp_SSL_CTX_use_RSAPrivateKey_file__imp_SSL_CTX_use_certificate__imp_SSL_CTX_use_certificate_ASN1__imp_SSL_CTX_use_certificate_chain_file__imp_SSL_CTX_use_certificate_file__imp_SSL_CTX_use_psk_identity_hint__imp_SSL_CTX_use_serverinfo__imp_SSL_CTX_use_serverinfo_file__imp_SSL_SESSION_free__imp_SSL_SESSION_get0_peer__imp_SSL_SESSION_get_compress_id__imp_SSL_SESSION_get_ex_data__imp_SSL_SESSION_get_ex_new_index__imp_SSL_SESSION_get_id__imp_SSL_SESSION_get_time__imp_SSL_SESSION_get_timeout__imp_SSL_SESSION_new__imp_SSL_SESSION_print__imp_SSL_SESSION_print_fp__imp_SSL_SESSION_set1_id_context__imp_SSL_SESSION_set_ex_data__imp_SSL_SESSION_set_time__imp_SSL_SESSION_set_timeout__imp_SSL_SRP_CTX_free__imp_SSL_SRP_CTX_init__imp_SSL_accept__imp_SSL_add_client_CA__imp_SSL_add_dir_cert_subjects_to_stack__imp_SSL_add_file_cert_subjects_to_stack__imp_SSL_alert_desc_string__imp_SSL_alert_desc_string_long__imp_SSL_alert_type_string__imp_SSL_alert_type_string_long__imp_SSL_cache_hit__imp_SSL_callback_ctrl__imp_SSL_certs_clear__imp_SSL_check_chain__imp_SSL_check_private_key__imp_SSL_clear__imp_SSL_connect__imp_SSL_copy_session_id__imp_SSL_ctrl__imp_SSL_do_handshake__imp_SSL_dup__imp_SSL_dup_CA_list__imp_SSL_export_keying_material__imp_SSL_extension_supported__imp_SSL_free__imp_SSL_get0_alpn_selected__imp_SSL_get0_next_proto_negotiated__imp_SSL_get0_param__imp_SSL_get1_session__imp_SSL_get_SSL_CTX__imp_SSL_get_certificate__imp_SSL_get_cipher_list__imp_SSL_get_ciphers__imp_SSL_get_client_CA_list__imp_SSL_get_current_cipher__imp_SSL_get_current_compression__imp_SSL_get_current_expansion__imp_SSL_get_default_timeout__imp_SSL_get_error__imp_SSL_get_ex_data__imp_SSL_get_ex_data_X509_STORE_CTX_idx__imp_SSL_get_ex_new_index__imp_SSL_get_fd__imp_SSL_get_finished__imp_SSL_get_info_callback__imp_SSL_get_peer_cert_chain__imp_SSL_get_peer_certificate__imp_SSL_get_peer_finished__imp_SSL_get_privatekey__imp_SSL_get_psk_identity__imp_SSL_get_psk_identity_hint__imp_SSL_get_quiet_shutdown__imp_SSL_get_rbio__imp_SSL_get_read_ahead__imp_SSL_get_rfd__imp_SSL_get_selected_srtp_profile__imp_SSL_get_servername__imp_SSL_get_servername_type__imp_SSL_get_session__imp_SSL_get_shared_ciphers__imp_SSL_get_shared_sigalgs__imp_SSL_get_shutdown__imp_SSL_get_sigalgs__imp_SSL_get_srp_N__imp_SSL_get_srp_g__imp_SSL_get_srp_userinfo__imp_SSL_get_srp_username__imp_SSL_get_srtp_profiles__imp_SSL_get_ssl_method__imp_SSL_get_verify_callback__imp_SSL_get_verify_depth__imp_SSL_get_verify_mode__imp_SSL_get_verify_result__imp_SSL_get_version__imp_SSL_get_wbio__imp_SSL_get_wfd__imp_SSL_has_matching_session_id__imp_SSL_is_server__imp_SSL_library_init__imp_SSL_load_client_CA_file__imp_SSL_load_error_strings__imp_SSL_new__imp_SSL_peek__imp_SSL_pending__imp_SSL_read__imp_SSL_renegotiate__imp_SSL_renegotiate_abbreviated__imp_SSL_renegotiate_pending__imp_SSL_rstate_string__imp_SSL_rstate_string_long__imp_SSL_select_next_proto__imp_SSL_set1_param__imp_SSL_set_SSL_CTX__imp_SSL_set_accept_state__imp_SSL_set_alpn_protos__imp_SSL_set_bio__imp_SSL_set_cert_cb__imp_SSL_set_cipher_list__imp_SSL_set_client_CA_list__imp_SSL_set_connect_state__imp_SSL_set_debug__imp_SSL_set_ex_data__imp_SSL_set_fd__imp_SSL_set_generate_session_id__imp_SSL_set_info_callback__imp_SSL_set_msg_callback__imp_SSL_set_psk_client_callback__imp_SSL_set_psk_server_callback__imp_SSL_set_purpose__imp_SSL_set_quiet_shutdown__imp_SSL_set_read_ahead__imp_SSL_set_rfd__imp_SSL_set_session__imp_SSL_set_session_id_context__imp_SSL_set_session_secret_cb__imp_SSL_set_session_ticket_ext__imp_SSL_set_session_ticket_ext_cb__imp_SSL_set_shutdown__imp_SSL_set_srp_server_param__imp_SSL_set_srp_server_param_pw__imp_SSL_set_ssl_method__imp_SSL_set_state__imp_SSL_set_tlsext_use_srtp__imp_SSL_set_tmp_dh_callback__imp_SSL_set_tmp_ecdh_callback__imp_SSL_set_tmp_rsa_callback__imp_SSL_set_trust__imp_SSL_set_verify__imp_SSL_set_verify_depth__imp_SSL_set_verify_result__imp_SSL_set_wfd__imp_SSL_shutdown__imp_SSL_srp_server_param_with_username__imp_SSL_state__imp_SSL_state_string__imp_SSL_state_string_long__imp_SSL_use_PrivateKey__imp_SSL_use_PrivateKey_ASN1__imp_SSL_use_PrivateKey_file__imp_SSL_use_RSAPrivateKey__imp_SSL_use_RSAPrivateKey_ASN1__imp_SSL_use_RSAPrivateKey_file__imp_SSL_use_certificate__imp_SSL_use_certificate_ASN1__imp_SSL_use_certificate_file__imp_SSL_use_psk_identity_hint__imp_SSL_version__imp_SSL_want__imp_SSL_write__imp_SSLv23_client_method__imp_SSLv23_method__imp_SSLv23_server_method__imp_SSLv2_client_method__imp_SSLv2_method__imp_SSLv2_server_method__imp_SSLv3_client_method__imp_SSLv3_method__imp_SSLv3_server_method__imp_TLSv1_1_client_method__imp_TLSv1_1_method__imp_TLSv1_1_server_method__imp_TLSv1_2_client_method__imp_TLSv1_2_method__imp_TLSv1_2_server_method__imp_TLSv1_client_method__imp_TLSv1_method__imp_TLSv1_server_method__imp_d2i_SSL_SESSION__imp_i2d_SSL_SESSION__imp_ssl3_ciphersd2i_SSL_SESSIONi2d_SSL_SESSIONSSLEAY32_NULL_THUNK_DATA SSLEAY32.dll/ 1485441939 0 498 ` d X.debug$SB@B.idata$2@0.idata$6@  SSLEAY32.dll' Microsoft (R) LINK SSLEAY32.dll@comp.id.idata$2@h.idata$6.idata$4@h.idata$5@h!:T__IMPORT_DESCRIPTOR_SSLEAY32__NULL_IMPORT_DESCRIPTORSSLEAY32_NULL_THUNK_DATASSLEAY32.dll/ 1485441939 0 251 ` d X.debug$SBd@B.idata$3@0 SSLEAY32.dll' Microsoft (R) LINK@comp.id__NULL_IMPORT_DESCRIPTOR SSLEAY32.dll/ 1485441939 0 288 ` d X.debug$SB@B.idata$5@@.idata$4@@ SSLEAY32.dll' Microsoft (R) LINK@comp.idSSLEAY32_NULL_THUNK_DATASSLEAY32.dll/ 1485441939 0 43 ` d XyBIO_f_sslSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 60 ` d X(BIO_new_buffer_ssl_connectSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 45 ` d XzBIO_new_sslSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 53 ` d X!BIO_new_ssl_connectSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 57 ` d X%|BIO_ssl_copy_session_idSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 50 ` d XBIO_ssl_shutdownSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 52 ` d X pDTLS_client_methodSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 45 ` d XoDTLS_methodSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 52 ` d X DTLS_server_methodSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 56 ` d X$DTLSv1_2_client_methodSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 49 ` d XDTLSv1_2_methodSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 56 ` d X$uDTLSv1_2_server_methodSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 54 ` d X" DTLSv1_client_methodSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 47 ` d XDTLSv1_methodSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 54 ` d X"DTLSv1_server_methodSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 54 ` d X"ERR_load_SSL_stringsSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 54 ` d X"-PEM_read_SSL_SESSIONSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 58 ` d X&.PEM_read_bio_SSL_SESSIONSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 55 ` d X#1PEM_write_SSL_SESSIONSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 59 ` d X'(PEM_write_bio_SSL_SESSIONSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 50 ` d XLSRP_Calc_A_paramSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 67 ` d X/OSRP_generate_client_master_secretSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 67 ` d X/MSRP_generate_server_master_secretSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 56 ` d X$SSL_CIPHER_descriptionSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 49 ` d X~SSL_CIPHER_findSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 53 ` d X!SSL_CIPHER_get_bitsSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 51 ` d X]SSL_CIPHER_get_idSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 53 ` d X!SSL_CIPHER_get_nameSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 56 ` d X$SSL_CIPHER_get_versionSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 65 ` d X-SSL_COMP_add_compression_methodSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 67 ` d X/SSL_COMP_free_compression_methodsSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 66 ` d X.SSL_COMP_get_compression_methodsSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 51 ` d XSSL_COMP_get_nameSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 67 ` d X/vSSL_COMP_set0_compression_methodsSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 58 ` d X&SSL_CONF_CTX_clear_flagsSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 53 ` d X!nSSL_CONF_CTX_finishSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 51 ` d XSSL_CONF_CTX_freeSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 50 ` d XSSL_CONF_CTX_newSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 58 ` d X&SSL_CONF_CTX_set1_prefixSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 56 ` d X$SSL_CONF_CTX_set_flagsSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 54 ` d X"SSL_CONF_CTX_set_sslSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 58 ` d X&}SSL_CONF_CTX_set_ssl_ctxSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 46 ` d X{SSL_CONF_cmdSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 51 ` d XtSSL_CONF_cmd_argvSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 57 ` d X%SSL_CONF_cmd_value_typeSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 54 ` d X"NSSL_CTX_SRP_CTX_freeSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 54 ` d X"JSSL_CTX_SRP_CTX_initSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 55 ` d X#SSL_CTX_add_client_CASSLEAY32.dll SSLEAY32.dll/ 1485441939 0 63 ` d X+xSSL_CTX_add_client_custom_extSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 63 ` d X+SSL_CTX_add_server_custom_extSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 53 ` d X!SSL_CTX_add_sessionSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 55 ` d X#SSL_CTX_callback_ctrlSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 59 ` d X'SSL_CTX_check_private_keySSLEAY32.dll SSLEAY32.dll/ 1485441939 0 46 ` d XSSL_CTX_ctrlSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 56 ` d X$SSL_CTX_flush_sessionsSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 46 ` d XSSL_CTX_freeSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 58 ` d X&SSL_CTX_get0_certificateSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 52 ` d X zSSL_CTX_get0_paramSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 57 ` d X%lSSL_CTX_get0_privatekeySSLEAY32.dll SSLEAY32.dll/ 1485441939 0 56 ` d X$SSL_CTX_get_cert_storeSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 60 ` d X( SSL_CTX_get_client_CA_listSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 60 ` d X( SSL_CTX_get_client_cert_cbSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 53 ` d X!SSL_CTX_get_ex_dataSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 58 ` d X&SSL_CTX_get_ex_new_indexSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 59 ` d X'SSL_CTX_get_info_callbackSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 60 ` d X(SSL_CTX_get_quiet_shutdownSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 56 ` d X$|SSL_CTX_get_ssl_methodSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 53 ` d X!SSL_CTX_get_timeoutSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 61 ` d X) SSL_CTX_get_verify_callbackSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 58 ` d X&SSL_CTX_get_verify_depthSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 57 ` d X% SSL_CTX_get_verify_modeSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 63 ` d X+SSL_CTX_load_verify_locationsSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 45 ` d X SSL_CTX_newSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 56 ` d X$ SSL_CTX_remove_sessionSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 57 ` d X%SSL_CTX_sess_get_get_cbSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 57 ` d X%SSL_CTX_sess_get_new_cbSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 60 ` d X(!SSL_CTX_sess_get_remove_cbSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 57 ` d X%SSL_CTX_sess_set_get_cbSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 57 ` d X%SSL_CTX_sess_set_new_cbSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 60 ` d X(SSL_CTX_sess_set_remove_cbSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 50 ` d XSSL_CTX_sessionsSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 52 ` d X 6SSL_CTX_set1_paramSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 57 ` d X%SSL_CTX_set_alpn_protosSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 60 ` d X(SSL_CTX_set_alpn_select_cbSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 53 ` d X!wSSL_CTX_set_cert_cbSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 56 ` d X$SSL_CTX_set_cert_storeSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 66 ` d X.SSL_CTX_set_cert_verify_callbackSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 57 ` d X%SSL_CTX_set_cipher_listSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 60 ` d X(SSL_CTX_set_client_CA_listSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 60 ` d X(SSL_CTX_set_client_cert_cbSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 64 ` d X,%SSL_CTX_set_client_cert_engineSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 64 ` d X,SSL_CTX_set_cookie_generate_cbSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 62 ` d X*SSL_CTX_set_cookie_verify_cbSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 63 ` d X+SSL_CTX_set_default_passwd_cbSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 72 ` d X4SSL_CTX_set_default_passwd_cb_userdataSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 66 ` d X.SSL_CTX_set_default_verify_pathsSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 53 ` d X!SSL_CTX_set_ex_dataSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 65 ` d X-SSL_CTX_set_generate_session_idSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 59 ` d X'SSL_CTX_set_info_callbackSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 58 ` d X& SSL_CTX_set_msg_callbackSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 66 ` d X.iSSL_CTX_set_next_proto_select_cbSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 71 ` d X3cSSL_CTX_set_next_protos_advertised_cbSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 65 ` d X-'SSL_CTX_set_psk_client_callbackSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 65 ` d X-/SSL_CTX_set_psk_server_callbackSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 53 ` d X!SSL_CTX_set_purposeSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 60 ` d X(SSL_CTX_set_quiet_shutdownSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 64 ` d X,SSL_CTX_set_session_id_contextSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 56 ` d X$HSSL_CTX_set_srp_cb_argSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 69 ` d X1<SSL_CTX_set_srp_client_pwd_callbackSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 58 ` d X&DSSL_CTX_set_srp_passwordSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 58 ` d X&ESSL_CTX_set_srp_strengthSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 58 ` d X&ISSL_CTX_set_srp_usernameSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 67 ` d X/>SSL_CTX_set_srp_username_callbackSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 71 ` d X3FSSL_CTX_set_srp_verify_param_callbackSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 57 ` d X%SSL_CTX_set_ssl_versionSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 53 ` d X!SSL_CTX_set_timeoutSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 61 ` d X)fSSL_CTX_set_tlsext_use_srtpSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 61 ` d X)SSL_CTX_set_tmp_dh_callbackSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 63 ` d X+ SSL_CTX_set_tmp_ecdh_callbackSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 62 ` d X*SSL_CTX_set_tmp_rsa_callbackSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 51 ` d XSSL_CTX_set_trustSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 52 ` d X SSL_CTX_set_verifySSLEAY32.dllSSLEAY32.dll/ 1485441939 0 58 ` d X&SSL_CTX_set_verify_depthSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 56 ` d X$SSL_CTX_use_PrivateKeySSLEAY32.dllSSLEAY32.dll/ 1485441939 0 61 ` d X)SSL_CTX_use_PrivateKey_ASN1SSLEAY32.dll SSLEAY32.dll/ 1485441939 0 61 ` d X)SSL_CTX_use_PrivateKey_fileSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 59 ` d X'SSL_CTX_use_RSAPrivateKeySSLEAY32.dll SSLEAY32.dll/ 1485441939 0 64 ` d X,SSL_CTX_use_RSAPrivateKey_ASN1SSLEAY32.dllSSLEAY32.dll/ 1485441939 0 64 ` d X,SSL_CTX_use_RSAPrivateKey_fileSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 57 ` d X%SSL_CTX_use_certificateSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 62 ` d X*SSL_CTX_use_certificate_ASN1SSLEAY32.dllSSLEAY32.dll/ 1485441939 0 68 ` d X0SSL_CTX_use_certificate_chain_fileSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 62 ` d X*SSL_CTX_use_certificate_fileSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 63 ` d X+&SSL_CTX_use_psk_identity_hintSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 56 ` d X$SSL_CTX_use_serverinfoSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 61 ` d X)SSL_CTX_use_serverinfo_fileSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 50 ` d XSSL_SESSION_freeSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 55 ` d X#TSSL_SESSION_get0_peerSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 61 ` d X)jSSL_SESSION_get_compress_idSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 57 ` d X%SSL_SESSION_get_ex_dataSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 62 ` d X*SSL_SESSION_get_ex_new_indexSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 52 ` d X SSL_SESSION_get_idSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 54 ` d X"SSL_SESSION_get_timeSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 57 ` d X%SSL_SESSION_get_timeoutSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 49 ` d X SSL_SESSION_newSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 51 ` d X!SSL_SESSION_printSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 54 ` d X""SSL_SESSION_print_fpSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 61 ` d X)VSSL_SESSION_set1_id_contextSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 57 ` d X%SSL_SESSION_set_ex_dataSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 54 ` d X"SSL_SESSION_set_timeSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 57 ` d X%SSL_SESSION_set_timeoutSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 50 ` d XRSSL_SRP_CTX_freeSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 50 ` d XKSSL_SRP_CTX_initSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 44 ` d X#SSL_acceptSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 51 ` d X$SSL_add_client_CASSLEAY32.dll SSLEAY32.dll/ 1485441939 0 68 ` d X0SSL_add_dir_cert_subjects_to_stackSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 69 ` d X1SSL_add_file_cert_subjects_to_stackSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 55 ` d X#%SSL_alert_desc_stringSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 60 ` d X(&SSL_alert_desc_string_longSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 55 ` d X#'SSL_alert_type_stringSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 60 ` d X((SSL_alert_type_string_longSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 47 ` d XXSSL_cache_hitSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 51 ` d XSSL_callback_ctrlSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 49 ` d XSSL_certs_clearSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 49 ` d XSSL_check_chainSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 55 ` d X#)SSL_check_private_keySSLEAY32.dll SSLEAY32.dll/ 1485441939 0 43 ` d X*SSL_clearSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 45 ` d X+SSL_connectSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 53 ` d X!,SSL_copy_session_idSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 42 ` d X-SSL_ctrlSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 50 ` d X}SSL_do_handshakeSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 41 ` d X.SSL_dupSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 49 ` d X/SSL_dup_CA_listSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 60 ` d X(aSSL_export_keying_materialSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 57 ` d X%SSL_extension_supportedSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 42 ` d X0SSL_freeSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 56 ` d X$SSL_get0_alpn_selectedSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 64 ` d X,dSSL_get0_next_proto_negotiatedSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 48 ` d XkSSL_get0_paramSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 50 ` d XSSL_get1_sessionSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 49 ` d XSSL_get_SSL_CTXSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 53 ` d X!1SSL_get_certificateSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 53 ` d X!4SSL_get_cipher_listSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 49 ` d X7SSL_get_ciphersSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 56 ` d X$8SSL_get_client_CA_listSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 56 ` d X$SSL_get_current_cipherSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 61 ` d X)SSL_get_current_compressionSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 59 ` d X'SSL_get_current_expansionSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 57 ` d X%9SSL_get_default_timeoutSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 47 ` d X:SSL_get_errorSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 49 ` d XSSL_get_ex_dataSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 68 ` d X0SSL_get_ex_data_X509_STORE_CTX_idxSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 54 ` d X"SSL_get_ex_new_indexSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 44 ` d X;SSL_get_fdSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 50 ` d XSSL_get_finishedSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 55 ` d X#SSL_get_info_callbackSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 57 ` d X%<SSL_get_peer_cert_chainSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 58 ` d X&=SSL_get_peer_certificateSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 55 ` d X#SSL_get_peer_finishedSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 52 ` d X ~SSL_get_privatekeySSLEAY32.dllSSLEAY32.dll/ 1485441939 0 54 ` d X"0SSL_get_psk_identitySSLEAY32.dllSSLEAY32.dll/ 1485441939 0 59 ` d X')SSL_get_psk_identity_hintSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 56 ` d X$SSL_get_quiet_shutdownSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 46 ` d X?SSL_get_rbioSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 52 ` d X @SSL_get_read_aheadSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 45 ` d XSSL_get_rfdSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 63 ` d X+eSSL_get_selected_srtp_profileSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 52 ` d X #SSL_get_servernameSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 57 ` d X%$SSL_get_servername_typeSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 49 ` d XSSL_get_sessionSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 56 ` d X$ASSL_get_shared_ciphersSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 56 ` d X$mSSL_get_shared_sigalgsSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 50 ` d XSSL_get_shutdownSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 49 ` d XSSL_get_sigalgsSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 47 ` d XBSSL_get_srp_NSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 47 ` d X=SSL_get_srp_gSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 54 ` d X"?SSL_get_srp_userinfoSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 54 ` d X"CSSL_get_srp_usernameSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 55 ` d X#hSSL_get_srtp_profilesSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 52 ` d X BSSL_get_ssl_methodSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 57 ` d X%ESSL_get_verify_callbackSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 54 ` d X"SSL_get_verify_depthSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 53 ` d X!FSSL_get_verify_modeSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 55 ` d X#SSL_get_verify_resultSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 49 ` d XGSSL_get_versionSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 46 ` d XHSSL_get_wbioSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 45 ` d XSSL_get_wfdSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 61 ` d X)SSL_has_matching_session_idSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 47 ` d XySSL_is_serverSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 50 ` d XSSL_library_initSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 57 ` d X%ISSL_load_client_CA_fileSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 56 ` d X$JSSL_load_error_stringsSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 41 ` d XKSSL_newSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 42 ` d XLSSL_peekSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 45 ` d XMSSL_pendingSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 42 ` d XNSSL_readSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 49 ` d XOSSL_renegotiateSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 61 ` d X)8SSL_renegotiate_abbreviatedSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 57 ` d X% SSL_renegotiate_pendingSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 51 ` d XPSSL_rstate_stringSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 56 ` d X$QSSL_rstate_string_longSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 55 ` d X#gSSL_select_next_protoSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 48 ` d X5SSL_set1_paramSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 49 ` d X"SSL_set_SSL_CTXSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 54 ` d X"RSSL_set_accept_stateSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 53 ` d X!rSSL_set_alpn_protosSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 45 ` d XSSSL_set_bioSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 49 ` d XSSL_set_cert_cbSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 53 ` d X!TSSL_set_cipher_listSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 56 ` d X$USSL_set_client_CA_listSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 55 ` d X#VSSL_set_connect_stateSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 47 ` d XSSSL_set_debugSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 49 ` d XSSL_set_ex_dataSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 44 ` d XWSSL_set_fdSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 61 ` d X)SSL_set_generate_session_idSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 55 ` d X#SSL_set_info_callbackSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 54 ` d X" SSL_set_msg_callbackSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 61 ` d X),SSL_set_psk_client_callbackSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 61 ` d X)*SSL_set_psk_server_callbackSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 49 ` d XSSL_set_purposeSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 56 ` d X$SSL_set_quiet_shutdownSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 52 ` d X XSSL_set_read_aheadSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 45 ` d XYSSL_set_rfdSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 49 ` d XZSSL_set_sessionSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 60 ` d X(SSL_set_session_id_contextSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 59 ` d X'3SSL_set_session_secret_cbSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 60 ` d X(2SSL_set_session_ticket_extSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 63 ` d X+4SSL_set_session_ticket_ext_cbSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 50 ` d XSSL_set_shutdownSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 58 ` d X&@SSL_set_srp_server_paramSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 61 ` d X)ASSL_set_srp_server_param_pwSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 52 ` d X [SSL_set_ssl_methodSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 47 ` d X\SSL_set_stateSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 57 ` d X%bSSL_set_tlsext_use_srtpSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 57 ` d X%SSL_set_tmp_dh_callbackSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 59 ` d X'SSL_set_tmp_ecdh_callbackSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 58 ` d X&SSL_set_tmp_rsa_callbackSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 47 ` d XSSL_set_trustSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 48 ` d X^SSL_set_verifySSLEAY32.dllSSLEAY32.dll/ 1485441939 0 54 ` d X"SSL_set_verify_depthSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 55 ` d X#SSL_set_verify_resultSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 45 ` d X_SSL_set_wfdSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 46 ` d X`SSL_shutdownSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 68 ` d X0PSSL_srp_server_param_with_usernameSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 43 ` d XSSL_stateSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 50 ` d XaSSL_state_stringSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 55 ` d X#bSSL_state_string_longSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 52 ` d X cSSL_use_PrivateKeySSLEAY32.dllSSLEAY32.dll/ 1485441939 0 57 ` d X%dSSL_use_PrivateKey_ASN1SSLEAY32.dll SSLEAY32.dll/ 1485441939 0 57 ` d X%eSSL_use_PrivateKey_fileSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 55 ` d X#fSSL_use_RSAPrivateKeySSLEAY32.dll SSLEAY32.dll/ 1485441939 0 60 ` d X(gSSL_use_RSAPrivateKey_ASN1SSLEAY32.dllSSLEAY32.dll/ 1485441939 0 60 ` d X(hSSL_use_RSAPrivateKey_fileSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 53 ` d X!iSSL_use_certificateSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 58 ` d X&jSSL_use_certificate_ASN1SSLEAY32.dllSSLEAY32.dll/ 1485441939 0 58 ` d X&kSSL_use_certificate_fileSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 59 ` d X'+SSL_use_psk_identity_hintSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 45 ` d XSSL_versionSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 42 ` d XSSL_wantSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 43 ` d XlSSL_writeSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 54 ` d X"nSSLv23_client_methodSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 47 ` d XoSSLv23_methodSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 54 ` d X"pSSLv23_server_methodSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 53 ` d X!qSSLv2_client_methodSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 46 ` d XrSSLv2_methodSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 53 ` d X!sSSLv2_server_methodSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 53 ` d X!tSSLv3_client_methodSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 46 ` d XuSSLv3_methodSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 53 ` d X!vSSLv3_server_methodSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 55 ` d X#:TLSv1_1_client_methodSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 48 ` d X9TLSv1_1_methodSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 55 ` d X#;TLSv1_1_server_methodSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 55 ` d X#UTLSv1_2_client_methodSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 48 ` d X^TLSv1_2_methodSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 55 ` d X#WTLSv1_2_server_methodSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 53 ` d X!TLSv1_client_methodSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 46 ` d XTLSv1_methodSSLEAY32.dllSSLEAY32.dll/ 1485441939 0 53 ` d X!TLSv1_server_methodSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 49 ` d Xwd2i_SSL_SESSIONSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 49 ` d Xxi2d_SSL_SESSIONSSLEAY32.dll SSLEAY32.dll/ 1485441939 0 46 ` d X@ssl3_ciphersSSLEAY32.dllvibe.d-0.8.2/lib/win-i386-mscoff/000077500000000000000000000000001324361747700162135ustar00rootroot00000000000000vibe.d-0.8.2/lib/win-i386-mscoff/libeay32.lib000066400000000000000000031034621324361747700203260ustar00rootroot00000000000000! / 1485440734 0 200455 `  " Q. Q.#X#X##$B$B$$%*%*%%& & &z&z&&'\'\''(4(4(() ) )~)~))*Z*Z**+:+:++,,,,,,-n-n--.Z.Z../B/B//0*0*001111112b2b223H3H334,4,445555556t6t667b7b778T8T889J9J99:4:4::;;;;;;,>,>>? ? ?~?~??@X@X@@A6A6AABBBBBBCnCnCCDXDXDDE@E@EEF"F"FFG G GGGGHnHnHHIRIRIIJ:J:JJK&K&KKLLLLLLMnMnMMNRNRNNO6O6OOPPPPQQQzQzQQRXRXRRS6S6SST"T"TTU U UxUxUUV\V\W@W@VVWWX&X&XXY"Y"YYZZZxZxZZ[Z[Z[[\<\<\\]]]]]]^^^^^^_8_8__````aaananaabVbVbbccc:c:ddddeeeeeefnfnffg\g\gghDhDhhi"i"iijjjtjtjjk^k^kklBlBllm,m,mmnnnnnnororoopHpHppqqqqqqrjrjrrs@s@ssttttttuhuhuuvHvHvvw(w(wwxxxrxrxxyTyTyyz.z.zz{ { {|{|{{|\|\||}@}@}}~ ~ ~~~~jjHH""dd@@""nn``LL00llDDZZ66jjDD88""||NN&&  vvLL$$ddHH&&nnRR44~~bb88||PP&&ppJJ  ff66TT$$``44vvHH\\>>ff@@,,  xxJJ~~bbLL..jj>>¨¨~~TT..ŜŜ  ||\\<<ȪȪɒɒ  zz\\@@̰̰  ͐͐llRR00ООшшff88ӠӠpp@@ծծււTT**ؒؒbb22ژژppFFܺܺ00ݦݦޒޒttFFddFF^^88ppJJ,,||ZZ..pp@@^^44xxJJ,,jj<<PP  ll88  vvTT((ff::bb@@zzVV::   x x   L L   2 2            xxllVVXXHHDD@@BBDD@@>><<44~~ttll\\ L L  !B!B!!""""# # ####$X$X$$%<%<%%&"&"&&'n'n''''(F(F(())))* * *~*~**+^+^++,0,0,,------.n.n../P/P//0*0*001 1 11112Z2Z223>3>334242445"5"556666777z7z778R8R889D9D99:<:<::;0;0;;< < <<======>^>^>>?<?<??@@@|@|@@AXAXAAB,B,BBCCCCCCDjDjDDETETEEFBFBFFG0G0GGHHHpHpHHIVIVIIJ@J@JJK K KKLLLvLvLLMZMZMMN@N@NNO"O"OOPPPtPtPPQfQfQQRVRVRRSJSJSST,T,TTUUUUUUVrVrVVW^W^WWX@X@XXY,Y,YYZZZZ[[[|[|[[\j\j\\]R]R]]^8^8^^_ _ __` ` ````a^a^aab@b@bbc.c.ccddddeeerereefXfXffgDgDgghHhHhhi@i@iij2j2jjkkkkllllm m mmnnnnnnopopoopZpZppq0q0qqrrrrrrsfsfsstDtDttu:u:uuv0v0vvwwwwwwx`x`xxyByByyz4z4zz{8{8{{|*|*||} } }}~ ~ ~~bbJJ44rrXX22XX66~~VV..rrNN,,ttTT..hhDDhh<<**ttVV..||NN""ttXX66jjDD""bb88vvXX,,vvRR((dd>>hhHH$$ll<<""vvFFnnRR**||``FFôô$$ĜĜ  ńńnn\\>>ȬȬɄɄbbJJ88̨̨͂͂^^44ϨϨААxx\\>>ӸӸ**ԖԖnnPP88׮׮""ؘؘللll\\RRJJݼݼ((ޢޢߎߎ||hhTTFF((ffHH44ddFF((ffbbFF""llDD88>>||ZZ88((``DD""nnTT,,xxRR00  || d d   J J   6 6   " "      ppZZBB,,nnZZ@@<<**~~^^LL00rr\\ B B  !*!*!!""""""#t#t##$d$d$$%R%R%%&H&H&&'D'D''(8(8(()&)&))******+d+d++,B,B,,----...t.t../^/^//0H0H001616112"2"2233334444555x5x556d6d667@7@778888889>9>99:&:&::;;;;;;D>D>>?4?4??@0@0@@AAAAAAB^B^BBC@C@CCD*D*DDEEE~E~EEFnFnFFGNGNGGH6H6HHIIIIJJJxJxJJKbKbKKLHLHLLM0M0MMNNNNOOOvOvOOP^P^PPQHQHQQR2R2RRSSSSTTTtTtTTUZUZUUV:V:VVW$W$WWXXXXXXYhYhYYZFZFZZ[6[6[[\\\\]]]p]p]]^P^P^^_._.__````aaatataabVbVbbcBcBccd2d2ddeeeeeefvfvffg`g`gghJhJhhi2i2iij$j$jjkkkkl l l~l~llmfmfmmnLnLnno4o4ooppppqhqhqqrHrHrrs&s&ppsstttrtrttuPuPuuv2v2vvwwwwxZxZxxy:y:yyzzzzzz{r{rww{{|T|T||}0}0}}~~~~~~bbDD((  ||VV>>jj>>jjDD  xxXXFF00    ||ppVV@@00rrVVBB((zzXX00vvXXDD((ttVV::  hhJJ..pp\\LL::,,rrVV@@**ffJJ((nnXX@@ffBB44¢¢ÄÄbb>>ŬŬƊƊffHHȸȸ&&ɔɔppNN@@̮̮͐͐nnJJϸϸ((ЖЖll@@((ҴҴӞӞԆԆnnXX@@״״؜؜((ننnnHH۴۴  ܊܊``88  xxXX::ޢޢhhDDPP00ZZ,,dd@@PP**~~XX00nnBBllJJ((xxXXHH&&nnDD h h   < <         x x   Z Z   4 4         h h   N N , ,   ~ ~ ^ ^ < <       j j   L L   ( (     v v   > >     z z   F F         P P   " "     v v   \ \   2 2     v v   V V   6 6     z z   \ \ !N !N ! ! "0 "0 " " # # # # $ $ $| $| $ $ %\ %\ % % &F &F & & ', ', ' ' ( ( (~ (~ ( ( )X )X ) ) *0 *0 * * + + + + + + ,\ ,\ , , -< -< - - . . . . . . /Z /Z / / 0* 0* 0 0 1 1 1t 1t 1 1 2T 2T 2 2 3( 3( 3 3 3 3 4f 4f 4 4 5> 5> 5 5 6 6 6| 6| 6 6 7l 7l 7 7 8V 8V 8 8 9F 9F 9 9 :> :> : : ;< ;< ; ; < < < < < < =j =j = = >L >L > > ?0 ?0 ? ? @ @ @x @x @ @ Ab Ab A A BH BH B B C2 C2 C C D& D& D D E E E E E E Fh Fh F F GF GF G G H2 H2 H H I I I I J J J~ J~ J J Kx Kx K K L` L` L L MB MB M M N* N* N N O O O O O O Pf Pf P P QJ QJ Q Q R, R, R R S S S S S S T` T` T T U< U< U U V V V V W W Wt Wt W W XZ XZ X X Y@ Y@ Y Y Z$ Z$ Z Z [ [ [ [ [ [ \r \r \ \ ]b ]b ] ] ^V ^V ^ ^ _V _V _ _ `D `D ` ` a. a. a a b b b b c c cp cp c c dP dP d d e2 e2 e e f f f f f f gb gb g g h< h< h h i i i i j j jx jx j j kd kd k k lT lT l l m: m: m m n n n n n n oj oj o o pV pV p p qB qB q q r" r" r r s s s s s s td td t t uR uR u u v@ v@ v v w w w w w w xn xn x x yR yR y y z. z. z z { { { { { { |h |h | | }H }H } }   v v   P P & &   X X . . x x R R 0 0   z z T T . .   n n F F ( ( l l T T < < " "   | | f f N N 4 4   f f B B 0 0       x x j j R R B B 0 0     v v J J . .     x x j j F F : : & &   h h R R 6 6   x x d d V V H H 8 8 . .     t t f f N N @ @ 0 0   b b F F , , š š ~ ~ ` ` H H Ŷ Ŷ 0 0 ƪ ƪ   nj nj j j R R ɾ ɾ 0 0 ʚ ʚ   z z 8 8 ͮ ͮ Z Z & & Θ Θ t t V V < < Ѩ Ѩ   ҆ ҆ l l V V 8 8 ծ ծ   ք ք f f J J & & غ غ ٚ ٚ ~ ~ d d B B ܲ ܲ $ $ ݔ ݔ   z z b b D D 4 4 * *     v v Z Z 8 8 ( (   r r ^ ^ T T H H . . p p Z Z 4 4   \ \ @ @   d d X X > >   | | d d D D . .   z z b b B B & &       \ \   8 8         t t   N N   0 0         t t V V F F > >   ^ ^   4 4     t t   V V   , ,     z z   V V   4 4         X X   2 2     h h   : :         h h   H H   * *     ~ ~   ` ` !B !B ! ! " " " " " " #\ #\ # # $> $> $ $ %" %" % % & & &r &r & & 'F 'F ' ' (. (. ( ( )$ )$ ) ) * * * * + + + + + + ,t ,t , , -r -r - - .h .h . . /T /T / / 0( 0( 0 0 1 1 1~ 1~ 1 1 2f 2f 2 2 3B 3B 3 3 4 4 4 4 4 4 5h 5h 5 5 6N 6N 6 6 7: 7: 7 7 8 8 8 8 8 8 9d 9d 9 9 : : ; ; ;r ;r ; ; Z >Z > > ?, ?, ? ? @ @ @r @r @ @ AD AD A A B B B B B B CV CV C C :B :B D2 D2 D D E E En En E E FF FF F F G" G" G G G G Hl Hl H H IJ IJ I I J J J J K K Kl Kl K K LD LD L L M. M. M M N N Nz Nz N N Od Od O O PL PL P P Q Q R R Rn Rn R R SB SB S S T& T& T T U U Uv Uv U U VX VX V V W( W( W W X X X| X| X X Yh Yh Y Y ZL ZL Z Z [8 [8 [ [ \& \& \ \ ] ] ]x ]x ] ] ^\ ^\ ^ ^ _V _V _ _ `F `F ` ` a4 a4 a a b b b b c c cz cz c c d` d` d d eH eH e e f0 f0 f f g g g g h h hr hr h h iL iL i i j$ j$ j j k k kx kx k k lf lf l l mL mL m m n0 n0 n n o o o o o o p` p` p p qH qH q q r, r, r r s s s s t t tv tv t t u\ u\ u u vJ vJ v v w0 w0 w w x* x* x x y y y y z z z z { { { { { { |r |r | | }H }H } } ~. ~. ~ ~   | |   f f T T : :     ~ ~ ` ` H H 4 4 , ,     | | l l V V > >   v v ` ` H H . .   h h D D   ^ ^ F F , ,   d d : :     x x R R 4 4   l l P P 0 0   r r f f N N 6 6 * *   p p N N ( (   n n D D   b b H H 6 6     t t ^ ^ > >   l l J J . .   v v Z Z F F , ,   ‚ ‚ f f J J ļ ļ 0 0 Ş Ş   ƀ ƀ \ \ 8 8 Ȧ Ȧ   ɀ ɀ ^ ^ F F > > ̺ ̺ , , ͞ ͞   ΐ ΐ   x x b b N N Ѿ Ѿ . . Ҡ Ҡ   ӂ ӂ b b : : լ լ   ֌ ֌ r r Z Z > > ٪ ٪   ڈ ڈ b b B B ܸ ܸ ( ( ݞ ݞ   ސ ސ   z z b b : :   v v b b L L ( (   t t l l P P @ @ ( (     p p P P F F , , ^ ^ N N F F , ,     z z f f Z Z @ @ & &   t t ` ` R R 8 8   ` `   F F   * *   " "         d d B B     & &     x x \ \ B B . .     t t   V V   8 8   ( (         ~ ~   X X   : :             r r   N N   ( (         l l   L L   , ,         l l !P !P ! ! "D "D " " #> #> # # $$ $$ $ $ % % % % % % &d &d & & 'F 'F ' ' (6 (6 ( ( )0 )0 ) ) *, *, * * + + + + , , , , - - - - - - .z .z . . /n /n / / 0^ 0^ 0 0 1N 1N 1 1 2< 2< 2 2 3. 3. 3 3 4 4 4 4 5 5 5 5 6 6 6| 6| 6 6 7j 7j 7 7 8P 8P 8 8 92 92 9 9 : : : : ; ; ;x ;x ; ; B >B > > ?( ?( ? ? @ @ @| @| @ @ Ad Ad A A BL BL B B C0 C0 C C D D Dr Dr D D Ej Ej E E F` F` F F GL GL G G HD HD H H I8 I8 I I J* J* J J K K K K L L L L L L Mv Mv M M Nn Nn N N Ob Ob O O P\ P\ P P QP QP Q Q R> R> R R S* S* S S T T Tr Tr T T U\ U\ U U V: V: V V W W W W W W X` X` X X YF YF Y Y Z( Z( Z Z [ [ [p [p [ [ \H \H \ \ ] ] ] ] ^ ^ ^x ^x ^ ^ _` _` _ _ `< `< ` ` a. a. a a b$ b$ b b c c c c d d dn dn d d eR eR e e f< f< f f g g g g h h h| h| h h if if i i jB jB j j k6 k6 k k l l l l l l mj mj m m nN nN n n o2 o2 o o p p pz pz p p qp qp q q rh rh r r s\ s\ s s tT tT t t uR uR u u v( v( v v w w wv wv w w xV xV x x y: y: y y z z z z { { {r {r { { |F |F | | }, }, } } ~ ~ ~ ~   t t   T T . .   v v ^ ^ B B . .   b b P P , ,   z z d d T T J J J J 6 6 r r d d R R B B 6 6 $ $   t t T T 6 6   X X 2 2   z z R R . .   n n X X : :   b b : :   X X : :   l l N N < <   l l V V 6 6   ` ` H H 0 0   l l V V > >   d d @ @ " " z z Z Z 4 4 Ġ Ġ ~ ~ ^ ^ D D ǰ ǰ Ȑ Ȑ n n V V < < ˬ ˬ ̐ ̐ " "   r r V V 6 6 Ϥ Ϥ   Є Є n n P P , , Ӝ Ӝ   | | \ \ : : ֪ ֪   ׌ ׌ j j P P 4 4 ڠ ڠ x x P P ܾ ܾ 0 0 ݢ ݢ   | | T T 8 8 $ $   | | ^ ^ @ @ , , l l L L 8 8   | | \ \ 8 8   t t P P 4 4   V V 6 6 d d < <   n n D D n n L L ( ( x x   V V 4 4   ~ ~   \ \   8 8     z z   d d   P P   < <   ( (   | | Z Z 2 2   l l P P   2 2         n n     P P : :         h h   L L   . .         n n   X X   @ @         f f   F F   & &   ~ ~ !\ !\ ! ! "> "> " " # # # # # # $b $b $ $ %F %F % % &$ &$ & & ' ' 't 't ' ' (V (V ( ( ) ) )@ )@ * * + + * * +v +v ,V ,V + + , , -: -: - - . . . . . . /h /h / / 0T 0T 0 0 14 14 1 1 2 2 2 2 2 2 3b 3b 3 3 4> 4> 4 4 5 5 5 5 6 6 6n 6n 6 6 7R 7R 7 7 86 86 8 8 9 9 9 9 9 9 :Z :Z : : ;2 ;2 ; ; < < < < < < =X =X = = >8 >8 > > ? ? ? ? @ @ @z @z @ @ A^ A^ A A B@ B@ B B C C C C D D D D E E Ez Ez E E Fj Fj F F G^ G^ G G H6 H6 H H I I I I J J Jv Jv J J KN KN K K L( L( L L M M Mv Mv M M NZ NZ N N O> O> O O P$ P$ P P Q Q Qr Qr Q Q RR RR S* S* R R S S T T Tt Tt T T U^ U^ U U V6 V6 V V W W Wz Wz W W XZ XZ X X Y: Y: Y Y Z Z Z Z Z Z [^ [^ [ [ \< \< \ \ ] ] ] ] ] ] ^f ^f ^ ^ _ _ _D _D `( `( ` ` a a ar ar a a bL bL b b c, c, c c d d dv dv d d eN eN e e f& f& f f g g g~ g~ g g hb hb h h i i iB iB j" j" j j k k kt kt k k lR lR l l m2 m2 m m n n nv nv n n oH oH o o p p p p p p qd qd q q rF rF r r s s s s s s tV tV t t u. u. u u v v vj vj v v wD wD w w x x x x x x yX yX y y z< z< z z {( {( { { | | |x |x | | }L }L } } ~ ~ ~ ~ ~ ~ P P   " " X X ( ( d d 4 4   n n P P ~( ~__IMPORT_DESCRIPTOR_LIBEAY32__NULL_IMPORT_DESCRIPTORLIBEAY32_NULL_THUNK_DATA_SSLeay__imp__SSLeay_ACCESS_DESCRIPTION_free__imp__ACCESS_DESCRIPTION_free_ACCESS_DESCRIPTION_it__imp__ACCESS_DESCRIPTION_it_ACCESS_DESCRIPTION_new__imp__ACCESS_DESCRIPTION_new_AES_bi_ige_encrypt__imp__AES_bi_ige_encrypt_AES_cbc_encrypt__imp__AES_cbc_encrypt_AES_cfb128_encrypt__imp__AES_cfb128_encrypt_AES_cfb1_encrypt__imp__AES_cfb1_encrypt_AES_cfb8_encrypt__imp__AES_cfb8_encrypt_AES_ctr128_encrypt__imp__AES_ctr128_encrypt_AES_decrypt__imp__AES_decrypt_AES_ecb_encrypt__imp__AES_ecb_encrypt_AES_encrypt__imp__AES_encrypt_AES_ige_encrypt__imp__AES_ige_encrypt_AES_ofb128_encrypt__imp__AES_ofb128_encrypt_AES_options__imp__AES_options_AES_set_decrypt_key__imp__AES_set_decrypt_key_AES_set_encrypt_key__imp__AES_set_encrypt_key_AES_unwrap_key__imp__AES_unwrap_key_AES_wrap_key__imp__AES_wrap_key_ASN1_ANY_it__imp__ASN1_ANY_it_ASN1_BIT_STRING_check__imp__ASN1_BIT_STRING_check_ASN1_BIT_STRING_free__imp__ASN1_BIT_STRING_free_ASN1_BIT_STRING_get_bit__imp__ASN1_BIT_STRING_get_bit_ASN1_BIT_STRING_it__imp__ASN1_BIT_STRING_it_ASN1_BIT_STRING_name_print__imp__ASN1_BIT_STRING_name_print_ASN1_BIT_STRING_new__imp__ASN1_BIT_STRING_new_ASN1_BIT_STRING_num_asc__imp__ASN1_BIT_STRING_num_asc_ASN1_BIT_STRING_set__imp__ASN1_BIT_STRING_set_ASN1_BIT_STRING_set_asc__imp__ASN1_BIT_STRING_set_asc_ASN1_BIT_STRING_set_bit__imp__ASN1_BIT_STRING_set_bit_ASN1_BMPSTRING_free__imp__ASN1_BMPSTRING_free_ASN1_BMPSTRING_it__imp__ASN1_BMPSTRING_it_ASN1_BMPSTRING_new__imp__ASN1_BMPSTRING_new_ASN1_BOOLEAN_it__imp__ASN1_BOOLEAN_it_ASN1_ENUMERATED_free__imp__ASN1_ENUMERATED_free_ASN1_ENUMERATED_get__imp__ASN1_ENUMERATED_get_ASN1_ENUMERATED_it__imp__ASN1_ENUMERATED_it_ASN1_ENUMERATED_new__imp__ASN1_ENUMERATED_new_ASN1_ENUMERATED_set__imp__ASN1_ENUMERATED_set_ASN1_ENUMERATED_to_BN__imp__ASN1_ENUMERATED_to_BN_ASN1_FBOOLEAN_it__imp__ASN1_FBOOLEAN_it_ASN1_GENERALIZEDTIME_adj__imp__ASN1_GENERALIZEDTIME_adj_ASN1_GENERALIZEDTIME_check__imp__ASN1_GENERALIZEDTIME_check_ASN1_GENERALIZEDTIME_free__imp__ASN1_GENERALIZEDTIME_free_ASN1_GENERALIZEDTIME_it__imp__ASN1_GENERALIZEDTIME_it_ASN1_GENERALIZEDTIME_new__imp__ASN1_GENERALIZEDTIME_new_ASN1_GENERALIZEDTIME_print__imp__ASN1_GENERALIZEDTIME_print_ASN1_GENERALIZEDTIME_set__imp__ASN1_GENERALIZEDTIME_set_ASN1_GENERALIZEDTIME_set_string__imp__ASN1_GENERALIZEDTIME_set_string_ASN1_GENERALSTRING_free__imp__ASN1_GENERALSTRING_free_ASN1_GENERALSTRING_it__imp__ASN1_GENERALSTRING_it_ASN1_GENERALSTRING_new__imp__ASN1_GENERALSTRING_new_ASN1_IA5STRING_free__imp__ASN1_IA5STRING_free_ASN1_IA5STRING_it__imp__ASN1_IA5STRING_it_ASN1_IA5STRING_new__imp__ASN1_IA5STRING_new_ASN1_INTEGER_cmp__imp__ASN1_INTEGER_cmp_ASN1_INTEGER_dup__imp__ASN1_INTEGER_dup_ASN1_INTEGER_free__imp__ASN1_INTEGER_free_ASN1_INTEGER_get__imp__ASN1_INTEGER_get_ASN1_INTEGER_it__imp__ASN1_INTEGER_it_ASN1_INTEGER_new__imp__ASN1_INTEGER_new_ASN1_INTEGER_set__imp__ASN1_INTEGER_set_ASN1_INTEGER_to_BN__imp__ASN1_INTEGER_to_BN_ASN1_NULL_free__imp__ASN1_NULL_free_ASN1_NULL_it__imp__ASN1_NULL_it_ASN1_NULL_new__imp__ASN1_NULL_new_ASN1_OBJECT_create__imp__ASN1_OBJECT_create_ASN1_OBJECT_free__imp__ASN1_OBJECT_free_ASN1_OBJECT_it__imp__ASN1_OBJECT_it_ASN1_OBJECT_new__imp__ASN1_OBJECT_new_ASN1_OCTET_STRING_NDEF_it__imp__ASN1_OCTET_STRING_NDEF_it_ASN1_OCTET_STRING_cmp__imp__ASN1_OCTET_STRING_cmp_ASN1_OCTET_STRING_dup__imp__ASN1_OCTET_STRING_dup_ASN1_OCTET_STRING_free__imp__ASN1_OCTET_STRING_free_ASN1_OCTET_STRING_it__imp__ASN1_OCTET_STRING_it_ASN1_OCTET_STRING_new__imp__ASN1_OCTET_STRING_new_ASN1_OCTET_STRING_set__imp__ASN1_OCTET_STRING_set_ASN1_PCTX_free__imp__ASN1_PCTX_free_ASN1_PCTX_get_cert_flags__imp__ASN1_PCTX_get_cert_flags_ASN1_PCTX_get_flags__imp__ASN1_PCTX_get_flags_ASN1_PCTX_get_nm_flags__imp__ASN1_PCTX_get_nm_flags_ASN1_PCTX_get_oid_flags__imp__ASN1_PCTX_get_oid_flags_ASN1_PCTX_get_str_flags__imp__ASN1_PCTX_get_str_flags_ASN1_PCTX_new__imp__ASN1_PCTX_new_ASN1_PCTX_set_cert_flags__imp__ASN1_PCTX_set_cert_flags_ASN1_PCTX_set_flags__imp__ASN1_PCTX_set_flags_ASN1_PCTX_set_nm_flags__imp__ASN1_PCTX_set_nm_flags_ASN1_PCTX_set_oid_flags__imp__ASN1_PCTX_set_oid_flags_ASN1_PCTX_set_str_flags__imp__ASN1_PCTX_set_str_flags_ASN1_PRINTABLESTRING_free__imp__ASN1_PRINTABLESTRING_free_ASN1_PRINTABLESTRING_it__imp__ASN1_PRINTABLESTRING_it_ASN1_PRINTABLESTRING_new__imp__ASN1_PRINTABLESTRING_new_ASN1_PRINTABLE_free__imp__ASN1_PRINTABLE_free_ASN1_PRINTABLE_it__imp__ASN1_PRINTABLE_it_ASN1_PRINTABLE_new__imp__ASN1_PRINTABLE_new_ASN1_PRINTABLE_type__imp__ASN1_PRINTABLE_type_ASN1_SEQUENCE_ANY_it__imp__ASN1_SEQUENCE_ANY_it_ASN1_SEQUENCE_it__imp__ASN1_SEQUENCE_it_ASN1_SET_ANY_it__imp__ASN1_SET_ANY_it_ASN1_STRING_TABLE_add__imp__ASN1_STRING_TABLE_add_ASN1_STRING_TABLE_cleanup__imp__ASN1_STRING_TABLE_cleanup_ASN1_STRING_TABLE_get__imp__ASN1_STRING_TABLE_get_ASN1_STRING_clear_free__imp__ASN1_STRING_clear_free_ASN1_STRING_cmp__imp__ASN1_STRING_cmp_ASN1_STRING_copy__imp__ASN1_STRING_copy_ASN1_STRING_data__imp__ASN1_STRING_data_ASN1_STRING_dup__imp__ASN1_STRING_dup_ASN1_STRING_free__imp__ASN1_STRING_free_ASN1_STRING_get_default_mask__imp__ASN1_STRING_get_default_mask_ASN1_STRING_length__imp__ASN1_STRING_length_ASN1_STRING_length_set__imp__ASN1_STRING_length_set_ASN1_STRING_new__imp__ASN1_STRING_new_ASN1_STRING_print__imp__ASN1_STRING_print_ASN1_STRING_print_ex__imp__ASN1_STRING_print_ex_ASN1_STRING_print_ex_fp__imp__ASN1_STRING_print_ex_fp_ASN1_STRING_set0__imp__ASN1_STRING_set0_ASN1_STRING_set__imp__ASN1_STRING_set_ASN1_STRING_set_by_NID__imp__ASN1_STRING_set_by_NID_ASN1_STRING_set_default_mask__imp__ASN1_STRING_set_default_mask_ASN1_STRING_set_default_mask_asc__imp__ASN1_STRING_set_default_mask_asc_ASN1_STRING_to_UTF8__imp__ASN1_STRING_to_UTF8_ASN1_STRING_type__imp__ASN1_STRING_type_ASN1_STRING_type_new__imp__ASN1_STRING_type_new_ASN1_T61STRING_free__imp__ASN1_T61STRING_free_ASN1_T61STRING_it__imp__ASN1_T61STRING_it_ASN1_T61STRING_new__imp__ASN1_T61STRING_new_ASN1_TBOOLEAN_it__imp__ASN1_TBOOLEAN_it_ASN1_TIME_adj__imp__ASN1_TIME_adj_ASN1_TIME_check__imp__ASN1_TIME_check_ASN1_TIME_diff__imp__ASN1_TIME_diff_ASN1_TIME_free__imp__ASN1_TIME_free_ASN1_TIME_it__imp__ASN1_TIME_it_ASN1_TIME_new__imp__ASN1_TIME_new_ASN1_TIME_print__imp__ASN1_TIME_print_ASN1_TIME_set__imp__ASN1_TIME_set_ASN1_TIME_set_string__imp__ASN1_TIME_set_string_ASN1_TIME_to_generalizedtime__imp__ASN1_TIME_to_generalizedtime_ASN1_TYPE_cmp__imp__ASN1_TYPE_cmp_ASN1_TYPE_free__imp__ASN1_TYPE_free_ASN1_TYPE_get__imp__ASN1_TYPE_get_ASN1_TYPE_get_int_octetstring__imp__ASN1_TYPE_get_int_octetstring_ASN1_TYPE_get_octetstring__imp__ASN1_TYPE_get_octetstring_ASN1_TYPE_new__imp__ASN1_TYPE_new_ASN1_TYPE_set1__imp__ASN1_TYPE_set1_ASN1_TYPE_set__imp__ASN1_TYPE_set_ASN1_TYPE_set_int_octetstring__imp__ASN1_TYPE_set_int_octetstring_ASN1_TYPE_set_octetstring__imp__ASN1_TYPE_set_octetstring_ASN1_UNIVERSALSTRING_free__imp__ASN1_UNIVERSALSTRING_free_ASN1_UNIVERSALSTRING_it__imp__ASN1_UNIVERSALSTRING_it_ASN1_UNIVERSALSTRING_new__imp__ASN1_UNIVERSALSTRING_new_ASN1_UNIVERSALSTRING_to_string__imp__ASN1_UNIVERSALSTRING_to_string_ASN1_UTCTIME_adj__imp__ASN1_UTCTIME_adj_ASN1_UTCTIME_check__imp__ASN1_UTCTIME_check_ASN1_UTCTIME_cmp_time_t__imp__ASN1_UTCTIME_cmp_time_t_ASN1_UTCTIME_free__imp__ASN1_UTCTIME_free_ASN1_UTCTIME_it__imp__ASN1_UTCTIME_it_ASN1_UTCTIME_new__imp__ASN1_UTCTIME_new_ASN1_UTCTIME_print__imp__ASN1_UTCTIME_print_ASN1_UTCTIME_set__imp__ASN1_UTCTIME_set_ASN1_UTCTIME_set_string__imp__ASN1_UTCTIME_set_string_ASN1_UTF8STRING_free__imp__ASN1_UTF8STRING_free_ASN1_UTF8STRING_it__imp__ASN1_UTF8STRING_it_ASN1_UTF8STRING_new__imp__ASN1_UTF8STRING_new_ASN1_VISIBLESTRING_free__imp__ASN1_VISIBLESTRING_free_ASN1_VISIBLESTRING_it__imp__ASN1_VISIBLESTRING_it_ASN1_VISIBLESTRING_new__imp__ASN1_VISIBLESTRING_new_ASN1_add_oid_module__imp__ASN1_add_oid_module_ASN1_bn_print__imp__ASN1_bn_print_ASN1_check_infinite_end__imp__ASN1_check_infinite_end_ASN1_const_check_infinite_end__imp__ASN1_const_check_infinite_end_ASN1_d2i_bio__imp__ASN1_d2i_bio_ASN1_d2i_fp__imp__ASN1_d2i_fp_ASN1_digest__imp__ASN1_digest_ASN1_dup__imp__ASN1_dup_ASN1_generate_nconf__imp__ASN1_generate_nconf_ASN1_generate_v3__imp__ASN1_generate_v3_ASN1_get_object__imp__ASN1_get_object_ASN1_i2d_bio__imp__ASN1_i2d_bio_ASN1_i2d_fp__imp__ASN1_i2d_fp_ASN1_item_d2i__imp__ASN1_item_d2i_ASN1_item_d2i_bio__imp__ASN1_item_d2i_bio_ASN1_item_d2i_fp__imp__ASN1_item_d2i_fp_ASN1_item_digest__imp__ASN1_item_digest_ASN1_item_dup__imp__ASN1_item_dup_ASN1_item_ex_d2i__imp__ASN1_item_ex_d2i_ASN1_item_ex_free__imp__ASN1_item_ex_free_ASN1_item_ex_i2d__imp__ASN1_item_ex_i2d_ASN1_item_ex_new__imp__ASN1_item_ex_new_ASN1_item_free__imp__ASN1_item_free_ASN1_item_i2d__imp__ASN1_item_i2d_ASN1_item_i2d_bio__imp__ASN1_item_i2d_bio_ASN1_item_i2d_fp__imp__ASN1_item_i2d_fp_ASN1_item_ndef_i2d__imp__ASN1_item_ndef_i2d_ASN1_item_new__imp__ASN1_item_new_ASN1_item_pack__imp__ASN1_item_pack_ASN1_item_print__imp__ASN1_item_print_ASN1_item_sign__imp__ASN1_item_sign_ASN1_item_sign_ctx__imp__ASN1_item_sign_ctx_ASN1_item_unpack__imp__ASN1_item_unpack_ASN1_item_verify__imp__ASN1_item_verify_ASN1_mbstring_copy__imp__ASN1_mbstring_copy_ASN1_mbstring_ncopy__imp__ASN1_mbstring_ncopy_ASN1_object_size__imp__ASN1_object_size_ASN1_pack_string__imp__ASN1_pack_string_ASN1_parse__imp__ASN1_parse_ASN1_parse_dump__imp__ASN1_parse_dump_ASN1_primitive_free__imp__ASN1_primitive_free_ASN1_primitive_new__imp__ASN1_primitive_new_ASN1_put_eoc__imp__ASN1_put_eoc_ASN1_put_object__imp__ASN1_put_object_ASN1_seq_pack__imp__ASN1_seq_pack_ASN1_seq_unpack__imp__ASN1_seq_unpack_ASN1_sign__imp__ASN1_sign_ASN1_tag2bit__imp__ASN1_tag2bit_ASN1_tag2str__imp__ASN1_tag2str_ASN1_template_d2i__imp__ASN1_template_d2i_ASN1_template_free__imp__ASN1_template_free_ASN1_template_i2d__imp__ASN1_template_i2d_ASN1_template_new__imp__ASN1_template_new_ASN1_unpack_string__imp__ASN1_unpack_string_ASN1_verify__imp__ASN1_verify_AUTHORITY_INFO_ACCESS_free__imp__AUTHORITY_INFO_ACCESS_free_AUTHORITY_INFO_ACCESS_it__imp__AUTHORITY_INFO_ACCESS_it_AUTHORITY_INFO_ACCESS_new__imp__AUTHORITY_INFO_ACCESS_new_AUTHORITY_KEYID_free__imp__AUTHORITY_KEYID_free_AUTHORITY_KEYID_it__imp__AUTHORITY_KEYID_it_AUTHORITY_KEYID_new__imp__AUTHORITY_KEYID_new_BASIC_CONSTRAINTS_free__imp__BASIC_CONSTRAINTS_free_BASIC_CONSTRAINTS_it__imp__BASIC_CONSTRAINTS_it_BASIC_CONSTRAINTS_new__imp__BASIC_CONSTRAINTS_new_BF_cbc_encrypt__imp__BF_cbc_encrypt_BF_cfb64_encrypt__imp__BF_cfb64_encrypt_BF_decrypt__imp__BF_decrypt_BF_ecb_encrypt__imp__BF_ecb_encrypt_BF_encrypt__imp__BF_encrypt_BF_ofb64_encrypt__imp__BF_ofb64_encrypt_BF_options__imp__BF_options_BF_set_key__imp__BF_set_key_BIGNUM_it__imp__BIGNUM_it_BIO_accept__imp__BIO_accept_BIO_asn1_get_prefix__imp__BIO_asn1_get_prefix_BIO_asn1_get_suffix__imp__BIO_asn1_get_suffix_BIO_asn1_set_prefix__imp__BIO_asn1_set_prefix_BIO_asn1_set_suffix__imp__BIO_asn1_set_suffix_BIO_callback_ctrl__imp__BIO_callback_ctrl_BIO_clear_flags__imp__BIO_clear_flags_BIO_copy_next_retry__imp__BIO_copy_next_retry_BIO_ctrl__imp__BIO_ctrl_BIO_ctrl_get_read_request__imp__BIO_ctrl_get_read_request_BIO_ctrl_get_write_guarantee__imp__BIO_ctrl_get_write_guarantee_BIO_ctrl_pending__imp__BIO_ctrl_pending_BIO_ctrl_reset_read_request__imp__BIO_ctrl_reset_read_request_BIO_ctrl_wpending__imp__BIO_ctrl_wpending_BIO_debug_callback__imp__BIO_debug_callback_BIO_dgram_non_fatal_error__imp__BIO_dgram_non_fatal_error_BIO_dump__imp__BIO_dump_BIO_dump_cb__imp__BIO_dump_cb_BIO_dump_fp__imp__BIO_dump_fp_BIO_dump_indent__imp__BIO_dump_indent_BIO_dump_indent_cb__imp__BIO_dump_indent_cb_BIO_dump_indent_fp__imp__BIO_dump_indent_fp_BIO_dup_chain__imp__BIO_dup_chain_BIO_f_asn1__imp__BIO_f_asn1_BIO_f_base64__imp__BIO_f_base64_BIO_f_buffer__imp__BIO_f_buffer_BIO_f_cipher__imp__BIO_f_cipher_BIO_f_md__imp__BIO_f_md_BIO_f_nbio_test__imp__BIO_f_nbio_test_BIO_f_null__imp__BIO_f_null_BIO_f_reliable__imp__BIO_f_reliable_BIO_fd_non_fatal_error__imp__BIO_fd_non_fatal_error_BIO_fd_should_retry__imp__BIO_fd_should_retry_BIO_find_type__imp__BIO_find_type_BIO_free__imp__BIO_free_BIO_free_all__imp__BIO_free_all_BIO_get_accept_socket__imp__BIO_get_accept_socket_BIO_get_callback__imp__BIO_get_callback_BIO_get_callback_arg__imp__BIO_get_callback_arg_BIO_get_ex_data__imp__BIO_get_ex_data_BIO_get_ex_new_index__imp__BIO_get_ex_new_index_BIO_get_host_ip__imp__BIO_get_host_ip_BIO_get_port__imp__BIO_get_port_BIO_get_retry_BIO__imp__BIO_get_retry_BIO_BIO_get_retry_reason__imp__BIO_get_retry_reason_BIO_gethostbyname__imp__BIO_gethostbyname_BIO_gets__imp__BIO_gets_BIO_hex_string__imp__BIO_hex_string_BIO_indent__imp__BIO_indent_BIO_int_ctrl__imp__BIO_int_ctrl_BIO_method_name__imp__BIO_method_name_BIO_method_type__imp__BIO_method_type_BIO_new__imp__BIO_new_BIO_new_CMS__imp__BIO_new_CMS_BIO_new_NDEF__imp__BIO_new_NDEF_BIO_new_PKCS7__imp__BIO_new_PKCS7_BIO_new_accept__imp__BIO_new_accept_BIO_new_bio_pair__imp__BIO_new_bio_pair_BIO_new_connect__imp__BIO_new_connect_BIO_new_dgram__imp__BIO_new_dgram_BIO_new_fd__imp__BIO_new_fd_BIO_new_file__imp__BIO_new_file_BIO_new_fp__imp__BIO_new_fp_BIO_new_mem_buf__imp__BIO_new_mem_buf_BIO_new_socket__imp__BIO_new_socket_BIO_next__imp__BIO_next_BIO_nread0__imp__BIO_nread0_BIO_nread__imp__BIO_nread_BIO_number_read__imp__BIO_number_read_BIO_number_written__imp__BIO_number_written_BIO_nwrite0__imp__BIO_nwrite0_BIO_nwrite__imp__BIO_nwrite_BIO_pop__imp__BIO_pop_BIO_printf__imp__BIO_printf_BIO_ptr_ctrl__imp__BIO_ptr_ctrl_BIO_push__imp__BIO_push_BIO_puts__imp__BIO_puts_BIO_read__imp__BIO_read_BIO_s_accept__imp__BIO_s_accept_BIO_s_bio__imp__BIO_s_bio_BIO_s_connect__imp__BIO_s_connect_BIO_s_datagram__imp__BIO_s_datagram_BIO_s_fd__imp__BIO_s_fd_BIO_s_file__imp__BIO_s_file_BIO_s_mem__imp__BIO_s_mem_BIO_s_null__imp__BIO_s_null_BIO_s_socket__imp__BIO_s_socket_BIO_set__imp__BIO_set_BIO_set_callback__imp__BIO_set_callback_BIO_set_callback_arg__imp__BIO_set_callback_arg_BIO_set_cipher__imp__BIO_set_cipher_BIO_set_ex_data__imp__BIO_set_ex_data_BIO_set_flags__imp__BIO_set_flags_BIO_set_tcp_ndelay__imp__BIO_set_tcp_ndelay_BIO_snprintf__imp__BIO_snprintf_BIO_sock_cleanup__imp__BIO_sock_cleanup_BIO_sock_error__imp__BIO_sock_error_BIO_sock_init__imp__BIO_sock_init_BIO_sock_non_fatal_error__imp__BIO_sock_non_fatal_error_BIO_sock_should_retry__imp__BIO_sock_should_retry_BIO_socket_ioctl__imp__BIO_socket_ioctl_BIO_socket_nbio__imp__BIO_socket_nbio_BIO_test_flags__imp__BIO_test_flags_BIO_vfree__imp__BIO_vfree_BIO_vprintf__imp__BIO_vprintf_BIO_vsnprintf__imp__BIO_vsnprintf_BIO_write__imp__BIO_write_BN_BLINDING_convert__imp__BN_BLINDING_convert_BN_BLINDING_convert_ex__imp__BN_BLINDING_convert_ex_BN_BLINDING_create_param__imp__BN_BLINDING_create_param_BN_BLINDING_free__imp__BN_BLINDING_free_BN_BLINDING_get_flags__imp__BN_BLINDING_get_flags_BN_BLINDING_get_thread_id__imp__BN_BLINDING_get_thread_id_BN_BLINDING_invert__imp__BN_BLINDING_invert_BN_BLINDING_invert_ex__imp__BN_BLINDING_invert_ex_BN_BLINDING_new__imp__BN_BLINDING_new_BN_BLINDING_set_flags__imp__BN_BLINDING_set_flags_BN_BLINDING_set_thread_id__imp__BN_BLINDING_set_thread_id_BN_BLINDING_thread_id__imp__BN_BLINDING_thread_id_BN_BLINDING_update__imp__BN_BLINDING_update_BN_CTX_end__imp__BN_CTX_end_BN_CTX_free__imp__BN_CTX_free_BN_CTX_get__imp__BN_CTX_get_BN_CTX_init__imp__BN_CTX_init_BN_CTX_new__imp__BN_CTX_new_BN_CTX_start__imp__BN_CTX_start_BN_GENCB_call__imp__BN_GENCB_call_BN_GF2m_add__imp__BN_GF2m_add_BN_GF2m_arr2poly__imp__BN_GF2m_arr2poly_BN_GF2m_mod__imp__BN_GF2m_mod_BN_GF2m_mod_arr__imp__BN_GF2m_mod_arr_BN_GF2m_mod_div__imp__BN_GF2m_mod_div_BN_GF2m_mod_div_arr__imp__BN_GF2m_mod_div_arr_BN_GF2m_mod_exp__imp__BN_GF2m_mod_exp_BN_GF2m_mod_exp_arr__imp__BN_GF2m_mod_exp_arr_BN_GF2m_mod_inv__imp__BN_GF2m_mod_inv_BN_GF2m_mod_inv_arr__imp__BN_GF2m_mod_inv_arr_BN_GF2m_mod_mul__imp__BN_GF2m_mod_mul_BN_GF2m_mod_mul_arr__imp__BN_GF2m_mod_mul_arr_BN_GF2m_mod_solve_quad__imp__BN_GF2m_mod_solve_quad_BN_GF2m_mod_solve_quad_arr__imp__BN_GF2m_mod_solve_quad_arr_BN_GF2m_mod_sqr__imp__BN_GF2m_mod_sqr_BN_GF2m_mod_sqr_arr__imp__BN_GF2m_mod_sqr_arr_BN_GF2m_mod_sqrt__imp__BN_GF2m_mod_sqrt_BN_GF2m_mod_sqrt_arr__imp__BN_GF2m_mod_sqrt_arr_BN_GF2m_poly2arr__imp__BN_GF2m_poly2arr_BN_MONT_CTX_copy__imp__BN_MONT_CTX_copy_BN_MONT_CTX_free__imp__BN_MONT_CTX_free_BN_MONT_CTX_init__imp__BN_MONT_CTX_init_BN_MONT_CTX_new__imp__BN_MONT_CTX_new_BN_MONT_CTX_set__imp__BN_MONT_CTX_set_BN_MONT_CTX_set_locked__imp__BN_MONT_CTX_set_locked_BN_RECP_CTX_free__imp__BN_RECP_CTX_free_BN_RECP_CTX_init__imp__BN_RECP_CTX_init_BN_RECP_CTX_new__imp__BN_RECP_CTX_new_BN_RECP_CTX_set__imp__BN_RECP_CTX_set_BN_X931_derive_prime_ex__imp__BN_X931_derive_prime_ex_BN_X931_generate_Xpq__imp__BN_X931_generate_Xpq_BN_X931_generate_prime_ex__imp__BN_X931_generate_prime_ex_BN_add__imp__BN_add_BN_add_word__imp__BN_add_word_BN_asc2bn__imp__BN_asc2bn_BN_bin2bn__imp__BN_bin2bn_BN_bn2bin__imp__BN_bn2bin_BN_bn2dec__imp__BN_bn2dec_BN_bn2hex__imp__BN_bn2hex_BN_bn2mpi__imp__BN_bn2mpi_BN_bntest_rand__imp__BN_bntest_rand_BN_clear__imp__BN_clear_BN_clear_bit__imp__BN_clear_bit_BN_clear_free__imp__BN_clear_free_BN_cmp__imp__BN_cmp_BN_consttime_swap__imp__BN_consttime_swap_BN_copy__imp__BN_copy_BN_dec2bn__imp__BN_dec2bn_BN_div__imp__BN_div_BN_div_recp__imp__BN_div_recp_BN_div_word__imp__BN_div_word_BN_dup__imp__BN_dup_BN_exp__imp__BN_exp_BN_free__imp__BN_free_BN_from_montgomery__imp__BN_from_montgomery_BN_gcd__imp__BN_gcd_BN_generate_prime__imp__BN_generate_prime_BN_generate_prime_ex__imp__BN_generate_prime_ex_BN_get0_nist_prime_192__imp__BN_get0_nist_prime_192_BN_get0_nist_prime_224__imp__BN_get0_nist_prime_224_BN_get0_nist_prime_256__imp__BN_get0_nist_prime_256_BN_get0_nist_prime_384__imp__BN_get0_nist_prime_384_BN_get0_nist_prime_521__imp__BN_get0_nist_prime_521_BN_get_params__imp__BN_get_params_BN_get_word__imp__BN_get_word_BN_hex2bn__imp__BN_hex2bn_BN_init__imp__BN_init_BN_is_bit_set__imp__BN_is_bit_set_BN_is_prime__imp__BN_is_prime_BN_is_prime_ex__imp__BN_is_prime_ex_BN_is_prime_fasttest__imp__BN_is_prime_fasttest_BN_is_prime_fasttest_ex__imp__BN_is_prime_fasttest_ex_BN_kronecker__imp__BN_kronecker_BN_lshift1__imp__BN_lshift1_BN_lshift__imp__BN_lshift_BN_mask_bits__imp__BN_mask_bits_BN_mod_add__imp__BN_mod_add_BN_mod_add_quick__imp__BN_mod_add_quick_BN_mod_exp2_mont__imp__BN_mod_exp2_mont_BN_mod_exp__imp__BN_mod_exp_BN_mod_exp_mont__imp__BN_mod_exp_mont_BN_mod_exp_mont_consttime__imp__BN_mod_exp_mont_consttime_BN_mod_exp_mont_word__imp__BN_mod_exp_mont_word_BN_mod_exp_recp__imp__BN_mod_exp_recp_BN_mod_exp_simple__imp__BN_mod_exp_simple_BN_mod_inverse__imp__BN_mod_inverse_BN_mod_lshift1__imp__BN_mod_lshift1_BN_mod_lshift1_quick__imp__BN_mod_lshift1_quick_BN_mod_lshift__imp__BN_mod_lshift_BN_mod_lshift_quick__imp__BN_mod_lshift_quick_BN_mod_mul__imp__BN_mod_mul_BN_mod_mul_montgomery__imp__BN_mod_mul_montgomery_BN_mod_mul_reciprocal__imp__BN_mod_mul_reciprocal_BN_mod_sqr__imp__BN_mod_sqr_BN_mod_sqrt__imp__BN_mod_sqrt_BN_mod_sub__imp__BN_mod_sub_BN_mod_sub_quick__imp__BN_mod_sub_quick_BN_mod_word__imp__BN_mod_word_BN_mpi2bn__imp__BN_mpi2bn_BN_mul__imp__BN_mul_BN_mul_word__imp__BN_mul_word_BN_new__imp__BN_new_BN_nist_mod_192__imp__BN_nist_mod_192_BN_nist_mod_224__imp__BN_nist_mod_224_BN_nist_mod_256__imp__BN_nist_mod_256_BN_nist_mod_384__imp__BN_nist_mod_384_BN_nist_mod_521__imp__BN_nist_mod_521_BN_nnmod__imp__BN_nnmod_BN_num_bits__imp__BN_num_bits_BN_num_bits_word__imp__BN_num_bits_word_BN_options__imp__BN_options_BN_print__imp__BN_print_BN_print_fp__imp__BN_print_fp_BN_pseudo_rand__imp__BN_pseudo_rand_BN_pseudo_rand_range__imp__BN_pseudo_rand_range_BN_rand__imp__BN_rand_BN_rand_range__imp__BN_rand_range_BN_reciprocal__imp__BN_reciprocal_BN_rshift1__imp__BN_rshift1_BN_rshift__imp__BN_rshift_BN_set_bit__imp__BN_set_bit_BN_set_negative__imp__BN_set_negative_BN_set_params__imp__BN_set_params_BN_set_word__imp__BN_set_word_BN_sqr__imp__BN_sqr_BN_sub__imp__BN_sub_BN_sub_word__imp__BN_sub_word_BN_swap__imp__BN_swap_BN_to_ASN1_ENUMERATED__imp__BN_to_ASN1_ENUMERATED_BN_to_ASN1_INTEGER__imp__BN_to_ASN1_INTEGER_BN_uadd__imp__BN_uadd_BN_ucmp__imp__BN_ucmp_BN_usub__imp__BN_usub_BN_value_one__imp__BN_value_one_BUF_MEM_free__imp__BUF_MEM_free_BUF_MEM_grow__imp__BUF_MEM_grow_BUF_MEM_grow_clean__imp__BUF_MEM_grow_clean_BUF_MEM_new__imp__BUF_MEM_new_BUF_memdup__imp__BUF_memdup_BUF_reverse__imp__BUF_reverse_BUF_strdup__imp__BUF_strdup_BUF_strlcat__imp__BUF_strlcat_BUF_strlcpy__imp__BUF_strlcpy_BUF_strndup__imp__BUF_strndup_BUF_strnlen__imp__BUF_strnlen_CAST_cbc_encrypt__imp__CAST_cbc_encrypt_CAST_cfb64_encrypt__imp__CAST_cfb64_encrypt_CAST_decrypt__imp__CAST_decrypt_CAST_ecb_encrypt__imp__CAST_ecb_encrypt_CAST_encrypt__imp__CAST_encrypt_CAST_ofb64_encrypt__imp__CAST_ofb64_encrypt_CAST_set_key__imp__CAST_set_key_CBIGNUM_it__imp__CBIGNUM_it_CERTIFICATEPOLICIES_free__imp__CERTIFICATEPOLICIES_free_CERTIFICATEPOLICIES_it__imp__CERTIFICATEPOLICIES_it_CERTIFICATEPOLICIES_new__imp__CERTIFICATEPOLICIES_new_CMAC_CTX_cleanup__imp__CMAC_CTX_cleanup_CMAC_CTX_copy__imp__CMAC_CTX_copy_CMAC_CTX_free__imp__CMAC_CTX_free_CMAC_CTX_get0_cipher_ctx__imp__CMAC_CTX_get0_cipher_ctx_CMAC_CTX_new__imp__CMAC_CTX_new_CMAC_Final__imp__CMAC_Final_CMAC_Init__imp__CMAC_Init_CMAC_Update__imp__CMAC_Update_CMAC_resume__imp__CMAC_resume_CMS_ContentInfo_free__imp__CMS_ContentInfo_free_CMS_ContentInfo_it__imp__CMS_ContentInfo_it_CMS_ContentInfo_new__imp__CMS_ContentInfo_new_CMS_ContentInfo_print_ctx__imp__CMS_ContentInfo_print_ctx_CMS_EncryptedData_decrypt__imp__CMS_EncryptedData_decrypt_CMS_EncryptedData_encrypt__imp__CMS_EncryptedData_encrypt_CMS_EncryptedData_set1_key__imp__CMS_EncryptedData_set1_key_CMS_EnvelopedData_create__imp__CMS_EnvelopedData_create_CMS_ReceiptRequest_create0__imp__CMS_ReceiptRequest_create0_CMS_ReceiptRequest_free__imp__CMS_ReceiptRequest_free_CMS_ReceiptRequest_get0_values__imp__CMS_ReceiptRequest_get0_values_CMS_ReceiptRequest_it__imp__CMS_ReceiptRequest_it_CMS_ReceiptRequest_new__imp__CMS_ReceiptRequest_new_CMS_RecipientEncryptedKey_cert_cmp__imp__CMS_RecipientEncryptedKey_cert_cmp_CMS_RecipientEncryptedKey_get0_id__imp__CMS_RecipientEncryptedKey_get0_id_CMS_RecipientInfo_decrypt__imp__CMS_RecipientInfo_decrypt_CMS_RecipientInfo_encrypt__imp__CMS_RecipientInfo_encrypt_CMS_RecipientInfo_get0_pkey_ctx__imp__CMS_RecipientInfo_get0_pkey_ctx_CMS_RecipientInfo_kari_decrypt__imp__CMS_RecipientInfo_kari_decrypt_CMS_RecipientInfo_kari_get0_alg__imp__CMS_RecipientInfo_kari_get0_alg_CMS_RecipientInfo_kari_get0_ctx__imp__CMS_RecipientInfo_kari_get0_ctx_CMS_RecipientInfo_kari_get0_orig_id__imp__CMS_RecipientInfo_kari_get0_orig_id_CMS_RecipientInfo_kari_get0_reks__imp__CMS_RecipientInfo_kari_get0_reks_CMS_RecipientInfo_kari_orig_id_cmp__imp__CMS_RecipientInfo_kari_orig_id_cmp_CMS_RecipientInfo_kari_set0_pkey__imp__CMS_RecipientInfo_kari_set0_pkey_CMS_RecipientInfo_kekri_get0_id__imp__CMS_RecipientInfo_kekri_get0_id_CMS_RecipientInfo_kekri_id_cmp__imp__CMS_RecipientInfo_kekri_id_cmp_CMS_RecipientInfo_ktri_cert_cmp__imp__CMS_RecipientInfo_ktri_cert_cmp_CMS_RecipientInfo_ktri_get0_algs__imp__CMS_RecipientInfo_ktri_get0_algs_CMS_RecipientInfo_ktri_get0_signer_id__imp__CMS_RecipientInfo_ktri_get0_signer_id_CMS_RecipientInfo_set0_key__imp__CMS_RecipientInfo_set0_key_CMS_RecipientInfo_set0_password__imp__CMS_RecipientInfo_set0_password_CMS_RecipientInfo_set0_pkey__imp__CMS_RecipientInfo_set0_pkey_CMS_RecipientInfo_type__imp__CMS_RecipientInfo_type_CMS_SharedInfo_encode__imp__CMS_SharedInfo_encode_CMS_SignedData_init__imp__CMS_SignedData_init_CMS_SignerInfo_cert_cmp__imp__CMS_SignerInfo_cert_cmp_CMS_SignerInfo_get0_algs__imp__CMS_SignerInfo_get0_algs_CMS_SignerInfo_get0_md_ctx__imp__CMS_SignerInfo_get0_md_ctx_CMS_SignerInfo_get0_pkey_ctx__imp__CMS_SignerInfo_get0_pkey_ctx_CMS_SignerInfo_get0_signature__imp__CMS_SignerInfo_get0_signature_CMS_SignerInfo_get0_signer_id__imp__CMS_SignerInfo_get0_signer_id_CMS_SignerInfo_set1_signer_cert__imp__CMS_SignerInfo_set1_signer_cert_CMS_SignerInfo_sign__imp__CMS_SignerInfo_sign_CMS_SignerInfo_verify__imp__CMS_SignerInfo_verify_CMS_SignerInfo_verify_content__imp__CMS_SignerInfo_verify_content_CMS_add0_CertificateChoices__imp__CMS_add0_CertificateChoices_CMS_add0_RevocationInfoChoice__imp__CMS_add0_RevocationInfoChoice_CMS_add0_cert__imp__CMS_add0_cert_CMS_add0_crl__imp__CMS_add0_crl_CMS_add0_recipient_key__imp__CMS_add0_recipient_key_CMS_add0_recipient_password__imp__CMS_add0_recipient_password_CMS_add1_ReceiptRequest__imp__CMS_add1_ReceiptRequest_CMS_add1_cert__imp__CMS_add1_cert_CMS_add1_crl__imp__CMS_add1_crl_CMS_add1_recipient_cert__imp__CMS_add1_recipient_cert_CMS_add1_signer__imp__CMS_add1_signer_CMS_add_simple_smimecap__imp__CMS_add_simple_smimecap_CMS_add_smimecap__imp__CMS_add_smimecap_CMS_add_standard_smimecap__imp__CMS_add_standard_smimecap_CMS_compress__imp__CMS_compress_CMS_dataFinal__imp__CMS_dataFinal_CMS_dataInit__imp__CMS_dataInit_CMS_data__imp__CMS_data_CMS_data_create__imp__CMS_data_create_CMS_decrypt__imp__CMS_decrypt_CMS_decrypt_set1_key__imp__CMS_decrypt_set1_key_CMS_decrypt_set1_password__imp__CMS_decrypt_set1_password_CMS_decrypt_set1_pkey__imp__CMS_decrypt_set1_pkey_CMS_digest_create__imp__CMS_digest_create_CMS_digest_verify__imp__CMS_digest_verify_CMS_encrypt__imp__CMS_encrypt_CMS_final__imp__CMS_final_CMS_get0_RecipientInfos__imp__CMS_get0_RecipientInfos_CMS_get0_SignerInfos__imp__CMS_get0_SignerInfos_CMS_get0_content__imp__CMS_get0_content_CMS_get0_eContentType__imp__CMS_get0_eContentType_CMS_get0_signers__imp__CMS_get0_signers_CMS_get0_type__imp__CMS_get0_type_CMS_get1_ReceiptRequest__imp__CMS_get1_ReceiptRequest_CMS_get1_certs__imp__CMS_get1_certs_CMS_get1_crls__imp__CMS_get1_crls_CMS_is_detached__imp__CMS_is_detached_CMS_set1_eContentType__imp__CMS_set1_eContentType_CMS_set1_signers_certs__imp__CMS_set1_signers_certs_CMS_set_detached__imp__CMS_set_detached_CMS_sign__imp__CMS_sign_CMS_sign_receipt__imp__CMS_sign_receipt_CMS_signed_add1_attr__imp__CMS_signed_add1_attr_CMS_signed_add1_attr_by_NID__imp__CMS_signed_add1_attr_by_NID_CMS_signed_add1_attr_by_OBJ__imp__CMS_signed_add1_attr_by_OBJ_CMS_signed_add1_attr_by_txt__imp__CMS_signed_add1_attr_by_txt_CMS_signed_delete_attr__imp__CMS_signed_delete_attr_CMS_signed_get0_data_by_OBJ__imp__CMS_signed_get0_data_by_OBJ_CMS_signed_get_attr__imp__CMS_signed_get_attr_CMS_signed_get_attr_by_NID__imp__CMS_signed_get_attr_by_NID_CMS_signed_get_attr_by_OBJ__imp__CMS_signed_get_attr_by_OBJ_CMS_signed_get_attr_count__imp__CMS_signed_get_attr_count_CMS_stream__imp__CMS_stream_CMS_uncompress__imp__CMS_uncompress_CMS_unsigned_add1_attr__imp__CMS_unsigned_add1_attr_CMS_unsigned_add1_attr_by_NID__imp__CMS_unsigned_add1_attr_by_NID_CMS_unsigned_add1_attr_by_OBJ__imp__CMS_unsigned_add1_attr_by_OBJ_CMS_unsigned_add1_attr_by_txt__imp__CMS_unsigned_add1_attr_by_txt_CMS_unsigned_delete_attr__imp__CMS_unsigned_delete_attr_CMS_unsigned_get0_data_by_OBJ__imp__CMS_unsigned_get0_data_by_OBJ_CMS_unsigned_get_attr__imp__CMS_unsigned_get_attr_CMS_unsigned_get_attr_by_NID__imp__CMS_unsigned_get_attr_by_NID_CMS_unsigned_get_attr_by_OBJ__imp__CMS_unsigned_get_attr_by_OBJ_CMS_unsigned_get_attr_count__imp__CMS_unsigned_get_attr_count_CMS_verify__imp__CMS_verify_CMS_verify_receipt__imp__CMS_verify_receipt_COMP_CTX_free__imp__COMP_CTX_free_COMP_CTX_new__imp__COMP_CTX_new_COMP_compress_block__imp__COMP_compress_block_COMP_expand_block__imp__COMP_expand_block_COMP_rle__imp__COMP_rle_COMP_zlib__imp__COMP_zlib_COMP_zlib_cleanup__imp__COMP_zlib_cleanup_CONF_dump_bio__imp__CONF_dump_bio_CONF_dump_fp__imp__CONF_dump_fp_CONF_free__imp__CONF_free_CONF_get1_default_config_file__imp__CONF_get1_default_config_file_CONF_get_number__imp__CONF_get_number_CONF_get_section__imp__CONF_get_section_CONF_get_string__imp__CONF_get_string_CONF_imodule_get_flags__imp__CONF_imodule_get_flags_CONF_imodule_get_module__imp__CONF_imodule_get_module_CONF_imodule_get_name__imp__CONF_imodule_get_name_CONF_imodule_get_usr_data__imp__CONF_imodule_get_usr_data_CONF_imodule_get_value__imp__CONF_imodule_get_value_CONF_imodule_set_flags__imp__CONF_imodule_set_flags_CONF_imodule_set_usr_data__imp__CONF_imodule_set_usr_data_CONF_load__imp__CONF_load_CONF_load_bio__imp__CONF_load_bio_CONF_load_fp__imp__CONF_load_fp_CONF_module_add__imp__CONF_module_add_CONF_module_get_usr_data__imp__CONF_module_get_usr_data_CONF_module_set_usr_data__imp__CONF_module_set_usr_data_CONF_modules_finish__imp__CONF_modules_finish_CONF_modules_free__imp__CONF_modules_free_CONF_modules_load__imp__CONF_modules_load_CONF_modules_load_file__imp__CONF_modules_load_file_CONF_modules_unload__imp__CONF_modules_unload_CONF_parse_list__imp__CONF_parse_list_CONF_set_default_method__imp__CONF_set_default_method_CONF_set_nconf__imp__CONF_set_nconf_CRL_DIST_POINTS_free__imp__CRL_DIST_POINTS_free_CRL_DIST_POINTS_it__imp__CRL_DIST_POINTS_it_CRL_DIST_POINTS_new__imp__CRL_DIST_POINTS_new_CRYPTO_128_unwrap__imp__CRYPTO_128_unwrap_CRYPTO_128_wrap__imp__CRYPTO_128_wrap_CRYPTO_THREADID_cmp__imp__CRYPTO_THREADID_cmp_CRYPTO_THREADID_cpy__imp__CRYPTO_THREADID_cpy_CRYPTO_THREADID_current__imp__CRYPTO_THREADID_current_CRYPTO_THREADID_get_callback__imp__CRYPTO_THREADID_get_callback_CRYPTO_THREADID_hash__imp__CRYPTO_THREADID_hash_CRYPTO_THREADID_set_callback__imp__CRYPTO_THREADID_set_callback_CRYPTO_THREADID_set_numeric__imp__CRYPTO_THREADID_set_numeric_CRYPTO_THREADID_set_pointer__imp__CRYPTO_THREADID_set_pointer_CRYPTO_add_lock__imp__CRYPTO_add_lock_CRYPTO_cbc128_decrypt__imp__CRYPTO_cbc128_decrypt_CRYPTO_cbc128_encrypt__imp__CRYPTO_cbc128_encrypt_CRYPTO_ccm128_aad__imp__CRYPTO_ccm128_aad_CRYPTO_ccm128_decrypt__imp__CRYPTO_ccm128_decrypt_CRYPTO_ccm128_decrypt_ccm64__imp__CRYPTO_ccm128_decrypt_ccm64_CRYPTO_ccm128_encrypt__imp__CRYPTO_ccm128_encrypt_CRYPTO_ccm128_encrypt_ccm64__imp__CRYPTO_ccm128_encrypt_ccm64_CRYPTO_ccm128_init__imp__CRYPTO_ccm128_init_CRYPTO_ccm128_setiv__imp__CRYPTO_ccm128_setiv_CRYPTO_ccm128_tag__imp__CRYPTO_ccm128_tag_CRYPTO_cfb128_1_encrypt__imp__CRYPTO_cfb128_1_encrypt_CRYPTO_cfb128_8_encrypt__imp__CRYPTO_cfb128_8_encrypt_CRYPTO_cfb128_encrypt__imp__CRYPTO_cfb128_encrypt_CRYPTO_cleanup_all_ex_data__imp__CRYPTO_cleanup_all_ex_data_CRYPTO_ctr128_encrypt__imp__CRYPTO_ctr128_encrypt_CRYPTO_ctr128_encrypt_ctr32__imp__CRYPTO_ctr128_encrypt_ctr32_CRYPTO_cts128_decrypt__imp__CRYPTO_cts128_decrypt_CRYPTO_cts128_decrypt_block__imp__CRYPTO_cts128_decrypt_block_CRYPTO_cts128_encrypt__imp__CRYPTO_cts128_encrypt_CRYPTO_cts128_encrypt_block__imp__CRYPTO_cts128_encrypt_block_CRYPTO_dbg_free__imp__CRYPTO_dbg_free_CRYPTO_dbg_get_options__imp__CRYPTO_dbg_get_options_CRYPTO_dbg_malloc__imp__CRYPTO_dbg_malloc_CRYPTO_dbg_realloc__imp__CRYPTO_dbg_realloc_CRYPTO_dbg_set_options__imp__CRYPTO_dbg_set_options_CRYPTO_destroy_dynlockid__imp__CRYPTO_destroy_dynlockid_CRYPTO_dup_ex_data__imp__CRYPTO_dup_ex_data_CRYPTO_ex_data_new_class__imp__CRYPTO_ex_data_new_class_CRYPTO_free__imp__CRYPTO_free_CRYPTO_free_ex_data__imp__CRYPTO_free_ex_data_CRYPTO_free_locked__imp__CRYPTO_free_locked_CRYPTO_gcm128_aad__imp__CRYPTO_gcm128_aad_CRYPTO_gcm128_decrypt__imp__CRYPTO_gcm128_decrypt_CRYPTO_gcm128_decrypt_ctr32__imp__CRYPTO_gcm128_decrypt_ctr32_CRYPTO_gcm128_encrypt__imp__CRYPTO_gcm128_encrypt_CRYPTO_gcm128_encrypt_ctr32__imp__CRYPTO_gcm128_encrypt_ctr32_CRYPTO_gcm128_finish__imp__CRYPTO_gcm128_finish_CRYPTO_gcm128_init__imp__CRYPTO_gcm128_init_CRYPTO_gcm128_new__imp__CRYPTO_gcm128_new_CRYPTO_gcm128_release__imp__CRYPTO_gcm128_release_CRYPTO_gcm128_setiv__imp__CRYPTO_gcm128_setiv_CRYPTO_gcm128_tag__imp__CRYPTO_gcm128_tag_CRYPTO_get_add_lock_callback__imp__CRYPTO_get_add_lock_callback_CRYPTO_get_dynlock_create_callback__imp__CRYPTO_get_dynlock_create_callback_CRYPTO_get_dynlock_destroy_callback__imp__CRYPTO_get_dynlock_destroy_callback_CRYPTO_get_dynlock_lock_callback__imp__CRYPTO_get_dynlock_lock_callback_CRYPTO_get_dynlock_value__imp__CRYPTO_get_dynlock_value_CRYPTO_get_ex_data__imp__CRYPTO_get_ex_data_CRYPTO_get_ex_data_implementation__imp__CRYPTO_get_ex_data_implementation_CRYPTO_get_ex_new_index__imp__CRYPTO_get_ex_new_index_CRYPTO_get_id_callback__imp__CRYPTO_get_id_callback_CRYPTO_get_lock_name__imp__CRYPTO_get_lock_name_CRYPTO_get_locked_mem_ex_functions__imp__CRYPTO_get_locked_mem_ex_functions_CRYPTO_get_locked_mem_functions__imp__CRYPTO_get_locked_mem_functions_CRYPTO_get_locking_callback__imp__CRYPTO_get_locking_callback_CRYPTO_get_mem_debug_functions__imp__CRYPTO_get_mem_debug_functions_CRYPTO_get_mem_debug_options__imp__CRYPTO_get_mem_debug_options_CRYPTO_get_mem_ex_functions__imp__CRYPTO_get_mem_ex_functions_CRYPTO_get_mem_functions__imp__CRYPTO_get_mem_functions_CRYPTO_get_new_dynlockid__imp__CRYPTO_get_new_dynlockid_CRYPTO_get_new_lockid__imp__CRYPTO_get_new_lockid_CRYPTO_is_mem_check_on__imp__CRYPTO_is_mem_check_on_CRYPTO_lock__imp__CRYPTO_lock_CRYPTO_malloc__imp__CRYPTO_malloc_CRYPTO_malloc_locked__imp__CRYPTO_malloc_locked_CRYPTO_mem_ctrl__imp__CRYPTO_mem_ctrl_CRYPTO_mem_leaks__imp__CRYPTO_mem_leaks_CRYPTO_mem_leaks_cb__imp__CRYPTO_mem_leaks_cb_CRYPTO_mem_leaks_fp__imp__CRYPTO_mem_leaks_fp_CRYPTO_memcmp__imp__CRYPTO_memcmp_CRYPTO_new_ex_data__imp__CRYPTO_new_ex_data_CRYPTO_nistcts128_decrypt__imp__CRYPTO_nistcts128_decrypt_CRYPTO_nistcts128_decrypt_block__imp__CRYPTO_nistcts128_decrypt_block_CRYPTO_nistcts128_encrypt__imp__CRYPTO_nistcts128_encrypt_CRYPTO_nistcts128_encrypt_block__imp__CRYPTO_nistcts128_encrypt_block_CRYPTO_num_locks__imp__CRYPTO_num_locks_CRYPTO_ofb128_encrypt__imp__CRYPTO_ofb128_encrypt_CRYPTO_pop_info__imp__CRYPTO_pop_info_CRYPTO_push_info___imp__CRYPTO_push_info__CRYPTO_realloc__imp__CRYPTO_realloc_CRYPTO_realloc_clean__imp__CRYPTO_realloc_clean_CRYPTO_remalloc__imp__CRYPTO_remalloc_CRYPTO_remove_all_info__imp__CRYPTO_remove_all_info_CRYPTO_set_add_lock_callback__imp__CRYPTO_set_add_lock_callback_CRYPTO_set_dynlock_create_callback__imp__CRYPTO_set_dynlock_create_callback_CRYPTO_set_dynlock_destroy_callback__imp__CRYPTO_set_dynlock_destroy_callback_CRYPTO_set_dynlock_lock_callback__imp__CRYPTO_set_dynlock_lock_callback_CRYPTO_set_ex_data__imp__CRYPTO_set_ex_data_CRYPTO_set_ex_data_implementation__imp__CRYPTO_set_ex_data_implementation_CRYPTO_set_id_callback__imp__CRYPTO_set_id_callback_CRYPTO_set_locked_mem_ex_functions__imp__CRYPTO_set_locked_mem_ex_functions_CRYPTO_set_locked_mem_functions__imp__CRYPTO_set_locked_mem_functions_CRYPTO_set_locking_callback__imp__CRYPTO_set_locking_callback_CRYPTO_set_mem_debug_functions__imp__CRYPTO_set_mem_debug_functions_CRYPTO_set_mem_debug_options__imp__CRYPTO_set_mem_debug_options_CRYPTO_set_mem_ex_functions__imp__CRYPTO_set_mem_ex_functions_CRYPTO_set_mem_functions__imp__CRYPTO_set_mem_functions_CRYPTO_strdup__imp__CRYPTO_strdup_CRYPTO_thread_id__imp__CRYPTO_thread_id_CRYPTO_xts128_encrypt__imp__CRYPTO_xts128_encrypt_Camellia_cbc_encrypt__imp__Camellia_cbc_encrypt_Camellia_cfb128_encrypt__imp__Camellia_cfb128_encrypt_Camellia_cfb1_encrypt__imp__Camellia_cfb1_encrypt_Camellia_cfb8_encrypt__imp__Camellia_cfb8_encrypt_Camellia_ctr128_encrypt__imp__Camellia_ctr128_encrypt_Camellia_decrypt__imp__Camellia_decrypt_Camellia_ecb_encrypt__imp__Camellia_ecb_encrypt_Camellia_encrypt__imp__Camellia_encrypt_Camellia_ofb128_encrypt__imp__Camellia_ofb128_encrypt_Camellia_set_key__imp__Camellia_set_key_DES_cbc_cksum__imp__DES_cbc_cksum_DES_cbc_encrypt__imp__DES_cbc_encrypt_DES_cfb64_encrypt__imp__DES_cfb64_encrypt_DES_cfb_encrypt__imp__DES_cfb_encrypt_DES_check_key_parity__imp__DES_check_key_parity_DES_crypt__imp__DES_crypt_DES_decrypt3__imp__DES_decrypt3_DES_ecb3_encrypt__imp__DES_ecb3_encrypt_DES_ecb_encrypt__imp__DES_ecb_encrypt_DES_ede3_cbc_encrypt__imp__DES_ede3_cbc_encrypt_DES_ede3_cbcm_encrypt__imp__DES_ede3_cbcm_encrypt_DES_ede3_cfb64_encrypt__imp__DES_ede3_cfb64_encrypt_DES_ede3_cfb_encrypt__imp__DES_ede3_cfb_encrypt_DES_ede3_ofb64_encrypt__imp__DES_ede3_ofb64_encrypt_DES_enc_read__imp__DES_enc_read_DES_enc_write__imp__DES_enc_write_DES_encrypt1__imp__DES_encrypt1_DES_encrypt2__imp__DES_encrypt2_DES_encrypt3__imp__DES_encrypt3_DES_fcrypt__imp__DES_fcrypt_DES_is_weak_key__imp__DES_is_weak_key_DES_key_sched__imp__DES_key_sched_DES_ncbc_encrypt__imp__DES_ncbc_encrypt_DES_ofb64_encrypt__imp__DES_ofb64_encrypt_DES_ofb_encrypt__imp__DES_ofb_encrypt_DES_options__imp__DES_options_DES_pcbc_encrypt__imp__DES_pcbc_encrypt_DES_quad_cksum__imp__DES_quad_cksum_DES_random_key__imp__DES_random_key_DES_read_2passwords__imp__DES_read_2passwords_DES_read_password__imp__DES_read_password_DES_set_key__imp__DES_set_key_DES_set_key_checked__imp__DES_set_key_checked_DES_set_key_unchecked__imp__DES_set_key_unchecked_DES_set_odd_parity__imp__DES_set_odd_parity_DES_string_to_2keys__imp__DES_string_to_2keys_DES_string_to_key__imp__DES_string_to_key_DES_xcbc_encrypt__imp__DES_xcbc_encrypt_DH_KDF_X9_42__imp__DH_KDF_X9_42_DH_OpenSSL__imp__DH_OpenSSL_DH_check__imp__DH_check_DH_check_pub_key__imp__DH_check_pub_key_DH_compute_key__imp__DH_compute_key_DH_compute_key_padded__imp__DH_compute_key_padded_DH_free__imp__DH_free_DH_generate_key__imp__DH_generate_key_DH_generate_parameters__imp__DH_generate_parameters_DH_generate_parameters_ex__imp__DH_generate_parameters_ex_DH_get_1024_160__imp__DH_get_1024_160_DH_get_2048_224__imp__DH_get_2048_224_DH_get_2048_256__imp__DH_get_2048_256_DH_get_default_method__imp__DH_get_default_method_DH_get_ex_data__imp__DH_get_ex_data_DH_get_ex_new_index__imp__DH_get_ex_new_index_DH_new__imp__DH_new_DH_new_method__imp__DH_new_method_DH_set_default_method__imp__DH_set_default_method_DH_set_ex_data__imp__DH_set_ex_data_DH_set_method__imp__DH_set_method_DH_size__imp__DH_size_DH_up_ref__imp__DH_up_ref_DHparams_dup__imp__DHparams_dup_DHparams_print__imp__DHparams_print_DHparams_print_fp__imp__DHparams_print_fp_DIRECTORYSTRING_free__imp__DIRECTORYSTRING_free_DIRECTORYSTRING_it__imp__DIRECTORYSTRING_it_DIRECTORYSTRING_new__imp__DIRECTORYSTRING_new_DISPLAYTEXT_free__imp__DISPLAYTEXT_free_DISPLAYTEXT_it__imp__DISPLAYTEXT_it_DISPLAYTEXT_new__imp__DISPLAYTEXT_new_DIST_POINT_NAME_free__imp__DIST_POINT_NAME_free_DIST_POINT_NAME_it__imp__DIST_POINT_NAME_it_DIST_POINT_NAME_new__imp__DIST_POINT_NAME_new_DIST_POINT_free__imp__DIST_POINT_free_DIST_POINT_it__imp__DIST_POINT_it_DIST_POINT_new__imp__DIST_POINT_new_DIST_POINT_set_dpname__imp__DIST_POINT_set_dpname_DSA_OpenSSL__imp__DSA_OpenSSL_DSA_SIG_free__imp__DSA_SIG_free_DSA_SIG_new__imp__DSA_SIG_new_DSA_do_sign__imp__DSA_do_sign_DSA_do_verify__imp__DSA_do_verify_DSA_dup_DH__imp__DSA_dup_DH_DSA_free__imp__DSA_free_DSA_generate_key__imp__DSA_generate_key_DSA_generate_parameters__imp__DSA_generate_parameters_DSA_generate_parameters_ex__imp__DSA_generate_parameters_ex_DSA_get_default_method__imp__DSA_get_default_method_DSA_get_ex_data__imp__DSA_get_ex_data_DSA_get_ex_new_index__imp__DSA_get_ex_new_index_DSA_new__imp__DSA_new_DSA_new_method__imp__DSA_new_method_DSA_print__imp__DSA_print_DSA_print_fp__imp__DSA_print_fp_DSA_set_default_method__imp__DSA_set_default_method_DSA_set_ex_data__imp__DSA_set_ex_data_DSA_set_method__imp__DSA_set_method_DSA_sign__imp__DSA_sign_DSA_sign_setup__imp__DSA_sign_setup_DSA_size__imp__DSA_size_DSA_up_ref__imp__DSA_up_ref_DSA_verify__imp__DSA_verify_DSAparams_dup__imp__DSAparams_dup_DSAparams_print__imp__DSAparams_print_DSAparams_print_fp__imp__DSAparams_print_fp_DSO_METHOD_beos__imp__DSO_METHOD_beos_DSO_METHOD_dl__imp__DSO_METHOD_dl_DSO_METHOD_dlfcn__imp__DSO_METHOD_dlfcn_DSO_METHOD_null__imp__DSO_METHOD_null_DSO_METHOD_openssl__imp__DSO_METHOD_openssl_DSO_METHOD_vms__imp__DSO_METHOD_vms_DSO_METHOD_win32__imp__DSO_METHOD_win32_DSO_bind_func__imp__DSO_bind_func_DSO_bind_var__imp__DSO_bind_var_DSO_convert_filename__imp__DSO_convert_filename_DSO_ctrl__imp__DSO_ctrl_DSO_flags__imp__DSO_flags_DSO_free__imp__DSO_free_DSO_get_default_method__imp__DSO_get_default_method_DSO_get_filename__imp__DSO_get_filename_DSO_get_loaded_filename__imp__DSO_get_loaded_filename_DSO_get_method__imp__DSO_get_method_DSO_global_lookup__imp__DSO_global_lookup_DSO_load__imp__DSO_load_DSO_merge__imp__DSO_merge_DSO_new__imp__DSO_new_DSO_new_method__imp__DSO_new_method_DSO_pathbyaddr__imp__DSO_pathbyaddr_DSO_set_default_method__imp__DSO_set_default_method_DSO_set_filename__imp__DSO_set_filename_DSO_set_method__imp__DSO_set_method_DSO_set_name_converter__imp__DSO_set_name_converter_DSO_up_ref__imp__DSO_up_ref_ECDH_KDF_X9_62__imp__ECDH_KDF_X9_62_ECDH_OpenSSL__imp__ECDH_OpenSSL_ECDH_compute_key__imp__ECDH_compute_key_ECDH_get_default_method__imp__ECDH_get_default_method_ECDH_get_ex_data__imp__ECDH_get_ex_data_ECDH_get_ex_new_index__imp__ECDH_get_ex_new_index_ECDH_set_default_method__imp__ECDH_set_default_method_ECDH_set_ex_data__imp__ECDH_set_ex_data_ECDH_set_method__imp__ECDH_set_method_ECDSA_METHOD_free__imp__ECDSA_METHOD_free_ECDSA_METHOD_get_app_data__imp__ECDSA_METHOD_get_app_data_ECDSA_METHOD_new__imp__ECDSA_METHOD_new_ECDSA_METHOD_set_app_data__imp__ECDSA_METHOD_set_app_data_ECDSA_METHOD_set_flags__imp__ECDSA_METHOD_set_flags_ECDSA_METHOD_set_name__imp__ECDSA_METHOD_set_name_ECDSA_METHOD_set_sign__imp__ECDSA_METHOD_set_sign_ECDSA_METHOD_set_sign_setup__imp__ECDSA_METHOD_set_sign_setup_ECDSA_METHOD_set_verify__imp__ECDSA_METHOD_set_verify_ECDSA_OpenSSL__imp__ECDSA_OpenSSL_ECDSA_SIG_free__imp__ECDSA_SIG_free_ECDSA_SIG_new__imp__ECDSA_SIG_new_ECDSA_do_sign__imp__ECDSA_do_sign_ECDSA_do_sign_ex__imp__ECDSA_do_sign_ex_ECDSA_do_verify__imp__ECDSA_do_verify_ECDSA_get_default_method__imp__ECDSA_get_default_method_ECDSA_get_ex_data__imp__ECDSA_get_ex_data_ECDSA_get_ex_new_index__imp__ECDSA_get_ex_new_index_ECDSA_set_default_method__imp__ECDSA_set_default_method_ECDSA_set_ex_data__imp__ECDSA_set_ex_data_ECDSA_set_method__imp__ECDSA_set_method_ECDSA_sign__imp__ECDSA_sign_ECDSA_sign_ex__imp__ECDSA_sign_ex_ECDSA_sign_setup__imp__ECDSA_sign_setup_ECDSA_size__imp__ECDSA_size_ECDSA_verify__imp__ECDSA_verify_ECPKParameters_print__imp__ECPKParameters_print_ECPKParameters_print_fp__imp__ECPKParameters_print_fp_ECParameters_print__imp__ECParameters_print_ECParameters_print_fp__imp__ECParameters_print_fp_EC_GF2m_simple_method__imp__EC_GF2m_simple_method_EC_GFp_mont_method__imp__EC_GFp_mont_method_EC_GFp_nist_method__imp__EC_GFp_nist_method_EC_GFp_simple_method__imp__EC_GFp_simple_method_EC_GROUP_check__imp__EC_GROUP_check_EC_GROUP_check_discriminant__imp__EC_GROUP_check_discriminant_EC_GROUP_clear_free__imp__EC_GROUP_clear_free_EC_GROUP_cmp__imp__EC_GROUP_cmp_EC_GROUP_copy__imp__EC_GROUP_copy_EC_GROUP_dup__imp__EC_GROUP_dup_EC_GROUP_free__imp__EC_GROUP_free_EC_GROUP_get0_generator__imp__EC_GROUP_get0_generator_EC_GROUP_get0_seed__imp__EC_GROUP_get0_seed_EC_GROUP_get_asn1_flag__imp__EC_GROUP_get_asn1_flag_EC_GROUP_get_basis_type__imp__EC_GROUP_get_basis_type_EC_GROUP_get_cofactor__imp__EC_GROUP_get_cofactor_EC_GROUP_get_curve_GF2m__imp__EC_GROUP_get_curve_GF2m_EC_GROUP_get_curve_GFp__imp__EC_GROUP_get_curve_GFp_EC_GROUP_get_curve_name__imp__EC_GROUP_get_curve_name_EC_GROUP_get_degree__imp__EC_GROUP_get_degree_EC_GROUP_get_mont_data__imp__EC_GROUP_get_mont_data_EC_GROUP_get_order__imp__EC_GROUP_get_order_EC_GROUP_get_pentanomial_basis__imp__EC_GROUP_get_pentanomial_basis_EC_GROUP_get_point_conversion_form__imp__EC_GROUP_get_point_conversion_form_EC_GROUP_get_seed_len__imp__EC_GROUP_get_seed_len_EC_GROUP_get_trinomial_basis__imp__EC_GROUP_get_trinomial_basis_EC_GROUP_have_precompute_mult__imp__EC_GROUP_have_precompute_mult_EC_GROUP_method_of__imp__EC_GROUP_method_of_EC_GROUP_new__imp__EC_GROUP_new_EC_GROUP_new_by_curve_name__imp__EC_GROUP_new_by_curve_name_EC_GROUP_new_curve_GF2m__imp__EC_GROUP_new_curve_GF2m_EC_GROUP_new_curve_GFp__imp__EC_GROUP_new_curve_GFp_EC_GROUP_precompute_mult__imp__EC_GROUP_precompute_mult_EC_GROUP_set_asn1_flag__imp__EC_GROUP_set_asn1_flag_EC_GROUP_set_curve_GF2m__imp__EC_GROUP_set_curve_GF2m_EC_GROUP_set_curve_GFp__imp__EC_GROUP_set_curve_GFp_EC_GROUP_set_curve_name__imp__EC_GROUP_set_curve_name_EC_GROUP_set_generator__imp__EC_GROUP_set_generator_EC_GROUP_set_point_conversion_form__imp__EC_GROUP_set_point_conversion_form_EC_GROUP_set_seed__imp__EC_GROUP_set_seed_EC_KEY_check_key__imp__EC_KEY_check_key_EC_KEY_clear_flags__imp__EC_KEY_clear_flags_EC_KEY_copy__imp__EC_KEY_copy_EC_KEY_dup__imp__EC_KEY_dup_EC_KEY_free__imp__EC_KEY_free_EC_KEY_generate_key__imp__EC_KEY_generate_key_EC_KEY_get0_group__imp__EC_KEY_get0_group_EC_KEY_get0_private_key__imp__EC_KEY_get0_private_key_EC_KEY_get0_public_key__imp__EC_KEY_get0_public_key_EC_KEY_get_conv_form__imp__EC_KEY_get_conv_form_EC_KEY_get_enc_flags__imp__EC_KEY_get_enc_flags_EC_KEY_get_flags__imp__EC_KEY_get_flags_EC_KEY_get_key_method_data__imp__EC_KEY_get_key_method_data_EC_KEY_insert_key_method_data__imp__EC_KEY_insert_key_method_data_EC_KEY_new__imp__EC_KEY_new_EC_KEY_new_by_curve_name__imp__EC_KEY_new_by_curve_name_EC_KEY_precompute_mult__imp__EC_KEY_precompute_mult_EC_KEY_print__imp__EC_KEY_print_EC_KEY_print_fp__imp__EC_KEY_print_fp_EC_KEY_set_asn1_flag__imp__EC_KEY_set_asn1_flag_EC_KEY_set_conv_form__imp__EC_KEY_set_conv_form_EC_KEY_set_enc_flags__imp__EC_KEY_set_enc_flags_EC_KEY_set_flags__imp__EC_KEY_set_flags_EC_KEY_set_group__imp__EC_KEY_set_group_EC_KEY_set_private_key__imp__EC_KEY_set_private_key_EC_KEY_set_public_key__imp__EC_KEY_set_public_key_EC_KEY_set_public_key_affine_coordinates__imp__EC_KEY_set_public_key_affine_coordinates_EC_KEY_up_ref__imp__EC_KEY_up_ref_EC_METHOD_get_field_type__imp__EC_METHOD_get_field_type_EC_POINT_add__imp__EC_POINT_add_EC_POINT_bn2point__imp__EC_POINT_bn2point_EC_POINT_clear_free__imp__EC_POINT_clear_free_EC_POINT_cmp__imp__EC_POINT_cmp_EC_POINT_copy__imp__EC_POINT_copy_EC_POINT_dbl__imp__EC_POINT_dbl_EC_POINT_dup__imp__EC_POINT_dup_EC_POINT_free__imp__EC_POINT_free_EC_POINT_get_Jprojective_coordinates_GFp__imp__EC_POINT_get_Jprojective_coordinates_GFp_EC_POINT_get_affine_coordinates_GF2m__imp__EC_POINT_get_affine_coordinates_GF2m_EC_POINT_get_affine_coordinates_GFp__imp__EC_POINT_get_affine_coordinates_GFp_EC_POINT_hex2point__imp__EC_POINT_hex2point_EC_POINT_invert__imp__EC_POINT_invert_EC_POINT_is_at_infinity__imp__EC_POINT_is_at_infinity_EC_POINT_is_on_curve__imp__EC_POINT_is_on_curve_EC_POINT_make_affine__imp__EC_POINT_make_affine_EC_POINT_method_of__imp__EC_POINT_method_of_EC_POINT_mul__imp__EC_POINT_mul_EC_POINT_new__imp__EC_POINT_new_EC_POINT_oct2point__imp__EC_POINT_oct2point_EC_POINT_point2bn__imp__EC_POINT_point2bn_EC_POINT_point2hex__imp__EC_POINT_point2hex_EC_POINT_point2oct__imp__EC_POINT_point2oct_EC_POINT_set_Jprojective_coordinates_GFp__imp__EC_POINT_set_Jprojective_coordinates_GFp_EC_POINT_set_affine_coordinates_GF2m__imp__EC_POINT_set_affine_coordinates_GF2m_EC_POINT_set_affine_coordinates_GFp__imp__EC_POINT_set_affine_coordinates_GFp_EC_POINT_set_compressed_coordinates_GF2m__imp__EC_POINT_set_compressed_coordinates_GF2m_EC_POINT_set_compressed_coordinates_GFp__imp__EC_POINT_set_compressed_coordinates_GFp_EC_POINT_set_to_infinity__imp__EC_POINT_set_to_infinity_EC_POINTs_make_affine__imp__EC_POINTs_make_affine_EC_POINTs_mul__imp__EC_POINTs_mul_EC_curve_nid2nist__imp__EC_curve_nid2nist_EC_curve_nist2nid__imp__EC_curve_nist2nid_EC_get_builtin_curves__imp__EC_get_builtin_curves_EDIPARTYNAME_free__imp__EDIPARTYNAME_free_EDIPARTYNAME_it__imp__EDIPARTYNAME_it_EDIPARTYNAME_new__imp__EDIPARTYNAME_new_ENGINE_add__imp__ENGINE_add_ENGINE_add_conf_module__imp__ENGINE_add_conf_module_ENGINE_by_id__imp__ENGINE_by_id_ENGINE_cleanup__imp__ENGINE_cleanup_ENGINE_cmd_is_executable__imp__ENGINE_cmd_is_executable_ENGINE_ctrl__imp__ENGINE_ctrl_ENGINE_ctrl_cmd__imp__ENGINE_ctrl_cmd_ENGINE_ctrl_cmd_string__imp__ENGINE_ctrl_cmd_string_ENGINE_finish__imp__ENGINE_finish_ENGINE_free__imp__ENGINE_free_ENGINE_get_DH__imp__ENGINE_get_DH_ENGINE_get_DSA__imp__ENGINE_get_DSA_ENGINE_get_ECDH__imp__ENGINE_get_ECDH_ENGINE_get_ECDSA__imp__ENGINE_get_ECDSA_ENGINE_get_RAND__imp__ENGINE_get_RAND_ENGINE_get_RSA__imp__ENGINE_get_RSA_ENGINE_get_STORE__imp__ENGINE_get_STORE_ENGINE_get_cipher__imp__ENGINE_get_cipher_ENGINE_get_cipher_engine__imp__ENGINE_get_cipher_engine_ENGINE_get_ciphers__imp__ENGINE_get_ciphers_ENGINE_get_cmd_defns__imp__ENGINE_get_cmd_defns_ENGINE_get_ctrl_function__imp__ENGINE_get_ctrl_function_ENGINE_get_default_DH__imp__ENGINE_get_default_DH_ENGINE_get_default_DSA__imp__ENGINE_get_default_DSA_ENGINE_get_default_ECDH__imp__ENGINE_get_default_ECDH_ENGINE_get_default_ECDSA__imp__ENGINE_get_default_ECDSA_ENGINE_get_default_RAND__imp__ENGINE_get_default_RAND_ENGINE_get_default_RSA__imp__ENGINE_get_default_RSA_ENGINE_get_destroy_function__imp__ENGINE_get_destroy_function_ENGINE_get_digest__imp__ENGINE_get_digest_ENGINE_get_digest_engine__imp__ENGINE_get_digest_engine_ENGINE_get_digests__imp__ENGINE_get_digests_ENGINE_get_ex_data__imp__ENGINE_get_ex_data_ENGINE_get_ex_new_index__imp__ENGINE_get_ex_new_index_ENGINE_get_finish_function__imp__ENGINE_get_finish_function_ENGINE_get_first__imp__ENGINE_get_first_ENGINE_get_flags__imp__ENGINE_get_flags_ENGINE_get_id__imp__ENGINE_get_id_ENGINE_get_init_function__imp__ENGINE_get_init_function_ENGINE_get_last__imp__ENGINE_get_last_ENGINE_get_load_privkey_function__imp__ENGINE_get_load_privkey_function_ENGINE_get_load_pubkey_function__imp__ENGINE_get_load_pubkey_function_ENGINE_get_name__imp__ENGINE_get_name_ENGINE_get_next__imp__ENGINE_get_next_ENGINE_get_pkey_asn1_meth__imp__ENGINE_get_pkey_asn1_meth_ENGINE_get_pkey_asn1_meth_engine__imp__ENGINE_get_pkey_asn1_meth_engine_ENGINE_get_pkey_asn1_meth_str__imp__ENGINE_get_pkey_asn1_meth_str_ENGINE_get_pkey_asn1_meths__imp__ENGINE_get_pkey_asn1_meths_ENGINE_get_pkey_meth__imp__ENGINE_get_pkey_meth_ENGINE_get_pkey_meth_engine__imp__ENGINE_get_pkey_meth_engine_ENGINE_get_pkey_meths__imp__ENGINE_get_pkey_meths_ENGINE_get_prev__imp__ENGINE_get_prev_ENGINE_get_ssl_client_cert_function__imp__ENGINE_get_ssl_client_cert_function_ENGINE_get_static_state__imp__ENGINE_get_static_state_ENGINE_get_table_flags__imp__ENGINE_get_table_flags_ENGINE_init__imp__ENGINE_init_ENGINE_load_builtin_engines__imp__ENGINE_load_builtin_engines_ENGINE_load_cryptodev__imp__ENGINE_load_cryptodev_ENGINE_load_dynamic__imp__ENGINE_load_dynamic_ENGINE_load_openssl__imp__ENGINE_load_openssl_ENGINE_load_private_key__imp__ENGINE_load_private_key_ENGINE_load_public_key__imp__ENGINE_load_public_key_ENGINE_load_rdrand__imp__ENGINE_load_rdrand_ENGINE_load_ssl_client_cert__imp__ENGINE_load_ssl_client_cert_ENGINE_new__imp__ENGINE_new_ENGINE_pkey_asn1_find_str__imp__ENGINE_pkey_asn1_find_str_ENGINE_register_DH__imp__ENGINE_register_DH_ENGINE_register_DSA__imp__ENGINE_register_DSA_ENGINE_register_ECDH__imp__ENGINE_register_ECDH_ENGINE_register_ECDSA__imp__ENGINE_register_ECDSA_ENGINE_register_RAND__imp__ENGINE_register_RAND_ENGINE_register_RSA__imp__ENGINE_register_RSA_ENGINE_register_STORE__imp__ENGINE_register_STORE_ENGINE_register_all_DH__imp__ENGINE_register_all_DH_ENGINE_register_all_DSA__imp__ENGINE_register_all_DSA_ENGINE_register_all_ECDH__imp__ENGINE_register_all_ECDH_ENGINE_register_all_ECDSA__imp__ENGINE_register_all_ECDSA_ENGINE_register_all_RAND__imp__ENGINE_register_all_RAND_ENGINE_register_all_RSA__imp__ENGINE_register_all_RSA_ENGINE_register_all_STORE__imp__ENGINE_register_all_STORE_ENGINE_register_all_ciphers__imp__ENGINE_register_all_ciphers_ENGINE_register_all_complete__imp__ENGINE_register_all_complete_ENGINE_register_all_digests__imp__ENGINE_register_all_digests_ENGINE_register_all_pkey_asn1_meths__imp__ENGINE_register_all_pkey_asn1_meths_ENGINE_register_all_pkey_meths__imp__ENGINE_register_all_pkey_meths_ENGINE_register_ciphers__imp__ENGINE_register_ciphers_ENGINE_register_complete__imp__ENGINE_register_complete_ENGINE_register_digests__imp__ENGINE_register_digests_ENGINE_register_pkey_asn1_meths__imp__ENGINE_register_pkey_asn1_meths_ENGINE_register_pkey_meths__imp__ENGINE_register_pkey_meths_ENGINE_remove__imp__ENGINE_remove_ENGINE_set_DH__imp__ENGINE_set_DH_ENGINE_set_DSA__imp__ENGINE_set_DSA_ENGINE_set_ECDH__imp__ENGINE_set_ECDH_ENGINE_set_ECDSA__imp__ENGINE_set_ECDSA_ENGINE_set_RAND__imp__ENGINE_set_RAND_ENGINE_set_RSA__imp__ENGINE_set_RSA_ENGINE_set_STORE__imp__ENGINE_set_STORE_ENGINE_set_ciphers__imp__ENGINE_set_ciphers_ENGINE_set_cmd_defns__imp__ENGINE_set_cmd_defns_ENGINE_set_ctrl_function__imp__ENGINE_set_ctrl_function_ENGINE_set_default__imp__ENGINE_set_default_ENGINE_set_default_DH__imp__ENGINE_set_default_DH_ENGINE_set_default_DSA__imp__ENGINE_set_default_DSA_ENGINE_set_default_ECDH__imp__ENGINE_set_default_ECDH_ENGINE_set_default_ECDSA__imp__ENGINE_set_default_ECDSA_ENGINE_set_default_RAND__imp__ENGINE_set_default_RAND_ENGINE_set_default_RSA__imp__ENGINE_set_default_RSA_ENGINE_set_default_ciphers__imp__ENGINE_set_default_ciphers_ENGINE_set_default_digests__imp__ENGINE_set_default_digests_ENGINE_set_default_pkey_asn1_meths__imp__ENGINE_set_default_pkey_asn1_meths_ENGINE_set_default_pkey_meths__imp__ENGINE_set_default_pkey_meths_ENGINE_set_default_string__imp__ENGINE_set_default_string_ENGINE_set_destroy_function__imp__ENGINE_set_destroy_function_ENGINE_set_digests__imp__ENGINE_set_digests_ENGINE_set_ex_data__imp__ENGINE_set_ex_data_ENGINE_set_finish_function__imp__ENGINE_set_finish_function_ENGINE_set_flags__imp__ENGINE_set_flags_ENGINE_set_id__imp__ENGINE_set_id_ENGINE_set_init_function__imp__ENGINE_set_init_function_ENGINE_set_load_privkey_function__imp__ENGINE_set_load_privkey_function_ENGINE_set_load_pubkey_function__imp__ENGINE_set_load_pubkey_function_ENGINE_set_load_ssl_client_cert_function__imp__ENGINE_set_load_ssl_client_cert_function_ENGINE_set_name__imp__ENGINE_set_name_ENGINE_set_pkey_asn1_meths__imp__ENGINE_set_pkey_asn1_meths_ENGINE_set_pkey_meths__imp__ENGINE_set_pkey_meths_ENGINE_set_table_flags__imp__ENGINE_set_table_flags_ENGINE_unregister_DH__imp__ENGINE_unregister_DH_ENGINE_unregister_DSA__imp__ENGINE_unregister_DSA_ENGINE_unregister_ECDH__imp__ENGINE_unregister_ECDH_ENGINE_unregister_ECDSA__imp__ENGINE_unregister_ECDSA_ENGINE_unregister_RAND__imp__ENGINE_unregister_RAND_ENGINE_unregister_RSA__imp__ENGINE_unregister_RSA_ENGINE_unregister_STORE__imp__ENGINE_unregister_STORE_ENGINE_unregister_ciphers__imp__ENGINE_unregister_ciphers_ENGINE_unregister_digests__imp__ENGINE_unregister_digests_ENGINE_unregister_pkey_asn1_meths__imp__ENGINE_unregister_pkey_asn1_meths_ENGINE_unregister_pkey_meths__imp__ENGINE_unregister_pkey_meths_ENGINE_up_ref__imp__ENGINE_up_ref_ERR_add_error_data__imp__ERR_add_error_data_ERR_add_error_vdata__imp__ERR_add_error_vdata_ERR_clear_error__imp__ERR_clear_error_ERR_error_string__imp__ERR_error_string_ERR_error_string_n__imp__ERR_error_string_n_ERR_free_strings__imp__ERR_free_strings_ERR_func_error_string__imp__ERR_func_error_string_ERR_get_err_state_table__imp__ERR_get_err_state_table_ERR_get_error__imp__ERR_get_error_ERR_get_error_line__imp__ERR_get_error_line_ERR_get_error_line_data__imp__ERR_get_error_line_data_ERR_get_implementation__imp__ERR_get_implementation_ERR_get_next_error_library__imp__ERR_get_next_error_library_ERR_get_state__imp__ERR_get_state_ERR_get_string_table__imp__ERR_get_string_table_ERR_lib_error_string__imp__ERR_lib_error_string_ERR_load_ASN1_strings__imp__ERR_load_ASN1_strings_ERR_load_BIO_strings__imp__ERR_load_BIO_strings_ERR_load_BN_strings__imp__ERR_load_BN_strings_ERR_load_BUF_strings__imp__ERR_load_BUF_strings_ERR_load_CMS_strings__imp__ERR_load_CMS_strings_ERR_load_COMP_strings__imp__ERR_load_COMP_strings_ERR_load_CONF_strings__imp__ERR_load_CONF_strings_ERR_load_CRYPTO_strings__imp__ERR_load_CRYPTO_strings_ERR_load_DH_strings__imp__ERR_load_DH_strings_ERR_load_DSA_strings__imp__ERR_load_DSA_strings_ERR_load_DSO_strings__imp__ERR_load_DSO_strings_ERR_load_ECDH_strings__imp__ERR_load_ECDH_strings_ERR_load_ECDSA_strings__imp__ERR_load_ECDSA_strings_ERR_load_EC_strings__imp__ERR_load_EC_strings_ERR_load_ENGINE_strings__imp__ERR_load_ENGINE_strings_ERR_load_ERR_strings__imp__ERR_load_ERR_strings_ERR_load_EVP_strings__imp__ERR_load_EVP_strings_ERR_load_OBJ_strings__imp__ERR_load_OBJ_strings_ERR_load_OCSP_strings__imp__ERR_load_OCSP_strings_ERR_load_PEM_strings__imp__ERR_load_PEM_strings_ERR_load_PKCS12_strings__imp__ERR_load_PKCS12_strings_ERR_load_PKCS7_strings__imp__ERR_load_PKCS7_strings_ERR_load_RAND_strings__imp__ERR_load_RAND_strings_ERR_load_RSA_strings__imp__ERR_load_RSA_strings_ERR_load_TS_strings__imp__ERR_load_TS_strings_ERR_load_UI_strings__imp__ERR_load_UI_strings_ERR_load_X509V3_strings__imp__ERR_load_X509V3_strings_ERR_load_X509_strings__imp__ERR_load_X509_strings_ERR_load_crypto_strings__imp__ERR_load_crypto_strings_ERR_load_strings__imp__ERR_load_strings_ERR_peek_error__imp__ERR_peek_error_ERR_peek_error_line__imp__ERR_peek_error_line_ERR_peek_error_line_data__imp__ERR_peek_error_line_data_ERR_peek_last_error__imp__ERR_peek_last_error_ERR_peek_last_error_line__imp__ERR_peek_last_error_line_ERR_peek_last_error_line_data__imp__ERR_peek_last_error_line_data_ERR_pop_to_mark__imp__ERR_pop_to_mark_ERR_print_errors__imp__ERR_print_errors_ERR_print_errors_cb__imp__ERR_print_errors_cb_ERR_print_errors_fp__imp__ERR_print_errors_fp_ERR_put_error__imp__ERR_put_error_ERR_reason_error_string__imp__ERR_reason_error_string_ERR_release_err_state_table__imp__ERR_release_err_state_table_ERR_remove_state__imp__ERR_remove_state_ERR_remove_thread_state__imp__ERR_remove_thread_state_ERR_set_error_data__imp__ERR_set_error_data_ERR_set_implementation__imp__ERR_set_implementation_ERR_set_mark__imp__ERR_set_mark_ERR_unload_strings__imp__ERR_unload_strings_ESS_CERT_ID_dup__imp__ESS_CERT_ID_dup_ESS_CERT_ID_free__imp__ESS_CERT_ID_free_ESS_CERT_ID_new__imp__ESS_CERT_ID_new_ESS_ISSUER_SERIAL_dup__imp__ESS_ISSUER_SERIAL_dup_ESS_ISSUER_SERIAL_free__imp__ESS_ISSUER_SERIAL_free_ESS_ISSUER_SERIAL_new__imp__ESS_ISSUER_SERIAL_new_ESS_SIGNING_CERT_dup__imp__ESS_SIGNING_CERT_dup_ESS_SIGNING_CERT_free__imp__ESS_SIGNING_CERT_free_ESS_SIGNING_CERT_new__imp__ESS_SIGNING_CERT_new_EVP_BytesToKey__imp__EVP_BytesToKey_EVP_CIPHER_CTX_block_size__imp__EVP_CIPHER_CTX_block_size_EVP_CIPHER_CTX_cipher__imp__EVP_CIPHER_CTX_cipher_EVP_CIPHER_CTX_cleanup__imp__EVP_CIPHER_CTX_cleanup_EVP_CIPHER_CTX_clear_flags__imp__EVP_CIPHER_CTX_clear_flags_EVP_CIPHER_CTX_copy__imp__EVP_CIPHER_CTX_copy_EVP_CIPHER_CTX_ctrl__imp__EVP_CIPHER_CTX_ctrl_EVP_CIPHER_CTX_flags__imp__EVP_CIPHER_CTX_flags_EVP_CIPHER_CTX_free__imp__EVP_CIPHER_CTX_free_EVP_CIPHER_CTX_get_app_data__imp__EVP_CIPHER_CTX_get_app_data_EVP_CIPHER_CTX_init__imp__EVP_CIPHER_CTX_init_EVP_CIPHER_CTX_iv_length__imp__EVP_CIPHER_CTX_iv_length_EVP_CIPHER_CTX_key_length__imp__EVP_CIPHER_CTX_key_length_EVP_CIPHER_CTX_new__imp__EVP_CIPHER_CTX_new_EVP_CIPHER_CTX_nid__imp__EVP_CIPHER_CTX_nid_EVP_CIPHER_CTX_rand_key__imp__EVP_CIPHER_CTX_rand_key_EVP_CIPHER_CTX_set_app_data__imp__EVP_CIPHER_CTX_set_app_data_EVP_CIPHER_CTX_set_flags__imp__EVP_CIPHER_CTX_set_flags_EVP_CIPHER_CTX_set_key_length__imp__EVP_CIPHER_CTX_set_key_length_EVP_CIPHER_CTX_set_padding__imp__EVP_CIPHER_CTX_set_padding_EVP_CIPHER_CTX_test_flags__imp__EVP_CIPHER_CTX_test_flags_EVP_CIPHER_asn1_to_param__imp__EVP_CIPHER_asn1_to_param_EVP_CIPHER_block_size__imp__EVP_CIPHER_block_size_EVP_CIPHER_do_all__imp__EVP_CIPHER_do_all_EVP_CIPHER_do_all_sorted__imp__EVP_CIPHER_do_all_sorted_EVP_CIPHER_flags__imp__EVP_CIPHER_flags_EVP_CIPHER_get_asn1_iv__imp__EVP_CIPHER_get_asn1_iv_EVP_CIPHER_iv_length__imp__EVP_CIPHER_iv_length_EVP_CIPHER_key_length__imp__EVP_CIPHER_key_length_EVP_CIPHER_nid__imp__EVP_CIPHER_nid_EVP_CIPHER_param_to_asn1__imp__EVP_CIPHER_param_to_asn1_EVP_CIPHER_set_asn1_iv__imp__EVP_CIPHER_set_asn1_iv_EVP_CIPHER_type__imp__EVP_CIPHER_type_EVP_CipherFinal__imp__EVP_CipherFinal_EVP_CipherFinal_ex__imp__EVP_CipherFinal_ex_EVP_CipherInit__imp__EVP_CipherInit_EVP_CipherInit_ex__imp__EVP_CipherInit_ex_EVP_CipherUpdate__imp__EVP_CipherUpdate_EVP_Cipher__imp__EVP_Cipher_EVP_DecodeBlock__imp__EVP_DecodeBlock_EVP_DecodeFinal__imp__EVP_DecodeFinal_EVP_DecodeInit__imp__EVP_DecodeInit_EVP_DecodeUpdate__imp__EVP_DecodeUpdate_EVP_DecryptFinal__imp__EVP_DecryptFinal_EVP_DecryptFinal_ex__imp__EVP_DecryptFinal_ex_EVP_DecryptInit__imp__EVP_DecryptInit_EVP_DecryptInit_ex__imp__EVP_DecryptInit_ex_EVP_DecryptUpdate__imp__EVP_DecryptUpdate_EVP_DigestFinal__imp__EVP_DigestFinal_EVP_DigestFinal_ex__imp__EVP_DigestFinal_ex_EVP_DigestInit__imp__EVP_DigestInit_EVP_DigestInit_ex__imp__EVP_DigestInit_ex_EVP_DigestSignFinal__imp__EVP_DigestSignFinal_EVP_DigestSignInit__imp__EVP_DigestSignInit_EVP_DigestUpdate__imp__EVP_DigestUpdate_EVP_DigestVerifyFinal__imp__EVP_DigestVerifyFinal_EVP_DigestVerifyInit__imp__EVP_DigestVerifyInit_EVP_Digest__imp__EVP_Digest_EVP_EncodeBlock__imp__EVP_EncodeBlock_EVP_EncodeFinal__imp__EVP_EncodeFinal_EVP_EncodeInit__imp__EVP_EncodeInit_EVP_EncodeUpdate__imp__EVP_EncodeUpdate_EVP_EncryptFinal__imp__EVP_EncryptFinal_EVP_EncryptFinal_ex__imp__EVP_EncryptFinal_ex_EVP_EncryptInit__imp__EVP_EncryptInit_EVP_EncryptInit_ex__imp__EVP_EncryptInit_ex_EVP_EncryptUpdate__imp__EVP_EncryptUpdate_EVP_MD_CTX_cleanup__imp__EVP_MD_CTX_cleanup_EVP_MD_CTX_clear_flags__imp__EVP_MD_CTX_clear_flags_EVP_MD_CTX_copy__imp__EVP_MD_CTX_copy_EVP_MD_CTX_copy_ex__imp__EVP_MD_CTX_copy_ex_EVP_MD_CTX_create__imp__EVP_MD_CTX_create_EVP_MD_CTX_destroy__imp__EVP_MD_CTX_destroy_EVP_MD_CTX_init__imp__EVP_MD_CTX_init_EVP_MD_CTX_md__imp__EVP_MD_CTX_md_EVP_MD_CTX_set_flags__imp__EVP_MD_CTX_set_flags_EVP_MD_CTX_test_flags__imp__EVP_MD_CTX_test_flags_EVP_MD_block_size__imp__EVP_MD_block_size_EVP_MD_do_all__imp__EVP_MD_do_all_EVP_MD_do_all_sorted__imp__EVP_MD_do_all_sorted_EVP_MD_flags__imp__EVP_MD_flags_EVP_MD_pkey_type__imp__EVP_MD_pkey_type_EVP_MD_size__imp__EVP_MD_size_EVP_MD_type__imp__EVP_MD_type_EVP_OpenFinal__imp__EVP_OpenFinal_EVP_OpenInit__imp__EVP_OpenInit_EVP_PBE_CipherInit__imp__EVP_PBE_CipherInit_EVP_PBE_alg_add__imp__EVP_PBE_alg_add_EVP_PBE_alg_add_type__imp__EVP_PBE_alg_add_type_EVP_PBE_cleanup__imp__EVP_PBE_cleanup_EVP_PBE_find__imp__EVP_PBE_find_EVP_PKCS82PKEY__imp__EVP_PKCS82PKEY_EVP_PKEY2PKCS8__imp__EVP_PKEY2PKCS8_EVP_PKEY2PKCS8_broken__imp__EVP_PKEY2PKCS8_broken_EVP_PKEY_CTX_ctrl__imp__EVP_PKEY_CTX_ctrl_EVP_PKEY_CTX_ctrl_str__imp__EVP_PKEY_CTX_ctrl_str_EVP_PKEY_CTX_dup__imp__EVP_PKEY_CTX_dup_EVP_PKEY_CTX_free__imp__EVP_PKEY_CTX_free_EVP_PKEY_CTX_get0_peerkey__imp__EVP_PKEY_CTX_get0_peerkey_EVP_PKEY_CTX_get0_pkey__imp__EVP_PKEY_CTX_get0_pkey_EVP_PKEY_CTX_get_app_data__imp__EVP_PKEY_CTX_get_app_data_EVP_PKEY_CTX_get_cb__imp__EVP_PKEY_CTX_get_cb_EVP_PKEY_CTX_get_data__imp__EVP_PKEY_CTX_get_data_EVP_PKEY_CTX_get_keygen_info__imp__EVP_PKEY_CTX_get_keygen_info_EVP_PKEY_CTX_get_operation__imp__EVP_PKEY_CTX_get_operation_EVP_PKEY_CTX_new__imp__EVP_PKEY_CTX_new_EVP_PKEY_CTX_new_id__imp__EVP_PKEY_CTX_new_id_EVP_PKEY_CTX_set0_keygen_info__imp__EVP_PKEY_CTX_set0_keygen_info_EVP_PKEY_CTX_set_app_data__imp__EVP_PKEY_CTX_set_app_data_EVP_PKEY_CTX_set_cb__imp__EVP_PKEY_CTX_set_cb_EVP_PKEY_CTX_set_data__imp__EVP_PKEY_CTX_set_data_EVP_PKEY_add1_attr__imp__EVP_PKEY_add1_attr_EVP_PKEY_add1_attr_by_NID__imp__EVP_PKEY_add1_attr_by_NID_EVP_PKEY_add1_attr_by_OBJ__imp__EVP_PKEY_add1_attr_by_OBJ_EVP_PKEY_add1_attr_by_txt__imp__EVP_PKEY_add1_attr_by_txt_EVP_PKEY_asn1_add0__imp__EVP_PKEY_asn1_add0_EVP_PKEY_asn1_add_alias__imp__EVP_PKEY_asn1_add_alias_EVP_PKEY_asn1_copy__imp__EVP_PKEY_asn1_copy_EVP_PKEY_asn1_find__imp__EVP_PKEY_asn1_find_EVP_PKEY_asn1_find_str__imp__EVP_PKEY_asn1_find_str_EVP_PKEY_asn1_free__imp__EVP_PKEY_asn1_free_EVP_PKEY_asn1_get0__imp__EVP_PKEY_asn1_get0_EVP_PKEY_asn1_get0_info__imp__EVP_PKEY_asn1_get0_info_EVP_PKEY_asn1_get_count__imp__EVP_PKEY_asn1_get_count_EVP_PKEY_asn1_new__imp__EVP_PKEY_asn1_new_EVP_PKEY_asn1_set_ctrl__imp__EVP_PKEY_asn1_set_ctrl_EVP_PKEY_asn1_set_free__imp__EVP_PKEY_asn1_set_free_EVP_PKEY_asn1_set_item__imp__EVP_PKEY_asn1_set_item_EVP_PKEY_asn1_set_param__imp__EVP_PKEY_asn1_set_param_EVP_PKEY_asn1_set_private__imp__EVP_PKEY_asn1_set_private_EVP_PKEY_asn1_set_public__imp__EVP_PKEY_asn1_set_public_EVP_PKEY_assign__imp__EVP_PKEY_assign_EVP_PKEY_base_id__imp__EVP_PKEY_base_id_EVP_PKEY_bits__imp__EVP_PKEY_bits_EVP_PKEY_cmp__imp__EVP_PKEY_cmp_EVP_PKEY_cmp_parameters__imp__EVP_PKEY_cmp_parameters_EVP_PKEY_copy_parameters__imp__EVP_PKEY_copy_parameters_EVP_PKEY_decrypt__imp__EVP_PKEY_decrypt_EVP_PKEY_decrypt_init__imp__EVP_PKEY_decrypt_init_EVP_PKEY_decrypt_old__imp__EVP_PKEY_decrypt_old_EVP_PKEY_delete_attr__imp__EVP_PKEY_delete_attr_EVP_PKEY_derive__imp__EVP_PKEY_derive_EVP_PKEY_derive_init__imp__EVP_PKEY_derive_init_EVP_PKEY_derive_set_peer__imp__EVP_PKEY_derive_set_peer_EVP_PKEY_encrypt__imp__EVP_PKEY_encrypt_EVP_PKEY_encrypt_init__imp__EVP_PKEY_encrypt_init_EVP_PKEY_encrypt_old__imp__EVP_PKEY_encrypt_old_EVP_PKEY_free__imp__EVP_PKEY_free_EVP_PKEY_get0__imp__EVP_PKEY_get0_EVP_PKEY_get0_asn1__imp__EVP_PKEY_get0_asn1_EVP_PKEY_get1_DH__imp__EVP_PKEY_get1_DH_EVP_PKEY_get1_DSA__imp__EVP_PKEY_get1_DSA_EVP_PKEY_get1_EC_KEY__imp__EVP_PKEY_get1_EC_KEY_EVP_PKEY_get1_RSA__imp__EVP_PKEY_get1_RSA_EVP_PKEY_get_attr__imp__EVP_PKEY_get_attr_EVP_PKEY_get_attr_by_NID__imp__EVP_PKEY_get_attr_by_NID_EVP_PKEY_get_attr_by_OBJ__imp__EVP_PKEY_get_attr_by_OBJ_EVP_PKEY_get_attr_count__imp__EVP_PKEY_get_attr_count_EVP_PKEY_get_default_digest_nid__imp__EVP_PKEY_get_default_digest_nid_EVP_PKEY_id__imp__EVP_PKEY_id_EVP_PKEY_keygen__imp__EVP_PKEY_keygen_EVP_PKEY_keygen_init__imp__EVP_PKEY_keygen_init_EVP_PKEY_meth_add0__imp__EVP_PKEY_meth_add0_EVP_PKEY_meth_copy__imp__EVP_PKEY_meth_copy_EVP_PKEY_meth_find__imp__EVP_PKEY_meth_find_EVP_PKEY_meth_free__imp__EVP_PKEY_meth_free_EVP_PKEY_meth_get0_info__imp__EVP_PKEY_meth_get0_info_EVP_PKEY_meth_new__imp__EVP_PKEY_meth_new_EVP_PKEY_meth_set_cleanup__imp__EVP_PKEY_meth_set_cleanup_EVP_PKEY_meth_set_copy__imp__EVP_PKEY_meth_set_copy_EVP_PKEY_meth_set_ctrl__imp__EVP_PKEY_meth_set_ctrl_EVP_PKEY_meth_set_decrypt__imp__EVP_PKEY_meth_set_decrypt_EVP_PKEY_meth_set_derive__imp__EVP_PKEY_meth_set_derive_EVP_PKEY_meth_set_encrypt__imp__EVP_PKEY_meth_set_encrypt_EVP_PKEY_meth_set_init__imp__EVP_PKEY_meth_set_init_EVP_PKEY_meth_set_keygen__imp__EVP_PKEY_meth_set_keygen_EVP_PKEY_meth_set_paramgen__imp__EVP_PKEY_meth_set_paramgen_EVP_PKEY_meth_set_sign__imp__EVP_PKEY_meth_set_sign_EVP_PKEY_meth_set_signctx__imp__EVP_PKEY_meth_set_signctx_EVP_PKEY_meth_set_verify__imp__EVP_PKEY_meth_set_verify_EVP_PKEY_meth_set_verify_recover__imp__EVP_PKEY_meth_set_verify_recover_EVP_PKEY_meth_set_verifyctx__imp__EVP_PKEY_meth_set_verifyctx_EVP_PKEY_missing_parameters__imp__EVP_PKEY_missing_parameters_EVP_PKEY_new__imp__EVP_PKEY_new_EVP_PKEY_new_mac_key__imp__EVP_PKEY_new_mac_key_EVP_PKEY_paramgen__imp__EVP_PKEY_paramgen_EVP_PKEY_paramgen_init__imp__EVP_PKEY_paramgen_init_EVP_PKEY_print_params__imp__EVP_PKEY_print_params_EVP_PKEY_print_private__imp__EVP_PKEY_print_private_EVP_PKEY_print_public__imp__EVP_PKEY_print_public_EVP_PKEY_save_parameters__imp__EVP_PKEY_save_parameters_EVP_PKEY_set1_DH__imp__EVP_PKEY_set1_DH_EVP_PKEY_set1_DSA__imp__EVP_PKEY_set1_DSA_EVP_PKEY_set1_EC_KEY__imp__EVP_PKEY_set1_EC_KEY_EVP_PKEY_set1_RSA__imp__EVP_PKEY_set1_RSA_EVP_PKEY_set_type__imp__EVP_PKEY_set_type_EVP_PKEY_set_type_str__imp__EVP_PKEY_set_type_str_EVP_PKEY_sign__imp__EVP_PKEY_sign_EVP_PKEY_sign_init__imp__EVP_PKEY_sign_init_EVP_PKEY_size__imp__EVP_PKEY_size_EVP_PKEY_type__imp__EVP_PKEY_type_EVP_PKEY_verify__imp__EVP_PKEY_verify_EVP_PKEY_verify_init__imp__EVP_PKEY_verify_init_EVP_PKEY_verify_recover__imp__EVP_PKEY_verify_recover_EVP_PKEY_verify_recover_init__imp__EVP_PKEY_verify_recover_init_EVP_SealFinal__imp__EVP_SealFinal_EVP_SealInit__imp__EVP_SealInit_EVP_SignFinal__imp__EVP_SignFinal_EVP_VerifyFinal__imp__EVP_VerifyFinal_EVP_add_alg_module__imp__EVP_add_alg_module_EVP_add_cipher__imp__EVP_add_cipher_EVP_add_digest__imp__EVP_add_digest_EVP_aes_128_cbc__imp__EVP_aes_128_cbc_EVP_aes_128_cbc_hmac_sha1__imp__EVP_aes_128_cbc_hmac_sha1_EVP_aes_128_cbc_hmac_sha256__imp__EVP_aes_128_cbc_hmac_sha256_EVP_aes_128_ccm__imp__EVP_aes_128_ccm_EVP_aes_128_cfb128__imp__EVP_aes_128_cfb128_EVP_aes_128_cfb1__imp__EVP_aes_128_cfb1_EVP_aes_128_cfb8__imp__EVP_aes_128_cfb8_EVP_aes_128_ctr__imp__EVP_aes_128_ctr_EVP_aes_128_ecb__imp__EVP_aes_128_ecb_EVP_aes_128_gcm__imp__EVP_aes_128_gcm_EVP_aes_128_ofb__imp__EVP_aes_128_ofb_EVP_aes_128_wrap__imp__EVP_aes_128_wrap_EVP_aes_128_xts__imp__EVP_aes_128_xts_EVP_aes_192_cbc__imp__EVP_aes_192_cbc_EVP_aes_192_ccm__imp__EVP_aes_192_ccm_EVP_aes_192_cfb128__imp__EVP_aes_192_cfb128_EVP_aes_192_cfb1__imp__EVP_aes_192_cfb1_EVP_aes_192_cfb8__imp__EVP_aes_192_cfb8_EVP_aes_192_ctr__imp__EVP_aes_192_ctr_EVP_aes_192_ecb__imp__EVP_aes_192_ecb_EVP_aes_192_gcm__imp__EVP_aes_192_gcm_EVP_aes_192_ofb__imp__EVP_aes_192_ofb_EVP_aes_192_wrap__imp__EVP_aes_192_wrap_EVP_aes_256_cbc__imp__EVP_aes_256_cbc_EVP_aes_256_cbc_hmac_sha1__imp__EVP_aes_256_cbc_hmac_sha1_EVP_aes_256_cbc_hmac_sha256__imp__EVP_aes_256_cbc_hmac_sha256_EVP_aes_256_ccm__imp__EVP_aes_256_ccm_EVP_aes_256_cfb128__imp__EVP_aes_256_cfb128_EVP_aes_256_cfb1__imp__EVP_aes_256_cfb1_EVP_aes_256_cfb8__imp__EVP_aes_256_cfb8_EVP_aes_256_ctr__imp__EVP_aes_256_ctr_EVP_aes_256_ecb__imp__EVP_aes_256_ecb_EVP_aes_256_gcm__imp__EVP_aes_256_gcm_EVP_aes_256_ofb__imp__EVP_aes_256_ofb_EVP_aes_256_wrap__imp__EVP_aes_256_wrap_EVP_aes_256_xts__imp__EVP_aes_256_xts_EVP_bf_cbc__imp__EVP_bf_cbc_EVP_bf_cfb64__imp__EVP_bf_cfb64_EVP_bf_ecb__imp__EVP_bf_ecb_EVP_bf_ofb__imp__EVP_bf_ofb_EVP_camellia_128_cbc__imp__EVP_camellia_128_cbc_EVP_camellia_128_cfb128__imp__EVP_camellia_128_cfb128_EVP_camellia_128_cfb1__imp__EVP_camellia_128_cfb1_EVP_camellia_128_cfb8__imp__EVP_camellia_128_cfb8_EVP_camellia_128_ecb__imp__EVP_camellia_128_ecb_EVP_camellia_128_ofb__imp__EVP_camellia_128_ofb_EVP_camellia_192_cbc__imp__EVP_camellia_192_cbc_EVP_camellia_192_cfb128__imp__EVP_camellia_192_cfb128_EVP_camellia_192_cfb1__imp__EVP_camellia_192_cfb1_EVP_camellia_192_cfb8__imp__EVP_camellia_192_cfb8_EVP_camellia_192_ecb__imp__EVP_camellia_192_ecb_EVP_camellia_192_ofb__imp__EVP_camellia_192_ofb_EVP_camellia_256_cbc__imp__EVP_camellia_256_cbc_EVP_camellia_256_cfb128__imp__EVP_camellia_256_cfb128_EVP_camellia_256_cfb1__imp__EVP_camellia_256_cfb1_EVP_camellia_256_cfb8__imp__EVP_camellia_256_cfb8_EVP_camellia_256_ecb__imp__EVP_camellia_256_ecb_EVP_camellia_256_ofb__imp__EVP_camellia_256_ofb_EVP_cast5_cbc__imp__EVP_cast5_cbc_EVP_cast5_cfb64__imp__EVP_cast5_cfb64_EVP_cast5_ecb__imp__EVP_cast5_ecb_EVP_cast5_ofb__imp__EVP_cast5_ofb_EVP_cleanup__imp__EVP_cleanup_EVP_des_cbc__imp__EVP_des_cbc_EVP_des_cfb1__imp__EVP_des_cfb1_EVP_des_cfb64__imp__EVP_des_cfb64_EVP_des_cfb8__imp__EVP_des_cfb8_EVP_des_ecb__imp__EVP_des_ecb_EVP_des_ede3__imp__EVP_des_ede3_EVP_des_ede3_cbc__imp__EVP_des_ede3_cbc_EVP_des_ede3_cfb1__imp__EVP_des_ede3_cfb1_EVP_des_ede3_cfb64__imp__EVP_des_ede3_cfb64_EVP_des_ede3_cfb8__imp__EVP_des_ede3_cfb8_EVP_des_ede3_ecb__imp__EVP_des_ede3_ecb_EVP_des_ede3_ofb__imp__EVP_des_ede3_ofb_EVP_des_ede3_wrap__imp__EVP_des_ede3_wrap_EVP_des_ede__imp__EVP_des_ede_EVP_des_ede_cbc__imp__EVP_des_ede_cbc_EVP_des_ede_cfb64__imp__EVP_des_ede_cfb64_EVP_des_ede_ecb__imp__EVP_des_ede_ecb_EVP_des_ede_ofb__imp__EVP_des_ede_ofb_EVP_des_ofb__imp__EVP_des_ofb_EVP_desx_cbc__imp__EVP_desx_cbc_EVP_dss1__imp__EVP_dss1_EVP_dss__imp__EVP_dss_EVP_ecdsa__imp__EVP_ecdsa_EVP_enc_null__imp__EVP_enc_null_EVP_get_cipherbyname__imp__EVP_get_cipherbyname_EVP_get_digestbyname__imp__EVP_get_digestbyname_EVP_get_pw_prompt__imp__EVP_get_pw_prompt_EVP_idea_cbc__imp__EVP_idea_cbc_EVP_idea_cfb64__imp__EVP_idea_cfb64_EVP_idea_ecb__imp__EVP_idea_ecb_EVP_idea_ofb__imp__EVP_idea_ofb_EVP_md4__imp__EVP_md4_EVP_md5__imp__EVP_md5_EVP_md_null__imp__EVP_md_null_EVP_mdc2__imp__EVP_mdc2_EVP_rc2_40_cbc__imp__EVP_rc2_40_cbc_EVP_rc2_64_cbc__imp__EVP_rc2_64_cbc_EVP_rc2_cbc__imp__EVP_rc2_cbc_EVP_rc2_cfb64__imp__EVP_rc2_cfb64_EVP_rc2_ecb__imp__EVP_rc2_ecb_EVP_rc2_ofb__imp__EVP_rc2_ofb_EVP_rc4__imp__EVP_rc4_EVP_rc4_40__imp__EVP_rc4_40_EVP_rc4_hmac_md5__imp__EVP_rc4_hmac_md5_EVP_read_pw_string__imp__EVP_read_pw_string_EVP_read_pw_string_min__imp__EVP_read_pw_string_min_EVP_ripemd160__imp__EVP_ripemd160_EVP_seed_cbc__imp__EVP_seed_cbc_EVP_seed_cfb128__imp__EVP_seed_cfb128_EVP_seed_ecb__imp__EVP_seed_ecb_EVP_seed_ofb__imp__EVP_seed_ofb_EVP_set_pw_prompt__imp__EVP_set_pw_prompt_EVP_sha1__imp__EVP_sha1_EVP_sha224__imp__EVP_sha224_EVP_sha256__imp__EVP_sha256_EVP_sha384__imp__EVP_sha384_EVP_sha512__imp__EVP_sha512_EVP_sha__imp__EVP_sha_EVP_whirlpool__imp__EVP_whirlpool_EXTENDED_KEY_USAGE_free__imp__EXTENDED_KEY_USAGE_free_EXTENDED_KEY_USAGE_it__imp__EXTENDED_KEY_USAGE_it_EXTENDED_KEY_USAGE_new__imp__EXTENDED_KEY_USAGE_new_FIPS_mode__imp__FIPS_mode_FIPS_mode_set__imp__FIPS_mode_set_GENERAL_NAMES_free__imp__GENERAL_NAMES_free_GENERAL_NAMES_it__imp__GENERAL_NAMES_it_GENERAL_NAMES_new__imp__GENERAL_NAMES_new_GENERAL_NAME_cmp__imp__GENERAL_NAME_cmp_GENERAL_NAME_dup__imp__GENERAL_NAME_dup_GENERAL_NAME_free__imp__GENERAL_NAME_free_GENERAL_NAME_get0_otherName__imp__GENERAL_NAME_get0_otherName_GENERAL_NAME_get0_value__imp__GENERAL_NAME_get0_value_GENERAL_NAME_it__imp__GENERAL_NAME_it_GENERAL_NAME_new__imp__GENERAL_NAME_new_GENERAL_NAME_print__imp__GENERAL_NAME_print_GENERAL_NAME_set0_othername__imp__GENERAL_NAME_set0_othername_GENERAL_NAME_set0_value__imp__GENERAL_NAME_set0_value_GENERAL_SUBTREE_free__imp__GENERAL_SUBTREE_free_GENERAL_SUBTREE_it__imp__GENERAL_SUBTREE_it_GENERAL_SUBTREE_new__imp__GENERAL_SUBTREE_new_HMAC__imp__HMAC_HMAC_CTX_cleanup__imp__HMAC_CTX_cleanup_HMAC_CTX_copy__imp__HMAC_CTX_copy_HMAC_CTX_init__imp__HMAC_CTX_init_HMAC_CTX_set_flags__imp__HMAC_CTX_set_flags_HMAC_Final__imp__HMAC_Final_HMAC_Init__imp__HMAC_Init_HMAC_Init_ex__imp__HMAC_Init_ex_HMAC_Update__imp__HMAC_Update_ISSUING_DIST_POINT_free__imp__ISSUING_DIST_POINT_free_ISSUING_DIST_POINT_it__imp__ISSUING_DIST_POINT_it_ISSUING_DIST_POINT_new__imp__ISSUING_DIST_POINT_new_KRB5_APREQBODY_free__imp__KRB5_APREQBODY_free_KRB5_APREQBODY_it__imp__KRB5_APREQBODY_it_KRB5_APREQBODY_new__imp__KRB5_APREQBODY_new_KRB5_APREQ_free__imp__KRB5_APREQ_free_KRB5_APREQ_it__imp__KRB5_APREQ_it_KRB5_APREQ_new__imp__KRB5_APREQ_new_KRB5_AUTHDATA_free__imp__KRB5_AUTHDATA_free_KRB5_AUTHDATA_it__imp__KRB5_AUTHDATA_it_KRB5_AUTHDATA_new__imp__KRB5_AUTHDATA_new_KRB5_AUTHENTBODY_free__imp__KRB5_AUTHENTBODY_free_KRB5_AUTHENTBODY_it__imp__KRB5_AUTHENTBODY_it_KRB5_AUTHENTBODY_new__imp__KRB5_AUTHENTBODY_new_KRB5_AUTHENT_free__imp__KRB5_AUTHENT_free_KRB5_AUTHENT_it__imp__KRB5_AUTHENT_it_KRB5_AUTHENT_new__imp__KRB5_AUTHENT_new_KRB5_CHECKSUM_free__imp__KRB5_CHECKSUM_free_KRB5_CHECKSUM_it__imp__KRB5_CHECKSUM_it_KRB5_CHECKSUM_new__imp__KRB5_CHECKSUM_new_KRB5_ENCDATA_free__imp__KRB5_ENCDATA_free_KRB5_ENCDATA_it__imp__KRB5_ENCDATA_it_KRB5_ENCDATA_new__imp__KRB5_ENCDATA_new_KRB5_ENCKEY_free__imp__KRB5_ENCKEY_free_KRB5_ENCKEY_it__imp__KRB5_ENCKEY_it_KRB5_ENCKEY_new__imp__KRB5_ENCKEY_new_KRB5_PRINCNAME_free__imp__KRB5_PRINCNAME_free_KRB5_PRINCNAME_it__imp__KRB5_PRINCNAME_it_KRB5_PRINCNAME_new__imp__KRB5_PRINCNAME_new_KRB5_TICKET_free__imp__KRB5_TICKET_free_KRB5_TICKET_it__imp__KRB5_TICKET_it_KRB5_TICKET_new__imp__KRB5_TICKET_new_KRB5_TKTBODY_free__imp__KRB5_TKTBODY_free_KRB5_TKTBODY_it__imp__KRB5_TKTBODY_it_KRB5_TKTBODY_new__imp__KRB5_TKTBODY_new_LONG_it__imp__LONG_it_MD4__imp__MD4_MD4_Final__imp__MD4_Final_MD4_Init__imp__MD4_Init_MD4_Transform__imp__MD4_Transform_MD4_Update__imp__MD4_Update_MD5__imp__MD5_MD5_Final__imp__MD5_Final_MD5_Init__imp__MD5_Init_MD5_Transform__imp__MD5_Transform_MD5_Update__imp__MD5_Update_MDC2__imp__MDC2_MDC2_Final__imp__MDC2_Final_MDC2_Init__imp__MDC2_Init_MDC2_Update__imp__MDC2_Update_NAME_CONSTRAINTS_check__imp__NAME_CONSTRAINTS_check_NAME_CONSTRAINTS_free__imp__NAME_CONSTRAINTS_free_NAME_CONSTRAINTS_it__imp__NAME_CONSTRAINTS_it_NAME_CONSTRAINTS_new__imp__NAME_CONSTRAINTS_new_NCONF_WIN32__imp__NCONF_WIN32_NCONF_default__imp__NCONF_default_NCONF_dump_bio__imp__NCONF_dump_bio_NCONF_dump_fp__imp__NCONF_dump_fp_NCONF_free__imp__NCONF_free_NCONF_free_data__imp__NCONF_free_data_NCONF_get_number_e__imp__NCONF_get_number_e_NCONF_get_section__imp__NCONF_get_section_NCONF_get_string__imp__NCONF_get_string_NCONF_load__imp__NCONF_load_NCONF_load_bio__imp__NCONF_load_bio_NCONF_load_fp__imp__NCONF_load_fp_NCONF_new__imp__NCONF_new_NETSCAPE_CERT_SEQUENCE_free__imp__NETSCAPE_CERT_SEQUENCE_free_NETSCAPE_CERT_SEQUENCE_it__imp__NETSCAPE_CERT_SEQUENCE_it_NETSCAPE_CERT_SEQUENCE_new__imp__NETSCAPE_CERT_SEQUENCE_new_NETSCAPE_SPKAC_free__imp__NETSCAPE_SPKAC_free_NETSCAPE_SPKAC_it__imp__NETSCAPE_SPKAC_it_NETSCAPE_SPKAC_new__imp__NETSCAPE_SPKAC_new_NETSCAPE_SPKI_b64_decode__imp__NETSCAPE_SPKI_b64_decode_NETSCAPE_SPKI_b64_encode__imp__NETSCAPE_SPKI_b64_encode_NETSCAPE_SPKI_free__imp__NETSCAPE_SPKI_free_NETSCAPE_SPKI_get_pubkey__imp__NETSCAPE_SPKI_get_pubkey_NETSCAPE_SPKI_it__imp__NETSCAPE_SPKI_it_NETSCAPE_SPKI_new__imp__NETSCAPE_SPKI_new_NETSCAPE_SPKI_print__imp__NETSCAPE_SPKI_print_NETSCAPE_SPKI_set_pubkey__imp__NETSCAPE_SPKI_set_pubkey_NETSCAPE_SPKI_sign__imp__NETSCAPE_SPKI_sign_NETSCAPE_SPKI_verify__imp__NETSCAPE_SPKI_verify_NETSCAPE_X509_free__imp__NETSCAPE_X509_free_NETSCAPE_X509_it__imp__NETSCAPE_X509_it_NETSCAPE_X509_new__imp__NETSCAPE_X509_new_NOTICEREF_free__imp__NOTICEREF_free_NOTICEREF_it__imp__NOTICEREF_it_NOTICEREF_new__imp__NOTICEREF_new_OBJ_NAME_add__imp__OBJ_NAME_add_OBJ_NAME_cleanup__imp__OBJ_NAME_cleanup_OBJ_NAME_do_all__imp__OBJ_NAME_do_all_OBJ_NAME_do_all_sorted__imp__OBJ_NAME_do_all_sorted_OBJ_NAME_get__imp__OBJ_NAME_get_OBJ_NAME_init__imp__OBJ_NAME_init_OBJ_NAME_new_index__imp__OBJ_NAME_new_index_OBJ_NAME_remove__imp__OBJ_NAME_remove_OBJ_add_object__imp__OBJ_add_object_OBJ_add_sigid__imp__OBJ_add_sigid_OBJ_bsearch___imp__OBJ_bsearch__OBJ_bsearch_ex___imp__OBJ_bsearch_ex__OBJ_cleanup__imp__OBJ_cleanup_OBJ_cmp__imp__OBJ_cmp_OBJ_create__imp__OBJ_create_OBJ_create_objects__imp__OBJ_create_objects_OBJ_dup__imp__OBJ_dup_OBJ_find_sigid_algs__imp__OBJ_find_sigid_algs_OBJ_find_sigid_by_algs__imp__OBJ_find_sigid_by_algs_OBJ_ln2nid__imp__OBJ_ln2nid_OBJ_new_nid__imp__OBJ_new_nid_OBJ_nid2ln__imp__OBJ_nid2ln_OBJ_nid2obj__imp__OBJ_nid2obj_OBJ_nid2sn__imp__OBJ_nid2sn_OBJ_obj2nid__imp__OBJ_obj2nid_OBJ_obj2txt__imp__OBJ_obj2txt_OBJ_sigid_free__imp__OBJ_sigid_free_OBJ_sn2nid__imp__OBJ_sn2nid_OBJ_txt2nid__imp__OBJ_txt2nid_OBJ_txt2obj__imp__OBJ_txt2obj_OCSP_BASICRESP_add1_ext_i2d__imp__OCSP_BASICRESP_add1_ext_i2d_OCSP_BASICRESP_add_ext__imp__OCSP_BASICRESP_add_ext_OCSP_BASICRESP_delete_ext__imp__OCSP_BASICRESP_delete_ext_OCSP_BASICRESP_free__imp__OCSP_BASICRESP_free_OCSP_BASICRESP_get1_ext_d2i__imp__OCSP_BASICRESP_get1_ext_d2i_OCSP_BASICRESP_get_ext__imp__OCSP_BASICRESP_get_ext_OCSP_BASICRESP_get_ext_by_NID__imp__OCSP_BASICRESP_get_ext_by_NID_OCSP_BASICRESP_get_ext_by_OBJ__imp__OCSP_BASICRESP_get_ext_by_OBJ_OCSP_BASICRESP_get_ext_by_critical__imp__OCSP_BASICRESP_get_ext_by_critical_OCSP_BASICRESP_get_ext_count__imp__OCSP_BASICRESP_get_ext_count_OCSP_BASICRESP_it__imp__OCSP_BASICRESP_it_OCSP_BASICRESP_new__imp__OCSP_BASICRESP_new_OCSP_CERTID_dup__imp__OCSP_CERTID_dup_OCSP_CERTID_free__imp__OCSP_CERTID_free_OCSP_CERTID_it__imp__OCSP_CERTID_it_OCSP_CERTID_new__imp__OCSP_CERTID_new_OCSP_CERTSTATUS_free__imp__OCSP_CERTSTATUS_free_OCSP_CERTSTATUS_it__imp__OCSP_CERTSTATUS_it_OCSP_CERTSTATUS_new__imp__OCSP_CERTSTATUS_new_OCSP_CRLID_free__imp__OCSP_CRLID_free_OCSP_CRLID_it__imp__OCSP_CRLID_it_OCSP_CRLID_new__imp__OCSP_CRLID_new_OCSP_ONEREQ_add1_ext_i2d__imp__OCSP_ONEREQ_add1_ext_i2d_OCSP_ONEREQ_add_ext__imp__OCSP_ONEREQ_add_ext_OCSP_ONEREQ_delete_ext__imp__OCSP_ONEREQ_delete_ext_OCSP_ONEREQ_free__imp__OCSP_ONEREQ_free_OCSP_ONEREQ_get1_ext_d2i__imp__OCSP_ONEREQ_get1_ext_d2i_OCSP_ONEREQ_get_ext__imp__OCSP_ONEREQ_get_ext_OCSP_ONEREQ_get_ext_by_NID__imp__OCSP_ONEREQ_get_ext_by_NID_OCSP_ONEREQ_get_ext_by_OBJ__imp__OCSP_ONEREQ_get_ext_by_OBJ_OCSP_ONEREQ_get_ext_by_critical__imp__OCSP_ONEREQ_get_ext_by_critical_OCSP_ONEREQ_get_ext_count__imp__OCSP_ONEREQ_get_ext_count_OCSP_ONEREQ_it__imp__OCSP_ONEREQ_it_OCSP_ONEREQ_new__imp__OCSP_ONEREQ_new_OCSP_REQINFO_free__imp__OCSP_REQINFO_free_OCSP_REQINFO_it__imp__OCSP_REQINFO_it_OCSP_REQINFO_new__imp__OCSP_REQINFO_new_OCSP_REQUEST_add1_ext_i2d__imp__OCSP_REQUEST_add1_ext_i2d_OCSP_REQUEST_add_ext__imp__OCSP_REQUEST_add_ext_OCSP_REQUEST_delete_ext__imp__OCSP_REQUEST_delete_ext_OCSP_REQUEST_free__imp__OCSP_REQUEST_free_OCSP_REQUEST_get1_ext_d2i__imp__OCSP_REQUEST_get1_ext_d2i_OCSP_REQUEST_get_ext__imp__OCSP_REQUEST_get_ext_OCSP_REQUEST_get_ext_by_NID__imp__OCSP_REQUEST_get_ext_by_NID_OCSP_REQUEST_get_ext_by_OBJ__imp__OCSP_REQUEST_get_ext_by_OBJ_OCSP_REQUEST_get_ext_by_critical__imp__OCSP_REQUEST_get_ext_by_critical_OCSP_REQUEST_get_ext_count__imp__OCSP_REQUEST_get_ext_count_OCSP_REQUEST_it__imp__OCSP_REQUEST_it_OCSP_REQUEST_new__imp__OCSP_REQUEST_new_OCSP_REQUEST_print__imp__OCSP_REQUEST_print_OCSP_REQ_CTX_add1_header__imp__OCSP_REQ_CTX_add1_header_OCSP_REQ_CTX_free__imp__OCSP_REQ_CTX_free_OCSP_REQ_CTX_get0_mem_bio__imp__OCSP_REQ_CTX_get0_mem_bio_OCSP_REQ_CTX_http__imp__OCSP_REQ_CTX_http_OCSP_REQ_CTX_i2d__imp__OCSP_REQ_CTX_i2d_OCSP_REQ_CTX_nbio__imp__OCSP_REQ_CTX_nbio_OCSP_REQ_CTX_nbio_d2i__imp__OCSP_REQ_CTX_nbio_d2i_OCSP_REQ_CTX_new__imp__OCSP_REQ_CTX_new_OCSP_REQ_CTX_set1_req__imp__OCSP_REQ_CTX_set1_req_OCSP_RESPBYTES_free__imp__OCSP_RESPBYTES_free_OCSP_RESPBYTES_it__imp__OCSP_RESPBYTES_it_OCSP_RESPBYTES_new__imp__OCSP_RESPBYTES_new_OCSP_RESPDATA_free__imp__OCSP_RESPDATA_free_OCSP_RESPDATA_it__imp__OCSP_RESPDATA_it_OCSP_RESPDATA_new__imp__OCSP_RESPDATA_new_OCSP_RESPID_free__imp__OCSP_RESPID_free_OCSP_RESPID_it__imp__OCSP_RESPID_it_OCSP_RESPID_new__imp__OCSP_RESPID_new_OCSP_RESPONSE_free__imp__OCSP_RESPONSE_free_OCSP_RESPONSE_it__imp__OCSP_RESPONSE_it_OCSP_RESPONSE_new__imp__OCSP_RESPONSE_new_OCSP_RESPONSE_print__imp__OCSP_RESPONSE_print_OCSP_REVOKEDINFO_free__imp__OCSP_REVOKEDINFO_free_OCSP_REVOKEDINFO_it__imp__OCSP_REVOKEDINFO_it_OCSP_REVOKEDINFO_new__imp__OCSP_REVOKEDINFO_new_OCSP_SERVICELOC_free__imp__OCSP_SERVICELOC_free_OCSP_SERVICELOC_it__imp__OCSP_SERVICELOC_it_OCSP_SERVICELOC_new__imp__OCSP_SERVICELOC_new_OCSP_SIGNATURE_free__imp__OCSP_SIGNATURE_free_OCSP_SIGNATURE_it__imp__OCSP_SIGNATURE_it_OCSP_SIGNATURE_new__imp__OCSP_SIGNATURE_new_OCSP_SINGLERESP_add1_ext_i2d__imp__OCSP_SINGLERESP_add1_ext_i2d_OCSP_SINGLERESP_add_ext__imp__OCSP_SINGLERESP_add_ext_OCSP_SINGLERESP_delete_ext__imp__OCSP_SINGLERESP_delete_ext_OCSP_SINGLERESP_free__imp__OCSP_SINGLERESP_free_OCSP_SINGLERESP_get1_ext_d2i__imp__OCSP_SINGLERESP_get1_ext_d2i_OCSP_SINGLERESP_get_ext__imp__OCSP_SINGLERESP_get_ext_OCSP_SINGLERESP_get_ext_by_NID__imp__OCSP_SINGLERESP_get_ext_by_NID_OCSP_SINGLERESP_get_ext_by_OBJ__imp__OCSP_SINGLERESP_get_ext_by_OBJ_OCSP_SINGLERESP_get_ext_by_critical__imp__OCSP_SINGLERESP_get_ext_by_critical_OCSP_SINGLERESP_get_ext_count__imp__OCSP_SINGLERESP_get_ext_count_OCSP_SINGLERESP_it__imp__OCSP_SINGLERESP_it_OCSP_SINGLERESP_new__imp__OCSP_SINGLERESP_new_OCSP_accept_responses_new__imp__OCSP_accept_responses_new_OCSP_archive_cutoff_new__imp__OCSP_archive_cutoff_new_OCSP_basic_add1_cert__imp__OCSP_basic_add1_cert_OCSP_basic_add1_nonce__imp__OCSP_basic_add1_nonce_OCSP_basic_add1_status__imp__OCSP_basic_add1_status_OCSP_basic_sign__imp__OCSP_basic_sign_OCSP_basic_verify__imp__OCSP_basic_verify_OCSP_cert_id_new__imp__OCSP_cert_id_new_OCSP_cert_status_str__imp__OCSP_cert_status_str_OCSP_cert_to_id__imp__OCSP_cert_to_id_OCSP_check_nonce__imp__OCSP_check_nonce_OCSP_check_validity__imp__OCSP_check_validity_OCSP_copy_nonce__imp__OCSP_copy_nonce_OCSP_crlID_new__imp__OCSP_crlID_new_OCSP_crl_reason_str__imp__OCSP_crl_reason_str_OCSP_id_cmp__imp__OCSP_id_cmp_OCSP_id_get0_info__imp__OCSP_id_get0_info_OCSP_id_issuer_cmp__imp__OCSP_id_issuer_cmp_OCSP_onereq_get0_id__imp__OCSP_onereq_get0_id_OCSP_parse_url__imp__OCSP_parse_url_OCSP_request_add0_id__imp__OCSP_request_add0_id_OCSP_request_add1_cert__imp__OCSP_request_add1_cert_OCSP_request_add1_nonce__imp__OCSP_request_add1_nonce_OCSP_request_is_signed__imp__OCSP_request_is_signed_OCSP_request_onereq_count__imp__OCSP_request_onereq_count_OCSP_request_onereq_get0__imp__OCSP_request_onereq_get0_OCSP_request_set1_name__imp__OCSP_request_set1_name_OCSP_request_sign__imp__OCSP_request_sign_OCSP_request_verify__imp__OCSP_request_verify_OCSP_resp_count__imp__OCSP_resp_count_OCSP_resp_find__imp__OCSP_resp_find_OCSP_resp_find_status__imp__OCSP_resp_find_status_OCSP_resp_get0__imp__OCSP_resp_get0_OCSP_response_create__imp__OCSP_response_create_OCSP_response_get1_basic__imp__OCSP_response_get1_basic_OCSP_response_status__imp__OCSP_response_status_OCSP_response_status_str__imp__OCSP_response_status_str_OCSP_sendreq_bio__imp__OCSP_sendreq_bio_OCSP_sendreq_nbio__imp__OCSP_sendreq_nbio_OCSP_sendreq_new__imp__OCSP_sendreq_new_OCSP_set_max_response_length__imp__OCSP_set_max_response_length_OCSP_single_get0_status__imp__OCSP_single_get0_status_OCSP_url_svcloc_new__imp__OCSP_url_svcloc_new_OPENSSL_DIR_end__imp__OPENSSL_DIR_end_OPENSSL_DIR_read__imp__OPENSSL_DIR_read_OPENSSL_add_all_algorithms_conf__imp__OPENSSL_add_all_algorithms_conf_OPENSSL_add_all_algorithms_noconf__imp__OPENSSL_add_all_algorithms_noconf_OPENSSL_asc2uni__imp__OPENSSL_asc2uni_OPENSSL_cleanse__imp__OPENSSL_cleanse_OPENSSL_config__imp__OPENSSL_config_OPENSSL_cpuid_setup__imp__OPENSSL_cpuid_setup_OPENSSL_gmtime__imp__OPENSSL_gmtime_OPENSSL_gmtime_adj__imp__OPENSSL_gmtime_adj_OPENSSL_gmtime_diff__imp__OPENSSL_gmtime_diff_OPENSSL_ia32cap_loc__imp__OPENSSL_ia32cap_loc_OPENSSL_init__imp__OPENSSL_init_OPENSSL_isservice__imp__OPENSSL_isservice_OPENSSL_issetugid__imp__OPENSSL_issetugid_OPENSSL_load_builtin_modules__imp__OPENSSL_load_builtin_modules_OPENSSL_memcmp__imp__OPENSSL_memcmp_OPENSSL_no_config__imp__OPENSSL_no_config_OPENSSL_showfatal__imp__OPENSSL_showfatal_OPENSSL_stderr__imp__OPENSSL_stderr_OPENSSL_strcasecmp__imp__OPENSSL_strcasecmp_OPENSSL_strncasecmp__imp__OPENSSL_strncasecmp_OPENSSL_uni2asc__imp__OPENSSL_uni2asc_OTHERNAME_cmp__imp__OTHERNAME_cmp_OTHERNAME_free__imp__OTHERNAME_free_OTHERNAME_it__imp__OTHERNAME_it_OTHERNAME_new__imp__OTHERNAME_new_OpenSSLDie__imp__OpenSSLDie_OpenSSL_add_all_ciphers__imp__OpenSSL_add_all_ciphers_OpenSSL_add_all_digests__imp__OpenSSL_add_all_digests_PBE2PARAM_free__imp__PBE2PARAM_free_PBE2PARAM_it__imp__PBE2PARAM_it_PBE2PARAM_new__imp__PBE2PARAM_new_PBEPARAM_free__imp__PBEPARAM_free_PBEPARAM_it__imp__PBEPARAM_it_PBEPARAM_new__imp__PBEPARAM_new_PBKDF2PARAM_free__imp__PBKDF2PARAM_free_PBKDF2PARAM_it__imp__PBKDF2PARAM_it_PBKDF2PARAM_new__imp__PBKDF2PARAM_new_PEM_ASN1_read__imp__PEM_ASN1_read_PEM_ASN1_read_bio__imp__PEM_ASN1_read_bio_PEM_ASN1_write__imp__PEM_ASN1_write_PEM_ASN1_write_bio__imp__PEM_ASN1_write_bio_PEM_SealFinal__imp__PEM_SealFinal_PEM_SealInit__imp__PEM_SealInit_PEM_SealUpdate__imp__PEM_SealUpdate_PEM_SignFinal__imp__PEM_SignFinal_PEM_SignInit__imp__PEM_SignInit_PEM_SignUpdate__imp__PEM_SignUpdate_PEM_X509_INFO_read__imp__PEM_X509_INFO_read_PEM_X509_INFO_read_bio__imp__PEM_X509_INFO_read_bio_PEM_X509_INFO_write_bio__imp__PEM_X509_INFO_write_bio_PEM_bytes_read_bio__imp__PEM_bytes_read_bio_PEM_def_callback__imp__PEM_def_callback_PEM_dek_info__imp__PEM_dek_info_PEM_do_header__imp__PEM_do_header_PEM_get_EVP_CIPHER_INFO__imp__PEM_get_EVP_CIPHER_INFO_PEM_proc_type__imp__PEM_proc_type_PEM_read__imp__PEM_read_PEM_read_CMS__imp__PEM_read_CMS_PEM_read_DHparams__imp__PEM_read_DHparams_PEM_read_DSAPrivateKey__imp__PEM_read_DSAPrivateKey_PEM_read_DSA_PUBKEY__imp__PEM_read_DSA_PUBKEY_PEM_read_DSAparams__imp__PEM_read_DSAparams_PEM_read_ECPKParameters__imp__PEM_read_ECPKParameters_PEM_read_ECPrivateKey__imp__PEM_read_ECPrivateKey_PEM_read_EC_PUBKEY__imp__PEM_read_EC_PUBKEY_PEM_read_NETSCAPE_CERT_SEQUENCE__imp__PEM_read_NETSCAPE_CERT_SEQUENCE_PEM_read_PKCS7__imp__PEM_read_PKCS7_PEM_read_PKCS8__imp__PEM_read_PKCS8_PEM_read_PKCS8_PRIV_KEY_INFO__imp__PEM_read_PKCS8_PRIV_KEY_INFO_PEM_read_PUBKEY__imp__PEM_read_PUBKEY_PEM_read_PrivateKey__imp__PEM_read_PrivateKey_PEM_read_RSAPrivateKey__imp__PEM_read_RSAPrivateKey_PEM_read_RSAPublicKey__imp__PEM_read_RSAPublicKey_PEM_read_RSA_PUBKEY__imp__PEM_read_RSA_PUBKEY_PEM_read_X509__imp__PEM_read_X509_PEM_read_X509_AUX__imp__PEM_read_X509_AUX_PEM_read_X509_CERT_PAIR__imp__PEM_read_X509_CERT_PAIR_PEM_read_X509_CRL__imp__PEM_read_X509_CRL_PEM_read_X509_REQ__imp__PEM_read_X509_REQ_PEM_read_bio__imp__PEM_read_bio_PEM_read_bio_CMS__imp__PEM_read_bio_CMS_PEM_read_bio_DHparams__imp__PEM_read_bio_DHparams_PEM_read_bio_DSAPrivateKey__imp__PEM_read_bio_DSAPrivateKey_PEM_read_bio_DSA_PUBKEY__imp__PEM_read_bio_DSA_PUBKEY_PEM_read_bio_DSAparams__imp__PEM_read_bio_DSAparams_PEM_read_bio_ECPKParameters__imp__PEM_read_bio_ECPKParameters_PEM_read_bio_ECPrivateKey__imp__PEM_read_bio_ECPrivateKey_PEM_read_bio_EC_PUBKEY__imp__PEM_read_bio_EC_PUBKEY_PEM_read_bio_NETSCAPE_CERT_SEQUENCE__imp__PEM_read_bio_NETSCAPE_CERT_SEQUENCE_PEM_read_bio_PKCS7__imp__PEM_read_bio_PKCS7_PEM_read_bio_PKCS8__imp__PEM_read_bio_PKCS8_PEM_read_bio_PKCS8_PRIV_KEY_INFO__imp__PEM_read_bio_PKCS8_PRIV_KEY_INFO_PEM_read_bio_PUBKEY__imp__PEM_read_bio_PUBKEY_PEM_read_bio_Parameters__imp__PEM_read_bio_Parameters_PEM_read_bio_PrivateKey__imp__PEM_read_bio_PrivateKey_PEM_read_bio_RSAPrivateKey__imp__PEM_read_bio_RSAPrivateKey_PEM_read_bio_RSAPublicKey__imp__PEM_read_bio_RSAPublicKey_PEM_read_bio_RSA_PUBKEY__imp__PEM_read_bio_RSA_PUBKEY_PEM_read_bio_X509__imp__PEM_read_bio_X509_PEM_read_bio_X509_AUX__imp__PEM_read_bio_X509_AUX_PEM_read_bio_X509_CERT_PAIR__imp__PEM_read_bio_X509_CERT_PAIR_PEM_read_bio_X509_CRL__imp__PEM_read_bio_X509_CRL_PEM_read_bio_X509_REQ__imp__PEM_read_bio_X509_REQ_PEM_write__imp__PEM_write_PEM_write_CMS__imp__PEM_write_CMS_PEM_write_DHparams__imp__PEM_write_DHparams_PEM_write_DHxparams__imp__PEM_write_DHxparams_PEM_write_DSAPrivateKey__imp__PEM_write_DSAPrivateKey_PEM_write_DSA_PUBKEY__imp__PEM_write_DSA_PUBKEY_PEM_write_DSAparams__imp__PEM_write_DSAparams_PEM_write_ECPKParameters__imp__PEM_write_ECPKParameters_PEM_write_ECPrivateKey__imp__PEM_write_ECPrivateKey_PEM_write_EC_PUBKEY__imp__PEM_write_EC_PUBKEY_PEM_write_NETSCAPE_CERT_SEQUENCE__imp__PEM_write_NETSCAPE_CERT_SEQUENCE_PEM_write_PKCS7__imp__PEM_write_PKCS7_PEM_write_PKCS8PrivateKey__imp__PEM_write_PKCS8PrivateKey_PEM_write_PKCS8PrivateKey_nid__imp__PEM_write_PKCS8PrivateKey_nid_PEM_write_PKCS8__imp__PEM_write_PKCS8_PEM_write_PKCS8_PRIV_KEY_INFO__imp__PEM_write_PKCS8_PRIV_KEY_INFO_PEM_write_PUBKEY__imp__PEM_write_PUBKEY_PEM_write_PrivateKey__imp__PEM_write_PrivateKey_PEM_write_RSAPrivateKey__imp__PEM_write_RSAPrivateKey_PEM_write_RSAPublicKey__imp__PEM_write_RSAPublicKey_PEM_write_RSA_PUBKEY__imp__PEM_write_RSA_PUBKEY_PEM_write_X509__imp__PEM_write_X509_PEM_write_X509_AUX__imp__PEM_write_X509_AUX_PEM_write_X509_CERT_PAIR__imp__PEM_write_X509_CERT_PAIR_PEM_write_X509_CRL__imp__PEM_write_X509_CRL_PEM_write_X509_REQ__imp__PEM_write_X509_REQ_PEM_write_X509_REQ_NEW__imp__PEM_write_X509_REQ_NEW_PEM_write_bio__imp__PEM_write_bio_PEM_write_bio_ASN1_stream__imp__PEM_write_bio_ASN1_stream_PEM_write_bio_CMS__imp__PEM_write_bio_CMS_PEM_write_bio_CMS_stream__imp__PEM_write_bio_CMS_stream_PEM_write_bio_DHparams__imp__PEM_write_bio_DHparams_PEM_write_bio_DHxparams__imp__PEM_write_bio_DHxparams_PEM_write_bio_DSAPrivateKey__imp__PEM_write_bio_DSAPrivateKey_PEM_write_bio_DSA_PUBKEY__imp__PEM_write_bio_DSA_PUBKEY_PEM_write_bio_DSAparams__imp__PEM_write_bio_DSAparams_PEM_write_bio_ECPKParameters__imp__PEM_write_bio_ECPKParameters_PEM_write_bio_ECPrivateKey__imp__PEM_write_bio_ECPrivateKey_PEM_write_bio_EC_PUBKEY__imp__PEM_write_bio_EC_PUBKEY_PEM_write_bio_NETSCAPE_CERT_SEQUENCE__imp__PEM_write_bio_NETSCAPE_CERT_SEQUENCE_PEM_write_bio_PKCS7__imp__PEM_write_bio_PKCS7_PEM_write_bio_PKCS7_stream__imp__PEM_write_bio_PKCS7_stream_PEM_write_bio_PKCS8PrivateKey__imp__PEM_write_bio_PKCS8PrivateKey_PEM_write_bio_PKCS8PrivateKey_nid__imp__PEM_write_bio_PKCS8PrivateKey_nid_PEM_write_bio_PKCS8__imp__PEM_write_bio_PKCS8_PEM_write_bio_PKCS8_PRIV_KEY_INFO__imp__PEM_write_bio_PKCS8_PRIV_KEY_INFO_PEM_write_bio_PUBKEY__imp__PEM_write_bio_PUBKEY_PEM_write_bio_Parameters__imp__PEM_write_bio_Parameters_PEM_write_bio_PrivateKey__imp__PEM_write_bio_PrivateKey_PEM_write_bio_RSAPrivateKey__imp__PEM_write_bio_RSAPrivateKey_PEM_write_bio_RSAPublicKey__imp__PEM_write_bio_RSAPublicKey_PEM_write_bio_RSA_PUBKEY__imp__PEM_write_bio_RSA_PUBKEY_PEM_write_bio_X509__imp__PEM_write_bio_X509_PEM_write_bio_X509_AUX__imp__PEM_write_bio_X509_AUX_PEM_write_bio_X509_CERT_PAIR__imp__PEM_write_bio_X509_CERT_PAIR_PEM_write_bio_X509_CRL__imp__PEM_write_bio_X509_CRL_PEM_write_bio_X509_REQ__imp__PEM_write_bio_X509_REQ_PEM_write_bio_X509_REQ_NEW__imp__PEM_write_bio_X509_REQ_NEW_PKCS12_AUTHSAFES_it__imp__PKCS12_AUTHSAFES_it_PKCS12_BAGS_free__imp__PKCS12_BAGS_free_PKCS12_BAGS_it__imp__PKCS12_BAGS_it_PKCS12_BAGS_new__imp__PKCS12_BAGS_new_PKCS12_MAC_DATA_free__imp__PKCS12_MAC_DATA_free_PKCS12_MAC_DATA_it__imp__PKCS12_MAC_DATA_it_PKCS12_MAC_DATA_new__imp__PKCS12_MAC_DATA_new_PKCS12_MAKE_KEYBAG__imp__PKCS12_MAKE_KEYBAG_PKCS12_MAKE_SHKEYBAG__imp__PKCS12_MAKE_SHKEYBAG_PKCS12_PBE_add__imp__PKCS12_PBE_add_PKCS12_PBE_keyivgen__imp__PKCS12_PBE_keyivgen_PKCS12_SAFEBAGS_it__imp__PKCS12_SAFEBAGS_it_PKCS12_SAFEBAG_free__imp__PKCS12_SAFEBAG_free_PKCS12_SAFEBAG_it__imp__PKCS12_SAFEBAG_it_PKCS12_SAFEBAG_new__imp__PKCS12_SAFEBAG_new_PKCS12_add_CSPName_asc__imp__PKCS12_add_CSPName_asc_PKCS12_add_cert__imp__PKCS12_add_cert_PKCS12_add_friendlyname_asc__imp__PKCS12_add_friendlyname_asc_PKCS12_add_friendlyname_uni__imp__PKCS12_add_friendlyname_uni_PKCS12_add_key__imp__PKCS12_add_key_PKCS12_add_localkeyid__imp__PKCS12_add_localkeyid_PKCS12_add_safe__imp__PKCS12_add_safe_PKCS12_add_safes__imp__PKCS12_add_safes_PKCS12_certbag2x509__imp__PKCS12_certbag2x509_PKCS12_certbag2x509crl__imp__PKCS12_certbag2x509crl_PKCS12_create__imp__PKCS12_create_PKCS12_decrypt_skey__imp__PKCS12_decrypt_skey_PKCS12_free__imp__PKCS12_free_PKCS12_gen_mac__imp__PKCS12_gen_mac_PKCS12_get_attr_gen__imp__PKCS12_get_attr_gen_PKCS12_get_friendlyname__imp__PKCS12_get_friendlyname_PKCS12_init__imp__PKCS12_init_PKCS12_item_decrypt_d2i__imp__PKCS12_item_decrypt_d2i_PKCS12_item_i2d_encrypt__imp__PKCS12_item_i2d_encrypt_PKCS12_item_pack_safebag__imp__PKCS12_item_pack_safebag_PKCS12_it__imp__PKCS12_it_PKCS12_key_gen_asc__imp__PKCS12_key_gen_asc_PKCS12_key_gen_uni__imp__PKCS12_key_gen_uni_PKCS12_new__imp__PKCS12_new_PKCS12_newpass__imp__PKCS12_newpass_PKCS12_pack_authsafes__imp__PKCS12_pack_authsafes_PKCS12_pack_p7data__imp__PKCS12_pack_p7data_PKCS12_pack_p7encdata__imp__PKCS12_pack_p7encdata_PKCS12_parse__imp__PKCS12_parse_PKCS12_pbe_crypt__imp__PKCS12_pbe_crypt_PKCS12_set_mac__imp__PKCS12_set_mac_PKCS12_setup_mac__imp__PKCS12_setup_mac_PKCS12_unpack_authsafes__imp__PKCS12_unpack_authsafes_PKCS12_unpack_p7data__imp__PKCS12_unpack_p7data_PKCS12_unpack_p7encdata__imp__PKCS12_unpack_p7encdata_PKCS12_verify_mac__imp__PKCS12_verify_mac_PKCS12_x5092certbag__imp__PKCS12_x5092certbag_PKCS12_x509crl2certbag__imp__PKCS12_x509crl2certbag_PKCS1_MGF1__imp__PKCS1_MGF1_PKCS5_PBE_add__imp__PKCS5_PBE_add_PKCS5_PBE_keyivgen__imp__PKCS5_PBE_keyivgen_PKCS5_PBKDF2_HMAC__imp__PKCS5_PBKDF2_HMAC_PKCS5_PBKDF2_HMAC_SHA1__imp__PKCS5_PBKDF2_HMAC_SHA1_PKCS5_pbe2_set__imp__PKCS5_pbe2_set_PKCS5_pbe2_set_iv__imp__PKCS5_pbe2_set_iv_PKCS5_pbe_set0_algor__imp__PKCS5_pbe_set0_algor_PKCS5_pbe_set__imp__PKCS5_pbe_set_PKCS5_pbkdf2_set__imp__PKCS5_pbkdf2_set_PKCS5_v2_PBE_keyivgen__imp__PKCS5_v2_PBE_keyivgen_PKCS7_ATTR_SIGN_it__imp__PKCS7_ATTR_SIGN_it_PKCS7_ATTR_VERIFY_it__imp__PKCS7_ATTR_VERIFY_it_PKCS7_DIGEST_free__imp__PKCS7_DIGEST_free_PKCS7_DIGEST_it__imp__PKCS7_DIGEST_it_PKCS7_DIGEST_new__imp__PKCS7_DIGEST_new_PKCS7_ENCRYPT_free__imp__PKCS7_ENCRYPT_free_PKCS7_ENCRYPT_it__imp__PKCS7_ENCRYPT_it_PKCS7_ENCRYPT_new__imp__PKCS7_ENCRYPT_new_PKCS7_ENC_CONTENT_free__imp__PKCS7_ENC_CONTENT_free_PKCS7_ENC_CONTENT_it__imp__PKCS7_ENC_CONTENT_it_PKCS7_ENC_CONTENT_new__imp__PKCS7_ENC_CONTENT_new_PKCS7_ENVELOPE_free__imp__PKCS7_ENVELOPE_free_PKCS7_ENVELOPE_it__imp__PKCS7_ENVELOPE_it_PKCS7_ENVELOPE_new__imp__PKCS7_ENVELOPE_new_PKCS7_ISSUER_AND_SERIAL_digest__imp__PKCS7_ISSUER_AND_SERIAL_digest_PKCS7_ISSUER_AND_SERIAL_free__imp__PKCS7_ISSUER_AND_SERIAL_free_PKCS7_ISSUER_AND_SERIAL_it__imp__PKCS7_ISSUER_AND_SERIAL_it_PKCS7_ISSUER_AND_SERIAL_new__imp__PKCS7_ISSUER_AND_SERIAL_new_PKCS7_RECIP_INFO_free__imp__PKCS7_RECIP_INFO_free_PKCS7_RECIP_INFO_get0_alg__imp__PKCS7_RECIP_INFO_get0_alg_PKCS7_RECIP_INFO_it__imp__PKCS7_RECIP_INFO_it_PKCS7_RECIP_INFO_new__imp__PKCS7_RECIP_INFO_new_PKCS7_RECIP_INFO_set__imp__PKCS7_RECIP_INFO_set_PKCS7_SIGNED_free__imp__PKCS7_SIGNED_free_PKCS7_SIGNED_it__imp__PKCS7_SIGNED_it_PKCS7_SIGNED_new__imp__PKCS7_SIGNED_new_PKCS7_SIGNER_INFO_free__imp__PKCS7_SIGNER_INFO_free_PKCS7_SIGNER_INFO_get0_algs__imp__PKCS7_SIGNER_INFO_get0_algs_PKCS7_SIGNER_INFO_it__imp__PKCS7_SIGNER_INFO_it_PKCS7_SIGNER_INFO_new__imp__PKCS7_SIGNER_INFO_new_PKCS7_SIGNER_INFO_set__imp__PKCS7_SIGNER_INFO_set_PKCS7_SIGNER_INFO_sign__imp__PKCS7_SIGNER_INFO_sign_PKCS7_SIGN_ENVELOPE_free__imp__PKCS7_SIGN_ENVELOPE_free_PKCS7_SIGN_ENVELOPE_it__imp__PKCS7_SIGN_ENVELOPE_it_PKCS7_SIGN_ENVELOPE_new__imp__PKCS7_SIGN_ENVELOPE_new_PKCS7_add0_attrib_signing_time__imp__PKCS7_add0_attrib_signing_time_PKCS7_add1_attrib_digest__imp__PKCS7_add1_attrib_digest_PKCS7_add_attrib_content_type__imp__PKCS7_add_attrib_content_type_PKCS7_add_attrib_smimecap__imp__PKCS7_add_attrib_smimecap_PKCS7_add_attribute__imp__PKCS7_add_attribute_PKCS7_add_certificate__imp__PKCS7_add_certificate_PKCS7_add_crl__imp__PKCS7_add_crl_PKCS7_add_recipient__imp__PKCS7_add_recipient_PKCS7_add_recipient_info__imp__PKCS7_add_recipient_info_PKCS7_add_signature__imp__PKCS7_add_signature_PKCS7_add_signed_attribute__imp__PKCS7_add_signed_attribute_PKCS7_add_signer__imp__PKCS7_add_signer_PKCS7_cert_from_signer_info__imp__PKCS7_cert_from_signer_info_PKCS7_content_new__imp__PKCS7_content_new_PKCS7_ctrl__imp__PKCS7_ctrl_PKCS7_dataDecode__imp__PKCS7_dataDecode_PKCS7_dataFinal__imp__PKCS7_dataFinal_PKCS7_dataInit__imp__PKCS7_dataInit_PKCS7_dataVerify__imp__PKCS7_dataVerify_PKCS7_decrypt__imp__PKCS7_decrypt_PKCS7_digest_from_attributes__imp__PKCS7_digest_from_attributes_PKCS7_dup__imp__PKCS7_dup_PKCS7_encrypt__imp__PKCS7_encrypt_PKCS7_final__imp__PKCS7_final_PKCS7_free__imp__PKCS7_free_PKCS7_get0_signers__imp__PKCS7_get0_signers_PKCS7_get_attribute__imp__PKCS7_get_attribute_PKCS7_get_issuer_and_serial__imp__PKCS7_get_issuer_and_serial_PKCS7_get_signed_attribute__imp__PKCS7_get_signed_attribute_PKCS7_get_signer_info__imp__PKCS7_get_signer_info_PKCS7_get_smimecap__imp__PKCS7_get_smimecap_PKCS7_it__imp__PKCS7_it_PKCS7_new__imp__PKCS7_new_PKCS7_print_ctx__imp__PKCS7_print_ctx_PKCS7_set0_type_other__imp__PKCS7_set0_type_other_PKCS7_set_attributes__imp__PKCS7_set_attributes_PKCS7_set_cipher__imp__PKCS7_set_cipher_PKCS7_set_content__imp__PKCS7_set_content_PKCS7_set_digest__imp__PKCS7_set_digest_PKCS7_set_signed_attributes__imp__PKCS7_set_signed_attributes_PKCS7_set_type__imp__PKCS7_set_type_PKCS7_sign__imp__PKCS7_sign_PKCS7_sign_add_signer__imp__PKCS7_sign_add_signer_PKCS7_signatureVerify__imp__PKCS7_signatureVerify_PKCS7_simple_smimecap__imp__PKCS7_simple_smimecap_PKCS7_stream__imp__PKCS7_stream_PKCS7_to_TS_TST_INFO__imp__PKCS7_to_TS_TST_INFO_PKCS7_verify__imp__PKCS7_verify_PKCS8_PRIV_KEY_INFO_free__imp__PKCS8_PRIV_KEY_INFO_free_PKCS8_PRIV_KEY_INFO_it__imp__PKCS8_PRIV_KEY_INFO_it_PKCS8_PRIV_KEY_INFO_new__imp__PKCS8_PRIV_KEY_INFO_new_PKCS8_add_keyusage__imp__PKCS8_add_keyusage_PKCS8_decrypt__imp__PKCS8_decrypt_PKCS8_encrypt__imp__PKCS8_encrypt_PKCS8_pkey_get0__imp__PKCS8_pkey_get0_PKCS8_pkey_set0__imp__PKCS8_pkey_set0_PKCS8_set_broken__imp__PKCS8_set_broken_PKEY_USAGE_PERIOD_free__imp__PKEY_USAGE_PERIOD_free_PKEY_USAGE_PERIOD_it__imp__PKEY_USAGE_PERIOD_it_PKEY_USAGE_PERIOD_new__imp__PKEY_USAGE_PERIOD_new_POLICYINFO_free__imp__POLICYINFO_free_POLICYINFO_it__imp__POLICYINFO_it_POLICYINFO_new__imp__POLICYINFO_new_POLICYQUALINFO_free__imp__POLICYQUALINFO_free_POLICYQUALINFO_it__imp__POLICYQUALINFO_it_POLICYQUALINFO_new__imp__POLICYQUALINFO_new_POLICY_CONSTRAINTS_free__imp__POLICY_CONSTRAINTS_free_POLICY_CONSTRAINTS_it__imp__POLICY_CONSTRAINTS_it_POLICY_CONSTRAINTS_new__imp__POLICY_CONSTRAINTS_new_POLICY_MAPPINGS_it__imp__POLICY_MAPPINGS_it_POLICY_MAPPING_free__imp__POLICY_MAPPING_free_POLICY_MAPPING_it__imp__POLICY_MAPPING_it_POLICY_MAPPING_new__imp__POLICY_MAPPING_new_PROXY_CERT_INFO_EXTENSION_free__imp__PROXY_CERT_INFO_EXTENSION_free_PROXY_CERT_INFO_EXTENSION_it__imp__PROXY_CERT_INFO_EXTENSION_it_PROXY_CERT_INFO_EXTENSION_new__imp__PROXY_CERT_INFO_EXTENSION_new_PROXY_POLICY_free__imp__PROXY_POLICY_free_PROXY_POLICY_it__imp__PROXY_POLICY_it_PROXY_POLICY_new__imp__PROXY_POLICY_new_RAND_SSLeay__imp__RAND_SSLeay_RAND_add__imp__RAND_add_RAND_bytes__imp__RAND_bytes_RAND_cleanup__imp__RAND_cleanup_RAND_egd__imp__RAND_egd_RAND_egd_bytes__imp__RAND_egd_bytes_RAND_event__imp__RAND_event_RAND_file_name__imp__RAND_file_name_RAND_get_rand_method__imp__RAND_get_rand_method_RAND_load_file__imp__RAND_load_file_RAND_poll__imp__RAND_poll_RAND_pseudo_bytes__imp__RAND_pseudo_bytes_RAND_query_egd_bytes__imp__RAND_query_egd_bytes_RAND_screen__imp__RAND_screen_RAND_seed__imp__RAND_seed_RAND_set_rand_engine__imp__RAND_set_rand_engine_RAND_set_rand_method__imp__RAND_set_rand_method_RAND_status__imp__RAND_status_RAND_write_file__imp__RAND_write_file_RC2_cbc_encrypt__imp__RC2_cbc_encrypt_RC2_cfb64_encrypt__imp__RC2_cfb64_encrypt_RC2_decrypt__imp__RC2_decrypt_RC2_ecb_encrypt__imp__RC2_ecb_encrypt_RC2_encrypt__imp__RC2_encrypt_RC2_ofb64_encrypt__imp__RC2_ofb64_encrypt_RC2_set_key__imp__RC2_set_key_RC4__imp__RC4_RC4_options__imp__RC4_options_RC4_set_key__imp__RC4_set_key_RIPEMD160__imp__RIPEMD160_RIPEMD160_Final__imp__RIPEMD160_Final_RIPEMD160_Init__imp__RIPEMD160_Init_RIPEMD160_Transform__imp__RIPEMD160_Transform_RIPEMD160_Update__imp__RIPEMD160_Update_RSAPrivateKey_dup__imp__RSAPrivateKey_dup_RSAPrivateKey_it__imp__RSAPrivateKey_it_RSAPublicKey_dup__imp__RSAPublicKey_dup_RSAPublicKey_it__imp__RSAPublicKey_it_RSA_OAEP_PARAMS_free__imp__RSA_OAEP_PARAMS_free_RSA_OAEP_PARAMS_it__imp__RSA_OAEP_PARAMS_it_RSA_OAEP_PARAMS_new__imp__RSA_OAEP_PARAMS_new_RSA_PKCS1_SSLeay__imp__RSA_PKCS1_SSLeay_RSA_PSS_PARAMS_free__imp__RSA_PSS_PARAMS_free_RSA_PSS_PARAMS_it__imp__RSA_PSS_PARAMS_it_RSA_PSS_PARAMS_new__imp__RSA_PSS_PARAMS_new_RSA_X931_hash_id__imp__RSA_X931_hash_id_RSA_blinding_off__imp__RSA_blinding_off_RSA_blinding_on__imp__RSA_blinding_on_RSA_check_key__imp__RSA_check_key_RSA_flags__imp__RSA_flags_RSA_free__imp__RSA_free_RSA_generate_key__imp__RSA_generate_key_RSA_generate_key_ex__imp__RSA_generate_key_ex_RSA_get_default_method__imp__RSA_get_default_method_RSA_get_ex_data__imp__RSA_get_ex_data_RSA_get_ex_new_index__imp__RSA_get_ex_new_index_RSA_get_method__imp__RSA_get_method_RSA_memory_lock__imp__RSA_memory_lock_RSA_new__imp__RSA_new_RSA_new_method__imp__RSA_new_method_RSA_null_method__imp__RSA_null_method_RSA_padding_add_PKCS1_OAEP__imp__RSA_padding_add_PKCS1_OAEP_RSA_padding_add_PKCS1_OAEP_mgf1__imp__RSA_padding_add_PKCS1_OAEP_mgf1_RSA_padding_add_PKCS1_PSS__imp__RSA_padding_add_PKCS1_PSS_RSA_padding_add_PKCS1_PSS_mgf1__imp__RSA_padding_add_PKCS1_PSS_mgf1_RSA_padding_add_PKCS1_type_1__imp__RSA_padding_add_PKCS1_type_1_RSA_padding_add_PKCS1_type_2__imp__RSA_padding_add_PKCS1_type_2_RSA_padding_add_SSLv23__imp__RSA_padding_add_SSLv23_RSA_padding_add_X931__imp__RSA_padding_add_X931_RSA_padding_add_none__imp__RSA_padding_add_none_RSA_padding_check_PKCS1_OAEP__imp__RSA_padding_check_PKCS1_OAEP_RSA_padding_check_PKCS1_OAEP_mgf1__imp__RSA_padding_check_PKCS1_OAEP_mgf1_RSA_padding_check_PKCS1_type_1__imp__RSA_padding_check_PKCS1_type_1_RSA_padding_check_PKCS1_type_2__imp__RSA_padding_check_PKCS1_type_2_RSA_padding_check_SSLv23__imp__RSA_padding_check_SSLv23_RSA_padding_check_X931__imp__RSA_padding_check_X931_RSA_padding_check_none__imp__RSA_padding_check_none_RSA_print__imp__RSA_print_RSA_print_fp__imp__RSA_print_fp_RSA_private_decrypt__imp__RSA_private_decrypt_RSA_private_encrypt__imp__RSA_private_encrypt_RSA_public_decrypt__imp__RSA_public_decrypt_RSA_public_encrypt__imp__RSA_public_encrypt_RSA_set_default_method__imp__RSA_set_default_method_RSA_set_ex_data__imp__RSA_set_ex_data_RSA_set_method__imp__RSA_set_method_RSA_setup_blinding__imp__RSA_setup_blinding_RSA_sign__imp__RSA_sign_RSA_sign_ASN1_OCTET_STRING__imp__RSA_sign_ASN1_OCTET_STRING_RSA_size__imp__RSA_size_RSA_up_ref__imp__RSA_up_ref_RSA_verify__imp__RSA_verify_RSA_verify_ASN1_OCTET_STRING__imp__RSA_verify_ASN1_OCTET_STRING_RSA_verify_PKCS1_PSS__imp__RSA_verify_PKCS1_PSS_RSA_verify_PKCS1_PSS_mgf1__imp__RSA_verify_PKCS1_PSS_mgf1_SEED_cbc_encrypt__imp__SEED_cbc_encrypt_SEED_cfb128_encrypt__imp__SEED_cfb128_encrypt_SEED_decrypt__imp__SEED_decrypt_SEED_ecb_encrypt__imp__SEED_ecb_encrypt_SEED_encrypt__imp__SEED_encrypt_SEED_ofb128_encrypt__imp__SEED_ofb128_encrypt_SEED_set_key__imp__SEED_set_key_SHA1__imp__SHA1_SHA1_Final__imp__SHA1_Final_SHA1_Init__imp__SHA1_Init_SHA1_Transform__imp__SHA1_Transform_SHA1_Update__imp__SHA1_Update_SHA224__imp__SHA224_SHA224_Final__imp__SHA224_Final_SHA224_Init__imp__SHA224_Init_SHA224_Update__imp__SHA224_Update_SHA256__imp__SHA256_SHA256_Final__imp__SHA256_Final_SHA256_Init__imp__SHA256_Init_SHA256_Transform__imp__SHA256_Transform_SHA256_Update__imp__SHA256_Update_SHA384__imp__SHA384_SHA384_Final__imp__SHA384_Final_SHA384_Init__imp__SHA384_Init_SHA384_Update__imp__SHA384_Update_SHA512__imp__SHA512_SHA512_Final__imp__SHA512_Final_SHA512_Init__imp__SHA512_Init_SHA512_Transform__imp__SHA512_Transform_SHA512_Update__imp__SHA512_Update_SHA__imp__SHA_SHA_Final__imp__SHA_Final_SHA_Init__imp__SHA_Init_SHA_Transform__imp__SHA_Transform_SHA_Update__imp__SHA_Update_SMIME_crlf_copy__imp__SMIME_crlf_copy_SMIME_read_ASN1__imp__SMIME_read_ASN1_SMIME_read_CMS__imp__SMIME_read_CMS_SMIME_read_PKCS7__imp__SMIME_read_PKCS7_SMIME_text__imp__SMIME_text_SMIME_write_ASN1__imp__SMIME_write_ASN1_SMIME_write_CMS__imp__SMIME_write_CMS_SMIME_write_PKCS7__imp__SMIME_write_PKCS7_SRP_Calc_A__imp__SRP_Calc_A_SRP_Calc_B__imp__SRP_Calc_B_SRP_Calc_client_key__imp__SRP_Calc_client_key_SRP_Calc_server_key__imp__SRP_Calc_server_key_SRP_Calc_u__imp__SRP_Calc_u_SRP_Calc_x__imp__SRP_Calc_x_SRP_VBASE_free__imp__SRP_VBASE_free_SRP_VBASE_get1_by_user__imp__SRP_VBASE_get1_by_user_SRP_VBASE_get_by_user__imp__SRP_VBASE_get_by_user_SRP_VBASE_init__imp__SRP_VBASE_init_SRP_VBASE_new__imp__SRP_VBASE_new_SRP_Verify_A_mod_N__imp__SRP_Verify_A_mod_N_SRP_Verify_B_mod_N__imp__SRP_Verify_B_mod_N_SRP_check_known_gN_param__imp__SRP_check_known_gN_param_SRP_create_verifier__imp__SRP_create_verifier_SRP_create_verifier_BN__imp__SRP_create_verifier_BN_SRP_get_default_gN__imp__SRP_get_default_gN_SRP_user_pwd_free__imp__SRP_user_pwd_free_SSLeay_version__imp__SSLeay_version_SXNETID_free__imp__SXNETID_free_SXNETID_it__imp__SXNETID_it_SXNETID_new__imp__SXNETID_new_SXNET_add_id_INTEGER__imp__SXNET_add_id_INTEGER_SXNET_add_id_asc__imp__SXNET_add_id_asc_SXNET_add_id_ulong__imp__SXNET_add_id_ulong_SXNET_free__imp__SXNET_free_SXNET_get_id_INTEGER__imp__SXNET_get_id_INTEGER_SXNET_get_id_asc__imp__SXNET_get_id_asc_SXNET_get_id_ulong__imp__SXNET_get_id_ulong_SXNET_it__imp__SXNET_it_SXNET_new__imp__SXNET_new_TS_ACCURACY_dup__imp__TS_ACCURACY_dup_TS_ACCURACY_free__imp__TS_ACCURACY_free_TS_ACCURACY_get_micros__imp__TS_ACCURACY_get_micros_TS_ACCURACY_get_millis__imp__TS_ACCURACY_get_millis_TS_ACCURACY_get_seconds__imp__TS_ACCURACY_get_seconds_TS_ACCURACY_new__imp__TS_ACCURACY_new_TS_ACCURACY_set_micros__imp__TS_ACCURACY_set_micros_TS_ACCURACY_set_millis__imp__TS_ACCURACY_set_millis_TS_ACCURACY_set_seconds__imp__TS_ACCURACY_set_seconds_TS_ASN1_INTEGER_print_bio__imp__TS_ASN1_INTEGER_print_bio_TS_CONF_get_tsa_section__imp__TS_CONF_get_tsa_section_TS_CONF_load_cert__imp__TS_CONF_load_cert_TS_CONF_load_certs__imp__TS_CONF_load_certs_TS_CONF_load_key__imp__TS_CONF_load_key_TS_CONF_set_accuracy__imp__TS_CONF_set_accuracy_TS_CONF_set_certs__imp__TS_CONF_set_certs_TS_CONF_set_clock_precision_digits__imp__TS_CONF_set_clock_precision_digits_TS_CONF_set_crypto_device__imp__TS_CONF_set_crypto_device_TS_CONF_set_def_policy__imp__TS_CONF_set_def_policy_TS_CONF_set_default_engine__imp__TS_CONF_set_default_engine_TS_CONF_set_digests__imp__TS_CONF_set_digests_TS_CONF_set_ess_cert_id_chain__imp__TS_CONF_set_ess_cert_id_chain_TS_CONF_set_ordering__imp__TS_CONF_set_ordering_TS_CONF_set_policies__imp__TS_CONF_set_policies_TS_CONF_set_serial__imp__TS_CONF_set_serial_TS_CONF_set_signer_cert__imp__TS_CONF_set_signer_cert_TS_CONF_set_signer_key__imp__TS_CONF_set_signer_key_TS_CONF_set_tsa_name__imp__TS_CONF_set_tsa_name_TS_MSG_IMPRINT_dup__imp__TS_MSG_IMPRINT_dup_TS_MSG_IMPRINT_free__imp__TS_MSG_IMPRINT_free_TS_MSG_IMPRINT_get_algo__imp__TS_MSG_IMPRINT_get_algo_TS_MSG_IMPRINT_get_msg__imp__TS_MSG_IMPRINT_get_msg_TS_MSG_IMPRINT_new__imp__TS_MSG_IMPRINT_new_TS_MSG_IMPRINT_print_bio__imp__TS_MSG_IMPRINT_print_bio_TS_MSG_IMPRINT_set_algo__imp__TS_MSG_IMPRINT_set_algo_TS_MSG_IMPRINT_set_msg__imp__TS_MSG_IMPRINT_set_msg_TS_OBJ_print_bio__imp__TS_OBJ_print_bio_TS_REQ_add_ext__imp__TS_REQ_add_ext_TS_REQ_delete_ext__imp__TS_REQ_delete_ext_TS_REQ_dup__imp__TS_REQ_dup_TS_REQ_ext_free__imp__TS_REQ_ext_free_TS_REQ_free__imp__TS_REQ_free_TS_REQ_get_cert_req__imp__TS_REQ_get_cert_req_TS_REQ_get_ext__imp__TS_REQ_get_ext_TS_REQ_get_ext_by_NID__imp__TS_REQ_get_ext_by_NID_TS_REQ_get_ext_by_OBJ__imp__TS_REQ_get_ext_by_OBJ_TS_REQ_get_ext_by_critical__imp__TS_REQ_get_ext_by_critical_TS_REQ_get_ext_count__imp__TS_REQ_get_ext_count_TS_REQ_get_ext_d2i__imp__TS_REQ_get_ext_d2i_TS_REQ_get_exts__imp__TS_REQ_get_exts_TS_REQ_get_msg_imprint__imp__TS_REQ_get_msg_imprint_TS_REQ_get_nonce__imp__TS_REQ_get_nonce_TS_REQ_get_policy_id__imp__TS_REQ_get_policy_id_TS_REQ_get_version__imp__TS_REQ_get_version_TS_REQ_new__imp__TS_REQ_new_TS_REQ_print_bio__imp__TS_REQ_print_bio_TS_REQ_set_cert_req__imp__TS_REQ_set_cert_req_TS_REQ_set_msg_imprint__imp__TS_REQ_set_msg_imprint_TS_REQ_set_nonce__imp__TS_REQ_set_nonce_TS_REQ_set_policy_id__imp__TS_REQ_set_policy_id_TS_REQ_set_version__imp__TS_REQ_set_version_TS_REQ_to_TS_VERIFY_CTX__imp__TS_REQ_to_TS_VERIFY_CTX_TS_RESP_CTX_add_failure_info__imp__TS_RESP_CTX_add_failure_info_TS_RESP_CTX_add_flags__imp__TS_RESP_CTX_add_flags_TS_RESP_CTX_add_md__imp__TS_RESP_CTX_add_md_TS_RESP_CTX_add_policy__imp__TS_RESP_CTX_add_policy_TS_RESP_CTX_free__imp__TS_RESP_CTX_free_TS_RESP_CTX_get_request__imp__TS_RESP_CTX_get_request_TS_RESP_CTX_get_tst_info__imp__TS_RESP_CTX_get_tst_info_TS_RESP_CTX_new__imp__TS_RESP_CTX_new_TS_RESP_CTX_set_accuracy__imp__TS_RESP_CTX_set_accuracy_TS_RESP_CTX_set_certs__imp__TS_RESP_CTX_set_certs_TS_RESP_CTX_set_clock_precision_digits__imp__TS_RESP_CTX_set_clock_precision_digits_TS_RESP_CTX_set_def_policy__imp__TS_RESP_CTX_set_def_policy_TS_RESP_CTX_set_extension_cb__imp__TS_RESP_CTX_set_extension_cb_TS_RESP_CTX_set_serial_cb__imp__TS_RESP_CTX_set_serial_cb_TS_RESP_CTX_set_signer_cert__imp__TS_RESP_CTX_set_signer_cert_TS_RESP_CTX_set_signer_key__imp__TS_RESP_CTX_set_signer_key_TS_RESP_CTX_set_status_info__imp__TS_RESP_CTX_set_status_info_TS_RESP_CTX_set_status_info_cond__imp__TS_RESP_CTX_set_status_info_cond_TS_RESP_CTX_set_time_cb__imp__TS_RESP_CTX_set_time_cb_TS_RESP_create_response__imp__TS_RESP_create_response_TS_RESP_dup__imp__TS_RESP_dup_TS_RESP_free__imp__TS_RESP_free_TS_RESP_get_status_info__imp__TS_RESP_get_status_info_TS_RESP_get_token__imp__TS_RESP_get_token_TS_RESP_get_tst_info__imp__TS_RESP_get_tst_info_TS_RESP_new__imp__TS_RESP_new_TS_RESP_print_bio__imp__TS_RESP_print_bio_TS_RESP_set_status_info__imp__TS_RESP_set_status_info_TS_RESP_set_tst_info__imp__TS_RESP_set_tst_info_TS_RESP_verify_response__imp__TS_RESP_verify_response_TS_RESP_verify_signature__imp__TS_RESP_verify_signature_TS_RESP_verify_token__imp__TS_RESP_verify_token_TS_STATUS_INFO_dup__imp__TS_STATUS_INFO_dup_TS_STATUS_INFO_free__imp__TS_STATUS_INFO_free_TS_STATUS_INFO_new__imp__TS_STATUS_INFO_new_TS_STATUS_INFO_print_bio__imp__TS_STATUS_INFO_print_bio_TS_TST_INFO_add_ext__imp__TS_TST_INFO_add_ext_TS_TST_INFO_delete_ext__imp__TS_TST_INFO_delete_ext_TS_TST_INFO_dup__imp__TS_TST_INFO_dup_TS_TST_INFO_ext_free__imp__TS_TST_INFO_ext_free_TS_TST_INFO_free__imp__TS_TST_INFO_free_TS_TST_INFO_get_accuracy__imp__TS_TST_INFO_get_accuracy_TS_TST_INFO_get_ext__imp__TS_TST_INFO_get_ext_TS_TST_INFO_get_ext_by_NID__imp__TS_TST_INFO_get_ext_by_NID_TS_TST_INFO_get_ext_by_OBJ__imp__TS_TST_INFO_get_ext_by_OBJ_TS_TST_INFO_get_ext_by_critical__imp__TS_TST_INFO_get_ext_by_critical_TS_TST_INFO_get_ext_count__imp__TS_TST_INFO_get_ext_count_TS_TST_INFO_get_ext_d2i__imp__TS_TST_INFO_get_ext_d2i_TS_TST_INFO_get_exts__imp__TS_TST_INFO_get_exts_TS_TST_INFO_get_msg_imprint__imp__TS_TST_INFO_get_msg_imprint_TS_TST_INFO_get_nonce__imp__TS_TST_INFO_get_nonce_TS_TST_INFO_get_ordering__imp__TS_TST_INFO_get_ordering_TS_TST_INFO_get_policy_id__imp__TS_TST_INFO_get_policy_id_TS_TST_INFO_get_serial__imp__TS_TST_INFO_get_serial_TS_TST_INFO_get_time__imp__TS_TST_INFO_get_time_TS_TST_INFO_get_tsa__imp__TS_TST_INFO_get_tsa_TS_TST_INFO_get_version__imp__TS_TST_INFO_get_version_TS_TST_INFO_new__imp__TS_TST_INFO_new_TS_TST_INFO_print_bio__imp__TS_TST_INFO_print_bio_TS_TST_INFO_set_accuracy__imp__TS_TST_INFO_set_accuracy_TS_TST_INFO_set_msg_imprint__imp__TS_TST_INFO_set_msg_imprint_TS_TST_INFO_set_nonce__imp__TS_TST_INFO_set_nonce_TS_TST_INFO_set_ordering__imp__TS_TST_INFO_set_ordering_TS_TST_INFO_set_policy_id__imp__TS_TST_INFO_set_policy_id_TS_TST_INFO_set_serial__imp__TS_TST_INFO_set_serial_TS_TST_INFO_set_time__imp__TS_TST_INFO_set_time_TS_TST_INFO_set_tsa__imp__TS_TST_INFO_set_tsa_TS_TST_INFO_set_version__imp__TS_TST_INFO_set_version_TS_VERIFY_CTX_cleanup__imp__TS_VERIFY_CTX_cleanup_TS_VERIFY_CTX_free__imp__TS_VERIFY_CTX_free_TS_VERIFY_CTX_init__imp__TS_VERIFY_CTX_init_TS_VERIFY_CTX_new__imp__TS_VERIFY_CTX_new_TS_X509_ALGOR_print_bio__imp__TS_X509_ALGOR_print_bio_TS_ext_print_bio__imp__TS_ext_print_bio_TXT_DB_create_index__imp__TXT_DB_create_index_TXT_DB_free__imp__TXT_DB_free_TXT_DB_get_by_index__imp__TXT_DB_get_by_index_TXT_DB_insert__imp__TXT_DB_insert_TXT_DB_read__imp__TXT_DB_read_TXT_DB_write__imp__TXT_DB_write_UI_OpenSSL__imp__UI_OpenSSL_UI_UTIL_read_pw__imp__UI_UTIL_read_pw_UI_UTIL_read_pw_string__imp__UI_UTIL_read_pw_string_UI_add_error_string__imp__UI_add_error_string_UI_add_info_string__imp__UI_add_info_string_UI_add_input_boolean__imp__UI_add_input_boolean_UI_add_input_string__imp__UI_add_input_string_UI_add_user_data__imp__UI_add_user_data_UI_add_verify_string__imp__UI_add_verify_string_UI_construct_prompt__imp__UI_construct_prompt_UI_create_method__imp__UI_create_method_UI_ctrl__imp__UI_ctrl_UI_destroy_method__imp__UI_destroy_method_UI_dup_error_string__imp__UI_dup_error_string_UI_dup_info_string__imp__UI_dup_info_string_UI_dup_input_boolean__imp__UI_dup_input_boolean_UI_dup_input_string__imp__UI_dup_input_string_UI_dup_verify_string__imp__UI_dup_verify_string_UI_free__imp__UI_free_UI_get0_action_string__imp__UI_get0_action_string_UI_get0_output_string__imp__UI_get0_output_string_UI_get0_result__imp__UI_get0_result_UI_get0_result_string__imp__UI_get0_result_string_UI_get0_test_string__imp__UI_get0_test_string_UI_get0_user_data__imp__UI_get0_user_data_UI_get_default_method__imp__UI_get_default_method_UI_get_ex_data__imp__UI_get_ex_data_UI_get_ex_new_index__imp__UI_get_ex_new_index_UI_get_input_flags__imp__UI_get_input_flags_UI_get_method__imp__UI_get_method_UI_get_result_maxsize__imp__UI_get_result_maxsize_UI_get_result_minsize__imp__UI_get_result_minsize_UI_get_string_type__imp__UI_get_string_type_UI_method_get_closer__imp__UI_method_get_closer_UI_method_get_flusher__imp__UI_method_get_flusher_UI_method_get_opener__imp__UI_method_get_opener_UI_method_get_prompt_constructor__imp__UI_method_get_prompt_constructor_UI_method_get_reader__imp__UI_method_get_reader_UI_method_get_writer__imp__UI_method_get_writer_UI_method_set_closer__imp__UI_method_set_closer_UI_method_set_flusher__imp__UI_method_set_flusher_UI_method_set_opener__imp__UI_method_set_opener_UI_method_set_prompt_constructor__imp__UI_method_set_prompt_constructor_UI_method_set_reader__imp__UI_method_set_reader_UI_method_set_writer__imp__UI_method_set_writer_UI_new__imp__UI_new_UI_new_method__imp__UI_new_method_UI_process__imp__UI_process_UI_set_default_method__imp__UI_set_default_method_UI_set_ex_data__imp__UI_set_ex_data_UI_set_method__imp__UI_set_method_UI_set_result__imp__UI_set_result_USERNOTICE_free__imp__USERNOTICE_free_USERNOTICE_it__imp__USERNOTICE_it_USERNOTICE_new__imp__USERNOTICE_new_UTF8_getc__imp__UTF8_getc_UTF8_putc__imp__UTF8_putc_WHIRLPOOL__imp__WHIRLPOOL_WHIRLPOOL_BitUpdate__imp__WHIRLPOOL_BitUpdate_WHIRLPOOL_Final__imp__WHIRLPOOL_Final_WHIRLPOOL_Init__imp__WHIRLPOOL_Init_WHIRLPOOL_Update__imp__WHIRLPOOL_Update_X509V3_EXT_CRL_add_conf__imp__X509V3_EXT_CRL_add_conf_X509V3_EXT_CRL_add_nconf__imp__X509V3_EXT_CRL_add_nconf_X509V3_EXT_REQ_add_conf__imp__X509V3_EXT_REQ_add_conf_X509V3_EXT_REQ_add_nconf__imp__X509V3_EXT_REQ_add_nconf_X509V3_EXT_add__imp__X509V3_EXT_add_X509V3_EXT_add_alias__imp__X509V3_EXT_add_alias_X509V3_EXT_add_conf__imp__X509V3_EXT_add_conf_X509V3_EXT_add_list__imp__X509V3_EXT_add_list_X509V3_EXT_add_nconf__imp__X509V3_EXT_add_nconf_X509V3_EXT_add_nconf_sk__imp__X509V3_EXT_add_nconf_sk_X509V3_EXT_cleanup__imp__X509V3_EXT_cleanup_X509V3_EXT_conf__imp__X509V3_EXT_conf_X509V3_EXT_conf_nid__imp__X509V3_EXT_conf_nid_X509V3_EXT_d2i__imp__X509V3_EXT_d2i_X509V3_EXT_free__imp__X509V3_EXT_free_X509V3_EXT_get__imp__X509V3_EXT_get_X509V3_EXT_get_nid__imp__X509V3_EXT_get_nid_X509V3_EXT_i2d__imp__X509V3_EXT_i2d_X509V3_EXT_nconf__imp__X509V3_EXT_nconf_X509V3_EXT_nconf_nid__imp__X509V3_EXT_nconf_nid_X509V3_EXT_print__imp__X509V3_EXT_print_X509V3_EXT_print_fp__imp__X509V3_EXT_print_fp_X509V3_EXT_val_prn__imp__X509V3_EXT_val_prn_X509V3_NAME_from_section__imp__X509V3_NAME_from_section_X509V3_add1_i2d__imp__X509V3_add1_i2d_X509V3_add_standard_extensions__imp__X509V3_add_standard_extensions_X509V3_add_value__imp__X509V3_add_value_X509V3_add_value_bool__imp__X509V3_add_value_bool_X509V3_add_value_bool_nf__imp__X509V3_add_value_bool_nf_X509V3_add_value_int__imp__X509V3_add_value_int_X509V3_add_value_uchar__imp__X509V3_add_value_uchar_X509V3_conf_free__imp__X509V3_conf_free_X509V3_extensions_print__imp__X509V3_extensions_print_X509V3_get_d2i__imp__X509V3_get_d2i_X509V3_get_section__imp__X509V3_get_section_X509V3_get_string__imp__X509V3_get_string_X509V3_get_value_bool__imp__X509V3_get_value_bool_X509V3_get_value_int__imp__X509V3_get_value_int_X509V3_parse_list__imp__X509V3_parse_list_X509V3_section_free__imp__X509V3_section_free_X509V3_set_conf_lhash__imp__X509V3_set_conf_lhash_X509V3_set_ctx__imp__X509V3_set_ctx_X509V3_set_nconf__imp__X509V3_set_nconf_X509V3_string_free__imp__X509V3_string_free_X509_ALGORS_it__imp__X509_ALGORS_it_X509_ALGOR_cmp__imp__X509_ALGOR_cmp_X509_ALGOR_dup__imp__X509_ALGOR_dup_X509_ALGOR_free__imp__X509_ALGOR_free_X509_ALGOR_get0__imp__X509_ALGOR_get0_X509_ALGOR_it__imp__X509_ALGOR_it_X509_ALGOR_new__imp__X509_ALGOR_new_X509_ALGOR_set0__imp__X509_ALGOR_set0_X509_ALGOR_set_md__imp__X509_ALGOR_set_md_X509_ATTRIBUTE_count__imp__X509_ATTRIBUTE_count_X509_ATTRIBUTE_create__imp__X509_ATTRIBUTE_create_X509_ATTRIBUTE_create_by_NID__imp__X509_ATTRIBUTE_create_by_NID_X509_ATTRIBUTE_create_by_OBJ__imp__X509_ATTRIBUTE_create_by_OBJ_X509_ATTRIBUTE_create_by_txt__imp__X509_ATTRIBUTE_create_by_txt_X509_ATTRIBUTE_dup__imp__X509_ATTRIBUTE_dup_X509_ATTRIBUTE_free__imp__X509_ATTRIBUTE_free_X509_ATTRIBUTE_get0_data__imp__X509_ATTRIBUTE_get0_data_X509_ATTRIBUTE_get0_object__imp__X509_ATTRIBUTE_get0_object_X509_ATTRIBUTE_get0_type__imp__X509_ATTRIBUTE_get0_type_X509_ATTRIBUTE_it__imp__X509_ATTRIBUTE_it_X509_ATTRIBUTE_new__imp__X509_ATTRIBUTE_new_X509_ATTRIBUTE_set1_data__imp__X509_ATTRIBUTE_set1_data_X509_ATTRIBUTE_set1_object__imp__X509_ATTRIBUTE_set1_object_X509_CERT_AUX_free__imp__X509_CERT_AUX_free_X509_CERT_AUX_it__imp__X509_CERT_AUX_it_X509_CERT_AUX_new__imp__X509_CERT_AUX_new_X509_CERT_AUX_print__imp__X509_CERT_AUX_print_X509_CERT_PAIR_free__imp__X509_CERT_PAIR_free_X509_CERT_PAIR_it__imp__X509_CERT_PAIR_it_X509_CERT_PAIR_new__imp__X509_CERT_PAIR_new_X509_CINF_free__imp__X509_CINF_free_X509_CINF_it__imp__X509_CINF_it_X509_CINF_new__imp__X509_CINF_new_X509_CRL_INFO_free__imp__X509_CRL_INFO_free_X509_CRL_INFO_it__imp__X509_CRL_INFO_it_X509_CRL_INFO_new__imp__X509_CRL_INFO_new_X509_CRL_METHOD_free__imp__X509_CRL_METHOD_free_X509_CRL_METHOD_new__imp__X509_CRL_METHOD_new_X509_CRL_add0_revoked__imp__X509_CRL_add0_revoked_X509_CRL_add1_ext_i2d__imp__X509_CRL_add1_ext_i2d_X509_CRL_add_ext__imp__X509_CRL_add_ext_X509_CRL_check_suiteb__imp__X509_CRL_check_suiteb_X509_CRL_cmp__imp__X509_CRL_cmp_X509_CRL_delete_ext__imp__X509_CRL_delete_ext_X509_CRL_diff__imp__X509_CRL_diff_X509_CRL_digest__imp__X509_CRL_digest_X509_CRL_dup__imp__X509_CRL_dup_X509_CRL_free__imp__X509_CRL_free_X509_CRL_get0_by_cert__imp__X509_CRL_get0_by_cert_X509_CRL_get0_by_serial__imp__X509_CRL_get0_by_serial_X509_CRL_get_ext__imp__X509_CRL_get_ext_X509_CRL_get_ext_by_NID__imp__X509_CRL_get_ext_by_NID_X509_CRL_get_ext_by_OBJ__imp__X509_CRL_get_ext_by_OBJ_X509_CRL_get_ext_by_critical__imp__X509_CRL_get_ext_by_critical_X509_CRL_get_ext_count__imp__X509_CRL_get_ext_count_X509_CRL_get_ext_d2i__imp__X509_CRL_get_ext_d2i_X509_CRL_get_meth_data__imp__X509_CRL_get_meth_data_X509_CRL_http_nbio__imp__X509_CRL_http_nbio_X509_CRL_it__imp__X509_CRL_it_X509_CRL_match__imp__X509_CRL_match_X509_CRL_new__imp__X509_CRL_new_X509_CRL_print__imp__X509_CRL_print_X509_CRL_print_fp__imp__X509_CRL_print_fp_X509_CRL_set_default_method__imp__X509_CRL_set_default_method_X509_CRL_set_issuer_name__imp__X509_CRL_set_issuer_name_X509_CRL_set_lastUpdate__imp__X509_CRL_set_lastUpdate_X509_CRL_set_meth_data__imp__X509_CRL_set_meth_data_X509_CRL_set_nextUpdate__imp__X509_CRL_set_nextUpdate_X509_CRL_set_version__imp__X509_CRL_set_version_X509_CRL_sign__imp__X509_CRL_sign_X509_CRL_sign_ctx__imp__X509_CRL_sign_ctx_X509_CRL_sort__imp__X509_CRL_sort_X509_CRL_verify__imp__X509_CRL_verify_X509_EXTENSIONS_it__imp__X509_EXTENSIONS_it_X509_EXTENSION_create_by_NID__imp__X509_EXTENSION_create_by_NID_X509_EXTENSION_create_by_OBJ__imp__X509_EXTENSION_create_by_OBJ_X509_EXTENSION_dup__imp__X509_EXTENSION_dup_X509_EXTENSION_free__imp__X509_EXTENSION_free_X509_EXTENSION_get_critical__imp__X509_EXTENSION_get_critical_X509_EXTENSION_get_data__imp__X509_EXTENSION_get_data_X509_EXTENSION_get_object__imp__X509_EXTENSION_get_object_X509_EXTENSION_it__imp__X509_EXTENSION_it_X509_EXTENSION_new__imp__X509_EXTENSION_new_X509_EXTENSION_set_critical__imp__X509_EXTENSION_set_critical_X509_EXTENSION_set_data__imp__X509_EXTENSION_set_data_X509_EXTENSION_set_object__imp__X509_EXTENSION_set_object_X509_INFO_free__imp__X509_INFO_free_X509_INFO_new__imp__X509_INFO_new_X509_LOOKUP_by_alias__imp__X509_LOOKUP_by_alias_X509_LOOKUP_by_fingerprint__imp__X509_LOOKUP_by_fingerprint_X509_LOOKUP_by_issuer_serial__imp__X509_LOOKUP_by_issuer_serial_X509_LOOKUP_by_subject__imp__X509_LOOKUP_by_subject_X509_LOOKUP_ctrl__imp__X509_LOOKUP_ctrl_X509_LOOKUP_file__imp__X509_LOOKUP_file_X509_LOOKUP_free__imp__X509_LOOKUP_free_X509_LOOKUP_hash_dir__imp__X509_LOOKUP_hash_dir_X509_LOOKUP_init__imp__X509_LOOKUP_init_X509_LOOKUP_new__imp__X509_LOOKUP_new_X509_LOOKUP_shutdown__imp__X509_LOOKUP_shutdown_X509_NAME_ENTRY_create_by_NID__imp__X509_NAME_ENTRY_create_by_NID_X509_NAME_ENTRY_create_by_OBJ__imp__X509_NAME_ENTRY_create_by_OBJ_X509_NAME_ENTRY_create_by_txt__imp__X509_NAME_ENTRY_create_by_txt_X509_NAME_ENTRY_dup__imp__X509_NAME_ENTRY_dup_X509_NAME_ENTRY_free__imp__X509_NAME_ENTRY_free_X509_NAME_ENTRY_get_data__imp__X509_NAME_ENTRY_get_data_X509_NAME_ENTRY_get_object__imp__X509_NAME_ENTRY_get_object_X509_NAME_ENTRY_it__imp__X509_NAME_ENTRY_it_X509_NAME_ENTRY_new__imp__X509_NAME_ENTRY_new_X509_NAME_ENTRY_set_data__imp__X509_NAME_ENTRY_set_data_X509_NAME_ENTRY_set_object__imp__X509_NAME_ENTRY_set_object_X509_NAME_add_entry__imp__X509_NAME_add_entry_X509_NAME_add_entry_by_NID__imp__X509_NAME_add_entry_by_NID_X509_NAME_add_entry_by_OBJ__imp__X509_NAME_add_entry_by_OBJ_X509_NAME_add_entry_by_txt__imp__X509_NAME_add_entry_by_txt_X509_NAME_cmp__imp__X509_NAME_cmp_X509_NAME_delete_entry__imp__X509_NAME_delete_entry_X509_NAME_digest__imp__X509_NAME_digest_X509_NAME_dup__imp__X509_NAME_dup_X509_NAME_entry_count__imp__X509_NAME_entry_count_X509_NAME_free__imp__X509_NAME_free_X509_NAME_get_entry__imp__X509_NAME_get_entry_X509_NAME_get_index_by_NID__imp__X509_NAME_get_index_by_NID_X509_NAME_get_index_by_OBJ__imp__X509_NAME_get_index_by_OBJ_X509_NAME_get_text_by_NID__imp__X509_NAME_get_text_by_NID_X509_NAME_get_text_by_OBJ__imp__X509_NAME_get_text_by_OBJ_X509_NAME_hash__imp__X509_NAME_hash_X509_NAME_hash_old__imp__X509_NAME_hash_old_X509_NAME_it__imp__X509_NAME_it_X509_NAME_new__imp__X509_NAME_new_X509_NAME_oneline__imp__X509_NAME_oneline_X509_NAME_print__imp__X509_NAME_print_X509_NAME_print_ex__imp__X509_NAME_print_ex_X509_NAME_print_ex_fp__imp__X509_NAME_print_ex_fp_X509_NAME_set__imp__X509_NAME_set_X509_OBJECT_free_contents__imp__X509_OBJECT_free_contents_X509_OBJECT_idx_by_subject__imp__X509_OBJECT_idx_by_subject_X509_OBJECT_retrieve_by_subject__imp__X509_OBJECT_retrieve_by_subject_X509_OBJECT_retrieve_match__imp__X509_OBJECT_retrieve_match_X509_OBJECT_up_ref_count__imp__X509_OBJECT_up_ref_count_X509_PKEY_free__imp__X509_PKEY_free_X509_PKEY_new__imp__X509_PKEY_new_X509_POLICY_NODE_print__imp__X509_POLICY_NODE_print_X509_PUBKEY_free__imp__X509_PUBKEY_free_X509_PUBKEY_get0_param__imp__X509_PUBKEY_get0_param_X509_PUBKEY_get__imp__X509_PUBKEY_get_X509_PUBKEY_it__imp__X509_PUBKEY_it_X509_PUBKEY_new__imp__X509_PUBKEY_new_X509_PUBKEY_set0_param__imp__X509_PUBKEY_set0_param_X509_PUBKEY_set__imp__X509_PUBKEY_set_X509_PURPOSE_add__imp__X509_PURPOSE_add_X509_PURPOSE_cleanup__imp__X509_PURPOSE_cleanup_X509_PURPOSE_get0__imp__X509_PURPOSE_get0_X509_PURPOSE_get0_name__imp__X509_PURPOSE_get0_name_X509_PURPOSE_get0_sname__imp__X509_PURPOSE_get0_sname_X509_PURPOSE_get_by_id__imp__X509_PURPOSE_get_by_id_X509_PURPOSE_get_by_sname__imp__X509_PURPOSE_get_by_sname_X509_PURPOSE_get_count__imp__X509_PURPOSE_get_count_X509_PURPOSE_get_id__imp__X509_PURPOSE_get_id_X509_PURPOSE_get_trust__imp__X509_PURPOSE_get_trust_X509_PURPOSE_set__imp__X509_PURPOSE_set_X509_REQ_INFO_free__imp__X509_REQ_INFO_free_X509_REQ_INFO_it__imp__X509_REQ_INFO_it_X509_REQ_INFO_new__imp__X509_REQ_INFO_new_X509_REQ_add1_attr__imp__X509_REQ_add1_attr_X509_REQ_add1_attr_by_NID__imp__X509_REQ_add1_attr_by_NID_X509_REQ_add1_attr_by_OBJ__imp__X509_REQ_add1_attr_by_OBJ_X509_REQ_add1_attr_by_txt__imp__X509_REQ_add1_attr_by_txt_X509_REQ_add_extensions__imp__X509_REQ_add_extensions_X509_REQ_add_extensions_nid__imp__X509_REQ_add_extensions_nid_X509_REQ_check_private_key__imp__X509_REQ_check_private_key_X509_REQ_delete_attr__imp__X509_REQ_delete_attr_X509_REQ_digest__imp__X509_REQ_digest_X509_REQ_dup__imp__X509_REQ_dup_X509_REQ_extension_nid__imp__X509_REQ_extension_nid_X509_REQ_free__imp__X509_REQ_free_X509_REQ_get1_email__imp__X509_REQ_get1_email_X509_REQ_get_attr__imp__X509_REQ_get_attr_X509_REQ_get_attr_by_NID__imp__X509_REQ_get_attr_by_NID_X509_REQ_get_attr_by_OBJ__imp__X509_REQ_get_attr_by_OBJ_X509_REQ_get_attr_count__imp__X509_REQ_get_attr_count_X509_REQ_get_extension_nids__imp__X509_REQ_get_extension_nids_X509_REQ_get_extensions__imp__X509_REQ_get_extensions_X509_REQ_get_pubkey__imp__X509_REQ_get_pubkey_X509_REQ_it__imp__X509_REQ_it_X509_REQ_new__imp__X509_REQ_new_X509_REQ_print__imp__X509_REQ_print_X509_REQ_print_ex__imp__X509_REQ_print_ex_X509_REQ_print_fp__imp__X509_REQ_print_fp_X509_REQ_set_extension_nids__imp__X509_REQ_set_extension_nids_X509_REQ_set_pubkey__imp__X509_REQ_set_pubkey_X509_REQ_set_subject_name__imp__X509_REQ_set_subject_name_X509_REQ_set_version__imp__X509_REQ_set_version_X509_REQ_sign__imp__X509_REQ_sign_X509_REQ_sign_ctx__imp__X509_REQ_sign_ctx_X509_REQ_to_X509__imp__X509_REQ_to_X509_X509_REQ_verify__imp__X509_REQ_verify_X509_REVOKED_add1_ext_i2d__imp__X509_REVOKED_add1_ext_i2d_X509_REVOKED_add_ext__imp__X509_REVOKED_add_ext_X509_REVOKED_delete_ext__imp__X509_REVOKED_delete_ext_X509_REVOKED_dup__imp__X509_REVOKED_dup_X509_REVOKED_free__imp__X509_REVOKED_free_X509_REVOKED_get_ext__imp__X509_REVOKED_get_ext_X509_REVOKED_get_ext_by_NID__imp__X509_REVOKED_get_ext_by_NID_X509_REVOKED_get_ext_by_OBJ__imp__X509_REVOKED_get_ext_by_OBJ_X509_REVOKED_get_ext_by_critical__imp__X509_REVOKED_get_ext_by_critical_X509_REVOKED_get_ext_count__imp__X509_REVOKED_get_ext_count_X509_REVOKED_get_ext_d2i__imp__X509_REVOKED_get_ext_d2i_X509_REVOKED_it__imp__X509_REVOKED_it_X509_REVOKED_new__imp__X509_REVOKED_new_X509_REVOKED_set_revocationDate__imp__X509_REVOKED_set_revocationDate_X509_REVOKED_set_serialNumber__imp__X509_REVOKED_set_serialNumber_X509_SIG_free__imp__X509_SIG_free_X509_SIG_it__imp__X509_SIG_it_X509_SIG_new__imp__X509_SIG_new_X509_STORE_CTX_cleanup__imp__X509_STORE_CTX_cleanup_X509_STORE_CTX_free__imp__X509_STORE_CTX_free_X509_STORE_CTX_get0_current_crl__imp__X509_STORE_CTX_get0_current_crl_X509_STORE_CTX_get0_current_issuer__imp__X509_STORE_CTX_get0_current_issuer_X509_STORE_CTX_get0_param__imp__X509_STORE_CTX_get0_param_X509_STORE_CTX_get0_parent_ctx__imp__X509_STORE_CTX_get0_parent_ctx_X509_STORE_CTX_get0_policy_tree__imp__X509_STORE_CTX_get0_policy_tree_X509_STORE_CTX_get0_store__imp__X509_STORE_CTX_get0_store_X509_STORE_CTX_get1_chain__imp__X509_STORE_CTX_get1_chain_X509_STORE_CTX_get1_issuer__imp__X509_STORE_CTX_get1_issuer_X509_STORE_CTX_get_chain__imp__X509_STORE_CTX_get_chain_X509_STORE_CTX_get_current_cert__imp__X509_STORE_CTX_get_current_cert_X509_STORE_CTX_get_error__imp__X509_STORE_CTX_get_error_X509_STORE_CTX_get_error_depth__imp__X509_STORE_CTX_get_error_depth_X509_STORE_CTX_get_ex_data__imp__X509_STORE_CTX_get_ex_data_X509_STORE_CTX_get_ex_new_index__imp__X509_STORE_CTX_get_ex_new_index_X509_STORE_CTX_get_explicit_policy__imp__X509_STORE_CTX_get_explicit_policy_X509_STORE_CTX_init__imp__X509_STORE_CTX_init_X509_STORE_CTX_new__imp__X509_STORE_CTX_new_X509_STORE_CTX_purpose_inherit__imp__X509_STORE_CTX_purpose_inherit_X509_STORE_CTX_set0_crls__imp__X509_STORE_CTX_set0_crls_X509_STORE_CTX_set0_param__imp__X509_STORE_CTX_set0_param_X509_STORE_CTX_set_cert__imp__X509_STORE_CTX_set_cert_X509_STORE_CTX_set_chain__imp__X509_STORE_CTX_set_chain_X509_STORE_CTX_set_default__imp__X509_STORE_CTX_set_default_X509_STORE_CTX_set_depth__imp__X509_STORE_CTX_set_depth_X509_STORE_CTX_set_error__imp__X509_STORE_CTX_set_error_X509_STORE_CTX_set_ex_data__imp__X509_STORE_CTX_set_ex_data_X509_STORE_CTX_set_flags__imp__X509_STORE_CTX_set_flags_X509_STORE_CTX_set_purpose__imp__X509_STORE_CTX_set_purpose_X509_STORE_CTX_set_time__imp__X509_STORE_CTX_set_time_X509_STORE_CTX_set_trust__imp__X509_STORE_CTX_set_trust_X509_STORE_CTX_set_verify_cb__imp__X509_STORE_CTX_set_verify_cb_X509_STORE_CTX_trusted_stack__imp__X509_STORE_CTX_trusted_stack_X509_STORE_add_cert__imp__X509_STORE_add_cert_X509_STORE_add_crl__imp__X509_STORE_add_crl_X509_STORE_add_lookup__imp__X509_STORE_add_lookup_X509_STORE_free__imp__X509_STORE_free_X509_STORE_get1_certs__imp__X509_STORE_get1_certs_X509_STORE_get1_crls__imp__X509_STORE_get1_crls_X509_STORE_get_by_subject__imp__X509_STORE_get_by_subject_X509_STORE_load_locations__imp__X509_STORE_load_locations_X509_STORE_new__imp__X509_STORE_new_X509_STORE_set1_param__imp__X509_STORE_set1_param_X509_STORE_set_default_paths__imp__X509_STORE_set_default_paths_X509_STORE_set_depth__imp__X509_STORE_set_depth_X509_STORE_set_flags__imp__X509_STORE_set_flags_X509_STORE_set_lookup_crls_cb__imp__X509_STORE_set_lookup_crls_cb_X509_STORE_set_purpose__imp__X509_STORE_set_purpose_X509_STORE_set_trust__imp__X509_STORE_set_trust_X509_STORE_set_verify_cb__imp__X509_STORE_set_verify_cb_X509_TRUST_add__imp__X509_TRUST_add_X509_TRUST_cleanup__imp__X509_TRUST_cleanup_X509_TRUST_get0__imp__X509_TRUST_get0_X509_TRUST_get0_name__imp__X509_TRUST_get0_name_X509_TRUST_get_by_id__imp__X509_TRUST_get_by_id_X509_TRUST_get_count__imp__X509_TRUST_get_count_X509_TRUST_get_flags__imp__X509_TRUST_get_flags_X509_TRUST_get_trust__imp__X509_TRUST_get_trust_X509_TRUST_set__imp__X509_TRUST_set_X509_TRUST_set_default__imp__X509_TRUST_set_default_X509_VAL_free__imp__X509_VAL_free_X509_VAL_it__imp__X509_VAL_it_X509_VAL_new__imp__X509_VAL_new_X509_VERIFY_PARAM_add0_policy__imp__X509_VERIFY_PARAM_add0_policy_X509_VERIFY_PARAM_add0_table__imp__X509_VERIFY_PARAM_add0_table_X509_VERIFY_PARAM_add1_host__imp__X509_VERIFY_PARAM_add1_host_X509_VERIFY_PARAM_clear_flags__imp__X509_VERIFY_PARAM_clear_flags_X509_VERIFY_PARAM_free__imp__X509_VERIFY_PARAM_free_X509_VERIFY_PARAM_get0__imp__X509_VERIFY_PARAM_get0_X509_VERIFY_PARAM_get0_name__imp__X509_VERIFY_PARAM_get0_name_X509_VERIFY_PARAM_get0_peername__imp__X509_VERIFY_PARAM_get0_peername_X509_VERIFY_PARAM_get_count__imp__X509_VERIFY_PARAM_get_count_X509_VERIFY_PARAM_get_depth__imp__X509_VERIFY_PARAM_get_depth_X509_VERIFY_PARAM_get_flags__imp__X509_VERIFY_PARAM_get_flags_X509_VERIFY_PARAM_inherit__imp__X509_VERIFY_PARAM_inherit_X509_VERIFY_PARAM_lookup__imp__X509_VERIFY_PARAM_lookup_X509_VERIFY_PARAM_new__imp__X509_VERIFY_PARAM_new_X509_VERIFY_PARAM_set1__imp__X509_VERIFY_PARAM_set1_X509_VERIFY_PARAM_set1_email__imp__X509_VERIFY_PARAM_set1_email_X509_VERIFY_PARAM_set1_host__imp__X509_VERIFY_PARAM_set1_host_X509_VERIFY_PARAM_set1_ip__imp__X509_VERIFY_PARAM_set1_ip_X509_VERIFY_PARAM_set1_ip_asc__imp__X509_VERIFY_PARAM_set1_ip_asc_X509_VERIFY_PARAM_set1_name__imp__X509_VERIFY_PARAM_set1_name_X509_VERIFY_PARAM_set1_policies__imp__X509_VERIFY_PARAM_set1_policies_X509_VERIFY_PARAM_set_depth__imp__X509_VERIFY_PARAM_set_depth_X509_VERIFY_PARAM_set_flags__imp__X509_VERIFY_PARAM_set_flags_X509_VERIFY_PARAM_set_hostflags__imp__X509_VERIFY_PARAM_set_hostflags_X509_VERIFY_PARAM_set_purpose__imp__X509_VERIFY_PARAM_set_purpose_X509_VERIFY_PARAM_set_time__imp__X509_VERIFY_PARAM_set_time_X509_VERIFY_PARAM_set_trust__imp__X509_VERIFY_PARAM_set_trust_X509_VERIFY_PARAM_table_cleanup__imp__X509_VERIFY_PARAM_table_cleanup_X509_add1_ext_i2d__imp__X509_add1_ext_i2d_X509_add1_reject_object__imp__X509_add1_reject_object_X509_add1_trust_object__imp__X509_add1_trust_object_X509_add_ext__imp__X509_add_ext_X509_alias_get0__imp__X509_alias_get0_X509_alias_set1__imp__X509_alias_set1_X509_certificate_type__imp__X509_certificate_type_X509_chain_check_suiteb__imp__X509_chain_check_suiteb_X509_chain_up_ref__imp__X509_chain_up_ref_X509_check_akid__imp__X509_check_akid_X509_check_ca__imp__X509_check_ca_X509_check_email__imp__X509_check_email_X509_check_host__imp__X509_check_host_X509_check_ip__imp__X509_check_ip_X509_check_ip_asc__imp__X509_check_ip_asc_X509_check_issued__imp__X509_check_issued_X509_check_private_key__imp__X509_check_private_key_X509_check_purpose__imp__X509_check_purpose_X509_check_trust__imp__X509_check_trust_X509_cmp__imp__X509_cmp_X509_cmp_current_time__imp__X509_cmp_current_time_X509_cmp_time__imp__X509_cmp_time_X509_delete_ext__imp__X509_delete_ext_X509_digest__imp__X509_digest_X509_dup__imp__X509_dup_X509_email_free__imp__X509_email_free_X509_find_by_issuer_and_serial__imp__X509_find_by_issuer_and_serial_X509_find_by_subject__imp__X509_find_by_subject_X509_free__imp__X509_free_X509_get0_pubkey_bitstr__imp__X509_get0_pubkey_bitstr_X509_get0_signature__imp__X509_get0_signature_X509_get1_email__imp__X509_get1_email_X509_get1_ocsp__imp__X509_get1_ocsp_X509_get_default_cert_area__imp__X509_get_default_cert_area_X509_get_default_cert_dir__imp__X509_get_default_cert_dir_X509_get_default_cert_dir_env__imp__X509_get_default_cert_dir_env_X509_get_default_cert_file__imp__X509_get_default_cert_file_X509_get_default_cert_file_env__imp__X509_get_default_cert_file_env_X509_get_default_private_dir__imp__X509_get_default_private_dir_X509_get_ex_data__imp__X509_get_ex_data_X509_get_ex_new_index__imp__X509_get_ex_new_index_X509_get_ext__imp__X509_get_ext_X509_get_ext_by_NID__imp__X509_get_ext_by_NID_X509_get_ext_by_OBJ__imp__X509_get_ext_by_OBJ_X509_get_ext_by_critical__imp__X509_get_ext_by_critical_X509_get_ext_count__imp__X509_get_ext_count_X509_get_ext_d2i__imp__X509_get_ext_d2i_X509_get_issuer_name__imp__X509_get_issuer_name_X509_get_pubkey__imp__X509_get_pubkey_X509_get_pubkey_parameters__imp__X509_get_pubkey_parameters_X509_get_serialNumber__imp__X509_get_serialNumber_X509_get_signature_nid__imp__X509_get_signature_nid_X509_get_subject_name__imp__X509_get_subject_name_X509_gmtime_adj__imp__X509_gmtime_adj_X509_http_nbio__imp__X509_http_nbio_X509_issuer_and_serial_cmp__imp__X509_issuer_and_serial_cmp_X509_issuer_and_serial_hash__imp__X509_issuer_and_serial_hash_X509_issuer_name_cmp__imp__X509_issuer_name_cmp_X509_issuer_name_hash__imp__X509_issuer_name_hash_X509_issuer_name_hash_old__imp__X509_issuer_name_hash_old_X509_it__imp__X509_it_X509_keyid_get0__imp__X509_keyid_get0_X509_keyid_set1__imp__X509_keyid_set1_X509_load_cert_crl_file__imp__X509_load_cert_crl_file_X509_load_cert_file__imp__X509_load_cert_file_X509_load_crl_file__imp__X509_load_crl_file_X509_new__imp__X509_new_X509_ocspid_print__imp__X509_ocspid_print_X509_policy_check__imp__X509_policy_check_X509_policy_level_get0_node__imp__X509_policy_level_get0_node_X509_policy_level_node_count__imp__X509_policy_level_node_count_X509_policy_node_get0_parent__imp__X509_policy_node_get0_parent_X509_policy_node_get0_policy__imp__X509_policy_node_get0_policy_X509_policy_node_get0_qualifiers__imp__X509_policy_node_get0_qualifiers_X509_policy_tree_free__imp__X509_policy_tree_free_X509_policy_tree_get0_level__imp__X509_policy_tree_get0_level_X509_policy_tree_get0_policies__imp__X509_policy_tree_get0_policies_X509_policy_tree_get0_user_policies__imp__X509_policy_tree_get0_user_policies_X509_policy_tree_level_count__imp__X509_policy_tree_level_count_X509_print__imp__X509_print_X509_print_ex__imp__X509_print_ex_X509_print_ex_fp__imp__X509_print_ex_fp_X509_print_fp__imp__X509_print_fp_X509_pubkey_digest__imp__X509_pubkey_digest_X509_reject_clear__imp__X509_reject_clear_X509_set_ex_data__imp__X509_set_ex_data_X509_set_issuer_name__imp__X509_set_issuer_name_X509_set_notAfter__imp__X509_set_notAfter_X509_set_notBefore__imp__X509_set_notBefore_X509_set_pubkey__imp__X509_set_pubkey_X509_set_serialNumber__imp__X509_set_serialNumber_X509_set_subject_name__imp__X509_set_subject_name_X509_set_version__imp__X509_set_version_X509_sign__imp__X509_sign_X509_sign_ctx__imp__X509_sign_ctx_X509_signature_dump__imp__X509_signature_dump_X509_signature_print__imp__X509_signature_print_X509_subject_name_cmp__imp__X509_subject_name_cmp_X509_subject_name_hash__imp__X509_subject_name_hash_X509_subject_name_hash_old__imp__X509_subject_name_hash_old_X509_supported_extension__imp__X509_supported_extension_X509_time_adj__imp__X509_time_adj_X509_time_adj_ex__imp__X509_time_adj_ex_X509_to_X509_REQ__imp__X509_to_X509_REQ_X509_trust_clear__imp__X509_trust_clear_X509_verify__imp__X509_verify_X509_verify_cert__imp__X509_verify_cert_X509_verify_cert_error_string__imp__X509_verify_cert_error_string_X509at_add1_attr__imp__X509at_add1_attr_X509at_add1_attr_by_NID__imp__X509at_add1_attr_by_NID_X509at_add1_attr_by_OBJ__imp__X509at_add1_attr_by_OBJ_X509at_add1_attr_by_txt__imp__X509at_add1_attr_by_txt_X509at_delete_attr__imp__X509at_delete_attr_X509at_get0_data_by_OBJ__imp__X509at_get0_data_by_OBJ_X509at_get_attr__imp__X509at_get_attr_X509at_get_attr_by_NID__imp__X509at_get_attr_by_NID_X509at_get_attr_by_OBJ__imp__X509at_get_attr_by_OBJ_X509at_get_attr_count__imp__X509at_get_attr_count_X509v3_add_ext__imp__X509v3_add_ext_X509v3_delete_ext__imp__X509v3_delete_ext_X509v3_get_ext__imp__X509v3_get_ext_X509v3_get_ext_by_NID__imp__X509v3_get_ext_by_NID_X509v3_get_ext_by_OBJ__imp__X509v3_get_ext_by_OBJ_X509v3_get_ext_by_critical__imp__X509v3_get_ext_by_critical_X509v3_get_ext_count__imp__X509v3_get_ext_count_ZLONG_it__imp__ZLONG_it__imp___ossl_096_des_random_seed__ossl_096_des_random_seed__imp___ossl_old_crypt__ossl_old_crypt__imp___ossl_old_des_cbc_cksum__ossl_old_des_cbc_cksum__imp___ossl_old_des_cbc_encrypt__ossl_old_des_cbc_encrypt__imp___ossl_old_des_cfb64_encrypt__ossl_old_des_cfb64_encrypt__imp___ossl_old_des_cfb_encrypt__ossl_old_des_cfb_encrypt__imp___ossl_old_des_crypt__ossl_old_des_crypt__imp___ossl_old_des_decrypt3__ossl_old_des_decrypt3__imp___ossl_old_des_ecb3_encrypt__ossl_old_des_ecb3_encrypt__imp___ossl_old_des_ecb_encrypt__ossl_old_des_ecb_encrypt__imp___ossl_old_des_ede3_cbc_encrypt__ossl_old_des_ede3_cbc_encrypt__imp___ossl_old_des_ede3_cfb64_encrypt__ossl_old_des_ede3_cfb64_encrypt__imp___ossl_old_des_ede3_ofb64_encrypt__ossl_old_des_ede3_ofb64_encrypt__imp___ossl_old_des_enc_read__ossl_old_des_enc_read__imp___ossl_old_des_enc_write__ossl_old_des_enc_write__imp___ossl_old_des_encrypt2__ossl_old_des_encrypt2__imp___ossl_old_des_encrypt3__ossl_old_des_encrypt3__imp___ossl_old_des_encrypt__ossl_old_des_encrypt__imp___ossl_old_des_fcrypt__ossl_old_des_fcrypt__imp___ossl_old_des_is_weak_key__ossl_old_des_is_weak_key__imp___ossl_old_des_key_sched__ossl_old_des_key_sched__imp___ossl_old_des_ncbc_encrypt__ossl_old_des_ncbc_encrypt__imp___ossl_old_des_ofb64_encrypt__ossl_old_des_ofb64_encrypt__imp___ossl_old_des_ofb_encrypt__ossl_old_des_ofb_encrypt__imp___ossl_old_des_options__ossl_old_des_options__imp___ossl_old_des_pcbc_encrypt__ossl_old_des_pcbc_encrypt__imp___ossl_old_des_quad_cksum__ossl_old_des_quad_cksum__imp___ossl_old_des_random_key__ossl_old_des_random_key__imp___ossl_old_des_random_seed__ossl_old_des_random_seed__imp___ossl_old_des_read_2passwords__ossl_old_des_read_2passwords__imp___ossl_old_des_read_password__ossl_old_des_read_password__imp___ossl_old_des_read_pw__ossl_old_des_read_pw__imp___ossl_old_des_read_pw_string__ossl_old_des_read_pw_string__imp___ossl_old_des_set_key__ossl_old_des_set_key__imp___ossl_old_des_set_odd_parity__ossl_old_des_set_odd_parity__imp___ossl_old_des_string_to_2keys__ossl_old_des_string_to_2keys__imp___ossl_old_des_string_to_key__ossl_old_des_string_to_key__imp___ossl_old_des_xcbc_encrypt__ossl_old_des_xcbc_encrypt__imp___shadow_DES_check_key__shadow_DES_check_key__imp___shadow_DES_rw_mode__shadow_DES_rw_mode__imp__a2d_ASN1_OBJECT_a2d_ASN1_OBJECT__imp__a2i_ASN1_ENUMERATED_a2i_ASN1_ENUMERATED__imp__a2i_ASN1_INTEGER_a2i_ASN1_INTEGER__imp__a2i_ASN1_STRING_a2i_ASN1_STRING__imp__a2i_GENERAL_NAME_a2i_GENERAL_NAME__imp__a2i_IPADDRESS_a2i_IPADDRESS__imp__a2i_IPADDRESS_NC_a2i_IPADDRESS_NC__imp__a2i_ipadd_a2i_ipadd__imp__asn1_Finish_asn1_Finish__imp__asn1_GetSequence_asn1_GetSequence__imp__asn1_add_error_asn1_add_error__imp__asn1_const_Finish_asn1_const_Finish__imp__asn1_do_adb_asn1_do_adb__imp__asn1_do_lock_asn1_do_lock__imp__asn1_enc_free_asn1_enc_free__imp__asn1_enc_init_asn1_enc_init__imp__asn1_enc_restore_asn1_enc_restore__imp__asn1_enc_save_asn1_enc_save__imp__asn1_ex_c2i_asn1_ex_c2i__imp__asn1_ex_i2c_asn1_ex_i2c__imp__asn1_get_choice_selector_asn1_get_choice_selector__imp__asn1_get_field_ptr_asn1_get_field_ptr__imp__asn1_set_choice_selector_asn1_set_choice_selector__imp__b2i_PVK_bio_b2i_PVK_bio__imp__b2i_PrivateKey_b2i_PrivateKey__imp__b2i_PrivateKey_bio_b2i_PrivateKey_bio__imp__b2i_PublicKey_b2i_PublicKey__imp__b2i_PublicKey_bio_b2i_PublicKey_bio__imp__bn_add_words_bn_add_words__imp__bn_div_words_bn_div_words__imp__bn_dup_expand_bn_dup_expand__imp__bn_expand2_bn_expand2__imp__bn_mul_add_words_bn_mul_add_words__imp__bn_mul_words_bn_mul_words__imp__bn_sqr_words_bn_sqr_words__imp__bn_sub_words_bn_sub_words__imp__c2i_ASN1_BIT_STRING_c2i_ASN1_BIT_STRING__imp__c2i_ASN1_INTEGER_c2i_ASN1_INTEGER__imp__c2i_ASN1_OBJECT_c2i_ASN1_OBJECT__imp__check_defer_check_defer__imp__d2i_ACCESS_DESCRIPTION_d2i_ACCESS_DESCRIPTION__imp__d2i_ASN1_BIT_STRING_d2i_ASN1_BIT_STRING__imp__d2i_ASN1_BMPSTRING_d2i_ASN1_BMPSTRING__imp__d2i_ASN1_BOOLEAN_d2i_ASN1_BOOLEAN__imp__d2i_ASN1_ENUMERATED_d2i_ASN1_ENUMERATED__imp__d2i_ASN1_GENERALIZEDTIME_d2i_ASN1_GENERALIZEDTIME__imp__d2i_ASN1_GENERALSTRING_d2i_ASN1_GENERALSTRING__imp__d2i_ASN1_IA5STRING_d2i_ASN1_IA5STRING__imp__d2i_ASN1_INTEGER_d2i_ASN1_INTEGER__imp__d2i_ASN1_NULL_d2i_ASN1_NULL__imp__d2i_ASN1_OBJECT_d2i_ASN1_OBJECT__imp__d2i_ASN1_OCTET_STRING_d2i_ASN1_OCTET_STRING__imp__d2i_ASN1_PRINTABLESTRING_d2i_ASN1_PRINTABLESTRING__imp__d2i_ASN1_PRINTABLE_d2i_ASN1_PRINTABLE__imp__d2i_ASN1_SEQUENCE_ANY_d2i_ASN1_SEQUENCE_ANY__imp__d2i_ASN1_SET_d2i_ASN1_SET__imp__d2i_ASN1_SET_ANY_d2i_ASN1_SET_ANY__imp__d2i_ASN1_T61STRING_d2i_ASN1_T61STRING__imp__d2i_ASN1_TIME_d2i_ASN1_TIME__imp__d2i_ASN1_TYPE_d2i_ASN1_TYPE__imp__d2i_ASN1_UINTEGER_d2i_ASN1_UINTEGER__imp__d2i_ASN1_UNIVERSALSTRING_d2i_ASN1_UNIVERSALSTRING__imp__d2i_ASN1_UTCTIME_d2i_ASN1_UTCTIME__imp__d2i_ASN1_UTF8STRING_d2i_ASN1_UTF8STRING__imp__d2i_ASN1_VISIBLESTRING_d2i_ASN1_VISIBLESTRING__imp__d2i_ASN1_bytes_d2i_ASN1_bytes__imp__d2i_ASN1_type_bytes_d2i_ASN1_type_bytes__imp__d2i_AUTHORITY_INFO_ACCESS_d2i_AUTHORITY_INFO_ACCESS__imp__d2i_AUTHORITY_KEYID_d2i_AUTHORITY_KEYID__imp__d2i_AutoPrivateKey_d2i_AutoPrivateKey__imp__d2i_BASIC_CONSTRAINTS_d2i_BASIC_CONSTRAINTS__imp__d2i_CERTIFICATEPOLICIES_d2i_CERTIFICATEPOLICIES__imp__d2i_CMS_ContentInfo_d2i_CMS_ContentInfo__imp__d2i_CMS_ReceiptRequest_d2i_CMS_ReceiptRequest__imp__d2i_CMS_bio_d2i_CMS_bio__imp__d2i_CRL_DIST_POINTS_d2i_CRL_DIST_POINTS__imp__d2i_DHparams_d2i_DHparams__imp__d2i_DHxparams_d2i_DHxparams__imp__d2i_DIRECTORYSTRING_d2i_DIRECTORYSTRING__imp__d2i_DISPLAYTEXT_d2i_DISPLAYTEXT__imp__d2i_DIST_POINT_d2i_DIST_POINT__imp__d2i_DIST_POINT_NAME_d2i_DIST_POINT_NAME__imp__d2i_DSAPrivateKey_d2i_DSAPrivateKey__imp__d2i_DSAPrivateKey_bio_d2i_DSAPrivateKey_bio__imp__d2i_DSAPrivateKey_fp_d2i_DSAPrivateKey_fp__imp__d2i_DSAPublicKey_d2i_DSAPublicKey__imp__d2i_DSA_PUBKEY_d2i_DSA_PUBKEY__imp__d2i_DSA_PUBKEY_bio_d2i_DSA_PUBKEY_bio__imp__d2i_DSA_PUBKEY_fp_d2i_DSA_PUBKEY_fp__imp__d2i_DSA_SIG_d2i_DSA_SIG__imp__d2i_DSAparams_d2i_DSAparams__imp__d2i_ECDSA_SIG_d2i_ECDSA_SIG__imp__d2i_ECPKParameters_d2i_ECPKParameters__imp__d2i_ECParameters_d2i_ECParameters__imp__d2i_ECPrivateKey_d2i_ECPrivateKey__imp__d2i_ECPrivateKey_bio_d2i_ECPrivateKey_bio__imp__d2i_ECPrivateKey_fp_d2i_ECPrivateKey_fp__imp__d2i_EC_PUBKEY_d2i_EC_PUBKEY__imp__d2i_EC_PUBKEY_bio_d2i_EC_PUBKEY_bio__imp__d2i_EC_PUBKEY_fp_d2i_EC_PUBKEY_fp__imp__d2i_EDIPARTYNAME_d2i_EDIPARTYNAME__imp__d2i_ESS_CERT_ID_d2i_ESS_CERT_ID__imp__d2i_ESS_ISSUER_SERIAL_d2i_ESS_ISSUER_SERIAL__imp__d2i_ESS_SIGNING_CERT_d2i_ESS_SIGNING_CERT__imp__d2i_EXTENDED_KEY_USAGE_d2i_EXTENDED_KEY_USAGE__imp__d2i_GENERAL_NAMES_d2i_GENERAL_NAMES__imp__d2i_GENERAL_NAME_d2i_GENERAL_NAME__imp__d2i_ISSUING_DIST_POINT_d2i_ISSUING_DIST_POINT__imp__d2i_KRB5_APREQBODY_d2i_KRB5_APREQBODY__imp__d2i_KRB5_APREQ_d2i_KRB5_APREQ__imp__d2i_KRB5_AUTHDATA_d2i_KRB5_AUTHDATA__imp__d2i_KRB5_AUTHENTBODY_d2i_KRB5_AUTHENTBODY__imp__d2i_KRB5_AUTHENT_d2i_KRB5_AUTHENT__imp__d2i_KRB5_CHECKSUM_d2i_KRB5_CHECKSUM__imp__d2i_KRB5_ENCDATA_d2i_KRB5_ENCDATA__imp__d2i_KRB5_ENCKEY_d2i_KRB5_ENCKEY__imp__d2i_KRB5_PRINCNAME_d2i_KRB5_PRINCNAME__imp__d2i_KRB5_TICKET_d2i_KRB5_TICKET__imp__d2i_KRB5_TKTBODY_d2i_KRB5_TKTBODY__imp__d2i_NETSCAPE_CERT_SEQUENCE_d2i_NETSCAPE_CERT_SEQUENCE__imp__d2i_NETSCAPE_SPKAC_d2i_NETSCAPE_SPKAC__imp__d2i_NETSCAPE_SPKI_d2i_NETSCAPE_SPKI__imp__d2i_NETSCAPE_X509_d2i_NETSCAPE_X509__imp__d2i_NOTICEREF_d2i_NOTICEREF__imp__d2i_Netscape_RSA_d2i_Netscape_RSA__imp__d2i_OCSP_BASICRESP_d2i_OCSP_BASICRESP__imp__d2i_OCSP_CERTID_d2i_OCSP_CERTID__imp__d2i_OCSP_CERTSTATUS_d2i_OCSP_CERTSTATUS__imp__d2i_OCSP_CRLID_d2i_OCSP_CRLID__imp__d2i_OCSP_ONEREQ_d2i_OCSP_ONEREQ__imp__d2i_OCSP_REQINFO_d2i_OCSP_REQINFO__imp__d2i_OCSP_REQUEST_d2i_OCSP_REQUEST__imp__d2i_OCSP_RESPBYTES_d2i_OCSP_RESPBYTES__imp__d2i_OCSP_RESPDATA_d2i_OCSP_RESPDATA__imp__d2i_OCSP_RESPID_d2i_OCSP_RESPID__imp__d2i_OCSP_RESPONSE_d2i_OCSP_RESPONSE__imp__d2i_OCSP_REVOKEDINFO_d2i_OCSP_REVOKEDINFO__imp__d2i_OCSP_SERVICELOC_d2i_OCSP_SERVICELOC__imp__d2i_OCSP_SIGNATURE_d2i_OCSP_SIGNATURE__imp__d2i_OCSP_SINGLERESP_d2i_OCSP_SINGLERESP__imp__d2i_OTHERNAME_d2i_OTHERNAME__imp__d2i_PBE2PARAM_d2i_PBE2PARAM__imp__d2i_PBEPARAM_d2i_PBEPARAM__imp__d2i_PBKDF2PARAM_d2i_PBKDF2PARAM__imp__d2i_PKCS12_d2i_PKCS12__imp__d2i_PKCS12_BAGS_d2i_PKCS12_BAGS__imp__d2i_PKCS12_MAC_DATA_d2i_PKCS12_MAC_DATA__imp__d2i_PKCS12_SAFEBAG_d2i_PKCS12_SAFEBAG__imp__d2i_PKCS12_bio_d2i_PKCS12_bio__imp__d2i_PKCS12_fp_d2i_PKCS12_fp__imp__d2i_PKCS7_d2i_PKCS7__imp__d2i_PKCS7_DIGEST_d2i_PKCS7_DIGEST__imp__d2i_PKCS7_ENCRYPT_d2i_PKCS7_ENCRYPT__imp__d2i_PKCS7_ENC_CONTENT_d2i_PKCS7_ENC_CONTENT__imp__d2i_PKCS7_ENVELOPE_d2i_PKCS7_ENVELOPE__imp__d2i_PKCS7_ISSUER_AND_SERIAL_d2i_PKCS7_ISSUER_AND_SERIAL__imp__d2i_PKCS7_RECIP_INFO_d2i_PKCS7_RECIP_INFO__imp__d2i_PKCS7_SIGNED_d2i_PKCS7_SIGNED__imp__d2i_PKCS7_SIGNER_INFO_d2i_PKCS7_SIGNER_INFO__imp__d2i_PKCS7_SIGN_ENVELOPE_d2i_PKCS7_SIGN_ENVELOPE__imp__d2i_PKCS7_bio_d2i_PKCS7_bio__imp__d2i_PKCS7_fp_d2i_PKCS7_fp__imp__d2i_PKCS8PrivateKey_bio_d2i_PKCS8PrivateKey_bio__imp__d2i_PKCS8PrivateKey_fp_d2i_PKCS8PrivateKey_fp__imp__d2i_PKCS8_PRIV_KEY_INFO_d2i_PKCS8_PRIV_KEY_INFO__imp__d2i_PKCS8_PRIV_KEY_INFO_bio_d2i_PKCS8_PRIV_KEY_INFO_bio__imp__d2i_PKCS8_PRIV_KEY_INFO_fp_d2i_PKCS8_PRIV_KEY_INFO_fp__imp__d2i_PKCS8_bio_d2i_PKCS8_bio__imp__d2i_PKCS8_fp_d2i_PKCS8_fp__imp__d2i_PKEY_USAGE_PERIOD_d2i_PKEY_USAGE_PERIOD__imp__d2i_POLICYINFO_d2i_POLICYINFO__imp__d2i_POLICYQUALINFO_d2i_POLICYQUALINFO__imp__d2i_PROXY_CERT_INFO_EXTENSION_d2i_PROXY_CERT_INFO_EXTENSION__imp__d2i_PROXY_POLICY_d2i_PROXY_POLICY__imp__d2i_PUBKEY_d2i_PUBKEY__imp__d2i_PUBKEY_bio_d2i_PUBKEY_bio__imp__d2i_PUBKEY_fp_d2i_PUBKEY_fp__imp__d2i_PrivateKey_d2i_PrivateKey__imp__d2i_PrivateKey_bio_d2i_PrivateKey_bio__imp__d2i_PrivateKey_fp_d2i_PrivateKey_fp__imp__d2i_PublicKey_d2i_PublicKey__imp__d2i_RSAPrivateKey_d2i_RSAPrivateKey__imp__d2i_RSAPrivateKey_bio_d2i_RSAPrivateKey_bio__imp__d2i_RSAPrivateKey_fp_d2i_RSAPrivateKey_fp__imp__d2i_RSAPublicKey_d2i_RSAPublicKey__imp__d2i_RSAPublicKey_bio_d2i_RSAPublicKey_bio__imp__d2i_RSAPublicKey_fp_d2i_RSAPublicKey_fp__imp__d2i_RSA_NET_d2i_RSA_NET__imp__d2i_RSA_OAEP_PARAMS_d2i_RSA_OAEP_PARAMS__imp__d2i_RSA_PSS_PARAMS_d2i_RSA_PSS_PARAMS__imp__d2i_RSA_PUBKEY_d2i_RSA_PUBKEY__imp__d2i_RSA_PUBKEY_bio_d2i_RSA_PUBKEY_bio__imp__d2i_RSA_PUBKEY_fp_d2i_RSA_PUBKEY_fp__imp__d2i_SXNETID_d2i_SXNETID__imp__d2i_SXNET_d2i_SXNET__imp__d2i_TS_ACCURACY_d2i_TS_ACCURACY__imp__d2i_TS_MSG_IMPRINT_d2i_TS_MSG_IMPRINT__imp__d2i_TS_MSG_IMPRINT_bio_d2i_TS_MSG_IMPRINT_bio__imp__d2i_TS_MSG_IMPRINT_fp_d2i_TS_MSG_IMPRINT_fp__imp__d2i_TS_REQ_d2i_TS_REQ__imp__d2i_TS_REQ_bio_d2i_TS_REQ_bio__imp__d2i_TS_REQ_fp_d2i_TS_REQ_fp__imp__d2i_TS_RESP_d2i_TS_RESP__imp__d2i_TS_RESP_bio_d2i_TS_RESP_bio__imp__d2i_TS_RESP_fp_d2i_TS_RESP_fp__imp__d2i_TS_STATUS_INFO_d2i_TS_STATUS_INFO__imp__d2i_TS_TST_INFO_d2i_TS_TST_INFO__imp__d2i_TS_TST_INFO_bio_d2i_TS_TST_INFO_bio__imp__d2i_TS_TST_INFO_fp_d2i_TS_TST_INFO_fp__imp__d2i_USERNOTICE_d2i_USERNOTICE__imp__d2i_X509_d2i_X509__imp__d2i_X509_ALGORS_d2i_X509_ALGORS__imp__d2i_X509_ALGOR_d2i_X509_ALGOR__imp__d2i_X509_ATTRIBUTE_d2i_X509_ATTRIBUTE__imp__d2i_X509_AUX_d2i_X509_AUX__imp__d2i_X509_CERT_AUX_d2i_X509_CERT_AUX__imp__d2i_X509_CERT_PAIR_d2i_X509_CERT_PAIR__imp__d2i_X509_CINF_d2i_X509_CINF__imp__d2i_X509_CRL_d2i_X509_CRL__imp__d2i_X509_CRL_INFO_d2i_X509_CRL_INFO__imp__d2i_X509_CRL_bio_d2i_X509_CRL_bio__imp__d2i_X509_CRL_fp_d2i_X509_CRL_fp__imp__d2i_X509_EXTENSIONS_d2i_X509_EXTENSIONS__imp__d2i_X509_EXTENSION_d2i_X509_EXTENSION__imp__d2i_X509_NAME_d2i_X509_NAME__imp__d2i_X509_NAME_ENTRY_d2i_X509_NAME_ENTRY__imp__d2i_X509_PKEY_d2i_X509_PKEY__imp__d2i_X509_PUBKEY_d2i_X509_PUBKEY__imp__d2i_X509_REQ_d2i_X509_REQ__imp__d2i_X509_REQ_INFO_d2i_X509_REQ_INFO__imp__d2i_X509_REQ_bio_d2i_X509_REQ_bio__imp__d2i_X509_REQ_fp_d2i_X509_REQ_fp__imp__d2i_X509_REVOKED_d2i_X509_REVOKED__imp__d2i_X509_SIG_d2i_X509_SIG__imp__d2i_X509_VAL_d2i_X509_VAL__imp__d2i_X509_bio_d2i_X509_bio__imp__d2i_X509_fp_d2i_X509_fp__imp__get_rfc2409_prime_1024_get_rfc2409_prime_1024__imp__get_rfc2409_prime_768_get_rfc2409_prime_768__imp__get_rfc3526_prime_1536_get_rfc3526_prime_1536__imp__get_rfc3526_prime_2048_get_rfc3526_prime_2048__imp__get_rfc3526_prime_3072_get_rfc3526_prime_3072__imp__get_rfc3526_prime_4096_get_rfc3526_prime_4096__imp__get_rfc3526_prime_6144_get_rfc3526_prime_6144__imp__get_rfc3526_prime_8192_get_rfc3526_prime_8192__imp__hex_to_string_hex_to_string__imp__i2a_ACCESS_DESCRIPTION_i2a_ACCESS_DESCRIPTION__imp__i2a_ASN1_ENUMERATED_i2a_ASN1_ENUMERATED__imp__i2a_ASN1_INTEGER_i2a_ASN1_INTEGER__imp__i2a_ASN1_OBJECT_i2a_ASN1_OBJECT__imp__i2a_ASN1_STRING_i2a_ASN1_STRING__imp__i2b_PVK_bio_i2b_PVK_bio__imp__i2b_PrivateKey_bio_i2b_PrivateKey_bio__imp__i2b_PublicKey_bio_i2b_PublicKey_bio__imp__i2c_ASN1_BIT_STRING_i2c_ASN1_BIT_STRING__imp__i2c_ASN1_INTEGER_i2c_ASN1_INTEGER__imp__i2d_ACCESS_DESCRIPTION_i2d_ACCESS_DESCRIPTION__imp__i2d_ASN1_BIT_STRING_i2d_ASN1_BIT_STRING__imp__i2d_ASN1_BMPSTRING_i2d_ASN1_BMPSTRING__imp__i2d_ASN1_BOOLEAN_i2d_ASN1_BOOLEAN__imp__i2d_ASN1_ENUMERATED_i2d_ASN1_ENUMERATED__imp__i2d_ASN1_GENERALIZEDTIME_i2d_ASN1_GENERALIZEDTIME__imp__i2d_ASN1_GENERALSTRING_i2d_ASN1_GENERALSTRING__imp__i2d_ASN1_IA5STRING_i2d_ASN1_IA5STRING__imp__i2d_ASN1_INTEGER_i2d_ASN1_INTEGER__imp__i2d_ASN1_NULL_i2d_ASN1_NULL__imp__i2d_ASN1_OBJECT_i2d_ASN1_OBJECT__imp__i2d_ASN1_OCTET_STRING_i2d_ASN1_OCTET_STRING__imp__i2d_ASN1_PRINTABLESTRING_i2d_ASN1_PRINTABLESTRING__imp__i2d_ASN1_PRINTABLE_i2d_ASN1_PRINTABLE__imp__i2d_ASN1_SEQUENCE_ANY_i2d_ASN1_SEQUENCE_ANY__imp__i2d_ASN1_SET_i2d_ASN1_SET__imp__i2d_ASN1_SET_ANY_i2d_ASN1_SET_ANY__imp__i2d_ASN1_T61STRING_i2d_ASN1_T61STRING__imp__i2d_ASN1_TIME_i2d_ASN1_TIME__imp__i2d_ASN1_TYPE_i2d_ASN1_TYPE__imp__i2d_ASN1_UNIVERSALSTRING_i2d_ASN1_UNIVERSALSTRING__imp__i2d_ASN1_UTCTIME_i2d_ASN1_UTCTIME__imp__i2d_ASN1_UTF8STRING_i2d_ASN1_UTF8STRING__imp__i2d_ASN1_VISIBLESTRING_i2d_ASN1_VISIBLESTRING__imp__i2d_ASN1_bio_stream_i2d_ASN1_bio_stream__imp__i2d_ASN1_bytes_i2d_ASN1_bytes__imp__i2d_AUTHORITY_INFO_ACCESS_i2d_AUTHORITY_INFO_ACCESS__imp__i2d_AUTHORITY_KEYID_i2d_AUTHORITY_KEYID__imp__i2d_BASIC_CONSTRAINTS_i2d_BASIC_CONSTRAINTS__imp__i2d_CERTIFICATEPOLICIES_i2d_CERTIFICATEPOLICIES__imp__i2d_CMS_ContentInfo_i2d_CMS_ContentInfo__imp__i2d_CMS_ReceiptRequest_i2d_CMS_ReceiptRequest__imp__i2d_CMS_bio_i2d_CMS_bio__imp__i2d_CMS_bio_stream_i2d_CMS_bio_stream__imp__i2d_CRL_DIST_POINTS_i2d_CRL_DIST_POINTS__imp__i2d_DHparams_i2d_DHparams__imp__i2d_DHxparams_i2d_DHxparams__imp__i2d_DIRECTORYSTRING_i2d_DIRECTORYSTRING__imp__i2d_DISPLAYTEXT_i2d_DISPLAYTEXT__imp__i2d_DIST_POINT_i2d_DIST_POINT__imp__i2d_DIST_POINT_NAME_i2d_DIST_POINT_NAME__imp__i2d_DSAPrivateKey_i2d_DSAPrivateKey__imp__i2d_DSAPrivateKey_bio_i2d_DSAPrivateKey_bio__imp__i2d_DSAPrivateKey_fp_i2d_DSAPrivateKey_fp__imp__i2d_DSAPublicKey_i2d_DSAPublicKey__imp__i2d_DSA_PUBKEY_i2d_DSA_PUBKEY__imp__i2d_DSA_PUBKEY_bio_i2d_DSA_PUBKEY_bio__imp__i2d_DSA_PUBKEY_fp_i2d_DSA_PUBKEY_fp__imp__i2d_DSA_SIG_i2d_DSA_SIG__imp__i2d_DSAparams_i2d_DSAparams__imp__i2d_ECDSA_SIG_i2d_ECDSA_SIG__imp__i2d_ECPKParameters_i2d_ECPKParameters__imp__i2d_ECParameters_i2d_ECParameters__imp__i2d_ECPrivateKey_i2d_ECPrivateKey__imp__i2d_ECPrivateKey_bio_i2d_ECPrivateKey_bio__imp__i2d_ECPrivateKey_fp_i2d_ECPrivateKey_fp__imp__i2d_EC_PUBKEY_i2d_EC_PUBKEY__imp__i2d_EC_PUBKEY_bio_i2d_EC_PUBKEY_bio__imp__i2d_EC_PUBKEY_fp_i2d_EC_PUBKEY_fp__imp__i2d_EDIPARTYNAME_i2d_EDIPARTYNAME__imp__i2d_ESS_CERT_ID_i2d_ESS_CERT_ID__imp__i2d_ESS_ISSUER_SERIAL_i2d_ESS_ISSUER_SERIAL__imp__i2d_ESS_SIGNING_CERT_i2d_ESS_SIGNING_CERT__imp__i2d_EXTENDED_KEY_USAGE_i2d_EXTENDED_KEY_USAGE__imp__i2d_GENERAL_NAMES_i2d_GENERAL_NAMES__imp__i2d_GENERAL_NAME_i2d_GENERAL_NAME__imp__i2d_ISSUING_DIST_POINT_i2d_ISSUING_DIST_POINT__imp__i2d_KRB5_APREQBODY_i2d_KRB5_APREQBODY__imp__i2d_KRB5_APREQ_i2d_KRB5_APREQ__imp__i2d_KRB5_AUTHDATA_i2d_KRB5_AUTHDATA__imp__i2d_KRB5_AUTHENTBODY_i2d_KRB5_AUTHENTBODY__imp__i2d_KRB5_AUTHENT_i2d_KRB5_AUTHENT__imp__i2d_KRB5_CHECKSUM_i2d_KRB5_CHECKSUM__imp__i2d_KRB5_ENCDATA_i2d_KRB5_ENCDATA__imp__i2d_KRB5_ENCKEY_i2d_KRB5_ENCKEY__imp__i2d_KRB5_PRINCNAME_i2d_KRB5_PRINCNAME__imp__i2d_KRB5_TICKET_i2d_KRB5_TICKET__imp__i2d_KRB5_TKTBODY_i2d_KRB5_TKTBODY__imp__i2d_NETSCAPE_CERT_SEQUENCE_i2d_NETSCAPE_CERT_SEQUENCE__imp__i2d_NETSCAPE_SPKAC_i2d_NETSCAPE_SPKAC__imp__i2d_NETSCAPE_SPKI_i2d_NETSCAPE_SPKI__imp__i2d_NETSCAPE_X509_i2d_NETSCAPE_X509__imp__i2d_NOTICEREF_i2d_NOTICEREF__imp__i2d_Netscape_RSA_i2d_Netscape_RSA__imp__i2d_OCSP_BASICRESP_i2d_OCSP_BASICRESP__imp__i2d_OCSP_CERTID_i2d_OCSP_CERTID__imp__i2d_OCSP_CERTSTATUS_i2d_OCSP_CERTSTATUS__imp__i2d_OCSP_CRLID_i2d_OCSP_CRLID__imp__i2d_OCSP_ONEREQ_i2d_OCSP_ONEREQ__imp__i2d_OCSP_REQINFO_i2d_OCSP_REQINFO__imp__i2d_OCSP_REQUEST_i2d_OCSP_REQUEST__imp__i2d_OCSP_RESPBYTES_i2d_OCSP_RESPBYTES__imp__i2d_OCSP_RESPDATA_i2d_OCSP_RESPDATA__imp__i2d_OCSP_RESPID_i2d_OCSP_RESPID__imp__i2d_OCSP_RESPONSE_i2d_OCSP_RESPONSE__imp__i2d_OCSP_REVOKEDINFO_i2d_OCSP_REVOKEDINFO__imp__i2d_OCSP_SERVICELOC_i2d_OCSP_SERVICELOC__imp__i2d_OCSP_SIGNATURE_i2d_OCSP_SIGNATURE__imp__i2d_OCSP_SINGLERESP_i2d_OCSP_SINGLERESP__imp__i2d_OTHERNAME_i2d_OTHERNAME__imp__i2d_PBE2PARAM_i2d_PBE2PARAM__imp__i2d_PBEPARAM_i2d_PBEPARAM__imp__i2d_PBKDF2PARAM_i2d_PBKDF2PARAM__imp__i2d_PKCS12_i2d_PKCS12__imp__i2d_PKCS12_BAGS_i2d_PKCS12_BAGS__imp__i2d_PKCS12_MAC_DATA_i2d_PKCS12_MAC_DATA__imp__i2d_PKCS12_SAFEBAG_i2d_PKCS12_SAFEBAG__imp__i2d_PKCS12_bio_i2d_PKCS12_bio__imp__i2d_PKCS12_fp_i2d_PKCS12_fp__imp__i2d_PKCS7_i2d_PKCS7__imp__i2d_PKCS7_DIGEST_i2d_PKCS7_DIGEST__imp__i2d_PKCS7_ENCRYPT_i2d_PKCS7_ENCRYPT__imp__i2d_PKCS7_ENC_CONTENT_i2d_PKCS7_ENC_CONTENT__imp__i2d_PKCS7_ENVELOPE_i2d_PKCS7_ENVELOPE__imp__i2d_PKCS7_ISSUER_AND_SERIAL_i2d_PKCS7_ISSUER_AND_SERIAL__imp__i2d_PKCS7_NDEF_i2d_PKCS7_NDEF__imp__i2d_PKCS7_RECIP_INFO_i2d_PKCS7_RECIP_INFO__imp__i2d_PKCS7_SIGNED_i2d_PKCS7_SIGNED__imp__i2d_PKCS7_SIGNER_INFO_i2d_PKCS7_SIGNER_INFO__imp__i2d_PKCS7_SIGN_ENVELOPE_i2d_PKCS7_SIGN_ENVELOPE__imp__i2d_PKCS7_bio_i2d_PKCS7_bio__imp__i2d_PKCS7_bio_stream_i2d_PKCS7_bio_stream__imp__i2d_PKCS7_fp_i2d_PKCS7_fp__imp__i2d_PKCS8PrivateKeyInfo_bio_i2d_PKCS8PrivateKeyInfo_bio__imp__i2d_PKCS8PrivateKeyInfo_fp_i2d_PKCS8PrivateKeyInfo_fp__imp__i2d_PKCS8PrivateKey_bio_i2d_PKCS8PrivateKey_bio__imp__i2d_PKCS8PrivateKey_fp_i2d_PKCS8PrivateKey_fp__imp__i2d_PKCS8PrivateKey_nid_bio_i2d_PKCS8PrivateKey_nid_bio__imp__i2d_PKCS8PrivateKey_nid_fp_i2d_PKCS8PrivateKey_nid_fp__imp__i2d_PKCS8_PRIV_KEY_INFO_i2d_PKCS8_PRIV_KEY_INFO__imp__i2d_PKCS8_PRIV_KEY_INFO_bio_i2d_PKCS8_PRIV_KEY_INFO_bio__imp__i2d_PKCS8_PRIV_KEY_INFO_fp_i2d_PKCS8_PRIV_KEY_INFO_fp__imp__i2d_PKCS8_bio_i2d_PKCS8_bio__imp__i2d_PKCS8_fp_i2d_PKCS8_fp__imp__i2d_PKEY_USAGE_PERIOD_i2d_PKEY_USAGE_PERIOD__imp__i2d_POLICYINFO_i2d_POLICYINFO__imp__i2d_POLICYQUALINFO_i2d_POLICYQUALINFO__imp__i2d_PROXY_CERT_INFO_EXTENSION_i2d_PROXY_CERT_INFO_EXTENSION__imp__i2d_PROXY_POLICY_i2d_PROXY_POLICY__imp__i2d_PUBKEY_i2d_PUBKEY__imp__i2d_PUBKEY_bio_i2d_PUBKEY_bio__imp__i2d_PUBKEY_fp_i2d_PUBKEY_fp__imp__i2d_PrivateKey_i2d_PrivateKey__imp__i2d_PrivateKey_bio_i2d_PrivateKey_bio__imp__i2d_PrivateKey_fp_i2d_PrivateKey_fp__imp__i2d_PublicKey_i2d_PublicKey__imp__i2d_RSAPrivateKey_i2d_RSAPrivateKey__imp__i2d_RSAPrivateKey_bio_i2d_RSAPrivateKey_bio__imp__i2d_RSAPrivateKey_fp_i2d_RSAPrivateKey_fp__imp__i2d_RSAPublicKey_i2d_RSAPublicKey__imp__i2d_RSAPublicKey_bio_i2d_RSAPublicKey_bio__imp__i2d_RSAPublicKey_fp_i2d_RSAPublicKey_fp__imp__i2d_RSA_NET_i2d_RSA_NET__imp__i2d_RSA_OAEP_PARAMS_i2d_RSA_OAEP_PARAMS__imp__i2d_RSA_PSS_PARAMS_i2d_RSA_PSS_PARAMS__imp__i2d_RSA_PUBKEY_i2d_RSA_PUBKEY__imp__i2d_RSA_PUBKEY_bio_i2d_RSA_PUBKEY_bio__imp__i2d_RSA_PUBKEY_fp_i2d_RSA_PUBKEY_fp__imp__i2d_SXNETID_i2d_SXNETID__imp__i2d_SXNET_i2d_SXNET__imp__i2d_TS_ACCURACY_i2d_TS_ACCURACY__imp__i2d_TS_MSG_IMPRINT_i2d_TS_MSG_IMPRINT__imp__i2d_TS_MSG_IMPRINT_bio_i2d_TS_MSG_IMPRINT_bio__imp__i2d_TS_MSG_IMPRINT_fp_i2d_TS_MSG_IMPRINT_fp__imp__i2d_TS_REQ_i2d_TS_REQ__imp__i2d_TS_REQ_bio_i2d_TS_REQ_bio__imp__i2d_TS_REQ_fp_i2d_TS_REQ_fp__imp__i2d_TS_RESP_i2d_TS_RESP__imp__i2d_TS_RESP_bio_i2d_TS_RESP_bio__imp__i2d_TS_RESP_fp_i2d_TS_RESP_fp__imp__i2d_TS_STATUS_INFO_i2d_TS_STATUS_INFO__imp__i2d_TS_TST_INFO_i2d_TS_TST_INFO__imp__i2d_TS_TST_INFO_bio_i2d_TS_TST_INFO_bio__imp__i2d_TS_TST_INFO_fp_i2d_TS_TST_INFO_fp__imp__i2d_USERNOTICE_i2d_USERNOTICE__imp__i2d_X509_i2d_X509__imp__i2d_X509_ALGORS_i2d_X509_ALGORS__imp__i2d_X509_ALGOR_i2d_X509_ALGOR__imp__i2d_X509_ATTRIBUTE_i2d_X509_ATTRIBUTE__imp__i2d_X509_AUX_i2d_X509_AUX__imp__i2d_X509_CERT_AUX_i2d_X509_CERT_AUX__imp__i2d_X509_CERT_PAIR_i2d_X509_CERT_PAIR__imp__i2d_X509_CINF_i2d_X509_CINF__imp__i2d_X509_CRL_i2d_X509_CRL__imp__i2d_X509_CRL_INFO_i2d_X509_CRL_INFO__imp__i2d_X509_CRL_bio_i2d_X509_CRL_bio__imp__i2d_X509_CRL_fp_i2d_X509_CRL_fp__imp__i2d_X509_EXTENSIONS_i2d_X509_EXTENSIONS__imp__i2d_X509_EXTENSION_i2d_X509_EXTENSION__imp__i2d_X509_NAME_i2d_X509_NAME__imp__i2d_X509_NAME_ENTRY_i2d_X509_NAME_ENTRY__imp__i2d_X509_PKEY_i2d_X509_PKEY__imp__i2d_X509_PUBKEY_i2d_X509_PUBKEY__imp__i2d_X509_REQ_i2d_X509_REQ__imp__i2d_X509_REQ_INFO_i2d_X509_REQ_INFO__imp__i2d_X509_REQ_bio_i2d_X509_REQ_bio__imp__i2d_X509_REQ_fp_i2d_X509_REQ_fp__imp__i2d_X509_REVOKED_i2d_X509_REVOKED__imp__i2d_X509_SIG_i2d_X509_SIG__imp__i2d_X509_VAL_i2d_X509_VAL__imp__i2d_X509_bio_i2d_X509_bio__imp__i2d_X509_fp_i2d_X509_fp__imp__i2d_re_X509_tbs_i2d_re_X509_tbs__imp__i2o_ECPublicKey_i2o_ECPublicKey__imp__i2s_ASN1_ENUMERATED_i2s_ASN1_ENUMERATED__imp__i2s_ASN1_ENUMERATED_TABLE_i2s_ASN1_ENUMERATED_TABLE__imp__i2s_ASN1_INTEGER_i2s_ASN1_INTEGER__imp__i2s_ASN1_OCTET_STRING_i2s_ASN1_OCTET_STRING__imp__i2t_ASN1_OBJECT_i2t_ASN1_OBJECT__imp__i2v_ASN1_BIT_STRING_i2v_ASN1_BIT_STRING__imp__i2v_GENERAL_NAMES_i2v_GENERAL_NAMES__imp__i2v_GENERAL_NAME_i2v_GENERAL_NAME__imp__idea_cbc_encrypt_idea_cbc_encrypt__imp__idea_cfb64_encrypt_idea_cfb64_encrypt__imp__idea_ecb_encrypt_idea_ecb_encrypt__imp__idea_encrypt_idea_encrypt__imp__idea_ofb64_encrypt_idea_ofb64_encrypt__imp__idea_options_idea_options__imp__idea_set_decrypt_key_idea_set_decrypt_key__imp__idea_set_encrypt_key_idea_set_encrypt_key__imp__lh_delete_lh_delete__imp__lh_doall_lh_doall__imp__lh_doall_arg_lh_doall_arg__imp__lh_free_lh_free__imp__lh_insert_lh_insert__imp__lh_new_lh_new__imp__lh_node_stats_lh_node_stats__imp__lh_node_stats_bio_lh_node_stats_bio__imp__lh_node_usage_stats_lh_node_usage_stats__imp__lh_node_usage_stats_bio_lh_node_usage_stats_bio__imp__lh_num_items_lh_num_items__imp__lh_retrieve_lh_retrieve__imp__lh_stats_lh_stats__imp__lh_stats_bio_lh_stats_bio__imp__lh_strhash_lh_strhash__imp__name_cmp_name_cmp__imp__o2i_ECPublicKey_o2i_ECPublicKey__imp__pitem_free_pitem_free__imp__pitem_new_pitem_new__imp__pqueue_find_pqueue_find__imp__pqueue_free_pqueue_free__imp__pqueue_insert_pqueue_insert__imp__pqueue_iterator_pqueue_iterator__imp__pqueue_new_pqueue_new__imp__pqueue_next_pqueue_next__imp__pqueue_peek_pqueue_peek__imp__pqueue_pop_pqueue_pop__imp__pqueue_print_pqueue_print__imp__pqueue_size_pqueue_size__imp__private_AES_set_decrypt_key_private_AES_set_decrypt_key__imp__private_AES_set_encrypt_key_private_AES_set_encrypt_key__imp__private_RC4_set_key_private_RC4_set_key__imp__s2i_ASN1_INTEGER_s2i_ASN1_INTEGER__imp__s2i_ASN1_OCTET_STRING_s2i_ASN1_OCTET_STRING__imp__sk_deep_copy_sk_deep_copy__imp__sk_delete_sk_delete__imp__sk_delete_ptr_sk_delete_ptr__imp__sk_dup_sk_dup__imp__sk_find_sk_find__imp__sk_find_ex_sk_find_ex__imp__sk_free_sk_free__imp__sk_insert_sk_insert__imp__sk_is_sorted_sk_is_sorted__imp__sk_new_sk_new__imp__sk_new_null_sk_new_null__imp__sk_num_sk_num__imp__sk_pop_sk_pop__imp__sk_pop_free_sk_pop_free__imp__sk_push_sk_push__imp__sk_set_sk_set__imp__sk_set_cmp_func_sk_set_cmp_func__imp__sk_shift_sk_shift__imp__sk_sort_sk_sort__imp__sk_unshift_sk_unshift__imp__sk_value_sk_value__imp__sk_zero_sk_zero__imp__string_to_hex_string_to_hex__imp__v2i_ASN1_BIT_STRING_v2i_ASN1_BIT_STRING__imp__v2i_GENERAL_NAMES_v2i_GENERAL_NAMES__imp__v2i_GENERAL_NAME_v2i_GENERAL_NAME__imp__v2i_GENERAL_NAME_ex_v2i_GENERAL_NAME_ex__imp__OSSL_DES_version__imp__OSSL_libdes_version / 1485440734 0 200469 ` f ".Q X##B$$*%% &z&&\''4(( )~))Z**:++,,,n--Z..B//*00111b22H33,44555t66b77T88J994::;;;n<<N==,>> ?~??X@@6AABBBnCCXDD@EE"FF GGGnHHRII:JJ&KKLLLnMMRNN6OOPPQzQQXRR6SS"TT UxUU\V@WVW&XX"YYZxZZZ[[<\\]]]^^^8__``anaaVbbc:cddeeenff\ggDhh"iijtjj^kkBll,mmnnnrooHppqqqjrr@ssttthuuHvv(wwxrxxTyy.zz {|{{\||@}} ~~~jH"dЂ@"n`؆L0l֊DZč6jܐD8"|N& vL$dҚH&nޝR4~bʡ8|P&pަJ f6ΩT$`Ȯ4vްH\г>fԶ@, xJ~bڽL.j>~T. |\< z\@ lR0f8p@T*b2pF0tFdF^8pJ,|Z.p@^4xJ,j<P l8 vT(f:b@zV: x  L  2       xlVXHD@BD@><4~tl\L  B!!"" ###X$$<%%"&&n'''F(()) *~**^++0,,---n..P//*00 111Z22>33244"55667z77R88D99<::0;; <<===^>>hڵH$lԸ<"v޻FnܾR*|`F$ n\>bJ8^4x\>*nP8"l\RJ(|hTF(fH4dF(fbF"lD8>|Z8(`D"nT,xR0 |d  J  6  "    pZB,nZ@<*~^L0r\B  *!!"""t##d$$R%%H&&D''8((&))***d++B,,--.t..^//H00611"2233445x55d66@77888>99&::;;;n<<Z==D>>4??0@@AAA^BB@CC*DDE~EEnFFNGG6HHIIJxJJbKKHLL0MMNNOvOO^PPHQQ2RRSSTtTTZUU:VV$WWXXXhYYFZZ6[[\\]p]]P^^.__``ataaVbbBcc2ddeeevff`ggJhh2ii$jjkk l~llfmmLnn4oopphqqHrr&spstrttPuu2vvwwZxx:yyzzzr{w{T||0}}~~~bD( |Vʃ>jԆ>j؉D xXЍF0  |pVȓ@0rV̘B(zXĝ0vX̡D(tVƥ: h֩J.p\ԮLį:,rV̵@*fֹJ(nXԽ@fB4b>fH&pN@nJ(l@(nX@(nH `8 xX:hDP0Z,d@P*~X0nBlJ(xXH&nD h  <     x  Z  4     h  N ,  ~ ^ <    j  L  (   v  >   z  F     P  "   v  \  2   v  V  6   z  \ N! ! 0" " # # $ |$ $ \% % F& & ,' ' ( ~( ( X) ) 0* * + + + \, , <- - . . . Z/ / *0 0 1 t1 1 T2 2 (3 3 3 f4 4 >5 5 6 |6 6 l7 7 V8 8 F9 9 >: : <; ; < < < j= = L> > 0? ? @ x@ @ bA A HB B 2C C &D D E E E hF F FG G 2H H I I J ~J J xK K `L L BM M *N N O O O fP P JQ Q ,R R S S S `T T  | d D .  z b B &    \  8     t  N  0     t V F >  ^  4   t  V  ,   z  V  4     X  2   h  :     h  H  *   ~  ` B! ! " " " \# # >$ $ "% % & r& & F' ' .( ( $) ) * * + + + t, , r- - h. . T/ / (0 0 1 ~1 1 f2 2 B3 3 4 4 4 h5 5 N6 6 :7 7 8 8 8 d9 9 : ; r; ; H< < = = = Z> > ,? ? @ r@ @ DA A B B B VC C B: 2D D E nE E FF F "G G G lH H JI I J J K lK K DL L .M M N zN N dO O LP P Q R nR R BS S &T T U vU U XV V (W W X |X X hY Y LZ Z 8[ [ &\ \ ] x] ] \^ ^ V_ _ F` ` 4a a b b c zc c `d d He e 0f f g g h rh h Li i $j j k xk k fl l Lm m 0n n o o o `p p Hq q ,r r s s t vt t \u u Jv v 0w w *x x y y z z { { { r| | H} } .~ ~  |  f ܀ T ȁ :   ~ ` Ѕ H 4 ,   | l V Ȍ >  v ` ґ H .  h ҕ D  ^ Ԙ F ,  d ʜ :   x ޟ R Ơ 4  l ޣ P 0  r f ڨ N © 6 *  p ڬ N (  n ܯ D  b Ҳ H 6   t ^ з >  l ں J .  v Z ҿ F ,  f J 0  \ 8  ^ F > ,   x b N .  b :  r Z >  b B (   z b :  v b L (  t l P @ (   p P F , ^ N F ,   z f Z @ &  t ` R 8  `  F  *  "     d B   &   x \ B .   t  V  8  (     ~  X  :       r  N  (     l  L  ,     l P! ! D" " ># # $$ $ % % % d& & F' ' 6( ( 0) ) ,* * + + , , - - - z. . n/ / ^0 0 N1 1 <2 2 .3 3 4 4 5 5 6 |6 6 j7 7 P8 8 29 9 : : ; x; ; h< < X= = B> > (? ? @ |@ @ dA A LB B 0C C D rD D jE E `F F LG G DH H 8I I *J J K K L L L vM M nN N bO O \P P PQ Q >R R *S S T rT T \U U :V V W W W `X X FY Y (Z Z [ p[ [ H\ \ ] ] ^ x^ ^ `_ _ <` ` .a a $b b c c d nd d Re e  d ҿ @ " z Z 4 ~ ^ D n V < "  r V 6  n P ,  | \ :  j P 4 x P 0  | T 8 $  | ^ @ , l L 8  | \ 8  t P 4  V 6 d <  n D n L ( x  V 4  ~  \  8   z  d  P  <  (  | Z 2  l P  2     n   P :     h  L  .     n  X  @     f  F  &  ~ \! ! >" " # # # b$ $ F% % $& & ' t' ' V( ( ) @) * + * v+ V, + , :- - . . . h/ / T0 0 41 1 2 2 2 b3 3 >4 4 5 5 6 n6 6 R7 7 68 8 9 9 9 Z: : 2; ; < < < X= = 8> > ? ? @ z@ @ ^A A @B B C C D D E zE E jF F ^G G 6H H I I J vJ J NK K (L L M vM M ZN N >O O $P P Q rQ Q RR *S R S T tT T ^U U 6V V W zW W ZX X :Y Y Z Z Z ^[ [ <\ \ ] ] ] f^ ^ _ D_ (` ` a ra a Lb b ,c c d vd d Ne e &f f g ~g g bh h i Bi "j j k tk k Rl l 2m m n vn n Ho o p p p dq q Fr r s s s Vt t .u u v jv v Dw w x x x Xy y ?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwyxz{|}~      !"#$%&'()*+,-./0123457689;:<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTWUVXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0128345679:;<=>?@AKBCDEFGHIJLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()2*+,-./01345678:9;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX^YZ[\]_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@DABCEFGHIJKLMNOPQRSTUVWXYZ[\^]_`abcdefghijklmnopqrstuvwxyz{|}~                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 P 9 : ; < = > ? @ A B C D E F G H I J K L M N O Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " #   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwyxz{|}~      !"#$%&'()*+,-./0123457689;:<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTWUVXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0128345679:;<=>?@AKBCDEFGHIJLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()2*+,-./01345678:9;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX^YZ[\]_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ef      !"#$%&'()*+,-./0123456789:;<=>?@DABCEFGHIJKLMNOPQRSTUVWXYZ[\^]_`abcdefghijklmnopqrstuvwxyz{|}~                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 P 9 : ; < = > ? @ A B C D E F G H I J K L M N O Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 5 3 4 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) + * , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W Y X Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`acbd$ % & ' ( ) * + , - . / 0 1 2 5 3 4 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                            ! " # $ % & ' ( ) + * , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W Y X Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`acbd_ACCESS_DESCRIPTION_free_ACCESS_DESCRIPTION_it_ACCESS_DESCRIPTION_new_AES_bi_ige_encrypt_AES_cbc_encrypt_AES_cfb128_encrypt_AES_cfb1_encrypt_AES_cfb8_encrypt_AES_ctr128_encrypt_AES_decrypt_AES_ecb_encrypt_AES_encrypt_AES_ige_encrypt_AES_ofb128_encrypt_AES_options_AES_set_decrypt_key_AES_set_encrypt_key_AES_unwrap_key_AES_wrap_key_ASN1_ANY_it_ASN1_BIT_STRING_check_ASN1_BIT_STRING_free_ASN1_BIT_STRING_get_bit_ASN1_BIT_STRING_it_ASN1_BIT_STRING_name_print_ASN1_BIT_STRING_new_ASN1_BIT_STRING_num_asc_ASN1_BIT_STRING_set_ASN1_BIT_STRING_set_asc_ASN1_BIT_STRING_set_bit_ASN1_BMPSTRING_free_ASN1_BMPSTRING_it_ASN1_BMPSTRING_new_ASN1_BOOLEAN_it_ASN1_ENUMERATED_free_ASN1_ENUMERATED_get_ASN1_ENUMERATED_it_ASN1_ENUMERATED_new_ASN1_ENUMERATED_set_ASN1_ENUMERATED_to_BN_ASN1_FBOOLEAN_it_ASN1_GENERALIZEDTIME_adj_ASN1_GENERALIZEDTIME_check_ASN1_GENERALIZEDTIME_free_ASN1_GENERALIZEDTIME_it_ASN1_GENERALIZEDTIME_new_ASN1_GENERALIZEDTIME_print_ASN1_GENERALIZEDTIME_set_ASN1_GENERALIZEDTIME_set_string_ASN1_GENERALSTRING_free_ASN1_GENERALSTRING_it_ASN1_GENERALSTRING_new_ASN1_IA5STRING_free_ASN1_IA5STRING_it_ASN1_IA5STRING_new_ASN1_INTEGER_cmp_ASN1_INTEGER_dup_ASN1_INTEGER_free_ASN1_INTEGER_get_ASN1_INTEGER_it_ASN1_INTEGER_new_ASN1_INTEGER_set_ASN1_INTEGER_to_BN_ASN1_NULL_free_ASN1_NULL_it_ASN1_NULL_new_ASN1_OBJECT_create_ASN1_OBJECT_free_ASN1_OBJECT_it_ASN1_OBJECT_new_ASN1_OCTET_STRING_NDEF_it_ASN1_OCTET_STRING_cmp_ASN1_OCTET_STRING_dup_ASN1_OCTET_STRING_free_ASN1_OCTET_STRING_it_ASN1_OCTET_STRING_new_ASN1_OCTET_STRING_set_ASN1_PCTX_free_ASN1_PCTX_get_cert_flags_ASN1_PCTX_get_flags_ASN1_PCTX_get_nm_flags_ASN1_PCTX_get_oid_flags_ASN1_PCTX_get_str_flags_ASN1_PCTX_new_ASN1_PCTX_set_cert_flags_ASN1_PCTX_set_flags_ASN1_PCTX_set_nm_flags_ASN1_PCTX_set_oid_flags_ASN1_PCTX_set_str_flags_ASN1_PRINTABLESTRING_free_ASN1_PRINTABLESTRING_it_ASN1_PRINTABLESTRING_new_ASN1_PRINTABLE_free_ASN1_PRINTABLE_it_ASN1_PRINTABLE_new_ASN1_PRINTABLE_type_ASN1_SEQUENCE_ANY_it_ASN1_SEQUENCE_it_ASN1_SET_ANY_it_ASN1_STRING_TABLE_add_ASN1_STRING_TABLE_cleanup_ASN1_STRING_TABLE_get_ASN1_STRING_clear_free_ASN1_STRING_cmp_ASN1_STRING_copy_ASN1_STRING_data_ASN1_STRING_dup_ASN1_STRING_free_ASN1_STRING_get_default_mask_ASN1_STRING_length_ASN1_STRING_length_set_ASN1_STRING_new_ASN1_STRING_print_ASN1_STRING_print_ex_ASN1_STRING_print_ex_fp_ASN1_STRING_set_ASN1_STRING_set0_ASN1_STRING_set_by_NID_ASN1_STRING_set_default_mask_ASN1_STRING_set_default_mask_asc_ASN1_STRING_to_UTF8_ASN1_STRING_type_ASN1_STRING_type_new_ASN1_T61STRING_free_ASN1_T61STRING_it_ASN1_T61STRING_new_ASN1_TBOOLEAN_it_ASN1_TIME_adj_ASN1_TIME_check_ASN1_TIME_diff_ASN1_TIME_free_ASN1_TIME_it_ASN1_TIME_new_ASN1_TIME_print_ASN1_TIME_set_ASN1_TIME_set_string_ASN1_TIME_to_generalizedtime_ASN1_TYPE_cmp_ASN1_TYPE_free_ASN1_TYPE_get_ASN1_TYPE_get_int_octetstring_ASN1_TYPE_get_octetstring_ASN1_TYPE_new_ASN1_TYPE_set_ASN1_TYPE_set1_ASN1_TYPE_set_int_octetstring_ASN1_TYPE_set_octetstring_ASN1_UNIVERSALSTRING_free_ASN1_UNIVERSALSTRING_it_ASN1_UNIVERSALSTRING_new_ASN1_UNIVERSALSTRING_to_string_ASN1_UTCTIME_adj_ASN1_UTCTIME_check_ASN1_UTCTIME_cmp_time_t_ASN1_UTCTIME_free_ASN1_UTCTIME_it_ASN1_UTCTIME_new_ASN1_UTCTIME_print_ASN1_UTCTIME_set_ASN1_UTCTIME_set_string_ASN1_UTF8STRING_free_ASN1_UTF8STRING_it_ASN1_UTF8STRING_new_ASN1_VISIBLESTRING_free_ASN1_VISIBLESTRING_it_ASN1_VISIBLESTRING_new_ASN1_add_oid_module_ASN1_bn_print_ASN1_check_infinite_end_ASN1_const_check_infinite_end_ASN1_d2i_bio_ASN1_d2i_fp_ASN1_digest_ASN1_dup_ASN1_generate_nconf_ASN1_generate_v3_ASN1_get_object_ASN1_i2d_bio_ASN1_i2d_fp_ASN1_item_d2i_ASN1_item_d2i_bio_ASN1_item_d2i_fp_ASN1_item_digest_ASN1_item_dup_ASN1_item_ex_d2i_ASN1_item_ex_free_ASN1_item_ex_i2d_ASN1_item_ex_new_ASN1_item_free_ASN1_item_i2d_ASN1_item_i2d_bio_ASN1_item_i2d_fp_ASN1_item_ndef_i2d_ASN1_item_new_ASN1_item_pack_ASN1_item_print_ASN1_item_sign_ASN1_item_sign_ctx_ASN1_item_unpack_ASN1_item_verify_ASN1_mbstring_copy_ASN1_mbstring_ncopy_ASN1_object_size_ASN1_pack_string_ASN1_parse_ASN1_parse_dump_ASN1_primitive_free_ASN1_primitive_new_ASN1_put_eoc_ASN1_put_object_ASN1_seq_pack_ASN1_seq_unpack_ASN1_sign_ASN1_tag2bit_ASN1_tag2str_ASN1_template_d2i_ASN1_template_free_ASN1_template_i2d_ASN1_template_new_ASN1_unpack_string_ASN1_verify_AUTHORITY_INFO_ACCESS_free_AUTHORITY_INFO_ACCESS_it_AUTHORITY_INFO_ACCESS_new_AUTHORITY_KEYID_free_AUTHORITY_KEYID_it_AUTHORITY_KEYID_new_BASIC_CONSTRAINTS_free_BASIC_CONSTRAINTS_it_BASIC_CONSTRAINTS_new_BF_cbc_encrypt_BF_cfb64_encrypt_BF_decrypt_BF_ecb_encrypt_BF_encrypt_BF_ofb64_encrypt_BF_options_BF_set_key_BIGNUM_it_BIO_accept_BIO_asn1_get_prefix_BIO_asn1_get_suffix_BIO_asn1_set_prefix_BIO_asn1_set_suffix_BIO_callback_ctrl_BIO_clear_flags_BIO_copy_next_retry_BIO_ctrl_BIO_ctrl_get_read_request_BIO_ctrl_get_write_guarantee_BIO_ctrl_pending_BIO_ctrl_reset_read_request_BIO_ctrl_wpending_BIO_debug_callback_BIO_dgram_non_fatal_error_BIO_dump_BIO_dump_cb_BIO_dump_fp_BIO_dump_indent_BIO_dump_indent_cb_BIO_dump_indent_fp_BIO_dup_chain_BIO_f_asn1_BIO_f_base64_BIO_f_buffer_BIO_f_cipher_BIO_f_md_BIO_f_nbio_test_BIO_f_null_BIO_f_reliable_BIO_fd_non_fatal_error_BIO_fd_should_retry_BIO_find_type_BIO_free_BIO_free_all_BIO_get_accept_socket_BIO_get_callback_BIO_get_callback_arg_BIO_get_ex_data_BIO_get_ex_new_index_BIO_get_host_ip_BIO_get_port_BIO_get_retry_BIO_BIO_get_retry_reason_BIO_gethostbyname_BIO_gets_BIO_hex_string_BIO_indent_BIO_int_ctrl_BIO_method_name_BIO_method_type_BIO_new_BIO_new_CMS_BIO_new_NDEF_BIO_new_PKCS7_BIO_new_accept_BIO_new_bio_pair_BIO_new_connect_BIO_new_dgram_BIO_new_fd_BIO_new_file_BIO_new_fp_BIO_new_mem_buf_BIO_new_socket_BIO_next_BIO_nread_BIO_nread0_BIO_number_read_BIO_number_written_BIO_nwrite_BIO_nwrite0_BIO_pop_BIO_printf_BIO_ptr_ctrl_BIO_push_BIO_puts_BIO_read_BIO_s_accept_BIO_s_bio_BIO_s_connect_BIO_s_datagram_BIO_s_fd_BIO_s_file_BIO_s_mem_BIO_s_null_BIO_s_socket_BIO_set_BIO_set_callback_BIO_set_callback_arg_BIO_set_cipher_BIO_set_ex_data_BIO_set_flags_BIO_set_tcp_ndelay_BIO_snprintf_BIO_sock_cleanup_BIO_sock_error_BIO_sock_init_BIO_sock_non_fatal_error_BIO_sock_should_retry_BIO_socket_ioctl_BIO_socket_nbio_BIO_test_flags_BIO_vfree_BIO_vprintf_BIO_vsnprintf_BIO_write_BN_BLINDING_convert_BN_BLINDING_convert_ex_BN_BLINDING_create_param_BN_BLINDING_free_BN_BLINDING_get_flags_BN_BLINDING_get_thread_id_BN_BLINDING_invert_BN_BLINDING_invert_ex_BN_BLINDING_new_BN_BLINDING_set_flags_BN_BLINDING_set_thread_id_BN_BLINDING_thread_id_BN_BLINDING_update_BN_CTX_end_BN_CTX_free_BN_CTX_get_BN_CTX_init_BN_CTX_new_BN_CTX_start_BN_GENCB_call_BN_GF2m_add_BN_GF2m_arr2poly_BN_GF2m_mod_BN_GF2m_mod_arr_BN_GF2m_mod_div_BN_GF2m_mod_div_arr_BN_GF2m_mod_exp_BN_GF2m_mod_exp_arr_BN_GF2m_mod_inv_BN_GF2m_mod_inv_arr_BN_GF2m_mod_mul_BN_GF2m_mod_mul_arr_BN_GF2m_mod_solve_quad_BN_GF2m_mod_solve_quad_arr_BN_GF2m_mod_sqr_BN_GF2m_mod_sqr_arr_BN_GF2m_mod_sqrt_BN_GF2m_mod_sqrt_arr_BN_GF2m_poly2arr_BN_MONT_CTX_copy_BN_MONT_CTX_free_BN_MONT_CTX_init_BN_MONT_CTX_new_BN_MONT_CTX_set_BN_MONT_CTX_set_locked_BN_RECP_CTX_free_BN_RECP_CTX_init_BN_RECP_CTX_new_BN_RECP_CTX_set_BN_X931_derive_prime_ex_BN_X931_generate_Xpq_BN_X931_generate_prime_ex_BN_add_BN_add_word_BN_asc2bn_BN_bin2bn_BN_bn2bin_BN_bn2dec_BN_bn2hex_BN_bn2mpi_BN_bntest_rand_BN_clear_BN_clear_bit_BN_clear_free_BN_cmp_BN_consttime_swap_BN_copy_BN_dec2bn_BN_div_BN_div_recp_BN_div_word_BN_dup_BN_exp_BN_free_BN_from_montgomery_BN_gcd_BN_generate_prime_BN_generate_prime_ex_BN_get0_nist_prime_192_BN_get0_nist_prime_224_BN_get0_nist_prime_256_BN_get0_nist_prime_384_BN_get0_nist_prime_521_BN_get_params_BN_get_word_BN_hex2bn_BN_init_BN_is_bit_set_BN_is_prime_BN_is_prime_ex_BN_is_prime_fasttest_BN_is_prime_fasttest_ex_BN_kronecker_BN_lshift_BN_lshift1_BN_mask_bits_BN_mod_add_BN_mod_add_quick_BN_mod_exp_BN_mod_exp2_mont_BN_mod_exp_mont_BN_mod_exp_mont_consttime_BN_mod_exp_mont_word_BN_mod_exp_recp_BN_mod_exp_simple_BN_mod_inverse_BN_mod_lshift_BN_mod_lshift1_BN_mod_lshift1_quick_BN_mod_lshift_quick_BN_mod_mul_BN_mod_mul_montgomery_BN_mod_mul_reciprocal_BN_mod_sqr_BN_mod_sqrt_BN_mod_sub_BN_mod_sub_quick_BN_mod_word_BN_mpi2bn_BN_mul_BN_mul_word_BN_new_BN_nist_mod_192_BN_nist_mod_224_BN_nist_mod_256_BN_nist_mod_384_BN_nist_mod_521_BN_nnmod_BN_num_bits_BN_num_bits_word_BN_options_BN_print_BN_print_fp_BN_pseudo_rand_BN_pseudo_rand_range_BN_rand_BN_rand_range_BN_reciprocal_BN_rshift_BN_rshift1_BN_set_bit_BN_set_negative_BN_set_params_BN_set_word_BN_sqr_BN_sub_BN_sub_word_BN_swap_BN_to_ASN1_ENUMERATED_BN_to_ASN1_INTEGER_BN_uadd_BN_ucmp_BN_usub_BN_value_one_BUF_MEM_free_BUF_MEM_grow_BUF_MEM_grow_clean_BUF_MEM_new_BUF_memdup_BUF_reverse_BUF_strdup_BUF_strlcat_BUF_strlcpy_BUF_strndup_BUF_strnlen_CAST_cbc_encrypt_CAST_cfb64_encrypt_CAST_decrypt_CAST_ecb_encrypt_CAST_encrypt_CAST_ofb64_encrypt_CAST_set_key_CBIGNUM_it_CERTIFICATEPOLICIES_free_CERTIFICATEPOLICIES_it_CERTIFICATEPOLICIES_new_CMAC_CTX_cleanup_CMAC_CTX_copy_CMAC_CTX_free_CMAC_CTX_get0_cipher_ctx_CMAC_CTX_new_CMAC_Final_CMAC_Init_CMAC_Update_CMAC_resume_CMS_ContentInfo_free_CMS_ContentInfo_it_CMS_ContentInfo_new_CMS_ContentInfo_print_ctx_CMS_EncryptedData_decrypt_CMS_EncryptedData_encrypt_CMS_EncryptedData_set1_key_CMS_EnvelopedData_create_CMS_ReceiptRequest_create0_CMS_ReceiptRequest_free_CMS_ReceiptRequest_get0_values_CMS_ReceiptRequest_it_CMS_ReceiptRequest_new_CMS_RecipientEncryptedKey_cert_cmp_CMS_RecipientEncryptedKey_get0_id_CMS_RecipientInfo_decrypt_CMS_RecipientInfo_encrypt_CMS_RecipientInfo_get0_pkey_ctx_CMS_RecipientInfo_kari_decrypt_CMS_RecipientInfo_kari_get0_alg_CMS_RecipientInfo_kari_get0_ctx_CMS_RecipientInfo_kari_get0_orig_id_CMS_RecipientInfo_kari_get0_reks_CMS_RecipientInfo_kari_orig_id_cmp_CMS_RecipientInfo_kari_set0_pkey_CMS_RecipientInfo_kekri_get0_id_CMS_RecipientInfo_kekri_id_cmp_CMS_RecipientInfo_ktri_cert_cmp_CMS_RecipientInfo_ktri_get0_algs_CMS_RecipientInfo_ktri_get0_signer_id_CMS_RecipientInfo_set0_key_CMS_RecipientInfo_set0_password_CMS_RecipientInfo_set0_pkey_CMS_RecipientInfo_type_CMS_SharedInfo_encode_CMS_SignedData_init_CMS_SignerInfo_cert_cmp_CMS_SignerInfo_get0_algs_CMS_SignerInfo_get0_md_ctx_CMS_SignerInfo_get0_pkey_ctx_CMS_SignerInfo_get0_signature_CMS_SignerInfo_get0_signer_id_CMS_SignerInfo_set1_signer_cert_CMS_SignerInfo_sign_CMS_SignerInfo_verify_CMS_SignerInfo_verify_content_CMS_add0_CertificateChoices_CMS_add0_RevocationInfoChoice_CMS_add0_cert_CMS_add0_crl_CMS_add0_recipient_key_CMS_add0_recipient_password_CMS_add1_ReceiptRequest_CMS_add1_cert_CMS_add1_crl_CMS_add1_recipient_cert_CMS_add1_signer_CMS_add_simple_smimecap_CMS_add_smimecap_CMS_add_standard_smimecap_CMS_compress_CMS_data_CMS_dataFinal_CMS_dataInit_CMS_data_create_CMS_decrypt_CMS_decrypt_set1_key_CMS_decrypt_set1_password_CMS_decrypt_set1_pkey_CMS_digest_create_CMS_digest_verify_CMS_encrypt_CMS_final_CMS_get0_RecipientInfos_CMS_get0_SignerInfos_CMS_get0_content_CMS_get0_eContentType_CMS_get0_signers_CMS_get0_type_CMS_get1_ReceiptRequest_CMS_get1_certs_CMS_get1_crls_CMS_is_detached_CMS_set1_eContentType_CMS_set1_signers_certs_CMS_set_detached_CMS_sign_CMS_sign_receipt_CMS_signed_add1_attr_CMS_signed_add1_attr_by_NID_CMS_signed_add1_attr_by_OBJ_CMS_signed_add1_attr_by_txt_CMS_signed_delete_attr_CMS_signed_get0_data_by_OBJ_CMS_signed_get_attr_CMS_signed_get_attr_by_NID_CMS_signed_get_attr_by_OBJ_CMS_signed_get_attr_count_CMS_stream_CMS_uncompress_CMS_unsigned_add1_attr_CMS_unsigned_add1_attr_by_NID_CMS_unsigned_add1_attr_by_OBJ_CMS_unsigned_add1_attr_by_txt_CMS_unsigned_delete_attr_CMS_unsigned_get0_data_by_OBJ_CMS_unsigned_get_attr_CMS_unsigned_get_attr_by_NID_CMS_unsigned_get_attr_by_OBJ_CMS_unsigned_get_attr_count_CMS_verify_CMS_verify_receipt_COMP_CTX_free_COMP_CTX_new_COMP_compress_block_COMP_expand_block_COMP_rle_COMP_zlib_COMP_zlib_cleanup_CONF_dump_bio_CONF_dump_fp_CONF_free_CONF_get1_default_config_file_CONF_get_number_CONF_get_section_CONF_get_string_CONF_imodule_get_flags_CONF_imodule_get_module_CONF_imodule_get_name_CONF_imodule_get_usr_data_CONF_imodule_get_value_CONF_imodule_set_flags_CONF_imodule_set_usr_data_CONF_load_CONF_load_bio_CONF_load_fp_CONF_module_add_CONF_module_get_usr_data_CONF_module_set_usr_data_CONF_modules_finish_CONF_modules_free_CONF_modules_load_CONF_modules_load_file_CONF_modules_unload_CONF_parse_list_CONF_set_default_method_CONF_set_nconf_CRL_DIST_POINTS_free_CRL_DIST_POINTS_it_CRL_DIST_POINTS_new_CRYPTO_128_unwrap_CRYPTO_128_wrap_CRYPTO_THREADID_cmp_CRYPTO_THREADID_cpy_CRYPTO_THREADID_current_CRYPTO_THREADID_get_callback_CRYPTO_THREADID_hash_CRYPTO_THREADID_set_callback_CRYPTO_THREADID_set_numeric_CRYPTO_THREADID_set_pointer_CRYPTO_add_lock_CRYPTO_cbc128_decrypt_CRYPTO_cbc128_encrypt_CRYPTO_ccm128_aad_CRYPTO_ccm128_decrypt_CRYPTO_ccm128_decrypt_ccm64_CRYPTO_ccm128_encrypt_CRYPTO_ccm128_encrypt_ccm64_CRYPTO_ccm128_init_CRYPTO_ccm128_setiv_CRYPTO_ccm128_tag_CRYPTO_cfb128_1_encrypt_CRYPTO_cfb128_8_encrypt_CRYPTO_cfb128_encrypt_CRYPTO_cleanup_all_ex_data_CRYPTO_ctr128_encrypt_CRYPTO_ctr128_encrypt_ctr32_CRYPTO_cts128_decrypt_CRYPTO_cts128_decrypt_block_CRYPTO_cts128_encrypt_CRYPTO_cts128_encrypt_block_CRYPTO_dbg_free_CRYPTO_dbg_get_options_CRYPTO_dbg_malloc_CRYPTO_dbg_realloc_CRYPTO_dbg_set_options_CRYPTO_destroy_dynlockid_CRYPTO_dup_ex_data_CRYPTO_ex_data_new_class_CRYPTO_free_CRYPTO_free_ex_data_CRYPTO_free_locked_CRYPTO_gcm128_aad_CRYPTO_gcm128_decrypt_CRYPTO_gcm128_decrypt_ctr32_CRYPTO_gcm128_encrypt_CRYPTO_gcm128_encrypt_ctr32_CRYPTO_gcm128_finish_CRYPTO_gcm128_init_CRYPTO_gcm128_new_CRYPTO_gcm128_release_CRYPTO_gcm128_setiv_CRYPTO_gcm128_tag_CRYPTO_get_add_lock_callback_CRYPTO_get_dynlock_create_callback_CRYPTO_get_dynlock_destroy_callback_CRYPTO_get_dynlock_lock_callback_CRYPTO_get_dynlock_value_CRYPTO_get_ex_data_CRYPTO_get_ex_data_implementation_CRYPTO_get_ex_new_index_CRYPTO_get_id_callback_CRYPTO_get_lock_name_CRYPTO_get_locked_mem_ex_functions_CRYPTO_get_locked_mem_functions_CRYPTO_get_locking_callback_CRYPTO_get_mem_debug_functions_CRYPTO_get_mem_debug_options_CRYPTO_get_mem_ex_functions_CRYPTO_get_mem_functions_CRYPTO_get_new_dynlockid_CRYPTO_get_new_lockid_CRYPTO_is_mem_check_on_CRYPTO_lock_CRYPTO_malloc_CRYPTO_malloc_locked_CRYPTO_mem_ctrl_CRYPTO_mem_leaks_CRYPTO_mem_leaks_cb_CRYPTO_mem_leaks_fp_CRYPTO_memcmp_CRYPTO_new_ex_data_CRYPTO_nistcts128_decrypt_CRYPTO_nistcts128_decrypt_block_CRYPTO_nistcts128_encrypt_CRYPTO_nistcts128_encrypt_block_CRYPTO_num_locks_CRYPTO_ofb128_encrypt_CRYPTO_pop_info_CRYPTO_push_info__CRYPTO_realloc_CRYPTO_realloc_clean_CRYPTO_remalloc_CRYPTO_remove_all_info_CRYPTO_set_add_lock_callback_CRYPTO_set_dynlock_create_callback_CRYPTO_set_dynlock_destroy_callback_CRYPTO_set_dynlock_lock_callback_CRYPTO_set_ex_data_CRYPTO_set_ex_data_implementation_CRYPTO_set_id_callback_CRYPTO_set_locked_mem_ex_functions_CRYPTO_set_locked_mem_functions_CRYPTO_set_locking_callback_CRYPTO_set_mem_debug_functions_CRYPTO_set_mem_debug_options_CRYPTO_set_mem_ex_functions_CRYPTO_set_mem_functions_CRYPTO_strdup_CRYPTO_thread_id_CRYPTO_xts128_encrypt_Camellia_cbc_encrypt_Camellia_cfb128_encrypt_Camellia_cfb1_encrypt_Camellia_cfb8_encrypt_Camellia_ctr128_encrypt_Camellia_decrypt_Camellia_ecb_encrypt_Camellia_encrypt_Camellia_ofb128_encrypt_Camellia_set_key_DES_cbc_cksum_DES_cbc_encrypt_DES_cfb64_encrypt_DES_cfb_encrypt_DES_check_key_parity_DES_crypt_DES_decrypt3_DES_ecb3_encrypt_DES_ecb_encrypt_DES_ede3_cbc_encrypt_DES_ede3_cbcm_encrypt_DES_ede3_cfb64_encrypt_DES_ede3_cfb_encrypt_DES_ede3_ofb64_encrypt_DES_enc_read_DES_enc_write_DES_encrypt1_DES_encrypt2_DES_encrypt3_DES_fcrypt_DES_is_weak_key_DES_key_sched_DES_ncbc_encrypt_DES_ofb64_encrypt_DES_ofb_encrypt_DES_options_DES_pcbc_encrypt_DES_quad_cksum_DES_random_key_DES_read_2passwords_DES_read_password_DES_set_key_DES_set_key_checked_DES_set_key_unchecked_DES_set_odd_parity_DES_string_to_2keys_DES_string_to_key_DES_xcbc_encrypt_DH_KDF_X9_42_DH_OpenSSL_DH_check_DH_check_pub_key_DH_compute_key_DH_compute_key_padded_DH_free_DH_generate_key_DH_generate_parameters_DH_generate_parameters_ex_DH_get_1024_160_DH_get_2048_224_DH_get_2048_256_DH_get_default_method_DH_get_ex_data_DH_get_ex_new_index_DH_new_DH_new_method_DH_set_default_method_DH_set_ex_data_DH_set_method_DH_size_DH_up_ref_DHparams_dup_DHparams_print_DHparams_print_fp_DIRECTORYSTRING_free_DIRECTORYSTRING_it_DIRECTORYSTRING_new_DISPLAYTEXT_free_DISPLAYTEXT_it_DISPLAYTEXT_new_DIST_POINT_NAME_free_DIST_POINT_NAME_it_DIST_POINT_NAME_new_DIST_POINT_free_DIST_POINT_it_DIST_POINT_new_DIST_POINT_set_dpname_DSA_OpenSSL_DSA_SIG_free_DSA_SIG_new_DSA_do_sign_DSA_do_verify_DSA_dup_DH_DSA_free_DSA_generate_key_DSA_generate_parameters_DSA_generate_parameters_ex_DSA_get_default_method_DSA_get_ex_data_DSA_get_ex_new_index_DSA_new_DSA_new_method_DSA_print_DSA_print_fp_DSA_set_default_method_DSA_set_ex_data_DSA_set_method_DSA_sign_DSA_sign_setup_DSA_size_DSA_up_ref_DSA_verify_DSAparams_dup_DSAparams_print_DSAparams_print_fp_DSO_METHOD_beos_DSO_METHOD_dl_DSO_METHOD_dlfcn_DSO_METHOD_null_DSO_METHOD_openssl_DSO_METHOD_vms_DSO_METHOD_win32_DSO_bind_func_DSO_bind_var_DSO_convert_filename_DSO_ctrl_DSO_flags_DSO_free_DSO_get_default_method_DSO_get_filename_DSO_get_loaded_filename_DSO_get_method_DSO_global_lookup_DSO_load_DSO_merge_DSO_new_DSO_new_method_DSO_pathbyaddr_DSO_set_default_method_DSO_set_filename_DSO_set_method_DSO_set_name_converter_DSO_up_ref_ECDH_KDF_X9_62_ECDH_OpenSSL_ECDH_compute_key_ECDH_get_default_method_ECDH_get_ex_data_ECDH_get_ex_new_index_ECDH_set_default_method_ECDH_set_ex_data_ECDH_set_method_ECDSA_METHOD_free_ECDSA_METHOD_get_app_data_ECDSA_METHOD_new_ECDSA_METHOD_set_app_data_ECDSA_METHOD_set_flags_ECDSA_METHOD_set_name_ECDSA_METHOD_set_sign_ECDSA_METHOD_set_sign_setup_ECDSA_METHOD_set_verify_ECDSA_OpenSSL_ECDSA_SIG_free_ECDSA_SIG_new_ECDSA_do_sign_ECDSA_do_sign_ex_ECDSA_do_verify_ECDSA_get_default_method_ECDSA_get_ex_data_ECDSA_get_ex_new_index_ECDSA_set_default_method_ECDSA_set_ex_data_ECDSA_set_method_ECDSA_sign_ECDSA_sign_ex_ECDSA_sign_setup_ECDSA_size_ECDSA_verify_ECPKParameters_print_ECPKParameters_print_fp_ECParameters_print_ECParameters_print_fp_EC_GF2m_simple_method_EC_GFp_mont_method_EC_GFp_nist_method_EC_GFp_simple_method_EC_GROUP_check_EC_GROUP_check_discriminant_EC_GROUP_clear_free_EC_GROUP_cmp_EC_GROUP_copy_EC_GROUP_dup_EC_GROUP_free_EC_GROUP_get0_generator_EC_GROUP_get0_seed_EC_GROUP_get_asn1_flag_EC_GROUP_get_basis_type_EC_GROUP_get_cofactor_EC_GROUP_get_curve_GF2m_EC_GROUP_get_curve_GFp_EC_GROUP_get_curve_name_EC_GROUP_get_degree_EC_GROUP_get_mont_data_EC_GROUP_get_order_EC_GROUP_get_pentanomial_basis_EC_GROUP_get_point_conversion_form_EC_GROUP_get_seed_len_EC_GROUP_get_trinomial_basis_EC_GROUP_have_precompute_mult_EC_GROUP_method_of_EC_GROUP_new_EC_GROUP_new_by_curve_name_EC_GROUP_new_curve_GF2m_EC_GROUP_new_curve_GFp_EC_GROUP_precompute_mult_EC_GROUP_set_asn1_flag_EC_GROUP_set_curve_GF2m_EC_GROUP_set_curve_GFp_EC_GROUP_set_curve_name_EC_GROUP_set_generator_EC_GROUP_set_point_conversion_form_EC_GROUP_set_seed_EC_KEY_check_key_EC_KEY_clear_flags_EC_KEY_copy_EC_KEY_dup_EC_KEY_free_EC_KEY_generate_key_EC_KEY_get0_group_EC_KEY_get0_private_key_EC_KEY_get0_public_key_EC_KEY_get_conv_form_EC_KEY_get_enc_flags_EC_KEY_get_flags_EC_KEY_get_key_method_data_EC_KEY_insert_key_method_data_EC_KEY_new_EC_KEY_new_by_curve_name_EC_KEY_precompute_mult_EC_KEY_print_EC_KEY_print_fp_EC_KEY_set_asn1_flag_EC_KEY_set_conv_form_EC_KEY_set_enc_flags_EC_KEY_set_flags_EC_KEY_set_group_EC_KEY_set_private_key_EC_KEY_set_public_key_EC_KEY_set_public_key_affine_coordinates_EC_KEY_up_ref_EC_METHOD_get_field_type_EC_POINT_add_EC_POINT_bn2point_EC_POINT_clear_free_EC_POINT_cmp_EC_POINT_copy_EC_POINT_dbl_EC_POINT_dup_EC_POINT_free_EC_POINT_get_Jprojective_coordinates_GFp_EC_POINT_get_affine_coordinates_GF2m_EC_POINT_get_affine_coordinates_GFp_EC_POINT_hex2point_EC_POINT_invert_EC_POINT_is_at_infinity_EC_POINT_is_on_curve_EC_POINT_make_affine_EC_POINT_method_of_EC_POINT_mul_EC_POINT_new_EC_POINT_oct2point_EC_POINT_point2bn_EC_POINT_point2hex_EC_POINT_point2oct_EC_POINT_set_Jprojective_coordinates_GFp_EC_POINT_set_affine_coordinates_GF2m_EC_POINT_set_affine_coordinates_GFp_EC_POINT_set_compressed_coordinates_GF2m_EC_POINT_set_compressed_coordinates_GFp_EC_POINT_set_to_infinity_EC_POINTs_make_affine_EC_POINTs_mul_EC_curve_nid2nist_EC_curve_nist2nid_EC_get_builtin_curves_EDIPARTYNAME_free_EDIPARTYNAME_it_EDIPARTYNAME_new_ENGINE_add_ENGINE_add_conf_module_ENGINE_by_id_ENGINE_cleanup_ENGINE_cmd_is_executable_ENGINE_ctrl_ENGINE_ctrl_cmd_ENGINE_ctrl_cmd_string_ENGINE_finish_ENGINE_free_ENGINE_get_DH_ENGINE_get_DSA_ENGINE_get_ECDH_ENGINE_get_ECDSA_ENGINE_get_RAND_ENGINE_get_RSA_ENGINE_get_STORE_ENGINE_get_cipher_ENGINE_get_cipher_engine_ENGINE_get_ciphers_ENGINE_get_cmd_defns_ENGINE_get_ctrl_function_ENGINE_get_default_DH_ENGINE_get_default_DSA_ENGINE_get_default_ECDH_ENGINE_get_default_ECDSA_ENGINE_get_default_RAND_ENGINE_get_default_RSA_ENGINE_get_destroy_function_ENGINE_get_digest_ENGINE_get_digest_engine_ENGINE_get_digests_ENGINE_get_ex_data_ENGINE_get_ex_new_index_ENGINE_get_finish_function_ENGINE_get_first_ENGINE_get_flags_ENGINE_get_id_ENGINE_get_init_function_ENGINE_get_last_ENGINE_get_load_privkey_function_ENGINE_get_load_pubkey_function_ENGINE_get_name_ENGINE_get_next_ENGINE_get_pkey_asn1_meth_ENGINE_get_pkey_asn1_meth_engine_ENGINE_get_pkey_asn1_meth_str_ENGINE_get_pkey_asn1_meths_ENGINE_get_pkey_meth_ENGINE_get_pkey_meth_engine_ENGINE_get_pkey_meths_ENGINE_get_prev_ENGINE_get_ssl_client_cert_function_ENGINE_get_static_state_ENGINE_get_table_flags_ENGINE_init_ENGINE_load_builtin_engines_ENGINE_load_cryptodev_ENGINE_load_dynamic_ENGINE_load_openssl_ENGINE_load_private_key_ENGINE_load_public_key_ENGINE_load_rdrand_ENGINE_load_ssl_client_cert_ENGINE_new_ENGINE_pkey_asn1_find_str_ENGINE_register_DH_ENGINE_register_DSA_ENGINE_register_ECDH_ENGINE_register_ECDSA_ENGINE_register_RAND_ENGINE_register_RSA_ENGINE_register_STORE_ENGINE_register_all_DH_ENGINE_register_all_DSA_ENGINE_register_all_ECDH_ENGINE_register_all_ECDSA_ENGINE_register_all_RAND_ENGINE_register_all_RSA_ENGINE_register_all_STORE_ENGINE_register_all_ciphers_ENGINE_register_all_complete_ENGINE_register_all_digests_ENGINE_register_all_pkey_asn1_meths_ENGINE_register_all_pkey_meths_ENGINE_register_ciphers_ENGINE_register_complete_ENGINE_register_digests_ENGINE_register_pkey_asn1_meths_ENGINE_register_pkey_meths_ENGINE_remove_ENGINE_set_DH_ENGINE_set_DSA_ENGINE_set_ECDH_ENGINE_set_ECDSA_ENGINE_set_RAND_ENGINE_set_RSA_ENGINE_set_STORE_ENGINE_set_ciphers_ENGINE_set_cmd_defns_ENGINE_set_ctrl_function_ENGINE_set_default_ENGINE_set_default_DH_ENGINE_set_default_DSA_ENGINE_set_default_ECDH_ENGINE_set_default_ECDSA_ENGINE_set_default_RAND_ENGINE_set_default_RSA_ENGINE_set_default_ciphers_ENGINE_set_default_digests_ENGINE_set_default_pkey_asn1_meths_ENGINE_set_default_pkey_meths_ENGINE_set_default_string_ENGINE_set_destroy_function_ENGINE_set_digests_ENGINE_set_ex_data_ENGINE_set_finish_function_ENGINE_set_flags_ENGINE_set_id_ENGINE_set_init_function_ENGINE_set_load_privkey_function_ENGINE_set_load_pubkey_function_ENGINE_set_load_ssl_client_cert_function_ENGINE_set_name_ENGINE_set_pkey_asn1_meths_ENGINE_set_pkey_meths_ENGINE_set_table_flags_ENGINE_unregister_DH_ENGINE_unregister_DSA_ENGINE_unregister_ECDH_ENGINE_unregister_ECDSA_ENGINE_unregister_RAND_ENGINE_unregister_RSA_ENGINE_unregister_STORE_ENGINE_unregister_ciphers_ENGINE_unregister_digests_ENGINE_unregister_pkey_asn1_meths_ENGINE_unregister_pkey_meths_ENGINE_up_ref_ERR_add_error_data_ERR_add_error_vdata_ERR_clear_error_ERR_error_string_ERR_error_string_n_ERR_free_strings_ERR_func_error_string_ERR_get_err_state_table_ERR_get_error_ERR_get_error_line_ERR_get_error_line_data_ERR_get_implementation_ERR_get_next_error_library_ERR_get_state_ERR_get_string_table_ERR_lib_error_string_ERR_load_ASN1_strings_ERR_load_BIO_strings_ERR_load_BN_strings_ERR_load_BUF_strings_ERR_load_CMS_strings_ERR_load_COMP_strings_ERR_load_CONF_strings_ERR_load_CRYPTO_strings_ERR_load_DH_strings_ERR_load_DSA_strings_ERR_load_DSO_strings_ERR_load_ECDH_strings_ERR_load_ECDSA_strings_ERR_load_EC_strings_ERR_load_ENGINE_strings_ERR_load_ERR_strings_ERR_load_EVP_strings_ERR_load_OBJ_strings_ERR_load_OCSP_strings_ERR_load_PEM_strings_ERR_load_PKCS12_strings_ERR_load_PKCS7_strings_ERR_load_RAND_strings_ERR_load_RSA_strings_ERR_load_TS_strings_ERR_load_UI_strings_ERR_load_X509V3_strings_ERR_load_X509_strings_ERR_load_crypto_strings_ERR_load_strings_ERR_peek_error_ERR_peek_error_line_ERR_peek_error_line_data_ERR_peek_last_error_ERR_peek_last_error_line_ERR_peek_last_error_line_data_ERR_pop_to_mark_ERR_print_errors_ERR_print_errors_cb_ERR_print_errors_fp_ERR_put_error_ERR_reason_error_string_ERR_release_err_state_table_ERR_remove_state_ERR_remove_thread_state_ERR_set_error_data_ERR_set_implementation_ERR_set_mark_ERR_unload_strings_ESS_CERT_ID_dup_ESS_CERT_ID_free_ESS_CERT_ID_new_ESS_ISSUER_SERIAL_dup_ESS_ISSUER_SERIAL_free_ESS_ISSUER_SERIAL_new_ESS_SIGNING_CERT_dup_ESS_SIGNING_CERT_free_ESS_SIGNING_CERT_new_EVP_BytesToKey_EVP_CIPHER_CTX_block_size_EVP_CIPHER_CTX_cipher_EVP_CIPHER_CTX_cleanup_EVP_CIPHER_CTX_clear_flags_EVP_CIPHER_CTX_copy_EVP_CIPHER_CTX_ctrl_EVP_CIPHER_CTX_flags_EVP_CIPHER_CTX_free_EVP_CIPHER_CTX_get_app_data_EVP_CIPHER_CTX_init_EVP_CIPHER_CTX_iv_length_EVP_CIPHER_CTX_key_length_EVP_CIPHER_CTX_new_EVP_CIPHER_CTX_nid_EVP_CIPHER_CTX_rand_key_EVP_CIPHER_CTX_set_app_data_EVP_CIPHER_CTX_set_flags_EVP_CIPHER_CTX_set_key_length_EVP_CIPHER_CTX_set_padding_EVP_CIPHER_CTX_test_flags_EVP_CIPHER_asn1_to_param_EVP_CIPHER_block_size_EVP_CIPHER_do_all_EVP_CIPHER_do_all_sorted_EVP_CIPHER_flags_EVP_CIPHER_get_asn1_iv_EVP_CIPHER_iv_length_EVP_CIPHER_key_length_EVP_CIPHER_nid_EVP_CIPHER_param_to_asn1_EVP_CIPHER_set_asn1_iv_EVP_CIPHER_type_EVP_Cipher_EVP_CipherFinal_EVP_CipherFinal_ex_EVP_CipherInit_EVP_CipherInit_ex_EVP_CipherUpdate_EVP_DecodeBlock_EVP_DecodeFinal_EVP_DecodeInit_EVP_DecodeUpdate_EVP_DecryptFinal_EVP_DecryptFinal_ex_EVP_DecryptInit_EVP_DecryptInit_ex_EVP_DecryptUpdate_EVP_Digest_EVP_DigestFinal_EVP_DigestFinal_ex_EVP_DigestInit_EVP_DigestInit_ex_EVP_DigestSignFinal_EVP_DigestSignInit_EVP_DigestUpdate_EVP_DigestVerifyFinal_EVP_DigestVerifyInit_EVP_EncodeBlock_EVP_EncodeFinal_EVP_EncodeInit_EVP_EncodeUpdate_EVP_EncryptFinal_EVP_EncryptFinal_ex_EVP_EncryptInit_EVP_EncryptInit_ex_EVP_EncryptUpdate_EVP_MD_CTX_cleanup_EVP_MD_CTX_clear_flags_EVP_MD_CTX_copy_EVP_MD_CTX_copy_ex_EVP_MD_CTX_create_EVP_MD_CTX_destroy_EVP_MD_CTX_init_EVP_MD_CTX_md_EVP_MD_CTX_set_flags_EVP_MD_CTX_test_flags_EVP_MD_block_size_EVP_MD_do_all_EVP_MD_do_all_sorted_EVP_MD_flags_EVP_MD_pkey_type_EVP_MD_size_EVP_MD_type_EVP_OpenFinal_EVP_OpenInit_EVP_PBE_CipherInit_EVP_PBE_alg_add_EVP_PBE_alg_add_type_EVP_PBE_cleanup_EVP_PBE_find_EVP_PKCS82PKEY_EVP_PKEY2PKCS8_EVP_PKEY2PKCS8_broken_EVP_PKEY_CTX_ctrl_EVP_PKEY_CTX_ctrl_str_EVP_PKEY_CTX_dup_EVP_PKEY_CTX_free_EVP_PKEY_CTX_get0_peerkey_EVP_PKEY_CTX_get0_pkey_EVP_PKEY_CTX_get_app_data_EVP_PKEY_CTX_get_cb_EVP_PKEY_CTX_get_data_EVP_PKEY_CTX_get_keygen_info_EVP_PKEY_CTX_get_operation_EVP_PKEY_CTX_new_EVP_PKEY_CTX_new_id_EVP_PKEY_CTX_set0_keygen_info_EVP_PKEY_CTX_set_app_data_EVP_PKEY_CTX_set_cb_EVP_PKEY_CTX_set_data_EVP_PKEY_add1_attr_EVP_PKEY_add1_attr_by_NID_EVP_PKEY_add1_attr_by_OBJ_EVP_PKEY_add1_attr_by_txt_EVP_PKEY_asn1_add0_EVP_PKEY_asn1_add_alias_EVP_PKEY_asn1_copy_EVP_PKEY_asn1_find_EVP_PKEY_asn1_find_str_EVP_PKEY_asn1_free_EVP_PKEY_asn1_get0_EVP_PKEY_asn1_get0_info_EVP_PKEY_asn1_get_count_EVP_PKEY_asn1_new_EVP_PKEY_asn1_set_ctrl_EVP_PKEY_asn1_set_free_EVP_PKEY_asn1_set_item_EVP_PKEY_asn1_set_param_EVP_PKEY_asn1_set_private_EVP_PKEY_asn1_set_public_EVP_PKEY_assign_EVP_PKEY_base_id_EVP_PKEY_bits_EVP_PKEY_cmp_EVP_PKEY_cmp_parameters_EVP_PKEY_copy_parameters_EVP_PKEY_decrypt_EVP_PKEY_decrypt_init_EVP_PKEY_decrypt_old_EVP_PKEY_delete_attr_EVP_PKEY_derive_EVP_PKEY_derive_init_EVP_PKEY_derive_set_peer_EVP_PKEY_encrypt_EVP_PKEY_encrypt_init_EVP_PKEY_encrypt_old_EVP_PKEY_free_EVP_PKEY_get0_EVP_PKEY_get0_asn1_EVP_PKEY_get1_DH_EVP_PKEY_get1_DSA_EVP_PKEY_get1_EC_KEY_EVP_PKEY_get1_RSA_EVP_PKEY_get_attr_EVP_PKEY_get_attr_by_NID_EVP_PKEY_get_attr_by_OBJ_EVP_PKEY_get_attr_count_EVP_PKEY_get_default_digest_nid_EVP_PKEY_id_EVP_PKEY_keygen_EVP_PKEY_keygen_init_EVP_PKEY_meth_add0_EVP_PKEY_meth_copy_EVP_PKEY_meth_find_EVP_PKEY_meth_free_EVP_PKEY_meth_get0_info_EVP_PKEY_meth_new_EVP_PKEY_meth_set_cleanup_EVP_PKEY_meth_set_copy_EVP_PKEY_meth_set_ctrl_EVP_PKEY_meth_set_decrypt_EVP_PKEY_meth_set_derive_EVP_PKEY_meth_set_encrypt_EVP_PKEY_meth_set_init_EVP_PKEY_meth_set_keygen_EVP_PKEY_meth_set_paramgen_EVP_PKEY_meth_set_sign_EVP_PKEY_meth_set_signctx_EVP_PKEY_meth_set_verify_EVP_PKEY_meth_set_verify_recover_EVP_PKEY_meth_set_verifyctx_EVP_PKEY_missing_parameters_EVP_PKEY_new_EVP_PKEY_new_mac_key_EVP_PKEY_paramgen_EVP_PKEY_paramgen_init_EVP_PKEY_print_params_EVP_PKEY_print_private_EVP_PKEY_print_public_EVP_PKEY_save_parameters_EVP_PKEY_set1_DH_EVP_PKEY_set1_DSA_EVP_PKEY_set1_EC_KEY_EVP_PKEY_set1_RSA_EVP_PKEY_set_type_EVP_PKEY_set_type_str_EVP_PKEY_sign_EVP_PKEY_sign_init_EVP_PKEY_size_EVP_PKEY_type_EVP_PKEY_verify_EVP_PKEY_verify_init_EVP_PKEY_verify_recover_EVP_PKEY_verify_recover_init_EVP_SealFinal_EVP_SealInit_EVP_SignFinal_EVP_VerifyFinal_EVP_add_alg_module_EVP_add_cipher_EVP_add_digest_EVP_aes_128_cbc_EVP_aes_128_cbc_hmac_sha1_EVP_aes_128_cbc_hmac_sha256_EVP_aes_128_ccm_EVP_aes_128_cfb1_EVP_aes_128_cfb128_EVP_aes_128_cfb8_EVP_aes_128_ctr_EVP_aes_128_ecb_EVP_aes_128_gcm_EVP_aes_128_ofb_EVP_aes_128_wrap_EVP_aes_128_xts_EVP_aes_192_cbc_EVP_aes_192_ccm_EVP_aes_192_cfb1_EVP_aes_192_cfb128_EVP_aes_192_cfb8_EVP_aes_192_ctr_EVP_aes_192_ecb_EVP_aes_192_gcm_EVP_aes_192_ofb_EVP_aes_192_wrap_EVP_aes_256_cbc_EVP_aes_256_cbc_hmac_sha1_EVP_aes_256_cbc_hmac_sha256_EVP_aes_256_ccm_EVP_aes_256_cfb1_EVP_aes_256_cfb128_EVP_aes_256_cfb8_EVP_aes_256_ctr_EVP_aes_256_ecb_EVP_aes_256_gcm_EVP_aes_256_ofb_EVP_aes_256_wrap_EVP_aes_256_xts_EVP_bf_cbc_EVP_bf_cfb64_EVP_bf_ecb_EVP_bf_ofb_EVP_camellia_128_cbc_EVP_camellia_128_cfb1_EVP_camellia_128_cfb128_EVP_camellia_128_cfb8_EVP_camellia_128_ecb_EVP_camellia_128_ofb_EVP_camellia_192_cbc_EVP_camellia_192_cfb1_EVP_camellia_192_cfb128_EVP_camellia_192_cfb8_EVP_camellia_192_ecb_EVP_camellia_192_ofb_EVP_camellia_256_cbc_EVP_camellia_256_cfb1_EVP_camellia_256_cfb128_EVP_camellia_256_cfb8_EVP_camellia_256_ecb_EVP_camellia_256_ofb_EVP_cast5_cbc_EVP_cast5_cfb64_EVP_cast5_ecb_EVP_cast5_ofb_EVP_cleanup_EVP_des_cbc_EVP_des_cfb1_EVP_des_cfb64_EVP_des_cfb8_EVP_des_ecb_EVP_des_ede_EVP_des_ede3_EVP_des_ede3_cbc_EVP_des_ede3_cfb1_EVP_des_ede3_cfb64_EVP_des_ede3_cfb8_EVP_des_ede3_ecb_EVP_des_ede3_ofb_EVP_des_ede3_wrap_EVP_des_ede_cbc_EVP_des_ede_cfb64_EVP_des_ede_ecb_EVP_des_ede_ofb_EVP_des_ofb_EVP_desx_cbc_EVP_dss_EVP_dss1_EVP_ecdsa_EVP_enc_null_EVP_get_cipherbyname_EVP_get_digestbyname_EVP_get_pw_prompt_EVP_idea_cbc_EVP_idea_cfb64_EVP_idea_ecb_EVP_idea_ofb_EVP_md4_EVP_md5_EVP_md_null_EVP_mdc2_EVP_rc2_40_cbc_EVP_rc2_64_cbc_EVP_rc2_cbc_EVP_rc2_cfb64_EVP_rc2_ecb_EVP_rc2_ofb_EVP_rc4_EVP_rc4_40_EVP_rc4_hmac_md5_EVP_read_pw_string_EVP_read_pw_string_min_EVP_ripemd160_EVP_seed_cbc_EVP_seed_cfb128_EVP_seed_ecb_EVP_seed_ofb_EVP_set_pw_prompt_EVP_sha_EVP_sha1_EVP_sha224_EVP_sha256_EVP_sha384_EVP_sha512_EVP_whirlpool_EXTENDED_KEY_USAGE_free_EXTENDED_KEY_USAGE_it_EXTENDED_KEY_USAGE_new_FIPS_mode_FIPS_mode_set_GENERAL_NAMES_free_GENERAL_NAMES_it_GENERAL_NAMES_new_GENERAL_NAME_cmp_GENERAL_NAME_dup_GENERAL_NAME_free_GENERAL_NAME_get0_otherName_GENERAL_NAME_get0_value_GENERAL_NAME_it_GENERAL_NAME_new_GENERAL_NAME_print_GENERAL_NAME_set0_othername_GENERAL_NAME_set0_value_GENERAL_SUBTREE_free_GENERAL_SUBTREE_it_GENERAL_SUBTREE_new_HMAC_HMAC_CTX_cleanup_HMAC_CTX_copy_HMAC_CTX_init_HMAC_CTX_set_flags_HMAC_Final_HMAC_Init_HMAC_Init_ex_HMAC_Update_ISSUING_DIST_POINT_free_ISSUING_DIST_POINT_it_ISSUING_DIST_POINT_new_KRB5_APREQBODY_free_KRB5_APREQBODY_it_KRB5_APREQBODY_new_KRB5_APREQ_free_KRB5_APREQ_it_KRB5_APREQ_new_KRB5_AUTHDATA_free_KRB5_AUTHDATA_it_KRB5_AUTHDATA_new_KRB5_AUTHENTBODY_free_KRB5_AUTHENTBODY_it_KRB5_AUTHENTBODY_new_KRB5_AUTHENT_free_KRB5_AUTHENT_it_KRB5_AUTHENT_new_KRB5_CHECKSUM_free_KRB5_CHECKSUM_it_KRB5_CHECKSUM_new_KRB5_ENCDATA_free_KRB5_ENCDATA_it_KRB5_ENCDATA_new_KRB5_ENCKEY_free_KRB5_ENCKEY_it_KRB5_ENCKEY_new_KRB5_PRINCNAME_free_KRB5_PRINCNAME_it_KRB5_PRINCNAME_new_KRB5_TICKET_free_KRB5_TICKET_it_KRB5_TICKET_new_KRB5_TKTBODY_free_KRB5_TKTBODY_it_KRB5_TKTBODY_new_LONG_it_MD4_MD4_Final_MD4_Init_MD4_Transform_MD4_Update_MD5_MD5_Final_MD5_Init_MD5_Transform_MD5_Update_MDC2_MDC2_Final_MDC2_Init_MDC2_Update_NAME_CONSTRAINTS_check_NAME_CONSTRAINTS_free_NAME_CONSTRAINTS_it_NAME_CONSTRAINTS_new_NCONF_WIN32_NCONF_default_NCONF_dump_bio_NCONF_dump_fp_NCONF_free_NCONF_free_data_NCONF_get_number_e_NCONF_get_section_NCONF_get_string_NCONF_load_NCONF_load_bio_NCONF_load_fp_NCONF_new_NETSCAPE_CERT_SEQUENCE_free_NETSCAPE_CERT_SEQUENCE_it_NETSCAPE_CERT_SEQUENCE_new_NETSCAPE_SPKAC_free_NETSCAPE_SPKAC_it_NETSCAPE_SPKAC_new_NETSCAPE_SPKI_b64_decode_NETSCAPE_SPKI_b64_encode_NETSCAPE_SPKI_free_NETSCAPE_SPKI_get_pubkey_NETSCAPE_SPKI_it_NETSCAPE_SPKI_new_NETSCAPE_SPKI_print_NETSCAPE_SPKI_set_pubkey_NETSCAPE_SPKI_sign_NETSCAPE_SPKI_verify_NETSCAPE_X509_free_NETSCAPE_X509_it_NETSCAPE_X509_new_NOTICEREF_free_NOTICEREF_it_NOTICEREF_new_OBJ_NAME_add_OBJ_NAME_cleanup_OBJ_NAME_do_all_OBJ_NAME_do_all_sorted_OBJ_NAME_get_OBJ_NAME_init_OBJ_NAME_new_index_OBJ_NAME_remove_OBJ_add_object_OBJ_add_sigid_OBJ_bsearch__OBJ_bsearch_ex__OBJ_cleanup_OBJ_cmp_OBJ_create_OBJ_create_objects_OBJ_dup_OBJ_find_sigid_algs_OBJ_find_sigid_by_algs_OBJ_ln2nid_OBJ_new_nid_OBJ_nid2ln_OBJ_nid2obj_OBJ_nid2sn_OBJ_obj2nid_OBJ_obj2txt_OBJ_sigid_free_OBJ_sn2nid_OBJ_txt2nid_OBJ_txt2obj_OCSP_BASICRESP_add1_ext_i2d_OCSP_BASICRESP_add_ext_OCSP_BASICRESP_delete_ext_OCSP_BASICRESP_free_OCSP_BASICRESP_get1_ext_d2i_OCSP_BASICRESP_get_ext_OCSP_BASICRESP_get_ext_by_NID_OCSP_BASICRESP_get_ext_by_OBJ_OCSP_BASICRESP_get_ext_by_critical_OCSP_BASICRESP_get_ext_count_OCSP_BASICRESP_it_OCSP_BASICRESP_new_OCSP_CERTID_dup_OCSP_CERTID_free_OCSP_CERTID_it_OCSP_CERTID_new_OCSP_CERTSTATUS_free_OCSP_CERTSTATUS_it_OCSP_CERTSTATUS_new_OCSP_CRLID_free_OCSP_CRLID_it_OCSP_CRLID_new_OCSP_ONEREQ_add1_ext_i2d_OCSP_ONEREQ_add_ext_OCSP_ONEREQ_delete_ext_OCSP_ONEREQ_free_OCSP_ONEREQ_get1_ext_d2i_OCSP_ONEREQ_get_ext_OCSP_ONEREQ_get_ext_by_NID_OCSP_ONEREQ_get_ext_by_OBJ_OCSP_ONEREQ_get_ext_by_critical_OCSP_ONEREQ_get_ext_count_OCSP_ONEREQ_it_OCSP_ONEREQ_new_OCSP_REQINFO_free_OCSP_REQINFO_it_OCSP_REQINFO_new_OCSP_REQUEST_add1_ext_i2d_OCSP_REQUEST_add_ext_OCSP_REQUEST_delete_ext_OCSP_REQUEST_free_OCSP_REQUEST_get1_ext_d2i_OCSP_REQUEST_get_ext_OCSP_REQUEST_get_ext_by_NID_OCSP_REQUEST_get_ext_by_OBJ_OCSP_REQUEST_get_ext_by_critical_OCSP_REQUEST_get_ext_count_OCSP_REQUEST_it_OCSP_REQUEST_new_OCSP_REQUEST_print_OCSP_REQ_CTX_add1_header_OCSP_REQ_CTX_free_OCSP_REQ_CTX_get0_mem_bio_OCSP_REQ_CTX_http_OCSP_REQ_CTX_i2d_OCSP_REQ_CTX_nbio_OCSP_REQ_CTX_nbio_d2i_OCSP_REQ_CTX_new_OCSP_REQ_CTX_set1_req_OCSP_RESPBYTES_free_OCSP_RESPBYTES_it_OCSP_RESPBYTES_new_OCSP_RESPDATA_free_OCSP_RESPDATA_it_OCSP_RESPDATA_new_OCSP_RESPID_free_OCSP_RESPID_it_OCSP_RESPID_new_OCSP_RESPONSE_free_OCSP_RESPONSE_it_OCSP_RESPONSE_new_OCSP_RESPONSE_print_OCSP_REVOKEDINFO_free_OCSP_REVOKEDINFO_it_OCSP_REVOKEDINFO_new_OCSP_SERVICELOC_free_OCSP_SERVICELOC_it_OCSP_SERVICELOC_new_OCSP_SIGNATURE_free_OCSP_SIGNATURE_it_OCSP_SIGNATURE_new_OCSP_SINGLERESP_add1_ext_i2d_OCSP_SINGLERESP_add_ext_OCSP_SINGLERESP_delete_ext_OCSP_SINGLERESP_free_OCSP_SINGLERESP_get1_ext_d2i_OCSP_SINGLERESP_get_ext_OCSP_SINGLERESP_get_ext_by_NID_OCSP_SINGLERESP_get_ext_by_OBJ_OCSP_SINGLERESP_get_ext_by_critical_OCSP_SINGLERESP_get_ext_count_OCSP_SINGLERESP_it_OCSP_SINGLERESP_new_OCSP_accept_responses_new_OCSP_archive_cutoff_new_OCSP_basic_add1_cert_OCSP_basic_add1_nonce_OCSP_basic_add1_status_OCSP_basic_sign_OCSP_basic_verify_OCSP_cert_id_new_OCSP_cert_status_str_OCSP_cert_to_id_OCSP_check_nonce_OCSP_check_validity_OCSP_copy_nonce_OCSP_crlID_new_OCSP_crl_reason_str_OCSP_id_cmp_OCSP_id_get0_info_OCSP_id_issuer_cmp_OCSP_onereq_get0_id_OCSP_parse_url_OCSP_request_add0_id_OCSP_request_add1_cert_OCSP_request_add1_nonce_OCSP_request_is_signed_OCSP_request_onereq_count_OCSP_request_onereq_get0_OCSP_request_set1_name_OCSP_request_sign_OCSP_request_verify_OCSP_resp_count_OCSP_resp_find_OCSP_resp_find_status_OCSP_resp_get0_OCSP_response_create_OCSP_response_get1_basic_OCSP_response_status_OCSP_response_status_str_OCSP_sendreq_bio_OCSP_sendreq_nbio_OCSP_sendreq_new_OCSP_set_max_response_length_OCSP_single_get0_status_OCSP_url_svcloc_new_OPENSSL_DIR_end_OPENSSL_DIR_read_OPENSSL_add_all_algorithms_conf_OPENSSL_add_all_algorithms_noconf_OPENSSL_asc2uni_OPENSSL_cleanse_OPENSSL_config_OPENSSL_cpuid_setup_OPENSSL_gmtime_OPENSSL_gmtime_adj_OPENSSL_gmtime_diff_OPENSSL_ia32cap_loc_OPENSSL_init_OPENSSL_isservice_OPENSSL_issetugid_OPENSSL_load_builtin_modules_OPENSSL_memcmp_OPENSSL_no_config_OPENSSL_showfatal_OPENSSL_stderr_OPENSSL_strcasecmp_OPENSSL_strncasecmp_OPENSSL_uni2asc_OTHERNAME_cmp_OTHERNAME_free_OTHERNAME_it_OTHERNAME_new_OpenSSLDie_OpenSSL_add_all_ciphers_OpenSSL_add_all_digests_PBE2PARAM_free_PBE2PARAM_it_PBE2PARAM_new_PBEPARAM_free_PBEPARAM_it_PBEPARAM_new_PBKDF2PARAM_free_PBKDF2PARAM_it_PBKDF2PARAM_new_PEM_ASN1_read_PEM_ASN1_read_bio_PEM_ASN1_write_PEM_ASN1_write_bio_PEM_SealFinal_PEM_SealInit_PEM_SealUpdate_PEM_SignFinal_PEM_SignInit_PEM_SignUpdate_PEM_X509_INFO_read_PEM_X509_INFO_read_bio_PEM_X509_INFO_write_bio_PEM_bytes_read_bio_PEM_def_callback_PEM_dek_info_PEM_do_header_PEM_get_EVP_CIPHER_INFO_PEM_proc_type_PEM_read_PEM_read_CMS_PEM_read_DHparams_PEM_read_DSAPrivateKey_PEM_read_DSA_PUBKEY_PEM_read_DSAparams_PEM_read_ECPKParameters_PEM_read_ECPrivateKey_PEM_read_EC_PUBKEY_PEM_read_NETSCAPE_CERT_SEQUENCE_PEM_read_PKCS7_PEM_read_PKCS8_PEM_read_PKCS8_PRIV_KEY_INFO_PEM_read_PUBKEY_PEM_read_PrivateKey_PEM_read_RSAPrivateKey_PEM_read_RSAPublicKey_PEM_read_RSA_PUBKEY_PEM_read_X509_PEM_read_X509_AUX_PEM_read_X509_CERT_PAIR_PEM_read_X509_CRL_PEM_read_X509_REQ_PEM_read_bio_PEM_read_bio_CMS_PEM_read_bio_DHparams_PEM_read_bio_DSAPrivateKey_PEM_read_bio_DSA_PUBKEY_PEM_read_bio_DSAparams_PEM_read_bio_ECPKParameters_PEM_read_bio_ECPrivateKey_PEM_read_bio_EC_PUBKEY_PEM_read_bio_NETSCAPE_CERT_SEQUENCE_PEM_read_bio_PKCS7_PEM_read_bio_PKCS8_PEM_read_bio_PKCS8_PRIV_KEY_INFO_PEM_read_bio_PUBKEY_PEM_read_bio_Parameters_PEM_read_bio_PrivateKey_PEM_read_bio_RSAPrivateKey_PEM_read_bio_RSAPublicKey_PEM_read_bio_RSA_PUBKEY_PEM_read_bio_X509_PEM_read_bio_X509_AUX_PEM_read_bio_X509_CERT_PAIR_PEM_read_bio_X509_CRL_PEM_read_bio_X509_REQ_PEM_write_PEM_write_CMS_PEM_write_DHparams_PEM_write_DHxparams_PEM_write_DSAPrivateKey_PEM_write_DSA_PUBKEY_PEM_write_DSAparams_PEM_write_ECPKParameters_PEM_write_ECPrivateKey_PEM_write_EC_PUBKEY_PEM_write_NETSCAPE_CERT_SEQUENCE_PEM_write_PKCS7_PEM_write_PKCS8_PEM_write_PKCS8PrivateKey_PEM_write_PKCS8PrivateKey_nid_PEM_write_PKCS8_PRIV_KEY_INFO_PEM_write_PUBKEY_PEM_write_PrivateKey_PEM_write_RSAPrivateKey_PEM_write_RSAPublicKey_PEM_write_RSA_PUBKEY_PEM_write_X509_PEM_write_X509_AUX_PEM_write_X509_CERT_PAIR_PEM_write_X509_CRL_PEM_write_X509_REQ_PEM_write_X509_REQ_NEW_PEM_write_bio_PEM_write_bio_ASN1_stream_PEM_write_bio_CMS_PEM_write_bio_CMS_stream_PEM_write_bio_DHparams_PEM_write_bio_DHxparams_PEM_write_bio_DSAPrivateKey_PEM_write_bio_DSA_PUBKEY_PEM_write_bio_DSAparams_PEM_write_bio_ECPKParameters_PEM_write_bio_ECPrivateKey_PEM_write_bio_EC_PUBKEY_PEM_write_bio_NETSCAPE_CERT_SEQUENCE_PEM_write_bio_PKCS7_PEM_write_bio_PKCS7_stream_PEM_write_bio_PKCS8_PEM_write_bio_PKCS8PrivateKey_PEM_write_bio_PKCS8PrivateKey_nid_PEM_write_bio_PKCS8_PRIV_KEY_INFO_PEM_write_bio_PUBKEY_PEM_write_bio_Parameters_PEM_write_bio_PrivateKey_PEM_write_bio_RSAPrivateKey_PEM_write_bio_RSAPublicKey_PEM_write_bio_RSA_PUBKEY_PEM_write_bio_X509_PEM_write_bio_X509_AUX_PEM_write_bio_X509_CERT_PAIR_PEM_write_bio_X509_CRL_PEM_write_bio_X509_REQ_PEM_write_bio_X509_REQ_NEW_PKCS12_AUTHSAFES_it_PKCS12_BAGS_free_PKCS12_BAGS_it_PKCS12_BAGS_new_PKCS12_MAC_DATA_free_PKCS12_MAC_DATA_it_PKCS12_MAC_DATA_new_PKCS12_MAKE_KEYBAG_PKCS12_MAKE_SHKEYBAG_PKCS12_PBE_add_PKCS12_PBE_keyivgen_PKCS12_SAFEBAGS_it_PKCS12_SAFEBAG_free_PKCS12_SAFEBAG_it_PKCS12_SAFEBAG_new_PKCS12_add_CSPName_asc_PKCS12_add_cert_PKCS12_add_friendlyname_asc_PKCS12_add_friendlyname_uni_PKCS12_add_key_PKCS12_add_localkeyid_PKCS12_add_safe_PKCS12_add_safes_PKCS12_certbag2x509_PKCS12_certbag2x509crl_PKCS12_create_PKCS12_decrypt_skey_PKCS12_free_PKCS12_gen_mac_PKCS12_get_attr_gen_PKCS12_get_friendlyname_PKCS12_init_PKCS12_it_PKCS12_item_decrypt_d2i_PKCS12_item_i2d_encrypt_PKCS12_item_pack_safebag_PKCS12_key_gen_asc_PKCS12_key_gen_uni_PKCS12_new_PKCS12_newpass_PKCS12_pack_authsafes_PKCS12_pack_p7data_PKCS12_pack_p7encdata_PKCS12_parse_PKCS12_pbe_crypt_PKCS12_set_mac_PKCS12_setup_mac_PKCS12_unpack_authsafes_PKCS12_unpack_p7data_PKCS12_unpack_p7encdata_PKCS12_verify_mac_PKCS12_x5092certbag_PKCS12_x509crl2certbag_PKCS1_MGF1_PKCS5_PBE_add_PKCS5_PBE_keyivgen_PKCS5_PBKDF2_HMAC_PKCS5_PBKDF2_HMAC_SHA1_PKCS5_pbe2_set_PKCS5_pbe2_set_iv_PKCS5_pbe_set_PKCS5_pbe_set0_algor_PKCS5_pbkdf2_set_PKCS5_v2_PBE_keyivgen_PKCS7_ATTR_SIGN_it_PKCS7_ATTR_VERIFY_it_PKCS7_DIGEST_free_PKCS7_DIGEST_it_PKCS7_DIGEST_new_PKCS7_ENCRYPT_free_PKCS7_ENCRYPT_it_PKCS7_ENCRYPT_new_PKCS7_ENC_CONTENT_free_PKCS7_ENC_CONTENT_it_PKCS7_ENC_CONTENT_new_PKCS7_ENVELOPE_free_PKCS7_ENVELOPE_it_PKCS7_ENVELOPE_new_PKCS7_ISSUER_AND_SERIAL_digest_PKCS7_ISSUER_AND_SERIAL_free_PKCS7_ISSUER_AND_SERIAL_it_PKCS7_ISSUER_AND_SERIAL_new_PKCS7_RECIP_INFO_free_PKCS7_RECIP_INFO_get0_alg_PKCS7_RECIP_INFO_it_PKCS7_RECIP_INFO_new_PKCS7_RECIP_INFO_set_PKCS7_SIGNED_free_PKCS7_SIGNED_it_PKCS7_SIGNED_new_PKCS7_SIGNER_INFO_free_PKCS7_SIGNER_INFO_get0_algs_PKCS7_SIGNER_INFO_it_PKCS7_SIGNER_INFO_new_PKCS7_SIGNER_INFO_set_PKCS7_SIGNER_INFO_sign_PKCS7_SIGN_ENVELOPE_free_PKCS7_SIGN_ENVELOPE_it_PKCS7_SIGN_ENVELOPE_new_PKCS7_add0_attrib_signing_time_PKCS7_add1_attrib_digest_PKCS7_add_attrib_content_type_PKCS7_add_attrib_smimecap_PKCS7_add_attribute_PKCS7_add_certificate_PKCS7_add_crl_PKCS7_add_recipient_PKCS7_add_recipient_info_PKCS7_add_signature_PKCS7_add_signed_attribute_PKCS7_add_signer_PKCS7_cert_from_signer_info_PKCS7_content_new_PKCS7_ctrl_PKCS7_dataDecode_PKCS7_dataFinal_PKCS7_dataInit_PKCS7_dataVerify_PKCS7_decrypt_PKCS7_digest_from_attributes_PKCS7_dup_PKCS7_encrypt_PKCS7_final_PKCS7_free_PKCS7_get0_signers_PKCS7_get_attribute_PKCS7_get_issuer_and_serial_PKCS7_get_signed_attribute_PKCS7_get_signer_info_PKCS7_get_smimecap_PKCS7_it_PKCS7_new_PKCS7_print_ctx_PKCS7_set0_type_other_PKCS7_set_attributes_PKCS7_set_cipher_PKCS7_set_content_PKCS7_set_digest_PKCS7_set_signed_attributes_PKCS7_set_type_PKCS7_sign_PKCS7_sign_add_signer_PKCS7_signatureVerify_PKCS7_simple_smimecap_PKCS7_stream_PKCS7_to_TS_TST_INFO_PKCS7_verify_PKCS8_PRIV_KEY_INFO_free_PKCS8_PRIV_KEY_INFO_it_PKCS8_PRIV_KEY_INFO_new_PKCS8_add_keyusage_PKCS8_decrypt_PKCS8_encrypt_PKCS8_pkey_get0_PKCS8_pkey_set0_PKCS8_set_broken_PKEY_USAGE_PERIOD_free_PKEY_USAGE_PERIOD_it_PKEY_USAGE_PERIOD_new_POLICYINFO_free_POLICYINFO_it_POLICYINFO_new_POLICYQUALINFO_free_POLICYQUALINFO_it_POLICYQUALINFO_new_POLICY_CONSTRAINTS_free_POLICY_CONSTRAINTS_it_POLICY_CONSTRAINTS_new_POLICY_MAPPINGS_it_POLICY_MAPPING_free_POLICY_MAPPING_it_POLICY_MAPPING_new_PROXY_CERT_INFO_EXTENSION_free_PROXY_CERT_INFO_EXTENSION_it_PROXY_CERT_INFO_EXTENSION_new_PROXY_POLICY_free_PROXY_POLICY_it_PROXY_POLICY_new_RAND_SSLeay_RAND_add_RAND_bytes_RAND_cleanup_RAND_egd_RAND_egd_bytes_RAND_event_RAND_file_name_RAND_get_rand_method_RAND_load_file_RAND_poll_RAND_pseudo_bytes_RAND_query_egd_bytes_RAND_screen_RAND_seed_RAND_set_rand_engine_RAND_set_rand_method_RAND_status_RAND_write_file_RC2_cbc_encrypt_RC2_cfb64_encrypt_RC2_decrypt_RC2_ecb_encrypt_RC2_encrypt_RC2_ofb64_encrypt_RC2_set_key_RC4_RC4_options_RC4_set_key_RIPEMD160_RIPEMD160_Final_RIPEMD160_Init_RIPEMD160_Transform_RIPEMD160_Update_RSAPrivateKey_dup_RSAPrivateKey_it_RSAPublicKey_dup_RSAPublicKey_it_RSA_OAEP_PARAMS_free_RSA_OAEP_PARAMS_it_RSA_OAEP_PARAMS_new_RSA_PKCS1_SSLeay_RSA_PSS_PARAMS_free_RSA_PSS_PARAMS_it_RSA_PSS_PARAMS_new_RSA_X931_hash_id_RSA_blinding_off_RSA_blinding_on_RSA_check_key_RSA_flags_RSA_free_RSA_generate_key_RSA_generate_key_ex_RSA_get_default_method_RSA_get_ex_data_RSA_get_ex_new_index_RSA_get_method_RSA_memory_lock_RSA_new_RSA_new_method_RSA_null_method_RSA_padding_add_PKCS1_OAEP_RSA_padding_add_PKCS1_OAEP_mgf1_RSA_padding_add_PKCS1_PSS_RSA_padding_add_PKCS1_PSS_mgf1_RSA_padding_add_PKCS1_type_1_RSA_padding_add_PKCS1_type_2_RSA_padding_add_SSLv23_RSA_padding_add_X931_RSA_padding_add_none_RSA_padding_check_PKCS1_OAEP_RSA_padding_check_PKCS1_OAEP_mgf1_RSA_padding_check_PKCS1_type_1_RSA_padding_check_PKCS1_type_2_RSA_padding_check_SSLv23_RSA_padding_check_X931_RSA_padding_check_none_RSA_print_RSA_print_fp_RSA_private_decrypt_RSA_private_encrypt_RSA_public_decrypt_RSA_public_encrypt_RSA_set_default_method_RSA_set_ex_data_RSA_set_method_RSA_setup_blinding_RSA_sign_RSA_sign_ASN1_OCTET_STRING_RSA_size_RSA_up_ref_RSA_verify_RSA_verify_ASN1_OCTET_STRING_RSA_verify_PKCS1_PSS_RSA_verify_PKCS1_PSS_mgf1_SEED_cbc_encrypt_SEED_cfb128_encrypt_SEED_decrypt_SEED_ecb_encrypt_SEED_encrypt_SEED_ofb128_encrypt_SEED_set_key_SHA_SHA1_SHA1_Final_SHA1_Init_SHA1_Transform_SHA1_Update_SHA224_SHA224_Final_SHA224_Init_SHA224_Update_SHA256_SHA256_Final_SHA256_Init_SHA256_Transform_SHA256_Update_SHA384_SHA384_Final_SHA384_Init_SHA384_Update_SHA512_SHA512_Final_SHA512_Init_SHA512_Transform_SHA512_Update_SHA_Final_SHA_Init_SHA_Transform_SHA_Update_SMIME_crlf_copy_SMIME_read_ASN1_SMIME_read_CMS_SMIME_read_PKCS7_SMIME_text_SMIME_write_ASN1_SMIME_write_CMS_SMIME_write_PKCS7_SRP_Calc_A_SRP_Calc_B_SRP_Calc_client_key_SRP_Calc_server_key_SRP_Calc_u_SRP_Calc_x_SRP_VBASE_free_SRP_VBASE_get1_by_user_SRP_VBASE_get_by_user_SRP_VBASE_init_SRP_VBASE_new_SRP_Verify_A_mod_N_SRP_Verify_B_mod_N_SRP_check_known_gN_param_SRP_create_verifier_SRP_create_verifier_BN_SRP_get_default_gN_SRP_user_pwd_free_SSLeay_SSLeay_version_SXNETID_free_SXNETID_it_SXNETID_new_SXNET_add_id_INTEGER_SXNET_add_id_asc_SXNET_add_id_ulong_SXNET_free_SXNET_get_id_INTEGER_SXNET_get_id_asc_SXNET_get_id_ulong_SXNET_it_SXNET_new_TS_ACCURACY_dup_TS_ACCURACY_free_TS_ACCURACY_get_micros_TS_ACCURACY_get_millis_TS_ACCURACY_get_seconds_TS_ACCURACY_new_TS_ACCURACY_set_micros_TS_ACCURACY_set_millis_TS_ACCURACY_set_seconds_TS_ASN1_INTEGER_print_bio_TS_CONF_get_tsa_section_TS_CONF_load_cert_TS_CONF_load_certs_TS_CONF_load_key_TS_CONF_set_accuracy_TS_CONF_set_certs_TS_CONF_set_clock_precision_digits_TS_CONF_set_crypto_device_TS_CONF_set_def_policy_TS_CONF_set_default_engine_TS_CONF_set_digests_TS_CONF_set_ess_cert_id_chain_TS_CONF_set_ordering_TS_CONF_set_policies_TS_CONF_set_serial_TS_CONF_set_signer_cert_TS_CONF_set_signer_key_TS_CONF_set_tsa_name_TS_MSG_IMPRINT_dup_TS_MSG_IMPRINT_free_TS_MSG_IMPRINT_get_algo_TS_MSG_IMPRINT_get_msg_TS_MSG_IMPRINT_new_TS_MSG_IMPRINT_print_bio_TS_MSG_IMPRINT_set_algo_TS_MSG_IMPRINT_set_msg_TS_OBJ_print_bio_TS_REQ_add_ext_TS_REQ_delete_ext_TS_REQ_dup_TS_REQ_ext_free_TS_REQ_free_TS_REQ_get_cert_req_TS_REQ_get_ext_TS_REQ_get_ext_by_NID_TS_REQ_get_ext_by_OBJ_TS_REQ_get_ext_by_critical_TS_REQ_get_ext_count_TS_REQ_get_ext_d2i_TS_REQ_get_exts_TS_REQ_get_msg_imprint_TS_REQ_get_nonce_TS_REQ_get_policy_id_TS_REQ_get_version_TS_REQ_new_TS_REQ_print_bio_TS_REQ_set_cert_req_TS_REQ_set_msg_imprint_TS_REQ_set_nonce_TS_REQ_set_policy_id_TS_REQ_set_version_TS_REQ_to_TS_VERIFY_CTX_TS_RESP_CTX_add_failure_info_TS_RESP_CTX_add_flags_TS_RESP_CTX_add_md_TS_RESP_CTX_add_policy_TS_RESP_CTX_free_TS_RESP_CTX_get_request_TS_RESP_CTX_get_tst_info_TS_RESP_CTX_new_TS_RESP_CTX_set_accuracy_TS_RESP_CTX_set_certs_TS_RESP_CTX_set_clock_precision_digits_TS_RESP_CTX_set_def_policy_TS_RESP_CTX_set_extension_cb_TS_RESP_CTX_set_serial_cb_TS_RESP_CTX_set_signer_cert_TS_RESP_CTX_set_signer_key_TS_RESP_CTX_set_status_info_TS_RESP_CTX_set_status_info_cond_TS_RESP_CTX_set_time_cb_TS_RESP_create_response_TS_RESP_dup_TS_RESP_free_TS_RESP_get_status_info_TS_RESP_get_token_TS_RESP_get_tst_info_TS_RESP_new_TS_RESP_print_bio_TS_RESP_set_status_info_TS_RESP_set_tst_info_TS_RESP_verify_response_TS_RESP_verify_signature_TS_RESP_verify_token_TS_STATUS_INFO_dup_TS_STATUS_INFO_free_TS_STATUS_INFO_new_TS_STATUS_INFO_print_bio_TS_TST_INFO_add_ext_TS_TST_INFO_delete_ext_TS_TST_INFO_dup_TS_TST_INFO_ext_free_TS_TST_INFO_free_TS_TST_INFO_get_accuracy_TS_TST_INFO_get_ext_TS_TST_INFO_get_ext_by_NID_TS_TST_INFO_get_ext_by_OBJ_TS_TST_INFO_get_ext_by_critical_TS_TST_INFO_get_ext_count_TS_TST_INFO_get_ext_d2i_TS_TST_INFO_get_exts_TS_TST_INFO_get_msg_imprint_TS_TST_INFO_get_nonce_TS_TST_INFO_get_ordering_TS_TST_INFO_get_policy_id_TS_TST_INFO_get_serial_TS_TST_INFO_get_time_TS_TST_INFO_get_tsa_TS_TST_INFO_get_version_TS_TST_INFO_new_TS_TST_INFO_print_bio_TS_TST_INFO_set_accuracy_TS_TST_INFO_set_msg_imprint_TS_TST_INFO_set_nonce_TS_TST_INFO_set_ordering_TS_TST_INFO_set_policy_id_TS_TST_INFO_set_serial_TS_TST_INFO_set_time_TS_TST_INFO_set_tsa_TS_TST_INFO_set_version_TS_VERIFY_CTX_cleanup_TS_VERIFY_CTX_free_TS_VERIFY_CTX_init_TS_VERIFY_CTX_new_TS_X509_ALGOR_print_bio_TS_ext_print_bio_TXT_DB_create_index_TXT_DB_free_TXT_DB_get_by_index_TXT_DB_insert_TXT_DB_read_TXT_DB_write_UI_OpenSSL_UI_UTIL_read_pw_UI_UTIL_read_pw_string_UI_add_error_string_UI_add_info_string_UI_add_input_boolean_UI_add_input_string_UI_add_user_data_UI_add_verify_string_UI_construct_prompt_UI_create_method_UI_ctrl_UI_destroy_method_UI_dup_error_string_UI_dup_info_string_UI_dup_input_boolean_UI_dup_input_string_UI_dup_verify_string_UI_free_UI_get0_action_string_UI_get0_output_string_UI_get0_result_UI_get0_result_string_UI_get0_test_string_UI_get0_user_data_UI_get_default_method_UI_get_ex_data_UI_get_ex_new_index_UI_get_input_flags_UI_get_method_UI_get_result_maxsize_UI_get_result_minsize_UI_get_string_type_UI_method_get_closer_UI_method_get_flusher_UI_method_get_opener_UI_method_get_prompt_constructor_UI_method_get_reader_UI_method_get_writer_UI_method_set_closer_UI_method_set_flusher_UI_method_set_opener_UI_method_set_prompt_constructor_UI_method_set_reader_UI_method_set_writer_UI_new_UI_new_method_UI_process_UI_set_default_method_UI_set_ex_data_UI_set_method_UI_set_result_USERNOTICE_free_USERNOTICE_it_USERNOTICE_new_UTF8_getc_UTF8_putc_WHIRLPOOL_WHIRLPOOL_BitUpdate_WHIRLPOOL_Final_WHIRLPOOL_Init_WHIRLPOOL_Update_X509V3_EXT_CRL_add_conf_X509V3_EXT_CRL_add_nconf_X509V3_EXT_REQ_add_conf_X509V3_EXT_REQ_add_nconf_X509V3_EXT_add_X509V3_EXT_add_alias_X509V3_EXT_add_conf_X509V3_EXT_add_list_X509V3_EXT_add_nconf_X509V3_EXT_add_nconf_sk_X509V3_EXT_cleanup_X509V3_EXT_conf_X509V3_EXT_conf_nid_X509V3_EXT_d2i_X509V3_EXT_free_X509V3_EXT_get_X509V3_EXT_get_nid_X509V3_EXT_i2d_X509V3_EXT_nconf_X509V3_EXT_nconf_nid_X509V3_EXT_print_X509V3_EXT_print_fp_X509V3_EXT_val_prn_X509V3_NAME_from_section_X509V3_add1_i2d_X509V3_add_standard_extensions_X509V3_add_value_X509V3_add_value_bool_X509V3_add_value_bool_nf_X509V3_add_value_int_X509V3_add_value_uchar_X509V3_conf_free_X509V3_extensions_print_X509V3_get_d2i_X509V3_get_section_X509V3_get_string_X509V3_get_value_bool_X509V3_get_value_int_X509V3_parse_list_X509V3_section_free_X509V3_set_conf_lhash_X509V3_set_ctx_X509V3_set_nconf_X509V3_string_free_X509_ALGORS_it_X509_ALGOR_cmp_X509_ALGOR_dup_X509_ALGOR_free_X509_ALGOR_get0_X509_ALGOR_it_X509_ALGOR_new_X509_ALGOR_set0_X509_ALGOR_set_md_X509_ATTRIBUTE_count_X509_ATTRIBUTE_create_X509_ATTRIBUTE_create_by_NID_X509_ATTRIBUTE_create_by_OBJ_X509_ATTRIBUTE_create_by_txt_X509_ATTRIBUTE_dup_X509_ATTRIBUTE_free_X509_ATTRIBUTE_get0_data_X509_ATTRIBUTE_get0_object_X509_ATTRIBUTE_get0_type_X509_ATTRIBUTE_it_X509_ATTRIBUTE_new_X509_ATTRIBUTE_set1_data_X509_ATTRIBUTE_set1_object_X509_CERT_AUX_free_X509_CERT_AUX_it_X509_CERT_AUX_new_X509_CERT_AUX_print_X509_CERT_PAIR_free_X509_CERT_PAIR_it_X509_CERT_PAIR_new_X509_CINF_free_X509_CINF_it_X509_CINF_new_X509_CRL_INFO_free_X509_CRL_INFO_it_X509_CRL_INFO_new_X509_CRL_METHOD_free_X509_CRL_METHOD_new_X509_CRL_add0_revoked_X509_CRL_add1_ext_i2d_X509_CRL_add_ext_X509_CRL_check_suiteb_X509_CRL_cmp_X509_CRL_delete_ext_X509_CRL_diff_X509_CRL_digest_X509_CRL_dup_X509_CRL_free_X509_CRL_get0_by_cert_X509_CRL_get0_by_serial_X509_CRL_get_ext_X509_CRL_get_ext_by_NID_X509_CRL_get_ext_by_OBJ_X509_CRL_get_ext_by_critical_X509_CRL_get_ext_count_X509_CRL_get_ext_d2i_X509_CRL_get_meth_data_X509_CRL_http_nbio_X509_CRL_it_X509_CRL_match_X509_CRL_new_X509_CRL_print_X509_CRL_print_fp_X509_CRL_set_default_method_X509_CRL_set_issuer_name_X509_CRL_set_lastUpdate_X509_CRL_set_meth_data_X509_CRL_set_nextUpdate_X509_CRL_set_version_X509_CRL_sign_X509_CRL_sign_ctx_X509_CRL_sort_X509_CRL_verify_X509_EXTENSIONS_it_X509_EXTENSION_create_by_NID_X509_EXTENSION_create_by_OBJ_X509_EXTENSION_dup_X509_EXTENSION_free_X509_EXTENSION_get_critical_X509_EXTENSION_get_data_X509_EXTENSION_get_object_X509_EXTENSION_it_X509_EXTENSION_new_X509_EXTENSION_set_critical_X509_EXTENSION_set_data_X509_EXTENSION_set_object_X509_INFO_free_X509_INFO_new_X509_LOOKUP_by_alias_X509_LOOKUP_by_fingerprint_X509_LOOKUP_by_issuer_serial_X509_LOOKUP_by_subject_X509_LOOKUP_ctrl_X509_LOOKUP_file_X509_LOOKUP_free_X509_LOOKUP_hash_dir_X509_LOOKUP_init_X509_LOOKUP_new_X509_LOOKUP_shutdown_X509_NAME_ENTRY_create_by_NID_X509_NAME_ENTRY_create_by_OBJ_X509_NAME_ENTRY_create_by_txt_X509_NAME_ENTRY_dup_X509_NAME_ENTRY_free_X509_NAME_ENTRY_get_data_X509_NAME_ENTRY_get_object_X509_NAME_ENTRY_it_X509_NAME_ENTRY_new_X509_NAME_ENTRY_set_data_X509_NAME_ENTRY_set_object_X509_NAME_add_entry_X509_NAME_add_entry_by_NID_X509_NAME_add_entry_by_OBJ_X509_NAME_add_entry_by_txt_X509_NAME_cmp_X509_NAME_delete_entry_X509_NAME_digest_X509_NAME_dup_X509_NAME_entry_count_X509_NAME_free_X509_NAME_get_entry_X509_NAME_get_index_by_NID_X509_NAME_get_index_by_OBJ_X509_NAME_get_text_by_NID_X509_NAME_get_text_by_OBJ_X509_NAME_hash_X509_NAME_hash_old_X509_NAME_it_X509_NAME_new_X509_NAME_oneline_X509_NAME_print_X509_NAME_print_ex_X509_NAME_print_ex_fp_X509_NAME_set_X509_OBJECT_free_contents_X509_OBJECT_idx_by_subject_X509_OBJECT_retrieve_by_subject_X509_OBJECT_retrieve_match_X509_OBJECT_up_ref_count_X509_PKEY_free_X509_PKEY_new_X509_POLICY_NODE_print_X509_PUBKEY_free_X509_PUBKEY_get_X509_PUBKEY_get0_param_X509_PUBKEY_it_X509_PUBKEY_new_X509_PUBKEY_set_X509_PUBKEY_set0_param_X509_PURPOSE_add_X509_PURPOSE_cleanup_X509_PURPOSE_get0_X509_PURPOSE_get0_name_X509_PURPOSE_get0_sname_X509_PURPOSE_get_by_id_X509_PURPOSE_get_by_sname_X509_PURPOSE_get_count_X509_PURPOSE_get_id_X509_PURPOSE_get_trust_X509_PURPOSE_set_X509_REQ_INFO_free_X509_REQ_INFO_it_X509_REQ_INFO_new_X509_REQ_add1_attr_X509_REQ_add1_attr_by_NID_X509_REQ_add1_attr_by_OBJ_X509_REQ_add1_attr_by_txt_X509_REQ_add_extensions_X509_REQ_add_extensions_nid_X509_REQ_check_private_key_X509_REQ_delete_attr_X509_REQ_digest_X509_REQ_dup_X509_REQ_extension_nid_X509_REQ_free_X509_REQ_get1_email_X509_REQ_get_attr_X509_REQ_get_attr_by_NID_X509_REQ_get_attr_by_OBJ_X509_REQ_get_attr_count_X509_REQ_get_extension_nids_X509_REQ_get_extensions_X509_REQ_get_pubkey_X509_REQ_it_X509_REQ_new_X509_REQ_print_X509_REQ_print_ex_X509_REQ_print_fp_X509_REQ_set_extension_nids_X509_REQ_set_pubkey_X509_REQ_set_subject_name_X509_REQ_set_version_X509_REQ_sign_X509_REQ_sign_ctx_X509_REQ_to_X509_X509_REQ_verify_X509_REVOKED_add1_ext_i2d_X509_REVOKED_add_ext_X509_REVOKED_delete_ext_X509_REVOKED_dup_X509_REVOKED_free_X509_REVOKED_get_ext_X509_REVOKED_get_ext_by_NID_X509_REVOKED_get_ext_by_OBJ_X509_REVOKED_get_ext_by_critical_X509_REVOKED_get_ext_count_X509_REVOKED_get_ext_d2i_X509_REVOKED_it_X509_REVOKED_new_X509_REVOKED_set_revocationDate_X509_REVOKED_set_serialNumber_X509_SIG_free_X509_SIG_it_X509_SIG_new_X509_STORE_CTX_cleanup_X509_STORE_CTX_free_X509_STORE_CTX_get0_current_crl_X509_STORE_CTX_get0_current_issuer_X509_STORE_CTX_get0_param_X509_STORE_CTX_get0_parent_ctx_X509_STORE_CTX_get0_policy_tree_X509_STORE_CTX_get0_store_X509_STORE_CTX_get1_chain_X509_STORE_CTX_get1_issuer_X509_STORE_CTX_get_chain_X509_STORE_CTX_get_current_cert_X509_STORE_CTX_get_error_X509_STORE_CTX_get_error_depth_X509_STORE_CTX_get_ex_data_X509_STORE_CTX_get_ex_new_index_X509_STORE_CTX_get_explicit_policy_X509_STORE_CTX_init_X509_STORE_CTX_new_X509_STORE_CTX_purpose_inherit_X509_STORE_CTX_set0_crls_X509_STORE_CTX_set0_param_X509_STORE_CTX_set_cert_X509_STORE_CTX_set_chain_X509_STORE_CTX_set_default_X509_STORE_CTX_set_depth_X509_STORE_CTX_set_error_X509_STORE_CTX_set_ex_data_X509_STORE_CTX_set_flags_X509_STORE_CTX_set_purpose_X509_STORE_CTX_set_time_X509_STORE_CTX_set_trust_X509_STORE_CTX_set_verify_cb_X509_STORE_CTX_trusted_stack_X509_STORE_add_cert_X509_STORE_add_crl_X509_STORE_add_lookup_X509_STORE_free_X509_STORE_get1_certs_X509_STORE_get1_crls_X509_STORE_get_by_subject_X509_STORE_load_locations_X509_STORE_new_X509_STORE_set1_param_X509_STORE_set_default_paths_X509_STORE_set_depth_X509_STORE_set_flags_X509_STORE_set_lookup_crls_cb_X509_STORE_set_purpose_X509_STORE_set_trust_X509_STORE_set_verify_cb_X509_TRUST_add_X509_TRUST_cleanup_X509_TRUST_get0_X509_TRUST_get0_name_X509_TRUST_get_by_id_X509_TRUST_get_count_X509_TRUST_get_flags_X509_TRUST_get_trust_X509_TRUST_set_X509_TRUST_set_default_X509_VAL_free_X509_VAL_it_X509_VAL_new_X509_VERIFY_PARAM_add0_policy_X509_VERIFY_PARAM_add0_table_X509_VERIFY_PARAM_add1_host_X509_VERIFY_PARAM_clear_flags_X509_VERIFY_PARAM_free_X509_VERIFY_PARAM_get0_X509_VERIFY_PARAM_get0_name_X509_VERIFY_PARAM_get0_peername_X509_VERIFY_PARAM_get_count_X509_VERIFY_PARAM_get_depth_X509_VERIFY_PARAM_get_flags_X509_VERIFY_PARAM_inherit_X509_VERIFY_PARAM_lookup_X509_VERIFY_PARAM_new_X509_VERIFY_PARAM_set1_X509_VERIFY_PARAM_set1_email_X509_VERIFY_PARAM_set1_host_X509_VERIFY_PARAM_set1_ip_X509_VERIFY_PARAM_set1_ip_asc_X509_VERIFY_PARAM_set1_name_X509_VERIFY_PARAM_set1_policies_X509_VERIFY_PARAM_set_depth_X509_VERIFY_PARAM_set_flags_X509_VERIFY_PARAM_set_hostflags_X509_VERIFY_PARAM_set_purpose_X509_VERIFY_PARAM_set_time_X509_VERIFY_PARAM_set_trust_X509_VERIFY_PARAM_table_cleanup_X509_add1_ext_i2d_X509_add1_reject_object_X509_add1_trust_object_X509_add_ext_X509_alias_get0_X509_alias_set1_X509_certificate_type_X509_chain_check_suiteb_X509_chain_up_ref_X509_check_akid_X509_check_ca_X509_check_email_X509_check_host_X509_check_ip_X509_check_ip_asc_X509_check_issued_X509_check_private_key_X509_check_purpose_X509_check_trust_X509_cmp_X509_cmp_current_time_X509_cmp_time_X509_delete_ext_X509_digest_X509_dup_X509_email_free_X509_find_by_issuer_and_serial_X509_find_by_subject_X509_free_X509_get0_pubkey_bitstr_X509_get0_signature_X509_get1_email_X509_get1_ocsp_X509_get_default_cert_area_X509_get_default_cert_dir_X509_get_default_cert_dir_env_X509_get_default_cert_file_X509_get_default_cert_file_env_X509_get_default_private_dir_X509_get_ex_data_X509_get_ex_new_index_X509_get_ext_X509_get_ext_by_NID_X509_get_ext_by_OBJ_X509_get_ext_by_critical_X509_get_ext_count_X509_get_ext_d2i_X509_get_issuer_name_X509_get_pubkey_X509_get_pubkey_parameters_X509_get_serialNumber_X509_get_signature_nid_X509_get_subject_name_X509_gmtime_adj_X509_http_nbio_X509_issuer_and_serial_cmp_X509_issuer_and_serial_hash_X509_issuer_name_cmp_X509_issuer_name_hash_X509_issuer_name_hash_old_X509_it_X509_keyid_get0_X509_keyid_set1_X509_load_cert_crl_file_X509_load_cert_file_X509_load_crl_file_X509_new_X509_ocspid_print_X509_policy_check_X509_policy_level_get0_node_X509_policy_level_node_count_X509_policy_node_get0_parent_X509_policy_node_get0_policy_X509_policy_node_get0_qualifiers_X509_policy_tree_free_X509_policy_tree_get0_level_X509_policy_tree_get0_policies_X509_policy_tree_get0_user_policies_X509_policy_tree_level_count_X509_print_X509_print_ex_X509_print_ex_fp_X509_print_fp_X509_pubkey_digest_X509_reject_clear_X509_set_ex_data_X509_set_issuer_name_X509_set_notAfter_X509_set_notBefore_X509_set_pubkey_X509_set_serialNumber_X509_set_subject_name_X509_set_version_X509_sign_X509_sign_ctx_X509_signature_dump_X509_signature_print_X509_subject_name_cmp_X509_subject_name_hash_X509_subject_name_hash_old_X509_supported_extension_X509_time_adj_X509_time_adj_ex_X509_to_X509_REQ_X509_trust_clear_X509_verify_X509_verify_cert_X509_verify_cert_error_string_X509at_add1_attr_X509at_add1_attr_by_NID_X509at_add1_attr_by_OBJ_X509at_add1_attr_by_txt_X509at_delete_attr_X509at_get0_data_by_OBJ_X509at_get_attr_X509at_get_attr_by_NID_X509at_get_attr_by_OBJ_X509at_get_attr_count_X509v3_add_ext_X509v3_delete_ext_X509v3_get_ext_X509v3_get_ext_by_NID_X509v3_get_ext_by_OBJ_X509v3_get_ext_by_critical_X509v3_get_ext_count_ZLONG_it__IMPORT_DESCRIPTOR_LIBEAY32__NULL_IMPORT_DESCRIPTOR__imp__ACCESS_DESCRIPTION_free__imp__ACCESS_DESCRIPTION_it__imp__ACCESS_DESCRIPTION_new__imp__AES_bi_ige_encrypt__imp__AES_cbc_encrypt__imp__AES_cfb128_encrypt__imp__AES_cfb1_encrypt__imp__AES_cfb8_encrypt__imp__AES_ctr128_encrypt__imp__AES_decrypt__imp__AES_ecb_encrypt__imp__AES_encrypt__imp__AES_ige_encrypt__imp__AES_ofb128_encrypt__imp__AES_options__imp__AES_set_decrypt_key__imp__AES_set_encrypt_key__imp__AES_unwrap_key__imp__AES_wrap_key__imp__ASN1_ANY_it__imp__ASN1_BIT_STRING_check__imp__ASN1_BIT_STRING_free__imp__ASN1_BIT_STRING_get_bit__imp__ASN1_BIT_STRING_it__imp__ASN1_BIT_STRING_name_print__imp__ASN1_BIT_STRING_new__imp__ASN1_BIT_STRING_num_asc__imp__ASN1_BIT_STRING_set__imp__ASN1_BIT_STRING_set_asc__imp__ASN1_BIT_STRING_set_bit__imp__ASN1_BMPSTRING_free__imp__ASN1_BMPSTRING_it__imp__ASN1_BMPSTRING_new__imp__ASN1_BOOLEAN_it__imp__ASN1_ENUMERATED_free__imp__ASN1_ENUMERATED_get__imp__ASN1_ENUMERATED_it__imp__ASN1_ENUMERATED_new__imp__ASN1_ENUMERATED_set__imp__ASN1_ENUMERATED_to_BN__imp__ASN1_FBOOLEAN_it__imp__ASN1_GENERALIZEDTIME_adj__imp__ASN1_GENERALIZEDTIME_check__imp__ASN1_GENERALIZEDTIME_free__imp__ASN1_GENERALIZEDTIME_it__imp__ASN1_GENERALIZEDTIME_new__imp__ASN1_GENERALIZEDTIME_print__imp__ASN1_GENERALIZEDTIME_set__imp__ASN1_GENERALIZEDTIME_set_string__imp__ASN1_GENERALSTRING_free__imp__ASN1_GENERALSTRING_it__imp__ASN1_GENERALSTRING_new__imp__ASN1_IA5STRING_free__imp__ASN1_IA5STRING_it__imp__ASN1_IA5STRING_new__imp__ASN1_INTEGER_cmp__imp__ASN1_INTEGER_dup__imp__ASN1_INTEGER_free__imp__ASN1_INTEGER_get__imp__ASN1_INTEGER_it__imp__ASN1_INTEGER_new__imp__ASN1_INTEGER_set__imp__ASN1_INTEGER_to_BN__imp__ASN1_NULL_free__imp__ASN1_NULL_it__imp__ASN1_NULL_new__imp__ASN1_OBJECT_create__imp__ASN1_OBJECT_free__imp__ASN1_OBJECT_it__imp__ASN1_OBJECT_new__imp__ASN1_OCTET_STRING_NDEF_it__imp__ASN1_OCTET_STRING_cmp__imp__ASN1_OCTET_STRING_dup__imp__ASN1_OCTET_STRING_free__imp__ASN1_OCTET_STRING_it__imp__ASN1_OCTET_STRING_new__imp__ASN1_OCTET_STRING_set__imp__ASN1_PCTX_free__imp__ASN1_PCTX_get_cert_flags__imp__ASN1_PCTX_get_flags__imp__ASN1_PCTX_get_nm_flags__imp__ASN1_PCTX_get_oid_flags__imp__ASN1_PCTX_get_str_flags__imp__ASN1_PCTX_new__imp__ASN1_PCTX_set_cert_flags__imp__ASN1_PCTX_set_flags__imp__ASN1_PCTX_set_nm_flags__imp__ASN1_PCTX_set_oid_flags__imp__ASN1_PCTX_set_str_flags__imp__ASN1_PRINTABLESTRING_free__imp__ASN1_PRINTABLESTRING_it__imp__ASN1_PRINTABLESTRING_new__imp__ASN1_PRINTABLE_free__imp__ASN1_PRINTABLE_it__imp__ASN1_PRINTABLE_new__imp__ASN1_PRINTABLE_type__imp__ASN1_SEQUENCE_ANY_it__imp__ASN1_SEQUENCE_it__imp__ASN1_SET_ANY_it__imp__ASN1_STRING_TABLE_add__imp__ASN1_STRING_TABLE_cleanup__imp__ASN1_STRING_TABLE_get__imp__ASN1_STRING_clear_free__imp__ASN1_STRING_cmp__imp__ASN1_STRING_copy__imp__ASN1_STRING_data__imp__ASN1_STRING_dup__imp__ASN1_STRING_free__imp__ASN1_STRING_get_default_mask__imp__ASN1_STRING_length__imp__ASN1_STRING_length_set__imp__ASN1_STRING_new__imp__ASN1_STRING_print__imp__ASN1_STRING_print_ex__imp__ASN1_STRING_print_ex_fp__imp__ASN1_STRING_set__imp__ASN1_STRING_set0__imp__ASN1_STRING_set_by_NID__imp__ASN1_STRING_set_default_mask__imp__ASN1_STRING_set_default_mask_asc__imp__ASN1_STRING_to_UTF8__imp__ASN1_STRING_type__imp__ASN1_STRING_type_new__imp__ASN1_T61STRING_free__imp__ASN1_T61STRING_it__imp__ASN1_T61STRING_new__imp__ASN1_TBOOLEAN_it__imp__ASN1_TIME_adj__imp__ASN1_TIME_check__imp__ASN1_TIME_diff__imp__ASN1_TIME_free__imp__ASN1_TIME_it__imp__ASN1_TIME_new__imp__ASN1_TIME_print__imp__ASN1_TIME_set__imp__ASN1_TIME_set_string__imp__ASN1_TIME_to_generalizedtime__imp__ASN1_TYPE_cmp__imp__ASN1_TYPE_free__imp__ASN1_TYPE_get__imp__ASN1_TYPE_get_int_octetstring__imp__ASN1_TYPE_get_octetstring__imp__ASN1_TYPE_new__imp__ASN1_TYPE_set__imp__ASN1_TYPE_set1__imp__ASN1_TYPE_set_int_octetstring__imp__ASN1_TYPE_set_octetstring__imp__ASN1_UNIVERSALSTRING_free__imp__ASN1_UNIVERSALSTRING_it__imp__ASN1_UNIVERSALSTRING_new__imp__ASN1_UNIVERSALSTRING_to_string__imp__ASN1_UTCTIME_adj__imp__ASN1_UTCTIME_check__imp__ASN1_UTCTIME_cmp_time_t__imp__ASN1_UTCTIME_free__imp__ASN1_UTCTIME_it__imp__ASN1_UTCTIME_new__imp__ASN1_UTCTIME_print__imp__ASN1_UTCTIME_set__imp__ASN1_UTCTIME_set_string__imp__ASN1_UTF8STRING_free__imp__ASN1_UTF8STRING_it__imp__ASN1_UTF8STRING_new__imp__ASN1_VISIBLESTRING_free__imp__ASN1_VISIBLESTRING_it__imp__ASN1_VISIBLESTRING_new__imp__ASN1_add_oid_module__imp__ASN1_bn_print__imp__ASN1_check_infinite_end__imp__ASN1_const_check_infinite_end__imp__ASN1_d2i_bio__imp__ASN1_d2i_fp__imp__ASN1_digest__imp__ASN1_dup__imp__ASN1_generate_nconf__imp__ASN1_generate_v3__imp__ASN1_get_object__imp__ASN1_i2d_bio__imp__ASN1_i2d_fp__imp__ASN1_item_d2i__imp__ASN1_item_d2i_bio__imp__ASN1_item_d2i_fp__imp__ASN1_item_digest__imp__ASN1_item_dup__imp__ASN1_item_ex_d2i__imp__ASN1_item_ex_free__imp__ASN1_item_ex_i2d__imp__ASN1_item_ex_new__imp__ASN1_item_free__imp__ASN1_item_i2d__imp__ASN1_item_i2d_bio__imp__ASN1_item_i2d_fp__imp__ASN1_item_ndef_i2d__imp__ASN1_item_new__imp__ASN1_item_pack__imp__ASN1_item_print__imp__ASN1_item_sign__imp__ASN1_item_sign_ctx__imp__ASN1_item_unpack__imp__ASN1_item_verify__imp__ASN1_mbstring_copy__imp__ASN1_mbstring_ncopy__imp__ASN1_object_size__imp__ASN1_pack_string__imp__ASN1_parse__imp__ASN1_parse_dump__imp__ASN1_primitive_free__imp__ASN1_primitive_new__imp__ASN1_put_eoc__imp__ASN1_put_object__imp__ASN1_seq_pack__imp__ASN1_seq_unpack__imp__ASN1_sign__imp__ASN1_tag2bit__imp__ASN1_tag2str__imp__ASN1_template_d2i__imp__ASN1_template_free__imp__ASN1_template_i2d__imp__ASN1_template_new__imp__ASN1_unpack_string__imp__ASN1_verify__imp__AUTHORITY_INFO_ACCESS_free__imp__AUTHORITY_INFO_ACCESS_it__imp__AUTHORITY_INFO_ACCESS_new__imp__AUTHORITY_KEYID_free__imp__AUTHORITY_KEYID_it__imp__AUTHORITY_KEYID_new__imp__BASIC_CONSTRAINTS_free__imp__BASIC_CONSTRAINTS_it__imp__BASIC_CONSTRAINTS_new__imp__BF_cbc_encrypt__imp__BF_cfb64_encrypt__imp__BF_decrypt__imp__BF_ecb_encrypt__imp__BF_encrypt__imp__BF_ofb64_encrypt__imp__BF_options__imp__BF_set_key__imp__BIGNUM_it__imp__BIO_accept__imp__BIO_asn1_get_prefix__imp__BIO_asn1_get_suffix__imp__BIO_asn1_set_prefix__imp__BIO_asn1_set_suffix__imp__BIO_callback_ctrl__imp__BIO_clear_flags__imp__BIO_copy_next_retry__imp__BIO_ctrl__imp__BIO_ctrl_get_read_request__imp__BIO_ctrl_get_write_guarantee__imp__BIO_ctrl_pending__imp__BIO_ctrl_reset_read_request__imp__BIO_ctrl_wpending__imp__BIO_debug_callback__imp__BIO_dgram_non_fatal_error__imp__BIO_dump__imp__BIO_dump_cb__imp__BIO_dump_fp__imp__BIO_dump_indent__imp__BIO_dump_indent_cb__imp__BIO_dump_indent_fp__imp__BIO_dup_chain__imp__BIO_f_asn1__imp__BIO_f_base64__imp__BIO_f_buffer__imp__BIO_f_cipher__imp__BIO_f_md__imp__BIO_f_nbio_test__imp__BIO_f_null__imp__BIO_f_reliable__imp__BIO_fd_non_fatal_error__imp__BIO_fd_should_retry__imp__BIO_find_type__imp__BIO_free__imp__BIO_free_all__imp__BIO_get_accept_socket__imp__BIO_get_callback__imp__BIO_get_callback_arg__imp__BIO_get_ex_data__imp__BIO_get_ex_new_index__imp__BIO_get_host_ip__imp__BIO_get_port__imp__BIO_get_retry_BIO__imp__BIO_get_retry_reason__imp__BIO_gethostbyname__imp__BIO_gets__imp__BIO_hex_string__imp__BIO_indent__imp__BIO_int_ctrl__imp__BIO_method_name__imp__BIO_method_type__imp__BIO_new__imp__BIO_new_CMS__imp__BIO_new_NDEF__imp__BIO_new_PKCS7__imp__BIO_new_accept__imp__BIO_new_bio_pair__imp__BIO_new_connect__imp__BIO_new_dgram__imp__BIO_new_fd__imp__BIO_new_file__imp__BIO_new_fp__imp__BIO_new_mem_buf__imp__BIO_new_socket__imp__BIO_next__imp__BIO_nread__imp__BIO_nread0__imp__BIO_number_read__imp__BIO_number_written__imp__BIO_nwrite__imp__BIO_nwrite0__imp__BIO_pop__imp__BIO_printf__imp__BIO_ptr_ctrl__imp__BIO_push__imp__BIO_puts__imp__BIO_read__imp__BIO_s_accept__imp__BIO_s_bio__imp__BIO_s_connect__imp__BIO_s_datagram__imp__BIO_s_fd__imp__BIO_s_file__imp__BIO_s_mem__imp__BIO_s_null__imp__BIO_s_socket__imp__BIO_set__imp__BIO_set_callback__imp__BIO_set_callback_arg__imp__BIO_set_cipher__imp__BIO_set_ex_data__imp__BIO_set_flags__imp__BIO_set_tcp_ndelay__imp__BIO_snprintf__imp__BIO_sock_cleanup__imp__BIO_sock_error__imp__BIO_sock_init__imp__BIO_sock_non_fatal_error__imp__BIO_sock_should_retry__imp__BIO_socket_ioctl__imp__BIO_socket_nbio__imp__BIO_test_flags__imp__BIO_vfree__imp__BIO_vprintf__imp__BIO_vsnprintf__imp__BIO_write__imp__BN_BLINDING_convert__imp__BN_BLINDING_convert_ex__imp__BN_BLINDING_create_param__imp__BN_BLINDING_free__imp__BN_BLINDING_get_flags__imp__BN_BLINDING_get_thread_id__imp__BN_BLINDING_invert__imp__BN_BLINDING_invert_ex__imp__BN_BLINDING_new__imp__BN_BLINDING_set_flags__imp__BN_BLINDING_set_thread_id__imp__BN_BLINDING_thread_id__imp__BN_BLINDING_update__imp__BN_CTX_end__imp__BN_CTX_free__imp__BN_CTX_get__imp__BN_CTX_init__imp__BN_CTX_new__imp__BN_CTX_start__imp__BN_GENCB_call__imp__BN_GF2m_add__imp__BN_GF2m_arr2poly__imp__BN_GF2m_mod__imp__BN_GF2m_mod_arr__imp__BN_GF2m_mod_div__imp__BN_GF2m_mod_div_arr__imp__BN_GF2m_mod_exp__imp__BN_GF2m_mod_exp_arr__imp__BN_GF2m_mod_inv__imp__BN_GF2m_mod_inv_arr__imp__BN_GF2m_mod_mul__imp__BN_GF2m_mod_mul_arr__imp__BN_GF2m_mod_solve_quad__imp__BN_GF2m_mod_solve_quad_arr__imp__BN_GF2m_mod_sqr__imp__BN_GF2m_mod_sqr_arr__imp__BN_GF2m_mod_sqrt__imp__BN_GF2m_mod_sqrt_arr__imp__BN_GF2m_poly2arr__imp__BN_MONT_CTX_copy__imp__BN_MONT_CTX_free__imp__BN_MONT_CTX_init__imp__BN_MONT_CTX_new__imp__BN_MONT_CTX_set__imp__BN_MONT_CTX_set_locked__imp__BN_RECP_CTX_free__imp__BN_RECP_CTX_init__imp__BN_RECP_CTX_new__imp__BN_RECP_CTX_set__imp__BN_X931_derive_prime_ex__imp__BN_X931_generate_Xpq__imp__BN_X931_generate_prime_ex__imp__BN_add__imp__BN_add_word__imp__BN_asc2bn__imp__BN_bin2bn__imp__BN_bn2bin__imp__BN_bn2dec__imp__BN_bn2hex__imp__BN_bn2mpi__imp__BN_bntest_rand__imp__BN_clear__imp__BN_clear_bit__imp__BN_clear_free__imp__BN_cmp__imp__BN_consttime_swap__imp__BN_copy__imp__BN_dec2bn__imp__BN_div__imp__BN_div_recp__imp__BN_div_word__imp__BN_dup__imp__BN_exp__imp__BN_free__imp__BN_from_montgomery__imp__BN_gcd__imp__BN_generate_prime__imp__BN_generate_prime_ex__imp__BN_get0_nist_prime_192__imp__BN_get0_nist_prime_224__imp__BN_get0_nist_prime_256__imp__BN_get0_nist_prime_384__imp__BN_get0_nist_prime_521__imp__BN_get_params__imp__BN_get_word__imp__BN_hex2bn__imp__BN_init__imp__BN_is_bit_set__imp__BN_is_prime__imp__BN_is_prime_ex__imp__BN_is_prime_fasttest__imp__BN_is_prime_fasttest_ex__imp__BN_kronecker__imp__BN_lshift__imp__BN_lshift1__imp__BN_mask_bits__imp__BN_mod_add__imp__BN_mod_add_quick__imp__BN_mod_exp__imp__BN_mod_exp2_mont__imp__BN_mod_exp_mont__imp__BN_mod_exp_mont_consttime__imp__BN_mod_exp_mont_word__imp__BN_mod_exp_recp__imp__BN_mod_exp_simple__imp__BN_mod_inverse__imp__BN_mod_lshift__imp__BN_mod_lshift1__imp__BN_mod_lshift1_quick__imp__BN_mod_lshift_quick__imp__BN_mod_mul__imp__BN_mod_mul_montgomery__imp__BN_mod_mul_reciprocal__imp__BN_mod_sqr__imp__BN_mod_sqrt__imp__BN_mod_sub__imp__BN_mod_sub_quick__imp__BN_mod_word__imp__BN_mpi2bn__imp__BN_mul__imp__BN_mul_word__imp__BN_new__imp__BN_nist_mod_192__imp__BN_nist_mod_224__imp__BN_nist_mod_256__imp__BN_nist_mod_384__imp__BN_nist_mod_521__imp__BN_nnmod__imp__BN_num_bits__imp__BN_num_bits_word__imp__BN_options__imp__BN_print__imp__BN_print_fp__imp__BN_pseudo_rand__imp__BN_pseudo_rand_range__imp__BN_rand__imp__BN_rand_range__imp__BN_reciprocal__imp__BN_rshift__imp__BN_rshift1__imp__BN_set_bit__imp__BN_set_negative__imp__BN_set_params__imp__BN_set_word__imp__BN_sqr__imp__BN_sub__imp__BN_sub_word__imp__BN_swap__imp__BN_to_ASN1_ENUMERATED__imp__BN_to_ASN1_INTEGER__imp__BN_uadd__imp__BN_ucmp__imp__BN_usub__imp__BN_value_one__imp__BUF_MEM_free__imp__BUF_MEM_grow__imp__BUF_MEM_grow_clean__imp__BUF_MEM_new__imp__BUF_memdup__imp__BUF_reverse__imp__BUF_strdup__imp__BUF_strlcat__imp__BUF_strlcpy__imp__BUF_strndup__imp__BUF_strnlen__imp__CAST_cbc_encrypt__imp__CAST_cfb64_encrypt__imp__CAST_decrypt__imp__CAST_ecb_encrypt__imp__CAST_encrypt__imp__CAST_ofb64_encrypt__imp__CAST_set_key__imp__CBIGNUM_it__imp__CERTIFICATEPOLICIES_free__imp__CERTIFICATEPOLICIES_it__imp__CERTIFICATEPOLICIES_new__imp__CMAC_CTX_cleanup__imp__CMAC_CTX_copy__imp__CMAC_CTX_free__imp__CMAC_CTX_get0_cipher_ctx__imp__CMAC_CTX_new__imp__CMAC_Final__imp__CMAC_Init__imp__CMAC_Update__imp__CMAC_resume__imp__CMS_ContentInfo_free__imp__CMS_ContentInfo_it__imp__CMS_ContentInfo_new__imp__CMS_ContentInfo_print_ctx__imp__CMS_EncryptedData_decrypt__imp__CMS_EncryptedData_encrypt__imp__CMS_EncryptedData_set1_key__imp__CMS_EnvelopedData_create__imp__CMS_ReceiptRequest_create0__imp__CMS_ReceiptRequest_free__imp__CMS_ReceiptRequest_get0_values__imp__CMS_ReceiptRequest_it__imp__CMS_ReceiptRequest_new__imp__CMS_RecipientEncryptedKey_cert_cmp__imp__CMS_RecipientEncryptedKey_get0_id__imp__CMS_RecipientInfo_decrypt__imp__CMS_RecipientInfo_encrypt__imp__CMS_RecipientInfo_get0_pkey_ctx__imp__CMS_RecipientInfo_kari_decrypt__imp__CMS_RecipientInfo_kari_get0_alg__imp__CMS_RecipientInfo_kari_get0_ctx__imp__CMS_RecipientInfo_kari_get0_orig_id__imp__CMS_RecipientInfo_kari_get0_reks__imp__CMS_RecipientInfo_kari_orig_id_cmp__imp__CMS_RecipientInfo_kari_set0_pkey__imp__CMS_RecipientInfo_kekri_get0_id__imp__CMS_RecipientInfo_kekri_id_cmp__imp__CMS_RecipientInfo_ktri_cert_cmp__imp__CMS_RecipientInfo_ktri_get0_algs__imp__CMS_RecipientInfo_ktri_get0_signer_id__imp__CMS_RecipientInfo_set0_key__imp__CMS_RecipientInfo_set0_password__imp__CMS_RecipientInfo_set0_pkey__imp__CMS_RecipientInfo_type__imp__CMS_SharedInfo_encode__imp__CMS_SignedData_init__imp__CMS_SignerInfo_cert_cmp__imp__CMS_SignerInfo_get0_algs__imp__CMS_SignerInfo_get0_md_ctx__imp__CMS_SignerInfo_get0_pkey_ctx__imp__CMS_SignerInfo_get0_signature__imp__CMS_SignerInfo_get0_signer_id__imp__CMS_SignerInfo_set1_signer_cert__imp__CMS_SignerInfo_sign__imp__CMS_SignerInfo_verify__imp__CMS_SignerInfo_verify_content__imp__CMS_add0_CertificateChoices__imp__CMS_add0_RevocationInfoChoice__imp__CMS_add0_cert__imp__CMS_add0_crl__imp__CMS_add0_recipient_key__imp__CMS_add0_recipient_password__imp__CMS_add1_ReceiptRequest__imp__CMS_add1_cert__imp__CMS_add1_crl__imp__CMS_add1_recipient_cert__imp__CMS_add1_signer__imp__CMS_add_simple_smimecap__imp__CMS_add_smimecap__imp__CMS_add_standard_smimecap__imp__CMS_compress__imp__CMS_data__imp__CMS_dataFinal__imp__CMS_dataInit__imp__CMS_data_create__imp__CMS_decrypt__imp__CMS_decrypt_set1_key__imp__CMS_decrypt_set1_password__imp__CMS_decrypt_set1_pkey__imp__CMS_digest_create__imp__CMS_digest_verify__imp__CMS_encrypt__imp__CMS_final__imp__CMS_get0_RecipientInfos__imp__CMS_get0_SignerInfos__imp__CMS_get0_content__imp__CMS_get0_eContentType__imp__CMS_get0_signers__imp__CMS_get0_type__imp__CMS_get1_ReceiptRequest__imp__CMS_get1_certs__imp__CMS_get1_crls__imp__CMS_is_detached__imp__CMS_set1_eContentType__imp__CMS_set1_signers_certs__imp__CMS_set_detached__imp__CMS_sign__imp__CMS_sign_receipt__imp__CMS_signed_add1_attr__imp__CMS_signed_add1_attr_by_NID__imp__CMS_signed_add1_attr_by_OBJ__imp__CMS_signed_add1_attr_by_txt__imp__CMS_signed_delete_attr__imp__CMS_signed_get0_data_by_OBJ__imp__CMS_signed_get_attr__imp__CMS_signed_get_attr_by_NID__imp__CMS_signed_get_attr_by_OBJ__imp__CMS_signed_get_attr_count__imp__CMS_stream__imp__CMS_uncompress__imp__CMS_unsigned_add1_attr__imp__CMS_unsigned_add1_attr_by_NID__imp__CMS_unsigned_add1_attr_by_OBJ__imp__CMS_unsigned_add1_attr_by_txt__imp__CMS_unsigned_delete_attr__imp__CMS_unsigned_get0_data_by_OBJ__imp__CMS_unsigned_get_attr__imp__CMS_unsigned_get_attr_by_NID__imp__CMS_unsigned_get_attr_by_OBJ__imp__CMS_unsigned_get_attr_count__imp__CMS_verify__imp__CMS_verify_receipt__imp__COMP_CTX_free__imp__COMP_CTX_new__imp__COMP_compress_block__imp__COMP_expand_block__imp__COMP_rle__imp__COMP_zlib__imp__COMP_zlib_cleanup__imp__CONF_dump_bio__imp__CONF_dump_fp__imp__CONF_free__imp__CONF_get1_default_config_file__imp__CONF_get_number__imp__CONF_get_section__imp__CONF_get_string__imp__CONF_imodule_get_flags__imp__CONF_imodule_get_module__imp__CONF_imodule_get_name__imp__CONF_imodule_get_usr_data__imp__CONF_imodule_get_value__imp__CONF_imodule_set_flags__imp__CONF_imodule_set_usr_data__imp__CONF_load__imp__CONF_load_bio__imp__CONF_load_fp__imp__CONF_module_add__imp__CONF_module_get_usr_data__imp__CONF_module_set_usr_data__imp__CONF_modules_finish__imp__CONF_modules_free__imp__CONF_modules_load__imp__CONF_modules_load_file__imp__CONF_modules_unload__imp__CONF_parse_list__imp__CONF_set_default_method__imp__CONF_set_nconf__imp__CRL_DIST_POINTS_free__imp__CRL_DIST_POINTS_it__imp__CRL_DIST_POINTS_new__imp__CRYPTO_128_unwrap__imp__CRYPTO_128_wrap__imp__CRYPTO_THREADID_cmp__imp__CRYPTO_THREADID_cpy__imp__CRYPTO_THREADID_current__imp__CRYPTO_THREADID_get_callback__imp__CRYPTO_THREADID_hash__imp__CRYPTO_THREADID_set_callback__imp__CRYPTO_THREADID_set_numeric__imp__CRYPTO_THREADID_set_pointer__imp__CRYPTO_add_lock__imp__CRYPTO_cbc128_decrypt__imp__CRYPTO_cbc128_encrypt__imp__CRYPTO_ccm128_aad__imp__CRYPTO_ccm128_decrypt__imp__CRYPTO_ccm128_decrypt_ccm64__imp__CRYPTO_ccm128_encrypt__imp__CRYPTO_ccm128_encrypt_ccm64__imp__CRYPTO_ccm128_init__imp__CRYPTO_ccm128_setiv__imp__CRYPTO_ccm128_tag__imp__CRYPTO_cfb128_1_encrypt__imp__CRYPTO_cfb128_8_encrypt__imp__CRYPTO_cfb128_encrypt__imp__CRYPTO_cleanup_all_ex_data__imp__CRYPTO_ctr128_encrypt__imp__CRYPTO_ctr128_encrypt_ctr32__imp__CRYPTO_cts128_decrypt__imp__CRYPTO_cts128_decrypt_block__imp__CRYPTO_cts128_encrypt__imp__CRYPTO_cts128_encrypt_block__imp__CRYPTO_dbg_free__imp__CRYPTO_dbg_get_options__imp__CRYPTO_dbg_malloc__imp__CRYPTO_dbg_realloc__imp__CRYPTO_dbg_set_options__imp__CRYPTO_destroy_dynlockid__imp__CRYPTO_dup_ex_data__imp__CRYPTO_ex_data_new_class__imp__CRYPTO_free__imp__CRYPTO_free_ex_data__imp__CRYPTO_free_locked__imp__CRYPTO_gcm128_aad__imp__CRYPTO_gcm128_decrypt__imp__CRYPTO_gcm128_decrypt_ctr32__imp__CRYPTO_gcm128_encrypt__imp__CRYPTO_gcm128_encrypt_ctr32__imp__CRYPTO_gcm128_finish__imp__CRYPTO_gcm128_init__imp__CRYPTO_gcm128_new__imp__CRYPTO_gcm128_release__imp__CRYPTO_gcm128_setiv__imp__CRYPTO_gcm128_tag__imp__CRYPTO_get_add_lock_callback__imp__CRYPTO_get_dynlock_create_callback__imp__CRYPTO_get_dynlock_destroy_callback__imp__CRYPTO_get_dynlock_lock_callback__imp__CRYPTO_get_dynlock_value__imp__CRYPTO_get_ex_data__imp__CRYPTO_get_ex_data_implementation__imp__CRYPTO_get_ex_new_index__imp__CRYPTO_get_id_callback__imp__CRYPTO_get_lock_name__imp__CRYPTO_get_locked_mem_ex_functions__imp__CRYPTO_get_locked_mem_functions__imp__CRYPTO_get_locking_callback__imp__CRYPTO_get_mem_debug_functions__imp__CRYPTO_get_mem_debug_options__imp__CRYPTO_get_mem_ex_functions__imp__CRYPTO_get_mem_functions__imp__CRYPTO_get_new_dynlockid__imp__CRYPTO_get_new_lockid__imp__CRYPTO_is_mem_check_on__imp__CRYPTO_lock__imp__CRYPTO_malloc__imp__CRYPTO_malloc_locked__imp__CRYPTO_mem_ctrl__imp__CRYPTO_mem_leaks__imp__CRYPTO_mem_leaks_cb__imp__CRYPTO_mem_leaks_fp__imp__CRYPTO_memcmp__imp__CRYPTO_new_ex_data__imp__CRYPTO_nistcts128_decrypt__imp__CRYPTO_nistcts128_decrypt_block__imp__CRYPTO_nistcts128_encrypt__imp__CRYPTO_nistcts128_encrypt_block__imp__CRYPTO_num_locks__imp__CRYPTO_ofb128_encrypt__imp__CRYPTO_pop_info__imp__CRYPTO_push_info___imp__CRYPTO_realloc__imp__CRYPTO_realloc_clean__imp__CRYPTO_remalloc__imp__CRYPTO_remove_all_info__imp__CRYPTO_set_add_lock_callback__imp__CRYPTO_set_dynlock_create_callback__imp__CRYPTO_set_dynlock_destroy_callback__imp__CRYPTO_set_dynlock_lock_callback__imp__CRYPTO_set_ex_data__imp__CRYPTO_set_ex_data_implementation__imp__CRYPTO_set_id_callback__imp__CRYPTO_set_locked_mem_ex_functions__imp__CRYPTO_set_locked_mem_functions__imp__CRYPTO_set_locking_callback__imp__CRYPTO_set_mem_debug_functions__imp__CRYPTO_set_mem_debug_options__imp__CRYPTO_set_mem_ex_functions__imp__CRYPTO_set_mem_functions__imp__CRYPTO_strdup__imp__CRYPTO_thread_id__imp__CRYPTO_xts128_encrypt__imp__Camellia_cbc_encrypt__imp__Camellia_cfb128_encrypt__imp__Camellia_cfb1_encrypt__imp__Camellia_cfb8_encrypt__imp__Camellia_ctr128_encrypt__imp__Camellia_decrypt__imp__Camellia_ecb_encrypt__imp__Camellia_encrypt__imp__Camellia_ofb128_encrypt__imp__Camellia_set_key__imp__DES_cbc_cksum__imp__DES_cbc_encrypt__imp__DES_cfb64_encrypt__imp__DES_cfb_encrypt__imp__DES_check_key_parity__imp__DES_crypt__imp__DES_decrypt3__imp__DES_ecb3_encrypt__imp__DES_ecb_encrypt__imp__DES_ede3_cbc_encrypt__imp__DES_ede3_cbcm_encrypt__imp__DES_ede3_cfb64_encrypt__imp__DES_ede3_cfb_encrypt__imp__DES_ede3_ofb64_encrypt__imp__DES_enc_read__imp__DES_enc_write__imp__DES_encrypt1__imp__DES_encrypt2__imp__DES_encrypt3__imp__DES_fcrypt__imp__DES_is_weak_key__imp__DES_key_sched__imp__DES_ncbc_encrypt__imp__DES_ofb64_encrypt__imp__DES_ofb_encrypt__imp__DES_options__imp__DES_pcbc_encrypt__imp__DES_quad_cksum__imp__DES_random_key__imp__DES_read_2passwords__imp__DES_read_password__imp__DES_set_key__imp__DES_set_key_checked__imp__DES_set_key_unchecked__imp__DES_set_odd_parity__imp__DES_string_to_2keys__imp__DES_string_to_key__imp__DES_xcbc_encrypt__imp__DH_KDF_X9_42__imp__DH_OpenSSL__imp__DH_check__imp__DH_check_pub_key__imp__DH_compute_key__imp__DH_compute_key_padded__imp__DH_free__imp__DH_generate_key__imp__DH_generate_parameters__imp__DH_generate_parameters_ex__imp__DH_get_1024_160__imp__DH_get_2048_224__imp__DH_get_2048_256__imp__DH_get_default_method__imp__DH_get_ex_data__imp__DH_get_ex_new_index__imp__DH_new__imp__DH_new_method__imp__DH_set_default_method__imp__DH_set_ex_data__imp__DH_set_method__imp__DH_size__imp__DH_up_ref__imp__DHparams_dup__imp__DHparams_print__imp__DHparams_print_fp__imp__DIRECTORYSTRING_free__imp__DIRECTORYSTRING_it__imp__DIRECTORYSTRING_new__imp__DISPLAYTEXT_free__imp__DISPLAYTEXT_it__imp__DISPLAYTEXT_new__imp__DIST_POINT_NAME_free__imp__DIST_POINT_NAME_it__imp__DIST_POINT_NAME_new__imp__DIST_POINT_free__imp__DIST_POINT_it__imp__DIST_POINT_new__imp__DIST_POINT_set_dpname__imp__DSA_OpenSSL__imp__DSA_SIG_free__imp__DSA_SIG_new__imp__DSA_do_sign__imp__DSA_do_verify__imp__DSA_dup_DH__imp__DSA_free__imp__DSA_generate_key__imp__DSA_generate_parameters__imp__DSA_generate_parameters_ex__imp__DSA_get_default_method__imp__DSA_get_ex_data__imp__DSA_get_ex_new_index__imp__DSA_new__imp__DSA_new_method__imp__DSA_print__imp__DSA_print_fp__imp__DSA_set_default_method__imp__DSA_set_ex_data__imp__DSA_set_method__imp__DSA_sign__imp__DSA_sign_setup__imp__DSA_size__imp__DSA_up_ref__imp__DSA_verify__imp__DSAparams_dup__imp__DSAparams_print__imp__DSAparams_print_fp__imp__DSO_METHOD_beos__imp__DSO_METHOD_dl__imp__DSO_METHOD_dlfcn__imp__DSO_METHOD_null__imp__DSO_METHOD_openssl__imp__DSO_METHOD_vms__imp__DSO_METHOD_win32__imp__DSO_bind_func__imp__DSO_bind_var__imp__DSO_convert_filename__imp__DSO_ctrl__imp__DSO_flags__imp__DSO_free__imp__DSO_get_default_method__imp__DSO_get_filename__imp__DSO_get_loaded_filename__imp__DSO_get_method__imp__DSO_global_lookup__imp__DSO_load__imp__DSO_merge__imp__DSO_new__imp__DSO_new_method__imp__DSO_pathbyaddr__imp__DSO_set_default_method__imp__DSO_set_filename__imp__DSO_set_method__imp__DSO_set_name_converter__imp__DSO_up_ref__imp__ECDH_KDF_X9_62__imp__ECDH_OpenSSL__imp__ECDH_compute_key__imp__ECDH_get_default_method__imp__ECDH_get_ex_data__imp__ECDH_get_ex_new_index__imp__ECDH_set_default_method__imp__ECDH_set_ex_data__imp__ECDH_set_method__imp__ECDSA_METHOD_free__imp__ECDSA_METHOD_get_app_data__imp__ECDSA_METHOD_new__imp__ECDSA_METHOD_set_app_data__imp__ECDSA_METHOD_set_flags__imp__ECDSA_METHOD_set_name__imp__ECDSA_METHOD_set_sign__imp__ECDSA_METHOD_set_sign_setup__imp__ECDSA_METHOD_set_verify__imp__ECDSA_OpenSSL__imp__ECDSA_SIG_free__imp__ECDSA_SIG_new__imp__ECDSA_do_sign__imp__ECDSA_do_sign_ex__imp__ECDSA_do_verify__imp__ECDSA_get_default_method__imp__ECDSA_get_ex_data__imp__ECDSA_get_ex_new_index__imp__ECDSA_set_default_method__imp__ECDSA_set_ex_data__imp__ECDSA_set_method__imp__ECDSA_sign__imp__ECDSA_sign_ex__imp__ECDSA_sign_setup__imp__ECDSA_size__imp__ECDSA_verify__imp__ECPKParameters_print__imp__ECPKParameters_print_fp__imp__ECParameters_print__imp__ECParameters_print_fp__imp__EC_GF2m_simple_method__imp__EC_GFp_mont_method__imp__EC_GFp_nist_method__imp__EC_GFp_simple_method__imp__EC_GROUP_check__imp__EC_GROUP_check_discriminant__imp__EC_GROUP_clear_free__imp__EC_GROUP_cmp__imp__EC_GROUP_copy__imp__EC_GROUP_dup__imp__EC_GROUP_free__imp__EC_GROUP_get0_generator__imp__EC_GROUP_get0_seed__imp__EC_GROUP_get_asn1_flag__imp__EC_GROUP_get_basis_type__imp__EC_GROUP_get_cofactor__imp__EC_GROUP_get_curve_GF2m__imp__EC_GROUP_get_curve_GFp__imp__EC_GROUP_get_curve_name__imp__EC_GROUP_get_degree__imp__EC_GROUP_get_mont_data__imp__EC_GROUP_get_order__imp__EC_GROUP_get_pentanomial_basis__imp__EC_GROUP_get_point_conversion_form__imp__EC_GROUP_get_seed_len__imp__EC_GROUP_get_trinomial_basis__imp__EC_GROUP_have_precompute_mult__imp__EC_GROUP_method_of__imp__EC_GROUP_new__imp__EC_GROUP_new_by_curve_name__imp__EC_GROUP_new_curve_GF2m__imp__EC_GROUP_new_curve_GFp__imp__EC_GROUP_precompute_mult__imp__EC_GROUP_set_asn1_flag__imp__EC_GROUP_set_curve_GF2m__imp__EC_GROUP_set_curve_GFp__imp__EC_GROUP_set_curve_name__imp__EC_GROUP_set_generator__imp__EC_GROUP_set_point_conversion_form__imp__EC_GROUP_set_seed__imp__EC_KEY_check_key__imp__EC_KEY_clear_flags__imp__EC_KEY_copy__imp__EC_KEY_dup__imp__EC_KEY_free__imp__EC_KEY_generate_key__imp__EC_KEY_get0_group__imp__EC_KEY_get0_private_key__imp__EC_KEY_get0_public_key__imp__EC_KEY_get_conv_form__imp__EC_KEY_get_enc_flags__imp__EC_KEY_get_flags__imp__EC_KEY_get_key_method_data__imp__EC_KEY_insert_key_method_data__imp__EC_KEY_new__imp__EC_KEY_new_by_curve_name__imp__EC_KEY_precompute_mult__imp__EC_KEY_print__imp__EC_KEY_print_fp__imp__EC_KEY_set_asn1_flag__imp__EC_KEY_set_conv_form__imp__EC_KEY_set_enc_flags__imp__EC_KEY_set_flags__imp__EC_KEY_set_group__imp__EC_KEY_set_private_key__imp__EC_KEY_set_public_key__imp__EC_KEY_set_public_key_affine_coordinates__imp__EC_KEY_up_ref__imp__EC_METHOD_get_field_type__imp__EC_POINT_add__imp__EC_POINT_bn2point__imp__EC_POINT_clear_free__imp__EC_POINT_cmp__imp__EC_POINT_copy__imp__EC_POINT_dbl__imp__EC_POINT_dup__imp__EC_POINT_free__imp__EC_POINT_get_Jprojective_coordinates_GFp__imp__EC_POINT_get_affine_coordinates_GF2m__imp__EC_POINT_get_affine_coordinates_GFp__imp__EC_POINT_hex2point__imp__EC_POINT_invert__imp__EC_POINT_is_at_infinity__imp__EC_POINT_is_on_curve__imp__EC_POINT_make_affine__imp__EC_POINT_method_of__imp__EC_POINT_mul__imp__EC_POINT_new__imp__EC_POINT_oct2point__imp__EC_POINT_point2bn__imp__EC_POINT_point2hex__imp__EC_POINT_point2oct__imp__EC_POINT_set_Jprojective_coordinates_GFp__imp__EC_POINT_set_affine_coordinates_GF2m__imp__EC_POINT_set_affine_coordinates_GFp__imp__EC_POINT_set_compressed_coordinates_GF2m__imp__EC_POINT_set_compressed_coordinates_GFp__imp__EC_POINT_set_to_infinity__imp__EC_POINTs_make_affine__imp__EC_POINTs_mul__imp__EC_curve_nid2nist__imp__EC_curve_nist2nid__imp__EC_get_builtin_curves__imp__EDIPARTYNAME_free__imp__EDIPARTYNAME_it__imp__EDIPARTYNAME_new__imp__ENGINE_add__imp__ENGINE_add_conf_module__imp__ENGINE_by_id__imp__ENGINE_cleanup__imp__ENGINE_cmd_is_executable__imp__ENGINE_ctrl__imp__ENGINE_ctrl_cmd__imp__ENGINE_ctrl_cmd_string__imp__ENGINE_finish__imp__ENGINE_free__imp__ENGINE_get_DH__imp__ENGINE_get_DSA__imp__ENGINE_get_ECDH__imp__ENGINE_get_ECDSA__imp__ENGINE_get_RAND__imp__ENGINE_get_RSA__imp__ENGINE_get_STORE__imp__ENGINE_get_cipher__imp__ENGINE_get_cipher_engine__imp__ENGINE_get_ciphers__imp__ENGINE_get_cmd_defns__imp__ENGINE_get_ctrl_function__imp__ENGINE_get_default_DH__imp__ENGINE_get_default_DSA__imp__ENGINE_get_default_ECDH__imp__ENGINE_get_default_ECDSA__imp__ENGINE_get_default_RAND__imp__ENGINE_get_default_RSA__imp__ENGINE_get_destroy_function__imp__ENGINE_get_digest__imp__ENGINE_get_digest_engine__imp__ENGINE_get_digests__imp__ENGINE_get_ex_data__imp__ENGINE_get_ex_new_index__imp__ENGINE_get_finish_function__imp__ENGINE_get_first__imp__ENGINE_get_flags__imp__ENGINE_get_id__imp__ENGINE_get_init_function__imp__ENGINE_get_last__imp__ENGINE_get_load_privkey_function__imp__ENGINE_get_load_pubkey_function__imp__ENGINE_get_name__imp__ENGINE_get_next__imp__ENGINE_get_pkey_asn1_meth__imp__ENGINE_get_pkey_asn1_meth_engine__imp__ENGINE_get_pkey_asn1_meth_str__imp__ENGINE_get_pkey_asn1_meths__imp__ENGINE_get_pkey_meth__imp__ENGINE_get_pkey_meth_engine__imp__ENGINE_get_pkey_meths__imp__ENGINE_get_prev__imp__ENGINE_get_ssl_client_cert_function__imp__ENGINE_get_static_state__imp__ENGINE_get_table_flags__imp__ENGINE_init__imp__ENGINE_load_builtin_engines__imp__ENGINE_load_cryptodev__imp__ENGINE_load_dynamic__imp__ENGINE_load_openssl__imp__ENGINE_load_private_key__imp__ENGINE_load_public_key__imp__ENGINE_load_rdrand__imp__ENGINE_load_ssl_client_cert__imp__ENGINE_new__imp__ENGINE_pkey_asn1_find_str__imp__ENGINE_register_DH__imp__ENGINE_register_DSA__imp__ENGINE_register_ECDH__imp__ENGINE_register_ECDSA__imp__ENGINE_register_RAND__imp__ENGINE_register_RSA__imp__ENGINE_register_STORE__imp__ENGINE_register_all_DH__imp__ENGINE_register_all_DSA__imp__ENGINE_register_all_ECDH__imp__ENGINE_register_all_ECDSA__imp__ENGINE_register_all_RAND__imp__ENGINE_register_all_RSA__imp__ENGINE_register_all_STORE__imp__ENGINE_register_all_ciphers__imp__ENGINE_register_all_complete__imp__ENGINE_register_all_digests__imp__ENGINE_register_all_pkey_asn1_meths__imp__ENGINE_register_all_pkey_meths__imp__ENGINE_register_ciphers__imp__ENGINE_register_complete__imp__ENGINE_register_digests__imp__ENGINE_register_pkey_asn1_meths__imp__ENGINE_register_pkey_meths__imp__ENGINE_remove__imp__ENGINE_set_DH__imp__ENGINE_set_DSA__imp__ENGINE_set_ECDH__imp__ENGINE_set_ECDSA__imp__ENGINE_set_RAND__imp__ENGINE_set_RSA__imp__ENGINE_set_STORE__imp__ENGINE_set_ciphers__imp__ENGINE_set_cmd_defns__imp__ENGINE_set_ctrl_function__imp__ENGINE_set_default__imp__ENGINE_set_default_DH__imp__ENGINE_set_default_DSA__imp__ENGINE_set_default_ECDH__imp__ENGINE_set_default_ECDSA__imp__ENGINE_set_default_RAND__imp__ENGINE_set_default_RSA__imp__ENGINE_set_default_ciphers__imp__ENGINE_set_default_digests__imp__ENGINE_set_default_pkey_asn1_meths__imp__ENGINE_set_default_pkey_meths__imp__ENGINE_set_default_string__imp__ENGINE_set_destroy_function__imp__ENGINE_set_digests__imp__ENGINE_set_ex_data__imp__ENGINE_set_finish_function__imp__ENGINE_set_flags__imp__ENGINE_set_id__imp__ENGINE_set_init_function__imp__ENGINE_set_load_privkey_function__imp__ENGINE_set_load_pubkey_function__imp__ENGINE_set_load_ssl_client_cert_function__imp__ENGINE_set_name__imp__ENGINE_set_pkey_asn1_meths__imp__ENGINE_set_pkey_meths__imp__ENGINE_set_table_flags__imp__ENGINE_unregister_DH__imp__ENGINE_unregister_DSA__imp__ENGINE_unregister_ECDH__imp__ENGINE_unregister_ECDSA__imp__ENGINE_unregister_RAND__imp__ENGINE_unregister_RSA__imp__ENGINE_unregister_STORE__imp__ENGINE_unregister_ciphers__imp__ENGINE_unregister_digests__imp__ENGINE_unregister_pkey_asn1_meths__imp__ENGINE_unregister_pkey_meths__imp__ENGINE_up_ref__imp__ERR_add_error_data__imp__ERR_add_error_vdata__imp__ERR_clear_error__imp__ERR_error_string__imp__ERR_error_string_n__imp__ERR_free_strings__imp__ERR_func_error_string__imp__ERR_get_err_state_table__imp__ERR_get_error__imp__ERR_get_error_line__imp__ERR_get_error_line_data__imp__ERR_get_implementation__imp__ERR_get_next_error_library__imp__ERR_get_state__imp__ERR_get_string_table__imp__ERR_lib_error_string__imp__ERR_load_ASN1_strings__imp__ERR_load_BIO_strings__imp__ERR_load_BN_strings__imp__ERR_load_BUF_strings__imp__ERR_load_CMS_strings__imp__ERR_load_COMP_strings__imp__ERR_load_CONF_strings__imp__ERR_load_CRYPTO_strings__imp__ERR_load_DH_strings__imp__ERR_load_DSA_strings__imp__ERR_load_DSO_strings__imp__ERR_load_ECDH_strings__imp__ERR_load_ECDSA_strings__imp__ERR_load_EC_strings__imp__ERR_load_ENGINE_strings__imp__ERR_load_ERR_strings__imp__ERR_load_EVP_strings__imp__ERR_load_OBJ_strings__imp__ERR_load_OCSP_strings__imp__ERR_load_PEM_strings__imp__ERR_load_PKCS12_strings__imp__ERR_load_PKCS7_strings__imp__ERR_load_RAND_strings__imp__ERR_load_RSA_strings__imp__ERR_load_TS_strings__imp__ERR_load_UI_strings__imp__ERR_load_X509V3_strings__imp__ERR_load_X509_strings__imp__ERR_load_crypto_strings__imp__ERR_load_strings__imp__ERR_peek_error__imp__ERR_peek_error_line__imp__ERR_peek_error_line_data__imp__ERR_peek_last_error__imp__ERR_peek_last_error_line__imp__ERR_peek_last_error_line_data__imp__ERR_pop_to_mark__imp__ERR_print_errors__imp__ERR_print_errors_cb__imp__ERR_print_errors_fp__imp__ERR_put_error__imp__ERR_reason_error_string__imp__ERR_release_err_state_table__imp__ERR_remove_state__imp__ERR_remove_thread_state__imp__ERR_set_error_data__imp__ERR_set_implementation__imp__ERR_set_mark__imp__ERR_unload_strings__imp__ESS_CERT_ID_dup__imp__ESS_CERT_ID_free__imp__ESS_CERT_ID_new__imp__ESS_ISSUER_SERIAL_dup__imp__ESS_ISSUER_SERIAL_free__imp__ESS_ISSUER_SERIAL_new__imp__ESS_SIGNING_CERT_dup__imp__ESS_SIGNING_CERT_free__imp__ESS_SIGNING_CERT_new__imp__EVP_BytesToKey__imp__EVP_CIPHER_CTX_block_size__imp__EVP_CIPHER_CTX_cipher__imp__EVP_CIPHER_CTX_cleanup__imp__EVP_CIPHER_CTX_clear_flags__imp__EVP_CIPHER_CTX_copy__imp__EVP_CIPHER_CTX_ctrl__imp__EVP_CIPHER_CTX_flags__imp__EVP_CIPHER_CTX_free__imp__EVP_CIPHER_CTX_get_app_data__imp__EVP_CIPHER_CTX_init__imp__EVP_CIPHER_CTX_iv_length__imp__EVP_CIPHER_CTX_key_length__imp__EVP_CIPHER_CTX_new__imp__EVP_CIPHER_CTX_nid__imp__EVP_CIPHER_CTX_rand_key__imp__EVP_CIPHER_CTX_set_app_data__imp__EVP_CIPHER_CTX_set_flags__imp__EVP_CIPHER_CTX_set_key_length__imp__EVP_CIPHER_CTX_set_padding__imp__EVP_CIPHER_CTX_test_flags__imp__EVP_CIPHER_asn1_to_param__imp__EVP_CIPHER_block_size__imp__EVP_CIPHER_do_all__imp__EVP_CIPHER_do_all_sorted__imp__EVP_CIPHER_flags__imp__EVP_CIPHER_get_asn1_iv__imp__EVP_CIPHER_iv_length__imp__EVP_CIPHER_key_length__imp__EVP_CIPHER_nid__imp__EVP_CIPHER_param_to_asn1__imp__EVP_CIPHER_set_asn1_iv__imp__EVP_CIPHER_type__imp__EVP_Cipher__imp__EVP_CipherFinal__imp__EVP_CipherFinal_ex__imp__EVP_CipherInit__imp__EVP_CipherInit_ex__imp__EVP_CipherUpdate__imp__EVP_DecodeBlock__imp__EVP_DecodeFinal__imp__EVP_DecodeInit__imp__EVP_DecodeUpdate__imp__EVP_DecryptFinal__imp__EVP_DecryptFinal_ex__imp__EVP_DecryptInit__imp__EVP_DecryptInit_ex__imp__EVP_DecryptUpdate__imp__EVP_Digest__imp__EVP_DigestFinal__imp__EVP_DigestFinal_ex__imp__EVP_DigestInit__imp__EVP_DigestInit_ex__imp__EVP_DigestSignFinal__imp__EVP_DigestSignInit__imp__EVP_DigestUpdate__imp__EVP_DigestVerifyFinal__imp__EVP_DigestVerifyInit__imp__EVP_EncodeBlock__imp__EVP_EncodeFinal__imp__EVP_EncodeInit__imp__EVP_EncodeUpdate__imp__EVP_EncryptFinal__imp__EVP_EncryptFinal_ex__imp__EVP_EncryptInit__imp__EVP_EncryptInit_ex__imp__EVP_EncryptUpdate__imp__EVP_MD_CTX_cleanup__imp__EVP_MD_CTX_clear_flags__imp__EVP_MD_CTX_copy__imp__EVP_MD_CTX_copy_ex__imp__EVP_MD_CTX_create__imp__EVP_MD_CTX_destroy__imp__EVP_MD_CTX_init__imp__EVP_MD_CTX_md__imp__EVP_MD_CTX_set_flags__imp__EVP_MD_CTX_test_flags__imp__EVP_MD_block_size__imp__EVP_MD_do_all__imp__EVP_MD_do_all_sorted__imp__EVP_MD_flags__imp__EVP_MD_pkey_type__imp__EVP_MD_size__imp__EVP_MD_type__imp__EVP_OpenFinal__imp__EVP_OpenInit__imp__EVP_PBE_CipherInit__imp__EVP_PBE_alg_add__imp__EVP_PBE_alg_add_type__imp__EVP_PBE_cleanup__imp__EVP_PBE_find__imp__EVP_PKCS82PKEY__imp__EVP_PKEY2PKCS8__imp__EVP_PKEY2PKCS8_broken__imp__EVP_PKEY_CTX_ctrl__imp__EVP_PKEY_CTX_ctrl_str__imp__EVP_PKEY_CTX_dup__imp__EVP_PKEY_CTX_free__imp__EVP_PKEY_CTX_get0_peerkey__imp__EVP_PKEY_CTX_get0_pkey__imp__EVP_PKEY_CTX_get_app_data__imp__EVP_PKEY_CTX_get_cb__imp__EVP_PKEY_CTX_get_data__imp__EVP_PKEY_CTX_get_keygen_info__imp__EVP_PKEY_CTX_get_operation__imp__EVP_PKEY_CTX_new__imp__EVP_PKEY_CTX_new_id__imp__EVP_PKEY_CTX_set0_keygen_info__imp__EVP_PKEY_CTX_set_app_data__imp__EVP_PKEY_CTX_set_cb__imp__EVP_PKEY_CTX_set_data__imp__EVP_PKEY_add1_attr__imp__EVP_PKEY_add1_attr_by_NID__imp__EVP_PKEY_add1_attr_by_OBJ__imp__EVP_PKEY_add1_attr_by_txt__imp__EVP_PKEY_asn1_add0__imp__EVP_PKEY_asn1_add_alias__imp__EVP_PKEY_asn1_copy__imp__EVP_PKEY_asn1_find__imp__EVP_PKEY_asn1_find_str__imp__EVP_PKEY_asn1_free__imp__EVP_PKEY_asn1_get0__imp__EVP_PKEY_asn1_get0_info__imp__EVP_PKEY_asn1_get_count__imp__EVP_PKEY_asn1_new__imp__EVP_PKEY_asn1_set_ctrl__imp__EVP_PKEY_asn1_set_free__imp__EVP_PKEY_asn1_set_item__imp__EVP_PKEY_asn1_set_param__imp__EVP_PKEY_asn1_set_private__imp__EVP_PKEY_asn1_set_public__imp__EVP_PKEY_assign__imp__EVP_PKEY_base_id__imp__EVP_PKEY_bits__imp__EVP_PKEY_cmp__imp__EVP_PKEY_cmp_parameters__imp__EVP_PKEY_copy_parameters__imp__EVP_PKEY_decrypt__imp__EVP_PKEY_decrypt_init__imp__EVP_PKEY_decrypt_old__imp__EVP_PKEY_delete_attr__imp__EVP_PKEY_derive__imp__EVP_PKEY_derive_init__imp__EVP_PKEY_derive_set_peer__imp__EVP_PKEY_encrypt__imp__EVP_PKEY_encrypt_init__imp__EVP_PKEY_encrypt_old__imp__EVP_PKEY_free__imp__EVP_PKEY_get0__imp__EVP_PKEY_get0_asn1__imp__EVP_PKEY_get1_DH__imp__EVP_PKEY_get1_DSA__imp__EVP_PKEY_get1_EC_KEY__imp__EVP_PKEY_get1_RSA__imp__EVP_PKEY_get_attr__imp__EVP_PKEY_get_attr_by_NID__imp__EVP_PKEY_get_attr_by_OBJ__imp__EVP_PKEY_get_attr_count__imp__EVP_PKEY_get_default_digest_nid__imp__EVP_PKEY_id__imp__EVP_PKEY_keygen__imp__EVP_PKEY_keygen_init__imp__EVP_PKEY_meth_add0__imp__EVP_PKEY_meth_copy__imp__EVP_PKEY_meth_find__imp__EVP_PKEY_meth_free__imp__EVP_PKEY_meth_get0_info__imp__EVP_PKEY_meth_new__imp__EVP_PKEY_meth_set_cleanup__imp__EVP_PKEY_meth_set_copy__imp__EVP_PKEY_meth_set_ctrl__imp__EVP_PKEY_meth_set_decrypt__imp__EVP_PKEY_meth_set_derive__imp__EVP_PKEY_meth_set_encrypt__imp__EVP_PKEY_meth_set_init__imp__EVP_PKEY_meth_set_keygen__imp__EVP_PKEY_meth_set_paramgen__imp__EVP_PKEY_meth_set_sign__imp__EVP_PKEY_meth_set_signctx__imp__EVP_PKEY_meth_set_verify__imp__EVP_PKEY_meth_set_verify_recover__imp__EVP_PKEY_meth_set_verifyctx__imp__EVP_PKEY_missing_parameters__imp__EVP_PKEY_new__imp__EVP_PKEY_new_mac_key__imp__EVP_PKEY_paramgen__imp__EVP_PKEY_paramgen_init__imp__EVP_PKEY_print_params__imp__EVP_PKEY_print_private__imp__EVP_PKEY_print_public__imp__EVP_PKEY_save_parameters__imp__EVP_PKEY_set1_DH__imp__EVP_PKEY_set1_DSA__imp__EVP_PKEY_set1_EC_KEY__imp__EVP_PKEY_set1_RSA__imp__EVP_PKEY_set_type__imp__EVP_PKEY_set_type_str__imp__EVP_PKEY_sign__imp__EVP_PKEY_sign_init__imp__EVP_PKEY_size__imp__EVP_PKEY_type__imp__EVP_PKEY_verify__imp__EVP_PKEY_verify_init__imp__EVP_PKEY_verify_recover__imp__EVP_PKEY_verify_recover_init__imp__EVP_SealFinal__imp__EVP_SealInit__imp__EVP_SignFinal__imp__EVP_VerifyFinal__imp__EVP_add_alg_module__imp__EVP_add_cipher__imp__EVP_add_digest__imp__EVP_aes_128_cbc__imp__EVP_aes_128_cbc_hmac_sha1__imp__EVP_aes_128_cbc_hmac_sha256__imp__EVP_aes_128_ccm__imp__EVP_aes_128_cfb1__imp__EVP_aes_128_cfb128__imp__EVP_aes_128_cfb8__imp__EVP_aes_128_ctr__imp__EVP_aes_128_ecb__imp__EVP_aes_128_gcm__imp__EVP_aes_128_ofb__imp__EVP_aes_128_wrap__imp__EVP_aes_128_xts__imp__EVP_aes_192_cbc__imp__EVP_aes_192_ccm__imp__EVP_aes_192_cfb1__imp__EVP_aes_192_cfb128__imp__EVP_aes_192_cfb8__imp__EVP_aes_192_ctr__imp__EVP_aes_192_ecb__imp__EVP_aes_192_gcm__imp__EVP_aes_192_ofb__imp__EVP_aes_192_wrap__imp__EVP_aes_256_cbc__imp__EVP_aes_256_cbc_hmac_sha1__imp__EVP_aes_256_cbc_hmac_sha256__imp__EVP_aes_256_ccm__imp__EVP_aes_256_cfb1__imp__EVP_aes_256_cfb128__imp__EVP_aes_256_cfb8__imp__EVP_aes_256_ctr__imp__EVP_aes_256_ecb__imp__EVP_aes_256_gcm__imp__EVP_aes_256_ofb__imp__EVP_aes_256_wrap__imp__EVP_aes_256_xts__imp__EVP_bf_cbc__imp__EVP_bf_cfb64__imp__EVP_bf_ecb__imp__EVP_bf_ofb__imp__EVP_camellia_128_cbc__imp__EVP_camellia_128_cfb1__imp__EVP_camellia_128_cfb128__imp__EVP_camellia_128_cfb8__imp__EVP_camellia_128_ecb__imp__EVP_camellia_128_ofb__imp__EVP_camellia_192_cbc__imp__EVP_camellia_192_cfb1__imp__EVP_camellia_192_cfb128__imp__EVP_camellia_192_cfb8__imp__EVP_camellia_192_ecb__imp__EVP_camellia_192_ofb__imp__EVP_camellia_256_cbc__imp__EVP_camellia_256_cfb1__imp__EVP_camellia_256_cfb128__imp__EVP_camellia_256_cfb8__imp__EVP_camellia_256_ecb__imp__EVP_camellia_256_ofb__imp__EVP_cast5_cbc__imp__EVP_cast5_cfb64__imp__EVP_cast5_ecb__imp__EVP_cast5_ofb__imp__EVP_cleanup__imp__EVP_des_cbc__imp__EVP_des_cfb1__imp__EVP_des_cfb64__imp__EVP_des_cfb8__imp__EVP_des_ecb__imp__EVP_des_ede__imp__EVP_des_ede3__imp__EVP_des_ede3_cbc__imp__EVP_des_ede3_cfb1__imp__EVP_des_ede3_cfb64__imp__EVP_des_ede3_cfb8__imp__EVP_des_ede3_ecb__imp__EVP_des_ede3_ofb__imp__EVP_des_ede3_wrap__imp__EVP_des_ede_cbc__imp__EVP_des_ede_cfb64__imp__EVP_des_ede_ecb__imp__EVP_des_ede_ofb__imp__EVP_des_ofb__imp__EVP_desx_cbc__imp__EVP_dss__imp__EVP_dss1__imp__EVP_ecdsa__imp__EVP_enc_null__imp__EVP_get_cipherbyname__imp__EVP_get_digestbyname__imp__EVP_get_pw_prompt__imp__EVP_idea_cbc__imp__EVP_idea_cfb64__imp__EVP_idea_ecb__imp__EVP_idea_ofb__imp__EVP_md4__imp__EVP_md5__imp__EVP_md_null__imp__EVP_mdc2__imp__EVP_rc2_40_cbc__imp__EVP_rc2_64_cbc__imp__EVP_rc2_cbc__imp__EVP_rc2_cfb64__imp__EVP_rc2_ecb__imp__EVP_rc2_ofb__imp__EVP_rc4__imp__EVP_rc4_40__imp__EVP_rc4_hmac_md5__imp__EVP_read_pw_string__imp__EVP_read_pw_string_min__imp__EVP_ripemd160__imp__EVP_seed_cbc__imp__EVP_seed_cfb128__imp__EVP_seed_ecb__imp__EVP_seed_ofb__imp__EVP_set_pw_prompt__imp__EVP_sha__imp__EVP_sha1__imp__EVP_sha224__imp__EVP_sha256__imp__EVP_sha384__imp__EVP_sha512__imp__EVP_whirlpool__imp__EXTENDED_KEY_USAGE_free__imp__EXTENDED_KEY_USAGE_it__imp__EXTENDED_KEY_USAGE_new__imp__FIPS_mode__imp__FIPS_mode_set__imp__GENERAL_NAMES_free__imp__GENERAL_NAMES_it__imp__GENERAL_NAMES_new__imp__GENERAL_NAME_cmp__imp__GENERAL_NAME_dup__imp__GENERAL_NAME_free__imp__GENERAL_NAME_get0_otherName__imp__GENERAL_NAME_get0_value__imp__GENERAL_NAME_it__imp__GENERAL_NAME_new__imp__GENERAL_NAME_print__imp__GENERAL_NAME_set0_othername__imp__GENERAL_NAME_set0_value__imp__GENERAL_SUBTREE_free__imp__GENERAL_SUBTREE_it__imp__GENERAL_SUBTREE_new__imp__HMAC__imp__HMAC_CTX_cleanup__imp__HMAC_CTX_copy__imp__HMAC_CTX_init__imp__HMAC_CTX_set_flags__imp__HMAC_Final__imp__HMAC_Init__imp__HMAC_Init_ex__imp__HMAC_Update__imp__ISSUING_DIST_POINT_free__imp__ISSUING_DIST_POINT_it__imp__ISSUING_DIST_POINT_new__imp__KRB5_APREQBODY_free__imp__KRB5_APREQBODY_it__imp__KRB5_APREQBODY_new__imp__KRB5_APREQ_free__imp__KRB5_APREQ_it__imp__KRB5_APREQ_new__imp__KRB5_AUTHDATA_free__imp__KRB5_AUTHDATA_it__imp__KRB5_AUTHDATA_new__imp__KRB5_AUTHENTBODY_free__imp__KRB5_AUTHENTBODY_it__imp__KRB5_AUTHENTBODY_new__imp__KRB5_AUTHENT_free__imp__KRB5_AUTHENT_it__imp__KRB5_AUTHENT_new__imp__KRB5_CHECKSUM_free__imp__KRB5_CHECKSUM_it__imp__KRB5_CHECKSUM_new__imp__KRB5_ENCDATA_free__imp__KRB5_ENCDATA_it__imp__KRB5_ENCDATA_new__imp__KRB5_ENCKEY_free__imp__KRB5_ENCKEY_it__imp__KRB5_ENCKEY_new__imp__KRB5_PRINCNAME_free__imp__KRB5_PRINCNAME_it__imp__KRB5_PRINCNAME_new__imp__KRB5_TICKET_free__imp__KRB5_TICKET_it__imp__KRB5_TICKET_new__imp__KRB5_TKTBODY_free__imp__KRB5_TKTBODY_it__imp__KRB5_TKTBODY_new__imp__LONG_it__imp__MD4__imp__MD4_Final__imp__MD4_Init__imp__MD4_Transform__imp__MD4_Update__imp__MD5__imp__MD5_Final__imp__MD5_Init__imp__MD5_Transform__imp__MD5_Update__imp__MDC2__imp__MDC2_Final__imp__MDC2_Init__imp__MDC2_Update__imp__NAME_CONSTRAINTS_check__imp__NAME_CONSTRAINTS_free__imp__NAME_CONSTRAINTS_it__imp__NAME_CONSTRAINTS_new__imp__NCONF_WIN32__imp__NCONF_default__imp__NCONF_dump_bio__imp__NCONF_dump_fp__imp__NCONF_free__imp__NCONF_free_data__imp__NCONF_get_number_e__imp__NCONF_get_section__imp__NCONF_get_string__imp__NCONF_load__imp__NCONF_load_bio__imp__NCONF_load_fp__imp__NCONF_new__imp__NETSCAPE_CERT_SEQUENCE_free__imp__NETSCAPE_CERT_SEQUENCE_it__imp__NETSCAPE_CERT_SEQUENCE_new__imp__NETSCAPE_SPKAC_free__imp__NETSCAPE_SPKAC_it__imp__NETSCAPE_SPKAC_new__imp__NETSCAPE_SPKI_b64_decode__imp__NETSCAPE_SPKI_b64_encode__imp__NETSCAPE_SPKI_free__imp__NETSCAPE_SPKI_get_pubkey__imp__NETSCAPE_SPKI_it__imp__NETSCAPE_SPKI_new__imp__NETSCAPE_SPKI_print__imp__NETSCAPE_SPKI_set_pubkey__imp__NETSCAPE_SPKI_sign__imp__NETSCAPE_SPKI_verify__imp__NETSCAPE_X509_free__imp__NETSCAPE_X509_it__imp__NETSCAPE_X509_new__imp__NOTICEREF_free__imp__NOTICEREF_it__imp__NOTICEREF_new__imp__OBJ_NAME_add__imp__OBJ_NAME_cleanup__imp__OBJ_NAME_do_all__imp__OBJ_NAME_do_all_sorted__imp__OBJ_NAME_get__imp__OBJ_NAME_init__imp__OBJ_NAME_new_index__imp__OBJ_NAME_remove__imp__OBJ_add_object__imp__OBJ_add_sigid__imp__OBJ_bsearch___imp__OBJ_bsearch_ex___imp__OBJ_cleanup__imp__OBJ_cmp__imp__OBJ_create__imp__OBJ_create_objects__imp__OBJ_dup__imp__OBJ_find_sigid_algs__imp__OBJ_find_sigid_by_algs__imp__OBJ_ln2nid__imp__OBJ_new_nid__imp__OBJ_nid2ln__imp__OBJ_nid2obj__imp__OBJ_nid2sn__imp__OBJ_obj2nid__imp__OBJ_obj2txt__imp__OBJ_sigid_free__imp__OBJ_sn2nid__imp__OBJ_txt2nid__imp__OBJ_txt2obj__imp__OCSP_BASICRESP_add1_ext_i2d__imp__OCSP_BASICRESP_add_ext__imp__OCSP_BASICRESP_delete_ext__imp__OCSP_BASICRESP_free__imp__OCSP_BASICRESP_get1_ext_d2i__imp__OCSP_BASICRESP_get_ext__imp__OCSP_BASICRESP_get_ext_by_NID__imp__OCSP_BASICRESP_get_ext_by_OBJ__imp__OCSP_BASICRESP_get_ext_by_critical__imp__OCSP_BASICRESP_get_ext_count__imp__OCSP_BASICRESP_it__imp__OCSP_BASICRESP_new__imp__OCSP_CERTID_dup__imp__OCSP_CERTID_free__imp__OCSP_CERTID_it__imp__OCSP_CERTID_new__imp__OCSP_CERTSTATUS_free__imp__OCSP_CERTSTATUS_it__imp__OCSP_CERTSTATUS_new__imp__OCSP_CRLID_free__imp__OCSP_CRLID_it__imp__OCSP_CRLID_new__imp__OCSP_ONEREQ_add1_ext_i2d__imp__OCSP_ONEREQ_add_ext__imp__OCSP_ONEREQ_delete_ext__imp__OCSP_ONEREQ_free__imp__OCSP_ONEREQ_get1_ext_d2i__imp__OCSP_ONEREQ_get_ext__imp__OCSP_ONEREQ_get_ext_by_NID__imp__OCSP_ONEREQ_get_ext_by_OBJ__imp__OCSP_ONEREQ_get_ext_by_critical__imp__OCSP_ONEREQ_get_ext_count__imp__OCSP_ONEREQ_it__imp__OCSP_ONEREQ_new__imp__OCSP_REQINFO_free__imp__OCSP_REQINFO_it__imp__OCSP_REQINFO_new__imp__OCSP_REQUEST_add1_ext_i2d__imp__OCSP_REQUEST_add_ext__imp__OCSP_REQUEST_delete_ext__imp__OCSP_REQUEST_free__imp__OCSP_REQUEST_get1_ext_d2i__imp__OCSP_REQUEST_get_ext__imp__OCSP_REQUEST_get_ext_by_NID__imp__OCSP_REQUEST_get_ext_by_OBJ__imp__OCSP_REQUEST_get_ext_by_critical__imp__OCSP_REQUEST_get_ext_count__imp__OCSP_REQUEST_it__imp__OCSP_REQUEST_new__imp__OCSP_REQUEST_print__imp__OCSP_REQ_CTX_add1_header__imp__OCSP_REQ_CTX_free__imp__OCSP_REQ_CTX_get0_mem_bio__imp__OCSP_REQ_CTX_http__imp__OCSP_REQ_CTX_i2d__imp__OCSP_REQ_CTX_nbio__imp__OCSP_REQ_CTX_nbio_d2i__imp__OCSP_REQ_CTX_new__imp__OCSP_REQ_CTX_set1_req__imp__OCSP_RESPBYTES_free__imp__OCSP_RESPBYTES_it__imp__OCSP_RESPBYTES_new__imp__OCSP_RESPDATA_free__imp__OCSP_RESPDATA_it__imp__OCSP_RESPDATA_new__imp__OCSP_RESPID_free__imp__OCSP_RESPID_it__imp__OCSP_RESPID_new__imp__OCSP_RESPONSE_free__imp__OCSP_RESPONSE_it__imp__OCSP_RESPONSE_new__imp__OCSP_RESPONSE_print__imp__OCSP_REVOKEDINFO_free__imp__OCSP_REVOKEDINFO_it__imp__OCSP_REVOKEDINFO_new__imp__OCSP_SERVICELOC_free__imp__OCSP_SERVICELOC_it__imp__OCSP_SERVICELOC_new__imp__OCSP_SIGNATURE_free__imp__OCSP_SIGNATURE_it__imp__OCSP_SIGNATURE_new__imp__OCSP_SINGLERESP_add1_ext_i2d__imp__OCSP_SINGLERESP_add_ext__imp__OCSP_SINGLERESP_delete_ext__imp__OCSP_SINGLERESP_free__imp__OCSP_SINGLERESP_get1_ext_d2i__imp__OCSP_SINGLERESP_get_ext__imp__OCSP_SINGLERESP_get_ext_by_NID__imp__OCSP_SINGLERESP_get_ext_by_OBJ__imp__OCSP_SINGLERESP_get_ext_by_critical__imp__OCSP_SINGLERESP_get_ext_count__imp__OCSP_SINGLERESP_it__imp__OCSP_SINGLERESP_new__imp__OCSP_accept_responses_new__imp__OCSP_archive_cutoff_new__imp__OCSP_basic_add1_cert__imp__OCSP_basic_add1_nonce__imp__OCSP_basic_add1_status__imp__OCSP_basic_sign__imp__OCSP_basic_verify__imp__OCSP_cert_id_new__imp__OCSP_cert_status_str__imp__OCSP_cert_to_id__imp__OCSP_check_nonce__imp__OCSP_check_validity__imp__OCSP_copy_nonce__imp__OCSP_crlID_new__imp__OCSP_crl_reason_str__imp__OCSP_id_cmp__imp__OCSP_id_get0_info__imp__OCSP_id_issuer_cmp__imp__OCSP_onereq_get0_id__imp__OCSP_parse_url__imp__OCSP_request_add0_id__imp__OCSP_request_add1_cert__imp__OCSP_request_add1_nonce__imp__OCSP_request_is_signed__imp__OCSP_request_onereq_count__imp__OCSP_request_onereq_get0__imp__OCSP_request_set1_name__imp__OCSP_request_sign__imp__OCSP_request_verify__imp__OCSP_resp_count__imp__OCSP_resp_find__imp__OCSP_resp_find_status__imp__OCSP_resp_get0__imp__OCSP_response_create__imp__OCSP_response_get1_basic__imp__OCSP_response_status__imp__OCSP_response_status_str__imp__OCSP_sendreq_bio__imp__OCSP_sendreq_nbio__imp__OCSP_sendreq_new__imp__OCSP_set_max_response_length__imp__OCSP_single_get0_status__imp__OCSP_url_svcloc_new__imp__OPENSSL_DIR_end__imp__OPENSSL_DIR_read__imp__OPENSSL_add_all_algorithms_conf__imp__OPENSSL_add_all_algorithms_noconf__imp__OPENSSL_asc2uni__imp__OPENSSL_cleanse__imp__OPENSSL_config__imp__OPENSSL_cpuid_setup__imp__OPENSSL_gmtime__imp__OPENSSL_gmtime_adj__imp__OPENSSL_gmtime_diff__imp__OPENSSL_ia32cap_loc__imp__OPENSSL_init__imp__OPENSSL_isservice__imp__OPENSSL_issetugid__imp__OPENSSL_load_builtin_modules__imp__OPENSSL_memcmp__imp__OPENSSL_no_config__imp__OPENSSL_showfatal__imp__OPENSSL_stderr__imp__OPENSSL_strcasecmp__imp__OPENSSL_strncasecmp__imp__OPENSSL_uni2asc__imp__OSSL_DES_version__imp__OSSL_libdes_version__imp__OTHERNAME_cmp__imp__OTHERNAME_free__imp__OTHERNAME_it__imp__OTHERNAME_new__imp__OpenSSLDie__imp__OpenSSL_add_all_ciphers__imp__OpenSSL_add_all_digests__imp__PBE2PARAM_free__imp__PBE2PARAM_it__imp__PBE2PARAM_new__imp__PBEPARAM_free__imp__PBEPARAM_it__imp__PBEPARAM_new__imp__PBKDF2PARAM_free__imp__PBKDF2PARAM_it__imp__PBKDF2PARAM_new__imp__PEM_ASN1_read__imp__PEM_ASN1_read_bio__imp__PEM_ASN1_write__imp__PEM_ASN1_write_bio__imp__PEM_SealFinal__imp__PEM_SealInit__imp__PEM_SealUpdate__imp__PEM_SignFinal__imp__PEM_SignInit__imp__PEM_SignUpdate__imp__PEM_X509_INFO_read__imp__PEM_X509_INFO_read_bio__imp__PEM_X509_INFO_write_bio__imp__PEM_bytes_read_bio__imp__PEM_def_callback__imp__PEM_dek_info__imp__PEM_do_header__imp__PEM_get_EVP_CIPHER_INFO__imp__PEM_proc_type__imp__PEM_read__imp__PEM_read_CMS__imp__PEM_read_DHparams__imp__PEM_read_DSAPrivateKey__imp__PEM_read_DSA_PUBKEY__imp__PEM_read_DSAparams__imp__PEM_read_ECPKParameters__imp__PEM_read_ECPrivateKey__imp__PEM_read_EC_PUBKEY__imp__PEM_read_NETSCAPE_CERT_SEQUENCE__imp__PEM_read_PKCS7__imp__PEM_read_PKCS8__imp__PEM_read_PKCS8_PRIV_KEY_INFO__imp__PEM_read_PUBKEY__imp__PEM_read_PrivateKey__imp__PEM_read_RSAPrivateKey__imp__PEM_read_RSAPublicKey__imp__PEM_read_RSA_PUBKEY__imp__PEM_read_X509__imp__PEM_read_X509_AUX__imp__PEM_read_X509_CERT_PAIR__imp__PEM_read_X509_CRL__imp__PEM_read_X509_REQ__imp__PEM_read_bio__imp__PEM_read_bio_CMS__imp__PEM_read_bio_DHparams__imp__PEM_read_bio_DSAPrivateKey__imp__PEM_read_bio_DSA_PUBKEY__imp__PEM_read_bio_DSAparams__imp__PEM_read_bio_ECPKParameters__imp__PEM_read_bio_ECPrivateKey__imp__PEM_read_bio_EC_PUBKEY__imp__PEM_read_bio_NETSCAPE_CERT_SEQUENCE__imp__PEM_read_bio_PKCS7__imp__PEM_read_bio_PKCS8__imp__PEM_read_bio_PKCS8_PRIV_KEY_INFO__imp__PEM_read_bio_PUBKEY__imp__PEM_read_bio_Parameters__imp__PEM_read_bio_PrivateKey__imp__PEM_read_bio_RSAPrivateKey__imp__PEM_read_bio_RSAPublicKey__imp__PEM_read_bio_RSA_PUBKEY__imp__PEM_read_bio_X509__imp__PEM_read_bio_X509_AUX__imp__PEM_read_bio_X509_CERT_PAIR__imp__PEM_read_bio_X509_CRL__imp__PEM_read_bio_X509_REQ__imp__PEM_write__imp__PEM_write_CMS__imp__PEM_write_DHparams__imp__PEM_write_DHxparams__imp__PEM_write_DSAPrivateKey__imp__PEM_write_DSA_PUBKEY__imp__PEM_write_DSAparams__imp__PEM_write_ECPKParameters__imp__PEM_write_ECPrivateKey__imp__PEM_write_EC_PUBKEY__imp__PEM_write_NETSCAPE_CERT_SEQUENCE__imp__PEM_write_PKCS7__imp__PEM_write_PKCS8__imp__PEM_write_PKCS8PrivateKey__imp__PEM_write_PKCS8PrivateKey_nid__imp__PEM_write_PKCS8_PRIV_KEY_INFO__imp__PEM_write_PUBKEY__imp__PEM_write_PrivateKey__imp__PEM_write_RSAPrivateKey__imp__PEM_write_RSAPublicKey__imp__PEM_write_RSA_PUBKEY__imp__PEM_write_X509__imp__PEM_write_X509_AUX__imp__PEM_write_X509_CERT_PAIR__imp__PEM_write_X509_CRL__imp__PEM_write_X509_REQ__imp__PEM_write_X509_REQ_NEW__imp__PEM_write_bio__imp__PEM_write_bio_ASN1_stream__imp__PEM_write_bio_CMS__imp__PEM_write_bio_CMS_stream__imp__PEM_write_bio_DHparams__imp__PEM_write_bio_DHxparams__imp__PEM_write_bio_DSAPrivateKey__imp__PEM_write_bio_DSA_PUBKEY__imp__PEM_write_bio_DSAparams__imp__PEM_write_bio_ECPKParameters__imp__PEM_write_bio_ECPrivateKey__imp__PEM_write_bio_EC_PUBKEY__imp__PEM_write_bio_NETSCAPE_CERT_SEQUENCE__imp__PEM_write_bio_PKCS7__imp__PEM_write_bio_PKCS7_stream__imp__PEM_write_bio_PKCS8__imp__PEM_write_bio_PKCS8PrivateKey__imp__PEM_write_bio_PKCS8PrivateKey_nid__imp__PEM_write_bio_PKCS8_PRIV_KEY_INFO__imp__PEM_write_bio_PUBKEY__imp__PEM_write_bio_Parameters__imp__PEM_write_bio_PrivateKey__imp__PEM_write_bio_RSAPrivateKey__imp__PEM_write_bio_RSAPublicKey__imp__PEM_write_bio_RSA_PUBKEY__imp__PEM_write_bio_X509__imp__PEM_write_bio_X509_AUX__imp__PEM_write_bio_X509_CERT_PAIR__imp__PEM_write_bio_X509_CRL__imp__PEM_write_bio_X509_REQ__imp__PEM_write_bio_X509_REQ_NEW__imp__PKCS12_AUTHSAFES_it__imp__PKCS12_BAGS_free__imp__PKCS12_BAGS_it__imp__PKCS12_BAGS_new__imp__PKCS12_MAC_DATA_free__imp__PKCS12_MAC_DATA_it__imp__PKCS12_MAC_DATA_new__imp__PKCS12_MAKE_KEYBAG__imp__PKCS12_MAKE_SHKEYBAG__imp__PKCS12_PBE_add__imp__PKCS12_PBE_keyivgen__imp__PKCS12_SAFEBAGS_it__imp__PKCS12_SAFEBAG_free__imp__PKCS12_SAFEBAG_it__imp__PKCS12_SAFEBAG_new__imp__PKCS12_add_CSPName_asc__imp__PKCS12_add_cert__imp__PKCS12_add_friendlyname_asc__imp__PKCS12_add_friendlyname_uni__imp__PKCS12_add_key__imp__PKCS12_add_localkeyid__imp__PKCS12_add_safe__imp__PKCS12_add_safes__imp__PKCS12_certbag2x509__imp__PKCS12_certbag2x509crl__imp__PKCS12_create__imp__PKCS12_decrypt_skey__imp__PKCS12_free__imp__PKCS12_gen_mac__imp__PKCS12_get_attr_gen__imp__PKCS12_get_friendlyname__imp__PKCS12_init__imp__PKCS12_it__imp__PKCS12_item_decrypt_d2i__imp__PKCS12_item_i2d_encrypt__imp__PKCS12_item_pack_safebag__imp__PKCS12_key_gen_asc__imp__PKCS12_key_gen_uni__imp__PKCS12_new__imp__PKCS12_newpass__imp__PKCS12_pack_authsafes__imp__PKCS12_pack_p7data__imp__PKCS12_pack_p7encdata__imp__PKCS12_parse__imp__PKCS12_pbe_crypt__imp__PKCS12_set_mac__imp__PKCS12_setup_mac__imp__PKCS12_unpack_authsafes__imp__PKCS12_unpack_p7data__imp__PKCS12_unpack_p7encdata__imp__PKCS12_verify_mac__imp__PKCS12_x5092certbag__imp__PKCS12_x509crl2certbag__imp__PKCS1_MGF1__imp__PKCS5_PBE_add__imp__PKCS5_PBE_keyivgen__imp__PKCS5_PBKDF2_HMAC__imp__PKCS5_PBKDF2_HMAC_SHA1__imp__PKCS5_pbe2_set__imp__PKCS5_pbe2_set_iv__imp__PKCS5_pbe_set__imp__PKCS5_pbe_set0_algor__imp__PKCS5_pbkdf2_set__imp__PKCS5_v2_PBE_keyivgen__imp__PKCS7_ATTR_SIGN_it__imp__PKCS7_ATTR_VERIFY_it__imp__PKCS7_DIGEST_free__imp__PKCS7_DIGEST_it__imp__PKCS7_DIGEST_new__imp__PKCS7_ENCRYPT_free__imp__PKCS7_ENCRYPT_it__imp__PKCS7_ENCRYPT_new__imp__PKCS7_ENC_CONTENT_free__imp__PKCS7_ENC_CONTENT_it__imp__PKCS7_ENC_CONTENT_new__imp__PKCS7_ENVELOPE_free__imp__PKCS7_ENVELOPE_it__imp__PKCS7_ENVELOPE_new__imp__PKCS7_ISSUER_AND_SERIAL_digest__imp__PKCS7_ISSUER_AND_SERIAL_free__imp__PKCS7_ISSUER_AND_SERIAL_it__imp__PKCS7_ISSUER_AND_SERIAL_new__imp__PKCS7_RECIP_INFO_free__imp__PKCS7_RECIP_INFO_get0_alg__imp__PKCS7_RECIP_INFO_it__imp__PKCS7_RECIP_INFO_new__imp__PKCS7_RECIP_INFO_set__imp__PKCS7_SIGNED_free__imp__PKCS7_SIGNED_it__imp__PKCS7_SIGNED_new__imp__PKCS7_SIGNER_INFO_free__imp__PKCS7_SIGNER_INFO_get0_algs__imp__PKCS7_SIGNER_INFO_it__imp__PKCS7_SIGNER_INFO_new__imp__PKCS7_SIGNER_INFO_set__imp__PKCS7_SIGNER_INFO_sign__imp__PKCS7_SIGN_ENVELOPE_free__imp__PKCS7_SIGN_ENVELOPE_it__imp__PKCS7_SIGN_ENVELOPE_new__imp__PKCS7_add0_attrib_signing_time__imp__PKCS7_add1_attrib_digest__imp__PKCS7_add_attrib_content_type__imp__PKCS7_add_attrib_smimecap__imp__PKCS7_add_attribute__imp__PKCS7_add_certificate__imp__PKCS7_add_crl__imp__PKCS7_add_recipient__imp__PKCS7_add_recipient_info__imp__PKCS7_add_signature__imp__PKCS7_add_signed_attribute__imp__PKCS7_add_signer__imp__PKCS7_cert_from_signer_info__imp__PKCS7_content_new__imp__PKCS7_ctrl__imp__PKCS7_dataDecode__imp__PKCS7_dataFinal__imp__PKCS7_dataInit__imp__PKCS7_dataVerify__imp__PKCS7_decrypt__imp__PKCS7_digest_from_attributes__imp__PKCS7_dup__imp__PKCS7_encrypt__imp__PKCS7_final__imp__PKCS7_free__imp__PKCS7_get0_signers__imp__PKCS7_get_attribute__imp__PKCS7_get_issuer_and_serial__imp__PKCS7_get_signed_attribute__imp__PKCS7_get_signer_info__imp__PKCS7_get_smimecap__imp__PKCS7_it__imp__PKCS7_new__imp__PKCS7_print_ctx__imp__PKCS7_set0_type_other__imp__PKCS7_set_attributes__imp__PKCS7_set_cipher__imp__PKCS7_set_content__imp__PKCS7_set_digest__imp__PKCS7_set_signed_attributes__imp__PKCS7_set_type__imp__PKCS7_sign__imp__PKCS7_sign_add_signer__imp__PKCS7_signatureVerify__imp__PKCS7_simple_smimecap__imp__PKCS7_stream__imp__PKCS7_to_TS_TST_INFO__imp__PKCS7_verify__imp__PKCS8_PRIV_KEY_INFO_free__imp__PKCS8_PRIV_KEY_INFO_it__imp__PKCS8_PRIV_KEY_INFO_new__imp__PKCS8_add_keyusage__imp__PKCS8_decrypt__imp__PKCS8_encrypt__imp__PKCS8_pkey_get0__imp__PKCS8_pkey_set0__imp__PKCS8_set_broken__imp__PKEY_USAGE_PERIOD_free__imp__PKEY_USAGE_PERIOD_it__imp__PKEY_USAGE_PERIOD_new__imp__POLICYINFO_free__imp__POLICYINFO_it__imp__POLICYINFO_new__imp__POLICYQUALINFO_free__imp__POLICYQUALINFO_it__imp__POLICYQUALINFO_new__imp__POLICY_CONSTRAINTS_free__imp__POLICY_CONSTRAINTS_it__imp__POLICY_CONSTRAINTS_new__imp__POLICY_MAPPINGS_it__imp__POLICY_MAPPING_free__imp__POLICY_MAPPING_it__imp__POLICY_MAPPING_new__imp__PROXY_CERT_INFO_EXTENSION_free__imp__PROXY_CERT_INFO_EXTENSION_it__imp__PROXY_CERT_INFO_EXTENSION_new__imp__PROXY_POLICY_free__imp__PROXY_POLICY_it__imp__PROXY_POLICY_new__imp__RAND_SSLeay__imp__RAND_add__imp__RAND_bytes__imp__RAND_cleanup__imp__RAND_egd__imp__RAND_egd_bytes__imp__RAND_event__imp__RAND_file_name__imp__RAND_get_rand_method__imp__RAND_load_file__imp__RAND_poll__imp__RAND_pseudo_bytes__imp__RAND_query_egd_bytes__imp__RAND_screen__imp__RAND_seed__imp__RAND_set_rand_engine__imp__RAND_set_rand_method__imp__RAND_status__imp__RAND_write_file__imp__RC2_cbc_encrypt__imp__RC2_cfb64_encrypt__imp__RC2_decrypt__imp__RC2_ecb_encrypt__imp__RC2_encrypt__imp__RC2_ofb64_encrypt__imp__RC2_set_key__imp__RC4__imp__RC4_options__imp__RC4_set_key__imp__RIPEMD160__imp__RIPEMD160_Final__imp__RIPEMD160_Init__imp__RIPEMD160_Transform__imp__RIPEMD160_Update__imp__RSAPrivateKey_dup__imp__RSAPrivateKey_it__imp__RSAPublicKey_dup__imp__RSAPublicKey_it__imp__RSA_OAEP_PARAMS_free__imp__RSA_OAEP_PARAMS_it__imp__RSA_OAEP_PARAMS_new__imp__RSA_PKCS1_SSLeay__imp__RSA_PSS_PARAMS_free__imp__RSA_PSS_PARAMS_it__imp__RSA_PSS_PARAMS_new__imp__RSA_X931_hash_id__imp__RSA_blinding_off__imp__RSA_blinding_on__imp__RSA_check_key__imp__RSA_flags__imp__RSA_free__imp__RSA_generate_key__imp__RSA_generate_key_ex__imp__RSA_get_default_method__imp__RSA_get_ex_data__imp__RSA_get_ex_new_index__imp__RSA_get_method__imp__RSA_memory_lock__imp__RSA_new__imp__RSA_new_method__imp__RSA_null_method__imp__RSA_padding_add_PKCS1_OAEP__imp__RSA_padding_add_PKCS1_OAEP_mgf1__imp__RSA_padding_add_PKCS1_PSS__imp__RSA_padding_add_PKCS1_PSS_mgf1__imp__RSA_padding_add_PKCS1_type_1__imp__RSA_padding_add_PKCS1_type_2__imp__RSA_padding_add_SSLv23__imp__RSA_padding_add_X931__imp__RSA_padding_add_none__imp__RSA_padding_check_PKCS1_OAEP__imp__RSA_padding_check_PKCS1_OAEP_mgf1__imp__RSA_padding_check_PKCS1_type_1__imp__RSA_padding_check_PKCS1_type_2__imp__RSA_padding_check_SSLv23__imp__RSA_padding_check_X931__imp__RSA_padding_check_none__imp__RSA_print__imp__RSA_print_fp__imp__RSA_private_decrypt__imp__RSA_private_encrypt__imp__RSA_public_decrypt__imp__RSA_public_encrypt__imp__RSA_set_default_method__imp__RSA_set_ex_data__imp__RSA_set_method__imp__RSA_setup_blinding__imp__RSA_sign__imp__RSA_sign_ASN1_OCTET_STRING__imp__RSA_size__imp__RSA_up_ref__imp__RSA_verify__imp__RSA_verify_ASN1_OCTET_STRING__imp__RSA_verify_PKCS1_PSS__imp__RSA_verify_PKCS1_PSS_mgf1__imp__SEED_cbc_encrypt__imp__SEED_cfb128_encrypt__imp__SEED_decrypt__imp__SEED_ecb_encrypt__imp__SEED_encrypt__imp__SEED_ofb128_encrypt__imp__SEED_set_key__imp__SHA__imp__SHA1__imp__SHA1_Final__imp__SHA1_Init__imp__SHA1_Transform__imp__SHA1_Update__imp__SHA224__imp__SHA224_Final__imp__SHA224_Init__imp__SHA224_Update__imp__SHA256__imp__SHA256_Final__imp__SHA256_Init__imp__SHA256_Transform__imp__SHA256_Update__imp__SHA384__imp__SHA384_Final__imp__SHA384_Init__imp__SHA384_Update__imp__SHA512__imp__SHA512_Final__imp__SHA512_Init__imp__SHA512_Transform__imp__SHA512_Update__imp__SHA_Final__imp__SHA_Init__imp__SHA_Transform__imp__SHA_Update__imp__SMIME_crlf_copy__imp__SMIME_read_ASN1__imp__SMIME_read_CMS__imp__SMIME_read_PKCS7__imp__SMIME_text__imp__SMIME_write_ASN1__imp__SMIME_write_CMS__imp__SMIME_write_PKCS7__imp__SRP_Calc_A__imp__SRP_Calc_B__imp__SRP_Calc_client_key__imp__SRP_Calc_server_key__imp__SRP_Calc_u__imp__SRP_Calc_x__imp__SRP_VBASE_free__imp__SRP_VBASE_get1_by_user__imp__SRP_VBASE_get_by_user__imp__SRP_VBASE_init__imp__SRP_VBASE_new__imp__SRP_Verify_A_mod_N__imp__SRP_Verify_B_mod_N__imp__SRP_check_known_gN_param__imp__SRP_create_verifier__imp__SRP_create_verifier_BN__imp__SRP_get_default_gN__imp__SRP_user_pwd_free__imp__SSLeay__imp__SSLeay_version__imp__SXNETID_free__imp__SXNETID_it__imp__SXNETID_new__imp__SXNET_add_id_INTEGER__imp__SXNET_add_id_asc__imp__SXNET_add_id_ulong__imp__SXNET_free__imp__SXNET_get_id_INTEGER__imp__SXNET_get_id_asc__imp__SXNET_get_id_ulong__imp__SXNET_it__imp__SXNET_new__imp__TS_ACCURACY_dup__imp__TS_ACCURACY_free__imp__TS_ACCURACY_get_micros__imp__TS_ACCURACY_get_millis__imp__TS_ACCURACY_get_seconds__imp__TS_ACCURACY_new__imp__TS_ACCURACY_set_micros__imp__TS_ACCURACY_set_millis__imp__TS_ACCURACY_set_seconds__imp__TS_ASN1_INTEGER_print_bio__imp__TS_CONF_get_tsa_section__imp__TS_CONF_load_cert__imp__TS_CONF_load_certs__imp__TS_CONF_load_key__imp__TS_CONF_set_accuracy__imp__TS_CONF_set_certs__imp__TS_CONF_set_clock_precision_digits__imp__TS_CONF_set_crypto_device__imp__TS_CONF_set_def_policy__imp__TS_CONF_set_default_engine__imp__TS_CONF_set_digests__imp__TS_CONF_set_ess_cert_id_chain__imp__TS_CONF_set_ordering__imp__TS_CONF_set_policies__imp__TS_CONF_set_serial__imp__TS_CONF_set_signer_cert__imp__TS_CONF_set_signer_key__imp__TS_CONF_set_tsa_name__imp__TS_MSG_IMPRINT_dup__imp__TS_MSG_IMPRINT_free__imp__TS_MSG_IMPRINT_get_algo__imp__TS_MSG_IMPRINT_get_msg__imp__TS_MSG_IMPRINT_new__imp__TS_MSG_IMPRINT_print_bio__imp__TS_MSG_IMPRINT_set_algo__imp__TS_MSG_IMPRINT_set_msg__imp__TS_OBJ_print_bio__imp__TS_REQ_add_ext__imp__TS_REQ_delete_ext__imp__TS_REQ_dup__imp__TS_REQ_ext_free__imp__TS_REQ_free__imp__TS_REQ_get_cert_req__imp__TS_REQ_get_ext__imp__TS_REQ_get_ext_by_NID__imp__TS_REQ_get_ext_by_OBJ__imp__TS_REQ_get_ext_by_critical__imp__TS_REQ_get_ext_count__imp__TS_REQ_get_ext_d2i__imp__TS_REQ_get_exts__imp__TS_REQ_get_msg_imprint__imp__TS_REQ_get_nonce__imp__TS_REQ_get_policy_id__imp__TS_REQ_get_version__imp__TS_REQ_new__imp__TS_REQ_print_bio__imp__TS_REQ_set_cert_req__imp__TS_REQ_set_msg_imprint__imp__TS_REQ_set_nonce__imp__TS_REQ_set_policy_id__imp__TS_REQ_set_version__imp__TS_REQ_to_TS_VERIFY_CTX__imp__TS_RESP_CTX_add_failure_info__imp__TS_RESP_CTX_add_flags__imp__TS_RESP_CTX_add_md__imp__TS_RESP_CTX_add_policy__imp__TS_RESP_CTX_free__imp__TS_RESP_CTX_get_request__imp__TS_RESP_CTX_get_tst_info__imp__TS_RESP_CTX_new__imp__TS_RESP_CTX_set_accuracy__imp__TS_RESP_CTX_set_certs__imp__TS_RESP_CTX_set_clock_precision_digits__imp__TS_RESP_CTX_set_def_policy__imp__TS_RESP_CTX_set_extension_cb__imp__TS_RESP_CTX_set_serial_cb__imp__TS_RESP_CTX_set_signer_cert__imp__TS_RESP_CTX_set_signer_key__imp__TS_RESP_CTX_set_status_info__imp__TS_RESP_CTX_set_status_info_cond__imp__TS_RESP_CTX_set_time_cb__imp__TS_RESP_create_response__imp__TS_RESP_dup__imp__TS_RESP_free__imp__TS_RESP_get_status_info__imp__TS_RESP_get_token__imp__TS_RESP_get_tst_info__imp__TS_RESP_new__imp__TS_RESP_print_bio__imp__TS_RESP_set_status_info__imp__TS_RESP_set_tst_info__imp__TS_RESP_verify_response__imp__TS_RESP_verify_signature__imp__TS_RESP_verify_token__imp__TS_STATUS_INFO_dup__imp__TS_STATUS_INFO_free__imp__TS_STATUS_INFO_new__imp__TS_STATUS_INFO_print_bio__imp__TS_TST_INFO_add_ext__imp__TS_TST_INFO_delete_ext__imp__TS_TST_INFO_dup__imp__TS_TST_INFO_ext_free__imp__TS_TST_INFO_free__imp__TS_TST_INFO_get_accuracy__imp__TS_TST_INFO_get_ext__imp__TS_TST_INFO_get_ext_by_NID__imp__TS_TST_INFO_get_ext_by_OBJ__imp__TS_TST_INFO_get_ext_by_critical__imp__TS_TST_INFO_get_ext_count__imp__TS_TST_INFO_get_ext_d2i__imp__TS_TST_INFO_get_exts__imp__TS_TST_INFO_get_msg_imprint__imp__TS_TST_INFO_get_nonce__imp__TS_TST_INFO_get_ordering__imp__TS_TST_INFO_get_policy_id__imp__TS_TST_INFO_get_serial__imp__TS_TST_INFO_get_time__imp__TS_TST_INFO_get_tsa__imp__TS_TST_INFO_get_version__imp__TS_TST_INFO_new__imp__TS_TST_INFO_print_bio__imp__TS_TST_INFO_set_accuracy__imp__TS_TST_INFO_set_msg_imprint__imp__TS_TST_INFO_set_nonce__imp__TS_TST_INFO_set_ordering__imp__TS_TST_INFO_set_policy_id__imp__TS_TST_INFO_set_serial__imp__TS_TST_INFO_set_time__imp__TS_TST_INFO_set_tsa__imp__TS_TST_INFO_set_version__imp__TS_VERIFY_CTX_cleanup__imp__TS_VERIFY_CTX_free__imp__TS_VERIFY_CTX_init__imp__TS_VERIFY_CTX_new__imp__TS_X509_ALGOR_print_bio__imp__TS_ext_print_bio__imp__TXT_DB_create_index__imp__TXT_DB_free__imp__TXT_DB_get_by_index__imp__TXT_DB_insert__imp__TXT_DB_read__imp__TXT_DB_write__imp__UI_OpenSSL__imp__UI_UTIL_read_pw__imp__UI_UTIL_read_pw_string__imp__UI_add_error_string__imp__UI_add_info_string__imp__UI_add_input_boolean__imp__UI_add_input_string__imp__UI_add_user_data__imp__UI_add_verify_string__imp__UI_construct_prompt__imp__UI_create_method__imp__UI_ctrl__imp__UI_destroy_method__imp__UI_dup_error_string__imp__UI_dup_info_string__imp__UI_dup_input_boolean__imp__UI_dup_input_string__imp__UI_dup_verify_string__imp__UI_free__imp__UI_get0_action_string__imp__UI_get0_output_string__imp__UI_get0_result__imp__UI_get0_result_string__imp__UI_get0_test_string__imp__UI_get0_user_data__imp__UI_get_default_method__imp__UI_get_ex_data__imp__UI_get_ex_new_index__imp__UI_get_input_flags__imp__UI_get_method__imp__UI_get_result_maxsize__imp__UI_get_result_minsize__imp__UI_get_string_type__imp__UI_method_get_closer__imp__UI_method_get_flusher__imp__UI_method_get_opener__imp__UI_method_get_prompt_constructor__imp__UI_method_get_reader__imp__UI_method_get_writer__imp__UI_method_set_closer__imp__UI_method_set_flusher__imp__UI_method_set_opener__imp__UI_method_set_prompt_constructor__imp__UI_method_set_reader__imp__UI_method_set_writer__imp__UI_new__imp__UI_new_method__imp__UI_process__imp__UI_set_default_method__imp__UI_set_ex_data__imp__UI_set_method__imp__UI_set_result__imp__USERNOTICE_free__imp__USERNOTICE_it__imp__USERNOTICE_new__imp__UTF8_getc__imp__UTF8_putc__imp__WHIRLPOOL__imp__WHIRLPOOL_BitUpdate__imp__WHIRLPOOL_Final__imp__WHIRLPOOL_Init__imp__WHIRLPOOL_Update__imp__X509V3_EXT_CRL_add_conf__imp__X509V3_EXT_CRL_add_nconf__imp__X509V3_EXT_REQ_add_conf__imp__X509V3_EXT_REQ_add_nconf__imp__X509V3_EXT_add__imp__X509V3_EXT_add_alias__imp__X509V3_EXT_add_conf__imp__X509V3_EXT_add_list__imp__X509V3_EXT_add_nconf__imp__X509V3_EXT_add_nconf_sk__imp__X509V3_EXT_cleanup__imp__X509V3_EXT_conf__imp__X509V3_EXT_conf_nid__imp__X509V3_EXT_d2i__imp__X509V3_EXT_free__imp__X509V3_EXT_get__imp__X509V3_EXT_get_nid__imp__X509V3_EXT_i2d__imp__X509V3_EXT_nconf__imp__X509V3_EXT_nconf_nid__imp__X509V3_EXT_print__imp__X509V3_EXT_print_fp__imp__X509V3_EXT_val_prn__imp__X509V3_NAME_from_section__imp__X509V3_add1_i2d__imp__X509V3_add_standard_extensions__imp__X509V3_add_value__imp__X509V3_add_value_bool__imp__X509V3_add_value_bool_nf__imp__X509V3_add_value_int__imp__X509V3_add_value_uchar__imp__X509V3_conf_free__imp__X509V3_extensions_print__imp__X509V3_get_d2i__imp__X509V3_get_section__imp__X509V3_get_string__imp__X509V3_get_value_bool__imp__X509V3_get_value_int__imp__X509V3_parse_list__imp__X509V3_section_free__imp__X509V3_set_conf_lhash__imp__X509V3_set_ctx__imp__X509V3_set_nconf__imp__X509V3_string_free__imp__X509_ALGORS_it__imp__X509_ALGOR_cmp__imp__X509_ALGOR_dup__imp__X509_ALGOR_free__imp__X509_ALGOR_get0__imp__X509_ALGOR_it__imp__X509_ALGOR_new__imp__X509_ALGOR_set0__imp__X509_ALGOR_set_md__imp__X509_ATTRIBUTE_count__imp__X509_ATTRIBUTE_create__imp__X509_ATTRIBUTE_create_by_NID__imp__X509_ATTRIBUTE_create_by_OBJ__imp__X509_ATTRIBUTE_create_by_txt__imp__X509_ATTRIBUTE_dup__imp__X509_ATTRIBUTE_free__imp__X509_ATTRIBUTE_get0_data__imp__X509_ATTRIBUTE_get0_object__imp__X509_ATTRIBUTE_get0_type__imp__X509_ATTRIBUTE_it__imp__X509_ATTRIBUTE_new__imp__X509_ATTRIBUTE_set1_data__imp__X509_ATTRIBUTE_set1_object__imp__X509_CERT_AUX_free__imp__X509_CERT_AUX_it__imp__X509_CERT_AUX_new__imp__X509_CERT_AUX_print__imp__X509_CERT_PAIR_free__imp__X509_CERT_PAIR_it__imp__X509_CERT_PAIR_new__imp__X509_CINF_free__imp__X509_CINF_it__imp__X509_CINF_new__imp__X509_CRL_INFO_free__imp__X509_CRL_INFO_it__imp__X509_CRL_INFO_new__imp__X509_CRL_METHOD_free__imp__X509_CRL_METHOD_new__imp__X509_CRL_add0_revoked__imp__X509_CRL_add1_ext_i2d__imp__X509_CRL_add_ext__imp__X509_CRL_check_suiteb__imp__X509_CRL_cmp__imp__X509_CRL_delete_ext__imp__X509_CRL_diff__imp__X509_CRL_digest__imp__X509_CRL_dup__imp__X509_CRL_free__imp__X509_CRL_get0_by_cert__imp__X509_CRL_get0_by_serial__imp__X509_CRL_get_ext__imp__X509_CRL_get_ext_by_NID__imp__X509_CRL_get_ext_by_OBJ__imp__X509_CRL_get_ext_by_critical__imp__X509_CRL_get_ext_count__imp__X509_CRL_get_ext_d2i__imp__X509_CRL_get_meth_data__imp__X509_CRL_http_nbio__imp__X509_CRL_it__imp__X509_CRL_match__imp__X509_CRL_new__imp__X509_CRL_print__imp__X509_CRL_print_fp__imp__X509_CRL_set_default_method__imp__X509_CRL_set_issuer_name__imp__X509_CRL_set_lastUpdate__imp__X509_CRL_set_meth_data__imp__X509_CRL_set_nextUpdate__imp__X509_CRL_set_version__imp__X509_CRL_sign__imp__X509_CRL_sign_ctx__imp__X509_CRL_sort__imp__X509_CRL_verify__imp__X509_EXTENSIONS_it__imp__X509_EXTENSION_create_by_NID__imp__X509_EXTENSION_create_by_OBJ__imp__X509_EXTENSION_dup__imp__X509_EXTENSION_free__imp__X509_EXTENSION_get_critical__imp__X509_EXTENSION_get_data__imp__X509_EXTENSION_get_object__imp__X509_EXTENSION_it__imp__X509_EXTENSION_new__imp__X509_EXTENSION_set_critical__imp__X509_EXTENSION_set_data__imp__X509_EXTENSION_set_object__imp__X509_INFO_free__imp__X509_INFO_new__imp__X509_LOOKUP_by_alias__imp__X509_LOOKUP_by_fingerprint__imp__X509_LOOKUP_by_issuer_serial__imp__X509_LOOKUP_by_subject__imp__X509_LOOKUP_ctrl__imp__X509_LOOKUP_file__imp__X509_LOOKUP_free__imp__X509_LOOKUP_hash_dir__imp__X509_LOOKUP_init__imp__X509_LOOKUP_new__imp__X509_LOOKUP_shutdown__imp__X509_NAME_ENTRY_create_by_NID__imp__X509_NAME_ENTRY_create_by_OBJ__imp__X509_NAME_ENTRY_create_by_txt__imp__X509_NAME_ENTRY_dup__imp__X509_NAME_ENTRY_free__imp__X509_NAME_ENTRY_get_data__imp__X509_NAME_ENTRY_get_object__imp__X509_NAME_ENTRY_it__imp__X509_NAME_ENTRY_new__imp__X509_NAME_ENTRY_set_data__imp__X509_NAME_ENTRY_set_object__imp__X509_NAME_add_entry__imp__X509_NAME_add_entry_by_NID__imp__X509_NAME_add_entry_by_OBJ__imp__X509_NAME_add_entry_by_txt__imp__X509_NAME_cmp__imp__X509_NAME_delete_entry__imp__X509_NAME_digest__imp__X509_NAME_dup__imp__X509_NAME_entry_count__imp__X509_NAME_free__imp__X509_NAME_get_entry__imp__X509_NAME_get_index_by_NID__imp__X509_NAME_get_index_by_OBJ__imp__X509_NAME_get_text_by_NID__imp__X509_NAME_get_text_by_OBJ__imp__X509_NAME_hash__imp__X509_NAME_hash_old__imp__X509_NAME_it__imp__X509_NAME_new__imp__X509_NAME_oneline__imp__X509_NAME_print__imp__X509_NAME_print_ex__imp__X509_NAME_print_ex_fp__imp__X509_NAME_set__imp__X509_OBJECT_free_contents__imp__X509_OBJECT_idx_by_subject__imp__X509_OBJECT_retrieve_by_subject__imp__X509_OBJECT_retrieve_match__imp__X509_OBJECT_up_ref_count__imp__X509_PKEY_free__imp__X509_PKEY_new__imp__X509_POLICY_NODE_print__imp__X509_PUBKEY_free__imp__X509_PUBKEY_get__imp__X509_PUBKEY_get0_param__imp__X509_PUBKEY_it__imp__X509_PUBKEY_new__imp__X509_PUBKEY_set__imp__X509_PUBKEY_set0_param__imp__X509_PURPOSE_add__imp__X509_PURPOSE_cleanup__imp__X509_PURPOSE_get0__imp__X509_PURPOSE_get0_name__imp__X509_PURPOSE_get0_sname__imp__X509_PURPOSE_get_by_id__imp__X509_PURPOSE_get_by_sname__imp__X509_PURPOSE_get_count__imp__X509_PURPOSE_get_id__imp__X509_PURPOSE_get_trust__imp__X509_PURPOSE_set__imp__X509_REQ_INFO_free__imp__X509_REQ_INFO_it__imp__X509_REQ_INFO_new__imp__X509_REQ_add1_attr__imp__X509_REQ_add1_attr_by_NID__imp__X509_REQ_add1_attr_by_OBJ__imp__X509_REQ_add1_attr_by_txt__imp__X509_REQ_add_extensions__imp__X509_REQ_add_extensions_nid__imp__X509_REQ_check_private_key__imp__X509_REQ_delete_attr__imp__X509_REQ_digest__imp__X509_REQ_dup__imp__X509_REQ_extension_nid__imp__X509_REQ_free__imp__X509_REQ_get1_email__imp__X509_REQ_get_attr__imp__X509_REQ_get_attr_by_NID__imp__X509_REQ_get_attr_by_OBJ__imp__X509_REQ_get_attr_count__imp__X509_REQ_get_extension_nids__imp__X509_REQ_get_extensions__imp__X509_REQ_get_pubkey__imp__X509_REQ_it__imp__X509_REQ_new__imp__X509_REQ_print__imp__X509_REQ_print_ex__imp__X509_REQ_print_fp__imp__X509_REQ_set_extension_nids__imp__X509_REQ_set_pubkey__imp__X509_REQ_set_subject_name__imp__X509_REQ_set_version__imp__X509_REQ_sign__imp__X509_REQ_sign_ctx__imp__X509_REQ_to_X509__imp__X509_REQ_verify__imp__X509_REVOKED_add1_ext_i2d__imp__X509_REVOKED_add_ext__imp__X509_REVOKED_delete_ext__imp__X509_REVOKED_dup__imp__X509_REVOKED_free__imp__X509_REVOKED_get_ext__imp__X509_REVOKED_get_ext_by_NID__imp__X509_REVOKED_get_ext_by_OBJ__imp__X509_REVOKED_get_ext_by_critical__imp__X509_REVOKED_get_ext_count__imp__X509_REVOKED_get_ext_d2i__imp__X509_REVOKED_it__imp__X509_REVOKED_new__imp__X509_REVOKED_set_revocationDate__imp__X509_REVOKED_set_serialNumber__imp__X509_SIG_free__imp__X509_SIG_it__imp__X509_SIG_new__imp__X509_STORE_CTX_cleanup__imp__X509_STORE_CTX_free__imp__X509_STORE_CTX_get0_current_crl__imp__X509_STORE_CTX_get0_current_issuer__imp__X509_STORE_CTX_get0_param__imp__X509_STORE_CTX_get0_parent_ctx__imp__X509_STORE_CTX_get0_policy_tree__imp__X509_STORE_CTX_get0_store__imp__X509_STORE_CTX_get1_chain__imp__X509_STORE_CTX_get1_issuer__imp__X509_STORE_CTX_get_chain__imp__X509_STORE_CTX_get_current_cert__imp__X509_STORE_CTX_get_error__imp__X509_STORE_CTX_get_error_depth__imp__X509_STORE_CTX_get_ex_data__imp__X509_STORE_CTX_get_ex_new_index__imp__X509_STORE_CTX_get_explicit_policy__imp__X509_STORE_CTX_init__imp__X509_STORE_CTX_new__imp__X509_STORE_CTX_purpose_inherit__imp__X509_STORE_CTX_set0_crls__imp__X509_STORE_CTX_set0_param__imp__X509_STORE_CTX_set_cert__imp__X509_STORE_CTX_set_chain__imp__X509_STORE_CTX_set_default__imp__X509_STORE_CTX_set_depth__imp__X509_STORE_CTX_set_error__imp__X509_STORE_CTX_set_ex_data__imp__X509_STORE_CTX_set_flags__imp__X509_STORE_CTX_set_purpose__imp__X509_STORE_CTX_set_time__imp__X509_STORE_CTX_set_trust__imp__X509_STORE_CTX_set_verify_cb__imp__X509_STORE_CTX_trusted_stack__imp__X509_STORE_add_cert__imp__X509_STORE_add_crl__imp__X509_STORE_add_lookup__imp__X509_STORE_free__imp__X509_STORE_get1_certs__imp__X509_STORE_get1_crls__imp__X509_STORE_get_by_subject__imp__X509_STORE_load_locations__imp__X509_STORE_new__imp__X509_STORE_set1_param__imp__X509_STORE_set_default_paths__imp__X509_STORE_set_depth__imp__X509_STORE_set_flags__imp__X509_STORE_set_lookup_crls_cb__imp__X509_STORE_set_purpose__imp__X509_STORE_set_trust__imp__X509_STORE_set_verify_cb__imp__X509_TRUST_add__imp__X509_TRUST_cleanup__imp__X509_TRUST_get0__imp__X509_TRUST_get0_name__imp__X509_TRUST_get_by_id__imp__X509_TRUST_get_count__imp__X509_TRUST_get_flags__imp__X509_TRUST_get_trust__imp__X509_TRUST_set__imp__X509_TRUST_set_default__imp__X509_VAL_free__imp__X509_VAL_it__imp__X509_VAL_new__imp__X509_VERIFY_PARAM_add0_policy__imp__X509_VERIFY_PARAM_add0_table__imp__X509_VERIFY_PARAM_add1_host__imp__X509_VERIFY_PARAM_clear_flags__imp__X509_VERIFY_PARAM_free__imp__X509_VERIFY_PARAM_get0__imp__X509_VERIFY_PARAM_get0_name__imp__X509_VERIFY_PARAM_get0_peername__imp__X509_VERIFY_PARAM_get_count__imp__X509_VERIFY_PARAM_get_depth__imp__X509_VERIFY_PARAM_get_flags__imp__X509_VERIFY_PARAM_inherit__imp__X509_VERIFY_PARAM_lookup__imp__X509_VERIFY_PARAM_new__imp__X509_VERIFY_PARAM_set1__imp__X509_VERIFY_PARAM_set1_email__imp__X509_VERIFY_PARAM_set1_host__imp__X509_VERIFY_PARAM_set1_ip__imp__X509_VERIFY_PARAM_set1_ip_asc__imp__X509_VERIFY_PARAM_set1_name__imp__X509_VERIFY_PARAM_set1_policies__imp__X509_VERIFY_PARAM_set_depth__imp__X509_VERIFY_PARAM_set_flags__imp__X509_VERIFY_PARAM_set_hostflags__imp__X509_VERIFY_PARAM_set_purpose__imp__X509_VERIFY_PARAM_set_time__imp__X509_VERIFY_PARAM_set_trust__imp__X509_VERIFY_PARAM_table_cleanup__imp__X509_add1_ext_i2d__imp__X509_add1_reject_object__imp__X509_add1_trust_object__imp__X509_add_ext__imp__X509_alias_get0__imp__X509_alias_set1__imp__X509_certificate_type__imp__X509_chain_check_suiteb__imp__X509_chain_up_ref__imp__X509_check_akid__imp__X509_check_ca__imp__X509_check_email__imp__X509_check_host__imp__X509_check_ip__imp__X509_check_ip_asc__imp__X509_check_issued__imp__X509_check_private_key__imp__X509_check_purpose__imp__X509_check_trust__imp__X509_cmp__imp__X509_cmp_current_time__imp__X509_cmp_time__imp__X509_delete_ext__imp__X509_digest__imp__X509_dup__imp__X509_email_free__imp__X509_find_by_issuer_and_serial__imp__X509_find_by_subject__imp__X509_free__imp__X509_get0_pubkey_bitstr__imp__X509_get0_signature__imp__X509_get1_email__imp__X509_get1_ocsp__imp__X509_get_default_cert_area__imp__X509_get_default_cert_dir__imp__X509_get_default_cert_dir_env__imp__X509_get_default_cert_file__imp__X509_get_default_cert_file_env__imp__X509_get_default_private_dir__imp__X509_get_ex_data__imp__X509_get_ex_new_index__imp__X509_get_ext__imp__X509_get_ext_by_NID__imp__X509_get_ext_by_OBJ__imp__X509_get_ext_by_critical__imp__X509_get_ext_count__imp__X509_get_ext_d2i__imp__X509_get_issuer_name__imp__X509_get_pubkey__imp__X509_get_pubkey_parameters__imp__X509_get_serialNumber__imp__X509_get_signature_nid__imp__X509_get_subject_name__imp__X509_gmtime_adj__imp__X509_http_nbio__imp__X509_issuer_and_serial_cmp__imp__X509_issuer_and_serial_hash__imp__X509_issuer_name_cmp__imp__X509_issuer_name_hash__imp__X509_issuer_name_hash_old__imp__X509_it__imp__X509_keyid_get0__imp__X509_keyid_set1__imp__X509_load_cert_crl_file__imp__X509_load_cert_file__imp__X509_load_crl_file__imp__X509_new__imp__X509_ocspid_print__imp__X509_policy_check__imp__X509_policy_level_get0_node__imp__X509_policy_level_node_count__imp__X509_policy_node_get0_parent__imp__X509_policy_node_get0_policy__imp__X509_policy_node_get0_qualifiers__imp__X509_policy_tree_free__imp__X509_policy_tree_get0_level__imp__X509_policy_tree_get0_policies__imp__X509_policy_tree_get0_user_policies__imp__X509_policy_tree_level_count__imp__X509_print__imp__X509_print_ex__imp__X509_print_ex_fp__imp__X509_print_fp__imp__X509_pubkey_digest__imp__X509_reject_clear__imp__X509_set_ex_data__imp__X509_set_issuer_name__imp__X509_set_notAfter__imp__X509_set_notBefore__imp__X509_set_pubkey__imp__X509_set_serialNumber__imp__X509_set_subject_name__imp__X509_set_version__imp__X509_sign__imp__X509_sign_ctx__imp__X509_signature_dump__imp__X509_signature_print__imp__X509_subject_name_cmp__imp__X509_subject_name_hash__imp__X509_subject_name_hash_old__imp__X509_supported_extension__imp__X509_time_adj__imp__X509_time_adj_ex__imp__X509_to_X509_REQ__imp__X509_trust_clear__imp__X509_verify__imp__X509_verify_cert__imp__X509_verify_cert_error_string__imp__X509at_add1_attr__imp__X509at_add1_attr_by_NID__imp__X509at_add1_attr_by_OBJ__imp__X509at_add1_attr_by_txt__imp__X509at_delete_attr__imp__X509at_get0_data_by_OBJ__imp__X509at_get_attr__imp__X509at_get_attr_by_NID__imp__X509at_get_attr_by_OBJ__imp__X509at_get_attr_count__imp__X509v3_add_ext__imp__X509v3_delete_ext__imp__X509v3_get_ext__imp__X509v3_get_ext_by_NID__imp__X509v3_get_ext_by_OBJ__imp__X509v3_get_ext_by_critical__imp__X509v3_get_ext_count__imp__ZLONG_it__imp___ossl_096_des_random_seed__imp___ossl_old_crypt__imp___ossl_old_des_cbc_cksum__imp___ossl_old_des_cbc_encrypt__imp___ossl_old_des_cfb64_encrypt__imp___ossl_old_des_cfb_encrypt__imp___ossl_old_des_crypt__imp___ossl_old_des_decrypt3__imp___ossl_old_des_ecb3_encrypt__imp___ossl_old_des_ecb_encrypt__imp___ossl_old_des_ede3_cbc_encrypt__imp___ossl_old_des_ede3_cfb64_encrypt__imp___ossl_old_des_ede3_ofb64_encrypt__imp___ossl_old_des_enc_read__imp___ossl_old_des_enc_write__imp___ossl_old_des_encrypt__imp___ossl_old_des_encrypt2__imp___ossl_old_des_encrypt3__imp___ossl_old_des_fcrypt__imp___ossl_old_des_is_weak_key__imp___ossl_old_des_key_sched__imp___ossl_old_des_ncbc_encrypt__imp___ossl_old_des_ofb64_encrypt__imp___ossl_old_des_ofb_encrypt__imp___ossl_old_des_options__imp___ossl_old_des_pcbc_encrypt__imp___ossl_old_des_quad_cksum__imp___ossl_old_des_random_key__imp___ossl_old_des_random_seed__imp___ossl_old_des_read_2passwords__imp___ossl_old_des_read_password__imp___ossl_old_des_read_pw__imp___ossl_old_des_read_pw_string__imp___ossl_old_des_set_key__imp___ossl_old_des_set_odd_parity__imp___ossl_old_des_string_to_2keys__imp___ossl_old_des_string_to_key__imp___ossl_old_des_xcbc_encrypt__imp___shadow_DES_check_key__imp___shadow_DES_rw_mode__imp__a2d_ASN1_OBJECT__imp__a2i_ASN1_ENUMERATED__imp__a2i_ASN1_INTEGER__imp__a2i_ASN1_STRING__imp__a2i_GENERAL_NAME__imp__a2i_IPADDRESS__imp__a2i_IPADDRESS_NC__imp__a2i_ipadd__imp__asn1_Finish__imp__asn1_GetSequence__imp__asn1_add_error__imp__asn1_const_Finish__imp__asn1_do_adb__imp__asn1_do_lock__imp__asn1_enc_free__imp__asn1_enc_init__imp__asn1_enc_restore__imp__asn1_enc_save__imp__asn1_ex_c2i__imp__asn1_ex_i2c__imp__asn1_get_choice_selector__imp__asn1_get_field_ptr__imp__asn1_set_choice_selector__imp__b2i_PVK_bio__imp__b2i_PrivateKey__imp__b2i_PrivateKey_bio__imp__b2i_PublicKey__imp__b2i_PublicKey_bio__imp__bn_add_words__imp__bn_div_words__imp__bn_dup_expand__imp__bn_expand2__imp__bn_mul_add_words__imp__bn_mul_words__imp__bn_sqr_words__imp__bn_sub_words__imp__c2i_ASN1_BIT_STRING__imp__c2i_ASN1_INTEGER__imp__c2i_ASN1_OBJECT__imp__check_defer__imp__d2i_ACCESS_DESCRIPTION__imp__d2i_ASN1_BIT_STRING__imp__d2i_ASN1_BMPSTRING__imp__d2i_ASN1_BOOLEAN__imp__d2i_ASN1_ENUMERATED__imp__d2i_ASN1_GENERALIZEDTIME__imp__d2i_ASN1_GENERALSTRING__imp__d2i_ASN1_IA5STRING__imp__d2i_ASN1_INTEGER__imp__d2i_ASN1_NULL__imp__d2i_ASN1_OBJECT__imp__d2i_ASN1_OCTET_STRING__imp__d2i_ASN1_PRINTABLE__imp__d2i_ASN1_PRINTABLESTRING__imp__d2i_ASN1_SEQUENCE_ANY__imp__d2i_ASN1_SET__imp__d2i_ASN1_SET_ANY__imp__d2i_ASN1_T61STRING__imp__d2i_ASN1_TIME__imp__d2i_ASN1_TYPE__imp__d2i_ASN1_UINTEGER__imp__d2i_ASN1_UNIVERSALSTRING__imp__d2i_ASN1_UTCTIME__imp__d2i_ASN1_UTF8STRING__imp__d2i_ASN1_VISIBLESTRING__imp__d2i_ASN1_bytes__imp__d2i_ASN1_type_bytes__imp__d2i_AUTHORITY_INFO_ACCESS__imp__d2i_AUTHORITY_KEYID__imp__d2i_AutoPrivateKey__imp__d2i_BASIC_CONSTRAINTS__imp__d2i_CERTIFICATEPOLICIES__imp__d2i_CMS_ContentInfo__imp__d2i_CMS_ReceiptRequest__imp__d2i_CMS_bio__imp__d2i_CRL_DIST_POINTS__imp__d2i_DHparams__imp__d2i_DHxparams__imp__d2i_DIRECTORYSTRING__imp__d2i_DISPLAYTEXT__imp__d2i_DIST_POINT__imp__d2i_DIST_POINT_NAME__imp__d2i_DSAPrivateKey__imp__d2i_DSAPrivateKey_bio__imp__d2i_DSAPrivateKey_fp__imp__d2i_DSAPublicKey__imp__d2i_DSA_PUBKEY__imp__d2i_DSA_PUBKEY_bio__imp__d2i_DSA_PUBKEY_fp__imp__d2i_DSA_SIG__imp__d2i_DSAparams__imp__d2i_ECDSA_SIG__imp__d2i_ECPKParameters__imp__d2i_ECParameters__imp__d2i_ECPrivateKey__imp__d2i_ECPrivateKey_bio__imp__d2i_ECPrivateKey_fp__imp__d2i_EC_PUBKEY__imp__d2i_EC_PUBKEY_bio__imp__d2i_EC_PUBKEY_fp__imp__d2i_EDIPARTYNAME__imp__d2i_ESS_CERT_ID__imp__d2i_ESS_ISSUER_SERIAL__imp__d2i_ESS_SIGNING_CERT__imp__d2i_EXTENDED_KEY_USAGE__imp__d2i_GENERAL_NAME__imp__d2i_GENERAL_NAMES__imp__d2i_ISSUING_DIST_POINT__imp__d2i_KRB5_APREQ__imp__d2i_KRB5_APREQBODY__imp__d2i_KRB5_AUTHDATA__imp__d2i_KRB5_AUTHENT__imp__d2i_KRB5_AUTHENTBODY__imp__d2i_KRB5_CHECKSUM__imp__d2i_KRB5_ENCDATA__imp__d2i_KRB5_ENCKEY__imp__d2i_KRB5_PRINCNAME__imp__d2i_KRB5_TICKET__imp__d2i_KRB5_TKTBODY__imp__d2i_NETSCAPE_CERT_SEQUENCE__imp__d2i_NETSCAPE_SPKAC__imp__d2i_NETSCAPE_SPKI__imp__d2i_NETSCAPE_X509__imp__d2i_NOTICEREF__imp__d2i_Netscape_RSA__imp__d2i_OCSP_BASICRESP__imp__d2i_OCSP_CERTID__imp__d2i_OCSP_CERTSTATUS__imp__d2i_OCSP_CRLID__imp__d2i_OCSP_ONEREQ__imp__d2i_OCSP_REQINFO__imp__d2i_OCSP_REQUEST__imp__d2i_OCSP_RESPBYTES__imp__d2i_OCSP_RESPDATA__imp__d2i_OCSP_RESPID__imp__d2i_OCSP_RESPONSE__imp__d2i_OCSP_REVOKEDINFO__imp__d2i_OCSP_SERVICELOC__imp__d2i_OCSP_SIGNATURE__imp__d2i_OCSP_SINGLERESP__imp__d2i_OTHERNAME__imp__d2i_PBE2PARAM__imp__d2i_PBEPARAM__imp__d2i_PBKDF2PARAM__imp__d2i_PKCS12__imp__d2i_PKCS12_BAGS__imp__d2i_PKCS12_MAC_DATA__imp__d2i_PKCS12_SAFEBAG__imp__d2i_PKCS12_bio__imp__d2i_PKCS12_fp__imp__d2i_PKCS7__imp__d2i_PKCS7_DIGEST__imp__d2i_PKCS7_ENCRYPT__imp__d2i_PKCS7_ENC_CONTENT__imp__d2i_PKCS7_ENVELOPE__imp__d2i_PKCS7_ISSUER_AND_SERIAL__imp__d2i_PKCS7_RECIP_INFO__imp__d2i_PKCS7_SIGNED__imp__d2i_PKCS7_SIGNER_INFO__imp__d2i_PKCS7_SIGN_ENVELOPE__imp__d2i_PKCS7_bio__imp__d2i_PKCS7_fp__imp__d2i_PKCS8PrivateKey_bio__imp__d2i_PKCS8PrivateKey_fp__imp__d2i_PKCS8_PRIV_KEY_INFO__imp__d2i_PKCS8_PRIV_KEY_INFO_bio__imp__d2i_PKCS8_PRIV_KEY_INFO_fp__imp__d2i_PKCS8_bio__imp__d2i_PKCS8_fp__imp__d2i_PKEY_USAGE_PERIOD__imp__d2i_POLICYINFO__imp__d2i_POLICYQUALINFO__imp__d2i_PROXY_CERT_INFO_EXTENSION__imp__d2i_PROXY_POLICY__imp__d2i_PUBKEY__imp__d2i_PUBKEY_bio__imp__d2i_PUBKEY_fp__imp__d2i_PrivateKey__imp__d2i_PrivateKey_bio__imp__d2i_PrivateKey_fp__imp__d2i_PublicKey__imp__d2i_RSAPrivateKey__imp__d2i_RSAPrivateKey_bio__imp__d2i_RSAPrivateKey_fp__imp__d2i_RSAPublicKey__imp__d2i_RSAPublicKey_bio__imp__d2i_RSAPublicKey_fp__imp__d2i_RSA_NET__imp__d2i_RSA_OAEP_PARAMS__imp__d2i_RSA_PSS_PARAMS__imp__d2i_RSA_PUBKEY__imp__d2i_RSA_PUBKEY_bio__imp__d2i_RSA_PUBKEY_fp__imp__d2i_SXNET__imp__d2i_SXNETID__imp__d2i_TS_ACCURACY__imp__d2i_TS_MSG_IMPRINT__imp__d2i_TS_MSG_IMPRINT_bio__imp__d2i_TS_MSG_IMPRINT_fp__imp__d2i_TS_REQ__imp__d2i_TS_REQ_bio__imp__d2i_TS_REQ_fp__imp__d2i_TS_RESP__imp__d2i_TS_RESP_bio__imp__d2i_TS_RESP_fp__imp__d2i_TS_STATUS_INFO__imp__d2i_TS_TST_INFO__imp__d2i_TS_TST_INFO_bio__imp__d2i_TS_TST_INFO_fp__imp__d2i_USERNOTICE__imp__d2i_X509__imp__d2i_X509_ALGOR__imp__d2i_X509_ALGORS__imp__d2i_X509_ATTRIBUTE__imp__d2i_X509_AUX__imp__d2i_X509_CERT_AUX__imp__d2i_X509_CERT_PAIR__imp__d2i_X509_CINF__imp__d2i_X509_CRL__imp__d2i_X509_CRL_INFO__imp__d2i_X509_CRL_bio__imp__d2i_X509_CRL_fp__imp__d2i_X509_EXTENSION__imp__d2i_X509_EXTENSIONS__imp__d2i_X509_NAME__imp__d2i_X509_NAME_ENTRY__imp__d2i_X509_PKEY__imp__d2i_X509_PUBKEY__imp__d2i_X509_REQ__imp__d2i_X509_REQ_INFO__imp__d2i_X509_REQ_bio__imp__d2i_X509_REQ_fp__imp__d2i_X509_REVOKED__imp__d2i_X509_SIG__imp__d2i_X509_VAL__imp__d2i_X509_bio__imp__d2i_X509_fp__imp__get_rfc2409_prime_1024__imp__get_rfc2409_prime_768__imp__get_rfc3526_prime_1536__imp__get_rfc3526_prime_2048__imp__get_rfc3526_prime_3072__imp__get_rfc3526_prime_4096__imp__get_rfc3526_prime_6144__imp__get_rfc3526_prime_8192__imp__hex_to_string__imp__i2a_ACCESS_DESCRIPTION__imp__i2a_ASN1_ENUMERATED__imp__i2a_ASN1_INTEGER__imp__i2a_ASN1_OBJECT__imp__i2a_ASN1_STRING__imp__i2b_PVK_bio__imp__i2b_PrivateKey_bio__imp__i2b_PublicKey_bio__imp__i2c_ASN1_BIT_STRING__imp__i2c_ASN1_INTEGER__imp__i2d_ACCESS_DESCRIPTION__imp__i2d_ASN1_BIT_STRING__imp__i2d_ASN1_BMPSTRING__imp__i2d_ASN1_BOOLEAN__imp__i2d_ASN1_ENUMERATED__imp__i2d_ASN1_GENERALIZEDTIME__imp__i2d_ASN1_GENERALSTRING__imp__i2d_ASN1_IA5STRING__imp__i2d_ASN1_INTEGER__imp__i2d_ASN1_NULL__imp__i2d_ASN1_OBJECT__imp__i2d_ASN1_OCTET_STRING__imp__i2d_ASN1_PRINTABLE__imp__i2d_ASN1_PRINTABLESTRING__imp__i2d_ASN1_SEQUENCE_ANY__imp__i2d_ASN1_SET__imp__i2d_ASN1_SET_ANY__imp__i2d_ASN1_T61STRING__imp__i2d_ASN1_TIME__imp__i2d_ASN1_TYPE__imp__i2d_ASN1_UNIVERSALSTRING__imp__i2d_ASN1_UTCTIME__imp__i2d_ASN1_UTF8STRING__imp__i2d_ASN1_VISIBLESTRING__imp__i2d_ASN1_bio_stream__imp__i2d_ASN1_bytes__imp__i2d_AUTHORITY_INFO_ACCESS__imp__i2d_AUTHORITY_KEYID__imp__i2d_BASIC_CONSTRAINTS__imp__i2d_CERTIFICATEPOLICIES__imp__i2d_CMS_ContentInfo__imp__i2d_CMS_ReceiptRequest__imp__i2d_CMS_bio__imp__i2d_CMS_bio_stream__imp__i2d_CRL_DIST_POINTS__imp__i2d_DHparams__imp__i2d_DHxparams__imp__i2d_DIRECTORYSTRING__imp__i2d_DISPLAYTEXT__imp__i2d_DIST_POINT__imp__i2d_DIST_POINT_NAME__imp__i2d_DSAPrivateKey__imp__i2d_DSAPrivateKey_bio__imp__i2d_DSAPrivateKey_fp__imp__i2d_DSAPublicKey__imp__i2d_DSA_PUBKEY__imp__i2d_DSA_PUBKEY_bio__imp__i2d_DSA_PUBKEY_fp__imp__i2d_DSA_SIG__imp__i2d_DSAparams__imp__i2d_ECDSA_SIG__imp__i2d_ECPKParameters__imp__i2d_ECParameters__imp__i2d_ECPrivateKey__imp__i2d_ECPrivateKey_bio__imp__i2d_ECPrivateKey_fp__imp__i2d_EC_PUBKEY__imp__i2d_EC_PUBKEY_bio__imp__i2d_EC_PUBKEY_fp__imp__i2d_EDIPARTYNAME__imp__i2d_ESS_CERT_ID__imp__i2d_ESS_ISSUER_SERIAL__imp__i2d_ESS_SIGNING_CERT__imp__i2d_EXTENDED_KEY_USAGE__imp__i2d_GENERAL_NAME__imp__i2d_GENERAL_NAMES__imp__i2d_ISSUING_DIST_POINT__imp__i2d_KRB5_APREQ__imp__i2d_KRB5_APREQBODY__imp__i2d_KRB5_AUTHDATA__imp__i2d_KRB5_AUTHENT__imp__i2d_KRB5_AUTHENTBODY__imp__i2d_KRB5_CHECKSUM__imp__i2d_KRB5_ENCDATA__imp__i2d_KRB5_ENCKEY__imp__i2d_KRB5_PRINCNAME__imp__i2d_KRB5_TICKET__imp__i2d_KRB5_TKTBODY__imp__i2d_NETSCAPE_CERT_SEQUENCE__imp__i2d_NETSCAPE_SPKAC__imp__i2d_NETSCAPE_SPKI__imp__i2d_NETSCAPE_X509__imp__i2d_NOTICEREF__imp__i2d_Netscape_RSA__imp__i2d_OCSP_BASICRESP__imp__i2d_OCSP_CERTID__imp__i2d_OCSP_CERTSTATUS__imp__i2d_OCSP_CRLID__imp__i2d_OCSP_ONEREQ__imp__i2d_OCSP_REQINFO__imp__i2d_OCSP_REQUEST__imp__i2d_OCSP_RESPBYTES__imp__i2d_OCSP_RESPDATA__imp__i2d_OCSP_RESPID__imp__i2d_OCSP_RESPONSE__imp__i2d_OCSP_REVOKEDINFO__imp__i2d_OCSP_SERVICELOC__imp__i2d_OCSP_SIGNATURE__imp__i2d_OCSP_SINGLERESP__imp__i2d_OTHERNAME__imp__i2d_PBE2PARAM__imp__i2d_PBEPARAM__imp__i2d_PBKDF2PARAM__imp__i2d_PKCS12__imp__i2d_PKCS12_BAGS__imp__i2d_PKCS12_MAC_DATA__imp__i2d_PKCS12_SAFEBAG__imp__i2d_PKCS12_bio__imp__i2d_PKCS12_fp__imp__i2d_PKCS7__imp__i2d_PKCS7_DIGEST__imp__i2d_PKCS7_ENCRYPT__imp__i2d_PKCS7_ENC_CONTENT__imp__i2d_PKCS7_ENVELOPE__imp__i2d_PKCS7_ISSUER_AND_SERIAL__imp__i2d_PKCS7_NDEF__imp__i2d_PKCS7_RECIP_INFO__imp__i2d_PKCS7_SIGNED__imp__i2d_PKCS7_SIGNER_INFO__imp__i2d_PKCS7_SIGN_ENVELOPE__imp__i2d_PKCS7_bio__imp__i2d_PKCS7_bio_stream__imp__i2d_PKCS7_fp__imp__i2d_PKCS8PrivateKeyInfo_bio__imp__i2d_PKCS8PrivateKeyInfo_fp__imp__i2d_PKCS8PrivateKey_bio__imp__i2d_PKCS8PrivateKey_fp__imp__i2d_PKCS8PrivateKey_nid_bio__imp__i2d_PKCS8PrivateKey_nid_fp__imp__i2d_PKCS8_PRIV_KEY_INFO__imp__i2d_PKCS8_PRIV_KEY_INFO_bio__imp__i2d_PKCS8_PRIV_KEY_INFO_fp__imp__i2d_PKCS8_bio__imp__i2d_PKCS8_fp__imp__i2d_PKEY_USAGE_PERIOD__imp__i2d_POLICYINFO__imp__i2d_POLICYQUALINFO__imp__i2d_PROXY_CERT_INFO_EXTENSION__imp__i2d_PROXY_POLICY__imp__i2d_PUBKEY__imp__i2d_PUBKEY_bio__imp__i2d_PUBKEY_fp__imp__i2d_PrivateKey__imp__i2d_PrivateKey_bio__imp__i2d_PrivateKey_fp__imp__i2d_PublicKey__imp__i2d_RSAPrivateKey__imp__i2d_RSAPrivateKey_bio__imp__i2d_RSAPrivateKey_fp__imp__i2d_RSAPublicKey__imp__i2d_RSAPublicKey_bio__imp__i2d_RSAPublicKey_fp__imp__i2d_RSA_NET__imp__i2d_RSA_OAEP_PARAMS__imp__i2d_RSA_PSS_PARAMS__imp__i2d_RSA_PUBKEY__imp__i2d_RSA_PUBKEY_bio__imp__i2d_RSA_PUBKEY_fp__imp__i2d_SXNET__imp__i2d_SXNETID__imp__i2d_TS_ACCURACY__imp__i2d_TS_MSG_IMPRINT__imp__i2d_TS_MSG_IMPRINT_bio__imp__i2d_TS_MSG_IMPRINT_fp__imp__i2d_TS_REQ__imp__i2d_TS_REQ_bio__imp__i2d_TS_REQ_fp__imp__i2d_TS_RESP__imp__i2d_TS_RESP_bio__imp__i2d_TS_RESP_fp__imp__i2d_TS_STATUS_INFO__imp__i2d_TS_TST_INFO__imp__i2d_TS_TST_INFO_bio__imp__i2d_TS_TST_INFO_fp__imp__i2d_USERNOTICE__imp__i2d_X509__imp__i2d_X509_ALGOR__imp__i2d_X509_ALGORS__imp__i2d_X509_ATTRIBUTE__imp__i2d_X509_AUX__imp__i2d_X509_CERT_AUX__imp__i2d_X509_CERT_PAIR__imp__i2d_X509_CINF__imp__i2d_X509_CRL__imp__i2d_X509_CRL_INFO__imp__i2d_X509_CRL_bio__imp__i2d_X509_CRL_fp__imp__i2d_X509_EXTENSION__imp__i2d_X509_EXTENSIONS__imp__i2d_X509_NAME__imp__i2d_X509_NAME_ENTRY__imp__i2d_X509_PKEY__imp__i2d_X509_PUBKEY__imp__i2d_X509_REQ__imp__i2d_X509_REQ_INFO__imp__i2d_X509_REQ_bio__imp__i2d_X509_REQ_fp__imp__i2d_X509_REVOKED__imp__i2d_X509_SIG__imp__i2d_X509_VAL__imp__i2d_X509_bio__imp__i2d_X509_fp__imp__i2d_re_X509_tbs__imp__i2o_ECPublicKey__imp__i2s_ASN1_ENUMERATED__imp__i2s_ASN1_ENUMERATED_TABLE__imp__i2s_ASN1_INTEGER__imp__i2s_ASN1_OCTET_STRING__imp__i2t_ASN1_OBJECT__imp__i2v_ASN1_BIT_STRING__imp__i2v_GENERAL_NAME__imp__i2v_GENERAL_NAMES__imp__idea_cbc_encrypt__imp__idea_cfb64_encrypt__imp__idea_ecb_encrypt__imp__idea_encrypt__imp__idea_ofb64_encrypt__imp__idea_options__imp__idea_set_decrypt_key__imp__idea_set_encrypt_key__imp__lh_delete__imp__lh_doall__imp__lh_doall_arg__imp__lh_free__imp__lh_insert__imp__lh_new__imp__lh_node_stats__imp__lh_node_stats_bio__imp__lh_node_usage_stats__imp__lh_node_usage_stats_bio__imp__lh_num_items__imp__lh_retrieve__imp__lh_stats__imp__lh_stats_bio__imp__lh_strhash__imp__name_cmp__imp__o2i_ECPublicKey__imp__pitem_free__imp__pitem_new__imp__pqueue_find__imp__pqueue_free__imp__pqueue_insert__imp__pqueue_iterator__imp__pqueue_new__imp__pqueue_next__imp__pqueue_peek__imp__pqueue_pop__imp__pqueue_print__imp__pqueue_size__imp__private_AES_set_decrypt_key__imp__private_AES_set_encrypt_key__imp__private_RC4_set_key__imp__s2i_ASN1_INTEGER__imp__s2i_ASN1_OCTET_STRING__imp__sk_deep_copy__imp__sk_delete__imp__sk_delete_ptr__imp__sk_dup__imp__sk_find__imp__sk_find_ex__imp__sk_free__imp__sk_insert__imp__sk_is_sorted__imp__sk_new__imp__sk_new_null__imp__sk_num__imp__sk_pop__imp__sk_pop_free__imp__sk_push__imp__sk_set__imp__sk_set_cmp_func__imp__sk_shift__imp__sk_sort__imp__sk_unshift__imp__sk_value__imp__sk_zero__imp__string_to_hex__imp__v2i_ASN1_BIT_STRING__imp__v2i_GENERAL_NAME__imp__v2i_GENERAL_NAMES__imp__v2i_GENERAL_NAME_ex__ossl_096_des_random_seed__ossl_old_crypt__ossl_old_des_cbc_cksum__ossl_old_des_cbc_encrypt__ossl_old_des_cfb64_encrypt__ossl_old_des_cfb_encrypt__ossl_old_des_crypt__ossl_old_des_decrypt3__ossl_old_des_ecb3_encrypt__ossl_old_des_ecb_encrypt__ossl_old_des_ede3_cbc_encrypt__ossl_old_des_ede3_cfb64_encrypt__ossl_old_des_ede3_ofb64_encrypt__ossl_old_des_enc_read__ossl_old_des_enc_write__ossl_old_des_encrypt__ossl_old_des_encrypt2__ossl_old_des_encrypt3__ossl_old_des_fcrypt__ossl_old_des_is_weak_key__ossl_old_des_key_sched__ossl_old_des_ncbc_encrypt__ossl_old_des_ofb64_encrypt__ossl_old_des_ofb_encrypt__ossl_old_des_options__ossl_old_des_pcbc_encrypt__ossl_old_des_quad_cksum__ossl_old_des_random_key__ossl_old_des_random_seed__ossl_old_des_read_2passwords__ossl_old_des_read_password__ossl_old_des_read_pw__ossl_old_des_read_pw_string__ossl_old_des_set_key__ossl_old_des_set_odd_parity__ossl_old_des_string_to_2keys__ossl_old_des_string_to_key__ossl_old_des_xcbc_encrypt__shadow_DES_check_key__shadow_DES_rw_mode_a2d_ASN1_OBJECT_a2i_ASN1_ENUMERATED_a2i_ASN1_INTEGER_a2i_ASN1_STRING_a2i_GENERAL_NAME_a2i_IPADDRESS_a2i_IPADDRESS_NC_a2i_ipadd_asn1_Finish_asn1_GetSequence_asn1_add_error_asn1_const_Finish_asn1_do_adb_asn1_do_lock_asn1_enc_free_asn1_enc_init_asn1_enc_restore_asn1_enc_save_asn1_ex_c2i_asn1_ex_i2c_asn1_get_choice_selector_asn1_get_field_ptr_asn1_set_choice_selector_b2i_PVK_bio_b2i_PrivateKey_b2i_PrivateKey_bio_b2i_PublicKey_b2i_PublicKey_bio_bn_add_words_bn_div_words_bn_dup_expand_bn_expand2_bn_mul_add_words_bn_mul_words_bn_sqr_words_bn_sub_words_c2i_ASN1_BIT_STRING_c2i_ASN1_INTEGER_c2i_ASN1_OBJECT_check_defer_d2i_ACCESS_DESCRIPTION_d2i_ASN1_BIT_STRING_d2i_ASN1_BMPSTRING_d2i_ASN1_BOOLEAN_d2i_ASN1_ENUMERATED_d2i_ASN1_GENERALIZEDTIME_d2i_ASN1_GENERALSTRING_d2i_ASN1_IA5STRING_d2i_ASN1_INTEGER_d2i_ASN1_NULL_d2i_ASN1_OBJECT_d2i_ASN1_OCTET_STRING_d2i_ASN1_PRINTABLE_d2i_ASN1_PRINTABLESTRING_d2i_ASN1_SEQUENCE_ANY_d2i_ASN1_SET_d2i_ASN1_SET_ANY_d2i_ASN1_T61STRING_d2i_ASN1_TIME_d2i_ASN1_TYPE_d2i_ASN1_UINTEGER_d2i_ASN1_UNIVERSALSTRING_d2i_ASN1_UTCTIME_d2i_ASN1_UTF8STRING_d2i_ASN1_VISIBLESTRING_d2i_ASN1_bytes_d2i_ASN1_type_bytes_d2i_AUTHORITY_INFO_ACCESS_d2i_AUTHORITY_KEYID_d2i_AutoPrivateKey_d2i_BASIC_CONSTRAINTS_d2i_CERTIFICATEPOLICIES_d2i_CMS_ContentInfo_d2i_CMS_ReceiptRequest_d2i_CMS_bio_d2i_CRL_DIST_POINTS_d2i_DHparams_d2i_DHxparams_d2i_DIRECTORYSTRING_d2i_DISPLAYTEXT_d2i_DIST_POINT_d2i_DIST_POINT_NAME_d2i_DSAPrivateKey_d2i_DSAPrivateKey_bio_d2i_DSAPrivateKey_fp_d2i_DSAPublicKey_d2i_DSA_PUBKEY_d2i_DSA_PUBKEY_bio_d2i_DSA_PUBKEY_fp_d2i_DSA_SIG_d2i_DSAparams_d2i_ECDSA_SIG_d2i_ECPKParameters_d2i_ECParameters_d2i_ECPrivateKey_d2i_ECPrivateKey_bio_d2i_ECPrivateKey_fp_d2i_EC_PUBKEY_d2i_EC_PUBKEY_bio_d2i_EC_PUBKEY_fp_d2i_EDIPARTYNAME_d2i_ESS_CERT_ID_d2i_ESS_ISSUER_SERIAL_d2i_ESS_SIGNING_CERT_d2i_EXTENDED_KEY_USAGE_d2i_GENERAL_NAME_d2i_GENERAL_NAMES_d2i_ISSUING_DIST_POINT_d2i_KRB5_APREQ_d2i_KRB5_APREQBODY_d2i_KRB5_AUTHDATA_d2i_KRB5_AUTHENT_d2i_KRB5_AUTHENTBODY_d2i_KRB5_CHECKSUM_d2i_KRB5_ENCDATA_d2i_KRB5_ENCKEY_d2i_KRB5_PRINCNAME_d2i_KRB5_TICKET_d2i_KRB5_TKTBODY_d2i_NETSCAPE_CERT_SEQUENCE_d2i_NETSCAPE_SPKAC_d2i_NETSCAPE_SPKI_d2i_NETSCAPE_X509_d2i_NOTICEREF_d2i_Netscape_RSA_d2i_OCSP_BASICRESP_d2i_OCSP_CERTID_d2i_OCSP_CERTSTATUS_d2i_OCSP_CRLID_d2i_OCSP_ONEREQ_d2i_OCSP_REQINFO_d2i_OCSP_REQUEST_d2i_OCSP_RESPBYTES_d2i_OCSP_RESPDATA_d2i_OCSP_RESPID_d2i_OCSP_RESPONSE_d2i_OCSP_REVOKEDINFO_d2i_OCSP_SERVICELOC_d2i_OCSP_SIGNATURE_d2i_OCSP_SINGLERESP_d2i_OTHERNAME_d2i_PBE2PARAM_d2i_PBEPARAM_d2i_PBKDF2PARAM_d2i_PKCS12_d2i_PKCS12_BAGS_d2i_PKCS12_MAC_DATA_d2i_PKCS12_SAFEBAG_d2i_PKCS12_bio_d2i_PKCS12_fp_d2i_PKCS7_d2i_PKCS7_DIGEST_d2i_PKCS7_ENCRYPT_d2i_PKCS7_ENC_CONTENT_d2i_PKCS7_ENVELOPE_d2i_PKCS7_ISSUER_AND_SERIAL_d2i_PKCS7_RECIP_INFO_d2i_PKCS7_SIGNED_d2i_PKCS7_SIGNER_INFO_d2i_PKCS7_SIGN_ENVELOPE_d2i_PKCS7_bio_d2i_PKCS7_fp_d2i_PKCS8PrivateKey_bio_d2i_PKCS8PrivateKey_fp_d2i_PKCS8_PRIV_KEY_INFO_d2i_PKCS8_PRIV_KEY_INFO_bio_d2i_PKCS8_PRIV_KEY_INFO_fp_d2i_PKCS8_bio_d2i_PKCS8_fp_d2i_PKEY_USAGE_PERIOD_d2i_POLICYINFO_d2i_POLICYQUALINFO_d2i_PROXY_CERT_INFO_EXTENSION_d2i_PROXY_POLICY_d2i_PUBKEY_d2i_PUBKEY_bio_d2i_PUBKEY_fp_d2i_PrivateKey_d2i_PrivateKey_bio_d2i_PrivateKey_fp_d2i_PublicKey_d2i_RSAPrivateKey_d2i_RSAPrivateKey_bio_d2i_RSAPrivateKey_fp_d2i_RSAPublicKey_d2i_RSAPublicKey_bio_d2i_RSAPublicKey_fp_d2i_RSA_NET_d2i_RSA_OAEP_PARAMS_d2i_RSA_PSS_PARAMS_d2i_RSA_PUBKEY_d2i_RSA_PUBKEY_bio_d2i_RSA_PUBKEY_fp_d2i_SXNET_d2i_SXNETID_d2i_TS_ACCURACY_d2i_TS_MSG_IMPRINT_d2i_TS_MSG_IMPRINT_bio_d2i_TS_MSG_IMPRINT_fp_d2i_TS_REQ_d2i_TS_REQ_bio_d2i_TS_REQ_fp_d2i_TS_RESP_d2i_TS_RESP_bio_d2i_TS_RESP_fp_d2i_TS_STATUS_INFO_d2i_TS_TST_INFO_d2i_TS_TST_INFO_bio_d2i_TS_TST_INFO_fp_d2i_USERNOTICE_d2i_X509_d2i_X509_ALGOR_d2i_X509_ALGORS_d2i_X509_ATTRIBUTE_d2i_X509_AUX_d2i_X509_CERT_AUX_d2i_X509_CERT_PAIR_d2i_X509_CINF_d2i_X509_CRL_d2i_X509_CRL_INFO_d2i_X509_CRL_bio_d2i_X509_CRL_fp_d2i_X509_EXTENSION_d2i_X509_EXTENSIONS_d2i_X509_NAME_d2i_X509_NAME_ENTRY_d2i_X509_PKEY_d2i_X509_PUBKEY_d2i_X509_REQ_d2i_X509_REQ_INFO_d2i_X509_REQ_bio_d2i_X509_REQ_fp_d2i_X509_REVOKED_d2i_X509_SIG_d2i_X509_VAL_d2i_X509_bio_d2i_X509_fp_get_rfc2409_prime_1024_get_rfc2409_prime_768_get_rfc3526_prime_1536_get_rfc3526_prime_2048_get_rfc3526_prime_3072_get_rfc3526_prime_4096_get_rfc3526_prime_6144_get_rfc3526_prime_8192_hex_to_string_i2a_ACCESS_DESCRIPTION_i2a_ASN1_ENUMERATED_i2a_ASN1_INTEGER_i2a_ASN1_OBJECT_i2a_ASN1_STRING_i2b_PVK_bio_i2b_PrivateKey_bio_i2b_PublicKey_bio_i2c_ASN1_BIT_STRING_i2c_ASN1_INTEGER_i2d_ACCESS_DESCRIPTION_i2d_ASN1_BIT_STRING_i2d_ASN1_BMPSTRING_i2d_ASN1_BOOLEAN_i2d_ASN1_ENUMERATED_i2d_ASN1_GENERALIZEDTIME_i2d_ASN1_GENERALSTRING_i2d_ASN1_IA5STRING_i2d_ASN1_INTEGER_i2d_ASN1_NULL_i2d_ASN1_OBJECT_i2d_ASN1_OCTET_STRING_i2d_ASN1_PRINTABLE_i2d_ASN1_PRINTABLESTRING_i2d_ASN1_SEQUENCE_ANY_i2d_ASN1_SET_i2d_ASN1_SET_ANY_i2d_ASN1_T61STRING_i2d_ASN1_TIME_i2d_ASN1_TYPE_i2d_ASN1_UNIVERSALSTRING_i2d_ASN1_UTCTIME_i2d_ASN1_UTF8STRING_i2d_ASN1_VISIBLESTRING_i2d_ASN1_bio_stream_i2d_ASN1_bytes_i2d_AUTHORITY_INFO_ACCESS_i2d_AUTHORITY_KEYID_i2d_BASIC_CONSTRAINTS_i2d_CERTIFICATEPOLICIES_i2d_CMS_ContentInfo_i2d_CMS_ReceiptRequest_i2d_CMS_bio_i2d_CMS_bio_stream_i2d_CRL_DIST_POINTS_i2d_DHparams_i2d_DHxparams_i2d_DIRECTORYSTRING_i2d_DISPLAYTEXT_i2d_DIST_POINT_i2d_DIST_POINT_NAME_i2d_DSAPrivateKey_i2d_DSAPrivateKey_bio_i2d_DSAPrivateKey_fp_i2d_DSAPublicKey_i2d_DSA_PUBKEY_i2d_DSA_PUBKEY_bio_i2d_DSA_PUBKEY_fp_i2d_DSA_SIG_i2d_DSAparams_i2d_ECDSA_SIG_i2d_ECPKParameters_i2d_ECParameters_i2d_ECPrivateKey_i2d_ECPrivateKey_bio_i2d_ECPrivateKey_fp_i2d_EC_PUBKEY_i2d_EC_PUBKEY_bio_i2d_EC_PUBKEY_fp_i2d_EDIPARTYNAME_i2d_ESS_CERT_ID_i2d_ESS_ISSUER_SERIAL_i2d_ESS_SIGNING_CERT_i2d_EXTENDED_KEY_USAGE_i2d_GENERAL_NAME_i2d_GENERAL_NAMES_i2d_ISSUING_DIST_POINT_i2d_KRB5_APREQ_i2d_KRB5_APREQBODY_i2d_KRB5_AUTHDATA_i2d_KRB5_AUTHENT_i2d_KRB5_AUTHENTBODY_i2d_KRB5_CHECKSUM_i2d_KRB5_ENCDATA_i2d_KRB5_ENCKEY_i2d_KRB5_PRINCNAME_i2d_KRB5_TICKET_i2d_KRB5_TKTBODY_i2d_NETSCAPE_CERT_SEQUENCE_i2d_NETSCAPE_SPKAC_i2d_NETSCAPE_SPKI_i2d_NETSCAPE_X509_i2d_NOTICEREF_i2d_Netscape_RSA_i2d_OCSP_BASICRESP_i2d_OCSP_CERTID_i2d_OCSP_CERTSTATUS_i2d_OCSP_CRLID_i2d_OCSP_ONEREQ_i2d_OCSP_REQINFO_i2d_OCSP_REQUEST_i2d_OCSP_RESPBYTES_i2d_OCSP_RESPDATA_i2d_OCSP_RESPID_i2d_OCSP_RESPONSE_i2d_OCSP_REVOKEDINFO_i2d_OCSP_SERVICELOC_i2d_OCSP_SIGNATURE_i2d_OCSP_SINGLERESP_i2d_OTHERNAME_i2d_PBE2PARAM_i2d_PBEPARAM_i2d_PBKDF2PARAM_i2d_PKCS12_i2d_PKCS12_BAGS_i2d_PKCS12_MAC_DATA_i2d_PKCS12_SAFEBAG_i2d_PKCS12_bio_i2d_PKCS12_fp_i2d_PKCS7_i2d_PKCS7_DIGEST_i2d_PKCS7_ENCRYPT_i2d_PKCS7_ENC_CONTENT_i2d_PKCS7_ENVELOPE_i2d_PKCS7_ISSUER_AND_SERIAL_i2d_PKCS7_NDEF_i2d_PKCS7_RECIP_INFO_i2d_PKCS7_SIGNED_i2d_PKCS7_SIGNER_INFO_i2d_PKCS7_SIGN_ENVELOPE_i2d_PKCS7_bio_i2d_PKCS7_bio_stream_i2d_PKCS7_fp_i2d_PKCS8PrivateKeyInfo_bio_i2d_PKCS8PrivateKeyInfo_fp_i2d_PKCS8PrivateKey_bio_i2d_PKCS8PrivateKey_fp_i2d_PKCS8PrivateKey_nid_bio_i2d_PKCS8PrivateKey_nid_fp_i2d_PKCS8_PRIV_KEY_INFO_i2d_PKCS8_PRIV_KEY_INFO_bio_i2d_PKCS8_PRIV_KEY_INFO_fp_i2d_PKCS8_bio_i2d_PKCS8_fp_i2d_PKEY_USAGE_PERIOD_i2d_POLICYINFO_i2d_POLICYQUALINFO_i2d_PROXY_CERT_INFO_EXTENSION_i2d_PROXY_POLICY_i2d_PUBKEY_i2d_PUBKEY_bio_i2d_PUBKEY_fp_i2d_PrivateKey_i2d_PrivateKey_bio_i2d_PrivateKey_fp_i2d_PublicKey_i2d_RSAPrivateKey_i2d_RSAPrivateKey_bio_i2d_RSAPrivateKey_fp_i2d_RSAPublicKey_i2d_RSAPublicKey_bio_i2d_RSAPublicKey_fp_i2d_RSA_NET_i2d_RSA_OAEP_PARAMS_i2d_RSA_PSS_PARAMS_i2d_RSA_PUBKEY_i2d_RSA_PUBKEY_bio_i2d_RSA_PUBKEY_fp_i2d_SXNET_i2d_SXNETID_i2d_TS_ACCURACY_i2d_TS_MSG_IMPRINT_i2d_TS_MSG_IMPRINT_bio_i2d_TS_MSG_IMPRINT_fp_i2d_TS_REQ_i2d_TS_REQ_bio_i2d_TS_REQ_fp_i2d_TS_RESP_i2d_TS_RESP_bio_i2d_TS_RESP_fp_i2d_TS_STATUS_INFO_i2d_TS_TST_INFO_i2d_TS_TST_INFO_bio_i2d_TS_TST_INFO_fp_i2d_USERNOTICE_i2d_X509_i2d_X509_ALGOR_i2d_X509_ALGORS_i2d_X509_ATTRIBUTE_i2d_X509_AUX_i2d_X509_CERT_AUX_i2d_X509_CERT_PAIR_i2d_X509_CINF_i2d_X509_CRL_i2d_X509_CRL_INFO_i2d_X509_CRL_bio_i2d_X509_CRL_fp_i2d_X509_EXTENSION_i2d_X509_EXTENSIONS_i2d_X509_NAME_i2d_X509_NAME_ENTRY_i2d_X509_PKEY_i2d_X509_PUBKEY_i2d_X509_REQ_i2d_X509_REQ_INFO_i2d_X509_REQ_bio_i2d_X509_REQ_fp_i2d_X509_REVOKED_i2d_X509_SIG_i2d_X509_VAL_i2d_X509_bio_i2d_X509_fp_i2d_re_X509_tbs_i2o_ECPublicKey_i2s_ASN1_ENUMERATED_i2s_ASN1_ENUMERATED_TABLE_i2s_ASN1_INTEGER_i2s_ASN1_OCTET_STRING_i2t_ASN1_OBJECT_i2v_ASN1_BIT_STRING_i2v_GENERAL_NAME_i2v_GENERAL_NAMES_idea_cbc_encrypt_idea_cfb64_encrypt_idea_ecb_encrypt_idea_encrypt_idea_ofb64_encrypt_idea_options_idea_set_decrypt_key_idea_set_encrypt_key_lh_delete_lh_doall_lh_doall_arg_lh_free_lh_insert_lh_new_lh_node_stats_lh_node_stats_bio_lh_node_usage_stats_lh_node_usage_stats_bio_lh_num_items_lh_retrieve_lh_stats_lh_stats_bio_lh_strhash_name_cmp_o2i_ECPublicKey_pitem_free_pitem_new_pqueue_find_pqueue_free_pqueue_insert_pqueue_iterator_pqueue_new_pqueue_next_pqueue_peek_pqueue_pop_pqueue_print_pqueue_size_private_AES_set_decrypt_key_private_AES_set_encrypt_key_private_RC4_set_key_s2i_ASN1_INTEGER_s2i_ASN1_OCTET_STRING_sk_deep_copy_sk_delete_sk_delete_ptr_sk_dup_sk_find_sk_find_ex_sk_free_sk_insert_sk_is_sorted_sk_new_sk_new_null_sk_num_sk_pop_sk_pop_free_sk_push_sk_set_sk_set_cmp_func_sk_shift_sk_sort_sk_unshift_sk_value_sk_zero_string_to_hex_v2i_ASN1_BIT_STRING_v2i_GENERAL_NAME_v2i_GENERAL_NAMES_v2i_GENERAL_NAME_exLIBEAY32_NULL_THUNK_DATA LIBEAY32.dll/ 1485440734 0 498 ` LX.debug$SB@B.idata$2@0.idata$6@  LIBEAY32.dll' Microsoft (R) LINK LIBEAY32.dll@comp.id.idata$2@h.idata$6.idata$4@h.idata$5@h!:T__IMPORT_DESCRIPTOR_LIBEAY32__NULL_IMPORT_DESCRIPTORLIBEAY32_NULL_THUNK_DATALIBEAY32.dll/ 1485440734 0 251 ` LX.debug$SBd@B.idata$3@0 LIBEAY32.dll' Microsoft (R) LINK@comp.id__NULL_IMPORT_DESCRIPTOR LIBEAY32.dll/ 1485440734 0 280 ` LX.debug$SB@B.idata$5@0.idata$4@0 LIBEAY32.dll' Microsoft (R) LINK@comp.idLIBEAY32_NULL_THUNK_DATALIBEAY32.dll/ 1485440734 0 58 ` LX&_ACCESS_DESCRIPTION_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$ _ACCESS_DESCRIPTION_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_ACCESS_DESCRIPTION_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_AES_bi_ige_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXc _AES_cbc_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _AES_cfb128_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _AES_cfb1_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _AES_cfb8_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _AES_ctr128_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX _AES_decryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _AES_ecb_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX _AES_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_AES_ige_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _AES_ofb128_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX _AES_optionsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"" _AES_set_decrypt_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _AES_set_encrypt_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LXY_AES_unwrap_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXZ_AES_wrap_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX _ASN1_ANY_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_ASN1_BIT_STRING_checkLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX# _ASN1_BIT_STRING_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&$_ASN1_BIT_STRING_get_bitLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!> _ASN1_BIT_STRING_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)V_ASN1_BIT_STRING_name_printLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_ASN1_BIT_STRING_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_ASN1_BIT_STRING_num_ascLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"=_ASN1_BIT_STRING_setLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_ASN1_BIT_STRING_set_ascLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&%_ASN1_BIT_STRING_set_bitLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _ASN1_BMPSTRING_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _ASN1_BMPSTRING_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_ASN1_BMPSTRING_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXF _ASN1_BOOLEAN_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_ASN1_ENUMERATED_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_ASN1_ENUMERATED_getLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _ASN1_ENUMERATED_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_ASN1_ENUMERATED_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_ASN1_ENUMERATED_setLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_ASN1_ENUMERATED_to_BNLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _ASN1_FBOOLEAN_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'_ASN1_GENERALIZEDTIME_adjLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_ASN1_GENERALIZEDTIME_checkLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(t_ASN1_GENERALIZEDTIME_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&# _ASN1_GENERALIZEDTIME_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'N_ASN1_GENERALIZEDTIME_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_ASN1_GENERALIZEDTIME_printLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'_ASN1_GENERALIZEDTIME_setLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 66 ` LX._ASN1_GENERALIZEDTIME_set_stringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX& _ASN1_GENERALSTRING_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$ _ASN1_GENERALSTRING_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _ASN1_GENERALSTRING_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_ASN1_IA5STRING_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _ASN1_IA5STRING_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_ASN1_IA5STRING_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_ASN1_INTEGER_cmpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXB_ASN1_INTEGER_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX ?_ASN1_INTEGER_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_ASN1_INTEGER_getLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXb _ASN1_INTEGER_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXS_ASN1_INTEGER_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_ASN1_INTEGER_setLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _ASN1_INTEGER_to_BNLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LXx_ASN1_NULL_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXN _ASN1_NULL_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXz_ASN1_NULL_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _ASN1_OBJECT_createLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _ASN1_OBJECT_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LXl _ASN1_OBJECT_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _ASN1_OBJECT_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(= _ASN1_OCTET_STRING_NDEF_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_ASN1_OCTET_STRING_cmpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$<_ASN1_OCTET_STRING_dupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_ASN1_OCTET_STRING_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _ASN1_OCTET_STRING_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$R_ASN1_OCTET_STRING_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_ASN1_OCTET_STRING_setLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_ASN1_PCTX_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'F_ASN1_PCTX_get_cert_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"h_ASN1_PCTX_get_flagsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_ASN1_PCTX_get_nm_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_ASN1_PCTX_get_oid_flagsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_ASN1_PCTX_get_str_flagsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX|_ASN1_PCTX_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_ASN1_PCTX_set_cert_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _ASN1_PCTX_set_flagsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_ASN1_PCTX_set_nm_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&c_ASN1_PCTX_set_oid_flagsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&(_ASN1_PCTX_set_str_flagsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_ASN1_PRINTABLESTRING_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX& _ASN1_PRINTABLESTRING_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_ASN1_PRINTABLESTRING_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _ASN1_PRINTABLE_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX - _ASN1_PRINTABLE_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _ASN1_PRINTABLE_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _ASN1_PRINTABLE_typeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#4_ASN1_SEQUENCE_ANY_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _ASN1_SEQUENCE_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXy_ASN1_SET_ANY_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_ASN1_STRING_TABLE_addLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_ASN1_STRING_TABLE_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$+_ASN1_STRING_TABLE_getLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%X _ASN1_STRING_clear_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_ASN1_STRING_cmpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_ASN1_STRING_copyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_ASN1_STRING_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_ASN1_STRING_dupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_ASN1_STRING_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+_ASN1_STRING_get_default_maskLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_ASN1_STRING_lengthLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%X_ASN1_STRING_length_setLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_ASN1_STRING_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _ASN1_STRING_printLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX# _ASN1_STRING_print_exLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&~ _ASN1_STRING_print_ex_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_ASN1_STRING_setLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX]_ASN1_STRING_set0LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_ASN1_STRING_set_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+_ASN1_STRING_set_default_maskLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 67 ` LX/_ASN1_STRING_set_default_mask_ascLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _ASN1_STRING_to_UTF8LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_ASN1_STRING_typeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_ASN1_STRING_type_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_ASN1_T61STRING_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX  _ASN1_T61STRING_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _ASN1_T61STRING_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_ _ASN1_TBOOLEAN_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_ASN1_TIME_adjLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _ASN1_TIME_checkLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_ASN1_TIME_diffLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_ASN1_TIME_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX _ASN1_TIME_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_ASN1_TIME_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_ASN1_TIME_printLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_ASN1_TIME_setLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_ASN1_TIME_set_stringLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+a _ASN1_TIME_to_generalizedtimeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXL_ASN1_TYPE_cmpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_ASN1_TYPE_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_ASN1_TYPE_getLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,4_ASN1_TYPE_get_int_octetstringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(5_ASN1_TYPE_get_octetstringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_ASN1_TYPE_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_ASN1_TYPE_setLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX\_ASN1_TYPE_set1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX,6_ASN1_TYPE_set_int_octetstringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(7_ASN1_TYPE_set_octetstringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX( _ASN1_UNIVERSALSTRING_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX& _ASN1_UNIVERSALSTRING_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX' _ASN1_UNIVERSALSTRING_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 65 ` LX-_ASN1_UNIVERSALSTRING_to_stringLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_ASN1_UTCTIME_adjLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_ASN1_UTCTIME_checkLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _ASN1_UTCTIME_cmp_time_tLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _ASN1_UTCTIME_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _ASN1_UTCTIME_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _ASN1_UTCTIME_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_ASN1_UTCTIME_printLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_ASN1_UTCTIME_setLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&8_ASN1_UTCTIME_set_stringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#,_ASN1_UTF8STRING_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _ASN1_UTF8STRING_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_ASN1_UTF8STRING_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&F_ASN1_VISIBLESTRING_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$1 _ASN1_VISIBLESTRING_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_ASN1_VISIBLESTRING_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"r _ASN1_add_oid_moduleLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_ASN1_bn_printLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_ASN1_check_infinite_endLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,'_ASN1_const_check_infinite_endLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_ASN1_d2i_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_ASN1_d2i_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_ASN1_digestLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LX_ASN1_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _ASN1_generate_nconfLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _ASN1_generate_v3LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _ASN1_get_objectLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX!_ASN1_i2d_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX"_ASN1_i2d_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _ASN1_item_d2iLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _ASN1_item_d2i_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX4 _ASN1_item_d2i_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _ASN1_item_digestLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _ASN1_item_dupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _ASN1_item_ex_d2iLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX E _ASN1_item_ex_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _ASN1_item_ex_i2dLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _ASN1_item_ex_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX? _ASN1_item_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_ _ASN1_item_i2dLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX * _ASN1_item_i2d_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _ASN1_item_i2d_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _ASN1_item_ndef_i2dLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX` _ASN1_item_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX@ _ASN1_item_packLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_ASN1_item_printLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX _ASN1_item_signLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!?_ASN1_item_sign_ctxLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXP _ASN1_item_unpackLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _ASN1_item_verifyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_ASN1_mbstring_copyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"K_ASN1_mbstring_ncopyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX#_ASN1_object_sizeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_ASN1_pack_stringLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX$_ASN1_parseLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX{ _ASN1_parse_dumpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _ASN1_primitive_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!, _ASN1_primitive_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX _ASN1_put_eocLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX%_ASN1_put_objectLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_ASN1_seq_packLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_ASN1_seq_unpackLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX&_ASN1_signLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX _ASN1_tag2bitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXq_ASN1_tag2strLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _ASN1_template_d2iLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _ASN1_template_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX  _ASN1_template_i2dLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX  _ASN1_template_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_ASN1_unpack_stringLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX'_ASN1_verifyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)_AUTHORITY_INFO_ACCESS_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX' _AUTHORITY_INFO_ACCESS_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_AUTHORITY_INFO_ACCESS_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_AUTHORITY_KEYID_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!A _AUTHORITY_KEYID_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_AUTHORITY_KEYID_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_BASIC_CONSTRAINTS_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#j _BASIC_CONSTRAINTS_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_BASIC_CONSTRAINTS_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX(_BF_cbc_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX)_BF_cfb64_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_BF_decryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX*_BF_ecb_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX+_BF_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX,_BF_ofb64_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX-_BF_optionsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX._BF_set_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LXb _BIGNUM_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX3_BIO_acceptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"%_BIO_asn1_get_prefixLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"j_BIO_asn1_get_suffixLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"M_BIO_asn1_set_prefixLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"X_BIO_asn1_set_suffixLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _BIO_callback_ctrlLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_BIO_clear_flagsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_BIO_copy_next_retryLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LX4_BIO_ctrlLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_BIO_ctrl_get_read_requestLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+ _BIO_ctrl_get_write_guaranteeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_BIO_ctrl_pendingLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*r_BIO_ctrl_reset_read_requestLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _BIO_ctrl_wpendingLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!6_BIO_debug_callbackLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_BIO_dgram_non_fatal_errorLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LX7_BIO_dumpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_BIO_dump_cbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX* _BIO_dump_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXz _BIO_dump_indentLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!q_BIO_dump_indent_cbLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _BIO_dump_indent_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX8_BIO_dup_chainLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX _BIO_f_asn1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX9_BIO_f_base64LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX:_BIO_f_bufferLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX;_BIO_f_cipherLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LX<_BIO_f_mdLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_BIO_f_nbio_testLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX=_BIO_f_nullLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_BIO_f_reliableLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%?_BIO_fd_non_fatal_errorLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"@_BIO_fd_should_retryLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXA_BIO_find_typeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LXB_BIO_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXC_BIO_free_allLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$E_BIO_get_accept_socketLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_BIO_get_callbackLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#>_BIO_get_callback_argLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX&_BIO_get_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#'_BIO_get_ex_new_indexLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXG_BIO_get_host_ipLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LXH_BIO_get_portLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX I_BIO_get_retry_BIOLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#J_BIO_get_retry_reasonLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX K_BIO_gethostbynameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LXL_BIO_getsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_BIO_hex_stringLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX _BIO_indentLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX5_BIO_int_ctrlLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX:_BIO_method_nameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_BIO_method_typeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 42 ` LXN_BIO_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LXO_BIO_new_CMSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX9_BIO_new_NDEFLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_BIO_new_PKCS7LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LXO_BIO_new_acceptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _BIO_new_bio_pairLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXP_BIO_new_connectLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _BIO_new_dgramLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LXQ_BIO_new_fdLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXR_BIO_new_fileLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LXS_BIO_new_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXZ_BIO_new_mem_bufLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LXT_BIO_new_socketLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LX _BIO_nextLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LXT_BIO_nreadLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LXX_BIO_nread0LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_BIO_number_readLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_BIO_number_writtenLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LXR_BIO_nwriteLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LXV_BIO_nwrite0LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 42 ` LXU_BIO_popLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LXV_BIO_printfLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_BIO_ptr_ctrlLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LXW_BIO_pushLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LXX_BIO_putsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LXY_BIO_readLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXZ_BIO_s_acceptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX_BIO_s_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX[_BIO_s_connectLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX _BIO_s_datagramLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LX\_BIO_s_fdLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX]_BIO_s_fileLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX__BIO_s_memLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX`_BIO_s_nullLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXb_BIO_s_socketLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 42 ` LXd_BIO_setLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX?_BIO_set_callbackLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_BIO_set_callback_argLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LXe_BIO_set_cipherLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX(_BIO_set_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_BIO_set_flagsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!f_BIO_set_tcp_ndelayLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_BIO_snprintfLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXg_BIO_sock_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LXh_BIO_sock_errorLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXi_BIO_sock_initLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'j_BIO_sock_non_fatal_errorLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$k_BIO_sock_should_retryLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXl_BIO_socket_ioctlLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXN_BIO_socket_nbioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_BIO_test_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX _BIO_vfreeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX _BIO_vprintfLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _BIO_vsnprintfLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LXm_BIO_writeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_BN_BLINDING_convertLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _BN_BLINDING_convert_exLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'y_BN_BLINDING_create_paramLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_BN_BLINDING_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_BN_BLINDING_get_flagsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX( _BN_BLINDING_get_thread_idLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_BN_BLINDING_invertLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$ _BN_BLINDING_invert_exLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_BN_BLINDING_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$S _BN_BLINDING_set_flagsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_BN_BLINDING_set_thread_idLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_BN_BLINDING_thread_idLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_BN_BLINDING_updateLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_BN_CTX_endLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LXn_BN_CTX_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_BN_CTX_getLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LXo_BN_CTX_initLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LXo_BN_CTX_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_BN_CTX_startLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _BN_GENCB_callLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX _BN_GF2m_addLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _BN_GF2m_arr2polyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX _BN_GF2m_modLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXg _BN_GF2m_mod_arrLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX\ _BN_GF2m_mod_divLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_BN_GF2m_mod_div_arrLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_BN_GF2m_mod_expLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"! _BN_GF2m_mod_exp_arrLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _BN_GF2m_mod_invLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_BN_GF2m_mod_inv_arrLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _BN_GF2m_mod_mulLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"& _BN_GF2m_mod_mul_arrLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%E_BN_GF2m_mod_solve_quadLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)Y _BN_GF2m_mod_solve_quad_arrLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXE _BN_GF2m_mod_sqrLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _BN_GF2m_mod_sqr_arrLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _BN_GF2m_mod_sqrtLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#{ _BN_GF2m_mod_sqrt_arrLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _BN_GF2m_poly2arrLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXU_BN_MONT_CTX_copyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXp_BN_MONT_CTX_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXp_BN_MONT_CTX_initLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXq_BN_MONT_CTX_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXr_BN_MONT_CTX_setLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _BN_MONT_CTX_set_lockedLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXj_BN_RECP_CTX_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXh_BN_RECP_CTX_initLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXi_BN_RECP_CTX_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXk_BN_RECP_CTX_setLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_BN_X931_derive_prime_exLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX# _BN_X931_generate_XpqLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_BN_X931_generate_prime_exLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 41 ` LXs_BN_addLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LXt_BN_add_wordLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX__BN_asc2bnLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LXv_BN_bin2bnLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LXx_BN_bn2binLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX_BN_bn2decLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LXw_BN_bn2hexLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX"_BN_bn2mpiLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX _BN_bntest_randLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LXy_BN_clearLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXz_BN_clear_bitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX{_BN_clear_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 41 ` LX|_BN_cmpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX C_BN_consttime_swapLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 42 ` LX}_BN_copyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX_BN_dec2bnLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 41 ` LX~_BN_divLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LXn_BN_div_recpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_BN_div_wordLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 41 ` LX_BN_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 41 ` LX_BN_expLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 42 ` LX_BN_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_BN_from_montgomeryLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 41 ` LX_BN_gcdLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _BN_generate_primeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#~_BN_generate_prime_exLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX% _BN_get0_nist_prime_192LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX% _BN_get0_nist_prime_224LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%-_BN_get0_nist_prime_256LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX% _BN_get0_nist_prime_384LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%|_BN_get0_nist_prime_521LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_BN_get_paramsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_BN_get_wordLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LXu_BN_hex2bnLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 42 ` LXG_BN_initLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_BN_is_bit_setLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_BN_is_primeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX _BN_is_prime_exLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_BN_is_prime_fasttestLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_BN_is_prime_fasttest_exLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX _BN_kroneckerLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX_BN_lshiftLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_BN_lshift1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_BN_mask_bitsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX _BN_mod_addLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXk _BN_mod_add_quickLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_BN_mod_expLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_BN_mod_exp2_montLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_BN_mod_exp_montLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX( _BN_mod_exp_mont_consttimeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#a _BN_mod_exp_mont_wordLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXm_BN_mod_exp_recpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _BN_mod_exp_simpleLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_BN_mod_inverseLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX0 _BN_mod_lshiftLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LXO _BN_mod_lshift1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _BN_mod_lshift1_quickLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"= _BN_mod_lshift_quickLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_BN_mod_mulLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_BN_mod_mul_montgomeryLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$l_BN_mod_mul_reciprocalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX _BN_mod_sqrLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX _BN_mod_sqrtLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX _BN_mod_subLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXu _BN_mod_sub_quickLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_BN_mod_wordLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX#_BN_mpi2bnLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 41 ` LX_BN_mulLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_BN_mul_wordLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 41 ` LX_BN_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _BN_nist_mod_192LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _BN_nist_mod_224LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXv_BN_nist_mod_256LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX9_BN_nist_mod_384LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_BN_nist_mod_521LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LX. _BN_nnmodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_BN_num_bitsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_BN_num_bits_wordLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_BN_optionsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LX_BN_printLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_BN_print_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_BN_pseudo_randLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _BN_pseudo_rand_rangeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 42 ` LX_BN_randLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _BN_rand_rangeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_BN_reciprocalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX_BN_rshiftLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_BN_rshift1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_BN_set_bitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX3_BN_set_negativeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_BN_set_paramsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_BN_set_wordLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 41 ` LX_BN_sqrLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 41 ` LX_BN_subLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_BN_sub_wordLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 42 ` LX _BN_swapLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_BN_to_ASN1_ENUMERATEDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_BN_to_ASN1_INTEGERLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 42 ` LX_BN_uaddLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 42 ` LX_BN_ucmpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 42 ` LX_BN_usubLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_BN_value_oneLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_BUF_MEM_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_BUF_MEM_growLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _BUF_MEM_grow_cleanLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_BUF_MEM_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX _BUF_memdupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_BUF_reverseLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_BUF_strdupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX _BUF_strlcatLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX _BUF_strlcpyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX _BUF_strndupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_BUF_strnlenLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_CAST_cbc_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_CAST_cfb64_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_CAST_decryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_CAST_ecb_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_CAST_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_CAST_ofb64_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_CAST_set_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX _CBIGNUM_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'_CERTIFICATEPOLICIES_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX% _CERTIFICATEPOLICIES_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_CERTIFICATEPOLICIES_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _CMAC_CTX_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _CMAC_CTX_copyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _CMAC_CTX_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX' _CMAC_CTX_get0_cipher_ctxLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_CMAC_CTX_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_CMAC_FinalLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX_CMAC_InitLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_CMAC_UpdateLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_CMAC_resumeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#|_CMS_ContentInfo_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_CMS_ContentInfo_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_CMS_ContentInfo_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(1_CMS_ContentInfo_print_ctxLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_CMS_EncryptedData_decryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_CMS_EncryptedData_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)_CMS_EncryptedData_set1_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX's_CMS_EnvelopedData_createLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_CMS_ReceiptRequest_create0LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&b_CMS_ReceiptRequest_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 65 ` LX-_CMS_ReceiptRequest_get0_valuesLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_CMS_ReceiptRequest_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_CMS_ReceiptRequest_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 69 ` LX1~_CMS_RecipientEncryptedKey_cert_cmpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 68 ` LX0_CMS_RecipientEncryptedKey_get0_idLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_CMS_RecipientInfo_decryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(h_CMS_RecipientInfo_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 66 ` LX._CMS_RecipientInfo_get0_pkey_ctxLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 65 ` LX-t_CMS_RecipientInfo_kari_decryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 66 ` LX.y_CMS_RecipientInfo_kari_get0_algLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 66 ` LX._CMS_RecipientInfo_kari_get0_ctxLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 70 ` LX2_CMS_RecipientInfo_kari_get0_orig_idLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 67 ` LX/_CMS_RecipientInfo_kari_get0_reksLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 69 ` LX1x_CMS_RecipientInfo_kari_orig_id_cmpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 67 ` LX/_CMS_RecipientInfo_kari_set0_pkeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 66 ` LX._CMS_RecipientInfo_kekri_get0_idLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 65 ` LX-_CMS_RecipientInfo_kekri_id_cmpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 66 ` LX.z_CMS_RecipientInfo_ktri_cert_cmpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 67 ` LX/{_CMS_RecipientInfo_ktri_get0_algsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 72 ` LX4_CMS_RecipientInfo_ktri_get0_signer_idLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)_CMS_RecipientInfo_set0_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 66 ` LX.4_CMS_RecipientInfo_set0_passwordLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_CMS_RecipientInfo_set0_pkeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_CMS_RecipientInfo_typeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_CMS_SharedInfo_encodeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_CMS_SignedData_initLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_CMS_SignerInfo_cert_cmpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'o_CMS_SignerInfo_get0_algsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_CMS_SignerInfo_get0_md_ctxLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+u_CMS_SignerInfo_get0_pkey_ctxLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX,_CMS_SignerInfo_get0_signatureLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,_CMS_SignerInfo_get0_signer_idLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 66 ` LX._CMS_SignerInfo_set1_signer_certLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_CMS_SignerInfo_signLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_CMS_SignerInfo_verifyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,v_CMS_SignerInfo_verify_contentLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*d_CMS_add0_CertificateChoicesLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,_CMS_add0_RevocationInfoChoiceLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_CMS_add0_certLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LXu_CMS_add0_crlLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_CMS_add0_recipient_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*2_CMS_add0_recipient_passwordLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_CMS_add1_ReceiptRequestLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXp_CMS_add1_certLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX5_CMS_add1_crlLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_CMS_add1_recipient_certLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_CMS_add1_signerLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&~_CMS_add_simple_smimecapLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_CMS_add_smimecapLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_CMS_add_standard_smimecapLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_CMS_compressLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LX_CMS_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_CMS_dataFinalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_CMS_dataInitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_CMS_data_createLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_CMS_decryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#n_CMS_decrypt_set1_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(3_CMS_decrypt_set1_passwordLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_CMS_decrypt_set1_pkeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _CMS_digest_createLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _CMS_digest_verifyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LXr_CMS_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX}_CMS_finalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_CMS_get0_RecipientInfosLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_CMS_get0_SignerInfosLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_CMS_get0_contentLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_CMS_get0_eContentTypeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_CMS_get0_signersLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_CMS_get0_typeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_CMS_get1_ReceiptRequestLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_CMS_get1_certsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_CMS_get1_crlsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_CMS_is_detachedLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_CMS_set1_eContentTypeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_CMS_set1_signers_certsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXq_CMS_set_detachedLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LX_CMS_signLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXg_CMS_sign_receiptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_CMS_signed_add1_attrLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*_CMS_signed_add1_attr_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_CMS_signed_add1_attr_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_CMS_signed_add1_attr_by_txtLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%i_CMS_signed_delete_attrLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*_CMS_signed_get0_data_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_CMS_signed_get_attrLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)_CMS_signed_get_attr_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_CMS_signed_get_attr_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_CMS_signed_get_attr_countLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_CMS_streamLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LXt_CMS_uncompressLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_CMS_unsigned_add1_attrLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX,_CMS_unsigned_add1_attr_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,e_CMS_unsigned_add1_attr_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,_CMS_unsigned_add1_attr_by_txtLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_CMS_unsigned_delete_attrLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX,w_CMS_unsigned_get0_data_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$y_CMS_unsigned_get_attrLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+k_CMS_unsigned_get_attr_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+_CMS_unsigned_get_attr_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*_CMS_unsigned_get_attr_countLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LXl_CMS_verifyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_CMS_verify_receiptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXI_COMP_CTX_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LXH_COMP_CTX_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"x_COMP_compress_blockLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX y_COMP_expand_blockLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LXz_COMP_rleLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX{_COMP_zlibLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX `_COMP_zlib_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_CONF_dump_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_CONF_dump_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX_CONF_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,z _CONF_get1_default_config_fileLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_CONF_get_numberLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_CONF_get_sectionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_CONF_get_stringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%{ _CONF_imodule_get_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&| _CONF_imodule_get_moduleLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$~ _CONF_imodule_get_nameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX( _CONF_imodule_get_usr_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%v _CONF_imodule_get_valueLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX% _CONF_imodule_set_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(o _CONF_imodule_set_usr_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX_CONF_loadLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _CONF_load_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_CONF_load_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXy _CONF_module_addLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'q _CONF_module_get_usr_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'w _CONF_module_set_usr_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"s _CONF_modules_finishLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _CONF_modules_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX } _CONF_modules_loadLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%n _CONF_modules_load_fileLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"u _CONF_modules_unloadLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXx _CONF_parse_listLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_CONF_set_default_methodLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX _CONF_set_nconfLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_CRL_DIST_POINTS_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!5 _CRL_DIST_POINTS_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_CRL_DIST_POINTS_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX r_CRYPTO_128_unwrapLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXp_CRYPTO_128_wrapLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"P_CRYPTO_THREADID_cmpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"E_CRYPTO_THREADID_cpyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_CRYPTO_THREADID_currentLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+@_CRYPTO_THREADID_get_callbackLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#0_CRYPTO_THREADID_hashLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+_CRYPTO_THREADID_set_callbackLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*_CRYPTO_THREADID_set_numericLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*?_CRYPTO_THREADID_set_pointerLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_CRYPTO_add_lockLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_CRYPTO_cbc128_decryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_CRYPTO_cbc128_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX )_CRYPTO_ccm128_aadLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$(_CRYPTO_ccm128_decryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_CRYPTO_ccm128_decrypt_ccm64LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_CRYPTO_ccm128_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_CRYPTO_ccm128_encrypt_ccm64LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!$_CRYPTO_ccm128_initLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"!_CRYPTO_ccm128_setivLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX '_CRYPTO_ccm128_tagLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_CRYPTO_cfb128_1_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_CRYPTO_cfb128_8_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_CRYPTO_cfb128_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX), _CRYPTO_cleanup_all_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_CRYPTO_ctr128_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_CRYPTO_ctr128_encrypt_ctr32LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_CRYPTO_cts128_decryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_CRYPTO_cts128_decrypt_blockLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_CRYPTO_cts128_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_CRYPTO_cts128_encrypt_blockLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_CRYPTO_dbg_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_CRYPTO_dbg_get_optionsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _CRYPTO_dbg_mallocLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_CRYPTO_dbg_reallocLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%m_CRYPTO_dbg_set_optionsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'm _CRYPTO_destroy_dynlockidLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_CRYPTO_dup_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX' _CRYPTO_ex_data_new_classLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_CRYPTO_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_CRYPTO_free_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_CRYPTO_free_lockedLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX #_CRYPTO_gcm128_aadLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$+_CRYPTO_gcm128_decryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*-_CRYPTO_gcm128_decrypt_ctr32LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_CRYPTO_gcm128_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*._CRYPTO_gcm128_encrypt_ctr32LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#/_CRYPTO_gcm128_finishLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!*_CRYPTO_gcm128_initLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX &_CRYPTO_gcm128_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_CRYPTO_gcm128_releaseLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_CRYPTO_gcm128_setivLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _CRYPTO_gcm128_tagLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+_CRYPTO_get_add_lock_callbackLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 69 ` LX1t _CRYPTO_get_dynlock_create_callbackLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 70 ` LX2r _CRYPTO_get_dynlock_destroy_callbackLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 67 ` LX/q _CRYPTO_get_dynlock_lock_callbackLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX's _CRYPTO_get_dynlock_valueLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_CRYPTO_get_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 68 ` LX0? _CRYPTO_get_ex_data_implementationLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_CRYPTO_get_ex_new_indexLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_CRYPTO_get_id_callbackLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_CRYPTO_get_lock_nameLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 69 ` LX1 _CRYPTO_get_locked_mem_ex_functionsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 66 ` LX._CRYPTO_get_locked_mem_functionsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_CRYPTO_get_locking_callbackLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 65 ` LX-o_CRYPTO_get_mem_debug_functionsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+_CRYPTO_get_mem_debug_optionsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*' _CRYPTO_get_mem_ex_functionsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_CRYPTO_get_mem_functionsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'j _CRYPTO_get_new_dynlockidLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_CRYPTO_get_new_lockidLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%p_CRYPTO_is_mem_check_onLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_CRYPTO_lockLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_CRYPTO_mallocLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_CRYPTO_malloc_lockedLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_CRYPTO_mem_ctrlLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_CRYPTO_mem_leaksLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_CRYPTO_mem_leaks_cbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_CRYPTO_mem_leaks_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXB_CRYPTO_memcmpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_CRYPTO_new_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(%_CRYPTO_nistcts128_decryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 66 ` LX._CRYPTO_nistcts128_decrypt_blockLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_CRYPTO_nistcts128_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 66 ` LX."_CRYPTO_nistcts128_encrypt_blockLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _CRYPTO_num_locksLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_CRYPTO_ofb128_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXr_CRYPTO_pop_infoLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX s_CRYPTO_push_info_LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_CRYPTO_reallocLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _CRYPTO_realloc_cleanLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_CRYPTO_remallocLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%n_CRYPTO_remove_all_infoLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+_CRYPTO_set_add_lock_callbackLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 69 ` LX1o _CRYPTO_set_dynlock_create_callbackLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 70 ` LX2l _CRYPTO_set_dynlock_destroy_callbackLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 67 ` LX/p _CRYPTO_set_dynlock_lock_callbackLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_CRYPTO_set_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 68 ` LX0 _CRYPTO_set_ex_data_implementationLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_CRYPTO_set_id_callbackLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 69 ` LX1 _CRYPTO_set_locked_mem_ex_functionsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 66 ` LX._CRYPTO_set_locked_mem_functionsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_CRYPTO_set_locking_callbackLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 65 ` LX-q_CRYPTO_set_mem_debug_functionsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+t_CRYPTO_set_mem_debug_optionsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX* _CRYPTO_set_mem_ex_functionsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_CRYPTO_set_mem_functionsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_CRYPTO_strdupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_CRYPTO_thread_idLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_CRYPTO_xts128_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_Camellia_cbc_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_Camellia_cfb128_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_Camellia_cfb1_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_Camellia_cfb8_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_Camellia_ctr128_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_Camellia_decryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_Camellia_ecb_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_Camellia_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_Camellia_ofb128_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_Camellia_set_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _DES_cbc_cksumLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _DES_cbc_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _DES_cfb64_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _DES_cfb_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_DES_check_key_parityLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX_DES_cryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_DES_decrypt3LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_DES_ecb3_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_DES_ecb_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_DES_ede3_cbc_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_DES_ede3_cbcm_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_DES_ede3_cfb64_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _DES_ede3_cfb_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_DES_ede3_ofb64_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_DES_enc_readLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_DES_enc_writeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_DES_encrypt1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_DES_encrypt2LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_DES_encrypt3LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_DES_fcryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_DES_is_weak_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_DES_key_schedLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_DES_ncbc_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _DES_ofb64_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_DES_ofb_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_DES_optionsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _DES_pcbc_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX!_DES_quad_cksumLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX"_DES_random_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _DES_read_2passwordsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _DES_read_passwordLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX(_DES_set_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"`_DES_set_key_checkedLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$c_DES_set_key_uncheckedLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!)_DES_set_odd_parityLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"*_DES_string_to_2keysLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX +_DES_string_to_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX,_DES_xcbc_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_DH_KDF_X9_42LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LXb_DH_OpenSSLLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LX_DH_checkLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_DH_check_pub_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_DH_compute_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$|_DH_compute_key_paddedLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 42 ` LX_DH_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_DH_generate_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_DH_generate_parametersLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_DH_generate_parameters_exLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXM_DH_get_1024_160LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXS_DH_get_2048_224LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXQ_DH_get_2048_256LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$d_DH_get_default_methodLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX^_DH_get_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"__DH_get_ex_new_indexLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 41 ` LX_DH_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXa_DH_new_methodLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$f_DH_set_default_methodLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX[_DH_set_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX\_DH_set_methodLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 42 ` LX_DH_sizeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LXr _DH_up_refLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_DHparams_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_DHparams_printLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _DHparams_print_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_DIRECTORYSTRING_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _DIRECTORYSTRING_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"Y_DIRECTORYSTRING_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_DISPLAYTEXT_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX _DISPLAYTEXT_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXs_DISPLAYTEXT_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX# _DIST_POINT_NAME_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _DIST_POINT_NAME_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _DIST_POINT_NAME_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_DIST_POINT_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _DIST_POINT_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_DIST_POINT_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$w_DIST_POINT_set_dpnameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX]_DSA_OpenSSLLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX6_DSA_SIG_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX5_DSA_SIG_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX7_DSA_do_signLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX8_DSA_do_verifyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LXO_DSA_dup_DHLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LX_DSA_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_DSA_generate_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_DSA_generate_parametersLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)g_DSA_generate_parameters_exLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_DSA_get_default_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXg_DSA_get_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#c_DSA_get_ex_new_indexLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 42 ` LX_DSA_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX`_DSA_new_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX_DSA_printLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_DSA_print_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_DSA_set_default_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXe_DSA_set_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_DSA_set_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LX_DSA_signLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_DSA_sign_setupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LX_DSA_sizeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX _DSA_up_refLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_DSA_verifyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_DSAparams_dupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_DSAparams_printLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_DSAparams_print_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_DSO_METHOD_beosLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_DSO_METHOD_dlLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_DSO_METHOD_dlfcnLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_DSO_METHOD_nullLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_DSO_METHOD_opensslLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX _DSO_METHOD_vmsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_DSO_METHOD_win32LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXi _DSO_bind_funcLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_DSO_bind_varLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#: _DSO_convert_filenameLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LX_DSO_ctrlLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX_DSO_flagsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LX_DSO_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_DSO_get_default_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX+ _DSO_get_filenameLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _DSO_get_loaded_filenameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_DSO_get_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX c_DSO_global_lookupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LX_DSO_loadLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX_DSO_mergeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 42 ` LX_DSO_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_DSO_new_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_DSO_pathbyaddrLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_DSO_set_default_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX> _DSO_set_filenameLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_DSO_set_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%! _DSO_set_name_converterLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX _DSO_up_refLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_ECDH_KDF_X9_62LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXr _ECDH_OpenSSLLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX<_ECDH_compute_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _ECDH_get_default_methodLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXn _ECDH_get_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_ECDH_get_ex_new_indexLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX& _ECDH_set_default_methodLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_ECDH_set_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_ECDH_set_methodLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _ECDSA_METHOD_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_ECDSA_METHOD_get_app_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_ECDSA_METHOD_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_ECDSA_METHOD_set_app_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%v_ECDSA_METHOD_set_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$s_ECDSA_METHOD_set_nameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$}_ECDSA_METHOD_set_signLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*w_ECDSA_METHOD_set_sign_setupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_ECDSA_METHOD_set_verifyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX$_ECDSA_OpenSSLLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX _ECDSA_SIG_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXC _ECDSA_SIG_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXp _ECDSA_do_signLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXW_ECDSA_do_sign_exLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXX_ECDSA_do_verifyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX' _ECDSA_get_default_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _ECDSA_get_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_ECDSA_get_ex_new_indexLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX')_ECDSA_set_default_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _ECDSA_set_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_ECDSA_set_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_ECDSA_signLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXK _ECDSA_sign_exLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXX _ECDSA_sign_setupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LXz_ECDSA_sizeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXR_ECDSA_verifyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_ECPKParameters_printLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&} _ECPKParameters_print_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _ECParameters_printLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$h_ECParameters_print_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_EC_GF2m_simple_methodLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _EC_GFp_mont_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _EC_GFp_nist_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _EC_GFp_simple_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX _EC_GROUP_checkLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*, _EC_GROUP_check_discriminantLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _EC_GROUP_clear_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX+_EC_GROUP_cmpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _EC_GROUP_copyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LXM_EC_GROUP_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX= _EC_GROUP_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX& _EC_GROUP_get0_generatorLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_EC_GROUP_get0_seedLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_EC_GROUP_get_asn1_flagLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&5_EC_GROUP_get_basis_typeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX${ _EC_GROUP_get_cofactorLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX& _EC_GROUP_get_curve_GF2mLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _EC_GROUP_get_curve_GFpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&o_EC_GROUP_get_curve_nameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _EC_GROUP_get_degreeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_EC_GROUP_get_mont_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _EC_GROUP_get_orderLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 65 ` LX-Q _EC_GROUP_get_pentanomial_basisLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 69 ` LX1M _EC_GROUP_get_point_conversion_formLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$ _EC_GROUP_get_seed_lenLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+ _EC_GROUP_get_trinomial_basisLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX,e _EC_GROUP_have_precompute_multLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _EC_GROUP_method_ofLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX _EC_GROUP_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_EC_GROUP_new_by_curve_nameLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&6 _EC_GROUP_new_curve_GF2mLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%E _EC_GROUP_new_curve_GFpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX' _EC_GROUP_precompute_multLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_EC_GROUP_set_asn1_flagLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _EC_GROUP_set_curve_GF2mLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _EC_GROUP_set_curve_GFpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _EC_GROUP_set_curve_nameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _EC_GROUP_set_generatorLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 69 ` LX1!_EC_GROUP_set_point_conversion_formLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _EC_GROUP_set_seedLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_EC_KEY_check_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_EC_KEY_clear_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX) _EC_KEY_copyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_EC_KEY_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX^ _EC_KEY_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _EC_KEY_generate_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _EC_KEY_get0_groupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_EC_KEY_get0_private_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _EC_KEY_get0_public_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#< _EC_KEY_get_conv_formLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#&_EC_KEY_get_enc_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_EC_KEY_get_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)J _EC_KEY_get_key_method_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX, _EC_KEY_insert_key_method_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LXO_EC_KEY_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX' _EC_KEY_new_by_curve_nameLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%. _EC_KEY_precompute_multLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_EC_KEY_printLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXf _EC_KEY_print_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#H _EC_KEY_set_asn1_flagLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#s _EC_KEY_set_conv_formLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#Q_EC_KEY_set_enc_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_EC_KEY_set_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _EC_KEY_set_groupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX% _EC_KEY_set_private_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$b_EC_KEY_set_public_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 75 ` LX7_EC_KEY_set_public_key_affine_coordinatesLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXZ _EC_KEY_up_refLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX' _EC_METHOD_get_field_typeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX _EC_POINT_addLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX F _EC_POINT_bn2pointLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _EC_POINT_clear_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX _EC_POINT_cmpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _EC_POINT_copyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX _EC_POINT_dblLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXt _EC_POINT_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXq _EC_POINT_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 75 ` LX7 _EC_POINT_get_Jprojective_coordinates_GFpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 71 ` LX3L_EC_POINT_get_affine_coordinates_GF2mLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 70 ` LX2] _EC_POINT_get_affine_coordinates_GFpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_EC_POINT_hex2pointLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXP _EC_POINT_invertLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&8 _EC_POINT_is_at_infinityLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX# _EC_POINT_is_on_curveLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#* _EC_POINT_make_affineLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!$ _EC_POINT_method_ofLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX _EC_POINT_mulLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXl _EC_POINT_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _EC_POINT_oct2pointLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX 3 _EC_POINT_point2bnLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!S_EC_POINT_point2hexLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!j _EC_POINT_point2octLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 75 ` LX7 _EC_POINT_set_Jprojective_coordinates_GFpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 71 ` LX3 _EC_POINT_set_affine_coordinates_GF2mLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 70 ` LX23 _EC_POINT_set_affine_coordinates_GFpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 75 ` LX7*_EC_POINT_set_compressed_coordinates_GF2mLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 74 ` LX6% _EC_POINT_set_compressed_coordinates_GFpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'h _EC_POINT_set_to_infinityLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$ _EC_POINTs_make_affineLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX| _EC_POINTs_mulLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX P_EC_curve_nid2nistLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX L_EC_curve_nist2nidLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$w _EC_get_builtin_curvesLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX C _EDIPARTYNAME_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _EDIPARTYNAME_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXo _EDIPARTYNAME_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX _ENGINE_addLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX% _ENGINE_add_conf_moduleLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX _ENGINE_by_idLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX _ENGINE_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX' _ENGINE_cmd_is_executableLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX _ENGINE_ctrlLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXT _ENGINE_ctrl_cmdLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%D _ENGINE_ctrl_cmd_stringLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _ENGINE_finishLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX _ENGINE_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _ENGINE_get_DHLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX _ENGINE_get_DSALIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_ENGINE_get_ECDHLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_ENGINE_get_ECDSALIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _ENGINE_get_RANDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX _ENGINE_get_RSALIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXT_ENGINE_get_STORELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _ENGINE_get_cipherLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX' _ENGINE_get_cipher_engineLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _ENGINE_get_ciphersLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#b _ENGINE_get_cmd_defnsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX' _ENGINE_get_ctrl_functionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$ _ENGINE_get_default_DHLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _ENGINE_get_default_DSALIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&; _ENGINE_get_default_ECDHLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'N_ENGINE_get_default_ECDSALIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _ENGINE_get_default_RANDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _ENGINE_get_default_RSALIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX* _ENGINE_get_destroy_functionLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _ENGINE_get_digestLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX' _ENGINE_get_digest_engineLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _ENGINE_get_digestsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!( _ENGINE_get_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _ENGINE_get_ex_new_indexLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX) _ENGINE_get_finish_functionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _ENGINE_get_firstLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_ _ENGINE_get_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _ENGINE_get_idLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX' _ENGINE_get_init_functionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _ENGINE_get_lastLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 67 ` LX/d _ENGINE_get_load_privkey_functionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 66 ` LX. _ENGINE_get_load_pubkey_functionLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _ENGINE_get_nameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _ENGINE_get_nextLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(7_ENGINE_get_pkey_asn1_methLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 67 ` LX/,_ENGINE_get_pkey_asn1_meth_engineLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX,)_ENGINE_get_pkey_asn1_meth_strLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)_ENGINE_get_pkey_asn1_methsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#:_ENGINE_get_pkey_methLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*I_ENGINE_get_pkey_meth_engineLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_ENGINE_get_pkey_methsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _ENGINE_get_prevLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 70 ` LX2_ENGINE_get_ssl_client_cert_functionLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&A _ENGINE_get_static_stateLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%G _ENGINE_get_table_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX _ENGINE_initLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX* _ENGINE_load_builtin_enginesLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$9 _ENGINE_load_cryptodevLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _ENGINE_load_dynamicLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"a _ENGINE_load_opensslLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX& _ENGINE_load_private_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _ENGINE_load_public_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _ENGINE_load_rdrandLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*_ENGINE_load_ssl_client_certLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX _ENGINE_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_ENGINE_pkey_asn1_find_strLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _ENGINE_register_DHLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _ENGINE_register_DSALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX# _ENGINE_register_ECDHLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$ _ENGINE_register_ECDSALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#1 _ENGINE_register_RANDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"h _ENGINE_register_RSALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$e_ENGINE_register_STORELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%[ _ENGINE_register_all_DHLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&f _ENGINE_register_all_DSALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'>_ENGINE_register_all_ECDHLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(J_ENGINE_register_all_ECDSALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX' _ENGINE_register_all_RANDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _ENGINE_register_all_RSALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX( _ENGINE_register_all_STORELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX* _ENGINE_register_all_ciphersLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+ _ENGINE_register_all_completeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*M _ENGINE_register_all_digestsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 70 ` LX2._ENGINE_register_all_pkey_asn1_methsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 65 ` LX-_ENGINE_register_all_pkey_methsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&< _ENGINE_register_ciphersLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'} _ENGINE_register_completeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&I _ENGINE_register_digestsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 66 ` LX._ENGINE_register_pkey_asn1_methsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)!_ENGINE_register_pkey_methsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _ENGINE_removeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _ENGINE_set_DHLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX _ENGINE_set_DSALIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _ENGINE_set_ECDHLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_ENGINE_set_ECDSALIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _ENGINE_set_RANDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX _ENGINE_set_RSALIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _ENGINE_set_STORELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!t _ENGINE_set_ciphersLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#; _ENGINE_set_cmd_defnsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX' _ENGINE_set_ctrl_functionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _ENGINE_set_defaultLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$ _ENGINE_set_default_DHLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _ENGINE_set_default_DSALIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_ENGINE_set_default_ECDHLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX' _ENGINE_set_default_ECDSALIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _ENGINE_set_default_RANDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _ENGINE_set_default_RSALIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX) _ENGINE_set_default_ciphersLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)e _ENGINE_set_default_digestsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 69 ` LX1a_ENGINE_set_default_pkey_asn1_methsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX,_ENGINE_set_default_pkey_methsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(p _ENGINE_set_default_stringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX* _ENGINE_set_destroy_functionLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!y _ENGINE_set_digestsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _ENGINE_set_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX) _ENGINE_set_finish_functionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXZ _ENGINE_set_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _ENGINE_set_idLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX' _ENGINE_set_init_functionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 67 ` LX/c _ENGINE_set_load_privkey_functionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 66 ` LX. _ENGINE_set_load_pubkey_functionLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 75 ` LX7_ENGINE_set_load_ssl_client_cert_functionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _ENGINE_set_nameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)9_ENGINE_set_pkey_asn1_methsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_ENGINE_set_pkey_methsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _ENGINE_set_table_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#e _ENGINE_unregister_DHLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$i _ENGINE_unregister_DSALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%q _ENGINE_unregister_ECDHLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_ENGINE_unregister_ECDSALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _ENGINE_unregister_RANDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$ _ENGINE_unregister_RSALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&8 _ENGINE_unregister_STORELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX( _ENGINE_unregister_ciphersLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX( _ENGINE_unregister_digestsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 68 ` LX0_ENGINE_unregister_pkey_asn1_methsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+~_ENGINE_unregister_pkey_methsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _ENGINE_up_refLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!9_ERR_add_error_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_ERR_add_error_vdataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_ERR_clear_errorLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_ERR_error_stringLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_ERR_error_string_nLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_ERR_free_stringsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_ERR_func_error_stringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_ERR_get_err_state_tableLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_ERR_get_errorLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_ERR_get_error_lineLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_ERR_get_error_line_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%) _ERR_get_implementationLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_ERR_get_next_error_libraryLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_ERR_get_stateLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_ERR_get_string_tableLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_ERR_lib_error_stringLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_ERR_load_ASN1_stringsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_ERR_load_BIO_stringsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_ERR_load_BN_stringsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_ERR_load_BUF_stringsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#f_ERR_load_CMS_stringsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$ _ERR_load_COMP_stringsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_ERR_load_CONF_stringsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_ERR_load_CRYPTO_stringsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_ERR_load_DH_stringsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_ERR_load_DSA_stringsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_ERR_load_DSO_stringsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_ERR_load_ECDH_stringsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%4_ERR_load_ECDSA_stringsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"! _ERR_load_EC_stringsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX& _ERR_load_ENGINE_stringsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_ERR_load_ERR_stringsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_ERR_load_EVP_stringsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_ERR_load_OBJ_stringsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$i _ERR_load_OCSP_stringsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_ERR_load_PEM_stringsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_ERR_load_PKCS12_stringsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_ERR_load_PKCS7_stringsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_ERR_load_RAND_stringsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_ERR_load_RSA_stringsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_ERR_load_TS_stringsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _ERR_load_UI_stringsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_ERR_load_X509V3_stringsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_ERR_load_X509_stringsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_ERR_load_crypto_stringsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_ERR_load_stringsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_ERR_peek_errorLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_ERR_peek_error_lineLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_ERR_peek_error_line_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _ERR_peek_last_errorLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX' _ERR_peek_last_error_lineLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX, _ERR_peek_last_error_line_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _ERR_pop_to_markLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_ERR_print_errorsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"s _ERR_print_errors_cbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_ERR_print_errors_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_ERR_put_errorLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_ERR_reason_error_stringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX* _ERR_release_err_state_tableLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_ERR_remove_stateLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&]_ERR_remove_thread_stateLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!:_ERR_set_error_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX% _ERR_set_implementationLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX _ERR_set_markLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!A _ERR_unload_stringsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXk_ESS_CERT_ID_dupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX}_ESS_CERT_ID_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_ESS_CERT_ID_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_ESS_ISSUER_SERIAL_dupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%'_ESS_ISSUER_SERIAL_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$4_ESS_ISSUER_SERIAL_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#d_ESS_SIGNING_CERT_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_ESS_SIGNING_CERT_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#!_ESS_SIGNING_CERT_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_EVP_BytesToKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX('_EVP_CIPHER_CTX_block_sizeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$0_EVP_CIPHER_CTX_cipherLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_EVP_CIPHER_CTX_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_EVP_CIPHER_CTX_clear_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_EVP_CIPHER_CTX_copyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"` _EVP_CIPHER_CTX_ctrlLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#3_EVP_CIPHER_CTX_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_EVP_CIPHER_CTX_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*1_EVP_CIPHER_CTX_get_app_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_EVP_CIPHER_CTX_initLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX';_EVP_CIPHER_CTX_iv_lengthLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_EVP_CIPHER_CTX_key_lengthLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_EVP_CIPHER_CTX_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_EVP_CIPHER_CTX_nidLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_EVP_CIPHER_CTX_rand_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_EVP_CIPHER_CTX_set_app_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_EVP_CIPHER_CTX_set_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX,_ _EVP_CIPHER_CTX_set_key_lengthLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX) _EVP_CIPHER_CTX_set_paddingLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_EVP_CIPHER_CTX_test_flagsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX';_EVP_CIPHER_asn1_to_paramLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_EVP_CIPHER_block_sizeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _EVP_CIPHER_do_allLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'M_EVP_CIPHER_do_all_sortedLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_EVP_CIPHER_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%=_EVP_CIPHER_get_asn1_ivLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_EVP_CIPHER_iv_lengthLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$!_EVP_CIPHER_key_lengthLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX%_EVP_CIPHER_nidLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'<_EVP_CIPHER_param_to_asn1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%>_EVP_CIPHER_set_asn1_ivLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXq_EVP_CIPHER_typeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX"_EVP_CipherLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_CipherFinalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!* _EVP_CipherFinal_exLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_EVP_CipherInitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX c _EVP_CipherInit_exLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_EVP_CipherUpdateLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_DecodeBlockLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_DecodeFinalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_EVP_DecodeInitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_EVP_DecodeUpdateLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_EVP_DecryptFinalLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"` _EVP_DecryptFinal_exLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _EVP_DecryptInitLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _EVP_DecryptInit_exLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _EVP_DecryptUpdateLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX] _EVP_DigestLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _EVP_DigestFinalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!x _EVP_DigestFinal_exLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX _EVP_DigestInitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX % _EVP_DigestInit_exLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_EVP_DigestSignFinalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!0_EVP_DigestSignInitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _EVP_DigestUpdateLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$n_EVP_DigestVerifyFinalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_EVP_DigestVerifyInitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_EncodeBlockLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_EncodeFinalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_EVP_EncodeInitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_EVP_EncodeUpdateLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_EVP_EncryptFinalLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"d _EVP_EncryptFinal_exLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_EncryptInitLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!N _EVP_EncryptInit_exLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _EVP_EncryptUpdateLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _EVP_MD_CTX_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX% _EVP_MD_CTX_clear_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_MD_CTX_copyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _EVP_MD_CTX_copy_exLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _EVP_MD_CTX_createLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!m _EVP_MD_CTX_destroyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXF _EVP_MD_CTX_initLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX8_EVP_MD_CTX_mdLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#+_EVP_MD_CTX_set_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_EVP_MD_CTX_test_flagsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX 2_EVP_MD_block_sizeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXZ_EVP_MD_do_allLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_EVP_MD_do_all_sortedLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_EVP_MD_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _EVP_MD_pkey_typeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_EVP_MD_sizeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_EVP_MD_typeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_EVP_OpenFinalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_EVP_OpenInitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!r_EVP_PBE_CipherInitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX*_EVP_PBE_alg_addLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#U_EVP_PBE_alg_add_typeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX,_EVP_PBE_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX"_EVP_PBE_findLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX&_EVP_PKCS82PKEYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX'_EVP_PKEY2PKCS8LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_EVP_PKEY2PKCS8_brokenLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _EVP_PKEY_CTX_ctrlLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$[_EVP_PKEY_CTX_ctrl_strLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_EVP_PKEY_CTX_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX N_EVP_PKEY_CTX_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(q_EVP_PKEY_CTX_get0_peerkeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_EVP_PKEY_CTX_get0_pkeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_EVP_PKEY_CTX_get_app_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"C_EVP_PKEY_CTX_get_cbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$z_EVP_PKEY_CTX_get_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+)_EVP_PKEY_CTX_get_keygen_infoLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)R_EVP_PKEY_CTX_get_operationLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_EVP_PKEY_CTX_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_EVP_PKEY_CTX_new_idLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,v_EVP_PKEY_CTX_set0_keygen_infoLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_EVP_PKEY_CTX_set_app_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_EVP_PKEY_CTX_set_cbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$V_EVP_PKEY_CTX_set_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!j_EVP_PKEY_add1_attrLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX( _EVP_PKEY_add1_attr_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_EVP_PKEY_add1_attr_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(R _EVP_PKEY_add1_attr_by_txtLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!"_EVP_PKEY_asn1_add0LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&~_EVP_PKEY_asn1_add_aliasLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!K_EVP_PKEY_asn1_copyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_EVP_PKEY_asn1_findLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_EVP_PKEY_asn1_find_strLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_EVP_PKEY_asn1_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_EVP_PKEY_asn1_get0LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_EVP_PKEY_asn1_get0_infoLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_EVP_PKEY_asn1_get_countLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX 8_EVP_PKEY_asn1_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_EVP_PKEY_asn1_set_ctrlLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%R_EVP_PKEY_asn1_set_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_EVP_PKEY_asn1_set_itemLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _EVP_PKEY_asn1_set_paramLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_EVP_PKEY_asn1_set_privateLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'K_EVP_PKEY_asn1_set_publicLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_PKEY_assignLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_EVP_PKEY_base_idLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_EVP_PKEY_bitsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LXi _EVP_PKEY_cmpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_EVP_PKEY_cmp_parametersLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_EVP_PKEY_copy_parametersLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX._EVP_PKEY_decryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_EVP_PKEY_decrypt_initLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_EVP_PKEY_decrypt_oldLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#(_EVP_PKEY_delete_attrLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX$_EVP_PKEY_deriveLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#|_EVP_PKEY_derive_initLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'_EVP_PKEY_derive_set_peerLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX/_EVP_PKEY_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$D_EVP_PKEY_encrypt_initLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#C_EVP_PKEY_encrypt_oldLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_EVP_PKEY_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXW_EVP_PKEY_get0LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!S_EVP_PKEY_get0_asn1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXP_EVP_PKEY_get1_DHLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _EVP_PKEY_get1_DSALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#9 _EVP_PKEY_get1_EC_KEYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _EVP_PKEY_get1_RSALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX o _EVP_PKEY_get_attrLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_EVP_PKEY_get_attr_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'C_EVP_PKEY_get_attr_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _EVP_PKEY_get_attr_countLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 66 ` LX.\_EVP_PKEY_get_default_digest_nidLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LXv_EVP_PKEY_idLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX/_EVP_PKEY_keygenLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#W_EVP_PKEY_keygen_initLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!^_EVP_PKEY_meth_add0LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_EVP_PKEY_meth_copyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!u_EVP_PKEY_meth_findLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!l_EVP_PKEY_meth_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_EVP_PKEY_meth_get0_infoLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX `_EVP_PKEY_meth_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_EVP_PKEY_meth_set_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_EVP_PKEY_meth_set_copyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_EVP_PKEY_meth_set_ctrlLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX('_EVP_PKEY_meth_set_decryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_EVP_PKEY_meth_set_deriveLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX( _EVP_PKEY_meth_set_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_EVP_PKEY_meth_set_initLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'_EVP_PKEY_meth_set_keygenLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_EVP_PKEY_meth_set_paramgenLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_EVP_PKEY_meth_set_signLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(J_EVP_PKEY_meth_set_signctxLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_EVP_PKEY_meth_set_verifyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 67 ` LX/_EVP_PKEY_meth_set_verify_recoverLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*_EVP_PKEY_meth_set_verifyctxLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_EVP_PKEY_missing_parametersLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_EVP_PKEY_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#N_EVP_PKEY_new_mac_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _EVP_PKEY_paramgenLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_EVP_PKEY_paramgen_initLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$o_EVP_PKEY_print_paramsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_EVP_PKEY_print_privateLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_EVP_PKEY_print_publicLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_EVP_PKEY_save_parametersLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX;_EVP_PKEY_set1_DHLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _EVP_PKEY_set1_DSALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#z _EVP_PKEY_set1_EC_KEYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _EVP_PKEY_set1_RSALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _EVP_PKEY_set_typeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$(_EVP_PKEY_set_type_strLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_EVP_PKEY_signLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_EVP_PKEY_sign_initLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_EVP_PKEY_sizeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_EVP_PKEY_typeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_PKEY_verifyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#z_EVP_PKEY_verify_initLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_EVP_PKEY_verify_recoverLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+U_EVP_PKEY_verify_recover_initLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_EVP_SealFinalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX _EVP_SealInitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX!_EVP_SignFinalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX"_EVP_VerifyFinalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_EVP_add_alg_moduleLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX$_EVP_add_cipherLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX%_EVP_add_digestLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXo _EVP_aes_128_cbcLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_EVP_aes_128_cbc_hmac_sha1LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*{_EVP_aes_128_cbc_hmac_sha256LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_aes_128_ccmLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _EVP_aes_128_cfb1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _EVP_aes_128_cfb128LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _EVP_aes_128_cfb8LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_aes_128_ctrLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXT _EVP_aes_128_ecbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_aes_128_gcmLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _EVP_aes_128_ofbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_EVP_aes_128_wrapLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_aes_128_xtsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXS _EVP_aes_192_cbcLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _EVP_aes_192_ccmLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _EVP_aes_192_cfb1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _EVP_aes_192_cfb128LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _EVP_aes_192_cfb8LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_aes_192_ctrLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX. _EVP_aes_192_ecbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_aes_192_gcmLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _EVP_aes_192_ofbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXz_EVP_aes_192_wrapLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _EVP_aes_256_cbcLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(0_EVP_aes_256_cbc_hmac_sha1LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_EVP_aes_256_cbc_hmac_sha256LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_aes_256_ccmLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _EVP_aes_256_cfb1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _EVP_aes_256_cfb128LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _EVP_aes_256_cfb8LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_aes_256_ctrLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _EVP_aes_256_ecbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_aes_256_gcmLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _EVP_aes_256_ofbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXo_EVP_aes_256_wrapLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_aes_256_xtsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX&_EVP_bf_cbcLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX'_EVP_bf_cfb64LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX(_EVP_bf_ecbLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX)_EVP_bf_ofbLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_EVP_camellia_128_cbcLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_EVP_camellia_128_cfb1LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_EVP_camellia_128_cfb128LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_EVP_camellia_128_cfb8LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_EVP_camellia_128_ecbLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_EVP_camellia_128_ofbLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_EVP_camellia_192_cbcLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_EVP_camellia_192_cfb1LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_EVP_camellia_192_cfb128LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_EVP_camellia_192_cfb8LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_EVP_camellia_192_ecbLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_EVP_camellia_192_ofbLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_EVP_camellia_256_cbcLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_EVP_camellia_256_cfb1LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_EVP_camellia_256_cfb128LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_EVP_camellia_256_cfb8LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_EVP_camellia_256_ecbLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_EVP_camellia_256_ofbLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_EVP_cast5_cbcLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_EVP_cast5_cfb64LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_EVP_cast5_ecbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_EVP_cast5_ofbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX*_EVP_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX+_EVP_des_cbcLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX _EVP_des_cfb1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX,_EVP_des_cfb64LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX _EVP_des_cfb8LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX-_EVP_des_ecbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX._EVP_des_edeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX/_EVP_des_ede3LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX0_EVP_des_ede3_cbcLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _EVP_des_ede3_cfb1LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!1_EVP_des_ede3_cfb64LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _EVP_des_ede3_cfb8LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _EVP_des_ede3_ecbLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX2_EVP_des_ede3_ofbLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _EVP_des_ede3_wrapLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX3_EVP_des_ede_cbcLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX 4_EVP_des_ede_cfb64LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _EVP_des_ede_ecbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX5_EVP_des_ede_ofbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX6_EVP_des_ofbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX7_EVP_desx_cbcLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 42 ` LX8_EVP_dssLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LX9_EVP_dss1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX_EVP_ecdsaLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX:_EVP_enc_nullLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#;_EVP_get_cipherbynameLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#<_EVP_get_digestbynameLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX =_EVP_get_pw_promptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX>_EVP_idea_cbcLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX?_EVP_idea_cfb64LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX@_EVP_idea_ecbLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXA_EVP_idea_ofbLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 42 ` LX _EVP_md4LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 42 ` LXC_EVP_md5LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LXD_EVP_md_nullLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LX_EVP_mdc2LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_EVP_rc2_40_cbcLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LXO_EVP_rc2_64_cbcLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LXE_EVP_rc2_cbcLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXF_EVP_rc2_cfb64LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LXG_EVP_rc2_ecbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LXH_EVP_rc2_ofbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 42 ` LXI_EVP_rc4LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_EVP_rc4_40LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_EVP_rc4_hmac_md5LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!J_EVP_read_pw_stringLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_EVP_read_pw_string_minLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_EVP_ripemd160LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LXJ_EVP_seed_cbcLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXN_EVP_seed_cfb128LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LXL_EVP_seed_ecbLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXG_EVP_seed_ofbLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX K_EVP_set_pw_promptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 42 ` LXL_EVP_shaLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LXM_EVP_sha1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX _EVP_sha224LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX _EVP_sha256LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX _EVP_sha384LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX _EVP_sha512LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_EVP_whirlpoolLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&G _EXTENDED_KEY_USAGE_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$ _EXTENDED_KEY_USAGE_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _EXTENDED_KEY_USAGE_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX _FIPS_modeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _FIPS_mode_setLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_GENERAL_NAMES_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _GENERAL_NAMES_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _GENERAL_NAMES_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_GENERAL_NAME_cmpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX3_GENERAL_NAME_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _GENERAL_NAME_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_GENERAL_NAME_get0_otherNameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_GENERAL_NAME_get0_valueLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX" _GENERAL_NAME_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_GENERAL_NAME_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!6 _GENERAL_NAME_printLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*E_GENERAL_NAME_set0_othernameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_GENERAL_NAME_set0_valueLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX# _GENERAL_SUBTREE_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!n_GENERAL_SUBTREE_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"u _GENERAL_SUBTREE_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 39 ` LX_HMACLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _HMAC_CTX_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_HMAC_CTX_copyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _HMAC_CTX_initLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _HMAC_CTX_set_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_HMAC_FinalLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX_HMAC_InitLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX _HMAC_Init_exLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_HMAC_UpdateLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&3_ISSUING_DIST_POINT_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$O_ISSUING_DIST_POINT_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_ISSUING_DIST_POINT_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _KRB5_APREQBODY_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _KRB5_APREQBODY_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!B _KRB5_APREQBODY_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXk _KRB5_APREQ_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _KRB5_APREQ_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX _KRB5_APREQ_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _KRB5_AUTHDATA_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX1 _KRB5_AUTHDATA_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX  _KRB5_AUTHDATA_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$ _KRB5_AUTHENTBODY_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _KRB5_AUTHENTBODY_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX# _KRB5_AUTHENTBODY_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX U _KRB5_AUTHENT_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _KRB5_AUTHENT_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _KRB5_AUTHENT_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!J _KRB5_CHECKSUM_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _KRB5_CHECKSUM_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _KRB5_CHECKSUM_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _KRB5_ENCDATA_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _KRB5_ENCDATA_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _KRB5_ENCDATA_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _KRB5_ENCKEY_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX _KRB5_ENCKEY_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _KRB5_ENCKEY_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _KRB5_PRINCNAME_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _KRB5_PRINCNAME_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _KRB5_PRINCNAME_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXT _KRB5_TICKET_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LXR _KRB5_TICKET_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _KRB5_TICKET_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX @ _KRB5_TKTBODY_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _KRB5_TKTBODY_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _KRB5_TKTBODY_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 42 ` LX0 _LONG_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 38 ` LX _MD4LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX _MD4_FinalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LX _MD4_InitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _MD4_TransformLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX _MD4_UpdateLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 38 ` LXS_MD5LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LXT_MD5_FinalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LXU_MD5_InitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_MD5_TransformLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LXV_MD5_UpdateLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 39 ` LXW_MDC2LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LXX_MDC2_FinalLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LXY_MDC2_InitLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LXZ_MDC2_UpdateLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_NAME_CONSTRAINTS_checkLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$ _NAME_CONSTRAINTS_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _NAME_CONSTRAINTS_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX# _NAME_CONSTRAINTS_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX _NCONF_WIN32LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _NCONF_defaultLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_NCONF_dump_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_NCONF_dump_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_NCONF_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_NCONF_free_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _NCONF_get_number_eLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _NCONF_get_sectionLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_NCONF_get_stringLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_NCONF_loadLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_NCONF_load_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_NCONF_load_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX_NCONF_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_NETSCAPE_CERT_SEQUENCE_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX( _NETSCAPE_CERT_SEQUENCE_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)_NETSCAPE_CERT_SEQUENCE_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"[_NETSCAPE_SPKAC_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX Q _NETSCAPE_SPKAC_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!\_NETSCAPE_SPKAC_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'm_NETSCAPE_SPKI_b64_decodeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'k_NETSCAPE_SPKI_b64_encodeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!]_NETSCAPE_SPKI_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'l_NETSCAPE_SPKI_get_pubkeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _NETSCAPE_SPKI_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX ^_NETSCAPE_SPKI_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"i_NETSCAPE_SPKI_printLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'j_NETSCAPE_SPKI_set_pubkeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!__NETSCAPE_SPKI_signLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#`_NETSCAPE_SPKI_verifyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_NETSCAPE_X509_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_NETSCAPE_X509_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _NETSCAPE_X509_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_NOTICEREF_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX _NOTICEREF_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_NOTICEREF_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LXM_OBJ_NAME_addLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXP_OBJ_NAME_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX{ _OBJ_NAME_do_allLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _OBJ_NAME_do_all_sortedLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXQ_OBJ_NAME_getLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXR_OBJ_NAME_initLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!S_OBJ_NAME_new_indexLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXT_OBJ_NAME_removeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LXa_OBJ_add_objectLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_OBJ_add_sigidLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_OBJ_bsearch_LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_OBJ_bsearch_ex_LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LXc_OBJ_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 42 ` LXd_OBJ_cmpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LXe_OBJ_createLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_OBJ_create_objectsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 42 ` LXf_OBJ_dupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_OBJ_find_sigid_algsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%r_OBJ_find_sigid_by_algsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LXg_OBJ_ln2nidLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LXh_OBJ_new_nidLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LXi_OBJ_nid2lnLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LXj_OBJ_nid2objLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LXk_OBJ_nid2snLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LXl_OBJ_obj2nidLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LXN_OBJ_obj2txtLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_OBJ_sigid_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LXm_OBJ_sn2nidLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LXn_OBJ_txt2nidLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_OBJ_txt2objLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX* _OCSP_BASICRESP_add1_ext_i2dLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _OCSP_BASICRESP_add_extLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX( _OCSP_BASICRESP_delete_extLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _OCSP_BASICRESP_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*Y _OCSP_BASICRESP_get1_ext_d2iLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%> _OCSP_BASICRESP_get_extLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX, _OCSP_BASICRESP_get_ext_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX, _OCSP_BASICRESP_get_ext_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 69 ` LX1V _OCSP_BASICRESP_get_ext_by_criticalLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+ _OCSP_BASICRESP_get_ext_countLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _OCSP_BASICRESP_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _OCSP_BASICRESP_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_OCSP_CERTID_dupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _OCSP_CERTID_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX _OCSP_CERTID_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _OCSP_CERTID_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#] _OCSP_CERTSTATUS_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!, _OCSP_CERTSTATUS_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"+ _OCSP_CERTSTATUS_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXX _OCSP_CRLID_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX7 _OCSP_CRLID_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX^ _OCSP_CRLID_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'I _OCSP_ONEREQ_add1_ext_i2dLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"v _OCSP_ONEREQ_add_extLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%^ _OCSP_ONEREQ_delete_extLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _OCSP_ONEREQ_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX' _OCSP_ONEREQ_get1_ext_d2iLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"# _OCSP_ONEREQ_get_extLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX) _OCSP_ONEREQ_get_ext_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)+ _OCSP_ONEREQ_get_ext_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 66 ` LX.g _OCSP_ONEREQ_get_ext_by_criticalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX( _OCSP_ONEREQ_get_ext_countLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX` _OCSP_ONEREQ_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXQ _OCSP_ONEREQ_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX D _OCSP_REQINFO_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _OCSP_REQINFO_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX= _OCSP_REQINFO_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX( _OCSP_REQUEST_add1_ext_i2dLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX# _OCSP_REQUEST_add_extLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _OCSP_REQUEST_delete_extLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _OCSP_REQUEST_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(F _OCSP_REQUEST_get1_ext_d2iLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#K _OCSP_REQUEST_get_extLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX* _OCSP_REQUEST_get_ext_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX* _OCSP_REQUEST_get_ext_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 67 ` LX/Y _OCSP_REQUEST_get_ext_by_criticalLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)9 _OCSP_REQUEST_get_ext_countLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _OCSP_REQUEST_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _OCSP_REQUEST_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _OCSP_REQUEST_printLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'_OCSP_REQ_CTX_add1_headerLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX Q_OCSP_REQ_CTX_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(e_OCSP_REQ_CTX_get0_mem_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX i_OCSP_REQ_CTX_httpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXd_OCSP_REQ_CTX_i2dLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX j_OCSP_REQ_CTX_nbioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$n_OCSP_REQ_CTX_nbio_d2iLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXm_OCSP_REQ_CTX_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_OCSP_REQ_CTX_set1_reqLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"n _OCSP_RESPBYTES_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _OCSP_RESPBYTES_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _OCSP_RESPBYTES_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _OCSP_RESPDATA_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _OCSP_RESPDATA_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _OCSP_RESPDATA_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX4 _OCSP_RESPID_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX _OCSP_RESPID_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _OCSP_RESPID_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!e _OCSP_RESPONSE_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX' _OCSP_RESPONSE_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _OCSP_RESPONSE_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _OCSP_RESPONSE_printLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$ _OCSP_REVOKEDINFO_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _OCSP_REVOKEDINFO_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX# _OCSP_REVOKEDINFO_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#< _OCSP_SERVICELOC_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _OCSP_SERVICELOC_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"2 _OCSP_SERVICELOC_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _OCSP_SIGNATURE_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _OCSP_SIGNATURE_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!/ _OCSP_SIGNATURE_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+2 _OCSP_SINGLERESP_add1_ext_i2dLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _OCSP_SINGLERESP_add_extLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)7 _OCSP_SINGLERESP_delete_extLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _OCSP_SINGLERESP_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+p _OCSP_SINGLERESP_get1_ext_d2iLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&W _OCSP_SINGLERESP_get_extLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 65 ` LX- _OCSP_SINGLERESP_get_ext_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 65 ` LX- _OCSP_SINGLERESP_get_ext_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 70 ` LX2\ _OCSP_SINGLERESP_get_ext_by_criticalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX, _OCSP_SINGLERESP_get_ext_countLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _OCSP_SINGLERESP_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _OCSP_SINGLERESP_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX( _OCSP_accept_responses_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX& _OCSP_archive_cutoff_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#( _OCSP_basic_add1_certLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$ _OCSP_basic_add1_nonceLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%3 _OCSP_basic_add1_statusLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXQ _OCSP_basic_signLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _OCSP_basic_verifyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXi _OCSP_cert_id_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#W _OCSP_cert_status_strLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _OCSP_cert_to_idLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXS _OCSP_check_nonceLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _OCSP_check_validityLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX~ _OCSP_copy_nonceLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LXm _OCSP_crlID_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _OCSP_crl_reason_strLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX _OCSP_id_cmpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _OCSP_id_get0_infoLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!z _OCSP_id_issuer_cmpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _OCSP_onereq_get0_idLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LXV _OCSP_parse_urlLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#) _OCSP_request_add0_idLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%- _OCSP_request_add1_certLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&: _OCSP_request_add1_nonceLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _OCSP_request_is_signedLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX( _OCSP_request_onereq_countLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX' _OCSP_request_onereq_get0LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX% _OCSP_request_set1_nameLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX w _OCSP_request_signLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _OCSP_request_verifyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _OCSP_resp_countLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX- _OCSP_resp_findLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$ _OCSP_resp_find_statusLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX! _OCSP_resp_get0LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#V _OCSP_response_createLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'\ _OCSP_response_get1_basicLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _OCSP_response_statusLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'& _OCSP_response_status_strLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _OCSP_sendreq_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX S_OCSP_sendreq_nbioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXT_OCSP_sendreq_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+l_OCSP_set_max_response_lengthLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _OCSP_single_get0_statusLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _OCSP_url_svcloc_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXD _OPENSSL_DIR_endLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXI_OPENSSL_DIR_readLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 66 ` LX. _OPENSSL_add_all_algorithms_confLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 68 ` LX0 _OPENSSL_add_all_algorithms_noconfLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_OPENSSL_asc2uniLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _OPENSSL_cleanseLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LXt _OPENSSL_configLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"C_OPENSSL_cpuid_setupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_OPENSSL_gmtimeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_OPENSSL_gmtime_adjLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_OPENSSL_gmtime_diffLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _OPENSSL_ia32cap_locLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_OPENSSL_initLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _OPENSSL_isserviceLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _OPENSSL_issetugidLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+ _OPENSSL_load_builtin_modulesLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_OPENSSL_memcmpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _OPENSSL_no_configLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX D_OPENSSL_showfatalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LXB_OPENSSL_stderrLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_OPENSSL_strcasecmpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_OPENSSL_strncasecmpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_OPENSSL_uni2ascLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _OSSL_DES_versionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _OSSL_libdes_versionLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_OTHERNAME_cmpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX@_OTHERNAME_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX _OTHERNAME_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_OTHERNAME_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX _OpenSSLDieLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_OpenSSL_add_all_ciphersLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_OpenSSL_add_all_digestsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX|_PBE2PARAM_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX _PBE2PARAM_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXz_PBE2PARAM_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX!_PBEPARAM_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX _PBEPARAM_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_PBEPARAM_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXx_PBKDF2PARAM_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX _PBKDF2PARAM_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXv_PBKDF2PARAM_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXo_PEM_ASN1_readLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX p_PEM_ASN1_read_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LXq_PEM_ASN1_writeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!r_PEM_ASN1_write_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXs_PEM_SealFinalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LXt_PEM_SealInitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LXu_PEM_SealUpdateLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXv_PEM_SignFinalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LXw_PEM_SignInitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LXx_PEM_SignUpdateLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!y_PEM_X509_INFO_readLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%z_PEM_X509_INFO_read_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&{_PEM_X509_INFO_write_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _PEM_bytes_read_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _PEM_def_callbackLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX|_PEM_dek_infoLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX}_PEM_do_headerLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&~_PEM_get_EVP_CIPHER_INFOLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_PEM_proc_typeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LX_PEM_readLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_PEM_read_CMSLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _PEM_read_DHparamsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_PEM_read_DSAPrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_PEM_read_DSA_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_PEM_read_DSAparamsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&c_PEM_read_ECPKParametersLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$0_PEM_read_ECPrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!"_PEM_read_EC_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 66 ` LX._PEM_read_NETSCAPE_CERT_SEQUENCELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_PEM_read_PKCS7LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_PEM_read_PKCS8LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+_PEM_read_PKCS8_PRIV_KEY_INFOLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_PEM_read_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_PEM_read_PrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_PEM_read_RSAPrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_PEM_read_RSAPublicKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_PEM_read_RSA_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_PEM_read_X509LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX }_PEM_read_X509_AUXLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX& _PEM_read_X509_CERT_PAIRLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _PEM_read_X509_CRLLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _PEM_read_X509_REQLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_PEM_read_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_PEM_read_bio_CMSLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_PEM_read_bio_DHparamsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)_PEM_read_bio_DSAPrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&(_PEM_read_bio_DSA_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_PEM_read_bio_DSAparamsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*P _PEM_read_bio_ECPKParametersLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_PEM_read_bio_ECPrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _PEM_read_bio_EC_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 70 ` LX2_PEM_read_bio_NETSCAPE_CERT_SEQUENCELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_PEM_read_bio_PKCS7LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_PEM_read_bio_PKCS8LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 67 ` LX/_PEM_read_bio_PKCS8_PRIV_KEY_INFOLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_PEM_read_bio_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_PEM_read_bio_ParametersLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_PEM_read_bio_PrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)_PEM_read_bio_RSAPrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_PEM_read_bio_RSAPublicKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&!_PEM_read_bio_RSA_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _PEM_read_bio_X509LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_PEM_read_bio_X509_AUXLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_PEM_read_bio_X509_CERT_PAIRLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_PEM_read_bio_X509_CRLLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_PEM_read_bio_X509_REQLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX_PEM_writeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXc_PEM_write_CMSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_PEM_write_DHparamsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"N_PEM_write_DHxparamsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_PEM_write_DSAPrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#5_PEM_write_DSA_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_PEM_write_DSAparamsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX';_PEM_write_ECPKParametersLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%__PEM_write_ECPrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_PEM_write_EC_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 67 ` LX/_PEM_write_NETSCAPE_CERT_SEQUENCELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_PEM_write_PKCS7LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_PEM_write_PKCS8LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_PEM_write_PKCS8PrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,u_PEM_write_PKCS8PrivateKey_nidLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,_PEM_write_PKCS8_PRIV_KEY_INFOLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_PEM_write_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_PEM_write_PrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_PEM_write_RSAPrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_PEM_write_RSAPublicKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#/_PEM_write_RSA_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_PEM_write_X509LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_PEM_write_X509_AUXLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'p_PEM_write_X509_CERT_PAIRLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_PEM_write_X509_CRLLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_PEM_write_X509_REQLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_PEM_write_X509_REQ_NEWLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_PEM_write_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_PEM_write_bio_ASN1_streamLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX x_PEM_write_bio_CMSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'r_PEM_write_bio_CMS_streamLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_PEM_write_bio_DHparamsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&R_PEM_write_bio_DHxparamsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_PEM_write_bio_DSAPrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_PEM_write_bio_DSA_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_PEM_write_bio_DSAparamsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+ _PEM_write_bio_ECPKParametersLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)` _PEM_write_bio_ECPrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _PEM_write_bio_EC_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 71 ` LX3_PEM_write_bio_NETSCAPE_CERT_SEQUENCELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_PEM_write_bio_PKCS7LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)]_PEM_write_bio_PKCS7_streamLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_PEM_write_bio_PKCS8LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,_PEM_write_bio_PKCS8PrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 68 ` LX0v_PEM_write_bio_PKCS8PrivateKey_nidLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 68 ` LX0_PEM_write_bio_PKCS8_PRIV_KEY_INFOLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#E_PEM_write_bio_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX':_PEM_write_bio_ParametersLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'_PEM_write_bio_PrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*_PEM_write_bio_RSAPrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)_PEM_write_bio_RSAPublicKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'_PEM_write_bio_RSA_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_PEM_write_bio_X509LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_PEM_write_bio_X509_AUXLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+h _PEM_write_bio_X509_CERT_PAIRLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_PEM_write_bio_X509_CRLLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_PEM_write_bio_X509_REQLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_PEM_write_bio_X509_REQ_NEWLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _PKCS12_AUTHSAFES_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_PKCS12_BAGS_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX _PKCS12_BAGS_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_PKCS12_BAGS_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_PKCS12_MAC_DATA_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _PKCS12_MAC_DATA_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _PKCS12_MAC_DATA_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_PKCS12_MAKE_KEYBAGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_PKCS12_MAKE_SHKEYBAGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_PKCS12_PBE_addLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_PKCS12_PBE_keyivgenLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!8 _PKCS12_SAFEBAGS_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_PKCS12_SAFEBAG_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _PKCS12_SAFEBAG_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_PKCS12_SAFEBAG_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%7 _PKCS12_add_CSPName_ascLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_PKCS12_add_certLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_PKCS12_add_friendlyname_ascLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_PKCS12_add_friendlyname_uniLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_PKCS12_add_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_PKCS12_add_localkeyidLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _PKCS12_add_safeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _PKCS12_add_safesLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"p _PKCS12_certbag2x509LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _PKCS12_certbag2x509crlLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_PKCS12_createLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _PKCS12_decrypt_skeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX _PKCS12_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_PKCS12_gen_macLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_PKCS12_get_attr_genLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_PKCS12_get_friendlynameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_PKCS12_initLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX[ _PKCS12_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX& _PKCS12_item_decrypt_d2iLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX& _PKCS12_item_i2d_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'G _PKCS12_item_pack_safebagLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_PKCS12_key_gen_ascLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_PKCS12_key_gen_uniLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX _PKCS12_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX]_PKCS12_newpassLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$ _PKCS12_pack_authsafesLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_PKCS12_pack_p7dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_PKCS12_pack_p7encdataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_PKCS12_parseLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_PKCS12_pbe_cryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_PKCS12_set_macLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_PKCS12_setup_macLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&O _PKCS12_unpack_authsafesLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#| _PKCS12_unpack_p7dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _PKCS12_unpack_p7encdataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _PKCS12_verify_macLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"$ _PKCS12_x5092certbagLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _PKCS12_x509crl2certbagLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX _PKCS1_MGF1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_PKCS5_PBE_addLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_PKCS5_PBE_keyivgenLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _PKCS5_PBKDF2_HMACLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_PKCS5_PBKDF2_HMAC_SHA1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_PKCS5_pbe2_setLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _PKCS5_pbe2_set_ivLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX+_PKCS5_pbe_setLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_PKCS5_pbe_set0_algorLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX1_PKCS5_pbkdf2_setLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_PKCS5_v2_PBE_keyivgenLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!H _PKCS7_ATTR_SIGN_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _PKCS7_ATTR_VERIFY_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _PKCS7_DIGEST_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX# _PKCS7_DIGEST_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_PKCS7_DIGEST_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_PKCS7_ENCRYPT_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXy _PKCS7_ENCRYPT_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _PKCS7_ENCRYPT_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_PKCS7_ENC_CONTENT_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#( _PKCS7_ENC_CONTENT_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_PKCS7_ENC_CONTENT_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_PKCS7_ENVELOPE_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _PKCS7_ENVELOPE_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_PKCS7_ENVELOPE_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 65 ` LX-_PKCS7_ISSUER_AND_SERIAL_digestLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+_PKCS7_ISSUER_AND_SERIAL_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX) _PKCS7_ISSUER_AND_SERIAL_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*_PKCS7_ISSUER_AND_SERIAL_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_PKCS7_RECIP_INFO_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_PKCS7_RECIP_INFO_get0_algLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _PKCS7_RECIP_INFO_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_PKCS7_RECIP_INFO_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#0_PKCS7_RECIP_INFO_setLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _PKCS7_SIGNED_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _PKCS7_SIGNED_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_PKCS7_SIGNED_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_PKCS7_SIGNER_INFO_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*_PKCS7_SIGNER_INFO_get0_algsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX# _PKCS7_SIGNER_INFO_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_PKCS7_SIGNER_INFO_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_PKCS7_SIGNER_INFO_setLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_PKCS7_SIGNER_INFO_signLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'_PKCS7_SIGN_ENVELOPE_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%B _PKCS7_SIGN_ENVELOPE_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_PKCS7_SIGN_ENVELOPE_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 65 ` LX-#_PKCS7_add0_attrib_signing_timeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'6_PKCS7_add1_attrib_digestLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX,\_PKCS7_add_attrib_content_typeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(l_PKCS7_add_attrib_smimecapLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"r_PKCS7_add_attributeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_PKCS7_add_certificateLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_PKCS7_add_crlLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"1_PKCS7_add_recipientLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'2_PKCS7_add_recipient_infoLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_PKCS7_add_signatureLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)s_PKCS7_add_signed_attributeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_PKCS7_add_signerLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*_PKCS7_cert_from_signer_infoLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _PKCS7_content_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_PKCS7_ctrlLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_PKCS7_dataDecodeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_PKCS7_dataFinalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_PKCS7_dataInitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_PKCS7_dataVerifyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXg_PKCS7_decryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+t_PKCS7_digest_from_attributesLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX_PKCS7_dupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXb_PKCS7_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_PKCS7_finalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_PKCS7_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!f_PKCS7_get0_signersLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"u_PKCS7_get_attributeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*v_PKCS7_get_issuer_and_serialLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)w_PKCS7_get_signed_attributeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_PKCS7_get_signer_infoLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!j_PKCS7_get_smimecapLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LXX _PKCS7_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX_PKCS7_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_PKCS7_print_ctxLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_PKCS7_set0_type_otherLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_PKCS7_set_attributesLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX3_PKCS7_set_cipherLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _PKCS7_set_contentLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_PKCS7_set_digestLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*_PKCS7_set_signed_attributesLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_PKCS7_set_typeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LXk_PKCS7_signLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_PKCS7_sign_add_signerLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$5_PKCS7_signatureVerifyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$i_PKCS7_simple_smimecapLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_PKCS7_streamLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_PKCS7_to_TS_TST_INFOLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXa_PKCS7_verifyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'%_PKCS8_PRIV_KEY_INFO_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX% _PKCS8_PRIV_KEY_INFO_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&#_PKCS8_PRIV_KEY_INFO_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_PKCS8_add_keyusageLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _PKCS8_decryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_PKCS8_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_PKCS8_pkey_get0LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_PKCS8_pkey_set0LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX(_PKCS8_set_brokenLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_PKEY_USAGE_PERIOD_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#N _PKEY_USAGE_PERIOD_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_PKEY_USAGE_PERIOD_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_POLICYINFO_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _POLICYINFO_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_POLICYINFO_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_POLICYQUALINFO_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX ; _POLICYQUALINFO_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_POLICYQUALINFO_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _POLICY_CONSTRAINTS_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$A_POLICY_CONSTRAINTS_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _POLICY_CONSTRAINTS_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!m_POLICY_MAPPINGS_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"[ _POLICY_MAPPING_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX  _POLICY_MAPPING_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_POLICY_MAPPING_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 65 ` LX- _PROXY_CERT_INFO_EXTENSION_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+ _PROXY_CERT_INFO_EXTENSION_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX, _PROXY_CERT_INFO_EXTENSION_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _PROXY_POLICY_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _PROXY_POLICY_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _PROXY_POLICY_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LXY_RAND_SSLeayLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LX_RAND_addLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_RAND_bytesLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_RAND_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LX_RAND_egdLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LXb _RAND_egd_bytesLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_RAND_eventLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_RAND_file_nameLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#q_RAND_get_rand_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_RAND_load_fileLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LXw _RAND_pollLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _RAND_pseudo_bytesLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX# _RAND_query_egd_bytesLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_RAND_screenLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX_RAND_seedLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX# _RAND_set_rand_engineLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#Z_RAND_set_rand_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_RAND_statusLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_RAND_write_fileLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_RC2_cbc_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _RC2_cfb64_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_RC2_decryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_RC2_ecb_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_RC2_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _RC2_ofb64_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_RC2_set_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 38 ` LX_RC4LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_RC4_optionsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_RC4_set_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX_RIPEMD160LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_RIPEMD160_FinalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_RIPEMD160_InitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_RIPEMD160_TransformLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_RIPEMD160_UpdateLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _RSAPrivateKey_dupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXZ _RSAPrivateKey_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_RSAPublicKey_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _RSAPublicKey_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_RSA_OAEP_PARAMS_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_RSA_OAEP_PARAMS_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"q_RSA_OAEP_PARAMS_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_RSA_PKCS1_SSLeayLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"<_RSA_PSS_PARAMS_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX ;_RSA_PSS_PARAMS_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!7_RSA_PSS_PARAMS_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _RSA_X931_hash_idLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_RSA_blinding_offLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_RSA_blinding_onLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXM_RSA_check_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX_RSA_flagsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LX_RSA_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_RSA_generate_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"f_RSA_generate_key_exLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%8_RSA_get_default_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_RSA_get_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_RSA_get_ex_new_indexLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX7_RSA_get_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX[_RSA_memory_lockLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 42 ` LX_RSA_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_RSA_new_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXp_RSA_null_methodLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)_RSA_padding_add_PKCS1_OAEPLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 66 ` LX._RSA_padding_add_PKCS1_OAEP_mgf1LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX( _RSA_padding_add_PKCS1_PSSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 65 ` LX-_RSA_padding_add_PKCS1_PSS_mgf1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+_RSA_padding_add_PKCS1_type_1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+_RSA_padding_add_PKCS1_type_2LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX% _RSA_padding_add_SSLv23LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _RSA_padding_add_X931LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _RSA_padding_add_noneLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+_RSA_padding_check_PKCS1_OAEPLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 68 ` LX0_RSA_padding_check_PKCS1_OAEP_mgf1LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 65 ` LX- _RSA_padding_check_PKCS1_type_1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 65 ` LX- _RSA_padding_check_PKCS1_type_2LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX' _RSA_padding_check_SSLv23LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX% _RSA_padding_check_X931LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_RSA_padding_check_noneLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX_RSA_printLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_RSA_print_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_RSA_private_decryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_RSA_private_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_RSA_public_decryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_RSA_public_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_RSA_set_default_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_RSA_set_ex_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX6_RSA_set_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _RSA_setup_blindingLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LX_RSA_signLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_RSA_sign_ASN1_OCTET_STRINGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LX_RSA_sizeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX _RSA_up_refLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_RSA_verifyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+_RSA_verify_ASN1_OCTET_STRINGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _RSA_verify_PKCS1_PSSLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_RSA_verify_PKCS1_PSS_mgf1LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXF_SEED_cbc_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"H_SEED_cfb128_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LXD_SEED_decryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXK_SEED_ecb_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXE_SEED_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"I_SEED_ofb128_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LXM_SEED_set_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 38 ` LX_SHALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 39 ` LX_SHA1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_SHA1_FinalLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX_SHA1_InitLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_SHA1_TransformLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_SHA1_UpdateLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 41 ` LX _SHA224LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX _SHA224_FinalLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX/_SHA224_InitLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _SHA224_UpdateLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 41 ` LXF_SHA256LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_SHA256_FinalLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX _SHA256_InitLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXP_SHA256_TransformLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_SHA256_UpdateLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 41 ` LX_SHA384LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_SHA384_FinalLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_SHA384_InitLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _SHA384_UpdateLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 41 ` LXU_SHA512LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX _SHA512_FinalLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX1_SHA512_InitLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX[_SHA512_TransformLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _SHA512_UpdateLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX_SHA_FinalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LX_SHA_InitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_SHA_TransformLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_SHA_UpdateLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXd_SMIME_crlf_copyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_SMIME_read_ASN1LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LXm_SMIME_read_CMSLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX__SMIME_read_PKCS7LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LXh_SMIME_textLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXA_SMIME_write_ASN1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_SMIME_write_CMSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX ^_SMIME_write_PKCS7LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_SRP_Calc_ALIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_SRP_Calc_BLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_SRP_Calc_client_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_SRP_Calc_server_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_SRP_Calc_uLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_SRP_Calc_xLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_SRP_VBASE_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%Y _SRP_VBASE_get1_by_userLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_SRP_VBASE_get_by_userLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_SRP_VBASE_initLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_SRP_VBASE_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_SRP_Verify_A_mod_NLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_SRP_Verify_B_mod_NLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'_SRP_check_known_gN_paramLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_SRP_create_verifierLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_SRP_create_verifier_BNLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_SRP_get_default_gNLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX Z _SRP_user_pwd_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 41 ` LX_SSLeayLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_SSLeay_versionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX4_SXNETID_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LXm _SXNETID_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX3_SXNETID_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_SXNET_add_id_INTEGERLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_SXNET_add_id_ascLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_SXNET_add_id_ulongLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX0_SXNET_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_SXNET_get_id_INTEGERLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_SXNET_get_id_ascLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_SXNET_get_id_ulongLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LX5 _SXNET_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX/_SXNET_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX-_TS_ACCURACY_dupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_TS_ACCURACY_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_TS_ACCURACY_get_microsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%+_TS_ACCURACY_get_millisLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_TS_ACCURACY_get_secondsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_TS_ACCURACY_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_TS_ACCURACY_set_microsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%1_TS_ACCURACY_set_millisLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_TS_ACCURACY_set_secondsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_TS_ASN1_INTEGER_print_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&@_TS_CONF_get_tsa_sectionLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _TS_CONF_load_certLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_TS_CONF_load_certsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXH_TS_CONF_load_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#b_TS_CONF_set_accuracyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _TS_CONF_set_certsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 69 ` LX1_TS_CONF_set_clock_precision_digitsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(y_TS_CONF_set_crypto_deviceLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_TS_CONF_set_def_policyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_TS_CONF_set_default_engineLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_TS_CONF_set_digestsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,_TS_CONF_set_ess_cert_id_chainLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#T_TS_CONF_set_orderingLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#{_TS_CONF_set_policiesLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_TS_CONF_set_serialLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_TS_CONF_set_signer_certLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%*_TS_CONF_set_signer_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#d_TS_CONF_set_tsa_nameLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_TS_MSG_IMPRINT_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_TS_MSG_IMPRINT_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&Y_TS_MSG_IMPRINT_get_algoLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_TS_MSG_IMPRINT_get_msgLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!t_TS_MSG_IMPRINT_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'^_TS_MSG_IMPRINT_print_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&;_TS_MSG_IMPRINT_set_algoLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%i_TS_MSG_IMPRINT_set_msgLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_TS_OBJ_print_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_TS_REQ_add_extLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX m_TS_REQ_delete_extLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX2_TS_REQ_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXQ_TS_REQ_ext_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LXk_TS_REQ_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_TS_REQ_get_cert_reqLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_TS_REQ_get_extLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_TS_REQ_get_ext_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_TS_REQ_get_ext_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)_TS_REQ_get_ext_by_criticalLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_TS_REQ_get_ext_countLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!D_TS_REQ_get_ext_d2iLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXm_TS_REQ_get_extsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%q_TS_REQ_get_msg_imprintLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXt_TS_REQ_get_nonceLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#`_TS_REQ_get_policy_idLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_TS_REQ_get_versionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LXs_TS_REQ_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXZ_TS_REQ_print_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_TS_REQ_set_cert_reqLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_TS_REQ_set_msg_imprintLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_TS_REQ_set_nonceLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#*_TS_REQ_set_policy_idLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!V_TS_REQ_set_versionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_TS_REQ_to_TS_VERIFY_CTXLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+o_TS_RESP_CTX_add_failure_infoLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$g_TS_RESP_CTX_add_flagsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!7_TS_RESP_CTX_add_mdLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_TS_RESP_CTX_add_policyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_TS_RESP_CTX_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&G_TS_RESP_CTX_get_requestLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'>_TS_RESP_CTX_get_tst_infoLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_TS_RESP_CTX_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_TS_RESP_CTX_set_accuracyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_TS_RESP_CTX_set_certsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 73 ` LX5n_TS_RESP_CTX_set_clock_precision_digitsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_TS_RESP_CTX_set_def_policyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+_TS_RESP_CTX_set_extension_cbLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_TS_RESP_CTX_set_serial_cbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_TS_RESP_CTX_set_signer_certLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)B_TS_RESP_CTX_set_signer_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*X_TS_RESP_CTX_set_status_infoLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 67 ` LX/_TS_RESP_CTX_set_status_info_condLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_TS_RESP_CTX_set_time_cbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_TS_RESP_create_responseLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX _TS_RESP_dupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX2_TS_RESP_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_TS_RESP_get_status_infoLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX ,_TS_RESP_get_tokenLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_TS_RESP_get_tst_infoLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LXj_TS_RESP_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _TS_RESP_print_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&._TS_RESP_set_status_infoLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_TS_RESP_set_tst_infoLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_TS_RESP_verify_responseLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'?_TS_RESP_verify_signatureLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_TS_RESP_verify_tokenLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!l_TS_STATUS_INFO_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_TS_STATUS_INFO_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!B_TS_STATUS_INFO_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'{_TS_STATUS_INFO_print_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_TS_TST_INFO_add_extLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%&_TS_TST_INFO_delete_extLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX8_TS_TST_INFO_dupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_TS_TST_INFO_ext_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_TS_TST_INFO_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX';_TS_TST_INFO_get_accuracyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_TS_TST_INFO_get_extLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)i_TS_TST_INFO_get_ext_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)>_TS_TST_INFO_get_ext_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 66 ` LX._TS_TST_INFO_get_ext_by_criticalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(F_TS_TST_INFO_get_ext_countLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_TS_TST_INFO_get_ext_d2iLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_TS_TST_INFO_get_extsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*_TS_TST_INFO_get_msg_imprintLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_TS_TST_INFO_get_nonceLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_TS_TST_INFO_get_orderingLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_TS_TST_INFO_get_policy_idLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%s_TS_TST_INFO_get_serialLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_TS_TST_INFO_get_timeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"A_TS_TST_INFO_get_tsaLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_TS_TST_INFO_get_versionLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_TS_TST_INFO_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_TS_TST_INFO_print_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'[_TS_TST_INFO_set_accuracyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*_TS_TST_INFO_set_msg_imprintLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_TS_TST_INFO_set_nonceLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'=_TS_TST_INFO_set_orderingLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_TS_TST_INFO_set_policy_idLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%w_TS_TST_INFO_set_serialLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#&_TS_TST_INFO_set_timeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"__TS_TST_INFO_set_tsaLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&=_TS_TST_INFO_set_versionLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_TS_VERIFY_CTX_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_TS_VERIFY_CTX_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_TS_VERIFY_CTX_initLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _TS_VERIFY_CTX_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_TS_X509_ALGOR_print_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_TS_ext_print_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_TXT_DB_create_indexLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_TXT_DB_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_TXT_DB_get_by_indexLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_TXT_DB_insertLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_TXT_DB_readLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_TXT_DB_writeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX _UI_OpenSSLLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _UI_UTIL_read_pwLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _UI_UTIL_read_pw_stringLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"I _UI_add_error_stringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!L _UI_add_info_stringLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _UI_add_input_booleanLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"6 _UI_add_input_stringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _UI_add_user_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _UI_add_verify_stringLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _UI_construct_promptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXH _UI_create_methodLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 42 ` LX _UI_ctrlLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX ) _UI_destroy_methodLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _UI_dup_error_stringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!Y _UI_dup_info_stringLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#6 _UI_dup_input_booleanLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _UI_dup_input_stringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#/ _UI_dup_verify_stringLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 42 ` LXL _UI_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$" _UI_get0_action_stringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$. _UI_get0_output_stringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX _UI_get0_resultLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$ _UI_get0_result_stringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _UI_get0_test_stringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _UI_get0_user_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$ _UI_get_default_methodLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX _UI_get_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"t _UI_get_ex_new_indexLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _UI_get_input_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _UI_get_methodLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$ _UI_get_result_maxsizeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$M _UI_get_result_minsizeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!d _UI_get_string_typeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _UI_method_get_closerLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$v _UI_method_get_flusherLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX# _UI_method_get_openerLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 67 ` LX/_UI_method_get_prompt_constructorLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _UI_method_get_readerLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _UI_method_get_writerLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _UI_method_set_closerLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$ _UI_method_set_flusherLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#D _UI_method_set_openerLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 67 ` LX/_UI_method_set_prompt_constructorLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#f _UI_method_set_readerLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _UI_method_set_writerLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 41 ` LXU _UI_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXM _UI_new_methodLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LXa _UI_processLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$ _UI_set_default_methodLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX _UI_set_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _UI_set_methodLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _UI_set_resultLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_USERNOTICE_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX< _USERNOTICE_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_USERNOTICE_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LXo_UTF8_getcLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LXn_UTF8_putcLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX5_WHIRLPOOLLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"g_WHIRLPOOL_BitUpdateLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_WHIRLPOOL_FinalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX-_WHIRLPOOL_InitLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXa_WHIRLPOOL_UpdateLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_X509V3_EXT_CRL_add_confLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX' _X509V3_EXT_CRL_add_nconfLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&h_X509V3_EXT_REQ_add_confLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'C _X509V3_EXT_REQ_add_nconfLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_X509V3_EXT_addLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_X509V3_EXT_add_aliasLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_X509V3_EXT_add_confLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"p_X509V3_EXT_add_listLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX# _X509V3_EXT_add_nconfLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _X509V3_EXT_add_nconf_skLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_X509V3_EXT_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_X509V3_EXT_confLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_X509V3_EXT_conf_nidLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_X509V3_EXT_d2iLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_X509V3_EXT_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_X509V3_EXT_getLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_X509V3_EXT_get_nidLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LXn_X509V3_EXT_i2dLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _X509V3_EXT_nconfLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#~ _X509V3_EXT_nconf_nidLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_X509V3_EXT_printLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_X509V3_EXT_print_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!o_X509V3_EXT_val_prnLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'i_X509V3_NAME_from_sectionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _X509V3_add1_i2dLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 65 ` LX-_X509V3_add_standard_extensionsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_X509V3_add_valueLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_X509V3_add_value_boolLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX's_X509V3_add_value_bool_nfLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_X509V3_add_value_intLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX% _X509V3_add_value_ucharLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_X509V3_conf_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _X509V3_extensions_printLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_X509V3_get_d2iLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_X509V3_get_sectionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _X509V3_get_stringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_X509V3_get_value_boolLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_X509V3_get_value_intLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _X509V3_parse_listLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_X509V3_section_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_X509V3_set_conf_lhashLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_X509V3_set_ctxLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _X509V3_set_nconfLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_X509V3_string_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LXV_X509_ALGORS_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX^ _X509_ALGOR_cmpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_X509_ALGOR_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_X509_ALGOR_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXW_X509_ALGOR_get0LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _X509_ALGOR_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_X509_ALGOR_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXX_X509_ALGOR_set0LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _X509_ALGOR_set_mdLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_X509_ATTRIBUTE_countLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_X509_ATTRIBUTE_createLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+_X509_ATTRIBUTE_create_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+_X509_ATTRIBUTE_create_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+_X509_ATTRIBUTE_create_by_txtLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_X509_ATTRIBUTE_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_X509_ATTRIBUTE_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_X509_ATTRIBUTE_get0_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_X509_ATTRIBUTE_get0_objectLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'_X509_ATTRIBUTE_get0_typeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _X509_ATTRIBUTE_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_X509_ATTRIBUTE_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'_X509_ATTRIBUTE_set1_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_X509_ATTRIBUTE_set1_objectLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_X509_CERT_AUX_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _X509_CERT_AUX_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _X509_CERT_AUX_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_X509_CERT_AUX_printLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _X509_CERT_PAIR_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _X509_CERT_PAIR_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!d_X509_CERT_PAIR_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX _X509_CINF_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX _X509_CINF_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _X509_CINF_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _X509_CRL_INFO_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _X509_CRL_INFO_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _X509_CRL_INFO_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_X509_CRL_METHOD_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_X509_CRL_METHOD_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$ _X509_CRL_add0_revokedLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$ _X509_CRL_add1_ext_i2dLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _X509_CRL_add_extLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$W_X509_CRL_check_suitebLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_X509_CRL_cmpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_X509_CRL_delete_extLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXb_X509_CRL_diffLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXW _X509_CRL_digestLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_X509_CRL_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_X509_CRL_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$#_X509_CRL_get0_by_certLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&<_X509_CRL_get0_by_serialLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_X509_CRL_get_extLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_X509_CRL_get_ext_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_X509_CRL_get_ext_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+_X509_CRL_get_ext_by_criticalLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_X509_CRL_get_ext_countLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_X509_CRL_get_ext_d2iLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_X509_CRL_get_meth_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!c_X509_CRL_http_nbioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX _X509_CRL_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_X509_CRL_matchLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_X509_CRL_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_X509_CRL_printLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _X509_CRL_print_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*/_X509_CRL_set_default_methodLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX' _X509_CRL_set_issuer_nameLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _X509_CRL_set_lastUpdateLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_X509_CRL_set_meth_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _X509_CRL_set_nextUpdateLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX# _X509_CRL_set_versionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_X509_CRL_signLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX 8_X509_CRL_sign_ctxLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX/ _X509_CRL_sortLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_X509_CRL_verifyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!O_X509_EXTENSIONS_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+_X509_EXTENSION_create_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+_X509_EXTENSION_create_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_X509_EXTENSION_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_X509_EXTENSION_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_X509_EXTENSION_get_criticalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_X509_EXTENSION_get_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX( _X509_EXTENSION_get_objectLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX k _X509_EXTENSION_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!!_X509_EXTENSION_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*"_X509_EXTENSION_set_criticalLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&#_X509_EXTENSION_set_dataLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX($_X509_EXTENSION_set_objectLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX%_X509_INFO_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX&_X509_INFO_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#'_X509_LOOKUP_by_aliasLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)(_X509_LOOKUP_by_fingerprintLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+)_X509_LOOKUP_by_issuer_serialLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%*_X509_LOOKUP_by_subjectLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX+_X509_LOOKUP_ctrlLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX,_X509_LOOKUP_fileLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX-_X509_LOOKUP_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#._X509_LOOKUP_hash_dirLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX/_X509_LOOKUP_initLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX0_X509_LOOKUP_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#1_X509_LOOKUP_shutdownLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX,2_X509_NAME_ENTRY_create_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,3_X509_NAME_ENTRY_create_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,_X509_NAME_ENTRY_create_by_txtLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"4_X509_NAME_ENTRY_dupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#5_X509_NAME_ENTRY_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'6_X509_NAME_ENTRY_get_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)7_X509_NAME_ENTRY_get_objectLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!s _X509_NAME_ENTRY_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"8_X509_NAME_ENTRY_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'9_X509_NAME_ENTRY_set_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX):_X509_NAME_ENTRY_set_objectLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX";_X509_NAME_add_entryLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)z_X509_NAME_add_entry_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_X509_NAME_add_entry_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)x_X509_NAME_add_entry_by_txtLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX<_X509_NAME_cmpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%=_X509_NAME_delete_entryLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX>_X509_NAME_digestLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX?_X509_NAME_dupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$@_X509_NAME_entry_countLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LXA_X509_NAME_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"B_X509_NAME_get_entryLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)C_X509_NAME_get_index_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)D_X509_NAME_get_index_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(E_X509_NAME_get_text_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(F_X509_NAME_get_text_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LXG_X509_NAME_hashLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_X509_NAME_hash_oldLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX; _X509_NAME_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXH_X509_NAME_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX I_X509_NAME_onelineLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXJ_X509_NAME_printLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _X509_NAME_print_exLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$} _X509_NAME_print_ex_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXK_X509_NAME_setLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(L_X509_OBJECT_free_contentsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX) _X509_OBJECT_idx_by_subjectLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 66 ` LX.M_X509_OBJECT_retrieve_by_subjectLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX) _X509_OBJECT_retrieve_matchLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'N_X509_OBJECT_up_ref_countLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LXO_X509_PKEY_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXP_X509_PKEY_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_X509_POLICY_NODE_printLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXQ_X509_PUBKEY_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXR_X509_PUBKEY_getLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_X509_PUBKEY_get0_paramLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LXw _X509_PUBKEY_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXS_X509_PUBKEY_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXT_X509_PUBKEY_setLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%u_X509_PUBKEY_set0_paramLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX*_X509_PURPOSE_addLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#G_X509_PURPOSE_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX {_X509_PURPOSE_get0LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_X509_PURPOSE_get0_nameLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&9_X509_PURPOSE_get0_snameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_X509_PURPOSE_get_by_idLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_X509_PURPOSE_get_by_snameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_X509_PURPOSE_get_countLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_X509_PURPOSE_get_idLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_X509_PURPOSE_get_trustLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXB _X509_PURPOSE_setLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!U_X509_REQ_INFO_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXC _X509_REQ_INFO_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX V_X509_REQ_INFO_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_X509_REQ_add1_attrLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_X509_REQ_add1_attr_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_X509_REQ_add1_attr_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_X509_REQ_add1_attr_by_txtLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&Y_X509_REQ_add_extensionsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*W_X509_REQ_add_extensions_nidLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX) _X509_REQ_check_private_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_X509_REQ_delete_attrLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX: _X509_REQ_digestLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LXW_X509_REQ_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%S_X509_REQ_extension_nidLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXX_X509_REQ_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"c _X509_REQ_get1_emailLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _X509_REQ_get_attrLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_X509_REQ_get_attr_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'_X509_REQ_get_attr_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_X509_REQ_get_attr_countLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*U_X509_REQ_get_extension_nidsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&P_X509_REQ_get_extensionsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"Y_X509_REQ_get_pubkeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX? _X509_REQ_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LXZ_X509_REQ_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX[_X509_REQ_printLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _X509_REQ_print_exLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX \_X509_REQ_print_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*Q_X509_REQ_set_extension_nidsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"]_X509_REQ_set_pubkeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(^_X509_REQ_set_subject_nameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#__X509_REQ_set_versionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX`_X509_REQ_signLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX 6_X509_REQ_sign_ctxLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXa_X509_REQ_to_X509LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXb_X509_REQ_verifyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX( _X509_REVOKED_add1_ext_i2dLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#c_X509_REVOKED_add_extLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&d_X509_REVOKED_delete_extLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXg_X509_REVOKED_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX e_X509_REVOKED_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#f_X509_REVOKED_get_extLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*g_X509_REVOKED_get_ext_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*h_X509_REVOKED_get_ext_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 67 ` LX/i_X509_REVOKED_get_ext_by_criticalLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)j_X509_REVOKED_get_ext_countLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'u_X509_REVOKED_get_ext_d2iLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXR _X509_REVOKED_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXk_X509_REVOKED_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 66 ` LX.0 _X509_REVOKED_set_revocationDateLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX, _X509_REVOKED_set_serialNumberLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXl_X509_SIG_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX _X509_SIG_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LXm_X509_SIG_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%n_X509_STORE_CTX_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_X509_STORE_CTX_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 66 ` LX._X509_STORE_CTX_get0_current_crlLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 69 ` LX1_X509_STORE_CTX_get0_current_issuerLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX( _X509_STORE_CTX_get0_paramLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 65 ` LX-_X509_STORE_CTX_get0_parent_ctxLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 66 ` LX._X509_STORE_CTX_get0_policy_treeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(f_X509_STORE_CTX_get0_storeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_X509_STORE_CTX_get1_chainLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX) _X509_STORE_CTX_get1_issuerLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'_X509_STORE_CTX_get_chainLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 66 ` LX._X509_STORE_CTX_get_current_certLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_X509_STORE_CTX_get_errorLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 65 ` LX-_X509_STORE_CTX_get_error_depthLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_X509_STORE_CTX_get_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 66 ` LX.L_X509_STORE_CTX_get_ex_new_indexLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 69 ` LX1 _X509_STORE_CTX_get_explicit_policyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"o_X509_STORE_CTX_initLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_X509_STORE_CTX_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 65 ` LX-_X509_STORE_CTX_purpose_inheritLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX' _X509_STORE_CTX_set0_crlsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX( _X509_STORE_CTX_set0_paramLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_X509_STORE_CTX_set_certLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_X509_STORE_CTX_set_chainLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX) _X509_STORE_CTX_set_defaultLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'1 _X509_STORE_CTX_set_depthLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'_X509_STORE_CTX_set_errorLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_X509_STORE_CTX_set_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX' _X509_STORE_CTX_set_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_X509_STORE_CTX_set_purposeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& _X509_STORE_CTX_set_timeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_X509_STORE_CTX_set_trustLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+ _X509_STORE_CTX_set_verify_cbLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+ _X509_STORE_CTX_trusted_stackLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"p_X509_STORE_add_certLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_X509_STORE_add_crlLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$q_X509_STORE_add_lookupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXr_X509_STORE_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$Q_X509_STORE_get1_certsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#6_X509_STORE_get1_crlsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(s_X509_STORE_get_by_subjectLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(t_X509_STORE_load_locationsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LXu_X509_STORE_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$\_X509_STORE_set1_paramLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+v_X509_STORE_set_default_pathsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _X509_STORE_set_depthLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#$ _X509_STORE_set_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX,a_X509_STORE_set_lookup_crls_cbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _X509_STORE_set_purposeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _X509_STORE_set_trustLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'_X509_STORE_set_verify_cbLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_X509_TRUST_addLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_X509_TRUST_cleanupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_X509_TRUST_get0LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_X509_TRUST_get0_nameLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_X509_TRUST_get_by_idLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#>_X509_TRUST_get_countLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_X509_TRUST_get_flagsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_X509_TRUST_get_trustLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX _X509_TRUST_setLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_X509_TRUST_set_defaultLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXw_X509_VAL_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX _X509_VAL_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LXx_X509_VAL_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX,D_X509_VERIFY_PARAM_add0_policyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+w_X509_VERIFY_PARAM_add0_tableLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*_X509_VERIFY_PARAM_add1_hostLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,_X509_VERIFY_PARAM_clear_flagsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% _X509_VERIFY_PARAM_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_X509_VERIFY_PARAM_get0LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*_X509_VERIFY_PARAM_get0_nameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 66 ` LX._X509_VERIFY_PARAM_get0_peernameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_X509_VERIFY_PARAM_get_countLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX* _X509_VERIFY_PARAM_get_depthLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_X509_VERIFY_PARAM_get_flagsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(2 _X509_VERIFY_PARAM_inheritLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'K_X509_VERIFY_PARAM_lookupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$m _X509_VERIFY_PARAM_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_X509_VERIFY_PARAM_set1LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+X_X509_VERIFY_PARAM_set1_emailLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*^_X509_VERIFY_PARAM_set1_hostLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(__X509_VERIFY_PARAM_set1_ipLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,V_X509_VERIFY_PARAM_set1_ip_ascLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*U _X509_VERIFY_PARAM_set1_nameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 66 ` LX.T _X509_VERIFY_PARAM_set1_policiesLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*G _X509_VERIFY_PARAM_set_depthLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*] _X509_VERIFY_PARAM_set_flagsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 66 ` LX._X509_VERIFY_PARAM_set_hostflagsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,V _X509_VERIFY_PARAM_set_purposeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)_X509_VERIFY_PARAM_set_timeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX* _X509_VERIFY_PARAM_set_trustLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 66 ` LX. _X509_VERIFY_PARAM_table_cleanupLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _X509_add1_ext_i2dLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&"_X509_add1_reject_objectLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%\_X509_add1_trust_objectLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXy_X509_add_extLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_X509_alias_get0LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_X509_alias_set1LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX${_X509_certificate_typeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&T_X509_chain_check_suitebLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX U_X509_chain_up_refLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_X509_check_akidLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _X509_check_caLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXY_X509_check_emailLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXZ_X509_check_hostLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX`_X509_check_ipLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX [_X509_check_ip_ascLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _X509_check_issuedLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%|_X509_check_private_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_X509_check_purposeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX#_X509_check_trustLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LXW_X509_cmpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$}_X509_cmp_current_timeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _X509_cmp_timeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX~_X509_delete_extLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_X509_digestLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LX_X509_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXe _X509_email_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 65 ` LX-_X509_find_by_issuer_and_serialLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_X509_find_by_subjectLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX_X509_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&f _X509_get0_pubkey_bitstrLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"\_X509_get0_signatureLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXd _X509_get1_emailLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LXP_X509_get1_ocspLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_X509_get_default_cert_areaLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_X509_get_default_cert_dirLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,_X509_get_default_cert_dir_envLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)_X509_get_default_cert_fileLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 65 ` LX-_X509_get_default_cert_file_envLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+_X509_get_default_private_dirLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_X509_get_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_X509_get_ex_new_indexLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_X509_get_extLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_X509_get_ext_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_X509_get_ext_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_X509_get_ext_by_criticalLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_X509_get_ext_countLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_X509_get_ext_d2iLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_X509_get_issuer_nameLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_X509_get_pubkeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)_X509_get_pubkey_parametersLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_X509_get_serialNumberLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%]_X509_get_signature_nidLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_X509_get_subject_nameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_X509_gmtime_adjLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LXk_X509_http_nbioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_X509_issuer_and_serial_cmpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*_X509_issuer_and_serial_hashLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_X509_issuer_name_cmpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_X509_issuer_name_hashLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_X509_issuer_name_hash_oldLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 42 ` LX _X509_itLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX# _X509_keyid_get0LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _X509_keyid_set1LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_X509_load_cert_crl_fileLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_X509_load_cert_fileLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_X509_load_crl_fileLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LX_X509_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _X509_ocspid_printLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _X509_policy_checkLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX* _X509_policy_level_get0_nodeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+j _X509_policy_level_node_countLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX++ _X509_policy_node_get0_parentLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 63 ` LX+ _X509_policy_node_get0_policyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 67 ` LX/x _X509_policy_node_get0_qualifiersLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$ _X509_policy_tree_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX* _X509_policy_tree_get0_levelLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 65 ` LX-5 _X509_policy_tree_get0_policiesLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 70 ` LX2H_X509_policy_tree_get0_user_policiesLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+ _X509_policy_tree_level_countLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_X509_printLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _X509_print_exLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _X509_print_ex_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_X509_print_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!O _X509_pubkey_digestLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _X509_reject_clearLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXv_X509_set_ex_dataLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_X509_set_issuer_nameLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _X509_set_notAfterLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_X509_set_notBeforeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_X509_set_pubkeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_X509_set_serialNumberLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_X509_set_subject_nameLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_X509_set_versionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX_X509_signLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX=_X509_sign_ctxLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"9_X509_signature_dumpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX# _X509_signature_printLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_X509_subject_name_cmpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_X509_subject_name_hashLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_X509_subject_name_hash_oldLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX' _X509_supported_extensionLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _X509_time_adjLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXf_X509_time_adj_exLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_X509_to_X509_REQLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_X509_trust_clearLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_X509_verifyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_X509_verify_certLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX,_X509_verify_cert_error_stringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_X509at_add1_attrLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&_X509at_add1_attr_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_X509at_add1_attr_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_X509at_add1_attr_by_txtLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_X509at_delete_attrLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&[_X509at_get0_data_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_X509at_get_attrLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_X509at_get_attr_by_NIDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_X509at_get_attr_by_OBJLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_X509at_get_attr_countLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_X509v3_add_extLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _X509v3_delete_extLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_X509v3_get_extLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_X509v3_get_ext_by_NIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_X509v3_get_ext_by_OBJLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)_X509v3_get_ext_by_criticalLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_X509v3_get_ext_countLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LX _ZLONG_itLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX( __ossl_096_des_random_seedLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX__ossl_old_cryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX& __ossl_old_des_cbc_cksumLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(@ __ossl_old_des_cbc_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX* __ossl_old_des_cfb64_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX( __ossl_old_des_cfb_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"^ __ossl_old_des_cryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% __ossl_old_des_decrypt3LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)& __ossl_old_des_ecb3_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX([ __ossl_old_des_ecb_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 65 ` LX- __ossl_old_des_ede3_cbc_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 67 ` LX/ __ossl_old_des_ede3_cfb64_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 67 ` LX/ __ossl_old_des_ede3_ofb64_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%x __ossl_old_des_enc_readLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX& __ossl_old_des_enc_writeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$ __ossl_old_des_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX% __ossl_old_des_encrypt2LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX% __ossl_old_des_encrypt3LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# __ossl_old_des_fcryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX( __ossl_old_des_is_weak_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&j __ossl_old_des_key_schedLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX) __ossl_old_des_ncbc_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*q __ossl_old_des_ofb64_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX( __ossl_old_des_ofb_encryptLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$4 __ossl_old_des_optionsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX) __ossl_old_des_pcbc_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX' __ossl_old_des_quad_cksumLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX' __ossl_old_des_random_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(#__ossl_old_des_random_seedLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 64 ` LX,$__ossl_old_des_read_2passwordsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*%__ossl_old_des_read_passwordLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$&__ossl_old_des_read_pwLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+'__ossl_old_des_read_pw_stringLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$ __ossl_old_des_set_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 63 ` LX+ __ossl_old_des_set_odd_parityLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX, __ossl_old_des_string_to_2keysLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX* __ossl_old_des_string_to_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)W __ossl_old_des_xcbc_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$J __shadow_DES_check_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" __shadow_DES_rw_modeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_a2d_ASN1_OBJECTLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_a2i_ASN1_ENUMERATEDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_a2i_ASN1_INTEGERLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_a2i_ASN1_STRINGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXx_a2i_GENERAL_NAMELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX/ _a2i_IPADDRESSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_a2i_IPADDRESS_NCLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX_a2i_ipaddLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_asn1_FinishLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_asn1_GetSequenceLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LXC_asn1_add_errorLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX t_asn1_const_FinishLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX _asn1_do_adbLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX _asn1_do_lockLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _asn1_enc_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _asn1_enc_initLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXK _asn1_enc_restoreLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _asn1_enc_saveLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LXH _asn1_ex_c2iLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LXg _asn1_ex_i2cLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX' _asn1_get_choice_selectorLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!5 _asn1_get_field_ptrLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'2 _asn1_set_choice_selectorLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_b2i_PVK_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_b2i_PrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_b2i_PrivateKey_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_b2i_PublicKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX L_b2i_PublicKey_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_bn_add_wordsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_bn_div_wordsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXh _bn_dup_expandLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_bn_expand2LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_bn_mul_add_wordsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_bn_mul_wordsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_bn_sqr_wordsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX\_bn_sub_wordsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"u _c2i_ASN1_BIT_STRINGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXx _c2i_ASN1_INTEGERLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX| _c2i_ASN1_OBJECTLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_check_deferLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_d2i_ACCESS_DESCRIPTIONLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_d2i_ASN1_BIT_STRINGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!D_d2i_ASN1_BMPSTRINGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_d2i_ASN1_BOOLEANLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_d2i_ASN1_ENUMERATEDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_d2i_ASN1_GENERALIZEDTIMELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX% _d2i_ASN1_GENERALSTRINGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_d2i_ASN1_IA5STRINGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_d2i_ASN1_INTEGERLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXy_d2i_ASN1_NULLLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_d2i_ASN1_OBJECTLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_d2i_ASN1_OCTET_STRINGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_d2i_ASN1_PRINTABLELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'_d2i_ASN1_PRINTABLESTRINGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_d2i_ASN1_SEQUENCE_ANYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_d2i_ASN1_SETLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_d2i_ASN1_SET_ANYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_d2i_ASN1_T61STRINGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_d2i_ASN1_TIMELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_d2i_ASN1_TYPELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX t_d2i_ASN1_UINTEGERLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX' _d2i_ASN1_UNIVERSALSTRINGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_d2i_ASN1_UTCTIMELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX">_d2i_ASN1_UTF8STRINGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%<_d2i_ASN1_VISIBLESTRINGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_d2i_ASN1_bytesLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_d2i_ASN1_type_bytesLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(~_d2i_AUTHORITY_INFO_ACCESSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_d2i_AUTHORITY_KEYIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_d2i_AutoPrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_d2i_BASIC_CONSTRAINTSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_d2i_CERTIFICATEPOLICIESLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_d2i_CMS_ContentInfoLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_d2i_CMS_ReceiptRequestLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LXj_d2i_CMS_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_d2i_CRL_DIST_POINTSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_d2i_DHparamsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXO_d2i_DHxparamsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"@_d2i_DIRECTORYSTRINGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXB_d2i_DISPLAYTEXTLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_d2i_DIST_POINTLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _d2i_DIST_POINT_NAMELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _d2i_DSAPrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_d2i_DSAPrivateKey_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_d2i_DSAPrivateKey_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_d2i_DSAPublicKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_d2i_DSA_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!-_d2i_DSA_PUBKEY_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _d2i_DSA_PUBKEY_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX9_d2i_DSA_SIGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_d2i_DSAparamsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_d2i_ECDSA_SIGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _d2i_ECPKParametersLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_d2i_ECParametersLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _d2i_ECPrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _d2i_ECPrivateKey_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"Y_d2i_ECPrivateKey_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXa _d2i_EC_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX {_d2i_EC_PUBKEY_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_d2i_EC_PUBKEY_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _d2i_EDIPARTYNAMELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_d2i_ESS_CERT_IDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_d2i_ESS_ISSUER_SERIALLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#S_d2i_ESS_SIGNING_CERTLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%r _d2i_EXTENDED_KEY_USAGELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_d2i_GENERAL_NAMELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _d2i_GENERAL_NAMESLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_d2i_ISSUING_DIST_POINTLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX _d2i_KRB5_APREQLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!u _d2i_KRB5_APREQBODYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX } _d2i_KRB5_AUTHDATALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _d2i_KRB5_AUTHENTLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX# _d2i_KRB5_AUTHENTBODYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _d2i_KRB5_CHECKSUMLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _d2i_KRB5_ENCDATALIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXU _d2i_KRB5_ENCKEYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _d2i_KRB5_PRINCNAMELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _d2i_KRB5_TICKETLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _d2i_KRB5_TKTBODYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_d2i_NETSCAPE_CERT_SEQUENCELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_d2i_NETSCAPE_SPKACLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _d2i_NETSCAPE_SPKILIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX T_d2i_NETSCAPE_X509LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_d2i_NOTICEREFLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_d2i_Netscape_RSALIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _d2i_OCSP_BASICRESPLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX3 _d2i_OCSP_CERTIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _d2i_OCSP_CERTSTATUSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX _d2i_OCSP_CRLIDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXP _d2i_OCSP_ONEREQLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXK _d2i_OCSP_REQINFOLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXX _d2i_OCSP_REQUESTLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _d2i_OCSP_RESPBYTESLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _d2i_OCSP_RESPDATALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX _d2i_OCSP_RESPIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _d2i_OCSP_RESPONSELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#' _d2i_OCSP_REVOKEDINFOLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _d2i_OCSP_SERVICELOCLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!9 _d2i_OCSP_SIGNATURELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"n _d2i_OCSP_SINGLERESPLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX0_d2i_OTHERNAMELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX{_d2i_PBE2PARAMLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX _d2i_PBEPARAMLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXw_d2i_PBKDF2PARAMLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX _d2i_PKCS12LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_d2i_PKCS12_BAGSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_d2i_PKCS12_MAC_DATALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_d2i_PKCS12_SAFEBAGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_d2i_PKCS12_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_d2i_PKCS12_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX_d2i_PKCS7LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_d2i_PKCS7_DIGESTLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _d2i_PKCS7_ENCRYPTLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_d2i_PKCS7_ENC_CONTENTLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_d2i_PKCS7_ENVELOPELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*_d2i_PKCS7_ISSUER_AND_SERIALLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_d2i_PKCS7_RECIP_INFOLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_d2i_PKCS7_SIGNEDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_d2i_PKCS7_SIGNER_INFOLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_d2i_PKCS7_SIGN_ENVELOPELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_d2i_PKCS7_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_d2i_PKCS7_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&w_d2i_PKCS8PrivateKey_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_d2i_PKCS8PrivateKey_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&$_d2i_PKCS8_PRIV_KEY_INFOLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_d2i_PKCS8_PRIV_KEY_INFO_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)_d2i_PKCS8_PRIV_KEY_INFO_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_d2i_PKCS8_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_d2i_PKCS8_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_d2i_PKEY_USAGE_PERIODLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_d2i_POLICYINFOLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_d2i_POLICYQUALINFOLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX, _d2i_PROXY_CERT_INFO_EXTENSIONLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _d2i_PROXY_POLICYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_d2i_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX _d2i_PUBKEY_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _d2i_PUBKEY_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_d2i_PrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_d2i_PrivateKey_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _d2i_PrivateKey_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_d2i_PublicKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _d2i_RSAPrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_d2i_RSAPrivateKey_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_d2i_RSAPrivateKey_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_d2i_RSAPublicKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_d2i_RSAPublicKey_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_d2i_RSAPublicKey_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LXh _d2i_RSA_NETLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_d2i_RSA_OAEP_PARAMSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!:_d2i_RSA_PSS_PARAMSLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_d2i_RSA_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_d2i_RSA_PUBKEY_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _d2i_RSA_PUBKEY_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX._d2i_SXNETLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX2_d2i_SXNETIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXb_d2i_TS_ACCURACYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_d2i_TS_MSG_IMPRINTLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%J_d2i_TS_MSG_IMPRINT_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$P_d2i_TS_MSG_IMPRINT_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_d2i_TS_REQLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LXe_d2i_TS_REQ_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_d2i_TS_REQ_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_d2i_TS_RESPLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_d2i_TS_RESP_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX+_d2i_TS_RESP_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!h_d2i_TS_STATUS_INFOLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX}_d2i_TS_TST_INFOLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_d2i_TS_TST_INFO_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_d2i_TS_TST_INFO_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_d2i_USERNOTICELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LX_d2i_X509LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_d2i_X509_ALGORLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXa_d2i_X509_ALGORSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_d2i_X509_ATTRIBUTELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_d2i_X509_AUXLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX C_d2i_X509_CERT_AUXLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!r_d2i_X509_CERT_PAIRLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_d2i_X509_CINFLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_d2i_X509_CRLLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _d2i_X509_CRL_INFOLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_d2i_X509_CRL_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_d2i_X509_CRL_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_d2i_X509_EXTENSIONLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"U_d2i_X509_EXTENSIONSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_d2i_X509_NAMELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_d2i_X509_NAME_ENTRYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_d2i_X509_PKEYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_d2i_X509_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_d2i_X509_REQLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _d2i_X509_REQ_INFOLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_d2i_X509_REQ_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_d2i_X509_REQ_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_d2i_X509_REVOKEDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_d2i_X509_SIGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_d2i_X509_VALLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_d2i_X509_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_d2i_X509_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_get_rfc2409_prime_1024LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_get_rfc2409_prime_768LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_get_rfc3526_prime_1536LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_get_rfc3526_prime_2048LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_get_rfc3526_prime_3072LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_get_rfc3526_prime_4096LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_get_rfc3526_prime_6144LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_get_rfc3526_prime_8192LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_hex_to_stringLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%& _i2a_ACCESS_DESCRIPTIONLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_i2a_ASN1_ENUMERATEDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX/_i2a_ASN1_INTEGERLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX0_i2a_ASN1_OBJECTLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX1_i2a_ASN1_STRINGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_i2b_PVK_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_i2b_PrivateKey_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _i2b_PublicKey_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"v _i2c_ASN1_BIT_STRINGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXy _i2c_ASN1_INTEGERLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_i2d_ACCESS_DESCRIPTIONLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"2_i2d_ASN1_BIT_STRINGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!E_i2d_ASN1_BMPSTRINGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX3_i2d_ASN1_BOOLEANLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_i2d_ASN1_ENUMERATEDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX'_i2d_ASN1_GENERALIZEDTIMELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX% _i2d_ASN1_GENERALSTRINGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!5_i2d_ASN1_IA5STRINGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX6_i2d_ASN1_INTEGERLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX}_i2d_ASN1_NULLLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX7_i2d_ASN1_OBJECTLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$8_i2d_ASN1_OCTET_STRINGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!9_i2d_ASN1_PRINTABLELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 59 ` LX'e_i2d_ASN1_PRINTABLESTRINGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$I_i2d_ASN1_SEQUENCE_ANYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX:_i2d_ASN1_SETLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXe_i2d_ASN1_SET_ANYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!g _i2d_ASN1_T61STRINGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_i2d_ASN1_TIMELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX;_i2d_ASN1_TYPELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 59 ` LX' _i2d_ASN1_UNIVERSALSTRINGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX<_i2d_ASN1_UTCTIMELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"=_i2d_ASN1_UTF8STRINGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%;_i2d_ASN1_VISIBLESTRINGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_i2d_ASN1_bio_streamLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX=_i2d_ASN1_bytesLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 60 ` LX(_i2d_AUTHORITY_INFO_ACCESSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_i2d_AUTHORITY_KEYIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_i2d_BASIC_CONSTRAINTSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_i2d_CERTIFICATEPOLICIESLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"h_i2d_CMS_ContentInfoLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%_i2d_CMS_ReceiptRequestLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_i2d_CMS_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!p_i2d_CMS_bio_streamLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_i2d_CRL_DIST_POINTSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX>_i2d_DHparamsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LXK_i2d_DHxparamsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"?_i2d_DIRECTORYSTRINGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXA_i2d_DISPLAYTEXTLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_i2d_DIST_POINTLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _i2d_DIST_POINT_NAMELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX ?_i2d_DSAPrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$@_i2d_DSAPrivateKey_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#A_i2d_DSAPrivateKey_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXB_i2d_DSAPublicKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_i2d_DSA_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_i2d_DSA_PUBKEY_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _i2d_DSA_PUBKEY_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX:_i2d_DSA_SIGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXC_i2d_DSAparamsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX#_i2d_ECDSA_SIGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _i2d_ECPKParametersLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _i2d_ECParametersLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _i2d_ECPrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#| _i2d_ECPrivateKey_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"G_i2d_ECPrivateKey_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX _i2d_EC_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX _i2d_EC_PUBKEY_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXu_i2d_EC_PUBKEY_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX\ _i2d_EDIPARTYNAMELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _i2d_ESS_CERT_IDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$_i2d_ESS_ISSUER_SERIALLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#G_i2d_ESS_SIGNING_CERTLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX% _i2d_EXTENDED_KEY_USAGELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX_i2d_GENERAL_NAMELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _i2d_GENERAL_NAMESLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%x_i2d_ISSUING_DIST_POINTLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX _i2d_KRB5_APREQLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!% _i2d_KRB5_APREQBODYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _i2d_KRB5_AUTHDATALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXl _i2d_KRB5_AUTHENTLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#8 _i2d_KRB5_AUTHENTBODYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _i2d_KRB5_CHECKSUMLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXA _i2d_KRB5_ENCDATALIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _i2d_KRB5_ENCKEYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _i2d_KRB5_PRINCNAMELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _i2d_KRB5_TICKETLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _i2d_KRB5_TKTBODYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 61 ` LX)_i2d_NETSCAPE_CERT_SEQUENCELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!D_i2d_NETSCAPE_SPKACLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX E_i2d_NETSCAPE_SPKILIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX H_i2d_NETSCAPE_X509LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_i2d_NOTICEREFLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXF_i2d_Netscape_RSALIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _i2d_OCSP_BASICRESPLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _i2d_OCSP_CERTIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _i2d_OCSP_CERTSTATUSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX _i2d_OCSP_CRLIDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX _i2d_OCSP_ONEREQLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _i2d_OCSP_REQINFOLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LX _i2d_OCSP_REQUESTLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX! _i2d_OCSP_RESPBYTESLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX E _i2d_OCSP_RESPDATALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXR _i2d_OCSP_RESPIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX z _i2d_OCSP_RESPONSELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#J _i2d_OCSP_REVOKEDINFOLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _i2d_OCSP_SERVICELOCLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX! _i2d_OCSP_SIGNATURELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX" _i2d_OCSP_SINGLERESPLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_i2d_OTHERNAMELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXy_i2d_PBE2PARAMLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_i2d_PBEPARAMLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXu_i2d_PBKDF2PARAMLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_i2d_PKCS12LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_i2d_PKCS12_BAGSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _i2d_PKCS12_MAC_DATALIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_i2d_PKCS12_SAFEBAGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_i2d_PKCS12_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_i2d_PKCS12_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LXG_i2d_PKCS7LIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXH_i2d_PKCS7_DIGESTLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX I_i2d_PKCS7_ENCRYPTLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$J_i2d_PKCS7_ENC_CONTENTLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!K_i2d_PKCS7_ENVELOPELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*L_i2d_PKCS7_ISSUER_AND_SERIALLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX _i2d_PKCS7_NDEFLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#M_i2d_PKCS7_RECIP_INFOLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXN_i2d_PKCS7_SIGNEDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$O_i2d_PKCS7_SIGNER_INFOLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&P_i2d_PKCS7_SIGN_ENVELOPELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXQ_i2d_PKCS7_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#_i2d_PKCS7_bio_streamLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXR_i2d_PKCS7_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*_i2d_PKCS8PrivateKeyInfo_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)_i2d_PKCS8PrivateKeyInfo_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&{_i2d_PKCS8PrivateKey_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 57 ` LX%|_i2d_PKCS8PrivateKey_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 62 ` LX*_i2d_PKCS8PrivateKey_nid_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)~_i2d_PKCS8PrivateKey_nid_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 58 ` LX&"_i2d_PKCS8_PRIV_KEY_INFOLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_i2d_PKCS8_PRIV_KEY_INFO_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 61 ` LX)_i2d_PKCS8_PRIV_KEY_INFO_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_i2d_PKCS8_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_i2d_PKCS8_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_i2d_PKEY_USAGE_PERIODLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_i2d_POLICYINFOLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_i2d_POLICYQUALINFOLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 64 ` LX, _i2d_PROXY_CERT_INFO_EXTENSIONLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX _i2d_PROXY_POLICYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_i2d_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX _i2d_PUBKEY_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX _i2d_PUBKEY_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LXS_i2d_PrivateKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_i2d_PrivateKey_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _i2d_PrivateKey_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXT_i2d_PublicKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX U_i2d_RSAPrivateKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 56 ` LX$V_i2d_RSAPrivateKey_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 55 ` LX#W_i2d_RSAPrivateKey_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXX_i2d_RSAPublicKeyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#_i2d_RSAPublicKey_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"_i2d_RSAPublicKey_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LXf _i2d_RSA_NETLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_i2d_RSA_OAEP_PARAMSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!>_i2d_RSA_PSS_PARAMSLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_i2d_RSA_PUBKEYLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!_i2d_RSA_PUBKEY_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX A_i2d_RSA_PUBKEY_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX-_i2d_SXNETLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX1_i2d_SXNETIDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_i2d_TS_ACCURACYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!_i2d_TS_MSG_IMPRINTLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 57 ` LX%_i2d_TS_MSG_IMPRINT_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_i2d_TS_MSG_IMPRINT_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX%_i2d_TS_REQLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_i2d_TS_REQ_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX_i2d_TS_REQ_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX_i2d_TS_RESPLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXp_i2d_TS_RESP_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 49 ` LX_i2d_TS_RESP_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!Y_i2d_TS_STATUS_INFOLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_i2d_TS_TST_INFOLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"<_i2d_TS_TST_INFO_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!$_i2d_TS_TST_INFO_fpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LX_i2d_USERNOTICELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LXY_i2d_X509LIBEAY32.dll LIBEAY32.dll/ 1485440734 0 49 ` LXZ_i2d_X509_ALGORLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX^_i2d_X509_ALGORSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX![_i2d_X509_ATTRIBUTELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXT_i2d_X509_AUXLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _i2d_X509_CERT_AUXLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!:_i2d_X509_CERT_PAIRLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX\_i2d_X509_CINFLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX]_i2d_X509_CRLLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX ^_i2d_X509_CRL_INFOLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX__i2d_X509_CRL_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX`_i2d_X509_CRL_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 53 ` LX!a_i2d_X509_EXTENSIONLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 54 ` LX"R_i2d_X509_EXTENSIONSLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXb_i2d_X509_NAMELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"c_i2d_X509_NAME_ENTRYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LXd_i2d_X509_PKEYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXe_i2d_X509_PUBKEYLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LXf_i2d_X509_REQLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX g_i2d_X509_REQ_INFOLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXh_i2d_X509_REQ_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LXi_i2d_X509_REQ_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXj_i2d_X509_REVOKEDLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXk_i2d_X509_SIGLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXl_i2d_X509_VALLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXm_i2d_X509_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LXn_i2d_X509_fpLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_i2d_re_X509_tbsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX- _i2o_ECPublicKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_i2s_ASN1_ENUMERATEDLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 60 ` LX(_i2s_ASN1_ENUMERATED_TABLELIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_i2s_ASN1_INTEGERLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_i2s_ASN1_OCTET_STRINGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LX_i2t_ASN1_OBJECTLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"7_i2v_ASN1_BIT_STRINGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_i2v_GENERAL_NAMELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _i2v_GENERAL_NAMESLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LXo_idea_cbc_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!p_idea_cfb64_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 51 ` LXq_idea_ecb_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXr_idea_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 53 ` LX!s_idea_ofb64_encryptLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXt_idea_optionsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#u_idea_set_decrypt_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 55 ` LX#v_idea_set_encrypt_keyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LXw_lh_deleteLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LXx_lh_doallLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXy_lh_doall_argLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 42 ` LXz_lh_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX{_lh_insertLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 41 ` LX|_lh_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 48 ` LX}_lh_node_statsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 52 ` LX ~_lh_node_stats_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_lh_node_usage_statsLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 58 ` LX&_lh_node_usage_stats_bioLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_lh_num_itemsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_lh_retrieveLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LX_lh_statsLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LX_lh_stats_bioLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 45 ` LX_lh_strhashLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LX_name_cmpLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX( _o2i_ECPublicKeyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_pitem_freeLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX% _pitem_newLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX~ _pqueue_findLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LXx_pqueue_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_pqueue_insertLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 50 ` LXB _pqueue_iteratorLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_pqueue_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_pqueue_nextLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 46 ` LX _pqueue_peekLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX?_pqueue_popLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 47 ` LXd _pqueue_printLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_pqueue_sizeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_private_AES_set_decrypt_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 62 ` LX*_private_AES_set_encrypt_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX" _private_RC4_set_keyLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_s2i_ASN1_INTEGERLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 56 ` LX$_s2i_ASN1_OCTET_STRINGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX_sk_deep_copyLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 44 ` LX_sk_deleteLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_sk_delete_ptrLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 41 ` LX_sk_dupLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 42 ` LX_sk_findLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX _sk_find_exLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 42 ` LX_sk_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 44 ` LX_sk_insertLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 47 ` LX _sk_is_sortedLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 41 ` LX_sk_newLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LXk _sk_new_nullLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 41 ` LXv_sk_numLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 41 ` LX_sk_popLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 46 ` LX_sk_pop_freeLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 42 ` LX_sk_pushLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 41 ` LXw_sk_setLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 50 ` LX_sk_set_cmp_funcLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 43 ` LX_sk_shiftLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 42 ` LX_sk_sortLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 45 ` LX_sk_unshiftLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 43 ` LXu_sk_valueLIBEAY32.dll LIBEAY32.dll/ 1485440734 0 42 ` LX_sk_zeroLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 48 ` LX_string_to_hexLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_v2i_ASN1_BIT_STRINGLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 51 ` LX_v2i_GENERAL_NAMELIBEAY32.dll LIBEAY32.dll/ 1485440734 0 52 ` LX _v2i_GENERAL_NAMESLIBEAY32.dllLIBEAY32.dll/ 1485440734 0 54 ` LX"_v2i_GENERAL_NAME_exLIBEAY32.dllvibe.d-0.8.2/lib/win-i386-mscoff/ssleay32.lib000066400000000000000000002265301324361747700203600ustar00rootroot00000000000000! / 1485440743 0 19232 ` 2hhDD**xx\\FF&&rrbbXX88~~vvXX@@**~~hhPPHH..llTTDD00 ttffFF22""jjVVLL<<ĶĶ44ŲŲ..ƪƪ00ǰǰ""ȠȠɐɐʔʔːː||ppjjZZ^^FF::ҶҶ22ӢӢԌԌ||nnjj\\ZZLL66۪۪$$ܚܚ݈݈rrPP>>((~~XX\\JJ88dd66TTDD""~~^^>>**llbb<<&&ppRR..vv\\66ppZZ@@jjPP,,ffNN 4 4         n n   J J   * *  XXFF44nnVVHH44&&zzhhLL..  xxbbFF..    ! ! !~!~!!"n"n""#P#P##$ $ $$%%%t%t%%&R&R&&'6'6''(((((()j)j))*L*L**+2+2++,,,~,~,__IMPORT_DESCRIPTOR_SSLEAY32__NULL_IMPORT_DESCRIPTORSSLEAY32_NULL_THUNK_DATA_BIO_f_ssl__imp__BIO_f_ssl_BIO_new_buffer_ssl_connect__imp__BIO_new_buffer_ssl_connect_BIO_new_ssl__imp__BIO_new_ssl_BIO_new_ssl_connect__imp__BIO_new_ssl_connect_BIO_ssl_copy_session_id__imp__BIO_ssl_copy_session_id_BIO_ssl_shutdown__imp__BIO_ssl_shutdown_DTLS_client_method__imp__DTLS_client_method_DTLS_method__imp__DTLS_method_DTLS_server_method__imp__DTLS_server_method_DTLSv1_2_client_method__imp__DTLSv1_2_client_method_DTLSv1_2_method__imp__DTLSv1_2_method_DTLSv1_2_server_method__imp__DTLSv1_2_server_method_DTLSv1_client_method__imp__DTLSv1_client_method_DTLSv1_method__imp__DTLSv1_method_DTLSv1_server_method__imp__DTLSv1_server_method_ERR_load_SSL_strings__imp__ERR_load_SSL_strings_PEM_read_SSL_SESSION__imp__PEM_read_SSL_SESSION_PEM_read_bio_SSL_SESSION__imp__PEM_read_bio_SSL_SESSION_PEM_write_SSL_SESSION__imp__PEM_write_SSL_SESSION_PEM_write_bio_SSL_SESSION__imp__PEM_write_bio_SSL_SESSION_SRP_Calc_A_param__imp__SRP_Calc_A_param_SRP_generate_client_master_secret__imp__SRP_generate_client_master_secret_SRP_generate_server_master_secret__imp__SRP_generate_server_master_secret_SSL_CIPHER_description__imp__SSL_CIPHER_description_SSL_CIPHER_find__imp__SSL_CIPHER_find_SSL_CIPHER_get_bits__imp__SSL_CIPHER_get_bits_SSL_CIPHER_get_id__imp__SSL_CIPHER_get_id_SSL_CIPHER_get_name__imp__SSL_CIPHER_get_name_SSL_CIPHER_get_version__imp__SSL_CIPHER_get_version_SSL_COMP_add_compression_method__imp__SSL_COMP_add_compression_method_SSL_COMP_free_compression_methods__imp__SSL_COMP_free_compression_methods_SSL_COMP_get_compression_methods__imp__SSL_COMP_get_compression_methods_SSL_COMP_get_name__imp__SSL_COMP_get_name_SSL_COMP_set0_compression_methods__imp__SSL_COMP_set0_compression_methods_SSL_CONF_CTX_clear_flags__imp__SSL_CONF_CTX_clear_flags_SSL_CONF_CTX_finish__imp__SSL_CONF_CTX_finish_SSL_CONF_CTX_free__imp__SSL_CONF_CTX_free_SSL_CONF_CTX_new__imp__SSL_CONF_CTX_new_SSL_CONF_CTX_set1_prefix__imp__SSL_CONF_CTX_set1_prefix_SSL_CONF_CTX_set_flags__imp__SSL_CONF_CTX_set_flags_SSL_CONF_CTX_set_ssl__imp__SSL_CONF_CTX_set_ssl_SSL_CONF_CTX_set_ssl_ctx__imp__SSL_CONF_CTX_set_ssl_ctx_SSL_CONF_cmd__imp__SSL_CONF_cmd_SSL_CONF_cmd_argv__imp__SSL_CONF_cmd_argv_SSL_CONF_cmd_value_type__imp__SSL_CONF_cmd_value_type_SSL_CTX_SRP_CTX_free__imp__SSL_CTX_SRP_CTX_free_SSL_CTX_SRP_CTX_init__imp__SSL_CTX_SRP_CTX_init_SSL_CTX_add_client_CA__imp__SSL_CTX_add_client_CA_SSL_CTX_add_client_custom_ext__imp__SSL_CTX_add_client_custom_ext_SSL_CTX_add_server_custom_ext__imp__SSL_CTX_add_server_custom_ext_SSL_CTX_add_session__imp__SSL_CTX_add_session_SSL_CTX_callback_ctrl__imp__SSL_CTX_callback_ctrl_SSL_CTX_check_private_key__imp__SSL_CTX_check_private_key_SSL_CTX_ctrl__imp__SSL_CTX_ctrl_SSL_CTX_flush_sessions__imp__SSL_CTX_flush_sessions_SSL_CTX_free__imp__SSL_CTX_free_SSL_CTX_get0_certificate__imp__SSL_CTX_get0_certificate_SSL_CTX_get0_param__imp__SSL_CTX_get0_param_SSL_CTX_get0_privatekey__imp__SSL_CTX_get0_privatekey_SSL_CTX_get_cert_store__imp__SSL_CTX_get_cert_store_SSL_CTX_get_client_CA_list__imp__SSL_CTX_get_client_CA_list_SSL_CTX_get_client_cert_cb__imp__SSL_CTX_get_client_cert_cb_SSL_CTX_get_ex_data__imp__SSL_CTX_get_ex_data_SSL_CTX_get_ex_new_index__imp__SSL_CTX_get_ex_new_index_SSL_CTX_get_info_callback__imp__SSL_CTX_get_info_callback_SSL_CTX_get_quiet_shutdown__imp__SSL_CTX_get_quiet_shutdown_SSL_CTX_get_ssl_method__imp__SSL_CTX_get_ssl_method_SSL_CTX_get_timeout__imp__SSL_CTX_get_timeout_SSL_CTX_get_verify_callback__imp__SSL_CTX_get_verify_callback_SSL_CTX_get_verify_depth__imp__SSL_CTX_get_verify_depth_SSL_CTX_get_verify_mode__imp__SSL_CTX_get_verify_mode_SSL_CTX_load_verify_locations__imp__SSL_CTX_load_verify_locations_SSL_CTX_new__imp__SSL_CTX_new_SSL_CTX_remove_session__imp__SSL_CTX_remove_session_SSL_CTX_sess_get_get_cb__imp__SSL_CTX_sess_get_get_cb_SSL_CTX_sess_get_new_cb__imp__SSL_CTX_sess_get_new_cb_SSL_CTX_sess_get_remove_cb__imp__SSL_CTX_sess_get_remove_cb_SSL_CTX_sess_set_get_cb__imp__SSL_CTX_sess_set_get_cb_SSL_CTX_sess_set_new_cb__imp__SSL_CTX_sess_set_new_cb_SSL_CTX_sess_set_remove_cb__imp__SSL_CTX_sess_set_remove_cb_SSL_CTX_sessions__imp__SSL_CTX_sessions_SSL_CTX_set1_param__imp__SSL_CTX_set1_param_SSL_CTX_set_alpn_protos__imp__SSL_CTX_set_alpn_protos_SSL_CTX_set_alpn_select_cb__imp__SSL_CTX_set_alpn_select_cb_SSL_CTX_set_cert_cb__imp__SSL_CTX_set_cert_cb_SSL_CTX_set_cert_store__imp__SSL_CTX_set_cert_store_SSL_CTX_set_cert_verify_callback__imp__SSL_CTX_set_cert_verify_callback_SSL_CTX_set_cipher_list__imp__SSL_CTX_set_cipher_list_SSL_CTX_set_client_CA_list__imp__SSL_CTX_set_client_CA_list_SSL_CTX_set_client_cert_cb__imp__SSL_CTX_set_client_cert_cb_SSL_CTX_set_client_cert_engine__imp__SSL_CTX_set_client_cert_engine_SSL_CTX_set_cookie_generate_cb__imp__SSL_CTX_set_cookie_generate_cb_SSL_CTX_set_cookie_verify_cb__imp__SSL_CTX_set_cookie_verify_cb_SSL_CTX_set_default_passwd_cb__imp__SSL_CTX_set_default_passwd_cb_SSL_CTX_set_default_passwd_cb_userdata__imp__SSL_CTX_set_default_passwd_cb_userdata_SSL_CTX_set_default_verify_paths__imp__SSL_CTX_set_default_verify_paths_SSL_CTX_set_ex_data__imp__SSL_CTX_set_ex_data_SSL_CTX_set_generate_session_id__imp__SSL_CTX_set_generate_session_id_SSL_CTX_set_info_callback__imp__SSL_CTX_set_info_callback_SSL_CTX_set_msg_callback__imp__SSL_CTX_set_msg_callback_SSL_CTX_set_next_proto_select_cb__imp__SSL_CTX_set_next_proto_select_cb_SSL_CTX_set_next_protos_advertised_cb__imp__SSL_CTX_set_next_protos_advertised_cb_SSL_CTX_set_psk_client_callback__imp__SSL_CTX_set_psk_client_callback_SSL_CTX_set_psk_server_callback__imp__SSL_CTX_set_psk_server_callback_SSL_CTX_set_purpose__imp__SSL_CTX_set_purpose_SSL_CTX_set_quiet_shutdown__imp__SSL_CTX_set_quiet_shutdown_SSL_CTX_set_session_id_context__imp__SSL_CTX_set_session_id_context_SSL_CTX_set_srp_cb_arg__imp__SSL_CTX_set_srp_cb_arg_SSL_CTX_set_srp_client_pwd_callback__imp__SSL_CTX_set_srp_client_pwd_callback_SSL_CTX_set_srp_password__imp__SSL_CTX_set_srp_password_SSL_CTX_set_srp_strength__imp__SSL_CTX_set_srp_strength_SSL_CTX_set_srp_username__imp__SSL_CTX_set_srp_username_SSL_CTX_set_srp_username_callback__imp__SSL_CTX_set_srp_username_callback_SSL_CTX_set_srp_verify_param_callback__imp__SSL_CTX_set_srp_verify_param_callback_SSL_CTX_set_ssl_version__imp__SSL_CTX_set_ssl_version_SSL_CTX_set_timeout__imp__SSL_CTX_set_timeout_SSL_CTX_set_tlsext_use_srtp__imp__SSL_CTX_set_tlsext_use_srtp_SSL_CTX_set_tmp_dh_callback__imp__SSL_CTX_set_tmp_dh_callback_SSL_CTX_set_tmp_ecdh_callback__imp__SSL_CTX_set_tmp_ecdh_callback_SSL_CTX_set_tmp_rsa_callback__imp__SSL_CTX_set_tmp_rsa_callback_SSL_CTX_set_trust__imp__SSL_CTX_set_trust_SSL_CTX_set_verify__imp__SSL_CTX_set_verify_SSL_CTX_set_verify_depth__imp__SSL_CTX_set_verify_depth_SSL_CTX_use_PrivateKey__imp__SSL_CTX_use_PrivateKey_SSL_CTX_use_PrivateKey_ASN1__imp__SSL_CTX_use_PrivateKey_ASN1_SSL_CTX_use_PrivateKey_file__imp__SSL_CTX_use_PrivateKey_file_SSL_CTX_use_RSAPrivateKey__imp__SSL_CTX_use_RSAPrivateKey_SSL_CTX_use_RSAPrivateKey_ASN1__imp__SSL_CTX_use_RSAPrivateKey_ASN1_SSL_CTX_use_RSAPrivateKey_file__imp__SSL_CTX_use_RSAPrivateKey_file_SSL_CTX_use_certificate__imp__SSL_CTX_use_certificate_SSL_CTX_use_certificate_ASN1__imp__SSL_CTX_use_certificate_ASN1_SSL_CTX_use_certificate_chain_file__imp__SSL_CTX_use_certificate_chain_file_SSL_CTX_use_certificate_file__imp__SSL_CTX_use_certificate_file_SSL_CTX_use_psk_identity_hint__imp__SSL_CTX_use_psk_identity_hint_SSL_CTX_use_serverinfo__imp__SSL_CTX_use_serverinfo_SSL_CTX_use_serverinfo_file__imp__SSL_CTX_use_serverinfo_file_SSL_SESSION_free__imp__SSL_SESSION_free_SSL_SESSION_get0_peer__imp__SSL_SESSION_get0_peer_SSL_SESSION_get_compress_id__imp__SSL_SESSION_get_compress_id_SSL_SESSION_get_ex_data__imp__SSL_SESSION_get_ex_data_SSL_SESSION_get_ex_new_index__imp__SSL_SESSION_get_ex_new_index_SSL_SESSION_get_id__imp__SSL_SESSION_get_id_SSL_SESSION_get_time__imp__SSL_SESSION_get_time_SSL_SESSION_get_timeout__imp__SSL_SESSION_get_timeout_SSL_SESSION_new__imp__SSL_SESSION_new_SSL_SESSION_print__imp__SSL_SESSION_print_SSL_SESSION_print_fp__imp__SSL_SESSION_print_fp_SSL_SESSION_set1_id_context__imp__SSL_SESSION_set1_id_context_SSL_SESSION_set_ex_data__imp__SSL_SESSION_set_ex_data_SSL_SESSION_set_time__imp__SSL_SESSION_set_time_SSL_SESSION_set_timeout__imp__SSL_SESSION_set_timeout_SSL_SRP_CTX_free__imp__SSL_SRP_CTX_free_SSL_SRP_CTX_init__imp__SSL_SRP_CTX_init_SSL_accept__imp__SSL_accept_SSL_add_client_CA__imp__SSL_add_client_CA_SSL_add_dir_cert_subjects_to_stack__imp__SSL_add_dir_cert_subjects_to_stack_SSL_add_file_cert_subjects_to_stack__imp__SSL_add_file_cert_subjects_to_stack_SSL_alert_desc_string__imp__SSL_alert_desc_string_SSL_alert_desc_string_long__imp__SSL_alert_desc_string_long_SSL_alert_type_string__imp__SSL_alert_type_string_SSL_alert_type_string_long__imp__SSL_alert_type_string_long_SSL_cache_hit__imp__SSL_cache_hit_SSL_callback_ctrl__imp__SSL_callback_ctrl_SSL_certs_clear__imp__SSL_certs_clear_SSL_check_chain__imp__SSL_check_chain_SSL_check_private_key__imp__SSL_check_private_key_SSL_clear__imp__SSL_clear_SSL_connect__imp__SSL_connect_SSL_copy_session_id__imp__SSL_copy_session_id_SSL_ctrl__imp__SSL_ctrl_SSL_do_handshake__imp__SSL_do_handshake_SSL_dup__imp__SSL_dup_SSL_dup_CA_list__imp__SSL_dup_CA_list_SSL_export_keying_material__imp__SSL_export_keying_material_SSL_extension_supported__imp__SSL_extension_supported_SSL_free__imp__SSL_free_SSL_get0_alpn_selected__imp__SSL_get0_alpn_selected_SSL_get0_next_proto_negotiated__imp__SSL_get0_next_proto_negotiated_SSL_get0_param__imp__SSL_get0_param_SSL_get1_session__imp__SSL_get1_session_SSL_get_SSL_CTX__imp__SSL_get_SSL_CTX_SSL_get_certificate__imp__SSL_get_certificate_SSL_get_cipher_list__imp__SSL_get_cipher_list_SSL_get_ciphers__imp__SSL_get_ciphers_SSL_get_client_CA_list__imp__SSL_get_client_CA_list_SSL_get_current_cipher__imp__SSL_get_current_cipher_SSL_get_current_compression__imp__SSL_get_current_compression_SSL_get_current_expansion__imp__SSL_get_current_expansion_SSL_get_default_timeout__imp__SSL_get_default_timeout_SSL_get_error__imp__SSL_get_error_SSL_get_ex_data__imp__SSL_get_ex_data_SSL_get_ex_data_X509_STORE_CTX_idx__imp__SSL_get_ex_data_X509_STORE_CTX_idx_SSL_get_ex_new_index__imp__SSL_get_ex_new_index_SSL_get_fd__imp__SSL_get_fd_SSL_get_finished__imp__SSL_get_finished_SSL_get_info_callback__imp__SSL_get_info_callback_SSL_get_peer_cert_chain__imp__SSL_get_peer_cert_chain_SSL_get_peer_certificate__imp__SSL_get_peer_certificate_SSL_get_peer_finished__imp__SSL_get_peer_finished_SSL_get_privatekey__imp__SSL_get_privatekey_SSL_get_psk_identity__imp__SSL_get_psk_identity_SSL_get_psk_identity_hint__imp__SSL_get_psk_identity_hint_SSL_get_quiet_shutdown__imp__SSL_get_quiet_shutdown_SSL_get_rbio__imp__SSL_get_rbio_SSL_get_read_ahead__imp__SSL_get_read_ahead_SSL_get_rfd__imp__SSL_get_rfd_SSL_get_selected_srtp_profile__imp__SSL_get_selected_srtp_profile_SSL_get_servername__imp__SSL_get_servername_SSL_get_servername_type__imp__SSL_get_servername_type_SSL_get_session__imp__SSL_get_session_SSL_get_shared_ciphers__imp__SSL_get_shared_ciphers_SSL_get_shared_sigalgs__imp__SSL_get_shared_sigalgs_SSL_get_shutdown__imp__SSL_get_shutdown_SSL_get_sigalgs__imp__SSL_get_sigalgs_SSL_get_srp_N__imp__SSL_get_srp_N_SSL_get_srp_g__imp__SSL_get_srp_g_SSL_get_srp_userinfo__imp__SSL_get_srp_userinfo_SSL_get_srp_username__imp__SSL_get_srp_username_SSL_get_srtp_profiles__imp__SSL_get_srtp_profiles_SSL_get_ssl_method__imp__SSL_get_ssl_method_SSL_get_verify_callback__imp__SSL_get_verify_callback_SSL_get_verify_depth__imp__SSL_get_verify_depth_SSL_get_verify_mode__imp__SSL_get_verify_mode_SSL_get_verify_result__imp__SSL_get_verify_result_SSL_get_version__imp__SSL_get_version_SSL_get_wbio__imp__SSL_get_wbio_SSL_get_wfd__imp__SSL_get_wfd_SSL_has_matching_session_id__imp__SSL_has_matching_session_id_SSL_is_server__imp__SSL_is_server_SSL_library_init__imp__SSL_library_init_SSL_load_client_CA_file__imp__SSL_load_client_CA_file_SSL_load_error_strings__imp__SSL_load_error_strings_SSL_new__imp__SSL_new_SSL_peek__imp__SSL_peek_SSL_pending__imp__SSL_pending_SSL_read__imp__SSL_read_SSL_renegotiate__imp__SSL_renegotiate_SSL_renegotiate_abbreviated__imp__SSL_renegotiate_abbreviated_SSL_renegotiate_pending__imp__SSL_renegotiate_pending_SSL_rstate_string__imp__SSL_rstate_string_SSL_rstate_string_long__imp__SSL_rstate_string_long_SSL_select_next_proto__imp__SSL_select_next_proto_SSL_set1_param__imp__SSL_set1_param_SSL_set_SSL_CTX__imp__SSL_set_SSL_CTX_SSL_set_accept_state__imp__SSL_set_accept_state_SSL_set_alpn_protos__imp__SSL_set_alpn_protos_SSL_set_bio__imp__SSL_set_bio_SSL_set_cert_cb__imp__SSL_set_cert_cb_SSL_set_cipher_list__imp__SSL_set_cipher_list_SSL_set_client_CA_list__imp__SSL_set_client_CA_list_SSL_set_connect_state__imp__SSL_set_connect_state_SSL_set_debug__imp__SSL_set_debug_SSL_set_ex_data__imp__SSL_set_ex_data_SSL_set_fd__imp__SSL_set_fd_SSL_set_generate_session_id__imp__SSL_set_generate_session_id_SSL_set_info_callback__imp__SSL_set_info_callback_SSL_set_msg_callback__imp__SSL_set_msg_callback_SSL_set_psk_client_callback__imp__SSL_set_psk_client_callback_SSL_set_psk_server_callback__imp__SSL_set_psk_server_callback_SSL_set_purpose__imp__SSL_set_purpose_SSL_set_quiet_shutdown__imp__SSL_set_quiet_shutdown_SSL_set_read_ahead__imp__SSL_set_read_ahead_SSL_set_rfd__imp__SSL_set_rfd_SSL_set_session__imp__SSL_set_session_SSL_set_session_id_context__imp__SSL_set_session_id_context_SSL_set_session_secret_cb__imp__SSL_set_session_secret_cb_SSL_set_session_ticket_ext__imp__SSL_set_session_ticket_ext_SSL_set_session_ticket_ext_cb__imp__SSL_set_session_ticket_ext_cb_SSL_set_shutdown__imp__SSL_set_shutdown_SSL_set_srp_server_param__imp__SSL_set_srp_server_param_SSL_set_srp_server_param_pw__imp__SSL_set_srp_server_param_pw_SSL_set_ssl_method__imp__SSL_set_ssl_method_SSL_set_state__imp__SSL_set_state_SSL_set_tlsext_use_srtp__imp__SSL_set_tlsext_use_srtp_SSL_set_tmp_dh_callback__imp__SSL_set_tmp_dh_callback_SSL_set_tmp_ecdh_callback__imp__SSL_set_tmp_ecdh_callback_SSL_set_tmp_rsa_callback__imp__SSL_set_tmp_rsa_callback_SSL_set_trust__imp__SSL_set_trust_SSL_set_verify__imp__SSL_set_verify_SSL_set_verify_depth__imp__SSL_set_verify_depth_SSL_set_verify_result__imp__SSL_set_verify_result_SSL_set_wfd__imp__SSL_set_wfd_SSL_shutdown__imp__SSL_shutdown_SSL_srp_server_param_with_username__imp__SSL_srp_server_param_with_username_SSL_state__imp__SSL_state_SSL_state_string__imp__SSL_state_string_SSL_state_string_long__imp__SSL_state_string_long_SSL_use_PrivateKey__imp__SSL_use_PrivateKey_SSL_use_PrivateKey_ASN1__imp__SSL_use_PrivateKey_ASN1_SSL_use_PrivateKey_file__imp__SSL_use_PrivateKey_file_SSL_use_RSAPrivateKey__imp__SSL_use_RSAPrivateKey_SSL_use_RSAPrivateKey_ASN1__imp__SSL_use_RSAPrivateKey_ASN1_SSL_use_RSAPrivateKey_file__imp__SSL_use_RSAPrivateKey_file_SSL_use_certificate__imp__SSL_use_certificate_SSL_use_certificate_ASN1__imp__SSL_use_certificate_ASN1_SSL_use_certificate_file__imp__SSL_use_certificate_file_SSL_use_psk_identity_hint__imp__SSL_use_psk_identity_hint_SSL_version__imp__SSL_version_SSL_want__imp__SSL_want_SSL_write__imp__SSL_write_SSLv23_client_method__imp__SSLv23_client_method_SSLv23_method__imp__SSLv23_method_SSLv23_server_method__imp__SSLv23_server_method_SSLv2_client_method__imp__SSLv2_client_method_SSLv2_method__imp__SSLv2_method_SSLv2_server_method__imp__SSLv2_server_method_SSLv3_client_method__imp__SSLv3_client_method_SSLv3_method__imp__SSLv3_method_SSLv3_server_method__imp__SSLv3_server_method_TLSv1_1_client_method__imp__TLSv1_1_client_method_TLSv1_1_method__imp__TLSv1_1_method_TLSv1_1_server_method__imp__TLSv1_1_server_method_TLSv1_2_client_method__imp__TLSv1_2_client_method_TLSv1_2_method__imp__TLSv1_2_method_TLSv1_2_server_method__imp__TLSv1_2_server_method_TLSv1_client_method__imp__TLSv1_client_method_TLSv1_method__imp__TLSv1_method_TLSv1_server_method__imp__TLSv1_server_method__imp__d2i_SSL_SESSION_d2i_SSL_SESSION__imp__i2d_SSL_SESSION_i2d_SSL_SESSION__imp__ssl3_ciphers/ 1485440743 0 19244 ` D̖2hҜD*x\ҠF&rbXƦ8~vXȬ@*~hܰP̱H.l޵TʶD0 tfмF2"jVL<4.0"|pjZ^F:2|nj\ZL6$rP>(~X\J8d6TD"~^>*lb<&pR.v\6pZ@jP,fN4     n  J  *  XF4nVH4&zhL. xbF.   !~!!n""P## $$%t%%R&&6''(((j))L**2++,~,,  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@A  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDBC_BIO_f_ssl_BIO_new_buffer_ssl_connect_BIO_new_ssl_BIO_new_ssl_connect_BIO_ssl_copy_session_id_BIO_ssl_shutdown_DTLS_client_method_DTLS_method_DTLS_server_method_DTLSv1_2_client_method_DTLSv1_2_method_DTLSv1_2_server_method_DTLSv1_client_method_DTLSv1_method_DTLSv1_server_method_ERR_load_SSL_strings_PEM_read_SSL_SESSION_PEM_read_bio_SSL_SESSION_PEM_write_SSL_SESSION_PEM_write_bio_SSL_SESSION_SRP_Calc_A_param_SRP_generate_client_master_secret_SRP_generate_server_master_secret_SSL_CIPHER_description_SSL_CIPHER_find_SSL_CIPHER_get_bits_SSL_CIPHER_get_id_SSL_CIPHER_get_name_SSL_CIPHER_get_version_SSL_COMP_add_compression_method_SSL_COMP_free_compression_methods_SSL_COMP_get_compression_methods_SSL_COMP_get_name_SSL_COMP_set0_compression_methods_SSL_CONF_CTX_clear_flags_SSL_CONF_CTX_finish_SSL_CONF_CTX_free_SSL_CONF_CTX_new_SSL_CONF_CTX_set1_prefix_SSL_CONF_CTX_set_flags_SSL_CONF_CTX_set_ssl_SSL_CONF_CTX_set_ssl_ctx_SSL_CONF_cmd_SSL_CONF_cmd_argv_SSL_CONF_cmd_value_type_SSL_CTX_SRP_CTX_free_SSL_CTX_SRP_CTX_init_SSL_CTX_add_client_CA_SSL_CTX_add_client_custom_ext_SSL_CTX_add_server_custom_ext_SSL_CTX_add_session_SSL_CTX_callback_ctrl_SSL_CTX_check_private_key_SSL_CTX_ctrl_SSL_CTX_flush_sessions_SSL_CTX_free_SSL_CTX_get0_certificate_SSL_CTX_get0_param_SSL_CTX_get0_privatekey_SSL_CTX_get_cert_store_SSL_CTX_get_client_CA_list_SSL_CTX_get_client_cert_cb_SSL_CTX_get_ex_data_SSL_CTX_get_ex_new_index_SSL_CTX_get_info_callback_SSL_CTX_get_quiet_shutdown_SSL_CTX_get_ssl_method_SSL_CTX_get_timeout_SSL_CTX_get_verify_callback_SSL_CTX_get_verify_depth_SSL_CTX_get_verify_mode_SSL_CTX_load_verify_locations_SSL_CTX_new_SSL_CTX_remove_session_SSL_CTX_sess_get_get_cb_SSL_CTX_sess_get_new_cb_SSL_CTX_sess_get_remove_cb_SSL_CTX_sess_set_get_cb_SSL_CTX_sess_set_new_cb_SSL_CTX_sess_set_remove_cb_SSL_CTX_sessions_SSL_CTX_set1_param_SSL_CTX_set_alpn_protos_SSL_CTX_set_alpn_select_cb_SSL_CTX_set_cert_cb_SSL_CTX_set_cert_store_SSL_CTX_set_cert_verify_callback_SSL_CTX_set_cipher_list_SSL_CTX_set_client_CA_list_SSL_CTX_set_client_cert_cb_SSL_CTX_set_client_cert_engine_SSL_CTX_set_cookie_generate_cb_SSL_CTX_set_cookie_verify_cb_SSL_CTX_set_default_passwd_cb_SSL_CTX_set_default_passwd_cb_userdata_SSL_CTX_set_default_verify_paths_SSL_CTX_set_ex_data_SSL_CTX_set_generate_session_id_SSL_CTX_set_info_callback_SSL_CTX_set_msg_callback_SSL_CTX_set_next_proto_select_cb_SSL_CTX_set_next_protos_advertised_cb_SSL_CTX_set_psk_client_callback_SSL_CTX_set_psk_server_callback_SSL_CTX_set_purpose_SSL_CTX_set_quiet_shutdown_SSL_CTX_set_session_id_context_SSL_CTX_set_srp_cb_arg_SSL_CTX_set_srp_client_pwd_callback_SSL_CTX_set_srp_password_SSL_CTX_set_srp_strength_SSL_CTX_set_srp_username_SSL_CTX_set_srp_username_callback_SSL_CTX_set_srp_verify_param_callback_SSL_CTX_set_ssl_version_SSL_CTX_set_timeout_SSL_CTX_set_tlsext_use_srtp_SSL_CTX_set_tmp_dh_callback_SSL_CTX_set_tmp_ecdh_callback_SSL_CTX_set_tmp_rsa_callback_SSL_CTX_set_trust_SSL_CTX_set_verify_SSL_CTX_set_verify_depth_SSL_CTX_use_PrivateKey_SSL_CTX_use_PrivateKey_ASN1_SSL_CTX_use_PrivateKey_file_SSL_CTX_use_RSAPrivateKey_SSL_CTX_use_RSAPrivateKey_ASN1_SSL_CTX_use_RSAPrivateKey_file_SSL_CTX_use_certificate_SSL_CTX_use_certificate_ASN1_SSL_CTX_use_certificate_chain_file_SSL_CTX_use_certificate_file_SSL_CTX_use_psk_identity_hint_SSL_CTX_use_serverinfo_SSL_CTX_use_serverinfo_file_SSL_SESSION_free_SSL_SESSION_get0_peer_SSL_SESSION_get_compress_id_SSL_SESSION_get_ex_data_SSL_SESSION_get_ex_new_index_SSL_SESSION_get_id_SSL_SESSION_get_time_SSL_SESSION_get_timeout_SSL_SESSION_new_SSL_SESSION_print_SSL_SESSION_print_fp_SSL_SESSION_set1_id_context_SSL_SESSION_set_ex_data_SSL_SESSION_set_time_SSL_SESSION_set_timeout_SSL_SRP_CTX_free_SSL_SRP_CTX_init_SSL_accept_SSL_add_client_CA_SSL_add_dir_cert_subjects_to_stack_SSL_add_file_cert_subjects_to_stack_SSL_alert_desc_string_SSL_alert_desc_string_long_SSL_alert_type_string_SSL_alert_type_string_long_SSL_cache_hit_SSL_callback_ctrl_SSL_certs_clear_SSL_check_chain_SSL_check_private_key_SSL_clear_SSL_connect_SSL_copy_session_id_SSL_ctrl_SSL_do_handshake_SSL_dup_SSL_dup_CA_list_SSL_export_keying_material_SSL_extension_supported_SSL_free_SSL_get0_alpn_selected_SSL_get0_next_proto_negotiated_SSL_get0_param_SSL_get1_session_SSL_get_SSL_CTX_SSL_get_certificate_SSL_get_cipher_list_SSL_get_ciphers_SSL_get_client_CA_list_SSL_get_current_cipher_SSL_get_current_compression_SSL_get_current_expansion_SSL_get_default_timeout_SSL_get_error_SSL_get_ex_data_SSL_get_ex_data_X509_STORE_CTX_idx_SSL_get_ex_new_index_SSL_get_fd_SSL_get_finished_SSL_get_info_callback_SSL_get_peer_cert_chain_SSL_get_peer_certificate_SSL_get_peer_finished_SSL_get_privatekey_SSL_get_psk_identity_SSL_get_psk_identity_hint_SSL_get_quiet_shutdown_SSL_get_rbio_SSL_get_read_ahead_SSL_get_rfd_SSL_get_selected_srtp_profile_SSL_get_servername_SSL_get_servername_type_SSL_get_session_SSL_get_shared_ciphers_SSL_get_shared_sigalgs_SSL_get_shutdown_SSL_get_sigalgs_SSL_get_srp_N_SSL_get_srp_g_SSL_get_srp_userinfo_SSL_get_srp_username_SSL_get_srtp_profiles_SSL_get_ssl_method_SSL_get_verify_callback_SSL_get_verify_depth_SSL_get_verify_mode_SSL_get_verify_result_SSL_get_version_SSL_get_wbio_SSL_get_wfd_SSL_has_matching_session_id_SSL_is_server_SSL_library_init_SSL_load_client_CA_file_SSL_load_error_strings_SSL_new_SSL_peek_SSL_pending_SSL_read_SSL_renegotiate_SSL_renegotiate_abbreviated_SSL_renegotiate_pending_SSL_rstate_string_SSL_rstate_string_long_SSL_select_next_proto_SSL_set1_param_SSL_set_SSL_CTX_SSL_set_accept_state_SSL_set_alpn_protos_SSL_set_bio_SSL_set_cert_cb_SSL_set_cipher_list_SSL_set_client_CA_list_SSL_set_connect_state_SSL_set_debug_SSL_set_ex_data_SSL_set_fd_SSL_set_generate_session_id_SSL_set_info_callback_SSL_set_msg_callback_SSL_set_psk_client_callback_SSL_set_psk_server_callback_SSL_set_purpose_SSL_set_quiet_shutdown_SSL_set_read_ahead_SSL_set_rfd_SSL_set_session_SSL_set_session_id_context_SSL_set_session_secret_cb_SSL_set_session_ticket_ext_SSL_set_session_ticket_ext_cb_SSL_set_shutdown_SSL_set_srp_server_param_SSL_set_srp_server_param_pw_SSL_set_ssl_method_SSL_set_state_SSL_set_tlsext_use_srtp_SSL_set_tmp_dh_callback_SSL_set_tmp_ecdh_callback_SSL_set_tmp_rsa_callback_SSL_set_trust_SSL_set_verify_SSL_set_verify_depth_SSL_set_verify_result_SSL_set_wfd_SSL_shutdown_SSL_srp_server_param_with_username_SSL_state_SSL_state_string_SSL_state_string_long_SSL_use_PrivateKey_SSL_use_PrivateKey_ASN1_SSL_use_PrivateKey_file_SSL_use_RSAPrivateKey_SSL_use_RSAPrivateKey_ASN1_SSL_use_RSAPrivateKey_file_SSL_use_certificate_SSL_use_certificate_ASN1_SSL_use_certificate_file_SSL_use_psk_identity_hint_SSL_version_SSL_want_SSL_write_SSLv23_client_method_SSLv23_method_SSLv23_server_method_SSLv2_client_method_SSLv2_method_SSLv2_server_method_SSLv3_client_method_SSLv3_method_SSLv3_server_method_TLSv1_1_client_method_TLSv1_1_method_TLSv1_1_server_method_TLSv1_2_client_method_TLSv1_2_method_TLSv1_2_server_method_TLSv1_client_method_TLSv1_method_TLSv1_server_method__IMPORT_DESCRIPTOR_SSLEAY32__NULL_IMPORT_DESCRIPTOR__imp__BIO_f_ssl__imp__BIO_new_buffer_ssl_connect__imp__BIO_new_ssl__imp__BIO_new_ssl_connect__imp__BIO_ssl_copy_session_id__imp__BIO_ssl_shutdown__imp__DTLS_client_method__imp__DTLS_method__imp__DTLS_server_method__imp__DTLSv1_2_client_method__imp__DTLSv1_2_method__imp__DTLSv1_2_server_method__imp__DTLSv1_client_method__imp__DTLSv1_method__imp__DTLSv1_server_method__imp__ERR_load_SSL_strings__imp__PEM_read_SSL_SESSION__imp__PEM_read_bio_SSL_SESSION__imp__PEM_write_SSL_SESSION__imp__PEM_write_bio_SSL_SESSION__imp__SRP_Calc_A_param__imp__SRP_generate_client_master_secret__imp__SRP_generate_server_master_secret__imp__SSL_CIPHER_description__imp__SSL_CIPHER_find__imp__SSL_CIPHER_get_bits__imp__SSL_CIPHER_get_id__imp__SSL_CIPHER_get_name__imp__SSL_CIPHER_get_version__imp__SSL_COMP_add_compression_method__imp__SSL_COMP_free_compression_methods__imp__SSL_COMP_get_compression_methods__imp__SSL_COMP_get_name__imp__SSL_COMP_set0_compression_methods__imp__SSL_CONF_CTX_clear_flags__imp__SSL_CONF_CTX_finish__imp__SSL_CONF_CTX_free__imp__SSL_CONF_CTX_new__imp__SSL_CONF_CTX_set1_prefix__imp__SSL_CONF_CTX_set_flags__imp__SSL_CONF_CTX_set_ssl__imp__SSL_CONF_CTX_set_ssl_ctx__imp__SSL_CONF_cmd__imp__SSL_CONF_cmd_argv__imp__SSL_CONF_cmd_value_type__imp__SSL_CTX_SRP_CTX_free__imp__SSL_CTX_SRP_CTX_init__imp__SSL_CTX_add_client_CA__imp__SSL_CTX_add_client_custom_ext__imp__SSL_CTX_add_server_custom_ext__imp__SSL_CTX_add_session__imp__SSL_CTX_callback_ctrl__imp__SSL_CTX_check_private_key__imp__SSL_CTX_ctrl__imp__SSL_CTX_flush_sessions__imp__SSL_CTX_free__imp__SSL_CTX_get0_certificate__imp__SSL_CTX_get0_param__imp__SSL_CTX_get0_privatekey__imp__SSL_CTX_get_cert_store__imp__SSL_CTX_get_client_CA_list__imp__SSL_CTX_get_client_cert_cb__imp__SSL_CTX_get_ex_data__imp__SSL_CTX_get_ex_new_index__imp__SSL_CTX_get_info_callback__imp__SSL_CTX_get_quiet_shutdown__imp__SSL_CTX_get_ssl_method__imp__SSL_CTX_get_timeout__imp__SSL_CTX_get_verify_callback__imp__SSL_CTX_get_verify_depth__imp__SSL_CTX_get_verify_mode__imp__SSL_CTX_load_verify_locations__imp__SSL_CTX_new__imp__SSL_CTX_remove_session__imp__SSL_CTX_sess_get_get_cb__imp__SSL_CTX_sess_get_new_cb__imp__SSL_CTX_sess_get_remove_cb__imp__SSL_CTX_sess_set_get_cb__imp__SSL_CTX_sess_set_new_cb__imp__SSL_CTX_sess_set_remove_cb__imp__SSL_CTX_sessions__imp__SSL_CTX_set1_param__imp__SSL_CTX_set_alpn_protos__imp__SSL_CTX_set_alpn_select_cb__imp__SSL_CTX_set_cert_cb__imp__SSL_CTX_set_cert_store__imp__SSL_CTX_set_cert_verify_callback__imp__SSL_CTX_set_cipher_list__imp__SSL_CTX_set_client_CA_list__imp__SSL_CTX_set_client_cert_cb__imp__SSL_CTX_set_client_cert_engine__imp__SSL_CTX_set_cookie_generate_cb__imp__SSL_CTX_set_cookie_verify_cb__imp__SSL_CTX_set_default_passwd_cb__imp__SSL_CTX_set_default_passwd_cb_userdata__imp__SSL_CTX_set_default_verify_paths__imp__SSL_CTX_set_ex_data__imp__SSL_CTX_set_generate_session_id__imp__SSL_CTX_set_info_callback__imp__SSL_CTX_set_msg_callback__imp__SSL_CTX_set_next_proto_select_cb__imp__SSL_CTX_set_next_protos_advertised_cb__imp__SSL_CTX_set_psk_client_callback__imp__SSL_CTX_set_psk_server_callback__imp__SSL_CTX_set_purpose__imp__SSL_CTX_set_quiet_shutdown__imp__SSL_CTX_set_session_id_context__imp__SSL_CTX_set_srp_cb_arg__imp__SSL_CTX_set_srp_client_pwd_callback__imp__SSL_CTX_set_srp_password__imp__SSL_CTX_set_srp_strength__imp__SSL_CTX_set_srp_username__imp__SSL_CTX_set_srp_username_callback__imp__SSL_CTX_set_srp_verify_param_callback__imp__SSL_CTX_set_ssl_version__imp__SSL_CTX_set_timeout__imp__SSL_CTX_set_tlsext_use_srtp__imp__SSL_CTX_set_tmp_dh_callback__imp__SSL_CTX_set_tmp_ecdh_callback__imp__SSL_CTX_set_tmp_rsa_callback__imp__SSL_CTX_set_trust__imp__SSL_CTX_set_verify__imp__SSL_CTX_set_verify_depth__imp__SSL_CTX_use_PrivateKey__imp__SSL_CTX_use_PrivateKey_ASN1__imp__SSL_CTX_use_PrivateKey_file__imp__SSL_CTX_use_RSAPrivateKey__imp__SSL_CTX_use_RSAPrivateKey_ASN1__imp__SSL_CTX_use_RSAPrivateKey_file__imp__SSL_CTX_use_certificate__imp__SSL_CTX_use_certificate_ASN1__imp__SSL_CTX_use_certificate_chain_file__imp__SSL_CTX_use_certificate_file__imp__SSL_CTX_use_psk_identity_hint__imp__SSL_CTX_use_serverinfo__imp__SSL_CTX_use_serverinfo_file__imp__SSL_SESSION_free__imp__SSL_SESSION_get0_peer__imp__SSL_SESSION_get_compress_id__imp__SSL_SESSION_get_ex_data__imp__SSL_SESSION_get_ex_new_index__imp__SSL_SESSION_get_id__imp__SSL_SESSION_get_time__imp__SSL_SESSION_get_timeout__imp__SSL_SESSION_new__imp__SSL_SESSION_print__imp__SSL_SESSION_print_fp__imp__SSL_SESSION_set1_id_context__imp__SSL_SESSION_set_ex_data__imp__SSL_SESSION_set_time__imp__SSL_SESSION_set_timeout__imp__SSL_SRP_CTX_free__imp__SSL_SRP_CTX_init__imp__SSL_accept__imp__SSL_add_client_CA__imp__SSL_add_dir_cert_subjects_to_stack__imp__SSL_add_file_cert_subjects_to_stack__imp__SSL_alert_desc_string__imp__SSL_alert_desc_string_long__imp__SSL_alert_type_string__imp__SSL_alert_type_string_long__imp__SSL_cache_hit__imp__SSL_callback_ctrl__imp__SSL_certs_clear__imp__SSL_check_chain__imp__SSL_check_private_key__imp__SSL_clear__imp__SSL_connect__imp__SSL_copy_session_id__imp__SSL_ctrl__imp__SSL_do_handshake__imp__SSL_dup__imp__SSL_dup_CA_list__imp__SSL_export_keying_material__imp__SSL_extension_supported__imp__SSL_free__imp__SSL_get0_alpn_selected__imp__SSL_get0_next_proto_negotiated__imp__SSL_get0_param__imp__SSL_get1_session__imp__SSL_get_SSL_CTX__imp__SSL_get_certificate__imp__SSL_get_cipher_list__imp__SSL_get_ciphers__imp__SSL_get_client_CA_list__imp__SSL_get_current_cipher__imp__SSL_get_current_compression__imp__SSL_get_current_expansion__imp__SSL_get_default_timeout__imp__SSL_get_error__imp__SSL_get_ex_data__imp__SSL_get_ex_data_X509_STORE_CTX_idx__imp__SSL_get_ex_new_index__imp__SSL_get_fd__imp__SSL_get_finished__imp__SSL_get_info_callback__imp__SSL_get_peer_cert_chain__imp__SSL_get_peer_certificate__imp__SSL_get_peer_finished__imp__SSL_get_privatekey__imp__SSL_get_psk_identity__imp__SSL_get_psk_identity_hint__imp__SSL_get_quiet_shutdown__imp__SSL_get_rbio__imp__SSL_get_read_ahead__imp__SSL_get_rfd__imp__SSL_get_selected_srtp_profile__imp__SSL_get_servername__imp__SSL_get_servername_type__imp__SSL_get_session__imp__SSL_get_shared_ciphers__imp__SSL_get_shared_sigalgs__imp__SSL_get_shutdown__imp__SSL_get_sigalgs__imp__SSL_get_srp_N__imp__SSL_get_srp_g__imp__SSL_get_srp_userinfo__imp__SSL_get_srp_username__imp__SSL_get_srtp_profiles__imp__SSL_get_ssl_method__imp__SSL_get_verify_callback__imp__SSL_get_verify_depth__imp__SSL_get_verify_mode__imp__SSL_get_verify_result__imp__SSL_get_version__imp__SSL_get_wbio__imp__SSL_get_wfd__imp__SSL_has_matching_session_id__imp__SSL_is_server__imp__SSL_library_init__imp__SSL_load_client_CA_file__imp__SSL_load_error_strings__imp__SSL_new__imp__SSL_peek__imp__SSL_pending__imp__SSL_read__imp__SSL_renegotiate__imp__SSL_renegotiate_abbreviated__imp__SSL_renegotiate_pending__imp__SSL_rstate_string__imp__SSL_rstate_string_long__imp__SSL_select_next_proto__imp__SSL_set1_param__imp__SSL_set_SSL_CTX__imp__SSL_set_accept_state__imp__SSL_set_alpn_protos__imp__SSL_set_bio__imp__SSL_set_cert_cb__imp__SSL_set_cipher_list__imp__SSL_set_client_CA_list__imp__SSL_set_connect_state__imp__SSL_set_debug__imp__SSL_set_ex_data__imp__SSL_set_fd__imp__SSL_set_generate_session_id__imp__SSL_set_info_callback__imp__SSL_set_msg_callback__imp__SSL_set_psk_client_callback__imp__SSL_set_psk_server_callback__imp__SSL_set_purpose__imp__SSL_set_quiet_shutdown__imp__SSL_set_read_ahead__imp__SSL_set_rfd__imp__SSL_set_session__imp__SSL_set_session_id_context__imp__SSL_set_session_secret_cb__imp__SSL_set_session_ticket_ext__imp__SSL_set_session_ticket_ext_cb__imp__SSL_set_shutdown__imp__SSL_set_srp_server_param__imp__SSL_set_srp_server_param_pw__imp__SSL_set_ssl_method__imp__SSL_set_state__imp__SSL_set_tlsext_use_srtp__imp__SSL_set_tmp_dh_callback__imp__SSL_set_tmp_ecdh_callback__imp__SSL_set_tmp_rsa_callback__imp__SSL_set_trust__imp__SSL_set_verify__imp__SSL_set_verify_depth__imp__SSL_set_verify_result__imp__SSL_set_wfd__imp__SSL_shutdown__imp__SSL_srp_server_param_with_username__imp__SSL_state__imp__SSL_state_string__imp__SSL_state_string_long__imp__SSL_use_PrivateKey__imp__SSL_use_PrivateKey_ASN1__imp__SSL_use_PrivateKey_file__imp__SSL_use_RSAPrivateKey__imp__SSL_use_RSAPrivateKey_ASN1__imp__SSL_use_RSAPrivateKey_file__imp__SSL_use_certificate__imp__SSL_use_certificate_ASN1__imp__SSL_use_certificate_file__imp__SSL_use_psk_identity_hint__imp__SSL_version__imp__SSL_want__imp__SSL_write__imp__SSLv23_client_method__imp__SSLv23_method__imp__SSLv23_server_method__imp__SSLv2_client_method__imp__SSLv2_method__imp__SSLv2_server_method__imp__SSLv3_client_method__imp__SSLv3_method__imp__SSLv3_server_method__imp__TLSv1_1_client_method__imp__TLSv1_1_method__imp__TLSv1_1_server_method__imp__TLSv1_2_client_method__imp__TLSv1_2_method__imp__TLSv1_2_server_method__imp__TLSv1_client_method__imp__TLSv1_method__imp__TLSv1_server_method__imp__d2i_SSL_SESSION__imp__i2d_SSL_SESSION__imp__ssl3_ciphers_d2i_SSL_SESSION_i2d_SSL_SESSIONSSLEAY32_NULL_THUNK_DATASSLEAY32.dll/ 1485440743 0 498 ` LX.debug$SB@B.idata$2@0.idata$6@  SSLEAY32.dll' Microsoft (R) LINK SSLEAY32.dll@comp.id.idata$2@h.idata$6.idata$4@h.idata$5@h!:T__IMPORT_DESCRIPTOR_SSLEAY32__NULL_IMPORT_DESCRIPTORSSLEAY32_NULL_THUNK_DATASSLEAY32.dll/ 1485440743 0 251 ` LX.debug$SBd@B.idata$3@0 SSLEAY32.dll' Microsoft (R) LINK@comp.id__NULL_IMPORT_DESCRIPTOR SSLEAY32.dll/ 1485440743 0 280 ` LX.debug$SB@B.idata$5@0.idata$4@0 SSLEAY32.dll' Microsoft (R) LINK@comp.idSSLEAY32_NULL_THUNK_DATASSLEAY32.dll/ 1485440743 0 44 ` LXy_BIO_f_sslSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 61 ` LX)_BIO_new_buffer_ssl_connectSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 46 ` LXz_BIO_new_sslSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 54 ` LX"_BIO_new_ssl_connectSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 58 ` LX&|_BIO_ssl_copy_session_idSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 51 ` LX_BIO_ssl_shutdownSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 53 ` LX!p_DTLS_client_methodSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 46 ` LXo_DTLS_methodSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 53 ` LX!_DTLS_server_methodSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 57 ` LX%_DTLSv1_2_client_methodSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 50 ` LX_DTLSv1_2_methodSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 57 ` LX%u_DTLSv1_2_server_methodSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 55 ` LX# _DTLSv1_client_methodSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 48 ` LX_DTLSv1_methodSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 55 ` LX#_DTLSv1_server_methodSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 55 ` LX#_ERR_load_SSL_stringsSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 55 ` LX#-_PEM_read_SSL_SESSIONSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 59 ` LX'._PEM_read_bio_SSL_SESSIONSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 56 ` LX$1_PEM_write_SSL_SESSIONSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 60 ` LX((_PEM_write_bio_SSL_SESSIONSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 51 ` LXL_SRP_Calc_A_paramSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 68 ` LX0O_SRP_generate_client_master_secretSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 68 ` LX0M_SRP_generate_server_master_secretSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 57 ` LX%_SSL_CIPHER_descriptionSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 50 ` LX~_SSL_CIPHER_findSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 54 ` LX"_SSL_CIPHER_get_bitsSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 52 ` LX ]_SSL_CIPHER_get_idSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 54 ` LX"_SSL_CIPHER_get_nameSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 57 ` LX%_SSL_CIPHER_get_versionSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 66 ` LX._SSL_COMP_add_compression_methodSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 68 ` LX0_SSL_COMP_free_compression_methodsSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 67 ` LX/_SSL_COMP_get_compression_methodsSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 52 ` LX _SSL_COMP_get_nameSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 68 ` LX0v_SSL_COMP_set0_compression_methodsSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 59 ` LX'_SSL_CONF_CTX_clear_flagsSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 54 ` LX"n_SSL_CONF_CTX_finishSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 52 ` LX _SSL_CONF_CTX_freeSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 51 ` LX_SSL_CONF_CTX_newSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 59 ` LX'_SSL_CONF_CTX_set1_prefixSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 57 ` LX%_SSL_CONF_CTX_set_flagsSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 55 ` LX#_SSL_CONF_CTX_set_sslSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 59 ` LX'}_SSL_CONF_CTX_set_ssl_ctxSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 47 ` LX{_SSL_CONF_cmdSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 52 ` LX t_SSL_CONF_cmd_argvSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 58 ` LX&_SSL_CONF_cmd_value_typeSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 55 ` LX#N_SSL_CTX_SRP_CTX_freeSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 55 ` LX#J_SSL_CTX_SRP_CTX_initSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 56 ` LX$_SSL_CTX_add_client_CASSLEAY32.dllSSLEAY32.dll/ 1485440743 0 64 ` LX,x_SSL_CTX_add_client_custom_extSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 64 ` LX,_SSL_CTX_add_server_custom_extSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 54 ` LX"_SSL_CTX_add_sessionSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 56 ` LX$_SSL_CTX_callback_ctrlSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 60 ` LX(_SSL_CTX_check_private_keySSLEAY32.dllSSLEAY32.dll/ 1485440743 0 47 ` LX_SSL_CTX_ctrlSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 57 ` LX%_SSL_CTX_flush_sessionsSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 47 ` LX_SSL_CTX_freeSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 59 ` LX'_SSL_CTX_get0_certificateSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 53 ` LX!z_SSL_CTX_get0_paramSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 58 ` LX&l_SSL_CTX_get0_privatekeySSLEAY32.dllSSLEAY32.dll/ 1485440743 0 57 ` LX%_SSL_CTX_get_cert_storeSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 61 ` LX) _SSL_CTX_get_client_CA_listSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 61 ` LX) _SSL_CTX_get_client_cert_cbSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 54 ` LX"_SSL_CTX_get_ex_dataSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 59 ` LX'_SSL_CTX_get_ex_new_indexSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 60 ` LX(_SSL_CTX_get_info_callbackSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 61 ` LX)_SSL_CTX_get_quiet_shutdownSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 57 ` LX%|_SSL_CTX_get_ssl_methodSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 54 ` LX"_SSL_CTX_get_timeoutSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 62 ` LX* _SSL_CTX_get_verify_callbackSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 59 ` LX'_SSL_CTX_get_verify_depthSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 58 ` LX& _SSL_CTX_get_verify_modeSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 64 ` LX,_SSL_CTX_load_verify_locationsSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 46 ` LX _SSL_CTX_newSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 57 ` LX% _SSL_CTX_remove_sessionSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 58 ` LX&_SSL_CTX_sess_get_get_cbSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 58 ` LX&_SSL_CTX_sess_get_new_cbSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 61 ` LX)!_SSL_CTX_sess_get_remove_cbSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 58 ` LX&_SSL_CTX_sess_set_get_cbSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 58 ` LX&_SSL_CTX_sess_set_new_cbSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 61 ` LX)_SSL_CTX_sess_set_remove_cbSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 51 ` LX_SSL_CTX_sessionsSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 53 ` LX!6_SSL_CTX_set1_paramSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 58 ` LX&_SSL_CTX_set_alpn_protosSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 61 ` LX)_SSL_CTX_set_alpn_select_cbSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 54 ` LX"w_SSL_CTX_set_cert_cbSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 57 ` LX%_SSL_CTX_set_cert_storeSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 67 ` LX/_SSL_CTX_set_cert_verify_callbackSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 58 ` LX&_SSL_CTX_set_cipher_listSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 61 ` LX)_SSL_CTX_set_client_CA_listSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 61 ` LX)_SSL_CTX_set_client_cert_cbSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 65 ` LX-%_SSL_CTX_set_client_cert_engineSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 65 ` LX-_SSL_CTX_set_cookie_generate_cbSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 63 ` LX+_SSL_CTX_set_cookie_verify_cbSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 64 ` LX,_SSL_CTX_set_default_passwd_cbSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 73 ` LX5_SSL_CTX_set_default_passwd_cb_userdataSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 67 ` LX/_SSL_CTX_set_default_verify_pathsSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 54 ` LX"_SSL_CTX_set_ex_dataSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 66 ` LX._SSL_CTX_set_generate_session_idSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 60 ` LX(_SSL_CTX_set_info_callbackSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 59 ` LX' _SSL_CTX_set_msg_callbackSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 67 ` LX/i_SSL_CTX_set_next_proto_select_cbSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 72 ` LX4c_SSL_CTX_set_next_protos_advertised_cbSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 66 ` LX.'_SSL_CTX_set_psk_client_callbackSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 66 ` LX./_SSL_CTX_set_psk_server_callbackSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 54 ` LX"_SSL_CTX_set_purposeSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 61 ` LX)_SSL_CTX_set_quiet_shutdownSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 65 ` LX-_SSL_CTX_set_session_id_contextSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 57 ` LX%H_SSL_CTX_set_srp_cb_argSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 70 ` LX2<_SSL_CTX_set_srp_client_pwd_callbackSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 59 ` LX'D_SSL_CTX_set_srp_passwordSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 59 ` LX'E_SSL_CTX_set_srp_strengthSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 59 ` LX'I_SSL_CTX_set_srp_usernameSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 68 ` LX0>_SSL_CTX_set_srp_username_callbackSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 72 ` LX4F_SSL_CTX_set_srp_verify_param_callbackSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 58 ` LX&_SSL_CTX_set_ssl_versionSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 54 ` LX"_SSL_CTX_set_timeoutSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 62 ` LX*f_SSL_CTX_set_tlsext_use_srtpSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 62 ` LX*_SSL_CTX_set_tmp_dh_callbackSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 64 ` LX, _SSL_CTX_set_tmp_ecdh_callbackSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 63 ` LX+_SSL_CTX_set_tmp_rsa_callbackSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 52 ` LX _SSL_CTX_set_trustSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 53 ` LX!_SSL_CTX_set_verifySSLEAY32.dll SSLEAY32.dll/ 1485440743 0 59 ` LX'_SSL_CTX_set_verify_depthSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 57 ` LX%_SSL_CTX_use_PrivateKeySSLEAY32.dll SSLEAY32.dll/ 1485440743 0 62 ` LX*_SSL_CTX_use_PrivateKey_ASN1SSLEAY32.dllSSLEAY32.dll/ 1485440743 0 62 ` LX*_SSL_CTX_use_PrivateKey_fileSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 60 ` LX(_SSL_CTX_use_RSAPrivateKeySSLEAY32.dllSSLEAY32.dll/ 1485440743 0 65 ` LX-_SSL_CTX_use_RSAPrivateKey_ASN1SSLEAY32.dll SSLEAY32.dll/ 1485440743 0 65 ` LX-_SSL_CTX_use_RSAPrivateKey_fileSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 58 ` LX&_SSL_CTX_use_certificateSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 63 ` LX+_SSL_CTX_use_certificate_ASN1SSLEAY32.dll SSLEAY32.dll/ 1485440743 0 69 ` LX1_SSL_CTX_use_certificate_chain_fileSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 63 ` LX+_SSL_CTX_use_certificate_fileSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 64 ` LX,&_SSL_CTX_use_psk_identity_hintSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 57 ` LX%_SSL_CTX_use_serverinfoSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 62 ` LX*_SSL_CTX_use_serverinfo_fileSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 51 ` LX_SSL_SESSION_freeSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 56 ` LX$T_SSL_SESSION_get0_peerSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 62 ` LX*j_SSL_SESSION_get_compress_idSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 58 ` LX&_SSL_SESSION_get_ex_dataSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 63 ` LX+_SSL_SESSION_get_ex_new_indexSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 53 ` LX!_SSL_SESSION_get_idSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 55 ` LX#_SSL_SESSION_get_timeSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 58 ` LX&_SSL_SESSION_get_timeoutSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 50 ` LX _SSL_SESSION_newSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 52 ` LX !_SSL_SESSION_printSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 55 ` LX#"_SSL_SESSION_print_fpSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 62 ` LX*V_SSL_SESSION_set1_id_contextSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 58 ` LX&_SSL_SESSION_set_ex_dataSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 55 ` LX#_SSL_SESSION_set_timeSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 58 ` LX&_SSL_SESSION_set_timeoutSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 51 ` LXR_SSL_SRP_CTX_freeSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 51 ` LXK_SSL_SRP_CTX_initSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 45 ` LX#_SSL_acceptSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 52 ` LX $_SSL_add_client_CASSLEAY32.dllSSLEAY32.dll/ 1485440743 0 69 ` LX1_SSL_add_dir_cert_subjects_to_stackSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 70 ` LX2_SSL_add_file_cert_subjects_to_stackSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 56 ` LX$%_SSL_alert_desc_stringSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 61 ` LX)&_SSL_alert_desc_string_longSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 56 ` LX$'_SSL_alert_type_stringSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 61 ` LX)(_SSL_alert_type_string_longSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 48 ` LXX_SSL_cache_hitSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 52 ` LX _SSL_callback_ctrlSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 50 ` LX_SSL_certs_clearSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 50 ` LX_SSL_check_chainSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 56 ` LX$)_SSL_check_private_keySSLEAY32.dllSSLEAY32.dll/ 1485440743 0 44 ` LX*_SSL_clearSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 46 ` LX+_SSL_connectSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 54 ` LX",_SSL_copy_session_idSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 43 ` LX-_SSL_ctrlSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 51 ` LX}_SSL_do_handshakeSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 42 ` LX._SSL_dupSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 50 ` LX/_SSL_dup_CA_listSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 61 ` LX)a_SSL_export_keying_materialSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 58 ` LX&_SSL_extension_supportedSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 43 ` LX0_SSL_freeSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 57 ` LX%_SSL_get0_alpn_selectedSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 65 ` LX-d_SSL_get0_next_proto_negotiatedSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 49 ` LXk_SSL_get0_paramSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 51 ` LX_SSL_get1_sessionSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 50 ` LX_SSL_get_SSL_CTXSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 54 ` LX"1_SSL_get_certificateSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 54 ` LX"4_SSL_get_cipher_listSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 50 ` LX7_SSL_get_ciphersSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 57 ` LX%8_SSL_get_client_CA_listSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 57 ` LX%_SSL_get_current_cipherSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 62 ` LX*_SSL_get_current_compressionSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 60 ` LX(_SSL_get_current_expansionSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 58 ` LX&9_SSL_get_default_timeoutSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 48 ` LX:_SSL_get_errorSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 50 ` LX_SSL_get_ex_dataSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 69 ` LX1_SSL_get_ex_data_X509_STORE_CTX_idxSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 55 ` LX#_SSL_get_ex_new_indexSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 45 ` LX;_SSL_get_fdSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 51 ` LX_SSL_get_finishedSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 56 ` LX$_SSL_get_info_callbackSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 58 ` LX&<_SSL_get_peer_cert_chainSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 59 ` LX'=_SSL_get_peer_certificateSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 56 ` LX$_SSL_get_peer_finishedSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 53 ` LX!~_SSL_get_privatekeySSLEAY32.dll SSLEAY32.dll/ 1485440743 0 55 ` LX#0_SSL_get_psk_identitySSLEAY32.dll SSLEAY32.dll/ 1485440743 0 60 ` LX()_SSL_get_psk_identity_hintSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 57 ` LX%_SSL_get_quiet_shutdownSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 47 ` LX?_SSL_get_rbioSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 53 ` LX!@_SSL_get_read_aheadSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 46 ` LX_SSL_get_rfdSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 64 ` LX,e_SSL_get_selected_srtp_profileSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 53 ` LX!#_SSL_get_servernameSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 58 ` LX&$_SSL_get_servername_typeSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 50 ` LX_SSL_get_sessionSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 57 ` LX%A_SSL_get_shared_ciphersSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 57 ` LX%m_SSL_get_shared_sigalgsSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 51 ` LX_SSL_get_shutdownSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 50 ` LX_SSL_get_sigalgsSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 48 ` LXB_SSL_get_srp_NSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 48 ` LX=_SSL_get_srp_gSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 55 ` LX#?_SSL_get_srp_userinfoSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 55 ` LX#C_SSL_get_srp_usernameSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 56 ` LX$h_SSL_get_srtp_profilesSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 53 ` LX!B_SSL_get_ssl_methodSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 58 ` LX&E_SSL_get_verify_callbackSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 55 ` LX#_SSL_get_verify_depthSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 54 ` LX"F_SSL_get_verify_modeSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 56 ` LX$_SSL_get_verify_resultSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 50 ` LXG_SSL_get_versionSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 47 ` LXH_SSL_get_wbioSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 46 ` LX_SSL_get_wfdSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 62 ` LX*_SSL_has_matching_session_idSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 48 ` LXy_SSL_is_serverSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 51 ` LX_SSL_library_initSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 58 ` LX&I_SSL_load_client_CA_fileSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 57 ` LX%J_SSL_load_error_stringsSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 42 ` LXK_SSL_newSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 43 ` LXL_SSL_peekSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 46 ` LXM_SSL_pendingSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 43 ` LXN_SSL_readSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 50 ` LXO_SSL_renegotiateSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 62 ` LX*8_SSL_renegotiate_abbreviatedSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 58 ` LX& _SSL_renegotiate_pendingSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 52 ` LX P_SSL_rstate_stringSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 57 ` LX%Q_SSL_rstate_string_longSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 56 ` LX$g_SSL_select_next_protoSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 49 ` LX5_SSL_set1_paramSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 50 ` LX"_SSL_set_SSL_CTXSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 55 ` LX#R_SSL_set_accept_stateSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 54 ` LX"r_SSL_set_alpn_protosSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 46 ` LXS_SSL_set_bioSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 50 ` LX_SSL_set_cert_cbSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 54 ` LX"T_SSL_set_cipher_listSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 57 ` LX%U_SSL_set_client_CA_listSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 56 ` LX$V_SSL_set_connect_stateSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 48 ` LXS_SSL_set_debugSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 50 ` LX_SSL_set_ex_dataSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 45 ` LXW_SSL_set_fdSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 62 ` LX*_SSL_set_generate_session_idSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 56 ` LX$_SSL_set_info_callbackSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 55 ` LX# _SSL_set_msg_callbackSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 62 ` LX*,_SSL_set_psk_client_callbackSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 62 ` LX**_SSL_set_psk_server_callbackSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 50 ` LX_SSL_set_purposeSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 57 ` LX%_SSL_set_quiet_shutdownSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 53 ` LX!X_SSL_set_read_aheadSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 46 ` LXY_SSL_set_rfdSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 50 ` LXZ_SSL_set_sessionSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 61 ` LX)_SSL_set_session_id_contextSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 60 ` LX(3_SSL_set_session_secret_cbSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 61 ` LX)2_SSL_set_session_ticket_extSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 64 ` LX,4_SSL_set_session_ticket_ext_cbSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 51 ` LX_SSL_set_shutdownSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 59 ` LX'@_SSL_set_srp_server_paramSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 62 ` LX*A_SSL_set_srp_server_param_pwSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 53 ` LX![_SSL_set_ssl_methodSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 48 ` LX\_SSL_set_stateSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 58 ` LX&b_SSL_set_tlsext_use_srtpSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 58 ` LX&_SSL_set_tmp_dh_callbackSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 60 ` LX(_SSL_set_tmp_ecdh_callbackSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 59 ` LX'_SSL_set_tmp_rsa_callbackSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 48 ` LX_SSL_set_trustSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 49 ` LX^_SSL_set_verifySSLEAY32.dll SSLEAY32.dll/ 1485440743 0 55 ` LX#_SSL_set_verify_depthSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 56 ` LX$_SSL_set_verify_resultSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 46 ` LX__SSL_set_wfdSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 47 ` LX`_SSL_shutdownSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 69 ` LX1P_SSL_srp_server_param_with_usernameSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 44 ` LX_SSL_stateSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 51 ` LXa_SSL_state_stringSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 56 ` LX$b_SSL_state_string_longSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 53 ` LX!c_SSL_use_PrivateKeySSLEAY32.dll SSLEAY32.dll/ 1485440743 0 58 ` LX&d_SSL_use_PrivateKey_ASN1SSLEAY32.dllSSLEAY32.dll/ 1485440743 0 58 ` LX&e_SSL_use_PrivateKey_fileSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 56 ` LX$f_SSL_use_RSAPrivateKeySSLEAY32.dllSSLEAY32.dll/ 1485440743 0 61 ` LX)g_SSL_use_RSAPrivateKey_ASN1SSLEAY32.dll SSLEAY32.dll/ 1485440743 0 61 ` LX)h_SSL_use_RSAPrivateKey_fileSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 54 ` LX"i_SSL_use_certificateSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 59 ` LX'j_SSL_use_certificate_ASN1SSLEAY32.dll SSLEAY32.dll/ 1485440743 0 59 ` LX'k_SSL_use_certificate_fileSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 60 ` LX(+_SSL_use_psk_identity_hintSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 46 ` LX_SSL_versionSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 43 ` LX_SSL_wantSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 44 ` LXl_SSL_writeSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 55 ` LX#n_SSLv23_client_methodSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 48 ` LXo_SSLv23_methodSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 55 ` LX#p_SSLv23_server_methodSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 54 ` LX"q_SSLv2_client_methodSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 47 ` LXr_SSLv2_methodSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 54 ` LX"s_SSLv2_server_methodSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 54 ` LX"t_SSLv3_client_methodSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 47 ` LXu_SSLv3_methodSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 54 ` LX"v_SSLv3_server_methodSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 56 ` LX$:_TLSv1_1_client_methodSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 49 ` LX9_TLSv1_1_methodSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 56 ` LX$;_TLSv1_1_server_methodSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 56 ` LX$U_TLSv1_2_client_methodSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 49 ` LX^_TLSv1_2_methodSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 56 ` LX$W_TLSv1_2_server_methodSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 54 ` LX"_TLSv1_client_methodSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 47 ` LX_TLSv1_methodSSLEAY32.dll SSLEAY32.dll/ 1485440743 0 54 ` LX"_TLSv1_server_methodSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 50 ` LXw_d2i_SSL_SESSIONSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 50 ` LXx_i2d_SSL_SESSIONSSLEAY32.dllSSLEAY32.dll/ 1485440743 0 47 ` LX@ _ssl3_ciphersSSLEAY32.dll vibe.d-0.8.2/lib/win-i386/000077500000000000000000000000001324361747700147405ustar00rootroot00000000000000vibe.d-0.8.2/lib/win-i386/eay.lib000066400000000000000000020720001324361747700162070ustar00rootroot00000000000000 jACCESS_DESCRIPTION_freeC_ACCESS_DESCRIPTION_free libeay32.dllACCESS_DESCRIPTION_freeACCESS_DESCRIPTION_it?_ACCESS_DESCRIPTION_it libeay32.dllACCESS_DESCRIPTION_itACCESS_DESCRIPTION_newA_ACCESS_DESCRIPTION_new libeay32.dllACCESS_DESCRIPTION_newAES_bi_ige_encrypt9_AES_bi_ige_encrypt libeay32.dllAES_bi_ige_encryptAES_cbc_encrypt3_AES_cbc_encrypt libeay32.dllAES_cbc_encryptAES_cfb128_encrypt9_AES_cfb128_encrypt libeay32.dllAES_cfb128_encryptAES_cfb1_encrypt5_AES_cfb1_encrypt libeay32.dllAES_cfb1_encryptAES_cfb8_encrypt5_AES_cfb8_encrypt libeay32.dllAES_cfb8_encryptAES_ctr128_encrypt9_AES_ctr128_encrypt libeay32.dllAES_ctr128_encrypt AES_decrypt+ _AES_decrypt libeay32.dll AES_decryptAES_ecb_encrypt3_AES_ecb_encrypt libeay32.dllAES_ecb_encrypt AES_encrypt+ _AES_encrypt libeay32.dll AES_encryptAES_ige_encrypt3_AES_ige_encrypt libeay32.dllAES_ige_encryptAES_ofb128_encrypt9_AES_ofb128_encrypt libeay32.dllAES_ofb128_encrypt AES_options+ _AES_options libeay32.dll AES_optionsAES_set_decrypt_key;_AES_set_decrypt_key libeay32.dllAES_set_decrypt_keyAES_set_encrypt_key;_AES_set_encrypt_key libeay32.dllAES_set_encrypt_keyAES_unwrap_key1_AES_unwrap_key libeay32.dllAES_unwrap_key AES_wrap_key- _AES_wrap_key libeay32.dll AES_wrap_key ASN1_ANY_it+ _ASN1_ANY_it libeay32.dll ASN1_ANY_itASN1_BIT_STRING_check?_ASN1_BIT_STRING_check libeay32.dllASN1_BIT_STRING_checkASN1_BIT_STRING_free=_ASN1_BIT_STRING_free libeay32.dllASN1_BIT_STRING_freeASN1_BIT_STRING_get_bitC_ASN1_BIT_STRING_get_bit libeay32.dllASN1_BIT_STRING_get_bitASN1_BIT_STRING_it9_ASN1_BIT_STRING_it libeay32.dllASN1_BIT_STRING_itASN1_BIT_STRING_name_printI_ASN1_BIT_STRING_name_print libeay32.dllASN1_BIT_STRING_name_printASN1_BIT_STRING_new;_ASN1_BIT_STRING_new libeay32.dllASN1_BIT_STRING_newASN1_BIT_STRING_num_ascC_ASN1_BIT_STRING_num_asc libeay32.dllASN1_BIT_STRING_num_ascASN1_BIT_STRING_set;_ASN1_BIT_STRING_set libeay32.dllASN1_BIT_STRING_setASN1_BIT_STRING_set_ascC_ASN1_BIT_STRING_set_asc libeay32.dllASN1_BIT_STRING_set_ascASN1_BIT_STRING_set_bitC_ASN1_BIT_STRING_set_bit libeay32.dllASN1_BIT_STRING_set_bitASN1_BMPSTRING_free;_ASN1_BMPSTRING_free libeay32.dllASN1_BMPSTRING_freeASN1_BMPSTRING_it7_ASN1_BMPSTRING_it libeay32.dllASN1_BMPSTRING_itASN1_BMPSTRING_new9_ASN1_BMPSTRING_new libeay32.dllASN1_BMPSTRING_newASN1_BOOLEAN_it3_ASN1_BOOLEAN_it libeay32.dllASN1_BOOLEAN_itASN1_ENUMERATED_free=_ASN1_ENUMERATED_free libeay32.dllASN1_ENUMERATED_freeASN1_ENUMERATED_get;_ASN1_ENUMERATED_get libeay32.dllASN1_ENUMERATED_getASN1_ENUMERATED_it9_ASN1_ENUMERATED_it libeay32.dllASN1_ENUMERATED_itASN1_ENUMERATED_new;_ASN1_ENUMERATED_new libeay32.dllASN1_ENUMERATED_newASN1_ENUMERATED_set;_ASN1_ENUMERATED_set libeay32.dllASN1_ENUMERATED_setASN1_ENUMERATED_to_BN?_ASN1_ENUMERATED_to_BN libeay32.dllASN1_ENUMERATED_to_BNASN1_FBOOLEAN_it5_ASN1_FBOOLEAN_it libeay32.dllASN1_FBOOLEAN_itASN1_GENERALIZEDTIME_adjE_ASN1_GENERALIZEDTIME_adj libeay32.dllASN1_GENERALIZEDTIME_adjASN1_GENERALIZEDTIME_checkI_ASN1_GENERALIZEDTIME_check libeay32.dllASN1_GENERALIZEDTIME_checkASN1_GENERALIZEDTIME_freeG_ASN1_GENERALIZEDTIME_free libeay32.dllASN1_GENERALIZEDTIME_freeASN1_GENERALIZEDTIME_itC_ASN1_GENERALIZEDTIME_it libeay32.dllASN1_GENERALIZEDTIME_itASN1_GENERALIZEDTIME_newE_ASN1_GENERALIZEDTIME_new libeay32.dllASN1_GENERALIZEDTIME_newASN1_GENERALIZEDTIME_printI_ASN1_GENERALIZEDTIME_print libeay32.dllASN1_GENERALIZEDTIME_printASN1_GENERALIZEDTIME_setE_ASN1_GENERALIZEDTIME_set libeay32.dllASN1_GENERALIZEDTIME_set!ASN1_GENERALIZEDTIME_set_stringS _ASN1_GENERALIZEDTIME_set_string libeay32.dllASN1_GENERALIZEDTIME_set_stringASN1_GENERALSTRING_freeC_ASN1_GENERALSTRING_free libeay32.dllASN1_GENERALSTRING_freeASN1_GENERALSTRING_it?_ASN1_GENERALSTRING_it libeay32.dllASN1_GENERALSTRING_itASN1_GENERALSTRING_newA_ASN1_GENERALSTRING_new libeay32.dllASN1_GENERALSTRING_newASN1_IA5STRING_free;_ASN1_IA5STRING_free libeay32.dllASN1_IA5STRING_freeASN1_IA5STRING_it7_ASN1_IA5STRING_it libeay32.dllASN1_IA5STRING_itASN1_IA5STRING_new9_ASN1_IA5STRING_new libeay32.dllASN1_IA5STRING_newASN1_INTEGER_cmp5_ASN1_INTEGER_cmp libeay32.dllASN1_INTEGER_cmpASN1_INTEGER_dup5_ASN1_INTEGER_dup libeay32.dllASN1_INTEGER_dupASN1_INTEGER_free7_ASN1_INTEGER_free libeay32.dllASN1_INTEGER_freeASN1_INTEGER_get5_ASN1_INTEGER_get libeay32.dllASN1_INTEGER_getASN1_INTEGER_it3_ASN1_INTEGER_it libeay32.dllASN1_INTEGER_itASN1_INTEGER_new5_ASN1_INTEGER_new libeay32.dllASN1_INTEGER_newASN1_INTEGER_set5_ASN1_INTEGER_set libeay32.dllASN1_INTEGER_setASN1_INTEGER_to_BN9_ASN1_INTEGER_to_BN libeay32.dllASN1_INTEGER_to_BNASN1_NULL_free1_ASN1_NULL_free libeay32.dllASN1_NULL_free ASN1_NULL_it- _ASN1_NULL_it libeay32.dll ASN1_NULL_it ASN1_NULL_new/_ASN1_NULL_new libeay32.dll ASN1_NULL_newASN1_OBJECT_create9_ASN1_OBJECT_create libeay32.dllASN1_OBJECT_createASN1_OBJECT_free5_ASN1_OBJECT_free libeay32.dllASN1_OBJECT_freeASN1_OBJECT_it1_ASN1_OBJECT_it libeay32.dllASN1_OBJECT_itASN1_OBJECT_new3_ASN1_OBJECT_new libeay32.dllASN1_OBJECT_newASN1_OCTET_STRING_NDEF_itG_ASN1_OCTET_STRING_NDEF_it libeay32.dllASN1_OCTET_STRING_NDEF_itASN1_OCTET_STRING_cmp?_ASN1_OCTET_STRING_cmp libeay32.dllASN1_OCTET_STRING_cmpASN1_OCTET_STRING_dup?_ASN1_OCTET_STRING_dup libeay32.dllASN1_OCTET_STRING_dupASN1_OCTET_STRING_freeA_ASN1_OCTET_STRING_free libeay32.dllASN1_OCTET_STRING_freeASN1_OCTET_STRING_it=_ASN1_OCTET_STRING_it libeay32.dllASN1_OCTET_STRING_itASN1_OCTET_STRING_new?_ASN1_OCTET_STRING_new libeay32.dllASN1_OCTET_STRING_newASN1_OCTET_STRING_set?_ASN1_OCTET_STRING_set libeay32.dllASN1_OCTET_STRING_setASN1_PCTX_free1_ASN1_PCTX_free libeay32.dllASN1_PCTX_freeASN1_PCTX_get_cert_flagsE_ASN1_PCTX_get_cert_flags libeay32.dllASN1_PCTX_get_cert_flagsASN1_PCTX_get_flags;_ASN1_PCTX_get_flags libeay32.dllASN1_PCTX_get_flagsASN1_PCTX_get_nm_flagsA_ASN1_PCTX_get_nm_flags libeay32.dllASN1_PCTX_get_nm_flagsASN1_PCTX_get_oid_flagsC_ASN1_PCTX_get_oid_flags libeay32.dllASN1_PCTX_get_oid_flagsASN1_PCTX_get_str_flagsC_ASN1_PCTX_get_str_flags libeay32.dllASN1_PCTX_get_str_flags ASN1_PCTX_new/_ASN1_PCTX_new libeay32.dll ASN1_PCTX_newASN1_PCTX_set_cert_flagsE_ASN1_PCTX_set_cert_flags libeay32.dllASN1_PCTX_set_cert_flagsASN1_PCTX_set_flags;_ASN1_PCTX_set_flags libeay32.dllASN1_PCTX_set_flagsASN1_PCTX_set_nm_flagsA_ASN1_PCTX_set_nm_flags libeay32.dllASN1_PCTX_set_nm_flagsASN1_PCTX_set_oid_flagsC_ASN1_PCTX_set_oid_flags libeay32.dllASN1_PCTX_set_oid_flagsASN1_PCTX_set_str_flagsC_ASN1_PCTX_set_str_flags libeay32.dllASN1_PCTX_set_str_flagsASN1_PRINTABLESTRING_freeG_ASN1_PRINTABLESTRING_free libeay32.dllASN1_PRINTABLESTRING_freeASN1_PRINTABLESTRING_itC_ASN1_PRINTABLESTRING_it libeay32.dllASN1_PRINTABLESTRING_itASN1_PRINTABLESTRING_newE_ASN1_PRINTABLESTRING_new libeay32.dllASN1_PRINTABLESTRING_newASN1_PRINTABLE_free;_ASN1_PRINTABLE_free libeay32.dllASN1_PRINTABLE_freeASN1_PRINTABLE_it7_ASN1_PRINTABLE_it libeay32.dllASN1_PRINTABLE_itASN1_PRINTABLE_new9_ASN1_PRINTABLE_new libeay32.dllASN1_PRINTABLE_newASN1_PRINTABLE_type;_ASN1_PRINTABLE_type libeay32.dllASN1_PRINTABLE_typeASN1_SEQUENCE_ANY_it=_ASN1_SEQUENCE_ANY_it libeay32.dllASN1_SEQUENCE_ANY_itASN1_SEQUENCE_it5_ASN1_SEQUENCE_it libeay32.dllASN1_SEQUENCE_itASN1_SET_ANY_it3_ASN1_SET_ANY_it libeay32.dllASN1_SET_ANY_itASN1_STRING_TABLE_add?_ASN1_STRING_TABLE_add libeay32.dllASN1_STRING_TABLE_addASN1_STRING_TABLE_cleanupG_ASN1_STRING_TABLE_cleanup libeay32.dllASN1_STRING_TABLE_cleanupASN1_STRING_TABLE_get?_ASN1_STRING_TABLE_get libeay32.dllASN1_STRING_TABLE_getASN1_STRING_clear_freeA_ASN1_STRING_clear_free libeay32.dllASN1_STRING_clear_freeASN1_STRING_cmp3_ASN1_STRING_cmp libeay32.dllASN1_STRING_cmpASN1_STRING_copy5_ASN1_STRING_copy libeay32.dllASN1_STRING_copyASN1_STRING_data5_ASN1_STRING_data libeay32.dllASN1_STRING_dataASN1_STRING_dup3_ASN1_STRING_dup libeay32.dllASN1_STRING_dupASN1_STRING_free5_ASN1_STRING_free libeay32.dllASN1_STRING_freeASN1_STRING_get_default_maskM_ASN1_STRING_get_default_mask libeay32.dllASN1_STRING_get_default_maskASN1_STRING_length9_ASN1_STRING_length libeay32.dllASN1_STRING_lengthASN1_STRING_length_setA_ASN1_STRING_length_set libeay32.dllASN1_STRING_length_setASN1_STRING_new3_ASN1_STRING_new libeay32.dllASN1_STRING_newASN1_STRING_print7_ASN1_STRING_print libeay32.dllASN1_STRING_printASN1_STRING_print_ex=_ASN1_STRING_print_ex libeay32.dllASN1_STRING_print_exASN1_STRING_print_ex_fpC_ASN1_STRING_print_ex_fp libeay32.dllASN1_STRING_print_ex_fpASN1_STRING_set3_ASN1_STRING_set libeay32.dllASN1_STRING_setASN1_STRING_set05_ASN1_STRING_set0 libeay32.dllASN1_STRING_set0ASN1_STRING_set_by_NIDA_ASN1_STRING_set_by_NID libeay32.dllASN1_STRING_set_by_NIDASN1_STRING_set_default_maskM_ASN1_STRING_set_default_mask libeay32.dllASN1_STRING_set_default_mask" ASN1_STRING_set_default_mask_ascU!_ASN1_STRING_set_default_mask_asc libeay32.dll ASN1_STRING_set_default_mask_ascASN1_STRING_to_UTF8;_ASN1_STRING_to_UTF8 libeay32.dllASN1_STRING_to_UTF8ASN1_STRING_type5_ASN1_STRING_type libeay32.dllASN1_STRING_typeASN1_STRING_type_new=_ASN1_STRING_type_new libeay32.dllASN1_STRING_type_newASN1_T61STRING_free;_ASN1_T61STRING_free libeay32.dllASN1_T61STRING_freeASN1_T61STRING_it7_ASN1_T61STRING_it libeay32.dllASN1_T61STRING_itASN1_T61STRING_new9_ASN1_T61STRING_new libeay32.dllASN1_T61STRING_newASN1_TBOOLEAN_it5_ASN1_TBOOLEAN_it libeay32.dllASN1_TBOOLEAN_it ASN1_TIME_adj/_ASN1_TIME_adj libeay32.dll ASN1_TIME_adjASN1_TIME_check3_ASN1_TIME_check libeay32.dllASN1_TIME_checkASN1_TIME_diff1_ASN1_TIME_diff libeay32.dllASN1_TIME_diffASN1_TIME_free1_ASN1_TIME_free libeay32.dllASN1_TIME_free ASN1_TIME_it- _ASN1_TIME_it libeay32.dll ASN1_TIME_it ASN1_TIME_new/_ASN1_TIME_new libeay32.dll ASN1_TIME_newASN1_TIME_print3_ASN1_TIME_print libeay32.dllASN1_TIME_print ASN1_TIME_set/_ASN1_TIME_set libeay32.dll ASN1_TIME_setASN1_TIME_set_string=_ASN1_TIME_set_string libeay32.dllASN1_TIME_set_stringASN1_TIME_to_generalizedtimeM_ASN1_TIME_to_generalizedtime libeay32.dllASN1_TIME_to_generalizedtime ASN1_TYPE_cmp/_ASN1_TYPE_cmp libeay32.dll ASN1_TYPE_cmpASN1_TYPE_free1_ASN1_TYPE_free libeay32.dllASN1_TYPE_free ASN1_TYPE_get/_ASN1_TYPE_get libeay32.dll ASN1_TYPE_getASN1_TYPE_get_int_octetstringO_ASN1_TYPE_get_int_octetstring libeay32.dllASN1_TYPE_get_int_octetstringASN1_TYPE_get_octetstringG_ASN1_TYPE_get_octetstring libeay32.dllASN1_TYPE_get_octetstring ASN1_TYPE_new/_ASN1_TYPE_new libeay32.dll ASN1_TYPE_new ASN1_TYPE_set/_ASN1_TYPE_set libeay32.dll ASN1_TYPE_setASN1_TYPE_set11_ASN1_TYPE_set1 libeay32.dllASN1_TYPE_set1ASN1_TYPE_set_int_octetstringO_ASN1_TYPE_set_int_octetstring libeay32.dllASN1_TYPE_set_int_octetstringASN1_TYPE_set_octetstringG_ASN1_TYPE_set_octetstring libeay32.dllASN1_TYPE_set_octetstringASN1_UNIVERSALSTRING_freeG_ASN1_UNIVERSALSTRING_free libeay32.dllASN1_UNIVERSALSTRING_freeASN1_UNIVERSALSTRING_itC_ASN1_UNIVERSALSTRING_it libeay32.dllASN1_UNIVERSALSTRING_itASN1_UNIVERSALSTRING_newE_ASN1_UNIVERSALSTRING_new libeay32.dllASN1_UNIVERSALSTRING_new ASN1_UNIVERSALSTRING_to_stringQ_ASN1_UNIVERSALSTRING_to_string libeay32.dllASN1_UNIVERSALSTRING_to_stringASN1_UTCTIME_adj5_ASN1_UTCTIME_adj libeay32.dllASN1_UTCTIME_adjASN1_UTCTIME_check9_ASN1_UTCTIME_check libeay32.dllASN1_UTCTIME_checkASN1_UTCTIME_cmp_time_tC_ASN1_UTCTIME_cmp_time_t libeay32.dllASN1_UTCTIME_cmp_time_tASN1_UTCTIME_free7_ASN1_UTCTIME_free libeay32.dllASN1_UTCTIME_freeASN1_UTCTIME_it3_ASN1_UTCTIME_it libeay32.dllASN1_UTCTIME_itASN1_UTCTIME_new5_ASN1_UTCTIME_new libeay32.dllASN1_UTCTIME_newASN1_UTCTIME_print9_ASN1_UTCTIME_print libeay32.dllASN1_UTCTIME_printASN1_UTCTIME_set5_ASN1_UTCTIME_set libeay32.dllASN1_UTCTIME_setASN1_UTCTIME_set_stringC_ASN1_UTCTIME_set_string libeay32.dllASN1_UTCTIME_set_stringASN1_UTF8STRING_free=_ASN1_UTF8STRING_free libeay32.dllASN1_UTF8STRING_freeASN1_UTF8STRING_it9_ASN1_UTF8STRING_it libeay32.dllASN1_UTF8STRING_itASN1_UTF8STRING_new;_ASN1_UTF8STRING_new libeay32.dllASN1_UTF8STRING_newASN1_VISIBLESTRING_freeC_ASN1_VISIBLESTRING_free libeay32.dllASN1_VISIBLESTRING_freeASN1_VISIBLESTRING_it?_ASN1_VISIBLESTRING_it libeay32.dllASN1_VISIBLESTRING_itASN1_VISIBLESTRING_newA_ASN1_VISIBLESTRING_new libeay32.dllASN1_VISIBLESTRING_newASN1_add_oid_module;_ASN1_add_oid_module libeay32.dllASN1_add_oid_module ASN1_bn_print/_ASN1_bn_print libeay32.dll ASN1_bn_printASN1_check_infinite_endC_ASN1_check_infinite_end libeay32.dllASN1_check_infinite_endASN1_const_check_infinite_endO_ASN1_const_check_infinite_end libeay32.dllASN1_const_check_infinite_end ASN1_d2i_bio- _ASN1_d2i_bio libeay32.dll ASN1_d2i_bio ASN1_d2i_fp+ _ASN1_d2i_fp libeay32.dll ASN1_d2i_fp ASN1_digest+ _ASN1_digest libeay32.dll ASN1_digest ASN1_dup% _ASN1_dup libeay32.dllASN1_dupASN1_generate_nconf;_ASN1_generate_nconf libeay32.dllASN1_generate_nconfASN1_generate_v35_ASN1_generate_v3 libeay32.dllASN1_generate_v3ASN1_get_object3_ASN1_get_object libeay32.dllASN1_get_object ASN1_i2d_bio- _ASN1_i2d_bio libeay32.dll ASN1_i2d_bio ASN1_i2d_fp+ _ASN1_i2d_fp libeay32.dll ASN1_i2d_fp ASN1_item_d2i/_ASN1_item_d2i libeay32.dll ASN1_item_d2iASN1_item_d2i_bio7_ASN1_item_d2i_bio libeay32.dllASN1_item_d2i_bioASN1_item_d2i_fp5_ASN1_item_d2i_fp libeay32.dllASN1_item_d2i_fpASN1_item_digest5_ASN1_item_digest libeay32.dllASN1_item_digest ASN1_item_dup/_ASN1_item_dup libeay32.dll ASN1_item_dupASN1_item_ex_d2i5_ASN1_item_ex_d2i libeay32.dllASN1_item_ex_d2iASN1_item_ex_free7_ASN1_item_ex_free libeay32.dllASN1_item_ex_freeASN1_item_ex_i2d5_ASN1_item_ex_i2d libeay32.dllASN1_item_ex_i2dASN1_item_ex_new5_ASN1_item_ex_new libeay32.dllASN1_item_ex_newASN1_item_free1_ASN1_item_free libeay32.dllASN1_item_free ASN1_item_i2d/_ASN1_item_i2d libeay32.dll ASN1_item_i2dASN1_item_i2d_bio7_ASN1_item_i2d_bio libeay32.dllASN1_item_i2d_bioASN1_item_i2d_fp5_ASN1_item_i2d_fp libeay32.dllASN1_item_i2d_fpASN1_item_ndef_i2d9_ASN1_item_ndef_i2d libeay32.dllASN1_item_ndef_i2d ASN1_item_new/_ASN1_item_new libeay32.dll ASN1_item_newASN1_item_pack1_ASN1_item_pack libeay32.dllASN1_item_packASN1_item_print3_ASN1_item_print libeay32.dllASN1_item_printASN1_item_sign1_ASN1_item_sign libeay32.dllASN1_item_signASN1_item_sign_ctx9_ASN1_item_sign_ctx libeay32.dllASN1_item_sign_ctxASN1_item_unpack5_ASN1_item_unpack libeay32.dllASN1_item_unpackASN1_item_verify5_ASN1_item_verify libeay32.dllASN1_item_verifyASN1_mbstring_copy9_ASN1_mbstring_copy libeay32.dllASN1_mbstring_copyASN1_mbstring_ncopy;_ASN1_mbstring_ncopy libeay32.dllASN1_mbstring_ncopyASN1_object_size5_ASN1_object_size libeay32.dllASN1_object_sizeASN1_pack_string5_ASN1_pack_string libeay32.dllASN1_pack_string ASN1_parse) _ASN1_parse libeay32.dll ASN1_parseASN1_parse_dump3_ASN1_parse_dump libeay32.dllASN1_parse_dumpASN1_primitive_free;_ASN1_primitive_free libeay32.dllASN1_primitive_freeASN1_primitive_new9_ASN1_primitive_new libeay32.dllASN1_primitive_new ASN1_put_eoc- _ASN1_put_eoc libeay32.dll ASN1_put_eocASN1_put_object3_ASN1_put_object libeay32.dllASN1_put_object ASN1_seq_pack/_ASN1_seq_pack libeay32.dll ASN1_seq_packASN1_seq_unpack3_ASN1_seq_unpack libeay32.dllASN1_seq_unpack ASN1_sign' _ASN1_sign libeay32.dll ASN1_sign ASN1_tag2bit- _ASN1_tag2bit libeay32.dll ASN1_tag2bit ASN1_tag2str- _ASN1_tag2str libeay32.dll ASN1_tag2strASN1_template_d2i7_ASN1_template_d2i libeay32.dllASN1_template_d2iASN1_template_free9_ASN1_template_free libeay32.dllASN1_template_freeASN1_template_i2d7_ASN1_template_i2d libeay32.dllASN1_template_i2dASN1_template_new7_ASN1_template_new libeay32.dllASN1_template_newASN1_unpack_string9_ASN1_unpack_string libeay32.dllASN1_unpack_string ASN1_verify+ _ASN1_verify libeay32.dll ASN1_verifyAUTHORITY_INFO_ACCESS_freeI_AUTHORITY_INFO_ACCESS_free libeay32.dllAUTHORITY_INFO_ACCESS_freeAUTHORITY_INFO_ACCESS_itE_AUTHORITY_INFO_ACCESS_it libeay32.dllAUTHORITY_INFO_ACCESS_itAUTHORITY_INFO_ACCESS_newG_AUTHORITY_INFO_ACCESS_new libeay32.dllAUTHORITY_INFO_ACCESS_newAUTHORITY_KEYID_free=_AUTHORITY_KEYID_free libeay32.dllAUTHORITY_KEYID_freeAUTHORITY_KEYID_it9_AUTHORITY_KEYID_it libeay32.dllAUTHORITY_KEYID_itAUTHORITY_KEYID_new;_AUTHORITY_KEYID_new libeay32.dllAUTHORITY_KEYID_newBASIC_CONSTRAINTS_freeA_BASIC_CONSTRAINTS_free libeay32.dllBASIC_CONSTRAINTS_freeBASIC_CONSTRAINTS_it=_BASIC_CONSTRAINTS_it libeay32.dllBASIC_CONSTRAINTS_itBASIC_CONSTRAINTS_new?_BASIC_CONSTRAINTS_new libeay32.dllBASIC_CONSTRAINTS_newBF_cbc_encrypt1_BF_cbc_encrypt libeay32.dllBF_cbc_encryptBF_cfb64_encrypt5_BF_cfb64_encrypt libeay32.dllBF_cfb64_encrypt BF_decrypt) _BF_decrypt libeay32.dll BF_decryptBF_ecb_encrypt1_BF_ecb_encrypt libeay32.dllBF_ecb_encrypt BF_encrypt) _BF_encrypt libeay32.dll BF_encryptBF_ofb64_encrypt5_BF_ofb64_encrypt libeay32.dllBF_ofb64_encrypt BF_options) _BF_options libeay32.dll BF_options BF_set_key) _BF_set_key libeay32.dll BF_set_key BIGNUM_it' _BIGNUM_it libeay32.dll BIGNUM_it BIO_accept) _BIO_accept libeay32.dll BIO_acceptBIO_asn1_get_prefix;_BIO_asn1_get_prefix libeay32.dllBIO_asn1_get_prefixBIO_asn1_get_suffix;_BIO_asn1_get_suffix libeay32.dllBIO_asn1_get_suffixBIO_asn1_set_prefix;_BIO_asn1_set_prefix libeay32.dllBIO_asn1_set_prefixBIO_asn1_set_suffix;_BIO_asn1_set_suffix libeay32.dllBIO_asn1_set_suffixBIO_callback_ctrl7_BIO_callback_ctrl libeay32.dllBIO_callback_ctrlBIO_clear_flags3_BIO_clear_flags libeay32.dllBIO_clear_flagsBIO_copy_next_retry;_BIO_copy_next_retry libeay32.dllBIO_copy_next_retry BIO_ctrl% _BIO_ctrl libeay32.dllBIO_ctrlBIO_ctrl_get_read_requestG_BIO_ctrl_get_read_request libeay32.dllBIO_ctrl_get_read_requestBIO_ctrl_get_write_guaranteeM_BIO_ctrl_get_write_guarantee libeay32.dllBIO_ctrl_get_write_guaranteeBIO_ctrl_pending5_BIO_ctrl_pending libeay32.dllBIO_ctrl_pendingBIO_ctrl_reset_read_requestK_BIO_ctrl_reset_read_request libeay32.dllBIO_ctrl_reset_read_requestBIO_ctrl_wpending7_BIO_ctrl_wpending libeay32.dllBIO_ctrl_wpendingBIO_debug_callback9_BIO_debug_callback libeay32.dllBIO_debug_callbackBIO_dgram_non_fatal_errorG_BIO_dgram_non_fatal_error libeay32.dllBIO_dgram_non_fatal_error BIO_dump% _BIO_dump libeay32.dllBIO_dump BIO_dump_cb+ _BIO_dump_cb libeay32.dll BIO_dump_cb BIO_dump_fp+ _BIO_dump_fp libeay32.dll BIO_dump_fpBIO_dump_indent3_BIO_dump_indent libeay32.dllBIO_dump_indentBIO_dump_indent_cb9_BIO_dump_indent_cb libeay32.dllBIO_dump_indent_cbBIO_dump_indent_fp9_BIO_dump_indent_fp libeay32.dllBIO_dump_indent_fp BIO_dup_chain/_BIO_dup_chain libeay32.dll BIO_dup_chain BIO_f_asn1) _BIO_f_asn1 libeay32.dll BIO_f_asn1 BIO_f_base64- _BIO_f_base64 libeay32.dll BIO_f_base64 BIO_f_buffer- _BIO_f_buffer libeay32.dll BIO_f_buffer BIO_f_cipher- _BIO_f_cipher libeay32.dll BIO_f_cipher BIO_f_md% _BIO_f_md libeay32.dllBIO_f_mdBIO_f_nbio_test3_BIO_f_nbio_test libeay32.dllBIO_f_nbio_test BIO_f_null) _BIO_f_null libeay32.dll BIO_f_nullBIO_f_reliable1_BIO_f_reliable libeay32.dllBIO_f_reliableBIO_fd_non_fatal_errorA_BIO_fd_non_fatal_error libeay32.dllBIO_fd_non_fatal_errorBIO_fd_should_retry;_BIO_fd_should_retry libeay32.dllBIO_fd_should_retry BIO_find_type/_BIO_find_type libeay32.dll BIO_find_type BIO_free% _BIO_free libeay32.dllBIO_free BIO_free_all- _BIO_free_all libeay32.dll BIO_free_allBIO_get_accept_socket?_BIO_get_accept_socket libeay32.dllBIO_get_accept_socketBIO_get_callback5_BIO_get_callback libeay32.dllBIO_get_callbackBIO_get_callback_arg=_BIO_get_callback_arg libeay32.dllBIO_get_callback_argBIO_get_ex_data3_BIO_get_ex_data libeay32.dllBIO_get_ex_dataBIO_get_ex_new_index=_BIO_get_ex_new_index libeay32.dllBIO_get_ex_new_indexBIO_get_host_ip3_BIO_get_host_ip libeay32.dllBIO_get_host_ip BIO_get_port- _BIO_get_port libeay32.dll BIO_get_portBIO_get_retry_BIO7_BIO_get_retry_BIO libeay32.dllBIO_get_retry_BIOBIO_get_retry_reason=_BIO_get_retry_reason libeay32.dllBIO_get_retry_reasonBIO_gethostbyname7_BIO_gethostbyname libeay32.dllBIO_gethostbyname BIO_gets% _BIO_gets libeay32.dllBIO_getsBIO_hex_string1_BIO_hex_string libeay32.dllBIO_hex_string BIO_indent) _BIO_indent libeay32.dll BIO_indent BIO_int_ctrl- _BIO_int_ctrl libeay32.dll BIO_int_ctrlBIO_method_name3_BIO_method_name libeay32.dllBIO_method_nameBIO_method_type3_BIO_method_type libeay32.dllBIO_method_type BIO_new#_BIO_new libeay32.dllBIO_new BIO_new_CMS+ _BIO_new_CMS libeay32.dll BIO_new_CMS BIO_new_NDEF- _BIO_new_NDEF libeay32.dll BIO_new_NDEF BIO_new_PKCS7/_BIO_new_PKCS7 libeay32.dll BIO_new_PKCS7BIO_new_accept1_BIO_new_accept libeay32.dllBIO_new_acceptBIO_new_bio_pair5_BIO_new_bio_pair libeay32.dllBIO_new_bio_pairBIO_new_connect3_BIO_new_connect libeay32.dllBIO_new_connect BIO_new_dgram/_BIO_new_dgram libeay32.dll BIO_new_dgram BIO_new_fd) _BIO_new_fd libeay32.dll BIO_new_fd BIO_new_file- _BIO_new_file libeay32.dll BIO_new_file BIO_new_fp) _BIO_new_fp libeay32.dll BIO_new_fpBIO_new_mem_buf3_BIO_new_mem_buf libeay32.dllBIO_new_mem_bufBIO_new_socket1_BIO_new_socket libeay32.dllBIO_new_socket BIO_next% _BIO_next libeay32.dllBIO_next BIO_nread' _BIO_nread libeay32.dll BIO_nread BIO_nread0) _BIO_nread0 libeay32.dll BIO_nread0BIO_number_read3_BIO_number_read libeay32.dllBIO_number_readBIO_number_written9_BIO_number_written libeay32.dllBIO_number_written BIO_nwrite) _BIO_nwrite libeay32.dll BIO_nwrite BIO_nwrite0+ _BIO_nwrite0 libeay32.dll BIO_nwrite0 BIO_pop#_BIO_pop libeay32.dllBIO_pop BIO_printf) _BIO_printf libeay32.dll BIO_printf BIO_ptr_ctrl- _BIO_ptr_ctrl libeay32.dll BIO_ptr_ctrl BIO_push% _BIO_push libeay32.dllBIO_push BIO_puts% _BIO_puts libeay32.dllBIO_puts BIO_read% _BIO_read libeay32.dllBIO_read BIO_s_accept- _BIO_s_accept libeay32.dll BIO_s_accept BIO_s_bio' _BIO_s_bio libeay32.dll BIO_s_bio BIO_s_connect/_BIO_s_connect libeay32.dll BIO_s_connectBIO_s_datagram1_BIO_s_datagram libeay32.dllBIO_s_datagram BIO_s_fd% _BIO_s_fd libeay32.dllBIO_s_fd BIO_s_file) _BIO_s_file libeay32.dll BIO_s_file BIO_s_mem' _BIO_s_mem libeay32.dll BIO_s_mem BIO_s_null) _BIO_s_null libeay32.dll BIO_s_null BIO_s_socket- _BIO_s_socket libeay32.dll BIO_s_socket BIO_set#_BIO_set libeay32.dllBIO_setBIO_set_callback5_BIO_set_callback libeay32.dllBIO_set_callbackBIO_set_callback_arg=_BIO_set_callback_arg libeay32.dllBIO_set_callback_argBIO_set_cipher1_BIO_set_cipher libeay32.dllBIO_set_cipherBIO_set_ex_data3_BIO_set_ex_data libeay32.dllBIO_set_ex_data BIO_set_flags/_BIO_set_flags libeay32.dll BIO_set_flagsBIO_set_tcp_ndelay9_BIO_set_tcp_ndelay libeay32.dllBIO_set_tcp_ndelay BIO_snprintf- _BIO_snprintf libeay32.dll BIO_snprintfBIO_sock_cleanup5_BIO_sock_cleanup libeay32.dllBIO_sock_cleanupBIO_sock_error1_BIO_sock_error libeay32.dllBIO_sock_error BIO_sock_init/_BIO_sock_init libeay32.dll BIO_sock_initBIO_sock_non_fatal_errorE_BIO_sock_non_fatal_error libeay32.dllBIO_sock_non_fatal_errorBIO_sock_should_retry?_BIO_sock_should_retry libeay32.dllBIO_sock_should_retryBIO_socket_ioctl5_BIO_socket_ioctl libeay32.dllBIO_socket_ioctlBIO_socket_nbio3_BIO_socket_nbio libeay32.dllBIO_socket_nbioBIO_test_flags1_BIO_test_flags libeay32.dllBIO_test_flags BIO_vfree' _BIO_vfree libeay32.dll BIO_vfree BIO_vprintf+ _BIO_vprintf libeay32.dll BIO_vprintf BIO_vsnprintf/_BIO_vsnprintf libeay32.dll BIO_vsnprintf BIO_write' _BIO_write libeay32.dll BIO_writeBN_BLINDING_convert;_BN_BLINDING_convert libeay32.dllBN_BLINDING_convertBN_BLINDING_convert_exA_BN_BLINDING_convert_ex libeay32.dllBN_BLINDING_convert_exBN_BLINDING_create_paramE_BN_BLINDING_create_param libeay32.dllBN_BLINDING_create_paramBN_BLINDING_free5_BN_BLINDING_free libeay32.dllBN_BLINDING_freeBN_BLINDING_get_flags?_BN_BLINDING_get_flags libeay32.dllBN_BLINDING_get_flagsBN_BLINDING_get_thread_idG_BN_BLINDING_get_thread_id libeay32.dllBN_BLINDING_get_thread_idBN_BLINDING_invert9_BN_BLINDING_invert libeay32.dllBN_BLINDING_invertBN_BLINDING_invert_ex?_BN_BLINDING_invert_ex libeay32.dllBN_BLINDING_invert_exBN_BLINDING_new3_BN_BLINDING_new libeay32.dllBN_BLINDING_newBN_BLINDING_set_flags?_BN_BLINDING_set_flags libeay32.dllBN_BLINDING_set_flagsBN_BLINDING_set_thread_idG_BN_BLINDING_set_thread_id libeay32.dllBN_BLINDING_set_thread_idBN_BLINDING_thread_id?_BN_BLINDING_thread_id libeay32.dllBN_BLINDING_thread_idBN_BLINDING_update9_BN_BLINDING_update libeay32.dllBN_BLINDING_update BN_CTX_end) _BN_CTX_end libeay32.dll BN_CTX_end BN_CTX_free+ _BN_CTX_free libeay32.dll BN_CTX_free BN_CTX_get) _BN_CTX_get libeay32.dll BN_CTX_get BN_CTX_init+ _BN_CTX_init libeay32.dll BN_CTX_init BN_CTX_new) _BN_CTX_new libeay32.dll BN_CTX_new BN_CTX_start- _BN_CTX_start libeay32.dll BN_CTX_start BN_GENCB_call/_BN_GENCB_call libeay32.dll BN_GENCB_call BN_GF2m_add+ _BN_GF2m_add libeay32.dll BN_GF2m_addBN_GF2m_arr2poly5_BN_GF2m_arr2poly libeay32.dllBN_GF2m_arr2poly BN_GF2m_mod+ _BN_GF2m_mod libeay32.dll BN_GF2m_modBN_GF2m_mod_arr3_BN_GF2m_mod_arr libeay32.dllBN_GF2m_mod_arrBN_GF2m_mod_div3_BN_GF2m_mod_div libeay32.dllBN_GF2m_mod_divBN_GF2m_mod_div_arr;_BN_GF2m_mod_div_arr libeay32.dllBN_GF2m_mod_div_arrBN_GF2m_mod_exp3_BN_GF2m_mod_exp libeay32.dllBN_GF2m_mod_expBN_GF2m_mod_exp_arr;_BN_GF2m_mod_exp_arr libeay32.dllBN_GF2m_mod_exp_arrBN_GF2m_mod_inv3_BN_GF2m_mod_inv libeay32.dllBN_GF2m_mod_invBN_GF2m_mod_inv_arr;_BN_GF2m_mod_inv_arr libeay32.dllBN_GF2m_mod_inv_arrBN_GF2m_mod_mul3_BN_GF2m_mod_mul libeay32.dllBN_GF2m_mod_mulBN_GF2m_mod_mul_arr;_BN_GF2m_mod_mul_arr libeay32.dllBN_GF2m_mod_mul_arrBN_GF2m_mod_solve_quadA_BN_GF2m_mod_solve_quad libeay32.dllBN_GF2m_mod_solve_quadBN_GF2m_mod_solve_quad_arrI_BN_GF2m_mod_solve_quad_arr libeay32.dllBN_GF2m_mod_solve_quad_arrBN_GF2m_mod_sqr3_BN_GF2m_mod_sqr libeay32.dllBN_GF2m_mod_sqrBN_GF2m_mod_sqr_arr;_BN_GF2m_mod_sqr_arr libeay32.dllBN_GF2m_mod_sqr_arrBN_GF2m_mod_sqrt5_BN_GF2m_mod_sqrt libeay32.dllBN_GF2m_mod_sqrtBN_GF2m_mod_sqrt_arr=_BN_GF2m_mod_sqrt_arr libeay32.dllBN_GF2m_mod_sqrt_arrBN_GF2m_poly2arr5_BN_GF2m_poly2arr libeay32.dllBN_GF2m_poly2arrBN_MONT_CTX_copy5_BN_MONT_CTX_copy libeay32.dllBN_MONT_CTX_copyBN_MONT_CTX_free5_BN_MONT_CTX_free libeay32.dllBN_MONT_CTX_freeBN_MONT_CTX_init5_BN_MONT_CTX_init libeay32.dllBN_MONT_CTX_initBN_MONT_CTX_new3_BN_MONT_CTX_new libeay32.dllBN_MONT_CTX_newBN_MONT_CTX_set3_BN_MONT_CTX_set libeay32.dllBN_MONT_CTX_setBN_MONT_CTX_set_lockedA_BN_MONT_CTX_set_locked libeay32.dllBN_MONT_CTX_set_lockedBN_RECP_CTX_free5_BN_RECP_CTX_free libeay32.dllBN_RECP_CTX_freeBN_RECP_CTX_init5_BN_RECP_CTX_init libeay32.dllBN_RECP_CTX_initBN_RECP_CTX_new3_BN_RECP_CTX_new libeay32.dllBN_RECP_CTX_newBN_RECP_CTX_set3_BN_RECP_CTX_set libeay32.dllBN_RECP_CTX_setBN_X931_derive_prime_exC_BN_X931_derive_prime_ex libeay32.dllBN_X931_derive_prime_exBN_X931_generate_Xpq=_BN_X931_generate_Xpq libeay32.dllBN_X931_generate_XpqBN_X931_generate_prime_exG_BN_X931_generate_prime_ex libeay32.dllBN_X931_generate_prime_exBN_add!_BN_add libeay32.dllBN_add BN_add_word+ _BN_add_word libeay32.dll BN_add_word BN_asc2bn' _BN_asc2bn libeay32.dll BN_asc2bn BN_bin2bn' _BN_bin2bn libeay32.dll BN_bin2bn BN_bn2bin' _BN_bn2bin libeay32.dll BN_bn2bin BN_bn2dec' _BN_bn2dec libeay32.dll BN_bn2dec BN_bn2hex' _BN_bn2hex libeay32.dll BN_bn2hex BN_bn2mpi' _BN_bn2mpi libeay32.dll BN_bn2mpiBN_bntest_rand1_BN_bntest_rand libeay32.dllBN_bntest_rand BN_clear% _BN_clear libeay32.dllBN_clear BN_clear_bit- _BN_clear_bit libeay32.dll BN_clear_bit BN_clear_free/_BN_clear_free libeay32.dll BN_clear_freeBN_cmp!_BN_cmp libeay32.dllBN_cmpBN_consttime_swap7_BN_consttime_swap libeay32.dllBN_consttime_swap BN_copy#_BN_copy libeay32.dllBN_copy BN_dec2bn' _BN_dec2bn libeay32.dll BN_dec2bnBN_div!_BN_div libeay32.dllBN_div BN_div_recp+ _BN_div_recp libeay32.dll BN_div_recp BN_div_word+ _BN_div_word libeay32.dll BN_div_wordBN_dup!_BN_dup libeay32.dllBN_dupBN_exp!_BN_exp libeay32.dllBN_exp BN_free#_BN_free libeay32.dllBN_freeBN_from_montgomery9_BN_from_montgomery libeay32.dllBN_from_montgomeryBN_gcd!_BN_gcd libeay32.dllBN_gcdBN_generate_prime7_BN_generate_prime libeay32.dllBN_generate_primeBN_generate_prime_ex=_BN_generate_prime_ex libeay32.dllBN_generate_prime_exBN_get0_nist_prime_192A_BN_get0_nist_prime_192 libeay32.dllBN_get0_nist_prime_192BN_get0_nist_prime_224A_BN_get0_nist_prime_224 libeay32.dllBN_get0_nist_prime_224BN_get0_nist_prime_256A_BN_get0_nist_prime_256 libeay32.dllBN_get0_nist_prime_256BN_get0_nist_prime_384A_BN_get0_nist_prime_384 libeay32.dllBN_get0_nist_prime_384BN_get0_nist_prime_521A_BN_get0_nist_prime_521 libeay32.dllBN_get0_nist_prime_521 BN_get_params/_BN_get_params libeay32.dll BN_get_params BN_get_word+ _BN_get_word libeay32.dll BN_get_word BN_hex2bn' _BN_hex2bn libeay32.dll BN_hex2bn BN_init#_BN_init libeay32.dllBN_init BN_is_bit_set/_BN_is_bit_set libeay32.dll BN_is_bit_set BN_is_prime+ _BN_is_prime libeay32.dll BN_is_primeBN_is_prime_ex1_BN_is_prime_ex libeay32.dllBN_is_prime_exBN_is_prime_fasttest=_BN_is_prime_fasttest libeay32.dllBN_is_prime_fasttestBN_is_prime_fasttest_exC_BN_is_prime_fasttest_ex libeay32.dllBN_is_prime_fasttest_ex BN_kronecker- _BN_kronecker libeay32.dll BN_kronecker BN_lshift' _BN_lshift libeay32.dll BN_lshift BN_lshift1) _BN_lshift1 libeay32.dll BN_lshift1 BN_mask_bits- _BN_mask_bits libeay32.dll BN_mask_bits BN_mod_add) _BN_mod_add libeay32.dll BN_mod_addBN_mod_add_quick5_BN_mod_add_quick libeay32.dllBN_mod_add_quick BN_mod_exp) _BN_mod_exp libeay32.dll BN_mod_expBN_mod_exp2_mont5_BN_mod_exp2_mont libeay32.dllBN_mod_exp2_montBN_mod_exp_mont3_BN_mod_exp_mont libeay32.dllBN_mod_exp_montBN_mod_exp_mont_consttimeG_BN_mod_exp_mont_consttime libeay32.dllBN_mod_exp_mont_consttimeBN_mod_exp_mont_word=_BN_mod_exp_mont_word libeay32.dllBN_mod_exp_mont_wordBN_mod_exp_recp3_BN_mod_exp_recp libeay32.dllBN_mod_exp_recpBN_mod_exp_simple7_BN_mod_exp_simple libeay32.dllBN_mod_exp_simpleBN_mod_inverse1_BN_mod_inverse libeay32.dllBN_mod_inverse BN_mod_lshift/_BN_mod_lshift libeay32.dll BN_mod_lshiftBN_mod_lshift11_BN_mod_lshift1 libeay32.dllBN_mod_lshift1BN_mod_lshift1_quick=_BN_mod_lshift1_quick libeay32.dllBN_mod_lshift1_quickBN_mod_lshift_quick;_BN_mod_lshift_quick libeay32.dllBN_mod_lshift_quick BN_mod_mul) _BN_mod_mul libeay32.dll BN_mod_mulBN_mod_mul_montgomery?_BN_mod_mul_montgomery libeay32.dllBN_mod_mul_montgomeryBN_mod_mul_reciprocal?_BN_mod_mul_reciprocal libeay32.dllBN_mod_mul_reciprocal BN_mod_sqr) _BN_mod_sqr libeay32.dll BN_mod_sqr BN_mod_sqrt+ _BN_mod_sqrt libeay32.dll BN_mod_sqrt BN_mod_sub) _BN_mod_sub libeay32.dll BN_mod_subBN_mod_sub_quick5_BN_mod_sub_quick libeay32.dllBN_mod_sub_quick BN_mod_word+ _BN_mod_word libeay32.dll BN_mod_word BN_mpi2bn' _BN_mpi2bn libeay32.dll BN_mpi2bnBN_mul!_BN_mul libeay32.dllBN_mul BN_mul_word+ _BN_mul_word libeay32.dll BN_mul_wordBN_new!_BN_new libeay32.dllBN_newBN_nist_mod_1923_BN_nist_mod_192 libeay32.dllBN_nist_mod_192BN_nist_mod_2243_BN_nist_mod_224 libeay32.dllBN_nist_mod_224BN_nist_mod_2563_BN_nist_mod_256 libeay32.dllBN_nist_mod_256BN_nist_mod_3843_BN_nist_mod_384 libeay32.dllBN_nist_mod_384BN_nist_mod_5213_BN_nist_mod_521 libeay32.dllBN_nist_mod_521 BN_nnmod% _BN_nnmod libeay32.dllBN_nnmod BN_num_bits+ _BN_num_bits libeay32.dll BN_num_bitsBN_num_bits_word5_BN_num_bits_word libeay32.dllBN_num_bits_word BN_options) _BN_options libeay32.dll BN_options BN_print% _BN_print libeay32.dllBN_print BN_print_fp+ _BN_print_fp libeay32.dll BN_print_fpBN_pseudo_rand1_BN_pseudo_rand libeay32.dllBN_pseudo_randBN_pseudo_rand_range=_BN_pseudo_rand_range libeay32.dllBN_pseudo_rand_range BN_rand#_BN_rand libeay32.dllBN_rand BN_rand_range/_BN_rand_range libeay32.dll BN_rand_range BN_reciprocal/_BN_reciprocal libeay32.dll BN_reciprocal BN_rshift' _BN_rshift libeay32.dll BN_rshift BN_rshift1) _BN_rshift1 libeay32.dll BN_rshift1 BN_set_bit) _BN_set_bit libeay32.dll BN_set_bitBN_set_negative3_BN_set_negative libeay32.dllBN_set_negative BN_set_params/_BN_set_params libeay32.dll BN_set_params BN_set_word+ _BN_set_word libeay32.dll BN_set_wordBN_sqr!_BN_sqr libeay32.dllBN_sqrBN_sub!_BN_sub libeay32.dllBN_sub BN_sub_word+ _BN_sub_word libeay32.dll BN_sub_word BN_swap#_BN_swap libeay32.dllBN_swapBN_to_ASN1_ENUMERATED?_BN_to_ASN1_ENUMERATED libeay32.dllBN_to_ASN1_ENUMERATEDBN_to_ASN1_INTEGER9_BN_to_ASN1_INTEGER libeay32.dllBN_to_ASN1_INTEGER BN_uadd#_BN_uadd libeay32.dllBN_uadd BN_ucmp#_BN_ucmp libeay32.dllBN_ucmp BN_usub#_BN_usub libeay32.dllBN_usub BN_value_one- _BN_value_one libeay32.dll BN_value_one BUF_MEM_free- _BUF_MEM_free libeay32.dll BUF_MEM_free BUF_MEM_grow- _BUF_MEM_grow libeay32.dll BUF_MEM_growBUF_MEM_grow_clean9_BUF_MEM_grow_clean libeay32.dllBUF_MEM_grow_clean BUF_MEM_new+ _BUF_MEM_new libeay32.dll BUF_MEM_new BUF_memdup) _BUF_memdup libeay32.dll BUF_memdup BUF_reverse+ _BUF_reverse libeay32.dll BUF_reverse BUF_strdup) _BUF_strdup libeay32.dll BUF_strdup BUF_strlcat+ _BUF_strlcat libeay32.dll BUF_strlcat BUF_strlcpy+ _BUF_strlcpy libeay32.dll BUF_strlcpy BUF_strndup+ _BUF_strndup libeay32.dll BUF_strndup BUF_strnlen+ _BUF_strnlen libeay32.dll BUF_strnlenCAST_cbc_encrypt5_CAST_cbc_encrypt libeay32.dllCAST_cbc_encryptCAST_cfb64_encrypt9_CAST_cfb64_encrypt libeay32.dllCAST_cfb64_encrypt CAST_decrypt- _CAST_decrypt libeay32.dll CAST_decryptCAST_ecb_encrypt5_CAST_ecb_encrypt libeay32.dllCAST_ecb_encrypt CAST_encrypt- _CAST_encrypt libeay32.dll CAST_encryptCAST_ofb64_encrypt9_CAST_ofb64_encrypt libeay32.dllCAST_ofb64_encrypt CAST_set_key- _CAST_set_key libeay32.dll CAST_set_key CBIGNUM_it) _CBIGNUM_it libeay32.dll CBIGNUM_itCERTIFICATEPOLICIES_freeE_CERTIFICATEPOLICIES_free libeay32.dllCERTIFICATEPOLICIES_freeCERTIFICATEPOLICIES_itA_CERTIFICATEPOLICIES_it libeay32.dllCERTIFICATEPOLICIES_itCERTIFICATEPOLICIES_newC_CERTIFICATEPOLICIES_new libeay32.dllCERTIFICATEPOLICIES_newCMAC_CTX_cleanup5_CMAC_CTX_cleanup libeay32.dllCMAC_CTX_cleanup CMAC_CTX_copy/_CMAC_CTX_copy libeay32.dll CMAC_CTX_copy CMAC_CTX_free/_CMAC_CTX_free libeay32.dll CMAC_CTX_freeCMAC_CTX_get0_cipher_ctxE_CMAC_CTX_get0_cipher_ctx libeay32.dllCMAC_CTX_get0_cipher_ctx CMAC_CTX_new- _CMAC_CTX_new libeay32.dll CMAC_CTX_new CMAC_Final) _CMAC_Final libeay32.dll CMAC_Final CMAC_Init' _CMAC_Init libeay32.dll CMAC_Init CMAC_Update+ _CMAC_Update libeay32.dll CMAC_Update CMAC_resume+ _CMAC_resume libeay32.dll CMAC_resumeCMS_ContentInfo_free=_CMS_ContentInfo_free libeay32.dllCMS_ContentInfo_freeCMS_ContentInfo_it9_CMS_ContentInfo_it libeay32.dllCMS_ContentInfo_itCMS_ContentInfo_new;_CMS_ContentInfo_new libeay32.dllCMS_ContentInfo_newCMS_ContentInfo_print_ctxG_CMS_ContentInfo_print_ctx libeay32.dllCMS_ContentInfo_print_ctxCMS_EncryptedData_decryptG_CMS_EncryptedData_decrypt libeay32.dllCMS_EncryptedData_decryptCMS_EncryptedData_encryptG_CMS_EncryptedData_encrypt libeay32.dllCMS_EncryptedData_encryptCMS_EncryptedData_set1_keyI_CMS_EncryptedData_set1_key libeay32.dllCMS_EncryptedData_set1_keyCMS_EnvelopedData_createE_CMS_EnvelopedData_create libeay32.dllCMS_EnvelopedData_createCMS_ReceiptRequest_create0I_CMS_ReceiptRequest_create0 libeay32.dllCMS_ReceiptRequest_create0CMS_ReceiptRequest_freeC_CMS_ReceiptRequest_free libeay32.dllCMS_ReceiptRequest_free CMS_ReceiptRequest_get0_valuesQ_CMS_ReceiptRequest_get0_values libeay32.dllCMS_ReceiptRequest_get0_valuesCMS_ReceiptRequest_it?_CMS_ReceiptRequest_it libeay32.dllCMS_ReceiptRequest_itCMS_ReceiptRequest_newA_CMS_ReceiptRequest_new libeay32.dllCMS_ReceiptRequest_new$"CMS_RecipientEncryptedKey_cert_cmpY#_CMS_RecipientEncryptedKey_cert_cmp libeay32.dll"CMS_RecipientEncryptedKey_cert_cmp#!CMS_RecipientEncryptedKey_get0_idW"_CMS_RecipientEncryptedKey_get0_id libeay32.dll!CMS_RecipientEncryptedKey_get0_idCMS_RecipientInfo_decryptG_CMS_RecipientInfo_decrypt libeay32.dllCMS_RecipientInfo_decryptCMS_RecipientInfo_encryptG_CMS_RecipientInfo_encrypt libeay32.dllCMS_RecipientInfo_encrypt!CMS_RecipientInfo_get0_pkey_ctxS _CMS_RecipientInfo_get0_pkey_ctx libeay32.dllCMS_RecipientInfo_get0_pkey_ctx CMS_RecipientInfo_kari_decryptQ_CMS_RecipientInfo_kari_decrypt libeay32.dllCMS_RecipientInfo_kari_decrypt!CMS_RecipientInfo_kari_get0_algS _CMS_RecipientInfo_kari_get0_alg libeay32.dllCMS_RecipientInfo_kari_get0_alg!CMS_RecipientInfo_kari_get0_ctxS _CMS_RecipientInfo_kari_get0_ctx libeay32.dllCMS_RecipientInfo_kari_get0_ctx%#CMS_RecipientInfo_kari_get0_orig_id[$_CMS_RecipientInfo_kari_get0_orig_id libeay32.dll#CMS_RecipientInfo_kari_get0_orig_id" CMS_RecipientInfo_kari_get0_reksU!_CMS_RecipientInfo_kari_get0_reks libeay32.dll CMS_RecipientInfo_kari_get0_reks$"CMS_RecipientInfo_kari_orig_id_cmpY#_CMS_RecipientInfo_kari_orig_id_cmp libeay32.dll"CMS_RecipientInfo_kari_orig_id_cmp" CMS_RecipientInfo_kari_set0_pkeyU!_CMS_RecipientInfo_kari_set0_pkey libeay32.dll CMS_RecipientInfo_kari_set0_pkey!CMS_RecipientInfo_kekri_get0_idS _CMS_RecipientInfo_kekri_get0_id libeay32.dllCMS_RecipientInfo_kekri_get0_id CMS_RecipientInfo_kekri_id_cmpQ_CMS_RecipientInfo_kekri_id_cmp libeay32.dllCMS_RecipientInfo_kekri_id_cmp!CMS_RecipientInfo_ktri_cert_cmpS _CMS_RecipientInfo_ktri_cert_cmp libeay32.dllCMS_RecipientInfo_ktri_cert_cmp" CMS_RecipientInfo_ktri_get0_algsU!_CMS_RecipientInfo_ktri_get0_algs libeay32.dll CMS_RecipientInfo_ktri_get0_algs'%CMS_RecipientInfo_ktri_get0_signer_id_&_CMS_RecipientInfo_ktri_get0_signer_id libeay32.dll%CMS_RecipientInfo_ktri_get0_signer_idCMS_RecipientInfo_set0_keyI_CMS_RecipientInfo_set0_key libeay32.dllCMS_RecipientInfo_set0_key!CMS_RecipientInfo_set0_passwordS _CMS_RecipientInfo_set0_password libeay32.dllCMS_RecipientInfo_set0_passwordCMS_RecipientInfo_set0_pkeyK_CMS_RecipientInfo_set0_pkey libeay32.dllCMS_RecipientInfo_set0_pkeyCMS_RecipientInfo_typeA_CMS_RecipientInfo_type libeay32.dllCMS_RecipientInfo_typeCMS_SharedInfo_encode?_CMS_SharedInfo_encode libeay32.dllCMS_SharedInfo_encodeCMS_SignedData_init;_CMS_SignedData_init libeay32.dllCMS_SignedData_initCMS_SignerInfo_cert_cmpC_CMS_SignerInfo_cert_cmp libeay32.dllCMS_SignerInfo_cert_cmpCMS_SignerInfo_get0_algsE_CMS_SignerInfo_get0_algs libeay32.dllCMS_SignerInfo_get0_algsCMS_SignerInfo_get0_md_ctxI_CMS_SignerInfo_get0_md_ctx libeay32.dllCMS_SignerInfo_get0_md_ctxCMS_SignerInfo_get0_pkey_ctxM_CMS_SignerInfo_get0_pkey_ctx libeay32.dllCMS_SignerInfo_get0_pkey_ctxCMS_SignerInfo_get0_signatureO_CMS_SignerInfo_get0_signature libeay32.dllCMS_SignerInfo_get0_signatureCMS_SignerInfo_get0_signer_idO_CMS_SignerInfo_get0_signer_id libeay32.dllCMS_SignerInfo_get0_signer_id!CMS_SignerInfo_set1_signer_certS _CMS_SignerInfo_set1_signer_cert libeay32.dllCMS_SignerInfo_set1_signer_certCMS_SignerInfo_sign;_CMS_SignerInfo_sign libeay32.dllCMS_SignerInfo_signCMS_SignerInfo_verify?_CMS_SignerInfo_verify libeay32.dllCMS_SignerInfo_verifyCMS_SignerInfo_verify_contentO_CMS_SignerInfo_verify_content libeay32.dllCMS_SignerInfo_verify_contentCMS_add0_CertificateChoicesK_CMS_add0_CertificateChoices libeay32.dllCMS_add0_CertificateChoicesCMS_add0_RevocationInfoChoiceO_CMS_add0_RevocationInfoChoice libeay32.dllCMS_add0_RevocationInfoChoice CMS_add0_cert/_CMS_add0_cert libeay32.dll CMS_add0_cert CMS_add0_crl- _CMS_add0_crl libeay32.dll CMS_add0_crlCMS_add0_recipient_keyA_CMS_add0_recipient_key libeay32.dllCMS_add0_recipient_keyCMS_add0_recipient_passwordK_CMS_add0_recipient_password libeay32.dllCMS_add0_recipient_passwordCMS_add1_ReceiptRequestC_CMS_add1_ReceiptRequest libeay32.dllCMS_add1_ReceiptRequest CMS_add1_cert/_CMS_add1_cert libeay32.dll CMS_add1_cert CMS_add1_crl- _CMS_add1_crl libeay32.dll CMS_add1_crlCMS_add1_recipient_certC_CMS_add1_recipient_cert libeay32.dllCMS_add1_recipient_certCMS_add1_signer3_CMS_add1_signer libeay32.dllCMS_add1_signerCMS_add_simple_smimecapC_CMS_add_simple_smimecap libeay32.dllCMS_add_simple_smimecapCMS_add_smimecap5_CMS_add_smimecap libeay32.dllCMS_add_smimecapCMS_add_standard_smimecapG_CMS_add_standard_smimecap libeay32.dllCMS_add_standard_smimecap CMS_compress- _CMS_compress libeay32.dll CMS_compress CMS_data% _CMS_data libeay32.dllCMS_data CMS_dataFinal/_CMS_dataFinal libeay32.dll CMS_dataFinal CMS_dataInit- _CMS_dataInit libeay32.dll CMS_dataInitCMS_data_create3_CMS_data_create libeay32.dllCMS_data_create CMS_decrypt+ _CMS_decrypt libeay32.dll CMS_decryptCMS_decrypt_set1_key=_CMS_decrypt_set1_key libeay32.dllCMS_decrypt_set1_keyCMS_decrypt_set1_passwordG_CMS_decrypt_set1_password libeay32.dllCMS_decrypt_set1_passwordCMS_decrypt_set1_pkey?_CMS_decrypt_set1_pkey libeay32.dllCMS_decrypt_set1_pkeyCMS_digest_create7_CMS_digest_create libeay32.dllCMS_digest_createCMS_digest_verify7_CMS_digest_verify libeay32.dllCMS_digest_verify CMS_encrypt+ _CMS_encrypt libeay32.dll CMS_encrypt CMS_final' _CMS_final libeay32.dll CMS_finalCMS_get0_RecipientInfosC_CMS_get0_RecipientInfos libeay32.dllCMS_get0_RecipientInfosCMS_get0_SignerInfos=_CMS_get0_SignerInfos libeay32.dllCMS_get0_SignerInfosCMS_get0_content5_CMS_get0_content libeay32.dllCMS_get0_contentCMS_get0_eContentType?_CMS_get0_eContentType libeay32.dllCMS_get0_eContentTypeCMS_get0_signers5_CMS_get0_signers libeay32.dllCMS_get0_signers CMS_get0_type/_CMS_get0_type libeay32.dll CMS_get0_typeCMS_get1_ReceiptRequestC_CMS_get1_ReceiptRequest libeay32.dllCMS_get1_ReceiptRequestCMS_get1_certs1_CMS_get1_certs libeay32.dllCMS_get1_certs CMS_get1_crls/_CMS_get1_crls libeay32.dll CMS_get1_crlsCMS_is_detached3_CMS_is_detached libeay32.dllCMS_is_detachedCMS_set1_eContentType?_CMS_set1_eContentType libeay32.dllCMS_set1_eContentTypeCMS_set1_signers_certsA_CMS_set1_signers_certs libeay32.dllCMS_set1_signers_certsCMS_set_detached5_CMS_set_detached libeay32.dllCMS_set_detached CMS_sign% _CMS_sign libeay32.dllCMS_signCMS_sign_receipt5_CMS_sign_receipt libeay32.dllCMS_sign_receiptCMS_signed_add1_attr=_CMS_signed_add1_attr libeay32.dllCMS_signed_add1_attrCMS_signed_add1_attr_by_NIDK_CMS_signed_add1_attr_by_NID libeay32.dllCMS_signed_add1_attr_by_NIDCMS_signed_add1_attr_by_OBJK_CMS_signed_add1_attr_by_OBJ libeay32.dllCMS_signed_add1_attr_by_OBJCMS_signed_add1_attr_by_txtK_CMS_signed_add1_attr_by_txt libeay32.dllCMS_signed_add1_attr_by_txtCMS_signed_delete_attrA_CMS_signed_delete_attr libeay32.dllCMS_signed_delete_attrCMS_signed_get0_data_by_OBJK_CMS_signed_get0_data_by_OBJ libeay32.dllCMS_signed_get0_data_by_OBJCMS_signed_get_attr;_CMS_signed_get_attr libeay32.dllCMS_signed_get_attrCMS_signed_get_attr_by_NIDI_CMS_signed_get_attr_by_NID libeay32.dllCMS_signed_get_attr_by_NIDCMS_signed_get_attr_by_OBJI_CMS_signed_get_attr_by_OBJ libeay32.dllCMS_signed_get_attr_by_OBJCMS_signed_get_attr_countG_CMS_signed_get_attr_count libeay32.dllCMS_signed_get_attr_count CMS_stream) _CMS_stream libeay32.dll CMS_streamCMS_uncompress1_CMS_uncompress libeay32.dllCMS_uncompressCMS_unsigned_add1_attrA_CMS_unsigned_add1_attr libeay32.dllCMS_unsigned_add1_attrCMS_unsigned_add1_attr_by_NIDO_CMS_unsigned_add1_attr_by_NID libeay32.dllCMS_unsigned_add1_attr_by_NIDCMS_unsigned_add1_attr_by_OBJO_CMS_unsigned_add1_attr_by_OBJ libeay32.dllCMS_unsigned_add1_attr_by_OBJCMS_unsigned_add1_attr_by_txtO_CMS_unsigned_add1_attr_by_txt libeay32.dllCMS_unsigned_add1_attr_by_txtCMS_unsigned_delete_attrE_CMS_unsigned_delete_attr libeay32.dllCMS_unsigned_delete_attrCMS_unsigned_get0_data_by_OBJO_CMS_unsigned_get0_data_by_OBJ libeay32.dllCMS_unsigned_get0_data_by_OBJCMS_unsigned_get_attr?_CMS_unsigned_get_attr libeay32.dllCMS_unsigned_get_attrCMS_unsigned_get_attr_by_NIDM_CMS_unsigned_get_attr_by_NID libeay32.dllCMS_unsigned_get_attr_by_NIDCMS_unsigned_get_attr_by_OBJM_CMS_unsigned_get_attr_by_OBJ libeay32.dllCMS_unsigned_get_attr_by_OBJCMS_unsigned_get_attr_countK_CMS_unsigned_get_attr_count libeay32.dllCMS_unsigned_get_attr_count CMS_verify) _CMS_verify libeay32.dll CMS_verifyCMS_verify_receipt9_CMS_verify_receipt libeay32.dllCMS_verify_receipt COMP_CTX_free/_COMP_CTX_free libeay32.dll COMP_CTX_free COMP_CTX_new- _COMP_CTX_new libeay32.dll COMP_CTX_newCOMP_compress_block;_COMP_compress_block libeay32.dllCOMP_compress_blockCOMP_expand_block7_COMP_expand_block libeay32.dllCOMP_expand_block COMP_rle% _COMP_rle libeay32.dllCOMP_rle COMP_zlib' _COMP_zlib libeay32.dll COMP_zlibCOMP_zlib_cleanup7_COMP_zlib_cleanup libeay32.dllCOMP_zlib_cleanup CONF_dump_bio/_CONF_dump_bio libeay32.dll CONF_dump_bio CONF_dump_fp- _CONF_dump_fp libeay32.dll CONF_dump_fp CONF_free' _CONF_free libeay32.dll CONF_freeCONF_get1_default_config_fileO_CONF_get1_default_config_file libeay32.dllCONF_get1_default_config_fileCONF_get_number3_CONF_get_number libeay32.dllCONF_get_numberCONF_get_section5_CONF_get_section libeay32.dllCONF_get_sectionCONF_get_string3_CONF_get_string libeay32.dllCONF_get_stringCONF_imodule_get_flagsA_CONF_imodule_get_flags libeay32.dllCONF_imodule_get_flagsCONF_imodule_get_moduleC_CONF_imodule_get_module libeay32.dllCONF_imodule_get_moduleCONF_imodule_get_name?_CONF_imodule_get_name libeay32.dllCONF_imodule_get_nameCONF_imodule_get_usr_dataG_CONF_imodule_get_usr_data libeay32.dllCONF_imodule_get_usr_dataCONF_imodule_get_valueA_CONF_imodule_get_value libeay32.dllCONF_imodule_get_valueCONF_imodule_set_flagsA_CONF_imodule_set_flags libeay32.dllCONF_imodule_set_flagsCONF_imodule_set_usr_dataG_CONF_imodule_set_usr_data libeay32.dllCONF_imodule_set_usr_data CONF_load' _CONF_load libeay32.dll CONF_load CONF_load_bio/_CONF_load_bio libeay32.dll CONF_load_bio CONF_load_fp- _CONF_load_fp libeay32.dll CONF_load_fpCONF_module_add3_CONF_module_add libeay32.dllCONF_module_addCONF_module_get_usr_dataE_CONF_module_get_usr_data libeay32.dllCONF_module_get_usr_dataCONF_module_set_usr_dataE_CONF_module_set_usr_data libeay32.dllCONF_module_set_usr_dataCONF_modules_finish;_CONF_modules_finish libeay32.dllCONF_modules_finishCONF_modules_free7_CONF_modules_free libeay32.dllCONF_modules_freeCONF_modules_load7_CONF_modules_load libeay32.dllCONF_modules_loadCONF_modules_load_fileA_CONF_modules_load_file libeay32.dllCONF_modules_load_fileCONF_modules_unload;_CONF_modules_unload libeay32.dllCONF_modules_unloadCONF_parse_list3_CONF_parse_list libeay32.dllCONF_parse_listCONF_set_default_methodC_CONF_set_default_method libeay32.dllCONF_set_default_methodCONF_set_nconf1_CONF_set_nconf libeay32.dllCONF_set_nconfCRL_DIST_POINTS_free=_CRL_DIST_POINTS_free libeay32.dllCRL_DIST_POINTS_freeCRL_DIST_POINTS_it9_CRL_DIST_POINTS_it libeay32.dllCRL_DIST_POINTS_itCRL_DIST_POINTS_new;_CRL_DIST_POINTS_new libeay32.dllCRL_DIST_POINTS_newCRYPTO_128_unwrap7_CRYPTO_128_unwrap libeay32.dllCRYPTO_128_unwrapCRYPTO_128_wrap3_CRYPTO_128_wrap libeay32.dllCRYPTO_128_wrapCRYPTO_THREADID_cmp;_CRYPTO_THREADID_cmp libeay32.dllCRYPTO_THREADID_cmpCRYPTO_THREADID_cpy;_CRYPTO_THREADID_cpy libeay32.dllCRYPTO_THREADID_cpyCRYPTO_THREADID_currentC_CRYPTO_THREADID_current libeay32.dllCRYPTO_THREADID_currentCRYPTO_THREADID_get_callbackM_CRYPTO_THREADID_get_callback libeay32.dllCRYPTO_THREADID_get_callbackCRYPTO_THREADID_hash=_CRYPTO_THREADID_hash libeay32.dllCRYPTO_THREADID_hashCRYPTO_THREADID_set_callbackM_CRYPTO_THREADID_set_callback libeay32.dllCRYPTO_THREADID_set_callbackCRYPTO_THREADID_set_numericK_CRYPTO_THREADID_set_numeric libeay32.dllCRYPTO_THREADID_set_numericCRYPTO_THREADID_set_pointerK_CRYPTO_THREADID_set_pointer libeay32.dllCRYPTO_THREADID_set_pointerCRYPTO_add_lock3_CRYPTO_add_lock libeay32.dllCRYPTO_add_lockCRYPTO_cbc128_decrypt?_CRYPTO_cbc128_decrypt libeay32.dllCRYPTO_cbc128_decryptCRYPTO_cbc128_encrypt?_CRYPTO_cbc128_encrypt libeay32.dllCRYPTO_cbc128_encryptCRYPTO_ccm128_aad7_CRYPTO_ccm128_aad libeay32.dllCRYPTO_ccm128_aadCRYPTO_ccm128_decrypt?_CRYPTO_ccm128_decrypt libeay32.dllCRYPTO_ccm128_decryptCRYPTO_ccm128_decrypt_ccm64K_CRYPTO_ccm128_decrypt_ccm64 libeay32.dllCRYPTO_ccm128_decrypt_ccm64CRYPTO_ccm128_encrypt?_CRYPTO_ccm128_encrypt libeay32.dllCRYPTO_ccm128_encryptCRYPTO_ccm128_encrypt_ccm64K_CRYPTO_ccm128_encrypt_ccm64 libeay32.dllCRYPTO_ccm128_encrypt_ccm64CRYPTO_ccm128_init9_CRYPTO_ccm128_init libeay32.dllCRYPTO_ccm128_initCRYPTO_ccm128_setiv;_CRYPTO_ccm128_setiv libeay32.dllCRYPTO_ccm128_setivCRYPTO_ccm128_tag7_CRYPTO_ccm128_tag libeay32.dllCRYPTO_ccm128_tagCRYPTO_cfb128_1_encryptC_CRYPTO_cfb128_1_encrypt libeay32.dllCRYPTO_cfb128_1_encryptCRYPTO_cfb128_8_encryptC_CRYPTO_cfb128_8_encrypt libeay32.dllCRYPTO_cfb128_8_encryptCRYPTO_cfb128_encrypt?_CRYPTO_cfb128_encrypt libeay32.dllCRYPTO_cfb128_encryptCRYPTO_cleanup_all_ex_dataI_CRYPTO_cleanup_all_ex_data libeay32.dllCRYPTO_cleanup_all_ex_dataCRYPTO_ctr128_encrypt?_CRYPTO_ctr128_encrypt libeay32.dllCRYPTO_ctr128_encryptCRYPTO_ctr128_encrypt_ctr32K_CRYPTO_ctr128_encrypt_ctr32 libeay32.dllCRYPTO_ctr128_encrypt_ctr32CRYPTO_cts128_decrypt?_CRYPTO_cts128_decrypt libeay32.dllCRYPTO_cts128_decryptCRYPTO_cts128_decrypt_blockK_CRYPTO_cts128_decrypt_block libeay32.dllCRYPTO_cts128_decrypt_blockCRYPTO_cts128_encrypt?_CRYPTO_cts128_encrypt libeay32.dllCRYPTO_cts128_encryptCRYPTO_cts128_encrypt_blockK_CRYPTO_cts128_encrypt_block libeay32.dllCRYPTO_cts128_encrypt_blockCRYPTO_dbg_free3_CRYPTO_dbg_free libeay32.dllCRYPTO_dbg_freeCRYPTO_dbg_get_optionsA_CRYPTO_dbg_get_options libeay32.dllCRYPTO_dbg_get_optionsCRYPTO_dbg_malloc7_CRYPTO_dbg_malloc libeay32.dllCRYPTO_dbg_mallocCRYPTO_dbg_realloc9_CRYPTO_dbg_realloc libeay32.dllCRYPTO_dbg_reallocCRYPTO_dbg_set_optionsA_CRYPTO_dbg_set_options libeay32.dllCRYPTO_dbg_set_optionsCRYPTO_destroy_dynlockidE_CRYPTO_destroy_dynlockid libeay32.dllCRYPTO_destroy_dynlockidCRYPTO_dup_ex_data9_CRYPTO_dup_ex_data libeay32.dllCRYPTO_dup_ex_dataCRYPTO_ex_data_new_classE_CRYPTO_ex_data_new_class libeay32.dllCRYPTO_ex_data_new_class CRYPTO_free+ _CRYPTO_free libeay32.dll CRYPTO_freeCRYPTO_free_ex_data;_CRYPTO_free_ex_data libeay32.dllCRYPTO_free_ex_dataCRYPTO_free_locked9_CRYPTO_free_locked libeay32.dllCRYPTO_free_lockedCRYPTO_gcm128_aad7_CRYPTO_gcm128_aad libeay32.dllCRYPTO_gcm128_aadCRYPTO_gcm128_decrypt?_CRYPTO_gcm128_decrypt libeay32.dllCRYPTO_gcm128_decryptCRYPTO_gcm128_decrypt_ctr32K_CRYPTO_gcm128_decrypt_ctr32 libeay32.dllCRYPTO_gcm128_decrypt_ctr32CRYPTO_gcm128_encrypt?_CRYPTO_gcm128_encrypt libeay32.dllCRYPTO_gcm128_encryptCRYPTO_gcm128_encrypt_ctr32K_CRYPTO_gcm128_encrypt_ctr32 libeay32.dllCRYPTO_gcm128_encrypt_ctr32CRYPTO_gcm128_finish=_CRYPTO_gcm128_finish libeay32.dllCRYPTO_gcm128_finishCRYPTO_gcm128_init9_CRYPTO_gcm128_init libeay32.dllCRYPTO_gcm128_initCRYPTO_gcm128_new7_CRYPTO_gcm128_new libeay32.dllCRYPTO_gcm128_newCRYPTO_gcm128_release?_CRYPTO_gcm128_release libeay32.dllCRYPTO_gcm128_releaseCRYPTO_gcm128_setiv;_CRYPTO_gcm128_setiv libeay32.dllCRYPTO_gcm128_setivCRYPTO_gcm128_tag7_CRYPTO_gcm128_tag libeay32.dllCRYPTO_gcm128_tagCRYPTO_get_add_lock_callbackM_CRYPTO_get_add_lock_callback libeay32.dllCRYPTO_get_add_lock_callback$"CRYPTO_get_dynlock_create_callbackY#_CRYPTO_get_dynlock_create_callback libeay32.dll"CRYPTO_get_dynlock_create_callback%#CRYPTO_get_dynlock_destroy_callback[$_CRYPTO_get_dynlock_destroy_callback libeay32.dll#CRYPTO_get_dynlock_destroy_callback" CRYPTO_get_dynlock_lock_callbackU!_CRYPTO_get_dynlock_lock_callback libeay32.dll CRYPTO_get_dynlock_lock_callbackCRYPTO_get_dynlock_valueE_CRYPTO_get_dynlock_value libeay32.dllCRYPTO_get_dynlock_valueCRYPTO_get_ex_data9_CRYPTO_get_ex_data libeay32.dllCRYPTO_get_ex_data#!CRYPTO_get_ex_data_implementationW"_CRYPTO_get_ex_data_implementation libeay32.dll!CRYPTO_get_ex_data_implementationCRYPTO_get_ex_new_indexC_CRYPTO_get_ex_new_index libeay32.dllCRYPTO_get_ex_new_indexCRYPTO_get_id_callbackA_CRYPTO_get_id_callback libeay32.dllCRYPTO_get_id_callbackCRYPTO_get_lock_name=_CRYPTO_get_lock_name libeay32.dllCRYPTO_get_lock_name$"CRYPTO_get_locked_mem_ex_functionsY#_CRYPTO_get_locked_mem_ex_functions libeay32.dll"CRYPTO_get_locked_mem_ex_functions!CRYPTO_get_locked_mem_functionsS _CRYPTO_get_locked_mem_functions libeay32.dllCRYPTO_get_locked_mem_functionsCRYPTO_get_locking_callbackK_CRYPTO_get_locking_callback libeay32.dllCRYPTO_get_locking_callback CRYPTO_get_mem_debug_functionsQ_CRYPTO_get_mem_debug_functions libeay32.dllCRYPTO_get_mem_debug_functionsCRYPTO_get_mem_debug_optionsM_CRYPTO_get_mem_debug_options libeay32.dllCRYPTO_get_mem_debug_optionsCRYPTO_get_mem_ex_functionsK_CRYPTO_get_mem_ex_functions libeay32.dllCRYPTO_get_mem_ex_functionsCRYPTO_get_mem_functionsE_CRYPTO_get_mem_functions libeay32.dllCRYPTO_get_mem_functionsCRYPTO_get_new_dynlockidE_CRYPTO_get_new_dynlockid libeay32.dllCRYPTO_get_new_dynlockidCRYPTO_get_new_lockid?_CRYPTO_get_new_lockid libeay32.dllCRYPTO_get_new_lockidCRYPTO_is_mem_check_onA_CRYPTO_is_mem_check_on libeay32.dllCRYPTO_is_mem_check_on CRYPTO_lock+ _CRYPTO_lock libeay32.dll CRYPTO_lock CRYPTO_malloc/_CRYPTO_malloc libeay32.dll CRYPTO_mallocCRYPTO_malloc_locked=_CRYPTO_malloc_locked libeay32.dllCRYPTO_malloc_lockedCRYPTO_mem_ctrl3_CRYPTO_mem_ctrl libeay32.dllCRYPTO_mem_ctrlCRYPTO_mem_leaks5_CRYPTO_mem_leaks libeay32.dllCRYPTO_mem_leaksCRYPTO_mem_leaks_cb;_CRYPTO_mem_leaks_cb libeay32.dllCRYPTO_mem_leaks_cbCRYPTO_mem_leaks_fp;_CRYPTO_mem_leaks_fp libeay32.dllCRYPTO_mem_leaks_fp CRYPTO_memcmp/_CRYPTO_memcmp libeay32.dll CRYPTO_memcmpCRYPTO_new_ex_data9_CRYPTO_new_ex_data libeay32.dllCRYPTO_new_ex_dataCRYPTO_nistcts128_decryptG_CRYPTO_nistcts128_decrypt libeay32.dllCRYPTO_nistcts128_decrypt!CRYPTO_nistcts128_decrypt_blockS _CRYPTO_nistcts128_decrypt_block libeay32.dllCRYPTO_nistcts128_decrypt_blockCRYPTO_nistcts128_encryptG_CRYPTO_nistcts128_encrypt libeay32.dllCRYPTO_nistcts128_encrypt!CRYPTO_nistcts128_encrypt_blockS _CRYPTO_nistcts128_encrypt_block libeay32.dllCRYPTO_nistcts128_encrypt_blockCRYPTO_num_locks5_CRYPTO_num_locks libeay32.dllCRYPTO_num_locksCRYPTO_ofb128_encrypt?_CRYPTO_ofb128_encrypt libeay32.dllCRYPTO_ofb128_encryptCRYPTO_pop_info3_CRYPTO_pop_info libeay32.dllCRYPTO_pop_infoCRYPTO_push_info_7_CRYPTO_push_info_ libeay32.dllCRYPTO_push_info_CRYPTO_realloc1_CRYPTO_realloc libeay32.dllCRYPTO_reallocCRYPTO_realloc_clean=_CRYPTO_realloc_clean libeay32.dllCRYPTO_realloc_cleanCRYPTO_remalloc3_CRYPTO_remalloc libeay32.dllCRYPTO_remallocCRYPTO_remove_all_infoA_CRYPTO_remove_all_info libeay32.dllCRYPTO_remove_all_infoCRYPTO_set_add_lock_callbackM_CRYPTO_set_add_lock_callback libeay32.dllCRYPTO_set_add_lock_callback$"CRYPTO_set_dynlock_create_callbackY#_CRYPTO_set_dynlock_create_callback libeay32.dll"CRYPTO_set_dynlock_create_callback%#CRYPTO_set_dynlock_destroy_callback[$_CRYPTO_set_dynlock_destroy_callback libeay32.dll#CRYPTO_set_dynlock_destroy_callback" CRYPTO_set_dynlock_lock_callbackU!_CRYPTO_set_dynlock_lock_callback libeay32.dll CRYPTO_set_dynlock_lock_callbackCRYPTO_set_ex_data9_CRYPTO_set_ex_data libeay32.dllCRYPTO_set_ex_data#!CRYPTO_set_ex_data_implementationW"_CRYPTO_set_ex_data_implementation libeay32.dll!CRYPTO_set_ex_data_implementationCRYPTO_set_id_callbackA_CRYPTO_set_id_callback libeay32.dllCRYPTO_set_id_callback$"CRYPTO_set_locked_mem_ex_functionsY#_CRYPTO_set_locked_mem_ex_functions libeay32.dll"CRYPTO_set_locked_mem_ex_functions!CRYPTO_set_locked_mem_functionsS _CRYPTO_set_locked_mem_functions libeay32.dllCRYPTO_set_locked_mem_functionsCRYPTO_set_locking_callbackK_CRYPTO_set_locking_callback libeay32.dllCRYPTO_set_locking_callback CRYPTO_set_mem_debug_functionsQ_CRYPTO_set_mem_debug_functions libeay32.dllCRYPTO_set_mem_debug_functionsCRYPTO_set_mem_debug_optionsM_CRYPTO_set_mem_debug_options libeay32.dllCRYPTO_set_mem_debug_optionsCRYPTO_set_mem_ex_functionsK_CRYPTO_set_mem_ex_functions libeay32.dllCRYPTO_set_mem_ex_functionsCRYPTO_set_mem_functionsE_CRYPTO_set_mem_functions libeay32.dllCRYPTO_set_mem_functions CRYPTO_strdup/_CRYPTO_strdup libeay32.dll CRYPTO_strdupCRYPTO_thread_id5_CRYPTO_thread_id libeay32.dllCRYPTO_thread_idCRYPTO_xts128_encrypt?_CRYPTO_xts128_encrypt libeay32.dllCRYPTO_xts128_encryptCamellia_cbc_encrypt=_Camellia_cbc_encrypt libeay32.dllCamellia_cbc_encryptCamellia_cfb128_encryptC_Camellia_cfb128_encrypt libeay32.dllCamellia_cfb128_encryptCamellia_cfb1_encrypt?_Camellia_cfb1_encrypt libeay32.dllCamellia_cfb1_encryptCamellia_cfb8_encrypt?_Camellia_cfb8_encrypt libeay32.dllCamellia_cfb8_encryptCamellia_ctr128_encryptC_Camellia_ctr128_encrypt libeay32.dllCamellia_ctr128_encryptCamellia_decrypt5_Camellia_decrypt libeay32.dllCamellia_decryptCamellia_ecb_encrypt=_Camellia_ecb_encrypt libeay32.dllCamellia_ecb_encryptCamellia_encrypt5_Camellia_encrypt libeay32.dllCamellia_encryptCamellia_ofb128_encryptC_Camellia_ofb128_encrypt libeay32.dllCamellia_ofb128_encryptCamellia_set_key5_Camellia_set_key libeay32.dllCamellia_set_key DES_cbc_cksum/_DES_cbc_cksum libeay32.dll DES_cbc_cksumDES_cbc_encrypt3_DES_cbc_encrypt libeay32.dllDES_cbc_encryptDES_cfb64_encrypt7_DES_cfb64_encrypt libeay32.dllDES_cfb64_encryptDES_cfb_encrypt3_DES_cfb_encrypt libeay32.dllDES_cfb_encryptDES_check_key_parity=_DES_check_key_parity libeay32.dllDES_check_key_parity DES_crypt' _DES_crypt libeay32.dll DES_crypt DES_decrypt3- _DES_decrypt3 libeay32.dll DES_decrypt3DES_ecb3_encrypt5_DES_ecb3_encrypt libeay32.dllDES_ecb3_encryptDES_ecb_encrypt3_DES_ecb_encrypt libeay32.dllDES_ecb_encryptDES_ede3_cbc_encrypt=_DES_ede3_cbc_encrypt libeay32.dllDES_ede3_cbc_encryptDES_ede3_cbcm_encrypt?_DES_ede3_cbcm_encrypt libeay32.dllDES_ede3_cbcm_encryptDES_ede3_cfb64_encryptA_DES_ede3_cfb64_encrypt libeay32.dllDES_ede3_cfb64_encryptDES_ede3_cfb_encrypt=_DES_ede3_cfb_encrypt libeay32.dllDES_ede3_cfb_encryptDES_ede3_ofb64_encryptA_DES_ede3_ofb64_encrypt libeay32.dllDES_ede3_ofb64_encrypt DES_enc_read- _DES_enc_read libeay32.dll DES_enc_read DES_enc_write/_DES_enc_write libeay32.dll DES_enc_write DES_encrypt1- _DES_encrypt1 libeay32.dll DES_encrypt1 DES_encrypt2- _DES_encrypt2 libeay32.dll DES_encrypt2 DES_encrypt3- _DES_encrypt3 libeay32.dll DES_encrypt3 DES_fcrypt) _DES_fcrypt libeay32.dll DES_fcryptDES_is_weak_key3_DES_is_weak_key libeay32.dllDES_is_weak_key DES_key_sched/_DES_key_sched libeay32.dll DES_key_schedDES_ncbc_encrypt5_DES_ncbc_encrypt libeay32.dllDES_ncbc_encryptDES_ofb64_encrypt7_DES_ofb64_encrypt libeay32.dllDES_ofb64_encryptDES_ofb_encrypt3_DES_ofb_encrypt libeay32.dllDES_ofb_encrypt DES_options+ _DES_options libeay32.dll DES_optionsDES_pcbc_encrypt5_DES_pcbc_encrypt libeay32.dllDES_pcbc_encryptDES_quad_cksum1_DES_quad_cksum libeay32.dllDES_quad_cksumDES_random_key1_DES_random_key libeay32.dllDES_random_keyDES_read_2passwords;_DES_read_2passwords libeay32.dllDES_read_2passwordsDES_read_password7_DES_read_password libeay32.dllDES_read_password DES_set_key+ _DES_set_key libeay32.dll DES_set_keyDES_set_key_checked;_DES_set_key_checked libeay32.dllDES_set_key_checkedDES_set_key_unchecked?_DES_set_key_unchecked libeay32.dllDES_set_key_uncheckedDES_set_odd_parity9_DES_set_odd_parity libeay32.dllDES_set_odd_parityDES_string_to_2keys;_DES_string_to_2keys libeay32.dllDES_string_to_2keysDES_string_to_key7_DES_string_to_key libeay32.dllDES_string_to_keyDES_xcbc_encrypt5_DES_xcbc_encrypt libeay32.dllDES_xcbc_encrypt DH_KDF_X9_42- _DH_KDF_X9_42 libeay32.dll DH_KDF_X9_42 DH_OpenSSL) _DH_OpenSSL libeay32.dll DH_OpenSSL DH_check% _DH_check libeay32.dllDH_checkDH_check_pub_key5_DH_check_pub_key libeay32.dllDH_check_pub_keyDH_compute_key1_DH_compute_key libeay32.dllDH_compute_keyDH_compute_key_padded?_DH_compute_key_padded libeay32.dllDH_compute_key_padded DH_free#_DH_free libeay32.dllDH_freeDH_generate_key3_DH_generate_key libeay32.dllDH_generate_keyDH_generate_parametersA_DH_generate_parameters libeay32.dllDH_generate_parametersDH_generate_parameters_exG_DH_generate_parameters_ex libeay32.dllDH_generate_parameters_exDH_get_1024_1603_DH_get_1024_160 libeay32.dllDH_get_1024_160DH_get_2048_2243_DH_get_2048_224 libeay32.dllDH_get_2048_224DH_get_2048_2563_DH_get_2048_256 libeay32.dllDH_get_2048_256DH_get_default_method?_DH_get_default_method libeay32.dllDH_get_default_methodDH_get_ex_data1_DH_get_ex_data libeay32.dllDH_get_ex_dataDH_get_ex_new_index;_DH_get_ex_new_index libeay32.dllDH_get_ex_new_indexDH_new!_DH_new libeay32.dllDH_new DH_new_method/_DH_new_method libeay32.dll DH_new_methodDH_set_default_method?_DH_set_default_method libeay32.dllDH_set_default_methodDH_set_ex_data1_DH_set_ex_data libeay32.dllDH_set_ex_data DH_set_method/_DH_set_method libeay32.dll DH_set_method DH_size#_DH_size libeay32.dllDH_size DH_up_ref' _DH_up_ref libeay32.dll DH_up_ref DHparams_dup- _DHparams_dup libeay32.dll DHparams_dupDHparams_print1_DHparams_print libeay32.dllDHparams_printDHparams_print_fp7_DHparams_print_fp libeay32.dllDHparams_print_fpDIRECTORYSTRING_free=_DIRECTORYSTRING_free libeay32.dllDIRECTORYSTRING_freeDIRECTORYSTRING_it9_DIRECTORYSTRING_it libeay32.dllDIRECTORYSTRING_itDIRECTORYSTRING_new;_DIRECTORYSTRING_new libeay32.dllDIRECTORYSTRING_newDISPLAYTEXT_free5_DISPLAYTEXT_free libeay32.dllDISPLAYTEXT_freeDISPLAYTEXT_it1_DISPLAYTEXT_it libeay32.dllDISPLAYTEXT_itDISPLAYTEXT_new3_DISPLAYTEXT_new libeay32.dllDISPLAYTEXT_newDIST_POINT_NAME_free=_DIST_POINT_NAME_free libeay32.dllDIST_POINT_NAME_freeDIST_POINT_NAME_it9_DIST_POINT_NAME_it libeay32.dllDIST_POINT_NAME_itDIST_POINT_NAME_new;_DIST_POINT_NAME_new libeay32.dllDIST_POINT_NAME_newDIST_POINT_free3_DIST_POINT_free libeay32.dllDIST_POINT_free DIST_POINT_it/_DIST_POINT_it libeay32.dll DIST_POINT_itDIST_POINT_new1_DIST_POINT_new libeay32.dllDIST_POINT_newDIST_POINT_set_dpname?_DIST_POINT_set_dpname libeay32.dllDIST_POINT_set_dpname DSA_OpenSSL+ _DSA_OpenSSL libeay32.dll DSA_OpenSSL DSA_SIG_free- _DSA_SIG_free libeay32.dll DSA_SIG_free DSA_SIG_new+ _DSA_SIG_new libeay32.dll DSA_SIG_new DSA_do_sign+ _DSA_do_sign libeay32.dll DSA_do_sign DSA_do_verify/_DSA_do_verify libeay32.dll DSA_do_verify DSA_dup_DH) _DSA_dup_DH libeay32.dll DSA_dup_DH DSA_free% _DSA_free libeay32.dllDSA_freeDSA_generate_key5_DSA_generate_key libeay32.dllDSA_generate_keyDSA_generate_parametersC_DSA_generate_parameters libeay32.dllDSA_generate_parametersDSA_generate_parameters_exI_DSA_generate_parameters_ex libeay32.dllDSA_generate_parameters_exDSA_get_default_methodA_DSA_get_default_method libeay32.dllDSA_get_default_methodDSA_get_ex_data3_DSA_get_ex_data libeay32.dllDSA_get_ex_dataDSA_get_ex_new_index=_DSA_get_ex_new_index libeay32.dllDSA_get_ex_new_index DSA_new#_DSA_new libeay32.dllDSA_newDSA_new_method1_DSA_new_method libeay32.dllDSA_new_method DSA_print' _DSA_print libeay32.dll DSA_print DSA_print_fp- _DSA_print_fp libeay32.dll DSA_print_fpDSA_set_default_methodA_DSA_set_default_method libeay32.dllDSA_set_default_methodDSA_set_ex_data3_DSA_set_ex_data libeay32.dllDSA_set_ex_dataDSA_set_method1_DSA_set_method libeay32.dllDSA_set_method DSA_sign% _DSA_sign libeay32.dllDSA_signDSA_sign_setup1_DSA_sign_setup libeay32.dllDSA_sign_setup DSA_size% _DSA_size libeay32.dllDSA_size DSA_up_ref) _DSA_up_ref libeay32.dll DSA_up_ref DSA_verify) _DSA_verify libeay32.dll DSA_verify DSAparams_dup/_DSAparams_dup libeay32.dll DSAparams_dupDSAparams_print3_DSAparams_print libeay32.dllDSAparams_printDSAparams_print_fp9_DSAparams_print_fp libeay32.dllDSAparams_print_fpDSO_METHOD_beos3_DSO_METHOD_beos libeay32.dllDSO_METHOD_beos DSO_METHOD_dl/_DSO_METHOD_dl libeay32.dll DSO_METHOD_dlDSO_METHOD_dlfcn5_DSO_METHOD_dlfcn libeay32.dllDSO_METHOD_dlfcnDSO_METHOD_null3_DSO_METHOD_null libeay32.dllDSO_METHOD_nullDSO_METHOD_openssl9_DSO_METHOD_openssl libeay32.dllDSO_METHOD_opensslDSO_METHOD_vms1_DSO_METHOD_vms libeay32.dllDSO_METHOD_vmsDSO_METHOD_win325_DSO_METHOD_win32 libeay32.dllDSO_METHOD_win32 DSO_bind_func/_DSO_bind_func libeay32.dll DSO_bind_func DSO_bind_var- _DSO_bind_var libeay32.dll DSO_bind_varDSO_convert_filename=_DSO_convert_filename libeay32.dllDSO_convert_filename DSO_ctrl% _DSO_ctrl libeay32.dllDSO_ctrl DSO_flags' _DSO_flags libeay32.dll DSO_flags DSO_free% _DSO_free libeay32.dllDSO_freeDSO_get_default_methodA_DSO_get_default_method libeay32.dllDSO_get_default_methodDSO_get_filename5_DSO_get_filename libeay32.dllDSO_get_filenameDSO_get_loaded_filenameC_DSO_get_loaded_filename libeay32.dllDSO_get_loaded_filenameDSO_get_method1_DSO_get_method libeay32.dllDSO_get_methodDSO_global_lookup7_DSO_global_lookup libeay32.dllDSO_global_lookup DSO_load% _DSO_load libeay32.dllDSO_load DSO_merge' _DSO_merge libeay32.dll DSO_merge DSO_new#_DSO_new libeay32.dllDSO_newDSO_new_method1_DSO_new_method libeay32.dllDSO_new_methodDSO_pathbyaddr1_DSO_pathbyaddr libeay32.dllDSO_pathbyaddrDSO_set_default_methodA_DSO_set_default_method libeay32.dllDSO_set_default_methodDSO_set_filename5_DSO_set_filename libeay32.dllDSO_set_filenameDSO_set_method1_DSO_set_method libeay32.dllDSO_set_methodDSO_set_name_converterA_DSO_set_name_converter libeay32.dllDSO_set_name_converter DSO_up_ref) _DSO_up_ref libeay32.dll DSO_up_refECDH_KDF_X9_621_ECDH_KDF_X9_62 libeay32.dllECDH_KDF_X9_62 ECDH_OpenSSL- _ECDH_OpenSSL libeay32.dll ECDH_OpenSSLECDH_compute_key5_ECDH_compute_key libeay32.dllECDH_compute_keyECDH_get_default_methodC_ECDH_get_default_method libeay32.dllECDH_get_default_methodECDH_get_ex_data5_ECDH_get_ex_data libeay32.dllECDH_get_ex_dataECDH_get_ex_new_index?_ECDH_get_ex_new_index libeay32.dllECDH_get_ex_new_indexECDH_set_default_methodC_ECDH_set_default_method libeay32.dllECDH_set_default_methodECDH_set_ex_data5_ECDH_set_ex_data libeay32.dllECDH_set_ex_dataECDH_set_method3_ECDH_set_method libeay32.dllECDH_set_methodECDSA_METHOD_free7_ECDSA_METHOD_free libeay32.dllECDSA_METHOD_freeECDSA_METHOD_get_app_dataG_ECDSA_METHOD_get_app_data libeay32.dllECDSA_METHOD_get_app_dataECDSA_METHOD_new5_ECDSA_METHOD_new libeay32.dllECDSA_METHOD_newECDSA_METHOD_set_app_dataG_ECDSA_METHOD_set_app_data libeay32.dllECDSA_METHOD_set_app_dataECDSA_METHOD_set_flagsA_ECDSA_METHOD_set_flags libeay32.dllECDSA_METHOD_set_flagsECDSA_METHOD_set_name?_ECDSA_METHOD_set_name libeay32.dllECDSA_METHOD_set_nameECDSA_METHOD_set_sign?_ECDSA_METHOD_set_sign libeay32.dllECDSA_METHOD_set_signECDSA_METHOD_set_sign_setupK_ECDSA_METHOD_set_sign_setup libeay32.dllECDSA_METHOD_set_sign_setupECDSA_METHOD_set_verifyC_ECDSA_METHOD_set_verify libeay32.dllECDSA_METHOD_set_verify ECDSA_OpenSSL/_ECDSA_OpenSSL libeay32.dll ECDSA_OpenSSLECDSA_SIG_free1_ECDSA_SIG_free libeay32.dllECDSA_SIG_free ECDSA_SIG_new/_ECDSA_SIG_new libeay32.dll ECDSA_SIG_new ECDSA_do_sign/_ECDSA_do_sign libeay32.dll ECDSA_do_signECDSA_do_sign_ex5_ECDSA_do_sign_ex libeay32.dllECDSA_do_sign_exECDSA_do_verify3_ECDSA_do_verify libeay32.dllECDSA_do_verifyECDSA_get_default_methodE_ECDSA_get_default_method libeay32.dllECDSA_get_default_methodECDSA_get_ex_data7_ECDSA_get_ex_data libeay32.dllECDSA_get_ex_dataECDSA_get_ex_new_indexA_ECDSA_get_ex_new_index libeay32.dllECDSA_get_ex_new_indexECDSA_set_default_methodE_ECDSA_set_default_method libeay32.dllECDSA_set_default_methodECDSA_set_ex_data7_ECDSA_set_ex_data libeay32.dllECDSA_set_ex_dataECDSA_set_method5_ECDSA_set_method libeay32.dllECDSA_set_method ECDSA_sign) _ECDSA_sign libeay32.dll ECDSA_sign ECDSA_sign_ex/_ECDSA_sign_ex libeay32.dll ECDSA_sign_exECDSA_sign_setup5_ECDSA_sign_setup libeay32.dllECDSA_sign_setup ECDSA_size) _ECDSA_size libeay32.dll ECDSA_size ECDSA_verify- _ECDSA_verify libeay32.dll ECDSA_verifyECPKParameters_print=_ECPKParameters_print libeay32.dllECPKParameters_printECPKParameters_print_fpC_ECPKParameters_print_fp libeay32.dllECPKParameters_print_fpECParameters_print9_ECParameters_print libeay32.dllECParameters_printECParameters_print_fp?_ECParameters_print_fp libeay32.dllECParameters_print_fpEC_GF2m_simple_method?_EC_GF2m_simple_method libeay32.dllEC_GF2m_simple_methodEC_GFp_mont_method9_EC_GFp_mont_method libeay32.dllEC_GFp_mont_methodEC_GFp_nist_method9_EC_GFp_nist_method libeay32.dllEC_GFp_nist_methodEC_GFp_simple_method=_EC_GFp_simple_method libeay32.dllEC_GFp_simple_methodEC_GROUP_check1_EC_GROUP_check libeay32.dllEC_GROUP_checkEC_GROUP_check_discriminantK_EC_GROUP_check_discriminant libeay32.dllEC_GROUP_check_discriminantEC_GROUP_clear_free;_EC_GROUP_clear_free libeay32.dllEC_GROUP_clear_free EC_GROUP_cmp- _EC_GROUP_cmp libeay32.dll EC_GROUP_cmp EC_GROUP_copy/_EC_GROUP_copy libeay32.dll EC_GROUP_copy EC_GROUP_dup- _EC_GROUP_dup libeay32.dll EC_GROUP_dup EC_GROUP_free/_EC_GROUP_free libeay32.dll EC_GROUP_freeEC_GROUP_get0_generatorC_EC_GROUP_get0_generator libeay32.dllEC_GROUP_get0_generatorEC_GROUP_get0_seed9_EC_GROUP_get0_seed libeay32.dllEC_GROUP_get0_seedEC_GROUP_get_asn1_flagA_EC_GROUP_get_asn1_flag libeay32.dllEC_GROUP_get_asn1_flagEC_GROUP_get_basis_typeC_EC_GROUP_get_basis_type libeay32.dllEC_GROUP_get_basis_typeEC_GROUP_get_cofactor?_EC_GROUP_get_cofactor libeay32.dllEC_GROUP_get_cofactorEC_GROUP_get_curve_GF2mC_EC_GROUP_get_curve_GF2m libeay32.dllEC_GROUP_get_curve_GF2mEC_GROUP_get_curve_GFpA_EC_GROUP_get_curve_GFp libeay32.dllEC_GROUP_get_curve_GFpEC_GROUP_get_curve_nameC_EC_GROUP_get_curve_name libeay32.dllEC_GROUP_get_curve_nameEC_GROUP_get_degree;_EC_GROUP_get_degree libeay32.dllEC_GROUP_get_degreeEC_GROUP_get_mont_dataA_EC_GROUP_get_mont_data libeay32.dllEC_GROUP_get_mont_dataEC_GROUP_get_order9_EC_GROUP_get_order libeay32.dllEC_GROUP_get_order EC_GROUP_get_pentanomial_basisQ_EC_GROUP_get_pentanomial_basis libeay32.dllEC_GROUP_get_pentanomial_basis$"EC_GROUP_get_point_conversion_formY#_EC_GROUP_get_point_conversion_form libeay32.dll"EC_GROUP_get_point_conversion_formEC_GROUP_get_seed_len?_EC_GROUP_get_seed_len libeay32.dllEC_GROUP_get_seed_lenEC_GROUP_get_trinomial_basisM_EC_GROUP_get_trinomial_basis libeay32.dllEC_GROUP_get_trinomial_basisEC_GROUP_have_precompute_multO_EC_GROUP_have_precompute_mult libeay32.dllEC_GROUP_have_precompute_multEC_GROUP_method_of9_EC_GROUP_method_of libeay32.dllEC_GROUP_method_of EC_GROUP_new- _EC_GROUP_new libeay32.dll EC_GROUP_newEC_GROUP_new_by_curve_nameI_EC_GROUP_new_by_curve_name libeay32.dllEC_GROUP_new_by_curve_nameEC_GROUP_new_curve_GF2mC_EC_GROUP_new_curve_GF2m libeay32.dllEC_GROUP_new_curve_GF2mEC_GROUP_new_curve_GFpA_EC_GROUP_new_curve_GFp libeay32.dllEC_GROUP_new_curve_GFpEC_GROUP_precompute_multE_EC_GROUP_precompute_mult libeay32.dllEC_GROUP_precompute_multEC_GROUP_set_asn1_flagA_EC_GROUP_set_asn1_flag libeay32.dllEC_GROUP_set_asn1_flagEC_GROUP_set_curve_GF2mC_EC_GROUP_set_curve_GF2m libeay32.dllEC_GROUP_set_curve_GF2mEC_GROUP_set_curve_GFpA_EC_GROUP_set_curve_GFp libeay32.dllEC_GROUP_set_curve_GFpEC_GROUP_set_curve_nameC_EC_GROUP_set_curve_name libeay32.dllEC_GROUP_set_curve_nameEC_GROUP_set_generatorA_EC_GROUP_set_generator libeay32.dllEC_GROUP_set_generator$"EC_GROUP_set_point_conversion_formY#_EC_GROUP_set_point_conversion_form libeay32.dll"EC_GROUP_set_point_conversion_formEC_GROUP_set_seed7_EC_GROUP_set_seed libeay32.dllEC_GROUP_set_seedEC_KEY_check_key5_EC_KEY_check_key libeay32.dllEC_KEY_check_keyEC_KEY_clear_flags9_EC_KEY_clear_flags libeay32.dllEC_KEY_clear_flags EC_KEY_copy+ _EC_KEY_copy libeay32.dll EC_KEY_copy EC_KEY_dup) _EC_KEY_dup libeay32.dll EC_KEY_dup EC_KEY_free+ _EC_KEY_free libeay32.dll EC_KEY_freeEC_KEY_generate_key;_EC_KEY_generate_key libeay32.dllEC_KEY_generate_keyEC_KEY_get0_group7_EC_KEY_get0_group libeay32.dllEC_KEY_get0_groupEC_KEY_get0_private_keyC_EC_KEY_get0_private_key libeay32.dllEC_KEY_get0_private_keyEC_KEY_get0_public_keyA_EC_KEY_get0_public_key libeay32.dllEC_KEY_get0_public_keyEC_KEY_get_conv_form=_EC_KEY_get_conv_form libeay32.dllEC_KEY_get_conv_formEC_KEY_get_enc_flags=_EC_KEY_get_enc_flags libeay32.dllEC_KEY_get_enc_flagsEC_KEY_get_flags5_EC_KEY_get_flags libeay32.dllEC_KEY_get_flagsEC_KEY_get_key_method_dataI_EC_KEY_get_key_method_data libeay32.dllEC_KEY_get_key_method_dataEC_KEY_insert_key_method_dataO_EC_KEY_insert_key_method_data libeay32.dllEC_KEY_insert_key_method_data EC_KEY_new) _EC_KEY_new libeay32.dll EC_KEY_newEC_KEY_new_by_curve_nameE_EC_KEY_new_by_curve_name libeay32.dllEC_KEY_new_by_curve_nameEC_KEY_precompute_multA_EC_KEY_precompute_mult libeay32.dllEC_KEY_precompute_mult EC_KEY_print- _EC_KEY_print libeay32.dll EC_KEY_printEC_KEY_print_fp3_EC_KEY_print_fp libeay32.dllEC_KEY_print_fpEC_KEY_set_asn1_flag=_EC_KEY_set_asn1_flag libeay32.dllEC_KEY_set_asn1_flagEC_KEY_set_conv_form=_EC_KEY_set_conv_form libeay32.dllEC_KEY_set_conv_formEC_KEY_set_enc_flags=_EC_KEY_set_enc_flags libeay32.dllEC_KEY_set_enc_flagsEC_KEY_set_flags5_EC_KEY_set_flags libeay32.dllEC_KEY_set_flagsEC_KEY_set_group5_EC_KEY_set_group libeay32.dllEC_KEY_set_groupEC_KEY_set_private_keyA_EC_KEY_set_private_key libeay32.dllEC_KEY_set_private_keyEC_KEY_set_public_key?_EC_KEY_set_public_key libeay32.dllEC_KEY_set_public_key*(EC_KEY_set_public_key_affine_coordinatese)_EC_KEY_set_public_key_affine_coordinates libeay32.dll(EC_KEY_set_public_key_affine_coordinates EC_KEY_up_ref/_EC_KEY_up_ref libeay32.dll EC_KEY_up_refEC_METHOD_get_field_typeE_EC_METHOD_get_field_type libeay32.dllEC_METHOD_get_field_type EC_POINT_add- _EC_POINT_add libeay32.dll EC_POINT_addEC_POINT_bn2point7_EC_POINT_bn2point libeay32.dllEC_POINT_bn2pointEC_POINT_clear_free;_EC_POINT_clear_free libeay32.dllEC_POINT_clear_free EC_POINT_cmp- _EC_POINT_cmp libeay32.dll EC_POINT_cmp EC_POINT_copy/_EC_POINT_copy libeay32.dll EC_POINT_copy EC_POINT_dbl- _EC_POINT_dbl libeay32.dll EC_POINT_dbl EC_POINT_dup- _EC_POINT_dup libeay32.dll EC_POINT_dup EC_POINT_free/_EC_POINT_free libeay32.dll EC_POINT_free*(EC_POINT_get_Jprojective_coordinates_GFpe)_EC_POINT_get_Jprojective_coordinates_GFp libeay32.dll(EC_POINT_get_Jprojective_coordinates_GFp&$EC_POINT_get_affine_coordinates_GF2m]%_EC_POINT_get_affine_coordinates_GF2m libeay32.dll$EC_POINT_get_affine_coordinates_GF2m%#EC_POINT_get_affine_coordinates_GFp[$_EC_POINT_get_affine_coordinates_GFp libeay32.dll#EC_POINT_get_affine_coordinates_GFpEC_POINT_hex2point9_EC_POINT_hex2point libeay32.dllEC_POINT_hex2pointEC_POINT_invert3_EC_POINT_invert libeay32.dllEC_POINT_invertEC_POINT_is_at_infinityC_EC_POINT_is_at_infinity libeay32.dllEC_POINT_is_at_infinityEC_POINT_is_on_curve=_EC_POINT_is_on_curve libeay32.dllEC_POINT_is_on_curveEC_POINT_make_affine=_EC_POINT_make_affine libeay32.dllEC_POINT_make_affineEC_POINT_method_of9_EC_POINT_method_of libeay32.dllEC_POINT_method_of EC_POINT_mul- _EC_POINT_mul libeay32.dll EC_POINT_mul EC_POINT_new- _EC_POINT_new libeay32.dll EC_POINT_newEC_POINT_oct2point9_EC_POINT_oct2point libeay32.dllEC_POINT_oct2pointEC_POINT_point2bn7_EC_POINT_point2bn libeay32.dllEC_POINT_point2bnEC_POINT_point2hex9_EC_POINT_point2hex libeay32.dllEC_POINT_point2hexEC_POINT_point2oct9_EC_POINT_point2oct libeay32.dllEC_POINT_point2oct*(EC_POINT_set_Jprojective_coordinates_GFpe)_EC_POINT_set_Jprojective_coordinates_GFp libeay32.dll(EC_POINT_set_Jprojective_coordinates_GFp&$EC_POINT_set_affine_coordinates_GF2m]%_EC_POINT_set_affine_coordinates_GF2m libeay32.dll$EC_POINT_set_affine_coordinates_GF2m%#EC_POINT_set_affine_coordinates_GFp[$_EC_POINT_set_affine_coordinates_GFp libeay32.dll#EC_POINT_set_affine_coordinates_GFp*(EC_POINT_set_compressed_coordinates_GF2me)_EC_POINT_set_compressed_coordinates_GF2m libeay32.dll(EC_POINT_set_compressed_coordinates_GF2m)'EC_POINT_set_compressed_coordinates_GFpc(_EC_POINT_set_compressed_coordinates_GFp libeay32.dll'EC_POINT_set_compressed_coordinates_GFpEC_POINT_set_to_infinityE_EC_POINT_set_to_infinity libeay32.dllEC_POINT_set_to_infinityEC_POINTs_make_affine?_EC_POINTs_make_affine libeay32.dllEC_POINTs_make_affine EC_POINTs_mul/_EC_POINTs_mul libeay32.dll EC_POINTs_mulEC_curve_nid2nist7_EC_curve_nid2nist libeay32.dllEC_curve_nid2nistEC_curve_nist2nid7_EC_curve_nist2nid libeay32.dllEC_curve_nist2nidEC_get_builtin_curves?_EC_get_builtin_curves libeay32.dllEC_get_builtin_curvesEDIPARTYNAME_free7_EDIPARTYNAME_free libeay32.dllEDIPARTYNAME_freeEDIPARTYNAME_it3_EDIPARTYNAME_it libeay32.dllEDIPARTYNAME_itEDIPARTYNAME_new5_EDIPARTYNAME_new libeay32.dllEDIPARTYNAME_new ENGINE_add) _ENGINE_add libeay32.dll ENGINE_addENGINE_add_conf_moduleA_ENGINE_add_conf_module libeay32.dllENGINE_add_conf_module ENGINE_by_id- _ENGINE_by_id libeay32.dll ENGINE_by_idENGINE_cleanup1_ENGINE_cleanup libeay32.dllENGINE_cleanupENGINE_cmd_is_executableE_ENGINE_cmd_is_executable libeay32.dllENGINE_cmd_is_executable ENGINE_ctrl+ _ENGINE_ctrl libeay32.dll ENGINE_ctrlENGINE_ctrl_cmd3_ENGINE_ctrl_cmd libeay32.dllENGINE_ctrl_cmdENGINE_ctrl_cmd_stringA_ENGINE_ctrl_cmd_string libeay32.dllENGINE_ctrl_cmd_string ENGINE_finish/_ENGINE_finish libeay32.dll ENGINE_finish ENGINE_free+ _ENGINE_free libeay32.dll ENGINE_free ENGINE_get_DH/_ENGINE_get_DH libeay32.dll ENGINE_get_DHENGINE_get_DSA1_ENGINE_get_DSA libeay32.dllENGINE_get_DSAENGINE_get_ECDH3_ENGINE_get_ECDH libeay32.dllENGINE_get_ECDHENGINE_get_ECDSA5_ENGINE_get_ECDSA libeay32.dllENGINE_get_ECDSAENGINE_get_RAND3_ENGINE_get_RAND libeay32.dllENGINE_get_RANDENGINE_get_RSA1_ENGINE_get_RSA libeay32.dllENGINE_get_RSAENGINE_get_STORE5_ENGINE_get_STORE libeay32.dllENGINE_get_STOREENGINE_get_cipher7_ENGINE_get_cipher libeay32.dllENGINE_get_cipherENGINE_get_cipher_engineE_ENGINE_get_cipher_engine libeay32.dllENGINE_get_cipher_engineENGINE_get_ciphers9_ENGINE_get_ciphers libeay32.dllENGINE_get_ciphersENGINE_get_cmd_defns=_ENGINE_get_cmd_defns libeay32.dllENGINE_get_cmd_defnsENGINE_get_ctrl_functionE_ENGINE_get_ctrl_function libeay32.dllENGINE_get_ctrl_functionENGINE_get_default_DH?_ENGINE_get_default_DH libeay32.dllENGINE_get_default_DHENGINE_get_default_DSAA_ENGINE_get_default_DSA libeay32.dllENGINE_get_default_DSAENGINE_get_default_ECDHC_ENGINE_get_default_ECDH libeay32.dllENGINE_get_default_ECDHENGINE_get_default_ECDSAE_ENGINE_get_default_ECDSA libeay32.dllENGINE_get_default_ECDSAENGINE_get_default_RANDC_ENGINE_get_default_RAND libeay32.dllENGINE_get_default_RANDENGINE_get_default_RSAA_ENGINE_get_default_RSA libeay32.dllENGINE_get_default_RSAENGINE_get_destroy_functionK_ENGINE_get_destroy_function libeay32.dllENGINE_get_destroy_functionENGINE_get_digest7_ENGINE_get_digest libeay32.dllENGINE_get_digestENGINE_get_digest_engineE_ENGINE_get_digest_engine libeay32.dllENGINE_get_digest_engineENGINE_get_digests9_ENGINE_get_digests libeay32.dllENGINE_get_digestsENGINE_get_ex_data9_ENGINE_get_ex_data libeay32.dllENGINE_get_ex_dataENGINE_get_ex_new_indexC_ENGINE_get_ex_new_index libeay32.dllENGINE_get_ex_new_indexENGINE_get_finish_functionI_ENGINE_get_finish_function libeay32.dllENGINE_get_finish_functionENGINE_get_first5_ENGINE_get_first libeay32.dllENGINE_get_firstENGINE_get_flags5_ENGINE_get_flags libeay32.dllENGINE_get_flags ENGINE_get_id/_ENGINE_get_id libeay32.dll ENGINE_get_idENGINE_get_init_functionE_ENGINE_get_init_function libeay32.dllENGINE_get_init_functionENGINE_get_last3_ENGINE_get_last libeay32.dllENGINE_get_last" ENGINE_get_load_privkey_functionU!_ENGINE_get_load_privkey_function libeay32.dll ENGINE_get_load_privkey_function!ENGINE_get_load_pubkey_functionS _ENGINE_get_load_pubkey_function libeay32.dllENGINE_get_load_pubkey_functionENGINE_get_name3_ENGINE_get_name libeay32.dllENGINE_get_nameENGINE_get_next3_ENGINE_get_next libeay32.dllENGINE_get_nextENGINE_get_pkey_asn1_methG_ENGINE_get_pkey_asn1_meth libeay32.dllENGINE_get_pkey_asn1_meth" ENGINE_get_pkey_asn1_meth_engineU!_ENGINE_get_pkey_asn1_meth_engine libeay32.dll ENGINE_get_pkey_asn1_meth_engineENGINE_get_pkey_asn1_meth_strO_ENGINE_get_pkey_asn1_meth_str libeay32.dllENGINE_get_pkey_asn1_meth_strENGINE_get_pkey_asn1_methsI_ENGINE_get_pkey_asn1_meths libeay32.dllENGINE_get_pkey_asn1_methsENGINE_get_pkey_meth=_ENGINE_get_pkey_meth libeay32.dllENGINE_get_pkey_methENGINE_get_pkey_meth_engineK_ENGINE_get_pkey_meth_engine libeay32.dllENGINE_get_pkey_meth_engineENGINE_get_pkey_meths?_ENGINE_get_pkey_meths libeay32.dllENGINE_get_pkey_methsENGINE_get_prev3_ENGINE_get_prev libeay32.dllENGINE_get_prev%#ENGINE_get_ssl_client_cert_function[$_ENGINE_get_ssl_client_cert_function libeay32.dll#ENGINE_get_ssl_client_cert_functionENGINE_get_static_stateC_ENGINE_get_static_state libeay32.dllENGINE_get_static_stateENGINE_get_table_flagsA_ENGINE_get_table_flags libeay32.dllENGINE_get_table_flags ENGINE_init+ _ENGINE_init libeay32.dll ENGINE_initENGINE_load_builtin_enginesK_ENGINE_load_builtin_engines libeay32.dllENGINE_load_builtin_enginesENGINE_load_cryptodev?_ENGINE_load_cryptodev libeay32.dllENGINE_load_cryptodevENGINE_load_dynamic;_ENGINE_load_dynamic libeay32.dllENGINE_load_dynamicENGINE_load_openssl;_ENGINE_load_openssl libeay32.dllENGINE_load_opensslENGINE_load_private_keyC_ENGINE_load_private_key libeay32.dllENGINE_load_private_keyENGINE_load_public_keyA_ENGINE_load_public_key libeay32.dllENGINE_load_public_keyENGINE_load_rdrand9_ENGINE_load_rdrand libeay32.dllENGINE_load_rdrandENGINE_load_ssl_client_certK_ENGINE_load_ssl_client_cert libeay32.dllENGINE_load_ssl_client_cert ENGINE_new) _ENGINE_new libeay32.dll ENGINE_newENGINE_pkey_asn1_find_strG_ENGINE_pkey_asn1_find_str libeay32.dllENGINE_pkey_asn1_find_strENGINE_register_DH9_ENGINE_register_DH libeay32.dllENGINE_register_DHENGINE_register_DSA;_ENGINE_register_DSA libeay32.dllENGINE_register_DSAENGINE_register_ECDH=_ENGINE_register_ECDH libeay32.dllENGINE_register_ECDHENGINE_register_ECDSA?_ENGINE_register_ECDSA libeay32.dllENGINE_register_ECDSAENGINE_register_RAND=_ENGINE_register_RAND libeay32.dllENGINE_register_RANDENGINE_register_RSA;_ENGINE_register_RSA libeay32.dllENGINE_register_RSAENGINE_register_STORE?_ENGINE_register_STORE libeay32.dllENGINE_register_STOREENGINE_register_all_DHA_ENGINE_register_all_DH libeay32.dllENGINE_register_all_DHENGINE_register_all_DSAC_ENGINE_register_all_DSA libeay32.dllENGINE_register_all_DSAENGINE_register_all_ECDHE_ENGINE_register_all_ECDH libeay32.dllENGINE_register_all_ECDHENGINE_register_all_ECDSAG_ENGINE_register_all_ECDSA libeay32.dllENGINE_register_all_ECDSAENGINE_register_all_RANDE_ENGINE_register_all_RAND libeay32.dllENGINE_register_all_RANDENGINE_register_all_RSAC_ENGINE_register_all_RSA libeay32.dllENGINE_register_all_RSAENGINE_register_all_STOREG_ENGINE_register_all_STORE libeay32.dllENGINE_register_all_STOREENGINE_register_all_ciphersK_ENGINE_register_all_ciphers libeay32.dllENGINE_register_all_ciphersENGINE_register_all_completeM_ENGINE_register_all_complete libeay32.dllENGINE_register_all_completeENGINE_register_all_digestsK_ENGINE_register_all_digests libeay32.dllENGINE_register_all_digests%#ENGINE_register_all_pkey_asn1_meths[$_ENGINE_register_all_pkey_asn1_meths libeay32.dll#ENGINE_register_all_pkey_asn1_meths ENGINE_register_all_pkey_methsQ_ENGINE_register_all_pkey_meths libeay32.dllENGINE_register_all_pkey_methsENGINE_register_ciphersC_ENGINE_register_ciphers libeay32.dllENGINE_register_ciphersENGINE_register_completeE_ENGINE_register_complete libeay32.dllENGINE_register_completeENGINE_register_digestsC_ENGINE_register_digests libeay32.dllENGINE_register_digests!ENGINE_register_pkey_asn1_methsS _ENGINE_register_pkey_asn1_meths libeay32.dllENGINE_register_pkey_asn1_methsENGINE_register_pkey_methsI_ENGINE_register_pkey_meths libeay32.dllENGINE_register_pkey_meths ENGINE_remove/_ENGINE_remove libeay32.dll ENGINE_remove ENGINE_set_DH/_ENGINE_set_DH libeay32.dll ENGINE_set_DHENGINE_set_DSA1_ENGINE_set_DSA libeay32.dllENGINE_set_DSAENGINE_set_ECDH3_ENGINE_set_ECDH libeay32.dllENGINE_set_ECDHENGINE_set_ECDSA5_ENGINE_set_ECDSA libeay32.dllENGINE_set_ECDSAENGINE_set_RAND3_ENGINE_set_RAND libeay32.dllENGINE_set_RANDENGINE_set_RSA1_ENGINE_set_RSA libeay32.dllENGINE_set_RSAENGINE_set_STORE5_ENGINE_set_STORE libeay32.dllENGINE_set_STOREENGINE_set_ciphers9_ENGINE_set_ciphers libeay32.dllENGINE_set_ciphersENGINE_set_cmd_defns=_ENGINE_set_cmd_defns libeay32.dllENGINE_set_cmd_defnsENGINE_set_ctrl_functionE_ENGINE_set_ctrl_function libeay32.dllENGINE_set_ctrl_functionENGINE_set_default9_ENGINE_set_default libeay32.dllENGINE_set_defaultENGINE_set_default_DH?_ENGINE_set_default_DH libeay32.dllENGINE_set_default_DHENGINE_set_default_DSAA_ENGINE_set_default_DSA libeay32.dllENGINE_set_default_DSAENGINE_set_default_ECDHC_ENGINE_set_default_ECDH libeay32.dllENGINE_set_default_ECDHENGINE_set_default_ECDSAE_ENGINE_set_default_ECDSA libeay32.dllENGINE_set_default_ECDSAENGINE_set_default_RANDC_ENGINE_set_default_RAND libeay32.dllENGINE_set_default_RANDENGINE_set_default_RSAA_ENGINE_set_default_RSA libeay32.dllENGINE_set_default_RSAENGINE_set_default_ciphersI_ENGINE_set_default_ciphers libeay32.dllENGINE_set_default_ciphersENGINE_set_default_digestsI_ENGINE_set_default_digests libeay32.dllENGINE_set_default_digests$"ENGINE_set_default_pkey_asn1_methsY#_ENGINE_set_default_pkey_asn1_meths libeay32.dll"ENGINE_set_default_pkey_asn1_methsENGINE_set_default_pkey_methsO_ENGINE_set_default_pkey_meths libeay32.dllENGINE_set_default_pkey_methsENGINE_set_default_stringG_ENGINE_set_default_string libeay32.dllENGINE_set_default_stringENGINE_set_destroy_functionK_ENGINE_set_destroy_function libeay32.dllENGINE_set_destroy_functionENGINE_set_digests9_ENGINE_set_digests libeay32.dllENGINE_set_digestsENGINE_set_ex_data9_ENGINE_set_ex_data libeay32.dllENGINE_set_ex_dataENGINE_set_finish_functionI_ENGINE_set_finish_function libeay32.dllENGINE_set_finish_functionENGINE_set_flags5_ENGINE_set_flags libeay32.dllENGINE_set_flags ENGINE_set_id/_ENGINE_set_id libeay32.dll ENGINE_set_idENGINE_set_init_functionE_ENGINE_set_init_function libeay32.dllENGINE_set_init_function" ENGINE_set_load_privkey_functionU!_ENGINE_set_load_privkey_function libeay32.dll ENGINE_set_load_privkey_function!ENGINE_set_load_pubkey_functionS _ENGINE_set_load_pubkey_function libeay32.dllENGINE_set_load_pubkey_function*(ENGINE_set_load_ssl_client_cert_functione)_ENGINE_set_load_ssl_client_cert_function libeay32.dll(ENGINE_set_load_ssl_client_cert_functionENGINE_set_name3_ENGINE_set_name libeay32.dllENGINE_set_nameENGINE_set_pkey_asn1_methsI_ENGINE_set_pkey_asn1_meths libeay32.dllENGINE_set_pkey_asn1_methsENGINE_set_pkey_meths?_ENGINE_set_pkey_meths libeay32.dllENGINE_set_pkey_methsENGINE_set_table_flagsA_ENGINE_set_table_flags libeay32.dllENGINE_set_table_flagsENGINE_unregister_DH=_ENGINE_unregister_DH libeay32.dllENGINE_unregister_DHENGINE_unregister_DSA?_ENGINE_unregister_DSA libeay32.dllENGINE_unregister_DSAENGINE_unregister_ECDHA_ENGINE_unregister_ECDH libeay32.dllENGINE_unregister_ECDHENGINE_unregister_ECDSAC_ENGINE_unregister_ECDSA libeay32.dllENGINE_unregister_ECDSAENGINE_unregister_RANDA_ENGINE_unregister_RAND libeay32.dllENGINE_unregister_RANDENGINE_unregister_RSA?_ENGINE_unregister_RSA libeay32.dllENGINE_unregister_RSAENGINE_unregister_STOREC_ENGINE_unregister_STORE libeay32.dllENGINE_unregister_STOREENGINE_unregister_ciphersG_ENGINE_unregister_ciphers libeay32.dllENGINE_unregister_ciphersENGINE_unregister_digestsG_ENGINE_unregister_digests libeay32.dllENGINE_unregister_digests#!ENGINE_unregister_pkey_asn1_methsW"_ENGINE_unregister_pkey_asn1_meths libeay32.dll!ENGINE_unregister_pkey_asn1_methsENGINE_unregister_pkey_methsM_ENGINE_unregister_pkey_meths libeay32.dllENGINE_unregister_pkey_meths ENGINE_up_ref/_ENGINE_up_ref libeay32.dll ENGINE_up_refERR_add_error_data9_ERR_add_error_data libeay32.dllERR_add_error_dataERR_add_error_vdata;_ERR_add_error_vdata libeay32.dllERR_add_error_vdataERR_clear_error3_ERR_clear_error libeay32.dllERR_clear_errorERR_error_string5_ERR_error_string libeay32.dllERR_error_stringERR_error_string_n9_ERR_error_string_n libeay32.dllERR_error_string_nERR_free_strings5_ERR_free_strings libeay32.dllERR_free_stringsERR_func_error_string?_ERR_func_error_string libeay32.dllERR_func_error_stringERR_get_err_state_tableC_ERR_get_err_state_table libeay32.dllERR_get_err_state_table ERR_get_error/_ERR_get_error libeay32.dll ERR_get_errorERR_get_error_line9_ERR_get_error_line libeay32.dllERR_get_error_lineERR_get_error_line_dataC_ERR_get_error_line_data libeay32.dllERR_get_error_line_dataERR_get_implementationA_ERR_get_implementation libeay32.dllERR_get_implementationERR_get_next_error_libraryI_ERR_get_next_error_library libeay32.dllERR_get_next_error_library ERR_get_state/_ERR_get_state libeay32.dll ERR_get_stateERR_get_string_table=_ERR_get_string_table libeay32.dllERR_get_string_tableERR_lib_error_string=_ERR_lib_error_string libeay32.dllERR_lib_error_stringERR_load_ASN1_strings?_ERR_load_ASN1_strings libeay32.dllERR_load_ASN1_stringsERR_load_BIO_strings=_ERR_load_BIO_strings libeay32.dllERR_load_BIO_stringsERR_load_BN_strings;_ERR_load_BN_strings libeay32.dllERR_load_BN_stringsERR_load_BUF_strings=_ERR_load_BUF_strings libeay32.dllERR_load_BUF_stringsERR_load_CMS_strings=_ERR_load_CMS_strings libeay32.dllERR_load_CMS_stringsERR_load_COMP_strings?_ERR_load_COMP_strings libeay32.dllERR_load_COMP_stringsERR_load_CONF_strings?_ERR_load_CONF_strings libeay32.dllERR_load_CONF_stringsERR_load_CRYPTO_stringsC_ERR_load_CRYPTO_strings libeay32.dllERR_load_CRYPTO_stringsERR_load_DH_strings;_ERR_load_DH_strings libeay32.dllERR_load_DH_stringsERR_load_DSA_strings=_ERR_load_DSA_strings libeay32.dllERR_load_DSA_stringsERR_load_DSO_strings=_ERR_load_DSO_strings libeay32.dllERR_load_DSO_stringsERR_load_ECDH_strings?_ERR_load_ECDH_strings libeay32.dllERR_load_ECDH_stringsERR_load_ECDSA_stringsA_ERR_load_ECDSA_strings libeay32.dllERR_load_ECDSA_stringsERR_load_EC_strings;_ERR_load_EC_strings libeay32.dllERR_load_EC_stringsERR_load_ENGINE_stringsC_ERR_load_ENGINE_strings libeay32.dllERR_load_ENGINE_stringsERR_load_ERR_strings=_ERR_load_ERR_strings libeay32.dllERR_load_ERR_stringsERR_load_EVP_strings=_ERR_load_EVP_strings libeay32.dllERR_load_EVP_stringsERR_load_OBJ_strings=_ERR_load_OBJ_strings libeay32.dllERR_load_OBJ_stringsERR_load_OCSP_strings?_ERR_load_OCSP_strings libeay32.dllERR_load_OCSP_stringsERR_load_PEM_strings=_ERR_load_PEM_strings libeay32.dllERR_load_PEM_stringsERR_load_PKCS12_stringsC_ERR_load_PKCS12_strings libeay32.dllERR_load_PKCS12_stringsERR_load_PKCS7_stringsA_ERR_load_PKCS7_strings libeay32.dllERR_load_PKCS7_stringsERR_load_RAND_strings?_ERR_load_RAND_strings libeay32.dllERR_load_RAND_stringsERR_load_RSA_strings=_ERR_load_RSA_strings libeay32.dllERR_load_RSA_stringsERR_load_TS_strings;_ERR_load_TS_strings libeay32.dllERR_load_TS_stringsERR_load_UI_strings;_ERR_load_UI_strings libeay32.dllERR_load_UI_stringsERR_load_X509V3_stringsC_ERR_load_X509V3_strings libeay32.dllERR_load_X509V3_stringsERR_load_X509_strings?_ERR_load_X509_strings libeay32.dllERR_load_X509_stringsERR_load_crypto_stringsC_ERR_load_crypto_strings libeay32.dllERR_load_crypto_stringsERR_load_strings5_ERR_load_strings libeay32.dllERR_load_stringsERR_peek_error1_ERR_peek_error libeay32.dllERR_peek_errorERR_peek_error_line;_ERR_peek_error_line libeay32.dllERR_peek_error_lineERR_peek_error_line_dataE_ERR_peek_error_line_data libeay32.dllERR_peek_error_line_dataERR_peek_last_error;_ERR_peek_last_error libeay32.dllERR_peek_last_errorERR_peek_last_error_lineE_ERR_peek_last_error_line libeay32.dllERR_peek_last_error_lineERR_peek_last_error_line_dataO_ERR_peek_last_error_line_data libeay32.dllERR_peek_last_error_line_dataERR_pop_to_mark3_ERR_pop_to_mark libeay32.dllERR_pop_to_markERR_print_errors5_ERR_print_errors libeay32.dllERR_print_errorsERR_print_errors_cb;_ERR_print_errors_cb libeay32.dllERR_print_errors_cbERR_print_errors_fp;_ERR_print_errors_fp libeay32.dllERR_print_errors_fp ERR_put_error/_ERR_put_error libeay32.dll ERR_put_errorERR_reason_error_stringC_ERR_reason_error_string libeay32.dllERR_reason_error_stringERR_release_err_state_tableK_ERR_release_err_state_table libeay32.dllERR_release_err_state_tableERR_remove_state5_ERR_remove_state libeay32.dllERR_remove_stateERR_remove_thread_stateC_ERR_remove_thread_state libeay32.dllERR_remove_thread_stateERR_set_error_data9_ERR_set_error_data libeay32.dllERR_set_error_dataERR_set_implementationA_ERR_set_implementation libeay32.dllERR_set_implementation ERR_set_mark- _ERR_set_mark libeay32.dll ERR_set_markERR_unload_strings9_ERR_unload_strings libeay32.dllERR_unload_stringsESS_CERT_ID_dup3_ESS_CERT_ID_dup libeay32.dllESS_CERT_ID_dupESS_CERT_ID_free5_ESS_CERT_ID_free libeay32.dllESS_CERT_ID_freeESS_CERT_ID_new3_ESS_CERT_ID_new libeay32.dllESS_CERT_ID_newESS_ISSUER_SERIAL_dup?_ESS_ISSUER_SERIAL_dup libeay32.dllESS_ISSUER_SERIAL_dupESS_ISSUER_SERIAL_freeA_ESS_ISSUER_SERIAL_free libeay32.dllESS_ISSUER_SERIAL_freeESS_ISSUER_SERIAL_new?_ESS_ISSUER_SERIAL_new libeay32.dllESS_ISSUER_SERIAL_newESS_SIGNING_CERT_dup=_ESS_SIGNING_CERT_dup libeay32.dllESS_SIGNING_CERT_dupESS_SIGNING_CERT_free?_ESS_SIGNING_CERT_free libeay32.dllESS_SIGNING_CERT_freeESS_SIGNING_CERT_new=_ESS_SIGNING_CERT_new libeay32.dllESS_SIGNING_CERT_newEVP_BytesToKey1_EVP_BytesToKey libeay32.dllEVP_BytesToKeyEVP_CIPHER_CTX_block_sizeG_EVP_CIPHER_CTX_block_size libeay32.dllEVP_CIPHER_CTX_block_sizeEVP_CIPHER_CTX_cipher?_EVP_CIPHER_CTX_cipher libeay32.dllEVP_CIPHER_CTX_cipherEVP_CIPHER_CTX_cleanupA_EVP_CIPHER_CTX_cleanup libeay32.dllEVP_CIPHER_CTX_cleanupEVP_CIPHER_CTX_clear_flagsI_EVP_CIPHER_CTX_clear_flags libeay32.dllEVP_CIPHER_CTX_clear_flagsEVP_CIPHER_CTX_copy;_EVP_CIPHER_CTX_copy libeay32.dllEVP_CIPHER_CTX_copyEVP_CIPHER_CTX_ctrl;_EVP_CIPHER_CTX_ctrl libeay32.dllEVP_CIPHER_CTX_ctrlEVP_CIPHER_CTX_flags=_EVP_CIPHER_CTX_flags libeay32.dllEVP_CIPHER_CTX_flagsEVP_CIPHER_CTX_free;_EVP_CIPHER_CTX_free libeay32.dllEVP_CIPHER_CTX_freeEVP_CIPHER_CTX_get_app_dataK_EVP_CIPHER_CTX_get_app_data libeay32.dllEVP_CIPHER_CTX_get_app_dataEVP_CIPHER_CTX_init;_EVP_CIPHER_CTX_init libeay32.dllEVP_CIPHER_CTX_initEVP_CIPHER_CTX_iv_lengthE_EVP_CIPHER_CTX_iv_length libeay32.dllEVP_CIPHER_CTX_iv_lengthEVP_CIPHER_CTX_key_lengthG_EVP_CIPHER_CTX_key_length libeay32.dllEVP_CIPHER_CTX_key_lengthEVP_CIPHER_CTX_new9_EVP_CIPHER_CTX_new libeay32.dllEVP_CIPHER_CTX_newEVP_CIPHER_CTX_nid9_EVP_CIPHER_CTX_nid libeay32.dllEVP_CIPHER_CTX_nidEVP_CIPHER_CTX_rand_keyC_EVP_CIPHER_CTX_rand_key libeay32.dllEVP_CIPHER_CTX_rand_keyEVP_CIPHER_CTX_set_app_dataK_EVP_CIPHER_CTX_set_app_data libeay32.dllEVP_CIPHER_CTX_set_app_dataEVP_CIPHER_CTX_set_flagsE_EVP_CIPHER_CTX_set_flags libeay32.dllEVP_CIPHER_CTX_set_flagsEVP_CIPHER_CTX_set_key_lengthO_EVP_CIPHER_CTX_set_key_length libeay32.dllEVP_CIPHER_CTX_set_key_lengthEVP_CIPHER_CTX_set_paddingI_EVP_CIPHER_CTX_set_padding libeay32.dllEVP_CIPHER_CTX_set_paddingEVP_CIPHER_CTX_test_flagsG_EVP_CIPHER_CTX_test_flags libeay32.dllEVP_CIPHER_CTX_test_flagsEVP_CIPHER_asn1_to_paramE_EVP_CIPHER_asn1_to_param libeay32.dllEVP_CIPHER_asn1_to_paramEVP_CIPHER_block_size?_EVP_CIPHER_block_size libeay32.dllEVP_CIPHER_block_sizeEVP_CIPHER_do_all7_EVP_CIPHER_do_all libeay32.dllEVP_CIPHER_do_allEVP_CIPHER_do_all_sortedE_EVP_CIPHER_do_all_sorted libeay32.dllEVP_CIPHER_do_all_sortedEVP_CIPHER_flags5_EVP_CIPHER_flags libeay32.dllEVP_CIPHER_flagsEVP_CIPHER_get_asn1_ivA_EVP_CIPHER_get_asn1_iv libeay32.dllEVP_CIPHER_get_asn1_ivEVP_CIPHER_iv_length=_EVP_CIPHER_iv_length libeay32.dllEVP_CIPHER_iv_lengthEVP_CIPHER_key_length?_EVP_CIPHER_key_length libeay32.dllEVP_CIPHER_key_lengthEVP_CIPHER_nid1_EVP_CIPHER_nid libeay32.dllEVP_CIPHER_nidEVP_CIPHER_param_to_asn1E_EVP_CIPHER_param_to_asn1 libeay32.dllEVP_CIPHER_param_to_asn1EVP_CIPHER_set_asn1_ivA_EVP_CIPHER_set_asn1_iv libeay32.dllEVP_CIPHER_set_asn1_ivEVP_CIPHER_type3_EVP_CIPHER_type libeay32.dllEVP_CIPHER_type EVP_Cipher) _EVP_Cipher libeay32.dll EVP_CipherEVP_CipherFinal3_EVP_CipherFinal libeay32.dllEVP_CipherFinalEVP_CipherFinal_ex9_EVP_CipherFinal_ex libeay32.dllEVP_CipherFinal_exEVP_CipherInit1_EVP_CipherInit libeay32.dllEVP_CipherInitEVP_CipherInit_ex7_EVP_CipherInit_ex libeay32.dllEVP_CipherInit_exEVP_CipherUpdate5_EVP_CipherUpdate libeay32.dllEVP_CipherUpdateEVP_DecodeBlock3_EVP_DecodeBlock libeay32.dllEVP_DecodeBlockEVP_DecodeFinal3_EVP_DecodeFinal libeay32.dllEVP_DecodeFinalEVP_DecodeInit1_EVP_DecodeInit libeay32.dllEVP_DecodeInitEVP_DecodeUpdate5_EVP_DecodeUpdate libeay32.dllEVP_DecodeUpdateEVP_DecryptFinal5_EVP_DecryptFinal libeay32.dllEVP_DecryptFinalEVP_DecryptFinal_ex;_EVP_DecryptFinal_ex libeay32.dllEVP_DecryptFinal_exEVP_DecryptInit3_EVP_DecryptInit libeay32.dllEVP_DecryptInitEVP_DecryptInit_ex9_EVP_DecryptInit_ex libeay32.dllEVP_DecryptInit_exEVP_DecryptUpdate7_EVP_DecryptUpdate libeay32.dllEVP_DecryptUpdate EVP_Digest) _EVP_Digest libeay32.dll EVP_DigestEVP_DigestFinal3_EVP_DigestFinal libeay32.dllEVP_DigestFinalEVP_DigestFinal_ex9_EVP_DigestFinal_ex libeay32.dllEVP_DigestFinal_exEVP_DigestInit1_EVP_DigestInit libeay32.dllEVP_DigestInitEVP_DigestInit_ex7_EVP_DigestInit_ex libeay32.dllEVP_DigestInit_exEVP_DigestSignFinal;_EVP_DigestSignFinal libeay32.dllEVP_DigestSignFinalEVP_DigestSignInit9_EVP_DigestSignInit libeay32.dllEVP_DigestSignInitEVP_DigestUpdate5_EVP_DigestUpdate libeay32.dllEVP_DigestUpdateEVP_DigestVerifyFinal?_EVP_DigestVerifyFinal libeay32.dllEVP_DigestVerifyFinalEVP_DigestVerifyInit=_EVP_DigestVerifyInit libeay32.dllEVP_DigestVerifyInitEVP_EncodeBlock3_EVP_EncodeBlock libeay32.dllEVP_EncodeBlockEVP_EncodeFinal3_EVP_EncodeFinal libeay32.dllEVP_EncodeFinalEVP_EncodeInit1_EVP_EncodeInit libeay32.dllEVP_EncodeInitEVP_EncodeUpdate5_EVP_EncodeUpdate libeay32.dllEVP_EncodeUpdateEVP_EncryptFinal5_EVP_EncryptFinal libeay32.dllEVP_EncryptFinalEVP_EncryptFinal_ex;_EVP_EncryptFinal_ex libeay32.dllEVP_EncryptFinal_exEVP_EncryptInit3_EVP_EncryptInit libeay32.dllEVP_EncryptInitEVP_EncryptInit_ex9_EVP_EncryptInit_ex libeay32.dllEVP_EncryptInit_exEVP_EncryptUpdate7_EVP_EncryptUpdate libeay32.dllEVP_EncryptUpdateEVP_MD_CTX_cleanup9_EVP_MD_CTX_cleanup libeay32.dllEVP_MD_CTX_cleanupEVP_MD_CTX_clear_flagsA_EVP_MD_CTX_clear_flags libeay32.dllEVP_MD_CTX_clear_flagsEVP_MD_CTX_copy3_EVP_MD_CTX_copy libeay32.dllEVP_MD_CTX_copyEVP_MD_CTX_copy_ex9_EVP_MD_CTX_copy_ex libeay32.dllEVP_MD_CTX_copy_exEVP_MD_CTX_create7_EVP_MD_CTX_create libeay32.dllEVP_MD_CTX_createEVP_MD_CTX_destroy9_EVP_MD_CTX_destroy libeay32.dllEVP_MD_CTX_destroyEVP_MD_CTX_init3_EVP_MD_CTX_init libeay32.dllEVP_MD_CTX_init EVP_MD_CTX_md/_EVP_MD_CTX_md libeay32.dll EVP_MD_CTX_mdEVP_MD_CTX_set_flags=_EVP_MD_CTX_set_flags libeay32.dllEVP_MD_CTX_set_flagsEVP_MD_CTX_test_flags?_EVP_MD_CTX_test_flags libeay32.dllEVP_MD_CTX_test_flagsEVP_MD_block_size7_EVP_MD_block_size libeay32.dllEVP_MD_block_size EVP_MD_do_all/_EVP_MD_do_all libeay32.dll EVP_MD_do_allEVP_MD_do_all_sorted=_EVP_MD_do_all_sorted libeay32.dllEVP_MD_do_all_sorted EVP_MD_flags- _EVP_MD_flags libeay32.dll EVP_MD_flagsEVP_MD_pkey_type5_EVP_MD_pkey_type libeay32.dllEVP_MD_pkey_type EVP_MD_size+ _EVP_MD_size libeay32.dll EVP_MD_size EVP_MD_type+ _EVP_MD_type libeay32.dll EVP_MD_type EVP_OpenFinal/_EVP_OpenFinal libeay32.dll EVP_OpenFinal EVP_OpenInit- _EVP_OpenInit libeay32.dll EVP_OpenInitEVP_PBE_CipherInit9_EVP_PBE_CipherInit libeay32.dllEVP_PBE_CipherInitEVP_PBE_alg_add3_EVP_PBE_alg_add libeay32.dllEVP_PBE_alg_addEVP_PBE_alg_add_type=_EVP_PBE_alg_add_type libeay32.dllEVP_PBE_alg_add_typeEVP_PBE_cleanup3_EVP_PBE_cleanup libeay32.dllEVP_PBE_cleanup EVP_PBE_find- _EVP_PBE_find libeay32.dll EVP_PBE_findEVP_PKCS82PKEY1_EVP_PKCS82PKEY libeay32.dllEVP_PKCS82PKEYEVP_PKEY2PKCS81_EVP_PKEY2PKCS8 libeay32.dllEVP_PKEY2PKCS8EVP_PKEY2PKCS8_broken?_EVP_PKEY2PKCS8_broken libeay32.dllEVP_PKEY2PKCS8_brokenEVP_PKEY_CTX_ctrl7_EVP_PKEY_CTX_ctrl libeay32.dllEVP_PKEY_CTX_ctrlEVP_PKEY_CTX_ctrl_str?_EVP_PKEY_CTX_ctrl_str libeay32.dllEVP_PKEY_CTX_ctrl_strEVP_PKEY_CTX_dup5_EVP_PKEY_CTX_dup libeay32.dllEVP_PKEY_CTX_dupEVP_PKEY_CTX_free7_EVP_PKEY_CTX_free libeay32.dllEVP_PKEY_CTX_freeEVP_PKEY_CTX_get0_peerkeyG_EVP_PKEY_CTX_get0_peerkey libeay32.dllEVP_PKEY_CTX_get0_peerkeyEVP_PKEY_CTX_get0_pkeyA_EVP_PKEY_CTX_get0_pkey libeay32.dllEVP_PKEY_CTX_get0_pkeyEVP_PKEY_CTX_get_app_dataG_EVP_PKEY_CTX_get_app_data libeay32.dllEVP_PKEY_CTX_get_app_dataEVP_PKEY_CTX_get_cb;_EVP_PKEY_CTX_get_cb libeay32.dllEVP_PKEY_CTX_get_cbEVP_PKEY_CTX_get_data?_EVP_PKEY_CTX_get_data libeay32.dllEVP_PKEY_CTX_get_dataEVP_PKEY_CTX_get_keygen_infoM_EVP_PKEY_CTX_get_keygen_info libeay32.dllEVP_PKEY_CTX_get_keygen_infoEVP_PKEY_CTX_get_operationI_EVP_PKEY_CTX_get_operation libeay32.dllEVP_PKEY_CTX_get_operationEVP_PKEY_CTX_new5_EVP_PKEY_CTX_new libeay32.dllEVP_PKEY_CTX_newEVP_PKEY_CTX_new_id;_EVP_PKEY_CTX_new_id libeay32.dllEVP_PKEY_CTX_new_idEVP_PKEY_CTX_set0_keygen_infoO_EVP_PKEY_CTX_set0_keygen_info libeay32.dllEVP_PKEY_CTX_set0_keygen_infoEVP_PKEY_CTX_set_app_dataG_EVP_PKEY_CTX_set_app_data libeay32.dllEVP_PKEY_CTX_set_app_dataEVP_PKEY_CTX_set_cb;_EVP_PKEY_CTX_set_cb libeay32.dllEVP_PKEY_CTX_set_cbEVP_PKEY_CTX_set_data?_EVP_PKEY_CTX_set_data libeay32.dllEVP_PKEY_CTX_set_dataEVP_PKEY_add1_attr9_EVP_PKEY_add1_attr libeay32.dllEVP_PKEY_add1_attrEVP_PKEY_add1_attr_by_NIDG_EVP_PKEY_add1_attr_by_NID libeay32.dllEVP_PKEY_add1_attr_by_NIDEVP_PKEY_add1_attr_by_OBJG_EVP_PKEY_add1_attr_by_OBJ libeay32.dllEVP_PKEY_add1_attr_by_OBJEVP_PKEY_add1_attr_by_txtG_EVP_PKEY_add1_attr_by_txt libeay32.dllEVP_PKEY_add1_attr_by_txtEVP_PKEY_asn1_add09_EVP_PKEY_asn1_add0 libeay32.dllEVP_PKEY_asn1_add0EVP_PKEY_asn1_add_aliasC_EVP_PKEY_asn1_add_alias libeay32.dllEVP_PKEY_asn1_add_aliasEVP_PKEY_asn1_copy9_EVP_PKEY_asn1_copy libeay32.dllEVP_PKEY_asn1_copyEVP_PKEY_asn1_find9_EVP_PKEY_asn1_find libeay32.dllEVP_PKEY_asn1_findEVP_PKEY_asn1_find_strA_EVP_PKEY_asn1_find_str libeay32.dllEVP_PKEY_asn1_find_strEVP_PKEY_asn1_free9_EVP_PKEY_asn1_free libeay32.dllEVP_PKEY_asn1_freeEVP_PKEY_asn1_get09_EVP_PKEY_asn1_get0 libeay32.dllEVP_PKEY_asn1_get0EVP_PKEY_asn1_get0_infoC_EVP_PKEY_asn1_get0_info libeay32.dllEVP_PKEY_asn1_get0_infoEVP_PKEY_asn1_get_countC_EVP_PKEY_asn1_get_count libeay32.dllEVP_PKEY_asn1_get_countEVP_PKEY_asn1_new7_EVP_PKEY_asn1_new libeay32.dllEVP_PKEY_asn1_newEVP_PKEY_asn1_set_ctrlA_EVP_PKEY_asn1_set_ctrl libeay32.dllEVP_PKEY_asn1_set_ctrlEVP_PKEY_asn1_set_freeA_EVP_PKEY_asn1_set_free libeay32.dllEVP_PKEY_asn1_set_freeEVP_PKEY_asn1_set_itemA_EVP_PKEY_asn1_set_item libeay32.dllEVP_PKEY_asn1_set_itemEVP_PKEY_asn1_set_paramC_EVP_PKEY_asn1_set_param libeay32.dllEVP_PKEY_asn1_set_paramEVP_PKEY_asn1_set_privateG_EVP_PKEY_asn1_set_private libeay32.dllEVP_PKEY_asn1_set_privateEVP_PKEY_asn1_set_publicE_EVP_PKEY_asn1_set_public libeay32.dllEVP_PKEY_asn1_set_publicEVP_PKEY_assign3_EVP_PKEY_assign libeay32.dllEVP_PKEY_assignEVP_PKEY_base_id5_EVP_PKEY_base_id libeay32.dllEVP_PKEY_base_id EVP_PKEY_bits/_EVP_PKEY_bits libeay32.dll EVP_PKEY_bits EVP_PKEY_cmp- _EVP_PKEY_cmp libeay32.dll EVP_PKEY_cmpEVP_PKEY_cmp_parametersC_EVP_PKEY_cmp_parameters libeay32.dllEVP_PKEY_cmp_parametersEVP_PKEY_copy_parametersE_EVP_PKEY_copy_parameters libeay32.dllEVP_PKEY_copy_parametersEVP_PKEY_decrypt5_EVP_PKEY_decrypt libeay32.dllEVP_PKEY_decryptEVP_PKEY_decrypt_init?_EVP_PKEY_decrypt_init libeay32.dllEVP_PKEY_decrypt_initEVP_PKEY_decrypt_old=_EVP_PKEY_decrypt_old libeay32.dllEVP_PKEY_decrypt_oldEVP_PKEY_delete_attr=_EVP_PKEY_delete_attr libeay32.dllEVP_PKEY_delete_attrEVP_PKEY_derive3_EVP_PKEY_derive libeay32.dllEVP_PKEY_deriveEVP_PKEY_derive_init=_EVP_PKEY_derive_init libeay32.dllEVP_PKEY_derive_initEVP_PKEY_derive_set_peerE_EVP_PKEY_derive_set_peer libeay32.dllEVP_PKEY_derive_set_peerEVP_PKEY_encrypt5_EVP_PKEY_encrypt libeay32.dllEVP_PKEY_encryptEVP_PKEY_encrypt_init?_EVP_PKEY_encrypt_init libeay32.dllEVP_PKEY_encrypt_initEVP_PKEY_encrypt_old=_EVP_PKEY_encrypt_old libeay32.dllEVP_PKEY_encrypt_old EVP_PKEY_free/_EVP_PKEY_free libeay32.dll EVP_PKEY_free EVP_PKEY_get0/_EVP_PKEY_get0 libeay32.dll EVP_PKEY_get0EVP_PKEY_get0_asn19_EVP_PKEY_get0_asn1 libeay32.dllEVP_PKEY_get0_asn1EVP_PKEY_get1_DH5_EVP_PKEY_get1_DH libeay32.dllEVP_PKEY_get1_DHEVP_PKEY_get1_DSA7_EVP_PKEY_get1_DSA libeay32.dllEVP_PKEY_get1_DSAEVP_PKEY_get1_EC_KEY=_EVP_PKEY_get1_EC_KEY libeay32.dllEVP_PKEY_get1_EC_KEYEVP_PKEY_get1_RSA7_EVP_PKEY_get1_RSA libeay32.dllEVP_PKEY_get1_RSAEVP_PKEY_get_attr7_EVP_PKEY_get_attr libeay32.dllEVP_PKEY_get_attrEVP_PKEY_get_attr_by_NIDE_EVP_PKEY_get_attr_by_NID libeay32.dllEVP_PKEY_get_attr_by_NIDEVP_PKEY_get_attr_by_OBJE_EVP_PKEY_get_attr_by_OBJ libeay32.dllEVP_PKEY_get_attr_by_OBJEVP_PKEY_get_attr_countC_EVP_PKEY_get_attr_count libeay32.dllEVP_PKEY_get_attr_count!EVP_PKEY_get_default_digest_nidS _EVP_PKEY_get_default_digest_nid libeay32.dllEVP_PKEY_get_default_digest_nid EVP_PKEY_id+ _EVP_PKEY_id libeay32.dll EVP_PKEY_idEVP_PKEY_keygen3_EVP_PKEY_keygen libeay32.dllEVP_PKEY_keygenEVP_PKEY_keygen_init=_EVP_PKEY_keygen_init libeay32.dllEVP_PKEY_keygen_initEVP_PKEY_meth_add09_EVP_PKEY_meth_add0 libeay32.dllEVP_PKEY_meth_add0EVP_PKEY_meth_copy9_EVP_PKEY_meth_copy libeay32.dllEVP_PKEY_meth_copyEVP_PKEY_meth_find9_EVP_PKEY_meth_find libeay32.dllEVP_PKEY_meth_findEVP_PKEY_meth_free9_EVP_PKEY_meth_free libeay32.dllEVP_PKEY_meth_freeEVP_PKEY_meth_get0_infoC_EVP_PKEY_meth_get0_info libeay32.dllEVP_PKEY_meth_get0_infoEVP_PKEY_meth_new7_EVP_PKEY_meth_new libeay32.dllEVP_PKEY_meth_newEVP_PKEY_meth_set_cleanupG_EVP_PKEY_meth_set_cleanup libeay32.dllEVP_PKEY_meth_set_cleanupEVP_PKEY_meth_set_copyA_EVP_PKEY_meth_set_copy libeay32.dllEVP_PKEY_meth_set_copyEVP_PKEY_meth_set_ctrlA_EVP_PKEY_meth_set_ctrl libeay32.dllEVP_PKEY_meth_set_ctrlEVP_PKEY_meth_set_decryptG_EVP_PKEY_meth_set_decrypt libeay32.dllEVP_PKEY_meth_set_decryptEVP_PKEY_meth_set_deriveE_EVP_PKEY_meth_set_derive libeay32.dllEVP_PKEY_meth_set_deriveEVP_PKEY_meth_set_encryptG_EVP_PKEY_meth_set_encrypt libeay32.dllEVP_PKEY_meth_set_encryptEVP_PKEY_meth_set_initA_EVP_PKEY_meth_set_init libeay32.dllEVP_PKEY_meth_set_initEVP_PKEY_meth_set_keygenE_EVP_PKEY_meth_set_keygen libeay32.dllEVP_PKEY_meth_set_keygenEVP_PKEY_meth_set_paramgenI_EVP_PKEY_meth_set_paramgen libeay32.dllEVP_PKEY_meth_set_paramgenEVP_PKEY_meth_set_signA_EVP_PKEY_meth_set_sign libeay32.dllEVP_PKEY_meth_set_signEVP_PKEY_meth_set_signctxG_EVP_PKEY_meth_set_signctx libeay32.dllEVP_PKEY_meth_set_signctxEVP_PKEY_meth_set_verifyE_EVP_PKEY_meth_set_verify libeay32.dllEVP_PKEY_meth_set_verify" EVP_PKEY_meth_set_verify_recoverU!_EVP_PKEY_meth_set_verify_recover libeay32.dll EVP_PKEY_meth_set_verify_recoverEVP_PKEY_meth_set_verifyctxK_EVP_PKEY_meth_set_verifyctx libeay32.dllEVP_PKEY_meth_set_verifyctxEVP_PKEY_missing_parametersK_EVP_PKEY_missing_parameters libeay32.dllEVP_PKEY_missing_parameters EVP_PKEY_new- _EVP_PKEY_new libeay32.dll EVP_PKEY_newEVP_PKEY_new_mac_key=_EVP_PKEY_new_mac_key libeay32.dllEVP_PKEY_new_mac_keyEVP_PKEY_paramgen7_EVP_PKEY_paramgen libeay32.dllEVP_PKEY_paramgenEVP_PKEY_paramgen_initA_EVP_PKEY_paramgen_init libeay32.dllEVP_PKEY_paramgen_initEVP_PKEY_print_params?_EVP_PKEY_print_params libeay32.dllEVP_PKEY_print_paramsEVP_PKEY_print_privateA_EVP_PKEY_print_private libeay32.dllEVP_PKEY_print_privateEVP_PKEY_print_public?_EVP_PKEY_print_public libeay32.dllEVP_PKEY_print_publicEVP_PKEY_save_parametersE_EVP_PKEY_save_parameters libeay32.dllEVP_PKEY_save_parametersEVP_PKEY_set1_DH5_EVP_PKEY_set1_DH libeay32.dllEVP_PKEY_set1_DHEVP_PKEY_set1_DSA7_EVP_PKEY_set1_DSA libeay32.dllEVP_PKEY_set1_DSAEVP_PKEY_set1_EC_KEY=_EVP_PKEY_set1_EC_KEY libeay32.dllEVP_PKEY_set1_EC_KEYEVP_PKEY_set1_RSA7_EVP_PKEY_set1_RSA libeay32.dllEVP_PKEY_set1_RSAEVP_PKEY_set_type7_EVP_PKEY_set_type libeay32.dllEVP_PKEY_set_typeEVP_PKEY_set_type_str?_EVP_PKEY_set_type_str libeay32.dllEVP_PKEY_set_type_str EVP_PKEY_sign/_EVP_PKEY_sign libeay32.dll EVP_PKEY_signEVP_PKEY_sign_init9_EVP_PKEY_sign_init libeay32.dllEVP_PKEY_sign_init EVP_PKEY_size/_EVP_PKEY_size libeay32.dll EVP_PKEY_size EVP_PKEY_type/_EVP_PKEY_type libeay32.dll EVP_PKEY_typeEVP_PKEY_verify3_EVP_PKEY_verify libeay32.dllEVP_PKEY_verifyEVP_PKEY_verify_init=_EVP_PKEY_verify_init libeay32.dllEVP_PKEY_verify_initEVP_PKEY_verify_recoverC_EVP_PKEY_verify_recover libeay32.dllEVP_PKEY_verify_recoverEVP_PKEY_verify_recover_initM_EVP_PKEY_verify_recover_init libeay32.dllEVP_PKEY_verify_recover_init EVP_SealFinal/_EVP_SealFinal libeay32.dll EVP_SealFinal EVP_SealInit- _EVP_SealInit libeay32.dll EVP_SealInit EVP_SignFinal/_EVP_SignFinal libeay32.dll EVP_SignFinalEVP_VerifyFinal3_EVP_VerifyFinal libeay32.dllEVP_VerifyFinalEVP_add_alg_module9_EVP_add_alg_module libeay32.dllEVP_add_alg_moduleEVP_add_cipher1_EVP_add_cipher libeay32.dllEVP_add_cipherEVP_add_digest1_EVP_add_digest libeay32.dllEVP_add_digestEVP_aes_128_cbc3_EVP_aes_128_cbc libeay32.dllEVP_aes_128_cbcEVP_aes_128_cbc_hmac_sha1G_EVP_aes_128_cbc_hmac_sha1 libeay32.dllEVP_aes_128_cbc_hmac_sha1EVP_aes_128_cbc_hmac_sha256K_EVP_aes_128_cbc_hmac_sha256 libeay32.dllEVP_aes_128_cbc_hmac_sha256EVP_aes_128_ccm3_EVP_aes_128_ccm libeay32.dllEVP_aes_128_ccmEVP_aes_128_cfb15_EVP_aes_128_cfb1 libeay32.dllEVP_aes_128_cfb1EVP_aes_128_cfb1289_EVP_aes_128_cfb128 libeay32.dllEVP_aes_128_cfb128EVP_aes_128_cfb85_EVP_aes_128_cfb8 libeay32.dllEVP_aes_128_cfb8EVP_aes_128_ctr3_EVP_aes_128_ctr libeay32.dllEVP_aes_128_ctrEVP_aes_128_ecb3_EVP_aes_128_ecb libeay32.dllEVP_aes_128_ecbEVP_aes_128_gcm3_EVP_aes_128_gcm libeay32.dllEVP_aes_128_gcmEVP_aes_128_ofb3_EVP_aes_128_ofb libeay32.dllEVP_aes_128_ofbEVP_aes_128_wrap5_EVP_aes_128_wrap libeay32.dllEVP_aes_128_wrapEVP_aes_128_xts3_EVP_aes_128_xts libeay32.dllEVP_aes_128_xtsEVP_aes_192_cbc3_EVP_aes_192_cbc libeay32.dllEVP_aes_192_cbcEVP_aes_192_ccm3_EVP_aes_192_ccm libeay32.dllEVP_aes_192_ccmEVP_aes_192_cfb15_EVP_aes_192_cfb1 libeay32.dllEVP_aes_192_cfb1EVP_aes_192_cfb1289_EVP_aes_192_cfb128 libeay32.dllEVP_aes_192_cfb128EVP_aes_192_cfb85_EVP_aes_192_cfb8 libeay32.dllEVP_aes_192_cfb8EVP_aes_192_ctr3_EVP_aes_192_ctr libeay32.dllEVP_aes_192_ctrEVP_aes_192_ecb3_EVP_aes_192_ecb libeay32.dllEVP_aes_192_ecbEVP_aes_192_gcm3_EVP_aes_192_gcm libeay32.dllEVP_aes_192_gcmEVP_aes_192_ofb3_EVP_aes_192_ofb libeay32.dllEVP_aes_192_ofbEVP_aes_192_wrap5_EVP_aes_192_wrap libeay32.dllEVP_aes_192_wrapEVP_aes_256_cbc3_EVP_aes_256_cbc libeay32.dllEVP_aes_256_cbcEVP_aes_256_cbc_hmac_sha1G_EVP_aes_256_cbc_hmac_sha1 libeay32.dllEVP_aes_256_cbc_hmac_sha1EVP_aes_256_cbc_hmac_sha256K_EVP_aes_256_cbc_hmac_sha256 libeay32.dllEVP_aes_256_cbc_hmac_sha256EVP_aes_256_ccm3_EVP_aes_256_ccm libeay32.dllEVP_aes_256_ccmEVP_aes_256_cfb15_EVP_aes_256_cfb1 libeay32.dllEVP_aes_256_cfb1EVP_aes_256_cfb1289_EVP_aes_256_cfb128 libeay32.dllEVP_aes_256_cfb128EVP_aes_256_cfb85_EVP_aes_256_cfb8 libeay32.dllEVP_aes_256_cfb8EVP_aes_256_ctr3_EVP_aes_256_ctr libeay32.dllEVP_aes_256_ctrEVP_aes_256_ecb3_EVP_aes_256_ecb libeay32.dllEVP_aes_256_ecbEVP_aes_256_gcm3_EVP_aes_256_gcm libeay32.dllEVP_aes_256_gcmEVP_aes_256_ofb3_EVP_aes_256_ofb libeay32.dllEVP_aes_256_ofbEVP_aes_256_wrap5_EVP_aes_256_wrap libeay32.dllEVP_aes_256_wrapEVP_aes_256_xts3_EVP_aes_256_xts libeay32.dllEVP_aes_256_xts EVP_bf_cbc) _EVP_bf_cbc libeay32.dll EVP_bf_cbc EVP_bf_cfb64- _EVP_bf_cfb64 libeay32.dll EVP_bf_cfb64 EVP_bf_ecb) _EVP_bf_ecb libeay32.dll EVP_bf_ecb EVP_bf_ofb) _EVP_bf_ofb libeay32.dll EVP_bf_ofbEVP_camellia_128_cbc=_EVP_camellia_128_cbc libeay32.dllEVP_camellia_128_cbcEVP_camellia_128_cfb1?_EVP_camellia_128_cfb1 libeay32.dllEVP_camellia_128_cfb1EVP_camellia_128_cfb128C_EVP_camellia_128_cfb128 libeay32.dllEVP_camellia_128_cfb128EVP_camellia_128_cfb8?_EVP_camellia_128_cfb8 libeay32.dllEVP_camellia_128_cfb8EVP_camellia_128_ecb=_EVP_camellia_128_ecb libeay32.dllEVP_camellia_128_ecbEVP_camellia_128_ofb=_EVP_camellia_128_ofb libeay32.dllEVP_camellia_128_ofbEVP_camellia_192_cbc=_EVP_camellia_192_cbc libeay32.dllEVP_camellia_192_cbcEVP_camellia_192_cfb1?_EVP_camellia_192_cfb1 libeay32.dllEVP_camellia_192_cfb1EVP_camellia_192_cfb128C_EVP_camellia_192_cfb128 libeay32.dllEVP_camellia_192_cfb128EVP_camellia_192_cfb8?_EVP_camellia_192_cfb8 libeay32.dllEVP_camellia_192_cfb8EVP_camellia_192_ecb=_EVP_camellia_192_ecb libeay32.dllEVP_camellia_192_ecbEVP_camellia_192_ofb=_EVP_camellia_192_ofb libeay32.dllEVP_camellia_192_ofbEVP_camellia_256_cbc=_EVP_camellia_256_cbc libeay32.dllEVP_camellia_256_cbcEVP_camellia_256_cfb1?_EVP_camellia_256_cfb1 libeay32.dllEVP_camellia_256_cfb1EVP_camellia_256_cfb128C_EVP_camellia_256_cfb128 libeay32.dllEVP_camellia_256_cfb128EVP_camellia_256_cfb8?_EVP_camellia_256_cfb8 libeay32.dllEVP_camellia_256_cfb8EVP_camellia_256_ecb=_EVP_camellia_256_ecb libeay32.dllEVP_camellia_256_ecbEVP_camellia_256_ofb=_EVP_camellia_256_ofb libeay32.dllEVP_camellia_256_ofb EVP_cast5_cbc/_EVP_cast5_cbc libeay32.dll EVP_cast5_cbcEVP_cast5_cfb643_EVP_cast5_cfb64 libeay32.dllEVP_cast5_cfb64 EVP_cast5_ecb/_EVP_cast5_ecb libeay32.dll EVP_cast5_ecb EVP_cast5_ofb/_EVP_cast5_ofb libeay32.dll EVP_cast5_ofb EVP_cleanup+ _EVP_cleanup libeay32.dll EVP_cleanup EVP_des_cbc+ _EVP_des_cbc libeay32.dll EVP_des_cbc EVP_des_cfb1- _EVP_des_cfb1 libeay32.dll EVP_des_cfb1 EVP_des_cfb64/_EVP_des_cfb64 libeay32.dll EVP_des_cfb64 EVP_des_cfb8- _EVP_des_cfb8 libeay32.dll EVP_des_cfb8 EVP_des_ecb+ _EVP_des_ecb libeay32.dll EVP_des_ecb EVP_des_ede+ _EVP_des_ede libeay32.dll EVP_des_ede EVP_des_ede3- _EVP_des_ede3 libeay32.dll EVP_des_ede3EVP_des_ede3_cbc5_EVP_des_ede3_cbc libeay32.dllEVP_des_ede3_cbcEVP_des_ede3_cfb17_EVP_des_ede3_cfb1 libeay32.dllEVP_des_ede3_cfb1EVP_des_ede3_cfb649_EVP_des_ede3_cfb64 libeay32.dllEVP_des_ede3_cfb64EVP_des_ede3_cfb87_EVP_des_ede3_cfb8 libeay32.dllEVP_des_ede3_cfb8EVP_des_ede3_ecb5_EVP_des_ede3_ecb libeay32.dllEVP_des_ede3_ecbEVP_des_ede3_ofb5_EVP_des_ede3_ofb libeay32.dllEVP_des_ede3_ofbEVP_des_ede3_wrap7_EVP_des_ede3_wrap libeay32.dllEVP_des_ede3_wrapEVP_des_ede_cbc3_EVP_des_ede_cbc libeay32.dllEVP_des_ede_cbcEVP_des_ede_cfb647_EVP_des_ede_cfb64 libeay32.dllEVP_des_ede_cfb64EVP_des_ede_ecb3_EVP_des_ede_ecb libeay32.dllEVP_des_ede_ecbEVP_des_ede_ofb3_EVP_des_ede_ofb libeay32.dllEVP_des_ede_ofb EVP_des_ofb+ _EVP_des_ofb libeay32.dll EVP_des_ofb EVP_desx_cbc- _EVP_desx_cbc libeay32.dll EVP_desx_cbc EVP_dss#_EVP_dss libeay32.dllEVP_dss EVP_dss1% _EVP_dss1 libeay32.dllEVP_dss1 EVP_ecdsa' _EVP_ecdsa libeay32.dll EVP_ecdsa EVP_enc_null- _EVP_enc_null libeay32.dll EVP_enc_nullEVP_get_cipherbyname=_EVP_get_cipherbyname libeay32.dllEVP_get_cipherbynameEVP_get_digestbyname=_EVP_get_digestbyname libeay32.dllEVP_get_digestbynameEVP_get_pw_prompt7_EVP_get_pw_prompt libeay32.dllEVP_get_pw_prompt EVP_idea_cbc- _EVP_idea_cbc libeay32.dll EVP_idea_cbcEVP_idea_cfb641_EVP_idea_cfb64 libeay32.dllEVP_idea_cfb64 EVP_idea_ecb- _EVP_idea_ecb libeay32.dll EVP_idea_ecb EVP_idea_ofb- _EVP_idea_ofb libeay32.dll EVP_idea_ofb EVP_md4#_EVP_md4 libeay32.dllEVP_md4 EVP_md5#_EVP_md5 libeay32.dllEVP_md5 EVP_md_null+ _EVP_md_null libeay32.dll EVP_md_null EVP_mdc2% _EVP_mdc2 libeay32.dllEVP_mdc2EVP_rc2_40_cbc1_EVP_rc2_40_cbc libeay32.dllEVP_rc2_40_cbcEVP_rc2_64_cbc1_EVP_rc2_64_cbc libeay32.dllEVP_rc2_64_cbc EVP_rc2_cbc+ _EVP_rc2_cbc libeay32.dll EVP_rc2_cbc EVP_rc2_cfb64/_EVP_rc2_cfb64 libeay32.dll EVP_rc2_cfb64 EVP_rc2_ecb+ _EVP_rc2_ecb libeay32.dll EVP_rc2_ecb EVP_rc2_ofb+ _EVP_rc2_ofb libeay32.dll EVP_rc2_ofb EVP_rc4#_EVP_rc4 libeay32.dllEVP_rc4 EVP_rc4_40) _EVP_rc4_40 libeay32.dll EVP_rc4_40EVP_rc4_hmac_md55_EVP_rc4_hmac_md5 libeay32.dllEVP_rc4_hmac_md5EVP_read_pw_string9_EVP_read_pw_string libeay32.dllEVP_read_pw_stringEVP_read_pw_string_minA_EVP_read_pw_string_min libeay32.dllEVP_read_pw_string_min EVP_ripemd160/_EVP_ripemd160 libeay32.dll EVP_ripemd160 EVP_seed_cbc- _EVP_seed_cbc libeay32.dll EVP_seed_cbcEVP_seed_cfb1283_EVP_seed_cfb128 libeay32.dllEVP_seed_cfb128 EVP_seed_ecb- _EVP_seed_ecb libeay32.dll EVP_seed_ecb EVP_seed_ofb- _EVP_seed_ofb libeay32.dll EVP_seed_ofbEVP_set_pw_prompt7_EVP_set_pw_prompt libeay32.dllEVP_set_pw_prompt EVP_sha#_EVP_sha libeay32.dllEVP_sha EVP_sha1% _EVP_sha1 libeay32.dllEVP_sha1 EVP_sha224) _EVP_sha224 libeay32.dll EVP_sha224 EVP_sha256) _EVP_sha256 libeay32.dll EVP_sha256 EVP_sha384) _EVP_sha384 libeay32.dll EVP_sha384 EVP_sha512) _EVP_sha512 libeay32.dll EVP_sha512 EVP_whirlpool/_EVP_whirlpool libeay32.dll EVP_whirlpoolEXTENDED_KEY_USAGE_freeC_EXTENDED_KEY_USAGE_free libeay32.dllEXTENDED_KEY_USAGE_freeEXTENDED_KEY_USAGE_it?_EXTENDED_KEY_USAGE_it libeay32.dllEXTENDED_KEY_USAGE_itEXTENDED_KEY_USAGE_newA_EXTENDED_KEY_USAGE_new libeay32.dllEXTENDED_KEY_USAGE_new FIPS_mode' _FIPS_mode libeay32.dll FIPS_mode FIPS_mode_set/_FIPS_mode_set libeay32.dll FIPS_mode_setGENERAL_NAMES_free9_GENERAL_NAMES_free libeay32.dllGENERAL_NAMES_freeGENERAL_NAMES_it5_GENERAL_NAMES_it libeay32.dllGENERAL_NAMES_itGENERAL_NAMES_new7_GENERAL_NAMES_new libeay32.dllGENERAL_NAMES_newGENERAL_NAME_cmp5_GENERAL_NAME_cmp libeay32.dllGENERAL_NAME_cmpGENERAL_NAME_dup5_GENERAL_NAME_dup libeay32.dllGENERAL_NAME_dupGENERAL_NAME_free7_GENERAL_NAME_free libeay32.dllGENERAL_NAME_freeGENERAL_NAME_get0_otherNameK_GENERAL_NAME_get0_otherName libeay32.dllGENERAL_NAME_get0_otherNameGENERAL_NAME_get0_valueC_GENERAL_NAME_get0_value libeay32.dllGENERAL_NAME_get0_valueGENERAL_NAME_it3_GENERAL_NAME_it libeay32.dllGENERAL_NAME_itGENERAL_NAME_new5_GENERAL_NAME_new libeay32.dllGENERAL_NAME_newGENERAL_NAME_print9_GENERAL_NAME_print libeay32.dllGENERAL_NAME_printGENERAL_NAME_set0_othernameK_GENERAL_NAME_set0_othername libeay32.dllGENERAL_NAME_set0_othernameGENERAL_NAME_set0_valueC_GENERAL_NAME_set0_value libeay32.dllGENERAL_NAME_set0_valueGENERAL_SUBTREE_free=_GENERAL_SUBTREE_free libeay32.dllGENERAL_SUBTREE_freeGENERAL_SUBTREE_it9_GENERAL_SUBTREE_it libeay32.dllGENERAL_SUBTREE_itGENERAL_SUBTREE_new;_GENERAL_SUBTREE_new libeay32.dllGENERAL_SUBTREE_newHMAC_HMAC libeay32.dllHMACHMAC_CTX_cleanup5_HMAC_CTX_cleanup libeay32.dllHMAC_CTX_cleanup HMAC_CTX_copy/_HMAC_CTX_copy libeay32.dll HMAC_CTX_copy HMAC_CTX_init/_HMAC_CTX_init libeay32.dll HMAC_CTX_initHMAC_CTX_set_flags9_HMAC_CTX_set_flags libeay32.dllHMAC_CTX_set_flags HMAC_Final) _HMAC_Final libeay32.dll HMAC_Final HMAC_Init' _HMAC_Init libeay32.dll HMAC_Init HMAC_Init_ex- _HMAC_Init_ex libeay32.dll HMAC_Init_ex HMAC_Update+ _HMAC_Update libeay32.dll HMAC_UpdateISSUING_DIST_POINT_freeC_ISSUING_DIST_POINT_free libeay32.dllISSUING_DIST_POINT_freeISSUING_DIST_POINT_it?_ISSUING_DIST_POINT_it libeay32.dllISSUING_DIST_POINT_itISSUING_DIST_POINT_newA_ISSUING_DIST_POINT_new libeay32.dllISSUING_DIST_POINT_newKRB5_APREQBODY_free;_KRB5_APREQBODY_free libeay32.dllKRB5_APREQBODY_freeKRB5_APREQBODY_it7_KRB5_APREQBODY_it libeay32.dllKRB5_APREQBODY_itKRB5_APREQBODY_new9_KRB5_APREQBODY_new libeay32.dllKRB5_APREQBODY_newKRB5_APREQ_free3_KRB5_APREQ_free libeay32.dllKRB5_APREQ_free KRB5_APREQ_it/_KRB5_APREQ_it libeay32.dll KRB5_APREQ_itKRB5_APREQ_new1_KRB5_APREQ_new libeay32.dllKRB5_APREQ_newKRB5_AUTHDATA_free9_KRB5_AUTHDATA_free libeay32.dllKRB5_AUTHDATA_freeKRB5_AUTHDATA_it5_KRB5_AUTHDATA_it libeay32.dllKRB5_AUTHDATA_itKRB5_AUTHDATA_new7_KRB5_AUTHDATA_new libeay32.dllKRB5_AUTHDATA_newKRB5_AUTHENTBODY_free?_KRB5_AUTHENTBODY_free libeay32.dllKRB5_AUTHENTBODY_freeKRB5_AUTHENTBODY_it;_KRB5_AUTHENTBODY_it libeay32.dllKRB5_AUTHENTBODY_itKRB5_AUTHENTBODY_new=_KRB5_AUTHENTBODY_new libeay32.dllKRB5_AUTHENTBODY_newKRB5_AUTHENT_free7_KRB5_AUTHENT_free libeay32.dllKRB5_AUTHENT_freeKRB5_AUTHENT_it3_KRB5_AUTHENT_it libeay32.dllKRB5_AUTHENT_itKRB5_AUTHENT_new5_KRB5_AUTHENT_new libeay32.dllKRB5_AUTHENT_newKRB5_CHECKSUM_free9_KRB5_CHECKSUM_free libeay32.dllKRB5_CHECKSUM_freeKRB5_CHECKSUM_it5_KRB5_CHECKSUM_it libeay32.dllKRB5_CHECKSUM_itKRB5_CHECKSUM_new7_KRB5_CHECKSUM_new libeay32.dllKRB5_CHECKSUM_newKRB5_ENCDATA_free7_KRB5_ENCDATA_free libeay32.dllKRB5_ENCDATA_freeKRB5_ENCDATA_it3_KRB5_ENCDATA_it libeay32.dllKRB5_ENCDATA_itKRB5_ENCDATA_new5_KRB5_ENCDATA_new libeay32.dllKRB5_ENCDATA_newKRB5_ENCKEY_free5_KRB5_ENCKEY_free libeay32.dllKRB5_ENCKEY_freeKRB5_ENCKEY_it1_KRB5_ENCKEY_it libeay32.dllKRB5_ENCKEY_itKRB5_ENCKEY_new3_KRB5_ENCKEY_new libeay32.dllKRB5_ENCKEY_newKRB5_PRINCNAME_free;_KRB5_PRINCNAME_free libeay32.dllKRB5_PRINCNAME_freeKRB5_PRINCNAME_it7_KRB5_PRINCNAME_it libeay32.dllKRB5_PRINCNAME_itKRB5_PRINCNAME_new9_KRB5_PRINCNAME_new libeay32.dllKRB5_PRINCNAME_newKRB5_TICKET_free5_KRB5_TICKET_free libeay32.dllKRB5_TICKET_freeKRB5_TICKET_it1_KRB5_TICKET_it libeay32.dllKRB5_TICKET_itKRB5_TICKET_new3_KRB5_TICKET_new libeay32.dllKRB5_TICKET_newKRB5_TKTBODY_free7_KRB5_TKTBODY_free libeay32.dllKRB5_TKTBODY_freeKRB5_TKTBODY_it3_KRB5_TKTBODY_it libeay32.dllKRB5_TKTBODY_itKRB5_TKTBODY_new5_KRB5_TKTBODY_new libeay32.dllKRB5_TKTBODY_new LONG_it#_LONG_it libeay32.dllLONG_itMD4_MD4 libeay32.dllMD4 MD4_Final' _MD4_Final libeay32.dll MD4_Final MD4_Init% _MD4_Init libeay32.dllMD4_Init MD4_Transform/_MD4_Transform libeay32.dll MD4_Transform MD4_Update) _MD4_Update libeay32.dll MD4_UpdateMD5_MD5 libeay32.dllMD5 MD5_Final' _MD5_Final libeay32.dll MD5_Final MD5_Init% _MD5_Init libeay32.dllMD5_Init MD5_Transform/_MD5_Transform libeay32.dll MD5_Transform MD5_Update) _MD5_Update libeay32.dll MD5_UpdateMDC2_MDC2 libeay32.dllMDC2 MDC2_Final) _MDC2_Final libeay32.dll MDC2_Final MDC2_Init' _MDC2_Init libeay32.dll MDC2_Init MDC2_Update+ _MDC2_Update libeay32.dll MDC2_UpdateNAME_CONSTRAINTS_checkA_NAME_CONSTRAINTS_check libeay32.dllNAME_CONSTRAINTS_checkNAME_CONSTRAINTS_free?_NAME_CONSTRAINTS_free libeay32.dllNAME_CONSTRAINTS_freeNAME_CONSTRAINTS_it;_NAME_CONSTRAINTS_it libeay32.dllNAME_CONSTRAINTS_itNAME_CONSTRAINTS_new=_NAME_CONSTRAINTS_new libeay32.dllNAME_CONSTRAINTS_new NCONF_WIN32+ _NCONF_WIN32 libeay32.dll NCONF_WIN32 NCONF_default/_NCONF_default libeay32.dll NCONF_defaultNCONF_dump_bio1_NCONF_dump_bio libeay32.dllNCONF_dump_bio NCONF_dump_fp/_NCONF_dump_fp libeay32.dll NCONF_dump_fp NCONF_free) _NCONF_free libeay32.dll NCONF_freeNCONF_free_data3_NCONF_free_data libeay32.dllNCONF_free_dataNCONF_get_number_e9_NCONF_get_number_e libeay32.dllNCONF_get_number_eNCONF_get_section7_NCONF_get_section libeay32.dllNCONF_get_sectionNCONF_get_string5_NCONF_get_string libeay32.dllNCONF_get_string NCONF_load) _NCONF_load libeay32.dll NCONF_loadNCONF_load_bio1_NCONF_load_bio libeay32.dllNCONF_load_bio NCONF_load_fp/_NCONF_load_fp libeay32.dll NCONF_load_fp NCONF_new' _NCONF_new libeay32.dll NCONF_newNETSCAPE_CERT_SEQUENCE_freeK_NETSCAPE_CERT_SEQUENCE_free libeay32.dllNETSCAPE_CERT_SEQUENCE_freeNETSCAPE_CERT_SEQUENCE_itG_NETSCAPE_CERT_SEQUENCE_it libeay32.dllNETSCAPE_CERT_SEQUENCE_itNETSCAPE_CERT_SEQUENCE_newI_NETSCAPE_CERT_SEQUENCE_new libeay32.dllNETSCAPE_CERT_SEQUENCE_newNETSCAPE_SPKAC_free;_NETSCAPE_SPKAC_free libeay32.dllNETSCAPE_SPKAC_freeNETSCAPE_SPKAC_it7_NETSCAPE_SPKAC_it libeay32.dllNETSCAPE_SPKAC_itNETSCAPE_SPKAC_new9_NETSCAPE_SPKAC_new libeay32.dllNETSCAPE_SPKAC_newNETSCAPE_SPKI_b64_decodeE_NETSCAPE_SPKI_b64_decode libeay32.dllNETSCAPE_SPKI_b64_decodeNETSCAPE_SPKI_b64_encodeE_NETSCAPE_SPKI_b64_encode libeay32.dllNETSCAPE_SPKI_b64_encodeNETSCAPE_SPKI_free9_NETSCAPE_SPKI_free libeay32.dllNETSCAPE_SPKI_freeNETSCAPE_SPKI_get_pubkeyE_NETSCAPE_SPKI_get_pubkey libeay32.dllNETSCAPE_SPKI_get_pubkeyNETSCAPE_SPKI_it5_NETSCAPE_SPKI_it libeay32.dllNETSCAPE_SPKI_itNETSCAPE_SPKI_new7_NETSCAPE_SPKI_new libeay32.dllNETSCAPE_SPKI_newNETSCAPE_SPKI_print;_NETSCAPE_SPKI_print libeay32.dllNETSCAPE_SPKI_printNETSCAPE_SPKI_set_pubkeyE_NETSCAPE_SPKI_set_pubkey libeay32.dllNETSCAPE_SPKI_set_pubkeyNETSCAPE_SPKI_sign9_NETSCAPE_SPKI_sign libeay32.dllNETSCAPE_SPKI_signNETSCAPE_SPKI_verify=_NETSCAPE_SPKI_verify libeay32.dllNETSCAPE_SPKI_verifyNETSCAPE_X509_free9_NETSCAPE_X509_free libeay32.dllNETSCAPE_X509_freeNETSCAPE_X509_it5_NETSCAPE_X509_it libeay32.dllNETSCAPE_X509_itNETSCAPE_X509_new7_NETSCAPE_X509_new libeay32.dllNETSCAPE_X509_newNOTICEREF_free1_NOTICEREF_free libeay32.dllNOTICEREF_free NOTICEREF_it- _NOTICEREF_it libeay32.dll NOTICEREF_it NOTICEREF_new/_NOTICEREF_new libeay32.dll NOTICEREF_new OBJ_NAME_add- _OBJ_NAME_add libeay32.dll OBJ_NAME_addOBJ_NAME_cleanup5_OBJ_NAME_cleanup libeay32.dllOBJ_NAME_cleanupOBJ_NAME_do_all3_OBJ_NAME_do_all libeay32.dllOBJ_NAME_do_allOBJ_NAME_do_all_sortedA_OBJ_NAME_do_all_sorted libeay32.dllOBJ_NAME_do_all_sorted OBJ_NAME_get- _OBJ_NAME_get libeay32.dll OBJ_NAME_get OBJ_NAME_init/_OBJ_NAME_init libeay32.dll OBJ_NAME_initOBJ_NAME_new_index9_OBJ_NAME_new_index libeay32.dllOBJ_NAME_new_indexOBJ_NAME_remove3_OBJ_NAME_remove libeay32.dllOBJ_NAME_removeOBJ_add_object1_OBJ_add_object libeay32.dllOBJ_add_object OBJ_add_sigid/_OBJ_add_sigid libeay32.dll OBJ_add_sigid OBJ_bsearch_- _OBJ_bsearch_ libeay32.dll OBJ_bsearch_OBJ_bsearch_ex_3_OBJ_bsearch_ex_ libeay32.dllOBJ_bsearch_ex_ OBJ_cleanup+ _OBJ_cleanup libeay32.dll OBJ_cleanup OBJ_cmp#_OBJ_cmp libeay32.dllOBJ_cmp OBJ_create) _OBJ_create libeay32.dll OBJ_createOBJ_create_objects9_OBJ_create_objects libeay32.dllOBJ_create_objects OBJ_dup#_OBJ_dup libeay32.dllOBJ_dupOBJ_find_sigid_algs;_OBJ_find_sigid_algs libeay32.dllOBJ_find_sigid_algsOBJ_find_sigid_by_algsA_OBJ_find_sigid_by_algs libeay32.dllOBJ_find_sigid_by_algs OBJ_ln2nid) _OBJ_ln2nid libeay32.dll OBJ_ln2nid OBJ_new_nid+ _OBJ_new_nid libeay32.dll OBJ_new_nid OBJ_nid2ln) _OBJ_nid2ln libeay32.dll OBJ_nid2ln OBJ_nid2obj+ _OBJ_nid2obj libeay32.dll OBJ_nid2obj OBJ_nid2sn) _OBJ_nid2sn libeay32.dll OBJ_nid2sn OBJ_obj2nid+ _OBJ_obj2nid libeay32.dll OBJ_obj2nid OBJ_obj2txt+ _OBJ_obj2txt libeay32.dll OBJ_obj2txtOBJ_sigid_free1_OBJ_sigid_free libeay32.dllOBJ_sigid_free OBJ_sn2nid) _OBJ_sn2nid libeay32.dll OBJ_sn2nid OBJ_txt2nid+ _OBJ_txt2nid libeay32.dll OBJ_txt2nid OBJ_txt2obj+ _OBJ_txt2obj libeay32.dll OBJ_txt2objOCSP_BASICRESP_add1_ext_i2dK_OCSP_BASICRESP_add1_ext_i2d libeay32.dllOCSP_BASICRESP_add1_ext_i2dOCSP_BASICRESP_add_extA_OCSP_BASICRESP_add_ext libeay32.dllOCSP_BASICRESP_add_extOCSP_BASICRESP_delete_extG_OCSP_BASICRESP_delete_ext libeay32.dllOCSP_BASICRESP_delete_extOCSP_BASICRESP_free;_OCSP_BASICRESP_free libeay32.dllOCSP_BASICRESP_freeOCSP_BASICRESP_get1_ext_d2iK_OCSP_BASICRESP_get1_ext_d2i libeay32.dllOCSP_BASICRESP_get1_ext_d2iOCSP_BASICRESP_get_extA_OCSP_BASICRESP_get_ext libeay32.dllOCSP_BASICRESP_get_extOCSP_BASICRESP_get_ext_by_NIDO_OCSP_BASICRESP_get_ext_by_NID libeay32.dllOCSP_BASICRESP_get_ext_by_NIDOCSP_BASICRESP_get_ext_by_OBJO_OCSP_BASICRESP_get_ext_by_OBJ libeay32.dllOCSP_BASICRESP_get_ext_by_OBJ$"OCSP_BASICRESP_get_ext_by_criticalY#_OCSP_BASICRESP_get_ext_by_critical libeay32.dll"OCSP_BASICRESP_get_ext_by_criticalOCSP_BASICRESP_get_ext_countM_OCSP_BASICRESP_get_ext_count libeay32.dllOCSP_BASICRESP_get_ext_countOCSP_BASICRESP_it7_OCSP_BASICRESP_it libeay32.dllOCSP_BASICRESP_itOCSP_BASICRESP_new9_OCSP_BASICRESP_new libeay32.dllOCSP_BASICRESP_newOCSP_CERTID_dup3_OCSP_CERTID_dup libeay32.dllOCSP_CERTID_dupOCSP_CERTID_free5_OCSP_CERTID_free libeay32.dllOCSP_CERTID_freeOCSP_CERTID_it1_OCSP_CERTID_it libeay32.dllOCSP_CERTID_itOCSP_CERTID_new3_OCSP_CERTID_new libeay32.dllOCSP_CERTID_newOCSP_CERTSTATUS_free=_OCSP_CERTSTATUS_free libeay32.dllOCSP_CERTSTATUS_freeOCSP_CERTSTATUS_it9_OCSP_CERTSTATUS_it libeay32.dllOCSP_CERTSTATUS_itOCSP_CERTSTATUS_new;_OCSP_CERTSTATUS_new libeay32.dllOCSP_CERTSTATUS_newOCSP_CRLID_free3_OCSP_CRLID_free libeay32.dllOCSP_CRLID_free OCSP_CRLID_it/_OCSP_CRLID_it libeay32.dll OCSP_CRLID_itOCSP_CRLID_new1_OCSP_CRLID_new libeay32.dllOCSP_CRLID_newOCSP_ONEREQ_add1_ext_i2dE_OCSP_ONEREQ_add1_ext_i2d libeay32.dllOCSP_ONEREQ_add1_ext_i2dOCSP_ONEREQ_add_ext;_OCSP_ONEREQ_add_ext libeay32.dllOCSP_ONEREQ_add_extOCSP_ONEREQ_delete_extA_OCSP_ONEREQ_delete_ext libeay32.dllOCSP_ONEREQ_delete_extOCSP_ONEREQ_free5_OCSP_ONEREQ_free libeay32.dllOCSP_ONEREQ_freeOCSP_ONEREQ_get1_ext_d2iE_OCSP_ONEREQ_get1_ext_d2i libeay32.dllOCSP_ONEREQ_get1_ext_d2iOCSP_ONEREQ_get_ext;_OCSP_ONEREQ_get_ext libeay32.dllOCSP_ONEREQ_get_extOCSP_ONEREQ_get_ext_by_NIDI_OCSP_ONEREQ_get_ext_by_NID libeay32.dllOCSP_ONEREQ_get_ext_by_NIDOCSP_ONEREQ_get_ext_by_OBJI_OCSP_ONEREQ_get_ext_by_OBJ libeay32.dllOCSP_ONEREQ_get_ext_by_OBJ!OCSP_ONEREQ_get_ext_by_criticalS _OCSP_ONEREQ_get_ext_by_critical libeay32.dllOCSP_ONEREQ_get_ext_by_criticalOCSP_ONEREQ_get_ext_countG_OCSP_ONEREQ_get_ext_count libeay32.dllOCSP_ONEREQ_get_ext_countOCSP_ONEREQ_it1_OCSP_ONEREQ_it libeay32.dllOCSP_ONEREQ_itOCSP_ONEREQ_new3_OCSP_ONEREQ_new libeay32.dllOCSP_ONEREQ_newOCSP_REQINFO_free7_OCSP_REQINFO_free libeay32.dllOCSP_REQINFO_freeOCSP_REQINFO_it3_OCSP_REQINFO_it libeay32.dllOCSP_REQINFO_itOCSP_REQINFO_new5_OCSP_REQINFO_new libeay32.dllOCSP_REQINFO_newOCSP_REQUEST_add1_ext_i2dG_OCSP_REQUEST_add1_ext_i2d libeay32.dllOCSP_REQUEST_add1_ext_i2dOCSP_REQUEST_add_ext=_OCSP_REQUEST_add_ext libeay32.dllOCSP_REQUEST_add_extOCSP_REQUEST_delete_extC_OCSP_REQUEST_delete_ext libeay32.dllOCSP_REQUEST_delete_extOCSP_REQUEST_free7_OCSP_REQUEST_free libeay32.dllOCSP_REQUEST_freeOCSP_REQUEST_get1_ext_d2iG_OCSP_REQUEST_get1_ext_d2i libeay32.dllOCSP_REQUEST_get1_ext_d2iOCSP_REQUEST_get_ext=_OCSP_REQUEST_get_ext libeay32.dllOCSP_REQUEST_get_extOCSP_REQUEST_get_ext_by_NIDK_OCSP_REQUEST_get_ext_by_NID libeay32.dllOCSP_REQUEST_get_ext_by_NIDOCSP_REQUEST_get_ext_by_OBJK_OCSP_REQUEST_get_ext_by_OBJ libeay32.dllOCSP_REQUEST_get_ext_by_OBJ" OCSP_REQUEST_get_ext_by_criticalU!_OCSP_REQUEST_get_ext_by_critical libeay32.dll OCSP_REQUEST_get_ext_by_criticalOCSP_REQUEST_get_ext_countI_OCSP_REQUEST_get_ext_count libeay32.dllOCSP_REQUEST_get_ext_countOCSP_REQUEST_it3_OCSP_REQUEST_it libeay32.dllOCSP_REQUEST_itOCSP_REQUEST_new5_OCSP_REQUEST_new libeay32.dllOCSP_REQUEST_newOCSP_REQUEST_print9_OCSP_REQUEST_print libeay32.dllOCSP_REQUEST_printOCSP_REQ_CTX_add1_headerE_OCSP_REQ_CTX_add1_header libeay32.dllOCSP_REQ_CTX_add1_headerOCSP_REQ_CTX_free7_OCSP_REQ_CTX_free libeay32.dllOCSP_REQ_CTX_freeOCSP_REQ_CTX_get0_mem_bioG_OCSP_REQ_CTX_get0_mem_bio libeay32.dllOCSP_REQ_CTX_get0_mem_bioOCSP_REQ_CTX_http7_OCSP_REQ_CTX_http libeay32.dllOCSP_REQ_CTX_httpOCSP_REQ_CTX_i2d5_OCSP_REQ_CTX_i2d libeay32.dllOCSP_REQ_CTX_i2dOCSP_REQ_CTX_nbio7_OCSP_REQ_CTX_nbio libeay32.dllOCSP_REQ_CTX_nbioOCSP_REQ_CTX_nbio_d2i?_OCSP_REQ_CTX_nbio_d2i libeay32.dllOCSP_REQ_CTX_nbio_d2iOCSP_REQ_CTX_new5_OCSP_REQ_CTX_new libeay32.dllOCSP_REQ_CTX_newOCSP_REQ_CTX_set1_req?_OCSP_REQ_CTX_set1_req libeay32.dllOCSP_REQ_CTX_set1_reqOCSP_RESPBYTES_free;_OCSP_RESPBYTES_free libeay32.dllOCSP_RESPBYTES_freeOCSP_RESPBYTES_it7_OCSP_RESPBYTES_it libeay32.dllOCSP_RESPBYTES_itOCSP_RESPBYTES_new9_OCSP_RESPBYTES_new libeay32.dllOCSP_RESPBYTES_newOCSP_RESPDATA_free9_OCSP_RESPDATA_free libeay32.dllOCSP_RESPDATA_freeOCSP_RESPDATA_it5_OCSP_RESPDATA_it libeay32.dllOCSP_RESPDATA_itOCSP_RESPDATA_new7_OCSP_RESPDATA_new libeay32.dllOCSP_RESPDATA_newOCSP_RESPID_free5_OCSP_RESPID_free libeay32.dllOCSP_RESPID_freeOCSP_RESPID_it1_OCSP_RESPID_it libeay32.dllOCSP_RESPID_itOCSP_RESPID_new3_OCSP_RESPID_new libeay32.dllOCSP_RESPID_newOCSP_RESPONSE_free9_OCSP_RESPONSE_free libeay32.dllOCSP_RESPONSE_freeOCSP_RESPONSE_it5_OCSP_RESPONSE_it libeay32.dllOCSP_RESPONSE_itOCSP_RESPONSE_new7_OCSP_RESPONSE_new libeay32.dllOCSP_RESPONSE_newOCSP_RESPONSE_print;_OCSP_RESPONSE_print libeay32.dllOCSP_RESPONSE_printOCSP_REVOKEDINFO_free?_OCSP_REVOKEDINFO_free libeay32.dllOCSP_REVOKEDINFO_freeOCSP_REVOKEDINFO_it;_OCSP_REVOKEDINFO_it libeay32.dllOCSP_REVOKEDINFO_itOCSP_REVOKEDINFO_new=_OCSP_REVOKEDINFO_new libeay32.dllOCSP_REVOKEDINFO_newOCSP_SERVICELOC_free=_OCSP_SERVICELOC_free libeay32.dllOCSP_SERVICELOC_freeOCSP_SERVICELOC_it9_OCSP_SERVICELOC_it libeay32.dllOCSP_SERVICELOC_itOCSP_SERVICELOC_new;_OCSP_SERVICELOC_new libeay32.dllOCSP_SERVICELOC_newOCSP_SIGNATURE_free;_OCSP_SIGNATURE_free libeay32.dllOCSP_SIGNATURE_freeOCSP_SIGNATURE_it7_OCSP_SIGNATURE_it libeay32.dllOCSP_SIGNATURE_itOCSP_SIGNATURE_new9_OCSP_SIGNATURE_new libeay32.dllOCSP_SIGNATURE_newOCSP_SINGLERESP_add1_ext_i2dM_OCSP_SINGLERESP_add1_ext_i2d libeay32.dllOCSP_SINGLERESP_add1_ext_i2dOCSP_SINGLERESP_add_extC_OCSP_SINGLERESP_add_ext libeay32.dllOCSP_SINGLERESP_add_extOCSP_SINGLERESP_delete_extI_OCSP_SINGLERESP_delete_ext libeay32.dllOCSP_SINGLERESP_delete_extOCSP_SINGLERESP_free=_OCSP_SINGLERESP_free libeay32.dllOCSP_SINGLERESP_freeOCSP_SINGLERESP_get1_ext_d2iM_OCSP_SINGLERESP_get1_ext_d2i libeay32.dllOCSP_SINGLERESP_get1_ext_d2iOCSP_SINGLERESP_get_extC_OCSP_SINGLERESP_get_ext libeay32.dllOCSP_SINGLERESP_get_ext OCSP_SINGLERESP_get_ext_by_NIDQ_OCSP_SINGLERESP_get_ext_by_NID libeay32.dllOCSP_SINGLERESP_get_ext_by_NID OCSP_SINGLERESP_get_ext_by_OBJQ_OCSP_SINGLERESP_get_ext_by_OBJ libeay32.dllOCSP_SINGLERESP_get_ext_by_OBJ%#OCSP_SINGLERESP_get_ext_by_critical[$_OCSP_SINGLERESP_get_ext_by_critical libeay32.dll#OCSP_SINGLERESP_get_ext_by_criticalOCSP_SINGLERESP_get_ext_countO_OCSP_SINGLERESP_get_ext_count libeay32.dllOCSP_SINGLERESP_get_ext_countOCSP_SINGLERESP_it9_OCSP_SINGLERESP_it libeay32.dllOCSP_SINGLERESP_itOCSP_SINGLERESP_new;_OCSP_SINGLERESP_new libeay32.dllOCSP_SINGLERESP_newOCSP_accept_responses_newG_OCSP_accept_responses_new libeay32.dllOCSP_accept_responses_newOCSP_archive_cutoff_newC_OCSP_archive_cutoff_new libeay32.dllOCSP_archive_cutoff_newOCSP_basic_add1_cert=_OCSP_basic_add1_cert libeay32.dllOCSP_basic_add1_certOCSP_basic_add1_nonce?_OCSP_basic_add1_nonce libeay32.dllOCSP_basic_add1_nonceOCSP_basic_add1_statusA_OCSP_basic_add1_status libeay32.dllOCSP_basic_add1_statusOCSP_basic_sign3_OCSP_basic_sign libeay32.dllOCSP_basic_signOCSP_basic_verify7_OCSP_basic_verify libeay32.dllOCSP_basic_verifyOCSP_cert_id_new5_OCSP_cert_id_new libeay32.dllOCSP_cert_id_newOCSP_cert_status_str=_OCSP_cert_status_str libeay32.dllOCSP_cert_status_strOCSP_cert_to_id3_OCSP_cert_to_id libeay32.dllOCSP_cert_to_idOCSP_check_nonce5_OCSP_check_nonce libeay32.dllOCSP_check_nonceOCSP_check_validity;_OCSP_check_validity libeay32.dllOCSP_check_validityOCSP_copy_nonce3_OCSP_copy_nonce libeay32.dllOCSP_copy_nonceOCSP_crlID_new1_OCSP_crlID_new libeay32.dllOCSP_crlID_newOCSP_crl_reason_str;_OCSP_crl_reason_str libeay32.dllOCSP_crl_reason_str OCSP_id_cmp+ _OCSP_id_cmp libeay32.dll OCSP_id_cmpOCSP_id_get0_info7_OCSP_id_get0_info libeay32.dllOCSP_id_get0_infoOCSP_id_issuer_cmp9_OCSP_id_issuer_cmp libeay32.dllOCSP_id_issuer_cmpOCSP_onereq_get0_id;_OCSP_onereq_get0_id libeay32.dllOCSP_onereq_get0_idOCSP_parse_url1_OCSP_parse_url libeay32.dllOCSP_parse_urlOCSP_request_add0_id=_OCSP_request_add0_id libeay32.dllOCSP_request_add0_idOCSP_request_add1_certA_OCSP_request_add1_cert libeay32.dllOCSP_request_add1_certOCSP_request_add1_nonceC_OCSP_request_add1_nonce libeay32.dllOCSP_request_add1_nonceOCSP_request_is_signedA_OCSP_request_is_signed libeay32.dllOCSP_request_is_signedOCSP_request_onereq_countG_OCSP_request_onereq_count libeay32.dllOCSP_request_onereq_countOCSP_request_onereq_get0E_OCSP_request_onereq_get0 libeay32.dllOCSP_request_onereq_get0OCSP_request_set1_nameA_OCSP_request_set1_name libeay32.dllOCSP_request_set1_nameOCSP_request_sign7_OCSP_request_sign libeay32.dllOCSP_request_signOCSP_request_verify;_OCSP_request_verify libeay32.dllOCSP_request_verifyOCSP_resp_count3_OCSP_resp_count libeay32.dllOCSP_resp_countOCSP_resp_find1_OCSP_resp_find libeay32.dllOCSP_resp_findOCSP_resp_find_status?_OCSP_resp_find_status libeay32.dllOCSP_resp_find_statusOCSP_resp_get01_OCSP_resp_get0 libeay32.dllOCSP_resp_get0OCSP_response_create=_OCSP_response_create libeay32.dllOCSP_response_createOCSP_response_get1_basicE_OCSP_response_get1_basic libeay32.dllOCSP_response_get1_basicOCSP_response_status=_OCSP_response_status libeay32.dllOCSP_response_statusOCSP_response_status_strE_OCSP_response_status_str libeay32.dllOCSP_response_status_strOCSP_sendreq_bio5_OCSP_sendreq_bio libeay32.dllOCSP_sendreq_bioOCSP_sendreq_nbio7_OCSP_sendreq_nbio libeay32.dllOCSP_sendreq_nbioOCSP_sendreq_new5_OCSP_sendreq_new libeay32.dllOCSP_sendreq_newOCSP_set_max_response_lengthM_OCSP_set_max_response_length libeay32.dllOCSP_set_max_response_lengthOCSP_single_get0_statusC_OCSP_single_get0_status libeay32.dllOCSP_single_get0_statusOCSP_url_svcloc_new;_OCSP_url_svcloc_new libeay32.dllOCSP_url_svcloc_newOPENSSL_DIR_end3_OPENSSL_DIR_end libeay32.dllOPENSSL_DIR_endOPENSSL_DIR_read5_OPENSSL_DIR_read libeay32.dllOPENSSL_DIR_read!OPENSSL_add_all_algorithms_confS _OPENSSL_add_all_algorithms_conf libeay32.dllOPENSSL_add_all_algorithms_conf#!OPENSSL_add_all_algorithms_noconfW"_OPENSSL_add_all_algorithms_noconf libeay32.dll!OPENSSL_add_all_algorithms_noconfOPENSSL_asc2uni3_OPENSSL_asc2uni libeay32.dllOPENSSL_asc2uniOPENSSL_cleanse3_OPENSSL_cleanse libeay32.dllOPENSSL_cleanseOPENSSL_config1_OPENSSL_config libeay32.dllOPENSSL_configOPENSSL_cpuid_setup;_OPENSSL_cpuid_setup libeay32.dllOPENSSL_cpuid_setupOPENSSL_gmtime1_OPENSSL_gmtime libeay32.dllOPENSSL_gmtimeOPENSSL_gmtime_adj9_OPENSSL_gmtime_adj libeay32.dllOPENSSL_gmtime_adjOPENSSL_gmtime_diff;_OPENSSL_gmtime_diff libeay32.dllOPENSSL_gmtime_diffOPENSSL_ia32cap_loc;_OPENSSL_ia32cap_loc libeay32.dllOPENSSL_ia32cap_loc OPENSSL_init- _OPENSSL_init libeay32.dll OPENSSL_initOPENSSL_isservice7_OPENSSL_isservice libeay32.dllOPENSSL_isserviceOPENSSL_issetugid7_OPENSSL_issetugid libeay32.dllOPENSSL_issetugidOPENSSL_load_builtin_modulesM_OPENSSL_load_builtin_modules libeay32.dllOPENSSL_load_builtin_modulesOPENSSL_memcmp1_OPENSSL_memcmp libeay32.dllOPENSSL_memcmpOPENSSL_no_config7_OPENSSL_no_config libeay32.dllOPENSSL_no_configOPENSSL_showfatal7_OPENSSL_showfatal libeay32.dllOPENSSL_showfatalOPENSSL_stderr1_OPENSSL_stderr libeay32.dllOPENSSL_stderrOPENSSL_strcasecmp9_OPENSSL_strcasecmp libeay32.dllOPENSSL_strcasecmpOPENSSL_strncasecmp;_OPENSSL_strncasecmp libeay32.dllOPENSSL_strncasecmpOPENSSL_uni2asc3_OPENSSL_uni2asc libeay32.dllOPENSSL_uni2ascOSSL_DES_version5_OSSL_DES_version libeay32.dllOSSL_DES_versionOSSL_libdes_version;_OSSL_libdes_version libeay32.dllOSSL_libdes_version OTHERNAME_cmp/_OTHERNAME_cmp libeay32.dll OTHERNAME_cmpOTHERNAME_free1_OTHERNAME_free libeay32.dllOTHERNAME_free OTHERNAME_it- _OTHERNAME_it libeay32.dll OTHERNAME_it OTHERNAME_new/_OTHERNAME_new libeay32.dll OTHERNAME_new OpenSSLDie) _OpenSSLDie libeay32.dll OpenSSLDieOpenSSL_add_all_ciphersC_OpenSSL_add_all_ciphers libeay32.dllOpenSSL_add_all_ciphersOpenSSL_add_all_digestsC_OpenSSL_add_all_digests libeay32.dllOpenSSL_add_all_digestsPBE2PARAM_free1_PBE2PARAM_free libeay32.dllPBE2PARAM_free PBE2PARAM_it- _PBE2PARAM_it libeay32.dll PBE2PARAM_it PBE2PARAM_new/_PBE2PARAM_new libeay32.dll PBE2PARAM_new PBEPARAM_free/_PBEPARAM_free libeay32.dll PBEPARAM_free PBEPARAM_it+ _PBEPARAM_it libeay32.dll PBEPARAM_it PBEPARAM_new- _PBEPARAM_new libeay32.dll PBEPARAM_newPBKDF2PARAM_free5_PBKDF2PARAM_free libeay32.dllPBKDF2PARAM_freePBKDF2PARAM_it1_PBKDF2PARAM_it libeay32.dllPBKDF2PARAM_itPBKDF2PARAM_new3_PBKDF2PARAM_new libeay32.dllPBKDF2PARAM_new PEM_ASN1_read/_PEM_ASN1_read libeay32.dll PEM_ASN1_readPEM_ASN1_read_bio7_PEM_ASN1_read_bio libeay32.dllPEM_ASN1_read_bioPEM_ASN1_write1_PEM_ASN1_write libeay32.dllPEM_ASN1_writePEM_ASN1_write_bio9_PEM_ASN1_write_bio libeay32.dllPEM_ASN1_write_bio PEM_SealFinal/_PEM_SealFinal libeay32.dll PEM_SealFinal PEM_SealInit- _PEM_SealInit libeay32.dll PEM_SealInitPEM_SealUpdate1_PEM_SealUpdate libeay32.dllPEM_SealUpdate PEM_SignFinal/_PEM_SignFinal libeay32.dll PEM_SignFinal PEM_SignInit- _PEM_SignInit libeay32.dll PEM_SignInitPEM_SignUpdate1_PEM_SignUpdate libeay32.dllPEM_SignUpdatePEM_X509_INFO_read9_PEM_X509_INFO_read libeay32.dllPEM_X509_INFO_readPEM_X509_INFO_read_bioA_PEM_X509_INFO_read_bio libeay32.dllPEM_X509_INFO_read_bioPEM_X509_INFO_write_bioC_PEM_X509_INFO_write_bio libeay32.dllPEM_X509_INFO_write_bioPEM_bytes_read_bio9_PEM_bytes_read_bio libeay32.dllPEM_bytes_read_bioPEM_def_callback5_PEM_def_callback libeay32.dllPEM_def_callback PEM_dek_info- _PEM_dek_info libeay32.dll PEM_dek_info PEM_do_header/_PEM_do_header libeay32.dll PEM_do_headerPEM_get_EVP_CIPHER_INFOC_PEM_get_EVP_CIPHER_INFO libeay32.dllPEM_get_EVP_CIPHER_INFO PEM_proc_type/_PEM_proc_type libeay32.dll PEM_proc_type PEM_read% _PEM_read libeay32.dllPEM_read PEM_read_CMS- _PEM_read_CMS libeay32.dll PEM_read_CMSPEM_read_DHparams7_PEM_read_DHparams libeay32.dllPEM_read_DHparamsPEM_read_DSAPrivateKeyA_PEM_read_DSAPrivateKey libeay32.dllPEM_read_DSAPrivateKeyPEM_read_DSA_PUBKEY;_PEM_read_DSA_PUBKEY libeay32.dllPEM_read_DSA_PUBKEYPEM_read_DSAparams9_PEM_read_DSAparams libeay32.dllPEM_read_DSAparamsPEM_read_ECPKParametersC_PEM_read_ECPKParameters libeay32.dllPEM_read_ECPKParametersPEM_read_ECPrivateKey?_PEM_read_ECPrivateKey libeay32.dllPEM_read_ECPrivateKeyPEM_read_EC_PUBKEY9_PEM_read_EC_PUBKEY libeay32.dllPEM_read_EC_PUBKEY!PEM_read_NETSCAPE_CERT_SEQUENCES _PEM_read_NETSCAPE_CERT_SEQUENCE libeay32.dllPEM_read_NETSCAPE_CERT_SEQUENCEPEM_read_PKCS71_PEM_read_PKCS7 libeay32.dllPEM_read_PKCS7PEM_read_PKCS81_PEM_read_PKCS8 libeay32.dllPEM_read_PKCS8PEM_read_PKCS8_PRIV_KEY_INFOM_PEM_read_PKCS8_PRIV_KEY_INFO libeay32.dllPEM_read_PKCS8_PRIV_KEY_INFOPEM_read_PUBKEY3_PEM_read_PUBKEY libeay32.dllPEM_read_PUBKEYPEM_read_PrivateKey;_PEM_read_PrivateKey libeay32.dllPEM_read_PrivateKeyPEM_read_RSAPrivateKeyA_PEM_read_RSAPrivateKey libeay32.dllPEM_read_RSAPrivateKeyPEM_read_RSAPublicKey?_PEM_read_RSAPublicKey libeay32.dllPEM_read_RSAPublicKeyPEM_read_RSA_PUBKEY;_PEM_read_RSA_PUBKEY libeay32.dllPEM_read_RSA_PUBKEY PEM_read_X509/_PEM_read_X509 libeay32.dll PEM_read_X509PEM_read_X509_AUX7_PEM_read_X509_AUX libeay32.dllPEM_read_X509_AUXPEM_read_X509_CERT_PAIRC_PEM_read_X509_CERT_PAIR libeay32.dllPEM_read_X509_CERT_PAIRPEM_read_X509_CRL7_PEM_read_X509_CRL libeay32.dllPEM_read_X509_CRLPEM_read_X509_REQ7_PEM_read_X509_REQ libeay32.dllPEM_read_X509_REQ PEM_read_bio- _PEM_read_bio libeay32.dll PEM_read_bioPEM_read_bio_CMS5_PEM_read_bio_CMS libeay32.dllPEM_read_bio_CMSPEM_read_bio_DHparams?_PEM_read_bio_DHparams libeay32.dllPEM_read_bio_DHparamsPEM_read_bio_DSAPrivateKeyI_PEM_read_bio_DSAPrivateKey libeay32.dllPEM_read_bio_DSAPrivateKeyPEM_read_bio_DSA_PUBKEYC_PEM_read_bio_DSA_PUBKEY libeay32.dllPEM_read_bio_DSA_PUBKEYPEM_read_bio_DSAparamsA_PEM_read_bio_DSAparams libeay32.dllPEM_read_bio_DSAparamsPEM_read_bio_ECPKParametersK_PEM_read_bio_ECPKParameters libeay32.dllPEM_read_bio_ECPKParametersPEM_read_bio_ECPrivateKeyG_PEM_read_bio_ECPrivateKey libeay32.dllPEM_read_bio_ECPrivateKeyPEM_read_bio_EC_PUBKEYA_PEM_read_bio_EC_PUBKEY libeay32.dllPEM_read_bio_EC_PUBKEY%#PEM_read_bio_NETSCAPE_CERT_SEQUENCE[$_PEM_read_bio_NETSCAPE_CERT_SEQUENCE libeay32.dll#PEM_read_bio_NETSCAPE_CERT_SEQUENCEPEM_read_bio_PKCS79_PEM_read_bio_PKCS7 libeay32.dllPEM_read_bio_PKCS7PEM_read_bio_PKCS89_PEM_read_bio_PKCS8 libeay32.dllPEM_read_bio_PKCS8" PEM_read_bio_PKCS8_PRIV_KEY_INFOU!_PEM_read_bio_PKCS8_PRIV_KEY_INFO libeay32.dll PEM_read_bio_PKCS8_PRIV_KEY_INFOPEM_read_bio_PUBKEY;_PEM_read_bio_PUBKEY libeay32.dllPEM_read_bio_PUBKEYPEM_read_bio_ParametersC_PEM_read_bio_Parameters libeay32.dllPEM_read_bio_ParametersPEM_read_bio_PrivateKeyC_PEM_read_bio_PrivateKey libeay32.dllPEM_read_bio_PrivateKeyPEM_read_bio_RSAPrivateKeyI_PEM_read_bio_RSAPrivateKey libeay32.dllPEM_read_bio_RSAPrivateKeyPEM_read_bio_RSAPublicKeyG_PEM_read_bio_RSAPublicKey libeay32.dllPEM_read_bio_RSAPublicKeyPEM_read_bio_RSA_PUBKEYC_PEM_read_bio_RSA_PUBKEY libeay32.dllPEM_read_bio_RSA_PUBKEYPEM_read_bio_X5097_PEM_read_bio_X509 libeay32.dllPEM_read_bio_X509PEM_read_bio_X509_AUX?_PEM_read_bio_X509_AUX libeay32.dllPEM_read_bio_X509_AUXPEM_read_bio_X509_CERT_PAIRK_PEM_read_bio_X509_CERT_PAIR libeay32.dllPEM_read_bio_X509_CERT_PAIRPEM_read_bio_X509_CRL?_PEM_read_bio_X509_CRL libeay32.dllPEM_read_bio_X509_CRLPEM_read_bio_X509_REQ?_PEM_read_bio_X509_REQ libeay32.dllPEM_read_bio_X509_REQ PEM_write' _PEM_write libeay32.dll PEM_write PEM_write_CMS/_PEM_write_CMS libeay32.dll PEM_write_CMSPEM_write_DHparams9_PEM_write_DHparams libeay32.dllPEM_write_DHparamsPEM_write_DHxparams;_PEM_write_DHxparams libeay32.dllPEM_write_DHxparamsPEM_write_DSAPrivateKeyC_PEM_write_DSAPrivateKey libeay32.dllPEM_write_DSAPrivateKeyPEM_write_DSA_PUBKEY=_PEM_write_DSA_PUBKEY libeay32.dllPEM_write_DSA_PUBKEYPEM_write_DSAparams;_PEM_write_DSAparams libeay32.dllPEM_write_DSAparamsPEM_write_ECPKParametersE_PEM_write_ECPKParameters libeay32.dllPEM_write_ECPKParametersPEM_write_ECPrivateKeyA_PEM_write_ECPrivateKey libeay32.dllPEM_write_ECPrivateKeyPEM_write_EC_PUBKEY;_PEM_write_EC_PUBKEY libeay32.dllPEM_write_EC_PUBKEY" PEM_write_NETSCAPE_CERT_SEQUENCEU!_PEM_write_NETSCAPE_CERT_SEQUENCE libeay32.dll PEM_write_NETSCAPE_CERT_SEQUENCEPEM_write_PKCS73_PEM_write_PKCS7 libeay32.dllPEM_write_PKCS7PEM_write_PKCS83_PEM_write_PKCS8 libeay32.dllPEM_write_PKCS8PEM_write_PKCS8PrivateKeyG_PEM_write_PKCS8PrivateKey libeay32.dllPEM_write_PKCS8PrivateKeyPEM_write_PKCS8PrivateKey_nidO_PEM_write_PKCS8PrivateKey_nid libeay32.dllPEM_write_PKCS8PrivateKey_nidPEM_write_PKCS8_PRIV_KEY_INFOO_PEM_write_PKCS8_PRIV_KEY_INFO libeay32.dllPEM_write_PKCS8_PRIV_KEY_INFOPEM_write_PUBKEY5_PEM_write_PUBKEY libeay32.dllPEM_write_PUBKEYPEM_write_PrivateKey=_PEM_write_PrivateKey libeay32.dllPEM_write_PrivateKeyPEM_write_RSAPrivateKeyC_PEM_write_RSAPrivateKey libeay32.dllPEM_write_RSAPrivateKeyPEM_write_RSAPublicKeyA_PEM_write_RSAPublicKey libeay32.dllPEM_write_RSAPublicKeyPEM_write_RSA_PUBKEY=_PEM_write_RSA_PUBKEY libeay32.dllPEM_write_RSA_PUBKEYPEM_write_X5091_PEM_write_X509 libeay32.dllPEM_write_X509PEM_write_X509_AUX9_PEM_write_X509_AUX libeay32.dllPEM_write_X509_AUXPEM_write_X509_CERT_PAIRE_PEM_write_X509_CERT_PAIR libeay32.dllPEM_write_X509_CERT_PAIRPEM_write_X509_CRL9_PEM_write_X509_CRL libeay32.dllPEM_write_X509_CRLPEM_write_X509_REQ9_PEM_write_X509_REQ libeay32.dllPEM_write_X509_REQPEM_write_X509_REQ_NEWA_PEM_write_X509_REQ_NEW libeay32.dllPEM_write_X509_REQ_NEW PEM_write_bio/_PEM_write_bio libeay32.dll PEM_write_bioPEM_write_bio_ASN1_streamG_PEM_write_bio_ASN1_stream libeay32.dllPEM_write_bio_ASN1_streamPEM_write_bio_CMS7_PEM_write_bio_CMS libeay32.dllPEM_write_bio_CMSPEM_write_bio_CMS_streamE_PEM_write_bio_CMS_stream libeay32.dllPEM_write_bio_CMS_streamPEM_write_bio_DHparamsA_PEM_write_bio_DHparams libeay32.dllPEM_write_bio_DHparamsPEM_write_bio_DHxparamsC_PEM_write_bio_DHxparams libeay32.dllPEM_write_bio_DHxparamsPEM_write_bio_DSAPrivateKeyK_PEM_write_bio_DSAPrivateKey libeay32.dllPEM_write_bio_DSAPrivateKeyPEM_write_bio_DSA_PUBKEYE_PEM_write_bio_DSA_PUBKEY libeay32.dllPEM_write_bio_DSA_PUBKEYPEM_write_bio_DSAparamsC_PEM_write_bio_DSAparams libeay32.dllPEM_write_bio_DSAparamsPEM_write_bio_ECPKParametersM_PEM_write_bio_ECPKParameters libeay32.dllPEM_write_bio_ECPKParametersPEM_write_bio_ECPrivateKeyI_PEM_write_bio_ECPrivateKey libeay32.dllPEM_write_bio_ECPrivateKeyPEM_write_bio_EC_PUBKEYC_PEM_write_bio_EC_PUBKEY libeay32.dllPEM_write_bio_EC_PUBKEY&$PEM_write_bio_NETSCAPE_CERT_SEQUENCE]%_PEM_write_bio_NETSCAPE_CERT_SEQUENCE libeay32.dll$PEM_write_bio_NETSCAPE_CERT_SEQUENCEPEM_write_bio_PKCS7;_PEM_write_bio_PKCS7 libeay32.dllPEM_write_bio_PKCS7PEM_write_bio_PKCS7_streamI_PEM_write_bio_PKCS7_stream libeay32.dllPEM_write_bio_PKCS7_streamPEM_write_bio_PKCS8;_PEM_write_bio_PKCS8 libeay32.dllPEM_write_bio_PKCS8PEM_write_bio_PKCS8PrivateKeyO_PEM_write_bio_PKCS8PrivateKey libeay32.dllPEM_write_bio_PKCS8PrivateKey#!PEM_write_bio_PKCS8PrivateKey_nidW"_PEM_write_bio_PKCS8PrivateKey_nid libeay32.dll!PEM_write_bio_PKCS8PrivateKey_nid#!PEM_write_bio_PKCS8_PRIV_KEY_INFOW"_PEM_write_bio_PKCS8_PRIV_KEY_INFO libeay32.dll!PEM_write_bio_PKCS8_PRIV_KEY_INFOPEM_write_bio_PUBKEY=_PEM_write_bio_PUBKEY libeay32.dllPEM_write_bio_PUBKEYPEM_write_bio_ParametersE_PEM_write_bio_Parameters libeay32.dllPEM_write_bio_ParametersPEM_write_bio_PrivateKeyE_PEM_write_bio_PrivateKey libeay32.dllPEM_write_bio_PrivateKeyPEM_write_bio_RSAPrivateKeyK_PEM_write_bio_RSAPrivateKey libeay32.dllPEM_write_bio_RSAPrivateKeyPEM_write_bio_RSAPublicKeyI_PEM_write_bio_RSAPublicKey libeay32.dllPEM_write_bio_RSAPublicKeyPEM_write_bio_RSA_PUBKEYE_PEM_write_bio_RSA_PUBKEY libeay32.dllPEM_write_bio_RSA_PUBKEYPEM_write_bio_X5099_PEM_write_bio_X509 libeay32.dllPEM_write_bio_X509PEM_write_bio_X509_AUXA_PEM_write_bio_X509_AUX libeay32.dllPEM_write_bio_X509_AUXPEM_write_bio_X509_CERT_PAIRM_PEM_write_bio_X509_CERT_PAIR libeay32.dllPEM_write_bio_X509_CERT_PAIRPEM_write_bio_X509_CRLA_PEM_write_bio_X509_CRL libeay32.dllPEM_write_bio_X509_CRLPEM_write_bio_X509_REQA_PEM_write_bio_X509_REQ libeay32.dllPEM_write_bio_X509_REQPEM_write_bio_X509_REQ_NEWI_PEM_write_bio_X509_REQ_NEW libeay32.dllPEM_write_bio_X509_REQ_NEWPKCS12_AUTHSAFES_it;_PKCS12_AUTHSAFES_it libeay32.dllPKCS12_AUTHSAFES_itPKCS12_BAGS_free5_PKCS12_BAGS_free libeay32.dllPKCS12_BAGS_freePKCS12_BAGS_it1_PKCS12_BAGS_it libeay32.dllPKCS12_BAGS_itPKCS12_BAGS_new3_PKCS12_BAGS_new libeay32.dllPKCS12_BAGS_newPKCS12_MAC_DATA_free=_PKCS12_MAC_DATA_free libeay32.dllPKCS12_MAC_DATA_freePKCS12_MAC_DATA_it9_PKCS12_MAC_DATA_it libeay32.dllPKCS12_MAC_DATA_itPKCS12_MAC_DATA_new;_PKCS12_MAC_DATA_new libeay32.dllPKCS12_MAC_DATA_newPKCS12_MAKE_KEYBAG9_PKCS12_MAKE_KEYBAG libeay32.dllPKCS12_MAKE_KEYBAGPKCS12_MAKE_SHKEYBAG=_PKCS12_MAKE_SHKEYBAG libeay32.dllPKCS12_MAKE_SHKEYBAGPKCS12_PBE_add1_PKCS12_PBE_add libeay32.dllPKCS12_PBE_addPKCS12_PBE_keyivgen;_PKCS12_PBE_keyivgen libeay32.dllPKCS12_PBE_keyivgenPKCS12_SAFEBAGS_it9_PKCS12_SAFEBAGS_it libeay32.dllPKCS12_SAFEBAGS_itPKCS12_SAFEBAG_free;_PKCS12_SAFEBAG_free libeay32.dllPKCS12_SAFEBAG_freePKCS12_SAFEBAG_it7_PKCS12_SAFEBAG_it libeay32.dllPKCS12_SAFEBAG_itPKCS12_SAFEBAG_new9_PKCS12_SAFEBAG_new libeay32.dllPKCS12_SAFEBAG_newPKCS12_add_CSPName_ascA_PKCS12_add_CSPName_asc libeay32.dllPKCS12_add_CSPName_ascPKCS12_add_cert3_PKCS12_add_cert libeay32.dllPKCS12_add_certPKCS12_add_friendlyname_ascK_PKCS12_add_friendlyname_asc libeay32.dllPKCS12_add_friendlyname_ascPKCS12_add_friendlyname_uniK_PKCS12_add_friendlyname_uni libeay32.dllPKCS12_add_friendlyname_uniPKCS12_add_key1_PKCS12_add_key libeay32.dllPKCS12_add_keyPKCS12_add_localkeyid?_PKCS12_add_localkeyid libeay32.dllPKCS12_add_localkeyidPKCS12_add_safe3_PKCS12_add_safe libeay32.dllPKCS12_add_safePKCS12_add_safes5_PKCS12_add_safes libeay32.dllPKCS12_add_safesPKCS12_certbag2x509;_PKCS12_certbag2x509 libeay32.dllPKCS12_certbag2x509PKCS12_certbag2x509crlA_PKCS12_certbag2x509crl libeay32.dllPKCS12_certbag2x509crl PKCS12_create/_PKCS12_create libeay32.dll PKCS12_createPKCS12_decrypt_skey;_PKCS12_decrypt_skey libeay32.dllPKCS12_decrypt_skey PKCS12_free+ _PKCS12_free libeay32.dll PKCS12_freePKCS12_gen_mac1_PKCS12_gen_mac libeay32.dllPKCS12_gen_macPKCS12_get_attr_gen;_PKCS12_get_attr_gen libeay32.dllPKCS12_get_attr_genPKCS12_get_friendlynameC_PKCS12_get_friendlyname libeay32.dllPKCS12_get_friendlyname PKCS12_init+ _PKCS12_init libeay32.dll PKCS12_init PKCS12_it' _PKCS12_it libeay32.dll PKCS12_itPKCS12_item_decrypt_d2iC_PKCS12_item_decrypt_d2i libeay32.dllPKCS12_item_decrypt_d2iPKCS12_item_i2d_encryptC_PKCS12_item_i2d_encrypt libeay32.dllPKCS12_item_i2d_encryptPKCS12_item_pack_safebagE_PKCS12_item_pack_safebag libeay32.dllPKCS12_item_pack_safebagPKCS12_key_gen_asc9_PKCS12_key_gen_asc libeay32.dllPKCS12_key_gen_ascPKCS12_key_gen_uni9_PKCS12_key_gen_uni libeay32.dllPKCS12_key_gen_uni PKCS12_new) _PKCS12_new libeay32.dll PKCS12_newPKCS12_newpass1_PKCS12_newpass libeay32.dllPKCS12_newpassPKCS12_pack_authsafes?_PKCS12_pack_authsafes libeay32.dllPKCS12_pack_authsafesPKCS12_pack_p7data9_PKCS12_pack_p7data libeay32.dllPKCS12_pack_p7dataPKCS12_pack_p7encdata?_PKCS12_pack_p7encdata libeay32.dllPKCS12_pack_p7encdata PKCS12_parse- _PKCS12_parse libeay32.dll PKCS12_parsePKCS12_pbe_crypt5_PKCS12_pbe_crypt libeay32.dllPKCS12_pbe_cryptPKCS12_set_mac1_PKCS12_set_mac libeay32.dllPKCS12_set_macPKCS12_setup_mac5_PKCS12_setup_mac libeay32.dllPKCS12_setup_macPKCS12_unpack_authsafesC_PKCS12_unpack_authsafes libeay32.dllPKCS12_unpack_authsafesPKCS12_unpack_p7data=_PKCS12_unpack_p7data libeay32.dllPKCS12_unpack_p7dataPKCS12_unpack_p7encdataC_PKCS12_unpack_p7encdata libeay32.dllPKCS12_unpack_p7encdataPKCS12_verify_mac7_PKCS12_verify_mac libeay32.dllPKCS12_verify_macPKCS12_x5092certbag;_PKCS12_x5092certbag libeay32.dllPKCS12_x5092certbagPKCS12_x509crl2certbagA_PKCS12_x509crl2certbag libeay32.dllPKCS12_x509crl2certbag PKCS1_MGF1) _PKCS1_MGF1 libeay32.dll PKCS1_MGF1 PKCS5_PBE_add/_PKCS5_PBE_add libeay32.dll PKCS5_PBE_addPKCS5_PBE_keyivgen9_PKCS5_PBE_keyivgen libeay32.dllPKCS5_PBE_keyivgenPKCS5_PBKDF2_HMAC7_PKCS5_PBKDF2_HMAC libeay32.dllPKCS5_PBKDF2_HMACPKCS5_PBKDF2_HMAC_SHA1A_PKCS5_PBKDF2_HMAC_SHA1 libeay32.dllPKCS5_PBKDF2_HMAC_SHA1PKCS5_pbe2_set1_PKCS5_pbe2_set libeay32.dllPKCS5_pbe2_setPKCS5_pbe2_set_iv7_PKCS5_pbe2_set_iv libeay32.dllPKCS5_pbe2_set_iv PKCS5_pbe_set/_PKCS5_pbe_set libeay32.dll PKCS5_pbe_setPKCS5_pbe_set0_algor=_PKCS5_pbe_set0_algor libeay32.dllPKCS5_pbe_set0_algorPKCS5_pbkdf2_set5_PKCS5_pbkdf2_set libeay32.dllPKCS5_pbkdf2_setPKCS5_v2_PBE_keyivgen?_PKCS5_v2_PBE_keyivgen libeay32.dllPKCS5_v2_PBE_keyivgenPKCS7_ATTR_SIGN_it9_PKCS7_ATTR_SIGN_it libeay32.dllPKCS7_ATTR_SIGN_itPKCS7_ATTR_VERIFY_it=_PKCS7_ATTR_VERIFY_it libeay32.dllPKCS7_ATTR_VERIFY_itPKCS7_DIGEST_free7_PKCS7_DIGEST_free libeay32.dllPKCS7_DIGEST_freePKCS7_DIGEST_it3_PKCS7_DIGEST_it libeay32.dllPKCS7_DIGEST_itPKCS7_DIGEST_new5_PKCS7_DIGEST_new libeay32.dllPKCS7_DIGEST_newPKCS7_ENCRYPT_free9_PKCS7_ENCRYPT_free libeay32.dllPKCS7_ENCRYPT_freePKCS7_ENCRYPT_it5_PKCS7_ENCRYPT_it libeay32.dllPKCS7_ENCRYPT_itPKCS7_ENCRYPT_new7_PKCS7_ENCRYPT_new libeay32.dllPKCS7_ENCRYPT_newPKCS7_ENC_CONTENT_freeA_PKCS7_ENC_CONTENT_free libeay32.dllPKCS7_ENC_CONTENT_freePKCS7_ENC_CONTENT_it=_PKCS7_ENC_CONTENT_it libeay32.dllPKCS7_ENC_CONTENT_itPKCS7_ENC_CONTENT_new?_PKCS7_ENC_CONTENT_new libeay32.dllPKCS7_ENC_CONTENT_newPKCS7_ENVELOPE_free;_PKCS7_ENVELOPE_free libeay32.dllPKCS7_ENVELOPE_freePKCS7_ENVELOPE_it7_PKCS7_ENVELOPE_it libeay32.dllPKCS7_ENVELOPE_itPKCS7_ENVELOPE_new9_PKCS7_ENVELOPE_new libeay32.dllPKCS7_ENVELOPE_new PKCS7_ISSUER_AND_SERIAL_digestQ_PKCS7_ISSUER_AND_SERIAL_digest libeay32.dllPKCS7_ISSUER_AND_SERIAL_digestPKCS7_ISSUER_AND_SERIAL_freeM_PKCS7_ISSUER_AND_SERIAL_free libeay32.dllPKCS7_ISSUER_AND_SERIAL_freePKCS7_ISSUER_AND_SERIAL_itI_PKCS7_ISSUER_AND_SERIAL_it libeay32.dllPKCS7_ISSUER_AND_SERIAL_itPKCS7_ISSUER_AND_SERIAL_newK_PKCS7_ISSUER_AND_SERIAL_new libeay32.dllPKCS7_ISSUER_AND_SERIAL_newPKCS7_RECIP_INFO_free?_PKCS7_RECIP_INFO_free libeay32.dllPKCS7_RECIP_INFO_freePKCS7_RECIP_INFO_get0_algG_PKCS7_RECIP_INFO_get0_alg libeay32.dllPKCS7_RECIP_INFO_get0_algPKCS7_RECIP_INFO_it;_PKCS7_RECIP_INFO_it libeay32.dllPKCS7_RECIP_INFO_itPKCS7_RECIP_INFO_new=_PKCS7_RECIP_INFO_new libeay32.dllPKCS7_RECIP_INFO_newPKCS7_RECIP_INFO_set=_PKCS7_RECIP_INFO_set libeay32.dllPKCS7_RECIP_INFO_setPKCS7_SIGNED_free7_PKCS7_SIGNED_free libeay32.dllPKCS7_SIGNED_freePKCS7_SIGNED_it3_PKCS7_SIGNED_it libeay32.dllPKCS7_SIGNED_itPKCS7_SIGNED_new5_PKCS7_SIGNED_new libeay32.dllPKCS7_SIGNED_newPKCS7_SIGNER_INFO_freeA_PKCS7_SIGNER_INFO_free libeay32.dllPKCS7_SIGNER_INFO_freePKCS7_SIGNER_INFO_get0_algsK_PKCS7_SIGNER_INFO_get0_algs libeay32.dllPKCS7_SIGNER_INFO_get0_algsPKCS7_SIGNER_INFO_it=_PKCS7_SIGNER_INFO_it libeay32.dllPKCS7_SIGNER_INFO_itPKCS7_SIGNER_INFO_new?_PKCS7_SIGNER_INFO_new libeay32.dllPKCS7_SIGNER_INFO_newPKCS7_SIGNER_INFO_set?_PKCS7_SIGNER_INFO_set libeay32.dllPKCS7_SIGNER_INFO_setPKCS7_SIGNER_INFO_signA_PKCS7_SIGNER_INFO_sign libeay32.dllPKCS7_SIGNER_INFO_signPKCS7_SIGN_ENVELOPE_freeE_PKCS7_SIGN_ENVELOPE_free libeay32.dllPKCS7_SIGN_ENVELOPE_freePKCS7_SIGN_ENVELOPE_itA_PKCS7_SIGN_ENVELOPE_it libeay32.dllPKCS7_SIGN_ENVELOPE_itPKCS7_SIGN_ENVELOPE_newC_PKCS7_SIGN_ENVELOPE_new libeay32.dllPKCS7_SIGN_ENVELOPE_new PKCS7_add0_attrib_signing_timeQ_PKCS7_add0_attrib_signing_time libeay32.dllPKCS7_add0_attrib_signing_timePKCS7_add1_attrib_digestE_PKCS7_add1_attrib_digest libeay32.dllPKCS7_add1_attrib_digestPKCS7_add_attrib_content_typeO_PKCS7_add_attrib_content_type libeay32.dllPKCS7_add_attrib_content_typePKCS7_add_attrib_smimecapG_PKCS7_add_attrib_smimecap libeay32.dllPKCS7_add_attrib_smimecapPKCS7_add_attribute;_PKCS7_add_attribute libeay32.dllPKCS7_add_attributePKCS7_add_certificate?_PKCS7_add_certificate libeay32.dllPKCS7_add_certificate PKCS7_add_crl/_PKCS7_add_crl libeay32.dll PKCS7_add_crlPKCS7_add_recipient;_PKCS7_add_recipient libeay32.dllPKCS7_add_recipientPKCS7_add_recipient_infoE_PKCS7_add_recipient_info libeay32.dllPKCS7_add_recipient_infoPKCS7_add_signature;_PKCS7_add_signature libeay32.dllPKCS7_add_signaturePKCS7_add_signed_attributeI_PKCS7_add_signed_attribute libeay32.dllPKCS7_add_signed_attributePKCS7_add_signer5_PKCS7_add_signer libeay32.dllPKCS7_add_signerPKCS7_cert_from_signer_infoK_PKCS7_cert_from_signer_info libeay32.dllPKCS7_cert_from_signer_infoPKCS7_content_new7_PKCS7_content_new libeay32.dllPKCS7_content_new PKCS7_ctrl) _PKCS7_ctrl libeay32.dll PKCS7_ctrlPKCS7_dataDecode5_PKCS7_dataDecode libeay32.dllPKCS7_dataDecodePKCS7_dataFinal3_PKCS7_dataFinal libeay32.dllPKCS7_dataFinalPKCS7_dataInit1_PKCS7_dataInit libeay32.dllPKCS7_dataInitPKCS7_dataVerify5_PKCS7_dataVerify libeay32.dllPKCS7_dataVerify PKCS7_decrypt/_PKCS7_decrypt libeay32.dll PKCS7_decryptPKCS7_digest_from_attributesM_PKCS7_digest_from_attributes libeay32.dllPKCS7_digest_from_attributes PKCS7_dup' _PKCS7_dup libeay32.dll PKCS7_dup PKCS7_encrypt/_PKCS7_encrypt libeay32.dll PKCS7_encrypt PKCS7_final+ _PKCS7_final libeay32.dll PKCS7_final PKCS7_free) _PKCS7_free libeay32.dll PKCS7_freePKCS7_get0_signers9_PKCS7_get0_signers libeay32.dllPKCS7_get0_signersPKCS7_get_attribute;_PKCS7_get_attribute libeay32.dllPKCS7_get_attributePKCS7_get_issuer_and_serialK_PKCS7_get_issuer_and_serial libeay32.dllPKCS7_get_issuer_and_serialPKCS7_get_signed_attributeI_PKCS7_get_signed_attribute libeay32.dllPKCS7_get_signed_attributePKCS7_get_signer_info?_PKCS7_get_signer_info libeay32.dllPKCS7_get_signer_infoPKCS7_get_smimecap9_PKCS7_get_smimecap libeay32.dllPKCS7_get_smimecap PKCS7_it% _PKCS7_it libeay32.dllPKCS7_it PKCS7_new' _PKCS7_new libeay32.dll PKCS7_newPKCS7_print_ctx3_PKCS7_print_ctx libeay32.dllPKCS7_print_ctxPKCS7_set0_type_other?_PKCS7_set0_type_other libeay32.dllPKCS7_set0_type_otherPKCS7_set_attributes=_PKCS7_set_attributes libeay32.dllPKCS7_set_attributesPKCS7_set_cipher5_PKCS7_set_cipher libeay32.dllPKCS7_set_cipherPKCS7_set_content7_PKCS7_set_content libeay32.dllPKCS7_set_contentPKCS7_set_digest5_PKCS7_set_digest libeay32.dllPKCS7_set_digestPKCS7_set_signed_attributesK_PKCS7_set_signed_attributes libeay32.dllPKCS7_set_signed_attributesPKCS7_set_type1_PKCS7_set_type libeay32.dllPKCS7_set_type PKCS7_sign) _PKCS7_sign libeay32.dll PKCS7_signPKCS7_sign_add_signer?_PKCS7_sign_add_signer libeay32.dllPKCS7_sign_add_signerPKCS7_signatureVerify?_PKCS7_signatureVerify libeay32.dllPKCS7_signatureVerifyPKCS7_simple_smimecap?_PKCS7_simple_smimecap libeay32.dllPKCS7_simple_smimecap PKCS7_stream- _PKCS7_stream libeay32.dll PKCS7_streamPKCS7_to_TS_TST_INFO=_PKCS7_to_TS_TST_INFO libeay32.dllPKCS7_to_TS_TST_INFO PKCS7_verify- _PKCS7_verify libeay32.dll PKCS7_verifyPKCS8_PRIV_KEY_INFO_freeE_PKCS8_PRIV_KEY_INFO_free libeay32.dllPKCS8_PRIV_KEY_INFO_freePKCS8_PRIV_KEY_INFO_itA_PKCS8_PRIV_KEY_INFO_it libeay32.dllPKCS8_PRIV_KEY_INFO_itPKCS8_PRIV_KEY_INFO_newC_PKCS8_PRIV_KEY_INFO_new libeay32.dllPKCS8_PRIV_KEY_INFO_newPKCS8_add_keyusage9_PKCS8_add_keyusage libeay32.dllPKCS8_add_keyusage PKCS8_decrypt/_PKCS8_decrypt libeay32.dll PKCS8_decrypt PKCS8_encrypt/_PKCS8_encrypt libeay32.dll PKCS8_encryptPKCS8_pkey_get03_PKCS8_pkey_get0 libeay32.dllPKCS8_pkey_get0PKCS8_pkey_set03_PKCS8_pkey_set0 libeay32.dllPKCS8_pkey_set0PKCS8_set_broken5_PKCS8_set_broken libeay32.dllPKCS8_set_brokenPKEY_USAGE_PERIOD_freeA_PKEY_USAGE_PERIOD_free libeay32.dllPKEY_USAGE_PERIOD_freePKEY_USAGE_PERIOD_it=_PKEY_USAGE_PERIOD_it libeay32.dllPKEY_USAGE_PERIOD_itPKEY_USAGE_PERIOD_new?_PKEY_USAGE_PERIOD_new libeay32.dllPKEY_USAGE_PERIOD_newPOLICYINFO_free3_POLICYINFO_free libeay32.dllPOLICYINFO_free POLICYINFO_it/_POLICYINFO_it libeay32.dll POLICYINFO_itPOLICYINFO_new1_POLICYINFO_new libeay32.dllPOLICYINFO_newPOLICYQUALINFO_free;_POLICYQUALINFO_free libeay32.dllPOLICYQUALINFO_freePOLICYQUALINFO_it7_POLICYQUALINFO_it libeay32.dllPOLICYQUALINFO_itPOLICYQUALINFO_new9_POLICYQUALINFO_new libeay32.dllPOLICYQUALINFO_newPOLICY_CONSTRAINTS_freeC_POLICY_CONSTRAINTS_free libeay32.dllPOLICY_CONSTRAINTS_freePOLICY_CONSTRAINTS_it?_POLICY_CONSTRAINTS_it libeay32.dllPOLICY_CONSTRAINTS_itPOLICY_CONSTRAINTS_newA_POLICY_CONSTRAINTS_new libeay32.dllPOLICY_CONSTRAINTS_newPOLICY_MAPPINGS_it9_POLICY_MAPPINGS_it libeay32.dllPOLICY_MAPPINGS_itPOLICY_MAPPING_free;_POLICY_MAPPING_free libeay32.dllPOLICY_MAPPING_freePOLICY_MAPPING_it7_POLICY_MAPPING_it libeay32.dllPOLICY_MAPPING_itPOLICY_MAPPING_new9_POLICY_MAPPING_new libeay32.dllPOLICY_MAPPING_new PROXY_CERT_INFO_EXTENSION_freeQ_PROXY_CERT_INFO_EXTENSION_free libeay32.dllPROXY_CERT_INFO_EXTENSION_freePROXY_CERT_INFO_EXTENSION_itM_PROXY_CERT_INFO_EXTENSION_it libeay32.dllPROXY_CERT_INFO_EXTENSION_itPROXY_CERT_INFO_EXTENSION_newO_PROXY_CERT_INFO_EXTENSION_new libeay32.dllPROXY_CERT_INFO_EXTENSION_newPROXY_POLICY_free7_PROXY_POLICY_free libeay32.dllPROXY_POLICY_freePROXY_POLICY_it3_PROXY_POLICY_it libeay32.dllPROXY_POLICY_itPROXY_POLICY_new5_PROXY_POLICY_new libeay32.dllPROXY_POLICY_new RAND_SSLeay+ _RAND_SSLeay libeay32.dll RAND_SSLeay RAND_add% _RAND_add libeay32.dllRAND_add RAND_bytes) _RAND_bytes libeay32.dll RAND_bytes RAND_cleanup- _RAND_cleanup libeay32.dll RAND_cleanup RAND_egd% _RAND_egd libeay32.dllRAND_egdRAND_egd_bytes1_RAND_egd_bytes libeay32.dllRAND_egd_bytes RAND_event) _RAND_event libeay32.dll RAND_eventRAND_file_name1_RAND_file_name libeay32.dllRAND_file_nameRAND_get_rand_method=_RAND_get_rand_method libeay32.dllRAND_get_rand_methodRAND_load_file1_RAND_load_file libeay32.dllRAND_load_file RAND_poll' _RAND_poll libeay32.dll RAND_pollRAND_pseudo_bytes7_RAND_pseudo_bytes libeay32.dllRAND_pseudo_bytesRAND_query_egd_bytes=_RAND_query_egd_bytes libeay32.dllRAND_query_egd_bytes RAND_screen+ _RAND_screen libeay32.dll RAND_screen RAND_seed' _RAND_seed libeay32.dll RAND_seedRAND_set_rand_engine=_RAND_set_rand_engine libeay32.dllRAND_set_rand_engineRAND_set_rand_method=_RAND_set_rand_method libeay32.dllRAND_set_rand_method RAND_status+ _RAND_status libeay32.dll RAND_statusRAND_write_file3_RAND_write_file libeay32.dllRAND_write_fileRC2_cbc_encrypt3_RC2_cbc_encrypt libeay32.dllRC2_cbc_encryptRC2_cfb64_encrypt7_RC2_cfb64_encrypt libeay32.dllRC2_cfb64_encrypt RC2_decrypt+ _RC2_decrypt libeay32.dll RC2_decryptRC2_ecb_encrypt3_RC2_ecb_encrypt libeay32.dllRC2_ecb_encrypt RC2_encrypt+ _RC2_encrypt libeay32.dll RC2_encryptRC2_ofb64_encrypt7_RC2_ofb64_encrypt libeay32.dllRC2_ofb64_encrypt RC2_set_key+ _RC2_set_key libeay32.dll RC2_set_keyRC4_RC4 libeay32.dllRC4 RC4_options+ _RC4_options libeay32.dll RC4_options RC4_set_key+ _RC4_set_key libeay32.dll RC4_set_key RIPEMD160' _RIPEMD160 libeay32.dll RIPEMD160RIPEMD160_Final3_RIPEMD160_Final libeay32.dllRIPEMD160_FinalRIPEMD160_Init1_RIPEMD160_Init libeay32.dllRIPEMD160_InitRIPEMD160_Transform;_RIPEMD160_Transform libeay32.dllRIPEMD160_TransformRIPEMD160_Update5_RIPEMD160_Update libeay32.dllRIPEMD160_UpdateRSAPrivateKey_dup7_RSAPrivateKey_dup libeay32.dllRSAPrivateKey_dupRSAPrivateKey_it5_RSAPrivateKey_it libeay32.dllRSAPrivateKey_itRSAPublicKey_dup5_RSAPublicKey_dup libeay32.dllRSAPublicKey_dupRSAPublicKey_it3_RSAPublicKey_it libeay32.dllRSAPublicKey_itRSA_OAEP_PARAMS_free=_RSA_OAEP_PARAMS_free libeay32.dllRSA_OAEP_PARAMS_freeRSA_OAEP_PARAMS_it9_RSA_OAEP_PARAMS_it libeay32.dllRSA_OAEP_PARAMS_itRSA_OAEP_PARAMS_new;_RSA_OAEP_PARAMS_new libeay32.dllRSA_OAEP_PARAMS_newRSA_PKCS1_SSLeay5_RSA_PKCS1_SSLeay libeay32.dllRSA_PKCS1_SSLeayRSA_PSS_PARAMS_free;_RSA_PSS_PARAMS_free libeay32.dllRSA_PSS_PARAMS_freeRSA_PSS_PARAMS_it7_RSA_PSS_PARAMS_it libeay32.dllRSA_PSS_PARAMS_itRSA_PSS_PARAMS_new9_RSA_PSS_PARAMS_new libeay32.dllRSA_PSS_PARAMS_newRSA_X931_hash_id5_RSA_X931_hash_id libeay32.dllRSA_X931_hash_idRSA_blinding_off5_RSA_blinding_off libeay32.dllRSA_blinding_offRSA_blinding_on3_RSA_blinding_on libeay32.dllRSA_blinding_on RSA_check_key/_RSA_check_key libeay32.dll RSA_check_key RSA_flags' _RSA_flags libeay32.dll RSA_flags RSA_free% _RSA_free libeay32.dllRSA_freeRSA_generate_key5_RSA_generate_key libeay32.dllRSA_generate_keyRSA_generate_key_ex;_RSA_generate_key_ex libeay32.dllRSA_generate_key_exRSA_get_default_methodA_RSA_get_default_method libeay32.dllRSA_get_default_methodRSA_get_ex_data3_RSA_get_ex_data libeay32.dllRSA_get_ex_dataRSA_get_ex_new_index=_RSA_get_ex_new_index libeay32.dllRSA_get_ex_new_indexRSA_get_method1_RSA_get_method libeay32.dllRSA_get_methodRSA_memory_lock3_RSA_memory_lock libeay32.dllRSA_memory_lock RSA_new#_RSA_new libeay32.dllRSA_newRSA_new_method1_RSA_new_method libeay32.dllRSA_new_methodRSA_null_method3_RSA_null_method libeay32.dllRSA_null_methodRSA_padding_add_PKCS1_OAEPI_RSA_padding_add_PKCS1_OAEP libeay32.dllRSA_padding_add_PKCS1_OAEP!RSA_padding_add_PKCS1_OAEP_mgf1S _RSA_padding_add_PKCS1_OAEP_mgf1 libeay32.dllRSA_padding_add_PKCS1_OAEP_mgf1RSA_padding_add_PKCS1_PSSG_RSA_padding_add_PKCS1_PSS libeay32.dllRSA_padding_add_PKCS1_PSS RSA_padding_add_PKCS1_PSS_mgf1Q_RSA_padding_add_PKCS1_PSS_mgf1 libeay32.dllRSA_padding_add_PKCS1_PSS_mgf1RSA_padding_add_PKCS1_type_1M_RSA_padding_add_PKCS1_type_1 libeay32.dllRSA_padding_add_PKCS1_type_1RSA_padding_add_PKCS1_type_2M_RSA_padding_add_PKCS1_type_2 libeay32.dllRSA_padding_add_PKCS1_type_2RSA_padding_add_SSLv23A_RSA_padding_add_SSLv23 libeay32.dllRSA_padding_add_SSLv23RSA_padding_add_X931=_RSA_padding_add_X931 libeay32.dllRSA_padding_add_X931RSA_padding_add_none=_RSA_padding_add_none libeay32.dllRSA_padding_add_noneRSA_padding_check_PKCS1_OAEPM_RSA_padding_check_PKCS1_OAEP libeay32.dllRSA_padding_check_PKCS1_OAEP#!RSA_padding_check_PKCS1_OAEP_mgf1W"_RSA_padding_check_PKCS1_OAEP_mgf1 libeay32.dll!RSA_padding_check_PKCS1_OAEP_mgf1 RSA_padding_check_PKCS1_type_1Q_RSA_padding_check_PKCS1_type_1 libeay32.dllRSA_padding_check_PKCS1_type_1 RSA_padding_check_PKCS1_type_2Q_RSA_padding_check_PKCS1_type_2 libeay32.dllRSA_padding_check_PKCS1_type_2RSA_padding_check_SSLv23E_RSA_padding_check_SSLv23 libeay32.dllRSA_padding_check_SSLv23RSA_padding_check_X931A_RSA_padding_check_X931 libeay32.dllRSA_padding_check_X931RSA_padding_check_noneA_RSA_padding_check_none libeay32.dllRSA_padding_check_none RSA_print' _RSA_print libeay32.dll RSA_print RSA_print_fp- _RSA_print_fp libeay32.dll RSA_print_fpRSA_private_decrypt;_RSA_private_decrypt libeay32.dllRSA_private_decryptRSA_private_encrypt;_RSA_private_encrypt libeay32.dllRSA_private_encryptRSA_public_decrypt9_RSA_public_decrypt libeay32.dllRSA_public_decryptRSA_public_encrypt9_RSA_public_encrypt libeay32.dllRSA_public_encryptRSA_set_default_methodA_RSA_set_default_method libeay32.dllRSA_set_default_methodRSA_set_ex_data3_RSA_set_ex_data libeay32.dllRSA_set_ex_dataRSA_set_method1_RSA_set_method libeay32.dllRSA_set_methodRSA_setup_blinding9_RSA_setup_blinding libeay32.dllRSA_setup_blinding RSA_sign% _RSA_sign libeay32.dllRSA_signRSA_sign_ASN1_OCTET_STRINGI_RSA_sign_ASN1_OCTET_STRING libeay32.dllRSA_sign_ASN1_OCTET_STRING RSA_size% _RSA_size libeay32.dllRSA_size RSA_up_ref) _RSA_up_ref libeay32.dll RSA_up_ref RSA_verify) _RSA_verify libeay32.dll RSA_verifyRSA_verify_ASN1_OCTET_STRINGM_RSA_verify_ASN1_OCTET_STRING libeay32.dllRSA_verify_ASN1_OCTET_STRINGRSA_verify_PKCS1_PSS=_RSA_verify_PKCS1_PSS libeay32.dllRSA_verify_PKCS1_PSSRSA_verify_PKCS1_PSS_mgf1G_RSA_verify_PKCS1_PSS_mgf1 libeay32.dllRSA_verify_PKCS1_PSS_mgf1SEED_cbc_encrypt5_SEED_cbc_encrypt libeay32.dllSEED_cbc_encryptSEED_cfb128_encrypt;_SEED_cfb128_encrypt libeay32.dllSEED_cfb128_encrypt SEED_decrypt- _SEED_decrypt libeay32.dll SEED_decryptSEED_ecb_encrypt5_SEED_ecb_encrypt libeay32.dllSEED_ecb_encrypt SEED_encrypt- _SEED_encrypt libeay32.dll SEED_encryptSEED_ofb128_encrypt;_SEED_ofb128_encrypt libeay32.dllSEED_ofb128_encrypt SEED_set_key- _SEED_set_key libeay32.dll SEED_set_keySHA_SHA libeay32.dllSHASHA1_SHA1 libeay32.dllSHA1 SHA1_Final) _SHA1_Final libeay32.dll SHA1_Final SHA1_Init' _SHA1_Init libeay32.dll SHA1_InitSHA1_Transform1_SHA1_Transform libeay32.dllSHA1_Transform SHA1_Update+ _SHA1_Update libeay32.dll SHA1_UpdateSHA224!_SHA224 libeay32.dllSHA224 SHA224_Final- _SHA224_Final libeay32.dll SHA224_Final SHA224_Init+ _SHA224_Init libeay32.dll SHA224_Init SHA224_Update/_SHA224_Update libeay32.dll SHA224_UpdateSHA256!_SHA256 libeay32.dllSHA256 SHA256_Final- _SHA256_Final libeay32.dll SHA256_Final SHA256_Init+ _SHA256_Init libeay32.dll SHA256_InitSHA256_Transform5_SHA256_Transform libeay32.dllSHA256_Transform SHA256_Update/_SHA256_Update libeay32.dll SHA256_UpdateSHA384!_SHA384 libeay32.dllSHA384 SHA384_Final- _SHA384_Final libeay32.dll SHA384_Final SHA384_Init+ _SHA384_Init libeay32.dll SHA384_Init SHA384_Update/_SHA384_Update libeay32.dll SHA384_UpdateSHA512!_SHA512 libeay32.dllSHA512 SHA512_Final- _SHA512_Final libeay32.dll SHA512_Final SHA512_Init+ _SHA512_Init libeay32.dll SHA512_InitSHA512_Transform5_SHA512_Transform libeay32.dllSHA512_Transform SHA512_Update/_SHA512_Update libeay32.dll SHA512_Update SHA_Final' _SHA_Final libeay32.dll SHA_Final SHA_Init% _SHA_Init libeay32.dllSHA_Init SHA_Transform/_SHA_Transform libeay32.dll SHA_Transform SHA_Update) _SHA_Update libeay32.dll SHA_UpdateSMIME_crlf_copy3_SMIME_crlf_copy libeay32.dllSMIME_crlf_copySMIME_read_ASN13_SMIME_read_ASN1 libeay32.dllSMIME_read_ASN1SMIME_read_CMS1_SMIME_read_CMS libeay32.dllSMIME_read_CMSSMIME_read_PKCS75_SMIME_read_PKCS7 libeay32.dllSMIME_read_PKCS7 SMIME_text) _SMIME_text libeay32.dll SMIME_textSMIME_write_ASN15_SMIME_write_ASN1 libeay32.dllSMIME_write_ASN1SMIME_write_CMS3_SMIME_write_CMS libeay32.dllSMIME_write_CMSSMIME_write_PKCS77_SMIME_write_PKCS7 libeay32.dllSMIME_write_PKCS7 SRP_Calc_A) _SRP_Calc_A libeay32.dll SRP_Calc_A SRP_Calc_B) _SRP_Calc_B libeay32.dll SRP_Calc_BSRP_Calc_client_key;_SRP_Calc_client_key libeay32.dllSRP_Calc_client_keySRP_Calc_server_key;_SRP_Calc_server_key libeay32.dllSRP_Calc_server_key SRP_Calc_u) _SRP_Calc_u libeay32.dll SRP_Calc_u SRP_Calc_x) _SRP_Calc_x libeay32.dll SRP_Calc_xSRP_VBASE_free1_SRP_VBASE_free libeay32.dllSRP_VBASE_freeSRP_VBASE_get1_by_userA_SRP_VBASE_get1_by_user libeay32.dllSRP_VBASE_get1_by_userSRP_VBASE_get_by_user?_SRP_VBASE_get_by_user libeay32.dllSRP_VBASE_get_by_userSRP_VBASE_init1_SRP_VBASE_init libeay32.dllSRP_VBASE_init SRP_VBASE_new/_SRP_VBASE_new libeay32.dll SRP_VBASE_newSRP_Verify_A_mod_N9_SRP_Verify_A_mod_N libeay32.dllSRP_Verify_A_mod_NSRP_Verify_B_mod_N9_SRP_Verify_B_mod_N libeay32.dllSRP_Verify_B_mod_NSRP_check_known_gN_paramE_SRP_check_known_gN_param libeay32.dllSRP_check_known_gN_paramSRP_create_verifier;_SRP_create_verifier libeay32.dllSRP_create_verifierSRP_create_verifier_BNA_SRP_create_verifier_BN libeay32.dllSRP_create_verifier_BNSRP_get_default_gN9_SRP_get_default_gN libeay32.dllSRP_get_default_gNSRP_user_pwd_free7_SRP_user_pwd_free libeay32.dllSRP_user_pwd_freeSSLeay!_SSLeay libeay32.dllSSLeaySSLeay_version1_SSLeay_version libeay32.dllSSLeay_version SXNETID_free- _SXNETID_free libeay32.dll SXNETID_free SXNETID_it) _SXNETID_it libeay32.dll SXNETID_it SXNETID_new+ _SXNETID_new libeay32.dll SXNETID_newSXNET_add_id_INTEGER=_SXNET_add_id_INTEGER libeay32.dllSXNET_add_id_INTEGERSXNET_add_id_asc5_SXNET_add_id_asc libeay32.dllSXNET_add_id_ascSXNET_add_id_ulong9_SXNET_add_id_ulong libeay32.dllSXNET_add_id_ulong SXNET_free) _SXNET_free libeay32.dll SXNET_freeSXNET_get_id_INTEGER=_SXNET_get_id_INTEGER libeay32.dllSXNET_get_id_INTEGERSXNET_get_id_asc5_SXNET_get_id_asc libeay32.dllSXNET_get_id_ascSXNET_get_id_ulong9_SXNET_get_id_ulong libeay32.dllSXNET_get_id_ulong SXNET_it% _SXNET_it libeay32.dllSXNET_it SXNET_new' _SXNET_new libeay32.dll SXNET_newTS_ACCURACY_dup3_TS_ACCURACY_dup libeay32.dllTS_ACCURACY_dupTS_ACCURACY_free5_TS_ACCURACY_free libeay32.dllTS_ACCURACY_freeTS_ACCURACY_get_microsA_TS_ACCURACY_get_micros libeay32.dllTS_ACCURACY_get_microsTS_ACCURACY_get_millisA_TS_ACCURACY_get_millis libeay32.dllTS_ACCURACY_get_millisTS_ACCURACY_get_secondsC_TS_ACCURACY_get_seconds libeay32.dllTS_ACCURACY_get_secondsTS_ACCURACY_new3_TS_ACCURACY_new libeay32.dllTS_ACCURACY_newTS_ACCURACY_set_microsA_TS_ACCURACY_set_micros libeay32.dllTS_ACCURACY_set_microsTS_ACCURACY_set_millisA_TS_ACCURACY_set_millis libeay32.dllTS_ACCURACY_set_millisTS_ACCURACY_set_secondsC_TS_ACCURACY_set_seconds libeay32.dllTS_ACCURACY_set_secondsTS_ASN1_INTEGER_print_bioG_TS_ASN1_INTEGER_print_bio libeay32.dllTS_ASN1_INTEGER_print_bioTS_CONF_get_tsa_sectionC_TS_CONF_get_tsa_section libeay32.dllTS_CONF_get_tsa_sectionTS_CONF_load_cert7_TS_CONF_load_cert libeay32.dllTS_CONF_load_certTS_CONF_load_certs9_TS_CONF_load_certs libeay32.dllTS_CONF_load_certsTS_CONF_load_key5_TS_CONF_load_key libeay32.dllTS_CONF_load_keyTS_CONF_set_accuracy=_TS_CONF_set_accuracy libeay32.dllTS_CONF_set_accuracyTS_CONF_set_certs7_TS_CONF_set_certs libeay32.dllTS_CONF_set_certs$"TS_CONF_set_clock_precision_digitsY#_TS_CONF_set_clock_precision_digits libeay32.dll"TS_CONF_set_clock_precision_digitsTS_CONF_set_crypto_deviceG_TS_CONF_set_crypto_device libeay32.dllTS_CONF_set_crypto_deviceTS_CONF_set_def_policyA_TS_CONF_set_def_policy libeay32.dllTS_CONF_set_def_policyTS_CONF_set_default_engineI_TS_CONF_set_default_engine libeay32.dllTS_CONF_set_default_engineTS_CONF_set_digests;_TS_CONF_set_digests libeay32.dllTS_CONF_set_digestsTS_CONF_set_ess_cert_id_chainO_TS_CONF_set_ess_cert_id_chain libeay32.dllTS_CONF_set_ess_cert_id_chainTS_CONF_set_ordering=_TS_CONF_set_ordering libeay32.dllTS_CONF_set_orderingTS_CONF_set_policies=_TS_CONF_set_policies libeay32.dllTS_CONF_set_policiesTS_CONF_set_serial9_TS_CONF_set_serial libeay32.dllTS_CONF_set_serialTS_CONF_set_signer_certC_TS_CONF_set_signer_cert libeay32.dllTS_CONF_set_signer_certTS_CONF_set_signer_keyA_TS_CONF_set_signer_key libeay32.dllTS_CONF_set_signer_keyTS_CONF_set_tsa_name=_TS_CONF_set_tsa_name libeay32.dllTS_CONF_set_tsa_nameTS_MSG_IMPRINT_dup9_TS_MSG_IMPRINT_dup libeay32.dllTS_MSG_IMPRINT_dupTS_MSG_IMPRINT_free;_TS_MSG_IMPRINT_free libeay32.dllTS_MSG_IMPRINT_freeTS_MSG_IMPRINT_get_algoC_TS_MSG_IMPRINT_get_algo libeay32.dllTS_MSG_IMPRINT_get_algoTS_MSG_IMPRINT_get_msgA_TS_MSG_IMPRINT_get_msg libeay32.dllTS_MSG_IMPRINT_get_msgTS_MSG_IMPRINT_new9_TS_MSG_IMPRINT_new libeay32.dllTS_MSG_IMPRINT_newTS_MSG_IMPRINT_print_bioE_TS_MSG_IMPRINT_print_bio libeay32.dllTS_MSG_IMPRINT_print_bioTS_MSG_IMPRINT_set_algoC_TS_MSG_IMPRINT_set_algo libeay32.dllTS_MSG_IMPRINT_set_algoTS_MSG_IMPRINT_set_msgA_TS_MSG_IMPRINT_set_msg libeay32.dllTS_MSG_IMPRINT_set_msgTS_OBJ_print_bio5_TS_OBJ_print_bio libeay32.dllTS_OBJ_print_bioTS_REQ_add_ext1_TS_REQ_add_ext libeay32.dllTS_REQ_add_extTS_REQ_delete_ext7_TS_REQ_delete_ext libeay32.dllTS_REQ_delete_ext TS_REQ_dup) _TS_REQ_dup libeay32.dll TS_REQ_dupTS_REQ_ext_free3_TS_REQ_ext_free libeay32.dllTS_REQ_ext_free TS_REQ_free+ _TS_REQ_free libeay32.dll TS_REQ_freeTS_REQ_get_cert_req;_TS_REQ_get_cert_req libeay32.dllTS_REQ_get_cert_reqTS_REQ_get_ext1_TS_REQ_get_ext libeay32.dllTS_REQ_get_extTS_REQ_get_ext_by_NID?_TS_REQ_get_ext_by_NID libeay32.dllTS_REQ_get_ext_by_NIDTS_REQ_get_ext_by_OBJ?_TS_REQ_get_ext_by_OBJ libeay32.dllTS_REQ_get_ext_by_OBJTS_REQ_get_ext_by_criticalI_TS_REQ_get_ext_by_critical libeay32.dllTS_REQ_get_ext_by_criticalTS_REQ_get_ext_count=_TS_REQ_get_ext_count libeay32.dllTS_REQ_get_ext_countTS_REQ_get_ext_d2i9_TS_REQ_get_ext_d2i libeay32.dllTS_REQ_get_ext_d2iTS_REQ_get_exts3_TS_REQ_get_exts libeay32.dllTS_REQ_get_extsTS_REQ_get_msg_imprintA_TS_REQ_get_msg_imprint libeay32.dllTS_REQ_get_msg_imprintTS_REQ_get_nonce5_TS_REQ_get_nonce libeay32.dllTS_REQ_get_nonceTS_REQ_get_policy_id=_TS_REQ_get_policy_id libeay32.dllTS_REQ_get_policy_idTS_REQ_get_version9_TS_REQ_get_version libeay32.dllTS_REQ_get_version TS_REQ_new) _TS_REQ_new libeay32.dll TS_REQ_newTS_REQ_print_bio5_TS_REQ_print_bio libeay32.dllTS_REQ_print_bioTS_REQ_set_cert_req;_TS_REQ_set_cert_req libeay32.dllTS_REQ_set_cert_reqTS_REQ_set_msg_imprintA_TS_REQ_set_msg_imprint libeay32.dllTS_REQ_set_msg_imprintTS_REQ_set_nonce5_TS_REQ_set_nonce libeay32.dllTS_REQ_set_nonceTS_REQ_set_policy_id=_TS_REQ_set_policy_id libeay32.dllTS_REQ_set_policy_idTS_REQ_set_version9_TS_REQ_set_version libeay32.dllTS_REQ_set_versionTS_REQ_to_TS_VERIFY_CTXC_TS_REQ_to_TS_VERIFY_CTX libeay32.dllTS_REQ_to_TS_VERIFY_CTXTS_RESP_CTX_add_failure_infoM_TS_RESP_CTX_add_failure_info libeay32.dllTS_RESP_CTX_add_failure_infoTS_RESP_CTX_add_flags?_TS_RESP_CTX_add_flags libeay32.dllTS_RESP_CTX_add_flagsTS_RESP_CTX_add_md9_TS_RESP_CTX_add_md libeay32.dllTS_RESP_CTX_add_mdTS_RESP_CTX_add_policyA_TS_RESP_CTX_add_policy libeay32.dllTS_RESP_CTX_add_policyTS_RESP_CTX_free5_TS_RESP_CTX_free libeay32.dllTS_RESP_CTX_freeTS_RESP_CTX_get_requestC_TS_RESP_CTX_get_request libeay32.dllTS_RESP_CTX_get_requestTS_RESP_CTX_get_tst_infoE_TS_RESP_CTX_get_tst_info libeay32.dllTS_RESP_CTX_get_tst_infoTS_RESP_CTX_new3_TS_RESP_CTX_new libeay32.dllTS_RESP_CTX_newTS_RESP_CTX_set_accuracyE_TS_RESP_CTX_set_accuracy libeay32.dllTS_RESP_CTX_set_accuracyTS_RESP_CTX_set_certs?_TS_RESP_CTX_set_certs libeay32.dllTS_RESP_CTX_set_certs(&TS_RESP_CTX_set_clock_precision_digitsa'_TS_RESP_CTX_set_clock_precision_digits libeay32.dll&TS_RESP_CTX_set_clock_precision_digitsTS_RESP_CTX_set_def_policyI_TS_RESP_CTX_set_def_policy libeay32.dllTS_RESP_CTX_set_def_policyTS_RESP_CTX_set_extension_cbM_TS_RESP_CTX_set_extension_cb libeay32.dllTS_RESP_CTX_set_extension_cbTS_RESP_CTX_set_serial_cbG_TS_RESP_CTX_set_serial_cb libeay32.dllTS_RESP_CTX_set_serial_cbTS_RESP_CTX_set_signer_certK_TS_RESP_CTX_set_signer_cert libeay32.dllTS_RESP_CTX_set_signer_certTS_RESP_CTX_set_signer_keyI_TS_RESP_CTX_set_signer_key libeay32.dllTS_RESP_CTX_set_signer_keyTS_RESP_CTX_set_status_infoK_TS_RESP_CTX_set_status_info libeay32.dllTS_RESP_CTX_set_status_info" TS_RESP_CTX_set_status_info_condU!_TS_RESP_CTX_set_status_info_cond libeay32.dll TS_RESP_CTX_set_status_info_condTS_RESP_CTX_set_time_cbC_TS_RESP_CTX_set_time_cb libeay32.dllTS_RESP_CTX_set_time_cbTS_RESP_create_responseC_TS_RESP_create_response libeay32.dllTS_RESP_create_response TS_RESP_dup+ _TS_RESP_dup libeay32.dll TS_RESP_dup TS_RESP_free- _TS_RESP_free libeay32.dll TS_RESP_freeTS_RESP_get_status_infoC_TS_RESP_get_status_info libeay32.dllTS_RESP_get_status_infoTS_RESP_get_token7_TS_RESP_get_token libeay32.dllTS_RESP_get_tokenTS_RESP_get_tst_info=_TS_RESP_get_tst_info libeay32.dllTS_RESP_get_tst_info TS_RESP_new+ _TS_RESP_new libeay32.dll TS_RESP_newTS_RESP_print_bio7_TS_RESP_print_bio libeay32.dllTS_RESP_print_bioTS_RESP_set_status_infoC_TS_RESP_set_status_info libeay32.dllTS_RESP_set_status_infoTS_RESP_set_tst_info=_TS_RESP_set_tst_info libeay32.dllTS_RESP_set_tst_infoTS_RESP_verify_responseC_TS_RESP_verify_response libeay32.dllTS_RESP_verify_responseTS_RESP_verify_signatureE_TS_RESP_verify_signature libeay32.dllTS_RESP_verify_signatureTS_RESP_verify_token=_TS_RESP_verify_token libeay32.dllTS_RESP_verify_tokenTS_STATUS_INFO_dup9_TS_STATUS_INFO_dup libeay32.dllTS_STATUS_INFO_dupTS_STATUS_INFO_free;_TS_STATUS_INFO_free libeay32.dllTS_STATUS_INFO_freeTS_STATUS_INFO_new9_TS_STATUS_INFO_new libeay32.dllTS_STATUS_INFO_newTS_STATUS_INFO_print_bioE_TS_STATUS_INFO_print_bio libeay32.dllTS_STATUS_INFO_print_bioTS_TST_INFO_add_ext;_TS_TST_INFO_add_ext libeay32.dllTS_TST_INFO_add_extTS_TST_INFO_delete_extA_TS_TST_INFO_delete_ext libeay32.dllTS_TST_INFO_delete_extTS_TST_INFO_dup3_TS_TST_INFO_dup libeay32.dllTS_TST_INFO_dupTS_TST_INFO_ext_free=_TS_TST_INFO_ext_free libeay32.dllTS_TST_INFO_ext_freeTS_TST_INFO_free5_TS_TST_INFO_free libeay32.dllTS_TST_INFO_freeTS_TST_INFO_get_accuracyE_TS_TST_INFO_get_accuracy libeay32.dllTS_TST_INFO_get_accuracyTS_TST_INFO_get_ext;_TS_TST_INFO_get_ext libeay32.dllTS_TST_INFO_get_extTS_TST_INFO_get_ext_by_NIDI_TS_TST_INFO_get_ext_by_NID libeay32.dllTS_TST_INFO_get_ext_by_NIDTS_TST_INFO_get_ext_by_OBJI_TS_TST_INFO_get_ext_by_OBJ libeay32.dllTS_TST_INFO_get_ext_by_OBJ!TS_TST_INFO_get_ext_by_criticalS _TS_TST_INFO_get_ext_by_critical libeay32.dllTS_TST_INFO_get_ext_by_criticalTS_TST_INFO_get_ext_countG_TS_TST_INFO_get_ext_count libeay32.dllTS_TST_INFO_get_ext_countTS_TST_INFO_get_ext_d2iC_TS_TST_INFO_get_ext_d2i libeay32.dllTS_TST_INFO_get_ext_d2iTS_TST_INFO_get_exts=_TS_TST_INFO_get_exts libeay32.dllTS_TST_INFO_get_extsTS_TST_INFO_get_msg_imprintK_TS_TST_INFO_get_msg_imprint libeay32.dllTS_TST_INFO_get_msg_imprintTS_TST_INFO_get_nonce?_TS_TST_INFO_get_nonce libeay32.dllTS_TST_INFO_get_nonceTS_TST_INFO_get_orderingE_TS_TST_INFO_get_ordering libeay32.dllTS_TST_INFO_get_orderingTS_TST_INFO_get_policy_idG_TS_TST_INFO_get_policy_id libeay32.dllTS_TST_INFO_get_policy_idTS_TST_INFO_get_serialA_TS_TST_INFO_get_serial libeay32.dllTS_TST_INFO_get_serialTS_TST_INFO_get_time=_TS_TST_INFO_get_time libeay32.dllTS_TST_INFO_get_timeTS_TST_INFO_get_tsa;_TS_TST_INFO_get_tsa libeay32.dllTS_TST_INFO_get_tsaTS_TST_INFO_get_versionC_TS_TST_INFO_get_version libeay32.dllTS_TST_INFO_get_versionTS_TST_INFO_new3_TS_TST_INFO_new libeay32.dllTS_TST_INFO_newTS_TST_INFO_print_bio?_TS_TST_INFO_print_bio libeay32.dllTS_TST_INFO_print_bioTS_TST_INFO_set_accuracyE_TS_TST_INFO_set_accuracy libeay32.dllTS_TST_INFO_set_accuracyTS_TST_INFO_set_msg_imprintK_TS_TST_INFO_set_msg_imprint libeay32.dllTS_TST_INFO_set_msg_imprintTS_TST_INFO_set_nonce?_TS_TST_INFO_set_nonce libeay32.dllTS_TST_INFO_set_nonceTS_TST_INFO_set_orderingE_TS_TST_INFO_set_ordering libeay32.dllTS_TST_INFO_set_orderingTS_TST_INFO_set_policy_idG_TS_TST_INFO_set_policy_id libeay32.dllTS_TST_INFO_set_policy_idTS_TST_INFO_set_serialA_TS_TST_INFO_set_serial libeay32.dllTS_TST_INFO_set_serialTS_TST_INFO_set_time=_TS_TST_INFO_set_time libeay32.dllTS_TST_INFO_set_timeTS_TST_INFO_set_tsa;_TS_TST_INFO_set_tsa libeay32.dllTS_TST_INFO_set_tsaTS_TST_INFO_set_versionC_TS_TST_INFO_set_version libeay32.dllTS_TST_INFO_set_versionTS_VERIFY_CTX_cleanup?_TS_VERIFY_CTX_cleanup libeay32.dllTS_VERIFY_CTX_cleanupTS_VERIFY_CTX_free9_TS_VERIFY_CTX_free libeay32.dllTS_VERIFY_CTX_freeTS_VERIFY_CTX_init9_TS_VERIFY_CTX_init libeay32.dllTS_VERIFY_CTX_initTS_VERIFY_CTX_new7_TS_VERIFY_CTX_new libeay32.dllTS_VERIFY_CTX_newTS_X509_ALGOR_print_bioC_TS_X509_ALGOR_print_bio libeay32.dllTS_X509_ALGOR_print_bioTS_ext_print_bio5_TS_ext_print_bio libeay32.dllTS_ext_print_bioTXT_DB_create_index;_TXT_DB_create_index libeay32.dllTXT_DB_create_index TXT_DB_free+ _TXT_DB_free libeay32.dll TXT_DB_freeTXT_DB_get_by_index;_TXT_DB_get_by_index libeay32.dllTXT_DB_get_by_index TXT_DB_insert/_TXT_DB_insert libeay32.dll TXT_DB_insert TXT_DB_read+ _TXT_DB_read libeay32.dll TXT_DB_read TXT_DB_write- _TXT_DB_write libeay32.dll TXT_DB_write UI_OpenSSL) _UI_OpenSSL libeay32.dll UI_OpenSSLUI_UTIL_read_pw3_UI_UTIL_read_pw libeay32.dllUI_UTIL_read_pwUI_UTIL_read_pw_stringA_UI_UTIL_read_pw_string libeay32.dllUI_UTIL_read_pw_stringUI_add_error_string;_UI_add_error_string libeay32.dllUI_add_error_stringUI_add_info_string9_UI_add_info_string libeay32.dllUI_add_info_stringUI_add_input_boolean=_UI_add_input_boolean libeay32.dllUI_add_input_booleanUI_add_input_string;_UI_add_input_string libeay32.dllUI_add_input_stringUI_add_user_data5_UI_add_user_data libeay32.dllUI_add_user_dataUI_add_verify_string=_UI_add_verify_string libeay32.dllUI_add_verify_stringUI_construct_prompt;_UI_construct_prompt libeay32.dllUI_construct_promptUI_create_method5_UI_create_method libeay32.dllUI_create_method UI_ctrl#_UI_ctrl libeay32.dllUI_ctrlUI_destroy_method7_UI_destroy_method libeay32.dllUI_destroy_methodUI_dup_error_string;_UI_dup_error_string libeay32.dllUI_dup_error_stringUI_dup_info_string9_UI_dup_info_string libeay32.dllUI_dup_info_stringUI_dup_input_boolean=_UI_dup_input_boolean libeay32.dllUI_dup_input_booleanUI_dup_input_string;_UI_dup_input_string libeay32.dllUI_dup_input_stringUI_dup_verify_string=_UI_dup_verify_string libeay32.dllUI_dup_verify_string UI_free#_UI_free libeay32.dllUI_freeUI_get0_action_string?_UI_get0_action_string libeay32.dllUI_get0_action_stringUI_get0_output_string?_UI_get0_output_string libeay32.dllUI_get0_output_stringUI_get0_result1_UI_get0_result libeay32.dllUI_get0_resultUI_get0_result_string?_UI_get0_result_string libeay32.dllUI_get0_result_stringUI_get0_test_string;_UI_get0_test_string libeay32.dllUI_get0_test_stringUI_get0_user_data7_UI_get0_user_data libeay32.dllUI_get0_user_dataUI_get_default_method?_UI_get_default_method libeay32.dllUI_get_default_methodUI_get_ex_data1_UI_get_ex_data libeay32.dllUI_get_ex_dataUI_get_ex_new_index;_UI_get_ex_new_index libeay32.dllUI_get_ex_new_indexUI_get_input_flags9_UI_get_input_flags libeay32.dllUI_get_input_flags UI_get_method/_UI_get_method libeay32.dll UI_get_methodUI_get_result_maxsize?_UI_get_result_maxsize libeay32.dllUI_get_result_maxsizeUI_get_result_minsize?_UI_get_result_minsize libeay32.dllUI_get_result_minsizeUI_get_string_type9_UI_get_string_type libeay32.dllUI_get_string_typeUI_method_get_closer=_UI_method_get_closer libeay32.dllUI_method_get_closerUI_method_get_flusher?_UI_method_get_flusher libeay32.dllUI_method_get_flusherUI_method_get_opener=_UI_method_get_opener libeay32.dllUI_method_get_opener" UI_method_get_prompt_constructorU!_UI_method_get_prompt_constructor libeay32.dll UI_method_get_prompt_constructorUI_method_get_reader=_UI_method_get_reader libeay32.dllUI_method_get_readerUI_method_get_writer=_UI_method_get_writer libeay32.dllUI_method_get_writerUI_method_set_closer=_UI_method_set_closer libeay32.dllUI_method_set_closerUI_method_set_flusher?_UI_method_set_flusher libeay32.dllUI_method_set_flusherUI_method_set_opener=_UI_method_set_opener libeay32.dllUI_method_set_opener" UI_method_set_prompt_constructorU!_UI_method_set_prompt_constructor libeay32.dll UI_method_set_prompt_constructorUI_method_set_reader=_UI_method_set_reader libeay32.dllUI_method_set_readerUI_method_set_writer=_UI_method_set_writer libeay32.dllUI_method_set_writerUI_new!_UI_new libeay32.dllUI_new UI_new_method/_UI_new_method libeay32.dll UI_new_method UI_process) _UI_process libeay32.dll UI_processUI_set_default_method?_UI_set_default_method libeay32.dllUI_set_default_methodUI_set_ex_data1_UI_set_ex_data libeay32.dllUI_set_ex_data UI_set_method/_UI_set_method libeay32.dll UI_set_method UI_set_result/_UI_set_result libeay32.dll UI_set_resultUSERNOTICE_free3_USERNOTICE_free libeay32.dllUSERNOTICE_free USERNOTICE_it/_USERNOTICE_it libeay32.dll USERNOTICE_itUSERNOTICE_new1_USERNOTICE_new libeay32.dllUSERNOTICE_new UTF8_getc' _UTF8_getc libeay32.dll UTF8_getc UTF8_putc' _UTF8_putc libeay32.dll UTF8_putc WHIRLPOOL' _WHIRLPOOL libeay32.dll WHIRLPOOLWHIRLPOOL_BitUpdate;_WHIRLPOOL_BitUpdate libeay32.dllWHIRLPOOL_BitUpdateWHIRLPOOL_Final3_WHIRLPOOL_Final libeay32.dllWHIRLPOOL_FinalWHIRLPOOL_Init1_WHIRLPOOL_Init libeay32.dllWHIRLPOOL_InitWHIRLPOOL_Update5_WHIRLPOOL_Update libeay32.dllWHIRLPOOL_UpdateX509V3_EXT_CRL_add_confC_X509V3_EXT_CRL_add_conf libeay32.dllX509V3_EXT_CRL_add_confX509V3_EXT_CRL_add_nconfE_X509V3_EXT_CRL_add_nconf libeay32.dllX509V3_EXT_CRL_add_nconfX509V3_EXT_REQ_add_confC_X509V3_EXT_REQ_add_conf libeay32.dllX509V3_EXT_REQ_add_confX509V3_EXT_REQ_add_nconfE_X509V3_EXT_REQ_add_nconf libeay32.dllX509V3_EXT_REQ_add_nconfX509V3_EXT_add1_X509V3_EXT_add libeay32.dllX509V3_EXT_addX509V3_EXT_add_alias=_X509V3_EXT_add_alias libeay32.dllX509V3_EXT_add_aliasX509V3_EXT_add_conf;_X509V3_EXT_add_conf libeay32.dllX509V3_EXT_add_confX509V3_EXT_add_list;_X509V3_EXT_add_list libeay32.dllX509V3_EXT_add_listX509V3_EXT_add_nconf=_X509V3_EXT_add_nconf libeay32.dllX509V3_EXT_add_nconfX509V3_EXT_add_nconf_skC_X509V3_EXT_add_nconf_sk libeay32.dllX509V3_EXT_add_nconf_skX509V3_EXT_cleanup9_X509V3_EXT_cleanup libeay32.dllX509V3_EXT_cleanupX509V3_EXT_conf3_X509V3_EXT_conf libeay32.dllX509V3_EXT_confX509V3_EXT_conf_nid;_X509V3_EXT_conf_nid libeay32.dllX509V3_EXT_conf_nidX509V3_EXT_d2i1_X509V3_EXT_d2i libeay32.dllX509V3_EXT_d2iX509V3_EXT_free3_X509V3_EXT_free libeay32.dllX509V3_EXT_freeX509V3_EXT_get1_X509V3_EXT_get libeay32.dllX509V3_EXT_getX509V3_EXT_get_nid9_X509V3_EXT_get_nid libeay32.dllX509V3_EXT_get_nidX509V3_EXT_i2d1_X509V3_EXT_i2d libeay32.dllX509V3_EXT_i2dX509V3_EXT_nconf5_X509V3_EXT_nconf libeay32.dllX509V3_EXT_nconfX509V3_EXT_nconf_nid=_X509V3_EXT_nconf_nid libeay32.dllX509V3_EXT_nconf_nidX509V3_EXT_print5_X509V3_EXT_print libeay32.dllX509V3_EXT_printX509V3_EXT_print_fp;_X509V3_EXT_print_fp libeay32.dllX509V3_EXT_print_fpX509V3_EXT_val_prn9_X509V3_EXT_val_prn libeay32.dllX509V3_EXT_val_prnX509V3_NAME_from_sectionE_X509V3_NAME_from_section libeay32.dllX509V3_NAME_from_sectionX509V3_add1_i2d3_X509V3_add1_i2d libeay32.dllX509V3_add1_i2d X509V3_add_standard_extensionsQ_X509V3_add_standard_extensions libeay32.dllX509V3_add_standard_extensionsX509V3_add_value5_X509V3_add_value libeay32.dllX509V3_add_valueX509V3_add_value_bool?_X509V3_add_value_bool libeay32.dllX509V3_add_value_boolX509V3_add_value_bool_nfE_X509V3_add_value_bool_nf libeay32.dllX509V3_add_value_bool_nfX509V3_add_value_int=_X509V3_add_value_int libeay32.dllX509V3_add_value_intX509V3_add_value_ucharA_X509V3_add_value_uchar libeay32.dllX509V3_add_value_ucharX509V3_conf_free5_X509V3_conf_free libeay32.dllX509V3_conf_freeX509V3_extensions_printC_X509V3_extensions_print libeay32.dllX509V3_extensions_printX509V3_get_d2i1_X509V3_get_d2i libeay32.dllX509V3_get_d2iX509V3_get_section9_X509V3_get_section libeay32.dllX509V3_get_sectionX509V3_get_string7_X509V3_get_string libeay32.dllX509V3_get_stringX509V3_get_value_bool?_X509V3_get_value_bool libeay32.dllX509V3_get_value_boolX509V3_get_value_int=_X509V3_get_value_int libeay32.dllX509V3_get_value_intX509V3_parse_list7_X509V3_parse_list libeay32.dllX509V3_parse_listX509V3_section_free;_X509V3_section_free libeay32.dllX509V3_section_freeX509V3_set_conf_lhash?_X509V3_set_conf_lhash libeay32.dllX509V3_set_conf_lhashX509V3_set_ctx1_X509V3_set_ctx libeay32.dllX509V3_set_ctxX509V3_set_nconf5_X509V3_set_nconf libeay32.dllX509V3_set_nconfX509V3_string_free9_X509V3_string_free libeay32.dllX509V3_string_freeX509_ALGORS_it1_X509_ALGORS_it libeay32.dllX509_ALGORS_itX509_ALGOR_cmp1_X509_ALGOR_cmp libeay32.dllX509_ALGOR_cmpX509_ALGOR_dup1_X509_ALGOR_dup libeay32.dllX509_ALGOR_dupX509_ALGOR_free3_X509_ALGOR_free libeay32.dllX509_ALGOR_freeX509_ALGOR_get03_X509_ALGOR_get0 libeay32.dllX509_ALGOR_get0 X509_ALGOR_it/_X509_ALGOR_it libeay32.dll X509_ALGOR_itX509_ALGOR_new1_X509_ALGOR_new libeay32.dllX509_ALGOR_newX509_ALGOR_set03_X509_ALGOR_set0 libeay32.dllX509_ALGOR_set0X509_ALGOR_set_md7_X509_ALGOR_set_md libeay32.dllX509_ALGOR_set_mdX509_ATTRIBUTE_count=_X509_ATTRIBUTE_count libeay32.dllX509_ATTRIBUTE_countX509_ATTRIBUTE_create?_X509_ATTRIBUTE_create libeay32.dllX509_ATTRIBUTE_createX509_ATTRIBUTE_create_by_NIDM_X509_ATTRIBUTE_create_by_NID libeay32.dllX509_ATTRIBUTE_create_by_NIDX509_ATTRIBUTE_create_by_OBJM_X509_ATTRIBUTE_create_by_OBJ libeay32.dllX509_ATTRIBUTE_create_by_OBJX509_ATTRIBUTE_create_by_txtM_X509_ATTRIBUTE_create_by_txt libeay32.dllX509_ATTRIBUTE_create_by_txtX509_ATTRIBUTE_dup9_X509_ATTRIBUTE_dup libeay32.dllX509_ATTRIBUTE_dupX509_ATTRIBUTE_free;_X509_ATTRIBUTE_free libeay32.dllX509_ATTRIBUTE_freeX509_ATTRIBUTE_get0_dataE_X509_ATTRIBUTE_get0_data libeay32.dllX509_ATTRIBUTE_get0_dataX509_ATTRIBUTE_get0_objectI_X509_ATTRIBUTE_get0_object libeay32.dllX509_ATTRIBUTE_get0_objectX509_ATTRIBUTE_get0_typeE_X509_ATTRIBUTE_get0_type libeay32.dllX509_ATTRIBUTE_get0_typeX509_ATTRIBUTE_it7_X509_ATTRIBUTE_it libeay32.dllX509_ATTRIBUTE_itX509_ATTRIBUTE_new9_X509_ATTRIBUTE_new libeay32.dllX509_ATTRIBUTE_newX509_ATTRIBUTE_set1_dataE_X509_ATTRIBUTE_set1_data libeay32.dllX509_ATTRIBUTE_set1_dataX509_ATTRIBUTE_set1_objectI_X509_ATTRIBUTE_set1_object libeay32.dllX509_ATTRIBUTE_set1_objectX509_CERT_AUX_free9_X509_CERT_AUX_free libeay32.dllX509_CERT_AUX_freeX509_CERT_AUX_it5_X509_CERT_AUX_it libeay32.dllX509_CERT_AUX_itX509_CERT_AUX_new7_X509_CERT_AUX_new libeay32.dllX509_CERT_AUX_newX509_CERT_AUX_print;_X509_CERT_AUX_print libeay32.dllX509_CERT_AUX_printX509_CERT_PAIR_free;_X509_CERT_PAIR_free libeay32.dllX509_CERT_PAIR_freeX509_CERT_PAIR_it7_X509_CERT_PAIR_it libeay32.dllX509_CERT_PAIR_itX509_CERT_PAIR_new9_X509_CERT_PAIR_new libeay32.dllX509_CERT_PAIR_newX509_CINF_free1_X509_CINF_free libeay32.dllX509_CINF_free X509_CINF_it- _X509_CINF_it libeay32.dll X509_CINF_it X509_CINF_new/_X509_CINF_new libeay32.dll X509_CINF_newX509_CRL_INFO_free9_X509_CRL_INFO_free libeay32.dllX509_CRL_INFO_freeX509_CRL_INFO_it5_X509_CRL_INFO_it libeay32.dllX509_CRL_INFO_itX509_CRL_INFO_new7_X509_CRL_INFO_new libeay32.dllX509_CRL_INFO_newX509_CRL_METHOD_free=_X509_CRL_METHOD_free libeay32.dllX509_CRL_METHOD_freeX509_CRL_METHOD_new;_X509_CRL_METHOD_new libeay32.dllX509_CRL_METHOD_newX509_CRL_add0_revoked?_X509_CRL_add0_revoked libeay32.dllX509_CRL_add0_revokedX509_CRL_add1_ext_i2d?_X509_CRL_add1_ext_i2d libeay32.dllX509_CRL_add1_ext_i2dX509_CRL_add_ext5_X509_CRL_add_ext libeay32.dllX509_CRL_add_extX509_CRL_check_suiteb?_X509_CRL_check_suiteb libeay32.dllX509_CRL_check_suiteb X509_CRL_cmp- _X509_CRL_cmp libeay32.dll X509_CRL_cmpX509_CRL_delete_ext;_X509_CRL_delete_ext libeay32.dllX509_CRL_delete_ext X509_CRL_diff/_X509_CRL_diff libeay32.dll X509_CRL_diffX509_CRL_digest3_X509_CRL_digest libeay32.dllX509_CRL_digest X509_CRL_dup- _X509_CRL_dup libeay32.dll X509_CRL_dup X509_CRL_free/_X509_CRL_free libeay32.dll X509_CRL_freeX509_CRL_get0_by_cert?_X509_CRL_get0_by_cert libeay32.dllX509_CRL_get0_by_certX509_CRL_get0_by_serialC_X509_CRL_get0_by_serial libeay32.dllX509_CRL_get0_by_serialX509_CRL_get_ext5_X509_CRL_get_ext libeay32.dllX509_CRL_get_extX509_CRL_get_ext_by_NIDC_X509_CRL_get_ext_by_NID libeay32.dllX509_CRL_get_ext_by_NIDX509_CRL_get_ext_by_OBJC_X509_CRL_get_ext_by_OBJ libeay32.dllX509_CRL_get_ext_by_OBJX509_CRL_get_ext_by_criticalM_X509_CRL_get_ext_by_critical libeay32.dllX509_CRL_get_ext_by_criticalX509_CRL_get_ext_countA_X509_CRL_get_ext_count libeay32.dllX509_CRL_get_ext_countX509_CRL_get_ext_d2i=_X509_CRL_get_ext_d2i libeay32.dllX509_CRL_get_ext_d2iX509_CRL_get_meth_dataA_X509_CRL_get_meth_data libeay32.dllX509_CRL_get_meth_dataX509_CRL_http_nbio9_X509_CRL_http_nbio libeay32.dllX509_CRL_http_nbio X509_CRL_it+ _X509_CRL_it libeay32.dll X509_CRL_itX509_CRL_match1_X509_CRL_match libeay32.dllX509_CRL_match X509_CRL_new- _X509_CRL_new libeay32.dll X509_CRL_newX509_CRL_print1_X509_CRL_print libeay32.dllX509_CRL_printX509_CRL_print_fp7_X509_CRL_print_fp libeay32.dllX509_CRL_print_fpX509_CRL_set_default_methodK_X509_CRL_set_default_method libeay32.dllX509_CRL_set_default_methodX509_CRL_set_issuer_nameE_X509_CRL_set_issuer_name libeay32.dllX509_CRL_set_issuer_nameX509_CRL_set_lastUpdateC_X509_CRL_set_lastUpdate libeay32.dllX509_CRL_set_lastUpdateX509_CRL_set_meth_dataA_X509_CRL_set_meth_data libeay32.dllX509_CRL_set_meth_dataX509_CRL_set_nextUpdateC_X509_CRL_set_nextUpdate libeay32.dllX509_CRL_set_nextUpdateX509_CRL_set_version=_X509_CRL_set_version libeay32.dllX509_CRL_set_version X509_CRL_sign/_X509_CRL_sign libeay32.dll X509_CRL_signX509_CRL_sign_ctx7_X509_CRL_sign_ctx libeay32.dllX509_CRL_sign_ctx X509_CRL_sort/_X509_CRL_sort libeay32.dll X509_CRL_sortX509_CRL_verify3_X509_CRL_verify libeay32.dllX509_CRL_verifyX509_EXTENSIONS_it9_X509_EXTENSIONS_it libeay32.dllX509_EXTENSIONS_itX509_EXTENSION_create_by_NIDM_X509_EXTENSION_create_by_NID libeay32.dllX509_EXTENSION_create_by_NIDX509_EXTENSION_create_by_OBJM_X509_EXTENSION_create_by_OBJ libeay32.dllX509_EXTENSION_create_by_OBJX509_EXTENSION_dup9_X509_EXTENSION_dup libeay32.dllX509_EXTENSION_dupX509_EXTENSION_free;_X509_EXTENSION_free libeay32.dllX509_EXTENSION_freeX509_EXTENSION_get_criticalK_X509_EXTENSION_get_critical libeay32.dllX509_EXTENSION_get_criticalX509_EXTENSION_get_dataC_X509_EXTENSION_get_data libeay32.dllX509_EXTENSION_get_dataX509_EXTENSION_get_objectG_X509_EXTENSION_get_object libeay32.dllX509_EXTENSION_get_objectX509_EXTENSION_it7_X509_EXTENSION_it libeay32.dllX509_EXTENSION_itX509_EXTENSION_new9_X509_EXTENSION_new libeay32.dllX509_EXTENSION_newX509_EXTENSION_set_criticalK_X509_EXTENSION_set_critical libeay32.dllX509_EXTENSION_set_criticalX509_EXTENSION_set_dataC_X509_EXTENSION_set_data libeay32.dllX509_EXTENSION_set_dataX509_EXTENSION_set_objectG_X509_EXTENSION_set_object libeay32.dllX509_EXTENSION_set_objectX509_INFO_free1_X509_INFO_free libeay32.dllX509_INFO_free X509_INFO_new/_X509_INFO_new libeay32.dll X509_INFO_newX509_LOOKUP_by_alias=_X509_LOOKUP_by_alias libeay32.dllX509_LOOKUP_by_aliasX509_LOOKUP_by_fingerprintI_X509_LOOKUP_by_fingerprint libeay32.dllX509_LOOKUP_by_fingerprintX509_LOOKUP_by_issuer_serialM_X509_LOOKUP_by_issuer_serial libeay32.dllX509_LOOKUP_by_issuer_serialX509_LOOKUP_by_subjectA_X509_LOOKUP_by_subject libeay32.dllX509_LOOKUP_by_subjectX509_LOOKUP_ctrl5_X509_LOOKUP_ctrl libeay32.dllX509_LOOKUP_ctrlX509_LOOKUP_file5_X509_LOOKUP_file libeay32.dllX509_LOOKUP_fileX509_LOOKUP_free5_X509_LOOKUP_free libeay32.dllX509_LOOKUP_freeX509_LOOKUP_hash_dir=_X509_LOOKUP_hash_dir libeay32.dllX509_LOOKUP_hash_dirX509_LOOKUP_init5_X509_LOOKUP_init libeay32.dllX509_LOOKUP_initX509_LOOKUP_new3_X509_LOOKUP_new libeay32.dllX509_LOOKUP_newX509_LOOKUP_shutdown=_X509_LOOKUP_shutdown libeay32.dllX509_LOOKUP_shutdownX509_NAME_ENTRY_create_by_NIDO_X509_NAME_ENTRY_create_by_NID libeay32.dllX509_NAME_ENTRY_create_by_NIDX509_NAME_ENTRY_create_by_OBJO_X509_NAME_ENTRY_create_by_OBJ libeay32.dllX509_NAME_ENTRY_create_by_OBJX509_NAME_ENTRY_create_by_txtO_X509_NAME_ENTRY_create_by_txt libeay32.dllX509_NAME_ENTRY_create_by_txtX509_NAME_ENTRY_dup;_X509_NAME_ENTRY_dup libeay32.dllX509_NAME_ENTRY_dupX509_NAME_ENTRY_free=_X509_NAME_ENTRY_free libeay32.dllX509_NAME_ENTRY_freeX509_NAME_ENTRY_get_dataE_X509_NAME_ENTRY_get_data libeay32.dllX509_NAME_ENTRY_get_dataX509_NAME_ENTRY_get_objectI_X509_NAME_ENTRY_get_object libeay32.dllX509_NAME_ENTRY_get_objectX509_NAME_ENTRY_it9_X509_NAME_ENTRY_it libeay32.dllX509_NAME_ENTRY_itX509_NAME_ENTRY_new;_X509_NAME_ENTRY_new libeay32.dllX509_NAME_ENTRY_newX509_NAME_ENTRY_set_dataE_X509_NAME_ENTRY_set_data libeay32.dllX509_NAME_ENTRY_set_dataX509_NAME_ENTRY_set_objectI_X509_NAME_ENTRY_set_object libeay32.dllX509_NAME_ENTRY_set_objectX509_NAME_add_entry;_X509_NAME_add_entry libeay32.dllX509_NAME_add_entryX509_NAME_add_entry_by_NIDI_X509_NAME_add_entry_by_NID libeay32.dllX509_NAME_add_entry_by_NIDX509_NAME_add_entry_by_OBJI_X509_NAME_add_entry_by_OBJ libeay32.dllX509_NAME_add_entry_by_OBJX509_NAME_add_entry_by_txtI_X509_NAME_add_entry_by_txt libeay32.dllX509_NAME_add_entry_by_txt X509_NAME_cmp/_X509_NAME_cmp libeay32.dll X509_NAME_cmpX509_NAME_delete_entryA_X509_NAME_delete_entry libeay32.dllX509_NAME_delete_entryX509_NAME_digest5_X509_NAME_digest libeay32.dllX509_NAME_digest X509_NAME_dup/_X509_NAME_dup libeay32.dll X509_NAME_dupX509_NAME_entry_count?_X509_NAME_entry_count libeay32.dllX509_NAME_entry_countX509_NAME_free1_X509_NAME_free libeay32.dllX509_NAME_freeX509_NAME_get_entry;_X509_NAME_get_entry libeay32.dllX509_NAME_get_entryX509_NAME_get_index_by_NIDI_X509_NAME_get_index_by_NID libeay32.dllX509_NAME_get_index_by_NIDX509_NAME_get_index_by_OBJI_X509_NAME_get_index_by_OBJ libeay32.dllX509_NAME_get_index_by_OBJX509_NAME_get_text_by_NIDG_X509_NAME_get_text_by_NID libeay32.dllX509_NAME_get_text_by_NIDX509_NAME_get_text_by_OBJG_X509_NAME_get_text_by_OBJ libeay32.dllX509_NAME_get_text_by_OBJX509_NAME_hash1_X509_NAME_hash libeay32.dllX509_NAME_hashX509_NAME_hash_old9_X509_NAME_hash_old libeay32.dllX509_NAME_hash_old X509_NAME_it- _X509_NAME_it libeay32.dll X509_NAME_it X509_NAME_new/_X509_NAME_new libeay32.dll X509_NAME_newX509_NAME_oneline7_X509_NAME_oneline libeay32.dllX509_NAME_onelineX509_NAME_print3_X509_NAME_print libeay32.dllX509_NAME_printX509_NAME_print_ex9_X509_NAME_print_ex libeay32.dllX509_NAME_print_exX509_NAME_print_ex_fp?_X509_NAME_print_ex_fp libeay32.dllX509_NAME_print_ex_fp X509_NAME_set/_X509_NAME_set libeay32.dll X509_NAME_setX509_OBJECT_free_contentsG_X509_OBJECT_free_contents libeay32.dllX509_OBJECT_free_contentsX509_OBJECT_idx_by_subjectI_X509_OBJECT_idx_by_subject libeay32.dllX509_OBJECT_idx_by_subject!X509_OBJECT_retrieve_by_subjectS _X509_OBJECT_retrieve_by_subject libeay32.dllX509_OBJECT_retrieve_by_subjectX509_OBJECT_retrieve_matchI_X509_OBJECT_retrieve_match libeay32.dllX509_OBJECT_retrieve_matchX509_OBJECT_up_ref_countE_X509_OBJECT_up_ref_count libeay32.dllX509_OBJECT_up_ref_countX509_PKEY_free1_X509_PKEY_free libeay32.dllX509_PKEY_free X509_PKEY_new/_X509_PKEY_new libeay32.dll X509_PKEY_newX509_POLICY_NODE_printA_X509_POLICY_NODE_print libeay32.dllX509_POLICY_NODE_printX509_PUBKEY_free5_X509_PUBKEY_free libeay32.dllX509_PUBKEY_freeX509_PUBKEY_get3_X509_PUBKEY_get libeay32.dllX509_PUBKEY_getX509_PUBKEY_get0_paramA_X509_PUBKEY_get0_param libeay32.dllX509_PUBKEY_get0_paramX509_PUBKEY_it1_X509_PUBKEY_it libeay32.dllX509_PUBKEY_itX509_PUBKEY_new3_X509_PUBKEY_new libeay32.dllX509_PUBKEY_newX509_PUBKEY_set3_X509_PUBKEY_set libeay32.dllX509_PUBKEY_setX509_PUBKEY_set0_paramA_X509_PUBKEY_set0_param libeay32.dllX509_PUBKEY_set0_paramX509_PURPOSE_add5_X509_PURPOSE_add libeay32.dllX509_PURPOSE_addX509_PURPOSE_cleanup=_X509_PURPOSE_cleanup libeay32.dllX509_PURPOSE_cleanupX509_PURPOSE_get07_X509_PURPOSE_get0 libeay32.dllX509_PURPOSE_get0X509_PURPOSE_get0_nameA_X509_PURPOSE_get0_name libeay32.dllX509_PURPOSE_get0_nameX509_PURPOSE_get0_snameC_X509_PURPOSE_get0_sname libeay32.dllX509_PURPOSE_get0_snameX509_PURPOSE_get_by_idA_X509_PURPOSE_get_by_id libeay32.dllX509_PURPOSE_get_by_idX509_PURPOSE_get_by_snameG_X509_PURPOSE_get_by_sname libeay32.dllX509_PURPOSE_get_by_snameX509_PURPOSE_get_countA_X509_PURPOSE_get_count libeay32.dllX509_PURPOSE_get_countX509_PURPOSE_get_id;_X509_PURPOSE_get_id libeay32.dllX509_PURPOSE_get_idX509_PURPOSE_get_trustA_X509_PURPOSE_get_trust libeay32.dllX509_PURPOSE_get_trustX509_PURPOSE_set5_X509_PURPOSE_set libeay32.dllX509_PURPOSE_setX509_REQ_INFO_free9_X509_REQ_INFO_free libeay32.dllX509_REQ_INFO_freeX509_REQ_INFO_it5_X509_REQ_INFO_it libeay32.dllX509_REQ_INFO_itX509_REQ_INFO_new7_X509_REQ_INFO_new libeay32.dllX509_REQ_INFO_newX509_REQ_add1_attr9_X509_REQ_add1_attr libeay32.dllX509_REQ_add1_attrX509_REQ_add1_attr_by_NIDG_X509_REQ_add1_attr_by_NID libeay32.dllX509_REQ_add1_attr_by_NIDX509_REQ_add1_attr_by_OBJG_X509_REQ_add1_attr_by_OBJ libeay32.dllX509_REQ_add1_attr_by_OBJX509_REQ_add1_attr_by_txtG_X509_REQ_add1_attr_by_txt libeay32.dllX509_REQ_add1_attr_by_txtX509_REQ_add_extensionsC_X509_REQ_add_extensions libeay32.dllX509_REQ_add_extensionsX509_REQ_add_extensions_nidK_X509_REQ_add_extensions_nid libeay32.dllX509_REQ_add_extensions_nidX509_REQ_check_private_keyI_X509_REQ_check_private_key libeay32.dllX509_REQ_check_private_keyX509_REQ_delete_attr=_X509_REQ_delete_attr libeay32.dllX509_REQ_delete_attrX509_REQ_digest3_X509_REQ_digest libeay32.dllX509_REQ_digest X509_REQ_dup- _X509_REQ_dup libeay32.dll X509_REQ_dupX509_REQ_extension_nidA_X509_REQ_extension_nid libeay32.dllX509_REQ_extension_nid X509_REQ_free/_X509_REQ_free libeay32.dll X509_REQ_freeX509_REQ_get1_email;_X509_REQ_get1_email libeay32.dllX509_REQ_get1_emailX509_REQ_get_attr7_X509_REQ_get_attr libeay32.dllX509_REQ_get_attrX509_REQ_get_attr_by_NIDE_X509_REQ_get_attr_by_NID libeay32.dllX509_REQ_get_attr_by_NIDX509_REQ_get_attr_by_OBJE_X509_REQ_get_attr_by_OBJ libeay32.dllX509_REQ_get_attr_by_OBJX509_REQ_get_attr_countC_X509_REQ_get_attr_count libeay32.dllX509_REQ_get_attr_countX509_REQ_get_extension_nidsK_X509_REQ_get_extension_nids libeay32.dllX509_REQ_get_extension_nidsX509_REQ_get_extensionsC_X509_REQ_get_extensions libeay32.dllX509_REQ_get_extensionsX509_REQ_get_pubkey;_X509_REQ_get_pubkey libeay32.dllX509_REQ_get_pubkey X509_REQ_it+ _X509_REQ_it libeay32.dll X509_REQ_it X509_REQ_new- _X509_REQ_new libeay32.dll X509_REQ_newX509_REQ_print1_X509_REQ_print libeay32.dllX509_REQ_printX509_REQ_print_ex7_X509_REQ_print_ex libeay32.dllX509_REQ_print_exX509_REQ_print_fp7_X509_REQ_print_fp libeay32.dllX509_REQ_print_fpX509_REQ_set_extension_nidsK_X509_REQ_set_extension_nids libeay32.dllX509_REQ_set_extension_nidsX509_REQ_set_pubkey;_X509_REQ_set_pubkey libeay32.dllX509_REQ_set_pubkeyX509_REQ_set_subject_nameG_X509_REQ_set_subject_name libeay32.dllX509_REQ_set_subject_nameX509_REQ_set_version=_X509_REQ_set_version libeay32.dllX509_REQ_set_version X509_REQ_sign/_X509_REQ_sign libeay32.dll X509_REQ_signX509_REQ_sign_ctx7_X509_REQ_sign_ctx libeay32.dllX509_REQ_sign_ctxX509_REQ_to_X5095_X509_REQ_to_X509 libeay32.dllX509_REQ_to_X509X509_REQ_verify3_X509_REQ_verify libeay32.dllX509_REQ_verifyX509_REVOKED_add1_ext_i2dG_X509_REVOKED_add1_ext_i2d libeay32.dllX509_REVOKED_add1_ext_i2dX509_REVOKED_add_ext=_X509_REVOKED_add_ext libeay32.dllX509_REVOKED_add_extX509_REVOKED_delete_extC_X509_REVOKED_delete_ext libeay32.dllX509_REVOKED_delete_extX509_REVOKED_dup5_X509_REVOKED_dup libeay32.dllX509_REVOKED_dupX509_REVOKED_free7_X509_REVOKED_free libeay32.dllX509_REVOKED_freeX509_REVOKED_get_ext=_X509_REVOKED_get_ext libeay32.dllX509_REVOKED_get_extX509_REVOKED_get_ext_by_NIDK_X509_REVOKED_get_ext_by_NID libeay32.dllX509_REVOKED_get_ext_by_NIDX509_REVOKED_get_ext_by_OBJK_X509_REVOKED_get_ext_by_OBJ libeay32.dllX509_REVOKED_get_ext_by_OBJ" X509_REVOKED_get_ext_by_criticalU!_X509_REVOKED_get_ext_by_critical libeay32.dll X509_REVOKED_get_ext_by_criticalX509_REVOKED_get_ext_countI_X509_REVOKED_get_ext_count libeay32.dllX509_REVOKED_get_ext_countX509_REVOKED_get_ext_d2iE_X509_REVOKED_get_ext_d2i libeay32.dllX509_REVOKED_get_ext_d2iX509_REVOKED_it3_X509_REVOKED_it libeay32.dllX509_REVOKED_itX509_REVOKED_new5_X509_REVOKED_new libeay32.dllX509_REVOKED_new!X509_REVOKED_set_revocationDateS _X509_REVOKED_set_revocationDate libeay32.dllX509_REVOKED_set_revocationDateX509_REVOKED_set_serialNumberO_X509_REVOKED_set_serialNumber libeay32.dllX509_REVOKED_set_serialNumber X509_SIG_free/_X509_SIG_free libeay32.dll X509_SIG_free X509_SIG_it+ _X509_SIG_it libeay32.dll X509_SIG_it X509_SIG_new- _X509_SIG_new libeay32.dll X509_SIG_newX509_STORE_CTX_cleanupA_X509_STORE_CTX_cleanup libeay32.dllX509_STORE_CTX_cleanupX509_STORE_CTX_free;_X509_STORE_CTX_free libeay32.dllX509_STORE_CTX_free!X509_STORE_CTX_get0_current_crlS _X509_STORE_CTX_get0_current_crl libeay32.dllX509_STORE_CTX_get0_current_crl$"X509_STORE_CTX_get0_current_issuerY#_X509_STORE_CTX_get0_current_issuer libeay32.dll"X509_STORE_CTX_get0_current_issuerX509_STORE_CTX_get0_paramG_X509_STORE_CTX_get0_param libeay32.dllX509_STORE_CTX_get0_param X509_STORE_CTX_get0_parent_ctxQ_X509_STORE_CTX_get0_parent_ctx libeay32.dllX509_STORE_CTX_get0_parent_ctx!X509_STORE_CTX_get0_policy_treeS _X509_STORE_CTX_get0_policy_tree libeay32.dllX509_STORE_CTX_get0_policy_treeX509_STORE_CTX_get0_storeG_X509_STORE_CTX_get0_store libeay32.dllX509_STORE_CTX_get0_storeX509_STORE_CTX_get1_chainG_X509_STORE_CTX_get1_chain libeay32.dllX509_STORE_CTX_get1_chainX509_STORE_CTX_get1_issuerI_X509_STORE_CTX_get1_issuer libeay32.dllX509_STORE_CTX_get1_issuerX509_STORE_CTX_get_chainE_X509_STORE_CTX_get_chain libeay32.dllX509_STORE_CTX_get_chain!X509_STORE_CTX_get_current_certS _X509_STORE_CTX_get_current_cert libeay32.dllX509_STORE_CTX_get_current_certX509_STORE_CTX_get_errorE_X509_STORE_CTX_get_error libeay32.dllX509_STORE_CTX_get_error X509_STORE_CTX_get_error_depthQ_X509_STORE_CTX_get_error_depth libeay32.dllX509_STORE_CTX_get_error_depthX509_STORE_CTX_get_ex_dataI_X509_STORE_CTX_get_ex_data libeay32.dllX509_STORE_CTX_get_ex_data!X509_STORE_CTX_get_ex_new_indexS _X509_STORE_CTX_get_ex_new_index libeay32.dllX509_STORE_CTX_get_ex_new_index$"X509_STORE_CTX_get_explicit_policyY#_X509_STORE_CTX_get_explicit_policy libeay32.dll"X509_STORE_CTX_get_explicit_policyX509_STORE_CTX_init;_X509_STORE_CTX_init libeay32.dllX509_STORE_CTX_initX509_STORE_CTX_new9_X509_STORE_CTX_new libeay32.dllX509_STORE_CTX_new X509_STORE_CTX_purpose_inheritQ_X509_STORE_CTX_purpose_inherit libeay32.dllX509_STORE_CTX_purpose_inheritX509_STORE_CTX_set0_crlsE_X509_STORE_CTX_set0_crls libeay32.dllX509_STORE_CTX_set0_crlsX509_STORE_CTX_set0_paramG_X509_STORE_CTX_set0_param libeay32.dllX509_STORE_CTX_set0_paramX509_STORE_CTX_set_certC_X509_STORE_CTX_set_cert libeay32.dllX509_STORE_CTX_set_certX509_STORE_CTX_set_chainE_X509_STORE_CTX_set_chain libeay32.dllX509_STORE_CTX_set_chainX509_STORE_CTX_set_defaultI_X509_STORE_CTX_set_default libeay32.dllX509_STORE_CTX_set_defaultX509_STORE_CTX_set_depthE_X509_STORE_CTX_set_depth libeay32.dllX509_STORE_CTX_set_depthX509_STORE_CTX_set_errorE_X509_STORE_CTX_set_error libeay32.dllX509_STORE_CTX_set_errorX509_STORE_CTX_set_ex_dataI_X509_STORE_CTX_set_ex_data libeay32.dllX509_STORE_CTX_set_ex_dataX509_STORE_CTX_set_flagsE_X509_STORE_CTX_set_flags libeay32.dllX509_STORE_CTX_set_flagsX509_STORE_CTX_set_purposeI_X509_STORE_CTX_set_purpose libeay32.dllX509_STORE_CTX_set_purposeX509_STORE_CTX_set_timeC_X509_STORE_CTX_set_time libeay32.dllX509_STORE_CTX_set_timeX509_STORE_CTX_set_trustE_X509_STORE_CTX_set_trust libeay32.dllX509_STORE_CTX_set_trustX509_STORE_CTX_set_verify_cbM_X509_STORE_CTX_set_verify_cb libeay32.dllX509_STORE_CTX_set_verify_cbX509_STORE_CTX_trusted_stackM_X509_STORE_CTX_trusted_stack libeay32.dllX509_STORE_CTX_trusted_stackX509_STORE_add_cert;_X509_STORE_add_cert libeay32.dllX509_STORE_add_certX509_STORE_add_crl9_X509_STORE_add_crl libeay32.dllX509_STORE_add_crlX509_STORE_add_lookup?_X509_STORE_add_lookup libeay32.dllX509_STORE_add_lookupX509_STORE_free3_X509_STORE_free libeay32.dllX509_STORE_freeX509_STORE_get1_certs?_X509_STORE_get1_certs libeay32.dllX509_STORE_get1_certsX509_STORE_get1_crls=_X509_STORE_get1_crls libeay32.dllX509_STORE_get1_crlsX509_STORE_get_by_subjectG_X509_STORE_get_by_subject libeay32.dllX509_STORE_get_by_subjectX509_STORE_load_locationsG_X509_STORE_load_locations libeay32.dllX509_STORE_load_locationsX509_STORE_new1_X509_STORE_new libeay32.dllX509_STORE_newX509_STORE_set1_param?_X509_STORE_set1_param libeay32.dllX509_STORE_set1_paramX509_STORE_set_default_pathsM_X509_STORE_set_default_paths libeay32.dllX509_STORE_set_default_pathsX509_STORE_set_depth=_X509_STORE_set_depth libeay32.dllX509_STORE_set_depthX509_STORE_set_flags=_X509_STORE_set_flags libeay32.dllX509_STORE_set_flagsX509_STORE_set_lookup_crls_cbO_X509_STORE_set_lookup_crls_cb libeay32.dllX509_STORE_set_lookup_crls_cbX509_STORE_set_purposeA_X509_STORE_set_purpose libeay32.dllX509_STORE_set_purposeX509_STORE_set_trust=_X509_STORE_set_trust libeay32.dllX509_STORE_set_trustX509_STORE_set_verify_cbE_X509_STORE_set_verify_cb libeay32.dllX509_STORE_set_verify_cbX509_TRUST_add1_X509_TRUST_add libeay32.dllX509_TRUST_addX509_TRUST_cleanup9_X509_TRUST_cleanup libeay32.dllX509_TRUST_cleanupX509_TRUST_get03_X509_TRUST_get0 libeay32.dllX509_TRUST_get0X509_TRUST_get0_name=_X509_TRUST_get0_name libeay32.dllX509_TRUST_get0_nameX509_TRUST_get_by_id=_X509_TRUST_get_by_id libeay32.dllX509_TRUST_get_by_idX509_TRUST_get_count=_X509_TRUST_get_count libeay32.dllX509_TRUST_get_countX509_TRUST_get_flags=_X509_TRUST_get_flags libeay32.dllX509_TRUST_get_flagsX509_TRUST_get_trust=_X509_TRUST_get_trust libeay32.dllX509_TRUST_get_trustX509_TRUST_set1_X509_TRUST_set libeay32.dllX509_TRUST_setX509_TRUST_set_defaultA_X509_TRUST_set_default libeay32.dllX509_TRUST_set_default X509_VAL_free/_X509_VAL_free libeay32.dll X509_VAL_free X509_VAL_it+ _X509_VAL_it libeay32.dll X509_VAL_it X509_VAL_new- _X509_VAL_new libeay32.dll X509_VAL_newX509_VERIFY_PARAM_add0_policyO_X509_VERIFY_PARAM_add0_policy libeay32.dllX509_VERIFY_PARAM_add0_policyX509_VERIFY_PARAM_add0_tableM_X509_VERIFY_PARAM_add0_table libeay32.dllX509_VERIFY_PARAM_add0_tableX509_VERIFY_PARAM_add1_hostK_X509_VERIFY_PARAM_add1_host libeay32.dllX509_VERIFY_PARAM_add1_hostX509_VERIFY_PARAM_clear_flagsO_X509_VERIFY_PARAM_clear_flags libeay32.dllX509_VERIFY_PARAM_clear_flagsX509_VERIFY_PARAM_freeA_X509_VERIFY_PARAM_free libeay32.dllX509_VERIFY_PARAM_freeX509_VERIFY_PARAM_get0A_X509_VERIFY_PARAM_get0 libeay32.dllX509_VERIFY_PARAM_get0X509_VERIFY_PARAM_get0_nameK_X509_VERIFY_PARAM_get0_name libeay32.dllX509_VERIFY_PARAM_get0_name!X509_VERIFY_PARAM_get0_peernameS _X509_VERIFY_PARAM_get0_peername libeay32.dllX509_VERIFY_PARAM_get0_peernameX509_VERIFY_PARAM_get_countK_X509_VERIFY_PARAM_get_count libeay32.dllX509_VERIFY_PARAM_get_countX509_VERIFY_PARAM_get_depthK_X509_VERIFY_PARAM_get_depth libeay32.dllX509_VERIFY_PARAM_get_depthX509_VERIFY_PARAM_get_flagsK_X509_VERIFY_PARAM_get_flags libeay32.dllX509_VERIFY_PARAM_get_flagsX509_VERIFY_PARAM_inheritG_X509_VERIFY_PARAM_inherit libeay32.dllX509_VERIFY_PARAM_inheritX509_VERIFY_PARAM_lookupE_X509_VERIFY_PARAM_lookup libeay32.dllX509_VERIFY_PARAM_lookupX509_VERIFY_PARAM_new?_X509_VERIFY_PARAM_new libeay32.dllX509_VERIFY_PARAM_newX509_VERIFY_PARAM_set1A_X509_VERIFY_PARAM_set1 libeay32.dllX509_VERIFY_PARAM_set1X509_VERIFY_PARAM_set1_emailM_X509_VERIFY_PARAM_set1_email libeay32.dllX509_VERIFY_PARAM_set1_emailX509_VERIFY_PARAM_set1_hostK_X509_VERIFY_PARAM_set1_host libeay32.dllX509_VERIFY_PARAM_set1_hostX509_VERIFY_PARAM_set1_ipG_X509_VERIFY_PARAM_set1_ip libeay32.dllX509_VERIFY_PARAM_set1_ipX509_VERIFY_PARAM_set1_ip_ascO_X509_VERIFY_PARAM_set1_ip_asc libeay32.dllX509_VERIFY_PARAM_set1_ip_ascX509_VERIFY_PARAM_set1_nameK_X509_VERIFY_PARAM_set1_name libeay32.dllX509_VERIFY_PARAM_set1_name!X509_VERIFY_PARAM_set1_policiesS _X509_VERIFY_PARAM_set1_policies libeay32.dllX509_VERIFY_PARAM_set1_policiesX509_VERIFY_PARAM_set_depthK_X509_VERIFY_PARAM_set_depth libeay32.dllX509_VERIFY_PARAM_set_depthX509_VERIFY_PARAM_set_flagsK_X509_VERIFY_PARAM_set_flags libeay32.dllX509_VERIFY_PARAM_set_flags!X509_VERIFY_PARAM_set_hostflagsS _X509_VERIFY_PARAM_set_hostflags libeay32.dllX509_VERIFY_PARAM_set_hostflagsX509_VERIFY_PARAM_set_purposeO_X509_VERIFY_PARAM_set_purpose libeay32.dllX509_VERIFY_PARAM_set_purposeX509_VERIFY_PARAM_set_timeI_X509_VERIFY_PARAM_set_time libeay32.dllX509_VERIFY_PARAM_set_timeX509_VERIFY_PARAM_set_trustK_X509_VERIFY_PARAM_set_trust libeay32.dllX509_VERIFY_PARAM_set_trust!X509_VERIFY_PARAM_table_cleanupS _X509_VERIFY_PARAM_table_cleanup libeay32.dllX509_VERIFY_PARAM_table_cleanupX509_add1_ext_i2d7_X509_add1_ext_i2d libeay32.dllX509_add1_ext_i2dX509_add1_reject_objectC_X509_add1_reject_object libeay32.dllX509_add1_reject_objectX509_add1_trust_objectA_X509_add1_trust_object libeay32.dllX509_add1_trust_object X509_add_ext- _X509_add_ext libeay32.dll X509_add_extX509_alias_get03_X509_alias_get0 libeay32.dllX509_alias_get0X509_alias_set13_X509_alias_set1 libeay32.dllX509_alias_set1X509_certificate_type?_X509_certificate_type libeay32.dllX509_certificate_typeX509_chain_check_suitebC_X509_chain_check_suiteb libeay32.dllX509_chain_check_suitebX509_chain_up_ref7_X509_chain_up_ref libeay32.dllX509_chain_up_refX509_check_akid3_X509_check_akid libeay32.dllX509_check_akid X509_check_ca/_X509_check_ca libeay32.dll X509_check_caX509_check_email5_X509_check_email libeay32.dllX509_check_emailX509_check_host3_X509_check_host libeay32.dllX509_check_host X509_check_ip/_X509_check_ip libeay32.dll X509_check_ipX509_check_ip_asc7_X509_check_ip_asc libeay32.dllX509_check_ip_ascX509_check_issued7_X509_check_issued libeay32.dllX509_check_issuedX509_check_private_keyA_X509_check_private_key libeay32.dllX509_check_private_keyX509_check_purpose9_X509_check_purpose libeay32.dllX509_check_purposeX509_check_trust5_X509_check_trust libeay32.dllX509_check_trust X509_cmp% _X509_cmp libeay32.dllX509_cmpX509_cmp_current_time?_X509_cmp_current_time libeay32.dllX509_cmp_current_time X509_cmp_time/_X509_cmp_time libeay32.dll X509_cmp_timeX509_delete_ext3_X509_delete_ext libeay32.dllX509_delete_ext X509_digest+ _X509_digest libeay32.dll X509_digest X509_dup% _X509_dup libeay32.dllX509_dupX509_email_free3_X509_email_free libeay32.dllX509_email_free X509_find_by_issuer_and_serialQ_X509_find_by_issuer_and_serial libeay32.dllX509_find_by_issuer_and_serialX509_find_by_subject=_X509_find_by_subject libeay32.dllX509_find_by_subject X509_free' _X509_free libeay32.dll X509_freeX509_get0_pubkey_bitstrC_X509_get0_pubkey_bitstr libeay32.dllX509_get0_pubkey_bitstrX509_get0_signature;_X509_get0_signature libeay32.dllX509_get0_signatureX509_get1_email3_X509_get1_email libeay32.dllX509_get1_emailX509_get1_ocsp1_X509_get1_ocsp libeay32.dllX509_get1_ocspX509_get_default_cert_areaI_X509_get_default_cert_area libeay32.dllX509_get_default_cert_areaX509_get_default_cert_dirG_X509_get_default_cert_dir libeay32.dllX509_get_default_cert_dirX509_get_default_cert_dir_envO_X509_get_default_cert_dir_env libeay32.dllX509_get_default_cert_dir_envX509_get_default_cert_fileI_X509_get_default_cert_file libeay32.dllX509_get_default_cert_file X509_get_default_cert_file_envQ_X509_get_default_cert_file_env libeay32.dllX509_get_default_cert_file_envX509_get_default_private_dirM_X509_get_default_private_dir libeay32.dllX509_get_default_private_dirX509_get_ex_data5_X509_get_ex_data libeay32.dllX509_get_ex_dataX509_get_ex_new_index?_X509_get_ex_new_index libeay32.dllX509_get_ex_new_index X509_get_ext- _X509_get_ext libeay32.dll X509_get_extX509_get_ext_by_NID;_X509_get_ext_by_NID libeay32.dllX509_get_ext_by_NIDX509_get_ext_by_OBJ;_X509_get_ext_by_OBJ libeay32.dllX509_get_ext_by_OBJX509_get_ext_by_criticalE_X509_get_ext_by_critical libeay32.dllX509_get_ext_by_criticalX509_get_ext_count9_X509_get_ext_count libeay32.dllX509_get_ext_countX509_get_ext_d2i5_X509_get_ext_d2i libeay32.dllX509_get_ext_d2iX509_get_issuer_name=_X509_get_issuer_name libeay32.dllX509_get_issuer_nameX509_get_pubkey3_X509_get_pubkey libeay32.dllX509_get_pubkeyX509_get_pubkey_parametersI_X509_get_pubkey_parameters libeay32.dllX509_get_pubkey_parametersX509_get_serialNumber?_X509_get_serialNumber libeay32.dllX509_get_serialNumberX509_get_signature_nidA_X509_get_signature_nid libeay32.dllX509_get_signature_nidX509_get_subject_name?_X509_get_subject_name libeay32.dllX509_get_subject_nameX509_gmtime_adj3_X509_gmtime_adj libeay32.dllX509_gmtime_adjX509_http_nbio1_X509_http_nbio libeay32.dllX509_http_nbioX509_issuer_and_serial_cmpI_X509_issuer_and_serial_cmp libeay32.dllX509_issuer_and_serial_cmpX509_issuer_and_serial_hashK_X509_issuer_and_serial_hash libeay32.dllX509_issuer_and_serial_hashX509_issuer_name_cmp=_X509_issuer_name_cmp libeay32.dllX509_issuer_name_cmpX509_issuer_name_hash?_X509_issuer_name_hash libeay32.dllX509_issuer_name_hashX509_issuer_name_hash_oldG_X509_issuer_name_hash_old libeay32.dllX509_issuer_name_hash_old X509_it#_X509_it libeay32.dllX509_itX509_keyid_get03_X509_keyid_get0 libeay32.dllX509_keyid_get0X509_keyid_set13_X509_keyid_set1 libeay32.dllX509_keyid_set1X509_load_cert_crl_fileC_X509_load_cert_crl_file libeay32.dllX509_load_cert_crl_fileX509_load_cert_file;_X509_load_cert_file libeay32.dllX509_load_cert_fileX509_load_crl_file9_X509_load_crl_file libeay32.dllX509_load_crl_file X509_new% _X509_new libeay32.dllX509_newX509_ocspid_print7_X509_ocspid_print libeay32.dllX509_ocspid_printX509_policy_check7_X509_policy_check libeay32.dllX509_policy_checkX509_policy_level_get0_nodeK_X509_policy_level_get0_node libeay32.dllX509_policy_level_get0_nodeX509_policy_level_node_countM_X509_policy_level_node_count libeay32.dllX509_policy_level_node_countX509_policy_node_get0_parentM_X509_policy_node_get0_parent libeay32.dllX509_policy_node_get0_parentX509_policy_node_get0_policyM_X509_policy_node_get0_policy libeay32.dllX509_policy_node_get0_policy" X509_policy_node_get0_qualifiersU!_X509_policy_node_get0_qualifiers libeay32.dll X509_policy_node_get0_qualifiersX509_policy_tree_free?_X509_policy_tree_free libeay32.dllX509_policy_tree_freeX509_policy_tree_get0_levelK_X509_policy_tree_get0_level libeay32.dllX509_policy_tree_get0_level X509_policy_tree_get0_policiesQ_X509_policy_tree_get0_policies libeay32.dllX509_policy_tree_get0_policies%#X509_policy_tree_get0_user_policies[$_X509_policy_tree_get0_user_policies libeay32.dll#X509_policy_tree_get0_user_policiesX509_policy_tree_level_countM_X509_policy_tree_level_count libeay32.dllX509_policy_tree_level_count X509_print) _X509_print libeay32.dll X509_print X509_print_ex/_X509_print_ex libeay32.dll X509_print_exX509_print_ex_fp5_X509_print_ex_fp libeay32.dllX509_print_ex_fp X509_print_fp/_X509_print_fp libeay32.dll X509_print_fpX509_pubkey_digest9_X509_pubkey_digest libeay32.dllX509_pubkey_digestX509_reject_clear7_X509_reject_clear libeay32.dllX509_reject_clearX509_set_ex_data5_X509_set_ex_data libeay32.dllX509_set_ex_dataX509_set_issuer_name=_X509_set_issuer_name libeay32.dllX509_set_issuer_nameX509_set_notAfter7_X509_set_notAfter libeay32.dllX509_set_notAfterX509_set_notBefore9_X509_set_notBefore libeay32.dllX509_set_notBeforeX509_set_pubkey3_X509_set_pubkey libeay32.dllX509_set_pubkeyX509_set_serialNumber?_X509_set_serialNumber libeay32.dllX509_set_serialNumberX509_set_subject_name?_X509_set_subject_name libeay32.dllX509_set_subject_nameX509_set_version5_X509_set_version libeay32.dllX509_set_version X509_sign' _X509_sign libeay32.dll X509_sign X509_sign_ctx/_X509_sign_ctx libeay32.dll X509_sign_ctxX509_signature_dump;_X509_signature_dump libeay32.dllX509_signature_dumpX509_signature_print=_X509_signature_print libeay32.dllX509_signature_printX509_subject_name_cmp?_X509_subject_name_cmp libeay32.dllX509_subject_name_cmpX509_subject_name_hashA_X509_subject_name_hash libeay32.dllX509_subject_name_hashX509_subject_name_hash_oldI_X509_subject_name_hash_old libeay32.dllX509_subject_name_hash_oldX509_supported_extensionE_X509_supported_extension libeay32.dllX509_supported_extension X509_time_adj/_X509_time_adj libeay32.dll X509_time_adjX509_time_adj_ex5_X509_time_adj_ex libeay32.dllX509_time_adj_exX509_to_X509_REQ5_X509_to_X509_REQ libeay32.dllX509_to_X509_REQX509_trust_clear5_X509_trust_clear libeay32.dllX509_trust_clear X509_verify+ _X509_verify libeay32.dll X509_verifyX509_verify_cert5_X509_verify_cert libeay32.dllX509_verify_certX509_verify_cert_error_stringO_X509_verify_cert_error_string libeay32.dllX509_verify_cert_error_stringX509at_add1_attr5_X509at_add1_attr libeay32.dllX509at_add1_attrX509at_add1_attr_by_NIDC_X509at_add1_attr_by_NID libeay32.dllX509at_add1_attr_by_NIDX509at_add1_attr_by_OBJC_X509at_add1_attr_by_OBJ libeay32.dllX509at_add1_attr_by_OBJX509at_add1_attr_by_txtC_X509at_add1_attr_by_txt libeay32.dllX509at_add1_attr_by_txtX509at_delete_attr9_X509at_delete_attr libeay32.dllX509at_delete_attrX509at_get0_data_by_OBJC_X509at_get0_data_by_OBJ libeay32.dllX509at_get0_data_by_OBJX509at_get_attr3_X509at_get_attr libeay32.dllX509at_get_attrX509at_get_attr_by_NIDA_X509at_get_attr_by_NID libeay32.dllX509at_get_attr_by_NIDX509at_get_attr_by_OBJA_X509at_get_attr_by_OBJ libeay32.dllX509at_get_attr_by_OBJX509at_get_attr_count?_X509at_get_attr_count libeay32.dllX509at_get_attr_countX509v3_add_ext1_X509v3_add_ext libeay32.dllX509v3_add_extX509v3_delete_ext7_X509v3_delete_ext libeay32.dllX509v3_delete_extX509v3_get_ext1_X509v3_get_ext libeay32.dllX509v3_get_extX509v3_get_ext_by_NID?_X509v3_get_ext_by_NID libeay32.dllX509v3_get_ext_by_NIDX509v3_get_ext_by_OBJ?_X509v3_get_ext_by_OBJ libeay32.dllX509v3_get_ext_by_OBJX509v3_get_ext_by_criticalI_X509v3_get_ext_by_critical libeay32.dllX509v3_get_ext_by_criticalX509v3_get_ext_count=_X509v3_get_ext_count libeay32.dllX509v3_get_ext_count ZLONG_it% _ZLONG_it libeay32.dllZLONG_it_ossl_096_des_random_seedG__ossl_096_des_random_seed libeay32.dll_ossl_096_des_random_seed_ossl_old_crypt3__ossl_old_crypt libeay32.dll_ossl_old_crypt_ossl_old_des_cbc_cksumC__ossl_old_des_cbc_cksum libeay32.dll_ossl_old_des_cbc_cksum_ossl_old_des_cbc_encryptG__ossl_old_des_cbc_encrypt libeay32.dll_ossl_old_des_cbc_encrypt_ossl_old_des_cfb64_encryptK__ossl_old_des_cfb64_encrypt libeay32.dll_ossl_old_des_cfb64_encrypt_ossl_old_des_cfb_encryptG__ossl_old_des_cfb_encrypt libeay32.dll_ossl_old_des_cfb_encrypt_ossl_old_des_crypt;__ossl_old_des_crypt libeay32.dll_ossl_old_des_crypt_ossl_old_des_decrypt3A__ossl_old_des_decrypt3 libeay32.dll_ossl_old_des_decrypt3_ossl_old_des_ecb3_encryptI__ossl_old_des_ecb3_encrypt libeay32.dll_ossl_old_des_ecb3_encrypt_ossl_old_des_ecb_encryptG__ossl_old_des_ecb_encrypt libeay32.dll_ossl_old_des_ecb_encrypt _ossl_old_des_ede3_cbc_encryptQ__ossl_old_des_ede3_cbc_encrypt libeay32.dll_ossl_old_des_ede3_cbc_encrypt" _ossl_old_des_ede3_cfb64_encryptU!__ossl_old_des_ede3_cfb64_encrypt libeay32.dll _ossl_old_des_ede3_cfb64_encrypt" _ossl_old_des_ede3_ofb64_encryptU!__ossl_old_des_ede3_ofb64_encrypt libeay32.dll _ossl_old_des_ede3_ofb64_encrypt_ossl_old_des_enc_readA__ossl_old_des_enc_read libeay32.dll_ossl_old_des_enc_read_ossl_old_des_enc_writeC__ossl_old_des_enc_write libeay32.dll_ossl_old_des_enc_write_ossl_old_des_encrypt?__ossl_old_des_encrypt libeay32.dll_ossl_old_des_encrypt_ossl_old_des_encrypt2A__ossl_old_des_encrypt2 libeay32.dll_ossl_old_des_encrypt2_ossl_old_des_encrypt3A__ossl_old_des_encrypt3 libeay32.dll_ossl_old_des_encrypt3_ossl_old_des_fcrypt=__ossl_old_des_fcrypt libeay32.dll_ossl_old_des_fcrypt_ossl_old_des_is_weak_keyG__ossl_old_des_is_weak_key libeay32.dll_ossl_old_des_is_weak_key_ossl_old_des_key_schedC__ossl_old_des_key_sched libeay32.dll_ossl_old_des_key_sched_ossl_old_des_ncbc_encryptI__ossl_old_des_ncbc_encrypt libeay32.dll_ossl_old_des_ncbc_encrypt_ossl_old_des_ofb64_encryptK__ossl_old_des_ofb64_encrypt libeay32.dll_ossl_old_des_ofb64_encrypt_ossl_old_des_ofb_encryptG__ossl_old_des_ofb_encrypt libeay32.dll_ossl_old_des_ofb_encrypt_ossl_old_des_options?__ossl_old_des_options libeay32.dll_ossl_old_des_options_ossl_old_des_pcbc_encryptI__ossl_old_des_pcbc_encrypt libeay32.dll_ossl_old_des_pcbc_encrypt_ossl_old_des_quad_cksumE__ossl_old_des_quad_cksum libeay32.dll_ossl_old_des_quad_cksum_ossl_old_des_random_keyE__ossl_old_des_random_key libeay32.dll_ossl_old_des_random_key_ossl_old_des_random_seedG__ossl_old_des_random_seed libeay32.dll_ossl_old_des_random_seed_ossl_old_des_read_2passwordsO__ossl_old_des_read_2passwords libeay32.dll_ossl_old_des_read_2passwords_ossl_old_des_read_passwordK__ossl_old_des_read_password libeay32.dll_ossl_old_des_read_password_ossl_old_des_read_pw?__ossl_old_des_read_pw libeay32.dll_ossl_old_des_read_pw_ossl_old_des_read_pw_stringM__ossl_old_des_read_pw_string libeay32.dll_ossl_old_des_read_pw_string_ossl_old_des_set_key?__ossl_old_des_set_key libeay32.dll_ossl_old_des_set_key_ossl_old_des_set_odd_parityM__ossl_old_des_set_odd_parity libeay32.dll_ossl_old_des_set_odd_parity_ossl_old_des_string_to_2keysO__ossl_old_des_string_to_2keys libeay32.dll_ossl_old_des_string_to_2keys_ossl_old_des_string_to_keyK__ossl_old_des_string_to_key libeay32.dll_ossl_old_des_string_to_key_ossl_old_des_xcbc_encryptI__ossl_old_des_xcbc_encrypt libeay32.dll_ossl_old_des_xcbc_encrypt_shadow_DES_check_key?__shadow_DES_check_key libeay32.dll_shadow_DES_check_key_shadow_DES_rw_mode;__shadow_DES_rw_mode libeay32.dll_shadow_DES_rw_modea2d_ASN1_OBJECT3_a2d_ASN1_OBJECT libeay32.dlla2d_ASN1_OBJECTa2i_ASN1_ENUMERATED;_a2i_ASN1_ENUMERATED libeay32.dlla2i_ASN1_ENUMERATEDa2i_ASN1_INTEGER5_a2i_ASN1_INTEGER libeay32.dlla2i_ASN1_INTEGERa2i_ASN1_STRING3_a2i_ASN1_STRING libeay32.dlla2i_ASN1_STRINGa2i_GENERAL_NAME5_a2i_GENERAL_NAME libeay32.dlla2i_GENERAL_NAME a2i_IPADDRESS/_a2i_IPADDRESS libeay32.dll a2i_IPADDRESSa2i_IPADDRESS_NC5_a2i_IPADDRESS_NC libeay32.dlla2i_IPADDRESS_NC a2i_ipadd' _a2i_ipadd libeay32.dll a2i_ipadd asn1_Finish+ _asn1_Finish libeay32.dll asn1_Finishasn1_GetSequence5_asn1_GetSequence libeay32.dllasn1_GetSequenceasn1_add_error1_asn1_add_error libeay32.dllasn1_add_errorasn1_const_Finish7_asn1_const_Finish libeay32.dllasn1_const_Finish asn1_do_adb+ _asn1_do_adb libeay32.dll asn1_do_adb asn1_do_lock- _asn1_do_lock libeay32.dll asn1_do_lock asn1_enc_free/_asn1_enc_free libeay32.dll asn1_enc_free asn1_enc_init/_asn1_enc_init libeay32.dll asn1_enc_initasn1_enc_restore5_asn1_enc_restore libeay32.dllasn1_enc_restore asn1_enc_save/_asn1_enc_save libeay32.dll asn1_enc_save asn1_ex_c2i+ _asn1_ex_c2i libeay32.dll asn1_ex_c2i asn1_ex_i2c+ _asn1_ex_i2c libeay32.dll asn1_ex_i2casn1_get_choice_selectorE_asn1_get_choice_selector libeay32.dllasn1_get_choice_selectorasn1_get_field_ptr9_asn1_get_field_ptr libeay32.dllasn1_get_field_ptrasn1_set_choice_selectorE_asn1_set_choice_selector libeay32.dllasn1_set_choice_selector b2i_PVK_bio+ _b2i_PVK_bio libeay32.dll b2i_PVK_biob2i_PrivateKey1_b2i_PrivateKey libeay32.dllb2i_PrivateKeyb2i_PrivateKey_bio9_b2i_PrivateKey_bio libeay32.dllb2i_PrivateKey_bio b2i_PublicKey/_b2i_PublicKey libeay32.dll b2i_PublicKeyb2i_PublicKey_bio7_b2i_PublicKey_bio libeay32.dllb2i_PublicKey_bio bn_add_words- _bn_add_words libeay32.dll bn_add_words bn_div_words- _bn_div_words libeay32.dll bn_div_words bn_dup_expand/_bn_dup_expand libeay32.dll bn_dup_expand bn_expand2) _bn_expand2 libeay32.dll bn_expand2bn_mul_add_words5_bn_mul_add_words libeay32.dllbn_mul_add_words bn_mul_words- _bn_mul_words libeay32.dll bn_mul_words bn_sqr_words- _bn_sqr_words libeay32.dll bn_sqr_words bn_sub_words- _bn_sub_words libeay32.dll bn_sub_wordsc2i_ASN1_BIT_STRING;_c2i_ASN1_BIT_STRING libeay32.dllc2i_ASN1_BIT_STRINGc2i_ASN1_INTEGER5_c2i_ASN1_INTEGER libeay32.dllc2i_ASN1_INTEGERc2i_ASN1_OBJECT3_c2i_ASN1_OBJECT libeay32.dllc2i_ASN1_OBJECT check_defer+ _check_defer libeay32.dll check_deferd2i_ACCESS_DESCRIPTIONA_d2i_ACCESS_DESCRIPTION libeay32.dlld2i_ACCESS_DESCRIPTIONd2i_ASN1_BIT_STRING;_d2i_ASN1_BIT_STRING libeay32.dlld2i_ASN1_BIT_STRINGd2i_ASN1_BMPSTRING9_d2i_ASN1_BMPSTRING libeay32.dlld2i_ASN1_BMPSTRINGd2i_ASN1_BOOLEAN5_d2i_ASN1_BOOLEAN libeay32.dlld2i_ASN1_BOOLEANd2i_ASN1_ENUMERATED;_d2i_ASN1_ENUMERATED libeay32.dlld2i_ASN1_ENUMERATEDd2i_ASN1_GENERALIZEDTIMEE_d2i_ASN1_GENERALIZEDTIME libeay32.dlld2i_ASN1_GENERALIZEDTIMEd2i_ASN1_GENERALSTRINGA_d2i_ASN1_GENERALSTRING libeay32.dlld2i_ASN1_GENERALSTRINGd2i_ASN1_IA5STRING9_d2i_ASN1_IA5STRING libeay32.dlld2i_ASN1_IA5STRINGd2i_ASN1_INTEGER5_d2i_ASN1_INTEGER libeay32.dlld2i_ASN1_INTEGER d2i_ASN1_NULL/_d2i_ASN1_NULL libeay32.dll d2i_ASN1_NULLd2i_ASN1_OBJECT3_d2i_ASN1_OBJECT libeay32.dlld2i_ASN1_OBJECTd2i_ASN1_OCTET_STRING?_d2i_ASN1_OCTET_STRING libeay32.dlld2i_ASN1_OCTET_STRINGd2i_ASN1_PRINTABLE9_d2i_ASN1_PRINTABLE libeay32.dlld2i_ASN1_PRINTABLEd2i_ASN1_PRINTABLESTRINGE_d2i_ASN1_PRINTABLESTRING libeay32.dlld2i_ASN1_PRINTABLESTRINGd2i_ASN1_SEQUENCE_ANY?_d2i_ASN1_SEQUENCE_ANY libeay32.dlld2i_ASN1_SEQUENCE_ANY d2i_ASN1_SET- _d2i_ASN1_SET libeay32.dll d2i_ASN1_SETd2i_ASN1_SET_ANY5_d2i_ASN1_SET_ANY libeay32.dlld2i_ASN1_SET_ANYd2i_ASN1_T61STRING9_d2i_ASN1_T61STRING libeay32.dlld2i_ASN1_T61STRING d2i_ASN1_TIME/_d2i_ASN1_TIME libeay32.dll d2i_ASN1_TIME d2i_ASN1_TYPE/_d2i_ASN1_TYPE libeay32.dll d2i_ASN1_TYPEd2i_ASN1_UINTEGER7_d2i_ASN1_UINTEGER libeay32.dlld2i_ASN1_UINTEGERd2i_ASN1_UNIVERSALSTRINGE_d2i_ASN1_UNIVERSALSTRING libeay32.dlld2i_ASN1_UNIVERSALSTRINGd2i_ASN1_UTCTIME5_d2i_ASN1_UTCTIME libeay32.dlld2i_ASN1_UTCTIMEd2i_ASN1_UTF8STRING;_d2i_ASN1_UTF8STRING libeay32.dlld2i_ASN1_UTF8STRINGd2i_ASN1_VISIBLESTRINGA_d2i_ASN1_VISIBLESTRING libeay32.dlld2i_ASN1_VISIBLESTRINGd2i_ASN1_bytes1_d2i_ASN1_bytes libeay32.dlld2i_ASN1_bytesd2i_ASN1_type_bytes;_d2i_ASN1_type_bytes libeay32.dlld2i_ASN1_type_bytesd2i_AUTHORITY_INFO_ACCESSG_d2i_AUTHORITY_INFO_ACCESS libeay32.dlld2i_AUTHORITY_INFO_ACCESSd2i_AUTHORITY_KEYID;_d2i_AUTHORITY_KEYID libeay32.dlld2i_AUTHORITY_KEYIDd2i_AutoPrivateKey9_d2i_AutoPrivateKey libeay32.dlld2i_AutoPrivateKeyd2i_BASIC_CONSTRAINTS?_d2i_BASIC_CONSTRAINTS libeay32.dlld2i_BASIC_CONSTRAINTSd2i_CERTIFICATEPOLICIESC_d2i_CERTIFICATEPOLICIES libeay32.dlld2i_CERTIFICATEPOLICIESd2i_CMS_ContentInfo;_d2i_CMS_ContentInfo libeay32.dlld2i_CMS_ContentInfod2i_CMS_ReceiptRequestA_d2i_CMS_ReceiptRequest libeay32.dlld2i_CMS_ReceiptRequest d2i_CMS_bio+ _d2i_CMS_bio libeay32.dll d2i_CMS_biod2i_CRL_DIST_POINTS;_d2i_CRL_DIST_POINTS libeay32.dlld2i_CRL_DIST_POINTS d2i_DHparams- _d2i_DHparams libeay32.dll d2i_DHparams d2i_DHxparams/_d2i_DHxparams libeay32.dll d2i_DHxparamsd2i_DIRECTORYSTRING;_d2i_DIRECTORYSTRING libeay32.dlld2i_DIRECTORYSTRINGd2i_DISPLAYTEXT3_d2i_DISPLAYTEXT libeay32.dlld2i_DISPLAYTEXTd2i_DIST_POINT1_d2i_DIST_POINT libeay32.dlld2i_DIST_POINTd2i_DIST_POINT_NAME;_d2i_DIST_POINT_NAME libeay32.dlld2i_DIST_POINT_NAMEd2i_DSAPrivateKey7_d2i_DSAPrivateKey libeay32.dlld2i_DSAPrivateKeyd2i_DSAPrivateKey_bio?_d2i_DSAPrivateKey_bio libeay32.dlld2i_DSAPrivateKey_biod2i_DSAPrivateKey_fp=_d2i_DSAPrivateKey_fp libeay32.dlld2i_DSAPrivateKey_fpd2i_DSAPublicKey5_d2i_DSAPublicKey libeay32.dlld2i_DSAPublicKeyd2i_DSA_PUBKEY1_d2i_DSA_PUBKEY libeay32.dlld2i_DSA_PUBKEYd2i_DSA_PUBKEY_bio9_d2i_DSA_PUBKEY_bio libeay32.dlld2i_DSA_PUBKEY_biod2i_DSA_PUBKEY_fp7_d2i_DSA_PUBKEY_fp libeay32.dlld2i_DSA_PUBKEY_fp d2i_DSA_SIG+ _d2i_DSA_SIG libeay32.dll d2i_DSA_SIG d2i_DSAparams/_d2i_DSAparams libeay32.dll d2i_DSAparams d2i_ECDSA_SIG/_d2i_ECDSA_SIG libeay32.dll d2i_ECDSA_SIGd2i_ECPKParameters9_d2i_ECPKParameters libeay32.dlld2i_ECPKParametersd2i_ECParameters5_d2i_ECParameters libeay32.dlld2i_ECParametersd2i_ECPrivateKey5_d2i_ECPrivateKey libeay32.dlld2i_ECPrivateKeyd2i_ECPrivateKey_bio=_d2i_ECPrivateKey_bio libeay32.dlld2i_ECPrivateKey_biod2i_ECPrivateKey_fp;_d2i_ECPrivateKey_fp libeay32.dlld2i_ECPrivateKey_fp d2i_EC_PUBKEY/_d2i_EC_PUBKEY libeay32.dll d2i_EC_PUBKEYd2i_EC_PUBKEY_bio7_d2i_EC_PUBKEY_bio libeay32.dlld2i_EC_PUBKEY_biod2i_EC_PUBKEY_fp5_d2i_EC_PUBKEY_fp libeay32.dlld2i_EC_PUBKEY_fpd2i_EDIPARTYNAME5_d2i_EDIPARTYNAME libeay32.dlld2i_EDIPARTYNAMEd2i_ESS_CERT_ID3_d2i_ESS_CERT_ID libeay32.dlld2i_ESS_CERT_IDd2i_ESS_ISSUER_SERIAL?_d2i_ESS_ISSUER_SERIAL libeay32.dlld2i_ESS_ISSUER_SERIALd2i_ESS_SIGNING_CERT=_d2i_ESS_SIGNING_CERT libeay32.dlld2i_ESS_SIGNING_CERTd2i_EXTENDED_KEY_USAGEA_d2i_EXTENDED_KEY_USAGE libeay32.dlld2i_EXTENDED_KEY_USAGEd2i_GENERAL_NAME5_d2i_GENERAL_NAME libeay32.dlld2i_GENERAL_NAMEd2i_GENERAL_NAMES7_d2i_GENERAL_NAMES libeay32.dlld2i_GENERAL_NAMESd2i_ISSUING_DIST_POINTA_d2i_ISSUING_DIST_POINT libeay32.dlld2i_ISSUING_DIST_POINTd2i_KRB5_APREQ1_d2i_KRB5_APREQ libeay32.dlld2i_KRB5_APREQd2i_KRB5_APREQBODY9_d2i_KRB5_APREQBODY libeay32.dlld2i_KRB5_APREQBODYd2i_KRB5_AUTHDATA7_d2i_KRB5_AUTHDATA libeay32.dlld2i_KRB5_AUTHDATAd2i_KRB5_AUTHENT5_d2i_KRB5_AUTHENT libeay32.dlld2i_KRB5_AUTHENTd2i_KRB5_AUTHENTBODY=_d2i_KRB5_AUTHENTBODY libeay32.dlld2i_KRB5_AUTHENTBODYd2i_KRB5_CHECKSUM7_d2i_KRB5_CHECKSUM libeay32.dlld2i_KRB5_CHECKSUMd2i_KRB5_ENCDATA5_d2i_KRB5_ENCDATA libeay32.dlld2i_KRB5_ENCDATAd2i_KRB5_ENCKEY3_d2i_KRB5_ENCKEY libeay32.dlld2i_KRB5_ENCKEYd2i_KRB5_PRINCNAME9_d2i_KRB5_PRINCNAME libeay32.dlld2i_KRB5_PRINCNAMEd2i_KRB5_TICKET3_d2i_KRB5_TICKET libeay32.dlld2i_KRB5_TICKETd2i_KRB5_TKTBODY5_d2i_KRB5_TKTBODY libeay32.dlld2i_KRB5_TKTBODYd2i_NETSCAPE_CERT_SEQUENCEI_d2i_NETSCAPE_CERT_SEQUENCE libeay32.dlld2i_NETSCAPE_CERT_SEQUENCEd2i_NETSCAPE_SPKAC9_d2i_NETSCAPE_SPKAC libeay32.dlld2i_NETSCAPE_SPKACd2i_NETSCAPE_SPKI7_d2i_NETSCAPE_SPKI libeay32.dlld2i_NETSCAPE_SPKId2i_NETSCAPE_X5097_d2i_NETSCAPE_X509 libeay32.dlld2i_NETSCAPE_X509 d2i_NOTICEREF/_d2i_NOTICEREF libeay32.dll d2i_NOTICEREFd2i_Netscape_RSA5_d2i_Netscape_RSA libeay32.dlld2i_Netscape_RSAd2i_OCSP_BASICRESP9_d2i_OCSP_BASICRESP libeay32.dlld2i_OCSP_BASICRESPd2i_OCSP_CERTID3_d2i_OCSP_CERTID libeay32.dlld2i_OCSP_CERTIDd2i_OCSP_CERTSTATUS;_d2i_OCSP_CERTSTATUS libeay32.dlld2i_OCSP_CERTSTATUSd2i_OCSP_CRLID1_d2i_OCSP_CRLID libeay32.dlld2i_OCSP_CRLIDd2i_OCSP_ONEREQ3_d2i_OCSP_ONEREQ libeay32.dlld2i_OCSP_ONEREQd2i_OCSP_REQINFO5_d2i_OCSP_REQINFO libeay32.dlld2i_OCSP_REQINFOd2i_OCSP_REQUEST5_d2i_OCSP_REQUEST libeay32.dlld2i_OCSP_REQUESTd2i_OCSP_RESPBYTES9_d2i_OCSP_RESPBYTES libeay32.dlld2i_OCSP_RESPBYTESd2i_OCSP_RESPDATA7_d2i_OCSP_RESPDATA libeay32.dlld2i_OCSP_RESPDATAd2i_OCSP_RESPID3_d2i_OCSP_RESPID libeay32.dlld2i_OCSP_RESPIDd2i_OCSP_RESPONSE7_d2i_OCSP_RESPONSE libeay32.dlld2i_OCSP_RESPONSEd2i_OCSP_REVOKEDINFO=_d2i_OCSP_REVOKEDINFO libeay32.dlld2i_OCSP_REVOKEDINFOd2i_OCSP_SERVICELOC;_d2i_OCSP_SERVICELOC libeay32.dlld2i_OCSP_SERVICELOCd2i_OCSP_SIGNATURE9_d2i_OCSP_SIGNATURE libeay32.dlld2i_OCSP_SIGNATUREd2i_OCSP_SINGLERESP;_d2i_OCSP_SINGLERESP libeay32.dlld2i_OCSP_SINGLERESP d2i_OTHERNAME/_d2i_OTHERNAME libeay32.dll d2i_OTHERNAME d2i_PBE2PARAM/_d2i_PBE2PARAM libeay32.dll d2i_PBE2PARAM d2i_PBEPARAM- _d2i_PBEPARAM libeay32.dll d2i_PBEPARAMd2i_PBKDF2PARAM3_d2i_PBKDF2PARAM libeay32.dlld2i_PBKDF2PARAM d2i_PKCS12) _d2i_PKCS12 libeay32.dll d2i_PKCS12d2i_PKCS12_BAGS3_d2i_PKCS12_BAGS libeay32.dlld2i_PKCS12_BAGSd2i_PKCS12_MAC_DATA;_d2i_PKCS12_MAC_DATA libeay32.dlld2i_PKCS12_MAC_DATAd2i_PKCS12_SAFEBAG9_d2i_PKCS12_SAFEBAG libeay32.dlld2i_PKCS12_SAFEBAGd2i_PKCS12_bio1_d2i_PKCS12_bio libeay32.dlld2i_PKCS12_bio d2i_PKCS12_fp/_d2i_PKCS12_fp libeay32.dll d2i_PKCS12_fp d2i_PKCS7' _d2i_PKCS7 libeay32.dll d2i_PKCS7d2i_PKCS7_DIGEST5_d2i_PKCS7_DIGEST libeay32.dlld2i_PKCS7_DIGESTd2i_PKCS7_ENCRYPT7_d2i_PKCS7_ENCRYPT libeay32.dlld2i_PKCS7_ENCRYPTd2i_PKCS7_ENC_CONTENT?_d2i_PKCS7_ENC_CONTENT libeay32.dlld2i_PKCS7_ENC_CONTENTd2i_PKCS7_ENVELOPE9_d2i_PKCS7_ENVELOPE libeay32.dlld2i_PKCS7_ENVELOPEd2i_PKCS7_ISSUER_AND_SERIALK_d2i_PKCS7_ISSUER_AND_SERIAL libeay32.dlld2i_PKCS7_ISSUER_AND_SERIALd2i_PKCS7_RECIP_INFO=_d2i_PKCS7_RECIP_INFO libeay32.dlld2i_PKCS7_RECIP_INFOd2i_PKCS7_SIGNED5_d2i_PKCS7_SIGNED libeay32.dlld2i_PKCS7_SIGNEDd2i_PKCS7_SIGNER_INFO?_d2i_PKCS7_SIGNER_INFO libeay32.dlld2i_PKCS7_SIGNER_INFOd2i_PKCS7_SIGN_ENVELOPEC_d2i_PKCS7_SIGN_ENVELOPE libeay32.dlld2i_PKCS7_SIGN_ENVELOPE d2i_PKCS7_bio/_d2i_PKCS7_bio libeay32.dll d2i_PKCS7_bio d2i_PKCS7_fp- _d2i_PKCS7_fp libeay32.dll d2i_PKCS7_fpd2i_PKCS8PrivateKey_bioC_d2i_PKCS8PrivateKey_bio libeay32.dlld2i_PKCS8PrivateKey_biod2i_PKCS8PrivateKey_fpA_d2i_PKCS8PrivateKey_fp libeay32.dlld2i_PKCS8PrivateKey_fpd2i_PKCS8_PRIV_KEY_INFOC_d2i_PKCS8_PRIV_KEY_INFO libeay32.dlld2i_PKCS8_PRIV_KEY_INFOd2i_PKCS8_PRIV_KEY_INFO_bioK_d2i_PKCS8_PRIV_KEY_INFO_bio libeay32.dlld2i_PKCS8_PRIV_KEY_INFO_biod2i_PKCS8_PRIV_KEY_INFO_fpI_d2i_PKCS8_PRIV_KEY_INFO_fp libeay32.dlld2i_PKCS8_PRIV_KEY_INFO_fp d2i_PKCS8_bio/_d2i_PKCS8_bio libeay32.dll d2i_PKCS8_bio d2i_PKCS8_fp- _d2i_PKCS8_fp libeay32.dll d2i_PKCS8_fpd2i_PKEY_USAGE_PERIOD?_d2i_PKEY_USAGE_PERIOD libeay32.dlld2i_PKEY_USAGE_PERIODd2i_POLICYINFO1_d2i_POLICYINFO libeay32.dlld2i_POLICYINFOd2i_POLICYQUALINFO9_d2i_POLICYQUALINFO libeay32.dlld2i_POLICYQUALINFOd2i_PROXY_CERT_INFO_EXTENSIONO_d2i_PROXY_CERT_INFO_EXTENSION libeay32.dlld2i_PROXY_CERT_INFO_EXTENSIONd2i_PROXY_POLICY5_d2i_PROXY_POLICY libeay32.dlld2i_PROXY_POLICY d2i_PUBKEY) _d2i_PUBKEY libeay32.dll d2i_PUBKEYd2i_PUBKEY_bio1_d2i_PUBKEY_bio libeay32.dlld2i_PUBKEY_bio d2i_PUBKEY_fp/_d2i_PUBKEY_fp libeay32.dll d2i_PUBKEY_fpd2i_PrivateKey1_d2i_PrivateKey libeay32.dlld2i_PrivateKeyd2i_PrivateKey_bio9_d2i_PrivateKey_bio libeay32.dlld2i_PrivateKey_biod2i_PrivateKey_fp7_d2i_PrivateKey_fp libeay32.dlld2i_PrivateKey_fp d2i_PublicKey/_d2i_PublicKey libeay32.dll d2i_PublicKeyd2i_RSAPrivateKey7_d2i_RSAPrivateKey libeay32.dlld2i_RSAPrivateKeyd2i_RSAPrivateKey_bio?_d2i_RSAPrivateKey_bio libeay32.dlld2i_RSAPrivateKey_biod2i_RSAPrivateKey_fp=_d2i_RSAPrivateKey_fp libeay32.dlld2i_RSAPrivateKey_fpd2i_RSAPublicKey5_d2i_RSAPublicKey libeay32.dlld2i_RSAPublicKeyd2i_RSAPublicKey_bio=_d2i_RSAPublicKey_bio libeay32.dlld2i_RSAPublicKey_biod2i_RSAPublicKey_fp;_d2i_RSAPublicKey_fp libeay32.dlld2i_RSAPublicKey_fp d2i_RSA_NET+ _d2i_RSA_NET libeay32.dll d2i_RSA_NETd2i_RSA_OAEP_PARAMS;_d2i_RSA_OAEP_PARAMS libeay32.dlld2i_RSA_OAEP_PARAMSd2i_RSA_PSS_PARAMS9_d2i_RSA_PSS_PARAMS libeay32.dlld2i_RSA_PSS_PARAMSd2i_RSA_PUBKEY1_d2i_RSA_PUBKEY libeay32.dlld2i_RSA_PUBKEYd2i_RSA_PUBKEY_bio9_d2i_RSA_PUBKEY_bio libeay32.dlld2i_RSA_PUBKEY_biod2i_RSA_PUBKEY_fp7_d2i_RSA_PUBKEY_fp libeay32.dlld2i_RSA_PUBKEY_fp d2i_SXNET' _d2i_SXNET libeay32.dll d2i_SXNET d2i_SXNETID+ _d2i_SXNETID libeay32.dll d2i_SXNETIDd2i_TS_ACCURACY3_d2i_TS_ACCURACY libeay32.dlld2i_TS_ACCURACYd2i_TS_MSG_IMPRINT9_d2i_TS_MSG_IMPRINT libeay32.dlld2i_TS_MSG_IMPRINTd2i_TS_MSG_IMPRINT_bioA_d2i_TS_MSG_IMPRINT_bio libeay32.dlld2i_TS_MSG_IMPRINT_biod2i_TS_MSG_IMPRINT_fp?_d2i_TS_MSG_IMPRINT_fp libeay32.dlld2i_TS_MSG_IMPRINT_fp d2i_TS_REQ) _d2i_TS_REQ libeay32.dll d2i_TS_REQd2i_TS_REQ_bio1_d2i_TS_REQ_bio libeay32.dlld2i_TS_REQ_bio d2i_TS_REQ_fp/_d2i_TS_REQ_fp libeay32.dll d2i_TS_REQ_fp d2i_TS_RESP+ _d2i_TS_RESP libeay32.dll d2i_TS_RESPd2i_TS_RESP_bio3_d2i_TS_RESP_bio libeay32.dlld2i_TS_RESP_biod2i_TS_RESP_fp1_d2i_TS_RESP_fp libeay32.dlld2i_TS_RESP_fpd2i_TS_STATUS_INFO9_d2i_TS_STATUS_INFO libeay32.dlld2i_TS_STATUS_INFOd2i_TS_TST_INFO3_d2i_TS_TST_INFO libeay32.dlld2i_TS_TST_INFOd2i_TS_TST_INFO_bio;_d2i_TS_TST_INFO_bio libeay32.dlld2i_TS_TST_INFO_biod2i_TS_TST_INFO_fp9_d2i_TS_TST_INFO_fp libeay32.dlld2i_TS_TST_INFO_fpd2i_USERNOTICE1_d2i_USERNOTICE libeay32.dlld2i_USERNOTICE d2i_X509% _d2i_X509 libeay32.dlld2i_X509d2i_X509_ALGOR1_d2i_X509_ALGOR libeay32.dlld2i_X509_ALGORd2i_X509_ALGORS3_d2i_X509_ALGORS libeay32.dlld2i_X509_ALGORSd2i_X509_ATTRIBUTE9_d2i_X509_ATTRIBUTE libeay32.dlld2i_X509_ATTRIBUTE d2i_X509_AUX- _d2i_X509_AUX libeay32.dll d2i_X509_AUXd2i_X509_CERT_AUX7_d2i_X509_CERT_AUX libeay32.dlld2i_X509_CERT_AUXd2i_X509_CERT_PAIR9_d2i_X509_CERT_PAIR libeay32.dlld2i_X509_CERT_PAIR d2i_X509_CINF/_d2i_X509_CINF libeay32.dll d2i_X509_CINF d2i_X509_CRL- _d2i_X509_CRL libeay32.dll d2i_X509_CRLd2i_X509_CRL_INFO7_d2i_X509_CRL_INFO libeay32.dlld2i_X509_CRL_INFOd2i_X509_CRL_bio5_d2i_X509_CRL_bio libeay32.dlld2i_X509_CRL_biod2i_X509_CRL_fp3_d2i_X509_CRL_fp libeay32.dlld2i_X509_CRL_fpd2i_X509_EXTENSION9_d2i_X509_EXTENSION libeay32.dlld2i_X509_EXTENSIONd2i_X509_EXTENSIONS;_d2i_X509_EXTENSIONS libeay32.dlld2i_X509_EXTENSIONS d2i_X509_NAME/_d2i_X509_NAME libeay32.dll d2i_X509_NAMEd2i_X509_NAME_ENTRY;_d2i_X509_NAME_ENTRY libeay32.dlld2i_X509_NAME_ENTRY d2i_X509_PKEY/_d2i_X509_PKEY libeay32.dll d2i_X509_PKEYd2i_X509_PUBKEY3_d2i_X509_PUBKEY libeay32.dlld2i_X509_PUBKEY d2i_X509_REQ- _d2i_X509_REQ libeay32.dll d2i_X509_REQd2i_X509_REQ_INFO7_d2i_X509_REQ_INFO libeay32.dlld2i_X509_REQ_INFOd2i_X509_REQ_bio5_d2i_X509_REQ_bio libeay32.dlld2i_X509_REQ_biod2i_X509_REQ_fp3_d2i_X509_REQ_fp libeay32.dlld2i_X509_REQ_fpd2i_X509_REVOKED5_d2i_X509_REVOKED libeay32.dlld2i_X509_REVOKED d2i_X509_SIG- _d2i_X509_SIG libeay32.dll d2i_X509_SIG d2i_X509_VAL- _d2i_X509_VAL libeay32.dll d2i_X509_VAL d2i_X509_bio- _d2i_X509_bio libeay32.dll d2i_X509_bio d2i_X509_fp+ _d2i_X509_fp libeay32.dll d2i_X509_fpget_rfc2409_prime_1024A_get_rfc2409_prime_1024 libeay32.dllget_rfc2409_prime_1024get_rfc2409_prime_768?_get_rfc2409_prime_768 libeay32.dllget_rfc2409_prime_768get_rfc3526_prime_1536A_get_rfc3526_prime_1536 libeay32.dllget_rfc3526_prime_1536get_rfc3526_prime_2048A_get_rfc3526_prime_2048 libeay32.dllget_rfc3526_prime_2048get_rfc3526_prime_3072A_get_rfc3526_prime_3072 libeay32.dllget_rfc3526_prime_3072get_rfc3526_prime_4096A_get_rfc3526_prime_4096 libeay32.dllget_rfc3526_prime_4096get_rfc3526_prime_6144A_get_rfc3526_prime_6144 libeay32.dllget_rfc3526_prime_6144get_rfc3526_prime_8192A_get_rfc3526_prime_8192 libeay32.dllget_rfc3526_prime_8192 hex_to_string/_hex_to_string libeay32.dll hex_to_stringi2a_ACCESS_DESCRIPTIONA_i2a_ACCESS_DESCRIPTION libeay32.dlli2a_ACCESS_DESCRIPTIONi2a_ASN1_ENUMERATED;_i2a_ASN1_ENUMERATED libeay32.dlli2a_ASN1_ENUMERATEDi2a_ASN1_INTEGER5_i2a_ASN1_INTEGER libeay32.dlli2a_ASN1_INTEGERi2a_ASN1_OBJECT3_i2a_ASN1_OBJECT libeay32.dlli2a_ASN1_OBJECTi2a_ASN1_STRING3_i2a_ASN1_STRING libeay32.dlli2a_ASN1_STRING i2b_PVK_bio+ _i2b_PVK_bio libeay32.dll i2b_PVK_bioi2b_PrivateKey_bio9_i2b_PrivateKey_bio libeay32.dlli2b_PrivateKey_bioi2b_PublicKey_bio7_i2b_PublicKey_bio libeay32.dlli2b_PublicKey_bioi2c_ASN1_BIT_STRING;_i2c_ASN1_BIT_STRING libeay32.dlli2c_ASN1_BIT_STRINGi2c_ASN1_INTEGER5_i2c_ASN1_INTEGER libeay32.dlli2c_ASN1_INTEGERi2d_ACCESS_DESCRIPTIONA_i2d_ACCESS_DESCRIPTION libeay32.dlli2d_ACCESS_DESCRIPTIONi2d_ASN1_BIT_STRING;_i2d_ASN1_BIT_STRING libeay32.dlli2d_ASN1_BIT_STRINGi2d_ASN1_BMPSTRING9_i2d_ASN1_BMPSTRING libeay32.dlli2d_ASN1_BMPSTRINGi2d_ASN1_BOOLEAN5_i2d_ASN1_BOOLEAN libeay32.dlli2d_ASN1_BOOLEANi2d_ASN1_ENUMERATED;_i2d_ASN1_ENUMERATED libeay32.dlli2d_ASN1_ENUMERATEDi2d_ASN1_GENERALIZEDTIMEE_i2d_ASN1_GENERALIZEDTIME libeay32.dlli2d_ASN1_GENERALIZEDTIMEi2d_ASN1_GENERALSTRINGA_i2d_ASN1_GENERALSTRING libeay32.dlli2d_ASN1_GENERALSTRINGi2d_ASN1_IA5STRING9_i2d_ASN1_IA5STRING libeay32.dlli2d_ASN1_IA5STRINGi2d_ASN1_INTEGER5_i2d_ASN1_INTEGER libeay32.dlli2d_ASN1_INTEGER i2d_ASN1_NULL/_i2d_ASN1_NULL libeay32.dll i2d_ASN1_NULLi2d_ASN1_OBJECT3_i2d_ASN1_OBJECT libeay32.dlli2d_ASN1_OBJECTi2d_ASN1_OCTET_STRING?_i2d_ASN1_OCTET_STRING libeay32.dlli2d_ASN1_OCTET_STRINGi2d_ASN1_PRINTABLE9_i2d_ASN1_PRINTABLE libeay32.dlli2d_ASN1_PRINTABLEi2d_ASN1_PRINTABLESTRINGE_i2d_ASN1_PRINTABLESTRING libeay32.dlli2d_ASN1_PRINTABLESTRINGi2d_ASN1_SEQUENCE_ANY?_i2d_ASN1_SEQUENCE_ANY libeay32.dlli2d_ASN1_SEQUENCE_ANY i2d_ASN1_SET- _i2d_ASN1_SET libeay32.dll i2d_ASN1_SETi2d_ASN1_SET_ANY5_i2d_ASN1_SET_ANY libeay32.dlli2d_ASN1_SET_ANYi2d_ASN1_T61STRING9_i2d_ASN1_T61STRING libeay32.dlli2d_ASN1_T61STRING i2d_ASN1_TIME/_i2d_ASN1_TIME libeay32.dll i2d_ASN1_TIME i2d_ASN1_TYPE/_i2d_ASN1_TYPE libeay32.dll i2d_ASN1_TYPEi2d_ASN1_UNIVERSALSTRINGE_i2d_ASN1_UNIVERSALSTRING libeay32.dlli2d_ASN1_UNIVERSALSTRINGi2d_ASN1_UTCTIME5_i2d_ASN1_UTCTIME libeay32.dlli2d_ASN1_UTCTIMEi2d_ASN1_UTF8STRING;_i2d_ASN1_UTF8STRING libeay32.dlli2d_ASN1_UTF8STRINGi2d_ASN1_VISIBLESTRINGA_i2d_ASN1_VISIBLESTRING libeay32.dlli2d_ASN1_VISIBLESTRINGi2d_ASN1_bio_stream;_i2d_ASN1_bio_stream libeay32.dlli2d_ASN1_bio_streami2d_ASN1_bytes1_i2d_ASN1_bytes libeay32.dlli2d_ASN1_bytesi2d_AUTHORITY_INFO_ACCESSG_i2d_AUTHORITY_INFO_ACCESS libeay32.dlli2d_AUTHORITY_INFO_ACCESSi2d_AUTHORITY_KEYID;_i2d_AUTHORITY_KEYID libeay32.dlli2d_AUTHORITY_KEYIDi2d_BASIC_CONSTRAINTS?_i2d_BASIC_CONSTRAINTS libeay32.dlli2d_BASIC_CONSTRAINTSi2d_CERTIFICATEPOLICIESC_i2d_CERTIFICATEPOLICIES libeay32.dlli2d_CERTIFICATEPOLICIESi2d_CMS_ContentInfo;_i2d_CMS_ContentInfo libeay32.dlli2d_CMS_ContentInfoi2d_CMS_ReceiptRequestA_i2d_CMS_ReceiptRequest libeay32.dlli2d_CMS_ReceiptRequest i2d_CMS_bio+ _i2d_CMS_bio libeay32.dll i2d_CMS_bioi2d_CMS_bio_stream9_i2d_CMS_bio_stream libeay32.dlli2d_CMS_bio_streami2d_CRL_DIST_POINTS;_i2d_CRL_DIST_POINTS libeay32.dlli2d_CRL_DIST_POINTS i2d_DHparams- _i2d_DHparams libeay32.dll i2d_DHparams i2d_DHxparams/_i2d_DHxparams libeay32.dll i2d_DHxparamsi2d_DIRECTORYSTRING;_i2d_DIRECTORYSTRING libeay32.dlli2d_DIRECTORYSTRINGi2d_DISPLAYTEXT3_i2d_DISPLAYTEXT libeay32.dlli2d_DISPLAYTEXTi2d_DIST_POINT1_i2d_DIST_POINT libeay32.dlli2d_DIST_POINTi2d_DIST_POINT_NAME;_i2d_DIST_POINT_NAME libeay32.dlli2d_DIST_POINT_NAMEi2d_DSAPrivateKey7_i2d_DSAPrivateKey libeay32.dlli2d_DSAPrivateKeyi2d_DSAPrivateKey_bio?_i2d_DSAPrivateKey_bio libeay32.dlli2d_DSAPrivateKey_bioi2d_DSAPrivateKey_fp=_i2d_DSAPrivateKey_fp libeay32.dlli2d_DSAPrivateKey_fpi2d_DSAPublicKey5_i2d_DSAPublicKey libeay32.dlli2d_DSAPublicKeyi2d_DSA_PUBKEY1_i2d_DSA_PUBKEY libeay32.dlli2d_DSA_PUBKEYi2d_DSA_PUBKEY_bio9_i2d_DSA_PUBKEY_bio libeay32.dlli2d_DSA_PUBKEY_bioi2d_DSA_PUBKEY_fp7_i2d_DSA_PUBKEY_fp libeay32.dlli2d_DSA_PUBKEY_fp i2d_DSA_SIG+ _i2d_DSA_SIG libeay32.dll i2d_DSA_SIG i2d_DSAparams/_i2d_DSAparams libeay32.dll i2d_DSAparams i2d_ECDSA_SIG/_i2d_ECDSA_SIG libeay32.dll i2d_ECDSA_SIGi2d_ECPKParameters9_i2d_ECPKParameters libeay32.dlli2d_ECPKParametersi2d_ECParameters5_i2d_ECParameters libeay32.dlli2d_ECParametersi2d_ECPrivateKey5_i2d_ECPrivateKey libeay32.dlli2d_ECPrivateKeyi2d_ECPrivateKey_bio=_i2d_ECPrivateKey_bio libeay32.dlli2d_ECPrivateKey_bioi2d_ECPrivateKey_fp;_i2d_ECPrivateKey_fp libeay32.dlli2d_ECPrivateKey_fp i2d_EC_PUBKEY/_i2d_EC_PUBKEY libeay32.dll i2d_EC_PUBKEYi2d_EC_PUBKEY_bio7_i2d_EC_PUBKEY_bio libeay32.dlli2d_EC_PUBKEY_bioi2d_EC_PUBKEY_fp5_i2d_EC_PUBKEY_fp libeay32.dlli2d_EC_PUBKEY_fpi2d_EDIPARTYNAME5_i2d_EDIPARTYNAME libeay32.dlli2d_EDIPARTYNAMEi2d_ESS_CERT_ID3_i2d_ESS_CERT_ID libeay32.dlli2d_ESS_CERT_IDi2d_ESS_ISSUER_SERIAL?_i2d_ESS_ISSUER_SERIAL libeay32.dlli2d_ESS_ISSUER_SERIALi2d_ESS_SIGNING_CERT=_i2d_ESS_SIGNING_CERT libeay32.dlli2d_ESS_SIGNING_CERTi2d_EXTENDED_KEY_USAGEA_i2d_EXTENDED_KEY_USAGE libeay32.dlli2d_EXTENDED_KEY_USAGEi2d_GENERAL_NAME5_i2d_GENERAL_NAME libeay32.dlli2d_GENERAL_NAMEi2d_GENERAL_NAMES7_i2d_GENERAL_NAMES libeay32.dlli2d_GENERAL_NAMESi2d_ISSUING_DIST_POINTA_i2d_ISSUING_DIST_POINT libeay32.dlli2d_ISSUING_DIST_POINTi2d_KRB5_APREQ1_i2d_KRB5_APREQ libeay32.dlli2d_KRB5_APREQi2d_KRB5_APREQBODY9_i2d_KRB5_APREQBODY libeay32.dlli2d_KRB5_APREQBODYi2d_KRB5_AUTHDATA7_i2d_KRB5_AUTHDATA libeay32.dlli2d_KRB5_AUTHDATAi2d_KRB5_AUTHENT5_i2d_KRB5_AUTHENT libeay32.dlli2d_KRB5_AUTHENTi2d_KRB5_AUTHENTBODY=_i2d_KRB5_AUTHENTBODY libeay32.dlli2d_KRB5_AUTHENTBODYi2d_KRB5_CHECKSUM7_i2d_KRB5_CHECKSUM libeay32.dlli2d_KRB5_CHECKSUMi2d_KRB5_ENCDATA5_i2d_KRB5_ENCDATA libeay32.dlli2d_KRB5_ENCDATAi2d_KRB5_ENCKEY3_i2d_KRB5_ENCKEY libeay32.dlli2d_KRB5_ENCKEYi2d_KRB5_PRINCNAME9_i2d_KRB5_PRINCNAME libeay32.dlli2d_KRB5_PRINCNAMEi2d_KRB5_TICKET3_i2d_KRB5_TICKET libeay32.dlli2d_KRB5_TICKETi2d_KRB5_TKTBODY5_i2d_KRB5_TKTBODY libeay32.dlli2d_KRB5_TKTBODYi2d_NETSCAPE_CERT_SEQUENCEI_i2d_NETSCAPE_CERT_SEQUENCE libeay32.dlli2d_NETSCAPE_CERT_SEQUENCEi2d_NETSCAPE_SPKAC9_i2d_NETSCAPE_SPKAC libeay32.dlli2d_NETSCAPE_SPKACi2d_NETSCAPE_SPKI7_i2d_NETSCAPE_SPKI libeay32.dlli2d_NETSCAPE_SPKIi2d_NETSCAPE_X5097_i2d_NETSCAPE_X509 libeay32.dlli2d_NETSCAPE_X509 i2d_NOTICEREF/_i2d_NOTICEREF libeay32.dll i2d_NOTICEREFi2d_Netscape_RSA5_i2d_Netscape_RSA libeay32.dlli2d_Netscape_RSAi2d_OCSP_BASICRESP9_i2d_OCSP_BASICRESP libeay32.dlli2d_OCSP_BASICRESPi2d_OCSP_CERTID3_i2d_OCSP_CERTID libeay32.dlli2d_OCSP_CERTIDi2d_OCSP_CERTSTATUS;_i2d_OCSP_CERTSTATUS libeay32.dlli2d_OCSP_CERTSTATUSi2d_OCSP_CRLID1_i2d_OCSP_CRLID libeay32.dlli2d_OCSP_CRLIDi2d_OCSP_ONEREQ3_i2d_OCSP_ONEREQ libeay32.dlli2d_OCSP_ONEREQi2d_OCSP_REQINFO5_i2d_OCSP_REQINFO libeay32.dlli2d_OCSP_REQINFOi2d_OCSP_REQUEST5_i2d_OCSP_REQUEST libeay32.dlli2d_OCSP_REQUESTi2d_OCSP_RESPBYTES9_i2d_OCSP_RESPBYTES libeay32.dlli2d_OCSP_RESPBYTESi2d_OCSP_RESPDATA7_i2d_OCSP_RESPDATA libeay32.dlli2d_OCSP_RESPDATAi2d_OCSP_RESPID3_i2d_OCSP_RESPID libeay32.dlli2d_OCSP_RESPIDi2d_OCSP_RESPONSE7_i2d_OCSP_RESPONSE libeay32.dlli2d_OCSP_RESPONSEi2d_OCSP_REVOKEDINFO=_i2d_OCSP_REVOKEDINFO libeay32.dlli2d_OCSP_REVOKEDINFOi2d_OCSP_SERVICELOC;_i2d_OCSP_SERVICELOC libeay32.dlli2d_OCSP_SERVICELOCi2d_OCSP_SIGNATURE9_i2d_OCSP_SIGNATURE libeay32.dlli2d_OCSP_SIGNATUREi2d_OCSP_SINGLERESP;_i2d_OCSP_SINGLERESP libeay32.dlli2d_OCSP_SINGLERESP i2d_OTHERNAME/_i2d_OTHERNAME libeay32.dll i2d_OTHERNAME i2d_PBE2PARAM/_i2d_PBE2PARAM libeay32.dll i2d_PBE2PARAM i2d_PBEPARAM- _i2d_PBEPARAM libeay32.dll i2d_PBEPARAMi2d_PBKDF2PARAM3_i2d_PBKDF2PARAM libeay32.dlli2d_PBKDF2PARAM i2d_PKCS12) _i2d_PKCS12 libeay32.dll i2d_PKCS12i2d_PKCS12_BAGS3_i2d_PKCS12_BAGS libeay32.dlli2d_PKCS12_BAGSi2d_PKCS12_MAC_DATA;_i2d_PKCS12_MAC_DATA libeay32.dlli2d_PKCS12_MAC_DATAi2d_PKCS12_SAFEBAG9_i2d_PKCS12_SAFEBAG libeay32.dlli2d_PKCS12_SAFEBAGi2d_PKCS12_bio1_i2d_PKCS12_bio libeay32.dlli2d_PKCS12_bio i2d_PKCS12_fp/_i2d_PKCS12_fp libeay32.dll i2d_PKCS12_fp i2d_PKCS7' _i2d_PKCS7 libeay32.dll i2d_PKCS7i2d_PKCS7_DIGEST5_i2d_PKCS7_DIGEST libeay32.dlli2d_PKCS7_DIGESTi2d_PKCS7_ENCRYPT7_i2d_PKCS7_ENCRYPT libeay32.dlli2d_PKCS7_ENCRYPTi2d_PKCS7_ENC_CONTENT?_i2d_PKCS7_ENC_CONTENT libeay32.dlli2d_PKCS7_ENC_CONTENTi2d_PKCS7_ENVELOPE9_i2d_PKCS7_ENVELOPE libeay32.dlli2d_PKCS7_ENVELOPEi2d_PKCS7_ISSUER_AND_SERIALK_i2d_PKCS7_ISSUER_AND_SERIAL libeay32.dlli2d_PKCS7_ISSUER_AND_SERIALi2d_PKCS7_NDEF1_i2d_PKCS7_NDEF libeay32.dlli2d_PKCS7_NDEFi2d_PKCS7_RECIP_INFO=_i2d_PKCS7_RECIP_INFO libeay32.dlli2d_PKCS7_RECIP_INFOi2d_PKCS7_SIGNED5_i2d_PKCS7_SIGNED libeay32.dlli2d_PKCS7_SIGNEDi2d_PKCS7_SIGNER_INFO?_i2d_PKCS7_SIGNER_INFO libeay32.dlli2d_PKCS7_SIGNER_INFOi2d_PKCS7_SIGN_ENVELOPEC_i2d_PKCS7_SIGN_ENVELOPE libeay32.dlli2d_PKCS7_SIGN_ENVELOPE i2d_PKCS7_bio/_i2d_PKCS7_bio libeay32.dll i2d_PKCS7_bioi2d_PKCS7_bio_stream=_i2d_PKCS7_bio_stream libeay32.dlli2d_PKCS7_bio_stream i2d_PKCS7_fp- _i2d_PKCS7_fp libeay32.dll i2d_PKCS7_fpi2d_PKCS8PrivateKeyInfo_bioK_i2d_PKCS8PrivateKeyInfo_bio libeay32.dlli2d_PKCS8PrivateKeyInfo_bioi2d_PKCS8PrivateKeyInfo_fpI_i2d_PKCS8PrivateKeyInfo_fp libeay32.dlli2d_PKCS8PrivateKeyInfo_fpi2d_PKCS8PrivateKey_bioC_i2d_PKCS8PrivateKey_bio libeay32.dlli2d_PKCS8PrivateKey_bioi2d_PKCS8PrivateKey_fpA_i2d_PKCS8PrivateKey_fp libeay32.dlli2d_PKCS8PrivateKey_fpi2d_PKCS8PrivateKey_nid_bioK_i2d_PKCS8PrivateKey_nid_bio libeay32.dlli2d_PKCS8PrivateKey_nid_bioi2d_PKCS8PrivateKey_nid_fpI_i2d_PKCS8PrivateKey_nid_fp libeay32.dlli2d_PKCS8PrivateKey_nid_fpi2d_PKCS8_PRIV_KEY_INFOC_i2d_PKCS8_PRIV_KEY_INFO libeay32.dlli2d_PKCS8_PRIV_KEY_INFOi2d_PKCS8_PRIV_KEY_INFO_bioK_i2d_PKCS8_PRIV_KEY_INFO_bio libeay32.dlli2d_PKCS8_PRIV_KEY_INFO_bioi2d_PKCS8_PRIV_KEY_INFO_fpI_i2d_PKCS8_PRIV_KEY_INFO_fp libeay32.dlli2d_PKCS8_PRIV_KEY_INFO_fp i2d_PKCS8_bio/_i2d_PKCS8_bio libeay32.dll i2d_PKCS8_bio i2d_PKCS8_fp- _i2d_PKCS8_fp libeay32.dll i2d_PKCS8_fpi2d_PKEY_USAGE_PERIOD?_i2d_PKEY_USAGE_PERIOD libeay32.dlli2d_PKEY_USAGE_PERIODi2d_POLICYINFO1_i2d_POLICYINFO libeay32.dlli2d_POLICYINFOi2d_POLICYQUALINFO9_i2d_POLICYQUALINFO libeay32.dlli2d_POLICYQUALINFOi2d_PROXY_CERT_INFO_EXTENSIONO_i2d_PROXY_CERT_INFO_EXTENSION libeay32.dlli2d_PROXY_CERT_INFO_EXTENSIONi2d_PROXY_POLICY5_i2d_PROXY_POLICY libeay32.dlli2d_PROXY_POLICY i2d_PUBKEY) _i2d_PUBKEY libeay32.dll i2d_PUBKEYi2d_PUBKEY_bio1_i2d_PUBKEY_bio libeay32.dlli2d_PUBKEY_bio i2d_PUBKEY_fp/_i2d_PUBKEY_fp libeay32.dll i2d_PUBKEY_fpi2d_PrivateKey1_i2d_PrivateKey libeay32.dlli2d_PrivateKeyi2d_PrivateKey_bio9_i2d_PrivateKey_bio libeay32.dlli2d_PrivateKey_bioi2d_PrivateKey_fp7_i2d_PrivateKey_fp libeay32.dlli2d_PrivateKey_fp i2d_PublicKey/_i2d_PublicKey libeay32.dll i2d_PublicKeyi2d_RSAPrivateKey7_i2d_RSAPrivateKey libeay32.dlli2d_RSAPrivateKeyi2d_RSAPrivateKey_bio?_i2d_RSAPrivateKey_bio libeay32.dlli2d_RSAPrivateKey_bioi2d_RSAPrivateKey_fp=_i2d_RSAPrivateKey_fp libeay32.dlli2d_RSAPrivateKey_fpi2d_RSAPublicKey5_i2d_RSAPublicKey libeay32.dlli2d_RSAPublicKeyi2d_RSAPublicKey_bio=_i2d_RSAPublicKey_bio libeay32.dlli2d_RSAPublicKey_bioi2d_RSAPublicKey_fp;_i2d_RSAPublicKey_fp libeay32.dlli2d_RSAPublicKey_fp i2d_RSA_NET+ _i2d_RSA_NET libeay32.dll i2d_RSA_NETi2d_RSA_OAEP_PARAMS;_i2d_RSA_OAEP_PARAMS libeay32.dlli2d_RSA_OAEP_PARAMSi2d_RSA_PSS_PARAMS9_i2d_RSA_PSS_PARAMS libeay32.dlli2d_RSA_PSS_PARAMSi2d_RSA_PUBKEY1_i2d_RSA_PUBKEY libeay32.dlli2d_RSA_PUBKEYi2d_RSA_PUBKEY_bio9_i2d_RSA_PUBKEY_bio libeay32.dlli2d_RSA_PUBKEY_bioi2d_RSA_PUBKEY_fp7_i2d_RSA_PUBKEY_fp libeay32.dlli2d_RSA_PUBKEY_fp i2d_SXNET' _i2d_SXNET libeay32.dll i2d_SXNET i2d_SXNETID+ _i2d_SXNETID libeay32.dll i2d_SXNETIDi2d_TS_ACCURACY3_i2d_TS_ACCURACY libeay32.dlli2d_TS_ACCURACYi2d_TS_MSG_IMPRINT9_i2d_TS_MSG_IMPRINT libeay32.dlli2d_TS_MSG_IMPRINTi2d_TS_MSG_IMPRINT_bioA_i2d_TS_MSG_IMPRINT_bio libeay32.dlli2d_TS_MSG_IMPRINT_bioi2d_TS_MSG_IMPRINT_fp?_i2d_TS_MSG_IMPRINT_fp libeay32.dlli2d_TS_MSG_IMPRINT_fp i2d_TS_REQ) _i2d_TS_REQ libeay32.dll i2d_TS_REQi2d_TS_REQ_bio1_i2d_TS_REQ_bio libeay32.dlli2d_TS_REQ_bio i2d_TS_REQ_fp/_i2d_TS_REQ_fp libeay32.dll i2d_TS_REQ_fp i2d_TS_RESP+ _i2d_TS_RESP libeay32.dll i2d_TS_RESPi2d_TS_RESP_bio3_i2d_TS_RESP_bio libeay32.dlli2d_TS_RESP_bioi2d_TS_RESP_fp1_i2d_TS_RESP_fp libeay32.dlli2d_TS_RESP_fpi2d_TS_STATUS_INFO9_i2d_TS_STATUS_INFO libeay32.dlli2d_TS_STATUS_INFOi2d_TS_TST_INFO3_i2d_TS_TST_INFO libeay32.dlli2d_TS_TST_INFOi2d_TS_TST_INFO_bio;_i2d_TS_TST_INFO_bio libeay32.dlli2d_TS_TST_INFO_bioi2d_TS_TST_INFO_fp9_i2d_TS_TST_INFO_fp libeay32.dlli2d_TS_TST_INFO_fpi2d_USERNOTICE1_i2d_USERNOTICE libeay32.dlli2d_USERNOTICE i2d_X509% _i2d_X509 libeay32.dlli2d_X509i2d_X509_ALGOR1_i2d_X509_ALGOR libeay32.dlli2d_X509_ALGORi2d_X509_ALGORS3_i2d_X509_ALGORS libeay32.dlli2d_X509_ALGORSi2d_X509_ATTRIBUTE9_i2d_X509_ATTRIBUTE libeay32.dlli2d_X509_ATTRIBUTE i2d_X509_AUX- _i2d_X509_AUX libeay32.dll i2d_X509_AUXi2d_X509_CERT_AUX7_i2d_X509_CERT_AUX libeay32.dlli2d_X509_CERT_AUXi2d_X509_CERT_PAIR9_i2d_X509_CERT_PAIR libeay32.dlli2d_X509_CERT_PAIR i2d_X509_CINF/_i2d_X509_CINF libeay32.dll i2d_X509_CINF i2d_X509_CRL- _i2d_X509_CRL libeay32.dll i2d_X509_CRLi2d_X509_CRL_INFO7_i2d_X509_CRL_INFO libeay32.dlli2d_X509_CRL_INFOi2d_X509_CRL_bio5_i2d_X509_CRL_bio libeay32.dlli2d_X509_CRL_bioi2d_X509_CRL_fp3_i2d_X509_CRL_fp libeay32.dlli2d_X509_CRL_fpi2d_X509_EXTENSION9_i2d_X509_EXTENSION libeay32.dlli2d_X509_EXTENSIONi2d_X509_EXTENSIONS;_i2d_X509_EXTENSIONS libeay32.dlli2d_X509_EXTENSIONS i2d_X509_NAME/_i2d_X509_NAME libeay32.dll i2d_X509_NAMEi2d_X509_NAME_ENTRY;_i2d_X509_NAME_ENTRY libeay32.dlli2d_X509_NAME_ENTRY i2d_X509_PKEY/_i2d_X509_PKEY libeay32.dll i2d_X509_PKEYi2d_X509_PUBKEY3_i2d_X509_PUBKEY libeay32.dlli2d_X509_PUBKEY i2d_X509_REQ- _i2d_X509_REQ libeay32.dll i2d_X509_REQi2d_X509_REQ_INFO7_i2d_X509_REQ_INFO libeay32.dlli2d_X509_REQ_INFOi2d_X509_REQ_bio5_i2d_X509_REQ_bio libeay32.dlli2d_X509_REQ_bioi2d_X509_REQ_fp3_i2d_X509_REQ_fp libeay32.dlli2d_X509_REQ_fpi2d_X509_REVOKED5_i2d_X509_REVOKED libeay32.dlli2d_X509_REVOKED i2d_X509_SIG- _i2d_X509_SIG libeay32.dll i2d_X509_SIG i2d_X509_VAL- _i2d_X509_VAL libeay32.dll i2d_X509_VAL i2d_X509_bio- _i2d_X509_bio libeay32.dll i2d_X509_bio i2d_X509_fp+ _i2d_X509_fp libeay32.dll i2d_X509_fpi2d_re_X509_tbs3_i2d_re_X509_tbs libeay32.dlli2d_re_X509_tbsi2o_ECPublicKey3_i2o_ECPublicKey libeay32.dlli2o_ECPublicKeyi2s_ASN1_ENUMERATED;_i2s_ASN1_ENUMERATED libeay32.dlli2s_ASN1_ENUMERATEDi2s_ASN1_ENUMERATED_TABLEG_i2s_ASN1_ENUMERATED_TABLE libeay32.dlli2s_ASN1_ENUMERATED_TABLEi2s_ASN1_INTEGER5_i2s_ASN1_INTEGER libeay32.dlli2s_ASN1_INTEGERi2s_ASN1_OCTET_STRING?_i2s_ASN1_OCTET_STRING libeay32.dlli2s_ASN1_OCTET_STRINGi2t_ASN1_OBJECT3_i2t_ASN1_OBJECT libeay32.dlli2t_ASN1_OBJECTi2v_ASN1_BIT_STRING;_i2v_ASN1_BIT_STRING libeay32.dlli2v_ASN1_BIT_STRINGi2v_GENERAL_NAME5_i2v_GENERAL_NAME libeay32.dlli2v_GENERAL_NAMEi2v_GENERAL_NAMES7_i2v_GENERAL_NAMES libeay32.dlli2v_GENERAL_NAMESidea_cbc_encrypt5_idea_cbc_encrypt libeay32.dllidea_cbc_encryptidea_cfb64_encrypt9_idea_cfb64_encrypt libeay32.dllidea_cfb64_encryptidea_ecb_encrypt5_idea_ecb_encrypt libeay32.dllidea_ecb_encrypt idea_encrypt- _idea_encrypt libeay32.dll idea_encryptidea_ofb64_encrypt9_idea_ofb64_encrypt libeay32.dllidea_ofb64_encrypt idea_options- _idea_options libeay32.dll idea_optionsidea_set_decrypt_key=_idea_set_decrypt_key libeay32.dllidea_set_decrypt_keyidea_set_encrypt_key=_idea_set_encrypt_key libeay32.dllidea_set_encrypt_key lh_delete' _lh_delete libeay32.dll lh_delete lh_doall% _lh_doall libeay32.dlllh_doall lh_doall_arg- _lh_doall_arg libeay32.dll lh_doall_arg lh_free#_lh_free libeay32.dlllh_free lh_insert' _lh_insert libeay32.dll lh_insertlh_new!_lh_new libeay32.dlllh_new lh_node_stats/_lh_node_stats libeay32.dll lh_node_statslh_node_stats_bio7_lh_node_stats_bio libeay32.dlllh_node_stats_biolh_node_usage_stats;_lh_node_usage_stats libeay32.dlllh_node_usage_statslh_node_usage_stats_bioC_lh_node_usage_stats_bio libeay32.dlllh_node_usage_stats_bio lh_num_items- _lh_num_items libeay32.dll lh_num_items lh_retrieve+ _lh_retrieve libeay32.dll lh_retrieve lh_stats% _lh_stats libeay32.dlllh_stats lh_stats_bio- _lh_stats_bio libeay32.dll lh_stats_bio lh_strhash) _lh_strhash libeay32.dll lh_strhash name_cmp% _name_cmp libeay32.dllname_cmpo2i_ECPublicKey3_o2i_ECPublicKey libeay32.dllo2i_ECPublicKey pitem_free) _pitem_free libeay32.dll pitem_free pitem_new' _pitem_new libeay32.dll pitem_new pqueue_find+ _pqueue_find libeay32.dll pqueue_find pqueue_free+ _pqueue_free libeay32.dll pqueue_free pqueue_insert/_pqueue_insert libeay32.dll pqueue_insertpqueue_iterator3_pqueue_iterator libeay32.dllpqueue_iterator pqueue_new) _pqueue_new libeay32.dll pqueue_new pqueue_next+ _pqueue_next libeay32.dll pqueue_next pqueue_peek+ _pqueue_peek libeay32.dll pqueue_peek pqueue_pop) _pqueue_pop libeay32.dll pqueue_pop pqueue_print- _pqueue_print libeay32.dll pqueue_print pqueue_size+ _pqueue_size libeay32.dll pqueue_sizeprivate_AES_set_decrypt_keyK_private_AES_set_decrypt_key libeay32.dllprivate_AES_set_decrypt_keyprivate_AES_set_encrypt_keyK_private_AES_set_encrypt_key libeay32.dllprivate_AES_set_encrypt_keyprivate_RC4_set_key;_private_RC4_set_key libeay32.dllprivate_RC4_set_keys2i_ASN1_INTEGER5_s2i_ASN1_INTEGER libeay32.dlls2i_ASN1_INTEGERs2i_ASN1_OCTET_STRING?_s2i_ASN1_OCTET_STRING libeay32.dlls2i_ASN1_OCTET_STRING sk_deep_copy- _sk_deep_copy libeay32.dll sk_deep_copy sk_delete' _sk_delete libeay32.dll sk_delete sk_delete_ptr/_sk_delete_ptr libeay32.dll sk_delete_ptrsk_dup!_sk_dup libeay32.dllsk_dup sk_find#_sk_find libeay32.dllsk_find sk_find_ex) _sk_find_ex libeay32.dll sk_find_ex sk_free#_sk_free libeay32.dllsk_free sk_insert' _sk_insert libeay32.dll sk_insert sk_is_sorted- _sk_is_sorted libeay32.dll sk_is_sortedsk_new!_sk_new libeay32.dllsk_new sk_new_null+ _sk_new_null libeay32.dll sk_new_nullsk_num!_sk_num libeay32.dllsk_numsk_pop!_sk_pop libeay32.dllsk_pop sk_pop_free+ _sk_pop_free libeay32.dll sk_pop_free sk_push#_sk_push libeay32.dllsk_pushsk_set!_sk_set libeay32.dllsk_setsk_set_cmp_func3_sk_set_cmp_func libeay32.dllsk_set_cmp_func sk_shift% _sk_shift libeay32.dllsk_shift sk_sort#_sk_sort libeay32.dllsk_sort sk_unshift) _sk_unshift libeay32.dll sk_unshift sk_value% _sk_value libeay32.dllsk_value sk_zero#_sk_zero libeay32.dllsk_zero string_to_hex/_string_to_hex libeay32.dll string_to_hexv2i_ASN1_BIT_STRING;_v2i_ASN1_BIT_STRING libeay32.dllv2i_ASN1_BIT_STRINGv2i_GENERAL_NAME5_v2i_GENERAL_NAME libeay32.dllv2i_GENERAL_NAMEv2i_GENERAL_NAMES7_v2i_GENERAL_NAMES libeay32.dllv2i_GENERAL_NAMESv2i_GENERAL_NAME_ex;_v2i_GENERAL_NAME_ex libeay32.dllv2i_GENERAL_NAME_exmblN"Vw.8B_CMAC_CTX_get0_cipher_ctx!l _DIRECTORYSTRING_it!_EVP_aes_128_ctr!#_KRB5_TICKET_it!'_OCSP_request_verify!d, _PKCS7_sign!'4_X509_STORE_add_cert!D_X509_TRUST_add!XE_d2i_ASN1_UINTEGER!K_CMS_unsigned_get0_data_by_OBJW_d2i_RSA_PUBKEY_bioN_ENGINE_register_all_RSA_GENERAL_NAME_set0_value&_i2v_ASN1_BIT_STRING"U _PBEPARAM_new-_PEM_read_bio_PKCS8. _PKCS1_MGF1 2_SHA256|7_sk_new5V_X509_ATTRIBUTE_dup?_X509_CRL_set_versionR@9cvY*CkN_AES_cfb1_encrypt!'_CRYPTO_free_locked!z_CRYPTO_nistcts128_encrypt!_ENGINE_get_DSA!H_EVP_des_ede3_cbc!!%_KRB5_CHECKSUM_it!G'_PEM_ASN1_write!- _RC4_options!5_SXNET_get_id_asc!8_X509_REQ_set_pubkey!QC_a2i_ASN1_ENUMERATED!J_d2i_X509_CRL_INFO!O_get_rfc2409_prime_1024!O_i2d_PKEY_USAGE_PERIOD!S_i2d_X509_AUX!|T_ASN1_STRING_TABLE_cleanupn_OCSP_BASICRESP_new) _PEM_read_NETSCAPE_CERT_SEQUENCEI._PKCS12_add_friendlyname_uni:1_O2&@kw"_CMS_RecipientInfo_kari_set0_pkey!> _EC_KEY_clear_flags!l_ERR_get_implementation!_RSA_verify_PKCS1_PSS_mgf1!#7_TS_REQ_get_ext_by_critical!9_d2i_ECPrivateKey_fp!L_i2d_KRB5_PRINCNAME!$R_ACCESS_DESCRIPTION_new_BN_RECP_CTX_init_d2i_PBE2PARAMM_ERR_get_implementation_EVP_aes_256_ofbO$_EVP_camellia_128_ofb$ _OBJ_new_nid/)_OCSP_SINGLERESP_get_ext+_RSA_padding_check_PKCS1_type_26_sk_dupV_TS_REQ_add_ext9_UI_dup_input_string<,VzL9qBb_ASN1_STRING_copy!_ERR_remove_thread_state!_EVP_PKEY_print_public!#_EVP_SealInit!v#_EVP_aes_128_gcm!#_EVP_aes_192_ctr!#_OCSP_onereq_get0_id!#,_PKCS7_add_attrib_smimecap!F3_X509_CRL_new!@_X509_POLICY_NODE_print!"B_d2i_ASN1_OBJECT!K_i2d_TS_TST_INFO!RT_asn1_add_errorJ_CMS_SignerInfo_cert_cmp _CMS_uncompress,_CRYPTO_cfb128_1_encrypt_EVP_SignFinal{#_get_rfc3526_prime_2048P_X509_issuer_name_hash_oldG_X509_NAME_delete_entryA";s^KS-i_ASN1_GENERALIZEDTIME_new!_ASN1_INTEGER_cmp!W_CRYPTO_THREADID_current!}_CRYPTO_ccm128_encrypt_ccm64! _MDC2_Update!'_OCSP_REQUEST_new!*_PEM_def_callback!-_PKCS8_pkey_set0!z4 _PROXY_CERT_INFO_EXTENSION_free!4_SEED_cbc_encrypt!*7_TS_TST_INFO_get_serial!;_X509_OBJECT_up_ref_count!B_d2i_PKEY_USAGE_PERIOD!wN_d2i_RSAPublicKey!N _BN_mul_wordE _BN_set_params _ERR_remove_thread_state_EVP_ripemd160%_GENERAL_SUBTREE_free&Vj*ar9zJ“_EVP_DecryptInit_ex!_OPENSSL_issetugid!-_PEM_write_ECPKParameters!o/_PEM_write_PKCS8_PRIV_KEY_INFO!/_d2i_AutoPrivateKey!.L_d2i_DSAPrivateKey!zL_d2i_PKCS8_bio!mN _pqueue_peek!U _ASN1_tag2str_d2i_Netscape_RSAqM_OCSP_REQUEST_get1_ext_d2ie*_RSA_private_encrypt6_RSA_set_method6 _SHA384_Init7 _sk_valuedV_TS_REQ_get_cert_req9!_X509_policy_node_get0_qualifiers8H_X509_print_ex_fprHB-Wd#pK7|_CMS_RecipientInfo_set0_pkey! _EVP_DecodeFinal!u_EVP_aes_192_gcm!$_PEM_read_X509_CRL!._PEM_read_bio!._PEM_write_bio_X509!0_UI_method_get_opener! =_X509V3_string_free!>_X509_NAME_ENTRY_it!HA_X509_STORE_CTX_set0_crls!D_d2i_OTHERNAME!M_d2i_X509_CRL_bio!O _sk_push!KV_ASN1_ENUMERATED_it_ASN1_primitive_free_d2i_X509_EXTENSIONO_i2d_ASN1_TIMEP_PKCS7_ISSUER_AND_SERIAL_new2_X509_CRL_INFO_freex?-R˰^:{qfG_ASN1_item_sign_ctx!_ENGINE_unregister_STORE!x_ERR_load_OBJ_strings!r_UI_method_set_flusher!.=_X509V3_EXT_print!>_X509_CRL_METHOD_new!? _CMS_add1_crl _d2i_ASN1_PRINTABLEK_d2i_ASN1_SET_ANYK_d2i_ASN1_type_bytesL_ENGINE_set_ECDHi_ERR_load_OBJ_stringsr_EVP_PKEY_bits!_i2d_TS_RESP_bioBT!_OCSP_REQUEST_get_ext_by_critical*_pqueue_insertU_RAND_query_egd_bytesI5_RSA_set_default_method6_X509_get_default_cert_dirɻ_BIO_f_cipher!._DSO_bind_var!_OCSP_response_status!,_SXNET_get_id_ulong!8_X509_REVOKED_set_serialNumber!C_d2i_OCSP_SINGLERESP!M _i2b_PVK_bio!HP _i2d_SXNETID!T _BF_set_key_d2i_OCSP_SERVICELOCM _DSA_freei_EVP_add_alg_module#_EVP_OpenFinaln _EVP_PKEY_typeR#_i2d_KRB5_AUTHENTR _PKCS7_stream@4 _sk_deep_copyV_TS_RESP_CTX_set_accuracyc:_X509_REVOKED_get_ext_d2iC_X509at_add1_attr_by_txt)I_X509at_get0_data_by_OBJ6I])3jJDS_EVP_PKEY_get0!"_EVP_get_digestbyname!%_KRB5_AUTHENT_it!6'_PEM_write_PKCS8PrivateKey_nid!/_SSLeay!a8_X509_print_fp!xH_i2d_TS_RESP_fp!GT_CRYPTO_cts128_decrypt(_EC_POINT_set_compressed_coordinates_GFp_ERR_set_implementation,_EVP_PKEY_verify_recover_initi#_KRB5_ENCDATA_new^'_PKCS7_to_TS_TST_INFOE4_TS_VERIFY_CTX_init<_X509at_get_attr_countPI(]?ypUKc_CMS_get1_crls! _ENGINE_get_digests!*_ENGINE_set_load_ssl_client_cert_function!+_SRP_Verify_B_mod_N!;8_i2d_PUBKEY_bio!S _BN_get_word _BN_swap _EC_GROUP_get_asn1_flag_EVP_EncodeInit_PKCS12_MAC_DATA_free0_TS_CONF_set_serialF9_X509_CRL_INFO_it~?;wF0Ǽ\Qjܘ'_ASN1_NULL_it!_ASN1_item_d2i_bio!S_BN_clear_free! _EVP_PKEY_paramgen!"_NETSCAPE_SPKI_new!(_OCSP_REQ_CTX_http!*_OSSL_DES_version!I-_PKCS7_SIGNER_INFO_sign!3_X509_set_subject_name!H_d2i_KRB5_AUTHDATA!M_d2i_OCSP_CERTSTATUS!M_ASN1_STRING_set _BN_CTX_init"_CONF_set_default_methodH_d2i_CERTIFICATEPOLICIES;L_d2i_X509_CERT_PAIR|O_EVP_camellia_192_cfb128$ _EVP_sha512&_KRB5_AUTHDATA_it'_OCSP_basic_add1_cert+_sk_num>VDf7*Tn\_CRYPTO_push_info_!_POLICY_MAPPING_new!4_UI_add_verify_string!k<_UI_dup_verify_string!<_X509_EXTENSION_get_critical!@ _asn1_ex_i2c! K_i2d_PKCS12_bio!R _i2d_TS_REQ!/T_ASN1_TYPE_set_int_octetstring|_BUF_MEM_grow_clean _EVP_CIPHER_CTX_init_EVP_PKEY_decrypt_init!_EVP_PKEY_delete_attr!_EVP_PKEY_print_public#_OBJ_NAME_cleanup( _OCSP_ONEREQ_get_ext_by_critical!*_RSA_get_method76_TS_RESP_get_token:_X509_CRL_verifyh@ţ)2KaTiwC:_BN_GF2m_mod_sqrt!_BN_RECP_CTX_free!_BN_mask_bits! _EVP_sha512!&_PEM_read_CMS!. _RC2_set_key!5_X509_print_ex!mH_i2d_PKCS7_ENC_CONTENT!R _pqueue_free!U_BN_X931_derive_prime_ex_CRYPTO_THREADID_current}_d2i_KRB5_AUTHDATAM _DSA_do_sign[_EVP_des_ede3_cfb1'%_EVP_des_ede3_cfb83%_PKCS7_ATTR_VERIFY_itQ2_TS_MSG_IMPRINT_newz9_X509_STORE_CTX_set_verify_cbD4Zk@Ou'b$_CRYPTO_get_dynlock_create_callback!_ERR_load_CONF_strings!+_EVP_PKEY_get0_asn1!"_EVP_aes_128_cbc_hmac_sha1!#_OCSP_sendreq_nbio!, _RC2_encrypt!5_SEED_decrypt!67_SMIME_read_CMS!7_TS_STATUS_INFO_new!;_TS_TST_INFO_get_accuracy!?;_X509V3_add1_i2d!4>_X509_STORE_get1_certs!E_X509at_get_attr_by_OBJ!II_d2i_DSAPublicKey!L_i2d_ASN1_GENERALIZEDTIME!P_i2d_PrivateKey_bio!S_i2d_ECPKParametersQ _i2d_TS_RESP=T_OCSP_CERTSTATUS_new)Zyrh1 (9QE_CRYPTO_realloc_clean! _MDC2_Final!'_PKCS7_encrypt!3 _RC4_set_key!5_UI_add_error_string!M<_UI_dup_error_string!<_X509_NAME_new!A_d2i_PKCS8PrivateKey_fp!PN_BIO_socket_nbio _BUF_strdup _ENGINE_load_rdrand_ENGINE_unregister_RANDj_NCONF_dump_fp (_PEM_write_bio_ASN1_stream/_PKCS12_SAFEBAGS_it1_X509_CERT_PAIR_it]?_X509_EXTENSION_it@_X509_REVOKED_freeC_X509_STORE_CTX_get1_issuer4D_X509_STORE_CTX_set_chainD3'<^ה|SjI _BN_lshift! _Camellia_cbc_encrypt!e_DES_read_2passwords!C_DH_set_method!_PKCS7_simple_smimecap!94_TS_TST_INFO_new!;_X509_ATTRIBUTE_it!%?_X509_STORE_add_crl!D _X509_get_default_cert_file_env!RG_X509_get_issuer_name!G_X509_set_version!H_b2i_PrivateKey!)K_d2i_EC_PUBKEY!L _BN_lshift1 _ENGINE_get_RSA]_ERR_print_errors_cb _i2d_PKCS12R_i2d_PKCS8PrivateKey_fpLS_OTHERNAME_cmpU-_PKCS7_RECIP_INFO_new2_RSA_PKCS1_SSLeay5Vh'J6_x$_CRYPTO_set_locked_mem_ex_functions!_DH_generate_parameters_ex!%_ENGINE_register_all_pkey_asn1_meths!%_EVP_PKEY_asn1_get0!W!_PEM_SealFinal!-_X509_CRL_cmp!?_X509_STORE_CTX_set_ex_data!D_i2d_PKCS12_MAC_DATA!R _i2d_SXNET! T_v2i_GENERAL_NAME_ex!V _ASN1_sign_BF_ofb64_encrypt_BN_mod_add_quick _CMS_unsigned_get_attr_countv _DES_enc_read_i2d_ASN1_ENUMERATED~P _lh_num_itemsU_OCSP_RESPONSE_it+_X509V3_EXT_print_fp!>Xk4NdC)w_Camellia_encrypt!_DSO_METHOD_dlfcn!_ECDH_get_ex_data!_EVP_CIPHER_CTX_set_flags!_GENERAL_NAME_free!c&_OCSP_ONEREQ_it!0*_i2d_AUTHORITY_KEYID! Q _i2d_PKCS7!R_i2d_POLICYQUALINFO!S_asn1_enc_saveK_EVP_camellia_128_ecb$_EVP_PKEY_meth_set_init"_HMAC_CTX_set_flags&_i2d_ASN1_UTCTIMEP_i2d_RSAPublicKey_fpS_PKCS12_pack_authsafes1_TS_CONF_set_signer_keyS9_X509_get_pubkeyG_X509_STORE_CTX_get_chain;D_X509V3_EXT_free=֙tRd\G(:".4_ASN1_PRINTABLESTRING_new!7 _BIO_pop!_BN_sqr! _BN_sub! _DH_new!_ERR_lib_error_string!_OCSP_check_nonce!+_PKCS12_gen_mac!v1 _SHA256_Init!7_X509_VERIFY_PARAM_get_count!E_a2i_ASN1_INTEGER!J_d2i_RSAPublicKey_bio!N_ACCESS_DESCRIPTION_it_ASN1_item_digest__BN_BLINDING_get_thread_id_d2i_PBKDF2PARAMM_ERR_print_errors_fp_EVP_CIPHER_asn1_to_param_EVP_PKEY_set1_DSA##_KRB5_PRINCNAME_new'_NETSCAPE_SPKI_sign(rY0P'iz>G_DES_xcbc_encrypt!s_EVP_des_cfb8! %_EVP_idea_ofb!%_TS_REQ_get_msg_imprint!9_asn1_enc_save!K_d2i_DHxparams!_L_asn1_enc_initJ_ASN1_TIME_to_generalizedtimeG_BN_reciprocal _CRYPTO_freeo_i2d_POLICYINFOS_OPENSSL_stderr3-_SSLeay_versione8_X509_check_private_keyF_X509_REQ_add1_attrB_X509_VERIFY_PARAM_add0_tableE^A#2}TLn _BUF_strndup! _EC_KEY_new!_ENGINE_get_ctrl_function!_TS_MSG_IMPRINT_print_bio!9_TS_RESP_CTX_free!J: _TXT_DB_read!3<_X509V3_EXT_free!=_X509_REQ_add_extensions_nid!B__ossl_old_des_cfb_encrypt!I_AES_ecb_encrypt>_ASN1_item_free _BN_dec2bn0 _CRYPTO_set_mem_ex_functionsD_EVP_CIPHER_get_asn1_iv$ _FIPS_mode<&_KRB5_AUTHENTBODY_it$'_KRB5_ENCKEY_newo'_OCSP_check_validity+_OCSP_ONEREQ_new5*_OCSP_REQUEST_get_extl*_PEM_write_DSA_PUBKEYc/<\!1EiPy_DSO_get_loaded_filename!*_EVP_CIPHER_CTX_get_app_data!_PEM_read_DHparams!._PKCS8_encrypt!p4_RAND_pseudo_bytes!C5_UI_get0_test_string!<_X509V3_set_conf_lhash!>_X509_NAME_add_entry_by_OBJ!oA_asn1_get_choice_selector!K_i2d_PKCS8PrivateKey_nid_bio!SS_s2i_ASN1_OCTET_STRING!V_ASN1_NULL_new_ASN1_STRING_print_ex _BN_mod_word8 _CMS_RecipientInfo_kekri_get0_idG _CRYPTO_cts128_decrypt_block%_d2i_PKCS8PrivateKey_bioINEy<4hrS )__BN_is_prime_fasttest! _BN_kronecker! _CONF_get_section! _CRYPTO_lock!c_EC_KEY_print!_ERR_get_error_line_data!_X509_get_ext_count!G_hex_to_string!&P_AES_cfb8_encrypt- _CONF_load _EC_KEY_print_KRB5_CHECKSUM_itG' _PEM_dek_info-_RAND_file_name/5_RSA_padding_add_SSLv23}6 _TS_REQ_new9_UI_create_methodw<_X509V3_EXT_add_list=_X509v3_get_extbIn(4aOByۏX_AES_ige_encrypt!H_ASN1_item_ex_free!p_DIRECTORYSTRING_new!_PKCS12_item_decrypt_d2i!1_X509_NAME_ENTRY_free!4A_ASN1_bn_print _BN_pseudo_rand _CRYPTO_cbc128_decrypt_d2i_KRB5_PRINCNAMEBM_d2i_NETSCAPE_X509fM_d2i_POLICYQUALINFON_EC_GROUP_get_degree_ERR_get_err_state_table_EVP_camellia_256_cfb1$_EVP_camellia_256_cfb8$_EVP_PKEY_CTX_new_id _i2d_DIST_POINT_NAMEVQ_i2d_PROXY_POLICYS _OBJ_ln2nid+)_WHIRLPOOL_Final=_X509_CRL_match@"\7pJez+SB_ENGINE_get_default_ECDSA!_EVP_enc_null!v%_OCSP_CERTSTATUS_it!)_SXNET_add_id_asc!~8 _X509_VAL_it!E_ASN1_item_new_i2d_X509_CINFT_TS_REQ_get_ext9_X509_ocspid_print H_X509_REVOKED_itC _X509_VERIFY_PARAM_get0_peernameE/R}Ȣn'b>G_BIO_get_host_ip!~_BN_GF2m_mod_mul!k _DSA_up_ref!_EC_KEY_new_by_curve_name!_EVP_rc2_cfb64!%_KRB5_AUTHDATA_it!'_OCSP_BASICRESP_add1_ext_i2d!^)_X509V3_get_section!t>_X509_STORE_CTX_set0_param!D!_X509_VERIFY_PARAM_table_cleanup!qF _sk_pop_free!FV_BIO_debug_callback_CRYPTO_THREADID_cmpq _EVP_sha384&_ISSUING_DIST_POINT_it& _name_cmpU_OCSP_resp_findo,_PEM_read_RSAPrivateKeyn._PKCS7_ENC_CONTENT_freez2_TS_RESP_CTX_set_def_policy{:\<pQz&H.Ә_BIO_new_NDEF!_BIO_new_mem_buf! _BN_print_fp!~ _ENGINE_get_default_RAND!_ENGINE_load_dynamic!}_EVP_des_cfb1!%_EVP_des_ede3_cfb8!3%$_TS_CONF_set_clock_precision_digits!9_WHIRLPOOL_Final!=_X509V3_EXT_CRL_add_nconf!=_X509_STORE_CTX_set_trust!D_BF_cfb64_encryptv_CMS_dataFinalJ _CMS_get1_crls _DES_cbc_encrypt _DSO_ctrl_PEM_read_bio_ECPrivateKey._PEM_write_bio_Parameters0_X509_NAME_ENTRY_create_by_txt&A_X509_NAME_ENTRY_free4AVLb'm0}:_ASN1_item_digest!__BIO_dup_chain!_BUF_MEM_grow! _CMS_get1_certs! !_OCSP_ONEREQ_get_ext_by_critical!!*_OCSP_basic_sign!+_OCSP_id_issuer_cmp!,_X509V3_set_nconf!>_X509_REQ_check_private_key!B_X509_STORE_set_purpose!DE_i2d_TS_REQ_bio!3T_d2i_OCSP_BASICRESPwM_EC_POINTs_make_affine_ENGINE_register_DH _EVP_sha224&_OPENSSL_no_config'-_SHA_Transform7_X509_ALGORS_it>_X509_ATTRIBUTE_set1_object8?Aw,5iZQ_AES_ofb128_encrypt!M_ASN1_OCTET_STRING_set!_EVP_desx_cbc!e%_POLICYQUALINFO_new!4_RSA_sign_ASN1_OCTET_STRING!7_X509_CRL_free!?_X509_STORE_CTX_get1_chain!-D_X509_TRUST_set_default!E_X509_time_adj_ex!H_ASN1_INTEGER_geti _COMP_rle_EVP_CipherInit_exd_i2d_PKCS7_RECIP_INFO S_OCSP_ONEREQ_add1_ext_i2d)_SHAQ7_SRP_VBASE_get_by_user$8_UI_method_get_flusher=_X509_CRL_get_ext_d2i@_X509_PUBKEY_it;B_X509_SIG_freeC- Iy<fnX_ASN1_BIT_STRING_check!s_BASIC_CONSTRAINTS_new!j_CMS_unsigned_delete_attr!P_CRYPTO_cts128_decrypt!_ENGINE_register_complete!=_ENGINE_set_default_RAND! _MD4_Update!'_OCSP_ONEREQ_free!*_OCSP_REQUEST_free!_*_UI_set_method!i=__ossl_old_des_read_pw!dJ_d2i_ASN1_BIT_STRING!K_i2d_PKCS7_RECIP_INFO! S_i2v_GENERAL_NAMES!.U _BIO_snprintf{_CMS_signed_get_attr _X509_NAME_add_entry_by_txtvA_X509_STORE_CTX_get_error_depthQD_X509_to_X509_REQH2cNsXmB"_CONF_module_set_usr_data!_OCSP_SINGLERESP_delete_ext!o+_PKCS12_add_friendlyname_uni!:1_TS_MSG_IMPRINT_new!z9_X509_NAME_hash!A_X509_reject_clear!H_d2i_X509_ALGOR!aO_sk_dup!V_CMS_get1_ReceiptRequest _d2i_ACCESS_DESCRIPTION}K_d2i_X509_ALGORSfO_d2i_X509_ATTRIBUTEkO)_EC_POINT_set_Jprojective_coordinates_GFp$_ENGINE_register_all_pkey_asn1_meths%_i2a_ASN1_STRINGCP_KRB5_AUTHDATA_new'_NETSCAPE_CERT_SEQUENCE_free>(}qB,<[OΙf_BN_CTX_start!+_EVP_CIPHER_CTX_set_app_data!_EVP_CIPHER_CTX_set_padding! _EVP_dss!j%_OCSP_resp_find_status!t,_PEM_write_DSAparams!i/_RSA_X931_hash_id!5_TS_OBJ_print_bio!9_TS_TST_INFO_set_tsa!;_UI_new_method!T=_X509V3_EXT_cleanup!= _X509_dup!G_d2i_ASN1_NULL!K_d2i_OCSP_RESPBYTES!M_d2i_ASN1_T61STRINGK _DSA_OpenSSLL_EC_KEY_precompute_mult _ENGINE_free>_EVP_camellia_128_cfb128}$ _EVP_dss1n%_EVP_PKEY_CTX_set0_keygen_info U#bk,Gx;_CMS_signed_add1_attr_by_OBJ! _EC_GROUP_free!_ENGINE_set_ctrl_function!_PKCS12_MAKE_KEYBAG!0_PKCS7_SIGN_ENVELOPE_it!!3_PKCS7_sign_add_signer!+4_X509_CRL_dup!?_X509at_get_attr_count!PI_ASN1_BMPSTRING_new_BN_MONT_CTX_set _CMS_dataF _CMS_RecipientInfo_kari_get0_ctx _d2i_ASN1_SETK_EVP_des_ede3_cfb64-%_PEM_read_PKCS8_PRIV_KEY_INFO[._TS_TST_INFO_set_policy_id;_X509_ALGOR_set_md>_X509_REQ_set_subject_nameWCx<ۿ%QnH/g^_ASN1_unpack_string!+ _BN_free!J _KRB5_ENCKEY_it!j'_X509_issuer_name_hash!G_i2d_CMS_bio_stream!0Q_lh_node_stats!{U_ASN1_VISIBLESTRING_new_BN_GENCB_call0 _BN_set_bit _DES_is_weak_key_ENGINE_register_ECDSA_ERR_load_BUF_strings_EVP_des_cfb64%_EVP_PKEY_sizeM#_i2d_DSAPublicKeyoQ_i2d_TS_TST_INFORT _lh_doall_argjU"_OPENSSL_add_all_algorithms_noconf,_PBKDF2PARAM_it-_PEM_ASN1_write-_RSA_check_key 6_UI_method_get_opener =b>*kJy4V _CMAC_Update! _ENGINE_unregister_digests!_NCONF_load_bio!0(_OBJ_add_object!(_OCSP_SERVICELOC_new!H+_PEM_read_DSA_PUBKEY!)._SEED_cfb128_encrypt!07_SEED_set_key!L7__ossl_old_des_decrypt3!I_i2d_EC_PUBKEY_fp!Q_pqueue_insert!U_d2i_TS_ACCURACY O_EC_POINT_is_at_infinityj _EVP_sha256&_i2d_ASN1_TYPEP_i2d_OCSP_CERTID_R_i2d_X509_EXTENSIONT_NCONF_load_fp5(_OCSP_ONEREQ_get_ext_by_NID*_OCSP_SINGLERESP_get1_ext_d2i|+_PKCS12_createf1ݨ~^6Ai"M+sٓ_ASN1_TYPE_get_octetstring!f_ENGINE_up_ref!_EVP_PKEY_CTX_new! _EVP_des_ede3_cfb1!'%_PKCS12_decrypt_skey!k1_TS_RESP_CTX_add_failure_info!.:_X509_REQ_print_fp!CC_X509_get1_email!+G_X509_ocspid_print! H_ASN1_OCTET_STRING_it_d2i_ASN1_TYPEK_ECDSA_SIG_new_ERR_load_ERR_stringsf_EVP_PKEY_set1_EC_KEY)#_i2c_ASN1_BIT_STRINGYP_PEM_write_RSAPrivateKey/_RAND_pseudo_bytesC5_RC45_RSA_verify_ASN1_OCTET_STRING7_SHA512_Transform7 _sk_is_sorted0Vg+9AߨNs{Z_ASN1_add_oid_module!_BN_GF2m_mod_inv_arr!e_BN_GF2m_mod_solve_quad!v _CMS_stream!(_OCSP_CERTSTATUS_free!)_OCSP_ONEREQ_get_ext! *_RAND_query_egd_bytes!I5_TS_REQ_get_cert_req!9 _d2i_PKCS12!M_i2d_ECPrivateKey_bio!Q_i2d_NOTICEREF!NR_i2d_OCSP_RESPBYTES!R_ASN1_item_sign_ctx_BN_to_ASN1_ENUMERATED _CRYPTO_THREADID_cpyw_EC_KEY_new_by_curve_name_ENGINE_load_ssl_client_cert_ENGINE_set_default_DSA_OCSP_check_nonce+E~LriZ*9_ASN1_TYPE_free!T_CRYPTO_gcm128_encrypt!_EVP_PKEY_get_attr_by_NID!*"_OPENSSL_ia32cap_loc!- _PKCS7_new!3_X509_CRL_get_ext_count!?__ossl_old_des_cbc_encrypt!I_sk_delete_ptr!V_BIO_fd_should_retryL_BN_MONT_CTX_free_CMS_SignerInfo_get0_signature _HMAC_CTX_cleanup& _PKCS7_ctrl3_SRP_Calc_server_key 8_X509_load_cert_crl_fileG_X509_policy_node_get0_policy0H_X509_VERIFY_PARAM_set1_name2Fy@_M-m!7_CMS_add0_recipient_key! _EC_GFp_mont_method!b_EVP_aes_128_ecb!#_HMAC_CTX_copy!&_OCSP_SERVICELOC_free!<+ _PKCS7_add0_attrib_signing_time!/3_POLICY_CONSTRAINTS_free!4_TS_STATUS_INFO_dup!;_X509_VAL_new!E_X509_VERIFY_PARAM_get_flags!E_X509at_add1_attr_by_OBJ!"I_ASN1_item_ex_d2ij_BIO_find_typeR _BIO_puts&_GENERAL_NAMES_newQ& _PBEPARAM_it-_PKCS7_get_smimecap3_SXNET_add_id_INTEGERx8_X509_REQ_to_X509oC_X509_set_versionHC'}Wb.t_BIO_new_connect!_BN_GF2m_mod_inv!` _BN_asc2bn!'_CMS_RecipientInfo_ktri_get0_signer_id!h %_EC_POINT_get_affine_coordinates_GFp!V_X509_REQ_print_ex!=C _X509_STORE_CTX_get_error_depth!QD_d2i_ASN1_SET!K_i2d_OCSP_ONEREQ!oR_i2d_re_X509_tbs!T_BIO_vsnprintf_OPENSSL_uni2ascD-_PKCS12_MAKE_SHKEYBAG0 _pqueue_popU_RAND_get_rand_method45_RSA_padding_add_PKCS1_PSS^6_SMIME_write_PKCS77_X509_ATTRIBUTE_count>_X509_ATTRIBUTE_get0_type?zV @b5,Km_EC_GROUP_get_seed_len!_EVP_MD_CTX_cleanup! _PEM_do_header!._PEM_read_X509_AUX!._UI_get0_user_data!<_X509_check_issued!F_d2i_ASN1_type_bytes!L_d2i_KRB5_AUTHENT!%M_CRYPTO_gcm128_decrypt_ENGINE_get_default_ECDH_EVP_camellia_128_cbcp$_EVP_PKEY_set1_DH# _lh_doallfU_PKCS12_add_safesS1_RIPEMD160_Init5_TS_REQ_set_cert_req:_X509_policy_tree_freeAH_X509_trust_clearH€b9Cr,W!L _BN_usub! _DSA_do_sign![_ENGINE_get_digest!_ENGINE_set_default_DH!_EVP_aes_192_ecb!$_KRB5_APREQ_it!'_OCSP_REQINFO_free!:*_OCSP_REQ_CTX_new!*_X509_ATTRIBUTE_set1_object!8?_X509_CRL_get0_by_serial!?_X509_STORE_set_depth!0E_X509_policy_node_get0_parent!(H_X509_policy_tree_level_count!aH_d2i_PKCS7_SIGNER_INFO!1N_lh_new!wU_BIO_new_accept_ENGINE_get_digests_ENGINE_load_builtin_enginesn_ENGINE_register_all_ECDSA"o^=FP/}_ASN1_GENERALIZEDTIME_set!!_BIO_sock_should_retry!_EVP_CIPHER_CTX_rand_key!_EVP_SignFinal!{#_NCONF_free_data!(_OCSP_request_set1_name!W,_PROXY_CERT_INFO_EXTENSION_new!4_RSA_get_default_method!%6_X509V3_EXT_REQ_add_conf!=_X509_CRL_set_lastUpdate!=@__ossl_old_des_cfb64_encrypt!I_ASN1_OBJECT_it&_CMS_RecipientInfo_ktri_get0_signer_idh _d2i_X509_REQO_ENGINE_get_pkey_methsF_EVP_CIPHER_CTX_cipher_EVP_CIPHER_param_to_asn1= _HMAC_Init&6]EQ{*l_ASN1_item_dup!e_ERR_load_X509V3_strings!_EVP_PKEY_meth_free!i"_EVP_PKEY_meth_set_verify!"_OCSP_url_svcloc_new!,_RSA_OAEP_PARAMS_new!5_X509_OBJECT_free_contents!A_X509_STORE_CTX_get_chain!;D_d2i_TS_ACCURACY! O_d2i_TS_RESP_bio!7O _BIO_push"_d2i_EC_PUBKEY_fpL_EC_GROUP_set_seed`_OCSP_REQ_CTX_nbio*_PEM_write_bio_DSAparams(0_PEM_write_bio_X509_CERT_PAIR0_SMIME_read_CMS7_UI_set_ex_datad=_USERNOTICE_new}=_X509_PURPOSE_get_countBbU*?r5|Ik_BIO_new_dgram!_DES_ede3_cfb64_encrypt!_EC_KEY_set_group!_EVP_EncodeFinal!_EVP_VerifyFinal!#_PKCS7_add_signature!l3_X509_PURPOSE_cleanup!WB_d2i_X509_AUX!qO _lh_stats!U_BIO_set_callbackZ_d2i_ESS_ISSUER_SERIALL_EDIPARTYNAME_it _EVP_ecdsar%_i2d_RSA_PSS_PARAMSS_i2s_ASN1_ENUMERATED_TABLE U_TS_TST_INFO_set_serial;_X509_NAME_hashA _X509_OBJECT_retrieve_by_subjectB_X509_PURPOSE_get0_namecB_X509_supported_extensionHgr(O;DY~_ASN1_BMPSTRING_it!_BIO_f_nbio_test!7"_ENGINE_get_pkey_asn1_meth_engine! _ERR_get_error!_ESS_CERT_ID_free!C_EVP_DecodeInit!z_EVP_PKEY_meth_set_sign!"_X509_print_ex_fp!rH_c2i_ASN1_BIT_STRING!gK_d2i_PKCS7_SIGN_ENVELOPE!8N_ASN1_ENUMERATED_free _BIO_s_nullM _BN_div_recp8 _ENGINE_get_finish_function_OBJ_add_object(_PKCS7_SIGN_ENVELOPE_new(3 _SXNETID_freej8_TS_CONF_set_digests,9_X509_STORE_CTX_initqD_X509v3_get_ext_count|I4qM~eB+\_ASN1_FBOOLEAN_it!_ASN1_VISIBLESTRING_it!_DSA_do_verify!`_EC_GROUP_get0_generator!_EDIPARTYNAME_free!_ERR_peek_error_line_data!_EVP_cast5_ecb!$_PKCS7_ENVELOPE_free!2_PKCS7_RECIP_INFO_set!2_TS_REQ_set_cert_req!:_X509V3_add_value_uchar![>_i2d_PublicKey!S _AES_encryptC _CMS_encrypt~ _CONF_set_nconfO_d2i_ESS_SIGNING_CERTL_EVP_CIPHER_CTX_flags_EVP_DigestUpdate_EVP_PKEY_signB#_KRB5_APREQ_new'_PEM_read_bio_PKCS7.@LjxZ)3 _BN_mod_word!8 _Camellia_ctr128_encrypt!_DISPLAYTEXT_it!_ECDH_get_ex_new_index!_EC_GROUP_method_of! _EC_GROUP_set_curve_GFp!B_ENGINE_set_finish_function!_EVP_MD_CTX_clear_flags! _EVP_PKEY_CTX_free! _EVP_PKEY_meth_set_cleanup!|"!_PEM_read_NETSCAPE_CERT_SEQUENCE!I._PEM_write_bio_RSAPublicKey!0_TS_VERIFY_CTX_free!; _X509_cmp!F_CMAC_CTX_cleanup\ _d2i_KRB5_APREQBODYM_i2d_PKCS12_SAFEBAGR_PEM_read_bio_RSA_PUBKEY/5agyRA(_BIO_s_accept!._ENGINE_register_DSA!_PKCS7_ENC_CONTENT_new!2_RSA_generate_key_ex!6_X509_STORE_set_lookup_crls_cb!_d2i_PKCS7_bio!?N_BIO_set_flagsp_d2i_NOTICEREFlM_d2i_X509_CRL_bioO_ENGINE_set_destroy_function_i2d_RSAPrivateKey_bioS_PKCS12_SAFEBAG_it1_X509_REQ_INFO_itB_X509_VERIFY_PARAM_add0_policyEW=$qg/K痾z _ASN1_i2d_fp!I_CMAC_CTX_new!s _CRYPTO_ccm128_aad!_Camellia_ofb128_encrypt!_EC_POINT_is_at_infinity!j_EVP_PKEY_asn1_copy!>!_PEM_write_bio_PKCS7_stream!T0_PKCS12_newpass!1_RSA_print_fp!6_X509_REVOKED_add_ext!C_X509_VERIFY_PARAM_set_flags!JF_asn1_enc_init!J_i2d_DIRECTORYSTRING!FQ_i2d_DSAPublicKey!oQ _lh_doall!fU_BN_mod_lshift _BN_mod_mul_reciprocal _d2i_RSA_PUBKEY_fpN _d2i_X509_SIGO_OCSP_request_is_signedB,f|\'s4N@_ASN1_template_free! _BN_CTX_free!_ECDSA_METHOD_set_name!_EC_GFp_nist_method!h_EC_GROUP_set_curve_name!I_ERR_load_ECDSA_strings!R_RAND_load_file!:5_TS_RESP_verify_token!;_d2i_PUBKEY_fpN_i2a_ASN1_OBJECT>P_ISSUING_DIST_POINT_new&_OTHERNAME_newd-_PEM_read_bio_RSAPrivateKey/_UI_get0_output_string<_X509_email_freeG_X509_LOOKUP_free@_X509_STORE_CTX_set_defaultD~CWvm(Oדa5 _BIO_printf!_BN_BLINDING_invert_ex!_Camellia_ecb_encrypt!_EVP_CIPHER_set_asn1_iv!D_GENERAL_NAMES_free!E& _TS_RESP_dup!:_TS_TST_INFO_dup!.;_d2i_ASN1_BMPSTRING!K_string_to_hex!lV _ASN1_i2d_fpI_ASN1_INTEGER_cmpW_ASN1_mbstring_copy_CMS_unsigned_add1_attr1_EVP_CIPHER_CTX_test_flags_EVP_PKEY_CTX_get_keygen_info _PKCS7_RECIP_INFO_it2_RSA_get_ex_new_index16_TS_OBJ_print_bio9_X509_REQ_get_attr_by_NIDC_X509_REQ_get_attr_countC2J:vh&Y_COMP_CTX_new!_CRYPTO_128_wrap!l_OCSP_ONEREQ_add_ext!) _RC2_decrypt!y5_TS_RESP_CTX_set_def_policy!{:_X509_issuer_name_hash_old!G_d2i_ASN1_PRINTABLESTRING!K_i2a_ACCESS_DESCRIPTION!+P_i2t_ASN1_OBJECT!U_ASN1_UTCTIME_free_ASN1_UTF8STRING_free_CMS_SignerInfo_sign _CRYPTO_get_lock_name_ENGINE_register_ciphers6_OCSP_response_get1_basic,_PKCS7_SIGN_ENVELOPE_free3_RSA_OAEP_PARAMS_it5 _X509_CRL_cmp?_X509_PURPOSE_get_by_snamexBLXc?q2*_ASN1_item_i2d_bio!_CRYPTO_get_ex_data! _ENGINE_add! _ENGINE_register_ECDH!_EVP_CIPHER_block_size! _OPENSSL_strcasecmp!8-_PEM_read_X509_REQ!._X509_PURPOSE_get0_sname!jB__ossl_old_des_ncbc_encrypt!J_d2i_DISPLAYTEXT!jL_BIO_new_PKCS7 _d2i_X509_VALO_EVP_aes_256_xtsZ$_i2d_OCSP_SIGNATURER_OCSP_BASICRESP_add1_ext_i2d^) _PEM_read.!_UI_method_get_prompt_constructor=$_X509_policy_tree_get0_user_policiesXH_X509_REQ_delete_attrBZh:F|ȆsP3)_BN_mod_inverse! _CRYPTO_THREADID_cpy!w_DH_get_1024_160! _DSA_sign!_HMAC_CTX_set_flags!&_OCSP_resp_get0!{,_X509V3_set_ctx!>_CONF_module_get_usr_data_d2i_ECPKParametersL_d2i_PKCS7_bio?N_DES_pcbc_encrypt3 _EC_GROUP_new_ENGINE_set_default_ciphers_PEM_write_RSAPublicKey/_PKCS7_get_signer_info3_PROXY_CERT_INFO_EXTENSION_new4_TS_REQ_set_msg_imprint:_X509_CERT_AUX_itE?_X509_CRL_check_suiteb?_X509at_get_attr_by_NIDBI0f}KV= s潒ئ_BIO_get_ex_new_index!x_CMS_add0_recipient_password! _CONF_imodule_get_name!_CONF_modules_load_file!6_ECDSA_sign_setup!2_TS_RESP_CTX_set_status_info!:_d2i_ESS_SIGNING_CERT!L_d2i_X509_CRL_fp!O_i2d_RSAPrivateKey_fp!S _AES_decrypt9_ASN1_INTEGER_dup]_BIO_method_name _CMS_decryptY _CMS_RecipientInfo_set0_keyr _CRYPTO_set_add_lock_callback_d2i_ASN1_IA5STRINGK_ENGINE_get_static_state[_EVP_camellia_256_cfb128$_i2d_CMS_bio_stream0Q_U6Fr|+i_ASN1_STRING_to_UTF8!_PEM_X509_INFO_read!-_PKCS7_SIGNED_free!2_PKCS7_add_signed_attribute!r3_X509V3_add_value_bool_nf!N>_ASN1_BOOLEAN_it_i2d_GENERAL_NAMEQ_i2d_TS_REQ_fp8T_OCSP_CERTID_dup)_PEM_read_bio_DSA_PUBKEY. _pqueue_newU_X509_ALGOR_set0> _X509_CINF_itn?_X509_NAME_ENTRY_set_dataTA_X509_PKEY_newBi.TrF`{ :_ERR_load_RAND_strings!_ISSUING_DIST_POINT_new!&_KRB5_PRINCNAME_free!t'_OCSP_RESPBYTES_free!*_PEM_read_bio_PrivateKey!/_PEM_write_DHparams!P/_PKCS7_verify!K4_SHA224_Update!w7_bn_mul_words!XK_DISPLAYTEXT_new_OCSP_RESPID_free+$_OCSP_SINGLERESP_get_ext_by_critical+_X509_EXTENSION_get_critical@Xc/ku'L< _AES_encrypt!C_BIO_set_tcp_ndelay!u _CMS_encrypt!~ _CMS_set1_eContentType! _CRYPTO_get_locking_callback!'_NETSCAPE_SPKI_free!t(_PEM_ASN1_read_bio!- _ASN1_i2d_bioD_ASN1_TIME_print7_ASN1_TYPE_get_int_octetstring^_d2i_PKCS7_DIGESTN_DES_ofb64_encrypt#_DSO_convert_filename _EVP_PKEY_derive!_KRB5_TICKET_it'_OBJ_NAME_do_all( _OPENSSL_init -_PKCS12_MAKE_KEYBAG0 _SHA1_Init[7_X509_ATTRIBUTE_get0_data?_X509at_get_attr=ILX |n=*e4_EC_KEY_set_asn1_flag!_EC_POINT_invert!e_EVP_EncodeInit!_NOTICEREF_it!(_OCSP_BASICRESP_delete_ext!m)_OCSP_RESPONSE_free!+_PKCS12_MAKE_SHKEYBAG!0_SHA384_Update!7_SRP_create_verifier_BN!N8_X509_CRL_add0_revoked!?_X509_NAME_free!A_X509_STORE_get_by_subject!E_BN_GF2m_arr2poly: _BN_is_prime _BUF_MEM_free _Camellia_cbc_encrypte_CMS_RecipientInfo_kekri_id_cmpO _d2i_DIST_POINT_NAMEtL_EVP_DigestSignInit_EVP_PKEY2PKCS8 hqһC5^R)~_BIO_get_port!_CMS_SharedInfo_encode! _EC_POINT_method_of!}_ENGINE_register_all_DH!_ENGINE_unregister_ciphers!_GENERAL_SUBTREE_it!&_PEM_write_PKCS8!/_BIO_new_dgram_DIST_POINT_set_dpnameE_EVP_PKEY_meth_set_cleanup|"_idea_cfb64_encrypt:U_OPENSSL_memcmp"-_PKCS12_unpack_authsafes1_POLICY_MAPPING_free4_SEED_cbc_encrypt*7_UI_method_set_flusher.= _X509_VERIFY_PARAM_set_hostflagsRFhH^sU?-_BN_RECP_CTX_new!_CRYPTO_ccm128_decrypt_ccm64! _EC_GROUP_get_pentanomial_basis!_ERR_put_error!_KRB5_AUTHENTBODY_free!'_OTHERNAME_it!_-_PEM_write_PKCS7!/_PROXY_POLICY_new! 5_UI_add_input_string!_<_UI_dup_input_string!<_X509_STORE_CTX_set_default!D_d2i_PKCS7_fp!DN_i2d_KRB5_APREQBODY!Q_ASN1_IA5STRING_newQ_CRYPTO_push_info__d2i_ASN1_UINTEGERK_ECDSA_get_ex_new_index_ERR_load_PKCS7_strings_EVP_get_digestbyname%'6Cm_R~ _BIO_nread!_BN_BLINDING_thread_id!_ENGINE_pkey_asn1_find_str!_TS_TST_INFO_ext_free!3;_X509_STORE_CTX_set_chain!D_X509_STORE_set1_param!!E_X509at_get_attr_by_NID!BI_ASN1_UNIVERSALSTRING_to_string_BIO_fd_non_fatal_errorE _BIO_nread0 _BIO_nwrite _i2a_ASN1_ENUMERATED2P_i2d_RSAPrivateKey_fpS_OCSP_REQUEST_add1_ext_i2dK*.asj|7S D_DSA_get_ex_new_index!_EC_KEY_get0_private_key!_EC_POINTs_mul!_ENGINE_register_ECDSA!_ENGINE_register_all_ECDH!_ESS_ISSUER_SERIAL_free!U_EVP_MD_flags!Y _OCSP_CRLID_it!)_PKCS12_create!f1_i2d_Netscape_RSA!SR_ASN1_INTEGER_newt_ASN1_item_dupe_d2i_OCSP_RESPBYTESM_d2i_PKCS8PrivateKey_fpPN_i2b_PublicKey_bioSP_NAME_CONSTRAINTS_check'_OCSP_REQUEST_free_*_RC2_cbc_encryptn5_SRP_Verify_B_mod_N;8_SXNET_get_id_ulong8_UI_ctrl}<BscJU\-5"m_EVP_CIPHER_CTX_key_length!_EVP_PKEY_CTX_ctrl! _PKCS12_free!q1_PKCS7_RECIP_INFO_free!2 _RSA_up_ref! 7_d2i_ASN1_INTEGER!K _sk_shift!XV _a2i_ipaddJ_ASN1_STRING_copy _BN_nnmodg _CRYPTO_set_locking_callback,_d2i_EDIPARTYNAMEL _DSA_SIG_newV_EVP_CIPHER_CTX_cleanup_EVP_MD_CTX_clear_flags _i2d_PKCS7_bio&S_i2d_PKCS8PrivateKeyInfo_bio6S_NOTICEREF_new(_OCSP_CERTID_new)_OCSP_ONEREQ_get_ext_by_OBJ*_PEM_read_bio_PUBKEY._$.T8kFy _BIO_new!_CRYPTO_gcm128_aad!_DH_generate_key!_DSA_get_ex_data!_ECPKParameters_print_fp!G_EVP_CIPHER_CTX_cleanup!_EVP_EncryptFinal!_OSSL_libdes_version!O-_TS_REQ_set_msg_imprint!: _sk_find_ex!$V_AES_cfb1_encrypt'_ECDSA_do_sign_ex_ENGINE_register_all_DSA_ENGINE_set_default_RAND_NETSCAPE_SPKI_verify(_OBJ_find_sigid_algs)_PEM_write_X509/_SRP_user_pwd_free[8_X509_check_caFsA]}4(kM_ASN1_IA5STRING_it!K_CMS_add1_signer!( _DES_set_key_checked!T_EC_POINT_is_on_curve!q_EVP_MD_CTX_copy_ex! _X509_NAME_add_entry_by_NID!hA_ASN1_UNIVERSALSTRING_new _BIO_dump_cb_BIO_sock_cleanup_BN_mod_inverse _ECDH_get_ex_new_index_EVP_PBE_CipherInitx _RSA_newA6_X509_cmp_timeF _X509_REVOKED_set_revocationDateC_X509_STORE_CTX_set_errorDM^f׏z%9qC _ASN1_UNIVERSALSTRING_to_string!$_CMS_RecipientInfo_kari_orig_id_cmp!5 _EC_KEY_print_fp!_OCSP_CERTID_it!)_PROXY_CERT_INFO_EXTENSION_it!4 _RSA_verify!7_d2i_OCSP_RESPDATA!M_d2i_X509_CRL!O_i2d_OTHERNAME!R_i2d_RSA_PUBKEY_bio!T_ASN1_BIT_STRING_num_asc_ASN1_GENERALIZEDTIME_print_ASN1_pack_string_BN_GF2m_mod_solve_quad_arr}_BN_uadd _CRYPTO_malloc_lockedm_d2i_DISPLAYTEXTjL_EVP_aes_256_cfb1.$_EVP_aes_256_cfb8:$wCM;Zj3T(_ASN1_INTEGER_it!o_ASN1_STRING_free!_ENGINE_get_STORE!b _EVP_Digest! _EVP_MD_size!d _OCSP_copy_nonce!, _BIO_indent_BN_ucmp _CRYPTO_cts128_encrypt_block4_d2i_CMS_ReceiptRequestHL_d2i_DSAPublicKeyL_DES_cfb64_encrypt)_EC_KEY_set_public_key_affine_coordinates _EVP_PBE_find _EVP_PKEY_encrypt!_EVP_PKEY_paramgen"_i2d_PKCS12_MAC_DATAR_i2d_PKCS7_ENC_CONTENTR_PKCS12_add_CSPName_asc&1_TS_TST_INFO_new;_X509_CRL_set_lastUpdate=@Q_qxˉiB6)_ASN1_TIME_diff!#_EC_POINT_oct2point!_TS_REQ_get_ext_count!9_TS_REQ_set_version!!:_X509_STORE_CTX_set_error!D_d2i_ASN1_VISIBLESTRING!L_ASN1_generate_v39 _BIO_dump_fp _BIO_new_fd _BIO_new_fp_CRYPTO_thread_idX_PKCS5_pbkdf2_set>2_PKCS7_add_attrib_content_type>3 _SRP_Calc_A7 _SRP_Calc_B8 _SRP_Calc_u8 _SRP_Calc_x8_TS_REQ_delete_ext9_X509_REQ_signdC_X509V3_NAME_from_section->zm.!GU9__CONF_imodule_get_value!_ERR_func_error_string!_EVP_des_ede_cfb64!P%_PEM_get_EVP_CIPHER_INFO!._PEM_write_ECPrivateKey!v/_X509_REQ_digest!B_asn1_get_choice_selectorK_d2i_ISSUING_DIST_POINT M_i2d_DIST_POINTQQ _OBJ_nid2sn=)_PKCS5_pbe_set0_algor82_PKCS7_add1_attrib_digest73_PKCS8_PRIV_KEY_INFO_new^4_X509_CRL_free?_X509_CRL_METHOD_free?_X509_LOOKUP_ctrl@_X509_STORE_CTX_trusted_stackD_X509V3_add_value_intU>_X509V3_EXT_CRL_add_conf=2r>\h({K _BN_CTX_new!'_DH_compute_key_padded!_EVP_BytesToKey!v_NCONF_get_number_e!(_PEM_write_DSA_PUBKEY!c/_PEM_write_bio_X509_CERT_PAIR!0_d2i_ASN1_UTF8STRING! L_d2i_KRB5_TICKET!HM_i2d_PKCS7_fp!1S_i2d_PKCS8PrivateKeyInfo_fp!>S__ossl_old_des_enc_readI_DSO_new_methodH_hex_to_string&P_lh_node_stats{U_OCSP_BASICRESP_get_ext)_TS_REQ_to_TS_VERIFY_CTX':_X509_VERIFY_PARAM_set_timebFyܫH[P2>h*_ASN1_STRING_cmp!_CRYPTO_ofb128_encrypt! _DES_options!._ENGINE_load_rdrand!_EVP_add_cipher!# _PKCS7_final!3_TS_ext_print_bio!<_UI_method_set_closer!(=_X509_policy_level_node_count! H_i2d_ESS_ISSUER_SERIAL!Q#_CRYPTO_get_locked_mem_ex_functions_d2i_OCSP_REQINFOM _ECDSA_verify<_ENGINE_set_ECDSAn_EVP_EncryptFinal_ex _EVP_SealInitv#_i2d_NETSCAPE_SPKACz"N4l?dZ_ASN1_UNIVERSALSTRING_free!!_EVP_PKEY_get_default_digest_nid!?"_EVP_des_ede3_ofb!?%_TS_RESP_CTX_set_serial_cb!:_TS_TST_INFO_get_tsa!;_d2i_ASN1_INTEGERK _ENGINE_ctrl(_OCSP_archive_cutoff_new+_OCSP_SINGLERESP_new+_SXNET_add_id_ulong8_TS_TST_INFO_get_ordering;_X509_pubkey_digest}H_X509_REQ_add1_attr_by_OBJBxS;Ii]*_CMS_set_detached! _DSO_METHOD_openssl!_EC_GROUP_have_precompute_mult!_EVP_PKEY_asn1_add_alias!7!_OCSP_CRLID_new!)_OCSP_crlID_new!,_PKCS12_key_gen_asc!1_X509_EXTENSION_set_object!@_i2d_DHparams!S _OBJ_obj2txtF)_OCSP_CRLID_new)_PEM_read_bio_DSAparams._TS_CONF_set_policies@9 _TS_RESP_free:_TS_TST_INFO_free9; _UI_processY=_X509_PUBKEY_setEB_X509_STORE_add_certDjD\R7*r_ASN1_generate_nconf!3_ASN1_item_ex_d2i!j_BASIC_CONSTRAINTS_it!d_DES_check_key_parity!_EVP_PKEY_asn1_find_str!J!_OBJ_NAME_remove!(_TS_TST_INFO_set_serial!; _X509_print!iH_i2d_PKCS8_PRIV_KEY_INFO!bS_i2d_RSAPrivateKey!S_ASN1_STRING_dup_ASN1_STRING_to_UTF8_BN_BLINDING_invert_ex_BN_freeJ _X509_ATTRIBUTE_new+?_X509_LOOKUP_new A_X509_STORE_get1_certsEar)!@ưVz6Jj_ASN1_check_infinite_end! _BN_div_word!= _EVP_DigestVerifyInit!_EVP_aes_256_ccm!)$_KRB5_TICKET_new!'_OCSP_SINGLERESP_it!+_X509_check_trust!F_d2i_PBEPARAM!M _BIO_new_NDEF _bn_div_wordsDK_CRYPTO_cleanup_all_ex_data_DES_set_key_uncheckedZ _EC_GROUP_dup _RSA_size 7_TS_STATUS_INFO_free;_UI_construct_promptq<_WHIRLPOOL_Update=_X509_NAME_add_entrybA _X509_STORE_CTX_get0_current_crlCvR-g<GZ_ASN1_ENUMERATED_get!_ASN1_UNIVERSALSTRING_it!_ASN1_UNIVERSALSTRING_new!_ECDSA_METHOD_free!_KRB5_TICKET_free!' _SHA_Update!7_UI_method_set_opener!5=_X509V3_EXT_REQ_add_nconf!=_i2d_PROXY_CERT_INFO_EXTENSION!S_BF_cbc_encryptq_CMS_signed_add1_attr_by_NID _EC_KEY_get_conv_form_OBJ_dup)_OCSP_RESPID_new + _RSA_flags6_TS_ACCURACY_get_millis8_TS_CONF_load_key8_TS_RESP_CTX_new^:_TS_TST_INFO_get_tsa; _X509_SIG_newC0={UoId _CBIGNUM_it!C &_EC_POINT_set_affine_coordinates_GF2m!_ENGINE_unregister_RSA!q_PKCS12_SAFEBAGS_it!1_SRP_create_verifier!H8_X509_REQ_add1_attr_by_NID!B_i2d_NETSCAPE_SPKI!BR_private_RC4_set_key!U_CMS_ContentInfo_new _d2i_PROXY_POLICYN_d2i_PublicKeyN_ERR_load_BIO_strings _EVP_PKEY_meth_set_keygen"_KRB5_TKTBODY_free'_POLICYINFO_free4 _RC2_decrypty5_TS_STATUS_INFO_new;_X509_LOOKUP_by_subject@_X509_NAME_add_entry_by_NIDhA _X509_NAME_itAQ.hFa|<իr_ASN1_UTCTIME_adj!_AUTHORITY_INFO_ACCESS_free!6_CMS_set1_signers_certs! _EVP_MD_CTX_copy! _X509_PURPOSE_add!QB__ossl_old_des_read_password!\J _name_cmp!U_ASN1_item_ex_i2dv_ASN1_STRING_cmp_BN_generate_primeX _BUF_MEM_grow _CONF_imodule_get_name _DSA_sign_ENGINE_set_DH__i2d_ASN1_BIT_STRINGlP_PBE2PARAM_free{-_PBEPARAM_free-_PKCS12_unpack_p7data1_PKCS7_ISSUER_AND_SERIAL_it2 _RAND_seedT5 _X509_digestF_X509_TRUST_get_counttEE6(seP\_ASN1_BMPSTRING_free!_DES_cbc_cksum!_ECDSA_METHOD_set_verify!_EVP_PKEY_get_attr_by_OBJ!1"_EVP_aes_128_cfb8!#_PEM_write_X509_REQ!/_SHA384_Final!7_TS_ACCURACY_get_micros!8_TS_RESP_CTX_set_certs!j: _ASN1_dup/_ASN1_item_i2d_BASIC_CONSTRAINTS_newj _BN_bin2bn_BN_MONT_CTX_init_d2i_DSAparamsL _EC_GROUP_cmp_ERR_load_DSO_stringsE_EVP_rc4_hmac_md5%_OCSP_request_set1_nameW,_TS_CONF_get_tsa_section8_X509_NAME_print_exAs7XMgB-_CAST_ofb64_encrypt!8 _DES_ede3_ofb64_encrypt!_DES_quad_cksum!9_EDIPARTYNAME_new!_ENGINE_get_flags!_ERR_remove_state!_EVP_PKEY_CTX_get0_peerkey! _UI_get_string_type!<__ossl_old_des_ofb_encrypt!*J_d2i_POLICYQUALINFO!N_BIO_new_bio_pair_BN_MONT_CTX_set_locked _CRYPTO_nistcts128_decrypt_block_DSA_set_default_method_DSA_set_ex_data_ECParameters_print_fpT_ENGINE_pkey_asn1_find_str_i2d_ASN1_bytesP_i2v_GENERAL_NAME(UN+5DeǐZu_EVP_aes_256_cbc!$_OCSP_ONEREQ_delete_ext!)_OCSP_RESPID_it!+_OCSP_request_onereq_count!I,_OTHERNAME_free!Z-_d2i_TS_MSG_IMPRINT!O_i2d_X509_CRL_bio!T_ASN1_STRING_get_default_mask_AUTHORITY_INFO_ACCESS_free6_ENGINE_get_cmd_defns{_ENGINE_get_first _ENGINE_new_ENGINE_set_ctrl_function_ENGINE_set_default_ECDH_EVP_CipherFinalT _PKCS7_sign'4_PKCS7_SIGNER_INFO_new3_TS_CONF_set_accuracy9_TS_CONF_set_tsa_nameZ9_UI_get0_result_string<n?(ݕM4az_BN_MONT_CTX_free!_BN_bntest_rand! _CMS_ContentInfo_it! _ECDH_set_ex_data!_PEM_read_bio_DSAparams!.%_PEM_read_bio_NETSCAPE_CERT_SEQUENCE!._PKCS5_pbe_set0_algor!82_X509_ATTRIBUTE_new!+? _X509_free!G_d2i_OCSP_CRLID!M_ASN1_STRING_new _BIO_ptr_ctrl_BN_MONT_CTX_copy_d2i_RSAPrivateKeyN_DES_ede3_cbc_encrypt_ERR_load_CMS_strings_EVP_SealFinalq#_i2d_KRB5_TKTBODY/R_i2d_OCSP_REQINFOtR_i2d_X509_CRL_fpT _OBJ_obj2nidA)T͠~m^H;3%_BN_mod_exp_simple! _CONF_load!_CRYPTO_get_ex_new_index! _ENGINE_init!i_ERR_load_EVP_strings!l_KRB5_AUTHDATA_free! '_USERNOTICE_new!}=_X509_NAME_ENTRY_get_data!:A__ossl_old_des_read_2passwords!TJ_i2d_X509_NAME!T_ASN1_TIME_set_stringA_BASIC_CONSTRAINTS_free]_ENGINE_load_openssl_ERR_peek_error_line _EVP_PKEY_idG"_PEM_write_bio_X509_REQ0_PKCS7_add_signaturel3_PKCS7_ENCRYPT_freeh2_RC2_ecb_encrypt~5_TXT_DB_create_index<v,Ni6]"C_AUTHORITY_INFO_ACCESS_it!=_DH_get_ex_data!_EVP_CIPHER_nid!8_PKCS7_SIGNER_INFO_it!2_SHA256_Transform!7_TS_RESP_verify_signature!:_X509_NAME_print_ex!A__shadow_DES_check_key!J_i2d_TS_MSG_IMPRINT!T_i2d_X509_REQ_bio!T _ASN1_tag2bit _BN_BLINDING_thread_id_BN_mod_lshift1_quick _d2i_OCSP_SIGNATUREM_ENGINE_set_flags_i2d_TS_MSG_IMPRINTT _OBJ_nid2ln4)_OCSP_resp_countj,_OCSP_SIGNATURE_freeN+_PEM_read_DSA_PUBKEY). _PKCS7_it3+|!e91RD[q_ACCESS_DESCRIPTION_free!_ASN1_STRING_dup!_BN_exp!F _CRYPTO_free!o_ENGINE_set_STORE!~_ERR_load_ENGINE_strings!__EVP_OpenFinal!n _OPENSSL_cleanse!,_PKCS8_add_keyusage!e4_RSAPublicKey_dup!5_private_AES_set_encrypt_key!U_AES_cbc_encrypt_BIO_ctrl_reset_read_request_CRYPTO_get_mem_ex_functions?!_CRYPTO_set_dynlock_lock_callback _DSO_flags#_EC_GROUP_set_point_conversion_formW_ENGINE_get_cipherh_ERR_get_error _EVP_CipherPtf+\9ўFQ_ASN1_INTEGER_get!i_ASN1_STRING_TABLE_get!u_BN_is_prime_fasttest_ex! _ECPKParameters_print!A_ERR_error_string!_EVP_CipherInit_ex!d_RSA_get_ex_data!,6_RSA_set_default_method!6_X509V3_EXT_nconf!>_X509_STORE_CTX_get_error!JD_X509_policy_tree_get0_level!HH_asn1_get_field_ptrK _BUF_reverse _EC_KEY_set_conv_form_ECDH_compute_keyy_ECDH_set_ex_data_ENGINE_register_pkey_methsS_EVP_PKEY_asn1_set_param!_PKCS7_get_signed_attribute3/_&m9zREʞ_EVP_PKEY_asn1_add0!1! _EVP_dss1!n%_HMAC_Init_ex!&_RIPEMD160_Init!5_UI_get_ex_new_index!<_i2s_ASN1_OCTET_STRING!U_CRYPTO_get_id_callback _CRYPTO_get_mem_functionsG_EC_KEY_set_public_key_ECDSA_METHOD_set_sign _EVP_md_null%_EVP_PKEY_meth_set_encrypt" _RC2_encrypt5_X509_NAME_get_index_by_OBJA_X509_STORE_CTX_newwD_X509_STORE_freeD_X509_VERIFY_PARAM_get_countE_X509V3_EXT_add_nconf=%v?J]2Vh _BIO_s_mem!I_ECDSA_get_ex_data! _EC_GFp_simple_method!n_ERR_load_CMS_strings!_EVP_aes_128_cfb1!#_KRB5_AUTHENTBODY_it!$' _MD5_Init!'_OCSP_basic_verify!+_X509V3_EXT_CRL_add_conf!=_X509V3_get_value_bool!>_X509_NAME_ENTRY_set_data!TA_d2i_PKCS7_ENCRYPT! N!_CRYPTO_get_dynlock_lock_callback_d2i_DIRECTORYSTRINGdL _DSA_dup_DHe#_EC_GROUP_get_point_conversion_form_ENGINE_ctrl_cmd-_sk_find V_TS_ACCURACY_set_millis8k%[Mc;v3_ECDSA_OpenSSL!_ENGINE_by_id!_PKCS5_PBKDF2_HMAC_SHA1!!2 _SXNETID_it!o8!_X509_STORE_CTX_get_ex_new_index!`D_get_rfc3526_prime_1536!O _BN_sub_word _check_deferxK_d2i_X509_CRL_INFOO_EC_KEY_get0_private_key_ENGINE_get_flags_ENGINE_set_id_ERR_add_error_data_i2d_PUBKEY_fpS'_TS_RESP_CTX_set_clock_precision_digitsq:_X509_CRL_set_issuer_name6@_X509_STORE_set_depth0E_X509V3_add_standard_extensions9>9XPy)dm _BIO_read!*_BN_BLINDING_set_thread_id!_CMS_unsigned_get_attr_count!v*_EC_POINT_set_Jprojective_coordinates_GFp! _EVP_Cipher!P_KRB5_APREQBODY_free!&_OTHERNAME_cmp!U-_POLICY_MAPPING_free!4 _RAND_SSLeay!5_TS_RESP_CTX_set_accuracy!c:_X509_ALGOR_set_md!>_X509_REQ_INFO_it!B_X509_REQ_new!3C_X509_STORE_add_lookup!D _BIO_write_CMS_data_createT _ECDSA_size8_EVP_camellia_192_ofb$_EVP_PKEY_meth_set_signctx"_PKCS7_dataInit3`?t&i4JV_AES_set_decrypt_key!X _BIO_vfree!_EVP_PKEY_CTX_get0_pkey! _EVP_aes_192_cfb8!#_PEM_read_bio_CMS!._RSA_OAEP_PARAMS_it!5_d2i_PrivateKey!N_d2i_X509_bio!O_BIO_gethostbyname_CMS_SignerInfo_get0_pkey_ctx _COMP_zlib_CRYPTO_remove_all_info_d2i_ASN1_BMPSTRINGK_d2i_ASN1_UTCTIMEL_EC_METHOD_get_field_type _RC4_set_key5_RSA_padding_add_PKCS1_type_1m6_RSA_padding_add_PKCS1_type_2u6 _SXNET_it8_X509_PUBKEY_free)Bgr2N\ӑB*| _BIO_vprintf!_CRYPTO_set_mem_functions!L _DES_fcrypt!_EVP_PKEY_CTX_get_operation! _X509V3_section_free!>_X509_load_cert_crl_file!G_d2i_OCSP_REQINFO!M_d2i_X509_CERT_AUX!vO_d2i_X509_PUBKEY!O_i2c_ASN1_INTEGER!_P_BIO_method_type_BN_GF2m_mod_inv_arre_CRYPTO_set_mem_functionsL_CRYPTO_THREADID_set_callback_EVP_BytesToKeyv_EVP_PKEY_add1_attr_by_txt*!_i2d_ASN1_GENERALIZEDTIMEP_i2d_PKCS12_fpR_i2d_PKCS8_PRIV_KEY_INFObS _idea_optionsQUU>~`,5Ks_ASN1_BOOLEAN_it!_ASN1_PCTX_set_cert_flags!_ASN1_TYPE_set!r_COMP_CTX_free!_ESS_SIGNING_CERT_free!i_EVP_cast5_cfb64!$_SEED_ecb_encrypt!;7"_UI_method_set_prompt_constructor!;=_X509_LOOKUP_init!A_X509_REQ_delete_attr!B_a2i_ASN1_ENUMERATEDJ_ASN1_TYPE_set1w_Camellia_ecb_encrypt_CONF_imodule_set_flags_CRYPTO_destroy_dynlockid[_ECPKParameters_print_fpG"_PEM_write_bio_PKCS8PrivateKey_nidi0 _SXNETID_news8_UI_set_resultn=vZ,kM@_ASN1_STRING_print!_CRYPTO_dbg_set_options!T$_EC_GROUP_set_point_conversion_form!W_ERR_load_DSA_strings!?_KRB5_AUTHENTBODY_new!*'_OCSP_SINGLERESP_get1_ext_d2i!|+_asn1_enc_restore!J_BN_BLINDING_new_BN_X931_generate_prime_ex_CMS_add1_recipient_cert! _d2i_RSAPublicKey_fpN _ENGINE_add _EVP_CIPHER_flags _i2d_SXNET T_OCSP_request_verifyd, _pitem_newU_POLICYQUALINFO_free4 _RAND_event+5_RSA_OAEP_PARAMS_new5_X509_CERT_PAIR_freeW?>'`k{TE6 _AES_decrypt!9_AES_set_encrypt_key!^_CMS_RecipientInfo_encrypt! _CMS_decrypt!Y _DES_crypt!_EVP_PKEY_meth_set_encrypt!"_POLICY_MAPPINGS_it!4_RSA_PKCS1_SSLeay!5_d2i_PKCS7_ISSUER_AND_SERIAL!N_i2d_ISSUING_DIST_POINT!Q__ossl_old_des_cfb64_encryptI_AUTHORITY_INFO_ACCESS_newD_Camellia_cfb128_encryptk_ERR_load_X509V3_strings_OpenSSL_add_all_digestst-_PKCS12_BAGS_it0 _RSA_free6 _SHA_Update7 _TXT_DB_free#<_X509_certificate_typeFj$RGw[Ϙ>2_CMS_unsigned_get0_data_by_OBJ!W_ENGINE_load_public_key!_ERR_unload_strings!8_EVP_idea_cbc!%_KRB5_CHECKSUM_new!M'_NCONF_default!(_OCSP_REQ_CTX_get0_mem_bio!*_X509_TRUST_get_by_id!nE _X509_verify!I_ASN1_T61STRING_it_BN_div4 _CMS_add1_cert _CMS_add1_signer( _CMS_ReceiptRequest_free _CMS_RecipientInfo_set0_passwordy _CMS_set1_signers_certs _CONF_imodule_get_flags_ERR_load_RSA_strings_EVP_get_pw_prompt%k#|I?e3rU_CMS_EncryptedData_set1_key! _ENGINE_get_pkey_asn1_meths!1_RSA_PSS_PARAMS_new!5_X509_CRL_digest!?_i2d_DIST_POINT_NAME!VQ_private_AES_set_decrypt_key!U_BIO_pop _BN_mpi2bn= _CMS_get0_signers _COMP_compress_block_d2i_AutoPrivateKey.L_DH_check_pub_key_DH_size_ENGINE_register_STORE_OCSP_SERVICELOC_itB+_PKCS12_unpack_p7encdata1_UI_add_input_string_<_X509_EXTENSION_get_object@_X509_EXTENSION_set_critical@}oxFS9 _)_ASN1_STRING_TABLE_add!g_CMS_dataFinal!J _CRYPTO_gcm128_decrypt_ctr32!_EVP_PKEY_set1_EC_KEY!)#_EVP_camellia_192_ofb!$_TS_STATUS_INFO_free!;_X509_NAME_ENTRY_get_object!AA_d2i_ASN1_TIME!K_BN_gcdT _CMS_ContentInfo_it _CMS_sign _DES_random_key>_get_rfc2409_prime_768O _i2d_DSA_SIGQ_i2d_RSAPrivateKeyS_NAME_CONSTRAINTS_free'_OCSP_request_add0_id.,_TS_CONF_set_ordering:9_TS_REQ_set_policy_id:_X509_INFO_new@_X509_REQ_add1_attr_by_NIDBG#Ur;O4ah_ENGINE_register_all_ciphers! _ENGINE_register_all_complete! _MD4_Final!'_PKCS7_get0_signers!3 _d2i_X509_fp!O_BIO_setV_d2i_PKCS7_RECIP_INFO%N _d2i_SXNETO_EVP_PKEY_verifyW#_i2d_PKEY_USAGE_PERIODS_KRB5_AUTHENTBODY_new*' _OCSP_id_cmp,_RIPEMD160_Update5 _SHA384_Final7_X509v3_delete_ext\I+uQi\#6?_ASN1_GENERALIZEDTIME_print! _BIO_s_file!E_BN_RECP_CTX_init!_CMS_add1_cert! !_CRYPTO_nistcts128_decrypt_block!_ENGINE_set_flags!_ERR_load_BIO_strings! _EVP_PBE_CipherInit!x _EVP_aes_192_cfb1!#_EVP_seed_cfb128!%_PKCS7_SIGNER_INFO_free!2_SRP_user_pwd_free![8_X509_set_notBefore!H_d2i_RSAPrivateKey_bio!N_BIO_dump_indent _CMS_RecipientInfo_kari_decrypt _DH_new_method_DSA_get_default_method_DSA_new_method_DSO_set_filenameYK6˄h)wZC_AES_cbc_encrypt!_ASN1_PRINTABLE_free!>_DIRECTORYSTRING_free!_ERR_load_ERR_strings!f _EVP_rc2_ofb!%_TS_TST_INFO_get_ext_count!b;_X509_CRL_get_ext_by_NID!?_X509_STORE_CTX_get0_param!D_X509v3_get_ext_by_OBJ!nI_idea_set_decrypt_key!VU_ASN1_GENERALIZEDTIME_it _ASN1_item_d2i_bioS_EC_GROUP_clear_free _i2d_PUBKEYS_OCSP_response_status_str,_PKCS12_SAFEBAG_free1_X509_STORE_set_lookup_crls_cb_EVP_CIPHER_CTX_key_length_GENERAL_NAME_get0_otherNamei&Vc'rϭE:1_BIO_dump_indent_cb! _BUF_memdup! _DISPLAYTEXT_new!_EC_POINT_new!_ERR_free_strings!_EVP_PKEY_verify_recover_init!i#_OCSP_basic_add1_cert!+_PEM_write_bio_DSA_PUBKEY!!0"_TS_RESP_CTX_set_status_info_cond!:_TS_RESP_verify_response!:_X509v3_get_ext_by_critical!uI_ASN1_item_print_BN_cmp" _BN_num_bitsk _DSO_bind_var_ENGINE_set_default_RSA _EVP_MD_typei _OBJ_add_sigid(_X509V3_EXT_add_alias=3a&L=W{nŒ_BN_RECP_CTX_set!_CMAC_CTX_free!g _CMS_ReceiptRequest_it! _EVP_PKCS82PKEY! _EVP_PKEY_copy_parameters!!_PKCS7_add_signer!y3_SMIME_crlf_copy!7_i2d_PKCS7_SIGNER_INFO!S_idea_set_encrypt_key!\U_BN_add_CRL_DIST_POINTS_freeT_ENGINE_get_DHC_ENGINE_get_ECDSAR_i2d_OCSP_REQUESTzR_TS_CONF_load_cert8_X509_EXTENSION_get_data@_X509_get_serialNumberG_X509V3_EXT_nconf>GPw;\n-_BIO_dump_indent_fp!_EC_GROUP_get_curve_GF2m!_EC_GROUP_get_curve_GFp!_EC_POINT_hex2point!__EVP_PKEY_free!!_EVP_add_alg_module!# _PKCS7_ISSUER_AND_SERIAL_digest!2_SHA512_Final!7_SRP_VBASE_new!08_X509_PUBKEY_free!)B_X509_VERIFY_PARAM_set1_ip!#F _X509_policy_tree_get0_policies!PH_c2i_ASN1_INTEGER!mK_i2d_ASN1_TIME!P_BN_GF2m_mod_divJ_CONF_imodule_get_usr_data _d2i_X509_bioO_d2i_X509_CINFO_DSO_METHOD_openssl7SAr#Ia߯_CMS_ReceiptRequest_create0! %_CRYPTO_get_dynlock_destroy_callback!_ENGINE_set_ECDH!i _EVP_des_ofb!`%_EVP_rc2_64_cbc!%_X509_CRL_set_meth_data!D@_X509_STORE_CTX_trusted_stack!D_X509_VERIFY_PARAM_set1_ip_asc!*F_X509_chain_up_ref!F__ossl_old_des_random_key!FJ_d2i_PKCS12_BAGS!M _i2d_CMS_bio!+Q_i2d_ECParameters!Q_i2d_OCSP_BASICRESP!YR_i2s_ASN1_ENUMERATED_TABLE! U_d2i_ASN1_OBJECTK _d2i_X509_fpO _DSA_size _EVP_OpenInits _OCSP_REQ_CTX_free*Cl^z'P4 _BUF_strlcat! _CMS_SignedData_init! _CRYPTO_cbc128_decrypt!_ECDSA_get_default_method!_ERR_load_DSO_strings!E_OCSP_REQUEST_delete_ext!X*_PKEY_USAGE_PERIOD_free!4_X509_LOOKUP_by_subject!@_X509_verify_cert_error_string! I_BN_dupB _CMS_ReceiptRequest_new _GENERAL_NAME_set0_othername&_i2d_ECDSA_SIGQ _i2d_X509_fpT _MD5_Init'_OpenSSL_add_all_ciphersm- _RAND_bytes5_SMIME_write_CMS7_SRP_create_verifier_BNN8_UI_method_set_opener5=H?wmØ2V(~a_ASN1_TIME_set!<_CRYPTO_mem_leaks_cb!~_EVP_des_ede_ecb!V%_EXTENDED_KEY_USAGE_it!.&_NCONF_load_fp!5(_PEM_read_ECPKParameters!5._PKCS5_pbe2_set_iv!-2_TS_MSG_IMPRINT_free!f9_X509_INFO_free!@ _BIO_printf_d2i_PKCS8_PRIV_KEY_INFOWN_ERR_load_PEM_strings_EVP_PKEY_verify_recoverb#_PEM_write_PKCS8PrivateKey_nid/_SRP_create_verifierH8_WHIRLPOOL_Init=_X509_LOOKUP_file@_X509_set_subject_nameH_X509V3_string_free>Hg>U0x&Ʀ_ASN1_item_d2i_fp!Y _DSO_up_ref!k_ENGINE_get_ECDH!M_ENGINE_unregister_RAND!j_EVP_aes_128_ofb!#_PEM_read_bio_X509_CRL!9/!_X509_STORE_CTX_get0_current_crl!C_X509_VERIFY_PARAM_set1_email!F_i2d_BASIC_CONSTRAINTS!Q_s2i_ASN1_INTEGER!V_ASN1_STRING_free_BN_generate_prime_ex^ _EC_KEY_get0_public_key_ENGINE_cleanup_EVP_PKEY_base_id!_EVP_PKEY_sign_initG#_OBJ_cmp )_OCSP_REQ_CTX_nbio_d2i*_PKCS7_print_ctx3_PKCS8_decryptk4i`LVCqz-7_ASN1_STRING_length!_ASN1_VISIBLESTRING_new!_BN_MONT_CTX_new!_CRYPTO_mem_leaks_fp!_PKCS7_stream!@4_SHA1_Transform!_7_X509_email_free!G_a2i_IPADDRESS!J _ASN1_digest*_DES_cbc_cksum_EDIPARTYNAME_new_ESS_CERT_ID_newI_EVP_camellia_192_ecb$_OCSP_ONEREQ_it0* _sk_shiftXV_X509_ATTRIBUTE_free ?_X509_get_ext_by_OBJzG_X509_STORE_CTX_get_errorJD _X509_VAL_newE_X509V3_add_value_boolG>\ti%M4A _CMS_ReceiptRequest_get0_values! _CMS_decrypt_set1_password!d _CRL_DIST_POINTS_free!T_CRYPTO_THREADID_cmp!q_CRYPTO_get_mem_functions!G_DIST_POINT_set_dpname!E_ENGINE_get_cipher!h_EVP_PKEY_asn1_find!D!_ISSUING_DIST_POINT_free!&_RSA_OAEP_PARAMS_free!5 _UI_process!Y= _pitem_new!U__ossl_old_des_ede3_cbc_encryptI_ASN1_item_i2d_bio_BN_is_bit_set _ENGINE_get_ciphersu _OBJ_sn2nidP)_PROXY_POLICY_free4_s2i_ASN1_OCTET_STRINGV _SHA_Init7ش|@q4LWd)_BN_add!_BN_dup!B _EVP_aes_192_ofb! $_OCSP_RESPDATA_new!*_asn1_get_field_ptr!K_i2d_ASN1_BMPSTRING!rP_i2d_EC_PUBKEY_bio!Q_ASN1_BIT_STRING_checks_ASN1_ENUMERATED_to_BN_ASN1_OBJECT_create_ASN1_PCTX_set_nm_flags_BF_ecb_encrypt_BN_GF2m_mod_arrE_d2i_ASN1_ENUMERATEDK_EVP_MD_CTX_set_flags; _OCSP_basic_sign+_OCSP_SINGLERESP_get_ext_by_OBJ+_PKCS12_set_mac1_POLICY_CONSTRAINTS_it4_TS_REQ_get_ext_count9_X509_chain_up_refFUwHa;k2_CRYPTO_gcm128_tag!$_EC_GROUP_get_point_conversion_form!_EC_POINT_free!>_ENGINE_get_pkey_meths!F_EVP_PKEY2PKCS8_broken! _PKCS7_add_recipient!_3_SRP_VBASE_init!+8_X509_NAME_ENTRY_dup!.A_X509_get_ext_by_NID!tG_X509_get_pubkey!G_X509at_add1_attr!I_d2i_X509_NAME_ENTRY!O_i2d_ASN1_GENERALSTRING!P_i2d_CMS_ReceiptRequest!$Q__ossl_old_des_read_pwdJ _CBIGNUM_itC _EC_POINT_set_to_infinity _EVP_MD_sized _EXTENDED_KEY_USAGE_new5&MF}!,d7q[_BN_MONT_CTX_set_locked!_CMS_digest_verify!x _ENGINE_get_first!_EVP_PKEY_CTX_set_app_data!! _PEM_write!G/_TS_TST_INFO_delete_ext!';_X509_CINF_new!s?_X509_cmp_current_time!F_d2i_NETSCAPE_SPKAC!ZM_i2d_DHxparams!AQ_asn1_set_choice_selectorK_ENGINE_get_ctrl_function_EVP_aes_128_ecb# _lh_strhashU!_PEM_read_bio_PKCS8_PRIV_KEY_INFO._X509_chain_check_suitebF_X509_CRL_METHOD_new?_X509_get_signature_nidG_X509_itG_X509_NAME_entry_countA9O~A_t 0_BN_mod_mul_reciprocal! _EC_GROUP_check_discriminant!y_EC_GROUP_cmp! _OBJ_nid2obj!8)_OCSP_request_add1_nonce!;,_PEM_read_bio_DSAPrivateKey!.&_PEM_write_bio_NETSCAPE_CERT_SEQUENCE!E0_PKCS12_add_key!B1_d2i_X509_REQ_bio!O _asn1_do_adbJ_BIO_sock_init_CMS_get0_SignerInfos _CRYPTO_dbg_get_optionsA_CRYPTO_memcmp _DSA_print_fp_EVP_aes_128_ctr#_PEM_SignUpdate-_PKCS7_dataVerify3_RSAPrivateKey_dup5_X509_EXTENSION_create_by_OBJ{@jN4u%BZ_BIO_asn1_get_prefix! _BN_copy!, _EC_METHOD_get_field_type!_EVP_CIPHER_get_asn1_iv!$_GENERAL_NAME_print!&_OBJ_create_objects!)_PKCS12_add_friendlyname_asc!21_d2i_EC_PUBKEY_fp!L_d2i_KRB5_ENCDATA!7M_BN_expF _d2i_ECPrivateKeyL_d2i_KRB5_TKTBODYMM_EVP_PKEY_meth_set_decrypt" _EVP_seed_ofb%_PEM_do_header._RSA_PSS_PARAMS_free5_TS_RESP_CTX_add_md=:_X509_ATTRIBUTE_create_by_OBJ>_X509_CRL_get_meth_data@_X509_EXTENSION_set_object@o!bT?K._CMS_SignerInfo_cert_cmp! _CMS_decrypt_set1_key!^ _CMS_unsigned_add1_attr_by_NID!8_CONF_modules_unload!=_EVP_cast5_ofb!$_PEM_write_DSAPrivateKey!\/_PKCS7_SIGNER_INFO_new!3 _RSA_padding_check_PKCS1_type_2!6 _SHA1_Init![7_TS_REQ_get_ext_d2i!9_TS_TST_INFO_set_time!;_UI_add_user_data!e<_X509_VERIFY_PARAM_add0_policy!E_d2i_DSAPrivateKey_bio!L_i2d_ACCESS_DESCRIPTION!eP_a2i_GENERAL_NAMEJ_BN_consttime_swap& _CRYPTO_set_mem_debug_options<l'A3^Rz_ASN1_INTEGER_free!c_ASN1_NULL_new!_ASN1_UTCTIME_print!_BN_X931_derive_prime_ex!_CRYPTO_get_add_lock_callback!_CRYPTO_set_ex_data!_ENGINE_get_default_DSA!_OCSP_SINGLERESP_get_ext!+_OCSP_request_sign!^,_OPENSSL_showfatal!--_RSA_padding_check_X931!6_X509_CRL_get_ext_by_OBJ!?_d2i_KRB5_ENCKEY!=M_d2i_NETSCAPE_SPKI!`M_sk_pop!BV_BN_GF2m_mod_expU_CMS_ReceiptRequest_it _DES_ede3_cbcm_encrypt_EVP_DecryptInit_NETSCAPE_X509_free(cCOZl6u,_CMS_get0_type! _EC_KEY_get_key_method_data!_UI_get_ex_data!<_X509_REQ_set_version!^C_i2d_ASN1_bio_stream!P_i2d_NETSCAPE_X509!HR_i2d_PKCS8_bio!xS_d2i_OCSP_CRLIDM_ECDSA_sign_ex-_KRB5_AUTHENT_it6'_OPENSSL_cleanse,_PEM_read_bio_DSAPrivateKey. _sk_deleteV_X509_PURPOSE_get0_snamejB_X509_VERIFY_PARAM_get0E_X509V3_EXT_add_conf=_X509V3_EXT_REQ_add_nconf=P6r-C'aǐӬ_ASN1_item_i2d_fp!_BIO_new_PKCS7! _BN_init! _CMS_dataInit!O _CRYPTO_gcm128_release!_ENGINE_register_STORE!_OCSP_BASICRESP_get_ext_count!)_PEM_write_bio_ECPKParameters!/0 _RSA_padding_check_PKCS1_type_1!6_TS_TST_INFO_add_ext!!;_TS_TST_INFO_get_time!;_X509_EXTENSION_get_object!@_d2i_KRB5_AUTHENTBODY!+M_i2d_TS_MSG_IMPRINT_bio!!T _sk_sort!\V_BN_copy, _d2i_X509_CRLO_ENGINE_set_finish_function_i2d_DISPLAYTEXTLQ_i2d_TS_REQ_bio3T0N8fӸyD&\ʨo_ASN1_OBJECT_it!_BIO_f_base64!$_BN_set_negative! _BUF_MEM_new! _CRYPTO_ccm128_setiv!_EDIPARTYNAME_it!_ENGINE_unregister_ECDSA!c_EVP_DigestFinal!_EVP_whirlpool!"&_X509_CRL_print!#@ _pqueue_pop!U_ASN1_object_size_AUTHORITY_KEYID_newW_CMS_add0_RevocationInfoChoice _CRYPTO_ccm128_decrypt_ccm64 _d2i_X509_AUXqO_EVP_des_ede3_cbc!%_X509_CRL_diff?_X509_get_default_cert_area5G _X509_signH7!j-Ptc@Z_OpenSSL_add_all_ciphers!m-_PEM_read_bio_PUBKEY!._X509V3_EXT_get!=_X509_REQ_dup!B__ossl_old_des_string_to_key!J_d2i_ESS_CERT_ID!L_ASN1_item_d2iN _BIO_s_bio3_CMS_add_smimecap4 _CONF_modules_load_file6_EC_KEY_clear_flagsl_ENGINE_get_default_ECDSA_ENGINE_register_all_pkey_meths._EVP_aes_128_gcm#_EVP_PKEY_asn1_set_item!_PEM_write_bio_DHxparams0_X509_REQ_INFO_newBug5M(^BT_AES_ctr128_encrypt!3_ERR_set_mark!3_EVP_PKEY_new_mac_key!"_PEM_write_RSA_PUBKEY!/_i2d_OCSP_REQUEST!zR _i2d_X509!hT_CONF_get_string_EC_GROUP_copy_ECDH_get_default_method_ENGINE_get_default_RAND_ERR_free_strings_EVP_dssj%_PEM_write_bio_RSAPrivateKey0 _RC4_options5_X509_CRL_get_ext_count?_X509_get_ex_databG_X509_OBJECT_free_contentsA_X509_REQ_print8C_X509_TRUST_setE <{`VKp/_ERR_load_BUF_strings!_EVP_PKEY_CTX_get_app_data! _ISSUING_DIST_POINT_it!&_NETSCAPE_SPKI_b64_decode!f(_TS_RESP_print_bio!:_X509_ALGOR_new!>_X509_REQ_get_extension_nids!C_X509_REQ_sign_ctx!iC_X509_get1_ocsp!0G_d2i_ECPKParameters!L_ASN1_SET_ANY_itb _BIO_accept_BIO_f_nbio_test7_BN_GF2m_mod_sqrt_arr_BN_is_prime_ex _CMS_dataInitO _d2i_DIST_POINToL_EVP_DigestFinal_NETSCAPE_SPKI_b64_decodef(_OCSP_SINGLERESP_it+_OPENSSL_gmtime,my3dS(H>_BIO_asn1_set_suffix!_BN_reciprocal! _DES_ofb64_encrypt!#_PEM_write_bio_CMS!/_PKCS7_dataInit!3_RIPEMD160_Update!5_X509_policy_node_get0_policy!0H_i2d_PBE2PARAM!R_v2i_ASN1_BIT_STRING!qV_a2i_ASN1_STRINGJ_ASN1_STRING_set_by_NID_CRYPTO_ccm128_setiv_d2i_EC_PUBKEY_bioL_d2i_X509_REQ_bioO _EC_POINT_mul_ECDSA_sign_setup2_i2d_ESS_ISSUER_SERIALQ_NCONF_get_number_e(_PEM_read_X509_REQ._PKCS12_add_friendlyname_asc21 _PKCS12_init1|lr.]S=&H_ASN1_TIME_check!_ECDSA_sign_ex!- _EC_KEY_copy!r_EVP_CIPHER_do_all_sorted!_EVP_aes_256_wrap!T$_OCSP_REQ_CTX_i2d!*_POLICYINFO_new!4_X509_REQ_add1_attr_by_OBJ!B _sk_zero!hV_ASN1_OBJECT_new_ASN1_parse_dump_CMS_get0_RecipientInfos _d2i_DSA_SIGL_d2i_NETSCAPE_SPKACZM_ECDSA_SIG_free_ERR_load_EVP_stringsl_EVP_PKEY_CTX_get_app_data _EVP_PKEY_get_attr_by_OBJ1"_i2d_DSAPrivateKey_fpiQ_PKCS5_v2_PBE_keyivgenD2_UI_UTIL_read_pw_stringF<Nhy:D_T!0_BIO_fd_non_fatal_error!E_CMS_EncryptedData_decrypt! _CRYPTO_mem_ctrl!s_OCSP_RESPID_new! +_PKCS5_pbe2_set!(2_SHA256!|7_TS_REQ_set_nonce!:_USERNOTICE_it!x=_X509_LOOKUP_by_issuer_serial!@_X509_LOOKUP_hash_dir!@_X509_PUBKEY_get!/B_X509_alias_set1!F_i2d_ASN1_PRINTABLE!P _sk_value!dV_ASN1_STRING_set_default_mask _BN_div_word= _CRYPTO_get_mem_debug_options7_EC_KEY_set_enc_flags_EVP_CIPHER_typeK_i2d_DSAparamsQ_i2d_EDIPARTYNAMEQ+e~>MX%u_BN_cmp!" _CRYPTO_gcm128_init! _DH_size!"_ENGINE_get_load_privkey_function!_ENGINE_register_all_ECDSA!_OCSP_REQ_CTX_nbio!*_OCSP_REVOKEDINFO_free!)+_PEM_write_bio_RSAPrivateKey!0_SEED_encrypt!A7 _SXNET_new!8_ASN1_STRING_data_AUTHORITY_KEYID_freeK _BN_clear _ENGINE_get_id$_ENGINE_get_ssl_client_cert_functionR_EVP_CIPHER_CTX_set_padding_EVP_CipherFinal_exY _EVP_cleanup$ _NCONF_free(_OCSP_onereq_get0_id#,_OCSP_url_svcloc_new,9WcjF3|O*_BN_from_montgomery!N _CRYPTO_ccm128_tag!_PKCS7_decrypt!3_SHA224!i7_X509_subject_name_cmp!H_i2d_TS_REQ_fp!8T _sk_new_null!9V_ASN1_BIT_STRING_set _BUF_memdup _CRYPTO_get_locked_mem_functions_CRYPTO_get_locking_callback'_ENGINE_get_digest _EVP_des_ede%_EVP_idea_cfb64% _OBJ_NAME_add(_TS_CONF_set_def_policy9_X509_policy_level_get0_nodeH_X509V3_EXT_print>yma$:G/U_BIO_set_ex_data!k _CMS_sign! _EVP_PKEY_encrypt!!_EVP_get_pw_prompt!%_PEM_read_bio_DHparams!._X509_REQ_extension_nid!B_d2i_ASN1_PRINTABLE!K_BN_is_prime_fasttest _BN_mod_exp_mont_word _EVP_des_ede3_ecb9%_PEM_get_EVP_CIPHER_INFO._PEM_write_PKCS8PrivateKey/_TS_STATUS_INFO_dup;_X509_OBJECT_idx_by_subjectA}MlbZ D׼)7 _DH_free! _DSA_print!_EC_GROUP_dup!_EC_GROUP_new_curve_GF2m!_OCSP_request_add0_id!.,_PEM_SealInit!-_PKCS12_MAC_DATA_free!0 _PKCS7_ctrl!3_TS_REQ_get_ext!9_X509_ATTRIBUTE_create_by_NID!>_i2d_PBEPARAM!R_AES_bi_ige_encrypt_BN_newJ _d2i_EC_PUBKEYL_d2i_PROXY_CERT_INFO_EXTENSIONN_DES_ede3_cfb_encrypt_EVP_PKEY_get_attr_by_NID*"_i2d_DSAPrivateKey_biobQ_i2d_KRB5_APREQQ_i2d_TS_RESP_fpGT_PEM_SignFinal-_SHA224_Updatew7<!T0uhI^_CMS_add_simple_smimecap!- _ENGINE_cmd_is_executable!!_EVP_CIPHER_CTX_copy!_EVP_PKEY_decrypt_init!!_PKCS12_SAFEBAG_it!1_PKCS12_add_safe!N1_SSLeay_version!e8_UI_method_get_reader!=_UI_method_get_writer!"=_d2i_DIST_POINT!oL_d2i_X509_REQ_fp!O _i2d_PKCS12!R_ASN1_GENERALSTRING_new>_BN_to_ASN1_INTEGER _CAST_cfb64_encrypt" _CMS_EncryptedData_encrypt _CMS_unsigned_add1_attr_by_txtH_EVP_MD_pkey_type^ _i2d_EC_PUBKEY_bioQ _idea_encryptFUw4N^<Wj)_ASN1_UTCTIME_free!_ASN1_item_unpack!_BF_ofb64_encrypt! _BN_mul_word!E !_ENGINE_get_load_pubkey_function!_ENGINE_set_id! _EVP_ecdsa!r%_PEM_bytes_read_bio!-_PEM_read_bio_X509_AUX!*/_X509_STORE_free!D_X509_signature_print!H_ACCESS_DESCRIPTION_free_ASN1_BIT_STRING_it_BIO_set_cipherf _bn_mul_wordsXK_d2i_ECPrivateKey_fpL_d2i_OCSP_RESPDATAM_d2i_TS_REQ_fp-O_ECDH_get_ex_data_ENGINE_register_all_STORE_EVP_camellia_192_cbc$]uF4*i_ASN1_item_ex_i2d!v_AUTHORITY_KEYID_it!Q_BN_BLINDING_new!!_CMS_RecipientInfo_kari_get0_alg! *_EC_POINT_get_Jprojective_coordinates_GFp!C_ENGINE_get_ciphers!u_TS_VERIFY_CTX_init!<_X509_CRL_add_ext!?_d2i_ASN1_bytes!L_sk_num!>V _BN_bn2bin _DES_encrypt1 _DES_encrypt2 _DES_encrypt3 _EVP_aes_256_cbc_hmac_sha1$_i2d_PKCS8_bioxS_i2d_re_X509_tbsT_POLICY_CONSTRAINTS_free4_TS_TST_INFO_get_accuracy?;_TS_TST_INFO_get_extF;>|wh,"6YM _ASN1_ANY_it!n _CONF_free!_DSO_METHOD_vms!_EVP_aes_256_ctr!@$ _OBJ_obj2txt!F)_OCSP_response_get1_basic!,_X509_check_purpose!F__ossl_old_des_ncbc_encryptJ_BIO_dgram_non_fatal_error_BN_mulA _ECDH_set_default_method_ENGINE_register_complete=_EVP_PKEY_meth_set_copy" _SHA1_FinalW7w(![d;m0Iȷ_ASN1_BIT_STRING_num_asc! _BN_rshift! _DSA_SIG_new!V_DSO_METHOD_win32!_ECDSA_get_ex_new_index!!_ENGINE_set_load_pubkey_function!#_PKCS7_add_crl!Z3_PKCS8_decrypt!k4_X509_alias_get0!F_i2d_OCSP_RESPDATA!R_BIO_s_connect7_BN_GF2m_mod_mul_arrp _BN_rshift1 _CMS_add0_recipient_key _CMS_signed_add1_attr _CMS_unsigned_add1_attr_by_NID8_d2i_ASN1_GENERALSTRINGK _EVP_des_ecb%_EVP_md4%_EVP_md5%_EVP_PBE_alg_add~ zQ>]3e*Io_X509_ALGOR_free!>_X509_set_serialNumber!H_asn1_enc_free!J_i2d_PKCS7_ENCRYPT!R_i2s_ASN1_INTEGER!U _asn1_FinishJ_ASN1_STRING_type_new _EC_POINT_new_EVP_aes_128_cbc#_GENERAL_NAME_print& _i2d_CMS_bio+Q_i2d_OCSP_CERTSTATUSdR_i2s_ASN1_INTEGERU_X509_keyid_set1G_X509_PUBKEY_get0_param4B_X509V3_get_sectiont>sS (3=aJ_ASN1_ENUMERATED_to_BN! _BN_CTX_init!"_DISPLAYTEXT_free!_EVP_aes_256_gcm!J$_PKCS12_add_localkeyid!G1_SHA256_Update!7_TS_CONF_get_tsa_section!8!_X509_OBJECT_retrieve_by_subject!B_ASN1_ENUMERATED_get_ASN1_TIME_new2 _BIO_s_memI _CMS_final _d2i_OCSP_CERTSTATUSM _d2i_TS_REQ$O_ENGINE_set_default_string_ERR_release_err_state_table_EVP_aes_128_ccm#_EVP_CIPHER_nid8_EVP_PKEY_missing_parameters"_OCSP_REQUEST_get_ext_count*;'Fc0mxS_ASN1_BMPSTRING_new! _ASN1_verify!1_PBE2PARAM_new!-_TS_REQ_get_nonce!9_X509V3_parse_list!>_d2i_ASN1_SEQUENCE_ANY!K_i2d_PKCS7_ISSUER_AND_SERIAL!R_i2d_X509_PUBKEY!T_AES_ofb128_encryptM_EC_GROUP_method_of _OCSP_REQ_CTX_get0_mem_bio*!_PEM_write_NETSCAPE_CERT_SEQUENCE/_PKCS7_get0_signers3 _sk_new_null9V_TS_VERIFY_CTX_new <#_X509_STORE_CTX_get_explicit_policyhD_X509_STORE_CTX_set_flagsD_X509_STORE_get_by_subjectE4=F +Ydw_ASN1_OCTET_STRING_it!_CRYPTO_gcm128_new!_DES_key_sched!_DH_new_method!_EC_POINT_mul!"_ENGINE_set_load_privkey_function!_EVP_DigestUpdate!"_EVP_PKEY_meth_set_verify_recover!"_OCSP_CRLID_free!)_X509_chain_check_suiteb!F_i2d_DSAPrivateKey_fp!iQ_i2d_X509_CINF!T_idea_cfb64_encrypt!:U__ossl_old_des_read_password\J_d2i_PKCS12_fpM_DSA_generate_parameters_exz_i2d_KRB5_AUTHDATAR_i2d_OCSP_RESPBYTESR_i2d_TS_TST_INFO_bioWTToC5ҙ'_xM_ASN1_TIME_print!7_DSO_METHOD_beos!_EVP_read_pw_string_min!%_PEM_X509_INFO_write_bio!-_RSA_get_method!76 _RSA_print!6_X509_CRL_INFO_it!~?_X509_VERIFY_PARAM_set1_name!2F_b2i_PublicKey!4K_d2i_PKCS8_PRIV_KEY_INFO!WN_i2a_ASN1_OBJECT!>P_i2d_PKCS8_fp!}S_BN_GF2m_mod_div_arrO_CRYPTO_nistcts128_decrypt _ENGINE_register_pkey_asn1_methsK_EVP_get_cipherbyname{% _pqueue_peekU_X509_NAME_get_entryA _X509_VERIFY_PARAM_set1_policies:FP+z9_lC_ASN1_TYPE_new!m_ENGINE_get_cipher_engine!n_PEM_write_bio_X509_REQ!0_X509V3_EXT_add!=_X509V3_get_value_int!>_X509_ATTRIBUTE_get0_data!?_X509_get_serialNumber!G_ASN1_PCTX_get_oid_flags_ASN1_PCTX_new_BIO_number_read_CMS_digest_creater _CMS_get1_certs _OCSP_request_sign^,_OPENSSL_config,_POLICY_MAPPING_new4_RSA_public_encrypt6_SHA256_Transform7_UI_get0_result<_X509_INFO_free@_X509_VERIFY_PARAM_inheritEڣPir^D9z)!_ASN1_BIT_STRING_set_bit! _BN_GF2m_add!5_ECDSA_METHOD_set_sign_setup!_KRB5_ENCDATA_free!S'_PKCS12_key_gen_uni!1_X509_VERIFY_PARAM_free!E_i2d_DSA_PUBKEY_fp!Q_lh_num_items!U _ASN1_NULL_it_ASN1_OCTET_STRING_new_BIO_ctrl_wpending _BN_asc2bn_BN_MONT_CTX_new _d2i_PKCS7_fpDN_DSAparams_dup_ECDSA_set_method#_ESS_SIGNING_CERT_newp _EVP_des_cbc$ _EVP_seed_ecb%_EXTENDED_KEY_USAGE_it.&_HMAC_CTX_copy&_OCSP_RESPID_it+ˏAuoX2bL)_ASN1_ENUMERATED_set!_BIO_number_read!_BUF_MEM_free! _CMS_EncryptedData_encrypt! _ECDSA_set_method!#_ENGINE_register_RSA!_EVP_PKEY_keygen!L"_EVP_camellia_192_cbc!$ _EVP_md5!%_OCSP_REQINFO_new!E*_PEM_write_bio_PrivateKey!0_PKCS7_print_ctx!3_X509_VERIFY_PARAM_inherit!E_X509_get_ext_by_critical!G_d2i_RSA_PSS_PARAMS!N _BIO_f_base64$_BIO_new_mem_buf_CMS_add0_CertificateChoices _CONF_free _DH_KDF_X9_42yU=tj Ю(_Iz_ASN1_GENERALSTRING_it!7 _BUF_strdup! &_EC_POINT_get_affine_coordinates_GF2m!M_ERR_load_UI_strings!_ERR_peek_last_error!_ESS_CERT_ID_dup!>_EVP_PKEY_set1_DH!#_EVP_des_ede_cbc!K% _EVP_md4!%_GENERAL_NAME_dup!]& _OBJ_cleanup!)_PKCS12_x5092certbag!1_RSA_public_encrypt!6_SHA256_Final!7_UI_construct_prompt!q<_X509_NAME_ENTRY_set_object![A _X509_it!G_d2i_ECParameters!L_sk_deep_copy!V_ASN1_STRING_length_set)j3OZwA_ASN1_put_eoc!_BN_mod_lshift1_quick! _EVP_rc2_40_cbc!%_PEM_read_X509_CERT_PAIR!._X509_CRL_get_meth_data!@_X509_LOOKUP_ctrl!@_X509_VERIFY_PARAM_set_time!bF_X509v3_get_ext_by_NID!gI_d2i_PKCS8PrivateKey_bio!IN_sk_set!OV_a2i_IPADDRESS_NCJ_ASN1_BMPSTRING_it_ECDSA_METHOD_set_sign_setup_ENGINE_load_dynamic}_EVP_DigestFinal_ex_EVP_VerifyFinal#_PKCS12_SAFEBAG_new 1_PKCS7_add0_attrib_signing_time/3_X509_CRL_INFO_new?emB,}Y6L_BIO_f_reliable!@_EVP_CIPHER_CTX_test_flags!_EVP_aes_256_xts!Z$_PKCS5_PBE_keyivgen!2_X509at_get_attr!=I_d2i_BASIC_CONSTRAINTS!4L_i2d_ECPKParameters!Q _COMP_CTX_new_CRYPTO_THREADID_set_numeric_ENGINE_get_table_flagsb_ENGINE_register_all_digests_ERR_get_error_line_data_OCSP_id_get0_info,_OCSP_ONEREQ_get_ext *_PKCS7_DIGEST_it]2 _RSA_print6_SHA384_Update7_TS_TST_INFO_get_ext_countb;_UI_set_default_method]=_X509_check_purposeF'^QI4{ىq? _AES_options!S_NETSCAPE_X509_free!(_UI_method_get_closer!=_ASN1_T61STRING_new _BN_nist_mod_384] _CAST_set_key> _CRYPTO_ccm128_encrypt#_CRYPTO_set_locked_mem_ex_functions_DSAparams_print_ENGINE_register_digestsD_EVP_EncodeFinal_EVP_PKEY_new_mac_key"_i2d_OCSP_RESPDATAR_KRB5_PRINCNAME_freet'_OBJ_NAME_new_index(_OPENSSL_DIR_read,_PEM_write_DSAPrivateKey\/_PKCS12_PBE_add1_RSA_get_ex_data,6_X509_ATTRIBUTE_get0_object?7~'aDqP_BIO_sock_error!_DH_compute_key!_EVP_CIPHER_CTX_clear_flags!_RSA_verify_PKCS1_PSS!7_X509V3_EXT_conf_nid!=_X509_ATTRIBUTE_create_by_OBJ!>_X509_REVOKED_get_ext_count!C__ossl_old_des_fcrypt!J_d2i_TS_MSG_IMPRINT_bio!O _BN_hex2bn _CRYPTO_dbg_free<_d2i_RSAPrivateKey_fpN_ENGINE_set_default_digests_EVP_aes_128_ofb#_NETSCAPE_SPKAC_itZ( _sk_find_ex$V_X509_PUBKEY_set0_paramJB_X509_verify_cert_error_string Ix2\T<Ck)_DSO_set_method!__OPENSSL_cpuid_setup!,_OPENSSL_init! -_ASN1_item_ex_new| _BIO_f_asn1 _CMS_unsigned_add1_attr_by_OBJ@ _ENGINE_initi_PEM_write_bio_PKCS7_streamT0_PEM_write_X509_REQ_NEW/ _RSA_verify7_TS_TST_INFO_ext_free3;_X509_get_issuer_nameG_X509_OBJECT_retrieve_match Bq!_@U-M_ASN1_GENERALSTRING_new!>_BN_BLINDING_update!"_CRYPTO_set_dynlock_lock_callback!_DES_ede3_cbcm_encrypt! _DSA_verify!_EVP_idea_cfb64!% _OCSP_SINGLERESP_get_ext_by_OBJ!+_OCSP_set_max_response_length!,_X509_STORE_CTX_get1_issuer!4D_X509v3_add_ext!WI_d2i_OCSP_REQUEST!M _lh_insert!sU_ASN1_OCTET_STRING_dup_EVP_DecodeFinalu_EVP_PKEY_add1_attr! _pqueue_sizeU_RSA_padding_check_PKCS1_type_16_TS_ASN1_INTEGER_print_bio84L%eV?t_ASN1_UTCTIME_set! _BIO_write!_BN_BLINDING_get_thread_id!_CMS_digest_create!r _CRYPTO_gcm128_decrypt!_DH_set_ex_data!_PKCS8_PRIV_KEY_INFO_free!P4_TS_CONF_set_crypto_device!9_ASN1_PCTX_set_oid_flags_CRYPTO_gcm128_finish_DSA_generate_keym_EVP_MD_CTX_copy _EVP_PKEY_CTX_new _EVP_PKEY_meth_set_verifyctx"_i2d_DSA_PUBKEY_biozQ_PKCS12_certbag2x509crl_1 _RSA_print_fp6_TS_ACCURACY_set_micros8_USERNOTICE_frees=_X509_get_subject_nameG5{*Om_@_ASN1_BIT_STRING_new!_ASN1_T61STRING_it!_BN_GF2m_arr2poly!:_BN_MONT_CTX_copy!_CRYPTO_destroy_dynlockid![_EC_GROUP_new_by_curve_name!_ERR_reason_error_string! _OCSP_single_get0_status!,_PKCS5_PBE_add!2 _RAND_seed!T5_RSAPrivateKey_it!5_SHA384!7_SRP_Calc_server_key! 8_i2d_ASN1_T61STRING!P_ENGINE_get_ex_data_i2d_NETSCAPE_X509HR_POLICY_MAPPINGS_it4_RC2_cfb64_encrypts5_X509_STORE_CTX_get1_chain-D_X509_STORE_CTX_set0_paramD&OdzWn?5_ASN1_INTEGER_set!z _ASN1_parse!_AUTHORITY_INFO_ACCESS_new!D_EVP_DigestInit!_PKCS7_cert_from_signer_info!3 _SMIME_text!7_TS_REQ_get_ext_by_OBJ!9_TS_REQ_get_exts!9_X509_EXTENSION_new!@_X509_REVOKED_get_ext!C_d2i_PKCS8_PRIV_KEY_INFO_bio!^N_asn1_enc_freeJ _BN_bn2dec _BN_rshift _d2i_TS_TST_INFO_fpRO _DSA_up_ref_EC_GROUP_get_cofactor_EVP_CIPHER_CTX_new_i2d_DIRECTORYSTRINGFQ_i2s_ASN1_ENUMERATEDU_OCSP_RESPBYTES_new*aL2>#rW_CRYPTO_cts128_decrypt_block!%_ECDSA_set_default_method!_EVP_aes_128_cfb128!#_PKCS7_ENC_CONTENT_free!z2_POLICY_MAPPING_it!4_RSA_memory_lock!<6_X509_get_default_cert_dir_env!CG_ASN1_OCTET_STRING_cmp_BN_from_montgomeryN _d2i_KRB5_ENCDATA7M _EVP_des_ofb`% _i2d_X509hT_PKCS7_simple_smimecap94 _RSA_up_ref 7_TS_RESP_CTX_set_time_cb:_X509_NAME_setA_X509_PURPOSE_get_trustBS[6cF u' _BIO_puts!&_BN_gcd!T _DH_up_ref!_EVP_PKEY_asn1_set_public!!_EVP_PKEY_meth_set_paramgen!"_EVP_camellia_128_cfb8!$ _TS_REQ_free!9 _X509_REQ_it!.C!_X509_REVOKED_set_revocationDate!C_X509_TRUST_get0_name!hE__ossl_old_des_string_to_2keys!J_get_rfc3526_prime_3072! P_i2d_ASN1_VISIBLESTRING!P_i2d_PKCS8_PRIV_KEY_INFO_fp!qS_ASN1_generate_nconf3_BN_GF2m_mod_inv`_d2i_X509_REQ_fpO _EC_POINT_add_EVP_PKEY_set_type5#_PEM_write_EC_PUBKEY}/`(CuiLV: _BIO_push!"_CMS_ReceiptRequest_new! !_CMS_RecipientInfo_kekri_get0_id!G _CMS_add1_crl! _CONF_dump_bio!_CRYPTO_dbg_free!<_DSO_pathbyaddr!M_ENGINE_set_DH!__ENGINE_set_default!_EVP_PKEY_delete_attr!!_HMAC_CTX_cleanup!&_RSA_padding_add_PKCS1_OAEP!O6_X509_get_default_cert_file!KG_X509v3_get_ext!bI __ossl_old_des_ede3_cbc_encrypt!I__ossl_old_des_is_weak_key! J_o2i_ECPublicKey!U_ASN1_UTCTIME_set_BN_nist_mod_192N _BN_nist_mod_256X v3!SD_i_CONF_set_default_method!H!_CRYPTO_nistcts128_encrypt_block!_CRYPTO_set_add_lock_callback!_ECDSA_METHOD_set_app_data!_EVP_MD_CTX_destroy!+ _OCSP_resp_find!o,_UI_get_result_maxsize!<_X509_NAME_it!A_d2i_DSAparams!L_d2i_PKCS7_ENVELOPE!N_BN_nist_mod_224S _DSO_load< _MDC2_Init'_PBKDF2PARAM_free-_PEM_read_bio_PrivateKey/_UI_get0_user_data<_X509_REQ_add1_attr_by_txtBJ&_W5n{A_ASN1_TIME_it!-_ASN1_put_object!_ENGINE_get_pkey_asn1_meth!_ERR_load_TS_strings!_EVP_OpenInit!s _GENERAL_SUBTREE_free!& _NCONF_free!(_PEM_write_bio_RSA_PUBKEY!0_TS_REQ_set_policy_id!:_X509V3_EXT_add_conf!=_X509_TRUST_get_trust!E_X509_get_ext_by_OBJ!zG_i2d_PBKDF2PARAM!R_i2d_X509_REQ!T _BN_mod_mul _BN_sub _CRYPTO_nistcts128_encrypt_block_ENGINE_get_pkey_asn1_meths1_EVP_MD_do_allN _OBJ_txt2nidT)_RSAPublicKey_dup5;I )eZʾr_ASN1_STRING_type_new!_ASN1_TIME_new!2!_CMS_RecipientInfo_set0_password!y _CMS_unsigned_add1_attr!1_CRYPTO_THREADID_set_callback!_DSO_global_lookup!6_EVP_DigestVerifyFinal!_EVP_PKEY_paramgen_init!"_TS_TST_INFO_get_version!;_X509_EXTENSION_create_by_OBJ!{@_X509_get_default_cert_dir!_sk_is_sorted!0V__ossl_old_des_xcbc_encryptJ|?)Xr5H_P_BF_cfb64_encrypt!v_BN_MONT_CTX_init!_BUF_MEM_grow_clean! _KRB5_TKTBODY_it!'_MD4_Transform!' _SRP_Calc_x!8 _d2i_RSA_NET!N _CMAC_Init| #_ENGINE_set_default_pkey_asn1_meths_EVP_des_ede3_ofb?%_PROXY_POLICY_new 5_TS_RESP_CTX_set_status_info:_WHIRLPOOL_BitUpdate=_X509_add1_ext_i2dyF_X509_alias_get0F_X509_ATTRIBUTE_create>_X509_get_ext_by_criticalG_X509_get_ext_countG_X509_NAME_cmp}A_X509_NAME_ENTRY_itHA_X509_time_adj_exHyp(j8RF^0Я_ASN1_STRING_set0!_BIO_socket_nbio! _BN_mod_exp! _DSA_OpenSSL!L_EC_KEY_precompute_mult!_OPENSSL_gmtime_diff!,_RSA_private_encrypt!6_d2i_PKCS12_MAC_DATA!M_BIO_new_bn_dup_expandIK _d2i_CMS_bioOL _DES_decrypt3 _EC_POINT_dbl4_ENGINE_register_all_complete_EVP_CIPHER_CTX_rand_key_i2d_PBE2PARAMR_PEM_read_bio_X509_AUX*/_PEM_read_X509_CRL._RIPEMD160_Transform5_RSA_generate_key6_SHA512_Update7TEt,^k9_CMS_signed_get_attr! _NAME_CONSTRAINTS_new!'_PKCS7_ENC_CONTENT_it!2_TS_CONF_set_digests!,9__ossl_old_des_quad_cksum!?J_c2i_ASN1_OBJECT!sK_i2d_DSAPrivateKey_bio!bQ_idea_options!QU__ossl_old_des_fcryptJ_ASN1_BIT_STRING_name_print_d2i_DHxparams_L_DSO_set_default_methodR_EVP_MD_CTX_cleanup _EVP_PKEY_CTX_ctrl _i2d_ESS_SIGNING_CERTQ_PEM_write_DHxparamsV/_X509_EXTENSION_dup@ _X509_STORE_CTX_get0_policy_treeDj:SBv)^_ASN1_SET_ANY_it!b_ASN1_mbstring_ncopy!_EC_KEY_insert_key_method_data! _ENGINE_ctrl!(_ENGINE_get_pkey_asn1_meth_str!)_ERR_load_strings!_PKCS12_pack_p7data!1_PKCS7_get_smimecap!3_PROXY_POLICY_it!5_RAND_set_rand_engine!X5 _SHA1_Final!W7_X509_STORE_set_flags!6E_d2i_ASN1_BIT_STRINGK_EVP_PKEY_CTX_dup _i2d_ECPrivateKey_bioQ_i2d_X509_REQ_INFOT _PKCS7_final3_PROXY_POLICY_it5_RSA_padding_check_PKCS1_OAEP6_X509V3_extensions_printh>-Eku ;cNV_ENGINE_unregister_DSA!U_EVP_camellia_192_cfb1!$_PEM_write_RSAPrivateKey!/_PKCS7_set_type!"4_d2i_X509_NAME!O _ASN1_ANY_itn_ASN1_OCTET_STRING_free _b2i_PVK_bio$K_CMS_sign_receipt _EC_POINT_bn2point_ECDSA_METHOD_free_EVP_PKEY_decrypt!_i2d_ASN1_PRINTABLEP_i2d_PKCS7_ENVELOPER_i2o_ECPublicKeyT_PEM_read_EC_PUBKEYC._X509_NAME_dupA_X509_STORE_CTX_get_ex_dataYDq_yWKi4@' _BN_ucmp! _CONF_imodule_get_module!_DES_ede3_cbc_encrypt!_ECParameters_print!N_EVP_MD_block_size!H _OCSP_RESPDATA_free!* _X509_CRL_it!@_i2d_RSA_PUBKEY!S _sk_unshift!`V _BUF_strndup _CRYPTO_ccm128_decrypt_d2i_BASIC_CONSTRAINTS4L_DES_xcbc_encrypts_ENGINE_register_all_DH_EVP_PKEY_asn1_newk!_NETSCAPE_SPKI_b64_encodem( _X509_CRL_it@_X509_STORE_set_flags6E_X509_subject_name_hashH_X509_VERIFY_PARAM_freeEjȢsE'^Q1 _BIO_dump!_EVP_MD_CTX_test_flags!A _EVP_aes_256_ecb!E$%_OCSP_SINGLERESP_get_ext_by_critical!+_PEM_write_EC_PUBKEY!}/_TS_RESP_CTX_add_flags!6:_ASN1_PRINTABLE_free>_BIO_test_flags_BN_BLINDING_convert_d2i_ASN1_bytesL_EC_GROUP_get0_generator_ENGINE_get_pkey_meth8_EVP_rc4%_OSSL_DES_versionI-_PKCS12_PBE_keyivgen1_PKCS7_SIGNED_new2 _ZLONG_itIm]-S{D_CAST_set_key!> _CMS_unsigned_get_attr_by_OBJ!n*_EC_POINT_set_compressed_coordinates_GF2m!_OCSP_REQUEST_add1_ext_i2d!K*_PKCS12_PBE_add!1__ossl_old_des_ofb64_encrypt!"J_CMS_add_simple_smimecap- _EVP_sha & _MD4_Final' _NCONF_WIN32'_OCSP_basic_verify+_OCSP_REQUEST_delete_extX*_private_RC4_set_keyU_UI_get0_action_string< _UTF8_getc=_X509_add1_reject_objectF_X509_CERT_AUX_printQ?hJ9S[-|s_DHparams_print_fp!_TS_RESP_CTX_get_tst_info!W:_X509_CRL_INFO_free!x?_X509_VERIFY_PARAM_clear_flags!E_pqueue_print!U _BN_mask_bits _CRYPTO_is_mem_check_on\_EVP_PKEY_get0_asn1"_OTHERNAME_freeZ- _RC2_set_key5_RSA_null_methodJ6_RSA_padding_check_X9316_UI_add_info_stringS<_UI_dup_info_string<_X509_NAME_get_index_by_NIDA_X509V3_add1_i2d4>cKo@!-6}X_ENGINE_load_private_key!_ENGINE_register_DH!_EVP_seed_ofb!%_PKCS7_SIGNED_it!2_PKCS7_dataDecode!3_TS_TST_INFO_print_bio!;_i2d_KRB5_ENCDATA!R_i2d_X509_EXTENSION!T_ASN1_PRINTABLESTRING_new7_d2i_DSA_PUBKEYL_d2i_PKCS12_MAC_DATAM_DIRECTORYSTRING_it_ERR_get_string_table_i2d_PKCS7_DIGESTR _i2d_X509_bioT_i2d_X509_EXTENSIONST_PKCS7_set0_type_other3_RSA_new_methodE6 _sk_unshift`V_X509_ATTRIBUTE_set1_data1?_X509_PURPOSE_addQB#KC`j7zV0 _BN_bn2mpi! _DSA_print_fp!_PKCS12_pack_p7encdata!1 _RSA_flags!6_SXNET_add_id_ulong!8 _lh_retrieve!U_v2i_GENERAL_NAME!wV_ASN1_INTEGER_ito_BIO_clear_flags_CRYPTO_gcm128_decrypt_ctr32_d2i_X509_NAME_ENTRYO_ERR_load_EC_stringsY_ESS_SIGNING_CERT_dupc_i2d_TS_MSG_IMPRINT_fp(T_OCSP_request_add1_cert4,_PEM_read_PKCS7Q._PEM_read_PKCS8V._PKCS12_key_gen_uni1_PROXY_CERT_INFO_EXTENSION_it4_RSA_sign_ASN1_OCTET_STRING7_v2i_GENERAL_NAMES}Vm6è_Y,zL A_ASN1_OCTET_STRING_cmp!_ASN1_UTCTIME_check!_BN_mod_lshift1! _CMS_add_smimecap!4 _COMP_expand_block!_CRYPTO_xts128_encrypt!^ _DSA_new!_ENGINE_ctrl_cmd_string!2_ENGINE_get_cmd_defns!{_OCSP_resp_count!j,_PEM_write_bio_PKCS8PrivateKey!a0_ASN1_NULL_free_BN_BLINDING_free_CERTIFICATEPOLICIES_newU _d2i_RSAPrivateKey_bioN_EVP_CIPHER_block_size _EVP_CIPHER_CTX_ctrl_EVP_PKEY_CTX_ctrl_str _OCSP_REVOKEDINFO_free)+@L7,Vt^k_ASN1_NULL_free!_ASN1_OCTET_STRING_NDEF_it!_EVP_PKEY_CTX_dup! _EVP_PKEY_new!"_PEM_write_DHxparams!V/_RC2_cbc_encrypt!n5 _SHA384_Init!7_X509_CRL_get0_by_cert!?_bn_dup_expand!IK_i2d_ECPrivateKey_fp!Q_i2d_PKCS12_BAGS!R_CMS_is_detached _d2i_X509_ALGORaO)_EC_POINT_get_Jprojective_coordinates_GFpC_i2d_KRB5_AUTHENTBODY R_idea_set_encrypt_key\U_PEM_read_bio_X509_CRL9/ _RAND_poll?5_X509_LOOKUP_hash_dir@_X509_REQ_get1_emailBr}ȶ=!LjEZ0_ASN1_STRING_print_ex_fp!_BN_BLINDING_create_param!_BN_X931_generate_Xpq! _BN_div_recp!8 _BN_hex2bn! _PEM_read_bio_Parameters!/_PKCS7_get_issuer_and_serial!3 _SRP_Calc_u!8_UI_destroy_method!< _X509_new!H_i2d_X509_EXTENSIONS!T_ASN1_PRINTABLE_itD_ASN1_UNIVERSALSTRING_it_CONF_imodule_get_value!_ENGINE_get_pkey_asn1_meth_engine _ESS_CERT_ID_freeC_i2d_ECParametersQ_i2d_PKCS7_SIGNEDS_PEM_read_DSAparams/._PKCS12_MAC_DATA_it0*J6@hrYՙ_BIO_s_socket!Q_CERTIFICATEPOLICIES_it!N _CMS_ContentInfo_new! _ENGINE_get_next!_ENGINE_set_name!5_ERR_peek_last_error_line!_NETSCAPE_SPKI_set_pubkey!(_OCSP_CERTID_new!)_PKCS7_set0_type_other!3__ossl_old_des_xcbc_encrypt!J_sk_set_cmp_func!SV_BIO_get_host_ip~_BN_RECP_CTX_new_EVP_PKEY_print_private#_i2d_ASN1_INTEGERP_OCSP_SINGLERESP_get_ext_by_NID+_PEM_write_bio_ECPKParameters/0_PEM_write_X509_REQ/_PKCS7_add_attributeM38-Fl!`~S_ASN1_BIT_STRING_get_bit!_EVP_CIPHER_CTX_free!_PKCS12_BAGS_free!0_POLICY_CONSTRAINTS_new!4_RAND_set_rand_method!^5_UI_method_get_flusher!=_d2i_ASN1_T61STRING!K _CMS_RecipientInfo_ktri_cert_cmpW !_CMS_RecipientInfo_ktri_get0_algs_ _CRYPTO_lockc_CRYPTO_mem_ctrls_EC_GROUP_set_generatorP_ENGINE_get_pkey_asn1_meth_str) _i2d_PKCS8_fp}S_idea_set_decrypt_keyVU_KRB5_APREQBODY_it&_NETSCAPE_SPKI_freet(_OBJ_bsearch_ex_)_PEM_ASN1_read_bio-Nh(W̺t2};G_BIO_new_socket!_BIO_sock_cleanup!_CRYPTO_pop_info!_DSO_bind_func!_EVP_PKEY_add1_attr!! _EVP_mdc2!%_MD5_Transform!'_RSA_padding_check_PKCS1_OAEP!6_SEED_ofb128_encrypt!F7_TS_RESP_free!:_X509_NAME_get_index_by_NID!A_d2i_PKCS12_SAFEBAG!M _d2i_PUBKEY!N_i2d_DSA_PUBKEY_bio!zQ_i2d_RSAPrivateKey_bio!S _i2d_X509_fp!T_ASN1_item_d2i_fpY_Camellia_set_key_CRYPTO_gcm128_setiv_EVP_aes_256_cfb1284$_idea_ofb64_encryptKU5Wp.z"?bJ_ASN1_STRING_TABLE_cleanup!n_AUTHORITY_KEYID_new!W _BIO_ctrl!_DES_ofb_encrypt!)_EC_KEY_check_key!f_ERR_load_X509_strings!_EVP_PKEY_asn1_new!k!_EVP_PKEY_asn1_set_ctrl!q!_EVP_add_digest!#_i2d_RSAPublicKey_fp!S_BIO_ctrl_get_read_request_BN_BLINDING_update _CRYPTO_set_locked_mem_functions$_EC_POINT_point2bn_ECDSA_get_ex_data _EVP_PKEY_meth_findc"_PKCS5_PBKDF2_HMAC_SHA1!2_PKCS7_ENCRYPT_newt2_SRP_Calc_client_key8#AMf*Y6u_ASN1_BIT_STRING_name_print! _BIO_f_md!3_BIO_number_written!_CMS_get0_signers! _GENERAL_SUBTREE_new!&_X509_REQ_add1_attr!B_d2i_RSAPrivateKey_fp!N_ASN1_GENERALIZEDTIME_free_DSA_generate_parameterss_ENGINE_get_default_DSA_ENGINE_set_ciphers_EVP_PKEY_CTX_get0_pkey _OPENSSL_strcasecmp8- _RAND_cleanup5_TS_RESP_CTX_set_signer_cert: _X509_REQ_it.C`'i3xUH=_ASN1_item_free!_BIO_dump_indent! _CRYPTO_ccm128_init!_ENGINE_get_name!_EVP_PKEY_get1_DH! "_PKCS12_pack_authsafes!1_WHIRLPOOL_Update!=_X509_CRL_sort!c@_X509_REQ_add1_attr_by_txt!B_d2i_X509_VAL!O_sk_new!5V _BN_mod_add _d2i_DSA_PUBKEY_bioL_d2i_PKCS12_SAFEBAGM_EVP_aes_128_wrap#_i2d_EXTENDED_KEY_USAGEQ_OCSP_BASICRESP_get_ext_by_OBJ)_TS_CONF_set_signer_certL9_TS_MSG_IMPRINT_set_algo9'mt2I>Tc_AES_ecb_encrypt!>_DES_random_key!>_ECDSA_do_sign_ex!_ERR_error_string_n!_EVP_PKEY_decrypt!!_PKCS7_ENCRYPT_it!n2_PKCS7_RECIP_INFO_get0_alg!2_X509_set_pubkey!H _bn_expand2NK_d2i_DSA_PUBKEY_fpL_i2d_RSAPublicKeyS_KRB5_AUTHDATA_free ' _NCONF_new:(_OCSP_CERTID_it)_PKCS7_cert_from_signer_info3 _SEED_encryptA7_X509_CRL_get_ext_by_critical?_X509_PUBKEY_get/B6N[.tʱj(E|_ASN1_INTEGER_new!t_BN_MONT_CTX_set! _BN_uadd! _DH_OpenSSL!~_EVP_CIPHER_CTX_block_size!{_EVP_idea_ecb!%_PKCS5_v2_PBE_keyivgen!D2__ossl_old_des_ecb_encryptI_bn_mul_add_wordsRK _BUF_strnlen _COMP_zlib_cleanup_DH_compute_key_padded_EVP_CIPHER_CTX_iv_length_HMAC&_i2d_PKCS7_ENCRYPTR_TS_RESP_CTX_add_policyC:_TS_TST_INFO_set_tsa;_UI_new_methodT=_X509_get1_ocsp0GR7țLaA(xk_ASN1_TIME_free!(_EVP_EncryptUpdate! _EVP_PKEY_asn1_set_private!!_RAND_egd_bytes!&5_TS_ACCURACY_free!8 _UI_free!<_X509_REVOKED_get_ext_d2i!C_i2d_KRB5_TICKET!*R_CRYPTO_dbg_set_optionsT_DSO_bind_func_DSO_get_default_method_ERR_load_COMP_strings$_EVP_aes_192_wrap$_EVP_EncodeBlock_EVP_PKEY_asn1_add_alias7!_KRB5_APREQBODY_new& _RAND_statusd5_TS_TST_INFO_get_ext_d2ii;_X509_CRL_add_ext?_X509V3_add_valueA>_X509V3_EXT_val_prn'>f/N=s!W~_ASN1_BIT_STRING_set_asc!_ASN1_GENERALIZEDTIME_it! _ASN1_VISIBLESTRING_free!_CMS_SignerInfo_get0_signature! _DIST_POINT_it!;_EC_POINT_set_to_infinity!_ENGINE_get_default_DH!_EVP_PKEY_meth_new!v"_X509_PUBKEY_set!EB_i2d_ECDSA_SIG!Q_i2d_TS_TST_INFO_fp!]T_DH_free_ENGINE_add_conf_module_ERR_load_TS_strings_EVP_cast5_cfb64$_EVP_DigestVerifyInit_EVP_PKEY_add1_attr_by_NID!_i2d_OCSP_REVOKEDINFOR_TS_VERIFY_CTX_cleanup;8+hSs] H_EVP_camellia_128_ofb!$_OCSP_SIGNATURE_it!T+_TS_RESP_set_tst_info!:_X509_OBJECT_retrieve_match! B_d2i_RSAPrivateKey!N_i2d_TS_RESP_bio!BT_BIO_dump_indent_fp_BN_BLINDING_invert_BN_GF2m_mod_sqr_arr_DSA_get_ex_new_index_EC_get_builtin_curves_EVP_PKEY_add1_attr_by_OBJ#!_i2a_ASN1_INTEGER8P_KRB5_AUTHENT_free0'_OCSP_cert_to_id+_PKCS12_verify_mac1_TS_TST_INFO_get_ext_by_NIDL;3hs*WL`A_ASN1_primitive_new!_ASN1_template_d2i!_CRYPTO_memcmp!_ENGINE_get_table_flags!b_EVP_PKEY_base_id!!_GENERAL_NAMES_new!Q&_OTHERNAME_new!d- _SRP_Calc_A!7_asn1_GetSequence!J_d2i_DSA_PUBKEY_bio!L _EVP_Digest_PKCS7_SIGNED_free2_X509_check_ip_ascF(eow5=IY_DH_get_ex_new_index!_EVP_PKEY_bits!!_PEM_write_PrivateKey!/ _SRP_Calc_B!8_X509_load_crl_file!H_i2d_PKCS8PrivateKeyInfo_bio!6S_BIO_get_ex_new_indexx_BN_mod_exp_mont _CAST_decrypt( _DIST_POINT_new@_ECDSA_METHOD_set_flags_ECPKParameters_printA_i2d_RSAPublicKey_bioS_PKCS7_RECIP_INFO_get0_alg2_PKCS7_set_attributes4_RSA_verify_PKCS1_PSS7_TS_RESP_CTX_set_signer_key:_X509_NAME_ENTRY_create_by_NIDA_X509_STORE_get1_crlsE Wz9h+`Cs_ASN1_OCTET_STRING_dup!_ASN1_PRINTABLE_it!D_ASN1_STRING_set_by_NID!_BIO_new_accept!$_CRYPTO_set_dynlock_create_callback!_EC_POINT_dbl!4 _EVP_bf_ecb!h$_KRB5_APREQBODY_it!& _PKCS7_dup!3_SMIME_write_CMS!7_SMIME_write_PKCS7!7_X509V3_add_value_bool!G>_X509_policy_tree_free!AH_i2d_X509_REVOKED!T_i2o_ECPublicKey!T_lh_doall_arg!jU__ossl_old_des_quad_cksum?J_BIO_dump_indent_cb_EVP_aes_256_ctr@$_EVP_read_pw_string%_KRB5_APREQ_free&6oU!|F-`_CONF_imodule_get_flags!_DIST_POINT_NAME_it!*_ECDSA_verify!<_ENGINE_load_builtin_engines!n_EVP_CIPHER_CTX_iv_length!_OCSP_id_get0_info!,_TS_TST_INFO_get_policy_id!;__ossl_old_des_set_key!sJ_d2i_DSA_PUBKEY_fp!L_ASN1_GENERALIZEDTIME_new _BUF_strlcpy _ENGINE_set_ex_data_ERR_peek_last_error_line_i2d_AUTHORITY_INFO_ACCESSQ_i2d_X509_REVOKEDT _NOTICEREF_it(_OBJ_find_sigid_by_algs$)_PEM_write_bio_RSA_PUBKEY00CS\eu%_BIO_s_datagram!< _BN_mod_add! _EVP_PKEY_get1_RSA!"#_PEM_write_bio_PKCS8PrivateKey_nid!i0_X509_NAME_add_entry_by_txt!vA_X509_VAL_free!E_X509_get_ext!oG_X509_issuer_and_serial_hash!G_BN_mod_sub_quick2 _CONF_parse_listC_CRYPTO_128_wrapl _EC_KEY_free{_ENGINE_up_ref_EVP_EncryptInit_ex _OCSP_REQ_CTX_i2d*_PKCS7_dataFinal3_TS_RESP_get_status_info:_X509_set_issuer_nameH_X509_VERIFY_PARAM_lookupE7~WcF#q_CMS_RecipientInfo_set0_key!r $_CRYPTO_get_locked_mem_ex_functions!_ENGINE_get_digest_engine!_ENGINE_set_default_pkey_meths!_ERR_load_EC_strings!Y_EVP_PKEY_verify_recover!b#_PKCS7_SIGNER_INFO_set! 3_TS_CONF_load_cert!8_X509_STORE_CTX_get_ex_data!YD_d2i_TS_TST_INFO_fp!RO_ASN1_PRINTABLE_newJ _BF_encrypt_BIO_asn1_set_prefix_DES_check_key_parity_EC_GROUP_check_discriminanty_ECDSA_set_default_method_ENGINE_set_init_function-G&SvkԪc;_BIO_debug_callback! _BN_bn2hex! _CMAC_Init!| _OCSP_SINGLERESP_add_ext!h+_PEM_read_DSAparams!/._X509_ATTRIBUTE_free! ?_X509_REQ_set_extension_nids!IC _i2d_DSA_SIG!Q_i2d_PKCS7_SIGNED!S_i2d_TS_TST_INFO_bio!WT _BN_mod_exp _DHparams_print_fp_DIST_POINT_NAME_new0_i2d_ASN1_SET_ANYP _i2d_PBEPARAMR_i2s_ASN1_OCTET_STRINGU_OCSP_SINGLERESP_freev+_PEM_proc_type._PKCS12_BAGS_free0_TS_TST_INFO_add_ext!; _WHIRLPOOL=_X509_PURPOSE_get_idB-L!?4[qe_ASN1_GENERALSTRING_free!0_BIO_asn1_get_suffix! _BIO_gets!_COMP_zlib_cleanup!_DSO_convert_filename! _EVP_CIPHER_asn1_to_param!_EVP_CipherFinal!T_KRB5_APREQBODY_new!&_NETSCAPE_CERT_SEQUENCE_it!F(_OPENSSL_strncasecmp!>-_PEM_write_bio_DHparams! 0_X509_REVOKED_get_ext_by_OBJ!C_sk_set_cmp_funcSV_TS_ACCURACY_get_micros8_TXT_DB_get_by_index(<_UI_get_ex_data<_X509_REVOKED_get_ext_countC_X509_set_notBeforeHV3*@Lzla_AES_cfb128_encrypt!!_ASN1_TBOOLEAN_it!_CRYPTO_malloc!h_EVP_PBE_alg_add_type! _EVP_PKEY_CTX_get_cb! _ASN1_TBOOLEAN_it_CRYPTO_gcm128_init_d2i_X509_REQ_INFOO_ERR_load_ENGINE_strings__PEM_write_PKCS8/_PKCS7_add_attrib_smimecapF3 _pqueue_freeU_TS_REQ_get_version9_X509_add1_trust_objectFRdxDZo9*_ASN1_item_pack!_EC_KEY_set_enc_flags!_EVP_PKEY_meth_set_keygen!"_EVP_PKEY_set1_RSA!/#_PEM_read_DSAPrivateKey!". _RAND_event!+5_d2i_PBKDF2PARAM!M_d2i_PKCS7_SIGNED!+N_i2d_X509_PKEY!T_ASN1_TIME_adj_ENGINE_load_public_key_ENGINE_set_pkey_asn1_meths:_EVP_aes_128_xts#_EVP_PKEY_asn1_find_strJ!_EVP_PKEY_cmp_parameters!_EVP_PKEY_meth_set_verify"_OCSP_SERVICELOC_free<+_OCSP_SINGLERESP_add_exth+_X509_time_adjH_X509V3_add_value_uchar[>*wkeH5B\R_ASN1_STRING_data!_CRL_DIST_POINTS_it!Z_PKCS8_set_broken!4_PKEY_USAGE_PERIOD_it!4 _RSA_new!A6_i2d_TS_ACCURACY!T_a2i_ASN1_INTEGERJ_ASN1_TYPE_newm _BIO_f_md3_DIRECTORYSTRING_free_EC_POINTs_mul_ENGINE_get_init_function_EVP_PKEY_CTX_free _KRB5_ENCDATA_freeS'_KRB5_ENCKEY_itj'_OCSP_REQUEST_add_extR*_OCSP_SIGNATURE_newZ+_OPENSSL_gmtime_adj,_PKCS12_newpass1_PKCS7_DIGEST_newb2_X509_issuer_name_cmpG _X509_VAL_itE_X509V3_conf_freeb>v^l@)O0 _BUF_strnlen! _ENGINE_get_static_state![ _HMAC_Init!&_PKCS7_set_signed_attributes!4_X509_NAME_get_text_by_OBJ!A_X509_VERIFY_PARAM_lookup!E_ASN1_BIT_STRING_get_bit_BIO_ctrl_pending_d2i_TS_MSG_IMPRINTO_EC_POINT_oct2point_KRB5_TKTBODY_new'_OPENSSL_showfatal--_PKCS8_set_broken4_sk_sort\V_X509_ATTRIBUTE_it%?_X509_http_nbioGja{AN%8!_ASN1_GENERALIZEDTIME_set_string!("_ASN1_STRING_set_default_mask_asc!_EVP_SealFinal!q#_PEM_read_RSAPublicKey!u.#_PEM_write_bio_PKCS8_PRIV_KEY_INFO!r0_RAND_cleanup!5_X509_EXTENSION_create_by_NID!s@_CRL_DIST_POINTS_itZ_CRYPTO_get_mem_debug_functions/_CRYPTO_pop_info_EVP_DecodeBlockp _i2d_DHparams_ENGINE_set_name5_ENGINE_unregister_digests_EVP_aes_192_ecb$_EVP_PKEY_set1_RSA/#;yo\VfJ3( _DSO_ctrl!_EC_GROUP_set_generator!P_bn_mul_add_words!RK _d2i_SXNETID!O__ossl_old_des_ofb_encrypt*J_ASN1_BIT_STRING_new_BN_init _EVP_aes_192_ctr#_EVP_cast5_ecb$_i2d_X509_REQ_fpT"_PEM_write_bio_PKCS8_PRIV_KEY_INFOr0_RAND_load_file:5_X509_CRL_set_default_method.@_X509_NAME_printA_X509_STORE_add_crlD_X509_STORE_CTX_set_depthD/RivG:a _BIO_get_accept_socket!`_CMS_RecipientInfo_decrypt! _CRYPTO_thread_id!X_ERR_load_PEM_strings!_EVP_CIPHER_flags!_EVP_PKEY_meth_set_decrypt!" _PKCS12_init!1_PKCS7_add_certificate!S3_X509_NAME_digest!A_X509_get_ex_new_index!hG_ASN1_UTCTIME_adj_BN_mod_lshift_quick _DSO_up_refk_EVP_PKEY_CTX_get_data _OCSP_CRLID_it)_SHA256_Update7#_TS_CONF_set_clock_precision_digits9 _X509_add_extF_X509_CRL_get_ext_by_NID?Ϥ 4qI'e}W?_CMS_SignerInfo_verify! _COMP_zlib!_CRYPTO_ccm128_encrypt!_GENERAL_NAMES_it!K&_OPENSSL_asc2uni!,_PEM_write_X509_REQ_NEW!/_X509_get_signature_nid!G_d2i_DIRECTORYSTRING!dL_d2i_X509_EXTENSION!O_i2d_PKCS7_ENVELOPE!R__ossl_old_des_cbc_encryptI_BIO_asn1_get_prefix_d2i_TS_REQ_bio(O_d2i_X509_EXTENSIONSO_ENGINE_register_RAND_OCSP_copy_nonce,_OPENSSL_DIR_end,_PEM_read_bio_CMS._PKCS5_pbe2_set_iv-2_TS_ACCURACY_set_seconds8}Z)=Pf1Hr_ASN1_BIT_STRING_it!_CONF_get_number! _ENGINE_new!_ERR_peek_error_line!_EVP_PKEY_set_type!5# _OBJ_obj2nid!A)_OPENSSL_DIR_end!,_PEM_write_bio_PKCS8![0_PKCS7_ENVELOPE_new!2_X509V3_add_value!A>_d2i_ECPrivateKey!L_ASN1_PRINTABLESTRING_free) _BIO_dump_BIO_sock_error _BN_print_fp~ _ECDSA_do_verify_PEM_SealUpdate-_PKCS5_PBE_add2 _pqueue_findU_s2i_ASN1_INTEGERV_TS_REQ_get_ext_by_critical9_X509_EXTENSION_free@[D8!iPt(_BASIC_CONSTRAINTS_free!] _BIO_next!_DSA_generate_parameters_ex!z_NETSCAPE_SPKI_sign!(_PEM_write_bio_PKCS7!N0_PKCS5_PBKDF2_HMAC!2__ossl_old_des_cbc_cksum!I_d2i_KRB5_TKTBODY!MM_EC_POINT_clear_free$_ENGINE_get_RANDX_EVP_PKEY_get1_DSA"_EVP_PKEY_meth_set_ctrl"_MD4_Transform'_PEM_read_PrivateKeyh._PKCS5_pbe2_set(2_PKCS7_add_certificateS3_TS_RESP_get_tst_info:_X509_STORE_CTX_freeC_X509V3_EXT_CRL_add_nconf=8UImb(y _BIO_dump_fp!_BN_BLINDING_get_flags!_ENGINE_get_destroy_function!_ENGINE_unregister_pkey_meths!_ERR_load_BN_strings!_OCSP_basic_add1_nonce!+_PEM_write_PUBKEY!/_PEM_write_X509_AUX!/_X509V3_get_string!z>_X509_CRL_sign!X@_X509_EXTENSION_it!@_X509_REQ_free!B__ossl_old_des_random_seed!MJ_asn1_const_Finish!J_get_rfc3526_prime_2048!P_ASN1_ENUMERATED_set _BUF_strlcat _CMS_RecipientInfo_set0_pkey _CONF_modules_load0_{oN5>!Y_CRYPTO_cfb128_8_encrypt!%_CRYPTO_set_dynlock_destroy_callback!_OBJ_NAME_add!(_PEM_write_bio_ECPrivateKey!70_RSA_PSS_PARAMS_it!5_SHA512!7_X509_REVOKED_get_ext_by_NID!C_CRL_DIST_POINTS_new`_d2i_DSAPrivateKey_fpL_DSAparams_print_fp _DSO_merge@ _EC_KEY_copyr_i2d_ASN1_BOOLEANxP_lh_freeoU_PKCS12_x5092certbag1_RSA_padding_check_SSLv236_TS_MSG_IMPRINT_freef9 _TS_RESP_dup:_X509_NAME_add_entry_by_OBJoAA0Lu[8(l!_ASN1_UTCTIME_cmp_time_t! _ASN1_sign! _BF_decrypt!| _BIO_dump_cb!_EVP_PKEY_type!R#_PROXY_POLICY_free!4_SRP_check_known_gN_param!A8_TS_CONF_set_ess_cert_id_chain!29_UI_set_result!n=_X509V3_EXT_add_list!=%_X509_policy_tree_get0_user_policies!XH_d2i_EXTENDED_KEY_USAGE!L_i2d_PKCS7_DIGEST!R _ASN1_d2i_fp% _ASN1_put_eoc_ASN1_TYPE_freeT_ENGINE_set_RSAy_ENGINE_unregister_ECDH\_EVP_aes_192_gcm$_OCSP_BASICRESP_get_ext_by_NID)BPb̷r 2Z_BN_GF2m_mod_sqrt_arr!!_CMS_RecipientInfo_kari_get0_ctx! _CMS_signed_add1_attr_by_txt! _CONF_imodule_set_flags!_ECDSA_do_verify! _EVP_MD_type!i _EVP_aes_128_cbc_hmac_sha256!#_PEM_write_bio_EC_PUBKEY!>0_PKCS12_set_mac!1_PKCS7_DIGEST_it!]2_RSA_set_method!6_X509_PUBKEY_set0_param!JB_i2d_ASN1_UTCTIME!P _AES_wrap_keyi_d2i_PKCS7_SIGNER_INFO1N_ECDSA_do_sign_EVP_PKEY_asn1_add01!_OCSP_REVOKEDINFO_it0+_X509_NAME_get_text_by_NIDA젋'Rc~2pF_ASN1_ENUMERATED_new! _BN_num_bits!k _EC_curve_nid2nist!%_ENGINE_get_ssl_client_cert_function!R_KRB5_CHECKSUM_free!A'_OCSP_BASICRESP_get_ext_by_OBJ!)_TS_REQ_get_policy_id!9_ASN1_check_infinite_end_ASN1_GENERALSTRING_it7_ASN1_get_object?_CRYPTO_ccm128_init_EVP_camellia_256_ofb$_EVP_CIPHER_CTX_copy _EVP_enc_nullv% _EVP_mdc2%_OCSP_REQINFO_free:*_OCSP_request_add1_nonce;,_PKCS12_add_localkeyidG1_RSA_PSS_PARAMS_new5 _SHA_Final7-w!}gT7E _BIGNUM_it! _BN_print!z _PKCS12_get_attr_gen!{1_RSA_new_method!E6_X509_add1_reject_object!F_X509_supported_extension!H"__ossl_old_des_ede3_cfb64_encrypt!I_d2i_PKCS8_PRIV_KEY_INFO_fp!fN _lh_free!oU_DSO_METHOD_null)_EC_POINT_set_compressed_coordinates_GF2m_ECDSA_get_default_method_EVP_PKEY_meth_add0W"_i2d_PKCS12_bioR_KRB5_APREQ_it'_PEM_read_DHparams._PKCS12_decrypt_skeyk1 _X509_CRL_dup?_X509_LOOKUP_by_alias@0wm"=OdZG_ASN1_GENERALIZEDTIME_adj!_BN_BLINDING_convert_ex!_BN_mod_exp_mont_word! _EVP_des_ede_ofb![% _EVP_md_null!%_PKCS7_dataVerify!3_X509_delete_ext!F_d2i_TS_REQ_fp!-O_BIO_new_connect_EVP_PKEY_keygen_initQ"_i2d_DHxparamsAQ_i2d_OCSP_RESPONSER_i2d_PKCS8PrivateKey_nid_fp[S _sk_insert,V_string_to_hexlV_TXT_DB_insert.<_UI_destroy_method<_X509_policy_tree_get0_levelHH_X509v3_get_ext_by_NIDgITX;ju-ME_ASN1_PCTX_get_flags!_ERR_load_CRYPTO_strings!2_ERR_load_crypto_strings!_ERR_pop_to_mark! _EVP_rc4_40!% _FIPS_mode!<&_MD4!'!_RSA_padding_add_PKCS1_OAEP_mgf1!V6_TS_TST_INFO_free!9;__ossl_old_des_key_schedJ_ASN1_OBJECT_free_BIO_get_retry_reason_BN_mod_exp_mont_consttime _CMS_EncryptedData_decrypt _DES_quad_cksum9_EC_GF2m_simple_method[_EC_POINT_inverte_ENGINE_cmd_is_executable!_ERR_load_BN_strings_NAME_CONSTRAINTS_new'mDx7,Q@__CONF_modules_load!0_CRYPTO_cfb128_1_encrypt!_EVP_MD_CTX_create!% _EVP_MD_CTX_md!6 _MD5!'_OCSP_REQUEST_add_ext!R*_PKCS12_get_friendlyname!1_PKCS7_SIGN_ENVELOPE_new!(3_RSA_blinding_off!6_X509_NAME_dup!A_X509_check_ca!F_d2i_OCSP_RESPONSE!M_d2i_X509_REVOKED!O_i2d_X509_VAL!T_COMP_CTX_free_d2i_TS_RESP_fp_AES_wrap_key!i_ASN1_IA5STRING_new!Q_BIO_new_bio_pair!_BN_mod_exp2_mont! _PEM_SignFinal!-_PKCS12_certbag2x509crl!_1_PKCS12_x509crl2certbag!2_SHA!Q7_TXT_DB_insert!.<_X509V3_EXT_get_nid!>_X509_CRL_set_issuer_name!6@__ossl_old_des_ecb3_encryptI__ossl_old_des_ofb64_encrypt"J_ASN1_OCTET_STRING_set _ASN1_parse_Camellia_decrypt_CMAC_CTX_freeg _i2d_PKCS8PrivateKey_nid_bioSS_OCSP_response_status,_RSA_blinding_on6_SHA1T7wi>$G2Y_BIO_ctrl_get_write_guarantee!_Camellia_cfb128_encrypt!k_ERR_add_error_data!_EVP_bf_cfb64!c$ _X509_STORE_CTX_purpose_inherit!}D_X509_VERIFY_PARAM_set_trust!iF_X509at_add1_attr_by_txt!)I_CMS_add0_cert _CMS_stream(_CRYPTO_cfb128_encrypt_i2d_ACCESS_DESCRIPTIONeP_OBJ_create_objects)_OCSP_sendreq_new,_PEM_read_bio_DHparams._RSA_set_ex_data6_X509_EXTENSION_set_data@_X509_REVOKED_add1_ext_i2dzC]6q%gVL@_ASN1_STRING_set! _BIO_f_asn1! _PEM_read_PKCS8_PRIV_KEY_INFO![._TS_ACCURACY_new!8_TS_TST_INFO_get_ext!F;_X509_REVOKED_it!C _d2i_SXNET!O_d2i_X509_ALGORS!fO_ASN1_STRING_set0!_ASN1_STRING_set_default_mask_asc_CMS_ContentInfo_print_ctx _d2i_RSA_PUBKEYN_DIST_POINT_free6_i2d_ESS_CERT_IDQ_OPENSSL_cpuid_setup,_TS_MSG_IMPRINT_get_msgs9_TS_TST_INFO_get_extsp; _X509_verifyI_X509at_get_attr_by_OBJII_X509V3_get_value_int>fSZ-E>y_BIO_fd_should_retry!L_CMS_get1_ReceiptRequest! _CMS_unsigned_get_attr_by_NID!f _COMP_rle!_EVP_PKEY_cmp_parameters!! _MD4_Init!'_NAME_CONSTRAINTS_it!'"_X509_REVOKED_get_ext_by_critical!C_X509_STORE_CTX_set_flags!D_X509_subject_name_hash!H_X509_to_X509_REQ!H_i2d_PKCS12_fp!R_i2d_PrivateKey!S _BIO_vfree_CMS_get0_eContentType "_CRYPTO_get_ex_data_implementation_DH_get_default_method_ERR_load_PKCS12_stringsc>I'Tt}3_AES_unwrap_key!d_BIO_hex_string!_BN_GF2m_mod_div_arr!O_BN_consttime_swap!& _DES_read_password!I_EVP_EncodeUpdate!_OCSP_ONEREQ_get1_ext_d2i!*_OCSP_SINGLERESP_add1_ext_i2d!`+_PBE2PARAM_it!-_PEM_SignUpdate!-_PKCS12_parse!1_PKCS7_signatureVerify!24 _d2i_X509!]O_d2i_X509_SIG!O_BIO_get_callbackg_BN_rand_range _c2i_ASN1_INTEGERmK_d2i_PKCS7_ENCRYPT N_d2i_PKCS8_PRIV_KEY_INFO_fpfN_EVP_CipherUpdatej_EVP_PKEY_get_attr_count8"ANV7 x._o_EC_KEY_set_conv_form!_ENGINE_set_default_ECDH!_NOTICEREF_new!(_X509_PUBKEY_it!;B_X509_VERIFY_PARAM_new!F _BIO_s_socketQ_d2i_PKCS8_biomN_d2i_PKCS8_PRIV_KEY_INFO_bio^N_ECDH_KDF_X9_62o_i2d_X509_NAMET _PEM_SignInit-_PKCS7_SIGNER_INFO_sign3 _sk_pop_freeFV_UI_add_input_booleanY<_UI_dup_input_boolean<_v2i_GENERAL_NAMEwVRʎ$w8\f.E_ASN1_STRING_get_default_mask!_BN_nist_mod_224!S _BN_pseudo_rand! _BN_pseudo_rand_range! _DH_set_default_method!_ENGINE_ctrl_cmd!-_ENGINE_set_RSA!y_RSA_padding_add_PKCS1_type_1!m6_SRP_Calc_client_key!8_TS_REQ_delete_ext!9_X509_NAME_print!A_d2i_PUBKEY_bio!N_ASN1_STRING_type_BN_mod_exp2_mont _EVP_aes_192_cfb8#_EVP_PBE_cleanup _EVP_PKEY_derive_init!_PEM_write_ECPrivateKeyv/ _SXNET_new8_TS_RESP_CTX_add_failure_info.:cqW.>}J_BN_GF2m_mod_sqr!_CMS_SignerInfo_get0_signer_id! _ENGINE_get_finish_function!_ERR_get_error_line!_EVP_PKEY_CTX_ctrl_str! _EVP_PKEY_asn1_free!Q!_OCSP_basic_add1_status!+_TS_CONF_set_serial!F9_X509V3_NAME_from_section!->_X509_REVOKED_new!C_X509_time_adj!H__ossl_old_des_enc_write!I_d2i_TS_TST_INFO!GO_BN_GF2m_mod_sqrt_CRYPTO_ccm128_tag _DSA_print_EVP_CIPHER_do_all_sorted_FIPS_mode_set@&_OCSP_basic_add1_nonce+@̀wb4U%Hm_ASN1_STRING_type! _BN_mpi2bn!= _NETSCAPE_SPKI_get_pubkey!z(_OCSP_SINGLERESP_new!+ _OpenSSLDie!i-_RAND_get_rand_method!45_TS_CONF_set_ordering!:9_TS_REQ_print_bio!:_X509V3_EXT_conf!=_X509_check_ip!F_i2d_ASN1_UTF8STRING!P _asn1_ex_c2iK_EVP_aes_192_cbc#_EVP_aes_192_cfb128#_i2d_DSAPrivateKey\Q_X509_CRL_delete_ext?_X509_set_serialNumberH_X509_STORE_CTX_purpose_inherit}D_X509V3_EXT_conf_nid=nڜMD->^_ASN1_BIT_STRING_set!_ASN1_PCTX_get_str_flags!_ASN1_STRING_set_default_mask!_BN_mul!A _ECDH_OpenSSL!t_OCSP_BASICRESP_get_ext_by_NID!)_PKCS7_SIGNER_INFO_get0_algs!2_RSA_padding_add_PKCS1_type_2!u6!_TS_TST_INFO_get_ext_by_critical!Z;_i2d_DSAPrivateKey!\Q_i2d_OCSP_CRLID!jR_i2d_PKCS8PrivateKey_nid_fp![S_ASN1_TYPE_getY_BIO_asn1_get_suffix_ECDSA_METHOD_get_app_data_ERR_load_ECDH_stringsK_EVP_aes_192_ccm#_EVP_cast5_cbc$Tya9n/F _BIO_new_CMS!$_CMS_RecipientEncryptedKey_cert_cmp! _DES_cbc_encrypt!_EC_GROUP_get_cofactor!_ENGINE_get_default_ECDH!_ENGINE_load_cryptodev!v_OCSP_REQ_CTX_set1_req!*_PKCS7_set_digest!4_POLICYINFO_free!4!_X509_STORE_CTX_get_current_cert!BD_X509_get_default_cert_area!5G_X509_issuer_name_cmp!G_ASN1_mbstring_ncopy_OCSP_REQINFO_newE*_OCSP_SERVICELOC_newH+_OPENSSL_strncasecmp>-_PEM_write_bio_PKCS7N0_PEM_write_bio_PKCS8[06b y/pJ=U_BN_BLINDING_set_flags!_CERTIFICATEPOLICIES_free!G _DH_check! _DSO_flags!_OCSP_SINGLERESP_free!v+_PKCS12_verify_mac!1_X509_LOOKUP_by_alias!@_i2d_PKCS8PrivateKey_fp!LS_ASN1_TIME_free(_BN_GF2m_poly2arr_CRYPTO_gcm128_tag_CRYPTO_mem_leaks_cb~_d2i_OCSP_CERTID}M_DES_ecb3_encrypt_ERR_load_CRYPTO_strings2 _EVP_idea_ofb%_EVP_MD_CTX_test_flagsA _i2d_X509_VALT_OCSP_crl_reason_str ,_TS_RESP_create_response:L"Xe笒Av4nɊ_CMS_SignerInfo_get0_algs! !_CRYPTO_set_locked_mem_functions!$_EVP_MD_do_all_sorted!S _EVP_PKEY_get1_DSA!"_PKCS7_get_attribute!3_UI_get0_action_string!<_d2i_PKCS8_fp!rN _d2i_TS_RESP!2O_ASN1_put_object_BN_RECP_CTX_set _DHparams_dup_ENGINE_set_default_ECDSA_EVP_PKEY_verify_init\#_PKCS7_DIGEST_freeW2 _PKCS7_free3_X509_EXTENSION_new@_X509_STORE_CTX_get0_paramD_X509_VERIFY_PARAM_set1_ip#F_X509at_add1_attr_by_OBJ"IÃVjvJ:'` _BIO_free!W_CRYPTO_malloc_locked!m#_CRYPTO_set_ex_data_implementation! _ERR_release_err_state_table!_WHIRLPOOL_BitUpdate!=_X509_keyid_set1!G_BN_RECP_CTX_free_CRYPTO_THREADID_hash_d2i_ASN1_VISIBLESTRINGL_d2i_OCSP_SINGLERESPM_EC_KEY_get_enc_flags$_EC_POINT_get_affine_coordinates_GFpV_EVP_PKEY_get_attr$"_EVP_rc2_64_cbc% _MD4_Init'_PEM_write_bio_X509_CRL0_PKCS12_add_safeN1_X509_CRL_http_nbio@_X509_CRL_sortc@_X509_set_pubkeyH_Ԥj)DQ6!v_CMS_add1_recipient_cert!! _CMS_verify!~_CRYPTO_get_new_lockid!U_ENGINE_get_ex_new_index!_UI_get_result_minsize!<_X509V3_EXT_add_nconf_sk!=_X509_LOOKUP_file!@_CMS_ContentInfo_free _CRYPTO_get_new_dynlockidN _d2i_PBEPARAMM _EC_POINT_cmp*_ENGINE_get_destroy_function_ERR_load_ASN1_strings _EVP_PKEY_get_default_digest_nid?"_PKCS12_gen_macv1 _PKCS7_verifyK4_X509at_add1_attrI_X509V3_EXT_add_nconf_sk=_X509V3_EXT_get_nid>Bt}L0 Zh)_BIO_get_retry_reason!_CMS_add0_cert! _CMS_data!F !_CRYPTO_get_locked_mem_functions!_ECDH_set_method!_EC_GROUP_set_curve_GF2m!;_ERR_get_err_state_table!_OCSP_SERVICELOC_it!B+_PEM_proc_type!._TS_MSG_IMPRINT_dup!`9_X509_CERT_AUX_print!Q?_X509_NAME_cmp!}A_i2d_X509_ALGORS!qT_ASN1_UTCTIME_set_string_Camellia_ctr128_encrypt"_CRYPTO_set_ex_data_implementation _d2i_AUTHORITY_INFO_ACCESS!L_d2i_ECParametersL_DH_set_default_method@p䇳{cL3$X_ECDSA_do_sign! _EC_KEY_dup!w_ENGINE_set_init_function!_ERR_load_ASN1_strings!_i2a_ASN1_ENUMERATED!2P_ASN1_add_oid_module_ASN1_template_new%_CRYPTO_ctr128_encrypt_CRYPTO_dbg_reallocN_CRYPTO_mem_leaks_fp_d2i_PKCS7_ISSUER_AND_SERIALN_ENGINE_register_all_ciphers _ENGINE_register_RSA_EVP_camellia_256_ecb$_EVP_PKEY_meth_set_paramgen"_i2b_PrivateKey_bioMP_PKCS12_key_gen_asc1_PKCS7_set_signed_attributes4_RSA_padding_add_X9316Y+`KCxo6_DSO_new_method!H_EC_KEY_get0_public_key!_EVP_PKEY_set1_DSA!##_EVP_camellia_128_cbc!p$ _X509_SIG_it!C_X509_add1_trust_object!F _d2i_PKCS7!N__ossl_096_des_random_seedI_ASN1_TYPE_cmpO_d2i_PKCS7_SIGNED+N_ENGINE_get_pkey_asn1_meth_EVP_des_ede3_wrapE%_i2d_ASN1_T61STRINGP_i2d_EC_PUBKEYQ_OCSP_cert_id_new+_X509_get_pubkey_parametersG_X509_PUBKEY_new@B_X509_subject_name_hash_oldHˮ5e+M=s[_ASN1_PCTX_set_flags!_BN_GF2m_mod_exp_arr!Z_BN_is_prime_ex! _BUF_reverse! _CRYPTO_set_mem_ex_functions!D_ENGINE_set_table_flags!H_EVP_PKEY_assign!!_EVP_PKEY_meth_set_copy!"_EVP_camellia_192_ecb!$_NETSCAPE_SPKI_print!(_d2i_X509_REQ!O_i2d_RSA_PSS_PARAMS!S__ossl_old_des_options1J_BIO_get_callback_argm_EC_GROUP_have_precompute_mult_EVP_PKEY_asn1_copy>! _HMAC_Final&_i2d_PKCS8PrivateKey_bioES_OCSP_id_issuer_cmp,L3rc*@X_BIO_get_retry_BIO!_BN_to_ASN1_INTEGER! _CAST_decrypt!( _X509V3_EXT_nconf_nid!>_X509_get0_signature!%G_i2d_ASN1_ENUMERATED!~P_i2d_X509_CERT_AUX!T__ossl_old_des_random_seedMJ_BN_BLINDING_convert_ex_CMS_signed_get_attr_count!_EVP_CIPHER_CTX_get_app_data_EVP_DigestInit_ex _HMAC_Update& _OBJ_cleanup)_OCSP_BASICRESP_get1_ext_d2iz)_PEM_write_bio_CMS_stream0_PEM_write_bio_DHparams 0_PEM_write_ECPKParameterso/_PKCS7_add_recipient_3{eA+sK8X_ASN1_UTF8STRING_new!_ASN1_primitive_free!_BN_generate_prime_ex!^ _BN_value_one! _CMS_uncompress!,_ENGINE_set_cmd_defns!_EVP_PKEY_derive_init!!_EVP_PKEY_print_private!# _OCSP_id_cmp!,_PKCS8_PRIV_KEY_INFO_new!^4_idea_encrypt!FU_BIO_get_accept_socket`_BN_mod_exp_recp _d2i_OCSP_ONEREQM_d2i_OCSP_REQUESTM_EVP_aes_192_ofb $_EVP_PKEY_meth_copy]"_GENERAL_NAME_itx&_RSA_padding_check_none6_TS_REQ_ext_free9_UI_get_ex_new_index<<IqbW+}0_ASN1_i2d_bio!D_EC_GROUP_precompute_mult!-_HMAC!&_PKCS12_AUTHSAFES_it!0_PKCS7_RECIP_INFO_new!2_TS_ACCURACY_set_seconds!8_TS_CONF_load_key!8_TS_TST_INFO_set_ordering!;_X509_CRL_delete_ext!?_i2d_ASN1_BOOLEAN!xP_i2d_PKCS7_SIGN_ENVELOPE!S_CMS_unsigned_get_attr__d2i_TS_RESP_bio7O_EVP_cast5_ofb$ _i2d_ASN1_SETP_PKCS12_add_keyB1_TS_RESP_CTX_freeJ:_v2i_ASN1_BIT_STRINGqVp~[P(1F:եf̶_ASN1_seq_unpack!_BIO_callback_ctrl!_BIO_find_type!R_BN_clear_bit! _PKCS12_certbag2x509!Y1_X509_ALGOR_set0!>_X509_NAME_oneline!A_X509_REQ_get_attr!B_i2a_ASN1_STRING!CP_i2d_EXTENDED_KEY_USAGE!Q_i2d_USERNOTICE!cT _lh_delete!bU_c2i_ASN1_OBJECTsK_CONF_modules_finish$_EVP_CIPHER_CTX_set_key_length_EVP_PKEY_CTX_get_operation _lh_insertsU_PEM_read_X509._PEM_write_PKCS8_PRIV_KEY_INFO/_PKCS12_MAC_DATA_new0_PKEY_USAGE_PERIOD_free4C^O6nЀu#,T _BN_clear! _BN_is_bit_set! _DSA_SIG_free!Q_ENGINE_cleanup!_ENGINE_set_pkey_meths!A_EVP_read_pw_string!%_MDC2!'_OCSP_REQINFO_it!@*_OCSP_REQUEST_get_ext_by_NID!r* _SHA_Final!7_i2d_KRB5_CHECKSUM!R_i2d_OCSP_CERTID!_R_lh_node_usage_stats!U_d2i_EXTENDED_KEY_USAGEL _d2i_PKCS12M_ERR_peek_last_error_line_data_EVP_rc2_40_cbc%_i2d_X509_NAME_ENTRYT _i2d_X509_REQT_OPENSSL_asc2uni,_PKCS7_content_new3_SXNET_get_id_INTEGER8Ox;1Fh$\_CMS_SignerInfo_get0_pkey_ctx! _X509_ATTRIBUTE_count!>_i2d_ASN1_bytes!P_i2d_GENERAL_NAME!Q_DHparams_print_EC_KEY_set_private_key_EC_POINT_make_affinew_EVP_aes_256_cbc_hmac_sha256!$_EVP_PKEY_free!_i2d_ASN1_GENERALSTRINGP_i2d_GENERAL_NAMESQ_TS_TST_INFO_print_bio;_X509_get_ext_by_NIDtG_X509_NAME_onelineA_X509_STORE_CTX_set_ex_dataD_X509_STORE_load_locationsE_X509V3_get_stringz>_X509V3_set_nconf>g"tNY7B~*_ASN1_PCTX_get_cert_flags! _BIO_new_fd!_CRYPTO_gcm128_finish!_CRYPTO_num_locks!_EC_POINT_clear_free!$_RC2_ofb64_encrypt!5_X509_EXTENSION_set_data!@__ossl_old_des_options!1J_d2i_DSA_PUBKEY!L _i2d_PUBKEY!S!__ossl_old_des_ede3_cfb64_encryptI_ASN1_T61STRING_free_CAST_ecb_encrypt- _CONF_modules_unload=_DES_set_key_checkedT_PKCS12_AUTHSAFES_it0_TS_REQ_get_ext_by_NID9_X509_get_ex_new_indexhG_X509_print_exmH \wCȏ*iQ7_CRYPTO_get_lock_name!_DSA_set_ex_data!_EVP_PKEY_verify_init!\#_NETSCAPE_SPKAC_new!`(_OBJ_find_sigid_by_algs!$)_SMIME_read_PKCS7!7_TS_CONF_set_policies!@9_TS_MSG_IMPRINT_get_msg!s9_TS_REQ_to_TS_VERIFY_CTX!':_X509V3_get_d2i!o>_X509_OBJECT_idx_by_subject!A!_X509_STORE_CTX_get0_policy_tree!D_X509_policy_check!H_d2i_CRL_DIST_POINTS!TL_i2d_ASN1_IA5STRING!P_AUTHORITY_INFO_ACCESS_it=_CMS_add0_recipient_password _EC_KEY_check_keyfx>S_2hH# _ASN1_dup!/_ASN1_item_i2d!_CMS_add_standard_smimecap!: _CRYPTO_gcm128_setiv!_DES_cfb_encrypt!_EVP_DecryptUpdate!_EVP_PKEY_meth_copy!]"_OBJ_NAME_init!(_PEM_write_bio_X509_REQ_NEW!0 _RSA_free!6_d2i_ECDSA_SIG!L_i2d_ASN1_OBJECT!P_i2d_PKCS12_SAFEBAG!R _BN_CTX_free _CMAC_Finalx _d2i_GENERAL_NAMEM_d2i_OCSP_RESPONSEM_d2i_PKCS12_BAGSM_EVP_read_pw_string_min%_lh_node_usage_stats_bioU_RSA_generate_key_ex6`vlPC-6_BN_nist_mod_256!X _CRYPTO_get_mem_ex_functions!?_DSAparams_dup!_EVP_MD_CTX_set_flags!; _EVP_PKEY_print_params!#_EVP_aes_256_cbc_hmac_sha256!!$_EVP_aes_256_cfb128!4$_EVP_aes_256_ofb!O$"_OCSP_REQUEST_get_ext_by_critical!*_POLICY_CONSTRAINTS_it!4_X509_EXTENSION_dup!@_X509_NAME_get_text_by_NID!A_d2i_TS_RESP_fp!K2_CRYPTO_get_mem_debug_options!7_CRYPTO_set_id_callback!_DES_set_odd_parity!a_ESS_ISSUER_SERIAL_new!\ _RAND_egd!"5_X509_PURPOSE_get_id!B_X509_REQ_add_extensions!B_X509_REVOKED_delete_ext!C!__ossl_old_des_ede3_ofb64_encryptI_ASN1_STRING_TABLE_getu_ERR_load_X509_strings_EVP_des_ede_ecbV%_EVP_PKEY_copy_parameters!_EVP_PKEY_meth_freei"_NETSCAPE_SPKI_print(_OCSP_accept_responses_new+_TS_RESP_CTX_get_requestP:_X509_get1_email+GW%j=Lu.`6_ASN1_TIME_adj!_BIO_s_connect!7_CAST_encrypt!3 _CMAC_Final!x _DSO_free!_ENGINE_get_init_function!_EVP_des_ede3_wrap!E%_EVP_seed_cbc!%_NCONF_dump_bio!(_RSA_generate_key!6_TS_REQ_add_ext!9_TS_TST_INFO_get_exts!p; _UI_OpenSSL!=<"__ossl_old_des_ede3_ofb64_encrypt!I_d2i_USERNOTICE!XO_CMS_SignerInfo_get0_algs _CONF_load_bio_ENGINE_get_default_RSA_TS_TST_INFO_set_ordering;_X509_verify_certI9-ƼИ$B}crR _BIO_indent!_EC_POINT_add!_EC_POINT_dup!9_EVP_DigestFinal_ex!_OBJ_bsearch_!(_OCSP_REQUEST_get_ext_by_OBJ!z*_PKCS7_digest_from_attributes!3_TS_TST_INFO_set_policy_id!;_X509_REQ_to_X509!oC_d2i_PublicKey!N _BN_printz _d2i_CMS_ContentInfoBL_DES_read_2passwordsC _EVP_bf_ofbl$_i2d_OCSP_ONEREQoR _OpenSSLDiei-_RSA_X931_hash_id5_SMIME_crlf_copy7_X509_CRL_signX@_X509_REQ_extension_nidBB7UԋxJ`n(_DES_ncbc_encrypt!_EVP_EncryptInit!_X509_REVOKED_add1_ext_i2d!zC_d2i_GENERAL_NAMES!M _ASN1_TIME_it-_CAST_ofb64_encrypt8 _CRYPTO_new_ex_data_d2i_PKCS7_SIGN_ENVELOPE8N_d2i_X509_CRL_fpO_DSO_METHOD_dl_EVP_DecryptFinal_EVP_DigestSignFinal_i2d_KRB5_PRINCNAME$R_OCSP_BASICRESP_delete_extm)_RSA_get_default_method%6_SHA1_Transform_7_TS_REQ_get_ext_by_OBJ9_TS_RESP_verify_response:_X509_NAME_print_ex_fpA_X509_REQ_get_attrBN3v)Z@Dd_EVP_PKEY_verify!W#_OCSP_CERTSTATUS_new!)_OCSP_REQUEST_it!*_PKCS7_to_TS_TST_INFO!E4_RC4!5_TS_ACCURACY_dup!8_d2i_OCSP_SIGNATURE!M_i2d_DSA_PUBKEY!uQ _CMS_SignerInfo_set1_signer_cert _EVP_camellia_256_cbc$_i2d_PrivateKey_bioS_i2d_TS_ACCURACYT_RSA_blinding_off6 _TS_REQ_free9 _X509_get_extoG_X509V3_EXT_conf=2UG?%o|e_ASN1_PCTX_new!_OBJ_add_sigid!(_i2d_ASN1_OCTET_STRING!P_CMS_SharedInfo_encode _EVP_idea_ecb%_EVP_PKEY_derive_set_peer!_OCSP_BASICRESP_get_ext_count)_TS_ext_print_bio<_TS_TST_INFO_get_serial;_X509_ALGOR_dup>_X509V3_EXT_cleanup=_X509V3_section_free>cMBɴt~.ڕ_X509_NAME_ENTRY_create_by_txt!&A_X509_PUBKEY_new!@B_d2i_PKCS7_RECIP_INFO!%N_pqueue_iterator!U _BIO_freeW_CRYPTO_ofb128_encrypt_d2i_KRB5_AUTHENTBODY+M_d2i_RSA_OAEP_PARAMSN_EC_GROUP_free _EVP_sha1&_i2d_X509_CERT_AUXT_PEM_write_PUBKEY/_PEM_write_X509_CRL/_POLICY_CONSTRAINTS_new4p'^SeD3_ASN1_item_ndef_i2d! _BF_options!_OCSP_REQUEST_print!*_OCSP_SINGLERESP_get_ext_count!+_PEM_write_PKCS8PrivateKey!/_PKCS7_SIGNED_new!2 _X509_sign!H_i2d_ASN1_IA5STRINGP_PEM_read_bio_X509_CERT_PAIR1/ _RIPEMD1605_X509_load_crl_fileH_X509_sign_ctxH_X509_VAL_freeEf2xF ѐP>m[)_CMS_ContentInfo_free! _CONF_load_fp! _ENGINE_get_id!_EVP_EncryptInit_ex! _TS_RESP_new!:_X509V3_EXT_d2i!=_X509_CERT_PAIR_it!]?_CRYPTO_dup_ex_datab _DES_fcrypt_ECDSA_set_ex_data_EVP_set_pw_prompt&_i2d_PKCS7_SIGNER_INFOS_OSSL_libdes_versionO-_PEM_read_PUBKEYc._PEM_write_PrivateKey/_PKCS7_SIGN_ENVELOPE_it!3 _pqueue_printU_X509_LOOKUP_initA_X509_OBJECT_up_ref_countB_X509_REQ_digestB _X509_REQ_new3C_X509_REQ_set_version^C(Jg@yq1U_ASN1_PRINTABLE_type!P_BN_mod_lshift! _DSO_METHOD_dl!_ECDSA_METHOD_get_app_data!_OPENSSL_config!,_OPENSSL_no_config!'-!_X509_VERIFY_PARAM_set1_policies!:F__ossl_old_crypt!I _asn1_do_adb!J_d2i_GENERAL_NAME!M_BIO_sock_should_retry_BN_mod_lshift1 _d2i_GENERAL_NAMESM_d2i_X509_CERT_AUXvO_EVP_CIPHER_CTX_free _OBJ_NAME_get(_PEM_write_X509_CERT_PAIR/ _SHA512_Final7_X509_ALGOR_cmp>_X509_CRL_add0_revoked?tZLe{*6D"_BIO_ctrl_get_read_request! _BIO_new_fp!_BN_GF2m_mod_sqr_arr!_CRYPTO_remove_all_info! _DES_set_key!O_DSO_get_default_method!_NETSCAPE_SPKI_it!(_PEM_write_bio_CMS_stream!0 _SHA_Init!7 _SXNETID_new!s8_ASN1_item_unpack_CMS_signed_add1_attr_by_txt _ERR_reason_error_string  _i2d_PKCS7R_MDC2'_NETSCAPE_SPKI_get_pubkeyz(_PEM_write_bio_X5090_PKCS12_pbe_crypt1_POLICY_MAPPING_it4_X509_policy_level_node_count HT-|m>_I_ASN1_SEQUENCE_it!\_CMS_ContentInfo_print_ctx! _CRYPTO_THREADID_get_callback!_ENGINE_set_ECDSA!n_ERR_print_errors!_EVP_aes_256_cfb8!:$_OCSP_BASICRESP_add_ext!f)_PKCS7_SIGN_ENVELOPE_free!3_X509_ATTRIBUTE_set1_data!1?_X509_find_by_subject!G_X509_verify_cert!I_d2i_TS_TST_INFO_bio!LO _ENGINE_by_id_EVP_MD_CTX_copy_ex _EVP_PKEY_paramgen_init"_OBJ_NAME_remove(_OCSP_CERTID_free)_PKCS7_decrypt3_PKCS7_ENC_CONTENT_it2<oT^식Hh. _CRYPTO_cfb128_encrypt!_EC_GROUP_new_curve_GFp!&_EVP_PKEY_asn1_get0_info!]!_OCSP_RESPONSE_print!#+_OCSP_SIGNATURE_new!Z+_PKCS12_add_cert!-1_RSA_blinding_on!6 _UTF8_getc!=_X509_ATTRIBUTE_get0_object!?_X509_load_cert_file!G_d2i_TS_REQ_bio!(O _BIO_int_ctrl_CMS_ReceiptRequest_create0 _CMS_verify~_ERR_remove_state_PEM_read_bio_Parameters/_TS_REQ_get_exts9_X509_REVOKED_dupC_X509_subject_name_cmpH_X509_TRUST_cleanup]E_X509V3_EXT_d2i=dIlwX>2% _CRYPTO_set_mem_debug_functions!4_Camellia_cfb8_encrypt!y_DSAparams_print_fp!_DSO_get_filename!$_ENGINE_register_all_RAND!_EVP_PKEY_sign_init!G# _OBJ_new_nid!/)_OCSP_RESPDATA_it!*__ossl_096_des_random_seed!I_i2d_ASN1_SEQUENCE_ANY!P_i2d_POLICYINFO!S_lh_node_usage_stats_bio!U _sk_free!(V _asn1_ex_i2c K_ASN1_VISIBLESTRING_it _BIGNUM_it_DH_generate_key_NETSCAPE_SPKI_new(_OCSP_basic_add1_status+_OCSP_RESPBYTES_it*IQm!c۳Z{3<_ASN1_PCTX_set_str_flags!"!_CMS_SignerInfo_set1_signer_cert! _CMS_compress!A _EVP_PKEY_keygen_init!Q" _EVP_bf_ofb!l$_EVP_des_cfb64!%_PBEPARAM_new!-_RC2_ecb_encrypt!~5_X509_check_private_key!F_i2d_X509_NAME_ENTRY!T_BN_clear_free _ENGINE_removeZ_ERR_error_string_n_EVP_aes_128_cbc_hmac_sha1#_i2a_ACCESS_DESCRIPTION+P_i2d_ASN1_bio_streamP_TS_RESP_CTX_set_serial_cb:_TS_RESP_verify_token;_UI_add_verify_stringk<_UI_dup_verify_string<3ArN~֔( _BIO_s_null!M_CRYPTO_THREADID_hash!_CRYPTO_dbg_malloc!H_DSA_get_default_method!_EC_POINTs_make_affine!_ENGINE_unregister_DH!O_EVP_PBE_find! _EVP_PKEY_asn1_set_item!!_EVP_PKEY_meth_add0!W"_OCSP_RESPBYTES_new!*_RSA_set_ex_data!6_i2d_DISPLAYTEXT!LQ_i2d_KRB5_ENCKEY!R__ossl_old_cryptI_a2i_IPADDRESSJ_ASN1_IA5STRING_freeE_ASN1_UNIVERSALSTRING_free"_CMS_RecipientEncryptedKey_get0_id _d2i_DHparamsZL_EVP_CIPHER_key_length1ލ,^w9"hCO_CMS_EnvelopedData_create! _DSA_set_method!_ECParameters_print_fp!T_ENGINE_get_RSA!]_EVP_DecryptFinal_ex!_EVP_PKEY_meth_set_derive!"_KRB5_APREQ_new!'_OCSP_accept_responses_new!+(_TS_RESP_CTX_set_clock_precision_digits!q:_X509_ATTRIBUTE_get0_type!?_X509_CRL_set_nextUpdate!K@_X509_check_akid!F_d2i_PKCS12_bio!M__shadow_DES_rw_modeJ_ASN1_FBOOLEAN_it_BIO_socket_ioctl!_CMS_RecipientInfo_kari_set0_pkey> _CMS_unsigned_delete_attrPhr0~=M%Z_BN_new!J _CMS_verify_receipt!_ECDSA_set_ex_data!_ESS_SIGNING_CERT_new!p_PEM_read_bio_ECPKParameters!._X509V3_EXT_add_alias!=__ossl_old_des_key_sched!J_asn1_add_error!J_d2i_KRB5_PRINCNAME!BM_ASN1_seq_unpack _BN_mod_sub. _CMS_signed_get_attr_by_OBJ_d2i_DSAPrivateKey_bioL_d2i_PUBKEY_bioN_OCSP_REQ_CTX_set1_req*_PKCS7_ENC_CONTENT_new2_X509_CRL_get_ext? _X509_SIG_itC_X509_STORE_CTX_get0_parent_ctxD_X509_STORE_CTX_set_purposeDw>'i3S^J_ASN1_OBJECT_create! _BIO_accept!_CMS_SignerInfo_sign! _DES_pcbc_encrypt!3_EC_GROUP_get0_seed!_EC_POINT_cmp!*_KRB5_ENCKEY_free!d'_KRB5_PRINCNAME_it!z'_TS_CONF_set_signer_cert!L9_X509_LOOKUP_by_fingerprint!@_X509_STORE_CTX_set_purpose!D__shadow_DES_rw_mode!J_ASN1_TIME_set< _ASN1_verify1_DH_get_2048_256_DIST_POINT_NAME_free$_EC_GROUP_set_asn1_flag4_ERR_clear_error_i2d_CERTIFICATEPOLICIESQ _MD5_Update'_X509_check_trustF`q{XjL6@!,_ASN1_PCTX_get_oid_flags!_Camellia_decrypt!_DSAparams_print!_OPENSSL_uni2asc!D-_UI_get_input_flags!<_BASIC_CONSTRAINTS_itd _BIO_new_CMS_d2i_KRB5_TICKETHM _d2i_PKCS7N_DH_get_2048_224_EVP_PKEY_asn1_get_countd! _OPENSSL_add_all_algorithms_conf,_PEM_read_ECPKParameters5._PEM_write_RSA_PUBKEY/_PEM_write_X509_AUX/_PKCS12_setup_mac1_PKCS7_set_content4_PKCS8_encryptp4 _X509_printiH_X509V3_set_ctx>K2=+Ue t_ASN1_UTF8STRING_free!_BIO_get_callback!g _BIO_s_bio!3_EVP_aes_256_cfb1!.$_OCSP_request_is_signed!B,_X509_ALGORS_it!>_X509_EXTENSION_set_critical!@_X509_STORE_set_verify_cb!QE_X509_VERIFY_PARAM_get_depth!E_X509_sign_ctx!H_AES_cfb128_encrypt!_CRYPTO_gcm128_aad_EVP_rc2_cfb64%_i2d_TS_STATUS_INFOLT_PKCS7_dataDecode3_RSA_padding_add_PKCS1_PSS_mgf1e6_TS_RESP_CTX_get_tst_infoW:_TS_VERIFY_CTX_free;_X509_REQ_verifyuCgDLr*\6~_CAST_cbc_encrypt! _CRYPTO_free_ex_data!t_EC_KEY_generate_key!_EVP_PKEY_meth_set_ctrl!" _SXNET_free!8_X509_VERIFY_PARAM_set1_host!F_i2d_OCSP_RESPONSE!R_idea_cbc_encrypt!4U_idea_ofb64_encrypt!KU_v2i_GENERAL_NAMES!}V _BN_mod_sqr% _CRYPTO_get_ex_data_d2i_TS_TST_INFOGO_ENGINE_load_cryptodevv_GENERAL_NAME_new}&_i2d_KRB5_APREQBODYQ _SEED_set_keyL7_X509_ALGOR_new>_X509_find_by_subjectGQ`F-n{9_EC_GROUP_get_order!_ENGINE_add_conf_module!_ENGINE_get_ex_data!_EVP_CIPHER_key_length!1_KRB5_TKTBODY_free!'_TS_TST_INFO_set_accuracy!;_i2d_PKCS8PrivateKey_bio!ES_Camellia_cfb8_encrypty_CMS_RecipientInfo_encrypt _CMS_signed_get_attr_by_NID_ENGINE_get_next_ENGINE_unregister_DSAU _EVP_bf_cbc_$_EVP_EncodeUpdate_NETSCAPE_SPKI_set_pubkey(_OCSP_SINGLERESP_get_ext_count+_X509_CRL_get0_by_serial?_X509_LOOKUP_by_fingerprint@3IɁׯXc$>s_ASN1_const_check_infinite_end!_BN_X931_generate_prime_ex!_DSO_set_filename!Y_ENGINE_get_ECDSA!R_PEM_write_X509_CERT_PAIR!/_SHA512_Transform!7_TS_TST_INFO_get_ext_by_OBJ!S;_X509_STORE_CTX_set_cert!D_b2i_PublicKey_bio!9K_d2i_X509_REQ_INFO!O_ASN1_GENERALIZEDTIME_set!_ASN1_TIME_check _BIO_get_port _CMAC_CTX_news _OCSP_RESPDATA_it*_OCSP_single_get0_status,_PKCS7_get_issuer_and_serial3_PKCS7_SIGNED_it2 _RAND_screenO5Uq7~)Hc_CMS_get0_content! _DES_ecb3_encrypt!_ECDSA_METHOD_set_flags!_ERR_peek_last_error_line_data!_EVP_PKEY_CTX_get_data! _OCSP_archive_cutoff_new!+_TS_MSG_IMPRINT_set_algo!9_CERTIFICATEPOLICIES_itN _CRYPTO_ccm128_aad_i2d_ECPrivateKeyQ_OPENSSL_load_builtin_modules-_RSAPrivateKey_it5_SRP_get_default_gNU8_TS_REQ_set_version!:_X509_VERIFY_PARAM_set_trustiF,җD4k!T_x_EXTENDED_KEY_USAGE_new!5&_KRB5_TKTBODY_new!' _NCONF_WIN32!'_NETSCAPE_CERT_SEQUENCE_new!M(_OCSP_BASICRESP_get1_ext_d2i!z)_PKCS7_ENVELOPE_it!2_TS_RESP_CTX_add_md!=:_UI_add_input_boolean!Y<_UI_dup_input_boolean!<!_X509_VERIFY_PARAM_get0_peername!E_X509_signature_dump!H__ossl_old_des_set_odd_parityzJ_ASN1_TIME_diff#_EC_GROUP_get_order_EC_POINT_point2hex_ENGINE_get_name_EVP_PKEY_get1_DH "_i2d_OCSP_CRLIDjR_i2d_PUBKEY_bioS _i2d_TS_REQ/TrS\h0{:D_BF_ecb_encrypt!#_CRYPTO_get_ex_data_implementation!_GENERAL_NAME_it!x&_KRB5_ENCDATA_it!Y'_OCSP_response_status_str!,_PEM_SignInit!-_RSA_PSS_PARAMS_free!5_USERNOTICE_free!s=_X509_ALGOR_it!>_d2i_ASN1_IA5STRING!K_d2i_DSAPrivateKey_fp!L_d2i_PUBKEY_fp!N _sk_insert!,V_ASN1_VISIBLESTRING_free_CRYPTO_add_lock_CRYPTO_THREADID_get_callback_EC_GROUP_set_curve_nameI_EC_POINT_copy/_i2d_PublicKeyS_OCSP_REQUEST_it*_OCSP_sendreq_bio,$wQ.gC8_ASN1_TYPE_get!Y _BIO_nwrite! _BN_nist_mod_384!] _CONF_module_add!_ECDH_compute_key!y_ECDH_set_default_method!)_EC_POINT_set_compressed_coordinates_GFp!_ENGINE_set_default_ciphers!_ERR_load_OCSP_strings!x_EVP_MD_pkey_type!^ _EVP_PKEY_CTX_set_data!!_KRB5_ENCKEY_new!o' _SHA512_Init!7_TS_MSG_IMPRINT_get_algo!l9 _BIO_nwrite0_BN_BLINDING_set_thread_id_EC_KEY_up_ref "_ENGINE_unregister_pkey_asn1_meths_PKCS7_RECIP_INFO_set2mF8_Ox/_ASN1_mbstring_copy!_CMS_SignerInfo_get0_md_ctx! _CMS_add0_crl! _CRYPTO_dbg_get_options!A_EVP_PKEY_cmp!!_NETSCAPE_CERT_SEQUENCE_free!>(_PEM_read_RSAPrivateKey!n._PKCS12_add_safes!S1_PKCS5_pbkdf2_set!>2 _RAND_bytes!5_d2i_CMS_ContentInfo!BL_d2i_X509_PKEY!O_ASN1_PCTX_set_cert_flags_BIO_set_callback_arg` _CMAC_Update _CMS_EnvelopedData_create _DH_compute_key_DISPLAYTEXT_free_ERR_load_RAND_strings _EVP_bf_cfb64c$ _EVP_idea_cbc%,aHqӌi%8U_ASN1_OBJECT_new! _BN_add_word! _BN_bin2bn!_CRYPTO_new_ex_data!_ENGINE_get_pkey_meth_engine!>_PEM_read_bio_X509_REQ!@/_X509_STORE_CTX_new!wD _lh_strhash!U _bn_add_words?K!_CMS_RecipientInfo_kari_get0_reks, _CONF_dump_bio_CRYPTO_gcm128_encrypt_DSO_get_filename$_DSO_set_method__ENGINE_get_default_DH_KRB5_AUTHENTBODY_free'_PEM_read_DSAPrivateKey"._PKCS8_pkey_get0u4_TS_ACCURACY_free8_TS_RESP_CTX_set_extension_cb: _TXT_DB_read3<(x\4jCNҬ_BIO_set_callback!Z_ENGINE_get_RAND!X_PKCS12_PBE_keyivgen!1_PKCS7_add1_attrib_digest!73_RC2_cfb64_encrypt!s5_TS_RESP_CTX_add_policy!C:_TS_RESP_CTX_get_request!P:_X509_PURPOSE_get0_name!cB_X509_add1_ext_i2d!yF_d2i_POLICYINFO!~N_d2i_RSA_PUBKEY!N _i2d_TS_RESP!=T__ossl_old_des_set_keysJ_ASN1_STRING_print%_EC_POINT_set_affine_coordinates_GF2m _lh_deletebU_PEM_write_bio_X509_REQ_NEW0_PKCS7_ATTR_SIGN_itK2_X509_REQ_add_extensions_nidBby;mUI._CMAC_CTX_cleanup!\ _CRYPTO_cleanup_all_ex_data!_CRYPTO_cts128_encrypt!-_EC_GROUP_set_asn1_flag!4_ERR_print_errors_fp!_ESS_ISSUER_SERIAL_dup!N_NETSCAPE_X509_it!(_PKCS12_SAFEBAG_free!1_TS_TST_INFO_set_msg_imprint!;_TS_VERIFY_CTX_cleanup!;_d2i_PROXY_CERT_INFO_EXTENSION!N_i2d_CERTIFICATEPOLICIES!Q_i2d_X509_ATTRIBUTE!vT _ASN1_GENERALIZEDTIME_set_string(#_CRYPTO_set_dynlock_create_callback_ERR_load_UI_strings _EVP_bf_ecbh$΍)H[;ym2_BIO_clear_flags!_BIO_copy_next_retry!_BN_rand_range! _ENGINE_get_DH!C_EVP_PKEY_get1_EC_KEY!""_PEM_read_bio_PKCS8_PRIV_KEY_INFO!. _RSA_padding_add_PKCS1_PSS_mgf1!e6_TXT_DB_create_index!< _TXT_DB_free!#<_TXT_DB_get_by_index!(<_UI_UTIL_read_pw_string!F<_d2i_ECPrivateKey_bio!L_ASN1_template_d2i_CMAC_CTX_get0_cipher_ctxl _DES_ede3_cfb64_encrypt_EC_KEY_insert_key_method_data_ENGINE_set_default_pkey_meths_EVP_CIPHER_iv_length+=rXgL0#_ASN1_GENERALIZEDTIME_check!_EC_KEY_get_conv_form!_EVP_CIPHER_CTX_cipher!_EVP_PKEY_save_parameters!#_PEM_read_EC_PUBKEY!C._PKCS7_add_recipient_info!e3_SMIME_write_ASN1!7_X509_get_pubkey_parameters!G_d2i_OCSP_REVOKEDINFO!M _BN_kronecker _CMS_RecipientInfo_get0_pkey_ctx $_CMS_RecipientInfo_kari_get0_orig_id# _d2i_KRB5_ENCKEY=M_EVP_PKEY_asn1_findD!_NCONF_get_string&(_X509_get_default_cert_dir_envCG_X509_REVOKED_get_ext_by_NIDCs\j"NFԃ8-_BIO_dgram_non_fatal_error!_CMS_sign_receipt! _CONF_modules_free!*_ERR_load_PKCS7_strings! _EVP_sha256!&_PEM_read_bio_RSA_PUBKEY!/_X509V3_extensions_print!h>_X509_CRL_diff!?_X509_VERIFY_PARAM_get0_name!E_bn_add_words!?K_i2d_PUBKEY_fp!S_DH_generate_parameters_EC_KEY_generate_key_RIPEMD160_Final5_sk_popBV _TS_REQ_dup9_X509_VERIFY_PARAM_get_depthE_X509V3_set_conf_lhash>r l5c{ZH>._ASN1_SEQUENCE_ANY_it!V_BN_get0_nist_prime_521! _BN_nnmod!g _DHparams_dup!_ENGINE_set_RAND!t!_OPENSSL_add_all_algorithms_conf!,_PEM_read_X509!._i2d_ASN1_SET!P _sk_find! V_ASN1_item_pack _BN_CTX_start+_CMS_ReceiptRequest_get0_values _DSO_newD_ECDSA_METHOD_set_verify_X509_get_ext_d2iG_X509_NAME_ENTRY_create_by_OBJA_X509_policy_checkH_X509_STORE_CTX_set_trustD6W=*Icrz_CONF_dump_fp!_EC_GROUP_get_curve_name!_EVP_CIPHER_CTX_nid! _SXNET_it!8_X509_ATTRIBUTE_dup!?_X509_REQ_get_attr_count!C_d2i_X509_ATTRIBUTE!kO_i2d_AUTHORITY_INFO_ACCESS!Q _d2i_TS_RESP2O_get_rfc3526_prime_4096P_HMAC_CTX_init&_KRB5_CHECKSUM_freeA'_NETSCAPE_X509_new(_OCSP_CERTSTATUS_it)_PKCS12_item_i2d_encrypt1_PKCS5_PBKDF2_HMAC2_PKCS7_ENVELOPE_new2 _TS_RESP_new:_UI_method_get_closer=_X509_set_ex_dataH_X509_signature_printHQcؖ4kxY@$_ASN1_item_d2i!N _BN_sub_word! _CRYPTO_gcm128_encrypt_ctr32!_ERR_print_errors_cb!_EVP_PKEY_CTX_get_keygen_info! _HMAC_Final!&_OCSP_cert_to_id!+ _PKCS1_MGF1! 2_UI_get_default_method!<_X509_REQ_get_pubkey!(C _X509_find_by_issuer_and_serial! G_X509at_delete_attr!0I_i2d_ECPrivateKey!Q _bn_sqr_words]K _bn_sub_wordsbK_PEM_write_DHparamsP/_PKCS7_digest_from_attributes3 _X509_REQ_dupB _X509_STORE_CTX_get_ex_new_index`D_X509_STORE_CTX_set_timeDT`;h#-wF_BIO_set_flags!p _BN_dec2bn!0 _CMS_is_detached! _ERR_set_implementation!,_EVP_CIPHER_do_all!_TS_MSG_IMPRINT_set_msg!9_X509_CERT_PAIR_new!c? _d2i_TS_REQ!$O__ossl_old_des_pcbc_encrypt8J_ASN1_PCTX_set_flags_BIO_ctrl_get_write_guarantee _BIO_f_buffer)_CMS_signed_get0_data_by_OBJ_d2i_PrivateKey_bioN_DES_key_sched_DIST_POINT_it;_ENGINE_unregister_ciphers_ERR_peek_error_EVP_PKEY_print_params#_lh_node_usage_statsUYrf!ތO2A_ASN1_PCTX_set_nm_flags!_ASN1_TYPE_get_int_octetstring!^_CONF_module_get_usr_data!_EC_GROUP_get_mont_data!_ENGINE_get_prev!M_PKCS7_set_attributes!4_POLICYQUALINFO_free!4_TS_TST_INFO_set_nonce!;_X509_NAME_print_ex_fp!A_X509_PUBKEY_get0_param!4B"_X509_policy_node_get0_qualifiers!8H_d2i_ASN1_TYPE!K_i2d_OCSP_CERTSTATUS!dR_i2d_OCSP_SIGNATURE!R_CRYPTO_THREADID_set_pointer_ENGINE_get_DSAH_EVP_EncryptFinal_EVP_MD_block_sizeH 'fM[4v=_DSA_sign_setup!_ECDH_KDF_X9_62!o_EC_GF2m_simple_method![_EC_POINT_copy!/_ENGINE_load_ssl_client_cert!_EVP_camellia_128_cfb128!}$_NCONF_get_section! (_X509_VERIFY_PARAM_set_depth!BF_CONF_imodule_set_usr_data_DSA_new_PKCS7_sign_add_signer+4_POLICYINFO_new4_TS_REQ_get_msg_imprint9_TS_TST_INFO_get_msg_imprintv;_X509_CRL_digest?_X509_get0_pubkey_bitstrG_X509V3_add_value_bool_nfN>zInך/b#9W_ASN1_STRING_new! _BN_rand! _CONF_modules_finish!$_CONF_parse_list!C_CRYPTO_ctr128_encrypt_ctr32!_EVP_PKEY_asn1_get_count!d!_PKCS12_pbe_crypt!1_X509_TRUST_cleanup!]E_ASN1_PCTX_get_flags_BIO_get_retry_BIO_d2i_ASN1_UTF8STRING L_DSO_get_method1_ENGINE_get_cipher_enginen_EVP_CipherInit_ _EVP_des_cfb1% _EVP_des_cfb8 %_GENERAL_NAME_cmpW&_i2d_OCSP_SINGLERESPR_i2d_PROXY_CERT_INFO_EXTENSIONS_X509_NAME_get_text_by_OBJAVzF9)doM _BN_rshift1! _EC_GROUP_get_basis_type!_ERR_get_next_error_library!_EVP_PKEY_decrypt_old!! _MD5_Final!'_PBEPARAM_free!-_TS_TST_INFO_get_ext_d2i!i;_X509_CERT_AUX_new!K?_i2d_KRB5_TKTBODY!/R _BUF_MEM_new _CMS_compressA _CMS_SignerInfo_verify_content _CRYPTO_ex_data_new_classh_DES_ede3_ofb64_encrypt_ERR_func_error_string_EVP_PKEY_meth_get0_infoo"_i2d_ASN1_UNIVERSALSTRINGP_MD5_Transform' _NCONF_load,(_NETSCAPE_CERT_SEQUENCE_itF(b|mUF*8_BN_GF2m_mod_exp!U_ENGINE_get_pkey_meth!8_ENGINE_register_digests!D_OBJ_NAME_do_all_sorted!(_OCSP_request_onereq_get0!P,_PKCS7_ATTR_VERIFY_it!Q2_PKCS7_DIGEST_new!b2_RSA_padding_check_SSLv23!6_TS_ASN1_INTEGER_print_bio!8 _TS_REQ_dup!9_X509_CRL_sign_ctx!]@_X509_check_email!F _asn1_ex_c2i!K_ASN1_PRINTABLE_typeP _BIO_gets_BIO_set_tcp_ndelayu_EC_POINT_free>_ECDSA_METHOD_set_app_data_ENGINE_get_digest_engine_ENGINE_get_last)3YlGt?Oa_BIO_method_type!_CRL_DIST_POINTS_new!`_ECDSA_SIG_free!_EC_POINT_point2hex! _EVP_sha224!& _HMAC_Update!&_PEM_read_PKCS7!Q. _b2i_PVK_bio!$K_d2i_ASN1_UTCTIME!L _d2i_CMS_bio!OL_d2i_PKCS7_ENC_CONTENT!N_i2d_CRL_DIST_POINTS!6Q_i2d_RSA_PUBKEY_fp!T_b2i_PrivateKey_bio.K_CMS_RecipientInfo_type _EVP_aes_128_cfb1#_EVP_aes_128_cfb8#_EVP_PKEY_meth_set_derive"_i2d_X509_CRL_bioT$_PEM_read_bio_NETSCAPE_CERT_SEQUENCE. _PKCS7_dup3YKn˾b4-_AES_bi_ige_encrypt!_CRYPTO_get_id_callback!  _DSO_merge!@*_EC_KEY_set_public_key_affine_coordinates!_ENGINE_unregister_ECDH!\_HMAC_CTX_init!&_PEM_read_bio_PKCS7!.$_X509_STORE_CTX_get0_current_issuer!D _X509_STORE_CTX_get0_parent_ctx!D_asn1_do_lock!J_d2i_PrivateKey_fp!N_AES_unwrap_keyd _BIO_ctrl _BN_CTX_new'_d2i_TS_MSG_IMPRINT_bioO_EC_GROUP_get_seed_len!_ENGINE_get_load_privkey_function_EVP_des_ede_ofb[%_GENERAL_NAME_dup]&Vb~?q/K_ASN1_generate_v3!9_CMS_SignerInfo_verify_content! _CMS_signed_get_attr_by_NID!_EVP_CipherFinal_ex!Y_OBJ_NAME_cleanup!(_OBJ_find_sigid_algs!)_OCSP_REQ_CTX_add1_header!*_X509_NAME_entry_count!A _a2i_ipadd!J_d2i_DHparams!ZL_d2i_NETSCAPE_CERT_SEQUENCE!SM_d2i_OCSP_CERTID!}M_i2v_GENERAL_NAME!(U_ASN1_TYPE_set_octetstring_CRYPTO_strdupS_EVP_EncryptUpdate _i2v_GENERAL_NAMES.U_SRP_VBASE_free8_X509_TRUST_get_flagszE6?N+fX~Ʈs_ASN1_object_size!_AUTHORITY_KEYID_free!K_BN_GF2m_poly2arr!_CMAC_CTX_copy!b _CRYPTO_ex_data_new_class!h_EVP_DecryptInit!_GENERAL_NAME_set0_value!&_OCSP_REQ_CTX_nbio_d2i!*_OCSP_sendreq_new!,_PEM_ASN1_read!-_PKCS12_unpack_p7data!1_X509_VERIFY_PARAM_get0!E__ossl_old_des_cryptI_ASN1_item_ex_freep_ASN1_PCTX_get_nm_flags_ASN1_SEQUENCE_ANY_itV _BIO_s_accept. _BN_GF2m_add5_BN_pseudo_rand_range _BN_value_one _CMAC_resume j5vP&B]_ASN1_TYPE_set1!w_BIO_snprintf!{_PEM_read_bio_ECPrivateKey!._RSA_get_ex_new_index!16_RSA_padding_check_none!6_TS_RESP_get_tst_info!:_X509_CRL_add1_ext_i2d!?_X509_EXTENSIONS_it!m@__ossl_old_des_pcbc_encrypt!8J_d2i_AUTHORITY_KEYID!(L_COMP_expand_block_DSO_METHOD_dlfcn_EC_GROUP_new_curve_GFp&_ENGINE_get_prevM!_ENGINE_set_load_privkey_function_EVP_add_cipher#_i2d_ASN1_NULLP_i2d_NETSCAPE_CERT_SEQUENCE5RV!aC,9|qhL_ASN1_PCTX_get_nm_flags!_EVP_DecodeUpdate!_EVP_PKEY_set_type_str!;#_UI_set_ex_data!d=_X509_add_ext!F_d2i_OCSP_RESPIDM_DES_read_passwordI _DH_OpenSSL~_DH_set_method_OCSP_sendreq_nbio,_PKCS12_pack_p7encdata1_X509_check_ipF_X509_check_issuedF)Fs~>kQ 4a_CMS_get0_eContentType! _ECDSA_SIG_new!_EVP_CipherUpdate!j_EVP_PBE_cleanup! _EVP_rc2_cbc!%_NETSCAPE_X509_new!(_PEM_read_bio_X509_CERT_PAIR!1/_PKCS12_BAGS_it!0 _PKCS7_free!3_X509_REQ_INFO_new!B_X509_REQ_sign!dC_d2i_DIST_POINT_NAME!tL_d2i_ASN1_PRINTABLESTRINGK_d2i_KRB5_AUTHENT%M_d2i_POLICYINFO~N_DES_ofb_encrypt)_EC_curve_nist2nid_RSA_OAEP_PARAMS_free5_TS_TST_INFO_delete_ext';_X509_CINF_freei?_X509_REVOKED_get_extCV@-lc8 J_DH_get_default_method!_ECDSA_METHOD_set_sign!_RSAPrivateKey_dup!5 _X509_digest!F_i2d_X509_CRL_fp!T_CMS_decrypt_set1_key^ _d2i_ASN1_OCTET_STRINGK_DH_set_ex_data%_EC_POINT_get_affine_coordinates_GF2mM_i2d_KRB5_TICKET*R_LONG_it'_PEM_X509_INFO_read_bio-_RSA_setup_blinding6_TS_ACCURACY_dup8_X509_get_default_cert_fileKG_X509_LOOKUP_shutdownA_X509_REQ_set_pubkeyQC_X509v3_get_ext_by_OBJnIA]iNu7,_PKCS7_RECIP_INFO_it!2_i2d_ESS_SIGNING_CERT!Q_ASN1_template_i2d_ASN1_UTCTIME_it_BN_get0_nist_prime_521 _CMS_RecipientInfo_decrypt _d2i_AUTHORITY_KEYID(L_DH_get_ex_new_index_EC_KEY_get_key_method_data_i2d_KRB5_ENCDATAR_OPENSSL_isservice-_PEM_SealFinal- _PKCS7_new3ATn.`~K6!_ACCESS_DESCRIPTION_new!_ASN1_TIME_set_string!A _EC_KEY_free!{_KRB5_AUTHENT_free!0'_PEM_read_PKCS8!V._POLICYINFO_it!4_SRP_get_default_gN!U8_TS_CONF_set_signer_key!S9_X509_policy_level_get0_node!H_d2i_Netscape_RSA!qM_d2i_ESS_CERT_IDL_d2i_OTHERNAMEM_EC_GROUP_get_basis_type_ESS_ISSUER_SERIAL_new\_EVP_CIPHER_CTX_set_app_data_EVP_PKCS82PKEY _i2d_KRB5_CHECKSUMR_i2d_RSA_PUBKEY_bioT_lh_node_stats_bioU _SHA256_Final76zgQrZ*F _DSO_load!<_EVP_PKEY_missing_parameters!"_X509_NAME_hash_old!A__ossl_old_des_ecb3_encrypt!I_a2i_GENERAL_NAME!J_d2i_PBE2PARAM!M_d2i_TS_MSG_IMPRINT_fp!O_i2d_RSAPublicKey!S _AES_optionsS_ASN1_TYPE_setr_BN_BLINDING_create_param _BN_GF2m_mod@_ENGINE_unregister_ECDSAc_ESS_ISSUER_SERIAL_freeU_EVP_PKEY_assign!_EVP_PKEY_encrypt_old!_OCSP_BASICRESP_freet)_OCSP_BASICRESP_it)_TS_TST_INFO_set_nonce;_X509_VERIFY_PARAM_set1 FVC)1!9do{_ASN1_UTCTIME_set_string! _BN_CTX_end! _BN_is_prime! _ENGINE_free!>_EVP_aes_128_ccm!#"_PEM_write_NETSCAPE_CERT_SEQUENCE!/_TS_ACCURACY_get_seconds!8_i2d_EDIPARTYNAME!Q_ASN1_BMPSTRING_free_ASN1_item_sign _BN_lshift _EVP_MD_CTX_init1 _EVP_whirlpool"&_i2d_PKCS7_SIGN_ENVELOPES_OCSP_RESPONSE_print#+_OPENSSL_issetugid-_PEM_write_bio_ECPrivateKey70_PKCS12_BAGS_new0_PKCS7_SIGNER_INFO_free2_TS_TST_INFO_get_policy_id;*}VIrחd9_EC_POINT_point2bn!_EVP_PKEY_meth_find!c"_OCSP_REQUEST_get1_ext_d2i!e*_PEM_read_bio_RSAPrivateKey!/_RSA_padding_add_none!6_X509_VERIFY_PARAM_set1! F_get_rfc3526_prime_8192!P_EVP_MD_CTX_destroy+ _EVP_PKEY_CTX_set_app_data!_OCSP_REQUEST_print* _pitem_freeU_PKCS7_RECIP_INFO_free2 _pqueue_nextU_UI_method_set_closer(=_UI_method_set_readerD=_UI_method_set_writerJ=_X509_ATTRIBUTE_create_by_NID>_X509_print_fpxH_X509_REVOKED_newC+nAIWd5_EVP_MD_CTX_init!1 _EVP_PKEY_get_attr_count!8"_PKCS7_dataFinal!3_d2i_X509_CERT_PAIR!|O _pqueue_new!U_PEM_read_X509_CERT_PAIR._TS_TST_INFO_get_nonce~;_X509_ALGOR_free>#_X509_STORE_CTX_get0_current_issuerD _X509_STORE_CTX_get_current_certBD_X509_STORE_set_trustKE_X509_VERIFY_PARAM_set_flagsJFlR:\Gd,z_ASN1_OBJECT_free!_BN_get0_nist_prime_192!d _DSO_set_default_method!R_EC_KEY_set_public_key!_EVP_aes_128_wrap!#_EVP_aes_192_ccm!# _EVP_des_cbc!$ _PKCS12_new!1_TS_ACCURACY_set_millis!8_TS_RESP_CTX_new!^:_UI_get0_result_string!<__ossl_old_des_ecb_encrypt!I_i2d_X509_ALGOR!lT_CRYPTO_free_lockedz_EVP_DecodeUpdate_i2c_ASN1_INTEGER_P_i2d_X509_ALGORSqT_PKCS5_pbe_set32_PKCS7_ISSUER_AND_SERIAL_digest2_TS_MSG_IMPRINT_print_bio9PuE}ʔ]j2!;_ASN1_PCTX_set_oid_flags!_ASN1_TIME_to_generalizedtime!G_ASN1_tag2bit! _BIO_test_flags!_OCSP_CERTID_free!)_TS_TST_INFO_get_nonce!~;_X509_certificate_type!F_i2d_PROXY_POLICY!S _CMS_add0_crl _d2i_ASN1_GENERALIZEDTIMEK_d2i_X509_NAMEO _EVP_MD_flagsY _EVP_PKEY_decrypt_old!_get_rfc3526_prime_6144P_i2d_AUTHORITY_KEYID Q_i2d_NOTICEREFNR_X509_PURPOSE_cleanupWBgIx=*n![_ASN1_OCTET_STRING_free!_BIO_ptr_ctrl!"_CMS_RecipientInfo_kari_get0_reks!, _CRYPTO_dup_ex_data!b _CRYPTO_get_mem_debug_functions!/_PEM_read_bio_PKCS8!. _RIPEMD160!5_RIPEMD160_Final!5_UI_get0_result!<_i2d_ASN1_BIT_STRING!lP_i2d_PKCS7_NDEF!S_CRYPTO_gcm128_new_d2i_DSAPrivateKeyzL_EVP_CIPHER_do_all_NAME_CONSTRAINTS_it'_PEM_ASN1_read-_PKCS7_SIGNER_INFO_get0_algs2 _RSA_padding_add_PKCS1_OAEP_mgf1V6_SRP_VBASE_new08aXQp.z">H_CRYPTO_get_new_dynlockid!N_DES_string_to_2keys!g_ENGINE_set_default_digests!_EVP_aes_128_cbc!#_PEM_write_bio!/ _UTF8_putc!=_X509_CINF_it!n?_X509_PURPOSE_get_by_sname!xB_CAST_cbc_encrypt _CRYPTO_free_ex_datat_d2i_PKCS12_bioM_d2i_TS_MSG_IMPRINT_fpO_DSA_set_method_ECParameters_printN_ERR_print_errors _EVP_desx_cbce%_EVP_PKEY_CTX_get_cb _i2d_BASIC_CONSTRAINTSQ_OCSP_ONEREQ_get_ext_count)*_X509_ALGOR_it>_X509_REQ_print_fpCC7at-l!SC_BN_get0_nist_prime_256!r _ENGINE_set_digests!_ERR_clear_error!_RIPEMD160_Transform!5_TS_RESP_CTX_set_signer_key!:_ASN1_BIT_STRING_set_asc_ASN1_UTCTIME_print _BIO_new_file_CMS_signed_delete_attr _CMS_SignerInfo_verify _CRYPTO_dbg_mallocH_EC_POINT_hex2point__ERR_load_DH_strings9_X509_get_default_cert_file_envRGX߯f.wM~?"_ASN1_GENERALIZEDTIME_free!_CAST_cfb64_encrypt!" _CRYPTO_set_mem_debug_options!<_DSA_set_default_method!_OCSP_cert_id_new!+_PKCS12_add_CSPName_asc!&1_PKCS7_ISSUER_AND_SERIAL_free!2 _PKCS7_it!3_RAND_write_file!i5_X509_NAME_ENTRY_create_by_NID!A_X509_NAME_add_entry!bA_X509_REQ_print!8C_d2i_NOTICEREF!lM_i2d_ASN1_NULL!P_EC_GFp_mont_methodb_i2d_TS_TST_INFO_fp]T _PEM_SealInit- _PKCS12_parse1_PKCS7_set_type"4_TS_REQ_set_nonce:hOu4&>]_BIO_ctrl_wpending! _BN_mod_mul! _ENGINE_register_ciphers!6_EVP_aes_192_cbc!#_OPENSSL_load_builtin_modules!-_TS_RESP_get_status_info!:_TS_VERIFY_CTX_new! <_X509_STORE_get1_crls!E__ossl_old_des_encrypt2!I_d2i_PROXY_POLICY!N_i2d_X509_bio!T_lh_stats_bio!U_EVP_PKEY_get0" _PBE2PARAM_it-_PEM_read_bio_EC_PUBKEY._RSA_verify_PKCS1_PSS_mgf1#7_TS_TST_INFO_get_version;_X509_REQ_print_ex=C_X509_set_notAfterH_X509V3_EXT_i2d >9LTt\f-C_BIO_get_ex_data!s_CMS_add0_CertificateChoices! _COMP_compress_block!_DHparams_print!_OBJ_NAME_get!( _OBJ_txt2obj!Y) _RAND_screen!O5_X509_CINF_free!i?__ossl_old_des_encrypt3!J_i2c_ASN1_BIT_STRING!YP_BIO_callback_ctrl _ENGINE_get_load_pubkey_function_X509_NAME_digestA_X509_REQ_add_extensionsB_X509_VERIFY_PARAM_newF_X509_VERIFY_PARAM_set_depthBF_X509_VERIFY_PARAM_set_purposeZF_X509V3_EXT_add=mCO4`%z _CMS_RecipientInfo_kari_decrypt! _OCSP_ONEREQ_get_ext_count!)*_PEM_write_bio_Parameters!0_PKCS7_add_attribute!M3_X509_VERIFY_PARAM_add0_table!E_i2d_RSAPublicKey_bio!S_BN_get0_nist_prime_384y _Camellia_cfb1_encryptr_CMS_digest_verifyx _i2d_ASN1_UTF8STRINGP_i2d_ASN1_VISIBLESTRINGP_PKEY_USAGE_PERIOD_it4_SMIME_read_ASN17_TS_CONF_set_default_engine%9_TS_REQ_get_nonce9_X509at_delete_attr0IԨ?ʇGnaV3z*_BN_BLINDING_invert!_BN_num_bits_word!p _DES_encrypt1!_EVP_CIPHER_CTX_new! _OBJ_create!)_d2i_ASN1_UNIVERSALSTRING!K_d2i_KRB5_CHECKSUM!1M_i2d_OCSP_REVOKEDINFO!R_i2d_RSA_OAEP_PARAMS!S_CRYPTO_xts128_encrypt^_d2i_NETSCAPE_SPKI`M_EVP_MD_CTX_create% _i2d_ASN1_BMPSTRINGrP_idea_cbc_encrypt4U_NETSCAPE_SPKAC_new`(_OCSP_ONEREQ_delete_ext)_PBKDF2PARAM_new-_X509_STORE_add_lookupD_X509_VERIFY_PARAM_set1_emailF_X509V3_EXT_nconf_nid>FPۋz`*g<X_BIO_f_buffer!)_CERTIFICATEPOLICIES_new!U !_CMS_RecipientInfo_get0_pkey_ctx! _DES_ecb_encrypt!_EVP_CIPHER_type!K _EVP_des_ede!% _EVP_sha384!& _RAND_add!5#_RSA_padding_check_PKCS1_OAEP_mgf1!6 _bn_expand2!NK_d2i_PKCS12_fp!M__ossl_old_des_read_2passwordsTJ_ASN1_PCTX_get_cert_flags _BN_add_word _BN_optionsv _EVP_des_ede3%_X509_ALGOR_get0>_X509_LOOKUP_by_issuer_serial@_X509_REVOKED_set_serialNumberC_X509_TRUST_get0_namehE|_:SJ.%n_BIO_int_ctrl!_BIO_sock_init!_DES_encrypt3! _ENGINE_set_ciphers!_ENGINE_set_destroy_function!_EVP_cast5_cbc!$_d2i_ASN1_ENUMERATED!K_d2i_ASN1_GENERALIZEDTIME!K_get_rfc3526_prime_6144!P_CRYPTO_set_ex_data_d2i_CRL_DIST_POINTSTL_ERR_put_error_EVP_DigestInit_KRB5_AUTHENT_new;' _SHA1_Updated7 _SXNET_free8_X509V3_EXT_get=~^l!C4tN+_ASN1_STRING_clear_free!|_CRYPTO_remalloc!_DES_encrypt2!_ENGINE_register_all_STORE!_EVP_aes_192_wrap!$_GENERAL_NAME_get0_otherName!i&_PEM_read_bio_EC_PUBKEY!. _TS_REQ_new!9_X509_CRL_verify!h@_i2d_ASN1_UNIVERSALSTRING!P _BF_options _d2i_PUBKEYN_DSO_METHOD_win32 _i2d_PKCS7_fp1S_OBJ_sigid_freeK)_OPENSSL_ia32cap_loc-_PEM_read_bio_X509$/_PEM_read_bio_X509_REQ@/_PKCS12_certbag2x509Y1_POLICYQUALINFO_it4_SXNET_get_id_asc8:Ej!xaV2O_DSO_set_name_converter!d_EC_GROUP_get_trinomial_basis! _OBJ_nid2sn!=)_OCSP_sendreq_bio!,_OPENSSL_memcmp!"- _PEM_read!._PKCS7_set_cipher!4_SHA_Transform!7_TS_RESP_create_response!:_UI_get_method!<_asn1_GetSequenceJ_CRYPTO_cfb128_8_encrypt _d2i_RSA_NETN _DH_up_ref_get_rfc2409_prime_1024O_i2d_ASN1_OCTET_STRINGP _PEM_writeG/_PKCS7_ENVELOPE_it2_PKCS7_SIGNER_INFO_it2_X509_REQ_get_pubkey(C_X509_VERIFY_PARAM_get0_nameED|tᷧN$n:Z.a_ENGINE_set_DSA!d _NCONF_new!:(_OBJ_bsearch_ex_!)_OCSP_REVOKEDINFO_it!0+_PBE2PARAM_free!{-_PBKDF2PARAM_it!-_RSA_public_decrypt!6 _BN_CTX_end_BN_get0_nist_prime_224k _BN_rand _EVP_PKEY_new"_i2d_PKCS7_ISSUER_AND_SERIALR_PEM_X509_INFO_read- _UTF8_putc=_X509_CINF_news?_X509_get_default_private_dirZG_X509_issuer_and_serial_hashG_X509_REQ_get_extensions!C_X509_signature_dumpH_X509_TRUST_get_by_idnE1m8E%N}__BIO_socket_ioctl! _CMS_final! _ERR_add_error_vdata! _MDC2_Init!'_OCSP_REQUEST_get_ext!l*_PEM_write_CMS!K/_RSA_verify_ASN1_OCTET_STRING!7_TS_CONF_set_def_policy!9_TS_TST_INFO_get_ext_by_NID!L; _BN_CTX_get_BN_get0_nist_prime_192d _BN_get0_nist_prime_256r _CRYPTO_get_dynlock_value _DSA_SIG_freeQ_PEM_write_bio_PUBKEY{0 _X509_CRL_new@_X509_TRUST_get_trustE_X509_VERIFY_PARAM_set1_ip_asc*FL{:b#To-_BN_GF2m_mod_solve_quad_arr!}_DH_get_2048_224!_EC_POINT_make_affine!w!_ENGINE_register_pkey_asn1_meths!K _OBJ_sn2nid!P)_PEM_write_bio_DSAparams!(0_TS_CONF_set_accuracy!9_X509_NAME_ENTRY_new!NA_asn1_set_choice_selector!K_ASN1_item_verify_CONF_get_number_CRYPTO_gcm128_release_d2i_USERNOTICEXO _d2i_X509]O _DES_options._EC_GROUP_get_pentanomial_basis_EVP_PKEY_set_type_str;##_OCSP_BASICRESP_get_ext_by_critical)_RC2_ofb64_encrypt5CP/wcZl8_EC_GROUP_check!t _ENGINE_register_all_pkey_meths!._X509_INFO_new!@_i2d_ASN1_INTEGER!P_i2d_KRB5_AUTHENTBODY! R_AES_ige_encryptH_b2i_PublicKey4K_BN_bntest_rand _ENGINE_set_default_EVP_PKEY_asn1_get0W!_X509_STORE_CTX_set_certD_X509at_add1_attr_by_NIDI(wZӳ3Jg<_ASN1_UTF8STRING_it!_ASN1_item_new!_BIO_ctrl_pending!_BN_set_params! _CMS_add1_ReceiptRequest! _CRYPTO_THREADID_set_numeric!_SXNET_add_id_INTEGER!x8_TS_TST_INFO_get_msg_imprint!v;_X509_SIG_new!C_ASN1_GENERALSTRING_free0_ASN1_PCTX_get_str_flags_CRYPTO_set_id_callback_d2i_X509_PUBKEYO_DES_ncbc_encrypt_EVP_aes_256_wrapT$_i2d_CRL_DIST_POINTS6Q _MD4_Update'_UI_get_string_type<_UI_method_get_reader=_UI_method_get_writer"=&aD5UlxM_EC_POINT_bn2point! _EVP_PKEY_id!G"_PEM_read_bio_RSAPublicKey!/_X509_REQ_get_attr_by_NID!C_i2d_X509_CRL!T _BN_clear_bit _BN_GF2m_mod_exp_arrZ_CMS_verify_receipt_EC_KEY_set_asn1_flag_EVP_PKEY_get1_EC_KEY"_X509_STORE_CTX_cleanupC)[7jzDP_BN_BLINDING_convert!_BN_nist_mod_521!b _CMS_get0_RecipientInfos! _EVP_PKEY_encrypt_old!!_KRB5_PRINCNAME_new!'_NETSCAPE_SPKAC_it!Z(_NETSCAPE_SPKI_b64_encode!m(_OCSP_ONEREQ_get_ext_by_OBJ!*_SRP_VBASE_get1_by_user!8_i2v_ASN1_BIT_STRING!"U_BIO_new_socket_BIO_set_ex_datak_Camellia_ofb128_encrypt_EC_KEY_set_group_ENGINE_unregister_RSAq_OCSP_REQUEST_get_ext_by_NIDr* _RAND_add5 _SHA256_Init7_X509_check_akidF[d7B(Mȝwm_EC_KEY_up_ref! _EVP_EncryptFinal_ex!_EVP_PKEY_derive_set_peer!!_NCONF_get_string!&(_X509V3_conf_free!b>_X509_PURPOSE_get_by_id!qB_bn_sqr_words!]K_bn_sub_words!bK_CMS_get0_content _CONF_get_section_DES_ecb_encrypt _HMAC_Init_ex&_PEM_write_PKCS7/_PKCS7_add_recipient_infoe3_X509_NAME_ENTRY_get_data:A_X509_NAME_ENTRY_set_object[A_X509_TRUST_addXE>ncJw.X _ASN1_BIT_STRING_free!z_BN_get0_nist_prime_224!k _CRYPTO_cts128_encrypt_block!4_EC_POINT_point2oct!_ENGINE_get_default_RSA!_OPENSSL_DIR_read!,_X509_CERT_AUX_it!E?_b2i_PrivateKey)K_DSO_METHOD_vms_EC_GROUP_get0_seed_EVP_EncryptInit_TS_REQ_get_policy_id9_TS_TST_INFO_set_accuracy;_UI_add_user_datae<_X509_check_emailF_X509_STORE_set_verify_cbQE}5Sq.dI _ASN1_d2i_fp!%#_CMS_RecipientEncryptedKey_get0_id! _DSA_free!i%_EC_POINT_set_affine_coordinates_GFp!_ENGINE_get_last!_EVP_PKEY_CTX_set0_keygen_info! _EVP_camellia_256_ofb!$_PKCS12_MAC_DATA_new!0_X509_ATTRIBUTE_create_by_txt!>_X509_NAME_ENTRY_create_by_OBJ!A_X509_STORE_load_locations!E_X509_VERIFY_PARAM_set_purpose!ZF_X509_trust_clear!H _ZLONG_it!I_i2d_CMS_ContentInfo!Q_a2d_ASN1_OBJECTJ_ASN1_UTF8STRING_new_BN_mod_mul_montgomery ,kDO~]8#_CRYPTO_THREADID_set_pointer!_EC_GROUP_copy!_EVP_CIPHER_CTX_init!_EVP_PKEY_CTX_new_id! _EVP_des_ede3_ecb!9%_NAME_CONSTRAINTS_check!'_PKCS12_unpack_p7encdata!1"_UI_method_get_prompt_constructor!=_X509_ALGOR_cmp!>_ASN1_SEQUENCE_it\_BIO_s_datagram<_CMS_decrypt_set1_passwordd _EVP_DecryptFinal_ex_EVP_PKEY_keygenL" _EVP_rc2_ecb%_OCSP_CERTSTATUS_free)_POLICYQUALINFO_new4_X509_CRL_set_nextUpdateK@_X509v3_add_extWI_X509V3_get_d2io>Gj=5`Żv(S _BN_CTX_get!_EVP_PKEY_encrypt_init!!_EVP_camellia_128_ecb!$ _OBJ_txt2nid!T)_WHIRLPOOL_Init!=_X509_CERT_AUX_free!??_X509_CRL_check_suiteb!?_X509_STORE_new!E_d2i_KRB5_APREQBODY!M_ASN1_PCTX_free_CRYPTO_get_new_lockidU_EC_KEY_set_flags_ENGINE_set_pkey_methsA_ERR_set_error_data&_ESS_SIGNING_CERT_freei_EVP_aes_256_ecbE$_i2d_OCSP_RESPIDR_OCSP_cert_status_str+_OCSP_REQ_CTX_add1_header*_TS_RESP_print_bio:_X509_CERT_AUX_newK?l}^$R9.D_BIO_free_all![ _ECDSA_sign!)_EVP_DecodeBlock!p_EVP_PKEY_get_attr!$"_OCSP_RESPONSE_it!+_PEM_X509_INFO_read_bio!-_PEM_read_RSA_PUBKEY!|._PEM_write_RSAPublicKey!/_PKCS7_add_attrib_content_type!>3_TS_CONF_load_certs!8_X509_VERIFY_PARAM_add1_host!E_X509_set_notAfter!H_X509_subject_name_hash_old!H_d2i_ISSUING_DIST_POINT! M_i2d_ASN1_TYPE!P_i2d_KRB5_APREQ!Q_ASN1_BIT_STRING_set_bit_CMS_get0_type _CMS_unsigned_get_attr_by_NIDfG~:(T^uʖk_ASN1_pack_string!_BN_GF2m_mod_arr!E!_CMS_RecipientInfo_ktri_cert_cmp!W _DES_set_key_unchecked!Z_EVP_get_cipherbyname!{%_OPENSSL_stderr!3-_UI_set_default_method!]=_X509V3_EXT_i2d! >_X509_NAME_set!A_get_rfc2409_prime_768!O_i2d_OCSP_REQINFO!tR_i2d_OCSP_RESPID!R__ossl_old_des_encryptI_ASN1_OCTET_STRING_NDEF_it_ASN1_PRINTABLESTRING_it0 _d2i_SXNETIDO_ECDH_set_method_ERR_load_CONF_strings+_EVP_MD_CTX_md6 _OCSP_REVOKEDINFO_new6+0qyGU咺$:e_CMS_add0_RevocationInfoChoice! _RSA_setup_blinding!6_SRP_VBASE_free!8_SXNET_get_id_INTEGER!8_X509_get0_pubkey_bitstr!G_i2d_PKCS8_PRIV_KEY_INFO_bio!iS_ASN1_BIT_STRING_freez _asn1_do_lockJ_ASN1_IA5STRING_itK_ASN1_PCTX_set_str_flags" _BN_set_word _d2i_ECDSA_SIGL_i2d_DSA_PUBKEYuQ_OCSP_ONEREQ_get1_ext_d2i* _PKCS12_it1_PKCS12_x509crl2certbag2_TS_RESP_set_tst_info:_X509_CRL_sign_ctx]@_X509_REVOKED_delete_extCi[O-8"tG_CONF_imodule_get_usr_data!_Camellia_set_key!_EC_KEY_get_flags!_EVP_PKEY_meth_set_signctx!" _EVP_rc2_ecb!%_OCSP_check_validity!+_PEM_write_bio_X509_CRL!0_POLICYQUALINFO_it!4_X509_CERT_PAIR_free!W?_X509_CRL_METHOD_free!?_X509_CRL_print_fp!(@ _BIO_s_fileE_CMS_unsigned_get_attr_by_OBJn_ERR_load_OCSP_stringsx _i2b_PVK_bioHP_OCSP_RESPONSE_new+_X509_find_by_issuer_and_serial Grj`LVC+8z_BIO_set_cipher!f_BN_get0_nist_prime_384!y _ENGINE_register_RAND!_a2i_IPADDRESS_NC!J_d2i_ASN1_TIMEK_EC_KEY_get_flags_ERR_load_strings_i2d_X509_PUBKEYT _PEM_read_bio. _PEM_read_CMS._PEM_write_bio_PrivateKey0_PKCS7_ENCRYPT_itn2_SSLeaya8_TS_MSG_IMPRINT_get_algol9_X509_ATTRIBUTE_create_by_txt>_X509_REVOKED_get_ext_by_OBJC_X509_VERIFY_PARAM_add1_hostEcR/<ny%I_BIO_method_name! _BN_mod_sqrt!) _DIST_POINT_new!@_EVP_camellia_256_cfb8!$_OCSP_response_create!,_SXNETID_free!j8_X509_STORE_CTX_set_verify_cb!D_X509v3_delete_ext!\I_i2d_ASN1_SET_ANY!P _i2d_RSA_NET!S_ASN1_template_free_AUTHORITY_KEYID_itQ _d2i_PKCS8_fprN_EC_GROUP_get_curve_name_ENGINE_load_private_key_EVP_aes_128_cbc_hmac_sha256#_EVP_CIPHER_CTX_block_size{ _EVP_rc2_cbc%_OCSP_set_max_response_length,_RAND_egd_bytes&5#UIa٠Ah6-v_BIO_ctrl_reset_read_request!_CONF_set_nconf!O_CRYPTO_strdup!S_DSA_generate_key!m _NCONF_load!,(_PEM_ASN1_write_bio!-_PEM_read_PrivateKey!h. _RSA_sign!6_TS_TST_INFO_set_version!;_X509_set_issuer_name!H_d2i_KRB5_APREQ!M_i2d_KRB5_AUTHDATA!R _ASN1_d2i_bio _d2i_RSAPublicKeyN_DSO_METHOD_beos_get_rfc3526_prime_1536O _MDC2_Update'_PKCS7_ISSUER_AND_SERIAL_free2_RAND_write_filei5"_RSA_padding_check_PKCS1_OAEP_mgf16\>z3fJ&RѺį_ASN1_d2i_bio! _ASN1_item_print!_CRYPTO_cbc128_encrypt!_CRYPTO_mem_leaks!x_ENGINE_set_ex_data! _OBJ_ln2nid!+)_OCSP_ONEREQ_new!5*_RAND_file_name!/5$_X509_STORE_CTX_get_explicit_policy!hD _check_defer!xK_DES_string_to_2keysg_DSA_sign_setup_ENGINE_register_all_ECDH_EVP_aes_256_gcmJ$_EVP_PKEY_meth_newv"_i2d_X509_REQ_bioT_PKCS7_SIGNER_INFO_set 3_UI_UTIL_read_pwA<_X509_CRL_get0_by_cert?<5zjRI)ք]_CRYPTO_128_unwrap!f_DES_string_to_key!m_DIST_POINT_NAME_new!0 _DSA_size!_ERR_load_ECDH_strings!K_EVP_seed_ecb!%_PKCS12_setup_mac!1_UI_get0_output_string!<_X509_CRL_set_default_method!.@_X509_TRUST_get0!cE_X509_keyid_get0!G_DH_generate_parameters_ex_ENGINE_set_default_DH_EVP_PKEY_asn1_get0_info]!_EVP_PKEY_asn1_set_freex!_GENERAL_SUBTREE_it& _lh_statsU_OCSP_SINGLERESP_add1_ext_i2d`+_PKCS12_item_decrypt_d2i1_PKCS5_PBE_keyivgen2u^-k9K~%AS _BN_GF2m_mod!@_BN_GF2m_mod_div!J _BN_set_word! _ERR_set_error_data!& _EVP_des_ecb!%_d2i_OCSP_ONEREQ!M _BIO_free_all[_d2i_TS_STATUS_INFOAO_ENGINE_ctrl_cmd_string2_idea_ecb_encrypt@U_OCSP_resp_get0{,_PEM_bytes_read_bio-_PKCS7_ENVELOPE_free2_PKCS8_PRIV_KEY_INFO_freeP4_RSA_public_decrypt6_UI_free<_X509_REQ_set_extension_nidsIC_X509_STORE_CTX_get0_store&D_X509_STORE_set_purposeDEUkEv;/!__EC_GROUP_get_asn1_flag!_EXTENDED_KEY_USAGE_free!'&_OBJ_NAME_new_index!(_PEM_read_PUBKEY!c._PKCS7_get_signed_attribute!3_X509_http_nbio!G__ossl_old_des_crypt!I_DES_set_odd_paritya_DES_string_to_keym_RSA_private_decrypt6_TS_X509_ALGOR_print_bio<_X509V3_EXT_REQ_add_conf=_X509V3_get_value_bool>{7^l( JAT̊_CRYPTO_ctr128_encrypt! _ECDSA_size!8_EVP_CIPHER_param_to_asn1!=_EVP_PBE_alg_add!~ _EVP_PKEY_sign!B#_OBJ_NAME_do_all!(_OCSP_CERTID_dup!)_OCSP_request_add1_cert!4,_PEM_write_bio_ASN1_stream!/_PKCS12_item_pack_safebag!1_PKCS5_pbe_set!32_TS_REQ_ext_free!9 _X509V3_add_standard_extensions!9>_X509_REQ_get_attr_by_OBJ! C__ossl_old_des_enc_read!I__ossl_old_des_cbc_cksumI__ossl_old_des_enc_writeI_asn1_enc_restoreJ _BIO_f_cipher.fкZL<q/F~_ASN1_INTEGER_to_BN!_CMS_signed_get_attr_by_OBJ!_CRYPTO_ccm128_decrypt!_DH_get_2048_256! _OBJ_cmp! )_PKCS12_unpack_authsafes!1_X509_REQ_get1_email!B_i2d_X509_REQ_INFO!T_CMS_set1_eContentType _EC_GROUP_get_trinomial_basis_ECDSA_METHOD_set_name!_EVP_PKEY_meth_set_verify_recover"_i2d_CMS_ReceiptRequest$Q_PEM_read_ECPrivateKey<._USERNOTICE_itx=_X509_CERT_AUX_free??_X509_get0_signature%G_X509_PURPOSE_get0]BbBNn9V0"{_CONF_imodule_set_usr_data!_CRYPTO_is_mem_check_on!\_DES_enc_read!_EC_GROUP_new!_OCSP_BASICRESP_free!t) _RAND_status!d5_UI_add_info_string!S<_UI_dup_info_string!<_X509V3_add_value_int!U>__ossl_old_des_decrypt3I_ASN1_UTCTIME_check_d2i_ASN1_UNIVERSALSTRINGK_d2i_KRB5_APREQM_DES_enc_write_ENGINE_unregister_DHO_OBJ_NAME_do_all_sorted( _RAND_egd"5_X509_NAME_ENTRY_dup.A_X509_policy_node_get0_parent(H_X509_reject_clearH%XpJ=0~b_ASN1_parse_dump! _BN_get_word! _ECDSA_METHOD_new!_EVP_camellia_256_cfb1!$_PKEY_USAGE_PERIOD_new!4_RSA_padding_add_SSLv23!}6_X509_ALGOR_dup!>_X509_STORE_CTX_set_time!D_d2i_CERTIFICATEPOLICIES!;L_i2d_X509_REQ_fp!T_asn1_const_FinishJ$_CRYPTO_set_dynlock_destroy_callback_d2i_ASN1_SEQUENCE_ANYK_DES_cfb_encrypt_EC_GFp_nist_methodh_EVP_PKEY2PKCS8_broken _i2d_ISSUING_DIST_POINTQ_MD4'_MD5'_X509_NAME_ENTRY_get_objectAAK2A&lVvd_EVP_rc4_hmac_md5!% _OBJ_nid2ln!4)_X509_REQ_INFO_free!B_X509_REQ_set_subject_name!WC_X509_check_host!F_ASN1_unpack_string+_CONF_imodule_get_module _CONF_load_fp _CRYPTO_num_locks_DH_get_ex_data _OBJ_nid2obj8)_OCSP_request_onereq_get0P,_X509_cmp_current_timeF_X509_EXTENSION_create_by_NIDs@_X509_policy_tree_level_countaH_X509_VERIFY_PARAM_set1_hostFbxY.EQn;_EC_GROUP_get_degree!_EVP_PKEY_add1_attr_by_OBJ!#!_NAME_CONSTRAINTS_free!'_X509_ALGOR_get0!>_d2i_X509_EXTENSIONS!O _pqueue_find!U_d2i_PrivateKeyN_d2i_RSAPublicKey_bioN_d2i_X509_REVOKEDO_DIST_POINT_NAME_it*_EC_GROUP_new_by_curve_name_EXTENDED_KEY_USAGE_free'&_lh_newwU_OCSP_REQUEST_new*_PEM_read_bio_RSAPublicKey/_TS_RESP_set_status_info:_X509_CRL_get_ext_by_OBJ?_X509_CRL_print_fp(@ _X509_newH_X509_REQ_get_attr_by_OBJ CwTfL\A+ˏ6 _ASN1_ENUMERATED_free!_ASN1_UTCTIME_new!_ASN1_item_ex_new!|_ASN1_item_verify!_ASN1_template_i2d! _BF_encrypt! _BIO_f_null!<_EVP_PKEY_derive!!_X509_STORE_set_default_paths!(E_X509_TRUST_get_flags!zE_X509_set_ex_data!H_d2i_X509_CINF!O_BN_mod_exp_simple _CMS_add_standard_smimecap: _EC_KEY_new _EVP_rc2_ofb%_PKCS7_add_signery3_SRP_VBASE_get1_by_user8_X509_PURPOSE_setB_X509_REQ_check_private_keyBjs5- F\{H/Sk__AES_cfb8_encrypt!-_ASN1_TYPE_set_int_octetstring!|_BIO_sock_non_fatal_error!_EVP_CipherInit!__EVP_DecryptFinal!_EVP_DigestSignFinal!_NETSCAPE_SPKAC_free!T(_OPENSSL_isservice!-_X509_REQ_verify!uC_BN_get_params _BN_num_bits_wordp _CONF_module_set_usr_data_CRYPTO_set_mem_debug_functions4 _EVP_PKEY_cmp!_i2d_ASN1_SEQUENCE_ANYP_i2d_RSA_PUBKEYS _i2d_SXNETIDT _lh_retrieveU _MD5_Final'_PEM_write_bio_RSAPublicKey0C8Sn`¸ |._CMS_unsigned_get_attr!__EVP_PKEY_asn1_set_free!x!_OCSP_parse_url!),_PKCS7_ENCRYPT_new!t2_PKCS7_ISSUER_AND_SERIAL_it!2_TS_CONF_set_tsa_name!Z9_TS_RESP_set_status_info!:_X509at_get0_data_by_OBJ!6I_d2i_RSAPublicKey_fp!N_d2i_RSA_PSS_PARAMSN _DSO_free _EC_KEY_dupw_EC_POINT_point2oct_ESS_ISSUER_SERIAL_dupN_i2d_PKCS12_BAGSR_i2d_PKCS8_PRIV_KEY_INFO_fpqS _i2d_X509_SIGT _MDC2_Final'_PEM_write_bio_DSAPrivateKey0_SHA3847:Z%E{0kNs _BIO_nread0!_DSA_new_method!_PKCS7_DIGEST_free!W2_PKCS8_pkey_get0!u4_X509_REVOKED_free!C_bn_div_words!DK_d2i_RSA_OAEP_PARAMS!N_ASN1_const_check_infinite_end _BIO_vprintf _CAST_encrypt3 _d2i_OCSP_REVOKEDINFOM _DES_crypt_ENGINE_register_all_RAND _ENGINE_set_load_pubkey_function#_EVP_add_digest#_PBE2PARAM_new-_PKCS12_item_pack_safebag1 _SHA224_Finalm7_sk_delete_ptrV_TS_MSG_IMPRINT_dup`9_UI_get0_test_string< _UI_OpenSSL=<s,$8QE`_BIO_gethostbyname! _EVP_rc4!% _PBEPARAM_it!-_PKCS7_ENCRYPT_free!h2_X509_LOOKUP_shutdown!A_d2i_TS_STATUS_INFO!AO__ossl_old_des_is_weak_key J#_CRYPTO_get_dynlock_create_callback_EC_GROUP_get_curve_GFp_EC_GROUP_get_mont_data_get_rfc3526_prime_8192P_PEM_write_bio_PKCS8PrivateKeya0_pqueue_iteratorU_SHA224i7_sk_setOV_TS_TST_INFO_set_version;_UI_get_result_maxsize<_UI_newP=_X509_CRL_print#@_X509_NAME_ENTRY_newNAu(HiB/7"cS_ASN1_TYPE_set_octetstring! _BIO_set!V _BN_bn2dec! _BN_lshift1! _CAST_ecb_encrypt!- _OBJ_dup!)_OCSP_REQ_CTX_free!*_TS_RESP_CTX_set_signer_cert!: _UI_ctrl!}<_b2i_PrivateKey_bio!.K_d2i_ESS_ISSUER_SERIAL!L_i2d_TS_MSG_IMPRINT_fp!(T_idea_ecb_encrypt!@U_ASN1_STRING_clear_free|_CRYPTO_remalloc_EVP_MD_do_all_sortedS _i2d_X509_ATTRIBUTEvT_OBJ_NAME_init( _OTHERNAME_it_-_PEM_write_bio_EC_PUBKEY>0_UI_set_methodi=_X509_PKEY_freeB*8IU`~jw _ACCESS_DESCRIPTION_it!_DES_is_weak_key!_X509_NAME_delete_entry!A_X509_get_default_private_dir!ZG_i2d_OCSP_SERVICELOC!R_d2i_KRB5_CHECKSUM1M_ERR_pop_to_mark_EVP_PKEY_encrypt_init! _PKCS12_new1_PKCS7_signatureVerify24_sk_free(V_SRP_Verify_A_mod_N58_TS_REQ_print_bio:_X509_REQ_get_extension_nidsC‹}/!pa9RH_ASN1_STRING_length_set!_CMS_RecipientInfo_type! _CMS_data_create!T _CMS_signed_get_attr_count!!_ESS_CERT_ID_new!I_EVP_PKEY_add1_attr_by_NID!!_EVP_aes_256_cbc_hmac_sha1!$_X509_STORE_set_trust!KE_X509at_add1_attr_by_NID!I_i2d_TS_STATUS_INFO!LT_BIO_f_reliable@_ENGINE_set_table_flagsH_NCONF_free_data(_OCSP_RESPDATA_new*_PEM_write_DSAparamsi/_RSA_padding_add_none6_SEED_ecb_encrypt;7_X509_CRL_set_meth_dataD@ _X509_freeGjR)6sAL__KRB5_ENCDATA_new!^'_OCSP_RESPONSE_new!+_X509_TRUST_get_count!tE_i2a_ASN1_INTEGER!8P_ASN1_STRING_length _BIO_read*_CRYPTO_cbc128_encrypt_ENGINE_set_digests_EVP_DecodeInitz_PEM_read_bio_ECPKParameters._PKCS12_pack_p7data1!_TS_RESP_CTX_set_status_info_cond:_X509_EXTENSIONS_itm@vibe.d-0.8.2/lib/win-i386/event2.lib000066400000000000000000002740001324361747700166360ustar00rootroot00000000000000 G?buff@?1??gai_strerrorA@@9@9M_?buff@?1??gai_strerrorA@@9@9 libevent.dll?buff@?1??gai_strerrorA@@9@9EVUTIL_ISALNUM1_EVUTIL_ISALNUM libevent.dllEVUTIL_ISALNUMEVUTIL_ISALPHA1_EVUTIL_ISALPHA libevent.dllEVUTIL_ISALPHAEVUTIL_ISDIGIT1_EVUTIL_ISDIGIT libevent.dllEVUTIL_ISDIGITEVUTIL_ISLOWER1_EVUTIL_ISLOWER libevent.dllEVUTIL_ISLOWEREVUTIL_ISPRINT1_EVUTIL_ISPRINT libevent.dllEVUTIL_ISPRINTEVUTIL_ISSPACE1_EVUTIL_ISSPACE libevent.dllEVUTIL_ISSPACEEVUTIL_ISUPPER1_EVUTIL_ISUPPER libevent.dllEVUTIL_ISUPPEREVUTIL_ISXDIGIT3_EVUTIL_ISXDIGIT libevent.dllEVUTIL_ISXDIGITEVUTIL_TOLOWER1_EVUTIL_TOLOWER libevent.dllEVUTIL_TOLOWEREVUTIL_TOUPPER1_EVUTIL_TOUPPER libevent.dllEVUTIL_TOUPPER SIGFPE_REQ) _SIGFPE_REQ libevent.dll SIGFPE_REQ_bufferevent_add_eventA__bufferevent_add_event libevent.dll_bufferevent_add_event _bufferevent_decref_and_unlockQ__bufferevent_decref_and_unlock libevent.dll_bufferevent_decref_and_unlock%#_bufferevent_decrement_read_buckets[$__bufferevent_decrement_read_buckets libevent.dll#_bufferevent_decrement_read_buckets&$_bufferevent_decrement_write_buckets]%__bufferevent_decrement_write_buckets libevent.dll$_bufferevent_decrement_write_buckets&$_bufferevent_del_generic_timeout_cbs]%__bufferevent_del_generic_timeout_cbs libevent.dll$_bufferevent_del_generic_timeout_cbs#!_bufferevent_generic_adj_timeoutsW"__bufferevent_generic_adj_timeouts libevent.dll!_bufferevent_generic_adj_timeouts_bufferevent_get_read_maxG__bufferevent_get_read_max libevent.dll_bufferevent_get_read_max_bufferevent_get_write_maxI__bufferevent_get_write_max libevent.dll_bufferevent_get_write_max_bufferevent_incref_and_lockM__bufferevent_incref_and_lock libevent.dll_bufferevent_incref_and_lock'%_bufferevent_init_generic_timeout_cbs_&__bufferevent_init_generic_timeout_cbs libevent.dll%_bufferevent_init_generic_timeout_cbs_bufferevent_run_eventcbE__bufferevent_run_eventcb libevent.dll_bufferevent_run_eventcb_bufferevent_run_readcbC__bufferevent_run_readcb libevent.dll_bufferevent_run_readcb_bufferevent_run_writecbE__bufferevent_run_writecb libevent.dll_bufferevent_run_writecb_evbuffer_chain_pin;__evbuffer_chain_pin libevent.dll_evbuffer_chain_pin_evbuffer_chain_unpin?__evbuffer_chain_unpin libevent.dll_evbuffer_chain_unpin_evbuffer_decref_and_unlockK__evbuffer_decref_and_unlock libevent.dll_evbuffer_decref_and_unlock_evbuffer_expand_fast?__evbuffer_expand_fast libevent.dll_evbuffer_expand_fast_evbuffer_incref5__evbuffer_incref libevent.dll_evbuffer_incref_evbuffer_incref_and_lockG__evbuffer_incref_and_lock libevent.dll_evbuffer_incref_and_lock_evbuffer_overlapped_get_fdK__evbuffer_overlapped_get_fd libevent.dll_evbuffer_overlapped_get_fd_evbuffer_overlapped_set_fdK__evbuffer_overlapped_set_fd libevent.dll_evbuffer_overlapped_set_fd_evbuffer_read_setup_vecsG__evbuffer_read_setup_vecs libevent.dll_evbuffer_read_setup_vecs*(_evbuffer_testing_use_linear_file_accesse)__evbuffer_testing_use_linear_file_access libevent.dll(_evbuffer_testing_use_linear_file_access_evbuffer_testing_use_mmapI__evbuffer_testing_use_mmap libevent.dll_evbuffer_testing_use_mmap _evbuffer_testing_use_sendfileQ__evbuffer_testing_use_sendfile libevent.dll_evbuffer_testing_use_sendfile _event_debug_map_HT_REP_IS_BADQ__event_debug_map_HT_REP_IS_BAD libevent.dll_event_debug_map_HT_REP_IS_BAD_event_debug_mode_on=__event_debug_mode_on libevent.dll_event_debug_mode_on _event_debugx/__event_debugx libevent.dll _event_debugx_event_io_map_HT_REP_IS_BADK__event_io_map_HT_REP_IS_BAD libevent.dll_event_io_map_HT_REP_IS_BAD_event_strlcpy1__event_strlcpy libevent.dll_event_strlcpy_evsig_restore_handlerA__evsig_restore_handler libevent.dll_evsig_restore_handler_evsig_set_handler9__evsig_set_handler libevent.dll_evsig_set_handler_evthread_debug_get_real_lockO__evthread_debug_get_real_lock libevent.dll_evthread_debug_get_real_lock_evthread_is_debug_lock_heldM__evthread_is_debug_lock_held libevent.dll_evthread_is_debug_lock_held_evthreadimpl_cond_allocE__evthreadimpl_cond_alloc libevent.dll_evthreadimpl_cond_alloc_evthreadimpl_cond_freeC__evthreadimpl_cond_free libevent.dll_evthreadimpl_cond_free_evthreadimpl_cond_signalG__evthreadimpl_cond_signal libevent.dll_evthreadimpl_cond_signal_evthreadimpl_cond_waitC__evthreadimpl_cond_wait libevent.dll_evthreadimpl_cond_wait_evthreadimpl_get_id=__evthreadimpl_get_id libevent.dll_evthreadimpl_get_id)'_evthreadimpl_is_lock_debugging_enabledc(__evthreadimpl_is_lock_debugging_enabled libevent.dll'_evthreadimpl_is_lock_debugging_enabled_evthreadimpl_lock_allocE__evthreadimpl_lock_alloc libevent.dll_evthreadimpl_lock_alloc_evthreadimpl_lock_freeC__evthreadimpl_lock_free libevent.dll_evthreadimpl_lock_free_evthreadimpl_lock_lockC__evthreadimpl_lock_lock libevent.dll_evthreadimpl_lock_lock_evthreadimpl_lock_unlockG__evthreadimpl_lock_unlock libevent.dll_evthreadimpl_lock_unlock_evthreadimpl_locking_enabledO__evthreadimpl_locking_enabled libevent.dll_evthreadimpl_locking_enabled_evutil_weakrand5__evutil_weakrand libevent.dll_evutil_weakrand%#bufferevent_add_to_rate_limit_group[$_bufferevent_add_to_rate_limit_group libevent.dll#bufferevent_add_to_rate_limit_groupbufferevent_async_can_connectO_bufferevent_async_can_connect libevent.dllbufferevent_async_can_connectbufferevent_async_connectG_bufferevent_async_connect libevent.dllbufferevent_async_connectbufferevent_async_new?_bufferevent_async_new libevent.dllbufferevent_async_new!bufferevent_async_set_connectedS _bufferevent_async_set_connected libevent.dllbufferevent_async_set_connectedbufferevent_base_set=_bufferevent_base_set libevent.dllbufferevent_base_setbufferevent_decref9_bufferevent_decref libevent.dllbufferevent_decref" bufferevent_decrement_read_limitU!_bufferevent_decrement_read_limit libevent.dll bufferevent_decrement_read_limit#!bufferevent_decrement_write_limitW"_bufferevent_decrement_write_limit libevent.dll!bufferevent_decrement_write_limitbufferevent_disable;_bufferevent_disable libevent.dllbufferevent_disablebufferevent_disable_hardE_bufferevent_disable_hard libevent.dllbufferevent_disable_hardbufferevent_enable9_bufferevent_enable libevent.dllbufferevent_enablebufferevent_enable_lockingI_bufferevent_enable_locking libevent.dllbufferevent_enable_lockingbufferevent_filter_newA_bufferevent_filter_new libevent.dllbufferevent_filter_newbufferevent_flush7_bufferevent_flush libevent.dllbufferevent_flushbufferevent_free5_bufferevent_free libevent.dllbufferevent_freebufferevent_get_base=_bufferevent_get_base libevent.dllbufferevent_get_basebufferevent_get_enabledC_bufferevent_get_enabled libevent.dllbufferevent_get_enabledbufferevent_get_input?_bufferevent_get_input libevent.dllbufferevent_get_inputbufferevent_get_max_to_readK_bufferevent_get_max_to_read libevent.dllbufferevent_get_max_to_readbufferevent_get_max_to_writeM_bufferevent_get_max_to_write libevent.dllbufferevent_get_max_to_writebufferevent_get_outputA_bufferevent_get_output libevent.dllbufferevent_get_outputbufferevent_get_read_limitI_bufferevent_get_read_limit libevent.dllbufferevent_get_read_limitbufferevent_get_underlyingI_bufferevent_get_underlying libevent.dllbufferevent_get_underlyingbufferevent_get_write_limitK_bufferevent_get_write_limit libevent.dllbufferevent_get_write_limitbufferevent_getfd7_bufferevent_getfd libevent.dllbufferevent_getfdbufferevent_incref9_bufferevent_incref libevent.dllbufferevent_increfbufferevent_init_commonC_bufferevent_init_common libevent.dllbufferevent_init_commonbufferevent_lock5_bufferevent_lock libevent.dllbufferevent_lockbufferevent_new3_bufferevent_new libevent.dllbufferevent_newbufferevent_ops_async?_bufferevent_ops_async libevent.dllbufferevent_ops_asyncbufferevent_ops_filterA_bufferevent_ops_filter libevent.dllbufferevent_ops_filterbufferevent_ops_pair=_bufferevent_ops_pair libevent.dllbufferevent_ops_pairbufferevent_ops_socketA_bufferevent_ops_socket libevent.dllbufferevent_ops_socketbufferevent_pair_get_partnerM_bufferevent_pair_get_partner libevent.dllbufferevent_pair_get_partnerbufferevent_pair_new=_bufferevent_pair_new libevent.dllbufferevent_pair_newbufferevent_priority_setE_bufferevent_priority_set libevent.dllbufferevent_priority_set-+bufferevent_rate_limit_group_decrement_readk,_bufferevent_rate_limit_group_decrement_read libevent.dll+bufferevent_rate_limit_group_decrement_read.,bufferevent_rate_limit_group_decrement_writem-_bufferevent_rate_limit_group_decrement_write libevent.dll,bufferevent_rate_limit_group_decrement_write#!bufferevent_rate_limit_group_freeW"_bufferevent_rate_limit_group_free libevent.dll!bufferevent_rate_limit_group_free-+bufferevent_rate_limit_group_get_read_limitk,_bufferevent_rate_limit_group_get_read_limit libevent.dll+bufferevent_rate_limit_group_get_read_limit)'bufferevent_rate_limit_group_get_totalsc(_bufferevent_rate_limit_group_get_totals libevent.dll'bufferevent_rate_limit_group_get_totals.,bufferevent_rate_limit_group_get_write_limitm-_bufferevent_rate_limit_group_get_write_limit libevent.dll,bufferevent_rate_limit_group_get_write_limit" bufferevent_rate_limit_group_newU!_bufferevent_rate_limit_group_new libevent.dll bufferevent_rate_limit_group_new+)bufferevent_rate_limit_group_reset_totalsg*_bufferevent_rate_limit_group_reset_totals libevent.dll)bufferevent_rate_limit_group_reset_totals&$bufferevent_rate_limit_group_set_cfg]%_bufferevent_rate_limit_group_set_cfg libevent.dll$bufferevent_rate_limit_group_set_cfg,*bufferevent_rate_limit_group_set_min_sharei+_bufferevent_rate_limit_group_set_min_share libevent.dll*bufferevent_rate_limit_group_set_min_sharebufferevent_read5_bufferevent_read libevent.dllbufferevent_readbufferevent_read_bufferC_bufferevent_read_buffer libevent.dllbufferevent_read_buffer*(bufferevent_remove_from_rate_limit_groupe)_bufferevent_remove_from_rate_limit_group libevent.dll(bufferevent_remove_from_rate_limit_group31bufferevent_remove_from_rate_limit_group_internalw2_bufferevent_remove_from_rate_limit_group_internal libevent.dll1bufferevent_remove_from_rate_limit_group_internalbufferevent_set_rate_limitI_bufferevent_set_rate_limit libevent.dllbufferevent_set_rate_limitbufferevent_set_timeoutsE_bufferevent_set_timeouts libevent.dllbufferevent_set_timeoutsbufferevent_setcb7_bufferevent_setcb libevent.dllbufferevent_setcbbufferevent_setfd7_bufferevent_setfd libevent.dllbufferevent_setfdbufferevent_settimeoutA_bufferevent_settimeout libevent.dllbufferevent_settimeoutbufferevent_setwatermarkE_bufferevent_setwatermark libevent.dllbufferevent_setwatermarkbufferevent_socket_connectI_bufferevent_socket_connect libevent.dllbufferevent_socket_connect%#bufferevent_socket_connect_hostname[$_bufferevent_socket_connect_hostname libevent.dll#bufferevent_socket_connect_hostname" bufferevent_socket_get_dns_errorU!_bufferevent_socket_get_dns_error libevent.dll bufferevent_socket_get_dns_errorbufferevent_socket_newA_bufferevent_socket_new libevent.dllbufferevent_socket_newbufferevent_suspend_readE_bufferevent_suspend_read libevent.dllbufferevent_suspend_readbufferevent_suspend_writeG_bufferevent_suspend_write libevent.dllbufferevent_suspend_writebufferevent_unlock9_bufferevent_unlock libevent.dllbufferevent_unlockbufferevent_unsuspend_readI_bufferevent_unsuspend_read libevent.dllbufferevent_unsuspend_readbufferevent_unsuspend_writeK_bufferevent_unsuspend_write libevent.dllbufferevent_unsuspend_writebufferevent_write7_bufferevent_write libevent.dllbufferevent_writebufferevent_write_bufferE_bufferevent_write_buffer libevent.dllbufferevent_write_bufferev_token_bucket_cfg_freeE_ev_token_bucket_cfg_free libevent.dllev_token_bucket_cfg_freeev_token_bucket_cfg_newC_ev_token_bucket_cfg_new libevent.dllev_token_bucket_cfg_newev_token_bucket_get_tickE_ev_token_bucket_get_tick libevent.dllev_token_bucket_get_tickev_token_bucket_init=_ev_token_bucket_init libevent.dllev_token_bucket_initev_token_bucket_updateA_ev_token_bucket_update libevent.dllev_token_bucket_update evbuffer_add- _evbuffer_add libevent.dll evbuffer_addevbuffer_add_buffer;_evbuffer_add_buffer libevent.dllevbuffer_add_bufferevbuffer_add_cb3_evbuffer_add_cb libevent.dllevbuffer_add_cbevbuffer_add_file7_evbuffer_add_file libevent.dllevbuffer_add_fileevbuffer_add_printf;_evbuffer_add_printf libevent.dllevbuffer_add_printfevbuffer_add_referenceA_evbuffer_add_reference libevent.dllevbuffer_add_referenceevbuffer_add_vprintf=_evbuffer_add_vprintf libevent.dllevbuffer_add_vprintfevbuffer_cb_clear_flagsC_evbuffer_cb_clear_flags libevent.dllevbuffer_cb_clear_flagsevbuffer_cb_set_flags?_evbuffer_cb_set_flags libevent.dllevbuffer_cb_set_flagsevbuffer_clear_flags=_evbuffer_clear_flags libevent.dllevbuffer_clear_flagsevbuffer_commit_read=_evbuffer_commit_read libevent.dllevbuffer_commit_readevbuffer_commit_space?_evbuffer_commit_space libevent.dllevbuffer_commit_spaceevbuffer_commit_write?_evbuffer_commit_write libevent.dllevbuffer_commit_writeevbuffer_copyout5_evbuffer_copyout libevent.dllevbuffer_copyoutevbuffer_defer_callbacksE_evbuffer_defer_callbacks libevent.dllevbuffer_defer_callbacksevbuffer_drain1_evbuffer_drain libevent.dllevbuffer_drainevbuffer_enable_lockingC_evbuffer_enable_locking libevent.dllevbuffer_enable_lockingevbuffer_expand3_evbuffer_expand libevent.dllevbuffer_expand evbuffer_find/_evbuffer_find libevent.dll evbuffer_find evbuffer_free/_evbuffer_free libevent.dll evbuffer_freeevbuffer_freeze3_evbuffer_freeze libevent.dllevbuffer_freezeevbuffer_get_contiguous_spaceO_evbuffer_get_contiguous_space libevent.dllevbuffer_get_contiguous_spaceevbuffer_get_length;_evbuffer_get_length libevent.dllevbuffer_get_lengthevbuffer_invoke_callbacksG_evbuffer_invoke_callbacks libevent.dllevbuffer_invoke_callbacksevbuffer_launch_read=_evbuffer_launch_read libevent.dllevbuffer_launch_readevbuffer_launch_write?_evbuffer_launch_write libevent.dllevbuffer_launch_write evbuffer_lock/_evbuffer_lock libevent.dll evbuffer_lock evbuffer_new- _evbuffer_new libevent.dll evbuffer_newevbuffer_overlapped_newC_evbuffer_overlapped_new libevent.dllevbuffer_overlapped_new evbuffer_peek/_evbuffer_peek libevent.dll evbuffer_peekevbuffer_prepend5_evbuffer_prepend libevent.dllevbuffer_prependevbuffer_prepend_bufferC_evbuffer_prepend_buffer libevent.dllevbuffer_prepend_bufferevbuffer_ptr_set5_evbuffer_ptr_set libevent.dllevbuffer_ptr_setevbuffer_pullup3_evbuffer_pullup libevent.dllevbuffer_pullup evbuffer_read/_evbuffer_read libevent.dll evbuffer_readevbuffer_readline7_evbuffer_readline libevent.dllevbuffer_readlineevbuffer_readln3_evbuffer_readln libevent.dllevbuffer_readlnevbuffer_remove3_evbuffer_remove libevent.dllevbuffer_removeevbuffer_remove_bufferA_evbuffer_remove_buffer libevent.dllevbuffer_remove_bufferevbuffer_remove_cb9_evbuffer_remove_cb libevent.dllevbuffer_remove_cbevbuffer_remove_cb_entryE_evbuffer_remove_cb_entry libevent.dllevbuffer_remove_cb_entryevbuffer_reserve_spaceA_evbuffer_reserve_space libevent.dllevbuffer_reserve_spaceevbuffer_search3_evbuffer_search libevent.dllevbuffer_searchevbuffer_search_eol;_evbuffer_search_eol libevent.dllevbuffer_search_eolevbuffer_search_range?_evbuffer_search_range libevent.dllevbuffer_search_rangeevbuffer_set_flags9_evbuffer_set_flags libevent.dllevbuffer_set_flagsevbuffer_set_parent;_evbuffer_set_parent libevent.dllevbuffer_set_parentevbuffer_setcb1_evbuffer_setcb libevent.dllevbuffer_setcbevbuffer_unfreeze7_evbuffer_unfreeze libevent.dllevbuffer_unfreezeevbuffer_unlock3_evbuffer_unlock libevent.dllevbuffer_unlockevbuffer_write1_evbuffer_write libevent.dllevbuffer_writeevbuffer_write_atmost?_evbuffer_write_atmost libevent.dllevbuffer_write_atmostevconnlistener_disableA_evconnlistener_disable libevent.dllevconnlistener_disableevconnlistener_enable?_evconnlistener_enable libevent.dllevconnlistener_enableevconnlistener_free;_evconnlistener_free libevent.dllevconnlistener_freeevconnlistener_get_baseC_evconnlistener_get_base libevent.dllevconnlistener_get_baseevconnlistener_get_fd?_evconnlistener_get_fd libevent.dllevconnlistener_get_fdevconnlistener_new9_evconnlistener_new libevent.dllevconnlistener_newevconnlistener_new_asyncE_evconnlistener_new_async libevent.dllevconnlistener_new_asyncevconnlistener_new_bindC_evconnlistener_new_bind libevent.dllevconnlistener_new_bindevconnlistener_set_cb?_evconnlistener_set_cb libevent.dllevconnlistener_set_cbevconnlistener_set_error_cbK_evconnlistener_set_error_cb libevent.dllevconnlistener_set_error_cbevdns_add_server_port?_evdns_add_server_port libevent.dllevdns_add_server_port!evdns_add_server_port_with_baseS _evdns_add_server_port_with_base libevent.dllevdns_add_server_port_with_base*(evdns_base_clear_nameservers_and_suspende)_evdns_base_clear_nameservers_and_suspend libevent.dll(evdns_base_clear_nameservers_and_suspend'%evdns_base_config_windows_nameservers_&_evdns_base_config_windows_nameservers libevent.dll%evdns_base_config_windows_nameserversevdns_base_count_nameserversM_evdns_base_count_nameservers libevent.dllevdns_base_count_nameserversevdns_base_free3_evdns_base_free libevent.dllevdns_base_freeevdns_base_load_hosts?_evdns_base_load_hosts libevent.dllevdns_base_load_hostsevdns_base_nameserver_addG_evdns_base_nameserver_add libevent.dllevdns_base_nameserver_addevdns_base_nameserver_ip_addM_evdns_base_nameserver_ip_add libevent.dllevdns_base_nameserver_ip_add$"evdns_base_nameserver_sockaddr_addY#_evdns_base_nameserver_sockaddr_add libevent.dll"evdns_base_nameserver_sockaddr_addevdns_base_new1_evdns_base_new libevent.dllevdns_base_newevdns_base_resolv_conf_parseM_evdns_base_resolv_conf_parse libevent.dllevdns_base_resolv_conf_parseevdns_base_resolve_ipv4C_evdns_base_resolve_ipv4 libevent.dllevdns_base_resolve_ipv4evdns_base_resolve_ipv6C_evdns_base_resolve_ipv6 libevent.dllevdns_base_resolve_ipv6evdns_base_resolve_reverseI_evdns_base_resolve_reverse libevent.dllevdns_base_resolve_reverse!evdns_base_resolve_reverse_ipv6S _evdns_base_resolve_reverse_ipv6 libevent.dllevdns_base_resolve_reverse_ipv6evdns_base_resume7_evdns_base_resume libevent.dllevdns_base_resumeevdns_base_search_add?_evdns_base_search_add libevent.dllevdns_base_search_addevdns_base_search_clearC_evdns_base_search_clear libevent.dllevdns_base_search_clearevdns_base_search_ndots_setK_evdns_base_search_ndots_set libevent.dllevdns_base_search_ndots_setevdns_base_set_option?_evdns_base_set_option libevent.dllevdns_base_set_optionevdns_cancel_request=_evdns_cancel_request libevent.dllevdns_cancel_request%#evdns_clear_nameservers_and_suspend[$_evdns_clear_nameservers_and_suspend libevent.dll#evdns_clear_nameservers_and_suspendevdns_close_server_portC_evdns_close_server_port libevent.dllevdns_close_server_port" evdns_config_windows_nameserversU!_evdns_config_windows_nameservers libevent.dll evdns_config_windows_nameserversevdns_count_nameserversC_evdns_count_nameservers libevent.dllevdns_count_nameserversevdns_err_to_string;_evdns_err_to_string libevent.dllevdns_err_to_stringevdns_get_global_base?_evdns_get_global_base libevent.dllevdns_get_global_baseevdns_getaddrinfo7_evdns_getaddrinfo libevent.dllevdns_getaddrinfoevdns_getaddrinfo_cancelE_evdns_getaddrinfo_cancel libevent.dllevdns_getaddrinfo_cancel evdns_init) _evdns_init libevent.dll evdns_initevdns_nameserver_add=_evdns_nameserver_add libevent.dllevdns_nameserver_addevdns_nameserver_ip_addC_evdns_nameserver_ip_add libevent.dllevdns_nameserver_ip_addevdns_resolv_conf_parseC_evdns_resolv_conf_parse libevent.dllevdns_resolv_conf_parseevdns_resolve_ipv49_evdns_resolve_ipv4 libevent.dllevdns_resolve_ipv4evdns_resolve_ipv69_evdns_resolve_ipv6 libevent.dllevdns_resolve_ipv6evdns_resolve_reverse?_evdns_resolve_reverse libevent.dllevdns_resolve_reverseevdns_resolve_reverse_ipv6I_evdns_resolve_reverse_ipv6 libevent.dllevdns_resolve_reverse_ipv6 evdns_resume- _evdns_resume libevent.dll evdns_resumeevdns_search_add5_evdns_search_add libevent.dllevdns_search_addevdns_search_clear9_evdns_search_clear libevent.dllevdns_search_clearevdns_search_ndots_setA_evdns_search_ndots_set libevent.dllevdns_search_ndots_set" evdns_server_request_add_a_replyU!_evdns_server_request_add_a_reply libevent.dll evdns_server_request_add_a_reply%#evdns_server_request_add_aaaa_reply[$_evdns_server_request_add_aaaa_reply libevent.dll#evdns_server_request_add_aaaa_reply&$evdns_server_request_add_cname_reply]%_evdns_server_request_add_cname_reply libevent.dll$evdns_server_request_add_cname_reply$"evdns_server_request_add_ptr_replyY#_evdns_server_request_add_ptr_reply libevent.dll"evdns_server_request_add_ptr_reply evdns_server_request_add_replyQ_evdns_server_request_add_reply libevent.dllevdns_server_request_add_replyevdns_server_request_dropG_evdns_server_request_drop libevent.dllevdns_server_request_drop*(evdns_server_request_get_requesting_addre)_evdns_server_request_get_requesting_addr libevent.dll(evdns_server_request_get_requesting_addrevdns_server_request_respondM_evdns_server_request_respond libevent.dllevdns_server_request_respond evdns_server_request_set_flagsQ_evdns_server_request_set_flags libevent.dllevdns_server_request_set_flagsevdns_set_log_fn5_evdns_set_log_fn libevent.dllevdns_set_log_fnevdns_set_option5_evdns_set_option libevent.dllevdns_set_optionevdns_set_random_bytes_fnG_evdns_set_random_bytes_fn libevent.dllevdns_set_random_bytes_fnevdns_set_transaction_id_fnK_evdns_set_transaction_id_fn libevent.dllevdns_set_transaction_id_fnevdns_shutdown1_evdns_shutdown libevent.dllevdns_shutdown event_active- _event_active libevent.dll event_activeevent_active_nolock;_event_active_nolock libevent.dllevent_active_nolock event_add' _event_add libevent.dll event_add event_assign- _event_assign libevent.dll event_assignevent_base_add_virtualA_event_base_add_virtual libevent.dllevent_base_add_virtualevent_base_assert_ok=_event_base_assert_ok libevent.dllevent_base_assert_okevent_base_del_virtualA_event_base_del_virtual libevent.dllevent_base_del_virtualevent_base_dispatch;_event_base_dispatch libevent.dllevent_base_dispatchevent_base_dump_eventsA_event_base_dump_events libevent.dllevent_base_dump_eventsevent_base_free3_event_base_free libevent.dllevent_base_free" event_base_get_deferred_cb_queueU!_event_base_get_deferred_cb_queue libevent.dll event_base_get_deferred_cb_queueevent_base_get_featuresC_event_base_get_features libevent.dllevent_base_get_featuresevent_base_get_iocp;_event_base_get_iocp libevent.dllevent_base_get_iocpevent_base_get_method?_event_base_get_method libevent.dllevent_base_get_method event_base_gettimeofday_cachedQ_event_base_gettimeofday_cached libevent.dllevent_base_gettimeofday_cachedevent_base_got_break=_event_base_got_break libevent.dllevent_base_got_breakevent_base_got_exit;_event_base_got_exit libevent.dllevent_base_got_exit event_base_init_common_timeoutQ_event_base_init_common_timeout libevent.dllevent_base_init_common_timeoutevent_base_loop3_event_base_loop libevent.dllevent_base_loopevent_base_loopbreak=_event_base_loopbreak libevent.dllevent_base_loopbreakevent_base_loopexit;_event_base_loopexit libevent.dllevent_base_loopexitevent_base_new1_event_base_new libevent.dllevent_base_newevent_base_new_with_configI_event_base_new_with_config libevent.dllevent_base_new_with_configevent_base_once3_event_base_once libevent.dllevent_base_onceevent_base_priority_initE_event_base_priority_init libevent.dllevent_base_priority_initevent_base_set1_event_base_set libevent.dllevent_base_setevent_base_start_iocp?_event_base_start_iocp libevent.dllevent_base_start_iocpevent_base_stop_iocp=_event_base_stop_iocp libevent.dllevent_base_stop_iocpevent_changelist_add=_event_changelist_add libevent.dllevent_changelist_addevent_changelist_del=_event_changelist_del libevent.dllevent_changelist_delevent_changelist_freememE_event_changelist_freemem libevent.dllevent_changelist_freememevent_changelist_init?_event_changelist_init libevent.dllevent_changelist_initevent_changelist_remove_allK_event_changelist_remove_all libevent.dllevent_changelist_remove_allevent_config_avoid_methodG_event_config_avoid_method libevent.dllevent_config_avoid_methodevent_config_free7_event_config_free libevent.dllevent_config_freeevent_config_new5_event_config_new libevent.dllevent_config_newevent_config_require_featuresO_event_config_require_features libevent.dllevent_config_require_featuresevent_config_set_flag?_event_config_set_flag libevent.dllevent_config_set_flag event_config_set_num_cpus_hintQ_event_config_set_num_cpus_hint libevent.dllevent_config_set_num_cpus_hintevent_debug_map_HT_CLEARE_event_debug_map_HT_CLEAR libevent.dllevent_debug_map_HT_CLEARevent_debug_map_HT_GROWC_event_debug_map_HT_GROW libevent.dllevent_debug_map_HT_GROWevent_debug_unassign=_event_debug_unassign libevent.dllevent_debug_unassignevent_deferred_cb_cancelE_event_deferred_cb_cancel libevent.dllevent_deferred_cb_cancelevent_deferred_cb_initA_event_deferred_cb_init libevent.dllevent_deferred_cb_initevent_deferred_cb_queue_initM_event_deferred_cb_queue_init libevent.dllevent_deferred_cb_queue_initevent_deferred_cb_scheduleI_event_deferred_cb_schedule libevent.dllevent_deferred_cb_schedule event_del' _event_del libevent.dll event_delevent_dispatch1_event_dispatch libevent.dllevent_dispatchevent_enable_debug_modeC_event_enable_debug_mode libevent.dllevent_enable_debug_mode event_err' _event_err libevent.dll event_err event_errx) _event_errx libevent.dll event_errx event_free) _event_free libevent.dll event_freeevent_get_assignment=_event_get_assignment libevent.dllevent_get_assignmentevent_get_base1_event_get_base libevent.dllevent_get_baseevent_get_callback9_event_get_callback libevent.dllevent_get_callbackevent_get_callback_argA_event_get_callback_arg libevent.dllevent_get_callback_argevent_get_events5_event_get_events libevent.dllevent_get_events event_get_fd- _event_get_fd libevent.dll event_get_fdevent_get_method5_event_get_method libevent.dllevent_get_methodevent_get_struct_event_sizeK_event_get_struct_event_size libevent.dllevent_get_struct_event_sizeevent_get_supported_methodsK_event_get_supported_methods libevent.dllevent_get_supported_methodsevent_get_version7_event_get_version libevent.dllevent_get_versionevent_get_version_numberE_event_get_version_number libevent.dllevent_get_version_numberevent_get_win32_extension_fnsO_event_get_win32_extension_fns libevent.dllevent_get_win32_extension_fnsevent_global_current_base_I_event_global_current_base_ libevent.dllevent_global_current_base_event_global_setup_locks_G_event_global_setup_locks_ libevent.dllevent_global_setup_locks_ event_init) _event_init libevent.dll event_initevent_initialized7_event_initialized libevent.dllevent_initializedevent_io_map_HT_CLEAR?_event_io_map_HT_CLEAR libevent.dllevent_io_map_HT_CLEARevent_io_map_HT_GROW=_event_io_map_HT_GROW libevent.dllevent_io_map_HT_GROW event_iocp_activate_overlappedQ_event_iocp_activate_overlapped libevent.dllevent_iocp_activate_overlappedevent_iocp_port_associateG_event_iocp_port_associate libevent.dllevent_iocp_port_associateevent_iocp_port_launchA_event_iocp_port_launch libevent.dllevent_iocp_port_launchevent_iocp_shutdown;_event_iocp_shutdown libevent.dllevent_iocp_shutdown event_loop) _event_loop libevent.dll event_loopevent_loopbreak3_event_loopbreak libevent.dllevent_loopbreakevent_loopexit1_event_loopexit libevent.dllevent_loopexitevent_mm_calloc_5_event_mm_calloc_ libevent.dllevent_mm_calloc_event_mm_free_1_event_mm_free_ libevent.dllevent_mm_free_event_mm_malloc_5_event_mm_malloc_ libevent.dllevent_mm_malloc_event_mm_realloc_7_event_mm_realloc_ libevent.dllevent_mm_realloc_event_mm_strdup_5_event_mm_strdup_ libevent.dllevent_mm_strdup_ event_msgx) _event_msgx libevent.dll event_msgx event_new' _event_new libevent.dll event_new event_once) _event_once libevent.dll event_onceevent_overlapped_init?_event_overlapped_init libevent.dllevent_overlapped_init event_pending/_event_pending libevent.dll event_pendingevent_priority_init;_event_priority_init libevent.dllevent_priority_initevent_priority_set9_event_priority_set libevent.dllevent_priority_set event_reinit- _event_reinit libevent.dll event_reinit event_set' _event_set libevent.dll event_setevent_set_fatal_callbackE_event_set_fatal_callback libevent.dllevent_set_fatal_callbackevent_set_log_callbackA_event_set_log_callback libevent.dllevent_set_log_callbackevent_set_mem_functionsC_event_set_mem_functions libevent.dllevent_set_mem_functionsevent_sock_err1_event_sock_err libevent.dllevent_sock_errevent_sock_warn3_event_sock_warn libevent.dllevent_sock_warn event_warn) _event_warn libevent.dll event_warn event_warnx+ _event_warnx libevent.dll event_warnxevhttp_accept_socket=_evhttp_accept_socket libevent.dllevhttp_accept_socket" evhttp_accept_socket_with_handleU!_evhttp_accept_socket_with_handle libevent.dll evhttp_accept_socket_with_handleevhttp_add_header7_evhttp_add_header libevent.dllevhttp_add_headerevhttp_add_server_aliasC_evhttp_add_server_alias libevent.dllevhttp_add_server_aliasevhttp_add_virtual_hostC_evhttp_add_virtual_host libevent.dllevhttp_add_virtual_hostevhttp_bind_listener=_evhttp_bind_listener libevent.dllevhttp_bind_listenerevhttp_bind_socket9_evhttp_bind_socket libevent.dllevhttp_bind_socket evhttp_bind_socket_with_handleQ_evhttp_bind_socket_with_handle libevent.dllevhttp_bind_socket_with_handleevhttp_bound_socket_get_fdI_evhttp_bound_socket_get_fd libevent.dllevhttp_bound_socket_get_fd" evhttp_bound_socket_get_listenerU!_evhttp_bound_socket_get_listener libevent.dll evhttp_bound_socket_get_listenerevhttp_cancel_request?_evhttp_cancel_request libevent.dllevhttp_cancel_requestevhttp_clear_headers=_evhttp_clear_headers libevent.dllevhttp_clear_headersevhttp_connection_base_newI_evhttp_connection_base_new libevent.dllevhttp_connection_base_newevhttp_connection_connectG_evhttp_connection_connect libevent.dllevhttp_connection_connectevhttp_connection_failA_evhttp_connection_fail libevent.dllevhttp_connection_failevhttp_connection_freeA_evhttp_connection_free libevent.dllevhttp_connection_freeevhttp_connection_get_baseI_evhttp_connection_get_base libevent.dllevhttp_connection_get_base#!evhttp_connection_get_buffereventW"_evhttp_connection_get_bufferevent libevent.dll!evhttp_connection_get_buffereventevhttp_connection_get_peerI_evhttp_connection_get_peer libevent.dllevhttp_connection_get_peerevhttp_connection_new?_evhttp_connection_new libevent.dllevhttp_connection_newevhttp_connection_resetC_evhttp_connection_reset libevent.dllevhttp_connection_resetevhttp_connection_set_baseI_evhttp_connection_set_base libevent.dllevhttp_connection_set_baseevhttp_connection_set_closecbO_evhttp_connection_set_closecb libevent.dllevhttp_connection_set_closecb%#evhttp_connection_set_local_address[$_evhttp_connection_set_local_address libevent.dll#evhttp_connection_set_local_address" evhttp_connection_set_local_portU!_evhttp_connection_set_local_port libevent.dll evhttp_connection_set_local_port%#evhttp_connection_set_max_body_size[$_evhttp_connection_set_max_body_size libevent.dll#evhttp_connection_set_max_body_size(&evhttp_connection_set_max_headers_sizea'_evhttp_connection_set_max_headers_size libevent.dll&evhttp_connection_set_max_headers_sizeevhttp_connection_set_retriesO_evhttp_connection_set_retries libevent.dllevhttp_connection_set_retriesevhttp_connection_set_timeoutO_evhttp_connection_set_timeout libevent.dllevhttp_connection_set_timeoutevhttp_decode_uri7_evhttp_decode_uri libevent.dllevhttp_decode_urievhttp_del_accept_socketE_evhttp_del_accept_socket libevent.dllevhttp_del_accept_socket evhttp_del_cb/_evhttp_del_cb libevent.dll evhttp_del_cbevhttp_encode_uri7_evhttp_encode_uri libevent.dllevhttp_encode_urievhttp_find_header9_evhttp_find_header libevent.dllevhttp_find_header evhttp_free+ _evhttp_free libevent.dll evhttp_freeevhttp_htmlescape7_evhttp_htmlescape libevent.dllevhttp_htmlescapeevhttp_make_request;_evhttp_make_request libevent.dllevhttp_make_request evhttp_new) _evhttp_new libevent.dll evhttp_newevhttp_parse_firstlineA_evhttp_parse_firstline libevent.dllevhttp_parse_firstlineevhttp_parse_headers=_evhttp_parse_headers libevent.dllevhttp_parse_headersevhttp_parse_query9_evhttp_parse_query libevent.dllevhttp_parse_queryevhttp_parse_query_strA_evhttp_parse_query_str libevent.dllevhttp_parse_query_strevhttp_remove_header=_evhttp_remove_header libevent.dllevhttp_remove_headerevhttp_remove_server_aliasI_evhttp_remove_server_alias libevent.dllevhttp_remove_server_aliasevhttp_remove_virtual_hostI_evhttp_remove_virtual_host libevent.dllevhttp_remove_virtual_hostevhttp_request_free;_evhttp_request_free libevent.dllevhttp_request_freeevhttp_request_get_commandI_evhttp_request_get_command libevent.dllevhttp_request_get_commandevhttp_request_get_connectionO_evhttp_request_get_connection libevent.dllevhttp_request_get_connectionevhttp_request_get_evhttp_uriO_evhttp_request_get_evhttp_uri libevent.dllevhttp_request_get_evhttp_urievhttp_request_get_hostC_evhttp_request_get_host libevent.dllevhttp_request_get_host!evhttp_request_get_input_bufferS _evhttp_request_get_input_buffer libevent.dllevhttp_request_get_input_buffer" evhttp_request_get_input_headersU!_evhttp_request_get_input_headers libevent.dll evhttp_request_get_input_headers" evhttp_request_get_output_bufferU!_evhttp_request_get_output_buffer libevent.dll evhttp_request_get_output_buffer#!evhttp_request_get_output_headersW"_evhttp_request_get_output_headers libevent.dll!evhttp_request_get_output_headers" evhttp_request_get_response_codeU!_evhttp_request_get_response_code libevent.dll evhttp_request_get_response_codeevhttp_request_get_uriA_evhttp_request_get_uri libevent.dllevhttp_request_get_urievhttp_request_is_ownedC_evhttp_request_is_owned libevent.dllevhttp_request_is_ownedevhttp_request_new9_evhttp_request_new libevent.dllevhttp_request_newevhttp_request_own9_evhttp_request_own libevent.dllevhttp_request_ownevhttp_request_set_chunked_cbO_evhttp_request_set_chunked_cb libevent.dllevhttp_request_set_chunked_cbevhttp_response_code=_evhttp_response_code libevent.dllevhttp_response_codeevhttp_send_error7_evhttp_send_error libevent.dllevhttp_send_errorevhttp_send_page5_evhttp_send_page libevent.dllevhttp_send_pageevhttp_send_reply7_evhttp_send_reply libevent.dllevhttp_send_replyevhttp_send_reply_chunkC_evhttp_send_reply_chunk libevent.dllevhttp_send_reply_chunkevhttp_send_reply_end?_evhttp_send_reply_end libevent.dllevhttp_send_reply_endevhttp_send_reply_startC_evhttp_send_reply_start libevent.dllevhttp_send_reply_startevhttp_set_allowed_methodsI_evhttp_set_allowed_methods libevent.dllevhttp_set_allowed_methods evhttp_set_cb/_evhttp_set_cb libevent.dll evhttp_set_cbevhttp_set_gencb5_evhttp_set_gencb libevent.dllevhttp_set_gencbevhttp_set_max_body_sizeE_evhttp_set_max_body_size libevent.dllevhttp_set_max_body_sizeevhttp_set_max_headers_sizeK_evhttp_set_max_headers_size libevent.dllevhttp_set_max_headers_sizeevhttp_set_timeout9_evhttp_set_timeout libevent.dllevhttp_set_timeout evhttp_start- _evhttp_start libevent.dll evhttp_startevhttp_start_read7_evhttp_start_read libevent.dllevhttp_start_readevhttp_uri_free3_evhttp_uri_free libevent.dllevhttp_uri_freeevhttp_uri_get_fragmentC_evhttp_uri_get_fragment libevent.dllevhttp_uri_get_fragmentevhttp_uri_get_host;_evhttp_uri_get_host libevent.dllevhttp_uri_get_hostevhttp_uri_get_path;_evhttp_uri_get_path libevent.dllevhttp_uri_get_pathevhttp_uri_get_port;_evhttp_uri_get_port libevent.dllevhttp_uri_get_portevhttp_uri_get_query=_evhttp_uri_get_query libevent.dllevhttp_uri_get_queryevhttp_uri_get_scheme?_evhttp_uri_get_scheme libevent.dllevhttp_uri_get_schemeevhttp_uri_get_userinfoC_evhttp_uri_get_userinfo libevent.dllevhttp_uri_get_userinfoevhttp_uri_join3_evhttp_uri_join libevent.dllevhttp_uri_joinevhttp_uri_new1_evhttp_uri_new libevent.dllevhttp_uri_newevhttp_uri_parse5_evhttp_uri_parse libevent.dllevhttp_uri_parseevhttp_uri_parse_with_flagsK_evhttp_uri_parse_with_flags libevent.dllevhttp_uri_parse_with_flagsevhttp_uri_set_flags=_evhttp_uri_set_flags libevent.dllevhttp_uri_set_flagsevhttp_uri_set_fragmentC_evhttp_uri_set_fragment libevent.dllevhttp_uri_set_fragmentevhttp_uri_set_host;_evhttp_uri_set_host libevent.dllevhttp_uri_set_hostevhttp_uri_set_path;_evhttp_uri_set_path libevent.dllevhttp_uri_set_pathevhttp_uri_set_port;_evhttp_uri_set_port libevent.dllevhttp_uri_set_portevhttp_uri_set_query=_evhttp_uri_set_query libevent.dllevhttp_uri_set_queryevhttp_uri_set_scheme?_evhttp_uri_set_scheme libevent.dllevhttp_uri_set_schemeevhttp_uri_set_userinfoC_evhttp_uri_set_userinfo libevent.dllevhttp_uri_set_userinfoevhttp_uridecode5_evhttp_uridecode libevent.dllevhttp_uridecodeevhttp_uriencode5_evhttp_uriencode libevent.dllevhttp_uriencodeevmap_check_integrity?_evmap_check_integrity libevent.dllevmap_check_integrityevmap_io_active3_evmap_io_active libevent.dllevmap_io_active evmap_io_add- _evmap_io_add libevent.dll evmap_io_addevmap_io_clear1_evmap_io_clear libevent.dllevmap_io_clear evmap_io_del- _evmap_io_del libevent.dll evmap_io_delevmap_io_get_fdinfo;_evmap_io_get_fdinfo libevent.dllevmap_io_get_fdinfoevmap_io_initmap5_evmap_io_initmap libevent.dllevmap_io_initmapevmap_signal_active;_evmap_signal_active libevent.dllevmap_signal_activeevmap_signal_add5_evmap_signal_add libevent.dllevmap_signal_addevmap_signal_clear9_evmap_signal_clear libevent.dllevmap_signal_clearevmap_signal_del5_evmap_signal_del libevent.dllevmap_signal_delevmap_signal_initmap=_evmap_signal_initmap libevent.dllevmap_signal_initmapevrpc_add_hook1_evrpc_add_hook libevent.dllevrpc_add_hook evrpc_free) _evrpc_free libevent.dll evrpc_freeevrpc_get_reply3_evrpc_get_reply libevent.dllevrpc_get_replyevrpc_get_request7_evrpc_get_request libevent.dllevrpc_get_requestevrpc_hook_add_meta;_evrpc_hook_add_meta libevent.dllevrpc_hook_add_metaevrpc_hook_find_meta=_evrpc_hook_find_meta libevent.dllevrpc_hook_find_metaevrpc_hook_get_connectionG_evrpc_hook_get_connection libevent.dllevrpc_hook_get_connection evrpc_init) _evrpc_init libevent.dll evrpc_initevrpc_make_request9_evrpc_make_request libevent.dllevrpc_make_requestevrpc_make_request_ctxA_evrpc_make_request_ctx libevent.dllevrpc_make_request_ctxevrpc_pool_add_connectionG_evrpc_pool_add_connection libevent.dllevrpc_pool_add_connectionevrpc_pool_free3_evrpc_pool_free libevent.dllevrpc_pool_freeevrpc_pool_new1_evrpc_pool_new libevent.dllevrpc_pool_newevrpc_pool_remove_connectionM_evrpc_pool_remove_connection libevent.dllevrpc_pool_remove_connectionevrpc_pool_set_timeoutA_evrpc_pool_set_timeout libevent.dllevrpc_pool_set_timeoutevrpc_register_genericA_evrpc_register_generic libevent.dllevrpc_register_genericevrpc_register_rpc9_evrpc_register_rpc libevent.dllevrpc_register_rpcevrpc_remove_hook7_evrpc_remove_hook libevent.dllevrpc_remove_hookevrpc_reqstate_free;_evrpc_reqstate_free libevent.dllevrpc_reqstate_freeevrpc_request_done9_evrpc_request_done libevent.dllevrpc_request_doneevrpc_request_get_poolA_evrpc_request_get_pool libevent.dllevrpc_request_get_poolevrpc_request_set_cb=_evrpc_request_set_cb libevent.dllevrpc_request_set_cbevrpc_request_set_poolA_evrpc_request_set_pool libevent.dllevrpc_request_set_poolevrpc_resume_request=_evrpc_resume_request libevent.dllevrpc_resume_requestevrpc_send_request_genericI_evrpc_send_request_generic libevent.dllevrpc_send_request_genericevrpc_unregister_rpc=_evrpc_unregister_rpc libevent.dllevrpc_unregister_rpc evsig_dealloc/_evsig_dealloc libevent.dll evsig_deallocevsig_global_setup_locks_G_evsig_global_setup_locks_ libevent.dllevsig_global_setup_locks_ evsig_init) _evsig_init libevent.dll evsig_initevsig_set_base1_evsig_set_base libevent.dllevsig_set_base evtag_consume/_evtag_consume libevent.dll evtag_consumeevtag_decode_int5_evtag_decode_int libevent.dllevtag_decode_intevtag_decode_int649_evtag_decode_int64 libevent.dllevtag_decode_int64evtag_decode_tag5_evtag_decode_tag libevent.dllevtag_decode_tagevtag_encode_int5_evtag_encode_int libevent.dllevtag_encode_intevtag_encode_int649_evtag_encode_int64 libevent.dllevtag_encode_int64evtag_encode_tag5_evtag_encode_tag libevent.dllevtag_encode_tag evtag_init) _evtag_init libevent.dll evtag_init evtag_marshal/_evtag_marshal libevent.dll evtag_marshalevtag_marshal_buffer=_evtag_marshal_buffer libevent.dllevtag_marshal_bufferevtag_marshal_int7_evtag_marshal_int libevent.dllevtag_marshal_intevtag_marshal_int64;_evtag_marshal_int64 libevent.dllevtag_marshal_int64evtag_marshal_string=_evtag_marshal_string libevent.dllevtag_marshal_stringevtag_marshal_timeval?_evtag_marshal_timeval libevent.dllevtag_marshal_timevalevtag_payload_length=_evtag_payload_length libevent.dllevtag_payload_length evtag_peek) _evtag_peek libevent.dll evtag_peekevtag_peek_length7_evtag_peek_length libevent.dllevtag_peek_lengthevtag_unmarshal3_evtag_unmarshal libevent.dllevtag_unmarshalevtag_unmarshal_fixed?_evtag_unmarshal_fixed libevent.dllevtag_unmarshal_fixedevtag_unmarshal_headerA_evtag_unmarshal_header libevent.dllevtag_unmarshal_headerevtag_unmarshal_int;_evtag_unmarshal_int libevent.dllevtag_unmarshal_intevtag_unmarshal_int64?_evtag_unmarshal_int64 libevent.dllevtag_unmarshal_int64evtag_unmarshal_stringA_evtag_unmarshal_string libevent.dllevtag_unmarshal_stringevtag_unmarshal_timevalC_evtag_unmarshal_timeval libevent.dllevtag_unmarshal_timevalevthread_enable_lock_debugingO_evthread_enable_lock_debuging libevent.dllevthread_enable_lock_debugingevthread_make_base_notifiableO_evthread_make_base_notifiable libevent.dllevthread_make_base_notifiable" evthread_set_condition_callbacksU!_evthread_set_condition_callbacks libevent.dll evthread_set_condition_callbacksevthread_set_id_callbackE_evthread_set_id_callback libevent.dllevthread_set_id_callbackevthread_set_lock_callbacksK_evthread_set_lock_callbacks libevent.dllevthread_set_lock_callbacksevthread_setup_global_lock_K_evthread_setup_global_lock_ libevent.dllevthread_setup_global_lock_evthread_use_windows_threadsM_evthread_use_windows_threads libevent.dllevthread_use_windows_threadsevutil_addrinfo_appendA_evutil_addrinfo_append libevent.dllevutil_addrinfo_append$"evutil_adjust_hints_for_addrconfigY#_evutil_adjust_hints_for_addrconfig libevent.dll"evutil_adjust_hints_for_addrconfigevutil_ascii_strcasecmpC_evutil_ascii_strcasecmp libevent.dllevutil_ascii_strcasecmpevutil_ascii_strncasecmpE_evutil_ascii_strncasecmp libevent.dllevutil_ascii_strncasecmpevutil_closesocket9_evutil_closesocket libevent.dllevutil_closesocketevutil_ersatz_socketpairE_evutil_ersatz_socketpair libevent.dllevutil_ersatz_socketpairevutil_format_sockaddr_portK_evutil_format_sockaddr_port libevent.dllevutil_format_sockaddr_portevutil_freeaddrinfo;_evutil_freeaddrinfo libevent.dllevutil_freeaddrinfoevutil_gai_strerror;_evutil_gai_strerror libevent.dllevutil_gai_strerrorevutil_getaddrinfo9_evutil_getaddrinfo libevent.dllevutil_getaddrinfoevutil_getaddrinfo_asyncE_evutil_getaddrinfo_async libevent.dllevutil_getaddrinfo_asyncevutil_getaddrinfo_commonG_evutil_getaddrinfo_common libevent.dllevutil_getaddrinfo_common evutil_getenv/_evutil_getenv libevent.dll evutil_getenvevutil_gettimeofday;_evutil_gettimeofday libevent.dllevutil_gettimeofdayevutil_hex_char_to_intA_evutil_hex_char_to_int libevent.dllevutil_hex_char_to_intevutil_inet_ntop5_evutil_inet_ntop libevent.dllevutil_inet_ntopevutil_inet_pton5_evutil_inet_pton libevent.dllevutil_inet_pton$"evutil_load_windows_system_libraryY#_evutil_load_windows_system_library libevent.dll"evutil_load_windows_system_library%#evutil_make_listen_socket_reuseable[$_evutil_make_listen_socket_reuseable libevent.dll#evutil_make_listen_socket_reuseable evutil_make_socket_closeonexecQ_evutil_make_socket_closeonexec libevent.dllevutil_make_socket_closeonexec evutil_make_socket_nonblockingQ_evutil_make_socket_nonblocking libevent.dllevutil_make_socket_nonblockingevutil_new_addrinfo;_evutil_new_addrinfo libevent.dllevutil_new_addrinfoevutil_open_closeonexecC_evutil_open_closeonexec libevent.dllevutil_open_closeonexecevutil_parse_sockaddr_portI_evutil_parse_sockaddr_port libevent.dllevutil_parse_sockaddr_portevutil_read_file5_evutil_read_file libevent.dllevutil_read_fileevutil_secure_rng_add_bytesK_evutil_secure_rng_add_bytes libevent.dllevutil_secure_rng_add_bytesevutil_secure_rng_get_bytesK_evutil_secure_rng_get_bytes libevent.dllevutil_secure_rng_get_bytes'%evutil_secure_rng_global_setup_locks__&_evutil_secure_rng_global_setup_locks_ libevent.dll%evutil_secure_rng_global_setup_locks_evutil_secure_rng_initA_evutil_secure_rng_init libevent.dllevutil_secure_rng_init!evutil_set_evdns_getaddrinfo_fnS _evutil_set_evdns_getaddrinfo_fn libevent.dllevutil_set_evdns_getaddrinfo_fnevutil_snprintf3_evutil_snprintf libevent.dllevutil_snprintfevutil_sockaddr_cmp;_evutil_sockaddr_cmp libevent.dllevutil_sockaddr_cmpevutil_sockaddr_is_loopbackK_evutil_sockaddr_is_loopback libevent.dllevutil_sockaddr_is_loopbackevutil_socket_connect?_evutil_socket_connect libevent.dllevutil_socket_connectevutil_socket_error_to_stringO_evutil_socket_error_to_string libevent.dllevutil_socket_error_to_string#!evutil_socket_finished_connectingW"_evutil_socket_finished_connecting libevent.dll!evutil_socket_finished_connectingevutil_socket_geterrorA_evutil_socket_geterror libevent.dllevutil_socket_geterrorevutil_socketpair7_evutil_socketpair libevent.dllevutil_socketpairevutil_strtoll1_evutil_strtoll libevent.dllevutil_strtollevutil_tv_to_msec7_evutil_tv_to_msec libevent.dllevutil_tv_to_msecevutil_vsnprintf5_evutil_vsnprintf libevent.dllevutil_vsnprintf gai_strerrorA/_gai_strerrorA libevent.dll gai_strerrorA win32ops% _win32ops libevent.dllwin32opsbH=)TtĴ)_bufferevent_rate_limit_group_get_totals!%_bufferevent_socket_connect_hostname!K_bufferevent_write!_evbuffer_add_printf!_evconnlistener_disable! _evdns_server_request_set_flags!_event_config_require_features! _event_iocp_activate_overlapped! _evrpc_free! &__bufferevent_init_generic_timeout_cbs__evbuffer_overlapped_set_fd__evthread_debug_get_real_lock-_ev_token_bucket_init_evdns_base_search_ndots_set_event_get_events% l:+D]yR__event_debug_mode_on!_bufferevent_flush!_evsig_global_setup_locks_! _evsig_set_base! _evutil_addrinfo_append!o _evutil_socketpair!w__evthreadimpl_cond_signalK_bufferevent_get_output) _event_err_event_iocp_port_associate_evhttp_bind_socket_with_handleK _evhttp_parse_firstline( _evhttp_uri_get_host3 _evutil_secure_rng_get_bytes$`8 uWl.G__evthreadimpl_get_id!Y_evdns_close_server_port!_event_base_loop!9_event_get_version_number!L_evhttp_connection_get_peer! _evsig_dealloc! _evutil_closesocket! _evutil_getenv! __evthreadimpl_lock_alloci_evdns_base_nameserver_ip_addq_event_base_loopbreak>_event_mm_realloc__evhttp_add_server_alias1 _evhttp_connection_connectw $_evhttp_connection_set_max_body_size _evhttp_send_reply_end _evrpc_get_reply 峫B&hu[Q6"_bufferevent_decrement_read_limit!_bufferevent_unsuspend_read!x_evbuffer_search_eol!_event_debug_map_HT_CLEAR!_event_mm_free_!_evhttp_accept_socket! _evhttp_remove_header!B _evhttp_request_own! _evhttp_send_reply_chunk! _evhttp_set_max_body_size! _evrpc_resume_request! _evtag_peek! _evutil_getaddrinfo! %_evutil_make_listen_socket_reuseable! !_evutil_set_evdns_getaddrinfo_fn!=_bufferevent_unsuspend_writet6,@ĉ^Oh_EVUTIL_ISLOWER!_bufferevent_async_connect!_evbuffer_add_cb!_evbuffer_pullup!_evutil_ersatz_socketpair! _bufferevent_enable_locking_bufferevent_new__evbuffer_launch_readI&_evdns_base_config_windows_nameserversL_event_get_callback_evhttp_request_set_chunked_cb _evhttp_start _evrpc_init _evrpc_pool_remove_connection> _EVUTIL_ISPRINT6WkJ_bufferevent_lock!Y-_bufferevent_rate_limit_group_decrement_read!%_evdns_clear_nameservers_and_suspend!_event_base_loopbreak!>%__bufferevent_decrement_write_bucketsW-_bufferevent_rate_limit_group_decrement_write_bufferevent_settimeout6_evconnlistener_disable_event_base_dump_events!_evhttp_request_get_input_headers _evhttp_start_read! _evmap_io_del _evtag_decode_int64 _EVUTIL_TOUPPER6N{=Zd$q_bufferevent_pair_get_partner!._bufferevent_rate_limit_group_get_write_limit!_evbuffer_get_contiguous_space!4_evbuffer_get_length!<_evbuffer_search!_evdns_base_search_add!_event_base_once!V_evhttp_bind_socket!E %_evhttp_connection_set_max_body_size! _evrpc_send_request_generic! _evtag_decode_int64! _evtag_encode_tag! _evtag_marshal_buffer! _bufferevent_decref_bufferevent_get_enabled _bufferevent_read_buffer0Au'f[L_evdns_set_log_fn!_event_assign!_evhttp_del_cb! _evthread_enable_lock_debuging!7 _evutil_read_file!__evthreadimpl_lock_unlock~_bufferevent_unlockr_evhttp_connection_set_base _evhttp_uri_get_queryE _evmap_check_integrity |`:ڈlRG+_evbuffer_drain!_evbuffer_reserve_space!_evdns_getaddrinfo_cancel!_event_io_map_HT_GROW!z_evhttp_add_header!+ _evhttp_connection_fail!~ _evutil_sockaddr_cmp!J__event_io_map_HT_REP_IS_BAD_bufferevent_base_set"_bufferevent_rate_limit_group_free,_bufferevent_rate_limit_group_get_read_limit_bufferevent_set_rate_limit_bufferevent_write_buffer_evbuffer_unlock_event_base_stop_iocpn _event_free  _event_newNA*|4_Xl+_bufferevent_rate_limit_group_reset_totals!_evdns_base_new!_event_base_start_iocp!g_event_get_assignment! _event_get_base! _event_set!_evhttp_parse_headers!/ _evhttp_set_max_headers_size! (_bufferevent_rate_limit_group_get_totals_evdns_close_server_port%_evdns_server_request_add_cname_replyk_event_debug_map_HT_GROW_evhttp_make_request _evhttp_request_get_evhttp_urik _evhttp_set_allowed_methods fqAzN"\3__bufferevent_run_eventcb!__evthread_debug_get_real_lock!-_evbuffer_enable_locking!_evdns_resolve_reverse!3_event_debug_map_HT_GROW!_event_dispatch!_event_initialized!m_evmap_io_del! _evtag_unmarshal_header! _evthread_make_base_notifiable!? _evdns_resolve_reverse_ipv6:_event_iocp_port_launch_evhttp_find_header _evrpc_get_request _evrpc_hook_get_connection _evrpc_make_request_ctx& _evrpc_pool_add_connection- yU:(cFm&__bufferevent_del_generic_timeout_cbs!` __event_debug_map_HT_REP_IS_BAD!_bufferevent_decref!_bufferevent_suspend_read!d_ev_token_bucket_update!_evbuffer_remove!_evconnlistener_free!"_evdns_server_request_add_a_reply!Y_event_base_new_with_config!O_bufferevent_ops_socketx_bufferevent_socket_new]_bufferevent_suspend_writek_evbuffer_commit_space _event_loop_event_mm_calloc_ _event_msgx_EVUTIL_ISALPHA_evutil_read_filed8/KCk\x_EVUTIL_TOLOWER!1!_bufferevent_async_set_connected!_evbuffer_add!_event_mm_realloc_! _event_warnx! _evrpc_pool_remove_connection!> _evtag_init! _win32ops!_event_overlapped_init'_evhttp_connection_set_max_headers_size _evrpc_register_rpcT _evutil_secure_rng_init6qc0 |9TF__evbuffer_expand_fast!_bufferevent_unsuspend_write!_evbuffer_lock!V_evconnlistener_get_fd! _evdns_resolv_conf_parse! _evhttp_connection_connect!w _evhttp_parse_query_str!; _evhttp_send_page! %__bufferevent_del_generic_timeout_cbs`_bufferevent_async_connect_evbuffer_pullup_evbuffer_set_parent _evdns_base_resolve_reverse_ipv6_evdns_base_search_clear_evdns_nameserver_add_evdns_resolv_conf_parse _event_enable_debug_mode[wF,6dT_evbuffer_remove_cb!_evhttp_uri_set_flags!q _evtag_unmarshal! _evutil_format_sockaddr_port! __bufferevent_run_writecb _evdns_init_evdns_shutdown"_evhttp_connection_get_bufferevent _evhttp_parse_headers/ _evhttp_request_get_input_bufferz _evhttp_set_cb _evhttp_uri_free' _evrpc_add_hook _evrpc_pool_set_timeoutF _evthread_use_windows_threadsg _evutil_getaddrinfo_common _evutil_new_addrinfoM5({nYA&__bufferevent_decrement_write_buckets!W_evdns_nameserver_add!_event_active_nolock!_evhttp_parse_query!5 _evutil_new_addrinfo!'_evutil_secure_rng_global_setup_locks_!,_bufferevent_filter_new_bufferevent_get_underlying7_event_debug_map_HT_CLEAR_event_mm_strdup__evtag_marshal #_evutil_adjust_hints_for_addrconfigv _evutil_gai_strerror Zg$@2Kt_?buff@?1??gai_strerrorA@@9@9!__evthreadimpl_lock_free!p_bufferevent_init_common!R_bufferevent_setcb!*_evbuffer_remove_cb_entry!_event_base_assert_ok!_event_config_set_flag!_event_get_callback_arg!_event_get_fd!+_evutil_socket_error_to_string!__evbuffer_invoke_callbacksB_evdns_count_nameservers_event_base_got_exit+_event_base_loopexitD_event_changelist_freemem_evhttp_send_reply _evhttp_send_reply_start A5v+Oe,_bufferevent_rate_limit_group_set_min_share!_evbuffer_readln!_bufferevent_disable_bufferevent_priority_set)_evdns_server_request_get_requesting_addr_evhttp_request_get_connectionc _evhttp_uri_get_fragment, _evsig_global_setup_locks_ xPp6*]D_EVUTIL_ISUPPER!'_bufferevent_pair_new!_evbuffer_set_parent!_evdns_count_nameservers!_evdns_err_to_string!_evdns_get_global_base!"_event_base_get_deferred_cb_queue! _event_warn! "_evhttp_connection_set_local_port! _evhttp_connection_set_retries! _evhttp_set_timeout! _evhttp_uri_set_path! _evhttp_uri_set_userinfo! __bufferevent_get_write_maxy!_bufferevent_decrement_read_limit_evbuffer_add_printf_evdns_base_newzC/O"c__bufferevent_run_writecb!__evbuffer_chain_unpin!%_bufferevent_add_to_rate_limit_group!_evdns_resolve_ipv6!-%_evdns_server_request_add_aaaa_reply!b*_evdns_server_request_get_requesting_addr! _evhttp_bind_socket_with_handle!K _evhttp_encode_uri! _evhttp_new!$ _evmap_io_clear! __evbuffer_overlapped_get_fd_evbuffer_get_length<_evdns_set_option_event_config_set_num_cpus_hint_evutil_socket_error_to_string__evutil_tv_to_msec{E!`:/kR_bufferevent_ops_socket!x_evdns_nameserver_ip_add!_evhttp_decode_uri! _evhttp_htmlescape! _evhttp_response_code! _evhttp_uri_get_userinfo!R _evrpc_remove_hook!Z _evthread_set_lock_callbacks!W _evutil_make_socket_closeonexec! _bufferevent_disable_hard_evconnlistener_get_base_evdns_base_set_option_evdns_getaddrinfo _event_once _event_warn _evhttp_add_virtual_host8 _evhttp_connection_fail~ _evhttp_connection_new JkC]w7__evsig_set_handler!'-_bufferevent_rate_limit_group_get_read_limit!_evdns_resolve_ipv4!' _event_del!"_evhttp_accept_socket_with_handle!" _evhttp_parse_firstline!( _evhttp_uri_get_path!9 _evhttp_uri_new!^ _evhttp_uri_set_host!~ _evutil_ascii_strncasecmp! _evutil_freeaddrinfo! __bufferevent_run_readcb_bufferevent_async_can_connect,_bufferevent_rate_limit_group_decrement_read_evbuffer_find%_evdns_base_resolve_reverse;!REu,͍ka_bufferevent_filter_new!_bufferevent_getfd!F_bufferevent_write_buffer!_evbuffer_expand! _evconnlistener_set_cb!$_evdns_set_random_bytes_fn!_event_base_new!J_event_loopbreak!_evhttp_uridecode! _evtag_payload_length! _evbuffer_lockV_evbuffer_search_eol_evdns_base_free^_evdns_server_request_add_reply}_evdns_set_transaction_id_fn_event_config_require_features_evhttp_del_cb !_evhttp_request_get_response_code }>p"HU*3_bufferevent_set_timeouts!# _evdns_init!_event_active!_evhttp_send_reply! _evrpc_add_hook! __evbuffer_expand_fast2_bufferevent_remove_from_rate_limit_group_internal_evdns_base_load_hostsc$_evhttp_connection_set_local_address _evhttp_connection_set_retries _evhttp_uri_set_path _evrpc_pool_free4 _evutil_hex_char_to_int 'ui>V5I%__bufferevent_decrement_read_buckets!N__evthreadimpl_cond_free!D_evbuffer_peek!g_evdns_set_option!_event_changelist_init!#_evhttp_connection_get_bufferevent! _evhttp_uri_get_host!3 _evhttp_uriencode! _evmap_signal_del! _evrpc_pool_new!9 _evrpc_request_set_cb!s __evbuffer_testing_use_mmap_bufferevent_flush_bufferevent_pair_get_partner_bufferevent_unsuspend_readx_evmap_io_active _evmap_io_get_fdinfo _evrpc_request_donef (6B^mR_EVUTIL_ISALNUM! __evbuffer_incref!_evdns_search_ndots_set!R_event_base_get_iocp!_evhttp_set_allowed_methods! _evutil_gai_strerror! _bufferevent_get_read_limit0$_bufferevent_socket_connect_hostnameK_evconnlistener_new_async)_evdns_base_clear_nameservers_and_suspendB_event_get_method0_evhttp_set_gencb _evtag_encode_int _evutil_inet_ntop "_evutil_socket_finished_connectingg*u:gZM_EVUTIL_TOUPPER!6_evbuffer_write_atmost!_event_deferred_cb_schedule!#_evhttp_request_get_output_headers! _evhttp_uri_set_query! _evmap_signal_initmap! _evrpc_make_request_ctx!& _evutil_parse_sockaddr_port!_evutil_vsnprintf!__evbuffer_chain_unpin%_bufferevent_rate_limit_group_set_cfg_evbuffer_remove_buffer_evhttp_connection_reset _evhttp_request_freeV _evhttp_request_is_owned _evhttp_request_own _evtag_marshal_buffer N@^ q|2_bufferevent_get_base!!_evdns_add_server_port_with_base!:_evhttp_connection_free! _evhttp_send_reply_start! _evhttp_uri_parse_with_flags!i "_bufferevent_decrement_write_limit_evdns_search_clearL#_evdns_server_request_add_ptr_replyt_event_base_gettimeofday_cached_event_get_win32_extension_fnsS_event_loopexit_evhttp_bind_listener? _evhttp_connection_free _evhttp_uri_get_schemeK _evhttp_uri_set_port _EVUTIL_ISXDIGIT,_EVUTIL_TOLOWER1aTm+:ŵEz _SIGFPE_REQ!;__bufferevent_get_write_max!y__evbuffer_incref_and_lock!_bufferevent_free!_bufferevent_priority_set!_evbuffer_commit_read!_event_priority_set!_evhttp_bind_listener!? _evhttp_connection_set_timeout! _evrpc_request_done!f _evutil_ascii_strcasecmp! __evbuffer_decref_and_unlock_bufferevent_get_max_to_read_bufferevent_ops_pairr_evbuffer_cb_clear_flags_evbuffer_commit_write_evbuffer_drain_evconnlistener_newKr3?$bT__bufferevent_incref_and_lock!__evthreadimpl_cond_alloc!=_bufferevent_incref!L_evbuffer_add_buffer!_evdns_resume!A_event_iocp_port_launch!_evutil_secure_rng_add_bytes!__bufferevent_run_eventcb__evbuffer_testing_use_sendfile_evdns_base_search_add_event_changelist_delz_event_changelist_init_evhttp_add_header+ _evtag_marshal_int _evtag_marshal_string _evtag_unmarshal_int64" _evutil_gettimeofday )L6Tbr_bufferevent_setfd!0_evbuffer_readline!_event_base_stop_iocp!n(_evhttp_connection_set_max_headers_size! _evsig_init! _evtag_unmarshal_string!) __evthread_is_debug_lock_held5_evdns_set_random_bytes_fn _evhttp_free _evhttp_parse_query5 _evrpc_free _evrpc_unregister_rpc _evtag_encode_tag _evutil_set_evdns_getaddrinfo_fn=_evutil_vsnprintfap|1<G!U__evthreadimpl_lock_lock!w_evhttp_connection_get_base! _evhttp_uri_parse!c _evtag_encode_int! __evthreadimpl_cond_freeD_event_base_got_break%_event_global_setup_locks_b_event_priority_init_evhttp_htmlescape _evrpc_send_request_generic _evtag_consume _evtag_init _evtag_unmarshal .m@`#K__event_io_map_HT_REP_IS_BAD!_evbuffer_prepend!l!_evdns_base_resolve_reverse_ipv6!_evdns_search_add!F&_evdns_server_request_add_cname_reply!k_event_base_get_method! _event_config_set_num_cpus_hint!_event_get_struct_event_size!6_event_priority_init!_evhttp_request_get_host!s _evmap_io_get_fdinfo! __evsig_set_handler'_bufferevent_increfL_bufferevent_socket_connectD_event_iocp_activate_overlapped_evhttp_uri_new^ _evrpc_request_set_cbs IgR9s$]/_event_deferred_cb_queue_init!_event_mm_strdup_!__evbuffer_incref_event_changelist_remove_all_event_dispatch_evhttp_send_error _evhttp_uri_joinY _evhttp_uri_set_query _evhttp_uri_set_userinfo !_evthread_set_condition_callbacksG _EVUTIL_ISALNUM _EVUTIL_ISUPPER':H*dYr_bufferevent_read!_evconnlistener_new!_evdns_resolve_reverse_ipv6!:_event_base_del_virtual!_event_get_win32_extension_fns!S_event_mm_calloc_!_evrpc_pool_set_timeout!F _evrpc_request_get_pool!l _evutil_snprintf!E"__bufferevent_generic_adj_timeoutsi_bufferevent_ops_filterk!_bufferevent_rate_limit_group_new)_bufferevent_remove_from_rate_limit_group_bufferevent_write_evbuffer_expand _evdns_nameserver_ip_add_event_priority_setSC0_vn_EVUTIL_ISALPHA!#__bufferevent_generic_adj_timeouts!i"_bufferevent_rate_limit_group_new!_evdns_base_resolve_reverse!_evdns_search_clear!L_event_iocp_port_associate! _evhttp_free! _evhttp_uri_free!' _evhttp_uri_get_port!? (__evthreadimpl_is_lock_debugging_enabled__bufferevent_get_write_limit>_bufferevent_read _evdns_add_server_port_with_base:!_evdns_server_request_add_a_replyY_evrpc_make_request >K[/lz!__evthreadimpl_cond_wait!R_evconnlistener_new_bind!_event_global_setup_locks_!b_evhttp_cancel_request!c _evhttp_connection_set_base! _evhttp_connection_set_closecb! _evhttp_uri_set_fragment!w __bufferevent_decref_and_unlockF$_bufferevent_add_to_rate_limit_group_bufferevent_set_timeouts#_evbuffer_cb_set_flags_evdns_base_count_nameserversV_evdns_resolve_reverse3_event_base_del_virtual_evhttp_request_new _evmap_signal_del ?_Pw1o _bufferevent_get_input!_bufferevent_get_max_to_write!!_bufferevent_ops_filter!k_evdns_server_request_respond!_event_changelist_freemem!_event_get_supported_methods!> _event_init!i_evrpc_hook_add_meta! _evrpc_request_set_pool!y _evtag_consume! __evthreadimpl_get_idY_evdns_server_request_drop_event_base_new_with_configO_event_get_supported_methods>_evrpc_remove_hookZ _evsig_init N?,^m__event_debugx!_bufferevent_get_read_limit!0#_bufferevent_rate_limit_group_free!_evbuffer_defer_callbacks! _evconnlistener_set_error_cb!+_evdns_base_nameserver_add!j!_evhttp_request_get_input_buffer!z _evhttp_uri_get_query!E _evutil_socket_connect!X_evutil_socket_geterror!p__evthreadimpl_cond_alloc=+_bufferevent_rate_limit_group_set_min_share_evbuffer_add_buffer_evbuffer_read_evdns_server_request_set_flags_event_base_start_iocpgs[A!dL1_bufferevent_read_buffer!_bufferevent_set_rate_limit!_evdns_base_search_ndots_set!_evdns_getaddrinfo!_event_base_priority_init![_event_reinit!_evhttp_del_accept_socket! _evmap_check_integrity! _bufferevent_free_bufferevent_get_base_ev_token_bucket_cfg_free_evbuffer_overlapped_new`_evconnlistener_new_bind_event_base_get_iocp_event_deferred_cb_init_evrpc_register_genericM _evutil_freeaddrinfo !6En`__bufferevent_add_event!?'__bufferevent_init_generic_timeout_cbs!__evthreadimpl_lock_alloc!i3_bufferevent_remove_from_rate_limit_group_internal!_evbuffer_add_reference!$_evdns_server_request_add_ptr_reply!t_evdns_shutdown! _event_add!_evhttp_uri_set_port! _evrpc_reqstate_free!` _evbuffer_add_file_evdns_cancel_request_event_get_versionF_evhttp_uri_parsec _evtag_peek t"H`S;kǔ__evthreadimpl_cond_signal!K._bufferevent_rate_limit_group_decrement_write!_evbuffer_search_range!_event_mm_malloc_!_event_overlapped_init!_evhttp_send_error! _evhttp_start! _evhttp_uri_get_scheme!K "_evthread_set_condition_callbacks!G _gai_strerrorA!_evbuffer_get_contiguous_space4_evbuffer_remove_cb_evdns_base_resolve_ipv4_evdns_base_resolve_ipv6_event_base_free_event_set_fatal_callback_evhttp_uri_get_path9 =1J\r~fQ_bufferevent_new!_$_evdns_base_nameserver_sockaddr_add!y_event_base_loopexit!D_event_changelist_add!t _event_err!_event_get_method!0_event_loopexit!_evrpc_register_rpc!T _event_changelist_addt_event_deferred_cb_cancel _event_errx_event_get_version_numberL_evhttp_connection_set_closecb _evhttp_uriencode _evtag_unmarshal_string) _evthread_make_base_notifiable? _evutil_closesocket _evutil_inet_pton _SIGFPE_REQ;%Ad2Qw __bufferevent_decref_and_unlock!F_evbuffer_launch_read!I_evdns_server_request_drop!_event_global_current_base_!["_evhttp_request_get_output_buffer! "_evhttp_request_get_response_code! _evrpc_unregister_rpc! _bufferevent_enable_bufferevent_init_commonR_bufferevent_setwatermark=_ev_token_bucket_cfg_new_evbuffer_freeze/_evbuffer_launch_writeO_evdns_base_resume _evdns_resumeA_event_get_struct_event_size6_event_initializedm@/]"yn9J_ev_token_bucket_cfg_free!_evbuffer_add_vprintf!_evbuffer_setcb! _event_new!_event_sock_warn! "_evhttp_bound_socket_get_listener!Z _evhttp_request_get_evhttp_uri!k _evtag_decode_int! _evbuffer_copyout_event_base_assert_ok_event_base_loop9_event_config_set_flag_event_deferred_cb_schedule_event_io_map_HT_CLEARs_evhttp_request_get_uri _evhttp_send_reply_chunk _evutil_make_socket_closeonexec \<RGsf))__evthreadimpl_is_lock_debugging_enabled!_"_bufferevent_socket_get_dns_error!T_evbuffer_add_file!_evbuffer_copyout!_evbuffer_freeze!/_evdns_base_free!^_evdns_cancel_request!_event_config_avoid_method!_evhttp_find_header! _evhttp_remove_virtual_host!O _evtag_marshal! #_evutil_socket_finished_connecting!g__bufferevent_add_event?$__bufferevent_decrement_read_bucketsN__event_debug_map_HT_REP_IS_BAD__evutil_weakrandkO!1\?__evsig_restore_handler! _bufferevent_get_max_to_read!_bufferevent_get_output!)_bufferevent_get_write_limit!>_evconnlistener_enable!_event_set_fatal_callback!%_evhttp_connection_set_local_address! _evrpc_init! _evutil_open_closeonexec!)__evbuffer_testing_use_linear_file_access_bufferevent_get_max_to_write!_bufferevent_getfdF_bufferevent_lockY_evdns_base_resolv_conf_parse _event_assign_event_base_onceV_evhttp_bind_socketE e+UG:{r _event_errx!_evhttp_remove_server_alias!H _evutil_getaddrinfo_async! _bufferevent_ops_asyncd_evbuffer_prepend_bufferr_evdns_server_request_respond_evhttp_uri_set_scheme _evmap_io_clear _evsig_set_base _evthread_enable_lock_debuging7 _evutil_secure_rng_add_bytes _win32opsTEr#~8__bufferevent_get_underlying!7&_bufferevent_rate_limit_group_set_cfg!_evbuffer_commit_write!_evbuffer_invoke_callbacks!B_evbuffer_unfreeze!"_evdns_config_windows_nameservers!_event_base_dispatch!__bufferevent_incref_and_lock _bufferevent_async_set_connected_bufferevent_setfd0_bufferevent_suspend_readd_evdns_base_nameserver_addj_event_pending_evhttp_connection_base_newp _evhttp_remove_virtual_hostO _evhttp_set_timeout },H:bkV_bufferevent_enable!_evbuffer_cb_set_flags!_evconnlistener_get_base!_evhttp_uri_get_fragment!, _evtag_unmarshal_timeval!0 _event_base_dispatch_event_sock_err !_evhttp_bound_socket_get_listenerZ _evhttp_response_code _evhttp_uri_get_userinfoR _evutil_getenv _evutil_sockaddr_cmpJHq,X:h_EVUTIL_ISXDIGIT!,_ev_token_bucket_get_tick!_evbuffer_overlapped_new!`_evbuffer_remove_buffer!_evhttp_request_get_command!\ _evthread_setup_global_lock_!_ _evbuffer_setcb_evhttp_del_accept_socket _evrpc_hook_add_meta _evrpc_request_set_pooly _evtag_unmarshal_header _evtag_unmarshal_int _evutil_ascii_strncasecmp #_evutil_load_windows_system_library _evutil_make_socket_nonblocking :Gm-bY|_EVUTIL_ISSPACE!"__evbuffer_decref_and_unlock!_bufferevent_base_set!_evbuffer_launch_write!O _event_base_gettimeofday_cached!_event_pending!_evmap_io_initmap! _evthread_set_id_callback!P _evutil_secure_rng_get_bytes!$__evthreadimpl_cond_waitR_bufferevent_setcb*_evbuffer_defer_callbacks _evbuffer_prependl_evdns_resolve_ipv4'_evdns_resolve_ipv6-$_evdns_server_request_add_aaaa_replyb_event_set_mem_functions _evutil_snprintfEL$X@2l{_bufferevent_async_can_connect!_bufferevent_settimeout!6_bufferevent_socket_new!]_event_get_callback!_evhttp_request_free!V $_evutil_adjust_hints_for_addrconfig!v __evbuffer_incref_and_lock__evsig_restore_handler _evbuffer_reserve_space_evconnlistener_enable$_evdns_clear_nameservers_and_suspend_event_config_new_event_sock_warn _EVUTIL_ISDIGIT*CQcy6o_EVUTIL_ISDIGIT!_evdns_base_load_hosts!c_evmap_signal_active! _evtag_marshal_string! __evthreadimpl_lock_lockw!_bufferevent_socket_get_dns_errorT_evbuffer_add_vprintf_evbuffer_readln_evconnlistener_free_event_base_add_virtual_event_debug_unassign _event_initi_event_set_log_callback_evtag_unmarshal_fixed _evutil_addrinfo_appendo _evutil_getaddrinfo _evutil_getaddrinfo_async Ot~Yg<"1__bufferevent_get_read_max!r_event_deferred_cb_cancel!_event_get_events!%"_evhttp_request_get_input_headers! _evhttp_uri_join!Y _evutil_hex_char_to_int! _evhttp_parse_query_str; _evmap_signal_add _evtag_encode_int64 _evthread_set_lock_callbacksW _evutil_socket_geterrorpy=j]/#O__evbuffer_testing_use_mmap!_bufferevent_disable!_event_base_dump_events! _event_base_init_common_timeout!1_event_set_mem_functions! _evrpc_hook_find_meta! _evrpc_hook_get_connection! _bufferevent_async_new _evbuffer_new[_evbuffer_unfreeze _event_del _event_warnx !_evhttp_request_get_output_buffer _evutil_format_sockaddr_port _EVUTIL_ISLOWERr/XA$fK~__evthread_is_debug_lock_held!5_evbuffer_ptr_set!y _evdns_server_request_add_reply!}_event_base_set!b_event_debug_unassign!_event_set_log_callback!__evbuffer_chain_pin__event_debug_mode_on_evbuffer_readline_event_active_nolock_event_deferred_cb_queue_init_event_global_current_base_[_evhttp_uri_parse_with_flagsi _evhttp_uri_set_host~ _evmap_signal_active _evmap_signal_initmap _evtag_unmarshal_timeval0 Z"/F8Psh_bufferevent_disable_hard!_evbuffer_commit_space!_evbuffer_find!%_evbuffer_prepend_buffer!r_evbuffer_unlock!_event_base_free!_event_base_get_features! _event_get_version!F_event_iocp_shutdown!_evrpc_get_request! _evtag_marshal_timeval! _evbuffer_commit_read#_evdns_base_nameserver_sockaddr_addy_evdns_err_to_string_evdns_get_global_base_event_config_free_event_get_assignment _evhttp_remove_server_aliasH FSs;*k|*_evdns_base_clear_nameservers_and_suspend!B_evdns_base_nameserver_ip_add!q_event_config_new!_evtag_unmarshal_int64!" -_bufferevent_rate_limit_group_get_write_limit _evbuffer_add_evbuffer_free*_event_base_init_common_timeout1_evrpc_reqstate_free` _evutil_ascii_strcasecmp ;wo.aRE__event_strlcpy!__evthreadimpl_locking_enabled!_bufferevent_async_new!_event_sock_err! _evhttp_clear_headers!j __bufferevent_get_read_maxr_ev_token_bucket_get_tick _event_get_fd+_evhttp_decode_uri _evhttp_request_get_hosts _evhttp_set_max_headers_size _evhttp_uri_get_port? _evmap_io_add _evrpc_pool_new9 _evthread_set_id_callbackP $_evutil_make_listen_socket_reuseable _evutil_strtoll}>Kx`!k0U_bufferevent_get_enabled! _bufferevent_suspend_write!k_ev_token_bucket_cfg_new!_ev_token_bucket_init!_evbuffer_write!_evdns_base_resume!_event_config_free!_event_io_map_HT_CLEAR!s _event_loop!_evhttp_make_request! _evutil_strtoll!}_?buff@?1??gai_strerrorA@@9@9_ev_token_bucket_update_evbuffer_search_range_evconnlistener_set_cb$ _event_active_evhttp_uri_set_flagsq _evutil_open_closeonexec_evutil_parse_sockaddr_portD]ȁNu9 i-_bufferevent_ops_pair!r_evbuffer_clear_flags!_event_base_got_exit!+_evhttp_set_gencb! _evmap_io_active! _evrpc_pool_add_connection!- _evtag_encode_int64! _evtag_marshal_int64! _evutil_gettimeofday! __evbuffer_read_setup_vecs__event_debugx_evbuffer_add_reference_evbuffer_write_atmost_event_base_get_method _event_reinit_evhttp_connection_set_timeout _evtag_decode_int _evtag_decode_tag _evtag_peek_length 0!~pX`G__bufferevent_run_readcb!__evbuffer_read_setup_vecs!*__evbuffer_testing_use_linear_file_access!_evdns_base_resolv_conf_parse! _event_free! _evhttp_connection_base_new!p _evhttp_request_get_uri! _evhttp_request_is_owned! _evmap_io_add! _evrpc_get_reply! _evthread_use_windows_threads!g _evutil_getaddrinfo_common! _evutil_inet_ntop! $_evutil_load_windows_system_library! _evhttp_connection_get_base !_evhttp_connection_set_local_port sL/?\"__evthreadimpl_lock_unlock!~_event_changelist_del!z_evhttp_bound_socket_get_fd!S _evhttp_send_reply_end! _evutil_sockaddr_is_loopback!P*_bufferevent_rate_limit_group_reset_totals_evconnlistener_get_fd _evhttp_encode_uri _evhttp_new$ _evhttp_set_max_body_size _evutil_ersatz_socketpair _evutil_sockaddr_is_loopbackP_evutil_socket_connectX_evutil_socketpairwt[/fN=#_bufferevent_enable_locking!_evbuffer_set_flags!_evhttp_connection_reset! _evhttp_request_set_chunked_cb! _evhttp_uri_set_scheme! _evtag_decode_tag! __evthreadimpl_lock_freep__evthreadimpl_locking_enabled_evbuffer_remove_cb_entry_event_base_get_features _event_get_callback_arg_evhttp_connection_get_peer 8-QY~gAs_EVUTIL_ISPRINT!__evbuffer_overlapped_set_fd!__evutil_weakrand!_evbuffer_new![_evdns_set_transaction_id_fn! _event_msgx!_evhttp_add_virtual_host!8 _evmap_signal_clear! _evtag_peek_length! _evutil_inet_pton! _bufferevent_pair_new_evbuffer_clear_flags_evbuffer_ptr_sety_evdns_add_server_port3_evdns_getaddrinfo_cancel_event_base_priority_init[_event_base_setb_evhttp_clear_headersj _evmap_signal_clear DP3qZzc% __evbuffer_testing_use_sendfile!_evbuffer_cb_clear_flags!_evdns_base_count_nameservers!V_evhttp_request_new! _evrpc_pool_free!4 __event_strlcpy_evbuffer_enable_locking_evbuffer_peekg_evbuffer_search _event_add_event_loopbreak_event_mm_malloc_ _event_set_evhttp_bound_socket_get_fdS _evhttp_request_get_command\ _evmap_io_initmap _evtag_payload_length _evthread_setup_global_lock__ _gai_strerrorAe|PX5q C_evdns_add_server_port!3'_evdns_base_config_windows_nameservers!L_evdns_base_search_clear!_event_base_got_break!% _event_once!_evhttp_connection_new! _evrpc_make_request! _evtag_marshal_int! _evtag_unmarshal_int! _evutil_tv_to_msec!_evconnlistener_set_error_cb+_evdns_search_addF!_event_base_get_deferred_cb_queue_event_io_map_HT_GROWz!_evhttp_accept_socket_with_handle" _evhttp_remove_headerB _evhttp_uri_set_fragmentw zFR6oa__evbuffer_chain_pin!*_bufferevent_remove_from_rate_limit_group!_bufferevent_socket_connect!D_bufferevent_unlock!r_evconnlistener_new_async!_evdns_base_resolve_ipv6!_evmap_signal_add! _evrpc_register_generic!M _evtag_unmarshal_fixed! _evutil_make_socket_nonblocking! _evbuffer_add_cb_evdns_search_ndots_setR_evdns_set_log_fn_event_config_avoid_method_event_get_base_evrpc_request_get_pooll _evtag_marshal_timeval KBw3Y&i#_bufferevent_decrement_write_limit!_bufferevent_ops_async!d_bufferevent_setwatermark!=_evbuffer_read!_event_base_add_virtual!_event_changelist_remove_all!_event_deferred_cb_init!_event_enable_debug_mode!_evhttp_request_get_connection!c _evhttp_set_cb! _evbuffer_write_event_iocp_shutdown_event_mm_free_"_evhttp_request_get_output_headers _evhttp_send_page _evhttp_uridecode _evrpc_resume_request _EVUTIL_ISSPACE":,`GnU{#__evbuffer_overlapped_get_fd!_evbuffer_free!*_evdns_base_resolve_ipv4!_evdns_base_set_option!_evhttp_add_server_alias!1 _evhttp_start_read!! _evutil_secure_rng_init!6_bufferevent_get_input_evbuffer_remove_evbuffer_set_flags!_evdns_config_windows_nameservers_event_base_newJ_evhttp_accept_socket _evhttp_cancel_requestc _evrpc_hook_find_meta _evsig_dealloc _evtag_marshal_int64 &_evutil_secure_rng_global_setup_locks_,vibe.d-0.8.2/lib/win-i386/libeay32.dll000066400000000000000000046500001324361747700170540ustar00rootroot00000000000000MZ@ !L!This program cannot be run in DOS mode. $te66666666666yZ|$ 3|$13|$,!3<$1|$ yZT$3T$13T$013T$T$ nL$3L$13L$413L$L$n\$3\$ 13\$813\$ \$nD$3D$$13D$<13D$D$0nt$ 3t$(134$13t$t$ >n|$$3|$,13|$13|$|$$nT$(3T$013T$13T$T$( nL$,3L$413L$ 13L$ L$,n\$03\$813\$13\$$\$0nD$43D$<13D$13D$(D$40nt$834$13t$13t$,t$8>n|$<3|$13|$13|$0|$<n$3T$13T$ 13T$4$ nL$3L$ 13L$$13L$8L$n\$3\$13\$(13\$<\$nD$ 3D$13D$,13$D$ 0nt$3t$13t$013t$t$>n|$3|$13|$413|$|$nT$3T$ 13T$813T$ T$ nL$3L$$13L$<13L$L$n\$ 3\$(13$!3\$\$ +ܼ!D$$3D$,13D$!3D$D$$(ܼ!t$(3t$013t$!3t$t$(.ܼ!Ջ|$,3|$413|$ !3|$ |$,/ܼ!͋T$03T$813T$!3T$$T$0*ܼ!݋L$43L$<13L$!3L$(L$4)ܼ!ŋ\$83$13\$!3\$,\$8+ܼ!D$<3D$13D$!3D$0D$<(ܼ!4$3t$13t$ !3t$44$.ܼ!Ջ|$3|$ 13|$$!3|$8|$/ܼ!͋T$3T$13T$(!3T$<T$*ܼ!݋L$ 3L$13L$,!3 $L$ )ܼ!ŋ\$3\$13\$0!3\$\$+ܼ!D$3D$13D$4!3D$D$(ܼ!t$3t$ 13t$8!3t$ t$.ܼ!Ջ|$3|$$13|$bʋ|$43|$<13|$13|$(|$4bʋT$83$13T$13T$,T$8 bʋL$<3L$13L$13L$0L$<bʋ$3\$13\$ 13\$4$bʋD$3D$ 13D$$13D$8D$0bʋt$3t$13t$(13t$<t$>bʋ|$ 3|$13|$,13<$|$ bʋT$3T$13T$013T$T$ bʋL$3L$13L$413L$L$bʋ\$3\$ 13\$813\$ \$bʋD$3D$$13D$<13D$D$0bʋt$ 3t$(134$13t$t$ >bʋ|$$3|$,13|$13|$|$$bʋT$(3T$013T$13T$T$( bʋL$,3L$413L$ 13L$ L$,bʋ\$03\$813\$13\$$\$0bʋD$43D$<13D$13D$(0bʋt$834$13t$13t$,>bʋ|$<3|$13|$13|$0bl$`T$d}uE] M}@u;T$hEω] ։ML_^[]ÐUSVW] |$t$L$ ofnOfo]Po&fponfpov f8o~0f8f8f8IF@f $fEfD$8fo:8f88fo:8f88fo:8f88fo:8f88fo:8f88fo:8f88fo:8f88fo:8f88fo:8f88fo:8f88fo:8f88fo:8f88fo:8f88fo:8f88fo:8f88fo:8f8o&fo:8onf8fo:8ov f8fo:8o~0f8fo:fo$f88fD$fpfpf~O_^[]ÐUSVW]gfo}foEfoM foU0fou@|$l$T$fD$pf$f$f$f$@$$$$_OW oEoMoUo]f8f8f8f|$`f8ffff$ffL$ffT$ f1fp! 1։flfo<$1ffD$@fs!1ff1͉T$f1f|$0!fo1fo1fs fL$fr1fo!1frf1ʼn\$ fr1ffoD$`!ffp11flfoD$1ffL$Pfs!1ff1Չ|$f1f$!fo1fo1fs fT$fr1fo!1frf1݉L$fr1ffoL$p!ffp11Ɖflfo\$ 1ffT$`fs!1ff1D$$f1fL$!fo1fo1fs f|$(fr1fo!1frf1foD$@T$,fr1ffoT$p!ffp11މflfoL$01ff\$@fs!1ff1ʼn\$4f1fT$ !fo1fo1fs fD$8fr1fo!1frf1foL$P|$USVWt$|$D$]4$|$D$\$ ` ZaR8@ J$ فPP5j')=_OȋW PSQRG_OȋWPSQRG _$O(ȋW,PSQRG0_4O8ȋW<PSQR@d$܉|$h^N~ \$1ˉL$ |$$V^N~\$L$|$ ыt$|$11\$`!։T$1\$ 1 Ӌ|$1D$d$ u1T$1$#D$1؁t$ˋt$h 111$ \$|1t$|$11\$`!։T$1\$ 1 Ӌ|$1D$d$ u1T$1$#D$1$؁xqY$d\$L$^~N ^~N D$\$L$ $hVF^NVF^N$d;|$d$ _^[]Ð/BD7q۵[V9Y?^[1$} Ut]rހܛtiGƝ̡ $o,-tJܩ\ڈvRQ>m1'Y GQcg)) '8!.m,M 8STs e jv.,r迢KfpK£Ql$օ5pjl7LwH'4 9JNOʜ[o.htocxxȄnjlPxq  SHA256 block transform for x86, CRYPTOGAMS by d$nN^ l$1͉L$\$ V^Nv\$L$t$Oˋwɉ\$ ΉL$$t$(_ Oˋwɉ\$,ΉL$0t$4_Oˋw ɉ\$8ΉL$11t$HT$ ͋L$< 111\$D \$(1ϋL$|$1\$D1!t$ 1\$1 <$1l$1 !荔m111L$LT$t$@ 111\$H \$,1t$ |$1ʉ\$H1!ΉL$1\$1 Ƌ|$1D$1 !ō'11t$PT$͋L$D 111\$L \$01ϋL$|$ 1\$L1!t$1\$1 |$1l$1 !荔Y11L$T$t$H 111\$P \$41t$|$1ʉ\$P1!Ή $1\$ 1 Ƌ|$1D$1 !ō 11t$XT$͋L$L 111\$T \$81ϋ $|$1\$T1!t$1\$1 |$1l$ 1 !荔G11L$\T$t$P 111\$X \$<1t$<$1ʉ\$X1!ΉL$1\$1 Ƌ|$ 1D$1 !ōQc11t$ T$͋L$T 111\$\ \$@1ϋL$|$1\$\1!t$1$1 |$1l$1 !荔g))11L$$T$t$X 111\$ \$D1t$|$1ʉ\$ 1!ΉL$1\$1 Ƌ|$1$1 !ō '11t$(T$ ͋L$\ 111\$$ \$H1ϋL$|$1\$$1!t$ 1\$1 <$1l$1 !荔8!.11L$,T$t$ 111\$( \$L1t$ |$1ʉ\$(1!ΉL$1\$1 Ƌ|$1D$1 !ōm,M11t$0T$͋L$$ 111\$, \$P1ϋL$|$ 1\$,1!t$1\$1 |$1l$1 !荔 8S11L$4$t$( 111\$0 \$T1t$|$1ʉ\$01!Ή $1\$ 1 Ƌ|$1D$1 !ōTs e11t$8T$͋L$, 111\$4 \$X1ϋ $|$1\$41!t$1\$1 |$1l$ 1 !荔 jv11L$<T$t$0 111\$8 \$\1t$<$1ʉ\$81!ΉL$1\$1 Ƌ|$ 1D$1 !ō.11t$@T$͋L$4 111\$< \$ 1ϋL$|$1\$<1!t$1$1 |$1l$1 !荔,r11L$DT$t$8 111\$@ \$$1t$|$1ʉ\$@1!ΉL$1\$1 Ƌ|$1$1 !ō迢11t$HT$ ͋L$< 111\$D \$(1ϋL$|$1\$D1!t$ 1\$1 <$1l$1 !荔Kf11L$LT$t$@ 111\$H \$,1t$ |$1ʉ\$H1!ΉL$1\$1 Ƌ|$1D$1 !ōpK11t$PT$͋L$D 111\$L \$01ϋL$|$ 1\$L1!t$1\$1 |$1l$1 !荔Ql11L$T$t$H 111\$P \$41t$|$1ʉ\$P1!Ή $1\$ 1 Ƌ|$1D$1 !ō11t$XT$͋L$L 111\$T \$81ϋ $|$1\$T1!t$1\$1 |$1l$ 1 !荔$11L$\T$t$P 111\$X \$<1t$<$1ʉ\$X1!ΉL$1\$1 Ƌ|$ 1D$1 !ō511t$ T$͋L$T 111\$\ \$@1ϋL$|$1\$\1!t$1$1 |$1l$1 !荔pj11L$$T$t$X 111\$ \$D1t$|$1ʉ\$ 1!ΉL$1\$1 Ƌ|$1$1 !ō11t$(T$ ͋L$\ 111\$$ \$H1ϋL$|$1\$$1!t$ 1\$1 <$1l$1 !荔l711L$,T$t$ 111\$( \$L1t$ |$1ʉ\$(1!ΉL$1\$1 Ƌ|$1D$1 !ōLwH'11t$0T$͋L$$ 111\$, \$P1ϋL$|$ 1\$,1!t$1\$1 |$1l$1 !荔411L$4$t$( 111\$0 \$T1t$|$1ʉ\$01!Ή $1\$ 1 Ƌ|$1D$1 !ō 911t$8T$͋L$, 111\$4 \$X1ϋ $|$1\$41!t$1\$1 |$1l$ 1 !荔JN11L$<T$t$0 111\$8 \$\1t$<$1ʉ\$81!ΉL$1\$1 Ƌ|$ 1D$1 !ōOʜ[11t$@T$͋L$4 111\$< \$ 1ϋL$|$1\$<1!t$1$1 |$1l$1 !荔o.h11L$DT$t$8 111\$@ \$$1t$|$1ʉ\$@1!ΉL$1\$1 Ƌ|$1$1 !ōt11t$HT$ ͋L$< 111\$D \$(1ϋL$|$1\$D1!t$ 1\$1 <$1l$1 !荔ocx11L$LT$t$@ 111\$H \$,1t$ |$1ʉ\$H1!ΉL$1\$1 Ƌ|$1D$1 !ōxȄ11t$PT$͋L$D 111\$L \$01ϋL$|$ 1\$L1!t$1\$1 |$1l$1 !荔nj11L$T$t$H 111\$P \$41t$|$1ʉ\$P1!Ή $1\$ 1 Ƌ|$1D$1 !ō11t$XT$͋L$L 111\$T \$81ϋ $|$1\$T1!t$1\$1 |$1l$ 1 !荔lP11L$\T$t$P 111\$X \$<1t$<$11!ΉL$1\$1 Ƌ|$ 1D$1 !ō11t$ T$͋L$T 111\$\ \$@1ϋL$|$11!t$1$1 |$1l$1 !荔xq11T$t$`1L$ n~N n~N l$1|$L$ |$\$L$V~^NV~^N|$|$d\$L$;|$hd$l_^[]Ð ooVfofpfpɱfpf:floogoo f8ow0fT$foEff88fpf $8foEff88fp@88foEff88fpfof:f88foEf88fpfof:f88foEf88fpfof:f88foEf88fpfof:f88foEf88fpfof:f88foEf88fpfof:f88foEf88fpfof:f88foEf88fpfof:f88foE f88fpfof:f88foE0f88fpfof:f88foE@f88fpfof:f88foEPf88fpfof:8ffoE`f8fp8fo8foEpfƐ8fp98fT$f $:fpұfpfpɱfmf:d$,V_^[]Ðd$^N~ \$1ˉL$|$ V~Nv|$|$dL$t$fo ooOoW o_0@f8lj|$df8foef8fomff8fou ffo}0fd$ ffl$0fft$@f|$P@fot$fo1ʋ|$f:1!f:L$11fofo|$fr flj$1fr1T$ !fp1T$ fr1fT$ fr ˉft$1fr |$1f!ΉL$ fo11ffr <$ fĉ\$1fs1T$ f!1fsT$$1fT$fpȉt$ 1ʋ|$1!fsL$11f|$ D$fpP11T$fo fr !fs1T$(1fT$fsˉft$1ʋ|$ fp1fou!ΉL$fs11|$ flj\$11T$f !1T$,1$ft$ fot$fo1ʋ|$f:1!f: $11fofo|$fr fωD$1fr1T$ !fp1T$0fr1fT$fr ˉf4$1fr |$1f!ΉL$fo11ffr |$ f̉\$ 1fs1T$ f!1fsT$41fT$fpȉt$1ʋ<$1!fsL$11f|$ D$fpP11T$fo fr !fs1T$81fT$fsˉft$1ʋ|$fp1fou!ΉL$fs11|$ fω\$11$f !1T$<1T$ft$0fot$fo1ʋ|$f:1!f:L$11fofo|$fr f׉$1fr1T$ !fp1T$@fr1fT$ fr ˉft$1fr |$1f!ΉL$ fo11ffr <$ fԉ\$1fs1T$ f!1fsT$D1fT$fpȉt$ 1ʋ|$1!fsL$11f|$ D$fpP11T$fo fr !fs1T$H1fT$fsˉft$1ʋ|$ fp1fou !ΉL$fs11|$ f׉\$11T$f !1T$L1$ft$@fot$fo1ʋ|$f:1!f: $11fofo|$fr f߉D$1fr1T$ !fp1T$Pfr1fT$fr ˉf4$1fr |$1f!ΉL$fo11ffr |$ f܉\$ 1fs1T$ f!1fsT$T1fT$fpȉt$1ʋ<$1!fsL$11f|$ D$fpP11T$fo fr !fs1T$X1fT$fsˉft$1ʋ|$fp1fou0!ΉL$fs11|$ f߉\$11$f !1T$\1T$ft$P}@t$1ʋ|$1!ΉL$11|$ $11T$ !1T$ 1T$ ˉt$1ʋ|$1!ΉL$ 11<$ \$11T$ !1T$$1T$ȉt$ 1ʋ|$1!ΉL$11|$ D$11T$ !1T$(1T$ˉt$1ʋ|$ 1!ΉL$11|$ \$11T$ !1T$,1$ȉt$1ʋ|$1!Ή $11|$ D$11T$ !1T$01T$ˉ4$1ʋ|$1!ΉL$11|$ \$ 11T$ !1T$41T$ȉt$1ʋ<$1!ΉL$11|$ D$11T$ !1T$81T$ˉt$1ʋ|$1!ΉL$11|$ \$11$ !1T$<1T$ȉt$1ʋ|$1!ΉL$11|$ $11T$ !1T$@1T$ ˉt$1ʋ|$1!ΉL$ 11<$ \$11T$ !1T$D1T$ȉt$ 1ʋ|$1!ΉL$11|$ D$11T$ !1T$H1T$ˉt$1ʋ|$ 1!ΉL$11|$ \$11T$ !1T$L1$ȉt$1ʋ|$1!Ή $11|$ D$11T$ !1T$P1T$ˉ4$1ʋ|$1!ΉL$11|$ \$ 11T$ !1T$T1T$ȉt$1ʋ<$1!ΉL$11|$ D$11T$ !1T$X1T$ˉt$1ʋ|$1!ΉL$11|$ \$11$ !1T$\1T$ȋt$`1L$ ^~N ^~N \$1|$L$ |$L$V~NV~|$|$N~L$~|$|$dfo}@;|$hd$l_^[]Ðd$w^N~ \$1ˉL$|$ V~Nv|$|$dL$t$oooOoW o_0@ylj|$dqieamu }0d$ l$0t$@|$P@qt$a1ʋ|$1r!ΉL$11r|$r $11T$p !1r T$ 1T$ r t$1ʋ|$1r !ΉL$ 11s<$ĉ \$11T$s !1T$$1pT$st$ 1ʋ|$1pP!ΉL$r 11s|$ D$s11T$ !1pT$(1sT$ljt$u1ʋ|$ 1!ΉL$11|$ \$11T$ !1T$,1$t$ it$y1ʋ|$1r!Ή $11r|$r D$11T$ p !1r T$01T$r 4$1ʋ|$1r !ΉL$11s|$̉ \$ 11T$s !1T$41pT$st$1ʋ<$1pP!ΉL$r 11s|$  D$s11T$ !1pT$81sT$ωt$u1ʋ|$1!ΉL$11|$ \$11$ !1T$<1T$t$0at$q1ʋ|$1r!ΉL$11r|$r $11T$p !1r T$@1T$ r t$1ʋ|$1r !ΉL$ 11s<$ԉ \$11T$s !1T$D1pT$st$ 1ʋ|$1pP!ΉL$r 11s|$ D$s11T$ !1pT$H1sT$׉t$u 1ʋ|$ 1!ΉL$11|$ \$11T$ !1T$L1$t$@yt$i1ʋ|$1r!Ή $11r|$r D$11T$ p !1r T$P1T$r 4$1ʋ|$1r !ΉL$11s|$܉ \$ 11T$s !1T$T1pT$st$1ʋ<$1pP!ΉL$r 11s|$  D$s11T$ !1pT$X1sT$߉t$u01ʋ|$1!ΉL$11|$ \$11$ !1T$\1T$t$P}@t$1ʋ|$1!ΉL$11|$ $11T$ !1T$ 1T$ ˉt$1ʋ|$1!ΉL$ 11<$ \$11T$ !1T$$1T$ȉt$ 1ʋ|$1!ΉL$11|$ D$11T$ !1T$(1T$ˉt$1ʋ|$ 1!ΉL$11|$ \$11T$ !1T$,1$ȉt$1ʋ|$1!Ή $11|$ D$11T$  !1T$01T$ˉ4$1ʋ|$1!ΉL$11|$ \$ 11T$ !1T$41T$ȉt$1ʋ<$1!ΉL$11|$  D$11T$ !1T$81T$ˉt$1ʋ|$1!ΉL$11|$ \$11$ !1T$<1T$ȉt$1ʋ|$1!ΉL$11|$ $11T$ !1T$@1T$ ˉt$1ʋ|$1!ΉL$ 11<$ \$11T$ !1T$D1T$ȉt$ 1ʋ|$1!ΉL$11|$ D$11T$ !1T$H1T$ˉt$1ʋ|$ 1!ΉL$11|$ \$11T$ !1T$L1$ȉt$1ʋ|$1!Ή $11|$ D$11T$  !1T$P1T$ˉ4$1ʋ|$1!ΉL$11|$ \$ 11T$ !1T$T1T$ȉt$1ʋ<$1!ΉL$11|$  D$11T$ !1T$X1T$ˉt$1ʋ|$1!ΉL$11|$ \$11$ !1T$\1T$ȋt$`1L$ ^~N ^~N \$1|$L$ |$L$V~NV~|$|$N~L$~|$|$do}@;|$hd$lw_^[]Ðd$w^N~ \$1ˉL$|$ V~Nv|$|$dL$t$oooOoW o_0@ylj|$dqieamu }0d$ l$0t$@|$P@q{{ T$a{1ht$r1#T$$ {{ r {1r|$11T$!T$ p1T$ r  {{ T$ {1r ht$1#T$\$ {{ r  {1<$11sT$!T$$1T${{ sT${1ht$1#T$ pD$ {{ s {1Nj|$11pPT$!T$(r 1T$s {{ T${1sht$ 1#T$\$ {{ p {1s|$11T$!T$,u1$t$ i{{ $y{1ht$r1#T$D$ {{ r {1r|$11T$ !T$0p1T$r  {{ T${1r ht$1#$\$ {{ r  {1|$11sT$!T$41T${{ sT${1h4$1#T$pD$ {{ s {1ϋ|$ 11pPT$!T$8r 1T$s {{ T${1sht$1#T$\$ {{ p {1s|$11$!T$2-m1?!'Y= % GoQcpn g))/F '&&\8!.*Zm,M߳ 8ScTs ew< jvG.;5,rdL迢0BKfpK0TQlReU$* qW5ѻ2pjҸSAQl7LwH'Hᵼ4cZų 9ˊAJNscwOʜ[o.h]t`/CocxrxȄ9dnj(c#齂lPyƲ+SrxqƜa&>'!Ǹ}xnO}orgȢ}c ?G5 q}#w($@{2 ˾L*~e)Y:o_XGJDl SHA512 block transform for x86, CRYPTOGAMS by ̋T$D$V WrUzSlh$l$Xh \$l$ Xh\$l$Xh\$l$X h$\$ l$$X(h,\$(l$,X0h4\$0l$4X8h<\$8l$pm) T$ 1Ⱥ >pm)D$ 1 >pm)΋T$ 1غ >pm) D$ 1 >pm)݋T$8 1 >pm)D$ 1ʸ >pm)T$$ 1 >pm)΋D$, 1ڸ >pm) T$ 1 >pm) ݋D$0 1 >pm)T$ 1Ⱥ >pm)D$( 1 >pm) ΋$ 1غ >pm) D$ 1 >pm)݋T$4 1T$ >pm׉)!! ‹D$ vmzƉ)!! ЋT$ vmzщ)!! ‹D$ vmzʼn)!! ЋT$ vmz Ӊ)!! ‹D$, vmzlj)!! ЋT$< vmz։)!! ‹$ vmz)!! ЋT$ vmzՉ)!! ‹D$0 vmzÉ)!! ЋT$ vmz ׉)!! ‹D$4 vmz Ɖ)!! ЋT$$ vmz щ)!! ‹D$ vmz ʼn)!! ЋT$( vmzӉ)!! ‹D$8 vmzlj)!! ‰ vmz1T$01 Ɖ1؋T$<1 1T$(1 ʼn 1T$1É 1 T$1 lj 1T$1Ɖ 1΋T$ 1 1T$1ʼn 1݋T$1 É1ȋT$1lj 1 T$41 Ɖ1؋T$81 1$1 ʼn1T$ 1É 1 T$$1 lj 1T$,1 ֋$ ΋BËD$HËBŋD$LŋB D$PBƋD$@ƋNjD$DNj$jJr z#$ϋ$ك@$/l[]_^Q1ۋQ111%ψÈ3|3 33 %33  $33A1ۋQ 111%ψÈ3t3 33 %33  $33A1ۋQ111%ψÈ3|3 33 %33  $33A1ۋQ111%ψÈ3t3 33 %33  $33A 1ۋQ$111%ψÈ3|3 33 %33  $33A(1ۋQ,111%ψÈ3t3 33 %33  $33A01ۋQ4111%ψÈ3|3 33 %33  $33A81ۋQ<111%ψÈ3t3 33 %33  $33A@1ۋQD111%ψÈ3|3 33 %33  $33AH1ۋQL111%ψÈ3t3 33 %33  $33AP1ۋQT111%ψÈ3|3 33 %33  $33AX1ۋQ\111%ψÈ3t3 33 %33  $33A`1ۋQd111%ψÈ3|3 33 %33  $33Ah1ۋQl111%ψÈ3t3 33 %33  $33Ap1ۋQt111%ψÈ3|3 33 %33  $33Ax1ۋQ|111%ψÈ3t3 33 %33  $33ÐQAx1ۋQ|111%ψÈ3|3 33 %33  $33Ap1ۋQt111%ψÈ3t3 33 %33  $33Ah1ۋQl111%ψÈ3|3 33 %33  $33A`1ۋQd111%ψÈ3t3 33 %33  $33AX1ۋQ\111%ψÈ3|3 33 %33  $33AP1ۋQT111%ψÈ3t3 33 %33  $33AH1ۋQL111%ψÈ3|3 33 %33  $33A@1ۋQD111%ψÈ3t3 33 %33  $33A81ۋQ<111%ψÈ3|3 33 %33  $33A01ۋQ4111%ψÈ3t3 33 %33  $33A(1ۋQ,111%ψÈ3|3 33 %33  $33A 1ۋQ$111%ψÈ3t3 33 %33  $33A1ۋQ111%ψÈ3|3 33 %33  $33A1ۋQ111%ψÈ3t3 33 %33  $33A1ۋQ 111%ψÈ3|3 33 %33  $331ۋQ111%ψÈ3t3 33 %33  $33ÐVWt$ 1SU\$~1%111111%333311111 1%11]TL$ ;QT$Ή1窪111%11 13333111Ɓ11 1ǁ11r][_^ÐVWD$ 1SU0\$x]L$ D$8p][_^ÐS\$UVW;s 1111ց111ׁ333311111 1窪11sD$$|$(t$,D$D$$D$|$$D$t$$ ;s1窪111%11 13333111Ɓ11 1ǁ11s_^][ÐS\$UVW;s 1111ց111ׁ333311111 1窪11st$$|$(D$,D$D$$D$|$$D$t$$ ;s1窪111%11 13333111Ɓ11 1ǁ11s_^][ÐUSVWl$\$$3{WVWVt$$|$(L$8QD$4PSD$ \$2V11ӉD$ \$D$ \$_l$8Z8,11vvV nn11ӉD$ \$wD$ \$_D$\$G^D$ \$BD$ \$L$T$11ڋ^WD$\$l$8T^D$ \$D$ \$L$T$11ڋ^WwWOnL$@Y_^[]Ð.+%USVWl$\$,3{WVWVt$$|$(L$@D$8PD$8PD$8PSD$\$2V11ӉD$\$=D$\$_l$<Z/,11vvV nn11ӉD$\$D$\$_D$\$G^D$\$D$\$L$T$11ڋ^WD$\$l$<T^D$\$uD$\$L$T$11ڋ^WwWOnL$L Y_^[]Ð.+%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                            @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @@ @ @ @ @@ @ @@ @B@B@B@@@BB@BBB@B@@@@BBB@BB@BB@@            USVW11Rl$jD$$L$(1!!ʉ11ʋ]1؋M111%1ہ1ɈÈl$3|3 33 %1ߋ 1ߋ1ߋ1ߋl$ D$$L$(1!!ʉ11ʋ]1؋M 111%1ہ1ɈÈl$3t3 33 %1ދ 1ދ1ދ1ދl$ D$$L$(1!!ʉ11ʋ]1؋M111%1ہ1ɈÈl$3|3 33 %1ߋ 1ߋ1ߋ1ߋl$ D$$L$(1!!ʉ11ʋ]1؋M111%1ہ1ɈÈl$3t3 33 %1ދ 1ދ1ދ1ދl$ D$$L$(1!!ʉ11ʋ] 1؋M$111%1ہ1ɈÈl$3|3 33 %1ߋ 1ߋ1ߋ1ߋl$ D$$L$(1!!ʉ11ʋ](1؋M,111%1ہ1ɈÈl$3t3 33 %1ދ 1ދ1ދ1ދl$ D$$L$(1!!ʉ11ʋ]01؋M4111%1ہ1ɈÈl$3|3 33 %1ߋ 1ߋ1ߋ1ߋl$ D$$L$(1!!ʉ11ʋ]81؋M<111%1ہ1ɈÈl$3t3 33 %1ދ 1ދ1ދ1ދl$ D$$L$(1!!ʉ11ʋ]@1؋MD111%1ہ1ɈÈl$3|3 33 %1ߋ 1ߋ1ߋ1ߋl$ D$$L$(1!!ʉ11ʋ]H1؋ML111%1ہ1ɈÈl$3t3 33 %1ދ 1ދ1ދ1ދl$ D$$L$(1!!ʉ11ʋ]P1؋MT111%1ہ1ɈÈl$3|3 33 %1ߋ 1ߋ1ߋ1ߋl$ D$$L$(1!!ʉ11ʋ]X1؋M\111%1ہ1ɈÈl$3t3 33 %1ދ 1ދ1ދ1ދl$ D$$L$(1!!ʉ11ʋ]`1؋Md111%1ہ1ɈÈl$3|3 33 %1ߋ 1ߋ1ߋ1ߋl$ D$$L$(1!!ʉ11ʋ]h1؋Ml111%1ہ1ɈÈl$3t3 33 %1ދ 1ދ1ދ1ދl$ D$$L$(1!!ʉ11ʋ]p1؋Mt111%1ہ1ɈÈl$3|3 33 %1ߋ 1ߋ1ߋ1ߋl$ D$$L$(1!!ʉ11ʋ]x1؋M|111%1ہ1ɈÈl$3t3 33 %1ދ 1ދ1ދ1ދl$ $KƉ$T$ω1檪111%11 13333111ǁ11 1Ɓ11z_^[]USVW|$T$t$l$ 11ۃ_ )L$ Sl$ -`el$ TWˋ @o n+s8 @oT5 nˋ @Ћ n s @ы n s @ы n s @ы n s  @ы n s( @ы n s0 @ы n 1ۈ;wvs8T5w;t$1TT$ˋ  ,ˋ  ,ˋ  ,ˋ L$ ,3.;t$,1v r;t$l$ ˋ 2v ;t$T5<  2v ;t$T5ȉ_G_^[]ÐUSVW|$l$t$`4.1o"C11Ґ.ƒoU111ې.ƒoLJ1GG_^[]ÐX@K`à Ðrc4(4x,int)rc4(1x,char)rc4(8x,mmx)RC4 for x86, CRYPTOGAMS by US\$ l$VW;s1]11ߋU1DHHËH1ËH 11ދU1DHHËH1ËH 11ߋU 1DHHËH1ËH 11ދU1DHHËH1ËH 11ߋU1DHHËH1ËH 11ދU1DHHËH1ËH 11ߋU1DHHËH1ËH 11ދU 1DHHËH1ËH 11ߋU$1DHHËH1ËH 11ދU(1DHHËH1ËH 11ߋU,1DHHËH1ËH 11ދU01DHHËH1ËH 11ߋU41DHHËH1ËH 11ދU81DHHËH1ËH 11ߋU<1DHHËH1ËH 11ދU@1DHHËH1ËH ӋD$1ߋUD1։x0_^[]ÐUS\$ l$VW;s1]D11ߋU@1DHHËH1ËH 11ދU<1DHHËH1ËH 11ߋU81DHHËH1ËH 11ދU41DHHËH1ËH 11ߋU01DHHËH1ËH 11ދU,1DHHËH1ËH 11ߋU(1DHHËH1ËH 11ދU$1DHHËH1ËH 11ߋU 1DHHËH1ËH 11ދU1DHHËH1ËH 11ߋU1DHHËH1ËH 11ދU1DHHËH1ËH 11ߋU1DHHËH1ËH 11ދU 1DHHËH1ËH 11ߋU1DHHËH1ËH 11ދU1DHHËH1ËH ӋD$1ߋU1։x0_^[]ÐUSVWl$\$$3{WVWVt$$|$(L$8D$0PSD$\$ :V11ˉD$\$ cD$\$ ˉ_l$4)Zq,11vvV nn11ˉD$\$ D$\$ ˉ_D$\$O^ˉD$\$ D$\$ ˋL$T$11ڋ^WD$\$l$4\^ˉD$\$ sD$\$ ˋL$T$11ڋ^WwWOnL$<Y_^[]Ð.+%US\$ l$VW;sP1UM‰1Ɉ1 @\ @` 1ً@d )ً@h 1ϋUM 1‰1Ɉ1 @\ @` )ً@d ً@h 11΋UM)‰1Ɉ1 @\ @` ً@d 1ً@h )1ϋUM‰1Ɉ1 @\ @` 1ً@d )ً@h 1΋U M$1‰1Ɉ1 @\ @` )ً@d ً@h 11ϋU(M,)‰1Ɉ1 @\ @` ً@d 1ً@h )1΋U0M4‰1Ɉ1 @\ @` 1ً@d )ً@h 1ϋU8M<1‰1Ɉ1 @\ @` )ً@d ً@h 11΋U@MD)‰1Ɉ1 @\ @` ً@d 1ً@h )1ϋUHML‰1Ɉ1 @\ @` 1ً@d )ً@h 1΋UPMT1‰1Ɉ1 @\ @` )ً@d ً@h 11ϋUXM\)‰1Ɉ1 @\ @` ً@d 1ً@h )1Z U`Md‰1Ɉ1 @\ @` 1ً@d )ً@h 1ϋUhMl1‰1Ɉ1 @\ @` )ً@d ً@h 11΋UpMt)‰1Ɉ1 @\ @` ً@d 1ً@h )1ϋUxM|‰1Ɉ1 @\ @` 1ً@d )ً@h 1ΐD$x0_^[]ÐUS\$ l$VW;s 1UxM|‰1Ɉ1 @\ @` 1ً@d )ً@h 1ϋUpMt)‰1Ɉ1 @\ @` ً@d 1ً@h )1΋UhMl1‰1Ɉ1 @\ @` )ً@d ً@h 11ϋU`Md‰1Ɉ1 @\ @` 1ً@d )ً@h 1΋UXM\)‰1Ɉ1 @\ @` ً@d 1ً@h )1ϋUPMT1‰1Ɉ1 @\ @` )ً@d ً@h 11΋UHML‰1Ɉ1 @\ @` 1ً@d )ً@h 1ϋU@MD)‰1Ɉ1 @\ @` ً@d 1ً@h )1΋U8M<1‰1Ɉ1 @\ @` )ً@d ً@h 11ϋU0M4‰1Ɉ1 @\ @` 1ً@d )ً@h 1΋U(M,)‰1Ɉ1 @\ @` ً@d 1ً@h )1ϋU M$1‰1Ɉ1 @\ @` )ً@d ً@h 11΋UM‰1Ɉ1 @\ @` 1ً@d )ً@h 1ϋUM)‰1Ɉ1 @\ @` ً@d 1ً@h )1΋UM 1‰1Ɉ1 @\ @` )ً@d ً@h 11ϋUM‰1Ɉ1 @\ @` 1ً@d )ً@h 1ΐD$x0_^[]USVWl$\$$3{WVWVt$$|$(L$8D$0PSD$\$ :V11ˉD$\$ SD$\$ ˉ_l$4)Za,11vvV nn11ˉD$\$ D$\$ ˉ_D$\$O^ˉD$\$ OD$\$ ˋL$T$11ڋ^WD$\$l$4\^ˉD$\$ D$\$ ˋL$T$11ڋ^WwWOnL$<Y_^[]Ð.+%|$33_3O3W t64t$}u}u}u }@u`Ɓt5|=1|=1|=1t$ށt5|=1|=1|=1t$΁t5|=1|=1|=1TD1‹D$\1ڋ\$L 1ʉ񽀀!͍< )́11111!Ս<)Ձ11111!ō<)Ł11111!ݍ<)݁11111|$l$33_3O3W ;|$|$Ɓt5|=1|=1|=1t$ށt5|=1|=1|=1t$΁t5|=1|=1|=1|$TD1‹D$\1ڋ\$L 1ʉ3G3_3O3WÐgt64t$D$D$ E]MUE] M@U`pp ~~|$p L5Tt=p t= t= t= t=~nL=~ t= t= t=nL=% bt=D t= \ ڋ|$nnb;|$oT$ooddpбppڱpoorrrroooowrrErr]MU@IgÐ|$33_3O3W t64t$Ɓt3t3t3tt$ށt3t3t3tt$΁t3t3t3t|$T3TD$3T\$3T33_3O3W ;|$|$*Ɓt|1|1|1t$ށt|1|1|1t$΁t|1|1|1|$TċD%1‹D$\1ڋ\$L1ʉ33_3O3W Ðcccc||||wwww{{{{ kkkkooooTT`00P`00PggggV++}V++}bbMMvvvvEE@@}}}}YYYYGGɎGG AAgg__EE##SSrrrr[[uu==L&&jL&&jl66Zl66Z~??A~??AOOh44\h44\QQ44qqqqssb11Sb11S*?*?  RRF##eF##e^^0(0(77  //  $6$6==&&N''iN''iuuuu  X,,tX,,t4.4.6-6-nnnnZZZZ[[RRRRv;;Mv;;Maa}}R)){R)){>>^//q^//qSSSShh,,@ `@ `yyȶ[[[[jjjjFFggr99Kr99KJJޔJJޘLLԘLL԰XXXXJJkk**OOCCņCCŚMMךMMf33Uf33UEEϊEEPPPPx<!>!KKݖKKaa pppp|>>B|>>BqqffffHHؐHHaaaaj55_j55_WWWWiiXX:':'''88++"3"3iiiipp33--<"<" IIUUUUP((xP((xzzYY   ee11BBƄBBhhhhAAÂAA))Z--wZ--w{{˨TTTTmm,:,:c|w{ko0g+׫vʂ}YGԢr&6?4q1#'u ,nZR;ֳ)/S [j˾9JLXCM3EPfHa5WiَU(ߌ BhA-Tc|w{ko0g+׫vʂ}YGԢr&6?4q1#'u ,nZR;ֳ)/S [j˾9JLXCM3EPfHa5WiَU(ߌ BhA-Tc|w{ko0g+׫vʂ}YGԢr&6?4q1#'u ,nZR;ֳ)/S [j˾9JLXCM3EPfHa5WiَU(ߌ BhA-Tc|w{ko0g+׫vʂ}YGԢr&6?4q1#'u ,nZR;ֳ)/S [j˾9JLXCM3EPfHa5WiَU(ߌ BhA-T @6USVWt$|$$_)ہ)܃D$]`$) $oofd$t$fw_^[]Ðl$^NV ld$t$^NV _^[]Ð|$33_3O3W t64t$}u}u}u }@u`Ɓt5|=1|=1|=1t$ށt5|=1|=1|=1t$΁t5|=1|=1|=1TL 1ʉ\1D1¿!ω )%1𿀀!lj)11󿀀!߉,)111111111ًD$1L$ !׉)1󿀀!߉ )11񿀀!ω, )111111111ʋ\$1T$!lj )1񿀀!ω )11򿀀!׉,)1111111111迀!߉ )1񿀀!ω )11򿀀!׉,)111111111ӋL$ 1T$|$l$33_3O3W ;|$|$Ɓt5|=1|=1|=1t$ށt5|=1|=1|=1t$΁t5|=1|=1|=1|$TL 1ʉ\1ڋ\$D1‹D$3G3_3O3Wgt64t$D$D$ E]MUE] M@U`p p ~~|$pL5Tt=p t= t= t=~ t=~nL= t= t= t=nT= bt=\ t= D  |$nnb;|$rooppoopprrrrrrrro\$ddoooorrrroT$ddpٱpddoopѱprrrroowErr]rrMU@gÐ|$33_3O3W t64t$Ɓt3t3t3tt$ށt3t3t3tt$΁t3t3t3t|$T3T3T\$3TD$33_3O3W ;|$|$(}u}u}u }@u`mƁt5|=1|=1|=1t$ށt5|=1|=1|=1t$΁t5|=1|=1|=1|$TL 1ʉ\1ڋ\$D1‹D$33_3O3W ÐQPQP~AeS~AeS:'^:'^;k;kEEXXKK 0U 0UvmvmvvL%L%OO**&5D&5DbbޱZIޱZI%g%gEE]]/u/uLLFFkk__mzmzRYڕRYԾ-Ծ-Xt!Xt!Ii)Ii)DDu‰ju‰jyxyxX>kX>k'q'qݾOO f f}:}:cJcJ11Q3`Q3`bSEbSEdwdwkk++pHhXpHhXEEllR{R{s#s#rKrKWWfU*fU*((//{{770(0(##jj\\++yyNiNiee4b4bĦĦ4.S4.SUU22uu 9 9@`@`^q^qnQnQ>!>!==>>MFMFTTq]q]oo`P`P$$ֽֽ闉@C̉@CgٞwgٞwBB[8[8yyۡ| G| G|B|B 2+H2+HpplZrNlZrN8V8V==6-9'6-9' d dh\!h\![Tћ[T$6.:$6.: g gWWҴOOa a ZwKiZwKi⓺ ⓺ **<"C<"C  ǭǭ--WWuLuLݻݻ``&&\r\rDf;Df;[~4[~4C)vC)v##ܶhhcc11BcBc"@"@  J$}J$}һ=һ=22)m)m/K/Kܲ0ܲ0 R Rww+l+lppHHGd"Gd"ĨĠ??V},V},"3"3INLJIN88ʢʢ 6 6Ϧϥz(z(ڷ&ڷ&??,:,:Px Px j_̛j_̛T~FbT~Fbظظ.9^.9^ïï]]iГ|iГ|o-o-%%Ȭ;Ȭ;}}cncn;{;{&x &x nYnY욷욷OOnene~~!!ٺJo6Jo6 )|)|11*?#1*?#1ƥ0ƥ05f5ftN7tN7ʦʦаа33JJAAPP//vM֍vM֍CMCM̪MT̪MTߞѵѵLjLj,,FeQFeQ^^5]5]tsts A. A.gZgZRRV3V3mGmGaa7 z7 zYY<<Ω'Ω'a5a5zGh>8$4,8$4,£@_£@_rr% % (Ky xZݨ31Y'_`QJ -zɜ;M*Ky xZݨ31Y'_`QJ -zɜ;M*Ky xZݨ31Y'_`QJ -zɜ;M*Ky xZݨ31Y'_`QJ -zɜ;M*̀       p*Zx"RM|1}0L>PˏᛱD*nzߥ#6. ;$q Ɠz/U^) @iJ#cǽomxzj_t5+Aѐ                                    }|M*p[[[[[[[[[[[[[[[[`)Ih!APQ \] G@]Ziܵ6_wA(G]Z@6wA(i_POLSJ[Ȃ4~o%ՆPOLS{O1 j^~o[%4J3'bQvE鬟_T [PENAJe`㆔rwֆSLOPI;e,^rW}9D*n$< 1)Bd"F&`gYͦkU2> &Fd`B"ͦU 2>Ykg@~S->ԹmDVYKVector Permutation AES for x86/SSSE3, Mike Hamburg (Stanford University),$fo}fouÐfofoUffo*f8foEffrf8fpfoe foE0f8f8ffom@ffoL f8foUPfo$ f8foff8ff8܃ff80ffofomffrff8foff8foff8foff8foff8o*f9foe`foEpf8ff8foL @ff8Ð`fofoSfȉfro*ff8foCЃ0f80ffofƒ focfoKf8f8ffo#ffoKf8f8f8ffoc ffoK0f8f8f8ffoc@ffoKPf8f8f8făf: ffofoUfffrf8foff8foff8ffof8foff8offoc`f8ffoCpfof8ff8Ð,$ofo@fo؍]fT$Ofo fo f80=z$ :H.oFfoff:H`oFfoH,fpf|$fofo|$fo f8` fPffffffffÐfp΀fpffffoÐfoT$ff:f:ffpf:fT$fofsffofsffPfoefomfoffrffoUf8ffof8ffof8ffof8ffof8ffoe f8foE0f8fffoÐfoUfoffrffof8foCf8fÐfofo,fPf8fof8ff8ffoUfoffrffof8fo^f8ff8foV f8ffo^0f8ff8foV@f8ffo^Pf8ff8foV`f8ffo^pf8fڃfo f8ك0ÐUSVWt$\$ȋD$T$܉\$00- d$01_^[]ÐUSVWt$\$ȋD$T$܉\$0T -d$01_^[]ÐUSVW-t$\$ȋ|$T$܉\$0od$0_^[]ÐUSVW-Qt$\$ȋ|$T$܉\$0od$0_^[]ÐUSVWt$|$D$T$ \$ȋl$$L$(oM)\$0<$T$l$Ǎ-6of$T$fo3v;ofL$fD$ $T$fD$foL$ 3v\$d$0 _^[]̋D$T$ D$JR Wf8I Rf8fffÐD$T$ D$JR Wf8I Rf8fffÐJWfB T كf8f8 f8f8D f8f8f8f8ÐJWfB T كf8f8 f8f8D f8f8f8f8ÐJWffB T كf8f8f8 f8f8f8D f8f8f8f8f8f8ÐJWffB T كf8f8f8 f8f8f8D f8f8f8f8f8f8ÐJWfffB T @f8f8f8f8 f8f8f8f8D f8f8f8f8f8f8f8f8ÐJWfffB T @f8f8f8f8 f8f8f8f8D f8f8f8f8f8f8f8f8ÐJWfff8fff8ٍT f8f f8f8f8f8f8f8 f8f8f8f8f8f8D f8f8f8f8f8f8f8f8f8f8f8f8ÐJWfff8fff8ٍT f8f f8f8f8f8f8f8 f8f8f8f8f8f8D f8f8f8f8f8f8f8f8f8f8f8f8ÐUSVWt$|$D$T$ \$$#Չ˃`oo^of on0ov@o~Pv``Fo_o^g of o0on0w@ov@P`o~Pv`ك`_g o0w@P``e E^kf @~n0v@W(_g o0w@JR Wf8I Rf8__g {_g o0Չ˃`oo^of on0ov@o~Pv``Eo_o^g of o0on0w@ov@P`o~Pv`ك`_g o0w@P`` E^kf @~n0v@Wx_g o0w@JR Wf8I Rf8X_C_g {_g o0ffffffff_^[]ÐUSVWt$|$D$T$ \$$L$(vJWR Wf8I Rf8щى (f)1ىP)<$P)$?oo^of on0ov@o~PFW$WN WF0WN@WFPW_v`g o0w@P`((P(^( f 0n0@v@)<$WFW$WN WF0W~@W_fg fo0f@(fPJR Wf8I Rf8W(WW(fۍ( WWW(f_fۍ ~ 0akNF W~0WW_fWg f0(f@fffff%)$f)f$d$l$$ff}f_^[]ÐUS[-`WmR Bf:vf:ef:Zf:Of:Df: 9f:@.f:Ȁ#f:f:6 JPRWWWÐfo+foc foBf8f8frRfofsffsffsffBfoIfoc0f8f8frfofsffsffsfffof8f8fofsffsffsffB J`~P Bf:kf:f:Ef:f:/f: tf:@f:ʀ^J0R(foWfsWfpUfffpfÐ(D*NZR fokfoc Bffof8f8frRfofsffsffsffpffsfffBI J PR BRf:f:f:f:f:if:~f:Sf:hf:=f:Rf: 'f: <f:@J1RWWWÐRWWɪWÐfo+foc BfoRf8f8fofsffsffsffrfIBfpff8fofsffsffsffRR fo Jffffff1[]ø[]f[]ÐD$L$T$ ÐD$L$T$ T$ QD  R@f8f8ɍR@@J9f8ff1Ð     AES for Intel AES-NI, CRYPTOGAMS by USVWD$t$|$O)ف)̃\$D$]C^NȋV d$ȋt$ ʉ^NV _^[]Ð+D$D$fUSVWt$|$O)ف)̃\$D$]^NȋV "d$ȋt$ʉ^NV _^[]Ð33_3O3W wD$\$L$ T$13_3TL3T3L3D$13\$ 13w1ʉT$1ىL$ 13W3\D3\3D3L$13T$13w 1É\$1ЉD$13_$3TL3T3L3D$13\$ 13w(1ʉT$1ىL$ 13W,3\D3\3D3L$13T$13w01É\$1ЉD$13_43TL3T3L3D$13\$ 13w81ʉT$1ىL$ 13W<3\D3\3D3L$13T$13w@1É\$1ЉD$@;|$=!ƋT$Ɖ1 O \$3L$ wL$ #O1D$1ʋwT$,ڋD$ \$13_3O3W USVWD$t$|$O)ف)̃|$<\$]^NȋV d$ȋt$ ʉ^NV _^[]Ð+D$D$fUSVWt$|$O)ف)̃|$<\$]q ^NȋV "d$ȋt$ʉ^NV _^[]Ð33_3O3W wD$\$L$ T$13_3TL3T3L3D$13\$ 13w1ʉT$1ىL$ 13W3\D3\3D3L$13T$13w1É\$1ЉD$13_3TL3T3L3D$13\$ 13w1ʉT$1ىL$ 13W3\D3\3D3L$13T$13w1É\$1ЉD$13_3TL3T3L3D$13\$ 13w1ʉT$1ىL$ 13W3\D3\3D3L$13T$13w1É\$1ЉD$@;|$=!ƋT$Ɖ1 O\$3L$ w L$ #1D$1ʋwT$-ڋD$ \$13W 33_ÐUSVWl$$t$(|$,^NV ʉ_OW GF^ NV ʉG _$O(W,33_3O3W ] }7$\$L$T$ 13_3TL3T3L3D$ 13\$13w1ʉT$ 1ىL$13W 3\D3\3D3L$13$13w1É\$1Љ$L$T$ t$,33^3N3V w$\$L$T$ 13_3TL3T3L3D$ 13\$13w1ʉT$ 1ىL$13W3\D3\3D3L$13$13w 1É\$1Љ$L$T$ t$$|$,G_OW G _ OW G _ OȉW̉ G _  G _ OW _  O$ W(G, _@ OD WHGL_OWG _ O WG _ O W؉G܉   WG  O WG  _ O WG _0 O4 W8G<Ht$,F0^4N8V<3F 3^$3N(3V,w $\$L$T$ 13_$3TL3T3L3D$ 13\$13w(1ʉT$ 1ىL$13W,3\D3\3D3L$13$13w01É\$1Љ$L$T$ |$,G_OW G _ O؉W܉ G  _$ O(W,    艗_OWG _ O WG _ O WȉG̉ _ O WG OP WT GX_\OWG_ O W G_ O W G_W@GD_HOL W` Gd _hOlWG_O  G _ OW  _ OW  G0 _4 O8W< _p Ot WxG|_^[]ÐSL$\$ T$B: RQS, 1[Ðf;XzsL/7ƾOSTo'-hˆVpppppp,,,,,,'''WWW###kkkWWWEEE555 OOOAAA###kkk|||EEE>>>^^^!!! 999OOONNN]]]eeeZZZQQQlll|||ttt+++΄>>>000444___vvv^^^mmmũ :::999222GGG]]]SSS===ZZZzzzQQQ$$$VVVlll```MMMiii fffbbbTTT---dddttt+++ uuu ߇LLL444sss~~~vvvmmmRRR111сooocccXXX:::aaa)))///222xxxqqqSSS"""rrrDDD666***zzz<<<$$$@@@CCC```iiiwwwPPP'''}}}555bbb AAATTT[[[!!!NNNdddeeeҽďHHH000___uuuGGG=== ???VVVMMM \\\fff---JJJ 333sssLLLggg~~~111RRRXXXaaa&&&777;;;"""DDDoooKKKccc...PPPyyy}}}[[[nnn)))HHH///???YYYxxx\\\JJJjjj333gggFFFqqqԛ%%%&&&777BBB;;;KKK...rrryyynnnUUU YYY666IIIjjj***FFFhhh<<<%%%888BBB@@@(((UUU{{{ IIIhhhCCC888((({{{www888AAAXXXvvvgggNNN```rrr ®jjjuuu]]]WWWFFF'''Ɋ222KKKBBB''':::%%%III{{{ CCCqqq\\\___>>>>>>ggg|||```nnn///444 MMMSSSrrreeeꎎzzz---kkk+++666555MMM333fffaaaXXXZZZ:::$$$ VVV@@@xxxccc BBB333̿&&&充aaahhh???;;; oooSSSbbb...((( ,,,tttooo666"""888ddd999NNN,,, 000 yyyDDD"""eeeYYYkkk===###HHHtttQQQTTT000~~~(((UUUUUUhhhAAAPPPCCC111///˨***<<<+++ppp222iii bbb$$$GGGEEEsssmmm~~~)))JJJø...攔%%%!!!HHHfff{{{;;;qqq)))777ͱlllLLLdddnnncccvvv---KKK&&&}}}___\\\OOOFFF???777yyy^^^GGGRRRmmm[[[^^^iiiZZZ<<<111LLL 555󌌌###uuu]]]jjjJJJWWWՄ!!!DDDEEEQQQ}}}999sssܪ|||wwwYYYVVVlllTTT444xxxpppIIIRRR PPPwwwݓ䆆***[[[zzz@@@===OOOUSVWL$?D$\$T$$l$(t$z)߁)|$,t$D$\$L$ T$$l$(] E] M@U`ND$$t$L$ |$(T$_OW 33^3N3V ˋ|$$t$|$ɉʉ_OW L$ vt$WT$L$ "t$(OW ^NV d$_^[]Ü|$P)9 <1_t$_D$ -D$T$$;t$|$(|$,^NȋV ˋ|$$|$,t$ 33_3O3W Tt$ t$|$_OW t$,vt$|$|$,t$(_OW ^NV |$,_OW N|$|$|$,^NV _OȉW ˋ|$$)|$(t$33_3O3W ^NV vt$t$,^NV _OW t$vt$L$ L$ l|$t$,<tى󤐐d$_^[]Camellia for x86 by USVWT|$ht$l/WO_ D$D$ D$@8D$`$D$ pD$$lD$(HD$,TD$0D$4 D$8@D$<`D$@D$DD$HD$L൉,$T$L$\$ lL \1$3l<$3\3L 33lO>$3l<3\3L 33l͋|$h_ OW/T_^[]ÐUSVWT\$ht$l|$pL$tL$t+SK[ D$D$ D$@8D$`$D$ pD$$lD$(HD$,TD$0D$4 D$8@D$<`D$@D$DD$HD$L൐3_ 3O3W3/\$ L$T$,$lL \1$3l<$3\3L 33lO>$3l<3\3L 33l͋|$p;|$t|$p3|$h_ OW/T_^[]ÐUSVW|$t$Xo_1ɉڈѽoDo ~sosD /s< M~ ?sosDs< ~ sosDs< ~ sosDs< ~ s ~s ~~w_ WO/_^[]ÐUSVWD$\$L$T$ ^% ʉ$ $($,À$$SoCo[$SoSokGsosT$SoKs<ocWsooEs]T$SoCs<o[OsgoUsmT$SoSs<okGs_oMseT$SoKs<ocWso oEs]T$SoCs<o[Osg(oUsm T$SoSs<okGs_0oMse(T$SoKs<o#Wso8oEs]0T$SoCs<o[Osg@oUsm8T$ S(oS(s<ok Gs_HoMse@T$ S8oK8s<oc0WsoPoEs]HT$ SHoCHs<o[@OsgXoUsmPT$ SXoSXs<okPGs_`oMseXT$ ShoKhs<oc`WsohoEs]`T$SxoCxs<o[pOsgpoUsmhT$s<Gs_xoMseps<E]xo0XP 3Q 3Y1I$$$$1Љ$o|oĐ~soމs$s8|Đ2,~soމs$s8^|Đ2 <Ћ$~soމs$s8 N|Đ2,~soމs$s8^|Đ2 <~soމs$s8N|Đ2,~soމs$s8 ^|Đ2 <Ћ$~soމs$s8N|Đ2,~soމs$s8^|Đ2 <~soމs$s8 N|Đ2,~soމs$s8^|Đ2 <Ћ$~soމs$s8N|Đ2,~soމs$s8 ^|Đ2 <~soމs$s8N|Đ2,~soމs$s8^|Đ2 <Ћ$ ~soމs$s8 N|Đ2,s~sos|s<^~Ns s $$~oqqp;$($ P X0$,w_^[]ÐT$D$YofpNfpfofsffs?fffsffiffofofpNfpNfff:Df:Df:DWWfofsfsfffofofsffsffs9fofsfsfffofsfffsffsffpNfpNffBf:b ÐD$T$Yofo)f8b fofpNff:Df:Df:DWWfofsfsfffofofsffsffs9fofsfsfffofsfffsffsff8ÐUSVWD$T$t$\$ Yofo)of8Ńoovf8f8oj ffpNfofލv f:Df:Df:DR  fpNfoff:Df:Df:DWfo)Wo>fovff8ffofsfsfff8ffofofofsffsff:Dj fs9fofsfsfffpNfofsfff:DRffsffsff:Dv fpNfoff:Df:Df:Dfo)WWffffofsfsfffofofsffsffs9fofsfsfffofsfffsffsfof8ffofpNfpNfff:Df:Df:DWWfofsfsfffofofsffsffs9fofsfsfffofsfffsffsff8_^[]Ð FN V   ^ f(n0v8~@89;:H?><=P6754X1023`$%'&&h#" .!p*+)6(x-,.>/pBqsrwJv tu~R}|yZxz{lbm$onkjj,hibrc4a`ezd΀BƓJ ΔR֝Zޚb$揨j,r4z<DȮ LЧTؠ\"d*l2t:| @8`$plHT @`GHASH for x86, CRYPTOGAMS by ̍` 0D$T$L$ nD$nnnbnrnz nXnhn` ~nRs nbnr~Hs nZ nh~Hs nh~H s nh~Hs nh~Hs ~Hs ~H@ s 1 nnЍR~s @~wÐUSVW1|$L$\$l$ Q֋CGG֋CGG֋C G G ֋CGG֋CGG֋CGG֋CGGփ[  LL$ ICGIGCGIGiC G IG MCGIG1CGIGCGG։Y_^[]Ð` PD$T$L$ nD$ɐnЍR~s @~wÐUSVW1|$\$l$L$ ֋CG֋CG֋C G ֋CG֋CG֋CG֋CGփ vl$M}CGMgCGMQC G M;CGM%CGMCG։_^[]Ð` 0D$T$L$ nR@wÐUSVWt$|$\$eVGFV GFVG FVGF V$GF(V,GF0V4GF8V< @\$uKVeGFKV SGFKVAG FKV/GF KV$GF(KV, GF0V4_^[]ÐT$D$L$ ÐUSVW\$t$|$l$ 1у NWуKNWуKN W уK NWуKNWуKNWуKNWуK 9l$ уM NWуMKNWуMKqN W уMK SNWуMK5NWуMKNWуK_^[]USVW\$t$|$l$ 1))у NW))уKNW))уKN W ))уK NW))уKNW))уKNW))уKNW))уK 9l$ ))уM NW))уMKNW))уMKqN W ))уMK SNW))уMK5NW))уMKNW))уK_^[]USVW\$t$|$l$ 1))у NW))уKNW))уKN W ))уK NW))уKNW))уKNW))уKNW))уK 9l$ ))у M))у M))у M))у Me))у MA))у M))у |$$l$$)Ճ))у W))уKW))уKW ))уK W))уKW))уKW))уKW))уK +T$$)Ճ))уM W))уMKfW))уMKFW ))уMK &W))уMKW))уMKW))уK}) N)KN)KN )K N)KN)KN)KN)K l$$5) M"N)KM N)KMN )K MN)KMN)KMN)K NKNKN K NKNKNKNK l$$R MGNKM:NKM-N K M NKMNKMNK_^[]Vt$ W|$US1ۋ1ɋ1ËD$ыF1ՋWD$ՋHF1ŋFӋWŋӋWŋD$ӋhF 1ËFыWËFыWËыW ËD$ыX F1F ՋWFՋWFՋW ՋWD$ՋHF1ŋFӋWŋF ӋWŋFӋW ŋFӋWŋӋWŋD$ӋhF1ËFыWËFыWËF ыW ËFыWËFыWËыWËD$ыXF1FՋWFՋWFՋW F ՋWFՋWFՋWՋWD$ՋWHF1ŋFӋWŋFӋW ŋFӋWŋF ӋWŋFӋWŋFӋWŋD$ӋWh F1ËFыW ËFыWËFыWËF ыWËFыWËD$ыW X$F1FՋWFՋWFՋWF ՋWD$ՋWH(F1ŋFӋWŋFӋWŋFӋWŋD$ӋWh,F1ËFыWËFыWËD$ыWX0F1FՋWD$ՋWH4F1ŋD$Ӄh8X<[]_^ÐVt$ W|$US1ۋ1ɋ1ËD$ыF1ՋWD$ՋHF1ŋFӋWŋӋWŋD$ӋhF 1ËFыWËFыWËыW ËD$ыWX F 1FՋWFՋW D$ՋWHF 1ŋFӋW ŋD$ӋW hF 1ËD$уXH[]_^ÐVWUS|$t$11ɋ1ыF1҃ՋFO1҃ӋFӋoF 1҃ыFV҃ыF_ 1҃ՋF V҃ՋFՋOF1҃ӋFV҃ӋF V҃ӋFo1҃ыFV҃ыFV҃ыF ы_F1҃ՋFV҃ՋFV҃ՋFV ҃ՋFOV1҃ӋFV҃ӋFV ҃ӋFӋVo F1҃ыFV ҃ыFV҃ыF_$V 1҃ՋFV҃ՋFՋVO(F1҃ӋFV҃ӋFo,V1҃ыFыV_0F1҃ՋFO41Ӄo8_<[]_^ÐVWUS|$t$11ɋ1ыF1҃ՋFO1҃ӋFӋoF 1҃ыFV҃ыF _ V1҃ՋFՋVOF 1҃ӋF o1у_O[]_^USVW1|$(t$T$ߍl߉)%)1)Ճ)%d$9$$9^Nn v6D$\$L$ l$t$_T$` nt$|$ l$11n'n.n]ool$nMnFs s AonLnDs ~\s I9o~\s s \ B1n$n.nt$ n]ool$nt$$nMnFs s AKont$nLnDs ~\s KIo~\s s nt$\ R9=w$t$k|$ 1ɉ)D Ջ?ND$1ҐōI9ىl|$t$|$ D 1ɉT$L(D$ FA}l Iŋ9ىlD |$t$Ń|$ 1T$l T$L(D$ Fl Iŋ9ىll Ńl1L$ T$D(IT ;L$D$9t$L$ 11ҋ"$L$ D$ AI,C; $Él|$t$,C|$ l ,Pl$T(D$ ˃Fl ŋDll$Iŋ9ىll ŃlL$ 1t$T$D(T 9ىD$|IL$ D D 19ٍIE,l I݃; $lڃ|$t$|$ T T l$D$ YFl$|$t$ 1ҐDIDR!Љ! L Kd$_^[]Montgomery Multiplication for x86, CRYPTOGAMS by ̃$?,$nnۉL$1T$1L$ f1щl$1fL$1sT$l$!s!n!ns!n s!ns !n s !ns!n s!ns!n s!nsn s$Ð$,?<$L$1щT$1L$ 1щl$1ՉL$1!؉T$!߉l$!1!13!,!11ʋ !11, !11ʋ  !11,!11ʋ !11,! 11ʋ !11,<1111$Ð`R/#D$f:DD$ÐUSVWD$\$ oD$\$$oD$\$ 3D$3\$$NjD$os _s ^[]PwÐUSVWD$,\$4D$T$ D$0\$8$T$D$,\$43D$03\$8{l$($L$|$t$ 111؉]1u 11_1^U[E]GF(2^m) Multiplication for x86, CRYPTOGAMS by USVWt$|$l$$3{kC]11ooNoVo^of on(ov0o~8$L$T$\$d$ l$(t$0|$8OW_g o(w08D$@L$HT$P\$Xd$`l$ht$p|$x1s o$\$4 ȍ<DoLD$4 ˍ<oTo\4 ˍ<odol\$ 4 ȍ<oto|4 ȍ<LTD$4 ˍ<\d4 ˍ<lt\$4 ȍ<|D4 ȍ<T\D$4 ˍ<dl4 ˍ<t|\$4 ȍ<DL4 ȍ<\dD$ 4 ˍ<lt4 ˍ<|D\$$4 ȍ<LT4 ȍ<dlD$(4 ˍ<t|4 ˍ<DL\$,4 ȍ<T\4 ȍ<ltD$04 ˍ<|D4 ˍ<LT\$44 ȍ<\d4 ȍ<t|D$84 ˍ<DL4 ˍ<T\\$<4 ȍ<dl4 ȍ<|DD$@4 ˍ<LT4 ˍ<\d\$D4 ȍ<lt$L$T$\$d$ l$(t$0|$84 ȍ<DLD$H4 ˍ<T\4 ˍ<dl\$L4 ȍ<t|4 ȍ<LTD$P4 ˍ<\d4 ˍ<lt\$T4 ȍ<|D4 ȍ<T\D$X4 ˍ<dl4 ˍ<t|\$\4 ȍ<DL4 ȍ<\dD$`4 ˍ<lt4 ˍ<|D\$d4 ȍ<LT4 ȍ<dlD$h4 ˍ<t|4 ˍ<DL\$l4 ȍ<T\4 ȍ<ltD$p4 ˍ<|D4 ˍ<LT\$t4 ȍ<\d4 ȍ<t|D$x4 ˍ<DL4 ˍ<T\\$|4 ȍ<dl4 ȍ<|D4 ˍ<LT4 ˍ<\d4 ȍ<lt$s  6s D$@L$HT$P\$Xd$`l$ht$p|$x&3{COW_g o(w08NV^f n(v0~8NV^f n(v0~8@ {C0wc_^[]Ð`x0`x0###F&###F&?~?~oo&Lˇ&L˸ڸbmڸbm  OO!OBn OO!OBn 666l666lYQYQo޽ o޽ yyyyyyooo_0ooo_0~?m~?mRRURRRUR```'G```'Gʼve5ʼve5V+7V+7q[ңq[ 0 `<l 0 `<l{{{{{{555j555jti:ti:SGݳSGݳ{!{!/^활/^활...m\C...m\CKK1Kbz)KK1Kbz)!]!]WWAWWWAWTA*TA*wwwwww777n777n{Vמ{VמF#F###JJ5Jj JJ5Jj OڞDOڞDXX}X%XX}X%ʏʏ)))UR|)))UR| ( P"Z ( P"ZOPOPi]ɠi]kkkkkk.\م.\ٽνsg<νsg<]]i]4]]i]4@P @P   >>>|>>>|( -( -gggxgggxsS՗sS՗'''%N'''%NAAA2XsAAA2Xs, , QSQS}}}ϔ}}}ϔn7In7IG؎VG؎V0p0p#q#q|||Ǒ|||ǑfffqfffqSݦ{Sݦ{\K.\K.GGGFEGGGFEB!B!ʼnʼn---uZX---uZXƿyc.ƿyc.8?8?#G#GZZuZ/ZZuZ/6l6l333f333fccc?\ccc?\  98I98Iqqqqqqύύd}2d}2II9Irp;II9Irp;Cن_Cن_11KHۨKHۨ[[q[*[[q[*4 4 R)>R)>&&&-L &&&-L 222d222dJ}YJ}Yjj<x3w<x3ws榷3s榷3:t:t¾|a'¾|a'&އ&އ444h444hHH=Hzu2HH=Hzu2$T$Tzzzzzz􍐐z=dz=d__a_>__a_> @= @=hhhghhhghr4hr4ʮ,A,A^u}^u}TTMTTTMTΓv;v;""" D/""" D/dddcdddc**ssssssHZ$HZ$@@@:]z@@@:]z @(H @(H+V蛕+V蛕3{3{KۖMKۖMa_a_===z===zȗf3[f3[6ԃ6ԃ+++EVn+++EVnvvvvvvႂ2d悂2d((lw6lw6õ[wt[wt)C)CjjjwjjjwPP]P PP]P EE ELWEE ELW88000`000`+t+t???~???~UUIUUUIUǢyYۢyYeeeeejeeejҺhiҺhi///e^J///e^J'N睎'N睎_޾`_޾`pl8pl8.F.FMM)MRdMM)MRdr9vr9vuuuuuu0 60 6$ $ @yK@yKcYхcYх8p6~8p6~|c>|c>bbb7Ubbb7Uw:w:)2M)2Mb1Rb1R:b:b3f3f%%%5J%%%5JYYyY YYyY *TЄ*Trrrrrr999r999rLL-LZaLL-LZa^^e^;^^e^;xxxxxx888p888p匌  cƲcƲA W䥥A WCM١CM١aaa/Naaa/NE{BE{B!!!B4!!!B4J%J%xf<xfс>сDU"DU"  NN%NJkNN%NJkQsfQsf ` `<<|>|j5@j5@  ޹go޹goL_&L_&,,,}XQ,,,}XQkָkָk\ӌk\ӌnnnW9nnnW97n7n  VVEVVVEVDD DI^DD DI^ߞߞ!7O!7O***MTg***MTgֻmk ֻmk #F⟇#F⟇SSQSSSQSWܮrWܮr , X'S , X'SN'N'lllG+lllG+111b111btttttt  FFF CLFFF CL &E &E<<PD(PD([Bߺ[BߺXN,XN,:::t:::tiiioiiio $ H-A $ H-Apppppp׶TqoTqogηgη;~;~.ۅ.ۅBBB*WhBBB*WhZ-,Z-,IUIU(((]Pu(((]Pu\\m\1\\m\1?k?k"D†"D#臸O6yoR` {5.KWw7JX) k]>g'A}|fG-Z3jhp%pjhp%pjhp% pjhp%pjhp%pjhpt%pjhpT%pjhp4% pj hp%$pj hp%(pj hp%,pj hp%0pj hp%4pjhpt%8pjhpT%P0 u.o2 3 @HX|_^][ã@@=Du{h3 P0 u;o3 f$3 @HfX&3 Z|_^][Ѕu#o(3 @H|_^][ãDD;0E|_^][hHh2 ! j0 ̋L$T$V;us3^:uA:BuA:Bu A:Bu3^^̋T$L$BA̡ttЋL$WfAT0 L$WfÃ̡=t3ËD$̋L$WD$fA̋L$WD$fA̡tVt$t$t$j t$(L$t$(t$(1t$(j 1 ^W|$t+Nj=h3h`5 jj `txP辜;}kVW5*t>jW5, 3hHh`5 jj thKh`5 vV ^_h6h`5 jj _̡̡̡̡VW|$ 3t+NjhVh`5 jj Zt$P踛;}W5%th]h`5 jj tF_^_3^̡̋D$y5 Ã)}83 V5p6;~5 ^V5蜜^̡̃=uhh`5 jdjgj3áthh`5 jj С=uE蝚u2thh`5 jj Ѓhh`5 jAjgj3Åthh`5 jj ЃWhh`5 j uhh`5 jAjgj63_h h`5 Gu"WYh h`5 jAjgj3_áthh`5 jj ЃVj5ӗWu5pV5) th!h`5 jj Ѓu#h$h`5 wWދ^_Fދ^_̃=Vt$FfnfnY u*uhh`5 jAjej3^WVuhh`5 jAjej3_^W5uW_^Ã)_^Vt$ y4=tFVht;t$t$Pt$V8^átt$t$Vt$Ѓ^ht5 hMh`5 Vt$2҅tD$W|$+ @2H Nu_^̸)̋D$̋D$̋D$̋D$̋D$k/D$̡u%T0 L$uFtFPh $WfF;,uFF@tj0 FFD$P F tL$QPȐtF @V5tH tIP(hh86 jj Bt1 (t'I (uh h86 jj hh86 jj ^_̸$ L$<Vt$0W|$0u ht$Dt$Dt$DV_^$j2D$ |$ P5 tL$8P50Hhh86 jj <t1 (t'I (uh h86 jj hh86 jj _^$̋D$$̸ te$VP#hh86 jjuD$Ph0u3h"h86 jjb^3̸V V5hh86 jj ,D$ $((D$P<=(tD$Ph0tRhh86 jj hh86 jj hh86 jj q%D$4Ph08(:t1 (t'I (uh h86 jj hh86 jj ^Ð ̸ =u = hh86 jj $P=(t$Ph0ztRhh86 jj `hh86 jj Mhh86 jj :%D$0Ph0t8(Vhh86 jj t$t$ D$D$t0L$ Qh0(PD$ tPt$h6 V=hh86 jj 5tP辉 t%P蒋u5 萉 hh86 jj 5*hh86 jj ^t1 (t'I (uh h86 jj hh86 jj ̃=t>h:h86 jj D$Ph`'5蟈h=h86 jj l,̸f =Nhh86 jj 6$P=(t$Ph0tRhh86 jj hh86 jj hh86 jj %D$0Ph08(Vhh86 jj  Phh86 jj p$t1 (t'I (uh h86 jj 6hh86 jj tt$jjjVV%V^̸ 1hh86 jj $P=(t$Ph0tRhh86 jj yhh86 jj fhh86 jj S%D$0Ph08(Vhh86 jj hh86 jj  t1 (t'I (uh h86 jj hh86 jj ^3̸ hh86 jj v$P=(t$Ph0CtRhh86 jj )hh86 jj hh86 jj %D$0Ph0=8(Vhh86 jj hh86 jotn= u&h&h&辅 u V\?VD$FD$V5 F D$FFF tFhh86 jj 5^t1 (t'I (uh h86 jj hh86 jj 3̸$ S3hh86 jj D$P9(tD$Ph0otRhh86 jj Uhh86 jj Bhh86 jj /%D$4Ph0i8(hh86 jj VW= t_D$PMD$P5 ] tOGtNW^Chh86 jj u_^t1 (t'I (uh h86 jj 9hh86 jj #[$ Vt$֋i +iλE^Vt$N~Ft PVl^̋D$0pp ppD$Ѓ̋D$V0֋i +iλE^̸F = te$VPD$P5 裀 t=W~tGW5 胁N~FtOV_^3 ̸ 3ĉ$ S$VW$ t$\$ ;$t;GP0 0pphL6 hP3΃QAu+ʍt$w $w+wh`6 PV3΃QAu+$t2GPP$ hx6 +PVH3΃QAu+U7$ w+h6 PV3D$0P3nCG3Cw  D$VP$ED$Uj>P v vVsP+h6 PD$0P2L$4QAu~+ʋ׍ZBu}++;}}+PD$ WPD }(+PD$ WPD$( P@u+¹+ȍDh6 QP2D$(PD$ 0ivtD$PV ]$_^[37 ø ̋L$u6 Ãu 7 Ãu@7 Ãu: Ã: 4: EVhhD: jj phhD: Ajj p ^̡<u t2<h@4P}5<} <8t$uÉD$UWt$ 3u_]ËD$SVhhD: jj8,ux؃~?hhD: P t3~IVuyF;|hhD: jj~#uhhD: jAjlj)3^[_]3~WtKxtEl$Eu3Pw;|3VuSyȋp0@VUQt$,ЃF;|t W^[_]̸& Ul$W39}u G_]St$f؃\$u[_]VhhD: jjs6wu,w;L؅~HhhD: PI t(3~"l$VugxF;|l$$hhD: jjU~&u"hhD: jAjjj赳3^[_]3~dEtPv;|3 VuwD$ t QtqD$1VPUt$4ҋD$(PVt$(&F ;|t W^[_]W39=<;Ut$ #SVhhD: jjeuu؃~:hhD: P t3~VuwF;|hhD: jj~!uhhD: jAjkjg^[]_Ël$3~XItGx tAEu3P"u;|3Vuvȋp0@ VUQt$,ЃF;|t WCEtP3sE^[]_̡8uChhD: jj 48phhD: Ejj 8 8 @̡8uChhD: jj 8phhD: Ejj 88 @̡8uChhD: jj t8phhD: Ejj 8L8 8uChhD: jj $8phhD: Ejj 88 @Vt$u3^P;sL$;}Q6t^̡8uChhD: jj 8phhD: Ejj 8l8 ̡8uChhD: jj D8phhD: Ejj 88 @̡8uChhD: jj 8phhD: Ejj 88 @ W|$?u'quhghD: jAjfj3_SV7q\$;j7@rtF;~t$S7Hr ^[_hohD: jAjfj藮3^[_VhhD: jj 3958uD$8hhD: jj ^SWhbhD: jJ uhdhD: jAjhj _[ËD$VD$GD$hlGD$$hD: GD$,jj G >t$ vp;F!jvqtBvp;F~ߋ^WSvCFq hwhD: jj ^_[hohD: jAjhjBWVt$h v>pVh ^̸ =<u u S\$Wh>hD: jj \$SD$P5<vuHVhAhD: j t,~uoFVu 5<t^hRhD: jj uhThD: jAjijC_[ VhhD: jj =<uh h t3ɣ<DhhD: jj Z^5peuhpPShqjGt$0 ȃuoD$oA@I H ̸ W|$D$PD$Pt$,t$,WD$PD$PD$Pt$fL$=wlGD$ HGD$G ųSVt$< ‰Gʋ+W+Cʼn7^[_3_̸ D$ PD$Pjjt$,u3ÍD$PD$Pjjt$0t܋ $D$+L$+D$ ~ yIQy ~A-QT$t L$tSVW|$*\$O鸫*ލ v+io_鍋$Q@+iƵt$^[Vt$E.WT$ iǀQ|$J+J+B+ȋQ| GQ yOƀQr B@PBlPȃ y_3^ËD$_D$0^SUVt$k9 W iű:FiȠ⻷ѹiõ+ȸ= gfffiϏ +D$ 0颋.v+D$8EkdD$_^][̋T$ D$tW|$ +V 0+u@Ju^_3%0 %0 Vt$t*t$@P0 60 ^0 ^3S\$Vt$UW0 M3O$Gu+u0 _]^3[hD0 t;hDjP |7*GP0 u!30 +0 _]^ 3[ÊD7F8v!@+P>jP jWS3+8+P>jP} CG8CG9CG:CG;CG<CG=CjG>CWSG?j@WCXE T$_ BBJKJBBJKJB B J K J B B^J[Vt$j\jV #EgFFܺF vT2^jt$ t$ Ul$ W|$S\$C ;sCljKKXCVtdS@s#9@sW UP {X^[_]þ@ +VUP jCPS`j@CCXjP+ $tVUS4 +tWC{XUPz ^[_]̸T L$XD$\VWyqT$DQ L$h|$dt$0T$,S|$Lt$PT$TU$IL$p3H#3 hH 3T$4H H T$LH \$@HX H #3t$83 t$4H  ىl$HH h  H #3|$l |$8H \$DHX H ىl$LH H ى\$3#3\$lHh H H Hl$,3#3l$P H H HT$ 3#3T$,p H H H!t$83#3t$ x H" H# H%|$3#3|$8X$ H& H' H)\$(3#3\$h( H* \$<H+ 3ωl$#ˋl$<3΋L$(3P,L$lH- #\$lH.3 \$H/ދt$l H1T$4P0 H2 H3 H5T$3#3T$4x4 H6 H7 |$03H9@@#3|$3h H#3 t$0Ht$l Hl$$h t$<H H l$l3#3l$$3 #݋3\$lڋ Ӊ\$\## ы™yZT$@Ӌ\$<ÙyZ #׋# L$# ƙyZt$ ׋t$\#ӁƙyZ# ыT$ #Ήt$\ # эyZT$Hʋ|$\#щL$< ǙyZ# ʁyZL$,# ƙyZt$(t$< Ջ ## ыT$0 # # эyZT$Dʋ L$\#ы# ʁyZL$ # ƙyZt$t$\ Չl$< #Ӌ# ы́™yZT$$ yZ#ω|$\ ׋# T$LyZ\$< #Չl$`΁ÙyZ#L$< L$8# t$4ދt$` ơnӋ# Ջl$\# сřyZT$l3 3L$@33΁nL$ ϋ33΁nL$ 3Ӌ3΁nL$3Ձ¡nT$D33΁nL$ ϋ33΁nL$  3Ӌ3΁nL$$33Ձ¡nT$H򍗡nn3L$( ʉT$`3͋l$`3΁šnnL$, 3Ӌ3L$033ρ¡nT$L򍓡n\$h3L$4 3ρǡn3L$8ы 33L$l33t$Lt$PL$Tʉt$PL$TL$8Kt$lsL$X͉L$XщL$4K L$p,][_^T̸` 3ĉD$\D$lVDED$W|$lP]u_^L$\3i `t$pD$ WPD$PV D$j\P$_^3* `S\$ VW{sX>F8v!@+P>jP~ jWS3k8+P>jP] CG8CG9CG:CG;CG<CG=CjG>CWSG?j@WCX% T$_ BBJKJBBJKJB B J K J B B^J[jt$ t$ q Ul$ W|$S\$C ;sCljKKXCVtdS@s#9@sW UP {X^[_]þ@ +VUP jCPSj@CCXjP+ $tVUS +tWC{XUP ^[_]̸`6 3ĉD$\D$lVTED$W|$lPu_^L$\3 `t$pD$ WPD$PV{D$j\P/$_^3z `S\$ VW{s\>F8v!@+P>jP jWS3 8+P>jP CG8CG9CG:CG;CG<CG=CjG>CWSG?j@WC\u T$BBJKBBBJKBB B J K B B BJKBB_B^J[jt$ t$ Ul$ W|$S\$C ;sCljKK\CVtdS@s#9@sW UP@ {\^[_]þ@ +VUP jCPS`j@CC\jP+ $tVUS4 +tWC{\UP ^[_]̸Tf D$XSUVpWT$hI|$lOo O O O \$0O _O H 3Ήl$(#H3H pʁƙyZH։L$XO  O  O ك H3L$X#L$h3Hʉ|$lx T$lǙyZ\$8*L$hJ J J L$XT$l3L$hl$4#3L$XʋXÙyZًL$lAL$l  ыL$lAL$l  ыL$lAL$lD$l ы3L$h#ωT$D3L$hl$XʁřyZL$lAL$l  ыL$lAL$l  ыL$lAL$lD$l ы3ωT$@#ˋ3T$DT$h™yZыL$lT$h L$L$lAL$l  L$L$lAL$lT$@  L$L$lAL$lD$l L$3#3ʍyZыL$lT$\T$1AL$l  L$lAL$l  L$lAL$lD$l 3͉t$F8v!@+P>jP jWS3蛺8+P>jP͵ CG8CG9CG:CG;CG<CG=CjG>CWSG?Dj@WC\蕲 T$BBJKBBBJKBB B J K B B BJKBB_B^J[Vt$j`jVɴ #EgFFܺF vT2F^jt$ t$ A Ul$ W|$S\$C ;sCljKK\CVtdS@s#9@sW UP {\^[_]þ@ +VUP jCPS谸j@CC\jP+ $tVUS脸 +tWC{\UP誳 ^[_]̸dF 3ĉD$`D$pVdED$W|$pPu_^L$`3ɲ dt$tD$ WPD$PV;D$j`P?$_^3芲 d̸d趲 3ĉD$`D$pVxED$W|$pPu_^L$`39 dt$tD$ WP6D$PVD$j`P误$_^3 d̸t& 3ĉD$p$Vt$|WjpED$ jP> $D$D$؞VPD$$|6D$(p0D$,9YD$01 D$4XhD$8dD$G VWF?j@VGhլGl N tNv_^3[3D$@FHHHPOl;r_^[ËT$BBJOBBBJOBB B J O B B BJOBBBJOBBBJOBBBJOBB_B^J[ËT$BBJOBBBJOBB B J O B B BJOBBBJOBBBJOBBBJ_^[Vt$jpjVi g jFgFrn^?^[ËW‹FFVN‹NF^_W FF F V N ‹N F^_WFFFVN‹ÈNF^W‹_FFFVN‹NF^_ W$F F!F"V#N$‹N%F&^'_(W,F(F)F*V+N,‹ÈN-F.^/_^[̋D$ɼ@g j@;ʄ@ g@+@rn<@6_@:O@ т@$RQ@(l>+@,h@0kA@4ك@8y!~@<[@@@D@H@Lǀǀ@jt$ t$ - S\$ Vt$W|$OPU3W@oD;oDwr;W@sGHWLW@oDtO+;sVSPm ]_^[USPR +LJݍoPjUW,oPrPSW,ރ +ޅtVSU ]_^[Vt$ Fuu1uD1A+PFjPâ jFPVL$F FAFAFA ^̋D$@@ RRRR@RRRR@%%%%@%%%%SUVt$W|$tQ+؃;sVt$P 7_^][Ël$SUP jGPW+Bl$ރv SUW* +tV+PGP跡 7_^][̸V 3ĉ$S$W$sUOk V$G\$FvN F F FL$L$$L$N F F E$߉L$ @L$(E$L$ UmD$0PU"jD$thD$PD$P~WӒ tNF4PWt=t$D$PW t'USW蝒 t_^][L$D3› HËL$T3_^][3譛 H̃|$Vt$t+|$t$FPF4PFP jt$t$t$V^ø膛 3ĉ$$3S$U$V$W$T$t;>t>>ttWD$=~hh< jth< GD$ ;}Wt$FWP t'SU^S蜓 tnLUFPPS7 u73$_^][3\ ČÁwSFPUPĚ nL ]Mt+PFPjP衚 T$3ɊDP46D A|R^WSR wWPD$ PSZ3DP4\D A|t$^4WS $W>PD$ PS蒒FPFPJt:̋D$8u3ÃD$8̸@̋D$VptFt 6P蕖V(^̃|$tËD$V(t4L$ t$1VD\ tVhWt$. t^V(3^̋D$VW|$pt:?Sujh(= 6+ 36v7賘 [t_^VjNh= h u^ÍFPF FFF(D$ p@$^Vt$Vu^ËD$ S^WxsVGPVi tG twPCP[ u_[3^_[^̋D$VpFPN t#Ft PQǔv F V ^̋D$@x u3ÃPqtPhWt$q Vt$ F%PD$ @P"hV'F ^̋D$Wt$xP)y3_Vt$D$tL$ QPGP u^_ËD$ ^_̋T$D$JHtYt*HtËBr1@0pAPu1ËT$D$ u|PRAPcY u 3ËD$Vt$u3^ËL$ = S$:utX:Zuu3[uD$jV@PX ^ø= I:utQ:Puu3u\WD$PVu_^ËD$ HD$}W3א_^PAWPdX W賐_^ø^̋D$t$ t$ @@PE Vt$Vj Pj Pj Pۑj P͑$dž ^W|$ u3_S\$ WSu[_VWVQQM VQP9 VPP% VPP 4 ^[_Vt$tVV[^Vjbh= h u^Vdž ^W|$ u3_UVW&L$l$1 S;u(~hՍލA`I2ARBKuD+Ƅ9~HPjP ~ՍފA@I2ARBKuVUUW[uVU3^]_^]_̋D$SUVt$W|$unun9D$$:9D$0 u_^]3[hjjjV聘tVPjPM dž _^][Åtjjt$,PW;tWFwtt$WՏqhVjjWVWy؍ShUW0SUVkSVP]SU覎hjjjW蕗4SjUi LJ _^][S\$ Ul$ u]3[Vt$uF^][WU  ~J+;BPD$SP D$$  +t]؍WPPUtI;v$WSPUt/+;wVSP脐 _^][_^]3[̋L$ u3ÍPjjjQ]S\$3Vt$W|$~.UNL$+ *Ɉ ;D$} D8t @;|]tD0D3_^[ø ̋D$@t D$L$AuA$L$AtA$L$qP3̋D$pDYVZL$tqVVu 3^h~t$ ^Vt$ hVF^t$ D$t$ p ̋L$D$VqHtEtt^qt$jjD$tL$xjjQPVu%3^ËAtpVtjjjjθ^Vt$u3^ËL$ = S$:utX:Zuu3u3΍QAu+ʋD$ x\jjQVptG[^ú> :utX:Zuu3u4Vȃu[3^ËD$ pQjjp[^ø= :utQ:Puu3u`WD$PVVu_[^ËD$HD$x'jjPWQtW<_[^W3+_[^[^̋D$t$ t$ @p9 S\$ VW{s\>F8v!@+P>jP> jWS3k?8+P>jP CG8CG9CG:CG;CG<CG=CjG>CWSG??j@WC\ T$ BBJKJBBJKJB B J K J B BJKJBB_^J[jt$ t$ Q> Ul$ W|$S\$C ;sCljKK\CVtdS@s#9@sW UP谊 {\^[_]þ@ +VUP莊 jCPS=j@CC\jP+p $tVUS= +tWC{\UP: ^[_]̸d։ 3ĉD$`D$pVED$W|$pPu_^L$`3Y dt$tD$ WPD$PV[D$j`Pφ$_^3 dVt$3$0:(? u @r^3^̋T$(@ $; uH;Jt =@ |3ø̃=t$t$V3Vt$3$0:(? u+@rVvt^t$ V3^Ã^SUVWL$YQq N N N N  ڋ3ȁ33ً3Ё̋3ʋ33Ӂ̋33ً3ȁUUUU33ً3ˁ333ȁUUUU33ًȋ   H  %L$9t   %ȁЁ ȁ ρ с ȁC   B ? A  @ ́ ы́ ?L$ ЈT$=T<>DTD<= L$T$=TL$ ЈT$>T<@D.̸0l 3ĉD$,D$8$D$@D$D$DD$D$HD$D$LD$ SUVWxl$`׉l$|$$u JB B B ȉ\$BL$4JT$4 Ȉ\$4 шD$5D$6D$7D$9D$:D$;D$LT$T$8L$l$D+͉L$3HD$Ludt$,D$t$$t$0PD\$(T$D$5ËL$D$6D$7D$9D$:G\$4T$8D$;D44F2E)ED$Lx|$$t4D$0G_WGGWD$_0^][L$,3j 0ËL$<_u^][3j 0̸j V395u#jlhhI h@zh u^YË u jqhhI h@Mhȃ tЋu&jvhhI h@#hЃ t SW=t`\$;}(WPt$ j 5lj5_[^YË5SPt$ `j +5=_[^YËD$@0 ;O‰D$ +P1Pt$1  uӃ8t _[3^YÅ~} 3CK C @%3U}oF,~>+P;Pt$ 1  u0 8t]_[3^YÅ~;|‹|$jt$,t$,V;}J(q5St PW5t$$i =+5]_[^Y;}:(q5St V5t$$h ]_[^Y(qt$,St ]_[^Y]_[^Y_[^Y̸(q̸&h 3ĉD$T$$S\$$T$Ul$$Vt$4t$y^][L$3g Ë u$jghI h@leȃ tT$ ,qW@~]33~@@t$+=@ROP.Pt$8JT$@;|ŋ_^][L$3 g ËÿAAY;}.SD$UP\g +PD$(P l$ C<jVt$t;LPPULPPU3~8-0 d$+PPt$01  u Ճ8u3;|ҋ_^][L$3f ËL$ _^][3e ̸(&f 3ĉD$$D$0$D$8D$D$4*"v[ L$SUVQi\$t$W|$$;LA A Љ|$$ A T$(A A 3D$;L$~i\$($1~A OAՋƻO3-sƋ3ҾD$t$ \$(\$T$(t k\$|$$@D$c_^][YVt$jVuV%uV^3^ht$ t$  ̸Y 3ĉ$$SVW$uAI AuA$GI 3 RtɈ@rsƄ@rD$P$PSVD$$PD$ P?L$$$$$Ƅ$$$L$$$$$2ɄEuBɄt uBɄt uBɄt uBɄt uBɄt uBɊJ  7F r$G _^[3W Ę̸&X SUVWD$DPZ B B B ؉L$JB ȋD$HP0 J \$BZ B B ؉t$HB ȋD$@ ك|$L\$SPjJ ؋t$4B|$0 B B B ȉl$D ыL$8T$DL$8AD$L؍ L$8GO G G G33T$ G ȉT$$G ȍD$$3L$D3L$jt$@L$0PZ-\$0 3\$HT$(3T$FFFVFFFL$LT$DAL$8D$8σ33wL$TyIAI AI AI iIAI AI A jt$@3D$,3|$ 33l$Pl$0|$4o,\$0 3\$HT$(3T$FFFVFFFt$@_FF^VFFV^][hՋ|$8\$0l$ B B BL$LJ BL$DJT$D  щT$Dl$4G@D$8؍<lj|$ C; C C 3sD$$C C C 3D$jt$@D$0D$,P+L$0 3L$L3L$T$(3T$D3T$MEEMψUEEUL$8֋t$HL$LT$D4|$ l$8l$t$8t$4L$LC S C C CL$83L$HL$$K C ȍD$$ jt$@T$P3T$PT$4*T$0O\$43T$X 3\$D3T$3\$w=$tIIIIIIIQL$8T$HD$@_^EEMUEEU]['  ̸VR D$PJSZU( B B B B W|$ ىl$ Vt$l$|BFN F F F F F ȃ^G33҃wPG$PNNFN FN FN VNFN FN FN jt$,D$33ˉT$PL$ 'T$\$ %^T$ L$t3AAQYAAAË% ˁ _] [Ë|rj P |$DD$6.&# {+#&{ {!!k#; [[jt$Uk {k̸H 3ĉ$$S$VW$ $Ph$PD$P uSD$WP D$ hPzE$hPhE$_^[3G ̸G 3ĉ$$ VW$$Ph$PD$P) uD$WPD$hPD$hPD$_^3 G ̸6G Vt$FV F F FL$N F ȍD$^t$ ʃ|$L$Pt?T$ $ BBJL$JBBJ̋D$S\$Ul$VW;ODž ;O~)\$Ӌ\$ RJNu\$T=}"+ ʁJ @=|E+D$4#J tT$Dv3J Ouꍳ@S~JvR ȁNOu_^][̸fE |$,SUVW-t$8l$0|$,\$(FN F F F ȉT$F F ȃL$D$DHD$DL|_^][̸% Vt$FV F F FL$N F ȍD$^t$ ʃ|$L$PtT$ $BBJL$BBBJ̸0\ ̸6$ |$$D$ SUl$V0WD$L$ +T$,L$$D$4M ZSt$( C C CL$K C ȍD$ PL$L$T$,CKL$CCCD$4KL$$2AFD$4L$$7D$0_0^][ÅD$ T$,D$4D$D$$M ZSt$( C C CL$K C ȍD$ PL$L$T$,CKL$CCCD$$K@D$$ 2ȋD$4F@D$4D$$1D$0_0^][̸(" 3ĉD$$D$0$D$8D$D$>ht$ t$ t$ t$ t$ t$ t$ ; ht$ t$ t$ t$ t$ t$ t$ 9 ht$ t$ t$ t$ t$ t$ t$ : ht$ t$ t$ t$ t$ t$ t$ z* [̸ f SUVt$W|$(VF N _x F  F  F ȉT$ F3ڋW|3 F 3щL$ʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( 3 (} F F F ؍3VF Љ\$(F_pl$(3 F 3щT$Wtt$33֋ʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_h3 (} T$ 3ЋD$3T$ D$3ڋWl33Ћʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_`3 (} 3Wd3333֋ʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( 3(} \$(ڋˋ ( 3 ( 3 ( Ë_X3 (} T$ 3ЋD$3T$ D$3ڋW\33Ћʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_P3 (} 3WT3333֋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_H3 (} T$ 3ЋD$3T$ D$3ڋWL33Ћʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( 3(} \$(ڋˋ ( 3 ( 3 ( Ë_@3 (} 3WD3333֋ʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_83 (} T$ 3ЋD$3ډT$ W<33ӉD$3Ћʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_03 (} 3W43333֋ʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_(3 (} T$ 3ЋD$3T$ D$3ڋW,33Ћʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_ 3 (} 3W$3333֋ʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_3 (} T$ 3ЋD$3T$ 3ډD$W33Ћʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_3 (} 3W3333֋ʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_3 (} T$ 3ЋD$3T$ 3ډD$W 33Ћʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë3 (} 3t$W33݉l$(33֋ʋ ( 3 ( 3 ( 3 (} ىL$ˋ( 3( 3( Ë\$3(} ڋˋ ( 3 ( _3 ( Ë\$3 (} T$ 33ыL$ AAAAAQՋˆQ AA ֈA A A ^]YAQ[ ̸  SUVt$W|$(VF N  F  F  F ȉT$ F3ڋW3 F 3щL$ʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( 3 (} F F F ؍3VF Љ\$(F_l$(3 F 3щT$W t$33֋ʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_3 (} T$ 3ЋD$3T$ D$3ڋW33Ћʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_3 (} 3W3333֋ʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( 3(} \$(ڋˋ ( 3 ( 3 ( Ë_ 3 (} T$ 3ЋD$3T$ D$3ڋW$33Ћʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_(3 (} 3W,3333֋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_03 (} T$ 3ЋD$3T$ D$3ڋW433Ћʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( 3(} \$(ڋˋ ( 3 ( 3 ( Ë_83 (} 3W<3333֋ʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_@3 (} T$ 3ЋD$3ډT$ WD33ӉD$3Ћʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_H3 (} 3WL3333֋ʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_P3 (} T$ 3ЋD$3T$ D$3ڋWT33Ћʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_X3 (} 3W\3333֋ʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_`3 (} T$ 3ЋD$3T$ 3ډD$Wd33Ћʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_h3 (} 3Wl3333֋ʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_p3 (} T$ 3ЋD$3T$ 3ډD$Wt33Ћʋ ( 3 ( 3 ( 3 (} ىL$(ˋ( 3( 3( Ë\$(3(} ڋˋ ( 3 ( 3 ( Ë_x3 (} 3t$W|33݉l$(33֋ʋ ( 3 ( 3 ( 3 (} ىL$ˋ( 3( 3( Ë\$3(} ڋˋ ( 3 ( _3 ( Ë\$3 (} T$ 33ыL$ AAAAAQՋˆQ AA ֈA A A ^]YAQ[ ̸ SUVWL$)AqQ A A A A A A ЋA  A y  A T$AGa A +Ga ( 3 ( 3 ( ‹T$ 3 (} É  ( 3 ( 3 ( 3 (} JŋT$ 33֋݋ʋ+sn< ( 3 ( 3 ( ‹T$ 3 (} ÉJ ( 3 ( 3 ( Ë3 (} D$J "3D$3Nj+؉D$ׁxʋ ( 3 ( 3 ( ‹T$ 3 (} ÉJ ( 3 ( 3 ( 3 (} ƉJ33+\$42D42D׋ʋ ( 3 ( 3 ( ‹T$ 3 (} ÉJ ( 3 ( 3 ( Ë3 (} ljJT$33L$gd+сgdʋ ( 3 ( 3 ( ‹T$ 3 (} J  ( 3 ( 3 ( 3 (} ʼnJ$3L$3t$+߁99ыʋ ( 3 ( 3 ( ‹T$ 3 (} ÉJ( ( 3 ( 3 ( Ë3 (} ƉJ,3|$+뙑!r3ȉL$!rыʋ ( 3 ( 3 ( ‹T$ 3 (} ÉJ0 ( 3 ( 3 ( 3 (} ljJ43L$3l$+ށܼ1#Cыʋ ( 3 ( 3 ( ‹T$ 3 (} ÉJ8 ( 3 ( 3 ( Ë3 (} ʼnJ<3t$+3ȉL$bFсÞy7ʋ ( 3 ( 3 ( ‹T$ 3 (} ÉJ@ ( 3 ( 3 ( 3 (} ƉJD3L$3|$+݁$_^][3 ø S\$s3[YËD$Ul$ VWt$,|$Ut$,+SPW\$8 u_^][Y\$3Ʌ rmFU;w;s[Ƌփ++݉\$ŋ\$ l$ $o@ oL(fHoL o@fH;rϋl$(;s֍)++ъ 8@0HJut$$UUT$8D$( oE_D^][Y̸\ 3ĉD$XD$d3S\$tW|$tD$$$|$4\$,D$0L$ 9L$pFD$<+UVD$(D$E+CPt$D$0T$ o+L$pD$$WS"‰l$HS$D$D$PT$D $tD$3ЈT$T D$D$T2ЉT$3T$($|$E' Ċ_ Ȋۈ ċL$ t$)O Ë\$0+G D+|L$T$\$,​|$3‰WMu\$l$|$ND>tuu_^[̸H趡 3ĉD$DL$LD$XT$PS\$`L$D$s[L$D3> HqoD$,PPA D$4ЋD$p utT$(Ul$4Vt$~ t3Vt$WV u_^3[_^ ^[QSa-tVW+yWVS t_^C [VWS t_^C [̋L$ SUVt$WF;A} ƋȉL$^l$Q+T$C;EPU,L$$T$u_^][R]16]VSGOL$(t"tO@u uEt;t+ދvD3Ou_^E ][̸膙 D$S\$U@Vk+l$D$t$ y!hhH jdjsjd3^][W|$;oUW+ȃD$ tYL$$3ۋ? til$ vFD$$t;ۃ+D$$C;+ȉMu͋t$l$t$u _^]3[Ë NAuu;tLtHZ+׍O$D AFt+CAFtFtCAuNjT$jB ~ IuMjzuB _^][̸P S\$`3WT$K~9Tt|$hO~(9Tu hh` jkjkj3c_3[PCuGt T$u hh` jgjkjb3_[PÅuBWSD(y4D$`tSPN"tD$\t jP7'_[PUVt$tV},Vg+V\$0[+Vl$TO+D$dt$8D$(ut$t1+D$(W$%yH@ +SWVJ F St$p\$PUJ |$E VMB;KB;E PU(TFM;}EAF;|FE.A;E PU( MEEF]+ȉD$D$XEL$,‹T$D$LT$PE+D$TD$t$\$4Nx-VS>tϋ+L$D$D$GN;|$|ϋ\$8|$ xu&3~ d$t$$t$SSS0|tfF;|t$$t$VtDSS|l$8tD|$+D$D$ |$UVSt$8x3ɃEȉL$(l$$|$0uD$t P uUq D$,hhx jfjmjW3$_^][3, İUTS 3ʼnES]VWECEEEEuu܅u]{u48u-9s u(juƍe_^[M3脋 ]jue_^[M3a ]u Et}'_t}uSWt ~*2~Y~3ۃÍ]U˸]EM;OȋE‰EE= }@跊 ̉M#h.@hx Pmȃ Mu؋?+ȃ@jQM E3ɋU } ELEMEEEEEEMEĉEMM̉EDt9]؉]~# Eщ G;|u܋}MM%uGWPPEPx;UE x u1RPy uGWPu EPxuBE uuPEPjuGWPEPPrxSjuEuPUSjuEuP8uEWPPEPxdSjuEuPG}E~JuEWPEPEPwSuEuuPE@E;E|N3ɋƙU܅x#3Vu7NOXy}]܋]MSQuEuP x|33M~8IuEuPPPwtuVuMGN HM;|SQuEuP tBu}EWPEPPvt&yuEWPus3ɃEȉM}u}t WoEtuP݄Et P-u2Ee_^[M3 ]hhx jfj|jR3e_^[M3ކ ]̸ UW|$(3l$Gt!hhx jBjujOR_]S\$0K@D$0VuD$,3t$T$t$,t$W}D$uG{u)8u"9k ujt$,P^[_]jt$,8^[_]ÅuVt$,F^[_]Ë\$8SeSOSGS?D$D<4D$\$@t$St$8WVjL|$\$L$L$\$8tjVWt=tpSUEPWWst\SUWt$4otID$ ?6>t3St$8W|$ Wjt뼅tjt$,뷋\$8|$<u t UkSbD$$^[_]hhx jfjujN3[_]̸V 3ĉ$$S$D$$U$V@$\$(D$$l$D$ t3hhx jBj}j_N^][$3蘂 PD$ub~u78u0~ u*jS^][$3J jSk^][$3% WUUUD$ |$|$djbD$0Pf~ t$Vt$ :D$UP@ UVD$8PHf UVt$(W)ujSD$=~ t$>=~ t$,O~ t$3|$ED$~jUD$4PWWt$ [hwN;~9UgDdOUL$4Qt$tlPh0F;|Njt$WN|$$St$l$Vt$, u,uUD$4PSSSgNt$ý3D$9|$~?\$(NIx-VS% tϋ+L$D$D$GN;|$|ϋ\$,|$ xu#3~t$D$4PSSS*gtJF;|t$D$4PtlSSgt(t$+D$|$ t$D$$t$D$4Pfc$D$$_^][3] ̸ 3ĉ$$S$D$$U$W@$\$,D$(|$$l$D$ t3hIhx jBj~jJ_][$3~ ĨVP D$u<u$8u ujSajSOUUUD$ |$t$4 UWt$V&~ujSHD$=~ D$:=~ D$)O~ D$3|$ED$~hUWVVt$ $yL$ID$;~7U D4KUWt$tFL$F _3F^_3^S\$UVWC;sSD$D$K hD$@CD$@CD$@ C D$PT$H ͉8pƒ ȋD$_K^h][̋T$W|$O+BuI?Vx+0;u Iy3^_^H_̸č ̋L$S\$UVt$kyŋ+8uABxW|$~)8u(IDL;t;_^]H[^][_^][ÍKx+0;uσIy_^]3[̋T$Vt$W|$ LD;t ;_H^ÍNx+0;uIy_3^S\$ VW|$;_~KUSWt3ZtGF^G .]F _^[Ufi]_^[]_^3[ tWVsuVv_^3[_^[SVt$ W|$;~~(WV)؃u_^[Ët Qh~_^[̋D$=~h(h؎ jrjxjp83Vt$Fth,h؎ jijxjJ83^Wh/h؎ P_j ׉T$uh1h؎ jAjxj 83_^StUUn~*KMSs OWw ߋt$T$F]HtHt HuCGKO [_^Vt$F$tHF$^NFNWt VOu3DCeCu_^[Vt$V ;Vu}Shh hHg؃ u[^UWWsMuFD@9._]uFF ^^[^ËFDÃFF ^^[^Åuu FDFƒ FJN ^̋T$Vt$N A+ʃN t"IJuN@NHu^SUl$ ]t*VW>t VOu싛Du_^EEE ][SVt$ WF9Fu_t<@ hRh P*f؃ u_^[ËFtP6Sh ~t 6d~VD$_F^[̸&h D$SWD$xD$$XVt$,;VD$(t$D+PSt$8t$Vt$,Wt$Pt$XP(D$ ]t$t$HSt$t$-uF80u%HXtxu|$ PWu_^Ë|$ PWu_^À>-uxt@ _^̸W SUVWt$(3jzhL 4@Mbgfffظ98\$$@‰D$(PTTj{KhL Q|$,>T؃t$(@l$ }uf0} t-s}t@3D$;D$hʚ;UHD$}D$uwD$+ƃhh PVI>tF>u;|$t7l$wD$+ƃhl PV>tF>u;uыl$ |$j}hL jAjhj |$3t W+Qt U^utS Q3_^][_^][SUl$ 3ۋEujLhL hd V ][VjMhL PR t$ujOhL jAjijF ^][Ë9] t-V9]u0BW}OxIE΋%ut!Ȼ8  8 ByOyt$_^][̸FT S\$W3|$nd<-u D$CU-1 V3PՃt#F~D$8u W^]_3[YÁދL$D$ΉL$u^]_[YË8uBu^]_[YjW=;G PWm98B3+փ D3Nx5IlBm[,h uhʚ;Wo UW 33Ny΋O~QRuIOuG D$8tD$G D$^]_[Y_3[Y̸ R L$SU33ۉl$ <-uAl$ L$VW= 1 3P׃t)L$$F~D$ 8u S@_^]3[ Á܋D$ <.|$ \$u؉D$u_^][ jS=;C PSbh3~cދM3+|$$AЃ vAwAAwA3K G΋\$E|$k~M IuMk{uC D$ {tD$C _^][ ]3[ ̃=u"j j@hx jh(̋D$Ul$W39x tjht Uf t_3]ËD$9xujhd Uf u݋D$SXKVxD΋utj8 PU]f uD$yKy^[_]^[_3]Wz{PDbu_Vt$ jjjW\t$ W W^^_t$t$t$t$jt$t$t$t$jt$t$jQ t$t$t$t$jt$t$j ̃|$SW|$`EdD$  $UVWujt$^]_[ÍEPWzEPWeu~t$El$D$jjPVՃWV%x0WVV6 WVxWVV tfKtWVx3D$h5t$jjUVT$$t3KtWVy^]_[hh jqjzjK^]_3[hh jsjzj,3_[̸ M L$U3u*|$ 9l$$Qt$lE] }u 9l$ nASVqWyNFhNt$h SD$$J u"hh jAjjl_^[] ÍD$P0 L WD$$jPSW||$ uQ3~Gd$D$(jPD$(><*s>F;|t$D$,xtu OND$ 9l$0tL;t$$SWe ESWaIWG _^[] hh jvjjI3] ̸ K Ul$y"hh jwhj3] ËD$S\$W@ C ř<T$ |$B@;CPST$(u_[] VyME 2+͉D$(B\$(ljL$t$\$ u JIxPT$(9RIBy6rNx0T$(G\$< GNL$y\$ |$Pjt$0J D$0 HAωK^~QRuIK{uC _[] Vt$W|$;t.G F G@;F PVu_3^ËGFG@;F PVtS3U/9W~/3MmF[ ‹щC;w|t$t F][_^̸ I W|$y"hh jwhj3_ ËǙUV L$ yNFl$ +Ɖt$$D$E;SU\$$+σD$;t%M K ;C PSu [^]_ ÅttL$EU;+эL$Ku tTIO@Ju[^]B_ Ëjt"΍@L$X ֋t$(Muދt[^]_ jt$ G^]_ VW|$wuVt$F_^S\$3U/΃|+ȉL$;t";K QSu][_^ËG C DN t~"+d$L*RN NjD$]C[_^W|$ uG_Vt$ ~u WV`^_Ã~ t%WVF ~tg39N N ^_S3;^} ;ω Cu[^_Åt+F;u$@;F PVu[^_ËF<[^_̸F SUl$3ۅu][YW|$9_u_]3[YVU +VΉt$WWu ^_][YËWJT$x-U4VST$(ŋރ +؋ JT$y׋t$W~ |uJW^_][Y̸F S\$WfD$u[ËD$L$VpNx(W<$jS3 QPF NT$ȍy_^[Vt$WNtWT$uRV_^ËRQPPt)NA;N QVu_^ËNtF~t@~u Ft$Vwt8t$D$ v 6PP^hh jkjdj3^Vt$W>t`~tZ~u Ft$VtRD$tvP#t$D$v 6PP\#_^hh jkjdj_3^SUl$ VW uzhh j,@ uhh jAjfj_^][j,jVtC \$(SF TCtHFFPZ3#>uq~u\F\$tFt PScF~D$$tF(D$(tF$v 63\$ d$Sv 6vR uK %lutOtv 6uUhfh jqhju 8N(tV$tRSv vPPуSv vQQ?uut V3_^][Vt$tHt PFt P{Ft PkF t P[V=^̋D$Huhh jkjej 3t$ p D$ QPP̋L$D$ u"Huhh jkjejH 3t$p D$ QPPoVhh j,>> uhh jAjfj 3^Wj,jV@ D$ tPt,D$tPFt|$WF uV3_^GtHFFP`0_^̋D$Vt$W3tu9~tp~u~F~ u"9~tF ujjt$jjV1F u/t$v PPP4t8t$Fv PPPthh jkjgj ~ uF_^̸&? SUl$VWU3aUKUC t$WFt$UFMu8^~uEjUD$-u3ۍd$CSUt\$t$UU FID$t#9wu3̏ ̏ } D$tE  t؉D$$3SWuCSWxtSWW Ft#9uu3Ȅ \$\$\$ tu3u3}u3E#tۉ\$t$ WUU>Fu.Njp 9w0}uE8u} t3\$t$ E_^][Y̸< T$S\$(Ul$0VKt$Wzu;m|$0G u8u  UUUD$ UD$0wUD$,mUeUD$,[D$4|$,uD$USWt$ WSGWSxtSt$VD p|$jSW XUSWG |$,VW̩8USW|$@Wt USWVV jV|$USt$(t$ WUSVWWt$WVt$D$@ D$$}Pt$8gjjStPt$@SSt$82x%D$4@z{ SPPzEЃ D$4xut$$PD$4Ut$P uD$$@D$$RCthh jqjyj1D$WPP D$4USt$ PPmL$4yu8uy u hMt$V7~USuYt$V^~u"t$jVU_^][jt$D$#Vt$ t$ QD$xtUSPt$,D$ USt$PPTD$USt$PP8thL$ yu8u y t$8SQVt0~u 8u~ tUE;t$8SVVVuЋl$8D$;D$,P]3U_^][t$4Vt+O~t$8SVVtO|$8WSVVt$DT1D$WSVPP;D$ WSt$l$@&hhh jojyjhh jpjyjxt$jSVC jVF IUSVt$ t$,V-|$USVWt$W@hh jojyjOHu t^u8u  u3PVu?;t$,toV3_^][ÃuB8u;u u3U_^][jt$4PVj[h jpjyj&_^]3[S\$UVWS3SS tetat$W[tPt$VJt?Vo Wn yNjVWtPt$ES_^][̸4 D$$L$(D$@AS\$0UVWSSSt$ SSSD$0SD$8t$X D$ D$0*uD$jWCjS;t$DU1t$8VF } uVUxt$L$ AL$ :WVV trjUtcWV;yă~D$(u433hh0 jehjSD$_^][ ËH N @ 3G E D$S٬D$_^][ SVt$3WV1VtLD$t*L$V;uQWZ t-PQWyt|$Vt$ Wt$j+VP_^[SVt$WV谭V蚬؃t,t$StVt$Sjt$ E|$V_^[Vt$W|$;tQGPFPu_3^ÍGPFP̢tG,PF,P踢tӋG@F@GDFD_^Vt$t-FPFPF,Pܟ FHt V-^Vt$FPFPF,Pڣ FDF@FH^VhUhH jL u^ÍFP蔣FP苣F,P肣 FDF@FH^̸  S\$,U39ku]3[ VW|$ NFFtFFPW譖 tN_^[̋L$S3ۃ}jah` jjjpj3[Ul$ W}E E E G;tjgh` jhjpjM3_][Vt$u Vt/u ^ Ɖ^^_][ÃVWUEE u^_]3[É^ tVmHPVU ^_][̸LV 3ĉ$H$P$h$XD$0$\D$$$dD$ S$XU$hT$$tL$@l$HT$LD$<D$ u1hhx jfjvj63][$H3q LVWQ蒛U芛uujt$Drl$;UOƉD$P跢U衡UD$,藡UD$8荡t$ 艬${D$X|$ |$(D$TtD$*D$t$t$ P! ~ D$,4~ D$,"O~ D$,3ED$,~ D$.~O~3ED${ t$uVSxt$VSUjt݃{ujt$DD$DD$t$PxWSU|$8\$,~yt$t$UUl$0UK;~?\$SԟtSt$UPoVF;|ŋ|$$t$\$4{ uVSyl$Xt$l$\VSUjs݃{ujt$DD$Dt$t$WSUt$~ot$\$$t$UUSN;~9l$UٞDX|Ut$St`PzaF;|ˋt$t$3D$$t$3\$@t$,3|$<\$Hl$@GPt$8-D$LHD$HD$+D$,D$L+Ƌt$D$$ut$D$,t$PPPVt$L{xt$$t$Lt$|$HVWt$DUuFVWFtt$F;G PW胘u_^[ 39V~B;V|FGL$$U,WJl$T$;+ō,l$<uJT$l$K9tW+yMEL$+ȋD$(Nj1t +1BF< uT$l$3yNFNj1Et +1}L$(;T$El$;4t$ yIA +хt L$(C1)8tI0ƙyNFŋ1t +t1BL$(G<ut$^t$ ]N~QRuIN~uF _^[ SVt$WV3V؃t6Vt$ t$ SCt Vt$ St$ t$ EVF_^[SVt$3WV衘V苗t)Wt$ (tVWt$ t$ t$ NV_^[SVt$WVh hФ xPy؃tiWSV t.;*t$ St$ t$ t$ ESZ_^[hhФ jjhjS0_^[_^3[̸V W|$D$Gujt$'_YÃu 8ut$t$_YS\$ VSPS:t}Ul$$Ut$ V teWďx8SUVV! tEWt$$ptSUt$$VV\t OyVt$x3ɃEʉL$]S>D$^[_Y̸<V Wt$PD$<蔖|$TWzD$(WeЃT$VWMt$8W6|$S\$TSt$TV f~\SW詋JUV藎Wl$8苎{D$,|$;~ WV T$@6t$(B;}L$<+3|$\$4z;{ WSْT$~O3z|$L$ {;yWQ蘒T$$L$ \$~3|$L$ D$$yL$L$XO݋ #33ɉL$<~qD$8+ʍz)T$8L$HL$H9 \$< ڋL$XT$8t$(׋ T #3 ȋ‹T$OJL$<AL$<;|T$l$0|$Ml$0G\$L$ {";l$,}LT$$ŋl$,D$,D$@D$$D$4L$$T$@T$ T$4Ӌ D$ l$0t$(L$T$D$D$3ۅg O ;w ;L$GO ;w;D$O ;w D$;D$O ;w ;L$D$O ;w D$;%yH@T$ϋ|$+։T$H+ȋT$++T$D$Hh, V2VhD Ӂu"PS_^][L$83<~';tVS{_^][L$83u<;tR{| jS;u_^][L$83E<Ë3GFGFG F GFGFD$jPGPD$$PQ3Ƀ\$$D$D$(NL$L$,NL$ L$(ЉL$FD$F\$,V T$ӉV ϋNL$NŋFÉFϋ~IjФ PVV舦jh D$8VPj؍T$@߃#Nj## ȋAFAFA F AFAFt$FRuINuN _^][L$83t$ t$(US &8jjt$(t$0USK-#t$ t$(US7)t$ t$(US*t$,US^ vt$0)ixhhȶ hF<tWvF@j Pyv@FWvvt$ t$<@VЃtpVe͙+L$,QV+_̓ +ȅ~|$(3ʃ|$l$&hhȶ jv hhȶ jAjhjWVkWktUSS, ][D$ _^ Ð1=Z=k=B≠(6SD$D$D$ k؅7UVWSUlS?kSD$ 5kt$Tvdhrhȶ PD$,g|$D$LHtCt*thhȶ jvnt$gSD$4gvD$8`hhȶ SkL$,|$(D$;~hhȶ jljgjQPt$(X vt$0cx hhȶ hjgj豝F<|$tWvF@j Ppv@FWvv@t$ t$<Ѓt_|$,u$D$(< tD$(PvP6 t2Ut$, YOttt`tLhhȶ jvjgjt$VXeVetSUU. ][_^SPUSt$4;SPUSt$4$ SPUSt$4Fyhhȶ jrjgj舜hhȶ jAjgjnd̸,SUD$D$D$e؅VWSfSdSD$ dt$XD$$v^hhȶ <WL$0D$x|$meD$@;~hhȶ jlXQPt$L{V Nvt$`xhhȶ hFND$(D$$D$(AD$,AD$0A D$4ID$8 ȃL$8FD$$tSvF@j PLv@FSvt$$t$0@t$$VЃu#FSVt$t$$@VЃD$tSPt$(V藍t$Vt$UȃD$PHwk$hHWQVWt$Xk2jjWQVWt$`&WQVWt$X WQVWt$X yPhZhȶ jrjejy6hVhȶ jvjej_hhȶ jAjejEt$SaSatWVVn _^][,Ë][,ÐGGGG̸vSUVW$WD$ bWaWaWD$$a$D$F<D$HPYN\$LD$LAD$PAD$TA D$XID$\ ȍD$$PL$`~YN T$(T$D$ AD$$AD$(A D$,ID$0 ȃL$0 F ^D$F<t3WSFDj PзWt$FHj P起F<tWvF@j P蕷F<$Wv u8KD${u 8u{ t%|$Wjt$pG |$Yjjt$p v vLy NF FN Uv vv[KTPvS( 1TPv W' UW|$ SWZjF<u7T$D$GD$ GD$$G D$(OD$, ȃL$,URvv襍F<u:N|$0D$0AD$4AD$8A D$ uF t P:V3_^ËF@t.VЃu$F t PWVjV趸3_^̋D$,̃D$0Vt$F@ tVЃF tP螸F D$ F@tVЃ^̋D$h h j 8jPe3Ƀ̸06VW|$P33D$G<@t*G@,t Wt$Pt$Pt$Pt$Pt$PЃ_^0S\$@ru=|$H$t!j]h8 hjujB3[_^0ËD$DD$T$D$ D$$SD$cL$L$ujfh8 jujuj3[_^09p ujkh8 jtjujˆ3[_^0ÍD$D$t$ AD$,D$D$DD$4D$HD$,D$jPhD$TUWTE9D$X~jzh8 jpjujZ3][_^0ÃrtUj~Eh8 Ph u"hh8 jAjuj3][_^0ÍD$t$PD$PD$jWt$XPt$hRȃ3 D$TrtMQV觷V ][_^0̋L$A<@tA@0tL$Qt$t$jjt$ t$ t$  ̸S\$,VS3SL$0;t#hh8 jwhj%3^[Ul$ru:D$$t2jSPt$8QQȃ ]^3[ËD$(]^[Whh8 Q u%hh8 jAhj褄_]^[Ët$$ruB$t=hh8 hhjn3t$4WOW詴 _]^[jSWt$t"B:Fu1tB:Fu$tB:FuUD$Wl$)hhP jhjxj~U0l$3SW辰W _^][5xsEtuhxsP3{hxuj'{S\$W|$G;~jKh jnjlj]~3_[ËD$ +VpWFhV St$(F>P^_[S\$ Ul$C;~hh jnjmj}3][Vt$+݃SfVY^]3[W3~$I>ujVX~'>tGF;|Ut$ FVT _^][_^]3[Vt$F9D$D$8HN3҅~$9u$BA;|;uuIjVU~7>tGF;|FUt$ F V  _^][_^]3[Vt$ }jph jojrjz^ÍF9D$D$8PN3Ʌ~ BtA;|;tt|o<u@|uhh jsjrjy^Ã+;t$ ~hh jmjrjny^VRt$- ^hh jqjrj?y^jth jkjrj%y^̋D$L$;~jEh jnjkjx3}jJh jzjkjx3Pt$t$ 薭 S\$ W|$;~jWh jmjojx_[Vt$+PjVMWt$(+V8^_[̸t֬ 3ĉD$pD$xS$D$$UD$D$ VP\$3D$֧S.l$W$3ۅÈ\$D$D$jt$ D$D$0P^ $D$,t$(P jD$PD$0PҤ tjj;D$PD$0Pb tJ1D$DPD$0PH t0+PD$DPD$P l$ C;,D$_D$$Pf$D$^][3.tjjt$ t$ t$ t$ t$ t$  ̸h& 3ĉD$dD$l$S\$|U$VW$D$O$D$$$\$,D$0L$u ȉD$QDl$,9,σt$6+ȉL$ I;~-j:h jnhju3_^][L$d37h@;}-j@h jxhju3_^][L$d3hËD$jt$XjލhS$l$(t$D\$4SD$ +D$,HP3jP9L$8++Qt$4P@VUP jU+h WU l$u-jWh jAhju3_^][L$d3?ht$(Vt$WU3ۅT$ EJ;w;so%yH@ϋ++t$$ul$$t$ t$T$ o@ oL(fHo  o@fH;|Ћl$T$;}$ l$++Ӎ$)I0AJul$t$(D$8Wt$$VP3҅\$ rvKD43;wD$4;sa%yH@΍|$4+ȍl$D++l$l$\$o @ oLfHo@oLfH;|ϋ\$;}|$4+ +9I0ANuU藣_^][L$d3耧hUvL$t3_^][3bhjjt$$t$$t$$t$$t$$t$$t$$ $̸V 3ĉ$$$S$D$,$UD$ 3틄$V$D$03\$L$D$(D$W$u ȉD$QD|$4Q(|$(9$;};h+Kh S\$#hh VD$ VjP虦D$(+t$,Pt$$V~T$8t$HSrH#ȍBPD$@D$`WPL$@%,3҅ |F\$<;؍L<;\$w;sc%yH@ϋ+ȍD$<+|$$|$(\$$o@ oLfHoL o@fH;|ϋ\$;}D$<+L$<B0;|t$0D$@WPSU_3 uL$UӍA;w;s_%yH@L$)l$+ЃʼnL$$L$|$$o@ oLfHo 7 o@fH;|Ћ|$(;}|$ .++֊9I0AJu|$(jt$$jP$t$H W$PU豚T$ H##3ɉT$L$;}V4/ыƃP##ʋ#G#D$, L$D$, ʋT$F#ƉL$ #ЉT$;|t-D$,@+9$};hh jmhjohh jyhjn0VPt$@蹣 hh jAhjnt U D$ t P$_^][3ݢİ̸ VW|$ SUR0K0D$ B0D$90D$00D$g7 |$ |$|$|$O9qu#90uy ujQh4 jej{j3mGx~ujUh4 jej{j3zmjjjw9ytj[h4 hj{j3Jmjjjw ytjah4 hj{j3mUw wSj9u wS2*tjkh4 jj{j3lo2PwS% tY2Pw t$(  tUt$$St$ 8tUt$$St$$pkrUt$t$jt$ SUt$wwSG7{u 8u{ thh4 j{j{j3l$((,1PwS@ USwt$,jEw$t$$(thh4 j|j{j3k(1Pw S pUSwt$,jUw(t$$(thh4 j}j{j3.kUww Sjw,SJ(t(hh4 3j~ jKh4 jAj{jjSe+t$$\+t$S+t$ J+t$(A+UK3][_^ j>h4 hj{jj3_^ jphX hhjXjjxhX hhj8jhhX hhjjhhX hhji̸wt$jt$t$t$t$̸,&D$@L$uh`Pjhhjt$ [^ù Š:utX:Yuu3uNVܫu#hht hhjz5[3^Pjh hjt$ [^ø$  :utJ:Huu3D$PVGtWVt$h hjt$$# V4e_[^̋D$tdL$u!hht hhj43Ãu5PNPu!hht hhjj43øVt$~ t^ËD$ hht p(POf3ɉF ^Vt$FPtP&FPF< F<^Vt$FPtP&F<FP F~u S^[_]̋D$p̸ eS3U9\$l$9\$ Vt$(VVVD$ VD$D$tZPUt$R tCl$Pt$(U7 t(VUt$l$ U tVUt$$S=0V^][ ]3[ Vt$F<@(t t$ t$ t$ t$ t$ t$ VЃ^Á|$ W|!WBt$(t$(t$(jt$,t$,WPt$4V ,_^̸d 3ĉ$$$U$V$D$X$D$L$D$T$l$(T$8D$PD$<D$,D$4W$ |$t$t t_^3]$3cÅuT$SW|$ W; 't$Wx#|$Wjt$j2t$(6(|$,G|$,Ll$0|$LjjWp3 Pt$t$ l$Ut$$t$jS~jt$hUt$t$0G Ot$(Ut$ St$$t$8Q-L$$yuP8uIy uCTPD$PPx t$(D$@Ut$ St$$t$8ujjWl2 \$`D$DIC t PCt PCt Pt$gt$$C [t$,CO C{ tB{tWV+ t$(t$@3Pt$j2t$41x hhP jqKD$Ptt$SPY t$(jjV- 0jjV- L$83$3H|$Xt$\tWjt$0- jt$H3L$3AD$lx d$uHyjt$ $jPQSqNUt$<$P mVUU ZD$DUPP躼 CL$8GL$D$l;|$\gt$\t$x|$HW=W|$xWt$WWQ t$$U t$UWt$ljпPt$dU蕼 UW|$(W~ t{t$WMx#|$(Wjt$j2t$0.uG|$X$G|$X;0t$<hihP jpj~j D$D"t SRD$,9D$Pt PR\$tSSD$@_^][t PC?D$lPO$D$ 3VjjW + y|$Xt$8Pt$$t$Z St$t$(t$jU[4$}jt$; D$4t$t$$t$Hd? $L$4$jt$ $$P$L t$$t$0PN j$hL PjN cj$P$PHN Aj$P$PK t$$VP t$@t$t$(Ut$$t$\L$HyuY8uRy uL$y#PD$PP $L$4AL$4xzjjt$0 ) bt$Tl$ D$0F ;tt PmU$F Fl$$;tt PIUFFt P-t$HF~ t+~t%t!D$ht8L$pD$4D$0̋L$A<@,tL$L$̸SSU3m؉\$VW|$,wu IwV'9nt_u؅G(uDD$PT$ND$FD$FD$F D$ D$$ ȃL$$t$w RwSTt w_tu S\$tu VS_^][VW|$ EG tP&FtgGtP?FwF$tEGtPF t.GtPFtGtPFuVOC_3^_^Vt$hh jF0jPBF<@tVЃF@t PMF4PVj5lF t PFt PFt PFt PFt PF t PF$t PuVL^̡0u b0̃D$4kt$t$t$t$t$jElj Vhh jD.N uhh jAjgj 3^á0u 0W|$ F^]t$h R/h t$t$t$芽h t$t$t$jh t$t$t$Jh t$t$t$*h t$ t$ N h t$ t$ . h t$ t$  h t$ t$  ̋D$Ht$Ht Phhh jejkj 3_[(̸<fEVt$PW~ rFg~]UP't2t*t"hOh jfjqj u]_^ u'h&h jAj}j Vx[^_Ul$jhD U=W u9t$ W6h U賙t t$ Wvh U虙EW<]V [^_t$Wt$襓 ^_̸@D$HV?$|$D$PD$Pjt$(pD$$tXtRP"tCt$%PD$ VP.t'jjt$ Pt$:P^Ã^Ã|$D$PD$Pjjt$,ID$(tˋtP!tt$%PD$VP-tjjt$: Pt$O^ËD$^ËD$^ø^Ë̸>t$ D$PD$PD$ Pj|RuVWt$D$PD$PjND$u?L$AD$D$1Pj5 ulj\h jhjuj 3_^Ãt"tjfh jijuj 3_^ujbh jAjuj 3_^t$D$ Pj  ujkh jhjuj e -jWFu0jph jljuj < Wt V_3^WhVjtt$0_^̸v=D$ SV3D$Wx9ptx9w ts9wtn9wti99u=hh jAjvj D$ t P8t V8_^3[YÍFPWh뮻D$ GPWhPt$VSjttPt$(GQq_^[Y̸<SUl$,D$VWUPD$3PD$3PW3Vu_^][t$ D$PD$$Pj.LD$ 80t$uD$Pj؃ SojSjSD$4L$49uEIL$|$EL$E81p_D$(D$Pj ~u*VE5t$D$,Pj|$L$AD$(D$(1Pj jVGuhh jmGuhh jAzuhh jAjsj AcUw www*uhh jmjsj 0Wjtt$8 %hh jhjsj 3W3UhthS_^][V4_^][̸:SVt$W3|$ F9x5uh+h jAGPvh1h jA|GFjp؃uh:h jmQD$ PS0S3 Vt$Wjjjt$Pt$,Tt"_^[Yh$h jejtj D$ t P4t W4_^3[Y̋D$pTËD$@p ̋D$@tx txt xt3øSW|$Gp O؃u_[Vt$F@ t PnFX Gp؃t-F@t PAFXGpu^_3[ËF@t PF^x_[Vt$ W|$ Fp Gp u8FpGpmu FpGpUu_^_3^̋D$@pD$ @p'@̋D$ptYt$ t$ j uhh j jwj 3Pjtt$ s ̋D$t$p̋D$jt$pt$̋D$jt$pt$z̋D$jt$pt$Zt$ t$ j uhh j jzj 3Pjtt$ 裌 ̸&6D$SUVt$3W3\$u nNl$3l$~N3ɉL$(u D$ , 8 EʉL$ F tPEFtP;BFtPj;BtUL;BD$(tP*;BhG h P2 u"hh jAjhj e_^][Ë\$l$$t:hUSF v Pt$(hH SzUWt$hX SQtjL$(UWQh` S8tQUWv hh S!t:UWvhp S t#UWvhx S3ɃEʉL$W/D$_^][jTh j1 uËL$@@@A A A$jTh jB1Ѓ tRL$B BBBA D$QA$HABABAB3̋D$@t D$.̋D$VH@pAt P@VL$ Qt$t$$t$$P^~L$ D$̋D$VH@pAt P%@Vt$t$t$$t$$P^̋D$VWxD$=H 8$$t$V@tfVttXVBtJV=t:Vv=t*Vf=tVV=t hw_^ËD$O_^hh hjxj _^ËD$=|_^-t]Huًt$V@t=V=t-V=thh jjjxj 3_^Éw_^ËD$=t=tt =^G_^ËZIűL$ Sd$:utX:Zuu3u$t$1 jPhjjtt$ [ú, :utX:Zuu3u$t$1 jPhjjtt$ [ø@ :utQ:Puu3u#t$xqPjhjjtt$ S[ø[̸ /D$SVWxXtP|$Pi3u_^[ Wjjjjjss3V(Vtjtt$(蒅 _^[ A_^[ Vt$~uh h jkjyj `3^4tW|$PjtW2vWIu_^w_^Wڈt2t$ Wڊt!Vjt$Wt$肉Wʆ^_3_VYP@ujHhP jjij 3^SWt$jjjV;Jt8t$WJt'jt$WVW>V<_[^V3<_[^Wt0t$ WtVjjWt$4W܅^_3_VXP?ujWhP jjej 3^SWt$jjjV":jt6t$Wjt%jjWV踇W`V<_[^V3;_[^5XyuhXyPhzj̋L$tRT$tJ@uhh@ jljlj%3RQЃu5hh@ jjjlj%3h h@ jCjlj%3̋L$tRT$tJ@ uhh@ jljmj%r3RQЃu5hh@ jjjmj%L3hh@ jCjmj%13̋L$uhh@ jCj~j%3Vt$ u#q uhh@ joj~j%3^A WuAu @t VQЋud΍QAu+hh@ AP( uhh@ jAj~j%n3_^Ë΍QAu+ʍAPVW5 _^̋L$uh(h@ jCjnj%#ËT$HtMHt@Ht3t@t T$L$h<h@ jljnj%ËD$ A 3ËD$ A 3ËA Vt$uhh@ jCjoj%3^hh@ jFjP$@t&VЃuhh@ jkjoj%Q3^Ë@$t&VЃuhh@ jfjoj%"3^vcF t PS%F$t PC%V:%^á4̋D$uhRh@ jCjj%3Ë@ ̋D$uhh@ jChj%3Ë@$̡4uB@,uhh@ jlhj%C3Vt$W3u;t$Kuhh@ jAjpj%3_^ËD$F ~ thh@ jneD$tPVuhh@ jpA~ uhh@ jo-@uhh@ jlVЃu*hh@ jgjpj%gt V_3^_^̋L$3Vt/t$ t'A uAu @t t$VQЋЃ ^hvh@ jChj%3^j ̃=4u 4Vjjh@ j($ ujlh@ jAjqj%3^WFfF VFujsh@ jAjqj%]V"3^ËD$FD4@ tVЃuvqVk"3^̡4u@(uhh@ jlhj%̋D$4Vt$W|$~$t hah@ jnhj%3_^ËύQAuS+heh@ AP#؃ u!hgh@ jAhj%=3[_^ËύQAu+ʍAPWS0F t P[!^ [_^h]h@ jChj%3_^̋T$L$ ̋L$uhFh@ jCjzj%3ËT$ tAD$A̋D$uhh@ jCjrj%c3hh@ jjP̸x{k SUl$ VW3VUuhh jojxj%3_^][W<0 ؅u,hh jgjxj%h Wh js$Rhh j! uhh jAVu۲u@hh jijxj%OWt VtS@0 _^]3[É}$_^][Vt$uhh jCjyj%3^vӱ}^Wv˱uhh jhjyj%3_^7@0 u&hh jkjyj%Wv3_^W_^Vt$W|$v.}hh jijwj%!3_^vHPvw uhh jhjwj%3_^W00 uIhh jjjwj%h Wh j$3_^hh jCjwj%3_^Vt$W|$vN}hh jijvj%A3_^v!HPv藱 uhh jhjvj% 3_^W00 uIhh jjjvj%h Wh j$3_^hh jCjvj%3_^SVW|$Nd$Fu1 +h WӃu+h WӃuh WӃu XhLF 3ۍFhOh Pb uhQh jmj}j%3_^[Wth V1  _^[h V1  _^[SUVt$3W3uyt$u"hh jChj%3_^][Ë΍QAu+hh AP uhh jA뱋+ΊvD1u$l$uQ΍QAu+h h APN uhh jAX+ΊvD1ujVt$V uhh jAjUVn؃ u(h!h jAhj%W3_^][Ã?uuCGCGC G GuCGCG<\t3iD$D$$PWT$ uW0 V@0 3ASt$<Ջ؅u$D$PWT$\$uW0 V@0 3W0 V@0 Ë$@_]^[3 4̸{̸&S\$3U3u#hh jChj%p3][9tC9ku9ku9k t 9CtC @C9kt 9ku9k t@C9kt9k t@C$uhh jqVh@h P+ t$u$hh jAhj%3^][Ë 0 9+t=f f FFs3Pыk {u {u{ t.\Cts PVыk .:EKS+L$ W;~dI3T$+tt /t @G;r|$D$+VPD$(P0 D$,w t$(\ƋKES+;KS+L$;~]3T$+tt /t @G;r|$D$+VPD$(P0 D$,w t$(\ƋKES+;s$t$$s .P0 C$ _(^][SVt$ޅu h:h johj%,3^[WhAh j(B u!hCh jAhj%3_^[WGfG <\u8Ft D$_^][ ̸SVt$D$vݞ='~hh jgjfj>^[YW菥UWW~uhh jdFt'WvF jPD$FuNIttD$ Pt$ V8 tF|$ u?t$FDWvv@ t$,UVЃuhh jt$URhh jfjfjVW譣W]_^[Y̋L$ yu+D$@t!t$t$t$t$0t$t$t$t$t$Qt$Q~̋D$H̋D$@ t P̸{̋D$ HDD$ AS\$VW|$Wt$GDS@Ћ ~9w֜<+~V SQ0 WjS7_^[̋D$HDD$AVt$hh4 jF8jPFD@tVЃFHt PT Fhh\ jAjmjD$t Pt V_^]3[YÁ{ FPWuhjwtD$PW肚W芓  hfC Ut$Vj0gPt$,:O_^][Y̸vVWt$(D$3PD$3PD$$PVu_^St$D$$PD$Pj$|$t$D$ Pj& T$ \$(J{ L$ PD$Pju tNjWjFuhh\ jj:Vt9C V0SYW[_^hh\ jrjnjVW3[_^̸FSUWD$ &uh h\ jAjoj\$GP{ KQuhGCjpuhh\ jjjoj @VD$PUOUC Vt$Wjj0@Pt$0#^u%D$ t Pt W_]3[Y_][YVt$t$ t$j~ u uhAh\ jjkj`3^PF 0V=X ^̋D$x Hu L$L$^̋D$pDËD$@pqVt$W|$GpFpuAGp Fp u)~ uGp$Fp$̉u_^_3^̋L$3y PD$qp0 ̋D$@txt x t3øVt$ W|$ VW/u_^ËGpFp4@_^̋D$jt$t$pt$Vtjt$ V u V3^Ë^jjjt$t$≠VW|$W%t^V[uYPPPD$PD$PWOt7D$t/L$ t'QPV u h)h\ jqjuj_3^WVTu h/h\ jrjuj3_^_^̸$6Ul$,V3WUt$t$$t$($u_^]$SW蔖jj؍D$$jPD$(PU,Nt$D$0jjPj9D$,Cjp؃D$PSFSD$V譚VUt)Wht$(C _[^ u _[3^ Sv6WPWtjt$(;C _[^ *_[^ Vt$~uhh jkjqj3^$tW|$P0WBvWCu_^w_^̸6D$ SVXp"@ @[HF L$ <uCD$SuL$ ^[QPȃ x>D$^[<uЋN4~$|$tUl$ 9Mt 3]^[WSD$.hh PD$, tUSt$WF\$( ~/v(v0v,v$SWut$< tF4ED$SWuW D$_]^[hh jljpj[^3[SUW|$_ oD$~_]3[V D$u=Mمu=|88Gu t$D$jjjjjUSPVʅ(%u+t$D$jjjjjjUSPVC,~^_][V?^_]3[WPTujGh jjejY3_Vt$ jjjWt$ WW^_VJtGh Zuh0 FMuh F @u F$~tt ~ t^V3^VtGhD thl FthX F t F$~tt ~ t^V`3^VtGh th Fth F t F$~tt ~ t^V3^̸p 3ĉD$l$@D$|S$Ul$|D$$V$D$D$ v^]3[L$l3pWPiD$(PW$D$(V$VSPD$,PG D$ jt$D$,P$D$4t$(PIL$t$ YAAD$(t$PP tWj;D$(UP t;+jt$D$,PCb$D$4t$(Pr3ۋL$_t QD$ PL$|^][3pÍD$@PD$,P. tVD$@PU D$HWP ̸4L$L@0T$D@ D$D$,}D$D$@D$ D$D$D$HD$D$ D$D$tD$,D$$D$(D$0L$$3Vt$Vu_^[S\$t)V3tWvF >V?u_^[W|$tI?tDL$T$Vt$I9pu 9P u9Ht ?u^_Ë0p@ 77^_̋D$Vt!L$T$t$ 9pu 9P u9Ht u3^Ë@^Ul$u3]ËES\$Vt$ W|$ t9Xu 9x u9ptIu|$t2hBh jȃ t=D$AYy qEM_^[]h9h jlhj蝮_^[3]̋L$@$uhh jBhjk3ÉL$Vt$AuA tVЃFDPF4tt PW~t'A0uA,tWЃjDWW) FPjFPjF<_tv@Pv< hVV ^̸S\$UW|$ 3 @;At _][ËG0t K0t;uVt$,uvtVvVuVD$4uVD$ uVD$0uVD$t5u,tq!u+_][^F4ttPldž{t/~uVm Ftsvu_][3^ËFtPFCPFPit΍CPFPitC0F0C4F4C8F8{<FPFDdžFggFP^gF0F4F8F<F@GVЃ uVH3^_Ë^_̋D$yxu D${@I|tD$̋L$A43D$%1A4̋L$@uhh jBhjk3ÉL$̋L$@uhh jBjmj.3ÉL$̋D$L$H0̃|$uh)h jCjoj3Vt$~uVFtUt$ v'tBD$tPFP.du^ÍFjPiD$tPFPdu3^ÍFjPhVv ^̋D$L$H8Vt$WF3Vt$ ;th|h jejtj3^t$t$t$VQ҃^̋L$P`uhh jBhj˟3Vt$ ;thh jehj褟3^t$VQ҃ ^ËL$Pduhh jBjvjn3Vt$ ;thh jejvjJ3^VQ҃^̋L$Phuhh jBjwj3Vt$ ;thh jejwj3^t$VQ҃ ^̋L$Ppuhh jBjxj讞3Vt$ ;thh jejxj芞3^t$VQ҃ ^̸D$L$$L$t t3ɋT$@xu"t$D$PD$PQt$ t$ R.YVt$ t$Vt$ VQt$$t$$RЃ^YW|$uhh jCjyjҝ3_Ëx(uhh jBjyj讝3_Vhh jD uhh jAjyjw3^_ËV@(ЃuV3^_Ë^_̋L$P3Vt$ ;thXh jej|j3^t$t$t$VQ҃^̋L$P8uhh jBjjΛ3Vt$ ;th!h jejj誛3^VQ҃^S\$UV3ntu!hh jBhjh3^][ËT$3W|$t ;0uA;rt$ WRSՃ_^][hh jehj3_^][̋L$@xu L$+L$SVWHdt$3F4tYtP跷tI%t-SNQPp u~t Sc_^[Vt$FHP[FtPy[Pm[ dž^Vt$FHPWFtPV^D$VVt$ W|$ FHPGHPYYu_3^ÍFtPGtP@Yt獆PP&Yt͋_^̸SUW|$3W3[A9_8-Vt$(ubu^_][YVcVaD$\$WCHPXCHjP\VWt$0t$$uCttVt$PSу t$P)XtjVWt$,P@utQtVPPSуt2|$jW^tCHPWU@3V`t U`^_][Yhh jghj3_][Y̸vL$ Vt$ W3D$tFHPQDWu_^YS\$ Ul$ u9t]D$(u`D$(u][_^YÅtPFtPUVЃtYtMt$(PSVЃt7-tFtPUVt-tPSVtD$t W_D$][_^YËD$HD$`YfSVt$3W|$GHD$u1`؋u$h*h jAhj虖3_^[UVf`VP_VH_VD$ >_VD$44_VD$,*_Gtt9VPUWуVPt$WЃ|$.PUU|$PWdU}u Vt$ Ut$,qqtzVt$ Ut$,t$$pt`jt$t$(Q~ tJVt$ W|$ W*qt3jW;t$Vt$ Wt$,Umt }t3t V]t S]]_^[Vt$FP"VFPVF,PV F@^Vt$FPBUFP9UF,^D$)UVt$ W|$ FPGPSu_3^ÍFPGPStF,PG,PStӋF@G@_^̋D$j@@,PX̸SVt$$3ۅuU]؋u^[YËL$Ul$W|$t:VGHPUQRxptVEPPWуL$$t:VGHPUQR6ptVEPPWуT$(t{VGHPM,RQotl}0M,u8u }8u3D$,l$l$t'tt VQWЃ VQQWT$ tD$,E@3t Se[_]^[YSUVW|$339\$(u[ޅu_^][ËT$t D$SPRWЃT$ tD$SPRWЃtzT$$tmD$,SPRWЃtVOL$|$tGPQtQtDL$ tGPQ[Qt+L$$tG,PQBQtt VLZ_^][̃|$ t*|$t#t$)WPt$t$t$t$3hh jChjW3̸S\$W|$SWD$t#h$h jjhj3_[Vt$0uUZD$u^_[UVZVYVYVD$,YVD$$YD$tt6VC,PUWуu)3VXD$]t PY^_[Ík,}E8} L$,t9tVCPQW҃tT$0JCVPRWЃ)tCPQtOUL$0 CPQSOVGHPUl$(UKu hWh jhj蜏VuUt$WGHPUt$*kT$,t CVt$PRWЃ|$0t_VuUt$l$ UWGHPUt$l$$Ut @u8t$@G,PD$$PPUT$$tt$@Ct$ Pt$,UT$$tcCD${@uVt$t$$St$(Vt$9k@uhh jDjfjVGt WH^_][Y_][Y̸Ul$ D$D$uE]VW|$0uHt$u_^]SWHWGWG D$>6hh Pȃ L$3t@L$F;rD$0t$(x0t ,P1> t W1VЃ j1BD$vaD$L$0+ȉL$ h)x0t,WPuuVЃuu=tSL$A;L$,L$L$ rl$,WFHPD$tSg}xh%h jhj}3W FD$ t P8FL$t/\$,3tItPc:L$F;rQ豭[_^]Ët&WSSVЃtWSSVЃqML$ L$D$0x0teWS1t$$VЃ1D$0W,PSSVЃ D$0t$,P*<L$L$MuT$0x0t,SP;T$0D$,3ɉL$$,}0M,WQSVЃvEWSPPVЃYM,WQSSVЃ<EWSPPVЃE,t WPVу jP/@D$,L$T$0E@AL$;4t$D$HPt$t$t$Vt$D$HPt$t$V̸ Vt$Vdždž^SUVt$3ۋtP跗tP>;l$ uC؋u^][Wt-Ut$WE u>hhT jhjVz3t SBt W*_^][K߅tDD$L$ WQPUDAtL$WAHPUUЃtt ST=_^][hh jChjt^][SUV339\$tll$tdD$t\W|$ u=߅t?D$WPUq tL$WAHPUUЃtt S<_^][hh hhjs^][̸p VNPt&t$t$t$t$Vu VH3^Ë^VPt$t$t$t$Vuq5qȁuO%=t=u<=fVbP<t&t$t$t$t$Vu V3^Ë^̸VS\$U3VWU9kuBhh$ RԤ uhh$ jAjD$0_E^][ËL$,A6˅t6+ȍB;D$rL$#ˋ;~s;}otj+t 6;t;uTD$L$GPt$,2ƃ؍6;4T$,u;|$ vh%1D$08_^][hhh hhh$ jDhjqU[3_^][W|$tdhh$ j$GjPpFVwt,tPejV蝢F uwjW}Wנ ^_Vt$j|h$ j$NjQ^W|$tThh$ j$GjP6Vwt$tPFvuw`WW^_Vt$t-jgh$ j ujih$ jAhjo3^É0@@@ @@@^̋D$hphqhppD̸L3D$@S\$TD$D$HD$XUV3D$H3D$t$,t$Dt$8t$(t$t$ t$l$@;t$hhh$ jehjn3^][LW|$hu9t$luPS_^][L39L$lvD$p;u_A;L$lr9t$xu7D$PD$xSt$LuGhh$ jqhjPn3hrh$ jehj.n3_^][LhphqhpsD蚾l$th}tbMt$x1VSuK]W\$S03ҋM Up;GIЉt$0D$H9Ut(hh$ jD93D$t$0l$D3D$lhh$ D$04V苟hh$ VD$DwhND$L$l3D$8)D$4D$l$t+ƉD$@++ƉD$X;s4//t$l t$hV/=r0= r"=,rFrɃID$8D$@D8;\$ls/Ƌt$XV7PGL$L 9eL$$9GCL$$L$l;\$4<|$hl$Dt$0\$u)hh$ jDhjkD$DthҋT$,C L$DQPWȃ L$|$D;|$$w0t$lFD$(D$ L$DD$ h&D1h$ 6L$P 16t$4PDL$0 9G}L$$D$XC,0D$HlD$D$0;\$(sL$DT$@mhdL$Qf\$8hCh$ P( |$hEh$ jAhji\$$3,h1h$ jDhjit$(\$33D$Pt P*2t V D$,t P輙D$ t P諙t$tP薙FvuS胙t(td$PFvuWWD$t PFD$T_^][Lh(h$ jA3|$4D$Ht]D$\$,+ÉD$X43 It(t$` IG;r؋|$4ED$X;rD$H;t*hVh$ jDhjDh\$$|$3l$`U8D$3ۅL$D$pt$,++D$pt$0I;\$ls48t$L08<>vqt$xt$0VU&L$0Ƌ 9I;v:d$t$xt$t4UD$0F 8I;rʋt$0D$pC;\$4T|$xD$WPt$@UqL$$IL$8Dl$`t$duWVVU;L$839l$(T$ D$+Ћ|$+ljT$LD$X$9 43tދL$<;t/u t$xt$ht$h L$<3D$<t$4t$hVL$83ۋT$L+t$x4t$lVVt$pQtfL$8T$Lt$dD$XE;l$(:|$xIL$8u9\$|$Ut$ WS(D$UPPS GrD$(|$@D$(;D$ Ct$UVt$,SsD$@L$ hphqHL$H L$,hpp3P@HCDPt$$脲F3D$4;h/h$ jAhjat$h5ڋ|$t$\$@]t St(\$ tPʿFvuSwD$t P覿t W虿D$0_^[,5~Vuh~Ps]h0}jg]̸0FW|$838V99t@Qr|38L$ S3L$Uo3t$L$ 3D$0L$(D$$)D$u h hFjAhj5`D$4jHhXSUL$8 D$>j+SP D$#j]SP D$ L$8tDPt"t$L$$QL$ QL$ @QVЃujh hFjL$4t$P9L$ QL$ Quu0h hFjkuh hFjiV+D$uh# hFjG]jSP D$Dj SQ D$(t$Pt$Lt$(VHu$h- hFjhj^\$XjSPI\$P D$$thD$4p S"tTD$$SPt$$V&uh6 hFjhj^kD$,tnP+UV u]h; h2 hFjhj].h) hFj/h hFjhj]3V葴3D$t PD$t P&D$t PD$t PD$ t PD$$t Pt SD$(][t Pu&hk hFhhj\3^_0WVŷ^_0̋L$39 \t @r3ËXVW|$ 3 XǍ$:utQ:Puu3t Fr_3^Ë\_^W|$t>D$ t6SQ;VB3t"8BRJLF;r^[Q_SUVt$3W33ۅu,I%ujEhFjAhj[_^][V%V$D$t,|$VWuHjOhFjvhj[3t V#t U$t S_^][ËGu jUhFjqVPW  jYhFjkW/؃tVt$W۳ tD$xujchFhYVjjPSWlPSW:ujjhFjz%,UW|$W,u_3]Vj_h$GU蝌 tVW=uV蠊^_3]ËD$S\$uPDuVu3[^_]ËD$t$ UVWPVzuu W襶V<3[^_]V,[^_]̸Vt$ D$D$P;uYVt$t$t$ t$t$v^YVt$jjt$t$t$Fzu^WjGh$GVm t't$VWt$ t$ t$ zuW`_3^t$VWWE_^̸fS\$Ul$VSjjUt$(t$(yu^][YWhh$GVɊ tCSVWUt$,t$,oyt"huh$GP葊 D$uW蠈_^]3[YËЋ߅t.-Ѓ$ [()BNuWVD$_^][Y̸\G̸,H̸H̸hI̸I̸ J̸dJ̸@GVW|$ 3WrqP=u+9w\G\t#@F8uu_^Ãu_^_3^Vt$txV!qP諛=uJ~\tD~`t>~dt8Nht1~lu+D$ tL$tFdL$tF`^jwh0LjBhjV3^Vt$tRVpP=u$~\tN`t~duD$ t^jah0LjBhj8V3^Ul$ Vh,Ht$ED$D$Pj~u+hh0LjuhjUh,HV3^]SVs؃u,hh0LjhjUh,HVw3[^]W|$tt P9h,HVID$ E_[^]S\$ ;VW|$t7u,u!hh0LjAhjU_^3[t$FSP u2hh0LjhjTt97tV3_^[Åt7_^[hh0LjChjT3[̸SUl$hHt$ED$D$Pj؃u!hh0LjhjCT3][YVW|$t7u+u hh0LjAhjT]{tFt P蜥sF~uhh0LjCv 0p F uhh0LjFt P0v腵ȃNuh*h0LjC tChh8h0LjdxEjRUQvFssu;h?h0LjLjjjv Qv茴uhEh0Lj%Nl$t7D$E.h"h0Lj}hjRt97t V3hHSe_^][Y̸S\$$3VW3D$$D$D$D$t$099FULL==SlP觖jWUjS=uu.hh0Lj贩uhh0LjU6WD$8  D$0L$$uD$D$0Rhh0LP薃 D$u hPU* ȃL$0uhh0Lj#D$L$$D$uD$D$ Shh0LQ. D$uhh0LjAPW D$ uhh0LjD$t$0D$(t$ 6舁 t$ t$(vm tq{<tJ~uUFuhh0LjAWF` FH s@sEt PlVSBiP̓Vtd EuhHh0Lj#u'hNh0LjAhjN3^_][jjjWSu"hSh0LjhjN3JjW YE/hYh0Lj hI*uu hkdS辦Suhth0LjCUvcFuhyh0Lj"uND$PShhFu ht$P Wushh0Lj uzD$PD$PD$$PSxhHCȃNu h}D$ND$AND$AnW ^_][Fuh-_]3[̸ 薁SUVW3u h*h0LjAhjLD$$uh\Gu h0Ëv\$$Suh;h0LjvvSuhAh0LjUSD$uhGh0Ljq3SqjjjPt$$D$0SmD$uhOh0LjhRh0LP,~ uhSh0LjAjt$Ut$$t$ SluhWh0Lj~ uF uh[h0LjAt$Uv uC uh_`jWS> uheh0LjIvWUFuhj(jWS tEvWUFu2hrh0Lj hjK|$$uh\GV3t Wp t U#{_^][ Vt$ u2h,HmuQhh0LjAhjJ3^ËuNt Q9uFth\GP&W|$ WtW蛢t)Px_jWFuh,HV3_^_^̸v~S\$3UVD$ 3D$3CW909pCQ@9pU1RW uhh0LjCj@0p+ |$uhh0LjrC0_=C@D$$D$=~hh0Lh/ uhh0LjAD$$p2_=uaD$$@u hPmQȃD$$L$;~~PV t$hh0Lh=L$$AD$$u h qHT$;P;;~~t$V? HD$$0V( 1D$$pV D$$pV jV jWUVhh0Lh=uh"h0Lj~h&=nC@u h2tjP^Quh7h0Lj Y~  ~Vz D$=~hBh0LhjWUVNuhNh0LjCxtcGh<h0Ljg!hIh0Ljghhh0LjshjD\$3t V,t Ut SD$t P_^][̋D$uhh0Lj|hj@D3ËVuEpZPeuhh0LjwhjD3^jVE^Ãu?puhh0LjhjC3^jV^Ãthh0LjshjC3^Vjt$ uhh0LjxhjSC3^Wh,Ht$V u+hh0LjyhjCh,HV3_^h,HV_^̋D$uhh0LjChjB3t$p≯6wSVt$3ۉ\$\$ W9^9^ Fu 9^hH"uhkh0LjAUv vD$$蓚,9l$v:hxh0LjdhjAhHW39D$E]_^[h|h0LUs؃ u:h~h0LjAhjAhHWd39D$E]_^[Ë+D$D$Pv Ku hh0LjhjLAD$t PjS v USwr u hh0Lj hjA@Fu5wv.Gu hh0Ljhj@FjrG u hh0LjAhj@jjjvvveaD$;v%hh0LPSisuh맋l$jUSvvv#au hCG US` G H w p u ht$ WD$uhh0Ljhj?D$t Sp\$hHWs39D$E]_^[hfh0LjChjw?39D$E_^[hHt$ t$  S\$U3u hh0LjChj?3][VWjjjsss_t$09.u@hh0LWq u"hh0LjAhj>3_^][ýjW6sss~_u6h$h0Ljhjo>t6n_^]3[Åu>_^][Vt$6~~u1v!Fuhh0LjAhj=3^S\$W|$jS7vv^u!hh0Ljhj=3_[^Ë N_[^hh0LjChj{=3^UVt$ 3FNQP賝t h3hHLjjhj$=^]Sv؅oWvBSvv躝  h>hHLjkhj<NAL$9hu hDhHLjzhj<SPvjWQu hHhHLjhjg<WvƜu hLhHLhhj4<{N toD$PQZxhUSjjv Wv苝u hZpSvWv͘th^hHLj{hj;SNt W1_[^]h.hHLjChj;3^]̋L$D$!AS\$W"|$GVt;PHUCt PVMCtxwP芏tht8t2Ct PzwCt:wP,t* t*{ u C tw s "u^_3[Uk U{w t-vFЃt:vv vPU1t#6uԋOÉKOK] O^_K[]^_3[hhHLjChj:3_[Vtt$Vu V 3^Ë^Vt$tejqhHLj!FjPc_JFt P蟐Ft P/F t PF Psj$VkkVi^ømSVW|$33D$ 9_U\D$tyw u9tgD$PUwՑ tRUVGtD9^t_uw؃t't$jjVSwQtw _D$U6tu S#t u VD$t PD$]_^[YhhHLjChjJ83_^[YVhhHLj!jbt$$D$t$$t$$p 褈hhHLj!jb0^VWhhHLj!j [bt$,|$ t$, t$,7Q ut$t$t$t$WrhhHLj!j b_^jKhHLj$i ujMhHLjAhjV73@@@@ @@@@ Vtt$;Fu V 3^Ë^ËD$@uÉD$̋D$@t D$̋D$L$H@t L$D$1ËD$L$H̋L$D$ AVt$Ft P>t$ 3ɉF^Vt$F t Pt$ b3ɉF ^Vt$Ft P~vt$3ɉF^̸FjUVt$D$ h~^l$R|$GWu_^]SWEvm؃WWD$$D$v9OPy=D$$WPUSvu$9Wt$t$$Sv"腘Wt$t$$Svhtht$Uu9t$t$(u%SVt5Vt(D$hhHLhhj\4WWSגD$ [_^]hxhHLjChj 43^]̋D$hhHLj!jPY3ɃVt$FHPFtPP ^Vt$FHP2FtP)^D$Vt$FHPbFtPYPM F\F`FdFhFlFp^Ul$ Vt$ EHPFHPu^]SEtP^tSqu[^]WPWRtsE\F\E`F`EdFdEhFhElFlEpFpF\;F| PSt)F\; PWu_[^3]ËNx;N|}$A;N||񋆌;}I@;|_[^]Vt$Wt$~HWmSj^\SW5tH t)t$hhLhhj1[_3^St$~tW_ t;F| PWtNx;N|}A;N||St$ W_ t; PWHd;}A;|[_^_3^̋L$V3W|$ tGHPQ6u_^ËL$tGtPQt!L$tPQt_^̋D$HPHSVt$3W3u.؋u!h,hLjAhj 0_^[UVVt'T$J\QQU8^ t 9}E]t Vt SN_^[Vt$FPFPF,P ^Vt$FPRFPIF,P@ F@^̋D$ SW3tq\$tiUVt$PnUtKWUnSUt3WU^,PSgtWSF@^]_[hhLjChj.3_[SW|$3Wt$t hhLjjhjo.3_[PG,Pt hhLjBhj9.3_[Vt$tGPVt4jVt$tGPVztjV^_[̸VbS\$,Vt$(SVD$(tt$4t$0^[ËD$4PVtSӋ\$8uD$ ؅u^[UWS0SSD$$SD$,SD$$SD$,SSD$DS$D$ {D$8x@t.HQt$bYD$8Pt$ FSt$ t$ PV(D$D$PD$Pjt$(D$$tXtRP9/tCt$2PD$ VP;t'jjt$ -Pt$Z]^Ã^Ã|$D$PD$Pjjt$,WD$(tˋtP.tt$:2PD$VP;tjjt$Z-Pt$\^ËD$ut$ ^Åu9t$y ^ËD$^ËD$^ø^ÍIp̸KD$SVD$3XD$SPD$Pc u juhMjhj3^[WjS|$$~]j{hMPI tGD$t$PS~1PVWt$h ,Pt$,_t _^[Ã|$ WuFt VF_^3[̸Jt$ D$ D$PD$D$PD$Pj\^tGt$D$PD$PjZt$t$$$u!hhMjhj3t$D$PD$P u5hhMhhjD$t P34$ht$$h SVt$WvYL$qcvY t.t*t&jPWSru _^[H_^[_^[̸vIt$ D$ D$PD$D$PD$PjcuVWt$D$PD$ PjYt$$t$,D$ttt$D$PD$P߿ uhhMhUt$nt$XWBvuOhhMjhjh*hMjhjD$t P_3^WtXPV-q u#VPrhhMjhjt$WjjjPVWuVu rht$ oVu qh qt$ht$,1 _^̸,GD$4@oD$o@D$@ D$(D$PD$PD$ P u$h:hMhhj3,ÍD$WPPD$P+D$jPu"hIhMjhj~3_,VhLhMWD u#hNhMjAhjB3^_,ÍD$Wu 3_ËD$p/VjWPVjtVWW^_̋D$@tPUt3ø̋D$VpUPgu3^ËD$VptVg^̋D$VpsUL$qeUttjPV1c @^ø^ËD$pY̸ESU33Vt$$W3\$D$k D$VTD$(D$ukAD$0~]VID$tHD$PjVqPt$(t$8萶uhnWiD$D$0u5VSt$t*V4 D$;v \$~,D$h hMPA؃ uhAD$0u D$ , MEʉL$t$$ht$0VT >D$jPt$0g t~D$PuPt$hH V赉~]D$tt$,SPhX Vt=tt$,SWh` Vt!t$,t$,V t !ChhMUhjj3t WD$t PD$t Pt S|>_^][̸BVW|$W*htdVQu_PPPD$PD$PW衑t=D$t5L$ t-QPV u&h*hMhhj _3^WVuh0hMh_^̸$AUl$,VW3Ut$t$ _gu_^]$SW8jj؍D$$jPD$(PUА+t$D$(jjPcQj,"9D$$[jShYhMP> D$D$(D$(PSKPt$t$ >D$$ ` D$jjhH t$!Pt$ QjjhhhWTD$(KD$PjhhhW)$jjhhhW؃u D؃|$(jjhhhW9t$u,:PjhhhWD$4D$,PD$PU裎 nSt$ >%PD$8P . KU迎S%PaSD$8Ot$(*  FPS^vuvFjUhhhWUt$0D$VP/t$Ph hhWj~iD$D$PVOL$؅tZtI:t:St$W; D$Wjt$82Pt$ ND$ L$t Q :t VND$ [_^]$ø&>D$ u3YÍL$ QL$QP+ tD$ =u3 =uϸVt$ jPhhhVk~6jjhhhVK~t$PEu3^YPjhhhV3Ƀ^Y̸V=SVWt$(D$3PD$\$PD$3P#Mt$ =D$t#tt$PD$ uI_^[t$$wpLD$ VPtft$,UV%"V-D$ tGtCUD$$PD$P t,袖؅t!t$SSt$4O]D$ t Pt S_^[̸<SVt$ D$PD$3PV\$ʊ u^[ËD$ U0l$$PU u'hhMhhj$]^3[ËL$A8u@W@D$A@0D$Pj}L V芊76PP|؃ S%=jjjSVwAt~wVW~nV jVhhhU~GVt$ D$WP+t0t$Ph hhUH~D$3WZJL$_t Q86]^[VW|$W\JVI]t.V]t!PL$D$ _^5tfFPWo#V5jchMjhj;3_^ËD$_0D$^jQhMj|hj_3^̋D$VWu)L$A1D$D$Pjl unhuu2u hhMjAhj3_^t$P轣t$jW^WVtWH[_^Vj3_^hhMhhj'3_^Vt$Ve u^ËD$ vWxtPZtIGFGtPFt,G F GFGFGtwPMBFu _3^FGF_^̋D$Vpt8t PHZFt PhFt P3V3^̃|$D$UVh@puV/L$^]WV/|$9s!hhTNjdhj3_^]ËEt P@VL$Qt$t$,t$,PQ<~ D$_^]̋D$VH@pAt Pe@Vt$t$t$$t$$P<^S\$UV3s~ ut$t$S ^][ËD$9l$uN^][Ë;Ft^]3[ÍD$PjS tWhhTNt$3 u_^][ÍD$PWSR\$ t'vD$ vvSW0t$0 *ESWI3W1 _^][̋L$D$VWq=H .($|$W@taW=tQW=tAW=t1W=t!W=thhTNh=~_^ËD$N_^t$貟u#h!hTNhhjN3_^Ët P*W>_^5$8u#h+hTNhhj3_^t$P5Z_^S\$u&F P}RL$^Sp\$jVP3t$$%"[3^É[^hhTNhhj3^̸0.SU33VW|$H3\$(\$\$\$\$ \$$\$0uCCt$HuFAWPht$Pt$L> WeQD$HmP|$HPh(OWsUhD Ws?t$HD$Hht$PWX>  t$Hh8OWNs 3D$(W3lP<D$8=Dl$,Yl$bFt$K3D$:"D$ )D$$t$Ht$VUW9\$@tOut$H?OWK<D$4tjt$$WdP tjt$(W1O tWt$LD$DjPt$DWD$tUιV軹t$ ;B衹t$(;B臹t$0;Bmt$8;BS;WBLND$4t W諬D$0hC hOP(؃ uCAt$Hl$Lt$DhUV&< t$82 PhHOVq|$,tTW辞rhUV; [W PhXOVp>USt$hhO USt$htOV|$USWh|OVUSt$ hOVD$u thBu@t$hHhOjfhj3^_[t$$t$$K^_[Ul$$U\?D$u@E;t%hUhOjfhj]^_3[Ë|$4u ؋tWfWPWD$Pt$4萞D$@;th놃tu^t$\$+;\$v hNt3ʃ|$4>Pt$|$;t h U{D$tP說_^][Ë|$_^][̸ fSVW33t$,uu_^[ 39D$(UVD$zVdV\VD$@RVD$$HD$\$ C\Pt$,t$8 L$0Vyu(C\PPt$#l$0:QUSЃ VUPUSЃtzUCtPU thUt$4U tVVC\PUl$ UuoȁuL%tuBhhOjnhjk3V]t W_^[ hhOj}~ED$uD$VUl$8Ut$SЃtD$9D$tD$UPP tVt$Ut$0SB3ۃER̋L$VpTu!uhhOjBjzj3^ËT$ ;thhOjejzjd3^t$x^u T$L$!T$L$t$t$t$RQփ^̋L$VpPu!uhhOjBj{j3^ËT$ ;thhOjej{j3^t$x^u T$L$T$L$t$t$t$t$RQփ^̋L$VpLu!ujrhOjBhjH3^ËT$ ;tjwhOjehj$3^t$x^u T$L$T$L$t$t$t$RQփ^̋L$VpLuujNhOjBj}j3^ËT$ ;tjShOjej}j3^t$x^u T$L$wT$L$zt$t$t$RQփ^VhhPj^ uhhPjAjej+3^á<u 5<F D$Fu%FFt:P-F u*hhPj&jej+v6 V 3^ËF @FFPVj - ^̡<u <t$uÃD$+t$t$t$t$t$j 5,̋D$<t$WuÃD$,Vt$6u^ËFtPN FD$ F ^VW|$ h`h`h@WEutFu+r^3_Sj\Fh\RP ؃ uj^h\RjAjhj¿3[^_VWS 3[^_̋L$T$…t I8t@u+5uhPhDjVt$u3^ËtUx$tOS\$W~tjjSD$$PjV׃~(t$SV@$Ѓ tPjSD$$PhV׃_[^hyhRjyhj о^̋L$D$!A̋T$J$A BABVt$u3^ËtXxtRS\$Ul$W~tjUt$ SjV׃~'SUt$ @VЃtPUt$ ShV׃_][^h]hRjyjgj ^jjj t$ajjj t$ASUVW|$33ۅjFhRj@D$ t$VAVGFGFG F GFGjFGj WFtt#FPw$,PhSQR.w$(vhSQR.>t#FPw$,Ph0SQRq.w$(vhLSQRP.~ph`Shp$(hpSQR'.Up$(hSQR .8WhS&WhSWhSWhSWhSShSQR-Vt!L$qAu+΍D$QPRz 0 @PD$P1 $_^][3Ëm-|--.!.>.[.c.s.k.{..  5UuhPCh0j7̃|$L$Wy uhh@Xjsjuj l_Athh@Xj~juj F_UVjQtl$ D$4(VW ;uOL$Ut$Q ^]_^]_S\$VWj{ SD$ x7;wD$t>~:VwP)7 Ct w_^[ËO71PQ0  _^[Ã?ust j S_^[̋T$Vp@u+PRt$ ^Ul$VjUu _D$H;Lȅ D$^]3ËF3~$< tF;|FS] WjUx;;wt$t6~2WsV); Et{,K39PQ0  ;u}tj U~7_[^]̋D$SVW|$Hw =43$3VGtN+‰_F^[vjR _^[39_^[ËD$G_^[ËL$tXF_^[W<D$GD$G _^[ËD$t(_0^[Ë__^[ËD$G_^[Ë_^[3_^[ÍI=222222222222   ȅuËD$@@ @H Vt$u3^Ã~t-~ t'F t Ft@P:F ^W|$ujfh@Xjsj~j 3_Vt$yNFu+h ȃu^_ËA 0pxI^A_̸ ̋D$ ̋D$uÍPd$@u+̋D$H w5$53ÍI55̋D$@ @@ 39D$̸HVWj80 t$|$t$wPpjW%tuX0 Pt j W>_^Vt$ tVWj80 t$|$VwLpjW%tuX0 P(t j W_^3^VW|$NIFuj+80 VW|$wPpjW6%tuX0 Pt j W]_^̋D$ VHW|$ljD$;sgUl$SItXj80 jVuLpjU~> t.F;t$r%tuX0 P&t j U[]?tO$Gu+_^_3^̋D$HW=<8$83D$jPD$pTp _jjVt$ VLD$FD$Flj~ ^_Ë|$ tL$tG_Ã_ËD$x_ËD$L$H_3_Ä7777887778     ̋D$@ @@ @Vt$u3^Ã~t ~ t vXpF F^̋D$=wp9$h93ÍI\9b9̋D$tt3X0 D$!Vhp%u^t$t$jhV^̸p̋D$x t=L$t5@Vp t$jVQtpE^H1 E^3Vt$~ D$ FWv t$jPtp<1 uFt v tFFu+^ËD$SVt$ HWN =?,?$?Fjt$Qt0p _^[@1  _^[FQt$p_^[$1 _^[FQt4p_^[D1 _^[V/D$|$F~ ^ 0 ;r0 ;shVFt$D$$$bPv  p_^[W41 D$th@PP1 _^[hPP1 _^[VL$FtD$jthX=h(L6ttjhXt jhXjh D$P:|$ OD$uGuf,LGufXfD$|$PWwuVhhXX0 Pjj6hXD$(PhXWhXjhhXjjtj @3_^[hVF ^ )_^[hhXjejtj ˢ3ۋ_^[ËD$t_^[Ë^_^[ËD$_F^[FQt8p_^[,1 _^[Ë=<k<<>>>p><>g=n>    ̋D$@ @@ @Vt$u3^Ã~t=~ t0F t)FPt(p 1 F FF ^Vt$ WVt$0hhXX0 PjjhXVhXt$,hXj螒50 ,փ8t$փ8thhXjjmj 袠3_^hhXhjmj 肠3_^hPuW 1 3_^hVWjjjV_^Vhu^hVt$t$jjVo^̸U$c 3ʼnES] VW}ω]QAuj+EjAPWjhE40 bX0 =u"jjuEWjh40 .=YuW81 e_^[M3~]Ë]6V540 PuEWuhօtnˍQAuj+ʍEPAPSjhօtHEPuL1 u0 Ӄ8hӃ8 ]ƍe_^[M3]3e_^[M3]VWjD2 |$ jt$t$wL2 jW%tu@2 P{t j W_^Vt$ tXWjD2 |$ jt$VwP2 jW %tu@2 Pt j WG_^3^̋T$Vp@u+PRt$ ^̋D$awrD$DVt$V L$ NL$NF ^ËL$y tT$tAAÃËD$@ËD$L$ H3ÍIeDmDxDDFD~D̋D$@ @@ @Vt$u3^Ã~t(~ tjvH2 vT2 F F^Vhu^t$t$jhVj^̸̋D$~t,lw!F$F-tt -&t3øÍIEE̋D$tt3@2 D$!Vt$F 8tPV~HWjD2 jt$t$vL2 jVWt j V_^VW|$ 3G 8tPW~M|$tDjD2 jt$t$wP2 jWTVt j W_^ËT$Vp@u+PRt$ ^̸F 3ĉD$D$3S\$(HUl$ VWyu zhK$4KU3}}_^][L$3Ã>VU_^][L$3~ÅE˃} D$0t^uF_^][L$3IÃuF_^][L$3*ÃuF_^][L$3 3u%~_^][L$3Åtģ 3_^][L$3ÅtD$0} u1Ft PSaF_^][L$3Ãu1Ft PtS+F_^][L$3TÃuaCPCPCPPhXD$$jPFt PD$PFF_^][L$3Ã3D$hXj PnFt PD$PqFffF_^][L$3ËD$0F _^][L$3w9M t!tE}_^][L$3QÃ_^][L$39Ë}_^][L$3!ËD$0E_^][L$3ËFtPjjdSFtPjjdSjv jfSv(jS_^][L$3ËF(L$ _^][3ÐGJJHHJKHH1JMJFHH   Vt$h(hXj,F FFȃ u ɉN ^3AWAA(A fAAAN ^Vt$u3^Ã~W~ thFt?u jPH2 vT2 Ft)Gt PGt PWF FF _^̃|$t3ËL$Q L$ J(Vht"t$jjdVt^V3^̸Vt$Nt!F 8u jQH2 vT2 F^øFSUl$VW|$3G(Et$H$Qw>t<:t uD$:t/u>F|$:u3>t8/t@8uGt PpV'Gt$GPwL*IO3GPQA+{WGGPfO42 fGOG G G Q82 jjjG,2 ؃]  tjul.jD$ PjhuD$002 D$hhX@2 Pjj֑wh whXj菃hhXjmjsj 誑< jUGjPu<2 EyES0j UEuu,D$GS7U֋؃ |_^][YhhXjrjsj whXj蹂t$0 EhhXjpjsj Ȑt$$$hhX@2 Pjj袐wh whXj[hhXjvjsj v<hhXjhjsj Ywh whXj(hhX@2 Pjj wh whXjفhhXjgjsj }$4WjU~+~+~;Nta~#FFWt$ Pb|$( |$+~vFFPu$. U~)~uF;^|ID$SPu$ Ugx`tTL$D$ljL$D$+tW;^}~+~+~;2FFFSt$ P^ D$_^][YËD$_^][YËD$O_^][Y_^][Y^]3[Y3[YUl$ u3]ËL$Vq y$W3jQD$|$ S^ t.F;OFSPUD$$ ^)^ D$;tE+;PPD$vp$؃ t$3xt F^ 뎋D$[_^]ËD$O؋[_^]Ë\$D$WUp$ t$xt;t+˅O[_^]^3]̋T$Vp@u+PRt$, ^̸趿D$SUl$Vp MWj3P|$H\$$N ~`V3VD$ ~)I;}  C< t @;F |L$ @3)F F+|$uu_^][Y6D$vp$ t$xt~ |$FWD$_^][YËD$O_^][Y̸趾S\$ Ul$Vs WEyweZ$dZFF FF9~_^][YËV 3^3Ʌ~?FÀ< uGA;|_^][YË~uC$0t$$t$$UP_^][YË~ Ћ|$ ;>~0hShYW葻؃ Ft P藹^Wt$(Fv~  _^][YËD$$\$ t8uFˉL$D$L$ˉ\$\$FnD$~;thqhYS t7D$=~L;FtGhvhYSɺ؃ u2;nt UոhhYjAjrj m_^]3[YË\$F;t P衸D$ nFF F;PvD$Flj^F_F^][YÃ{$tjS5t$,t$,Us$TS,_^][YËC$\~"jS~~߅yIj t$ t$SUtFx_^][L$83!<ËL$H3_^][3 <̋D$SUV3,YWE؋ˍQ$Au+ʸ;GȋD$,+xy3D$(tߋl$0L$ T$~,;}&j QRt$$t$$ twL$ OT$F֊t.;}*PQRt$$t$$CtDFL$ T$u҅y'\$ ;}j St$$t$$t$$tFGx_^][_^]3[jt$t$t$hqhjt$t$t$t$Ijt$t$t$h0q(t$t$t$t$hq̸趨 3ĉ$$S$D$$U3D$$D$ D$ l$V~D< tu D$KEl$$y3+t;O$`Vj Pn =Ƅ4`;WO+F+Ù|$ȉD$;}AL$3h!$hPD$HP蹲UhYD$@jPh!D$LPD$dP3(3~o;|h!D$DhYP D- DPD$0PhYD$8jPh!D$DPD$\Pʱ FG;t$||$h!D$DhYP觱 3~S;}ID$Ŋ 0A<^v.PhYD$4jPh!D$@PD$XPZFG;t$||$h!D$DhD P7L$L QAut$$+ʍD$DQPT$,t$4 L$t$(l$3_~L+P$dPhYD$Hh!PL$PQAut$ +ʍD$@QPT$( $^][3补袨t$t$t$t$h0qSUl$3ۃVM3W|$~xtuh t$hYWD$ PhYWC |$څuhD WF;|tuh t$hYW]L$ D$$DPhYWA _^][t$t$t$ t$ jt$t$p̸H覤 3ĉ$DUV$XD$PD$D$ P$\WD$0D$fD$((2 u`Pt^]$D3Hh[hY@2 Pjjoh\hYjdjej jo(\WhdZz\ur\f|$JSt$2 t$2 >hhYj hhYjAjej ntj j L$4QhL$\Qt$ L$(QЅmL$LQAu+ʍT$,zBu+׍ythhYWPhhhYWs uhhYjAjej 'nLL$,QL$PQhpZWP/WPPPShxZj6 [_$L^]3H̸p6 3ĉD$lS\$xU\$D$  t][L$l3輡pSrЃT$tV3ڀ:Wt%:u/t@8utF3ۃ=T=T2 h@ZxTthLZ~xXTD$PVI8t$WD$`fD$XD$HfD$H42 fD$FD$/T; Í$:tP:Qu3=TdWD$$D$$D$4t7j:S0 t3D$(8CD;*u{u D$(3ۍD$PD$(PVSTt$D$D9NFNQvL$ P| VXWtFD$PSD$ D$ D$ Q82 D$HD$HD$D=,2 jjP׋W$Iu#jD$D$PjhU02 D$3t$D$HPU$2 @2 D$}=@'rD$\D$xoD$DD$`~D$TfD$pt6T; Í:utP:Quu3u4fD$DfuWD$hD$wfh82 D$dD$`jjP׋t$D$dPW<2 W=T2 ׃UD$D=,2 jjP׋hhY@2 Pjjih0Zt$4h\Zjt[hhYjvjij i8=T2 t$ ͙|$u tU׃L$|_^][3觝pËD$=T2 hhYPjj5ih0Zt$4h\ZjZhhYjujij i8뀋D$hU2 u@hhY@2 Pjjhh0Zt$4h\ZjZhhYjwD$S\$ UVt$WSVyj{hYjljjj mh~_^][hhYjj 蹒V 2 ȅuhhYjfjjj hQfythhYjkjjj g0A 3A @CA @CA @ChhYjj +tVhXjgY _^]3[_^][W|$uhhYjqjkj bg3_SW1 tL$[_fVhhYjj 詑hZW2 \$tNQ2 fhhYjj o^u8ZNJ:utP:Quu3uPf[_ù ZNJ:utP:Quu3uf[_ùZNJ:utP:Quu3u8f[_ùZNJ:utP:Quu3t04 NJ:utP:Quu3uf[_ù$ZNJ:utP:Quu3uf[_ù(ZNJ:utP:Quu3uFf[_hhY@2 Pjjeh0ZWh4ZjV$3[_t$ 2 ̃=PtP%2 ̸V$$PD$Phht$2 L$Hʋ̃=Puhhjh`P4 h`h2 t6@2 hhYPj j+dhhYjzjpj d(øVt$t$t$ 2 yh3hY@2 Pjjc^̋D$VD$ D$ Ph~ft$ 2 yh3hY@2 Pjjc3^̸ 3ĉD$S\$ 3VW|$$L$L$L$L$ 3BЃ w1D @BD =v_^3[L$3QÃ.u!ttA_^[L$3+ÅuƒutD$ L$D$CD$CD$_CB^[3SUVW|$jWw $GHHtH{9G$+܃$tjWvFGPv؃<jSW蒦PU[W.PU~tjS Ft'P؃US衩UW荩GFvP؃~ tjS^_$t$t$w$٫Wa_^][hhZjijdj `t Uu_^3][j WaG_^][ST2 hhZjj hhZjojdj `_^][SUVW|$jW谡w $GHHtH{9G$+܃$tjWfFGPv؃<jSW肤PUKW+PUދ~tjSFt'P؃US葧UW}GFvP؃~ tjSz^_$t$t$w$ WQ_^][hhZjijdj ^t Ue_^3][j WQG_^][ST2 hhZjj hhZjojdj ^_^][̋T$Vp@u+PRt$ ^̋D$S\$HUVWs =K܄$S3t{_^][VS_^][Ël$ D$u&{ Ft PUɜF_^][Ãu ~ _^][ÃFt Pljn_^][ËD$F_^][ËD$ { CFD$Clj{ _^][Ã{ tL$ tF~_^][Ã_^][Ã{ tL$ tF_^][Ë{_^][ËD$C_^][ËD$F_^][Ë~_^][3_^][^kuy*Q    Vt$hhZj F FF t1W@@@F F^3^Vt$u3^Ã~W~ tFGt jPH2 wT2 GFW+F FF _^Vt$t9Ft PjFt PZFt P芞VA^Vh`赡t"t$jjvV.t^V=3^̸`VW|$ w Ft jPH2 vT2 FG_^SVt$W|$IH(HtHu9G$$t_^3[UjWCFGPvuj WnG]_^[ÅxjUн؃WMPSW%PS詅~t)jUuhhZjijdj lY4FtP蚛tSUJtSW:ut S蹜]_^3[]_^[ËFuhhZjojdj X_^[vP0؃t~ t5jSu&ST2 hhZjjjdj X_^[É^__^[S\$ W|$Vt$~$u^_3[Un jV艙E~ E#D$jPz3]^_[D$;Ouj V菢]^_[WSv$諢؃ y V,}]^_[_3[W|$ u3_Vt$ ~$u^3_jVۘD$jP2^_D$L$;Oȅuj V^_QWv$P y V葘^_̋D$@$uÉD$kjihZj2ȃ uËD$AH @ @Vt$u3^ËF t PF F F^̸̋T$Vp@u+PRt$| ^hhZjoȃ uËD$AAA ADAAH ̋D$uVp >t PxFt PV^W|$jW u3_ËG SUl$V0v F\$Fu#9Fuyj WF;FÉF^][_;B؉\$N ~;w+FWPU )~t~ F ;FuF F +uD$^][_^][3_UVt$ jV~ l$L$W~ GthlhZj|jqj T_^]ËWG;uj V_^]+;SGȉL$ٍIO Ow;r+΍;w+GVUPw +uˋD$[_^]^3]̋D$S\$HVW{ =w+$?t hhZj{jgj S3_^[Ët$uhhZj}jgj S_^[9wtGtPσGw_^[Ëw_^[t$SD_^[S_^[Ã?g]w+w_^[Ëw_^[þG_^[þG_^[t$S9_^[t$t$ S _^[t$S_^[Ët$t$;SG^;OC _p^[Ã3GG _^[Ës_^[ËD$C_^[Ën@ _p^[ÃXw_^[ËD$H G_A^[Ëz@ x x_^[Ëz'9bO -A`{ʎi jjht$>jjht$jjht$SVWh33Oh8teD$tSPhW誑tID$tjPhV荑t,VjhWxtL$É9L$_1^[Wt3t Ve3L$É9L$_1^[Vt$~ uhRhZjxj{j O^t$ t$hV~F0^̋D$x uhBhZjxj|j AOt$jhP藐;OVt$~ uhqhZjxj}j N^t$ t$hVC~F4^̋D$x uhahZjxjzj Nt$jhP;O̸Vt$N t?t9B B @@ F AA ^S\$Ul$VW{ u ?>uIhhZw GuhhZjAjyj M3_^][GG ~uIhhZv FuhhZjAjyj fM3_^][FF /GG_FFC ^E ][hhZj{jyj M3_^][Vt$Wt$|$;WG2;O~G H )qt q A ;AuA _^Vt$jVӍ~ u3^ËF H QAujD$ PV ^Ëq 9AsQ+֋D$ tIΉ^Vt$jVc~ u3^ËN yAthhZj|jzj K^ËAWy;uj Vf_^ËQ +;r+׍2;v+D$tIʉ_^SVW|$j_ D2 {tjt$t$wL2 / uADPSjt$$t$$w1 jWjPtuI@2 pt(t# tgt_^[-t t-&uj Wo@2 C _^[̸$F 3ĉD$ SVt$0W|$8D$ ^ jD2 WD$(VD$fD$$D$ PD$Pjt$HWv1 {uxD$Pjj,V蠋jVey!Wtj V虔@2 C V_^[L$ 34~$ËL$,3_^[3 ~$̋T$Vp@u+PRt$ ^̸~D$ S\$ HD$VWS hK$dS D$$CD$Clj{ _^[YÃ{ L$ tC{_^[YË{_^[YËD$C_^[YR߃tu _^[YÁ@_^[YËB$_^[YË|$ljz$_^[YËD$ t7zozq~@fB@B_^[YBW_^fBB[Yt t|$t;~WRt$(| _^[YËD$ o~@fB@B_^[YËL$ B(AB,_^[YËt$ MbjniȍD$PhhsL$(02 mh@[T1 _^[YÍD$PD$PhhsD$(2 yh4[T1 _^[YËt$MbL$ ‰i+iA_^[YËt$ MbjniȍD$Ph&D$PD$PhSz L'B _^[YÃz suvB _^[Y39D$D$ t&jD$Pjj)s02 jD$Pjjs02 R_^[Y3_^[YÐZak\]ØÚޚ#yJ@Z  Vt$Whh[j8F FKw u_^j8jWy ~ F_^Vt$u3^Ã~t(~ tjvH2 vT2 F FF t Pt^̋D$pt%t tg-tt -&t3ø̋D$tt3@2 pt"t tg-t t-&uθVh؈Պu^t$t$jhVz^̸؈̸$Fx 3ĉD$ S\$,WD$ { ( ,FD$ D$ PD$ Phhs2 yh4[T1 )L$Mb‰G0i+iG4VD$P00 D$PD$ P,0 t$D$*jh!NbPV+xO(D$ i+gfffW,;} @B+I+֋D$ ;}3ɍQ+ȋw0u9w4t ;uN9W4|IMbijD$D$Phhs02 yh@[T1 ^L$(_[3v$̋D$t 0tVW|$ w ~(~,~KMbn4iF0jȍD$PhhwL$ 02 yh@[T1 _^Vt$t#Fu!~Nt$ I91tW@;|^Ã~uPj6vX1 F|$ tt$D$vj6vPbQt+F^Wj|hx[jAs u_S\$ hhx[CGCG9 O O Pr GuW q3[_39O ~GA;O |UV397~%l$CtPՋOt F;7|^][_Nx\$IGtPӃNyGt PpWp3^][_Vt$Wt1L$x)>;}#FOS;}FTA;|[_^_3^SVt$ 3W~^ˋ|$99t@;|_^3[Åx*;}&z;}d$N@J ;|_^[_3^[VW|$ wt8O jehx[QvcrȃuFt PoVo_3^ÉNPwQsG FG F GF_^jt$ t$ A jt$ t$ ! Vt$tFt PnVn^Vt$u3^ËN @;,hhx[Pv_qtщFF F W|$;}0(A;#L$H~FD$?0(E;#Ճ~.FD$@0(B;#ʃ~D$JFD$A0(A;# ~D$KFD$X jpPD$ PUUjD$@PD$,PVjD$TPD$8PV$$]thhX^jj SjD$hPVjD$$hPLTthhX^jj SL$QV|$|$Xu$hhX^jdjdj$(h^jL$H3_^[3]@VW3F|$uGh^0 t3>t.΍QAu+ʍA;sWVt$Vh ;rv_3^CFuh^0 u^>tA΍QAu+ʍA;s,WVt$VgWh VRgWh_VFg$_^Ët$ _^U4p\ 3ĉ$0SVW}3ۉ\$u3_^[$03[]ÍD$PWp1 xָ\WD$$j$PJu th^W81 D$ D$ tjjjPDd1 D$~;LPWD$@jP<1 ؃~7fnø[D$@$WP\$ D$ ~+t$  1 D$hat$H twD$3~ajD$DPWjVt$4S0 j蛘PjD$tPt$4W @LJWD$p$jPxD$,;|WEt$ 0 Sj1 L$|_^[3I]̸ I=ht@D$P(0 uh*IWD$ $jP=hu*d0 $IWD$$jP Vhhhfjj 3:?du?9t$t;hjhfhftVh h%dUdthphfjj >^hwhfjj >dtPdh|hfjj >̡`uCh'hfjj d>`fh*hfEjj `<>` VjЋu^hhfjj>t$VEhhfjj=(^̡`uCh'hfjj =`fh*hfEjj `=` VjЋu^hhfjj o=t$Vhhfjj P=(^̡`uCh'hfjj $=`fh*hfEjj `<` VjЋu^hhfjj t%hhfjjhl6^̸E`uCh'hfjj ;`fh*hfEjj `r;` @jЃ$uYVhhfjjC;t$t$vhhfjj!; `D$,PAЃ,^Y̸E`uCh'hfjj :`fh*hfEjj `:` @jЃ$uYVhhfjj :t$t$hhfjj a: `D$,PAЃ,^Y̸FD`uCh'hfjj :`fh*hfEjj `9` @jЃ$Vhhfjj 9t$t$D=lu/ ht%Qu5hhhhfjj d9D$P`@Ѓt VH^YVh*hfjj ,9 h,hfAjj  9 ^S\$t@VWtF@tP>F@OuS>_^[̍D$Pt$̸BVhDhfjQD$P@ S3U3W9T$~ul$ }mt]ǍHL$I@u+D$ЋD$T$;~&BhQD$@hfPV@twD$@PWVLT$ C;\$|ظDttPx=DŽDŽ_][^VJ=_][^SVW8ؿ $FFtF@tP<F@dždžOu_^[̋L$VPEhVt$ ^̸@ 3ĉ$S$V$W$U% VD$VD$qVD$ D$|$u΍$Qh,gj@P菆|$uUh8gD$hj@Psl$ut$D$$hDgj@PSL$D$ EŅPD$dEL$Pɍ$EPVhPgSWσQAu+ʍC;u6v1-0 3ߐj:WՃt K;vC:Fx|]$_^[3?̡`uCh'hfjj $5`fh*hfEjj `4` @̸>`uDh'hfjj 4`fh*hfEjj `4` D$ % ȍ$ $PBЃuË@̡`uCh'hfjj 44`fh*hfEjj ` 4` @jЃVW;u_3^GSyOG\HDHttQh9DŽDŽ[_^VWI;u_3^GSyOG\HD$DHt(L$t u (g HttQ8DŽDŽ[_^VW;u_3^GSyOG\HD$DHt(L$t u (g HD$u:ttP8DŽDŽ[_^Ëu D$t[_^ËT$t [_^̡`uCh'hfjj 1`fh*hfEjj `1` ̡`uCh'hfjj d1`fh*hfEjj `<1` @(̸&; 3ĉ$=`u>h'hfjj 0`fh*hfEjj `0 VD$WP%+D$ PD$P*D$P`@Ћhhfh&8 tjD$PV*dždž@@@Iu`V@ Ћ `VIу;t%V_P^$39ĜÅt W$_^39Ĝ̡`uCh'hfjj /`fh*hfEjj `|/` jЃ̸f9 `uDh'hfjj 9/`fh*hfEjj `/ ` D$ %$$PAЃuË@̃=`u>h'hfjj .`fh*hfEjj `. =pVpt`V@ Ѓ>u=t`V@ Ѓ>u=XXt`V@ Ѓ>uk=ppt`V@ Ѓ>u^&ȋ;u3@%yH@DH{;u3ASVyIAt$ \Ht.T$t&Wu(gÉ:_^[É>H _^[ ȋ;u3BSVyJBD$ \Ht*t$t"Wu (g> 8H_D$t3u D$t0^[É0t$t ^[k9u3ËDHK9u3S\HVt$ t.T$t&Wu(gÉ:_^[É>H _^[ȋ9u3ËD$S\HVt*t$t"Wu (g> 8H_D$t3u D$t0^[É0t$t ^[VZ9DDDHt$tQ0DŽDŽDŽDŽHu dž9L9u3^Ãd^VZAyIA;u@%yH@D$DL$  ȋD$% ȋLHD$D$Ht*t Q/DŽDŽ^̸3 `uDh'hfjj y)`fh*hfEjj `Q) ` D$ V% ƉD$D$PAЃuD$t$P`@Ѓu^Ë@^̡`uCh'hfjj (`fh*hfEjj `(` @D$̸2 3ĉ$$tPD$P" $P"`uCh'hfjj %(`fh*hfEjj `'` @$ $QЋ$31ĔVWDttPl-DŽD$ D$_^Vh9hfjj 3Z'95`uD$`hBhfjj .'^9u3ÃLVt$ >t)S\$ t `V@Ѓ>u[^hGhfjj&=uhIhfjj~&hMhfjjg&hNhfjj T& =uhPhfjj 5&SU-0 VWpt>^u(St1 tj PWՃ G>>u gC d~hlhfjj %_^][Vt$ >t)S\$ t `V@ Ѓ>u[^t$?k ËD$V 3 3k(Ƌ+k+k 3^;{&w;؁91$Ne6"H蜁gR螚ɚ48t$hq̸v. 3ĉ$SV$(D$W$0PD$ PS>؍D$PD$$PD$$PD$ PXhL$(QPMD$ ED$$Pt$$D$8t$ PShhg$HhP8t$P,P@u+WP$,Pփ ~$D$PD$PD$PD$Pn$$_^[3:-t$h̸@F-XPD$PfBt$TD$ jjjP:t$\D$h PQsd̃=u5j3hhju339uVhh|gjP* u^ËD$L$ FW%V5FD$F tEt+7P躺;~V5'w 7@wЃW'_^áx\tV'3_^̡tgVt$Wx hP5@ ƾy55h 5D _^áx _^̸ v+D$$D$D$D$D$$Ph05[̸6+Vt$ h;h|g5t$8P( D$ D$D$D$D$Ph05t$D$ ܽhPjt$t$$X1 39t$~"S\$(W|$0D$W4F;t$|_[t$ A&^̸f*S\$V3u^3[Ë ut D$ W\$%D$ D$ PQDt.xt1u-F @ D$D$ P5u_^3[Ë@ _^[̃=tjJ0hh諽j/039Ë u(j0躷j/ u3áSV@WQ蘷;=}_j/jWh|gj &j/toj`FF F/V5迷jx/G;=|S5蠸L$tL$tHL$tH_^[jZh|gjAjjj3_^[̸f( u3ËD$D$D$%$$VPQ跺tIt-W>P|;~W5v 6@vЃ_V#^3^̋T$L$;u qARЃ̋D$L$ @I:utQ:Pu u3̋T$Vt$;u JB4B^̋D$t x;u 0pk̡Vt$Wt.>PY;~W5ƶvЃ ȋ3_^v+ȋ3_^Vt$W|$+uhSt-P;~S5[wv@Ѓ[_^ËGNI:utQ:Puu[_3^[_^̸& 3ĉD$=WVt$D$u4hh3ɣu3^L$3%WVhh^j;# D$ t&~t hh^j# D$?thh^j" D$ tkthh^j" D$tI3Dt!P50x肸t P F~уgG_^L$3$h/h^jAjij/3Dt Pl F~t WY L$3_^3G$jt$t$t$t$t$S\$VW33u_^3[ËL$ D$U3~P++‹|$ |$Wt$уy~ nL$$;|̅tD$(uQ3]_^[ËL$$D$ D$(t9~*~|$IWt$уu L$$N|$ |$]_^[̃=t átJhP@ ah5Qh5A5vSUWjt$33WWl؃_]3[Vhh^S uhh^jAjdjN3^_][jt$SVЃt1t$t$@RVQt WrWVA^_][̸ f" 3ĉ$$L$SUVWhQ3D$Pt$32 -1 x1 $H=DD$P|1 t$d$PՃu>.uF>tnFPӃtIFFPӃu>tDPӃuG8u?t'GPӃtGGPӃu?u33|$tUWD$VP tBt$D$hPt$Ft$1 Ƌ$_^][3  ËD$#̸ Ul$(l$t1L$ D$L$L$QPٵt @]@ Ël$SVW3ۿ+‹Ջ D$4 I \:utB:Auu3y~^;|_^[uD$(t]@` 3] ̋ L$ ̸ L$$w&tI<`uhvJI\ átFL$T$ $$QPT$ 讴t @@ hh^jejfj3 ̸ 6L$$w&tI<`uh@GIX átCL$T$ $$QPT$ t@ hNh^jejgj+3 ̸ L$$w&tI<`uh[IIX átEL$T$ $$QPT$ ~t @ hih^jejhj3 øD$ u3ËHtÃx t t'D$$PQD$t @@SUVW3ۿz+‹D$,UPy~^;|ЅutE_^]@`[_^]3[̸<V 3ĉD$8S\$D\$D$ Ul$Ll$W|$Tt~|$XVueWD$tTPut$.t3t UVS' NIFu+^_][L$83f<ËO G3D$(?33퍛@ID$$L$ uÃtPWL$  ycu2vKu轩VW jWWC }D$$L$ kD$$_|$(trD$(Pr+L$tjPWv0L$Pk\$tD$~0 CH\$D$D$\$txW8D$Nd$Fu+t4l$~.CMUt$ S(& ;~3+l$\$\$t$Cމ\$ZVh^D$4jP4at$<NFu+t-l$~%UD$0PS% ;~3+l$\$t$L$ ~,D$$t Wq^_][L$83<Åt WND$^_][L$83<ËL$D3_][3<ø Ul$(l$ t1L$ D$L$L$QPt @]@ Ël$ SVW3ۿ+‹Ջ ((D$4 I X:utB:Auu3y~^;|_^[uD$(t]@` 3] VWjt$#W W_^̸|$ Vt$ u&Vu Vt P^YWjVjj_3^YSUjWjhh^U:؃u][_^YjjWD$(\$(jPjVWt$<UD$8\$8PjS4][_^Y̋T$Vt$ +Bv$H +V t^ËPvr;usth:u't]B:FutPB:Fu tCB:Ft;^Ëu^Ëu^Ê:uۄtQ:Puσu3^ËHtNjFtˊ:utQ:Puu3^Ë@+F^ n̸SVt$F$H 3ۋ@L$D$ ~OUW3<řCD$3;\$|_] 0ppD$? ^[^3[]kz̡u|$M̋L$A@AH ̋D$@@Vt$FHu vkV^̋D$VD$ J 4@+du_tYR4hr;ust4:u't)B:FutB:Fu tB:Ft^3^̋T$Vt$ J +F uYRvr;ust4:u't)B:FutB:Fu tB:Ft^3^̸SUVt$33ۅu^]3[YFu^][YWujPh^j jej3_^][YjSh^v  D$Ntv QPD$$ GF G FG_NtBQAu+j_h^APD$ tdt$vU? ot:QAu+jhh^APD$q؃ t"t$6S F G_^][Yjsh^jAjejt UGt S:D$t P)W 3_^][Y5UuhPCh0j7̃=PuhE ͠Pu3Ã=Luhp諠LtVhhaj m t0D$D$ FD$FV5P脡Vu W3^5Let5P5L^̸F 3ĉD$ D$Vt$ D$PW|$ t'L$QP蕞xP5Pȃu2h j j(D$hX_Paȃu_^L$ 3ÅtAtAL$_^3c̸ 3ĉD$D$$D$D$D$ D$ LVt$tHL$QP˝x6P5LD$ D$t^L$3hjj%D$h8aPvu‹L$^3̡Pth PLPLtP`L̋D$D$A+BuA+B̋D$D$B+AuB+A̋T$ D$U3IxɊ0bu~@J~$Ly Ɋ0buJ܋ʁyIAt]SVW3t$d$y Ɋ0bيHy Ɋ0bɉL$Hy Ɋ0bɉL$Hy Ɋ0bɄxOD$uHD$uAx= \$ \$ ًN^;J_^[]_^[]Vt$W|$t#PFPt$ y_^_^̋D$@@X@\øD$ SV33\$D$ ~|=us;~ |=DL$$uL$3t$1L$^[Ul$W3D$(@D$(y Ê0bȁ=uF~=t@D$BD$@u%RPUE 3҅xu;q\$+\$\$G;|$,ID$3~"u?RPU 3҅x2;.+؉\$u'uuD$\$븅tރ3L$$t$_]1L$^[̋D$SVt$3ۅW|$GW|U O ы?a ?aH??aHaHQu ы?a ?aHuN< ?aH@==_^[È^[W|$t+Vt$PGPVL$ 0 @0^_ËD$_̋D$@0@X̋D$ S\$U3(W|$P~hbhhb G+D$ ;~St$ GPk  _][VtEt$ PGVPL D$0w+؉t$4t$(GPVT$</h F T$ t$T$$;_|9Iw4wRVT$0WE+_ T$$ F;_}́vD$^_][ÅtSRGP  D$^_(][̸F VWD$jPD$ fD$zt$u\DtVGhFhbwD\ F u4hhbjA/F덋>uhhbh Ft"VjjhjP Ft _^[ËV@Ѓ_^[̋D$D$@Vt$tYx tjVgu V@ Ѓt3xDt-~ t'jV;upDv 'v  Ft PFt PWfF^̋D$Wf@D$W|$ ?Gt)Puh4hbj&jnj3_SVt$;u^ jVS3Vo~GfF t#@DttB^ pDw v  GFGtWPFuGVu3^[_hEhbP F uhGhbjAjnj3^[_Ë@t WVЃ^[_^[_h.hbjojnj3_hhbj t Wf@Vt$tVV^̋D$Wf@Vt$t(@t VЃu^ËN`tp QF`t P Ft PPhjV ^S\$ ;Ct,Puhh\cj&hj^3[Ul$ VWU:#{`tX@ tOhh\cPMȃ M`u"hh\cjAhj3_^][Ëp s`Q @t@,UjjSЃ_^][_^][hh\cjohj3[̋L$uhbh\chj|jn3Ë@,uhgh\chj|jI3t$t$t$QЃuhnh\chj|j3Vt$tVV;^hjt$  VjXh\ch thjVp ^̋L$@tt$jjQqXt$ 賨3Ƀ̋L$Pyjt$ jQËD$9AXt ~t AXhQh\chjzj3̃|$D$t `\ÁH\̋D$xt D$mD$T̃|$thjt$ a t$t$t$jt$t$ SUl$ VW|$uoEo\$tt3;)?tw\Wow\t$t/V^u.hh\chj{j_^]3[3t3V؃uh뻉wGC t9hh\cP G`u&hh\cjAj{jY3_^][G`Cg\GX@@tDjjjWu1h7?u"hh\chj{j3_^][Ë@t!tthxchh\c G\u7W[|%=u"hh\chj{j3_^][W$|t$(W|%$GPW{~hchh\c tW{PGVPW{PGPGPtW{PVG PL$ u@ tUVQ@WЃG GdIIOh_^][É j̋D$xt D$}D$ S\$VW|$7Ft$Fjjt$WЃ_^[G\vt+ hh\chjej3_^[à d vhDdh h\c T>ktV;R3Ʌ~lFv;u-A;|3ɋp+~T$DlA;|_3^[hhh\cjdjej,3_^[hh\cjmjej_^3[_^[̃|$thjt$  jt$t$jt$t$]jt$t$t$t$t$5Vt$W>Gt4t$Gt$t$VЋȃD$y _3^_^S\$ D$3[_^F\tSt$ t$ t$ V![_^Ë vhDdhh\c ~dUl$tWFlPU D$D$St$$\$$SUVu][_^Ãv#~ u);FdWPFlPP Fd|$t;][_^ S\$U+Et%Ejjt$SЋȃxoD$][Ëm vh,dhh\c uD$][C\C t$thh\chjj]3[Ë+;s$VW{0i΃_^ C0UPt$ASЃtL$)][̃|$thjt$  jt$t$jt$t$jt$t$t$t$t$UW|$ /Et.t$Et$t$WЋȃy_3]ËD$_]Vt$ D$3^_]ËG D$u6whu1EVt$ t$WЃD$t 0^_]^_3]Ëm ~hdh\h\cD$ Stl+؃0;~%Vt$$PD$( w [^_]ËL$ SQPG0UPt$,AWЃtID$+L$ T$Չ(D$L$ T$]L$#+~VQR@WЃu[^_3]ËD$0tD$SPG0P; _ [^_]̸x 3ĉD$t$D$$S$D$$U$D$$VWD$ xp D$D$t$$@~h\dhhxd ~hdhhxd t$u_^][L$t3xÍD$,PPjt$D$8P IL$ AL$ tt$D$HPD$4P Q$D$0VP 4D$(tjPD$4Pa D$PD$HPD$4P 9$vk$jt$D$4P` t$D$HPD$4P D$PD$HPD$4P F;$rT$3td$;ttLD C@Out$$t;t;ttLDME@Nut$$ut jt$D$4P tt$$@D$D$,PHD$Hj@P$ D$_^][3x3ɸ8 Dt$t$t$jt$ ̸ 3ĉ$U$ V$Wu=DƋ}ku_^]$3SS$ MS$ UjVWDb$(tUS$$D$PjVW`bWkW/hD$hP$ [_^]3̋D$ujOPh0  GhjlYjh`"hdd ̸Ut$ Pt$O u jRhdhhjѾ3]YSVWU3讁IVUdW:utB:Auu3u'D$PWx*td|$~@jehdh[jjhdhhj4whdwhdj(UF;X_^[]YjZhdhhj3_^[]Y̋L$A`ǀq`t$ ĩ|$tjt$ژ3t$kUl$WExD$;r>+SD$3ۋD$Vt$+ƉD$d$uu`PVlD$(߃;\$ v^[_]S\$ Ul$ Vt$W|$@rFƍMPU D$ IQRu`h@SWMP@U @@L$ u΅tEPPE Pu`VSW_^][Vt$N`tF PQt$t$t$ ҃^S\$Ul$W|$ @r=ǍN D$vQv`h@USN @@@L$uυtvF Pv`WUS_][^S\$Ul$Vt$W|$@rIƍOPW D$ IwQRw`h@USlpOP@W @@L$ u˅twGPPG Pw`VUS1p_^][̸Ul$$V;Bt$L$ SWd$;3T$D$T$$l$,t$(Ir؋+"/$D$B Pr`D$jjPD$*P{T$/L$0 "7 ЋD$@7T$$D$;D$rt$l$0L$(t$,+Ήl$0;L$(Bt$(_[^]^]S\$ Ul$ Vt$W|$@r?ƍM D$ uQu`h@jSWzM @@@L$ uͅtuE Pu`VjSWz_^][ød̸e̸$e̸e̸e̸XeVt$ t$ VPv` ^S\$ Ul$ Vt$W|$@r=ƍM D$ uQu`h@SWM @@@L$ uυtuE Pu`VSWa_^][V@W|$;BtGS\$Ul$;r-sCPPC Ps`Wt$,Ut$4+;Bu][_^_^Ul$WExD$;r>+SD$3ۋD$Vt$+ƉD$d$uu`PVQD$(߃;\$ v^[_]S\$ Ul$ Vt$W|$@rFƍMPU D$ IQRu`h@SWMP@U @@L$ u΅tEPPE Pu`VSW_^][̸(f̸\f̸f̸f̸f 3ĉ$$V$W$uRVHh%t?V5h%t,D$PW=v`D$PD$hPQ v`W$_^3̋L$Ul$Wx;r5D$+SVt$3+ƉD$q`PVmL$ ߋD$$ ;v^[_]S\$ Ul$ Vt$W|$@r=ƍM D$ uQu`h@SW腰M @@@L$ uυtuE Pu`VSWQ_^][S\$ Ul$ Vt$W|$@rFƍMPU D$ IQRu`h@SW课MP@U @@L$ u΅tEPPE Pu`VSWw_^][V@W|$;BtGS\$Ul$;r-sCPPC Ps`Wt$,Ut$4+;Bu][_^_^̸f̸,g̸g̸`g̋D$=@s(u$L$yt D$L$zD$L$̋D$VW|$p`VWdž_PGP_ _^̋D$Vt$ Wx`WVLJ_PFP_PFPr__^̃|$tVt$W|$ wXVr_3^VpaX| FP^aX| FPLa_^Ul$WExD$;rNT$+SVt$3+։D$ T$d$M`uPPQ2PVfT$0߃;\$ v^[_]S\$ Ul$ Vt$W|$@rMƍUPD$ M`E RPPPQh@SWy UP@@@L$ ut%M`EPPE PPPQVSWqy _^][̸VD$Wx`t PWt$ t$t$$у_YS\$Ul$Vt$$@rP΍P L$IpRPPWh@USaD$8 @@@L$P ut!p PPPWVUS ^][_YS\$Ul$Vt$W|$@rXƍWPD$ wO`G RPPPQh@USg$WP@@@L$ ut(wO`GPPG PPPQVUSSg$_^][̸Ul$3D$T$SVWZ r+L$(S"J`$D$0PPQjjD$/PD$HPhD$8\$7Ȁ @ωD$8$L$ " ڋT$Z ;n_^[]S\$ Ul$ Vt$W|$@rNƍU D$ uM`RPPQh@jSWTh$U @@@L$ ut&uM`E PPPQVjSWh$_^][̸h̸h̸i̸i̸i̸pi̸D$,D> D$(jP] jSN(_^][L$35ËCGFPGPPUVjW gVW gWUKL$P,_^][3VW|$ GXw`VPt$v y#hhmhhjD3_^ËHtu|$u džЎ dž3_D‰^̋D$H`tp PQt$t$t$ ҃Ãxt PQt$t$t$ n à PQt$t$t$ ̋L$Ul$WI`L$ x;r8D$+SVt$3+ƉD$QPVЋL$ ߋD$$ ;v^[_]̋L$Q`APPA PRt$ t$t$$YËL$Q`APqPA PRt$$t$ t$( ̋L$Q`APqPA PRt$$t$ t$( SVt$ F\ ^`t.FPvPF PSt$,t$(t$0 ^[ËL$T$W|$r>UFPvPF PShRQL$$>dždž@ |G _xdždždž^[Ë\$_^3[Ã~;;|~3xG ;t QNhhzS xt_|^[Ë\$CwuSt$ G0P _^[ËL$Ai_RQG0Pt$$: _^[Ë\$u+|t$ x _dž^[Ã|+ÃSt$ x t|+PxP._^3[Ã|xP%L$$ ~ |;~|+xQPt$$A| xIDuu_dž^[à L$|Qt$ +xP|xP%dž_^[Ã|$ L$~fG0AG8A G<dž O;G< ȃuO<G;_^[ËL$tY`t;6tG 9xu_A x^[hhz|R x|xP _^[_^[:=D;;;<<=3=}>    ̋D$L$VW|$p`u uG_^Å@XSVdPQt $hc h6VS"džu9t$xt|WS0# dž[_dž^Ã|WtP" x dždž_^̋D$H`D$uGD$P`t ;t3Ét<9uÅtǁǁS\$Ul$Vs`W|$u u_^E][ÅdžCXVdPWtU|$,tz"džc"dždCX Q +QP="džcS|$,tdž6dž@LCX Q +QPdž6 toEC _^][̋L$D$Vq`@B$Bdždždždž  dždž^ù+L$L$Aw ^3^S\$uC w yt |$t%[3^ËD$tSPA0džP [^Ãyttt$t$PM1 tdždždž^ËD$<@`t;B<^Ã^ËABAPBAAB̋L$S\$VW|$w`u u _^C[Åt[GXVdPQt hc h6V P/dž dž@t#+PG SP dž_^[ËL$VWy`ptu<|$u5AXWPt$D3LJe ЃDȉDAXWPt$D LJ@eЃu LJ3pD_^y!h&hzhhj3ø̋L$qA Pq`t$t$t$ Q;̋L$T$;Prqq`Rt$t$%̋L$Q`APPA PRt$ t$t$$ËL$Q`APqPA PRt$$t$ t$(6 ̋L$S\$Vt$ W~`u u _^C[Åt/FXW~PQtw` u C_^[ËN CA_^[ËL$Q`APqPA PRt$$t$ t$( SVt$ F\ ^`t.FPvPF PSt$,t$(t$0 ^[ËL$T$W|$r>UFPvPF PShRQ L$t0_^ÅtPWRQPWRQPY ɋ_^Ãxu+/Q0PP t$^Ã0jPP dždž3^S\$Ul$Vs`W|$u u _^E][ÅtyCXV|$$PWt>dž@edžpt>džedžzCX Q +QP3> dž@etoEC _^][̸&D$SUH`twT$VWtet$ t]|$$rTD$D$t PUWRVT$(_^][Yp WRVPS(u _^][Y_^]3[Y]3[Y̋L$S\$VW|$s`u u G_^[ÅtQCXVPQ =h@eV P/' dž|$ omE@t#+PC WP2 dž_^[̸ 3ĉD$L$ D$$S\$,UVq`L$D$ uu^][L$38Ãyu tWu~uE|$<+WPA PU&dž_^][L$3Ãt$+SD$3ۋD$Vt$+ƉD$d$uu`PVD$(߃;\$ v^[_]S\$ Ul$ Vt$W|$@rFƍMPU D$ IQRu`h@SWMP@U @@L$ u΅tEPPE Pu`VSW_^][̸z̸z̸P{̸{Vt$ W|$ w`VM3O`FF O`F_F^S\$ Ul$ Vt$W|$@rTƍU D$ M`uPPRQh@SWb U @@@L$ ut$M`uPPE PQVSWb _^][̸{Vt$F`0t$VRPF`Pt^̸膺|$ t[VW|$D$PjjWJD$=up@up8 3(DWZ7PGPVt$$ _^Y3Yø 3ĉD$SUl$(V3D$ W|$,W7؃vh}hh| SD$PD$PU;t_^][L$3Zt$؃t؅~jD$PjjjW}tjSjW;ÙPWiL$$_^][3̋D$t;t!HtËL$ ~D$@`3ËD$@`D$Vt$VPN`^S\$ Ul$ Vt$W|$@rAƍM D$ uE`QPh@SWsM @@@L$ u˅tuE PE`PVSWr_^][V@W|$;BtKS\$Ul$;r1sCPPC PC`PWt$,U?zt$4+;Bu][_^_^Ul$WExD$;rCL$+SVt$3+ΉD$ L$d$uE`P1PV+SD$3ۋD$Vt$+ƉD$d$uu`PVD$(߃;\$ v^[_]S\$ Ul$ Vt$W|$@rFƍMPU D$ IQRu`h@SW_MP@U @@L$ u΅tEPPE Pu`VSW'_^][̸}̸L}̸}̸}̸̸}̋D$p Dt$ D$t$ p ̋D$p t$ ̸8~t$ D$t$ p  ̋D$p t$ ̸~t$ D$t$ p ̋D$p t$ ̸~̋D$p t$ ̋D$p 4ËD$p Dt$ D$t$ p  ̋D$p t$ 0̋D$p ËD$p t$ D$t$ p l ̋D$p t$ ̸(̸x̸̸̸h̋D$p At$ D$t$ p A ̋D$p t$ @̸̋D$p ø̸X̋D$p t$ D$t$ p  ̋D$p t$ ̸t$ D$t$ p % ̋D$p t$ @$̸t$ D$t$ p ̸Ht$ t$ t$  tjjjjt$觳S\$UVW|$33tSVUUUWS|u_^][Ë|$(uG_^][Ã?t%jVhjjjfjzV@_^][w^Ij[D$ hPu%j^hjAjfjzV_^][Wt$$t$$V=~*PS/tt$$VjjS蹲Et$VBV虪_^][t$ t$ t$ ߳ tjjjjt$̸P膮 3ĉD$LD$`S\$\D$D$hD$ Ul$\Vt$hW|$x|$tU٫jjjSU蜴tK\$|D$PU~%U)+t-U+|$PWT _^]3[L$L3虭PË|$WD$ PjjU!t3~GD$+)t$D$40UEPD$$P6g L$$1~!D$G;|_^][L$L3P_^][L$L3PËL$\_^][3P̸l 3ĉD$hD$tSD$3ۋD$|Ul$xVD$3D$W$PD$$UPq D$PD$@Dt7VWЃ_^VW:u_^hh܂hjgj7s_3^Vt$tnhh܂j FjP蠘PF t@Tt VЃFFtPaFFth1P5V^Vt$t&=th]h܂hjwjur3^vƛF^Vt$>tth3h܂hjxj.r3^voXF^Vt$>t"hHh܂hhjq3^v=F^Vt$>thh܂jjyjq3^vF^̋L$A t@Xtt$jjQЃø̋L$A t @@tL$3hh܂j _ uhh܂jAjjjq3@@@ @@@@W|$ G t@Ltt$t$Wt$Ѓ_ht$t$W7@Ph,ht$$L _W|$ G t@,tt$t$Wt$Ѓ_ht$t$7Ph ht$$ _W|$ G t@ tt$t$Wt$Ѓ_ht$t$藵7耄Phht$$ _̋L$tuT$Ax Q=t3Vt$t4jjjVt!D$ S3ۉFÅt P諘[^3^Vt$t4jjjtV{t!D$ S3ۉFÅt PKU[^3^Vt$t7jjhV(t!D$ S3ۉFÅt P:[^3^Vt$t4jjjVt!D$ S3ۉFÅt P{[^3^jjt$t$t$ t$ jt$m̋D$tH t I0tD$3̸fVt$ D$PEt03D$t P<^Y̸&S\$Vt$D$tc~t2F t@Tt VЃFFtPF;^u~ t ^[YËFtP距FD$Wtt$ PD$PE D$ SPED$ ut PnD$u%hh܂hhjl3_^[YÅt ~ F^_^[Y̋L$9tjMh8jjhjrl3jqt$ t$t$&9̋L$9tjMhPjjhj2ljqt$ t$t$8S\$ W3trD$~jUVt$n tN$t PSQ蠶 ~ t%~!WSU) ujV3^]_[Ã~$tjVV ^]_[_3[W|$ u3_UVt$n tQF$tJSt$WPS ؃~ t~SWU蜘 [^]_jVeVo [^]_^]3_̋D$P D$ ;A}3ÍD$Pt$ RL$ NʋS\$ Vt$ WCN =w'w$w~ tCj1Q5 ~t$t$Sv$۫_^[Ã~ tD$ _^[3_^[ËD$~ _^[Ã~ tD$F _^[jVZt$$t$$Sv$yVQ_^[jt$ Q蜕 y_F ^[ËD$Qp u_^[vwNwxww,w;wv{ȅuËD$@ H @Vt$u3^v kF F F^̸HS\$UVWs 3jS諩~tFFP.nn:~|hhzh >~hh{h ;F}hh|h͗ >+~F|WPs$苲؃ e;~h<hh膗 ^~~hDhhc ;F}hhhE +\$wn.9l$\$;jt$O±,F~hlhhЖ F+~;OZWt$P蝛~ FPZPF|PF =~hhhf ;F}hhhH Ft$蠧_^][ÃhVUUU<@Wt$F|P辍 =~hhhޕ ;F}_hhFWt$F|VPFP>~hhh薕 ;F}hhhx |$+ߋ>\$FF|WPD$p$"؃ ;~h<hh ^+~~hDhh ;F}hhhڔ w\$F~6Wt$ZP薙 ~_^][t$D_^][_^]3[̸S3ۉ\$9\$ u3[Ul$ Vu 9]$jU营~tFFP^^W;F}hhh +^|$0;ߋFOÉ\$=|hhh賓 F|SPt$4菘^+\$8 F|$9uF|$0|$D$ ~+FPZFPu$Z 'ju$|$(~9Ft3~~nMjt$,语t F>~"ZD$3ɋډL$G< uM~ t F <ǍN+PSD$$PF|PQ衈*|$u#~tFPdL$AL$;|BZ;t!ƁZ+3~d$ A;|FPL$FZ;|$;u*F F;+3Ʌ~  A;|~} ~jt$,Pt_ZF|WQPЅ ؃~7Y=u K7X=uK;tZ+U9PQ0  n3OÉ"UZPN|VQFP1FFxP|$;Nj\$,NF|WPSҕ|$ ~;>u F)|$߉\$,|$l$(Ml$(D$ \$UD\$ _^][^]3[̋T$Vp@u+PRt$ ^SUl$VW|$Ew dw$^^Ft$ t$ Uw$舡؃_^][Ã~~ۋ;F}hhhɏ +^u99^t9^t_^][Ë;F}hhh莏 +^t;Ft"jjW j;FujW t1F.PZPF|P FF딃~~NVF|FPQ訇 cjW8t$(t$(Uw$WW/_^][Ð:dӁ]lpGjvhh\ _ȃ uËD$AA AAAA@ H @@Vt$u3^v F F F^̸p̸S\$ Ul$Vs WjSl$(蛞>+~~.FWPs$؃ ^+\$ҋD$FD$VO|$WPVQR^D$+F>D$~.FWPs$f؃ ~?^+\$֋D$F~=\$tt$蹝_^][Yt$襝D$$;t+ŋ_^][Yt$腝D$$_^][YjS`F_^]3[Y̋L$S3ۅu3[ËD$Vp l9X$cUl$~@F+^;OSPQ胐^ F+\$9D$u FWd$~hQp$b Ft*9.N>~1WPt$ 觏 ~+|$~D$:Dߋl$jUU u^_]^[ËD$jPƛF3_]^[^3[S\$Ul$Vs WE=wM$lv~jjjF jVƍt$8t$8Us$腛(_^][Ã~~t$ t$ Us$d_^][Ë>+~؋;FtjjSF xҋ;Fu~ uVF PFFPӌ ~_^][Ë~_^][jS谚t$(t$(Us$ϚS觚_^][ËD$ 0lj{ _^][Ë\$ { WJVW耉 $_^]C [ÍI,e6#kVjshhn u^ÍFPJD$ FFF Fp @ @^Vt$u3^ËF P跇hv 誉v F F F^̸Vt$t\FS\$W|$ tjWjSjVЃ~7F Wt$ F t$ jSPՊFtjWjSjVЃ_[^5LuhPSh@jS̋D$ L$;tt$PQ蛋 øD諂+PPz%Po:PdϧPY货PNɧPCP8P-ȧP"Ph .hhx]h .hh]DgPh hhm]h hhY]tPPhP#hh/]hP#hh]6Pp@訦PbPWPLWPA\P6CP+P ۠PP 赠Ph hh\h hhw\@PdPyP>Ph0hh4\h0hh  \PupPjP_JPTPI$P>@h`!hh[h`!hh[PPPݜPh81hhs[h81hhĐ_[@h81hhȐH[SP8PMPP|h4hhԐ[h4hhܐZh4hhZ@h4hhZP)P~PSPPPPP PPPhUhhP8sP-P"PhDVhh Y@hDVhhY7PlPPPP@PP POP4P~)PshVhhXDhVhh$X3oP=(oP2oP'oPP蜨P豨P薨P諨PPhhh,fX@hhh8OXڨP菨P褨P艨P螨Px賨Pmh@hhDWh@hhPWШP:@肨P,藨P!|P葨P 覨Phhhh\WhhhhhxW, PPP h hhtFWh hh2WmPPGPh8)hhVh)hh5VDPh5hh+Vh5hhVh5hhVzPDP94P.h5hhjV@h5hhSVPPPPP ̋D$@̋L$D$!A\̋D$@̋D$@ ̋L$D$ A\̋D$@\#D$̋L$P(tL$@t%=wtw =t L$ SV3W9t$tX\$x vhhh̑} CWPt$貏 ;t_^[Å~WCPC PB _^[̋T$ A$tT$At%=wtw =t T$)9ujjt$_ ̃|$t;SW|$ X vhhh̑| SGPt$D _[3̋D$V0(tAF=wSp$`%^ø^ÍW=w*($^ø^ø^ø^V|atxu3P';^7>)0"7>̋D$D$A̋L$D$!A̋D$uË̋L$D$ A̋D$@#D$̋D$@@̋D$u"h9h̑hhjIË@̸F~S\$[YUl$V\$ u @}$6} ,~4tU W$jU蘊>+~~0t2~*F8WPu$؃ ^+~0uҋ\$ F0;Fu FT$=v +WF8RP}>+|$( >\$ r UtCAjUىUD$ _^][YUЉjU uF_^][YjU螉_^]3[Y^]3[Y̸|L$ W3|$u3_YS\$Vs 9{$9{ Ul$ ~0tg>+~F;O8WPQ|~ |$+|$F9u6FN F+tPF8PF8P0  F0tk+PF8Ps$i ~N~4u SDt&~4u St~~ ~L$7jS_3]^[_YË|$jSHSR ]^[_Y^[3_YS\$Ul$Vs WEow=$FFF ~FF0~4t$ t$ Us$_^][Ã~~ۃ~0tՋ>+~ʃ~0uSu_^]3[Ã~0tF0u~F~jS]t$(t$(Us$|ST_^][Ë~_^][jt$$FPq t{ _^][Ã{ tD$ N_^][3_^][ÐvKٚVhhh+w u^ÍFPFFF FFF0F4tD$ p @ @^Vt$u3^ËF Pqhv Zvv tF F F^̸̸Dx 3ĉD$@SUl$PVW} w_8G9 G: G; ؋@9SGt$D$$jPP6D$,Phlj0,NF @$t,WVЃuj\hTh^_L$T3rXj`hThjoj>VWL$`3^_3rXjt$V ujwhTjAjqj2>3^ËL$D$ A t]@(tEQVЃuhhThFF HwrW$1q^hhTh hhTjvjqj=V/3^̋D$t$POLt$D$t$t$t$PLt$D$t$t$t$PcMt$D$t$t$t$PM̋D$t$pPC̋D$t$p`Ct$ D$t$ pNAWD$D$1PjQ u/jch4jrjujV73_^]$3kËGSuX P?؋HD$$D$L$(u3$uNIFu+jD$0UPb D$VPD$4Pd t$$D$0t$,Pd W}jD$\PD$8PamUy3[_^]$3jþ;~VjD$0UPa  WD$XPD$4Pxc jD$XPD$4P a F;|\$S@~hLhh4e SPD$\P$P|jSy~hhh4he SyPSyL$h+ȍD$HQP3j$D$TP$PjSt$y_^[hhjrjvj0Vy_^[̸\fd 3ĉD$XD$dSUVt$l3W|$|3Vt$$D$D$IuhhhuV @vhh hB_ :?1OAD$$D$$1Pj&}؃ u h VCtP7;thhj{C t 0UEjL$ QjPjuh)hj}t$DPD$uh/hj}y8th4hj~d@sx057L$,QUt$ PVW$t$8$t?$D$,jPjjt$4aD$hhjrhj.D$(UP_SQwL$t D$_^][3+b\̋D$VqdT$ t9u%Hu#hqhؔhhj-^ËT$t'u#hvhؔhhjO-^t$t$t$P֋uh}hؔhhj-^hjhؔhhj,^Vt$WxhD$d$:utP:Quu3uPD$t%P蹢tPjjhjV_^hhؔhhj?,3_^t$t$V׃ _^hhؔhhj ,_^W|$t5x t/Gt,PR]uh hؔj&hj+3_Vh$hؔj(] GFGth.hؔj jPQGFG th3hؔj jPPG F FFGFWV@ Ѓ~^_V^3_Vt$tLt @tVЃFt P跷F t P觷Ft PG[VZ^̋D$@jt$ t$ Q t$t$ j1 ̋L$D$A D$ A$̋D$L$H̡LuhE ]Lu3t$Pdt5L̋T$L$BAB A BABABABAB A B$A$B(A(B,A,B0A0B4A4B8A8B!^@W|$thv#ȃu hhhjij!3_^Ã|$u _^9s hhhjij 3_^t$t$Wt$@PVЃ_^hhhjij ^Vt$t4t.xPt(F@Lu^VЃ,F^hhhhj( ^Vt$x(~t jphhhj^@W|$tVv趱ȃujshh#|$u _^9s jshhhjp3_^t$t$Wt$@(VЃ_^jlhhhj5^Vt$t4t.x(t(F@$u^VЃ)F^jZhhhj^̋D$t;t5I0t.xt"hhhhjÉD$hhhhjbVt$t4t.x0t(F@,u^VЃ)F^j|hhhj^Vt$x8~ t#hhhhj^@W|$t\v蓯ȃuhhh&|$u _^9s#hhhhjG3_^t$t$Wt$@8VЃ_^hhhhj ^Vt$t4t.x8t(F @4u^VЃ,F^hhhhj^̋L$uD$@$ÅxD$;H$@ 3̋D$L$HW|$t|tvx tpt#hhhhj _Vt$t>u诪u^_Ë6W@ Ћ6詨^_hhhhj_Vt$t4t.x t(F@u^VЃ)F^j{hhhj;^̸OVWt$3t$|$u_^YVn~-t$t$ jjjV~D$PV|$V_^YW|$xt j_hhhjq_Vt$t(>u)ujjhjAhj;^_Ë6W@Ћ6^_jZhhhj_Vt$t4t.xt(F@u^VЃ)F^jIhhhj^̋L$D$AA̋D$ PD$RJ J D$ ABЃ̸dM 3ĉD$`S\$tUl$tVt$tW~@tau@@VSUWЃ_^][L$`31MdWVSU@@WW_^][L$`3LdËH@3D$D$POHD$VPF tn|$tD$(T$RSUPA@ЃD$PD$4PD$ PIC D$D$PED$u tt$D$4PSUvF3_^][L$`3>LdÅt VSjWу6xPjSjW~L$p_^][3Kdjt$t$t$t$t$%̸dL 3ĉD$`SUl$p3Vt$xt$ E9XHD$PGD$UPjE u^][L$`3rKdÅtD$$T$R$VPAHЃD$PD$0PD$PA D$PIDu5t1t$D$0P$t$u^][L$`3JdËL$l^][3Jdjt$t$t$t$t$Vt$~ut$t$FFu^ËW|$@uQuMD$ Pt$ 芤~t$ +PDu jUh,hhj3_^Ã|$ Nt0@DtVQЃ~F@=Q[0_3^Ë@4t(_^]3[L$3G SWPy t$L$,_dž^][3uG ̸DG 3ĉD$@T$HD$LS\$XUj`VW|$`Hj@PD$PG @~$VnWSV+yD$ VPwWD$SPqG fo P3oDfDoD fD @r؍Vnj@D$PVxfo `3oDfDoD fD @r؍dVhC hpPD$,2@ D$t@hWKT$FuT$I$FuT$\$(L$t%;D$PgN~N  A A΋t$XL$T$jzhph.hhphhhph hhpjkjdj  D$L$,;t PU=tjW3][_^L$434A8ÍD$,;t R"=t WUL$][_^L$43@8jlhpjzjdj L$D3][_^3@8UW|$G=Jl$>U3D:(3~!J<u@A;|S\$Vt 3tFu xtwEnD$Ft 9~ F t U<h?hpW= uVhThpjAhj t93t V^[_3]h&hphhj Y 3_]ÃND$WPU@D$( ljn~ Ft3L$^[_]h̸ ?Vt$t$D$D$PD$ PD$PD$(P.=yf |$t&th hpPhj 3^ t$D$Pt$ tL$^ ̸T> 3ĉD$PS\$`Ul$`Vt$ {WjSjPPL!O~BhGhpP/< u_^][L$P34>TjSGPV!#j hUT _^][L$P3=TWVUaTD$ ;t V9_^][L$P3=TjhXXU+TL$h ^][3=TVt$t`~tZSWjv j<\$ t;t6 D$jjv L$jP=v vt$,=F D$_[^3^jt$t$t$̋T$VtFrt?W:3~,T$S\$t;}  @;|[_^ø^VW|$Ǚ4T$ t-N9 |&Rt+ϸ2_^_3^8SVt$ƃ+΋t$ и3W|$ӅT$DD$u_^3[Ãf Uj;| ~FuhhU9 hhUQP:u"hhjAhj I3]_^[ËT$‹+@~P9jP;T$$ ~.F" \$>~NI|uH]_^[̸f;S\$UV3W|$}pt7uj{8l$mMEL$~6F F K~vhhS8 D$ u<0<9F0;|>0p9g FÍHL$;N;A;ԕ4t1w,$x2}dEHEE EEEB7 tE><0<9L>0L$ 0|x9s D$ I H; |\; ԕStuiu +B|t\$SjUT t3;t$^][_^][3_JW]bgl(f4 3ĉD$$W|$0u j1u_L$$33(SD$PD$<0<9F0;>09 FÍHL$;;(;Lt4w/$kdEEHEE EEEB4 tE<>.u&F;J><0|AI<9 ; D>F<0};t)><0|<9̊L>0L$ 0|9 D$ I H; (|; Ltuiu +B |t\$SjUkP N3;t$^][_ÍIjuz,0 3ĉD$(D$4SUl$8Vt$DD$ D$W|$LPD$PO؃u0jsh̖hhj 3_^]3[L$(3o/,ÅutWVSO tԋC2|=}WVt$U WVt$UL$H_^][3/,̋D$Hu D$u D$3̸P/ 3ĉD$LD$\S\$XUl$`Vt$lu5D$ P0 D$8PD$PN u@^]3[L$L3.PËHu PD$8PuPD$8P*tu3D$ P0 D$PD$PEN uF^][L$L3 .PËFu D$VPkD$VPUD$PD$8PUSOL$h^][3-Pht$2̸hjjt$t$̸-T$VqAuD$T$ +D$PL$D$ Q^u$D$P(u3ËD$t $QPI(tVt$FuVVS\$Wt;ut9t;~u6vW( #_[^ËPjW( u_[3^ËFUo85SrhhUs7 SvU7 ]_[^3^ht$t$t$ ht$ t$ . ̋L$T$VqB%;t3^ERQk&t^ËD$3S3ۅu[ËPuV0~^[Ãt[Wxu_^3[3҅~IB ;|t_^[̸ F+ 3ĉD$Vt$>F}5Ft P&hdhj( Ft @~u*hhhjAjvj J3^L$3* ËD$y F3ɋt D ArWy3҅xIND< BOyL$_^3.* VW|$ t$7w蜰 uhhjijwj _^Áu jVU_^S\$ VWuj.'uhhj:d|$ tt FFW蝷t @9}KhhPv(u.hhjAhj ;t V%_^3[ÉFvW葰u F_^[̸)Ul$ Wt}uj>&u_]YGS\$Vt$hh6D$CPd& D$u9h hjAhj tt9}t WK$^[_3]YÅu GtoG>utFKVӍs:u$tJNI:tu CEIJN~6d$vЍRIFG>utFKSVP#( Gt P#D$Gt}D$L$^[_]Y̸ 'VW|$t7uj$u_^ FSUl$$t$(ED$$D$PD$PD$PD$0P%yf1|$ts#D$h:@hP$؃ u>AhRhPhj Ytt97t V"][_3^ FD$t+L$ 9ut AHL$ D$PQS&D$ D$ Ft P@"^D$t7D$ E][_^ ̸F&T$32u3YUjVW:uLruu35u ~,M2'=~  u;~ 8 u@;|S\$t|3tF u ;[_^]YÅuQrV% ;[_^]YËBNQЀ:u~ JNI:tIJN~vЍRIF;[_^]Y ̋T$SV33ۅW|$NЅUnIJtjGa|z~QA|Z~G tB0|9~8't3(t.)t)+t$,t-t.t/t:t =t?EE݄u]t _^[øu_^[W|$t3_V7%yH@u-O3~ Q<uzu:u ;|;}^3_ú;~IGA;|3SUo3҅ۉN؅MzKtkEa|z~QA|Z~G tB0|9~8't3(t.)t)+t$,t-t.t/t:t =t?E׊MEu|$t][G^_øu][G^_̋L$t;T$t3;u-Ht#trqHt t{ 3ËA+BÃ̋D$xu8t3Ë̋L$ytD$jPڄL$ D$L$ D$u ɁHVt$W|$tUtPVu(R u_3^Pjt$ _^jtPWt$h _^ËD$ D$xtD$jP3D$8D$u p_^̸,!SUVW|$@t7u0ϯu%hhjAhj 3_^][,ËL$Dl$H L$u3)D$,+PD$(PD$(PD$4PD$ P؃\$x%L$X;L$$tOhhjehj \Ft97:D$P%PVR3_^][,ËD$T;D$ thhjh륋L$(T$;D$,vhhh냃!uD$D+͉L$(D$,;l$LIu 3QD$PL$0T$D$ujQD$PjՃ t&PVT$;T$,s=L$(\$hhjqhj ED$XD$$+PQ!t7D$D_^][,V^_^]3[,̸SVt$ 3ۅu^3[UWVʭl$4Ox8jWV5Pչ+;jWVPՃOyȋ|$4WSjL$8 D$t$8 D$,WSjPL$Pt$ +ޅt!D$V@Pt$T, ~\+u߁?suL$4t$T$\$1;rgt$5hh4hZhIhh4jAEhh4h4hh4jA&hL$P]_^[8hh4hjkj t$]_^[8̸VSUl$VW3D$WUT$$jZhPV؃uj\hPjAjtj 3_^][ÍD$\$PUT$$l$(VSU-;t=~++V;PU, ;uSD$_^][D$ScD$_^][W BP(ujIhPjjuj 3_Vt$jjjW3#t$$Wt$$W=% ^_̸&UVWt$D$D$3Pt$$o$ D$ u"hhPjAhj O3_^]YS\$VPS+ ;t4~-+D$VPS+ ;ut$Z[_^]Y3t$D[_^]YW@P'uj{hPjhj 3_Vt$jjjW"t$$Wt$$W$ ^_̋D$3S3ۅu[ËP uV0~^[à t[Wxu_^3[3҅~IB ;|t_^[̸  3ĉD$Vt$>F }2Ft P-jQhlj Ft @~u'jUhljAjpj 3^L$3 ËD$y F 3Ʌt D ArWy3҅xND< BOyL$_^3 VW|$ t$7w uhhljijqj _^Á u jV赢_^SVW|$uj uhhlj:\\$  S{ EFt @9}KhhlPvju.hhljAhj ;;t V~_^3[ÉFvS_^[̋T$3SVt$ WxѸL$_^[Ê$6u-f9X G||$Pl$@jWhhPD$,t$hVD$,ghhPD$@D$4؃$D$5-D$ D$ PWjt$dD$4P|$,D$WPD$,P VD$PD$,SPz\t$LFt P>D$F ^3ۃF hhhhj 3D$$Pl$tWUU ^]tt$SmS D$_[,hhhhhjhj D$$9hhjAhj D$$|$,V̸UVjt$T$jRhU ujShjAhj ^3]YÍD$t$Pt$T$jt$ t$0t$0UV tV^]Y̸t$D$D$Pt$pL$ u3Yjt$t$ t$ PQht4$iY̸ VW|$D$P^W|$0u6G t0j^hhhj D$ _P`^SUjt$@T$8jchU؃ujehjAhj D$\$Pt$@T$8jt$@D$$P4tEUD$SP t2USSSt$LD$$7wPXjw jmhjhj #3][D$ _P^jjt$t$t$t$t$̸@V 3ĉD$Ë\$0 D$XD$(t$t$ t$PD4LPhxFFD$(;|֋t$;l$ tGD$T$L$,\$4 \$XVRPPQ&x_^][L$43y8ËL$D_^][3d8`U;5̸vVt$W|$jhV׃ u _^D$uD$ 0pVWXx_@^ËL$ SUjAD$D$PL$轏h=hU؃t+D$ \$ PD$P菏USVWSy ][_^][_F^̸ 3ĉD$L$S\$$Vt$,W|$4v_^[L$32Áv9Qh̘D$j P>j D$$PWփ _^H[L$3Áv9QhԘD$j Ps>jD$$PWփ_^H[L$3ÊT$(L$v$ "¨atnt.tjD$PWփ _^H[L$3\jh Wփ jD$PWփ _^H[L$3 èt<PhܘD$j P=jD$$PWփ_^H[L$3À\TKjh W֋L$( _^[3HS\$ Ul$VWtIt$<.;t>IjD$D$D$PST$ tF;u_^m][_^][SUVW|$3~\$l$jhRSՃ tF;|_^][_^]3[̸& 3ĉ$$SU$V$D$83W$|$Hl$ VUWD$Dމ$\ u$%=wwtX=t$=uD$D$DŽ$eD$D$D$$ D$DŽ$HD$D$DŽ$=aD$D D$D$$D$tD$,D$(D$,D$(t$<`VL$Dȃ3L$DD$0$IT$HL$4tQPV}D$8t];Fut$t$(U׃ \$L$P3VFu+VQt$(T$( ;}*$t+Wt$$t$$ t$(|$ t$0t$(׃ bD$(|$$ut3t$Ll$$ PUW[L$4؋D$0I@L$4D$0;D$D} t$Ul$VCVBu]_^3[Ët$+t 6虘>]_^[_^3[S\$ VWhlt$D$D$Pj\tXWohlWbL t>Ul$VpCVXBu]_^3[Ët$+t 6y{>]_^[_^3[S\$ Whlt$D$D$Pj[u_[VWhlWK u^_3[Ë|$D$t 7A7^_[S\$ VWhlt$D$D$Pj[tXWohlWbK t>Ul$VBVXAu]_^3[Ët$+t 6Y'>]_^[_^3[hlt$t$t$ZVt$u3^WBu h&hjAhj 3_^VWDt$WvW@_^Vt$u3^WmBu hMhjAhj 菳3_^VWDt$WWN@_^̸D$$u3YPD$PtVhlt$t$ Phlt$I^YVt$u3^WAu hhjAhj ϲ3_^VW0Dt$WVW?_^hlt$ t$ >P ht$BI̸hDht$t$t$Xht$ t$ O ̃|$D$V0utFu^ø^̸ht$HhVCt$hht$2H̸hBht$t$t$Wht$t$t$jWht$ t$ N ht$ t$ nN ̸VWhМ3RBtit$ wSsGt1ut&Vwstt$t$VC _^hМWGt VSu_3^t$hМhМt$F̸МhМvAhМt$t$t$ VhМt$ t$ .M qL$3Vt$t)D$ Q@t%l^o^̋D$V0u^SVyqD$Ått@PVjVLq[^Vt$>u ptG6t$t$li u5t+D$Q@t_k3^n3^ø^̋D$0t$uhD t$k3Ƀ̸ ̸<̋D$HD$̋D$HD$̋D$V0D$;pu^SWy+SvpT$xL$t/t ȈBOxyЈIyL$9_[^Vt$~"hhhhj 3^SW|$t t333҅~ d$t ::B ;|_[t+ȋD$;Huh놋D$^̋D$0ht$ L' ̸`̸|̸ D$Wt$0D$t$08t$0D$(;t$0O|$hPPD$ D$$PD$ PR 2S\$;t jS UVD$jPjt$ D$+PvD$+PFWp`t$3sn~^Ut$o3SXn ~(WSoPh6ntZSG0n;|Slt$En;|\$ t$elVtT$$FL$3^][ _ ÅthVAhhj:hj ê3^][_ ̋D$V0~tVx.Vx!Ft$ W8tWp6B >_^Vhhj~ t9 mt.5Ft"D$F FF0^hhjAhj tt P1kV(3^W|$t>V7t6vh`86lF t PV^_̋D$pD$ t$0t$3҃Nʋ̸ ̸t$h2ht$?h:t$hht$?̸hF:Vt$t_39^3^Vt$ vVV)uVt$ ^SUW|$VoG Ul$ ؃u_][3^Ëu x1 ~xPы x1 tKF~~xPуt x1 KOm3~Ox?Px1 t!E EFFGx&Px1 uP1 EFEG;|D$_+(D$(][^ht$t$t$jMht$t$t$JMht$ t$ nD ht$ t$ ND S\$UVWS33ni~=l$IVSjjjh D$(D$(UP@xSF1i;|ʋ_^][{gh`8t$2i̸ SUW|$33D$ G t P&_ 7hu__][ hD$V73hU7iD$t$9Ft+Nh؅St$$hFD$h6D$0D$pv tcVSwhtU7Eg;`\$ jSQhhPGD$t&G D$PS%hVp;3hP;t$$g^_][ ø SUVWD$3D$;gD$l$ 3u1g~`Wuh؃D$9Ct+fVt$zgCD$SVagt{uGf;|jjhPD$jP>VutDEjjhP@D$$D$$PD$ P=h@;t$(fE_^][ ËD$h@;PfhChjAhj H_^][ ̸̋D$V0D$Ht4Ft PCjjpa F^ÍFPVj vdAv8fv<vD cv@vH*vLF(tWP^ÍFF PVj FF(F F8F<FdFD ^ht$8h3t$hhhht$8̋L$T$ tBL$tB̃D$&t$t$t$t$t$j ̋D$@0·̸hhh2̃D$hht$t$t$jG̸vSUl$Vt$D$ ED$Wt>uD$\$ D$hhSPVGtCEL$+؅~@SD$ PGdP> u&9D$thhW67t_^]3[YËL$ljM_^][Yht$t$t$Fhht$ t$ = Vt$ >SW|$hhjW=؃ ~tjwdxÅ~ hhP D$u_[^ÍD$PW6_[^Vt$ [^ht$ t$ < ̋L$ht$ @01< SUVt$Wt>uhԠhh 3l$hhVUs<؃ ~&t"Vudy t>_^][_^][Ë_^][hlt$B5̸lhl0ht$5̸h/Wt$ 覽u_Vt$ tB~duhl/Fdt(vdt!~u `FtWva^_W誌3^_Wt$ 6u_Vt$ t?~duhl"/Fdt%vdt>u '`tW6`^_^3_̋T$Bdt@tL$tBd@@3̃|$Vt$u,t!Fdt@tPbFd@^ÅtH~duhld.Fdt.vdt'~u bFtt$t$vQ ^3^̋T$Bdt@ tL$tBd@ @3̃|$Vt$u,t!Fdt@ tP_Fd@ ^ÅtH~duhl-Fdt.vdt'~ u _F tt$t$v ^3^Vt$Fdt@thP^Fd@^Vt$FdtthPs^Fd^hlt$t$t$Aht$t$t$zAhlt$ t$ 8 ht$ t$ ~8 ̋D$V0D$H}PF,PRPV;jjhV< Ft PVKjjjZVjjjXVF jjhVF$0F(t ~$uNUW3hU]~SSWUv^3m =YuN{~=t Zt=uUG\;|N[Ve_]tFD@VЃ3^ËFD@t VЃtFt PyFt PZv$\v(\h`i v@[\^áTFFFFF FDFHF@F$F(^̸Ԣ̸̋D$t$0pph̸&D$$S\$ D$UpZu3hhjj pz\hhjj $D$PpEYl$$y]3[ËVWp[;t$8IUpe\t$<7xO u2tpVeLuiD$0t83_^]@[ÅuhQ3Z~1Vw [8upULtw FPZ;|ϋt$8l$,El$,p2Z;7_^]3[̋D$t@t|$uhLPZht$-h(̋D$t D$hhjȃ uËD$AD$AD$ A D$AËD$V0~uhLXFFtt$ PYtF$^hohjAhj 3^t$h|h|t$,SW|$ _D{ t*t$HGPt$ GPt$C WЃ_[_3[̋L$AD@ tjt$t$QЃ3̋D$@H̸|h|&̋D$@Eȉ T̋D$L$HH̋L$AD@tL$3̋D$0D$0t$hԢ袬hԢt$B+hԢ&̸S\$UVW3D$pVt$W~2UVXD$$jPhVÝu|$tBK_^][Ã{@|$uVC@Ws@,WD$F D$jPhVXu|$uFWWFUvVD$ LVL$ ;}@QVWx~0詩=uD$VVL$ ;|Kt$EVU;_^][_^]3[h|t$t$t$:9ht$t$t$9hԢt$t$t$8h|t$ t$ 0 ht$ t$ / hԢt$ t$ / ̋L$3T$VI9B~ Iz^~@Iz~@I~Iz~I z t1I@B 8~ @A B 8~ @@ A a p2RVt$tcj]h(jF(jPHt PFt PFt PF$t PVw^jEh(j,B ujGh(jAhj 3@ @ @$@(@@̸hhht$b'hh6"ht$2'̸h!hht$t$t$6ht$t$t$j6hht$ t$ - ht$ t$ n- ̃|$uD$VjO0^ht$B&̸h!ht$t$t$5ht$ t$ , ht$%̸h ht$t$t$5ht$ t$ >, VW|$t7u(+ujRhjhj P3_^t$ VujYhjV3tRtt1=tj}hhZt$Ft$PO ukjw7t$Ft$Pv uOjnt$t$jJ. Fu2jdhj hj 蛍tt97t Vf_3^Åt7_^S\$ Ul$VWD$D$UPjU VL$(3PuxnVPu VPurUD$PjhVPu%hhhhj ь_^]3[W1MWItD$D$t0_^][ÿhVOUSt$$W_^][̸D$VW|$D$tA7t;FtPϼFSUt$Vu:j]hhujOhjhj 3_^YËF \$$@\tSL$QVЃ u?F x$tNSD$Pj؃ tPSLS-t;VpL$ D$t7][_^Yjphj hj ^tt97t V)][_3^Y̋L$tKtt6=tjZh,hhj t$qKt$qNtt$q+̋L$A tDP`tL$t3x(t-VWQ6L3tt$VqV _^jOhDhhj Yjjt$t$̸趾S\$$UV%D$ 3W=u D$ |$(۸DD$,(D$4l$u4jhtW |j hWz dD$4 u`E t x(E3҉L$ 3Ʌ~XB;|\$0D$ QPQPh hW%l$D$4@uJD$PhW SVuWjhD W \$4j!h̦W h hW jE0WH~RhD W<l$,UNuh h W4WNjjVW>V(l$,h h,W EXS\$$Ju h h<W l3St$ J;QVt$$3D$D$833Lt$ 6PL h hHWP *6W }~D$9Xtj@@D$0+Ƌ~ jhRW Nh Wgt< t7t2t-hPEp3ID$D$UpCKs\$03sW| ;fhD WE;l$}D$UpJ/t$\$ Fl$,\$4UKh hlWU3*IVUJh hHWS;PW{S DQhWjt$8SWuuh hW~sWjhD WU ~CUFwH;M\$4h`UHu9D$,ppW u"hh\jjyj 63_^][_^][WPujPh\jjzj 3_Vt$ jjjWCjjt$(WWM$^_̸6D$ 3UVW83P3L$ |:ZD3L$,d$ 9]0T@ | BH BH BH/D$B BHD$ H B BHD$B B HD$B B HD$|dB <0|]<9YSZ 0|O9J ÍHD$|0z.u*j~M+Պ<0| <9 AF ;|[|$, dDPt$D$(UVt$t$(t$0t$84Thlt$P,3Ʌ_^]jhTt$0 3_^]̸Tf 3ĉD$PS\$\3W|$dUoV39~n .~ } t uLD.@P|PD$PS8 ~3F;7|~(PD$PS ^]_3[L$P3蒶T^]L$X_[3zT̋D$Hu D$+u D$MjhTt$ 3̸ fD$SUVP3W8\$ 4|:ZD3 $ 90@ |4B4p2}dB B,H B BHD$B BHD$B B HD$$ |-B <0|&<9"R 0|9 HD$ ۸dDPlPt$t$0t$$t$,4ht$@j$3Ʌ_^][ jhTt$(6 3_^][ ̸jjt$D$ A? D$uÀ8uPwSUl$VWxߊ/u G73U9~JuhV蟾2jU7:PD$jPP^D$ PVs7E 9;|hD VYl$xl$tUhVh EPh UhةVw8~X3퍛uhV2jUw9PD$jPP诌D$ PVĽwE[8;|l$phD V襽UhVGtph UhV t[h UhVG 3ۃ9~. @P DPh$VG C;|jhD V腿 ][L$X_^3TSUVt$WhDV]\$ 0P}P@Ph hhV=C0ӊjsVjjpJ3Wh hVLW~h hVp Vh hV$@t PV hVhD VjjphVAhU6 ~hЪhVm3U6~^SU7hVG7VRhV4wV;hD V jjwh4VDCU$6;|D$ppV _^][WPujKh,jhj r3_Vt$ jjjW@t$ W&WN^_Vt$uF^Ã~ SW|$t ht$$DW< u_[^Ã~ut$hLW, 3Ʌ_[^UV4)PSPSt$(hTW ]_[3^Ël$ DE;-EPt$hhWEPVD$$-؃D$tC3+ʼnD$‹+ȋ+u,hD WĹ~bD$$hPW tHD$.¹ ;ø EQPh W~F;|jhD Wһ ]_[3^]_[^SVt$ WhpV|$0= u PiPhVz0q؃uhV]jjSVmSW@8tphīV, G0迆u PPhܫVG 3@D$~^U+98 +ujhV譺 T$ ׍*;ø EQPh VG;|]jhD Vl _^[SVW|$h t$ hYWSt$(>t=Ul$vUgtuhW蠷6W蕷2ۃ >u]hD W|_^[Vt$ W~ti|$ Fϊ:utP:Quu3t=NNJ:utQ:Puu3t ~u_^Ë_^t$t$ sȃy3ËD$tt$ QPtf tjt$ t$  ̸Ƣjt$ D$D$P^3ɅOL$ Vt$ u3^ËFt@t Vt$ Ѓ^À>uNA w~dt$PtjL$ ^ËD$N^ËD$^hVhj蝟 kL$@^39Q>utH @L$^39Ðssss*tVt$ FЋt2tD$^ËFPt$ w^tD$^t7z/ȅuhhjAhj |l3^ËD$^ÁQPt$ ^̋D$wXd$$uHtu4AvÉD$HtI tD$D$fD$ÍI7uzuzuzu]uquzuSUVt$WFthu3w$$wt@tVt$Ѓ_^][ÅttЋL$ڋFt Pt$MVt$A븋|$tjVWjՃ%t|$u-hhv6  vjPƟ VjWb, [jVWjՃ_^][Ë|$tjVWjՃ|$u=hhv譜 vjP=VjW)VWe* ~ ^D$~'SW+SP2tRD$@D$;F |څjVWjՃhhjdjyj iVW3_^][hhjAjyj i3_^][Ëvv1vuu%vv̋L$t)At @tL$9tyu D$IËD$jt$ t$  jt$ D$ P ̋L$Vt-At@ t^L$9t$uQu D$p>tk wM(y$y6W^ÅtA^^jVw6И ^6辘^Ðxx yxxS\$ t\Ul$ VW3}W+~.VWu,D$CjPD$ PLWF*;|W()E_^][%PCPt$ [S\$ W|$ C t ?Ut hl$u3l$ɃyV${CtPW^]_[SW%^]_[ÅtjSWjՃ3SWN(x;C } C4VWR(VPjSWj@7Ѓ^]_[Å@SWЃ^]_[SjW% tjSWjՃSW"&S C3 D$~:jPW% tVW'VPD$ED$;k |̋D$t jSWjЃ|$u7;^]_[ÐzzCzzz4zzFUVt$,3W|$(D$Nt 9/u _^3]ÅtAES\$<\$$t$ _[^]7_[^]Vt$ tk>ufWt$D$jt$jP~SjnhW脑؃ u[_^t$D$\$jt$ PD$ Pg[_^t$D$ jt$VPG^̸ 膓|$ SUVt$WD$|V!jhhV!@Pڐ t'hht$0辐 D$uU͎_^]3[ VD$3T!~I}SV"t$t(FNV~ ^T$D$PD$|$L$t$@D$PD$$PD$ PD$ P貂T$(|$؋D$L$D$PtR^+l$ VF~ nÁu5*;D$@~(hhhjhj O3_^][ËD$Py)hhjfjhj Ot_^]3[Ël$Dx;ul9D$Huftt T$ +T$@t$4t$D$8t D$(tD$0tT$PD$,t8D$<_^][À|$Lt _^][Åthhhjhj O3_^][ø膃T$$D$,S\$$$ L$D$0uuD$,C[UVW|$8l$(|9u y*WD$$L$4PD$$PD$$PD$@PրЃD$@x;D$"D$D;D$ L$0t +t$t$‰L$$D$$ t4D$H@Pt$HD$t$Ht$0VPSt}L$@thj:jjj L3_^][ËT$4_^] [̸|$ D$D$D$D$uhhj}jlj =L3ËD$,VW8u t$8p|$8T$@t$S\$HUx"hhjjlj K3][_^Ät"hhj~jlj K3][_^Ël$4SjjEjt$HD$(D$(PjjD$3PD$u*D$ tRhhhhj Gu*D$ t#hhhhj eGu0U!y؃uhhjAhj 0GykD$(8t)Ct P^wD$CD$ D$(ut$ t$ Sw \hhjAhj FS w3V D$3_]^[YÐAs̸٘z|$L$V1uD$Ɖ^SUW|$(|>u~u Kt[NWD$t$PD$$PD$ PD$ PExxBL$t +7T$T$$tC4 +uMD$$_][0^hhjfjhj Ehhj:hj oE(3_][^hhhhj GE3_][^̸yW|$u3_S\$(Ul$$ ED$,Vt$8D$Vt$8Qst$u~tjt$0EjjjD$$PWD$(PD$0PO tlt$+t$3tF|$hhh|$t$hhhwhhjAih[Et$0t$0t$RuPt$8D$(PS uXh'QjPt$8D$(PS u/hhj:hj wAUS=3_^][Ãu _^][Ët$D$ _0^][Vt$ u^ËFWЋL$ Wu Gt<_^Pt`WIw3ɋЋG ~ 9t6A;|Gu$|$thhhjnj @3_^_^̋L$ <t<u?It8At2D$QD$u jvhq PRe3ËD$tCt=D$Vpt0Ft*vt#t P]pFF^̋D$t2t,D$@t!@t@t@@̋D$ VtVtPD$ptEFt?vt8~u2W|$tv67@tF L$ _tF^3^̋D$VtnthD$pt]FtWvtPt P]oW|$hhW%q u_^Wt$Ps ~F_^ø^̋D$L$P̋D$tD$ËL$@̋D$ L$PD$ ̸Ȯh@t$̸@h@ht$̸h̸Th$t$̸$h$F̸hXt$2̸XhXh t$̸ h ht$̸hvht$r̸h6hxt$2̸xhx̸̸h\t$̸\h\h̭t$̸̭h̭Vht$R̸h̸د̸̸ht$̸h̸phȮt$hȮfht$b̸h&h<t$"̸<h<ht$̸hhtt$̸thtfh8t$b̸8h8&ht$"̸hh@t$t$t$zht$t$t$Zh$t$t$t$:hXt$t$t$h t$t$t$ht$t$t$ht$t$t$hxt$t$t$h\t$t$t$zht$t$t$Zh̭t$t$t$:hدt$t$t$ht$t$t$ht$t$t$hȮt$t$t$ht$t$t$h<t$t$t$zht$t$t$Zhtt$t$t$:h8t$t$t$ht$t$t$h@t$ t$  ht$ t$ h$t$ t$ hXt$ t$ h t$ t$ ht$ t$ ~ ht$ t$ ^ hxt$ t$ > h\t$ t$  ht$ t$ h̭t$ t$ hدt$ t$ ht$ t$ ht$ t$ ~ hȮt$ t$ ^ ht$ t$ > h<t$ t$  ht$ t$ htt$ t$ h8t$ t$ ht$ t$ ̋D$@jWhje ujYhjAhj 33@@@ @̋D$T$Et3BQjPjRt$ D$ Pt$  ̸gS\$Hj hdD荄$hPՃ$D$t hh@jghj 5$QAu+ʃ$ L$tOj[Pj$Pt$$P@~ffք$f$L$j$PjQ$PjPqnPR $hP>GG@j@D$$Pj-nPD$0D$ u ~0u^+ȋ%yH@%+‹T$*D$$;D$~DjD$uhhPE hhPWKFT$D$3~T33HЃ wHwW Hwm7 FT$ъ  Ȉ T$|G;|t$4|$D$$D$tDt$8Vt$4Wȃ |W|$l$ khhjAKhhh:L$0_^]D$A[hhhhhhjej 8t$|B3_^][S\$ W3u_3[ËUVu%jht$\ ^]_[3~l$t3k#+ujhU[\ uLS j2D$2D$D$PU\ uF;3|^]_[^]_[Vt$tmhhjF0jP6OFt P\UFt P hPt$ t$  ̸@T$SUl$\${$sVs 3tAD$ Ww'$jjv VStT$ vjS)M3_^][jv$VS`jSLS MD$ O_^][vUj(?+Ń F;F~hhhW; FD$D$vvUjPj?nMvFF Ps$U c)~T$ t~ !F ;nONQRs$U T$ +|$)~~T$ u]3[ÍI_'i̋D$@$uÉD${S̋T$Vp@u+PRt$ ^̋D$@$uÉD$;OVW|$ w u_3^S\$C=$L$[_F AF$^ËL$F [_F$A^ËL$[_F(AF,^ËL$F([_F,A^ËD$[F<_^ËD$N<[_^Ã$tZ>ujjv(VWt@>ujv,VW~G>ut$t$Sw$J[_^jWNJ[_3^ËG$tt$t$SP_J[_^kVhhj@N: tjV=u VP83^ËD$p @ @^Vt$W~ u_3^ËGt P8W7F F F_^̸<$Pjht$H~T$ $ T$L$ ̸;$Pjht$H~T$ $ T$L$ ̸;D$$D$D$$Pjht$CH̸F;D$$D$D$$Pjht$H̸VW|$G4w4_^SUPG0o0G8PD$p$P؃ ~W)~%_8PEG8PD$p$P؃ ][_^ËL$tGGt PG2D$GD$6"2_^3^SPH؃uhhjAhj 3[VWt$SpIt$(t$(t$(t$(WXjjj WBWHSD4_^[VWt$|$hW{t$,t$(t$(t$(WUt$W1 tWՃF>u_]3ۋD$tPm0u^3[3hbhjl# tpPD$p蓴^[̸ %D$$$Pt$y3 Pt$K Vt$t P!Ft P Fth@P躳V ^̸%D$S1 U-1 VWt?Ph/ȃL$u_^]3[YÀ9t%>WՃtWӃF>uD$D$t@P/|$t?t(I>WՃtWӃF>u|$3h?hj ! dD$h~F3ɅD_^][Y̋D$L$t-t% :utJ:Hu u3Ë393+Vt$t PoFt P_VV^̸# 3ĉ$S$ V3\$ht$t$D$u^[$3"hD$ PS3 -U-x1 WtD$$PՃuD$$\$$D$l$I< < O$0<:VPD$s<;u:VPPt$UUt$09D$sl<(uh|$]<)uY|$S<=uO<;u/VPPt$UD$s<"u <"DCCl$-x1 uZt $<"t<PՃt FFu3VPt$uVt$,t$(U^F38E΃uHt<"t1PՃt FFu3VGt$Pt$VF38Eًt$D$$;t\$ hPSz1 _]$D$^[3 ËS~̸  3ĉ$$SUD$ $(V$0WD$ MD$3EEu2D$+\$螮D$D$$hPt$0 Ut$$D$,VP <uÈD$\$<3ۅ~L$$D1< u< uN|$tBD$t Wt$莮V>P1jjhWd,|$tjhW5 \$tVD$(PW5 \$hD$(Pt$/  3$$_^][3Wt$W|$u3_ËύQAuSV+ʍw;r%x1 d$<"tPӃtN;s^[3_ÍF;t^[_Vt$Wt=x1 <"tP׃t FFu_3^_^ÍN38_E^̸&D$$VuD$(D$(Pjjt$0 +PD$P?D$0D$0PjD$Pt$8 L$(thhQhj &^̸VD$D$Pjt$t$ D$thhPhj ^Y̋L$V1t)|$u"hhhhj 3^Wu#hhhhj T3_^ÍGGt+2ABD$ABD$_B ^ËD$D$BD$BD$_B ^̸fS\$ UV33u^][YW|$3ɋÅ~8:tA@;| p++WSȃu4h>hhhj jShj- _^][Yu0D$ Hpu<;thIhh_^]3[YÁ$L$ 9thThhSAPQUVJ fD$PD$PUV4 5jjjt$$t$ .jjjjj"jjjjjjjjjj jjjjjt$4_^][YÅuhyhh=1 jhV׃ uD$ _^]@ [YjhV׃ uD$ _^]@ [YjhV׃ uD$ _^]@ [YjhV׃ uD$ _^]@ [Yhhhhj _^][YÍIm ̸SUVW33|$؋D$$L$ t{QP:W3~PD$(@D$t$,Pt$,VWK@Po~PS-tpWF蟧;D$|t$D$PSu萯iD$x8ɩt-V=EtuL$HEL$D$D$t PthSFt Wt$(%:_^][S\$UVt$WuNFu+-1 T3;puVS0Ճ TtG T1r_^][Ë@_^][̸VШu"hhjAhj b3^ËD$S\$$UW EC\ $< ;?2hhhhj V$3_][^Ã|$(t1hhhhj V3_][^ÍFD$PD$D$P|$$Nhhh|$(t1hhhhj LVs3_][^WjdF:hhh|$(t1hhhhj V3_][^jWLFhhhB|$(t1hhhhj V详3_][^FuhhjAjWP, uhhjAFXvf5hhhD$(u u5S臏PUjFWPhhjAUhhhhj Vɥ3_][^Fu.hhjAhj hV菥3_][^ËL$(u?D$PWncȃuhhhFHND$FXu+jWP uF` FH _][^Ãu-u(Ph jj,W uh hh@hhhhj V贤3_][^hhhhj \WhĽj Vs3_][^Ë Gdi  Vt$tJj D$ PV0 T$ t:t L$ ;u"y"h7hhhj 3^jPt$ uh;hjAhj n3^ø^ø 3ĉ$$L$$S$UV$3W$Qhjj,PD$(D$HD$LD$T$Kt 3(D$<ttPt$Dt$L+ 3u 32| 3VSWt$PP6t|$4u9$uD$PV蝨V|$0聢D$ |$4D$teWD$0PD$8PD$$PD$,P؃ED$+D$|$$t 3D$ D$ \$ t$4Pjo $t$43ۍ4~%I6~ Wj~@Cv ;$|hhW 3ۉt$ t$9$~>t$XvD$v6vPe~t D$D$C;$|ʋt$ D$4t+L$8utu QPt$ D$UPt$$t$ t$WD$8t$8Pjz33ۋL$t Q t V Ë$_^][3̸Vt$ u3^YSWj D$PV0 T$ |$؅t:t >;y%hhhhj (3_[^YËD$+ wJ( $ D$ _[^YËD$ _[^@YËD$ _[^Yhhhhj L$(D$)D$(PhjJ _[3^YËD$ _[^YÙ     jt$D$jjt$Pt$dt$D$ t$jjt$Pt$B̋D$=t= u%wؽø ̸(6W3D$$|$@|$~hXt$4!3_(ËD$4S\$3A?3øSUVt$W|$FN7nPQUVF y_F<3^][Ã~t_F=3^][+~ty_F>3^][Ã~ !uE_F^][̸$ 3ĉD$ D$(PhtD$j PDt$hhpShj tt97t V_^]3[ P>uD$,u뱃|$ut$(UW\ _^][ Åt7u tD$$tBjk@hpPv؃ uXAXt$$t$SD$0 D$$D$3ۋNt QSD$(^D$Ft7D$_E^][ ̸VW|$ u3_YVt$ut$W$^_YËSUVPjD$\$( tHD$t t3t$$Vt$PD$(Pb7wt$4 D$][^_Y̸8S\$T~D$X[38VW|$Ht7uvu_^[8ËD$LUl$TUD$D$PD$PD$lPD$ P yD$dfL$X9L$tD$d tiT$PD$(D$`T$@T$D$4D$\D$$T$L$,D$0ul$8*D$8SD$ PV@ u L$dD$$DD$D$`9|^uWh@hpP,؃ u)D$dAtt97t V']_^3[8ËFt P D$`Pt$S}D$l D$`D$N3ۅt QD$dD$X^FD$t7L$P]_^[8SVt$2ۃ=Xu6hE 肅Xu hh0jAhj 3^[W|$WȃuUhh0jȃ u!hh0jAhj 3_^[Ã9qAA A ƉAD$tAD$tAD$A tQ5XӅ_^[̡Xth! PXR̸ 3ĉD$D$h jjD$ D$ hPu:Xu3L$3Í $QPЂxP5XL$3̸̡D$Vt$t$D$E7t-@H u# ppQt$$t$$t$$VX %(Pt$t$t$V3^YË^Y̋D$̸fVt$ jhV1  u)8tPD$PV0 L$ 93^Yù Ɗ:utP:Quu3u^YùƊ:utP:Quu3u^YùƊ:utP:Quu3u ^Yø(:utN:Huu3^Y̋D$@t D$̸0D$4SVW338uL@tEHT$@L$@D$ D$,D$ PD$T$8PL$D$ mFuFD$8hhLjmhj ߾t V"t W_^[0ËD$t$(D$4D$PjA tD$0T$+‹L$(ȉT$0QD$L$,PjS oD$0+D$L$(D$L$(u 3QD$PiD$3\$Dt WD$L;ËL$HOÅ$PvQ ̋D$8u'@t L$ V0;LQpt$ ^jUhLjmhj 蛽̸H 3ĉD$DD$TL$$SUl$TVD$(D$dWt$`D$(D$PL$$D$ D$0}D$jPqjj؍D$SD$D$jPD$$PD$,PjjD$4PD$LPVjU$8_^][3HVj8tt$t$V1 Vu 3^jt$2 ^VW|$t7u1u hhhjAhj 3_^Åt7F~tPt$Wt$hY u hhhjphj 藻3_^Ã?uh_^̋L$Vt$ A1D$D$Pjauhhhjnhj 1^Vt$Wt>u.uhhhjAj|j 3_^Åt>jt$T$uhhhjp'hhhP D$u9hhhjAj|j 葺t>uWt_3^ÉGD$Pt$T$_^̸Wjjjt$jt$ 0uj_hhjpj~j 3_YVjbhhW/ ujchhjAj~j 3^_Yjjjt$ D$t$Pt$$D$4t8D$t0^_Y̋D$Vjjt$D$D$t$t$PjkujOhhjnjj `^̋L$VA1D$ D$ PjT$ ujyhhjnhj ^ht$O̸hJVuhhjAhj 謸3^t$t$t$t$Vt^V3^̸VWhD$ JujVhjAhj 4DD$NPvXu=j\hjAhj hVND$t P-_3^YË|$ DWj6 ujb6ʃL$ Wt QPi Pܒ~D$PhVU ujlXhV,Nt$jt$Pt$ G_^Yht$t$t$z]ht$ t$ T h(t$M̸(h(fHhDt$bM̸DhD&Hjjt$t$t$t$̸ 3ĉ$$S$U$VWD$3$3SD$ViD$ujghjlh(GGt$D$L$zL$A|St/SP$t UPEP踐 [D$ Psj$PjjD$4SP-D$pD$$Pgy*hhjrhj D$4P|$u'D$PjD$(jPC D$D$ P|$%u Sŀ7St$$t$,$tR*tGyFt;hFPh(WtFWD1hhjAhj h(WJVQ 3$_^][3*İSUVWhD3ENj|:\$hhhDS EL$]St QP% P蘎D$NPvf\$$~'jFSP7\$ ~-t%F tkjjSPv rtGjEwGt/PhDVe tGV_^][hhjAhj MhDVIW 3_^][h(t$t$t$XhDt$t$t$jXh(t$ t$ O hDt$ t$ nO ̃|$u&D$@ t8u@t 0pvhpt$2H̸phpB̋L$T$tBJ Vu u8t$ tA@B @D$L$tB^3^̋D$ V3W|$ xPwu_^S\$$t3tȅtID$(q?QDPw d t$ t$ t$wu t[_3^[_^hpt$t$t$Vhpt$ t$ M h1 h1 hU ̸FVt${Pt$$@ t$u"jPhhhj }3^SUW3V\$Tr5-x1 ISVsj,xXW\$(1 uË:F^D$PՃtd$CCPՃuD$Pt$SB D$QՃtGGPՃuFNPՃt;FNPՃu^+hhCP D$tOSWP0\$$t$+D1X\$t$CV\$q;_][^jVhhhj 3_][^̸vVWjTht$$3?P ujVhjAjpj 諭_^Yt$D$ PVt$4~t$Vt$L$$ V_^Yjt$ t$ ̸D$SUl$3V38thhjnjnj p]{d;hBD$hP؃uhhjAjnj 蟬D$PExSPH tot$ D$ Wt$SPVU{|$D$ T$u_^[$3Qjhu$P $QЃ2hh jhjjj a3_^[$3Uj$QjP$PnUP6 D$D$D$P U$Pj6D$0P9t9t$D$WPD$(WP;tD$PD$PD$$P\ D$P$hP{$j@PltD$D$hh jejjj O3$]_^[3Ul$ Vt$ Ei_< WW=1 j hV׃ thh jkjkj ؖ_^3]À~ 4u~ ,uj hlV׃ thh jjjkj 蚖3_^]Ê< t t FF< u>uh h jpjkj e3_^]j FhV׃ thh jijkj 53_^]à SA|Z~ -tC< wFQ, EFt$[uh&h jrjkj Օ3_^]p EPD$P+ _^]^]̋D$VW uluxEt$ hhVhWVhhD V$_^W:Puhh jjlj 3_Vt$ jjjW`t$,t$,t$,t$,WWb(^_̸F 3ĉ$$D$$$S$D$$$D$$UD$$3VW\$D$ D$^|$St$HOG?h$Ƅ$PS# =1 x  HyƄ =3j Ƅ$hP׃ u0$NIFu+$jhP׃ tVh$PS mhh jljmj Zt$>t$5U/ r\$F PSIuhh jA뱍FP$PsC3hD0t$$Vuhh jAlFh$Pt$$ xI4 NyƄ4 Ƅ4$ <G Pt$vj $hP1  t}V$PD$@PD$ h@$Pt$0>=1 3hUD$u/hh jAO=1 hh jA1ET\$$hPS >x 4 NyƄ4 D$ AƄ4Ej D$$$hP׃ AD$ PUV$PED$PM D$hD$$t$$PSu -iƄ$ ~U$ HyƄ =Ƅhh jAD$l$\$\$sNFuj $+hP׃ V$Ps׃ j$hP׃ D$8P蔵t$EL$PQPD$LP蜵yh8h jd!D$$PED$PD$@P yh=h jdL$L$$L$t$4Ӌ\$RBt$4Ct$,ED$0fS`UZ =h/h jfWVUhh jAjmj Ȏ 3$_^][3ČWPtuhSh jjqj v3_Vt$ jjjWt$,t$,t$,t$,WW(^_̸| 3ĉD$x$S$U$V$D$D$$WPl$t$(նOGuj hU+ JWVUs ;7jhU[ NFu+~,VSU5 ;jhD U hsh h m؃ uCA$3D$D$~fOD$ UPD$PD$4SPL$$tQSt$ L$ ;uID$+L$ʼnD$l$D$PD$,SPAD$ ~VPSUN ;D$tEh SjSļ hh Pjrj X3_^][L$x3|h S%Sj hU uWt$(U ;ujhU u$D$D$_^][3)|̸VVt$ W|$ϊ:utP:Quu3u _^YùNJ:utP:Quu3Ɗ:utP:Quu3tƊ:utP:Quu3_hV5PVjc !x\_^YùNJ:utP:Quu3uNhVPD$ VP?c S39X8D$ Åt Pͺ[_^YùƊ:utP:Quu3u4 NJ:utP:Quu3@,Ɗ:utP:Quu3u4 NJ:utP:Quu3ƍd$:utP:Quu3u44NJ:utP:Quu3t Ɗ:utP:Quu3u4@NJ:utP:Quu3,Ɗ:utP:Quu3u4@NJ:utP:Quu3 ƍd$:utP:Quu3u4HNJ:utP:Quu3DPƊ:utP:Quu3u4HNJ:utP:Quu3 Ɗ:utP:Quu3u4dNJ:utP:Quu3|H:utN:Huu3u4d:utO:Huu3_3^YS\$UVt$W6~|$ˋ3ʃ,3~O<0| <9؃0_^t$t$t$t$hh+t$t$t$t$hht$t$t$t$hh@QVt$t$jt$<u^WV:V"u_3^Ët$t 6GJ>_^t$t$t$t$hh+t$t$t$t$h h0Rt$t$t$t$hHhP at$t$t$t$hh0,1Vt$t$jt$u^WVZVu_3^Ët$t 6>_^t$t$t$t$hht$t$t$t$hh,qt$t$t$t$hThNAt$t$t$t$h4h@0Vt$t$jt$lu^WVVu_3^Ët$t 6d>_^t$t$t$t$hh+ t$t$t$t$hhQ t$t$t$t$hh@! Vt$t$jt$|u^WV V u_3^Ët$t 6G>_^t$t$t$t$hh+ t$t$t$t$h h0Ra t$t$t$t$hHhP 1 t$t$t$t$hh0, Vt$t$jt$\u^WV*V u_3^Ët$t 6>_^t$t$t$t$hhq t$t$t$t$hh,A t$t$t$t$hThN t$t$t$t$h4h@0jjjjjt$t$h h$jjjjjt$t$hh$t$t$t$t$t$t$t$hph$jjjjjt$t$hhP-$jjjjjt$t$hh _$jjjjjt$t$hh/$t$t$t$t$t$t$t$hh$jjjjjt$t$hh-$jjjjjt$t$h hPR$jjjjjt$t$hHh o$jjjjjt$t$hh.?$t$t$t$t$t$t$t$h`h`$jjjjjt$t$hh$jjjjjt$t$hhp.$jjjjjt$t$hThN$jjjjjt$t$h4h0O$jjjjjt$t$hh0$jjjjjt$t$h ho$jjjjjt$t$hh?$t$t$t$t$t$t$t$hph$jjjjjt$t$hhP-$jjjjjt$t$hh $jjjjjt$t$hh$t$t$t$t$t$t$t$hhE$jjjjjt$t$hh-$jjjjjt$t$h hPR$jjjjjt$t$hHh $jjjjjt$t$hh.$t$t$t$t$t$t$t$h`h`U$jjjjjt$t$hh/$jjjjjt$t$hhp.$jjjjjt$t$hThN$jjjjjt$t$h4h0$jjjjjt$t$hh0o$55nuhP#uhjut$t$t$t$h h`@!t$t$t$t$h h`@jjjjjt$t$h hPA/$jjjjjt$t$h hPA$t$t$t$t$h@h@at$t$t$t$hhPF1t$t$t$t$h@h@t$t$t$t$hhPFjjjjjt$t$h@hpA$jjjjjt$t$hhF$jjjjjt$t$h@hpA/$jjjjjt$t$hhF$̸ 趪t$$D$ D$t$$D$t$ t$ jPD$Pu Ë$Vt$ D$ D$ Pt$(T$ ujShj jgj ut$^ t$t$t$t$hh0/Qt$t$t$t$hh@1 !t$t$t$t$hh0/t$t$t$t$hh@1 jjjjjt$t$hhP/$Wjt$ tuhhjj}j t3_Vt$$t$$t$$t$$t$$jjt$,WW(^_Wjt$ uhhjj}j t3_Vt$$t$$t$$t$$jt$(jt$,W\Wt(^_jjjjjt$t$hh`1 $jjjjjt$t$hhP/?$t$t$t$t$t$jjt$$t$$$t$t$t$t$jt$ jt$$t$$$jjjjjt$t$hh`1 $̸f 3ĉ$$S$U$VW$jP@t?D$UjhPt"hhjhjxj arVۿ3GPD$PV訓VtS2St̅tt P7Ƌ$_^][3KWjt$ uhhjjyj q3_Vt$t$t$WW4^_̸ 3ĉ$$($ S$8U$$L$$4VL$$DW$@L$ $LP|$L$ 2ujxhjsj~j q3D$u@|$u9VU9$<t~VcVLu]t$D$$jhu D$0PL$0QЋ؃"hhjoj~j mpV3qD$|$$|$VjjjSWPt$,ё D$$9D$u SPV貾$4WUt_Wtƃ$$_^][3-t$t$t$t$t$jjt$$t$$$Wjt$ duhhjj}j vo3_Vt$$t$$t$$t$$t$$jjt$,WWԲ(^_t$t$t$t$jt$ jt$$t$${$Wjt$ uhhjj}j n3_Vt$$t$$t$$t$$jt$(jt$,WW4(^_WPduhhjhj cn3_Vt$ jjjW软t$(t$(t$(WWñ$^_W*Puhhjj|j m3_Vt$ jjjWPt$(t$(t$(WWV$^_̸6t$ D$D$t$ D$t$D$h PD$ PD$ P)uËD$$D$:utP:Quu3Vt$D$Pt$$u肋[ uhhj hj lt$.t$%^̸FV3D$VVt$ D$D$hPD$$D$PD$ P<u^ËD$Wht$ D$y~` tUWt$ V t8F @8t.t$L$QVЃ t|$ t9t P7&V3hhj hj kt$t$_^̸6 3ĉ$$($S$$UW$03QWPhD$$L$,PD$ D$(PD$(D$0PD$,u_][$3wËD$Vt$D$Ɗ:utP:Quu3uKt$D$ Pj裺 NV0+t t Q+V0Ɛ:utP:Quu3t$D$ Pj D$$t$ jhPt juhjhj{j jV芷PD$(PVVVntoWQ*tt P+WQ@hV~2Pt$j~B t9h\tt$L$ QS0uhhj j{j cit$觙t$t$:t$ 葙$4^_][3zWjt$ uhhjhj h3_Vt$$t$$t$$t$$t$$t$$WWU ^_̸T6 3ĉD$PVt$`W|$`F tJx<tDp D$ h8jPP`jjjjjVWD$4PF p<4_^L$P3蔜TËL$X3_^3聜T̸\覜 3ĉD$XL$tT$xS\$lUl$tVt$pW|$pL$F T$tRx(uLp D$h(jPPt$$D$,t$$$USVWPhVd4_^][L$X3\RQ$USVW $_^][3跛\̸0 3ĉD$,D$8SUl$<3ۉD$D$DD$D$jPU& t.hhHj|hj g]3[L$,3D0ÍD$D$D$PD$PjD$jP@ tVW|$|$h hHWߘ u0h hHjAhj f3_^][L$,3ʚ0WVUt$j ;thhHj|hj Kft$D$t$$t$ t$ Po؃WVVmL$H _^][3Y0jt$ t$ jt$ jt$ t$ jt$e ̸&D$SUl$VWmD$3WI0؅tgtcF PD$UPw tMFPD$jP` t6FPD$UPJ t 9|$$taFPD$UP. h\hHjAjj dt VGt St Wg-_^]3[YÍnUD$jP t&Ft-tWv uvv|nW -VS1V GL$$ D$_^][Y̸ ƘD$SUV0D$$Wt$HXL$/'&D$GT$6JB B BVt$D$0/(t$GPD$,VP |$,GPD$,SP G PD$,SPr t|G$PD$,SP\ tfG(PD$,SPF tPG,PD$,SP0 t:GPD$,VP t$WU\WL$, D$(_^][ hhHjAhj bt Wt U}_^]3[ ËD$H|$t|$ tAAÍM@Ã|$ tAÃHSVt$ v $؃ugv$=uUv$;F|$tvx$;0D$^DSS1[vZ$=D$^DSS2[h"hHj~hj a3^[SUVt$Wv$ v#v#v,# xD$|$t RSA1_^][RSA2v#;v,#;pvt#;Uv Y#;:v$>#;v(##;IhAhHj~hj t`3_^][̸VD$PjPD$ P tIt$(D$t$(Px t0t$0D$t$0P_ tjt$$D$ P u3D$PE^̸F 3ĉ$$$SU$3V0D$ L$$WL$3$Pl$L$t$ }mt$D$Wht $Q $P hhHjhhj _/D$ hhHP u hhHjAhj ^Ul$$PU$VPB.FGD$ s hhHj}hj f^oD$$jPjl$$?PD$4P脖Zt$D$VPD$0UP脖:D$PD$PD$,P裔 D$Pn =RSA2=DSS2j$l$PWf$jfք$$蕶PD$4Pڕ$jP`t$$D$ VPD$8UP˕D$PD$PD$,P tdD$P =RSA2t6=DSS2t/hhHjehj ],$jP܎|$D$ jPD$$P ؋l$D$$P豌t t W$_^][3ĸ̃|$ VW|$ 7t'|$syh{hHj}hj b\3_^Ã|$shFNq A A =t hhHjthj \3_^F V r B B J B B JS\$UiA AI D$$ ʉw,=(w#t&u"hhHjyhj ^[][_3^É/][_^̸ ƏD$Vt$D$D$PD$PD$PD$PD$$VPx"hhHjzhj Z3^ ËT$W|$ O|$tt I,! M@tG H;s#hhHj{hj }Z3_^ Ã|$D$RWVPt_^ _^ ̸,Ǝ 3ĉD$(D$4L$0SD$3jD$ L$PQ t-hhHj{hj Y3[L$(3*,ÍD$D$D$PD$PD$PD$$PD$jP~Ul$VUt$t$ v2hhHhhj kY3^][L$(3訍,WhhHVs u0hhHjAhj "Y_^][L$(3^,VWt$(|$ ;th!hHj{hj X#D$UPD$VP9\$(t y؃WL$<_^][3,̃|$S\$s3[ÊW<u|$ ?uhhHjw;!<u>|$ ?uhhHjxzt hhHjuhj X_3[B J B  B  J UVt$iA AI D$ ʉL$$=RSA2w)tW=RSA1t =DSS1u ?uehhHjwA=DSS2t#hhHjthj eW^]_[?u"hhHjxhj 7W3^]_[^+]_[̸ 見S\$VD$D$tut$ D$PVs"u&t$ D$PVs) T$D$ u ^[ ÍHU"uti,i!,M@tii,hW|$ u0hhHUz u _]^[ ËT$$D$tf@@HV@ˆAAQAL$ BBJJT$AAA|$("QsD$D$PuYR |$u/_]^[ ̸ 3ĉ$$SU$D$$VD$W$D$ PD$9$۸(EEtuD$Pju"D$Pju/ H"u M@HD$uUu9h0hHV蜆 u h2hHjAhj MT.񵰍P @}tu @@3ɍz  BBۈJۃZBBZ\$|$ÈZB B $B tjW.~x|$|$jD$UPd$ Et$D$ jht $Q $P覸DhShHjhhj 'SD$ P $_^][3RĴË|$P$Pj$WP~tuWfDŽ$fք$Ƅ$j$Pj蠫PD$0P腍f$jPkCPWD$$PD$4WP֊7D$PD$PD$(P D$ P ̸覆St$D$D$t$t$t$P؃xBVSt$ t$蛜t$ ;^u hwhHjvhj Q[YÃ[Y̸&Sjt$D$ D$ P]؃ y[YVSt$ t$t$褁;D^[Y̸ƅSjt$D$ D$ P؃ y[YVSt$ t$进t$D;D^[YSUl$ VW|$jdhHWwu؃ t@˅t׊IAvJujWSy t$(S݀>t }_^][_^]3[VW|$ B2J J J_^SVW|$w t$Sw VVjwVKSwVA(|$tSwjwV& fo _f@^[S\$UVW|$3W,VW,x ō~ +~IvNFOJu+t$~+~Vj3* 3_^][̸ƃSUl$VWuuD$\$$juSD$$5}3WjVWD$@ D$@ x+~vNFOJuD$ |$$uFt$VuSVu SVu$SVu(SVu,St$PuSH_^][̸x̸̸̸̸̸`Vt$ t+Pt$ gtJjjVjPau5|$t2谍Pt$ vgtjjt$jP`t3^Åt^{Pt$1gu3jjjjP`DPt$ gtjjjjPu`-@Sʫ؅ujMhjAj{j L3[UV3W|$pt'j~jPUhUSFtqUSDtcFj0m"tPiD$QPFpR"t5WeWSLEWtPt$ Sq u S@3_^][D$ u3ËD$@0SbL$QPt$4 ËD$pD$pY̋T$L$,V,;us3^:uA:BuA:Bu A:Bu3^^W|$ ttjWwy_S\${ t{tjSPy[_Vw+CuYO S r;ust6:u't+A:ButA:Bu tA:Bt ^[_3^[_̸& 3ĉD$Vt$ jV讣j4PjD$Pvv t^uL$3~D$L$ L$  $ L$3m~̸,~ 3ĉD$(VW|$83VWD$PyD$jPVMPD$Pru tSG0pD$P w t:VD$$PD$Pt t#t$#D$"L$  D$!  D$PvL$4_^3},̸}D$u3Ul$D$Vt$WujVz 3E0Qt 83xES-p蚏؃;sIP=uwD$(u <%D$VZ ;UWVD$ M1QSEt'p=udD$(u<a3ۍD$Pt$SN uIt$$GV ;pD$PUdPS 8:3۾93t Sr[t.;thThjt!hWhjs3hZhjuhj wFt WJ3_^SVW|$jjW\$ jjSSPOPI;us3%:uA:BuA:Bu A:Bu3uq9B0uh39F0uaJ,+F,uYR(v(r;ust6:u't+B:FutB:Fu tB:Ft _^[3_^[W|$u3_SUVW38~AVW t$$]sXtut$s tWF;|^][3_^][_̸vySUVt$3WVl$$SV) D$y ttjWɝ} t}tjU誝xiw+EuWW E r ;ust4 :u't)J:HutJ:Hu tJ:Ht3tt$VC;8_^]3[YËD$_^][Y̋D$uË@@̋D$tt pz3̋D$@̋D$VW0D$8wvruw v _^̸,w 3ĉD$(S\$4D$VWP3rVVp VPD$Pn t}ύQAu+ʍD$ QWPEp t\W(s@0pD$P$pt;jD$(PD$Pm t#t$'D$&L$$ D$%  D$ PoL$8_^[3v,̋D$p D$p ̋D$p ̋D$p ̋D$pD$p̋D$p2̋D$p̋D$8u~p$toPי=u3D$t =t;ËL$ u<%3=uD$t=uƋD$ t3ø:ø9̸u 3ĉ$S$U$V3\$t$ W$|$(u5~t$hV|Fu*t ^VpUh$S0  D+7MD$$3ۉl$0\$(S7l$,uV tPUD$uuD$DjPP7D$L D$؍KCuE+ً8xhul%yH@u\333T$83ɉt$4D$0~(I8)t D0A;|T$8t$4D$0 D$< uD$8D$4D$0 D$<D$0D$4D$833҅~)$|0t)B< r<~vA;|L$ ȉL$ t$tAPVzv;L$,t$St$ /FVssD$0 3=F@X~Q|0t8B^wF'f\xFFA;||$(\$C\$7;D$tLXPTnBhh4jAhj{h4hjtj =D$$Py3\$|$uË$_^][3qĄ̋D$t$PMLt$D$t$t$t$PLt$D$t$t$t$PaMt$D$t$t$t$PMht$ t$  SVW3'mFQ/PFPt$0N 賌taHGtUVPtGt$3wQ\$9pu AtWpt _^[WV03_^[̋D$SVW3ttp襂3\$SVQw|$H V_^[hhPjtDhhPjs6=uhhPjuhhPjr hhPjuhj =;V_^[ÍI  ե  ̋ tT$;t Au3ø̋D$t$ t$ pzL ̋D$pL̡ VW|$ t4?t/5 t%>t j6pL u >u_3^Pp@~tvvtjvt>uF@D$ ,PF0D$PjZ_^̋D$tt p蚀3̋D$ SVWhu$jOhPjAj~j 9W3_^[Ë7jVhPjF kN AF @tŋt$VPW>5 tVq؃tSW5S tD$tt$PW] g_^[Vt$ Wt$ NFu+jXFhlPj ujYhljAhj 83_^Vt$W\ y#j^hljvhj i8Wh3_^PD$|$Pj:Wh_^̸lSVWjt$HjphlS9jjq hlQ'j t.t*D$ t$ Pt$SVWp_Vh_^[YV hWhjuhljAhj 73_^[Y̋D$tt 0K~3̋D$tt D$3̸kUl$ V}(t$~(}$~$pEpt!hahhjij 63^]YjZVU$ uhfhjnjij 63^]YhVU$ u!hjhhjij 63^]Yu$v$>!hohhjij P63^]YS\$t>SUW~SVI"huhhjij 63[^]YWڠCjW00pW/p W/pW0jju$hWY=V3>~)SV=jPWO=VC=;|׋3XS\$%~NVS؍D$ 3PU訟uSkD$tSPW虞t9\$FS;|L$ tD$$tPQWX t_[^]Yt$0hhjAjij 4t W軞_[^3]Yh\hhjij h43^]YhWhjjij J43^]YVW|$ GHt WЃGHGt|u PwGGXtP6GXGTth?PGTVWj Wf_^Vt$tVaVc^̋D$@p̋D$@l̋D$@|̋D$@X̋D$@TuÉD$̋D$@h̋D$@d̋D$@`̃l$閂t$t$t$t$t$j̋D$@\̋D$ WSVt$ W|$FD$>FF FFPFFLFTFdF\F`FhFlFpFtFxFXF|fsxFu!h hjAhj 23_^[Åtw PvON O8NHt' HFHh(wPvu u h t GtF(F(@ t GtF$F$ t GtF F t GtFFp t G tF,F, t G$tF0F0t G(tF4F4 t G,tF8F8` t G0tF@F@ t G4tFDFD SVjF< 4 t _^[h hjAhj 0VC3_^[VhT hhb uhV hjAhj :03^hjVd ^Vt$ W|$u ut$fWu h0 hjyhj /3_^PxuVuh8 P~t$upt.Vdu hE hjxhj f/3_^ËD$ t Hyuyt @xup_^Vt$Ft PrD$ F^̋D$L$H t$tuPD$ps̋D$t$pw̋D$L$Hd̃l$v̋D$t$pwjt$ jt$ŐD$t$ pwt$jjt$̋D$L$H ̋L$D$AA$ jt$̸HVb 3ĉD$DD$PUVW|$XD$ oOu5BwfAt$*~ fD$( 1_^3]L$D3aHÍB wAt$,~ D$( fD$ SF`Ѓu_^3[ËG t6jwPS#FFhF VjFd?F`ЃtGt6jwPS褌#FFhF VjFd@F`Ѓt_^[Vt$ W|$VWЃu_B^ËL$ A@ u_3^ËA QjQdqhylЃ_^̸fNSUVt$ WvT؃KSvT!t E( E(UU|$,/WD$ D$$H D$} Ct$t$(x;t CD$HPt$(t$t$0x@;uCqt$$p|$t$WPD$0PWvT@(tFhF VjFd*ЃtvTG);|_^_3^ÃuF VjFhFd+Ѓ^ËF@  F VjFhЃ^̸VKVt$F@ u ^ètvTH~|u3S3L$D$ UWJPvT3ۉF`D$,\$^lnh^t^xE(d$FxD$F0Ut L$(QVЃ D$PD$,PV\$ D$$PFpF4VЋt&F4SVЋttF8USVЋ tctF8Ut$(VЋ tJt$$SFx3ۃD$$\$9D$t =8F VjFdЋt$$SFpt D$@D$;D$_][^_][3^SUVt$WvTn ~P;}RIWvTWNjqSWJtuVj~`^hFdՃtkvTG;|F@ tYvT}9FP|5jvTWV t/PjvTWrFP_^][_^][_^][SUl$VW|$EwT@w`D$H;tFVwTmuSuL$  tD$_^][wTF;}IVwT't$SP?uuS?tzwTFo;|G@ t}w 3R~lVw t$SPuuSt'w F ;|_^][ËD$ _^] D$[ËD$D$ _^][W|$ Gt3_S\$ C(t t[3_èt[3_ËL$G UV3sD~L$VsDt$$WU*tOt;1u"u*sDFB;|Gt8uD$ u^][3_ËL$ E !^][_SVt$W|$jVW؃ x*SVW t_^3[SWP 3\$UjVS x"UVS uSUVt$W~ vT|$ XSvT^`@N(UUVуtCF@ tVjFdnh׃_^][K^`SvT^` ut;u F@ @tdUD$uVPFdnhT$$*PW/VjFd~hT$$D$tCt$֕G WVut?Vjnl~hT$$t+KK6t$蓕D$_^][ø_^][SUl$3WUPD$P@@Ћ u_][VW3P~%VWUStWF+;|W;^}.hhjCjP-h?W!_][h?W3 _][̋D$̋D$tt D$6_3VW|$ tEpt;tP24t 64>3_^̋D$tt D$L3̋D$tt D$f[3̋D$uËt$p 5UuhPChj7Wt$ uh9hjmjrj h3_Vt$t$t$Wt$WR^_VW|$ t7u +Zty|$tI6t$"3ɉtAt$t$t$Vt(t?u7_^h`hjCjsj t;7t VY_3^Vt$ WjVu-h'hjwhj aVhdj$ 3_^t$t$t$Wt$W>_^S\$UVl$t$uW|$~*t"3UPWVCUPX@_^][ÅyNFu+VUs2 u_^][Ãt#uVUKAG_^][ËCx_^][^]3[Vt$t'|$ t 6Yt$ 3ɉ^h`hjCjsj 3^S\$u3[VW;Wt$;~H|$UCuu3ۍnMFPW13X9;|tFPWXC3 VWX3D$t$EWD$t3VPWX u(h hjAjqj Ct$(*W]_^3[Åt%WF;}NQWF@;|]_^[VWt$5uh9hjmjrj 3_^Vt?7VW3ɉtt$t$t$Weu WhV3V}u_3^t$$t$$Wt$?W7V_^VW9Vt$tX7 V3ɉtSt$t$t$Wt:t$$t$$Wt$WU_^h`hjCjsj WU_3^Wt$t$t$t$ju_Vt$$t$$Wt$JWBU^_S\$V3t$;~{xwUW;VWWD$ C ;tItFPWYX\$[KVWBK;H};}IVW)FH;|D$_]^[^3[ËD$u0Vt$t#6`L$;~x Q6^3^t$uÉD$̋D$uSU(Vt$WUHF;}\$VUgS0/t F;|_^][_^][t$uÉD$S\$UVWt2+U茿3~VUt$ 0t F;|_^][Åx3O;~V3tH3ɋD$ H|$;ЋOu_^][VqW0 >_^][Vt$ Fuhhjmjlj 3^Wt$t$Vt$u V_^VW|$ t7u(uhhjAjmj p3_^Ã|$tM6jt$|$EFD$ 0pv ,tt?u7_^Åt;7t V_3^̋L$3t9A̋L$u3Ã|$E‰A̋L$u3ËD$0pqd+ Vt$t#|$ t6it$^3^S\$UVW3uhhjCjhj 3_^][Ë3u t;VL$ ;H͋t$t4UWVN u9hhjAjhj t Wt V_^]3[Ã;u3_^][Vt$t!VaL$;~x QV;^3^Vt$t!V1L$;~x QV蛽^3^W|$u_SUVt$FWH؃;}l$VWXU0 t F;|^][_Ë^][_S\$u[UVt$WFSH茻;}&|$VS@~ut F;|_^][_^][̋D$uÉD$.̋D$D$Z̋D$t$ t$ P ̋D$t$pN̋D$t$p^̋D$t$ t$ pj ̋D$t$ t$ p ̋D$pt$D$t$t$pVZ̃D$Yt$ D$t$ P ̋D$t$p`̋D$t$ppt$ D$t$ pL t$ D$t$ p\ t$ D$t$ p ̋D$pt$D$t$t$pXY̋D$$D$X̋D$t$ t$ $P ̋D$t$p$>̋D$t$p$N̋D$t$ t$ p$* ̋D$t$ t$ p$: ̋D$t$ t$ p$z ̋D$p$t$D$t$t$p$&X̋L$yu qη39AVt$  uhhjmhj 3^Wt$t$t$Vt$u V_^VW|$ t7u+Du hhjAhj =3_^Ã|$t;67t$t$$t$$t$$Vztt?u7_^Åt;7t VC_3^Vt$ WjVBu-hhjwhj Vhdjd 3_^t$t$t$Wt$W~_^Vt$tj~u v939FL$ ;}G~uQv蕷vt*V9D$thvhjzhj 3^ËF^Vt$u3^Ã~u v赵39FL$ ;}ك~uQv^ËF^̸'Ul$ VW33t$ u_^3]YS\$%D$tOuPD$(St$0Pj0u#h4hj hj 3[_^]YËFD$4|$$t-S#t$$D$$PV" tx\$貴Eth}uV"[_^]YtB|$$u|$ut$ SW t"Vt$Wx 3WuڴuhXhjAhj KWuV!3[_^]YS\$VW3u!hhjChj 3_^[Ë3u ׳t t$@t6WVHu;hhjAhj t W@t V_^3[Ã;u3_^[VWt$u hhjmhj T3_^@u)hhjAhj )V03_^7!Vt$$t$$t$$WgWu?V3_^t$W? _^VW?u hhjAhj 3_^Ët$tB7V.t$$t$$t$$WtWt$)Wa? _^WS?3_^Wt$t$t$t$jHu_VWt$W ? ^_S\$Vt$ WSt$V u_^3[ÃWt$V utV蘱;~xWV3"~uvjt _^3[Ã~tjt$ jV_^[t$uÉD$S\$V3u^3[Ul$Wu S?u_]^3[Ëttt u0p(+1$=tw PXC0D$tKL$QjP t7D$Ct&tu"tt=uu Wz_]^[̋L$At @$tL$3̋L$At @ tL$3̋L$At @tL$3̋D$HtIt xuD$3̋L$AuË@tL$Vt$tFt @tVЃV^̋L$AuË@ tL$VjEhjA t^VU\$$Vsht?Ht HuvQvEVhihjej|j I3 Vs詪hnhj j ^_[S\$ Wu_3[Vhzhj uh|hjAj}j 3^_[hhj j ^'Va\$$Vstt?Ht HuvPvDVhhjej}j U3 Vs赩hhj j ^_[SUl$ VW3}W\$~#VWi;XWF֨;|jEhj tfF^F FCt VЃt.nVut_^][ËFt @tVЃV3_^][S\$hhj CDjP UkWU3~JVWUuFt @tVЃFt @tVЃV"UG軧;|^U h sЧC t$t$h t$t$hP- t$t$hP- t$t$h t$t$hn t$t$h-~ t$t$h-. t$t$裋Pm t$t$胋P Wt$ vu_VWt$h`1 WC#^_Wt$ 6u_VWt$h`1 {W#^_t$t$h`1 ~ t$t$h`1 . t$t$hP/> t$t$hP/ t$t$h. t$t$h. t$t$hV t$t$hVn t$t$sP t$t$rPM t$t$rPm t$t$rP t$t$hp. t$t$hp. t$t$c=P t$t$C=P t$t$!P t$t$ PM t$t$0Pm t$t$0P ̋D$C$l øøø4ø`øøøøøøø0ø@øpøøøøøøHøpøøøøøø0øXøøøøø ø$øTøøøøø øPøtøøøøø$øXøtøøøøø<øXøøøøøø<øPøhø|øøPhjdh`J`Ð P                 $ * 0 6 < B H N Z l r x         T `  f          ~     P       & , 2 8 > D J Vt$ Fdt!8uxtt$D$ Vp ^jjV F( Ѓ^̋D$xdtt$ PD$ pE øVt$ jjV豟F( Ѓ^̋D$VpduF^ËFS\$ Wt8P3 ~)IWvwPq ;tWvG;|ڋt8P3̐~)IW68P2 ;t!6G裐;|_[^_[^_[^̸S\$$Ul$$VWEw},l$uL$QPZu xuHhhljU u%hhljAhj 3_^][F-y3%} 4ŰGP56Ft v t$8 F u h|F. ÉFD$4FD$uHjWuhhj CD$Vpt3t1V$&hhjd hhjjoj t W _^][SUVt$33ۅu^E][Wd&P. VjjlWD$jjjWFt;l$IVuVC0jjjWyFu3%lu ~ ָXhhj jpj >uHjWuhhj CD$VpWt3t1V/&hhjd hhjjpj (t W_^][̃l$D$Vp u_D$uFvP0 juvPV uhhjgjfj ^Pt$V ^3^Vhhj tpu V3^ËD$Fp ^̋D$Vp Fth# PFt PV^^̸ 3ĉ$$V$D$4D$W$|$u_3^$3S$ \$,Uu$$D$( @$$D$( D$DD$DD$4Juh'hjG VD$ x3D$ t$|$0pID$WpcQAu+ʍAPUwubt\h:hj jt$H)D$HPw謃xPwp33hChj jD$(33D$Vt$,t$j/7huu/=$Pup1 (x4uwut$Cuwut$ tFh|hj j `D$@PD$$@p܂tPD$@p$D$$D$$hhj j hhj j D$(ulD$D$8D$8PwaxPw豅u@hhjY؃ D$sSwztX$9p}phhj j _L$$u_D$|$,G|$,p诃;xt$hhj j SD$ Uqch&T$@UD$$ABI;h5hjAjgj ?U&h"hjpjgj $D$ ][_^3S̸̸fL$9S\$UVl$WIE<;tD$ML$ +s3p~MVsh@u+;uWt$R1  tsF';|l$s;{uChhj " D$$h# F$hFGhP~txWt$P0 VstCL$ EEl$_^][hhjAjdj S3_^][V`_^]3[P}Fth P8V_3_^][hhjqjdj 3Vt$t PFth PڀV^̋D$D$;vVt$~uPFu^t$ vˀ^áuhp, uYWt$P5~t=VW5~tV_v GVA W5|^_t$P>t$ D$t$ jp ̋L$D$!A Vt$tVv V ^̋D$} ÃP5蝀̋D$@ @̡t P~ø̋D$@ W|$ uG_ËOG Vt$ D$ NtFt^_SكUt39otu9nu GFutu9^u GFutu~u GFuF u Gf FtF G F u9ot!u9^uwVIuG 8tcuF 9uXF th P}F D$t*h h, PyN N 9ttD$@AuG x t1uF 9X u%D$N pp APA Pt0uG xt*uF 9XuD$ppV u][^3_][^_̸$D$($t% $QPztP5H~$h`d j$jD$ hP$Vhhj$ t4WhhFjF Vu 3^Wf@@@@ @F ^VW|$ t$WwƃG%w_^̋D$t$ t$ H APA Pdt$ D$t$ jp ̋T$ t tt3ËD$Rt$ H APAP̸ 3ĉD$D$Vt$PD$P.u3^L$3ÃtuN PD$PAPAPL$$^3OVt$t P/t$ 3ɉ^W|$u3_ËGthPzS\$u _C[_gzGu[_UVS3cz~4VS{P t8UwztSF/z;|́O ^][_U1^][3_̋D$L$H̋L$D$ A tI ̋D$H D$ÃD$̋L$D$I AÃD$̡th$ PySVW|$t9t$uWg؃FFu+ VW؅u _^3[33|$t PhD$t0_^[S\$Vt$t$tEFwPjS1  t^3[Åt!NIFu+t |3uN3|$W|$uth PxtlthVSRtR?u?xuV3_^[V7xu*V7xu7pv_^3[_^[̋D$L$ :utQ:Pu u3jNht$ Vt$FFFFF FthPxwFv th PZwFt PtF FtP]F FFtP?FF^̸\Vt$ D$P6hD$Pvh|D$(^̸h\,E$ujohjAjfj"P3YS\$UVWS3)vWSwMъ:utB:Fuu3u t$U<|:utQ:Puu3u5D$PU!tT\$ GSu;\D$_^][Yj{hjjjfj"nuhuhuhj0h\t$I3_^][Yh\t$Hh\Ch\t$t$t$ZXh\t$ t$ ~O ̸Fj$ujthjAjej"蓱3SUVW|$$3WjtUWu؃D$\$p4N{FI:utX:Zuu3t<I:utQ:Puu3t N u\$j6Sͨ t,|$$\$~tCWEs;7D$_^][j~hjAjej"舰S3_^][hhjojej"`shsh3hjt$@43_^][Vt$v4~t0W|$6W襧tD$Pjv ~u_D$^<K< A@̸ t$D$P>L$$3tPt$D$t$P̋L$3tD$h̸Vt$D$ PG>3D$ 9D$,t$ DD$Vt$,t$,Pt&t"t$t$(qh`t$q^̸&V3D$9D$t$DVt$t$t$t&t"t$t$vqh`t$fq^Y̸ t$D$PX=L$$3t$Pt$D$t$P3̋L$3t$D$̸FSt$t$>؃\$u[UVWS3{pl$(WSqHXD$PL$aD$Ptt$ PVt$SNXl$UVSPt$,t$,u.j_h hhj"UhdShdj趞(l$(t9t jVU莲 V赟\$GSo;3_^][_^]3[̸ t$D$P;t$$D$ t$$t$$P$̸ Vt$D$Pw;D$(D$(D$(P%D$,Pt$t$PVt$,t$,P^ t$ D$Vt$$t$$Pw^ t$7 u!hh hhj"蕫3t$ t$ t$ P=̍D$VPeD$Ptt$ PVt$ t$ O^t$Vt$Pt$t$u4j_h hhj"t$(hdt$,hdj豜(^̍D$VPD$P)t!t$ PVt$ t$ P^t$Vt$t$t$^̋D$Ht@t @tL$hh hhj"63ËD$Ht@t tL$hh hhj"3̋L$tT$B@ t QrЃËL$D$AA̋L$D$AD$ AD$AD$A D$̋L$D$AA̋L$tT$B@t QrЃøVt$ WFtCD$PD$Pt$$F y^hh jAhj"3_^YËFjt$ hh WD$tD$D$Pt$ FЃjrtL$Vt$Nt$>j耬lV_^YW|$uj}h hhj"?3_VW u#hh hhj" 3^_Ã~(SUl$$}@uEPt$8 U؅t@Sj~3F(St$VЃ }@th0M Sj][^3_hh jihj"vUh(WGPhdj'}@Sh3][^_ËF tt$$t$VЋ u5][^_ËN0D$xtYxtSt$$PVы Wt$$t$$VN؅tPW=][^_ËFWЃ][^_hh hhj"葦3][^_hh jghj"oWIPhdj,$][^3_̸Vt$D$t$ u^YÍD$PVYqL$V=kD$ ^YS\$V3΍QIAu+ʃ rLj h4V1  u7F W=x1 P׃tIFFP׃u_3^[^3[SUl$ VWu΍QAu=1 +ʃrjh@V׃ uX*΍QAu+ʃrIjhHV׃ u8X=x1 P׃tNFQ׃u_u^][_^]3[øvSUl$3VWSU33QD$u hh jsjtj"豤UhdD$(l$ uD$PU'udD$Pt$0U% tLj5uh%h jAjtj"GGl$Wt$(w3D$UV臨)hh jtjtj" UhPjΕ l$UW;t V._^][Ufuhh jAjgj"诣3]S\$VWS3f~t;uhE =btVPJct8>u˸^jMjQhjAjhj"讟3^hF 5bVt$6tJPt=VJL$HtPF0D$PjE^2@L$ QjЃ ^3^t$uh7HtPt$ 5Ë@tt$Ѓhhhhj"謞3̋D$0uÉD$̸<D$$D$@y3\uh VWS3 \Ith t$ hYV~hVWSZ]HupV'#@u QVPQhpZVthD VSG[;k_^][Ul$Ue[]ËD$ Vt$ W|$ tPh WhVSU3$[SU\th WhYVUMPV萍U DQhV~jGPt$$UViu h GPhYVnuVjhD VE ~ l$CUcZ;?[_^][_^3]̋D$ %=wmtLtE=ug|$h t$th4t$hHt$3ËD$jt$@0pt$Ǽ=tËD$t$@0pt$]"̃|$u3S\$ UVWS3vY~oWSZu֊t :t,t.t JBuB:E>+uF3Pjjut$,Vt$,蕗tSGY;|_^][_^]3[̋D$SUVW333tP؃tjD$tPtSj[hpj thPhpjm0h2"h?L$QPWQS8uuh`d LtHw6JuwtP6Lt^_6^3_SVW|$3ۋO/7%D$;Gu!t$t$(t$(VQT$,؃kT$$;t$ r;ust9:t*A:FtA:FtA:Fu~t$(tq7wj_^[ÍD$WPdy_^[t$t$(t$(Vt$ T$,؃~|$(tVt$t$v_^[_^3[̸薼D$ SU3%Vt$0\$ \$\$D$,W|$,u0D$,\$D$4[ Ru= \$vL$(9.u D$0D$,\ `\ ED$4D$,D$4@[ u|$(OGu+jjjUt$08D$P3!Jl$4~VSt$K90u.t$8@Wt$0D$(Ut$Dt$@PD$ut$CI;|t$D$u}\$ts9D$t D$0tfl$0t^t$$Bjt$S8x>VSPbt$DWt$F~<$WSG8upD$P4t(SGF;|ϋt$_^][Yh VF_^]3[YVt$WtB|$t:h}hpPЃ uhhpjAjoj"藂_3^Å~-v\N\H@:Ou_@^̋D$V3u^WjP tW_uhhpjAjyj" WB_^̋D$V3u^WjP tW;_uhhpjAjxj"譁W4B_^̸$PD$PD$PD$PhXt$,0 t3ËL$Sw?T$ w3\$w'|$wD$L$XPH[3[Vt$Fu3^ËL$ u#Nu FF^;uF^Ã~* NjT$< uRPtF^Qt$ P tF^̸  3ĉD$D$( $S\$(Qh` jj:PD$(D$,D$0w(u[L$3T Vt$Wu|$_^3[L$3* Ë|$tD$$u~=_^3[L$3 Ãut";t_^3[L$3ݳ Åt;txaVD$PSC+P3jP6T$4L$ ;t=++PD$PAP _^[L$3p oD$ L$(_^[3O Vt$3҃~3^WtE|$$NA< w0A<w7 A<w"W ЅuƋD$ _^P_3^̋L$VWVIFu|$ +VQW1  u>t <.t_^3_^̸覲Vt$D$uhhpjmjlj"}3^YW@>-D$uF3>0uF uhhpjejlj"X}3_^YÅtN_^Yt$=hhpjdjlj" }3_^Y̋D$D$d$:utP:Qu u3Vt$uhhpjkjqj"|3^Ë΍QAuW+hhpQ贮 |$ uhhpjAjqj"b|3_^À>SUF:tz>FW1 t W1 W1 t W1 C< w C<wCé,0< w ,a<w,ǩ ߈]E>u|$D$t+(][_^t$hhpjqjqj"{3][_^hhpjpjqj"n{t$(赫3][_^Sx1 Vt$ >tPӃt F>u^3[À>u^3[Ë΍QAuW+ʍ~;t,IPӃtO;u38_D^[;tG38_D^[̸FL$ 3SU3T$V3W]|$I<*uiD$H;tD$|.t3D$ tuL$l*t1;t-<0r<9v ht$ t$  ht$ t$  ht$ t$  W6uh<hjAhj"s3_SUVt$3V6l$$SV98hvJu?Ft8 $:utP:Quu3uPOhvu^FtW d$:utP:Quu3u%jWU u5hj W,63^][_jVUt$ jtPWU6t$CV5;^][_S5؅uhhjAhj"r3[Ul$VWU3v5VU6hwu]OtV :utQ:Puu3u&St$Mu8hj S+53_^][jWt$ t$ j tPSQ5UF4;Q_^][̸F 3ĉ$SV$,3W$,W|$\$w43USW5t$$dr D$PhhW D$Phh; D$Phh @L$Qph @L$Qph i@L$Qphh LhL$(Qp/D$PD$4Ph@hu0EPEPEPEPhXD$8hPED$$3ME ȍD$QhjPT$,mBu|$$+OGGuʃt|$$OGuf fC|\$|$D$PD$(Ph  BD$Phh  )pD$(hPfD$PD$4Ph,wt$CW\$E2;]u 2_^[$3Ë$ _^[3eËp ip p 1p p Mp p p q W|$ V$Dt h<t$^_hTt$q^_hlt$X^_ËGpht$9 ^_ËGpht$ ^_ËGpht$ ^_Ët$ hVhjwVq^_ËGpu,FPFPFPPht$ ^_ÃuNS\$h SxF QhSX vOuhD SĵG[^_ht$,^_Ët$ h,VwVb^_Ër r s r Ps r 1s zs t W|$uhhj|hj"l3_S\$ VtUl$ `$Dv uhhjAhj"l3^[_jWu-hhjwhj"dlWhPj'^ .]F^[_Ã|$(Wt?Fhhjvhj" lWhPj] t$WV umhhht$WV uGhhh\jtЃVt,ύAD$$Au+L$$QWR\ t .]^[_hhjAhhhhj"Cku VV]^[3_âu u u v |u v u -u t ̋D$SUVW338u _^][ËHu 9X t Q#'@ hjj0UZm xVUmPD$ xPy؃|$tVU6lt$] NtQ0tFWt$_3-tVj0U3l y_^]C[hhjAhyhjA hdhj}jzj"iWS23_^][SVt$ W>tzFjjUPt x^PvstuP tfW3i,~'\$VW-PS,t WFB,;|W*_^[h'hjAj{j"$i3_^[h hj~j{j"i3_^[hhjj{j"h3_^[SVW334tDt$t$AuJhThhhj"ht$(h, jMZ V贿Wt$w_^[hWV؃ tϋL$Wt$qH_^[S\$ Vj;S0 u^[Ul$Et"p-t$FP~M Au]^3[W+h?hFP u_]^[VSW0 jW>MWؗM39_]^[̸ 3ĉ$ $$$U$T| D$Phh0 D$Phh D$Phh D$PAph{ D$PAph^ mD$PAphA PhD$Pqw%D$PD$ Ph"Ahu0EPEPEPEPhXD$$hPSVWD$3ۍIME ȍD$QhjPT$$mIBu|$+OGGuʃt|$OGuf fC|_^[D$PD$Ph  BD$Phh w )qD$hPp\D$PD$ Ph,L$D$]3vÍIujWhp jAjpj"Sa3^YÍD$Pt$mFuV}3^YËD$^YVW|$t%0pD$PVhV2Gtt$Pj D$D$Ot)1qD$PVh VD$,_^̸SUl$(2VWUD$3\$D$D$ D$$3#&WU$V‹:utX:Yuu3uRFD$ :utP:Quu3\$D$ :utJ:Huu3F\$tB :utP:Quu3۸D؉\$\$UG ";D$,pk|$}jjRVVi xNPV(it@PKD$3hh jxjwj"^vhdjnP 3_^][3|$uuhh j{l$ttudV PvVP8D$ tu=hh jzjwj"$^S[D$$PaU[ 3_^][3W>tЅt2 D$t?t4Wt$ ;!t#_D$FD$ _FƉ.^][hh jAc8u _^][=hh jyjwj"j]3_^][Vt$Wh t$hYV|$ ?t.j h Vݧ7Vet/jhV迧 tj h V詧wV0_^̸X hX t$hX VhX t$t$t$hX t$ t$  t$ t$#t${T$J4yt$;t yuT$q̸| ̸8 SUl$udP@Ph t$(h t$,hu3~ ~YVWISu7j|Vh t$8h t$<"V蜋wt$H`uC'4;|_^][̸規SVW|$3W\$3~BVWcpXjt.jSPD$Pt4WF;|‹\$ _^[Yhh hj}j"Z_^3[Yh8 t$Bh8 SUl$ 3ۅV9\$LD$@Vt$uNFu+@~!hh hj~j"Y3^][W}u.h| j7c}t$Wt"hh hj~j"Y3_^][h8 9؃tJL$uVFu+VQs- t SwtD$_^][hh jAj~j"Yh8 Sh| W$E3_^][hh jkj~j"X3][t$juhh hj}j"X3ÉD$7VjHt(t$ Vatt$t$Vt$^hh jAjj"2XV|3^h| t$SUVW|$3w~1l$IVwGU3twF;|_^]3[ËC_^][Wt$ jtu"hh hhj"pW3_VWt$^W覇 ^_Wjt,t$ We`tVWt$W[ ^_hh jAhj"VW53_h| h| t$t$t$h8 t$t$t$h| t$ t$  h8 t$ t$ ̸̸̸覊Wt$3|$S\$ UVt$$Wt$$Vh ShV7VkKhD V(|$k3WSW7k -tMh Ht'EPh0V77VJhD V褝 8UhVEPwV Gph UhV|$CW;i\$(|$t$ G|$;^][_̸ V$u!hhjAhj"T3 SUVWt$(t$u hhj"hj"gTVD$3?|$$UV؃{ZsOƊ:utP:Quu3u D$>@u?FPWct$Wt$,8W|$4W軩 .jVoh?t{>|$$Vt$tAt$EVD; h0M V^D$_^][ hhh]VXhhjAhj"SghhjAhj"RJhhjnhhhhj"Rshsh3hjgD0h0M t$h t$3_^][ ̸̸T̸̸<hTt$hTht$hht$hVh<t$Rh<&ht$"h̋D$S\$Vt$W8h VhSwSFhD SJDPh VhSG4tVPSs _^[h VhS{_^[hTt$t$t$ht$t$t$ht$t$t$h<t$t$t$ht$t$t$zhTt$ t$ ht$ t$ ~ ht$ t$ ^ h<t$ t$ > ht$ t$  ̸ SUVWh<t$dh}duh.hjDLh|$%l$$3U~\$SUCu΍d$:utA:Buu3u0j`ЃWu΍yAu+QVRtƊ:utP:Quu3uhЃtG|$(t @@u΍y$Au+QV2~ hohjAhj"Mh<t$z3_^][ ø:utN:Huu37uh{7u脼W!ttWvh0M W4Q\$l$$CU\$|$; t$xt 8hhhhhVhhhj"LuhuhuhjL>0h_hhhj"YLuhuhuhj >0z_^][ SVW|$3W~>\$VWipjt3PSQtWF;|_^[hhjAhhhhj"Kh S3_^[̸SUVWh(t$3V\$;SV~ϊ:utA:Buu3uPvxf]EhWj9Eu Eh<x/Wuh_.jI|ЃWv΍yAu+QVR/{ vhvpF8@&\$@PS誟t$ WSWS }u EVuG P\$t$CV\$ ;n} hhh hhjnhj"xIvhvh6hj*;0hhjDhhhhj"&Ivhvh6hj:0hhhhj"Hvhvh6hj:0ahhhhj"Hvhvh6hjY:0#_^][YhhjAhj"dHhU&3_^][YS\$UVt$W|$.Eph WhHSu  NQRWh`Su3 0~SWu7 thSVjVSVwuG ;|t$hD Sʏ|$$Ftph WhpS(_^][ø {Vt$W3V|$$ xS\$Ul$(WV 6] -Vh Ht*EPh0S6Su2~,~&~ ~ u~h WhS=_^[̸xSUVWh ؃u hh8jAhj"'Dt$ 3VUVqWt$(GwSD$$* LƋ:utP:Quu3uCPW譯Ɛ:utP:Quu3uCPWm|Ɛ:utP:Quu3uCPW-~Ɛ:utP:Quu3u CPWA:utN:Huu3u2t$C P tWt$ EVx;u_^][Yhh8jjhj"]Bwhwh7hj40h S3_^][Y̸vSUVW33D$*t$$3ۉ\$t$ St$(ExuOpVS؃SVSt$,賗Vt$\$wPVt$$ UWtuh3t`Vt$tAht ̸pS\$ Vh ;u.t$,Vht$,#Vst$8f^[ËL$,Ct$$D$ APh QhVhjD$(PVrshD VG0^[S\$ VS3~GUl$W|$h UhYW}VSPWhD WSF},;|_]^[̋L$SW|$ h APt$h QhpW=Lt`Ul$VLvU1t!t3hWY6WN >u^]uhD W2_[h W_[SUVt$3Wj hTv31  ulvt$tOt$>@hh8hhj"`9thj Unth`8W\_^][ËF`:utP:Quu3g؅t3vt$uu&hh8hhj"8_^][hWS Wt$(讎;S+ԏ>Ws-WbHPW 9hhh8hhj"C8ht_^h][x_^][_^]3[̸flVt$D$ t$u^Ul$}t]3^SWV3WV}XuRE=LHtPNÍd$:utQ:Puu3t ~uj6u/ t&~t$t VG;cD$t$h0M VD$_[]^Vt$ F(tF0t|$tVA t u#F4u3^ètF,ttF4t^Vt$ F(tF0t|$tVt u#F4u3^ètF4@ttF,t^Vt$ F(tF0tB|$tVt.u2F4u,3^ètF4@ttF,t t F, u3^ø^Vt$ F(tF0tI|$tVAt5u6F4u03^ètN4 u yt F,u3^Ë^Vt$ F(tF0tI|$tVt5u6F4u03^ètN4 u yt F, u3^Ë^̃|$ tt$p3ɃEȋËD$@(t @,u3ø̃|$ t t$0Vt$ F(tN,?u;t6t2~0@u,jj~V> xPV>PX9 t^3^̃|$ t t$ø̸hS\$,Ul$(VWEw},l$uL$QPu x u-hh`je u hF3y3+ }+Ǎ4@GP5Ftvcvct$@Drt$HF8rF~tstoF. ÉFD$4FD$ P z z z J z J Vt$t'Ft tv4Xv,XV#X^̸̸D̸`&\ 3ĉD$\S\$pUVt$t3W|$tV|$t$[UVSvWݿ؃US6D$(jPP|$,EL$0QAu+ʋWrBu+jhzW!Y tgWD$ PV|fWhVfW|$4wVfw WwEt$8V|$@,;=uHt_^][L$\3Z`hhjAhj"i&3_^][L$\3Z`ËL$l_^][3Z`̸ZUl$u"hhjAhj"%3]S\$(VWS3WSCht$ 胷؃ PSU>j;v0 @+nD$FD$ D$jPt$4t$4s&hEhPxW D$UpV0 jV.@t*VaU\$4GSl$;_^[]hhjwhj"$VhPjVU$l$h0 U3_^[]hhjAhj"$hhhhj"k$hhjAhj"N$ht$hֵhDt$ҺhD覵ht$t$t$:hDt$t$t$̋D$0t$1ht$ t$  hDt$ t$ S\$Vt$W|$?tGh ShHV7V(jhD Vm t vhvh6hj0t$t)VhhD hhj" D$tP.D$D$t Ph0M SD$(_^][̸&A 3ĉ$S$,8 U$,V$(W$0t$N\$D$\$:utX\$:Zuu39t@jUhD hhj" vhvh6hj03jvK'j[hD jnhj" vhvh6hj[03V|:\$\$u(|$tX:Z\$\$u|$u39Et@jbhD hhj" vhvh6hj03UVyjhhD hhj" vhvh6hjz03uT:utQ:Puu3>39+uPu=jrhD jAhj"H vhvh6hj03D$=1 jh` v׃ D$PFPuj~hD jq[D$h@hD Pr<t8 i t$WAPi> D$ WH9W9hhD jA@hj"G vhvh6hj4jhh v׃ Fh PguhhD j ihD$(PVQ 7ujV\SuVLt$ hhD j  hhD @Pq;tWhD$( PAP&= 8H^jhp v׃ VJBu+ы T$hhD @Pq;tGh t$FPAP< D$HhhD jA,@hhD jAhhD hhj"lvhvh6hj0|$t3-3$$_^][3i;̸;SUl$3W|$U\$@h0 'GVU~fSU$t$(jPtsv=u ?u:7!Vwu%Vwt(UCL;|$D$D$H(VU\$3^h U>h w*G_][Y̸v:D$Vt$D$D$Pvu3^Pv$^Vt$t-t PFth PV5^̸9SWhhx j3q7 u_[UVt$GD$D$jPh_G GV~@u |$DEu 9]txP G uGP8jD$PjYV~u|$^]_[t$PVT D$jD$PhV3u |$uIPVLD$~5jD$PhV؃u |$uSt$uN(t Ut S^]_[Vt$~@u/hhx jj .V,hhx jj -$F@^̋D$txu3P& L$̋D$pD$pi"Vjuh j A5 u^S\$Ul$W|$.^FtHuO=u u[w+uh  GGt9VPt+|$ t3ulGGtUPuV23_][^ÅtC_][^S\$UVWs3.~?l$IVs9out$qO!tsF;|_^]3[Ë_^][̋D$pD$p!h ̋D$W8D$@ uRtMSVw 3{~+\$Vw SP tw FP;|^[3_^[_t$w~ @_̸5D$$D$D$ $$Pt$$u3Pt$$bVt$vuh vhv V0 ^̋D$S\$Wuu_[ÅtP1 u_[3Vjch j2 t"6F uV0t WL^_3[ËD$t~ FtCF^_C[F^_[̸f4SUl$Vt$Wm@VD$V3SVw =7=7UouEEtZP7V taEV@FuuV6:wv st%Gt$CV;DD$hP t$ D$_^][YËD$D$H(̸&3D$ SVWt$(|$ t$$D$PD$D$@ w5$( _^[_^[_^[t$ V]u2V?E_^[Ët$ u_F^[ÍD$PV`؃t\t$t$(V tGu t$tD$0?1VH Pb_^[V5_^3[Ð/   # Q Q K 9 W|$SVw Yh w73ۃ 9_~=t P[Fth PFt PoC;_|ËG^[th P迿7,W,_̋D$tt D$,̸ 0SVW|$OɋttHG _ \$u mt VP.uV3~u _^3[ Ë\$ G D$؃U/D$$ED$u3褾~dVuD$9Gu9 uu]_^3[ WQ脼uW3ԾtuFD;||$ L$AL$;OgL$$;u ]_^[ ËD$]_^[ ̸/W|$W۽ _S\$VW3KɋDD$譽~/VWP =WF~;|UW3nIVWپPt$0D$$+uCl$t]EPt$j tqMSIH uPj{u Ct"Usdt/WFּ;k]^[_ÃK^[_]^[3_SUVW|$79_~G6UV t:F uWUV t"VWuC;_|_^][_^]3[̸-D$SUVWt$, L$4|$t3ol$t3GD$t3_u _^][ÍOL$0D$d$Pt$0jjWWȃG(tu yD~ uMl$A t ;Ll$D$HD$yt]U_F^][Ë|$hh j8* t$ hh WF * FFF FuV(3_^][WjPt,D$$ >Fjh Pj VjPWDD$0l$w Pt$0v裻W{hh jOD$,jQD$4 ~8uuG( tL$0uG( uM@x;LD$uG( uK@x;L؋D$0HD$0\l$t$ D$(_03^][VR_^]3[̸*SUl$VW3ut$0/IVu藺E> W|$9FW3ٸSWGWVU}uLuxPWj D$t$ VWUIOe|$CW_;|D~u>HPQj toD$t$ VWUIO tDt$uFt$;EtjPD$$0Ut_^][YW_^]3[Y̸F)SUVt$3Wl$v萷\${UvwD$3a ~WVwѸuSWtjSUt$(!td\$\$wF;|u\$GtjPUSt%t$ l$El$vֶ;}\$H_^]3[_^][S\$ UVWC {t8W膶Nx*VWtHPI#VWJ Ny֋l${WDNx)VW起xuHPI#VW Ny׋Ct"xu@tHsT#C;]uC_^][̋D$uËPL$tuIQp+̋D$uS39X@Åt P聵؋[̋D$uË@̋D$uË@̋L$tD$x ;A}3̋D$uË@ ̋D$u@t@ Ë@̋D$uË@h t$̸f&D$t$D$D$D$D$PD$ P艹 uUl$U mSEMff ٍJ;DD$fVWfEMff ~f;uhhp!j(+3# UVt$\7hhp!PD$$" WUP% f~AF+N fF A FFA! FA" FA# FA$ V FA% V FA& V FA' V FQ(A)*ff f;rVN+fVfrEFAFQAff ЍGf;ufV$N f_#VD$h P貲D$_^[t$kL$ D$D$]SW|$3WBUl$Vt$SW裳h t$,h!Vih Uh!Vi(h!Vih Uh!ViG L$8PwjAPV}h Uh!ViwwVnHh Uh!VjiGfuh VSiL$ PwjAPVJ}h Uh"V&iOGu.<uPPh $<uPPh  PPhX!Vhh Uh"VhG$Pw D$ h Ph0"VhGP7D$8jPV||$<$CW蜰;}hD VjhW聰;L^]_[Vt$tt PV^̸! 3ĉD$SUl$(VWޯ|$8\$4jh\&WSD$ D"jh\&RV!+ȋjhPQ"PVt$jVjhWS!i+SVиPhd!D$ jPgD$(PV0VUgVL$P(_^][3 Pt$!P}t$wPt$t$t$襸Vt$6tt1Ht"hh<"hhj.3^ËFpt v u3^Ã>u 蓮tW Pa}tW6u PWM_3^Ë_^Vt$6t4Ht"hh<"hhj.>3^ËFptvu3^Ã>u tW P|tW6]u PW誁_3^Ë_^S\$V3#t2Ht#hh<"hhj.3^[ËCpt s u^3[UW63Ol$~3d$W6踮8uUpt/6G;|S t1_h]^[hh<"hhj._]^3[t$WȃuËD$AVW|$Wt$~hh<"jOjQ_^t$uËL$hh<"jH jQ̸SW|$WJ؃u_[ËUl$tu@ tohU?,D$ uhh<"jiVL$QjjP#*ht$$33jjht$4*Vt$@3%4` ^7=At3w7$l UW7]_[jUW? ]_[]_[hh<"hjnj.3]_[Ð;  ; G ( ; S\$ VW|$tCWu;x t0po::Po.7wS$ _^[W6W5@WMWWGtVP7/_^[ÅuEV*3_^[hh<"hjoj.3_^[jrh<"jjoj._^3[Ð  % S   Vt$6$=Bt5w?$D F^ËF^@ËF^@ ËF^@ËF^@=t*F8t(hh<"hhj.>3^ËF@ ^      t$t3̋D$S\$V33At2Ht#hh<"hhj.3^[ËCXt [ u^3[UW33m~dW3ة}u_^Vt$tN|$ ttKPZ^Ã>u*puhLh<"jAhj.23^ËH ^VZPttRWjCV+t6?u+u hLh<"jAhj._^ËH _^̸&VWt$D$ jjP't$ht$,%tUD$PjjxV#t$$PR;tQt$P&;t;V_)hPt% uhh<"hjsj.3_^Yt$t$ _^Y̸VVWt$D$ jjP2&t$PPWu!hjh<"hjtj.|3_^YxPH(tWjjoV"t_^Yhoh<"jwjtj.2t V$_3^YVt$6t=)tw&$ F^@ËF^@ËF^@=t"h h<"hhj.3^ËF^@ Ç     Wt$ &|$ P7 ut$ ڑPw _Vt$ jjV聱F8 ^uÉD$iVWPqt`|$W蠑PVi7 t9W\Pv t#|$ ?tP7v7_^PVmvh{h<"jAhj.3_^Vt$ jjV豰F8 u"hh<"hhj.<3^WPu hh<"jAhj. 3_^Ët$ t P>_^+Pt$t$t$9 Pt$ t$ ]| ̸"̸#̸\#̃|$u@D$V0F t P5kFt Pu<~<t F$P ^ø̸`$̸$̸8%̸|%̸%̸@&̸&̸&̸ '̃|$D$u@t PVj̸|'̸'̸(̋D$W8D$u$VwV6jVΎ G^_ÃuGt PGP _̸L(̸)̸$)̸$*̃|$upD$Vu:pFt PLiFt P:Ft8PL^ÃtupFtvPvm ^̸<+̸+̸,̸,̸(-̸.̋D$t]VW8D$ wEt$$, FWPc~6WFu_3^ËpW:~_^øÐ      ̸/̸$̸`0̸*̸)̸0̸.̸.̸\.̸X/̸t/̸L$,L$/D$,D$-D$.D$,D$D$$$D$(D$D$ h0t$$D$D$PD$D$D$$w(̋D$t$ Pt$D$t$ t$t$PCt$D$t$ t$t$Pt$D$t$ t$t$P3̋D$t$p t$D$t$t$p (̋D$t$p t$ D$t$ p t$ D$t$ p ̋D$p tËD$t$P_t$D$t$t$t$Pt$D$t$t$t$Pst$D$t$t$t$P̋D$t$p`t$D$t$t$p̋D$t$pPt$ D$t$ p, t$ D$t$ p< ̋D$pPt$ t$ = Vt$ Vt(>u'#ujLh(8jAhj.3^ËH ` ߋD$^t$t$t$t$hdh q5t$t$t$t$hdh A`jjjjjt$t$hdh 5$jjjjjt$t$hdh 5$KPhdt$t$t$t$Pt$ t$ m SUVt$W6VP uNy3PWUSt$0t$0Vt$0T _^][t$t$P t$t$sP} [Pt$t$t$t$Vt$VPOthh@8hjyj.3^W|$u+Vt98ujxh@8jjcj._3^t$t$jV?~SWV؃u[_^t$$St$(WS![_^̃|$uhh@8j~jzj.3Vtt$t$t$V@?u3^S\$@u jVCPu"Sjt$VuVN3[^[^h@h@8hjhj.3Vt$VPthh@8hjmj.O3^WjV_u_^t$Wt$ W-_^Vt(D$ u!Pjt$Vu V3^Ë^Vt$VP/thh@8hjpj.3^W|$u+Vt98ujxh@8jjcj.l_3^D$ F@ t @@D$u9D$u"u9|$uG_^t$PV tSWV,؃u[_^t$$St$( WS[_^̸VSUVWt$13Vt$蛔~wl$$SV W uNtt$(UWj, u8t$ t$ W-Wt$(*jjW- ^u:_t$VC$;|hh@8hjqj.3_^][Yhh@8jpjqj.3_^][Y_^][YSUVt$WV03U訓~RWUS u,t$t$SKISV)jjS8I 7t$UGV;|hh@8hhj.D3_^][_^][øSUl$3V3ۉD$U\$0t$t MI Y\$ t$$ ;D$u!h`h@8j}jrj.3^][WV3褒|$,IUV VL$$ ;unD$uWt$,Vt$0 vCtWV*u1t$(V+Vt$0(jV+uDۋ\$~u+t$EV;bD$t3u/u+ _^][Ã|$thh@8jphh@8hjrj._^]3[̋D$uSQVP%u^S\$@u jVu"Sjt$VWuV3[^[^Vt$V5Pthh@8hjvj.3^S\$u+V)t9ujxh@8jjcj.3[^WSVu_[^Ut$ Wt$$p tjWV% SWb ]_[^SUVWt$c&uh5h@8jAjwj.E3_^][Ë\$3Sl$$~(d$VS艑UPW,thSF;|܋\$ @u jW[P3UWuShh@8jhjj.WL3_^][h&h@8hjwj.W!3_^][SVt$ jjj V VW9$uhh@8jgjj.=V=uW3_^][Ë_^][VWt$3t$uhh@8jhjj.3_^t$Vt$jjj V Vt$,$u*hh@8jgjj.t$V\ _^t$VE _^SVWW D$t&t$ jPt$Wduhh@8jcx\$3S~#VSUPW>tDSF;|݋\$ @u jW(PuSjt$$Wt!_^[hh@8jAhj.{t W_^3[̸SUl$Vt$$D$ @\$WVjt$,jjtIhOPW t1VjUSW6D$(u,hh@8jchj.WZ3_^][Yt$&@؃t3sctt$t$,-At$VjUWltWD$U |$t_^][Yhh@8hhj.3^][Yh:h@8hhj.3̸fSUVt$$3W3D$3D$l$9\$4u0Vt9ujxh@8jjcj.3_^][VV`#h>h@8hhj.NV3.~7$WV虌jjL$,QjP9\$tEVG;|V|$,;tt$ ;u}hD$PSg S( = ujjjqStAt$x=$$t(VWRujfh@8hjkj. t$;^t W{$_][3%UWt$uHl$u_3]SVW3艆~'VWUS@EtWFb;|^[_3]t$|$WHSWt$$EjWH3^[_E]̸W3D$WWPW$$D$ t$$P#$u hh@8hhj.D$hP譓$tPD$ PD$P觙>D$VPUhh@8jdhj.[VPh\8j(^D$P_ČS\$ t&W|$ VWz Wt;u^_[t$[5@uuh@PchȪjWt$̋D$Hut$qÃut$q"Ã̋T$L$tA T$ tAT$tAT$tA̋D$$̋D$Hu%T$ tAT$t A@ÃuT$tA3Vt$ W|$ t6hh GjFjP+G t P[MV|G Gt Pw_^̸ SVt$WD$F~$0PP^6؃ \$u_^[ Ujj4V y3SStjUuj4VOUPujjj3PW~؃u h<h Gjrhj.荼wD$UP D$PD$0PD$Ph #hFh Ghhj.6TL$; t hOh Gjxhj.$sT$,r;ustR:u'tGB:Fut:B:Fu t-B:Ft%hUh Ghhj.蒻3D$PDqjw ؐ؃ S~kUjjhjSl~RjW_Uhh GjAjfj.虸tmPWVO_[^3]ËD$4l$ujW t‹D$4ȁL$ u{G tD$4uMD$D$PSD$tPWD$h%P {2D$4l$t5Wt$( &D$4@uW[ D$4ut$(t$(th|$tBjw یG<P7Vjjhjwu 7ytW6yt_^W_3^̸$$Pt$3YVPt$jht$t$&^YVhP+t$tjhV h)bP+tjh)V h-3P}+tjh-Vi hPN+tjhV: hP+tjhV t_jj,V tNhj%V t:j@j%V t)jjV tj(j%V t^3^Vt$6tjHh Gjlhj.G3^ËFu^Ë@^S\$UVW33tjHh Gjlhj.3 [t[S3v~AWSIx}tu vt.uV&wtSGv;|_^][Vt_^]3[̸SVt$3ۉ\$6t!jHh Gjlhj.F^[ËFD$ u ^[Uph 3t$veW|$ d$D$Vpcw؃{W3uVW9wCu Wp2uWpbt|$ FWu;|Qt6hh GjGjP C t PWmC Ct P{\$C\$sS\$UVW3tjHh Gjlhj.3 {tW3s~(l$VWYuUPSt%WFs;|܋C_^]@[@_^]3[S\$V33tjHh Gjlhj.t3^[Ë[u^3[ËC9pt SWs34s~8WstP^ t(t PVsGr;|_^[Åt V_^3[̋D$ut$pJÃut$puÃ̋L$u%T$ tAT$t A@ÃuT$tA3̸d 3ĉD$`D$hSUVt$x3D$ 3W$D$P9^ u3hIh Ghhj.3_^][L$`3/dvD$WP- 9^}*"u >}u >}v Gm;|v3m~2Wv'o8u >}vGm;|ԋF0t >}v3]m~MWvnH9u8}>} 8}vGm;|>}_^VW|$ǃtAHt#hh Ghhj.թ_3^Ët$ t$FPLu_^Ët$ t$FPtȉ>_^Vt$~ukP:;FujSh GjAhj.[3^j藾NIF@@6;jt F^6胿tjHh Gjlhj.3^V蚼u^WP:uVW3_^j~jOt$w_^̸` 3ĉD$\SVt$lD$ W|$t3PvD$vWPD$ PD$,PD$P$ 9\$xv L$ ;tj}h$Gjyjuj.vT$(r;ustJ:u't?B:Fut2B:Fu t%B:Fthh$Ghjuj.s%t$ D$,Pv 6 EٍD$PL$l_^[3|`̋D$@pAV躺t1V.tjjt$p t^Vfhhh D$  MSV3YSeb~#VScPU ~[SFBb;|uGG t"wPwl GG^[t#D$ _]hh}}V`>}oWv3-Y~?WvZtFtAu@9tvGX;|ǃ>t~u~t_^_^Vt$~u[蠹Pj'FujZh_^˲PW4$_^̸T 3ĉD$PD$\SUVt$d3WP\$3VD$kcPOthhlGh2VʦPD=thhlGhV9P6D$uhhlGhW3WO~/\$VWPs uxtWF*O;|3WO;u#hhlGhhj.  jt$fPjjh3PV該u#h hlGhhj.赋D$PD$$PU u#h%hlGhhj.{L$;t#h*hlGhhj.PgvT$ r;ustP:u'tEB:Fut8B:Fu t+B:Ft#h0hlGhhj.ފjjj2PU葱u#h:hlGhhj.蟊|$wPʩt#hAhlGhhj.hD$PUt$ hHhlGhhj./6w6Pt hNhlGhhj.tKPV LPt$ _^][L$P3ThhlGjhj.袉L$`_^][3޽T̸S\$D$VWPSD$3t$ hohlGhhj.4ljjj2tPSu hyhlGhhj.0D$D$D$CjD$ CPD$P tPV_^[Vt$F0PkP u^t$t$v P諭P^̸Hּ 3ĉD$DVt$TW|$TF0藞PP[ taL$QL$Qv PAP苴tAt$D$PjhWuhhlGjA%_^L$D3HhhlGhhj.蘇L$`3_^3ֻH۬Pt$t$t$-軬Pt$ t$ $ ̋D$8tjGhGhhj.3ËPD$L$ BtyVqAu+^J̸f 3ĉ$$$S$UVW$3PL$|}Nu'E X ujqhGj~hj.bT}t jvhGhhj.:,D$P9jjjD$$SPhhGjD$P7P$Pa$PjjD$ jPhhGjPJGu h3PD$P8hhGjfD$P_P8P蓚D$ P'2P*P؃^sVCh})KJKAC@tnPPW tWCW@jj3WWt$$CtE$$V$;VuGtJhhGjAhj.6D$PtPVt Wi3$_^][3BĤ̸V 3ĉ$$$UV@3D$Wyh D$PD$袵9wu8hRhGhhj._3_^]$3虷ĠS_3蟙=}C8g@@D$C@0D$Pj؃ \$83OP蹘P u#hkhGhhj.豂$SjjjPD$4P0D$ jP艵D$pD$,PH4y huhGjfhj.I`GL$ SQpww0(Fy hhGjhj.  ]D$ Pl33ҍCЍ ;hhGRT$ ޳ D$ PuD$uPVkG pO D$G hhG0舳 uhhGjAhj.7QG L$ Q0pD$ PVu hhGhhj.D$uED$\$D$ Pð|$ u t VS1hdhGhhYhGhhj.肀3$[_^]3軴Ġ̸SUVt$(1\$(D$4m;s ^]3[3ҋuWhhGS: u_^][Vt$( m+PD$P+Pt$t%hhGhhj.z3^ËD$UW~@o@ D$p Wu_]^S_;ufPp CjV t|U3{<~`d$VU=swlV~ND$ jWppD$ PD$(Pt+t$t$sҪUF<;|[_]^[_]3^W*P D$xu3_VnP Vw-< uQPVz^3_D$t6ۚPE A@tt$Pu^_t$P;tS\$SW8u[^_h}hGj CjP趝^[^_̸膬VW3D$Wt$PMt\VA\~FD$PV[~4VLWt$M t$V)T~D$p V~LD$t PM_^Y̸X 3ĉD$TD$\S\$pUVD$3D$l3WD$ {D$tWD$CD$@v_^]3[L$T3QXÍD$PD$(PsR $D$(jPjjWhtht$xD$t$PjW,tLhhGt$¨ t0t$xD$t$PVWtD$L$ 0D$t$D$(P;u t V芦W!s)KL$lC_^][3^XVW|$ t$BWtWy'%3=_^t$),uLjjjPW菰_^ÃjjjPWr_^ÃjjjPWU_^jjjPW=_^5hjuhhPqh jq̸ 薩u H@ $QЋD$t$D$D$PD$ @Ѓ̸ FWjt$zuhh|Jjjhjt3_ áu @L$VQЋD$D$D$ WPD$@Wշ^_ ̸ 趨u h@ $QЋD$D$ D$PD$@ЃøvVt$D$uD$Pt$$t$$V";u @L$QЍD$t$Pt$(D$t$(P^uf$̸ Vt$tDu @L$QЋD$t$ uh-h|Jjkjljs3^ PD$P^ ̸ vVt$u4t$t$V uUhAh|Jjjjmjr3^ áu @L$Qt$ D$ t$t$ P^ ̸ Wh^t$'ujih|Jjjdj,r3_ áu d@L$VQt$$D$ D$D$WPD$@3WEt$$j^_ ̸ Fu @ $Qt$D$t$D$D$ PD$@3ɅEL$̸ Wjt$ujzh|Jjjgj/q3_ áu g@L$VQt$$D$ D$D$WPD$@3WEt$$m^_ ̋D$̡u @Vt$VЋD$F^̋L$uhrh|Jjijijsp3ËL$@Vjt$$uhfh|Jjjjj6p3^ËL$Wu(hrh|Jjijijp3V薳_^ËVQ@ЃVz_^̋L$t L$@ ̋L$t L$@S\$uhOh|JjCjpjo3[Vt$ Wt$t$V u_^[PVAЃt-PVA Ћ  HPVAЃu_^[̋D$uh(h|Jjijljn3ËL$uh-h|Jjkjljn3ÉL$D$t$ t$ t$  uT9D$uhAh|Jjjjmjmn3hDh|JjljmjRnt$ hJt$$hJj `(3̋L$uhh|Jjijqjn3ËL$@$̋L$uhh|Jjijnjm3ËL$@Vjt$uhh|Jjjrjm3^ËL$Wu(hh|Jjijnjm3V_^Ët$V@QЃ V_^̋D$u P@Ѓuhh|JjAjojm3̋D$Vt$WxVWX0u_^ËD$ Vp4t VW,v vV_^Vt$t5Ft.@ FPh@x P4h`x v3v%4^ø D$t&L$t $ $QpD$ 5 3 ̸ 覠D$t-L$t% $ $QpD$ 5t@ 3 ̸ VW|$u3_ S\$Vt$ tXD$ |$Pst$K5u\J:utN:Huu3uW0 u#D$ D$ (Ps|$4t @^[_ ^[3_ W0 [_ Vt$u3^Ã~uhpw hw ~3Ftݸ^UVW-hhJj ͜ trL$QAu+hhJiU衜 tFUt$P/D$F~VpV2thJh$hJ _^]Wl+t V__^3];Vt$Wv3633_^Vt$ W|$ ;t):utP:Quu3uQOt7Ft0$:utQ:Puu_3^_^3;Nt E_^̋D$xt Pt$ ,0 Ul$}u[S]WS+Ox(VWSI-vvVOy^t S*uU_[]VhhKj讚 t L$VIуu V讘3^Ë^̋D$u@@̋D$uв@@Vt$tVAV+^3^̋D$uPWh^t$quIse%=uhhKjrjxjbg3_hhKjjxjFg3_Vt$Wt$W踪^_øD覛 3ĉD$@D$LSUl$P3VWD$43D$`}l$$D$8\$|$0ۤD$uhhKjjyjfh(輥|$ uhhKjAjyjfmU|uhWUD$(uhhKjgjyjGf*ht$ 3ۉ\$ KD$hpVt$<Ɔ QAu+ʋu |$r3D$~D< t< uID$t;u D$D$13t$|7D$UHIB t~ AB uKD$D$D$3ۋxWUu0t0u GG0uFm[GPU؃Ӎd$RUi0t$0u AA0u<]tz;rSD$$PjUj|$ WU؃\$(uWU؃\$(t$T$$3WR؃;:u{:uSRSR>=FVt$(؃D$$HAu FFAtN;tAtN;uhghKj Fݕ t$nDl$ l$hKjdjyj bt$\$t$D$$t PK|$0l$$D$8tShD$Hj PD$PPh8KjSE;ttPEt)Ft PFt PԑVˑL$P3_^][3跕DhHhKjg)hhKjAjyj=ahphhhYhKjet$D$h p( ̋D$ȋD$@H̋D$0̸в̸̋D$S\$VsfNuINtH@fNt^[WN Nt9@Nu!;u HP;uŠP@Nt;u41@t PS! tHPNt u@Nw_^[ËD$HtpQ0h@Kt$q0hLKt$] ̋D$VpD$ d$ N tHNt@t@^̋D$PD$J JtuH@J JűD$S\$UHVkW8@*u);t" t H@NuH@*t;u@_^][̸6SWD$3蕜؉\$u_[Vt$0΍QAu+UAPS臚 $D$(PB@t_FBu:;t3 t NFBu!D$F@ GD$(PBt\$;Ž uF덩td^FBu:;u FN;u"D$HFGD$(ˋ@Ht\$;Ž (F" taNB]ruC GnuC GbuCGCtDՈG$h3nD$E<{u D$}E<(u D$)E3ɉL$D$,D$Ef BL$tCCf BuL$;:uU{:uOD$(\$l$HD$ :fAT$CCfAuL$T$D$\$t ;CURt$0G D$tL$ L$D$͍QAu++΋t$QVӘttMt+IF G /uL$D$\$AL$WC GF7h4hKjfjejr[t$$VU3]^_[hMhKjAjejC[V*3]^_[hHhKjhjej[t$$V3]^_[ËCt$0t P7CS)]^_[ËV豖3]^_[hK0 t P訙O P@uVW+hhdKx W螌 u_^W PVWh V艙WhKV}$_^t$ t$ t$ jm5~NV5@ tVЃHv!vV5^5{jDYUl$uE]ËD$ S\$tPjU u& thTKjU u WL[]WPU'u_[]VW3~.VWsSppUFtWF;|Ҹ^_[]SUVW33U\$tXu tMjVWi "D$t.vV%ruKt$t$W u V裈Wj_^][W*5Ox[S\$ VW5~>ut/W5t P%bv*V$Oy^[5_u5Vt$uh;hdKjsjwjW3^Sx1 W|$U|$ttPӃtFFut$V0 ;tW>tRt}΍Qd$Au+ʍ~|$tPӃtGOPӃut$$+GW|$(Vt$$jj׃ ~tuU]_[^̃=uuVhhdKj趈 tJD$t$ ~FVt(D$5FD$F Fu V膆3^Ë^S\$UVWj.S1 t+NFu+53~3W5DVSu1 t5G;|_^]3[_^][SUVWhXhdKj3複|$ ttt$>lt$ F`Fn9nt`t\Gtt$ VЋ؃~/ulu^hphdKjAjsjTG t tVЃt)Ft P!Ft PV_^][VPuhvG_^][̸SUVWhTRt$$3t$ l$( ulGjjWj`uXnBhKV\D$uXphKV[Pt$UVNu5V1^hhdKSjujSWhKUhKjE(3_^][Y̸6 3ĉD$S\$(Ul$(Vt$(W|$(VauUuSUVWu@u%hhdKjqjvjKSVhKjE _^][L$3yWUVPLuGhhdKjmjvjRWhKD$,j PD$4PhKUhdVhKjD@L$ _^][3転fq̃=u)-Ej0t$j ̸ֆD$ W|$ ;| G3_YSt$ t$ ؃\$u [G_YUVwl$$3D$~`VwS؅t SՃt9S\$St+PwGSGwb 3^][_YË\$F;t$|Gt$t P8GG ,^][_YW|$Vt-7Nx$Gt PNywbG t PRGSP؃K\$x|USwG؃3,u~@It PF;7|&~"I;r;v t PۀF;7|\$SwP K\$y]w[W裀^_̋L$Vt$;| F3^ËFu F^t$PF^S\$ Vt$ W39>~5F<t'F t SЃtFS4vu G;>|Svu_F^[É~_F3F^[39>~7F<t#F t SЃtFS4WG;>|_^[̸趃SUV3D$W3ۉD$D$-1 50 |$XhWBjYh Lj ؃ \$ #l$4+CC }Cj`4h LV讀 Cjbh LV蓀 C 3Ʌ~CC A;|Gt$$3ƀItD$PWD$ ^G(D$+PGPt$8W D$ *9%u:#tqAu+|* ut$$jD*h L.P T$33ۉl$(Ru t+l$4$ utmH3ۈ\@B ul$(L$4;uZ:uU\$ @Ws|$50 hxL֋-1 @PՃD$WB@;}F둋D$RV50 QPh(L֋-1 @PՋ\$8|$D$3D$50 -1 W}D$t\uhLփ@PՃt9Ct P Ct P|C t P|S|_^]3[_^][̸薀U3Wl$|$SVt$(v3L$ D$d$Pv'33ҋ~LtqAu+B;|{|$PW聈w3҅~,Ltt< u\FAFu BF;|F G+VPt$, ;u4D$l$@D$t$(l$;D$EW^[_]ÃWن^[_]_]̸L̋D$VWwNt$|$$ 7FPX~67hFu_3^Ëp0~_^͖  ߖ  ̃|$uD$p ̃|$uD$p;̸@O̸N̸O̸M̸tP̸O̸Q̸|Q̸`Q̸M̸Q̸,Rh|Qt$h|Qh`Qt$h`QhtPt$htPvhOt$rhOFh@Ot$Bh@OhOt$hOhMt$hMhNt$hNhQt$hQVt$hM_hMt$2hMt$hMt$t$t$hMt$t$t$zh|Qt$t$t$Zh`Qt$t$t$:htPt$t$t$hOt$t$t$h@Ot$t$t$hOt$t$t$hMt$t$t$hNt$t$t$zhQt$t$t$ZhMt$ t$ ~ h|Qt$ t$ ^ h`Qt$ t$ > htPt$ t$  hOt$ t$ h@Ot$ t$ hMt$ t$ hOt$ t$ hMt$ t$ ~ hNt$ t$ ^ hQt$ t$ > ̋L$t D$@W|$j7Mu_S\$SPw赛 t$GpstSPtO Au[3_VS>tfF t_@XtXWjjVЃuhFh#h(Th;Vh)h(TjCjP>i_^[_hh(Thhj!tCt VG^[3_̋T$L$tAT$ tAT$tAVt$Wj6QL|$WPvs Fp-sWWPrN A|$hyh(Tj GjPEh~jjt$ \PWPvPG tF@Xt?VjjWЃ~_^Ãt#hh(Thhj!8B3_^hh(Thhj!B_3^Vt$vcXt!th0h(Tjqjdj!A3^Ëv>u'uh7h(TjAjdj!A3^W|$h:h(TjGjPgW6uW藟3_^_^Vt$vWt!thPh(Tjqjej!!A3^Ëv >u'uhWh(TjAjej!@3^W|$h[h(TjG jPlfW64uW3_^_^Vjt/t$ V*tVt$ t^V3^Vt$vVt:Hthh(Tjqjfj!3@3^ËFt$ @P^ËFt$ @Pq^VW|$uPD$Pt$H~{t$UPu#hh(Thhj!?3_^t5Wt$t$V\tVt$t_^Vi_3^UVt$ WvUt#thh(Tjqjgj!?3_^]ËFSxhD$@0nUW3~#VWV0OU ;tTWF;|腃tS FtGSSFVW  uV3[_^]t$U[_^]VƂhh(TjAjgj!Q>3[_^]Vt$vTuD$ @p0Fp ^3^Vt2t$ VtVt$ t^VU3^Vt$vTL$It[Itjih(Tjnjhj!=3^Ãu!Ft@xt3F ^øF ^jch(Tjhjhj!E=3^ÃuEW|$~ t4F@pSuNIqNIA_^jUVt$t.~t(vISuF^@v1St3^t$QL$AD$ AVt$WvRt(HthMh(Tjqjlj!b<3_^ËFxFxt$Vu hUh(Thjlj!#<3_^Éw _^Vt$vsRtEthh(Tjpjmj!;3^ËF@t PZND$ ^AËF@t P6ND$ ^AVt$vQu^NIAuhh(TjAj~j!T;3^ËFt$ @@EUPPNI^hh(Tjqj~j!;^Vt$ V5P[$ t$FFUj0C"v|F3^Ët$jFPlFt$FFj0CFj0CjONI^Ët$FFj0ECjCONI^Ët$FFtkj0Ct[jONI^Ët$FyFt/j0Bt^hh(Tjpjnj!f93^ÍI  K  ˧  Vt$ vOwu$Ĩ VQF@PuHjjNЃIQ-F@Pu$jjЃF@P F@PtD$JJ ^3^ÍIO  x T 5%.uhP5h@j5̸ lVt$(WD$F0NPNPr t{D$PgvD$jWPD$$Pj ~7Vjjjjt$ ! DhhZhhj!7D$t PhD$P!e_3^ APD$ Pv CL$ tPQD$Pd ~t$gD$0D$ PD$jP#~hhZt$4ii D$oL$,QPD$P CVjjjjt$ -  hD$PRdt$0t$vrh_^ ̃D$ṼD$ FV Pt}ujmhZj j}j!y63^ËD$ 0LPALP蛬 u jshZjm8PjjoVwD$u 0^VQ!~uj{hZj j}j!6Vy3^̸4vjSU33Vt$D3W3\$\$8\$4\$\$<\$ \$$|$(D$D$D$,D$0u%hhZhjpj!53_^][49Fu"hhZjzjpj!c53_^][4vK^HHt$hhZjpjpj! 53ۋ_^][4ËFpH@t$$L$ pHL$Ht$<6XKPJP ȃ L$4hhZjojpj!43ۋ_^][4ËFH@L$$H@L$ctÃuhhZjzSD$$UP^w2EGC2$< o,Gp@t$hjL`uhhZjAG@hG@hj `uhhZjAG@hGppt$  G@pbDu tU.^G3@hUV3ISV~F0DPt$D$$Pat$D$,P[v E~D$(PVXv.h\hZPD$0J_D$vL$$QPD$4Pht.t$ t$v^ t$CV;hahZjFGpG@pCu  tU\G3@ht$uYG@0BPD$ VP1D$PD$DPt$ CW t$D$DPGp \ wyBujjjWEulE u^ht$2ouh~hZjkOD$PjjWmhW/vjjhWmVt$L$< D$~PD$4P%jjjjWt$$X\D$@Pt$[tjD$4PD$HPjjt$$\PD$~1|$uG.wt$l$$3U~3d$WUt$0L$LQPZ UG;|t$(D$DPYut$D$PVo3u{|$,w&>u!SSjWt{PrnL$ t~PqFz؅u&zPBn؃t9jjhSht?SV;t8VlhP&h uhhZjljj!$3_^[_^[hhZjDjj!$3_^[̋D$t$pVt$v:t3^ËvtvtVL$;~QV@^Vt$vc:uF^vN:vFt 8u@^3^̋D$t$p S\$WCth1P|$WCu_[VW3E~,VWP1sPVstWF;|^_[^_3[S\$WC th1P|$WkC u_[VW3~,VW7PrPVs GtWF;|^_[^_3[̸pW 3ĉD$l$S\$|U$V$D$D$ WPl$3Rs8t!s8thhZjrE08؅tphVUetVD$PjjxVMcD$ NPP;;tbt$PLf;tLVhuhhZjljqj!!D$$PN$_^][3Upt$D$(P{OtƋm 7U#&D$ |$PD$@PD$,P L tUu hDaL$ 9<Pt$<r;ust=:t.B:FtB:Ft B:FjS_6P蹖PD$,PL  PD$PU  h_hZj jqj!3 Pt$D$,PyM t$UPt$t$v2tWW6D$,vPW豬@hshZjijqj!,hThZjejqj! h#hZjDSUl$VW|$u)u=_^]3[P3$~'V735 ;tE7F;|t$ t$ UXn tV7WuQVn3_^][Snt$$t$$Un؃lSV76 uSn3_^][_^][̸HS 3ĉD$DVt$PW|$Xj4v u]W8]3SUG~%W_= ujjjqWbZ#UphD$PWa ~,VD$PSc ;uAhD$PWa Wf_= ujjjqWYu3W\ƃ$_^][3LWuhhZjAjsj!/3_SVjW.t)t$W}u.hhZjyjsj!j[Wq3^[_Ë\$3S~(IVS)PWt1SF;|݋D$uPt$W' t^[_hhZjxoVW3Wt$2ujuhZjAhj!43_^t$Vt$>jjj VXVt$,$u)j~hZhhj!VZ_^VZ_^S\$uhhZhj|j!3[s-thhZjqj|j!s3[SvSNhhZhj|j!?3[UuhhZjAj|j!3][VWS3~jVSgxD$tw7P~ u'D$uSD$@@tEw7PW t3PUtSF;|_^][U3_^][hhZhj|j!eU3_^][VujLhZjAjtj!23^SWjV1tHjVt9D$\$ tu'NIL$ OPF0D$ Pjx^Y3^YVOujhh[jAjwj! 3^W6t$ |$~YFujp"ujtt$Wujxh[jAjwj!l 3_^ËFxFVt$_^PhHt$t$t$t$Pt$ t$ SVt$WvQ ؃uNy3XPD$ WjS5Pt$,Vt$, _^[+Pt$t$t$t$ Pt$ t$ } VZujch[jAjpj#B 3^hD$F^Wujwh[jAjqj# 3_Vh@t$VPt$0t$0Et$0t$0t$0t$0PVG*,G^u"hh[jAjqj#Wq3_Ë_t$ D$t$ p) VujHh[jAjuj#B3^Wt$FPt$t$KujM u#jQh[jAjuj#V]3_^t$w)_^̋D$@PPt$K V:uhh[jAjrj#o3^jjF'9FNuhh[jA#QPt$ K u%hh[jdjrj#V藿3^Ë^V蚿uhh[jAjsj#3^WjVuhh[jx|$ W}P|t$t$t$(tPPWMuhh[jA^F@pJF@xF@p6jt$(t$t$PWNIAu&hh[jgjsj#V3_^_^Vt$Fp@thh[jyhj#3^PFp(J^Vt$vthh[jyhj#c3^'PvI^Vt$vt3^ËFj@pt$t$PF@p@ ^̸[̸]̸\̸[̸H]̸^h\t$Rh\&h[t$"h[̸]h]t$h]趕ht[t$貚̸t[ht[vht[t$t$t$ h\t$t$t$h[t$t$t$ʩh]t$t$t$誩ht[t$ t$ Π h\t$ t$ 讠 h[t$ t$ 莠 h]t$ t$ n t$ D$t$ hhPt$ D$t$ hhPt$ D$t$ hhPt$ D$t$ jhPW|$u3_SUVW3~)l$VW63- ;tWF;|^][3_stjs^][_ËD$hpu3Ã8u@0p#̋D$D$D$jPD$ jjSP̸h5 3ĉD$dD$l$Ul$tW$D$$L$ w8nHcAVD$D$1PjzI u)j\h_jejxj#3^_]L$d34hËFSuX P% ؋t$AD$D$D$8PWRPSjt$$t$0$U6 $u0jhh_jkjxj#VF3[^_]L$d334ht$D$(PWCPSjt$$t$0$U $u jnh_jjVF$D$,PD$@PjWt$83D$Pj@Pa1D$HjPU1,[^_]L$d33hjVh_jejxj#;L$l3_]3y3h̸3VW|$WD$ D$tbD$PWatt$PVT t5D$ PWbbtt$ PV tVt$uVr_3^_^VWt$tiD$tPW tSD$Wt!t$jjjt$4PWL tVt$uV_3^_^SVt$ >uu^[û3ۋD$Wu>t$t$ jjjt$4Pt+W6t_^[Ãut$υt6詾t Wֵ_^3[̋D$VNPtt$VHu V 3^Ë^øhv1 3ĉD$dSUVW$$D$|T$,3ۋ$$3L$ $D$DT$$T$ D$DT$ɉT$ DʉD$$L$$ɉD$($DʉD$0\$t$\$$$$u6uajqh _jhjij#3_^][L$d3>0hÅtzPWD$$PD$8P~PW D$WPD$(tjPV fD$$tPD$8PV[ Gt$U3T~/WUƿPD$P+UG);|Ջt$|$t&Wt$D$$VP/\$(hP Vl$83t$L$ D$WQt$ t$8UPWtXjhU xPUPFPi t,jhXU x[PU跽PFP= uCt$th SsthP Va_^]3[L$d3}.hËt$ӋD$(tjPV tD$$tPD$8PV tt$t jjjD$ VP\$(fhP Vݼj3D ESWuW)h S蠼$t8jPjjjt$0WuWa3_^][L$d3-hËL$t_^][3x-hVt$uF^Ã>Wut/3t$6]ut6+_3^_^̸F-jD$PD$ PD$(0pt$,t$,t$( uhh<_jujjj#t3Vt$D$ Wt$t$(t$ Pj轞|$(t t$V'*uhh<_jejjj#Vb(_^̸,VWjD$ )uhh<_jAjlj#3_^Yt$D$ Pt$(\L$ u'hh<_jfjlj#Vq3_^YjVFPWQt$0t$0t$,^ u0hh<_jgjlj#Bt$'V 3_^YÃ|$$t Wt$ )t$Z'_^Y̸+ 3ĉ$$S$U$D$$V$D$D$W$P($D$$Pw$V7芺ujWh<_jsjwj#q3j[D$ h<_P֧|$ Pw( uj\h<_jAjwj#,Wt$D$PD$(VP,uVR&jch<_jjwj#3P|$D$P7PD$$P) uV&jlh<_jtjwj#3t D$ljEt3D$P%Ƌ$_^][3)ĜWujFhX_jAjmj#R3_j7t$ O |$At jShX_jwj&OAu"jNhX_jAjmj#W3_Ë_̸f)D$u 3ɉD$ $: $QL$ Qt$Puj\ht_jAjnj#3YËD$ $Vt$,t$,t$,t$,t$,t$,t$,QP5$3^YËD$ tt$P5&t$$ ^Y̸D(SD$0D$,VP#\$tSS؃ \$y^3[DUWhht_V &hht_SD$D%hNht_Q|$8%؃$D$dH\$ƙȋD$\ΉL$0t Hƙ3hD$(ht_PD$4% D$ul$4jT$,D$  |$~%D$h΋iˋ\$|$|$0L$~)l$`3\$0G|$d*A;|l$4\$|$|$$~,l$X3ۋ|$$ÍIC|$\*A;|l$4\$|$jt$|D$DP Bd$Vt$0D$DP $t$(D$@t$P jD$@WP, 9|$l~`jt$|D$DP t$D$@t$P3 jt$D$DP G;|$l|L$9L$p|$LD$pPWt$|Z&D$( L$p;D$t+ȉL$p3Ʌ~I|$:A;|t$ VS# jt$$-|$(D$$|$UVW t$ UU轉 SU軬UJ;~&\$SU苬VCPWg% 5}%+PjWY%D$0+D$$PUN WUBt9\$$;\$(\$$\$6|$jt$|D$DP \$hht_jAjoj# |$(WL SF t$4= t$$4 Unt$4eD$TP;D$T_]^[DË\$D$8̸&$D$V3D$uj[h_jijvj#q3^YW|$t7Ul$ tuS\$t;tjSP u tWD$$)tCpCx_]hP V2h t$$h t$$D$^[3/l5euhPShjGVt$jvt$t$9-P6^VW,ujIhcjA|$ ut$ t$ t$,t$'IjjjWj'tWjt$(t$(t$4t$$'t$ t$ t$,W%u jVhcj A61"v>jt$,t$ t$ a,PWFu#j`hcjgj}j#V+3_^_^Vt$t@ tVЃV ^Vj h dja u^ËD$WfFF@tVЃu VF 3^Vt$@u^W|$Wt$t$t$VЃ~~F_^Vt$@u^W|$Wt$t$t$VЃ~~ F_^5uhPhзjVt$t$F9D$rD$ Vt$@P F^Ã^Vt$N9t$s^ËL$9uVAQt$ ^̸̸505uh0P#hpj̡th P|jظYVt$ujphkjCjlj&%3^jthkjFXjP1Vm,V/F4tVЃF`PVj *V% ^̋D$@P̋D$@4̃D$`6*t$t$t$t$t$j *̋D$@T̋D$@8̸VjEhkjpa ujGhkjAjzj&3^jpjVF`FXPVj r*^̋D$L$HP̋D$L$H@̋D$L$H4̃D$`V*̋D$L$H<̋D$L$HT̋L$uhhkjChj&3ËD$̋D$L$H8̋L$uhhkjChj&3ËD$H̃=ub3ɣt/hhkj tL$jP5ƙ ̃=u3ɣt-hhkjA tL$P5hVt$V1^Vt$ujphkjCjlj&3^Ã|$ tjthkjFXjP3NXFX1V(Vh,F4tVЃF`PVj &V^̋D$@@@ @@@ @$@(@4@8@<@@@D@H@P@TVt$WuhhkjCjij&3_^Ã>t[~tUh hkjj Vuh hkjnjij&T3hhkjj _^hhkjljij&3_^S\$uhJhkjCjjj&3[VWhMhkjj V5taI:utP:Quu3t vlu&FTtCu3VWbFXhdhkjj 5 ÍI:utP:Quu3h8k0 Hkh5 EtxjShdkV tcjhHI hhkV tJjWhtkVo t5jh|khkVV tjjhkV@ t_^[V-hhkjtjjj&XShkj$3_^[Vhhkjj 5tFXhhkjj ^Vhhkjj l5 tFXhhkjj I^W|$uhhkjCjsj&3_Vhhkjj wltFXhhkjj W!^_W|$uhhkjCjtj&23_Vhhkjj whtFXhhkjj wW^_̃|$VuhhkjCj{j&3^hhkjj $t${uhhkjnj{j&3hhkjj ^ËD$uhhkjChj&@3hhkjXjP̋T$L$BABAB A BABABABAB A B$A$B(A(B,A,B4A4B8A8Bt'jVujxhkjjhj&_3^Ë_^Vt$~\uN8t VуtFXF\^jjt$jt$=y!hhkhhj&3ètVt$uhhkjChj&3^SWhhkjj Ch39^Xhkjj (~@3Ƀ uhhkhkT$ BwFt FTuat$ t$ t$ RVT_[^hhkjxhj&5_[^Åu!hhkjxhj&3_[^t$ t$ t$ RV׃_[^_[^Vt$txD$ tp~@t5jPjj V~!t$t$t$PV3Ƀ^Ã|$t 訾^hhkhhj&f3^hhkjChj&G3^Vt$D$ s~@W1jPjj VWVuh<hkhjjWjVyhFhkjnt7|$thOhkhjjjWV3Ʌ_^S\$uh_hkhftjSj5uhqhkjnIj D$PS1 L$ ;t!9ujjPWV3Ʌ[_^hwhkhhj&3[_^Ã|$t _^h7hkhhj&3_^h$hkjChj&3^S\$ Vt$ W3I>tKFt3ˋ:utP:Quu3tG>t ~t_^[_^[̋D$8t xt3øVt$ uD$@Pt8t xt^3^Ul$ t tuu j{hkjC5D$ uApPtUVx]^hhkhhj&t]^WxP+S\$3tyt ;s@;[$d HQt_]3^Ë_]^DP@u_]+^Tʍqd$AubDtP@u_]+^áPI@u_]+^Ttʍqd$AuʍqAu+Rh APUCB_]^D _]^hhkjnhhkhhj&_]^ÍIZ . {    $ ̋D$̋D$L$+Vhhkjj ,t$th P6M hhkjj ^̸D$$D$D$D$ t $Qh` PЍ ̸Vhhkjj D$zt$,>u(h h t$ 9SUl$4W\$0|$4MD$D$P6\uKhhkj F EFVtuD$,F0[Sv_Sv覈tv|$<F t)St6Ft jP^F t0t$(93%hhkjmhj&D$_][hhkjj #D$^̸VW|$397u_3^hhkjj D$ D$D$PQGtPtw}9w uSjwtt^~\ u V[uSw;Cu'9wt"V4tGt jPw[G hJhkjj u_^hhkjj D$tt$h Pъ hhkjj ̋L$D$qpp0ЃVt$v3Ft jPV^ Vt$W|$Wv譃x&PvgF Wv臃y9~ujWSF_^̋D$@LVt$ujjhkjChj&"3^jmhkjj ~\u,johkjj rjphkjuhj&$3^jshkjj FFDujvhkj}hj&3^t$t$t$VЃuj|hkhhj&r3^Vt$uhhkjChj&?3^hhkjj ~\u2hhkjj hhkjuhj&$3^hhkjj WFHuhhkj}hj&3^t$t$t$VЃu hhkhhj&}3^Vt$uhhkjChj&O3^hhkjj ~\u2hhkjj hhkjuhj&$3^hhkjj gFLuhhkj}hj&ſ3^t$$t$$t$$t$$t$$t$$t$$VЃ ^̋D$L$HD̋D$L$HH̋D$L$HLVtRd$FTu9V V VVV VVV Vt$Vu^Vt$V Vo VyVVVVVV$^S\$ Vt$ @tV u^3[Äy VU tt Vtt Vtt Vtt Vt t VttVztVatVH^[̸$$Ph`$ jj,t$eu2hhTlhhj&Gt$ hplj 3Y4$t$ YVt$u3^S1 W|$WhlVӃ uD$_[^Wh VӃ uD$_[^Wh VӃ uD$_[^Wh lVӃ uD$_[^WhlVӃ uD$_[^ Wh| VӃ uD$_[^WhlVӃ uD$_[^Wh$lVӃ uD$_[^@Wh,lVӃ uD$_[^Wh4lVӃ uD$_[^Wh h> hnL ̸UVj.t$ 3D$3D$0 t@D$t$ t$(7l$u#johV^^VW|$ Wu hbh qjphj&裡3_^Ã>t hhh qjdhj&~3_^ËD$8$A |$tύQAu+3BF t PtW5F 39F _^3F 9F _^39D$_F^Ë|$tύQAu+3BFt PtWF39F_^3F9F_^ËD$w F_^hh qhhj&c3_^VW$_^ËD$w F$_^hh qhhj&3_^ËT$tVʍyAu+σrCRu hh qjAhj&ן3_^jPv(Da _^hh qhhj&螟3_^hh qjwhj&~3_^Ë@ n@ @ @ "A YA A Vt$ tMt P{F t P{Ft PkF(th P&bVM^̸vVy|h B jjjj:u#h h qhhj&襞3^Yhh qjj hh qHjj  t$ PVD$uD$PV_tD$^Y̸S$;u4{ uCtFP3ݦC Su5hh qhhj&ϝ33[Ĝs 3若Cu53Cקhh qjhhj&y3[ĜÃ{uKs3<CthЃ=s&3CClhh qhU$VW|$/ hdvt$ t$ / htt$ t$ . htt$ t$ . h ut$ t$ . hDrt$ t$ . hrt$ t$ ~. hut$ t$ ^. ̋D$D$̋D$t$ t$ P) ̋D$t$p辖t$D$t$t$pF̋D$t$p讖̋D$t$ t$ p芡 ̋D$t$ t$ p蚖 ̋D$t$ t$ pږ ̋D$p2̃D$ft$ D$t$ P ̋D$t$p谕t$D$t$t$p8̋D$t$p蠕t$ D$t$ p| t$ D$t$ p茕 t$ D$t$ p̕ ̋D$p$ËD$ D$^̋D$t$ t$ P ̋D$t$p 莔t$D$t$t$p ̋D$t$p ~̋D$t$ t$ p Z ̋D$t$ t$ p j ̋D$t$ t$ p 誔 ̋D$p ̃D$6t$ D$t$ Pے ̋D$t$p耓t$D$t$t$p̋D$t$ppt$ D$t$ pL t$ D$t$ p\ t$ D$t$ p蜓 ̋D$pWOtZVt$ t/t)PotPbt PWtOuWjhp/hWO^_3_VW3Nt+t$ VWtVWhr V)N_^̋D$D$SUVt$Wjhnp l$$jhnMqyy _^][_^][Åy_^][ËSp 跑MWq詑pv>@_^][Vt$ jhnp z y^Pp ajPD$P_^VW3S\$tMtgjSP@ tW\$tMFtC3P}t4\$tLFt SP軋tVjhoG V[_^̋D$ D$̸VUD$t$ ESVW|$?ZLE?tjEetsh襞t`FtT{L؅tIj7S t8FVFXu|LtuUjhs3 D$_^[UD$]Y3]Y̸VVW|$$3jNWV;heh8yPD$ ǺD$tsVjWD$0D$0VP艼D$4WtPt$,5 t$(c~$jjD$Phnt$,7ED$t Pl_^̋D$uVt$PvI~H|$t*jhv u*t$v~jhvr t3^ ^Vt$Ft PFt P辷V起^ËD$ Vt$EQt$hyv 3^ ^Vt$ jt$$t$PhTyv3^t$vt$C ~^SU-1 Vt$Wu.vvv WvvA ;u0=`~~_^]3[ÍID$PjjvrWj t$Ճ ^vvv #;F/>uv댋NL$t< t< u AL$u 9aD$PjjvT$ BT$0yW؃BFT$~3ɋNB ȉT$NOuF;FwUFjjjv^;F2_^][jvh _3^][;~_3^][-B$] jhv6 ujjjvFD$PjjvNT$$+QRv ~V)Fhjjjvtjjj v c~!1jv w_^][jv a_^][Ë"] o] \ \ ̸Vt$ Vu=D$Pjjvt$$PD$Pj)L$0 u ^Yø^YVjxhyjQ FBPFD$F D$ F~FFhhyv Ft ~t^ËFt P1Ft PVز3^VWYWjt$ t$PhTyv)_3^t$vW蠠 ~_^̸覶S\$ Wjt$t$S u_[YUVW#tLujSlu3ۋGt PFGt PW3E^]_[YÍD$PjjwUPD$(Pj'؃ u 3똾̸ֵVWt$Vsu;D$PjjvWPD$ Pj|'L$0 u _^Yø_^YVt$t$ tqD$ EQhyhyvx~ D$ tPV t^ËFt PFt P贰V諰3^̋L$DȋD$HSx1 Vt$ >tPӃuF8uuh hyjsjvj'3^[PӃtFFuh̀>uhWPӃuG8u?uhhyjsjvj'3_^[Uj D$PVG0 L$ 9t]PӃt GGuF?tAύQAu+ʍGD$PӃtD$D$HD$PӃutQh:hyjrjvj'~?uVhyjp 3]_^[WhyVhyjp]_^3[]_^[t$P葖̸P 3ĉD$LD$XS\$dUl$\VD$D$hWD$t<>t P6mU-u3juhyjxjej'~V_^]3[L$L37PP-tCGtD$PD$ PUt$ uhhyjft$D$ Pvxu tjUD$PD$(PD$(0p覧Zt$D$ Pv:u >tv @S荌F L$\_^][3^PUVt$ Wu|$tW.WX.t$(93t$8WPUV?_^]Vt$ W|$ 00ɛu2vwNju vw赋uv w _^Vt$ W|$ 00iu vwguvwU_^̋D$ S\$UVW|$t$պj:U0 WZ͊:utA:Buu3uD$$yJZō$:utP:Quu3D$$y~/~/j/V0 uh L$$WL$$9>[uFj]V0 tS@j:P0 tXS薹L$ tD$$PK4D$$D$(PM3=D$P\4hh}jejij'egV蟕Ph\8j"Yt$8(lu_St$$ uJ uE\$S*HPS+WhP脜thh}jpjij'fD$t'h?P)j\h}3jvjij'f$x t t V'_^][Đ̸U$}u%h{h}hjtj'Pf3]ČËE@8zS$V$SV$pD$UP5$hh}jvjtj'e3^[]ČÃu tL$ uLWQ!MWuq1P螒Wv_hh}ju뎋L$ $tjEpQD$VP2uhh}j GD$jP6D$jP6D$ P7SG$;}t$똋L$(3_^][3̸HF 3ĉD$DS\$TUl$TVW|$dk0wPdwP |$u.h?h}jwjmj'\a_^][L$D3藕HWMxۋC90C90UxjL$QWPZtCL$Pr;ust5:t&A:BtA:BuutA:BuhjD$Pt$UCL$$Pr;ustw:u'tlA:But_A:Bu tRA:BtJ_^]3[L$D3|HW3#~&VW$j0UH~WF";|ڸL$T_^][3/HD$u&D$t$ @pt L$t$ t$t L$35UuhP\hj[5TuhP[hj[W|$ uhhЂjCjmj(__VhhЂj  t=~|$ FFF u!GuV%^_FFFVw!^H_W|$ uhhЂjCjmj(R^_VhhЂj h t=~|$ FFF u GuVu ^_FFFVw>!^H_t$t$jjt$$t$$t$$t$$t$$k $jt$t$t$t$jjt$$t$$ $̋T$L$BJt$t$t$t$t$jjt$$t$$$̸覑 3ĉD$L$S\$(Ul$(VW@t SUQЋD$fD$D$D$fD$ :fD$u_^]3[L$3Ë͍QAu+ʍytˍQAu+ʃhhЂW tWD$PVڛWUVrtWD$ PV_WSVWWD$PVHL$0 _^][3DVhVhЂj t#t$WfFFɚ^ËL$uhhЂjCjoj([ËD$Ht&Hth'hЂjjjoj(m[ËAËA|$ t A%AVt$6tVh^̋D$S3ۅt,P؃uhhЂjAjej(Z[WuhhЂjCjmj(Z_[VhhЂj Ҍ tk^\$FFF {uLCuV ^_[FFFVsO^_[̋D$S3ۅt,P؃uhmhЂjAjfj(Y[WuhhЂjCjmj(Y_[VhhЂj tk^\$FFF {u\CuV^_[FFFVsO^_[̋D$SUVW3333t/P&؃u h4hЂjAjnj(X_^][ËD$tPuh<:D$ tPїuhDD$$tVP賗uGhLhЂjAjnj(Xt SȈt W軈t V讈_^][t$,t$,jjUVWSt$4 $_^][̋L$3t(Q0uhhЂjAjgj(X3jt$t$t$t$jjPt$$~ $̋L$3t)QЖuhhЂjAjjj(Wt$t$t$t$t$jjPt$$ $Vt$t"h vzF PVj 莦V蘇^̋L$u3ËHtuAVt$ yhhЂjgjkj(W3^W|$ w;|hhЂjfjkj(V_3^Vw1ȃtHwA _^̋D$t Iw@ 3̋L$u3ËuA̡Du b D̃D$ ֥t$t$t$t$t$j 5̋D$uË@̋D$t Iw@Ã̋D$t Iw@Ã̋D$t@3̋D$t@ 3̋D$t@3̋D$t@3̋D$t@3̋D$t@3̋L$t D$A3Ã̋L$t D$A 3Ã̋L$t D$A3Ã̋L$t D$A3Ã̋L$t D$A3Ã̋L$t D$A3ÃVjQhЂj ujShЂjAjhj(vT3^áDu q DN QVj FFF蹤 ^VjQhЂjQ ujShЂjAjhj(T3^ËD$uDu DF PVj FFFA ^Vt$W3@tVЃFtVh YSUv3Z~1I.9}tSvPEVЃ~zvC);|ҋ@ tVЃt[tR3v3~I$.}tSv_PEVЃtt3vC;| ][@tVЃ_^Ë_^̋D$D̃D$ V̋L$D$̸$ 3ĉD$ SUl$0Vt$@0 PwӃuGPwӃuF8u_^][L$ 3$ËGO _^]3[L$ 3م$ËGO _^]3[L$ 3躅$wD$$hXj PBwD$$hXj P. ;_}Rh?hЂjeMjij(QhD$(PhD$@Ph jB,_^][L$ 38$ËG;~hFhЂjd륋O uhNhЂjijij(P@PVQE L$03_^][3$Vt$Ft+v轀>uv譀v襀v蝀 V蔀^S\$uhhЂjCjlj(P[W|$uhhЂjCjlj(O_[À;UVt6-0 d$PWՃthhЂjhjlj(OF>ut$4l$t$4t$4t$4t$(UtL}uNREuBFt+v>uvvv V^]_[ËD$F^~Vu^]_H[W|$ uhhЂjCjmj(N3_S\$ Vt$t tu"uhhЂjijmj(N3^[_hhЂj 迀 t3ɉx9L$0X HL$ H^[_VWt$ |$t$ t$ t$ t$ W@tu GuV_^ËD$$FD$(FD$,FVwh_H^̸ fL$,WD$$$D$D$$@t$RQЃ 3 W|$ WUHVHtbH5WT[51 Pփ5W P5,1  jWPWt$K^_WZPh@51 5,1 jWPWt$~WHW :utH:Nuu3t%hP51 5,1  3^_^_5WKZP1 5,1  jW*PWt$Y_t$w(5t$ YP1 5,1  hh`jj =vh h|81 u 0 hXh|81 u0 @0  ;t Q 1 0  @;t Q 1 hZh`jj u̸PSUVt$W|$t-1 OՃ DC;tuj0 Pl0 FFu+_^][V551 j5hj5Xj5Pj5tj 5jփ0^V51 h jh jh jhh jXh j Ph jtփ0^øV~ 3ĉ$S$ U$V35`D$ 5D$hP9$(u 01  ts5$1 u`5(1 uMD$ j P0 t9$ t5tD$ PUS ID$uhD 51 =|$D$ hPz$^][3|̸ | 3ĉD$S01 V50 W|$WD$jPӃ t'D$ j Pփt_^[L$3d| ËL$3_^[3P| ̋D$S\$V3}^[W't_KSjt$jt$,Wx2|$ tt$Sjt$ jt$0W6x WW3O_^[̸{ 3ĉ$$$V$P$;OPD$PQ$D$hPx$ ^3/{k̸̸̸̸̸̸̸ԅ̸̸4ht$hhLt$̸LhLvht$rhFh4t$Bh4ht$̸hht$hht$hvhԅt$rhԅFht$Bhht$hht$hhLt$t$t$Jht$t$t$*ht$t$t$ ht$t$t$h4t$t$t$ht$t$t$ht$t$t$hԅt$t$t$jht$t$t$Jht$t$t$*ht$t$t$ hLt$ t$ . ht$ t$  ht$ t$ ht$ t$ h4t$ t$ ht$ t$ ht$ t$ n hԅt$ t$ N ht$ t$ . ht$ t$  ht$ t$ jGhjRsЃ uËL$ABD$BB ̋D$W3u_ËP Vt$t I;uH;Nt ‹P u;uH;Nt^_̋D$t D$p̋L$W9uD$ _S\$U3Vd$׋þ$ ;us3%:uJ:HuJ:Hu J:Hu3t u{ ^] ][_^][3_É{ uD$^][_j]hjq uWf̋T$t tH 3̋T$tH Vt$6t@W=1 FPFPFPFPFPFPFPPh׋v $u_^̋L$3 t d$I @u̸s 3ĉ$$V$WhED$ jPs$D$VPD$ PW$ _^3rĬ̸sS\$UVW|$$ϋփT$L$$9s#$u ArL$$l$ u}+D$d$;uML$ k@L$$L$ L$L$ t$t (4(L$ @L$ rjUS 3T$ty+ʊl$,(l$ L$$Sk@L$t$t (4(@ujUSt$( 33|$t +4(T$3l$ L$$L$$S@t$+|$3"EE3҉T$L$$l$ ujC@PST$ 3Ήwu) t Ut$$S l$ \+;r*+s@Ut$$Pql$,jVS3Pt$$C@Pp 3o_^][Vt$ t D2@D2@B v0@s@+PF@jPp jF@PV 3s +PF@jPdp WNIARAAAOujF@PVD$ _t;ohVoF@oF @ oF0@0m^3^hjt$ o ̸foD$L$Ul$=SVD$Wd$ރL$\$9su Br]r^!QL$D@M@Cd$T$rjQUrd$ 3ہ+L$L$d@됊L$M@CT$ujQU T$ 33E@+L$3L$;u, t#SQUL$ ˁL$`+;r-+u@SQPnT$ jVUT$,3PE@QPm 3L$hD$,L$(-D$,L$L$(._^[tPQU< ]̸ 6m 3ĉ$`$(U$(l$T&SD$d+ōY?VD$XWD$l\$H+$<+t$P|$LD$X$3;wC$;sF$M?;w $;s-D$l;w$C;|$LsD$l;w<$;r1$+I$Š 0NJ2DlB@|?͍D$l+ID$loo of@|θ(D$TI3t$tWfD$dT$hL$dPD$D$ʼnD$,NP̭(D$8,ND$@̮(D$0,ND$$̯(D$4,ND$(̰(,,NT$<̱(<,N\$ \$@̲4(,L$AL$̳( ,L$L$83L$03\$$3L$43\$(\$l$\$L$3݋L$<1L$\$\$ˋ\$ 31\$L$1t$3L$1D$3L$D$L$3t$3D$ ЉL$D$3333T$<3t$(3T$43t$$3T$03t$@3T$83‹ыL$D3֋t$ 3(3,L$,11QD$To$D$Dt$$D$ o$$o$ $o$$NLm(D$4,ND$<Ln(D$0,ND$(Lo(D$8,ND$$FD$dLp(,,LqT$@l$,l$<(<,΃Lr4(,L$ILs( ,L$L$43L$03l$(3L$83l$$L$L$@1L$l$l$L$l$,3L$1\$3L$1t$3L$1D$3L$L$D$L$3Ƌt$3D$,ЋD$33Ӌ\$D33T$@3t$$3T$83t$(3T$03t$<3T$43‹Ll3֋t$dt$3(3,11L$ \$Do$D$TD$TD$lo$D$|o$ $o$$=xl$`$3ҍM?;wD$l;s\$H;w:C;r3|$PՋ\$\@ R2J2JNu\$H|$L^|$Lt$|+l$\o9o I foD)fIoAoLу foDfI@|l$`t$P@@\$HL$Xt$P)_^[]$3e $0QU8$, ]3e 5p&uhpP-hj-̋D$Vt$9u^WPuujihtjAjvj/03_^6 u>_^t$ D$t$ pl( t$ D$t$ P6 ̋D$t$p6Vt$th`v:F^̋L$39A̋D$t$p6t$ D$t$ plA t$ D$t$ p|6 t$ D$t$ p6 ̋D$p7t$D$t$t$px̋D$08̋L$D$ɁH̋D$Vt$9Fu^WPDBujThtjAjwj/.3_^v9B~_^̋D$Vt$9F u^WP=uhhtjAjxj/v.3_^v ~ _^̋D$Vt$9Fu^WPMuhhtjAjyj/.3_^v~_^W|$ u3_VWt$PhV蜨WfrPV/1hV脨W(u hVlPVs1hVUWq u hX V=PV40jhD VxWNDQhȘVWPV1(^_̋D$VW|$ 39Gt>t,PU<uhhjAjsj/,3_^ww_^̋D$VW|$ 39Gt>t,P;uhhjAjtj/w,3_^ww_^̋D$Vt$9u^WP;uhhjAjuj/,3_^6X>_^̋D$Vt$9u^WP@ujLhjAhj/+3_^6@>_^Vt$vD$vF$@D$F^t$ D$t$ $P 1 ̋D$t$p$1Vt$th`v$*F$^̋D$t$p$1t$ D$t$ p$l< t$ D$t$ p$|1 t$ D$t$ p$1 ̋D$p$2t$D$t$t$p$x̋D$@̋L$39A̋D$@̋D$Vt$9Fu^WP<u hhjAhj/)3_^v<~_^̋D$Vt$9Fu^WP<u hhjAhj/s)3_^v<~_^̋D$Vt$9Fu^WP8u h7hjAhj/)3_^vS~_^̋L$D$ɁH̋D$Vt$9Fu^WPdHu hhjAhj/(3_^v~_^̋D$Vt$9F u^WP7u hhjAhj/3(3_^v s~ _^̋D$Vt$9Fu^WPWu hhjAhj/'3_^vS~_^̋D$Vt$9F u^WP蔰u hLhjAhj/s'3_^v 胰~ _^̋D$t$00SUVt$WV2AVkV2t$ t UV) hX VhV賡t SV) hX V蘡hěV芡t WV|) hX VohЛVa_^][Vt$WhV?|$Wu@PVNhV#Wm tW`PVy _^hV_^SUVt$Wh,V͠\$ 3. w40h2 V訠 h8V蘠hHV芠s3 ~F~h`VmjWsPV2]hD VmsG^;|uhV(hdVktP3ۿH9H|A7Ut%C~hVwh Vϟ ?}ąuhX V赟hD V觟_^][W|$ u3_VWlt$PhVlhVaW+iPVd(WPV'htV9nu Ft-Wv}t3D$VpHthrh؛jAhj/V(/W_^][Vt$vH40l#ut$t$V ^ø^̋L$D$A4D$ A8̸NSVW|$3ۋwDVt!hjWjW3_^[UV^Vt$4D$0]0 D$3d$w;}cUw8V3 9D$DEtыD$@P|+h؜jWjW+3]_^[ÅuhjWwHe39^u &Ftjjv3 uhh؛jAj|j/]_^3[t$]S 9t"hjWejW3]_^[]_^[VW|$ GDGHGL,GHuhh؛jAjzj/jt$Q.GDuhLjWjWVjjW tEWt8W)t+PWGLtW+t WuYhh؛jyjzj/GHt:P10 u&hpjW7 uwH+GHwHwDGHL+wHGD+wLGH, GL_^̸KSUVWD$3D$3+t$$jWt$(W.zFDpW7cv0F,VЃD$KPWM9D$PD$ Pv8F4VЃv$t$t$$UD$PW]9^u 9^u9^ t)؅FtPSFtPSmF tPStSWtnF(tjWtYvDYtPWlt0t>.tFfZ^ujDtD$ PWOu7W2hh؛jshj/3_[L$3F ËL$$_[3F ̸FSUVt$3W3\$3v6:u hh؛jxhj/ u hh؛jAhj/jWGj0vDtA6WFt/P3u~ SvPWnvCU;|Pv6W]؃uchh؛jvhj/,3vH/+0uh\jV U Ut$"W| _^][Yh'&Pjj2Suhh؛jw|F(tF3P6D$gPSyuhh؛jt9W7jW8uh h؛jAvLU)uhh؛j|UWuhh؛j|vLWvHb 3~L_VW3tKFt?h %Ft$Wjv!Vt$3tG_^WpV 3_^Vt$h4jVvHf)~u &Ftjjv3 uhh؛jAj|j/3^VtjV<t^jjh؛jAjnj/hjt$$O 3^̸FC$P0 u7hh؛jzjoj/hjt$$jt$,$(3YËL$$D$YSUVt$WVRVZV3 tUSt$n E_^][̸ B 3ĉ$$(SV$,3ۉD$$4WD$ 3$<D$$D$\$ \$uhhjfjjj/ v#thhjrjjj/c ZUVd-U1jUjjjVD$0mthhjjjt$ V9 D$Pjt$=D$PUt$,t$88 \$(St$jVl$hD$0PWpU Ut$VWhhjm:D$(thhj(EjP1D$ hhjnjjj/ ]W Ph?St$7$8D$_^[3@ Vt$ WVtWVt$ WH _^_3^SVWt$W|%t$؅tB36*FtPCtPuyw%%t$;ufw"T$rd$ ;ust-:u0t"B:Gu#tB:GutB:Gu _^[hhjgjdj/ 3_^[t$7uhhjijej/[ 3Pt$thhjhjej// 3ø̸>Ul$ Vt$D$}upu葾u ^]YSWD$PjjUV؃I33S;}WSUPёGFtO tO3D$u+SbD$PjjUt$,P؃uD$_[^]YÅtS3D$_[^]Y3_[^]Y̸=SUVWht$ Tȃu 33A@D$A0D$Pj 3t$t||$ UW+PS$uaS~7Wu;~#VWPSx*WFc;|݋t$VM_^][Ët$h7hjejgj/7V_^][̸< 3ĉ$ $VWP "|$7hD$D$!D$ jP<[RSw \$ D$ w~w؃\$UswtXu|$OIGuff3IBu|$+OGGuʃ|$|]|$u~X ` fD$D$ h hjkjhj/\$$D$,Ph۸X EPht$0hОjYS64[_3^$ 3:Ë$_^3:̸ : 3ĉ$$($4SU$4V$0W$@PL$P EPJ Et70=PP|؃ uXhnhj~hj/uI75D$3$,_^][39 SjxL$hwhPm7 uhxhjAwD$SP0phD$0PVM ~8PD$0PD$P@2 8hD$0PVM j7D$P/ "S\$Vt$UWjjVS3R~cWSU:uARFP ;u,sEtt$6P8u _]^[Ët$SG;|_]^[^[̸f8SUVW|$3W3~4VW&U +;JU@FW;|h;hS5 D$u"h<hjAjij/Y_^]3[W3ۋ2~BSWU< D$~/FPU6PV0 t$CW;|D$_^][Vt$WtO|$tG6u8j6&8u'w pCuwv! _^_^̸7VW$$D$ $$Pu _^ĈÍD$j PD$P= D$P6hhjdjmj/V/0Ph\8j(3 D$P_^Ĉ̸66SUVt$03WVl$L|$0D$$l$l$l$l$ @tuyt#D$Pwwt$v SUVt$WhVv\$ S 3~~WSSPVS, DQhVujjSV_4uh h$VusVwjhD VE\$$G ;|_^][t$ t$ t$ ȃ t@S:utX:Zuu3[ut$t$iø:utQ:Puu3tt$ t$ hԟ0 @P1 3̋D$uBVhht$4 u$hhh0 @P1 ^VWh t$3nXtVVVW,ut$ hL0 @P1  W<_^̸-SUVt$3Wh V3W؃\$t[tPWWWSP3W~OVWV؃tPUDWF贻;|Ћ\$Vhl0 @P1  hOW賻S< _^][YVWh t$3NWtt$WWV詌ut$ h0 @P1  V;_^̸,S\$UVWh33St$,3|$|$(|$$t$ I t6Pgt$u#hShԟ0 @P1 1V3蔺-1 ISVwƊ:utP:Quu3uGPՋ|$Ɗ:utP:Quu3uGtHPՉD$ <:utN:Huu3ugGt PՉD$|$t$CV藹; 3t$t$ Wt$8HEh0M t$荹_^][ht$,hԟ0 @P1 3̋D$ VW33uht$t$p t PtVt$th?V_^̸V*$$Pht$t$ u$ $xPt$t(Yht$hԟ0 @P1 3Y̋D$ uht$ t$ 薆 t1Pu$ht$ hԟ0 @P1 3ø̋D$ S\$ VW33uCh`St$. u-h`Sh0 @P1 V_^[jPu h`ShԟVt$ EVo_^[SW|$ 3۸ϐ:utQ:Puu3u_[VWtX NJ:utP:Quu3uPPjjdV&hVE5t(hh(jhj/Wh@jR t V5^_[̸'S\$WhSt$D$3藄 u#hSh0 @P1 PGbu hShԟW۵tUVW3ʵ~Al$ VW8HuHQht ht$ t$  t$t$h ~ t$t$h . ht$ t$ 辅 t$t$hP  t$t$hP  ht$ t$ ^ t$t$h  t$t$h n h4t$ t$ hpt$ t$ ބ t$t$h0 > t$t$h0  Vt$0~ttt't"hhȥhhj/3^ËFthpP\}vFu+hhȥhhj/\3^Åt t^hhȥhhj/*3^̃|$StX|$ tQ|$tJe؅t?Vt%St$t$t$ Vu Vc3Sh^[3[̸6SUV33Wt$9t$|$ 9t$$9t$(ˮ؅|D$txotmdtbSWt$$t$0U.t@t$$W=D$t+SWPt$4t$ BtSWt$UV~u Vq3Svt$轡U跡t$ N_^][_^]3[̸ &SUVW33|$|$9t$4b9t$$Xl$ L9t$(B9t$,89t$0.裭؅TD$C4D$SUt$4t$4t$ t$(UD$SUPt$WtoSUWt$0t$ 譿tXSt$0t$SUWt$ Wڽt*认tSUt$(WV{u V3SWM[_^]_^3]̸4 3ĉD$0S\$N;N;xV$>I>$N9x6>9I>$N9x>9IN99x>Ny<9u ;A<9t3;Ë++@9A;~_^][_^]3[][̋L$ VUUUS22‹Ul$2V@2+ЋD$D$WNt Nu }mmut @߃ ut @ ut @?ut @;T$}*|*l*p_^]D$[; uQL$+ȃ YQL$+ȃ YQL$+#ȋ%;r Y$-%0 %0 %0 %0 %0 ̀@s sË3Ҁ33̋D$L$ ȋL$ u D$S؋D$d$؋D$[SVD$ uL$D$3؋D$ Aȋ\$T$D$ ud$ȋD$r;T$wr;D$ vN3ҋ^[SD$ uL$D$ 3D$3Pȋ\$T$ D$ ud$d$r;T$ wr;D$v+D$T$+D$T$ ؃[Up0 j<^u\=<YYujDYh EY]U$j tjY)  5= f8f ,fff%f-0E$E(E4p(,  $0jXkǀ4jXk LjX $LhH]Uj]UjtM)  5= f8f ,fff%f-0E$E(E4(,  $0jXkM4hH]VD$ u(L$D$ 3؋D$d$ȋd$Gȋ\$T$ D$ ud$ȋD$r;T$ wr;D$v N+D$T$3+D$T$ ؃ʋӋًȋ^%\1 Uuuu uh h ]Vh1 YVt0 |xu3@^Ã&gh'! $T! Y3^UQQ} SVW)@Hp@3d}P;t3 uE=tt jY5||0 u5x|0 ؉u ];r\9;tWt0 9t3|0 Wt0 5|5|0 5xE֋M9M uu9EtM u؉E띃tV0 YWt0 xp|=t9}33} d3pP;t3 u3F9=tj_t j5ht2 hh2 tYYuhd2 h\2 Y=tYu3=thYt uWu@3@_^[] U} uuu u ] jhH3@u3ۉ]} =0Eu 9=@;tu8PtuWuЋuuWu}uuWuuu.u*uSuuSu>Pt uSuЅtuKuWu#ut4Pt+uWuЋMEQPJYYËe3ۋu]E Ëu0%1 %1 %1 %1 %1 %1 UE3SVWH<AYt} p ;r H;r B(;r3_^[]UjhphL dPSVW 1E3PEdeEh|tTE-PhRt:@$ЃEMd Y_^[]ËE3Ɂ8ËeE3Md Y_^[]UEMZf9t3]ËH<39PEu f9Q]Ã=|t3Vjj 1 YYVt0 |xujX^Ã&3^jhe5|5|0 ։Eu u0 YejYe5|։E5x։EEPEPu5t0 P }u֣|u֣xE \Ë}jlYUuLYH]Uee VWN@;t t У$fEP0 E3EET0 1ED0 1EEP(0 ME3M3M3;uO@u G ȉ щ $_^]VW tЃ;r_^VW   tЃ;r_^%1 %1 hDnYhL d5D$l$l$+SVW 1E3PeuEEEEdËMd Y__^[]Q%1 %1 %1 %0 %x0 `v``R`B`2``^`eeeeeee fheVeJe4e$ee e"f2fHfbffvfffxedddddd(a4a>errex_datax509x509_infox509_pkeyx509_crlx509_reqdsarsaevp_pkeyx509_storessl_ctxssl_certssl_sessionssl_sess_certsslssl_methodrandrand2debug_mallocBIOgethostbynamegetservbynamereaddirRSA_blindingdhdebug_malloc2dsodynlockengineuiecdsaececdhbnec_pre_compstorecompfipsfips2.\crypto\cryptlib.cpointer != NULLdynamicERROROPENSSL_ia32cap%I64i_OPENSSL_isserviceService-0xOpenSSLOpenSSL: FATAL%s(%d): OpenSSL internal error, assertion failed: %s .\crypto\mem.c.\crypto\mem_dbg.c[%02d:%02d:%02d] %5lu file=%s, line=%d, thread=%lu, number=%d, address=%08lX thread=%lu, file=%s, line=%d, info="" %ld bytes leaked in %d chunks OpenSSL 1.0.2k 26 Jan 2017built on: reproducible build, date unspecifiedcompiler: cl -D_USE_32BIT_TIME_T -D_USING_V110_SDK71_ -D_WINSOCK_DEPRECATED_NO_WARNINGS /MD /Ox /O2 /Ob2 -DOPENSSL_THREADS -DDSO_WIN32 -D_USE_32BIT_TIME_T -D_USING_V110_SDK71_ -D_WINSOCK_DEPRECATED_NO_WARNINGS -W3 -Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DOPENSSL_USE_APPLINK -I. -DOPENSSL_NO_RC5 -DOPENSSL_NO_MD2 -DOPENSSL_NO_SSL2 -DOPENSSL_NO_KRB5 -DOPENSSL_NO_JPAKE -DOPENSSL_NO_WEAK_SSL_CIPHERS -DOPENSSL_NO_STATIC_ENGINE VC-WIN32OPENSSLDIR: "/usr/local/ssl"not available.\crypto\ex_data.cCRYPTO_get_ex_new_indexCRYPTO_get_new_dynlockidCRYPTO_get_new_lockidCRYPTO_set_ex_dataDEF_ADD_INDEXDEF_GET_CLASSFIPS_mode_setINT_DUP_EX_DATAINT_FREE_EX_DATAINT_NEW_EX_DATAfips mode not supportedno dynlock create callback/**.\crypto\o_fips.cMD4 part of OpenSSL 1.0.2k 26 Jan 2017MD5 part of OpenSSL 1.0.2k 26 Jan 2017SHA part of OpenSSL 1.0.2k 26 Jan 2017SHA1 part of OpenSSL 1.0.2k 26 Jan 2017SHA-256 part of OpenSSL 1.0.2k 26 Jan 2017SHA-512 part of OpenSSL 1.0.2k 26 Jan 2017j <= (int)sizeof(ctx->key).\crypto\hmac\hmac.cWW = = |||}P}HMACOpenSSL HMAC method.\crypto\hmac\hm_ameth.cW}~p~~@ .\crypto\hmac\hm_pmeth.ckeyhexkey.\crypto\cmac\cmac.c~~d> l> pCMACOpenSSL CMAC method~`0cipherRIPE-MD160 part of OpenSSL 1.0.2k 26 Jan 2017  ##%%&&))**,,//1122447788;;==>>@@CCEEFFIIJJLLOOQQRRTTWWXX[[]]^^aabbddgghhkkmmnnppssuuvvyyzz||        0 0 0  0 0  0 0  0           0  0 0 0 0  0  0  0          $$  $ $ $$  $ $             $$  $ $ $$  $ $                  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0                            ((  ((  ((  ((  ((  ((  ((  ((          """"   " " " " ((((((((    """" ( ( ( ("("("("(DES part of OpenSSL 1.0.2k 26 Jan 2017libdes part of OpenSSL 1.0.2k 26 Jan 2017idxcisc2longdes(%s,%s,%s,%s).\crypto\des\enc_read.c.\crypto\des\enc_writ.c   !"#$% !"#$%&'()*+,-./0123456789:;<=>?@ABCD./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzRC2 part of OpenSSL 1.0.2k 26 Jan 2017xݵ(yJ؝~7+vSbLdDYOaEm }2@놷{ !"\kNTe`sVu;B=0<&oFiW'C>/fހRr5Mj*qZItK^AnQ$Pp9|:#z6[%U1-]㊒)glឨ,c?X≩ 843H _.G奜w hIDEA part of OpenSSL 1.0.2k 26 Jan 2017idea(int)j?$.Dsp"8 1).lN!(Ew8fTl 4)P|ɵՄ? Gy 1Ѭߘr/Ḗ~&jE|,G$l iciNWqX~=t XrX͋qJT{YZ90`*#`(yA8۸y:`l>w'K1/x`\`U%U攫UbHW@cj9U*4\̴ATr|*oc]ũ+1t>\3֯\$lS2zw(H;Kkē!(f a!`|H2]]]u#&܈e>#Ŭom9BD . Ji^Bh!la gӫҠQjh/T(3Ql n;zP;*~ev9>YfCoEå}^;uos D@jVbNw?6r=B$7H ۛIrS{y%P;LylO`@ž\^c$johSl>9oR;Qm,0DE ^J3(fK.WtE9_ ӹyU 2`yr,@%g̣饎"2u<kaP/R=2`#H{1S>W\o.ViB~(2gsUO'[iXʻ]=!lJ[-ySeEIҐK3~ˤAb Lw6~д+MەqՓkю%ǯ/[{AI~-%^q h"W6d$ cUYCxSZ٢[} Źv&ϕbhAJsN-GJ{RQ)S?Wƛv`+t恵oWk *!ec.4dV]-SGjnpzKD). u#&İn}ߧI`fqilRdVឱ¥6)L u@Y>:䚘T?eB[k?ҡ08-M]% L&pc^?kh >\D}W7: P tAu8/;21>8TNmO Bo ,y|$ryVw.?rU$qk.P̈́GXzt}K:zfC cdG27;C$CMQe*P:qUN1w_V5kǣ;< $Y,n<pEㆱo ^*>Zw=Ne)։>%fRxL.jxS<- N=+6&9`y#RnfE{7(2åZl!Xeh;/ۭ}*/n[(!pa)uGa0a4c\s9pL ު˼,b`\ndi#PZe2Zh@*<1! T_~}=b7w-_h)5ǡޖXxWcr"ÃF T0.SHُ(1mX4a(s<|J]d]B> EꫪOlOBBǵj;Oe!AyMjGKPb=bF&[$ti GV[ Htb#*BXU >ap?#r3A~_;"lY7|`t˧@n2w΄PU5ai Z .zD4Egɞs͈Uy_g@Cge48>q(= m!>J=+hZ=@&L4)i Av.khq$j 3ԷCaP.9FE$tO!@MpE/f m1'A9UG%ښ ʫ%xP()Sچ, mbhiHפh'?Oz|Ϊ_7әxB*k@5 ٫9N;VmK1f&tn:2C[Ah xN جV@E'H::SU kKмgUXc)3VJ*%1?~^|1)p/'\,(H"m?H܆AyG@n]Q_2Տd5A4x{%`*`lc´2Of#k>3b $;" r(-Exb}doITH}'>AcG t.no:7`L knU{7,gm;e' )̒9 i{f} ϑ^و/$[Qy{;v.97yY̗&-1.Bh;+jLu.x7BjQ满PcKkؽ%=YBD n *Ngd_ڈ鿾dW{x`M``FѰ8Ew63kBqA_^;Z4ٷ,Q+:Ֆ}}>(-}|%rZLZq)GW;()f(.y_xU`uD^mm%adâW<'*:m?!cf&(3uU4V<wQ( gQ̫_QM08bX7 z{>d!Q2Ow~㶨F=)iSHd$m-if! FEdlX [@X̻k~jEY:D 5>ʹrdfGof,ҏ"W##v215VbuZ6ns҈bIPLVq z2E{Sb%ҽ5iq"|˶+v>S@`8G% 8vFšw``u N˅؍芰z~L\HjiԐ\-% ?2aN[wߏWr:Blowfish part of OpenSSL 1.0.2k 26 Jan 2017blowfish(idx)@0 /kz%?/?!M@`Iɟ'Կ@uИcnafŽ"o;h(Yy#P_w@CV/|-ҢɡHl4ma/T"2*kT:V"AӢ@f/9/Mҹ-?JDvR7,YQoz Zh{.T"5Y/mKdPIf-徐"3;䎴]4K@E?1.eUʱծ-mԢP @"8On ׿r[O/LVSTIiFXEŅc]ՊSW9j7=T*_}x:vbj Bz)^'rgP8ƌDŽZ*'JkѢ*V`C u\B&Ʉq-ls5&5 M{n0f&%HVV^c ϲc|E pPr(pH# yM;-AB G&LjMG\^ |Y#јr8S#/nqFnEV 9q +A|iCHy}B{BIZݿe\ [ ~iC?9zaz UQry吝5rNcZպ60ę _}֡{/6Y DYD̃Aѱ* ;{ B[A%zzӤ0XޘN?wiy{$[Ĭ%5P_aT1bcKU !h]Yfsc=4·~!+g\ab906;Wd/`:5F- 'zy㠌l0^7%oo;j tE'4:NiOM>dY58EfCr3c%N? (Υ'R¦սTUdpfM w&ۄgC!`X0TroSUGڿ]bVhkʃ;n-Ӧ\= wL3{9+^S_aodC x^c"&gI{ڷ"%-U^7rRyL H[k0 cq/޹ S E!5(T<)c)A|-nRPf4,0P1`sY&D\dwR3A+ٺ|o!PaH?ek«dv&4{^% ;MM1$~I,;jx`]sVz\/1Co0TyXR^/2zj0>՚1B°I #ڸ(0q_`ɣaM/Ǚ."płNؼ40y;'ƸaiH?;(ZC/v7ܱӧßn>ƼB7Q(heRwj-K'5.n\ )^XOX{iT̨g&H`K`8# ~8lI `s5GƱVL>#8d^BFzk Od^AE#\;]>rC|m~ll9`qpsv#E@]%=`GK6DήPQH<p}}d^(O= &g.yr?U+HԼ?^!@WNFRWs3NɷdŸW1O g_?@k{C=K۵cUȗn-J(JqoCCl< _P/~׿PZG.Q>pX.0_|r *,]I鎸P'WIoyR}}Yr@EEt]>uOiVA#. '`vteyvvwHNma}/ 4H<0(Ow Vܒ M"7)}V'|@|硴f^aÝ <є`AFv\;x,WGl"}NC~8<=Q8d{h'فI]j~vh]9K9 ;#Im<Eub'z\aBΒ~Brrp }ȡ[(Ob<51)BSjO[}m(Ki\j#MŌ?,-ҖXRg[HJI \EkӉ7`:SRqDIK @sg4|~q6UO/Т`?mPьGnU?墼38Wg} =3{r3O̫]ňv{{uWBdBc+ri/n+_mazgaq%9̸L!gуb>ܷν8\ =Dmn`I:T`H'W+8$ ږ%Eh;}E `P/(b4 ٠m+1+dZ0RXBA\1>26F3S75 {s{OJWdCQz(~c5_ yCdcdJ$_(͸O@C " 0 O7-{$MgQLq_-_d !S^>'_aB%rqK=;&o~~TLmDl߫I&Ǡ36~?Pa w8Pr.PwWFgOT3ɏ1 i5M\=fȦ[]oڑo/"F}F9mOCCN!и  ?X(>nH&p׋wt|% - y#;(8itb߷@!{7Ȋ@ YVvO@/{U MVi35'#WȯVeka^u˅nwU2?-ɿ[%;з$;mc fÀ(82 Tɪס2Zb,gTzuw11&o6F HjyZVLj~CRv/ t,t* M|k .TA5B=!&|,aRe1i%& !\1cr ^Iy p1 d>>̶Ոî 0rlqn/kءDVÈ9/ű1(x⤣2}o~X$Ū{s0a!-!)۳*)e\,0?Б\,ԩT _w:^VxV޾\!uQųåҶw#)Ei/z毲p[v F98/gsD)k)/Ifingӛ/~p%Q^$Slj>!DYܷ)eyCy9A+MWN )zkS< ~U3rŅ?~  ~tn,fy3jXDD1Zs"*ˁc8:$zi HIĀ@8HުL H_%A@N$A UeQr% 9jyMc@hV 틕Z Vqק)N-fcqw*7 5Wa"ɠBր[t!h!hl iwW~@PճMװx QV$AV ʔUWnྵa$ XK'aU{whkldMDfd~i/IO70j5,s@IvM;B(HDLns) _ɋ}oaOw.+rץ<}+FYYEEهTNoHm| ǥcs_DVj͈prͳ]ny` E`1©\1BN"r\,rN@%/N2g@#x\n܃"ukMxnXO DH?{vw#Vu*F_( +8=6 JRft;QZylu eX&hJpFS(l\v0k)h76*g$ k%ֿh,DUueI40" WIbuU~bڨv^FESGml,gHL|3ەCh\SU2` ߝWc9^28aI37~^b<#NygCHKJf-ۄoH Ja)Yfc(` 0qt&@3/C~A^ l( ؒ0~of˜os*`ژ46K-%#= %IH6Jo8C@TzWOpA:Z„TU|5YŗZ:G:%Sj~=eI&TwQ[P]vlDȨ!帊iX`[ŗY)L;]J5ULkD$5鰽bעT/I18T(q)9H[/u@g+3-fVo*ɛ`( ')dMP˲,\26K_A !PNhذy\CPIMAC8wn\e0Rԋ@+>`xT7}02m-yyS"wuXȃoxkcZ\3]ùzv٣Byqj3ƚ`'PC=+mvN%ύHf6AN( aϩI=߹_d: }+p?PO+Zbbyj.H@,Z@"ғ-ES4n)olIIBr~V>olbfLTq*+9)XLVRf.S9v.i硦>iFt+LVvuOx39]O#2]2=&K/~~<O^?vf)o=E4ӷ+4grN=U"g`k8=ü0}8QcÐӝXyTGָaYwSW-XVcNx.F~eyUڑ0@5㶼P?!@=LXI6QpӱڍyKoqK 0ݻ맕d5w$,ϩ/ tцB*v:-7ޚ, )p@ :$7ѴyN] h1 HZ޻Bf1畏?r 3uQB}\cmd!@ WS1zݨ]3CoFq"8ԚέiGb[UgfN G[oLĎnrWxzdD]Ջ` l_9 ]c2֋~ pIPӻߘ)* mS~H~X.t;/RG'~[!<8zvOB9`55'{ɸ6g {pqT3^-ZId, =4pBwbO&Ҹ$d%FN`7>͕xE_{ ۫v"{.1ן%$r_m L=mPO%os#(ĴyI%4aĘnzn|l6AT޾'VAJJ{` ,8I%vK$%Gv XY f 0NndQ& #PhꃢCAST part of OpenSSL 1.0.2k 26 Jan 2017AES part of OpenSSL 1.0.2k 26 Jan 2017aes(partial)in && out && key && ivec.\crypto\aes\aes_ige.c(AES_ENCRYPT == enc) || (AES_DECRYPT == enc)(length % AES_BLOCK_SIZE) == 0)TPD ,$!%\QM@CCPQA< `cC#( (D@D  "%xsK;;.pp@0 <3?(0226tpD4, TSG\PLXSK=$ $ psC3 2, ,'prB2 ``@ PP@#+  6LCO7XRJxpH8&/`aA!4@AAPRB|qM=  PSC7!=trF6,#/$#'0 +"lbN.LAM haI)|pL<  ?/3>d`D$,".HCK   !!hcK+dbF&5 3|rN>xrJ:DCG%$"&-!000437.426 ""8084'DAEL@L )415 <0 <2><*:LBNTQE83 ;h`H(|sO?HBJ TRFtsG7 -DBF5(# +daE%:#91\RN9&2011*laM-\SO$0 82 :XPH`bB"(! )033( xqI9hbJ*(" *088(! -,&ܳ38/`@ `QET@DDcO/lcK+hSKXbB"`3305! )( "ࣇ'Б <264CK H/쀈`L,l(4AED!3?<1 =< ((BNL62><%9 # +(bF&drJ:x#'$#/,1rB2pBB@AA@sC3pcG'd, 7- ,,*044 .)QM\8SGT. ̂9?qM=|1105 bJ*h1 "" `H(hqA1pؑaA!`>&QIXQAPܒ#+Ё CGD #,쁍 ?sK;xPL\"!cC#`## AM LȒ2 :8 ".,:bN.lRJX23AI HpH8x ;p@0pqE5tsO?|154`D$daM-lpD4t԰4* rF6t >@@@ ్=:0" *(RN\)RFTCC@ 0%@HHqI9x<!!  SO\sG7tPDT2 !%$COLBFD-PHXRBP+rN>| =000aE%d0 <<6$䳋;pL<| P@P1 98"&$220aI)h374' $$$ SCP @L L3 ;8BJ H7)DTP ,%$!M\QC@CAPQ< C#`c(( DD@  "%K;xs;.@0pp ?<3(2026D4tp, GTSL\PKXS=$$ C3ps 2 ,, 'B2prц @ ``@PP#+ 6OLC7JXRH8xp&/A!`aÄ4A@ABPRM=|q  CPS7!=F6tr/,#'$#0  +"N.lbM LAI)haL<|p  ?/3>D$d`.,"K HC ! !K+hcF&db5 3N>|rJ:xrGDC%&$"-Ӂ!000743.642" "8804'EDAL L@)541  <<0A1pqÉ E5tq;8IXQ?I HA 981G'dcӈ8 B@B# #L,l`ӄ$4401HH@O/lc =<1 -,!@@@>><2<*:NLBETQ ;83H(h`O?|sJ HBFTRG7ts -FDB5 +(#E%da:#91N\R9&2101*M-laO\S$0  :82HXPB"`b )(!303( I9xqJ*hb *("880(-,! &38/ ``@TQED@D/lcO+hcKXSK"`bB3035)(! "' <642 HCK/,l`L(4DAE!?<3=<1 (( LBN6><2%9  +(# &dbF:xrJ'$#/,#12prB@BB@AA3psC'dcG, 7- ,, *440  .)\QM8TSG. 9?=|qM1015 *hbJ1 " "(h`H1pqA!`aA>&XQIPQA#+ DCG #, ?;xsK\PL"!#`cC# # LAM:82 .,":.lbNXRJ23 HAI8xpH ;0pp@5tqE?|sO541$d`D-laM4tpD4*  6trF >@@@ =:0*(" \RN)TRF@CC 0%H@H9xqI<! !  \SO7tsGTPD2 %$!LCODBF-XPHPRB+>|rN =000%daE<<0 6$;<|pL PP@981 &$"202)haI743'$$ $ PSC   L@L;83 HBJ7.\crypto\modes\gcm128.c.\crypto\bn\bn_add.c.\crypto\bn\bn_div.c.\crypto\bn\bn_exp.cBig Number part of OpenSSL 1.0.2k 26 Jan 2017 .\crypto\bn\bn_lib.c.\crypto\bn\bn_ctx.c.\crypto\bn\bn_mod.c0123456789ABCDEF.\crypto\bn\bn_print.c0%u%09u-bn(%d,%d).\crypto\bn\bn_rand.c.\crypto\bn\bn_shift.c.\crypto\bn\bn_blind.c.\crypto\bn\bn_sqrt.c.\crypto\bn\bn_gcd.c %)+/5;=CGIOSYaegkmq %379=KQ[]agou{  #-39;AKQWY_eikw)+57;=GUY[_mqsw %'-?CEIOU]ci  ')/QW]ew #+/=AGIMSU[ey '7EKOQUWamsy!#')3?AQSY]_iq   # % + / 5 C I M O U Y _ k q w   ! 1 9 = I W a c g o u {      # ) - ? G Q W ] e o {   % / 1 A [ _ a m s w      ! + - = ? O U i y !'/5;KWY]kqu}  %)1CGMOSY[gk!%+9=?Qisy{ '-9EGY_cio #)+17AGS_qsy} '-7CEIOW]gim{!/3;EMYkoqu %)+7=ACI_egk} %39=EOUimou #'3A]cw{57;CIMUgqw}13EIQ[y!#-/5?MQik{}#%/17;AGOUYeks '+-3=EKOUs !#59?AKS]ciqu{} %+/=IMOmq 9IKQgu{   ' ) - 3 G M Q _ c e i w } !!5!A!I!O!Y![!_!s!}!!!!!!!!!!!!!!!!!" """!"%"+"1"9"K"O"c"g"s"u"""""""""""""""# # #'#)#/#3#5#E#Q#S#Y#c#k################$ $$$)$=$A$C$M$_$g$k$y$}$$$$$$$$$$$$$$$$$$%%%%'%1%=%C%K%O%s%%%%%%%%%%%%%%%%& &&&'&)&5&;&?&K&S&Y&e&i&o&{&&&&&&&&&&&&&&&''5'7'M'S'U'_'k'm's'w''''''''''''''(( ((((!(1(=(?(I(Q([(](a(g(u((((((((((((()))!)#)?)G)])e)i)o)u))))))))))))))))***%*/*O*U*_*e*k*m*s***************+'+1+3+=+?+K+O+U+i+m+o+{++++++++++++++ ,,,#,/,5,9,A,W,Y,i,w,,,,,,,,,,,,,,,,---;-C-I-M-a-e-q-----------... ...%.-.3.7.9.?.W.[.o.y................/ / //'/)/A/E/K/M/Q/W/o/u/}///////////////0 0#0)070;0U0Y0[0g0q0y0}000000000000000001 11!1'1-191C1E1K1]1a1g1m1s11111111111111 2222)252Y2]2c2k2o2u2w2{22222222222222223%3+3/353A3G3[3_3g3k3s3y33333333333334444474E4U4W4c4i4m44444444444444 555-535;5A5Q5e5o5q5w5{5}555555555555555666#6165676;6M6O6S6Y6a6k6m6666666666667777?7E7I7O7]7a7u7777777777778 8!83858A8G8K8S8W8_8e8o8q8}8888888888888899#9%9)9/9=9A9M9[9k9y9}999999999999999999::::':+:1:K:Q:[:c:g:m:y::::::::::::;;;!;#;-;9;E;S;Y;_;q;{;;;;;;;;;;;;;;;;;;< <<<<)<5 >>>>#>)>/>3>A>W>c>e>w>>>>>>>>>>>>>>>> ? ?7?;?=?A?Y?_?e?g?y?}????????????@!@%@+@1@?@C@E@]@a@g@m@@@@@@@@@@@@@ A AAA!A3A5A;A?AYAeAkAwA{AAAAAAAAAAABBBB#B)B/BCBSBUB[BaBsB}BBBBBBBBBBBBBBCCC%C'C3C7C9COCWCiCCCCCCCCCCCCCCCCC D DD#D)D;D?DEDKDQDSDYDeDoDDDDDDDDDDDDDDEEE+E1EAEIESEUEaEwE}EEEEEEEEBNRANDBN_BLINDING_convert_exBN_BLINDING_create_paramBN_BLINDING_invert_exBN_BLINDING_newBN_BLINDING_updateBN_bn2decBN_bn2hexBN_CTX_getBN_CTX_newBN_CTX_startBN_divBN_div_no_branchBN_div_recpBN_expbn_expand2BN_EXPAND_INTERNALBN_GF2m_modBN_GF2m_mod_expBN_GF2m_mod_mulBN_GF2m_mod_solve_quadBN_GF2m_mod_solve_quad_arrBN_GF2m_mod_sqrBN_GF2m_mod_sqrtBN_lshiftBN_mod_exp2_montBN_mod_exp_montBN_mod_exp_mont_consttimeBN_mod_exp_mont_wordBN_mod_exp_recpBN_mod_exp_simpleBN_mod_inverseBN_mod_inverse_no_branchBN_mod_lshift_quickBN_mod_mul_reciprocalBN_mod_sqrtBN_mpi2bnBN_newBN_randBN_rand_rangeBN_rshiftBN_usubarg2 lt arg3bad reciprocalbignum too longbits too smallcalled with even modulusdiv by zeroencoding errorexpand on static bignum datainput not reducedinvalid lengthinvalid rangeinvalid shiftnot a squarenot initializedno inverseno solutionp is not primetoo many iterationstoo many temporary variables.\crypto\bn\bn_recp.c.\crypto\bn\bn_mont.c.\crypto\bn\bn_mpi.c.\crypto\bn\bn_exp2.c@ADEPQTU.\crypto\bn\bn_gf2m.c ` Х    0   p  X !!ڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB:6 ڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQSڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQ[=|cH6UӚi?$_e]#ܣbV R)pmg 5NJtl#s'ڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQ[=|cH6UӚi?$_e]#ܣbV R)pmg 5NJtl!|2^F.6;w,']oLR+X9I|j&rZhڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQ[=|cH6UӚi?$_e]#ܣbV R)pmg 5NJtl!|2^F.6;w,']oLR+X9I|j&rZ-3 Pz3U!dX qW] }ǫ 3J%a&k/يdvs>jdR+{ Wza]lw FOt1C[K :ڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQ[=|cH6UӚi?$_e]#ܣbV R)pmg 5NJtl!|2^F.6;w,']oLR+X9I|j&rZ-3 Pz3U!dX qW] }ǫ 3J%a&k/يdvs>jdR+{ Wza]lw FOt1C[K !r<׈q[&'j<h4 %*Lۻގ.ʦ(|YGNk]Oâ#;Q[a)pׯv!pH'հZ꘍ܐM541ڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQ[=|cH6UӚi?$_e]#ܣbV R)pmg 5NJtl!|2^F.6;w,']oLR+X9I|j&rZ-3 Pz3U!dX qW] }ǫ 3J%a&k/يdvs>jdR+{ Wza]lw FOt1C[K !r<׈q[&'j<h4 %*Lۻގ.ʦ(|YGNk]Oâ#;Q[a)pׯv!pH'հZ꘍ܐM546|p&ܲ`&Fuv=7S8/A0jS'1'Z>ϛDlԻG%K3 QQ+ׯBo7ҿYK2rnt^p/F @1 Y#z~6̈EXZK+AT̏m~H^7ৗ(ՋvP=̱\V.28n<h>f?H`-[ ttm@$ڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQ[=|cH6UӚi?$_e]#ܣbV R)pmg 5NJtl!|2^F.6;w,']oLR+X9I|j&rZ-3 Pz3U!dX qW] }ǫ 3J%a&k/يdvs>jdR+{ Wza]lw FOt1C[K !r<׈q[&'j<h4 %*Lۻގ.ʦ(|YGNk]Oâ#;Q[a)pׯv!pH'հZ꘍ܐM546|p&ܲ`&Fuv=7S8/A0jS'1'Z>ϛDlԻG%K3 QQ+ׯBo7ҿYK2rnt^p/F @1 Y#z~6̈EXZK+AT̏m~H^7ৗ(ՋvP=̱\V.28n<h>f?H`-[ ttmYto8w|2ߌؾs1;2tG%vk$f:cZh4#t+x#e-"".|W#4sdl0kKȆ/Kyh3[:+)E\\*=05jzjgszͬs1/>䘎k-nAPZV9.ѝ**慎"7 tn;bYAT*8U]U)l:T^8rv 6J&,o])(|1 `~zC|_cM7-X Hzj)sBО)Sg92dQ>a!@r[󸴉 V9Q~{R;5s߈=,4EkP?ƅ͞>f#Bd9?!(`kM=K^wY('3HjB~~1f9)jx;\_,}٘DIWDh'>f,r^&@P?a5ƶ"߹\k% cd 9:hSIxBwiɉrioHJetizg+*=}p_$܀AH1ihD5޳xĶ\Y*Wc."=9ZʧB=G`b%ki})wZx7X+J"8"cs73KIܶjmvHCzb1?B@;` uy`2}kl;ATuq/}7ya”, <ܨl3d+XW=?';<} ]n@TS FTh"k9{^]qR&  S;+˚ah2Wl $?XKzL/,8 ه'pQ !^&)jgh\HS`TP_Z扏9 U+"o;onl]A|'`Kk,BGc@w}-39Eؘ–OBJ|+3Wk1^˶@h7Qc%Q MinghuaQu)rx?|*b^fv |*b^fv e9މp+" Hr9Z^kU𘨜寇$>u|*b^v(߬eaŖ'WMinghuaQuS^ |*b^fv a'L \,Q]tL K 蒴dВCF.7Gnn6 ظY| K MinghuaQu :Ds6yuyy=$<,^R- (`|,[Z9[-zu 8MinghuaQu41;ѳY̛^),eXm]{j^W)2@'jM:q_KD?$rs;L8,zv06M~51k‚S3)E\\*=#֖vVVI0% dX &D#sao55b(0'yX1^9ov`֖vV]h~Z U){Կ6YOzj{&^/͸GNgL敺x$MinghuaQu[ӭ!:  kV!DA%pVKc)xAߘ3Ccn~sKNP1#:dM[ӭ֖vVZ!: 娉A_es&jFVWsL!VP1e-#fHmy@6m&]$iT3S{דNm^\]8X2.68ڣ ,OT(Fx*a-ܴ k)ʑ:XiCwVgVxzxvTC^BﯲQ Hœ' `SQ/xtJ2b~hԙF74>6lq OE\ ys$w #L3?MinghuaQuwű0zQiq{@ ȩ{Ièz[|1G_JtloaybSr%7: jJwD:̒I֖vVQ7ȡo"cZQ7>g >iwpɻ'L7~*j[Cٶ}.g~Q5 a~Δ3V)'"LlZVTr2:~s)/ck Lna&S}UZg'͛VV[nst՟kA=K4K Pfd~l3, #X!;3; B_}ˬ!9u_e96sqUj5x( g6qo~Rt/i"&ח@)s '&L{*eU05v1.T05u1*]ƷeS Zy|x$!?xD?;bS&_#Vzi¬$XI(681]Bo~EFYb6N4aw"Y.uw&]E1;y9%ݐOp.%U~;͆ SghT$Բ Qo5ݰgyE9`[*|ﭳ4`_eI:q! L'ϸ|`b".U@7Fi |NB)4`x/'2Qe_lBRzXcH(k_ @U}^[K\_ϗ4@W֟y!= LKMBb! !\Ku;{GkB.gGa֬'ȩr/lzUOP1{T_]H`ЈݳIk `dub`DJwM[4%ZQV`yNTyaϫk+$jv6ŧXOTЏ8QOKO@6ds֦3_|</d7٢sH%nY?1?䬜`$HCpG0MΰѺ9IGvGMʈRrI܀O7OJ;ʕ1MՌ0zTm,IyDOrܶ {20YL>ǣPc䳑ۑA80K98޴\wc|H*X:3Hka:#%~"!)q/\jˌkJY3+gVn)JZxRM9 )Urz4V)l CWbFS/Qn#<H'[aUsh#ݜ=Qtn/NGv`֖vVT%FCR4"xu2Ȕ5RBQ}$ <8K MoiF=y2=t3#!Yf?XHʟȂMSL D֖vVX wıف|Qrg8NH@t3O8 $&nNm MĆ&qۛlhMf%8#џM۷P\MinghuaQuj6&=>%ViTG*V8oHT%+{|WM ϊ"RGu޽5Y ^H?q=  n)\@}9Ж{pK ]G dގ3( †g`)JWoS-ֺ}a6+jV,SsW+ &NT'D֖vVU/'(fS{ggRcjheT&@'kdRbg.EWxogTb 62ײ67J v[43^3)2E$@Ðgȓq/$֖vVX\@(wMwwǷfmfC q'O ($+|їbj8 (Zj(xCCbm`!:>zC}f PPe($ksSQ-Ƅ֖vVPgxmlGV ""Vw~wwq&τyYc2?7]LOCDއFP n8&TZ9aW]Y6njL|{UUUUUUUUUUUa h(>HaZb!.`4+D9*?cߕYzxUN'ѥzU玚Ê_ ذa}\#{l!.-^Ոq~!/KMinghuaQuq ]2W|T1:FgVCB>'uxWxvy9/02| Ã"Wp.| [pnVk~|RaPw?k&itNqdǩac MBI*IfG*/ߤ֖vV]&g''}B0wWg#Vtc%Sf&dyVT_P7eA͂J/.?wREr/ͷK(NiG4vҹ1p LVg3LE;^,qbV}TSn"~3UUUUUUUUUUUUUUL# ;_JN"(q-Bu+,@ M͵ qg+|4*Up:o?̄@a,l b-w# qݍiWk.aBA0^ʰ^]ޝ#THn1rE{{b!'. i1IQ 7~_-Q Dt(x6ZۗU CyڦxyNqf@9`Us@{^j_<,z>\&(ZdOt &៾n qQ~@P(2RzAj^& T;VW*VW*-\?ahDC-L+5I $֖vVX[3-ƀVggjeK uO5n FV|FgUVVFg#VVTfVW$r|I6?]R}]E]94V&t+c)#<%wgy8A6j.:$ߜkޘz"9S)TpHy9HO{N#exhW-0Z@q(k򆼡(k򆼡(kkV, Oqtu;/p % R"%nyU [Gxv/ Q*j 2 E,v X0<4E87N I-dDGjuSUz‚VFųJ9Lk"'!oj_{>ܺbزRWs,Yb:E8C|хZڨ*P#Q-rIي]ǰS.Q;zy @1[g6`'~ #Llj]9[#lĭ,* ЕloaThM͏ٴ}CYTL놂7ژ*gZbmNPszb8&]j˰L/z}ᨛb]jY7`@4@4@4@4@4@4@4@4@4#p;^ƍ5 IJfyy pxKJcx\ms@3{LjІl  |D۟$ ^^J_spY`ǭb4{⢀tat]XB4O-g^Xկ?jObF1ZgGz8GAfcc!^J_spY`YP)@` ^J_spY`ǭb^J_spY`ǭb zUkmS[{Q,M}z \U󀱙;49~de#xq||a$Cw!R^J_spY`YP)@` *6ͧF0эGmbj@v91@ƚ(F(|(̣rOD~o%d~S3l /\HS7_j[_H(Iw?)*6ͧF/k[Ĭ*6ͧF0эGmb*6ͧF0эGmboxhh޴;5hT.'{y:匂<0(.?,Dja) ~,Vg":*D|*6ͧF/k[Ĭ4&Cf*0%uׇWډ~h,l)S QN*ذ*YҟC%!5f۳r8l@ ),~\4#}ƌLLn}XVrro$ƸNͬ$5Kʣv4&Cf*0%uKm޼4&Cf*0%uׇWډ~4&Cf*0%uׇWډ~K3}A{'  Ld`jD%8BNv.I`)Հt>V??M| KA j_FL4&Cf*0%uKm޼ Wۡ>f rn;#& ( HnSw}Z u,0Wu0AzU&\lJKD0&\lJKD0ٻ|)\kҮ~W,KH/'#:DS2bT~5FawE-T\T/iWۡ>f q9zaHV Wۡ>f rn;#& ( HnSwWۡ>f rn;#& ( HnStf,a0Nfs= vį/I%j+f q9zaHV(^G 6O Vm?;5yfu}RBӭ@ho?A4T1͈E9o^C~SظRĎ7 ~* 9UEȫ@$w'^CqxwjREi.^G 6O}I4lO ~xho3W$Rc:z'H>fqz0NXwBE_^G 6Ob|9ɔ:PLdhE:?kG~O &46FGԯu ¤\뎕Rb )XdO)(FF!wBA&g@P^( c#.dZ!2.Ljp;b ;xԍPh{}_|mPG@j^h5" "}8]Vc2꿩x" ${[IJ_H^[K؊'c+/Tx:ݝċ?30cp3pU>\AL&AaGӁ]ݵi@ݝċ?30cp3q}MhB͡*检(/-ƅ(`VX:Hݝċ?30cp3q}MhB͡*检(/-ƅ(`VX:H|Dnh! IRxPK>6+#e@EE%Sev6WgB>d\x¦$Xmޝu91=Qs\>w֔:d_o&5[SKՕȒ7lN041ٓ!!k߆'0nmᘶ2ݝċ?30cp3pU>\AL&AaGӁ]ݵi=0==0= >H >4>`>8 > > > ?( 0?X \? ??H? ???  @  @ 4@`@@0@@PAA8A8AplA8A A AhAAA`BBBX@BhBhBh hB !B!B"B#B`$BH%CH&0C'XC(C*C@  @`B=4> C8 C8A8A  Dx*HD+D+4E(,4E,`EP-`E-E.E`/E00E1E2E3F04F`50x0123456789abcdef0123456789.\crypto\bio\b_print.cdoapr()??$@%04x - %02x%c %c%s%04x - %*s%02X:%02X.\crypto\bio\b_sock.ctcphttptelnetsockshttpsftpgopher'service='getaddrinfofreeaddrinfoport='getnameinfo%s:%s%d.%d.%d.%d:%dsocket accept.\crypto\bio\bss_acpt.cnon-blocking IO test filter.\crypto\bio\bf_nbio.cBIO pair.\crypto\bio\bss_bio.cdatagram socket.\crypto\bio\bss_dgram.cgetsockoptsetsockoptStack part of OpenSSL 1.0.2k 26 Jan 2017.\crypto\stack\stack.clhash part of OpenSSL 1.0.2k 26 Jan 2017.\crypto\lhash\lhash.cnum_items = %lu num_nodes = %u num_alloc_nodes = %u num_expands = %lu num_expand_reallocs = %lu num_contracts = %lu num_contract_reallocs = %lu num_hash_calls = %lu num_comp_calls = %lu num_insert = %lu num_replace = %lu num_delete = %lu num_no_delete = %lu num_retrieve = %lu num_retrieve_miss = %lu num_hash_comps = %lu node %6u -> %3u %lu nodes used out of %u %lu items load %d.%02d actual load %d.%02d RAND part of OpenSSL 1.0.2k 26 Jan 2017.\crypto\rand\md_rand.c....................You need to read the OpenSSL FAQ, http://www.openssl.org/support/faq.html@@rbwbRANDFILEHOMEC:.rndRAND_get_rand_methodRAND_init_fipsSSLEAY_RAND_BYTESdual ec drbg disablederror initialising drbgerror instantiating drbgno fips random method setPRNG not seededADVAPI32.DLLNETAPI32.DLLNetStatisticsGetNetApiBufferFreeLanmanWorkstationLanmanServerCryptAcquireContextWCryptGenRandomCryptReleaseContextIntel Hardware Cryptographic Service ProviderUSER32.DLLGetForegroundWindowGetCursorInfoGetQueueStatusCloseToolhelp32SnapshotHeap32FirstHeap32NextHeap32ListFirstHeap32ListNextProcess32FirstProcess32NextThread32FirstThread32Next.\crypto\rand\rand_win.c??@@@@"@1@F@P@unknown librarysystem librarybignum routinesrsa routinesDiffie-Hellman routinesdigital envelope routinesmemory buffer routinesobject identifier routinesPEM routinesdsa routinesx509 certificate routinesasn1 encoding routinesconfiguration file routinescommon libcrypto routineselliptic curve routinesSSL routinesBIO routinesPKCS7 routinesX509 V3 routinesPKCS12 routinesrandom number generatorDSO support routinestime stamp routinesengine routinesOCSP routinesFIPS routinesCMS routinesHMAC routinesfopenconnectioctlsocketbindlistenacceptWSAstartupopendirfreadsystem libBN libRSA libDH libEVP libBUF libOBJ libPEM libDSA libX509 libASN1 libCONF libCRYPTO libEC libSSL libBIO libPKCS7 libX509V3 libPKCS12 libRAND libDSO libENGINE libOCSP libTS libnested asn1 errorbad asn1 object headerbad get asn1 object callexpecting an asn1 sequenceasn1 length mismatchmissing asn1 eosfatalmalloc failurecalled a function you should not callpassed a null parameterinternal errorcalled a function that was disabled at compile-time pP0.\crypto\err\err.cint_err_get (err.c)int_thread_get (err.c)unknownNAlib(%lu)func(%lu)reason(%lu)error:%08lX:%s:%s:%s%lu:%s:%s:%d:%s .\crypto\objects\o_names.csetct-CapTokenDatasetct-CapTokenTBSsetct-AcqCardCodeMsgsetct-AuthRevReqTBSsetct-AuthRevResDatasetct-AuthRevResTBSsetct-CapReqTBSsetct-CapReqTBSXsetct-CapResDatasetct-CapRevReqTBSsetct-CapRevReqTBSXsetct-CapRevResDatasetct-CredReqTBSsetct-CredReqTBSXsetct-CredResDatasetct-CredRevReqTBSsetct-CredRevReqTBSXsetct-CredRevResDatasetct-PCertReqDatasetct-PCertResTBSsetct-BatchAdminReqDatasetct-BatchAdminResDatasetct-CardCInitResTBSsetct-MeAqCInitResTBSsetct-RegFormResTBSsetct-CertReqDatasetct-CertReqTBSsetct-CertResDatasetct-CertInqReqTBSsetct-ErrorTBSsetct-PIDualSignedTBEsetct-PIUnsignedTBEsetct-AuthReqTBEsetct-AuthResTBEsetct-AuthResTBEXsetct-AuthTokenTBEsetct-CapTokenTBEsetct-CapTokenTBEXsetct-AcqCardCodeMsgTBEsetct-AuthRevReqTBEsetct-AuthRevResTBEsetct-AuthRevResTBEBsetct-CapReqTBEsetct-CapReqTBEXsetct-CapResTBEsetct-CapRevReqTBEsetct-CapRevReqTBEXsetct-CapRevResTBEsetct-CredReqTBEsetct-CredReqTBEXsetct-CredResTBEsetct-CredRevReqTBEsetct-CredRevReqTBEXsetct-CredRevResTBEsetct-BatchAdminReqTBEsetct-BatchAdminResTBEsetct-RegFormReqTBEsetct-CertReqTBEsetct-CertReqTBEXsetct-CertResTBEsetct-CRLNotificationTBSsetct-CRLNotificationResTBSsetct-BCIDistributionTBSsetext-genCryptgeneric cryptogramsetext-miAuthmerchant initiated authsetext-pinSecuresetext-pinAnysetext-track2setext-cvadditional verificationset-policy-rootsetCext-hashedRootsetCext-certTypesetCext-merchDatasetCext-cCertRequiredsetCext-tunnelingsetCext-setExtsetCext-setQualfsetCext-PGWYcapabilitiessetCext-TokenIdentifiersetCext-Track2DatasetCext-TokenTypesetCext-IssuerCapabilitiessetAttr-CertsetAttr-PGWYcappayment gateway capabilitiessetAttr-TokenTypesetAttr-IssCapissuer capabilitiesset-rootKeyThumbset-addPolicysetAttr-Token-EMVsetAttr-Token-B0PrimesetAttr-IssCap-CVMsetAttr-IssCap-T2setAttr-IssCap-SigsetAttr-GenCryptgrmgenerate cryptogramsetAttr-T2Encencrypted track 2setAttr-T2cleartxtcleartext track 2setAttr-TokICCsigICC or token signaturesetAttr-SecDevSigsecure device signatureset-brand-IATA-ATAset-brand-Dinersset-brand-AmericanExpressset-brand-JCBset-brand-Visaset-brand-MasterCardset-brand-NovusDES-CDMFdes-cdmfrsaOAEPEncryptionSETITU-Titu-tJOINT-ISO-ITU-Tjoint-iso-itu-tinternational-organizationsInternational OrganizationsmsSmartcardLoginMicrosoft SmartcardloginmsUPNMicrosoft Universal Principal NameAES-128-CFB1aes-128-cfb1AES-192-CFB1aes-192-cfb1AES-256-CFB1aes-256-cfb1AES-128-CFB8aes-128-cfb8AES-192-CFB8aes-192-cfb8AES-256-CFB8aes-256-cfb8DES-CFB1des-cfb1DES-CFB8des-cfb8DES-EDE3-CFB1des-ede3-cfb1DES-EDE3-CFB8des-ede3-cfb8streetstreetAddresspostalCodeid-pplproxyCertInfoProxy Certificate Informationid-ppl-anyLanguageAny languageid-ppl-inheritAllInherit allnameConstraintsX509v3 Name Constraintsid-ppl-independentIndependentRSA-SHA256sha256WithRSAEncryptionRSA-SHA384sha384WithRSAEncryptionRSA-SHA512sha512WithRSAEncryptionRSA-SHA224sha224WithRSAEncryptionSHA256sha256SHA384sha384SHA512sha512SHA224sha224identified-organizationcerticom-arcwapwap-wsgid-characteristic-two-basisonBasistpBasisppBasisc2pnb163v1c2pnb163v2c2pnb163v3c2pnb176v1c2tnb191v1c2tnb191v2c2tnb191v3c2onb191v4c2onb191v5c2pnb208w1c2tnb239v1c2tnb239v2c2tnb239v3c2onb239v4c2onb239v5c2pnb272w1c2pnb304w1*H *H *H *H *H *H *H *H *H *H UUUUUUU U U*H *H *H *H *H *H *H *H *H ++ +++<*H ++*H +*H  *H  *H  *H  *H  *H  *H  *H  *H  *H  `HB`HB`HB+*H + + *H  *H  +`HB`HB`HB`HB`HB`HB`HB `HB `HBUUUUUUUUU U#+UUeUdU*UU+U+UU U *H}B *H}B *H8+*H8+$+$*H )*H  U%++++++++7+7+7 +7 +7 `HBUUU+e*H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H *H ++*H  *H *H *H  +7*H  U)U.++0++0+0+ **H*H8*H8*H *H *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H   *H   *H   *H   *H   *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H  *H ++++++++ + + + +++++++++ + + + + +++++++++++ +++++ +++++++++ + + + + +++++++++++++++++++++++++ + + +++++++++++ + + + + + + + + + + + + + +0+0+0+0+0+0+0+0+0+0+0 +0 +0 ++ U++++++++++++:X &,d &,d UU7*H + + + UHU$U7U8*H=*H=*H=*H=*H=*H=*H=*H=*H=*H=*H=*H=+7`He`He`He`He`He`He`He`He`He)`He*`He+`He,U*H8*H8*H8 & &, &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d &,d% &,d& &,d' &,d( &,d) &,d* &,d+ &,d- &,d. &,d/ &,d0 &,d1 &,d2 &,d3 &,d4 &,d5 &,d6 &,d7 &,d8U-+++++U,UAg*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g* g* g* g* g* g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g* g*!g*"g*#g*$g*%g*&g*'g*(g*)g**g*+g*,g*-g*.g*/g*0g*1g*2g*3g*4g*5g*6g*7g*8g*9g*:g*;g*g*?g*@g*Ag*Bg*Cg*Dg*Eg*Fg*Gg*Hg*Ig*Jg*Kg*Lg*Mg*Ng*Og*Pg*Qg*Rg*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g* g* g* g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*g*"g*#g*g*g*{*H  *H g+7+7U U++++U+*H  *H  *H  *H `He`He`He`He++g+g+*H=*H=*H=*H=*H=*H=*H=*H=*H=*H=*H=*H=*H= *H= *H= *H= *H= *H=*H=*H=*H=*H=*H=*H=+++++ ++++ +!+ +"+#+++++++++++++++$+%+&+'g+g+g+g+g+g+g+g+ g+ g+ g+ U U!U6*K=*K=*K=1 1 1 )1 1 1 ,1 1 1 +U UU*D*D*D*D*D++*H}B *H}B++0*H   *H  `He`He`He-*H=*H=*H=*H=*H=*H=*H *H *H  *H  *H  `He`He(7** *** * ******b*c************* * * * * *!*!*!*#*#*#*#*$*$***** * * * * * +7U.+UUUUUUUUUUUUUUUUUU U!U"U#U$U%U&U'U(U/U0U1U2U3U4U5U6*H   `He`He`He`He`He`He`He.`He/`He0*K=*K=*K=U%*H *H  *H *H>+$+$+$+$+$+$+$+$+$ +$ +$ +$ +$ +$*H  +H?+ + + + +H?+++++y+y+y+y+7<+7<+7< <`uuu u,<vLL vh| v v (v, 1vXt :v ;v =v @v4PCvpFvIvLv 84 Ov\\Svpp [v dv mv vv v(( vLLv`` v|vv H v\ t  v  !  " v !#,!H!$`!t!%v!!&!!'" "(<"h")v""*v"#+P##,v##-v($d$.$$/v$$0 v$$1 v8%8%2 vl%l%3 w%%4 w%%5 w&&6 wP&P&7 'w&&8 0w&'99wH'':@w'';Hw(8(<\((=((>( )?8)h)@Pw))A Uw *H*B^w**Ccw**D hw**E qw+(+FzwT+x+G w++H w++I w0,T,J w|,,K w,,L w(-L-M w--N w--O w .4.PP.P.Qw`..Rw..Sw/4/Twl//Uw//Vw0<0Wwl00Xw00Yw01Zw81L1[ wd1x1\11]11^12_w 282`wT2h2a22b22cw22dx33ex 3L3gx33h x33ix33jx33kx44l x44L4md4|4n44o44p !x5,5q*xP5t5r55s1x 5t6x56u=x 6@6wBxd6|6xHx66y66z6 7{$787|Px`7t7} Vx77~ax 8 8dx8888jxd88qx89yx`99x99x:<:xd:: x:: x$;@; xx;; x;; x(<@< xt<<x<<x=<=xd=l=x== x== x== x>> y<>P> yl>|> y>> y>> )y>> 4y>> ?y>> Jy>> Uy>> `y>> iy>> ry ? ? |y?? y$?$? y,?,? y4?4?yD?P?yh?x?y???? y?? y?@ y @0@ yH@T@ yp@x@ y@@y@@y@@y@@y@@z@@ z@@zAAz A$A(A4A%zDALA&z`AhA)zpAxA.z  4zAA xMxM? MM@ $MMA -MMB 6MMC?MMDGMMEONNFW$N$NG_8N8NHgPNPNIohNhNJw|N|NKNNLNNMNNNNNONNPOOQOOR(O(OS8O8OTPOPOU`O`OVtOtOWOOXOOYOOZOO[OO\PP]PP_$P$P`@P@Pa'\P\Pb/xPxPc7PPd?PPeGPPfOPPgWPPh_PPigPPjo QQkw0Q8Ql@QTQm hQpQn |QQo QQp QQq QQr Q Rs $R4Rt ƀLRLRu πTRTRv ؀\RhRw tRtRxRRyRRzRR{RR|RR}RR~RS SS,S4SDW`WEWWLWWS  TWWWWW^WW fWW oWW xXX XX  X X HYHY HPYPY R`Y`Y \lYlY ftYtY pYY zYY YY YY YY YY YY YY YY ʃZZ ԃZZ ރ,Z,Z jj?jj@ jjAjjBjjCkkDkkE (k(kF$8k8kG(LkLkH,`k`kI0tktkJ4kkK8kkL<kkM@kkNDkkOHkkPLllQP l lRT4l4lSXHlHlT\\l\lU`plplVdllWhllXlllYpllZtmm[x$m$m\|4m4m]DmPm^hmhm_xmxm`mmammbmmcmmdmmemmfnng n nh8n8niLnLnj`n`nk|n|nlnnmnnnĆnnoȆnnp̆ooqцoorֆ,o,osۆDoDotXoXoulolovoowooxooyopz p4p{LpLp| `p`p}tptp~pppppp!pp%pp*pp 2qqq(q8qTq;pqq <qq Fqqqq rr,rCHMR((W@@\XXap|fjm, p@T {h| 0DXl  4H\pɉщىDx܉߉ 0@ \p     D`  !*2 :88 E`` Ptt Y bkry  44HHdd|| !" <<# ʊTT$ӊpp%ي&ފ' (P d )|  *  + !,$!8!-T!T!.h!|!/ !!0!!1 "("2@"@"3%l"l"4,""53""6:""7A(#(#8H`#`#9O##:V##;]##<d4$4$=kp$p$>r$$?y$$@%%AD%D%B|%|%C%%D%%E(&(&Fd&d&G&&H&&I ' 'JƋT'T'K͋''Lԋ''Mۋ((N$($(OD(D(Pl((Q((R))S@)p)T))U(*T*V = *W**X '*+Y08+`+Z3++[;++\>++]A++^D,,_GD,D,`Jp,p,aM,,bP,,cS,,dV--eY8-8-f\h-h-g_--hb--ie--jh..kk,.,.ln@.@.mqX.X.ntx.x.ow..pz..q}..r//sT/T/t|/|/u//v//w00x,0,0yX0X0zx0x0{00|00} d> 1~(1@1 T1l1 11 11 nj11 Ќ11 ٌ2,2 D2\2 p2p2 222222 3 3 8383 l3l3 3333 "34 +(4@4X4p44444585\5555 458 =55 D66 M0606 VT6T6 _l6l6 h66 q66 z66 66 66 66 77 (7(7 P7P7 h77 77 ˍ77ԍ88ڍ@8@8p8p888 884949l9l99999::$:L:p::: ;0;`; ;; ; < !0<`< +<< 5<< @,=L= Kl[]\^lnmo~ o +<>!,=?-P|tBqFC)cW  }"#$.Xr_9n{ DEb%'&(axzy{u|`hw*As   )@d z }! pkxrZrWm\qYs625gXt&%{kg~w|"#0u8~tcY/+S-.,R !y89:;3=<>47QHIJKLVG1@ABCDEF?MNOP265'U(T* cbdef}CFED ijhQNZJPOSRHIQXYWMUVTLGK.*7/,6438-5+120Z[ `a\_]  g9<?>=@;:BAee&'(VS)k3qHLJ:OGN;KIMlvp_/^]hi0Tvfmy#"$[nisq~}|_plwotvum{xyzsrnkghjica`befd@:;<ABC=X.P/QWVDE !"FGH#$%I>?063ST45UJK&'(LMN)*+O71  ,-   89R2^YZ\[]4URzj`ba%jwx71pou$dkpm~t-Q/SR+1,2)0'U(TV*z&'(XHLJG:ON9;KIMroqnsEZw ZWgXY~YVSTUR! l^xr[]\^\qlnmos6y~ 25t&%{ +<>!,=?-kgP zw||tCBqF"#)0xu8cwYc.W   !y}89:;3=<>47HIJKLG@ABCDEF?MNOP65 cbdef}CFED ijhQNZJPOSRHIQXYWMUVTLGK.*7/,6438-5+120[ `a\_]  g9<?>=@;:BA"#$.eeorh_`kZ3{lvm p D_/^]hivb%'&(axzy{fuwmy|#"$[{n   iq~}|_pltvusrnkghjica`befd@:;<ABC=X.P/QWVDE !"FGH#$%I>?063ST45UJK&'(LMN)*+O71  ,-   89R2\[])@sA*4zjd`ba%jx71pou$d}{ | zQ} dijk[\]^_`abcdefghijklmnopqrstceuvwxyz{|RSTUVWXgYZ~Y~x`_      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^lmno_`abcdefghijk|}~%&h-yCB* )@Fsupqrstuv$|'()*+,-/012wwxyz{43MNOP56789:;<=>?@ABCDEFGHIJKLtq    9   TURSQV/ !%,x  !"#$%&'()*+,-./0123456789:CDEFGHIJKLMNOPQRSTUVWXYZ[Z\]_`abcdefghijkl  :;lpA DE012345678X[;<=>?@ABmnopqrstuvw"#GHIJKLMNO}}"c2tnb359v1c2pnb368w1c2tnb431r1secp112r1secp112r2secp128r1secp128r2secp160k1secp160r1secp160r2secp192k1secp224k1secp224r1secp256k1secp384r1secp521r1sect113r1sect113r2sect131r1sect131r2sect163k1sect163r1sect163r2sect193r1sect193r2sect233k1sect233r1sect239k1sect283k1sect283r1sect409k1sect409r1sect571k1sect571r1wap-wsg-idm-ecid-wtls1wap-wsg-idm-ecid-wtls3wap-wsg-idm-ecid-wtls4wap-wsg-idm-ecid-wtls5wap-wsg-idm-ecid-wtls6wap-wsg-idm-ecid-wtls7wap-wsg-idm-ecid-wtls8wap-wsg-idm-ecid-wtls9wap-wsg-idm-ecid-wtls10wap-wsg-idm-ecid-wtls11wap-wsg-idm-ecid-wtls12anyPolicyX509v3 Any PolicypolicyMappingsX509v3 Policy MappingsinhibitAnyPolicyX509v3 Inhibit Any PolicyOakley-EC2N-3ipsec3Oakley-EC2N-4ipsec4CAMELLIA-128-CBCcamellia-128-cbcCAMELLIA-192-CBCcamellia-192-cbcCAMELLIA-256-CBCcamellia-256-cbcCAMELLIA-128-ECBcamellia-128-ecbCAMELLIA-192-ECBcamellia-192-ecbCAMELLIA-256-ECBcamellia-256-ecbCAMELLIA-128-CFBcamellia-128-cfbCAMELLIA-192-CFBcamellia-192-cfbCAMELLIA-256-CFBcamellia-256-cfbCAMELLIA-128-CFB1camellia-128-cfb1CAMELLIA-192-CFB1camellia-192-cfb1CAMELLIA-256-CFB1camellia-256-cfb1CAMELLIA-128-CFB8camellia-128-cfb8CAMELLIA-192-CFB8camellia-192-cfb8CAMELLIA-256-CFB8camellia-256-cfb8CAMELLIA-128-OFBcamellia-128-ofbCAMELLIA-192-OFBcamellia-192-ofbCAMELLIA-256-OFBcamellia-256-ofbUNDEFsubjectDirectoryAttributesundefinedX509v3 Subject Directory AttributesrsadsiissuingDistributionPointRSA Data Security, Inc.X509v3 Issuing Distrubution PointpkcscertificateIssuerRSA Data Security, Inc. PKCSX509v3 Certificate IssuerMD2KISAmd2kisaMD5SEED-ECBmd5seed-ecbRC4SEED-CBCrc4seed-cbcrsaEncryptionSEED-OFBRSA-MD2seed-ofbmd2WithRSAEncryptionSEED-CFBRSA-MD5seed-cfbmd5WithRSAEncryptionHMAC-MD5PBE-MD2-DEShmac-md5pbeWithMD2AndDES-CBCHMAC-SHA1PBE-MD5-DEShmac-sha1pbeWithMD5AndDES-CBCid-PasswordBasedMACX500password based MACdirectory services (X.500)id-DHBasedMacX509Diffie-Hellman based MACCNid-it-suppLangTagscommonNamecaRepositoryCCA RepositorycountryNameid-smime-ct-compressedDataLid-ct-asciiTextWithCRLFlocalityNameid-aes128-wrapSTid-aes192-wrapstateOrProvinceNameid-aes256-wrapOecdsa-with-RecommendedorganizationNameecdsa-with-SpecifiedOUecdsa-with-SHA224organizationalUnitNameecdsa-with-SHA256ecdsa-with-SHA384ecdsa-with-SHA512pkcs7hmacWithMD5pkcs7-datahmacWithSHA224pkcs7-signedDatahmacWithSHA256pkcs7-envelopedDatahmacWithSHA384pkcs7-signedAndEnvelopedDatahmacWithSHA512pkcs7-digestDatadsa_with_SHA224pkcs7-encryptedDatadsa_with_SHA256pkcs3whirlpooldhKeyAgreementcryptoproDES-ECBcryptocomdes-ecbid-GostR3411-94-with-GostR3410-2001DES-CFBGOST R 34.11-94 with GOST R 34.10-2001des-cfbid-GostR3411-94-with-GostR3410-94DES-CBCGOST R 34.11-94 with GOST R 34.10-94des-cbcmd_gost94DES-EDEGOST R 34.11-94des-edeid-HMACGostR3411-94DES-EDE3HMAC GOST 34.11-94des-ede3gost2001IDEA-CBCGOST R 34.10-2001idea-cbcgost94IDEA-CFBGOST R 34.10-94idea-cfbgost89IDEA-ECBGOST 28147-89idea-ecbgost89-cntRC2-CBCgost-macrc2-cbcGOST 28147-89 MACRC2-ECBprf-gostr3411-94rc2-ecbGOST R 34.11-94 PRFRC2-CFBid-GostR3410-2001DHrc2-cfbGOST R 34.10-2001 DHRC2-OFBid-GostR3410-94DHrc2-ofbGOST R 34.10-94 DHSHAid-Gost28147-89-CryptoPro-KeyMeshingshaid-Gost28147-89-None-KeyMeshingRSA-SHAid-GostR3411-94-TestParamSetshaWithRSAEncryptionid-GostR3411-94-CryptoProParamSetDES-EDE-CBCid-Gost28147-89-TestParamSetdes-ede-cbcid-Gost28147-89-CryptoPro-A-ParamSetDES-EDE3-CBCid-Gost28147-89-CryptoPro-B-ParamSetdes-ede3-cbcid-Gost28147-89-CryptoPro-C-ParamSetDES-OFBid-Gost28147-89-CryptoPro-D-ParamSetdes-ofbid-Gost28147-89-CryptoPro-Oscar-1-1-ParamSetIDEA-OFBid-Gost28147-89-CryptoPro-Oscar-1-0-ParamSetidea-ofbid-Gost28147-89-CryptoPro-RIC-1-ParamSetpkcs9id-GostR3410-94-TestParamSetemailAddressid-GostR3410-94-CryptoPro-A-ParamSetunstructuredNameid-GostR3410-94-CryptoPro-B-ParamSetcontentTypeid-GostR3410-94-CryptoPro-C-ParamSetmessageDigestid-GostR3410-94-CryptoPro-D-ParamSetsigningTimeid-GostR3410-94-CryptoPro-XchA-ParamSetcountersignatureid-GostR3410-94-CryptoPro-XchB-ParamSetchallengePasswordid-GostR3410-94-CryptoPro-XchC-ParamSetunstructuredAddressid-GostR3410-2001-TestParamSetextendedCertificateAttributesid-GostR3410-2001-CryptoPro-A-ParamSetNetscapeid-GostR3410-2001-CryptoPro-B-ParamSetNetscape Communications Corp.id-GostR3410-2001-CryptoPro-C-ParamSetnsCertExtid-GostR3410-2001-CryptoPro-XchA-ParamSetNetscape Certificate Extensionid-GostR3410-2001-CryptoPro-XchB-ParamSetnsDataTypeid-GostR3410-94-aNetscape Data Typeid-GostR3410-94-aBisDES-EDE-CFBid-GostR3410-94-bdes-ede-cfbid-GostR3410-94-bBisDES-EDE3-CFBid-Gost28147-89-ccdes-ede3-cfbGOST 28147-89 Cryptocom ParamSetDES-EDE-OFBgost94ccdes-ede-ofbGOST 34.10-94 CryptocomDES-EDE3-OFBgost2001ccdes-ede3-ofbGOST 34.10-2001 CryptocomSHA1id-GostR3411-94-with-GostR3410-94-ccsha1GOST R 34.11-94 with GOST R 34.10-94 CryptocomRSA-SHA1id-GostR3411-94-with-GostR3410-2001-ccsha1WithRSAEncryptionGOST R 34.11-94 with GOST R 34.10-2001 CryptocomDSA-SHAid-GostR3410-2001-ParamSet-ccdsaWithSHAGOST R 3410-2001 Parameter Set CryptocomDSA-olddsaEncryption-oldhmacPBE-SHA1-RC2-64LocalKeySetpbeWithSHA1AndRC2-CBCMicrosoft Local Key setPBKDF2freshestCRLDSA-SHA1-oldX509v3 Freshest CRLdsaWithSHA1-oldid-on-permanentIdentifiernsCertTypePermanent IdentifierNetscape Cert TypesearchGuidensBaseUrlbusinessCategoryNetscape Base UrlpostalAddressnsRevocationUrlpostOfficeBoxNetscape Revocation UrlphysicalDeliveryOfficeNamensCaRevocationUrltelephoneNumberNetscape CA Revocation UrltelexNumbernsRenewalUrlteletexTerminalIdentifierNetscape Renewal UrlfacsimileTelephoneNumbernsCaPolicyUrlx121AddressNetscape CA Policy UrlinternationaliSDNNumbernsSslServerNameregisteredAddressNetscape SSL Server NamedestinationIndicatornsCommentpreferredDeliveryMethodNetscape CommentpresentationAddressnsCertSequencesupportedApplicationContextNetscape Certificate SequencememberDESX-CBCownerdesx-cbcroleOccupantid-ceseeAlsosubjectKeyIdentifieruserPasswordX509v3 Subject Key IdentifieruserCertificatekeyUsagecACertificateX509v3 Key UsageauthorityRevocationListprivateKeyUsagePeriodcertificateRevocationListX509v3 Private Key Usage PeriodcrossCertificatePairsubjectAltNameenhancedSearchGuideX509v3 Subject Alternative NameprotocolInformationissuerAltNamedistinguishedNameX509v3 Issuer Alternative NameuniqueMemberbasicConstraintshouseIdentifierX509v3 Basic ConstraintssupportedAlgorithmscrlNumberdeltaRevocationListX509v3 CRL NumberdmdNamecertificatePoliciesid-alg-PWRI-KEKX509v3 Certificate PoliciesauthorityKeyIdentifiercmacX509v3 Authority Key Identifierid-aes128-GCMBF-CBCaes-128-gcmbf-cbcid-aes128-CCMBF-ECBaes-128-ccmbf-ecbid-aes128-wrap-padBF-CFBid-aes192-GCMbf-cfbaes-192-gcmBF-OFBid-aes192-CCMbf-ofbaes-192-ccmMDC2id-aes192-wrap-padmdc2id-aes256-GCMRSA-MDC2aes-256-gcmmdc2WithRSAid-aes256-CCMRC4-40aes-256-ccmrc4-40id-aes256-wrap-padRC2-40-CBCAES-128-CTRrc2-40-cbcaes-128-ctrGNAES-192-CTRgivenNameaes-192-ctrSNAES-256-CTRsurnameaes-256-ctrinitialsid-camellia128-wrapcrlDistributionPointsid-camellia192-wrapX509v3 CRL Distribution Pointsid-camellia256-wrapRSA-NP-MD5anyExtendedKeyUsagemd5WithRSAAny Extended Key UsageserialNumberMGF1titlemgf1descriptionRSASSA-PSSCAST5-CBCrsassaPsscast5-cbcAES-128-XTSCAST5-ECBaes-128-xtscast5-ecbAES-256-XTSCAST5-CFBaes-256-xtscast5-cfbRC4-HMAC-MD5CAST5-OFBrc4-hmac-md5cast5-ofbAES-128-CBC-HMAC-SHA1pbeWithMD5AndCast5CBCaes-128-cbc-hmac-sha1DSA-SHA1AES-192-CBC-HMAC-SHA1dsaWithSHA1aes-192-cbc-hmac-sha1MD5-SHA1AES-256-CBC-HMAC-SHA1md5-sha1aes-256-cbc-hmac-sha1RSA-SHA1-2RSAES-OAEPsha1WithRSArsaesOaepdhpublicnumberdsaEncryptionRIPEMD160brainpoolP160r1ripemd160brainpoolP160t1RSA-RIPEMD160brainpoolP192r1ripemd160WithRSAbrainpoolP192t1RC5-CBCbrainpoolP224r1rc5-cbcbrainpoolP224t1RC5-ECBbrainpoolP256r1rc5-ecbbrainpoolP256t1RC5-CFBbrainpoolP320r1rc5-cfbbrainpoolP320t1RC5-OFBbrainpoolP384r1rc5-ofbbrainpoolP384t1RLEbrainpoolP512r1run length compressionbrainpoolP512t1ZLIBPSPECIFIEDzlib compressionpSpecifiedextendedKeyUsagedhSinglePass-stdDH-sha1kdf-schemeX509v3 Extended Key UsagedhSinglePass-stdDH-sha224kdf-schemePKIXdhSinglePass-stdDH-sha256kdf-schemeid-kpdhSinglePass-stdDH-sha384kdf-schemeserverAuthdhSinglePass-stdDH-sha512kdf-schemeTLS Web Server AuthenticationdhSinglePass-cofactorDH-sha1kdf-schemeclientAuthdhSinglePass-cofactorDH-sha224kdf-schemeTLS Web Client AuthenticationdhSinglePass-cofactorDH-sha256kdf-schemecodeSigningdhSinglePass-cofactorDH-sha384kdf-schemeCode SigningdhSinglePass-cofactorDH-sha512kdf-schemeemailProtectiondh-std-kdfE-mail Protectiondh-cofactor-kdftimeStampingAES-128-CBC-HMAC-SHA256Time Stampingaes-128-cbc-hmac-sha256msCodeIndAES-192-CBC-HMAC-SHA256Microsoft Individual Code Signingaes-192-cbc-hmac-sha256msCodeComAES-256-CBC-HMAC-SHA256Microsoft Commercial Code Signingaes-256-cbc-hmac-sha256msCTLSignct_precert_sctsMicrosoft Trust List SigningCT Precertificate SCTsmsSGCct_precert_poisonMicrosoft Server Gated CryptoCT Precertificate PoisonmsEFSct_precert_signerMicrosoft Encrypted File SystemCT Precertificate SignernsSGCct_cert_sctsNetscape Server Gated CryptoCT Certificate SCTsdeltaCRLjurisdictionLX509v3 Delta CRL IndicatorjurisdictionLocalityNameCRLReasonjurisdictionSTX509v3 CRL Reason CodejurisdictionStateOrProvinceNameinvalidityDatejurisdictionCInvalidity DatejurisdictionCountryNameSXNetIDStrong Extranet IDPBE-SHA1-RC4-128pbeWithSHA1And128BitRC4PBE-SHA1-RC4-40pbeWithSHA1And40BitRC4PBE-SHA1-3DESpbeWithSHA1And3-KeyTripleDES-CBCPBE-SHA1-2DESpbeWithSHA1And2-KeyTripleDES-CBCPBE-SHA1-RC2-128pbeWithSHA1And128BitRC2-CBCPBE-SHA1-RC2-40pbeWithSHA1And40BitRC2-CBCkeyBagpkcs8ShroudedKeyBagcertBagcrlBagsecretBagsafeContentsBagfriendlyNamelocalKeyIDx509CertificatesdsiCertificatex509CrlPBES2PBMAC1hmacWithSHA1id-qt-cpsPolicy Qualifier CPSid-qt-unoticePolicy Qualifier User NoticeRC2-64-CBCrc2-64-cbcSMIME-CAPSS/MIME CapabilitiesPBE-MD2-RC2-64pbeWithMD2AndRC2-CBCPBE-MD5-RC2-64pbeWithMD5AndRC2-CBCPBE-SHA1-DESpbeWithSHA1AndDES-CBCmsExtReqMicrosoft Extension RequestextReqExtension RequestnamednQualifierid-peid-adauthorityInfoAccessAuthority Information AccessOCSPcaIssuersCA IssuersOCSPSigningOCSP SigningISOisomember-bodyISO Member BodyISO-USISO US Member BodyX9-57X9.57X9cmX9.57 CM ?pkcs5SMIMES/MIMEid-smime-modid-smime-ctid-smime-aaid-smime-algid-smime-cdid-smime-spqid-smime-ctiid-smime-mod-cmsid-smime-mod-essid-smime-mod-oidid-smime-mod-msg-v3id-smime-mod-ets-eSignature-88id-smime-mod-ets-eSignature-97id-smime-mod-ets-eSigPolicy-88id-smime-mod-ets-eSigPolicy-97id-smime-ct-receiptid-smime-ct-authDataid-smime-ct-publishCertid-smime-ct-TSTInfoid-smime-ct-TDTInfoid-smime-ct-contentInfoid-smime-ct-DVCSRequestDataid-smime-ct-DVCSResponseDataid-smime-aa-receiptRequestid-smime-aa-securityLabelid-smime-aa-mlExpandHistoryid-smime-aa-contentHintid-smime-aa-msgSigDigestid-smime-aa-encapContentTypeid-smime-aa-contentIdentifierid-smime-aa-macValueid-smime-aa-equivalentLabelsid-smime-aa-contentReferenceid-smime-aa-encrypKeyPrefid-smime-aa-signingCertificateid-smime-aa-smimeEncryptCertsid-smime-aa-timeStampTokenid-smime-aa-ets-sigPolicyIdid-smime-aa-ets-commitmentTypeid-smime-aa-ets-signerLocationid-smime-aa-ets-signerAttrid-smime-aa-ets-otherSigCertid-smime-aa-ets-contentTimestampid-smime-aa-ets-CertificateRefsid-smime-aa-ets-RevocationRefsid-smime-aa-ets-certValuesid-smime-aa-ets-revocationValuesid-smime-aa-ets-escTimeStampid-smime-aa-ets-certCRLTimestampid-smime-aa-ets-archiveTimeStampid-smime-aa-signatureTypeid-smime-aa-dvcs-dvcid-smime-alg-ESDHwith3DESid-smime-alg-ESDHwithRC2id-smime-alg-3DESwrapid-smime-alg-RC2wrapid-smime-alg-ESDHid-smime-alg-CMS3DESwrapid-smime-alg-CMSRC2wrapid-smime-cd-ldapid-smime-spq-ets-sqt-uriid-smime-spq-ets-sqt-unoticeid-smime-cti-ets-proofOfOriginid-smime-cti-ets-proofOfReceiptid-smime-cti-ets-proofOfDeliveryid-smime-cti-ets-proofOfSenderid-smime-cti-ets-proofOfApprovalid-smime-cti-ets-proofOfCreationMD4md4id-pkix-modid-qtid-itid-pkipid-algid-cmcid-onid-pdaid-acaid-qcsid-cctid-pkix1-explicit-88id-pkix1-implicit-88id-pkix1-explicit-93id-pkix1-implicit-93id-mod-crmfid-mod-cmcid-mod-kea-profile-88id-mod-kea-profile-93id-mod-cmpid-mod-qualified-cert-88id-mod-qualified-cert-93id-mod-attribute-certid-mod-timestamp-protocolid-mod-ocspid-mod-dvcsid-mod-cmp2000biometricInfoBiometric InfoqcStatementsac-auditEntityac-targetingaaControlssbgp-ipAddrBlocksbgp-autonomousSysNumsbgp-routerIdentifiertextNoticeipsecEndSystemIPSec End SystemipsecTunnelIPSec TunnelipsecUserIPSec UserDVCSdvcsid-it-caProtEncCertid-it-signKeyPairTypesid-it-encKeyPairTypesid-it-preferredSymmAlgid-it-caKeyUpdateInfoid-it-currentCRLid-it-unsupportedOIDsid-it-subscriptionRequestid-it-subscriptionResponseid-it-keyPairParamReqid-it-keyPairParamRepid-it-revPassphraseid-it-implicitConfirmid-it-confirmWaitTimeid-it-origPKIMessageid-regCtrlid-regInfoid-regCtrl-regTokenid-regCtrl-authenticatorid-regCtrl-pkiPublicationInfoid-regCtrl-pkiArchiveOptionsid-regCtrl-oldCertIDid-regCtrl-protocolEncrKeyid-regInfo-utf8Pairsid-regInfo-certReqid-alg-des40id-alg-noSignatureid-alg-dh-sig-hmac-sha1id-alg-dh-popid-cmc-statusInfoid-cmc-identificationid-cmc-identityProofid-cmc-dataReturnid-cmc-transactionIdid-cmc-senderNonceid-cmc-recipientNonceid-cmc-addExtensionsid-cmc-encryptedPOPid-cmc-decryptedPOPid-cmc-lraPOPWitnessid-cmc-getCertid-cmc-getCRLid-cmc-revokeRequestid-cmc-regInfoid-cmc-responseInfoid-cmc-queryPendingid-cmc-popLinkRandomid-cmc-popLinkWitnessid-cmc-confirmCertAcceptanceid-on-personalDataid-pda-dateOfBirthid-pda-placeOfBirthid-pda-genderid-pda-countryOfCitizenshipid-pda-countryOfResidenceid-aca-authenticationInfoid-aca-accessIdentityid-aca-chargingIdentityid-aca-groupid-aca-roleid-qcs-pkixQCSyntax-v1id-cct-crsid-cct-PKIDataid-cct-PKIResponsead_timestampingAD Time StampingAD_DVCSad dvcsbasicOCSPResponseBasic OCSP ResponseNonceOCSP NonceCrlIDOCSP CRL IDacceptableResponsesAcceptable OCSP ResponsesnoCheckOCSP No CheckarchiveCutoffOCSP Archive CutoffserviceLocatorOCSP Service LocatorextendedStatusExtended OCSP StatusvalidpathtrustRootTrust RootalgorithmrsaSignatureX500algorithmsdirectory services - algorithmsORGorgDODdodIANAianadirectoryDirectorymgmtManagementexperimentalExperimentalprivatePrivatesecuritySecuritysnmpv2SNMPv2MailenterprisesEnterprisesdcobjectdcObjectDCdomainComponentdomainDomainselected-attribute-typesSelected Attribute TypesclearanceRSA-MD4md4WithRSAEncryptionac-proxyingsubjectInfoAccessSubject Information Accessid-aca-encAttrsrolepolicyConstraintsX509v3 Policy ConstraintstargetInformationX509v3 AC TargetingnoRevAvailX509v3 No Revocation Availableansi-X9-62ANSI X9.62prime-fieldcharacteristic-two-fieldid-ecPublicKeyprime192v1prime192v2prime192v3prime239v1prime239v2prime239v3prime256v1ecdsa-with-SHA1CSPNameMicrosoft CSP NameAES-128-ECBaes-128-ecbAES-128-CBCaes-128-cbcAES-128-OFBaes-128-ofbAES-128-CFBaes-128-cfbAES-192-ECBaes-192-ecbAES-192-CBCaes-192-cbcAES-192-OFBaes-192-ofbAES-192-CFBaes-192-cfbAES-256-ECBaes-256-ecbAES-256-CBCaes-256-cbcAES-256-OFBaes-256-ofbAES-256-CFBaes-256-cfbholdInstructionCodeHold Instruction CodeholdInstructionNoneHold Instruction NoneholdInstructionCallIssuerHold Instruction Call IssuerholdInstructionRejectHold Instruction RejectdatauclpilotpilotAttributeTypepilotAttributeSyntaxpilotObjectClasspilotGroupsiA5StringSyntaxcaseIgnoreIA5StringSyntaxpilotObjectpilotPersonaccountdocumentroomdocumentSeriesrFC822localPartdNSDomaindomainRelatedObjectfriendlyCountrysimpleSecurityObjectpilotOrganizationpilotDSAqualityLabelledDataUIDuserIdtextEncodedORAddressmailrfc822MailboxinfofavouriteDrinkroomNumberphotouserClasshostmanagerdocumentIdentifierdocumentTitledocumentVersiondocumentAuthordocumentLocationhomeTelephoneNumbersecretaryotherMailboxlastModifiedTimelastModifiedByaRecordpilotAttributeType27mXRecordnSRecordsOARecordcNAMERecordassociatedDomainassociatedNamehomePostalAddresspersonalTitlemobileTelephoneNumberpagerTelephoneNumberfriendlyCountryNameorganizationalStatusjanetMailboxmailPreferenceOptionbuildingNamedSAQualitysingleLevelQualitysubtreeMinimumQualitysubtreeMaximumQualitypersonalSignaturedITRedirectaudiodocumentPublisherx500UniqueIdentifiermime-mhsMIME MHSmime-mhs-headingsmime-mhs-bodiesid-hex-partial-messageid-hex-multipart-messagegenerationQualifierpseudonymid-setSecure Electronic Transactionsset-ctypecontent typesset-msgExtmessage extensionsset-attrset-policyset-certExtcertificate extensionsset-brandsetct-PANDatasetct-PANTokensetct-PANOnlysetct-OIDatasetct-PIsetct-PIDatasetct-PIDataUnsignedsetct-HODInputsetct-AuthResBaggagesetct-AuthRevReqBaggagesetct-AuthRevResBaggagesetct-CapTokenSeqsetct-PInitResDatasetct-PI-TBSsetct-PResDatasetct-AuthReqTBSsetct-AuthResTBSsetct-AuthResTBSXsetct-AuthTokenTBS.\crypto\objects\obj_dat.c.%lu.\crypto\objects\obj_lib.cOBJ_add_objectOBJ_createOBJ_dupOBJ_NAME_new_indexOBJ_nid2lnOBJ_nid2objOBJ_nid2snunknown nid*)A@B)tF@C`_hq@ts@wu@"t#t')+(),T)RU)S@@X_d__p__|_____``____x`H``a`T`` a ````,a`l`<``a````.\crypto\objects\obj_xref.cABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/>?456789:;<=  !"#$%&'()*+,-./0123ctx->length <= (int)sizeof(ctx->enc_data).\crypto\evp\encode.c.\crypto\evp\digest.cctx->digest->md_size <= EVP_MAX_MD_SIZEEVP part of OpenSSL 1.0.2k 26 Jan 2017.\crypto\evp\evp_enc.cctx->cipher->block_size == 1 || ctx->cipher->block_size == 8 || ctx->cipher->block_size == 16EVP_CIPHER_CTX_iv_length(ctx) <= (int)sizeof(ctx->iv)bl <= (int)sizeof(ctx->buf)b <= sizeof ctx->bufb <= sizeof ctx->finalnkey <= EVP_MAX_KEY_LENGTH.\crypto\evp\evp_key.cniv <= EVP_MAX_IV_LENGTH.\crypto\evp\evp_cnf.cfips_mode, value=name=alg_section#%##%#-#p$##$##@&##`'#[ @(p(H] @((H^ @()H\ @(`)H"*+#*,.*,$*@+Jݢ,y!-P-+-/0.<-00.>-/0. -.0.,-/0.=-00.?-/0.!-.0.-010.-20.5 8 57 56 57 5p7 57 5 8 57  56  57  5p7  57  5 8  57 56 57 5p7 57 .\crypto\evp\e_camellia.c:@:a:@:CENECFNFCENECpGNpGCDNOCDNPCDNDCENECFNFCENECpGNpG CD NO CD NP CD ND CE NE CF NF CE NE CpG NpG v0GH:: v0>H:: v0GH:: v0>H:: v0GH:: v0>H:: qJJ? qP@J?@qJJ?@qP@J? wK0LHpA wC0LHpA wK0LHpA wC0LHpA wK0LHpA wC0LHpA2PEF2PEF 2PEFCDNOCDNPCDND.\crypto\evp\e_aes.c WX WX W`YWYP0ZZ%J@[@]p[[\'K@[]p[[\(L@[^p[[\&I@[@^p[[\J@[@]p[[\bJ@[@]p[[\.\crypto\evp\e_rc2.cl <= sizeof(iv)l _`n _`o _`am _a0b0b0bPb`bbY[@`PbbbY[@`)*dc cY[@d@A dePcY[@d pcccY[@t cccY[@t0 ccdY[@ ccdY[$@ddd@BBdePctBqF@dtqdePctBqF@d_`e e@eP`Pa$uwdpeeY[@ddePc0@d.\crypto\evp\p_open.c.\crypto\evp\p_sign.c.\crypto\evp\p_verify.c.\crypto\evp\p_lib.c%s algorithm "%s" unsupported Public KeyPrivate KeyParameters.\crypto\evp\p_enc.c.\crypto\evp\p_dec.cmessage digestbase64 encoding.\crypto\evp\bio_b64.cctx->buf_len >= ctx->buf_offctx->buf_off + i < (int)sizeof(ctx->buf)ctx->buf_off < (int)sizeof(ctx->buf)ctx->buf_len <= (int)sizeof(ctx->buf)i <= nctx->buf_off <= (int)sizeof(ctx->buf)ctx->tmp_len <= 3.\crypto\evp\bio_enc.cAESNI_INIT_KEYAESNI_XTS_CIPHERAES_INIT_KEYAES_T4_INIT_KEYAES_XTSAES_XTS_CIPHERALG_MODULE_INITCAMELLIA_INIT_KEYCMAC_INITCMLL_T4_INIT_KEYD2I_PKEYDO_SIGVER_INITDSAPKEY2PKCS8DSA_PKEY2PKCS8ECDSA_PKEY2PKCS8ECKEY_PKEY2PKCS8EVP_CipherInit_exEVP_CIPHER_CTX_copyEVP_CIPHER_CTX_ctrlEVP_CIPHER_CTX_set_key_lengthEVP_DecryptFinal_exEVP_DigestInit_exEVP_EncryptFinal_exEVP_MD_CTX_copy_exEVP_MD_sizeEVP_OpenInitEVP_PBE_alg_addEVP_PBE_alg_add_typeEVP_PBE_CipherInitEVP_PKCS82PKEYEVP_PKCS82PKEY_BROKENEVP_PKEY2PKCS8_brokenEVP_PKEY_copy_parametersEVP_PKEY_CTX_ctrlEVP_PKEY_CTX_ctrl_strEVP_PKEY_CTX_dupEVP_PKEY_decryptEVP_PKEY_decrypt_initEVP_PKEY_decrypt_oldEVP_PKEY_deriveEVP_PKEY_derive_initEVP_PKEY_derive_set_peerEVP_PKEY_encryptEVP_PKEY_encrypt_initEVP_PKEY_encrypt_oldEVP_PKEY_get1_DHEVP_PKEY_get1_DSAEVP_PKEY_GET1_ECDSAEVP_PKEY_get1_EC_KEYEVP_PKEY_get1_RSAEVP_PKEY_keygenEVP_PKEY_keygen_initEVP_PKEY_newEVP_PKEY_paramgenEVP_PKEY_paramgen_initEVP_PKEY_signEVP_PKEY_sign_initEVP_PKEY_verifyEVP_PKEY_verify_initEVP_PKEY_verify_recoverEVP_PKEY_verify_recover_initEVP_RIJNDAELEVP_SignFinalEVP_VerifyFinalFIPS_CIPHERINITFIPS_CIPHER_CTX_COPYFIPS_CIPHER_CTX_CTRLFIPS_CIPHER_CTX_SET_KEY_LENGTHFIPS_DIGESTINITFIPS_MD_CTX_COPYHMAC_Init_exINT_CTX_NEWPKCS5_PBE_keyivgenPKCS5_v2_PBE_keyivgenPKCS5_V2_PBKDF2_KEYIVGENPKCS8_set_brokenPKEY_SET_TYPERC2_MAGIC_TO_METHRC5_CTRLaes iv setup failedaes key setup failedasn1 libbad block lengthbad decryptbad key lengthbn pubkey errorcamellia key setup failedcipher parameter errorcommand not supportedctrl not implementedctrl operation not implementeddata not multiple of block lengthdifferent key typesdifferent parametersdisabled for fipsencode errorerror loading sectionerror setting fips modeevp pbe cipherinit errorexpecting an rsa keyexpecting a dh keyexpecting a dsa keyexpecting a ecdsa keyexpecting a ec keyinitialization errorinput not initializedinvalid fips modeinvalid keyinvalid key lengthinvalid operationiv too largekeygen failuremessage digest is nullmethod not supportedno cipher setno default digestno digest setno dsa parametersno key setno operation setno sign function configuredno verify function configuredoperaton not initializedpkcs8 unknown broken typeprivate key decode errorprivate key encode errorpublic key not rsatoo largeunknown cipherunknown optionunknown pbe algorithmunsuported number of roundsunsupported algorithmunsupported cipherunsupported keylengthunsupported key derivation functionunsupported key sizeunsupported prfunsupported private key algorithmunsupported salt typewrap mode not allowedwrong final block lengthwrong public key type0bDESXdesxDESdesDES3des3IDEAideaSEEDRC2rc2BFbfblowfishCASTcastCAST-cbccast-cbcAES128aes128AES192aes192AES256aes256CAMELLIA128camellia128CAMELLIA192camellia192CAMELLIA256camellia256ssl2-md5ssl3-md5ssl3-sha1DSS1dss1ripemdrmd160l <= sizeof(c->iv).\crypto\evp\evp_lib.cj <= sizeof(c->iv)reliable.\crypto\evp\bio_ok.cThe quick brown fox jumped over the lazy dog's back..\crypto\evp\evp_pkey.cTYPE= p pD@pE@` a@` ,@` +@` %@` b@` Ppp@p@ !*).\crypto\evp\evp_pbe.c.\crypto\evp\p5_crpt.cEVP_CIPHER_key_length(cipher) <= (int)sizeof(md_tmp)EVP_CIPHER_iv_length(cipher) <= 16.\crypto\evp\p5_crpt2.ckeylen <= sizeof key.\crypto\evp\pmeth_lib.cdigest.\crypto\evp\pmeth_fn.c.\crypto\evp\pmeth_gn.c.\crypto\evp\m_sigver.c6666666666666666jjjjjjjjjjjjjjjj.\crypto\asn1\a_object.c.\crypto\asn1\a_bitstr.cc ;; ;.\crypto\asn1\a_utctm.c%02d%02d%02d%02d%02d%02dZcc ;; ;.\crypto\asn1\a_gentm.c%04d%02d%02d%02d%02d%02dZASN1_TIME.\crypto\asn1\a_time.c1920.\crypto\asn1\a_int.c.\crypto\asn1\a_set.c.\crypto\asn1\a_dup.c.\crypto\asn1\a_d2i_fp.c.\crypto\asn1\a_i2d_fp.c.\crypto\asn1\a_enum.c.\crypto\asn1\a_sign.c.\crypto\asn1\a_digest.c.\crypto\asn1\a_verify.c.\crypto\asn1\a_mbstr.c%ldminsize=maxsize='()+,-./:=?x(  0123456789ABCDEF\W%08lX\U%04lX\%02X#.\crypto\asn1\a_strex.c" + ,+, ; = =tR@ P%dparameterX509_ALGORalgorithmsX509_ALGORS  ę notBeforenotAfterX509_VAL(P%@D, algorpublic_keyX509_PUBKEY.\crypto\asn1\x_pubkey.cP%ĚX509_SIGp/  8)10( 8/DP%L@XsubjectpubkeyattributesX509_REQ_INFOreq_infosig_algsignatureX509_REQd @0 value.setvalue.singleX509_ATTRIBUTEobjectXXBIGNUM  LONGZLONG.\crypto\asn1\x_long.c%ld @ȝ08 Ğ؞ 8<77 567lvalueX509_NAME_ENTRYRDNSX509_NAME_ENTRIESNameX509_NAME_INTERNALX509_NAME.\crypto\asn1\x_name.c( 3LP% 8' 8= )@ @$ 0 4P>Ƞ@>DP%L@,hissuervalidityissuerUIDsubjectUIDextensionsX509_CINFcert_infopp == NULL || *pp != NULL.\crypto\asn1\x_x509.c̡@ԡ@ܡp P%0@ 0@trustrejectaliaskeyidotherX509_CERT_AUXforwardreverseX509_CERT_PAIR FHDP%L@@(L3  УPJ DP%8   H (crlX509_CRLrevocationDateX509_REVOKEDlastUpdatenextUpdaterevokedX509_CRL_INFO.\crypto\asn1\x_crl.c.\crypto\asn1\x_info.c)ܤ@PP%L@ challengeNETSCAPE_SPKACspkacsig_algorNETSCAPE_SPKIP8xQK@0@NETSCAPE_CERT_SEQUENCEcertsܥ0@headercertNETSCAPE_X509.\crypto\asn1\d2i_pu.c.\crypto\asn1\d2i_pr.c.\crypto\asn1\i2d_pu.c.\crypto\asn1\i2d_pr.c.\crypto\asn1\t_req.cCertificate Request: Data: %8sVersion: %s%lu (%s0x%lx) Subject:%c Subject Public Key Info: %12sPublic Key Algorithm: %12sUnable to load Public Key %8sAttributes: %12sa0:00 %12sunable to print attribute %8sRequested Extensions: critical: %s %16sJanFebMarAprMayJunJulAugSepOctNovDec.\crypto\asn1\t_x509.cCertificate: %8sVersion: %lu (0x%lx) Serial Number: %s%lu (%s0x%lx) (Negative) %12s%s Issuer:%c Validity Not Before: Not After : %8sIssuer Unique ID: %8sSubject Unique ID: X509v3 extensions Subject OCSP hash: Public key OCSP hash: Signature Algorithm: Bad time value GMT%s %2d %02d:%02d:%02d%.*s %d%s%s %2d %02d:%02d:%02d %d%s%*sTrusted Uses: %*s%*sNo Trusted Uses. %*sRejected Uses: %*s%*sNo Rejected Uses. %*sAlias: %s %*sKey Id: %s%02X.\crypto\asn1\t_crl.cCertificate Revocation List (CRL): %8sVersion %lu (0x%lx) %8sIssuer: %s %8sLast Update: %8sNext Update: NONECRL extensionsRevoked Certificates: No Revoked Certificates. Serial Number: Revocation Date: CRL entry extensions%s 0 %s %s%lu (%s0x%lx) %s%sNetscape SPKI: UNKNOWN Public Key Algorithm: %s Unable to load public key Challenge String: %s Signature Algorithm: %s .\crypto\asn1\tasn_new.c.\crypto\asn1\tasn_enc.c @ @.\crypto\asn1\tasn_dec.c, Type=Field=Type=.\crypto\asn1\tasn_utl.c$ 4DTht Ȱܰ0@L=\P(l)xбįбASN1_INTEGERASN1_ENUMERATEDASN1_BIT_STRINGASN1_OCTET_STRINGASN1_NULLASN1_OBJECTASN1_UTF8STRINGASN1_PRINTABLESTRINGASN1_T61STRINGASN1_IA5STRINGASN1_GENERALSTRINGASN1_UTCTIMEASN1_GENERALIZEDTIMEASN1_VISIBLESTRINGASN1_UNIVERSALSTRINGASN1_BMPSTRINGASN1_ANYASN1_SEQUENCEASN1_PRINTABLEDISPLAYTEXTDIRECTORYSTRINGASN1_BOOLEANASN1_TBOOLEANASN1_FBOOLEANASN1_OCTET_STRING_NDEFASN1_SEQUENCE_ANYASN1_SET_ANY.\crypto\asn1\tasn_prn.c :EXTERNAL TYPE %s ERROR: selector [%d] invalid { %*s} Unprocessed type %d SETSEQUENCE%*s%s OF %s { %*s%s: %*s (%s): BOOL ABSENTFALSETRUE%s (%s) (%ld unused bits) NULL .\crypto\asn1\ameth_lib.c00\ .\crypto\asn1\f_int.c.\crypto\asn1\f_string.c/dL  5P%$ 0osenckeyNETSCAPE_ENCRYPTED_PKEYprivate_keyNETSCAPE_PKEY.\crypto\asn1\n_pkey.cprivate-keyEnter Private Key password:SGCKEYSALT.\crypto\asn1\f_enum.c.\crypto\asn1\x_pkey.c.\crypto\asn1\a_bool.cX509_EXTENSIONS@ l| <ԴX509_EXTENSIONExtensionasn1.\crypto\asn1\bio_asn1.cctx->buflen <= ctx->bufsize.\crypto\asn1\bio_ndef.c.\crypto\asn1\asn_mime.c-----BEGIN %s----- -----END %s----- sha-256sha-384sha-512gostr3411-94smime.p7mapplication/x-pkcs7-application/pkcs7- MIME-Version: 1.0%sContent-Type: multipart/signed; protocol="%ssignature"; micalg=""; boundary="----%s"%s%sThis is an S/MIME signed message%s%s------%s%s%s------%s%sContent-Type: %ssignature; name="smime.p7s"%sContent-Transfer-Encoding: base64%sContent-Disposition: attachment; filename="smime.p7s"%s%s%s------%s--%s%senveloped-datasigned-receiptsigned-datacerts-onlycompressed-datasmime.p7z filename="%s"%sContent-Type: %smime; smime-type=%s; name="%s"%sContent-Transfer-Encoding: base64%s%scontent-typemultipart/signedboundaryapplication/x-pkcs7-signatureapplication/pkcs7-signaturetype: application/x-pkcs7-mimeapplication/pkcs7-mimeContent-Type: text/plain text/plain--UTF8XX   (,<DH T\ hx     ļԼ      x0t48DHT\dlt|BOOLBOOLEANINTINTEGERENUMENUMERATEDOIDOBJECTUTCTIMEUTCGENERALIZEDTIMEGENTIMEOCTOCTETSTRINGBITSTRBITSTRINGUNIVERSALSTRINGUNIVIA5IA5STRINGUTF8StringBMPBMPSTRINGVISIBLESTRINGVISIBLEPRINTABLESTRINGPRINTABLET61T61STRINGTELETEXSTRINGGeneralStringGENSTRNUMERICNUMERICSTRINGSEQEXPEXPLICITIMPIMPLICITOCTWRAPSEQWRAPSETWRAPBITWRAPFORMFORMAT.\crypto\asn1\asn1_gen.ctag=ASCIIHEXBITLISTChar=string=%-18sTXdXXt̾xt ļؾ ,hEOCBIT STRINGOCTET STRINGOBJECT DESCRIPTOREXTERNALREALUTF8STRINGVIDEOTEXSTRINGGRAPHICSTRINGGENERALSTRINGcons: prim: priv [ %d ] cont [ %d ]appl [ %d ]BAD RECURSION DEPTH Error in encoding %5ld:d=%-2d hl=%ld l=%4ld d=%-2d hl=%ld l=inf length is greater than %ld :BAD OBJECTBad boolean :%d[HEX DUMP]:BAD INTEGERBAD ENUMERATED(unknown)ASN.1 part of OpenSSL 1.0.2k 26 Jan 2017.\crypto\asn1\asn1_lib.c%lu offset=address=a2d_ASN1_OBJECTa2i_ASN1_ENUMERATEDa2i_ASN1_INTEGERa2i_ASN1_STRINGAPPEND_EXPASN1_BIT_STRING_set_bitASN1_CBASN1_CHECK_TLENASN1_COLLATE_PRIMITIVEASN1_COLLECTASN1_D2I_EX_PRIMITIVEASN1_d2i_fpASN1_D2I_READ_BIOASN1_digestASN1_DO_ADBASN1_dupASN1_ENUMERATED_setASN1_ENUMERATED_to_BNASN1_EX_C2IASN1_FIND_ENDASN1_GENERALIZEDTIME_adjASN1_GENERALIZEDTIME_setASN1_generate_v3ASN1_get_objectASN1_HEADER_NEWASN1_i2d_bioASN1_i2d_fpASN1_INTEGER_setASN1_INTEGER_to_BNASN1_item_d2i_fpASN1_item_dupASN1_ITEM_EX_COMBINE_NEWASN1_ITEM_EX_D2IASN1_item_i2d_bioASN1_item_i2d_fpASN1_item_packASN1_item_signASN1_item_sign_ctxASN1_item_unpackASN1_item_verifyASN1_mbstring_ncopyASN1_OBJECT_newASN1_OUTPUT_DATAASN1_pack_stringASN1_PCTX_newASN1_PKCS5_PBE_SETASN1_seq_packASN1_seq_unpackASN1_signASN1_STR2TYPEASN1_STRING_setASN1_STRING_TABLE_addASN1_STRING_type_newASN1_TEMPLATE_EX_D2IASN1_TEMPLATE_NEWASN1_TEMPLATE_NOEXP_D2IASN1_TIME_adjASN1_TIME_setASN1_TYPE_get_int_octetstringASN1_TYPE_get_octetstringASN1_unpack_stringASN1_UTCTIME_adjASN1_UTCTIME_setASN1_verifyB64_READ_ASN1B64_WRITE_ASN1BIO_new_NDEFBITSTR_CBBN_to_ASN1_ENUMERATEDBN_to_ASN1_INTEGERc2i_ASN1_BIT_STRINGc2i_ASN1_INTEGERc2i_ASN1_OBJECTCOLLECT_DATAD2I_ASN1_BIT_STRINGd2i_ASN1_BOOLEANd2i_ASN1_bytesD2I_ASN1_GENERALIZEDTIMED2I_ASN1_HEADERD2I_ASN1_INTEGERd2i_ASN1_OBJECTd2i_ASN1_SETd2i_ASN1_type_bytesd2i_ASN1_UINTEGERD2I_ASN1_UTCTIMEd2i_AutoPrivateKeyd2i_Netscape_RSAD2I_NETSCAPE_RSA_2d2i_PrivateKeyd2i_PublicKeyd2i_RSA_NETD2I_RSA_NET_2D2I_X509D2I_X509_CINFd2i_X509_PKEYi2d_ASN1_bio_streami2d_ASN1_SETI2D_ASN1_TIMEi2d_DSA_PUBKEYi2d_EC_PUBKEYi2d_PrivateKeyi2d_PublicKeyi2d_RSA_NETi2d_RSA_PUBKEYLONG_C2IOID_MODULE_INITPARSE_TAGGINGPKCS5_pbe2_set_ivPKCS5_pbe_setPKCS5_pbe_set0_algorPKCS5_pbkdf2_setSMIME_read_ASN1SMIME_textX509_CINF_NEWX509_CRL_add0_revokedX509_INFO_newX509_NAME_ENCODEX509_NAME_EX_D2IX509_NAME_EX_NEWX509_NEWX509_PKEY_newadding objectasn1 parse errorasn1 sig parse erroraux errorbad classbad object headerbad password readbad tagbmpstring is wrong lengthbn libboolean is wrong lengthcipher has no object identifiercontext not initialiseddata is wrongdecoding errordepth exceededdigest and key type not supportederror getting timeerror parsing set elementerror setting cipher paramsexpecting an integerexpecting an objectexpecting a booleanexpecting a timeexplicit length mismatchexplicit tag not constructedfield missingfirst num too largeheader too longillegal bitstring formatillegal booleanillegal charactersillegal formatillegal hexillegal implicit tagillegal integerillegal nested taggingillegal nullillegal null valueillegal objectillegal optional anyillegal options on item templateillegal tagged anyillegal time valueinteger not ascii formatinteger too large for longinvalid bit string bits leftinvalid bmpstring lengthinvalid digitinvalid mime typeinvalid modifierinvalid numberinvalid object encodinginvalid separatorinvalid time formatinvalid universalstring lengthinvalid utf8stringlength errorlist errormime no content typemime parse errormime sig parse errormissing eocmissing second numbermissing valuemstring not universalmstring wrong tagnested asn1 stringnon hex charactersnot ascii formatnot enough datano content typeno matching choice typeno multipart body failureno multipart boundaryno sig content typenull is wrong lengthobject not ascii formatodd number of charsprivate key header missingsecond number too largesequence length mismatchsequence not constructedsequence or set needs configshort linesig invalid mime typestreaming not supportedstring too longstring too shorttag value too hightime not ascii formattoo longtype not constructedtype not primitiveunable to decode rsa keyunable to decode rsa private keyunexpected eocuniversalstring is wrong lengthunknown formatunknown message digest algorithmunknown object typeunknown public key typeunknown signature algorithmunknown tagunsupported any defined by typeunsupported encryption algorithmunsupported public key typeunsupported typewrong tagwrong type.\crypto\asn1\a_bytes.c @(((@(@(01(6(7(c(d(e(i@(MASK:nombstrpkixutf8onlydefault.\crypto\asn1\a_strnid.c.\crypto\asn1\evp_asn1.c.\crypto\asn1\asn_pack.csaltiterPBEPARAM.\crypto\asn1\p5_pbe.cP%P%` P%keyfuncencryptionPBE2PARAMkeylengthprfPBKDF2PARAM.\crypto\asn1\p5_pbev2.c/  P% 1 pkeyalgpkeyPKCS8_PRIV_KEY_INFO.\crypto\asn1\asn_moid.coid_section.\crypto\pem\pem_sign.c.\crypto\pem\pem_seal.c.\crypto\pem\pem_info.cCERTIFICATEX509 CERTIFICATETRUSTED CERTIFICATEX509 CRLRSA PRIVATE KEYDSA PRIVATE KEYEC PRIVATE KEYstrlen(objstr) + 23 + 2 * enc->iv_len + 13 <= sizeof bufPEM part of OpenSSL 1.0.2k 26 Jan 20170123456789ABCDEFEnter PEM pass phrase:.\crypto\pem\pem_lib.cphrase is too short, needs to be at least %d chars ENCRYPTEDMIC-CLEARMIC-ONLYBAD-TYPEProc-Type: 4,DEK-Info: ANY PRIVATE KEYENCRYPTED PRIVATE KEYPRIVATE KEYPARAMETERSX9.42 DH PARAMETERSDH PARAMETERSNEW CERTIFICATE REQUESTCERTIFICATE REQUESTPKCS7PKCS #7 SIGNED DATACMSExpecting: enc->iv_len <= (int)sizeof(iv)Proc-Type: -----BEGIN ----- -----END RSA PUBLIC KEYPUBLIC KEYDSA PARAMETERSEC PARAMETERSB2I_DSSb2i_PVK_bioB2I_RSACHECK_BITLEN_DSACHECK_BITLEN_RSAd2i_PKCS8PrivateKey_biod2i_PKCS8PrivateKey_fpDO_B2IDO_B2I_BIODO_BLOB_HEADERDO_PK8PKEYDO_PK8PKEY_FPDO_PVK_BODYDO_PVK_HEADERI2B_PVKi2b_PVK_bioLOAD_IVPEM_ASN1_readPEM_ASN1_read_bioPEM_ASN1_writePEM_ASN1_write_bioPEM_def_callbackPEM_do_headerPEM_F_PEM_WRITE_PKCS8PRIVATEKEYPEM_get_EVP_CIPHER_INFOPEM_PK8PKEYPEM_readPEM_read_bioPEM_READ_BIO_DHPARAMSPEM_read_bio_ParametersPEM_READ_BIO_PRIVATEKEYPEM_READ_DHPARAMSPEM_READ_PRIVATEKEYPEM_SealFinalPEM_SealInitPEM_SignFinalPEM_writePEM_write_bioPEM_WRITE_PRIVATEKEYPEM_X509_INFO_readPEM_X509_INFO_read_bioPEM_X509_INFO_write_biobad base64 decodebad end linebad iv charsbad magic numberbad version numberbio write failurecipher is nullerror converting private keyexpecting private key blobexpecting public key blobinconsistent headerkeyblob header parse errorkeyblob too shortnot dek infonot encryptednot proc typeno start lineproblems getting passwordpublic key no rsapvk data too shortpvk too shortread keyshort headerunsupported encryptionunsupported key componentsCERTIFICATE PAIR.\crypto\pem\pem_oth.c.\crypto\pem\pem_pk8.c.\crypto\pem\pem_pkey.c%s PRIVATE KEY%s PARAMETERS.\crypto\pem\pvkfmt.c/usr/local/ssl/private/usr/local/ssl/usr/local/ssl/certs/usr/local/ssl/cert.pemSSL_CERT_DIRSSL_CERT_FILE.\crypto\x509\x509_r2x.c.\crypto\x509\x509_cmp.c0123456789ABCDEFNO X509_NAME.\crypto\x509\x509_obj.c.\crypto\x509\x509_req.c.\crypto\x509\x509spki.cX.509 part of OpenSSL 1.0.2k 26 Jan 2017.\crypto\x509\x509_vfy.cOPENSSL_ALLOW_PROXY_CERTSakid mismatchbad x509 filetypebase64 decode errorcant check dh keycert already in hash tablecrl already deltacrl verify failureerr asn1 libidp mismatchinvalid directoryinvalid field nameinvalid trustissuer mismatchkey type mismatchkey values mismatchloading cert dirloading defaultsname too longnewer crl not newerno cert set for us to verifyno crl numberpublic key decode errorpublic key encode errorshould retryunable to find parameters in chainunable to get certs public keyunknown key typeunknown purpose idunknown trust idwrong lookup typeADD_CERT_DIRBY_FILE_CTRLCHECK_NAME_CONSTRAINTSCHECK_POLICYDIR_CTRLGET_CERT_BY_SUBJECTNETSCAPE_SPKI_b64_decodeNETSCAPE_SPKI_b64_encodeX509at_add1_attrX509v3_add_extX509_ATTRIBUTE_create_by_NIDX509_ATTRIBUTE_create_by_OBJX509_ATTRIBUTE_create_by_txtX509_ATTRIBUTE_get0_dataX509_ATTRIBUTE_set1_dataX509_check_private_keyX509_CRL_diffX509_CRL_print_fpX509_EXTENSION_create_by_NIDX509_EXTENSION_create_by_OBJX509_get_pubkey_parametersX509_load_cert_crl_fileX509_load_cert_fileX509_load_crl_fileX509_NAME_add_entryX509_NAME_ENTRY_create_by_NIDX509_NAME_ENTRY_create_by_txtX509_NAME_ENTRY_set_objectX509_NAME_onelineX509_NAME_printX509_print_ex_fpX509_PUBKEY_getX509_PUBKEY_setX509_REQ_check_private_keyX509_REQ_print_exX509_REQ_print_fpX509_REQ_to_X509X509_STORE_add_certX509_STORE_add_crlX509_STORE_CTX_get1_issuerX509_STORE_CTX_initX509_STORE_CTX_newX509_STORE_CTX_purpose_inheritX509_to_X509_REQX509_TRUST_addX509_TRUST_setX509_verify_cert.\crypto\x509\x509name.c.\crypto\x509\x509_v3.c.\crypto\x509\x509_att.c.\crypto\x509\x509_lu.cokunable to get issuer certificateunable to get certificate CRLunable to decrypt certificate's signatureunable to decrypt CRL's signatureunable to decode issuer public keycertificate signature failureCRL signature failurecertificate is not yet validCRL is not yet validcertificate has expiredCRL has expiredformat error in certificate's notBefore fieldformat error in certificate's notAfter fieldformat error in CRL's lastUpdate fieldformat error in CRL's nextUpdate fieldout of memoryself signed certificateself signed certificate in certificate chainunable to get local issuer certificateunable to verify the first certificatecertificate chain too longcertificate revokedinvalid CA certificateinvalid non-CA certificate (has CA markings)path length constraint exceededproxy path length constraint exceededproxy certificates not allowed, please set the appropriate flagunsupported certificate purposecertificate not trustedcertificate rejectedapplication verification failuresubject issuer mismatchauthority and subject key identifier mismatchauthority and issuer serial number mismatchkey usage does not include certificate signingunable to get CRL issuer certificateunhandled critical extensionkey usage does not include CRL signingkey usage does not include digital signatureunhandled critical CRL extensioninvalid or inconsistent certificate extensioninvalid or inconsistent certificate policy extensionno explicit policyDifferent CRL scopeUnsupported extension featureRFC 3779 resource not subset of parent's resourcespermitted subtree violationexcluded subtree violationname constraints minimum and maximum not supportedunsupported name constraint typeunsupported or invalid name constraint syntaxunsupported or invalid name syntaxCRL path validation errorSuite B: certificate version invalidSuite B: invalid public key algorithmSuite B: invalid ECC curveSuite B: invalid signature algorithmSuite B: curve not allowed for this LOSSuite B: cannot sign P-384 with P-256Hostname mismatchEmail address mismatchIP address mismatchInvalid certificate verification contextIssuer certificate lookup errorproxy subject name violationerror number %ldcompatibleSSL ClientSSL ServerS/MIME emailObject SignerOCSP responderOCSP requestTSA server.\crypto\x509\x509_trs.cLoad file into cache.\crypto\x509\by_file.cLoad certs from files in a directory.\crypto\x509\by_dir.c%s%c%08lx.%s%d(d\smime_signssl_clientssl_server.\crypto\x509\x509_vpm.cW- - - x|4capathlenBASIC_CONSTRAINTSCA.\crypto\x509v3\v3_bcons.c,value:,name:section:clientserveremailObject SigningobjsignUnusedreservedSSL CAsslCAS/MIME CAemailCAObject Signing CAobjCADigital SignaturedigitalSignatureNon RepudiationnonRepudiationKey EnciphermentkeyEnciphermentData EnciphermentdataEnciphermentKey AgreementkeyAgreementCertificate SignkeyCertSignCRL SigncRLSignEncipher OnlyencipherOnlyDecipher OnlydecipherOnlyG@P1 / S@P1 / 0.\crypto\x509v3\v3_bitst.c.\crypto\x509v3\v3_conf.c,section=critical,DER:ASN1:value=~> p> = p> p> = @EXTENDED_KEY_USAGE.\crypto\x509v3\v3_extku.cHp? ? Ip? ? Jp? ? Kp? ? Lp? ? Mp? ? Np? ? .\crypto\x509v3\v3_ia5.c.\crypto\x509v3\v3_lib.c %*s%s%*s%*s0123456789ABCDEF.\crypto\x509v3\v3_utl.ctrueYyYESyesfalseNNOnoxn--a2i_GENERAL_NAMEASIDENTIFIERCHOICE_CANONIZEASIDENTIFIERCHOICE_IS_CANONICALCOPY_EMAILCOPY_ISSUERDO_DIRNAMEDO_EXT_CONFDO_EXT_I2DDO_EXT_NCONFDO_I2V_NAME_CONSTRAINTSGNAMES_FROM_SECTNAMEhex_to_stringi2s_ASN1_ENUMERATEDI2S_ASN1_IA5STRINGi2s_ASN1_INTEGERI2V_AUTHORITY_INFO_ACCESSNOTICE_SECTIONNREF_NOSPOLICY_SECTIONPROCESS_PCI_VALUER2I_CERTPOLR2I_PCIS2I_ASN1_IA5STRINGs2i_ASN1_INTEGERs2i_ASN1_OCTET_STRINGS2I_ASN1_SKEY_IDS2I_SKEY_IDSET_DIST_POINT_NAMEstring_to_hexSXNET_add_id_ascSXNET_add_id_INTEGERSXNET_add_id_ulongSXNET_get_id_ascSXNET_get_id_ulongV2I_ASIDENTIFIERSv2i_ASN1_BIT_STRINGV2I_AUTHORITY_INFO_ACCESSV2I_AUTHORITY_KEYIDV2I_BASIC_CONSTRAINTSV2I_CRLDV2I_EXTENDED_KEY_USAGEv2i_GENERAL_NAMESv2i_GENERAL_NAME_exV2I_IDPV2I_IPADDRBLOCKSV2I_ISSUER_ALTV2I_NAME_CONSTRAINTSV2I_POLICY_CONSTRAINTSV2I_POLICY_MAPPINGSV2I_SUBJECT_ALTV3_ADDR_VALIDATE_PATH_INTERNALV3_GENERIC_EXTENSIONX509V3_add1_i2dX509V3_add_valueX509V3_EXT_addX509V3_EXT_add_aliasX509V3_EXT_confX509V3_EXT_freeX509V3_EXT_i2dX509V3_EXT_nconfX509V3_get_sectionX509V3_get_stringX509V3_get_value_boolX509V3_parse_listX509_PURPOSE_addX509_PURPOSE_setbad ip addressbad objectbn dec2bn errorbn to asn1 integer errorcannot find free functiondirname errordistpoint already setduplicate zone iderror converting zoneerror creating extensionerror in extensionexpected a section nameextension existsextension name errorextension not foundextension setting not supportedextension value errorillegal empty extensionillegal hex digitincorrect policy syntax taginvalid asnumberinvalid asrangeinvalid boolean stringinvalid extension stringinvalid inheritanceinvalid ipaddressinvalid multiple rdnsinvalid nameinvalid null argumentinvalid null nameinvalid null valueinvalid numbersinvalid object identifierinvalid optioninvalid policy identifierinvalid proxy policy settinginvalid purposeinvalid safiinvalid sectioninvalid syntaxissuer decode errorneed organization and numbersno config databaseno issuer certificateno issuer detailsno policy identifierno proxy cert policy language definedno public keyno subject detailsodd number of digitsoperation not definedothername errorpolicy language already definedpolicy path lengthpolicy path length already definedpolicy syntax not currently supportedpolicy when proxy language requires no policysection not foundunable to get issuer detailsunable to get issuer keyidunknown bit string argumentunknown extensionunknown extension nameunsupported optionuser too long @(4DP`i l|08 i @  i type_idOTHERNAMEnameAssignerpartyNameEDIPARTYNAMEd.otherNamed.rfc822Named.dNSNamed.x400Addressd.directoryNamed.ediPartyNamed.uniformResourceIdentifierd.iPAddressd.registeredIDGENERAL_NAMEGeneralNamesGENERAL_NAMESUi o Pm Vi o n i o othernameX400NameEdiPartyNameDNSURIDirName%XIP AddressRegistered IDothername:X400Name:EdiPartyName:email:%sDNS:%sURI:%sDirName: IP Address:%d.%d.%d.%d:%XIP Address:.\crypto\x509v3\v3_alt.ccopymoveRIDIPdirNameotherNamesection=R P~ .\crypto\x509v3\v3_skey.chashZ `  serialalways.\crypto\x509v3\v3_akey.cT    0 t PKEY_USAGE_PERIODNot Before: Not After: X_ _ _  UnspecifiedunspecifiedKey CompromisekeyCompromiseCA CompromiseCACompromiseAffiliation ChangedaffiliationChangedSupersededsupersededCessation Of OperationcessationOfOperationCertificate HoldcertificateHoldRemove From CRLremoveFromCRLPrivilege WithdrawnprivilegeWithdrawnAA CompromiseAACompromiseУ@  P         T  zoneuserSXNETIDidsSXNET%*sVersion: %ld (0x%lX) %*sZone: %s, User: .\crypto\x509v3\v3_sxnet.cY P  0 @@@ p  ,0 <@D DT@ `0Xht0CERTIFICATEPOLICIESpolicyidqualifiersPOLICYINFOd.otherd.cpsurid.usernoticepqualidPOLICYQUALINFOnoticerefexptextUSERNOTICEorganizationnoticenosNOTICEREF.\crypto\x509v3\v3_cpols.cia5orgpolicyIdentifierCPSuserNoticeexplicitTextnoticeNumbers%*sPolicy: %*sCPS: %s %*sUser Notice: %*sUnknown Qualifier: %*sOrganization: %s %*sNumber%s: %*sExplicit Text: %s CriticalNon Critical%*s%s %*sNo Qualifiers Xd |(,  @  0 g P  Y P  d t          ( X l    i 08 , @i DIST_POINTCRLDistributionPointsCRL_DIST_POINTSonlyuseronlyCAonlysomereasonsindirectCRLonlyattrISSUING_DIST_POINTunusedreasonsCRLissuername.fullnamename.relativenameDIST_POINT_NAMEdistpoint.\crypto\x509v3\v3_crld.cfullnamerelativename%*s%s: %*sonlyAA%*sFull Name: %*sRelative Name: %*s%*sOnly User Certificates %*sOnly CA Certificates %*sIndirect CRL Only Some Reasons%*sOnly Attribute Certificates Reasons%*sCRL Issuer: SSL clientsslclientSSL serversslserverNetscape SSL servernssslserverS/MIME signingsmimesignS/MIME encryptionsmimeencryptCRL signingcrlsignAny PurposeanyOCSP helperocsphelperTime Stamp signingtimestampsignGSUWY~.\crypto\x509v3\v3_purp.c й @  й @ `@hi t 0methodlocationACCESS_DESCRIPTIONAUTHORITY_INFO_ACCESS.\crypto\x509v3\v3_info.c - oJ 0 r    @` n `   p q  0bsL  %*scrlUrl: %*scrlNum: %*scrlTime: .\crypto\x509v3\v3_ocsp.c%*sIssuer: %*si   AUTHORITY_KEYID0  @ @@@ issuerDomainPolicysubjectDomainPolicyPOLICY_MAPPINGPOLICY_MAPPINGS.\crypto\x509v3\v3_pmaps.c   PrequireExplicitPolicyinhibitPolicyMappingPOLICY_CONSTRAINTSRequire Explicit PolicyInhibit Policy Mapping.\crypto\x509v3\v3_pcons.c   Ji \  , @minimummaximumGENERAL_SUBTREEpermittedSubtreesexcludedSubtreesNAME_CONSTRAINTSpermittedexcluded.\crypto\x509v3\v3_ncons.cPermittedExcludedIP:%d.%d.%d.%d/%d.%d.%d.%dD@T\l@ policyLanguagepolicyPROXY_POLICYpcPathLengthConstraintproxyPolicyPROXY_CERT_INFO_EXTENSIONp @  %*sPath Length Constraint: infinite%*sPolicy Language: %*sPolicy Text: %s language.\crypto\x509v3\v3_pci.chex:file:text:.\crypto\x509v3\pcy_cache.c.\crypto\x509v3\pcy_node.c.\crypto\x509v3\pcy_data.c.\crypto\x509v3\pcy_tree.cp   p   %02X%02X%.14s.%03dZ.\crypto\x509v3\v3_scts.c%*sSigned Certificate Timestamp: %*sVersion : v1(0) %*sLog ID : %*sTimestamp : %*sExtensions: %*sSignature : %*s unknown %*s.\crypto\cms\cms_lib.cCMS_OtherCertificateFormat00@000000 p"1 1` 81"P1h1@x1P4# 1  51 1P% 111P%L11#x#@11@28$282@LP |$@2 5\2P%p2  2 2` 2P $22 2` T%28%@2P%2P%2 53 3P% 43%D3`3@l3\&t3`.3  & 3 1` 3 &3 3 43T'<' 3tRP%hK@'3 1` 814  ' 4@ h(4(h4 5@40 L4 3P%P4 43  ( 4@)4 54 3P% 43 54P%3P% 43)44@5)5 (5 05 85 @5 H5 X*@*P5 5d5 t5p  5 51*5 51P%p2  X+5 55 51+ 58, $6 5d5 t5p  5P%1P%p2 5P%6 6P% 506P% p2 ,H6\6Pd6p t6` 6p 6 6 6 X-D- 8%@6 4..661x.6 61.775,7i .<7P7h7@ x7i / 7/7 58%@P7 77P%77/ 783807 8@8|0T"d.certificated.extendedCertificated.v1AttrCertd.v2AttrCertCMS_CertificateChoicesd.issuerAndSerialNumberd.subjectKeyIdentifierCMS_SignerIdentifiereContentTypeeContentCMS_EncapsulatedContentInfosiddigestAlgorithmsignedAttrssignatureAlgorithmunsignedAttrsCMS_SignerInfootherRevInfoFormatotherRevInfoCMS_OtherRevocationInfoFormatd.crlCMS_RevocationInfoChoicedigestAlgorithmsencapContentInfocertificatescrlssignerInfosCMS_SignedDataCMS_OriginatorInfocontentEncryptionAlgorithmencryptedContentCMS_EncryptedContentInforidkeyEncryptionAlgorithmencryptedKeyCMS_KeyTransRecipientInfokeyAttrIdkeyAttrCMS_OtherKeyAttributedateCMS_RecipientKeyIdentifierd.rKeyIdCMS_KeyAgreeRecipientIdentifierCMS_RecipientEncryptedKeyCMS_OriginatorPublicKeyd.originatorKeyCMS_OriginatorIdentifierOrKeyoriginatorukmrecipientEncryptedKeysCMS_KeyAgreeRecipientInfokeyIdentifierCMS_KEKIdentifierkekidCMS_KEKRecipientInfokeyDerivationAlgorithmCMS_PasswordRecipientInfooriTypeoriValueCMS_OtherRecipientInfod.ktrid.karid.kekrid.pwrid.oriCMS_RecipientInfooriginatorInforecipientInfosencryptedContentInfounprotectedAttrsCMS_EnvelopedDataCMS_DigestedDataCMS_EncryptedDatamacAlgorithmauthAttrsmacunauthAttrsCMS_AuthenticatedDatacompressionAlgorithmCMS_CompressedDatad.datad.signedDatad.envelopedDatad.digestedDatad.encryptedDatad.authenticatedDatad.compressedDataCMS_ContentInfoCMS_ATTRIBUTESCMS_Attributes_SignCMS_Attributes_Verifyd.allOrFirstTierd.receiptListCMS_ReceiptsFromsignedContentIdentifierreceiptsFromreceiptsToCMS_ReceiptRequestoriginatorSignatureValueCMS_ReceiptkeyInfoentityUInfosuppPubInfoCMS_SharedInfoCMS_IssuerAndSerialNumberotherCertFormatotherCert.\crypto\cms\cms_io.c.\crypto\cms\cms_smime.cVerify error:add signer errorcertificate already presentcertificate has no keyidcertificate verify errorcipher initialisation errorcipher parameter initialisation errorcms datafinal errorcms libcontentidentifier mismatchcontent not foundcontent type mismatchcontent type not compressed datacontent type not enveloped datacontent type not signed datacontent verify errorctrl errorctrl failuredecrypt errordigest errorerror getting public keyerror reading messagedigest attributeerror setting keyerror setting recipientinfoinvalid encrypted key lengthinvalid key encryption parametermd bio init errormessagedigest attribute wrong lengthmessagedigest wrong lengthmsgsigdigest errormsgsigdigest verification failuremsgsigdigest wrong lengthneed one signernot a signed receiptnot encrypted datanot keknot key agreementnot key transportnot pwrinot supported for this key typeno cipherno contentno keyno key or certno matching digestno matching recipientno matching signatureno msgsigdigestno passwordno private keyno receipt requestno signersprivate key does not match certificatereceipt decode errorrecipient errorsigner certificate not foundsignfinal errorsmime text errorstore init errortype not compressed datatype not datatype not digested datatype not encrypted datatype not enveloped dataunable to finalize contextunknown digest algorihmunknown idunsupported compression algorithmunsupported content typeunsupported kek algorithmunsupported key encryption algorithmunsupported recipient typeunsupported recpientinfo typeunwrap errorunwrap failureverification failurewrap errorCHECK_CONTENTCMS_add0_certCMS_add0_recipient_keyCMS_add0_recipient_passwordCMS_add1_ReceiptRequestCMS_add1_recipient_certCMS_add1_signerCMS_ADD1_SIGNINGTIMECMS_compresscms_CompressedData_createcms_CompressedData_init_bioCMS_COPY_CONTENTCMS_COPY_MESSAGEDIGESTCMS_dataCMS_dataFinalCMS_dataInitCMS_decryptCMS_decrypt_set1_keyCMS_decrypt_set1_passwordCMS_decrypt_set1_pkeycms_DigestAlgorithm_find_ctxcms_DigestAlgorithm_init_biocms_DigestedData_do_finalCMS_digest_verifycms_encode_ReceiptCMS_encryptcms_EncryptedContent_init_bioCMS_EncryptedData_decryptCMS_EncryptedData_encryptCMS_EncryptedData_set1_keyCMS_EnvelopedData_createcms_EnvelopedData_init_bioCMS_ENVELOPED_DATA_INITcms_env_asn1_ctrlCMS_finalCMS_GET0_CERTIFICATE_CHOICESCMS_get0_contentCMS_GET0_ECONTENT_TYPEcms_get0_envelopedCMS_GET0_REVOCATION_CHOICESCMS_GET0_SIGNEDcms_msgSigDigest_add1CMS_ReceiptRequest_create0cms_Receipt_verifyCMS_RecipientInfo_decryptCMS_RecipientInfo_encryptcms_RecipientInfo_kari_encryptCMS_RecipientInfo_kari_get0_algCMS_RecipientInfo_kari_get0_orig_idCMS_RecipientInfo_kari_get0_reksCMS_RecipientInfo_kari_orig_id_cmpCMS_RECIPIENTINFO_KEKRI_DECRYPTCMS_RECIPIENTINFO_KEKRI_ENCRYPTCMS_RecipientInfo_kekri_get0_idCMS_RecipientInfo_kekri_id_cmpCMS_RecipientInfo_ktri_cert_cmpCMS_RECIPIENTINFO_KTRI_DECRYPTCMS_RECIPIENTINFO_KTRI_ENCRYPTCMS_RecipientInfo_ktri_get0_algsCMS_RecipientInfo_ktri_get0_signer_idcms_RecipientInfo_pwri_cryptCMS_RecipientInfo_set0_keyCMS_RecipientInfo_set0_passwordCMS_RecipientInfo_set0_pkeyCMS_SD_ASN1_CTRLcms_set1_iascms_set1_keyidcms_set1_SignerIdentifierCMS_set_detachedCMS_signCMS_SIGNED_DATA_INITCMS_SIGNERINFO_CONTENT_SIGNCMS_SignerInfo_signCMS_SignerInfo_verifyCMS_SIGNERINFO_VERIFY_CERTCMS_SignerInfo_verify_contentCMS_sign_receiptCMS_streamCMS_uncompressCMS_verify.\crypto\cms\cms_sd.c.\crypto\cms\cms_dd.c.\crypto\cms\cms_env.c.\crypto\cms\cms_enc.c.\crypto\cms\cms_ess.c.\crypto\cms\cms_pwri.c.\crypto\cms\cms_kari.cCONF_dump_fpCONF_loadCONF_load_bioCONF_load_fpCONF_modules_loadCONF_parse_listDEF_LOADDEF_LOAD_BIOMODULE_INITMODULE_LOAD_DSOMODULE_RUNNCONF_dump_bioNCONF_dump_fpNCONF_get_numberNCONF_get_number_eNCONF_get_sectionNCONF_get_stringNCONF_loadNCONF_load_bioNCONF_load_fpNCONF_newSTR_COPYerror loading dsolist cannot be nullmissing close square bracketmissing equal signmissing finish functionmissing init functionmodule initialization errorno close braceno confno conf or environment variableno sectionno valueunable to create new sectionunknown module namevariable has no valueCONF part of OpenSSL 1.0.2k 26 Jan 2017.\crypto\conf\conf_lib.c name=group=ENV.\crypto\conf\conf_api.cvv == NULLCONF_def part of OpenSSL 1.0.2k 26 Jan 2017OpenSSL defaultWIN32.\crypto\conf\conf_def.cline [%s] %s=%s [[%s]] openssl_conf.\crypto\conf\conf_mod.cmodule=%-8d, retcode=OPENSSL_initOPENSSL_finish, path=OPENSSL_CONFopenssl.cnfTXT_DB part of OpenSSL 1.0.2k 26 Jan 2017.\crypto\txt_db\txt_db.cwrong number of fields on line %ld (looking for field %d, got %d, '%s' left) failure in sk_push OPENSSL_malloc failure LL\6PHR PR \RЗ tR R  K@H MhMHMR RP%R 0@ @LR 0  Rp RP% R1RP%RS1pNXN S8 O$S   DT``؃l8|`К   P ȇ@ ԇ ܇ P 8h,4@LT\P $lt`|К      0 PЈ@ ЈetypekvnoKRB5_ENCDATAnametypenamestringKRB5_PRINCNAMEtktvnorealmsnameencdataKRB5_TKTBODYKRB5_TICKETpvnomsgtypeapoptionsticketauthenticatorKRB5_APREQBODYKRB5_APREQctypechecksumKRB5_CHECKSUMktypekeyvalueKRB5_ENCKEYadtypeaddataKRB5_AUTHDATAavnocrealmcnamecksumcusecctimesubkeyseqnumauthorizationKRB5_AUTHENTBODYKRB5_AUTHENT.\crypto\pqueue\pqueue.citem %02x%02x%02x%02x%02x%02x%02x%02x `x0###F&?~o&L˸ڸbm OO!OBn 666lYQo޽ yyyooo_0~?mRRUR```'Gʼve5V+7q[ 0 `<l{{{555jti:SGݳ{!/^활...m\CKK1Kbz)!]WWAWTA*www777n{VמF##JJ5Jj OڞDXX}X%ʏ)))UR| ( P"ZOPi]kkk.\ٽνsg<]]i]4@P  >>>|( -gggxsS՗'''%NAAA2Xs, QS}}}ϔn7IG؎V0p#q|||ǑfffqSݦ{\K.GGGFEB!ʼn---uZXƿyc.8?#GZZuZ/6l333fccc?\ 98Iqqqύd}2II9Irp;Cن_1KHۨ[[q[*4 R)>&&&-L 222dJ}Yj<x3ws榷3:t¾|a'&އ444hHH=Hzu2$Tzzz􍐐z=d__a_> @=hhhghr4ʮ,A^u}TTMTΓv;""" D/dddc*sssHZ$@@@:]z @(H+V蛕3{KۖMa_===zȗf3[6ԃ+++EVnvvvႂ2d(lw6õ[wt)CjjjwPP]P EE ELW8000`+t???~UUIUǢyYeeeejҺhi///e^J'N睎_޾`pl8.FMM)MRdr9vuuu0 6$ @yKcYх8p6~|c>bbb7Uw:)2Mb1R:b3f%%%5JYYyY *Trrr999rLL-LZa^^e^;xxx888p匌 cƲA WCM١aaa/NE{B!!!B4J%xfсDU" NN%NJkQsf `<<|j5@ ޹goL_&,,,}XQkָk\ӌnnnW97n VVEVDD DI^ߞ!7O***MTgֻmk #F⟇SSQSWܮr , X'SN'lllG+111bttt FFF CL &E<PD([BߺXN,:::tiiio $ H-Appp׶Tqogη;~.ۅBBB*WhZ-,IU(((]Pu\\m\1?k"D#臸O6yoR` {5.KWw7JX) k]>g'A}|fG-Z3d2i_TS_RESPDEF_SERIAL_CBDEF_TIME_CBESS_ADD_SIGNING_CERTESS_CERT_ID_NEW_INITESS_SIGNING_CERT_NEW_INITINT_TS_RESP_VERIFY_TOKENPKCS7_to_TS_TST_INFOTS_ACCURACY_set_microsTS_ACCURACY_set_millisTS_ACCURACY_set_secondsTS_CHECK_IMPRINTSTS_CHECK_NONCESTS_CHECK_POLICYTS_CHECK_SIGNING_CERTSTS_CHECK_STATUS_INFOTS_COMPUTE_IMPRINTTS_CONF_set_default_engineTS_GET_STATUS_TEXTTS_MSG_IMPRINT_set_algoTS_REQ_set_msg_imprintTS_REQ_set_nonceTS_REQ_set_policy_idTS_RESP_create_responseTS_RESP_CREATE_TST_INFOTS_RESP_CTX_add_failure_infoTS_RESP_CTX_add_mdTS_RESP_CTX_add_policyTS_RESP_CTX_newTS_RESP_CTX_set_accuracyTS_RESP_CTX_set_certsTS_RESP_CTX_set_def_policyTS_RESP_CTX_set_signer_certTS_RESP_CTX_set_status_infoTS_RESP_GET_POLICYTS_RESP_SET_GENTIME_WITH_PRECISIONTS_RESP_set_status_infoTS_RESP_set_tst_infoTS_RESP_SIGNTS_RESP_verify_signatureTS_RESP_verify_tokenTS_TST_INFO_set_accuracyTS_TST_INFO_set_msg_imprintTS_TST_INFO_set_nonceTS_TST_INFO_set_policy_idTS_TST_INFO_set_serialTS_TST_INFO_set_timeTS_TST_INFO_set_tsaTS_VERIFYTS_VERIFY_CERTTS_VERIFY_CTX_newbad pkcs7 typebad typecould not set enginecould not set timed2i ts resp int faileddetached contentess add signing cert erroress signing certificate errorinvalid signer certificate purposemessage imprint mismatchnonce mismatchnonce not returnedno time stamp tokenpkcs7 add signed attr errorpkcs7 to ts tst info failedpolicy mismatchresponse setup errorthere must be one signertime syscall errortoken not presenttoken presenttsa name mismatchtsa untrustedtst info setup errorts datasignunacceptable policyunsupported md algorithmunsupported version.\crypto\ts\ts_req_utils.cVersion: %d Policy OID: unspecified Nonce: Certificate required: %s .\crypto\ts\ts_rsp_utils.cGranted.Granted with modifications.Rejected.Waiting.Revocation warning.Revoked.unrecognized or unsupported algorithm identifiertransaction not permitted or supportedthe data submitted has the wrong formatthe TSA's time source is not availablethe requested TSA policy is not supported by the TSAthe requested extension is not supported by the TSAthe additional information requested could not be understood or is not availablethe request cannot be handled due to system failureStatus info: TST info: Not included. Status: out of bounds Status description: Failure info: Serial number: Time stamp: Accuracy: Ordering: %s TSA: seconds, millis, micros.\crypto\ts\ts_rsp_sign.cError during serial number generation.Time is not available.Unsupported extension.Bad request format or system error.Error during response generation.Bad request version.Message digest algorithm is not supported.Superfluous message digest parameter.Bad message digest.Requested policy is not supported.Error during TSTInfo generation.Error during signature generation.%04d%02d%02d%02d%02d%02d.%06ldgrantedgrantedWithModsrejectionwaitingrevocationWarningrevocationNotificationbadAlgbadRequestbadDataFormattimeNotAvailableunacceptedPolicyunacceptedExtensionaddInfoNotAvailablesystemFailure.\crypto\ts\ts_rsp_verify.cunknown code, failure codes: , status text: status code: .\crypto\ts\ts_verify_ctx.cctx != NULLreq != NULLExtensions: %4sHash Algorithm: %s Message data: unable to load certificate: %s unable to load certificates: %s unable to load private key: %s variable lookup failed for %s::%s invalid variable value for %s::%s default_tsatsacrypto_devicebuiltinchil.\crypto\ts\ts_conf.cengine:signer_certsigner_keydefault_policyother_policiesdigestsaccuracysecsmillisecsmicrosecsclock_precision_digitsorderingtsa_nameess_cert_id_chainp@   Ȥ hP Фi  ؤ ` p 0 4 4P%@xLآ \ h@ t| P  h@\    ̠t i $  (statustextfailure_infoTS_STATUS_INFOstatus_infotokenTS_RESPESS_ISSUER_SERIALissuer_serialESS_CERT_IDcert_idspolicy_infoESS_SIGNING_CERThash_algohashed_msgTS_MSG_IMPRINTmsg_imprintpolicy_idnoncecert_reqTS_REQsecondsmillismicrosTS_ACCURACYtimeTS_TST_INFO.\crypto\ts\ts_asn1.c8192614440963072204815361024.\crypto\srp\srp_lib.c.\crypto\srp\srp_vfy.c pH RSDSX{,mE;D:\CFILES\Projects\WinSSL\openssl-1.0.2k\out32dll\libeay32.pdbLLL       J XHcاp+**H I @0 `   ^P @ _ `p  p @  @ Pq"(,l#0\xPS@9:$%%sxyP&P( p|&P(0M :P@@AE(@\p))p*ІpMP:A4`5E0+0b|||EFp}0,Ъ`@@zpPPP`} ``56@ppЭ`PPzЦ`p @m m n n o   0 P P @     P  `P + 0PP`@0@ /p!0l `h b  P`pP` `PpP    `    e f`lmPnp0pqpss@gpghj`VVP*`*p**`W'( (22223 303@30(0[deWW - -0-@-b@bP_`_p__p: "@c0dHF=G`vPsstPPQ0Q  `   P@@ @k @ 0A P4 5 P7 3 4 @4 08 8 @> G `H @J K @L r \ \ ] Ps ^ i ^ _ L s @_ _ ` u Pa 0i b @b R pb b 0c d Px d `i e @e @S e f `f Pg Py g i @h ph 0 P `   @ P p Й  pPP`@0 @0MpT0W@W` 0@ YYP`[Pab@c0`paaPIpaJЊ 0 @ ` %0&11P?p?JJ` KK  PL` Lp @` ` @ OPP@ `  ! 0 P @ @8`8` @8P  `  0  8 8 @ Ж 8p a8 0 @ (@()*///0 00 W`\P p  p ` ` L M. /0 p P p  ''p P  ??0 @ P ` p @  p Н p  0  @@pch   p P  0 P PP  @@0{p|`P pPp`P @ @  `@Q`Q0P p К  0 P p   UR `@'10ANN `::P0-@0`0 N0/' 0 ``P`pЭ  Я  Џ н p P p  QQ Л  0 p М P p V@V` 0 PA@'1 BNO  ::P.00 0 0OP/'P p P000@0@`Pp0PPp  ` P p p к P 0 `ea g  P ^ d 0 p "`  0_:v z|pypPm0) pP`abb b 0  p0P01P25lGaJ @ P ` p ` в 00 10YUUb`cf`hdePghP1pa@  @p &0&+ Р  " # # % @ P@ p0  }@_@U` 0     ` 0`1\P_@/ `/ h Q R] ` c g `@ @ @3 A 4 5 B B F G 0bK PL L 0M M `P P p/ 0RP/ PR0`@`l pl @k j i `i l m o   ^ d pjpn`nlz | Є | _ A c _ @ 0 1 p@e@ ' ' ( P&   P P p @  @ ` @ 0  p P  H 0 p* ( P* `( `1 00 @1 0  `( P P  Њ  P@0pPpЪ/ + `/ * / * @/ * Љ 0 p 7 p p P А Џ  Б 0 0 P  @7 7 8 7 7 Pc @p0` %p С ` P 0 M 5 G `A ДpL `` H m p `l   `n k  0 l l 0l m pP 0  + Pn l p## o p @YUrp `` Ц   @4P ` pp`0P@  P2 p @ 0pw А@0 P@ P i Pd P B F D opP?& P` j h p 0f @r  0p.` ^ @P-jp\  Pr. 0 a  @l C` @ 0 P ] 0m `r?   & ХD pF@ oЧj ` ,%  ` + P 0, &`@ r j  PD a pC _ ` P P d l c жq`@  l  0Fg  0npAq p C ` @` 0   % "P#0m 0n n 00q q Ыpr o @r E T @ @ @  P @((  0 ` @ `@6ЩP@    h pe "0 п0  @@PP P@s s 0t r q l ps q pr p `l q p @`\0 ,  P  P p% `R T T PP` P `  `Pp@ m`  @ F=<>=b P `\]p P p 0 @E(P@P ' 90& *    P p   ' &p  p) # 0 0 `  & 0 @,  0  @' & + , @ * 0 % p `  p / - M  ={I M pC ' 6 @PM  cPR + `? * ? 3P_  Q I @LP   pl pP / <S p 0pz U 0DpQ  U @`) P  @ p O @l i  Pw pN Pm J /pk p + L E @ A H P@ `. @xP p 2 0 O @?  P ` S / & PH0Q Q v M P U `J `   8  ! 00 @& (  @ N Pi 0? . ) 0P 9 V K j@L 0 P & 7 p P  @:0N z q iL & pO S K k P% i R P S ` `<@0J C 1R @ ` PO p L p N O 0 yP/ s p * - PO M  Y`P' 3 "  0E pM @B 0@ pp0@5@px0 b 0L PS J  PK J  0Ri  Pp& I @>0 Pl N / 0K i Ш0 pT  0K S 'EC3 ` @ `0 I P 2  w Њ p/0 pR  @ R psRL 50T 0M  r `T @ N W  pL `8@ 0З 0i K mpS  @00 PP  @ ` An P V  ` e T J @Q ) l AJ  I @P* ' R c - pC pK pPT @ 08@ R j 0 0e `F" 6 0  F  PI `>`L 0O U ` pp @5 T pd K I N @" g W @y@T @ Ћ  q 3@ 9 0l P0  0I :R @P 0 I (  K i Q - . > Q У @hPN 0 0L Pk . @ 02 pI 6`K `0 >@Lp PJ p, @ p 0x `xP? P 0 0U  P s К O @?  d J S  p Q  H P p  ptL  > Pf;p P H  P н L h B`I @i ` 0 m K Т J ` T 80 K `Q @1P% /P x R PM PM J Q Ќ q ` S  `l 0R 0sp3L L E ` @V # ж1 ` Ў 0 @Љ @ % &P ` 0: `p  0" @ SRPPSpQ R  2ЬЦ02@W p 0'!P`PP@R0<pS2 R(0S'p 2 < @y`  @ P p P`dpd@dPdz@w i9p$0- p(  P @ P $`  `* prP$DE@ 0m` 20U % 0 mP- `o* жP  9 І`* 0` ` P`` ) ) * p`P 0p* f + p:0k m ' `+ Ъ?  r`#  f @ @ P #`$p@+ hf   0=* P9@жi ` c0pP!@ p` - ` * $ &mP<PC`!P;) p "`kp P( de@p, P 9`` @&0CP' l 9@/ p 9( % c P( 0} p3 =`] 0P   3p$d] q@0P1 .F`c * #  e @ @:( `' @ 8`( 0i, k0 Pr@ c p\ `C, O@J 0 9j @mPF 0 * $ Р `P $e`0` ж`0 ФP( e, P ` 0V @ j`j  0jp  ;p Pj 0* 0+ 0lPi Р @) `7$ 6 6@767 76% p PЎ`899 909@9P9p9`999999999:@W & ,@(@(%  `"&0P 0&,  P  p@ +` P$= Z@=p=Y<ZP2Z0T Y  ` ` `%%@&0  `' H 'pR  `        p: ` p$ @ < =  p * @#  Y   ! ` @ L  P+   + 0 p  p A @ @- R @ - @ @ - ` =  ;   @> S S  `< S p     P P p= Z `@  :  ` Q & > "  ! 0:@@"7`<@ 0 `q0 P P ` 2  p ` `Ps 3 p 0  pj ` `3 @ 1 P  ` t@ P { p@0 @ % R@ o0 p5  p p` &p% % * ` Х @ж`  P k k  l@ `  @ )  J&`pRP qj z @ 0V P @0  `0 p 0 P P  %    0 4  1 Џ { 0 n 5 +P2 &p L0  P  0 P 0 p 0 @  0L &P 0 `*    0 @ - x0+ 9p{ P( @ ` p U{ b ) 0 p dнp p 1 p J@ R 0 u 0 P pKP 0  3 P &&p 5 `L&@  0  @ 6 x жL  p , 0  Pk Rp1 Up  P @  ж V` pP  P ` @ P  00 ж % p P @ pt `  2 0 0 R pt P  @6 @p P` i Щ2 j P   @ `0s` `    ` `% P `Y ^ @ P  p !HE PP@ATDPI=pRQ99956 ` 0   `  P @  P `R`QS0 wQ`V TPQSPVzPR&SQP PpCpbpk0m[@t Kb0NPd@pH PsOVs`J0bs@ih@aVpY0^p`P- Z  0Z 0 Ё i@   @p P,b -e ,0 ) p ( R 0S S ?@( ( S  @ PZ P L0; Z Z  a @^ ] Txwp  d 9`  `f d RP+0c p-`3Pж0f Q` 6f    e ; pc n`  j@e `% % `B Pp* !P% @Pж$ :@BHHHI'I7IJI[IlIIIIIIIIII JJ&JUVUkU~UUUUUUUV/Vo^ozoooooop$pBp`ppppppqqq4qPqhqvqqqqqqqqrrr/r;rPrjrrrrrrrrrss-sEsTsbsrsssssssst3tJtftztttttttu7uUunuuuuuuvv$v1vEvWv`vjv|vvvvvvvvww5wOwfw}wwwwwwwwx$x6xMxaxqxxxxxxxx yy6ySyhyyyyyyy z!z=zSzozzzzzzz {{;{Q{m{{{{{{{||.|G|S|g|z||||||}}*}@}T}f}}}}}~~9~Q~h~}~~~~~4Mf| ,Ffǀ׀ 4Qt́(HdՂ 7Mc{ʃۃ 0:GXh}ք #3ARdtÅՅ 2DUbmvĆۆ%;J^esŇԇ"3BRgzш݈$5Mhʼn҉ )4?M]pŠъ%.EVn}ȋߋ!0=Nfwƌ،4J`|͍ލ0I[lwÎێ-@Udʏ $:Riސ4RerՑ3Jmƒڒ0EVqʓד&7H_uŔҔ -;dЕ%2?Rdwؖ%Mf|ė֗&5NZjȘ٘ 4G\uә0I\oĚҚ<L\vЛ'Kcz̜">Icvʝޝ #<Voڞ9Qj˟ٟ (9LazҠ5Psǡڡ'@aբ-D\sգ"5IYj}ʤݤ '5J_uȥޥ  5J`wͦ %<Rg{է "6Om}Ĩܨ !4KXk{ɩߩ .H^uͪ*DWjի #9KduƬ߬!4CUfv˭ۭ .=Ocv®Ү':L_vίܯ'<IZfrŰհ(>Oa{ֱ3Qk²ܲ !4G^qƳݳ #=VfwôԴ$9Rcyε2KcǶڶ*D[rַ !;Tuϸ%;TewƹԹ(@]kxǺ׺ .ARbrûӻ(8HYiӼ$5EP]hs̽ !9OdyҾ (6BN[ivѿ'9IYerz (1@O[iu&.7BMXcq&8Tl|&4BU`jw.ARdz .?P_o !*8CGQZhsx &1ATfw 3Lex -?N[iv &2:EX`t*A[o0CSds0AZn0J_w,<M`y+=Pct*?Tg{6Nm'<Riy%7J^m$8HWm| )AUev 1ERdv 1?N[it%3ETgu!.<Tbkx )8Gdt%2CYt':[o0F\ft  AQa{ !0C\o7Ph  >`,C`w)<Q`t.DTey'?Xk~-BZl 0AWj*>Pc/DVfw2Ji3N_{(3FZv+<Xgr+>LZjz 3Kax0@Q]fq~0EQaq"3EVgw/=GPau2Lk%Dc|&6EXa| *7KX\alv,3@L]ku~ +?S^ix,?QXgt+<Sj /@Ug2E]t #:KZlw%5L]r:Pcz"=Zt$1I[p|(;Th8Rj$<Lb{  8Nat  % < P c x          - A V ^ t         ! / E [ n        $ 9 Z o             & 0 D T c t       "7Obr !4M]| 3E[p ,:IYk-Has*=LYgz&:HXes+BUap}/=O]m/ATp #4EVk|$=Xk&=N\r!.<N^q-;Rcs7Nh8Rj 7Ph , F [ i {       !!7!S!t!!!!!!""!"."E"Y"y"""""#)#D#]#}#####$'$:$Y$r$$$$$$ %%%>%Y%q%%%%%%&&'&<&V&p&&&&&&&'&'?'N'a'q'''''''((('(E(b(~((((()")>)Z)t)))))) *+*G*g******+4+F+^+u++++++++,,!,/,A,S,j,},,,,,,,,,-$-.-F-Z-j-y-----.#.4.J.W.k......../)/?/O/^/y///////00.0A0J0\0n000001141S1w1111111122)2<2L2b2x222222223+393J3[3l3x33333344+4;4R4i44444444 55.5>5V5p5555556%6F6g6~666666 7!7<7X7r777777 8)8?8\8r8888889929C9S9d9r9999999999:::+:7:P:c:|::::::::::;;(;5;I;Z;j;v;;;;;;; <<-<;<K<a<t<<<<<<<<==,=@=W=f=z=======> >4>A>O>c>s>>>>>>>>??$?2?@?S?d?u????????@@2@C@U@l@{@@@@@@@@ AA-AHA[AmAAAAAAAAABB)B;BKB]BrBBBBBBBBBCC(C7CECOC`CrCCCCCCC DD&D>DUDmDDDDDDDDE&E1E@ENE]EpEEEEEEEEFF'F:FIF\FnFxFFFFFFFFFGG'G:GJG^GqGGGGGGGGGGHH+H;HNHbHpHHHHHHHHHI II&I=ISIjIIIIIIIJJ'J7JGJSJfJxJJJJJJJKK0KCKTKbKrKKKKKKKK LL0LALULlLLLLLLLLM"M5MIMVMdMxMMMMMMMMNN-N9NGNUNhNyNNNNNNNNOO0OGOXOjOOOOOOOOOP!P1PBP]PpPPPPPPPPP QQ+Q>QPQ`QrQQQQQQQQQRR*R=RLRZRdRuRRRRRRRSS/S=SRS_S{SSSSSST0TKTYTfT|TTTTTTTTUU)U7UIU_UtUUUUUUUUVVV+V;VNVeV{VVVVVVVVVWW'W0W?WOWbWoWWWWWWWWW XX+X9XIXVXhXyXXXXXXXXXYY,YBYRYfYwYYYYYYYYZZZ(Z5Z=ZGZNZ\ZnZZZZZZZZZZZ[[[([8[C[O[[[f[s[[[[[[[[ \\\&\1\9\C\P\W\c\j\q\}\\\\\\\\\\\\] b   ! XY #= U<$ E   s" M   A>a RwM y k < ; QEg{ b'  , 3~ x*W W } \  ^   ` K34[56   7+ E0 q &  ! 3 D > ^ )  _ ?  >O J"#z + $% p   & @ i '()*+,-a 2$iLW3 q56) y p 789:;<>?@ABD=%&FGHIJK 49MN8N O PQRYS SWQUTUVWXYZ [\^_ac>d'efghijkM l x  R mnn f [    % DX D z Toopq ighj rs^uwv! xyz{B|}m~} , {tF  j  ` l/ N < k  t " u8-  2          {0ra}gsxwyz3nt~uct1o4}m2q|pfhsdvxjkHGwxyz_y z { }  u n  x p v r | m t w  4 qoOD?/>('# &+ ll  "*,-.)%s q p r >  n& i oA$! qr mn k o  ps       ! '_b()*+~a{LRPc]^`eZ[q  X r   v\5467Nffb_d  h 9 * b=   q ; m  ur|v#~ B o VW (J W yQ| g  + * L< 4z n  P L  d  ~5 D     ( ]  ; %I N - e G r P aY E s p K\ O 7 ) #  k  2 Ri   2 )$ g { OKv B n S C  S a : M   ' ^ c 6+(9H @ F 8 `     0 g dZ e =I L -; | H     s :  d `o x Y b  8 d h p  7 } 8( e 3 h   r \9  @ j|&3c &/_ 20:^ :L< $;=p!) b _  \ w $ / m c M   l E 7*1Y q)T+!%&ZMpBy(QuUi Q !}J7QJh -'#{.CBVRO8 n B [u.V]tk_& IMn:y 'yT !#$n z S  R  -  y /   n%&'()* + ,-./ 0 123 456789:;<=>?@ BCNDEFGHIIMKFJKL F   2! 5 D mt    2N A j  0 ~ T  I    S Q ?  / RSTUVWXY    ZP [lj\k ]hi^_ LOz PQRS`bcdeqfghijkMlm  X =  U   \ + * W 6 ] H u ] " * f _ P C < E J   X 8 Pdhcimlm   3 d & ; 1  . 1 6 o V  [  ' 2 P h V R } l   y U ( , 9   v , U [ % RSk C H  s B   CA?  { y  w unopqrstuvwxyz {|}~b/!| 'O   bM4:^t.owqQ _ \uD9g    7  6  o  Z F  \ N { # *0G " x '    /  A "5[kq01rfsaetuviW 2j4h`$ " 'M  :  @ lZ  Xa pv   YY  p;:6 Le76Zo      5   EGCJDHL . E O T 0Z cl^g@]X Y 3l 2/4 .,*0?GaxSz)c~Xs]:hl1PjClps_rY)Unf6F=m AW1+i->kAz%7:h=Er@Z<v%^<  H K 5  G  ( X 5  . K ! -  s L c u  C e  T L `  ; nm4f,` gB o m } nh r   U] V W   c     V aV ";b .    7. Nj !"#$%&'()*+,-./0123456r 789:yw;<=>?@ABCDEF: GHI~ | JK L MNOPQv RSt)Fz8A TB UXV 9 VRWb TOX> YZ [P\]^_5`a bcfdefghitQ j/ k lm e K n  0    opqP5rst[u # `  = v wCv  1 Jl W]^UT S F \ U  ![xzST XY_Z {"V| }~d e [c O\j "   i * w 4 G  N u<8  eZ  ? ] % Z w   i p  3  "#$%& V I  w. Bs J G f 4 1 Kg [t w { C xs =;}iN?A ,8  X` z Rq  t |  T  S 2 O J W & 8 m /zv v~#  g 9-1aIOd~*g|`BqT% ./0u x 1D2 45|678dH9df : ;<:< go=J>@>?@A9B"  { F t[ F w $ k 7 @  CDGE  D Q y I  xt FGHIJK LMNOPQz{}!  RSTUVWe =@,0$oX;#XY]ZS9[\]^_`Qabcdefghijklm, 6nopqrstuvwxyz{|}~' $ } wA  >c    j uvtLIBEAY32.dllACCESS_DESCRIPTION_freeACCESS_DESCRIPTION_itACCESS_DESCRIPTION_newAES_bi_ige_encryptAES_cbc_encryptAES_cfb128_encryptAES_cfb1_encryptAES_cfb8_encryptAES_ctr128_encryptAES_decryptAES_ecb_encryptAES_encryptAES_ige_encryptAES_ofb128_encryptAES_optionsAES_set_decrypt_keyAES_set_encrypt_keyAES_unwrap_keyAES_wrap_keyASN1_ANY_itASN1_BIT_STRING_checkASN1_BIT_STRING_freeASN1_BIT_STRING_get_bitASN1_BIT_STRING_itASN1_BIT_STRING_name_printASN1_BIT_STRING_newASN1_BIT_STRING_num_ascASN1_BIT_STRING_setASN1_BIT_STRING_set_ascASN1_BIT_STRING_set_bitASN1_BMPSTRING_freeASN1_BMPSTRING_itASN1_BMPSTRING_newASN1_BOOLEAN_itASN1_ENUMERATED_freeASN1_ENUMERATED_getASN1_ENUMERATED_itASN1_ENUMERATED_newASN1_ENUMERATED_setASN1_ENUMERATED_to_BNASN1_FBOOLEAN_itASN1_GENERALIZEDTIME_adjASN1_GENERALIZEDTIME_checkASN1_GENERALIZEDTIME_freeASN1_GENERALIZEDTIME_itASN1_GENERALIZEDTIME_newASN1_GENERALIZEDTIME_printASN1_GENERALIZEDTIME_setASN1_GENERALIZEDTIME_set_stringASN1_GENERALSTRING_freeASN1_GENERALSTRING_itASN1_GENERALSTRING_newASN1_IA5STRING_freeASN1_IA5STRING_itASN1_IA5STRING_newASN1_INTEGER_cmpASN1_INTEGER_dupASN1_INTEGER_freeASN1_INTEGER_getASN1_INTEGER_itASN1_INTEGER_newASN1_INTEGER_setASN1_INTEGER_to_BNASN1_NULL_freeASN1_NULL_itASN1_NULL_newASN1_OBJECT_createASN1_OBJECT_freeASN1_OBJECT_itASN1_OBJECT_newASN1_OCTET_STRING_NDEF_itASN1_OCTET_STRING_cmpASN1_OCTET_STRING_dupASN1_OCTET_STRING_freeASN1_OCTET_STRING_itASN1_OCTET_STRING_newASN1_OCTET_STRING_setASN1_PCTX_freeASN1_PCTX_get_cert_flagsASN1_PCTX_get_flagsASN1_PCTX_get_nm_flagsASN1_PCTX_get_oid_flagsASN1_PCTX_get_str_flagsASN1_PCTX_newASN1_PCTX_set_cert_flagsASN1_PCTX_set_flagsASN1_PCTX_set_nm_flagsASN1_PCTX_set_oid_flagsASN1_PCTX_set_str_flagsASN1_PRINTABLESTRING_freeASN1_PRINTABLESTRING_itASN1_PRINTABLESTRING_newASN1_PRINTABLE_freeASN1_PRINTABLE_itASN1_PRINTABLE_newASN1_PRINTABLE_typeASN1_SEQUENCE_ANY_itASN1_SEQUENCE_itASN1_SET_ANY_itASN1_STRING_TABLE_addASN1_STRING_TABLE_cleanupASN1_STRING_TABLE_getASN1_STRING_clear_freeASN1_STRING_cmpASN1_STRING_copyASN1_STRING_dataASN1_STRING_dupASN1_STRING_freeASN1_STRING_get_default_maskASN1_STRING_lengthASN1_STRING_length_setASN1_STRING_newASN1_STRING_printASN1_STRING_print_exASN1_STRING_print_ex_fpASN1_STRING_setASN1_STRING_set0ASN1_STRING_set_by_NIDASN1_STRING_set_default_maskASN1_STRING_set_default_mask_ascASN1_STRING_to_UTF8ASN1_STRING_typeASN1_STRING_type_newASN1_T61STRING_freeASN1_T61STRING_itASN1_T61STRING_newASN1_TBOOLEAN_itASN1_TIME_adjASN1_TIME_checkASN1_TIME_diffASN1_TIME_freeASN1_TIME_itASN1_TIME_newASN1_TIME_printASN1_TIME_setASN1_TIME_set_stringASN1_TIME_to_generalizedtimeASN1_TYPE_cmpASN1_TYPE_freeASN1_TYPE_getASN1_TYPE_get_int_octetstringASN1_TYPE_get_octetstringASN1_TYPE_newASN1_TYPE_setASN1_TYPE_set1ASN1_TYPE_set_int_octetstringASN1_TYPE_set_octetstringASN1_UNIVERSALSTRING_freeASN1_UNIVERSALSTRING_itASN1_UNIVERSALSTRING_newASN1_UNIVERSALSTRING_to_stringASN1_UTCTIME_adjASN1_UTCTIME_checkASN1_UTCTIME_cmp_time_tASN1_UTCTIME_freeASN1_UTCTIME_itASN1_UTCTIME_newASN1_UTCTIME_printASN1_UTCTIME_setASN1_UTCTIME_set_stringASN1_UTF8STRING_freeASN1_UTF8STRING_itASN1_UTF8STRING_newASN1_VISIBLESTRING_freeASN1_VISIBLESTRING_itASN1_VISIBLESTRING_newASN1_add_oid_moduleASN1_bn_printASN1_check_infinite_endASN1_const_check_infinite_endASN1_d2i_bioASN1_d2i_fpASN1_digestASN1_dupASN1_generate_nconfASN1_generate_v3ASN1_get_objectASN1_i2d_bioASN1_i2d_fpASN1_item_d2iASN1_item_d2i_bioASN1_item_d2i_fpASN1_item_digestASN1_item_dupASN1_item_ex_d2iASN1_item_ex_freeASN1_item_ex_i2dASN1_item_ex_newASN1_item_freeASN1_item_i2dASN1_item_i2d_bioASN1_item_i2d_fpASN1_item_ndef_i2dASN1_item_newASN1_item_packASN1_item_printASN1_item_signASN1_item_sign_ctxASN1_item_unpackASN1_item_verifyASN1_mbstring_copyASN1_mbstring_ncopyASN1_object_sizeASN1_pack_stringASN1_parseASN1_parse_dumpASN1_primitive_freeASN1_primitive_newASN1_put_eocASN1_put_objectASN1_seq_packASN1_seq_unpackASN1_signASN1_tag2bitASN1_tag2strASN1_template_d2iASN1_template_freeASN1_template_i2dASN1_template_newASN1_unpack_stringASN1_verifyAUTHORITY_INFO_ACCESS_freeAUTHORITY_INFO_ACCESS_itAUTHORITY_INFO_ACCESS_newAUTHORITY_KEYID_freeAUTHORITY_KEYID_itAUTHORITY_KEYID_newBASIC_CONSTRAINTS_freeBASIC_CONSTRAINTS_itBASIC_CONSTRAINTS_newBF_cbc_encryptBF_cfb64_encryptBF_decryptBF_ecb_encryptBF_encryptBF_ofb64_encryptBF_optionsBF_set_keyBIGNUM_itBIO_acceptBIO_asn1_get_prefixBIO_asn1_get_suffixBIO_asn1_set_prefixBIO_asn1_set_suffixBIO_callback_ctrlBIO_clear_flagsBIO_copy_next_retryBIO_ctrlBIO_ctrl_get_read_requestBIO_ctrl_get_write_guaranteeBIO_ctrl_pendingBIO_ctrl_reset_read_requestBIO_ctrl_wpendingBIO_debug_callbackBIO_dgram_non_fatal_errorBIO_dumpBIO_dump_cbBIO_dump_fpBIO_dump_indentBIO_dump_indent_cbBIO_dump_indent_fpBIO_dup_chainBIO_f_asn1BIO_f_base64BIO_f_bufferBIO_f_cipherBIO_f_mdBIO_f_nbio_testBIO_f_nullBIO_f_reliableBIO_fd_non_fatal_errorBIO_fd_should_retryBIO_find_typeBIO_freeBIO_free_allBIO_get_accept_socketBIO_get_callbackBIO_get_callback_argBIO_get_ex_dataBIO_get_ex_new_indexBIO_get_host_ipBIO_get_portBIO_get_retry_BIOBIO_get_retry_reasonBIO_gethostbynameBIO_getsBIO_hex_stringBIO_indentBIO_int_ctrlBIO_method_nameBIO_method_typeBIO_newBIO_new_CMSBIO_new_NDEFBIO_new_PKCS7BIO_new_acceptBIO_new_bio_pairBIO_new_connectBIO_new_dgramBIO_new_fdBIO_new_fileBIO_new_fpBIO_new_mem_bufBIO_new_socketBIO_nextBIO_nreadBIO_nread0BIO_number_readBIO_number_writtenBIO_nwriteBIO_nwrite0BIO_popBIO_printfBIO_ptr_ctrlBIO_pushBIO_putsBIO_readBIO_s_acceptBIO_s_bioBIO_s_connectBIO_s_datagramBIO_s_fdBIO_s_fileBIO_s_memBIO_s_nullBIO_s_socketBIO_setBIO_set_callbackBIO_set_callback_argBIO_set_cipherBIO_set_ex_dataBIO_set_flagsBIO_set_tcp_ndelayBIO_snprintfBIO_sock_cleanupBIO_sock_errorBIO_sock_initBIO_sock_non_fatal_errorBIO_sock_should_retryBIO_socket_ioctlBIO_socket_nbioBIO_test_flagsBIO_vfreeBIO_vprintfBIO_vsnprintfBIO_writeBN_BLINDING_convertBN_BLINDING_convert_exBN_BLINDING_create_paramBN_BLINDING_freeBN_BLINDING_get_flagsBN_BLINDING_get_thread_idBN_BLINDING_invertBN_BLINDING_invert_exBN_BLINDING_newBN_BLINDING_set_flagsBN_BLINDING_set_thread_idBN_BLINDING_thread_idBN_BLINDING_updateBN_CTX_endBN_CTX_freeBN_CTX_getBN_CTX_initBN_CTX_newBN_CTX_startBN_GENCB_callBN_GF2m_addBN_GF2m_arr2polyBN_GF2m_modBN_GF2m_mod_arrBN_GF2m_mod_divBN_GF2m_mod_div_arrBN_GF2m_mod_expBN_GF2m_mod_exp_arrBN_GF2m_mod_invBN_GF2m_mod_inv_arrBN_GF2m_mod_mulBN_GF2m_mod_mul_arrBN_GF2m_mod_solve_quadBN_GF2m_mod_solve_quad_arrBN_GF2m_mod_sqrBN_GF2m_mod_sqr_arrBN_GF2m_mod_sqrtBN_GF2m_mod_sqrt_arrBN_GF2m_poly2arrBN_MONT_CTX_copyBN_MONT_CTX_freeBN_MONT_CTX_initBN_MONT_CTX_newBN_MONT_CTX_setBN_MONT_CTX_set_lockedBN_RECP_CTX_freeBN_RECP_CTX_initBN_RECP_CTX_newBN_RECP_CTX_setBN_X931_derive_prime_exBN_X931_generate_XpqBN_X931_generate_prime_exBN_addBN_add_wordBN_asc2bnBN_bin2bnBN_bn2binBN_bn2decBN_bn2hexBN_bn2mpiBN_bntest_randBN_clearBN_clear_bitBN_clear_freeBN_cmpBN_consttime_swapBN_copyBN_dec2bnBN_divBN_div_recpBN_div_wordBN_dupBN_expBN_freeBN_from_montgomeryBN_gcdBN_generate_primeBN_generate_prime_exBN_get0_nist_prime_192BN_get0_nist_prime_224BN_get0_nist_prime_256BN_get0_nist_prime_384BN_get0_nist_prime_521BN_get_paramsBN_get_wordBN_hex2bnBN_initBN_is_bit_setBN_is_primeBN_is_prime_exBN_is_prime_fasttestBN_is_prime_fasttest_exBN_kroneckerBN_lshiftBN_lshift1BN_mask_bitsBN_mod_addBN_mod_add_quickBN_mod_expBN_mod_exp2_montBN_mod_exp_montBN_mod_exp_mont_consttimeBN_mod_exp_mont_wordBN_mod_exp_recpBN_mod_exp_simpleBN_mod_inverseBN_mod_lshiftBN_mod_lshift1BN_mod_lshift1_quickBN_mod_lshift_quickBN_mod_mulBN_mod_mul_montgomeryBN_mod_mul_reciprocalBN_mod_sqrBN_mod_sqrtBN_mod_subBN_mod_sub_quickBN_mod_wordBN_mpi2bnBN_mulBN_mul_wordBN_newBN_nist_mod_192BN_nist_mod_224BN_nist_mod_256BN_nist_mod_384BN_nist_mod_521BN_nnmodBN_num_bitsBN_num_bits_wordBN_optionsBN_printBN_print_fpBN_pseudo_randBN_pseudo_rand_rangeBN_randBN_rand_rangeBN_reciprocalBN_rshiftBN_rshift1BN_set_bitBN_set_negativeBN_set_paramsBN_set_wordBN_sqrBN_subBN_sub_wordBN_swapBN_to_ASN1_ENUMERATEDBN_to_ASN1_INTEGERBN_uaddBN_ucmpBN_usubBN_value_oneBUF_MEM_freeBUF_MEM_growBUF_MEM_grow_cleanBUF_MEM_newBUF_memdupBUF_reverseBUF_strdupBUF_strlcatBUF_strlcpyBUF_strndupBUF_strnlenCAST_cbc_encryptCAST_cfb64_encryptCAST_decryptCAST_ecb_encryptCAST_encryptCAST_ofb64_encryptCAST_set_keyCBIGNUM_itCERTIFICATEPOLICIES_freeCERTIFICATEPOLICIES_itCERTIFICATEPOLICIES_newCMAC_CTX_cleanupCMAC_CTX_copyCMAC_CTX_freeCMAC_CTX_get0_cipher_ctxCMAC_CTX_newCMAC_FinalCMAC_InitCMAC_UpdateCMAC_resumeCMS_ContentInfo_freeCMS_ContentInfo_itCMS_ContentInfo_newCMS_ContentInfo_print_ctxCMS_EncryptedData_decryptCMS_EncryptedData_encryptCMS_EncryptedData_set1_keyCMS_EnvelopedData_createCMS_ReceiptRequest_create0CMS_ReceiptRequest_freeCMS_ReceiptRequest_get0_valuesCMS_ReceiptRequest_itCMS_ReceiptRequest_newCMS_RecipientEncryptedKey_cert_cmpCMS_RecipientEncryptedKey_get0_idCMS_RecipientInfo_decryptCMS_RecipientInfo_encryptCMS_RecipientInfo_get0_pkey_ctxCMS_RecipientInfo_kari_decryptCMS_RecipientInfo_kari_get0_algCMS_RecipientInfo_kari_get0_ctxCMS_RecipientInfo_kari_get0_orig_idCMS_RecipientInfo_kari_get0_reksCMS_RecipientInfo_kari_orig_id_cmpCMS_RecipientInfo_kari_set0_pkeyCMS_RecipientInfo_kekri_get0_idCMS_RecipientInfo_kekri_id_cmpCMS_RecipientInfo_ktri_cert_cmpCMS_RecipientInfo_ktri_get0_algsCMS_RecipientInfo_ktri_get0_signer_idCMS_RecipientInfo_set0_keyCMS_RecipientInfo_set0_passwordCMS_RecipientInfo_set0_pkeyCMS_RecipientInfo_typeCMS_SharedInfo_encodeCMS_SignedData_initCMS_SignerInfo_cert_cmpCMS_SignerInfo_get0_algsCMS_SignerInfo_get0_md_ctxCMS_SignerInfo_get0_pkey_ctxCMS_SignerInfo_get0_signatureCMS_SignerInfo_get0_signer_idCMS_SignerInfo_set1_signer_certCMS_SignerInfo_signCMS_SignerInfo_verifyCMS_SignerInfo_verify_contentCMS_add0_CertificateChoicesCMS_add0_RevocationInfoChoiceCMS_add0_certCMS_add0_crlCMS_add0_recipient_keyCMS_add0_recipient_passwordCMS_add1_ReceiptRequestCMS_add1_certCMS_add1_crlCMS_add1_recipient_certCMS_add1_signerCMS_add_simple_smimecapCMS_add_smimecapCMS_add_standard_smimecapCMS_compressCMS_dataCMS_dataFinalCMS_dataInitCMS_data_createCMS_decryptCMS_decrypt_set1_keyCMS_decrypt_set1_passwordCMS_decrypt_set1_pkeyCMS_digest_createCMS_digest_verifyCMS_encryptCMS_finalCMS_get0_RecipientInfosCMS_get0_SignerInfosCMS_get0_contentCMS_get0_eContentTypeCMS_get0_signersCMS_get0_typeCMS_get1_ReceiptRequestCMS_get1_certsCMS_get1_crlsCMS_is_detachedCMS_set1_eContentTypeCMS_set1_signers_certsCMS_set_detachedCMS_signCMS_sign_receiptCMS_signed_add1_attrCMS_signed_add1_attr_by_NIDCMS_signed_add1_attr_by_OBJCMS_signed_add1_attr_by_txtCMS_signed_delete_attrCMS_signed_get0_data_by_OBJCMS_signed_get_attrCMS_signed_get_attr_by_NIDCMS_signed_get_attr_by_OBJCMS_signed_get_attr_countCMS_streamCMS_uncompressCMS_unsigned_add1_attrCMS_unsigned_add1_attr_by_NIDCMS_unsigned_add1_attr_by_OBJCMS_unsigned_add1_attr_by_txtCMS_unsigned_delete_attrCMS_unsigned_get0_data_by_OBJCMS_unsigned_get_attrCMS_unsigned_get_attr_by_NIDCMS_unsigned_get_attr_by_OBJCMS_unsigned_get_attr_countCMS_verifyCMS_verify_receiptCOMP_CTX_freeCOMP_CTX_newCOMP_compress_blockCOMP_expand_blockCOMP_rleCOMP_zlibCOMP_zlib_cleanupCONF_dump_bioCONF_dump_fpCONF_freeCONF_get1_default_config_fileCONF_get_numberCONF_get_sectionCONF_get_stringCONF_imodule_get_flagsCONF_imodule_get_moduleCONF_imodule_get_nameCONF_imodule_get_usr_dataCONF_imodule_get_valueCONF_imodule_set_flagsCONF_imodule_set_usr_dataCONF_loadCONF_load_bioCONF_load_fpCONF_module_addCONF_module_get_usr_dataCONF_module_set_usr_dataCONF_modules_finishCONF_modules_freeCONF_modules_loadCONF_modules_load_fileCONF_modules_unloadCONF_parse_listCONF_set_default_methodCONF_set_nconfCRL_DIST_POINTS_freeCRL_DIST_POINTS_itCRL_DIST_POINTS_newCRYPTO_128_unwrapCRYPTO_128_wrapCRYPTO_THREADID_cmpCRYPTO_THREADID_cpyCRYPTO_THREADID_currentCRYPTO_THREADID_get_callbackCRYPTO_THREADID_hashCRYPTO_THREADID_set_callbackCRYPTO_THREADID_set_numericCRYPTO_THREADID_set_pointerCRYPTO_add_lockCRYPTO_cbc128_decryptCRYPTO_cbc128_encryptCRYPTO_ccm128_aadCRYPTO_ccm128_decryptCRYPTO_ccm128_decrypt_ccm64CRYPTO_ccm128_encryptCRYPTO_ccm128_encrypt_ccm64CRYPTO_ccm128_initCRYPTO_ccm128_setivCRYPTO_ccm128_tagCRYPTO_cfb128_1_encryptCRYPTO_cfb128_8_encryptCRYPTO_cfb128_encryptCRYPTO_cleanup_all_ex_dataCRYPTO_ctr128_encryptCRYPTO_ctr128_encrypt_ctr32CRYPTO_cts128_decryptCRYPTO_cts128_decrypt_blockCRYPTO_cts128_encryptCRYPTO_cts128_encrypt_blockCRYPTO_dbg_freeCRYPTO_dbg_get_optionsCRYPTO_dbg_mallocCRYPTO_dbg_reallocCRYPTO_dbg_set_optionsCRYPTO_destroy_dynlockidCRYPTO_dup_ex_dataCRYPTO_ex_data_new_classCRYPTO_freeCRYPTO_free_ex_dataCRYPTO_free_lockedCRYPTO_gcm128_aadCRYPTO_gcm128_decryptCRYPTO_gcm128_decrypt_ctr32CRYPTO_gcm128_encryptCRYPTO_gcm128_encrypt_ctr32CRYPTO_gcm128_finishCRYPTO_gcm128_initCRYPTO_gcm128_newCRYPTO_gcm128_releaseCRYPTO_gcm128_setivCRYPTO_gcm128_tagCRYPTO_get_add_lock_callbackCRYPTO_get_dynlock_create_callbackCRYPTO_get_dynlock_destroy_callbackCRYPTO_get_dynlock_lock_callbackCRYPTO_get_dynlock_valueCRYPTO_get_ex_dataCRYPTO_get_ex_data_implementationCRYPTO_get_ex_new_indexCRYPTO_get_id_callbackCRYPTO_get_lock_nameCRYPTO_get_locked_mem_ex_functionsCRYPTO_get_locked_mem_functionsCRYPTO_get_locking_callbackCRYPTO_get_mem_debug_functionsCRYPTO_get_mem_debug_optionsCRYPTO_get_mem_ex_functionsCRYPTO_get_mem_functionsCRYPTO_get_new_dynlockidCRYPTO_get_new_lockidCRYPTO_is_mem_check_onCRYPTO_lockCRYPTO_mallocCRYPTO_malloc_lockedCRYPTO_mem_ctrlCRYPTO_mem_leaksCRYPTO_mem_leaks_cbCRYPTO_mem_leaks_fpCRYPTO_memcmpCRYPTO_new_ex_dataCRYPTO_nistcts128_decryptCRYPTO_nistcts128_decrypt_blockCRYPTO_nistcts128_encryptCRYPTO_nistcts128_encrypt_blockCRYPTO_num_locksCRYPTO_ofb128_encryptCRYPTO_pop_infoCRYPTO_push_info_CRYPTO_reallocCRYPTO_realloc_cleanCRYPTO_remallocCRYPTO_remove_all_infoCRYPTO_set_add_lock_callbackCRYPTO_set_dynlock_create_callbackCRYPTO_set_dynlock_destroy_callbackCRYPTO_set_dynlock_lock_callbackCRYPTO_set_ex_dataCRYPTO_set_ex_data_implementationCRYPTO_set_id_callbackCRYPTO_set_locked_mem_ex_functionsCRYPTO_set_locked_mem_functionsCRYPTO_set_locking_callbackCRYPTO_set_mem_debug_functionsCRYPTO_set_mem_debug_optionsCRYPTO_set_mem_ex_functionsCRYPTO_set_mem_functionsCRYPTO_strdupCRYPTO_thread_idCRYPTO_xts128_encryptCamellia_cbc_encryptCamellia_cfb128_encryptCamellia_cfb1_encryptCamellia_cfb8_encryptCamellia_ctr128_encryptCamellia_decryptCamellia_ecb_encryptCamellia_encryptCamellia_ofb128_encryptCamellia_set_keyDES_cbc_cksumDES_cbc_encryptDES_cfb64_encryptDES_cfb_encryptDES_check_key_parityDES_cryptDES_decrypt3DES_ecb3_encryptDES_ecb_encryptDES_ede3_cbc_encryptDES_ede3_cbcm_encryptDES_ede3_cfb64_encryptDES_ede3_cfb_encryptDES_ede3_ofb64_encryptDES_enc_readDES_enc_writeDES_encrypt1DES_encrypt2DES_encrypt3DES_fcryptDES_is_weak_keyDES_key_schedDES_ncbc_encryptDES_ofb64_encryptDES_ofb_encryptDES_optionsDES_pcbc_encryptDES_quad_cksumDES_random_keyDES_read_2passwordsDES_read_passwordDES_set_keyDES_set_key_checkedDES_set_key_uncheckedDES_set_odd_parityDES_string_to_2keysDES_string_to_keyDES_xcbc_encryptDH_KDF_X9_42DH_OpenSSLDH_checkDH_check_pub_keyDH_compute_keyDH_compute_key_paddedDH_freeDH_generate_keyDH_generate_parametersDH_generate_parameters_exDH_get_1024_160DH_get_2048_224DH_get_2048_256DH_get_default_methodDH_get_ex_dataDH_get_ex_new_indexDH_newDH_new_methodDH_set_default_methodDH_set_ex_dataDH_set_methodDH_sizeDH_up_refDHparams_dupDHparams_printDHparams_print_fpDIRECTORYSTRING_freeDIRECTORYSTRING_itDIRECTORYSTRING_newDISPLAYTEXT_freeDISPLAYTEXT_itDISPLAYTEXT_newDIST_POINT_NAME_freeDIST_POINT_NAME_itDIST_POINT_NAME_newDIST_POINT_freeDIST_POINT_itDIST_POINT_newDIST_POINT_set_dpnameDSA_OpenSSLDSA_SIG_freeDSA_SIG_newDSA_do_signDSA_do_verifyDSA_dup_DHDSA_freeDSA_generate_keyDSA_generate_parametersDSA_generate_parameters_exDSA_get_default_methodDSA_get_ex_dataDSA_get_ex_new_indexDSA_newDSA_new_methodDSA_printDSA_print_fpDSA_set_default_methodDSA_set_ex_dataDSA_set_methodDSA_signDSA_sign_setupDSA_sizeDSA_up_refDSA_verifyDSAparams_dupDSAparams_printDSAparams_print_fpDSO_METHOD_beosDSO_METHOD_dlDSO_METHOD_dlfcnDSO_METHOD_nullDSO_METHOD_opensslDSO_METHOD_vmsDSO_METHOD_win32DSO_bind_funcDSO_bind_varDSO_convert_filenameDSO_ctrlDSO_flagsDSO_freeDSO_get_default_methodDSO_get_filenameDSO_get_loaded_filenameDSO_get_methodDSO_global_lookupDSO_loadDSO_mergeDSO_newDSO_new_methodDSO_pathbyaddrDSO_set_default_methodDSO_set_filenameDSO_set_methodDSO_set_name_converterDSO_up_refECDH_KDF_X9_62ECDH_OpenSSLECDH_compute_keyECDH_get_default_methodECDH_get_ex_dataECDH_get_ex_new_indexECDH_set_default_methodECDH_set_ex_dataECDH_set_methodECDSA_METHOD_freeECDSA_METHOD_get_app_dataECDSA_METHOD_newECDSA_METHOD_set_app_dataECDSA_METHOD_set_flagsECDSA_METHOD_set_nameECDSA_METHOD_set_signECDSA_METHOD_set_sign_setupECDSA_METHOD_set_verifyECDSA_OpenSSLECDSA_SIG_freeECDSA_SIG_newECDSA_do_signECDSA_do_sign_exECDSA_do_verifyECDSA_get_default_methodECDSA_get_ex_dataECDSA_get_ex_new_indexECDSA_set_default_methodECDSA_set_ex_dataECDSA_set_methodECDSA_signECDSA_sign_exECDSA_sign_setupECDSA_sizeECDSA_verifyECPKParameters_printECPKParameters_print_fpECParameters_printECParameters_print_fpEC_GF2m_simple_methodEC_GFp_mont_methodEC_GFp_nist_methodEC_GFp_simple_methodEC_GROUP_checkEC_GROUP_check_discriminantEC_GROUP_clear_freeEC_GROUP_cmpEC_GROUP_copyEC_GROUP_dupEC_GROUP_freeEC_GROUP_get0_generatorEC_GROUP_get0_seedEC_GROUP_get_asn1_flagEC_GROUP_get_basis_typeEC_GROUP_get_cofactorEC_GROUP_get_curve_GF2mEC_GROUP_get_curve_GFpEC_GROUP_get_curve_nameEC_GROUP_get_degreeEC_GROUP_get_mont_dataEC_GROUP_get_orderEC_GROUP_get_pentanomial_basisEC_GROUP_get_point_conversion_formEC_GROUP_get_seed_lenEC_GROUP_get_trinomial_basisEC_GROUP_have_precompute_multEC_GROUP_method_ofEC_GROUP_newEC_GROUP_new_by_curve_nameEC_GROUP_new_curve_GF2mEC_GROUP_new_curve_GFpEC_GROUP_precompute_multEC_GROUP_set_asn1_flagEC_GROUP_set_curve_GF2mEC_GROUP_set_curve_GFpEC_GROUP_set_curve_nameEC_GROUP_set_generatorEC_GROUP_set_point_conversion_formEC_GROUP_set_seedEC_KEY_check_keyEC_KEY_clear_flagsEC_KEY_copyEC_KEY_dupEC_KEY_freeEC_KEY_generate_keyEC_KEY_get0_groupEC_KEY_get0_private_keyEC_KEY_get0_public_keyEC_KEY_get_conv_formEC_KEY_get_enc_flagsEC_KEY_get_flagsEC_KEY_get_key_method_dataEC_KEY_insert_key_method_dataEC_KEY_newEC_KEY_new_by_curve_nameEC_KEY_precompute_multEC_KEY_printEC_KEY_print_fpEC_KEY_set_asn1_flagEC_KEY_set_conv_formEC_KEY_set_enc_flagsEC_KEY_set_flagsEC_KEY_set_groupEC_KEY_set_private_keyEC_KEY_set_public_keyEC_KEY_set_public_key_affine_coordinatesEC_KEY_up_refEC_METHOD_get_field_typeEC_POINT_addEC_POINT_bn2pointEC_POINT_clear_freeEC_POINT_cmpEC_POINT_copyEC_POINT_dblEC_POINT_dupEC_POINT_freeEC_POINT_get_Jprojective_coordinates_GFpEC_POINT_get_affine_coordinates_GF2mEC_POINT_get_affine_coordinates_GFpEC_POINT_hex2pointEC_POINT_invertEC_POINT_is_at_infinityEC_POINT_is_on_curveEC_POINT_make_affineEC_POINT_method_ofEC_POINT_mulEC_POINT_newEC_POINT_oct2pointEC_POINT_point2bnEC_POINT_point2hexEC_POINT_point2octEC_POINT_set_Jprojective_coordinates_GFpEC_POINT_set_affine_coordinates_GF2mEC_POINT_set_affine_coordinates_GFpEC_POINT_set_compressed_coordinates_GF2mEC_POINT_set_compressed_coordinates_GFpEC_POINT_set_to_infinityEC_POINTs_make_affineEC_POINTs_mulEC_curve_nid2nistEC_curve_nist2nidEC_get_builtin_curvesEDIPARTYNAME_freeEDIPARTYNAME_itEDIPARTYNAME_newENGINE_addENGINE_add_conf_moduleENGINE_by_idENGINE_cleanupENGINE_cmd_is_executableENGINE_ctrlENGINE_ctrl_cmdENGINE_ctrl_cmd_stringENGINE_finishENGINE_freeENGINE_get_DHENGINE_get_DSAENGINE_get_ECDHENGINE_get_ECDSAENGINE_get_RANDENGINE_get_RSAENGINE_get_STOREENGINE_get_cipherENGINE_get_cipher_engineENGINE_get_ciphersENGINE_get_cmd_defnsENGINE_get_ctrl_functionENGINE_get_default_DHENGINE_get_default_DSAENGINE_get_default_ECDHENGINE_get_default_ECDSAENGINE_get_default_RANDENGINE_get_default_RSAENGINE_get_destroy_functionENGINE_get_digestENGINE_get_digest_engineENGINE_get_digestsENGINE_get_ex_dataENGINE_get_ex_new_indexENGINE_get_finish_functionENGINE_get_firstENGINE_get_flagsENGINE_get_idENGINE_get_init_functionENGINE_get_lastENGINE_get_load_privkey_functionENGINE_get_load_pubkey_functionENGINE_get_nameENGINE_get_nextENGINE_get_pkey_asn1_methENGINE_get_pkey_asn1_meth_engineENGINE_get_pkey_asn1_meth_strENGINE_get_pkey_asn1_methsENGINE_get_pkey_methENGINE_get_pkey_meth_engineENGINE_get_pkey_methsENGINE_get_prevENGINE_get_ssl_client_cert_functionENGINE_get_static_stateENGINE_get_table_flagsENGINE_initENGINE_load_builtin_enginesENGINE_load_cryptodevENGINE_load_dynamicENGINE_load_opensslENGINE_load_private_keyENGINE_load_public_keyENGINE_load_rdrandENGINE_load_ssl_client_certENGINE_newENGINE_pkey_asn1_find_strENGINE_register_DHENGINE_register_DSAENGINE_register_ECDHENGINE_register_ECDSAENGINE_register_RANDENGINE_register_RSAENGINE_register_STOREENGINE_register_all_DHENGINE_register_all_DSAENGINE_register_all_ECDHENGINE_register_all_ECDSAENGINE_register_all_RANDENGINE_register_all_RSAENGINE_register_all_STOREENGINE_register_all_ciphersENGINE_register_all_completeENGINE_register_all_digestsENGINE_register_all_pkey_asn1_methsENGINE_register_all_pkey_methsENGINE_register_ciphersENGINE_register_completeENGINE_register_digestsENGINE_register_pkey_asn1_methsENGINE_register_pkey_methsENGINE_removeENGINE_set_DHENGINE_set_DSAENGINE_set_ECDHENGINE_set_ECDSAENGINE_set_RANDENGINE_set_RSAENGINE_set_STOREENGINE_set_ciphersENGINE_set_cmd_defnsENGINE_set_ctrl_functionENGINE_set_defaultENGINE_set_default_DHENGINE_set_default_DSAENGINE_set_default_ECDHENGINE_set_default_ECDSAENGINE_set_default_RANDENGINE_set_default_RSAENGINE_set_default_ciphersENGINE_set_default_digestsENGINE_set_default_pkey_asn1_methsENGINE_set_default_pkey_methsENGINE_set_default_stringENGINE_set_destroy_functionENGINE_set_digestsENGINE_set_ex_dataENGINE_set_finish_functionENGINE_set_flagsENGINE_set_idENGINE_set_init_functionENGINE_set_load_privkey_functionENGINE_set_load_pubkey_functionENGINE_set_load_ssl_client_cert_functionENGINE_set_nameENGINE_set_pkey_asn1_methsENGINE_set_pkey_methsENGINE_set_table_flagsENGINE_unregister_DHENGINE_unregister_DSAENGINE_unregister_ECDHENGINE_unregister_ECDSAENGINE_unregister_RANDENGINE_unregister_RSAENGINE_unregister_STOREENGINE_unregister_ciphersENGINE_unregister_digestsENGINE_unregister_pkey_asn1_methsENGINE_unregister_pkey_methsENGINE_up_refERR_add_error_dataERR_add_error_vdataERR_clear_errorERR_error_stringERR_error_string_nERR_free_stringsERR_func_error_stringERR_get_err_state_tableERR_get_errorERR_get_error_lineERR_get_error_line_dataERR_get_implementationERR_get_next_error_libraryERR_get_stateERR_get_string_tableERR_lib_error_stringERR_load_ASN1_stringsERR_load_BIO_stringsERR_load_BN_stringsERR_load_BUF_stringsERR_load_CMS_stringsERR_load_COMP_stringsERR_load_CONF_stringsERR_load_CRYPTO_stringsERR_load_DH_stringsERR_load_DSA_stringsERR_load_DSO_stringsERR_load_ECDH_stringsERR_load_ECDSA_stringsERR_load_EC_stringsERR_load_ENGINE_stringsERR_load_ERR_stringsERR_load_EVP_stringsERR_load_OBJ_stringsERR_load_OCSP_stringsERR_load_PEM_stringsERR_load_PKCS12_stringsERR_load_PKCS7_stringsERR_load_RAND_stringsERR_load_RSA_stringsERR_load_TS_stringsERR_load_UI_stringsERR_load_X509V3_stringsERR_load_X509_stringsERR_load_crypto_stringsERR_load_stringsERR_peek_errorERR_peek_error_lineERR_peek_error_line_dataERR_peek_last_errorERR_peek_last_error_lineERR_peek_last_error_line_dataERR_pop_to_markERR_print_errorsERR_print_errors_cbERR_print_errors_fpERR_put_errorERR_reason_error_stringERR_release_err_state_tableERR_remove_stateERR_remove_thread_stateERR_set_error_dataERR_set_implementationERR_set_markERR_unload_stringsESS_CERT_ID_dupESS_CERT_ID_freeESS_CERT_ID_newESS_ISSUER_SERIAL_dupESS_ISSUER_SERIAL_freeESS_ISSUER_SERIAL_newESS_SIGNING_CERT_dupESS_SIGNING_CERT_freeESS_SIGNING_CERT_newEVP_BytesToKeyEVP_CIPHER_CTX_block_sizeEVP_CIPHER_CTX_cipherEVP_CIPHER_CTX_cleanupEVP_CIPHER_CTX_clear_flagsEVP_CIPHER_CTX_copyEVP_CIPHER_CTX_ctrlEVP_CIPHER_CTX_flagsEVP_CIPHER_CTX_freeEVP_CIPHER_CTX_get_app_dataEVP_CIPHER_CTX_initEVP_CIPHER_CTX_iv_lengthEVP_CIPHER_CTX_key_lengthEVP_CIPHER_CTX_newEVP_CIPHER_CTX_nidEVP_CIPHER_CTX_rand_keyEVP_CIPHER_CTX_set_app_dataEVP_CIPHER_CTX_set_flagsEVP_CIPHER_CTX_set_key_lengthEVP_CIPHER_CTX_set_paddingEVP_CIPHER_CTX_test_flagsEVP_CIPHER_asn1_to_paramEVP_CIPHER_block_sizeEVP_CIPHER_do_allEVP_CIPHER_do_all_sortedEVP_CIPHER_flagsEVP_CIPHER_get_asn1_ivEVP_CIPHER_iv_lengthEVP_CIPHER_key_lengthEVP_CIPHER_nidEVP_CIPHER_param_to_asn1EVP_CIPHER_set_asn1_ivEVP_CIPHER_typeEVP_CipherEVP_CipherFinalEVP_CipherFinal_exEVP_CipherInitEVP_CipherInit_exEVP_CipherUpdateEVP_DecodeBlockEVP_DecodeFinalEVP_DecodeInitEVP_DecodeUpdateEVP_DecryptFinalEVP_DecryptFinal_exEVP_DecryptInitEVP_DecryptInit_exEVP_DecryptUpdateEVP_DigestEVP_DigestFinalEVP_DigestFinal_exEVP_DigestInitEVP_DigestInit_exEVP_DigestSignFinalEVP_DigestSignInitEVP_DigestUpdateEVP_DigestVerifyFinalEVP_DigestVerifyInitEVP_EncodeBlockEVP_EncodeFinalEVP_EncodeInitEVP_EncodeUpdateEVP_EncryptFinalEVP_EncryptFinal_exEVP_EncryptInitEVP_EncryptInit_exEVP_EncryptUpdateEVP_MD_CTX_cleanupEVP_MD_CTX_clear_flagsEVP_MD_CTX_copyEVP_MD_CTX_copy_exEVP_MD_CTX_createEVP_MD_CTX_destroyEVP_MD_CTX_initEVP_MD_CTX_mdEVP_MD_CTX_set_flagsEVP_MD_CTX_test_flagsEVP_MD_block_sizeEVP_MD_do_allEVP_MD_do_all_sortedEVP_MD_flagsEVP_MD_pkey_typeEVP_MD_sizeEVP_MD_typeEVP_OpenFinalEVP_OpenInitEVP_PBE_CipherInitEVP_PBE_alg_addEVP_PBE_alg_add_typeEVP_PBE_cleanupEVP_PBE_findEVP_PKCS82PKEYEVP_PKEY2PKCS8EVP_PKEY2PKCS8_brokenEVP_PKEY_CTX_ctrlEVP_PKEY_CTX_ctrl_strEVP_PKEY_CTX_dupEVP_PKEY_CTX_freeEVP_PKEY_CTX_get0_peerkeyEVP_PKEY_CTX_get0_pkeyEVP_PKEY_CTX_get_app_dataEVP_PKEY_CTX_get_cbEVP_PKEY_CTX_get_dataEVP_PKEY_CTX_get_keygen_infoEVP_PKEY_CTX_get_operationEVP_PKEY_CTX_newEVP_PKEY_CTX_new_idEVP_PKEY_CTX_set0_keygen_infoEVP_PKEY_CTX_set_app_dataEVP_PKEY_CTX_set_cbEVP_PKEY_CTX_set_dataEVP_PKEY_add1_attrEVP_PKEY_add1_attr_by_NIDEVP_PKEY_add1_attr_by_OBJEVP_PKEY_add1_attr_by_txtEVP_PKEY_asn1_add0EVP_PKEY_asn1_add_aliasEVP_PKEY_asn1_copyEVP_PKEY_asn1_findEVP_PKEY_asn1_find_strEVP_PKEY_asn1_freeEVP_PKEY_asn1_get0EVP_PKEY_asn1_get0_infoEVP_PKEY_asn1_get_countEVP_PKEY_asn1_newEVP_PKEY_asn1_set_ctrlEVP_PKEY_asn1_set_freeEVP_PKEY_asn1_set_itemEVP_PKEY_asn1_set_paramEVP_PKEY_asn1_set_privateEVP_PKEY_asn1_set_publicEVP_PKEY_assignEVP_PKEY_base_idEVP_PKEY_bitsEVP_PKEY_cmpEVP_PKEY_cmp_parametersEVP_PKEY_copy_parametersEVP_PKEY_decryptEVP_PKEY_decrypt_initEVP_PKEY_decrypt_oldEVP_PKEY_delete_attrEVP_PKEY_deriveEVP_PKEY_derive_initEVP_PKEY_derive_set_peerEVP_PKEY_encryptEVP_PKEY_encrypt_initEVP_PKEY_encrypt_oldEVP_PKEY_freeEVP_PKEY_get0EVP_PKEY_get0_asn1EVP_PKEY_get1_DHEVP_PKEY_get1_DSAEVP_PKEY_get1_EC_KEYEVP_PKEY_get1_RSAEVP_PKEY_get_attrEVP_PKEY_get_attr_by_NIDEVP_PKEY_get_attr_by_OBJEVP_PKEY_get_attr_countEVP_PKEY_get_default_digest_nidEVP_PKEY_idEVP_PKEY_keygenEVP_PKEY_keygen_initEVP_PKEY_meth_add0EVP_PKEY_meth_copyEVP_PKEY_meth_findEVP_PKEY_meth_freeEVP_PKEY_meth_get0_infoEVP_PKEY_meth_newEVP_PKEY_meth_set_cleanupEVP_PKEY_meth_set_copyEVP_PKEY_meth_set_ctrlEVP_PKEY_meth_set_decryptEVP_PKEY_meth_set_deriveEVP_PKEY_meth_set_encryptEVP_PKEY_meth_set_initEVP_PKEY_meth_set_keygenEVP_PKEY_meth_set_paramgenEVP_PKEY_meth_set_signEVP_PKEY_meth_set_signctxEVP_PKEY_meth_set_verifyEVP_PKEY_meth_set_verify_recoverEVP_PKEY_meth_set_verifyctxEVP_PKEY_missing_parametersEVP_PKEY_newEVP_PKEY_new_mac_keyEVP_PKEY_paramgenEVP_PKEY_paramgen_initEVP_PKEY_print_paramsEVP_PKEY_print_privateEVP_PKEY_print_publicEVP_PKEY_save_parametersEVP_PKEY_set1_DHEVP_PKEY_set1_DSAEVP_PKEY_set1_EC_KEYEVP_PKEY_set1_RSAEVP_PKEY_set_typeEVP_PKEY_set_type_strEVP_PKEY_signEVP_PKEY_sign_initEVP_PKEY_sizeEVP_PKEY_typeEVP_PKEY_verifyEVP_PKEY_verify_initEVP_PKEY_verify_recoverEVP_PKEY_verify_recover_initEVP_SealFinalEVP_SealInitEVP_SignFinalEVP_VerifyFinalEVP_add_alg_moduleEVP_add_cipherEVP_add_digestEVP_aes_128_cbcEVP_aes_128_cbc_hmac_sha1EVP_aes_128_cbc_hmac_sha256EVP_aes_128_ccmEVP_aes_128_cfb1EVP_aes_128_cfb128EVP_aes_128_cfb8EVP_aes_128_ctrEVP_aes_128_ecbEVP_aes_128_gcmEVP_aes_128_ofbEVP_aes_128_wrapEVP_aes_128_xtsEVP_aes_192_cbcEVP_aes_192_ccmEVP_aes_192_cfb1EVP_aes_192_cfb128EVP_aes_192_cfb8EVP_aes_192_ctrEVP_aes_192_ecbEVP_aes_192_gcmEVP_aes_192_ofbEVP_aes_192_wrapEVP_aes_256_cbcEVP_aes_256_cbc_hmac_sha1EVP_aes_256_cbc_hmac_sha256EVP_aes_256_ccmEVP_aes_256_cfb1EVP_aes_256_cfb128EVP_aes_256_cfb8EVP_aes_256_ctrEVP_aes_256_ecbEVP_aes_256_gcmEVP_aes_256_ofbEVP_aes_256_wrapEVP_aes_256_xtsEVP_bf_cbcEVP_bf_cfb64EVP_bf_ecbEVP_bf_ofbEVP_camellia_128_cbcEVP_camellia_128_cfb1EVP_camellia_128_cfb128EVP_camellia_128_cfb8EVP_camellia_128_ecbEVP_camellia_128_ofbEVP_camellia_192_cbcEVP_camellia_192_cfb1EVP_camellia_192_cfb128EVP_camellia_192_cfb8EVP_camellia_192_ecbEVP_camellia_192_ofbEVP_camellia_256_cbcEVP_camellia_256_cfb1EVP_camellia_256_cfb128EVP_camellia_256_cfb8EVP_camellia_256_ecbEVP_camellia_256_ofbEVP_cast5_cbcEVP_cast5_cfb64EVP_cast5_ecbEVP_cast5_ofbEVP_cleanupEVP_des_cbcEVP_des_cfb1EVP_des_cfb64EVP_des_cfb8EVP_des_ecbEVP_des_edeEVP_des_ede3EVP_des_ede3_cbcEVP_des_ede3_cfb1EVP_des_ede3_cfb64EVP_des_ede3_cfb8EVP_des_ede3_ecbEVP_des_ede3_ofbEVP_des_ede3_wrapEVP_des_ede_cbcEVP_des_ede_cfb64EVP_des_ede_ecbEVP_des_ede_ofbEVP_des_ofbEVP_desx_cbcEVP_dssEVP_dss1EVP_ecdsaEVP_enc_nullEVP_get_cipherbynameEVP_get_digestbynameEVP_get_pw_promptEVP_idea_cbcEVP_idea_cfb64EVP_idea_ecbEVP_idea_ofbEVP_md4EVP_md5EVP_md_nullEVP_mdc2EVP_rc2_40_cbcEVP_rc2_64_cbcEVP_rc2_cbcEVP_rc2_cfb64EVP_rc2_ecbEVP_rc2_ofbEVP_rc4EVP_rc4_40EVP_rc4_hmac_md5EVP_read_pw_stringEVP_read_pw_string_minEVP_ripemd160EVP_seed_cbcEVP_seed_cfb128EVP_seed_ecbEVP_seed_ofbEVP_set_pw_promptEVP_shaEVP_sha1EVP_sha224EVP_sha256EVP_sha384EVP_sha512EVP_whirlpoolEXTENDED_KEY_USAGE_freeEXTENDED_KEY_USAGE_itEXTENDED_KEY_USAGE_newFIPS_modeFIPS_mode_setGENERAL_NAMES_freeGENERAL_NAMES_itGENERAL_NAMES_newGENERAL_NAME_cmpGENERAL_NAME_dupGENERAL_NAME_freeGENERAL_NAME_get0_otherNameGENERAL_NAME_get0_valueGENERAL_NAME_itGENERAL_NAME_newGENERAL_NAME_printGENERAL_NAME_set0_othernameGENERAL_NAME_set0_valueGENERAL_SUBTREE_freeGENERAL_SUBTREE_itGENERAL_SUBTREE_newHMACHMAC_CTX_cleanupHMAC_CTX_copyHMAC_CTX_initHMAC_CTX_set_flagsHMAC_FinalHMAC_InitHMAC_Init_exHMAC_UpdateISSUING_DIST_POINT_freeISSUING_DIST_POINT_itISSUING_DIST_POINT_newKRB5_APREQBODY_freeKRB5_APREQBODY_itKRB5_APREQBODY_newKRB5_APREQ_freeKRB5_APREQ_itKRB5_APREQ_newKRB5_AUTHDATA_freeKRB5_AUTHDATA_itKRB5_AUTHDATA_newKRB5_AUTHENTBODY_freeKRB5_AUTHENTBODY_itKRB5_AUTHENTBODY_newKRB5_AUTHENT_freeKRB5_AUTHENT_itKRB5_AUTHENT_newKRB5_CHECKSUM_freeKRB5_CHECKSUM_itKRB5_CHECKSUM_newKRB5_ENCDATA_freeKRB5_ENCDATA_itKRB5_ENCDATA_newKRB5_ENCKEY_freeKRB5_ENCKEY_itKRB5_ENCKEY_newKRB5_PRINCNAME_freeKRB5_PRINCNAME_itKRB5_PRINCNAME_newKRB5_TICKET_freeKRB5_TICKET_itKRB5_TICKET_newKRB5_TKTBODY_freeKRB5_TKTBODY_itKRB5_TKTBODY_newLONG_itMD4MD4_FinalMD4_InitMD4_TransformMD4_UpdateMD5MD5_FinalMD5_InitMD5_TransformMD5_UpdateMDC2MDC2_FinalMDC2_InitMDC2_UpdateNAME_CONSTRAINTS_checkNAME_CONSTRAINTS_freeNAME_CONSTRAINTS_itNAME_CONSTRAINTS_newNCONF_WIN32NCONF_defaultNCONF_dump_bioNCONF_dump_fpNCONF_freeNCONF_free_dataNCONF_get_number_eNCONF_get_sectionNCONF_get_stringNCONF_loadNCONF_load_bioNCONF_load_fpNCONF_newNETSCAPE_CERT_SEQUENCE_freeNETSCAPE_CERT_SEQUENCE_itNETSCAPE_CERT_SEQUENCE_newNETSCAPE_SPKAC_freeNETSCAPE_SPKAC_itNETSCAPE_SPKAC_newNETSCAPE_SPKI_b64_decodeNETSCAPE_SPKI_b64_encodeNETSCAPE_SPKI_freeNETSCAPE_SPKI_get_pubkeyNETSCAPE_SPKI_itNETSCAPE_SPKI_newNETSCAPE_SPKI_printNETSCAPE_SPKI_set_pubkeyNETSCAPE_SPKI_signNETSCAPE_SPKI_verifyNETSCAPE_X509_freeNETSCAPE_X509_itNETSCAPE_X509_newNOTICEREF_freeNOTICEREF_itNOTICEREF_newOBJ_NAME_addOBJ_NAME_cleanupOBJ_NAME_do_allOBJ_NAME_do_all_sortedOBJ_NAME_getOBJ_NAME_initOBJ_NAME_new_indexOBJ_NAME_removeOBJ_add_objectOBJ_add_sigidOBJ_bsearch_OBJ_bsearch_ex_OBJ_cleanupOBJ_cmpOBJ_createOBJ_create_objectsOBJ_dupOBJ_find_sigid_algsOBJ_find_sigid_by_algsOBJ_ln2nidOBJ_new_nidOBJ_nid2lnOBJ_nid2objOBJ_nid2snOBJ_obj2nidOBJ_obj2txtOBJ_sigid_freeOBJ_sn2nidOBJ_txt2nidOBJ_txt2objOCSP_BASICRESP_add1_ext_i2dOCSP_BASICRESP_add_extOCSP_BASICRESP_delete_extOCSP_BASICRESP_freeOCSP_BASICRESP_get1_ext_d2iOCSP_BASICRESP_get_extOCSP_BASICRESP_get_ext_by_NIDOCSP_BASICRESP_get_ext_by_OBJOCSP_BASICRESP_get_ext_by_criticalOCSP_BASICRESP_get_ext_countOCSP_BASICRESP_itOCSP_BASICRESP_newOCSP_CERTID_dupOCSP_CERTID_freeOCSP_CERTID_itOCSP_CERTID_newOCSP_CERTSTATUS_freeOCSP_CERTSTATUS_itOCSP_CERTSTATUS_newOCSP_CRLID_freeOCSP_CRLID_itOCSP_CRLID_newOCSP_ONEREQ_add1_ext_i2dOCSP_ONEREQ_add_extOCSP_ONEREQ_delete_extOCSP_ONEREQ_freeOCSP_ONEREQ_get1_ext_d2iOCSP_ONEREQ_get_extOCSP_ONEREQ_get_ext_by_NIDOCSP_ONEREQ_get_ext_by_OBJOCSP_ONEREQ_get_ext_by_criticalOCSP_ONEREQ_get_ext_countOCSP_ONEREQ_itOCSP_ONEREQ_newOCSP_REQINFO_freeOCSP_REQINFO_itOCSP_REQINFO_newOCSP_REQUEST_add1_ext_i2dOCSP_REQUEST_add_extOCSP_REQUEST_delete_extOCSP_REQUEST_freeOCSP_REQUEST_get1_ext_d2iOCSP_REQUEST_get_extOCSP_REQUEST_get_ext_by_NIDOCSP_REQUEST_get_ext_by_OBJOCSP_REQUEST_get_ext_by_criticalOCSP_REQUEST_get_ext_countOCSP_REQUEST_itOCSP_REQUEST_newOCSP_REQUEST_printOCSP_REQ_CTX_add1_headerOCSP_REQ_CTX_freeOCSP_REQ_CTX_get0_mem_bioOCSP_REQ_CTX_httpOCSP_REQ_CTX_i2dOCSP_REQ_CTX_nbioOCSP_REQ_CTX_nbio_d2iOCSP_REQ_CTX_newOCSP_REQ_CTX_set1_reqOCSP_RESPBYTES_freeOCSP_RESPBYTES_itOCSP_RESPBYTES_newOCSP_RESPDATA_freeOCSP_RESPDATA_itOCSP_RESPDATA_newOCSP_RESPID_freeOCSP_RESPID_itOCSP_RESPID_newOCSP_RESPONSE_freeOCSP_RESPONSE_itOCSP_RESPONSE_newOCSP_RESPONSE_printOCSP_REVOKEDINFO_freeOCSP_REVOKEDINFO_itOCSP_REVOKEDINFO_newOCSP_SERVICELOC_freeOCSP_SERVICELOC_itOCSP_SERVICELOC_newOCSP_SIGNATURE_freeOCSP_SIGNATURE_itOCSP_SIGNATURE_newOCSP_SINGLERESP_add1_ext_i2dOCSP_SINGLERESP_add_extOCSP_SINGLERESP_delete_extOCSP_SINGLERESP_freeOCSP_SINGLERESP_get1_ext_d2iOCSP_SINGLERESP_get_extOCSP_SINGLERESP_get_ext_by_NIDOCSP_SINGLERESP_get_ext_by_OBJOCSP_SINGLERESP_get_ext_by_criticalOCSP_SINGLERESP_get_ext_countOCSP_SINGLERESP_itOCSP_SINGLERESP_newOCSP_accept_responses_newOCSP_archive_cutoff_newOCSP_basic_add1_certOCSP_basic_add1_nonceOCSP_basic_add1_statusOCSP_basic_signOCSP_basic_verifyOCSP_cert_id_newOCSP_cert_status_strOCSP_cert_to_idOCSP_check_nonceOCSP_check_validityOCSP_copy_nonceOCSP_crlID_newOCSP_crl_reason_strOCSP_id_cmpOCSP_id_get0_infoOCSP_id_issuer_cmpOCSP_onereq_get0_idOCSP_parse_urlOCSP_request_add0_idOCSP_request_add1_certOCSP_request_add1_nonceOCSP_request_is_signedOCSP_request_onereq_countOCSP_request_onereq_get0OCSP_request_set1_nameOCSP_request_signOCSP_request_verifyOCSP_resp_countOCSP_resp_findOCSP_resp_find_statusOCSP_resp_get0OCSP_response_createOCSP_response_get1_basicOCSP_response_statusOCSP_response_status_strOCSP_sendreq_bioOCSP_sendreq_nbioOCSP_sendreq_newOCSP_set_max_response_lengthOCSP_single_get0_statusOCSP_url_svcloc_newOPENSSL_DIR_endOPENSSL_DIR_readOPENSSL_add_all_algorithms_confOPENSSL_add_all_algorithms_noconfOPENSSL_asc2uniOPENSSL_cleanseOPENSSL_configOPENSSL_cpuid_setupOPENSSL_gmtimeOPENSSL_gmtime_adjOPENSSL_gmtime_diffOPENSSL_ia32cap_locOPENSSL_initOPENSSL_isserviceOPENSSL_issetugidOPENSSL_load_builtin_modulesOPENSSL_memcmpOPENSSL_no_configOPENSSL_showfatalOPENSSL_stderrOPENSSL_strcasecmpOPENSSL_strncasecmpOPENSSL_uni2ascOSSL_DES_versionOSSL_libdes_versionOTHERNAME_cmpOTHERNAME_freeOTHERNAME_itOTHERNAME_newOpenSSLDieOpenSSL_add_all_ciphersOpenSSL_add_all_digestsPBE2PARAM_freePBE2PARAM_itPBE2PARAM_newPBEPARAM_freePBEPARAM_itPBEPARAM_newPBKDF2PARAM_freePBKDF2PARAM_itPBKDF2PARAM_newPEM_ASN1_readPEM_ASN1_read_bioPEM_ASN1_writePEM_ASN1_write_bioPEM_SealFinalPEM_SealInitPEM_SealUpdatePEM_SignFinalPEM_SignInitPEM_SignUpdatePEM_X509_INFO_readPEM_X509_INFO_read_bioPEM_X509_INFO_write_bioPEM_bytes_read_bioPEM_def_callbackPEM_dek_infoPEM_do_headerPEM_get_EVP_CIPHER_INFOPEM_proc_typePEM_readPEM_read_CMSPEM_read_DHparamsPEM_read_DSAPrivateKeyPEM_read_DSA_PUBKEYPEM_read_DSAparamsPEM_read_ECPKParametersPEM_read_ECPrivateKeyPEM_read_EC_PUBKEYPEM_read_NETSCAPE_CERT_SEQUENCEPEM_read_PKCS7PEM_read_PKCS8PEM_read_PKCS8_PRIV_KEY_INFOPEM_read_PUBKEYPEM_read_PrivateKeyPEM_read_RSAPrivateKeyPEM_read_RSAPublicKeyPEM_read_RSA_PUBKEYPEM_read_X509PEM_read_X509_AUXPEM_read_X509_CERT_PAIRPEM_read_X509_CRLPEM_read_X509_REQPEM_read_bioPEM_read_bio_CMSPEM_read_bio_DHparamsPEM_read_bio_DSAPrivateKeyPEM_read_bio_DSA_PUBKEYPEM_read_bio_DSAparamsPEM_read_bio_ECPKParametersPEM_read_bio_ECPrivateKeyPEM_read_bio_EC_PUBKEYPEM_read_bio_NETSCAPE_CERT_SEQUENCEPEM_read_bio_PKCS7PEM_read_bio_PKCS8PEM_read_bio_PKCS8_PRIV_KEY_INFOPEM_read_bio_PUBKEYPEM_read_bio_ParametersPEM_read_bio_PrivateKeyPEM_read_bio_RSAPrivateKeyPEM_read_bio_RSAPublicKeyPEM_read_bio_RSA_PUBKEYPEM_read_bio_X509PEM_read_bio_X509_AUXPEM_read_bio_X509_CERT_PAIRPEM_read_bio_X509_CRLPEM_read_bio_X509_REQPEM_writePEM_write_CMSPEM_write_DHparamsPEM_write_DHxparamsPEM_write_DSAPrivateKeyPEM_write_DSA_PUBKEYPEM_write_DSAparamsPEM_write_ECPKParametersPEM_write_ECPrivateKeyPEM_write_EC_PUBKEYPEM_write_NETSCAPE_CERT_SEQUENCEPEM_write_PKCS7PEM_write_PKCS8PEM_write_PKCS8PrivateKeyPEM_write_PKCS8PrivateKey_nidPEM_write_PKCS8_PRIV_KEY_INFOPEM_write_PUBKEYPEM_write_PrivateKeyPEM_write_RSAPrivateKeyPEM_write_RSAPublicKeyPEM_write_RSA_PUBKEYPEM_write_X509PEM_write_X509_AUXPEM_write_X509_CERT_PAIRPEM_write_X509_CRLPEM_write_X509_REQPEM_write_X509_REQ_NEWPEM_write_bioPEM_write_bio_ASN1_streamPEM_write_bio_CMSPEM_write_bio_CMS_streamPEM_write_bio_DHparamsPEM_write_bio_DHxparamsPEM_write_bio_DSAPrivateKeyPEM_write_bio_DSA_PUBKEYPEM_write_bio_DSAparamsPEM_write_bio_ECPKParametersPEM_write_bio_ECPrivateKeyPEM_write_bio_EC_PUBKEYPEM_write_bio_NETSCAPE_CERT_SEQUENCEPEM_write_bio_PKCS7PEM_write_bio_PKCS7_streamPEM_write_bio_PKCS8PEM_write_bio_PKCS8PrivateKeyPEM_write_bio_PKCS8PrivateKey_nidPEM_write_bio_PKCS8_PRIV_KEY_INFOPEM_write_bio_PUBKEYPEM_write_bio_ParametersPEM_write_bio_PrivateKeyPEM_write_bio_RSAPrivateKeyPEM_write_bio_RSAPublicKeyPEM_write_bio_RSA_PUBKEYPEM_write_bio_X509PEM_write_bio_X509_AUXPEM_write_bio_X509_CERT_PAIRPEM_write_bio_X509_CRLPEM_write_bio_X509_REQPEM_write_bio_X509_REQ_NEWPKCS12_AUTHSAFES_itPKCS12_BAGS_freePKCS12_BAGS_itPKCS12_BAGS_newPKCS12_MAC_DATA_freePKCS12_MAC_DATA_itPKCS12_MAC_DATA_newPKCS12_MAKE_KEYBAGPKCS12_MAKE_SHKEYBAGPKCS12_PBE_addPKCS12_PBE_keyivgenPKCS12_SAFEBAGS_itPKCS12_SAFEBAG_freePKCS12_SAFEBAG_itPKCS12_SAFEBAG_newPKCS12_add_CSPName_ascPKCS12_add_certPKCS12_add_friendlyname_ascPKCS12_add_friendlyname_uniPKCS12_add_keyPKCS12_add_localkeyidPKCS12_add_safePKCS12_add_safesPKCS12_certbag2x509PKCS12_certbag2x509crlPKCS12_createPKCS12_decrypt_skeyPKCS12_freePKCS12_gen_macPKCS12_get_attr_genPKCS12_get_friendlynamePKCS12_initPKCS12_itPKCS12_item_decrypt_d2iPKCS12_item_i2d_encryptPKCS12_item_pack_safebagPKCS12_key_gen_ascPKCS12_key_gen_uniPKCS12_newPKCS12_newpassPKCS12_pack_authsafesPKCS12_pack_p7dataPKCS12_pack_p7encdataPKCS12_parsePKCS12_pbe_cryptPKCS12_set_macPKCS12_setup_macPKCS12_unpack_authsafesPKCS12_unpack_p7dataPKCS12_unpack_p7encdataPKCS12_verify_macPKCS12_x5092certbagPKCS12_x509crl2certbagPKCS1_MGF1PKCS5_PBE_addPKCS5_PBE_keyivgenPKCS5_PBKDF2_HMACPKCS5_PBKDF2_HMAC_SHA1PKCS5_pbe2_setPKCS5_pbe2_set_ivPKCS5_pbe_setPKCS5_pbe_set0_algorPKCS5_pbkdf2_setPKCS5_v2_PBE_keyivgenPKCS7_ATTR_SIGN_itPKCS7_ATTR_VERIFY_itPKCS7_DIGEST_freePKCS7_DIGEST_itPKCS7_DIGEST_newPKCS7_ENCRYPT_freePKCS7_ENCRYPT_itPKCS7_ENCRYPT_newPKCS7_ENC_CONTENT_freePKCS7_ENC_CONTENT_itPKCS7_ENC_CONTENT_newPKCS7_ENVELOPE_freePKCS7_ENVELOPE_itPKCS7_ENVELOPE_newPKCS7_ISSUER_AND_SERIAL_digestPKCS7_ISSUER_AND_SERIAL_freePKCS7_ISSUER_AND_SERIAL_itPKCS7_ISSUER_AND_SERIAL_newPKCS7_RECIP_INFO_freePKCS7_RECIP_INFO_get0_algPKCS7_RECIP_INFO_itPKCS7_RECIP_INFO_newPKCS7_RECIP_INFO_setPKCS7_SIGNED_freePKCS7_SIGNED_itPKCS7_SIGNED_newPKCS7_SIGNER_INFO_freePKCS7_SIGNER_INFO_get0_algsPKCS7_SIGNER_INFO_itPKCS7_SIGNER_INFO_newPKCS7_SIGNER_INFO_setPKCS7_SIGNER_INFO_signPKCS7_SIGN_ENVELOPE_freePKCS7_SIGN_ENVELOPE_itPKCS7_SIGN_ENVELOPE_newPKCS7_add0_attrib_signing_timePKCS7_add1_attrib_digestPKCS7_add_attrib_content_typePKCS7_add_attrib_smimecapPKCS7_add_attributePKCS7_add_certificatePKCS7_add_crlPKCS7_add_recipientPKCS7_add_recipient_infoPKCS7_add_signaturePKCS7_add_signed_attributePKCS7_add_signerPKCS7_cert_from_signer_infoPKCS7_content_newPKCS7_ctrlPKCS7_dataDecodePKCS7_dataFinalPKCS7_dataInitPKCS7_dataVerifyPKCS7_decryptPKCS7_digest_from_attributesPKCS7_dupPKCS7_encryptPKCS7_finalPKCS7_freePKCS7_get0_signersPKCS7_get_attributePKCS7_get_issuer_and_serialPKCS7_get_signed_attributePKCS7_get_signer_infoPKCS7_get_smimecapPKCS7_itPKCS7_newPKCS7_print_ctxPKCS7_set0_type_otherPKCS7_set_attributesPKCS7_set_cipherPKCS7_set_contentPKCS7_set_digestPKCS7_set_signed_attributesPKCS7_set_typePKCS7_signPKCS7_sign_add_signerPKCS7_signatureVerifyPKCS7_simple_smimecapPKCS7_streamPKCS7_to_TS_TST_INFOPKCS7_verifyPKCS8_PRIV_KEY_INFO_freePKCS8_PRIV_KEY_INFO_itPKCS8_PRIV_KEY_INFO_newPKCS8_add_keyusagePKCS8_decryptPKCS8_encryptPKCS8_pkey_get0PKCS8_pkey_set0PKCS8_set_brokenPKEY_USAGE_PERIOD_freePKEY_USAGE_PERIOD_itPKEY_USAGE_PERIOD_newPOLICYINFO_freePOLICYINFO_itPOLICYINFO_newPOLICYQUALINFO_freePOLICYQUALINFO_itPOLICYQUALINFO_newPOLICY_CONSTRAINTS_freePOLICY_CONSTRAINTS_itPOLICY_CONSTRAINTS_newPOLICY_MAPPINGS_itPOLICY_MAPPING_freePOLICY_MAPPING_itPOLICY_MAPPING_newPROXY_CERT_INFO_EXTENSION_freePROXY_CERT_INFO_EXTENSION_itPROXY_CERT_INFO_EXTENSION_newPROXY_POLICY_freePROXY_POLICY_itPROXY_POLICY_newRAND_SSLeayRAND_addRAND_bytesRAND_cleanupRAND_egdRAND_egd_bytesRAND_eventRAND_file_nameRAND_get_rand_methodRAND_load_fileRAND_pollRAND_pseudo_bytesRAND_query_egd_bytesRAND_screenRAND_seedRAND_set_rand_engineRAND_set_rand_methodRAND_statusRAND_write_fileRC2_cbc_encryptRC2_cfb64_encryptRC2_decryptRC2_ecb_encryptRC2_encryptRC2_ofb64_encryptRC2_set_keyRC4RC4_optionsRC4_set_keyRIPEMD160RIPEMD160_FinalRIPEMD160_InitRIPEMD160_TransformRIPEMD160_UpdateRSAPrivateKey_dupRSAPrivateKey_itRSAPublicKey_dupRSAPublicKey_itRSA_OAEP_PARAMS_freeRSA_OAEP_PARAMS_itRSA_OAEP_PARAMS_newRSA_PKCS1_SSLeayRSA_PSS_PARAMS_freeRSA_PSS_PARAMS_itRSA_PSS_PARAMS_newRSA_X931_hash_idRSA_blinding_offRSA_blinding_onRSA_check_keyRSA_flagsRSA_freeRSA_generate_keyRSA_generate_key_exRSA_get_default_methodRSA_get_ex_dataRSA_get_ex_new_indexRSA_get_methodRSA_memory_lockRSA_newRSA_new_methodRSA_null_methodRSA_padding_add_PKCS1_OAEPRSA_padding_add_PKCS1_OAEP_mgf1RSA_padding_add_PKCS1_PSSRSA_padding_add_PKCS1_PSS_mgf1RSA_padding_add_PKCS1_type_1RSA_padding_add_PKCS1_type_2RSA_padding_add_SSLv23RSA_padding_add_X931RSA_padding_add_noneRSA_padding_check_PKCS1_OAEPRSA_padding_check_PKCS1_OAEP_mgf1RSA_padding_check_PKCS1_type_1RSA_padding_check_PKCS1_type_2RSA_padding_check_SSLv23RSA_padding_check_X931RSA_padding_check_noneRSA_printRSA_print_fpRSA_private_decryptRSA_private_encryptRSA_public_decryptRSA_public_encryptRSA_set_default_methodRSA_set_ex_dataRSA_set_methodRSA_setup_blindingRSA_signRSA_sign_ASN1_OCTET_STRINGRSA_sizeRSA_up_refRSA_verifyRSA_verify_ASN1_OCTET_STRINGRSA_verify_PKCS1_PSSRSA_verify_PKCS1_PSS_mgf1SEED_cbc_encryptSEED_cfb128_encryptSEED_decryptSEED_ecb_encryptSEED_encryptSEED_ofb128_encryptSEED_set_keySHASHA1SHA1_FinalSHA1_InitSHA1_TransformSHA1_UpdateSHA224SHA224_FinalSHA224_InitSHA224_UpdateSHA256SHA256_FinalSHA256_InitSHA256_TransformSHA256_UpdateSHA384SHA384_FinalSHA384_InitSHA384_UpdateSHA512SHA512_FinalSHA512_InitSHA512_TransformSHA512_UpdateSHA_FinalSHA_InitSHA_TransformSHA_UpdateSMIME_crlf_copySMIME_read_ASN1SMIME_read_CMSSMIME_read_PKCS7SMIME_textSMIME_write_ASN1SMIME_write_CMSSMIME_write_PKCS7SRP_Calc_ASRP_Calc_BSRP_Calc_client_keySRP_Calc_server_keySRP_Calc_uSRP_Calc_xSRP_VBASE_freeSRP_VBASE_get1_by_userSRP_VBASE_get_by_userSRP_VBASE_initSRP_VBASE_newSRP_Verify_A_mod_NSRP_Verify_B_mod_NSRP_check_known_gN_paramSRP_create_verifierSRP_create_verifier_BNSRP_get_default_gNSRP_user_pwd_freeSSLeaySSLeay_versionSXNETID_freeSXNETID_itSXNETID_newSXNET_add_id_INTEGERSXNET_add_id_ascSXNET_add_id_ulongSXNET_freeSXNET_get_id_INTEGERSXNET_get_id_ascSXNET_get_id_ulongSXNET_itSXNET_newTS_ACCURACY_dupTS_ACCURACY_freeTS_ACCURACY_get_microsTS_ACCURACY_get_millisTS_ACCURACY_get_secondsTS_ACCURACY_newTS_ACCURACY_set_microsTS_ACCURACY_set_millisTS_ACCURACY_set_secondsTS_ASN1_INTEGER_print_bioTS_CONF_get_tsa_sectionTS_CONF_load_certTS_CONF_load_certsTS_CONF_load_keyTS_CONF_set_accuracyTS_CONF_set_certsTS_CONF_set_clock_precision_digitsTS_CONF_set_crypto_deviceTS_CONF_set_def_policyTS_CONF_set_default_engineTS_CONF_set_digestsTS_CONF_set_ess_cert_id_chainTS_CONF_set_orderingTS_CONF_set_policiesTS_CONF_set_serialTS_CONF_set_signer_certTS_CONF_set_signer_keyTS_CONF_set_tsa_nameTS_MSG_IMPRINT_dupTS_MSG_IMPRINT_freeTS_MSG_IMPRINT_get_algoTS_MSG_IMPRINT_get_msgTS_MSG_IMPRINT_newTS_MSG_IMPRINT_print_bioTS_MSG_IMPRINT_set_algoTS_MSG_IMPRINT_set_msgTS_OBJ_print_bioTS_REQ_add_extTS_REQ_delete_extTS_REQ_dupTS_REQ_ext_freeTS_REQ_freeTS_REQ_get_cert_reqTS_REQ_get_extTS_REQ_get_ext_by_NIDTS_REQ_get_ext_by_OBJTS_REQ_get_ext_by_criticalTS_REQ_get_ext_countTS_REQ_get_ext_d2iTS_REQ_get_extsTS_REQ_get_msg_imprintTS_REQ_get_nonceTS_REQ_get_policy_idTS_REQ_get_versionTS_REQ_newTS_REQ_print_bioTS_REQ_set_cert_reqTS_REQ_set_msg_imprintTS_REQ_set_nonceTS_REQ_set_policy_idTS_REQ_set_versionTS_REQ_to_TS_VERIFY_CTXTS_RESP_CTX_add_failure_infoTS_RESP_CTX_add_flagsTS_RESP_CTX_add_mdTS_RESP_CTX_add_policyTS_RESP_CTX_freeTS_RESP_CTX_get_requestTS_RESP_CTX_get_tst_infoTS_RESP_CTX_newTS_RESP_CTX_set_accuracyTS_RESP_CTX_set_certsTS_RESP_CTX_set_clock_precision_digitsTS_RESP_CTX_set_def_policyTS_RESP_CTX_set_extension_cbTS_RESP_CTX_set_serial_cbTS_RESP_CTX_set_signer_certTS_RESP_CTX_set_signer_keyTS_RESP_CTX_set_status_infoTS_RESP_CTX_set_status_info_condTS_RESP_CTX_set_time_cbTS_RESP_create_responseTS_RESP_dupTS_RESP_freeTS_RESP_get_status_infoTS_RESP_get_tokenTS_RESP_get_tst_infoTS_RESP_newTS_RESP_print_bioTS_RESP_set_status_infoTS_RESP_set_tst_infoTS_RESP_verify_responseTS_RESP_verify_signatureTS_RESP_verify_tokenTS_STATUS_INFO_dupTS_STATUS_INFO_freeTS_STATUS_INFO_newTS_STATUS_INFO_print_bioTS_TST_INFO_add_extTS_TST_INFO_delete_extTS_TST_INFO_dupTS_TST_INFO_ext_freeTS_TST_INFO_freeTS_TST_INFO_get_accuracyTS_TST_INFO_get_extTS_TST_INFO_get_ext_by_NIDTS_TST_INFO_get_ext_by_OBJTS_TST_INFO_get_ext_by_criticalTS_TST_INFO_get_ext_countTS_TST_INFO_get_ext_d2iTS_TST_INFO_get_extsTS_TST_INFO_get_msg_imprintTS_TST_INFO_get_nonceTS_TST_INFO_get_orderingTS_TST_INFO_get_policy_idTS_TST_INFO_get_serialTS_TST_INFO_get_timeTS_TST_INFO_get_tsaTS_TST_INFO_get_versionTS_TST_INFO_newTS_TST_INFO_print_bioTS_TST_INFO_set_accuracyTS_TST_INFO_set_msg_imprintTS_TST_INFO_set_nonceTS_TST_INFO_set_orderingTS_TST_INFO_set_policy_idTS_TST_INFO_set_serialTS_TST_INFO_set_timeTS_TST_INFO_set_tsaTS_TST_INFO_set_versionTS_VERIFY_CTX_cleanupTS_VERIFY_CTX_freeTS_VERIFY_CTX_initTS_VERIFY_CTX_newTS_X509_ALGOR_print_bioTS_ext_print_bioTXT_DB_create_indexTXT_DB_freeTXT_DB_get_by_indexTXT_DB_insertTXT_DB_readTXT_DB_writeUI_OpenSSLUI_UTIL_read_pwUI_UTIL_read_pw_stringUI_add_error_stringUI_add_info_stringUI_add_input_booleanUI_add_input_stringUI_add_user_dataUI_add_verify_stringUI_construct_promptUI_create_methodUI_ctrlUI_destroy_methodUI_dup_error_stringUI_dup_info_stringUI_dup_input_booleanUI_dup_input_stringUI_dup_verify_stringUI_freeUI_get0_action_stringUI_get0_output_stringUI_get0_resultUI_get0_result_stringUI_get0_test_stringUI_get0_user_dataUI_get_default_methodUI_get_ex_dataUI_get_ex_new_indexUI_get_input_flagsUI_get_methodUI_get_result_maxsizeUI_get_result_minsizeUI_get_string_typeUI_method_get_closerUI_method_get_flusherUI_method_get_openerUI_method_get_prompt_constructorUI_method_get_readerUI_method_get_writerUI_method_set_closerUI_method_set_flusherUI_method_set_openerUI_method_set_prompt_constructorUI_method_set_readerUI_method_set_writerUI_newUI_new_methodUI_processUI_set_default_methodUI_set_ex_dataUI_set_methodUI_set_resultUSERNOTICE_freeUSERNOTICE_itUSERNOTICE_newUTF8_getcUTF8_putcWHIRLPOOLWHIRLPOOL_BitUpdateWHIRLPOOL_FinalWHIRLPOOL_InitWHIRLPOOL_UpdateX509V3_EXT_CRL_add_confX509V3_EXT_CRL_add_nconfX509V3_EXT_REQ_add_confX509V3_EXT_REQ_add_nconfX509V3_EXT_addX509V3_EXT_add_aliasX509V3_EXT_add_confX509V3_EXT_add_listX509V3_EXT_add_nconfX509V3_EXT_add_nconf_skX509V3_EXT_cleanupX509V3_EXT_confX509V3_EXT_conf_nidX509V3_EXT_d2iX509V3_EXT_freeX509V3_EXT_getX509V3_EXT_get_nidX509V3_EXT_i2dX509V3_EXT_nconfX509V3_EXT_nconf_nidX509V3_EXT_printX509V3_EXT_print_fpX509V3_EXT_val_prnX509V3_NAME_from_sectionX509V3_add1_i2dX509V3_add_standard_extensionsX509V3_add_valueX509V3_add_value_boolX509V3_add_value_bool_nfX509V3_add_value_intX509V3_add_value_ucharX509V3_conf_freeX509V3_extensions_printX509V3_get_d2iX509V3_get_sectionX509V3_get_stringX509V3_get_value_boolX509V3_get_value_intX509V3_parse_listX509V3_section_freeX509V3_set_conf_lhashX509V3_set_ctxX509V3_set_nconfX509V3_string_freeX509_ALGORS_itX509_ALGOR_cmpX509_ALGOR_dupX509_ALGOR_freeX509_ALGOR_get0X509_ALGOR_itX509_ALGOR_newX509_ALGOR_set0X509_ALGOR_set_mdX509_ATTRIBUTE_countX509_ATTRIBUTE_createX509_ATTRIBUTE_create_by_NIDX509_ATTRIBUTE_create_by_OBJX509_ATTRIBUTE_create_by_txtX509_ATTRIBUTE_dupX509_ATTRIBUTE_freeX509_ATTRIBUTE_get0_dataX509_ATTRIBUTE_get0_objectX509_ATTRIBUTE_get0_typeX509_ATTRIBUTE_itX509_ATTRIBUTE_newX509_ATTRIBUTE_set1_dataX509_ATTRIBUTE_set1_objectX509_CERT_AUX_freeX509_CERT_AUX_itX509_CERT_AUX_newX509_CERT_AUX_printX509_CERT_PAIR_freeX509_CERT_PAIR_itX509_CERT_PAIR_newX509_CINF_freeX509_CINF_itX509_CINF_newX509_CRL_INFO_freeX509_CRL_INFO_itX509_CRL_INFO_newX509_CRL_METHOD_freeX509_CRL_METHOD_newX509_CRL_add0_revokedX509_CRL_add1_ext_i2dX509_CRL_add_extX509_CRL_check_suitebX509_CRL_cmpX509_CRL_delete_extX509_CRL_diffX509_CRL_digestX509_CRL_dupX509_CRL_freeX509_CRL_get0_by_certX509_CRL_get0_by_serialX509_CRL_get_extX509_CRL_get_ext_by_NIDX509_CRL_get_ext_by_OBJX509_CRL_get_ext_by_criticalX509_CRL_get_ext_countX509_CRL_get_ext_d2iX509_CRL_get_meth_dataX509_CRL_http_nbioX509_CRL_itX509_CRL_matchX509_CRL_newX509_CRL_printX509_CRL_print_fpX509_CRL_set_default_methodX509_CRL_set_issuer_nameX509_CRL_set_lastUpdateX509_CRL_set_meth_dataX509_CRL_set_nextUpdateX509_CRL_set_versionX509_CRL_signX509_CRL_sign_ctxX509_CRL_sortX509_CRL_verifyX509_EXTENSIONS_itX509_EXTENSION_create_by_NIDX509_EXTENSION_create_by_OBJX509_EXTENSION_dupX509_EXTENSION_freeX509_EXTENSION_get_criticalX509_EXTENSION_get_dataX509_EXTENSION_get_objectX509_EXTENSION_itX509_EXTENSION_newX509_EXTENSION_set_criticalX509_EXTENSION_set_dataX509_EXTENSION_set_objectX509_INFO_freeX509_INFO_newX509_LOOKUP_by_aliasX509_LOOKUP_by_fingerprintX509_LOOKUP_by_issuer_serialX509_LOOKUP_by_subjectX509_LOOKUP_ctrlX509_LOOKUP_fileX509_LOOKUP_freeX509_LOOKUP_hash_dirX509_LOOKUP_initX509_LOOKUP_newX509_LOOKUP_shutdownX509_NAME_ENTRY_create_by_NIDX509_NAME_ENTRY_create_by_OBJX509_NAME_ENTRY_create_by_txtX509_NAME_ENTRY_dupX509_NAME_ENTRY_freeX509_NAME_ENTRY_get_dataX509_NAME_ENTRY_get_objectX509_NAME_ENTRY_itX509_NAME_ENTRY_newX509_NAME_ENTRY_set_dataX509_NAME_ENTRY_set_objectX509_NAME_add_entryX509_NAME_add_entry_by_NIDX509_NAME_add_entry_by_OBJX509_NAME_add_entry_by_txtX509_NAME_cmpX509_NAME_delete_entryX509_NAME_digestX509_NAME_dupX509_NAME_entry_countX509_NAME_freeX509_NAME_get_entryX509_NAME_get_index_by_NIDX509_NAME_get_index_by_OBJX509_NAME_get_text_by_NIDX509_NAME_get_text_by_OBJX509_NAME_hashX509_NAME_hash_oldX509_NAME_itX509_NAME_newX509_NAME_onelineX509_NAME_printX509_NAME_print_exX509_NAME_print_ex_fpX509_NAME_setX509_OBJECT_free_contentsX509_OBJECT_idx_by_subjectX509_OBJECT_retrieve_by_subjectX509_OBJECT_retrieve_matchX509_OBJECT_up_ref_countX509_PKEY_freeX509_PKEY_newX509_POLICY_NODE_printX509_PUBKEY_freeX509_PUBKEY_getX509_PUBKEY_get0_paramX509_PUBKEY_itX509_PUBKEY_newX509_PUBKEY_setX509_PUBKEY_set0_paramX509_PURPOSE_addX509_PURPOSE_cleanupX509_PURPOSE_get0X509_PURPOSE_get0_nameX509_PURPOSE_get0_snameX509_PURPOSE_get_by_idX509_PURPOSE_get_by_snameX509_PURPOSE_get_countX509_PURPOSE_get_idX509_PURPOSE_get_trustX509_PURPOSE_setX509_REQ_INFO_freeX509_REQ_INFO_itX509_REQ_INFO_newX509_REQ_add1_attrX509_REQ_add1_attr_by_NIDX509_REQ_add1_attr_by_OBJX509_REQ_add1_attr_by_txtX509_REQ_add_extensionsX509_REQ_add_extensions_nidX509_REQ_check_private_keyX509_REQ_delete_attrX509_REQ_digestX509_REQ_dupX509_REQ_extension_nidX509_REQ_freeX509_REQ_get1_emailX509_REQ_get_attrX509_REQ_get_attr_by_NIDX509_REQ_get_attr_by_OBJX509_REQ_get_attr_countX509_REQ_get_extension_nidsX509_REQ_get_extensionsX509_REQ_get_pubkeyX509_REQ_itX509_REQ_newX509_REQ_printX509_REQ_print_exX509_REQ_print_fpX509_REQ_set_extension_nidsX509_REQ_set_pubkeyX509_REQ_set_subject_nameX509_REQ_set_versionX509_REQ_signX509_REQ_sign_ctxX509_REQ_to_X509X509_REQ_verifyX509_REVOKED_add1_ext_i2dX509_REVOKED_add_extX509_REVOKED_delete_extX509_REVOKED_dupX509_REVOKED_freeX509_REVOKED_get_extX509_REVOKED_get_ext_by_NIDX509_REVOKED_get_ext_by_OBJX509_REVOKED_get_ext_by_criticalX509_REVOKED_get_ext_countX509_REVOKED_get_ext_d2iX509_REVOKED_itX509_REVOKED_newX509_REVOKED_set_revocationDateX509_REVOKED_set_serialNumberX509_SIG_freeX509_SIG_itX509_SIG_newX509_STORE_CTX_cleanupX509_STORE_CTX_freeX509_STORE_CTX_get0_current_crlX509_STORE_CTX_get0_current_issuerX509_STORE_CTX_get0_paramX509_STORE_CTX_get0_parent_ctxX509_STORE_CTX_get0_policy_treeX509_STORE_CTX_get0_storeX509_STORE_CTX_get1_chainX509_STORE_CTX_get1_issuerX509_STORE_CTX_get_chainX509_STORE_CTX_get_current_certX509_STORE_CTX_get_errorX509_STORE_CTX_get_error_depthX509_STORE_CTX_get_ex_dataX509_STORE_CTX_get_ex_new_indexX509_STORE_CTX_get_explicit_policyX509_STORE_CTX_initX509_STORE_CTX_newX509_STORE_CTX_purpose_inheritX509_STORE_CTX_set0_crlsX509_STORE_CTX_set0_paramX509_STORE_CTX_set_certX509_STORE_CTX_set_chainX509_STORE_CTX_set_defaultX509_STORE_CTX_set_depthX509_STORE_CTX_set_errorX509_STORE_CTX_set_ex_dataX509_STORE_CTX_set_flagsX509_STORE_CTX_set_purposeX509_STORE_CTX_set_timeX509_STORE_CTX_set_trustX509_STORE_CTX_set_verify_cbX509_STORE_CTX_trusted_stackX509_STORE_add_certX509_STORE_add_crlX509_STORE_add_lookupX509_STORE_freeX509_STORE_get1_certsX509_STORE_get1_crlsX509_STORE_get_by_subjectX509_STORE_load_locationsX509_STORE_newX509_STORE_set1_paramX509_STORE_set_default_pathsX509_STORE_set_depthX509_STORE_set_flagsX509_STORE_set_lookup_crls_cbX509_STORE_set_purposeX509_STORE_set_trustX509_STORE_set_verify_cbX509_TRUST_addX509_TRUST_cleanupX509_TRUST_get0X509_TRUST_get0_nameX509_TRUST_get_by_idX509_TRUST_get_countX509_TRUST_get_flagsX509_TRUST_get_trustX509_TRUST_setX509_TRUST_set_defaultX509_VAL_freeX509_VAL_itX509_VAL_newX509_VERIFY_PARAM_add0_policyX509_VERIFY_PARAM_add0_tableX509_VERIFY_PARAM_add1_hostX509_VERIFY_PARAM_clear_flagsX509_VERIFY_PARAM_freeX509_VERIFY_PARAM_get0X509_VERIFY_PARAM_get0_nameX509_VERIFY_PARAM_get0_peernameX509_VERIFY_PARAM_get_countX509_VERIFY_PARAM_get_depthX509_VERIFY_PARAM_get_flagsX509_VERIFY_PARAM_inheritX509_VERIFY_PARAM_lookupX509_VERIFY_PARAM_newX509_VERIFY_PARAM_set1X509_VERIFY_PARAM_set1_emailX509_VERIFY_PARAM_set1_hostX509_VERIFY_PARAM_set1_ipX509_VERIFY_PARAM_set1_ip_ascX509_VERIFY_PARAM_set1_nameX509_VERIFY_PARAM_set1_policiesX509_VERIFY_PARAM_set_depthX509_VERIFY_PARAM_set_flagsX509_VERIFY_PARAM_set_hostflagsX509_VERIFY_PARAM_set_purposeX509_VERIFY_PARAM_set_timeX509_VERIFY_PARAM_set_trustX509_VERIFY_PARAM_table_cleanupX509_add1_ext_i2dX509_add1_reject_objectX509_add1_trust_objectX509_add_extX509_alias_get0X509_alias_set1X509_certificate_typeX509_chain_check_suitebX509_chain_up_refX509_check_akidX509_check_caX509_check_emailX509_check_hostX509_check_ipX509_check_ip_ascX509_check_issuedX509_check_private_keyX509_check_purposeX509_check_trustX509_cmpX509_cmp_current_timeX509_cmp_timeX509_delete_extX509_digestX509_dupX509_email_freeX509_find_by_issuer_and_serialX509_find_by_subjectX509_freeX509_get0_pubkey_bitstrX509_get0_signatureX509_get1_emailX509_get1_ocspX509_get_default_cert_areaX509_get_default_cert_dirX509_get_default_cert_dir_envX509_get_default_cert_fileX509_get_default_cert_file_envX509_get_default_private_dirX509_get_ex_dataX509_get_ex_new_indexX509_get_extX509_get_ext_by_NIDX509_get_ext_by_OBJX509_get_ext_by_criticalX509_get_ext_countX509_get_ext_d2iX509_get_issuer_nameX509_get_pubkeyX509_get_pubkey_parametersX509_get_serialNumberX509_get_signature_nidX509_get_subject_nameX509_gmtime_adjX509_http_nbioX509_issuer_and_serial_cmpX509_issuer_and_serial_hashX509_issuer_name_cmpX509_issuer_name_hashX509_issuer_name_hash_oldX509_itX509_keyid_get0X509_keyid_set1X509_load_cert_crl_fileX509_load_cert_fileX509_load_crl_fileX509_newX509_ocspid_printX509_policy_checkX509_policy_level_get0_nodeX509_policy_level_node_countX509_policy_node_get0_parentX509_policy_node_get0_policyX509_policy_node_get0_qualifiersX509_policy_tree_freeX509_policy_tree_get0_levelX509_policy_tree_get0_policiesX509_policy_tree_get0_user_policiesX509_policy_tree_level_countX509_printX509_print_exX509_print_ex_fpX509_print_fpX509_pubkey_digestX509_reject_clearX509_set_ex_dataX509_set_issuer_nameX509_set_notAfterX509_set_notBeforeX509_set_pubkeyX509_set_serialNumberX509_set_subject_nameX509_set_versionX509_signX509_sign_ctxX509_signature_dumpX509_signature_printX509_subject_name_cmpX509_subject_name_hashX509_subject_name_hash_oldX509_supported_extensionX509_time_adjX509_time_adj_exX509_to_X509_REQX509_trust_clearX509_verifyX509_verify_certX509_verify_cert_error_stringX509at_add1_attrX509at_add1_attr_by_NIDX509at_add1_attr_by_OBJX509at_add1_attr_by_txtX509at_delete_attrX509at_get0_data_by_OBJX509at_get_attrX509at_get_attr_by_NIDX509at_get_attr_by_OBJX509at_get_attr_countX509v3_add_extX509v3_delete_extX509v3_get_extX509v3_get_ext_by_NIDX509v3_get_ext_by_OBJX509v3_get_ext_by_criticalX509v3_get_ext_countZLONG_it_ossl_096_des_random_seed_ossl_old_crypt_ossl_old_des_cbc_cksum_ossl_old_des_cbc_encrypt_ossl_old_des_cfb64_encrypt_ossl_old_des_cfb_encrypt_ossl_old_des_crypt_ossl_old_des_decrypt3_ossl_old_des_ecb3_encrypt_ossl_old_des_ecb_encrypt_ossl_old_des_ede3_cbc_encrypt_ossl_old_des_ede3_cfb64_encrypt_ossl_old_des_ede3_ofb64_encrypt_ossl_old_des_enc_read_ossl_old_des_enc_write_ossl_old_des_encrypt_ossl_old_des_encrypt2_ossl_old_des_encrypt3_ossl_old_des_fcrypt_ossl_old_des_is_weak_key_ossl_old_des_key_sched_ossl_old_des_ncbc_encrypt_ossl_old_des_ofb64_encrypt_ossl_old_des_ofb_encrypt_ossl_old_des_options_ossl_old_des_pcbc_encrypt_ossl_old_des_quad_cksum_ossl_old_des_random_key_ossl_old_des_random_seed_ossl_old_des_read_2passwords_ossl_old_des_read_password_ossl_old_des_read_pw_ossl_old_des_read_pw_string_ossl_old_des_set_key_ossl_old_des_set_odd_parity_ossl_old_des_string_to_2keys_ossl_old_des_string_to_key_ossl_old_des_xcbc_encrypt_shadow_DES_check_key_shadow_DES_rw_modea2d_ASN1_OBJECTa2i_ASN1_ENUMERATEDa2i_ASN1_INTEGERa2i_ASN1_STRINGa2i_GENERAL_NAMEa2i_IPADDRESSa2i_IPADDRESS_NCa2i_ipaddasn1_Finishasn1_GetSequenceasn1_add_errorasn1_const_Finishasn1_do_adbasn1_do_lockasn1_enc_freeasn1_enc_initasn1_enc_restoreasn1_enc_saveasn1_ex_c2iasn1_ex_i2casn1_get_choice_selectorasn1_get_field_ptrasn1_set_choice_selectorb2i_PVK_biob2i_PrivateKeyb2i_PrivateKey_biob2i_PublicKeyb2i_PublicKey_biobn_add_wordsbn_div_wordsbn_dup_expandbn_expand2bn_mul_add_wordsbn_mul_wordsbn_sqr_wordsbn_sub_wordsc2i_ASN1_BIT_STRINGc2i_ASN1_INTEGERc2i_ASN1_OBJECTcheck_deferd2i_ACCESS_DESCRIPTIONd2i_ASN1_BIT_STRINGd2i_ASN1_BMPSTRINGd2i_ASN1_BOOLEANd2i_ASN1_ENUMERATEDd2i_ASN1_GENERALIZEDTIMEd2i_ASN1_GENERALSTRINGd2i_ASN1_IA5STRINGd2i_ASN1_INTEGERd2i_ASN1_NULLd2i_ASN1_OBJECTd2i_ASN1_OCTET_STRINGd2i_ASN1_PRINTABLEd2i_ASN1_PRINTABLESTRINGd2i_ASN1_SEQUENCE_ANYd2i_ASN1_SETd2i_ASN1_SET_ANYd2i_ASN1_T61STRINGd2i_ASN1_TIMEd2i_ASN1_TYPEd2i_ASN1_UINTEGERd2i_ASN1_UNIVERSALSTRINGd2i_ASN1_UTCTIMEd2i_ASN1_UTF8STRINGd2i_ASN1_VISIBLESTRINGd2i_ASN1_bytesd2i_ASN1_type_bytesd2i_AUTHORITY_INFO_ACCESSd2i_AUTHORITY_KEYIDd2i_AutoPrivateKeyd2i_BASIC_CONSTRAINTSd2i_CERTIFICATEPOLICIESd2i_CMS_ContentInfod2i_CMS_ReceiptRequestd2i_CMS_biod2i_CRL_DIST_POINTSd2i_DHparamsd2i_DHxparamsd2i_DIRECTORYSTRINGd2i_DISPLAYTEXTd2i_DIST_POINTd2i_DIST_POINT_NAMEd2i_DSAPrivateKeyd2i_DSAPrivateKey_biod2i_DSAPrivateKey_fpd2i_DSAPublicKeyd2i_DSA_PUBKEYd2i_DSA_PUBKEY_biod2i_DSA_PUBKEY_fpd2i_DSA_SIGd2i_DSAparamsd2i_ECDSA_SIGd2i_ECPKParametersd2i_ECParametersd2i_ECPrivateKeyd2i_ECPrivateKey_biod2i_ECPrivateKey_fpd2i_EC_PUBKEYd2i_EC_PUBKEY_biod2i_EC_PUBKEY_fpd2i_EDIPARTYNAMEd2i_ESS_CERT_IDd2i_ESS_ISSUER_SERIALd2i_ESS_SIGNING_CERTd2i_EXTENDED_KEY_USAGEd2i_GENERAL_NAMEd2i_GENERAL_NAMESd2i_ISSUING_DIST_POINTd2i_KRB5_APREQd2i_KRB5_APREQBODYd2i_KRB5_AUTHDATAd2i_KRB5_AUTHENTd2i_KRB5_AUTHENTBODYd2i_KRB5_CHECKSUMd2i_KRB5_ENCDATAd2i_KRB5_ENCKEYd2i_KRB5_PRINCNAMEd2i_KRB5_TICKETd2i_KRB5_TKTBODYd2i_NETSCAPE_CERT_SEQUENCEd2i_NETSCAPE_SPKACd2i_NETSCAPE_SPKId2i_NETSCAPE_X509d2i_NOTICEREFd2i_Netscape_RSAd2i_OCSP_BASICRESPd2i_OCSP_CERTIDd2i_OCSP_CERTSTATUSd2i_OCSP_CRLIDd2i_OCSP_ONEREQd2i_OCSP_REQINFOd2i_OCSP_REQUESTd2i_OCSP_RESPBYTESd2i_OCSP_RESPDATAd2i_OCSP_RESPIDd2i_OCSP_RESPONSEd2i_OCSP_REVOKEDINFOd2i_OCSP_SERVICELOCd2i_OCSP_SIGNATUREd2i_OCSP_SINGLERESPd2i_OTHERNAMEd2i_PBE2PARAMd2i_PBEPARAMd2i_PBKDF2PARAMd2i_PKCS12d2i_PKCS12_BAGSd2i_PKCS12_MAC_DATAd2i_PKCS12_SAFEBAGd2i_PKCS12_biod2i_PKCS12_fpd2i_PKCS7d2i_PKCS7_DIGESTd2i_PKCS7_ENCRYPTd2i_PKCS7_ENC_CONTENTd2i_PKCS7_ENVELOPEd2i_PKCS7_ISSUER_AND_SERIALd2i_PKCS7_RECIP_INFOd2i_PKCS7_SIGNEDd2i_PKCS7_SIGNER_INFOd2i_PKCS7_SIGN_ENVELOPEd2i_PKCS7_biod2i_PKCS7_fpd2i_PKCS8PrivateKey_biod2i_PKCS8PrivateKey_fpd2i_PKCS8_PRIV_KEY_INFOd2i_PKCS8_PRIV_KEY_INFO_biod2i_PKCS8_PRIV_KEY_INFO_fpd2i_PKCS8_biod2i_PKCS8_fpd2i_PKEY_USAGE_PERIODd2i_POLICYINFOd2i_POLICYQUALINFOd2i_PROXY_CERT_INFO_EXTENSIONd2i_PROXY_POLICYd2i_PUBKEYd2i_PUBKEY_biod2i_PUBKEY_fpd2i_PrivateKeyd2i_PrivateKey_biod2i_PrivateKey_fpd2i_PublicKeyd2i_RSAPrivateKeyd2i_RSAPrivateKey_biod2i_RSAPrivateKey_fpd2i_RSAPublicKeyd2i_RSAPublicKey_biod2i_RSAPublicKey_fpd2i_RSA_NETd2i_RSA_OAEP_PARAMSd2i_RSA_PSS_PARAMSd2i_RSA_PUBKEYd2i_RSA_PUBKEY_biod2i_RSA_PUBKEY_fpd2i_SXNETd2i_SXNETIDd2i_TS_ACCURACYd2i_TS_MSG_IMPRINTd2i_TS_MSG_IMPRINT_biod2i_TS_MSG_IMPRINT_fpd2i_TS_REQd2i_TS_REQ_biod2i_TS_REQ_fpd2i_TS_RESPd2i_TS_RESP_biod2i_TS_RESP_fpd2i_TS_STATUS_INFOd2i_TS_TST_INFOd2i_TS_TST_INFO_biod2i_TS_TST_INFO_fpd2i_USERNOTICEd2i_X509d2i_X509_ALGORd2i_X509_ALGORSd2i_X509_ATTRIBUTEd2i_X509_AUXd2i_X509_CERT_AUXd2i_X509_CERT_PAIRd2i_X509_CINFd2i_X509_CRLd2i_X509_CRL_INFOd2i_X509_CRL_biod2i_X509_CRL_fpd2i_X509_EXTENSIONd2i_X509_EXTENSIONSd2i_X509_NAMEd2i_X509_NAME_ENTRYd2i_X509_PKEYd2i_X509_PUBKEYd2i_X509_REQd2i_X509_REQ_INFOd2i_X509_REQ_biod2i_X509_REQ_fpd2i_X509_REVOKEDd2i_X509_SIGd2i_X509_VALd2i_X509_biod2i_X509_fpget_rfc2409_prime_1024get_rfc2409_prime_768get_rfc3526_prime_1536get_rfc3526_prime_2048get_rfc3526_prime_3072get_rfc3526_prime_4096get_rfc3526_prime_6144get_rfc3526_prime_8192hex_to_stringi2a_ACCESS_DESCRIPTIONi2a_ASN1_ENUMERATEDi2a_ASN1_INTEGERi2a_ASN1_OBJECTi2a_ASN1_STRINGi2b_PVK_bioi2b_PrivateKey_bioi2b_PublicKey_bioi2c_ASN1_BIT_STRINGi2c_ASN1_INTEGERi2d_ACCESS_DESCRIPTIONi2d_ASN1_BIT_STRINGi2d_ASN1_BMPSTRINGi2d_ASN1_BOOLEANi2d_ASN1_ENUMERATEDi2d_ASN1_GENERALIZEDTIMEi2d_ASN1_GENERALSTRINGi2d_ASN1_IA5STRINGi2d_ASN1_INTEGERi2d_ASN1_NULLi2d_ASN1_OBJECTi2d_ASN1_OCTET_STRINGi2d_ASN1_PRINTABLEi2d_ASN1_PRINTABLESTRINGi2d_ASN1_SEQUENCE_ANYi2d_ASN1_SETi2d_ASN1_SET_ANYi2d_ASN1_T61STRINGi2d_ASN1_TIMEi2d_ASN1_TYPEi2d_ASN1_UNIVERSALSTRINGi2d_ASN1_UTCTIMEi2d_ASN1_UTF8STRINGi2d_ASN1_VISIBLESTRINGi2d_ASN1_bio_streami2d_ASN1_bytesi2d_AUTHORITY_INFO_ACCESSi2d_AUTHORITY_KEYIDi2d_BASIC_CONSTRAINTSi2d_CERTIFICATEPOLICIESi2d_CMS_ContentInfoi2d_CMS_ReceiptRequesti2d_CMS_bioi2d_CMS_bio_streami2d_CRL_DIST_POINTSi2d_DHparamsi2d_DHxparamsi2d_DIRECTORYSTRINGi2d_DISPLAYTEXTi2d_DIST_POINTi2d_DIST_POINT_NAMEi2d_DSAPrivateKeyi2d_DSAPrivateKey_bioi2d_DSAPrivateKey_fpi2d_DSAPublicKeyi2d_DSA_PUBKEYi2d_DSA_PUBKEY_bioi2d_DSA_PUBKEY_fpi2d_DSA_SIGi2d_DSAparamsi2d_ECDSA_SIGi2d_ECPKParametersi2d_ECParametersi2d_ECPrivateKeyi2d_ECPrivateKey_bioi2d_ECPrivateKey_fpi2d_EC_PUBKEYi2d_EC_PUBKEY_bioi2d_EC_PUBKEY_fpi2d_EDIPARTYNAMEi2d_ESS_CERT_IDi2d_ESS_ISSUER_SERIALi2d_ESS_SIGNING_CERTi2d_EXTENDED_KEY_USAGEi2d_GENERAL_NAMEi2d_GENERAL_NAMESi2d_ISSUING_DIST_POINTi2d_KRB5_APREQi2d_KRB5_APREQBODYi2d_KRB5_AUTHDATAi2d_KRB5_AUTHENTi2d_KRB5_AUTHENTBODYi2d_KRB5_CHECKSUMi2d_KRB5_ENCDATAi2d_KRB5_ENCKEYi2d_KRB5_PRINCNAMEi2d_KRB5_TICKETi2d_KRB5_TKTBODYi2d_NETSCAPE_CERT_SEQUENCEi2d_NETSCAPE_SPKACi2d_NETSCAPE_SPKIi2d_NETSCAPE_X509i2d_NOTICEREFi2d_Netscape_RSAi2d_OCSP_BASICRESPi2d_OCSP_CERTIDi2d_OCSP_CERTSTATUSi2d_OCSP_CRLIDi2d_OCSP_ONEREQi2d_OCSP_REQINFOi2d_OCSP_REQUESTi2d_OCSP_RESPBYTESi2d_OCSP_RESPDATAi2d_OCSP_RESPIDi2d_OCSP_RESPONSEi2d_OCSP_REVOKEDINFOi2d_OCSP_SERVICELOCi2d_OCSP_SIGNATUREi2d_OCSP_SINGLERESPi2d_OTHERNAMEi2d_PBE2PARAMi2d_PBEPARAMi2d_PBKDF2PARAMi2d_PKCS12i2d_PKCS12_BAGSi2d_PKCS12_MAC_DATAi2d_PKCS12_SAFEBAGi2d_PKCS12_bioi2d_PKCS12_fpi2d_PKCS7i2d_PKCS7_DIGESTi2d_PKCS7_ENCRYPTi2d_PKCS7_ENC_CONTENTi2d_PKCS7_ENVELOPEi2d_PKCS7_ISSUER_AND_SERIALi2d_PKCS7_NDEFi2d_PKCS7_RECIP_INFOi2d_PKCS7_SIGNEDi2d_PKCS7_SIGNER_INFOi2d_PKCS7_SIGN_ENVELOPEi2d_PKCS7_bioi2d_PKCS7_bio_streami2d_PKCS7_fpi2d_PKCS8PrivateKeyInfo_bioi2d_PKCS8PrivateKeyInfo_fpi2d_PKCS8PrivateKey_bioi2d_PKCS8PrivateKey_fpi2d_PKCS8PrivateKey_nid_bioi2d_PKCS8PrivateKey_nid_fpi2d_PKCS8_PRIV_KEY_INFOi2d_PKCS8_PRIV_KEY_INFO_bioi2d_PKCS8_PRIV_KEY_INFO_fpi2d_PKCS8_bioi2d_PKCS8_fpi2d_PKEY_USAGE_PERIODi2d_POLICYINFOi2d_POLICYQUALINFOi2d_PROXY_CERT_INFO_EXTENSIONi2d_PROXY_POLICYi2d_PUBKEYi2d_PUBKEY_bioi2d_PUBKEY_fpi2d_PrivateKeyi2d_PrivateKey_bioi2d_PrivateKey_fpi2d_PublicKeyi2d_RSAPrivateKeyi2d_RSAPrivateKey_bioi2d_RSAPrivateKey_fpi2d_RSAPublicKeyi2d_RSAPublicKey_bioi2d_RSAPublicKey_fpi2d_RSA_NETi2d_RSA_OAEP_PARAMSi2d_RSA_PSS_PARAMSi2d_RSA_PUBKEYi2d_RSA_PUBKEY_bioi2d_RSA_PUBKEY_fpi2d_SXNETi2d_SXNETIDi2d_TS_ACCURACYi2d_TS_MSG_IMPRINTi2d_TS_MSG_IMPRINT_bioi2d_TS_MSG_IMPRINT_fpi2d_TS_REQi2d_TS_REQ_bioi2d_TS_REQ_fpi2d_TS_RESPi2d_TS_RESP_bioi2d_TS_RESP_fpi2d_TS_STATUS_INFOi2d_TS_TST_INFOi2d_TS_TST_INFO_bioi2d_TS_TST_INFO_fpi2d_USERNOTICEi2d_X509i2d_X509_ALGORi2d_X509_ALGORSi2d_X509_ATTRIBUTEi2d_X509_AUXi2d_X509_CERT_AUXi2d_X509_CERT_PAIRi2d_X509_CINFi2d_X509_CRLi2d_X509_CRL_INFOi2d_X509_CRL_bioi2d_X509_CRL_fpi2d_X509_EXTENSIONi2d_X509_EXTENSIONSi2d_X509_NAMEi2d_X509_NAME_ENTRYi2d_X509_PKEYi2d_X509_PUBKEYi2d_X509_REQi2d_X509_REQ_INFOi2d_X509_REQ_bioi2d_X509_REQ_fpi2d_X509_REVOKEDi2d_X509_SIGi2d_X509_VALi2d_X509_bioi2d_X509_fpi2d_re_X509_tbsi2o_ECPublicKeyi2s_ASN1_ENUMERATEDi2s_ASN1_ENUMERATED_TABLEi2s_ASN1_INTEGERi2s_ASN1_OCTET_STRINGi2t_ASN1_OBJECTi2v_ASN1_BIT_STRINGi2v_GENERAL_NAMEi2v_GENERAL_NAMESidea_cbc_encryptidea_cfb64_encryptidea_ecb_encryptidea_encryptidea_ofb64_encryptidea_optionsidea_set_decrypt_keyidea_set_encrypt_keylh_deletelh_doalllh_doall_arglh_freelh_insertlh_newlh_node_statslh_node_stats_biolh_node_usage_statslh_node_usage_stats_biolh_num_itemslh_retrievelh_statslh_stats_biolh_strhashname_cmpo2i_ECPublicKeypitem_freepitem_newpqueue_findpqueue_freepqueue_insertpqueue_iteratorpqueue_newpqueue_nextpqueue_peekpqueue_poppqueue_printpqueue_sizeprivate_AES_set_decrypt_keyprivate_AES_set_encrypt_keyprivate_RC4_set_keys2i_ASN1_INTEGERs2i_ASN1_OCTET_STRINGsk_deep_copysk_deletesk_delete_ptrsk_dupsk_findsk_find_exsk_freesk_insertsk_is_sortedsk_newsk_new_nullsk_numsk_popsk_pop_freesk_pushsk_setsk_set_cmp_funcsk_shiftsk_sortsk_unshiftsk_valuesk_zerostring_to_hexv2i_ASN1_BIT_STRINGv2i_GENERAL_NAMEv2i_GENERAL_NAMESv2i_GENERAL_NAME_ex_ `1 ]l`0 ]`0 _a1 L^c0 ]f(0 `v``R`B`2``^`eeeeeee fheVeJe4e$ee e"f2fHfbffvfffxedddddd(a4aGetFileTypeWriteFilePGetLastErrorGetCurrentThreadIdhFindCloselFindFirstFileA}FindNextFileACloseHandleFreeLibraryLoadLibraryA SetLastErrorMultiByteToWideCharGetSystemTime]SystemTimeToFileTime-QueryPerformanceCounter GetCurrentProcessIdGetTickCount#GlobalMemoryStatusFlushConsoleInputBuffergIsDebuggerPresentmIsProcessorFeaturePresent!EncodePointerDecodePointerGetSystemTimeAsFileTimeKERNEL32.dllPp0Pp0Pp0P6 0 < 6 < * +p++,P.d@X: pp: P: `: : : : : :  ; e; d4;  q @( @ P\ `t p   @  Ƞ ؠ       0( @4 PD `T pl     ` ̡ ܡ P   4 D p` t        Ģ 0Т dآ e r v f g4 h@ iP np j s w o kģ lԣ t p q m 8s <@B>EHpMMx     @ 0  ̽  ܽ      ( 8 L  \ Pl ` p  ̾         $ 4 0@ @T Pp ` p  Կ    @ , L l        8  X t 0 @ `  p          ( 8 PL `X pt   P  dh e| f g h jȷ k l m n$ @ o\ zl  p | }Ը {   < L d t     Թ    ( < L ~` xx  i  Ⱥ qܺ  y $ H rt     ػ  s t( u\ t  v  ļ    4 P w` L w@w wpw0b0b D  P @ ` P p      p p  0  @ , P < ` L  \  h  x         f l m  d $ h  j p 4 e H g n \ o t k i q  P@PPy %h  %x  % 0 % @ % @% P% `%  % % p% % %( %4 0%< %H %\ %h %x % % % % % % % @% % % %0 %D  %\ %h %| 0% @% P% P% `% p% % % p% % `%$ %4 %L %` %p d% n% q% r% e% f% s% g% m%< o%T t%` h%x p% i% j% k% l%$ X t ``p`  @`L PX l P ` p   0 @    , < L @\ ph x   e m j h f p l nx g o k d i q r( (}"Ss t  d, @ u\  vx w   x y e p$ n8 mT l <  f| g h z  {    |H }  4 ~P oģ `  p   j k ( l q   r  4 L < H  X  l         @  P  `  p $  8  L 0 ` @ t P  `   0  @ P(  @  \  p                , 0 H  \   0        0 , @ X P ` 0   @   p( H @h   ` p   @ \       P  `  @ PD `h p   p    4 `         ( @  X  p             4  P h       0  `  @  P  P < T d  t 0 p  @ P   ` p4 L  d t        $ L x   @            p  0$ < T  l  | P  `    p      hFpFxFFFFFFFFFFFFFGNNN4P`+dP@+pPP+Pf+Pg+ d+ e+P\QP`*Q@*QP*Q`*Q*Qp*Qd* e*$ f*Qg*H j*\ k* h*Ri*(RpxR@RRPR`RR@ TP $T` 0T0 DTp XT dT xT T T T T T T T T U U U $U 0U e?f@fA fB0fCXfDpfEf^@^P__`$_p0_<_d feH_h`uupvvpxx0S xx|00S > p 0SP  P ̄ ܄    0 $@8 D`Tpdt@0 ą؅P  4 H`T0d t@Ȇp`  (<Pp h   ć؇ p 00D\ p0 @ P Ԉ   8Xhx`  p  ȉ     P(`<@ Tp Ȋd p q, ,zH`xr eԋs$<wTpȌ; ܌o<   ,@fTxdtgH ȍt؍h i(H Hudj̎؎t y,kD{X|pl}v~mn, 0`0S @  MH= >   P P2 22`203333@434HH@ħȧ̧Ч p  @  T  ,  0M< =  GGG0P@0S@ P ` p  p     , < T ` t           ,0 <@ LP \` hp |      ` 0  ,p @P T h |`       0   $  <@ TP l0   ` p     0 < L \@ l x   @      $ @ P0 d@ tP ` p        ( 8 D T0 d x  P 0 @  P `  ` p  4p D \@ pP           , @d Xe df pg h  i j k , l  m n  o $ 4 Dp  h $q |r s t u v w x $y Dz T{ h x |      }  $ 8~ H `        0 D X h     T     $ < H ` p          , D X p       ( 4 L d t  (        , < \ l     \  D  ( D , X d d e f g t h u v ( <s Lw lx  hy z { i j k l m (n D| X} lo |p q Dr ~      0 , @ X@ pP x`   p    P ` p   @ 0 D` T tp         $ 4 D T  ` p0 @ P @ \P l | ` p    p    @ `    0    4@ P h |   0 0 @ P ` $p 8 H X t       `  <P P ` pn d v r $e 8 T hf | q w {  s t g h |  4 Di X x} ~ j k l u m H_y x 4o ,p Hz d0       0 @ P `  0 ` p A  (4<PXl  ,8@P`p1 1 1 1 (`@x8   X  X  0 |h$   !@ " " """ "("4p"@p "L@ "\ "t""P """@"P"0"` "  "4 "@@"H"\"p "0" """""" " 0 "4P"H"\p"x`"`"p"`"P" " " " 0 " "4 "L "` "p@""""""P "" "$"8"L"`"x""v"w"d"e""""("@"T"l"""s"f"g"t"",q"D"X"t"h"i""""j" k"l"4m"H"X"\n"l"""""""~"|"`"("Hy"\"t""r"}"p"""","L"`"""z"{"o","H"\x"u"t"D"L X d t          ( 8 H  X l    DP \hP t   0b@  Ь $0.P?@ .`?@.p?P .? .?P.?`.?p.?.?. @.(@.D@.X@.p@.|@.@.@.@` .@ .@0.@@.AP.4A`.PA .dAp.xA.A.A.A.A.A.B.0B .HB.\B.hB.B .B0.B@.BP.B .B . C .(C`..؎.(>.@>.L>.p>.>.>.>.>.D. ?.?.,?.D?G@G`GpG@GpHH H00HPq!Wr!W#`p# `@#`#0``#L`#h`#`#`#`#`#`P#`#`# a# a#4a#La #\a0#pa`#ap#a#a#a#a #a0#a#b#(b#SK?NvہTG= `yȱ4g|"UCР;X)z`KQ'nU_O_MKaLۻ{*z'9AYst t ^yU /)f:`ϰgi9PکH 1K#=gwu홠)sP`=1er/X^fJ2AkP@@x``: тK[C1tOFٺ wl]azW {+Rdj>svd/k&Νa%J3 یᦅ} ]Wq Xd߫!U3zP 3-ĪZr&j|I9X+RLo]ŵ좃',w;6.F^2|!ltJN5 gmp)՞R Vb#]e_$?iU6Hژc|=[Qf(IK|$Zk8\ k7BL~^bvEQmm5O7_m +0C:ͳ4yJQ"; tgN)܀b4h!145Mܷݏ괓Z'Hp!vp)a[Q;#ÐO]kNGY|(ʾ.»L*% 4hsvd/k&Νa%J3 یᦅ} ]Wq Xd߫!U3zP 3-ĪZr&j|I9X+RLo]ŵ좃',w;6.F^2|!ltJN5 gmp)՞R Vb#]e_$?iU6Hژc|=[Qf(IK|$Zk8\ k7BL~^bvEQmm5O7_m +0C:ͳ4yJQ"; tgN)܀b4h! $@mtt [-`H?f>hZ'1'Sj0A/8S7=vuF&`&p|Ҵ645Mܷݏ괓Z'Hp!vp)a[Q;#ÐO]kNGY|(ʾ.»L*% 4hsvd/k&Νa%J3 یᦅ} ]Wq Xd߫!U3zP 3-ĪZr&j|I9X+RLo]ŵ좃',w;6.F^2|!ltJN5 gmp)՞R Vb#]e_$?iU6Hژc|=[Qf(IK|$Zk8\ k7BL~^bvEQmm5O7_m +0C:ͳ4yJQ"; tgN)܀b4h!݀`qnVߔVvP0wVGXGn +8.lHC @F5hksM~ձ~]HFd]%E6jt1-D?*mx<+:[3hyK݅/Kk0lds4#W|.""ي-e#x+t#4hZc:f$kv%Gtӝ2;1sľ،2|w8otYmtt [-`H?f>hZ'1'Sj0A/8S7=vuF&`&p|Ҵ645Mܷݏ괓Z'Hp!vp)a[Q;#ÐO]kNGY|(ʾ.»L*% 4hsvd/k&Νa%J3 یᦅ} ]Wq Xd߫!U3zP 3-ĪZr&j|I9X+RLo]ŵ좃',w;6.F^2|!ltJN5 gmp)՞R Vb#]e_$?iU6Hژc|=[Qf(IK|$Zk8\ k7BL~^bvEQmm5O7_m +0C:ͳ4yJQ"; tgN)܀b4h! 4Ld8 P PPdhPh|hh0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./N@D0 H`4VS_VERSION_INFO  ?BStringFileInfo040904b0z-CompanyNameThe OpenSSL Project, http://www.openssl.org/VFileDescriptionOpenSSL Shared Library.FileVersion1.0.2k2 InternalNamelibeay32B OriginalFilenamelibeay32.dllHProductNameThe OpenSSL Toolkit2ProductVersion1.0.2kuLegalCopyrightCopyright 1998-2005 The OpenSSL Project. Copyright 1995-1998 Eric A. Young, Tim J. Hudson. All rights reserved.DVarFileInfo$Translation 122 ;@ z; :0 <7r:;;6666777 7N7U7^7g777777777#8*838<8j8q8z8888888899?9F9O9X999999999:$:-:6:d:k:t:}:::::::; ;w;~;;;;;;;< <<>=>D>M>V>>>>>>>>>??"?+?Y?`?i?r?????0 26@ r< = 3B5289 > B7S1a1s11111111122!232A2S2a2s22222222233!333A3S3a3s33333333344!434A4S4a4444444444444444445555*52595E5K5Q5]5d5i5o555555555a6l666667r77777778818A8Q8a888888 99929;9Q9b9o9999999999:+:G:S:m::::::::; ;2;[;g;u;;;;<.)>3>Q>`>g>n>>>>>>>>>>>>???8?F???? 00*0M0n00000011B1]1j1u1111111222I2P2b2|2222222222 33"3)3;3\3`3g3y3}333333334$4D4V4`4444>5e555555566%6/6B6Z6e6i6o6666666667777&7,727<7W7w7|7777777777Q8n888888889`99999999 :: :-:K:x::::::::y;;;;;;;;;<,>>%>6>H>a>m>>>>>>>>>?.?C?Q?Z?`?w??????????  00 0B0O0b0h0w0000000 1 1/1:1H1S1q11111112/2H2T2j2}22222222233313m33333333344&4<4D4I4V4}44444444@5R5l5x555555556696n6|666666777K8}88888 9;99<:::::::::; ;!;3;8;D;R;\;;;<8<=M===U>~>>>>???????0000"0.0;0E0a0o0}000000000000A1O1]1b1n1{11111111111 222+252k222 33%3H3e3344F4l4444455G5^5f5k5w55555599::%:^::::::1;9;l;x;;;;;?? ?)?^?k?r?~?????X000-0;0Q0111$1)1.151C1L125X5\5`5d5h5l5p5t5x5|5555555:; <=>?X111222 22222 2$2(2,2024282<2@2D2H2L2P2T2X2\2`2d2h2l2p2t22334567|88888888888888888888888888888888 9;;*;:;E;Z;d;o;;;;;;;;;; <(&>;>I>4?L?h?v???`2t3t4x4|444444444444444+679@:D:H:L:P:T:X:\:`:d:h:l:p:t:x:|:; ?4&0A014(5,5054585<5@5D5H5L5P5T5X5\5`5d5k:=0j000000111 11111 1$1(1 ;=@013566666672797D7}7777777777898O8V8r8888888888888899#9*9\9g9n9u9999999::,:3:Z:k:r:y:::::::::::;;;$;2;9;@;G;f;;;;;;;;;/<6<=>?>X>_>q>x>>>>>>>?$?+?2?9?B?T?[?b?v?}???????000#0*010`0g00000001 1111181?1J1U1i1p1w1111111111 2=2H2O2Z2k222222223 33*31383?3F3\3c3r3333333333344*4H4U4f4q4x4444445555'555<5C5R5]5o5v5555555555556,636>6M6}666666666%7,777B7Z7a7}777777777 ;;>z>>>>>>222330373616666!7Q7888(8B8I8X8f8|888899&909J9Q9`9n999999999::+:9:O:V:e:r::::::::: ;; ;-;a;h;w;;;;;;;;;;<#<2<<>>,>9>g>t>>>>>>>>>>?(?/?>?H?b?i?x????????  00-040C0Q0g0n0}000000000 1"1)181E1y11111111112242;2J2T2n2u2222222233393@3O3]3s3z3333333344454<4L4Z4g5n5}5555555555o6v66666666667:7A7P7Z7t7{777777777 88/868E8O8i8p8888888899949;9J9W9s9999999999::F:M:\:f:::::::::;;;!;;;B;Q;_;u;|;;;;;;;< <<*<@>#>->G>N>]>k>>>>>>>>>??(?6?I?S?b?o?????????0L000*0^0e0t0~000000000!1(171A1[1b1q1111113 33'3=3D3S3]333333333D4K4Z4h4444444455"515=555555555 6'666D6[6b6q6}666666777`7g7v777777888$8;8B8Q8[888888888@9G9V9d9{9999999::&:5:?:::::::::2;9;H;V;j;t;;;;;;; <<#<1P +01`$11111122272K9{;;=p K0K47888M9[9<.>g>S34n99);>?223{66?`0000000000I2T2_2l2334.4H4U4x44445555555578979V9g:::z;_>>T?D 0@0q00011{111355%5+5<5d55566858889:Y:i<01f222345W5q56778;;0<>>?;0u6\9>>$;1u1122!4'4r5555:<>]1s111677+8K??3u33::: h`001111112 252A2213Q4a4q444444|66&7[777~8e99999R::::Z======i>>>>0L1242T2\2l223I3`3j446666 7*7J7j7/b>>>>>+?p??@H#01k22%3g33Y444{555*67788h8l8p8t8==>S>t>>??L?k?PH|1M44555N66G7a77777%99:s::;.;G;9<<<<==y>>d?`T000{111x22223w3R4t4444T5m5s66]777"8<8o888+9:c;;A<[<>o??pPG2b22334B44O5516s6667#7F7v77l8888K9:;;;<)T?x0.0Z001!151Q1a11111112!2A2a2222Q44~56X77888888888:;r;;;;;;;<1L>Ds55566!7G7]777777!8G8Y8w8888:999:x;<3>>>Y001P2.334440555 6h666 7k7777777777777777778E8889:9q999:O:o:::=;;;<<<<=>>?{19&:G:j<>L\03455g555556677888E9i9%:A:a:::::;!;;;;;=>Xn00 1N2%3q3444455566666666w7777%88:; ;S;;;?0'0,000I1e1~11112S233`44$5(5,50545U55556778"939>9o9999:0:^::::>;;;;>>>>?0?a?{???0!0z0001A111111112A2o2222@3v333333 4V4r44444444545M5k5r55555 6E6a666{777777788B8J8i8s888888 99k999999999: :R:Y:::::::[;k;;;;;X<<=2=S=m===>>>>>???D0<11 24#5q55 6687s7Q8_888889]9E::===d????</0002F2222A334744 5k66<;h;/=j=?R122%3a<<8,77l89999999:G:{:};;=M=h==>>??_?,122$222223347:#?t[0b00 1T1d133 3$383<3@3D3H3L3P3T3X3e334B4r445L555K667888: ;n;;;;;;< <'H??<l00001l1&223344_5888999D::C;U<<<[=\>x00111y223:33374Q4h4|4455e55556 6667778888699999:<<233#4@44b5555<6J6X6f6q66r777t999:p:::2=C=N===>(>>>?1?s?? 70K0111222Q334556 7{77777T8k8:N::;y<<>.>K>]>e>m>u>}>>>>>>>>??? ?????????0001229233 33333 3$3(3,303L4z444555a5v555556]6l66667y777888 8$8(8,80848889Q9X9h9l9:":Q:::::;; ;&;:;;;;;2<9&>,>;>E>K>\>>>>??? ????? ?$?(?@0$0s0y00000000 1B111112+2V22233;3n33344444444P5Y5555566666;7N77778994;8;<;@;D;H;L;P;T;X;\;`;d;;<<2=q====>??p???????P|i0|000000011#1<1B1T1\1m111111111222 2Q3i7p78888d:h:l:p:t:x:|:::::;+;S;1<< ==>??F??` 0q0x01183<3@3D3H3L3P3T3X3\3`3d3h33333333333333333344 5b5555Z66 9799999;<=1=K=Y>>>>2?o??pA0y0000000@1[111112%222<2W2c2y22 3#3:3[333Q4X4c4p4y44444-5X555606n666657`7g77777777#8-8<8E8V8x8888888*9=9M9n9999:::K:R:g:t::: ;J;z;;;?o00002222S3Z344444444444444k55566667n888c::&;<====?????????????????????011 2q2233333`4p55686V6666!7l788999(:1:7: ;=;d;h;l;p;t;x;|;;;;;;;;;;;;;;;;<<<<2=r===>>>P>`>??$????x0T0z0 2 3335Z679:+:f::<<<=========>>>+><>J>X>f>>>>>>>>>+?L?d?w?????????( 0,030D0n0|011(1111 22202?22222 3 333B3T3^3l3x333333D4Z4h4w444444444"5=5G5L5T5Z5`5p5~5555576R6c666667!7>7[7t7788*8A8v888899&9T9`999::9:]:::;Q;^;e;s;z;;;;A<_&>:>Q>o>>>>>>??!?1?O?f?z??????0$0.0:0A0G0M0Z0d0n0001C1I1V1c111111.2N22222V333333 444445 55)5<5O5b5u55555566^778-8b88q99999:3:::::: ;;;;<*<3<\>->2>>>K>U>t>>>>>>>>>?1?W?g?~????????0 0;0I0W0\0h0u000000 111(151?1`1111111111"2C2L2c2q2222222q335K5556;6g666666667*787=7I7V7a77777777899!:/:=:B:N:[:e:q::::::::::; ;;#;P;l;;;;1=K=Y=`=g=~=========> ?3??0E0\2j2x2}22222333"3.3;3E3{3333333344445F5X5e5|55555555666'6]6e777888999"929E9w9999:::3:=:C:Q:[:g:::::;;+;5;E;;;>?a?|??? 000Z0000021b2k2u2~222222223G3V3333 4+5555566@6T6]6666667p7777 8X888;;F>>>>???????H0X0\1y112]22222223 33(3S3r33333344{4444515:5I5R5e555@6X6t667U9f9{99999::<<==8>T>t>?dz00002I2e2223J33`4556b66667/797777777|88859S9o:y:o;y;;'=1=+>>>>> L001?1E1 222!2C2H2223'3@3H3v37788!818Q:a:q:::=!=1=A=022222233!313A3[33334;5556V6b6i6899!919A9Q9a9q999999999:q::::{;?>>>>>>>>>>>???@h000011>1112222222.3@3L333$454>4Z4$7H7#8=8B:L:]:g::;;;;<>>>??*?/?@?E?h?Pr0{0000000000000111 121;1@1R1[1`1r1{1111111111112 22"2+202B2K2P2b2k2p2222222222222333 323;3@3R3[3`3r3{333333333333344"4+404556N6779::!:1;;$<.<1?A?Q?a?q???`T122!2A222A314A4Q4a4q4445a555h666{78:O::;;=='>_>>>0?s??p|60N000B1G11144,56677777777839=9R9\9p9z999999:m:w:::::_;i;};;;;; <* >>$>.>>>>>J?T?a?k???0000000011a1k1u1111111122&202:2D2N2X2222233444455`5d5h5l5666 6$679::;;;;;;;;;g<1=K=k??\0w1112p2222/3n33325{55566677777728Q8W8e88888{9 :;;;;<<t00 1a11112r2222Y33 4H4j445P55556Q7Z7g77Z8w8889::: ;O;; > ?$?O???L 0\00031111&2222`3334R44Q55 66#7i778K89x;<[>>%?D!001[11`34%464G4455667g77799: ;*;<"=<== >l#000F0 11x1|111111,2F22C4P4f4[5d555555555(667x78!8189999::;;%?<45[5z56E777789,99:;"<= >$>2>C>h>>>?@00k111c22 3#38Y9::::;;< ==B===>>%???0W01]111;223$3@3x33333 4444M4f4(5b5z55555556n6666666666688-9M99 :n::;`k>>>P?[??? l00000011M23444;5Q5a555167!7A7a777777!8[888889<9U9t999:A:e:p::;B;;;7S>>>>?!?1?Q?????00!010A0a0000061e111111H3q33P4455\5667j77!818E8a88888899999:#:6:a:::: ;Q;)<<<<===>>A>Q?q???@10A0a00111Q111!2E222223!313Q3a334455616Q6q66)8@888889i::::;Y;;;A>>>?1??PS0h00001!111A1a11112!212Q2q222223<3d33q444Q5m56Z677777 8898g8888889>9C9p9u9993:O:y::;$;I;N;{;;;;;;;+>D>I>l>>v?`0000011 2"2L222 3$334*4/4P444445 5)5i55556@6a666667*7/7k7p7777X88_999999:::::;];v;;;;;<"<:<@>(>x>>> ?L?m?r???p'0.0;0T00000 1)1:1y11111112:2333P4T4X4\4`443555555555^66w77777777788999 9$9:;;;;;;; <??? ?????`0000000000222]3p3789|999r:::;;;<<=p>>>g??????????p000;0g11Q234A4R4w444$5x55[67O7789N999.:::::::::;;;;;<<=P=y=K>>E?k?|??01q23!3A3Q3a333333334!414A4a4q44444445!515A5Q5a555555566!616A6Q6q66666667717A7Q7q77777778818A8Q8q88888919Q9q99999:1:Q:q:::::;1;Q;q;;;;;<1>>w???0g00-161t111111112223k3333333334,414;4s44455556<6666666-777778 8858q8z8889999:::,;;;!6T6{66617<7898p888 9k999B:i:::::%;,;S;;;<<>*>>>?&?|???`O0002}3!414E4a444444[55566666x7788888888G9:;<<<<===>?K0r00D11Z2222933333484D4O4g44445585G5W5z555566A6d6t6667O777778*8k888888,9;9K9V9r99999999 :,:H:^:q:x::::::::::;.<<6===D=K=m=~===->>X?_????)001111{222O3:4054585<5@5D5[56877988899:A:i:|:;.;5;\;;;;;;<<< <<<@=======&><>C>^>>>?V?q??? 010[0000A111112<2@2D2H2L2P2T2X22223P34636z6666777 7$7777s88889::;;;;<:<<<<==k=====.>f>>>K?a?n????? T012222F3`344K7[7t777B8S8^8&:: ;j=->5>B>P>>>?!?*?1?[?j?{???? +0N0000001 1U1b1111233q55-6q6666L7g7}78E8a8888 9*9b9x99 :Q:q::::::;;;;;_<,=Y=o===>?$?A?a???0 d0!010A1a111112622\333t4445636M6[7H888Y99999,:B:r:::*;^;;>?`?j??@ x[00;11 2,2E223333;567Z7`7j7777-8?8k89:n:u:::::;,;;;;;;<$<[<T>>/?6?????P Y031i1112v222K333 4%4 5D5k556O6666>7n7778:8n888969j999:2:f::v;<<<<<>>>>>>>!?&?????` 0000001111611111!2&2Q2V222222233C3H3s3x33333443484c4h4444444#5(5S5X55555556"6C6H6s6x66666773787c7h7777777#8(8S8X8888888899A9F9s9x99999::1:6:a:f:::::::#;(;;;;<x>>???p LZ00122k334t445555U66Q777k888[999:X:::;s<>? D01X2222^44U56u66;7s77#8<889+9E999':; <<=7>? (0113A3Q3a3q3346k7M::::+> \{01 1 3*3w3355566!6H6L6P6T6b666777888]9o99y:::;T;<<==Z???? @0050c0z000001$111~336O77'888'9:<=?? m99 $1456P9e9y9====>>? $F011255D77?? X0S00 1511T5E7c778G9999:@:{::: ;4;;3<< =F===>F>f>z>>>1?`???? 0:0y0>1O1w113777777778898>8Y8^8y8~888889999>9Y9^9y9~99999Y:^:y:~:Y;y;;;;;<9<<<=9=Y=y=====>>??????????? p00 0000%0+01070=0C0I0O0U0[0a0g0m0s0y000000000000000000000001 1111!1'1-13191?1E1K1R1Y1f1l1p1t1x1|111111111111111111111111111111111222 22222 2$2(2,2024282<2@2D2H2L2P2T2X2\2`2d2h2l2p2t2x2 4@4Z444555c5555556A6}6666Z77 8:888899d::::;;+<9<<<<@={==>2>>>"?>???? <000"1E11%2s22223N3t33!4*474Y444/5:5a5666r777777 99:::;;<=,=====>O>>>???%?A?a?q???0 x0111#123b4y445a6{66%7d777o889N9999::: ;;;;;<32>E>M>T>{>>?!?1?Q????@ <0a0j0w00001q1z11111123!393W34x466Q7 88*8U8^8r8889#9X9^9999999C:N:e:;<[f>>>?>?r???P X)0<0D0K0|000011122233344455;6P66J779999=n>>>>?T??` 00131"3q3 4A4444<5J5Y5g555#6x77i8s888899!919Q9a9999D:H:L:P:T:X:\:`:d:u:z:: ;;; ;$;(;,;0;4;8;A;Q;;;;;;;;;;;!Z>>>?[??p 00 070<0S0X0u00001F111112d2h2l2p2t2x2|22222222383U333334$4D4H4L4P4T4X4\4`4d444445U5i555 66D6H6L6P6T6X6\6`6d6T7b7p7=8[8y888[999 :8:B:G:^:c:z:::::;/;s;;;;<+<>[>k>>s?? 000E111 2222=333'404I4g4}444445555566667i7777P8`8k888/9Q99s:::::;1;A;;;;;;<#G>^>{>>>>>>>>?!?1?A?Q?q?????? 0010R0X0l0z00000000111Q1q111112R2^22 3D3333 4P44444455#5+55555=666'77778 8$858N8V8]8v8888888889Q9W9j9r9}999::p:|:::::::;3;l;;;;;;<Y>>???&?5? )0O0000151I1O1112!212Q2313E333A4a44445U5q555566L6R6o666677#727@7]7777778*8C88969 :::==> >>>>>>>?H?l?w???? 0100001 222$3~3333.7788<9@9D9H9L9P9T9X9\9`9d9999p:::`;;;<@<<<<<<=1=Q=a=====>E>K>v>>>>>>>!?*?a?j? ,0q0z000*151V111112!212Y223#3A3S3c3y3333Q4q44444425p5556'6/676Q6q66666677F77778&8>8a88:::;8;C;_;;;;;;<.=M====>X?\?`?d?h?l?? 0A0Q0q0000001!1L1R1s1111111D3g33333344464>4E4l4444^5w55555555A6Z6b6i6666667,747;7Z7a7778-858<8R8m888869h9999::::H;Z;;"<==T>>? 000123(4,4044484<4@4D4h444]99K:q? `001>2I2T2Z2r2}2222222 3393P3_3m3s3333;44}566u77+889M9l9p9t9x9|99:Y:w::::::::;D;H;L;P;T;X;;;>k?? /0000000012Q2222Q3a3q33333334!4144444a5q555555,6064686A6Q6a6q66666666<7v:::::#;(;S;X;w;<>> PI0l01122_33444$555i667<8f88 99:;;;K<>????? 801G223a3E4{44%5X55s66I7`7 88{9=\=>>?0 TJ00+2h2333,44G555678h8 999::>;s;;;;;;y<<===>Z>>?@ h)0|000B11x222O3e3333444595R556666*77E888a9|92:R:;(c>>>m??P X00011C2i3+4444R555 6}666,7]77'8c8+999<:::!;u;; <(===>?U??` T 0'0c000\14L5<6o6Z7I9::2">E>>>>?5?O?]???p t20L0Z00000+1P11~2223#3,3N3~333P4445606^6666627<78+929[9b999:[::::;==>>A??? 0$0O0i0001156I66667)7b7u7777!889S9s999999,::::;];~;;;;;O<]'>h>y>>>>>>? m2u22233b4g4o444444466777 7q77777777788!818Q8a88888889!9A9Q9q999999:!:5:Q:q:::::;1;Q;q;;;;;<1#?F???? d@0r00.11B23344;55 6Y667888 8$8(8K888888889*::;Y;;;A<a>>? \)0+2[2223C3H4455<6@6D6H6L6[6667U77+8:::::::;h;;;<<<=n>>L?? \.1111243y3445H5!6666"7T7777-829p99*:r:::;J;;/<<>=x==?E?k??? t00c111722&3334 5566778_889k99,:Q::: ;i;;;<<<<<<<==1=A=Q=q======>!>A>a>>> Hk00d11&24_5q67%7778F999:{::;5;q;; TX11[2t222Z3x33e4555555d66666'77889V99L::;7;z;;m<>K>|> K01T2_2m2222333445#5.5555556 66<6U6!747K7N88889929A9T9m999:: ;';B;o;;;<'<^L>l>>>>>?5>H>0Z0m00001.1J1]1|1134.4p4{444445>5^5~555536O6U6Z6666666717C7_7e7j777778 8%8A8c88888889%9*9E9a9s9999999/:5:::U:q::::::::?;E;J;e;;;;;;;;;O>>>>>>%?A?x??0 00X0]00001K1u111(2-2x2}22Q333g44444Y5^55555E66Y7777c8~89 929^9c9s9999999991:6:;:t:::;C;;;;;; Q>>>>>>??@ 00<11111222 222`22222222 333J44J555 66.6T6c6666677+7L78889-9Q9a9q999999999:!:1:Q:a:::::::;!;1;Q;a;q;;;;;;1>Q>q>>>>>?1?Q?q?????P 8010Q0q0005899:):f::<<====D>> ?` X000C1q111~2222 3]335566R6x6666+7A7778Q88889:r<<=r>>)?p 111 2O223D3P3W3c3}3334U4445R5h5555526677%787?7U7h7o7777777777888999:z:::;x;;,<|<<<=e=4>>? h0122"232>2_2}23-3[4444445555666p777i88]99 :_::;;<<==D=[=z===>?? D0&0@0T0^0h000O1u111222444/454c4i4o4u4{444444 55!5'5f5y5555555555555556 6"6(636<6B6P6]66666667 77!7+7C7H7Q7X7_7f7m7t7{77777777778!8'848:8N8i888888 9999+:::::;;!;1;A;Q;q;;;;;;;!>A>a>>>>>?!?A?a????? `0!0C011*2k2288:`:k:::::::::;;2;9;H>&? R0c0n00J122K3333334%4*43444J55Z677K88+999u:::::::;C;i;;;;;;;<<3<9>>O>B? `$0B000_11)2i2v22233'33=4o44]5556E778J888 999<+<<=%=h==>C>h>>S?~? h20`000'1H1g12J222222{333`4 565\5v56727*9[999 :<:::::::::;;;'a>j?? L00@1q11112[22B333344455[555556W6\6e66666!7W7]7g777777777888E888888%9+959c9999999<:|::;; ;*;O;;;;<<<)A>G>M>W>s>y>>>? ??'?G?s????? (0>0G0M0W0a0z000000001_1x11111292a2q2222222313E3a3333)4I4u444445515Q5e5555556!6A6Q6q6666667717Y7^7y7~7777777898>8Y8^8q88888999Q9y99999:1:Y:y::::1;;?? 400a122 3*38333344x7g99:;<<+>G> 0+12 44465Y5|5552686>6D6J677777778 8888&8-848;8C8K8S8_8h8m8s8}8888888889 9999&9-949;9B9J9R9Z9e9j9p9z9999H:\:a:w:::::::::;&;,;?;E;_;k;t;~;;;;;;;;; <+<>>>>">(>>>>>>>s??????????? <0(020z00000000 11*1/1J1P1U1a1~1111110 `2l2p283<3@3D3H3L3P3T3X3\3`3d3h3l3p3t3x3|333333333333333333333333<<<<<<=P=T=X=h=====>>(>L>>>>>>>>> = D88899,9@9T9h9|9 33333334 44 40444D4H4X4\4l4p4|444444444444555(5,5<5@5P5T5d5h5x5|55555|666666666666666666999(90989@9X9`9l9p9:::::::;;$;,;4;D;H;X;\;l;p;;;;;;;;;;;;;< <<<,<0<@>H?L?P?X?`????????? 0006606D6X6l66667 77777 7$7(7,7074787<7@7D7H7X7\7`7d7h7l7p7t777777777777777777788888 8$8(8,8<8@8H8L8P8x8|888888888888888888888888880L88888888888888889 999$9,949<9D9L9T9\9d9l9t9|99999999999999999: :::$:,:4:<:D:L:T:\:d:l:t:|:::::::::::::::::; ;;;$;,;4;<;D;L;T;\;d;l;t;|;;;;;;;;;;;;;;;;;< <<<$<,<4<<>>>H>L>P>P11,101<1L1` 66666666666pX>\>p>t>>>>>>>>>>>>>>>>>?????(?0?4?@?H?L?X?`?d?p?x?|????????????????00 00 0$00080<0H0P0T0`0h0l0x000000000000000000111 1(1,181@1D1P1X1\1h1p1t111111111111122220242@2H2L2X2`2d2x2|22222222222222233 33 3$30383<3H3P3T3`3h3l3x33333333333333333344(4,4@4D4X4\4h4p4t4444444444444444455555(50545@5H5L5X5`5d5p5x5|55555555555555566 66 6$60686<6H6P6T6`6h6l6x66666666666666666677(7,7@7D7P7X7\7h7p7t77777777777788888(80848@8H8L8X8`8d8p8x8|888888888888899 9 9$90989<9H9P9T9`999999999999999::: :(:,:8:@:D:P:X:\:h:p:t:::::::::::::::::;;;;;(;0;4;@;H;L;X;`;d;p;x;|;;;;;;;;;;;;;;;;<< << <$<0<8<<>>>>(>0>4>@>H>L>X>`>d>p>x>|>>>>>>>>>>>>>>>>?? ?? ?$?0?8?> >> >$>0>8><>H>P>T>`>h>l>x>>>>>>>>>>>>>>>>>>??? ?@?D?P?X?\?h?p?t?????????????????00000(00040@0H0L0X0`0d0p0x0|000000000000000011 11 1$10181<1H1P1T1`1h1l1x111111111111111111222 2(2,282@2D2P2X2\2h2p2t2222222222222222233333(30343H3L3X3`3d3p3x3|333333333333333344 44 4$40484<4P4T4`4h4l4x444444444444444444555 5(5,585@5D5P5X5\5h5p5t5555555555555555566666(60646@6H6L6X6`6d6p6x6|666666666666666677 77 7$70787<7H7P7T7`7h7l7x777777777777777777888 8(8,888@8D8P8X8\8h8p8t8888888888888888899999(90949@9H9L9X9`9d9p9x9|9999999999999999:: :: :$:0:8:<:H:P:T:`:h:l:x::::::::::::::::::;;; ;(;,;8;@;D;P;X;\;h;p;t;;;;;;;;;;;;;;;;;<<<<<(<0<4<@>> >(>,>8>X>\>h>p>t>>>>>>>>>>>>>>>>>?????(?0?4?@?H?L?X?`?d?p?x?|????????????????00 00 0$00080<0H0P0T0`0h0l0x000000000000000000111 1(1,181@1D1P1X1\1h1p1t1111111111111111122222(20242@2H2L2X2`2d2p2x2|222222222222222233 33 3$30383<3H3P3T3`3h3l3x333333333333333333444 4(4,484@4D4P4X4\4h4p4t4444444444444444455555(50545@5H5L5X5`5d5p5x5|555555555555555566 66 6$60686<6H6P6T6`6h6l6x666666666666666666777 7(7,787@7D7P7X7\7h7p7t7777777777777777788888(80848@8H8L8X8`8d8p8x8|888888888888888899 99 9$90989<9H9P9T9`9h9l9x999999999999999999::: :(:,:8:@:D:P:X:\:h:p:t:::::::::::::::;;;;;(;0;4;@;H;L;`;d;x;|;;;;;;;;;;;< < <$<8<<>>>>(>0>4>@>H>L>X>`>d>p>x>|>>>>>>>>>>>>>>>>?? ?? ?$?0?8?> >> >$>0>8><>H>P>T>`>h>l>x>>>>>>>>>>>>>>>>>??? ?(?,?8?@?D?P?X?\?h?p?t?????????????????00000(00040@0H0L0X0`0d0p0x0|000000000000000011 11 1$10181<1H1P1T1`1h1l1x111111111111111111222 2(2,2@2D2P2X2\2h2p2t22222222222222222333330343H3L3`3d3p3x3|33333333333333334 4 4$484<4P4T4h4l444444444444444444555 5(5,585@5D5P5X5\5h5p5t5555555555555555566666(60646@6H6L6X6`6d6p6x6|666666666666666677 7 7$787<7P7T7h7l777777777777777777888 8`81<1@1D1H1L1P1T1X1\1`1d1h1l1p1t1x1|111111111111111111115555585<5H5L5P5l5p5|55555555555556 666 6<6@6L6P6p6t66666666666 777 7@7D7P7T7t7x7777777778808L8P8d88888888899 949P9T9h999999999: :$:T:X:::::::$;(;X;\;;;;;;;(<,<\<`<<<<<<<,=0=`=d=====>>L>P>>>>>>>? ?P?T???????p 0$0T0X0000000$1(1X1\1111111(2,2\2`2222222,303`3d33333340444d4h44444554585h5l55555555566 6686<6@6P6l6p6t6666666667 7 7<7@7T7p7t77777777 88$8@8D8X8t8x888888899D9H9x9|99999::H:L:|:::::;0;4;d;h;;;;;;;;;;<<<<<4<8H>L>P>\>`>>>>>>>>>>?8?>>(>8>H>L>X>h>p>t>|>>>>>>8>T>p>>>>>>?4?P?l????????000 0p3t33333333333333445555(585H5L5X5h5999999999:::(:4:@:L:X:d:p:|:::::::::::; ;;$;0;<;H;T;`;l;x;;;;;;;;;==========>>> >>>>> >$>(>,>0>4>8><>@>D>H>L>P>L444444 55 5$505@5L5\5l5p55555556,606@6D6T6X6h6l6x666|2(2,2L2P2p2t22223 3$3@3D3T3X3d3t355555555`6|66666666607D7H7h7|777777778$8(8H8\8`88884444444445 55,505@5D5T5X5h5l5|55555555555556 66(7D7H7`7|7777@9T9X9999:$:<:@:P:T:`:p:::::;0;4;<<<<=== =0=4=@=P=`=d=t=x===>4>8>L>P>\>l>|>>>>>>>>>>>>? ? ?$?4?8?D?T?d?h?x?|?????????D1111122$24282H2L2\2`2p2t22222222233383<3L3P3X3\3d3h3p3t3|333333333333333444(4,4<4@4P4T477777777 888,8<8@8L8\8889$989\9p999999999::<:::::::::;,;0;L;P;`;d;p;;;;;; <<<@<\<`>>>>> ?? ?$?0?@???? 0010141L1|2222222222222333 303@3D3T3X3d3t3333333333334444$4,444D4H4X4\4h4x44444444444445 55 50545@5P5`5d5t5x555555555555666$6(686<6H6X6h6l6|6666666666667777(787L7`7d7t7x7777777777777888 808D8T8\8d8t8x8888888888888999 9,9<9L9P9`9d9t9x9999999999999: :: :,:<:P:d:h:x:|:::::::::::::: ;; ;$;4;8;D;T;d;h;x;|;;;;;;;;;;;;;<<$<4>,>@>D>T>X>d>l>t>>>>>>>>>>>>>??(?,?>>>(>,><>@>P>T>h>|>>>>>>>>>>>>>>? ??$?(?8?>`8<=@=p=t======>>>>????$?(?4?8?D?H?pd1h1x1|111111111111122(2,2<2@2L2\2l2p2222222222222333 30343D3H3T3d3t3x333333333333344$4(484<4H4X4h4l4|444444444444555$54585H5L5\5`5l5|5555555555555 66 6$64686H6L6\6`6l6|6<:D:L:T:\:d:l:t:|:::::::::33333333333344$444D4H4X4\4l4p44444444444445555$545D5H5T5d5t5x555555555555666 606<6L6\6`6p6t66666666666666777 7071111,101<1L1`1t1x1111111111111222 202@2D2T2X2d2t2222222222222 33 3$34383H3L3\3`3p3t33333333333334444,404@4D4T4X4h4l4x44H6L666<7@7`7h7l7777p 00 00000 0$0(0,0004080<0@0D0H0L0P0T0X0\0`0d0p0t0x0|000000000000000000000 11 1D1L1T1\1d1l1t1|111111111111111112 222$2,242<2D2L2T2\2d2l2t2|22222222222222223 333$3,383<3@3D3H3L3P3T3X3\3|333333333333333334 444$4,444<4D4L4T4\4d4l4t4|444444444444444445 555$5,545<5D5L5T5\5d5l5|555555555555555556 666$6,646<6D6L6T6\6d6l6t6|666666666666666667 777$7,747<7D7L7T7\7d7l7t7|77777777777777778 888$8,848<8D8L8T8\8d8l8t8|88888888888888889 99 9$9(9,989<9P9\9d9l9t9|99999999999999999: :::$:,:4:<:D:L:T:\:d:l:t:|::::::::::::::::; ;;;$;,;4;<;D;L;T;\;d;l;x;;;;;;;;;;;;;;;;< <<<$<,<4<< >>>$>,>4><>D>L>T>\>d>l>t>|>>>>>>>>>>>>>>>>? ???$?,?4? >>>$>,>4><>D>L>T>\>d>l>t>|>>>>>>>>>>>>>>>>>? ???$?,?4?D?L?T?\?d?l?t?|?????????????????0 000$0,040<0D0L0T0\0d0l0t0|000000000000000001 111$1,141<1D1L1T1\1d1l1t1|1111111111111111112 2222(2,2024282<2L2P2T2X2\2`2d2h2l2p2t2x2|222222222222222222222333 3333$3,343<3D3L3T3\3d3l3t3|333333333333333334 444$4,444<4D4L4T4\4d4l4t4|444444444444444445 555$5,545<5D5L5T5\5d5l5t5|555555555555555556 666$6,646<6D6L6T6\6d6l6t6|66666666666666667 777$7,747<7D7L7T7\7d7l7t7|777777777777777778 888$8,848<8D8L8T8\8d8l8t8|888888888888888889 999$9,949<9D9L9T9\9d9l9t9|99999999999999999: :::$:,:4:<:D:L:T:\:d:l:t:|:::::::::::::::; ;;;$;,;4;<;D;L;T;\;d;l;t;|;;;;;;;;;;;;;;;;< <<<$<,<4<< >>>$>,>4><>D>L>T>\>d>l>t>|>>>>>>>>>>>>>>>>? ???$?,?4? >>$>,>4><>D>L>T>\>d>l>t>|>>>>>T2222222222222222222223 333$3,343<3D3L3T3\3d3l3t3|333333333333333334 444$4,444D4L4T4\4d4l4t4|444444444444444445 555$5,545<5D5L5T5\5d5l5t5|55555555555555556 666$6,646<6D6L6T6\6d6l6t6|66666666666666667 777$7,747<7D7L7T7\7d7l7t7|777777777777788848<8D8L8T8\8d8l8t8|888888888888888889 999$9,949<9D9L9T9\9d9t9|99999999999999999: :::$:,:4:<:D:L:T:\:d:l:t:|:::::::::::::::;;;;;$;,;4;<;D;L;T;\;d;l;t;|;;;;;;;;;;;;;;;;< <<<$<,<4<< >>>$>,>4><>D>L>T>\>d>l>t>|>>>>>>>>>>>>>>>>>???$?,?4?8>P>h>>>>>>>>>>>>>>>>>>>>>>vibe.d-0.8.2/lib/win-i386/libevent.dll000066400000000000000000012760001324361747700172530ustar00rootroot00000000000000MZ@ !L!This program cannot be run in DOS mode. $t;fU5U5U5 [5U55U55U5T5U5m5U5m5U55U55U55U5RichU5PELDP!  ӡ@Gld,@$.textJ `.rdata{|@@.datahT0,@.reloc,34H@BD$jhh ohPjh oPٓP̋ÍP@u+ƒtUh0h0hh0h$0hޭ`hH0hP0hhd0hl0讕@P虔^Vt(7t"SVƓt @^Ë^3^ރwJ$l00000øÐAYM)5eQVW|$3u_3^YËǍP@u+‹ST$ tMd$9ރw#$ +;w:A;rt@UFV݅u4Vh0h04\ ][_3^Yh0h0\[_3^Y39|$v}L$ރwJH$0050)000VPSGG ;|$r][_^YĨ-t%HwU$ 1ø1ø1ø 1ø$1Ã=w& $,1ø41ø<1øD13ÍI̋A@=t=0td|=| y(t3̃t&D$uD$ $RQD$:MjQ+M̋D$H D$L$(̋;̋D$y D$@hËL$Ah̋D$yD$HpHtËL$ApQt̋D$tT$D$̃Ul$SWU0I=NTVP|jjU3؃ JPI@u+uSjD$PS[ ;t"L$t< u|r D$ D$ S~|$ N03+;r;F3;Ptr ;Hp~P N0nTl$u|"|t 3;r`w;rZFHRPUFPFTFh t+NdN QVЋVHRPFHPzf F u _^3[Vh:Pdt.h:V< t< uh:V6uҸ^3^Vjj6uh:h4:P^ËD$PLFuVh@:h\:P ^ËL$ QF u&VRhVbhh:h:sP^GFO1w3^̋HQU*u]Vu ƍPI@u+S؋D$P@u+WDPVu_[^]ËL$GWQR蕉 _[u ^3]QVW{7td$Fh:PR]tB6u3?tOh:Q/]t$?u3uIu_CTCP3^YËv  h:W\tWh:h: S _^Yj T$ RVR >tL$9uۅ|r_CPST3^Ỹt2Hw,$=w$3̋D$@ Vt$tUh <h<<hRhP<hX<hޭoPh|<h<hRh<h<C@P.tUh<h<hSh=h =hޭPhD=h`=hSh=h=@PЃ蕃D$ N ^L$D$̋D$L$A|uA j2j2P ËI PPQ ËD$L$̋D$L$T$ ̋D$H`T$ f@dL$ f̸QPkd+ȃw R;d|`Ëhø,FVt$ W|$ GDG$w@t PD$uEQHkd+w"I;d|`h,FPGD_^uhDFh\F^KW:u_ËD$ SVt$xƍP@u+0;sOUl$IȀt jVWI#< utjhFW2 QhFWF ;r]jh[WW蘵P tW胵PVWW^[_̋D$jjP" ̃3|$UV33D$ 9t$S>?u|$ }nD$d+u |$tX T%uOL>QVt=T>RVt+D>L>jT$jRD$L$D$ۊ ؃D$(FE;t$p[^)]ËT$^*]VW|$ ǍPI@u+@P ǍPu$@u+@PhFhF6I _3^Ê@uj+VP _^VW|$ ǍPI@u+@P ǍPu$@u+@PhFhFH _3^Ê@u3+9L$SQVPC\$$ t[yUhFhGh h GhGhޭoKh8GhLGh hTGh\GC@P.~;[_^SUVt$W|$GD$Ȅt>l$*t?:ttTQzU؋D$PnU:u;FGD$Ȅu38_^][À>t$UVW u F8u_^]3[_^][S\$VW|$w(tFSPUt,6uw t|$SWV u6u_^3[ËD$t8_^[QUl$WD$UPWD$s t _]YSVw ߅t0$N0jUQ u6uD$;uNjD$^[t8D$_]Y̋D$HL$D$@Vt$ tNH VD$P NFPcV- ^Vt$~0u6~u0D$ P F0tD$H$NP$2p$3^Ã^Vt$ ~0u^ËtNH VD$P$NF0P F03^Vj jtD$ P FuVS ^ËD$H,NP,2p,3^S\$Vs(Wt|$FWPRt 6u_^[ËtNHVS,FVRV_^3[̋D$L$A4̋D$y D$@8ËL$A8̋D$yD$H@HDËL$A@QDfD$L$fAHS\$VsW|$t4Fϊ:utP:Quu3t16ujjQu hHhHC_F^[_^[WbFu!hHhHCV _^[ËD$L$F NSVC0_s^3[S\$VsWt8|$Fϊ:utP:Quu3t 6u_^[ËtNHVSFVRV_^3[ËD$L$T$ HLPP̋D$H ̋D$@ ̋D$@̋D$̋D$L$Ah̋D$@4̋D$@8̋D$@(̋D$@@̋D$@̋D$@̋D$@H̋D$@\́(PJ3ĉ$$$,j j L$Q$<hT$0RQPtHjhh ohPjhh oh@JjD $$3˂(ÍT$ RD$P$,3̉蛂(QVWD$tGjjPuhXJP(C_ ^YVYDxRVDxEjD$ PjhVx,|$t V_Dxt3OWQRV uVRDW_^Y_^ỸHPJ3ĉD$D3D$D$D$ D$D$D$D$D$ D$D$LPh`JL$,j QD$D$D$TT$RD$PL$%u3FPIt"NQItFu^3^VW3;s)PwIt tJЅx G;r_^_^̃TPJ3ĉD$PD$XVNW;>[x]x~vNVR/I;s<.tPIF;r>.F;s2IȀuRh Kt}u>:uaF;r_^L$P3.}T+ƍp@}hlKh|KhhKhK5s@P rq;u5h[L$A uhKhK;_]_3]SVj@UL|tG;sCދAUFD\$Cu hKhK:^[_]Ë\$o;rLURGtM;s4;r0}:u*E;u CVL$Aً;sUhKhKhhLhLhޭ=h,Lh[u$V;r]uWu^[_]ËJt)+EPC uhtLhL9^[_]UVP-sK +^[9_3]̊t?t#t /tH@uD$VtrǃtCHtHƍP@u+^Ê$<#FFu^Ê<#?u tFu^Êt<:t[ƍPu @u+Pu_^Ê@u+<0t:|$ G t P$t(VG uhNhN4_^G _3^̋D$}ËL$A3Ul$Vt$t)ƍP@u+SEWP3r_;[u6Et P|t(VEuhNhNv3^]E^3]Ul$Vt$t,ƍP@u+SEWP_;[u6Et Pt(VEuhNhN2^]E^3]Ul$Vt$t,ƍP@u+SEWP__;[u6Et Pit(VEuhOhOc2^]E^3]D$V0tFt;Fh1P?t 6uF^Ëv th1V?tC^Åt8Nh1Q~?t 6u3^Ëv th1V[?t3^V0tNh1Q;?t 6u3^Ëv tj h1Vf? u^̅x72FXu(tNH VFNFËF4tPF4F8tPF8FdN`PVу3Vt$ j V3ru6j V$ru'W|$au_^W|$V_^Ã^̃T$SUVt$$FWjL$QRD$(D$,D$ } uD$F,F,vt ;Fh!E3< < :|$l$\$h:Smj W4Eqj W2qpVW|$U{gL$QBD$tup ƍP@u+‹؋ōP@u+‹LQV$t>GWURhD$Up T$,jL$QR>t$4D$UD$ _^][UD$$D$$_^][Ã~tD$,P諙F,N;AhwD$ _^][̋H8SVWyǍP@u+‹VR؃tSjSV D$0 t4Fˊ:utP:Quu3t6uS_^3[S_^[jXj7uhHhH-3ÃH4H8H@HDfHHHH HHHHH H$H(H,{uËL$HTVt$F tF ^ËFt PF4t PF8t PFDt PF t PFPNQVRFPFHt P8F\t P(V^S\$C V3C8Wt p ChIP~Pd$@u+|0;vfP8t O;w_^[;vG?:uB+OQ@C uhIhI+_^3[WVPeS s _^[̃SUVW3j jt$ t$$t$;uhLhL+_^]3[ËD$$\$(PE]D$;uhLhLYj:Plt2t'QEuhLhMw>/u.~/u(VUhD$S38?u@SD$~8#u@SD$ c8|$u>/u~/ Fh2PtF uNh2h2Q8 Vh2RGSVWG P[~$u ֋, WdN9tW GRPh3Su?ujh3SN\Qvt V\RS_^[S_xUV3;tNH VFnLJV FRuF PFtWtWw r , "uO OxjQ`k LJVdF`RVЃtF u V4^][Vt$~t vt QVЃt1tPQ HPP uϋttVPFANW~WtWWF _t PcPQPFtjPVR;'FXt P[F`t PKVB^̃SV3;9VD$\$D$ 9;tPQ HP T$ PL$ D$ 9ut$;F;tQL$ NdV`QV^V1t$ ;u^[ËWVhSjP~W=~;t\$D$uD$-L$QSW#_^[fT$W|$Ht$u,AXu&9AT!|9APsfue_@t_vGxGxtUh8h,8hShH8hP8hޭ$ht8h8hSh8h8]Y@PHX XtUh8h8hXh8h9hޭ+$h$9h49hXhP9hX9X@PWWW_@t jW1_0t jW_jW_QSVW9|$|$u_^[Yû9|$o|$D$ t߻9Z|$uκ9Ί:utY:Zuu3Ƀut$F(9Ί:utY:Zuu3Ƀut$F(9Ί:utY:Zuu3Ƀut$F(@9Ί:utY:Zuu3Ƀut$F(9Ί:utY:Zuu3Ƀut$F(9Ί:utY:Zuu3Ƀut$F( 9Ί:utY:Zuu3Ƀu t$F(@C9Ί:utY:Zuu3Ƀt$ɁN(PD$ PF4jPbF8xX tHh:W+th:W+u$t t$NSjuN _^3[YQSVt$WSD$PVǾ u)|$9GtVoO;Ahv_^C[Y_^3[YËt$FL$ t;HhvW;_^[YËF$N,tHuW* WV~uW_^[YUl$VtNH VFFh<>hhd>hl>O@PMMfF\NXNxjHFu ^PF POPN Vh VjjQ\KF|u-V PjRMF jP5]NdV`QN RjPQa(y%V`FRh>h>Pl3^dž3^ËD$ Vt$ F(F4F$t PL$QF4uh>h>V ^À~<SWu ~=ufF<~tUh>h?hh?h?hޭh@?hT?hhh?hp?~M@PiL.L|$~^ tUh?h?hh?h?hޭIh@h@hh@@hH@M@PLKV09w8W|t>tVQV_[ ^ËNV_[ ^9u Wl3_[^Vwu W2^9tUhLÍD$ PUZ9D$<D$8r =@P؃D$83|$<3ҋ+|$xv+P3PUX ~ D$8;rURyS+L$T$3_1^]3[L$H3>LUQL$\_^][3̸=LQVt$ D$Ph~fVD$uVh8QV ^Y3^Y33̋D$P^̃PJ3ĉD$Vt$u^L$3G=ÍD$P`T$L$iL$V^33=̃VD$3'u6D$x.L$QT$ RhhPt^ËD$u^SUl$VW|$39}JESjP7L$Qh~fV\$ uVh8QV) OT$RUPyZQ)=3'tA='t:=4't3=&'t,=M'u _^][ÅtR_^][_^]3[_^][̃T$ $PL$QhhRD$x+D$t0=3't#='t=4't=&'tP3ø̋D$ЅuD$ÃxHtzJuL$JQj D$PVD$ : =w>t $t9tYQj D$PVD$ : =w>t $t9t,L$ u T$RVt@PYÃY̅t$ttPtøSøS3̃x u!Htu @  u@ xu H tu@Ãu@̃(3UV5ܱWD$D$D$D$ D$$D$(D$,D$0D$D$PL$QhShSD$ D$D$$ ֍T$ RD$PhShSl$,օu t-[D$ t x u-[L$5tQ֋D$ tP_^-[](̃=[u"[̃=[u[Ul$W?tOSرVptu UfF!u UfFHP@??u^[_]SUVW{ uCtu C uk {ufC tu C ;uC{u@{ u:j t>Ck @@ KHC[f_^]3[_^][Vt$u V^WF~t PIV@u_^̃=[u D$[̋D$=&'StK={/t'=ot=qt =uuuUøVøTøTÅt uTdUøTøU=*.t&ȁ<'tt >u%UøLUøUøUËȁ*t.It%jhh ohPjh oø UøT̡]T$3Ʌx;tͨ]AyT$|Yͤ]Vt$ u3^S\$Ul$W|$ WSVUZy WSY_D.][^Vt$W|$+u2FO;s_^|$tFO+}_3^ÃunAOVS;u*s3[uN9D$tFO+u<_^+u"BY+uBY+u BQ+벸_^T$ʃ#T$ʃ#ȳT$ʃ#T$ʃ#(T$ʃ#T$ʃ#HT$ʃ#T$ʃ#hD$D$̋T$Vt$ BF:|!t$BF:}^ø^3^Vt$Wt9|$ L$+ $INA:|tu_3^_^_^3"XX̋T$uBPԱ%3=ÃuqVI2;1us33Ʌ^1+u"Bq+uBq+u BQ+3Ʌ^3̋L$A=@B*  iMbÃD$Ѓ6wk~$l~3øøøøøøøøø ø ø ø ø øøà ~~~~ ~&~,~2~8~>~D~J~P~V~\~b~h~   ́PJ3ĉ$S$VhD$ PpˍqAu+΍L|_Њ@uW|$ +OOGuȃȍd$@u|$ +OOGuȍT$ Rl_^[$3/Ë$ ^[33/̃0PJ3ĉD$,L$@W|$@L$ |$D$8t uh&'_L$,3u/0S\$@U-VjSjՋw3D$D$ D$$D$(hfD$ ȱjT$ R3VD$,fL$* jVjSjՋ-̱D$PL$0QV\$Ճ9\$ST$0RWD$PL$ QV\$б؅xv|$udVT$RD$0PWՃtV|$uDfL$f;L$,u8T$ ;T$0u.fD$f;D$.u"D$^]X8[3_L$,3$.0Ë\$E' \$t V55tWփtSU^][_L$,3-0h?'L$0_3-0̃ SVt$4WuUhRhRhhShShޭ/h4ShHShhPSh\S$@P""~u~ uy\$0|$ |$4D$ PWSD$ D$$b t,L$ QWSD$ D$$= uV_^3[ ÉF_^[ Ë\$4S Rj詮tUl$4SG UPG$_EGN OV ]W _^[ ̋D$ SVt$؅u^3[W|$L$QPVWPyT$RSPD7_^[̃dPJ3ĉD$`L$hD$lVt$tWt$ udPԱ|$|QQQPh_WVXx;s_^L$`3+d_3^L$`3+dÃupxfPfʺfPfSfPfUhfPfPfX ffT$(P fX fX fT$*P T$\$һf\$fӊX@D$È\$f\$fD$fL$ ft$"f|$$fl$&fT$,fD$.fu.fu)fu$fuf9l$(ufL$*fu_ft f\$3$f|D @}$f|D u@A|;ڋf;uT$D$L$RT$PQRhh_D$Hj@Px D$0P@u$+;][_3^L$`3)dD$L$T$PD$QRPh _L$Dj@Q@|$03Dt fu&;u"u:G:G}f|t uF|N/PD$th0_+PWǃP@u+t:GF|D$0P@ut$QL$4QV0L$| ][_^3(d̃8PJ3ĉD$4D$D$3;‹ȃtFjT$(RVh&L$0V ;;t~xz=sD$fD|0G9:t;u`q5:uV~|$u ωL$F u>~:u8|$u1D$L$;S\$(L$T$uto][_3^L$43%8}txOۃ¾+++y][_^L$43%8Í|L0P΍TL4WRK6PjWND$,T$0L$0L$2PT$2HL$4PT$4HL$6PT$6HL$8PT$8HL$:P T$:H L$]P T$:[_HP^L$43$8ËL$<_^3̃$8́PJ3ĉ$$SU$V$Wj:Vl$D$$>[j]V$A+K3SFL$8VQ D4:t$4uG333PL$L$ L$$L$(L$,L$0L$4fT$رfD$D$ PVj, \$PjUMt$$ 3rtLkj:U#tl$K+3BST$8VRŋl$ D4t$43PH $_^][3#ĨùfL$رT$RVjfD$&A ut$|PjU5LD$$L$(T$,ED$0MUE 3́PJ3ĉ$SV$W$uJhD$PNQjNVRtm$PD$PhT_QWiuJhT$RFPjNQtP$T$Rh\_PW$Qhd_RWc$_^[3!Ą́PJ3ĉ$=[[ [[D$`[L$d [T$hD$lL$pD$$t$SUV5ر3WD$j5D$ D$$D$(fT$fD$D$PhLQj6 uUh\QhtQh>hxQhQhޭ|hQhQh>hQhQP@P;3D$8j5D$@D$DD$HD$LD$PD$TfL$<֍T$@RhQjfD$F uUhRh RhDh$Rh0RhޭhTRhlRhDhpRh|R@Pb=3jjjD$4D$8D$hxQhQhޭhQhQh>hQhQ@P\3D$0j5D$8D$ uUhRh RhDh$Rh0Rhޭ:hTRhlRhDhpRh|R@PSU3W=jjjD$8D$F<WP]Fu_^[ËNWQBFtVWR.FtFFNRPQF NRPQF NRPQFN $;wu'D$t PyPt_^3[Ët PjqT$FNRVPQRWıt Pj2_^[ËF8Ut9(V533ۋt&FG;8r3TD$jRPNC ;rڋV:t9*533ۋt&FG;8r3LT$jQRMFC ;rڋN9t@)433ۋt-$FG;8r3DL$jPQVC ;r]_^3[̋D$VpPFt PRF t PBFt P2Ft P"Ft PV^Vt$t PjfuFH jVуfT$ f t Vj^Vt$t PjYD$ f!utNQjV҃t Vj.^Vt$t PjfuFH jVуfT$ f t Vj^Vt$t PjD$ f!utNQjV҃t Vjn^̋D$Pf6L$jQ;r _Vt$t Pj D$ L$T$D$t Vj^̋D$̋D$̋D$̋D$ L$T$PQPc@ H̋D$L$PR>@H̋T$D$Mb̋D$T$QR>SVt$ W33;t PSD$;tP D$;tP F@;tVЃ;t VSp_^[̃3$D$D$D$ D$33Ʌt$$D$tD$L$D$QRPVt$W3t PWD$Vf!PB VЃyt Vj_^Vt$W3t PWD$Vf!PB VЃyt Vj__^Vt$t Pj)L$ D$W|$t tkuVhP[ jQR&]P2;v jV9Q2;s)tjPR] jV_t VjZ^Vt$Wt Pj%F@tL$T$QRVЃ t Vj_^Vt$t Pj^Vt$t PjV0^Vt$t Pjit Vj^^̋D$Vt$D$ Wt PjNAtT$RjVЃ t Vj_^QVt$ W|$t PjF@tL$QjVЃ t Vj_^yYË$YQVD$t PjRF@t L$QjVЃ t Vj6^YVt$Wt Pjt Pjf_^QVt$ WD$t PjF@tL$QjVЃ t Vj3_^H#$YVt$FWPPV趦_^xx3ÃSUVt$Wt1fu'u tPFP@ NQRtDfu:u t"R.tWPV PV_^][xx3Ã̋D$8uxu D$餷D$雷Vt$t Pj9^Vt$tst]uZt Pjt PjPQYtPЁ^ËRVЃ^Vt$tvt\ uZt PjSt PjHPQsP=^ËRVЃ^Vt$tnfD$ f u_t Pjt PjQR$sP蛀^ËT$ QRVЃ ^Vt$Uhahahchahbhޭoh,bhLbhchhbhxbC@P.tt Vj3^WVF@tVЃQd+RX+ taxt jVm Pyt QŢ RÒ Pgdž NQ衒VPR蘒t Pj#tt jPF+pVtt PjWd_^Vt$W3;t PW;t PW;t PWg|$ ;t PW?F@;t L$ QjVЃ ;t PW$V_^Vt$t^SWV|$؅u.t u ju_[^ÃWP$WQ$tu WSl_[3^Vt$t PjIt Pj.FfH jVыt PjjAVV ^Vt$t Pjt PjFfH jVыt PjjBVxV ^Vt$VhjjPNQœVh`jjRPV诓0^Vt$ t Pjy-t$%fPhVу t%tRVЃt%tQV҃ft=t4W3PfRWVЃ _V^SVt$Wt PjyRtH%ft PjWhVӋ t PjtJt@t PjbWVӋt Pj6tJt@t PjWVӋt PjftbUtV؋3Pft PjWSVՋ t Pju]V _^[Vt$W39u{;t&9u$d;uP$_^ËL$T$S\$džVftC nD$+3{;sD$L$_]F[N^L$~_][N^3^̋L$MbiV™WjhRP2#D$HjQWV"_^̃SUVt$(Wut$D$t$\$D$ ;|$$l$(;r|wtwl=wew]jjKzȃtKD$ Ayi QFAVMb‹i_^]A[_^]3[{z̋H0V0H0tHtPj+@t jVIt Pj 2u3^̋H0V0H0tHtPj@t jVt Pj 2u3^̃ Vt$D$t Pjn xSUWD$PQeD$ _jhRP T$(Mbl$™D$(‹SjRPUU PS W t x ~ SVWD$t y~SV|$t PRP迨_][t Vjw^ ̃~Hu3Ã>uUhbhbhhbhbhޭ_hch0chhPchhc3@P~Ht J uSUVf0W3o؋tV$tPj@t"jWtPj 8u>tS;tOtPjE@t"jWtPj. 9u3V0_1V0^][SUVf0W3؋tV$tPj@t"jWtPj 8u>tS;tOtPje@t"jWtPjN 9u3V0_1V0^][̃Vt$D$PNTQlPat PjD$SUWjhRP~؋Mbl$™V,jRUSPFPWlF0 u t;NL|F0_][u tV ;VL|ct VjQ^̃ SVt$D$t Pj Ul$ WuE 3;jV_rjV*WiW D$PQ{`D$jhRPeT$ Mbl$™D$ ‹UjRPW D$ t 9oujdjs D$ L$$39_oÍo SPQUtn_SiuUhchch`hchchޭhdh0dh`h`dhxd@PSVhjjR_S}jV~ l$ jV~>tD$$PS~3ۋ_]t Vj5^[ ċD$=vËL$QAP;v‹Q;v‰AL3Vt$t Pj~HtUhdhdhhdhdhޭݱheh4ehhHeh`e@PaFTPt Pj]t jP(VOr^Vt$t Pj  tsWxtjt Pj @OH 9t PQIO Pt Wj_|$ tjV jVt Vjm3^Vt$Wt Pj8~t Pj0_^Vt$Wt Pj~ t Pj_^Vt$W3t PW t9xuUhehehhehehޭ¯hfh8fhhhfhf@PF Q +D$A ~.TjV^ HQPXy/*~&u RPjVut Vj_^Vt$W3t PW t9xuUhfhfhhfhghޭ貮h4ghXghhghg@Pq6 Q+D$A~.TjV HQPHy/*~&u R@jV%t Vj_^Vt$t PjN+D$ F~ + ~t Vjl3^Vt$t Pj9N +D$ F ~ + ~t Vj 3^Vt$uUhghghhghhhޭh4hh\hhhhhhh@PD$ t N8V x t Vjl_^Vt$Wt Pj8 txt xt Vj _^Vt$Wt PjVt Pj_^Vt$Wt PjV?t Pj_^VW|$ t PjX uKjdjdut WP9_^ËWhjjPNQw  Bt$;t jWt Pj pFH F BN9F0 SVUt Vjt jW][t jWCt WjN_3^V ;v I;rVtcu^3ɉHH HHHH pH^̋F0t@FèttF tN$VQNRQЃ VcYVtBWF>0t@F)ttF tN$VQNRQЃ Vqcu_^̅t xu u3Vp0xuHt>uxuuM^hhhhhhhhhhޭhih;tUhtjhjh!hjhjhޭhjhjh!hkh(k@P|?tUhLkhdkh"hxkhkhޭ螠hkhkh"hkhkr@P]"_CG ^ñ0xuHt>uu#O9CWW_CG ^Íd$xuu=_CG ^hlhlh0hNvF ^̃~tnteFP蘹uUhvhvh/h whwhޭ辑hhyhyhޭ*hyhyh>hyhz@PVG;uNNWVG F ÉFWVG F ̃~tnպteFPXuUh$zh4zhKh`zhlzhޭ~hzhzhKhzhzR@P=tnateOQuUhzh {hLh8{hD{hޭ hh{hx{hLh{h{@PWFW V 8u G;u v;uGF̃S\$UVt$nW{D$tt ;vNjt Wj%;tt Ujk F D$ tq;tmFu_CuYL$QT$RxA|$ u;D$|$POknSV D$[vtt ;sËދ;tt Vjxt SjiD$_^][̃S\$UVt$nW{D$tt ;vNjt Wj;tt Ujk F D$ tq;tmFu^CuYL$QT$RxA|$ uD$|$P/knSV D$[vtt ;sËދ;tt VjXt SjID$_^][QVt$ FD$t PjF zFt D$gSW9D$rhNtAuW>D$tCIG0t@G)ttG tO$WQORQЃ WLuD$\$>+ÉF ;_UV+_/;:uv;~uvGu>0t@G)ttG tO$WQORQЃ W-L;]sg3;tUh{h{hh{h|hޭh$|h4|hhD|hP|@P׾蜾WWoo ]>_W )_D$FV_[F^t Pj{$YSUl$W|$G3ۅt PSEG V7|$;rD$@tߍF;NNPQUF6 +uYttht|h|h*h|h|hޭh|h|h*h|h}Ծ@P追脽vtVVWRUb D$@^t Pjk_][̃SUVW|$$G3ۉ\$\$\$;t PS)l$(7;}o ;K;o BF;r FF,+yUh~h~hh~h~hޭ h~h~hh~h@P̼葼ÅtI@0H;s+uF0tO^t33N3+NF 3+‹3+;~;t~~n\$$t$(6eN3+NF 3;|";rF~~nt$(\$$+2D$(uh,h<\$$xhCL$F;VVPRW耾F +;t$uD$D$$;puD$F0t@F)ttF tN$VQNRQЃ VRHۋ\$$vD$(C|$L$(1u:|$t68t,zt$C"VVURWԽř FV )n빉[AAD$D$$@_^][t Pj迱$SUl$ ]VuWt2F~~+PD$P Q uV+U63ۅu_^][Ë+++EE_u^M][̃SUV,W;sS+|$ |$D$;sWj VWj Vuut$D$;r3_^][Åt;r_^][̃L$AQSUVWD$T$u_^][D$ppT$ht$ +;sm+D$|$|$9l$sWj VEWj V:uuD$)D$;rt;s؅u2D$L$(P+T$D$D$U_^][ËD$(L$HL$ ++\$_^+]P[SVt$ ^V3u^[UW{k{;sIt$tF8 uB@;rt$ 3҅tʋL$_]^YQ[_]^V^[̋APPAQUW|$G3D$;t PUGSVt$ ;u;bCuq9ku CCk C;r'SL$V+QR脺s )sk w wx K t.T$+PCRPVCCG KO +skk $;tE9uGPL$+։PPh PVQRpw C GW"l$^[;t WUD$_]YFtUhhhhhhޭhhhh0h<˷@P趶{F0tUh`hxhhhhޭ蜂hԀhhhh$p@P[ FNVQRP3 FF ̋AI+;T$r;sw3SUVW|$tnteGP蠩uUhHhdhhhhޭƁhh܁hhh蚶@P腵J_t@uH33+H+HP u؋3F8t33N33+N+NF 3;|);L$s#nD$PtsuUhhhhh(hޭ߀hLhhhhph|賵@P螴cGM33Vt33N3+NF 3+‹V3;;D$jNOFVFORPQڶ 93tUh8hThhhhthޭhhhhȂhԂԴ@P迳脳D$;9pux6t4Ft33N33+N+NF 3;|z;L$p|$D$W_^][ËO33+O+OG 3;|;L$shhhhhhޭhh,hhPh\@PҲ藲_^][_^]3[SUl$ }VuWtnکteEP]uUhhh-hĄhЄhޭ~hh h-h8hDW@PB|$}Uhhhh.hhhޭ'~hhЅh.h؅h@P諱^FTM)333;E;tvEuu+u+T$B;(tUhh hCh@hLhޭ}hphhChha@PLt ]uu Gt$;;|$m3;Vt$;|$tUh؆hh\hh hޭ|h0hHh\hXhdű@P谰u+F ;v;rV<3ɉHH HHHH HL$pQ_^]A3[ËL$A(ED$ue;)tUhhhmhhhޭ(|hhhmhh@P謯D$3Et3]+]+؋m}}tUh@hXhxhhhthޭ{hhhxhḧu@P`%E0t@E)ttE tM$UQMRQЃ U<`+F ;v;rVC;t83ɉHH HHH9L$L$P pPtC_^]AI3[Ã|$tt$_^][ËL$AQ_^][ËQ_^]A3[ËD$ ;v;rV:t3ɉHH HHHH ؋pH_^]3[Vt$FWt PjۤD$PVFt Pjɤ_H^Vt$~tnteFPsuUhh hh8hDhޭyhhhhhhm@PX|$ }^ËvSW3@t$uH33+H+HP uD$\$L$ 3~JUl$t$;s_^Vt$FWt PjFu%N ~D$PV-~ WVvt Vj۟_^S\$CUV3W|$t PV褟D$ T$t Hu*r:B3:3tN,;r76+3uBCt Pj[_^]H[rzUl$ VWtnzteGPuUhЊhh hhhޭ#th@hTh hh@P觧;O v_^]Ë~FSO(;v+ȋ݋OOT$ȋrI;ustK*+u1v8Aj+u v'Aj+uvAJ+l$l$3u\$?+l$U3[_^]QSUVW|$G3l$;t PU賝D$(t$;tPV@F^ .^nD$,;tHL$D$$;=T$ ;FK{{+QUWF t6L$+FD$ +׋|$$WPt/FF;Cu;\$t*K+NF^uD$,t;~ FD$@t Pj蹜_^][YSUl$ EVW33t PVvL$\$$T$ t%AIp+~ hhr*EL$u y L$I +΅t.x;}$;}hh,hlx pGuԋT$Bt Pj_^][QS\$ CD$t Pj賛CWj@StqUVGGOGt3w+w+L$ T$QRVPxx4;rEUS}uok kSLl$^]_[t Sj#D$[Y̋L$T$D$ PQR SUhA0؃tkL$T$3CC CCCCC CK KL$Vt$ssW|$HGt PjqGtS0][wWi3t WjE_^][Vjj/u^W|$ Gt PjD$L$FG@N FtrwD0Ft Wjƙ_^VW|$ Gt Pj苙t$tNHVWDFGt PjjVq/_3^SW|$ Gt Pj(Vw@tiD$L$I;Nu;F t6uJGt PjtNHVWDFGt PjҘV.3ۋG^t Pj贘_[Vt$W|$ Gt PjqD$ pG_^t Pjf3Vt$W|$ Gt Pj1D$!pG_^t Pj$3Vt$Ft Pj|$ tNNvt Vjٗ3^Vt$Ft Pj謗|$ tffvt Vj虗3^33̸Vt$ FWt Pj;~HjVt Wk_^̃UW|$Gt PjGVt$$St$ VWHHT$$H @t3ɉL$H33+H+HP T$D$$HxY;sUhqhqhvhPqh\qhޭkhqhqhvhqhql@PW,\$ VSW xT$$jL$ QVRSWX[^t Wj_]VW|$ Gt Pj軕D$L$PQWH ~VWxyt Wj菕_^QW|$ GD$t PjSGSUl$VwuVuhN^F++;r!T$URVRn o 0u3Ut$ND$NUPQ諠n o j3ۋF=w;vwD$t]t%FFT$FSRPf^_ D$$ _P+\$USRE\$$ koW]D$^][t Wj0D$_ỸVWGt PjS_ty@GUt Pjɓ_u*jVW( xjD$PjL$ QVWGt Pj蘓|snT$D$L$(RPQ6 ~Tމ\$~5T$ D$L$(RPQ jT$RWw t$ UD$PWb ][t Wj _^̋D$L$T$ jPD$QRPL$QL$(P@QA$QVWjLW|$ (tVL$S\$F@FDD$ jPQS~(v#ƒu*Ft PjAV[_^Y_^YË|$$Ul$, t$$SNjt4+ u|$Gt PjGVt03CFt Pj軑V][_^YW@VJSWt$$t Wj舑][_H^YVt$Ft PjL~@tW|$tD$PjV Hxv_t Vj^Vt$Ft PjD$ PNVN,hQF$Y!vt Vjǐ3^ËD$S\$UhVW{3tt ;vNjt Wj~;tt Ujkl$;XL$;LA=C3C D$;rSQt$9oGD$K;9uUh}h}hah}h~hޭ"eh$~h<~hah\~hh~@P覘T$+|$9{u[?GD$9(vt$t>D$\t$>u D$F;L$H HWWD$URP oW )o)s stL$Q2S,3[T$Btt ;sˋ؋;tt Pjt SjՎ_^][̃Ul$ EVW3|$ |$;t PW莎D$,t$$;tPV@F >MN~D$4`S$VFFNT$T$hPRD$$L$(yD$WVjhTD$(UP)P@VF9>D$VFHHV< jhXƋjtEt Pj~FtO;rG?+3uFEt PjNOxQS&t[^t Sjk_[ËD$jjP ̅t@u3SUl$ 3VuT9]X~mWuOhhjXhċhԋhޭ*`hhjXh h@P豓D$>PV.C;]X|_^][QSUl$VWtEt݉\$ D$\$Et PjZCPttOh@hXjhhhhޭl_hh،jhh hC@P.|$yOh@hXjihdhthޭ_hhjihh̍@Pג蜒jUu@uD$\D$L$;HXsq>uOhhjrhh hޭ^hDh\jrhdht`@PK ;sϋHD$+u6u|$\$jScP} }UU_^][YVW|$ t Gt3Gt Pj蛈FPttUhhhhhhޭ]hh0hhdht~@Pi.jWpD$PWj VfPW_^hjtuÃHH@HDL$@(@HL̃SUVt$3;t Ft3ۃD$ ;~F;t PU臇CPtUhhhh̏h܏hޭ\hhhh4hDo@PZFCPF ;u l$ L$;|;vD$WjVh{\UWkTkX6sTt8FFj VGʼD$(E;FvN+F6D$ |t$VkXfT$(KLjRjD$ PUC\PQ_t(=tj S,jVV KPD$ vt Vj.D$ ^][ÁPJ3ĉ$$S$U3WD$;t Ct3D$l$;C;t PU贅GPtUhhhhhhhޭZhАhhhh蜏@P臎LCnGPdVhw\UVoToX $jUS1jSjL$,QjT$u^$R_]L$D3(D̋D$A̋D$3ɉHHH HHH̋D$t3V395[thhjdQ 95[thh̓jHQ 5555[^Vt$u.D$ PJuhܔhQ^3^Vt$tnjPLyUhh(hh0h8hޭPh\hthh|hc@PNdž^̋D$uËL$ H3̋D$uËL$H 3̋D$uËL$H3̃xx x|3øQF($ft $N,tQj{zD$ft{WHD$fF(fuF,VDF2NRV@PQҋ t Pj"zt Pjzu D$fu_Yf|$tF,_Y̋@ȁPt3ËL$%3;‹Ë@3A%@̋H̃H8@<%D$D$ jT$RPL$ )SVw3ۅtlIftNHVWFOt PjyVF RVЋt PjxL$ 9uCtwu^[^[Vt$u[hhhhȜhМhޭMhh hhh蘂@P胁H^Ë^̋D$ ǀVt$Wt Pjxt Pj x_^Vt$Wt Pjwt Pjw_^Vt$ f9F4t^Ã=[W=[tWj{w=[ t*35 t9ptȋu9u,N4VF0QRPVhphhޭ[L=[t Wjw_D$F+F63^̃=[Vt$W=[tWjv=[ t*35 t9ptȋu9u,F4NV0PQRVh h hޭK=[t WjVv_F4uD$ xN;}F63^Ã^SVt$ F3Wt PSu9[=[tWju=[ t(35 t 9ptȋu9u,N4VF0QRPVhlhhޭJ=[t WjouF4t^0tN2 ٨t|$L$t#tF~EA+F _V3^Vt$t \PtFFF F^Vt$ tm_9t^VW=3ɸt A8uA [t'<Wыt WjV+ = jPu_3^3Ʌt)֋ǁ$Au[t# \Ptу_5[^Ρ_5[^̡[jtЃt 3ɉHHH H jGu3@̋Ft \Ptу\tVЃ7V.YS\$V3W=\tXtNHVSFFtPt׋=\tV׋=\ʠV3uSt ׃_^[襠_^[SV5[j t ֋5[裞؃tit4Ul$WP@u+xW֋t WUV+i _] D$P,Cu#\St Ѓ^[^[ËD$ HKPX^3[Vt$Wuo|$Ow`;t' \Pt脟džjWuh8hT._^3~- $ @I;|_3^Vt$u^Ët Pj[Wdžt[9t 3t Vj[_^̃=[Vt$.W=[tWjk[=[ t]35 t9ptȋu t2At,F4NV0PQRVhhhޭD0=[tWjZ=[=[tWjZ=[ tZ35 tI9ptȋut- \ Pt ы=[ft WjdZ_f!F4[^̃tqZthPWuUhhh hhhޭ(/h h4h hhhpc@PbbF4uNSQVhhj.ЃtO|f!V4HtvHtKtShȬhܬj.Nt HVV6LVËFtN H F NËV F NWF8t:V< FtNHFNËVQFNVY̋FN@W;s<< u;s[PQt躚t ~FT$RHVN3_Ã_̃>tF;F rNAQV8FG3v <̋D$ [PQ̡[P̋L$T$Vt$FLPFHQRV\VtЃ^茚^SVW|$3;u=[t$9[[;t PSMW ;tV35 ;t 9ptȋ;u ;t,At&F4NV0PQRVhhhޭ-,[;t PSVD$ L$$T$F@fD$ND3ɉ~VfF0F2fN(^,t#thh,_^[F7t ^,^(F7^7F;t+F69[[;t PS7V ;t335 ;tI9ptȋ;u ;ta{[j ;t;uhPj&gw9t;r@PhG35 <[;t PS|U_^[3[̋D$L$T$ PD$ Q [RT$PQRtUh̞h؞hhhhޭA*h hhh h(_@P^]̡[VjHtەtAD$L$T$PD$QL$RPQVy\Vt Ѓ3^g3^Ë^Ul$ED$u]ÃttTtkEQQuUhئhhh(h0hޭ,)hThhhhh^@P\\SVW}9 u/gS9t"tjRPS E4`tUhЧhhhh hޭ(h0hDhhdhlc]@PN\\E0tf}(t E,t3fE4t ]4t]4tUE0Ut URW3 EPW7 D$u%D$tQR9tb=[5[tVjcR5[ t035 t 9htȋu ta,M4UE0QRPUhhhޭ='5[t VjQD$_^[[]VWtqRthPNuUhhh hDhLhޭ&hphh hh[@PZFZG4t&OSQWhhjh&_^йtN|f _4++t\tShh0Q,&_^G6LOD8O6|_^ÍGO :_^VG8t G<%R_^W_^̃SUl$Vu3Wt$$\$\$9tqwPthPLuUh<hPhhhhޭ%hhĤhhhY@PXX9[t~[;t PSO ;t(35 ;t 9htȋ;u9u&M4UE0QRPUh$h8hޭ{$[;t PS8OM4`tUhhhhhhޭ6$hhhhh  Y@PWW9\$(t)E4u#Itu _^] [9 u4E0t.BN9t!;tSRPN E0t[E4 uUt EUPVW,tMUQV1 D$t ŋAD$uD$D$ |$(e8]7u|$,uD$(U(@E,E4t}uD$|$$wE4t/E2t)E0tf}(t E,t3f|$$Bt$$|$L$(AЁPt33%;‹|$,t E8IMHVF;tPS.H9L$,E,uuhh3t PjGVzFt PjGVut]F4~uNFuhh3t PjlGVNt Pj[Gu\Ut2T$C;ꋅt \Pt\$39~$4t_IF4>uNFuhh3t PjFVENt PjFuE;|t @tSЃ39~j<tUh̕hܕhhhhޭ_h,h<hh`hh3P@PONF;|_^tUhhhhhĖhޭhhhhh O@PNzNt \Pti \PtLtUhDhTh hth|hޭZhhh hЗhؗ.O@PNMPFDN2VPF@QRЃ W~;t PU> 9t;t jP(>9u 9uL$1;+D$_^][Y_^][YSW339~3<tPƉs؃x/ G;|ύQ_dž[Ã_[̃Vt$WD$ 3|$;t PW =9t/h@hP;t VW<_^SUdž9~ht9~lt V+f<\$(#39 9L$QVET$T$uu L$|$|$kuT$D$RdžHVуtldžu ۼt'D$$ D$$3][;t VWT;D$_^̃=[Vt$W=[tWj ;=[ t*35 t9ptȋu9u,F4NV0PQRVhLhXhޭ=[t Wj:V=[=[tWjk:=[ tX35 t9ptȋut- \ Pt ы=[}t Wj:\[VtЃ_^|_^Vt$Fuhh(^Ët Pj9D$ WjPV:N t Pjp9_^Vt$FuhhE^Ët Pj9=[W=[tWj8=[ t*35 t9ptȋu9u,F4NV0PQRVh,h@hޭ =[t Wj8_D$L$ PQVBV t Pjj8^Vt$u^Ã$W$|_3^Wjjj*uhXhxPY _^ËP (Q Rt ( džt+~ PW SVh2jP,VS+f`jSjS([_^Q[S3V[hx;tЋ;t!hxSV,t jy;uh h(h ^3[YUW2l$F`Fd$(3dž<;t EQRFPU ^;t E\$uD$9t^~uQt8׸u6 E I#;u(|$tPuHVуF;u39^u"h4hP VW _]^3[YhtbtPh\ jVyV_]^3[Y5tV;tEuLjO5S}5V y hhK V _]^3[Y;tEt MQVF_]^[ỸSUVW|$3t$t$;t PV4/9whtIwGLt G`;t P Gd;t P Gh9$tn,D$4`t"$PGh/ (;t P V$(AtWЃUW҃Guhh j \$GP)QRa tAd$F0tG;t'NVQWtVVRW ;u\$vuÃ|$t|$u WD$t WjF3D$_^][̋D$jPËD$ [PQ̃S\$t[á[VjPtЋtjPjVo jrtu ^[ËD$ L$$WFHNLfu+|$,u |$|$ |$ T$VhDjjRV"ÃVt_L$hDPD$(PQV|$DWVpt)\VtЃ_^[ u_^[_^3[á\tЃ_^[t_^[j9uhHhTj 3ã[̡[VW3jtЃt3ɉHHH H j#stV>vV#_^̡[jP̋D$PD$Ph$jjP̋D$L$T$ PD$ QL$ R[PQR̋D$P[Ph$jjP̋D$\̡\t VЃV;vޭud9̋D$\̡\tRQЃÃw#$Hl`hl txRPh|;:@P&9Ð lll"ĺPJ3ĉ$$tQPD$hP $t1$P@u+=sVhX+QT R\t $QWЃ$3BÃw#$Tm`hl tx$RPh|C9@P.8$3qBÐm mmḿPJ3ĉ$V$WoP;et$QVT$hR D$t2D$P@u+=sWhX+QTRh\tL$QjЃ T$Rhth|O8@P:7\t$VЃVs$=ޭu6$_^3LAPśPJ3ĉ$V$ WnP+dt$QVT$hR D$t2D$P@u+=sWhX+QTRX\_^t $QjЃ$3@Í$Rhlh|,7@P6$3Z@́PJ3ĉ$$ VWP$P t$QVT$hR D$t2D$P@u+=sWhX+QTRb\tL$QjЃ T$Rhth|I6@P45\t$VЃVq$=ޭu4$_^3F?P|q́PJ3ĉ$$VWP$Ppt$QVT$hRD$t2D$P@u+=sWhX+QTRB\_^t $QjЃ$3x>Í$Rhlh|5@P4$3D>ÁPJ3ĉ$$ t$QPT$hR$\t $QjЃ$Rhth|4@Pw3\tV$ VЃVo^$=ޭu3$3=PóPJ3ĉ$$t$ QPT$hR$\t $QjЃ$3 =Í$Rhlh|3@P2$3<́PJ3ĉ$$t$ QPT$hRI$\t $QjЃ$3k<Í$Rhhh| 3@P1$37<̋D$VWPL$33_^̋H̋H3;J3ɉHHH @̋u3ËD$Vp3wt 9qtu^̋t+Vp3w t 9ptȋu^3̋Q3Vt1΋9u @;r3^Í^̋8Vu*PN3B;s68u B;r3^Í^̋WzI8u/3VqB;s1I8uB;Qr3^_Í^_̃Vt$NW=G;u_3^ËT$ 9V wSAÉD$D$y|$ D$ D$l$|$D$D$l$ ;w;|U؍,UL$UtcjWMc3 9nv;I t)$Q31 ΅ut$$E;nrȋt P<>Qu ][_^ËF+RDjPb3 9~vMl$t.Q3;uDLu֋t$L$$Gt$;yr.D$T$]^[F _V3^Vt$t PoFFF F^̋D$ Wxu%98u9xu9x u xu3_ ø_ U( PH @D$;v ]_ ;<t ]_ ËljD$D$y |$D$ D$l$|$T$l$;t ]_ SV33ۅtGl$ Mt,AЋ;u;3;u: CuՋl$ Fl$ ;r+D$^[]_ Í^[]_ Í'^[]_ ]_ ̋D$3ɉHHH @Vt$39Fvtʃ9u @;Fr`tYSW$KN8t*~3B;sI8uNB;r3SKDžu_[t P4FFF F^Ít6W39~~<t QKG;~|R:_F^̋D$3@H̃L$SUl$ W|$ 3ہD$\$\$ \$;itUhhhhhhޭh@hPhh`hh+@P*P*;} _]3[9tW;W rG@PW&;t,3w ;t$9htȋ;uV3u:L$Q Rjh$nF3@H3G~^tD$tL$T$,B0tGuD$t CuL$=[t*Nt#I02 tUhM^_][ËL$ft4 JT$$nUPD$PD$$QHRуtFT$,L$f~f^B ~ z$~ F ^_][Uh^_][̃SVt$ 3W|$ D$\$\$ \$;} _^3[Ul$,;utUhh h[hh$hޭhHhXh[hhhpX)@PC((;t13 ;t 9ptȋ;u ;tq3~^ tD$tL$E0tbOuD$YyUhhhohhhޭhܹhhohh(@P'F'E0tcKuL$YyUh$h4hth@hHhޭYhlh|hthh-(@P'&D$ft5T$N QL$(PERT$$PB QЃu ]_^ [ùL$f~f^ E tU$P$E U$]_^[ËE$FE U$]_^[VW|$ t$3 t 9ptȋu quUhhĺhhȺhкhޭ.hhhhh'@P%%6t.|$F0#ftj#RVb v u_^3m̋D$@SUl$ EVt$D$;s|jZu^][Ë <u.UB Pj蒱 8t΋@4>W|$u#OT$BjjjQUЃu_^] [ÍG NO$V:_F^][̋D$L$P;|VWtUhܻhh;hhhޭ:h@h\h;hxh#@P!!;{9^]_C[É{_[Vt$t P诮FF^̋GV@@|4PQ_u^Éw3^Ul$VWF;F~Uhhȼhqhhhޭ2h(hLhqhh"@P  F9Fu)@@|< QR諭t+~FHN43 FfD$fF_.^]_^3]Ë9lttUhhнhhhhޭthh4hhHhPH!@P3 _^]̋D$ L$S\$PD$ Q[uÊL$ t р8Pt 8H3̋D$ L$S\$PD$ QUu[ÊL$ t@ u Pt@Xt@u Pt@3[ÈX3[QSUl$VW3|$|$;F4uUhthhhhhޭ$hؾhhhh@P^4uUh<hThhphxhޭhhhhпhؿ@PNf!F4v;73;N9:u @;r5<*pX fN4tUhhhh8h@hޭhdh|hhh@P9^tUhhhhhhޭh h8hhHhP@Pw<D$ f V4v .8t5P3B;s$8u B;r <39_I0IfN4tUhthhhhhޭhhhhh @PF9~tUhDh\h hlhthޭhhhh hh<@P'\$f V4v .;F0td fF4uUhhhh$h,hޭhPhhhhh@PPL$^0tdfN4uUhhhhhhޭchh4hhXh`7@P"L$v"|$_^][tUhhhhhhޭhhhhh@Px<$tUh$h<hhLhThޭhxhhhhm@PXY̋L$ T$VW|$Džt"qtI B@tNuu @u+_H^̋ `tQj `D$Pl`@` `t Qj̃`PJ3ĉD$\S\$pVWj\D$jP=Mt$|= jhh\V׃t;tc3Ʌ~\s D T A;|jhh\V׃uVk=3't='thhVjt Pj3D t PVS F|狃_^[t PjL$\3"`Vt$W~`Wjjj;uhhP _^ËPNdQ RFpFtFdPNdVhjQ~VWtfNLjW0_Fȶ3^SUVt$W|$;~t|SNp_PQ軤uh_^][ËFt+RDjPUK ^tnpjգNpVp<uh_^][ËD$PWJUu+h aNpR5Fp_^][ËNp_^]3[̋D$PpL$V4W38PQTuhVң_^S\$ VWx|Uhh(hchLhXhޭh|hhchh@Pl1`tPj* `t$ `Nlt Pj Fp438QSTuhV_^[QVWM0=`uD$Phh _^YS\$hSSjjL$QR\$?MW0[_^YS\$W39{htCP{hUVkU艰3d$;st}@Kp9_FF^Vt$~tUhhhhhhޭhhhhhf@PQD$ ;tUh,h<hhXhdhޭ5hhhhh @Pd`tV QRЃVF F跜^FFuZtUhhhhh$hޭhHhhhh|hq@P\!@`tiWЃ~~Z9~tUhhhhhhޭ/hh0hhDhP@P~_S\$Vt$W3tJ hthhhhhޭhhhhh D tUhDhThhhhޭlhhhhh@@P+ h`tN QSЋuL_^[D$tI h$hHhhph|hޭhhhhhC tUhh@hhph|hޭhhhhhk@PV  @`ti9FtUh$hHhhlhxhޭ2hhhhh@P  ~uFNyUhh8hhLhXhޭh|hhhh @P O SVt$W|$W3ml`tN QWЃ_^[_^[Vt$~u3^á@`t9Fu^̋D$@ ̃|$ V#=``uk|$tUh<hXhEhhhthޭhhhEhh @P U D$ Pu^Ët$uUhhhJh h,hޭehPhlhJh|h9 @P$  S\$uSVd`S [^j>uSVd`[3^É[p @@^Ã=$`ul|$tUhhh]hhhޭhh$h]h4h@ @Pm 2 L$ Q0`^Ët$ W|$ 97tUhdhhdhhhޭ<hhhdhh @P   tUh4hPhehdhphޭhhhehh @P e V``G uWG8n_3^Ë_^̡@`t̡0`t3̡4`t̡8`t3̡<`t3̡H`t3̡L`t̡P`t3̡T`t3̡$`398`Vt$ WuAhhhhhhޭh,h<hhDhP^=$`tk~t@`t\9FtUhthhhhhޭ3hhhh h @PjD$N T$PQR` _^̃=$`SVWȺ`U-(`-X`-,`-\`-0`-``-4`-d`-8`(`D` ,` H`-h`-<`0`L`p`P` t` T`j-l`54`=8`<`x`|` `T`$`趖]_^[3ɁxI#VtOhhjth8hLhޭhphjthhh@PS^VtOhhj}hhhޭ!h<hHj}hhh|@P^VtUhhhhhhޭhhhh8hL@Pm2^̋`t`PuY̋`t`PUY̋`u`PY̋`u`PՓỸ\`P8WQx8V&;rxft_V@RWPWstVZ`j V _WV\I'_`t݋Q`#̃X`WP7t;r_E+ȋ@VT$;rxft_V(QWRst`j V V? _WVX-%_t`PVW|$3Wp#L$ytW _^VW|$3Wp#sL$ytW _^V3W|$ p#`u_^urS\$Ut%u t POQt%u t PPWft]f[t_3^S\$ V3W|$p#t*OQ趬`tR`蘐t*PW臬`t`Pi_^3[3Vt$F=Wy3#=I#΃\u3=B#ƃXtUhphhxhhhޭhhhxh\hp@P[`t`P誏`tQ`茏Rmst P~PWtWRV|_^̋Q!s$RT$jL$ QRP3SUl$ VWt Pj}XuUh\hlhhhhޭhhhhhb@PM\$XSPuk+džXt WV;!|$ u"Q$rT$RWL$(QUP`txt\t\u t PVRʻP2;r VJV_^][j!jV`?V_^][SUl$ VWqt Pj\uUhh,hhHh\hޭhhhhh@P\$\SPk+dž\t WV |$ u"QpT$RWL$(QUP`txt\t\u t PVPRJP1;w VZ2V|_^][j"jV`VV_^][3Vt$~VH#ƃ`PVA ^VzD$xu Ptt ~t^3^́PJ3ĉ$SU3V$~W$H#ƉD$$؅t{txuUhhhih0hDhޭhhhhihh@PhhL$jQA/ ufT$D$5 HLfD$PL$ TT$ D$$L$(hT$RU y =&'uSPV`L$$CQjjjRWUЅu:=t-QV$_^][3Ĉ3̋D$VtnHtNt^ËD$3ɁxRq#mttP`3^ËD$QUmT$3^Ët$WP7m|$9tHQ4tjRP2 y_^ËPQmRPm_3^QS\$ VWt Pj]uUhhhhhhޭnhh hh$h8B@P-P9ljjhphP|$ t/3~VH#ƃ`MQVo #RkL$ QjT$RSP` WVfP辇V_^[YS\$Ul$ Uu][W|$x!jWP葼 yxWt_]3[Vhdj|toWfuV^_]3[WfuPa+V˄^_]3[ShUV4Vy^_]3[ËhТQLTVhR:ThPi(hQX@h RG303`1``t V^_][̋D$xt>Vt$t/Wj~PjWw uf9uVW-_^QSUVW|$ Wl$f9l$u D$At.Sy*+UWsW_^][YW;x;~fjSHUl$ VUSIjSTu!UT=3'tg='t`D$!u D$%jWD$PWW=_^][YVWS) ;r WVW _^][ỸSUVt$ W3VD$|$af|$ u D$Bl$Ut;;}.FPP:NQ1j VV`_^][Á~D$u.VPRVhVV!_^][hVkf9Vf9*QJ(jRQSSUPsJjQRuUUU=3't='t D$"DR'FPP VA_^][Åu D$'jVL$QVsV _^][WVRi'u FPP虞u9|$u Q@';w VV_^][W|$t"WAtD$L$ PQWz _Vhj8t!T$Rh WV>yV^3_ËjjP |$VhjWQVRVhjWPNPQˑVhPROHjP(QjQQ^_Vt$Wt Pjt Pj_^̋D$VjPj u^ËL$T$D$QL$RPQV|^S\$ Vt$ tPNQu^[tRPVt^3[S\$ Vt$ tFP舜u^[tuPVct^3[SVt$ ~ WtUhh hEh8hLhޭhphhEhh@P~WsWڛFPPћ t x SK_^[SVW|$3SwjV+q tPVyjwPjVq tWV|y_^[_^[3SUl$ VWt Pj~ tUhhhjh$h8hޭŻh\hlhjhh@PI~W誚^PS衚VhjUPW诎VhjUQS蝎8xRVt Vj_^][SVt$ t Pj~ u,W|$FWPntNPWQnt3_t Vj^[Vt$ Wt PjU~ u+S\$FPSmtNPQStm[t Vj_^̋D$t HtËD$PqL$3ËT$ PD$3QSUVt$V3D$3WV|$ D$y5iUjPD$PP?kVt?L$QVT$(D$ RWPVx5_V\$^][YËL$ QT$WR輺؃ y3j VD$P趹_V\D$^][YÁ~uL$VhjQRFPPL$QV@3;u6RFPPtK|$_VD$^][Yj|$ju NPQ VPRǩ _VD$^][YVt$t PjjV.jVfD$t*j VVWD$ t.PV^W|$GOPQVV(W2_^̃0PJ3ĉD$,S\$d9XQ;=|$tuR`;w^VuQtHP3t59Q;jRP2DL$$ 9t%u t PPVԢ[_^]̋D$xt+Vt$VD$L$QjV^QSVt$WVD$J\$ o|$ t P;r VV_^[YQVt$VD$D$PjVH^YVt$VD$PVV$^SUl$ 3},VWD$p#uUhhhhhhޭjhh hh(h@>@P)U\$|$ t\$7\$tL$QW1WSRpUJD$$_^][̋D$tËD$3Ɂx,I#D$ 3Ul$W|$ u_3]Ã|$uD$S\$uVh,jotUh,PVyVp^[_3]D$ t jVL$T$$D$(VhhphW $(VhQm?V!WjWSjW8^[_]VW|$ ,hhhhhhޭ3hh h4hh<hT<@P't (QЃtA}hxήWE_^ËVW,_^Ët.ujjjjPRjRW_^3ɁxLI#VZ3~LH#ƋtP8Y3~LH#Ƌt PVY̋SjP@jQ@t>R;s+ȋًSPQF,|$R؋PQ tku t PVRoP@t'u tPNPQ7 VPRIPQ;r V;w WjR>jP>[t,t#fuPxt3VW|$WN3LH#Njt P,D$H;Hv=t9t0t'fuRt j3LH#Njt PAW8_^SUl$ V3۾L9uWUK#݋39uH#ŋt Pnt$ƃD$t%u t PEPZt$t8Q"t%u t PUPRf|$tCt?t6t-fu#Ptjt$ftAt=t4t+fu!Qztjh3}LH#ŋt PU_^]3[S\$ Vt$ t FPXt PVG^3[̋T$3zLH#‹tǁǀT$&SUl$ VW3L9}Up#39}H#ŋt Pru_^][Ã|$toD$tjCD$tj-D$|$u PS3}LH#ŋt PsUj_^]3[Vt$~Lt3^V3~LH#Ƌt P3~LWH#Ƌt PV_^Vhjgt%D$ L$PhLQVVt (h3^ËhR7 Vu 33^w^S\$ Vt$ WSV{tÃPVfuW_^[tQV{jR^9jPP9jQB9jR49D$8 8_p^3[VfFfHfFfu?QVҋFt PjFt jPVf^Ëvt Vj3^Vt$Ft PjFF @ tVЃ^TVW|$ w VGtV\P<Vt_^Vt$FWt PjN~tVу3vt Vj_^Vt$FWt PjfHVыvt Vj_^ËD$ jPѕ̋D$ D$ЃVt$FWt Pj[HVыvt VjL_^̋D$ D$P[Vt$FWt Pj HVыvt Vj_^̋D$ D$[Vt$FW3t PWFt 9~uD$L$FNt8Ft PjN~t VЃFt Pjpvt Vj^_^Vt$Ft Pj,D$ F F^tD$D$́PJ3ĉ$SUV$FWt Pj$D$PL$QSD$б|$u W舣Fu W^FfFnt PjsT$URD$PWVӋFt Pj?FfHfFUS莣=3't\='tUn t>FfF~t PjWVՋFt PjhS tvtmVj`}uUhPhdhhlhxhޭ趡hhhhh@Pu:$_^][3Ĉ̋A0uA0A$P*dY̋A0tA0A$PJdY̋F0tPVV|VaY̋H0Q@0VW|$ G4@wt PjuV|$FTF0t/~LtPVV|VTa_^tghPD$ D$XF0L$ QjT$ RWPt F4 F4VLB$N8QPhNP[VNLAt Pj_^WGt Pj~G0tG0G$PbS33f;O,}QU-VW44t4VՋFTu#N0t|$tFTQF0VG,C;|^][t Wj3_̋D$jE̋D$H0uH0D$!ËD$@ ̋D$@$QSW記FQjjPD$FL@u_3[YUu j Ph phWNLAu W跞VLB(jWP腖 yW]_[YFPnUL$QPPFLjVXR~0H WQ҅tjjjU9]_3[Y=tNLF4Q$F8PR?LPY]_3[ỸSU3VWD$ D$D$D$肗t$0~L3D$D$09CuUhh$h^h@hLhޭdhphh^hh8@P#Gt PjVFTt5F0tPVV|V]_^][fGF4D$$tF4G D$0RFPL$QT$RL$$QKT$,RPPjFXPыFLn0Wj Ph phUT$$F0_VGt Pj |$0tL$$QSWT$8D$tT$L$SRQUWЃGt PjuVV_^][W|$Gt Pj|G0uG0G$P^U33f;O,}8SVW44tVFTu ~0uVG,E;|^[]t Wj3_̋D$u ukS\ VC[PjU[u^[ÍNhQۑT$D$VN8hQF0VL^PFQ$VhV^[3́PJ3ĉ$S$U$VWD$txS蕖tk$$~PyhVxDD$PL$QV̱thV7j8jYZu(h3$_^][3,ĈË$$o oSWGfOוUVPG(w _$֑U5RRGfW,Y G4uhn33f;G,}CL$QWW4G48tC$t 0^x=foO,;|G0uG0G$P[h™%h<賙W4PO44W4RYGt UP^WYS\$tAS豔t4e8t*xt$D$L$T$PD$QL$RPQS[ËD$W|$ ~PyhWy_3[VjhjeXu^_[ËD$T$FD$lVFfNt QFVh@jWV SRkV[^_[QUW|$$D$t3l$ u_3]YVjjPtVϗyV"^_3]YS\$$t Vx^jD$PjhVxEt V轗x3tL$0QWV xT$ D$L$VUSRPQZu V蝗3[^_]Y̡`̃uQh`耗ÃuQhl ̋D$`́PJ3ĉ$=`Vtl$ $PQT$ hR1`tuL$QV*uT$Rh`ݖuD$Phlg$^3"Ù UV4tqthQRuUhxhhhhhޭxhhhh4h<L@P7tf9^pt v ;u^3]Ë^]́PJ3ĉ$W4twtn4R菼uUh`hxhhhhޭ赔hhhhh$@Pt9Ps04SUVpPK^]̃D$SUl$V0W|$(D$ D$lj\$;}IT$ Ft?;}0|$ }Ft$ ?x;} L$AL$;~J_^][À?w;t P;s.;\$sԋL$WRP Ë\$|$(;e_^][;sD$ yD$$_0^]3[ËL$$_^]3[́$PJ3ĉ$ $,UV~dWt$ D$ tn譹teNdQ0uUhh,hhXh`hޭVhhhhh*@P$4-PЉT$pCP]CPD$FCPՃ 6CPՃ &C PD$ h|$(MhjV$HfL$D$RfNPNQ$T|$0WjD$0dž|$HOM 0D$ HD$ L$F @D$$xijQR_^]$ 3$Ë-$4T$,RD$PWSD$H;PȍGL$;$4 ;QD$ЍD$,T$P@u+‹E PVLtOL$T$EUD$0POQWl$$$PL$$Q$URD$ x;PD$(G;<QD$$؍$P@u+‹M QEtOT$(EU$QWRGuËD$PCtQDD$D3̃Ul$V WL$=v _^]S$މ\$tVUj.V<D$+؃?T;;T$ t'}tPCtMQUD|D$L$8SGQP Fdw;t$  PرT$[f:_^]ËD$+Ë؃?wRD;;D$ wStL$WQt$T$>SGR>P觸 t|>t>G[_^][_^][_^]̃fQSUرPfhfF|sjfF|fjfF |YjfF |LjӋL$jfF D$WV x;ED$;L$Qf.l$ED$;~][YËT$Rf.D$][ỸS\$X@dD$t Pj苫{=D$Wt"HtH(K{L$S{T$ C{D$?t I??uVj@L$ Q@FuV$AfD$(|$4fT$$L$,Ul$P>Ft Pu>Vl>uE|_^][̅uUhhh4hhhޭI}h,h@h4hHhP@PͰ~tUhthh5hhhޭ|hhh5hh±@P議r~\tUhh(h6h@hHhޭ|hlhh6hhg@PR~P}W~Wb[WlKFd_t jP٦V=YVt$F9D$}^ËL$ P\PQ蛲F܃ ^W|$Et_Vt$ 4t Pjydž,tt |4^t PjJ_VW|$ 3t PVOt F;ut Pj_^̡`Ptu QرfFu APÃu IQ3̋F|S39ttͥtkN|RJuUhP hh h9 h h hޭpzh h h9 h h D@P/;t90tUh8 hP h: h h hޭ zh h h: h h @P̭葭F ;u ^$^ [ËN$H$V$F B 97uN ^$^ [̋F|tt诤tkN|R,uUh0 hH h^ hx h hޭRyh h h^ h h &@P֬t90tUhh0h_ hhhphޭxhhh_ hhí@P讬su 7v$v Ë@$F$p F q$Vj.P3t@j.PFԶu^SV^|WtqjthPuUhhh hhhޭxh@hPh h|h@Pϫ蔫t90tUhhh hhhޭwhh,h hdhl聬@Pl1~t"Fp{ r _^][V39tqthP`uUhXhhh hhhޭthhh hhZ@PE A t $Hpur ^Ëp ^Vt$t PjɞD$ V ^tD$D$魞̡`VWt PjsD$ W6t Vje_^Vt$t Pj)u)j3t3ɉHH @tL$ H^tD$D$ם̋D$ `PQóPJ3ĉ$Sكtq۝thP[uUh(hDh hphxhޭrhhh hhU@P@jhL$QuT$j.R芰t S-$[3HQSVW|$؋ǍP@u+‹|>.D$@ L$tKtc@uhh h7 h$h,hޭqhPh`h7 hdhlq@P\!_^3[YU(P+L0QT$z1u]_^[YËT$VRWߧ |$t7.D$UP 3Q ]_3^[Y̋H|tvtmB|QxuUhhh hhhޭph4hph hhLr@P]"W{t7u,G tVpP'1ƅu^W1CC_tP0CUl$VWu3u_^3]À>tPUFuF8u>u;t֋_^]F_3^]Qj D$PQ购T$ :tYQ$PQbT$:t؃YAtV_t$d$7 зHG^u=|3YQj D$PQ4T$ :uuY;}Y;~Ỹ SUVW|$ G 7D$t$tqthQjuUhhh hhhޭnh,hTh hhd@PO9D$$}D$$L$$gfffUhhh hhhޭnh h4 h h@ hH @PС蕡jU.؃\$u _^][ ÅtYD$~HމD$3t+$FpD$<3u|$ L$uƋ\$t$VE.L$$o O _^]3[ ̋ÍP@uV+qAu+^;tP;t;vPSW @3QSW @̃S\$Ul$VWtqthPauUhl h h, h h hޭlh h h, h(!h0![@PF T!P@u+‹ȋǍp@u+;tQ;t ;QPhT!W @tqj D$ PU L$( 9uu _^][D$$Vh\!3Cu t_p^]3[ûp!KtG|$tD$$nUh|!3D$$T$L$_^]P$H(3[û!tQ|$8D$$Uh!3D$$T$L$_^]3[û!tHD$$Vh!3T$$_r4^]3[û "AtL<{D$$XVh"3D$$VPN_^]3[ûD"tKl+~D$$VhP"3lL$$_q0^]3[ûh"t#D$$T$_^]B83[ûx"]tCD$$D$t$D$PNHQU T$_^][û" tJ|$Nt$~D$$tUh"3D$$L$p#hL$jQT$RD$(PVy_^[$3GĐÃ|$ ލL$fuUl$1}tQh.+uF8u>u;D$Ft$j#U؃t ;ōP@u+‹W,Rj%|$~Uh/h/hh@/hH/hޭ2ehl/h/hh/h/@P趘D$PL$ QVR蝛GWF(UP葛L$(D$0N$V13]_^[$3עĐÃ⋌$_^[33踢Đ̃LPJ3ĉD$HV3WD$9tqgthPuUh/h/hh 0h(0hޭ dhL0hh0hh0h0@P̗著t~jL$QT$RWbxc|$j Wt&$W~j W uWiD$ PO$_3^L$H3蚡Lj@L$h0Q|T$R,j@D$$h0P|L$,QL$p _^3FLS\$Vu`t Pj融L$bt Sj莍^[̅u3Ƀ *̅uD$̋FDt PhF@t PC#FHPwAV1#̋A@tt BA@PHQS̃ttt Et3Vt0 D$tN(WQ_lt 6u3^Ë^̃ D$HSUl$3VW\$\$L$;t PS/;|$$V(WRkt 6;uޅ-رKD$Cu|$t`u|$tTL$(S$QRPq wuD$,P u L$,QfFT$WRc|$,D$3t$F(WPFkt6u ޅ_l$ t PjG|$tL$0T$_^]3[ ËD$t Pf_^][ ́PJ3ĉ$U$V4WtqthP蜇uUh|hh3hhhޭ_hhh3h(h0薔@P聓F0-SWhL$Q]S{ PhT NyUhthh?hhhޭ0_hhh?hh@P贒~uh<iV3D$9F ~3tu 9ouG ;uD$@D$;F |[$_^]3肜Ĉ̋G|S_Vtt:tkO|R跅uUhPh`hhhhޭ]hhhhh豒@P蜑at98tUh(h8hhphxhޭz]hhhhhN@P9w|p^;ÉG[uG OtG3Vt$Fdt Pj̇NuFdt PjŇ}^F ^́ PJ3ĉ$ $ Sى\$fUV5رf CWf PD$ Wf$$Qf$&Rf$(f$&PQf$,3f$* 9$,EP@uL$Q+$$hRM x~o Rرf< o QRرFf< ;\3D$u,7\$;_^][$ 3t ÃuQInōP@uL$Q+$$hR͋ /o FPر]f< N Qر{f, V Rȱ~ tUN߃|$h@uT$R$$hR+ŋ +D$Pرf B_aFPرf< F<?NPQ(R艐 6\$D$@D$V~\$$"Wu-S|$ 3~D PEF;| Q$$RPSZ|$,3~D PF;|3$ [3̃? SU3V9t839~d$ QF;|勗RG t;@dt PjPO 9y\ut ;tA\A\G HXt P4Wkt;t OHWu.O Adt PSw W^][ÅtW Bdt Pj蹂W^]3[W|$L3_S\$Vs|Sh3t PjECCK|;Q4~ǀCP CK|PS;A0|5h3jCj3)CpK|y j QSP; -h3S(R6tCS"^[t Pj蚁̋F|ttρtkN|RL~uUh@h\hhhhޭrVhhhhh F@P1t90tUh0hLhhhhޭVhhhhh @PΉ蓉VPOQjRPQy9RV=3't!='tPM]NQbø3;F‹́<PJ3ĉ$8$@SUVWO;O D$$‹Ɖ|$t$T$H@u+؍kfl$ tЉT$D$ńU'tqthP|uUhhh hHhPhޭThthh hh~@Pi.trUF3:hjUUhj}|OjQU(Ru'$8tshD$LVPmKQT$8Rہ3D$t<D4HP\tT$T (tL4H d4HߊD$FD$;rčL$HL$$TD$|$ MtjRS\$$PÉu3;|$$T$\E$Xf]p}MUEt t$x3ED$$}$} ;t L$(Hŋ$H_^][3M<̃$PJ3ĉD$ S\$8Ul$@Vt$8W|$8uUhhhG hhhޭRh h(hG h,h4苇@Pv;PԱQQQRhXD$$j P/djj$u_^][L$ 3k$ÍL$Qht3虻t Pj|USj VT$ t>u V3t Wj|L$0_^][3$̋D$L$ T$PD$Q `RPQH̃TPJ3ĉD$PD$hS\$hUl$`VW|$lD$uUhhhk hhhޭ#Qhhhk h h@P规Gt$IHу8LF.NF.8VLF.NHу8F.VLF .N Hу8F .LV F .NF.OUVD$];rUh`hht hhhޭPhhht h$h,ۄ@Pƃ苃 PTXjVjFu_^][L$P3؍TÍL$Qh\3t Pj1zT$RSj VT$$t>u V#3t PjyL$`_^][3UT̋D$L$ T$PD$Q `RPQHUl$VWtqythPgvuUhhh? hhhޭNhhh? h<hDa@PLtZtUhhh|h@ hhhޭ.Nhhh@ hh @P貁}tUh0hDhA h`hhhޭMhhhA hh观@P蒁WD$9+x!S\$D$L$;A|+T$$D$ RPVUӋE ESQ31؃L$$T$ QRVUӋS tv\$E }tUhhhS hh$hޭLhHh\hS h|h蠁@P苀PS Eu[_^3]ËL$EM[_^]ËT$ D$RT$PVUu_^]Ë_^]SV؋3W~|tq(wthPsuUhhhp hhhޭKhh hp hLhT袀@PRKC C U;ACj.P3ԉt@j.PEÉuK;iVNFRSPQjSRhx3ɋ襴%FpN|y jRVWԱC; Q\$L$ f;f9T$T$zT$8 +L$;rD$9|$r|$D$<;P QTDRzD$DD$L$@ |$ D$8 K!f u6f9T$uL$y ؉\$ D$L$$@D$; fuK|$Oxt΃9uɍ$<PL$QUV $<RAOxfuf9T$uL$ysT$8 +L$;rD$9|$r|$D$<;~PPLDQxD$DD$L$@ D$8|$ t5D$8PL$QUVE*9|$r|$L$4D$4D$,D$ $$<RD$PUVƄ$L߱D$ X;Pȍ{L$ ;PЍ_T$$;{<>WԱC;d QD$f|$ f|$$$<PL$QUVƄ$L)$<RD$PUVƄ$LD$ X;PԱC; QԱC; QԱC; QԱC;}SD$ԱL$;rωL$;r D$L$ D$L$,@D$;KD$u3T$(PD$PL$8_]3[$03$~4ËT$jRT$03$<_][3̃}4ÁPJ3ĉ$4$twjtn4RguUhThdhJhhhޭA?hhhJhht@PsrSVD$PL$Qjh$RPӋxUIjGPL$QG u|4V$0T$RD$PjhQRӋyP?=3'tY='tRPFW7^[$3|h$QT$RYPh@覧$^[3P|̃~dSW~\tniteFdPeuUhhh|hhhhޭ=hhhhhr@Pxq=q$QWRjPQRӅy>Pt>=3'='PPDPh@葦 ;~\uUhxhhhhhޭ<hhhh hq@Pp]p~\,~WV`Vh5jQRWjWv-$yh8_[W|$4t PjfS\$t$4QƇ1# u PW[tG4_t PjfVt$Fdt Pj|fS\$t F[tvdt VjZf^̃|$ t3VjhtfWjhjVD$L$$T$(Vh5jN L$$PQ~WFfFVF\N`XjW,,_y V3^jeFd^̋D$L$ T$PD$QRPjESVW|$XFdLt Pj^euD$P؃QWRjPQR؅Ps;=3'='F\tHOF\xW:p?~\~W^38F Vh5HfȋF`QRPW jW*$y&h3u 9F\t3ۋvdt VjZd_^[́PJ3ĉ$4twxdtn4R`uUh8hPhhhhޭ9hhhhhm@PllWhD$PNQrTPh 3EjjtR4SVhjW4)؃t.,4_PfCpرfÉs[$_3vĄS\$ VSh3譡jjdu^[W|$t PjbD$L$t D$ PQjVӋpttT$ RQPSV>u V3t Wjhb_^[̋D$L$ T$PD$Q `RPQ HS\$ VSh3轠jjtu^[W|$t PjaD$L$t D$ PQjVӋt脾T$ RQPSV>u V3t Wjxa_^[̋D$L$ T$PD$Q `RPQ HVt$4t Pja4^t Pj`́PJ3ĉ$SV$4tw`tn4Ry]uUhphhhhhޭ5hhhh4h<sj@P^i#i$82ttWW2kVfȋ4h05QHRQW`jW&$_y&hT$ RVPPh`m$^[3sĄUVt$ F|3W9tt_tkN|RT\uUh0hHhhxhhޭz4hhhhhNi@P9hgt90tUhh0hhhhphޭ4hhhhhh@PggNtf9FpuUhh(hh@hHhޭ3hlhhhhh@Prg7g~1unHtNHuhNQVh3֜V|$RF(PF$yVh诜Fft_^]ËNƁ1VjR_^]̃SVt$2ۃ\$ tq]thPsZuUh@hPh h|hhޭ2hhh hhmg@PXff3ɉL$ 9N  UYWI<(FtF|\$tt>]tkN|RYuUh0hHhhxhhޭ1hhhhhf@Peeet90tUhh0hhhhphޭ~1hhhhhRf@P=eeNtf9FpuUhh(hh@hHhޭ1hlhhhhe@Pdd~1u_+ËNt@QVh3+@V|$RF(P!yVh^ft1VSRpv ;5L$t$ˉL$;N  D$_]^[^[́PJ3ĉ$SU$VW_tq,[thPWuUh h, h hX h` hޭ/h h h h h d@PcVctjNUQ7 t3;u㋜$~$Sh 3h8ruh8jVĖVh ;j4WjRPDM$jjQy P|/R$/t9UB:u,POHQR yh HSFUP4e4Vh05jƆ0BQPSjSN,yPQ.R[VWhD$PUI PhP ~ kVhL$QUI Ph4 3VG uw*GOG3$_^][3kĄ̃PJ3ĉD$3Vt$D$WD$D$D$D$$j5D$رfD$ fL$t PjWT$jRt VjWL$_^3ḱPJ3ĉ$V$W$D$PL$QVD$F t/Vhx _^$3jĈfD$ fuT$R fuD$PfufD$ ftfu j5رfD$t PjVL$QT$Rt PjV$_^3jĈVt$WuUh h h. h h hޭ+h h h. h$ h, W`@PB__t PjUD$L$PQt VjU_^̃S\$tq VthPRuUhhh hhhޭ*h,hHh hth|_@Pr^7^t蕷[thVQSVWh"\$<tqYUthPQuUh"h"h h#h#hޭ)h4#hL#h hx#h#^@P]]p#Ɗ:utP:Quu3\$u-t(h"\$nPW_^[Yù#Ɗ:utP:Quu3u7t2h"\$-W_^[Yù#ƍ:utP:Quu3Uuvtqڱ\$tM;tIQh"fuF8u>u;t"W3胲W^p膳]_^[Yù#Ɗ:utP:Quu3uʋl$݅t}tRh"`fuF8u>u;t3nj:S9ft@`L$QPWܺ ̃SUl$VWUh#3ɋ\$$tU蕾ޅu`t Pj%Rt SjRt W\$jD$PL$QUc%D$y(uS _^][_^][Ël$j UDet!Sŋnoj U#e uSŋP~uth#V|$ttxu荳T$RC_^][SUVt$WtqXQthPMuUh#h$hhD$hL$hޭ%hp$h$hh$h$Z@PYY?IQxu <,t< uGRSu<.t <:t<[t<]uGۋ+ݍCPt9SUV \T$ +VR9zV"u8s_^]3[_^][_^][̃SUVt$ 3D$Hl$ 9tq PthPLuUh$h%h3h<%hD%hޭ$hh%h%h3h%h%Y@PpX5Xh%1؃\$;uh%ٍ^][h&S;u,h(&諍SD$D$ ^][ËL$WQ3|$;t0T$RW;tkoWD$PD$;u_SD$D$ ^][ÍL$QPօthL&3D$|$ ;tYIT$$sRtxPVh'3Č |$VhD'3E譌uu$|$hh'3萌|$uD$ D$|$W\$ _SD$ ^][à Ul$Vt$W3|$ |$|$9tqMthPGJuUh'h'h}h'h'hޭm"h'h(h}hD(hL(AW@P,VUL$ QWT$RW= SU=t _^] ËD$ P:tL$ QVT$RjSUׅu*|$ v#D$PV_^] Ë|$V_^] ̃SVW39tqLthP)IuUhp(h(hh(h(hޭO!h(h)hh4)h<)#V@PUTt$L$ Qhjh`)ht$ Ӆt xPh)3R_^[ËD$ T$Rj jh)PӅt xPh)3_^[ËL$ QW)3Ʌuh)h)h*߉h*h,*h4*T$RWX*a3Ʌuhh*hx*h*蔉h*h*h*vD$PW*3Ʌuh*h*h+I\h +h0+h@+.L$QWd+3Ʌuht+h+h+h+h+h+T$= R׋D$ PL$Qhjh+ht xPh$,3藈_^[ËT$RWD,*3ɅuhP,h\,hd,]h,h,h,BD$ Puh,N#_^H[Vt$u5`u^Ët Pj&IVMut VPI3^SW>WV%t Wt VjH_[^̃tqIthPEuUhh4hh`hhhޭhhhhh|R@PgQ,QK;K UVW${{{uUhh,hhDhLhޭ*hphhhhQ@PPP//KCE踑PfEpرUfEp{ <USK;K 5_^]S\$t Pj9G[t Pj.G3̡`SV؋t PjF;6t VjF^3[Vt$Wt PjFD$L$PQ4t PjF_^SUVt$n|W|$E3;Åt PjUFt90tUhhhhhhޭahh hhDhL5P@P ONtfVhp3虄tN(Q)MMV(R%Ftu P90tUhhhhhhޭhhhh$h,O@PkN0N|$t8xxu P*dž V /t UjD_^][W|$ Vt$ u wup|t PjDSt9tUhhh hhhޭh h$h h\hd_N@PJMMjEj3N{jtCp~  QVRSi [t VjC^_SUl$ W39~ ~K<t;tjDj3ԇCp~ jRS <uG;~ |~~t'tjDj3荇jWQ ?uً~3FF;tjx PU_Ui0uRAPBW;^tu3ɉNN;t7@ ;tIxPDžuQdž_][t1tPQ HPP duϋROt Pj*Bt jPAt$Vt$t PjAD$ P ^V5`t,`t PjAD$P`^QUVt$F0W33|$ ;tAPWo;t PW9A;t PW+AF8;tFPWJD$ ;t PW@;t PW@;t[9|$ tUh0h1hh(1h01hޭhT1ht1hh1h1J@PIbIND;t F@;tA~@N(FDV$QPW҉~D;u*N(V$QWP҃ ~$;u89|$ u2FD;t PF@;t PFHPRV _^]ỸLPJ3ĉD$HD$`S\$hUVWD$$C\$(;tZtUh1h1hh2h 2hޭhD2hd2hh2h2I@PHNH9{u sЍN8L$ sȍV0T$t Pj)?l$`t$ttEt9{uL$9u t Pj>Eu(u$D$98e_^][L$H3RLËF$7u\$hu3҃*L$9tRFHPt(N(QjhoЃ _^][L$H3QLËVDt8V(FDN$RPjу FD裰_^][L$H3QQLËV(RjUЃ _^][L$H3-QLÅt5L$9}V(RjhoЃ F_^][L$H3PLÊD$d<*<tUh2h2hh3h3hޭh@3h`3hh3h3TG@P?FFV,3D$D$FD$FF0F4~~~~F$~(F,F8F< ~@89|$tV7uW_3^Ë;t PWp5_^jjt`3Ã̡`uPP`L$QP̡`uPP`L$QPM̡`uPPP`VWt Pj4D$jPD$W6 t Vj4_^̡`uPP`VWt Pj@4D$L$ PQ6t Vj)4_^̡`ujP`HP̋L$3AAA AD$AQL$RPQP҃̃SUVt$ ^ 3WD$;SL$(QT$RL$ QPl$8l$$l$(~WD$f9nulWL$tD$$;tcT$RT$RQP@Ѓ9l$$tGSL$(QL$$T$RD$ PQl$8l$$l$(WD$f9ntfN(u0V,UjR!hD4WfN(u F,UjPW_^][̋D$HT$ QL$ RPQH̃3PPD$D$ D$ PD$jL$QjRhP$̃D$<}6ft$@D$BD$F_HfD$JU-SST$RjD$PjL$,QhV\$0\$4ՋT$ SSD$PjL$QjT$_^SUVt$^t8l$C͊:utP:Quu3t u^][ËtKHSV C ōPI@u+WxW]uUhX8hl8j8f8fFōP@u+PNUQ6T$ D>BVPQ_tUh8h8hh8h8hޭh8h8hh9h 9z4@Pe3*3VNKQES? ^]3[̋D$@̋D$@j0jguÍHH H(H,HHHH L$@H@$̋D$tPQHËHT$J H̋T$BtL$H|uJ$ËD$B$̋@ttu3jyuËL$T$HP NHVF3VW|$ wtD$9Ft 6u_^ËD$NV PQҋtNHVWFV蜾_3^Vhսt1L$D$QF FF`u VN3^ËT$$D$(L$ VdT$FhD$NlL$VpT$ FtNxV|^̋D$ VpuUhhChChhChChޭhChChhChC1@P00jV^̅uUhDh(Dhhu .jsuUhXEhlEhh|EhEhޭhEhEhhEhE/@P..D$P[FuUhEh Fhh Fh(FhޭhLFh`FhhtFh|F/@Pm.2.\$S^蟺F uUhFhFhhFhFhޭBhFhGhhGh$G/@P.-L$V SQR0GFO 1w_^[̋D$uV0Wt>|$Fϊ:utP:Quu3t 6u_^ËN T$ FL$_3^̋D$t@3VjtbWFt PCЃFt K$PуF_[t PZ]V^Vt$WuUhx=h=hh=h=hޭh=h=hh=h=w*@Pb)')|$~uVjhW_^ËGh >PuOh0>hL>QF VRh\>hW?Vy_^W>t4WεF`PµV輵_S\$Vs(tNWFtNHVS,FN>tWrV`RfV`s(u_Ct+tPQHKPP -CuՋCt+tPQHK PP CuՋ tttI;uh`>hp>h5ht>h|>hޭh>h>h5h>h>(@P'S' uKtqCt;uh>h>h:h>h>hޭXh ?h0?h:h4?htSWV`RV۲_^][ÃSUVt$^n 3D$D$ \$u D$ .|$u D$ CHNpV|PQ҃uD$ FpNxPуVhFpNlWRPFdQT$RЋ>tW?N`Q3V-_tSot SU^][SVW|$uUh`:h|:hXh:h:hޭh:h:hXh:h:%@P$f$|$w _t8FN PуGt%SHRPFЃtN VQ҃GuWjhS_^[ËF4N0PWу_^[SUl$ VuUh;h;hh;h;hޭh;h<hh<h$<$@P##u EN(]PуQEURPF,ЋN8yEW{ukExF8}U_tZtdhH<h<hh\<hd<hޭ=h<h =hh<h<$@P""jU3^][Ëv8h{UuUPjhS^][SUl$Vu WEP3\$]uSU_^][9>E}uVEx{HU|+uShhU _^][Ãt^tZtUh8BhxBhhLBhTBhޭhBhChhBhB"@P!!WU_^][S\${(UVCHPUjjҭl$n ^FM89W{u9x{HE8V_tZtdh09hp9hChD9hL9hޭh9h:hCh9h9!@P  jV^][hpVu8p^][V#jhSc ^][̃SUl$Vu WUh؃ElK\UtPQ҃}]~EuEx{\UFtZtjh0@hH@hh@h@hޭh@hAhh@h@ @PvjU_^]3[h~UPuMpUl3D$D$EhPQMdRD$PD$ ы}tW;U`R/U)_^][Vt$N(tFttu^ËQtqrqQ2^L$]QV,qQ2^L$ESVt$^WL$T$D$F8N0V4H NP V2hp @WP&W`_^3[VW|$tUh`?h|?hIh?h?hޭ>h?h?hIh@h @@Pt$ F GN 9F~ t PWF|uV$W|F(t(HtPQHN,PHPlj _^VW|$ w FWhPtjjPOQ~uUhhAh|Ah*hAhAhޭThAhAh*h BhB(@PGV,WN,9VF,_3^̋D$$L$ T$S\$Ul$Vt$(W|$(VWPD$t*ȰL$T$<;wND$3+ڃ~ u PİFPYL$ QӍ~W9nu RİWD$_^][̃,D$D$$D$PD$ D$$ЖD$(D$, D$@D$ D$D$ h0L$Q3833`@=|f ` `SUI``A``:¢```````A``:¢`````````:¢```````A``:¢````Q``]`[̃$PJ3ĉD$ =auChjjjh`ux= tL$ 3$a `$Pj QtVW |$L$(_^3`3$V3XuH^̠``Ȣ``Ј`Ҋ`` ``Ё`̋D$ `PjQ `uhlGh|G3̃=`u(3I`@=|f``j=`uV $````N`````u`j3^hO=`~=`t9`t `'̡`SUl$t Pj=`u3ۅ~"VWD$<";|_^`][tD$D$DV`t PjN=`~=`t9`t `pto`HN`W``Ȣ``Ј`Ҋ`` ``Ё` 7u`^t Pj{̋ `tQjN ``u ``Vpt Qj&^̋D$W|$_ËD$=vD$'jhZE uzMZu38PuRZYd:YagSyMeXx Uxj9@Yu asU3;u[9=a~ a}9=buB9}uCU,MYE39}u=LtMjuYLhjQYY; V5L54bЅtWVLYYNV>YuWHOY3@Y j h07Y]3@Eu 9ae;tu.XtWVSЉE}WVSCEWVS0\Eu$u WPS\WjSXtWjSЅtu&WVSu!E}tXtWVSЉEEEE PQ[YYËeE3XËU} u[uMU Y] UeVuu;j^0] j$hV6E tӋ@ME|@Ws :j^0뼃| &AwSWjh3PQD]HF+yjd}M؋Ǚ_jh+؋EDAڙRPG7+jQSRP47}U}M|sGEǀ3UȁEyIAu jdYuEluAU2EȁyIAu jdYuEluEEjSuFW>\jFhRP|6U}@MutMF3A9B} A9|QIN+jF E Sp0[jY3ShuWV[jFhRP6SUj_^ 3[^ËUV0\tuVYY#^]ËUQQEPEMj*h!NbQP5|=o@vЋMtQ̋L$WSV|$toqtUL$:tt :t u^[_3Ê:u~at(:uAtf:t3^[_ G^[_Ë^[_>tjQ@YGtjh@jX j<j hPT3ۉ]3};;u7 Z39] ;t܉}WY]G @uoWIhYttȃ @sLA$u)tt@sL@$t7zYM9]u#WhZEPSu W[EWVZE ESuLYøGá`Vj^u;}ƣ`jPKYYTtujV5`KYYTtujX^3ҹGTt  HJ|j^3ҹGW@st;tu1 B8H|_3^)i= btf5Tt7YËUVuG;r"(Jw+QgjN Y V^]ËUE}P:jE H Y]ËE P]ËUEG;r=(Jw` +PiY]à P]ËUME }` QhY]à P]UWVu M};v;r=(stWV;^_uiur)$Ǻr $$$4Ĩ#ъFGFGr$I#ъFGr$#ъr$I|tld\TDDDDDDDDDDDDDD$ĩةE^_ÐE^_ÐFGE^_ÍIFGFGE^_Ðt1|9u$r $<$IǺr +$@$<PtF#шGr$<IF#шGFGr$<F#шGFGFGV$<I 3DDDDDDDDD D DDDD$<LTdxE^_ÐFGE^_ÍIFGFGE^_ÐFGFGFGE^_ËU eWjY3}_uu1S9E tVcgYEIuuM;wEuEuu PUËUVuEPju hrv^]ËUj ju` ]ËU]UV3PPPPPPPPU I t $uI t $r ^UV3PPPPPPPPU I t $u t $sF ^ËUEVF ucAFHlHhN; HVt THpuF;StF THpuYyFF@puHpF  @F^]UVuMeEu t0u$/ R}tE`p3}t }|Ѓ}$ʃeMSW~~EPjP謀M BtGǀ-uM+uGEOF$=u*0t E 6Yc}uSWVt#u@FPuEuMPUtBF9]w9]vE+}8]tTMapKME9]u 9]wi""9]vEN"D8]tE`p3^_[ËUjjuuu uZ]ËU0S3EV]܈]]E ]t ]E E]EP詌YEuE@u9EtME+ùtCHt(Ht !!j^0CMEt EuE@UEjY+t7+t*+t+t@u9UEEE E]E#¹W;3t(;t$;t=tT=u-ETEKEB=t4=t$;t)  j^0C_^[EEEEt a#MxE@tMMMt } t M tM~;u!!  `E=juuEPuuu ׉E;upM#;u+Et%ejuEuPuuu ׉E;u76@sD0 xPY_EeuuD6@sD0 xVEYuu  렃uM@ uMu6;{Ѓ@sYYMLЃ@sD$ MeHMu~EtojS61 ;u8tO6:jEP6E u}uǙRP6/ ;tjj6Ӈ ;tE(@@}uE#u M EE#;tD=t)=@t"=t)=@t"=t=@uEM#;u EEE3E@}E#=@=tq;yE;nvv+[E3HHGEjjWW6 tWWW6#ƒ;jEP6# ;wtj}uXEE;iWjWW6u JWWW6`#;E%=u63Y\j^0u_=uWj6 ;E>WW6υ Ej[+PD=P6% ;݃ @sD$2M0 @sD$M ʀ}u!Etȃ @sD M#;u~EtxujuEjPuE%Pu ;u4xPUȃ @sD 6wY6 @sEVSSSSS =jhp7M3}39};u)=r}uj@u uEPE|EEu;t9ur9w}v1 E"t MMEt e]MuE_^tMEtEM؃ىEM}tẼ`pEU[ËU3Puu u9duhLVP=]ËUPJ3ʼnEVuW3L;u j^0=.ƋM_3^HfLP_YLSjY'P^>Y;v<8=uWuP/z tu3_^]ËD8jh %39Euu*3?VuzYY;tj<Yeu!YEE E$j;YJȋAiCÞ&A%UWVu M};v;r=(stWV;^_u<ur)$ Ǻr $4$0$Dp#ъFGFGr$ I#ъFGr$ #ъr$ IDDDDDDDDDDDDDD$ 08DXE^_ÐE^_ÐFGE^_ÍIFGFGE^_Ðt1|9u$r $$lIǺr +$$F#шGr$IF#шGFGr$F#шGFGFGV$IpxDDDDDDDDD D DDDD$E^_ÐFGE^_ÍIFGFGE^_ÐFGFGFGE^_̋T$ L$ti3D$ur=(stvWr1كt +шuʃtt uD$_ËD$SVD$ uL$D$3؋D$ Aȋ\$T$D$ ud$ȋD$r;T$wr;D$ vN3ҋ^[̋D$L$ ȋL$ u D$S؋D$d$؋D$[̋D$ StRT$3ۊ\$ t 2trt2urWߋ_t 2t@u[Ãr 3˿~3σtJ2t#2t2t 2t_B[ÍB_[ÍB_[ÍB_[ËUQQE VuEEWVEh_Y;u NjJuMQuP$E;uxt PYϋ@sD0 EU_^jh]܉]Eu { Ëx;0srn S #ы<@sL1tP^YeD0tuuu uE܉U ]܉]E E܋Uu!_YøJ[WW@RWQW-RWQWWZWQWQWPËU}t~]ËUE3;xKtA-rHwj X]Ë|K]DjY;#]+uLÃuLà ËUVMQY0^]ËUS]woVW=HcujI~h YYt3@Pj5Hc(u&j ^9nt SYuI0B0_^SY. 3[]ËUQeVEPu u u9Ett M^ËUS39]u3>VWu4pVYY;tuVWQ u SSSSS 3_^[]ËU}u u Y]Vu u uY3MW0uFVuj5Hc,u^9nt@V~YtvV~Y" 3_^]xPYxPYʋU}t-uj5Hc0uVxPnY^]ËUh4thPtu]ËUuYu8j2Yj41YËV V}V2V~V~V_V~^ËUVu3utу;u r^]ËU=thYt uY{h@h,YYuTVWh$(Y;stЃ;r=Pt_^thPtYt jjjPt3]j h0Tj 1Ye3@9bbE b} 5Ht5֋؉]Ѕth5Dt֋}ԉ]܉}؃};rK 9t;r>7֋ 5Ht֋5Dt9]u9Et]܉]ЉE؋}ԋ]ED}PsEtЃEET}XsEtЃEE }u)bj"/Yu}tj /YfËUjju ]ËUjju ]jjj ËUH{uyYh̋UEbb b$b]jhP3WR/Y}9}ub5bEEb5bEE;t t E 9}u33W .YÃ}tuUY3@UUE V9Ptk u ;rk M^;s9Pt3]5 bjhpeu ]j_;tt   9~\u'5YF\t5WP2 v\YQHMM .H k V\x; 9tj-Ye;tu>=(bu5jhw@3A;u (bxEu +tyt tNt(H5 bE;toV< ba5bE;tNV<b@5$bE;t-V<$b5bE;t V<bE}uE8]j+YÃt$t t~~j h}3}}؋] KtjY+t"+t+tY+uC}؅uTbbUw\YpQÃt2t!Ht빾 b bbb $b$bEPE3}9Euj9EtPh+Y3Et tuO`MԉG`u>OdMGdu, M܋  9M}Mk W\DEEuwdSUY]}؃}tj)YSUYt tuEԉG`uEЉGd3,ËU4PJ3ʼnES]VWu} M̋~tu#(8]tEԃ`pẼ~EPjPF HtFɍEPEVPy ȅtAƉ@t ]܅tHDt>-Wut$ADz]"A]܀}tEԃ`pE܋M_^3[bËUju u ]̃=(st-U$,$Ã=(st<$XfftU T$|$l$T$D$tj #Y}E FluHVFlvl.=YE' 3Guj "Yj "YËVWx5LЋuNhjYYt:V5L54bЅtjVYYN VY3Wh_^ËVujVY^jh* uF$tP5YF,tP'YF4tPYFWt3%>uN@ uNhF Pt,F N@Ch50sp3_[^ÃVW@st6;s!p ~tV|@N;r7'Y@t|_^Ã=Ltuc5V5aW3u<=tGV6YtujGW9YY=atˋ5aS3V>=YXt"jS YYt?VSP: uG>u5a%a'@t3Y[_^5a%a3PPPPP̋UQMS3VU 9Et ]EE>"u39E"FE<tBU PFkYt} t M E FU Mt2}u t utBe>< t< uFN>}t EE3C3FA>\t>"u&u}t F8"u 339EEtIt\BuU tU}u< tK< tGt=Pt#kYt M E FM E  jYtFU FVtBU ME^[t ËU S3VW9Ltu2h@bVSDc|d5b;tE8uuUEPSS} E =?sJMsB;r6P>Y;t)UEPWV}E Ha5a3_^[ËU SV3;u3wf93tf90uf90uW=VVV+V@PSVVE׉E;t8PYE;t*VVuPuSVVׅu uYuSE S3_^[ËVW;stЃ;r_^ËVW;stЃ;r_^jhj3ɅHc5Hc%Hchd5D$l$l$+SVWPJ1E3PeuEEEEdËMd Y__^[]Q̋US] Vs35PJWEE{t N3 8N F3 8E@fMUS[ EMt_I[LDEEthEx@GE؃u΀}t$t N3 8聴N V3 :qE_^[]EɋM9csmu)=,st h,sCetUjR,sM UhE 9X thPJWӋhE MH t N3 8N V3 :۳EHh9S OhPJW1hUV=2N\UW9t ;r;s9t3tPu3u `3@M S^`N`Hj$Y~\d9 |~d=u Fd~=u Fdn=u Fd^=u FdN=u Fd>=u Fd.=u Fd=u Fd=uFdvdjY~d`QY^`[_^]ËUcsm9Eu u PYY]3]3@ UPJeeSWN@;t t УTJeVEPu3uP33Ȱ3EPаE3E3;uO@u G 5PJ։5TJ^_[ËUELc]ËU(PJ3ʼnES]WtSfYjLjP0 ffffffEMDž0IM MdjhP̰uu tSeYM_3[mËVjVj V\P`^ËU5Lct]uuuu u3PPPPPWVS3D$ }GT$ڃD$T$D$ }GT$ڃD$T$ uL$D$3؋D$A؋L$T$D$ ud$ȋD$r;T$wr;D$vN3ҋOu؃[^_Vu 3^Ã~Duj$nYFDt܋FD^ËUVuV^ PcYYt|败 ;u3褥@;u`3@aF uNSW^^N 3_@[3^]ËU}t'Vu F tVu f f&fY^]A @tyt$Ix  QP?KYYu ËUQC @VEt {uE >'} ~0EM E>u?*u˰?~} Ճ?uE^ËUPJ3ʼnES] Vu3W}usu+t `p7 F @u^V[ YLttȃ @sA$uttȃ@s@$q3;g C39y B@Dž W @9} DžjugucDžW9~~=]VYt Dž5GPPSP5WЋtuPS5WYYguuPS5WYY;-uCSDž*snHHXDž'Dž2Qƅ0Dž t@tGGG@t3҉@t|sځu39} Dž9~ u!u t-RPWS?0؋9~N뽍E+Ftbt΀90tW0@?If90tu+(u MI8t@u+@t5t ƅ-t ƅ+ tƅ Dž++ u% O0tP2YYt.u%˰0Otヽtu~qPjEPP2Yu69t.EPYYu#P]YY|2t) Ot߃tYtrt `pM_^3[ҡÐalUEuz]Ë@]jh 3ۉ]jY]j_};=`}TTt9tE@ tP,XYtE|(Tt P|Tt4YTtGE Ej6YËUSVuF Ȁ3ۀu@t9FW>+~,WPV YP=5 ;uF yF N _Ff^[]ËUVuu V5Y/V|YtF @tVPWYY3^]jh@3}}jBY}3u;5`Tt98t^@ tVPV—YY3BUTtH t/9UuPJYtE9}utP/Yu E܉}F3uTt4V˗YYE}EtEjYjYËVW3Xct~t WWq&YN|ܾM_t ~uPӃN|^[ËUE4ŸM]j hh3G}39HcuQLjJh[YYu4M9tmjY;u 3Pj XY]9u+hWuWY~ ] >WYE Ej )YËUEV4ŸM>uP#Yuj7Y6^]WƃуtefofoNfoV fo^0ffOfW f_0fof@fonPfov`fo~pfg@foPfw`fpJutItfofvJut$t vIuȃt FGIuX^_]ú++Q‹ȃt FGIut vHuY j X(s3̋L$t$tNu$$~Ѓ3ƒtAt2t$tt͍AL$+ÍAL$+ÍAL$+ÍAL$+ËU9EuFjP;M u+qYYu3]ËE6u 79 Q tՉ&3@]ËUEPEYu߃]Jx A RSYËUSU؃tPYu[]ËUPJ3ʼnEMEVu W3|\PDž$^0l;uV;t@ @SurPYLttȃ @sA$u&ttȃ@s@$tKuqƅ[t4PYt?\ttYt\POSYYGPpYu <%k 8GX 3/THdXYcsZkƅ{(3GPYtdHk DЉdN*tpFItLut{O6uG84u(8]u ]FE /F<-uqtm]tfF:s{{:{s,{*ЋσdzDGJu苝L{D2ȊЋDL<]cD@b+u.du t ƅs\t ؉l0\t؉lxt_XtZLxDžTt&HtdusDžLo.tt\SiIYYj0[\tlH؉ltdd}sDžLxF@xGrtt\PHYY;c4cZt@3f@ƅ{l-u ƅY+u.du t ƅs\tx؉l(<sLxt]LptTPEYLou88<Kjj <8Ը0PuYtk8<SYlTCЙH8f>D[GDd<%u8GuG\tGlD;uwPYt%\tGD;u7tlu?%uNDxnuB4lt\P(EYYt\lEYY0u P)Ylu*4u 8[ut% apt `p4[M_3^I-t"t t Ht3øøøøËVWh3FWPd3ȋ~~~  ~N F+ο@Ou@Nu_^ËUPJ3ʼnESWPvT3@;rƅ t0;w+@P j R衳 Cujv vPWPjjH3SvWPWPWv SBGDSvWPWPhv SG$3EtLtL @;rRDž3)ЍZ w LQ w L QA;rƋM_3[&j h{&TGptltwhuj qYj Yewhu;5St6tVluNtV9YSGh5SuVdE뎋uj YËUS3SM菅dudL8]tEMapE SD;FG;v}>uЋuE}urlj{CijC CSZf1f0JuL@;v~0C@IuCC Ss3ȋ {95dTM_^3[jhrM}_huqE;CWh  Y؅Fwh#SuYYEuvhluFh=NtPY^hS=dFpTj YeCdCdC d3E}fLCf Ed@3E=} LQ@3E=}R@5SluS=NtPXYSSE0j Y%u NtS"YeE*Ã=LtujVYLt3ËUSV5dW}W֋tP֋tP֋tP֋tP֍_PE{Tt tPփ{t CtPփMu֋P_^[]ËUW}SV5lW֋tP֋tP֋tP֋tP֍_PE{Tt tPփ{t CtPփMu֋P^[_]ËUSVu3W;to=Xth;t^9uZ;t9uP聲EYY;t9uP`EYYH=YY;tD9u@-P+P +P=Tt9uP ADZYY~PETt;t 9uP袱Y9_tG;t 9uP英YMuV|Y_^[]ËUW} t;Et4V0;t(W8jYtV>YupUtVsY^3_]j hTFpt"~ltpluj Y j }Ye5HVlVYYYEEj vYuËUSuM9~]C=wE苀Xu]}EPE%P YYtEjE]EY 3Ɉ]EAEjppEPQEPEjP? u8EtE`p3E#E }tMap[ËU(e eee5e=efef efefef%ef-eeEeEeEe eedd dPJTJdej:4Yjhh̰=euj4Yh \P`ËUUVWt} u輬j^0/3Eu+ @tOuu膬j"Y3_^]ËUEufjX]Ë \V3]ËUEu9jX]Ë `V3]ËUEu ~jX]Ë XV3]ø\Vø`VøXVøVj,h3ۉ]ȉ]ԉ]]܉]؉]jgY]EEPY;EPY;EP.Y;AẺh=V=VhP衢Yu;tt8tph;t!PVAYYAh;tP-YV@P޿YYh;VVY@P5h ;SSSSSh;t P׬Yhhg ;3A hgk-uEFVoxYiE<+t<0|<9F3ۋuj+YÀ>:u8FV:xYk<E<9F<0}>:uFVxYE<9F<0}9]t]E;tjVj@wt Gu0u0ËU e} SVW}%yH@Eu jd[ult pM hPf954hu8hVP:hPwS:hPVVwV6hV$TjXjYE ]k}jXE EVVVVVQRSSjYEVVVVVuwSVjYH VWW;};|";;~;}[^;|;;~;}3Gk<Gk<i;u 3;V 3;WVVVVV#jh395hu*jYu95hu hEjYj h(jKYe}EE EjFYËUU VuWHFw  yBw t;t_+^]ËUu MsEMA%}tMapËUjuYY]QL$+ȃ Y:<QL$+ȃ Y$<UEVWxY;0ssQ<@s<u5=aS] utHtHuSjSjSjD3[? G _^]ËUMS3VW;|[; 0ssS<@sD0t6<0t0=au+tItIuSjSjSjD 3蹢 _^[]ËUEu襢 芢 ]Åx;0sr聢 f Ջ @sDt͋]j hH(}4@sE39^u5j Y]9^uhF Pu]FE09]t@sD8 PE3ۋ}j {YËUEȃ @sD P]jhhbM3}j MYuaj Y}}؃@;4@su@s;Fu[~u8j Y3C]~uhF Pu]Fe(}u^ SFtS@냋}؋uj yYÃ}uF+4@su}uyG,j@j 脵YYEta @s0s ;s@@ `@E}σ@sDWYuME E$j YËUF8PJ3ʼnEE VuW34809}u3;u襟8苟S@sL8$$?tu'MuG ,D8 tjjjVߜV3&YD莰@l39H P483;`;t 8?P<4 3,9E#@?g $3 ǃx8tP4UM`8jEPKPAYt:4+M3@;jDSP+ C@jSDP+ n3PPjMQjDQP C@=j,PVEP$4@ @089,j,PjEP$E 4@,08<t<u!33Ƀ @D<t<uRDv5Yf;DI8t)j XPDI5Yf;D80E9@8T4D83ɋD8?D49M3+4H;Ms&CA u 0 @F@FrՋH+j(PVHP$4@C(8;;+4;El%?49MH@+4jH^;MsCΉ u0j [f @@fƁ@rH+j(PVHP$4@i(8;a+4;EGK4,9Mu,@+4jH^;Ms;,,΃ uj [f@@fƁ@r3VVhU QH++PPVh;j(P+P5P$4@t (; xD;\,+48;E ?Q(Qu448@t(D8 xD8ulDt-j^9DuM U0?DYY1$D@t48u3$  8+0[M_3^wkjh̵]u٘ 辘 x;0sr貘 藘 ҋ<@sD0tS)YeD0tuu Sn E= E ME EUË]SqYËUSVW3jSSu]]•E#ƒUtYjSSu覕#ʃtAu }+;Sj0P(Eu艗 ~_^[huYYE| ;rPuum t6+xӅuϋuuuFYYuj0P038u u;q|;skSuu u諔#ƒDuYP4HE#‰Uu)蝖 襖xu#uSuuu@#ƒ3UVuVYu; MWuju P$ux3t P+Y@sD0 _^]ËUS] Vu@s ΊA$Wy@tPtBt&tu=I L1$⁀'I L1$₀a I L1$!_^[u]%@]ËUEu膷jX]Ë n3]ËU@PJ3ʼnES] Vu3ƔW]ȉẺEĉEFLC }};};}tMH+;E}E%yH@u jd[ul]ȃ}}sM%MyH@u jdYulu~EEPeYEPYEPY+jd[jhmF+FD؉UЋƙFRPU؋E‰EЋEԙ؋E3WjPS4ȋEڙWj<SQȋEڙWj<SQMEڙڋEԉEEډuH} EEEEE܉Mt} u}tEP'YtEęڋNj3PPPPP۴諒 ЋM_^3[)ehd5D$l$l$+SVWPJ1E3ʼnEPeuEEEEdËM3dnVD$ u(L$D$ 3؋D$d$ȋd$Gȋ\$T$ D$ ud$ȋD$r;T$ wr;D$v N+D$T$3+D$T$ ؃ʋӋًȋ^SD$ uL$D$ 3D$3Pȋ\$T$ D$ ud$d$r;T$ wr;D$v+D$T$+D$T$ ؃[WøWËUES3VW9]u;u9] u3_^[];t} ;wԐj^0G9]uҋU;uك}u+ B:t"Ou+A:tOtMu9]u;u}uM jP\XxZj"Y낋UQVu V(E F Yu1 N /@t "S3ۨt^NF F F ^] u,!Y ;t Y@;u u YuV(YF WF>HN+IN;~WPu EM F yM tt@sL@ tjSSQ荍#ƒt%FM3GWEPu / E9}t N E%_[^ËUSuM^M3;u8]tE`p39]u&賎%8]tE`p9] tV;v~?E9XuuQu u9*6pQu Quhp EP) ;u8]tE`p8]tMap^[ËUjuu u ]ËUQQSV3W=au;teVVVVjPVVӉE;tTjPڢYYE;tCVVuPj7VVӅt6EVP+YYy9ut u螏Yu;u3_^[Ãu}YU39E vM9t@A;E r]fQSuƒt7$ffAfA fA0fA@fAPfA`fApHuЅt7tIfIHut3tIJutAHu[XËۃ+3RӃtAJutIKuZUUVu M,\uP$e FPmYuP$YxuM  FFu^8MtE`pËUVu M[Eut:t@u@t6 et Et@uH80t S:[uH @Bu}^tE`pËUEAz3@]3]ËUQQ}uutEPO+ME MHEP+E M ËUjuu u]ËVtV@PVV舃^ËUjudYY]ËUjuYY]ËUSVuMvZ3;u"貊j^0%}tE`p^[9Mv9M ~E 3 9Ew wj"W8MtU39M 3Ƀ:-ˋ6}?-u-s} ~NEF38EE }u+]hSV% utN9EtEG 80t/GHyF-d| jd_Fƒ | j _FFn_t90ujAPQ }tE`p33PPPPP蟫̋U,PJ3ʼnEESVuW} j[SMQMQp0+u3詫mEtu 3Ƀ}-+3Ʌ+MQNQP3}-3ɅQ'*tuEjPuVuM_^3[D[ËUjuuuu u]ËU$VWuME3E0 X9}}}u ;u#Sj^0ƪ}tE`p9}v؋E 9Ew j"ȋ}EGS#3;Eu ju^PSW$t}Map;-u-F}0$xFjeVR'YYU}ɀp@;%3 t-F]$x0FO3'3 u$F0O uUEF1FE 9UuM܋ OMw;UE}~LW#UM#E*f09vËMmEFMf}EM}f}|QW#UM#Er*fv1FftFu0H;E t9u: @}~uj0V uE 8u}4$pW)3%#+ESYx;r F+ F-ڋ0;|$;rSQRP(0FU;u |drjjdRP(0UF;u | rjj RP(0UF]0F}tE`p3[_^ËUSVWuwٍMNTu#j^0b}tE`p}v׀}t;u u3?-f0?-u-sGV^蜺@PVS}0} ~QV^x@PVS|Ey&߀}u9} |} } Wj0S# }tE`p3_^[ËU,PJ3ʼnEEVW} j^VMQMQp0&u׃0MlS]u迃05S;t 3Ƀ}-+uMQMQP3}-P$tuEjVSN[M_3^UËU,PJ3ʼnEEVu Wj_WMQMQp0%u8茥MtS]3K}-<0u +ȍEPuQW$tWEH;|-;E}(t GuGuEjuuuEjPuuu[M_3^TËUEet_EtZfuu uuu u']ÃatAtu uuuu u0u uuuu uou uuuu uo]ËUjuuuuu uZ]ËVW3W<W(r_^ËVhh3V% t VVVVV蜣^ËU3M; t @r3]Ë]ËUPJ3ʼnESVuWV3Y;lj(Yj(Yu =a6hThhWC( hhVSfj,uh$SV ( t 3PPPPP誢V'@YPu2YYt/P4<Htu=<׉VףDtE3_^[ËVjj 螒YYV<HtDtujX^Ã&3^j hFeuYEE EbËUuYH]̋UMMZf9t3]ËA<8PEu3ҹ f9H‹]̋UEH<ASVq3WDt} H ;r X;r B(;r3_^[]̋UjhhdPSVWPJ1E3PEdeEh*tTE-PhPt:@$ЃEMd Y_^[]ËE3ҁ9‹ËeE3Md Y_^[]̋U$PJ3ʼnEEM SVuWP3WWWWQEPEPM3_. Et }}0EPEP#EYYuuEuuE+EMFEFEF_^3[MËUM S3;vj3X;Esz 3AMVW9]t u"YVu$|YYt;s+VjSv _^[]ËUuM8JE MUTu}tMA#E3t3@}tMapËUjjuj]SVWT$D$L$URPQQhcd5PJ3ĉD$d%D$0XL$,3p t;T$4t;v.4v\ H {uhC4C4d_^[ËL$At3D$H3 LUhp pp> ]D$T$UL$)qqq( ]UVWS33333[_^]Ëj333333USVWjRh6dQF_^[]Ul$RQt$ ]%$sËUEux 3]Åx;0srx ދȃ @sD@]áPJ39nËUSVu 3W};u;v E;t3{E;tv"xj^0蕚VuMGE9XfEf;v6;t;v WSVs w*w8]tMap_^[;t&;w wj"^08]tE`pyE;t8]u$Euuuuu P}tMapËUVucvpvpv pvpvpvp6pv xpv$ppv(hpv,`pv0Xpv4PpvHpv8@pv<8p@v@-pvD%pvHpvLpvP pvTpvXov\ov`ovdovhovlovpovtovxov|o@oooo{opoeoZoOoDo9o.o#oo oo@nnnnnnnnnnn{npnenZnOn@ An6n+n nn  n$m(m,m0m4m8m<m@mDmHm@LmPmTxmXmm\bm`Wm^]ËUVutY;XtP4mYF; XtP"mYF;XtPmYF0;8XtPlYv4;51uAW#@PWVV3_^[]ËUQM AS%V#WE A %ut;t<($3;u;uEfM PB<U UE  ɁPtM _^fH[ËU0PJ3ʼnEES]VEWEPEP"YYEPjj uЋf.u܉CEECEPuV$uM_s ^3[k/3PPPPP~WVU33D$ }GET$ڃD$T$D$ }GT$ڃD$T$ u(L$D$3؋D$d$ȋd$G؋L$T$D$ ud$ȋD$r;T$wr;D$v N+D$T$3+D$T$My؃ʋӋًȋOu؃]^_̀@s sË3Ҁ33j`YËUEM %#Vut$t jj"YY{[j^0}Pu t ""YY3^]ËU$PJ3ʼnEESEE VWEje=nEu}hT(؅=hHSׅ5<Ph8SnPh$SnPhSoP֣othSP֣ooM5;tG9 ot?P5o֋؅t,t(ׅtMQj MQjPӅtEu M 3n;Et)Pօt"ЉEto;EtPօtuЉE5nօtuuuu3M_^3[|,ËUVuWt} uYj^0=|_^]ËMu3f݋f:tOut+f ftOu3ufxYj"Y몋UUS]VWuu9U u3_^[]Åt} u=Yj^0{݅u3fЋMu3fԋƒu+fft'Ou"+ fftOtKuu3fy3uM jPfDJXdfXj"YjUEffu+EH]ËUVuWt} umXj^0z_^]ËEufߋ+f ftOu3uf-Xj"Y뼋UMx~ ua]áa a]Wgz]ËU}uWGz]uj5Hc]ËU8PJ3ʼnEEM MH SفMȋHMH?WMEu'339\u @|33}jXeVu}䥥=xXOGW]ԉEyJBtj3Y+@MЅE؃҅T|u@|nǙjY#yOGe+3BL9}99}r"9Ut+eLz};rsEHUMyщM܋MЃjY!E@;} |+3}tCtX+ xX;} 3}𫫫 ; +Eԍuȍ}𥙃¥yJBeeE )U׋]\3#ωMԋM u؉3uE}u|ӋjMZ+;|1tdJy5xXNFVEyJBjY+3B\Mԅ҅T|u@|fƙjY#yNFe3+BL1<;r;sE9MtLr3;rs3G1HyދMԃ!E@} jY|+3 |XAQyJBeeE )U׋]\3#ωMԋM u؉3uE}u|ӋjMZ+;|1tdJyj3XS |X;pX3}𫫫M‹yJBeeE )U׋]\3#ωMԋM u؉3uE}u|ӋjMZ+;|1tdJyXpX3@Xe‹yJBeeE )U֋M|#ΉMԋM }؉|}ԋME}}|ЋjMZ+;|1tdJy3^jY+ |XMɁ ً X ]@u M̋UY uM̉M_3[$ËU8PJ3ʼnEEM MH SفMȋHMH?WMEu'339\u @|33}jXeVu}䥥=XOGW]ԉEyJBtj3Y+@MЅE؃҅T|u@|nǙjY#yOGe+3BL9}99}r"9Ut+eLz};rsEHUMyщM܋MЃjY!E@;} |+3}tCX+ X;} 3}𫫫 ; +Eԍuȍ}𥙃¥yJBeeE )U׋]\3#ωMԋM u؉3uE}u|ӋjMZ+;|1tdJy5XNFVEyJBjY+3B\Mԅ҅T|u@|fƙjY#yNFe3+BL1<;r;sE9MtLr3;rs3G1HyދMԃ!E@} jY|+3 XAQyJBeeE )U׋]\3#ωMԋM u؉3uE}u|ӋjMZ+;|1tdJyj3XS X;X3}𫫫M‹yJBeeE )U׋]\3#ωMԋM u؉3uE}u|ӋjMZ+;|1tdJyXX3@Xe‹yJBeeE )U֋M|#ΉMԋM }؉|}ԋME}}|ЋjMZ+;|1tdJy3^jY+ XMɁ ً X ]@u M̋UY uM̉M_3[ËU|PJ3ʼnEE3V3EE FWE}MuMMMMMMM9M$uL5o3<UU< t < t< t< uBS0B $ÖHπwjYJߋM$ :ujY+tHHt |jYE뤃ejY뛍HωuvM$ :uj<+t"<-t:t ]ËUtPJ3ʼnEEU#S]EAV#f}W]EEE?EtC-C u }fu73f9Mf$  CfC0C3@ f;M 3@f;u}t@uhS3PPPPP.d3f9Utu 9Uu-h;u"9UuhCjP uCh|CjP۔ uC3kʋiMCkM 3fMعX`ۉEfUu}MyZ`ۉEETgk MMf9r}ĥEĥMƉE3ɉMMMMH 3UUU##΍4f;f;f;?f;w3uuu3f;uGEu9uu9uu 3fEf;uG@u 9pu90t!uuEMUɉU~UL MEEEVȃe ;r;sE}FtfEmM}EEM}f~;Eu-EMe EE EffMfyBEtEMuUm M HuMu9EtfMf9EwMu4}u+e}uef9MufEGfEEEf;33f9EEEIM3;}M?f;]E3҉UUUUU3##Ё4 ]f;Lf;Cf;5?f;wK3EE9fE }fEEEEEf}Z33f9uH%Ea3f;uFEu9Eu9Eu fEf;uFEu9Eu 9EvE}EEMM~KM؉MDM eʋW ;r;sE}_tfmM}EM}f~7}x+EMe E? EffMfyBEtEM}Um M H}Mu9EtfMf9EwMu4}u+e}uef9MufEFfEEEf;r#33f9EEEIM;fE ufEEEEEfu3feH%eEEUE}ft0)3ff9EfB0$  BBs~j_u?3fEEE]Me ؋E M]Eu؅y2ށ~(E]Mm ؋E N]E؍GZ]EUEu}ĥe}e ʋU ֋4  U ȋE <;r;sF3;rs3BtAEȍ0U;r;sAM ʍ4?uuM0 CM}uEKC<5}MD;9u 0K;]sE;]sCf*؀ˈXDEM_^3[ À;0uK;sE;s3ff9U@ʀ P0@3t@tttt t˺#Vt#t;t ;u  ˁt u  ^t 3tSVWt t t t t Njʾ#t;t;t ;u ` @ _#^[tt ;u Ã@ @ËUSVW}f]3tjZttt ttˋ #ƿt$=t=t;u #tuét} M## E ;Em}]3tjZttt ttˋ#t(=t=t ;ututU 395(s}]Eyj^tttttȻ`#t* t@t ;u@#ǃ@t-t @uE#E# ;uPEY]M3҄yjZttttt#t$= t=@t ;u  #σ@tt @u‹3M E t _^[ËUES3VWEN@XX9] E3ɉ]}襥э<   ʋUeى} ֋u ϋM U ։0xH;r;UsE}t'ue~;rsE}xtAHue7;r;sE}XtAHMeɋ  މHMMMX1 2u;r;sE}t$S3;rs3FډPt UBUPM UE} XP39Xu*PE P;t܉xxu0HE  ʉHxtfM_^fH [UWVSM tMu} AZ I& t' t#:r:w:r:w:u u3:t rً[^_jhPCP39(stVE@tH9[t@EU.E=t =t33@Ëe%[eUEeU#P%$nbR<*xdP2x&4FTh$4@Nf\ 8Jjx&2@L`n~ $4L^nlN94*  67 op{<+_i,EBECFC FEFE >~~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~?A@@ЪP`@@D0p``pp"\drivers\etc\hosts..Aa/pam/pmVisual C++ CRT: Not enough memory to complete call to strerror.CorExitProcessmscoree.dllKERNEL32.DLLFlsFreeFlsSetValueFlsGetValueFlsAlloc  (null)(null)EEE50P( 8PX700WP `h````xpxxxxHH:mm:ssdddd, MMMM dd, yyyyMM/dd/yyPMAMDecemberNovemberOctoberSeptemberAugustJulyJuneAprilMarchFebruaryJanuaryDecNovOctSepAugJulJunMayAprMarFebJanSaturdayFridayThursdayWednesdayTuesdayMondaySundaySatFriThuWedTueMonSunHH:mm:ssdddd, MMMM dd, yyyyMM/dd/yyPMAMDecemberNovemberOctoberSeptemberAugustJulyJuneAprilMarchFebruaryJanuaryDecNovOctSepAugJulJunMayAprMarFebJanSaturdayFridayThursdayWednesdayTuesdayMondaySundaySatFriThuWedTueMonSun  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~d eSunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDecTZIllegal byte sequenceDirectory not emptyFunction not implementedNo locks availableFilename too longResource deadlock avoidedResult too largeDomain errorBroken pipeToo many linksRead-only file systemInvalid seekNo space left on deviceFile too largeInappropriate I/O control operationToo many open filesToo many open files in systemInvalid argumentIs a directoryNot a directoryNo such deviceImproper linkFile existsResource deviceUnknown errorBad addressPermission deniedNot enough spaceResource temporarily unavailableNo child processesBad file descriptorExec format errorArg list too longNo such device or addressInput/output errorInterrupted function callNo such processNo such file or directoryOperation not permittedNo errore+000runtime error TLOSS error SING error DOMAIN error R6033 - Attempt to use MSIL code from this assembly during native code initialization This indicates a bug in your application. It is most likely the result of calling an MSIL-compiled (/clr) function from a native constructor or from DllMain. R6032 - not enough space for locale information R6031 - Attempt to initialize the CRT more than once. This indicates a bug in your application. R6030 - CRT not initialized R6028 - unable to initialize heap R6027 - not enough space for lowio initialization R6026 - not enough space for stdio initialization R6025 - pure virtual function call R6024 - not enough space for _onexit/atexit table R6019 - unable to open console device R6018 - unexpected heap error R6017 - unexpected multithread lock error R6016 - not enough space for thread data R6010 - abort() has been called R6009 - not enough space for environment R6008 - not enough space for arguments R6002 - floating point support not loaded `  hh8x8p !xyzMicrosoft Visual C++ Runtime Library ...<program name unknown>Runtime Error! Program: EEE00P('8PW700PP (`h`hhhxppwpp ((((( H h(((( H H  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~GetProcessWindowStationGetUserObjectInformationWGetLastActivePopupGetActiveWindowMessageBoxWUSER32.DLLCONOUT$1#QNAN1#INF1#IND1#SNANHPJc PkMx`xbY?N Q1'+.3v88};B=~<E^^`Ka^aggpZ^hnbR<*xdP2x&4FTh$4@Nf\ 8Jjx&2@L`n~ $4L^nlN94*  67 opgetnameinfofreeaddrinfogetaddrinfoDWSARecvIWSASend,WSAGetOverlappedResult6WSAIoctlWS2_32.dll]FormatMessageA<LoadLibraryAoGetSystemDirectoryASleepGetLastErrorDeleteCriticalSection9LeaveCriticalSectionEnterCriticalSectionInitializeCriticalSectionAndSpinCountbFreeLibraryEGetProcAddressGetVersionReleaseSemaphore^GetQueuedCompletionStatusCreateIoCompletionPortCreateSemaphoreARCloseHandlePostQueuedCompletionStatusWaitForSingleObjectTryEnterCriticalSectionGetCurrentThreadIdCreateEventAYSetEventResetEventGetTickCountKERNEL32.dllSHGetSpecialFolderPathASHELL32.dllmRegQueryValueExA0RegCloseKey`RegOpenKeyExACryptGenRandomCryptAcquireContextAADVAPI32.dllDecodePointerGetCommandLineAyGetSystemTimeAsFileTimeGetTimeFormatAGetDateFormatAGetFileTypeCreateFileAgMultiByteToWideCharReadFile%FileTimeToSystemTime$FileTimeToLocalFileTimeGetFileInformationByHandlePeekNamedPipeGetTimeZoneInformationfSetFilePointerHeapAllocHeapReAllocHeapFreeGetModuleHandleWExitProcessEncodePointer-SetConsoleCtrlHandlerExitThreadResumeThreadCreateThreadGetCurrentProcessIdTlsAllocTlsGetValueTlsSetValueTlsFreeInterlockedIncrementsSetLastErrorInterlockedDecrementoSetHandleCountdGetStdHandlecGetStartupInfoWGetModuleFileNameAaFreeEnvironmentStringsWWideCharToMultiByteGetEnvironmentStringsWHeapCreateHeapDestroyQueryPerformanceCounterUnhandledExceptionFilterSetUnhandledExceptionFilterIsDebuggerPresentTerminateProcessGetCurrentProcessIsProcessorFeaturePresentrGetCPInfohGetACP7GetOEMCP IsValidCodePageSetStdHandle%WriteFileGetConsoleCPGetConsoleModeSSetEndOfFileJGetProcessHeapGetModuleFileNameW?LoadLibraryWRtlUnwindWFlushFileBuffers-LCMapStringWiGetStringTypeW$WriteConsoleWdCompareStringWVSetEnvironmentVariableAHeapSizeCreateFileWDP00( ozz{{p{z{@{||[ЩP`@ P P[s w Pp`0`p 0@P| жp@ @ P``p,L p``P000 P й0Pp0 С   @`p@  pPp@``0 p@0p 0`  p @ ` p66`dRPZDDEepU@90: T`'We`0h` @acfg@gg::p"0UP `Pp6pgP@ZbQbD`454 i 3Rm#$P$X_@@0kjdPip?$p  P > >=P!0!p!0<`:@,,`-Pk pmqap' )*0+)p(1`(<11`k[P5jP'v0upmipkl0ipDk1`21P22rGPk`h0&PD`%@gFkkp2popnPrnm=(@(mnPn''bpiW_J+ "@m "!!%(+$0pR@XAP=__@)( A,+,AP,0,`,@, ,++S++"@c@]Z[\Z* *+)))@ojP688888p886/TB/;9:: ;8`9p%0#~`zx|Ёx0yyny@r0r vw xms|Prrr`oz@xxxpspЌp@`Њ`@@`@cp``t |p|0r wPxPЙp|Pr}~r rq oo`P0x`y}s0ysr @r}py_2AP_n} .Sx+C\p5^y/Mj #;Sm.CVw .C[q%8PaqAn2\0Kdv/Hbu!6MZn~(>Te~ - B X f s          # : M f }          4 K a u        / O x       ; J g       .DY} #.C[s3W|=N_y3JZ{$4I]l-C_y 5Ne%<MZk!,>Ti(:KV`k$4?K` %F\q,BZu#A_q&9Pe>_6K]n  5 H U g w       !!-!>!Z!o!!!!!!!""(">"N"["j"w"""""""" ##$#6#J#_#y#######$$2$E$W$k$~$$$$$$%%.%9%H%V%g%z%%%%%%%%&&)&?&T&_&q&&&&&&&'%'C'd'}''''' ($(=(P(i((((((()),)=)N)q))))))*+*G*c******++4+V+m++++++  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./libevent.dll?buff@?1??gai_strerrorA@@9@9EVUTIL_ISALNUMEVUTIL_ISALPHAEVUTIL_ISDIGITEVUTIL_ISLOWEREVUTIL_ISPRINTEVUTIL_ISSPACEEVUTIL_ISUPPEREVUTIL_ISXDIGITEVUTIL_TOLOWEREVUTIL_TOUPPERSIGFPE_REQ_bufferevent_add_event_bufferevent_decref_and_unlock_bufferevent_decrement_read_buckets_bufferevent_decrement_write_buckets_bufferevent_del_generic_timeout_cbs_bufferevent_generic_adj_timeouts_bufferevent_get_read_max_bufferevent_get_write_max_bufferevent_incref_and_lock_bufferevent_init_generic_timeout_cbs_bufferevent_run_eventcb_bufferevent_run_readcb_bufferevent_run_writecb_evbuffer_chain_pin_evbuffer_chain_unpin_evbuffer_decref_and_unlock_evbuffer_expand_fast_evbuffer_incref_evbuffer_incref_and_lock_evbuffer_overlapped_get_fd_evbuffer_overlapped_set_fd_evbuffer_read_setup_vecs_evbuffer_testing_use_linear_file_access_evbuffer_testing_use_mmap_evbuffer_testing_use_sendfile_event_debug_map_HT_REP_IS_BAD_event_debug_mode_on_event_debugx_event_io_map_HT_REP_IS_BAD_event_strlcpy_evsig_restore_handler_evsig_set_handler_evthread_debug_get_real_lock_evthread_is_debug_lock_held_evthreadimpl_cond_alloc_evthreadimpl_cond_free_evthreadimpl_cond_signal_evthreadimpl_cond_wait_evthreadimpl_get_id_evthreadimpl_is_lock_debugging_enabled_evthreadimpl_lock_alloc_evthreadimpl_lock_free_evthreadimpl_lock_lock_evthreadimpl_lock_unlock_evthreadimpl_locking_enabled_evutil_weakrandbufferevent_add_to_rate_limit_groupbufferevent_async_can_connectbufferevent_async_connectbufferevent_async_newbufferevent_async_set_connectedbufferevent_base_setbufferevent_decrefbufferevent_decrement_read_limitbufferevent_decrement_write_limitbufferevent_disablebufferevent_disable_hardbufferevent_enablebufferevent_enable_lockingbufferevent_filter_newbufferevent_flushbufferevent_freebufferevent_get_basebufferevent_get_enabledbufferevent_get_inputbufferevent_get_max_to_readbufferevent_get_max_to_writebufferevent_get_outputbufferevent_get_read_limitbufferevent_get_underlyingbufferevent_get_write_limitbufferevent_getfdbufferevent_increfbufferevent_init_commonbufferevent_lockbufferevent_newbufferevent_ops_asyncbufferevent_ops_filterbufferevent_ops_pairbufferevent_ops_socketbufferevent_pair_get_partnerbufferevent_pair_newbufferevent_priority_setbufferevent_rate_limit_group_decrement_readbufferevent_rate_limit_group_decrement_writebufferevent_rate_limit_group_freebufferevent_rate_limit_group_get_read_limitbufferevent_rate_limit_group_get_totalsbufferevent_rate_limit_group_get_write_limitbufferevent_rate_limit_group_newbufferevent_rate_limit_group_reset_totalsbufferevent_rate_limit_group_set_cfgbufferevent_rate_limit_group_set_min_sharebufferevent_readbufferevent_read_bufferbufferevent_remove_from_rate_limit_groupbufferevent_remove_from_rate_limit_group_internalbufferevent_set_rate_limitbufferevent_set_timeoutsbufferevent_setcbbufferevent_setfdbufferevent_settimeoutbufferevent_setwatermarkbufferevent_socket_connectbufferevent_socket_connect_hostnamebufferevent_socket_get_dns_errorbufferevent_socket_newbufferevent_suspend_readbufferevent_suspend_writebufferevent_unlockbufferevent_unsuspend_readbufferevent_unsuspend_writebufferevent_writebufferevent_write_bufferev_token_bucket_cfg_freeev_token_bucket_cfg_newev_token_bucket_get_tickev_token_bucket_initev_token_bucket_updateevbuffer_addevbuffer_add_bufferevbuffer_add_cbevbuffer_add_fileevbuffer_add_printfevbuffer_add_referenceevbuffer_add_vprintfevbuffer_cb_clear_flagsevbuffer_cb_set_flagsevbuffer_clear_flagsevbuffer_commit_readevbuffer_commit_spaceevbuffer_commit_writeevbuffer_copyoutevbuffer_defer_callbacksevbuffer_drainevbuffer_enable_lockingevbuffer_expandevbuffer_findevbuffer_freeevbuffer_freezeevbuffer_get_contiguous_spaceevbuffer_get_lengthevbuffer_invoke_callbacksevbuffer_launch_readevbuffer_launch_writeevbuffer_lockevbuffer_newevbuffer_overlapped_newevbuffer_peekevbuffer_prependevbuffer_prepend_bufferevbuffer_ptr_setevbuffer_pullupevbuffer_readevbuffer_readlineevbuffer_readlnevbuffer_removeevbuffer_remove_bufferevbuffer_remove_cbevbuffer_remove_cb_entryevbuffer_reserve_spaceevbuffer_searchevbuffer_search_eolevbuffer_search_rangeevbuffer_set_flagsevbuffer_set_parentevbuffer_setcbevbuffer_unfreezeevbuffer_unlockevbuffer_writeevbuffer_write_atmostevconnlistener_disableevconnlistener_enableevconnlistener_freeevconnlistener_get_baseevconnlistener_get_fdevconnlistener_newevconnlistener_new_asyncevconnlistener_new_bindevconnlistener_set_cbevconnlistener_set_error_cbevdns_add_server_portevdns_add_server_port_with_baseevdns_base_clear_nameservers_and_suspendevdns_base_config_windows_nameserversevdns_base_count_nameserversevdns_base_freeevdns_base_load_hostsevdns_base_nameserver_addevdns_base_nameserver_ip_addevdns_base_nameserver_sockaddr_addevdns_base_newevdns_base_resolv_conf_parseevdns_base_resolve_ipv4evdns_base_resolve_ipv6evdns_base_resolve_reverseevdns_base_resolve_reverse_ipv6evdns_base_resumeevdns_base_search_addevdns_base_search_clearevdns_base_search_ndots_setevdns_base_set_optionevdns_cancel_requestevdns_clear_nameservers_and_suspendevdns_close_server_portevdns_config_windows_nameserversevdns_count_nameserversevdns_err_to_stringevdns_get_global_baseevdns_getaddrinfoevdns_getaddrinfo_cancelevdns_initevdns_nameserver_addevdns_nameserver_ip_addevdns_resolv_conf_parseevdns_resolve_ipv4evdns_resolve_ipv6evdns_resolve_reverseevdns_resolve_reverse_ipv6evdns_resumeevdns_search_addevdns_search_clearevdns_search_ndots_setevdns_server_request_add_a_replyevdns_server_request_add_aaaa_replyevdns_server_request_add_cname_replyevdns_server_request_add_ptr_replyevdns_server_request_add_replyevdns_server_request_dropevdns_server_request_get_requesting_addrevdns_server_request_respondevdns_server_request_set_flagsevdns_set_log_fnevdns_set_optionevdns_set_random_bytes_fnevdns_set_transaction_id_fnevdns_shutdownevent_activeevent_active_nolockevent_addevent_assignevent_base_add_virtualevent_base_assert_okevent_base_del_virtualevent_base_dispatchevent_base_dump_eventsevent_base_freeevent_base_get_deferred_cb_queueevent_base_get_featuresevent_base_get_iocpevent_base_get_methodevent_base_gettimeofday_cachedevent_base_got_breakevent_base_got_exitevent_base_init_common_timeoutevent_base_loopevent_base_loopbreakevent_base_loopexitevent_base_newevent_base_new_with_configevent_base_onceevent_base_priority_initevent_base_setevent_base_start_iocpevent_base_stop_iocpevent_changelist_addevent_changelist_delevent_changelist_freememevent_changelist_initevent_changelist_remove_allevent_config_avoid_methodevent_config_freeevent_config_newevent_config_require_featuresevent_config_set_flagevent_config_set_num_cpus_hintevent_debug_map_HT_CLEARevent_debug_map_HT_GROWevent_debug_unassignevent_deferred_cb_cancelevent_deferred_cb_initevent_deferred_cb_queue_initevent_deferred_cb_scheduleevent_delevent_dispatchevent_enable_debug_modeevent_errevent_errxevent_freeevent_get_assignmentevent_get_baseevent_get_callbackevent_get_callback_argevent_get_eventsevent_get_fdevent_get_methodevent_get_struct_event_sizeevent_get_supported_methodsevent_get_versionevent_get_version_numberevent_get_win32_extension_fnsevent_global_current_base_event_global_setup_locks_event_initevent_initializedevent_io_map_HT_CLEARevent_io_map_HT_GROWevent_iocp_activate_overlappedevent_iocp_port_associateevent_iocp_port_launchevent_iocp_shutdownevent_loopevent_loopbreakevent_loopexitevent_mm_calloc_event_mm_free_event_mm_malloc_event_mm_realloc_event_mm_strdup_event_msgxevent_newevent_onceevent_overlapped_initevent_pendingevent_priority_initevent_priority_setevent_reinitevent_setevent_set_fatal_callbackevent_set_log_callbackevent_set_mem_functionsevent_sock_errevent_sock_warnevent_warnevent_warnxevhttp_accept_socketevhttp_accept_socket_with_handleevhttp_add_headerevhttp_add_server_aliasevhttp_add_virtual_hostevhttp_bind_listenerevhttp_bind_socketevhttp_bind_socket_with_handleevhttp_bound_socket_get_fdevhttp_bound_socket_get_listenerevhttp_cancel_requestevhttp_clear_headersevhttp_connection_base_newevhttp_connection_connectevhttp_connection_failevhttp_connection_freeevhttp_connection_get_baseevhttp_connection_get_buffereventevhttp_connection_get_peerevhttp_connection_newevhttp_connection_resetevhttp_connection_set_baseevhttp_connection_set_closecbevhttp_connection_set_local_addressevhttp_connection_set_local_portevhttp_connection_set_max_body_sizeevhttp_connection_set_max_headers_sizeevhttp_connection_set_retriesevhttp_connection_set_timeoutevhttp_decode_urievhttp_del_accept_socketevhttp_del_cbevhttp_encode_urievhttp_find_headerevhttp_freeevhttp_htmlescapeevhttp_make_requestevhttp_newevhttp_parse_firstlineevhttp_parse_headersevhttp_parse_queryevhttp_parse_query_strevhttp_remove_headerevhttp_remove_server_aliasevhttp_remove_virtual_hostevhttp_request_freeevhttp_request_get_commandevhttp_request_get_connectionevhttp_request_get_evhttp_urievhttp_request_get_hostevhttp_request_get_input_bufferevhttp_request_get_input_headersevhttp_request_get_output_bufferevhttp_request_get_output_headersevhttp_request_get_response_codeevhttp_request_get_urievhttp_request_is_ownedevhttp_request_newevhttp_request_ownevhttp_request_set_chunked_cbevhttp_response_codeevhttp_send_errorevhttp_send_pageevhttp_send_replyevhttp_send_reply_chunkevhttp_send_reply_endevhttp_send_reply_startevhttp_set_allowed_methodsevhttp_set_cbevhttp_set_gencbevhttp_set_max_body_sizeevhttp_set_max_headers_sizeevhttp_set_timeoutevhttp_startevhttp_start_readevhttp_uri_freeevhttp_uri_get_fragmentevhttp_uri_get_hostevhttp_uri_get_pathevhttp_uri_get_portevhttp_uri_get_queryevhttp_uri_get_schemeevhttp_uri_get_userinfoevhttp_uri_joinevhttp_uri_newevhttp_uri_parseevhttp_uri_parse_with_flagsevhttp_uri_set_flagsevhttp_uri_set_fragmentevhttp_uri_set_hostevhttp_uri_set_pathevhttp_uri_set_portevhttp_uri_set_queryevhttp_uri_set_schemeevhttp_uri_set_userinfoevhttp_uridecodeevhttp_uriencodeevmap_check_integrityevmap_io_activeevmap_io_addevmap_io_clearevmap_io_delevmap_io_get_fdinfoevmap_io_initmapevmap_signal_activeevmap_signal_addevmap_signal_clearevmap_signal_delevmap_signal_initmapevrpc_add_hookevrpc_freeevrpc_get_replyevrpc_get_requestevrpc_hook_add_metaevrpc_hook_find_metaevrpc_hook_get_connectionevrpc_initevrpc_make_requestevrpc_make_request_ctxevrpc_pool_add_connectionevrpc_pool_freeevrpc_pool_newevrpc_pool_remove_connectionevrpc_pool_set_timeoutevrpc_register_genericevrpc_register_rpcevrpc_remove_hookevrpc_reqstate_freeevrpc_request_doneevrpc_request_get_poolevrpc_request_set_cbevrpc_request_set_poolevrpc_resume_requestevrpc_send_request_genericevrpc_unregister_rpcevsig_deallocevsig_global_setup_locks_evsig_initevsig_set_baseevtag_consumeevtag_decode_intevtag_decode_int64evtag_decode_tagevtag_encode_intevtag_encode_int64evtag_encode_tagevtag_initevtag_marshalevtag_marshal_bufferevtag_marshal_intevtag_marshal_int64evtag_marshal_stringevtag_marshal_timevalevtag_payload_lengthevtag_peekevtag_peek_lengthevtag_unmarshalevtag_unmarshal_fixedevtag_unmarshal_headerevtag_unmarshal_intevtag_unmarshal_int64evtag_unmarshal_stringevtag_unmarshal_timevalevthread_enable_lock_debugingevthread_make_base_notifiableevthread_set_condition_callbacksevthread_set_id_callbackevthread_set_lock_callbacksevthread_setup_global_lock_evthread_use_windows_threadsevutil_addrinfo_appendevutil_adjust_hints_for_addrconfigevutil_ascii_strcasecmpevutil_ascii_strncasecmpevutil_closesocketevutil_ersatz_socketpairevutil_format_sockaddr_portevutil_freeaddrinfoevutil_gai_strerrorevutil_getaddrinfoevutil_getaddrinfo_asyncevutil_getaddrinfo_commonevutil_getenvevutil_gettimeofdayevutil_hex_char_to_intevutil_inet_ntopevutil_inet_ptonevutil_load_windows_system_libraryevutil_make_listen_socket_reuseableevutil_make_socket_closeonexecevutil_make_socket_nonblockingevutil_new_addrinfoevutil_open_closeonexecevutil_parse_sockaddr_portevutil_read_fileevutil_secure_rng_add_bytesevutil_secure_rng_get_bytesevutil_secure_rng_global_setup_locks_evutil_secure_rng_initevutil_set_evdns_getaddrinfo_fnevutil_snprintfevutil_sockaddr_cmpevutil_sockaddr_is_loopbackevutil_socket_connectevutil_socket_error_to_stringevutil_socket_finished_connectingevutil_socket_geterrorevutil_socketpairevutil_strtollevutil_tv_to_msecevutil_vsnprintfgai_strerrorAwin32opsstrsepstrlen(del) == 1http.c%s:%d: Assertion %s failed in %sstrsepstrlen(del) == 1http.c%s:%d: Assertion %s failed in %s<>"'&evhttp_htmlescape%s: html_replace overflowevhttp_htmlescape%s: malloc(%lu)GETPOSTHEADPUTDELETEOPTIONSTRACECONNECTPATCHHTTP/%d.%d 100 Continue Proxy-Connection%s %s HTTP/%d.%d Content-Length%luContent-LengthProxy-Connectionkeep-aliveConnectioncloseConnectionkeep-aliveDate%a, %d %b %Y %H:%M:%S GMTDateTransfer-EncodingContent-Length%luContent-LengthHTTP/%d.%d %d %s keep-aliveConnectionContent-Typetext/html; charset=ISO-8859-1Content-TypeConnectioncloseConnectionProxy-Connection%s: %s evhttp_connection_failreq != NULLhttp.c%s:%d: Assertion %s failed in %sevhttp_connection_failreq != NULLhttp.c%s:%d: Assertion %s failed in %sevhttp_read_cb%s: illegal connection state %devhttp_write_connectioncbreq != NULLhttp.c%s:%d: Assertion %s failed in %sevhttp_write_connectioncbreq != NULLhttp.c%s:%d: Assertion %s failed in %sevhttp_write_connectioncbevcon->state == EVCON_WRITINGhttp.c%s:%d: Assertion %s failed in %sevhttp_write_connectioncbevcon->state == EVCON_WRITINGhttp.c%s:%d: Assertion %s failed in %sevhttp_connection_set_local_addressevcon->state == EVCON_DISCONNECTEDhttp.c%s:%d: Assertion %s failed in %sevhttp_connection_set_local_addressevcon->state == EVCON_DISCONNECTEDhttp.c%s:%d: Assertion %s failed in %sevhttp_connection_set_local_address%s: strdupevhttp_connection_set_local_portevcon->state == EVCON_DISCONNECTEDhttp.c%s:%d: Assertion %s failed in %sevhttp_connection_set_local_portevcon->state == EVCON_DISCONNECTEDhttp.c%s:%d: Assertion %s failed in %sevhttp_request_dispatchevcon->state == EVCON_IDLEhttp.c%s:%d: Assertion %s failed in %sevhttp_request_dispatchevcon->state == EVCON_IDLEhttp.c%s:%d: Assertion %s failed in %sevhttp_error_cbevcon->http_server == NULLhttp.c%s:%d: Assertion %s failed in %sevhttp_error_cbevcon->http_server == NULLhttp.c%s:%d: Assertion %s failed in %sevhttp_error_cbevcon->state == EVCON_IDLEhttp.c%s:%d: Assertion %s failed in %sevhttp_error_cbevcon->state == EVCON_IDLEhttp.c%s:%d: Assertion %s failed in %sHTTP/%d.%d%c evhttp_parse_response_line%s: strdup GETPOSTHEADPUTDELETEOPTIONSTRACEPATCHhttphttps evhttp_add_header_internal%s: callocevhttp_add_header_internal%s: strdupevhttp_add_header_internal%s: strdup: Content-LengthConnectionCloseevhttp_get_body_lengthTransfer-Encoding%s: we got no content length, but the server wants to keep the connection open: %s.chunkedExpect100-continueevhttp_read_header%s: bad header on %devhttp_connection_base_new%s: calloc failedevhttp_connection_base_new%s: strdup failedevhttp_connection_base_new%s: bufferevent_new failedevhttp_connection_set_baseevcon->base == NULLhttp.c%s:%d: Assertion %s failed in %sevhttp_connection_set_baseevcon->base == NULLhttp.c%s:%d: Assertion %s failed in %sevhttp_connection_set_baseevcon->state == EVCON_DISCONNECTEDhttp.c%s:%d: Assertion %s failed in %sevhttp_connection_set_baseevcon->state == EVCON_DISCONNECTEDhttp.c%s:%d: Assertion %s failed in %sevhttp_connection_connect!(evcon->flags & EVHTTP_CON_INCOMING)http.c%s:%d: Assertion %s failed in %sevhttp_connection_connect!(evcon->flags & EVHTTP_CON_INCOMING)http.c%s:%d: Assertion %s failed in %sevhttp_connection_connect%s: connection to "%s" failedevhttp_make_request%s: strdupevhttp_make_requestreq->evcon == NULLhttp.c%s:%d: Assertion %s failed in %sevhttp_make_requestreq->evcon == NULLhttp.c%s:%d: Assertion %s failed in %sevhttp_make_request!(req->flags & EVHTTP_REQ_OWN_CONNECTION)http.c%s:%d: Assertion %s failed in %sevhttp_make_request!(req->flags & EVHTTP_REQ_OWN_CONNECTION)http.c%s:%d: Assertion %s failed in %sevhttp_send_donereq->flags & EVHTTP_REQ_OWN_CONNECTIONhttp.c%s:%d: Assertion %s failed in %sevhttp_send_donereq->flags & EVHTTP_REQ_OWN_CONNECTIONhttp.c%s:%d: Assertion %s failed in %sevhttp_send %d %s

%s

TAILQ_FIRST(&evcon->requests) == reqhttp.c%s:%d: Assertion %s failed in %sevhttp_sendTAILQ_FIRST(&evcon->requests) == reqhttp.c%s:%d: Assertion %s failed in %sContent-LengthchunkedTransfer-Encoding%x 0 ContinueSwitching ProtocolsBBOKCreatedAcceptedNon-Authoritative InformationNo ContentReset ContentPartial ContentBBBBBBCMultiple ChoicesMoved PermanentlyFoundSee OtherNot ModifiedUse ProxyTemporary Redirect0CDCXC`ClC|CCBad RequestUnauthorizedPayment RequiredForbiddenNot FoundMethod Not AllowedNot AcceptableProxy Authentication RequiredRequest Time-outConflictGoneLength RequiredPrecondition FailedRequest Entity Too LargeRequest-URI Too LargeUnsupported Media TypeRequested range not satisfiableExpectation FailedCCCCCDD$DDDXDdDlD|DDDDDDInternal Server ErrorNot ImplementedBad GatewayService UnavailableGateway Time-outHTTP Version not supportedXEpEEEEEInformationalSuccessRedirectionClient ErrorServer ErrorUnknown Status Classevhttp_response_code%s: strdupOKtext/htmlContent-TypecloseConnection+%%%02Xevhttp_decode_uri%s: malloc(%lu)evhttp_uridecode%s: malloc(%lu)evhttp_uridecoden >= 0http.c%s:%d: Assertion %s failed in %sevhttp_uridecoden >= 0http.c%s:%d: Assertion %s failed in %sevhttp_parse_query_impl%s: strdup&=evhttp_parse_query_impl%s: mm_mallocNot Found404 Not Found

Not Found

The requested URL %s was not found on this server.

evhttp_bind_socket_with_handle%s: listenevhttp_new_object%s: callocevhttp_set_cb%s: callocevhttp_set_cb%s: strdupevhttp_request_new%s: callocevhttp_request_new%s: callocevhttp_request_new%s: callocevhttp_request_new%s: evbuffer_newevhttp_request_new%s: evbuffer_newHostevhttp_request_get_host%s: mallocevhttp_associate_new_request_with_connection%s: strdupevhttp_get_request%s: cannot get connection on %dgetnameinfo failed: %ssocket%dgetaddrinfogetaddrinfo: %sscheme_okeos >= shttp.c%s:%d: Assertion %s failed in %sscheme_okeos >= shttp.c%s:%d: Assertion %s failed in %s!$&'()*+,;=!$&'()*+,;=!$&'()*+,;=parse_authorityeoshttp.c%s:%d: Assertion %s failed in %sparse_authorityeoshttp.c%s:%d: Assertion %s failed in %sparse_authority%s: strdupparse_authority%s: strdupparse_authorityeos >= cphttp.c%s:%d: Assertion %s failed in %sparse_authorityeos >= cphttp.c%s:%d: Assertion %s failed in %sparse_authority%s: malloc!$&'()*+,;=evhttp_uri_parse_with_flags%s: callocevhttp_uri_parse_with_flags%s: strdupevhttp_uri_parse_with_flags%s: strdupevhttp_uri_parse_with_flagspathhttp.c%s:%d: Assertion %s failed in %sevhttp_uri_parse_with_flagspathhttp.c%s:%d: Assertion %s failed in %sevhttp_uri_parse_with_flags%s: strdupevhttp_uri_parse_with_flags%s: strdupevhttp_uri_parse_with_flags%s: strdup://%s@:%d?#evhttp_uri_set_scheme%s: strdup()evhttp_uri_set_userinfo%s: strdup()evhttp_uri_set_host%s: strdup()evhttp_uri_set_path%s: strdup()evhttp_uri_set_query%s: strdup()evhttp_uri_set_fragment%s: strdup()evutil_read_filecontent_outevutil.c%s:%d: Assertion %s failed in %sevutil_read_filecontent_outevutil.c%s:%d: Assertion %s failed in %sevutil_read_filelen_outevutil.c%s:%d: Assertion %s failed in %sevutil_read_filelen_outevutil.c%s:%d: Assertion %s failed in %sevutil_read_fileread_so_far < (size_t)st.st_sizeevutil.c%s:%d: Assertion %s failed in %sevutil_read_fileread_so_far < (size_t)st.st_sizeevutil.c%s:%d: Assertion %s failed in %sfcntl(%d, F_GETFL)18.244.0.188evutil_check_interfacesrevutil.c%s:%d: Assertion %s failed in %sevutil_check_interfacesrevutil.c%s:%d: Assertion %s failed in %s2001:4860:b002::68evutil_check_interfacesrevutil.c%s:%d: Assertion %s failed in %sevutil_check_interfacesrevutil.c%s:%d: Assertion %s failed in %sGot a strange local ipv4 address %sGot a strange local ipv6 address %sevutil_new_addrinfohintsevutil.c%s:%d: Assertion %s failed in %sevutil_new_addrinfohintsevutil.c%s:%d: Assertion %s failed in %stcpudp801.2.3.4801.2.3.4evutil_getaddrinfo(ALL_NONNATIVE_AI_FLAGS & ALL_NATIVE_AI_FLAGS) == 0evutil.c%s:%d: Assertion %s failed in %sevutil_getaddrinfo(ALL_NONNATIVE_AI_FLAGS & ALL_NATIVE_AI_FLAGS) == 0evutil.c%s:%d: Assertion %s failed in %sRequest canceledNo erroraddress family for nodename not supportedtemporary failure in name resolutioninvalid value for ai_flagsnon-recoverable failure in name resolutionai_family not supportedmemory allocation failureno address associated with nodenamenodename nor servname provided, or not knownservname not supported for ai_socktypeai_socktype not supportedsystem errorInterrupted function call [WSAEINTR ]Permission denied [WSAEACCES ]Bad address [WSAEFAULT ]Invalid argument [WSAEINVAL ]Too many open files [WSAEMFILE ]Resource temporarily unavailable [WSAEWOULDBLOCK ]Operation now in progress [WSAEINPROGRESS ]Operation already in progress [WSAEALREADY ]Socket operation on nonsocket [WSAENOTSOCK ]Destination address required [WSAEDESTADDRREQ ]Message too long [WSAEMSGSIZE ]Protocol wrong for socket [WSAEPROTOTYPE ]Bad protocol option [WSAENOPROTOOPT ]Protocol not supported [WSAEPROTONOSUPPORT ]Socket type not supported [WSAESOCKTNOSUPPORT ]Operation not supported [WSAEOPNOTSUPP ]Protocol family not supported [WSAEPFNOSUPPORT ]Address already in use [WSAEADDRINUSE ]Cannot assign requested address [WSAEADDRNOTAVAIL ]Address family not supported by protocol family [WSAEAFNOSUPPORT ]Network is down [WSAENETDOWN ]Network is unreachable [WSAENETUNREACH ]Network dropped connection on reset [WSAENETRESET ]Software caused connection abort [WSAECONNABORTED ]Connection reset by peer [WSAECONNRESET ]No buffer space available [WSAENOBUFS ]Socket is already connected [WSAEISCONN ]Socket is not connected [WSAENOTCONN ]Cannot send after socket shutdown [WSAESHUTDOWN ]Connection timed out [WSAETIMEDOUT ]Connection refused [WSAECONNREFUSED ]Host is down [WSAEHOSTDOWN ]No route to host [WSAEHOSTUNREACH ]Too many processes [WSAEPROCLIM ]Network subsystem is unavailable [WSASYSNOTREADY ]Winsock.dll out of range [WSAVERNOTSUPPORTED ]Successful WSAStartup not yet performed [WSANOTINITIALISED ]Graceful shutdown now in progress [WSAEDISCON ]Class type not found [WSATYPE_NOT_FOUND ]Host not found [WSAHOST_NOT_FOUND ]Nonauthoritative host not found [WSATRY_AGAIN ]This is a nonrecoverable error [WSANO_RECOVERY ]Valid name, no data record of requested type) [WSANO_DATA ]'(V'PV'pV&'V('V3'V4'W5'0W6'`W7'W8'W9'W:' X;'4X<'dX='X>'X?'PY@'XA'YB'YC'YD'YE'ZF'HZG'tZH'ZI'ZJ'ZL'$[M'L[P't[Q'[S'[k'[l'\m'@\u'\}'\*\*]*0]*d]%d.%d.%d.%d::%d.%d.%d.%d::%x:%d.%d.%d.%d%x%d.%d.%d.%d%c%d.%d.%d.%d%c%s:%d[%s]:%d\win32_ PОgrow_fd_setsnew_num_fds >= op->readset_in->fd_count && new_num_fds >= op->writeset_in->fd_countwin32select.c%s:%d: Assertion %s failed in %sgrow_fd_setsnew_num_fds >= op->readset_in->fd_count && new_num_fds >= op->writeset_in->fd_countwin32select.c%s:%d: Assertion %s failed in %sgrow_fd_setsnew_num_fds >= 1win32select.c%s:%d: Assertion %s failed in %sgrow_fd_setsnew_num_fds >= 1win32select.c%s:%d: Assertion %s failed in %sUNLOCK_CALLBACKS requires DEFER_CALLBACKS_bufferevent_decref_and_unlockbufev_private->refcnt > 0bufferevent.c%s:%d: Assertion %s failed in %s_bufferevent_decref_and_unlockbufev_private->refcnt > 0bufferevent.c%s:%d: Assertion %s failed in %s_bev_group_random_element! TAILQ_EMPTY(&group->members)bufferevent_ratelim.c%s:%d: Assertion %s failed in %s_bev_group_random_element! TAILQ_EMPTY(&group->members)bufferevent_ratelim.c%s:%d: Assertion %s failed in %sbufferevent_set_rate_limitevent_initialized(&rlim->refill_bucket_event)bufferevent_ratelim.c%s:%d: Assertion %s failed in %sbufferevent_set_rate_limitevent_initialized(&rlim->refill_bucket_event)bufferevent_ratelim.c%s:%d: Assertion %s failed in %sbufferevent_rate_limit_group_free0 == g->n_membersbufferevent_ratelim.c%s:%d: Assertion %s failed in %sbufferevent_rate_limit_group_free0 == g->n_membersbufferevent_ratelim.c%s:%d: Assertion %s failed in %sbufferevent_decrement_read_limitbevp->rate_limiting && bevp->rate_limiting->cfgbufferevent_ratelim.c%s:%d: Assertion %s failed in %sbufferevent_decrement_read_limitbevp->rate_limiting && bevp->rate_limiting->cfgbufferevent_ratelim.c%s:%d: Assertion %s failed in %sbufferevent_decrement_write_limitbevp->rate_limiting && bevp->rate_limiting->cfgbufferevent_ratelim.c%s:%d: Assertion %s failed in %sbufferevent_decrement_write_limitbevp->rate_limiting && bevp->rate_limiting->cfgbufferevent_ratelim.c%s:%d: Assertion %s failed in %sbufferevent_rate_limit_group_get_totalsgrp != NULLbufferevent_ratelim.c%s:%d: Assertion %s failed in %sbufferevent_rate_limit_group_get_totalsgrp != NULLbufferevent_ratelim.c%s:%d: Assertion %s failed in %sevbuffer_free_trailing_empty_chainsevbuffer_chains_all_empty(*ch)buffer.c%s:%d: Assertion %s failed in %sevbuffer_free_trailing_empty_chainsevbuffer_chains_all_empty(*ch)buffer.c%s:%d: Assertion %s failed in %sevbuffer_chain_insert_evthread_is_debug_lock_held((buf)->lock)buffer.c%s:%d: Assertion %s failed in %sevbuffer_chain_insert_evthread_is_debug_lock_held((buf)->lock)buffer.c%s:%d: Assertion %s failed in %sevbuffer_chain_insertbuf->last_with_datap == &buf->firstbuffer.c%s:%d: Assertion %s failed in %sevbuffer_chain_insertbuf->last_with_datap == &buf->firstbuffer.c%s:%d: Assertion %s failed in %sevbuffer_chain_insertbuf->first == NULLbuffer.c%s:%d: Assertion %s failed in %sevbuffer_chain_insertbuf->first == NULLbuffer.c%s:%d: Assertion %s failed in %sevbuffer_chain_insertevbuffer_chains_all_empty(*ch)buffer.c%s:%d: Assertion %s failed in %sevbuffer_chain_insertevbuffer_chains_all_empty(*ch)buffer.c%s:%d: Assertion %s failed in %s_evbuffer_chain_pin(chain->flags & flag) == 0buffer.c%s:%d: Assertion %s failed in %s_evbuffer_chain_pin(chain->flags & flag) == 0buffer.c%s:%d: Assertion %s failed in %s_evbuffer_chain_unpin(chain->flags & flag) != 0buffer.c%s:%d: Assertion %s failed in %s_evbuffer_chain_unpin(chain->flags & flag) != 0buffer.c%s:%d: Assertion %s failed in %sevbuffer_run_callbacks_evthread_is_debug_lock_held((buffer)->lock)buffer.c%s:%d: Assertion %s failed in %sevbuffer_run_callbacks_evthread_is_debug_lock_held((buffer)->lock)buffer.c%s:%d: Assertion %s failed in %s_evbuffer_decref_and_unlock_evthread_is_debug_lock_held((buffer)->lock)buffer.c%s:%d: Assertion %s failed in %s_evbuffer_decref_and_unlock_evthread_is_debug_lock_held((buffer)->lock)buffer.c%s:%d: Assertion %s failed in %s_evbuffer_decref_and_unlockbuffer->refcnt > 0buffer.c%s:%d: Assertion %s failed in %s_evbuffer_decref_and_unlockbuffer->refcnt > 0buffer.c%s:%d: Assertion %s failed in %sevbuffer_reserve_spacesize<0 || (size_t)vec[0].iov_len >= (size_t)sizebuffer.c%s:%d: Assertion %s failed in %sevbuffer_reserve_spacesize<0 || (size_t)vec[0].iov_len >= (size_t)sizebuffer.c%s:%d: Assertion %s failed in %sadvance_last_with_data_evthread_is_debug_lock_held((buf)->lock)buffer.c%s:%d: Assertion %s failed in %sadvance_last_with_data_evthread_is_debug_lock_held((buf)->lock)buffer.c%s:%d: Assertion %s failed in %sZERO_CHAIN_evthread_is_debug_lock_held((dst)->lock)buffer.c%s:%d: Assertion %s failed in %sZERO_CHAIN_evthread_is_debug_lock_held((dst)->lock)buffer.c%s:%d: Assertion %s failed in %sPRESERVE_PINNED_evthread_is_debug_lock_held((src)->lock)buffer.c%s:%d: Assertion %s failed in %sPRESERVE_PINNED_evthread_is_debug_lock_held((src)->lock)buffer.c%s:%d: Assertion %s failed in %sPRESERVE_PINNEDCHAIN_PINNED_R(*pinned)buffer.c%s:%d: Assertion %s failed in %sPRESERVE_PINNEDCHAIN_PINNED_R(*pinned)buffer.c%s:%d: Assertion %s failed in %sPRESERVE_PINNEDpinned == src->last_with_datapbuffer.c%s:%d: Assertion %s failed in %sPRESERVE_PINNEDpinned == src->last_with_datapbuffer.c%s:%d: Assertion %s failed in %sRESTORE_PINNED_evthread_is_debug_lock_held((src)->lock)buffer.c%s:%d: Assertion %s failed in %sRESTORE_PINNED_evthread_is_debug_lock_held((src)->lock)buffer.c%s:%d: Assertion %s failed in %sCOPY_CHAIN_evthread_is_debug_lock_held((dst)->lock)buffer.c%s:%d: Assertion %s failed in %sCOPY_CHAIN_evthread_is_debug_lock_held((dst)->lock)buffer.c%s:%d: Assertion %s failed in %sCOPY_CHAIN_evthread_is_debug_lock_held((src)->lock)buffer.c%s:%d: Assertion %s failed in %sCOPY_CHAIN_evthread_is_debug_lock_held((src)->lock)buffer.c%s:%d: Assertion %s failed in %sAPPEND_CHAIN_evthread_is_debug_lock_held((dst)->lock)buffer.c%s:%d: Assertion %s failed in %sAPPEND_CHAIN_evthread_is_debug_lock_held((dst)->lock)buffer.c%s:%d: Assertion %s failed in %sAPPEND_CHAIN_evthread_is_debug_lock_held((src)->lock)buffer.c%s:%d: Assertion %s failed in %sAPPEND_CHAIN_evthread_is_debug_lock_held((src)->lock)buffer.c%s:%d: Assertion %s failed in %sPREPEND_CHAIN_evthread_is_debug_lock_held((dst)->lock)buffer.c%s:%d: Assertion %s failed in %sPREPEND_CHAIN_evthread_is_debug_lock_held((dst)->lock)buffer.c%s:%d: Assertion %s failed in %sPREPEND_CHAIN_evthread_is_debug_lock_held((src)->lock)buffer.c%s:%d: Assertion %s failed in %sPREPEND_CHAIN_evthread_is_debug_lock_held((src)->lock)buffer.c%s:%d: Assertion %s failed in %sevbuffer_drainremaining == 0buffer.c%s:%d: Assertion %s failed in %sevbuffer_drainremaining == 0buffer.c%s:%d: Assertion %s failed in %sevbuffer_copyoutchain || datlen==0buffer.c%s:%d: Assertion %s failed in %sevbuffer_copyoutchain || datlen==0buffer.c%s:%d: Assertion %s failed in %sevbuffer_copyoutchainbuffer.c%s:%d: Assertion %s failed in %sevbuffer_copyoutchainbuffer.c%s:%d: Assertion %s failed in %sevbuffer_remove_bufferchain != *src->last_with_datapbuffer.c%s:%d: Assertion %s failed in %sevbuffer_remove_bufferchain != *src->last_with_datapbuffer.c%s:%d: Assertion %s failed in %sevbuffer_pullupremaining >= 0buffer.c%s:%d: Assertion %s failed in %sevbuffer_pullupremaining >= 0buffer.c%s:%d: Assertion %s failed in %sevbuffer_pullup%s: out of memory evbuffer_readln%s: out of memoryevbuffer_chain_align!(chain->flags & EVBUFFER_IMMUTABLE)buffer.c%s:%d: Assertion %s failed in %sevbuffer_chain_align!(chain->flags & EVBUFFER_IMMUTABLE)buffer.c%s:%d: Assertion %s failed in %sevbuffer_chain_align!(chain->flags & EVBUFFER_MEM_PINNED_ANY)buffer.c%s:%d: Assertion %s failed in %sevbuffer_chain_align!(chain->flags & EVBUFFER_MEM_PINNED_ANY)buffer.c%s:%d: Assertion %s failed in %sevbuffer_expand_singlechain_evthread_is_debug_lock_held((buf)->lock)buffer.c%s:%d: Assertion %s failed in %sevbuffer_expand_singlechain_evthread_is_debug_lock_held((buf)->lock)buffer.c%s:%d: Assertion %s failed in %sevbuffer_expand_singlechain*chainp == chainbuffer.c%s:%d: Assertion %s failed in %sevbuffer_expand_singlechain*chainp == chainbuffer.c%s:%d: Assertion %s failed in %sevbuffer_expand_singlechainresultbuffer.c%s:%d: Assertion %s failed in %sevbuffer_expand_singlechainresultbuffer.c%s:%d: Assertion %s failed in %sevbuffer_expand_singlechainCHAIN_SPACE_LEN(result) >= datlenbuffer.c%s:%d: Assertion %s failed in %sevbuffer_expand_singlechainCHAIN_SPACE_LEN(result) >= datlenbuffer.c%s:%d: Assertion %s failed in %s_evbuffer_expand_fast_evthread_is_debug_lock_held((buf)->lock)buffer.c%s:%d: Assertion %s failed in %s_evbuffer_expand_fast_evthread_is_debug_lock_held((buf)->lock)buffer.c%s:%d: Assertion %s failed in %s_evbuffer_expand_fastn >= 2buffer.c%s:%d: Assertion %s failed in %s_evbuffer_expand_fastn >= 2buffer.c%s:%d: Assertion %s failed in %s_evbuffer_expand_fastchain == *buf->last_with_datapbuffer.c%s:%d: Assertion %s failed in %s_evbuffer_expand_fastchain == *buf->last_with_datapbuffer.c%s:%d: Assertion %s failed in %s_evbuffer_expand_fastchain == NULLbuffer.c%s:%d: Assertion %s failed in %s_evbuffer_expand_fastchain == NULLbuffer.c%s:%d: Assertion %s failed in %s_evbuffer_expand_fastchain == buf->firstbuffer.c%s:%d: Assertion %s failed in %s_evbuffer_expand_fastchain == buf->firstbuffer.c%s:%d: Assertion %s failed in %s_evbuffer_expand_fastchain->off == 0buffer.c%s:%d: Assertion %s failed in %s_evbuffer_expand_fastchain->off == 0buffer.c%s:%d: Assertion %s failed in %s_evbuffer_read_setup_vecs_evthread_is_debug_lock_held((buf)->lock)buffer.c%s:%d: Assertion %s failed in %s_evbuffer_read_setup_vecs_evthread_is_debug_lock_held((buf)->lock)buffer.c%s:%d: Assertion %s failed in %sevbuffer_write_iovec_evthread_is_debug_lock_held((buffer)->lock)buffer.c%s:%d: Assertion %s failed in %sevbuffer_write_iovec_evthread_is_debug_lock_held((buffer)->lock)buffer.c%s:%d: Assertion %s failed in %sevbuffer_ptr_memcmp_evthread_is_debug_lock_held((buf)->lock)buffer.c%s:%d: Assertion %s failed in %sevbuffer_ptr_memcmp_evthread_is_debug_lock_held((buf)->lock)buffer.c%s:%d: Assertion %s failed in %spin_releasechainbuffer_iocp.c%s:%d: Assertion %s failed in %spin_releasechainbuffer_iocp.c%s:%d: Assertion %s failed in %sevbuffer_commit_readbuf->read_in_progress && !buf->write_in_progressbuffer_iocp.c%s:%d: Assertion %s failed in %sevbuffer_commit_readbuf->read_in_progress && !buf->write_in_progressbuffer_iocp.c%s:%d: Assertion %s failed in %sevbuffer_commit_readnBytes >= 0buffer_iocp.c%s:%d: Assertion %s failed in %sevbuffer_commit_readnBytes >= 0buffer_iocp.c%s:%d: Assertion %s failed in %sevbuffer_commit_read*chainpbuffer_iocp.c%s:%d: Assertion %s failed in %sevbuffer_commit_read*chainpbuffer_iocp.c%s:%d: Assertion %s failed in %sevbuffer_commit_writebuf->write_in_progress && !buf->read_in_progressbuffer_iocp.c%s:%d: Assertion %s failed in %sevbuffer_commit_writebuf->write_in_progress && !buf->read_in_progressbuffer_iocp.c%s:%d: Assertion %s failed in %sevbuffer_launch_write!buf_o->read_in_progressbuffer_iocp.c%s:%d: Assertion %s failed in %sevbuffer_launch_write!buf_o->read_in_progressbuffer_iocp.c%s:%d: Assertion %s failed in %sevbuffer_launch_read!buf_o->write_in_progressbuffer_iocp.c%s:%d: Assertion %s failed in %sevbuffer_launch_read!buf_o->write_in_progressbuffer_iocp.c%s:%d: Assertion %s failed in %sevbuffer_launch_readnpin == nvecsbuffer_iocp.c%s:%d: Assertion %s failed in %sevbuffer_launch_readnpin == nvecsbuffer_iocp.c%s:%d: Assertion %s failed in %s_5a 0`   0 ` Y0`gettime_evthread_is_debug_lock_held((base)->th_base_lock)event.c%s:%d: Assertion %s failed in %sgettime_evthread_is_debug_lock_held((base)->th_base_lock)event.c%s:%d: Assertion %s failed in %sevent_init%s: Unable to construct event_baseEVENT_NO%sevent_enable_debug_mode%s was called twice!event_enable_debug_mode%s must be called *before* creating any events or event_basesevent_base_new_with_config%s: callocevent_base_new_with_config%s: no event mechanism availableEVENT_SHOW_METHODlibevent using: %sevent_base_new_with_config%s: Unable to make base notifiable.event_base_start_iocp%s: Couldn't launch IOCPevent_base_stop_iocprv >= 0event.c%s:%d: Assertion %s failed in %sevent_base_stop_iocprv >= 0event.c%s:%d: Assertion %s failed in %sevent_base_free%s: no base to freeevent_base_freeTAILQ_EMPTY(&base->activequeues[i])event.c%s:%d: Assertion %s failed in %sevent_base_freeTAILQ_EMPTY(&base->activequeues[i])event.c%s:%d: Assertion %s failed in %sevent_base_freemin_heap_empty(&base->timeheap)event.c%s:%d: Assertion %s failed in %sevent_base_freemin_heap_empty(&base->timeheap)event.c%s:%d: Assertion %s failed in %sevent_base_freeTAILQ_EMPTY(&base->eventqueue)event.c%s:%d: Assertion %s failed in %sevent_base_freeTAILQ_EMPTY(&base->eventqueue)event.c%s:%d: Assertion %s failed in %sevent_reinit%s: could not reinitialize event mechanismevent_base_priority_init%s: callocevent_base_init_common_timeoutis_common_timeout(&ctl->duration, base)event.c%s:%d: Assertion %s failed in %sevent_base_init_common_timeoutis_common_timeout(&ctl->duration, base)event.c%s:%d: Assertion %s failed in %sevent_base_init_common_timeout%s: Too many common timeouts already in use; we only support %d per event_baseevent_base_init_common_timeout%s: reallocevent_base_init_common_timeout%s: callocevent_base_init_common_timeoutis_common_timeout(result, base)event.c%s:%d: Assertion %s failed in %sevent_base_init_common_timeoutis_common_timeout(result, base)event.c%s:%d: Assertion %s failed in %sevent_persist_closureis_same_common_timeout(&ev->ev_timeout, &ev->ev_io_timeout)event.c%s:%d: Assertion %s failed in %sevent_persist_closureis_same_common_timeout(&ev->ev_timeout, &ev->ev_io_timeout)event.c%s:%d: Assertion %s failed in %sevent_process_active_single_queueactiveq != NULLevent.c%s:%d: Assertion %s failed in %sevent_process_active_single_queueactiveq != NULLevent.c%s:%d: Assertion %s failed in %sevent_base_get_methodbaseevent.c%s:%d: Assertion %s failed in %sevent_base_get_methodbaseevent.c%s:%d: Assertion %s failed in %sevent_base_loop%s: reentrant invocation. Only one event_base_loop can run on each event_base at once.event_assign%s called on an already added event %p (events: 0x%x, fd: %d, flags: 0x%x)event_assign%s: EV_SIGNAL is not compatible with EV_READ or EV_WRITEOut of memory in debugging codeevent_base_set%s called on a non-initialized event %p (events: 0x%x, fd: %d, flags: 0x%x)event_setr == 0event.c%s:%d: Assertion %s failed in %sevent_setr == 0event.c%s:%d: Assertion %s failed in %sevent_free%s called on a non-initialized event %p (events: 0x%x, fd: %d, flags: 0x%x)event_debug_unassign%s called on an already added event %p (events: 0x%x, fd: %d, flags: 0x%x)event_priority_set%s called on a non-initialized event %p (events: 0x%x, fd: %d, flags: 0x%x)event_pending%s called on a non-initialized event %p (events: 0x%x, fd: %d, flags: 0x%x)event_get_assignment%s called on a non-initialized event %p (events: 0x%x, fd: %d, flags: 0x%x)event_get_fd%s called on a non-initialized event %p (events: 0x%x, fd: %d, flags: 0x%x)event_get_base%s called on a non-initialized event %p (events: 0x%x, fd: %d, flags: 0x%x)event_get_events%s called on a non-initialized event %p (events: 0x%x, fd: %d, flags: 0x%x)event_get_callback%s called on a non-initialized event %p (events: 0x%x, fd: %d, flags: 0x%x)event_get_callback_arg%s called on a non-initialized event %p (events: 0x%x, fd: %d, flags: 0x%x)event_add%s: event has no event_base set.evthread_notify_base_evthread_is_debug_lock_held((base)->th_base_lock)event.c%s:%d: Assertion %s failed in %sevthread_notify_base_evthread_is_debug_lock_held((base)->th_base_lock)event.c%s:%d: Assertion %s failed in %sevent_add_internal_evthread_is_debug_lock_held((base)->th_base_lock)event.c%s:%d: Assertion %s failed in %sevent_add_internal_evthread_is_debug_lock_held((base)->th_base_lock)event.c%s:%d: Assertion %s failed in %sevent_add_internal%s called on a non-initialized event %p (events: 0x%x, fd: %d, flags: 0x%x)event_add_internal!(ev->ev_flags & ~EVLIST_ALL)event.c%s:%d: Assertion %s failed in %sevent_add_internal!(ev->ev_flags & ~EVLIST_ALL)event.c%s:%d: Assertion %s failed in %sevent_add_internal%s: noting an add on a non-setup event %p (events: 0x%x, fd: %d, flags: 0x%x)event_del%s: event has no event_base set.event_del_internal_evthread_is_debug_lock_held((ev->ev_base)->th_base_lock)event.c%s:%d: Assertion %s failed in %sevent_del_internal_evthread_is_debug_lock_held((ev->ev_base)->th_base_lock)event.c%s:%d: Assertion %s failed in %sevent_del_internal!(ev->ev_flags & ~EVLIST_ALL)event.c%s:%d: Assertion %s failed in %sevent_del_internal!(ev->ev_flags & ~EVLIST_ALL)event.c%s:%d: Assertion %s failed in %sevent_del_internal%s: noting a del on a non-setup event %p (events: 0x%x, fd: %d, flags: 0x%x)event_active%s: event has no event_base set.event_active%s called on a non-initialized event %p (events: 0x%x, fd: %d, flags: 0x%x)event_active_nolock_evthread_is_debug_lock_held((base)->th_base_lock)event.c%s:%d: Assertion %s failed in %sevent_active_nolock_evthread_is_debug_lock_held((base)->th_base_lock)event.c%s:%d: Assertion %s failed in %stimeout_nexttv->tv_sec >= 0event.c%s:%d: Assertion %s failed in %stimeout_nexttv->tv_sec >= 0event.c%s:%d: Assertion %s failed in %stimeout_nexttv->tv_usec >= 0event.c%s:%d: Assertion %s failed in %stimeout_nexttv->tv_usec >= 0event.c%s:%d: Assertion %s failed in %sevent_queue_remove_evthread_is_debug_lock_held((base)->th_base_lock)event.c%s:%d: Assertion %s failed in %sevent_queue_remove_evthread_is_debug_lock_held((base)->th_base_lock)event.c%s:%d: Assertion %s failed in %sevent_queue_remove%s: %p(fd %d) not on queue %xevent_queue_remove%s: unknown queue %xinsert_common_timeout_inorderis_same_common_timeout(&e->ev_timeout, &ev->ev_timeout)event.c%s:%d: Assertion %s failed in %sinsert_common_timeout_inorderis_same_common_timeout(&e->ev_timeout, &ev->ev_timeout)event.c%s:%d: Assertion %s failed in %sevent_queue_insert_evthread_is_debug_lock_held((base)->th_base_lock)event.c%s:%d: Assertion %s failed in %sevent_queue_insert_evthread_is_debug_lock_held((base)->th_base_lock)event.c%s:%d: Assertion %s failed in %sevent_queue_insert%s: %p(fd %d) already on queue %xevent_queue_insert%s: unknown queue %x2.0.20-stableevthread_make_base_notifiable%s: socketpairInserted events: Persist Timeout Signal Write Read %p [fd %ld]%s%s%s%s%s Active events [priority %d]: Timeout active Signal active Write active Read active %p [fd %ld]%s%s%s%s event_base_del_virtualbase->virtual_event_count > 0event.c%s:%d: Assertion %s failed in %sevent_base_del_virtualbase->virtual_event_count > 0event.c%s:%d: Assertion %s failed in %s_event_debug_map_lockCouldn't allocate %sevent_base_assert_okev->ev_flags & EV_TIMEOUTevent.c%s:%d: Assertion %s failed in %sevent_base_assert_okev->ev_flags & EV_TIMEOUTevent.c%s:%d: Assertion %s failed in %sevent_base_assert_okevutil_timercmp(&p_ev->ev_timeout, &ev->ev_timeout, <=)event.c%s:%d: Assertion %s failed in %sevent_base_assert_okevutil_timercmp(&p_ev->ev_timeout, &ev->ev_timeout, <=)event.c%s:%d: Assertion %s failed in %sevent_base_assert_okev->ev_timeout_pos.min_heap_idx == ievent.c%s:%d: Assertion %s failed in %sevent_base_assert_okev->ev_timeout_pos.min_heap_idx == ievent.c%s:%d: Assertion %s failed in %sevent_base_assert_okevutil_timercmp(&last->ev_timeout, &ev->ev_timeout, <=)event.c%s:%d: Assertion %s failed in %sevent_base_assert_okevutil_timercmp(&last->ev_timeout, &ev->ev_timeout, <=)event.c%s:%d: Assertion %s failed in %sevent_base_assert_okev->ev_flags & EV_TIMEOUTevent.c%s:%d: Assertion %s failed in %sevent_base_assert_okev->ev_flags & EV_TIMEOUTevent.c%s:%d: Assertion %s failed in %sevent_base_assert_okis_common_timeout(&ev->ev_timeout,base)event.c%s:%d: Assertion %s failed in %sevent_base_assert_okis_common_timeout(&ev->ev_timeout,base)event.c%s:%d: Assertion %s failed in %sevent_base_assert_okCOMMON_TIMEOUT_IDX(&ev->ev_timeout) == ievent.c%s:%d: Assertion %s failed in %sevent_base_assert_okCOMMON_TIMEOUT_IDX(&ev->ev_timeout) == ievent.c%s:%d: Assertion %s failed in %s: %sdebugmsgwarnerr???[%s] %s 5a 0`   0 ` Y0`evmap_io_addfd == ev->ev_fdevmap.c%s:%d: Assertion %s failed in %sevmap_io_addfd == ev->ev_fdevmap.c%s:%d: Assertion %s failed in %sToo many events reading or writing on fd %dTried to mix edge-triggered and non-edge-triggered events on fd %devmap_io_delfd == ev->ev_fdevmap.c%s:%d: Assertion %s failed in %sevmap_io_delfd == ev->ev_fdevmap.c%s:%d: Assertion %s failed in %sevmap_io_delnread >= 0evmap.c%s:%d: Assertion %s failed in %sevmap_io_delnread >= 0evmap.c%s:%d: Assertion %s failed in %sevmap_io_delnwrite >= 0evmap.c%s:%d: Assertion %s failed in %sevmap_io_delnwrite >= 0evmap.c%s:%d: Assertion %s failed in %sevmap_io_activectxevmap.c%s:%d: Assertion %s failed in %sevmap_io_activectxevmap.c%s:%d: Assertion %s failed in %sevmap_signal_activesig < map->nentriesevmap.c%s:%d: Assertion %s failed in %sevmap_signal_activesig < map->nentriesevmap.c%s:%d: Assertion %s failed in %sevent_changelist_remove_allfdinfo->idxplus1 == i + 1evmap.c%s:%d: Assertion %s failed in %sevent_changelist_remove_allfdinfo->idxplus1 == i + 1evmap.c%s:%d: Assertion %s failed in %sevent_changelist_get_or_constructchangelist->n_changes <= changelist->changes_sizeevmap.c%s:%d: Assertion %s failed in %sevent_changelist_get_or_constructchangelist->n_changes <= changelist->changes_sizeevmap.c%s:%d: Assertion %s failed in %sevent_changelist_get_or_constructchange->fd == fdevmap.c%s:%d: Assertion %s failed in %sevent_changelist_get_or_constructchange->fd == fdevmap.c%s:%d: Assertion %s failed in %sevmap_check_integrityev->ev_flags & EVLIST_INSERTEDevmap.c%s:%d: Assertion %s failed in %sevmap_check_integrityev->ev_flags & EVLIST_INSERTEDevmap.c%s:%d: Assertion %s failed in %sevmap_check_integrityev->ev_flags & EVLIST_INITevmap.c%s:%d: Assertion %s failed in %sevmap_check_integrityev->ev_flags & EVLIST_INITevmap.c%s:%d: Assertion %s failed in %sevmap_check_integrity!(ev->ev_flags & EVLIST_X_IOFOUND)evmap.c%s:%d: Assertion %s failed in %sevmap_check_integrity!(ev->ev_flags & EVLIST_X_IOFOUND)evmap.c%s:%d: Assertion %s failed in %sevmap_check_integrityev->ev_fd == ievmap.c%s:%d: Assertion %s failed in %sevmap_check_integrityev->ev_fd == ievmap.c%s:%d: Assertion %s failed in %sevmap_check_integrity!(ev->ev_flags & EVLIST_X_SIGFOUND)evmap.c%s:%d: Assertion %s failed in %sevmap_check_integrity!(ev->ev_flags & EVLIST_X_SIGFOUND)evmap.c%s:%d: Assertion %s failed in %sevmap_check_integrityev->ev_fd == ievmap.c%s:%d: Assertion %s failed in %sevmap_check_integrityev->ev_fd == ievmap.c%s:%d: Assertion %s failed in %sevmap_check_integrityev->ev_flags & EVLIST_X_IOFOUNDevmap.c%s:%d: Assertion %s failed in %sevmap_check_integrityev->ev_flags & EVLIST_X_IOFOUNDevmap.c%s:%d: Assertion %s failed in %sevmap_check_integrityev->ev_flags & EVLIST_X_SIGFOUNDevmap.c%s:%d: Assertion %s failed in %sevmap_check_integrityev->ev_flags & EVLIST_X_SIGFOUNDevmap.c%s:%d: Assertion %s failed in %sevmap_check_integritynio == 0evmap.c%s:%d: Assertion %s failed in %sevmap_check_integritynio == 0evmap.c%s:%d: Assertion %s failed in %sevmap_check_integritynsignals == 0evmap.c%s:%d: Assertion %s failed in %sevmap_check_integritynsignals == 0evmap.c%s:%d: Assertion %s failed in %ssignalevsig_cb%s: recvevsig_init%s: socketpairreallocmallocsignalevsig_addevsignal >= 0 && evsignal < NSIGsignal.c%s:%d: Assertion %s failed in %sevsig_addevsignal >= 0 && evsignal < NSIGsignal.c%s:%d: Assertion %s failed in %sAdded a signal to event base %p with signals already added to event_base %p. Only one can have signals at a time with the %s backend. The base with the most recently added signal or the most recent event_base_loop() call gets preference; do not rely on this behavior in future Libevent versions.signalevsig_delevsignal >= 0 && evsignal < NSIGsignal.c%s:%d: Assertion %s failed in %sevsig_delevsignal >= 0 && evsignal < NSIGsignal.c%s:%d: Assertion %s failed in %sevsig_handler%s: received signal %d, but have no base configuredevsig_base_lockCouldn't allocate %sTrying to disable lock functions after they have been set up will probaby not work.Can't change lock callbacks once they have been initialized.Trying to disable condition functions after they have been set up will probaby not work.Can't change condition callbacks once they have been initialized.debug_lock_freelock->count == 0evthread.c%s:%d: Assertion %s failed in %sdebug_lock_freelock->count == 0evthread.c%s:%d: Assertion %s failed in %sdebug_lock_freelocktype == lock->locktypeevthread.c%s:%d: Assertion %s failed in %sdebug_lock_freelocktype == lock->locktypeevthread.c%s:%d: Assertion %s failed in %sevthread_debug_lock_mark_lockedlock->count == 1evthread.c%s:%d: Assertion %s failed in %sevthread_debug_lock_mark_lockedlock->count == 1evthread.c%s:%d: Assertion %s failed in %sevthread_debug_lock_mark_lockedlock->held_by == meevthread.c%s:%d: Assertion %s failed in %sevthread_debug_lock_mark_lockedlock->held_by == meevthread.c%s:%d: Assertion %s failed in %sdebug_lock_lockmode & (EVTHREAD_READ|EVTHREAD_WRITE)evthread.c%s:%d: Assertion %s failed in %sdebug_lock_lockmode & (EVTHREAD_READ|EVTHREAD_WRITE)evthread.c%s:%d: Assertion %s failed in %sdebug_lock_lock(mode & (EVTHREAD_READ|EVTHREAD_WRITE)) == 0evthread.c%s:%d: Assertion %s failed in %sdebug_lock_lock(mode & (EVTHREAD_READ|EVTHREAD_WRITE)) == 0evthread.c%s:%d: Assertion %s failed in %sevthread_debug_lock_mark_unlockedmode & (EVTHREAD_READ|EVTHREAD_WRITE)evthread.c%s:%d: Assertion %s failed in %sevthread_debug_lock_mark_unlockedmode & (EVTHREAD_READ|EVTHREAD_WRITE)evthread.c%s:%d: Assertion %s failed in %sevthread_debug_lock_mark_unlocked(mode & (EVTHREAD_READ|EVTHREAD_WRITE)) == 0evthread.c%s:%d: Assertion %s failed in %sevthread_debug_lock_mark_unlocked(mode & (EVTHREAD_READ|EVTHREAD_WRITE)) == 0evthread.c%s:%d: Assertion %s failed in %sevthread_debug_lock_mark_unlockedlock->held_by == _evthread_id_fn()evthread.c%s:%d: Assertion %s failed in %sevthread_debug_lock_mark_unlockedlock->held_by == _evthread_id_fn()evthread.c%s:%d: Assertion %s failed in %sevthread_debug_lock_mark_unlockedlock->count >= 0evthread.c%s:%d: Assertion %s failed in %sevthread_debug_lock_mark_unlockedlock->count >= 0evthread.c%s:%d: Assertion %s failed in %sdebug_cond_waitlockevthread.c%s:%d: Assertion %s failed in %sdebug_cond_waitlockevthread.c%s:%d: Assertion %s failed in %sdebug_cond_wait_evthread_is_debug_lock_held(_lock)evthread.c%s:%d: Assertion %s failed in %sdebug_cond_wait_evthread_is_debug_lock_held(_lock)evthread.c%s:%d: Assertion %s failed in %sevthread_setup_global_lock_lock_ == NULLevthread.c%s:%d: Assertion %s failed in %sevthread_setup_global_lock_lock_ == NULLevthread.c%s:%d: Assertion %s failed in %sevthread_setup_global_lock_lock_ != NULLevthread.c%s:%d: Assertion %s failed in %sevthread_setup_global_lock_lock_ != NULLevthread.c%s:%d: Assertion %s failed in %sevthread_setup_global_lock_lock_ == NULLevthread.c%s:%d: Assertion %s failed in %sevthread_setup_global_lock_lock_ == NULLevthread.c%s:%d: Assertion %s failed in %sevthread_setup_global_lock_enable_locks && _evthread_lock_debugging_enabledevthread.c%s:%d: Assertion %s failed in %sevthread_setup_global_lock_enable_locks && _evthread_lock_debugging_enabledevthread.c%s:%d: Assertion %s failed in %sevthread_setup_global_lock_lock->locktype == locktypeevthread.c%s:%d: Assertion %s failed in %sevthread_setup_global_lock_lock->locktype == locktypeevthread.c%s:%d: Assertion %s failed in %sevthread_setup_global_lock_lock->lock == NULLevthread.c%s:%d: Assertion %s failed in %sevthread_setup_global_lock_lock->lock == NULLevthread.c%s:%d: Assertion %s failed in %ssocket_asyncupcast_connectBEV_IS_ASYNC(&bev_a->bev.bev)bufferevent_async.c%s:%d: Assertion %s failed in %supcast_connectBEV_IS_ASYNC(&bev_a->bev.bev)bufferevent_async.c%s:%d: Assertion %s failed in %supcast_readBEV_IS_ASYNC(&bev_a->bev.bev)bufferevent_async.c%s:%d: Assertion %s failed in %supcast_readBEV_IS_ASYNC(&bev_a->bev.bev)bufferevent_async.c%s:%d: Assertion %s failed in %supcast_writeBEV_IS_ASYNC(&bev_a->bev.bev)bufferevent_async.c%s:%d: Assertion %s failed in %supcast_writeBEV_IS_ASYNC(&bev_a->bev.bev)bufferevent_async.c%s:%d: Assertion %s failed in %sbe_async_destruct!upcast(bev)->write_in_progress && !upcast(bev)->read_in_progressbufferevent_async.c%s:%d: Assertion %s failed in %sbe_async_destruct!upcast(bev)->write_in_progress && !upcast(bev)->read_in_progressbufferevent_async.c%s:%d: Assertion %s failed in %sconnect_completebev_a->bev.connectingbufferevent_async.c%s:%d: Assertion %s failed in %sconnect_completebev_a->bev.connectingbufferevent_async.c%s:%d: Assertion %s failed in %sread_completebev_a->read_in_progressbufferevent_async.c%s:%d: Assertion %s failed in %sread_completebev_a->read_in_progressbufferevent_async.c%s:%d: Assertion %s failed in %swrite_completebev_a->write_in_progressbufferevent_async.c%s:%d: Assertion %s failed in %swrite_completebev_a->write_in_progressbufferevent_async.c%s:%d: Assertion %s failed in %sbufferevent_async_connectext && ext->ConnectEx && fd >= 0 && sa != NULLbufferevent_async.c%s:%d: Assertion %s failed in %sbufferevent_async_connectext && ext->ConnectEx && fd >= 0 && sa != NULLbufferevent_async.c%s:%d: Assertion %s failed in %ssocket%dbe_socket_destructbufev->be_ops == &bufferevent_ops_socketbufferevent_sock.c%s:%d: Assertion %s failed in %sbe_socket_destructbufev->be_ops == &bufferevent_ops_socketbufferevent_sock.c%s:%d: Assertion %s failed in %sbe_socket_setfdbufev->be_ops == &bufferevent_ops_socketbufferevent_sock.c%s:%d: Assertion %s failed in %sbe_socket_setfdbufev->be_ops == &bufferevent_ops_socketbufferevent_sock.c%s:%d: Assertion %s failed in %sfilterupcastbev_f->bev.bev.be_ops == &bufferevent_ops_filterbufferevent_filter.c%s:%d: Assertion %s failed in %supcastbev_f->bev.bev.be_ops == &bufferevent_ops_filterbufferevent_filter.c%s:%d: Assertion %s failed in %sbe_filter_destructbevfbufferevent_filter.c%s:%d: Assertion %s failed in %sbe_filter_destructbevfbufferevent_filter.c%s:%d: Assertion %s failed in %sBEV_OPT_CLOSE_ON_FREE set on an bufferevent with too few referencesbe_filter_flushbevfbufferevent_filter.c%s:%d: Assertion %s failed in %sbe_filter_flushbevfbufferevent_filter.c%s:%d: Assertion %s failed in %supcastbev_p->bev.bev.be_ops == &bufferevent_ops_pairbufferevent_pair.c%s:%d: Assertion %s failed in %supcastbev_p->bev.bev.be_ops == &bufferevent_ops_pairbufferevent_pair.c%s:%d: Assertion %s failed in %spair_eltlistener_read_cbfreedlistener.c%s:%d: Assertion %s failed in %slistener_read_cbfreedlistener.c%s:%d: Assertion %s failed in %sError from accept() callaccepted_socket_invoke_user_cbext->GetAcceptExSockaddrslistener.c%s:%d: Assertion %s failed in %saccepted_socket_invoke_user_cbext->GetAcceptExSockaddrslistener.c%s:%d: Assertion %s failed in %sUnexpected error on AcceptExgetsocknamecalloccallocCouldn't create accepting socketCouldn't start accepting on socket[evdns] %s[evdns] %srequest_find_from_trans_id_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %srequest_find_from_trans_id_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %snameserver_probe_failed_evthread_is_debug_lock_held((ns->base)->lock)evdns.c%s:%d: Assertion %s failed in %snameserver_probe_failed_evthread_is_debug_lock_held((ns->base)->lock)evdns.c%s:%d: Assertion %s failed in %sError from libevent when adding timer event for %snameserver_failed_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %snameserver_failed_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sNameserver %s has failed: %snameserver_failedbase->global_good_nameservers >= 0evdns.c%s:%d: Assertion %s failed in %snameserver_failedbase->global_good_nameservers >= 0evdns.c%s:%d: Assertion %s failed in %sAll nameservers have failedError from libevent when adding timer event for %snameserver_up_evthread_is_debug_lock_held((ns->base)->lock)evdns.c%s:%d: Assertion %s failed in %snameserver_up_evthread_is_debug_lock_held((ns->base)->lock)evdns.c%s:%d: Assertion %s failed in %sNameserver %s is back uprequest_finished(req)->handle && (req)->handle->current_req == (req)evdns.c%s:%d: Assertion %s failed in %srequest_finished(req)->handle && (req)->handle->current_req == (req)evdns.c%s:%d: Assertion %s failed in %sRemoving timeout for request %prequest_finishedreq->handle->current_req == reqevdns.c%s:%d: Assertion %s failed in %srequest_finishedreq->handle->current_req == reqevdns.c%s:%d: Assertion %s failed in %srequest_reissue_evthread_is_debug_lock_held((req->base)->lock)evdns.c%s:%d: Assertion %s failed in %srequest_reissue_evthread_is_debug_lock_held((req->base)->lock)evdns.c%s:%d: Assertion %s failed in %srequest_reissue(req)->handle && (req)->handle->current_req == (req)evdns.c%s:%d: Assertion %s failed in %srequest_reissue(req)->handle && (req)->handle->current_req == (req)evdns.c%s:%d: Assertion %s failed in %sevdns_requests_pump_waiting_queue_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sevdns_requests_pump_waiting_queue_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sevdns_requests_pump_waiting_queuebase->req_waiting_headevdns.c%s:%d: Assertion %s failed in %sevdns_requests_pump_waiting_queuebase->req_waiting_headevdns.c%s:%d: Assertion %s failed in %sreply_run_callback0evdns.c%s:%d: Assertion %s failed in %sreply_run_callback0evdns.c%s:%d: Assertion %s failed in %sreply_schedule_callback%s: Couldn't allocate space for deferred callback.reply_schedule_callback_evthread_is_debug_lock_held((req->base)->lock)evdns.c%s:%d: Assertion %s failed in %sreply_schedule_callback_evthread_is_debug_lock_held((req->base)->lock)evdns.c%s:%d: Assertion %s failed in %sreply_handle_evthread_is_debug_lock_held((req->base)->lock)evdns.c%s:%d: Assertion %s failed in %sreply_handle_evthread_is_debug_lock_held((req->base)->lock)evdns.c%s:%d: Assertion %s failed in %sreply_handle(req)->handle && (req)->handle->current_req == (req)evdns.c%s:%d: Assertion %s failed in %sreply_handle(req)->handle && (req)->handle->current_req == (req)evdns.c%s:%d: Assertion %s failed in %sBad response %d (%s)reply_parseGot a SERVERFAILED from nameserverat %s; will allow the request to time out._evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sreply_parse_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sreply_parsereq->base == baseevdns.c%s:%d: Assertion %s failed in %sreply_parsereq->base == baseevdns.c%s:%d: Assertion %s failed in %srequest_parse_evthread_is_debug_lock_held((port)->lock)evdns.c%s:%d: Assertion %s failed in %srequest_parse_evthread_is_debug_lock_held((port)->lock)evdns.c%s:%d: Assertion %s failed in %stransaction_id_pick_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %stransaction_id_pick_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %snameserver_pick_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %snameserver_pick_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %snameserver_pickbase->global_good_nameservers == 0evdns.c%s:%d: Assertion %s failed in %snameserver_pickbase->global_good_nameservers == 0evdns.c%s:%d: Assertion %s failed in %snameserver_read_evthread_is_debug_lock_held((ns->base)->lock)evdns.c%s:%d: Assertion %s failed in %snameserver_read_evthread_is_debug_lock_held((ns->base)->lock)evdns.c%s:%d: Assertion %s failed in %sserver_port_readAddress mismatch on received DNS packet. Apparent source was %s_evthread_is_debug_lock_held((s)->lock)evdns.c%s:%d: Assertion %s failed in %sserver_port_read_evthread_is_debug_lock_held((s)->lock)evdns.c%s:%d: Assertion %s failed in %sError %s (%d) while reading request.server_port_flush_evthread_is_debug_lock_held((port)->lock)evdns.c%s:%d: Assertion %s failed in %sserver_port_flush_evthread_is_debug_lock_held((port)->lock)evdns.c%s:%d: Assertion %s failed in %sError %s (%d) while writing response to port; droppingserver_port_flushreq != port->pending_repliesevdns.c%s:%d: Assertion %s failed in %sserver_port_flushreq != port->pending_repliesevdns.c%s:%d: Assertion %s failed in %sError from libevent when adding event for DNS server.nameserver_write_waiting_evthread_is_debug_lock_held((ns->base)->lock)evdns.c%s:%d: Assertion %s failed in %snameserver_write_waiting_evthread_is_debug_lock_held((ns->base)->lock)evdns.c%s:%d: Assertion %s failed in %sError from libevent when adding event for %s%d.%d.%d.%d.in-addr.arpaError from libevent when adding event for DNS serverserver_port_freeportevdns.c%s:%d: Assertion %s failed in %sserver_port_freeportevdns.c%s:%d: Assertion %s failed in %sserver_port_free!port->refcntevdns.c%s:%d: Assertion %s failed in %sserver_port_free!port->refcntevdns.c%s:%d: Assertion %s failed in %sserver_port_free!port->pending_repliesevdns.c%s:%d: Assertion %s failed in %sserver_port_free!port->pending_repliesevdns.c%s:%d: Assertion %s failed in %sRequest %p timed outrequest timed out.Giving up on request %p; tx_count==%dRetransmitting request %p; tx_count==%devdns_request_transmit_to_evthread_is_debug_lock_held((req->base)->lock)evdns.c%s:%d: Assertion %s failed in %sevdns_request_transmit_to_evthread_is_debug_lock_held((req->base)->lock)evdns.c%s:%d: Assertion %s failed in %sevdns_request_transmit_to(req)->handle && (req)->handle->current_req == (req)evdns.c%s:%d: Assertion %s failed in %sevdns_request_transmit_to(req)->handle && (req)->handle->current_req == (req)evdns.c%s:%d: Assertion %s failed in %sevdns_request_transmit_evthread_is_debug_lock_held((req->base)->lock)evdns.c%s:%d: Assertion %s failed in %sevdns_request_transmit_evthread_is_debug_lock_held((req->base)->lock)evdns.c%s:%d: Assertion %s failed in %sevdns_request_transmit(req)->handle && (req)->handle->current_req == (req)evdns.c%s:%d: Assertion %s failed in %sevdns_request_transmit(req)->handle && (req)->handle->current_req == (req)evdns.c%s:%d: Assertion %s failed in %sevdns_request_transmitreq->trans_id != 0xffffevdns.c%s:%d: Assertion %s failed in %sevdns_request_transmitreq->trans_id != 0xffffevdns.c%s:%d: Assertion %s failed in %sSetting timeout for request %p, sent to nameserver %pError from libevent when adding timer for request %pnameserver_send_probe_evthread_is_debug_lock_held((ns->base)->lock)evdns.c%s:%d: Assertion %s failed in %snameserver_send_probe_evthread_is_debug_lock_held((ns->base)->lock)evdns.c%s:%d: Assertion %s failed in %sSending probe to %sgoogle.comevdns_transmit_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sevdns_transmit_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %s_evdns_nameserver_add_impl_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %s_evdns_nameserver_add_impl_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sAddrlen %d too long.Couldn't bind to outgoing addressAdded nameserver %s as %pUnable to add nameserver %s: error %dUnable to parse nameserver address %sevdns_base_nameserver_sockaddr_addbaseevdns.c%s:%d: Assertion %s failed in %sevdns_base_nameserver_sockaddr_addbaseevdns.c%s:%d: Assertion %s failed in %sevdns_request_remove_evthread_is_debug_lock_held((req->base)->lock)evdns.c%s:%d: Assertion %s failed in %sevdns_request_remove_evthread_is_debug_lock_held((req->base)->lock)evdns.c%s:%d: Assertion %s failed in %sevdns_request_remove(req)->handle && (req)->handle->current_req == (req)evdns.c%s:%d: Assertion %s failed in %sevdns_request_remove(req)->handle && (req)->handle->current_req == (req)evdns.c%s:%d: Assertion %s failed in %sevdns_request_insert_evthread_is_debug_lock_held((req->base)->lock)evdns.c%s:%d: Assertion %s failed in %sevdns_request_insert_evthread_is_debug_lock_held((req->base)->lock)evdns.c%s:%d: Assertion %s failed in %sevdns_request_insert(req)->handle && (req)->handle->current_req == (req)evdns.c%s:%d: Assertion %s failed in %sevdns_request_insert(req)->handle && (req)->handle->current_req == (req)evdns.c%s:%d: Assertion %s failed in %srequest_new_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %srequest_new_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %srequest_submit_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %srequest_submit_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %srequest_submit(req)->handle && (req)->handle->current_req == (req)evdns.c%s:%d: Assertion %s failed in %srequest_submit(req)->handle && (req)->handle->current_req == (req)evdns.c%s:%d: Assertion %s failed in %sevdns_cancel_request(req)->handle && (req)->handle->current_req == (req)evdns.c%s:%d: Assertion %s failed in %sevdns_cancel_request(req)->handle && (req)->handle->current_req == (req)evdns.c%s:%d: Assertion %s failed in %sResolve requested for %sResolve requested for %sevdns_base_resolve_reverseinevdns.c%s:%d: Assertion %s failed in %sevdns_base_resolve_reverseinevdns.c%s:%d: Assertion %s failed in %s%d.%d.%d.%d.in-addr.arpaResolve requested for %s (reverse)evdns_base_resolve_reverse_ipv6inevdns.c%s:%d: Assertion %s failed in %sevdns_base_resolve_reverse_ipv6inevdns.c%s:%d: Assertion %s failed in %s0123456789abcdef0123456789abcdefevdns_base_resolve_reverse_ipv6cp + strlen("ip6.arpa") < buf+sizeof(buf)evdns.c%s:%d: Assertion %s failed in %sevdns_base_resolve_reverse_ipv6cp + strlen("ip6.arpa") < buf+sizeof(buf)evdns.c%s:%d: Assertion %s failed in %sip6.arpaResolve requested for %s (reverse)search_postfix_add_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %ssearch_postfix_add_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %ssearch_reverse_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %ssearch_reverse_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %ssearch_set_from_hostname_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %ssearch_set_from_hostname_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %ssearch_make_new0evdns.c%s:%d: Assertion %s failed in %ssearch_make_new0evdns.c%s:%d: Assertion %s failed in %ssearch_request_new_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %ssearch_request_new_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %ssearch_request_newtype == TYPE_A || type == TYPE_AAAAevdns.c%s:%d: Assertion %s failed in %ssearch_request_newtype == TYPE_A || type == TYPE_AAAAevdns.c%s:%d: Assertion %s failed in %ssearch_request_newhandle->current_req == NULLevdns.c%s:%d: Assertion %s failed in %ssearch_request_newhandle->current_req == NULLevdns.c%s:%d: Assertion %s failed in %ssearch_request_newhandle->search_origname == NULLevdns.c%s:%d: Assertion %s failed in %ssearch_request_newhandle->search_origname == NULLevdns.c%s:%d: Assertion %s failed in %ssearch_try_next_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %ssearch_try_next_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sSearch: trying raw query %sSearch: now trying %s (%d)search_request_finished_evthread_is_debug_lock_held((handle->current_req->base)->lock)evdns.c%s:%d: Assertion %s failed in %ssearch_request_finished%s:%d: Assertion %s failed in %s_evthread_is_debug_lock_held((handle->current_req->base)->lock)evdns.cevdns_resolv_set_defaults_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sevdns_resolv_set_defaults_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %s127.0.0.1evdns_base_set_max_requests_inflight_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sevdns_base_set_max_requests_inflight_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sevdns_base_set_max_requests_inflightn_heads > 0evdns.c%s:%d: Assertion %s failed in %sevdns_base_set_max_requests_inflightn_heads > 0evdns.c%s:%d: Assertion %s failed in %sevdns_base_set_option_impl_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sevdns_base_set_option_impl_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sndots:Setting ndots to %dtimeout:Setting timeout to %sgetaddrinfo-allow-skew:Setting getaddrinfo-allow-skew to %smax-timeouts:Setting maximum allowed timeouts to %dmax-inflight:Setting maximum inflight requests to %dattempts:Setting retries to %drandomize-case:bind-to:initial-probe-timeout:Setting initial probe timeout to %s resolv_conf_parse_line_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sresolv_conf_parse_line_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %snameserverdomainsearchoptions%s%sParsing resolv.conf file %s127.0.0.1evdns_nameserver_ip_add_line_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sevdns_nameserver_ip_add_line_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sload_nameservers_with_getnetworkparams_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sload_nameservers_with_getnetworkparams_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %siphlpapi.dllCould not open iphlpapi.dllGetNetworkParamsCould not get address of function.fn() failed.load_nameservers_with_getnetworkparamsfixedevdns.c%s:%d: Assertion %s failed in %sload_nameservers_with_getnetworkparamsfixedevdns.c%s:%d: Assertion %s failed in %sCould not add nameserver %s to list,error: %dSuccessfully added %s as nameserverNo nameservers added.config_nameserver_from_reg_key_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sconfig_nameserver_from_reg_key_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sload_nameservers_from_registry_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sload_nameservers_from_registry_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sSystem\CurrentControlSet\Services\Tcpip\ParametersCouldn't open nt key, %dInterfacesCouldn't open interfaces key, %dNameServerNameServernt_keyFound nameservers in %s/%s"NameServer"nt_keyDidn't find nameservers in %s/%sDhcpNameServerDhcpNameServernt_keyFound nameservers in %s/%s"DhcpNameServer"nt_keyDidn't find nameservers in %s/%sNameServerNameServerinterfaces_keyFound nameservers in %s/%s"NameServer"interfaces_keyDidn't find nameservers in %s/%sDhcpNameServerDhcpNameServerinterfaces_keyFound nameservers in %s/%s"DhcpNameServer"interfaces_keyDidn't find nameservers in %s/%sSystem\CurrentControlSet\Services\VxD\MSTCPCouldn't open registry key, %dNameServerNameServerwin_keyFound nameservers in %s/%s"NameServer"win_keyDidn't find nameservers in %s/%sDidn't find any nameservers.Unable to seed random number generator; DNS can't run.no errormisformatted queryserver failedname does not existquery not implementedrefusedreply truncated or ill-formedunknownrequest timed outdns subsystem shut downdns request canceledno records in the reply[Unknown error code] evdns_base_parse_hosts_line_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sevdns_base_parse_hosts_line_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sevdns_base_parse_hosts_linesocklen <= (int)sizeof(he->addr)evdns.c%s:%d: Assertion %s failed in %sevdns_base_parse_hosts_linesocklen <= (int)sizeof(he->addr)evdns.c%s:%d: Assertion %s failed in %sevdns_base_load_hosts_impl_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %sevdns_base_load_hosts_impl_evthread_is_debug_lock_held((base)->lock)evdns.c%s:%d: Assertion %s failed in %s127.0.0.1 localhost::1 localhostevdns_getaddrinfo_timeout_cb!v4_timedout || !v6_timedoutevdns.c%s:%d: Assertion %s failed in %sevdns_getaddrinfo_timeout_cb!v4_timedout || !v6_timedoutevdns.c%s:%d: Assertion %s failed in %sevdns_getaddrinfo_gotresolvereq->type == DNS_IPv4_A || req->type == DNS_IPv6_AAAAevdns.c%s:%d: Assertion %s failed in %sevdns_getaddrinfo_gotresolvereq->type == DNS_IPv4_A || req->type == DNS_IPv6_AAAAevdns.c%s:%d: Assertion %s failed in %sevdns_getaddrinfo_gotresolvetype == DNS_IPv4_A || type == DNS_IPv6_AAAAevdns.c%s:%d: Assertion %s failed in %sevdns_getaddrinfo_gotresolvetype == DNS_IPv4_A || type == DNS_IPv6_AAAAevdns.c%s:%d: Assertion %s failed in %sCall to getaddrinfo_async with no evdns_base configured.Sending request for %s on ipv4 as %pSending request for %s on ipv6 as %pGetQueuedCompletionStatus exited with no event.evrpc_freer == 0evrpc.c%s:%d: Assertion %s failed in %sevrpc_freer == 0evrpc.c%s:%d: Assertion %s failed in %sevrpc_freerevrpc.c%s:%d: Assertion %s failed in %sevrpc_freerevrpc.c%s:%d: Assertion %s failed in %sevrpc_freerevrpc.c%s:%d: Assertion %s failed in %sevrpc_freerevrpc.c%s:%d: Assertion %s failed in %sevrpc_add_hookhook_type == EVRPC_INPUT || hook_type == EVRPC_OUTPUTevrpc.c%s:%d: Assertion %s failed in %sevrpc_add_hookhook_type == EVRPC_INPUT || hook_type == EVRPC_OUTPUTevrpc.c%s:%d: Assertion %s failed in %sevrpc_add_hookhook != NULLevrpc.c%s:%d: Assertion %s failed in %sevrpc_add_hookhook != NULLevrpc.c%s:%d: Assertion %s failed in %sevrpc_remove_hookhook_type == EVRPC_INPUT || hook_type == EVRPC_OUTPUTevrpc.c%s:%d: Assertion %s failed in %sevrpc_remove_hookhook_type == EVRPC_INPUT || hook_type == EVRPC_OUTPUTevrpc.c%s:%d: Assertion %s failed in %sevrpc_construct_uri%s: failed to register rpc at %s/.rpc.evrpc_unregister_rpcr == 0evrpc.c%s:%d: Assertion %s failed in %sevrpc_unregister_rpcr == 0evrpc.c%s:%d: Assertion %s failed in %sevrpc_request_cbevrpc.c%s:%d: Assertion %s failed in %shook_res == EVRPC_TERMINATE || hook_res == EVRPC_CONTINUE || hook_res == EVRPC_PAUSEevrpc_request_cbevrpc.c%s:%d: Assertion %s failed in %shook_res == EVRPC_TERMINATE || hook_res == EVRPC_CONTINUE || hook_res == EVRPC_PAUSEevrpc_request_cb_closurerpc_stateevrpc.c%s:%d: Assertion %s failed in %sevrpc_request_cb_closurerpc_stateevrpc.c%s:%d: Assertion %s failed in %sevrpc_reqstate_freerpc_state != NULLevrpc.c%s:%d: Assertion %s failed in %sevrpc_reqstate_freerpc_state != NULLevrpc.c%s:%d: Assertion %s failed in %sevrpc_request_donerpc_stateevrpc.c%s:%d: Assertion %s failed in %sevrpc_request_donerpc_stateevrpc.c%s:%d: Assertion %s failed in %sevrpc_request_doneevrpc.c%s:%d: Assertion %s failed in %shook_res == EVRPC_TERMINATE || hook_res == EVRPC_CONTINUE || hook_res == EVRPC_PAUSEevrpc_request_doneevrpc.c%s:%d: Assertion %s failed in %shook_res == EVRPC_TERMINATE || hook_res == EVRPC_CONTINUE || hook_res == EVRPC_PAUSEevrpc_request_done_closurerpc_stateevrpc.c%s:%d: Assertion %s failed in %sevrpc_request_done_closurerpc_stateevrpc.c%s:%d: Assertion %s failed in %sContent-Typeapplication/octet-streamContent-TypeOKevrpc_pool_freerevrpc.c%s:%d: Assertion %s failed in %sevrpc_pool_freerevrpc.c%s:%d: Assertion %s failed in %sevrpc_pool_freerevrpc.c%s:%d: Assertion %s failed in %sevrpc_pool_freerevrpc.c%s:%d: Assertion %s failed in %sevrpc_pool_add_connectionconnection->http_server == NULLevrpc.c%s:%d: Assertion %s failed in %sevrpc_pool_add_connectionconnection->http_server == NULLevrpc.c%s:%d: Assertion %s failed in %sevrpc_schedule_requesthook_res == EVRPC_TERMINATE || hook_res == EVRPC_CONTINUE || hook_res == EVRPC_PAUSEevrpc.c%s:%d: Assertion %s failed in %sevrpc_schedule_requestevrpc.c%s:%d: Assertion %s failed in %shook_res == EVRPC_TERMINATE || hook_res == EVRPC_CONTINUE || hook_res == EVRPC_PAUSEevrpc_make_requestTAILQ_FIRST(&pool->connections) != NULLevrpc.c%s:%d: Assertion %s failed in %sevrpc_make_requestTAILQ_FIRST(&pool->connections) != NULLevrpc.c%s:%d: Assertion %s failed in %sevrpc_reply_doneevrpc.c%s:%d: Assertion %s failed in %shook_res == EVRPC_TERMINATE || hook_res == EVRPC_CONTINUE || hook_res == EVRPC_PAUSEevrpc_reply_doneevrpc.c%s:%d: Assertion %s failed in %shook_res == EVRPC_TERMINATE || hook_res == EVRPC_CONTINUE || hook_res == EVRPC_PAUSEevrpc_request_timeoutevcon != NULLevrpc.c%s:%d: Assertion %s failed in %sevrpc_request_timeoutevcon != NULLevrpc.c%s:%d: Assertion %s failed in %sevrpc_meta_data_freemeta_data != NULLevrpc.c%s:%d: Assertion %s failed in %sevrpc_meta_data_freemeta_data != NULLevrpc.c%s:%d: Assertion %s failed in %sevrpc_hook_meta_newctx != NULLevrpc.c%s:%d: Assertion %s failed in %sevrpc_hook_meta_newctx != NULLevrpc.c%s:%d: Assertion %s failed in %sevrpc_hook_add_metameta != NULLevrpc.c%s:%d: Assertion %s failed in %sevrpc_hook_add_metameta != NULLevrpc.c%s:%d: Assertion %s failed in %sevrpc_hook_add_metameta->key != NULLevrpc.c%s:%d: Assertion %s failed in %sevrpc_hook_add_metameta->key != NULLevrpc.c%s:%d: Assertion %s failed in %sevrpc_hook_add_metameta->data != NULLevrpc.c%s:%d: Assertion %s failed in %sevrpc_hook_add_metameta->data != NULLevrpc.c%s:%d: Assertion %s failed in %sevtag_unmarshal_string%s: mallocarc4rand_lockCouldn't allocate %s  :(;`t`tN@Dus        ! 5A CPR S WY l m pr   )     ;Zx0Nm:Yw/Mlй abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZN`y!@~ڣ @ڣ AϢ[@~QQ^ _j21~C|xtplh`XPD80$  ؼмȼxdX PH@80( ܻȻ|tld\TLD4 |̺pH4TTTTTXpTpUpUNpPSTPDThVVhL<  |hTH8( ܿȿp8`H8 8ľ8lT8+oooooooooo..XnnnnnnnnnXnnnnnnnX.5 @  @@@@ @P@$@@ @4@N@ p+ŝi@]%O@qוC)@D@<զIx@oGAkU'9p|Bݎ~QCv)/&D(DJzEeǑF e uuvHMXB䧓9;5SM]=];Z] T7aZ%]g']݀nLɛ R`%u?q= ףp= ף?Zd;On?,eX?#GGŧ?@il7?3=BzՔ?aw̫?/L[Mľ?S;uD?g9Eϔ?$#⼺;1az?aUY~S|_?/D?$?9'*?}d|FU>c{#Tw=:zc%C12C2X2]22222222333 3034383<3@3D33333333333333333333333444!8&80858G8L8V8[8888888888999%9*94999|9999999999T:7;w;;;;< <2=F=`======>>>"?5?:??????????? 000111$1)1M1R1\1a1s1x111g2o2v22222233w3333<5A555555666$6)6y:~:::w<<<<<;>>>??Q?[?m?????0000"000"1.11W2c223 33#3(32373V3n3s333B4G4Q4V4h4m4w4|444557*7@7r7778095999T:Y::;;;<>@002{222233Y3^3-424Q4V4u4z4445D5n55555536P6t6666667n7s7788B8Y8^8o888: <<<<<<= ==3=8=B=G=Y=^=h=m=== >>^>>>?^???Pg0y0111222!2&233334"4A4F4Y4^4444555)5p5u5555555556h66662777A7F7X7]7g7l7788x8}88888888899$9)9;9@9J9O99: ::":':1:6:z:::;[;`;;;(>>>>>k?p?????`0 000a122222344 5O5V5g5n55560666677 7C8H8,9n9s99999999.:3:;:@:E:Z:_:::::.r>|>>>>?????p000"0'0F0K0U0Z0l0q0{001172T222,3R3]3w334D4"515Q5]5c5556-676K6_6i66666667828>8|888888888888 999919G9\9:::';W;;;;<<)<7>l>p>t>x>|>>>>>>>>>>>>>>?J???60T000001,1@111111/242>2C2U2Z2d2i233358667S77V8|89:;<'=n=====7>F>L>R>X>a>k>>>>>>>? ???h??????????00L0g0001&1W1t1M2Z2a22)33Y44455555.5s555555555 6$6)63686J6O6Y6^666667:7I777778888/9=9_9z999O:T:[:`:r:w:~::::::::::??b6j<<<<===$=)=H00234449:::%:*:4:9:H>M>W>\>n>s>}>>>????????L1111111122222222Z4_4i4n44444H:$=n?s?}?????? 0000&0+050:0f0k0u0z000000000000011111111`2e2o2t222222222223 34U5Z5d5i5{5555E7J7T7Y7k7p7z7777777777::::(:-:7:<:<<<<<<<<%=*=4=9=K=P=Z=_=========%>*>4>9>K>P>Z>_>????)?.?8?=?????????00#0(0:0?0I0N0000000004191C1H1Z1_1i1n111112 222T2Y2c2h2z2222F6K6U6Z6l6q6{66^7c7m7r77777Q8V8`8e8w8|888b9g9g>l>v>{>>>>>>>>>>>>>????????00000000^1c1m1r11111K2P2Z2_2q2v2222222333373<3F3K3]3b3l3q33333334 4m4r4|44444465;5E5J5\5a5k5p5555555557777777788>999:::::::; ;;;=@=J=O=a=f=p=u=<55555556j;<8>>????0071<1C1H1Z1_1f1k1112222$2)2L2Q2X2]2o2t2{222222233 3333333334444444455766666666677777777%8/8<<<========>4?D?  0 00!0(0-0=0C0I0O0U0_0000000001 1333333334444455'5b5u5555555R6^6p6y66666r77777777r88888888"919C9L9a99999999:B:G:W::::::::;2;A;S;\;q;;;;;Fw>>>>>>>>>>>>>??2?0(0000000011112Q2a2}22222)3I3R3W3`3e3n3s3|3333333344444+444444444Q5g5p5u5 66661666@6E66666666666667 777777777777777888#8j8o8y8~888888888889 9h9,:n:::::`;;=<<<<<"=5=<=F=W=h={====+>^>n>>>#????@00000)1.1>1S1\1u1~11111162;2E2J2\2a2k2p222223V4q444444 5@5E5W5555566J6g6}66666666677"7,717C7H7R7W7772878A8F8X8]8g8l88888889 9999990:5:E:d:::::::::; ;E;J;A77R9W999999999 :1:6:T::::;;$;);;;@;J;O;;;;;;;;;F=K=U=Z=l=q={==B?G?`1%171@1Q1111111112%222P2V22223'353G3P3a3333(4-4k4444 55555S6X6u6666R8W869f999:L:::::;;;i;;;;;;; <<<<#<*<1>3>>> ?;?@?w??p00#0900 1"1Q1V111111W2222213^3c3>5\5d5y5777::::::::;;}<<<<<============> >>>+>0>:>?>0?5???D?V?[?e?j?8C1H1R1W1i1n1x1}1$3)33383J3O3Y3^3,414;4@4R4W4a4f44444555$5:6?6I6N6`6e6o6t666666666L7Q7[7`7r7w7777777777788888888889 99!9+909999999999: ::!:&:0:5:j:o:y:~:::::::::::::r;;;;;;;;<3y>>>>>>>>>??$?Y?????????,^0|00000011 1%1X1]1g1l1~11111111111222E2V2_222222333333:4C4L4t444444455)5.585=5O5T5^5c5~5555555556/646>6C6U6Z6d6i666666666667777'7,7G777777777777777788,818;8@8R8W8a8f8888888889@9~99999999999: ::$:.:3:[:}:::::::::: ;";';1;6;H;M;W;\;};;;;;;;;;>>>>>$>*>0>6><>A>F>L>R>Z>`>f>l>r>w>}>>>>>>>>>>>>>?9?@?E?L?Q?c?h?o?t??????????2233K4[4q44444444455555556 6~6P7U7_7d7v7{777788'9C9z99999999: :: :=:G:::;;;;<<<%<*P02222Y4a4f4p4u4444455555555566667889N::;;O<t0001111)1.1122-2o2t2y22222333!3+303y3334546668y88S9999 :F:G>>y?????????k0r0y0000011N1a111$2+222353333 44 4%4/444c4|44455A55556{666617F7O7q77 8888D9~999@:g:::::;;@;j;;;;;; <<< I>N>X>]>o>t>~>>>G?????????0000001111123 333.333=3B3q346666666657:7D7I7[7`7j7o777778888y8~888888889!9+909B9G9Q9V999999::::B:;<5=1??22 344$4)4;4@4J4O4p4u444444444444455a6666666777#7(7Q7V7`7e7w7|777 888 82878A8F8o8t8~888888N9S9]9b9t9y99999999999Q;;;;;< <<<<<<<<= ===>>>>>>????B?????????00000000/222222233M3R3\3a3s3x333444445 55,5d5556A6o6666,7P7777+8f88888,93989>9D9J9P9V9\9b9h9n9t9z999999999999999w:::::::; ;;;,<1<;<@K>>N0W1111111112.232=2B2T2Y2c2h222333333333333 44444455667Z7z79':A:v::::;;;!;&;O;T;^;c;u;z;;;;<<<<<<<<<3=>>>>>>>>>?!?\?? 0;0@0J0O0a0f0p0u00000011,1W1\1f1k1}1111111122222223 30353?3D3V3[3e3j3333333334444444455555555N66W777777777 8888/848>8C89699:Z:_:i:n::::::[;`;j;o;;;;;B=_={==?00+0G00011-112"2,212C2H2R2W2t2L3333333334a4444444444546'7778F8K8U8Z8l8q8{88888 9H9:8:;w;;;;;;;;;P<<<<<< ====G=L=V=[=m=r=|==========>C>>>>>>>>>}????????????@0 000D0I0S0X0j0o0y0~000G1111111112^22223t334B444A5b555556666666666667%7_7d7n7s77777778R88819w999::`;e;o;t;;;;;<<<<<<<<==5=<=G=c===*>1>G>e>>>>????&?+?S?P000#050:0D0I0e0w00000000111,11161F1Y1^1c1w1|11111111111112 22 2C2N2X2^2}2222222222333333334494C4H4Z4_4i4n441556 66#6(62676\6666666667777778 8:::;;;;;;;;d<<<<<<<<<>>>>? ???a?`&0U1b133<3M3t355577$7A7T7q777718B8888K9V9p99999 :$:::G;a;r;|;;;;<4==+>0>:>?>Q>V>`>e>>>>>>>>>z????????pt0y000^1c1s1{111111111]4b4l4q4444444444444r5w5555555G6L6V6[6m6r6|66666666667!7+707B7G7Q7V7"9'9.939E9J9Q9V9999999997:<:C:H:Z:_:f:k::: ;; ;%;/;4;;;;;;;;;6 >>>,>1>;>@>|00000000L1Q1[1`1r1w111!2&20252G2L2V2[2293Z3_3i3n33333O4T4^4c4u4z44445l5q5{55555556 7%7/747F7K7U7Z77 88880858?8D89:;d;<==D>?4v5{56667'727_7q7~777788X8e8x888899-9D9K9|99999999999:::':,:9:C:I:P:V:[:b:q:v:::::::::::::::::; ;;#;);0;9;J;P;d;p;;;;;;;;!<'<1<7.>7>@>G>U>\>j>p>z>>>>>>>>>>>> ??|?????00 0Y00000001g1133c4I5l555 66v6|6666666666!737A7V7`777777$8Z8888888889-94989<9@9D9H9L9P999999::8:?:D:H:L:m:::::::::::6;<;@;D;H;< =='=2=???(5q5x5?7U7<:======>N>n>dB1d111112*2M223L3V3n333344N67777H8U8*9499:D:l:;t;;;11111 22272B2H22 334444 55 6$6+63686<6@6i666666666667 7$7(7,7777777778I8P8T8X8\8`8d8h8l888888@9A;N;g;;;;m>>?2?U?[?m??????0080K0V0[0m0w0|00000000111P1Z111111b2g2l2q2z22222223L3R3Z333334h4r4x444444444445 555%5+595>5555 6%6,61686=6K6666C7888C:O:::H;T;;;; <<<<<<<<<<=== =,=2=;=A=V=\=g=s=y===========>]>c>>>>>>>g?????  00060B0H0X0^0d0s000000000000000001 11111$1*1/1>1T1Z1b1g1o1t1|11111111112%212h2q2}2222333B3h3n33333@4J4u444445?5b5h5}5555566_6j6t666P8a8i8o8t8z888909|999999999: :!:>::l;t;;;;======= >>#>5>??,?j?q?~??P002222Y3h3367"9e999;=====>> >7>X>a>>>>>????@#0j0q0{0000000011111U111 233~445;5&<,< 45,566666 777S7^7h777777.8A888999:&:9:K:f:n:v:::::::::;>;O;c;;;F<<]==>>.>g>W?]?c?i?o?u?|?????????????????00 00"0(0.0D0K001-181>1D1J1R1111112'2?2^2o2t2z2222222222"344e5p5555555566%626:6@6F66666666666667 777$7-767D7R777 8838@8S8`889999:#:;:[:::: ;8;e;p;;;;;}>m???@H]172383N333K4}4455 66l667707\7%8888::<<==@?O?Ph!3w3399u;{;;;;;1B>L>>>>>>>>>?p?u?~??????`T00001113!3,4T4|44445567F7f7778809M9r9::0;y;<<\==>ph22'292K2q2222222233%373I3e3m3t55556_67789):9::; ;;O;[;j;v;;<4<<&==?t1222$2)2:2B2H2R2X2b2h2r2{2222222235!5'5i5o5~566678'9-9999~:::R;F~>?%?3???L 00`3w3666666666666 7q7}7788Y9_9d9j9{9P:;:;J;g;;;5999:F:024282<2H2L2`2h2l2t2x2222226666666777 7777 7$7(7,74787<7@7D7H7L7T7X7\7`7d7l7p7t7|77777777778> >4:$:,:4:<:D:L:T:\:d:l:t:|::::::::::d44(5D5H5h555556(6H6h66666667787X7d777778 8@8`888888899(9H9d9h9@X22333 3$3(3,333333335555 5$5(5,5054585<5@5D5H5L5P5T5555555Pl============> >>>$>,>4><>D>L>T>\>d>l>t>|>>>>>>>>>>>>>>>>?????? 1@77==Pl34 44444 4$4(4,4044484<4@4D4H4L4P4T4X4\4`4d4h4l4p4t4x4|444444444444444444444444444444555 55555 5$5(5,5054585<5@5D5H5L5P5T5X5\5`5d5h555556,686<6@6D6H6L6P6T6667777 7$7(7,7074787<7@7D7H7L7P7T7X7\7`7d7h7l7p7t7x7|7777777777777777777777777778 88888 8$8(8,888<8@8D8H8L8P8T8X8\8`8vibe.d-0.8.2/lib/win-i386/ssl.lib000066400000000000000000001530001324361747700162300ustar00rootroot00000000000000 ) BIO_f_ssl' _BIO_f_ssl ssleay32.dll BIO_f_sslBIO_new_buffer_ssl_connectI_BIO_new_buffer_ssl_connect ssleay32.dllBIO_new_buffer_ssl_connect BIO_new_ssl+ _BIO_new_ssl ssleay32.dll BIO_new_sslBIO_new_ssl_connect;_BIO_new_ssl_connect ssleay32.dllBIO_new_ssl_connectBIO_ssl_copy_session_idC_BIO_ssl_copy_session_id ssleay32.dllBIO_ssl_copy_session_idBIO_ssl_shutdown5_BIO_ssl_shutdown ssleay32.dllBIO_ssl_shutdownDTLS_client_method9_DTLS_client_method ssleay32.dllDTLS_client_method DTLS_method+ _DTLS_method ssleay32.dll DTLS_methodDTLS_server_method9_DTLS_server_method ssleay32.dllDTLS_server_methodDTLSv1_2_client_methodA_DTLSv1_2_client_method ssleay32.dllDTLSv1_2_client_methodDTLSv1_2_method3_DTLSv1_2_method ssleay32.dllDTLSv1_2_methodDTLSv1_2_server_methodA_DTLSv1_2_server_method ssleay32.dllDTLSv1_2_server_methodDTLSv1_client_method=_DTLSv1_client_method ssleay32.dllDTLSv1_client_method DTLSv1_method/_DTLSv1_method ssleay32.dll DTLSv1_methodDTLSv1_server_method=_DTLSv1_server_method ssleay32.dllDTLSv1_server_methodERR_load_SSL_strings=_ERR_load_SSL_strings ssleay32.dllERR_load_SSL_stringsPEM_read_SSL_SESSION=_PEM_read_SSL_SESSION ssleay32.dllPEM_read_SSL_SESSIONPEM_read_bio_SSL_SESSIONE_PEM_read_bio_SSL_SESSION ssleay32.dllPEM_read_bio_SSL_SESSIONPEM_write_SSL_SESSION?_PEM_write_SSL_SESSION ssleay32.dllPEM_write_SSL_SESSIONPEM_write_bio_SSL_SESSIONG_PEM_write_bio_SSL_SESSION ssleay32.dllPEM_write_bio_SSL_SESSIONSRP_Calc_A_param5_SRP_Calc_A_param ssleay32.dllSRP_Calc_A_param#!SRP_generate_client_master_secretW"_SRP_generate_client_master_secret ssleay32.dll!SRP_generate_client_master_secret#!SRP_generate_server_master_secretW"_SRP_generate_server_master_secret ssleay32.dll!SRP_generate_server_master_secretSSL_CIPHER_descriptionA_SSL_CIPHER_description ssleay32.dllSSL_CIPHER_descriptionSSL_CIPHER_find3_SSL_CIPHER_find ssleay32.dllSSL_CIPHER_findSSL_CIPHER_get_bits;_SSL_CIPHER_get_bits ssleay32.dllSSL_CIPHER_get_bitsSSL_CIPHER_get_id7_SSL_CIPHER_get_id ssleay32.dllSSL_CIPHER_get_idSSL_CIPHER_get_name;_SSL_CIPHER_get_name ssleay32.dllSSL_CIPHER_get_nameSSL_CIPHER_get_versionA_SSL_CIPHER_get_version ssleay32.dllSSL_CIPHER_get_version!SSL_COMP_add_compression_methodS _SSL_COMP_add_compression_method ssleay32.dllSSL_COMP_add_compression_method#!SSL_COMP_free_compression_methodsW"_SSL_COMP_free_compression_methods ssleay32.dll!SSL_COMP_free_compression_methods" SSL_COMP_get_compression_methodsU!_SSL_COMP_get_compression_methods ssleay32.dll SSL_COMP_get_compression_methodsSSL_COMP_get_name7_SSL_COMP_get_name ssleay32.dllSSL_COMP_get_name#!SSL_COMP_set0_compression_methodsW"_SSL_COMP_set0_compression_methods ssleay32.dll!SSL_COMP_set0_compression_methodsSSL_CONF_CTX_clear_flagsE_SSL_CONF_CTX_clear_flags ssleay32.dllSSL_CONF_CTX_clear_flagsSSL_CONF_CTX_finish;_SSL_CONF_CTX_finish ssleay32.dllSSL_CONF_CTX_finishSSL_CONF_CTX_free7_SSL_CONF_CTX_free ssleay32.dllSSL_CONF_CTX_freeSSL_CONF_CTX_new5_SSL_CONF_CTX_new ssleay32.dllSSL_CONF_CTX_newSSL_CONF_CTX_set1_prefixE_SSL_CONF_CTX_set1_prefix ssleay32.dllSSL_CONF_CTX_set1_prefixSSL_CONF_CTX_set_flagsA_SSL_CONF_CTX_set_flags ssleay32.dllSSL_CONF_CTX_set_flagsSSL_CONF_CTX_set_ssl=_SSL_CONF_CTX_set_ssl ssleay32.dllSSL_CONF_CTX_set_sslSSL_CONF_CTX_set_ssl_ctxE_SSL_CONF_CTX_set_ssl_ctx ssleay32.dllSSL_CONF_CTX_set_ssl_ctx SSL_CONF_cmd- _SSL_CONF_cmd ssleay32.dll SSL_CONF_cmdSSL_CONF_cmd_argv7_SSL_CONF_cmd_argv ssleay32.dllSSL_CONF_cmd_argvSSL_CONF_cmd_value_typeC_SSL_CONF_cmd_value_type ssleay32.dllSSL_CONF_cmd_value_typeSSL_CTX_SRP_CTX_free=_SSL_CTX_SRP_CTX_free ssleay32.dllSSL_CTX_SRP_CTX_freeSSL_CTX_SRP_CTX_init=_SSL_CTX_SRP_CTX_init ssleay32.dllSSL_CTX_SRP_CTX_initSSL_CTX_add_client_CA?_SSL_CTX_add_client_CA ssleay32.dllSSL_CTX_add_client_CASSL_CTX_add_client_custom_extO_SSL_CTX_add_client_custom_ext ssleay32.dllSSL_CTX_add_client_custom_extSSL_CTX_add_server_custom_extO_SSL_CTX_add_server_custom_ext ssleay32.dllSSL_CTX_add_server_custom_extSSL_CTX_add_session;_SSL_CTX_add_session ssleay32.dllSSL_CTX_add_sessionSSL_CTX_callback_ctrl?_SSL_CTX_callback_ctrl ssleay32.dllSSL_CTX_callback_ctrlSSL_CTX_check_private_keyG_SSL_CTX_check_private_key ssleay32.dllSSL_CTX_check_private_key SSL_CTX_ctrl- _SSL_CTX_ctrl ssleay32.dll SSL_CTX_ctrlSSL_CTX_flush_sessionsA_SSL_CTX_flush_sessions ssleay32.dllSSL_CTX_flush_sessions SSL_CTX_free- _SSL_CTX_free ssleay32.dll SSL_CTX_freeSSL_CTX_get0_certificateE_SSL_CTX_get0_certificate ssleay32.dllSSL_CTX_get0_certificateSSL_CTX_get0_param9_SSL_CTX_get0_param ssleay32.dllSSL_CTX_get0_paramSSL_CTX_get0_privatekeyC_SSL_CTX_get0_privatekey ssleay32.dllSSL_CTX_get0_privatekeySSL_CTX_get_cert_storeA_SSL_CTX_get_cert_store ssleay32.dllSSL_CTX_get_cert_storeSSL_CTX_get_client_CA_listI_SSL_CTX_get_client_CA_list ssleay32.dllSSL_CTX_get_client_CA_listSSL_CTX_get_client_cert_cbI_SSL_CTX_get_client_cert_cb ssleay32.dllSSL_CTX_get_client_cert_cbSSL_CTX_get_ex_data;_SSL_CTX_get_ex_data ssleay32.dllSSL_CTX_get_ex_dataSSL_CTX_get_ex_new_indexE_SSL_CTX_get_ex_new_index ssleay32.dllSSL_CTX_get_ex_new_indexSSL_CTX_get_info_callbackG_SSL_CTX_get_info_callback ssleay32.dllSSL_CTX_get_info_callbackSSL_CTX_get_quiet_shutdownI_SSL_CTX_get_quiet_shutdown ssleay32.dllSSL_CTX_get_quiet_shutdownSSL_CTX_get_ssl_methodA_SSL_CTX_get_ssl_method ssleay32.dllSSL_CTX_get_ssl_methodSSL_CTX_get_timeout;_SSL_CTX_get_timeout ssleay32.dllSSL_CTX_get_timeoutSSL_CTX_get_verify_callbackK_SSL_CTX_get_verify_callback ssleay32.dllSSL_CTX_get_verify_callbackSSL_CTX_get_verify_depthE_SSL_CTX_get_verify_depth ssleay32.dllSSL_CTX_get_verify_depthSSL_CTX_get_verify_modeC_SSL_CTX_get_verify_mode ssleay32.dllSSL_CTX_get_verify_modeSSL_CTX_load_verify_locationsO_SSL_CTX_load_verify_locations ssleay32.dllSSL_CTX_load_verify_locations SSL_CTX_new+ _SSL_CTX_new ssleay32.dll SSL_CTX_newSSL_CTX_remove_sessionA_SSL_CTX_remove_session ssleay32.dllSSL_CTX_remove_sessionSSL_CTX_sess_get_get_cbC_SSL_CTX_sess_get_get_cb ssleay32.dllSSL_CTX_sess_get_get_cbSSL_CTX_sess_get_new_cbC_SSL_CTX_sess_get_new_cb ssleay32.dllSSL_CTX_sess_get_new_cbSSL_CTX_sess_get_remove_cbI_SSL_CTX_sess_get_remove_cb ssleay32.dllSSL_CTX_sess_get_remove_cbSSL_CTX_sess_set_get_cbC_SSL_CTX_sess_set_get_cb ssleay32.dllSSL_CTX_sess_set_get_cbSSL_CTX_sess_set_new_cbC_SSL_CTX_sess_set_new_cb ssleay32.dllSSL_CTX_sess_set_new_cbSSL_CTX_sess_set_remove_cbI_SSL_CTX_sess_set_remove_cb ssleay32.dllSSL_CTX_sess_set_remove_cbSSL_CTX_sessions5_SSL_CTX_sessions ssleay32.dllSSL_CTX_sessionsSSL_CTX_set1_param9_SSL_CTX_set1_param ssleay32.dllSSL_CTX_set1_paramSSL_CTX_set_alpn_protosC_SSL_CTX_set_alpn_protos ssleay32.dllSSL_CTX_set_alpn_protosSSL_CTX_set_alpn_select_cbI_SSL_CTX_set_alpn_select_cb ssleay32.dllSSL_CTX_set_alpn_select_cbSSL_CTX_set_cert_cb;_SSL_CTX_set_cert_cb ssleay32.dllSSL_CTX_set_cert_cbSSL_CTX_set_cert_storeA_SSL_CTX_set_cert_store ssleay32.dllSSL_CTX_set_cert_store" SSL_CTX_set_cert_verify_callbackU!_SSL_CTX_set_cert_verify_callback ssleay32.dll SSL_CTX_set_cert_verify_callbackSSL_CTX_set_cipher_listC_SSL_CTX_set_cipher_list ssleay32.dllSSL_CTX_set_cipher_listSSL_CTX_set_client_CA_listI_SSL_CTX_set_client_CA_list ssleay32.dllSSL_CTX_set_client_CA_listSSL_CTX_set_client_cert_cbI_SSL_CTX_set_client_cert_cb ssleay32.dllSSL_CTX_set_client_cert_cb SSL_CTX_set_client_cert_engineQ_SSL_CTX_set_client_cert_engine ssleay32.dllSSL_CTX_set_client_cert_engine SSL_CTX_set_cookie_generate_cbQ_SSL_CTX_set_cookie_generate_cb ssleay32.dllSSL_CTX_set_cookie_generate_cbSSL_CTX_set_cookie_verify_cbM_SSL_CTX_set_cookie_verify_cb ssleay32.dllSSL_CTX_set_cookie_verify_cbSSL_CTX_set_default_passwd_cbO_SSL_CTX_set_default_passwd_cb ssleay32.dllSSL_CTX_set_default_passwd_cb(&SSL_CTX_set_default_passwd_cb_userdataa'_SSL_CTX_set_default_passwd_cb_userdata ssleay32.dll&SSL_CTX_set_default_passwd_cb_userdata" SSL_CTX_set_default_verify_pathsU!_SSL_CTX_set_default_verify_paths ssleay32.dll SSL_CTX_set_default_verify_pathsSSL_CTX_set_ex_data;_SSL_CTX_set_ex_data ssleay32.dllSSL_CTX_set_ex_data!SSL_CTX_set_generate_session_idS _SSL_CTX_set_generate_session_id ssleay32.dllSSL_CTX_set_generate_session_idSSL_CTX_set_info_callbackG_SSL_CTX_set_info_callback ssleay32.dllSSL_CTX_set_info_callbackSSL_CTX_set_msg_callbackE_SSL_CTX_set_msg_callback ssleay32.dllSSL_CTX_set_msg_callback" SSL_CTX_set_next_proto_select_cbU!_SSL_CTX_set_next_proto_select_cb ssleay32.dll SSL_CTX_set_next_proto_select_cb'%SSL_CTX_set_next_protos_advertised_cb_&_SSL_CTX_set_next_protos_advertised_cb ssleay32.dll%SSL_CTX_set_next_protos_advertised_cb!SSL_CTX_set_psk_client_callbackS _SSL_CTX_set_psk_client_callback ssleay32.dllSSL_CTX_set_psk_client_callback!SSL_CTX_set_psk_server_callbackS _SSL_CTX_set_psk_server_callback ssleay32.dllSSL_CTX_set_psk_server_callbackSSL_CTX_set_purpose;_SSL_CTX_set_purpose ssleay32.dllSSL_CTX_set_purposeSSL_CTX_set_quiet_shutdownI_SSL_CTX_set_quiet_shutdown ssleay32.dllSSL_CTX_set_quiet_shutdown SSL_CTX_set_session_id_contextQ_SSL_CTX_set_session_id_context ssleay32.dllSSL_CTX_set_session_id_contextSSL_CTX_set_srp_cb_argA_SSL_CTX_set_srp_cb_arg ssleay32.dllSSL_CTX_set_srp_cb_arg%#SSL_CTX_set_srp_client_pwd_callback[$_SSL_CTX_set_srp_client_pwd_callback ssleay32.dll#SSL_CTX_set_srp_client_pwd_callbackSSL_CTX_set_srp_passwordE_SSL_CTX_set_srp_password ssleay32.dllSSL_CTX_set_srp_passwordSSL_CTX_set_srp_strengthE_SSL_CTX_set_srp_strength ssleay32.dllSSL_CTX_set_srp_strengthSSL_CTX_set_srp_usernameE_SSL_CTX_set_srp_username ssleay32.dllSSL_CTX_set_srp_username#!SSL_CTX_set_srp_username_callbackW"_SSL_CTX_set_srp_username_callback ssleay32.dll!SSL_CTX_set_srp_username_callback'%SSL_CTX_set_srp_verify_param_callback_&_SSL_CTX_set_srp_verify_param_callback ssleay32.dll%SSL_CTX_set_srp_verify_param_callbackSSL_CTX_set_ssl_versionC_SSL_CTX_set_ssl_version ssleay32.dllSSL_CTX_set_ssl_versionSSL_CTX_set_timeout;_SSL_CTX_set_timeout ssleay32.dllSSL_CTX_set_timeoutSSL_CTX_set_tlsext_use_srtpK_SSL_CTX_set_tlsext_use_srtp ssleay32.dllSSL_CTX_set_tlsext_use_srtpSSL_CTX_set_tmp_dh_callbackK_SSL_CTX_set_tmp_dh_callback ssleay32.dllSSL_CTX_set_tmp_dh_callbackSSL_CTX_set_tmp_ecdh_callbackO_SSL_CTX_set_tmp_ecdh_callback ssleay32.dllSSL_CTX_set_tmp_ecdh_callbackSSL_CTX_set_tmp_rsa_callbackM_SSL_CTX_set_tmp_rsa_callback ssleay32.dllSSL_CTX_set_tmp_rsa_callbackSSL_CTX_set_trust7_SSL_CTX_set_trust ssleay32.dllSSL_CTX_set_trustSSL_CTX_set_verify9_SSL_CTX_set_verify ssleay32.dllSSL_CTX_set_verifySSL_CTX_set_verify_depthE_SSL_CTX_set_verify_depth ssleay32.dllSSL_CTX_set_verify_depthSSL_CTX_use_PrivateKeyA_SSL_CTX_use_PrivateKey ssleay32.dllSSL_CTX_use_PrivateKeySSL_CTX_use_PrivateKey_ASN1K_SSL_CTX_use_PrivateKey_ASN1 ssleay32.dllSSL_CTX_use_PrivateKey_ASN1SSL_CTX_use_PrivateKey_fileK_SSL_CTX_use_PrivateKey_file ssleay32.dllSSL_CTX_use_PrivateKey_fileSSL_CTX_use_RSAPrivateKeyG_SSL_CTX_use_RSAPrivateKey ssleay32.dllSSL_CTX_use_RSAPrivateKey SSL_CTX_use_RSAPrivateKey_ASN1Q_SSL_CTX_use_RSAPrivateKey_ASN1 ssleay32.dllSSL_CTX_use_RSAPrivateKey_ASN1 SSL_CTX_use_RSAPrivateKey_fileQ_SSL_CTX_use_RSAPrivateKey_file ssleay32.dllSSL_CTX_use_RSAPrivateKey_fileSSL_CTX_use_certificateC_SSL_CTX_use_certificate ssleay32.dllSSL_CTX_use_certificateSSL_CTX_use_certificate_ASN1M_SSL_CTX_use_certificate_ASN1 ssleay32.dllSSL_CTX_use_certificate_ASN1$"SSL_CTX_use_certificate_chain_fileY#_SSL_CTX_use_certificate_chain_file ssleay32.dll"SSL_CTX_use_certificate_chain_fileSSL_CTX_use_certificate_fileM_SSL_CTX_use_certificate_file ssleay32.dllSSL_CTX_use_certificate_fileSSL_CTX_use_psk_identity_hintO_SSL_CTX_use_psk_identity_hint ssleay32.dllSSL_CTX_use_psk_identity_hintSSL_CTX_use_serverinfoA_SSL_CTX_use_serverinfo ssleay32.dllSSL_CTX_use_serverinfoSSL_CTX_use_serverinfo_fileK_SSL_CTX_use_serverinfo_file ssleay32.dllSSL_CTX_use_serverinfo_fileSSL_SESSION_free5_SSL_SESSION_free ssleay32.dllSSL_SESSION_freeSSL_SESSION_get0_peer?_SSL_SESSION_get0_peer ssleay32.dllSSL_SESSION_get0_peerSSL_SESSION_get_compress_idK_SSL_SESSION_get_compress_id ssleay32.dllSSL_SESSION_get_compress_idSSL_SESSION_get_ex_dataC_SSL_SESSION_get_ex_data ssleay32.dllSSL_SESSION_get_ex_dataSSL_SESSION_get_ex_new_indexM_SSL_SESSION_get_ex_new_index ssleay32.dllSSL_SESSION_get_ex_new_indexSSL_SESSION_get_id9_SSL_SESSION_get_id ssleay32.dllSSL_SESSION_get_idSSL_SESSION_get_time=_SSL_SESSION_get_time ssleay32.dllSSL_SESSION_get_timeSSL_SESSION_get_timeoutC_SSL_SESSION_get_timeout ssleay32.dllSSL_SESSION_get_timeoutSSL_SESSION_new3_SSL_SESSION_new ssleay32.dllSSL_SESSION_newSSL_SESSION_print7_SSL_SESSION_print ssleay32.dllSSL_SESSION_printSSL_SESSION_print_fp=_SSL_SESSION_print_fp ssleay32.dllSSL_SESSION_print_fpSSL_SESSION_set1_id_contextK_SSL_SESSION_set1_id_context ssleay32.dllSSL_SESSION_set1_id_contextSSL_SESSION_set_ex_dataC_SSL_SESSION_set_ex_data ssleay32.dllSSL_SESSION_set_ex_dataSSL_SESSION_set_time=_SSL_SESSION_set_time ssleay32.dllSSL_SESSION_set_timeSSL_SESSION_set_timeoutC_SSL_SESSION_set_timeout ssleay32.dllSSL_SESSION_set_timeoutSSL_SRP_CTX_free5_SSL_SRP_CTX_free ssleay32.dllSSL_SRP_CTX_freeSSL_SRP_CTX_init5_SSL_SRP_CTX_init ssleay32.dllSSL_SRP_CTX_init SSL_accept) _SSL_accept ssleay32.dll SSL_acceptSSL_add_client_CA7_SSL_add_client_CA ssleay32.dllSSL_add_client_CA$"SSL_add_dir_cert_subjects_to_stackY#_SSL_add_dir_cert_subjects_to_stack ssleay32.dll"SSL_add_dir_cert_subjects_to_stack%#SSL_add_file_cert_subjects_to_stack[$_SSL_add_file_cert_subjects_to_stack ssleay32.dll#SSL_add_file_cert_subjects_to_stackSSL_alert_desc_string?_SSL_alert_desc_string ssleay32.dllSSL_alert_desc_stringSSL_alert_desc_string_longI_SSL_alert_desc_string_long ssleay32.dllSSL_alert_desc_string_longSSL_alert_type_string?_SSL_alert_type_string ssleay32.dllSSL_alert_type_stringSSL_alert_type_string_longI_SSL_alert_type_string_long ssleay32.dllSSL_alert_type_string_long SSL_cache_hit/_SSL_cache_hit ssleay32.dll SSL_cache_hitSSL_callback_ctrl7_SSL_callback_ctrl ssleay32.dllSSL_callback_ctrlSSL_certs_clear3_SSL_certs_clear ssleay32.dllSSL_certs_clearSSL_check_chain3_SSL_check_chain ssleay32.dllSSL_check_chainSSL_check_private_key?_SSL_check_private_key ssleay32.dllSSL_check_private_key SSL_clear' _SSL_clear ssleay32.dll SSL_clear SSL_connect+ _SSL_connect ssleay32.dll SSL_connectSSL_copy_session_id;_SSL_copy_session_id ssleay32.dllSSL_copy_session_id SSL_ctrl% _SSL_ctrl ssleay32.dllSSL_ctrlSSL_do_handshake5_SSL_do_handshake ssleay32.dllSSL_do_handshake SSL_dup#_SSL_dup ssleay32.dllSSL_dupSSL_dup_CA_list3_SSL_dup_CA_list ssleay32.dllSSL_dup_CA_listSSL_export_keying_materialI_SSL_export_keying_material ssleay32.dllSSL_export_keying_materialSSL_extension_supportedC_SSL_extension_supported ssleay32.dllSSL_extension_supported SSL_free% _SSL_free ssleay32.dllSSL_freeSSL_get0_alpn_selectedA_SSL_get0_alpn_selected ssleay32.dllSSL_get0_alpn_selected SSL_get0_next_proto_negotiatedQ_SSL_get0_next_proto_negotiated ssleay32.dllSSL_get0_next_proto_negotiatedSSL_get0_param1_SSL_get0_param ssleay32.dllSSL_get0_paramSSL_get1_session5_SSL_get1_session ssleay32.dllSSL_get1_sessionSSL_get_SSL_CTX3_SSL_get_SSL_CTX ssleay32.dllSSL_get_SSL_CTXSSL_get_certificate;_SSL_get_certificate ssleay32.dllSSL_get_certificateSSL_get_cipher_list;_SSL_get_cipher_list ssleay32.dllSSL_get_cipher_listSSL_get_ciphers3_SSL_get_ciphers ssleay32.dllSSL_get_ciphersSSL_get_client_CA_listA_SSL_get_client_CA_list ssleay32.dllSSL_get_client_CA_listSSL_get_current_cipherA_SSL_get_current_cipher ssleay32.dllSSL_get_current_cipherSSL_get_current_compressionK_SSL_get_current_compression ssleay32.dllSSL_get_current_compressionSSL_get_current_expansionG_SSL_get_current_expansion ssleay32.dllSSL_get_current_expansionSSL_get_default_timeoutC_SSL_get_default_timeout ssleay32.dllSSL_get_default_timeout SSL_get_error/_SSL_get_error ssleay32.dll SSL_get_errorSSL_get_ex_data3_SSL_get_ex_data ssleay32.dllSSL_get_ex_data$"SSL_get_ex_data_X509_STORE_CTX_idxY#_SSL_get_ex_data_X509_STORE_CTX_idx ssleay32.dll"SSL_get_ex_data_X509_STORE_CTX_idxSSL_get_ex_new_index=_SSL_get_ex_new_index ssleay32.dllSSL_get_ex_new_index SSL_get_fd) _SSL_get_fd ssleay32.dll SSL_get_fdSSL_get_finished5_SSL_get_finished ssleay32.dllSSL_get_finishedSSL_get_info_callback?_SSL_get_info_callback ssleay32.dllSSL_get_info_callbackSSL_get_peer_cert_chainC_SSL_get_peer_cert_chain ssleay32.dllSSL_get_peer_cert_chainSSL_get_peer_certificateE_SSL_get_peer_certificate ssleay32.dllSSL_get_peer_certificateSSL_get_peer_finished?_SSL_get_peer_finished ssleay32.dllSSL_get_peer_finishedSSL_get_privatekey9_SSL_get_privatekey ssleay32.dllSSL_get_privatekeySSL_get_psk_identity=_SSL_get_psk_identity ssleay32.dllSSL_get_psk_identitySSL_get_psk_identity_hintG_SSL_get_psk_identity_hint ssleay32.dllSSL_get_psk_identity_hintSSL_get_quiet_shutdownA_SSL_get_quiet_shutdown ssleay32.dllSSL_get_quiet_shutdown SSL_get_rbio- _SSL_get_rbio ssleay32.dll SSL_get_rbioSSL_get_read_ahead9_SSL_get_read_ahead ssleay32.dllSSL_get_read_ahead SSL_get_rfd+ _SSL_get_rfd ssleay32.dll SSL_get_rfdSSL_get_selected_srtp_profileO_SSL_get_selected_srtp_profile ssleay32.dllSSL_get_selected_srtp_profileSSL_get_servername9_SSL_get_servername ssleay32.dllSSL_get_servernameSSL_get_servername_typeC_SSL_get_servername_type ssleay32.dllSSL_get_servername_typeSSL_get_session3_SSL_get_session ssleay32.dllSSL_get_sessionSSL_get_shared_ciphersA_SSL_get_shared_ciphers ssleay32.dllSSL_get_shared_ciphersSSL_get_shared_sigalgsA_SSL_get_shared_sigalgs ssleay32.dllSSL_get_shared_sigalgsSSL_get_shutdown5_SSL_get_shutdown ssleay32.dllSSL_get_shutdownSSL_get_sigalgs3_SSL_get_sigalgs ssleay32.dllSSL_get_sigalgs SSL_get_srp_N/_SSL_get_srp_N ssleay32.dll SSL_get_srp_N SSL_get_srp_g/_SSL_get_srp_g ssleay32.dll SSL_get_srp_gSSL_get_srp_userinfo=_SSL_get_srp_userinfo ssleay32.dllSSL_get_srp_userinfoSSL_get_srp_username=_SSL_get_srp_username ssleay32.dllSSL_get_srp_usernameSSL_get_srtp_profiles?_SSL_get_srtp_profiles ssleay32.dllSSL_get_srtp_profilesSSL_get_ssl_method9_SSL_get_ssl_method ssleay32.dllSSL_get_ssl_methodSSL_get_verify_callbackC_SSL_get_verify_callback ssleay32.dllSSL_get_verify_callbackSSL_get_verify_depth=_SSL_get_verify_depth ssleay32.dllSSL_get_verify_depthSSL_get_verify_mode;_SSL_get_verify_mode ssleay32.dllSSL_get_verify_modeSSL_get_verify_result?_SSL_get_verify_result ssleay32.dllSSL_get_verify_resultSSL_get_version3_SSL_get_version ssleay32.dllSSL_get_version SSL_get_wbio- _SSL_get_wbio ssleay32.dll SSL_get_wbio SSL_get_wfd+ _SSL_get_wfd ssleay32.dll SSL_get_wfdSSL_has_matching_session_idK_SSL_has_matching_session_id ssleay32.dllSSL_has_matching_session_id SSL_is_server/_SSL_is_server ssleay32.dll SSL_is_serverSSL_library_init5_SSL_library_init ssleay32.dllSSL_library_initSSL_load_client_CA_fileC_SSL_load_client_CA_file ssleay32.dllSSL_load_client_CA_fileSSL_load_error_stringsA_SSL_load_error_strings ssleay32.dllSSL_load_error_strings SSL_new#_SSL_new ssleay32.dllSSL_new SSL_peek% _SSL_peek ssleay32.dllSSL_peek SSL_pending+ _SSL_pending ssleay32.dll SSL_pending SSL_read% _SSL_read ssleay32.dllSSL_readSSL_renegotiate3_SSL_renegotiate ssleay32.dllSSL_renegotiateSSL_renegotiate_abbreviatedK_SSL_renegotiate_abbreviated ssleay32.dllSSL_renegotiate_abbreviatedSSL_renegotiate_pendingC_SSL_renegotiate_pending ssleay32.dllSSL_renegotiate_pendingSSL_rstate_string7_SSL_rstate_string ssleay32.dllSSL_rstate_stringSSL_rstate_string_longA_SSL_rstate_string_long ssleay32.dllSSL_rstate_string_longSSL_select_next_proto?_SSL_select_next_proto ssleay32.dllSSL_select_next_protoSSL_set1_param1_SSL_set1_param ssleay32.dllSSL_set1_paramSSL_set_SSL_CTX3_SSL_set_SSL_CTX ssleay32.dllSSL_set_SSL_CTXSSL_set_accept_state=_SSL_set_accept_state ssleay32.dllSSL_set_accept_stateSSL_set_alpn_protos;_SSL_set_alpn_protos ssleay32.dllSSL_set_alpn_protos SSL_set_bio+ _SSL_set_bio ssleay32.dll SSL_set_bioSSL_set_cert_cb3_SSL_set_cert_cb ssleay32.dllSSL_set_cert_cbSSL_set_cipher_list;_SSL_set_cipher_list ssleay32.dllSSL_set_cipher_listSSL_set_client_CA_listA_SSL_set_client_CA_list ssleay32.dllSSL_set_client_CA_listSSL_set_connect_state?_SSL_set_connect_state ssleay32.dllSSL_set_connect_state SSL_set_debug/_SSL_set_debug ssleay32.dll SSL_set_debugSSL_set_ex_data3_SSL_set_ex_data ssleay32.dllSSL_set_ex_data SSL_set_fd) _SSL_set_fd ssleay32.dll SSL_set_fdSSL_set_generate_session_idK_SSL_set_generate_session_id ssleay32.dllSSL_set_generate_session_idSSL_set_info_callback?_SSL_set_info_callback ssleay32.dllSSL_set_info_callbackSSL_set_msg_callback=_SSL_set_msg_callback ssleay32.dllSSL_set_msg_callbackSSL_set_psk_client_callbackK_SSL_set_psk_client_callback ssleay32.dllSSL_set_psk_client_callbackSSL_set_psk_server_callbackK_SSL_set_psk_server_callback ssleay32.dllSSL_set_psk_server_callbackSSL_set_purpose3_SSL_set_purpose ssleay32.dllSSL_set_purposeSSL_set_quiet_shutdownA_SSL_set_quiet_shutdown ssleay32.dllSSL_set_quiet_shutdownSSL_set_read_ahead9_SSL_set_read_ahead ssleay32.dllSSL_set_read_ahead SSL_set_rfd+ _SSL_set_rfd ssleay32.dll SSL_set_rfdSSL_set_session3_SSL_set_session ssleay32.dllSSL_set_sessionSSL_set_session_id_contextI_SSL_set_session_id_context ssleay32.dllSSL_set_session_id_contextSSL_set_session_secret_cbG_SSL_set_session_secret_cb ssleay32.dllSSL_set_session_secret_cbSSL_set_session_ticket_extI_SSL_set_session_ticket_ext ssleay32.dllSSL_set_session_ticket_extSSL_set_session_ticket_ext_cbO_SSL_set_session_ticket_ext_cb ssleay32.dllSSL_set_session_ticket_ext_cbSSL_set_shutdown5_SSL_set_shutdown ssleay32.dllSSL_set_shutdownSSL_set_srp_server_paramE_SSL_set_srp_server_param ssleay32.dllSSL_set_srp_server_paramSSL_set_srp_server_param_pwK_SSL_set_srp_server_param_pw ssleay32.dllSSL_set_srp_server_param_pwSSL_set_ssl_method9_SSL_set_ssl_method ssleay32.dllSSL_set_ssl_method SSL_set_state/_SSL_set_state ssleay32.dll SSL_set_stateSSL_set_tlsext_use_srtpC_SSL_set_tlsext_use_srtp ssleay32.dllSSL_set_tlsext_use_srtpSSL_set_tmp_dh_callbackC_SSL_set_tmp_dh_callback ssleay32.dllSSL_set_tmp_dh_callbackSSL_set_tmp_ecdh_callbackG_SSL_set_tmp_ecdh_callback ssleay32.dllSSL_set_tmp_ecdh_callbackSSL_set_tmp_rsa_callbackE_SSL_set_tmp_rsa_callback ssleay32.dllSSL_set_tmp_rsa_callback SSL_set_trust/_SSL_set_trust ssleay32.dll SSL_set_trustSSL_set_verify1_SSL_set_verify ssleay32.dllSSL_set_verifySSL_set_verify_depth=_SSL_set_verify_depth ssleay32.dllSSL_set_verify_depthSSL_set_verify_result?_SSL_set_verify_result ssleay32.dllSSL_set_verify_result SSL_set_wfd+ _SSL_set_wfd ssleay32.dll SSL_set_wfd SSL_shutdown- _SSL_shutdown ssleay32.dll SSL_shutdown$"SSL_srp_server_param_with_usernameY#_SSL_srp_server_param_with_username ssleay32.dll"SSL_srp_server_param_with_username SSL_state' _SSL_state ssleay32.dll SSL_stateSSL_state_string5_SSL_state_string ssleay32.dllSSL_state_stringSSL_state_string_long?_SSL_state_string_long ssleay32.dllSSL_state_string_longSSL_use_PrivateKey9_SSL_use_PrivateKey ssleay32.dllSSL_use_PrivateKeySSL_use_PrivateKey_ASN1C_SSL_use_PrivateKey_ASN1 ssleay32.dllSSL_use_PrivateKey_ASN1SSL_use_PrivateKey_fileC_SSL_use_PrivateKey_file ssleay32.dllSSL_use_PrivateKey_fileSSL_use_RSAPrivateKey?_SSL_use_RSAPrivateKey ssleay32.dllSSL_use_RSAPrivateKeySSL_use_RSAPrivateKey_ASN1I_SSL_use_RSAPrivateKey_ASN1 ssleay32.dllSSL_use_RSAPrivateKey_ASN1SSL_use_RSAPrivateKey_fileI_SSL_use_RSAPrivateKey_file ssleay32.dllSSL_use_RSAPrivateKey_fileSSL_use_certificate;_SSL_use_certificate ssleay32.dllSSL_use_certificateSSL_use_certificate_ASN1E_SSL_use_certificate_ASN1 ssleay32.dllSSL_use_certificate_ASN1SSL_use_certificate_fileE_SSL_use_certificate_file ssleay32.dllSSL_use_certificate_fileSSL_use_psk_identity_hintG_SSL_use_psk_identity_hint ssleay32.dllSSL_use_psk_identity_hint SSL_version+ _SSL_version ssleay32.dll SSL_version SSL_want% _SSL_want ssleay32.dllSSL_want SSL_write' _SSL_write ssleay32.dll SSL_writeSSLv23_client_method=_SSLv23_client_method ssleay32.dllSSLv23_client_method SSLv23_method/_SSLv23_method ssleay32.dll SSLv23_methodSSLv23_server_method=_SSLv23_server_method ssleay32.dllSSLv23_server_methodSSLv2_client_method;_SSLv2_client_method ssleay32.dllSSLv2_client_method SSLv2_method- _SSLv2_method ssleay32.dll SSLv2_methodSSLv2_server_method;_SSLv2_server_method ssleay32.dllSSLv2_server_methodSSLv3_client_method;_SSLv3_client_method ssleay32.dllSSLv3_client_method SSLv3_method- _SSLv3_method ssleay32.dll SSLv3_methodSSLv3_server_method;_SSLv3_server_method ssleay32.dllSSLv3_server_methodTLSv1_1_client_method?_TLSv1_1_client_method ssleay32.dllTLSv1_1_client_methodTLSv1_1_method1_TLSv1_1_method ssleay32.dllTLSv1_1_methodTLSv1_1_server_method?_TLSv1_1_server_method ssleay32.dllTLSv1_1_server_methodTLSv1_2_client_method?_TLSv1_2_client_method ssleay32.dllTLSv1_2_client_methodTLSv1_2_method1_TLSv1_2_method ssleay32.dllTLSv1_2_methodTLSv1_2_server_method?_TLSv1_2_server_method ssleay32.dllTLSv1_2_server_methodTLSv1_client_method;_TLSv1_client_method ssleay32.dllTLSv1_client_method TLSv1_method- _TLSv1_method ssleay32.dll TLSv1_methodTLSv1_server_method;_TLSv1_server_method ssleay32.dllTLSv1_server_methodd2i_SSL_SESSION3_d2i_SSL_SESSION ssleay32.dlld2i_SSL_SESSIONi2d_SSL_SESSION3_i2d_SSL_SESSION ssleay32.dlli2d_SSL_SESSION ssl3_ciphers- _ssl3_ciphers ssleay32.dll ssl3_ciphersMf"sWI{7ّ_SSL_CTX_get0_certificate!n'_SSL_CTX_set_next_protos_advertised_cb!!_SSL_CTX_set_psk_client_callback!_SSL_get_shared_ciphers!_SSL_set_srp_server_param!_SSL_set_verify_depth!0 _SSL_set_wfd!= _SSL_write!_SSL_CTX_set_info_callback_SSL_CTX_use_psk_identity_hint_SSL_get_session_SSL_get_shutdown_SSL_SESSION_set_timeout_SSL_set_info_callback _SSL_set_wfd=_SSLv23_server_method_SSLv2_client_method,vG!enU8_BIO_ssl_copy_session_id!_SRP_Calc_A_param!z_SSL_CIPHER_get_name!_SSL_CONF_CTX_set_ssl_ctx! _SSL_CTX_remove_session!_SSL_CTX_set_client_cert_cb!Q_SSL_get_error! _SSL_set_bio!`_SSL_set_info_callback!_SSL_shutdown!B_SSL_use_psk_identity_hint!_d2i_SSL_SESSION_SSL_callback_ctrli_SSL_CTX_set_verify_depthP_SSL_CTX_use_PrivateKey_ASN1^_SSL_get_current_compression_SSL_get_peer_finished@_TLSv1_client_method gK=.rQ|__BIO_new_ssl_connect!_PEM_read_bio_SSL_SESSION!e_SSL_CTX_set_srp_username!_SSL_SESSION_get_timeout! _SSL_dup!_SSL_load_client_CA_file! _SSL_pending!_DTLS_server_method/_SSL_CONF_CTX_new _SSL_free_SSL_get_srp_g_SSL_SESSION_get_ex_new_index_SSL_SESSION_get_timeout_SSL_set_psk_client_callback_SSL_set_ssl_method_SSL_SRP_CTX_free 3uQ&Cd"_SSL_COMP_get_compression_methods!_SSL_CTX_SRP_CTX_free!&_SSL_CTX_sess_set_remove_cb! _SSL_get_servername_type!"_SRP_generate_server_master_secret_SSL_CTX_set_client_cert_engineX_SSL_CTX_use_PrivateKey_filef_SSL_CTX_use_RSAPrivateKey_file}_SSL_do_handshake_SSL_export_keying_material_SSL_get1_session_SSL_get_certificate_SSL_get_privatekeyG_SSL_is_server_SSL_set_tmp_dh_callback#_SSL_srp_server_param_with_usernameGcY{A)Il7(_SSL_CTX_set_default_passwd_cb_userdata!x_SSL_CTX_use_serverinfo!_SSL_SESSION_new! _SSL_accept!,_SSL_alert_type_string_long!]_SSL_set_cert_cb!e_SSL_set_state!_SSL_CTX_set_client_cert_cbQ_SSL_CTX_set_srp_strength _SSL_get_wbio_SSL_set_generate_session_id _SSL_set_rfd_SSL_set_tlsext_use_srtp _SSLv23_client_methodaC̓7kx%S _BIO_f_ssl!_SSL_CONF_CTX_new!!_SSL_CTX_set_psk_server_callback!_SSL_CTX_set_timeout!_SSL_CTX_set_tmp_dh_callback!,_SSL_SESSION_get_ex_data!_SSL_get_session!_SSL_get_verify_depth!_SSL_set_shutdown!_SSL_set_trust!& _SSL_want!_ERR_load_SSL_stringsY_PEM_write_bio_SSL_SESSIONs_SSL_CTX_add_client_CA2_SSL_get0_next_proto_negotiated _SSL_read_SSL_rstate_string6_SSL_SESSION_get0_peer_SSL_set_SSL_CTXO_SSL_state_stringT[;,xҹ Jl_PEM_read_SSL_SESSION!__SSL_CTX_set1_param!_SSL_CTX_set_srp_password!_SSL_CTX_set_srp_strength!_SSL_CTX_set_tmp_ecdh_callback!4_SSL_CTX_set_tmp_rsa_callback!<_SSL_get_certificate!_SSL_get_current_expansion!_DTLSv1_2_method<_SSL_CONF_CTX_set1_prefix_SSL_copy_session_id_SSL_extension_supported_SSL_get_shared_sigalgs_SSL_get_verify_depth _SSL_get_wfd_SSL_renegotiate"_SSL_use_RSAPrivateKey_ASN1|j7$Z|uJ_SSL_CTX_add_client_custom_ext!9"_SSL_CTX_set_cert_verify_callback!:#_SSL_CTX_set_srp_username_callback!_SSL_CTX_use_serverinfo_file!_SSL_alert_desc_string_long!O_SSL_library_init! _SSL_peek!_SSL_set_psk_client_callback!_SSLv2_client_method!_SSL_alert_desc_stringH_SSL_cache_hitd _SSL_clear!_SSL_COMP_get_compression_methods _SSL_CTX_new_SSL_CTX_set_session_id_context_SSL_CTX_set_verifyJ_SSL_get_ssl_method _SSL_pending-EY;m#}_SSL_CTX_sess_get_remove_cb!_SSL_set_SSL_CTX!O_SSL_set_tmp_dh_callback!_TLSv1_2_method!$_SSL_add_file_cert_subjects_to_stack?$_SSL_CTX_set_srp_client_pwd_callback_SSL_renegotiate_abbreviated'_SSL_set_srp_server_param_SSLv3_server_method}VH!.f<s_SSL_CTX_flush_sessions!b_SSL_alert_type_string!V_SSL_get_peer_cert_chain!2_SSL_get_read_ahead!f_SSL_use_PrivateKey_ASN1!g_SSL_use_RSAPrivateKey_file!_TLSv1_1_client_method!_d2i_SSL_SESSION!_SSL_CTX_get_ssl_method_SSL_get_servernamey_SSL_SESSION_get_compress_id_SSL_SESSION_get_id_SSL_set_read_ahead_SSL_set_verify_depth0_SSL_use_certificate_file_SSLv2_server_method _SSLv3_method>w-gZI_DTLSv1_method!N_SSL_CTX_load_verify_locations!_SSL_CTX_set_cookie_verify_cb!h_SSL_CTX_set_trust!D_SSL_SESSION_get_ex_new_index!_SSL_alert_desc_string!H_SSL_export_keying_material!_BIO_new_ssl_connect_SSL_CIPHER_get_id_SSL_CTX_set_srp_password&n`xG;T"_SSL_CTX_set_default_verify_paths!'_SSL_CTX_set_srp_verify_param_callback! _SSL_CTX_set_verify!J_SSL_get_srp_username!_SSLv3_client_method!_PEM_read_bio_SSL_SESSIONe_SSL_certs_clearo_SSL_check_chaint_SSL_CIPHER_get_version_SSL_CTX_get_client_CA_list_SSL_CTX_sess_get_get_cb!_SSL_CTX_set_next_proto_select_cb _SSL_get_rbioa_SSL_get_verify_callback_SSL_set_verify_result6_SSL_SRP_CTX_init& u^nBP-5_SSL_CONF_CTX_set_ssl!_SSL_alert_type_stringV _SSL_connect_SSL_CTX_remove_session_SSL_CTX_sess_set_new_cb_SSL_CTX_set_alpn_protos_SSL_CTX_use_serverinfo_file _SSL_get_fd!_SSL_get_read_aheadf_SSL_get_selected_srtp_profileq_SSL_get_servername_type_SSL_SESSION_newV;lcu*K _DTLS_method!*_SSL_CONF_CTX_set1_prefix!_SSL_CTX_set_default_passwd_cb!p_SSL_CTX_use_PrivateKey_file!f_SSL_SRP_CTX_init!&_SSL_get_verify_result!_SSLv2_method!_DTLSv1_methodN#_SSL_add_dir_cert_subjects_to_stack6_SSL_CIPHER_description_SSL_CONF_CTX_finish_SSL_CTX_load_verify_locations_SSL_CTX_sessions_SSL_CTX_use_certificate_SSL_get_error_SSL_get_finished%_SSL_set_cert_cbe_SSL_set_session_secret_cbLnW!{c/>_DTLSv1_2_client_method!5_DTLSv1_2_server_method!A_SSL_CONF_CTX_clear_flags!_SSL_CTX_set_cipher_list!C_SSL_SESSION_print!_SSL_copy_session_id!_SSL_do_handshake!_SSL_get_ex_new_index!_SSL_get_shutdown!_SSLv23_method!_SSLv23_server_method!_DTLSv1_2_client_method5_SSL_CONF_CTX_clear_flags_SSL_CTX_set_trustD_SSL_CTX_use_certificate_ASN1_SSL_dup_CA_list_SSL_has_matching_session_id_SSL_set_ex_data_SSL_set_purposeXu8B,fL!_SSL_CTX_use_PrivateKey!W_SSL_callback_ctrl!i_SSL_use_PrivateKey!a_TLSv1_1_method!_i2d_SSL_SESSION!!_SSL_CIPHER_get_name_SSL_CONF_cmd_value_type_SSL_CTX_sess_get_remove_cb#_SSL_CTX_use_certificate_chain_file_SSL_get0_param_SSL_renegotiate_pending/_SSL_SESSION_get_time_SSL_set_cipher_listj2ѰVsb+I<_DTLSv1_2_method!<_SSL_CTX_sess_set_get_cb! _SSL_clear!_SSL_get_SSL_CTX!_SSL_use_RSAPrivateKey!u_TLSv1_2_server_method!_DTLSv1_client_methodH_SSL_CTX_add_server_custom_extA_SSL_CTX_get_quiet_shutdown_SSL_CTX_set_srp_cb_arg_SSL_get_SSL_CTX_SSL_get_verify_result_SSL_library_init_SSL_SESSION_set_ex_data _SSL_use_RSAPrivateKeyu _SSL_want_SSLv23_methodYvmH*c6_SSL_CONF_cmd_argv!_SSL_CTX_get0_param!u_SSL_CTX_get_ex_data! _SSL_CTX_set_client_cert_engine!X_SSL_CTX_use_certificate_file!_SSL_certs_clear!o_SSL_get_ex_data! _SSL_get_srp_N!_SSL_get_verify_mode! _BIO_new_ssl _PEM_read_SSL_SESSION__SSL_CIPHER_find_SSL_CTX_check_private_keyV_SSL_CTX_set_tlsext_use_srtp$_SSL_CTX_use_PrivateKeyW_SSL_get_quiet_shutdownZ_SSL_load_error_strings  _SSL_shutdownB_SSL_use_PrivateKey_filent*UgG9_BIO_ssl_shutdown!_SSL_CTX_add_session!I_SSL_CTX_get_info_callback!_SSL_CTX_get_ssl_method!_SSL_CTX_sess_get_get_cb! _SSL_CTX_use_RSAPrivateKey_ASN1!u_SSL_get_peer_finished!@_SSL_get_ssl_method!_DTLSv1_2_server_methodA _ssl3_ciphers&_SSL_CTX_get_verify_depth _SSL_CTX_set_generate_session_id_SSL_SESSION_get_ex_data_SSL_SESSION_set1_id_context_SSL_set_session_ticket_ext_SSL_use_psk_identity_hintkOuC+:\_SSL_get0_param!_SSL_get_default_timeout!_SSL_get_peer_certificate!9_TLSv1_method!_SSL_CIPHER_get_bits_SSL_CTX_use_serverinfo_SSL_get_current_expansion_SSL_SESSION_free_SSL_set_tmp_rsa_callback _SSLv2_method%bth.=IR!_SSL_COMP_add_compression_method!_SSL_CONF_cmd!_SSL_CTX_get_verify_depth!_SSL_CTX_set_purpose!_SSL_cache_hit!d_SSL_get_current_compression! _SSL_new!_SSL_set_alpn_protos!Z_SSL_set_tmp_rsa_callback!_SSL_set_verify!+_SSL_state_string!T_TLSv1_1_server_method! _DTLS_method* _SSL_CONF_cmd_SSL_CTX_get_verify_mode_SSL_CTX_SRP_CTX_free&_SSL_get_srtp_profiles_SSL_select_next_protoC _SSL_set_fd_TLSv1_server_methodf[u3N!C_SSL_CTX_get0_privatekey!{ _SSL_CTX_use_RSAPrivateKey_file!}_SSL_SESSION_set1_id_context!_SSL_add_client_CA!0_SSL_check_private_key!y_SSL_add_client_CA0_SSL_alert_desc_string_longO _SSL_COMP_add_compression_method"_SSL_COMP_set0_compression_methods_SSL_CONF_CTX_free&_SSL_CTX_set_next_protos_advertised_cb_SSL_CTX_set_ssl_version_SSL_get_cipher_list_SSL_get_ciphers_SSL_get_ex_data _SSL_get_verify_modej Ox3\>_DTLSv1_client_method!H#_SSL_COMP_free_compression_methods!_SSL_CONF_CTX_free!_SSL_CTX_add_server_custom_ext!A_SSL_CTX_callback_ctrl!O_SSL_CTX_sess_set_new_cb!_SSL_CTX_set_cert_store!3_SSL_get_rbio!a _SSL_get_rfd!l_SSL_get_verify_callback!_SSL_load_error_strings! _SSL_rstate_string!6_SSL_set1_param!J_SSL_set_cipher_list!j_SSL_CTX_set_cipher_listC _SSL_CTX_set_psk_client_callback _SSL_CTX_set_psk_server_callback\B)tgN7_DTLS_server_method!/_SSL_CIPHER_find!_SSL_CIPHER_get_version!_SSL_COMP_get_name!_SSL_CONF_CTX_finish!_SSL_CTX_get_verify_mode!_SSL_SESSION_free!_SSL_SESSION_get0_peer!_SSL_get_client_CA_list!_SSL_renegotiate_abbreviated!'_SSL_rstate_string_long!< _SSL_set_fd!_SSL_set_psk_server_callback! _SSL_version!_SSLv23_client_method!_i2d_SSL_SESSION!_SSL_alert_type_string_long]_SSL_CTX_callback_ctrlO_SSL_CTX_set1_paramE!m4a=R_SSL_CONF_CTX_set_flags!"_SSL_CTX_set_next_proto_select_cb!_SSL_get_srp_g! _SSL_get_wfd!_SSL_set_msg_callback!_SSL_set_tmp_ecdh_callback!_TLSv1_server_method!"_SRP_generate_client_master_secret_SSL_CTX_sess_set_remove_cb !_SSL_CTX_set_cert_verify_callback:_SSL_CTX_set_cookie_generate_cb`!_SSL_CTX_set_default_verify_paths_SSL_CTX_set_tmp_ecdh_callback4#_SSL_get_ex_data_X509_STORE_CTX_idx_SSL_new_SSL_set_accept_stateT6yH&Vle#_SRP_generate_server_master_secret!_SSL_CTX_set_quiet_shutdown! _SSL_CTX_set_session_id_context!_SSL_CTX_set_srp_cb_arg!_SSL_CTX_set_verify_depth!P _SSL_free!_SSL_set_accept_state!T_SSL_set_client_CA_list!p_SSL_set_ex_data!_SSL_set_purpose!_SSL_set_session_ticket_ext!_SSL_CTX_set_cookie_verify_cbh&_SSL_CTX_set_srp_verify_param_callback _SSL_dup_SSL_set1_paramJ_SSL_use_RSAPrivateKey_file_TLSv1_2_client_methodk>S*I]_SSL_CTX_free!i_SSL_CTX_set_alpn_protos!%_SSL_CTX_set_srp_client_pwd_callback!_SSL_SRP_CTX_free! _SSL_check_chain!t_SSL_dup_CA_list!_SSL_extension_supported!$_SSL_srp_server_param_with_username!G _SSL_accept,_SSL_get_version_SSL_set_state _SSL_statePdr}"ZF2_SSL_CTX_get_ex_new_index!_SSL_CTX_get_quiet_shutdown!$_SSL_CTX_use_certificate_chain_file!$_SSL_add_dir_cert_subjects_to_stack!6_SSL_get_version!_SSL_CTX_set_srp_username_SSL_SESSION_print_SSL_set_connect_statew_SSL_set_session_ticket_ext_cb{a*o9VI"_PEM_write_bio_SSL_SESSION!s _SSL_CTX_new!_SSL_CTX_set_msg_callback!_SSL_SESSION_get_compress_id!_SSL_SESSION_set_time!_SSL_get_finished!%_SSL_get_quiet_shutdown!Z_SSL_get_servername!y_SSL_set_debug!~_SSL_use_PrivateKey_file!n_SSL_COMP_get_name_SSL_CTX_get_cert_store'_SSL_CTX_set_default_passwd_cb_userdatax_SSL_CTX_use_RSAPrivateKeyn_SSL_get_client_CA_list_SSL_get_current_cipher_SSL_get_default_timeoutG)yX5pe̯ _BIO_new_ssl! _SSL_CTX_sess_get_new_cb!_SSL_CTX_set_cert_cb!-!_SSL_CTX_set_generate_session_id!_SSL_CTX_use_certificate_ASN1!_SSL_SESSION_print_fp!_SSL_get1_session!_SSL_is_server!_SSL_set_generate_session_id!_SSL_set_session_ticket_ext_cb!_SSLv3_method!_SSLv3_server_method!_SSL_CTX_get0_certificaten_SSL_CTX_set_alpn_select_cb&_SSL_CTX_set_msg_callback_SSL_CTX_SRP_CTX_init,_SSL_CTX_use_RSAPrivateKey_ASN1uj~8qVH,_DTLS_client_method!$_SSL_CTX_add_client_CA!2_SSL_CTX_set_ex_data!_SSL_CTX_set_tlsext_use_srtp!$_SSL_SESSION_set_timeout!%_SSL_add_file_cert_subjects_to_stack!? _SSL_ctrl!_SSL_get_info_callback!+_SSL_get_sigalgs!_SSL_get_wbio!_SSL_select_next_proto!C_SSL_set_quiet_shutdown! _SSL_state!P_SSL_state_string_long!Z_ssl3_ciphers!&_DTLS_client_method$_SSL_CONF_cmd_argv_SSL_CTX_get_ex_data_SSL_CTX_set_client_CA_listJ+FrT8a _SSL_CTX_SRP_CTX_init!,_SSL_CTX_sessions!_SSL_SESSION_get_time!_SSL_get0_alpn_selected!_SSL_get_current_cipher!_SSL_CONF_CTX_set_flags_SSL_CTX_add_client_custom_ext9_SSL_CTX_get_ex_new_index_SSL_CTX_get_timeout_SSL_SESSION_print_fp_SSL_set_client_CA_listp_TLSv1_2_server_method{$FSoa6_SSL_CTX_ctrl!] _SSL_connect! _SSL_get0_next_proto_negotiated!_SSL_set_session_id_context!_SSL_check_private_keyy_SSL_CONF_CTX_set_ssl_ctx _SSL_CTX_get0_privatekey{_SSL_CTX_set_cert_cb-_SSL_CTX_set_tmp_rsa_callback<_SSL_get_ex_new_index_SSL_get_psk_identity_hintS_SSL_SESSION_set_time_SSL_state_string_longZ_TLSv1_1_method]#?{0Km_BIO_new_buffer_ssl_connect!_DTLSv1_server_method!S_SSL_CTX_check_private_key!V_SSL_CTX_get_timeout! _SSL_CTX_set_cookie_generate_cb!`_SSL_CTX_use_PrivateKey_ASN1!^_SSL_CTX_use_certificate!_SSL_SESSION_set_ex_data! _SSL_get_srtp_profiles!_SSL_set_session!_SSL_set_tlsext_use_srtp! _SSL_set_verify_result!6_SSLv2_server_method!_SSL_CTX_get_client_cert_cb_SSL_CTX_get_info_callback_SSL_CTX_sess_get_new_cb_SSL_CTX_set_cert_store3S-rGd;~!_SSL_CTX_get_cert_store!_SSL_SESSION_get_id!_SSL_get_shared_sigalgs!_SSL_use_certificate!_TLSv1_client_method! _SSL_CTX_set_default_passwd_cbp_SSL_get_peer_certificate9_SSL_get_srp_username _SSL_peek_SSL_set_debug~_TLSv1_1_server_method _TLSv1_methodj#3VwB^_SSL_CTX_get_client_cert_cb!_SSL_CTX_get_verify_callback!_SSL_CTX_use_RSAPrivateKey!n$_SSL_get_ex_data_X509_STORE_CTX_idx! _SSL_get_fd!!_SSL_get_privatekey!G_SSL_get_srp_userinfo!_SSL_renegotiate!"_SSL_renegotiate_pending!/_SSL_set_srp_server_param_pw!_SSL_use_certificate_ASN1!_DTLSv1_server_methodS_PEM_write_SSL_SESSIONl_SSL_get0_alpn_selected_SSL_get_psk_identityM _SSL_get_rfdl_SSL_get_sigalgs_SSL_get_srp_userinfo6}FncS&#_SSL_COMP_set0_compression_methods!_SSL_CTX_set_alpn_select_cb!&_SSL_CTX_set_client_CA_list!J_SSL_get_psk_identity!M_SSL_has_matching_session_id!_SSL_CTX_get0_paramu_SSL_CTX_set_quiet_shutdown_SSL_get_shared_ciphers_SSL_get_srp_N_SSL_load_client_CA_file_TLSv1_2_method+ xl9bXJ_PEM_write_SSL_SESSION!l_SSL_CIPHER_get_id!_SSL_CONF_cmd_value_type!_SSL_get_selected_srtp_profile!q_BIO_ssl_copy_session_id_BIO_ssl_shutdown_SRP_Calc_A_paramz_SSL_CTX_set_ex_data_SSL_CTX_set_purpose"_SSL_CTX_set_srp_username_callback_SSL_CTX_set_tmp_dh_callback,_SSL_get_peer_cert_chain2 _SSL_set_bio`_SSL_set_msg_callback_SSL_set_trust&p#2i\MA_SSL_CTX_get_client_CA_list!_SSL_CTX_set_info_callback!_SSL_get_psk_identity_hint!S_SSL_set_read_ahead!_SSL_use_certificate_file!_TLSv1_2_client_method! _BIO_f_ssl"_SSL_COMP_free_compression_methods_SSL_CONF_CTX_set_ssl _SSL_CTX_ctrl]_SSL_CTX_set_timeout_SSL_get_info_callback+_SSL_rstate_string_long<_SSL_set_psk_server_callback_SSL_set_shutdownϔaPxZ3i Dڄ_ERR_load_SSL_strings!Y#_SRP_generate_client_master_secret!_SSL_CTX_use_psk_identity_hint!_SSL_get_cipher_list!_SSL_get_ciphers! _SSL_read! _SSL_set_rfd!_SSL_set_session_secret_cb!_SSL_set_ssl_method!_SSL_use_RSAPrivateKey_ASN1!| _SSL_ctrl_SSL_CTX_add_sessionI_SSL_set_session_SSL_set_session_id_context_SSL_set_srp_server_param_pw_SSL_use_PrivateKeya_SSL_use_PrivateKey_ASN1g _SSL_version _SSL_writelHWd!-|;_SSL_CIPHER_description!_SSL_CIPHER_get_bits!_SSL_CTX_set_ssl_version!_SSL_set_connect_state!w_BIO_new_buffer_ssl_connect_SSL_CTX_flush_sessionsb _SSL_CTX_freei_SSL_CTX_get_verify_callback_SSL_CTX_sess_set_get_cb_SSL_CTX_use_certificate_file_SSL_set_alpn_protosZ_SSL_set_quiet_shutdown_SSL_set_tmp_ecdh_callback_SSL_set_verify+_SSL_use_certificate_SSL_use_certificate_ASN1_SSLv3_client_method_TLSv1_1_client_methodvibe.d-0.8.2/lib/win-i386/ssleay32.dll000066400000000000000000010310001324361747700170750ustar00rootroot00000000000000MZ@ !L!This program cannot be run in DOS mode. $Ebݞ1ݞ1ݞ1"U1ݞ1 C1ݞ1 A1ݞ1 ~1 ݞ1 1ݞ1CC1ݞ1ݟ1ܞ1C~13ݞ1CB1ݞ1 E1ݞ1C@1ݞ1Richݞ1PELX!  D 0p@@)P0H@%68@0.text `.rdatah0@@.data 1.@.rsrcH0@@.reloc%@& @B33ɸ6|$E̸6̸v SWjp6D$3D$U WD$$jPGj00|$\$uE؉\$GW)0tW)@t Wqu'hh7hhj_[ÃtLJV3Uo4ʼnl$=!zt@-,#h\h7hhjJV jjj wG6 GXGPG4="="U-!=wx$0WG0E3GXWǀP"!G4!GDHG4@WG0G4!D$PWWELJG40!GDW83lt#@!!GDEG4G4@!GDGXD@$u?@ u6W6,P!"GDEG4@D$G4P!GD%OXDP ǁptLunufˆuatAH@tOGXD@ t%QOXDA E;D$G4`!GDWk8G4`!GDdtuWXtueDNttS uNuFF u=Wǂ .kGXG4!ǀP!GDGXL$ǀGXG4p!xWIIW5GXǀP!G4!GDoGXtWt GDG4!=Wu&GX!"GDEȉO4G@d@8G4!t2GDGXx GX3oD9xtW;;3ۋOX|tIGpdPRPPFWЋGX|4P|l$-WNGX!"GDEȉO4GXuh!h!W +ltG4GD@!!GDEG4W.G4!GDcW*G4P!GD=GXWDG@d@Ѓmh!h!W ZGG4!GDj"@dW@Ѓ)G@dp,p(h!h!WlG4!t)OX!"E‰PGDiGXǀPGDPGXuWO(GDG4!=0t=@t=` LJG$t jjWӃ %=S<G u(1 h@V(wl$D$ USVPGh h7j{hj3Ph h7jl$EuhuGXSVj$Pjry"h h7jvhj3h% h7jzhj3stuEuGXSVjPuKxh2 h7jphj3)=uHuGXSVjPu1,h? h7h1hj32=,t)=+t"hc h7jDhj+jU3D$u hK h7jAhjpPwP/\$ShQ h7jDhjP>@tSh7x6@Pt6 3ɍT$w1RAB@|GX\$j Pj@D$DPSS{ h_ 9D$Qt$(UtrL$D$;s t$s|$l$$U ;h h7hhj(VjS2 h h7jAhjZ|$$l$8rh h h7j h h h7hhj2|$$l$$VjS tt h CXxtmSu`PVjSn US?<=h h7hhjxVjS$ t PUuo>uNh h7jAhjC4t Wt?hU_^][ËthP(_^][̸ VSUVt$03WD$PD$(F4L$L$=!u 9 { =!uF4!FL$,Qh@jh!dž @0h!VЃ|$, N@dž L$\$ #}hh7h AL$N ЉAd@8tO;~9uNjjj VT$$ z +͍G!;rrhh7h( 3;thh7h hj%=uu uD$F |!u _^][ oFXoBL$à L$9A+L$;}hh7hi Q ~(Flt u2+PWQV6Lu;uFl; jVI( T$F׉T$@d@8 +Ń}h$h7hBD$ +‰T$;sh+h7hvh7h7h4jjj V F\St$P H|F\t1SPVу hDh7D$(h4PrI;ustI:u't>A:But1A:Bu t$A:BthMh7D$(h4D$(T$FӉT$8u 蛉^@8t0h\h7hhj7D$$F#Ku?KFT$\$ +Ń}Dhqh7hhfh7h hjD$$F:B T$uhxh7D$/hcˍG+;} h:D$PWRVRL$σ~lL$tn3t$Xa~)Wt$P9Xt-t$G8;|hh7D$/hL$\$ 9A+L$;} h3L$$~I<t@;|ωL$;|hh7h\>|9+PD$PV u#hh7hhj6AFXj PjV~l/>#hD$ @0D$ lPt$ APAPhVЃD$FlǀL$ D$uBVPVzȃL$ uhh7D$(h#Ftt PsFxt PcgFtSFxFXǀth"h7hT3~Gd$SȃL$;)tC;| FXFXuh/h7hU 3Ʌ~T$$I;tA;|;h:h7D$/hV~lunubtRP3ۅ~A$SD$3ɋ~D$$;tA;|C;|3~lMu3FXL$D$ۋt PtD$|$uhoh7D$PjDVD$MJu#hth7hhjDtGHVуuh}h7D$Phydy_F^][ FVvPVcwȃuhh7D$(h FXD33@th3PD$(,~It$$UV V@ E@ EE ;|݋t$4t FXD$t FXDNXDF@d@8t u V訝t]>|#D$PV~uhh7h#39\$(C?hh7hD$2hjt$jV F4L$t Q3_^][ ø@3ĉ$SUV$L$,Q3t$ hD$,3D$0D$D$(Fjh!h!@0VЃ9l$, FXV@T$ WDO L$9pt%tu9hh7h_ @@U8LxA=~Q=tJ B ȉT$A;t.uhh72h T$ك0}hh73h D$@j0P D$jWPPSKl$0}S3"]3É\$ډT$X"؍A""t63D$3׍H"ȍB"‹T$" "ӿҊډT$ӍwL""D: ȈL:Nt l$T$Wt$ j0t$FHdPA VЋj0At$$AU hh7h Cl$~:B T$th+ h7h 3t>G;t7u%h3 h7hhj'({ T$t tD +ȋD@D$t8u @D$u9hE h7h FXHD$uhL h7h u]t/t$WuWtW]"h[ h7h jWR ؅u#hc h7hhj q t$St$ +hk h7jhj(Sv# FXHFXǀHtUS>FHdWt$PA VЋWAt$$.D$(u hI h7jAhjD$`th FXLUUD$0WP<Ul$,U&WD$u hd mD$thn h7h7D$,tK8uCpoPt$# u h h7jhj&h} h7h9MD$$u h L$AL$B;t%h h7hhj2t$$RQt$ Wuh h7jVF<@D$W@ h h7j+hjUjUt$Pt$ b h h7j+hjtt$,t$Ut$0FXLFXWǀLFt$(HdPI VыWAt$8%,<h^ h7jhj{*(B D$T$E;t#h h7hhj%O~#h h7hhj$u#h h7hhjURD$xP+P$jPh$P$PVӋ؍$hP\$H0v h h7jDhjMwu&h h7hhj&{sM]D$ $SP$Pl6D$$P$$jP$ D$0t P)Ut$u h h7jAhjdt PLxLtuh 덋Ft$ Hd$PPA VЋD$A$hPD|$M1 B ȉT$A;~h' h72h[jQR u h+ h7jhj7P9ht Pu%9u h9 PVLAh@ h7jDhjh2 h7/hs3D$8 O3l$tt jPuh[ h7xPjAKWh_ h7jDD$tPWxSD$ PD$(PD$HPD$ PV |$ 9l$u{t$B<B<BB<8PFWjV@d@@ЃFV@d@DЃ_^̸FSUVW|$,4`!GOF4^Vg9NXXD‰F4(F4VEF4hhV VXFDEF4DFXuǀFV@d@Ѓ3FjV@d@ЃRVH F43F@dp$p hhV迡FXF4 ~lFXt/ǀPFXF4FX@@tǀPǀPV'XxV @F4@`FXuhhV ~lEF4džF4@8=@t =PyF$t jjVӃ %=r~<Fu*谲qh@U觲[n<3VULjV2Va{F4@4FXFD FXǀ8VoF<tPF<FXu VNjVFDdžF(~lt @XF X@<Wj VӃ vhhd8hihj^jPjV F4Ehhd8hhj-"hhd8jDhjF4Nt U$t WhVӃ _^][ÐSYYYZZ[t[[[[\]Z]r]\_     3ɸ7|$E̸7̋T$V3WJx0+t 葱tW輰W躰uh hd8jDhTj_^̸S\$ U(CXDH @L$$D$ $ VWT$ u%h hd8jDhj蚯3_^][ËrD$D$u+S=h hd8h0VD$@th hd8h};`th hd8h~"+t 4GWWv D$(8WjD$(t΃th hd8htƃ<th hd8hL$,D$$CXD@ ЉD$u!ƃ!hFXL$QFjh1h0@0VЋFX |$tRFXǀTFX@u^YÃt.hhd8hhSjj jV貋 ^Y3^Y̸ ֱSUVt$D$ W~4F<@D$<t;uyDu t tjV tJF8th@8t0hhd8hhj9_F4^][ thhd8h VFtUFFNX@d@8t3<u@ rj QjVgnFN<@dx<yl$GFXoGoG~(t3 XD_"#t, ~h+hd8jDSHPW> F@d@8tHF\vh5hd8jDGF\PWF\ jGPVݺPVSȃuh@hd8hIOut P謦3ɍAL$ G3ۃ~/$SxCG;|l$Vhehd8hD$PD$@PGPV@ȃu9t$jV{hlhd8jDhj諦 F4_^][ ËF+QjV@d@@Ѓ F4FV@d@DЃ_^][ Vt$L$Qh@jFhhV@0ЃЃ|$'FXW@tǀTshg hd82hN@9thm hd82hIyA A G;ths hd82hkAWP 8uhy A<<t_@Vуuh hd8xqhHy9h hd8jAPh!jWjVˆ F4_^ø_^̸SUVW|$0L$$Q33\$3GjhQhP@0WЃD$9\$$GXXGX@u3ǀTGX9xtWa_^][à t4j jW h@hd8hhj7 G4Y?~@D@t4j jW…hIhd8hhj G4w@het$Ul$0u)hQhd8jAhj誣G43FL$tPL$ v`h]hd8QϢ u h_mt$VPC L$  L$3҅t\$OX2`B;r3FG@d@8F ȋL$(+D$;D$v6j2jWXhrhd8hhj腢 G43@D@T@`@p@|ǀǀǀǀǀǀǀǀǀǀǀQVW Wu3jPjWhhd8jAhj8 G43Xt$(F ȋL$(+D$;D$tlj2jW谂hhd8hhjݠ G43j2jWzh}hd8hhhj觠 G433tzE;F ;nSD$$t$$Pj蜢 D$9t$ Pt$4蕟tzL$(3ۉ\$;rGXL$ǀXGX\GXlthPHGX3L$0luSthU_^][hhd8jAhj蒟\$$l$03G4j2jW*hhd8hhjW\$0 l$03G4o j2jW܀hhd8j hj \$0 l$03G4$ u>j2jW蕀hhd8hhjž\$0 l$03G4語\$j2jWIhhd8hhjvl$P 3G4̸F@3ĉ$S$D$8UPD$D$8D$0D$D$(D$4D$ CL$XQ@0jhAh@SЃ|$T@KXVW@ D@ D$t(hhd8hhj臝D$( ut:vLt PΜǀLCXǀT{@|$@tP连ǀtP誜ǀt2P艝ǀuKXD@D$D$ЁD$2T$0}hhd8h G ȁ~hhd8D$(h E;~hhd8h< QWquhhd8D$(jAz +D$T$0  S`j hhd8jDhjEJ X}hhd8h G ȍEL$;~hhd8h^ jQWq葚 u"hhd8jhj躚3 |$+ƃ}hhd8h~ G ȋ+ƉL$;~hhd8h]L jQW u hn|$+ƃ}h hd8h FʼnL$+G;~hhd8h_ jQW蜙 u h|$+ƃ}h!hd8h G ȋ+ƉL$;~h)hd8h\o jQWt$4# u h/|$D$PS+uh6hd8hs D$t"p \t$EwpD2t$D@ uhQhd8D$ h aЉT$4uhUhd8jA}h[hd8h` G ȍEL$;~hahd8jy5 rqQWT$@ Bu hgT|$+ƃ}hmhd8h G ȋ+ƉL$;~huhd8jx rQWt$4sL$@ Au h{|$+D$p ΘVt$ 肙KXDA E;hhd8D$ h* L$4D$4Yhhd8jDAȘt$ uhhd8j}hhd8hG ȍEL$;~hhd8jnjQWqAL$, Au h|$+ƃ}hhd8hEG ȋ+ƉL$;~hhd8jljQWΕL$, A u h7|$+ƃ}hhd8hG ȋ+ƉL$;~hhd8jmjQWt$4WL$, Au h|$+xuhhd8h\t$ Fx\QF x 0H%u 9ÖD$ pV貖jV襖D$ Vp 蓖Vx(茖hhd8hwhj軔dD$ tp ٕt$%tpD趕t$3L$ D$ }Vhhd8jhj3%hhd8hwhhd8hYǔD$,uh!hd8jA}h2hd8hjWS$ uh:hd8hzpGPuhAhd8D$Ph:CP肕uhGhd8jnL$,VQ7uhKhd8jKV9t$0 KXt$DA t,V谓=~hVhd8D$<h6V芓t$$<D$8wM;PVWt$0t$ ^F+D$(D$tp 茓t$(@t"ft$3t$$t$0<L$4t$@D$8{t$0D$H袒D$$.C@d@8tB}hhd8hVWD$DSP=o \D$<}hhd8h67Gt$ 誑;V;NFD$8C@d@8ot$(D$`D$D$D$0D$DjP|$0ujPD$LPא CXj PD$LP轐 CXj PD$LP蝐 Vt$DD$LP胐 D$(Pt$ D$LPk ~xD$(L$D$ȋD$0HL$D$0'D$pD$dUWQPjrŏyhhd8D$3jv{hhd8D$3j{hhd8jDhj蒏D$(Pjt$@D$LP諏 CXj PD$LP葏 ~jCXj PD$LPu ~Nt$(D$DVt$DP[ ~4t$D$HUWPhhhd8D$3j{hhd8D$Pjhhd8hhihd8h2h_hd8jAhj苎thhd8D$ hUD$thhd8h7t$ɎD$HP_hhd8D$/hhjt$jSo t$$t$pD$8t P蝏D$ t P謍t$8XV芎D$4t P蝎D$DP辍C4_^$][3U̸VVt$ L$ Qh@jFhhV@0Ѓȃ|$ SUW}hhd82h~@/G_ G G G ؃C;th hd82hlmyDpP tt P,tQPQPAj1D$u:h hd8xPjAhjCWjVm F4_][^YD$tPxǀh, hd8SO u+h. hd8jAhj蜋F4_][^YSWP襓 jˋPFDPFHPSW5_][^Y̸&SUl$$L$VWQE3jh1h0@03UD$4\$(|$0Ѓ9\$ BMX@ !D@ t   thhd8 jr}@D$u hhd8jAhjyG G ȉL$A;thhd82h73҅IB;!7G G ։T$$;VD$0|$0Pj'؃ >9D$,|$SW(tiL$3ۋT$$|$,;y|$WUzhhd8hhjV_hhhd82h-hhd8*j hhd82hhhd82ht PjW>D$Sډ EX|$DA tA t D$!D$DWb3WS(x|$yh%hd8hEXD2x;th/hd8/hh3hd8jC~jP^+ǃ<t P~t PΈh?hd8jCjP3~Ft P胈ǀ3ۋD$8hhd8h3hjVjUh E4t$]S ht$#D$,_^][ǁT_^][Vt$L$QjjFhah`V@0Ѓ|$t=~4j2jVhh hd8hhjD F4^ø^̸Vt$ WPND$Ad@8t dž D$PA0h Njh!h VЃD$|$S^UCd@8tZNXdž @uDF\8uǁT][_^hhd8jrhj eKFX@th͋V@T$,;T$$B ؁uu2Q@8t%hhd8hhj1FT$,;L8ZCFXT$,ooBl$, Fll$,]E\$l$, >|~htutfD$@0D$lPjAPAPhVЃ'D$uD$,PVl$,C;XD4PH̓r;ust=:t.A:BtA:Bt A:B;Jhlr;ust-:ukt"B:Cu^tB:CuQtB:CuD\$Flhhd8h hhd8jDhj裂hhd8hhj/{a\$xDvjV>SXDt$0HPWl$8 UVl$4؃u&hhd8hhjx/FL$@d@8u AACA2C A&CA Fjj@LD$4VNSPy(h3hd8hhj/hNt @~lt9;Ct(hFhd8hhj/FXDF@d@8uV5>D$,@~lD$,t6;t(hghd8hXhj/袀uYFX|$ \$$WD$0SPVhhd8hhjRF4][_^t(hnhd8hWhj/Q/ȃThvhd8hhjx/;9D$,(hhd8jshj2h)hd8hhj/r[hhd8h,hj/M6hhd8h hj-D$@H% ȉFWjV` F4][_^̸ֆVt$D$D$~4pujDtCHVуyF^ujPjV=` F43^FVqF4~4qWD$PD$PV y_F^FuV|$t2D$ t*PVF4q>,tt$V'u!3h hd8jjhj3}D$ t P~D$t P(~t Vu7>FXu"j)jVǀX#_ _^ǀXF4r~4ruaFXF4sXu3PVEhu4h hd8jDhj|jPjV^ F43_^ËFV@d@DЃ_^̸l趄@3ĉ$hSUV$|3WD$l$~4l$ yFN<@dyx~jUWD$0Pj0_}؃ h hd8jwhj|{ >~L$YFj0HdD$(PPA VЋj0AD$8PzFSjV@d@@Ѓ F4FV@d@DЃ$x_^][3̂lh hd8jDhjzSQ{e D$uj jVQ\h hd8h uP ؃ FXt(@tPzulh Szu h hd8jhjz Uyu&h hd8jhjyUy| UsWyЃ D$T$u SyT$&h hd8jhjyUoy% FRWHdPA Vt$ jWA|FXtU3'yuxÈ_GPux Uxuj jVZh hd8hYu4yl$}]SySy؅LyD$u(h? hd8jAhjxh hd8PD$_^[éu3>_^[éu3>_^[éu3>_^[éq3>_^[ËX n  %>M1Ůڮ2G]įװBdűݱ\²>Uk/ ///////////////////////////////////////// / ////////////////////// //!"#$%&'()/*///+,-/.̋L$D$Hȶ$D$ B ËD$ B(ËD$ B0ËD$ ËD$ <ËD$ 8ËD$ lËD$ hËD$ p3/?iO    ̋L$Vt$WAtw~<$ujG@t@PZ@~U_^ËD$t*P\tOt Q\w_^hh\CjhjZ_3^hh\CjBhjY3_^t$Yu hh\CjhjY3_^ËG$t PYw$_^hh\CjBhjY3_^ËD$u hh\Cj+hj`Y3_^SPSZ؃u!hh\Cjhj0Y3[_^u4S;Zu'SZhh\Cj+hjX3[_^ËG,t PY_,[_^hh\CjBhjX3_^ËD$_^ËD$u_0^Ã|$0t#hh\ChEhjgX3_^Ã;u,o_o@o@ A(^o_o@o(^@ ËD$@_^Átt PVWT$džtʍyAu+ρwJʍyAu+σr7RVthh\CjDhjcW3_^hh\Chehj@W3_^ËD$_džp^ËD$d_^ËD$_^t$t$PPk_^t$PP޽ _^ËD$G4_^jt$t$ WI_^jt$WG _^jt$t$ W!_^jt$W _^t$t$W _^t$v Wؙ _^t$jt$ Wb_^t$jt$ WL_^ÃuHUt$=U_^Ëu 9L$uH D$_^ËthPTdž_^Ã|$t$Wt _^跤_^Ã|$t$Wt _^襛_^t$W_^t$Wť_^ÍIFi۷H(ʻ/ȹڹȺ#Moں'=Oew!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! !!!!!!!!!!!!! !!!!!!!!!!!!!!!!!! Vt$~XVFXt V?FXt V?FX t P-SFXHt P}SFXLt P{TFXlthPRFXxt PRFX|t VaFX$t PRVbJh,vXRvXRFX^̋D$}s @@+3̸0ZD$4j}h@ ȍD$PL$J≮ZSUVW|$33\$3틇t' Qt$(Z _^][ÍD$PWbA8EщT$t?L$PBAHtHtHuhD$L$JuՋT$?GXDH |tD$ _^]f[ËD$ t.ut uT$tFT$FT$?ut ftFtF`t&?|/L$ut AFutBF?| t@F_^][Wh h\Ch,_P u_Vh,jWXt$Wfև(fևLV~XIFV@Ѓ^_̸}jt$t$t$̋D$x8t@X u3̋L$t"D$P%=t3ˈQjt$t$t$ Vj00t$FXt Vt$FXt$t$ǀFjV@4ЋЃu.NXu"t$Ft$Ft$@4jVЃN^ËFX^ǀ̋D$x t@Xt3ǀVt$FXtOuFu=Vw0u-FXF40ǀFXFX^3^VW|$ tPNLJ|$tFt$t>v_3^hh\CVM tVt$PeV _^Vt$~,~4@N0u$jjVN0/FX tE^ËFXtFV@<Ѓu# ^uFjjj@4jVЃF0t~0u FXt 3^F0^Vj00t$FXt VANXtpF;Fuhyut$t$jV/ȃ~aFXHjjj vFL~AVFp}FX FX^H@t$Ft$j@8VЃȋ^̋T$BXt*Dt BI$@d@8t0uËÃ̸fT@3ĉD$|$S$UV$WFXt0H`T HUD$(L$(LPLȃL$3҉L$0D$ D$G$D$sN%UHt$D$@Vt$PSt$,D$PhPSL$@t$$VD$D$(PKD$GGCD$,UPM Xt$D$,t$PJ ;t$ D$,hPJ t$$D$(jVPJ jD$PD$0PJ jD$,SPJ wD$,wPhJ jD$,SPVJ D$(UPLt$D$,t$PJ ~kt$ D$,hPJ ~Qt$D$,SPI ~;D$PD$,SPI ~$D$D$D$(PIVD$D$(PI$_^][3-QĀ̋D$sw_<$3ø øøø(ø)ø*ø+ø,ø-ø.ø/øsøVÃç   t$ jjt$t$ ̸O@3ĉ$SUV$WD$NXD@ D$ |D$uhChhxCJ FXt$,t D$.hhxChF (PGD$UPzuhhxCjDGtPIdžWaIu9hhxChhjF3$_^][3zNĐËFX u hhxCh@ENX FX tJFXWf@^Xt D$;hhxChE uhhxCjACP`FD$UPxyuh'hxCjD tPFHdžtW)Hu h4FXWf@T^X`|$t t$EFXUxD$eEt$G|$ t=NXDJ t BH;|t zOt$GЃ$T$$t>!t9D$ (L$( oT$T$$:ȋFXL$ʍT$,2L$mL$(ȍxL$D$ PFXT$,T$0;t~h`hxCjDD$4PcDUt$0SXL|$ jFPD$Pt$t$j@t$t_^Ul$EXxt u ]L$AS\$VW|$3EX|t WSP,? |_^[]W|$GX|tCV3GX|t P@|ߋGX|>GXǀ|^_̸hfF@3ĉD$dD$lSUl$xVD$3D$4D$AWPf>D$D$,PP>$3ۃ\$_+ʼnD$Ft*D$|$di΋ˋ\$󪋼$D$j?PD$(P=VD$tPD$4P=D$,pPD$@P=D$8j @XPD$LP=D$Dj @XPD$XP=j$PD$dP=Hj@PD$@Pj=D$ pPD$LPU=jD$lPD$XPD=D$@$j;~$D$TPD$@P,=+PD$`PUDD$hNhCjDhj9/_^[$37ĔD$ U~8u ~PFXjjV$Fd^LF8tvhVjShjjЃKC CK ȉO u ;Vf;fFX;!\$FPO;vjQQVw MNLD$F8@EO9GO FjV@dЋl$&--P-؃@vhChhC0 /o;70%u C;0%uUSD$(WPl$ )_ o )_oFL$`jQV@d@Ѓ xtSD$dUP/ tl$T$D9GvhhChT$xߋt@D9G^X ss h@sQm/CCC D$@9GGFPL$AL$ \$hmhCh hj,3uuu ?FWjV hhC2hh$hCjk}hhChghAhC h*Vh+hCh6hhCh%hhChhhChhj+WjV hhCh hj*$]_^[32Ĕ̸(2@3ĉD$$T$4Vt$0t$T$ D$FXu$Vu^L$$3R2(ËT$ S\$8t tu |$Dt4t/hhCjDhj3*[^L$$32(UWu~~X`vrL$H\3~"FX`vI*GFXE`ߋFX39`vVXO\CNX;`r_][^L$$3{1(Ã~u9VcR0t)F VЃuhC $I~X Ft ~8uVI?ttǀ|nXt ?F0;u\`PL$u_TD$XډT$+]9_B_t't$GW MEGOKut$ T$\$@9U BV$2FX`8\9`FX8]8^8_Ndtvh\VjPj6RуVPhFX\OVYV8F VЃFXVF=jV9*j V+*_][^L$$3/(ÅtrVOudFXuX>~P`rG\u>t4t+ujdjVGn VNXXTUǁXNdtvhFXVjTPj6jуtD$l$El$t Ph@VՃ FX||d\$@F0?uG 8iDH*%GFdtvhVjw j6jЃFXVǀ _][^L$$3-(Ã`2~(F4%u*u%~$ džEF(F4F VЃgFXWVF:;jV'j V~'_][^L$$3[,(hhChhm8hZhC2jihhC(hSN03_][^L$$3+(hhChau{FXhFhCPhj#WhCD$@jP&D$HPhCS& ^0p]z83_][^L$$3a+(hhC/hhhChhhChhhC/jgh)hChhj #_][^L$$3*(Ë~NXtVtMF4t=|= ~ t.= !'=!| _][ǁ^L$$3[*(hmhChhUhCjDhJhChF3G_][^L$$3)(V݀GFjV8P$j V8P$_][^L$$3)(VJ0tPuKuBhhCjd hj!WjV7 _][^L$$3J)(Ë\$H~Z;_G G_GSPt$ j) |$Lu8)__u,F8GtNXu V _][^L$$3((G3FL$4_][^3((̸ (S\$[ UW|$oX}uWu _][ ËM+у|$(Vu T$u[tDtC|>ED$$8u0H@ ȁ|EVt$(Pl6T$ UEEGLGPG@d@8t1u9t$,t'^_]3[ ~;~_P+]Éu ^_][ ;|_P+]Éu ^_][ ËGPOLD$$E‰D$;t'D$$PQt$l6D$ GLD$D$$EM+M;~&hhCjDhjU^_][ Ã`uG@d@8u\$D$(;L;OD$Ij00O t`D$+GPD$D$(PQ! D$~YG@d@8u;|;~]+u _P^G_][ hhChhj\$u tG@d@8uD$$u W$ ^_][ SVt$ t$F@d@0Ѓ؁>u FuXx^|$utPptFXL$ǀFXFXFXuFV@<Ѓ^[^[SUVt$nXFdvhChhC FXVdǀd3F0t>~u8F VЃLu%hhChhj^][W|$ ;}&hhChhj_^][ÃT$l$t3FXh+PRVȃFX_^]d[ËT$;u%tNIdA8u V_^][+;jGȍ+QPRV~W;tT$u u +݋l$뼋FXǀ;utF@d@8u V _^+][ËFX_d^][VW|$ wXh;D$t;D$t l;D$S00$jӋOt'GPQ !h[hChhjK;t0~+돋G@d@8t dž[_^džGX[G_p^hOhCjhj_^VWhfhDj j 3D$9t$t`\|$t;9uQtIAuhphDj j ZuhrhDW _^_^h{hDj j !L$|$t`\Vt3t$;tu%B;XsrL$B2B3Jt$hhDj j t V^S\$ Vt$ WF@~hChhD# NXS4PPFX<@~hChhD NXS4PPmFXF @dSjV@@ЋD$$ F4FV@d@DЃ_^[t$'ut$Vt$WF@dx8FXuzCA tǀ@uWjȃ u hhDjAhjV3_^ËFXFXFX_FL^VW|$ G@d@8EȋGXusSuuSVjȃ u hhDjAh#j3_^ËGXGX_^Vt$VXDtBF4FSW@dtx(X,x X$FHdPSWAVЋNX_8[^S\$ Ul$ VWu UIu3vtupl=u^=,tR=RtK=+t==St6t>t=u2WUtt u W_^][̋D$HAw>$0ø*ø3ø-ø,øPø(ø+ø.Ë̸@3ĉ$$SD$ $UV$3@W$D$+ljD$;shDhh0D @vh@Dhh0D D$4؍\$4?؍\$;v +3҃+D$WjSt$0 D$;$L$ы\$$+T$(@ T$+Ӊt$ t$ÉT$D$0\$ ͋D$(E2T$22 ؊2D$2 ˋD$2ыL$0ҊL$""1Bʋ+33 3#щT$T$BT$;$rt$$\$3҅t5l$,$ƃ F*+ϋ33 B3#;r֋$_^][3ĨUT@3ĉ$PED$LE D$TES] D$8ED$0E$D$HD$L(D$D$Vut$lW@rh\Dhh0D t$X P =t;@$PD$0D$D$P0D$0D$T$TD$ $PfD$00 D$-HtnHtfo Dǃ+Ѝ$o@ @ f@o@f@;r;s 6A;rt$$P$Pփt$|$tOD$P$jPL$4 T$It$$jPL$4 T$"},t$L;?t$@$+Pt$S$P$Pd ~!V$P$PG $P3_^[$P3 ]3ɅtX r>fo Dǃ+Ѝ$o@ @ f@o@f@;r;sd$ jA;rW$P$P ZV$P$P 9D$dPt$d$P;L$| tD$d$P/$`_^[3 ]t$P@ tt 2`w̋L$SUl$A];v]3[ËE VWD+3p3L$ +֋33 33OJ##+׃ u _^]][̸6 Ul$Vt$EW|$G@d@8t"L$V);v_^3]YN N+щV;nwN FS\t;u2GXjhDP u uGXGXttK0 t+F[_^]YËV +T$+33 3BO;B3L$tPF rL$$D$$vӋ+22E F2T$$3##;l$rˋt$T$׍C[O##+ _V^ ]Y̋T$L$ABABABABABABABABA B A B A B A B A BABA̋T$L$BBABAABABABABAB AB A B A BA BA BA B AB ABABABABA̋T$L$BBABAABABABABAB AB A B A BA BA BA B AB ABABABABABABABABABABABABABABABABA̋T$L$BBABABABABABAABABA B A B A B A B A B ABABABABABABABABABABABABABABABABABAB'A B&A!B%A"B$A#B#A$B"A%B!A&B A'B/A(B.A)B-A*B,A+B+A,B*A-B)A.B(A/B7A0B6A1B5A2B4A3B3A4B2A5B1A6B0A7B?A8B>A9B=A:BB8A?̋D$=1=f=;=@3̸D̋D$=A==[=`3̸6SVWjp6D$ WD$$jP j00t$uEFV$0tV$@t V>U$~4""- t@t `F$t jjVӃ ~<F u(ph@Ugn~hFhhE' >}O@8t@hhEh{r<uG<<reuYF4"~4"FL8H@ L$hhEh<ruF4"CuF4"$uF4"<Gur  ush\hEh*? vG |z|u|uRu5u\6jWhEӃ t\jWhEӃ tKjWhEӃ t:jWhEӃ t)jWhFӃ \hhEhhhEh }hhEhGPV*FPPFLPV{Nd tvhFPVPFLPjjjуNLAQY A ؉T$A \$Y ؉L$ F<\$XD$ D$;FPthhEhD$WCD$ \$$CCD$ CGD$PD$D$ PC+D$ PC3C%S&D$ T$(39D$v9T$ <uDDC݋D$D$;L$rՋT$L$$D$BCF<+XÈYAFXǀTFXǀ@FX<+uh"hEht |$6huhZhEhjVF'FXF4!uJF8~PuVFXL$(WQPFLFX FPǀFXǀF@F Ew#VFDr_^][L$$3(hhEhjvjL$4_^][3(̋D$=QC=F== 3̸SUV3WPD$p6D$dWD$$jPVj00t$uEFV0tV@tVI~4!\ = tZL2&VF0؃;F4 @t PF$t jjVՃ ~<Fu4q؉\$h@Sd^~hFhhF ?O_utG Qh@V҃ Fdt'vhVjWh6jvhFdVjSj6jЃ8FGhhFPf\$jV#FXF4 F8FPu VQt~FXL$VFL(fXHFXǀFXǀF@F FD1_][^YhhFhhhFhjwj_][^YVWt$ 3W~"d$VWxtWF;|_^_3^Vt$}3^Ã|$ D$tttW|$(WPD$P) D$D<PЃu&D$P7ЃuD$PЃt3>3ɅtF9t$A;rT_^L$3lËL$3_^3Y̸V@3ĉD$D$S\$(u3[L$3Ã;8tVt$(~^3[L$3VPD$P* NWD$ D4 j+PX6G? KD$ :utP:Quu3upsKD$ I:utP:Quu3upt7KD$ :utP:Quu3uhW}ЃuWhЃtE;3ɅtC9pu9t/;rT_t^[L$3ËL$ 3_^[3̸S\$UVW|$3T$?} G@d@8tQW3S~2$VS@ u@@uSFw;|T$\$ uOXu _^][Ë\$$T$;  q$Au+ΉL$ˋD$+ʃ ;D$T$R@L$BL$JD$HBL$L$JD$HD$D$‹L$AL$D$PD$ PD$FT$ T$T$jD$ PjWu%hhKjDhj_^]3[ËL$+D$+xD$@L$D$L$L$D$AL$t$D$QPWD$ u h!yT$T$T$qAu+ΉL$;ID$+ʃ;6D$T$R@ L$BL$JD$HD$D$D$@PD$T$ T$T$zHt%DD$=v2hOh. K@8%D$;{˃+;lD$T$RV@ L$BL$JD$HD$D$D$@PD$D$(D$PD$(D$ PD$,PjW6l$v hjt$m;ˍB+;D$Rt$ @ BL$L$JD$H‹L$L$D$PD$PD$]m D$jjj W@'(utt T$ttq\tgxta(hhKUl$(8 \UpQՃ u3҉T$\txtrt$;{ˍB+;lD$@#‹L$L$D$Pt$t$t(RVt$ t$t$t$G@d@8t ~D$PW%D$;ӍH+;T$D$Rt$@ BL$L$JD$H‹L$L$D$PD$PD$Tt$ t$t$(0D$ 3K~?V0>jPL$F0ȉL$ ;|4tjP[D$y_^]3[3D$T$4l$;ˍF +;E3D$@FL$L$JD$L$HD$D$‹L$AL$D$P0D$F~=t$U05D$L$QPȈFE0 ;|ËD$T$D$Pt$t$tD$P45t$;+ƃD$@D$D$D$@D$D$tT$BT$tMGXuA;'+ƒ3D$@tD$D$D$@T$T$GX;+ʃ;D$@L$L$D$HL$L$D$HD$PD$: D$ǀxG@d@8W;jD$ PjWqT$ ;D$+ʃ;D$@L$D$L$L$D$AL$t$D$QPWD$ t hGfD$D$\PPht$,D$SPjWfFt$G<+H4u=wo+у|3҉T$;+ލB;D$Rj@‹L$L$D$PD$PD$t$ t$T$ +ƒu _^][_ȈB^] [̸(6Ul$4W|$4l$8OXD@ u@@tD$uD$?uu_](S\$@Vut$@; luQ$uHt9+ƃD$@@D$@D$@D$@@t$@t$@GXjD$@PjWpu hoT$@;yD$<+ʃ;fD$@@L$@D$<L$@L$@D$|bD$Pt$t$t$Vz t$jV' 3^YVi#h hKhh/j?3^Yø^Y̋D$ǀxUl$}lhS\$Vt$+ƃ~Fff +;} ^[]W|OFff FNff ȋ+;|!t$ WVRjU[~+ƃ}_^[]_^[3]ø]̸&SUVt$ 3W|$(l$FX?$dž(FX$tPpFX$FX(ptPEp\$,t@t SWVt $tP$tP;=+ǃGff +;Gff GOff ȋD$,+T$$;tUWSjVыT$<ffz/G T$$;V߃CIKCff ȉ\$ɋ;$9Vl9f;thChKPj rSt$ Q$Au+;dž$Dt2ʍAD$Au+L$;uSt$R\6 u3$+\$D$0_^]23[à uuftE;u؃uhChKPX RSOQP QAu+;w^ E;[R~l4tPǀhhKSǀ SGP   G؍E;~lnoh hKSǀ SGP` #u)`dUWVЃf;u$t$0UWVȯD$ uj$fG ȉT$$;riaQWV!$ N5f;7G(T$$]G ؉T$$;h0j~R0 dž0~}d$G ȸ+ظ+D$$QD$|$Pji dU;|$(0ؿl$$f1G ;|$4thpPtSD$Pj 4;;D$dž(uHtHvt3f;uFXu+ǀTuFXut$0UWV *F@d@8t)V诰tut$0UWV觳l$$\$,+ǃl$;D$(8D$0h hKhRh@j(达3_^][Ë"ǀD$0p_^]3[_^][U:D$0P_^]3[D$4_^]23[ËD$0_^]/3[_^][̸SUVt$ 3W|$(l$FXl$?FX@$tPFFX$T$,‹\$0+ǃÃGf+f ;tD$42_^]3[Ã$Gff GOff ȋD$,+D$0T$;tUWSjVыT$(fu# !fD$: E;=~lǀt P h hKS SGPc #uU`tdUWVЃ_jjj Vn@Yf|$Mdž@Eu%(,f#dž,t3f;FX3ɅtI9A;r;D$(UWPD$,PVӃt譺D$(h hKP蒺tRL$$Qt$ PD$0 xFXǀ>xf2G ȍE;_E; FX$t Ph9 hKSNX $FX$SGPQ`FX (f;u!t$4UWV=D$huHtHcMDF@d@8tut$4UWV觯@t$4UWSjVM$D$,\$0+Ã)l$D$,;~luFuA t7Q聸t\D$(8|$D$4h hKhRhAj(Ը3_^][ËD$4_^]p3[ËD$4_^]P3[ËD$4_^]n3[ËD$4_^]/3[_^][̸VSUVW|$33\$^ ^G@d@8t ~u|^FD$PW)t>L$PAB$HtHt HuD$ Ju؅uF F"uN N|$uN @N@uN NFuN N_^][Y̸6W|$39 t@r_Ë u _Vt$F;t&h?hKhrhMj3^_UwD$PD$P 8|$$u+D$PD$PW uhIhKhzh8tffD$u>tOhShKh|>t-hYhKh||$h8SD$PW؃3҅t&L$:!uF:At ;r;[u>uthmhKhr'P{L$Ѓu'hrhKhphMjy]^3_Ëtt@P]^_̸&L$S3ۉ\$Vt$D$Ui W|$(ED$$Hwe$]蹷!ԶS@ KJt2^HtHtHuD$$3Ʌt:u:Xt;r\$Mu_]^[YËL$\$C\$AtވQFAVPAPAP6D$\\\\\]̋D$Hw%$]郷r逷3ÍI]]]]]]L$B8%=t~=tg=tPy$Vt4tD$ 0^8Ë,D$ t^0^ËD$ËD$ËD$̋D$ u3P#39͘ t Ar3Ë͜ tԋD$3ɋd$9 t Ar3Ë tD$HVt$W|$G ;3t)d$ 8@;;;rS\$pt P躱hhKV衱 ppuD$[_^PVWP [t3_^ËD$_^2ø趹Vt$D$D$pD$ tpPD$PVуu{FX$ӰD$ h'hKP踰NX$FX$uD$^P3D$Pt$ Q&FX L$(FXǀ^̸ƸWt$u_Á?tW2_VwD$PD$PPW u^3_Ë|$D$ UP3ɍD$9O$DPW tc|$ G8|fD$u<u u+@3Ʌt<;tA;r;u ]^3_Ã|$ u'u=]^_;]^_ø薷D$SUVt$83W3|$G8%D$tou$$IL$<+σ<T$<+փT$t0Pt$ t$45 t@D$,L$x$uˀ[tWWˀ3~:VWjPt$<tWF;|D$,L$x$woL$ 3t%ttt'LE=t9=u*Qt$ |Etqu g@L$D$ t D$,@X\`L$ 3Ʌ~;t D$ A;|uD$,@XlVt$(Ҫuu\t$Vtu=W3薪~.VW莪Pt$0juWFp;|utt#;uT$u2L$@8t4~AXD@u =+u ~t3^=,u~t3^ÍD$PD$ PjQ&tSW|$3҅t^L$:uF:AtB;r_[3^_[^̸趱D$SVt$t6t&3t :t@;r;u^3[YËD$Ul$uE]^[YW3L$QL$$QWPmtQt$ut93҅t]L$ 8uA:EtB;rL$ ;tD$x$tG~_]^[Y_]^3[YVt$WA8y,t|D$S=+u =,uVjD$\$PVD$ t7x4u1x0u+t!WD$jP? t fD$t :t[_3^[_^Ãy4tjV_^Åu 39A0_^WD$jP u_^jD$PV? _^W|$uG_Vt$虫t 3;^_ËD$ 3ɋ@t<;0t A;r^3_^_Vt$Vu?F^̋D$| w$3̋D$=$t-tøø;=k$Xkøøøøøøøø ø ø ø ø øøøøøøøøøøøø3Ëkkk#k)k/k5k;kjjjjjjjjjjjjk kAkGkMkSk Vt$\t P腤VP^̃|$T$Vt#D$@8%=tg=tO=tAt$PLuR9B$tx4u @K84$K'D$zKD$xK^t(hhKjDhRjD$$3ËD$̋L$D$HtD$ D KH8D$ ɃUVt$ F>t$hhKhnh;jU^]V0~ShhKj%蘢؃ u[^]W{fGGjWU+hhKjDh;j¢S;_[^]ÍGjPh j%SjVx#FdtvhVj%Sj6jЃdžSۡ_[^]hhKhhhKhmS\$3Ul$Vt$W|$uutt(E3ɋ9͜ t Ar3͘ tutIE3ɋ9 t Ar3 ttttPRV _^][Vt$VePu^ËFV@Ѓ^̸&SVW|$GXOdtwhWVj7jуGXs_^3[YNF ȉL$A;wލFD$ UhihKU)؃ t@L$sQt$NV覨D$$jPS]_^[YUSjW詂xGdtwhWUSj7jЃS謟y;]_^[YÃu.u)@ ;uBLJ]_^3[Y̸ƧD$VPE u^YS<U39@} WCHtHtHu^x +ǃ<D$u4P0L$W +u FTFDE;@r_D$][@8u8~|uF|~`uF`FDu Ѡ^Y̋D$Vt$ t$W|$ jjj WLJ@@t_3^Á?~T$t;r_^ËG@d@8tF+;~Fff ȋ+;~F+;|+ƃ~+SU|@Fff FNff ȋ+Ƌ;|#t+ƃ}][_3^fu][LJ@_^ÃhuHt$$t$ t$ UVW t"HtHt][_^LJ@][_^LJ@][_^̋D$V@@d@8u^Åu3^Ë$t P褜W|$hhKW膜 $u_^Wt$(P  _^Vt$jjjjVjjjjVjjjjVjjjjVPjjjjVjjjjV(^S\$UWh3hKPD$(ě u_][3VD$==t,-tHsd-= x$wA9A,AA AA:Ay     @vj^R F@:." uA NB;5t$t PϙD$L$ .^_][U谙3^_][vvvvv ww!w vv#v0v=vJvWvdvsvvvvvv-w9wEww ̸xƠ@3ĉD$t$ $V$W$Qhp/jj:PD$]u_^L$t3]xÅu_F^L$t3Ext$D$PWV$_^3xVt$u3^WV,t W襛u_3^SP蘛3=W踘PL$ t |$At4Vu[_^VRu[_^[_^̸vS\$ V<t)Pǀ<ǀ@@D@T@`@p@|ǀǀǀǀǀǀǀǀǀǀǀ$SR<U39@X WCHtHt Hx +ǃ<D$upHw=$4}藘/谗&-! 3ҋD$O+u FTVDE;@E\$_]@8u8~|u.F|~`u F`FDu <u]hS hKhxhOjߔ/hL hKjAhOjPPjSgv 3^[YV^[Y| |||&|/|̸fSUl$VW^8<tPɓdž<dž@}$u4t u8*,t u0D$PU|$D$@uu$(D$lj|$$͋(UWQPjL$,it7hhKP؃ u_^][YUWt$ t$S03_<@^][YS\$t3[WhnhKS襒 |$u_[U3Vtf|$I39 Ř t @rŜ O39 t @r tLtGF;r|$|$ t$t<4t P48^]_[t$3^]_[Ë,t Pԑ,0^]_[̸&@3ĉ$$ $V$Qh`0jj:PD$•u^$3ÅuF^$3裙$D$ t$PV^$^3t̸ vVt$~$u^ Ul$uF@8t5FXDH+u ]^ 3,]D^ 3D$PD$ PPVt&D$PD$PЃPVu]3^ S\$Wu @tL$ @KL$ 0L$ L$ u @ut$@KL$ t$|$3t$3҉D$tsI3t%':!u G:Au;t!BF;rD$@D$;D$ s5t$G ȃ|w$_[]^ _[]3^ _3[]D^ øƗ@3ĉ$$S$UV$D$$D$D$ pW$Pא$Pڏ8t2jD$(P$PCPSVуuxhu˾ ;sj~PjPD$4PZ9CP(PjSP$P93t$$ɎD$$P蹎L$;D$$4Pݏ$P$_^][3:Ĵ+WSP豏 j$PD$,P蘏 kD$$Pqt$P$Pܐ$Pt XsÉD$$P+h hKW,Wt$D$P$VPD$PD$P$Pߐ $P迍VόD$D$$P蟍t$D$ t$ PjBV虌t4$tVt$ GHP D$ wD83p݌a$P1VAH$PD$(P&̸vSVWD$3PD$3PV \$ D$ tGD$FPD$PVS u܅L$PUl$X3t$|$`WPDUL$`*D$$D$(PD$ Pj(\$\D$ D$$L$WSt$TD$`t$Tt$TƋt$dt$Tt$Tt$Tt$Tt$Tt$Tt$TPVQ$<t$3ɉt$P rcCU;w;sQ%yH@׋+Ћ+o@ oLfHoL  o@fH;|;})++ъ 0@0HJut$D$L$QL$@QPD$( ]_^[hhKhFhj茊]_^3[h hKjDhjg3_^[̸F@3ĉ$$S$D$4$U$D$<$V$D$8$W$D$0$VD$D$8D$8yhKhhK> D$PӉD$lPɉD$XP迉D$\jP迉SWjhW胍$D$HPjVD$\jPLD$PPD$Pt$D$UPc h\$@t$D$SP> C|$Dt$D$WP D$y3ɋD$tuQPVWv؋D$t9u5)F_^][L$03Ȁ4vvv l6F FL$@_^][3薀4̸薀SUVWhhKt$(3x |$(\$0G@D$9t$4t ÉD$hhKPw Wt$(VVT$$O |$4BXo>oD>BXo1oD1t*D1 D$,\1!"utSP1P κK $;usff;uA:BtyκK I;usff;uA:BtIκpL I;us:t#κK ;u"s:uh hKhoft$ L$Ut$$\$pPjjjjjjjjSVQ*P6SV=vHt$ U0vh hKjAh:jv3t Uut Vu_^][Y̸F~@3ĉ$$U$D$$D$EXV3W|$Ht$ 9xt%UM3u_^]$3}ÍD$$SPuD$3PD$ PSU(D$twt$uEX| tPxL$+;?QD$,P9xtD$$PD$,WPu t9t$$tD$t$ t$D$CPD$PS9 ^L$Lj +L$DQt$$pPjjjjjjWD$|P$t$XU(PDD$hPDtDD$LWP2tD$Hj P&t3Ʌ E$[_^]3]|t$T$t$t$JXpPjjjjj Pj Pj hKRi'P@̸4{@3ĉD$0L$@$Vt$KVg/=VdžV ~lt#@!!FDEF4F4@!FDFXD@uE@ uF4!FDuF4!FDwNAd@8F4!FDtIJFXxQ Vs!&_F4^][ËFXIdPjVAЋFHdFXPAj@VЃVnoF4!FDFXu F\ǀh!h!VJ &Va~ltF4FDc@!!FDEF4@VF4!FDVF4P!FDFXVDF@d@Ѓ_h!h!VR LFF4!FDj"@dV@ЃjV4tF@dp,p(h!h!V*O~lFXF4!tǀP!FD%ǀPFDdž=@t =`5F$t jjVӃ %=~<F u(`Eh@W`~^éu 3>^3^/L$;|D$@\X^^//T$0;|ŋL$^I\\t$t$Qt$^tMn̸ Vt$VeVF\8yPF\@kPF\D]PF\HOPF\PAPv\K F\^t$txu3̸S@3ĉD$S\$$W|$,C\uu_3[L$3SUVD$P0D$PD$P0t$D$*jh!NbPVUK\iŀ+gfff;|?u9~5GO++ΉOy H@BG?u:}WfL$(^]_[3R̸RVt$D$PV|$|$N\fffF\fN\Tu2GP4PV* y_^][SVdGFPV_^][ËFX{t P>FLGFPFXoGNXoG oG(G8,NXBA fB fAs=S3B_^][SVt$ WF\8+B,N\f4f;9^X)8AIF\8AtWVRw=WA~\$;u 0@;f94 t WVTt/WVt!FX(PF\<PV7 xtǃFPF\8@N\f<N\f@f4_^[h~hHQjDhjw<_^3[̸VD@3ĉ$$SUVW$D$wXGL  ~@EFvhhHQhF GjW@dЋl$uF3GP ;;P;؃@vhChhHQ= .n;>%u C;=%uUSD$ VP,l$)^ n )^nGL$XjQW@d@Ѓ xtSD$\UP= tl$D9FtN~Dv'hVhHQhLh*hHQ2h;W uh[hHQpjk~@v3hbhHQhhj8:VjW 3 t$FWGP $_^][3AČ̸PA@3ĉD$LL$\UVt$\3L$ l$FX9u%V'u^]L$L3gAPËL$ W|$dt tu D$ptth[hHQjDOPt$pQWVl  9nuVVb0tFF VЃ u3h|hHQhhj8_^]L$L3@PSI^X F~4u9{u3F\P<tWVfw8W<|$hV{t ~8u2V%PV v[_^]L$L3@PËF\Tt;t CF;t{tǀ|FXt/;t*CPF\LPV' CF0\;uxF\ufxF\D$9{sl$|$hF8C3҅td$CK *BCK;rD$l$8|$hQ~$IF\ 9,ǀF\NdtvhVjPj6jуV]_FXF\Vf(F(V+`F VЃJD9{{K 9CFdtvhVjQj6jЃF\|$hǀFXVǀjV>cF\f(T ~D$ Ps F\9Ct C|$ u&V5VCF4%u-FXu%~$ džEF(F4F VЃ FXwVFIjV,6j V6[_^]L$L3:PÃ|t>ChhHQjD&hhhHQ2jiN03[_^]L$L3:PhhHQhu{FXhFhHQPhjX2WhCD$hjPF5D$pPhCS<5 ^0p83[_^]L$L39PhhHQ/hh/hHQjghj1[_^]L$L39PhhHQhhj1[_^]L$L3p9PËNXtVtMF4t=|= ~ t.= !'=!| [_^ǁ]L$L39PhhHQh%hhHQjDhhHQhF3C[_^]L$L38PÃuEFXVǀNGFjW3j W3[_^]L$L3h8PhNhHQhVCFjVFP<3j VFP"3[_^]L$L37PVX0tPuKuBhhHQjd hj/WjV [_^]L$L37PËl$p~<;kC GkCUPt$7 |$tu)kk{uF8C[_^]L$L3F7PC3F[L$X_^]3#7P̋D$SVt$WxX^SWȃ~0 sG_^C[G_^C[ك s  _^[̋D$S\$ VpXWCP~Weȃ~(G_,^[ك r_^3[øu(O_,^[D$T$VrXtVB\RfJ\~fց W B\fրǀ 'Wf^ËJ\TW*F.B\f f^Vt$VV0t8~u2F VЃxnu#hhHQhh j-^ËD$=@~#hhHQhNh jU-^jPt$Ft$V}^́|$@~hXQh#hHQ/ D$jt$t$@t$P0̃|$Wuv|$W\vfL$S3V~'t$G\vI3BG\CߋG\39v R0FG\;r^[_3_SVt$ 3W|$3 08:wD:v/B;u,@׍ 0+ր< u9u@A~@|C_^[8 0B;t _^[@֍ 8+׀< u9u@A~NG+с;_L^[̸ v3@3ĉD$SUVt$W~HthRhhQ- nD3hhQj4* t&t7hhQU*؃ uW*_^]3[L$32 É_,G0F Md;NDt1hRhd ;FDthShhQ- F\WWdGF\hfGF\`G F\dG_GGG G$F\ fG(fD$G+GD$G*GD$D$P .u W[ PF\H-L$ _^][31 ̸ 1Vt$VD$ u^ jjj1V+P(+ȋF\9\shQhhQ+ ~HS\$u-u(F\d 9FDthQhhQx+ t7tP+%t(P(D$D$Wt)PX+%u0&+3U3|$F9nDu)FHt"t FD FH F\ljjj V)P'L$ NjV\ \;v+ȃ w?jjj V)Pr'vD$V\ \G ;N+ϋ~D;GGu| (lGpFte`fAeAdAiAhAfiAfA eA dA  CPQV FD;t3^H+ÉFDF\뉨lǀp~D~a\$$|$JNdtvhFHVPFt SWVFd tvhVSWj6jЃj,jU+F\ Tuf(N؃ ut W1V(3]_^[UjS% ]_^0^[̸Vt$ WFF ~;v&h;hQhh j:/_^;D$vh@S\$C\utGPsD$8PF\Hu!Ph`Sx6@Pt6 h }EEPF4̋D$ S\$VWC\DqttwC\fNf;(s[D8~tvEvF,t PkF0t P[VRW{~0t_^3[Ëf(f;FuFUDD$t$VS!uKFDu(F\f&F\%BF\$BFDN\FHjV$Ɓ`ǁdfhǁlǁpD$F4jV^̋T$Vt$u$J\Tuf&f$B\f&R\D$$`D$dD$pD$ l fh^̋D$Pt$ ̋D$̋L$t|ut u3̋D$|Pt$ ̋D$VWt|ut u3Wt t$ȉL$ u&hhShbh3j _^Í B;D$~&hhShkh3j _^ÊSF3ۃ~!SW CH@L$F;|[D$ M_^3̋L$t|$}$hohShkh4j> ËT$u$huhShqh4j f@A@AAD$ 3̸S\$ U l$u%hhShjh5j E][YVWj:SX6D$t+NFu+=  t4d$h@u+;uVSR\6 t;?uԋl$hhShlh5j UU _^][YËl$WUj y&WU: \$tC=D$_^(3][YhhSha̸L$}/h%hShah6jj D$(2YVW|$L$7G %yH@th1hShaF;}h9hShaD$SUt|ut u3Uǀ ؅tY8Hl$ t$ 3D$~&VU 9xtF;| L$މD$t$u|$L$ I][;t1hahSh`h6j6 D$0_2^Y_3^Ỹ|$ t.hhShah7j D$$2ËT$ B ȃthBSZ ؀zt/hhSh`h7j D$(/[Ul$ W|utvVW3~VW9Xt@WFz;|hhShah7j D$4^_]2[ÉD$ ^_]3[hhShgh7jD$0_]2[h hSjBhj3h@@j0t$t$t$\ ̋T$D$tT$D$ApL$ ̋D$tEt;t3@u!hhShhj3PQ5 hhShhj3̋T$u8D$\tbtft3jt$jeu t$jjn Vt$ FTM( $ ^ËL$^ËD$^Ë^ËL$^ËBL$J^ËB^ËB L$J ^ËB ^r ^ËB4^ËB<^ËB8^ËB@^ËBH^ËBD^ËBX^ËB\^ËBL^ËBP^ËBT^Ë D$^ËD$#^Ë D$^ËD$#^ËL$=>w ^3^Ë^A8 D$ A8ËD$^#A8A8t$t$V@DRЃ^y              0 _ g       V  B x    Vt$h:hSj F`jPmt P ~t jV [PVj` F t P F t P Ft PFt Pt P;QthPthPdžt PLt PVt Pi \t P<.`t P).t P`t PMt P:V1^̋D$t3̋D$̋D$t@3̃l$t$t$t$t$t$j̋D$̋D$̋D$3t$ D$t$ p  S\$W3u#hYhShhj3_[|@yKhdhSh hjuhhSjAhjZt W_3[hghSh thjWE G G GPGGC`j,G$G4jPG(G,G0LJ G`LJLJGdGhLJLJLJLJLJLJLJOhEhEGlGpGtGxG|GG {;SVSwEPGPV7n^BP1"hLTuhhShhXT]uhhShhdT2uhhShfPWj_LJ Cd@8u ~pLJ@jPLJLJ~*jP~(jP @WLJ<LJ@LJLJLJLLJPLJThhSj LJX ~``hhSj @`@< \=\@\@ǁLJ_[hhSh̋D$@̋D$t$WVt$Wt P|$hhSWw u_^Wt$P 3_^̋L$D$D$ t$ D$t$ M Vt$F t PtD$ F ^̋L$D$AdD$ Ah̋L$At$ PAP1ӂt+Pju!hghShh j3ø̋D$L$Hl̋D$L$Hp̋D$p Ãl$.hhSj j D$L$hhSj j ̋D$L$̋L$D$D$ ̋L$D$D$ ̋D$L$P̋D$L$T̋D$t$ ̋D$L$̋L$ v!hhShhj3ËD$Qt$ P ̋L$ST$VS:EPAPAPR^tP~h hShhj3̋D$t$jPApЃ ̋D$t$jPApЃ ̋D$t$jPApЃ ̋D$t$̋L$D$D$ ̋D$t$Vt$ t:΍QAu+ʁv"hO hShhj 3^W|$ Lt PrtV#Lu _^LJL_^Vt$~ u VFV@Ѓ^̋D$@l̋T$D$tHT$D$AlL$ Hd̋D$A@Y̋D$uhhSjChj3Ëu!hhShhj3Ëu!hhShhj3Ë@u!hhShhj3PQVt$~u"hhShhjR3^V]Xt+PdždžFlF0thhSjDhj3^Ã~$ FE @F4FFwD$3ËD$@XtËD$A8 D$ A8ËD$D$ #A8A8ËL$t#T$TtXËD$jj@@LЃËD$D$T$HA@evNV$9P   Vt$W~ u$h hShhj\_^ËFV@,ЃF4pt F VЃ_^VW|$ _ u_^ËGFGSFUt WVqc@ VЋGFV@Ѓt/t P^?@:PV G`F`GdFdGhFhtwpaPvpRPPjYFO tF Pjj QY&Ot&;O tFPjj Q4F FGFGFG F G$F$G(F(G,F,G0F0G4F4G8F8FDGlFlwpvpOGttPFtGxtP~FxtjtkPd؃tQS3#~GWSUPWStSG;|][_^UVF3][_^̋L$=} =tËAL$@d@4Vt$Zh9hSjjP5Fpt PPVjqF t%N;u QxFv`FF t PYFt;F t PDFu ^[_F0tFXt^[_́D$t$t$t$t$t$jE̋D$HXt(D$ V;GP4Pt$ ^3̋D$̋D$tt t3̋D$Vt2t(thhSjNjQ^3^̋D$HXt(D$ V8;GPPt$ ^3̋D$t@3̋D$tt3̋D$tt3̋D$@,̋D$@ ̋D$@`̸6D$hD$p t $QjjiP$YÃ|$t3ËD$t uË ̋D$t u t3Ã̋D$UVt$ l$W|$Vu_^]SV3~X$SVp֍JBu+эB;<NJv@ut$C+V:GJ;|D$[G_^]ËD$;tO[_^]^3]̋D$@0̋D$̋D$ppËD$̋D$̋D$upTÁuxTÁuTÁuTÃuSÁuTÁuTÁTTE̸D$hD$pyt $QjjiPT$Yø@3ĉ$$V$W$ v_3^$3RËVD$ D$TQPt$Xy |$u&s!+PD$TjPZ D$LhhSj jD$PphhSj j$$(3_^3̋D$@$S\$u"h+hShhj3[Ã;u"h/hShhjm3[Wh3hSh tdhjWe LJtGp6VP2s`hjhSj G,jV|hvhSj jVLJLJLJ@LJ(LJ,LJ0LJ4LJ8LJ<0p^t)PHXDt)PP%LLJttShhST P LJGW@Ѓ3Wx O$PWjPT_[̋L$y u"h hShhjA0t3ËAL$@̋D$HD$APL$y u"hhShhjA0t A3ËAL$@̋L$u ǁA(AL$@(̋L$u ǁA(AL$@(̋L$39øSUl$$3VWL$9L$(D$03t{L$$L$9/:uZEǍQrI ;usty :u'tnJ:HutaJ:Hu tTJ:HtLL$G;|$0rL$D$$AȉL$;L$(bL$U_^L$U][Ël$l$$̋D$t$pp*S\$ Vt$ W;up\'~$tV$$((TLJ$TXXLJTpWpttxLJpx+ vhTh} hSs ;Urd$;ust-:uSt"B:GuFtB:Gu9tB:Gu,oo]h hSj C`jPt P_^[Vt$VFF$F0F4`@F t Pdžt Pdž^Vt$Wt P|$hhSW u_^Wt$Po 3_^Vt$WNtF;u @$FA$F |$t ;t PFt!S\$;t9F t P^[~ _^ËD$~ _F^t$ D$t$ , ̋L$Axt$ PAtP0-bt+Pu!hxhShhjV3øVt$VFF$F0F4P@F t Pdžt Pdž^̋D$L$́D$;VbP@uhhSjhj3^t$ jjhVVVt$ 3^hhSjj QD$L$hhSjj 0 ̋D$L$̋D$L$Hd̋D$L$̋D$L$̋D$t$pp̋D$L$H`Vt$WFt=P!=u-jjjiv;D$uFPPV1 _^ Pu hhSjhj23_^t$jjhWvWV_^̋L$ v!hhShhj3ËD$Qt$ P ̋D$L$H0SVt$ W|$NS;tIF t3;AË;u~A VЉ~GVЃЃu O_N ^[ÅuGF _^[̋D$L$H4̋D$t$jHPAlЃ ̋D$t$jHPAlЃ ̋D$t$jHPAlЃ ̋D$t$pp̋L$D$D$ t̋D$t$pp̋D$L$Vt$WF t=P=u-jjjiv ;D$uF PPV _^Pu hhSjhj3_^t$jjhWNWv Vz_^̋L$y u"h,hShhjsA40u AL$@$h3hShhj<̋D$@4Vt$u3^ËuB^W|$t@SYIAu+[v#hf hShhj3_^Ët P%t)Wu_3^Ëǀ_^̋D$̋D$@̋L$y u"hhShhjA0t)hhShhjAËAL$@ W|$GtVI0P2ƅu^W"_S\$VWCXt ǀCjj@LЋ t$ƙUl$ t\mtUUTt PVt$VTTu7h`DuhhSjAhj]_^3[ËL$XD$CXt3u>u[|7u"|7uǀXu>u(|7Vu!|7uCjjjw@@SЃtw"VS-atPUL$D$ljD$;\D$ t(]_^[hhShYhjj(jS膵 Nh'hShuhj{Xt*jVjSS h5hSjAhj~D$ t 8U3]_^[hhShhj?3_^[̸ SUl$D$ D$WEX|$D@ X H\$ L$t2W*؃VSSN^q\$ jjWG ttPzL$QL$QPvÃ@u G(t-G,u'h hSh=hjJ_]3[ ËL$ t2U%=u}th hShC t7U%=u}tth hShBrD$@t G(tG,uh hSh>K_][ ̋D$HD$+Hu33E̸FSUW|$3W9D$l$u_]3[YÃ|$ Vt$ t$u G@LD$$U3DIWU3ȃACuA CuAC u VQT$,UG;|Ë|$;t>|$\$$t Vh ӃD$tVh Ӄ+^_][YË+^_][Y̋D$D$I+Hu33EVt$tPdžtPWbdžtPQdžtP4dž^Vt$Ft%N;u QFvF^̋L$tAxut@u3VW|$ GXD,Iu9Au 褾t-WPztW6蓾uWb^3_^_̸$UVW$ijd3_^]ĐS$|$tVSU [_^]ĐjVt$D$$Pu(hdhTj h>j3[_^]ĐÍD$P׽t$p3~1$Vt$pPSUtat$lF;|֍D$P W3ż~$VW轼PSUKt+WF衼;|[_^]ĐÍD$P[_^3]Đ̸SUVjt$ ؃xpt$l$QUtSML$ ˋD$ HD$ XD$ D$ Pt$ nyh-^][Yh%hTjh?jo3^][Y̸F$SUV$3Wl$>9/u*hhThhLj$J؅2w 30~WIVw !PSVu+%= e蜻w Fٺ;|7S u+`%= eR$3P7D$SPuu*.uhhTjAhjȱ3^ø^VhhTh uhhTjAhj肱3^hjV蘹 džlF<OF|GF`?FD7^S\$ u3[Ul$ 3Vu<ƍ9uxu6A|W3~ttSP軶tG|_^]3[^E][_u^][̋D$V0u3^ËF thPD$ F ^̋D$Vu-D$0t2F thP觯F ^Pu3^ËD$W8t G thPfw _^hVM3_^̋L$D$DD$ H̃|$ Vt$tLPt P萴|$D$ ^tthhTj DjPVt$t[D$ u3%uI$I+΃<BЃ})+ƒd$8txu A|3^É^Vʰt$F|辰F`趰FD记^W|$hhTjjP{thPͭSVw d$t P芯Ku닇^[t Pt Pt PW脭_Vh~hTh_ uhhTjAhj­3^hjVصF dž F^̸vSV$WPu X $tDW薬t7jW荬WPD$SP谲u'hhTj hj_^3[ĈË@8%PD$P蓲VPD$Pm~$UUDPD$PuD$ vpP_PtPD$P8HdtphD$Pу D$ P?D$pD$ P̱_^[Ĉ̋D$0D$0it$t$t$t$htUht$t$t$t$htUh˱jjjjjt$t$htUh 諱$jjjjjt$t$htUh o$SUVt$Whh`UjjP踬hh`Uj j |$8Vw؃,;SW"S VWjjj+Wjjj+WjjjWܢ ;~uIwti~DtcVwV;uSVwlVWG,tSWЃSDGTjjj+WujjjWg$;h,h`Uj j !_^][Vw֮ޅ S3̸ ƱD$$@D$t[D$Vheh`Uj j D$謬D$p @ D$Phzt$$D$(hkh`Uj j p q,^ ̋D$@t̋D$uË@$jt$ t$  ̋D$@(̋D$L$H(̋D$L$H,̋D$L$HtVt$ Vٮuhh`Uj&h"j讨3^V觮u(hh`UhKh"jV˭3^ËD$^̋D$L$Hx̋D$L$H|̋D$L$̋T$u3ËB$L$J$Vt$>hXh`UjjPsPVjAFjPDFj0P9FHj P.$t Pt P辨t P˦t Pܦt Pɦdžt P謦džt P菦t P|t Pit PVhVNVB ^̋D$̋D$́D$t$t$t$t$t$jժ̋T$t L$ADAHËD$H̋D$uËËD$uËVt$ W|$ tt VW=GOuG10_^É_1^̋T$twVW|$ w;u%;u?/w;u_ǂǂ^Vhh`Uh菤 uhh`UjAhj3^hjVjdždždž0p6PVjdždždždždždždždždždždž^̋L$ v!hh`Uhh8j3ËD$Qt$ HhlP ́D$K̋L$u3ËD$̋L$u3ËD$Vhh`Ujj 耦D$thh`Ujj V^̋D$Vt$ W|$ 6@\Ѓu4G6@\Ѓu#hh`UhhjԢ_3^;GtPW(thh`UjjP1t P_^Ët$ tPSdž;FtPV^_^̋L$u3ËD$hD$ lVt$>\tPIdž\W|$h-h`UGP \u h/h`UjAh&j}3_^ËT$t*f8\WRAA\pr _^3f\_^H3^̋L$u3ËD$`D$ dS\$ Ul$ VW|$37SR~7SU t F r_^]3[à s_^][Vt$ W39~D9|$th<h`Uj j 肣SUl$Vu8؃;uVuGVU||$thDh`Uj j 3t!ǃE,tSUЃS][_^_3^Vt$tCF0u=V0u-V@ujp ^3^̸vVPu^YW|$p@$u WtP6LJ|$Uu FDV=uD=u9=u.=u#=u=u =&FD @t6FD PٝhShh`Uj jvuppEhh`Uj j@FDnHD$ D$ PUWӃ[uhh`Uh-D$ tLND;wEs?u+ȃHQjP FDvDUW hh`Uh.@hh`Uh//hh`UhFD v(hh`UjDhjeVW3]_^YPPFlPh Fh]_dž^Y̸@3ĉ$$S$+UV$W$ D$;_3DD$PQWSV@7$|xT$3PHT$Hp@ D$|$XWD$`SPhheh`Uj j=D$0Ppp$D$thih`UjjP茝hkh`Uj jT$ p@LT$p@0 $DŽ$QWSVЃD$p@\$t D$hh`UjjPp@ u t$PT$Jh;Xzlr;ust=:*t.G:CtG:Ct G:Ct5u,hh`Uhhj萚T$$un$$ $ $ %=$ }$ PV'L$T$tBjp6L$+9p}D@Ptjt$p% T$3ۅtRu dž@u=3<@Xt PD$ P6$_^][33*u?u?u8u8uSUVhh`Uh蝘؃ l$=WǃǃWǃǃǃǃǃǃfǃǃǃ_thh`UjjPthh`UjjPәtPntPMtPbPVj@ tPtktPtHtPt%|$tEƘu;h]h`UjAh\j!S3^][ǃǃtP.t^][Vt$W|$Ot;~7Vw訜V7džH,tVPуV{_^̸fD$SUVXH Pp\$X@ l$ WEt ~|$jD$jDD$D$t D$S#t D$TpTTDÉD$ t~Il$TL$tjjEKjj~fwL$tjjE^eWjLw!t@t @u%f1j*f#ttT fjL$ w@t7Jwq$|Ko8fheafZjSfLw!t@t @u%f1K*@g#ttT fjN?$tu kkktk$kED$$,k@$4kDt@kHkEPk}\kvjohkhtkaw6t-ttu,k8k1k*k#t tT kkD$H?w?$$0g/4g(Tg!\gkk @gTD$(u,hEhhhU D$(u&_^]k[ËL$,}_^]k[ùt$T$(WVUSt$(r5H QP胕D$P(_^][|@|J|X|Q|||| }|}Q}}}}}~~~r~~~~~~~~~̋D$t$@@HЃ̋L$tT$tA,A(3̋D$@̋D$t@ø l̋D$u lH ulÃSTEW|$ "?S\$ ?>Vj趖hhhj u)j蕖hhhjAhjMF^[_É~AtiVP赑x4V螏jEhhhh5hj^[_átVPHtj3^[_VCjhhhjAhhhh3hj葏3[_ø_̡hPŽ[̋D$t@3̡L$ SVt$3W=\6j hj6׃ uLj h j6׃ u X0j h,j6׃ uj h8j6׃ uT$B8% B8 T$J8D$@d@8u9thhhhhhhh{hKjN3_^[ÁtGt)u=۸|BDjD_^B4[_|B^B4[\BB4_^[U̸趕jt$D$ D$ PD$ t&PjjjD$jPғL$3҃Nʉ $ $D$tP貒D$Ë̋T$L$; tuxt8;t4;u͉L$Xt͉K tHK\$G x;D$uT$ L$$\$9No]Sy_^[ ̸(F|$8$D$|$0 |$4Vt$0D$yt8;t4;uljD$qtljF 2tAFt$K Y;utXIυtOW :@t>yt8;t4;uljD$qtljF 2tAFt$M i;u݋tXIυtOW :@t>yt8;t4;uljD$qtljF 2tAFt$K Y;utXIυtOW :@ t>yt8;t4;uljD$qtljF 2tAFt$M i;u݋t[IυtRW :@ t>yt8;t4;uljD$qtljF 2tAFt$K Y;utUυtOW :@ t>yt8;t4;uljD$qtljF 2tAFt$M i;uޅtXI˅tOS @t>yt8;t4;uÉD$qtÉF 2tAFt$O y;uD$t$PD$|$PdH\$t$\$t$t:It'vtD$PD$ WP G;uӋ\$t$D$4h5hh\$Tt$Pt u.t$th8hhjAhjvt3_][^(St$$t$,t$4t$:uFt&΍QAu+tWD$PD$PVW]st 'sut$Bs3_][^(Ët$tI~t 6Wsv ut$ sWruWr3_][^(Ë\$@t Pr;\$Dt PrhpAV3x3Sy _][^(3(̋D$t$@@HЃt8u3̋T$w0D$ d D$ t 3h,hxh4hhxhflxhDhpxhLhtxhXhxxhdhxhphwxhhhxhhYxhhJxhh;xhh,xh0gsPq<yhhhhh2t h4gsPqyhihhhs hDJPV\btz¡ȡΡԡ ̋D$%s($Lxø\xøpxøxøxøxøxøxøxøxø yø yø4yøHyøXyødyøtyøyøyøyøyøyøyøyøzø zø &,2DJPV\bhntz ̋L$uwÃwwE̋L$uwÃwTE̋D$@8-tHtHtTøzøzøz̋D$@8-tHtHtTøuøuøűD$@4=  =-tt- uøuøu=-=4$uøuøuøuøuøuøvø vøvøvø$vø,vø4vøDJPV\bhntzҦئަ           ̋D$@4= TH=@="tth\mølø|l=Kl=-=$$dmømømømømømønø8nø\nønønønønøoø,oøPoøtoøoøoøoøpø(pøtøuø t=!$t-tg`tø@tøt= J\løDJPV\              !'-39?EKQW]ci{ ou####################################### ############## ############## ############################################################################################################################## ##############!"̃|$uhahzjChja3W|$ǰWzuhehzjAhjsa3_t$ 7_̋D$ Wt$D$D$Pjt$guhhzj hja3_VWt$@Wa ^_øhSV3[fPscu!hthzjhj`^[Yt$jjlV;`*hyhzjhj`V `^[YËD$Ul$WuupD$ uljVfuLjVD$ fuhhzt$/WUOW` _]V_^[Yhhzj|hj__]Vf_^[YVt$ uh hzjChj_3^S\$ ðSwu hhzjAhjp_3[^Wau!hhzjhjD_3_[^V_VjWeV`3_[^W3vW_ _[^̋D$Wt$D$D$Pj9e uhThzj hj^3_VWt$Wl` ^_̸fSV3cPau!h*hzjhj^^^[Yt$jjlV]*h/hzjhj(^V]^[YËD$Ul$WujVD$ oduRupD$ uljVgduh?hzt$/WUWw_ _]V2]^[Yh;hzj|hj]_]V]^[Ỹ|$uh~hzjChjI]3W|$ǰWuhhzjAhj]3_t$ 79_Wt$ D$Pj+^ uhhzj hj\3_VWt$LW] ^_̸dSU3\aP_u!hhzjhjY\][Yt$jjlU[*hhzjhj#\U[][YVt$vpvljUbD$ u+hhzj hj[^U_[][YPVY`t3tWjjjXVSvpvljUua t)WjjYVSt=vpvljULauDaȁ u%lu=[ Wm\3_t$ ^\^UZ][Y̸bSV3k`P]u!hhzjhjZ^[Yt$jjlVKZ*hhzjhjZVZ^[YËD$Ul$WujVD$ `uRupD$ uljV/`uhhzt$/WUW][ _]VY^[Yhhzj|hjY_]VvY^[YUl$VW|$t$jVWp u$hhzhhPjY3_^]SSXuhhzjAzuhhzjDdhhzVp:]ȃuhhzjA:VWHp*aUVWp u%hhzhhPjX3[_^][_^]hhzjC̸0`@3ĉD$,ozD$4SUV3D$$3t$ t$t$t$t$W|$HD$,]PZD$ uhhzjWjjlPWhhzjD$t$$PD$PD$ PD$ Pt$0f^b|$׍JBu+эL$,YAu+;!QD$0PW\6 T$D$H@ȍB;hhz*PVZ[t$ .t$QX_t$ l$,Vt$(D$(Vt$$D$0V\$t$t$t$t$ t$DȃuD$2 33̃|$t D$23øVW|$WOu#hhzh hjM3_^VWq=ȃy)hhzhhjeMVM3_^Í+SUl$݋C@tMPVS/MC@8upmSu's@WORus@MC@LVoMC<<t PNhhzjGjPJN;]E][_^S\$VW|$?uKtWPQE񋃬utWPQEEL Wj<y$hhzhhjL3_^[Í+U,ED$8tP0ID$8D$0D$@t$XD$dD$DPD$D$0PD$,P u D$h>D$`+D$@D$Xu8|$ tD$HD$hL$(A A[t$=ttD$HD$h|$ tD$HD$hD$(@ džD$@t$XD$dD$DPD$P0O u D$hVD$` +D$@D$XD$ ;OD$ FDD$ ;~hzhhzJD$, Pt$,FHPFPD$Lt$dD$pD$PPD$$PNu D$hD$`+D$@D$XD$ 0~ F0FvFt$,PO3Ƀ L$ 9L$XtnT$@$t$0> džD$XD$ D$( L$@9PD$ L$dPD$ PD$ PD$PP>؃yD$H;D$hE!uL$XD$`+L$@D$D$PD$DPD$PE u D$hE<!u7D$X+D$@D$`PD$D$DPEuD$H?D$hED$`+D$@D$XD$(t.t$ PF=t$0s= D$(D$ džD$XD$0L$@9PD$ L$dPD$ PD$ PD$PPW=؃yD$H;D$hQW!uL$XD$`+L$@D$D$PD$DPD$xPC u D$hQ!u7D$X+D$@D$`PD$D$DPCuD$H?D$hQD$`+D$@D$X|$8t-t$pCt$7$D$\D$dD$\PD$d]>D$D$dD$huI?uD$ D$`D$ L$D$`D$ L$ t"D$ D$ D$pD$tD$xG$G$GD$GH$Gh$Gl$G$G$DŽ$DŽ$DŽ$DŽ$t5P$DŽ$$dDŽ$P$=t5P$DŽ$$tDŽ$P$<t5P$DŽ$$\DŽ$P$<Vt'ʍqAu+DŽ$$$t$DŽ$$~5P$DŽ$$pDŽ$ P$<t+ʍqd$Au+DŽ$($$$,t'ʍqAu+DŽ$8$4$<t'ʍqAu+DŽ$H$D$LD$DjPJ;D$\jP<;D$tjP:;$jP);$jP;(v$jP:St$$jP:jSj\$H:t$$jP:jSj\$D:tjP9jPjD$8:U$jPi:jUj:t"$jP4:jPjD$TV:~"$ jP :j PjD$0+:t"$jP9j PjD$X:t"$jP9jPjD$D9tD$|jP9j PjD$49t"$,jPl9jPjD$\9t"$<jPA9jPjD$PW9t"$LjP9j PjD$8,9jVj9؃ D$, jjVD$D$jP8D$$PD$dP8D$,PD$|P8D$4P$P8D$u-%=uQhP{Phh{ph{W4 h{W439^Dv*DHPh{W4 C;^Drh{W439^hvDlPh{Ww4 ~qC;^hrh{WS4~Y39^v'$DPh{W74 ~1C;^rh{W4~FuhjW3*_^3[3ۅtDPh{W3 ~C;^rh{W3~ċjEQh|W3 ~h|W3~˅EQh|Ws3 ih$|WQ3SESh|W;3 1tPh8|W3 t5hp|W2jW2tZD$D$PjjjjV5L$,uh|W2 Ap1h|Wy2otPh|WX2 NtPh|W72 -h|W2h|W10Ph}W1_^[WH0P`-uj`h{jhj*3_Vt$ jjjW,*t$ WW*^_{1P1v1P1w1P1f1P1g1P1b1P1*P1X1P1S1P1<1Px1C1Pm1>1Pb191PW141PL1/1PA1*1P61@"1P(11P1,P1h0ghhLT0h0ghhXTr0o+P0h4ghhdTS0h }hh,}?0@,P0)P0,P0,P00P0h8}hhD}/h8}hhT}/h8}hh\}//P<0+uF>-u3FhLVL6uuHD^_]3[èt|XƊ:utP:Quu3uLC tjWj^P{3^_][ËCjWj^P13^_][V*uVX*[P'HC t VjjPCtVjjP1V'^3_][Vt$F tt$ P5)ȋF^tt$PI3W|$u_ËGVWhPjGX~G 0j,t$ )O 1^_̋D$uËL$uPhPjj,Q@~@ )Vt$ u^ËF tt$ P ȋFtjt$P 3^Vt$ u^ËF tjt$PW ȋFtjt$P 3^̋L$ uètA tt$PV3UVt$ 3 u^E]9n u 9nu^]S3*PK'؃tlt$jjlS4$~NWjjjS,t7F tWjjPFtWjjP.W7$_S#3[^]̋D$L$!Vt$tFt P#V{#^h`h`j$S# t>@@@@ @@@@ ̋D$V3tP"u^W|$ Gt P"wtNIFu+w_^G_^̋L$D$ ̋L$T$QA tA8AAA̋L$T$Q AtA8AAÃ|$u!h h`hhNjf"3Vt$D$ PV8u^W|$WVtkS\$uC[_^ËSVЃ~ [_^Ãu[_^t1hh`hhNj!ShtWhj$([_3^t&VjWFh}F 0 t_^t+h*h`hhNjy!Whjr$ _^SVt$Wtu_^3[~|$tt >3PL$RSQ ~ t)_^[ÃtD_^[̍D$Pt$tt$t$t@ 3Ul$ u3]VW3HSD$t7Ft0I:utP:Quu3t+tFtUPL6tG r[_^3][_^]W|$ tVt$ ~tUUiAuF+];vXtPvR\6 uAtvv7H6 u'F^_t:-uB:t ^_^3_3_̸f'S\$ D$u3[YW|$t<+u CD$O <-uCO3D$Ul$VD$} uvaF#E tFu+ˊ:utP:Quu39~uWS6H6 tD$@D$;E r^]_3[YËMt-FT$ttMF t ^]_[Y!^]_[YSUl$3ۅu]3[VW|$jWw D$ 4!t$$Ut$(GUt$01$Ft!n 9F vt$F^ u<39^Pp6NN;vpt$FF5<__^][j W __^][j Wq __^][j W\ __^][j WB __^][Ë|=(R||lSUl$3ۅu]3[VW|$jWw D$ t$$Ut$(;Ut$00$Ft!n 9F vt$F^ %;39^Pp6NN;t$FF:__^][j W2__^][j W__^][j W__^][j W__^][j W__^][|̋T$Vp@u+PRt$ ^SUl$VW|$O L$1u mt_^]3[ÍE~$8VCFN ;HuV> ;Hu V=V"G$u F Xt$ t$ UPt_^][_^3][Ã|$Vtx>_^][<_^][ËD$Y~t#~ tt P%F FF _t Ps^̋D$L$t$ @ t Qp 9 P:̸| W8Pu_Vt$ tVWuWt V3^_Vh| u^Wt$ P/uV3_^Ã|$Wt86WjjmVc_^W8P@u_SVh| )tIt$.؃uVW3^[_S8SjjmVWVu W3^[_Vht$ ht$t't#N t@ tPQm^3^̋D$t%9t@$uË@ 0uh|hhh% GXuhhhh L$}-hhhhPh-jYD$,_/3^S\$CB;t.hhhhPh-jD$0[_/3^;t.hhhhQh-jD$0[_(3^ËXU̓rI;ust\:u'tQB:FutDB:Fu t7B:Ft/hhhhQh-jZD$4][_(3^ +r;ust\:u'tQA:ButDA:Bu t7A:Bt/hhhhQh-jD$4][_/3^][LJ_^̸4@3ĉD$0Vt$ $S_ UY tύQAu+QW W t$+ D$_^][ ̸VSVt$3W3D$ ؃ StdUW hbhPD$(9 t3UWe Nt$ UAdt$,V@ t$0D$,U U $]W& S D$_^[YVt$u3^t x |       $džhdžddžldžpdžxdž|dždždždždždždžtdždždž^̋D$uǀdǀhǀlǀpǀxǀ|ǀǀǀǀǀǀǀtǀǀǀt$jjNt$߮t$jMt$ q t$jjQt$蟮jt$ jPt$t$jjOt$_t$jKt$ t$jLt$ Ѭ Vt$u3^"K @ 5 *     $dždždždždždždždždždždždždždždždž^Vt$WXJdhlpdždždždždždždždždžxtPF |tP% tP tP tttP tWtP t:tP tt!Po uhhj1tPhhjDh9j8-" $_3^Ë_^̋L$u x̋L$u |̋L$u ̋L$u t̋D$Vt$t=Pt$Qu%dž D$t=Pt$Qu%dž D$t=Pt$Qu%dž I D$t=Pt$QOu%Odž  D$t"ttt^Ã^Vt$ u^SWv|$vtPǰtPvvvSWt$(t$(J _[H^̸4 @3ĉD$0Vt$t uSuЅtuKuWu#ut4t+uWuЋMEQPDYYËe3ۋu]E Ëu`%|6% 6%6%6%6UE3SVWH<AYt} p ;r H;r B(;r3_^[]Ujhhy%dPSVW@1E3PEdeEh|tTE-PhRt:@$ЃEMd Y_^[]ËE3Ɂ8ËeE3Md Y_^[]UEMZf9t3]ËH<39PEu f9Q]Ã=!t3Vjj 46YYV0!!ujX^Ã&3^jh e5!50։Eu u<6Yej&Ye5!։E5!։EEPEPu50P }u֣!u֣!E Ë}jYUuLYH]Uee@VWN@;t t УDfEP(0E3EE$01E 01EEP0ME3M3M3;uO@u G ȉ @щ D_^]U} u=u u,03@] VWȹȹ tЃ;r_^VWйй tЃ;r_^%$6%(6h!Yhy%d5D$l$l$+SVW@1E3PeuEEEEdËMd Y__^[]QUuuu uhh@]%,6%06%86%@6%D6%0Vf~$>F B4on{vx  8;F  +% x N !" o PNz.o l q j  O ^   R<b{  W}|k m ] M<vD/= bA<;z Z HINm_!03" c CBxyY9 / P1[Ugmr   L< R]Tx 4 R 0` Nx?%  ~ B w5UCAJb:|zlurtvm 2 V G ?| ID ]onpL YUW {wy proq{:;68t'%#CXz VM9+0I>ES 0{J$%[k uv UNh, 8#XWPPX @XPP0  p@о@pJе@ PP0  p@оp@pJе.\ssl\s3_srvr.cGOST signature length is %d XPP0  p@о0a@pJе.\ssl\s3_clnt.cSSLv3 part of OpenSSL 1.0.2k 26 Jan 2017NULL-MD5NULL-SHARC4-MD5RC4-SHAIDEA-CBC-SHADES-CBC3-SHADH-DSS-DES-CBC3-SHADH-RSA-DES-CBC3-SHAEDH-DSS-DES-CBC3-SHAEDH-RSA-DES-CBC3-SHAADH-RC4-MD5ADH-DES-CBC3-SHAAES128-SHADH-DSS-AES128-SHADH-RSA-AES128-SHADHE-DSS-AES128-SHADHE-RSA-AES128-SHAADH-AES128-SHAAES256-SHADH-DSS-AES256-SHADH-RSA-AES256-SHADHE-DSS-AES256-SHADHE-RSA-AES256-SHAADH-AES256-SHANULL-SHA256AES128-SHA256AES256-SHA256DH-DSS-AES128-SHA256DH-RSA-AES128-SHA256DHE-DSS-AES128-SHA256CAMELLIA128-SHADH-DSS-CAMELLIA128-SHADH-RSA-CAMELLIA128-SHADHE-DSS-CAMELLIA128-SHADHE-RSA-CAMELLIA128-SHAADH-CAMELLIA128-SHADHE-RSA-AES128-SHA256DH-DSS-AES256-SHA256DH-RSA-AES256-SHA256DHE-DSS-AES256-SHA256DHE-RSA-AES256-SHA256ADH-AES128-SHA256ADH-AES256-SHA256GOST94-GOST89-GOST89GOST2001-GOST89-GOST89GOST94-NULL-GOST94GOST2001-NULL-GOST94CAMELLIA256-SHADH-DSS-CAMELLIA256-SHADH-RSA-CAMELLIA256-SHADHE-DSS-CAMELLIA256-SHADHE-RSA-CAMELLIA256-SHAADH-CAMELLIA256-SHAPSK-RC4-SHAPSK-3DES-EDE-CBC-SHAPSK-AES128-CBC-SHAPSK-AES256-CBC-SHASEED-SHADH-DSS-SEED-SHADH-RSA-SEED-SHADHE-DSS-SEED-SHADHE-RSA-SEED-SHAADH-SEED-SHAAES128-GCM-SHA256AES256-GCM-SHA384DHE-RSA-AES128-GCM-SHA256DHE-RSA-AES256-GCM-SHA384DH-RSA-AES128-GCM-SHA256DH-RSA-AES256-GCM-SHA384DHE-DSS-AES128-GCM-SHA256DHE-DSS-AES256-GCM-SHA384DH-DSS-AES128-GCM-SHA256DH-DSS-AES256-GCM-SHA384ADH-AES128-GCM-SHA256ADH-AES256-GCM-SHA384ECDH-ECDSA-NULL-SHAECDH-ECDSA-RC4-SHAECDH-ECDSA-DES-CBC3-SHAECDH-ECDSA-AES128-SHAECDH-ECDSA-AES256-SHAECDHE-ECDSA-NULL-SHAECDHE-ECDSA-RC4-SHAECDHE-ECDSA-DES-CBC3-SHAECDHE-ECDSA-AES128-SHAECDHE-ECDSA-AES256-SHAECDH-RSA-NULL-SHAECDH-RSA-RC4-SHAECDH-RSA-DES-CBC3-SHAECDH-RSA-AES128-SHAECDH-RSA-AES256-SHAECDHE-RSA-NULL-SHAECDHE-RSA-RC4-SHAECDHE-RSA-DES-CBC3-SHAECDHE-RSA-AES128-SHAECDHE-RSA-AES256-SHAAECDH-NULL-SHAAECDH-RC4-SHAAECDH-DES-CBC3-SHAAECDH-AES128-SHAAECDH-AES256-SHASRP-3DES-EDE-CBC-SHASRP-RSA-3DES-EDE-CBC-SHASRP-DSS-3DES-EDE-CBC-SHASRP-AES-128-CBC-SHASRP-RSA-AES-128-CBC-SHASRP-DSS-AES-128-CBC-SHASRP-AES-256-CBC-SHASRP-RSA-AES-256-CBC-SHASRP-DSS-AES-256-CBC-SHAECDHE-ECDSA-AES128-SHA256ECDHE-ECDSA-AES256-SHA384ECDH-ECDSA-AES128-SHA256ECDH-ECDSA-AES256-SHA384ECDHE-RSA-AES128-SHA256ECDHE-RSA-AES256-SHA384ECDH-RSA-AES128-SHA256ECDH-RSA-AES256-SHA384ECDHE-ECDSA-AES128-GCM-SHA256ECDHE-ECDSA-AES256-GCM-SHA384ECDH-ECDSA-AES128-GCM-SHA256ECDH-ECDSA-AES256-GCM-SHA384ECDHE-RSA-AES128-GCM-SHA256ECDHE-RSA-AES256-GCM-SHA384ECDH-RSA-AES128-GCM-SHA256ECDH-RSA-AES256-GCM-SHA384CLNTSRVR.\ssl\s3_lib.cABBCCC.\ssl\s3_enc.cm.\ssl\s3_pkt.cmac_size <= EVP_MAX_MD_SIZEs->s3->wnum <= INT_MAX%dSSL alert number i <= EVP_MAX_MD_SIZE.\ssl\s3_both.corig_len >= md_size.\ssl\s3_cbc.cmd_size <= EVP_MAX_MD_SIZEdata_plus_mac_plus_padding_size < 1024 * 10240mac_secret_length <= sizeof(hmac_pad)6666666666666666jjjjjjjjjjjjjjjj`p0jl0 +P*+  PE0  0**J@***P Jе`p0jl  +P*+  PE0  0**J@**@*P Jе.\ssl\s23_srvr.cGET POST HEAD PUT CONNECTs->version <= TLS_MAX_VERSION`p0jl 0 +P*+  PE0  0**J@***P Jе.\ssl\s23_clnt.c.\ssl\s23_lib.c`p0jl@XPP0  p@о-@P Jе`p0jl@XPP0  p@о-@ Jе`p0jl@XPP0  p@о-@Jе`p0jl@ PP0  p@о-@P Jе`p0jl@ PP0  p@о-@ Jе`p0jl@ PP0  p@о-@Jе`p0jl XPP0  p@о-@P Jе`p0jl XPP0  p@о-@ Jе`p0jl XPP0  p@о-@JеTLSv1 part of OpenSSL 1.0.2k 26 Jan 2017     client finishedserver finished.\ssl\t1_lib.cRSADSAECDSAchunk >= 0.\ssl\t1_enc.ckey expansionclient write keyserver write keyIV blockn >= 0%s:%d: rec->data != rec->input t >= 0master secret!(meth->ext_flags & SSL_EXT_FLAG_SENT).\ssl\t1_ext.cpP@PP p@@ JеpP@PP p@@( JеpP@PP p@@( JеpP PP p@`@ JеpP PP p@`@( JеpP PP p@`@( Jе.\ssl\d1_srvr.cpP @PP p@@ JеpP @PP p@@( JеpP @PP p@@( Jе.\ssl\d1_clnt.cDTLSv1 part of OpenSSL 1.0.2k 26 Jan 2017.\ssl\d1_lib.c.\ssl\d1_pkt.clen <= SSL3_RT_MAX_PLAIN_LENGTH.\ssl\d1_both.cs->d1->mtu >= dtls1_min_mtu(s)s->init_num == (int)s->d1->w_msg_hdr.msg_len + DTLS1_HM_HEADER_LENGTHlen == (unsigned int)ret((long)msg_hdr->msg_len) > 0item != NULLinvalid state reached %s:%ddtls1_retransmit_message() failed s->init_off == 0s->d1->w_msg_hdr.msg_len + ((s->version==DTLS1_BAD_VER)?3:DTLS1_CCS_HEADER_LENGTH) == (unsigned int)s->init_nums->d1->w_msg_hdr.msg_len + DTLS1_HM_HEADER_LENGTH == (unsigned int)s->init_numretransmit: message %d non-existant SRTP_AES128_CM_SHA1_80SRTP_AES128_CM_SHA1_32.\ssl\d1_srtp.cOpenSSL 1.0.2k 26 Jan 2017.\ssl\ssl_lib.cSSLv2ALL:!EXPORT:!LOW:!aNULL:!eNULL:!SSLv2s->sid_ctx_length <= sizeof s->sid_ctxssl2-md5ssl3-md5ssl3-sha1TLSv1.2TLSv1.1TLSv1SSLv3DTLSv0.9DTLSv1DTLSv1.2unknownssl->sid_ctx_length <= sizeof(ssl->sid_ctx).\ssl\ssl_cert.cSSL for verify callbackssl_clientssl_server%s/%s')OPENSSL_DIR_read(&ctx, 'Verify error:.\ssl\ssl_sess.cSSL SESSION PARAMETERS%-23s %s Kx=%-8s Au=%-4s Enc=%-9s Mac=%-4s%s ee eeeeeeeeee e@e`effff f(f0f8f= 0.\ssl\ssl_ciph.cssl_mac_secret_size[SSL_MD_SHA1_IDX] >= 0md_gost94ssl_mac_secret_size[SSL_MD_GOST94_IDX] >= 0gost-macRC4-HMAC-MD5AES-128-CBC-HMAC-SHA1AES-256-CBC-HMAC-SHA1AES-128-CBC-HMAC-SHA256AES-256-CBC-HMAC-SHA256gost94gost2001STRENGTHSUITEB128ONLYSUITEB128C2SUITEB128SUITEB192ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384DEFAULT exportRSA(512)RSA(1024)DH/RSADH/DSSDH(512)DH(1024)ECDH/RSAECDH/ECDSAGOSTNoneGOST01DES(40)DES(56)3DES(168)RC4(40)RC4(56)RC4(64)RC4(128)RC2(40)RC2(56)RC2(128)IDEA(128)AES(128)AES(256)AESGCM(128)AESGCM(256)Camellia(128)Camellia(256)SEED(128)GOST89(256)AEADGOST89OPENSSL_malloc ErrorBuffer too small(NONE)TLSv1/SSLv3before SSL initializationbefore accept initializationbefore connect initializationSSL negotiation finished successfullySSL renegotiate ciphersbefore/connect initializationok/connect SSL initializationbefore/accept initializationok/accept SSL initializationerrorSSLv3 write client hello ASSLv3 write client hello BSSLv3 read server hello ASSLv3 read server hello BSSLv3 read server certificate ASSLv3 read server certificate BSSLv3 read server key exchange ASSLv3 read server key exchange BSSLv3 read server certificate request ASSLv3 read server certificate request BSSLv3 read server session ticket ASSLv3 read server session ticket BSSLv3 read server done ASSLv3 read server done BSSLv3 write client certificate ASSLv3 write client certificate BSSLv3 write client certificate CSSLv3 write client certificate DSSLv3 write client key exchange ASSLv3 write client key exchange BSSLv3 write certificate verify ASSLv3 write certificate verify BSSLv3 write change cipher spec ASSLv3 write change cipher spec BSSLv3 write finished ASSLv3 write finished BSSLv3 read change cipher spec ASSLv3 read change cipher spec BSSLv3 read finished ASSLv3 read finished BSSLv3 flush dataSSLv3 read client hello ASSLv3 read client hello BSSLv3 read client hello CSSLv3 write hello request ASSLv3 write hello request BSSLv3 write hello request CSSLv3 write server hello ASSLv3 write server hello BSSLv3 write certificate ASSLv3 write certificate BSSLv3 write key exchange ASSLv3 write key exchange BSSLv3 write certificate request ASSLv3 write certificate request BSSLv3 write session ticket ASSLv3 write session ticket BSSLv3 write server done ASSLv3 write server done BSSLv3 read client certificate ASSLv3 read client certificate BSSLv3 read client key exchange ASSLv3 read client key exchange BSSLv3 read certificate verify ASSLv3 read certificate verify BSSLv2/v3 write client hello ASSLv2/v3 write client hello BSSLv2/v3 read server hello ASSLv2/v3 read server hello BSSLv2/v3 read client hello ASSLv2/v3 read client hello BDTLS1 read hello verify request ADTLS1 read hello verify request BDTLS1 write hello verify request ADTLS1 write hello verify request Bunknown stateread headerread bodyread donePINIT AINIT CINIT SSLOK SSLERR3FLUSH3WCH_A3WCH_B3RSH_A3RSH_B3RSC_A3RSC_B3RSKEA3RSKEB3RCR_A3RCR_B3RSD_A3RSD_B3WCC_A3WCC_B3WCC_C3WCC_D3WCKEA3WCKEB3WCV_A3WCV_B3WCCSA3WCCSB3WFINA3WFINB3RCCSA3RCCSB3RFINA3RFINB3WHR_A3WHR_B3WHR_C3RCH_A3RCH_B3RCH_C3WSH_A3WSH_B3WSC_A3WSC_B3WSKEA3WSKEB3WCR_A3WCR_B3WSD_A3WSD_B3RCC_A3RCC_B3RCKEA3RCKEB3RCV_A3RCV_B23WCHA23WCHB23RSHA23RCHA23RCHBDRCHVADRCHVBDWCHVADWCHVBUNKWN warningfatalWFUCNUMBMDFHFNCBCUCCRCECUIPDCROCAADDECYERPVISIEUSNRUECOUNBRBHUPUKclose notifyunexpected_messagebad record macdecompression failurehandshake failureno certificatebad certificateunsupported certificatecertificate revokedcertificate expiredcertificate unknownillegal parameterdecryption failedrecord overflowunknown CAaccess denieddecode errordecrypt errorexport restrictionprotocol versioninsufficient securityinternal erroruser canceledno renegotiationunsupported extensioncertificate unobtainableunrecognized namebad certificate status responsebad certificate hash valueunknown PSK identityRHRBRD.\ssl\ssl_rsa.cSERVERINFO FOR os.length <= (int)sizeof(ret->session_id).\ssl\ssl_asn1.c.\ssl\ssl_txt.cSSL-Session: DTLSv1-bad Protocol : %s Cipher : %06lX Cipher : %04lX Cipher : %s Session-ID: %02X Session-ID-ctx: Master-Key: Key-Arg : PSK identity: %s PSK identity hint: SRP username: TLS session ticket lifetime hint: %ld (seconds) TLS session ticket: Compression: %d Compression: %d (%s) Start Time: %ld Timeout : %ld (sec) Verify return code: %ld (%s) RSA-SHA1RSA-SHA1-2DSA-SHA1DSA-SHA1-oldDSS1dss1     ( 0 8 D @P @\ t e S T T xT pT Ȁ @؀   @,8 D  `t`|ȁ0ԁp P $4Dno_ssl2no_ssl3no_tls1no_tls1_1no_tls1_2bugsno_compecdh_singleno_ticketserverpreflegacy_renegotiationlegacy_server_connectno_resumption_on_renegno_legacy_server_connectstrictSessionTicketEmptyFragmentsBugsCompressionServerPreferenceNoResumptionOnRenegotiationDHSingleECDHSingleUnsafeLegacyRenegotiationSignatureAlgorithmssigalgsClientSignatureAlgorithmsclient_sigalgsCurvescurvesECDHParametersnamed_curveCipherStringcipherProtocolOptionsCertificatecertPrivateKeykeyServerInfoFileDHParametersdhparamautomaticauto.\ssl\ssl_conf.c, value=cmd=ssl.\ssl\bio_ssl.cCHECK_SUITEB_CIPHER_LISTCLIENT_CERTIFICATECLIENT_FINISHEDCLIENT_HELLOCLIENT_MASTER_KEYd2i_SSL_SESSIONdo_dtls1_writeDO_SSL3_WRITEdtls1_acceptDTLS1_ADD_CERT_TO_BUFDTLS1_BUFFER_RECORDdtls1_check_timeout_numdtls1_client_hellodtls1_connectDTLS1_GET_HELLO_VERIFYdtls1_get_messageDTLS1_GET_MESSAGE_FRAGMENTdtls1_get_recorddtls1_handle_timeoutdtls1_heartbeatdtls1_output_cert_chainDTLS1_PREPROCESS_FRAGMENTDTLS1_PROCESS_BUFFERED_RECORDSDTLS1_PROCESS_OUT_OF_SEQ_MESSAGEDTLS1_PROCESS_RECORDdtls1_read_bytesdtls1_read_faileddtls1_send_certificate_requestdtls1_send_client_certificatedtls1_send_client_key_exchangedtls1_send_client_verifyDTLS1_SEND_HELLO_VERIFY_REQUESTdtls1_send_server_certificatedtls1_send_server_hellodtls1_send_server_key_exchangedtls1_write_app_data_bytesGET_CLIENT_FINISHEDGET_CLIENT_HELLOGET_CLIENT_MASTER_KEYGET_SERVER_FINISHEDGET_SERVER_HELLOGET_SERVER_STATIC_DH_KEYGET_SERVER_VERIFYi2d_SSL_SESSIONREAD_NREQUEST_CERTIFICATESERVER_FINISHSERVER_HELLOSERVER_VERIFYssl23_acceptSSL23_CLIENT_HELLOssl23_connectSSL23_GET_CLIENT_HELLOSSL23_GET_SERVER_HELLOssl23_peekssl23_readssl23_writessl2_acceptssl2_connectssl2_enc_initssl2_generate_key_materialssl2_peekssl2_readSSL2_READ_INTERNALssl2_set_certificatessl2_writessl3_acceptSSL3_ADD_CERT_TO_BUFssl3_callback_ctrlssl3_change_cipher_statessl3_check_cert_and_algorithmssl3_check_client_helloSSL3_CHECK_FINISHEDssl3_client_hellossl3_connectssl3_ctrlssl3_ctx_ctrlssl3_digest_cached_recordsssl3_do_change_cipher_specssl3_encSSL3_GENERATE_KEY_BLOCKssl3_generate_master_secretssl3_get_certificate_requestssl3_get_cert_statusssl3_get_cert_verifyssl3_get_client_certificatessl3_get_client_hellossl3_get_client_key_exchangessl3_get_finishedssl3_get_key_exchangessl3_get_messagessl3_get_new_session_ticketssl3_get_next_protoSSL3_GET_RECORDssl3_get_server_certificatessl3_get_server_donessl3_get_server_hellossl3_handshake_macSSL3_NEW_SESSION_TICKETssl3_output_cert_chainssl3_peekssl3_read_bytesssl3_read_nssl3_send_certificate_requestssl3_send_client_certificatessl3_send_client_key_exchangessl3_send_client_verifyssl3_send_server_certificatessl3_send_server_hellossl3_send_server_key_exchangessl3_setup_key_blockssl3_setup_read_bufferssl3_setup_write_bufferssl3_write_bytesssl3_write_pendingssl_add_cert_chainSSL_ADD_CERT_TO_BUFssl_add_clienthello_renegotiate_extssl_add_clienthello_tlsextssl_add_clienthello_use_srtp_extSSL_add_dir_cert_subjects_to_stackSSL_add_file_cert_subjects_to_stackssl_add_serverhello_renegotiate_extssl_add_serverhello_tlsextssl_add_serverhello_use_srtp_extssl_bad_methodssl_build_cert_chainssl_bytes_to_cipher_listssl_cert_dupssl_cert_instSSL_CERT_INSTANTIATEssl_cert_newSSL_check_private_keySSL_CHECK_SERVERHELLO_TLSEXTssl_check_srvr_ecc_cert_and_algSSL_CIPHER_PROCESS_RULESTRSSL_CIPHER_STRENGTH_SORTSSL_clearSSL_COMP_add_compression_methodSSL_CONF_cmdssl_create_cipher_listSSL_ctrlSSL_CTX_check_private_keySSL_CTX_MAKE_PROFILESSSL_CTX_newSSL_CTX_set_cipher_listSSL_CTX_set_client_cert_engineSSL_CTX_set_purposeSSL_CTX_set_session_id_contextSSL_CTX_set_ssl_versionSSL_CTX_set_trustSSL_CTX_use_certificateSSL_CTX_use_certificate_ASN1SSL_CTX_use_certificate_chain_fileSSL_CTX_use_certificate_fileSSL_CTX_use_PrivateKeySSL_CTX_use_PrivateKey_ASN1SSL_CTX_use_PrivateKey_fileSSL_CTX_use_psk_identity_hintSSL_CTX_use_RSAPrivateKeySSL_CTX_use_RSAPrivateKey_ASN1SSL_CTX_use_RSAPrivateKey_fileSSL_CTX_use_serverinfoSSL_CTX_use_serverinfo_fileSSL_do_handshakessl_get_new_sessionssl_get_prev_sessionSSL_GET_SERVER_CERT_INDEXSSL_GET_SERVER_SEND_CERTssl_get_server_send_pkeyssl_get_sign_pkeyssl_init_wbio_bufferSSL_load_client_CA_fileSSL_newssl_parse_clienthello_renegotiate_extssl_parse_clienthello_tlsextssl_parse_clienthello_use_srtp_extssl_parse_serverhello_renegotiate_extssl_parse_serverhello_tlsextssl_parse_serverhello_use_srtp_extSSL_peekssl_prepare_clienthello_tlsextssl_prepare_serverhello_tlsextSSL_readSSL_RSA_PRIVATE_DECRYPTSSL_RSA_PUBLIC_ENCRYPTSSL_SCAN_CLIENTHELLO_TLSEXTSSL_SCAN_SERVERHELLO_TLSEXTssl_session_dupSSL_SESSION_newSSL_SESSION_print_fpapp data in handshakeSSL_SESSION_set1_id_contextattempt to reuse session in different contextssl_sess_cert_newbad alert recordSSL_SET_CERTbad authentication typeSSL_set_cipher_listbad change cipher specSSL_set_fdbad checksumSSL_SET_PKEYbad dataSSL_set_purposebad data returned by callbackSSL_set_rfdbad decompressionSSL_set_sessionbad dh g lengthSSL_set_session_id_contextbad dh g valueSSL_set_session_ticket_extbad dh pub key lengthSSL_set_trustbad dh pub key valueSSL_set_wfdbad dh p lengthSSL_shutdownbad dh p valueSSL_SRP_CTX_initbad digest lengthssl_undefined_const_functionbad dsa signaturessl_undefined_functionbad ecc certssl_undefined_void_functionbad ecdsa signatureSSL_use_certificatebad ecpointSSL_use_certificate_ASN1bad handshake lengthSSL_use_certificate_filebad hello requestSSL_use_PrivateKeybad lengthSSL_use_PrivateKey_ASN1bad mac decodeSSL_use_PrivateKey_filebad mac lengthSSL_use_psk_identity_hintbad message typeSSL_use_RSAPrivateKeybad packet lengthSSL_use_RSAPrivateKey_ASN1bad protocol version numberSSL_use_RSAPrivateKey_filebad psk identity hint lengthssl_verify_cert_chainbad response argumentSSL_writebad rsa decrypttls12_check_peer_sigalgbad rsa encrypttls1_cert_verify_macbad rsa e lengthtls1_change_cipher_statebad rsa modulus lengthTLS1_CHECK_SERVERHELLO_TLSEXTbad rsa signaturetls1_encbad signaturetls1_export_keying_materialbad srp a lengthTLS1_GET_CURVELISTbad srp b lengthtls1_heartbeatbad srp g lengthTLS1_PREPARE_CLIENTHELLO_TLSEXTbad srp n lengthTLS1_PREPARE_SERVERHELLO_TLSEXTbad srp parameterstls1_prfbad srp s lengthtls1_setup_key_blockbad srtp mki valuetls1_set_server_sigalgsbad srtp protection profile listWRITE_PENDINGbad ssl filetypebad ssl session id lengthbad statebad valuebad write retrybio not setblock cipher pad is wrongbn libca dn length mismatchca dn too longccs received earlycertificate verify failedcert cb errorcert length mismatchchallenge is differentcipher code wrong lengthcipher or hash unavailablecipher table src errorclienthello tlsextcompressed length too longcompression disabledcompression failurecompression id not within private rangecompression library errorconnection id is differentconnection type not setcookie mismatchdata between ccs and finisheddata length too longdecryption failed or bad record macdh key too smalldh public value length is wrongdigest check faileddtls message too bigduplicate compression idecc cert not for key agreementecc cert not for signingecc cert should have rsa signatureecc cert should have sha1 signatureecdh required for suiteb modeecgroup too large for cipherempty srtp protection profile listencrypted length too longerror generating tmp rsa keyerror in received cipher listexcessive message sizeextra data in messagegot a fin before a ccsgot next proto before a ccsgot next proto without seeing extensionhttps proxy requesthttp requestillegal paddingillegal Suite B digestinappropriate fallbackinconsistent compressioninvalid challenge lengthinvalid commandinvalid compression algorithminvalid null cmd nameinvalid purposeinvalid serverinfo datainvalid srp usernameinvalid status responseinvalid ticket keys lengthinvalid trustkey arg too longkrb5krb5 client cc principal (no tkt?)krb5 client get credkrb5 client initkrb5 client mk_req (expired tkt?)krb5 server bad ticketkrb5 server initkrb5 server rd_req (keytab perms?)krb5 server tkt expiredkrb5 server tkt not yet validkrb5 server tkt skewlength mismatchlength too shortlibrary buglibrary has no ciphersmessage too longmissing dh dsa certmissing dh keymissing dh rsa certmissing dsa signing certmissing ecdh certmissing ecdsa signing certmissing export tmp dh keymissing export tmp rsa keymissing rsa certificatemissing rsa encrypting certmissing rsa signing certcan't find SRP server parammissing tmp dh keymissing tmp ecdh keymissing tmp rsa keymissing tmp rsa pkeymissing verify messagemultiple sgc restartsnon sslv2 initial packetno certificates returnedno certificate assignedno certificate returnedno certificate setno certificate specifiedno ciphers availableno ciphers passedno ciphers specifiedno cipher listno cipher matchno client cert methodno client cert receivedno compression specifiedPeer haven't sent GOST certificate, required for selected ciphersuiteno method specifiedno pem extensionsno privatekeyno private key assignedno protocols availableno publickeydigest requred for handshake isn't computedno shared cipherno shared sigature algorithmsno srtp profilesno verify callbacknull ssl ctxnull ssl method passedold session cipher not returnedold session compression algorithm not returnedonly DTLS 1.2 allowed in Suite B modeonly TLS 1.2 allowed in Suite B modeonly tls allowed in fips modeopaque PRF input too longpacket length too longparse tlsextpath too longpeer did not return a certificatepeer errorpeer error certificatepeer error no certificatepeer error no cipherpeer error unsupported certificate typepem name bad prefixpem name too shortpre mac length too longproblems mapping cipher functionsprotocol is shutdownpsk identity not foundpsk no client cbpsk no server cbpublic key encrypt errorpublic key is not rsapublic key not rsaread bio not setread timeout expiredread wrong packet typerecord length mismatchrecord too largerecord too smallrenegotiate ext too longrenegotiation encoding errrenegotiation mismatchrequired cipher missingrequired compresssion algorithm missingreuse cert length not zeroreuse cert type not zeroreuse cipher list not zeroscsv received when renegotiatingserverhello tlsextsession id context uninitializedshort readshutdown while in initsignature algorithms errorsignature for non signing certificateerror with the srp paramssrtp could not allocate profilessrtp protection profile list too longsrtp unknown protection profilessl23 doing session id reusessl2 connection id too longssl3 ext invalid ecpointformatssl3 ext invalid servernamessl3 ext invalid servername typessl3 session id too longssl3 session id too shortsslv3 alert bad certificatesslv3 alert bad record macsslv3 alert certificate expiredsslv3 alert certificate revokedsslv3 alert certificate unknownsslv3 alert decompression failuresslv3 alert handshake failuresslv3 alert illegal parametersslv3 alert no certificatesslv3 alert unexpected messagesslv3 alert unsupported certificatessl ctx has no default ssl versionssl handshake failuressl library has no ciphersssl session id callback failedssl session id conflictssl session id context too longssl session id has bad lengthssl session id is differenttlsv1 alert access deniedtlsv1 alert decode errortlsv1 alert decryption failedtlsv1 alert decrypt errortlsv1 alert export restrictiontlsv1 alert inappropriate fallbacktlsv1 alert insufficient securitytlsv1 alert internal errortlsv1 alert no renegotiationtlsv1 alert protocol versiontlsv1 alert record overflowtlsv1 alert unknown catlsv1 alert user cancelledtlsv1 bad certificate hash valuetlsv1 bad certificate status responsetlsv1 certificate unobtainabletlsv1 unrecognized nametlsv1 unsupported extensiontls client cert req with anon cipherpeer does not accept heartbeatsheartbeat request already pendingtls illegal exporter labeltls invalid ecpointformat listtoo many warn alertstls peer did not respond with certificate listtls rsa encrypted value length is wrongtried to use unsupported cipherunable to decode dh certsunable to decode ecdh certsunable to extract public keyunable to find dh parametersunable to find ecdh parametersunable to find public key parametersunable to find ssl methodunable to load ssl2 md5 routinesunable to load ssl3 md5 routinesunable to load ssl3 sha1 routinesunexpected messageunexpected recorduninitializedunknown alert typeunknown certificate typeunknown cipher returnedunknown cipher typeunknown cmd nameunknown digestunknown key exchange typeunknown pkey typeunknown protocolunknown remote error typeunknown ssl versionunsafe legacy renegotiation disabledunsupported cipherunsupported compression algorithmunsupported digest typeunsupported elliptic curveunsupported protocolunsupported ssl versionunsupported status typeuse srtp not negotiatedwrite bio not setwrong certificate typewrong cipher returnedwrong curvewrong message typewrong number of key bitswrong signature lengthwrong signature sizewrong signature typewrong ssl versionwrong version numberx509 libx509 verification setup problems.\ssl\t1_reneg.c!expected_len || s->s3->previous_client_finished_len!expected_len || s->s3->previous_server_finished_len.\ssl\tls_srp.c(H@RSDSQ69M.q6D:\CFILES\Projects\WinSSL\openssl-1.0.2k\out32dll\ssleay32.pdbAAy%!W!k!""#XRAh0P{Kf  g KnhKP@pав0`дilLТФP P0N!$$$`O%%(@'p'`(p( )*0*P*pPK,//0P0034 50R567 7n080990:`Pл@; 0PPa0 0@' %knk np0kmp$&P(n*@*66h 8p9p;0':@k&p--P.@Oih`(@;PM88L70`P9 *`6 9&'@n` Pp(*+p6 0`68@%P`%p`kh* 8ikpihhihphP(1((hPf0(6:6ee( foop10P-0.-P  0   p00  ``0 5k@.m-@8`-P!P0$0 p k`$P.PE004p ,@@p;pо# 5/@`.@ P_i&=R`u=Tdx*Ley1F[q";Nf},@\u1Idu:Ut*Jd}3Ri 8Lh0Lf7Nj{ "2DYu@Vq"+<DTo .E\x 2Jcy/GWn-BVl|%5Qi{  7M[kv/;Kf 8Pj"8Kc{ '3<F[i~ #9H^rxy{ont ,-0'KNL}\um|zsMIwyk{  5v$ hb&.G;CDH=Ee %~Si !UQJ"#$%&'W()*+,|-.`/cj0367~89:;<}/(>?d"#@lA<>BgADEFGxHIJKLMN7OPf4!QqRSTURV +)WXY213?@Z[a ]^_O`abcdefghij*kmnopqrstu98:T]Vvw SSLEAY32.dllBIO_f_sslBIO_new_buffer_ssl_connectBIO_new_sslBIO_new_ssl_connectBIO_ssl_copy_session_idBIO_ssl_shutdownDTLS_client_methodDTLS_methodDTLS_server_methodDTLSv1_2_client_methodDTLSv1_2_methodDTLSv1_2_server_methodDTLSv1_client_methodDTLSv1_methodDTLSv1_server_methodERR_load_SSL_stringsPEM_read_SSL_SESSIONPEM_read_bio_SSL_SESSIONPEM_write_SSL_SESSIONPEM_write_bio_SSL_SESSIONSRP_Calc_A_paramSRP_generate_client_master_secretSRP_generate_server_master_secretSSL_CIPHER_descriptionSSL_CIPHER_findSSL_CIPHER_get_bitsSSL_CIPHER_get_idSSL_CIPHER_get_nameSSL_CIPHER_get_versionSSL_COMP_add_compression_methodSSL_COMP_free_compression_methodsSSL_COMP_get_compression_methodsSSL_COMP_get_nameSSL_COMP_set0_compression_methodsSSL_CONF_CTX_clear_flagsSSL_CONF_CTX_finishSSL_CONF_CTX_freeSSL_CONF_CTX_newSSL_CONF_CTX_set1_prefixSSL_CONF_CTX_set_flagsSSL_CONF_CTX_set_sslSSL_CONF_CTX_set_ssl_ctxSSL_CONF_cmdSSL_CONF_cmd_argvSSL_CONF_cmd_value_typeSSL_CTX_SRP_CTX_freeSSL_CTX_SRP_CTX_initSSL_CTX_add_client_CASSL_CTX_add_client_custom_extSSL_CTX_add_server_custom_extSSL_CTX_add_sessionSSL_CTX_callback_ctrlSSL_CTX_check_private_keySSL_CTX_ctrlSSL_CTX_flush_sessionsSSL_CTX_freeSSL_CTX_get0_certificateSSL_CTX_get0_paramSSL_CTX_get0_privatekeySSL_CTX_get_cert_storeSSL_CTX_get_client_CA_listSSL_CTX_get_client_cert_cbSSL_CTX_get_ex_dataSSL_CTX_get_ex_new_indexSSL_CTX_get_info_callbackSSL_CTX_get_quiet_shutdownSSL_CTX_get_ssl_methodSSL_CTX_get_timeoutSSL_CTX_get_verify_callbackSSL_CTX_get_verify_depthSSL_CTX_get_verify_modeSSL_CTX_load_verify_locationsSSL_CTX_newSSL_CTX_remove_sessionSSL_CTX_sess_get_get_cbSSL_CTX_sess_get_new_cbSSL_CTX_sess_get_remove_cbSSL_CTX_sess_set_get_cbSSL_CTX_sess_set_new_cbSSL_CTX_sess_set_remove_cbSSL_CTX_sessionsSSL_CTX_set1_paramSSL_CTX_set_alpn_protosSSL_CTX_set_alpn_select_cbSSL_CTX_set_cert_cbSSL_CTX_set_cert_storeSSL_CTX_set_cert_verify_callbackSSL_CTX_set_cipher_listSSL_CTX_set_client_CA_listSSL_CTX_set_client_cert_cbSSL_CTX_set_client_cert_engineSSL_CTX_set_cookie_generate_cbSSL_CTX_set_cookie_verify_cbSSL_CTX_set_default_passwd_cbSSL_CTX_set_default_passwd_cb_userdataSSL_CTX_set_default_verify_pathsSSL_CTX_set_ex_dataSSL_CTX_set_generate_session_idSSL_CTX_set_info_callbackSSL_CTX_set_msg_callbackSSL_CTX_set_next_proto_select_cbSSL_CTX_set_next_protos_advertised_cbSSL_CTX_set_psk_client_callbackSSL_CTX_set_psk_server_callbackSSL_CTX_set_purposeSSL_CTX_set_quiet_shutdownSSL_CTX_set_session_id_contextSSL_CTX_set_srp_cb_argSSL_CTX_set_srp_client_pwd_callbackSSL_CTX_set_srp_passwordSSL_CTX_set_srp_strengthSSL_CTX_set_srp_usernameSSL_CTX_set_srp_username_callbackSSL_CTX_set_srp_verify_param_callbackSSL_CTX_set_ssl_versionSSL_CTX_set_timeoutSSL_CTX_set_tlsext_use_srtpSSL_CTX_set_tmp_dh_callbackSSL_CTX_set_tmp_ecdh_callbackSSL_CTX_set_tmp_rsa_callbackSSL_CTX_set_trustSSL_CTX_set_verifySSL_CTX_set_verify_depthSSL_CTX_use_PrivateKeySSL_CTX_use_PrivateKey_ASN1SSL_CTX_use_PrivateKey_fileSSL_CTX_use_RSAPrivateKeySSL_CTX_use_RSAPrivateKey_ASN1SSL_CTX_use_RSAPrivateKey_fileSSL_CTX_use_certificateSSL_CTX_use_certificate_ASN1SSL_CTX_use_certificate_chain_fileSSL_CTX_use_certificate_fileSSL_CTX_use_psk_identity_hintSSL_CTX_use_serverinfoSSL_CTX_use_serverinfo_fileSSL_SESSION_freeSSL_SESSION_get0_peerSSL_SESSION_get_compress_idSSL_SESSION_get_ex_dataSSL_SESSION_get_ex_new_indexSSL_SESSION_get_idSSL_SESSION_get_timeSSL_SESSION_get_timeoutSSL_SESSION_newSSL_SESSION_printSSL_SESSION_print_fpSSL_SESSION_set1_id_contextSSL_SESSION_set_ex_dataSSL_SESSION_set_timeSSL_SESSION_set_timeoutSSL_SRP_CTX_freeSSL_SRP_CTX_initSSL_acceptSSL_add_client_CASSL_add_dir_cert_subjects_to_stackSSL_add_file_cert_subjects_to_stackSSL_alert_desc_stringSSL_alert_desc_string_longSSL_alert_type_stringSSL_alert_type_string_longSSL_cache_hitSSL_callback_ctrlSSL_certs_clearSSL_check_chainSSL_check_private_keySSL_clearSSL_connectSSL_copy_session_idSSL_ctrlSSL_do_handshakeSSL_dupSSL_dup_CA_listSSL_export_keying_materialSSL_extension_supportedSSL_freeSSL_get0_alpn_selectedSSL_get0_next_proto_negotiatedSSL_get0_paramSSL_get1_sessionSSL_get_SSL_CTXSSL_get_certificateSSL_get_cipher_listSSL_get_ciphersSSL_get_client_CA_listSSL_get_current_cipherSSL_get_current_compressionSSL_get_current_expansionSSL_get_default_timeoutSSL_get_errorSSL_get_ex_dataSSL_get_ex_data_X509_STORE_CTX_idxSSL_get_ex_new_indexSSL_get_fdSSL_get_finishedSSL_get_info_callbackSSL_get_peer_cert_chainSSL_get_peer_certificateSSL_get_peer_finishedSSL_get_privatekeySSL_get_psk_identitySSL_get_psk_identity_hintSSL_get_quiet_shutdownSSL_get_rbioSSL_get_read_aheadSSL_get_rfdSSL_get_selected_srtp_profileSSL_get_servernameSSL_get_servername_typeSSL_get_sessionSSL_get_shared_ciphersSSL_get_shared_sigalgsSSL_get_shutdownSSL_get_sigalgsSSL_get_srp_NSSL_get_srp_gSSL_get_srp_userinfoSSL_get_srp_usernameSSL_get_srtp_profilesSSL_get_ssl_methodSSL_get_verify_callbackSSL_get_verify_depthSSL_get_verify_modeSSL_get_verify_resultSSL_get_versionSSL_get_wbioSSL_get_wfdSSL_has_matching_session_idSSL_is_serverSSL_library_initSSL_load_client_CA_fileSSL_load_error_stringsSSL_newSSL_peekSSL_pendingSSL_readSSL_renegotiateSSL_renegotiate_abbreviatedSSL_renegotiate_pendingSSL_rstate_stringSSL_rstate_string_longSSL_select_next_protoSSL_set1_paramSSL_set_SSL_CTXSSL_set_accept_stateSSL_set_alpn_protosSSL_set_bioSSL_set_cert_cbSSL_set_cipher_listSSL_set_client_CA_listSSL_set_connect_stateSSL_set_debugSSL_set_ex_dataSSL_set_fdSSL_set_generate_session_idSSL_set_info_callbackSSL_set_msg_callbackSSL_set_psk_client_callbackSSL_set_psk_server_callbackSSL_set_purposeSSL_set_quiet_shutdownSSL_set_read_aheadSSL_set_rfdSSL_set_sessionSSL_set_session_id_contextSSL_set_session_secret_cbSSL_set_session_ticket_extSSL_set_session_ticket_ext_cbSSL_set_shutdownSSL_set_srp_server_paramSSL_set_srp_server_param_pwSSL_set_ssl_methodSSL_set_stateSSL_set_tlsext_use_srtpSSL_set_tmp_dh_callbackSSL_set_tmp_ecdh_callbackSSL_set_tmp_rsa_callbackSSL_set_trustSSL_set_verifySSL_set_verify_depthSSL_set_verify_resultSSL_set_wfdSSL_shutdownSSL_srp_server_param_with_usernameSSL_stateSSL_state_stringSSL_state_string_longSSL_use_PrivateKeySSL_use_PrivateKey_ASN1SSL_use_PrivateKey_fileSSL_use_RSAPrivateKeySSL_use_RSAPrivateKey_ASN1SSL_use_RSAPrivateKey_fileSSL_use_certificateSSL_use_certificate_ASN1SSL_use_certificate_fileSSL_use_psk_identity_hintSSL_versionSSL_wantSSL_writeSSLv23_client_methodSSLv23_methodSSLv23_server_methodSSLv2_client_methodSSLv2_methodSSLv2_server_methodSSLv3_client_methodSSLv3_methodSSLv3_server_methodTLSv1_1_client_methodTLSv1_1_methodTLSv1_1_server_methodTLSv1_2_client_methodTLSv1_2_methodTLSv1_2_server_methodTLSv1_client_methodTLSv1_methodTLSv1_server_methodd2i_SSL_SESSIONi2d_SSL_SESSIONssl3_ciphersH80* 6Z0Vf~$>F B4on{vx  8;F  +% x N !" o PNz.o l q j  O ^   R<b{  W}|k m ] M<vD/= bA<;z Z HINm_!03" c CBxyY9 / P1[Ugmr   L< R]Tx 4 R 0` Nx?%  ~ B w5UCAJb:|zlurtvm 2 V G ?| ID ]onpL YUW {wy proq{:;68t'%#CXz VM9+0I>ES 0{J$%[k uv UNh, 8LIBEAY32.dll__iob_func{fprintf_time32memmove<strncpymemcpymemset;strncmp/strchrv_errnoabort_stricmp_strnicmpMSVCR120.dllP_crt_debugger_hook__crtUnhandledException__crtTerminateProcesso__CppXcptFilter_amsg_exitfree_malloc_crt _initterm _initterm_e_lock_unlock._calloc_crt__dllonexit:_onexit__clean_type_info_names_internalz_except_handler4_common SetLastErrorGetSystemTime]SystemTimeToFileTimePGetLastErrorgIsDebuggerPresentmIsProcessorFeaturePresent!EncodePointerDecodePointer-QueryPerformanceCounter GetCurrentProcessIdGetCurrentThreadIdGetSystemTimeAsFileTimeDisableThreadLibraryCallsKERNEL32.dll8 08 08A08A08A08 A0p8 A0p8A0p9A0p(9A0p@9A0L9A0p`9/@0l90@091@092@093@094@0950960970:80:90(::08:; 0D:<@0T:=0d:>@0|:?@0:@@0:A0:B0:C0:D0;E0;F00;g@0H;h0`;i0x;j0;k0;l@0;m0;D;D< @< @,<0<<0T<0l<0<0<0<A0<A0p<@0<0<A0=A0=A0(=A0<=A0P=A0`=@t= @=@= @=@= @=@> @0>@L> @h>@> @>@ 0>@A0>@A0p>@@0>@0?@ 0 ?@A04?@A0pP? @@0h? @0?   0?  A0?  A0p? @0? 0? 0?A0@A0p(@@0@@0X@ 0h@A0x@A0p@@0@0@A0p@A0p@A0pA@0A@00A@0HA 0\A!0tA"0A#@@A$@ A%@@A&@ A'@B( ,B) @DB*  \B+@@|B,@ @B-@@B.@ @B/@B0 @C1 @0C2  @Pp@$LCTC Ц666666666666666666666666666666666666666666666666\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\lCpCtCДPР@p @KKp ЦДPР@p @KKp ЦДPР@p @KKp Ц@tДPР@p @KKp  пДPР@p @KKp  п?SSV         SUWWWWW @` P d4hefДgh @j\klwؕm,nPpopȖ01 2HLpi̗qMrDspt<ؘuv4w\xyz{ [8\`]^s_ `8ad|}~țԛ 8H\yxԜW8P3dĝ4ܝ 4y$tH\|N5=Ğ>BC$vH6hbȟ 8cPdl|ȠuT0U@`xeHEС< T!h"#$%ܢ&',<P\(t~ܣ} (D\xf7ĤܤZ 8TpХ$K4LdJȦܦ0SyD@lxgȧاX@{h)G̨(4LhЩ $<Pd8ت*O0PLQhVܫY8Lp|hiجjkl@`+A?@ح,4Pl̮0Ll̯-. /@`|԰$>/48XLt.бBZY(WPXpVm̲no,Ldܳ94:Ttܴ$8L\pp̵ܵ  <puRPxF;ȶIq,DXpzķ ܷr     8 D@p ̂P܂`pP `0p@pXlԃ,D` 0Є@P`$pD`؅4H@\x Ȇ؆0@P `p4LXdp|ćЇ,@ \|00@P ̈P؈P@` ,@Dp`̉0D `t   Њ0 @  P 0` <p \ |   ԋ    $0< T h|PȌ0p  ,P`t@ č ܍  `  00 @Xpx`p@ ЎP ܎`  $ 0PL dp    ܏P    @ d   Ԑ  0 0Ph@ P   đ` p  , D \d`Вp<Hh   ē   L   00L |0  `@@ D`0P ܖ@` 4p T   ؗ ( X    (Dl  ̙  Lt0@̚0  L@ N@D0 H`04VS_VERSION_INFO  ?BStringFileInfo040904b0z-CompanyNameThe OpenSSL Project, http://www.openssl.org/VFileDescriptionOpenSSL Shared Library.FileVersion1.0.2k2 InternalNamessleay32B OriginalFilenamessleay32.dllHProductNameThe OpenSSL Toolkit2ProductVersion1.0.2kuLegalCopyrightCopyright 1998-2005 The OpenSSL Project. Copyright 1995-1998 Eric A. Young, Tim J. Hudson. All rights reserved.DVarFileInfo$Translation \010P000i111@:x::;0;4;8;<;@;D;H;L;P;T;X;\;`;d;h;l;p;t;s<<>>?>??? \0<0s000012I222,3(4\444955 6*6 777>889"99 :|:::D;;K<}<=$>>>?0X0C0011 223@3"5b555 66667?888849a99;::::i;;;RN>>>?@4 00 1M1l1455:H;;;k<>=~===>>?m??P<0X00012456K6&777W7#8[8H9O95?U???????`p000 00000 0$0(0,031Q112t2223$3p33334R44*5a55557z8899,:: ;;;"<|<<|=== >k>.?pt~00 112$2\222=3{3,4555*6q6666+7]7778:88939I9w999w::::";d;;; 9>^>>>>X(0s01 2$22233+3O3u3344p5567=77[88888999A:::o;L<<>?3??XF00 1a1112<2a2234 5{5:665777)88z9999:t::;E;;;<==T>>3?W??LW0Y11]333F425-7R7Y7777779;< <<<==9=t====&>>>>44444444444444444444444444444555 55555 5$5(5,5054585<5@5D5H5556666666666;7B7777.8V8889L9S:s::.<<<<<<<<<<<<<<<<<<<<=== ===== =$=(=,=0=4=8=Z>>?X01e3U4[5S6'77888999 99999 9$9(9,90949899#:-:p::;G;;;;t=+?U??,J02[3T5557,7788a99:I;b;i=>L0Q1+2}24(44566,6=6]6n6666 77W=u=====>Q>j>~>>>W?k?|?L&0182a22%3>4H444%6h667m7778909Y99999f:i;;;??R?\?T`01}22222222222;33333A55566;6C6v666667R7Z778A8q8=?<15557Q7k788C88v9N:V:g:x::::::;<<=G>|> `=0N001522344F56677Q8899U::%;X;;;=+=3=Q=a=q======== >>1>A>Q>{?0k00031o13Y56@ 0E6m66D78t9??PT012F56Z78:::A;};;<:<<=============\>m>}>>>>>>?`l0387<7@7D7H7L7a:::X;\;`;d;h;l;p;t;x;|;;;;;;;;;;;;;;;;;[=h====>^>>>????pp0&014r556777777777777777777777778888!9;<<4=8=<=@=D=H=7>>>>>>??l1K1114'7O7{778;;@>f??P01123&3_33 4H444,565555506:6849t9:D:t:::+;{;==>[>>><7111133<3@3m4w4o56 7717A7Q7m7{7777`82999|s112C222222222222222222223444 5%545S5566<#=C==================>>>803344444444506@689::,;6;<1>>g?0?5k55<6F6(797\7v77o88>?0?S?r????<0000J1104^444K6d6n666737=78888.;8;s=k>L0111.2a23$3333y44955688/:4:::D::<<<<7>A>A0G0Q033u44%5K5p5v5556I666}77888&9A999T:[:;;;;;;;;;;;;;;;;;;;<<< <<<<< <$<?\??h000051Q1`1|11122X334&5A56U6_667888'9a99;;C @123J337_:m:{:::::::;;;V??0<0223S4]5+6v66779@:w::;;<=>8>t>i???@H021L123o44::";;;<@<<<= ===/=`=== >G???????Pd0 0$060C0V0h0v000000011@2R33G556:7a7789q99Q:{:::;D;;;<<\===>??`X04071{111Q233U33344455663686c6h66678<8S89499<< ==G>q>>?p090E11Q3r333 44.4Q44&5555]6#77\8|888888P9v9:;;;;;; <<%<*<7 >>>>G>N>U>\>s>z>>>>>>>>>>>>>>?:?T?X?\?`?d?h?|??????????????00 00000 000011H1i11112"2Q2V2]2v22222223T3e33333444 5515>5M555559`:o::y<<<==&=8=J=\=n==========> >>>>>>??????000014181<1@1D1H1L1P111111113335O5T6q678=@====>>?!?+?0?:???I?N?X?]?g?l?v?{?????????????????000'040=0G0T0a0s0|0000000000000011!1'1-13191?1E1K1Q1W1]1c1i1o1u1{1111111111111111111111111222 22222 2$2(2,2024282<2@2D2H2L2P2T2222223 3333!3'3-33393?3E3K3Q3W3]3c3i3o3u3{33333333333333333333333333333444 44444 4$444444455!5'5E5K5Q5W55555555555566 6666$6*60666<6B6H6N6T6Z6`6q6w66666666666667 7777!7'7-73797?7E7K7Q7W7]7c7i7o7u7{77777777777777777777777777888 88888 8$8(8,80888999 99999 9$9(9,9094989<9@9D9H9L9P9T9X9\9`9d9h9l9p9t9x9::::::::::::; ;;;;!;';-;3;9;?;E;K;Q;W;];c;i;o;;;;;;;;;;;;;< <<<<"<(<.<4<:<@d>h>l>p>t>x>|>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 0C000.1112F2r22X33434m444]5556777-8e8{8888 9+99999*:h:;&;7;H;Y;j;;2>>?C???,0M000-111234N44556~99; 8+922333-3<3K3X3]3f333333474O4w444444 55;5Q5s555656V6w66667%8/898C8X8b8l8v8888888::B:;;;;=M????0:0Q02111 2233444444445K5555666 66666:7788D98:<:@:D:H:L:P:T:X:\:`:d:h:l:p:t:x:|:::; ;;;;;#;:;1<<*=2>C>N>>???,(001151?1Z111Y22+345;<;?0001 1111"1(1.141:1@1F1L1R1X1^1d1j1p1v1|111111111111111111111122 2222$2*20262<2B2H2N2T2Z2`2f2l2r2x2~222222222222222222222233333 3&3,32383>3D3J3P3V3\3b3h3n3t3z333333333333333333333334 4444"4(4.444:4@4F4L4R4X4^4d4j4p4v4|444444444444444444444455 5555$5*50565<5B5H5N5T5Z5`5f5l5r5x5~555555555555555555555566666 6&6,62686>6D6J6P6V6\6b6h6n6t6z666666666666666666666667 7777"7(7.747:7@7F7L7R7X7^7d7j7p7v7|777777777777777777777788 8888$8*80868<8B8H8N8T8Z8`8f8l8r8x8~888888888888888888888899999 9&9,92989>9D9J9P9V9\9b9h9n9t9z99999999999: ::W:]:c:i:o:u:|::::::::::::::::;;";+;^;d;j;p;v;|;;;;;;;;;;;;;;;;<<<<<<>>>3>?>`>n>s>>>>>>>>????N?V?[?`?e?k???????? 000.040j00001B111111122-2K2_2e2333$3)3@3O3U3h3}33333 4%414@4I4V444444444455!5>5555555550666666666666777 77777 7$7(7,7074787<7@7D7H7T7X7\7`7d7h7l7p7t7x7|777777777777777777777888 88888 8$8(8,8084888<8@8D8H8L8P8T8X8\8`8@,4444444555 55555 5$5(5,5054585<5@5D5H5L5P5\5`5d5h5l5p5t5x5|55555555555555555555,6064686<6@6D6H6L6P6T6X6\6`6d6h6l6p6t6x6|66666666666666666666666777 77777 7$7(7,707<7@7D7H7L7P7T7X7\7`7d7h7l7p7t7x7|7777777777777777777777777777777888 88888 8,8084888<8@8D8H8L8P8T8X8\8`8d8h8l8p8t8x8|8888888888888888888888888888888999 999 9$9(9,9094989<9@9D9H9L9P9T9X9\9`9d9h9l9p9t9x9|9999999999999999999999999999999: ::::: :$:(:,:0:4:8:<:@:D:H:L:P:T:X:\:`:d:h:l:p:t:x:::::::::::::::::::::::::::::<<<<<<<<<<<<<<<<<=== ===== =$=(=4=8=<=@=D=H=L=P=T=X=\=`=d=h=l=p=t=x=|===============================>>> >>>>$>(>,>0>4>8><>@>D>H>L>P>T>X>\>`>d>h>l>p>t>x>|>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?????? ?$?(?,?0?4?8?4>d>>>>$?T????`D0D0t000141d1111$2T22223D3t333444d4444$5T5ph=x=========>>(>8>H>X>h>x>>>>>>>>>??(?8?H?L?P?X?\?`?h?l?p?x?|????????????????????89D9H9999::8:040d0000$1T11112D2t222343d3333$4T44445D5t555646d6666$7T77778D8t888949d9999$:T::::;D;t;;;<4D>t>>>?4?d????8$0T00001D1t111242d2222$3T33334D4t444545d5555$6T66667D7p7t7x7|777777777788 888888888888999 99999$9(90989<9H9L9P9T9X9\9`9d9l9p9x999999999999:::: :$:(:,:0:4:8:<:D:H:P:X:\:h:l:::::;;; ;;(;,;@;H;;;;;;;;;;;;;;;;;;;;< <<<$<,<4<< >>>$>,>4><>D>L>T>\>d>l>t>|>>>>>>>>>>>>>>>>>? ???$?,?4? 0 && (didx < 0 || didx > sidx) ){ enforce(ln[0 .. sidx] == "250", "Server not ready (response "~ln[0 .. sidx]~")"); break; } } } greet(); if (settings.connectionType == SMTPConnectionType.startTLS) { conn.write("STARTTLS\r\n"); expectStatus(conn, SMTPStatus.serviceReady, "STARTTLS"); auto ctx = createTLSContext(TLSContextKind.client, settings.tlsVersion); ctx.peerValidationMode = settings.tlsValidationMode; if (settings.tlsContextSetup) settings.tlsContextSetup(ctx); conn = createTLSStream(raw_conn, ctx, TLSStreamState.connecting, settings.host, raw_conn.remoteAddress); greet(); } final switch (settings.authType) { case SMTPAuthType.none: break; case SMTPAuthType.plain: logDebug("seding auth"); conn.write("AUTH PLAIN\r\n"); expectStatus(conn, SMTPStatus.serverAuthReady, "AUTH PLAIN"); logDebug("seding auth info"); conn.write(Base64.encode(cast(const(ubyte)[])("\0"~settings.username~"\0"~settings.password))); conn.write("\r\n"); expectStatus(conn, 235, "plain auth info"); logDebug("authed"); break; case SMTPAuthType.login: conn.write("AUTH LOGIN\r\n"); expectStatus(conn, SMTPStatus.serverAuthReady, "AUTH LOGIN"); conn.write(Base64.encode(cast(const(ubyte)[])settings.username) ~ "\r\n"); expectStatus(conn, SMTPStatus.serverAuthReady, "login user name"); conn.write(Base64.encode(cast(const(ubyte)[])settings.password) ~ "\r\n"); expectStatus(conn, 235, "login password"); break; case SMTPAuthType.cramMd5: assert(false, "TODO!"); } conn.write("MAIL FROM:"~addressMailPart(mail.headers["From"])~"\r\n"); expectStatus(conn, SMTPStatus.success, "MAIL FROM"); static immutable rcpt_headers = ["To", "Cc", "Bcc"]; foreach (h; rcpt_headers) { mail.headers.getAll(h, (v) @safe { foreach (a; v.splitter(',').map!(a => a.strip)) { conn.write("RCPT TO:"~addressMailPart(a)~"\r\n"); expectStatus(conn, SMTPStatus.success, "RCPT TO"); } }); } mail.headers.removeAll("Bcc"); conn.write("DATA\r\n"); expectStatus(conn, SMTPStatus.startMailInput, "DATA"); foreach (name, value; mail.headers) { conn.write(name~": "~value~"\r\n"); } conn.write("\r\n"); conn.write(mail.bodyText); conn.write("\r\n.\r\n"); expectStatus(conn, SMTPStatus.success, "message body"); conn.write("QUIT\r\n"); expectStatus(conn, SMTPStatus.serviceClosing, "QUIT"); } /** The following example demonstrates the complete construction of a valid e-mail object with UTF-8 encoding. The Date header, as demonstrated, must be converted with the local timezone using the $(D toRFC822DateTimeString) function. */ unittest { import vibe.inet.message; import std.datetime; void testSmtp(string host, ushort port){ Mail email = new Mail; email.headers["Date"] = Clock.currTime(PosixTimeZone.getTimeZone("America/New_York")).toRFC822DateTimeString(); // uses UFCS email.headers["Sender"] = "Domain.com Contact Form "; email.headers["From"] = "John Doe "; email.headers["To"] = "Customer Support "; email.headers["Subject"] = "My subject"; email.headers["Content-Type"] = "text/plain;charset=utf-8"; email.bodyText = "This message can contain utf-8 [κόσμε], and\nwill be displayed properly in mail clients with \\n line endings."; auto smtpSettings = new SMTPClientSettings(host, port); sendMail(smtpSettings, email); } // testSmtp("localhost", 25); } private void expectStatus(InputStream)(InputStream conn, int expected_status, string in_response_to) if (isInputStream!InputStream) { // TODO: make the full status message available in the exception // message or for general use (e.g. determine server features) string ln; sizediff_t sp, dsh; do { ln = () @trusted { return cast(string)conn.readLine(); } (); sp = ln.indexOf(' '); if (sp < 0) sp = ln.length; dsh = ln.indexOf('-'); } while (dsh >= 0 && dsh < sp); auto status = to!int(ln[0 .. sp]); enforce(status == expected_status, "Expected status "~to!string(expected_status)~" in response to "~in_response_to~", got "~to!string(status)~": "~ln[sp .. $]); } private int recvStatus(InputStream conn) { string ln = () @trusted { return cast(string)conn.readLine(); } (); auto sp = ln.indexOf(' '); if( sp < 0 ) sp = ln.length; return to!int(ln[0 .. sp]); } private string addressMailPart(string str) { auto idx = str.indexOf('<'); if( idx < 0 ) return "<"~ str ~">"; str = str[idx .. $]; enforce(str[$-1] == '>', "Malformed email address field: '"~str~"'."); return str; } vibe.d-0.8.2/meson.build000066400000000000000000000074351324361747700150610ustar00rootroot00000000000000project('Vibe.d', 'd', meson_version: '>=0.40', subproject_dir: 'lib/subprojects', license: 'MIT', version: '0.8.2' ) project_soversion = '0' project_version_suffix = '' project_version = meson.project_version() project_version_full = project_version + project_version_suffix source_root = meson.source_root() build_root = meson.build_root() pkgc = import('pkgconfig') # # Dependencies # zlib_dep = dependency('zlib') crypto_dep = dependency('libcrypto') ssl_dep = dependency('libssl') libevent_dep = dependency('libevent') # # Compiler flags # flag_new_openssl_ldc = [] flag_new_openssl_dmd = [] if ssl_dep.version().version_compare('>=1.1') flag_new_openssl_ldc = '-d-version=VibeUseOpenSSL11' flag_new_openssl_dmd = '-version=VibeUseOpenSSL11' endif if meson.get_compiler('d').get_id() == 'llvm' add_global_arguments(['-d-version=VibeLibeventDriver', '-d-version=Have_openssl', '-d-version=Have_diet_ng', flag_new_openssl_ldc], language : 'd') endif if meson.get_compiler('d').get_id() == 'dmd' add_global_arguments(['-version=VibeLibeventDriver', '-version=Have_openssl', '-version=Have_diet_ng', flag_new_openssl_dmd], language : 'd') endif if meson.get_compiler('d').get_id() == 'gnu' error('Vibe.d can not be compiled with GDC at time (2016). Sorry.') endif # # D dependencies # # we need to search for this dependency after setting global compiler flags, because # it may pull in a subproject after which setting global flags is not allowed anymore diet_dep = dependency('diet', fallback: ['diet', 'diet_dep']) # directory where the external dependencies are included from. # Meson will search for this dir in both build_root and source_root subproject_dir = 'lib/subprojects' # Try to find system OpenSSL bindings, if not found, download # a Git copy. openssl_src_dir = '' if run_command('[', '-d', '/usr/include/d/common/deimos/openssl/', ']').returncode() == 0 openssl_src_dir = '/usr/include/d/common' else openssl_src_dir = subproject_dir + '/openssl' if run_command('[', '-d', openssl_src_dir, ']').returncode() != 0 message('Fetching OpenSSL D bindings from Github...') git_get_requests = run_command(['git', 'clone', 'https://github.com/s-ludwig/openssl.git', openssl_src_dir]) if git_get_requests.returncode() != 0 error('Unable to fetch OpenSSL bindings.\n' + git_get_requests.stderr()) endif endif message('Using non-system OpenSSL D bindings.') endif openssl_inc = include_directories(openssl_src_dir) # Try to find system LibEvent bindings, if not found, download # a Git copy. libevent_src_dir = '' if run_command('[', '-d', '/usr/include/d/common/deimos/event2/', ']').returncode() == 0 libevent_src_dir = '/usr/include/d/common' else libevent_src_dir = subproject_dir + '/libevent' if run_command('[', '-d', libevent_src_dir, ']').returncode() != 0 message('Fetching LibEvent bindings from Github...') git_get_requests = run_command(['git', 'clone', 'https://github.com/s-ludwig/libevent.git', libevent_src_dir]) if git_get_requests.returncode() != 0 error('Unable to fetch LibEvent bindings.\n' + git_get_requests.stderr()) endif endif message('Using non-system LibEvent D bindings.') endif libevent_inc = include_directories(libevent_src_dir) # # Modules # # Utils subdir('utils/') # Data subdir('data/') # Core subdir('core/') # Crypto subdir('crypto/') # Stream subdir('stream/') # TextFilter subdir('textfilter/') # INet subdir('inet/') # TLS subdir('tls/') # HTTP subdir('http/') # Mail subdir('mail/') # MongoDB subdir('mongodb/') # Redis subdir('redis/') # Web subdir('web/') vibe.d-0.8.2/mongodb/000077500000000000000000000000001324361747700143335ustar00rootroot00000000000000vibe.d-0.8.2/mongodb/dub.sdl000066400000000000000000000002441324361747700156110ustar00rootroot00000000000000name "mongodb" description "MongoDB database client implementation" dependency "vibe-d:http" version=">=0.0.0" targetType "library" sourcePaths "." importPaths "." vibe.d-0.8.2/mongodb/meson.build000066400000000000000000000046041324361747700165010ustar00rootroot00000000000000# Meson file for Vibe MongoDB vibe_mongodb_src_dir = include_directories('.') vibe_mongodb_src = [ 'vibe/db/mongo/client.d', 'vibe/db/mongo/collection.d', 'vibe/db/mongo/connection.d', 'vibe/db/mongo/cursor.d', 'vibe/db/mongo/database.d', 'vibe/db/mongo/flags.d', 'vibe/db/mongo/mongo.d', 'vibe/db/mongo/sasl.d', 'vibe/db/mongo/settings.d', ] # # Install Includes # install_subdir('vibe/', install_dir: 'include/d/vibe/') # # Build Targets # mongodb_link_with = [vibe_utils_lib, vibe_core_lib, vibe_data_lib, vibe_inet_lib, vibe_stream_lib, vibe_textfilter_lib, vibe_tls_lib, vibe_crypto_lib] # MongoDB database client implementation vibe_mongodb_lib = library('vibe-mongodb', [vibe_mongodb_src], include_directories: [vibe_utils_src_dir, vibe_core_src_dir, vibe_data_src_dir, vibe_inet_src_dir, vibe_stream_src_dir, vibe_textfilter_src_dir, vibe_tls_src_dir, vibe_crypto_src_dir], install: true, link_with: [mongodb_link_with], version: project_version, soversion: project_soversion ) pkgc.generate(name: 'vibe-mongodb', libraries: [vibe_mongodb_lib] + mongodb_link_with, subdirs: 'd/vibe', version: project_version, description: 'MongoDB database client implementation for Vibe.' ) # # Tests # vibe_test_mongodb_exe = executable('vibe-test_mongodb', [vibe_mongodb_src], include_directories: [vibe_utils_src_dir, vibe_core_src_dir, vibe_data_src_dir, vibe_inet_src_dir, vibe_stream_src_dir, vibe_textfilter_src_dir, vibe_tls_src_dir, vibe_crypto_src_dir], dependencies: [zlib_dep, crypto_dep, ssl_dep, libevent_dep], link_with: [mongodb_link_with], d_args: meson.get_compiler('d').unittest_args(), link_args: '-main' ) test('vibe-test_mongodb', vibe_test_mongodb_exe) vibe.d-0.8.2/mongodb/vibe/000077500000000000000000000000001324361747700152605ustar00rootroot00000000000000vibe.d-0.8.2/mongodb/vibe/db/000077500000000000000000000000001324361747700156455ustar00rootroot00000000000000vibe.d-0.8.2/mongodb/vibe/db/mongo/000077500000000000000000000000001324361747700167645ustar00rootroot00000000000000vibe.d-0.8.2/mongodb/vibe/db/mongo/client.d000066400000000000000000000073141324361747700204140ustar00rootroot00000000000000/** MongoClient class doing connection management. Usually this is a main entry point for client code. Copyright: © 2012 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.db.mongo.client; public import vibe.db.mongo.collection; public import vibe.db.mongo.database; import vibe.core.connectionpool; import vibe.core.log; import vibe.db.mongo.connection; import vibe.db.mongo.settings; import core.thread; import std.conv; import std.string; import std.range; /** Represents a connection to a MongoDB server. Note that this class uses a ConnectionPool internally to create and reuse network conections to the server as necessary. It should be reused for all fibers in a thread for optimum performance in high concurrency scenarios. */ final class MongoClient { @safe: private { ConnectionPool!MongoConnection m_connections; } package this(string host, ushort port) { this("mongodb://" ~ host ~ ":" ~ to!string(port) ~ "/?safe=true"); } /** Initializes a MongoDB client using a URL. The URL must be in the form documented at $(LINK http://www.mongodb.org/display/DOCS/Connections) which is: mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] Throws: An exception if the URL cannot be parsed as a valid MongoDB URL. */ package this(string url) { MongoClientSettings settings; auto goodUrl = parseMongoDBUrl(settings, url); if(!goodUrl) throw new Exception("Unable to parse mongodb URL: " ~ url); m_connections = new ConnectionPool!MongoConnection(() @safe { auto ret = new MongoConnection(settings); ret.connect(); return ret; }); // force a connection to cause an exception for wrong URLs lockConnection(); } package this(MongoClientSettings settings) { m_connections = new ConnectionPool!MongoConnection({ auto ret = new MongoConnection(settings); ret.connect(); return ret; }); // force a connection to cause an exception for wrong URLs lockConnection(); } /** Accesses a collection using an absolute path. The full database.collection path must be specified. To access collections using a path relative to their database, use getDatabase in conjunction with MongoDatabase.opIndex. Returns: MongoCollection for the given combined database and collectiion name(path) Examples: --- auto col = client.getCollection("test.collection"); --- */ MongoCollection getCollection(string path) { return MongoCollection(this, path); } /** Returns an object representing the specified database. The returned object allows to access the database entity (which contains a set of collections). There are two main use cases: 1. Accessing collections using a relative path 2. Performing service commands on the database itself Note that there is no performance gain in accessing collections via a relative path compared to getCollection and an absolute path. Returns: MongoDatabase instance representing requested database Examples: --- auto db = client.getDatabase("test"); auto coll = db["collection"]; --- */ MongoDatabase getDatabase(string dbName) { return MongoDatabase(this, dbName); } /** Return a handle to all databases of the server. Returns: An input range of $(D MongoDatabase) objects. Examples: --- auto names = client.getDatabaseNames(); writeln("Current databases are: ", names); --- */ auto getDatabases()() { import std.algorithm : map; return lockConnection.listDatabases() .map!(info => MongoDatabase(this, info.name)); } package auto lockConnection() { return m_connections.lockConnection(); } } vibe.d-0.8.2/mongodb/vibe/db/mongo/collection.d000066400000000000000000000376241324361747700213000ustar00rootroot00000000000000/** MongoCollection class Copyright: © 2012-2016 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.db.mongo.collection; public import vibe.db.mongo.cursor; public import vibe.db.mongo.connection; public import vibe.db.mongo.flags; import vibe.core.log; import vibe.db.mongo.client; import core.time; import std.algorithm : countUntil, find; import std.array; import std.conv; import std.exception; import std.string; import std.typecons : Tuple, tuple; /** Represents a single collection inside a MongoDB. All methods take arbitrary types for Bson arguments. serializeToBson() is implicitly called on them before they are send to the database. The following example shows some possible ways to specify objects. */ struct MongoCollection { private { MongoClient m_client; MongoDatabase m_db; string m_name; string m_fullPath; } this(MongoClient client, string fullPath) @safe { assert(client !is null); m_client = client; auto dotidx = fullPath.indexOf('.'); assert(dotidx > 0, "The collection name passed to MongoCollection must be of the form \"dbname.collectionname\"."); m_fullPath = fullPath; m_db = m_client.getDatabase(fullPath[0 .. dotidx]); m_name = fullPath[dotidx+1 .. $]; } this(ref MongoDatabase db, string name) @safe { assert(db.client !is null); m_client = db.client; m_fullPath = db.name ~ "." ~ name; m_db = db; m_name = name; } /** Returns: Root database to which this collection belongs. */ @property MongoDatabase database() @safe { return m_db; } /** Returns: Name of this collection (excluding the database name). */ @property string name() const @safe { return m_name; } /** Performs an update operation on documents matching 'selector', updating them with 'update'. Throws: Exception if a DB communication error occured. See_Also: $(LINK http://www.mongodb.org/display/DOCS/Updating) */ void update(T, U)(T selector, U update, UpdateFlags flags = UpdateFlags.None) { assert(m_client !is null, "Updating uninitialized MongoCollection."); auto conn = m_client.lockConnection(); ubyte[256] selector_buf = void, update_buf = void; conn.update(m_fullPath, flags, serializeToBson(selector, selector_buf), serializeToBson(update, update_buf)); } /** Inserts new documents into the collection. Note that if the `_id` field of the document(s) is not set, typically using `BsonObjectID.generate()`, the server will generate IDs automatically. If you need to know the IDs of the inserted documents, you need to generate them locally. Throws: Exception if a DB communication error occured. See_Also: $(LINK http://www.mongodb.org/display/DOCS/Inserting) */ void insert(T)(T document_or_documents, InsertFlags flags = InsertFlags.None) { assert(m_client !is null, "Inserting into uninitialized MongoCollection."); auto conn = m_client.lockConnection(); Bson[] docs; Bson bdocs = () @trusted { return serializeToBson(document_or_documents); } (); if( bdocs.type == Bson.Type.Array ) docs = cast(Bson[])bdocs; else docs = () @trusted { return (&bdocs)[0 .. 1]; } (); conn.insert(m_fullPath, flags, docs); } /** Queries the collection for existing documents. If no arguments are passed to find(), all documents of the collection will be returned. See_Also: $(LINK http://www.mongodb.org/display/DOCS/Querying) */ MongoCursor!(T, R, U) find(R = Bson, T, U)(T query, U returnFieldSelector, QueryFlags flags = QueryFlags.None, int num_skip = 0, int num_docs_per_chunk = 0) { assert(m_client !is null, "Querying uninitialized MongoCollection."); return MongoCursor!(T, R, U)(m_client, m_fullPath, flags, num_skip, num_docs_per_chunk, query, returnFieldSelector); } /// ditto MongoCursor!(T, R, typeof(null)) find(R = Bson, T)(T query) { return find!R(query, null); } /// ditto MongoCursor!(Bson, R, typeof(null)) find(R = Bson)() { return find!R(Bson.emptyObject, null); } /** Queries the collection for existing documents. Returns: By default, a Bson value of the matching document is returned, or $(D Bson(null)) when no document matched. For types R that are not Bson, the returned value is either of type $(D R), or of type $(Nullable!R), if $(D R) is not a reference/pointer type. Throws: Exception if a DB communication error or a query error occured. See_Also: $(LINK http://www.mongodb.org/display/DOCS/Querying) */ auto findOne(R = Bson, T, U)(T query, U returnFieldSelector, QueryFlags flags = QueryFlags.None) { import std.traits; import std.typecons; auto c = find!R(query, returnFieldSelector, flags, 0, 1); static if (is(R == Bson)) { foreach (doc; c) return doc; return Bson(null); } else static if (is(R == class) || isPointer!R || isDynamicArray!R || isAssociativeArray!R) { foreach (doc; c) return doc; return null; } else { foreach (doc; c) { Nullable!R ret; ret = doc; return ret; } return Nullable!R.init; } } /// ditto auto findOne(R = Bson, T)(T query) { return findOne!R(query, Bson(null)); } /** Removes documents from the collection. Throws: Exception if a DB communication error occured. See_Also: $(LINK http://www.mongodb.org/display/DOCS/Removing) */ void remove(T)(T selector, DeleteFlags flags = DeleteFlags.None) { assert(m_client !is null, "Removing from uninitialized MongoCollection."); auto conn = m_client.lockConnection(); ubyte[256] selector_buf = void; conn.delete_(m_fullPath, flags, serializeToBson(selector, selector_buf)); } /// ditto void remove()() { remove(Bson.emptyObject); } /** Combines a modify and find operation to a single atomic operation. Params: query = MongoDB query expression to identify the matched document update = Update expression for the matched document returnFieldSelector = Optional map of fields to return in the response Throws: An `Exception` will be thrown if an error occurs in the communication with the database server. See_Also: $(LINK http://docs.mongodb.org/manual/reference/command/findAndModify) */ Bson findAndModify(T, U, V)(T query, U update, V returnFieldSelector) { static struct CMD { string findAndModify; T query; U update; V fields; } CMD cmd; cmd.findAndModify = m_name; cmd.query = query; cmd.update = update; cmd.fields = returnFieldSelector; auto ret = database.runCommand(cmd); if( !ret["ok"].get!double ) throw new Exception("findAndModify failed."); return ret["value"]; } /// ditto Bson findAndModify(T, U)(T query, U update) { return findAndModify(query, update, null); } /** Combines a modify and find operation to a single atomic operation with generic options support. Params: query = MongoDB query expression to identify the matched document update = Update expression for the matched document options = Generic BSON object that contains additional options fields, such as `"new": true` Throws: An `Exception` will be thrown if an error occurs in the communication with the database server. See_Also: $(LINK http://docs.mongodb.org/manual/reference/command/findAndModify) */ Bson findAndModifyExt(T, U, V)(T query, U update, V options) { auto bopt = serializeToBson(options); assert(bopt.type == Bson.Type.object, "The options parameter to findAndModifyExt must be a BSON object."); Bson cmd = Bson.emptyObject; cmd["findAndModify"] = m_name; cmd["query"] = serializeToBson(query); cmd["update"] = serializeToBson(update); bopt.opApply(delegate int(string key, Bson value) @safe { cmd[key] = value; return 0; }); auto ret = database.runCommand(cmd); enforce(ret["ok"].get!double != 0, "findAndModifyExt failed: "~ret["errmsg"].opt!string); return ret["value"]; } /// unittest { import vibe.db.mongo.mongo; void test() { auto coll = connectMongoDB("127.0.0.1").getCollection("test"); coll.findAndModifyExt(["name": "foo"], ["$set": ["value": "bar"]], ["new": true]); } } /** Counts the results of the specified query expression. Throws Exception if a DB communication error occured. See_Also: $(LINK http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-{{count%28%29}}) */ ulong count(T)(T query) { static struct Empty {} static struct CMD { string count; T query; Empty fields; } CMD cmd; cmd.count = m_name; cmd.query = query; auto reply = database.runCommand(cmd); enforce(reply["ok"].opt!double == 1 || reply["ok"].opt!int == 1, "Count command failed: "~reply["errmsg"].opt!string); switch (reply["n"].type) with (Bson.Type) { default: assert(false, "Unsupported data type in BSON reply for COUNT"); case double_: return cast(ulong)reply["n"].get!double; // v2.x case int_: return reply["n"].get!int; // v3.x case long_: return reply["n"].get!long; // just in case } } /** Calculates aggregate values for the data in a collection. Params: pipeline = A sequence of data aggregation processes. These can either be given as separate parameters, or as a single array parameter. Returns: An array of documents returned by the pipeline Throws: Exception if a DB communication error occured See_Also: $(LINK http://docs.mongodb.org/manual/reference/method/db.collection.aggregate) */ Bson aggregate(ARGS...)(ARGS pipeline) { import std.traits; static if (ARGS.length == 1 && isArray!(ARGS[0])) alias Pipeline = ARGS[0]; else static struct Pipeline { ARGS args; } static struct CMD { string aggregate; @asArray Pipeline pipeline; } CMD cmd; cmd.aggregate = m_name; static if (ARGS.length == 1 && isArray!(ARGS[0])) cmd.pipeline = pipeline[0]; else cmd.pipeline.args = pipeline; auto ret = database.runCommand(cmd); enforce(ret["ok"].get!double == 1, "Aggregate command failed: "~ret["errmsg"].opt!string); return ret["result"]; } /// Example taken from the MongoDB documentation unittest { import vibe.db.mongo.mongo; void test() { auto db = connectMongoDB("127.0.0.1").getDatabase("test"); auto results = db["coll"].aggregate( ["$match": ["status": "A"]], ["$group": ["_id": Bson("$cust_id"), "total": Bson(["$sum": Bson("$amount")])]], ["$sort": ["total": -1]]); } } /// The same example, but using an array of arguments unittest { import vibe.db.mongo.mongo; void test() { auto db = connectMongoDB("127.0.0.1").getDatabase("test"); Bson[] args; args ~= serializeToBson(["$match": ["status": "A"]]); args ~= serializeToBson(["$group": ["_id": Bson("$cust_id"), "total": Bson(["$sum": Bson("$amount")])]]); args ~= serializeToBson(["$sort": ["total": -1]]); auto results = db["coll"].aggregate(args); } } /** Returns an input range of all unique values for a certain field for records matching the given query. Params: key = Name of the field for which to collect unique values query = The query used to select records Returns: An input range with items of type `R` (`Bson` by default) is returned. */ auto distinct(R = Bson, Q)(string key, Q query) { import std.algorithm : map; static struct CMD { string distinct; string key; Q query; } CMD cmd; cmd.distinct = m_name; cmd.key = key; cmd.query = query; auto res = m_db.runCommand(cmd); enforce(res["ok"].get!double != 0, "Distinct query failed: "~res["errmsg"].opt!string); static if (is(R == Bson)) return res["values"].byValue; else return res["values"].byValue.map!(b => deserializeBson!R(b)); } /// unittest { import std.algorithm : equal; import vibe.db.mongo.mongo; void test() { auto db = connectMongoDB("127.0.0.1").getDatabase("test"); auto coll = db["collection"]; coll.drop(); coll.insert(["a": "first", "b": "foo"]); coll.insert(["a": "first", "b": "bar"]); coll.insert(["a": "first", "b": "bar"]); coll.insert(["a": "second", "b": "baz"]); coll.insert(["a": "second", "b": "bam"]); auto result = coll.distinct!string("b", ["a": "first"]); assert(result.equal(["foo", "bar"])); } } /** Creates or updates an index. Note that the overload taking an associative array of field orders will be removed. Since the order of fields matters, it is only suitable for single-field indices. */ void ensureIndex(scope const(Tuple!(string, int))[] field_orders, IndexFlags flags = IndexFlags.none, Duration expire_time = 0.seconds) @safe { // TODO: support 2d indexes auto key = Bson.emptyObject; auto indexname = appender!string(); bool first = true; foreach (fo; field_orders) { if (!first) indexname.put('_'); else first = false; indexname.put(fo[0]); indexname.put('_'); indexname.put(to!string(fo[1])); key[fo[0]] = Bson(fo[1]); } Bson[string] doc; doc["v"] = 1; doc["key"] = key; doc["ns"] = m_fullPath; doc["name"] = indexname.data; if (flags & IndexFlags.unique) doc["unique"] = true; if (flags & IndexFlags.dropDuplicates) doc["dropDups"] = true; if (flags & IndexFlags.background) doc["background"] = true; if (flags & IndexFlags.sparse) doc["sparse"] = true; if (flags & IndexFlags.expireAfterSeconds) doc["expireAfterSeconds"] = expire_time.total!"seconds"; database["system.indexes"].insert(doc); } /// ditto deprecated("Use the overload taking an array of field_orders instead.") void ensureIndex(int[string] field_orders, IndexFlags flags = IndexFlags.none, ulong expireAfterSeconds = 0) @safe { Tuple!(string, int)[] orders; foreach (k, v; field_orders) orders ~= tuple(k, v); ensureIndex(orders, flags, expireAfterSeconds.seconds); } void dropIndex(string name) @safe { static struct CMD { string dropIndexes; string index; } CMD cmd; cmd.dropIndexes = m_name; cmd.index = name; auto reply = database.runCommand(cmd); enforce(reply["ok"].get!double == 1, "dropIndex command failed: "~reply["errmsg"].opt!string); } void drop() @safe { static struct CMD { string drop; } CMD cmd; cmd.drop = m_name; auto reply = database.runCommand(cmd); enforce(reply["ok"].get!double == 1, "drop command failed: "~reply["errmsg"].opt!string); } } /// unittest { import vibe.data.bson; import vibe.data.json; import vibe.db.mongo.mongo; void test() { MongoClient client = connectMongoDB("127.0.0.1"); MongoCollection users = client.getCollection("myapp.users"); // canonical version using a Bson object users.insert(Bson(["name": Bson("admin"), "password": Bson("secret")])); // short version using a string[string] AA that is automatically // serialized to Bson users.insert(["name": "admin", "password": "secret"]); // BSON specific types are also serialized automatically auto uid = BsonObjectID.fromString("507f1f77bcf86cd799439011"); Bson usr = users.findOne(["_id": uid]); // JSON is another possibility Json jusr = parseJsonString(`{"name": "admin", "password": "secret"}`); users.insert(jusr); } } /// Using the type system to define a document "schema" unittest { import vibe.db.mongo.mongo; import vibe.data.serialization : name; import std.typecons : Nullable; // Nested object within a "User" document struct Address { string name; string street; int zipCode; } // The document structure of the "myapp.users" collection struct User { @name("_id") BsonObjectID id; // represented as "_id" in the database string loginName; string password; Address address; } void test() { MongoClient client = connectMongoDB("127.0.0.1"); MongoCollection users = client.getCollection("myapp.users"); // D values are automatically serialized to the internal BSON format // upon insertion - see also vibe.data.serialization User usr; usr.id = BsonObjectID.generate(); usr.loginName = "admin"; usr.password = "secret"; users.insert(usr); // find supports direct de-serialization of the returned documents foreach (usr2; users.find!User()) { logInfo("User: %s", usr2.loginName); } // the same goes for findOne Nullable!User qusr = users.findOne!User(["_id": usr.id]); if (!qusr.isNull) logInfo("User: %s", qusr.loginName); } } vibe.d-0.8.2/mongodb/vibe/db/mongo/connection.d000066400000000000000000000442541324361747700213010ustar00rootroot00000000000000/** Low level mongodb protocol. Copyright: © 2012-2016 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.db.mongo.connection; public import vibe.data.bson; import vibe.core.log; import vibe.core.net; import vibe.db.mongo.settings; import vibe.db.mongo.flags; import vibe.inet.webform; import vibe.stream.tls; import std.algorithm : map, splitter; import std.array; import std.range; import std.conv; import std.exception; import std.string; import std.digest.md; private struct _MongoErrorDescription { string message; int code; int connectionId; int n; double ok; } /** * D POD representation of Mongo error object. * * For successful queries "code" is negative. * Can be used also to check how many documents where updated upon * a successful query via "n" field. */ alias MongoErrorDescription = immutable(_MongoErrorDescription); /** * Root class for vibe.d Mongo driver exception hierarchy. */ class MongoException : Exception { @safe: this(string message, string file = __FILE__, int line = __LINE__, Throwable next = null) { super(message, file, line, next); } } /** * Generic class for all exception related to unhandled driver problems. * * I.e.: protocol mismatch or unexpected mongo service behavior. */ class MongoDriverException : MongoException { @safe: this(string message, string file = __FILE__, int line = __LINE__, Throwable next = null) { super(message, file, line, next); } } /** * Wrapper class for all inner mongo collection manipulation errors. * * It does not indicate problem with vibe.d driver itself. Most frequently this * one is thrown when MongoConnection is in checked mode and getLastError() has something interesting. */ class MongoDBException : MongoException { @safe: MongoErrorDescription description; alias description this; this(MongoErrorDescription description, string file = __FILE__, int line = __LINE__, Throwable next = null) { super(description.message, file, line, next); this.description = description; } } /** * Generic class for all exceptions related to authentication problems. * * I.e.: unsupported mechanisms or wrong credentials. */ class MongoAuthException : MongoException { @safe: this(string message, string file = __FILE__, int line = __LINE__, Throwable next = null) { super(message, file, line, next); } } /** [internal] Provides low-level mongodb protocol access. It is not intended for direct usage. Please use vibe.db.mongo.db and vibe.db.mongo.collection modules for your code. Note that a MongoConnection may only be used from one fiber/thread at a time. */ final class MongoConnection { @safe: import vibe.stream.wrapper : StreamOutputRange, streamOutputRange; import vibe.internal.interfaceproxy; import vibe.core.stream : InputStream, Stream; private { MongoClientSettings m_settings; TCPConnection m_conn; InterfaceProxy!Stream m_stream; ulong m_bytesRead; int m_msgid = 1; StreamOutputRange!(InterfaceProxy!Stream) m_outRange; } enum ushort defaultPort = MongoClientSettings.defaultPort; /// Simplified constructor overload, with no m_settings this(string server, ushort port = defaultPort) { m_settings = new MongoClientSettings(); m_settings.hosts ~= MongoHost(server, port); } this(MongoClientSettings cfg) { m_settings = cfg; // Now let's check for features that are not yet supported. if(m_settings.hosts.length > 1) logWarn("Multiple mongodb hosts are not yet supported. Using first one: %s:%s", m_settings.hosts[0].name, m_settings.hosts[0].port); } void connect() { /* * TODO: Connect to one of the specified hosts taking into consideration * options such as connect timeouts and so on. */ try { m_conn = connectTCP(m_settings.hosts[0].name, m_settings.hosts[0].port); m_conn.tcpNoDelay = true; if (m_settings.ssl) { auto ctx = createTLSContext(TLSContextKind.client); if (!m_settings.sslverifycertificate) { ctx.peerValidationMode = TLSPeerValidationMode.none; } if (m_settings.sslPEMKeyFile) { ctx.useCertificateChainFile(m_settings.sslPEMKeyFile); ctx.usePrivateKeyFile(m_settings.sslPEMKeyFile); } if (m_settings.sslCAFile) { ctx.useTrustedCertificateFile(m_settings.sslCAFile); } m_stream = createTLSStream(m_conn, ctx, m_settings.hosts[0].name); } else { m_stream = m_conn; } m_outRange = streamOutputRange(m_stream); } catch (Exception e) { throw new MongoDriverException(format("Failed to connect to MongoDB server at %s:%s.", m_settings.hosts[0].name, m_settings.hosts[0].port), __FILE__, __LINE__, e); } m_bytesRead = 0; if(m_settings.digest != string.init) { if (m_settings.authMechanism == MongoAuthMechanism.none) authenticate(); else { /** SCRAM-SHA-1 was released in March 2015 and on a properly configured Mongo instance Authentication.none is disabled. However, as a fallback to avoid breakage with old setups, no authentication is tried in case of an error. */ try scramAuthenticate(); catch (MongoAuthException e) authenticate(); } } else if (m_settings.sslPEMKeyFile != null && m_settings.username != null) { certAuthenticate(); } } void disconnect() { if (m_conn) { if (m_stream && m_conn.connected) { m_outRange.flush(); m_stream.finalize(); m_stream = InterfaceProxy!Stream.init; } m_conn.close(); m_conn = TCPConnection.init; } m_outRange.drop(); } @property bool connected() const { return m_conn && m_conn.connected; } void update(string collection_name, UpdateFlags flags, Bson selector, Bson update) { scope(failure) disconnect(); send(OpCode.Update, -1, cast(int)0, collection_name, cast(int)flags, selector, update); if (m_settings.safe) checkForError(collection_name); } void insert(string collection_name, InsertFlags flags, Bson[] documents) { scope(failure) disconnect(); foreach (d; documents) if (d["_id"].isNull()) d["_id"] = Bson(BsonObjectID.generate()); send(OpCode.Insert, -1, cast(int)flags, collection_name, documents); if (m_settings.safe) checkForError(collection_name); } void query(T)(string collection_name, QueryFlags flags, int nskip, int nret, Bson query, Bson returnFieldSelector, scope ReplyDelegate on_msg, scope DocDelegate!T on_doc) { scope(failure) disconnect(); flags |= m_settings.defQueryFlags; int id; if (returnFieldSelector.isNull) id = send(OpCode.Query, -1, cast(int)flags, collection_name, nskip, nret, query); else id = send(OpCode.Query, -1, cast(int)flags, collection_name, nskip, nret, query, returnFieldSelector); recvReply!T(id, on_msg, on_doc); } void getMore(T)(string collection_name, int nret, long cursor_id, scope ReplyDelegate on_msg, scope DocDelegate!T on_doc) { scope(failure) disconnect(); auto id = send(OpCode.GetMore, -1, cast(int)0, collection_name, nret, cursor_id); recvReply!T(id, on_msg, on_doc); } void delete_(string collection_name, DeleteFlags flags, Bson selector) { scope(failure) disconnect(); send(OpCode.Delete, -1, cast(int)0, collection_name, cast(int)flags, selector); if (m_settings.safe) checkForError(collection_name); } void killCursors(long[] cursors) { scope(failure) disconnect(); send(OpCode.KillCursors, -1, cast(int)0, cast(int)cursors.length, cursors); } MongoErrorDescription getLastError(string db) { // Though higher level abstraction level by concept, this function // is implemented here to allow to check errors upon every request // on conncetion level. Bson command_and_options = Bson.emptyObject; command_and_options["getLastError"] = Bson(1.0); if(m_settings.w != m_settings.w.init) command_and_options["w"] = m_settings.w; // Already a Bson struct if(m_settings.wTimeoutMS != m_settings.wTimeoutMS.init) command_and_options["wtimeout"] = Bson(m_settings.wTimeoutMS); if(m_settings.journal) command_and_options["j"] = Bson(true); if(m_settings.fsync) command_and_options["fsync"] = Bson(true); _MongoErrorDescription ret; query!Bson(db ~ ".$cmd", QueryFlags.NoCursorTimeout | m_settings.defQueryFlags, 0, -1, command_and_options, Bson(null), (cursor, flags, first_doc, num_docs) { logTrace("getLastEror(%s) flags: %s, cursor: %s, documents: %s", db, flags, cursor, num_docs); enforce(!(flags & ReplyFlags.QueryFailure), new MongoDriverException(format("MongoDB error: getLastError(%s) call failed.", db)) ); enforce( num_docs == 1, new MongoDriverException(format("getLastError(%s) returned %s documents instead of one.", db, num_docs)) ); }, (idx, ref error) { try { ret = MongoErrorDescription( error["err"].opt!string(""), error["code"].opt!int(-1), error["connectionId"].opt!int(-1), error["n"].get!int(), error["ok"].get!double() ); } catch (Exception e) { throw new MongoDriverException(e.msg); } } ); return ret; } /** Queries the server for all databases. Returns: An input range of $(D MongoDBInfo) values. */ auto listDatabases() { string cn = (m_settings.database == string.init ? "admin" : m_settings.database) ~ ".$cmd"; auto cmd = Bson(["listDatabases":Bson(1)]); void on_msg(long cursor, ReplyFlags flags, int first_doc, int num_docs) { if ((flags & ReplyFlags.QueryFailure)) throw new MongoDriverException("Calling listDatabases failed."); } static MongoDBInfo toInfo(const(Bson) db_doc) { return MongoDBInfo( db_doc["name"].get!string, db_doc["sizeOnDisk"].get!double, db_doc["empty"].get!bool ); } Bson result; void on_doc(size_t idx, ref Bson doc) { if (doc["ok"].get!double != 1.0) throw new MongoAuthException("listDatabases failed."); result = doc["databases"]; } query!Bson(cn, QueryFlags.None, 0, -1, cmd, Bson(null), &on_msg, &on_doc); return result.byValue.map!toInfo; } private int recvReply(T)(int reqid, scope ReplyDelegate on_msg, scope DocDelegate!T on_doc) { import std.traits; auto bytes_read = m_bytesRead; int msglen = recvInt(); int resid = recvInt(); int respto = recvInt(); int opcode = recvInt(); enforce(respto == reqid, "Reply is not for the expected message on a sequential connection!"); enforce(opcode == OpCode.Reply, "Got a non-'Reply' reply!"); auto flags = cast(ReplyFlags)recvInt(); long cursor = recvLong(); int start = recvInt(); int numret = recvInt(); scope (exit) { if (m_bytesRead - bytes_read < msglen) { logWarn("MongoDB reply was longer than expected, skipping the rest: %d vs. %d", msglen, m_bytesRead - bytes_read); ubyte[] dst = new ubyte[msglen - cast(size_t)(m_bytesRead - bytes_read)]; recv(dst); } else if (m_bytesRead - bytes_read > msglen) { logWarn("MongoDB reply was shorter than expected. Dropping connection."); disconnect(); throw new MongoDriverException("MongoDB reply was too short for data."); } } on_msg(cursor, flags, start, numret); static if (hasIndirections!T || is(T == Bson)) auto buf = new ubyte[msglen - cast(size_t)(m_bytesRead - bytes_read)]; foreach (i; 0 .. cast(size_t)numret) { // TODO: directly deserialize from the wire static if (!hasIndirections!T && !is(T == Bson)) { ubyte[256] buf = void; ubyte[] bufsl = buf; auto bson = () @trusted { return recvBson(bufsl); } (); } else { auto bson = () @trusted { return recvBson(buf); } (); } static if (is(T == Bson)) on_doc(i, bson); else { T doc = deserializeBson!T(bson); on_doc(i, doc); } } return resid; } private int send(ARGS...)(OpCode code, int response_to, ARGS args) { if( !connected() ) connect(); int id = nextMessageId(); sendValue(16 + sendLength(args)); sendValue(id); sendValue(response_to); sendValue(cast(int)code); foreach (a; args) sendValue(a); m_outRange.flush(); return id; } private void sendValue(T)(T value) { import std.traits; static if (is(T == int)) sendBytes(toBsonData(value)); else static if (is(T == long)) sendBytes(toBsonData(value)); else static if (is(T == Bson)) sendBytes(value.data); else static if (is(T == string)) { sendBytes(cast(const(ubyte)[])value); sendBytes(cast(const(ubyte)[])"\0"); } else static if (isArray!T) { foreach (v; value) sendValue(v); } else static assert(false, "Unexpected type: "~T.stringof); } private void sendBytes(in ubyte[] data){ m_outRange.put(data); } private int recvInt() { ubyte[int.sizeof] ret; recv(ret); return fromBsonData!int(ret); } private long recvLong() { ubyte[long.sizeof] ret; recv(ret); return fromBsonData!long(ret); } private Bson recvBson(ref ubyte[] buf) @system { int len = recvInt(); ubyte[] dst; if (len > buf.length) dst = new ubyte[len]; else { dst = buf[0 .. len]; buf = buf[len .. $]; } dst[0 .. 4] = toBsonData(len)[]; recv(dst[4 .. $]); return Bson(Bson.Type.Object, cast(immutable)dst); } private void recv(ubyte[] dst) { enforce(m_stream); m_stream.read(dst); m_bytesRead += dst.length; } private int nextMessageId() { return m_msgid++; } private void checkForError(string collection_name) { auto coll = collection_name.split(".")[0]; auto err = getLastError(coll); enforce( err.code < 0, new MongoDBException(err) ); } private void certAuthenticate() { Bson cmd = Bson.emptyObject; cmd["authenticate"] = Bson(1); cmd["mechanism"] = Bson("MONGODB-X509"); cmd["user"] = Bson(m_settings.username); query!Bson("$external.$cmd", QueryFlags.None, 0, -1, cmd, Bson(null), (cursor, flags, first_doc, num_docs) { if ((flags & ReplyFlags.QueryFailure) || num_docs != 1) throw new MongoDriverException("Calling authenticate failed."); }, (idx, ref doc) { if (doc["ok"].get!double != 1.0) throw new MongoAuthException("Authentication failed."); } ); } private void authenticate() { string cn = (m_settings.database == string.init ? "admin" : m_settings.database) ~ ".$cmd"; string nonce, key; auto cmd = Bson(["getnonce":Bson(1)]); query!Bson(cn, QueryFlags.None, 0, -1, cmd, Bson(null), (cursor, flags, first_doc, num_docs) { if ((flags & ReplyFlags.QueryFailure) || num_docs != 1) throw new MongoDriverException("Calling getNonce failed."); }, (idx, ref doc) { if (doc["ok"].get!double != 1.0) throw new MongoDriverException("getNonce failed."); nonce = doc["nonce"].get!string; key = toLower(toHexString(md5Of(nonce ~ m_settings.username ~ m_settings.digest)).idup); } ); cmd = Bson.emptyObject; cmd["authenticate"] = Bson(1); cmd["mechanism"] = Bson("MONGODB-CR"); cmd["nonce"] = Bson(nonce); cmd["user"] = Bson(m_settings.username); cmd["key"] = Bson(key); query!Bson(cn, QueryFlags.None, 0, -1, cmd, Bson(null), (cursor, flags, first_doc, num_docs) { if ((flags & ReplyFlags.QueryFailure) || num_docs != 1) throw new MongoDriverException("Calling authenticate failed."); }, (idx, ref doc) { if (doc["ok"].get!double != 1.0) throw new MongoAuthException("Authentication failed."); } ); } private void scramAuthenticate() { import vibe.db.mongo.sasl; string cn = (m_settings.database == string.init ? "admin" : m_settings.database) ~ ".$cmd"; ScramState state; string payload = state.createInitialRequest(m_settings.username); auto cmd = Bson.emptyObject; cmd["saslStart"] = Bson(1); cmd["mechanism"] = Bson("SCRAM-SHA-1"); cmd["payload"] = Bson(BsonBinData(BsonBinData.Type.generic, payload.representation)); string response; Bson conversationId; query!Bson(cn, QueryFlags.None, 0, -1, cmd, Bson(null), (cursor, flags, first_doc, num_docs) { if ((flags & ReplyFlags.QueryFailure) || num_docs != 1) throw new MongoDriverException("SASL start failed."); }, (idx, ref doc) { if (doc["ok"].get!double != 1.0) throw new MongoAuthException("Authentication failed."); response = cast(string)doc["payload"].get!BsonBinData().rawData; conversationId = doc["conversationId"]; }); payload = state.update(m_settings.digest, response); cmd = Bson.emptyObject; cmd["saslContinue"] = Bson(1); cmd["conversationId"] = conversationId; cmd["payload"] = Bson(BsonBinData(BsonBinData.Type.generic, payload.representation)); query!Bson(cn, QueryFlags.None, 0, -1, cmd, Bson(null), (cursor, flags, first_doc, num_docs) { if ((flags & ReplyFlags.QueryFailure) || num_docs != 1) throw new MongoDriverException("SASL continue failed."); }, (idx, ref doc) { if (doc["ok"].get!double != 1.0) throw new MongoAuthException("Authentication failed."); response = cast(string)doc["payload"].get!BsonBinData().rawData; }); payload = state.finalize(response); cmd = Bson.emptyObject; cmd["saslContinue"] = Bson(1); cmd["conversationId"] = conversationId; cmd["payload"] = Bson(BsonBinData(BsonBinData.Type.generic, payload.representation)); query!Bson(cn, QueryFlags.None, 0, -1, cmd, Bson(null), (cursor, flags, first_doc, num_docs) { if ((flags & ReplyFlags.QueryFailure) || num_docs != 1) throw new MongoDriverException("SASL finish failed."); }, (idx, ref doc) { if (doc["ok"].get!double != 1.0) throw new MongoAuthException("Authentication failed."); }); } } private enum OpCode : int { Reply = 1, // sent only by DB Msg = 1000, Update = 2001, Insert = 2002, Reserved1 = 2003, Query = 2004, GetMore = 2005, Delete = 2006, KillCursors = 2007 } alias ReplyDelegate = void delegate(long cursor, ReplyFlags flags, int first_doc, int num_docs) @safe; template DocDelegate(T) { alias DocDelegate = void delegate(size_t idx, ref T doc) @safe; } struct MongoDBInfo { string name; double sizeOnDisk; bool empty; } private int sendLength(ARGS...)(ARGS args) { import std.traits; static if (ARGS.length == 1) { alias T = ARGS[0]; static if (is(T == string)) return cast(int)args[0].length + 1; else static if (is(T == int)) return 4; else static if (is(T == long)) return 8; else static if (is(T == Bson)) return cast(int)args[0].data.length; else static if (isArray!T) { int ret = 0; foreach (el; args[0]) ret += sendLength(el); return ret; } else static assert(false, "Unexpected type: "~T.stringof); } else if (ARGS.length == 0) return 0; else return sendLength(args[0 .. $/2]) + sendLength(args[$/2 .. $]); } vibe.d-0.8.2/mongodb/vibe/db/mongo/cursor.d000066400000000000000000000213551324361747700204540ustar00rootroot00000000000000/** MongoDB cursor abstraction Copyright: © 2012-2014 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.db.mongo.cursor; public import vibe.data.bson; import vibe.db.mongo.connection; import vibe.db.mongo.client; import std.array : array; import std.algorithm : map, max, min; import std.exception; /** Represents a cursor for a MongoDB query. Use foreach( doc; cursor ) to iterate over the list of documents. This struct uses reference counting to destroy the underlying MongoDB cursor. */ struct MongoCursor(Q = Bson, R = Bson, S = Bson) { private MongoCursorData!(Q, R, S) m_data; package this(MongoClient client, string collection, QueryFlags flags, int nskip, int nret, Q query, S return_field_selector) { // TODO: avoid memory allocation, if possible m_data = new MongoCursorData!(Q, R, S)(client, collection, flags, nskip, nret, query, return_field_selector); } this(this) { if( m_data ) m_data.m_refCount++; } ~this() { if( m_data && --m_data.m_refCount == 0 ){ m_data.destroy(); } } /** Returns true if there are no more documents for this cursor. Throws: An exception if there is a query or communication error. */ @property bool empty() { return m_data ? m_data.empty() : true; } /** Returns the current document of the response. Use empty and popFront to iterate over the list of documents using an input range interface. Note that calling this function is only allowed if empty returns false. */ @property R front() { return m_data.front; } /** Controls the order in which the query returns matching documents. This method must be called before starting to iterate, or an exeption will be thrown. If multiple calls to $(D sort()) are issued, only the last one will have an effect. Params: order = A BSON object convertible value that defines the sort order of the result. This BSON object must be structured according to the MongoDB documentation (see below). Returns: Reference to the modified original curser instance. Throws: An exception if there is a query or communication error. Also throws if the method was called after beginning of iteration. See_Also: $(LINK http://docs.mongodb.org/manual/reference/method/cursor.sort) */ MongoCursor sort(T)(T order) { m_data.sort(() @trusted { return serializeToBson(order); } ()); return this; } /// @safe unittest { import vibe.core.log; import vibe.db.mongo.mongo; void test() @safe { auto db = connectMongoDB("127.0.0.1").getDatabase("test"); auto coll = db["testcoll"]; // find all entries in reverse date order foreach (entry; coll.find().sort(["date": -1])) () @safe { logInfo("Entry: %s", entry); } (); // the same, but using a struct to avoid memory allocations static struct Order { int date; } foreach (entry; coll.find().sort(Order(-1))) logInfo("Entry: %s", entry); } } /** Limits the number of documents that the cursor returns. This method must be called before beginnig iteration in order to have effect. If multiple calls to limit() are made, the one with the lowest limit will be chosen. Params: count = The maximum number number of documents to return. A value of zero means unlimited. Returns: the same cursor See_Also: $(LINK http://docs.mongodb.org/manual/reference/method/cursor.limit) */ MongoCursor limit(size_t count) { m_data.limit(count); return this; } /** Skips a given number of elements at the beginning of the cursor. This method must be called before beginnig iteration in order to have effect. If multiple calls to skip() are made, the one with the maximum number will be chosen. Params: count = The number of documents to skip. Returns: the same cursor See_Also: $(LINK http://docs.mongodb.org/manual/reference/method/cursor.skip) */ MongoCursor skip(int count) { m_data.skip(count); return this; } @safe unittest { import vibe.core.log; import vibe.db.mongo.mongo; void test() @safe { auto db = connectMongoDB("127.0.0.1").getDatabase("test"); auto coll = db["testcoll"]; try { coll.drop(); } catch (Exception) {} for (int i = 0; i < 10000; i++) coll.insert(["i": i]); static struct Order { int i; } auto data = coll.find().sort(Order(1)).skip(2000).limit(2000).array; assert(data.length == 2000); assert(data[0]["i"].get!int == 2000); assert(data[$ - 1]["i"].get!int == 3999); } } /** Advances the cursor to the next document of the response. Note that calling this function is only allowed if empty returns false. */ void popFront() { m_data.popFront(); } /** Iterates over all remaining documents. Note that iteration is one-way - elements that have already been visited will not be visited again if another iteration is done. Throws: An exception if there is a query or communication error. */ auto byPair() { import std.typecons : Tuple, tuple; static struct Rng { private MongoCursorData!(Q, R, S) data; @property bool empty() { return data.empty; } @property Tuple!(size_t, R) front() { return tuple(data.index, data.front); } void popFront() { data.popFront(); } } return Rng(m_data); } } /** Internal class exposed through MongoCursor. */ private class MongoCursorData(Q, R, S) { private { int m_refCount = 1; MongoClient m_client; string m_collection; long m_cursor; QueryFlags m_flags; int m_nskip; int m_nret; Q m_query; S m_returnFieldSelector; Bson m_sort = Bson(null); int m_offset; size_t m_currentDoc = 0; R[] m_documents; bool m_iterationStarted = false; size_t m_limit = 0; bool m_needDestroy = false; } this(MongoClient client, string collection, QueryFlags flags, int nskip, int nret, Q query, S return_field_selector) { m_client = client; m_collection = collection; m_flags = flags; m_nskip = nskip; m_nret = nret; m_query = query; m_returnFieldSelector = return_field_selector; } @property bool empty() @safe { if (!m_iterationStarted) startIterating(); if (m_limit > 0 && index >= m_limit) { destroy(); return true; } if( m_currentDoc < m_documents.length ) return false; if( m_cursor == 0 ) return true; auto conn = m_client.lockConnection(); conn.getMore!R(m_collection, m_nret, m_cursor, &handleReply, &handleDocument); return m_currentDoc >= m_documents.length; } @property size_t index() @safe { return m_offset + m_currentDoc; } @property R front() @safe { if (!m_iterationStarted) startIterating(); assert(!empty(), "Cursor has no more data."); return m_documents[m_currentDoc]; } void sort(Bson order) @safe { assert(!m_iterationStarted, "Cursor cannot be modified after beginning iteration"); m_sort = order; } void limit(size_t count) @safe { // A limit() value of 0 (e.g. “.limit(0)”) is equivalent to setting no limit. if (count > 0) { if (m_nret == 0 || m_nret > count) m_nret = min(count, 1024); if (m_limit == 0 || m_limit > count) m_limit = count; } } void skip(int count) @safe { // A skip() value of 0 (e.g. “.skip(0)”) is equivalent to setting no skip. m_nskip = max(m_nskip, count); } void popFront() @safe { if (!m_iterationStarted) startIterating(); assert(!empty(), "Cursor has no more data."); m_currentDoc++; } private void startIterating() @safe { auto conn = m_client.lockConnection(); ubyte[256] selector_buf = void; ubyte[256] query_buf = void; Bson selector = () @trusted { return serializeToBson(m_returnFieldSelector, selector_buf); } (); Bson query; static if (is(Q == Bson)) { query = m_query; } else { query = () @trusted { return serializeToBson(m_query, query_buf); } (); } Bson full_query; if (!query["query"].isNull() || !query["$query"].isNull()) { // TODO: emit deprecation warning full_query = query; } else { full_query = Bson.emptyObject; full_query["$query"] = query; } if (!m_sort.isNull()) full_query["orderby"] = m_sort; conn.query!R(m_collection, m_flags, m_nskip, m_nret, full_query, selector, &handleReply, &handleDocument); m_iterationStarted = true; } private void destroy() @safe { if (m_cursor == 0) return; auto conn = m_client.lockConnection(); conn.killCursors(() @trusted { return (&m_cursor)[0 .. 1]; } ()); m_cursor = 0; } private void handleReply(long cursor, ReplyFlags flags, int first_doc, int num_docs) { // FIXME: use MongoDB exceptions enforce(!(flags & ReplyFlags.CursorNotFound), "Invalid cursor handle."); enforce(!(flags & ReplyFlags.QueryFailure), "Query failed. Does the database exist?"); m_cursor = cursor; m_offset = first_doc; m_documents.length = num_docs; m_currentDoc = 0; } private void handleDocument(size_t idx, ref R doc) { m_documents[idx] = doc; } } vibe.d-0.8.2/mongodb/vibe/db/mongo/database.d000066400000000000000000000061151324361747700207000ustar00rootroot00000000000000/** MongoDatabase class representing common database for group of collections. Technically it is very special collection with common query functions disabled and some service commands provided. Copyright: © 2012-2014 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.db.mongo.database; import vibe.db.mongo.client; import vibe.db.mongo.collection; import vibe.data.bson; /** Represents a single database accessible through a given MongoClient. */ struct MongoDatabase { @safe: private { string m_name; string m_commandCollection; MongoClient m_client; } //@disable this(); this(MongoClient client, string name) { import std.algorithm; assert(client !is null); m_client = client; assert( !canFind(name, '.'), "Compound collection path provided to MongoDatabase constructor instead of single database name" ); m_name = name; m_commandCollection = m_name ~ ".$cmd"; } /// The name of this database @property string name() { return m_name; } /// The client which represents the connection to the database server @property MongoClient client() { return m_client; } /** Accesses the collections of this database. Returns: The collection with the given name */ MongoCollection opIndex(string name) { return MongoCollection(this, name); } /** Retrieves the last error code (if any) from the database server. Exact object format is not documented. MongoErrorDescription signature will be updated upon any issues. Note that this method will execute a query to service collection and thus is far from being "free". Returns: struct storing data from MongoDB db.getLastErrorObj() object */ MongoErrorDescription getLastError() { return m_client.lockConnection().getLastError(m_name); } /** Returns recent log messages for this database from the database server. See $(LINK http://www.mongodb.org/display/DOCS/getLog+Command). Params: mask = "global" or "rs" or "startupWarnings". Refer to official MongoDB docs. Returns: Bson document with recent log messages from MongoDB service. */ Bson getLog(string mask) { static struct CMD { string getLog; } CMD cmd; cmd.getLog = mask; return runCommand(cmd); } /** Performs a filesystem/disk sync of the database on the server. See $(LINK http://www.mongodb.org/display/DOCS/fsync+Command) Returns: check documentation */ Bson fsync(bool async = false) { static struct CMD { int fsync = 1; bool async; } CMD cmd; cmd.async = async; return runCommand(cmd); } /** Generic means to run commands on the database. See $(LINK http://www.mongodb.org/display/DOCS/Commands) for a list of possible values for command_and_options. Params: command_and_options = Bson object containing the command to be executed as well as the command parameters as fields Returns: The raw response of the MongoDB server */ Bson runCommand(T)(T command_and_options) { return m_client.getCollection(m_commandCollection).findOne(command_and_options); } } vibe.d-0.8.2/mongodb/vibe/db/mongo/flags.d000066400000000000000000000056371324361747700202400ustar00rootroot00000000000000/** MongoDB operation flag definitions. Copyright: © 2012-2016 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.db.mongo.flags; enum UpdateFlags { none = 0, /// Normal update of a single document. upsert = 1<<0, /// Creates a document if none exists. multiUpdate = 1<<1, /// Updates all matching documents. None = none, /// Deprecated compatibility alias Upsert = upsert, /// Deprecated compatibility alias MultiUpdate = multiUpdate /// Deprecated compatibility alias } enum IndexFlags { none = 0, unique = 1<<0, dropDuplicates = 1<<2, background = 1<<3, sparse = 1<<4, expireAfterSeconds = 1<<5, None = none, /// Deprecated compatibility alias, use `none` instead. Unique = unique, /// Deprecated compatibility alias, use `unique` instead. DropDuplicates = dropDuplicates, /// Deprecated compatibility alias, use `dropDuplicates` instead. Background = background, /// Deprecated compatibility alias, use `background` instead. Sparse = sparse, /// Deprecated compatibility alias, use `sparse` instead. ExpireAfterSeconds = expireAfterSeconds, /// Deprecated compatibility alias, use `expireAfterSeconds` instead. } enum InsertFlags { none = 0, /// Normal insert. continueOnError = 1<<0, /// For multiple inserted documents, continues inserting further documents after a failure. None = none, /// Deprecated compatibility alias ContinueOnError = continueOnError /// Deprecated compatibility alias } enum QueryFlags { none = 0, /// Normal query tailableCursor = 1<<1, /// slaveOk = 1<<2, /// oplogReplay = 1<<3, /// noCursorTimeout = 1<<4, /// awaitData = 1<<5, /// exhaust = 1<<6, /// partial = 1<<7, /// None = none, /// Deprecated compatibility alias TailableCursor = tailableCursor, /// Deprecated compatibility alias SlaveOk = slaveOk, /// Deprecated compatibility alias OplogReplay = oplogReplay, /// Deprecated compatibility alias NoCursorTimeout = noCursorTimeout, /// Deprecated compatibility alias AwaitData = awaitData, /// Deprecated compatibility alias Exhaust = exhaust, /// Deprecated compatibility alias Partial = partial /// Deprecated compatibility alias } enum DeleteFlags { none = 0, singleRemove = 1<<0, None = none, /// Deprecated compatibility alias SingleRemove = singleRemove /// Deprecated compatibility alias } enum ReplyFlags { none = 0, cursorNotFound = 1<<0, queryFailure = 1<<1, shardConfigStale = 1<<2, awaitCapable = 1<<3, None = none, /// Deprecated compatibility alias CursorNotFound = cursorNotFound, /// Deprecated compatibility alias QueryFailure = queryFailure, /// Deprecated compatibility alias ShardConfigStale = shardConfigStale, /// Deprecated compatibility alias AwaitCapable = awaitCapable /// Deprecated compatibility alias } vibe.d-0.8.2/mongodb/vibe/db/mongo/mongo.d000066400000000000000000000064671324361747700202650ustar00rootroot00000000000000/** MongoDB and MongoCollection classes and connections. Implementation_Note: The MongoDB driver implementation here is missing a number of API functions known from the JavaScript driver, but these can usually be implemented in terms of MongoDatabase.runCommand or MongoCollection.find. Since the official documentation is lacking in some places, it may be necessary to use a network sniffer to monitor what exectly needs to be sent. MongoDB has a dedicated utility for this called $(LINK2 http://docs.mongodb.org/manual/reference/program/mongosniff/ mongosniff). Copyright: © 2012-2013 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.db.mongo.mongo; public import vibe.db.mongo.client; public import vibe.db.mongo.settings; import std.algorithm; @safe: /** Connects to a MongoDB instance. If the host/port form is used, default settings will be used, which enable safe updates, but no fsync. By specifying a URL instead, it is possible to fully customize the settings. See $(LINK http://www.mongodb.org/display/DOCS/Connections) for the complete set of options. Note that 'sslverifycertificate' is only present in some client bindings, including here. Note that the returned MongoClient uses a vibe.core.connectionpool.ConnectionPool internally to create and reuse connections as necessary. Thus, the MongoClient instance can - and should - be shared among all fibers in a thread by storing in in a thread local variable. Authentication: Authenticated connections are supported by using a URL connection string such as "mongodb://user:password@host". SCRAM-SHA-1 is used by default. Examples: --- // connecting with default settings: auto client = connectMongoDB("127.0.0.1"); auto users = client.getCollection("users"); users.insert(Bson("peter")); --- --- // connecting using the URL form with custom settings auto client = connectMongoDB("mongodb://localhost/?slaveOk=true"); --- --- // connecting with SSL encryption enabled and verification off auto client = connectMongoDB("mongodb://localhost/?ssl=true&sslverifycertificate=false"); --- Params: host = Specifies the host name or IP address of the MongoDB server. port = Can be used to specify the port of the MongoDB server if different from the default one. host_or_url = Can either be a host name, in which case the default port will be used, or a URL with the mongodb:// scheme. settings = An object containing the full set of possible configuration options. Returns: A new MongoClient instance that can be used to access the database. Throws: Throws an exception if a mongodb:// URL is given and the URL cannot be parsed. An exception will not be thrown if called with a hostname and port. */ MongoClient connectMongoDB(string host, ushort port) { assert(!host.startsWith("mongodb://")); return new MongoClient(host, port); } /// ditto MongoClient connectMongoDB(string host_or_url) { /* If this looks like a URL try to parse it that way. */ if(host_or_url.startsWith("mongodb://")){ return new MongoClient(host_or_url); } else { return new MongoClient(host_or_url, MongoClientSettings.defaultPort); } } /// ditto MongoClient connectMongoDB(MongoClientSettings settings) { return new MongoClient(settings); } vibe.d-0.8.2/mongodb/vibe/db/mongo/sasl.d000066400000000000000000000105161324361747700200760ustar00rootroot00000000000000/** SASL authentication functions Copyright: © 2012-2016 Nicolas Gurrola License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Nicolas Gurrola */ module vibe.db.mongo.sasl; import std.algorithm; import std.base64; import std.conv; import std.digest.hmac; import std.digest.sha; import std.exception; import std.format; import std.string; import std.utf; import vibe.crypto.cryptorand; @safe: private SHA1HashMixerRNG g_rng() { static SHA1HashMixerRNG m_rng; if (!m_rng) m_rng = new SHA1HashMixerRNG; return m_rng; } package struct ScramState { @safe: private string m_firstMessageBare; private string m_nonce; private DigestType!SHA1 m_saltedPassword; private string m_authMessage; string createInitialRequest(string user) { ubyte[18] randomBytes; g_rng.read(randomBytes[]); m_nonce = Base64.encode(randomBytes); m_firstMessageBare = format("n=%s,r=%s", escapeUsername(user), m_nonce); return format("n,,%s", m_firstMessageBare); } string update(string password, string challenge) { string serverFirstMessage = challenge; string next = challenge.find(','); if (challenge.length < 2 || challenge[0 .. 2] != "r=" || next.length < 3 || next[1 .. 3] != "s=") throw new Exception("Invalid server challenge format"); string serverNonce = challenge[2 .. $ - next.length]; challenge = next[3 .. $]; next = challenge.find(','); ubyte[] salt = Base64.decode(challenge[0 .. $ - next.length]); if (next.length < 3 || next[1 .. 3] != "i=") throw new Exception("Invalid server challenge format"); int iterations = next[3 .. $].to!int(); if (serverNonce[0 .. m_nonce.length] != m_nonce) throw new Exception("Invalid server nonce received"); string finalMessage = format("c=biws,r=%s", serverNonce); m_saltedPassword = pbkdf2(password.representation, salt, iterations); m_authMessage = format("%s,%s,%s", m_firstMessageBare, serverFirstMessage, finalMessage); auto proof = getClientProof(m_saltedPassword, m_authMessage); return format("%s,p=%s", finalMessage, Base64.encode(proof)); } string finalize(string challenge) { if (challenge.length < 2 || challenge[0 .. 2] != "v=") { throw new Exception("Invalid server signature format"); } if (!verifyServerSignature(Base64.decode(challenge[2 .. $]), m_saltedPassword, m_authMessage)) { throw new Exception("Invalid server signature"); } return null; } private static string escapeUsername(string user) { char[] buffer; foreach (i, dchar ch; user) { if (ch == ',' || ch == '=') { if (!buffer) { buffer.reserve(user.length + 2); buffer ~= user[0 .. i]; } if (ch == ',') buffer ~= "=2C"; else buffer ~= "=3D"; } else if (buffer) encode(buffer, ch); } return buffer ? () @trusted { return assumeUnique(buffer); } () : user; } unittest { string user = "user"; assert(escapeUsername(user) == user); assert(escapeUsername(user) is user); assert(escapeUsername("user,1") == "user=2C1"); assert(escapeUsername("user=1") == "user=3D1"); assert(escapeUsername("u,=ser1") == "u=2C=3Dser1"); assert(escapeUsername("u=se=r1") == "u=3Dse=3Dr1"); } private static auto getClientProof(DigestType!SHA1 saltedPassword, string authMessage) { auto clientKey = () @trusted { return hmac!SHA1("Client Key".representation, saltedPassword); } (); auto storedKey = sha1Of(clientKey); auto clientSignature = () @trusted { return hmac!SHA1(authMessage.representation, storedKey); } (); foreach (i; 0 .. clientKey.length) { clientKey[i] = clientKey[i] ^ clientSignature[i]; } return clientKey; } private static bool verifyServerSignature(ubyte[] signature, DigestType!SHA1 saltedPassword, string authMessage) @trusted { auto serverKey = hmac!SHA1("Server Key".representation, saltedPassword); auto serverSignature = hmac!SHA1(authMessage.representation, serverKey); return serverSignature == signature; } } private DigestType!SHA1 pbkdf2(const ubyte[] password, const ubyte[] salt, int iterations) { import std.bitmanip; ubyte[4] intBytes = [0, 0, 0, 1]; auto last = () @trusted { return hmac!SHA1(salt, intBytes[], password); } (); auto current = last; foreach (i; 1 .. iterations) { last = () @trusted { return hmac!SHA1(last[], password); } (); foreach (j; 0 .. current.length) { current[j] = current[j] ^ last[j]; } } return current; } vibe.d-0.8.2/mongodb/vibe/db/mongo/sessionstore.d000066400000000000000000000102011324361747700216630ustar00rootroot00000000000000/** MongoDB based HTTP session store. Copyright: © 2017 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.db.mongo.sessionstore; import vibe.data.json; import vibe.db.mongo.mongo; import vibe.http.session; import core.time; import std.datetime : Clock, SysTime, UTC; import std.typecons : Nullable; import std.variant; final class MongoSessionStore : SessionStore { @safe: private { MongoCollection m_sessions; Duration m_expirationTime = Duration.max; } /** Constructs a new MongoDB session store. Params: url = URL of the MongoDB database (e.g. `"mongodb://localhost/mydb"`) database = Name of the database to use collection = Optional collection name to store the sessions in */ this(string url, string collection = "sessions") { import std.exception : enforce; MongoClientSettings settings; enforce(parseMongoDBUrl(settings, url), "Failed to parse MongoDB URL."); auto db = connectMongoDB(settings).getDatabase(settings.database); m_sessions = db[collection]; } /** The duration without access after which a session expires. */ @property Duration expirationTime() const { return m_expirationTime; } /// ditto @property void expirationTime(Duration dur) { import std.typecons : tuple; m_sessions.ensureIndex([tuple("time", 1)], IndexFlags.none, dur); m_expirationTime = dur; } @property SessionStorageType storageType() const { return SessionStorageType.bson; } Session create() { auto s = createSessionInstance(); m_sessions.insert(SessionEntry(s.id, Clock.currTime(UTC()))); return s; } Session open(string id) { auto res = m_sessions.findAndModify(["_id": id], ["$set": ["time": Clock.currTime(UTC())]], ["_id": 1]); if (!res.isNull) return createSessionInstance(id); return Session.init; } void set(string id, string name, Variant value) @trusted { m_sessions.update(["_id": id], ["$set": [name.escape: value.get!Bson, "time": Clock.currTime(UTC()).serializeToBson]]); } Variant get(string id, string name, lazy Variant defaultVal) @trusted { auto f = name.escape; auto r = m_sessions.findOne(["_id": id], [f: 1]); if (r.isNull) return defaultVal; auto v = r.tryIndex(f); if (v.isNull) return defaultVal; return Variant(v.get); } bool isKeySet(string id, string key) { auto f = key.escape; auto r = m_sessions.findOne(["_id": id], [f: 1]); if (r.isNull) return false; return !r.tryIndex(f).isNull; } void remove(string id, string key) { m_sessions.update(["_id": id], ["$unset": [key.escape: 1]]); } void destroy(string id) { m_sessions.remove(["_id": id]); } int iterateSession(string id, scope int delegate(string key) @safe del) { import std.algorithm.searching : startsWith; auto r = m_sessions.findOne(["_id": id]); foreach (k, _; r.byKeyValue) { if (k.startsWith("f_")) { auto f = k.unescape; if (auto ret = del(f)) return ret; } } return 0; } private static struct SessionEntry { string _id; SysTime time; } } private string escape(string field_name) @safe { import std.array : appender; import std.format : formattedWrite; auto ret = appender!string; ret.reserve(field_name.length + 2); ret.put("f_"); foreach (char ch; field_name) { switch (ch) { default: ret.formattedWrite("+%02X", cast(int)ch); break; case 'a': .. case 'z': case 'A': .. case 'Z': case '0': .. case '9': case '_', '-': ret.put(ch); break; } } return ret.data; } private string unescape(string key) @safe { import std.algorithm.searching : startsWith; import std.array : appender; import std.conv : to; assert(key.startsWith("f_")); key = key[2 .. $]; auto ret = appender!string; ret.reserve(key.length); while (key.length) { if (key[0] == '+') { ret.put(cast(char)key[1 .. 3].to!int(16)); key = key[3 .. $]; } else { ret.put(key[0]); key = key[1 .. $]; } } return ret.data; } @safe unittest { void test(string raw, string enc) { assert(escape(raw) == enc); assert(unescape(enc) == raw); } test("foo", "f_foo"); test("foo.bar", "f_foo+2Ebar"); test("foo+bar", "f_foo+2Bbar"); } vibe.d-0.8.2/mongodb/vibe/db/mongo/settings.d000066400000000000000000000245741324361747700210050ustar00rootroot00000000000000/** MongoDB client connection settings. Copyright: © 2012-2016 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.db.mongo.settings; import vibe.core.log; import vibe.data.bson; import vibe.db.mongo.flags : QueryFlags; import vibe.inet.webform; import std.conv : to; import std.digest.digest : toHexString; import std.digest.md : md5Of; import std.algorithm : splitter, startsWith; import std.string : icmp, indexOf, toLower; /** * Parses the given string as a mongodb URL. The URL must be in the form documented at * $(LINK http://www.mongodb.org/display/DOCS/Connections) which is: * * mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] * * Returns: true if the URL was successfully parsed. False if the URL can not be parsed. * * If the URL is successfully parsed the MongoClientSettings instance will contain the parsed config. * If the URL is not successfully parsed the information in the MongoClientSettings instance may be * incomplete and should not be used. */ bool parseMongoDBUrl(out MongoClientSettings cfg, string url) @safe { import std.exception : enforce; cfg = new MongoClientSettings(); string tmpUrl = url[0..$]; // Slice of the url (not a copy) if( !startsWith(tmpUrl, "mongodb://") ) { return false; } // Reslice to get rid of 'mongodb://' tmpUrl = tmpUrl[10..$]; auto authIndex = tmpUrl.indexOf('@'); sizediff_t hostIndex = 0; // Start of the host portion of the URL. // Parse out the username and optional password. if( authIndex != -1 ) { // Set the host start to after the '@' hostIndex = authIndex + 1; string password; auto colonIndex = tmpUrl[0..authIndex].indexOf(':'); if(colonIndex != -1) { cfg.username = tmpUrl[0..colonIndex]; password = tmpUrl[colonIndex + 1 .. authIndex]; } else { cfg.username = tmpUrl[0..authIndex]; } // Make sure the username is not empty. If it is then the parse failed. if(cfg.username.length == 0) { return false; } cfg.digest = MongoClientSettings.makeDigest(cfg.username, password); } auto slashIndex = tmpUrl[hostIndex..$].indexOf("/"); if( slashIndex == -1 ) slashIndex = tmpUrl.length; else slashIndex += hostIndex; // Parse the hosts section. try { foreach(entry; splitter(tmpUrl[hostIndex..slashIndex], ",")) { auto hostPort = splitter(entry, ":"); string host = hostPort.front; hostPort.popFront(); ushort port = MongoClientSettings.defaultPort; if (!hostPort.empty) { port = to!ushort(hostPort.front); hostPort.popFront(); } enforce(hostPort.empty, "Host specifications are expected to be of the form \"HOST:PORT,HOST:PORT,...\"."); cfg.hosts ~= MongoHost(host, port); } } catch (Exception e) { return false; // Probably failed converting the port to ushort. } // If we couldn't parse a host we failed. if(cfg.hosts.length == 0) { return false; } if(slashIndex == tmpUrl.length) { // We're done parsing. return true; } auto queryIndex = tmpUrl[slashIndex..$].indexOf("?"); if(queryIndex == -1){ // No query string. Remaining string is the database queryIndex = tmpUrl.length; } else { queryIndex += slashIndex; } cfg.database = tmpUrl[slashIndex+1..queryIndex]; if(queryIndex != tmpUrl.length) { FormFields options; parseURLEncodedForm(tmpUrl[queryIndex+1 .. $], options); foreach (option, value; options) { bool setBool(ref bool dst) { try { dst = to!bool(value); return true; } catch( Exception e ){ logError("Value for '%s' must be 'true' or 'false' but was '%s'.", option, value); return false; } } bool setLong(ref long dst) { try { dst = to!long(value); return true; } catch( Exception e ){ logError("Value for '%s' must be an integer but was '%s'.", option, value); return false; } } void warnNotImplemented() { logDiagnostic("MongoDB option %s not yet implemented.", option); } switch( option.toLower() ){ default: logWarn("Unknown MongoDB option %s", option); break; case "slaveok": bool v; if( setBool(v) && v ) cfg.defQueryFlags |= QueryFlags.SlaveOk; break; case "replicaset": cfg.replicaSet = value; warnNotImplemented(); break; case "safe": setBool(cfg.safe); break; case "fsync": setBool(cfg.fsync); break; case "journal": setBool(cfg.journal); break; case "connecttimeoutms": setLong(cfg.connectTimeoutMS); warnNotImplemented(); break; case "sockettimeoutms": setLong(cfg.socketTimeoutMS); warnNotImplemented(); break; case "ssl": setBool(cfg.ssl); break; case "sslverifycertificate": setBool(cfg.sslverifycertificate); break; case "authmechanism": cfg.authMechanism = parseAuthMechanism(value); break; case "wtimeoutms": setLong(cfg.wTimeoutMS); break; case "w": try { if(icmp(value, "majority") == 0){ cfg.w = Bson("majority"); } else { cfg.w = Bson(to!long(value)); } } catch (Exception e) { logError("Invalid w value: [%s] Should be an integer number or 'majority'", value); } break; } } /* Some m_settings imply safe. If they are set, set safe to true regardless * of what it was set to in the URL string */ if( (cfg.w != Bson.init) || (cfg.wTimeoutMS != long.init) || cfg.journal || cfg.fsync ) { cfg.safe = true; } } return true; } /* Test for parseMongoDBUrl */ unittest { MongoClientSettings cfg; assert(parseMongoDBUrl(cfg, "mongodb://localhost")); assert(cfg.hosts.length == 1); assert(cfg.database == ""); assert(cfg.hosts[0].name == "localhost"); assert(cfg.hosts[0].port == 27017); assert(cfg.defQueryFlags == QueryFlags.None); assert(cfg.replicaSet == ""); assert(cfg.safe == false); assert(cfg.w == Bson.init); assert(cfg.wTimeoutMS == long.init); assert(cfg.fsync == false); assert(cfg.journal == false); assert(cfg.connectTimeoutMS == long.init); assert(cfg.socketTimeoutMS == long.init); assert(cfg.ssl == bool.init); assert(cfg.sslverifycertificate == true); cfg = MongoClientSettings.init; assert(parseMongoDBUrl(cfg, "mongodb://fred:foobar@localhost")); assert(cfg.username == "fred"); //assert(cfg.password == "foobar"); assert(cfg.digest == MongoClientSettings.makeDigest("fred", "foobar")); assert(cfg.hosts.length == 1); assert(cfg.database == ""); assert(cfg.hosts[0].name == "localhost"); assert(cfg.hosts[0].port == 27017); cfg = MongoClientSettings.init; assert(parseMongoDBUrl(cfg, "mongodb://fred:@localhost/baz")); assert(cfg.username == "fred"); //assert(cfg.password == ""); assert(cfg.digest == MongoClientSettings.makeDigest("fred", "")); assert(cfg.database == "baz"); assert(cfg.hosts.length == 1); assert(cfg.hosts[0].name == "localhost"); assert(cfg.hosts[0].port == 27017); cfg = MongoClientSettings.init; assert(parseMongoDBUrl(cfg, "mongodb://host1,host2,host3/?safe=true&w=2&wtimeoutMS=2000&slaveOk=true&ssl=true&sslverifycertificate=false")); assert(cfg.username == ""); //assert(cfg.password == ""); assert(cfg.digest == ""); assert(cfg.database == ""); assert(cfg.hosts.length == 3); assert(cfg.hosts[0].name == "host1"); assert(cfg.hosts[0].port == 27017); assert(cfg.hosts[1].name == "host2"); assert(cfg.hosts[1].port == 27017); assert(cfg.hosts[2].name == "host3"); assert(cfg.hosts[2].port == 27017); assert(cfg.safe == true); assert(cfg.w == Bson(2L)); assert(cfg.wTimeoutMS == 2000); assert(cfg.defQueryFlags == QueryFlags.SlaveOk); assert(cfg.ssl == true); assert(cfg.sslverifycertificate == false); cfg = MongoClientSettings.init; assert(parseMongoDBUrl(cfg, "mongodb://fred:flinstone@host1.example.com,host2.other.example.com:27108,host3:" ~ "27019/mydb?journal=true;fsync=true;connectTimeoutms=1500;sockettimeoutMs=1000;w=majority")); assert(cfg.username == "fred"); //assert(cfg.password == "flinstone"); assert(cfg.digest == MongoClientSettings.makeDigest("fred", "flinstone")); assert(cfg.database == "mydb"); assert(cfg.hosts.length == 3); assert(cfg.hosts[0].name == "host1.example.com"); assert(cfg.hosts[0].port == 27017); assert(cfg.hosts[1].name == "host2.other.example.com"); assert(cfg.hosts[1].port == 27108); assert(cfg.hosts[2].name == "host3"); assert(cfg.hosts[2].port == 27019); assert(cfg.fsync == true); assert(cfg.journal == true); assert(cfg.connectTimeoutMS == 1500); assert(cfg.socketTimeoutMS == 1000); assert(cfg.w == Bson("majority")); assert(cfg.safe == true); // Invalid URLs - these should fail to parse cfg = MongoClientSettings.init; assert(! (parseMongoDBUrl(cfg, "localhost:27018"))); assert(! (parseMongoDBUrl(cfg, "http://blah"))); assert(! (parseMongoDBUrl(cfg, "mongodb://@localhost"))); assert(! (parseMongoDBUrl(cfg, "mongodb://:thepass@localhost"))); assert(! (parseMongoDBUrl(cfg, "mongodb://:badport/"))); assert(parseMongoDBUrl(cfg, "mongodb://me:sl$ash/w0+rd@localhost")); assert(cfg.digest == MongoClientSettings.makeDigest("me", "sl$ash/w0+rd")); assert(cfg.hosts.length == 1); assert(cfg.hosts[0].name == "localhost"); assert(cfg.hosts[0].port == 27017); assert(parseMongoDBUrl(cfg, "mongodb://me:sl$ash/w0+rd@localhost/mydb")); assert(cfg.digest == MongoClientSettings.makeDigest("me", "sl$ash/w0+rd")); assert(cfg.database == "mydb"); assert(cfg.hosts.length == 1); assert(cfg.hosts[0].name == "localhost"); assert(cfg.hosts[0].port == 27017); } enum MongoAuthMechanism { none, scramSHA1, mongoDBCR, mongoDBX509 } private MongoAuthMechanism parseAuthMechanism(string str) @safe { switch (str) { case "SCRAM-SHA-1": return MongoAuthMechanism.scramSHA1; case "MONGODB-CR": return MongoAuthMechanism.mongoDBCR; case "MONGODB-X509": return MongoAuthMechanism.mongoDBX509; default: throw new Exception("Auth mechanism \"" ~ str ~ "\" not supported"); } } class MongoClientSettings { enum ushort defaultPort = 27017; string username; string digest; MongoHost[] hosts; string database; QueryFlags defQueryFlags = QueryFlags.None; string replicaSet; bool safe; Bson w; // Either a number or the string 'majority' long wTimeoutMS; bool fsync; bool journal; long connectTimeoutMS; long socketTimeoutMS; bool ssl; bool sslverifycertificate = true; string sslPEMKeyFile; string sslCAFile; MongoAuthMechanism authMechanism; static string makeDigest(string username, string password) @safe { return md5Of(username ~ ":mongo:" ~ password).toHexString().idup.toLower(); } } struct MongoHost { string name; ushort port; } vibe.d-0.8.2/redis/000077500000000000000000000000001324361747700140145ustar00rootroot00000000000000vibe.d-0.8.2/redis/dub.sdl000066400000000000000000000002401324361747700152660ustar00rootroot00000000000000name "redis" description "Redis database client implementation" dependency "vibe-d:http" version=">=0.0.0" targetType "library" sourcePaths "." importPaths "." vibe.d-0.8.2/redis/meson.build000066400000000000000000000046111324361747700161600ustar00rootroot00000000000000# Meson file for Vibe Redis vibe_redis_src_dir = include_directories('.') vibe_redis_src = [ 'vibe/db/redis/idioms.d', 'vibe/db/redis/redis.d', 'vibe/db/redis/sessionstore.d', 'vibe/db/redis/types.d' ] # # Install Includes # install_subdir('vibe/', install_dir: 'include/d/vibe/') # # Build Targets # redis_link_with = [vibe_utils_lib, vibe_core_lib, vibe_data_lib, vibe_inet_lib, vibe_stream_lib, vibe_textfilter_lib, vibe_tls_lib, vibe_crypto_lib, vibe_http_lib] # Redis database client implementation vibe_redis_lib = library('vibe-redis', [vibe_redis_src], include_directories: [vibe_utils_src_dir, vibe_core_src_dir, vibe_data_src_dir, vibe_inet_src_dir, vibe_stream_src_dir, vibe_textfilter_src_dir, vibe_tls_src_dir, vibe_crypto_src_dir, vibe_http_src_dir], install: true, link_with: [redis_link_with], dependencies: [crypto_dep, ssl_dep], version: project_version, soversion: project_soversion ) pkgc.generate(name: 'vibe-redis', libraries: [vibe_redis_lib] + redis_link_with, subdirs: 'd/vibe', version: project_version, description: 'Redis database client implementation for Vibe.' ) # # Tests # vibe_test_redis_exe = executable('vibe-test_redis', [vibe_redis_src], include_directories: [vibe_utils_src_dir, vibe_core_src_dir, vibe_data_src_dir, vibe_inet_src_dir, vibe_stream_src_dir, vibe_textfilter_src_dir, vibe_tls_src_dir, vibe_crypto_src_dir, vibe_http_src_dir], dependencies: [zlib_dep, crypto_dep, ssl_dep, libevent_dep], link_with: [redis_link_with], d_args: meson.get_compiler('d').unittest_args(), link_args: '-main' ) test('vibe-test_redis', vibe_test_redis_exe) vibe.d-0.8.2/redis/vibe/000077500000000000000000000000001324361747700147415ustar00rootroot00000000000000vibe.d-0.8.2/redis/vibe/db/000077500000000000000000000000001324361747700153265ustar00rootroot00000000000000vibe.d-0.8.2/redis/vibe/db/redis/000077500000000000000000000000001324361747700164345ustar00rootroot00000000000000vibe.d-0.8.2/redis/vibe/db/redis/idioms.d000066400000000000000000000371041324361747700200720ustar00rootroot00000000000000/** Type safe implementations of common Redis storage idioms. Note that the API is still subject to change! Copyright: © 2014 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.db.redis.idioms; import vibe.db.redis.redis; import vibe.db.redis.types; import core.time : msecs, seconds; /** */ struct RedisCollection(T /*: RedisValue*/, RedisCollectionOptions OPTIONS = RedisCollectionOptions.defaults, size_t ID_LENGTH = 1) { static assert(ID_LENGTH > 0, "IDs must have a length of at least one."); static assert(!(OPTIONS & RedisCollectionOptions.supportIteration) || ID_LENGTH == 1, "ID generation currently not supported for ID lengths greater 2."); alias IDS = Replicate!(long, ID_LENGTH); static if (ID_LENGTH == 1) alias IDType = long; else alias IDType = Tuple!IDS; private { RedisDatabase m_db; string[ID_LENGTH] m_prefix; string m_suffix; static if (OPTIONS & RedisCollectionOptions.supportIteration || OPTIONS & RedisCollectionOptions.supportPaging) { @property string m_idCounter() const { return m_prefix[0] ~ "max"; } @property string m_allSet() const { return m_prefix[0] ~ "all"; } } } this(RedisDatabase db, Replicate!(string, ID_LENGTH) name, string suffix = null) { initialize(db, name, suffix); } void initialize(RedisDatabase db, Replicate!(string, ID_LENGTH) name, string suffix = null) { m_db = db; foreach (i, N; name) { if (i == 0) m_prefix[i] = name[i] ~ ":"; else m_prefix[i] = ":" ~ name[i] ~ ":"; } if (suffix.length) m_suffix = ":" ~ suffix; } @property inout(RedisDatabase) database() inout { return m_db; } T opIndex(IDS id) { return T(m_db, getKey(id)); } static if (OPTIONS & RedisCollectionOptions.supportIteration || OPTIONS & RedisCollectionOptions.supportPaging) { /** Creates an ID without setting a corresponding value. */ IDType createID() { auto id = m_db.incr(m_idCounter); static if (OPTIONS & RedisCollectionOptions.supportPaging) m_db.zadd(m_allSet, id, id); else m_db.sadd(m_allSet, id); return id; } IDType add(U)(U args) { auto id = createID(); this[id] = args; return id; } bool isMember(long id) { static if (OPTIONS & RedisCollectionOptions.supportPaging) return m_db.zscore(m_allSet, id).hasNext(); else return m_db.sisMember(m_allSet, id); } static if (OPTIONS & RedisCollectionOptions.supportPaging) { // TODO: add range queries } int opApply(int delegate(long id) del) { static if (OPTIONS & RedisCollectionOptions.supportPaging) { foreach (id; m_db.zrange!long(m_allSet, 0, -1)) if (auto ret = del(id)) return ret; } else { foreach (id; m_db.smembers!long(m_allSet)) if (auto ret = del(id)) return ret; } return 0; } int opApply(int delegate(long id, T) del) { static if (OPTIONS & RedisCollectionOptions.supportPaging) { foreach (id; m_db.zrange!long(m_allSet, 0, -1)) if (auto ret = del(id, this[id])) return ret; } else { foreach (id; m_db.smembers!long(m_allSet)) if (auto ret = del(id, this[id])) return ret; } return 0; } } /** Removes an ID along with the corresponding value. */ void remove(IDS id) { this[id].remove(); static if (OPTIONS & RedisCollectionOptions.supportIteration || OPTIONS & RedisCollectionOptions.supportPaging) { static if (OPTIONS & RedisCollectionOptions.supportPaging) m_db.zrem(m_allSet, id); else m_db.srem(m_allSet, id); } } private string getKey(IDS ids) { import std.conv; static if (ID_LENGTH == 1) { return m_prefix[0] ~ ids.to!string ~ m_suffix; } else { string ret; foreach (i, id; ids) ret ~= m_prefix[i] ~ id.to!string; return ret ~ m_suffix; } } } enum RedisCollectionOptions { none = 0, // Plain collection without iteration/paging support supportIteration = 1<<0, // Store IDs in a set to be able to iterate and check for existence supportPaging = 1<<1, // Store IDs in a sorted set, to support range based queries defaults = supportIteration } /** Models a set of numbered hashes. This structure is roughly equivalent to a $(D string[string][long]) and is commonly used to store collections of objects, such as all users of a service. For a strongly typed variant of this class, see $(D RedisObjectCollection). See_also: $(D RedisObjectCollection) */ template RedisHashCollection(RedisCollectionOptions OPTIONS = RedisCollectionOptions.defaults, size_t ID_LENGTH = 1) { alias RedisHashCollection = RedisCollection!(RedisHash, OPTIONS, ID_LENGTH); } /** Models a strongly typed set of numbered hashes. This structure is roughly equivalent of a $(D T[long]). See_also: $(D RedisHashCollection) */ template RedisObjectCollection(T, RedisCollectionOptions OPTIONS = RedisCollectionOptions.defaults, size_t ID_LENGTH = 1) { alias RedisObjectCollection = RedisCollection!(RedisObject!T, OPTIONS, ID_LENGTH); } /// unittest { struct User { string name; string email; int age; string password; } void test() { auto db = connectRedis("127.0.0.1").getDatabase(0); db.deleteAll(); auto users = RedisObjectCollection!User(db, "users"); assert(users.add(User("Tom", "tom@example.com", 42, "secret")) == 0); assert(users.add(User("Peter", "peter@example.com", 42, "secret")) == 1); auto peter = users[1]; assert(peter.name == "Peter"); } } /** Models a single strongly typed object. This structure is rougly equivalent to a value of type $(D T). The underlying data is represented as a Redis hash. This means that only primitive fields are supported for $(D T). */ struct RedisObject(T) { private { RedisHash!string m_hash; } this(RedisDatabase db, string key) { m_hash = RedisHash!string(db, key); } this(RedisHash!string hash) { m_hash = hash; } @property T get() { T ret; auto repl = m_hash.database.hmget(m_hash.key, keys); foreach (i, F; typeof(ret.tupleof)) { assert(!repl.empty); __traits(getMember, ret, keys[i]) = repl.front.fromRedis!F; repl.popFront(); } assert(repl.empty); return ret; } @property bool exists() { return m_hash.value.exists(); } alias get this; void remove() { m_hash.remove(); } void opAssign(T val) { m_hash.database.hmset(m_hash.key, toTuple(toKeysAndValues(val)).expand); } mixin(fields()); static private string fields() { string ret; foreach (name; keys) { ret ~= "@property auto "~name~"() { return RedisObjectField!(typeof(T."~name~"))(m_hash, \""~name~"\"); }\n"; ret ~= "@property void "~name~"(typeof(T."~name~") val) { this."~name~".opAssign(val); }\n"; } return ret; } /*@property auto opDispatch(string name)() //if (is(typeof(getMember, T.init, name))) { return RedisObjectField!(typeof(__traits(getMember, T.init, name)))(m_hash, name); }*/ private static string[T.tupleof.length*2] toKeysAndValues(T val) { string[T.tupleof.length*2] ret; enum keys = fieldNames!T; foreach (i, m; val.tupleof) { ret[i*2+0] = keys[i]; ret[i*2+1] = m.toRedis(); } return ret; } private enum keys = fieldNames!T; } struct RedisObjectField(T) { private { RedisHash!string m_hash; string m_field; } this(RedisHash!string hash, string field) { m_hash = hash; m_field = field; } @property T get() { return m_hash.database.hget!string(m_hash.key, m_field).fromRedis!T; } alias get this; void opAssign(T val) { m_hash.database.hset(m_hash.key, m_field, val.toRedis); } void opUnary(string op)() if(op == "++") { m_hash.database.hincr(m_hash.key, m_field, 1); } void opUnary(string op)() if(op == "--") { m_hash.database.hincr(m_hash.key, m_field, -1); } void opOpAssign(string op)(long val) if (op == "+") { m_hash.database.hincr(m_hash.key, m_field, val); } void opOpAssign(string op)(long val) if (op == "-") { m_hash.database.hincr(m_hash.key, m_field, -val); } void opOpAssign(string op)(double val) if (op == "+") { m_hash.database.hincr(m_hash.key, m_field, val); } void opOpAssign(string op)(double val) if (op == "-") { m_hash.database.hincr(m_hash.key, m_field, -val); } } /** Models a strongly typed numbered set of values. */ template RedisSetCollection(T, RedisCollectionOptions OPTIONS = RedisCollectionOptions.defaults, size_t ID_LENGTH = 1) { alias RedisSetCollection = RedisCollection!(RedisSet!T, OPTIONS, ID_LENGTH); } /// unittest { void test() { auto db = connectRedis("127.0.0.1").getDatabase(0); auto user_groups = RedisSetCollection!(string, RedisCollectionOptions.none)(db, "user_groups"); // add some groups for user with ID 0 user_groups[0].insert("cooking"); user_groups[0].insert("hiking"); // add some groups for user with ID 1 user_groups[1].insert("coding"); assert(user_groups[0].contains("hiking")); assert(!user_groups[0].contains("coding")); assert(user_groups[1].contains("coding")); user_groups[0].remove("hiking"); assert(!user_groups[0].contains("hiking")); } } /** Models a strongly typed numbered set of values. */ template RedisListCollection(T, RedisCollectionOptions OPTIONS = RedisCollectionOptions.defaults, size_t ID_LENGTH = 1) { alias RedisListCollection = RedisCollection!(RedisList!T, OPTIONS, ID_LENGTH); } /** Models a strongly typed numbered set of values. */ template RedisStringCollection(T = string, RedisCollectionOptions OPTIONS = RedisCollectionOptions.defaults, size_t ID_LENGTH = 1) { alias RedisStringCollection = RedisCollection!(RedisString!T, OPTIONS, ID_LENGTH); } // TODO: support distributed locking struct RedisLock { private { RedisDatabase m_db; string m_key; string m_scriptSHA; } this(RedisDatabase db, string lock_key) { m_db = db; m_key = lock_key; m_scriptSHA = m_db.scriptLoad( `if redis.call("get",KEYS[1]) == ARGV[1] then return redis.call("del",KEYS[1]) else return 0 end`); } void performLocked(scope void delegate() del) { import std.random; import vibe.core.core; import vibe.data.bson; auto lockval = BsonObjectID.generate(); while (!m_db.setNX(m_key, cast(ubyte[])lockval, 30.seconds)) sleep(uniform(1, 50).msecs); scope (exit) m_db.evalSHA!(string, ubyte[])(m_scriptSHA, [m_key], cast(ubyte[])lockval); del(); } } // utility structure, temporarily placed here struct JsonEncoded(T) { import vibe.data.json; T value; alias value this; static JsonEncoded fromString(string str) { return JsonEncoded(deserializeJson!T(str)); } string toString() { return serializeToJsonString(value); } static assert(isStringSerializable!JsonEncoded); } JsonEncoded!T jsonEncoded(T)(T value) { return JsonEncoded!T(value); } // utility structure, temporarily placed here struct LazyString(T...) { private { T m_values; } this(T values) { m_values = values; } void toString(void delegate(string) sink) { foreach (v; m_values) dst.formattedWrite("%s", v); } } /** Strips all non-Redis fields from a struct. The returned struct will contain only fiels that can be converted using $(D toRedis) and that have names different than "id" or "_id". To reconstruct the full struct type, use the $(D RedisStripped.unstrip) method. */ RedisStripped!(T, strip_id) redisStrip(bool strip_id = true, T)(in T val) { return RedisStripped!(T, strip_id)(val); } /** Represents the stripped type of a struct. Strips all fields that cannot be directly stored as values in the Redis database. By default, any field named `id` or `_id` is also stripped. Set the `strip_id` parameter to `false` to keep those fields. See_also: $(D redisStrip) */ struct RedisStripped(T, bool strip_id = true) { import std.traits : Select, select; import std.typetuple; //pragma(msg, membersString!()); mixin(membersString()); alias StrippedMembers = FilterToType!(Select!(strip_id, isNonRedisTypeOrID, isNonRedisType), T.tupleof); alias UnstrippedMembers = FilterToType!(Select!(strip_id, isRedisTypeAndNotID, isRedisType), T.tupleof); alias strippedMemberIndices = indicesOf!(Select!(strip_id, isNonRedisTypeOrID, isNonRedisType), T.tupleof); alias unstrippedMemberIndices = indicesOf!(Select!(strip_id, isRedisTypeAndNotID, isRedisType), T.tupleof); this(in T src) { foreach (i, idx; unstrippedMemberIndices) this.tupleof[i] = src.tupleof[idx]; } /** Reconstructs the full (unstripped) struct value. The parameters for this method are all stripped fields in the order in which they appear in the original struct definition. */ T unstrip(StrippedMembers stripped_members) { T ret; populateRedisFields(ret, this.tupleof); populateNonRedisFields(ret, stripped_members); return ret; } private void populateRedisFields(ref T dst, UnstrippedMembers values) { foreach (i, v; values) dst.tupleof[unstrippedMemberIndices[i]] = v; } private void populateNonRedisFields(ref T dst, StrippedMembers values) { foreach (i, v; values) dst.tupleof[strippedMemberIndices[i]] = v; } /*pragma(msg, T); pragma(msg, "stripped: "~StrippedMembers.stringof~" - "~strippedMemberIndices.stringof); pragma(msg, "unstripped: "~UnstrippedMembers.stringof~" - "~unstrippedMemberIndices.stringof);*/ private static string membersString() { string ret; foreach (idx; unstrippedMemberIndices) { enum name = __traits(identifier, T.tupleof[idx]); ret ~= "typeof(T."~name~") "~name~";\n"; } return ret; } } unittest { static struct S1 { int id; string field; string[] array; } auto s1 = S1(42, "hello", ["world"]); auto s1s = redisStrip(s1); static assert(!is(typeof(s1s.id))); static assert(is(typeof(s1s.field))); static assert(!is(typeof(s1s.array))); assert(s1s.field == "hello"); auto s1u = s1s.unstrip(42, ["world"]); assert(s1u == s1); } private template indicesOf(alias PRED, T...) { import std.typetuple; template impl(size_t i) { static if (i < T.length) { static if (PRED!(T[i])) alias impl = TypeTuple!(i, impl!(i+1)); else alias impl = impl!(i+1); } else alias impl = TypeTuple!(); } alias indicesOf = impl!0; } private template FilterToType(alias PRED, T...) { import std.typetuple; template impl(size_t i) { static if (i < T.length) { static if (PRED!(T[i])) alias impl = TypeTuple!(typeof(T[i]), impl!(i+1)); else alias impl = impl!(i+1); } else alias impl = TypeTuple!(); } alias FilterToType = impl!0; } private template isRedisType(alias F) { enum isRedisType = is(typeof(&toRedis!(typeof(F)))); } private template isNonRedisType(alias F) { enum isNonRedisType = !isRedisType!F; } static assert(isRedisType!(int.init) && isRedisType!(string.init)); static assert(!isRedisType!((float[]).init)); private template isRedisTypeAndNotID(alias F) { import std.algorithm; enum isRedisTypeAndNotID = !__traits(identifier, F).among("_id", "id") && isRedisType!F; } private template isNonRedisTypeOrID(alias F) { enum isNonRedisTypeOrID = !isRedisTypeAndNotID!F; } static assert(isRedisTypeAndNotID!(int.init) && isRedisTypeAndNotID!(string.init)); private auto toTuple(size_t N, T)(T[N] values) { import std.typecons; import std.typetuple; template impl(size_t i) { static if (i < N) alias impl = TypeTuple!(T, impl!(i+1)); else alias impl = TypeTuple!(); } Tuple!(impl!0) ret; foreach (i, T; impl!0) ret[i] = values[i]; return ret; } private template fieldNames(T) { import std.typetuple; template impl(size_t i) { static if (i < T.tupleof.length) alias impl = TypeTuple!(__traits(identifier, T.tupleof[i]), impl!(i+1)); else alias impl = TypeTuple!(); } enum string[T.tupleof.length] fieldNames = [impl!0]; } unittest { static struct Test { int a; float b; void method() {} Test[] c; void opAssign(Test) {}; ~this() {} } static assert(fieldNames!Test[] == ["a", "b", "c"]); } private template Replicate(T, size_t L) { import std.typetuple; static if (L > 0) { alias Replicate = TypeTuple!(T, Replicate!(T, L-1)); } else alias Replicate = TypeTuple!(); } vibe.d-0.8.2/redis/vibe/db/redis/redis.d000066400000000000000000001576011324361747700177210ustar00rootroot00000000000000/** Redis database client implementation. Copyright: © 2012-2016 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Jan Krüger, Sönke Ludwig, Michael Eisendle, Etienne Cimon */ module vibe.db.redis.redis; public import vibe.core.net; import vibe.core.connectionpool; import vibe.core.core; import vibe.core.log; import vibe.inet.url; import vibe.internal.allocator; import vibe.internal.freelistref; import vibe.stream.operations; import std.conv; import std.exception; import std.format; import std.range : isInputRange, isOutputRange; import std.string; import std.traits; import std.typecons : Nullable; import std.utf; @safe: /** Returns a RedisClient that can be used to communicate to the specified database server. */ RedisClient connectRedis(string host, ushort port = RedisClient.defaultPort) { return new RedisClient(host, port); } /** Returns a Redis database connecction instance corresponding to the given URL. The URL must be of the format "redis://server[:port]/dbnum". */ RedisDatabase connectRedisDB(URL url) { auto cli = connectRedis(url.host, url.port != 0 ? url.port : RedisClient.defaultPort); // TODO: support password return cli.getDatabase(url.localURI[1 .. $].to!long); } /** A redis client with connection pooling. */ final class RedisClient { private { ConnectionPool!RedisConnection m_connections; string m_authPassword; string m_version; long m_selectedDB; } enum defaultPort = 6379; this(string host = "127.0.0.1", ushort port = defaultPort) { m_connections = new ConnectionPool!RedisConnection({ return new RedisConnection(host, port); }); } /// Returns Redis version @property string redisVersion() { if(m_version == "") { import std.string; auto info = info(); auto lines = info.splitLines(); if (lines.length > 1) { foreach (string line; lines) { auto lineParams = line.split(":"); if (lineParams.length > 1 && lineParams[0] == "redis_version") { m_version = lineParams[1]; break; } } } } return m_version; } /** Returns a handle to the given database. */ RedisDatabase getDatabase(long index) { return RedisDatabase(this, index); } /** Creates a RedisSubscriber instance for launching a pubsub listener */ RedisSubscriber createSubscriber() { return RedisSubscriber(this); } /* Connection */ /// Authenticate to the server void auth(string password) { m_authPassword = password; } /// Echo the given string T echo(T, U)(U data) if(isValidRedisValueReturn!T && isValidRedisValueType!U) { return request!T("ECHO", data); } /// Ping the server void ping() { request("PING"); } /// Close the connection void quit() { request("QUIT"); } /* Server */ //TODO: BGREWRITEAOF //TODO: BGSAVE /// Get the value of a configuration parameter T getConfig(T)(string parameter) if(isValidRedisValueReturn!T) { return request!T("CONFIG", "GET", parameter); } /// Set a configuration parameter to the given value void setConfig(T)(string parameter, T value) if(isValidRedisValueType!T) { request("CONFIG", "SET", parameter, value); } /// Reset the stats returned by INFO void configResetStat() { request("CONFIG", "RESETSTAT"); } //TOOD: Debug Object //TODO: Debug Segfault /** Deletes all keys from all databases. See_also: $(LINK2 http://redis.io/commands/flushall, FLUSHALL) */ void deleteAll() { request("FLUSHALL"); } /// Get information and statistics about the server string info() { return request!string("INFO"); } /// Get the UNIX time stamp of the last successful save to disk long lastSave() { return request!long("LASTSAVE"); } //TODO monitor /// Synchronously save the dataset to disk void save() { request("SAVE"); } /// Synchronously save the dataset to disk and then shut down the server void shutdown() { request("SHUTDOWN"); } /// Make the server a slave of another instance, or promote it as master void slaveOf(string host, ushort port) { request("SLAVEOF", host, port); } //TODO slowlog //TODO sync private T request(T = void, ARGS...)(string command, scope ARGS args) { return requestDB!(T, ARGS)(m_selectedDB, command, args); } private T requestDB(T, ARGS...)(long db, string command, scope ARGS args) { auto conn = m_connections.lockConnection(); conn.setAuth(m_authPassword); conn.setDB(db); version (RedisDebug) { import std.conv; string debugargs = command; foreach (i, A; ARGS) debugargs ~= ", " ~ args[i].to!string; } static if (is(T == void)) { version (RedisDebug) logDebug("Redis request: %s => void", debugargs); _request!void(conn, command, args); } else static if (!isInstanceOf!(RedisReply, T)) { auto ret = _request!T(conn, command, args); version (RedisDebug) logDebug("Redis request: %s => %s", debugargs, ret.to!string); return ret; } else { auto ret = _request!T(conn, command, args); version (RedisDebug) logDebug("Redis request: %s => RedisReply", debugargs); return ret; } } } /** Accesses the contents of a Redis database */ struct RedisDatabase { private { RedisClient m_client; long m_index; } private this(RedisClient client, long index) { m_client = client; m_index = index; } /** The Redis client with which the database is accessed. */ @property inout(RedisClient) client() inout { return m_client; } /** Index of the database. */ @property long index() const { return m_index; } /** Deletes all keys of the database. See_also: $(LINK2 http://redis.io/commands/flushdb, FLUSHDB) */ void deleteAll() { request!void("FLUSHDB"); } /// Delete a key long del(scope string[] keys...) { return request!long("DEL", keys); } /// Determine if a key exists bool exists(string key) { return request!bool("EXISTS", key); } /// Set a key's time to live in seconds bool expire(string key, long seconds) { return request!bool("EXPIRE", key, seconds); } /// Set a key's time to live with D notation. E.g. $(D 5.minutes) for 60 * 5 seconds. bool expire(string key, Duration timeout) { return request!bool("PEXPIRE", key, timeout.total!"msecs"); } /// Set the expiration for a key as a UNIX timestamp bool expireAt(string key, long timestamp) { return request!bool("EXPIREAT", key, timestamp); } /// Find all keys matching the given glob-style pattern (Supported wildcards: *, ?, [ABC]) RedisReply!T keys(T = string)(string pattern) if(isValidRedisValueType!T) { return request!(RedisReply!T)("KEYS", pattern); } /// Move a key to another database bool move(string key, long db) { return request!bool("MOVE", key, db); } /// Remove the expiration from a key bool persist(string key) { return request!bool("PERSIST", key); } //TODO: object /// Return a random key from the keyspace string randomKey() { return request!string("RANDOMKEY"); } /// Rename a key void rename(string key, string newkey) { request("RENAME", key, newkey); } /// Rename a key, only if the new key does not exist bool renameNX(string key, string newkey) { return request!bool("RENAMENX", key, newkey); } //TODO sort /// Get the time to live for a key long ttl(string key) { return request!long("TTL", key); } /// Get the time to live for a key in milliseconds long pttl(string key) { return request!long("PTTL", key); } /// Determine the type stored at key (string, list, set, zset and hash.) string type(string key) { return request!string("TYPE", key); } /* String Commands */ /// Append a value to a key long append(T)(string key, T suffix) if(isValidRedisValueType!T) { return request!long("APPEND", key, suffix); } /// Decrement the integer value of a key by one long decr(string key, long value = 1) { return value == 1 ? request!long("DECR", key) : request!long("DECRBY", key, value); } /// Get the value of a key T get(T = string)(string key) if(isValidRedisValueReturn!T) { return request!T("GET", key); } /// Returns the bit value at offset in the string value stored at key bool getBit(string key, long offset) { return request!bool("GETBIT", key, offset); } /// Get a substring of the string stored at a key T getRange(T = string)(string key, long start, long end) if(isValidRedisValueReturn!T) { return request!T("GETRANGE", key, start, end); } /// Set the string value of a key and return its old value T getSet(T = string, U)(string key, U value) if(isValidRedisValueReturn!T && isValidRedisValueType!U) { return request!T("GETSET", key, value); } /// Increment the integer value of a key long incr(string key, long value = 1) { return value == 1 ? request!long("INCR", key) : request!long("INCRBY", key, value); } /// Increment the real number value of a key long incr(string key, double value) { return request!long("INCRBYFLOAT", key, value); } /// Get the values of all the given keys RedisReply!T mget(T = string)(string[] keys) if(isValidRedisValueType!T) { return request!(RedisReply!T)("MGET", keys); } /// Set multiple keys to multiple values void mset(ARGS...)(ARGS args) { static assert(ARGS.length % 2 == 0 && ARGS.length >= 2, "Arguments to mset must be pairs of key/value"); foreach (i, T; ARGS ) static assert(i % 2 != 0 || is(T == string), "Keys must be strings."); request("MSET", args); } /// Set multiple keys to multiple values, only if none of the keys exist bool msetNX(ARGS...)(ARGS args) { static assert(ARGS.length % 2 == 0 && ARGS.length >= 2, "Arguments to mset must be pairs of key/value"); foreach (i, T; ARGS ) static assert(i % 2 != 0 || is(T == string), "Keys must be strings."); return request!bool("MSETEX", args); } /// Set the string value of a key void set(T)(string key, T value) if(isValidRedisValueType!T) { request("SET", key, value); } /// Set the value of a key, only if the key does not exist bool setNX(T)(string key, T value) if(isValidRedisValueType!T) { return request!bool("SETNX", key, value); } /// Set the value of a key, only if the key already exists bool setXX(T)(string key, T value) if(isValidRedisValueType!T) { return "OK" == request!string("SET", key, value, "XX"); } /// Set the value of a key, only if the key does not exist, and also set the specified expire time using D notation, e.g. $(D 5.minutes) for 5 minutes. bool setNX(T)(string key, T value, Duration expire_time) if(isValidRedisValueType!T) { return "OK" == request!string("SET", key, value, "PX", expire_time.total!"msecs", "NX"); } /// Set the value of a key, only if the key already exists, and also set the specified expire time using D notation, e.g. $(D 5.minutes) for 5 minutes. bool setXX(T)(string key, T value, Duration expire_time) if(isValidRedisValueType!T) { return "OK" == request!string("SET", key, value, "PX", expire_time.total!"msecs", "XX"); } /// Sets or clears the bit at offset in the string value stored at key bool setBit(string key, long offset, bool value) { return request!bool("SETBIT", key, offset, value ? "1" : "0"); } /// Set the value and expiration of a key void setEX(T)(string key, long seconds, T value) if(isValidRedisValueType!T) { request("SETEX", key, seconds, value); } /// Overwrite part of a string at key starting at the specified offset long setRange(T)(string key, long offset, T value) if(isValidRedisValueType!T) { return request!long("SETRANGE", key, offset, value); } /// Get the length of the value stored in a key long strlen(string key) { return request!long("STRLEN", key); } /* Hashes */ /// Delete one or more hash fields long hdel(string key, scope string[] fields...) { return request!long("HDEL", key, fields); } /// Determine if a hash field exists bool hexists(string key, string field) { return request!bool("HEXISTS", key, field); } /// Set multiple hash fields to multiple values void hset(T)(string key, string field, T value) if(isValidRedisValueType!T) { request("HSET", key, field, value); } /// Set the value of a hash field, only if the field does not exist bool hsetNX(T)(string key, string field, T value) if(isValidRedisValueType!T) { return request!bool("HSETNX", key, field, value); } /// Get the value of a hash field. T hget(T = string)(string key, string field) if(isValidRedisValueReturn!T) { return request!T("HGET", key, field); } /// Get all the fields and values in a hash RedisReply!T hgetAll(T = string)(string key) if(isValidRedisValueType!T) { return request!(RedisReply!T)("HGETALL", key); } /// Increment the integer value of a hash field long hincr(string key, string field, long value=1) { return request!long("HINCRBY", key, field, value); } /// Increment the real number value of a hash field long hincr(string key, string field, double value) { return request!long("HINCRBYFLOAT", key, field, value); } /// Get all the fields in a hash RedisReply!T hkeys(T = string)(string key) if(isValidRedisValueType!T) { return request!(RedisReply!T)("HKEYS", key); } /// Get the number of fields in a hash long hlen(string key) { return request!long("HLEN", key); } /// Get the values of all the given hash fields RedisReply!T hmget(T = string)(string key, scope string[] fields...) if(isValidRedisValueType!T) { return request!(RedisReply!T)("HMGET", key, fields); } /// Set multiple hash fields to multiple values void hmset(ARGS...)(string key, ARGS args) { request("HMSET", key, args); } /// Get all the values in a hash RedisReply!T hvals(T = string)(string key) if(isValidRedisValueType!T) { return request!(RedisReply!T)("HVALS", key); } /* Lists */ /// Get an element from a list by its index T lindex(T = string)(string key, long index) if(isValidRedisValueReturn!T) { return request!T("LINDEX", key, index); } /// Insert value in the list stored at key before the reference value pivot. long linsertBefore(T1, T2)(string key, T1 pivot, T2 value) if(isValidRedisValueType!T1 && isValidRedisValueType!T2) { return request!long("LINSERT", key, "BEFORE", pivot, value); } /// Insert value in the list stored at key after the reference value pivot. long linsertAfter(T1, T2)(string key, T1 pivot, T2 value) if(isValidRedisValueType!T1 && isValidRedisValueType!T2) { return request!long("LINSERT", key, "AFTER", pivot, value); } /// Returns the length of the list stored at key. If key does not exist, it is interpreted as an empty list and 0 is returned. long llen(string key) { return request!long("LLEN", key); } /// Insert all the specified values at the head of the list stored at key. long lpush(ARGS...)(string key, ARGS args) { return request!long("LPUSH", key, args); } /// Inserts value at the head of the list stored at key, only if key already exists and holds a list. long lpushX(T)(string key, T value) if(isValidRedisValueType!T) { return request!long("LPUSHX", key, value); } /// Insert all the specified values at the tail of the list stored at key. long rpush(ARGS...)(string key, ARGS args) { return request!long("RPUSH", key, args); } /// Inserts value at the tail of the list stored at key, only if key already exists and holds a list. long rpushX(T)(string key, T value) if(isValidRedisValueType!T) { return request!long("RPUSHX", key, value); } /// Returns the specified elements of the list stored at key. RedisReply!T lrange(T = string)(string key, long start, long stop) { return request!(RedisReply!T)("LRANGE", key, start, stop); } /// Removes the first count occurrences of elements equal to value from the list stored at key. long lrem(T)(string key, long count, T value) if(isValidRedisValueType!T) { return request!long("LREM", key, count, value); } /// Sets the list element at index to value. void lset(T)(string key, long index, T value) if(isValidRedisValueType!T) { request("LSET", key, index, value); } /// Trim an existing list so that it will contain only the specified range of elements specified. /// Equivalent to $(D range = range[start .. stop+1]) void ltrim(string key, long start, long stop) { request("LTRIM", key, start, stop); } /// Removes and returns the last element of the list stored at key. T rpop(T = string)(string key) if(isValidRedisValueReturn!T) { return request!T("RPOP", key); } /// Removes and returns the first element of the list stored at key. T lpop(T = string)(string key) if(isValidRedisValueReturn!T) { return request!T("LPOP", key); } /// BLPOP is a blocking list pop primitive. It is the blocking version of LPOP because it blocks /// the connection when there are no elements to pop from any of the given lists. Nullable!(Tuple!(string, T)) blpop(T = string)(string key, long seconds) if(isValidRedisValueReturn!T) { auto reply = request!(RedisReply!(ubyte[]))("BLPOP", key, seconds); Nullable!(Tuple!(string, T)) ret; if (reply.empty || reply.frontIsNull) return ret; string rkey = reply.front.convertToType!string(); reply.popFront(); ret = tuple(rkey, reply.front.convertToType!T()); return ret; } /// Atomically returns and removes the last element (tail) of the list stored at source, /// and pushes the element at the first element (head) of the list stored at destination. T rpoplpush(T = string)(string key, string destination) if(isValidRedisValueReturn!T) { return request!T("RPOPLPUSH", key, destination); } /* Sets */ /// Add the specified members to the set stored at key. Specified members that are already a member of this set are ignored. /// If key does not exist, a new set is created before adding the specified members. long sadd(ARGS...)(string key, ARGS args) { return request!long("SADD", key, args); } /// Returns the set cardinality (number of elements) of the set stored at key. long scard(string key) { return request!long("SCARD", key); } /// Returns the members of the set resulting from the difference between the first set and all the successive sets. RedisReply!T sdiff(T = string)(scope string[] keys...) if(isValidRedisValueType!T) { return request!(RedisReply!T)("SDIFF", keys); } /// This command is equal to SDIFF, but instead of returning the resulting set, it is stored in destination. /// If destination already exists, it is overwritten. long sdiffStore(string destination, scope string[] keys...) { return request!long("SDIFFSTORE", destination, keys); } /// Returns the members of the set resulting from the intersection of all the given sets. RedisReply!T sinter(T = string)(string[] keys) if(isValidRedisValueType!T) { return request!(RedisReply!T)("SINTER", keys); } /// This command is equal to SINTER, but instead of returning the resulting set, it is stored in destination. /// If destination already exists, it is overwritten. long sinterStore(string destination, scope string[] keys...) { return request!long("SINTERSTORE", destination, keys); } /// Returns if member is a member of the set stored at key. bool sisMember(T)(string key, T member) if(isValidRedisValueType!T) { return request!bool("SISMEMBER", key, member); } /// Returns all the members of the set value stored at key. RedisReply!T smembers(T = string)(string key) if(isValidRedisValueType!T) { return request!(RedisReply!T)("SMEMBERS", key); } /// Move member from the set at source to the set at destination. This operation is atomic. /// In every given moment the element will appear to be a member of source or destination for other clients. bool smove(T)(string source, string destination, T member) if(isValidRedisValueType!T) { return request!bool("SMOVE", source, destination, member); } /// Removes and returns a random element from the set value stored at key. T spop(T = string)(string key) if(isValidRedisValueReturn!T) { return request!T("SPOP", key ); } /// Returns a random element from the set stored at key. T srandMember(T = string)(string key) if(isValidRedisValueReturn!T) { return request!T("SRANDMEMBER", key ); } ///returns count random elements from the set stored at key RedisReply!T srandMember(T = string)(string key, long count) if(isValidRedisValueReturn!T) { return request!(RedisReply!T)("SRANDMEMBER", key, count ); } /// Remove the specified members from the set stored at key. long srem(ARGS...)(string key, ARGS args) { return request!long("SREM", key, args); } /// Returns the members of the set resulting from the union of all the given sets. RedisReply!T sunion(T = string)(scope string[] keys...) if(isValidRedisValueType!T) { return request!(RedisReply!T)("SUNION", keys); } /// This command is equal to SUNION, but instead of returning the resulting set, it is stored in destination. long sunionStore(scope string[] keys...) { return request!long("SUNIONSTORE", keys); } /* Sorted Sets */ /// Add one or more members to a sorted set, or update its score if it already exists long zadd(ARGS...)(string key, ARGS args) { return request!long("ZADD", key, args); } /// Returns the sorted set cardinality (number of elements) of the sorted set stored at key. long zcard(string key) { return request!long("ZCARD", key); } /// Returns the number of elements in the sorted set at key with a score between min and max long zcount(string RNG = "[]")(string key, double min, double max) { return request!long("ZCOUNT", key, getMinMaxArgs!RNG(min, max)); } /// Increments the score of member in the sorted set stored at key by increment. double zincrby(T)(string key, double value, T member) if (isValidRedisValueType!T) { return request!double("ZINCRBY", key, value, member); } //TODO: zinterstore /// Returns the specified range of elements in the sorted set stored at key. RedisReply!T zrange(T = string)(string key, long start, long end, bool with_scores = false) if(isValidRedisValueType!T) { if (with_scores) return request!(RedisReply!T)("ZRANGE", key, start, end, "WITHSCORES"); else return request!(RedisReply!T)("ZRANGE", key, start, end); } /// When all the elements in a sorted set are inserted with the same score, in order to force lexicographical ordering, /// this command returns all the elements in the sorted set at key with a value between min and max. RedisReply!T zrangeByLex(T = string)(string key, string min = "-", string max = "+", long offset = 0, long count = -1) if(isValidRedisValueType!T) { if (offset > 0 || count != -1) return request!(RedisReply!T)("ZRANGEBYLEX", key, min, max, "LIMIT", offset, count); else return request!(RedisReply!T)("ZRANGEBYLEX", key, min, max); } /// Returns all the elements in the sorted set at key with a score between start and end inclusively RedisReply!T zrangeByScore(T = string, string RNG = "[]")(string key, double start, double end, bool with_scores = false) if(isValidRedisValueType!T) { if (with_scores) return request!(RedisReply!T)("ZRANGEBYSCORE", key, getMinMaxArgs!RNG(start, end), "WITHSCORES"); else return request!(RedisReply!T)("ZRANGEBYSCORE", key, getMinMaxArgs!RNG(start, end)); } /// Computes an internal list of elements in the sorted set at key with a score between start and end inclusively, /// and returns a range subselection similar to $(D results[offset .. offset+count]) RedisReply!T zrangeByScore(T = string, string RNG = "[]")(string key, double start, double end, long offset, long count, bool with_scores = false) if(isValidRedisValueType!T) { assert(offset >= 0); assert(count >= 0); if (with_scores) return request!(RedisReply!T)("ZRANGEBYSCORE", key, getMinMaxArgs!RNG(start, end), "WITHSCORES", "LIMIT", offset, count); else return request!(RedisReply!T)("ZRANGEBYSCORE", key, getMinMaxArgs!RNG(start, end), "LIMIT", offset, count); } /// Returns the rank of member in the sorted set stored at key, with the scores ordered from low to high. long zrank(T)(string key, T member) if (isValidRedisValueType!T) { auto str = request!string("ZRANK", key, member); return str != "" ? parse!long(str) : -1; } /// Removes the specified members from the sorted set stored at key. long zrem(ARGS...)(string key, ARGS members) { return request!long("ZREM", key, members); } /// Removes all elements in the sorted set stored at key with rank between start and stop. long zremRangeByRank(string key, long start, long stop) { return request!long("ZREMRANGEBYRANK", key, start, stop); } /// Removes all elements in the sorted set stored at key with a score between min and max (inclusive). long zremRangeByScore(string RNG = "[]")(string key, double min, double max) { return request!long("ZREMRANGEBYSCORE", key, getMinMaxArgs!RNG(min, max));} /// Returns the specified range of elements in the sorted set stored at key. RedisReply!T zrevRange(T = string)(string key, long start, long end, bool with_scores = false) if(isValidRedisValueType!T) { if (with_scores) return request!(RedisReply!T)("ZREVRANGE", key, start, end, "WITHSCORES"); else return request!(RedisReply!T)("ZREVRANGE", key, start, end); } /// Returns all the elements in the sorted set at key with a score between max and min (including elements with score equal to max or min). RedisReply!T zrevRangeByScore(T = string, string RNG = "[]")(string key, double min, double max, bool with_scores=false) if(isValidRedisValueType!T) { if (with_scores) return request!(RedisReply!T)("ZREVRANGEBYSCORE", key, getMinMaxArgs!RNG(min, max), "WITHSCORES"); else return request!(RedisReply!T)("ZREVRANGEBYSCORE", key, getMinMaxArgs!RNG(min, max)); } /// Computes an internal list of elements in the sorted set at key with a score between max and min, and /// returns a window of elements selected in a way equivalent to $(D results[offset .. offset + count]) RedisReply!T zrevRangeByScore(T = string, string RNG = "[]")(string key, double min, double max, long offset, long count, bool with_scores=false) if(isValidRedisValueType!T) { assert(offset >= 0); assert(count >= 0); if (with_scores) return request!(RedisReply!T)("ZREVRANGEBYSCORE", key, getMinMaxArgs!RNG(min, max), "WITHSCORES", "LIMIT", offset, count); else return request!(RedisReply!T)("ZREVRANGEBYSCORE", key, getMinMaxArgs!RNG(min, max), "LIMIT", offset, count); } /// Returns the rank of member in the sorted set stored at key, with the scores ordered from high to low. long zrevRank(T)(string key, T member) if (isValidRedisValueType!T) { auto str = request!string("ZREVRANK", key, member); return str != "" ? parse!long(str) : -1; } /// Returns the score of member in the sorted set at key. RedisReply!T zscore(T = string, U)(string key, U member) if(isValidRedisValueType!T && isValidRedisValueType!U) { return request!(RedisReply!T)("ZSCORE", key, member); } /* Hyperloglog */ /// Adds one or more Keys to a HyperLogLog data structure . long pfadd(ARGS...)(string key, ARGS args) { return request!long("PFADD", key, args); } /** Returns the approximated cardinality computed by the HyperLogLog data structure stored at the specified key. When called with a single key, returns the approximated cardinality computed by the HyperLogLog data structure stored at the specified variable, which is 0 if the variable does not exist. When called with multiple keys, returns the approximated cardinality of the union of the HyperLogLogs passed, by internally merging the HyperLogLogs stored at the provided keys into a temporary HyperLogLog. */ long pfcount(scope string[] keys...) { return request!long("PFCOUNT", keys); } /// Merge multiple HyperLogLog values into a new one. void pfmerge(ARGS...)(string destkey, ARGS args) { request("PFMERGE", destkey, args); } //TODO: zunionstore /* Pub / Sub */ /// Publishes a message to all clients subscribed at the channel long publish(string channel, string message) { auto str = request!string("PUBLISH", channel, message); return str != "" ? parse!long(str) : -1; } /// Inspect the state of the Pub/Sub subsystem RedisReply!T pubsub(T = string)(string subcommand, scope string[] args...) if(isValidRedisValueType!T) { return request!(RedisReply!T)("PUBSUB", subcommand, args); } /* TODO: Transactions */ /// Return the number of keys in the selected database long dbSize() { return request!long("DBSIZE"); } /* LUA Scripts */ /// Execute a Lua script server side RedisReply!T eval(T = string, ARGS...)(string lua_code, scope string[] keys, scope ARGS args) if(isValidRedisValueType!T) { return request!(RedisReply!T)("EVAL", lua_code, keys.length, keys, args); } /// Evaluates a script cached on the server side by its SHA1 digest. Scripts are cached on the server side using the scriptLoad function. RedisReply!T evalSHA(T = string, ARGS...)(string sha, scope string[] keys, scope ARGS args) if(isValidRedisValueType!T) { return request!(RedisReply!T)("EVALSHA", sha, keys.length, keys, args); } //scriptExists //scriptFlush //scriptKill /// Load a script into the scripts cache, without executing it. Run it using evalSHA. string scriptLoad(string lua_code) { return request!string("SCRIPT", "LOAD", lua_code); } /// Run the specified command and arguments in the Redis database server T request(T = void, ARGS...)(string command, scope ARGS args) { return m_client.requestDB!(T, ARGS)(m_index, command, args); } private static string[2] getMinMaxArgs(string RNG)(double min, double max) { // TODO: avoid GC allocations static assert(RNG.length == 2, "The RNG range specification must be two characters long"); string[2] ret; string mins, maxs; mins = min == -double.infinity ? "-inf" : min == double.infinity ? "+inf" : format(typeFormatString!double, min); maxs = max == -double.infinity ? "-inf" : max == double.infinity ? "+inf" : format(typeFormatString!double, max); static if (RNG[0] == '[') ret[0] = mins; else static if (RNG[0] == '(') ret[0] = '('~mins; else static assert(false, "Opening range specification mist be either '[' or '('."); static if (RNG[1] == ']') ret[1] = maxs; else static if (RNG[1] == ')') ret[1] = '('~maxs; else static assert(false, "Closing range specification mist be either ']' or ')'."); return ret; } } /** A redis subscription listener */ import std.datetime; import std.variant; import std.typecons : Tuple, tuple; import std.container : Array; import std.algorithm : canFind; import std.range : takeOne; import std.array : array; import vibe.core.concurrency; import vibe.core.sync; alias RedisSubscriber = FreeListRef!RedisSubscriberImpl; final class RedisSubscriberImpl { private { RedisClient m_client; LockedConnection!RedisConnection m_lockedConnection; bool[string] m_subscriptions; string[] m_pendingSubscriptions; bool m_listening; bool m_stop; Task m_listener; Task m_listenerHelper; Task m_waiter; Task m_stopWaiter; InterruptibleRecursiveTaskMutex m_mutex; InterruptibleTaskMutex m_connMutex; } private enum Action { DATA, STOP, STARTED, SUBSCRIBE, UNSUBSCRIBE } @property bool isListening() const { return m_listening; } /// Get a list of channels with active subscriptions @property string[] subscriptions() const { return () @trusted { return m_subscriptions.keys; } (); } bool hasSubscription(string channel) const { return (channel in m_subscriptions) !is null && m_subscriptions[channel]; } this(RedisClient client) { logTrace("this()"); m_client = client; m_mutex = new InterruptibleRecursiveTaskMutex; m_connMutex = new InterruptibleTaskMutex; } // FIXME: instead of waiting here, the class must be reference counted // and destructions needs to be defered until everything is stopped ~this() { logTrace("~this"); waitForStop(); } // Task will block until the listener is finished private void waitForStop() { logTrace("waitForStop"); if (!m_listening) return; void impl() @safe { m_mutex.performLocked!({ m_stopWaiter = Task.getThis(); }); if (!m_listening) return; // verify again in case the mutex was locked by bstop scope(exit) { m_mutex.performLocked!({ m_stopWaiter = Task(); }); } bool stopped; do { () @trusted { receive((Action act) { if (act == Action.STOP) stopped = true; }); } (); } while (!stopped); enforce(stopped, "Failed to wait for Redis listener to stop"); } inTask(&impl); } /// Stop listening and yield until the operation is complete. void bstop(){ logTrace("bstop"); if (!m_listening) return; void impl() @safe { m_mutex.performLocked!({ m_waiter = Task.getThis(); scope(exit) m_waiter = Task(); stop(); bool stopped; do { if (!() @trusted { return receiveTimeout(3.seconds, (Action act) { if (act == Action.STOP) stopped = true; }); } ()) break; } while (!stopped); enforce(stopped, "Failed to wait for Redis listener to stop"); }); } inTask(&impl); } /// Stop listening asynchroneously void stop(){ logTrace("stop"); if (!m_listening) return; void impl() @safe { m_mutex.performLocked!({ m_stop = true; () @trusted { m_listener.send(Action.STOP); } (); // send a message to wake up the listenerHelper from the reply if (m_subscriptions.length > 0) { m_connMutex.performLocked!(() { _request_void(m_lockedConnection, "UNSUBSCRIBE", () @trusted { return cast(string[]) m_subscriptions.keys.takeOne.array; } ()); }); sleep(30.msecs); } }); } inTask(&impl); } private bool hasNewSubscriptionIn(scope string[] args) { bool has_new; foreach (arg; args) if (!hasSubscription(arg)) has_new = true; if (!has_new) return false; return true; } private bool anySubscribed(scope string[] args) { bool any_subscribed; foreach (arg ; args) { if (hasSubscription(arg)) any_subscribed = true; } return any_subscribed; } /// Completes the subscription for a listener to start receiving pubsub messages /// on the corresponding channel(s). Returns instantly if already subscribed. /// If a connection error is thrown here, it stops the listener. void subscribe(scope string[] args...) { logTrace("subscribe"); if (!m_listening) { foreach (arg; args) m_pendingSubscriptions ~= arg; return; } if (!hasNewSubscriptionIn(args)) return; void impl() @safe { scope(failure) { logTrace("Failure"); bstop(); } try { m_mutex.performLocked!({ m_waiter = Task.getThis(); scope(exit) m_waiter = Task(); bool subscribed; m_connMutex.performLocked!({ _request_void(m_lockedConnection, "SUBSCRIBE", args); }); while(!() @trusted { return m_subscriptions.byKey.canFind(args); } ()) { if (!() @trusted { return receiveTimeout(2.seconds, (Action act) { enforce(act == Action.SUBSCRIBE); }); } ()) break; subscribed = true; } debug { auto keys = () @trusted { return m_subscriptions.keys; } (); logTrace("Can find keys?: %s", keys.canFind(args)); logTrace("Subscriptions: %s", keys); } enforce(subscribed, "Could not complete subscription(s)."); }); } catch (Exception e) { logDebug("Redis subscribe() failed: ", e.msg); } } inTask(&impl); } /// Unsubscribes from the channel(s) specified, returns immediately if none /// is currently being listened. /// If a connection error is thrown here, it stops the listener. void unsubscribe(scope string[] args...) { logTrace("unsubscribe"); void impl() @safe { if (!anySubscribed(args)) return; scope(failure) bstop(); assert(m_listening); m_mutex.performLocked!({ m_waiter = Task.getThis(); scope(exit) m_waiter = Task(); bool unsubscribed; m_connMutex.performLocked!({ _request_void(m_lockedConnection, "UNSUBSCRIBE", args); }); while(() @trusted { return m_subscriptions.byKey.canFind(args); } ()) { if (!() @trusted { return receiveTimeout(2.seconds, (Action act) { enforce(act == Action.UNSUBSCRIBE); }); } ()) { unsubscribed = false; break; } unsubscribed = true; } debug { auto keys = () @trusted { return m_subscriptions.keys; } (); logTrace("Can find keys?: %s", keys.canFind(args)); logTrace("Subscriptions: %s", keys); } enforce(unsubscribed, "Could not complete unsubscription(s)."); }); } inTask(&impl); } /// Same as subscribe, but uses glob patterns, and does not return instantly if /// the subscriptions are already registered. /// throws Exception if the pattern does not yield a new subscription. void psubscribe(scope string[] args...) { logTrace("psubscribe"); void impl() @safe { scope(failure) bstop(); assert(m_listening); m_mutex.performLocked!({ m_waiter = Task.getThis(); scope(exit) m_waiter = Task(); bool subscribed; m_connMutex.performLocked!({ _request_void(m_lockedConnection, "PSUBSCRIBE", args); }); if (!() @trusted { return receiveTimeout(2.seconds, (Action act) { enforce(act == Action.SUBSCRIBE); }); } ()) subscribed = false; else subscribed = true; debug logTrace("Subscriptions: %s", () @trusted { return m_subscriptions.keys; } ()); enforce(subscribed, "Could not complete subscription(s)."); }); } inTask(&impl); } /// Same as unsubscribe, but uses glob patterns, and does not return instantly if /// the subscriptions are not registered. /// throws Exception if the pattern does not yield a new unsubscription. void punsubscribe(scope string[] args...) { logTrace("punsubscribe"); void impl() @safe { scope(failure) bstop(); assert(m_listening); m_mutex.performLocked!({ m_waiter = Task.getThis(); scope(exit) m_waiter = Task(); bool unsubscribed; m_connMutex.performLocked!({ _request_void(m_lockedConnection, "PUNSUBSCRIBE", args); }); if (!() @trusted { return receiveTimeout(2.seconds, (Action act) { enforce(act == Action.UNSUBSCRIBE); }); } ()) unsubscribed = false; else unsubscribed = true; debug { auto keys = () @trusted { return m_subscriptions.keys; } (); logTrace("Can find keys?: %s", keys.canFind(args)); logTrace("Subscriptions: %s", keys); } enforce(unsubscribed, "Could not complete unsubscription(s)."); }); } inTask(&impl); } private void inTask(scope void delegate() @safe impl) { logTrace("inTask"); if (Task.getThis() == Task()) { Throwable ex; bool done; Task task = runTask({ logDebug("inTask %s", Task.getThis()); try impl(); catch (Exception e) { ex = e; } done = true; }); task.join(); logDebug("done"); if (ex) throw ex; } else impl(); } private void init(){ logTrace("init"); if (!m_lockedConnection) { m_lockedConnection = m_client.m_connections.lockConnection(); m_lockedConnection.setAuth(m_client.m_authPassword); m_lockedConnection.setDB(m_client.m_selectedDB); } if (!m_lockedConnection.conn || !m_lockedConnection.conn.connected) { try m_lockedConnection.conn = connectTCP(m_lockedConnection.m_host, m_lockedConnection.m_port); catch (Exception e) { throw new Exception(format("Failed to connect to Redis server at %s:%s.", m_lockedConnection.m_host, m_lockedConnection.m_port), __FILE__, __LINE__, e); } m_lockedConnection.conn.tcpNoDelay = true; m_lockedConnection.setAuth(m_client.m_authPassword); m_lockedConnection.setDB(m_client.m_selectedDB); } } // Same as listen, but blocking void blisten(void delegate(string, string) @safe onMessage, Duration timeout = 0.seconds) { init(); void onSubscribe(string channel) @safe { logTrace("Callback subscribe(%s)", channel); m_subscriptions[channel] = true; if (m_waiter != Task()) () @trusted { m_waiter.send(Action.SUBSCRIBE); } (); } void onUnsubscribe(string channel) @safe { logTrace("Callback unsubscribe(%s)", channel); m_subscriptions.remove(channel); if (m_waiter != Task()) () @trusted { m_waiter.send(Action.UNSUBSCRIBE); } (); } void teardown() @safe { // teardown logTrace("Redis listener exiting"); // More publish commands may be sent to this connection after recycling it, so we // actively destroy it Action act; // wait for the listener helper to send its stop message while (act != Action.STOP) act = () @trusted { return receiveOnly!Action(); } (); m_lockedConnection.conn.close(); m_lockedConnection.destroy(); m_listening = false; return; } // http://redis.io/topics/pubsub /** SUBSCRIBE first second *3 $9 subscribe $5 first :1 *3 $9 subscribe $6 second :2 */ // This is a simple parser/handler for subscribe/unsubscribe/publish // commands sent by redis. The PubSub client protocol is simple enough void pubsub_handler() { TCPConnection conn = m_lockedConnection.conn; logTrace("Pubsub handler"); void dropCRLF() @safe { ubyte[2] crlf; conn.read(crlf); } size_t readArgs() @safe { char[8] ucnt; ubyte[1] num; size_t i; do { conn.read(num); if (num[0] >= 48 && num[0] <= 57) ucnt[i] = num[0]; else break; i++; } while (true); // ascii ubyte[1] b; conn.read(b); logTrace("Found %s", ucnt); // the new line is consumed when num is not in range. return ucnt[0 .. i].to!size_t; } // find the number of arguments in the array ubyte[1] symbol; conn.read(symbol); enforce(symbol[0] == '*', "Expected '*', got '" ~ symbol.to!string ~ "'"); size_t args = readArgs(); // get the number of characters in the first string (the command) conn.read(symbol); enforce(symbol[0] == '$', "Expected '$', got '" ~ symbol.to!string ~ "'"); size_t cnt = readArgs(); ubyte[] cmd = () @trusted { return theAllocator.makeArray!ubyte(cnt); } (); scope(exit) () @trusted { theAllocator.dispose(cmd); } (); conn.read(cmd); dropCRLF(); // find the channel conn.read(symbol); enforce(symbol[0] == '$', "Expected '$', got '" ~ symbol.to!string ~ "'"); cnt = readArgs(); ubyte[] str = new ubyte[cnt]; conn.read(str); dropCRLF(); string channel = () @trusted { return cast(string)str; } (); logTrace("chan: %s", channel); if (cmd == "message") { // find the message conn.read(symbol); enforce(symbol[0] == '$', "Expected '$', got '" ~ symbol.to!string ~ "'"); cnt = readArgs(); str = new ubyte[cnt]; conn.read(str); // channel string message = () @trusted { return cast(string)str.idup; } (); logTrace("msg: %s", message); dropCRLF(); onMessage(channel, message); } else if (cmd == "subscribe" || cmd == "unsubscribe") { // find the remaining subscriptions bool is_subscribe = (cmd == "subscribe"); conn.read(symbol); enforce(symbol[0] == ':', "Expected ':', got '" ~ symbol.to!string ~ "'"); cnt = readArgs(); // number of subscriptions logTrace("subscriptions: %d", cnt); if (is_subscribe) onSubscribe(channel); else onUnsubscribe(channel); // todo: enforce the number of subscriptions? } else assert(false, "Unrecognized pubsub wire protocol command received"); } // Waits for data and advises the handler m_listenerHelper = runTask( { while(true) { if (!m_stop && m_lockedConnection.conn && m_lockedConnection.conn.waitForData(100.msecs)) { // We check every 5 seconds if this task should stay active if (m_stop) break; else if (m_lockedConnection.conn && !m_lockedConnection.conn.dataAvailableForRead) continue; // Data has arrived, this task is in charge of notifying the main handler loop logTrace("Notify data arrival"); () @trusted { receiveTimeout(0.seconds, (Variant v) {}); } (); // clear message queue () @trusted { m_listener.send(Action.DATA); } (); if (!() @trusted { return receiveTimeout(5.seconds, (Action act) { assert(act == Action.DATA); }); } ()) assert(false); } else if (m_stop || !m_lockedConnection.conn) break; logTrace("No data arrival in 100 ms..."); } logTrace("Listener Helper exit."); () @trusted { m_listener.send(Action.STOP); } (); } ); m_listening = true; logTrace("Redis listener now listening"); if (m_waiter != Task()) () @trusted { m_waiter.send(Action.STARTED); } (); if (timeout == 0.seconds) timeout = 365.days; // make sure 0.seconds is considered as big. scope(exit) { logTrace("Redis Listener exit."); if (!m_stop) { stop(); // notifies the listenerHelper } m_listenerHelper.join(); // close the data connections teardown(); if (m_waiter != Task()) () @trusted { m_waiter.send(Action.STOP); } (); if (m_stopWaiter != Task()) () @trusted { m_stopWaiter.send(Action.STOP); } (); m_listenerHelper = Task(); m_listener = Task(); m_stop = false; } // Start waiting for data notifications to arrive while(true) { auto handler = (Action act) { if (act == Action.STOP) m_stop = true; if (m_stop) return; logTrace("Calling PubSub Handler"); m_connMutex.performLocked!({ pubsub_handler(); // handles one command at a time }); () @trusted { m_listenerHelper.send(Action.DATA); } (); }; if (!() @trusted { return receiveTimeout(timeout, handler); } () || m_stop) { logTrace("Redis Listener stopped"); break; } } } /// ditto deprecated("Use an @safe message callback") void blisten(void delegate(string, string) @system onMessage, Duration timeout = 0.seconds) { blisten((string ch, string msg) @trusted => onMessage(ch, msg)); } /// Waits for messages and calls the callback with the channel and the message as arguments. /// The timeout is passed over to the listener, which closes after the period of inactivity. /// Use 0.seconds timeout to specify a very long time (365 days) /// Errors will be sent to Callback Delegate on channel "Error". Task listen(void delegate(string, string) @safe callback, Duration timeout = 0.seconds) { logTrace("Listen"); void impl() @safe { logTrace("Listen"); m_waiter = Task.getThis(); scope(exit) m_waiter = Task(); Throwable ex; m_listener = runTask({ try blisten(callback, timeout); catch(Exception e) { ex = e; if (m_waiter != Task() && !m_listening) { () @trusted { m_waiter.send(Action.STARTED); } (); return; } callback("Error", e.msg); } }); m_mutex.performLocked!({ import std.datetime : usecs; () @trusted { receiveTimeout(2.seconds, (Action act) { assert( act == Action.STARTED); }); } (); if (ex) throw ex; enforce(m_listening, "Failed to start listening, timeout of 2 seconds expired"); }); foreach (channel; m_pendingSubscriptions) { subscribe(channel); } m_pendingSubscriptions = null; } inTask(&impl); return m_listener; } /// ditto deprecated("Use an @safe message callback") Task listen(void delegate(string, string) @system onMessage, Duration timeout = 0.seconds) { return listen((string ch, string msg) @trusted => onMessage(ch, msg)); } } /** Range interface to a single Redis reply. */ struct RedisReply(T = ubyte[]) { static assert(isInputRange!RedisReply); private { uint m_magic = 0x15f67ab3; RedisConnection m_conn; LockedConnection!RedisConnection m_lockedConnection; } alias ElementType = T; private this(RedisConnection conn) { m_conn = conn; auto ctx = &conn.m_replyContext; assert(ctx.refCount == 0); *ctx = RedisReplyContext.init; ctx.refCount++; } this(this) { assert(m_magic == 0x15f67ab3); if (m_conn) { auto ctx = &m_conn.m_replyContext; assert(ctx.refCount > 0); ctx.refCount++; } } ~this() { assert(m_magic == 0x15f67ab3); if (m_conn) { if (!--m_conn.m_replyContext.refCount) drop(); } } @property bool empty() const { return !m_conn || m_conn.m_replyContext.index >= m_conn.m_replyContext.length; } /** Returns the current element of the reply. Note that byte and character arrays may be returned as slices to a temporary buffer. This buffer will be invalidated on the next call to $(D popFront), so it needs to be duplicated for permanent storage. */ @property T front() { assert(!empty, "Accessing the front of an empty RedisReply!"); auto ctx = &m_conn.m_replyContext; if (!ctx.hasData) readData(); ubyte[] ret = ctx.data; return convertToType!T(ret); } @property bool frontIsNull() const { assert(!empty, "Accessing the front of an empty RedisReply!"); return m_conn.m_replyContext.frontIsNull; } /** Pops the current element of the reply */ void popFront() { assert(!empty, "Popping the front of an empty RedisReply!"); auto ctx = &m_conn.m_replyContext; if (!ctx.hasData) readData(); // ensure that we actually read the data entry from the wire clearData(); ctx.index++; if (ctx.index >= ctx.length && ctx.refCount == 1) { ctx.refCount = 0; m_conn = null; m_lockedConnection.destroy(); } } /// Legacy property for hasNext/next based iteration @property bool hasNext() const { return !empty; } /// Legacy property for hasNext/next based iteration TN next(TN : E[], E)() { assert(hasNext, "end of reply"); auto ret = front.dup; popFront(); return () @trusted { return cast(TN)ret; } (); } void drop() { if (!m_conn) return; while (!empty) popFront(); } private void readData() { auto ctx = &m_conn.m_replyContext; assert(!ctx.hasData && ctx.initialized); if (ctx.multi) readBulk(() @trusted { return cast(string)m_conn.conn.readLine(); } ()); } private void clearData() { auto ctx = &m_conn.m_replyContext; ctx.data = null; ctx.hasData = false; } private @property void lockedConnection(ref LockedConnection!RedisConnection conn) { assert(m_conn !is null); m_lockedConnection = conn; } private void initialize() { assert(m_conn !is null); auto ctx = &m_conn.m_replyContext; assert(!ctx.initialized); ctx.initialized = true; ubyte[] ln = m_conn.conn.readLine(); switch (ln[0]) { default: m_conn.conn.close(); throw new Exception(format("Unknown reply type: %s", cast(char)ln[0])); case '+': ctx.data = ln[1 .. $]; ctx.hasData = true; break; case '-': throw new Exception(() @trusted { return cast(string)ln[1 .. $]; } ()); case ':': ctx.data = ln[1 .. $]; ctx.hasData = true; break; case '$': readBulk(() @trusted { return cast(string)ln; } ()); break; case '*': if (ln.startsWith(cast(const(ubyte)[])"*-1")) { ctx.length = 0; // TODO: make this NIL reply distinguishable from a 0-length array } else { ctx.multi = true; scope (failure) m_conn.conn.close(); ctx.length = to!long(() @trusted { return cast(string)ln[1 .. $]; } ()); } break; } } private void readBulk(string sizeLn) { assert(m_conn !is null); auto ctx = &m_conn.m_replyContext; if (sizeLn.startsWith("$-1")) { ctx.frontIsNull = true; ctx.hasData = true; ctx.data = null; } else { auto size = to!size_t(sizeLn[1 .. $]); auto data = new ubyte[size]; m_conn.conn.read(data); m_conn.conn.readLine(); ctx.frontIsNull = false; ctx.hasData = true; ctx.data = data; } } } class RedisProtocolException : Exception { this(string message, string file = __FILE__, size_t line = __LINE__, Exception next = null) { super(message, file, line, next); } } template isValidRedisValueReturn(T) { import std.typecons; static if (isInstanceOf!(Nullable, T)) { enum isValidRedisValueReturn = isValidRedisValueType!(typeof(T.init.get())); } else static if (isInstanceOf!(RedisReply, T)) { enum isValidRedisValueReturn = isValidRedisValueType!(T.ElementType); } else enum isValidRedisValueReturn = isValidRedisValueType!T; } template isValidRedisValueType(T) { enum isValidRedisValueType = is(T : const(char)[]) || is(T : const(ubyte)[]) || is(T == long) || is(T == double) || is(T == bool); } private RedisReply!T getReply(T = ubyte)(RedisConnection conn) { auto repl = RedisReply!T(conn); repl.initialize(); return repl; } private struct RedisReplyContext { long refCount = 0; ubyte[] data; bool hasData; bool multi = false; bool initialized = false; bool frontIsNull = false; long length = 1; long index = 0; ubyte[128] dataBuffer; } private final class RedisConnection { private { string m_host; ushort m_port; TCPConnection m_conn; string m_password; long m_selectedDB; RedisReplyContext m_replyContext; } this(string host, ushort port) { m_host = host; m_port = port; } @property TCPConnection conn() { return m_conn; } @property void conn(TCPConnection conn) { m_conn = conn; } void setAuth(string password) { if (m_password == password) return; _request_reply(this, "AUTH", password); m_password = password; } void setDB(long index) { if (index == m_selectedDB) return; _request_reply(this, "SELECT", index); m_selectedDB = index; } private static long countArgs(ARGS...)(scope ARGS args) { long ret = 0; foreach (i, A; ARGS) { static if (isArray!A && !(is(A : const(ubyte[])) || is(A : const(char[])))) { foreach (arg; args[i]) ret += countArgs(arg); } else ret++; } return ret; } unittest { assert(countArgs() == 0); assert(countArgs(1, 2, 3) == 3); assert(countArgs("1", ["2", "3", "4"]) == 4); assert(countArgs([["1", "2"], ["3"]]) == 3); } private static void writeArgs(R, ARGS...)(R dst, scope ARGS args) if (isOutputRange!(R, char)) { foreach (i, A; ARGS) { static if (is(A == bool)) { writeArgs(dst, args[i] ? "1" : "0"); } else static if (is(A : long) || is(A : real) || is(A == string)) { auto alen = formattedLength(args[i]); enum fmt = "$%d\r\n"~typeFormatString!A~"\r\n"; dst.formattedWrite(fmt, alen, args[i]); } else static if (is(A : const(ubyte[])) || is(A : const(char[]))) { dst.formattedWrite("$%s\r\n", args[i].length); dst.put(args[i]); dst.put("\r\n"); } else static if (isArray!A) { foreach (arg; args[i]) writeArgs(dst, arg); } else static assert(false, "Unsupported Redis argument type: " ~ A.stringof); } } unittest { import std.array : appender; auto dst = appender!string; writeArgs(dst, false, true, ["2", "3"], "4", 5.0); assert(dst.data == "$1\r\n0\r\n$1\r\n1\r\n$1\r\n2\r\n$1\r\n3\r\n$1\r\n4\r\n$1\r\n5\r\n"); } private static long formattedLength(ARG)(scope ARG arg) { static if (is(ARG == string)) return arg.length; else { import vibe.internal.rangeutil; long length; auto rangeCnt = RangeCounter(() @trusted { return &length; } ()); rangeCnt.formattedWrite(typeFormatString!ARG, arg); return length; } } } private void _request_void(ARGS...)(RedisConnection conn, string command, scope ARGS args) { import vibe.stream.wrapper; if (!conn.conn || !conn.conn.connected) { try conn.conn = connectTCP(conn.m_host, conn.m_port); catch (Exception e) { throw new Exception(format("Failed to connect to Redis server at %s:%s.", conn.m_host, conn.m_port), __FILE__, __LINE__, e); } conn.conn.tcpNoDelay = true; } auto nargs = conn.countArgs(args); auto rng = streamOutputRange(conn.conn); formattedWrite(() @trusted { return &rng; } (), "*%d\r\n$%d\r\n%s\r\n", nargs + 1, command.length, command); RedisConnection.writeArgs(() @trusted { return &rng; } (), args); } private RedisReply!T _request_reply(T = ubyte[], ARGS...)(RedisConnection conn, string command, scope ARGS args) { import vibe.stream.wrapper; if (!conn.conn || !conn.conn.connected) { try conn.conn = connectTCP(conn.m_host, conn.m_port); catch (Exception e) { throw new Exception(format("Failed to connect to Redis server at %s:%s.", conn.m_host, conn.m_port), __FILE__, __LINE__, e); } conn.conn.tcpNoDelay = true; } auto nargs = conn.countArgs(args); auto rng = streamOutputRange(conn.conn); formattedWrite(() @trusted { return &rng; } (), "*%d\r\n$%d\r\n%s\r\n", nargs + 1, command.length, command); RedisConnection.writeArgs(() @trusted { return &rng; } (), args); rng.flush(); return conn.getReply!T; } private T _request(T, ARGS...)(LockedConnection!RedisConnection conn, string command, scope ARGS args) { import std.typecons; static if (isInstanceOf!(RedisReply, T)) { auto reply = _request_reply!(T.ElementType)(conn, command, args); reply.lockedConnection = conn; return reply; } else static if (is(T == void)) { _request_reply(conn, command, args); } else static if (isInstanceOf!(Nullable, T)) { alias TB = typeof(T.init.get()); auto reply = _request_reply!TB(conn, command, args); T ret; if (!reply.frontIsNull) ret = reply.front; return ret; } else { auto reply = _request_reply!T(conn, command, args); return reply.front; } } private T convertToType(T)(ubyte[] data) /// NOTE: data must be unique! { static if (isSomeString!T) () @trusted { validate(cast(T)data); } (); static if (is(T == ubyte[])) return data; else static if (is(T == string)) return cast(T)data.idup; else static if (is(T == bool)) return data[0] == '1'; else static if (is(T == int) || is(T == long) || is(T == size_t) || is(T == double)) { auto str = () @trusted { return cast(string)data; } (); return parse!T(str); } else static assert(false, "Unsupported Redis reply type: " ~ T.stringof); } private template typeFormatString(T) { static if (isFloatingPoint!T) enum typeFormatString = "%.16g"; else enum typeFormatString = "%s"; } vibe.d-0.8.2/redis/vibe/db/redis/sessionstore.d000066400000000000000000000045021324361747700213420ustar00rootroot00000000000000module vibe.db.redis.sessionstore; import vibe.data.json; import vibe.db.redis.redis; import vibe.http.session; import core.time; import std.typecons : Nullable; import std.variant; final class RedisSessionStore : SessionStore { private { RedisDatabase m_db; Duration m_expirationTime = Duration.max; } /** Constructs a new Redis session store. Params: host = Host name of the Redis instance to connect to database = Database number to select on the server port = Optional port number to use when connecting to the server */ this(string host, long database, ushort port = RedisClient.defaultPort) { m_db = connectRedis(host, port).getDatabase(database); } /** The duration without access after which a session expires. */ @property Duration expirationTime() const { return m_expirationTime; } /// ditto @property void expirationTime(Duration dur) { m_expirationTime = dur; } @property SessionStorageType storageType() const { return SessionStorageType.json; } Session create() { auto s = createSessionInstance(); m_db.hset(s.id, "__SESS", true); // set place holder to avoid create empty hash assert(m_db.exists(s.id)); if (m_expirationTime != Duration.max) m_db.expire(s.id, m_expirationTime); return s; } Session open(string id) { if (m_db.exists(id)) { auto s = createSessionInstance(id); if (m_expirationTime != Duration.max) m_db.expire(s.id, m_expirationTime); return s; } return Session.init; } void set(string id, string name, Variant value) @trusted { m_db.hset(id, name, value.get!Json.toString()); } Variant get(string id, string name, lazy Variant defaultVal) @trusted { auto v = m_db.hget!(Nullable!string)(id, name); return v.isNull ? defaultVal : Variant(parseJsonString(v.get)); } bool isKeySet(string id, string key) { return m_db.hexists(id, key); } void remove(string id, string key) { m_db.hdel(id, key); } void destroy(string id) { m_db.del(id); } int delegate(int delegate(ref string key, ref Variant value)) iterateSession(string id) { assert(false, "Not available for RedisSessionStore"); } int iterateSession(string id, scope int delegate(string key) @safe del) { auto res = m_db.hkeys(id); while (!res.empty) { auto key = res.front; res.popFront(); if (auto ret = del(key)) return ret; } return 0; } } vibe.d-0.8.2/redis/vibe/db/redis/types.d000066400000000000000000000456351324361747700177620ustar00rootroot00000000000000/** Convenience wrappers types for accessing Redis keys. Note that the API is still subject to change! Copyright: © 2014 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.db.redis.types; import vibe.db.redis.redis; import std.conv : to; import std.datetime : SysTime; import std.typecons : Nullable; import core.time : Duration, msecs, seconds; /** Returns a handle to a string type value. */ RedisString!T getAsString(T = string)(RedisDatabase db, string key) { return RedisString!T(db, key); } /// unittest { void test() { auto db = connectRedis("127.0.0.1").getDatabase(0); auto str = db.getAsString("some_string"); str = "test"; } } /** Returns a handle to a set type value. */ RedisSet!T getAsSet(T = string)(RedisDatabase db, string key) { return RedisSet!T(db, key); } /// unittest { void test() { auto db = connectRedis("127.0.0.1").getDatabase(0); auto set = db.getAsSet("some_set"); set.insert("test"); } } /** Returns a handle to a set type value. */ RedisZSet!T getAsZSet(T = string)(RedisDatabase db, string key) { return RedisZSet!T(db, key); } /// unittest { void test() { auto db = connectRedis("127.0.0.1").getDatabase(0); auto set = db.getAsZSet("some_sorted_set"); set.insert(1, "test"); } } /** Returns a handle to a hash type value. */ RedisHash!T getAsHash(T = string)(RedisDatabase db, string key) { return RedisHash!T(db, key); } /// unittest { void test() { auto db = connectRedis("127.0.0.1").getDatabase(0); auto hash = db.getAsHash("some_hash"); hash["test"] = "123"; } } /** Returns a handle to a list type value. */ RedisList!T getAsList(T = string)(RedisDatabase db, string key) { return RedisList!T(db, key); } /// unittest { void test() { auto db = connectRedis("127.0.0.1").getDatabase(0); auto list = db.getAsList!long("some_list"); list.insertFront(123); } } /** Converts the given value to a binary/string representation suitable for Redis storage. These functions are used by the proxy types of this module to convert between Redis and D. See_also: $(D fromRedis) */ string toRedis(T)(T value) { import std.format; import std.traits; import vibe.data.serialization; static if (is(T == bool)) return value ? "1": "0"; else static if (is(T : long) || is(T : double)) return value.to!string; else static if (isSomeString!T) return value.to!string; else static if (is(T : const(ubyte)[])) return cast(string)value; else static if (isISOExtStringSerializable!T) return value == T.init ? null : value.toISOExtString(); else static if (isStringSerializable!T) return value.toString(); else static assert(false, "Unsupported type: "~T.stringof); } /// ditto void toRedis(R, T)(ref R dst, T value) { import std.format; import std.traits; import vibe.data.serialization; static if (is(T == bool)) dst.put(value ? '1' : '0'); else static if (is(T : long)) dst.formattedWrite("%s", value); else static if (isSomeString!T) dst.formattedWrite("%s", value); else static if(is(T : const(ubyte)[])) dst.put(value); else static if (isISOExtStringSerializable!T) dst.put(value == T.init ? null : value.toISOExtString()); else static if (isStringSerializable!T) dst.put(value.toString()); else static assert(false, "Unsupported type: "~T.stringof); } /** Converts a Redis value back to its original representation. These functions are used by the proxy types of this module to convert between Redis and D. See_also: $(D toRedis) */ T fromRedis(T)(string value) { import std.conv; import std.traits; import vibe.data.serialization; static if (is(T == bool)) return value != "0" && value != "false"; else static if (is(T : long) || is(T : double)) return value.to!T; else static if (isSomeString!T) return value.to!T; else static if (is(T : const(ubyte)[])) return cast(T)value; else static if (isISOExtStringSerializable!T) return value.length ? T.fromISOExtString(value) : T.init; else static if (isStringSerializable!T) return T.fromString(value); else static assert(false, "Unsupported type: "~T.stringof); } /** The type of a Redis key. */ enum RedisType { none, /// Non-existent key string, /// String/binary value list, /// Linked list set, /// Unsorted set zset, /// Sorted set hash /// Unsorted map } /** Represents a generic Redis value. */ struct RedisValue { private { RedisDatabase m_db; string m_key; } this(RedisDatabase db, string key) { m_db = db; m_key = key; } /** The database in which the key is stored. */ @property inout(RedisDatabase) database() inout { return m_db; } /** Name of the corresponding key. */ @property string key() const { return m_key; } /** Remaining time-to-live. Returns: The time until the key expires, if applicable. Returns $(D Duration.max) otherwise. See_also: $(LINK2 http://redis.io/commands/pttl, PTTL) */ @property Duration ttl() { auto ret = m_db.pttl(m_key); return ret >= 0 ? ret.msecs : Duration.max; } /** The data type of the referenced value. Queries the actual type of the value that is referenced by this key. See_also: $(LINK2 http://redis.io/commands/type, TYPE) */ @property RedisType type() { import std.conv; return m_db.type(m_key).to!RedisType; } /** Checks if the referenced key exists. See_also: $(LINK2 http://redis.io/commands/exists, EXISTS) */ @property bool exists() { return m_db.exists(m_key); } /** Removes the referenced key. Returns: $(D true) $(I iff) the key was successfully removed. See_also: $(LINK2 http://redis.io/commands/del, DEL) */ bool remove() { return m_db.del(m_key) > 0; } /** Sets the key for expiration after the given timeout. Note that Redis handles timeouts in second resolution, so that the timeout must be at least one second. Returns: $(D true) $(I iff) the expiration time was successfully set. See_also: $(LINK2 http://redis.io/commands/expire, EXPIRE) */ bool expire(Duration expire_time) { assert(expire_time >= 1.seconds); return m_db.expire(m_key, expire_time.total!"seconds"); } /** Sets the key for expiration at the given point in time. Note that Redis handles timeouts in second resolution, so that any fractional seconds of the given $(D expire_time) will be truncated. Returns: $(D true) $(I iff) the expiration time was successfully set. See_also: $(LINK2 http://redis.io/commands/expireat, EXPIREAT) */ bool expireAt(SysTime expire_time) { return m_db.expireAt(m_key, expire_time.toUnixTime()); } /** Removes any existing expiration time for the key. Returns: $(D true) $(I iff) the key exists and an existing timeout was removed. See_also: $(LINK2 http://redis.io/commands/persist, PERSIST) */ bool persist() { return m_db.persist(m_key); } /** Moves this key to a different database. Existing keys will not be overwritten. Returns: $(D true) $(I iff) the key exists and was successfully moved to the destination database. See_also: $(LINK2 http://redis.io/commands/move, MOVE) */ bool moveTo(long dst_database) { return m_db.move(m_key, dst_database); } /** Renames the referenced key. This method will also update this instance to refer to the renamed key. See_also: $(LINK2 http://redis.io/commands/rename, RENAME), $(D renameIfNotExist) */ void rename(string new_name) { m_db.rename(m_key, new_name); m_key = new_name; } /** Renames the referenced key if the destination key doesn't exist. This method will also update this instance to refer to the renamed key if the rename was successful. Returns: $(D true) $(I iff) the source key exists and the destination key doesn't exist. See_also: $(LINK2 http://redis.io/commands/renamenx, RENAMENX), $(D rename) */ bool renameIfNotExist(string new_name) { if (m_db.renameNX(m_key, new_name)) { m_key = new_name; return true; } return false; } //TODO sort } /** Represents a Redis string value. In addition to the methods specific to string values, all operations of $(D RedisValue) are available using an $(D alias this) declaration. */ struct RedisString(T = string) { RedisValue value; alias value this; this(RedisDatabase db, string key) { value = RedisValue(db, key); } /** The length in bytes of the string. See_also: $(LINK2 http://redis.io/commands/strlen, STRLEN) */ @property long length() { return m_db.strlen(m_key); } T get() { return m_db.get!string(m_key).fromRedis!T; } T getSet(T value) { return m_db.getSet(m_key, value.toRedis).fromRedis!T; } bool getBit(long offset) { return m_db.getBit(m_key, offset); } bool setBit(long offset, bool value) { return m_db.setBit(m_key, offset, value); } void setExpire(T value, Duration expire_time) { assert(expire_time >= 1.seconds); m_db.setEX(m_key, expire_time.total!"seconds", value.toRedis); } bool setIfNotExist(T value) { return m_db.setNX(m_key, value.toRedis); } string getSubString(long start, long end) { return m_db.getRange!string(m_key, start, end); } long setSubString(long offset, string value) { return m_db.setRange(m_key, offset, value); } void opAssign(T value) { m_db.set(m_key, value.toRedis); } long opOpAssign(string OP)(string value) if (OP == "~") { return m_db.append(m_key, value); } long opUnary(string OP)() if (OP == "++") { return m_db.incr(m_key); } long opUnary(string OP)() if (OP == "--") { return m_db.decr(m_key); } long opOpAssign(string OP)(long value) if (OP == "+") { assert(value != 0); if (value > 0) return m_db.incr(m_key, value); else return m_db.decr(m_key, -value); } long opOpAssign(string OP)(long value) if (OP == "-") { assert(value != 0); if (value > 0) return m_db.incr(m_key, value); else return m_db.decr(m_key, -value); } long opOpAssign(string OP)(double value) if (OP == "+") { return m_db.incr(m_key, value); } long opOpAssign(string OP)(double value) if (OP == "-") { return m_db.incr(m_key, -value); } } /** Represents a Redis hash value. In addition to the methods specific to hash values, all operations of $(D RedisValue) are available using an $(D alias this) declaration. */ struct RedisHash(T = string) { RedisValue value; alias value this; this(RedisDatabase db, string key) { value = RedisValue(db, key); } size_t remove(scope string[] fields...) { return cast(size_t)m_db.hdel(m_key, fields); } bool exists(string field) { return m_db.hexists(m_key, field); } void opIndexAssign(T value, string field) { m_db.hset(m_key, field, value.toRedis()); } T opIndex(string field) { return m_db.hget!string(m_key, field).fromRedis!T(); } T get(string field, T def_value) { import std.typecons; auto ret = m_db.hget!(Nullable!string)(m_key, field); return ret.isNull ? def_value : ret.fromRedis!T; } bool setIfNotExist(string field, T value) { return m_db.hsetNX(m_key, field, value.toRedis()); } void opIndexOpAssign(string op)(T value, string field) if (op == "+") { m_db.hincr(m_key, field, value.toRedis()); } int opApply(scope int delegate(string key, T value) del) { auto reply = m_db.hgetAll(m_key); while (reply.hasNext()) { auto key = reply.next!string(); auto value = reply.next!string(); if (auto ret = del(key, value.fromRedis!T)) return ret; } return 0; } int opApply(scope int delegate(string key) del) { auto reply = m_db.hkeys(m_key); while (reply.hasNext()) { if (auto ret = del(reply.next!string())) return ret; } return 0; } long length() { return m_db.hlen(m_key); } // FIXME: support other types! void getMultiple(T[] dst, scope string[] fields...) { assert(dst.length == fields.length); auto reply = m_db.hmget(m_key, fields); size_t idx = 0; while (reply.hasNext()) dst[idx++] = reply.next!string().fromRedis!T(); } // FIXME: support other types! /*void setMultiple(in string[] src, scope string[] fields...) { m_db.hmset(m_key, ...); }*/ //RedisReply hvals(string key) { return request!RedisReply("HVALS", key); } } /** Represents a Redis list value. In addition to the methods specific to list values, all operations of $(D RedisValue) are available using an $(D alias this) declaration. */ struct RedisList(T = string) { RedisValue value; alias value this; this(RedisDatabase db, string key) { value = RedisValue(db, key); } Dollar opDollar() { return Dollar(0); } T opIndex(long index) { assert(index >= 0); return m_db.lindex!string(m_key, index).fromRedis!T; } T opIndex(Dollar index) { assert(index.offset < 0); return m_db.lindex!string(m_key, index.offset).fromRedis!T; } void opIndexAssign(T value, long index) { assert(index >= 0); m_db.lset(m_key, index, value.toRedis); } void opIndexAssign(T value, Dollar index) { assert(index.offset < 0); m_db.lset(m_key, index.offset, value.toRedis); } auto opSlice(S, E)(S start, E end) if ((is(S : long) || is(S == Dollar)) && (is(E : long) || is(E == Dollar))) { import std.algorithm; long s, e; static if (is(S == Dollar)) { assert(start.offset <= 0); s = start.offset; } else { assert(start >= 0); s = start; } static if (is(E == Dollar)) { assert(end.offset <= 0); e = end.offset - 1; } else { assert(end >= 0); e = end - 1; } return map!(e => e.fromRedis!T)(m_db.lrange(m_key, s, e)); } auto opSlice()() { return this[0 .. $]; } long length() { return m_db.llen(m_key); } long insertBefore(T pivot, T value) { return m_db.linsertBefore(m_key, pivot.toRedis, value.toRedis); } long insertAfter(T pivot, T value) { return m_db.linsertAfter(m_key, pivot.toRedis, value.toRedis); } long insertFront(T value) { return m_db.lpush(m_key, value.toRedis); } long insertFrontIfExists(T value) { return m_db.lpushX(m_key, value.toRedis); } long insertBack(T value) { return m_db.rpush(m_key, value.toRedis); } long insertBackIfExists(T value) { return m_db.rpushX(m_key, value.toRedis); } long removeAll(T value) { return m_db.lrem(m_key, 0, value.toRedis); } long removeFirst(T value, long count = 1) { assert(count > 0); return m_db.lrem(m_key, count, value.toRedis); } long removeLast(T value, long count = 1) { assert(count > 0); return m_db.lrem(m_key, -count, value.toRedis); } void trim(long start, long end) { m_db.ltrim(m_key, start, end); } T removeFront() { return m_db.lpop!string(m_key).fromRedis!T; } T removeBack() { return m_db.rpop!string(m_key).fromRedis!T; } Nullable!T removeFrontBlock(Duration max_wait = 0.seconds) { assert(max_wait == 0.seconds || max_wait >= 1.seconds); auto r = m_db.blpop!string(m_key, max_wait.total!"seconds"); return r.isNull ? Nullable!T.init : Nullable!T(r[1].fromRedis!T); } struct Dollar { long offset = 0; Dollar opAdd(long off) { return Dollar(offset + off); } Dollar opSub(long off) { return Dollar(offset - off); } } int opApply(scope int delegate(T) del) { foreach (v; this[0 .. $]) if (auto ret = del(v)) return ret; return 0; } //RedisReply lrange(string key, long start, long stop) { return request!RedisReply("LRANGE", key, start, stop); } //T rpoplpush(T : E[], E)(string key, string destination) { return request!T("RPOPLPUSH", key, destination); } } /** Represents a Redis set value. In addition to the methods specific to set values, all operations of $(D RedisValue) are available using an $(D alias this) declaration. */ struct RedisSet(T = string) { RedisValue value; alias value this; this(RedisDatabase db, string key) { value = RedisValue(db, key); } long insert(ARGS...)(ARGS args) { return m_db.sadd(m_key, args); } long remove(T value) { return m_db.srem(m_key, value.toRedis()); } void remove()() { value.remove(); } string pop() { return m_db.spop!string(m_key); } long length() { return m_db.scard(m_key); } string getRandom() { return m_db.srandMember!string(m_key); } //RedisReply sdiff(string[] keys...) { return request!RedisReply("SDIFF", keys); } //long sdiffStore(string destination, string[] keys...) { return request!long("SDIFFSTORE", destination, keys); } //RedisReply sinter(string[] keys) { return request!RedisReply("SINTER", keys); } //long sinterStore(string destination, string[] keys...) { return request!long("SINTERSTORE", destination, keys); } bool contains(T value) { return m_db.sisMember(m_key, value.toRedis()); } int opApply(scope int delegate(T value) del) { foreach (m; m_db.smembers!string(m_key)) if (auto ret = del(m.fromRedis!T())) return ret; return 0; } bool intersects(scope RedisSet[] sets...) { import std.algorithm; import std.array; return !value.database.sinter(value.key ~ sets.map!(s => s.key).array).empty; } auto getAll() { import std.algorithm; return map!(r => r.fromRedis!T)(value.database.smembers(value.key)); } //bool smove(T : E[], E)(string source, string destination, T member) { return request!bool("SMOVE", source, destination, member); } //RedisReply sunion(string[] keys...) { return request!RedisReply("SUNION", keys); } //long sunionStore(string[] keys...) { return request!long("SUNIONSTORE", keys); } } /** Represents a Redis sorted set value. In addition to the methods specific to sorted set values, all operations of $(D RedisValue) are available using an $(D alias this) declaration. */ struct RedisZSet(T = string) { RedisValue value; alias value this; this(RedisDatabase db, string key) { value = RedisValue(db, key); } long insert(ARGS...)(ARGS args) { return m_db.zadd(m_key, args); } long remove(ARGS...)(ARGS members) { return m_db.zrem(m_key, members); } long length() { return m_db.zcard(m_key); } long count(string INT = "[]")(double min, double max) if (INT == "[]") { return m_db.zcount(m_key, min, max); } long removeRangeByRank(long start, long end) { return m_db.zremRangeByRank(m_key, start, end); } long removeRangeByScore(string INT = "[]")(double min, double max) if (INT == "[]") { return m_db.zremRangeByScore(m_key, min, max); } double opIndexOpAssign(string op)(double value, string member) if (op == "+") { return m_db.zincrby(m_key, value, member); } long getRank(string member) { return m_db.zrank(m_key, member); } long getReverseRank(string member) { return m_db.zrevRank(m_key, member); } //TODO: zinterstore //RedisReply zrange(string key, long start, long end, bool withScores=false); // TODO: // supports only inclusive intervals // see http://redis.io/commands/zrangebyscore //RedisReply zrangeByScore(string key, double start, double end, bool withScores=false); // TODO: // supports only inclusive intervals // see http://redis.io/commands/zrangebyscore //RedisReply zrangeByScore(string key, double start, double end, long offset, long count, bool withScores=false); //RedisReply zrevRange(string key, long start, long end, bool withScores=false); // TODO: // supports only inclusive intervals // see http://redis.io/commands/zrangebyscore //RedisReply zrevRangeByScore(string key, double min, double max, bool withScores=false); // TODO: // supports only inclusive intervals // see http://redis.io/commands/zrangebyscore //RedisReply zrevRangeByScore(string key, double min, double max, long offset, long count, bool withScores=false); //RedisReply zscore(string key, string member) { return request!RedisReply("ZSCORE", key, member); } //TODO: zunionstore } vibe.d-0.8.2/scripts/000077500000000000000000000000001324361747700143755ustar00rootroot00000000000000vibe.d-0.8.2/scripts/tag_version.sh000077500000000000000000000015451324361747700172610ustar00rootroot00000000000000#!/bin/bash set -ueo pipefail if [ $# -ne 1 ]; then echo 'Example Usage: ./scripts/tag_version.sh v1.2.0-alpha.1' 1>&2 exit 1 fi VER="$1" if ! [[ $VER =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-(alpha|beta|rc)\.[0-9]+)?$ ]]; then echo "Invalid version format '$VER'" 1>&2 exit 1 fi BASE=`echo ${VER:1} | cut -d - -f 1` SUFFIX=`echo $VER | cut -d - -f 2 -s` MSUFFIX="$(echo $SUFFIX | sed 's/\([a-z]*\)\.\([0-9]*\)/~\1\2/')" sed -i 's|vibeVersionString\(\s*\)= "\(.*\)";|vibeVersionString\1= "'${VER:1}'";|' core/vibe/core/core.d sed -i 's|version:\(\s*\)'"'"'.*'"'"'$|version:\1'"'$BASE'|" meson.build sed -i 's|project_version_suffix\(\s*\)= '"'"'.*'"'"'$|project_version_suffix\1= '"'$MSUFFIX'|" meson.build set -x git --no-pager diff git add core/vibe/core/core.d meson.build git commit --message "bump version to $VER" git tag --sign --message "$VER" "$VER" vibe.d-0.8.2/scripts/test_version.sh000077500000000000000000000013141324361747700174570ustar00rootroot00000000000000#!/bin/bash set -xueo pipefail # test version strings ver_git=$(git describe --abbrev=0 --tags) ver_vibe=$(sed -n 's|.*vibeVersionString\s*= "\(.*\)";$|\1|p' core/vibe/core/core.d) ver_meson_base=$(sed -n 's|\s*version\s*: '"'"'\(.*\)'"'"'$|\1|p' meson.build) ver_meson_suffix=$(sed -n 's|project_version_suffix\s*= '"'"'~\([a-z]*\)\([0-9]*\)'"'"'$|-\1.\2|p' meson.build) if [ "${ver_git}" != v"$ver_vibe" -o "${ver_git}" != "v$ver_meson_base$ver_meson_suffix" ]; then echo "Mismatch between versions." echo " git: '$ver_git'" echo " vibeVersionString: '$ver_vibe'" echo " meson.build project_version: '$ver_meson_base'" echo " meson project_version_suffix: '$ver_meson_suffix'" exit 1 fi vibe.d-0.8.2/setup-freebsd.sh000077500000000000000000000043301324361747700160150ustar00rootroot00000000000000#!/bin/sh set -e # root privileges required [ "root" != "$USER" ] && echo "root privileges required..." && exec sudo $0 "$@" # set variables USER_NAME="www-vibe" GROUP_NAME="www-vibe" USER_COMMENT="Vibe user" CONFIG_FILE="/usr/local/etc/vibe/vibe.conf" LOG_FILE="/var/spool/vibe/install.log" # remove user, group, log file and configuration file if [ "$1" = "-r" ] then # remove obsolete "vibe" user/group /usr/sbin/pw userdel vibe 2>/dev/null || true /usr/sbin/pw groupdel vibe 2>/dev/null || true # remove user if present in log file if grep "^user: $USER_NAME$" $LOG_FILE >/dev/null 2>&1 then /usr/sbin/pw userdel $USER_NAME >/dev/null 2>&1 && echo "'$USER_NAME' user removed." sed -i "/^user: $USER_NAME$/d" $LOG_FILE >/dev/null 2>&1 fi # remove group if present in log file if grep "^group: $GROUP_NAME$" $LOG_FILE >/dev/null 2>&1 then /usr/sbin/pw groupdel $GROUP_NAME >/dev/null 2>&1 && echo "'$GROUP_NAME' group removed." sed -i "/^group: $GROUP_NAME$/d" $LOG_FILE >/dev/null 2>&1 fi # remove log file if no data if [ -f $LOG_FILE ] && [ -z $(tr -d '[ \t\r\n]' 2>/dev/null <$LOG_FILE) ] then rm -f $LOG_FILE rmdir $(dirname $LOG_FILE) >/dev/null 2>&1 || true fi # remove config file echo "Removing configuration file $CONFIG_FILE..." rm -f $CONFIG_FILE rmdir $(dirname $CONFIG_FILE) >/dev/null 2>&1 || true exit fi # creating group if he isn't already there if ! getent group $GROUP_NAME >/dev/null; then echo "Creating group $GROUP_NAME..." /usr/sbin/pw groupadd $GROUP_NAME >/dev/null mkdir -p $(dirname $LOG_FILE) echo "group: $GROUP_NAME" >>$LOG_FILE fi # creating user if he isn't already there if ! getent passwd $USER_NAME >/dev/null; then echo "Creating user $USER_NAME..." /usr/sbin/pw useradd $USER_NAME -g $GROUP_NAME -c "$USER_COMMENT" >/dev/null mkdir -p $(dirname $LOG_FILE) echo "user: $USER_NAME" >>$LOG_FILE fi # create config dir if not there mkdir -p $(dirname $CONFIG_FILE) # create/update config file echo "Creating new config file in $CONFIG_FILE..." USER_ID=$(getent passwd $USER_NAME | cut -d: -f3) GROUP_ID=$(getent group $GROUP_NAME | cut -d: -f3) echo '{ "uid": '$USER_ID', "gid": '$GROUP_ID' }' >$CONFIG_FILE # if everything went fine echo "Setup finished successfully." vibe.d-0.8.2/setup-linux.sh000077500000000000000000000107701324361747700155470ustar00rootroot00000000000000#!/bin/bash set -e # set variables PREFIX="/usr/local" BASE_DIR="$PREFIX/share/vibe" SRC_DIR=$(dirname $0) CONFIG_DIR="/etc/vibe" CONFIG_FILE="$CONFIG_DIR/vibe.conf" LOG_DIR="/var/spool/vibe" LOG_FILE="$LOG_DIR/install.log" MENU_DIR="$PREFIX/share/applications" MENU_FILE="$MENU_DIR/vibe.desktop" USER_NAME="www-vibe" GROUP_NAME="www-vibe" USER_COMMENT="Vibe user" DEBIAN_USER="www-data" DEBIAN_GROUP="www-data" # throw error ferror() { for I in "$@" do echo "$I" >&2 done exit 1 } # script help fhelp() { echo "Script to install and remove 'vibe' on Linux." echo echo "Usage:" echo " $0 [ -i | -r | -h ] " echo echo "Options:" echo " -i installs vibe" echo echo " -r removes vibe" echo echo " -h show this help" } # force to be root froot() { test "root" != "$USER" && echo "'root' privileges required..." && exec sudo "$@" echo -en "\033[0A \015" } fremove() { # remove user if present in log file if grep "^user: $USER_NAME$" $LOG_FILE >/dev/null 2>&1 then /usr/sbin/userdel $USER_NAME >/dev/null 2>&1 && echo "'$USER_NAME' user removed." sed -i "/^user: $USER_NAME$/d" $LOG_FILE >/dev/null 2>&1 fi # remove group if present in log file if grep "^group: $GROUP_NAME$" $LOG_FILE >/dev/null 2>&1 then /usr/sbin/groupdel $GROUP_NAME >/dev/null 2>&1 && echo "'$GROUP_NAME' group removed." sed -i "/^group: $GROUP_NAME$/d" $LOG_FILE >/dev/null 2>&1 fi # remove log file if no data if [ -f $LOG_FILE ] && [ -z $(tr -d '[ \t\r\n]' 2>/dev/null <$LOG_FILE) ] then rm -f $LOG_FILE fi rmdir $LOG_DIR >/dev/null 2>&1 || : # remove config file echo "Removing configuration file $CONFIG_FILE..." rm -f $CONFIG_FILE rmdir $CONFIG_DIR >/dev/null 2>&1 || : # remove menu entry rm -f $MENU_FILE rmdir $MENU_DIR >/dev/null 2>&1 || : # remove files echo "Removing 'vibe' files in $BASE_DIR/..." rm -Rf $BASE_DIR/ } finstall() { # check if vibe sources if [ ! -f $SRC_DIR/source/vibe/vibe.d ] then ferror "$0: FATAL ERROR! missing 'vibe' sources!" "Try '$0 -h' for more information." fi # install files echo "Installing 'vibe' files in $BASE_DIR/..." cp -Rf $SRC_DIR/{source/,docs/,examples/} $BASE_DIR/ # create menu entry if [ -f $BASE_DIR/docs/index.html ] then mkdir -p $MENU_DIR echo "[Desktop Entry]" >$MENU_FILE echo "Type=Application" >>$MENU_FILE echo "Name=Vibe Documentation" >>$MENU_FILE echo "Comment=Vibe web framework documentation" >>$MENU_FILE echo "Exec=xdg-open $BASE_DIR/docs/index.html" >>$MENU_FILE echo "Icon=html" >>$MENU_FILE echo "Categories=Development;" >>$MENU_FILE else unset MENU_DIR MENU_FILE fi # user/group administration if getent group $DEBIAN_GROUP >/dev/null && getent passwd $DEBIAN_USER >/dev/null then GROUP_NAME=$DEBIAN_GROUP USER_NAME=$DEBIAN_USER else # creating group if he isn't already there if ! getent group $GROUP_NAME >/dev/null then echo "Creating group $GROUP_NAME..." /usr/sbin/groupadd -r $GROUP_NAME mkdir -p $LOG_DIR echo "group: $GROUP_NAME" >>$LOG_FILE fi # creating user if he isn't already there if ! getent passwd $USER_NAME >/dev/null then echo "Creating user $USER_NAME..." /usr/sbin/useradd -r -g $GROUP_NAME -c "$USER_COMMENT" $USER_NAME mkdir -p $LOG_DIR echo "user: $USER_NAME" >>$LOG_FILE fi fi # create/update config file echo "Creating config file $CONFIG_FILE..." mkdir -p $CONFIG_DIR echo '{' >$CONFIG_FILE echo ' "user": "'$USER_NAME'",' >>$CONFIG_FILE echo ' "group": "'$GROUP_NAME'"' >>$CONFIG_FILE echo '}' >>$CONFIG_FILE # set files/folders permissions chmod 0755 $(find $BASE_DIR/ -type d) $CONFIG_DIR $MENU_DIR chmod 0644 $(find $BASE_DIR/ ! -type d) $CONFIG_FILE $MENU_FILE # if everything went fine echo -e "\n \033[32;40;7;1mvibe.d installed successfully!\033[0m\n" echo "You need to have the following dependencies installed:" echo " ·dmd 2.061 - http://dlang.org" echo " ·libssl (development files) - http://www.openssl.org/" echo " ·libevent 2.0.x (development files) - http://libevent.org/" echo -e "\ntake a look at examples on $BASE_DIR/examples/" } # check if more than one argument if [ $# -gt 1 ] then ferror "$0: too many arguments" "Try '$0 -h' for more information." fi # check first argument case "$1" in -h|-H) fhelp ;; -i|-I) froot $0 "$@" finstall ;; -r|-R) froot $0 "$@" fremove ;; "") ferror "$0: missing argument" "Try '$0 -h' for more information." ;; *) ferror "$0: unknown argument '$1'" "Try '$0 -h' for more information." ;; esac vibe.d-0.8.2/setup-mac.sh000077500000000000000000000016751324361747700151540ustar00rootroot00000000000000#!/bin/bash set -e echo "Checking for root privileges..." # root privileges required [ "root" != "$USER" ] && exec sudo $0 "$@" # set variables USER_NAME="_www" GROUP_NAME=$USER_NAME USER_COMMENT="Vibe user" CONFIG_FILE="/etc/vibe/vibe.conf" # remove user, group and configuration file if [ "$1" = "-r" ] ;then echo "Removing configuration file $CONFIG_FILE..." rm -f $CONFIG_FILE rmdir -p $(dirname $CONFIG_FILE) 2>/dev/null || true exit fi # create/overwrite configuration file echo "Creating new config file in $CONFIG_FILE..." USER_ID=$(dscl . -read /Users/_www UniqueID | sed "s/[^:]*: //") GROUP_ID=$(dscl . -read /Groups/_www PrimaryGroupID | sed "s/[^:]*: //") mkdir -p $(dirname $CONFIG_FILE) echo -e '{ "uid": '$USER_ID', "gid": '$GROUP_ID' }' >$CONFIG_FILE # if everything went fine echo "Setup finished successfully." echo "You can now run 'vibe' from any vibe.d application directory to run an app (e.g. in examples/http_server/)." vibe.d-0.8.2/source/000077500000000000000000000000001324361747700142065ustar00rootroot00000000000000vibe.d-0.8.2/source/vibe/000077500000000000000000000000001324361747700151335ustar00rootroot00000000000000vibe.d-0.8.2/source/vibe/d.d000066400000000000000000000012761324361747700155310ustar00rootroot00000000000000/** Provides the vibe.d API and a default main() function for the application. Applications that import 'vibe.d' will have most of the vibe API available and will be provided with an implicit application entry point (main). The resulting application parses command line parameters and reads the global vibe.d configuration (/etc/vibe/vibe.conf). Initialization is done in module constructors (static this), which run just before the event loop is started by the application entry point. Copyright: © 2012 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.d; public import vibe.vibe; vibe.d-0.8.2/source/vibe/vibe.d000066400000000000000000000037521324361747700162340ustar00rootroot00000000000000/** Provides the full vibe.d API as a single import module. This file provides the majority of the vibe API through a single import. Note that typical vibe.d applications will import 'vibe.d' instead to also get an implicit application entry point. Copyright: © 2012 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.vibe; public import vibe.core.args; public import vibe.core.concurrency; public import vibe.core.core; public import vibe.core.file; public import vibe.core.log; public import vibe.core.net; public import vibe.core.sync; public import vibe.crypto.passwordhash; public import vibe.data.bson; public import vibe.data.json; public import vibe.db.mongo.mongo; public import vibe.db.redis.idioms; public import vibe.db.redis.redis; public import vibe.db.redis.sessionstore; public import vibe.db.redis.types; public import vibe.http.auth.basic_auth; public import vibe.http.auth.digest_auth; public import vibe.http.client; public import vibe.http.fileserver; public import vibe.http.form; public import vibe.http.proxy; public import vibe.http.router; public import vibe.http.server; public import vibe.http.websockets; public import vibe.inet.message; public import vibe.inet.url; public import vibe.inet.urltransfer; public import vibe.mail.smtp; //public import vibe.stream.base64; public import vibe.stream.counting; public import vibe.stream.memory; public import vibe.stream.operations; public import vibe.stream.tls; public import vibe.stream.wrapper; public import vibe.stream.zlib; public import vibe.textfilter.html; public import vibe.textfilter.markdown; public import vibe.textfilter.urlencode; public import vibe.utils.string; public import vibe.web.web; public import vibe.web.rest; // make some useful D standard library functions available public import std.functional : toDelegate; public import std.conv : to; public import std.datetime; public import std.exception : enforce; vibe.d-0.8.2/stream/000077500000000000000000000000001324361747700142015ustar00rootroot00000000000000vibe.d-0.8.2/stream/dub.sdl000066400000000000000000000004231324361747700154560ustar00rootroot00000000000000name "stream" description "Library of various pluggable stream implementations" dependency "vibe-d:core" version="*" targetType "library" sourcePaths "." importPaths "." // LDC 1.0.0 doesn't include libz in libphobos libs "z" platform="posix-ldc" libs "z" platform="gdc" vibe.d-0.8.2/stream/meson.build000066400000000000000000000032771324361747700163540ustar00rootroot00000000000000# Meson file for Vibe Stream vibe_stream_src_dir = include_directories('.') vibe_stream_src = [ 'vibe/stream/base64.d', 'vibe/stream/counting.d', 'vibe/stream/memory.d', 'vibe/stream/multicast.d', 'vibe/stream/operations.d', 'vibe/stream/stdio.d', 'vibe/stream/taskpipe.d', 'vibe/stream/wrapper.d', 'vibe/stream/zlib.d', ] # # Install Includes # install_subdir('vibe/', install_dir: 'include/d/vibe/') # # Build Targets # stream_link_with = [vibe_utils_lib, vibe_core_lib, vibe_data_lib] # Cryptographic helper routines vibe_stream_lib = library('vibe-stream', [vibe_stream_src], include_directories: [vibe_utils_src_dir, vibe_core_src_dir, vibe_data_src_dir], install: true, link_with: [stream_link_with], version: project_version, soversion: project_soversion ) pkgc.generate(name: 'vibe-stream', libraries: [vibe_stream_lib] + stream_link_with, subdirs: 'd/vibe', version: project_version, description: 'Library of various pluggable stream implementations for Vibe.' ) # # Tests # vibe_test_stream_exe = executable('vibe-test_stream', [vibe_stream_src], include_directories: [vibe_utils_src_dir, vibe_core_src_dir, vibe_data_src_dir], dependencies: [zlib_dep, crypto_dep, ssl_dep, libevent_dep], link_with: [stream_link_with], d_args: meson.get_compiler('d').unittest_args(), link_args: '-main' ) test('vibe-test_stream', vibe_test_stream_exe) vibe.d-0.8.2/stream/vibe/000077500000000000000000000000001324361747700151265ustar00rootroot00000000000000vibe.d-0.8.2/stream/vibe/stream/000077500000000000000000000000001324361747700164215ustar00rootroot00000000000000vibe.d-0.8.2/stream/vibe/stream/base64.d000066400000000000000000000132201324361747700176500ustar00rootroot00000000000000/** Base64 encoding routines Copyright: © 2012-2016 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Jan Krüger, Sönke Ludwig */ module vibe.stream.base64; import vibe.core.stream; import std.base64; /** Creates a Base64 encoding stream.max_bytes_per_line By default, the stream generates a MIME compatible Base64 encoding. Params: output = The output sink to which the encoded result is written. max_bytes_per_line = The maximum number of input bytes after which a line break is inserted into the output. Defaults to 57, according to the MIME standard. */ Base64OutputStreamImpl!(C62, C63, CPAD, OutputStream) createBase64OutputStream(char C62 = '+', char C63 = '/', char CPAD = '=', OutputStream)(OutputStream output, ulong max_bytes_per_line = 57) if (isOutputStream!OutputStream) { return new Base64OutputStreamImpl!(C62, C63, CPAD, OutputStream)(output, max_bytes_per_line, true); } /** Creates a URL safe Base64 encoding stream (using '-' and '_' for non-alphabetic values). Params: output = The output sink to which the encoded result is written. max_bytes_per_line = The maximum number of input bytes after which a line break is inserted into the output. Defaults to 57, according to the MIME standard. */ Base64OutputStreamImpl!('-', '_', '=', OutputStream) createBase64URLOutputStream(OutputStream)(OutputStream output, ulong max_bytes_per_line = 57) if (isOutputStream!OutputStream) { return craeteBase64OutputStream!('-', '_')(output, max_bytes_per_line); } /** MIME compatible Base64 encoding stream. */ alias Base64OutputStream = Base64OutputStreamImpl!('+', '/'); /** URL safe Base64 encoding stream (using '-' and '_' for non-alphabetic values). */ alias Base64URLOutputStream = Base64OutputStreamImpl!('-', '_'); /** Generic Base64 encoding output stream. The template arguments C62 and C63 determine which non-alphabetic characters are used to represent the 62nd and 63rd code units. CPAD is the character used for padding the end of the result if necessary. */ final class Base64OutputStreamImpl(char C62, char C63, char CPAD = '=', OutputStream = .OutputStream) : .OutputStream if (isOutputStream!OutputStream) { private { OutputStream m_out; ulong m_maxBytesPerLine; ulong m_bytesInCurrentLine = 0; } private alias B64 = Base64Impl!(C62, C63, CPAD); deprecated("Use `createBase64OutputStream` or `createBase64URLOutputStream` instead.") this(OutputStream output, ulong max_bytes_per_line = 57) { this(output, max_bytes_per_line, true); } /// private this(OutputStream output, ulong max_bytes_per_line, bool dummy) { m_out = output; m_maxBytesPerLine = max_bytes_per_line; } size_t write(in ubyte[] bytes_, IOMode) @trusted { // StreamOutputRange is not @safe import vibe.stream.wrapper; const(ubyte)[] bytes = bytes_; auto rng = StreamOutputRange(m_out); size_t nwritten = 0; while (bytes.length > 0) { if (m_bytesInCurrentLine + bytes.length >= m_maxBytesPerLine) { size_t bts = cast(size_t)(m_maxBytesPerLine - m_bytesInCurrentLine); B64.encode(bytes[0 .. bts], &rng); rng.put("\r\n"); bytes = bytes[bts .. $]; m_bytesInCurrentLine = 0; nwritten += bts; } else { B64.encode(bytes, &rng); m_bytesInCurrentLine += bytes.length; nwritten += bytes.length; break; } } return nwritten; } alias write = .OutputStream.write; void flush() { m_out.flush(); } void finalize() { flush(); } } /+ /** MIME compatible Base64 decoding stream. */ alias Base64InputStream = Base64InputStreamImpl!('+', '/'); /** URL safe Base64 decoding stream (using '-' and '_' for non-alphabetic values). */ alias Base64URLInputStream = Base64InputStreamImpl!('-', '_'); class Base64InputStream(char C62, char C63, char CPAD = '=') : InputStream { private { InputStream m_in; FixedRingBuffer!(ubyte, 1024) m_buffer; } private alias B64 = Base64Impl!(C62, C63, CPAD); this(InputStream input) { m_in = input; fillBuffer(); } bool empty() const { return m_buffer.empty; } ulong leastSize() const { return m_buffer.length; } const(ubyte)[] peek() const { return m_buffer.peek; } void read(ubyte[] dst) { ubyte[74] inbuf; while (!dst.empty) { enforce(!empty, "Reading past end of base-64 stream."); auto sz = min(dst.length, m_buffer.length); m_buffer.read(dst[0 .. sz]); dst = dst[sz .. $]; fillBuffer(); } } private void fillBuffer() { ubyte[74] buf; size_t buf_fill = 0; while (!m_buffer.full || !m_in.empty) { auto insz = m_in.leastSize; auto sz = min(insz, (m_buffer.freeSpace/3)*4); if (sz == 0) { m_in.read(buf[buf_fill .. buf_fill+insz]); buf_fill += insz; } auto csz = min(sz, buf.length); m_in.read(buf[0 .. csz]) B64.decode(); m_in.read(m_buffer.peekDst[0 .. min(sz, $)]); } } } +/ unittest { void test(in ubyte[] data, string encoded, ulong bytes_per_line = 57) { import vibe.stream.memory; auto encstr = createMemoryOutputStream(); auto bostr = createBase64OutputStream(encstr, bytes_per_line); bostr.write(data); assert(encstr.data == encoded); /*encstr.seek(0); auto bistr = new Base64InputStream(encstr); assert(bistr.readAll() == data);*/ } test([0x14, 0xfb, 0x9c, 0x03, 0xd9, 0x7e], "FPucA9l+"); ubyte[200] data; foreach (i, ref b; data) b = (i * 1337) % 256; string encoded = "ADlyq+QdVo/IATpzrOUeV5DJAjt0reYfWJHKAzx1rucgWZLLBD12r+ghWpPMBT53sOkiW5TNBj94\r\n" ~ "seojXJXOB0B5suskXZbPCEF6s+wlXpfQCUJ7tO0mX5jRCkN8te4nYJnSC0R9tu8oYZrTDEV+t/Ap\r\n" ~ "YpvUDUZ/uPEqY5zVDkeAufIrZJ3WD0iBuvMsZZ7XEEmCu/QtZp/YEUqDvPUuZ6DZEkuEvfYvaKHa\r\n" ~ "E0yFvvcwaaLbFE2Gv/gxaqPcFU6HwPkya6TdFk8="; test(data, encoded); } vibe.d-0.8.2/stream/vibe/stream/counting.d000066400000000000000000000210761324361747700204220ustar00rootroot00000000000000/** Wrapper streams which count the number of bytes or limit the stream based on the number of transferred bytes. Copyright: © 2012 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.stream.counting; public import vibe.core.stream; import std.exception; import vibe.internal.interfaceproxy; import vibe.internal.freelistref : FreeListRef; /** Constructs a limited stream from an existing input stream. Params: stream = the input stream to be wrapped byte_limit = the maximum number of bytes readable from the constructed stream silent_limit = if set, the stream will behave exactly like the original stream, but will throw an exception as soon as the limit is reached. */ LimitedInputStream createLimitedInputStream(InputStream)(InputStream stream, ulong byte_limit, bool silent_limit = false) if (isInputStream!InputStream) { return new LimitedInputStream(interfaceProxy!(.InputStream)(stream), byte_limit, silent_limit, true); } /// private FreeListRef!LimitedInputStream createLimitedInputStreamFL(InputStream)(InputStream stream, ulong byte_limit, bool silent_limit = false) if (isInputStream!InputStream) { return FreeListRef!LimitedInputStream(interfaceProxy!(.InputStream)(stream), byte_limit, silent_limit, true); } /** Creates a proxy stream that counts the number of bytes written. Params: output = The stream to forward the written data to byte_limit = Optional total write size limit after which an exception is thrown */ CountingOutputStream createCountingOutputStream(OutputStream)(OutputStream output, ulong byte_limit = ulong.max) if (isOutputStream!OutputStream) { return new CountingOutputStream(interfaceProxy!(.OutputStream)(output), byte_limit, true); } /// private FreeListRef!CountingOutputStream createCountingOutputStreamFL(OutputStream)(OutputStream output, ulong byte_limit = ulong.max) if (isOutputStream!OutputStream) { return FreeListRef!CountingOutputStream(interfaceProxy!(.OutputStream)(output), byte_limit, true); } /** Creates a stream that fires a callback once the end of the underlying input stream is reached. Params: input = Source stream to read from callback = The callback that is invoked one the source stream has been drained */ EndCallbackInputStream createEndCallbackInputStream(InputStream)(InputStream input, void delegate() @safe callback) if (isInputStream!InputStream) { return new EndCallbackInputStream(interfaceProxy!(.InputStream)(input), callback, true); } /// private FreeListRef!EndCallbackInputStream createEndCallbackInputStreamFL(InputStream)(InputStream input, void delegate() @safe callback) if (isInputStream!InputStream) { return FreeListRef!EndCallbackInputStream(interfaceProxy!(.InputStream)(input), callback, true); } /** Wraps an existing stream, limiting the amount of data that can be read. */ class LimitedInputStream : InputStream { @safe: private { InterfaceProxy!InputStream m_input; ulong m_sizeLimit; bool m_silentLimit; } deprecated("Use createLimitedInputStream instead.") this(InputStream stream, ulong byte_limit, bool silent_limit = false) { this(interfaceProxy!InputStream(stream), byte_limit, silent_limit, true); } /// private this(InterfaceProxy!InputStream stream, ulong byte_limit, bool silent_limit, bool dummy) { assert(!!stream); m_input = stream; m_sizeLimit = byte_limit; m_silentLimit = silent_limit; } /// The stream that is wrapped by this one @property inout(InterfaceProxy!InputStream) sourceStream() inout { return m_input; } @property bool empty() { return m_silentLimit ? m_input.empty : (m_sizeLimit == 0); } @property ulong leastSize() { if( m_silentLimit ) return m_input.leastSize; return m_sizeLimit; } @property bool dataAvailableForRead() { return m_input.dataAvailableForRead; } void increment(ulong bytes) { if( bytes > m_sizeLimit ) onSizeLimitReached(); m_sizeLimit -= bytes; } const(ubyte)[] peek() { return m_input.peek(); } size_t read(scope ubyte[] dst, IOMode mode) { if (dst.length > m_sizeLimit) onSizeLimitReached(); auto ret = m_input.read(dst, mode); m_sizeLimit -= ret; return ret; } alias read = InputStream.read; protected void onSizeLimitReached() @safe { throw new LimitException("Size limit reached", m_sizeLimit); } } /** Wraps an existing output stream, counting the bytes that are written. */ class CountingOutputStream : OutputStream { @safe: private { ulong m_bytesWritten; ulong m_writeLimit; InterfaceProxy!OutputStream m_out; } deprecated("Use createCountingOutputStream instead.") this(OutputStream stream, ulong write_limit = ulong.max) { this(interfaceProxy!OutputStream(stream), write_limit, true); } /// private this(InterfaceProxy!OutputStream stream, ulong write_limit, bool dummy) { assert(!!stream); m_writeLimit = write_limit; m_out = stream; } /// Returns the total number of bytes written. @property ulong bytesWritten() const { return m_bytesWritten; } /// The maximum number of bytes to write @property ulong writeLimit() const { return m_writeLimit; } /// ditto @property void writeLimit(ulong value) { m_writeLimit = value; } /** Manually increments the write counter without actually writing data. */ void increment(ulong bytes) { enforce(m_bytesWritten + bytes <= m_writeLimit, "Incrementing past end of output stream."); m_bytesWritten += bytes; } size_t write(in ubyte[] bytes, IOMode mode) { enforce(m_bytesWritten + bytes.length <= m_writeLimit, "Writing past end of output stream."); auto ret = m_out.write(bytes, mode); m_bytesWritten += ret; return ret; } alias write = OutputStream.write; void flush() { m_out.flush(); } void finalize() { m_out.flush(); } } /** Wraps an existing input stream, counting the bytes that are written. */ class CountingInputStream : InputStream { @safe: private { ulong m_bytesRead; InterfaceProxy!InputStream m_in; } deprecated("Use createCountingOutputStream instead.") this(InputStream stream) { this(interfaceProxy!InputStream(stream), true); } /// private this(InterfaceProxy!InputStream stream, bool dummy) { assert(!!stream); m_in = stream; } @property ulong bytesRead() const { return m_bytesRead; } @property bool empty() { return m_in.empty(); } @property ulong leastSize() { return m_in.leastSize(); } @property bool dataAvailableForRead() { return m_in.dataAvailableForRead; } void increment(ulong bytes) { m_bytesRead += bytes; } const(ubyte)[] peek() { return m_in.peek(); } size_t read(scope ubyte[] dst, IOMode mode) { auto ret = m_in.read(dst, mode); m_bytesRead += ret; return ret; } alias read = InputStream.read; } /** Wraps an input stream and calls the given delegate once the stream is empty. Note that this function will potentially block after each read operation to see if the end has already been reached - this may take as long until either new data has arrived or until the connection was closed. The stream will also guarantee that the inner stream is not used after it has been determined to be empty. It can thus be safely deleted once the callback is invoked. */ class EndCallbackInputStream : InputStream { @safe: private { InterfaceProxy!InputStream m_in; bool m_eof = false; void delegate() @safe m_callback; } deprecated("use createEndCallbackInputStream instead.") this(InputStream input, void delegate() @safe callback) { this(interfaceProxy!InputStream(input), callback, true); } /// private this(InterfaceProxy!InputStream input, void delegate() @safe callback, bool dummy) { m_in = input; m_callback = callback; checkEOF(); } @property bool empty() { checkEOF(); return !m_in; } @property ulong leastSize() { checkEOF(); if( m_in ) return m_in.leastSize(); return 0; } @property bool dataAvailableForRead() { if( !m_in ) return false; return m_in.dataAvailableForRead; } const(ubyte)[] peek() { if( !m_in ) return null; return m_in.peek(); } size_t read(scope ubyte[] dst, IOMode mode) { enforce(!!m_in, "Reading past end of stream."); auto ret = m_in.read(dst, mode); checkEOF(); return ret; } alias read = InputStream.read; private void checkEOF() @safe { if( !m_in ) return; if( m_in.empty ){ m_in = InterfaceProxy!InputStream.init; m_callback(); } } } class LimitException : Exception { @safe: private ulong m_limit; this(string message, ulong limit, Throwable next = null, string file = __FILE__, int line = __LINE__) { super(message, next, file, line); } /// The byte limit of the stream that emitted the exception @property ulong limit() const { return m_limit; } } vibe.d-0.8.2/stream/vibe/stream/memory.d000066400000000000000000000103461324361747700201020ustar00rootroot00000000000000/** In-memory streams Copyright: © 2012-2016 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.stream.memory; import vibe.core.stream; import vibe.utils.array; import vibe.internal.allocator; import std.algorithm; import std.array; import std.exception; import std.typecons; MemoryOutputStream createMemoryOutputStream(IAllocator alloc = vibeThreadAllocator()) @safe nothrow { return new MemoryOutputStream(alloc, true); } /** Creates a new stream with the given data array as its contents. Params: data = The data array writable = Flag that controls whether the data array may be changed initial_size = The initial value that size returns - the file can grow up to data.length in size */ MemoryStream createMemoryStream(ubyte[] data, bool writable = true, size_t initial_size = size_t.max) @safe nothrow { return new MemoryStream(data, writable, initial_size, true); } /** OutputStream that collects the written data in memory and allows to query it as a byte array. */ final class MemoryOutputStream : OutputStream { @safe: private { AllocAppender!(ubyte[]) m_destination; } deprecated("Use createMemoryOutputStream isntead.") this(IAllocator alloc = vibeThreadAllocator()) { this(alloc, true); } /// private this(IAllocator alloc, bool dummy) nothrow { m_destination = AllocAppender!(ubyte[])(alloc); } /// An array with all data written to the stream so far. @property ubyte[] data() nothrow { return m_destination.data(); } /// Resets the stream to its initial state containing no data. void reset(AppenderResetMode mode = AppenderResetMode.keepData) @system { m_destination.reset(mode); } /// Reserves space for data - useful for optimization. void reserve(size_t nbytes) { m_destination.reserve(nbytes); } size_t write(in ubyte[] bytes, IOMode) { () @trusted { m_destination.put(bytes); } (); return bytes.length; } alias write = OutputStream.write; void flush() nothrow { } void finalize() nothrow { } } mixin validateOutputStream!MemoryOutputStream; /** Provides a random access stream interface for accessing an array of bytes. */ final class MemoryStream : RandomAccessStream { @safe: private { ubyte[] m_data; size_t m_size; bool m_writable; size_t m_ptr = 0; size_t m_peekWindow; } deprecated("Use createMemoryStream instead.") this(ubyte[] data, bool writable = true, size_t initial_size = size_t.max) { this(data, writable, initial_size, true); } /// private this(ubyte[] data, bool writable, size_t initial_size, bool dummy) nothrow { m_data = data; m_size = min(initial_size, data.length); m_writable = writable; m_peekWindow = m_data.length; } /** Controls the maximum size of the array returned by peek(). This property is mainly useful for debugging purposes. */ @property void peekWindow(size_t size) { m_peekWindow = size; } @property bool empty() { return leastSize() == 0; } @property ulong leastSize() { return m_size - m_ptr; } @property bool dataAvailableForRead() { return leastSize() > 0; } @property ulong size() const nothrow { return m_size; } @property size_t capacity() const nothrow { return m_data.length; } @property bool readable() const nothrow { return true; } @property bool writable() const nothrow { return m_writable; } void seek(ulong offset) { assert(offset <= m_size); m_ptr = cast(size_t)offset; } ulong tell() nothrow { return m_ptr; } const(ubyte)[] peek() { return m_data[m_ptr .. min(m_size, m_ptr+m_peekWindow)]; } size_t read(scope ubyte[] dst, IOMode mode) { enforce(mode != IOMode.all || dst.length <= leastSize, "Reading past end of memory stream."); auto len = min(leastSize, dst.length); dst[0 .. len] = m_data[m_ptr .. m_ptr+len]; m_ptr += len; return len; } alias read = RandomAccessStream.read; size_t write(in ubyte[] bytes, IOMode) { assert(writable); enforce(bytes.length <= m_data.length - m_ptr, "Size limit of memory stream reached."); m_data[m_ptr .. m_ptr+bytes.length] = bytes[]; m_ptr += bytes.length; m_size = max(m_size, m_ptr); return bytes.length; } alias write = RandomAccessStream.write; void flush() {} void finalize() {} } mixin validateRandomAccessStream!MemoryStream; vibe.d-0.8.2/stream/vibe/stream/multicast.d000066400000000000000000000022151324361747700205730ustar00rootroot00000000000000/** Multicasts an input stream to multiple output streams. Copyright: © 2014-2016 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Eric Cornelius */ module vibe.stream.multicast; import vibe.core.core; import vibe.core.stream; import std.exception; MulticastStream createMulticastStream(scope OutputStream[] outputs...) { return new MulticastStream(outputs, true); } class MulticastStream : OutputStream { private { OutputStream[] m_outputs; } deprecated("Use createMulticastStream instead.") this(OutputStream[] outputs ...) { this(outputs, true); } /// private this(scope OutputStream[] outputs, bool dummy) { // NOTE: investigate .dup dmd workaround m_outputs = outputs.dup; } void finalize() { flush(); } void flush() { foreach (output; m_outputs) output.flush(); } size_t write(in ubyte[] bytes, IOMode mode) { if (!m_outputs.length) return bytes.length; auto ret = m_outputs[0].write(bytes, mode); foreach (output; m_outputs[1 .. $]) output.write(bytes[0 .. ret]); return ret; } alias write = OutputStream.write; } vibe.d-0.8.2/stream/vibe/stream/operations.d000066400000000000000000000440301324361747700207520ustar00rootroot00000000000000/** High level stream manipulation functions. Copyright: © 2012-2016 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.stream.operations; public import vibe.core.stream; import vibe.core.log; import vibe.utils.array : AllocAppender; import vibe.internal.allocator; import vibe.internal.freelistref; import vibe.stream.wrapper : ProxyStream; import std.algorithm; import std.array; import std.datetime; import std.exception; import std.range : isOutputRange; /**************************************************************************************************/ /* Public functions */ /**************************************************************************************************/ /** Reads and returns a single line from the stream. Throws: An exception if either the stream end was hit without hitting a newline first, or if more than max_bytes have been read from the stream. */ ubyte[] readLine(InputStream)(InputStream stream, size_t max_bytes = size_t.max, string linesep = "\r\n", IAllocator alloc = vibeThreadAllocator()) /*@ufcs*/ if (isInputStream!InputStream) { auto output = AllocAppender!(ubyte[])(alloc); output.reserve(max_bytes < 64 ? max_bytes : 64); readLine(stream, output, max_bytes, linesep); return output.data(); } /// ditto void readLine(InputStream, OutputStream)(InputStream stream, OutputStream dst, size_t max_bytes = size_t.max, string linesep = "\r\n") if (isInputStream!InputStream && isOutputStream!OutputStream) { import vibe.stream.wrapper; auto dstrng = StreamOutputRange(dst); readLine(stream, dstrng, max_bytes, linesep); } /// ditto void readLine(R, InputStream)(InputStream stream, ref R dst, size_t max_bytes = size_t.max, string linesep = "\r\n") if (isOutputRange!(R, ubyte)) { readUntil(stream, dst, cast(const(ubyte)[])linesep, max_bytes); } @safe unittest { import vibe.stream.memory : createMemoryOutputStream, createMemoryStream; auto inp = createMemoryStream(cast(ubyte[])"Hello, World!\r\nThis is a test.\r\nNot a full line.".dup); assert(inp.readLine() == cast(const(ubyte)[])"Hello, World!"); assert(inp.readLine() == cast(const(ubyte)[])"This is a test."); assertThrown(inp.readLine); // start over inp.seek(0); // read into an output buffer auto app = appender!(ubyte[]); inp.readLine(app); assert(app.data == cast(const(ubyte)[])"Hello, World!"); // read into an output stream auto os = createMemoryOutputStream(); inp.readLine(os); assert(os.data == cast(const(ubyte)[])"This is a test."); } /** Reads all data of a stream until the specified end marker is detected. Params: stream = The input stream which is searched for end_marker end_marker = The byte sequence which is searched in the stream max_bytes = An optional limit of how much data is to be read from the input stream; if the limit is reaached before hitting the end marker, an exception is thrown. alloc = An optional allocator that is used to build the result string in the string variant of this function dst = The output stream, to which the prefix to the end marker of the input stream is written Returns: The string variant of this function returns the complete prefix to the end marker of the input stream, excluding the end marker itself. Throws: An exception if either the stream end was hit without hitting a marker first, or if more than max_bytes have been read from the stream in case of max_bytes != 0. Remarks: This function uses an algorithm inspired by the $(LINK2 http://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm, Boyer-Moore string search algorithm). However, contrary to the original algorithm, it will scan the whole input string exactly once, without jumping over portions of it. This allows the algorithm to work with constant memory requirements and without the memory copies that would be necessary for streams that do not hold their complete data in memory. The current implementation has a run time complexity of O(n*m+m²) and O(n+m) in typical cases, with n being the length of the scanned input string and m the length of the marker. */ ubyte[] readUntil(InputStream)(InputStream stream, in ubyte[] end_marker, size_t max_bytes = size_t.max, IAllocator alloc = vibeThreadAllocator()) /*@ufcs*/ if (isInputStream!InputStream) { auto output = AllocAppender!(ubyte[])(alloc); output.reserve(max_bytes < 64 ? max_bytes : 64); readUntil(stream, output, end_marker, max_bytes); return output.data(); } /// ditto void readUntil(InputStream, OutputStream)(InputStream stream, OutputStream dst, in ubyte[] end_marker, ulong max_bytes = ulong.max) /*@ufcs*/ if (isInputStream!InputStream && isOutputStream!OutputStream) { import vibe.stream.wrapper; auto dstrng = streamOutputRange(dst); readUntil(stream, dstrng, end_marker, max_bytes); } /// ditto void readUntil(R, InputStream)(InputStream stream, ref R dst, in ubyte[] end_marker, ulong max_bytes = ulong.max) /*@ufcs*/ if (isOutputRange!(R, ubyte) && isInputStream!InputStream) { assert(max_bytes > 0 && end_marker.length > 0); if (end_marker.length <= 2) readUntilSmall(stream, dst, end_marker, max_bytes); else readUntilGeneric(stream, dst, end_marker, max_bytes); } @safe unittest { import vibe.stream.memory; auto text = "1231234123111223123334221111112221231333123123123123123213123111111111114".dup; auto stream = createMemoryStream(cast(ubyte[])text); void test(string s, size_t expected) @safe { stream.seek(0); auto result = cast(char[])readUntil(stream, cast(const(ubyte)[])s); assert(result.length == expected, "Wrong result index"); assert(result == text[0 .. result.length], "Wrong result contents: "~result~" vs "~text[0 .. result.length]); assert(stream.leastSize() == stream.size() - expected - s.length, "Wrong number of bytes left in stream"); stream.seek(0); auto inp2 = new NoPeekProxy!InputStream(stream); result = cast(char[])readUntil(inp2, cast(const(ubyte)[])s); assert(result.length == expected, "Wrong result index"); assert(result == text[0 .. result.length], "Wrong result contents: "~result~" vs "~text[0 .. result.length]); assert(stream.leastSize() == stream.size() - expected - s.length, "Wrong number of bytes left in stream"); } foreach( i; 0 .. text.length ){ stream.peekWindow = i; test("1", 0); test("2", 1); test("3", 2); test("12", 0); test("23", 1); test("31", 2); test("123", 0); test("231", 1); test("1231", 0); test("3123", 2); test("11223", 11); test("11222", 28); test("114", 70); test("111111111114", 61); } // TODO: test } @safe unittest { import vibe.stream.memory : createMemoryOutputStream, createMemoryStream, MemoryStream; import vibe.stream.wrapper : ProxyStream; auto text = cast(ubyte[])"ab\nc\rd\r\ne".dup; void test(string marker, size_t idx) { // code path for peek support auto inp = createMemoryStream(text); auto dst = appender!(ubyte[]); readUntil(inp, dst, cast(const(ubyte)[])marker); assert(dst.data == text[0 .. idx]); assert(inp.peek == text[idx+marker.length .. $]); // code path for no peek support inp.seek(0); dst = appender!(ubyte[]); auto inp2 = new NoPeekProxy!MemoryStream(inp); readUntil(inp2, dst, cast(const(ubyte)[])marker); assert(dst.data == text[0 .. idx]); assert(inp.readAll() == text[idx+marker.length .. $]); } test("\r\n", 6); test("\r", 4); test("\n", 2); } /** Reads the complete contents of a stream, optionally limited by max_bytes. Throws: An exception is thrown if the stream contains more than max_bytes data. */ ubyte[] readAll(InputStream)(InputStream stream, size_t max_bytes = size_t.max, size_t reserve_bytes = 0) /*@ufcs*/ if (isInputStream!InputStream) { import vibe.internal.freelistref; if (max_bytes == 0) logDebug("Deprecated behavior: readAll() called with max_bytes==0, use max_bytes==size_t.max instead."); // prepare output buffer auto dst = AllocAppender!(ubyte[])(() @trusted { return GCAllocator.instance.allocatorObject; } ()); reserve_bytes = max(reserve_bytes, min(max_bytes, stream.leastSize)); if (reserve_bytes) dst.reserve(reserve_bytes); size_t n = 0; while (!stream.empty) { size_t chunk = min(stream.leastSize, size_t.max); n += chunk; enforce(!max_bytes || n <= max_bytes, "Input data too long!"); dst.reserve(chunk); dst.append((scope buf) { stream.read(buf[0 .. chunk]); return chunk; }); } return dst.data; } /** Reads the complete contents of a stream, assuming UTF-8 encoding. Params: stream = Specifies the stream from which to read. sanitize = If true, the input data will not be validated but will instead be made valid UTF-8. max_bytes = Optional size limit of the data that is read. Returns: The full contents of the stream, excluding a possible BOM, are returned as a UTF-8 string. Throws: An exception is thrown if max_bytes != 0 and the stream contains more than max_bytes data. If the sanitize parameter is false and the stream contains invalid UTF-8 code sequences, a UTFException is thrown. */ string readAllUTF8(InputStream)(InputStream stream, bool sanitize = false, size_t max_bytes = size_t.max) if (isInputStream!InputStream) { import std.utf; import vibe.utils.string; auto data = readAll(stream, max_bytes); if( sanitize ) return stripUTF8Bom(sanitizeUTF8(data)); else { auto ret = () @trusted { return cast(string)data; } (); validate(ret); return stripUTF8Bom(ret); } } /** Pipes a stream to another while keeping the latency within the specified threshold. Params: destination = The destination stram to pipe into source = The source stream to read data from nbytes = Number of bytes to pipe through. The default of zero means to pipe the whole input stream. max_latency = The maximum time before data is flushed to destination. The default value of 0 s will flush after each chunk of data read from source. See_also: OutputStream.write */ void pipeRealtime(OutputStream, ConnectionStream)(OutputStream destination, ConnectionStream source, ulong nbytes = 0, Duration max_latency = 0.seconds) if (isOutputStream!OutputStream && isConnectionStream!ConnectionStream) { import vibe.internal.freelistref; static struct Buffer { ubyte[64*1024] bytes = void; } auto bufferobj = FreeListRef!(Buffer, false)(); auto buffer = bufferobj.bytes[]; //logTrace("default write %d bytes, empty=%s", nbytes, stream.empty); auto least_size = source.leastSize; StopWatch sw; sw.start(); while (nbytes > 0 || least_size > 0) { size_t chunk = min(nbytes > 0 ? nbytes : ulong.max, least_size, buffer.length); assert(chunk > 0, "leastSize returned zero for non-empty stream."); //logTrace("read pipe chunk %d", chunk); source.read(buffer[0 .. chunk]); destination.write(buffer[0 .. chunk]); if (nbytes > 0) nbytes -= chunk; auto remaining_latency = max_latency - cast(Duration)sw.peek(); if (remaining_latency > 0.seconds) source.waitForData(remaining_latency); if (cast(Duration)sw.peek >= max_latency) { logTrace("pipeRealtime flushing."); destination.flush(); sw.reset(); } else { logTrace("pipeRealtime not flushing."); } least_size = source.leastSize; if (!least_size) { enforce(nbytes == 0, "Reading past end of input."); break; } } destination.flush(); } /** Consumes `bytes.length` bytes of the stream and determines if the contents match up. Returns: True $(I iff) the consumed bytes equal the passed array. Throws: Throws an exception if reading from the stream fails. */ bool skipBytes(InputStream)(InputStream stream, const(ubyte)[] bytes) if (isInputStream!InputStream) { bool matched = true; ubyte[128] buf = void; while (bytes.length) { auto len = min(buf.length, bytes.length); stream.read(buf[0 .. len], IOMode.all); if (buf[0 .. len] != bytes[0 .. len]) matched = false; bytes = bytes[len .. $]; } return matched; } private struct Buffer { ubyte[64*1024-4] bytes = void; } // 64k - 4 bytes for reference count private void readUntilSmall(R, InputStream)(InputStream stream, ref R dst, in ubyte[] end_marker, ulong max_bytes = ulong.max) if (isInputStream!InputStream) { assert(end_marker.length >= 1 && end_marker.length <= 2); size_t nmatched = 0; size_t nmarker = end_marker.length; while (true) { enforce(!stream.empty, "Reached EOF while searching for end marker."); enforce(max_bytes > 0, "Reached maximum number of bytes while searching for end marker."); auto max_peek = max(max_bytes, max_bytes+nmarker); // account for integer overflow auto pm = stream.peek()[0 .. min($, max_bytes)]; if (!pm.length || nmatched == 1) { // no peek support - inefficient route ubyte[2] buf = void; auto l = nmarker - nmatched; stream.read(buf[0 .. l], IOMode.all); foreach (i; 0 .. l) { if (buf[i] == end_marker[nmatched]) { nmatched++; } else if (buf[i] == end_marker[0]) { foreach (j; 0 .. nmatched) dst.put(end_marker[j]); nmatched = 1; } else { foreach (j; 0 .. nmatched) dst.put(end_marker[j]); nmatched = 0; dst.put(buf[i]); } if (nmatched == nmarker) return; } } else { assert(nmatched == 0); auto idx = pm.countUntil(end_marker[0]); if (idx < 0) { dst.put(pm); max_bytes -= pm.length; stream.skip(pm.length); } else { dst.put(pm[0 .. idx]); if (nmarker == 1) { stream.skip(idx+1); return; } else if (idx+1 < pm.length && pm[idx+1] == end_marker[1]) { assert(nmarker == 2); stream.skip(idx+2); return; } else { nmatched++; stream.skip(idx+1); } } } } } @safe unittest { // issue #1741 static class S : InputStream { ubyte[] src; ubyte[] buf; size_t nread; this(scope ubyte[] bytes...) { src = bytes.dup; } @property bool empty() { return nread >= src.length; } @property ulong leastSize() { if (!buf.length && !nread) buf = src; return src.length - nread; } @property bool dataAvailableForRead() { return buf.length > 0; } const(ubyte)[] peek() { return buf; } size_t read(scope ubyte[] dst, IOMode) { if (!buf.length) buf = src; dst[] = buf[0 .. dst.length]; nread += dst.length; buf = buf[dst.length .. $]; return dst.length; } alias InputStream.read read; } auto s = new S('X', '\r', '\n'); auto dst = appender!(ubyte[]); readUntilSmall(s, dst, ['\r', '\n']); assert(dst.data == ['X']); } private void readUntilGeneric(R, InputStream)(InputStream stream, ref R dst, in ubyte[] end_marker, ulong max_bytes = ulong.max) /*@ufcs*/ if (isOutputRange!(R, ubyte) && isInputStream!InputStream) { // allocate internal jump table to optimize the number of comparisons size_t[8] nmatchoffsetbuffer = void; size_t[] nmatchoffset; if (end_marker.length <= nmatchoffsetbuffer.length) nmatchoffset = nmatchoffsetbuffer[0 .. end_marker.length]; else nmatchoffset = new size_t[end_marker.length]; // precompute the jump table nmatchoffset[0] = 0; foreach( i; 1 .. end_marker.length ){ nmatchoffset[i] = i; foreach_reverse( j; 1 .. i ) if( end_marker[j .. i] == end_marker[0 .. i-j] ){ nmatchoffset[i] = i-j; break; } assert(nmatchoffset[i] > 0 && nmatchoffset[i] <= i); } size_t nmatched = 0; Buffer* bufferobj; bufferobj = new Buffer; scope (exit) () @trusted { delete bufferobj; } (); auto buf = bufferobj.bytes[]; ulong bytes_read = 0; void skip2(size_t nbytes) { bytes_read += nbytes; stream.skip(nbytes); } while( !stream.empty ){ enforce(bytes_read < max_bytes, "Reached byte limit before reaching end marker."); // try to get as much data as possible, either by peeking into the stream or // by reading as much as isguaranteed to not exceed the end marker length // the block size is also always limited by the max_bytes parameter. size_t nread = 0; auto least_size = stream.leastSize(); // NOTE: blocks until data is available auto max_read = max_bytes - bytes_read; auto str = stream.peek(); // try to get some data for free if( str.length == 0 ){ // if not, read as much as possible without reading past the end nread = min(least_size, end_marker.length-nmatched, buf.length, max_read); stream.read(buf[0 .. nread]); str = buf[0 .. nread]; bytes_read += nread; } else if( str.length > max_read ){ str.length = cast(size_t)max_read; } // remember how much of the marker was already matched before processing the current block size_t nmatched_start = nmatched; // go through the current block trying to match the marker size_t i = 0; for (i = 0; i < str.length; i++) { auto ch = str[i]; // if we have a mismatch, use the jump table to try other possible prefixes // of the marker while( nmatched > 0 && ch != end_marker[nmatched] ) nmatched -= nmatchoffset[nmatched]; // if we then have a match, increase the match count and test for full match if (ch == end_marker[nmatched]) if (++nmatched == end_marker.length) { i++; break; } } // write out any false match part of previous blocks if( nmatched_start > 0 ){ if( nmatched <= i ) () @trusted { dst.put(end_marker[0 .. nmatched_start]); } (); else () @trusted { dst.put(end_marker[0 .. nmatched_start-nmatched+i]); } (); } // write out any unmatched part of the current block if( nmatched < i ) () @trusted { dst.put(str[0 .. i-nmatched]); } (); // got a full, match => out if (nmatched >= end_marker.length) { // in case of a full match skip data in the stream until the end of // the marker skip2(i - nread); return; } // otherwise skip this block in the stream skip2(str.length - nread); } enforce(false, "Reached EOF before reaching end marker."); } private void skip(InputStream)(InputStream str, ulong count) if (isInputStream!InputStream) { ubyte[256] buf = void; while (count > 0) { auto n = min(buf.length, count); str.read(buf[0 .. n], IOMode.all); count -= n; } } private class NoPeekProxy(InputStream) : ProxyStream if (isInputStream!InputStream) { this(InputStream stream) { import vibe.internal.interfaceproxy : InterfaceProxy, interfaceProxy; super(interfaceProxy!(.InputStream)(stream), InterfaceProxy!OutputStream.init, true); } override const(ubyte)[] peek() { return null; } } vibe.d-0.8.2/stream/vibe/stream/stdio.d000066400000000000000000000072741324361747700177220ustar00rootroot00000000000000/** Standard I/O streams Copyright: © 2014 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig, Eric Cornelius */ module vibe.stream.stdio; import vibe.core.core; import vibe.core.stream; import vibe.stream.taskpipe; import std.stdio; import core.thread; import std.exception; class StdFileStream : ConnectionStream { private { std.stdio.File m_file; TaskPipe m_readPipe; TaskPipe m_writePipe; Thread m_readThread; Thread m_writeThread; } this(bool read, bool write) { if (read) m_readPipe = new TaskPipe; if (write) m_writePipe = new TaskPipe; } void setup(std.stdio.File file) { m_file = file; if (m_readPipe) { m_readThread = new Thread(&readThreadFunc); m_readThread.name = "StdFileStream reader"; m_readThread.start(); } if (m_writePipe) { m_writeThread = new Thread(&writeThreadFunc); m_writeThread.name = "StdFileStream writer"; m_writeThread.start(); } } override @property bool empty() { enforceReadable(); return m_readPipe.empty; } override @property ulong leastSize() { enforceReadable(); return m_readPipe.leastSize; } override @property bool dataAvailableForRead() { enforceReadable(); return m_readPipe.dataAvailableForRead; } override @property bool connected() const { return m_readPipe.connected; } override void close() { m_writePipe.close(); } override bool waitForData(Duration timeout) { return m_readPipe.waitForData(timeout); } override const(ubyte)[] peek() { enforceReadable(); return m_readPipe.peek(); } override size_t read(scope ubyte[] dst, IOMode mode) { enforceReadable(); return m_readPipe.read(dst, mode); } alias read = ConnectionStream.read; override size_t write(in ubyte[] bytes_, IOMode mode) { enforceWritable(); return m_writePipe.write(bytes_, mode); } alias write = ConnectionStream.write; override void flush() { enforceWritable(); m_writePipe.flush(); } override void finalize() { enforceWritable(); if (!m_writePipe.connected) return; flush(); m_writePipe.finalize(); } void enforceReadable() @safe { enforce(m_readPipe, "Stream is not readable!"); } void enforceWritable() @safe { enforce(m_writePipe, "Stream is not writable!"); } private void readThreadFunc() { bool loop_flag = false; runTask({ ubyte[1] buf; scope(exit) { if (m_file.isOpen) m_file.close(); m_readPipe.finalize(); if (loop_flag) exitEventLoop(); else loop_flag = true; } while (!m_file.eof) { auto data = m_file.rawRead(buf); if (!data.length) break; m_readPipe.write(data, IOMode.all); vibe.core.core.yield(); } }); if (!loop_flag) { loop_flag = true; runEventLoop(); } } private void writeThreadFunc() { import std.algorithm : min; bool loop_flag = false; runTask({ ubyte[1024] buf; scope(exit) { if (m_file.isOpen) m_file.close(); if (loop_flag) exitEventLoop(); else loop_flag = true; } while (m_file.isOpen && !m_writePipe.empty) { auto len = min(buf.length, m_writePipe.leastSize); if (!len) break; m_writePipe.read(buf[0 .. len], IOMode.all); m_file.rawWrite(buf[0 .. len]); vibe.core.core.yield(); } }); if (!loop_flag) { loop_flag = true; runEventLoop(); } } } /** OutputStream that writes to stdout */ final class StdoutStream : StdFileStream { this() { super(false, true); setup(stdout); } } /** OutputStream that writes to stderr */ final class StderrStream : StdFileStream { this() { super(false, true); setup(stderr); } } /** InputStream that reads from stdin */ final class StdinStream : StdFileStream { this() { super(true, false); setup(stdin); } } vibe.d-0.8.2/stream/vibe/stream/taskpipe.d000066400000000000000000000144451324361747700204160ustar00rootroot00000000000000/** Stream interface for passing data between different tasks. Copyright: © 2013 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.stream.taskpipe; public import vibe.core.stream; import core.sync.mutex; import core.time; import std.algorithm : min; import std.exception; import vibe.core.core; import vibe.core.sync; import vibe.utils.array; /** Implements a unidirectional data pipe between two tasks. */ final class TaskPipe : ConnectionStream { private { TaskPipeImpl m_pipe; } /** Constructs a new pipe ready for use. */ this(bool grow_when_full = false) { m_pipe = new TaskPipeImpl(grow_when_full); } /// Size of the (fixed) FIFO buffer used to transfer data between tasks @property size_t bufferSize() const { return m_pipe.bufferSize; } /// ditto @property void bufferSize(size_t nbytes) { m_pipe.bufferSize = nbytes; } @property bool empty() { return leastSize() == 0; } @property ulong leastSize() { m_pipe.waitForData(); return m_pipe.fill; } @property bool dataAvailableForRead() { return m_pipe.fill > 0; } @property bool connected() const { return m_pipe.open; } void close() { m_pipe.close(); } bool waitForData(Duration timeout) { if (dataAvailableForRead) return true; m_pipe.waitForData(timeout); return dataAvailableForRead; } const(ubyte)[] peek() { return m_pipe.peek; } size_t read(scope ubyte[] dst, IOMode mode) { return m_pipe.read(dst, mode); } alias read = ConnectionStream.read; size_t write(in ubyte[] bytes, IOMode mode) { return m_pipe.write(bytes, mode); } alias write = ConnectionStream.write; void flush() {} void finalize() { m_pipe.close(); } } /** Underyling pipe implementation for TaskPipe with no Stream interface. */ private final class TaskPipeImpl { @safe: private { Mutex m_mutex; InterruptibleTaskCondition m_condition; vibe.utils.array.FixedRingBuffer!ubyte m_buffer; bool m_closed = false; bool m_growWhenFull; } /** Constructs a new pipe ready for use. */ this(bool grow_when_full = false) { m_mutex = new Mutex; () @trusted { m_condition = new InterruptibleTaskCondition(m_mutex); } (); m_buffer.capacity = 2048; m_growWhenFull = grow_when_full; } /// Size of the (fixed) buffer used to transfer data between tasks @property size_t bufferSize() const { return m_buffer.capacity; } /// ditto @property void bufferSize(size_t nbytes) { m_buffer.capacity = nbytes; } /// Number of bytes currently in the transfer buffer @property size_t fill() const { synchronized (m_mutex) { return m_buffer.length; } } @property bool open() const { return !m_closed; } /** Closes the pipe. */ void close() { synchronized (m_mutex) m_closed = true; () @trusted { m_condition.notifyAll(); } (); } /** Blocks until at least one byte of data has been written to the pipe. */ void waitForData(Duration timeout = Duration.max) { import std.datetime : Clock, SysTime, UTC; bool have_timeout = timeout > 0.seconds && timeout != Duration.max; SysTime now = Clock.currTime(UTC()); SysTime timeout_target; if (have_timeout) timeout_target = now + timeout; synchronized (m_mutex) { while (m_buffer.empty && !m_closed && (!have_timeout || now < timeout_target)) { if (have_timeout) () @trusted { m_condition.wait(timeout_target - now); } (); else () @trusted { m_condition.wait(); } (); now = Clock.currTime(UTC()); } } } /** Writes the given byte array to the pipe. */ size_t write(const(ubyte)[] data, IOMode mode) { size_t ret = 0; enforce(!m_closed, "Writing to closed task pipe."); while (data.length > 0){ bool need_signal; synchronized (m_mutex) { if (m_growWhenFull && m_buffer.full) { size_t new_sz = m_buffer.capacity; while (new_sz - m_buffer.capacity < data.length) new_sz += 2; m_buffer.capacity = new_sz; } else while (m_buffer.full) { if (mode == IOMode.immediate || mode == IOMode.once && ret > 0) return ret; () @trusted { m_condition.wait(); } (); } need_signal = m_buffer.empty; auto len = min(m_buffer.freeSpace, data.length); m_buffer.put(data[0 .. len]); data = data[len .. $]; ret += len; } if (need_signal) () @trusted { m_condition.notifyAll(); } (); } if (!m_growWhenFull) vibe.core.core.yield(); return ret; } /** Returns a temporary view of the beginning of the transfer buffer. Note that a call to read invalidates this array slice. Blocks in case of a filled up transfer buffer. */ const(ubyte[]) peek() { synchronized (m_mutex) { return m_buffer.peek(); } } /** Reads data into the supplied buffer. Blocks until a sufficient amount of data has been written to the pipe. */ size_t read(scope ubyte[] dst, IOMode mode) { size_t ret = 0; while (dst.length > 0) { bool need_signal; size_t len; synchronized (m_mutex) { while (m_buffer.empty && !m_closed) { if (mode == IOMode.immediate || mode == IOMode.once && ret > 0) return ret; () @trusted { m_condition.wait(); } (); } need_signal = m_buffer.full; enforce(!m_buffer.empty, "Reading past end of closed pipe."); len = min(dst.length, m_buffer.length); m_buffer.read(dst[0 .. len]); ret += len; } if (need_signal) () @trusted { m_condition.notifyAll(); } (); dst = dst[len .. $]; } vibe.core.core.yield(); return ret; } } unittest { // issue #1501 - deadlock in TaskPipe import std.datetime : Clock, UTC; import core.time : msecs; // test read after write and write after read foreach (i; 0 .. 2) { auto p = new TaskPipe; p.bufferSize = 2048; Task a, b; a = runTask({ ubyte[2100] buf; if (i == 0) p.read(buf, IOMode.all); else p.write(buf, IOMode.all); }); b = runTask({ ubyte[2100] buf; if (i == 0) p.write(buf, IOMode.all); else p.read(buf, IOMode.all); }); auto joiner = runTask({ auto starttime = Clock.currTime(UTC()); while (a.running || b.running) { if (Clock.currTime(UTC()) - starttime > 500.msecs) assert(false, "TaskPipe is dead locked."); yield(); } }); joiner.join(); } } unittest { // issue # auto t = runTask({ auto tp = new TaskPipeImpl; tp.waitForData(10.msecs); exitEventLoop(); }); runTask({ sleep(500.msecs); assert(!t.running, "TaskPipeImpl.waitForData didn't timeout."); }); runEventLoop(); } vibe.d-0.8.2/stream/vibe/stream/wrapper.d000066400000000000000000000247571324361747700202650ustar00rootroot00000000000000/** Stream proxy and wrapper facilities. Copyright: © 2013-2016 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.stream.wrapper; public import vibe.core.stream; import std.algorithm : min; import std.exception; import core.time; import vibe.internal.interfaceproxy; import vibe.internal.freelistref : FreeListRef; ProxyStream createProxyStream(Stream)(Stream stream) if (isStream!Stream) { return new ProxyStream(interfaceProxy!(.Stream)(stream), true); } ProxyStream createProxyStream(InputStream, OutputStream)(InputStream input, OutputStream output) if (isInputStream!InputStream && isOutputStream!OutputStream) { return new ProxyStream(interfaceProxy!(.InputStream)(input), interfaceProxy!(.OutputStream)(output), true); } ConnectionProxyStream createConnectionProxyStream(Stream, ConnectionStream)(Stream stream, ConnectionStream connection_stream) if (isStream!Stream && isConnectionStream!ConnectionStream) { mixin validateStream!Stream; mixin validateConnectionStream!ConnectionStream; return new ConnectionProxyStream(interfaceProxy!(.Stream)(stream), interfaceProxy!(.ConnectionStream)(connection_stream), true); } /// private FreeListRef!ConnectionProxyStream createConnectionProxyStreamFL(Stream, ConnectionStream)(Stream stream, ConnectionStream connection_stream) if (isStream!Stream && isConnectionStream!ConnectionStream) { mixin validateStream!Stream; mixin validateConnectionStream!ConnectionStream; return FreeListRef!ConnectionProxyStream(interfaceProxy!(.Stream)(stream), interfaceProxy!(.ConnectionStream)(connection_stream), true); } ConnectionProxyStream createConnectionProxyStream(InputStream, OutputStream, ConnectionStream)(InputStream input, OutputStream output, ConnectionStream connection_stream) if (isInputStream!InputStream && isOutputStream!OutputStream && isConnectionStream!ConnectionStream) { return new ConnectionProxyStream(interfaceProxy!(.InputStream)(input), interfaceProxy!(.OutputStream)(output), interfaceProxy!(.ConnectionStream)(connection_stream), true); } /** Provides a way to access varying streams using a constant stream reference. */ class ProxyStream : Stream { @safe: private { InterfaceProxy!(.InputStream) m_input; InterfaceProxy!(.OutputStream) m_output; InterfaceProxy!(.Stream) m_underlying; } deprecated("Use createProxyStream instead.") this(Stream stream = null) { m_underlying = interfaceProxy!Stream(stream); m_input = interfaceProxy!InputStream(stream); m_output = interfaceProxy!OutputStream(stream); } deprecated("Use createProxyStream instead.") this(InputStream input, OutputStream output) { m_input = interfaceProxy!InputStream(input); m_output = interfaceProxy!OutputStream(output); } /// private this(InterfaceProxy!Stream stream, bool dummy) { m_underlying = stream; m_input = stream; m_output = stream; } /// private this(InterfaceProxy!InputStream input, InterfaceProxy!OutputStream output, bool dummy) { m_input = input; m_output = output; } /// The stream that is wrapped by this one @property inout(InterfaceProxy!Stream) underlying() inout { return m_underlying; } /// ditto @property void underlying(InterfaceProxy!Stream value) { m_underlying = value; m_input = value; m_output = value; } /// ditto static if (!is(Stream == InterfaceProxy!Stream)) @property void underlying(Stream value) { this.underlying = interfaceProxy!Stream(value); } @property bool empty() { return m_input ? m_input.empty : true; } @property ulong leastSize() { return m_input ? m_input.leastSize : 0; } @property bool dataAvailableForRead() { return m_input ? m_input.dataAvailableForRead : false; } const(ubyte)[] peek() { return m_input.peek(); } size_t read(scope ubyte[] dst, IOMode mode) { return m_input.read(dst, mode); } alias read = Stream.read; size_t write(in ubyte[] bytes, IOMode mode) { return m_output.write(bytes, mode); } alias write = Stream.write; void flush() { m_output.flush(); } void finalize() { m_output.finalize(); } } /** Special kind of proxy stream for streams nested in a ConnectionStream. This stream will forward all stream operations to the selected stream, but will forward all connection related operations to the given ConnectionStream. This allows wrapping embedded streams, such as SSL streams in a ConnectionStream. */ class ConnectionProxyStream : ConnectionStream { @safe: private { InterfaceProxy!ConnectionStream m_connection; InterfaceProxy!Stream m_underlying; InterfaceProxy!InputStream m_input; InterfaceProxy!OutputStream m_output; } deprecated("Use createConnectionProxyStream instead.") this(Stream stream, ConnectionStream connection_stream) { this(interfaceProxy!Stream(stream), interfaceProxy!ConnectionStream(connection_stream), true); } deprecated("Use createConnectionProxyStream instead.") this(InputStream input, OutputStream output, ConnectionStream connection_stream) { this(interfaceProxy!InputStream(input), interfaceProxy!OutputStream(output), interfaceProxy!ConnectionStream(connection_stream), true); } /// private this(InterfaceProxy!Stream stream, InterfaceProxy!ConnectionStream connection_stream, bool dummy) { assert(!!stream); m_underlying = stream; m_input = stream; m_output = stream; m_connection = connection_stream; } /// private this(InterfaceProxy!InputStream input, InterfaceProxy!OutputStream output, InterfaceProxy!ConnectionStream connection_stream, bool dummy) { m_input = input; m_output = output; m_connection = connection_stream; } @property bool connected() const { if (!m_connection) return true; return m_connection.connected; } void close() { if (!m_connection) return; if (m_connection.connected) finalize(); m_connection.close(); } bool waitForData(Duration timeout = 0.seconds) { if (this.dataAvailableForRead) return true; if (!m_connection) return timeout == 0.seconds ? !this.empty : false; return m_connection.waitForData(timeout); } /// The stream that is wrapped by this one @property inout(InterfaceProxy!Stream) underlying() inout { return m_underlying; } /// ditto @property void underlying(InterfaceProxy!Stream value) { m_underlying = value; m_input = value; m_output = value; } /// ditto static if (!is(Stream == InterfaceProxy!Stream)) @property void underlying(Stream value) { this.underlying = InterfaceProxy!Stream(value); } @property bool empty() { return m_input ? m_input.empty : true; } @property ulong leastSize() { return m_input ? m_input.leastSize : 0; } @property bool dataAvailableForRead() { return m_input ? m_input.dataAvailableForRead : false; } const(ubyte)[] peek() { return m_input.peek(); } size_t read(scope ubyte[] dst, IOMode mode) { return m_input.read(dst, mode); } alias read = ConnectionStream.read; size_t write(in ubyte[] bytes, IOMode mode) { return m_output.write(bytes, mode); } alias write = ConnectionStream.write; void flush() { m_output.flush(); } void finalize() { m_output.finalize(); } } /** Implements an input range interface on top of an InputStream using an internal buffer. The buffer is GC allocated and is filled chunk wise. Thus an InputStream that has been wrapped in a StreamInputRange cannot be used reliably on its own anymore. Reading occurs in a fully lazy fashion. The first call to either front, popFront or empty will potentially trigger waiting for the next chunk of data to arrive - but especially popFront will not wait if it was called after a call to front. This property allows the range to be used in request-response scenarios. */ struct StreamInputRange { @safe: private { struct Buffer { ubyte[256] data = void; size_t fill = 0; } InputStream m_stream; Buffer* m_buffer; } this (InputStream stream) { m_stream = stream; m_buffer = new Buffer; } @property bool empty() { return !m_buffer.fill && m_stream.empty; } ubyte front() { if (m_buffer.fill < 1) readChunk(); return m_buffer.data[$ - m_buffer.fill]; } void popFront() { assert(!empty); if (m_buffer.fill < 1) readChunk(); m_buffer.fill--; } private void readChunk() { auto sz = min(m_stream.leastSize, m_buffer.data.length); assert(sz > 0); m_stream.read(m_buffer.data[$-sz .. $]); m_buffer.fill = sz; } } /** Implements a buffered output range interface on top of an OutputStream. */ StreamOutputRange!OutputStream StreamOutputRange()(OutputStream stream) { return StreamOutputRange!OutputStream(stream); } /// ditto struct StreamOutputRange(OutputStream, size_t buffer_size = 256) if (isOutputStream!OutputStream) { @safe: private { OutputStream m_stream; size_t m_fill = 0; ubyte[buffer_size] m_data = void; } @disable this(this); this(OutputStream stream) { m_stream = stream; } ~this() { flush(); } void flush() { if (m_fill == 0) return; m_stream.write(m_data[0 .. m_fill]); m_fill = 0; } void drop() { m_fill = 0; } void put(ubyte bt) { m_data[m_fill++] = bt; if (m_fill >= m_data.length) flush(); } void put(const(ubyte)[] bts) { // avoid writing more chunks than necessary if (bts.length + m_fill >= m_data.length * 2) { flush(); m_stream.write(bts); return; } while (bts.length) { auto len = min(m_data.length - m_fill, bts.length); m_data[m_fill .. m_fill + len] = bts[0 .. len]; m_fill += len; bts = bts[len .. $]; if (m_fill >= m_data.length) flush(); } } void put(char elem) { put(cast(ubyte)elem); } void put(const(char)[] elems) { put(cast(const(ubyte)[])elems); } void put(dchar elem) { import std.utf; char[4] chars; auto len = encode(chars, elem); put(chars[0 .. len]); } void put(const(dchar)[] elems) { foreach( ch; elems ) put(ch); } } /// ditto auto streamOutputRange(size_t buffer_size = 256, OutputStream)(OutputStream stream) if (isOutputStream!OutputStream) { return StreamOutputRange!(OutputStream, buffer_size)(stream); } unittest { static long writeLength(ARGS...)(ARGS args) { import vibe.stream.memory; auto dst = createMemoryOutputStream; { auto rng = StreamOutputRange(dst); foreach (a; args) rng.put(a); } return dst.data.length; } assert(writeLength("hello", ' ', "world") == "hello world".length); assert(writeLength("h\u00E4llo", ' ', "world") == "h\u00E4llo world".length); assert(writeLength("hello", '\u00E4', "world") == "hello\u00E4world".length); assert(writeLength("h\u1000llo", '\u1000', "world") == "h\u1000llo\u1000world".length); auto test = "häl"; assert(test.length == 4); assert(writeLength(test[0], test[1], test[2], test[3]) == test.length); } vibe.d-0.8.2/stream/vibe/stream/zlib.d000066400000000000000000000272561324361747700175420ustar00rootroot00000000000000/** Zlib input/output streams Copyright: © 2012-2013 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.stream.zlib; import vibe.core.stream; import vibe.utils.array; import vibe.internal.freelistref; import vibe.internal.interfaceproxy : InterfaceProxy, interfaceProxy; import std.algorithm; import std.exception; import etc.c.zlib; import vibe.core.log; /** Creates a new deflate uncompression stream. */ ZlibInputStream createDeflateInputStream(InputStream)(InputStream source) @safe if (isInputStream!InputStream) { return new ZlibInputStream(interfaceProxy!(.InputStream)(source), ZlibInputStream.HeaderFormat.deflate, true); } /// private FreeListRef!ZlibInputStream createDeflateInputStreamFL(InputStream)(InputStream source) @safe if (isInputStream!InputStream) { return FreeListRef!ZlibInputStream(interfaceProxy!(.InputStream)(source), ZlibInputStream.HeaderFormat.deflate, true); } /** Creates a new deflate compression stream. */ ZlibOutputStream createDeflateOutputStream(OutputStream)(OutputStream destination) @safe if (isOutputStream!OutputStream) { return new ZlibOutputStream(interfaceProxy!(.OutputStream)(destination), ZlibOutputStream.HeaderFormat.deflate, Z_DEFAULT_COMPRESSION, true); } /// private FreeListRef!ZlibOutputStream createDeflateOutputStreamFL(OutputStream)(OutputStream destination) @safe if (isOutputStream!OutputStream) { return FreeListRef!ZlibOutputStream(interfaceProxy!(.OutputStream)(destination), ZlibOutputStream.HeaderFormat.deflate, Z_DEFAULT_COMPRESSION, true); } /** Creates a new deflate uncompression stream. */ ZlibInputStream createGzipInputStream(InputStream)(InputStream source) @safe if (isInputStream!InputStream) { return new ZlibInputStream(interfaceProxy!(.InputStream)(source), ZlibInputStream.HeaderFormat.gzip, true); } /// private FreeListRef!ZlibInputStream createGzipInputStreamFL(InputStream)(InputStream source) @safe if (isInputStream!InputStream) { return FreeListRef!ZlibInputStream(interfaceProxy!(.InputStream)(source), ZlibInputStream.HeaderFormat.gzip, true); } /** Creates a new deflate uncompression stream. */ ZlibOutputStream createGzipOutputStream(OutputStream)(OutputStream destination) @safe if (isOutputStream!OutputStream) { return new ZlibOutputStream(interfaceProxy!(.OutputStream)(destination), ZlibOutputStream.HeaderFormat.gzip, Z_DEFAULT_COMPRESSION, true); } /// private FreeListRef!ZlibOutputStream createGzipOutputStreamFL(OutputStream)(OutputStream destination) @safe if (isOutputStream!OutputStream) { return FreeListRef!ZlibOutputStream(interfaceProxy!(.OutputStream)(destination), ZlibOutputStream.HeaderFormat.gzip, Z_DEFAULT_COMPRESSION, true); } /** Writes any data compressed in deflate format to the specified output stream. */ deprecated("Use createDeflateOutputStream instead.") final class DeflateOutputStream : ZlibOutputStream { @safe this(OutputStream dst) { super(dst, HeaderFormat.deflate); } } /** Writes any data compressed in gzip format to the specified output stream. */ deprecated("Use createGzipOutputStream instead.") final class GzipOutputStream : ZlibOutputStream { @safe this(OutputStream dst) { super(dst, HeaderFormat.gzip); } } /** Generic zlib output stream. */ class ZlibOutputStream : OutputStream { @safe: private { InterfaceProxy!OutputStream m_out; z_stream m_zstream; ubyte[1024] m_outbuffer; //ubyte[4096] m_inbuffer; bool m_finalized = false; } enum HeaderFormat { gzip, deflate } deprecated("Use createGzipOutputStream/createDeflateOutputStream instead.") this(OutputStream dst, HeaderFormat type, int level = Z_DEFAULT_COMPRESSION) { this(interfaceProxy!OutputStream(dst), type, level, true); } /// private this(InterfaceProxy!OutputStream dst, HeaderFormat type, int level, bool dummy) { m_out = dst; zlibEnforce(() @trusted { return deflateInit2(&m_zstream, level, Z_DEFLATED, 15 + (type == HeaderFormat.gzip ? 16 : 0), 8, Z_DEFAULT_STRATEGY); } ()); } ~this() { if (!m_finalized) () @trusted { deflateEnd(&m_zstream); } (); } final size_t write(in ubyte[] data, IOMode mode) { // TODO: support IOMode! if (!data.length) return 0; assert(!m_finalized); assert(m_zstream.avail_in == 0); m_zstream.next_in = () @trusted { return cast(ubyte*)data.ptr; } (); assert(data.length < uint.max); m_zstream.avail_in = cast(uint)data.length; doFlush(Z_NO_FLUSH); assert(m_zstream.avail_in == 0); m_zstream.next_in = null; return data.length; } alias write = OutputStream.write; final void flush() { assert(!m_finalized); //doFlush(Z_SYNC_FLUSH); m_out.flush(); } final void finalize() { if (m_finalized) return; m_finalized = true; doFlush(Z_FINISH); m_out.flush(); zlibEnforce(() @trusted { return deflateEnd(&m_zstream); }()); } private final void doFlush(int how) @safe { while (true) { m_zstream.next_out = &m_outbuffer[0]; m_zstream.avail_out = cast(uint)m_outbuffer.length; //logInfo("deflate %s -> %s (%s)", m_zstream.avail_in, m_zstream.avail_out, how); auto ret = () @trusted { return deflate(&m_zstream, how); } (); //logInfo(" ... %s -> %s", m_zstream.avail_in, m_zstream.avail_out); switch (ret) { default: zlibEnforce(ret); assert(false, "Unknown return value for zlib deflate."); case Z_OK: assert(m_zstream.avail_out < m_outbuffer.length || m_zstream.avail_in == 0); m_out.write(m_outbuffer[0 .. m_outbuffer.length - m_zstream.avail_out]); break; case Z_BUF_ERROR: assert(m_zstream.avail_in == 0); return; case Z_STREAM_END: assert(how == Z_FINISH); m_out.write(m_outbuffer[0 .. m_outbuffer.length - m_zstream.avail_out]); return; } } } } /** Takes an input stream that contains data in deflate compressed format and outputs the uncompressed data. */ deprecated("Use createDeflateInputStream instead.") class DeflateInputStream : ZlibInputStream { @safe this(InputStream dst) { super(dst, HeaderFormat.deflate); } } /** Takes an input stream that contains data in gzip compressed format and outputs the uncompressed data. */ deprecated("Use createGzipInputStream instead.") class GzipInputStream : ZlibInputStream { this(InputStream dst) @safe { super(dst, HeaderFormat.gzip); } } unittest { import vibe.stream.memory; import vibe.stream.operations; auto raw = cast(ubyte[])"Hello, World!\n".dup; ubyte[] gzip = [ 0x1F, 0x8B, 0x08, 0x08, 0xAF, 0x12, 0x42, 0x56, 0x00, 0x03, 0x74, 0x65, 0x73, 0x74, 0x2E, 0x74, 0x78, 0x74, 0x00, 0xF3, 0x48, 0xCD, 0xC9, 0xC9, 0xD7, 0x51, 0x08, 0xCF, 0x2F, 0xCA, 0x49, 0x51, 0xE4, 0x02, 0x00, 0x84, 0x9E, 0xE8, 0xB4, 0x0E, 0x00, 0x00, 0x00]; auto gzipin = createGzipInputStream(createMemoryStream(gzip)); assert(gzipin.readAll() == raw); } unittest { import vibe.stream.memory; import vibe.stream.operations; ubyte[] gzip_partial = [ 0x1F, 0x8B, 0x08, 0x08, 0xAF, 0x12, 0x42, 0x56, 0x00, 0x03, 0x74, 0x65, 0x73, 0x74, 0x2E, 0x74, 0x78, 0x74, 0x00, 0xF3, 0x48, 0xCD, 0xC9, 0xC9, 0xD7, 0x51, 0x08, 0xCF, 0x2F, 0xCA, 0x49, 0x51, ]; auto gzipin = createGzipInputStream(createMemoryStream(gzip_partial)); try { gzipin.readAll(); assert(false, "Expected exception."); } catch (Exception e) {} assert(gzipin.empty); } /** Generic zlib input stream. */ class ZlibInputStream : InputStream { @safe: import std.zlib; private { InterfaceProxy!InputStream m_in; z_stream m_zstream; FixedRingBuffer!(ubyte, 4096) m_outbuffer; ubyte[1024] m_inbuffer; bool m_finished = false; ulong m_ninflated, n_read; } enum HeaderFormat { gzip, deflate, automatic } deprecated("Use createGzipInputStream/createDeflateInputStream instead.") this(InputStream src, HeaderFormat type) { this(interfaceProxy!InputStream(src), type, true); } /// private this(InterfaceProxy!InputStream src, HeaderFormat type, bool dummy) { m_in = src; if (m_in.empty) { m_finished = true; } else { int wndbits = 15; if(type == HeaderFormat.gzip) wndbits += 16; else if(type == HeaderFormat.automatic) wndbits += 32; zlibEnforce(() @trusted { return inflateInit2(&m_zstream, wndbits); } ()); readChunk(); } } ~this() { if (!m_finished) () @trusted { inflateEnd(&m_zstream); } (); } @property bool empty() { return this.leastSize == 0; } @property ulong leastSize() { assert(!m_finished || m_in.empty, "Input contains more data than expected."); if (m_outbuffer.length > 0) return m_outbuffer.length; if (m_finished) return 0; readChunk(); assert(m_outbuffer.length || m_finished); return m_outbuffer.length; } @property bool dataAvailableForRead() { return m_outbuffer.length > 0; } const(ubyte)[] peek() { return m_outbuffer.peek(); } size_t read(scope ubyte[] dst, IOMode mode) { enforce(dst.length == 0 || !empty, "Reading empty stream"); size_t nread = 0; while (dst.length > 0) { auto len = min(m_outbuffer.length, dst.length); m_outbuffer.read(dst[0 .. len]); dst = dst[len .. $]; nread += len; if (!m_outbuffer.length && !m_finished) { if (mode == IOMode.immediate || mode == IOMode.once && !nread) break; readChunk(); } enforce(dst.length == 0 || m_outbuffer.length || !m_finished, "Reading past end of zlib stream."); } return nread; } alias read = InputStream.read; private void readChunk() @safe { assert(m_outbuffer.length == 0, "Buffer must be empty to read the next chunk."); assert(m_outbuffer.peekDst().length > 0); enforce (!m_finished, "Reading past end of zlib stream."); m_zstream.next_out = &m_outbuffer.peekDst()[0]; m_zstream.avail_out = cast(uint)m_outbuffer.peekDst().length; while (!m_outbuffer.length) { if (m_zstream.avail_in == 0) { auto clen = min(m_inbuffer.length, m_in.leastSize); if (clen == 0) { m_finished = true; throw new Exception("Premature end of compressed input."); } m_in.read(m_inbuffer[0 .. clen]); m_zstream.next_in = &m_inbuffer[0]; m_zstream.avail_in = cast(uint)clen; } auto avins = m_zstream.avail_in; //logInfo("inflate %s -> %s (@%s in @%s)", m_zstream.avail_in, m_zstream.avail_out, m_ninflated, n_read); auto ret = zlibEnforce(() @trusted { return inflate(&m_zstream, Z_SYNC_FLUSH); } ()); //logInfo(" ... %s -> %s", m_zstream.avail_in, m_zstream.avail_out); assert(m_zstream.avail_out != m_outbuffer.peekDst.length || m_zstream.avail_in != avins); m_ninflated += m_outbuffer.peekDst().length - m_zstream.avail_out; n_read += avins - m_zstream.avail_in; m_outbuffer.putN(m_outbuffer.peekDst().length - m_zstream.avail_out); assert(m_zstream.avail_out == 0 || m_zstream.avail_out == m_outbuffer.peekDst().length); if (ret == Z_STREAM_END) { m_finished = true; zlibEnforce(() @trusted { return inflateEnd(&m_zstream); }()); assert(m_in.empty, "Input expected to be empty at this point."); return; } } } } unittest { import vibe.stream.memory; auto data = new ubyte[5000]; auto mos = createMemoryOutputStream(); auto gos = createGzipOutputStream(mos); gos.write(data); gos.finalize(); auto ms = createMemoryStream(mos.data, false); auto gis = createGzipInputStream(ms); auto result = new ubyte[data.length]; gis.read(result); assert(data == result); } private int zlibEnforce(int result) @safe { switch (result) { default: if (result < 0) throw new Exception("unknown zlib error"); else return result; case Z_ERRNO: throw new Exception("zlib errno error"); case Z_STREAM_ERROR: throw new Exception("zlib stream error"); case Z_DATA_ERROR: throw new Exception("zlib data error"); case Z_MEM_ERROR: throw new Exception("zlib memory error"); case Z_BUF_ERROR: throw new Exception("zlib buffer error"); case Z_VERSION_ERROR: throw new Exception("zlib version error"); } } vibe.d-0.8.2/tests/000077500000000000000000000000001324361747700140505ustar00rootroot00000000000000vibe.d-0.8.2/tests/args/000077500000000000000000000000001324361747700150045ustar00rootroot00000000000000vibe.d-0.8.2/tests/args/dub.json000066400000000000000000000003051324361747700164470ustar00rootroot00000000000000{ "name": "tests", "description": "Command-line argument test", "dependencies": { "vibe-d": {"version": "~master", "path": "../../"} }, "versions": ["VibeCustomMain"] } vibe.d-0.8.2/tests/args/source/000077500000000000000000000000001324361747700163045ustar00rootroot00000000000000vibe.d-0.8.2/tests/args/source/app.d000066400000000000000000000003721324361747700172330ustar00rootroot00000000000000module app; import vibe.core.args; import vibe.core.log; import std.stdio; shared static this() { string argtest; readOption("argtest", &argtest, "Test argument"); writeln("argtest=", argtest); } void main() { finalizeCommandLineOptions(); } vibe.d-0.8.2/tests/args/test.sh000077500000000000000000000010331324361747700163170ustar00rootroot00000000000000#!/bin/bash set -e die() { echo "$@" 1>&2 ; exit 1; } if [ "${OS}" == "win32" -o "${OS}" == "Windows_NT" ]; then VIBE='cmd /C tests' else VIBE=./tests fi ( $VIBE | grep -q '^argtest=$' ) || die "Fail (no argument)" ( $VIBE -- --argtest=aoeu | grep -q '^argtest=aoeu$' ) || die "Fail (with argument)" ( $VIBE -- --argtest=aoeu --DRT-gcopt=profile:1 | grep -q '^argtest=aoeu$' ) || die "Fail (with argument)" ( ( ! $VIBE -- --inexisting 2>&1 ) | grep -qF 'Unrecognized command line option' ) || die "Fail (unknown argument)" echo 'OK' vibe.d-0.8.2/tests/dirwatcher/000077500000000000000000000000001324361747700162045ustar00rootroot00000000000000vibe.d-0.8.2/tests/dirwatcher/.gitignore000066400000000000000000000000461324361747700201740ustar00rootroot00000000000000.dub docs.json __dummy.html *.o *.obj vibe.d-0.8.2/tests/dirwatcher/dub.json000066400000000000000000000002711324361747700176510ustar00rootroot00000000000000{ "name": "tests", "description": "Test for vibe.d's DirectoryWatcher.", "dependencies": { "vibe-d": {"version": "~master", "path": "../../"} }, "versions": ["VibeCustomMain"] } vibe.d-0.8.2/tests/dirwatcher/source/000077500000000000000000000000001324361747700175045ustar00rootroot00000000000000vibe.d-0.8.2/tests/dirwatcher/source/app.d000066400000000000000000000047451324361747700204430ustar00rootroot00000000000000import vibe.vibe; import std.file, std.process; import std.algorithm : canFind, all; import std.typecons : No, Yes; void runTest() { auto dir = buildPath(tempDir, format("dirwatcher_test_%d", thisProcessID())); mkdir(dir); scope(exit) rmdirRecurse(dir); DirectoryWatcher watcher; try watcher = Path(dir).watchDirectory(No.recursive); catch (AssertError e) { logInfo("DirectoryWatcher not yet implemented. Skipping test."); return; } DirectoryChange[] changes; assert(!watcher.readChanges(changes, 500.msecs)); auto foo = dir.buildPath("foo"); alias Type = DirectoryChangeType; static DirectoryChange dc(Type t, string p) { return DirectoryChange(t, Path(p)); } void check(DirectoryChange[] expected) { sleep(100.msecs); assert(watcher.readChanges(changes, 100.msecs), "Could not read changes for " ~ expected.to!string); assert(expected.all!((a)=> changes.canFind(a))(), "Change is not what was expected, got: " ~ changes.to!string ~ " but expected: " ~ expected.to!string); assert(!watcher.readChanges(changes, 0.msecs), "Changes were returned when they shouldn't have, for " ~ expected.to!string); } write(foo, null); check([dc(Type.added, foo)]); sleep(1.seconds); // OSX has a second resolution on file modification times write(foo, [0, 1]); check([dc(Type.modified, foo)]); remove(foo); check([dc(Type.removed, foo)]); write(foo, null); sleep(1.seconds); write(foo, [0, 1]); sleep(100.msecs); remove(foo); check([dc(Type.added, foo), dc(Type.modified, foo), dc(Type.removed, foo)]); auto subdir = dir.buildPath("subdir"); mkdir(subdir); check([dc(Type.added, subdir)]); auto bar = subdir.buildPath("bar"); write(bar, null); assert(!watcher.readChanges(changes, 100.msecs)); remove(bar); watcher = Path(dir).watchDirectory(Yes.recursive); write(foo, null); sleep(1.seconds); write(foo, [0, 1]); sleep(100.msecs); remove(foo); write(bar, null); sleep(1.seconds); write(bar, [0, 1]); sleep(100.msecs); remove(bar); check([dc(Type.added, foo), dc(Type.modified, foo), dc(Type.removed, foo), dc(Type.added, bar), dc(Type.modified, bar), dc(Type.removed, bar)]); write(foo, null); sleep(100.msecs); rename(foo, bar); sleep(100.msecs); remove(bar); check([dc(Type.added, foo), dc(Type.removed, foo), dc(Type.added, bar), dc(Type.removed, bar)]); } int main() { int ret = 0; runTask({ try runTest(); catch (Throwable th) { logError("Test failed: %s", th.toString()); ret = 1; } finally exitEventLoop(true); }); runEventLoop(); return ret; } vibe.d-0.8.2/tests/mongodb/000077500000000000000000000000001324361747700154755ustar00rootroot00000000000000vibe.d-0.8.2/tests/mongodb/dub.json000066400000000000000000000002771324361747700171500ustar00rootroot00000000000000{ "name": "tests", "description": "High level MongoDB test for vibe.d", "dependencies": { "vibe-d:mongodb": {"path": "../../"} }, "versions": ["VibeCustomMain"] } vibe.d-0.8.2/tests/mongodb/source/000077500000000000000000000000001324361747700167755ustar00rootroot00000000000000vibe.d-0.8.2/tests/mongodb/source/app.d000066400000000000000000000042031324361747700177210ustar00rootroot00000000000000/// Requires mongo service running on localhost with default port /// Uses test database module app; import vibe.core.core; import vibe.core.log; import vibe.db.mongo.mongo; import std.algorithm : canFind, map, equal; import std.encoding : sanitize; void runTest() { MongoClient client; try client = connectMongoDB("localhost"); catch (Exception e) { logInfo("Failed to connect to local MongoDB server. Skipping test."); Throwable th = e; while (th) { logDiagnostic("Error: %s", th.toString().sanitize); th = th.next; } return; } auto coll = client.getCollection("test.collection"); assert(coll.database.getLastError().code < 0); assert(coll.name == "collection"); assert(coll.database.name == "test"); coll.remove(); coll.insert([ "key1" : "value1", "key2" : "value2"]); coll.update(["key1" : "value1"], [ "key1" : "value1", "key2" : "1337"]); assert(coll.database.getLastError().n == 1); auto data = coll.findOne(["key1" : "value1"]); assert(!data.isNull()); assert(data["key2"].get!string() == "1337"); coll.database.fsync(); auto logBson = client.getDatabase("admin").getLog("global"); assert(!logBson.isNull()); // testing cursor range interface coll.remove(); coll.insert(["key1" : "value1"]); coll.insert(["key1" : "value2"]); coll.insert(["key1" : "value2"]); auto data1 = coll.find(["key1" : "value1"]); auto data2 = coll.find(["key1" : "value2"]); import std.range; auto converted = zip(data1, data2).map!( a => a[0]["key1"].get!string() ~ a[1]["key1"].get!string() )(); assert(!converted.empty); assert(converted.front == "value1value2"); auto names = client.getDatabases().map!(dbs => dbs.name).array; assert(names.canFind("test")); assert(names.canFind("local")); // test distinct() coll.drop(); coll.insert(["a": "first", "b": "foo"]); coll.insert(["a": "first", "b": "bar"]); coll.insert(["a": "first", "b": "bar"]); coll.insert(["a": "second", "b": "baz"]); coll.insert(["a": "second", "b": "bam"]); assert(coll.distinct!string("b", ["a": "first"]).equal(["foo", "bar"])); } int main() { int ret = 0; runTask({ try runTest(); finally exitEventLoop(true); }); runEventLoop(); return ret; } vibe.d-0.8.2/tests/not-runnable/000077500000000000000000000000001324361747700164545ustar00rootroot00000000000000vibe.d-0.8.2/tests/not-runnable/vibe.http.websocket-autobahn-client/000077500000000000000000000000001324361747700254175ustar00rootroot00000000000000vibe.d-0.8.2/tests/not-runnable/vibe.http.websocket-autobahn-client/.gitignore000066400000000000000000000001011324361747700273770ustar00rootroot00000000000000websockets-autobahn-client .dub docs.json __dummy.html *.o *.obj vibe.d-0.8.2/tests/not-runnable/vibe.http.websocket-autobahn-client/dub.json000066400000000000000000000002111324361747700270560ustar00rootroot00000000000000{ "name": "websockets-autobahn-client", "dependencies": { "vibe-d": { "path": "../../" } }, "versions": [ "VibeDefaultMain" ] } vibe.d-0.8.2/tests/not-runnable/vibe.http.websocket-autobahn-client/source/000077500000000000000000000000001324361747700267175ustar00rootroot00000000000000vibe.d-0.8.2/tests/not-runnable/vibe.http.websocket-autobahn-client/source/app.d000066400000000000000000000017321324361747700276470ustar00rootroot00000000000000import vibe.d; shared static this () { runTask(() => runTestSuite()); } void runTestSuite () { auto count = getCaseCount(); logInfo("We're going to run %d test cases...", count); foreach (currCase; 1 .. count) { auto url = URL("ws://127.0.0.1:9001/runCase?agent=vibe.d&case=" ~ to!string(currCase)); logInfo("Running test case %d/%d", currCase, count); connectWebSocket( url, (scope ws) { while (ws.waitForData) { ws.receive((scope message) { ws.send(message.readAll); }); } }); } } size_t getCaseCount (string base_addr = "ws://127.0.0.1:9001") { size_t ret; auto url = URL(base_addr ~ "/getCaseCount"); connectWebSocket( url, (scope ws) { while (ws.waitForData) { ret = ws.receiveText.to!size_t; } }); return ret; } vibe.d-0.8.2/tests/redis/000077500000000000000000000000001324361747700151565ustar00rootroot00000000000000vibe.d-0.8.2/tests/redis/dub.json000066400000000000000000000002731324361747700166250ustar00rootroot00000000000000{ "name": "tests", "description": "High level Redis test for vibe.d", "dependencies": { "vibe-d:redis": {"path": "../../"} }, "versions": ["VibeCustomMain"] } vibe.d-0.8.2/tests/redis/source/000077500000000000000000000000001324361747700164565ustar00rootroot00000000000000vibe.d-0.8.2/tests/redis/source/app.d000066400000000000000000000113041324361747700174020ustar00rootroot00000000000000/// Requires redis service running on localhost with default port module app; import vibe.core.core; import vibe.core.log; import vibe.db.redis.redis; import core.time; import std.algorithm : sort, equal; import std.exception : assertThrown; void runTest() { //setLogLevel(LogLevel.trace); /* open a redis server locally to run these tests * Windows download link: https://github.com/MSOpenTech/redis/releases * Linux: use "yum install redis" on RHEL or "apt-get install redis" on Debian-like */ RedisClient redis; try redis = new RedisClient(); catch (Exception) { logInfo("Failed to connect to local Redis server. Skipping test."); return; } { auto db = redis.getDatabase(0); db.deleteAll(); assert(db.setNX("setNXTest","foo", 30.seconds)); assert(!db.setNX("setNXTest","foo", 30.seconds)); assert(db.setNX("setNXTest2","foo")); assert(!db.setNX("setNXTest2","foo")); assert(db.setXX("setNXTest2","foo")); assert(!db.setXX("setXXTestNegative","foo")); db.setEX("test1", 1000, "test1"); db.setEX("test2", 1000, "test2"); db.setEX("test3", 1000, "test3"); db.setEX("test4", 1000, "test4"); db.setEX("test5", 1000, "test5"); db.setEX("test6", 1000, "test6"); db.setEX("test7", 1000, "test7"); db.setEX("test8", 1000, "test8"); db.setEX("test9", 1000, "test9"); db.setEX("test10", 1000, "0"); assert(db.get("test1") == "test1"); assert(db.get("test2") == "test2"); assert(db.get("test3") == "test3"); assert(db.get("test4") == "test4"); assert(db.get("test5") == "test5"); assert(db.get("test6") == "test6"); assert(db.get("test7") == "test7"); assert(db.get("test8") == "test8"); assert(db.get("test9") == "test9"); assert(db.get("test10") == "0"); db.del("saddTests"); db.sadd("saddTests", "item1"); db.sadd("saddTests", "item2"); assert(sort(db.smembers("saddTests").array).equal(["item1", "item2"])); db.zadd("zaddTests", 0.5, "a", 1.0, "b", 2.0, "c", 1.5, "d"); assert(db.zrangeByScore("zaddTests", 0.5, 1.5).equal(["a", "b", "d"])); assert(db.zrangeByScore!(string, "()")("zaddTests", 0.5, 1.5).equal(["b"])); assert(db.zrangeByScore!(string, "[)")("zaddTests", 0.5, 1.5).equal(["a", "b"])); assert(db.zrangeByScore!(string, "(]")("zaddTests", 0.5, 1.5).equal(["b", "d"])); db.append("test1", "test1append"); db.append("test2", "test2append"); assert(db.get!string("test1") == "test1test1append"); assert(db.get!string("test2") == "test2test2append"); db.incr("test10"); assert(db.get!long("test10") == 1); db.del("test1", "test2","test3","test4","test5","test6","test7","test8","test9","test10"); db.del("saddTests", "zaddTests"); db.srem("test1", "test1append"); db.srem("test2", "test2append"); assert(db.smembers("test1").empty); assert(db.smembers("test2").empty); assert(!db.smembers("test1").hasNext()); // test blpop assert(db.blpop("nonexistent", 1).isNull()); db.lpush("test_list", "foo"); assert(db.blpop("test_list", 1).get() == tuple("test_list", "foo")); db.del("test_list"); } testLocking(redis.getDatabase(0)); RedisSubscriber sub; { RedisSubscriber scoped = redis.createSubscriber(); sub = scoped; sleep(50.msecs); } import std.datetime; assert(!sub.isListening); sub.listen((string channel, string msg){ logInfo("LISTEN Recv Channel: %s, Message: %s", channel, msg); logInfo("LISTEN Recv Time: %s", Clock.currTime()); }); assert(sub.isListening); sub.subscribe("SomeChannel"); sub.subscribe("SomeChannel"); sub.subscribe("SomeChannel"); sleep(100.msecs); redis.getDatabase(0).publish("SomeChannel", "Messageeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"); logInfo("PUBLISH Sent: %s", Clock.currTime()); sleep(100.msecs); sub.unsubscribe("SomeChannel"); sub.unsubscribe("SomeChannel"); sub.unsubscribe("SomeChannel"); sub.bstop(); logInfo("LISTEN Stopped"); assert(!sub.isListening); redis.getDatabase(0).publish("SomeChannel", "Messageeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"); assertThrown(redis.getDatabase(0).eval("foo!!!", null)); assert(redis.getDatabase(0).get("test1") == ""); logInfo("Redis Test Succeeded."); } void testLocking(RedisDatabase _db) { logInfo("run lock test..."); import vibe.db.redis.idioms; auto lock = RedisLock(_db,"lock_key"); auto testMethod = { foreach(i; 0..100) { lock.performLocked({ assert(_db.setNX("lockedWriteTest","foo")); assert(1 == _db.del("lockedWriteTest")); }); } }; auto t1 = runTask(testMethod); auto t2 = runTask(testMethod); t1.join(); t2.join(); logInfo("lock test finished"); } int main() { int ret = 0; runTask({ try runTest(); catch (Throwable th) { logError("Test failed: %s", th.msg); logDiagnostic("Full error: %s", th); ret = 1; } finally exitEventLoop(true); }); runEventLoop(); return ret; } vibe.d-0.8.2/tests/rest/000077500000000000000000000000001324361747700150255ustar00rootroot00000000000000vibe.d-0.8.2/tests/rest/dub.json000066400000000000000000000002051324361747700164670ustar00rootroot00000000000000{ "name": "tests", "dependencies": { "vibe-d": {"version": "~master", "path": "../../"} }, "versions": ["VibeDefaultMain"] }vibe.d-0.8.2/tests/rest/source/000077500000000000000000000000001324361747700163255ustar00rootroot00000000000000vibe.d-0.8.2/tests/rest/source/app.d000066400000000000000000000437611324361747700172650ustar00rootroot00000000000000/* This example module consists from several small example REST interfaces. * Features are not grouped by topic but by common their are needed. Each example * introduces few new more advanced features. Sometimes registration code in module constructor * is also important, it is then mentioned in example comment explicitly. */ import vibe.appmain; import vibe.core.core; import vibe.core.log; import vibe.data.json; import vibe.http.router; import vibe.http.server; import vibe.web.rest; import std.typecons : Nullable; import core.time; /* --------- EXAMPLE 1 ---------- */ /* Very simple REST API interface. No additional configurations is used, * all HTTP-specific information is generated based on few conventions. * * All types are serialized and deserialized automatically by vibe.d framework using JSON. */ @rootPathFromName interface Example1API { /* Default convention is based on camelCase */ /* Used HTTP method is "GET" because function name start with "get". * Remaining part is converted to lower case with words separated by _ * * Resulting matching request: "GET /some_info" */ string getSomeInfo(); /* Parameters are supported in a similar fashion. * Despite this is only an interface, make sure parameter names are not omitted, those are used for serialization. * If it is a GET reuqest, parameters are embedded into query URL. * Stored in POST data for POST, of course. */ int postSum(int a, int b); /* @property getters are always GET. @property setters are always PUT. * All supported convention prefixes are documentated : http://vibed.org/api/vibe.web.rest/registerRestInterface * Rather obvious and thus omitted in this example interface. */ @property string getter(); } class Example1 : Example1API { override: // usage of this handy D feature is highly recommended string getSomeInfo() { return "Some Info!"; } int postSum(int a, int b) { return a + b; } @property string getter() { return "Getter"; } } unittest { auto router = new URLRouter; registerRestInterface(router, new Example1()); auto routes = router.getAllRoutes(); assert (routes[0].method == HTTPMethod.GET && routes[0].pattern == "/example1_api/some_info"); assert (routes[1].method == HTTPMethod.POST && routes[1].pattern == "/example1_api/sum"); assert (routes[2].method == HTTPMethod.GET && routes[2].pattern == "/example1_api/getter"); } /* --------- EXAMPLE 2 ---------- */ /* Step forward. Using some compound types and query parameters. * Shows example usage of non-default naming convention, please check module constructor for details on this. * UpperUnderscore method style will be used. */ @rootPathFromName interface Example2API { // Any D data type may be here. Serializer is not configurable and will send all declared fields. // This should be an API-specified type and may or may not be the same as data type used by other application code. struct Aggregate { string name; uint count; enum Type { Type1, Type2, Type3 } Type type; } /* As you may see, using aggregate types in parameters is just as easy. * Macthing request for this function will be "GET /ACCUMULATE_ALL?input=" * Answer will be of "application/json" type. */ Aggregate queryAccumulateAll(Aggregate[] input); } class Example2 : Example2API { override: Aggregate queryAccumulateAll(Aggregate[] input) { import std.algorithm; // Some sweet functional D return reduce!( (a, b) => Aggregate(a.name ~ b.name, a.count + b.count, Aggregate.Type.Type3) )(Aggregate.init, input); } } unittest { auto router = new URLRouter; registerRestInterface(router, new Example2(), MethodStyle.upperUnderscored); auto routes = router.getAllRoutes(); assert (routes[0].method == HTTPMethod.GET && routes[0].pattern == "/EXAMPLE2_API/ACCUMULATE_ALL"); } /* --------- EXAMPLE 3 ---------- */ /* Nested REST interfaces may be used to better match your D code structure with URL paths. * Nested interfaces must always be getter properties, this is statically enforced by rest module. * * Some limited form of URL parameters exists via special "id" parameter. */ @rootPathFromName interface Example3API { /* Available under ./nested_module/ */ @property Example3APINested nestedModule(); /* "id" is special parameter name that is parsed from URL. No special magic happens here, * it uses usual vibe.d URL pattern matching functionality. * GET /:id/myid */ int getMyID(int id); } interface Example3APINested { /* In this example it will be available under "GET /nested_module/number" * But this interface does't really know it, it does not care about exact path * * Default parameter values work as expected - they get used if there are no data & for that parameter in request. */ int getNumber(int def_arg = 42); } class Example3 : Example3API { private: Example3Nested m_nestedImpl; public: this() { m_nestedImpl = new Example3Nested(); } override: int getMyID(int id) { return id; } @property Example3APINested nestedModule() { return m_nestedImpl; } } class Example3Nested : Example3APINested { override: int getNumber(int def_arg) { return def_arg; } } unittest { auto router = new URLRouter; registerRestInterface(router, new Example3()); auto routes = router.getAllRoutes(); assert (routes[0].method == HTTPMethod.GET && routes[0].pattern == "/example3_api/nested_module/number"); assert (routes[1].method == HTTPMethod.GET && routes[1].pattern == "/example3_api/:id/myid"); } /* If pre-defined conventions do not suit your needs, you can configure url and method * precisely via User Defined Attributes. */ @rootPathFromName interface Example4API { /* vibe.web.rest module provides two pre-defined UDA - @path and @method * You can use any one of those or both. In case @path is used, not method style * adjustment is made. */ @path("simple") @method(HTTPMethod.POST) void myNameDoesNotMatter(); /* Only @path is used here, so HTTP method is deduced in usual way (GET) * vibe.d does usual pattern matching on path and stores path parts marked with ":" * in request parameters. If function parameter starts with "_" and matches one * of stored request parameters, expected things happen. */ @path(":param/:another_param/data") int getParametersInURL(string _param, string _another_param); /* The underscore at the end of each parameter will be dropped in the * protocol, so that D keywords, such as "body" or "in" can be used as * identifiers. */ int querySpecialParameterNames(int body_, bool in_); } class Example4 : Example4API { override: void myNameDoesNotMatter() { } int getParametersInURL(string _param, string _another_param) { import std.conv; return to!int(_param) + to!int(_another_param); } int querySpecialParameterNames(int body_, bool in_) { return body_ * (in_ ? -1 : 1); } } unittest { auto router = new URLRouter; registerRestInterface(router, new Example4()); auto routes = router.getAllRoutes(); assert (routes[0].method == HTTPMethod.POST && routes[0].pattern == "/example4_api/simple"); assert (routes[1].method == HTTPMethod.GET && routes[1].pattern == "/example4_api/:param/:another_param/data"); assert (routes[2].method == HTTPMethod.GET && routes[2].pattern == "/example4_api/special_parameter_names"); } /* It is possible to attach function hooks to methods via User-Define Attributes. * * Such hook must be a free function that * 1) accepts HTTPServerRequest and HTTPServerResponse * 2) is attached to specific parameter of a method * 3) has same return type as that parameter type * * REST API framework will call attached functions before actual * method call and use their result as an input to method call. * * There is also another attribute function type that can be called * to post-process method return value. * * Refer to `vibe.internal.meta.funcattr` for more details. */ @rootPathFromName interface Example5API { import vibe.web.rest : before, after; @before!authenticate("user") @after!addBrackets() string getSecret(int num, User user); } User authenticate(HTTPServerRequest req, HTTPServerResponse res) { return User("admin", true); } struct User { string name; bool authorized; } string addBrackets(string result, HTTPServerRequest, HTTPServerResponse) { return "{" ~ result ~ "}"; } class Example5 : Example5API { string getSecret(int num, User user) { import std.conv : to; import std.string : format; if (!user.authorized) return ""; return format("secret #%s for %s", num, user.name); } } unittest { auto router = new URLRouter; registerRestInterface(router, new Example5()); auto routes = router.getAllRoutes(); assert (routes[0].method == HTTPMethod.GET && routes[0].pattern == "/example5_api/secret"); } /** * The default convention of this module is to pass parameters via: * - the URI for parameter starting with underscore (see example 4); * - query for GET/PUT requests; * - body for POST requests; * * This is configurable by means of: * - @headerParam : Get a parameter from the query header; * - @queryParam : Get a parameter from the query URL; * - @bodyParam : Get a parameter from the body; * * In addition, @headerParam have a special handling of 'out' and * 'ref' parameters: * - 'out' are neither send by the client nor read by the server, but * their value (except for null string) is returned by the server. * - 'ref' are send by the client, read by the server, returned by * the server, and read by the client. * This is to be consistent with the way D 'out' and 'ref' works. * However, it makes no sense to have 'ref' or 'out' parameters on * body or query parameter, so those are treated as error at compile time. */ @rootPathFromName interface Example6API { // The first parameter of @headerParam is the identifier (must match one of the parameter name). // The second is the name of the field in the header, such as "Accept", "Content-Type", "User-Agent"... @headerParam("auth", "Authorization") @headerParam("tester", "X-Custom-Tester") @headerParam("www", "WWW-Authenticate") string getPortal(string auth, ref string tester, out Nullable!string www); // As with @headerParam, the first parameter of @queryParam is the identifier. // The second being the field name, e.g for a query such as: 'GET /root/node?foo=bar', "foo" will be the second parameter. @queryParam("fortyTwo", "qparam") string postAnswer(string fortyTwo); // Finally, there is @bodyParam. It works as you expect it to work, // currently serializing passed data as Json and pass them through the body. @bodyParam("myFoo", "parameter") string postConcat(FooType myFoo); // expects the entire body @bodyParam("obj") string postConcatBody(FooType obj); struct FooType { int a; string s; double d; } } class Example6 : Example6API { override: string getPortal(string auth, ref string tester, out Nullable!string www) { // For a string parameter, null means 'not returned' // If you want to return something empty, use "". if (tester == "Chell") tester = "The cake is a lie"; else tester = null; // If the user provided credentials Aladdin / 'open sesame' if (auth == "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==") return "Hello, Caroline"; www = `Basic realm="Aperture"`; throw new HTTPStatusException(401); } string postAnswer(string fortyTwo) { if (fortyTwo == "Life_universe_and_the_rest") return "True"; return "False"; } string postConcat(FooType myFoo) { import std.conv : to; return to!string(myFoo.a)~myFoo.s~to!string(myFoo.d); } string postConcatBody(FooType obj) { return postConcat(obj); } } unittest { auto router = new URLRouter; registerRestInterface(router, new Example6()); auto routes = router.getAllRoutes(); assert (routes[0].method == HTTPMethod.GET && routes[0].pattern == "/example6_api/portal"); assert (routes[1].method == HTTPMethod.POST && routes[1].pattern == "/example6_api/answer"); assert (routes[0].method == HTTPMethod.GET && routes[2].pattern == "/example6_api/concat"); } @rootPathFromName interface Example7API { // GET /example7_api/ // returns a custom JSON response Json get(); } class Example7 : Example7API { Json get() { return serializeToJson(["foo": 42, "bar": 13]); } } void runTests() { // Example 1 { auto api = new RestInterfaceClient!Example1API("http://127.0.0.1:8080"); assert(api.getSomeInfo() == "Some Info!"); assert(api.getter == "Getter"); assert(api.postSum(2, 3) == 5); } // Example 2 { auto api = new RestInterfaceClient!Example2API("http://127.0.0.1:8080", MethodStyle.upperUnderscored); Example2API.Aggregate[] data = [ { "one", 1, Example2API.Aggregate.Type.Type1 }, { "two", 2, Example2API.Aggregate.Type.Type2 } ]; auto accumulated = api.queryAccumulateAll(data); assert(accumulated.type == Example2API.Aggregate.Type.Type3); assert(accumulated.count == 3); assert(accumulated.name == "onetwo"); } // Example 3 { auto api = new RestInterfaceClient!Example3API("http://127.0.0.1:8080"); assert(api.getMyID(9000) == 9000); assert(api.nestedModule.getNumber() == 42); assert(api.nestedModule.getNumber(1) == 1); } // Example 4 { auto api = new RestInterfaceClient!Example4API("http://127.0.0.1:8080"); api.myNameDoesNotMatter(); assert(api.getParametersInURL("20", "30") == 50); assert(api.querySpecialParameterNames(10, true) == -10); } // Example 5 { auto api = new RestInterfaceClient!Example5API("http://127.0.0.1:8080"); auto secret = api.getSecret(42, User.init); assert(secret == "{secret #42 for admin}"); } // Example 6 { import vibe.http.client : requestHTTP; import vibe.stream.operations : readAllUTF8; auto api = new RestInterfaceClient!Example6API("http://127.0.0.1:8080"); // First we make sure parameters are transmitted via headers. auto res = requestHTTP("http://127.0.0.1:8080/example6_api/portal", (scope r) { r.method = HTTPMethod.GET; r.headers["Authorization"] = "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="; r.headers["X-Custom-Tester"] = "GladOS"; }); assert(res.statusCode == 200); assert(!res.headers["X-Custom-Tester"].length, res.headers["X-Custom-Tester"]); assert(!("WWW-Authenticate" in res.headers), res.headers["WWW-Authenticate"]); assert(res.bodyReader.readAllUTF8() == `"Hello, Caroline"`); // Then we check that both can communicate together. string tester = "Chell"; Nullable!string www; try { // We shouldn't reach the assert, this will throw auto answer = api.getPortal("Oops", tester, www); assert(0, answer); } catch (RestException e) { assert(tester == "The cake is a lie", tester); assert(www == `Basic realm="Aperture"`, www); } } // Example 6 -- Query { import vibe.http.client : requestHTTP; import vibe.stream.operations : readAllUTF8; // First we make sure parameters are transmitted via query. auto res = requestHTTP("http://127.0.0.1:8080/example6_api/answer?qparam=Life_universe_and_the_rest", (scope r) { r.method = HTTPMethod.POST; }); assert(res.statusCode == 200); assert(res.bodyReader.readAllUTF8() == `"True"`); // Then we check that both can communicate together. auto api = new RestInterfaceClient!Example6API("http://127.0.0.1:8080"); auto answer = api.postAnswer("IDK"); assert(answer == "False"); } // Example 7 -- Custom JSON response { auto api = new RestInterfaceClient!Example7API("http://127.0.0.1:8080"); auto result = api.get(); assert(result["foo"] == 42 && result["bar"] == 13); } // Example 6 -- Body { import vibe.http.client : requestHTTP; import vibe.stream.operations : readAllUTF8; enum expected = "42fortySomething51.42"; // to!string(51.42) doesn't work at CT auto api = new RestInterfaceClient!Example6API("http://127.0.0.1:8080"); { // First we make sure parameters are transmitted via query. auto res = requestHTTP("http://127.0.0.1:8080/example6_api/concat", (scope r) { import vibe.data.json; r.method = HTTPMethod.POST; Json obj = Json.emptyObject; obj["parameter"] = serializeToJson(Example6API.FooType(42, "fortySomething", 51.42)); r.writeJsonBody(obj); }); assert(res.statusCode == 200); assert(res.bodyReader.readAllUTF8() == `"`~expected~`"`); // Then we check that both can communicate together. auto answer = api.postConcat(Example6API.FooType(42, "fortySomething", 51.42)); assert(answer == expected); } // suppling the whole body { // First we make sure parameters are transmitted via query. auto res = requestHTTP("http://127.0.0.1:8080/example6_api/concat_body", (scope r) { import vibe.data.json; r.method = HTTPMethod.POST; Json obj = serializeToJson(Example6API.FooType(42, "fortySomething", 51.42)); r.writeJsonBody(obj); }); assert(res.statusCode == 200); assert(res.bodyReader.readAllUTF8() == `"`~expected~`"`); // Then we check that both can communicate together. auto answer = api.postConcatBody(Example6API.FooType(42, "fortySomething", 51.42)); assert(answer == expected); } } } shared static this() { // Registering our REST services in router auto routes = new URLRouter; registerRestInterface(routes, new Example1()); // note additional last parameter that defines used naming convention for compile-time introspection registerRestInterface(routes, new Example2(), MethodStyle.upperUnderscored); // naming style is default again, those can be router path specific. registerRestInterface(routes, new Example3()); registerRestInterface(routes, new Example4()); registerRestInterface(routes, new Example5()); registerRestInterface(routes, new Example6()); registerRestInterface(routes, new Example7()); auto settings = new HTTPServerSettings(); settings.port = 8080; settings.bindAddresses = ["::1", "127.0.0.1"]; listenHTTP(settings, routes); runTask({ try { runTests(); logInfo("Success."); } catch (Exception e) { import core.stdc.stdlib : exit; import std.encoding : sanitize; logError("Fail: %s", e.toString().sanitize); exit(1); } finally { exitEventLoop(true); } }); } vibe.d-0.8.2/tests/restclient/000077500000000000000000000000001324361747700162245ustar00rootroot00000000000000vibe.d-0.8.2/tests/restclient/dub.json000066400000000000000000000003211324361747700176650ustar00rootroot00000000000000{ "name": "tests", "description": "High level REST client test for vibe.d", "dependencies": { "vibe-d": {"version": "~master", "path": "../../"} }, "versions": ["VibeCustomMain"] } vibe.d-0.8.2/tests/restclient/source/000077500000000000000000000000001324361747700175245ustar00rootroot00000000000000vibe.d-0.8.2/tests/restclient/source/app.d000066400000000000000000000157611324361747700204630ustar00rootroot00000000000000module app; import vibe.vibe; interface ITestAPI { @property ISub sub(); @method(HTTPMethod.POST) @path("other/path") string info(); string getInfo(); @path("getCheck/:param/:param2") @method(HTTPMethod.GET) string customParameters(string _param, string _param2); @path("getCheck2/:param/:param2") @method(HTTPMethod.GET) int customParameters2(int _param, bool _param2); @path(":id/idtest1") int testID1(int _id); @path("idtest2") int testID2(int id); // the special "id" parameter int get(int id); // the special "id" parameter on "/"" path int testKeyword(int body_, int const_); } interface ISub { int get(int id); } class TestAPI : ITestAPI { SubAPI m_sub; this() { m_sub = new SubAPI; } @property SubAPI sub() { return m_sub; } string getInfo() { return "description"; } string info() { return "description2"; } string customParameters(string _param, string _param2) { return _param ~ _param2; } int customParameters2(int _param, bool _param2) { return _param2 ? _param : -_param; } int testID1(int _id) { return _id; } int testID2(int id) { return id; } int get(int id) { return id; } int testKeyword(int body_, int const_) { return body_ + const_; } } class SubAPI : ISub { int get(int id) { return id; } } interface ITestAPICors { string getFoo(); string setFoo(); string addFoo(); @path("bar/:param3") string addBar(int _param3); @path("bar/:param4") string removeBar(int _param4); @path("bar/:param5") string updateBar(int _param5); string setFoo(int id); string addFoo(int id); string removeFoo(int id); } class TestAPICors : ITestAPICors { string getFoo() { return "foo"; }; string setFoo() { return "foo"; }; string addFoo() { return "foo"; }; string addBar(int _param3) { return "bar"; }; string removeBar(int _param4) { return "bar"; }; string updateBar(int _param5) { return "bar"; }; string setFoo(int id) { return "foo"; }; string addFoo(int id) { return "foo"; }; string removeFoo(int id) { return "foo"; }; } enum ShouldFail { Yes, No } void assertHeader(ref InetHeaderMap headers, ShouldFail shouldFail, string header, string value) { import std.algorithm : equal; auto h = header in headers; if (shouldFail == ShouldFail.Yes) { assert(h is null); return; } assert(h !is null); assert(equal((*h),value)); } void assertCorsHeaders(string url, HTTPMethod method, ShouldFail shouldFail, string origin) { // preflight request requestHTTP(url, (scope HTTPClientRequest req) { req.method = HTTPMethod.OPTIONS; req.headers["Origin"] = origin; req.headers["Access-Control-Request-Method"] = method.to!string; req.headers["Access-Control-Request-Headers"] = "Authorization"; }, (scope HTTPClientResponse res) { res.headers.assertHeader(shouldFail,"Access-Control-Allow-Origin",origin); res.headers.assertHeader(shouldFail,"Access-Control-Allow-Credentials","true"); res.headers.assertHeader(shouldFail,"Access-Control-Allow-Methods",method.to!string); res.headers.assertHeader(shouldFail,"Access-Control-Allow-Headers","Authorization"); res.dropBody(); }); // normal request requestHTTP(url, (scope HTTPClientRequest req) { req.method = method; req.headers["Origin"] = origin; }, (scope HTTPClientResponse res) { res.headers.assertHeader(shouldFail,"Access-Control-Allow-Origin",origin); res.headers.assertHeader(shouldFail,"Access-Control-Allow-Credentials","true"); res.dropBody(); }); } void assertCorsPasses(string url, HTTPMethod method, string origin = "www.example.com") { assertCorsHeaders(url, method, ShouldFail.No, origin); } void assertCorsFails(string url, HTTPMethod method, string origin = "www.example.com") { assertCorsHeaders(url, method, ShouldFail.Yes, origin); } // According to specs, when a resource is requested with the OPTIONS method the server should // return the Allow header that specifies all methods available on that resource. // Since a CORS preflight also uses the OPTIONS method, we implemented the Allow header as well. void testAllowHeader(string url, HTTPMethod[] methods) { import std.algorithm : equal, joiner; import std.conv : text; auto allow = methods.map!(m=>m.to!string); requestHTTP(url, (scope HTTPClientRequest req) { req.method = HTTPMethod.OPTIONS; }, (scope HTTPClientResponse res) { assert(equal(res.headers["Allow"].split(",").sort(), allow.array.sort())); res.dropBody(); }); } void testCors(string url, HTTPMethod[] methods) { foreach(method; methods) assertCorsPasses(url, method); } void createRestTestInterface(URLRouter router, string path, string[] allowedOrigins) { auto corsRestSettings = new RestInterfaceSettings(); corsRestSettings.baseURL = URL(path); corsRestSettings.methodStyle = MethodStyle.lowerUnderscored; corsRestSettings.allowedOrigins = allowedOrigins.dup; registerRestInterface!ITestAPICors(router, new TestAPICors, corsRestSettings); } void runTest() { auto router = new URLRouter; registerRestInterface!ITestAPI(router, new TestAPI, "/root/"); // we create 3 api's to test the allowed origins router.createRestTestInterface("http://127.0.0.1/cors1/",["www.foobar.com","www.example.com"]); router.createRestTestInterface("http://127.0.0.1/cors2/",[]); router.createRestTestInterface("http://127.0.0.1/cors3/",["www.foobar.com"]); auto settings = new HTTPServerSettings; settings.disableDistHost = true; settings.port = 8000; listenHTTP(settings, router); auto api = new RestInterfaceClient!ITestAPI("http://127.0.0.1:8000/root/"); assert(api.getInfo() == "description"); assert(api.info() == "description2"); assert(api.customParameters("one", "two") == "onetwo"); assert(api.customParameters2(10, false) == -10); assert(api.customParameters2(10, true) == 10); assert(api.testID1(2) == 2); assert(api.testID2(3) == 3); assert(api.get(4) == 4); assert(api.sub.get(5) == 5); assert(api.testKeyword(3, 4) == 7); assertCorsFails("http://127.0.0.1:8000/cors1/foo", HTTPMethod.GET, "www.non-existent.com"); assertCorsPasses("http://127.0.0.1:8000/cors1/foo", HTTPMethod.GET, "www.foobar.com"); assertCorsPasses("http://127.0.0.1:8000/cors1/foo", HTTPMethod.GET, "www.example.com"); assertCorsPasses("http://127.0.0.1:8000/cors2/foo", HTTPMethod.GET, "www.abcdefg.com"); assertCorsPasses("http://127.0.0.1:8000/cors3/foo", HTTPMethod.GET, "www.foobar.com"); assertCorsFails("http://127.0.0.1:8000/cors3/foo", HTTPMethod.GET, "www.bazbaz.com"); testAllowHeader("http://127.0.0.1:8000/cors1/foo", [HTTPMethod.GET,HTTPMethod.PUT,HTTPMethod.POST]); testAllowHeader("http://127.0.0.1:8000/cors1/bar/6", [HTTPMethod.POST,HTTPMethod.DELETE,HTTPMethod.PATCH]); testAllowHeader("http://127.0.0.1:8000/cors1/7/foo", [HTTPMethod.PUT,HTTPMethod.POST,HTTPMethod.DELETE]); testCors("http://127.0.0.1:8000/cors1/foo", [HTTPMethod.GET,HTTPMethod.PUT,HTTPMethod.POST]); testCors("http://127.0.0.1:8000/cors1/bar/6", [HTTPMethod.POST,HTTPMethod.DELETE,HTTPMethod.PATCH]); testCors("http://127.0.0.1:8000/cors1/7/foo", [HTTPMethod.PUT,HTTPMethod.POST,HTTPMethod.DELETE]); exitEventLoop(true); } int main() { runTask(toDelegate(&runTest)); return runEventLoop(); } vibe.d-0.8.2/tests/restcollections/000077500000000000000000000000001324361747700172645ustar00rootroot00000000000000vibe.d-0.8.2/tests/restcollections/dub.json000066400000000000000000000003211324361747700207250ustar00rootroot00000000000000{ "name": "tests", "description": "High level REST client test for vibe.d", "dependencies": { "vibe-d": {"version": "~master", "path": "../../"} }, "versions": ["VibeCustomMain"] } vibe.d-0.8.2/tests/restcollections/source/000077500000000000000000000000001324361747700205645ustar00rootroot00000000000000vibe.d-0.8.2/tests/restcollections/source/app.d000066400000000000000000000042001324361747700215050ustar00rootroot00000000000000module app; import vibe.vibe; interface API { Collection!ItemAPI items(); } interface ItemAPI { struct CollectionIndices { string _item; } Collection!SubItemAPI subItems(string _item); ItemManagerAPI manager(); } interface SubItemAPI { struct CollectionIndices { string _item; int _index; } @property int length(string _item); @method(HTTPMethod.GET) string name(string _item, int _index); } interface ItemManagerAPI { @property string databaseURL(); } class LocalAPI : API { LocalItemAPI m_items; this() { m_items = new LocalItemAPI; } Collection!ItemAPI items() { return Collection!ItemAPI(m_items); } } class LocalItemAPI : ItemAPI { private { LocalItemManagerAPI m_manager; LocalSubItemAPI m_subItems; } this() { m_manager = new LocalItemManagerAPI; m_subItems = new LocalSubItemAPI(m_manager); } Collection!SubItemAPI subItems(string id) { return Collection!SubItemAPI(m_subItems, id); } ItemManagerAPI manager() { return m_manager; } } class LocalSubItemAPI : SubItemAPI { private LocalItemManagerAPI m_manager; this(LocalItemManagerAPI manager) { m_manager = manager; } @property int length(string _item) { return cast(int)m_manager.items[_item].length; } string name(string _item, int _index) { return m_manager.items[_item][_index]; } } class LocalItemManagerAPI : ItemManagerAPI { string[][string] items; this() { items = [ "foo": ["hello", "world"], "bar": ["this", "is", "a", "test"] ]; } @property string databaseURL() { return "in-memory://"; } } void runTest() { auto router = new URLRouter; router.registerRestInterface(new LocalAPI); auto settings = new HTTPServerSettings; settings.disableDistHost = true; settings.port = 8000; listenHTTP(settings, router); auto api = new RestInterfaceClient!API("http://127.0.0.1:8000/"); assert(api.items["foo"].subItems.length == 2); assert(api.items["foo"].subItems[0].name == "hello"); assert(api.items["foo"].subItems[1].name == "world"); assert(api.items.manager.databaseURL == "in-memory://"); exitEventLoop(true); } int main() { setLogLevel(LogLevel.debug_); runTask(toDelegate(&runTest)); return runEventLoop(); } vibe.d-0.8.2/tests/std.concurrency/000077500000000000000000000000001324361747700171735ustar00rootroot00000000000000vibe.d-0.8.2/tests/std.concurrency/dub.json000066400000000000000000000002601324361747700206360ustar00rootroot00000000000000{ "name": "tests", "description": "Tests vibe.d's std.concurrency integration", "dependencies": { "vibe-d:core": {"path": "../../"} }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/tests/std.concurrency/source/000077500000000000000000000000001324361747700204735ustar00rootroot00000000000000vibe.d-0.8.2/tests/std.concurrency/source/app.d000066400000000000000000000032321324361747700214200ustar00rootroot00000000000000import vibe.appmain; import vibe.core.core; import vibe.core.log; import std.concurrency; import core.atomic; import core.time; import core.stdc.stdlib : exit; __gshared Tid t1, t2; shared watchdog_count = 0; shared static this() { t1 = spawn({ // ensure that asynchronous operations run in parallel to receive() int wc = 0; runTask({ while (true) { sleep(250.msecs); wc++; logInfo("Watchdog receiver %s", wc); } }); bool finished = false; try while (!finished) { logDebug("receive1"); receive( (string msg) { logInfo("Received string message: %s", msg); }, (int msg) { logInfo("Received int message: %s", msg); }); logDebug("receive2"); receive( (double msg) { logInfo("Received double: %s", msg); }, (int a, int b, int c) { logInfo("Received iii: %s %s %s", a, b, c); if (a == 1 && b == 2 && c == 3) finished = true; }); } catch (Exception e) assert(false, "Receiver thread failed: "~e.msg); logInfo("Receive loop finished."); if (wc < 6*4-1) { logError("Receiver watchdog failure."); exit(1); } logInfo("Exiting normally"); }); t2 = spawn({ scope (failure) assert(false); sleep(1.seconds()); logInfo("send Hello World"); t1.send("Hello, World!"); sleep(1.seconds()); logInfo("send int 1"); t1.send(1); sleep(1.seconds()); logInfo("send double 1.2"); t1.send(1.2); sleep(1.seconds()); logInfo("send int 2"); t1.send(2); sleep(1.seconds()); logInfo("send 3xint 1 2 3"); t1.send(1, 2, 3); sleep(1.seconds()); logInfo("send string Bye bye"); t1.send("Bye bye"); sleep(100.msecs); logInfo("Exiting."); exitEventLoop(true); }); } vibe.d-0.8.2/tests/tcp/000077500000000000000000000000001324361747700146365ustar00rootroot00000000000000vibe.d-0.8.2/tests/tcp/dub.sdl000066400000000000000000000002711324361747700161140ustar00rootroot00000000000000name "tests" description "TCP semantics tests" copyright "Copyright © 2015, rejectedsoftware e.K." dependency "vibe-d:stream" path="../../" //subConfiguration "vibe-d:core" "libasync" vibe.d-0.8.2/tests/tcp/source/000077500000000000000000000000001324361747700161365ustar00rootroot00000000000000vibe.d-0.8.2/tests/tcp/source/app.d000066400000000000000000000067631324361747700170770ustar00rootroot00000000000000import vibe.core.core; import vibe.core.log; import vibe.core.net; import vibe.stream.operations; import core.time; import std.datetime : StopWatch; enum port = 12675; enum Test { receive, receiveExisting, timeout, noTimeout, close } void test1() { scope (failure) assert(false); Test test; Task lt; listenTCP(port, (conn) { lt = Task.getThis(); try { while (!conn.empty) { assert(conn.readLine() == "next"); auto curtest = test; conn.write("continue\r\n"); logInfo("Perform test %s", curtest); StopWatch sw; sw.start(); final switch (curtest) { case Test.receive: assert(conn.waitForData(2.seconds) == true); assert(cast(Duration)sw.peek < 2.seconds); // should receive something instantly assert(conn.readLine() == "receive"); break; case Test.receiveExisting: assert(conn.waitForData(2.seconds) == true); // TODO: validate that waitForData didn't yield! assert(cast(Duration)sw.peek < 2.seconds); // should receive something instantly assert(conn.readLine() == "receiveExisting"); break; case Test.timeout: assert(conn.waitForData(2.seconds) == false); assert(cast(Duration)sw.peek > 1900.msecs); // should wait for at least 2 seconds assert(conn.connected); break; case Test.noTimeout: assert(conn.waitForData(Duration.max) == true); assert(cast(Duration)sw.peek > 2.seconds); // data only sent after 3 seconds assert(conn.readLine() == "noTimeout"); break; case Test.close: assert(conn.waitForData(2.seconds) == false); assert(cast(Duration)sw.peek < 2.seconds); // connection should be closed instantly assert(conn.empty); conn.close(); assert(!conn.connected); return; } conn.write("ok\r\n"); } } catch (Exception e) { assert(false, e.msg); } }, "127.0.0.1"); auto conn = connectTCP("127.0.0.1", port); test = Test.receive; conn.write("next\r\n"); assert(conn.readLine() == "continue"); conn.write("receive\r\n"); assert(conn.readLine() == "ok"); test = Test.receiveExisting; conn.write("next\r\nreceiveExisting\r\n"); assert(conn.readLine() == "continue"); assert(conn.readLine() == "ok"); test = Test.timeout; conn.write("next\r\n"); assert(conn.readLine() == "continue"); sleep(3.seconds); assert(conn.readLine() == "ok"); test = Test.noTimeout; conn.write("next\r\n"); assert(conn.readLine() == "continue"); sleep(3.seconds); conn.write("noTimeout\r\n"); assert(conn.readLine() == "ok"); test = Test.close; conn.write("next\r\n"); assert(conn.readLine() == "continue"); conn.close(); lt.join(); } void test2() { Task lt; logInfo("Perform test \"disconnect with pending data\""); listenTCP(port+1, (conn) { try { lt = Task.getThis(); sleep(1.seconds); StopWatch sw; sw.start(); try { assert(conn.waitForData() == true); assert(cast(Duration)sw.peek < 500.msecs); // waitForData should return immediately assert(conn.dataAvailableForRead); assert(conn.readAll() == "test"); conn.close(); } catch (Exception e) { assert(false, "Failed to read pending data: " ~ e.msg); } } catch (Exception e) { assert(false, e.msg); } }, "127.0.0.1"); auto conn = connectTCP("127.0.0.1", port+1); conn.write("test"); conn.close(); sleep(100.msecs); assert(lt != Task.init); lt.join(); } void test() { test1(); test2(); exitEventLoop(); } void main() { import std.functional : toDelegate; runTask(toDelegate(&test)); runEventLoop(); } vibe.d-0.8.2/tests/tcpproxy/000077500000000000000000000000001324361747700157405ustar00rootroot00000000000000vibe.d-0.8.2/tests/tcpproxy/dub.json000066400000000000000000000002711324361747700174050ustar00rootroot00000000000000{ "name": "tests", "description": "TCP proxy test", "dependencies": { "vibe-d": {"version": "~master", "path": "../../"} }, "versions": ["VibeCustomMain"] } vibe.d-0.8.2/tests/tcpproxy/source/000077500000000000000000000000001324361747700172405ustar00rootroot00000000000000vibe.d-0.8.2/tests/tcpproxy/source/app.d000066400000000000000000000046421324361747700201730ustar00rootroot00000000000000module app; import vibe.core.core; import vibe.core.log; import vibe.core.net; import vibe.stream.operations; import std.exception; import std.string; import core.time; void testProtocol(TCPConnection server, bool terminate) { foreach (i; 0 .. 1) { foreach (j; 0 .. 1) { auto str = format("Hello, World #%s", i*100+j); server.write(str); server.write("\r\n"); auto reply = server.readLine(); assert(reply == format("Hash: %08X", typeid(string).getHash(&str)), "Unexpected reply"); } sleep(10.msecs); } assert(!server.dataAvailableForRead, "Still data available."); if (terminate) { // forcefully close connection server.close(); } else { server.write("quit\r\n"); enforce(server.readLine() == "Bye bye!"); // should have closed within 500 ms enforce(!server.waitForData(500.msecs)); assert(server.empty, "Server still connected."); } } void runTest() { // server for a simple line based protocol listenTCP(11001, (client) { while (!client.empty) { auto ln = client.readLine(); if (ln == "quit") { client.write("Bye bye!\r\n"); client.close(); break; } client.write(format("Hash: %08X\r\n", typeid(string).getHash(&ln))); } }); // proxy server listenTCP(11002, (client) { auto server = connectTCP("127.0.0.1", 11001); // pipe server to client as long as the server connection is alive auto t = runTask!(TCPConnection, TCPConnection)((client, server) { scope (exit) client.close(); client.write(server); logInfo("Proxy 2 out"); }, client, server); // pipe client to server as long as the client connection is alive scope (exit) { server.close(); t.join(); } server.write(client); logInfo("Proxy out"); }); // test server logInfo("Test protocol implementation on server"); testProtocol(connectTCP("127.0.0.1", 11001), false); logInfo("Test protocol implementation on server with forced disconnect"); testProtocol(connectTCP("127.0.0.1", 11001), true); // test proxy logInfo("Test protocol implementation on proxy"); testProtocol(connectTCP("127.0.0.1", 11002), false); logInfo("Test protocol implementation on proxy with forced disconnect"); testProtocol(connectTCP("127.0.0.1", 11002), true); } int main() { int ret = 0; runTask({ try runTest(); catch (Throwable th) { logError("Test failed: %s", th.msg); logDiagnostic("Full error: %s", th); ret = 1; } finally exitEventLoop(true); }); runEventLoop(); return ret; } vibe.d-0.8.2/tests/tls/000077500000000000000000000000001324361747700146525ustar00rootroot00000000000000vibe.d-0.8.2/tests/tls/ca.crt000066400000000000000000000024051324361747700157500ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIDhzCCAm+gAwIBAgIJAPPsz4Vg1ss1MA0GCSqGSIb3DQEBCwUAMFkxCzAJBgNV BAYTAkRFMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX aWRnaXRzIFB0eSBMdGQxEjAQBgNVBAMMCVNhbXBsZSBDQTAgFw0xNTExMTEwNjM1 NDFaGA8yMTE1MTAxODA2MzU0MVowWTELMAkGA1UEBhMCREUxEzARBgNVBAgMClNv bWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDESMBAG A1UEAwwJU2FtcGxlIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA qb+I9X26YydJNXmc7q9woXSI5b/5vitB6BHxUIkXkv0qSKpgV5IGQKXKgJK3FLwf vqIemiCbJDiiLamnoXectG/FQxxGXolwmMjGBloHSeCo8yZcQq/3WXL2urH2R8B3 q7Du2TT7pqNFVAvkFVM8Z/rE1kAGBGiF+tTf2Tm0xq3fXk3DOSfTWV9OqHoLNrS7 Cx2E260L2j1SGk4mCYsDjSWtMm5lfVWZ+FjnAMZw22goMgbPEuMQGhzla0yxux4/ kKdgyGKFhXAmPsHkDIOtM+HBV34qnPRGps/ICfqAUx+RyUIK5bWjIaUENhFq0uis dQsX9VDQB489kQJcB/Pt4wIDAQABo1AwTjAdBgNVHQ4EFgQUzQ3L47XiUI3247OT T1WLDFYr/CgwHwYDVR0jBBgwFoAUzQ3L47XiUI3247OTT1WLDFYr/CgwDAYDVR0T BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAX5cSudTaTbxjMb+SPnQlCZngQWKJ AjYvQcSR9iXrdmU9teaf/hwZbutTFPgjAWUktNjfxvmgDEbX8PBJ+VfE1DzxZsG/ V3b1kz6gyFucWcImYu0XEqv4WLA78FuBKvb7XCnrw/Wy8zW0q5Zg6DeHLUd9WABC omciZhk59qy01r/j4o2KPZxmZ3AM5ZqslC5ntO+mt1TtnYRVLPHAF+5MkApraBLU e7MaRVNp49FXzsnA50VuIdu5nppuTvb6OeLjVFFujj6mteGIbUSMdI41KkALl4L6 uqMwL3v4+/BZgTbXJSZcDop/jzMzgGqN5GnpLYx1SFKDxrkAcEEF1bpceA== -----END CERTIFICATE----- vibe.d-0.8.2/tests/tls/client.crt000066400000000000000000000046101324361747700166430ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIDKTCCAhECAQEwDQYJKoZIhvcNAQELBQAwWTELMAkGA1UEBhMCREUxEzARBgNV BAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0 ZDESMBAGA1UEAwwJU2FtcGxlIENBMCAXDTE1MTExMTA2MzkwOVoYDzIxMTUxMDE4 MDYzOTA5WjBaMQswCQYDVQQGEwJERTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8G A1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYDVQQDDApDbGllbnQg S2V5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA23vW1M6yFYc2IjN+ lqQWS4AzQST7jMf1qfxz4M8O9Ns002MV9jNGxGdqVqiU4QrR1TTB8Rv2Gad9Okqb B+1Mye766m+Dr2zLEsChKPSNFr/FHJtkpOc7bd7XxlMRJ22Hgoht/lYzjyDk7z4y 1gezrlTjeADo4dEZaR+EqspaKyiIpKM9o+KXmrjrf0rD513tp+soVBUJZ6D4+mlS kaWBymRNnFCDFxKMDCHrO+Qzdoji/Xv6ebrQg1Y8tAVrVke0cX6R3YcDPLahZnm7 l/hePK5ZTKIqpYo3sdG9uNlWyBWAsPtG9S6gGPuPJ3IRlMRFvi+cZO1t8KEf/CBz 8pPvNwIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQB42gKkVADVhB4KLWdhYFJx7RYL EA1/rTXqguNfiBNBcnj/lWyY8NHaWaSbLSH+rJaCijyB+vk/p8HD6CHNsw/z5wGq /igDaDdncrQZPgfhstnWCfoCFEB2tVZITJJeG4iya2IT9hZWKxc+cAvFwsVXQidt cbxI84W26quXQ87FukcS1nJXNofI/RlXyYExm7aoOcwaMxjocv5jY5uvRFbe86dt VNiIULLfJUTQ3mBuo/idIBV76P6b1Q4SH+YfpYvsxjoaYcUEUKcQ1aXgT5yDxu9e MAF/1yVEQqgXFWce9N2r0wd3jeoRre1Vs/2Y8R92LP2aKVlKfUlxae30ADtz -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDhzCCAm+gAwIBAgIJAPPsz4Vg1ss1MA0GCSqGSIb3DQEBCwUAMFkxCzAJBgNV BAYTAkRFMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX aWRnaXRzIFB0eSBMdGQxEjAQBgNVBAMMCVNhbXBsZSBDQTAgFw0xNTExMTEwNjM1 NDFaGA8yMTE1MTAxODA2MzU0MVowWTELMAkGA1UEBhMCREUxEzARBgNVBAgMClNv bWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDESMBAG A1UEAwwJU2FtcGxlIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA qb+I9X26YydJNXmc7q9woXSI5b/5vitB6BHxUIkXkv0qSKpgV5IGQKXKgJK3FLwf vqIemiCbJDiiLamnoXectG/FQxxGXolwmMjGBloHSeCo8yZcQq/3WXL2urH2R8B3 q7Du2TT7pqNFVAvkFVM8Z/rE1kAGBGiF+tTf2Tm0xq3fXk3DOSfTWV9OqHoLNrS7 Cx2E260L2j1SGk4mCYsDjSWtMm5lfVWZ+FjnAMZw22goMgbPEuMQGhzla0yxux4/ kKdgyGKFhXAmPsHkDIOtM+HBV34qnPRGps/ICfqAUx+RyUIK5bWjIaUENhFq0uis dQsX9VDQB489kQJcB/Pt4wIDAQABo1AwTjAdBgNVHQ4EFgQUzQ3L47XiUI3247OT T1WLDFYr/CgwHwYDVR0jBBgwFoAUzQ3L47XiUI3247OTT1WLDFYr/CgwDAYDVR0T BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAX5cSudTaTbxjMb+SPnQlCZngQWKJ AjYvQcSR9iXrdmU9teaf/hwZbutTFPgjAWUktNjfxvmgDEbX8PBJ+VfE1DzxZsG/ V3b1kz6gyFucWcImYu0XEqv4WLA78FuBKvb7XCnrw/Wy8zW0q5Zg6DeHLUd9WABC omciZhk59qy01r/j4o2KPZxmZ3AM5ZqslC5ntO+mt1TtnYRVLPHAF+5MkApraBLU e7MaRVNp49FXzsnA50VuIdu5nppuTvb6OeLjVFFujj6mteGIbUSMdI41KkALl4L6 uqMwL3v4+/BZgTbXJSZcDop/jzMzgGqN5GnpLYx1SFKDxrkAcEEF1bpceA== -----END CERTIFICATE----- vibe.d-0.8.2/tests/tls/client.key000066400000000000000000000032171324361747700166450ustar00rootroot00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEA23vW1M6yFYc2IjN+lqQWS4AzQST7jMf1qfxz4M8O9Ns002MV 9jNGxGdqVqiU4QrR1TTB8Rv2Gad9OkqbB+1Mye766m+Dr2zLEsChKPSNFr/FHJtk pOc7bd7XxlMRJ22Hgoht/lYzjyDk7z4y1gezrlTjeADo4dEZaR+EqspaKyiIpKM9 o+KXmrjrf0rD513tp+soVBUJZ6D4+mlSkaWBymRNnFCDFxKMDCHrO+Qzdoji/Xv6 ebrQg1Y8tAVrVke0cX6R3YcDPLahZnm7l/hePK5ZTKIqpYo3sdG9uNlWyBWAsPtG 9S6gGPuPJ3IRlMRFvi+cZO1t8KEf/CBz8pPvNwIDAQABAoIBAGhnvWbXuADjo82b H0F7ZpudrUP02rA6QlMNIvYyqNOzHqrbfIv0ElrFMuFsKf3vDqfUA9m0ylmjwb8j 1CFuMVPxmWxBhavCHcua1E7OHftPV+1mwfZrhGqcUZom04ck5Awk5+XPjZEtPZnM xZPocAGiod3o2N7qf6Lw+kPgJApYyQfmKejppY/AP3H7vQGjSROPqmm9HBWtW3yv gZ4IJzJA7ZtetYE69IiiyR4HGBAp1TkmCRewFf+G8jbiVfg/IxCzG14EjM7fvjFk 2d3vd542gdXEqn+UOM6tYxSRh36UkB6kod6u3TmhAhRtkzqyM1u8zaFcx9fujrpy qknu6pkCgYEA9zyAPZfORpfYyF8zIVyY8mOXpVT22XMxbZJeYJSCB0PDFbQIkWwv UNDGFKKLd9V0Hqz/JEurIEa+O9UfViTa/VJXwmTEPadOu8xk2+000JGT4KFJL8zU hBdNAG5ROgkfHkHjILVVrHyXri4lS7QibjqUFKbRFJtHN7Afl35imssCgYEA40OA sGrpbDzs+HJ8sk4yj5aJJppyQIUEAK+IsEyIASUyYtgLPGLogVatLWHCg/GKUHSg EBlwsic4GdojwQB5SwhFuhqU2Fw9V9/4lQyL0ORc1Gy4kfbuYCgzpIAXdqvk9jOz elWvQNifAWgP72sT+/EVr0GJJwOw0JCkTQopU8UCgYEA13As/38NDI69JL1wPJ4H 2Q/X0QYcpJewdp6ZBufh9pqhoIPlA3OWN4H1WX3asm2aZjCxk9ssH1AF7PVl/RbY jO338zkDmAX2occWDF7DKwvwJEnnEHQYq5HyU3HN7hiMuT0IwjPBmDBprCoh7bnm Vs9MwkIq5x34DRq4LLbBDckCgYEApCh/TW98epWrqm6wSe+YMAXRvdO0EYzDbmdc +dPeLc2bjrB1tUHQppRgdTZ3Ve1kNmd3swldUSJpMKtURjY8ZwlrrFlFCN/f45jB q5ArclFyCHMcAzt1xnljjECGMk9KDNkdnJFGDTYr7M0pLYyQG91yB2z0T/0nfA/u zkM3xO0CgYEAnP6OACxfPTlxeNrFd0wzzh4zO3K8/bZzsrtVFSnKIABQ5024o05e FTGb/kmXtLPsdarFW5HRFTui44Sf2TDjkowlxj/jcVWSkJ+K0N6t6aH3+Y+8Foir elRyFwfbndO9MAROSymzfDjwh/zeuFmzudqQfdqiU5DvhNGmaec3dDM= -----END RSA PRIVATE KEY----- vibe.d-0.8.2/tests/tls/dub.json000066400000000000000000000002641324361747700163210ustar00rootroot00000000000000{ "name": "tests", "description": "TLS tunnel and certificate test", "dependencies": { "vibe-d": {"path": "../../"} }, "versions": ["VibeCustomMain"] } vibe.d-0.8.2/tests/tls/server.crt000066400000000000000000000046101324361747700166730ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIDKDCCAhACAQIwDQYJKoZIhvcNAQELBQAwWTELMAkGA1UEBhMCREUxEzARBgNV BAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0 ZDESMBAGA1UEAwwJU2FtcGxlIENBMCAXDTE1MTExMTA2MzkzM1oYDzIxMTUxMDE4 MDYzOTMzWjBZMQswCQYDVQQGEwJERTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8G A1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRIwEAYDVQQDDAlsb2NhbGhv c3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCjqgBkBVyMPsWa64jW vdhfxeLn69SWZkSv2+HZsNOY/NBORt32sO7Pw6mQLHS+60C7FuMIJRorBkezu5xJ PPMven5dnjQuPuUqUIeVfH3i5RtdFLiGNk/88+X3068fhmzNxHE+N/IKjjkKiDJD hd+BBiaZtwdFnEsX6hQ+hT8m0iCcGpiLAwkvdsaWU2cDMvlNnYEiT67cnvdI5NQs VfOWJxyU10v4DLEl3Fl+rwS6eVoejANP2SlcCcGn9c2yoFABj09L5zefMVZ3uAW4 KmDi02MTI3ZCjaQK8ILfROGO2R4zStjFeWAjCV9cdMXt4aX1Pgq9UROo14oNnO8S JaG3AgMBAAEwDQYJKoZIhvcNAQELBQADggEBADU1GFWOikqUHr+a+YrFoodho1kr 5W5tTh3Dmoorbvg38x/cPqUlox+BNXMCaa1liUORlK/5+B6N4dSQw4jgEdrq+cCX E9449REqejQsLX8LYuQTrXQhDwZ8wqC1iSSauP/AYYWny4ZvLwLpHnpUOZQ2VgO9 +8kLFSdtFWFi4Saw+TnnbdVwjiYMSsnCSDgtC0p163VsZXuZ32jId1nDSEe/b/mL nD7VV7GxJgqjqWEQgD4ocvc+CDQ5b76GiWGn4MZmWahmuwbnWaOHL6IQM5jYrnQk 0gV+vusIDBDO0+umtS5tfNdAXLO3tcrJ5+41FtZirZvzxV2+a9FTrlKx2GA= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDhzCCAm+gAwIBAgIJAPPsz4Vg1ss1MA0GCSqGSIb3DQEBCwUAMFkxCzAJBgNV BAYTAkRFMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX aWRnaXRzIFB0eSBMdGQxEjAQBgNVBAMMCVNhbXBsZSBDQTAgFw0xNTExMTEwNjM1 NDFaGA8yMTE1MTAxODA2MzU0MVowWTELMAkGA1UEBhMCREUxEzARBgNVBAgMClNv bWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDESMBAG A1UEAwwJU2FtcGxlIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA qb+I9X26YydJNXmc7q9woXSI5b/5vitB6BHxUIkXkv0qSKpgV5IGQKXKgJK3FLwf vqIemiCbJDiiLamnoXectG/FQxxGXolwmMjGBloHSeCo8yZcQq/3WXL2urH2R8B3 q7Du2TT7pqNFVAvkFVM8Z/rE1kAGBGiF+tTf2Tm0xq3fXk3DOSfTWV9OqHoLNrS7 Cx2E260L2j1SGk4mCYsDjSWtMm5lfVWZ+FjnAMZw22goMgbPEuMQGhzla0yxux4/ kKdgyGKFhXAmPsHkDIOtM+HBV34qnPRGps/ICfqAUx+RyUIK5bWjIaUENhFq0uis dQsX9VDQB489kQJcB/Pt4wIDAQABo1AwTjAdBgNVHQ4EFgQUzQ3L47XiUI3247OT T1WLDFYr/CgwHwYDVR0jBBgwFoAUzQ3L47XiUI3247OTT1WLDFYr/CgwDAYDVR0T BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAX5cSudTaTbxjMb+SPnQlCZngQWKJ AjYvQcSR9iXrdmU9teaf/hwZbutTFPgjAWUktNjfxvmgDEbX8PBJ+VfE1DzxZsG/ V3b1kz6gyFucWcImYu0XEqv4WLA78FuBKvb7XCnrw/Wy8zW0q5Zg6DeHLUd9WABC omciZhk59qy01r/j4o2KPZxmZ3AM5ZqslC5ntO+mt1TtnYRVLPHAF+5MkApraBLU e7MaRVNp49FXzsnA50VuIdu5nppuTvb6OeLjVFFujj6mteGIbUSMdI41KkALl4L6 uqMwL3v4+/BZgTbXJSZcDop/jzMzgGqN5GnpLYx1SFKDxrkAcEEF1bpceA== -----END CERTIFICATE----- vibe.d-0.8.2/tests/tls/server.key000066400000000000000000000032171324361747700166750ustar00rootroot00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEAo6oAZAVcjD7FmuuI1r3YX8Xi5+vUlmZEr9vh2bDTmPzQTkbd 9rDuz8OpkCx0vutAuxbjCCUaKwZHs7ucSTzzL3p+XZ40Lj7lKlCHlXx94uUbXRS4 hjZP/PPl99OvH4ZszcRxPjfyCo45CogyQ4XfgQYmmbcHRZxLF+oUPoU/JtIgnBqY iwMJL3bGllNnAzL5TZ2BIk+u3J73SOTULFXzlicclNdL+AyxJdxZfq8EunlaHowD T9kpXAnBp/XNsqBQAY9PS+c3nzFWd7gFuCpg4tNjEyN2Qo2kCvCC30ThjtkeM0rY xXlgIwlfXHTF7eGl9T4KvVETqNeKDZzvEiWhtwIDAQABAoIBAQCfnvhOlOQUbExx sfJ97h6QGgIZy+pE3W10TvHRTSKyfS/0iC2HojzoKZ7A3Hroka1KSyIWGYmSGMfp xbrBu047Ki8Aw4GE8Ra01GHIK+jjWCv99m2ZiHMu8/mAYdbU2lhXv5Xq5smL/fYo DXloXbMEtakEFnxjKfIbWtNvvqk/A/YMuKFzKGMNth5FuAV1XvDb8w7+wwfmVwBe KsNzEQAZSZPErEi3R7tM7nC55nRyOOGAShdMGFcKtNJtUWLR/QFfPcJc8D04h2yb JcRiGsL6NBkrSZ5G83l/xkuhZ8MDFu/Jaf3pIeneQyEWIhzKeymrDNOEzZyd7N0X gRd8Y3xBAoGBANNJrPnnVBxQX5u+BvTKkgpzzzFfPY/i1pz+osm/8N9fFc/GcEX+ tdxmWJkLLnFpDHuZIc02BZ2sWVFVra78G/WsJUfrfK6YdndXXnM/0actdF2XbsVI kq93OjEA98wMJuo67KZJiJd3MVuVwrFkgqJhUIEBBzjR23b1p+9WD4/RAoGBAMZM WovrlYYdirUcWDl8qIB1MoQkTqjwYgrzpX9n7msTxpFr0eYSIx1NauGasyKF2N1c 7LVLjClhUT2A9VE8dx9aZFvwLIb04WmU25CIOfIWv2U5bws3w7LjSXZz0rey7RU7 wE01uzcZnMoa70yIss8JpQ0Gc3RXoa7Fhc32BUMHAoGAWjqFTvc12R2NpsHA0LrN IP+RxKDKdm7FfafUNtnr8Ef31ZIFki6S1TszrK+0tqPIu+OKJstiHJJkVjKDiE2L Vx+bkBoFVb4wIQjDge4IBx+HKQypNkCmu53r0M98ArxRxgdB1kViumQhRN4wlXa5 vsRWD7Ezt1UPJr8DZ1bWMHECgYEAlWGLjIBKQaAbj9fsdlH8NdkT1wvq3cVIdmuZ LuNCbhOVsJMCqkjbfwWFELMTY1xlREzuXJyu17ViF+z/4NSmAE597+x7/qaW8Iyc 4sJctIyCXmTnzBGUMTybaMpT4OK/SxGaChACGr4GqRGlV4ha+zCOz8MeUnR5bkmK RN+ikx0CgYAKuRDHuqgA3pReP9AFRuuysIQdAuDvfP9lXi8U8DRwPop3AeD7Y/1A q4uGoHHmm4uIPTekFCAiIaojjN2x21SUmQucKiqKg6SHC6Gkt4A17ZWxc/655W6z X73t+wPK3DLZaFoVWge6BXFcy6NDQODoZnEMH0wfPSAj+lk6Rc5BvA== -----END RSA PRIVATE KEY----- vibe.d-0.8.2/tests/tls/source/000077500000000000000000000000001324361747700161525ustar00rootroot00000000000000vibe.d-0.8.2/tests/tls/source/app.d000066400000000000000000000123321324361747700171000ustar00rootroot00000000000000module app; import vibe.core.core; import vibe.core.log; import vibe.core.stream; import vibe.stream.operations; import vibe.stream.wrapper; import vibe.stream.tls; import vibe.stream.taskpipe; import std.encoding : sanitize; TLSContext createContext(TLSContextKind kind, string cert, string key, string trust, TLSPeerValidationMode mode) { auto ctx = createTLSContext(kind); ctx.peerValidationMode = mode; if (cert.length) ctx.useCertificateChainFile(cert); if (key.length) ctx.usePrivateKeyFile(key); if (trust.length) ctx.useTrustedCertificateFile(trust); return ctx; } void createPipePair(out Stream a, out Stream b) { auto p1 = new TaskPipe; auto p2 = new TaskPipe; a = new ProxyStream(p1, p2); b = new ProxyStream(p2, p1); } void testConn( bool cli_fail, string cli_cert, string cli_key, string cli_trust, string cli_peer, TLSPeerValidationMode cli_mode, bool srv_fail, string srv_cert, string srv_key, string srv_trust, string srv_peer, TLSPeerValidationMode srv_mode) { Stream ctunnel, stunnel; logInfo("Test client %s (%s, %s, %s, %s), server %s (%s, %s, %s, %s)", cli_fail ? "fail" : "success", cli_cert, cli_key, cli_trust, cli_peer, srv_fail ? "fail" : "success", srv_cert, srv_key, srv_trust, srv_peer); createPipePair(ctunnel, stunnel); auto t1 = runTask({ auto sctx = createContext(TLSContextKind.server, srv_cert, srv_key, srv_trust, srv_mode); TLSStream sconn; try { sconn = createTLSStream(stunnel, sctx, TLSStreamState.accepting, srv_peer); logDiagnostic("Successfully initiated server tunnel."); assert(!srv_fail, "Server expected to fail TLS connection."); } catch (Exception e) { if (srv_fail) logDiagnostic("Server tunnel failed as expected: %s", e.msg); else logError("Server tunnel failed: %s", e.toString().sanitize); assert(srv_fail, "Server not expected to fail TLS connection."); return; } if (cli_fail) return; assert(sconn.readLine() == "foo"); sconn.write("bar\r\n"); sconn.finalize(); }); auto t2 = runTask({ auto cctx = createContext(TLSContextKind.client, cli_cert, cli_key, cli_trust, cli_mode); TLSStream cconn; try { cconn = createTLSStream(ctunnel, cctx, TLSStreamState.connecting, cli_peer); logDiagnostic("Successfully initiated client tunnel."); assert(!cli_fail, "Client expected to fail TLS connection."); } catch (Exception e) { if (cli_fail) logDiagnostic("Client tunnel failed as expected: %s", e.msg); else logError("Client tunnel failed: %s", e.toString().sanitize); assert(cli_fail, "Client not expected to fail TLS connection."); return; } if (srv_fail) return; cconn.write("foo\r\n"); assert(cconn.readLine() == "bar"); cconn.finalize(); }); t1.join(); t2.join(); } void test() { // // Server certificates // // fail for untrusted server cert testConn( true, null, null, null, "localhost", TLSPeerValidationMode.trustedCert, true, "server.crt", "server.key", null, null, TLSPeerValidationMode.none ); // succeed for untrusted server cert with disabled validation testConn( false, null, null, null, null, TLSPeerValidationMode.none, false, "server.crt", "server.key", null, null, TLSPeerValidationMode.none ); // succeed for untrusted server cert if ignored testConn( false, null, null, null, "localhost", TLSPeerValidationMode.requireCert|TLSPeerValidationMode.checkPeer, false, "server.crt", "server.key", null, null, TLSPeerValidationMode.none ); // fail for trusted server cert with no/wrong host name testConn( true, null, null, "ca.crt", "wronghost", TLSPeerValidationMode.trustedCert, false, "server.crt", "server.key", null, null, TLSPeerValidationMode.none ); // succeed for trusted server cert with no/wrong host name if ignored testConn( false, null, null, "ca.crt", "wronghost", TLSPeerValidationMode.trustedCert & ~TLSPeerValidationMode.checkPeer, false, "server.crt", "server.key", null, null, TLSPeerValidationMode.none ); // succeed for trusted server cert testConn( false, null, null, "ca.crt", "localhost", TLSPeerValidationMode.trustedCert, false, "server.crt", "server.key", null, null, TLSPeerValidationMode.none ); // succeed with no certificates /*testConn( false, null, null, null, null, false, null, null, null, null );*/ // // Client certificates // // fail for untrusted server cert testConn( true, "client.crt", "client.key", null, null, TLSPeerValidationMode.none, true, "server.crt", "server.key", null, null, TLSPeerValidationMode.trustedCert ); // succeed for untrusted server cert with disabled validation testConn( false, "client.crt", "client.key", null, null, TLSPeerValidationMode.none, false, "server.crt", "server.key", null, null, TLSPeerValidationMode.none ); // succeed for untrusted server cert if ignored testConn( false, "client.crt", "client.key", null, null, TLSPeerValidationMode.none, false, "server.crt", "server.key", null, null, TLSPeerValidationMode.requireCert ); // succeed for trusted server cert testConn( false, "client.crt", "client.key", null, null, TLSPeerValidationMode.none, false, "server.crt", "server.key", "ca.crt", null, TLSPeerValidationMode.trustedCert & ~TLSPeerValidationMode.checkPeer ); exitEventLoop(); } void main() { import std.functional : toDelegate; runTask(toDelegate(&test)); runEventLoop(); } vibe.d-0.8.2/tests/vibe.core.concurrency.1408/000077500000000000000000000000001324361747700206505ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.core.concurrency.1408/dub.sdl000066400000000000000000000002001324361747700221160ustar00rootroot00000000000000name "tests" description "std.concurrency integration issue" dependency "vibe-d:core" path="../../" versions "VibeDefaultMain" vibe.d-0.8.2/tests/vibe.core.concurrency.1408/source/000077500000000000000000000000001324361747700221505ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.core.concurrency.1408/source/app.d000066400000000000000000000016161324361747700231010ustar00rootroot00000000000000import vibe.core.concurrency; import vibe.core.core; import vibe.core.log; import core.time : msecs; import std.functional : toDelegate; void test() { auto t = runTask({ bool gotit; receive((int i) { assert(i == 10); gotit = true; }); assert(gotit); sleep(10.msecs); }); t.tid.send(10); t.tid.send(11); // never received t.join(); // ensure that recycled fibers will get a clean message queue auto t2 = runTask({ bool gotit; receive((int i) { assert(i == 12); gotit = true; }); assert(gotit); }); t2.tid.send(12); t2.join(); // test worker tasks auto t3 = runWorkerTaskH({ bool gotit; receive((int i) { assert(i == 13); gotit = true; }); assert(gotit); }); t3.tid.send(13); sleep(10.msecs); logInfo("Success."); exitEventLoop(true); } shared static this() { setLogFormat(FileLogger.Format.threadTime, FileLogger.Format.threadTime); runTask(toDelegate(&test)); } vibe.d-0.8.2/tests/vibe.core.core.1590/000077500000000000000000000000001324361747700172505ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.core.core.1590/dub.sdl000066400000000000000000000001211324361747700205200ustar00rootroot00000000000000name "tests" description "Semaphore hang" dependency "vibe-d:core" path="../../" vibe.d-0.8.2/tests/vibe.core.core.1590/source/000077500000000000000000000000001324361747700205505ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.core.core.1590/source/app.d000066400000000000000000000026161324361747700215020ustar00rootroot00000000000000import std.stdio; import std.socket; import std.datetime; import std.functional; import core.time; import vibe.core.core; import vibe.core.log; import vibe.core.concurrency; import vibe.core.connectionpool; class Conn {} void main() { runTask({ // create pool with 2 max connections bool[int] results; auto pool = new ConnectionPool!Conn({ return new Conn; }, 2); auto task = Task.getThis(); // main task void worker(int id) { { auto conn = pool.lockConnection(); // <-- worker(4) hangs here sleep(1.msecs); // <-- important, without sleep everything works fine } task.send(id); // send signal to the main task } // run 4 tasks (2 * pool max connections) runTask(&worker, 1); runTask(&worker, 2); runTask(&worker, 3); runTask(&worker, 4); // wait for first signal and run one more task results[receiveOnly!int] = true; runTask(&worker, 5); // wait for other signals results[receiveOnly!int] = true; results[receiveOnly!int] = true; results[receiveOnly!int] = true; results[receiveOnly!int] = true; foreach (r; results.byKey) assert(r >= 1 && r <= 5); exitEventLoop(); }); setTimer(1.seconds, { assert(false, "Test has hung."); }); runEventLoop(); } vibe.d-0.8.2/tests/vibe.core.core.1742/000077500000000000000000000000001324361747700172475ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.core.core.1742/dub.sdl000066400000000000000000000001211324361747700205170ustar00rootroot00000000000000name "tests" description "Semaphore hang" dependency "vibe-d:core" path="../../" vibe.d-0.8.2/tests/vibe.core.core.1742/source/000077500000000000000000000000001324361747700205475ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.core.core.1742/source/app.d000066400000000000000000000012621324361747700214750ustar00rootroot00000000000000import std.stdio; import std.socket; import std.datetime; import std.functional; import core.time; import vibe.core.core; import vibe.core.log; import vibe.core.concurrency; import vibe.core.connectionpool; class Conn {} void main() { auto g = new Generator!int({ auto t = runTask({}); t.join(); yield(2); }); assert(!g.empty); assert(g.front == 2); g.popFront(); assert(g.empty); runTask({ auto g2 = new Generator!int({ auto t = runTask({}); t.join(); yield(1); }); assert(!g2.empty); assert(g2.front == 1); g2.popFront(); assert(g2.empty); exitEventLoop(); }); setTimer(5.seconds, { assert(false, "Test has hung."); }); runApplication(); } vibe.d-0.8.2/tests/vibe.core.net.1376/000077500000000000000000000000001324361747700171105ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.core.net.1376/dub.sdl000066400000000000000000000001671324361747700203720ustar00rootroot00000000000000name "tests" description "TCP disconnect task issue" dependency "vibe-d:core" path="../../" versions "VibeDefaultMain" vibe.d-0.8.2/tests/vibe.core.net.1376/source/000077500000000000000000000000001324361747700204105ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.core.net.1376/source/app.d000066400000000000000000000012441324361747700213360ustar00rootroot00000000000000import vibe.core.core; import vibe.core.net; import core.time : msecs; shared static this() { listenTCP(11375,(conn){ auto td = runTask!TCPConnection((conn) { ubyte [3] buf; try { conn.read(buf); assert(false, "Expected read() to throw an exception."); } catch (Exception) {} // expected }, conn); sleep(10.msecs); conn.close(); }); runTask({ try { auto conn = connectTCP("127.0.0.1", 11375); conn.write("a"); conn.close(); } catch (Exception e) assert(false, e.msg); try { auto conn = connectTCP("127.0.0.1", 11375); conn.close(); } catch (Exception e) assert(false, e.msg); sleep(50.msecs); exitEventLoop(); }); } vibe.d-0.8.2/tests/vibe.core.net.1429/000077500000000000000000000000001324361747700171075ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.core.net.1429/dub.sdl000066400000000000000000000001671324361747700203710ustar00rootroot00000000000000name "tests" description "TCP disconnect task issue" dependency "vibe-d:core" path="../../" versions "VibeDefaultMain" vibe.d-0.8.2/tests/vibe.core.net.1429/source/000077500000000000000000000000001324361747700204075ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.core.net.1429/source/app.d000066400000000000000000000015331324361747700213360ustar00rootroot00000000000000import vibe.core.core; import vibe.core.log : logInfo; import vibe.core.net; import core.time : msecs; import std.datetime : Clock, UTC; shared static this() { runTask({ sleep(500.msecs); assert(false, "Receive call did not return in a timely manner. Killing process."); }); runTask({ auto udp = listenUDP(11429, "127.0.0.1"); auto start = Clock.currTime(UTC()); try { udp.recv(100.msecs); assert(false, "Timeout did not occur."); } catch (Exception e) { logInfo("Exception received: %s", e.msg); auto duration = Clock.currTime(UTC()) - start; assert(duration >= 99.msecs, "Timeout occurred too early ("~duration.toString~")."); assert(duration >= 99.msecs && duration < 150.msecs, "Timeout occurred too late ("~duration.toString~")."); logInfo("UDP receive timeout test was successful."); exitEventLoop(); } }); } vibe.d-0.8.2/tests/vibe.core.net.1441/000077500000000000000000000000001324361747700171015ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.core.net.1441/dub.sdl000066400000000000000000000001671324361747700203630ustar00rootroot00000000000000name "tests" description "TCP disconnect task issue" dependency "vibe-d:core" path="../../" versions "VibeDefaultMain" vibe.d-0.8.2/tests/vibe.core.net.1441/source/000077500000000000000000000000001324361747700204015ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.core.net.1441/source/app.d000066400000000000000000000005451324361747700213320ustar00rootroot00000000000000import vibe.core.core; import vibe.core.net; import core.time : msecs; shared static this() { import vibe.core.log; bool done = false; listenTCP(11375,(conn){ conn.write("foo"); conn.close(); done = true; }); runTask({ auto conn = connectTCP("127.0.0.1", 11375); conn.close(); sleep(50.msecs); assert(done); exitEventLoop(); }); } vibe.d-0.8.2/tests/vibe.core.net.1452/000077500000000000000000000000001324361747700171035ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.core.net.1452/dub.sdl000066400000000000000000000002011324361747700203520ustar00rootroot00000000000000name "tests" description "Invalid memory operation on TCP connection leakage at shutdown" dependency "vibe-d:core" path="../../" vibe.d-0.8.2/tests/vibe.core.net.1452/source/000077500000000000000000000000001324361747700204035ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.core.net.1452/source/app.d000066400000000000000000000004231324361747700213270ustar00rootroot00000000000000import vibe.core.core; import vibe.core.net; import core.time : msecs; class C { TCPConnection m_conn; this() { m_conn = connectTCP("google.com", 443); } ~this() { m_conn.close(); } } void main() { auto c = new C; // let druntime collect c during shutdown } vibe.d-0.8.2/tests/vibe.core.net.1726/000077500000000000000000000000001324361747700171075ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.core.net.1726/dub.sdl000066400000000000000000000001341324361747700203630ustar00rootroot00000000000000name "tests" description "TCP disconnect task issue" dependency "vibe-d:core" path="../../" vibe.d-0.8.2/tests/vibe.core.net.1726/source/000077500000000000000000000000001324361747700204075ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.core.net.1726/source/app.d000066400000000000000000000025571324361747700213450ustar00rootroot00000000000000import vibe.core.core; import vibe.core.net; import core.time : msecs; import vibe.core.log; ubyte[] buf; void performTest(bool reverse) { auto l = listenTCP(11375, (conn) { bool read_ex = false; bool write_ex = false; auto rt = runTask!TCPConnection((conn) { try { conn.read(buf); assert(false, "Expected read() to throw an exception."); } catch (Exception) { read_ex = true; conn.close(); logInfo("read out"); } // expected }, conn); auto wt = runTask!TCPConnection((conn) { sleep(reverse ? 100.msecs : 20.msecs); // give the connection time to establish try { conn.write(buf); assert(false, "Expected write() to throw an exception."); } catch (Exception) { write_ex = true; conn.close(); logInfo("write out"); } // expected }, conn); rt.join(); wt.join(); assert(read_ex, "No read exception thrown"); assert(write_ex, "No write exception thrown"); logInfo("Test has finished successfully."); exitEventLoop(); }, "127.0.0.1"); runTask({ try { auto conn = connectTCP("127.0.0.1", 11375); sleep(reverse ? 20.msecs : 100.msecs); conn.close(); } catch (Exception e) assert(false, e.msg); }); runEventLoop(); l.stopListening(); } void main() { setTimer(10000.msecs, { assert(false, "Test has hung."); }); buf = new ubyte[512*1024*1024]; performTest(false); performTest(true); } vibe.d-0.8.2/tests/vibe.data.json.1504/000077500000000000000000000000001324361747700172455ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.data.json.1504/dub.json000066400000000000000000000002731324361747700207140ustar00rootroot00000000000000{ "name": "tests", "description": "Command-line argument test", "dependencies": { "vibe-d:data": {"path": "../../"}, "vibe-d:core": {"path": "../../"} } } vibe.d-0.8.2/tests/vibe.data.json.1504/source/000077500000000000000000000000001324361747700205455ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.data.json.1504/source/app.d000066400000000000000000000004711324361747700214740ustar00rootroot00000000000000import vibe.data.json; void main() { auto data = `[ [1], [2] ] `; Json j = data.parseJson; import std.array : appender; auto a = appender!(int[]); foreach (i; 0 .. 1_000) a ~= i; import std.stdio; write(j[0][0] == 1 ? "PASS" : "FAIL"); write(j[1][0] == 2 ? "PASS" : "FAIL"); } vibe.d-0.8.2/tests/vibe.http.client.1389/000077500000000000000000000000001324361747700176335ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.http.client.1389/dub.json000066400000000000000000000001631324361747700213000ustar00rootroot00000000000000{ "name": "1389", "dependencies": { "vibe-d:http": { "path": "../../" } }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/tests/vibe.http.client.1389/source/000077500000000000000000000000001324361747700211335ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.http.client.1389/source/app.d000066400000000000000000000022631324361747700220630ustar00rootroot00000000000000import vibe.core.core; import vibe.core.log; import vibe.http.client; import vibe.http.server; import vibe.stream.operations : readAllUTF8; import std.exception : assertThrown; shared static this() { // determine external network interface auto ec = connectTCP("vibed.org", 80); auto li = ec.localAddress; ec.close(); li.port = 0; logInfo("External interface: %s", li.toString()); auto settings = new HTTPServerSettings; // 10k + issue number -> Avoid bind errors settings.port = 11389; settings.bindAddresses = [li.toAddressString()]; listenHTTP(settings, (req, res) { if (req.clientAddress.toAddressString() == "127.0.0.1") res.writeBody("local"); else res.writeBody("remote"); }); runTask({ scope(exit) exitEventLoop(true); auto url = "http://"~li.toAddressString~":11389/"; auto cs = new HTTPClientSettings; cs.networkInterface = resolveHost("127.0.0.1"); auto res = requestHTTP(url, null, cs).bodyReader.readAllUTF8(); assert(res == "local", "Unexpected reply: "~res); auto cs2 = new HTTPClientSettings; cs2.networkInterface = li; res = requestHTTP(url, null, cs2).bodyReader.readAllUTF8(); assert(res == "remote", "Unexpected reply: "~res); }); } vibe.d-0.8.2/tests/vibe.http.client.1426/000077500000000000000000000000001324361747700176235ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.http.client.1426/dub.sdl000066400000000000000000000002171324361747700211010ustar00rootroot00000000000000name "tests" description "Tests body transfer for non-keep-alive connections" dependency "vibe-d:http" path="../.." versions "VibeDefaultMain" vibe.d-0.8.2/tests/vibe.http.client.1426/source/000077500000000000000000000000001324361747700211235ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.http.client.1426/source/app.d000066400000000000000000000006501324361747700220510ustar00rootroot00000000000000import vibe.core.core; import vibe.core.net; import vibe.http.client; import vibe.stream.operations; shared static this() { listenTCP(11426, (TCPConnection c) { c.write("HTTP/1.1 200 OK\r\nConnection: Close\r\n\r\nqwerty"); }, "127.0.0.1"); runTask({ requestHTTP("http://127.0.0.1:11426", (scope req) {}, (scope res) { assert(res.bodyReader.readAllUTF8() == "qwerty"); } ); exitEventLoop(); }); } vibe.d-0.8.2/tests/vibe.http.server.1388/000077500000000000000000000000001324361747700176625ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.http.server.1388/dub.sdl000066400000000000000000000001171324361747700211370ustar00rootroot00000000000000name "tests" description "IPv6 request" dependency "vibe-d:http" path="../../" vibe.d-0.8.2/tests/vibe.http.server.1388/source/000077500000000000000000000000001324361747700211625ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.http.server.1388/source/app.d000066400000000000000000000021121324361747700221030ustar00rootroot00000000000000import vibe.core.core; import vibe.core.net; import vibe.http.server; import vibe.stream.operations; import core.time : msecs; import std.datetime : Clock, UTC; void main() { version (none) { auto s1 = new HTTPServerSettings; s1.bindAddresses = ["::1"]; s1.port = 11388; listenHTTP(s1, &handler); runTask({ auto conn = connectTCP("::1", 11388); conn.write("GET / HTTP/1.1\r\nHost: [::1]\r\n\r\n"); string res = cast(string)conn.readLine(); assert(res == "HTTP/1.1 200 OK", res); while (conn.readLine().length > 0) {} assert(cast(string)conn.readLine() == "success"); conn.write("GET / HTTP/1.1\r\nHost: [::1]:11388\r\n\r\n"); res = cast(string)conn.readLine(); assert(res == "HTTP/1.1 200 OK", res); while (conn.readLine().length > 0) {} assert(cast(string)conn.readLine() == "success"); conn.close(); exitEventLoop(); }); runApplication(); } import vibe.core.log : logWarn; logWarn("Test disabled due to issues listening on ::1 on Travis-CI"); } void handler(scope HTTPServerRequest req, scope HTTPServerResponse res) { res.writeBody("success\r\n"); } vibe.d-0.8.2/tests/vibe.http.server.1721/000077500000000000000000000000001324361747700176515ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.http.server.1721/dub.sdl000066400000000000000000000001651324361747700211310ustar00rootroot00000000000000name "tests" description "Wrong host header tests" dependency "vibe-d:http" path="../../" versions "VibeDefaultMain" vibe.d-0.8.2/tests/vibe.http.server.1721/source/000077500000000000000000000000001324361747700211515ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.http.server.1721/source/app.d000066400000000000000000000023251324361747700221000ustar00rootroot00000000000000import vibe.core.core; import vibe.core.net; import vibe.http.server; import vibe.stream.operations; import std.algorithm.searching : startsWith; import std.string : toLower; import core.time : seconds; shared static this() { auto s1 = new HTTPServerSettings; s1.options &= ~HTTPServerOption.errorStackTraces; s1.bindAddresses = ["127.0.0.1"]; s1.port = 11721; listenHTTP(s1, &handler); runTask({ scope (exit) exitEventLoop(); try { auto conn = connectTCP("127.0.0.1", 11721); conn.write("GET / HTTP/1.0\r\n\r\n"); string res = cast(string)conn.readLine(); assert(res == "HTTP/1.0 200 OK", res); while (true) { auto ln = conn.readLine(); if (!ln.length) break; assert(!(cast(const(char)[])ln).toLower().startsWith("transfer-encoding:"), "Server sent transfer encoding on HTTP/1.0 connection."); } assert(cast(string)conn.readLine() == "Hello, World!"); assert(!conn.waitForData(1.seconds), "Connection not closed by server after response was written."); assert(conn.empty); } catch (Exception e) { assert(false, e.msg); } }); } void handler(scope HTTPServerRequest req, scope HTTPServerResponse res) { res.bodyWriter.write("Hello, "); res.bodyWriter.write("World!\r\n"); } vibe.d-0.8.2/tests/vibe.http.server.host-header/000077500000000000000000000000001324361747700214625ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.http.server.host-header/dub.sdl000066400000000000000000000001651324361747700227420ustar00rootroot00000000000000name "tests" description "Wrong host header tests" dependency "vibe-d:http" path="../../" versions "VibeDefaultMain" vibe.d-0.8.2/tests/vibe.http.server.host-header/source/000077500000000000000000000000001324361747700227625ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.http.server.host-header/source/app.d000066400000000000000000000035201324361747700237070ustar00rootroot00000000000000import vibe.core.core; import vibe.core.log : logInfo; import vibe.core.net; import vibe.http.server; import vibe.stream.operations; import core.time : msecs, seconds; import std.datetime : Clock, UTC; shared static this() { auto s1 = new HTTPServerSettings; s1.options &= ~HTTPServerOption.errorStackTraces; s1.bindAddresses = ["127.0.0.1"]; s1.port = 11388; listenHTTP(s1, &handler); runTask({ try { auto conn = connectTCP("127.0.0.1", 11388); conn.write("GET / HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n"); string res = cast(string)conn.readLine(); assert(res == "HTTP/1.1 200 OK", res); while (conn.readLine().length > 0) {} assert(cast(string)conn.readLine() == "success"); logInfo("1.1 with Host header OK."); conn.write("GET / HTTP/1.1\r\n\r\n"); res = cast(string)conn.readLine(); assert(res == "HTTP/1.1 400 Bad Request", res); while (conn.readLine().length > 0) {} ubyte[39] buf; conn.read(buf); assert(cast(string)buf == "400 - Bad Request\n\nMissing Host header."); assert(!conn.waitForData(1.seconds)); assert(conn.empty); conn.close(); assert(!conn.connected); logInfo("1.1 without Host header OK."); conn = connectTCP("127.0.0.1", 11388); conn.write("GET / HTTP/1.0\r\n\r\n"); res = cast(string)conn.readLine(); assert(res == "HTTP/1.0 200 OK", res); while (conn.readLine().length > 0) {} assert(cast(string)conn.readLine() == "success"); assert(!conn.waitForData(1.seconds)); assert(conn.empty); conn.close(); assert(!conn.connected); assert(!conn.waitForData(1.seconds)); assert(!conn.connected && conn.empty); logInfo("1.0 without Host header OK."); } catch (Exception e) { assert(false, e.msg); } scope (exit) exitEventLoop(); }); } void handler(scope HTTPServerRequest req, scope HTTPServerResponse res) { res.writeBody("success\r\n"); } vibe.d-0.8.2/tests/vibe.http.server.listenHTTP/000077500000000000000000000000001324361747700212555ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.http.server.listenHTTP/dub.sdl000066400000000000000000000001561324361747700225350ustar00rootroot00000000000000name "tests" description "listenHTTP tests" dependency "vibe-d:http" path="../../" versions "VibeDefaultMain" vibe.d-0.8.2/tests/vibe.http.server.listenHTTP/source/000077500000000000000000000000001324361747700225555ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.http.server.listenHTTP/source/app.d000066400000000000000000000010001324361747700234710ustar00rootroot00000000000000import vibe.core.core; import vibe.core.core; import vibe.core.log; import vibe.http.client; import vibe.http.server; import vibe.stream.operations : readAllUTF8; shared static this() { listenHTTP(":11721", (scope req, scope res) { res.writeBody("Hello world."); }); runTask({ scope (exit) exitEventLoop(); auto res = requestHTTP("http://0.0.0.0:11721"); assert(res.statusCode == HTTPStatus.ok); assert(res.bodyReader.readAllUTF8 == "Hello world."); logInfo("All web tests succeeded."); }); } vibe.d-0.8.2/tests/vibe.http.websocket/000077500000000000000000000000001324361747700177405ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.http.websocket/dub.json000066400000000000000000000001631324361747700214050ustar00rootroot00000000000000{ "name": "1332", "dependencies": { "vibe-d:http": { "path": "../../" } }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/tests/vibe.http.websocket/source/000077500000000000000000000000001324361747700212405ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.http.websocket/source/app.d000066400000000000000000000013661324361747700221730ustar00rootroot00000000000000import vibe.core.core; import vibe.core.log; import vibe.inet.url; import vibe.http.server; import vibe.http.websockets; shared static this() { auto settings = new HTTPServerSettings; // 10k + issue number -> Avoid bind errors settings.port = 11332; settings.bindAddresses = ["::1", "127.0.0.1"]; listenHTTP(settings, handleWebSockets((scope ws) { assert(ws.receiveText() == "foo"); ws.send("hello"); assert(ws.receiveText() == "bar"); ws.close(); })); runTask({ scope(exit) exitEventLoop(true); connectWebSocket(URL("http://127.0.0.1:11332/"), (scope ws) { ws.send("foo"); assert(ws.receiveText() == "hello"); ws.send("bar"); assert(!ws.waitForData); ws.close(); logInfo("WebSocket test successful"); }); }); } vibe.d-0.8.2/tests/vibe.web.rest.1125/000077500000000000000000000000001324361747700171145ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.web.rest.1125/.gitignore000066400000000000000000000000051324361747700210770ustar00rootroot000000000000001125 vibe.d-0.8.2/tests/vibe.web.rest.1125/dub.json000066400000000000000000000001561324361747700205630ustar00rootroot00000000000000{ "name": "1125", "dependencies": { "vibe-d": { "path": "../../" } }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/tests/vibe.web.rest.1125/source/000077500000000000000000000000001324361747700204145ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.web.rest.1125/source/app.d000066400000000000000000000016551324361747700213500ustar00rootroot00000000000000import vibe.d; import std.datetime; shared static this() { auto settings = new HTTPServerSettings; // 10k + issue number -> Avoid bind errors settings.port = 11125; settings.bindAddresses = ["::1", "127.0.0.1"]; auto router = new URLRouter; router.registerRestInterface(new Llama); listenHTTP(settings, router); // Client setTimer(1.seconds, { scope(exit) exitEventLoop(true); auto api = new RestInterfaceClient!ILlama("http://127.0.0.1:11125/"); auto r = api.updateLlama("llama"); assert(r == "llama", "[vibe.web.rest.1125.Client] Expected llama, got: " ~ r); }); } interface ILlama { @bodyParam("llama", "llama") string updateLlama(string llama = null); } class Llama : ILlama { string updateLlama(string llama) { assert(llama == "llama", "[vibe.web.rest.1125.Server] Expected llama, got: " ~ llama); return llama; } } vibe.d-0.8.2/tests/vibe.web.rest.1140/000077500000000000000000000000001324361747700171115ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.web.rest.1140/.gitignore000066400000000000000000000000051324361747700210740ustar00rootroot000000000000001140 vibe.d-0.8.2/tests/vibe.web.rest.1140/dub.json000066400000000000000000000001561324361747700205600ustar00rootroot00000000000000{ "name": "1140", "dependencies": { "vibe-d": { "path": "../../" } }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/tests/vibe.web.rest.1140/source/000077500000000000000000000000001324361747700204115ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.web.rest.1140/source/app.d000066400000000000000000000034331324361747700213410ustar00rootroot00000000000000import std.datetime; import vibe.d; interface IOrientDBRoot { @property IOrientDBQuery query(); } interface IOrientDBQuery { @method(HTTPMethod.GET) @path(":db_name/sql/:query/:result_set_size") Json sql(string _db_name, string _query, int _result_set_size); @method(HTTPMethod.GET) @path(":db_name/sql2/:query/:result_set_size") Json sql2(string _db_name, string _query, int _result_set_size); } class OrientDBRoot : IOrientDBRoot { private OrientDBQuery m_query; override @property IOrientDBQuery query() { return m_query; } public this() { this.m_query = new OrientDBQuery(); } } class OrientDBQuery : IOrientDBQuery { override Json sql(string _db_name, string _query, int _result_set_size) { assert(_db_name == Param1, _db_name); assert(_query == Param2, _query); assert(_result_set_size == Param3, to!string(_result_set_size)); return Json.emptyObject; } override Json sql2(string _db_name, string _query, int _result_set_size) { assert(_db_name == Param1, _db_name); assert(_query == Param2ALT, _query); assert(_result_set_size == Param3, to!string(_result_set_size)); return Json.emptyObject; } } enum Param1 = "twitter_data"; enum Param2 = "select DownloadedDateTime from Message"; enum Param2ALT = "tricky/param/eter"; enum Param3 = 1; shared static this() { auto settings = new HTTPServerSettings; // 10k + issue number -> Avoid bind errors settings.port = 11140; settings.bindAddresses = ["::1", "127.0.0.1"]; auto router = new URLRouter; router.registerRestInterface(new OrientDBRoot); listenHTTP(settings, router); setTimer(1.seconds, { scope (exit) exitEventLoop(true); auto api = new RestInterfaceClient!IOrientDBRoot( "http://127.0.0.1:11140/"); api.query.sql(Param1, Param2, Param3); api.query.sql2(Param1, Param2ALT, Param3); }); } vibe.d-0.8.2/tests/vibe.web.rest.1230/000077500000000000000000000000001324361747700171115ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.web.rest.1230/dub.json000066400000000000000000000001561324361747700205600ustar00rootroot00000000000000{ "name": "1140", "dependencies": { "vibe-d": { "path": "../../" } }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/tests/vibe.web.rest.1230/source/000077500000000000000000000000001324361747700204115ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.web.rest.1230/source/app.d000066400000000000000000000027721324361747700213460ustar00rootroot00000000000000import std.datetime; import vibe.d; interface ITestAPI { string postDefault(int value, bool check = true); } class Test : ITestAPI { string postDefault(int value, bool check = true) { import std.format; return format("Value: %s, Check: %s", value, check); } } shared static this() { auto settings = new HTTPServerSettings; settings.port = 11230; settings.bindAddresses = ["::1", "127.0.0.1"]; auto router = new URLRouter; router.registerRestInterface(new Test); listenHTTP(settings, router); runTask({ scope (exit) exitEventLoop(true); auto api = new RestInterfaceClient!ITestAPI( "http://127.0.0.1:11230/"); assert(api.postDefault(42, true) == "Value: 42, Check: true"); assert(api.postDefault(42, false) == "Value: 42, Check: false"); assert(api.postDefault(42) == "Value: 42, Check: true"); requestHTTP("http://127.0.0.1:11230/default", (scope req) { req.method = HTTPMethod.POST; req.writeBody(cast(const(ubyte)[])`{"value":42}`, "application/json"); }, (scope res) { assert(res.statusCode == HTTPStatus.ok); assert(res.readJson.get!string == "Value: 42, Check: true"); } ); requestHTTP("http://127.0.0.1:11230/default", (scope req) { req.method = HTTPMethod.POST; req.writeBody(cast(const(ubyte)[])`{"value":42,"check":true}`, "application/json"); }, (scope res) { assert(res.statusCode == HTTPStatus.ok); assert(res.readJson.get!string == "Value: 42, Check: true"); } ); logInfo("Tests passed."); }); } vibe.d-0.8.2/tests/vibe.web.rest.1922/000077500000000000000000000000001324361747700171215ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.web.rest.1922/.gitignore000066400000000000000000000000051324361747700211040ustar00rootroot000000000000001922 vibe.d-0.8.2/tests/vibe.web.rest.1922/dub.sdl000066400000000000000000000000561324361747700204000ustar00rootroot00000000000000name "1922" dependency "vibe-d" path="../../" vibe.d-0.8.2/tests/vibe.web.rest.1922/source/000077500000000000000000000000001324361747700204215ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.web.rest.1922/source/app.d000066400000000000000000000051331324361747700213500ustar00rootroot00000000000000import vibe.d; import std.datetime; import vibe.web.auth; void main() { auto settings = new HTTPServerSettings; // 10k + issue number -> Avoid bind errors settings.port = 11922; settings.bindAddresses = ["::1", "127.0.0.1"]; settings.sessionStore = new MemorySessionStore(); auto router = new URLRouter; router.registerRestInterface(new AuthAPI); listenHTTP(settings, router); runTask({ scope(exit) exitEventLoop(); void test(string endpoint, string user, HTTPStatus expected = HTTPStatus.ok){ requestHTTP("http://127.0.0.1:11922"~endpoint, (scope req){ if(user !is null) req.headers["AuthUser"] = user; }, (scope res) { assert(res.statusCode == expected, format("Unexpected status code for GET %s (%s): %s\n%s", endpoint, user, res.statusCode,res.readJson)); }); } test("/non_auth_number?num=5", null); test("/non_auth_number?num=5", "admin"); test("/auth_number?num=5", "admin"); test("/auth_number?num=5", null, HTTPStatus.forbidden); test("/items/name?item=something", "admin"); test("/items/name?item=something", null, HTTPStatus.forbidden); test("/items/num?num=37", "admin"); test("/items/num?num=37", null, HTTPStatus.forbidden); }); runApplication(); } struct AuthInfo { string name; } @requiresAuth interface IItemAPI { struct CollectionIndices { string item; } @anyAuth string getName(string item, AuthInfo info); @anyAuth int getNum(int num); @noRoute final mixin CreateAuthFunc; } class ItemAPI : IItemAPI { string getName(string item, AuthInfo info){ return info.name ~ item; } int getNum(int num){ return num; } } @requiresAuth interface IAuthAPI { @noAuth int getNonAuthNumber(int num); @anyAuth int getAuthNumber(AuthInfo info, int num); @anyAuth Collection!IItemAPI items(); @noRoute final mixin CreateAuthFunc; } class AuthAPI : IAuthAPI { private IItemAPI m_items; this(){ m_items = new ItemAPI; } Collection!IItemAPI items(){ return Collection!IItemAPI(m_items); } int getNonAuthNumber(int num){ return num; } int getAuthNumber(AuthInfo info, int num){ logInfo("Returning auth number for authorized user: %s", info.name); return info.name.length.to!int * num; } } auto getReq(HTTPServerRequest req, HTTPServerResponse _){ return req; } auto getRes(HTTPServerRequest _, HTTPServerResponse res){ return res; } mixin template CreateAuthFunc(){ AuthInfo authenticate(HTTPServerRequest req, HTTPServerResponse res){ AuthInfo ret; if("AuthUser" in req.headers && req.headers["AuthUser"]=="admin"){ ret.name = "admin"; } else throw new HTTPStatusException(HTTPStatus.forbidden, "Forbidden"); return ret; } } vibe.d-0.8.2/tests/vibe.web.rest.auth/000077500000000000000000000000001324361747700174655ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.web.rest.auth/dub.json000066400000000000000000000001631324361747700211320ustar00rootroot00000000000000{ "name": "tests", "dependencies": { "vibe-d:web": { "path": "../../" } }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/tests/vibe.web.rest.auth/source/000077500000000000000000000000001324361747700207655ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.web.rest.auth/source/app.d000066400000000000000000000065241324361747700217210ustar00rootroot00000000000000module app; import vibe.core.core; import vibe.core.log; import vibe.http.auth.basic_auth; import vibe.http.client; import vibe.http.router; import vibe.http.server; import vibe.web.auth; import vibe.web.rest; import std.algorithm : among; import std.datetime; import std.format : format; shared static this() { auto settings = new HTTPServerSettings; settings.port = 9128; settings.bindAddresses = ["::1", "127.0.0.1"]; auto router = new URLRouter; router.registerRestInterface(new Service); listenHTTP(settings, router); runTask({ scope (exit) exitEventLoop(); void test(string url, string user, HTTPStatus expected) { requestHTTP("http://127.0.0.1:9128"~url, (scope req) { if (user !is null) req.addBasicAuth(user, "secret"); }, (scope res) { res.dropBody(); assert(res.statusCode == expected, format("Unexpected status code for GET %s (%s): %s", url, user, res.statusCode)); }); } test("/public", null, HTTPStatus.ok); test("/any", null, HTTPStatus.unauthorized); test("/any", "stacy", HTTPStatus.ok); test("/any_a", null, HTTPStatus.unauthorized); test("/any_a", "stacy", HTTPStatus.ok); test("/admin", null, HTTPStatus.unauthorized); test("/admin", "admin", HTTPStatus.ok); test("/admin", "peter", HTTPStatus.forbidden); test("/admin", "stacy", HTTPStatus.forbidden); test("/admin_a", null, HTTPStatus.unauthorized); test("/admin_a", "admin", HTTPStatus.ok); test("/admin_a", "peter", HTTPStatus.forbidden); test("/admin_a", "stacy", HTTPStatus.forbidden); test("/member", "admin", HTTPStatus.forbidden); test("/member", "peter", HTTPStatus.ok); test("/member", "stacy", HTTPStatus.forbidden); test("/admin_member", "peter", HTTPStatus.ok); test("/admin_member", "admin", HTTPStatus.ok); test("/admin_member", "stacy", HTTPStatus.forbidden); test("/nobody", "peter", HTTPStatus.forbidden); test("/nobody", "admin", HTTPStatus.forbidden); test("/nobody", "stacy", HTTPStatus.forbidden); logInfo("All auth tests successful."); }); } struct Auth { string username; bool isAdmin() { return username == "admin"; } bool isMember() { return username == "peter"; } } @requiresAuth interface IService { @noAuth int getPublic(); @anyAuth int getAny(); @anyAuth int getAnyA(Auth auth); @auth(Role.admin) int getAdmin(); @auth(Role.admin) int getAdminA(Auth auth); @auth(Role.member) int getMember(); @auth(Role.admin | Role.member) int getAdminMember(); @auth(Role.admin & Role.member) int getNobody(); } class Service : IService { int getPublic() { return 42; } int getAny() { return 42; } int getAnyA(Auth auth) { assert(auth.username.among("admin", "peter", "stacy")); return 42; } int getAdmin() { return 42; } int getAdminA(Auth auth) { assert(auth.username == "admin"); return 42; } int getMember() { return 42; } int getAdminMember() { return 42; } int getNobody() { return 42; } Auth authenticate(HTTPServerRequest req, HTTPServerResponse res) { Auth ret; ret.username = performBasicAuth(req, res, "test", (user, pw) { return pw == "secret"; }); return ret; } } vibe.d-0.8.2/tests/vibe.web.web.auth/000077500000000000000000000000001324361747700172655ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.web.web.auth/dub.json000066400000000000000000000001631324361747700207320ustar00rootroot00000000000000{ "name": "tests", "dependencies": { "vibe-d:web": { "path": "../../" } }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/tests/vibe.web.web.auth/source/000077500000000000000000000000001324361747700205655ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.web.web.auth/source/app.d000066400000000000000000000064541324361747700215230ustar00rootroot00000000000000module app; import vibe.core.core; import vibe.core.log; import vibe.http.auth.basic_auth; import vibe.http.client; import vibe.http.router; import vibe.http.server; import vibe.web.auth; import vibe.web.web; import std.algorithm : among; import std.datetime; import std.format : format; shared static this() { auto settings = new HTTPServerSettings; settings.port = 9128; settings.bindAddresses = ["::1", "127.0.0.1"]; auto router = new URLRouter; router.registerWebInterface(new Service); listenHTTP(settings, router); runTask({ scope (exit) exitEventLoop(); void test(string url, string user, HTTPStatus expected) nothrow { try { requestHTTP("http://127.0.0.1:9128"~url, (scope req) { if (user !is null) req.addBasicAuth(user, "secret"); }, (scope res) { res.dropBody(); assert(res.statusCode == expected, format("Unexpected status code for GET %s (%s): %s", url, user, res.statusCode)); }); } catch (Exception e) { assert(false, e.msg); } } test("/public", null, HTTPStatus.ok); test("/any", null, HTTPStatus.unauthorized); test("/any", "stacy", HTTPStatus.ok); test("/any_a", null, HTTPStatus.unauthorized); test("/any_a", "stacy", HTTPStatus.ok); test("/admin", null, HTTPStatus.unauthorized); test("/admin", "admin", HTTPStatus.ok); test("/admin", "peter", HTTPStatus.forbidden); test("/admin", "stacy", HTTPStatus.forbidden); test("/admin_a", null, HTTPStatus.unauthorized); test("/admin_a", "admin", HTTPStatus.ok); test("/admin_a", "peter", HTTPStatus.forbidden); test("/admin_a", "stacy", HTTPStatus.forbidden); test("/member", "admin", HTTPStatus.forbidden); test("/member", "peter", HTTPStatus.ok); test("/member", "stacy", HTTPStatus.forbidden); test("/admin_member", "peter", HTTPStatus.ok); test("/admin_member", "admin", HTTPStatus.ok); test("/admin_member", "stacy", HTTPStatus.forbidden); logInfo("All auth tests successful."); }); } struct Auth { string username; bool isAdmin() { return username == "admin"; } bool isMember() { return username == "peter"; } } @requiresAuth class Service { @noAuth void getPublic(HTTPServerResponse res) { res.writeBody("success"); } @anyAuth void getAny(HTTPServerResponse res) { res.writeBody("success"); } @anyAuth void getAnyA(HTTPServerResponse res, Auth auth) { assert(auth.username.among("admin", "peter", "stacy")); res.writeBody("success"); } @auth(Role.admin) void getAdmin(HTTPServerResponse res) { res.writeBody("success"); } @auth(Role.admin) void getAdminA(HTTPServerResponse res, Auth auth) { assert(auth.username == "admin"); res.writeBody("success"); } @auth(Role.member) void getMember(HTTPServerResponse res) { res.writeBody("success"); } @auth(Role.admin | Role.member) void getAdminMember(HTTPServerResponse res) { res.writeBody("success"); } @noRoute Auth authenticate(HTTPServerRequest req, HTTPServerResponse res) { Auth ret; ret.username = performBasicAuth(req, res, "test", (user, pw) { return pw == "secret"; }); return ret; } } vibe.d-0.8.2/tests/vibe.web.web/000077500000000000000000000000001324361747700163255ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.web.web/dub.json000066400000000000000000000001631324361747700177720ustar00rootroot00000000000000{ "name": "tests", "dependencies": { "vibe-d:web": { "path": "../../" } }, "versions": ["VibeDefaultMain"] } vibe.d-0.8.2/tests/vibe.web.web/source/000077500000000000000000000000001324361747700176255ustar00rootroot00000000000000vibe.d-0.8.2/tests/vibe.web.web/source/app.d000066400000000000000000000021151324361747700205510ustar00rootroot00000000000000module app; import vibe.core.core; import vibe.core.log; import vibe.http.client; import vibe.http.router; import vibe.http.server; import vibe.web.web; import std.format : format; // TODO: test the various parameter and return type combinations, as well as all attributes shared static this() { auto settings = new HTTPServerSettings; settings.bindAddresses = ["127.0.0.1"]; settings.port = 9132; auto router = new URLRouter; router.registerWebInterface(new Service); listenHTTP(settings, router); runTask({ scope (exit) exitEventLoop(); void test(string url, HTTPStatus expected) { requestHTTP("http://127.0.0.1:9132"~url, (scope req) { }, (scope res) { res.dropBody(); assert(res.statusCode == expected, format("Unexpected status code for %s: %s", url, res.statusCode)); } ); } test("/foo", HTTPStatus.notFound); test("/bar", HTTPStatus.ok); logInfo("All web tests succeeded."); }); } class Service { @noRoute void getFoo(HTTPServerResponse res) { res.writeBody("oops"); } void getBar(HTTPServerResponse res) { res.writeBody("ok"); } } vibe.d-0.8.2/textfilter/000077500000000000000000000000001324361747700151005ustar00rootroot00000000000000vibe.d-0.8.2/textfilter/dub.sdl000066400000000000000000000002221324361747700163520ustar00rootroot00000000000000name "textfilter" description "Text filtering routines" targetType "library" dependency "vibe-d:core" version="*" sourcePaths "." importPaths "." vibe.d-0.8.2/textfilter/meson.build000066400000000000000000000032251324361747700172440ustar00rootroot00000000000000# Meson file for Vibe Textfilter vibe_textfilter_src_dir = include_directories('.') vibe_textfilter_src = [ 'vibe/textfilter/html.d', 'vibe/textfilter/markdown.d', 'vibe/textfilter/urlencode.d' ] # # Install Includes # install_subdir('vibe/', install_dir: 'include/d/vibe/') # # Build Targets # textfilter_link_with = [vibe_utils_lib, vibe_core_lib, vibe_data_lib] # Text filtering routines vibe_textfilter_lib = library('vibe-textfilter', [vibe_textfilter_src], include_directories: [vibe_utils_src_dir, vibe_core_src_dir, vibe_data_src_dir], install: true, link_with: [textfilter_link_with], version: project_version, soversion: project_soversion ) pkgc.generate(name: 'vibe-textfilter', libraries: [vibe_textfilter_lib] + textfilter_link_with, subdirs: 'd/vibe', version: project_version, description: 'Text filtering routines for Vibe.' ) # # Tests # vibe_test_textfilter_exe = executable('vibe-test_textfilter', [vibe_textfilter_src], include_directories: [vibe_utils_src_dir, vibe_core_src_dir, vibe_data_src_dir, openssl_inc, libevent_inc], dependencies: [zlib_dep, crypto_dep, ssl_dep, libevent_dep], link_with: [textfilter_link_with], d_args: meson.get_compiler('d').unittest_args(), link_args: '-main' ) test('vibe-test_textfilter', vibe_test_textfilter_exe) vibe.d-0.8.2/textfilter/vibe/000077500000000000000000000000001324361747700160255ustar00rootroot00000000000000vibe.d-0.8.2/textfilter/vibe/textfilter/000077500000000000000000000000001324361747700202175ustar00rootroot00000000000000vibe.d-0.8.2/textfilter/vibe/textfilter/html.d000066400000000000000000000106561324361747700213400ustar00rootroot00000000000000/** HTML character entity escaping. TODO: Make things @safe once Appender is. Copyright: © 2012-2014 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.textfilter.html; import std.array; import std.conv; import std.range; /** Returns the HTML escaped version of a given string. */ string htmlEscape(R)(R str) @trusted if (isInputRange!R) { if (__ctfe) { // appender is a performance/memory hog in ctfe StringAppender dst; filterHTMLEscape(dst, str); return dst.data; } else { auto dst = appender!string(); filterHTMLEscape(dst, str); return dst.data; } } /// unittest { assert(htmlEscape(`"Hello", !`) == `"Hello", <World>!`); } /** Writes the HTML escaped version of a given string to an output range. */ void filterHTMLEscape(R, S)(ref R dst, S str, HTMLEscapeFlags flags = HTMLEscapeFlags.escapeNewline) if (isOutputRange!(R, dchar) && isInputRange!S) { for (;!str.empty;str.popFront()) filterHTMLEscape(dst, str.front, flags); } /** Returns the HTML escaped version of a given string (also escapes double quotes). */ string htmlAttribEscape(R)(R str) @trusted if (isInputRange!R) { if (__ctfe) { // appender is a performance/memory hog in ctfe StringAppender dst; filterHTMLAttribEscape(dst, str); return dst.data; } else { auto dst = appender!string(); filterHTMLAttribEscape(dst, str); return dst.data; } } /// unittest { assert(htmlAttribEscape(`"Hello", !`) == `"Hello", <World>!`); } /** Writes the HTML escaped version of a given string to an output range (also escapes double quotes). */ void filterHTMLAttribEscape(R, S)(ref R dst, S str) if (isOutputRange!(R, dchar) && isInputRange!S) { for (; !str.empty; str.popFront()) filterHTMLEscape(dst, str.front, HTMLEscapeFlags.escapeNewline|HTMLEscapeFlags.escapeQuotes); } /** Returns the HTML escaped version of a given string (escapes every character). */ string htmlAllEscape(R)(R str) @trusted if (isInputRange!R) { if (__ctfe) { // appender is a performance/memory hog in ctfe StringAppender dst; filterHTMLAllEscape(dst, str); return dst.data; } else { auto dst = appender!string(); filterHTMLAllEscape(dst, str); return dst.data; } } /// unittest { assert(htmlAllEscape("Hello!") == "Hello!"); } /** Writes the HTML escaped version of a given string to an output range (escapes every character). */ void filterHTMLAllEscape(R, S)(ref R dst, S str) if (isOutputRange!(R, dchar) && isInputRange!S) { for (; !str.empty; str.popFront()) { dst.put("&#"); dst.put(to!string(cast(uint)str.front)); dst.put(';'); } } /** Minimally escapes a text so that no HTML tags appear in it. */ string htmlEscapeMin(R)(R str) @trusted if (isInputRange!R) { auto dst = appender!string(); for (; !str.empty; str.popFront()) filterHTMLEscape(dst, str.front, HTMLEscapeFlags.escapeMinimal); return dst.data(); } /** Writes the HTML escaped version of a character to an output range. */ void filterHTMLEscape(R)(ref R dst, dchar ch, HTMLEscapeFlags flags = HTMLEscapeFlags.escapeNewline ) { switch (ch) { default: if (flags & HTMLEscapeFlags.escapeUnknown) { dst.put("&#"); dst.put(to!string(cast(uint)ch)); dst.put(';'); } else dst.put(ch); break; case '"': if (flags & HTMLEscapeFlags.escapeQuotes) dst.put("""); else dst.put('"'); break; case '\'': if (flags & HTMLEscapeFlags.escapeQuotes) dst.put("'"); else dst.put('\''); break; case '\r', '\n': if (flags & HTMLEscapeFlags.escapeNewline) { dst.put("&#"); dst.put(to!string(cast(uint)ch)); dst.put(';'); } else dst.put(ch); break; case 'a': .. case 'z': goto case; case 'A': .. case 'Z': goto case; case '0': .. case '9': goto case; case ' ', '\t', '-', '_', '.', ':', ',', ';', '#', '+', '*', '?', '=', '(', ')', '/', '!', '%' , '{', '}', '[', ']', '`', '´', '$', '^', '~': dst.put(cast(char)ch); break; case '<': dst.put("<"); break; case '>': dst.put(">"); break; case '&': dst.put("&"); break; } } enum HTMLEscapeFlags { escapeMinimal = 0, escapeQuotes = 1<<0, escapeNewline = 1<<1, escapeUnknown = 1<<2 } private struct StringAppender { @safe: string data; void put(string s) { data ~= s; } void put(char ch) { data ~= ch; } void put(dchar ch) { import std.utf; char[4] dst; data ~= dst[0 .. encode(dst, ch)]; } } vibe.d-0.8.2/textfilter/vibe/textfilter/markdown.d000066400000000000000000001127031324361747700222120ustar00rootroot00000000000000/** Markdown parser implementation Copyright: © 2012-2014 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.textfilter.markdown; import vibe.core.log; import vibe.textfilter.html; import vibe.utils.string; import std.algorithm : canFind, countUntil, min; import std.array; import std.format; import std.range; import std.string; /* TODO: detect inline HTML tags */ version(MarkdownTest) { int main() { import std.file; setLogLevel(LogLevel.Trace); auto text = readText("test.txt"); auto result = appender!string(); filterMarkdown(result, text); foreach( ln; splitLines(result.data) ) logInfo(ln); return 0; } } /** Returns a Markdown filtered HTML string. */ string filterMarkdown()(string str, MarkdownFlags flags) @trusted { // scope class is not @safe for DMD 2.072 scope settings = new MarkdownSettings; settings.flags = flags; return filterMarkdown(str, settings); } /// ditto string filterMarkdown()(string str, scope MarkdownSettings settings = null) @trusted { // Appender not @safe as of 2.065 auto dst = appender!string(); filterMarkdown(dst, str, settings); return dst.data; } /** Markdown filters the given string and writes the corresponding HTML to an output range. */ void filterMarkdown(R)(ref R dst, string src, MarkdownFlags flags) { scope settings = new MarkdownSettings; settings.flags = flags; filterMarkdown(dst, src, settings); } /// ditto void filterMarkdown(R)(ref R dst, string src, scope MarkdownSettings settings = null) { if (!settings) settings = new MarkdownSettings; auto all_lines = splitLines(src); auto links = scanForReferences(all_lines); auto lines = parseLines(all_lines, settings); Block root_block; parseBlocks(root_block, lines, null, settings); writeBlock(dst, root_block, links, settings); } /** Returns the hierarchy of sections */ Section[] getMarkdownOutline(string markdown_source, scope MarkdownSettings settings = null) { import std.conv : to; if (!settings) settings = new MarkdownSettings; auto all_lines = splitLines(markdown_source); auto lines = parseLines(all_lines, settings); Block root_block; parseBlocks(root_block, lines, null, settings); Section root; foreach (ref sb; root_block.blocks) { if (sb.type == BlockType.Header) { auto s = &root; while (true) { if (s.subSections.length == 0) break; if (s.subSections[$-1].headingLevel >= sb.headerLevel) break; s = &s.subSections[$-1]; } s.subSections ~= Section(sb.headerLevel, sb.text[0], sb.text[0].asSlug.to!string); } } return root.subSections; } /// unittest { import std.conv : to; assert(getMarkdownOutline("## first\n## second\n### third\n# fourth\n### fifth") == [ Section(2, " first", "first"), Section(2, " second", "second", [ Section(3, " third", "third") ]), Section(1, " fourth", "fourth", [ Section(3, " fifth", "fifth") ]) ] ); } final class MarkdownSettings { /// Controls the capabilities of the parser. MarkdownFlags flags = MarkdownFlags.vanillaMarkdown; /// Heading tags will start at this level. size_t headingBaseLevel = 1; /// Called for every link/image URL to perform arbitrary transformations. string delegate(string url_or_path, bool is_image) urlFilter; /// White list of URI schemas that can occur in link/image targets string[] allowedURISchemas = ["http", "https", "ftp", "mailto"]; } enum MarkdownFlags { none = 0, keepLineBreaks = 1<<0, backtickCodeBlocks = 1<<1, noInlineHtml = 1<<2, //noLinks = 1<<3, //allowUnsafeHtml = 1<<4, tables = 1<<5, vanillaMarkdown = none, forumDefault = keepLineBreaks|backtickCodeBlocks|noInlineHtml|tables } struct Section { size_t headingLevel; string caption; string anchor; Section[] subSections; } private { immutable s_blockTags = ["div", "ol", "p", "pre", "section", "table", "ul"]; } private enum IndentType { White, Quote } private enum LineType { Undefined, Blank, Plain, Hline, AtxHeader, SetextHeader, TableSeparator, UList, OList, HtmlBlock, CodeBlockDelimiter } private struct Line { LineType type; IndentType[] indent; string text; string unindented; string unindent(size_t n) pure @safe { assert(n <= indent.length); string ln = text; foreach( i; 0 .. n ){ final switch(indent[i]){ case IndentType.White: if( ln[0] == ' ' ) ln = ln[4 .. $]; else ln = ln[1 .. $]; break; case IndentType.Quote: ln = ln.stripLeft()[1 .. $]; if (ln.startsWith(' ')) ln.popFront(); break; } } return ln; } } private Line[] parseLines(string[] lines, scope MarkdownSettings settings) pure @safe { Line[] ret; while( !lines.empty ){ auto ln = lines.front; lines.popFront(); Line lninfo; lninfo.text = ln; while( ln.length > 0 ){ if( ln[0] == '\t' ){ lninfo.indent ~= IndentType.White; ln.popFront(); } else if( ln.startsWith(" ") ){ lninfo.indent ~= IndentType.White; ln.popFrontN(4); } else { if( ln.stripLeft().startsWith(">") ){ lninfo.indent ~= IndentType.Quote; ln = ln.stripLeft(); ln.popFront(); if (ln.startsWith(' ')) ln.popFront(); } else break; } } lninfo.unindented = ln; if( (settings.flags & MarkdownFlags.backtickCodeBlocks) && isCodeBlockDelimiter(ln) ) lninfo.type = LineType.CodeBlockDelimiter; else if( isAtxHeaderLine(ln) ) lninfo.type = LineType.AtxHeader; else if( isSetextHeaderLine(ln) ) lninfo.type = LineType.SetextHeader; else if( (settings.flags & MarkdownFlags.tables) && isTableSeparatorLine(ln) ) lninfo.type = LineType.TableSeparator; else if( isHlineLine(ln) ) lninfo.type = LineType.Hline; else if( isOListLine(ln) ) lninfo.type = LineType.OList; else if( isUListLine(ln) ) lninfo.type = LineType.UList; else if( isLineBlank(ln) ) lninfo.type = LineType.Blank; else if( !(settings.flags & MarkdownFlags.noInlineHtml) && isHtmlBlockLine(ln) ) lninfo.type = LineType.HtmlBlock; else lninfo.type = LineType.Plain; ret ~= lninfo; } return ret; } unittest { import std.conv : to; auto s = new MarkdownSettings; s.flags = MarkdownFlags.forumDefault; auto lns = [">```D"]; assert(parseLines(lns, s) == [Line(LineType.CodeBlockDelimiter, [IndentType.Quote], lns[0], "```D")]); lns = ["> ```D"]; assert(parseLines(lns, s) == [Line(LineType.CodeBlockDelimiter, [IndentType.Quote], lns[0], "```D")]); lns = ["> ```D"]; assert(parseLines(lns, s) == [Line(LineType.CodeBlockDelimiter, [IndentType.Quote], lns[0], " ```D")]); lns = ["> ```D"]; assert(parseLines(lns, s) == [Line(LineType.CodeBlockDelimiter, [IndentType.Quote, IndentType.White], lns[0], "```D")]); lns = [">test"]; assert(parseLines(lns, s) == [Line(LineType.Plain, [IndentType.Quote], lns[0], "test")]); lns = ["> test"]; assert(parseLines(lns, s) == [Line(LineType.Plain, [IndentType.Quote], lns[0], "test")]); lns = ["> test"]; assert(parseLines(lns, s) == [Line(LineType.Plain, [IndentType.Quote], lns[0], " test")]); lns = ["> test"]; assert(parseLines(lns, s) == [Line(LineType.Plain, [IndentType.Quote, IndentType.White], lns[0], "test")]); } private enum BlockType { Plain, Text, Paragraph, Header, Table, OList, UList, ListItem, Code, Quote } private struct Block { BlockType type; string[] text; Block[] blocks; size_t headerLevel; Alignment[] columns; } private enum Alignment { none = 0, left = 1<<0, right = 1<<1, center = left | right } private void parseBlocks(ref Block root, ref Line[] lines, IndentType[] base_indent, scope MarkdownSettings settings) pure @safe { if( base_indent.length == 0 ) root.type = BlockType.Text; else if( base_indent[$-1] == IndentType.Quote ) root.type = BlockType.Quote; while( !lines.empty ){ auto ln = lines.front; if( ln.type == LineType.Blank ){ lines.popFront(); continue; } if( ln.indent != base_indent ){ if( ln.indent.length < base_indent.length || ln.indent[0 .. base_indent.length] != base_indent ) return; auto cindent = base_indent ~ IndentType.White; if( ln.indent == cindent ){ Block cblock; cblock.type = BlockType.Code; while( !lines.empty && (lines.front.unindented.strip.empty || lines.front.indent.length >= cindent.length && lines.front.indent[0 .. cindent.length] == cindent)) { cblock.text ~= lines.front.indent.length >= cindent.length ? lines.front.unindent(cindent.length) : ""; lines.popFront(); } root.blocks ~= cblock; } else { Block subblock; parseBlocks(subblock, lines, ln.indent[0 .. base_indent.length+1], settings); root.blocks ~= subblock; } } else { Block b; final switch(ln.type){ case LineType.Undefined: assert(false); case LineType.Blank: assert(false); case LineType.Plain: if( lines.length >= 2 && lines[1].type == LineType.SetextHeader ){ auto setln = lines[1].unindented; b.type = BlockType.Header; b.text = [ln.unindented]; b.headerLevel = setln.strip()[0] == '=' ? 1 : 2; lines.popFrontN(2); } else if( lines.length >= 2 && lines[1].type == LineType.TableSeparator && ln.unindented.indexOf('|') >= 0 ) { auto setln = lines[1].unindented; b.type = BlockType.Table; b.text = [ln.unindented]; foreach (c; getTableColumns(setln)) { Alignment a = Alignment.none; if (c.startsWith(':')) a |= Alignment.left; if (c.endsWith(':')) a |= Alignment.right; b.columns ~= a; } lines.popFrontN(2); while (!lines.empty && lines[0].unindented.indexOf('|') >= 0) { b.text ~= lines.front.unindented; lines.popFront(); } } else { b.type = BlockType.Paragraph; b.text = skipText(lines, base_indent); } break; case LineType.Hline: b.type = BlockType.Plain; b.text = ["
"]; lines.popFront(); break; case LineType.AtxHeader: b.type = BlockType.Header; string hl = ln.unindented; b.headerLevel = 0; while( hl.length > 0 && hl[0] == '#' ){ b.headerLevel++; hl = hl[1 .. $]; } while( hl.length > 0 && (hl[$-1] == '#' || hl[$-1] == ' ') ) hl = hl[0 .. $-1]; b.text = [hl]; lines.popFront(); break; case LineType.SetextHeader: lines.popFront(); break; case LineType.TableSeparator: lines.popFront(); break; case LineType.UList: case LineType.OList: b.type = ln.type == LineType.UList ? BlockType.UList : BlockType.OList; auto itemindent = base_indent ~ IndentType.White; bool firstItem = true, paraMode = false; while(!lines.empty && lines.front.type == ln.type && lines.front.indent == base_indent ){ Block itm; itm.text = skipText(lines, itemindent); itm.text[0] = removeListPrefix(itm.text[0], ln.type); // emit

if there are blank lines between the items if( firstItem && !lines.empty && lines.front.type == LineType.Blank ) paraMode = true; firstItem = false; if( paraMode ){ Block para; para.type = BlockType.Paragraph; para.text = itm.text; itm.blocks ~= para; itm.text = null; } parseBlocks(itm, lines, itemindent, settings); itm.type = BlockType.ListItem; b.blocks ~= itm; } break; case LineType.HtmlBlock: int nestlevel = 0; auto starttag = parseHtmlBlockLine(ln.unindented); if( !starttag.isHtmlBlock || !starttag.open ) break; b.type = BlockType.Plain; while(!lines.empty){ if( lines.front.indent.length < base_indent.length ) break; if( lines.front.indent[0 .. base_indent.length] != base_indent ) break; auto str = lines.front.unindent(base_indent.length); auto taginfo = parseHtmlBlockLine(str); b.text ~= lines.front.unindent(base_indent.length); lines.popFront(); if( taginfo.isHtmlBlock && taginfo.tagName == starttag.tagName ) nestlevel += taginfo.open ? 1 : -1; if( nestlevel <= 0 ) break; } break; case LineType.CodeBlockDelimiter: lines.popFront(); // TODO: get language from line b.type = BlockType.Code; while(!lines.empty){ if( lines.front.indent.length < base_indent.length ) break; if( lines.front.indent[0 .. base_indent.length] != base_indent ) break; if( lines.front.type == LineType.CodeBlockDelimiter ){ lines.popFront(); break; } b.text ~= lines.front.unindent(base_indent.length); lines.popFront(); } break; } root.blocks ~= b; } } } private string[] skipText(ref Line[] lines, IndentType[] indent) pure @safe { static bool matchesIndent(IndentType[] indent, IndentType[] base_indent) { if( indent.length > base_indent.length ) return false; if( indent != base_indent[0 .. indent.length] ) return false; sizediff_t qidx = -1; foreach_reverse (i, tp; base_indent) if (tp == IndentType.Quote) { qidx = i; break; } if( qidx >= 0 ){ qidx = base_indent.length-1 - qidx; if( indent.length <= qidx ) return false; } return true; } string[] ret; while(true){ ret ~= lines.front.unindent(min(indent.length, lines.front.indent.length)); lines.popFront(); if( lines.empty || !matchesIndent(lines.front.indent, indent) || lines.front.type != LineType.Plain ) return ret; } } /// private private void writeBlock(R)(ref R dst, ref const Block block, LinkRef[string] links, scope MarkdownSettings settings) { final switch(block.type){ case BlockType.Plain: foreach( ln; block.text ){ dst.put(ln); dst.put("\n"); } foreach(b; block.blocks) writeBlock(dst, b, links, settings); break; case BlockType.Text: writeMarkdownEscaped(dst, block, links, settings); foreach(b; block.blocks) writeBlock(dst, b, links, settings); break; case BlockType.Paragraph: assert(block.blocks.length == 0); dst.put("

"); writeMarkdownEscaped(dst, block, links, settings); dst.put("

\n"); break; case BlockType.Header: assert(block.blocks.length == 0); auto hlvl = block.headerLevel + (settings ? settings.headingBaseLevel-1 : 0); dst.formattedWrite("", hlvl, block.text[0].asSlug); assert(block.text.length == 1); writeMarkdownEscaped(dst, block.text[0], links, settings); dst.formattedWrite("\n", hlvl); break; case BlockType.Table: import std.algorithm.iteration : splitter; static string[Alignment.max+1] alstr = ["", " align=\"left\"", " align=\"right\"", " align=\"center\""]; dst.put("\n"); dst.put(""); size_t i = 0; foreach (col; block.text[0].getTableColumns()) { dst.put("'); dst.writeMarkdownEscaped(col, links, settings); dst.put(""); i++; } dst.put("\n"); foreach (ln; block.text[1 .. $]) { dst.put(""); i = 0; foreach (col; ln.getTableColumns()) { dst.put("'); dst.writeMarkdownEscaped(col, links, settings); dst.put(""); i++; } dst.put("\n"); } dst.put("
\n"); break; case BlockType.OList: dst.put("
    \n"); foreach(b; block.blocks) writeBlock(dst, b, links, settings); dst.put("
\n"); break; case BlockType.UList: dst.put("
    \n"); foreach(b; block.blocks) writeBlock(dst, b, links, settings); dst.put("
\n"); break; case BlockType.ListItem: dst.put("
  • "); writeMarkdownEscaped(dst, block, links, settings); foreach(b; block.blocks) writeBlock(dst, b, links, settings); dst.put("
  • \n"); break; case BlockType.Code: assert(block.blocks.length == 0); dst.put("
    ");
    			foreach(ln; block.text){
    				filterHTMLEscape(dst, ln);
    				dst.put("\n");
    			}
    			dst.put("
    \n"); break; case BlockType.Quote: dst.put("
    "); writeMarkdownEscaped(dst, block, links, settings); foreach(b; block.blocks) writeBlock(dst, b, links, settings); dst.put("
    \n"); break; } } private void writeMarkdownEscaped(R)(ref R dst, ref const Block block, in LinkRef[string] links, scope MarkdownSettings settings) { auto lines = () @trusted { return cast(string[])block.text; } (); auto text = settings.flags & MarkdownFlags.keepLineBreaks ? lines.join("
    ") : lines.join("\n"); writeMarkdownEscaped(dst, text, links, settings); if (lines.length) dst.put("\n"); } /// private private void writeMarkdownEscaped(R)(ref R dst, string ln, in LinkRef[string] linkrefs, scope MarkdownSettings settings) { bool isAllowedURI(string lnk) { auto idx = lnk.indexOf('/'); auto cidx = lnk.indexOf(':'); // always allow local URIs if (cidx < 0 || idx >= 0 && cidx > idx) return true; return settings.allowedURISchemas.canFind(lnk[0 .. cidx]); } string filterLink(string lnk, bool is_image) { if (isAllowedURI(lnk)) return settings.urlFilter ? settings.urlFilter(lnk, is_image) : lnk; return "#"; // replace link with unknown schema with dummy URI } bool br = ln.endsWith(" "); while( ln.length > 0 ){ switch( ln[0] ){ default: dst.put(ln[0]); ln = ln[1 .. $]; break; case '\\': if( ln.length >= 2 ){ switch(ln[1]){ default: dst.put(ln[0 .. 2]); ln = ln[2 .. $]; break; case '\'', '`', '*', '_', '{', '}', '[', ']', '(', ')', '#', '+', '-', '.', '!': dst.put(ln[1]); ln = ln[2 .. $]; break; } } else { dst.put(ln[0]); ln = ln[1 .. $]; } break; case '_': case '*': string text; if( auto em = parseEmphasis(ln, text) ){ dst.put(em == 1 ? "" : em == 2 ? "" : ""); filterHTMLEscape(dst, text, HTMLEscapeFlags.escapeMinimal); dst.put(em == 1 ? "" : em == 2 ? "": ""); } else { dst.put(ln[0]); ln = ln[1 .. $]; } break; case '`': string code; if( parseInlineCode(ln, code) ){ dst.put(""); filterHTMLEscape(dst, code, HTMLEscapeFlags.escapeMinimal); dst.put(""); } else { dst.put(ln[0]); ln = ln[1 .. $]; } break; case '[': Link link; if( parseLink(ln, link, linkrefs) ){ dst.put("
    "); writeMarkdownEscaped(dst, link.text, linkrefs, settings); dst.put(""); } else { dst.put(ln[0]); ln = ln[1 .. $]; } break; case '!': Link link; if( parseLink(ln, link, linkrefs) ){ dst.put("\"");"); } else if( ln.length >= 2 ){ dst.put(ln[0 .. 2]); ln = ln[2 .. $]; } else { dst.put(ln[0]); ln = ln[1 .. $]; } break; case '>': if( settings.flags & MarkdownFlags.noInlineHtml ) dst.put(">"); else dst.put(ln[0]); ln = ln[1 .. $]; break; case '<': string url; if( parseAutoLink(ln, url) ){ bool is_email = url.startsWith("mailto:"); dst.put(""); if (is_email) filterHTMLAllEscape(dst, url[7 .. $]); else filterHTMLEscape(dst, url, HTMLEscapeFlags.escapeMinimal); dst.put(""); } else { if (ln.startsWith("
    ")) { // always support line breaks, since we embed them here ourselves! dst.put("
    "); ln = ln[4 .. $]; } else if(ln.startsWith("
    ")) { dst.put("
    "); ln = ln[5 .. $]; } else { if( settings.flags & MarkdownFlags.noInlineHtml ) dst.put("<"); else dst.put(ln[0]); ln = ln[1 .. $]; } } break; } } if( br ) dst.put("
    "); } private bool isLineBlank(string ln) pure @safe { return allOf(ln, " \t"); } private bool isSetextHeaderLine(string ln) pure @safe { ln = stripLeft(ln); if( ln.length < 1 ) return false; if( ln[0] == '=' ){ while(!ln.empty && ln.front == '=') ln.popFront(); return allOf(ln, " \t"); } if( ln[0] == '-' ){ while(!ln.empty && ln.front == '-') ln.popFront(); return allOf(ln, " \t"); } return false; } private bool isAtxHeaderLine(string ln) pure @safe { ln = stripLeft(ln); size_t i = 0; while( i < ln.length && ln[i] == '#' ) i++; if( i < 1 || i > 6 || i >= ln.length ) return false; return ln[i] == ' '; } private bool isTableSeparatorLine(string ln) pure @safe { import std.algorithm.iteration : splitter; ln = strip(ln); if (ln.startsWith("|")) ln = ln[1 .. $]; if (ln.endsWith("|")) ln = ln[0 .. $-1]; auto cols = ln.splitter('|'); size_t cnt = 0; foreach (c; cols) { if (c.startsWith(':')) c = c[1 .. $]; if (c.endsWith(':')) c = c[0 .. $-1]; if (c.length < 3 || !c.allOf("-")) return false; cnt++; } return cnt >= 2; } private auto getTableColumns(string line) pure @safe nothrow { import std.algorithm.iteration : map, splitter; if (line.startsWith("|")) line = line[1 .. $]; if (line.endsWith("|")) line = line[0 .. $-1]; return line.splitter('|').map!(s => s.strip()); } private size_t countTableColumns(string line) pure @safe { return getTableColumns(line).count(); } private bool isHlineLine(string ln) pure @safe { if( allOf(ln, " -") && count(ln, '-') >= 3 ) return true; if( allOf(ln, " *") && count(ln, '*') >= 3 ) return true; if( allOf(ln, " _") && count(ln, '_') >= 3 ) return true; return false; } private bool isQuoteLine(string ln) pure @safe { return ln.stripLeft().startsWith(">"); } private size_t getQuoteLevel(string ln) pure @safe { size_t level = 0; ln = stripLeft(ln); while( ln.length > 0 && ln[0] == '>' ){ level++; ln = stripLeft(ln[1 .. $]); } return level; } private bool isUListLine(string ln) pure @safe { ln = stripLeft(ln); if (ln.length < 2) return false; if (!canFind("*+-", ln[0])) return false; if (ln[1] != ' ' && ln[1] != '\t') return false; return true; } private bool isOListLine(string ln) pure @safe { ln = stripLeft(ln); if( ln.length < 1 ) return false; if( ln[0] < '0' || ln[0] > '9' ) return false; ln = ln[1 .. $]; while( ln.length > 0 && ln[0] >= '0' && ln[0] <= '9' ) ln = ln[1 .. $]; if( ln.length < 2 ) return false; if( ln[0] != '.' ) return false; if( ln[1] != ' ' && ln[1] != '\t' ) return false; return true; } private string removeListPrefix(string str, LineType tp) pure @safe { switch(tp){ default: assert(false); case LineType.OList: // skip bullets and output using normal escaping auto idx = str.indexOfCT('.'); assert(idx > 0); return str[idx+1 .. $].stripLeft(); case LineType.UList: return stripLeft(str.stripLeft()[1 .. $]); } } private auto parseHtmlBlockLine(string ln) pure @safe { struct HtmlBlockInfo { bool isHtmlBlock; string tagName; bool open; } HtmlBlockInfo ret; ret.isHtmlBlock = false; ret.open = true; ln = strip(ln); if( ln.length < 3 ) return ret; if( ln[0] != '<' ) return ret; if( ln[1] == '/' ){ ret.open = false; ln = ln[1 .. $]; } import std.ascii : isAlpha; if( !isAlpha(ln[1]) ) return ret; ln = ln[1 .. $]; size_t idx = 0; while( idx < ln.length && ln[idx] != ' ' && ln[idx] != '>' ) idx++; ret.tagName = ln[0 .. idx]; ln = ln[idx .. $]; auto eidx = ln.indexOf('>'); if( eidx < 0 ) return ret; if( eidx != ln.length-1 ) return ret; if (!s_blockTags.canFind(ret.tagName)) return ret; ret.isHtmlBlock = true; return ret; } private bool isHtmlBlockLine(string ln) pure @safe { auto bi = parseHtmlBlockLine(ln); return bi.isHtmlBlock && bi.open; } private bool isHtmlBlockCloseLine(string ln) pure @safe { auto bi = parseHtmlBlockLine(ln); return bi.isHtmlBlock && !bi.open; } private bool isCodeBlockDelimiter(string ln) pure @safe { return ln.stripLeft.startsWith("```"); } private string getHtmlTagName(string ln) pure @safe { return parseHtmlBlockLine(ln).tagName; } private bool isLineIndented(string ln) pure @safe { return ln.startsWith("\t") || ln.startsWith(" "); } private string unindentLine(string ln) pure @safe { if( ln.startsWith("\t") ) return ln[1 .. $]; if( ln.startsWith(" ") ) return ln[4 .. $]; assert(false); } private int parseEmphasis(ref string str, ref string text) pure @safe { string pstr = str; if( pstr.length < 3 ) return false; string ctag; if( pstr.startsWith("***") ) ctag = "***"; else if( pstr.startsWith("**") ) ctag = "**"; else if( pstr.startsWith("*") ) ctag = "*"; else if( pstr.startsWith("___") ) ctag = "___"; else if( pstr.startsWith("__") ) ctag = "__"; else if( pstr.startsWith("_") ) ctag = "_"; else return false; pstr = pstr[ctag.length .. $]; auto cidx = () @trusted { return pstr.indexOf(ctag); }(); if( cidx < 1 ) return false; text = pstr[0 .. cidx]; str = pstr[cidx+ctag.length .. $]; return cast(int)ctag.length; } private bool parseInlineCode(ref string str, ref string code) pure @safe { string pstr = str; if( pstr.length < 3 ) return false; string ctag; if( pstr.startsWith("``") ) ctag = "``"; else if( pstr.startsWith("`") ) ctag = "`"; else return false; pstr = pstr[ctag.length .. $]; auto cidx = () @trusted { return pstr.indexOf(ctag); }(); if( cidx < 1 ) return false; code = pstr[0 .. cidx]; str = pstr[cidx+ctag.length .. $]; return true; } private bool parseLink(ref string str, ref Link dst, in LinkRef[string] linkrefs) pure @safe { string pstr = str; if( pstr.length < 3 ) return false; // ignore img-link prefix if( pstr[0] == '!' ) pstr = pstr[1 .. $]; // parse the text part [text] if( pstr[0] != '[' ) return false; auto cidx = pstr.matchBracket(); if( cidx < 1 ) return false; string refid; dst.text = pstr[1 .. cidx]; pstr = pstr[cidx+1 .. $]; // parse either (link '['"title"']') or '[' ']'[refid] if( pstr.length < 2 ) return false; if( pstr[0] == '('){ cidx = pstr.matchBracket(); if( cidx < 1 ) return false; auto inner = pstr[1 .. cidx]; immutable qidx = inner.indexOfCT('"'); import std.ascii : isWhite; if( qidx > 1 && inner[qidx - 1].isWhite()){ dst.url = inner[0 .. qidx].stripRight(); immutable len = inner[qidx .. $].lastIndexOf('"'); if( len == 0 ) return false; assert(len > 0); dst.title = inner[qidx + 1 .. qidx + len]; } else { dst.url = inner.stripRight(); dst.title = null; } if (dst.url.startsWith("<") && dst.url.endsWith(">")) dst.url = dst.url[1 .. $-1]; pstr = pstr[cidx+1 .. $]; } else { if( pstr[0] == ' ' ) pstr = pstr[1 .. $]; if( pstr[0] != '[' ) return false; pstr = pstr[1 .. $]; cidx = pstr.indexOfCT(']'); if( cidx < 0 ) return false; if( cidx == 0 ) refid = dst.text; else refid = pstr[0 .. cidx]; pstr = pstr[cidx+1 .. $]; } if( refid.length > 0 ){ auto pr = toLower(refid) in linkrefs; if( !pr ){ debug if (!__ctfe) logDebug("[LINK REF NOT FOUND: '%s'", refid); return false; } dst.url = pr.url; dst.title = pr.title; } str = pstr; return true; } @safe unittest { static void testLink(string s, Link exp, in LinkRef[string] refs) { Link link; assert(parseLink(s, link, refs), s); assert(link == exp); } LinkRef[string] refs; refs["ref"] = LinkRef("ref", "target", "title"); testLink(`[link](target)`, Link("link", "target"), null); testLink(`[link](target "title")`, Link("link", "target", "title"), null); testLink(`[link](target "title")`, Link("link", "target", "title"), null); testLink(`[link](target "title" )`, Link("link", "target", "title"), null); testLink(`[link](target)`, Link("link", "target"), null); testLink(`[link](target "title")`, Link("link", "target", "title"), null); testLink(`[link][ref]`, Link("link", "target", "title"), refs); testLink(`[ref][]`, Link("ref", "target", "title"), refs); testLink(`[link[with brackets]](target)`, Link("link[with brackets]", "target"), null); testLink(`[link[with brackets]][ref]`, Link("link[with brackets]", "target", "title"), refs); testLink(`[link](/target with spaces )`, Link("link", "/target with spaces"), null); testLink(`[link](/target with spaces "title")`, Link("link", "/target with spaces", "title"), null); testLink(`[link](white-space "around title" )`, Link("link", "white-space", "around title"), null); testLink(`[link](tabs "around title" )`, Link("link", "tabs", "around title"), null); testLink(`[link](target "")`, Link("link", "target", ""), null); testLink(`[link](target-no-title"foo" )`, Link("link", "target-no-title\"foo\"", ""), null); testLink(`[link]()`, Link("link", "target"), null); auto failing = [ `text`, `[link](target`, `[link]target)`, `[link]`, `[link(target)`, `link](target)`, `[link] (target)`, `[link][noref]`, `[noref][]` ]; Link link; foreach (s; failing) assert(!parseLink(s, link, refs), s); } private bool parseAutoLink(ref string str, ref string url) pure @safe { string pstr = str; if( pstr.length < 3 ) return false; if( pstr[0] != '<' ) return false; pstr = pstr[1 .. $]; auto cidx = pstr.indexOf('>'); if( cidx < 0 ) return false; url = pstr[0 .. cidx]; if( anyOf(url, " \t") ) return false; if( !anyOf(url, ":@") ) return false; str = pstr[cidx+1 .. $]; if( url.indexOf('@') > 0 ) url = "mailto:"~url; return true; } private LinkRef[string] scanForReferences(ref string[] lines) pure @safe { LinkRef[string] ret; bool[size_t] reflines; // search for reference definitions: // [refid] link "opt text" // [refid] "opt text" // "opt text", 'opt text', (opt text) // line must not be indented foreach( lnidx, ln; lines ){ if( isLineIndented(ln) ) continue; ln = strip(ln); if( !ln.startsWith("[") ) continue; ln = ln[1 .. $]; auto idx = () @trusted { return ln.indexOf("]:"); }(); if( idx < 0 ) continue; string refid = ln[0 .. idx]; ln = stripLeft(ln[idx+2 .. $]); string url; if( ln.startsWith("<") ){ idx = ln.indexOfCT('>'); if( idx < 0 ) continue; url = ln[1 .. idx]; ln = ln[idx+1 .. $]; } else { idx = ln.indexOfCT(' '); if( idx > 0 ){ url = ln[0 .. idx]; ln = ln[idx+1 .. $]; } else { idx = ln.indexOfCT('\t'); if( idx < 0 ){ url = ln; ln = ln[$ .. $]; } else { url = ln[0 .. idx]; ln = ln[idx+1 .. $]; } } } ln = stripLeft(ln); string title; if( ln.length >= 3 ){ if( ln[0] == '(' && ln[$-1] == ')' || ln[0] == '\"' && ln[$-1] == '\"' || ln[0] == '\'' && ln[$-1] == '\'' ) title = ln[1 .. $-1]; } ret[toLower(refid)] = LinkRef(refid, url, title); reflines[lnidx] = true; debug if (!__ctfe) logTrace("[detected ref on line %d]", lnidx+1); } // remove all lines containing references auto nonreflines = appender!(string[])(); nonreflines.reserve(lines.length); foreach( i, ln; lines ) if( i !in reflines ) nonreflines.put(ln); lines = nonreflines.data(); return ret; } /** Generates an identifier suitable to use as within a URL. The resulting string will contain only ASCII lower case alphabetic or numeric characters, as well as dashes (-). Every sequence of non-alphanumeric characters will be replaced by a single dash. No dashes will be at either the front or the back of the result string. */ auto asSlug(R)(R text) if (isInputRange!R && is(typeof(R.init.front) == dchar)) { static struct SlugRange { private { R _input; bool _dash; } this(R input) { _input = input; skipNonAlphaNum(); } @property bool empty() const { return _dash ? false : _input.empty; } @property char front() const { if (_dash) return '-'; char r = cast(char)_input.front; if (r >= 'A' && r <= 'Z') return cast(char)(r + ('a' - 'A')); return r; } void popFront() { if (_dash) { _dash = false; return; } _input.popFront(); auto na = skipNonAlphaNum(); if (na && !_input.empty) _dash = true; } private bool skipNonAlphaNum() { bool have_skipped = false; while (!_input.empty) { switch (_input.front) { default: _input.popFront(); have_skipped = true; break; case 'a': .. case 'z': case 'A': .. case 'Z': case '0': .. case '9': return have_skipped; } } return have_skipped; } } return SlugRange(text); } unittest { import std.algorithm : equal; assert("".asSlug.equal("")); assert(".,-".asSlug.equal("")); assert("abc".asSlug.equal("abc")); assert("aBc123".asSlug.equal("abc123")); assert("....aBc...123...".asSlug.equal("abc-123")); } private struct LinkRef { string id; string url; string title; } private struct Link { string text; string url; string title; } @safe unittest { // alt and title attributes assert(filterMarkdown("![alt](http://example.org/image)") == "

    \"alt\"\n

    \n"); assert(filterMarkdown("![alt](http://example.org/image \"Title\")") == "

    \"alt\"\n

    \n"); } @safe unittest { // complex links assert(filterMarkdown("their [install\ninstructions]() and") == "

    their install\ninstructions and\n

    \n"); assert(filterMarkdown("[![Build Status](https://travis-ci.org/rejectedsoftware/vibe.d.png)](https://travis-ci.org/rejectedsoftware/vibe.d)") == "

    \"Build\n

    \n"); } @safe unittest { // check CTFE-ability enum res = filterMarkdown("### some markdown\n[foo][]\n[foo]: /bar"); assert(res == "

    some markdown

    \n

    foo\n

    \n", res); } @safe unittest { // correct line breaks in restrictive mode auto res = filterMarkdown("hello\nworld", MarkdownFlags.forumDefault); assert(res == "

    hello
    world\n

    \n", res); } /*@safe unittest { // code blocks and blockquotes assert(filterMarkdown("\tthis\n\tis\n\tcode") == "
    this\nis\ncode
    \n"); assert(filterMarkdown(" this\n is\n code") == "
    this\nis\ncode
    \n"); assert(filterMarkdown(" this\n is\n\tcode") == "
    this\nis
    \n
    code
    \n"); assert(filterMarkdown("\tthis\n\n\tcode") == "
    this\n\ncode
    \n"); assert(filterMarkdown("\t> this") == "
    > this
    \n"); assert(filterMarkdown("> this") == "
    this
    \n"); assert(filterMarkdown("> this\n is code") == "
    this\nis code
    \n"); }*/ @safe unittest { assert(filterMarkdown("## Hello, World!") == "

    Hello, World!

    \n", filterMarkdown("## Hello, World!")); } @safe unittest { // tables assert(filterMarkdown("foo|bar\n---|---", MarkdownFlags.tables) == "\n\n
    foobar
    \n"); assert(filterMarkdown(" *foo* | bar \n---|---\n baz|bam", MarkdownFlags.tables) == "\n\n\n
    foobar
    bazbam
    \n"); assert(filterMarkdown("|foo|bar|\n---|---\n baz|bam", MarkdownFlags.tables) == "\n\n\n
    foobar
    bazbam
    \n"); assert(filterMarkdown("foo|bar\n|---|---|\nbaz|bam", MarkdownFlags.tables) == "\n\n\n
    foobar
    bazbam
    \n"); assert(filterMarkdown("foo|bar\n---|---\n|baz|bam|", MarkdownFlags.tables) == "\n\n\n
    foobar
    bazbam
    \n"); assert(filterMarkdown("foo|bar|baz\n:---|---:|:---:\n|baz|bam|bap|", MarkdownFlags.tables) == "\n\n" ~ "\n
    foobarbaz
    bazbambap
    \n"); assert(filterMarkdown(" |bar\n---|---", MarkdownFlags.tables) == "\n\n
    bar
    \n"); assert(filterMarkdown("foo|bar\n---|---\nbaz|", MarkdownFlags.tables) == "\n\n\n
    foobar
    baz
    \n"); } @safe unittest { // issue #1527 - blank lines in code blocks assert(filterMarkdown(" foo\n\n bar\n") == "
    foo\n\nbar\n
    \n"); } @safe unittest { assert(filterMarkdown("> ```\r\n> test\r\n> ```", MarkdownFlags.forumDefault) == "
    test\n
    \n
    \n"); } @safe unittest { // issue #1845 - malicious URI targets assert(filterMarkdown("[foo](javascript:foo) ![bar](javascript:bar) ", MarkdownFlags.forumDefault) == "

    foo \"bar\" javascript:baz\n

    \n"); assert(filterMarkdown("[foo][foo] ![foo][foo]\n[foo]: javascript:foo", MarkdownFlags.forumDefault) == "

    foo \"foo\"\n

    \n"); assert(filterMarkdown("[foo](javascript%3Abar)", MarkdownFlags.forumDefault) == "

    foo\n

    \n"); // extra XSS regression tests assert(filterMarkdown("[](bar)", MarkdownFlags.forumDefault) == "

    <script></script>\n

    \n"); assert(filterMarkdown("[foo](\">foo\n

    \n"); assert(filterMarkdown("[foo](javascript:bar)", MarkdownFlags.forumDefault) == "

    foo\n

    \n"); } vibe.d-0.8.2/textfilter/vibe/textfilter/urlencode.d000066400000000000000000000170341324361747700223510ustar00rootroot00000000000000/** URL-encoding implementation Copyright: © 2012-2015 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Jan Krüger, Sönke Ludwig */ module vibe.textfilter.urlencode; import vibe.utils.string; import std.algorithm; import std.array; import std.conv; import std.exception; import std.format; /** * Returns: * the URL encoded version of a given string, in a newly-allocated string. */ T[] urlEncode(T)(T[] str, const(char)[] allowed_chars = null) if (is(T[] : const(char)[])) { auto dst = StringSliceAppender!(T[])(str); filterURLEncode(dst, str, allowed_chars); return dst.data; } @safe unittest { string s = "hello-world"; assert(s.urlEncode().ptr == s.ptr); } private auto isCorrectHexNum(const(char)[] str) @safe { foreach (char c; str) { switch(c) { case '0': .. case '9': case 'A': .. case 'F': case 'a': .. case 'f': break; default: return false; } } return true; } /** Checks whether a given string has valid URL encoding. */ bool isURLEncoded(const(char)[] str, const(char)[] reserved_chars = null) @safe { for (size_t i = 0; i < str.length; i++) { switch (str[i]) { case '-': case '.': case '0': .. case '9': case 'A': .. case 'Z': case '_': case 'a': .. case 'z': case '~': break; case '%': if (i + 2 >= str.length) return false; if (!isCorrectHexNum(str[i+1 .. i+3])) return false; i += 2; break; default: if (reserved_chars.canFind(str[i])) return false; break; } } return true; } @safe unittest { assert(isURLEncoded("hello-world")); assert(isURLEncoded("he%2F%af")); assert(!isURLEncoded("hello world", " ")); assert(!isURLEncoded("he%f")); assert(!isURLEncoded("he%fx")); } /** Returns the decoded version of a given URL encoded string. */ T[] urlDecode(T)(T[] str) if (is(T[] : const(char)[])) { if (!str.anyOf("%")) return str; auto dst = StringSliceAppender!(T[])(str); filterURLDecode(dst, str); return dst.data; } /** Returns the form encoded version of a given string. Form encoding is the same as normal URL encoding, except that spaces are replaced by plus characters. Note that newlines should always be represented as \r\n sequences according to the HTTP standard. */ T[] formEncode(T)(T[] str, const(char)[] allowed_chars = null) if (is(T[] : const(char)[])) { auto dst = StringSliceAppender!(T[])(str); filterURLEncode(dst, str, allowed_chars, true); return dst.data; } /** Returns the decoded version of a form encoded string. Form encoding is the same as normal URL encoding, except that spaces are replaced by plus characters. */ T[] formDecode(T)(T[] str) if (is(T[] : const(char)[])) { if (!str.anyOf("%+")) return str; auto dst = StringSliceAppender!(T[])(str); filterURLDecode(dst, str, true); return dst.data; } /** Writes the URL encoded version of the given string to an output range. */ void filterURLEncode(R)(ref R dst, const(char)[] str, const(char)[] allowed_chars = null, bool form_encoding = false) { while (str.length > 0) { switch (str[0]) { default: if (allowed_chars.canFind(str[0])) dst.put(str[0]); else { static if (is(typeof({ R a, b; b = a; }))) formattedWrite(dst, "%%%02X", str[0]); else formattedWrite(() @trusted { return &dst; } (), "%%%02X", str[0]); } break; case ' ': if (form_encoding) { dst.put('+'); break; } goto default; case 'A': .. case 'Z': case 'a': .. case 'z': case '0': .. case '9': case '-': case '_': case '.': case '~': dst.put(str[0]); break; } str = str[1 .. $]; } } /** Writes the decoded version of the given URL encoded string to an output range. */ void filterURLDecode(R)(ref R dst, const(char)[] str, bool form_encoding = false) { while( str.length > 0 ) { switch(str[0]) { case '%': enforce(str.length >= 3, "invalid percent encoding"); auto hex = str[1..3]; auto c = cast(char)parse!int(hex, 16); enforce(hex.length == 0, "invalid percent encoding"); dst.put(c); str = str[3 .. $]; break; case '+': if (form_encoding) { dst.put(' '); str = str[1 .. $]; break; } goto default; default: dst.put(str[0]); str = str[1 .. $]; break; } } } @safe unittest { assert(urlEncode("\r\n") == "%0D%0A"); // github #65 assert(urlEncode("This-is~a_test") == "This-is~a_test"); assert(urlEncode("This is a test") == "This%20is%20a%20test"); assert(urlEncode("This{is}test") == "This%7Bis%7Dtest"); assert(formEncode("This is a test") == "This+is+a+test"); assert(formEncode("this/test", "/") == "this/test"); assert(formEncode("this/test") == "this%2Ftest"); assert(urlEncode("%") == "%25"); assert(urlEncode("!") == "%21"); assert(urlDecode("%0D%0a") == "\r\n"); assert(urlDecode("%c2%aE") == "®"); assert(urlDecode("This+is%20a+test") == "This+is a+test"); assert(formDecode("This+is%20a+test") == "This is a test"); string a = "This~is a-test!\r\nHello, Wörld.. "; string aenc = urlEncode(a); assert(aenc == "This~is%20a-test%21%0D%0AHello%2C%20W%C3%B6rld..%20"); assert(urlDecode(urlEncode(a)) == a); } private struct StringSliceAppender(S) { private { Appender!S m_appender; S m_source; size_t m_prefixLength; } this(S source) { m_source = source; if (m_source.length == 0) m_appender = appender!S(); } @disable this(this); void put(char ch) { if (m_source.length) { if (m_prefixLength < m_source.length && m_source[m_prefixLength] == ch) { m_prefixLength++; return; } m_appender = appender!S(); m_appender.put(m_source[0 .. m_prefixLength]); m_appender.put(ch); m_source = S.init; } else m_appender.put(ch); } void put(S s) { if (m_source.length) { foreach (char ch; s) put(ch); } else m_appender.put(s); } void put(dchar ch) { import std.encoding : encode; char[6] chars; static if (__VERSION__ < 2072) auto n = () @trusted { return encode(ch, chars[]); } (); else auto n = encode(ch, chars[]); foreach (char c; chars[0 .. n]) put(c); } @property S data() { return m_source.length ? m_source[0 .. m_prefixLength] : m_appender.data; } } @safe unittest { string s = "foo"; auto a = StringSliceAppender!string(s); a.put("f"); assert(a.data == "f"); assert(a.data.ptr is s.ptr); a.put('o'); assert(a.data == "fo"); assert(a.data.ptr is s.ptr); a.put('o'); assert(a.data == "foo"); assert(a.data.ptr is s.ptr); a.put('ä'); assert(a.data == "fooä"); a = StringSliceAppender!string(s); a.put('f'); assert(a.data == "f"); assert(a.data.ptr is s.ptr); a.put("oobar"); assert(a.data == "foobar"); a = StringSliceAppender!string(s); a.put(cast(dchar)'f'); assert(a.data == "f"); assert(a.data.ptr is s.ptr); a.put('b'); assert(a.data == "fb"); a = StringSliceAppender!string(s); a.put('f'); assert(a.data == "f"); assert(a.data.ptr is s.ptr); a.put("b"); assert(a.data == "fb"); a = StringSliceAppender!string(s); a.put('f'); assert(a.data == "f"); assert(a.data.ptr is s.ptr); a.put("ä"); assert(a.data == "fä"); a = StringSliceAppender!string(s); a.put("bar"); assert(a.data == "bar"); a = StringSliceAppender!string(s); a.put('b'); assert(a.data == "b"); a = StringSliceAppender!string(s); a.put('ä'); assert(a.data == "ä"); a = StringSliceAppender!string(s); a.put("foo"); assert(a.data == "foo"); assert(a.data.ptr is s.ptr); a.put("bar"); assert(a.data == "foobar"); a = StringSliceAppender!string(s); a.put("foo"); assert(a.data == "foo"); assert(a.data.ptr is s.ptr); a.put('b'); assert(a.data == "foob"); } vibe.d-0.8.2/tls/000077500000000000000000000000001324361747700135105ustar00rootroot00000000000000vibe.d-0.8.2/tls/dub.sdl000066400000000000000000000023531324361747700147710ustar00rootroot00000000000000name "tls" description "TLS stream implementations" dependency "vibe-d:stream" version="*" lflags "-L/usr/local/opt/openssl/lib" platform="osx" targetType "library" sourcePaths "." importPaths "." copyFiles "../lib/win-i386/libeay32.dll" "../lib/win-i386/ssleay32.dll" platform="windows-x86" copyFiles "../lib/win-amd64/libeay32.dll" "../lib/win-amd64/ssleay32.dll" platform="windows-x86_64" configuration "openssl-mscoff" { platforms "windows-x86_mscoff" "windows-x86_64" "windows-x86-ldc" dependency "openssl" version=">=1.0.0+1.0.0e" sourceFiles "../lib/win-i386-mscoff/libeay32.lib" "../lib/win-i386-mscoff/ssleay32.lib" platform="windows-x86_mscoff" sourceFiles "../lib/win-amd64/libeay32.lib" "../lib/win-amd64/ssleay32.lib" platform="windows-x86_64" } configuration "openssl" { sourceFiles "../lib/win-i386/eay.lib" "../lib/win-i386/ssl.lib" platform="windows-x86-dmd" dependency "openssl" version="~>1.0" } configuration "openssl-1.1" { platforms "posix" dependency "openssl" version="~>1.0" versions "VibeUseOpenSSL11" } configuration "openssl-0.9" { platforms "posix" dependency "openssl" version="~>1.0" versions "VibeUseOldOpenSSL" } configuration "botan" { dependency "botan" version="~>1.12.0" } configuration "notls" { } vibe.d-0.8.2/tls/meson.build000066400000000000000000000033671324361747700156630ustar00rootroot00000000000000# Meson file for Vibe TLS vibe_tls_src_dir = include_directories('.') vibe_tls_src = [ 'vibe/stream/botan.d', 'vibe/stream/openssl.d', 'vibe/stream/tls.d' ] # # Install Includes # install_subdir('vibe/', install_dir: 'include/d/vibe/') # # Build Targets # tls_link_with = [vibe_utils_lib, vibe_core_lib, vibe_data_lib, vibe_stream_lib] # TLS stream implementations vibe_tls_lib = library('vibe-tls', [vibe_tls_src], include_directories: [vibe_utils_src_dir, vibe_core_src_dir, vibe_data_src_dir, vibe_stream_src_dir, openssl_inc], install: true, link_with: [tls_link_with], dependencies: [crypto_dep, ssl_dep], version: project_version, soversion: project_soversion ) pkgc.generate(name: 'vibe-tls', libraries: [vibe_tls_lib] + tls_link_with, subdirs: 'd/vibe', version: project_version, description: 'TLS stream implementations for Vibe.' ) # # Tests # vibe_test_tls_exe = executable('vibe-test_tls', [vibe_tls_src], include_directories: [vibe_utils_src_dir, vibe_core_src_dir, vibe_data_src_dir, vibe_stream_src_dir, openssl_inc, libevent_inc], dependencies: [zlib_dep, crypto_dep, ssl_dep, libevent_dep], link_with: [tls_link_with], d_args: meson.get_compiler('d').unittest_args(), link_args: '-main' ) test('vibe-test_tls', vibe_test_tls_exe) vibe.d-0.8.2/tls/vibe/000077500000000000000000000000001324361747700144355ustar00rootroot00000000000000vibe.d-0.8.2/tls/vibe/stream/000077500000000000000000000000001324361747700157305ustar00rootroot00000000000000vibe.d-0.8.2/tls/vibe/stream/botan.d000066400000000000000000000637221324361747700172120ustar00rootroot00000000000000/** Botan TLS implementation Copyright: © 2015 RejectedSoftware e.K., GlobecSys Inc Authors: Sönke Ludwig, Etienne Cimon License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. */ module vibe.stream.botan; version(Have_botan): version = X509; import botan.constants; import botan.cert.x509.x509cert; import botan.cert.x509.certstor; import botan.cert.x509.x509path; import botan.math.bigint.bigint; import botan.tls.blocking; import botan.tls.channel; import botan.tls.credentials_manager; import botan.tls.exceptn; import botan.tls.server; import botan.tls.session_manager; import botan.tls.server_info; import botan.tls.ciphersuite; import botan.rng.auto_rng; import vibe.core.stream; import vibe.stream.tls; import vibe.core.net; import vibe.internal.interfaceproxy : InterfaceProxy; import std.datetime; import std.exception; class BotanTLSStream : TLSStream/*, Buffered*/ { @safe: private { InterfaceProxy!Stream m_stream; TLSBlockingChannel m_tlsChannel; BotanTLSContext m_ctx; OnAlert m_alertCB; OnHandshakeComplete m_handshakeComplete; TLSCiphersuite m_cipher; TLSProtocolVersion m_ver; SysTime m_session_age; X509Certificate m_peer_cert; TLSCertificateInformation m_cert_compat; ubyte[] m_sess_id; Exception m_ex; } /// Returns the date/time the session was started @property SysTime started() const { return m_session_age; } /// Get the session ID @property const(ubyte[]) sessionId() { return m_sess_id; } /// Returns the remote public certificate from the chain @property const(X509Certificate) x509Certificate() const @system { return m_peer_cert; } /// Returns the negotiated version of the TLS Protocol @property TLSProtocolVersion protocol() const { return m_ver; } /// Returns the complete ciphersuite details from the negotiated TLS connection @property TLSCiphersuite cipher() const { return m_cipher; } @property string alpn() const @trusted { return m_tlsChannel.underlyingChannel().applicationProtocol(); } @property TLSCertificateInformation peerCertificate() { if (!!m_peer_cert) logWarn("BotanTLSStream.peerCertificate is not implemented and does not return the actual certificate information."); return TLSCertificateInformation.init; } // Constructs a new TLS Client Stream and connects with the specified handlers this(InterfaceProxy!Stream underlying, BotanTLSContext ctx, void delegate(in TLSAlert alert, in ubyte[] ub) alert_cb, bool delegate(in TLSSession session) hs_cb, string peer_name = null, NetworkAddress peer_address = NetworkAddress.init) @trusted { m_ctx = ctx; m_stream = underlying; m_alertCB = alert_cb; m_handshakeComplete = hs_cb; assert(m_ctx.m_kind == TLSContextKind.client, "Connecting through a server context is not supported"); // todo: add service name? TLSServerInformation server_info = TLSServerInformation(peer_name, peer_address.port); m_tlsChannel = TLSBlockingChannel(&onRead, &onWrite, &onAlert, &onHandhsakeComplete, m_ctx.m_sessionManager, m_ctx.m_credentials, m_ctx.m_policy, m_ctx.m_rng, server_info, m_ctx.m_offer_version, m_ctx.m_clientOffers.dup); try m_tlsChannel.doHandshake(); catch (Exception e) { m_ex = e; } } // This constructor is used by the TLS Context for both server and client streams this(InterfaceProxy!Stream underlying, BotanTLSContext ctx, TLSStreamState state, string peer_name = null, NetworkAddress peer_address = NetworkAddress.init) @trusted { m_ctx = ctx; m_stream = underlying; if (state == TLSStreamState.accepting) { assert(m_ctx.m_kind != TLSContextKind.client, "Accepting through a client context is not supported"); m_tlsChannel = TLSBlockingChannel(&onRead, &onWrite, &onAlert, &onHandhsakeComplete, m_ctx.m_sessionManager, m_ctx.m_credentials, m_ctx.m_policy, m_ctx.m_rng, &m_ctx.nextProtocolHandler, &m_ctx.sniHandler, m_ctx.m_is_datagram); } else if (state == TLSStreamState.connecting) { assert(m_ctx.m_kind == TLSContextKind.client, "Connecting through a server context is not supported"); // todo: add service name? TLSServerInformation server_info = TLSServerInformation(peer_name, peer_address.port); m_tlsChannel = TLSBlockingChannel(&onRead, &onWrite, &onAlert, &onHandhsakeComplete, m_ctx.m_sessionManager, m_ctx.m_credentials, m_ctx.m_policy, m_ctx.m_rng, server_info, m_ctx.m_offer_version, m_ctx.m_clientOffers.dup); } else /*if (state == TLSStreamState.connected)*/ { m_tlsChannel = TLSBlockingChannel.init; throw new Exception("Cannot load BotanTLSSteam from a connected TLS session"); } try m_tlsChannel.doHandshake(); catch (Exception e) { m_ex = e; } } ~this() @trusted { try m_tlsChannel.destroy(); catch (Exception e) { } } void flush() { processException(); m_stream.flush(); } void finalize() { if (() @trusted { return m_tlsChannel.isClosed(); } ()) return; processException(); scope(success) processException(); () @trusted { m_tlsChannel.close(); } (); m_stream.flush(); } size_t read(scope ubyte[] dst, IOMode) { processException(); scope(success) processException(); () @trusted { m_tlsChannel.read(dst); } (); return dst.length; } alias read = Stream.read; ubyte[] readChunk(ubyte[] buf) { processException(); scope(success) processException(); return () @trusted { return m_tlsChannel.readBuf(buf); } (); } size_t write(in ubyte[] src, IOMode) { processException(); scope(success) processException(); () @trusted { m_tlsChannel.write(src); } (); return src.length; } alias write = Stream.write; @property bool empty() { processException(); return leastSize() == 0; } @property ulong leastSize() { size_t ret = () @trusted { return m_tlsChannel.pending(); } (); if (ret > 0) return ret; if (() @trusted { return m_tlsChannel.isClosed(); } () || m_ex !is null) return 0; try () @trusted { m_tlsChannel.readBuf(null); } (); // force an exchange catch (Exception e) { return 0; } ret = () @trusted { return m_tlsChannel.pending(); } (); //logDebug("Least size returned: ", ret); return ret > 0 ? ret : m_stream.empty ? 0 : 1; } @property bool dataAvailableForRead() { processException(); if (() @trusted { return m_tlsChannel.pending(); } () > 0) return true; if (!m_stream.dataAvailableForRead) return false; () @trusted { m_tlsChannel.readBuf(null); } (); // force an exchange return () @trusted { return m_tlsChannel.pending(); } () > 0; } const(ubyte)[] peek() { processException(); auto peeked = () @trusted { return m_tlsChannel.peek(); } (); //logDebug("Peeked data: ", cast(ubyte[])peeked); //logDebug("Peeked data ptr: ", peeked.ptr); return peeked; } void setAlertCallback(OnAlert alert_cb) @system { processException(); m_alertCB = alert_cb; } void setHandshakeCallback(OnHandshakeComplete hs_cb) @system { processException(); m_handshakeComplete = hs_cb; } private void processException() @safe { if (auto ex = m_ex) { m_ex = null; throw ex; } } private void onAlert(in TLSAlert alert, in ubyte[] data) @trusted { if (alert.isFatal) m_ex = new Exception("TLS Alert Received: " ~ alert.typeString()); if (m_alertCB) m_alertCB(alert, data); } private bool onHandhsakeComplete(in TLSSession session) @trusted { m_sess_id = cast(ubyte[])session.sessionId()[].dup; m_cipher = session.ciphersuite(); m_session_age = session.startTime(); m_ver = session.Version(); if (session.peerCerts().length > 0) m_peer_cert = session.peerCerts()[0]; if (m_handshakeComplete) return m_handshakeComplete(session); return true; } private ubyte[] onRead(ubyte[] buf) { import std.algorithm : min; ubyte[] ret; /*if (auto buffered = cast(Buffered)m_stream) { ret = buffered.readChunk(buf); return ret; }*/ size_t len = min(m_stream.leastSize(), buf.length); if (len == 0) return null; m_stream.read(buf[0 .. len]); return buf[0 .. len]; } private void onWrite(in ubyte[] src) { //logDebug("Write: %s", src); m_stream.write(src); } } class BotanTLSContext : TLSContext { private { TLSSessionManager m_sessionManager; TLSPolicy m_policy; TLSCredentialsManager m_credentials; TLSContextKind m_kind; AutoSeededRNG m_rng; TLSProtocolVersion m_offer_version; TLSServerNameCallback m_sniCallback; TLSALPNCallback m_serverCb; Vector!string m_clientOffers; bool m_is_datagram; bool m_certChecked; } this(TLSContextKind kind, TLSCredentialsManager credentials = null, TLSPolicy policy = null, TLSSessionManager session_manager = null, bool is_datagram = false) @trusted { if (!credentials) credentials = new CustomTLSCredentials(); m_kind = kind; m_credentials = credentials; m_is_datagram = is_datagram; if (is_datagram) m_offer_version = TLSProtocolVersion.DTLS_V12; else m_offer_version = TLSProtocolVersion.TLS_V12; m_rng = new AutoSeededRNG(); if (!session_manager) session_manager = new TLSSessionManagerInMemory(m_rng); m_sessionManager = session_manager; if (!policy) { if (!gs_default_policy) gs_default_policy = new CustomTLSPolicy(); policy = cast(TLSPolicy)gs_default_policy; } m_policy = policy; } /// The kind of TLS context (client/server) @property TLSContextKind kind() const { return m_kind; } /// Used by clients to indicate protocol preference, use TLSPolicy to restrict the protocol versions @property void defaultProtocolOffer(TLSProtocolVersion ver) { m_offer_version = ver; } /// ditto @property TLSProtocolVersion defaultProtocolOffer() { return m_offer_version; } @property void sniCallback(TLSServerNameCallback callback) { m_sniCallback = callback; } @property inout(TLSServerNameCallback) sniCallback() inout { return m_sniCallback; } /// Callback function invoked by server to choose alpn @property void alpnCallback(TLSALPNCallback alpn_chooser) { m_serverCb = alpn_chooser; } /// Get the current ALPN callback function @property TLSALPNCallback alpnCallback() const { return m_serverCb; } /// Invoked by client to offer alpn, all strings are copied on the GC @property void setClientALPN(string[] alpn_list) { () @trusted { m_clientOffers.clear(); } (); foreach (alpn; alpn_list) () @trusted { m_clientOffers ~= alpn.idup; } (); } /** Creates a new stream associated to this context. */ TLSStream createStream(InterfaceProxy!Stream underlying, TLSStreamState state, string peer_name = null, NetworkAddress peer_address = NetworkAddress.init) { if (!m_certChecked) () @trusted { checkCert(); } (); return new BotanTLSStream(underlying, this, state, peer_name, peer_address); } /** Specifies the validation level of remote peers. The default mode for TLSContextKind.client is TLSPeerValidationMode.trustedCert and the default for TLSContextKind.server is TLSPeerValidationMode.none. */ @property void peerValidationMode(TLSPeerValidationMode mode) { if (auto credentials = cast(CustomTLSCredentials)m_credentials) { credentials.m_validationMode = mode; return; } else assert(false, "Cannot handle peerValidationMode if CustomTLSCredentials is not used"); } /// ditto @property TLSPeerValidationMode peerValidationMode() const { if (auto credentials = cast(const(CustomTLSCredentials))m_credentials) { return credentials.m_validationMode; } else assert(false, "Cannot handle peerValidationMode if CustomTLSCredentials is not used"); } /** An optional user callback for peer validation. Peer validation callback is unused in Botan. Specify a custom TLS Policy to handle peer certificate data. */ @property void peerValidationCallback(TLSPeerValidationCallback callback) { assert(false, "Peer validation callback is unused in Botan. Specify a custom TLS Policy to handle peer certificate data."); } /// ditto @property inout(TLSPeerValidationCallback) peerValidationCallback() inout { return TLSPeerValidationCallback.init; } /** The maximum length of an accepted certificate chain. Any certificate chain longer than this will result in the TLS negitiation failing. The default value is 9. */ @property void maxCertChainLength(int val) { if (auto credentials = cast(CustomTLSCredentials)m_credentials) { credentials.m_max_cert_chain_length = val; return; } else assert(false, "Cannot handle maxCertChainLength if CustomTLSCredentials is not used"); } /// ditto @property int maxCertChainLength() const { if (auto credentials = cast(const(CustomTLSCredentials))m_credentials) { return credentials.m_max_cert_chain_length; } else assert(false, "Cannot handle maxCertChainLength if CustomTLSCredentials is not used"); } void setCipherList(string list = null) { assert(false, "Incompatible interface method requested"); } /** Set params to use for DH cipher. * * By default the 2048-bit prime from RFC 3526 is used. * * Params: * pem_file = Path to a PEM file containing the DH parameters. Calling * this function without argument will restore the default. */ void setDHParams(string pem_file=null) { assert(false, "Incompatible interface method requested"); } /** Set the elliptic curve to use for ECDH cipher. * * By default a curve is either chosen automatically or prime256v1 is used. * * Params: * curve = The short name of the elliptic curve to use. Calling this * function without argument will restore the default. * */ void setECDHCurve(string curve=null) { assert(false, "Incompatible interface method requested"); } /// Sets a certificate file to use for authenticating to the remote peer void useCertificateChainFile(string path) { if (auto credentials = cast(CustomTLSCredentials)m_credentials) { m_certChecked = false; () @trusted { credentials.m_server_cert = X509Certificate(path); } (); return; } else assert(false, "Cannot handle useCertificateChainFile if CustomTLSCredentials is not used"); } /// Sets the private key to use for authenticating to the remote peer based /// on the configured certificate chain file. /// todo: Use passphrase? void usePrivateKeyFile(string path) { if (auto credentials = cast(CustomTLSCredentials)m_credentials) { import botan.pubkey.pkcs8 : loadKey; credentials.m_key = () @trusted { return loadKey(path, m_rng); } (); return; } else assert(false, "Cannot handle usePrivateKeyFile if CustomTLSCredentials is not used"); } /** Sets the list of trusted certificates for verifying peer certificates. If this is a server context, this also entails that the given certificates are advertised to connecting clients during handshake. On Linux, the system's root certificate authority list is usually found at "/etc/ssl/certs/ca-certificates.crt", "/etc/pki/tls/certs/ca-bundle.crt", or "/etc/ssl/ca-bundle.pem". */ void useTrustedCertificateFile(string path) { if (auto credentials = cast(CustomTLSCredentials)m_credentials) { auto store = () @trusted { return new CertificateStoreInMemory; } (); () @trusted { store.addCertificate(X509Certificate(path)); } (); () @trusted { credentials.m_stores.pushBack(store); } (); return; } else assert(false, "Cannot handle useTrustedCertificateFile if CustomTLSCredentials is not used"); } private SNIContextSwitchInfo sniHandler(string hostname) { auto ctx = onSNI(hostname); if (!ctx) return SNIContextSwitchInfo.init; SNIContextSwitchInfo chgctx; chgctx.session_manager = ctx.m_sessionManager; chgctx.credentials = ctx.m_credentials; chgctx.policy = ctx.m_policy; chgctx.next_proto = &ctx.nextProtocolHandler; //chgctx.user_data = cast(void*)hostname.toStringz(); return chgctx; } private string nextProtocolHandler(in Vector!string offers) { enforce(m_kind == TLSContextKind.server, "Attempted ALPN selection on a " ~ m_kind.to!string); if (m_serverCb !is null) return m_serverCb(offers[]); else return ""; } private BotanTLSContext onSNI(string hostname) { if (m_kind != TLSContextKind.serverSNI) return null; TLSContext ctx = m_sniCallback(hostname); if (auto bctx = cast(BotanTLSContext) ctx) { // Since this happens in a BotanTLSStream, the stream info (r/w callback) remains the same return bctx; } // We cannot use anything else than a Botan stream, and any null value with serverSNI is a failure throw new Exception("Could not find specified hostname"); } private void checkCert() { m_certChecked = true; if (m_kind == TLSContextKind.client) return; if (auto creds = cast(CustomTLSCredentials) m_credentials) { auto sigs = m_policy.allowedSignatureMethods(); import botan.asn1.oids : OIDS; import vibe.core.log : logDebug; auto sig_algo = OIDS.lookup(creds.m_server_cert.signatureAlgorithm().oid()); import std.range : front; import std.algorithm.iteration : splitter; string sig_algo_str = sig_algo.splitter("/").front.to!string; logDebug("Certificate algorithm: %s", sig_algo_str); bool found; foreach (sig; sigs[]) { if (sig == sig_algo_str) { found = true; break; } } assert(found, "Server Certificate uses a signing algorithm that is not accepted in the server policy."); } } } /** * TLS Policy as a settings object */ private class CustomTLSPolicy : TLSPolicy { private { TLSProtocolVersion m_min_ver = TLSProtocolVersion.TLS_V10; int m_min_dh_group_size = 1024; Vector!TLSCiphersuite m_pri_ciphersuites; Vector!string m_pri_ecc_curves; Duration m_session_lifetime = 24.hours; bool m_pri_ciphers_exclusive; bool m_pri_curves_exclusive; } /// Sets the minimum acceptable protocol version @property void minProtocolVersion(TLSProtocolVersion ver) { m_min_ver = ver; } /// Get the minimum acceptable protocol version @property TLSProtocolVersion minProtocolVersion() { return m_min_ver; } @property void minDHGroupSize(int sz) { m_min_dh_group_size = sz; } @property int minDHGroupSize() { return m_min_dh_group_size; } /// Add a cipher suite to the priority ciphers with lowest ordering value void addPriorityCiphersuites(TLSCiphersuite[] suites) { m_pri_ciphersuites ~= suites; } @property TLSCiphersuite[] ciphers() { return m_pri_ciphersuites[]; } /// Set to true to use excuslively priority ciphers passed through "addCiphersuites" @property void priorityCiphersOnly(bool b) { m_pri_ciphers_exclusive = b; } @property bool priorityCiphersOnly() { return m_pri_ciphers_exclusive; } void addPriorityCurves(string[] curves) { m_pri_ecc_curves ~= curves; } @property string[] priorityCurves() { return m_pri_ecc_curves[]; } /// Uses only priority curves passed through "add" @property void priorityCurvesOnly(bool b) { m_pri_curves_exclusive = b; } @property bool priorityCurvesOnly() { return m_pri_curves_exclusive; } override string chooseCurve(in Vector!string curve_names) const { import std.algorithm : countUntil; foreach (curve; m_pri_ecc_curves[]) { if (curve_names[].countUntil(curve) != -1) return curve; } if (!m_pri_curves_exclusive) return super.chooseCurve((cast(Vector!string)curve_names).move); return ""; } override Vector!string allowedEccCurves() const { Vector!string ret; if (!m_pri_ecc_curves.empty) ret ~= m_pri_ecc_curves[]; if (!m_pri_curves_exclusive) ret ~= super.allowedEccCurves(); return ret; } override Vector!ushort ciphersuiteList(TLSProtocolVersion _version, bool have_srp) const { Vector!ushort ret; if (m_pri_ciphersuites.length > 0) { foreach (suite; m_pri_ciphersuites) { ret ~= suite.ciphersuiteCode(); } } if (!m_pri_ciphers_exclusive) { ret ~= super.ciphersuiteList(_version, have_srp); } return ret; } override bool acceptableProtocolVersion(TLSProtocolVersion _version) const { if (m_min_ver != TLSProtocolVersion.init) return _version >= m_min_ver; return super.acceptableProtocolVersion(_version); } override Duration sessionTicketLifetime() const { return m_session_lifetime; } override size_t minimumDhGroupSize() const { return m_min_dh_group_size; } } private class CustomTLSCredentials : TLSCredentialsManager { private { TLSPeerValidationMode m_validationMode = TLSPeerValidationMode.none; int m_max_cert_chain_length = 9; } public { X509Certificate m_server_cert, m_ca_cert; PrivateKey m_key; Vector!CertificateStore m_stores; } this() { } // Client constructor this(TLSPeerValidationMode validation_mode = TLSPeerValidationMode.checkPeer) { m_validationMode = validation_mode; } // Server constructor this(X509Certificate server_cert, X509Certificate ca_cert, PrivateKey server_key) { m_server_cert = server_cert; m_ca_cert = ca_cert; m_key = server_key; auto store = new CertificateStoreInMemory; store.addCertificate(m_ca_cert); m_stores.pushBack(store); m_validationMode = TLSPeerValidationMode.none; } override Vector!CertificateStore trustedCertificateAuthorities(in string, in string) { // todo: Check machine stores for client mode return m_stores.dup; } override Vector!X509Certificate certChain(const ref Vector!string cert_key_types, in string type, in string) { Vector!X509Certificate chain; if (type == "tls-server") { bool have_match = false; foreach (cert_key_type; cert_key_types[]) { if (cert_key_type == m_key.algoName) { enforce(m_server_cert, "Private Key was defined but no corresponding server certificate was found."); have_match = true; } } if (have_match) { chain.pushBack(m_server_cert); if (m_ca_cert) chain.pushBack(m_ca_cert); } } return chain.move(); } override void verifyCertificateChain(in string type, in string purported_hostname, const ref Vector!X509Certificate cert_chain) { if (cert_chain.empty) throw new InvalidArgument("Certificate chain was empty"); if (m_validationMode == TLSPeerValidationMode.validCert) { auto trusted_CAs = trustedCertificateAuthorities(type, purported_hostname); PathValidationRestrictions restrictions; restrictions.maxCertChainLength = m_max_cert_chain_length; auto result = x509PathValidate(cert_chain, restrictions, trusted_CAs); if (!result.successfulValidation()) throw new Exception("Certificate validation failure: " ~ result.resultString()); if (!certInSomeStore(trusted_CAs, result.trustRoot())) throw new Exception("Certificate chain roots in unknown/untrusted CA"); if (purported_hostname != "" && !cert_chain[0].matchesDnsName(purported_hostname)) throw new Exception("Certificate did not match hostname"); return; } if (m_validationMode & TLSPeerValidationMode.checkTrust) { auto trusted_CAs = trustedCertificateAuthorities(type, purported_hostname); PathValidationRestrictions restrictions; restrictions.maxCertChainLength = m_max_cert_chain_length; PathValidationResult result; try result = x509PathValidate(cert_chain, restrictions, trusted_CAs); catch (Exception e) { } if (!certInSomeStore(trusted_CAs, result.trustRoot())) throw new Exception("Certificate chain roots in unknown/untrusted CA"); } // Commit to basic tests for other validation modes if (m_validationMode & TLSPeerValidationMode.checkCert) { import botan.asn1.asn1_time : X509Time; X509Time current_time = X509Time(Clock.currTime()); // Check all certs for valid time range if (current_time < X509Time(cert_chain[0].startTime())) throw new Exception("Certificate is not yet valid"); if (current_time > X509Time(cert_chain[0].endTime())) throw new Exception("Certificate has expired"); if (cert_chain[0].isSelfSigned()) throw new Exception("Certificate was self signed"); } if (m_validationMode & TLSPeerValidationMode.checkPeer) if (purported_hostname != "" && !cert_chain[0].matchesDnsName(purported_hostname)) throw new Exception("Certificate did not match hostname"); } override PrivateKey privateKeyFor(in X509Certificate, in string, in string) { return m_key; } // Interface fallthrough override Vector!X509Certificate certChainSingleType(in string cert_key_type, in string type, in string context) { return super.certChainSingleType(cert_key_type, type, context); } override bool attemptSrp(in string type, in string context) { return super.attemptSrp(type, context); } override string srpIdentifier(in string type, in string context) { return super.srpIdentifier(type, context); } override string srpPassword(in string type, in string context, in string identifier) { return super.srpPassword(type, context, identifier); } override bool srpVerifier(in string type, in string context, in string identifier, ref string group_name, ref BigInt verifier, ref Vector!ubyte salt, bool generate_fake_on_unknown) { return super.srpVerifier(type, context, identifier, group_name, verifier, salt, generate_fake_on_unknown); } override string pskIdentityHint(in string type, in string context) { return super.pskIdentityHint(type, context); } override string pskIdentity(in string type, in string context, in string identity_hint) { return super.pskIdentity(type, context, identity_hint); } override SymmetricKey psk(in string type, in string context, in string identity) { return super.psk(type, context, identity); } override bool hasPsk() { return super.hasPsk(); } } private CustomTLSCredentials createCreds() { import botan.rng.auto_rng; import botan.cert.x509.pkcs10; import botan.cert.x509.x509self; import botan.cert.x509.x509_ca; import botan.pubkey.algo.rsa; import botan.codec.hex; import botan.utils.types; scope rng = new AutoSeededRNG(); auto ca_key = RSAPrivateKey(rng, 1024); scope(exit) ca_key.destroy(); X509CertOptions ca_opts; ca_opts.common_name = "Test CA"; ca_opts.country = "US"; ca_opts.CAKey(1); X509Certificate ca_cert = x509self.createSelfSignedCert(ca_opts, *ca_key, "SHA-256", rng); auto server_key = RSAPrivateKey(rng, 1024); X509CertOptions server_opts; server_opts.common_name = "localhost"; server_opts.country = "US"; PKCS10Request req = x509self.createCertReq(server_opts, *server_key, "SHA-256", rng); X509CA ca = X509CA(ca_cert, *ca_key, "SHA-256"); auto now = Clock.currTime(UTC()); X509Time start_time = X509Time(now); X509Time end_time = X509Time(now + 365.days); X509Certificate server_cert = ca.signRequest(req, rng, start_time, end_time); return new CustomTLSCredentials(server_cert, ca_cert, server_key.release()); } private { __gshared CustomTLSPolicy gs_default_policy; } vibe.d-0.8.2/tls/vibe/stream/openssl.d000066400000000000000000001132671324361747700175720ustar00rootroot00000000000000/** OpenSSL based SSL/TLS stream implementation Copyright: © 2012-2014 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.stream.openssl; version(Have_openssl): import vibe.core.log; import vibe.core.net; import vibe.core.stream; import vibe.core.sync; import vibe.stream.tls; import vibe.internal.interfaceproxy : InterfaceProxy; import std.algorithm; import std.array; import std.conv; import std.exception; import std.socket; import std.string; import core.stdc.string : strlen; import core.sync.mutex; import core.thread; /**************************************************************************************************/ /* Public types */ /**************************************************************************************************/ import deimos.openssl.bio; import deimos.openssl.err; import deimos.openssl.rand; import deimos.openssl.ssl; import deimos.openssl.stack; import deimos.openssl.x509v3; version (VibePragmaLib) { pragma(lib, "ssl"); version (Windows) pragma(lib, "eay"); } version (VibeUseOldOpenSSL) private enum haveECDH = false; else private enum haveECDH = OPENSSL_VERSION_NUMBER >= 0x10001000; version(VibeForceALPN) enum alpn_forced = true; else enum alpn_forced = false; enum haveALPN = OPENSSL_VERSION_NUMBER >= 0x10200000 || alpn_forced; // openssl 1.1.0 hack: provides a 1.0.x API in terms of the 1.1.x API version (VibeUseOpenSSL11) { extern(C) const(SSL_METHOD)* TLS_client_method(); alias SSLv23_client_method = TLS_client_method; extern(C) const(SSL_METHOD)* TLS_server_method(); alias SSLv23_server_method = TLS_server_method; // this does nothing in > openssl 1.1.0 void SSL_load_error_strings() {} extern(C) int OPENSSL_init_ssl(ulong opts, const void* settings); // # define SSL_library_init() OPENSSL_init_ssl(0, NULL) int SSL_library_init() { return OPENSSL_init_ssl(0, null); } //# define CRYPTO_num_locks() (1) int CRYPTO_num_locks() { return 1; } void CRYPTO_set_id_callback(T)(T t) { } void CRYPTO_set_locking_callback(T)(T t) { } // #define SSL_get_ex_new_index(l, p, newf, dupf, freef) \ // CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, l, p, newf, dupf, freef) extern(C) int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func); int SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) { // # define CRYPTO_EX_INDEX_SSL 0 return CRYPTO_get_ex_new_index(0, argl, argp, new_func, dup_func, free_func); } extern(C) BIGNUM* BN_get_rfc3526_prime_2048(BIGNUM *bn); alias get_rfc3526_prime_2048 = BN_get_rfc3526_prime_2048; // # define sk_num OPENSSL_sk_num extern(C) int OPENSSL_sk_num(const void *); extern(C) int sk_num(const(_STACK)* p) { return OPENSSL_sk_num(p); } // # define sk_value OPENSSL_sk_value extern(C) void *OPENSSL_sk_value(const void *, int); extern(C) void* sk_value(const(_STACK)* p, int i) { return OPENSSL_sk_value(p, i); } } /** Creates an SSL/TLS tunnel within an existing stream. Note: Be sure to call finalize before finalizing/closing the outer stream so that the SSL tunnel is properly closed first. */ final class OpenSSLStream : TLSStream { @safe: private { InterfaceProxy!Stream m_stream; TLSContext m_tlsCtx; TLSStreamState m_state; SSLState m_tls; BIO* m_bio; ubyte[64] m_peekBuffer; TLSCertificateInformation m_peerCertificateInfo; X509* m_peerCertificate; } this(InterfaceProxy!Stream underlying, OpenSSLContext ctx, TLSStreamState state, string peer_name = null, NetworkAddress peer_address = NetworkAddress.init, string[] alpn = null) { m_stream = underlying; m_state = state; m_tlsCtx = ctx; m_tls = ctx.createClientCtx(); scope (failure) { () @trusted { SSL_free(m_tls); } (); m_tls = null; } m_bio = () @trusted { return BIO_new(&s_bio_methods); } (); enforce(m_bio !is null, "SSL failed: failed to create BIO structure."); m_bio.init_ = 1; m_bio.ptr = () @trusted { return cast(void*)this; } (); // lifetime is shorter than this, so no GC.addRange needed. m_bio.shutdown = 0; () @trusted { SSL_set_bio(m_tls, m_bio, m_bio); } (); if (state != TLSStreamState.connected) { OpenSSLContext.VerifyData vdata; vdata.verifyDepth = ctx.maxCertChainLength; vdata.validationMode = ctx.peerValidationMode; vdata.callback = ctx.peerValidationCallback; vdata.peerName = peer_name; vdata.peerAddress = peer_address; () @trusted { SSL_set_ex_data(m_tls, gs_verifyDataIndex, &vdata); } (); scope (exit) () @trusted { SSL_set_ex_data(m_tls, gs_verifyDataIndex, null); } (); final switch (state) { case TLSStreamState.accepting: //SSL_set_accept_state(m_tls); checkSSLRet(() @trusted { return SSL_accept(m_tls); } (), "Accepting SSL tunnel"); break; case TLSStreamState.connecting: // a client stream can override the default ALPN setting for this context if (alpn.length) setClientALPN(alpn); if (peer_name.length) () @trusted { return SSL_ctrl(m_tls, SSL_CTRL_SET_TLSEXT_HOSTNAME, TLSEXT_NAMETYPE_host_name, cast(void*)peer_name.toStringz); } (); //SSL_set_connect_state(m_tls); checkSSLRet(() @trusted { return SSL_connect(m_tls); } (), "Connecting TLS tunnel"); break; case TLSStreamState.connected: break; } // ensure that the SSL tunnel gets terminated when an error happens during verification scope (failure) () @trusted { SSL_shutdown(m_tls); } (); m_peerCertificate = () @trusted { return SSL_get_peer_certificate(m_tls); } (); if (m_peerCertificate) { readPeerCertInfo(); auto result = () @trusted { return SSL_get_verify_result(m_tls); } (); if (result == X509_V_OK && (ctx.peerValidationMode & TLSPeerValidationMode.checkPeer)) { if (!verifyCertName(m_peerCertificate, GENERAL_NAME.GEN_DNS, vdata.peerName)) { version(Windows) import core.sys.windows.winsock2; else import core.sys.posix.netinet.in_; logDiagnostic("TLS peer name '%s' couldn't be verified, trying IP address.", vdata.peerName); char* addr; int addrlen; switch (vdata.peerAddress.family) { default: break; case AF_INET: addr = cast(char*)&vdata.peerAddress.sockAddrInet4.sin_addr; addrlen = vdata.peerAddress.sockAddrInet4.sin_addr.sizeof; break; case AF_INET6: addr = cast(char*)&vdata.peerAddress.sockAddrInet6.sin6_addr; addrlen = vdata.peerAddress.sockAddrInet6.sin6_addr.sizeof; break; } if (!verifyCertName(m_peerCertificate, GENERAL_NAME.GEN_IPADD, () @trusted { return addr[0 .. addrlen]; } ())) { logDiagnostic("Error validating TLS peer address"); result = X509_V_ERR_APPLICATION_VERIFICATION; } } } enforce(result == X509_V_OK, "Peer failed the certificate validation: "~to!string(result)); } //else enforce(ctx.verifyMode < requireCert); } } /** Read certificate info into the clientInformation field */ private void readPeerCertInfo() { X509_NAME* name = () @trusted { return X509_get_subject_name(m_peerCertificate); } (); int c = () @trusted { return X509_NAME_entry_count(name); } (); foreach (i; 0 .. c) { X509_NAME_ENTRY *e = () @trusted { return X509_NAME_get_entry(name, i); } (); ASN1_OBJECT *obj = () @trusted { return X509_NAME_ENTRY_get_object(e); } (); ASN1_STRING *val = () @trusted { return X509_NAME_ENTRY_get_data(e); } (); auto longName = () @trusted { return OBJ_nid2ln(OBJ_obj2nid(obj)).to!string; } (); auto valStr = () @trusted { return cast(string)val.data[0 .. val.length]; } (); // FIXME: .idup? m_peerCertificateInfo.subjectName.addField(longName, valStr); } m_peerCertificateInfo._x509 = m_peerCertificate; } ~this() { if (m_peerCertificate) () @trusted { X509_free(m_peerCertificate); } (); if (m_tls) () @trusted { SSL_free(m_tls); } (); } @property bool empty() { return leastSize() == 0; } @property ulong leastSize() { checkSSLRet(() @trusted { return SSL_peek(m_tls, m_peekBuffer.ptr, 1); } (), "Reading from TLS stream"); return () @trusted { return SSL_pending(m_tls); } (); } @property bool dataAvailableForRead() { return () @trusted { return SSL_pending(m_tls); } () > 0 || m_stream.dataAvailableForRead; } const(ubyte)[] peek() { auto ret = checkSSLRet(() @trusted { return SSL_peek(m_tls, m_peekBuffer.ptr, m_peekBuffer.length); } (), "Peeking TLS stream"); return ret > 0 ? m_peekBuffer[0 .. ret] : null; } size_t read(scope ubyte[] dst, IOMode mode) { size_t nbytes = 0; while (dst.length > 0) { int readlen = min(dst.length, int.max); auto ret = checkSSLRet(() @trusted { return SSL_read(m_tls, dst.ptr, readlen); } (), "Reading from TLS stream"); //logTrace("SSL read %d/%d", ret, dst.length); dst = dst[ret .. $]; nbytes += ret; if (mode == IOMode.immediate || mode == IOMode.once) break; } return nbytes; } alias read = Stream.read; size_t write(in ubyte[] bytes_, IOMode mode) { const(ubyte)[] bytes = bytes_; size_t nbytes = 0; while (bytes.length > 0) { int writelen = min(bytes.length, int.max); auto ret = checkSSLRet(() @trusted { return SSL_write(m_tls, bytes.ptr, writelen); } (), "Writing to TLS stream"); //logTrace("SSL write %s", cast(string)bytes[0 .. ret]); bytes = bytes[ret .. $]; nbytes += ret; if (mode == IOMode.immediate || mode == IOMode.once) break; } return nbytes; } alias write = Stream.write; void flush() { m_stream.flush(); } void finalize() { if( !m_tls ) return; logTrace("OpenSSLStream finalize"); () @trusted { SSL_shutdown(m_tls); SSL_free(m_tls); } (); m_tls = null; } private int checkSSLRet(int ret, string what) @safe { if (ret > 0) return ret; string desc; auto err = () @trusted { return SSL_get_error(m_tls, ret); } (); switch (err) { default: desc = format("Unknown error (%s)", err); break; case SSL_ERROR_NONE: desc = "No error"; break; case SSL_ERROR_ZERO_RETURN: desc = "SSL/TLS tunnel closed"; break; case SSL_ERROR_WANT_READ: desc = "Need to block for read"; break; case SSL_ERROR_WANT_WRITE: desc = "Need to block for write"; break; case SSL_ERROR_WANT_CONNECT: desc = "Need to block for connect"; break; case SSL_ERROR_WANT_ACCEPT: desc = "Need to block for accept"; break; case SSL_ERROR_WANT_X509_LOOKUP: desc = "Need to block for certificate lookup"; break; case SSL_ERROR_SYSCALL: case SSL_ERROR_SSL: return enforceSSL(ret, what); } const(char)* file = null, data = null; int line; int flags; c_ulong eret; char[120] ebuf; while( (eret = () @trusted { return ERR_get_error_line_data(&file, &line, &data, &flags); } ()) != 0 ){ () @trusted { ERR_error_string(eret, ebuf.ptr); } (); logDebug("%s error at %s:%d: %s (%s)", what, () @trusted { return to!string(file); } (), line, () @trusted { return to!string(ebuf.ptr); } (), flags & ERR_TXT_STRING ? () @trusted { return to!string(data); } () : "-"); } enforce(ret != 0, format("%s was unsuccessful with ret 0", what)); enforce(ret >= 0, format("%s returned an error: %s", what, desc)); return ret; } private int enforceSSL(int ret, string message) @safe { if (ret > 0) return ret; c_ulong eret; const(char)* file = null, data = null; int line; int flags; string estr; char[120] ebuf = 0; while ((eret = () @trusted { return ERR_get_error_line_data(&file, &line, &data, &flags); } ()) != 0) { () @trusted { ERR_error_string_n(eret, ebuf.ptr, ebuf.length); } (); estr = () @trusted { return ebuf.ptr.to!string; } (); // throw the last error code as an exception logDebug("OpenSSL error at %s:%d: %s (%s)", () @trusted { return file.to!string; } (), line, estr, flags & ERR_TXT_STRING ? () @trusted { return to!string(data); } () : "-"); if (!() @trusted { return ERR_peek_error(); } ()) break; } throw new Exception(format("%s: %s (%s)", message, estr, eret)); } @property TLSCertificateInformation peerCertificate() { return m_peerCertificateInfo; } @property X509* peerCertificateX509() { return m_peerCertificate; } @property string alpn() const { static if (!haveALPN) assert(false, "OpenSSL support not compiled with ALPN enabled. Use VibeForceALPN."); else { char[32] data; uint datalen; () @trusted { SSL_get0_alpn_selected(m_ssl, cast(const char*) data.ptr, &datalen); } (); logDebug("alpn selected: ", data.to!string); if (datalen > 0) return data[0..datalen].idup; else return null; } } /// Invoked by client to offer alpn private void setClientALPN(string[] alpn_list) { logDebug("SetClientALPN: ", alpn_list); import vibe.internal.allocator : dispose, makeArray, vibeThreadAllocator; ubyte[] alpn; size_t len; foreach (string alpn_val; alpn_list) len += alpn_val.length + 1; alpn = () @trusted { return vibeThreadAllocator.makeArray!ubyte(len); } (); size_t i; foreach (string alpn_val; alpn_list) { alpn[i++] = cast(ubyte)alpn_val.length; alpn[i .. i+alpn_val.length] = cast(immutable(ubyte)[])alpn_val; i += alpn_val.length; } assert(i == len); static if (haveALPN) SSL_set_alpn_protos(m_ssl, cast(const char*) alpn.ptr, cast(uint) len); () @trusted { vibeThreadAllocator.dispose(alpn); } (); } } /** Encapsulates the configuration for an SSL tunnel. Note that when creating an SSLContext with SSLContextKind.client, the peerValidationMode will be set to SSLPeerValidationMode.trustedCert, but no trusted certificate authorities are added by default. Use useTrustedCertificateFile to add those. */ final class OpenSSLContext : TLSContext { @safe: private { TLSContextKind m_kind; ssl_ctx_st* m_ctx; TLSPeerValidationCallback m_peerValidationCallback; TLSPeerValidationMode m_validationMode; int m_verifyDepth; TLSServerNameCallback m_sniCallback; TLSALPNCallback m_alpnCallback; } this(TLSContextKind kind, TLSVersion ver = TLSVersion.any) { m_kind = kind; const(SSL_METHOD)* method; c_long options = SSL_OP_NO_SSLv2|SSL_OP_NO_COMPRESSION| SSL_OP_SINGLE_DH_USE|SSL_OP_SINGLE_ECDH_USE; () @trusted { final switch (kind) { case TLSContextKind.client: final switch (ver) { case TLSVersion.any: method = SSLv23_client_method(); options |= SSL_OP_NO_SSLv3; break; case TLSVersion.ssl3: method = SSLv23_client_method(); options |= SSL_OP_NO_SSLv2|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_2; break; case TLSVersion.tls1: method = TLSv1_client_method(); break; //case TLSVersion.tls1_1: method = TLSv1_1_client_method(); break; //case TLSVersion.tls1_2: method = TLSv1_2_client_method(); break; case TLSVersion.tls1_1: method = SSLv23_client_method(); options |= SSL_OP_NO_SSLv3|SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_2; break; case TLSVersion.tls1_2: method = SSLv23_client_method(); options |= SSL_OP_NO_SSLv3|SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1; break; case TLSVersion.dtls1: method = DTLSv1_client_method(); break; } break; case TLSContextKind.server: case TLSContextKind.serverSNI: final switch (ver) { case TLSVersion.any: method = SSLv23_server_method(); options |= SSL_OP_NO_SSLv3; break; case TLSVersion.ssl3: method = SSLv23_server_method(); options |= SSL_OP_NO_SSLv2|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_2; break; case TLSVersion.tls1: method = TLSv1_server_method(); break; case TLSVersion.tls1_1: method = SSLv23_server_method(); options |= SSL_OP_NO_SSLv3|SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_2; break; case TLSVersion.tls1_2: method = SSLv23_server_method(); options |= SSL_OP_NO_SSLv3|SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1; break; //case TLSVersion.tls1_1: method = TLSv1_1_server_method(); break; //case TLSVersion.tls1_2: method = TLSv1_2_server_method(); break; case TLSVersion.dtls1: method = DTLSv1_server_method(); break; } options |= SSL_OP_CIPHER_SERVER_PREFERENCE; break; } } (); m_ctx = () @trusted { return SSL_CTX_new(method); } (); () @trusted { SSL_CTX_set_options!()(m_ctx, options); }(); if (kind == TLSContextKind.server) { setDHParams(); static if (haveECDH) setECDHCurve(); guessSessionIDContext(); } setCipherList(); maxCertChainLength = 9; if (kind == TLSContextKind.client) peerValidationMode = TLSPeerValidationMode.trustedCert; else peerValidationMode = TLSPeerValidationMode.none; // while it would be nice to use the system's certificate store, this // seems to be difficult to get right across all systems. The most // popular alternative is to use Mozilla's certificate store and // distribute it along with the library (e.g. in source code form. /*version (Posix) { enforce(SSL_CTX_load_verify_locations(m_ctx, null, "/etc/ssl/certs"), "Failed to load system certificate store."); } version (Windows) { auto store = CertOpenSystemStore(null, "ROOT"); enforce(store !is null, "Failed to load system certificate store."); scope (exit) CertCloseStore(store, 0); PCCERT_CONTEXT ctx; while((ctx = CertEnumCertificatesInStore(store, ctx)) !is null) { X509* x509cert; auto buffer = ctx.pbCertEncoded; auto len = ctx.cbCertEncoded; if (ctx.dwCertEncodingType & X509_ASN_ENCODING) { x509cert = d2i_X509(null, &buffer, len); X509_STORE_add_cert(SSL_CTX_get_cert_store(m_ctx), x509cert); } } }*/ } ~this() { () @trusted { SSL_CTX_free(m_ctx); } (); m_ctx = null; } /// The kind of SSL context (client/server) @property TLSContextKind kind() const { return m_kind; } /// Callback function invoked by server to choose alpn @property void alpnCallback(TLSALPNCallback alpn_chooser) { logDebug("Choosing ALPN callback"); m_alpnCallback = alpn_chooser; static if (haveALPN) { logDebug("Call select cb"); SSL_CTX_set_alpn_select_cb(m_ctx, &chooser, cast(void*)this); } } /// Get the current ALPN callback function @property TLSALPNCallback alpnCallback() const { return m_alpnCallback; } /// Invoked by client to offer alpn void setClientALPN(string[] alpn_list) { static if (!haveALPN) assert(false, "OpenSSL support not compiled with ALPN enabled. Use VibeForceALPN."); else { import vibe.utils.memory : allocArray, freeArray, manualAllocator; ubyte[] alpn; size_t len; foreach (string alpn_value; alpn_list) len += alpn_value.length + 1; alpn = allocArray!ubyte(manualAllocator(), len); size_t i; foreach (string alpn_value; alpn_list) { alpn[i++] = cast(ubyte)alpn_value.length; alpn[i .. i+alpn_value.length] = cast(ubyte[])alpn_value; i += alpn_value.length; } assert(i == len); SSL_CTX_set_alpn_protos(m_ctx, cast(const char*) alpn.ptr, cast(uint) len); freeArray(manualAllocator(), alpn); } } /** Specifies the validation level of remote peers. The default mode for TLSContextKind.client is TLSPeerValidationMode.trustedCert and the default for TLSContextKind.server is TLSPeerValidationMode.none. */ @property void peerValidationMode(TLSPeerValidationMode mode) { m_validationMode = mode; int sslmode; with (TLSPeerValidationMode) { if (mode == none) sslmode = SSL_VERIFY_NONE; else { sslmode |= SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE; if (mode & requireCert) sslmode |= SSL_VERIFY_FAIL_IF_NO_PEER_CERT; } } () @trusted { SSL_CTX_set_verify(m_ctx, sslmode, &verify_callback); } (); } /// ditto @property TLSPeerValidationMode peerValidationMode() const { return m_validationMode; } /** The maximum length of an accepted certificate chain. Any certificate chain longer than this will result in the SSL/TLS negitiation failing. The default value is 9. */ @property void maxCertChainLength(int val) { m_verifyDepth = val; // + 1 to let the validation callback handle the error () @trusted { SSL_CTX_set_verify_depth(m_ctx, val + 1); } (); } /// ditto @property int maxCertChainLength() const { return m_verifyDepth; } /** An optional user callback for peer validation. This callback will be called for each peer and each certificate of its certificate chain to allow overriding the validation decision based on the selected peerValidationMode (e.g. to allow invalid certificates or to reject valid ones). This is mainly useful for presenting the user with a dialog in case of untrusted or mismatching certificates. */ @property void peerValidationCallback(TLSPeerValidationCallback callback) { m_peerValidationCallback = callback; } /// ditto @property inout(TLSPeerValidationCallback) peerValidationCallback() inout { return m_peerValidationCallback; } @property void sniCallback(TLSServerNameCallback callback) { m_sniCallback = callback; if (m_kind == TLSContextKind.serverSNI) { () @trusted { SSL_CTX_callback_ctrl(m_ctx, SSL_CTRL_SET_TLSEXT_SERVERNAME_CB, cast(OSSLCallback)&onContextForServerName); SSL_CTX_ctrl(m_ctx, SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG, 0, cast(void*)this); } (); } } @property inout(TLSServerNameCallback) sniCallback() inout { return m_sniCallback; } private extern(C) alias OSSLCallback = void function(); private static extern(C) int onContextForServerName(SSL *s, int *ad, void *arg) { auto ctx = () @trusted { return cast(OpenSSLContext)arg; } (); auto servername = () @trusted { return SSL_get_servername(s, TLSEXT_NAMETYPE_host_name); } (); if (!servername) return SSL_TLSEXT_ERR_NOACK; auto newctx = cast(OpenSSLContext)ctx.m_sniCallback(() @trusted { return servername.to!string; } ()); if (!newctx) return SSL_TLSEXT_ERR_NOACK; () @trusted { SSL_set_SSL_CTX(s, newctx.m_ctx); } (); return SSL_TLSEXT_ERR_OK; } OpenSSLStream createStream(InterfaceProxy!Stream underlying, TLSStreamState state, string peer_name = null, NetworkAddress peer_address = NetworkAddress.init) { return new OpenSSLStream(underlying, this, state, peer_name, peer_address); } /** Set the list of cipher specifications to use for SSL/TLS tunnels. The list must be a colon separated list of cipher specifications as accepted by OpenSSL. Calling this function without argument will restore the default. See_also: $(LINK https://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT) */ void setCipherList(string list = null) @trusted { if (list is null) SSL_CTX_set_cipher_list(m_ctx, "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:" ~ "RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS"); else SSL_CTX_set_cipher_list(m_ctx, toStringz(list)); } /** Make up a context ID to assign to the SSL context. This is required when doing client cert authentication, otherwise many connections will go aborted as the client tries to revive a session that it used to have on another machine. The session ID context should be unique within a pool of servers. Currently, this is achieved by taking the hostname. */ private void guessSessionIDContext() @trusted { string contextID = Socket.hostName; SSL_CTX_set_session_id_context(m_ctx, cast(ubyte*)contextID.toStringz(), cast(uint)contextID.length); } /** Set params to use for DH cipher. * * By default the 2048-bit prime from RFC 3526 is used. * * Params: * pem_file = Path to a PEM file containing the DH parameters. Calling * this function without argument will restore the default. */ void setDHParams(string pem_file=null) @trusted { DH* dh; scope(exit) DH_free(dh); if (pem_file is null) { dh = enforce(DH_new(), "Unable to create DH structure."); dh.p = get_rfc3526_prime_2048(null); ubyte dh_generator = 2; dh.g = BN_bin2bn(&dh_generator, dh_generator.sizeof, null); } else { import core.stdc.stdio : fclose, fopen; auto f = enforce(fopen(toStringz(pem_file), "r"), "Failed to load dhparams file "~pem_file); scope(exit) fclose(f); dh = enforce(PEM_read_DHparams(f, null, null, null), "Failed to read dhparams file "~pem_file); } SSL_CTX_set_tmp_dh(m_ctx, dh); } /** Set the elliptic curve to use for ECDH cipher. * * By default a curve is either chosen automatically or prime256v1 is used. * * Params: * curve = The short name of the elliptic curve to use. Calling this * function without argument will restore the default. * */ void setECDHCurve(string curve = null) @trusted { static if (haveECDH) { static if (OPENSSL_VERSION_NUMBER >= 0x10200000) { // use automatic ecdh curve selection by default if (curve is null) { SSL_CTX_set_ecdh_auto(m_ctx, true); return; } // but disable it when an explicit curve is given SSL_CTX_set_ecdh_auto(m_ctx, false); } int nid; if (curve is null) nid = NID_X9_62_prime256v1; else nid = enforce(OBJ_sn2nid(toStringz(curve)), "Unknown ECDH curve '"~curve~"'."); auto ecdh = enforce(EC_KEY_new_by_curve_name(nid), "Unable to create ECDH curve."); SSL_CTX_set_tmp_ecdh(m_ctx, ecdh); EC_KEY_free(ecdh); } else assert(false, "ECDH curve selection not available for old versions of OpenSSL"); } /// Sets a certificate file to use for authenticating to the remote peer void useCertificateChainFile(string path) { enforce(() @trusted { return SSL_CTX_use_certificate_chain_file(m_ctx, toStringz(path)); } (), "Failed to load certificate file " ~ path); } /// Sets the private key to use for authenticating to the remote peer based /// on the configured certificate chain file. void usePrivateKeyFile(string path) { enforce(() @trusted { return SSL_CTX_use_PrivateKey_file(m_ctx, toStringz(path), SSL_FILETYPE_PEM); } (), "Failed to load private key file " ~ path); } /** Sets the list of trusted certificates for verifying peer certificates. If this is a server context, this also entails that the given certificates are advertised to connecting clients during handshake. On Linux, the system's root certificate authority list is usually found at "/etc/ssl/certs/ca-certificates.crt", "/etc/pki/tls/certs/ca-bundle.crt", or "/etc/ssl/ca-bundle.pem". */ void useTrustedCertificateFile(string path) @trusted { immutable cPath = toStringz(path); enforce(SSL_CTX_load_verify_locations(m_ctx, cPath, null), "Failed to load trusted certificate file " ~ path); if (m_kind == TLSContextKind.server) { auto certNames = enforce(SSL_load_client_CA_file(cPath), "Failed to load client CA name list from file " ~ path); SSL_CTX_set_client_CA_list(m_ctx, certNames); } } private SSLState createClientCtx() { return () @trusted { return SSL_new(m_ctx); } (); } private static struct VerifyData { int verifyDepth; TLSPeerValidationMode validationMode; TLSPeerValidationCallback callback; string peerName; NetworkAddress peerAddress; } private static extern(C) nothrow int verify_callback(int valid, X509_STORE_CTX* ctx) @trusted { X509* err_cert = X509_STORE_CTX_get_current_cert(ctx); int err = X509_STORE_CTX_get_error(ctx); int depth = X509_STORE_CTX_get_error_depth(ctx); SSL* ssl = cast(SSL*)X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx()); VerifyData* vdata = cast(VerifyData*)SSL_get_ex_data(ssl, gs_verifyDataIndex); char[1024] buf; X509_NAME_oneline(X509_get_subject_name(err_cert), buf.ptr, 256); buf[$-1] = 0; try { logDebug("validate callback for %s", buf.ptr.to!string); if (depth > vdata.verifyDepth) { logDiagnostic("SSL cert chain too long: %s vs. %s", depth, vdata.verifyDepth); valid = false; err = X509_V_ERR_CERT_CHAIN_TOO_LONG; } if (err != X509_V_OK) logDebug("SSL cert initial error: %s", X509_verify_cert_error_string(err).to!string); if (!valid) { switch (err) { default: break; case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: case X509_V_ERR_CERT_UNTRUSTED: assert(err_cert !is null); X509_NAME_oneline(X509_get_issuer_name(err_cert), buf.ptr, buf.length); buf[$-1] = 0; logDebug("SSL cert not trusted or unknown issuer: %s", buf.ptr.to!string); if (!(vdata.validationMode & TLSPeerValidationMode.checkTrust)) { valid = true; err = X509_V_OK; } break; } } if (!(vdata.validationMode & TLSPeerValidationMode.checkCert)) { valid = true; err = X509_V_OK; } if (vdata.callback) { TLSPeerValidationData pvdata; // ... if (!valid) { if (vdata.callback(pvdata)) { valid = true; err = X509_V_OK; } } else { if (!vdata.callback(pvdata)) { logDebug("SSL application verification failed"); valid = false; err = X509_V_ERR_APPLICATION_VERIFICATION; } } } } catch (Exception e) { logWarn("SSL verification failed due to exception: %s", e.msg); err = X509_V_ERR_APPLICATION_VERIFICATION; valid = false; } X509_STORE_CTX_set_error(ctx, err); logDebug("SSL validation result: %s (%s)", valid, err); return valid; } } alias SSLState = ssl_st*; /**************************************************************************************************/ /* Private functions */ /**************************************************************************************************/ private { __gshared InterruptibleTaskMutex[] g_cryptoMutexes; __gshared int gs_verifyDataIndex; } shared static this() { logDebug("Initializing OpenSSL..."); SSL_load_error_strings(); SSL_library_init(); g_cryptoMutexes.length = CRYPTO_num_locks(); // TODO: investigate if a normal Mutex is enough - not sure if BIO is called in a locked state foreach (i; 0 .. g_cryptoMutexes.length) g_cryptoMutexes[i] = new InterruptibleTaskMutex; foreach (ref m; g_cryptoMutexes) { assert(m !is null); } CRYPTO_set_id_callback(&onCryptoGetThreadID); CRYPTO_set_locking_callback(&onCryptoLock); enforce(RAND_poll(), "Fatal: failed to initialize random number generator entropy (RAND_poll)."); logDebug("... done."); gs_verifyDataIndex = SSL_get_ex_new_index(0, cast(void*)"VerifyData".ptr, null, null, null); } private bool verifyCertName(X509* cert, int field, in char[] value, bool allow_wildcards = true) @trusted { bool delegate(in char[]) @safe str_match; bool check_value(ASN1_STRING* str, int type) { if (!str.data || !str.length) return false; if (type > 0) { if (type != str.type) return 0; auto strstr = cast(string)str.data[0 .. str.length]; return type == V_ASN1_IA5STRING ? str_match(strstr) : strstr == value; } char* utfstr; auto utflen = ASN1_STRING_to_UTF8(&utfstr, str); enforce (utflen >= 0, "Error converting ASN1 string to UTF-8."); scope (exit) OPENSSL_free(utfstr); return str_match(utfstr[0 .. utflen]); } int cnid; int alt_type; final switch (field) { case GENERAL_NAME.GEN_DNS: cnid = NID_commonName; alt_type = V_ASN1_IA5STRING; str_match = allow_wildcards ? s => matchWildcard(value, s) : s => s.icmp(value) == 0; break; case GENERAL_NAME.GEN_IPADD: cnid = 0; alt_type = V_ASN1_OCTET_STRING; str_match = s => s == value; break; } if (auto gens = cast(STACK_OF!GENERAL_NAME*)X509_get_ext_d2i(cert, NID_subject_alt_name, null, null)) { scope(exit) GENERAL_NAMES_free(gens); foreach (i; 0 .. sk_GENERAL_NAME_num(gens)) { auto gen = sk_GENERAL_NAME_value(gens, i); if (gen.type != field) continue; ASN1_STRING *cstr = field == GENERAL_NAME.GEN_DNS ? gen.d.dNSName : gen.d.iPAddress; if (check_value(cstr, alt_type)) return true; } if (!cnid) return false; } X509_NAME* name = X509_get_subject_name(cert); int i; while ((i = X509_NAME_get_index_by_NID(name, cnid, i)) >= 0) { X509_NAME_ENTRY* ne = X509_NAME_get_entry(name, i); ASN1_STRING* str = X509_NAME_ENTRY_get_data(ne); if (check_value(str, -1)) return true; } return false; } private bool matchWildcard(const(char)[] str, const(char)[] pattern) @safe { auto strparts = str.split("."); auto patternparts = pattern.split("."); if (strparts.length != patternparts.length) return false; bool isValidChar(dchar ch) { if (ch >= '0' && ch <= '9') return true; if (ch >= 'a' && ch <= 'z') return true; if (ch >= 'A' && ch <= 'Z') return true; if (ch == '-' || ch == '.') return true; return false; } if (!pattern.all!(c => isValidChar(c) || c == '*') || !str.all!(c => isValidChar(c))) return false; foreach (i; 0 .. strparts.length) { import std.regex; auto p = patternparts[i]; auto s = strparts[i]; if (!p.length || !s.length) return false; auto rex = "^" ~ std.array.replace(p, "*", "[^.]*") ~ "$"; if (!match(s, rex)) return false; } return true; } unittest { assert(matchWildcard("www.example.org", "*.example.org")); assert(matchWildcard("www.example.org", "*w.example.org")); assert(matchWildcard("www.example.org", "w*w.example.org")); assert(matchWildcard("www.example.org", "*w*.example.org")); assert(matchWildcard("test.abc.example.org", "test.*.example.org")); assert(!matchWildcard("test.abc.example.org", "abc.example.org")); assert(!matchWildcard("test.abc.example.org", ".abc.example.org")); assert(!matchWildcard("abc.example.org", "a.example.org")); assert(!matchWildcard("abc.example.org", "bc.example.org")); assert(!matchWildcard("abcdexample.org", "abc.example.org")); } private nothrow @safe extern(C) { import core.stdc.config; int chooser(SSL* ssl, const(char)** output, ubyte* outlen, const(char) *input_, uint inlen, void* arg) { const(char)[] input = () @trusted { return input_[0 .. inlen]; } (); logDebug("Got chooser input: %s", input); OpenSSLContext ctx = () @trusted { return cast(OpenSSLContext) arg; } (); import vibe.utils.array : AllocAppender, AppenderResetMode; size_t i; size_t len; Appender!(string[]) alpn_list; while (i < inlen) { len = cast(size_t) input[i]; ++i; auto proto = input[i .. i+len]; i += len; () @trusted { alpn_list ~= cast(string)proto; } (); } string alpn; try { alpn = ctx.m_alpnCallback(alpn_list.data); } catch (Exception e) { } if (alpn) { i = 0; while (i < inlen) { len = input[i]; ++i; auto proto = input[i .. i+len]; i += len; if (proto == alpn) { *output = &proto[0]; *outlen = cast(ubyte) proto.length; } } } if (!output) { logError("None of the proposed ALPN were selected: %s / falling back on HTTP/1.1", input); enum hdr = "http/1.1"; *output = &hdr[0]; *outlen = cast(ubyte)hdr.length; } return 0; } c_ulong onCryptoGetThreadID() { try { return cast(c_ulong)(cast(size_t)() @trusted { return cast(void*)Thread.getThis(); } () * 0x35d2c57); } catch (Exception e) { logWarn("OpenSSL: failed to get current thread ID: %s", e.msg); return 0; } } void onCryptoLock(int mode, int n, const(char)* file, int line) { try { enforce(n >= 0 && n < () @trusted { return g_cryptoMutexes; } ().length, "Mutex index out of range."); auto mutex = () @trusted { return g_cryptoMutexes[n]; } (); assert(mutex !is null); if (mode & CRYPTO_LOCK) mutex.lock(); else mutex.unlock(); } catch (Exception e) { logWarn("OpenSSL: failed to lock/unlock mutex: %s", e.msg); } } int onBioNew(BIO *b) nothrow { b.init_ = 0; b.num = -1; b.ptr = null; b.flags = 0; return 1; } int onBioFree(BIO *b) { if( !b ) return 0; if( b.shutdown ){ //if( b.init && b.ptr ) b.ptr.stream.free(); b.init_ = 0; b.flags = 0; b.ptr = null; } return 1; } int onBioRead(BIO *b, char *outb, int outlen) { auto stream = () @trusted { return cast(OpenSSLStream)b.ptr; } (); try { outlen = min(outlen, stream.m_stream.leastSize); stream.m_stream.read(() @trusted { return cast(ubyte[])outb[0 .. outlen]; } ()); } catch (Exception e) { setSSLError("Error reading from underlying stream", e.msg); return -1; } return outlen; } int onBioWrite(BIO *b, const(char) *inb, int inlen) { auto stream = () @trusted { return cast(OpenSSLStream)b.ptr; } (); try { stream.m_stream.write(() @trusted { return inb[0 .. inlen]; } ()); } catch (Exception e) { setSSLError("Error writing to underlying stream", e.msg); return -1; } return inlen; } c_long onBioCtrl(BIO *b, int cmd, c_long num, void *ptr) { auto stream = () @trusted { return cast(OpenSSLStream)b.ptr; } (); c_long ret = 1; switch(cmd){ case BIO_CTRL_GET_CLOSE: ret = b.shutdown; break; case BIO_CTRL_SET_CLOSE: logTrace("SSL set close %d", num); b.shutdown = cast(int)num; break; case BIO_CTRL_PENDING: try { auto sz = stream.m_stream.leastSize; // FIXME: .peek.length should be sufficient here return sz <= c_long.max ? cast(c_long)sz : c_long.max; } catch( Exception e ){ setSSLError("Error reading from underlying stream", e.msg); return -1; } case BIO_CTRL_WPENDING: return 0; case BIO_CTRL_DUP: case BIO_CTRL_FLUSH: ret = 1; break; default: ret = 0; break; } return ret; } int onBioPuts(BIO *b, const(char) *s) { return onBioWrite(b, s, cast(int)() @trusted { return strlen(s); } ()); } } private void setSSLError(string msg, string submsg, int line = __LINE__, string file = __FILE__) @trusted nothrow { import std.string : toStringz; ERR_put_error(ERR_LIB_USER, 0, 1, file.toStringz, line); ERR_add_error_data(3, msg.toStringz, ": ".ptr, submsg.toStringz); } private BIO_METHOD s_bio_methods = { 57, "SslStream", &onBioWrite, &onBioRead, &onBioPuts, null, // &onBioGets &onBioCtrl, &onBioNew, &onBioFree, null, // &onBioCallbackCtrl }; private nothrow extern(C): static if (haveALPN) { alias ALPNCallback = int function(SSL *ssl, const(char) **output, ubyte* outlen, const(char) *input, uint inlen, void *arg); void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, ALPNCallback cb, void *arg); int SSL_set_alpn_protos(SSL *ssl, const char *data, uint len); int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const char* protos, uint protos_len); void SSL_get0_alpn_selected(const SSL *ssl, const char* data, uint *len); } const(ssl_method_st)* TLSv1_2_server_method(); vibe.d-0.8.2/tls/vibe/stream/tls.d000066400000000000000000000362351324361747700167100ustar00rootroot00000000000000/** TLS stream implementation TLSStream can be used to implement TLS communication on top of a TCP connection. The TLSContextKind of an TLSStream determines if the TLS tunnel is established actively (client) or passively (server). Copyright: © 2012-2014 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.stream.tls; import vibe.core.log; import vibe.core.net; import vibe.core.path : NativePath; import vibe.core.stream; import vibe.core.sync; import vibe.utils.dictionarylist; import vibe.internal.interfaceproxy; import std.algorithm; import std.array; import std.conv; import std.exception; import std.string; import core.stdc.string : strlen; import core.sync.mutex; import core.thread; version (VibeNoSSL) {} else version(Have_openssl) version = OpenSSL; else version(Have_botan) version = Botan; /// A simple TLS client unittest { import vibe.core.net; import vibe.stream.tls; void sendTLSMessage() { auto conn = connectTCP("127.0.0.1", 1234); auto sslctx = createTLSContext(TLSContextKind.client); auto stream = createTLSStream(conn, sslctx); stream.write("Hello, World!"); stream.finalize(); conn.close(); } } /// Corresponding server unittest { import vibe.core.log; import vibe.core.net; import vibe.stream.operations; import vibe.stream.tls; void listenForTLS() { auto sslctx = createTLSContext(TLSContextKind.server); sslctx.useCertificateChainFile("server.crt"); sslctx.usePrivateKeyFile("server.key"); listenTCP(1234, delegate void(TCPConnection conn) nothrow { try { auto stream = createTLSStream(conn, sslctx); logInfo("Got message: %s", stream.readAllUTF8()); stream.finalize(); } catch (Exception e) { logInfo("Failed to receive encrypted message"); } }); } } /**************************************************************************************************/ /* Public functions */ /**************************************************************************************************/ @safe: /** Creates a new context of the given kind. Params: kind = Specifies if the context is going to be used on the client or on the server end of the TLS tunnel ver = The TLS protocol used for negotiating the tunnel */ TLSContext createTLSContext(TLSContextKind kind, TLSVersion ver = TLSVersion.any) @trusted { version (OpenSSL) { static TLSContext createOpenSSLContext(TLSContextKind kind, TLSVersion ver) @safe { import vibe.stream.openssl; return new OpenSSLContext(kind, ver); } if (!gs_sslContextFactory) setTLSContextFactory(&createOpenSSLContext); } else version(Botan) { static TLSContext createBotanContext(TLSContextKind kind, TLSVersion ver) @safe { import vibe.stream.botan; return new BotanTLSContext(kind); } if (!gs_sslContextFactory) setTLSContextFactory(&createBotanContext); } assert(gs_sslContextFactory !is null, "No TLS context factory registered. Compile in botan or openssl dependencies, or call setTLSContextFactory first."); return gs_sslContextFactory(kind, ver); } /** Constructs a new TLS tunnel and infers the stream state from the TLSContextKind. Depending on the TLSContextKind of ctx, the tunnel will try to establish an TLS tunnel by either passively accepting or by actively connecting. Params: underlying = The base stream which is used for the TLS tunnel ctx = TLS context used for initiating the tunnel peer_name = DNS name of the remote peer, used for certificate validation peer_address = IP address of the remote peer, used for certificate validation */ TLSStream createTLSStream(Stream)(Stream underlying, TLSContext ctx, string peer_name = null, NetworkAddress peer_address = NetworkAddress.init) if (isStream!Stream) { auto stream_state = ctx.kind == TLSContextKind.client ? TLSStreamState.connecting : TLSStreamState.accepting; return createTLSStream(underlying, ctx, stream_state, peer_name, peer_address); } /** Constructs a new TLS tunnel, allowing to override the stream state. This constructor allows to specify a custom tunnel state, which can be useful when a tunnel has already been established by other means. Params: underlying = The base stream which is used for the TLS tunnel ctx = TLS context used for initiating the tunnel state = The manually specified tunnel state peer_name = DNS name of the remote peer, used for certificate validation peer_address = IP address of the remote peer, used for certificate validation */ TLSStream createTLSStream(Stream)(Stream underlying, TLSContext ctx, TLSStreamState state, string peer_name = null, NetworkAddress peer_address = NetworkAddress.init) if (isStream!Stream) { return ctx.createStream(interfaceProxy!(.Stream)(underlying), state, peer_name, peer_address); } /** Constructs a new TLS stream using manual memory allocator. */ auto createTLSStreamFL(Stream)(Stream underlying, TLSContext ctx, TLSStreamState state, string peer_name = null, NetworkAddress peer_address = NetworkAddress.init) if (isStream!Stream) { // This function has an auto return type to avoid the import of the TLS // implementation headers. When client code uses this function the compiler // will have to semantically analyse it and subsequently will import the TLS // implementation headers. version (OpenSSL) { import vibe.internal.freelistref; import vibe.stream.openssl; static assert(AllocSize!TLSStream > 0); return FreeListRef!OpenSSLStream(interfaceProxy!(.Stream)(underlying), cast(OpenSSLContext)ctx, state, peer_name, peer_address); } else version (Botan) { import vibe.internal.freelistref; import vibe.stream.botan; return FreeListRef!BotanTLSStream(interfaceProxy!(.Stream)(underlying), cast(BotanTLSContext) ctx, state, peer_name, peer_address); } else assert(false, "No TLS support compiled in (VibeNoTLS)"); } void setTLSContextFactory(TLSContext function(TLSContextKind, TLSVersion) @safe factory) { () @trusted { gs_sslContextFactory = factory; } (); } /**************************************************************************************************/ /* Public types */ /**************************************************************************************************/ /** Creates an TLS tunnel within an existing stream. Note: Be sure to call finalize before finalizing/closing the outer stream so that the TLS tunnel is properly closed first. */ interface TLSStream : Stream { @safe: @property TLSCertificateInformation peerCertificate(); //-/ The host name reported through SNI //@property string hostName() const; /** The ALPN that has been negotiated for this connection. See_also: $(WEB https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation) */ @property string alpn() const; } enum TLSStreamState { connecting, accepting, connected } /** Encapsulates the configuration for an TLS tunnel. Note that when creating an TLSContext with TLSContextKind.client, the peerValidationMode will be set to TLSPeerValidationMode.trustedCert, but no trusted certificate authorities are added by default. Use useTrustedCertificateFile to add those. */ interface TLSContext { @safe: /// The kind of TLS context (client/server) @property TLSContextKind kind() const; /** Specifies the validation level of remote peers. The default mode for TLSContextKind.client is TLSPeerValidationMode.trustedCert and the default for TLSContextKind.server is TLSPeerValidationMode.none. */ @property void peerValidationMode(TLSPeerValidationMode mode); /// ditto @property TLSPeerValidationMode peerValidationMode() const; /** The maximum length of an accepted certificate chain. Any certificate chain longer than this will result in the TLS negitiation failing. The default value is 9. */ @property void maxCertChainLength(int val); /// ditto @property int maxCertChainLength() const; /** An optional user callback for peer validation. This callback will be called for each peer and each certificate of its certificate chain to allow overriding the validation decision based on the selected peerValidationMode (e.g. to allow invalid certificates or to reject valid ones). This is mainly useful for presenting the user with a dialog in case of untrusted or mismatching certificates. */ @property void peerValidationCallback(TLSPeerValidationCallback callback); /// ditto @property inout(TLSPeerValidationCallback) peerValidationCallback() inout; /** The callback used to associcate host names with TLS certificates/contexts. This property is only used for kind $(D TLSContextKind.serverSNI). */ @property void sniCallback(TLSServerNameCallback callback); /// ditto @property inout(TLSServerNameCallback) sniCallback() inout; /// Callback function invoked to choose alpn (client side) @property void alpnCallback(TLSALPNCallback alpn_chooser); /// ditto @property TLSALPNCallback alpnCallback() const; /// Setter method invoked to offer ALPN (server side) void setClientALPN(string[] alpn); /** Creates a new stream associated to this context. */ TLSStream createStream(InterfaceProxy!Stream underlying, TLSStreamState state, string peer_name = null, NetworkAddress peer_address = NetworkAddress.init); /** Set the list of cipher specifications to use for TLS tunnels. The list must be a colon separated list of cipher specifications as accepted by OpenSSL. Calling this function without argument will restore the default. See_also: $(LINK https://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT) */ void setCipherList(string list = null); /** Set params to use for DH cipher. * * By default the 2048-bit prime from RFC 3526 is used. * * Params: * pem_file = Path to a PEM file containing the DH parameters. Calling * this function without argument will restore the default. */ void setDHParams(string pem_file=null); /** Set the elliptic curve to use for ECDH cipher. * * By default a curve is either chosen automatically or prime256v1 is used. * * Params: * curve = The short name of the elliptic curve to use. Calling this * function without argument will restore the default. * */ void setECDHCurve(string curve=null); /// Sets a certificate file to use for authenticating to the remote peer void useCertificateChainFile(string path); /// ditto final void useCertificateChainFile(NativePath path) { useCertificateChainFile(path.toString()); } /// Sets the private key to use for authenticating to the remote peer based /// on the configured certificate chain file. void usePrivateKeyFile(string path); /// ditto final void usePrivateKeyFile(NativePath path) { usePrivateKeyFile(path.toString()); } /** Sets the list of trusted certificates for verifying peer certificates. If this is a server context, this also entails that the given certificates are advertised to connecting clients during handshake. On Linux, the system's root certificate authority list is usually found at "/etc/ssl/certs/ca-certificates.crt", "/etc/pki/tls/certs/ca-bundle.crt", or "/etc/ssl/ca-bundle.pem". */ void useTrustedCertificateFile(string path); } enum TLSContextKind { client, /// Client context (active connector) server, /// Server context (passive connector) serverSNI, /// Server context with multiple certificate support (SNI) } enum TLSVersion { any, /// Accept SSLv3 or TLSv1.0 and greater ssl3, /// Accept only SSLv3 tls1, /// Accept only TLSv1.0 tls1_1, /// Accept only TLSv1.1 tls1_2, /// Accept only TLSv1.2 dtls1, /// Use DTLSv1.0 ssl23 = any /// Deprecated compatibility alias } /** Specifies how rigorously TLS peer certificates are validated. The individual options can be combined using a bitwise "or". Usually it is recommended to use $(D trustedCert) for full validation. */ enum TLSPeerValidationMode { /** Accept any peer regardless if and which certificate is presented. This mode is generally discouraged and should only be used with a custom validation callback set to do the verification. */ none = 0, /** Require the peer to always present a certificate. Note that this option alone does not verify the certificate at all. It can be used together with the "check" options, or by using a custom validation callback to actually validate certificates. */ requireCert = 1<<0, /** Check the certificate for basic validity. This verifies the validity of the certificate chain and some other general properties, such as expiration time. It doesn't verify either the peer name or the trust state of the certificate. */ checkCert = 1<<1, /** Validate the actual peer name/address against the certificate. Compares the name/address of the connected peer, as passed to $(D createTLSStream) to the list of patterns present in the certificate, if any. If no match is found, the connection is rejected. */ checkPeer = 1<<2, /** Requires that the certificate or any parent certificate is trusted. Searches list of trusted certificates for a match of the certificate chain. If no match is found, the connection is rejected. See_also: $(D useTrustedCertificateFile) */ checkTrust = 1<<3, /** Require a valid certificate matching the peer name. In this mode, the certificate is validated for general consistency and possible expiration, and the peer name is checked to see if the certificate actually applies. However, the certificate chain is not matched against the system's pool of trusted certificate authorities, so a custom validation callback is still needed to get a secure validation process. This option is a combination $(D requireCert), $(D checkCert) and $(D checkPeer). */ validCert = requireCert | checkCert | checkPeer, /** Require a valid and trusted certificate (strongly recommended). Checks the certificate and peer name for validity and requires that the certificate chain originates from a trusted CA (based on the registered pool of certificate authorities). This option is a combination $(D validCert) and $(D checkTrust). See_also: $(D useTrustedCertificateFile) */ trustedCert = validCert | checkTrust, } /** Certificate information */ struct TLSCertificateInformation { /** Information about the certificate's subject name. Maps fields to their values. For example, typical fields on a certificate will be 'commonName', 'countryName', 'emailAddress', etc. */ DictionaryList!(string, false, 8) subjectName; /** Vendor specific representation of the peer certificate. This field is only set if the functionality is supported and if the peer certificate is a X509 certificate. For the OpenSSL driver, this will point to an `X509` struct. Note that the life time of the object is limited to the life time of the TLS stream. */ void* _x509; } struct TLSPeerValidationData { char[] certName; string errorString; // certificate chain // public key // public key fingerprint } alias TLSPeerValidationCallback = bool delegate(scope TLSPeerValidationData data); alias TLSServerNameCallback = TLSContext delegate(string hostname); alias TLSALPNCallback = string delegate(string[] alpn_choices); private { __gshared TLSContext function(TLSContextKind, TLSVersion) gs_sslContextFactory; } vibe.d-0.8.2/todo.txt000066400000000000000000000021141324361747700144120ustar00rootroot00000000000000HTTP ==== - defer writing the header of server responses to the second written chunk in case of using bodyWriter() - if only one chunk is ever written, write non-chunked instead - implement generators for http.rest to "documentation" with all possible requests. - support pipelining for HttpClient TCP === - Keep a live count of all event objects in the libevent2 driver and exit as soon as the count drops to zero - Add a DoS barrier that closes old connections in case of high connection counts (e.g. Slowloris attack) GENERAL ======= - Asynchronous file I/O (already works for Win32) - Load balancer with support for seemless recompile (vibedist) - Use the event_set_*_callback functions to log libevent messages - Analyze all code for memory leaks (e.g. SSLContext) - HTTP server comparison to nginx - Mention the API used for Diet templates on the /templates page - Implement a soft-shutdown in case of catching an Error (in conjunction with vibedist) - Document the different -version specifiers that are possible MARKDOWN FILTER =============== - add SmartyPants support vibe.d-0.8.2/travis-ci.sh000077500000000000000000000065351324361747700151570ustar00rootroot00000000000000#!/bin/bash set -e -x -o pipefail DUB_ARGS=${DUB_ARGS:-} ./scripts/test_version.sh # Check for trailing whitespace" grep -nrI --include=*.d '\s$' && (echo "Trailing whitespace found"; exit 1) # test for successful release build dub build --combined -b release --compiler=$DC --config=${VIBED_DRIVER=libevent} dub clean --all-packages DUB_ARGS="--build-mode=${DUB_BUILD_MODE:-separate} ${DUB_ARGS:-}" # test for successful 32-bit build if [ "$DC" == "dmd" ]; then dub build --combined --arch=x86 --config=${VIBED_DRIVER=libevent} dub clean --all-packages fi dub test :data --compiler=$DC $DUB_ARGS dub test :core --compiler=$DC --config=${VIBED_DRIVER=libevent} $DUB_ARGS dub test :mongodb --compiler=$DC --override-config=vibe-d:core/${VIBED_DRIVER=libevent} $DUB_ARGS dub test :redis --compiler=$DC --override-config=vibe-d:core/${VIBED_DRIVER=libevent} $DUB_ARGS dub test :web --compiler=$DC --override-config=vibe-d:core/${VIBED_DRIVER=libevent} $DUB_ARGS dub test :utils --compiler=$DC $DUB_ARGS dub test :http --compiler=$DC --override-config=vibe-d:core/${VIBED_DRIVER=libevent} $DUB_ARGS dub test :mail --compiler=$DC --override-config=vibe-d:core/${VIBED_DRIVER=libevent} $DUB_ARGS dub test :stream --compiler=$DC --override-config=vibe-d:core/${VIBED_DRIVER=libevent} $DUB_ARGS dub test :crypto --compiler=$DC --override-config=vibe-d:core/${VIBED_DRIVER=libevent} $DUB_ARGS dub test :tls --compiler=$DC --override-config=vibe-d:core/${VIBED_DRIVER=libevent} $DUB_ARGS dub test :textfilter --compiler=$DC --override-config=vibe-d:core/${VIBED_DRIVER=libevent} $DUB_ARGS dub test :inet --compiler=$DC --override-config=vibe-d:core/${VIBED_DRIVER=libevent} $DUB_ARGS dub clean --all-packages if [ ${BUILD_EXAMPLE=1} -eq 1 ]; then for ex in $(\ls -1 examples/); do echo "[INFO] Building example $ex" (cd examples/$ex && dub build --compiler=$DC --override-config=vibe-d:core/$VIBED_DRIVER $DUB_ARGS && dub clean) done fi if [ ${RUN_TEST=1} -eq 1 ]; then for ex in `\ls -1 tests/`; do if [ -r tests/$ex/dub.json ] || [ -r tests/$ex/dub.sdl ]; then echo "[INFO] Running test $ex" (cd tests/$ex && dub --compiler=$DC --override-config=vibe-d:core/$VIBED_DRIVER $DUB_ARGS && dub clean) fi done fi # test building with Meson if [[ ${VIBED_DRIVER=libevent} = libevent ]]; then mkdir build && cd build meson .. allow_meson_test="yes" if [[ ${DC=dmd} = ldc2 ]]; then # we can not run tests when compiling with LDC+Meson on Travis at the moment, # due to an LDC bug: https://github.com/ldc-developers/ldc/issues/2280 # as soon as the bug is fixed, we can run tests again for the fixed LDC versions. allow_meson_test="no" fi if [[ ${DC=dmd} = dmd ]]; then dc_version=$("$DC" --version | perl -pe '($_)=/([0-9]+([.][0-9]+)+)/') if [[ ${dc_version} = "2.072.2" ]]; then # The stream test fails with DMD 2.072.2 due to a missing symbol. This is a DMD bug, # so we skip tests here. # This check can be removed when support for that compiler version is dropped. allow_meson_test="no" fi fi # we limit the number of Ninja jobs to 4, so Travis doesn't kill us ninja -j4 if [[ ${allow_meson_test} = "yes" ]]; then ninja test -v fi DESTDIR=/tmp/vibe-install ninja install cd .. fi vibe.d-0.8.2/utils/000077500000000000000000000000001324361747700140465ustar00rootroot00000000000000vibe.d-0.8.2/utils/dub.sdl000066400000000000000000000001601324361747700153210ustar00rootroot00000000000000name "utils" description "Low level utility functionality" targetType "library" sourcePaths "." importPaths "." vibe.d-0.8.2/utils/meson.build000066400000000000000000000032641324361747700162150ustar00rootroot00000000000000# Meson file for Vibe Utils vibe_utils_src_dir = include_directories('.') vibe_utils_src = [ 'vibe/internal/memory_legacy.d', 'vibe/internal/meta/all.d', 'vibe/internal/meta/codegen.d', 'vibe/internal/meta/funcattr.d', 'vibe/internal/meta/traits.d', 'vibe/internal/meta/typetuple.d', 'vibe/internal/meta/uda.d', 'vibe/internal/rangeutil.d', 'vibe/internal/utilallocator.d', 'vibe/internal/win32.d', 'vibe/utils/array.d', 'vibe/utils/dictionarylist.d', 'vibe/utils/hashmap.d', 'vibe/utils/memory.d', 'vibe/utils/string.d', 'vibe/utils/validation.d', ] # # Install Includes # install_subdir('vibe/', install_dir: 'include/d/vibe/') # # Build Targets # # Low level utility functionality vibe_utils_lib = library('vibe-utils', [vibe_utils_src], include_directories: [openssl_inc, libevent_inc], install: true, dependencies: [crypto_dep, ssl_dep, libevent_dep, zlib_dep], version: project_version, soversion: project_soversion ) pkgc.generate(name: 'vibe-utils', libraries: vibe_utils_lib, subdirs: 'd/vibe', version: project_version, description: 'Low level utility functionality of Vibe.' ) # # Tests # vibe_test_utils_exe = executable('vibe-test_utils', [vibe_utils_src], include_directories: [openssl_inc, libevent_inc], dependencies: [zlib_dep, crypto_dep, ssl_dep, libevent_dep], d_args: meson.get_compiler('d').unittest_args(), link_args: '-main' ) test('vibe-test_utils', vibe_test_utils_exe) vibe.d-0.8.2/utils/vibe/000077500000000000000000000000001324361747700147735ustar00rootroot00000000000000vibe.d-0.8.2/utils/vibe/internal/000077500000000000000000000000001324361747700166075ustar00rootroot00000000000000vibe.d-0.8.2/utils/vibe/internal/memory_legacy.d000066400000000000000000000562641324361747700216250ustar00rootroot00000000000000module vibe.internal.memory_legacy; import vibe.internal.meta.traits : synchronizedIsNothrow; import core.exception : OutOfMemoryError; import core.stdc.stdlib; import core.memory; import std.conv; import std.exception : enforceEx; import std.traits; import std.algorithm; Allocator defaultAllocator() @safe nothrow { version(VibeManualMemoryManagement){ return manualAllocator(); } else return () @trusted { static __gshared Allocator alloc; if (!alloc) { alloc = new GCAllocator; //alloc = new AutoFreeListAllocator(alloc); //alloc = new DebugAllocator(alloc); alloc = new LockAllocator(alloc); } return alloc; } (); } Allocator manualAllocator() @trusted nothrow { static __gshared Allocator alloc; if (!alloc) { alloc = new MallocAllocator; alloc = new AutoFreeListAllocator(alloc); //alloc = new DebugAllocator(alloc); alloc = new LockAllocator(alloc); } return alloc; } Allocator threadLocalAllocator() @safe nothrow { static Allocator alloc; if (!alloc) { version(VibeManualMemoryManagement) alloc = new MallocAllocator; else alloc = new GCAllocator; alloc = new AutoFreeListAllocator(alloc); // alloc = new DebugAllocator(alloc); } return alloc; } Allocator threadLocalManualAllocator() @safe nothrow { static Allocator alloc; if (!alloc) { alloc = new MallocAllocator; alloc = new AutoFreeListAllocator(alloc); // alloc = new DebugAllocator(alloc); } return alloc; } auto allocObject(T, bool MANAGED = true, ARGS...)(Allocator allocator, ARGS args) { auto mem = allocator.alloc(AllocSize!T); static if( MANAGED ){ static if( hasIndirections!T ) GC.addRange(mem.ptr, mem.length); return internalEmplace!T(mem, args); } else static if( is(T == class) ) return cast(T)mem.ptr; else return cast(T*)mem.ptr; } T[] allocArray(T, bool MANAGED = true)(Allocator allocator, size_t n) { auto mem = allocator.alloc(T.sizeof * n); auto ret = cast(T[])mem; static if( MANAGED ){ static if( hasIndirections!T ) GC.addRange(mem.ptr, mem.length); // TODO: use memset for class, pointers and scalars foreach (ref el; ret) { internalEmplace!T(cast(void[])((&el)[0 .. 1])); } } return ret; } void freeArray(T, bool MANAGED = true)(Allocator allocator, ref T[] array, bool call_destructors = true) { static if (MANAGED) { static if (hasIndirections!T) GC.removeRange(array.ptr); static if (hasElaborateDestructor!T) if (call_destructors) foreach_reverse (ref el; array) destroy(el); } allocator.free(cast(void[])array); array = null; } interface Allocator { nothrow: enum size_t alignment = 0x10; enum size_t alignmentMask = alignment-1; // NOTE: the contracts in this interface have two issues: // - they require an assert(false); contract in the derived class to have any effect // - there is s codegen issue that yield garbage values within the contracts defined here // For these reasons contracts need to be placed into each class individually instead void[] alloc(size_t sz); //out { assert((cast(size_t)__result.ptr & alignmentMask) == 0, "alloc() returned misaligned data."); } void[] realloc(void[] mem, size_t new_sz); /*in { assert(mem.ptr !is null, "realloc() called with null array."); assert((cast(size_t)mem.ptr & alignmentMask) == 0, "misaligned pointer passed to realloc()."); } out { assert((cast(size_t)__result.ptr & alignmentMask) == 0, "realloc() returned misaligned data."); }*/ void free(void[] mem); /*in { assert(mem.ptr !is null, "free() called with null array."); assert((cast(size_t)mem.ptr & alignmentMask) == 0, "misaligned pointer passed to free()."); }*/ } /** Simple proxy allocator protecting its base allocator with a mutex. */ class LockAllocator : Allocator { private { Allocator m_base; } this(Allocator base) nothrow @safe { m_base = base; } void[] alloc(size_t sz) { static if (!synchronizedIsNothrow) scope (failure) assert(0, "Internal error: function should be nothrow"); synchronized (this) return m_base.alloc(sz); } void[] realloc(void[] mem, size_t new_sz) in { assert(mem.ptr !is null, "realloc() called with null array."); assert((cast(size_t)mem.ptr & alignmentMask) == 0, "misaligned pointer passed to realloc()."); } body { static if (!synchronizedIsNothrow) scope (failure) assert(0, "Internal error: function should be nothrow"); synchronized(this) return m_base.realloc(mem, new_sz); } void free(void[] mem) in { assert(mem.ptr !is null, "free() called with null array."); assert((cast(size_t)mem.ptr & alignmentMask) == 0, "misaligned pointer passed to free()."); } body { static if (!synchronizedIsNothrow) scope (failure) assert(0, "Internal error: function should be nothrow"); synchronized(this) m_base.free(mem); } } final class DebugAllocator : Allocator { import vibe.utils.hashmap : HashMap; private { Allocator m_baseAlloc; HashMap!(void*, size_t) m_blocks; size_t m_bytes; size_t m_maxBytes; } this(Allocator base_allocator) nothrow @safe { import vibe.internal.utilallocator : Mallocator, allocatorObject; m_baseAlloc = base_allocator; m_blocks = HashMap!(void*, size_t)(() @trusted { return Mallocator.instance.allocatorObject; } ()); } @property size_t allocatedBlockCount() const { return m_blocks.length; } @property size_t bytesAllocated() const { return m_bytes; } @property size_t maxBytesAllocated() const { return m_maxBytes; } void[] alloc(size_t sz) { auto ret = m_baseAlloc.alloc(sz); assert(ret.length == sz, "base.alloc() returned block with wrong size."); assert(m_blocks.getNothrow(ret.ptr, size_t.max) == size_t.max, "base.alloc() returned block that is already allocated."); m_blocks[ret.ptr] = sz; m_bytes += sz; if( m_bytes > m_maxBytes ){ m_maxBytes = m_bytes; logDebug_("New allocation maximum: %d (%d blocks)", m_maxBytes, m_blocks.length); } return ret; } void[] realloc(void[] mem, size_t new_size) { auto sz = m_blocks.getNothrow(mem.ptr, size_t.max); assert(sz != size_t.max, "realloc() called with non-allocated pointer."); assert(sz == mem.length, "realloc() called with block of wrong size."); auto ret = m_baseAlloc.realloc(mem, new_size); assert(ret.length == new_size, "base.realloc() returned block with wrong size."); assert(ret.ptr is mem.ptr || m_blocks.getNothrow(ret.ptr, size_t.max) == size_t.max, "base.realloc() returned block that is already allocated."); m_bytes -= sz; m_blocks.remove(mem.ptr); m_blocks[ret.ptr] = new_size; m_bytes += new_size; return ret; } void free(void[] mem) { auto sz = m_blocks.getNothrow(mem.ptr, size_t.max); assert(sz != size_t.max, "free() called with non-allocated object."); assert(sz == mem.length, "free() called with block of wrong size."); m_baseAlloc.free(mem); m_bytes -= sz; m_blocks.remove(mem.ptr); } } final class MallocAllocator : Allocator { void[] alloc(size_t sz) { static err = new immutable OutOfMemoryError; auto ptr = .malloc(sz + Allocator.alignment); if (ptr is null) throw err; return adjustPointerAlignment(ptr)[0 .. sz]; } void[] realloc(void[] mem, size_t new_size) { size_t csz = min(mem.length, new_size); auto p = extractUnalignedPointer(mem.ptr); size_t oldmisalign = mem.ptr - p; auto pn = cast(ubyte*).realloc(p, new_size+Allocator.alignment); if (p == pn) return pn[oldmisalign .. new_size+oldmisalign]; auto pna = cast(ubyte*)adjustPointerAlignment(pn); auto newmisalign = pna - pn; // account for changed alignment after realloc (move memory back to aligned position) if (oldmisalign != newmisalign) { if (newmisalign > oldmisalign) { foreach_reverse (i; 0 .. csz) pn[i + newmisalign] = pn[i + oldmisalign]; } else { foreach (i; 0 .. csz) pn[i + newmisalign] = pn[i + oldmisalign]; } } return pna[0 .. new_size]; } void free(void[] mem) { .free(extractUnalignedPointer(mem.ptr)); } } final class GCAllocator : Allocator { void[] alloc(size_t sz) { auto mem = GC.malloc(sz+Allocator.alignment); auto alignedmem = adjustPointerAlignment(mem); assert(alignedmem - mem <= Allocator.alignment); auto ret = alignedmem[0 .. sz]; ensureValidMemory(ret); return ret; } void[] realloc(void[] mem, size_t new_size) { size_t csz = min(mem.length, new_size); auto p = extractUnalignedPointer(mem.ptr); size_t misalign = mem.ptr - p; assert(misalign <= Allocator.alignment); void[] ret; auto extended = GC.extend(p, new_size - mem.length, new_size - mem.length); if (extended) { assert(extended >= new_size+Allocator.alignment); ret = p[misalign .. new_size+misalign]; } else { ret = alloc(new_size); ret[0 .. csz] = mem[0 .. csz]; } ensureValidMemory(ret); return ret; } void free(void[] mem) { // For safety reasons, the GCAllocator should never explicitly free memory. //GC.free(extractUnalignedPointer(mem.ptr)); } } final class AutoFreeListAllocator : Allocator { import std.typetuple; private { enum minExponent = 5; enum freeListCount = 14; FreeListAlloc[freeListCount] m_freeLists; Allocator m_baseAlloc; } this(Allocator base_allocator) nothrow @safe { m_baseAlloc = base_allocator; foreach (i; iotaTuple!freeListCount) m_freeLists[i] = new FreeListAlloc(nthFreeListSize!(i), m_baseAlloc); } void[] alloc(size_t sz) { auto idx = getAllocatorIndex(sz); return idx < freeListCount ? m_freeLists[idx].alloc()[0 .. sz] : m_baseAlloc.alloc(sz); } void[] realloc(void[] data, size_t sz) { auto curidx = getAllocatorIndex(data.length); auto newidx = getAllocatorIndex(sz); if (curidx == newidx) { if (curidx == freeListCount) { // forward large blocks to the base allocator return m_baseAlloc.realloc(data, sz); } else { // just grow the slice if it still fits into the free list slot return data.ptr[0 .. sz]; } } // otherwise re-allocate manually auto newd = alloc(sz); assert(newd.ptr+sz <= data.ptr || newd.ptr >= data.ptr+data.length, "New block overlaps old one!?"); auto len = min(data.length, sz); newd[0 .. len] = data[0 .. len]; free(data); return newd; } void free(void[] data) { //logTrace("AFL free %08X(%s)", data.ptr, data.length); auto idx = getAllocatorIndex(data.length); if (idx < freeListCount) m_freeLists[idx].free(data.ptr[0 .. 1 << (idx + minExponent)]); else m_baseAlloc.free(data); } // does a CT optimized binary search for the right allocater private int getAllocatorIndex(size_t sz) @safe nothrow @nogc { //pragma(msg, getAllocatorIndexStr!(0, freeListCount)); return mixin(getAllocatorIndexStr!(0, freeListCount)); } private template getAllocatorIndexStr(int low, int high) { import std.format : format; static if (low == high) enum getAllocatorIndexStr = format("%s", low); else { enum mid = (low + high) / 2; enum getAllocatorIndexStr = "sz > nthFreeListSize!%s ? %s : %s" .format(mid, getAllocatorIndexStr!(mid+1, high), getAllocatorIndexStr!(low, mid)); } } unittest { auto a = new AutoFreeListAllocator(null); assert(a.getAllocatorIndex(0) == 0); foreach (i; iotaTuple!freeListCount) { assert(a.getAllocatorIndex(nthFreeListSize!i-1) == i); assert(a.getAllocatorIndex(nthFreeListSize!i) == i); assert(a.getAllocatorIndex(nthFreeListSize!i+1) == i+1); } assert(a.getAllocatorIndex(size_t.max) == freeListCount); } private static pure size_t nthFreeListSize(size_t i)() { return 1 << (i + minExponent); } private template iotaTuple(size_t i) { static if (i > 1) alias iotaTuple = TypeTuple!(iotaTuple!(i-1), i-1); else alias iotaTuple = TypeTuple!(0); } } final class PoolAllocator : Allocator { static struct Pool { Pool* next; void[] data; void[] remaining; } static struct Destructor { Destructor* next; void function(void*) destructor; void* object; } private { Allocator m_baseAllocator; Pool* m_freePools; Pool* m_fullPools; Destructor* m_destructors; size_t m_poolSize; } this(size_t pool_size, Allocator base) @safe nothrow { m_poolSize = pool_size; m_baseAllocator = base; } @property size_t totalSize() @safe nothrow @nogc { size_t amt = 0; for (auto p = m_fullPools; p; p = p.next) amt += p.data.length; for (auto p = m_freePools; p; p = p.next) amt += p.data.length; return amt; } @property size_t allocatedSize() @safe nothrow @nogc { size_t amt = 0; for (auto p = m_fullPools; p; p = p.next) amt += p.data.length; for (auto p = m_freePools; p; p = p.next) amt += p.data.length - p.remaining.length; return amt; } void[] alloc(size_t sz) { auto aligned_sz = alignedSize(sz); Pool* pprev = null; Pool* p = cast(Pool*)m_freePools; while( p && p.remaining.length < aligned_sz ){ pprev = p; p = p.next; } if( !p ){ auto pmem = m_baseAllocator.alloc(AllocSize!Pool); p = emplace!Pool(cast(Pool*)pmem.ptr); p.data = m_baseAllocator.alloc(max(aligned_sz, m_poolSize)); p.remaining = p.data; p.next = cast(Pool*)m_freePools; m_freePools = p; pprev = null; } auto ret = p.remaining[0 .. aligned_sz]; p.remaining = p.remaining[aligned_sz .. $]; if( !p.remaining.length ){ if( pprev ){ pprev.next = p.next; } else { m_freePools = p.next; } p.next = cast(Pool*)m_fullPools; m_fullPools = p; } return ret[0 .. sz]; } void[] realloc(void[] arr, size_t newsize) { auto aligned_sz = alignedSize(arr.length); auto aligned_newsz = alignedSize(newsize); if( aligned_newsz <= aligned_sz ) return arr[0 .. newsize]; // TODO: back up remaining auto pool = m_freePools; bool last_in_pool = pool && arr.ptr+aligned_sz == pool.remaining.ptr; if( last_in_pool && pool.remaining.length+aligned_sz >= aligned_newsz ){ pool.remaining = pool.remaining[aligned_newsz-aligned_sz .. $]; arr = arr.ptr[0 .. aligned_newsz]; assert(arr.ptr+arr.length == pool.remaining.ptr, "Last block does not align with the remaining space!?"); return arr[0 .. newsize]; } else { auto ret = alloc(newsize); assert(ret.ptr >= arr.ptr+aligned_sz || ret.ptr+ret.length <= arr.ptr, "New block overlaps old one!?"); ret[0 .. min(arr.length, newsize)] = arr[0 .. min(arr.length, newsize)]; return ret; } } void free(void[] mem) { } void freeAll() { version(VibeManualMemoryManagement){ // destroy all initialized objects for (auto d = m_destructors; d; d = d.next) d.destructor(cast(void*)d.object); m_destructors = null; // put all full Pools into the free pools list for (Pool* p = cast(Pool*)m_fullPools, pnext; p; p = pnext) { pnext = p.next; p.next = cast(Pool*)m_freePools; m_freePools = cast(Pool*)p; } // free up all pools for (Pool* p = cast(Pool*)m_freePools; p; p = p.next) p.remaining = p.data; } } void reset() { version(VibeManualMemoryManagement){ freeAll(); Pool* pnext; for (auto p = cast(Pool*)m_freePools; p; p = pnext) { pnext = p.next; m_baseAllocator.free(p.data); m_baseAllocator.free((cast(void*)p)[0 .. AllocSize!Pool]); } m_freePools = null; } } private static destroy(T)(void* ptr) { static if( is(T == class) ) .destroy(cast(T)ptr); else .destroy(*cast(T*)ptr); } } final class FreeListAlloc : Allocator { nothrow: private static struct FreeListSlot { FreeListSlot* next; } private { FreeListSlot* m_firstFree = null; size_t m_nalloc = 0; size_t m_nfree = 0; Allocator m_baseAlloc; immutable size_t m_elemSize; } this(size_t elem_size, Allocator base_allocator) @safe nothrow { assert(elem_size >= size_t.sizeof); m_elemSize = elem_size; m_baseAlloc = base_allocator; logDebug_("Create FreeListAlloc %d", m_elemSize); } @property size_t elementSize() const { return m_elemSize; } void[] alloc(size_t sz) { assert(sz == m_elemSize, "Invalid allocation size."); return alloc(); } void[] alloc() { void[] mem; if( m_firstFree ){ auto slot = m_firstFree; m_firstFree = slot.next; slot.next = null; mem = (cast(void*)slot)[0 .. m_elemSize]; debug m_nfree--; } else { mem = m_baseAlloc.alloc(m_elemSize); //logInfo("Alloc %d bytes: alloc: %d, free: %d", SZ, s_nalloc, s_nfree); } debug m_nalloc++; //logInfo("Alloc %d bytes: alloc: %d, free: %d", SZ, s_nalloc, s_nfree); return mem; } void[] realloc(void[] mem, size_t sz) { assert(mem.length == m_elemSize); assert(sz == m_elemSize); return mem; } void free(void[] mem) { assert(mem.length == m_elemSize, "Memory block passed to free has wrong size."); auto s = cast(FreeListSlot*)mem.ptr; s.next = m_firstFree; m_firstFree = s; m_nalloc--; m_nfree++; } } struct FreeListObjectAlloc(T, bool USE_GC = true, bool INIT = true, EXTRA = void) { enum ElemSize = AllocSize!T; enum ElemSlotSize = max(AllocSize!T + AllocSize!EXTRA, Slot.sizeof); static if( is(T == class) ){ alias TR = T; } else { alias TR = T*; } struct Slot { Slot* next; } private static Slot* s_firstFree; static TR alloc(ARGS...)(ARGS args) { void[] mem; if (s_firstFree !is null) { auto ret = s_firstFree; s_firstFree = s_firstFree.next; ret.next = null; mem = (cast(void*)ret)[0 .. ElemSize]; } else { //logInfo("alloc %s/%d", T.stringof, ElemSize); mem = manualAllocator().alloc(ElemSlotSize); static if( hasIndirections!T ) GC.addRange(mem.ptr, ElemSlotSize); } static if (INIT) return cast(TR)internalEmplace!(Unqual!T)(mem, args); // FIXME: this emplace has issues with qualified types, but Unqual!T may result in the wrong constructor getting called. else return cast(TR)mem.ptr; } static void free(TR obj) { static if (INIT) { scope (failure) assert(0, "You shouldn't throw in destructors"); auto objc = obj; static if (is(TR == T*)) .destroy(*objc);//typeid(T).destroy(cast(void*)obj); else .destroy(objc); } auto sl = cast(Slot*)obj; sl.next = s_firstFree; s_firstFree = sl; //static if( hasIndirections!T ) GC.removeRange(cast(void*)obj); //manualAllocator().free((cast(void*)obj)[0 .. ElemSlotSize]); } } template AllocSize(T) { static if (is(T == class)) { // workaround for a strange bug where AllocSize!SSLStream == 0: TODO: dustmite! enum dummy = T.stringof ~ __traits(classInstanceSize, T).stringof; enum AllocSize = __traits(classInstanceSize, T); } else { enum AllocSize = T.sizeof; } } struct FreeListRef(T, bool INIT = true) { @safe: alias ObjAlloc = FreeListObjectAlloc!(T, true, INIT, int); enum ElemSize = AllocSize!T; static if( is(T == class) ){ alias TR = T; } else { alias TR = T*; } private TR m_object; private size_t m_magic = 0x1EE75817; // workaround for compiler bug static FreeListRef opCall(ARGS...)(ARGS args) { //logInfo("refalloc %s/%d", T.stringof, ElemSize); FreeListRef ret; ret.m_object = () @trusted { return ObjAlloc.alloc(args); } (); ret.refCount = 1; return ret; } ~this() { //if( m_object ) logInfo("~this!%s(): %d", T.stringof, this.refCount); //if( m_object ) logInfo("ref %s destructor %d", T.stringof, refCount); //else logInfo("ref %s destructor %d", T.stringof, 0); clear(); m_magic = 0; m_object = null; } this(this) { checkInvariants(); if( m_object ){ //if( m_object ) logInfo("this!%s(this): %d", T.stringof, this.refCount); this.refCount++; } } void opAssign(FreeListRef other) { clear(); m_object = other.m_object; if( m_object ){ //logInfo("opAssign!%s(): %d", T.stringof, this.refCount); refCount++; } } void clear() { checkInvariants(); if (m_object) { if (--this.refCount == 0) () @trusted { ObjAlloc.free(m_object); } (); } m_object = null; m_magic = 0x1EE75817; } @property const(TR) get() const { checkInvariants(); return m_object; } @property TR get() { checkInvariants(); return m_object; } alias get this; private @property ref int refCount() const @trusted { auto ptr = cast(ubyte*)cast(void*)m_object; ptr += ElemSize; return *cast(int*)ptr; } private void checkInvariants() const { assert(m_magic == 0x1EE75817); assert(!m_object || refCount > 0); } } private void* extractUnalignedPointer(void* base) nothrow { ubyte misalign = *(cast(ubyte*)base-1); assert(misalign <= Allocator.alignment); return base - misalign; } private void* adjustPointerAlignment(void* base) nothrow { ubyte misalign = Allocator.alignment - (cast(size_t)base & Allocator.alignmentMask); base += misalign; *(cast(ubyte*)base-1) = misalign; return base; } unittest { void test_align(void* p, size_t adjustment) { void* pa = adjustPointerAlignment(p); assert((cast(size_t)pa & Allocator.alignmentMask) == 0, "Non-aligned pointer."); assert(*(cast(ubyte*)pa-1) == adjustment, "Invalid adjustment "~to!string(p)~": "~to!string(*(cast(ubyte*)pa-1))); void* pr = extractUnalignedPointer(pa); assert(pr == p, "Recovered base != original"); } void* ptr = .malloc(0x40); ptr += Allocator.alignment - (cast(size_t)ptr & Allocator.alignmentMask); test_align(ptr++, 0x10); test_align(ptr++, 0x0F); test_align(ptr++, 0x0E); test_align(ptr++, 0x0D); test_align(ptr++, 0x0C); test_align(ptr++, 0x0B); test_align(ptr++, 0x0A); test_align(ptr++, 0x09); test_align(ptr++, 0x08); test_align(ptr++, 0x07); test_align(ptr++, 0x06); test_align(ptr++, 0x05); test_align(ptr++, 0x04); test_align(ptr++, 0x03); test_align(ptr++, 0x02); test_align(ptr++, 0x01); test_align(ptr++, 0x10); } /// private size_t alignedSize(size_t sz) nothrow { return ((sz + Allocator.alignment - 1) / Allocator.alignment) * Allocator.alignment; } unittest { foreach( i; 0 .. 20 ){ auto ia = alignedSize(i); assert(ia >= i); assert((ia & Allocator.alignmentMask) == 0); assert(ia < i+Allocator.alignment); } } private void ensureValidMemory(void[] mem) nothrow { auto bytes = cast(ubyte[])mem; swap(bytes[0], bytes[$-1]); swap(bytes[0], bytes[$-1]); } /// See issue #14194 private T internalEmplace(T, Args...)(void[] chunk, auto ref Args args) if (is(T == class)) in { import std.string, std.format; assert(chunk.length >= T.sizeof, format("emplace: Chunk size too small: %s < %s size = %s", chunk.length, T.stringof, T.sizeof)); assert((cast(size_t) chunk.ptr) % T.alignof == 0, format("emplace: Misaligned memory block (0x%X): it must be %s-byte aligned for type %s", chunk.ptr, T.alignof, T.stringof)); } body { enum classSize = __traits(classInstanceSize, T); auto result = cast(T) chunk.ptr; // Initialize the object in its pre-ctor state static if (__VERSION__ < 2071) chunk[0 .. classSize] = typeid(T).init[]; else chunk[0 .. classSize] = typeid(T).initializer[]; // Avoid deprecation warning // Call the ctor if any static if (is(typeof(result.__ctor(args)))) { // T defines a genuine constructor accepting args // Go the classic route: write .init first, then call ctor result.__ctor(args); } else { static assert(args.length == 0 && !is(typeof(&T.__ctor)), "Don't know how to initialize an object of type " ~ T.stringof ~ " with arguments " ~ Args.stringof); } return result; } /// Dittor private auto internalEmplace(T, Args...)(void[] chunk, auto ref Args args) if (!is(T == class)) in { import std.string, std.format; assert(chunk.length >= T.sizeof, format("emplace: Chunk size too small: %s < %s size = %s", chunk.length, T.stringof, T.sizeof)); assert((cast(size_t) chunk.ptr) % T.alignof == 0, format("emplace: Misaligned memory block (0x%X): it must be %s-byte aligned for type %s", chunk.ptr, T.alignof, T.stringof)); } body { return emplace(cast(T*)chunk.ptr, args); } private void logDebug_(ARGS...)(string msg, ARGS args) {} vibe.d-0.8.2/utils/vibe/internal/meta/000077500000000000000000000000001324361747700175355ustar00rootroot00000000000000vibe.d-0.8.2/utils/vibe/internal/meta/all.d000066400000000000000000000010121324361747700204440ustar00rootroot00000000000000/** Collection of utilities for code generation and template meta-programming tasks. Copyright: © 2013 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig, Михаил Страшун */ module vibe.internal.meta.all; public import vibe.internal.meta.codegen; public import vibe.internal.meta.funcattr; public import vibe.internal.meta.traits; public import vibe.internal.meta.typetuple; public import vibe.internal.meta.uda; vibe.d-0.8.2/utils/vibe/internal/meta/codegen.d000066400000000000000000000303411324361747700213070ustar00rootroot00000000000000/** Templates and CTFE-functions useful for type introspection during code generation. Some of those are very similar to `traits` utilities but instead of general type information focus on properties that are most important during such code generation. Copyright: © 2013 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig, Михаил Страшун */ module vibe.internal.meta.codegen; import std.traits : FunctionTypeOf, isSomeFunction; /* As user types defined inside unittest blocks don't have proper parent module, those need to be defined outside for tests that require module inspection for some reasons. All such tests use single declaration compiled in this module in unittest version. */ version(unittest) { private: interface TestInterface { static struct Inner { } const(Inner[]) func1(ref string name); ref int func1(); shared(Inner[4]) func2(...) const; immutable(int[string]) func3(in Inner anotherName) @safe; } } /** For a given type T finds all user-defined symbols it embeds. Important property of such symbols is that they are likely to need an explicit import if used in some other scope / module. Implementation is incomplete and tuned for REST interface generation needs. Params: T = type to introspect for qualified symbols Returns: tuple of "interesting" symbols, no duplicates */ template getSymbols(T) { import std.typetuple : TypeTuple, NoDuplicates, staticMap; import std.traits; private template Implementation(T) { static if (is(T == U!V, alias U, V)) { // single-argument template support alias Implementation = TypeTuple!(U, Implementation!V); } else static if (isAggregateType!T || is(T == enum)) { alias Implementation = T; } else static if (isStaticArray!T || isArray!T) { alias Implementation = Implementation!(typeof(T.init[0])); } else static if (isAssociativeArray!T) { alias Implementation = TypeTuple!( Implementation!(ValueType!T), Implementation!(KeyType!T) ); } else static if (isPointer!T) { alias Implementation = Implementation!(PointerTarget!T); } else alias Implementation = TypeTuple!(); } alias getSymbols = NoDuplicates!(Implementation!T); } /// unittest { import std.typetuple : TypeTuple; struct A {} interface B {} alias Type = A[const(B[A*])]; struct C(T) {} // can't directly compare tuples thus comparing their string representation static assert (getSymbols!Type.stringof == TypeTuple!(A, B).stringof); static assert (getSymbols!int.stringof == TypeTuple!().stringof); static assert (getSymbols!(C!A).stringof == TypeTuple!(C, A).stringof); } /** For a given interface I finds all modules that types in its methods come from. These modules need to be imported in the scope code generated from I is used to avoid errors with unresolved symbols for user types. Params: I = interface to inspect Returns: list of module name strings, no duplicates */ string[] getRequiredImports(I)() if (is(I == interface)) { import std.traits : MemberFunctionsTuple, moduleName, ParameterTypeTuple, ReturnType; if( !__ctfe ) assert(false); bool[string] visited; string[] ret; void addModule(string name) { if (name !in visited) { ret ~= name; visited[name] = true; } } foreach (method; __traits(allMembers, I)) { // WORKAROUND #1045 / @@BUG14375@@ static if (method.length != 0) foreach (overload; MemberFunctionsTuple!(I, method)) { alias FuncType = FunctionTypeOf!overload; foreach (symbol; getSymbols!(ReturnType!FuncType)) { static if (__traits(compiles, moduleName!symbol)) { addModule(moduleName!symbol); } } foreach (P; ParameterTypeTuple!FuncType) { foreach (symbol; getSymbols!P) { static if (__traits(compiles, moduleName!symbol)) { addModule(moduleName!symbol); } } } } } return ret; } /// unittest { // `Test` is an interface using single user type enum imports = getRequiredImports!TestInterface; static assert (imports.length == 1); static assert (imports[0] == "vibe.internal.meta.codegen"); } /** * Returns a Tuple of the parameters. * It can be used to declare function. */ template ParameterTuple(alias Func) { static if (is(FunctionTypeOf!Func Params == __parameters)) { alias ParameterTuple = Params; } else static assert(0, "Argument to ParameterTuple must be a function"); } /// unittest { void foo(string val = "Test", int = 10); void bar(ParameterTuple!foo) { assert(val == "Test"); } // Variadic functions require special handling: import core.vararg; void foo2(string val, ...); void bar2(ParameterTuple!foo2, ...) { assert(val == "42"); } bar(); bar2("42"); // Note: outside of a parameter list, it's value is the type of the param. import std.traits : ParameterDefaultValueTuple; ParameterTuple!(foo)[0] test = ParameterDefaultValueTuple!(foo)[0]; assert(test == "Test"); } /// Returns a Tuple containing a 1-element parameter list, with an optional default value. /// Can be used to concatenate a parameter to a parameter list, or to create one. template ParameterTuple(T, string identifier, DefVal : void = void) { import std.string : format; mixin(q{private void __func(T %s);}.format(identifier)); alias ParameterTuple = ParameterTuple!__func; } /// Ditto template ParameterTuple(T, string identifier, alias DefVal) { import std.string : format; mixin(q{private void __func(T %s = DefVal);}.format(identifier)); alias ParameterTuple = ParameterTuple!__func; } /// unittest { void foo(ParameterTuple!(int, "arg2")) { assert(arg2 == 42); } foo(42); void bar(string arg); void bar2(ParameterTuple!bar, ParameterTuple!(string, "val")) { assert(val == arg); } bar2("isokay", "isokay"); // For convenience, you can directly pass the result of std.traits.ParameterDefaultValueTuple // without checking for void. import std.traits : PDVT = ParameterDefaultValueTuple; import std.traits : arity; void baz(string test, int = 10); static assert(is(PDVT!(baz)[0] == void)); // void baz2(string test2, string test); void baz2(ParameterTuple!(string, "test2", PDVT!(baz)[0]), ParameterTuple!(baz)[0..$-1]) { assert(test == test2); } static assert(arity!baz2 == 2); baz2("Try", "Try"); // void baz3(string test, int = 10, int ident = 10); void baz3(ParameterTuple!baz, ParameterTuple!(int, "ident", PDVT!(baz)[1])) { assert(ident == 10); } baz3("string"); import std.datetime; void baz4(ParameterTuple!(SysTime, "epoch", Clock.currTime)) { assert((Clock.currTime - epoch) < 30.seconds); } baz4(); // Convertion are possible for default parameters... alias baz5PT = ParameterTuple!(SysTime, "epoch", uint.min); // However this blows up because of @@bug 14369@@ // alias baz6PT = ParameterTuple!(SysTime, "epoch", PDVT!(baz4)[0])); alias baz7PT = ParameterTuple!(SysTime, "epoch", uint.max); // Non existing convertion are detected. static assert(!__traits(compiles, { alias baz7PT = ParameterTuple!(SysTime, "epoch", Object.init); })); // And types are refused static assert(!__traits(compiles, { alias baz7PT = ParameterTuple!(SysTime, "epoch", uint); })); } /// Returns a string of the functions attributes, suitable to be mixed /// on the LHS of the function declaration. /// /// Unfortunately there is no "nice" syntax for declaring a function, /// so we have to resort on string for functions attributes. template FuncAttributes(alias Func) { import std.array : join; enum FuncAttributes = [__traits(getFunctionAttributes, Func)].join(" "); } /// A template mixin which allow you to clone a function, and specify the implementation. /// /// Params: /// Func = An alias to the function to copy. /// body_ = The implementation of the class which will be mixed in. /// keepUDA = Whether or not to copy UDAs. Since the primary use case for this template /// is implementing classes from interface, this defaults to $(D false). /// identifier = The identifier to give to the new function. Default to the identifier of /// $(D Func). /// /// See_Also: $(D CloneFunctionDecl) to clone a prototype. mixin template CloneFunction(alias Func, string body_, bool keepUDA = false, string identifier = __traits(identifier, Func)) { // Template mixin: everything has to be self-contained. import std.string : format, variadicFunctionStyle, Variadic; import std.traits : ReturnType; import std.typetuple : TypeTuple; import vibe.internal.meta.codegen : ParameterTuple, FuncAttributes; // Sadly this is not possible: // class Test { // int foo(string par) pure @safe nothrow { /* ... */ } // typeof(foo) bar { // return foo(par); // } // } static if (keepUDA) private alias UDA = TypeTuple!(__traits(getAttributes, Func)); else private alias UDA = TypeTuple!(); static if (variadicFunctionStyle!Func == Variadic.no) { mixin(q{ @(UDA) ReturnType!Func %s(ParameterTuple!Func) %s { %s } }.format(identifier, FuncAttributes!Func, body_)); } else static if (variadicFunctionStyle!Func == Variadic.typesafe) { mixin(q{ @(UDA) ReturnType!Func %s(ParameterTuple!Func...) %s { %s } }.format(identifier, FuncAttributes!Func, body_)); } else static assert(0, "Variadic style " ~ variadicFunctionStyle!Func.stringof ~ " not implemented."); } /// unittest { import std.typetuple : TypeTuple; interface ITest { @("42") int foo(string par, int, string p = "foo", int = 10) pure @safe nothrow const; @property int foo2() pure @safe nothrow const; // Issue #1144 void variadicFun(ref size_t bar, string[] args...); // Gives weird error message, not supported so far //bool variadicDFun(...); } class Test : ITest { mixin CloneFunction!(ITest.foo, q{return 84;}, false, "customname"); override: mixin CloneFunction!(ITest.foo, q{return 42;}, true); mixin CloneFunction!(ITest.foo2, q{return 42;}); mixin CloneFunction!(ITest.variadicFun, q{bar = args.length;}); //mixin CloneFunction!(ITest.variadicDFun, q{return true;}); } // UDA tests static assert(__traits(getAttributes, Test.customname).length == 0); static assert(__traits(getAttributes, Test.foo2).length == 0); static assert(__traits(getAttributes, Test.foo) == TypeTuple!("42")); assert(new Test().foo("", 21) == 42); assert(new Test().foo2 == 42); assert(new Test().customname("", 21) == 84); size_t l; new Test().variadicFun(l, "Hello", "variadic", "world"); assert(l == 3); //assert(new Test().variadicDFun("Hello", "again", "variadic", "world")); } /// A template mixin which allow you to clone a function declaration /// /// Params: /// Func = An alias to the function to copy. /// keepUDA = Whether or not to copy UDAs. Since the primary use case for this template /// is copying a definition, this defaults to $(D true). /// identifier = The identifier to give to the new function. Default to the identifier of /// $(D Func). /// /// See_Also : $(D CloneFunction) to implement a function. mixin template CloneFunctionDecl(alias Func, bool keepUDA = true, string identifier = __traits(identifier, Func)) { // Template mixin: everything has to be self-contained. import std.string : format, variadicFunctionStyle, Variadic; import std.traits : ReturnType; import std.typetuple : TypeTuple; import vibe.internal.meta.codegen : ParameterTuple, FuncAttributes; static if (keepUDA) private enum UDA = q{@(TypeTuple!(__traits(getAttributes, Func)))}; else private enum UDA = ""; static if (variadicFunctionStyle!Func == Variadic.no) { mixin(q{ %s ReturnType!Func %s(ParameterTuple!Func) %s; }.format(UDA, identifier, FuncAttributes!Func)); } else static if (variadicFunctionStyle!Func == Variadic.typesafe) { mixin(q{ %s ReturnType!Func %s(ParameterTuple!Func...) %s; }.format(UDA, identifier, FuncAttributes!Func)); } else static assert(0, "Variadic style " ~ variadicFunctionStyle!Func.stringof ~ " not implemented."); } /// unittest { import std.typetuple : TypeTuple; enum Foo; interface IUDATest { @(Foo, "forty-two", 42) const(Object) bar() @safe; } interface UDATest { mixin CloneFunctionDecl!(IUDATest.bar); } // Tuples don't like when you compare types using '=='. static assert(is(TypeTuple!(__traits(getAttributes, UDATest.bar))[0] == Foo)); static assert(__traits(getAttributes, UDATest.bar)[1 .. $] == TypeTuple!("forty-two", 42)); } vibe.d-0.8.2/utils/vibe/internal/meta/funcattr.d000066400000000000000000000550531324361747700215400ustar00rootroot00000000000000/** Helpers for working with user-defined attributes that can be attached to function or method to modify its behavior. In some sense those are similar to Python decorator. D does not support this feature natively but it can be emulated within certain code generation framework. Copyright: © 2013 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Михаил Страшун */ module vibe.internal.meta.funcattr; import std.traits : isInstanceOf, ReturnType; import vibe.internal.meta.traits : RecursiveFunctionAttributes; /// example unittest { struct Context { int increment; string token; bool updated = false; } static int genID(Context* context) { static int id = 0; return (id += context.increment); } static string update(string result, Context* context) { context.updated = true; return result ~ context.token; } class API { @before!genID("id") @after!update() string handler(int id, string name, string text) { import std.string : format; return format("[%s] %s : %s", id, name, text); } } auto api = new API(); auto context = new Context(5, " | token"); auto funcattr = createAttributedFunction!(API.handler)(context); auto result = funcattr(&api.handler, "Developer", "Hello, World!"); assert (result == "[5] Developer : Hello, World! | token"); assert (context.updated); } /** Marks function/method for usage with `AttributedFunction`. Former will call a Hook before calling attributed function/method and provide its return value as input parameter. Params: Hook = function/method symbol to run before attributed function/method parameter_name = name in attributed function/method parameter list to bind result to Returns: internal attribute struct that embeds supplied information */ auto before(alias Hook)(string parameter_name) { return InputAttribute!Hook(parameter_name); } /// unittest { int genID() { return 42; } @before!genID("id") void foo(int id, double something) {} } /** Marks function/method for usage with `AttributedFunction`. Former will call a Hook after calling attributed function/method and provide its return value as a single input parameter for a Hook. There can be only one "after"-attribute attached to a single symbol. Params: Hook = function/method symbol to run after attributed function/method Returns: internal attribute struct that embeds supplied information */ @property auto after(alias Function)() { return OutputAttribute!Function(); } /// unittest { auto filter(int result) { return result; } @after!filter() int foo() { return 42; } } /** Checks if parameter is calculated by one of attached functions. Params: Function = function symbol to query for attributes name = parameter name to check Returns: `true` if it is calculated */ template IsAttributedParameter(alias Function, string name) { import std.traits : FunctionTypeOf; static assert (is(FunctionTypeOf!Function)); private { alias Data = AttributedParameterMetadata!Function; template Impl(T...) { static if (T.length == 0) { enum Impl = false; } else { static if (T[0].name == name) { enum Impl = true; } else { enum Impl = Impl!(T[1..$]); } } } } enum IsAttributedParameter = Impl!Data; } template HasFuncAttributes(alias Func) { import std.typetuple; enum HasFuncAttributes = (anySatisfy!(isOutputAttribute, __traits(getAttributes, Func)) || anySatisfy!(isInputAttribute, __traits(getAttributes, Func))); } unittest { string foo() { return "Hello"; } string bar(int) { return foo(); } @before!foo("b") void baz1(string b) {} @after!bar() string baz2() { return "Hi"; } @before!foo("b") @after!bar() string baz3(string b) { return "Hi"; } static assert (HasFuncAttributes!baz1); static assert (HasFuncAttributes!baz2); static assert (HasFuncAttributes!baz3); string foobar1(string b) { return b; } @("Irrelevant", 42) string foobar2(string b) { return b; } static assert (!HasFuncAttributes!foobar1); static assert (!HasFuncAttributes!foobar2); } /** Computes the given attributed parameter using the corresponding @before modifier. */ auto computeAttributedParameter(alias FUNCTION, string NAME, ARGS...)(ARGS args) { import std.typetuple : Filter; static assert(IsAttributedParameter!(FUNCTION, NAME), "Missing @before attribute for parameter "~NAME); alias input_attributes = Filter!(isInputAttribute, RecursiveFunctionAttributes!FUNCTION); foreach (att; input_attributes) static if (att.parameter == NAME) { return att.evaluator(args); } assert(false); } /** Computes the given attributed parameter using the corresponding @before modifier. This overload tries to invoke the given function as a member of the $(D ctx) parameter. It also supports accessing private member functions using the $(D PrivateAccessProxy) mixin. */ auto computeAttributedParameterCtx(alias FUNCTION, string NAME, T, ARGS...)(T ctx, ARGS args) { static if (__VERSION__ >= 2072) import std.typetuple : AliasSeq, Filter; else import std.typetuple : AliasSeq = TypeTuple, Filter; static assert(IsAttributedParameter!(FUNCTION, NAME), "Missing @before attribute for parameter "~NAME); alias input_attributes = Filter!(isInputAttribute, RecursiveFunctionAttributes!FUNCTION); foreach (att; input_attributes) static if (att.parameter == NAME) { static if (!__traits(isStaticFunction, att.evaluator)) { static if (is(typeof(ctx.invokeProxy__!(att.evaluator)(args)))) return ctx.invokeProxy__!(att.evaluator)(args); else return __traits(getMember, ctx, __traits(identifier, att.evaluator))(args); } else { return att.evaluator(args); } } assert(false); } /** Helper mixin to support private member functions for $(D @before) attributes. */ mixin template PrivateAccessProxy() { auto invokeProxy__(alias MEMBER, ARGS...)(ARGS args) { return MEMBER(args); } } /// unittest { class MyClass { @before!computeParam("param") void method(bool param) { assert(param == true); } private bool computeParam() { return true; } } } /** Processes the function return value using all @after modifiers. */ ReturnType!FUNCTION evaluateOutputModifiers(alias FUNCTION, ARGS...)(ReturnType!FUNCTION result, ARGS args) { import std.string : format; import std.traits : ParameterTypeTuple, ReturnType, fullyQualifiedName; import std.typetuple : Filter; import vibe.internal.meta.typetuple : Compare, Group; alias output_attributes = Filter!(isOutputAttribute, RecursiveFunctionAttributes!FUNCTION); foreach (OA; output_attributes) { import std.typetuple : TypeTuple; static assert ( Compare!( Group!(ParameterTypeTuple!(OA.modificator)), Group!(ReturnType!FUNCTION, ARGS) ), format( "Output attribute function '%s%s' argument list " ~ "does not match provided argument list %s", fullyQualifiedName!(OA.modificator), ParameterTypeTuple!(OA.modificator).stringof, TypeTuple!(ReturnType!FUNCTION, ARGS).stringof ) ); result = OA.modificator(result, args); } return result; } /// unittest { int foo() { return 42; } @before!foo("name1") void bar(int name1, double name2) { } static assert (IsAttributedParameter!(bar, "name1")); static assert (!IsAttributedParameter!(bar, "name2")); static assert (!IsAttributedParameter!(bar, "oops")); } // internal attribute definitions private { struct InputAttribute(alias Function) { alias evaluator = Function; string parameter; } struct OutputAttribute(alias Function) { alias modificator = Function; } template isInputAttribute(T...) { enum isInputAttribute = (T.length == 1) && isInstanceOf!(InputAttribute, typeof(T[0])); } unittest { void foo() {} enum correct = InputAttribute!foo("name"); enum wrong = OutputAttribute!foo(); static assert (isInputAttribute!correct); static assert (!isInputAttribute!wrong); } template isOutputAttribute(T...) { enum isOutputAttribute = (T.length == 1) && isInstanceOf!(OutputAttribute, typeof(T[0])); } unittest { void foo() {} enum correct = OutputAttribute!foo(); enum wrong = InputAttribute!foo("name"); static assert (isOutputAttribute!correct); static assert (!isOutputAttribute!wrong); } } // tools to operate on InputAttribute tuple private { // stores metadata for single InputAttribute "effect" struct Parameter { // evaluated parameter name string name; // that parameter index in attributed function parameter list int index; // fully qualified return type of attached function string type; // for non-basic types - module to import string origin; } /** Used to accumulate various parameter-related metadata in one tuple in one go. Params: Function = attributed functon / method symbol Returns: TypeTuple of Parameter instances, one for every Function parameter that will be evaluated from attributes. */ template AttributedParameterMetadata(alias Function) { import std.array : join; import std.typetuple : Filter, staticMap, staticIndexOf; import std.traits : ParameterIdentifierTuple, ReturnType, fullyQualifiedName, moduleName; private alias attributes = Filter!( isInputAttribute, RecursiveFunctionAttributes!Function ); private alias parameter_names = ParameterIdentifierTuple!Function; /* Creates single Parameter instance. Used in pair with staticMap. */ template BuildParameter(alias attribute) { enum name = attribute.parameter; static assert ( is (ReturnType!(attribute.evaluator)) && !(is(ReturnType!(attribute.evaluator) == void)), "hook functions attached for usage with `AttributedFunction` " ~ "must have a return type" ); static if (is(typeof(moduleName!(ReturnType!(attribute.evaluator))))) { enum origin = moduleName!(ReturnType!(attribute.evaluator)); } else { enum origin = ""; } enum BuildParameter = Parameter( name, staticIndexOf!(name, parameter_names), fullyQualifiedName!(ReturnType!(attribute.evaluator)), origin ); import std.string : format; static assert ( BuildParameter.index >= 0, format( "You are trying to attach function result to parameter '%s' " ~ "but there is no such parameter for '%s(%s)'", name, fullyQualifiedName!Function, join([ parameter_names ], ", ") ) ); } alias AttributedParameterMetadata = staticMap!(BuildParameter, attributes); } // no false attribute detection unittest { @(42) void foo() {} static assert (AttributedParameterMetadata!foo.length == 0); } // does not compile for wrong attribute data unittest { int attached1() { return int.init; } void attached2() {} @before!attached1("doesnotexist") void bar(int param) {} @before!attached2("param") void baz(int param) {} // wrong name static assert (!__traits(compiles, AttributedParameterMetadata!bar)); // no return type static assert (!__traits(compiles, AttributedParameterMetadata!baz)); } // generates expected tuple for valid input unittest { int attached1() { return int.init; } double attached2() { return double.init; } @before!attached1("two") @before!attached2("three") void foo(string one, int two, double three) {} alias result = AttributedParameterMetadata!foo; static assert (result.length == 2); static assert (result[0] == Parameter("two", 1, "int")); static assert (result[1] == Parameter("three", 2, "double")); } /** Combines types from arguments of initial `AttributedFunction` call with parameters (types) injected by attributes for that call. Used to verify that resulting argument list can be passed to underlying attributed function. Params: ParameterMeta = Group of Parameter instances for extra data to add into argument list ParameterList = Group of types from initial argument list Returns: type tuple of expected combined function argument list */ template MergeParameterTypes(alias ParameterMeta, alias ParameterList) { import vibe.internal.meta.typetuple : isGroup, Group; static assert (isGroup!ParameterMeta); static assert (isGroup!ParameterList); static if (ParameterMeta.expand.length) { enum Parameter meta = ParameterMeta.expand[0]; static assert (meta.index <= ParameterList.expand.length); static if (meta.origin != "") { mixin("static import " ~ meta.origin ~ ";"); } mixin("alias type = " ~ meta.type ~ ";"); alias PartialResult = Group!( ParameterList.expand[0..meta.index], type, ParameterList.expand[meta.index..$] ); alias MergeParameterTypes = MergeParameterTypes!( Group!(ParameterMeta.expand[1..$]), PartialResult ); } else { alias MergeParameterTypes = ParameterList.expand; } } // normal unittest { import vibe.internal.meta.typetuple : Group, Compare; alias meta = Group!( Parameter("one", 2, "int"), Parameter("two", 3, "string") ); alias initial = Group!( double, double, double ); alias merged = Group!(MergeParameterTypes!(meta, initial)); static assert ( Compare!(merged, Group!(double, double, int, string, double)) ); } // edge unittest { import vibe.internal.meta.typetuple : Group, Compare; alias meta = Group!( Parameter("one", 3, "int"), Parameter("two", 4, "string") ); alias initial = Group!( double, double, double ); alias merged = Group!(MergeParameterTypes!(meta, initial)); static assert ( Compare!(merged, Group!(double, double, double, int, string)) ); } // out-of-index unittest { import vibe.internal.meta.typetuple : Group; alias meta = Group!( Parameter("one", 20, "int"), ); alias initial = Group!( double ); static assert ( !__traits(compiles, MergeParameterTypes!(meta, initial)) ); } } /** Entry point for `funcattr` API. Helper struct that takes care of calling given Function in a such way that part of its arguments are evalutated by attached input attributes (see `before`) and output gets post-processed by output attribute (see `after`). One such structure embeds single attributed function to call and specific argument type list that can be passed to attached functions. Params: Function = attributed function StoredArgTypes = Group of argument types for attached functions */ struct AttributedFunction(alias Function, alias StoredArgTypes) { import std.traits : isSomeFunction, ReturnType, FunctionTypeOf, ParameterTypeTuple, ParameterIdentifierTuple; import vibe.internal.meta.typetuple : Group, isGroup, Compare; import std.functional : toDelegate; import std.typetuple : Filter; static assert (isGroup!StoredArgTypes); static assert (is(FunctionTypeOf!Function)); /** Stores argument tuple for attached function calls Params: args = tuple of actual argument values */ void storeArgs(StoredArgTypes.expand args) { m_storedArgs = args; } /** Used to invoke configured function/method with all attached attribute functions. As aliased method symbols can't be called without the context, explicit providing of delegate to call is required Params: dg = delegated created from function / method to call args = list of arguments to dg not provided by attached attribute function Return: proxies return value of dg */ ReturnType!Function opCall(T...)(FunctionDg dg, T args) { import std.traits : fullyQualifiedName; import std.string : format; enum hasReturnType = is(ReturnType!Function) && !is(ReturnType!Function == void); static if (hasReturnType) { ReturnType!Function result; } // check that all attached functions have conforming argument lists foreach (uda; input_attributes) { static assert ( Compare!( Group!(ParameterTypeTuple!(uda.evaluator)), StoredArgTypes ), format( "Input attribute function '%s%s' argument list " ~ "does not match provided argument list %s", fullyQualifiedName!(uda.evaluator), ParameterTypeTuple!(uda.evaluator).stringof, StoredArgTypes.expand.stringof ) ); } static if (hasReturnType) { result = prepareInputAndCall(dg, args); } else { prepareInputAndCall(dg, args); } static assert ( output_attributes.length <= 1, "Only one output attribute (@after) is currently allowed" ); static if (output_attributes.length) { import std.typetuple : TypeTuple; static assert ( Compare!( Group!(ParameterTypeTuple!(output_attributes[0].modificator)), Group!(ReturnType!Function, StoredArgTypes.expand) ), format( "Output attribute function '%s%s' argument list " ~ "does not match provided argument list %s", fullyQualifiedName!(output_attributes[0].modificator), ParameterTypeTuple!(output_attributes[0].modificator).stringof, TypeTuple!(ReturnType!Function, StoredArgTypes.expand).stringof ) ); static if (hasReturnType) { result = output_attributes[0].modificator(result, m_storedArgs); } else { output_attributes[0].modificator(m_storedArgs); } } static if (hasReturnType) { return result; } } /** Convenience wrapper tha creates stub delegate for free functions. As those do not require context, passing delegate explicitly is not required. */ ReturnType!Function opCall(T...)(T args) if (!is(T[0] == delegate)) { return this.opCall(toDelegate(&Function), args); } private { // used as an argument tuple when function attached // to InputAttribute is called StoredArgTypes.expand m_storedArgs; // used as input type for actual function pointer so // that both free functions and methods can be supplied alias FunctionDg = typeof(toDelegate(&Function)); // information about attributed function arguments alias ParameterTypes = ParameterTypeTuple!Function; alias parameter_names = ParameterIdentifierTuple!Function; // filtered UDA lists alias input_attributes = Filter!(isInputAttribute, __traits(getAttributes, Function)); alias output_attributes = Filter!(isOutputAttribute, __traits(getAttributes, Function)); } private { /** Does all the magic necessary to prepare argument list for attributed function based on `input_attributes` and `opCall` argument list. Catches all name / type / size mismatch erros in that domain via static asserts. Params: dg = delegate for attributed function / method args = argument list from `opCall` Returns: proxies return value of dg */ ReturnType!Function prepareInputAndCall(T...)(FunctionDg dg, T args) if (!Compare!(Group!T, Group!(ParameterTypeTuple!Function))) { alias attributed_parameters = AttributedParameterMetadata!Function; // calculated combined input type list alias Input = MergeParameterTypes!( Group!attributed_parameters, Group!T ); import std.traits : fullyQualifiedName; import std.string : format; static assert ( Compare!(Group!Input, Group!ParameterTypes), format( "Calculated input parameter type tuple %s does not match " ~ "%s%s", Input.stringof, fullyQualifiedName!Function, ParameterTypes.stringof ) ); // this value tuple will be used to assemble argument list Input input; foreach (i, uda; input_attributes) { // each iteration cycle is responsible for initialising `input` // tuple from previous spot to current attributed parameter index // (including) enum index = attributed_parameters[i].index; static if (i == 0) { enum lStart = 0; enum lEnd = index; enum rStart = 0; enum rEnd = index; } else { enum previousIndex = attributed_parameters[i - 1].index; enum lStart = previousIndex + 1; enum lEnd = index; enum rStart = previousIndex + 1 - i; enum rEnd = index - i; } static if (lStart != lEnd) { input[lStart..lEnd] = args[rStart..rEnd]; } // during last iteration cycle remaining tail is initialised // too (if any) static if ((i == input_attributes.length - 1) && (index != input.length - 1)) { input[(index + 1)..$] = args[(index - i)..$]; } input[index] = uda.evaluator(m_storedArgs); } // handle degraded case with no attributes separately static if (!input_attributes.length) { input[] = args[]; } return dg(input); } /** `prepareInputAndCall` overload that operates on argument tuple that exactly matches attributed function argument list and thus gets updated by attached function instead of being merged with it */ ReturnType!Function prepareInputAndCall(T...)(FunctionDg dg, T args) if (Compare!(Group!T, Group!(ParameterTypeTuple!Function))) { alias attributed_parameters = AttributedParameterMetadata!Function; foreach (i, uda; input_attributes) { enum index = attributed_parameters[i].index; args[index] = uda.evaluator(m_storedArgs); } return dg(args); } } } /// example unittest { import std.conv; static string evaluator(string left, string right) { return left ~ right; } // all attribute function must accept same stored parameters static int modificator(int result, string unused1, string unused2) { return result * 2; } @before!evaluator("a") @before!evaluator("c") @after!modificator() static int sum(string a, int b, string c, double d) { return to!int(a) + to!int(b) + to!int(c) + to!int(d); } // ("10", "20") - stored arguments for evaluator() auto funcattr = createAttributedFunction!sum("10", "20"); // `b` and `d` are unattributed, thus `42` and `13.5` will be // used as their values int result = funcattr(42, 13.5); assert(result == (1020 + 42 + 1020 + to!int(13.5)) * 2); } // testing other prepareInputAndCall overload unittest { import std.conv; static string evaluator(string left, string right) { return left ~ right; } // all attribute function must accept same stored parameters static int modificator(int result, string unused1, string unused2) { return result * 2; } @before!evaluator("a") @before!evaluator("c") @after!modificator() static int sum(string a, int b, string c, double d) { return to!int(a) + to!int(b) + to!int(c) + to!int(d); } auto funcattr = createAttributedFunction!sum("10", "20"); // `a` and `c` are expected to be simply overwritten int result = funcattr("1000", 42, "1000", 13.5); assert(result == (1020 + 42 + 1020 + to!int(13.5)) * 2); } /** Syntax sugar in top of AttributedFunction Creates AttributedFunction with stored argument types that match `T` and stores `args` there before returning. */ auto createAttributedFunction(alias Function, T...)(T args) { import vibe.internal.meta.typetuple : Group; AttributedFunction!(Function, Group!T) result; result.storeArgs(args); return result; } /// unittest { void foo() {} auto funcattr = createAttributedFunction!foo(1, "2", 3.0); import std.typecons : tuple; assert (tuple(funcattr.m_storedArgs) == tuple(1, "2", 3.0)); } vibe.d-0.8.2/utils/vibe/internal/meta/traits.d000066400000000000000000000304671324361747700212220ustar00rootroot00000000000000/** Extensions to `std.traits` module of Phobos. Some may eventually make it into Phobos, some are dirty hacks that work only for vibe.d Copyright: © 2012 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig, Михаил Страшун */ module vibe.internal.meta.traits; import vibe.internal.meta.typetuple; /** Checks if given type is a getter function type Returns: `true` if argument is a getter */ template isPropertyGetter(T...) if (T.length == 1) { import std.traits : functionAttributes, FunctionAttribute, ReturnType, isSomeFunction; static if (isSomeFunction!(T[0])) { enum isPropertyGetter = (functionAttributes!(T[0]) & FunctionAttribute.property) != 0 && !is(ReturnType!T == void); } else enum isPropertyGetter = false; } /// unittest { interface Test { @property int getter(); @property void setter(int); int simple(); } static assert(isPropertyGetter!(typeof(&Test.getter))); static assert(!isPropertyGetter!(typeof(&Test.setter))); static assert(!isPropertyGetter!(typeof(&Test.simple))); static assert(!isPropertyGetter!int); } /** Checks if given type is a setter function type Returns: `true` if argument is a setter */ template isPropertySetter(T...) if (T.length == 1) { import std.traits : functionAttributes, FunctionAttribute, ReturnType, isSomeFunction; static if (isSomeFunction!(T[0])) { enum isPropertySetter = (functionAttributes!(T) & FunctionAttribute.property) != 0 && is(ReturnType!(T[0]) == void); } else enum isPropertySetter = false; } /// unittest { interface Test { @property int getter(); @property void setter(int); int simple(); } static assert(isPropertySetter!(typeof(&Test.setter))); static assert(!isPropertySetter!(typeof(&Test.getter))); static assert(!isPropertySetter!(typeof(&Test.simple))); static assert(!isPropertySetter!int); } /** Deduces single base interface for a type. Multiple interfaces will result in compile-time error. Params: T = interface or class type Returns: T if it is an interface. If T is a class, interface it implements. */ template baseInterface(T) if (is(T == interface) || is(T == class)) { import std.traits : InterfacesTuple; static if (is(T == interface)) { alias baseInterface = T; } else { alias Ifaces = InterfacesTuple!T; static assert ( Ifaces.length == 1, "Type must be either provided as an interface or implement only one interface" ); alias baseInterface = Ifaces[0]; } } /// unittest { interface I1 { } class A : I1 { } interface I2 { } class B : I1, I2 { } static assert (is(baseInterface!I1 == I1)); static assert (is(baseInterface!A == I1)); static assert (!is(typeof(baseInterface!B))); } /** Determins if a member is a public, non-static data field. */ template isRWPlainField(T, string M) { static if (!isRWField!(T, M)) enum isRWPlainField = false; else { //pragma(msg, T.stringof~"."~M~":"~typeof(__traits(getMember, T, M)).stringof); enum isRWPlainField = __traits(compiles, *(&__traits(getMember, Tgen!T(), M)) = *(&__traits(getMember, Tgen!T(), M))); } } /** Determines if a member is a public, non-static, de-facto data field. In addition to plain data fields, R/W properties are also accepted. */ template isRWField(T, string M) { import std.traits; import std.typetuple; static void testAssign()() { T t = *(cast(T*)0); __traits(getMember, t, M) = __traits(getMember, t, M); } // reject type aliases static if (is(TypeTuple!(__traits(getMember, T, M)))) enum isRWField = false; // reject non-public members else static if (!isPublicMember!(T, M)) enum isRWField = false; // reject static members else static if (!isNonStaticMember!(T, M)) enum isRWField = false; // reject non-typed members else static if (!is(typeof(__traits(getMember, T, M)))) enum isRWField = false; // reject void typed members (includes templates) else static if (is(typeof(__traits(getMember, T, M)) == void)) enum isRWField = false; // reject non-assignable members else static if (!__traits(compiles, testAssign!()())) enum isRWField = false; else static if (anySatisfy!(isSomeFunction, __traits(getMember, T, M))) { // If M is a function, reject if not @property or returns by ref private enum FA = functionAttributes!(__traits(getMember, T, M)); enum isRWField = (FA & FunctionAttribute.property) != 0; } else { enum isRWField = true; } } unittest { import std.algorithm; struct S { alias a = int; // alias int i; // plain RW field enum j = 42; // manifest constant static int k = 42; // static field private int privateJ; // private RW field this(Args...)(Args args) {} // read-write property (OK) @property int p1() { return privateJ; } @property void p1(int j) { privateJ = j; } // read-only property (NO) @property int p2() { return privateJ; } // write-only property (NO) @property void p3(int value) { privateJ = value; } // ref returning property (OK) @property ref int p4() { return i; } // parameter-less template property (OK) @property ref int p5()() { return i; } // not treated as a property by DMD, so not a field @property int p6()() { return privateJ; } @property void p6(int j)() { privateJ = j; } static @property int p7() { return k; } static @property void p7(int value) { k = value; } ref int f1() { return i; } // ref returning function (no field) int f2(Args...)(Args args) { return i; } ref int f3(Args...)(Args args) { return i; } void someMethod() {} ref int someTempl()() { return i; } } enum plainFields = ["i"]; enum fields = ["i", "p1", "p4", "p5"]; foreach (mem; __traits(allMembers, S)) { static if (isRWField!(S, mem)) static assert(fields.canFind(mem), mem~" detected as field."); else static assert(!fields.canFind(mem), mem~" not detected as field."); static if (isRWPlainField!(S, mem)) static assert(plainFields.canFind(mem), mem~" not detected as plain field."); else static assert(!plainFields.canFind(mem), mem~" not detected as plain field."); } } package T Tgen(T)(){ return T.init; } /** Tests if the protection of a member is public. */ template isPublicMember(T, string M) { import std.algorithm, std.typetuple : TypeTuple; static if (!__traits(compiles, TypeTuple!(__traits(getMember, T, M)))) enum isPublicMember = false; else { alias MEM = TypeTuple!(__traits(getMember, T, M)); static if (__traits(compiles, __traits(getProtection, MEM))) enum isPublicMember = __traits(getProtection, MEM).among("public", "export"); else enum isPublicMember = true; } } unittest { class C { int a; export int b; protected int c; private int d; package int e; void f() {} static void g() {} private void h() {} private static void i() {} } static assert (isPublicMember!(C, "a")); static assert (isPublicMember!(C, "b")); static assert (!isPublicMember!(C, "c")); static assert (!isPublicMember!(C, "d")); static assert (!isPublicMember!(C, "e")); static assert (isPublicMember!(C, "f")); static assert (isPublicMember!(C, "g")); static assert (!isPublicMember!(C, "h")); static assert (!isPublicMember!(C, "i")); struct S { int a; export int b; private int d; package int e; } static assert (isPublicMember!(S, "a")); static assert (isPublicMember!(S, "b")); static assert (!isPublicMember!(S, "d")); static assert (!isPublicMember!(S, "e")); S s; s.a = 21; assert(s.a == 21); } /** Tests if a member requires $(D this) to be used. */ template isNonStaticMember(T, string M) { import std.typetuple; import std.traits; alias MF = TypeTuple!(__traits(getMember, T, M)); static if (M.length == 0) { enum isNonStaticMember = false; } else static if (anySatisfy!(isSomeFunction, MF)) { enum isNonStaticMember = !__traits(isStaticFunction, MF); } else { enum isNonStaticMember = !__traits(compiles, (){ auto x = __traits(getMember, T, M); }()); } } unittest { // normal fields struct S { int a; static int b; enum c = 42; void f(); static void g(); ref int h() { return a; } static ref int i() { return b; } } static assert(isNonStaticMember!(S, "a")); static assert(!isNonStaticMember!(S, "b")); static assert(!isNonStaticMember!(S, "c")); static assert(isNonStaticMember!(S, "f")); static assert(!isNonStaticMember!(S, "g")); static assert(isNonStaticMember!(S, "h")); static assert(!isNonStaticMember!(S, "i")); } unittest { // tuple fields struct S(T...) { T a; static T b; } alias T = S!(int, float); auto p = T.b; static assert(isNonStaticMember!(T, "a")); static assert(!isNonStaticMember!(T, "b")); alias U = S!(); static assert(!isNonStaticMember!(U, "a")); static assert(!isNonStaticMember!(U, "b")); } /** Tests if a Group of types is implicitly convertible to a Group of target types. */ bool areConvertibleTo(alias TYPES, alias TARGET_TYPES)() if (isGroup!TYPES && isGroup!TARGET_TYPES) { static assert(TYPES.expand.length == TARGET_TYPES.expand.length); foreach (i, V; TYPES.expand) if (!is(V : TARGET_TYPES.expand[i])) return false; return true; } /// Test if the type $(D DG) is a correct delegate for an opApply where the /// key/index is of type $(D TKEY) and the value of type $(D TVALUE). template isOpApplyDg(DG, TKEY, TVALUE) { import std.traits; static if (is(DG == delegate) && is(ReturnType!DG : int)) { private alias PTT = ParameterTypeTuple!(DG); private alias PSCT = ParameterStorageClassTuple!(DG); private alias STC = ParameterStorageClass; // Just a value static if (PTT.length == 1) { enum isOpApplyDg = (is(PTT[0] == TVALUE)); } else static if (PTT.length == 2) { enum isOpApplyDg = (is(PTT[0] == TKEY)) && (is(PTT[1] == TVALUE)); } else enum isOpApplyDg = false; } else { enum isOpApplyDg = false; } } unittest { static assert(isOpApplyDg!(int delegate(int, string), int, string)); static assert(isOpApplyDg!(int delegate(ref int, ref string), int, string)); static assert(isOpApplyDg!(int delegate(int, ref string), int, string)); static assert(isOpApplyDg!(int delegate(ref int, string), int, string)); } // Synchronized statements are logically nothrow but dmd still marks them as throwing. // DMD#4115, Druntime#1013, Druntime#1021, Phobos#2704 import core.sync.mutex : Mutex; enum synchronizedIsNothrow = __traits(compiles, (Mutex m) nothrow { synchronized(m) {} }); template StripHeadConst(T) { static if (is(T == const(F), F)) alias StripHeadConst = StripHeadConst!F; else static if (is(T == immutable(F), F)) alias StripHeadConst = StripHeadConst!F; else static if (is(T == inout(F), F)) alias StripHeadConst = StripHeadConst!F; else alias StripHeadConst = T; } unittest { static assert(is(StripHeadConst!(int) == int)); static assert(is(StripHeadConst!(const(int)) == int)); static assert(is(StripHeadConst!(immutable(int)) == int)); static assert(is(StripHeadConst!(const(immutable(int))) == int)); static assert(is(StripHeadConst!(const(int[])) == const(int)[])); } template derivedMethod(C, alias method) { import std.traits : FunctionTypeOf, MemberFunctionsTuple, ParameterTypeTuple; import std.meta : AliasSeq; enum fname = __traits(identifier, method); alias overloads = MemberFunctionsTuple!(C, fname); alias PTypes = ParameterTypeTuple!method; template impl(size_t i) { static if (i >= overloads.length) alias impl = AliasSeq!(); else { alias FT = FunctionTypeOf!(overloads[i]); static if (__traits(compiles, FT(PTypes.init))) alias impl = overloads[i]; else alias impl = impl!(i+1); } } alias derivedMethod = impl!0; } template RecursiveFunctionAttributes(alias func) { import std.meta : AliasSeq, staticMap; import std.traits : BaseTypeTuple; static if (is(AliasSeq!(__traits(parent, func))[0])) { alias C = AliasSeq!(__traits(parent, func))[0]; template rimpl(T) { alias DF = derivedMethod!(T, func); static if (AliasSeq!(DF).length > 0) alias rimpl = RecursiveFunctionAttributes!DF; else alias rimpl = AliasSeq!(); } alias RecursiveFunctionAttributes = AliasSeq!( __traits(getAttributes, func), staticMap!(rimpl, BaseTypeTuple!C) ); } else { alias RecursiveFunctionAttributes = AliasSeq!(__traits(getAttributes, func)); } } unittest { interface I { @(1) void test(); } interface J { @(4) void test(int); } class C : I, J { override @(2) void test() {} override void test(int) {} } class D : C { override @(3) void test() {} } static assert([RecursiveFunctionAttributes!(D.test)] == [3, 2, 1]); } vibe.d-0.8.2/utils/vibe/internal/meta/typetuple.d000066400000000000000000000056061324361747700217440ustar00rootroot00000000000000/** Additions to std.typetuple pending for inclusion into Phobos. Copyright: © 2013 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Михаил Страшун */ module vibe.internal.meta.typetuple; import std.typetuple; import std.traits; /** TypeTuple which does not auto-expand. Useful when you need to multiple several type tuples as different template argument list parameters, without merging those. */ template Group(T...) { alias expand = T; } /// unittest { alias group = Group!(int, double, string); static assert (!is(typeof(group.length))); static assert (group.expand.length == 3); static assert (is(group.expand[1] == double)); } /** */ template isGroup(T...) { static if (T.length != 1) enum isGroup = false; else enum isGroup = !is(T[0]) && is(typeof(T[0]) == void) // does not evaluate to something && is(typeof(T[0].expand.length) : size_t) // expands to something with length && !is(typeof(&(T[0].expand))); // expands to not addressable } version (unittest) // NOTE: GDC complains about template definitions in unittest blocks { alias group = Group!(int, double, string); alias group2 = Group!(); template Fake(T...) { int[] expand; } alias fake = Fake!(int, double, string); alias fake2 = TypeTuple!(int, double, string); static assert (isGroup!group); static assert (isGroup!group2); static assert (!isGroup!fake); static assert (!isGroup!fake2); } /* Copied from Phobos as it is private there. */ private template isSame(ab...) if (ab.length == 2) { static if (is(ab[0]) && is(ab[1])) { enum isSame = is(ab[0] == ab[1]); } else static if (!is(ab[0]) && !is(ab[1]) && is(typeof(ab[0] == ab[1]) == bool) && (ab[0] == ab[1])) { static if (!__traits(compiles, &ab[0]) || !__traits(compiles, &ab[1])) enum isSame = (ab[0] == ab[1]); else enum isSame = __traits(isSame, ab[0], ab[1]); } else { enum isSame = __traits(isSame, ab[0], ab[1]); } } /** Compares two groups for element identity Params: Group1, Group2 = any instances of `Group` Returns: `true` if each element of Group1 is identical to the one of Group2 at the same index */ template Compare(alias Group1, alias Group2) if (isGroup!Group1 && isGroup!Group2) { private template implementation(size_t index) { static if (Group1.expand.length != Group2.expand.length) enum implementation = false; else static if (index >= Group1.expand.length) enum implementation = true; else static if (!isSame!(Group1.expand[index], Group2.expand[index])) enum implementation = false; else enum implementation = implementation!(index+1); } enum Compare = implementation!0; } /// unittest { alias one = Group!(int, double); alias two = Group!(int, double); alias three = Group!(double, int); static assert (Compare!(one, two)); static assert (!Compare!(one, three)); } vibe.d-0.8.2/utils/vibe/internal/meta/uda.d000066400000000000000000000170621324361747700204610ustar00rootroot00000000000000/** Utility templates that help working with User Defined Attributes Copyright: © 2013 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig, Михаил Страшун */ module vibe.internal.meta.uda; //import vibe.internal.meta.traits; /** Small convenience wrapper to find and extract certain UDA from given type. Will stop on first element which is of required type. Params: UDA = type or template to search for in UDA list Symbol = symbol to query for UDA's allow_types = if set to `false` considers attached `UDA` types an error (only accepts instances/values) Returns: aggregated search result struct with 3 field. `value` aliases found UDA. `found` is boolean flag for having a valid find. `index` is integer index in attribute list this UDA was found at. */ template findFirstUDA(alias UDA, alias Symbol, bool allow_types = false) if (!is(UDA)) { enum findFirstUDA = findNextUDA!(UDA, Symbol, 0, allow_types); } /// Ditto template findFirstUDA(UDA, alias Symbol, bool allow_types = false) { enum findFirstUDA = findNextUDA!(UDA, Symbol, 0, allow_types); } private struct UdaSearchResult(alias UDA) { alias value = UDA; bool found = false; long index = -1; } /** Small convenience wrapper to find and extract certain UDA from given type. Will start at the given index and stop on the next element which is of required type. Params: UDA = type or template to search for in UDA list Symbol = symbol to query for UDA's idx = 0-based index to start at. Should be positive, and under the total number of attributes. allow_types = if set to `false` considers attached `UDA` types an error (only accepts instances/values) Returns: aggregated search result struct with 3 field. `value` aliases found UDA. `found` is boolean flag for having a valid find. `index` is integer index in attribute list this UDA was found at. */ template findNextUDA(alias UDA, alias Symbol, long idx, bool allow_types = false) if (!is(UDA)) { import std.traits : isInstanceOf; import std.typetuple : TypeTuple; private alias udaTuple = TypeTuple!(__traits(getAttributes, Symbol)); static assert(idx >= 0, "Index given to findNextUDA can't be negative"); static assert(idx <= udaTuple.length, "Index given to findNextUDA is above the number of attribute"); public template extract(size_t index, list...) { static if (!list.length) enum extract = UdaSearchResult!(null)(false, -1); else { static if (is(list[0])) { static if (is(UDA) && is(list[0] == UDA) || !is(UDA) && isInstanceOf!(UDA, list[0])) { static assert (allow_types, "findNextUDA is designed to look up values, not types"); enum extract = UdaSearchResult!(list[0])(true, index); } else enum extract = extract!(index + 1, list[1..$]); } else { static if (is(UDA) && is(typeof(list[0]) == UDA) || !is(UDA) && isInstanceOf!(UDA, typeof(list[0]))) { import vibe.internal.meta.traits : isPropertyGetter; static if (isPropertyGetter!(list[0])) { enum value = list[0]; enum extract = UdaSearchResult!(value)(true, index); } else enum extract = UdaSearchResult!(list[0])(true, index); } else enum extract = extract!(index + 1, list[1..$]); } } } enum findNextUDA = extract!(idx, udaTuple[idx .. $]); } /// ditto template findNextUDA(UDA, alias Symbol, long idx, bool allow_types = false) { import std.traits : isInstanceOf; import std.typetuple : TypeTuple; private alias udaTuple = TypeTuple!(__traits(getAttributes, Symbol)); static assert(idx >= 0, "Index given to findNextUDA can't be negative"); static assert(idx <= udaTuple.length, "Index given to findNextUDA is above the number of attribute"); public template extract(size_t index, list...) { static if (!list.length) enum extract = UdaSearchResult!(null)(false, -1); else { static if (is(list[0])) { static if (is(list[0] == UDA)) { static assert (allow_types, "findNextUDA is designed to look up values, not types"); enum extract = UdaSearchResult!(list[0])(true, index); } else enum extract = extract!(index + 1, list[1..$]); } else { static if (is(typeof(list[0]) == UDA)) { import vibe.internal.meta.traits : isPropertyGetter; static if (isPropertyGetter!(list[0])) { enum value = list[0]; enum extract = UdaSearchResult!(value)(true, index); } else enum extract = UdaSearchResult!(list[0])(true, index); } else enum extract = extract!(index + 1, list[1..$]); } } } enum findNextUDA = extract!(idx, udaTuple[idx .. $]); } /// unittest { struct Attribute { int x; } @("something", Attribute(42), Attribute(41)) void symbol(); enum result0 = findNextUDA!(string, symbol, 0); static assert (result0.found); static assert (result0.index == 0); static assert (result0.value == "something"); enum result1 = findNextUDA!(Attribute, symbol, 0); static assert (result1.found); static assert (result1.index == 1); static assert (result1.value == Attribute(42)); enum result2 = findNextUDA!(int, symbol, 0); static assert (!result2.found); enum result3 = findNextUDA!(Attribute, symbol, result1.index + 1); static assert (result3.found); static assert (result3.index == 2); static assert (result3.value == Attribute(41)); } unittest { struct Attribute { int x; } @(Attribute) void symbol(); static assert (!is(findNextUDA!(Attribute, symbol, 0))); enum result0 = findNextUDA!(Attribute, symbol, 0, true); static assert (result0.found); static assert (result0.index == 0); static assert (is(result0.value == Attribute)); } unittest { struct Attribute { int x; } enum Dummy; @property static Attribute getter() { return Attribute(42); } @Dummy @getter void symbol(); enum result0 = findNextUDA!(Attribute, symbol, 0); static assert (result0.found); static assert (result0.index == 1); static assert (result0.value == Attribute(42)); } /// Eager version of findNextUDA that represent all instances of UDA in a Tuple. /// If one of the attribute is a type instead of an instance, compilation will fail. template UDATuple(alias UDA, alias Sym) { import std.typetuple : TypeTuple; private template extract(size_t maxSize, Founds...) { private alias LastFound = Founds[$ - 1]; // No more to find static if (!LastFound.found) enum extract = Founds[0 .. $ - 1]; else { // For ease of use, this is a Tuple of UDA, not a tuple of UdaSearchResult!(...) private alias Result = TypeTuple!(Founds[0 .. $ - 1], LastFound.value); // We're at the last parameter static if (LastFound.index == maxSize) enum extract = Result; else enum extract = extract!(maxSize, Result, findNextUDA!(UDA, Sym, LastFound.index + 1)); } } private enum maxIndex = TypeTuple!(__traits(getAttributes, Sym)).length; enum UDATuple = extract!(maxIndex, findNextUDA!(UDA, Sym, 0)); } unittest { import std.typetuple : TypeTuple; struct Attribute { int x; } enum Dummy; @(Dummy, Attribute(21), Dummy, Attribute(42), Attribute(84)) void symbol() {} @(Dummy, Attribute(21), Dummy, Attribute(42), Attribute) void wrong() {} alias Cmp = TypeTuple!(Attribute(21), Attribute(42), Attribute(84)); static assert(Cmp == UDATuple!(Attribute, symbol)); static assert(!is(UDATuple!(Attribute, wrong))); } /// Avoid repeating the same error message again and again. /// ---- /// if (!__ctfe) /// assert(0, onlyAsUda!func); /// ---- template onlyAsUda(string from /*= __FUNCTION__*/) { // With default param, DMD think expression is void, even when writing 'enum string onlyAsUda = ...' enum onlyAsUda = from~" must only be used as an attribute - not called as a runtime function."; } vibe.d-0.8.2/utils/vibe/internal/rangeutil.d000066400000000000000000000020431324361747700207450ustar00rootroot00000000000000module vibe.internal.rangeutil; struct RangeCounter { @safe: import std.utf; long* length; this(long* _captureLength) { length = _captureLength; } void put(char ch) { (*length)++; } void put(string str) { *length += str.length; } void put(dchar ch) { *length += codeLength!char(ch); } void put(dstring str) { foreach (ch; str) put(ch); } } @safe unittest { static long writeLength(ARGS...)(ARGS args) { long len = 0; auto rng = RangeCounter(() @trusted { return &len; } ()); foreach (a; args) rng.put(a); return len; } assert(writeLength("hello", ' ', "world") == "hello world".length); assert(writeLength("h\u00E4llo", ' ', "world") == "h\u00E4llo world".length); assert(writeLength("hello", '\u00E4', "world") == "hello\u00E4world".length); assert(writeLength("h\u00E4llo", ' ', "world") == "h\u00E4llo world".length); assert(writeLength("h\u1000llo", '\u1000', "world") == "h\u1000llo\u1000world".length); auto test = "häl"; assert(test.length == 4); assert(writeLength(test[0], test[1], test[2], test[3]) == test.length); } vibe.d-0.8.2/utils/vibe/internal/utilallocator.d000066400000000000000000000123571324361747700216420ustar00rootroot00000000000000module vibe.internal.utilallocator; public import std.experimental.allocator : allocatorObject, CAllocatorImpl, dispose, expandArray, IAllocator, make, makeArray, shrinkArray, theAllocator; public import std.experimental.allocator.mallocator; public import std.experimental.allocator.building_blocks.affix_allocator; // NOTE: this needs to be used instead of theAllocator due to Phobos issue 17564 @property IAllocator vibeThreadAllocator() @safe nothrow @nogc { import std.experimental.allocator.gc_allocator; static IAllocator s_threadAllocator; if (!s_threadAllocator) s_threadAllocator = () @trusted { return allocatorObject(GCAllocator.instance); } (); return s_threadAllocator; } final class RegionListAllocator(Allocator, bool leak = false) : IAllocator { import vibe.internal.memory_legacy : AllocSize, alignedSize; import std.algorithm.comparison : min, max; import std.conv : emplace; static if (__VERSION__ < 2072) import std.experimental.allocator.common : Ternary; else import std.typecons : Ternary; static struct Pool { Pool* next; void[] data; void[] remaining; } private { Allocator m_baseAllocator; Pool* m_freePools; Pool* m_fullPools; size_t m_poolSize; } this(size_t pool_size, Allocator base) @safe nothrow { m_poolSize = pool_size; m_baseAllocator = base; } ~this() { deallocateAll(); } override @property uint alignment() const { return 0x10; } @property size_t totalSize() @safe nothrow @nogc { size_t amt = 0; for (auto p = m_fullPools; p; p = p.next) amt += p.data.length; for (auto p = m_freePools; p; p = p.next) amt += p.data.length; return amt; } @property size_t allocatedSize() @safe nothrow @nogc { size_t amt = 0; for (auto p = m_fullPools; p; p = p.next) amt += p.data.length; for (auto p = m_freePools; p; p = p.next) amt += p.data.length - p.remaining.length; return amt; } override void[] allocate(size_t sz, TypeInfo ti = null) { auto aligned_sz = alignedSize(sz); Pool* pprev = null; Pool* p = cast(Pool*)m_freePools; while( p && p.remaining.length < aligned_sz ){ pprev = p; p = p.next; } if( !p ){ auto pmem = m_baseAllocator.allocate(AllocSize!Pool); p = emplace!Pool(cast(Pool*)pmem.ptr); p.data = m_baseAllocator.allocate(max(aligned_sz, m_poolSize)); p.remaining = p.data; p.next = cast(Pool*)m_freePools; m_freePools = p; pprev = null; } auto ret = p.remaining[0 .. aligned_sz]; p.remaining = p.remaining[aligned_sz .. $]; if( !p.remaining.length ){ if( pprev ){ pprev.next = p.next; } else { m_freePools = p.next; } p.next = cast(Pool*)m_fullPools; m_fullPools = p; } return ret[0 .. sz]; } override void[] alignedAllocate(size_t n, uint a) { return null; } override bool alignedReallocate(ref void[] b, size_t size, uint alignment) { return false; } override void[] allocateAll() { return null; } override @property Ternary empty() const { return m_fullPools !is null ? Ternary.no : Ternary.yes; } override size_t goodAllocSize(size_t s) { return alignedSize(s); } import std.traits : Parameters; static if (is(Parameters!(IAllocator.resolveInternalPointer)[0] == const(void*))) { override Ternary resolveInternalPointer(const void* p, ref void[] result) { return Ternary.unknown; } } else { override Ternary resolveInternalPointer(void* p, ref void[] result) { return Ternary.unknown; } } static if (is(Parameters!(IAllocator.owns)[0] == const(void[]))) { override Ternary owns(const void[] b) { return Ternary.unknown; } } else { override Ternary owns(void[] b) { return Ternary.unknown; } } override bool reallocate(ref void[] arr, size_t newsize) { return expand(arr, newsize); } override bool expand(ref void[] arr, size_t newsize) { auto aligned_sz = alignedSize(arr.length); auto aligned_newsz = alignedSize(newsize); if (aligned_newsz <= aligned_sz) { arr = arr[0 .. newsize]; // TODO: back up remaining return true; } auto pool = m_freePools; bool last_in_pool = pool && arr.ptr+aligned_sz == pool.remaining.ptr; if (last_in_pool && pool.remaining.length+aligned_sz >= aligned_newsz) { pool.remaining = pool.remaining[aligned_newsz-aligned_sz .. $]; arr = arr.ptr[0 .. aligned_newsz]; assert(arr.ptr+arr.length == pool.remaining.ptr, "Last block does not align with the remaining space!?"); arr = arr[0 .. newsize]; } else { auto ret = allocate(newsize); assert(ret.ptr >= arr.ptr+aligned_sz || ret.ptr+ret.length <= arr.ptr, "New block overlaps old one!?"); ret[0 .. min(arr.length, newsize)] = arr[0 .. min(arr.length, newsize)]; arr = ret; } return true; } override bool deallocate(void[] mem) { return false; } override bool deallocateAll() { // put all full Pools into the free pools list for (Pool* p = cast(Pool*)m_fullPools, pnext; p; p = pnext) { pnext = p.next; p.next = cast(Pool*)m_freePools; m_freePools = cast(Pool*)p; } // free up all pools for (Pool* p = cast(Pool*)m_freePools; p; p = p.next) p.remaining = p.data; Pool* pnext; for (auto p = cast(Pool*)m_freePools; p; p = pnext) { pnext = p.next; static if (!leak) { m_baseAllocator.deallocate(p.data); m_baseAllocator.deallocate((cast(void*)p)[0 .. AllocSize!Pool]); } } m_freePools = null; return true; } } vibe.d-0.8.2/utils/vibe/internal/win32.d000066400000000000000000000121001324361747700177100ustar00rootroot00000000000000/// [internal] module vibe.internal.win32; version(Windows): public import core.sys.windows.windows; public import core.sys.windows.winsock2; extern(System) nothrow: BOOL GetFileSizeEx(HANDLE hFile, long *lpFileSize); enum { FD_READ = 0x0001, FD_WRITE = 0x0002, FD_OOB = 0x0004, FD_ACCEPT = 0x0008, FD_CONNECT = 0x0010, FD_CLOSE = 0x0020, FD_QOS = 0x0040, FD_GROUP_QOS = 0x0080, FD_ROUTING_INTERFACE_CHANGE = 0x0100, FD_ADDRESS_LIST_CHANGE = 0x0200 } enum { WSA_FLAG_OVERLAPPED = 0x01 } enum { WSAPROTOCOL_LEN = 255, MAX_PROTOCOL_CHAIN = 7, } enum WSA_IO_PENDING = 997; struct WSAPROTOCOL_INFOW { DWORD dwServiceFlags1; DWORD dwServiceFlags2; DWORD dwServiceFlags3; DWORD dwServiceFlags4; DWORD dwProviderFlags; GUID ProviderId; DWORD dwCatalogEntryId; WSAPROTOCOLCHAIN ProtocolChain; int iVersion; int iAddressFamily; int iMaxSockAddr; int iMinSockAddr; int iSocketType; int iProtocol; int iProtocolMaxOffset; int iNetworkByteOrder; int iSecurityScheme; DWORD dwMessageSize; DWORD dwProviderReserved; WCHAR[WSAPROTOCOL_LEN+1] szProtocol; } struct WSAPROTOCOLCHAIN { int ChainLen; DWORD[MAX_PROTOCOL_CHAIN] ChainEntries; } struct WSABUF { size_t len; ubyte *buf; } struct ADDRINFOEXW { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; size_t ai_addrlen; LPCWSTR ai_canonname; sockaddr* ai_addr; void* ai_blob; size_t ai_bloblen; GUID* ai_provider; ADDRINFOEXW* ai_next; } struct ADDRINFOA { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; size_t ai_addrlen; LPSTR ai_canonname; sockaddr* ai_addr; ADDRINFOA* ai_next; } struct ADDRINFOW { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; size_t ai_addrlen; LPWSTR ai_canonname; sockaddr* ai_addr; ADDRINFOW* ai_next; } struct WSAPROTOCOL_INFO { DWORD dwServiceFlags1; DWORD dwServiceFlags2; DWORD dwServiceFlags3; DWORD dwServiceFlags4; DWORD dwProviderFlags; GUID ProviderId; DWORD dwCatalogEntryId; WSAPROTOCOLCHAIN ProtocolChain; int iVersion; int iAddressFamily; int iMaxSockAddr; int iMinSockAddr; int iSocketType; int iProtocol; int iProtocolMaxOffset; int iNetworkByteOrder; int iSecurityScheme; DWORD dwMessageSize; DWORD dwProviderReserved; CHAR[WSAPROTOCOL_LEN+1] szProtocol; } alias SOCKADDR = sockaddr; alias LPWSAOVERLAPPED_COMPLETION_ROUTINEX = void function(DWORD, DWORD, WSAOVERLAPPEDX*, DWORD); alias LPLOOKUPSERVICE_COMPLETION_ROUTINE = void function(DWORD, DWORD, WSAOVERLAPPEDX*); alias LPCONDITIONPROC = void*; alias LPTRANSMIT_FILE_BUFFERS = void*; SOCKET WSAAccept(SOCKET s, sockaddr *addr, INT* addrlen, LPCONDITIONPROC lpfnCondition, DWORD_PTR dwCallbackData); int WSAAsyncSelect(SOCKET s, HWND hWnd, uint wMsg, sizediff_t lEvent); SOCKET WSASocketW(int af, int type, int protocol, WSAPROTOCOL_INFOW *lpProtocolInfo, uint g, DWORD dwFlags); int WSARecv(SOCKET s, WSABUF* lpBuffers, DWORD dwBufferCount, DWORD* lpNumberOfBytesRecvd, DWORD* lpFlags, in WSAOVERLAPPEDX* lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINEX lpCompletionRoutine); int WSASend(SOCKET s, in WSABUF* lpBuffers, DWORD dwBufferCount, DWORD* lpNumberOfBytesSent, DWORD dwFlags, in WSAOVERLAPPEDX* lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINEX lpCompletionRoutine); int WSASendDisconnect(SOCKET s, WSABUF* lpOutboundDisconnectData); INT WSAStringToAddressA(in LPTSTR AddressString, INT AddressFamily, in WSAPROTOCOL_INFO* lpProtocolInfo, SOCKADDR* lpAddress, INT* lpAddressLength); INT WSAStringToAddressW(in LPWSTR AddressString, INT AddressFamily, in WSAPROTOCOL_INFOW* lpProtocolInfo, SOCKADDR* lpAddress, INT* lpAddressLength); INT WSAAddressToStringW(in SOCKADDR* lpsaAddress, DWORD dwAddressLength, in WSAPROTOCOL_INFO* lpProtocolInfo, LPWSTR lpszAddressString, DWORD* lpdwAddressStringLength); int GetAddrInfoExW(LPCWSTR pName, LPCWSTR pServiceName, DWORD dwNameSpace, GUID* lpNspId, const ADDRINFOEXW *pHints, ADDRINFOEXW **ppResult, timeval *timeout, WSAOVERLAPPEDX* lpOverlapped, LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, HANDLE* lpNameHandle); int GetAddrInfoW(LPCWSTR pName, LPCWSTR pServiceName, const ADDRINFOW *pHints, ADDRINFOW **ppResult); int getaddrinfo(LPCSTR pName, LPCSTR pServiceName, const ADDRINFOA *pHints, ADDRINFOA **ppResult); void FreeAddrInfoW(ADDRINFOW* pAddrInfo); void FreeAddrInfoExW(ADDRINFOEXW* pAddrInfo); void freeaddrinfo(ADDRINFOA* ai); BOOL TransmitFile(SOCKET hSocket, HANDLE hFile, DWORD nNumberOfBytesToWrite, DWORD nNumberOfBytesPerSend, OVERLAPPED* lpOverlapped, LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers, DWORD dwFlags); struct WSAOVERLAPPEDX { ULONG_PTR Internal; ULONG_PTR InternalHigh; union { struct { DWORD Offset; DWORD OffsetHigh; } PVOID Pointer; } HANDLE hEvent; } vibe.d-0.8.2/utils/vibe/utils/000077500000000000000000000000001324361747700161335ustar00rootroot00000000000000vibe.d-0.8.2/utils/vibe/utils/array.d000066400000000000000000000451661324361747700174320ustar00rootroot00000000000000/** Utility functions for array processing Copyright: © 2012 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.utils.array; import vibe.internal.utilallocator; import std.algorithm; import std.range : isInputRange, isOutputRange; import std.traits; static import std.utf; void removeFromArray(T)(ref T[] array, T item) { foreach( i; 0 .. array.length ) if( array[i] is item ){ removeFromArrayIdx(array, i); return; } } void removeFromArrayIdx(T)(ref T[] array, size_t idx) { foreach( j; idx+1 .. array.length) array[j-1] = array[j]; array.length = array.length-1; } enum AppenderResetMode { keepData, freeData, reuseData } struct AllocAppender(ArrayType : E[], E) { alias ElemType = Unqual!E; static assert(!hasIndirections!E && !hasElaborateDestructor!E); private { ElemType[] m_data; ElemType[] m_remaining; IAllocator m_alloc; bool m_allocatedBuffer = false; } this(IAllocator alloc, ElemType[] initial_buffer = null) { m_alloc = alloc; m_data = initial_buffer; m_remaining = initial_buffer; } @disable this(this); @property ArrayType data() { return cast(ArrayType)m_data[0 .. m_data.length - m_remaining.length]; } void reset(AppenderResetMode reset_mode = AppenderResetMode.keepData) { if (reset_mode == AppenderResetMode.keepData) m_data = null; else if (reset_mode == AppenderResetMode.freeData) { if (m_allocatedBuffer) m_alloc.deallocate(m_data); m_data = null; } m_remaining = m_data; } /** Grows the capacity of the internal buffer so that it can hold a minumum amount of elements. Params: amount = The minimum amount of elements that shall be appendable without triggering a re-allocation. */ void reserve(size_t amount) @trusted { size_t nelems = m_data.length - m_remaining.length; if (!m_data.length) { m_data = cast(ElemType[])m_alloc.allocate(amount*E.sizeof); m_remaining = m_data; m_allocatedBuffer = true; } if (m_remaining.length < amount) { debug { import std.digest.crc; auto checksum = crc32Of(m_data[0 .. nelems]); } if (m_allocatedBuffer) { void[] vdata = m_data; m_alloc.reallocate(vdata, (nelems+amount)*E.sizeof); m_data = () @trusted { return cast(ElemType[])vdata; } (); } else { auto newdata = cast(ElemType[])m_alloc.allocate((nelems+amount)*E.sizeof); newdata[0 .. nelems] = m_data[0 .. nelems]; m_data = newdata; m_allocatedBuffer = true; } debug assert(crc32Of(m_data[0 .. nelems]) == checksum); } m_remaining = m_data[nelems .. m_data.length]; } void put(E el) @safe { if( m_remaining.length == 0 ) grow(1); m_remaining[0] = el; m_remaining = m_remaining[1 .. $]; } void put(ArrayType arr) @safe { if (m_remaining.length < arr.length) grow(arr.length); m_remaining[0 .. arr.length] = arr[]; m_remaining = m_remaining[arr.length .. $]; } static if( !hasAliasing!E ){ void put(in ElemType[] arr) @trusted { put(cast(ArrayType)arr); } } static if( is(ElemType == char) ){ void put(dchar el) @safe { if( el < 128 ) put(cast(char)el); else { char[4] buf; auto len = std.utf.encode(buf, el); put(() @trusted { return cast(ArrayType)buf[0 .. len]; }()); } } } static if( is(ElemType == wchar) ){ void put(dchar el) @safe { if( el < 128 ) put(cast(wchar)el); else { wchar[3] buf; auto len = std.utf.encode(buf, el); put(() @trusted { return cast(ArrayType)buf[0 .. len]; } ()); } } } static if (!is(E == immutable) || !hasAliasing!E) { /** Appends a number of bytes in-place. The delegate will get the memory slice of the memory that follows the already written data. Use `reserve` to ensure that this slice has enough room. The delegate should overwrite as much of the slice as desired and then has to return the number of elements that should be appended (counting from the start of the slice). */ void append(scope size_t delegate(scope ElemType[] dst) @safe del) { auto n = del(m_remaining); assert(n <= m_remaining.length); m_remaining = m_remaining[n .. $]; } } void grow(size_t min_free) { if( !m_data.length && min_free < 16 ) min_free = 16; auto min_size = m_data.length + min_free - m_remaining.length; auto new_size = max(m_data.length, 16); while( new_size < min_size ) new_size = (new_size * 3) / 2; reserve(new_size - m_data.length + m_remaining.length); } } unittest { auto a = AllocAppender!string(theAllocator()); a.put("Hello"); a.put(' '); a.put("World"); assert(a.data == "Hello World"); a.reset(); assert(a.data == ""); } unittest { char[4] buf; auto a = AllocAppender!string(theAllocator(), buf); a.put("He"); assert(a.data == "He"); assert(a.data.ptr == buf.ptr); a.put("ll"); assert(a.data == "Hell"); assert(a.data.ptr == buf.ptr); a.put('o'); assert(a.data == "Hello"); assert(a.data.ptr != buf.ptr); } unittest { char[4] buf; auto a = AllocAppender!string(theAllocator(), buf); a.put("Hello"); assert(a.data == "Hello"); assert(a.data.ptr != buf.ptr); } unittest { auto app = AllocAppender!(int[])(theAllocator); app.reserve(2); app.append((scope mem) { assert(mem.length >= 2); mem[0] = 1; mem[1] = 2; return size_t(2); }); assert(app.data == [1, 2]); } unittest { auto app = AllocAppender!string(theAllocator); app.reserve(3); app.append((scope mem) { assert(mem.length >= 3); mem[0] = 'f'; mem[1] = 'o'; mem[2] = 'o'; return size_t(3); }); assert(app.data == "foo"); } struct FixedAppender(ArrayType : E[], size_t NELEM, E) { alias ElemType = Unqual!E; private { ElemType[NELEM] m_data; size_t m_fill; } void clear() { m_fill = 0; } void put(E el) { m_data[m_fill++] = el; } static if( is(ElemType == char) ){ void put(dchar el) { if( el < 128 ) put(cast(char)el); else { char[4] buf; auto len = std.utf.encode(buf, el); put(cast(ArrayType)buf[0 .. len]); } } } static if( is(ElemType == wchar) ){ void put(dchar el) { if( el < 128 ) put(cast(wchar)el); else { wchar[3] buf; auto len = std.utf.encode(buf, el); put(cast(ArrayType)buf[0 .. len]); } } } void put(ArrayType arr) { m_data[m_fill .. m_fill+arr.length] = (cast(ElemType[])arr)[]; m_fill += arr.length; } @property ArrayType data() { return cast(ArrayType)m_data[0 .. m_fill]; } static if (!is(E == immutable)) { void reset() { m_fill = 0; } } } /** TODO: clear ring buffer fields upon removal (to run struct destructors, if T is a struct) */ struct FixedRingBuffer(T, size_t N = 0, bool INITIALIZE = true) { private { static if( N > 0 ) { static if (INITIALIZE) T[N] m_buffer; else T[N] m_buffer = void; } else T[] m_buffer; size_t m_start = 0; size_t m_fill = 0; } static if( N == 0 ){ this(size_t capacity) { m_buffer = new T[capacity]; } } @property bool empty() const { return m_fill == 0; } @property bool full() const { return m_fill == m_buffer.length; } @property size_t length() const { return m_fill; } @property size_t freeSpace() const { return m_buffer.length - m_fill; } @property size_t capacity() const { return m_buffer.length; } static if( N == 0 ){ /// Resets the capacity to zero and explicitly frees the memory for the buffer. void dispose() { delete m_buffer; m_buffer = null; m_start = m_fill = 0; } @property void capacity(size_t new_size) { if( m_buffer.length ){ auto newbuffer = new T[new_size]; auto dst = newbuffer; auto newfill = min(m_fill, new_size); read(dst[0 .. newfill]); m_buffer = newbuffer; m_start = 0; m_fill = newfill; } else { m_buffer = new T[new_size]; } } } @property ref inout(T) front() inout { assert(!empty); return m_buffer[m_start]; } @property ref inout(T) back() inout { assert(!empty); return m_buffer[mod(m_start+m_fill-1)]; } void clear() { popFrontN(length); assert(m_fill == 0); m_start = 0; } void put()(T itm) { assert(m_fill < m_buffer.length); m_buffer[mod(m_start + m_fill++)] = itm; } void put(TC : T)(TC[] itms) { if( !itms.length ) return; assert(m_fill+itms.length <= m_buffer.length); if( mod(m_start+m_fill) >= mod(m_start+m_fill+itms.length) ){ size_t chunk1 = m_buffer.length - (m_start+m_fill); size_t chunk2 = itms.length - chunk1; m_buffer[m_start+m_fill .. m_buffer.length] = itms[0 .. chunk1]; m_buffer[0 .. chunk2] = itms[chunk1 .. $]; } else { m_buffer[mod(m_start+m_fill) .. mod(m_start+m_fill)+itms.length] = itms[]; } m_fill += itms.length; } void putN(size_t n) { assert(m_fill+n <= m_buffer.length); m_fill += n; } void popFront() { assert(!empty); m_start = mod(m_start+1); m_fill--; } void popFrontN(size_t n) { assert(length >= n); m_start = mod(m_start + n); m_fill -= n; } void popBack() { assert(!empty); m_fill--; } void popBackN(size_t n) { assert(length >= n); m_fill -= n; } void removeAt(Range r) { assert(r.m_buffer is m_buffer); if (r.m_start == m_start) { popFront(); return; } if( m_start + m_fill > m_buffer.length ){ assert(r.m_start > m_start && r.m_start < m_buffer.length || r.m_start < mod(m_start+m_fill)); if( r.m_start > m_start ){ foreach(i; r.m_start .. m_buffer.length-1) m_buffer[i] = m_buffer[i+1]; m_buffer[$-1] = m_buffer[0]; foreach(i; 0 .. mod(m_start + m_fill - 1)) m_buffer[i] = m_buffer[i+1]; } else { foreach(i; r.m_start .. mod(m_start + m_fill - 1)) m_buffer[i] = m_buffer[i+1]; } } else { assert(r.m_start >= m_start && r.m_start < m_start+m_fill); foreach(i; r.m_start .. m_start+m_fill-1) m_buffer[i] = m_buffer[i+1]; } m_fill--; destroy(m_buffer[mod(m_start+m_fill)]); // TODO: only call destroy for non-POD T } inout(T)[] peek() inout { return m_buffer[m_start .. min(m_start+m_fill, m_buffer.length)]; } T[] peekDst() { if( m_start + m_fill < m_buffer.length ) return m_buffer[m_start+m_fill .. $]; else return m_buffer[mod(m_start+m_fill) .. m_start]; } void read(T[] dst) { assert(dst.length <= length); if( !dst.length ) return; if( mod(m_start) >= mod(m_start+dst.length) ){ size_t chunk1 = m_buffer.length - m_start; size_t chunk2 = dst.length - chunk1; dst[0 .. chunk1] = m_buffer[m_start .. $]; dst[chunk1 .. $] = m_buffer[0 .. chunk2]; } else { dst[] = m_buffer[m_start .. m_start+dst.length]; } popFrontN(dst.length); } int opApply(scope int delegate(ref T itm) @safe del) { if( m_start+m_fill > m_buffer.length ){ foreach(i; m_start .. m_buffer.length) if( auto ret = del(m_buffer[i]) ) return ret; foreach(i; 0 .. mod(m_start+m_fill)) if( auto ret = del(m_buffer[i]) ) return ret; } else { foreach(i; m_start .. m_start+m_fill) if( auto ret = del(m_buffer[i]) ) return ret; } return 0; } /// iterate through elements with index int opApply(scope int delegate(size_t i, ref T itm) @safe del) { if( m_start+m_fill > m_buffer.length ){ foreach(i; m_start .. m_buffer.length) if( auto ret = del(i - m_start, m_buffer[i]) ) return ret; foreach(i; 0 .. mod(m_start+m_fill)) if( auto ret = del(i + m_buffer.length - m_start, m_buffer[i]) ) return ret; } else { foreach(i; m_start .. m_start+m_fill) if( auto ret = del(i - m_start, m_buffer[i]) ) return ret; } return 0; } ref inout(T) opIndex(size_t idx) inout { assert(idx < length); return m_buffer[mod(m_start+idx)]; } Range opSlice() { return Range(m_buffer, m_start, m_fill); } Range opSlice(size_t from, size_t to) { assert(from <= to); assert(to <= m_fill); return Range(m_buffer, mod(m_start+from), to-from); } size_t opDollar(size_t dim)() const if(dim == 0) { return length; } private size_t mod(size_t n) const { static if( N == 0 ){ /*static if(PotOnly){ return x & (m_buffer.length-1); } else {*/ return n % m_buffer.length; //} } else static if( ((N - 1) & N) == 0 ){ return n & (N - 1); } else return n % N; } static struct Range { private { T[] m_buffer; size_t m_start; size_t m_length; } private this(T[] buffer, size_t start, size_t length) { m_buffer = buffer; m_start = start; m_length = length; } @property bool empty() const { return m_length == 0; } @property inout(T) front() inout { assert(!empty); return m_buffer[m_start]; } void popFront() { assert(!empty); m_start++; m_length--; if( m_start >= m_buffer.length ) m_start = 0; } } } unittest { static assert(isInputRange!(FixedRingBuffer!int) && isOutputRange!(FixedRingBuffer!int, int)); FixedRingBuffer!(int, 5) buf; assert(buf.length == 0 && buf.freeSpace == 5); buf.put(1); // |1 . . . . assert(buf.length == 1 && buf.freeSpace == 4); buf.put(2); // |1 2 . . . assert(buf.length == 2 && buf.freeSpace == 3); buf.put(3); // |1 2 3 . . assert(buf.length == 3 && buf.freeSpace == 2); buf.put(4); // |1 2 3 4 . assert(buf.length == 4 && buf.freeSpace == 1); buf.put(5); // |1 2 3 4 5 assert(buf.length == 5 && buf.freeSpace == 0); assert(buf.front == 1); buf.popFront(); // .|2 3 4 5 assert(buf.front == 2); buf.popFrontN(2); // . . .|4 5 assert(buf.front == 4); assert(buf.length == 2 && buf.freeSpace == 3); buf.put([6, 7, 8]); // 6 7 8|4 5 assert(buf.length == 5 && buf.freeSpace == 0); int[5] dst; buf.read(dst); // . . .|. . assert(dst == [4, 5, 6, 7, 8]); assert(buf.length == 0 && buf.freeSpace == 5); buf.put([1, 2]); // . . .|1 2 assert(buf.length == 2 && buf.freeSpace == 3); buf.read(dst[0 .. 2]); //|. . . . . assert(dst[0 .. 2] == [1, 2]); buf.put([0, 0, 0, 1, 2]); //|0 0 0 1 2 buf.popFrontN(2); //. .|0 1 2 buf.put([3, 4]); // 3 4|0 1 2 foreach(i, item; buf) { assert(i == item); } assert(buf.front == 0); assert(buf.full); buf.removeAt(buf[0..1]); //4 .|1 2 3 foreach(i, item; buf) { assert(i == item - 1); } buf.put(5); // 4 5|1 2 3 buf.removeAt(buf[3..4]); // 5 .|1 2 3 assert(buf.front == 1); buf.popFront(); assert(buf.front == 2); buf.popFront(); assert(buf.front == 3); buf.popFront(); assert(buf.front == 5); buf.popFront(); assert(buf.empty); } struct ArraySet(Key) { import std.experimental.allocator : makeArray, expandArray, dispose; import std.experimental.allocator.building_blocks.affix_allocator : AffixAllocator; private { static if (__VERSION__ < 2074) { struct AW { // work around AffixAllocator limitations IAllocator alloc; alias alloc this; enum alignment = max(Key.alignof, int.alignof); void[] resolveInternalPointer(void* p) { void[] ret; alloc.resolveInternalPointer(p, ret); return ret; } } alias AllocatorType = AffixAllocator!(AW, int); } else { IAllocator AW(IAllocator a) { return a; } alias AllocatorType = AffixAllocator!(IAllocator, int); } Key[4] m_staticEntries; Key[] m_entries; AllocatorType m_allocator; } ~this() @trusted { static if (__VERSION__ <= 2071) scope (failure) assert(false); if (m_entries.ptr) { if (--allocator.prefix(m_entries) <= 0) { try allocator.dispose(m_entries); catch (Exception e) assert(false, e.msg); // should never happen } } } this(this) @trusted { static if (__VERSION__ <= 2071) scope (failure) assert(false); if (m_entries.ptr) { allocator.prefix(m_entries)++; } } @property ArraySet dup() { static if (__VERSION__ <= 2071) scope (failure) assert(false); ArraySet ret; ret.m_staticEntries = m_staticEntries; ret.m_allocator = m_allocator; if (m_entries.length) { Key[] duped; () @trusted { try duped = allocator.makeArray!(Key)(m_entries.length); catch (Exception e) assert(false, e.msg); if (!duped.length) assert(false, "Failed to allocate memory for duplicated "~ArraySet.stringof); allocator.prefix(duped) = 1; } (); duped[] = m_entries[]; ret.m_entries = duped; } return ret; } void setAllocator(IAllocator allocator) in { assert(m_entries.ptr is null, "Cannot set allocator after elements have been inserted."); } body { m_allocator = AllocatorType(AW(allocator)); } bool opBinaryRight(string op)(Key key) if (op == "in") { return contains(key); } int opApply(int delegate(ref Key) @safe del) { foreach (ref k; m_staticEntries) if (k != Key.init) if (auto ret = del(k)) return ret; foreach (ref k; m_entries) if (k != Key.init) if (auto ret = del(k)) return ret; return 0; } bool contains(Key key) const { foreach (ref k; m_staticEntries) if (k == key) return true; foreach (ref k; m_entries) if (k == key) return true; return false; } void insert(Key key) { if (contains(key)) return; foreach (ref k; m_staticEntries) if (k == Key.init) { k = key; return; } foreach (ref k; m_entries) if (k == Key.init) { k = key; return; } size_t oldlen = m_entries.length; () @trusted { try { if (!oldlen) { m_entries = allocator.makeArray!Key(64); assert(m_entries.length, "Failed to allocate memory for "~ArraySet.stringof); allocator.prefix(m_entries) = 1; } else { int oldrc = allocator.prefix(m_entries); if (!allocator.expandArray(m_entries, max(64, oldlen * 3 / 4))) assert(false, "Failed to allocate memory for "~ArraySet.stringof); allocator.prefix(m_entries) = oldrc; } } catch (Exception e) assert(false, e.msg); } (); m_entries[oldlen] = key; } void remove(Key key) { foreach (ref k; m_staticEntries) if (k == key) { k = Key.init; return; } foreach (ref k; m_entries) if (k == key) { k = Key.init; return; } } ref allocator() nothrow @trusted { try { static if (__VERSION__ < 2074) auto palloc = m_allocator.parent; else auto palloc = m_allocator._parent; if (!palloc) { assert(vibeThreadAllocator !is null, "No theAllocator set!?"); m_allocator = AllocatorType(AW(vibeThreadAllocator)); } } catch (Exception e) assert(false, e.msg); // should never throw return m_allocator; } } @safe nothrow unittest { import std.experimental.allocator : allocatorObject; import std.experimental.allocator.mallocator : Mallocator; ArraySet!int s; s.setAllocator(() @trusted { return Mallocator.instance.allocatorObject; } ()); ArraySet!int t; t = s; s.insert(1); s.insert(2); s.insert(3); s.insert(4); assert(s.contains(1)); assert(s.contains(2)); assert(s.contains(3)); assert(s.contains(4)); assert(!t.contains(1)); s.insert(5); assert(s.contains(5)); t = s; assert(t.contains(5)); assert(t.contains(1)); s.insert(6); assert(s.contains(6)); assert(t.contains(6)); s = ArraySet!int.init; assert(!s.contains(1)); assert(t.contains(1)); assert(t.contains(6)); s = t.dup; assert(s.contains(1)); assert(s.contains(6)); t.remove(1); assert(!t.contains(1)); assert(s.contains(1)); assert(t.contains(2)); assert(t.contains(6)); t.remove(6); assert(!t.contains(6)); assert(s.contains(6)); assert(t.contains(5)); } vibe.d-0.8.2/utils/vibe/utils/dictionarylist.d000066400000000000000000000261521324361747700213470ustar00rootroot00000000000000/** Defines a string based multi-map with conserved insertion order. Copyright: © 2012-2014 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.utils.dictionarylist; import vibe.utils.array : removeFromArrayIdx; import vibe.utils.string : icmp2; import std.exception : enforce; /** Behaves similar to $(D VALUE[string]) but the insertion order is not changed and multiple values per key are supported. This kind of map is used for MIME headers (e.g. for HTTP, see vibe.inet.message.InetHeaderMap), or for form data (vibe.inet.webform.FormFields). Note that the map can contain fields with the same key multiple times if addField is used for insertion. Insertion order is preserved. Note that despite case not being relevant for matching keyse, iterating over the map will yield the original case of the key that was put in. Insertion and lookup has O(n) complexity. */ struct DictionaryList(VALUE, bool case_sensitive = true, size_t NUM_STATIC_FIELDS = 32, bool USE_HASHSUM = false) { import std.typecons : Tuple; private { alias KeyValue = Tuple!(string, "key", ValueType, "value"); static struct Field { static if (USE_HASHSUM) uint keyCheckSum; else { enum keyCheckSum = 0; this(uint, string key, VALUE value) { this.key = key; this.value = value; } } KeyValue tuple; @property ref inout(string) key() inout { return tuple.key; } @property ref inout(VALUE) value() inout { return tuple.value; } } Field[NUM_STATIC_FIELDS] m_fields; size_t m_fieldCount = 0; Field[] m_extendedFields; enum bool safeValueCopy = __traits(compiles, (VALUE v) @safe { VALUE vc; vc = v; }); template typedGet(T) { enum typedGet = __traits(compiles, (VALUE v) { return v.get!T; }); } template canAssign(T) { enum canAssign = __traits(compiles, (T t) { VALUE v = t; }); } } alias ValueType = VALUE; struct FieldTuple { string key; ValueType value; } /** The number of fields present in the map. */ @property size_t length() const { return m_fieldCount + m_extendedFields.length; } /// Supports serialization using vibe.data.serialization. static DictionaryList fromRepresentation(FieldTuple[] array) { DictionaryList ret; foreach (ref v; array) ret.addField(v.key, v.value); return ret; } /// ditto FieldTuple[] toRepresentation() { FieldTuple[] ret; foreach (k, ref v; this) ret ~= FieldTuple(k, v); return ret; } /** Generates an associative-array equivalent string representation of the dictionary. */ void toString(scope void delegate(const(char)[] str) @safe sink) const { sink("["); bool first = true; foreach (k, v; this.byKeyValue) { if (!first) sink(", "); else first = false; () @trusted { import std.format : formattedWrite; string[] ka = (&k)[0 .. 1]; ValueType[] va = (&v)[0 .. 1]; sink.formattedWrite("%(%s%): %(%s%)", ka, va); } (); } sink("]"); } /// ditto void toString(scope void delegate(const(char)[] str) @system sink) const { toString(cast(void delegate(const(char)[]) @safe)sink); } /// ditto string toString() const { import std.array : appender; auto ret = appender!string(); toString((s) { ret.put(s); }); return ret.data; } /** Removes the first field that matches the given key. */ void remove(string key) { static if (USE_HASHSUM) auto keysum = computeCheckSumI(key); enum keysum = 0; auto idx = getIndex(m_fields[0 .. m_fieldCount], key, keysum); if( idx >= 0 ){ auto slice = m_fields[0 .. m_fieldCount]; removeFromArrayIdx(slice, idx); m_fieldCount--; } else { idx = getIndex(m_extendedFields, key, keysum); enforce(idx >= 0); removeFromArrayIdx(m_extendedFields, idx); } } /** Removes all fields that matches the given key. */ void removeAll(string key) { static if (USE_HASHSUM) auto keysum = computeCheckSumI(key); else enum keysum = 0; for (size_t i = 0; i < m_fieldCount;) { if (m_fields[i].keyCheckSum == keysum && matches(m_fields[i].key, key)) { auto slice = m_fields[0 .. m_fieldCount]; removeFromArrayIdx(slice, i); m_fieldCount--; } else i++; } for (size_t i = 0; i < m_extendedFields.length;) { if (m_fields[i].keyCheckSum == keysum && matches(m_fields[i].key, key)) removeFromArrayIdx(m_extendedFields, i); else i++; } } /** Adds a new field to the map. The new field will be added regardless of any existing fields that have the same key, possibly resulting in duplicates. Use opIndexAssign if you want to avoid duplicates. */ void addField(string key, ValueType value) { static if (USE_HASHSUM) auto keysum = computeCheckSumI(key); else enum keysum = 0; if (m_fieldCount < m_fields.length) m_fields[m_fieldCount++] = Field(keysum, key, value); else m_extendedFields ~= Field(keysum, key, value); } void addField(T)(string key, T value) if (canAssign!T) { ValueType convertedValue = value; addField(key, convertedValue); } /** Returns the first field that matches the given key. If no field is found, def_val is returned. */ inout(ValueType) get(string key, lazy inout(ValueType) def_val = ValueType.init) inout { if (auto pv = key in this) return *pv; return def_val; } // DMD bug: cannot set T.init as default value for def_val parameter, // because compilation fails with message: // Error: undefined identifier 'T' /// ditto inout(T) get(T)(string key, lazy inout(T) def_val) inout if (typedGet!T) { if (auto pv = key in this) return (*pv).get!T; return def_val; } /// ditto inout(T) get(T)(string key) // Work around DMD bug inout if (typedGet!T) { return get!T(key, T.init); } /** Returns all values matching the given key. Note that the version returning an array will allocate for each call. */ const(ValueType)[] getAll(string key) const @trusted { // appender import std.array; auto ret = appender!(const(ValueType)[])(); getAll(key, (v) @trusted { ret.put(v); }); return ret.data; } /// ditto void getAll(string key, scope void delegate(const(ValueType)) @safe del) const { static if (USE_HASHSUM) uint keysum = computeCheckSumI(key); else enum keysum = 0; foreach (ref f; m_fields[0 .. m_fieldCount]) { static if (USE_HASHSUM) if (f.keyCheckSum != keysum) continue; if (matches(f.key, key)) del(f.value); } foreach (ref f; m_extendedFields) { static if (USE_HASHSUM) if (f.keyCheckSum != keysum) continue; if (matches(f.key, key)) del(f.value); } } /** Returns the first value matching the given key. */ inout(ValueType) opIndex(string key) inout { auto pitm = key in this; enforce(pitm !is null, "Accessing non-existent key '"~key~"'."); return *pitm; } /** Adds or replaces the given field with a new value. */ ValueType opIndexAssign(ValueType val, string key) { static if (USE_HASHSUM) auto keysum = computeCheckSumI(key); else enum keysum = 0; auto pitm = key in this; if (pitm) *pitm = val; else if (m_fieldCount < m_fields.length) m_fields[m_fieldCount++] = Field(keysum, key, val); else m_extendedFields ~= Field(keysum, key, val); return val; } /// ditto ValueType opIndexAssign(T)(T val, string key) if (canAssign!T) { ValueType convertedVal = val; return opIndexAssign(convertedVal, key); } /** Returns a pointer to the first field that matches the given key. */ inout(ValueType)* opBinaryRight(string op)(string key) inout if(op == "in") { static if (USE_HASHSUM) uint keysum = computeCheckSumI(key); else enum keysum = 0; auto idx = getIndex(m_fields[0 .. m_fieldCount], key, keysum); if (idx >= 0) return &m_fields[idx].tuple[1]; idx = getIndex(m_extendedFields, key, keysum); if (idx >= 0) return &m_extendedFields[idx].tuple[1]; return null; } /// ditto bool opBinaryRight(string op)(string key) inout if(op == "!in") { return !(key in this); } /** Iterates over all fields, including duplicates. */ auto byKeyValue() {return Rng!false(&this, 0); } /// ditto auto byKeyValue() const { return Rng!true(&this, 0); } /// ditto auto byKey() inout { import std.algorithm.iteration : map; return byKeyValue().map!(p => p[0]); } /// ditto auto byValue() inout { import std.algorithm.iteration : map; return byKeyValue().map!(p => p[1]); } /// Deprecated in favor of `.byKeyValue` - enables foreach iteration over a `DictionaryList` with two loop variables. deprecated("Iterate over .byKeyValue instead.") alias byKeyValue this; static if (is(typeof({ const(ValueType) v; ValueType w; w = v; }))) { /** Duplicates the header map. */ @property DictionaryList dup() const { DictionaryList ret; ret.m_fields[0 .. m_fieldCount] = m_fields[0 .. m_fieldCount]; ret.m_fieldCount = m_fieldCount; ret.m_extendedFields = m_extendedFields.dup; return ret; } } private ptrdiff_t getIndex(in Field[] map, string key, uint keysum) const { foreach (i, ref const(Field) entry; map) { static if (USE_HASHSUM) if (entry.keyCheckSum != keysum) continue; if (matches(entry.key, key)) return i; } return -1; } private static bool matches(string a, string b) { static if (case_sensitive) return a == b; else return a.length == b.length && icmp2(a, b) == 0; } // very simple check sum function with a good chance to match // strings with different case equal static if (USE_HASHSUM) private static uint computeCheckSumI(string s) @trusted { uint csum = 0; immutable(char)* pc = s.ptr, pe = s.ptr + s.length; for (; pc != pe; pc++) { static if (case_sensitive) csum ^= *pc; else csum ^= *pc & 0x1101_1111; csum = (csum << 1) | (csum >> 31); } return csum; } private static struct Rng(bool CONST) { @safe nothrow @nogc: static if (CONST) { alias KVT = const(KeyValue); const(DictionaryList)* list; } else { alias KVT = KeyValue; DictionaryList* list; } size_t idx; @property bool empty() const { return idx >= list.length; } @property ref KVT front() { if (idx < list.m_fieldCount) return list.m_fields[idx].tuple; return list.m_extendedFields[idx - list.m_fieldCount].tuple; } void popFront() { idx++; } } } @safe unittest { assert(DictionaryList!(string, true, 2).safeValueCopy); } @safe unittest { DictionaryList!(int, true) a; a.addField("a", 1); a.addField("a", 2); assert(a["a"] == 1); assert(a.getAll("a") == [1, 2]); a["a"] = 3; assert(a["a"] == 3); assert(a.getAll("a") == [3, 2]); a.removeAll("a"); assert(a.getAll("a").length == 0); assert(a.get("a", 4) == 4); a.addField("b", 2); a.addField("b", 1); a.remove("b"); assert(a.getAll("b") == [1]); DictionaryList!(int, false) b; b.addField("a", 1); b.addField("A", 2); assert(b["A"] == 1); assert(b.getAll("a") == [1, 2]); } unittest { import std.variant : Variant; DictionaryList!(Variant) c; c["a"] = true; c["b"] = "Hello"; assert(c.get("a").type == typeid(bool)); assert(c.get!string("b") == "Hello"); assert(c.get!int("c") == int.init); c.addField("d", 9); c.addField("d", "bar"); assert(c.getAll("d") == [ cast(Variant) 9, cast(Variant) "bar" ]); } @safe unittest { import std.conv : text; DictionaryList!int l; l["foo"] = 42; l["bar"] = 43; assert(text(l) == `["foo": 42, "bar": 43]`, text(l)); assert(l.toString() == `["foo": 42, "bar": 43]`, l.toString()); } vibe.d-0.8.2/utils/vibe/utils/hashmap.d000066400000000000000000000304051324361747700177230ustar00rootroot00000000000000/** Internal hash map implementation. Copyright: © 2013 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.utils.hashmap; import vibe.internal.utilallocator; import std.conv : emplace; import std.traits; struct DefaultHashMapTraits(Key) { enum clearValue = Key.init; static bool equals(in Key a, in Key b) { static if (is(Key == class)) return a is b; else return a == b; } static size_t hashOf(in ref Key k) @safe { static if (is(Key == class) && &Unqual!Key.init.toHash is &Object.init.toHash) return () @trusted { return cast(size_t)cast(void*)k; } (); else static if (__traits(compiles, Key.init.toHash())) return () @trusted { return (cast(Key)k).toHash(); } (); else static if (__traits(compiles, Key.init.toHashShared())) return k.toHashShared(); else { // evil casts to be able to get the most basic operations of // HashMap nothrow and @nogc static size_t hashWrapper(in ref Key k) { static typeinfo = typeid(Key); return typeinfo.getHash(&k); } static @nogc nothrow size_t properlyTypedWrapper(in ref Key k) { return 0; } return () @trusted { return (cast(typeof(&properlyTypedWrapper))&hashWrapper)(k); } (); } } } struct HashMap(TKey, TValue, Traits = DefaultHashMapTraits!TKey) { import core.memory : GC; import vibe.internal.meta.traits : isOpApplyDg; import std.algorithm.iteration : filter, map; alias Key = TKey; alias Value = TValue; static if (__VERSION__ < 2074) { struct AW { // work around AffixAllocator limitations import std.algorithm.comparison : max; IAllocator alloc; alias alloc this; enum alignment = max(Key.alignof, int.alignof); void[] resolveInternalPointer(void* p) { void[] ret; alloc.resolveInternalPointer(p, ret); return ret; } } alias AllocatorType = AffixAllocator!(AW, int); } else { IAllocator AW(IAllocator a) { return a; } alias AllocatorType = AffixAllocator!(IAllocator, int); } struct TableEntry { UnConst!Key key = Traits.clearValue; Value value; this(ref Key key, ref Value value) { import std.algorithm.mutation : move; this.key = cast(UnConst!Key)key; this.value = value.move; } } private { TableEntry[] m_table; // NOTE: capacity is always POT size_t m_length; AllocatorType m_allocator; bool m_resizing; } this(IAllocator allocator) { m_allocator = typeof(m_allocator)(AW(allocator)); } ~this() { int rc; try rc = m_table is null ? 1 : () @trusted { return --m_allocator.prefix(m_table); } (); catch (Exception e) assert(false, e.msg); if (rc == 0) { clear(); if (m_table.ptr !is null) () @trusted { static if (hasIndirections!TableEntry) GC.removeRange(m_table.ptr); try m_allocator.dispose(m_table); catch (Exception e) assert(false, e.msg); } (); } } this(this) @trusted { if (m_table.ptr) { try m_allocator.prefix(m_table)++; catch (Exception e) assert(false, e.msg); } } @property size_t length() const { return m_length; } void remove(Key key) { import std.algorithm.mutation : move; auto idx = findIndex(key); assert (idx != size_t.max, "Removing non-existent element."); auto i = idx; while (true) { m_table[i].key = Traits.clearValue; m_table[i].value = Value.init; size_t j = i, r; do { if (++i >= m_table.length) i -= m_table.length; if (Traits.equals(m_table[i].key, Traits.clearValue)) { m_length--; return; } r = Traits.hashOf(m_table[i].key) & (m_table.length-1); } while ((j= 1 && arity!del <= 2, "isOpApplyDg should have prevented this"); static if (arity!del == 1) { if (int ret = del(m_table[i].value)) return ret; } else if (int ret = del(m_table[i].key, m_table[i].value)) return ret; } return 0; } auto byKey() { return bySlot.map!(e => e.key); } auto byKey() const { return bySlot.map!(e => e.key); } auto byValue() { return bySlot.map!(e => e.value); } auto byValue() const { return bySlot.map!(e => e.value); } auto byKeyValue() { import std.typecons : Tuple; return bySlot.map!(e => Tuple!(Key, "key", Value, "value")(e.key, e.value)); } auto byKeyValue() const { import std.typecons : Tuple; return bySlot.map!(e => Tuple!(const(Key), "key", const(Value), "value")(e.key, e.value)); } private auto bySlot() { return m_table[].filter!(e => !Traits.equals(e.key, Traits.clearValue)); } private auto bySlot() const { return m_table[].filter!(e => !Traits.equals(e.key, Traits.clearValue)); } private size_t findIndex(Key key) const { if (m_length == 0) return size_t.max; size_t start = Traits.hashOf(key) & (m_table.length-1); auto i = start; while (!Traits.equals(m_table[i].key, key)) { if (Traits.equals(m_table[i].key, Traits.clearValue)) return size_t.max; if (++i >= m_table.length) i -= m_table.length; if (i == start) return size_t.max; } return i; } private size_t findInsertIndex(Key key) const { auto hash = Traits.hashOf(key); size_t target = hash & (m_table.length-1); auto i = target; while (!Traits.equals(m_table[i].key, Traits.clearValue) && !Traits.equals(m_table[i].key, key)) { if (++i >= m_table.length) i -= m_table.length; assert (i != target, "No free bucket found, HashMap full!?"); } return i; } private void grow(size_t amount) @trusted { try { static if (__VERSION__ < 2074) auto palloc = m_allocator.parent; else auto palloc = m_allocator._parent; if (!palloc) { try m_allocator = typeof(m_allocator)(AW(vibeThreadAllocator())); catch (Exception e) assert(false, e.msg); } } catch (Exception e) { assert(false, e.msg); } auto newsize = m_length + amount; if (newsize < (m_table.length*2)/3) { int rc; try rc = m_allocator.prefix(m_table); catch (Exception e) assert(false, e.msg); if (rc > 1) { // enforce copy-on-write auto oldtable = m_table; try { m_table = m_allocator.makeArray!TableEntry(m_table.length); m_table[] = oldtable; m_allocator.prefix(oldtable)--; m_allocator.prefix(m_table) = 1; } catch (Exception e) { assert(false, e.msg); } } return; } auto newcap = m_table.length ? m_table.length : 16; while (newsize >= (newcap*2)/3) newcap *= 2; resize(newcap); } private void resize(size_t new_size) @trusted { assert(!m_resizing); m_resizing = true; scope(exit) m_resizing = false; uint pot = 0; while (new_size > 1) { pot++; new_size /= 2; } new_size = 1 << pot; auto oldtable = m_table; // allocate the new array, automatically initializes with empty entries (Traits.clearValue) try { m_table = m_allocator.makeArray!TableEntry(new_size); m_allocator.prefix(m_table) = 1; } catch (Exception e) assert(false, e.msg); static if (hasIndirections!TableEntry) GC.addRange(m_table.ptr, m_table.length * TableEntry.sizeof); // perform a move operation of all non-empty elements from the old array to the new one foreach (ref el; oldtable) if (!Traits.equals(el.key, Traits.clearValue)) { auto idx = findInsertIndex(el.key); (cast(ubyte[])(&m_table[idx])[0 .. 1])[] = (cast(ubyte[])(&el)[0 .. 1])[]; } // all elements have been moved to the new array, so free the old one without calling destructors int rc; try rc = oldtable is null ? 1 : --m_allocator.prefix(oldtable); catch (Exception e) assert(false, e.msg); if (rc == 0) { static if (hasIndirections!TableEntry) GC.removeRange(oldtable.ptr); try m_allocator.deallocate(oldtable); catch (Exception e) assert(false, e.msg); } } } unittest { import std.conv; HashMap!(string, string) map; foreach (i; 0 .. 100) { map[to!string(i)] = to!string(i) ~ "+"; assert(map.length == i+1); } foreach (i; 0 .. 100) { auto str = to!string(i); auto pe = str in map; assert(pe !is null && *pe == str ~ "+"); assert(map[str] == str ~ "+"); } foreach (i; 0 .. 50) { map.remove(to!string(i)); assert(map.length == 100-i-1); } foreach (i; 50 .. 100) { auto str = to!string(i); auto pe = str in map; assert(pe !is null && *pe == str ~ "+"); assert(map[str] == str ~ "+"); } } // test for nothrow/@nogc compliance nothrow unittest { HashMap!(int, int) map1; HashMap!(string, string) map2; map1[1] = 2; map2["1"] = "2"; @nogc nothrow void performNoGCOps() { foreach (int v; map1) {} foreach (int k, int v; map1) {} assert(1 in map1); assert(map1.length == 1); assert(map1[1] == 2); assert(map1.getNothrow(1, -1) == 2); foreach (string v; map2) {} foreach (string k, string v; map2) {} assert("1" in map2); assert(map2.length == 1); assert(map2["1"] == "2"); assert(map2.getNothrow("1", "") == "2"); } performNoGCOps(); } unittest { // test for proper use of constructor/post-blit/destructor static struct Test { static size_t constructedCounter = 0; bool constructed = false; this(int) { constructed = true; constructedCounter++; } this(this) nothrow { if (constructed) constructedCounter++; } ~this() nothrow { if (constructed) constructedCounter--; } } assert(Test.constructedCounter == 0); { // sanity check Test t; assert(Test.constructedCounter == 0); t = Test(1); assert(Test.constructedCounter == 1); auto u = t; assert(Test.constructedCounter == 2); t = Test.init; assert(Test.constructedCounter == 1); } assert(Test.constructedCounter == 0); { // basic insertion and hash map resizing HashMap!(int, Test) map; foreach (i; 1 .. 67) { map[i] = Test(1); assert(Test.constructedCounter == i); } } assert(Test.constructedCounter == 0); { // test clear() and overwriting existing entries HashMap!(int, Test) map; foreach (i; 1 .. 67) { map[i] = Test(1); assert(Test.constructedCounter == i); } map.clear(); foreach (i; 1 .. 67) { map[i] = Test(1); assert(Test.constructedCounter == i); } foreach (i; 1 .. 67) { map[i] = Test(1); assert(Test.constructedCounter == 66); } } assert(Test.constructedCounter == 0); { // test removing entries and adding entries after remove HashMap!(int, Test) map; foreach (i; 1 .. 67) { map[i] = Test(1); assert(Test.constructedCounter == i); } foreach (i; 1 .. 33) { map.remove(i); assert(Test.constructedCounter == 66 - i); } foreach (i; 67 .. 130) { map[i] = Test(1); assert(Test.constructedCounter == i - 32); } } assert(Test.constructedCounter == 0); } private template UnConst(T) { static if (is(T U == const(U))) { alias UnConst = U; } else static if (is(T V == immutable(V))) { alias UnConst = V; } else alias UnConst = T; } vibe.d-0.8.2/utils/vibe/utils/memory.d000066400000000000000000000010351324361747700176070ustar00rootroot00000000000000/** Utility functions for memory management Note that this module currently is a big sand box for testing allocation related stuff. Nothing here, including the interfaces, is final but rather a lot of experimentation. Copyright: © 2012-2013 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ deprecated("Use the memutils package or std.experimental.allocator instead.") module vibe.utils.memory; public import vibe.internal.memory_legacy; vibe.d-0.8.2/utils/vibe/utils/string.d000066400000000000000000000131731324361747700176130ustar00rootroot00000000000000/** Utility functions for string processing Copyright: © 2012-2014 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.utils.string; public import std.string; import vibe.utils.array; import vibe.internal.utilallocator; import std.algorithm; import std.array; import std.ascii; import std.format; import std.uni; import std.utf; import core.exception; /** Takes a string with possibly invalid UTF8 sequences and outputs a valid UTF8 string as near to the original as possible. */ string sanitizeUTF8(in ubyte[] str) @safe pure { import std.utf; auto ret = appender!string(); ret.reserve(str.length); size_t i = 0; while (i < str.length) { dchar ch = str[i]; try ch = std.utf.decode(cast(const(char[]))str, i); catch( UTFException ){ i++; } //catch( AssertError ){ i++; } char[4] dst; auto len = std.utf.encode(dst, ch); ret.put(dst[0 .. len]); } return ret.data; } /** Strips the byte order mark of an UTF8 encoded string. This is useful when the string is coming from a file. */ inout(char)[] stripUTF8Bom(inout(char)[] str) @safe pure nothrow { if (str.length >= 3 && str[0 .. 3] == [0xEF, 0xBB, 0xBF]) return str[3 ..$]; return str; } /** Checks if all characters in 'str' are contained in 'chars'. */ bool allOf(const(char)[] str, const(char)[] chars) @safe pure { foreach (dchar ch; str) if (!chars.canFind(ch)) return false; return true; } ptrdiff_t indexOfCT(Char)(in Char[] s, dchar c, CaseSensitive cs = CaseSensitive.yes) @safe pure { if (__ctfe) { if (cs == CaseSensitive.yes) { foreach (i, dchar ch; s) if (ch == c) return i; } else { c = std.uni.toLower(c); foreach (i, dchar ch; s) if (std.uni.toLower(ch) == c) return i; } return -1; } else return std.string.indexOf(s, c, cs); } ptrdiff_t indexOfCT(Char)(in Char[] s, in Char[] needle) { if (__ctfe) { if (s.length < needle.length) return -1; foreach (i; 0 .. s.length - needle.length) if (s[i .. i+needle.length] == needle) return i; return -1; } else return std.string.indexOf(s, needle); } /** Checks if any character in 'str' is contained in 'chars'. */ bool anyOf(const(char)[] str, const(char)[] chars) @safe pure { foreach (ch; str) if (chars.canFind(ch)) return true; return false; } /// ASCII whitespace trimming (space and tab) inout(char)[] stripLeftA(inout(char)[] s) @safe pure nothrow { while (s.length > 0 && (s[0] == ' ' || s[0] == '\t')) s = s[1 .. $]; return s; } /// ASCII whitespace trimming (space and tab) inout(char)[] stripRightA(inout(char)[] s) @safe pure nothrow { while (s.length > 0 && (s[$-1] == ' ' || s[$-1] == '\t')) s = s[0 .. $-1]; return s; } /// ASCII whitespace trimming (space and tab) inout(char)[] stripA(inout(char)[] s) @safe pure nothrow { return stripLeftA(stripRightA(s)); } /// Finds the first occurence of any of the characters in `chars` sizediff_t indexOfAny(const(char)[] str, const(char)[] chars) @safe pure { foreach (i, char ch; str) if (chars.canFind(ch)) return i; return -1; } alias countUntilAny = indexOfAny; /** Finds the closing bracket (works with any of '[', '$(LPAREN)', '<', '{'). Params: str = input string nested = whether to skip nested brackets Returns: The index of the closing bracket or -1 for unbalanced strings and strings that don't start with a bracket. */ sizediff_t matchBracket(const(char)[] str, bool nested = true) @safe pure nothrow { if (str.length < 2) return -1; char open = str[0], close = void; switch (str[0]) { case '[': close = ']'; break; case '(': close = ')'; break; case '<': close = '>'; break; case '{': close = '}'; break; default: return -1; } size_t level = 1; foreach (i, char c; str[1 .. $]) { if (nested && c == open) ++level; else if (c == close) --level; if (level == 0) return i + 1; } return -1; } @safe unittest { static struct Test { string str; sizediff_t res; } enum tests = [ Test("[foo]", 4), Test("", 4), Test("{baz}", 4), Test("[", -1), Test("[foo", -1), Test("ab[f]", -1), Test("[foo[bar]]", 9), Test("[foo{bar]]", 8), ]; foreach (test; tests) assert(matchBracket(test.str) == test.res); assert(matchBracket("[foo[bar]]", false) == 8); static assert(matchBracket("[foo]") == 4); } /// Same as std.string.format, just using an allocator. string formatAlloc(ARGS...)(IAllocator alloc, string fmt, ARGS args) { auto app = AllocAppender!string(alloc); formattedWrite(() @trusted { return &app; } (), fmt, args); return () @trusted { return app.data; } (); } /// Special version of icmp() with optimization for ASCII characters int icmp2(const(char)[] a, const(char)[] b) @safe pure { size_t i = 0, j = 0; // fast skip equal prefix size_t min_len = min(a.length, b.length); while( i < min_len && a[i] == b[i] ) i++; if( i > 0 && (a[i-1] & 0x80) ) i--; // don't stop half-way in a UTF-8 sequence j = i; // compare the differing character and the rest of the string while(i < a.length && j < b.length){ uint ac = cast(uint)a[i]; uint bc = cast(uint)b[j]; if( !((ac | bc) & 0x80) ){ i++; j++; if( ac >= 'A' && ac <= 'Z' ) ac += 'a' - 'A'; if( bc >= 'A' && bc <= 'Z' ) bc += 'a' - 'A'; if( ac < bc ) return -1; else if( ac > bc ) return 1; } else { dchar acp = decode(a, i); dchar bcp = decode(b, j); if( acp != bcp ){ acp = std.uni.toLower(acp); bcp = std.uni.toLower(bcp); if( acp < bcp ) return -1; else if( acp > bcp ) return 1; } } } if( i < a.length ) return 1; else if( j < b.length ) return -1; assert(i == a.length || j == b.length, "Strings equal but we didn't fully compare them!?"); return 0; } vibe.d-0.8.2/utils/vibe/utils/validation.d000066400000000000000000000151141324361747700204340ustar00rootroot00000000000000/** String input validation routines Copyright: © 2012-2014 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.utils.validation; import vibe.utils.string; import std.algorithm : canFind; import std.array : appender; import std.compiler; import std.conv; import std.exception; import std.format; import std.net.isemail; import std.range : isOutputRange; import std.string; import std.utf; @safe: // TODO: add nothrow to the exception-less versions (but formattedWrite isn't nothrow) /** Provides a simple email address validation. Note that the validation could be stricter in some cases than required. The user name is forced to be ASCII, which is not strictly required as of RFC 6531. It also does not allow quotiations for the user name part (RFC 5321). Invalid email adresses will cause an exception with the error description to be thrown. */ string validateEmail()(string str, size_t max_length = 64) { auto err = appender!string(); enforce(validateEmail(err, str, max_length), err.data); return str; } /// ditto bool validateEmail(R)(ref R error_sink, string str, size_t max_length = 64) if (isOutputRange!(R, char)) { if (str.length > max_length) { error_sink.formattedWrite("The email address may not be longer than %s characters.", max_length); return false; } auto at_idx = str.indexOf('@'); if (at_idx < 0) { error_sink.put("Email is missing the '@'."); return false; } if (!validateIdent(error_sink, str[0 .. at_idx], "!#$%&'*+-/=?^_`{|}~.(),:;<>@[\\]", "An email user name", false)) return false; auto domain = str[at_idx+1 .. $]; auto dot_idx = domain.indexOf('.'); if (dot_idx <= 0 || dot_idx >= str.length-2) { error_sink.put("The email domain is not valid."); return false; } if (domain.anyOf(" @,[](){}<>!\"'%&/\\?*#;:|")) { error_sink.put("The email domain contains invalid characters."); return false; } static if (__VERSION__ >= 2072) { if (() @trusted { return !isEmail(str); }()) { error_sink.put("The email address is invalid."); return false; } } return true; } unittest { assertNotThrown(validateEmail("0a0@b.com")); assertNotThrown(validateEmail("123@123.com")); assertThrown(validateEmail("§@b.com")); } /** Validates a user name string. User names may only contain ASCII letters and digits or any of the specified additional letters. Invalid user names will cause an exception with the error description to be thrown. */ string validateUserName()(string str, int min_length = 3, int max_length = 32, string additional_chars = "-_", bool no_number_start = true) { auto err = appender!string(); enforce(validateUserName(err, str, min_length, max_length, additional_chars, no_number_start), err.data); return str; } /// ditto bool validateUserName(R)(ref R error_sink, string str, int min_length = 3, int max_length = 32, string additional_chars = "-_", bool no_number_start = true) if (isOutputRange!(R, char)) { // FIXME: count graphemes instead of code units! if (str.length < min_length) { error_sink.formattedWrite("The user name must be at least %s characters long.", min_length); return false; } if (str.length > max_length) { error_sink.formattedWrite("The user name must not be longer than %s characters.", max_length); return false; } if (!validateIdent(error_sink, str, additional_chars, "A user name", no_number_start)) return false; return true; } /** Validates an identifier string as used in most programming languages. The identifier must begin with a letter or with any of the additional_chars and may contain only ASCII letters and digits and any of the additional_chars. Invalid identifiers will cause an exception with the error description to be thrown. */ string validateIdent()(string str, string additional_chars = "_", string entity_name = "An identifier", bool no_number_start = true) { auto err = appender!string(); enforce(validateIdent(err, str, additional_chars, entity_name, no_number_start), err.data); return str; } /// ditto bool validateIdent(R)(ref R error_sink, string str, string additional_chars = "_", string entity_name = "An identifier", bool no_number_start = true) if (isOutputRange!(R, char)) { // NOTE: this is meant for ASCII identifiers only! foreach (i, char ch; str) { if (ch >= 'a' && ch <= 'z') continue; if (ch >= 'A' && ch <= 'Z') continue; if (ch >= '0' && ch <= '9') { if (!no_number_start || i > 0) continue; else { error_sink.formattedWrite("%s must not begin with a number.", entity_name); return false; } } if (additional_chars.canFind(ch)) continue; error_sink.formattedWrite("%s may only contain numbers, letters and one of (%s)", entity_name, additional_chars); return false; } return true; } /** Checks a password for minimum complexity requirements */ string validatePassword()(string str, string str_confirm, size_t min_length = 8, size_t max_length = 64) { auto err = appender!string(); enforce(validatePassword(err, str, str_confirm, min_length, max_length), err.data); return str; } /// ditto bool validatePassword(R)(ref R error_sink, string str, string str_confirm, size_t min_length = 8, size_t max_length = 64) if (isOutputRange!(R, char)) { // FIXME: count graphemes instead of code units! if (str.length < min_length) { error_sink.formattedWrite("The password must be at least %s characters long.", min_length); return false; } if (str.length > max_length) { error_sink.formattedWrite("The password must not be longer than %s characters.", max_length); return false; } if (str != str_confirm) { error_sink.put("The password and the confirmation differ."); return false; } return true; } /** Checks if a string falls within the specified length range. */ string validateString(string str, size_t min_length = 0, size_t max_length = 0, string entity_name = "String") { auto err = appender!string(); enforce(validateString(err, str, min_length, max_length, entity_name), err.data); return str; } /// ditto bool validateString(R)(ref R error_sink, string str, size_t min_length = 0, size_t max_length = 0, string entity_name = "String") if (isOutputRange!(R, char)) { try std.utf.validate(str); catch (Exception e) { error_sink.put(e.msg); return false; } // FIXME: count graphemes instead of code units! if (str.length < min_length) { error_sink.formattedWrite("%s must be at least %s characters long.", entity_name, min_length); return false; } if (max_length > 0 && str.length > max_length) { error_sink.formattedWrite("%s must not be longer than %s characters.", entity_name, max_length); return false; } return true; } vibe.d-0.8.2/web/000077500000000000000000000000001324361747700134635ustar00rootroot00000000000000vibe.d-0.8.2/web/dub.sdl000066400000000000000000000002431324361747700147400ustar00rootroot00000000000000name "web" description "High level web and REST service framework" dependency "vibe-d:http" version=">=0.0.0" targetType "library" sourcePaths "." importPaths "." vibe.d-0.8.2/web/meson.build000066400000000000000000000051341324361747700156300ustar00rootroot00000000000000# Meson file for Vibe Web vibe_web_src_dir = include_directories('.') vibe_web_src = [ 'vibe/web/auth.d', 'vibe/web/common.d', 'vibe/web/i18n.d', 'vibe/web/internal/rest/common.d', 'vibe/web/internal/rest/jsclient.d', 'vibe/web/rest.d', 'vibe/web/validation.d', 'vibe/web/web.d' ] # # Install Includes # install_subdir('vibe/', install_dir: 'include/d/vibe/') # # Build Targets # web_link_with = [vibe_utils_lib, vibe_core_lib, vibe_data_lib, vibe_inet_lib, vibe_stream_lib, vibe_textfilter_lib, vibe_tls_lib, vibe_crypto_lib, vibe_http_lib] # High level web and REST service framework vibe_web_lib = library('vibe-web', [vibe_web_src], include_directories: [vibe_utils_src_dir, vibe_core_src_dir, vibe_data_src_dir, vibe_inet_src_dir, vibe_stream_src_dir, vibe_textfilter_src_dir, vibe_tls_src_dir, vibe_crypto_src_dir, vibe_http_src_dir, openssl_inc], install: true, link_with: [web_link_with], dependencies: [crypto_dep, ssl_dep, diet_dep], version: project_version, soversion: project_soversion ) pkgc.generate(name: 'vibe-web', libraries: [vibe_web_lib] + web_link_with, subdirs: 'd/vibe', version: project_version, requires: 'diet', description: 'High level web and REST service framework' ) # # Tests # vibe_test_web_exe = executable('vibe-test_web', [vibe_web_src], include_directories: [vibe_utils_src_dir, vibe_core_src_dir, vibe_data_src_dir, vibe_inet_src_dir, vibe_stream_src_dir, vibe_textfilter_src_dir, vibe_tls_src_dir, vibe_crypto_src_dir, vibe_http_src_dir, openssl_inc], dependencies: [zlib_dep, crypto_dep, ssl_dep, libevent_dep, diet_dep], link_with: [web_link_with], d_args: meson.get_compiler('d').unittest_args(), link_args: '-main' ) test('vibe-test_web', vibe_test_web_exe) vibe.d-0.8.2/web/vibe/000077500000000000000000000000001324361747700144105ustar00rootroot00000000000000vibe.d-0.8.2/web/vibe/web/000077500000000000000000000000001324361747700151655ustar00rootroot00000000000000vibe.d-0.8.2/web/vibe/web/auth.d000066400000000000000000000333241324361747700163000ustar00rootroot00000000000000/** Authentication and authorization framework based on fine-grained roles. Copyright: © 2016 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.web.auth; import vibe.http.common : HTTPStatusException; import vibe.http.status : HTTPStatus; import vibe.http.server : HTTPServerRequest, HTTPServerResponse; import vibe.internal.meta.uda : findFirstUDA; import std.meta : AliasSeq, staticIndexOf; /// @safe unittest { import vibe.http.router : URLRouter; import vibe.web.web : noRoute, registerWebInterface; static struct AuthInfo { @safe: string userName; bool isAdmin() { return this.userName == "tom"; } bool isRoomMember(int chat_room) { if (chat_room == 0) return this.userName == "macy" || this.userName == "peter"; else if (chat_room == 1) return this.userName == "macy"; else return false; } bool isPremiumUser() { return this.userName == "peter"; } } @requiresAuth static class ChatWebService { @safe: @noRoute AuthInfo authenticate(scope HTTPServerRequest req, scope HTTPServerResponse res) { if (req.headers["AuthToken"] == "foobar") return AuthInfo(req.headers["AuthUser"]); throw new HTTPStatusException(HTTPStatus.unauthorized); } @noAuth void getLoginPage() { // code that can be executed for any client } @anyAuth void getOverview() { // code that can be executed by any registered user } @auth(Role.admin) void getAdminSection() { // code that may only be executed by adminitrators } @auth(Role.admin | Role.roomMember) void getChatroomHistory(int chat_room) { // code that may execute for administrators or for chat room members } @auth(Role.roomMember & Role.premiumUser) void getPremiumInformation(int chat_room) { // code that may only execute for users that are members of a room and have a premium subscription } } void registerService(URLRouter router) @safe { router.registerWebInterface(new ChatWebService); } } /** Enables authentication and authorization checks for an interface class. Web/REST interface classes that have authentication enabled are required to specify either the `@auth` or the `@noAuth` attribute for every public method. The type of the authentication information, as returned by the `authenticate()` method, can optionally be specified as a template argument. This is useful if an `interface` is annotated and the `authenticate()` method is only declared in the actual class implementation. */ @property RequiresAuthAttribute!void requiresAuth() { return RequiresAuthAttribute!void.init; } /// ditto @property RequiresAuthAttribute!AUTH_INFO requiresAuth(AUTH_INFO)() { return RequiresAuthAttribute!AUTH_INFO.init; } /** Enforces authentication and authorization. Params: roles = Role expression to control authorization. If no role set is given, any authenticated user is granted access. */ AuthAttribute!R auth(R)(R roles) { return AuthAttribute!R.init; } /** Enforces only authentication. */ @property AuthAttribute!void anyAuth() { return AuthAttribute!void.init; } /** Disables authentication checks. */ @property NoAuthAttribute noAuth() { return NoAuthAttribute.init; } /// private struct RequiresAuthAttribute(AUTH_INFO) { alias AuthInfo = AUTH_INFO; } /// private struct AuthAttribute(R) { alias Roles = R; } // private struct NoAuthAttribute {} /** Represents a required authorization role. Roles can be combined using logical or (`|` operator) or logical and (`&` operator). The role name is directly mapped to a method name of the authorization interface specified on the web interface class using the `@requiresAuth` attribute. See_Also: `auth` */ struct Role { @disable this(); static @property R!(Op.ident, name, void, void) opDispatch(string name)() { return R!(Op.ident, name, void, void).init; } } package auto handleAuthentication(alias fun, C)(C c, HTTPServerRequest req, HTTPServerResponse res) { import std.traits : MemberFunctionsTuple; alias AI = AuthInfo!C; enum funname = __traits(identifier, fun); static if (!is(AI == void)) { alias AR = GetAuthAttribute!fun; static if (findFirstUDA!(NoAuthAttribute, fun).found) { static assert (is(AR == void), "Method "~funname~" specifies both, @noAuth and @auth(...)/@anyAuth attributes."); static assert(!hasParameterType!(fun, AI), "Method "~funname~" is attributed @noAuth, but also has an "~AI.stringof~" paramter."); // nothing to do } else { static assert(!is(AR == void), "Missing @auth(...)/@anyAuth attribute for method "~funname~"."); static if (!__traits(compiles, () @safe { c.authenticate(req, res); } ())) pragma(msg, "Non-@safe .authenticate() methods are deprecated - annotate "~C.stringof~".authenticate() with @safe or @trusted."); return () @trusted { return c.authenticate(req, res); } (); } } else { // make sure that there are no @auth/@noAuth annotations for non-authorizing classes foreach (mem; __traits(allMembers, C)) foreach (fun; MemberFunctionsTuple!(C, mem)) { static if (__traits(getProtection, fun) == "public") { static assert (!findFirstUDA!(NoAuthAttribute, C).found, "@noAuth attribute on method "~funname~" is not allowed without annotating "~C.stringof~" with @requiresAuth."); static assert (is(GetAuthAttribute!fun == void), "@auth(...)/@anyAuth attribute on method "~funname~" is not allowed without annotating "~C.stringof~" with @requiresAuth."); } } } } package void handleAuthorization(C, alias fun, PARAMS...)(AuthInfo!C auth_info) { import std.traits : MemberFunctionsTuple, ParameterIdentifierTuple; import vibe.internal.meta.typetuple : Group; alias AI = AuthInfo!C; alias ParamNames = Group!(ParameterIdentifierTuple!fun); static if (!is(AI == void)) { static if (!findFirstUDA!(NoAuthAttribute, fun).found) { alias AR = GetAuthAttribute!fun; static if (!is(AR.Roles == void)) { static if (!__traits(compiles, () @safe { evaluate!(__traits(identifier, fun), AR.Roles, AI, ParamNames, PARAMS)(auth_info); } ())) pragma(msg, "Non-@safe role evaluator methods are deprecated - annotate "~C.stringof~"."~__traits(identifier, fun)~"() with @safe or @trusted."); if (!() @trusted { return evaluate!(__traits(identifier, fun), AR.Roles, AI, ParamNames, PARAMS)(auth_info); } ()) throw new HTTPStatusException(HTTPStatus.forbidden, "Not allowed to access this resource."); } // successfully authorized, fall-through } } } package template isAuthenticated(C, alias fun) { static if (is(AuthInfo!C == void)) { static assert(!findFirstUDA!(NoAuthAttribute, fun).found && !findFirstUDA!(AuthAttribute, fun).found, C.stringof~"."~__traits(identifier, fun)~": @auth/@anyAuth/@noAuth attributes require @requiresAuth attribute on the containing class."); enum isAuthenticated = false; } else { static assert(findFirstUDA!(NoAuthAttribute, fun).found || findFirstUDA!(AuthAttribute, fun).found, C.stringof~"."~__traits(identifier, fun)~": Endpoint method must be annotated with either of @auth/@anyAuth/@noAuth."); enum isAuthenticated = !findFirstUDA!(NoAuthAttribute, fun).found; } } unittest { class C { @noAuth void a() {} @auth(Role.test) void b() {} @anyAuth void c() {} void d() {} } static assert(!is(typeof(isAuthenticated!(C, C.a)))); static assert(!is(typeof(isAuthenticated!(C, C.b)))); static assert(!is(typeof(isAuthenticated!(C, C.c)))); static assert(!isAuthenticated!(C, C.d)); @requiresAuth class D { @noAuth void a() {} @auth(Role.test) void b() {} @anyAuth void c() {} void d() {} } static assert(!isAuthenticated!(D, D.a)); static assert(isAuthenticated!(D, D.b)); static assert(isAuthenticated!(D, D.c)); static assert(!is(typeof(isAuthenticated!(D, D.d)))); } package template AuthInfo(C, CA = C) { import std.traits : BaseTypeTuple, isInstanceOf; alias ATTS = AliasSeq!(__traits(getAttributes, CA)); alias BASES = BaseTypeTuple!CA; template impl(size_t idx) { static if (idx < ATTS.length) { static if (is(typeof(ATTS[idx])) && isInstanceOf!(RequiresAuthAttribute, typeof(ATTS[idx]))) { static if (is(typeof(C.init.authenticate(HTTPServerRequest.init, HTTPServerResponse.init)))) { alias impl = typeof(C.init.authenticate(HTTPServerRequest.init, HTTPServerResponse.init)); static assert(is(ATTS[idx].AuthInfo == void) || is(ATTS[idx].AuthInfo == impl), "Type mismatch between the @requiresAuth annotation and the authenticate() method."); } else static if (is(C == interface)) { alias impl = ATTS[idx].AuthInfo; static assert(!is(impl == void), "Interface "~C.stringof~" either needs to supply an authenticate method or must supply the authentication information via @requiresAuth!T."); } else static assert (false, C.stringof~" must have an authenticate(...) method that takes HTTPServerRequest/HTTPServerResponse parameters and returns an authentication information object."); } else alias impl = impl!(idx+1); } else alias impl = void; } template cimpl(size_t idx) { static if (idx < BASES.length) { alias AI = AuthInfo!(C, BASES[idx]); static if (is(AI == void)) alias cimpl = cimpl!(idx+1); else alias cimpl = AI; } else alias cimpl = void; } static if (!is(impl!0 == void)) alias AuthInfo = impl!0; else alias AuthInfo = cimpl!0; } unittest { @requiresAuth static class I { static struct A {} } static assert (!is(AuthInfo!I)); // missing authenticate method @requiresAuth static class J { static struct A { } A authenticate(HTTPServerRequest, HTTPServerResponse) { return A.init; } } static assert (is(AuthInfo!J == J.A)); static class K {} static assert (is(AuthInfo!K == void)); static class L : J {} static assert (is(AuthInfo!L == J.A)); @requiresAuth interface M { static struct A { } } static class N : M { A authenticate(HTTPServerRequest, HTTPServerResponse) { return A.init; } } static assert (is(AuthInfo!N == M.A)); } private template GetAuthAttribute(alias fun) { import std.traits : isInstanceOf; alias ATTS = AliasSeq!(__traits(getAttributes, fun)); template impl(size_t idx) { static if (idx < ATTS.length) { static if (is(typeof(ATTS[idx])) && isInstanceOf!(AuthAttribute, typeof(ATTS[idx]))) { alias impl = typeof(ATTS[idx]); static assert(is(impl!(idx+1) == void), "Method "~__traits(identifier, fun)~" may only specify one @auth attribute."); } else alias impl = impl!(idx+1); } else alias impl = void; } alias GetAuthAttribute = impl!0; } unittest { @auth(Role.a) void c(); static assert(is(GetAuthAttribute!c.Roles == typeof(Role.a))); void d(); static assert(is(GetAuthAttribute!d == void)); @anyAuth void a(); static assert(is(GetAuthAttribute!a.Roles == void)); @anyAuth @anyAuth void b(); static assert(!is(GetAuthAttribute!b)); } private enum Op { none, and, or, ident } private struct R(Op op_, string ident_, Left_, Right_) { alias op = op_; enum ident = ident_; alias Left = Left_; alias Right = Right_; R!(Op.or, null, R, O) opBinary(string op : "|", O)(O other) { return R!(Op.or, null, R, O).init; } R!(Op.and, null, R, O) opBinary(string op : "&", O)(O other) { return R!(Op.and, null, R, O).init; } } private bool evaluate(string methodname, R, A, alias ParamNames, PARAMS...)(ref A a) { import std.ascii : toUpper; import std.traits : ParameterTypeTuple, ParameterIdentifierTuple; static if (R.op == Op.ident) { enum fname = "is" ~ toUpper(R.ident[0]) ~ R.ident[1 .. $]; alias func = AliasSeq!(__traits(getMember, a, fname))[0]; alias fpNames = ParameterIdentifierTuple!func; alias FPTypes = ParameterTypeTuple!func; FPTypes params; foreach (i, P; FPTypes) { enum name = fpNames[i]; enum j = staticIndexOf!(name, ParamNames.expand); static assert(j >= 0, "Missing parameter "~name~" to evaluate @auth attribute for method "~methodname~"."); static assert (is(typeof(PARAMS[j]) == P), "Parameter "~name~" of "~methodname~" is expected to have type "~P.stringof~" to match @auth attribute."); params[i] = PARAMS[j]; } return __traits(getMember, a, fname)(params); } else static if (R.op == Op.and) return evaluate!(methodname, R.Left, A, ParamNames, PARAMS)(a) && evaluate!(methodname, R.Right, A, ParamNames, PARAMS)(a); else static if (R.op == Op.or) return evaluate!(methodname, R.Left, A, ParamNames, PARAMS)(a) || evaluate!(methodname, R.Right, A, ParamNames, PARAMS)(a); else return true; } unittest { import vibe.internal.meta.typetuple : Group; static struct AuthInfo { this(string u) { this.username = u; } string username; bool isAdmin() { return this.username == "peter"; } bool isMember(int room) { return this.username == "tom"; } } auto peter = AuthInfo("peter"); auto tom = AuthInfo("tom"); { int room; alias defargs = AliasSeq!(AuthInfo, Group!("room"), room); auto ra = Role.admin; assert(evaluate!("x", typeof(ra), defargs)(peter) == true); assert(evaluate!("x", typeof(ra), defargs)(tom) == false); auto rb = Role.member; assert(evaluate!("x", typeof(rb), defargs)(peter) == false); assert(evaluate!("x", typeof(rb), defargs)(tom) == true); auto rc = Role.admin & Role.member; assert(evaluate!("x", typeof(rc), defargs)(peter) == false); assert(evaluate!("x", typeof(rc), defargs)(tom) == false); auto rd = Role.admin | Role.member; assert(evaluate!("x", typeof(rd), defargs)(peter) == true); assert(evaluate!("x", typeof(rd), defargs)(tom) == true); static assert(__traits(compiles, evaluate!("x", typeof(ra), AuthInfo, Group!())(peter))); static assert(!__traits(compiles, evaluate!("x", typeof(rb), AuthInfo, Group!())(peter))); } { float room; static assert(!__traits(compiles, evaluate!("x", typeof(rb), AuthInfo, Group!("room"), room)(peter))); } { int foo; static assert(!__traits(compiles, evaluate!("x", typeof(rb), AuthInfo, Group!("foo"), foo)(peter))); } } vibe.d-0.8.2/web/vibe/web/common.d000066400000000000000000000560031324361747700166260ustar00rootroot00000000000000/** Contains common functionality for the REST and WEB interface generators. Copyright: © 2012-2017 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig, Михаил Страшун */ module vibe.web.common; import vibe.http.common; import vibe.http.server : HTTPServerRequest; import vibe.data.json; import vibe.internal.meta.uda : onlyAsUda; static import std.utf; static import std.string; import std.typecons : Nullable; /** Adjusts the naming convention for a given function name to the specified style. The input name is assumed to be in lowerCamelCase (D-style) or PascalCase. Acronyms (e.g. "HTML") should be written all caps */ string adjustMethodStyle(string name, MethodStyle style) @safe { if (!name.length) { return ""; } import std.uni; final switch(style) { case MethodStyle.unaltered: return name; case MethodStyle.camelCase: size_t i = 0; foreach (idx, dchar ch; name) { if (isUpper(ch)) { i = idx; } else break; } if (i == 0) { std.utf.decode(name, i); return std.string.toLower(name[0 .. i]) ~ name[i .. $]; } else { std.utf.decode(name, i); if (i < name.length) { return std.string.toLower(name[0 .. i-1]) ~ name[i-1 .. $]; } else { return std.string.toLower(name); } } case MethodStyle.pascalCase: size_t idx = 0; std.utf.decode(name, idx); return std.string.toUpper(name[0 .. idx]) ~ name[idx .. $]; case MethodStyle.lowerCase: return std.string.toLower(name); case MethodStyle.upperCase: return std.string.toUpper(name); case MethodStyle.lowerUnderscored: case MethodStyle.upperUnderscored: string ret; size_t start = 0, i = 0; while (i < name.length) { // skip acronyms while (i < name.length && (i+1 >= name.length || (name[i+1] >= 'A' && name[i+1] <= 'Z'))) { std.utf.decode(name, i); } // skip the main (lowercase) part of a word while (i < name.length && !(name[i] >= 'A' && name[i] <= 'Z')) { std.utf.decode(name, i); } // add a single word if( ret.length > 0 ) { ret ~= "_"; } ret ~= name[start .. i]; // quick skip the capital and remember the start of the next word start = i; if (i < name.length) { std.utf.decode(name, i); } } if (start < name.length) { ret ~= "_" ~ name[start .. $]; } return style == MethodStyle.lowerUnderscored ? std.string.toLower(ret) : std.string.toUpper(ret); } } @safe unittest { assert(adjustMethodStyle("methodNameTest", MethodStyle.unaltered) == "methodNameTest"); assert(adjustMethodStyle("methodNameTest", MethodStyle.camelCase) == "methodNameTest"); assert(adjustMethodStyle("methodNameTest", MethodStyle.pascalCase) == "MethodNameTest"); assert(adjustMethodStyle("methodNameTest", MethodStyle.lowerCase) == "methodnametest"); assert(adjustMethodStyle("methodNameTest", MethodStyle.upperCase) == "METHODNAMETEST"); assert(adjustMethodStyle("methodNameTest", MethodStyle.lowerUnderscored) == "method_name_test"); assert(adjustMethodStyle("methodNameTest", MethodStyle.upperUnderscored) == "METHOD_NAME_TEST"); assert(adjustMethodStyle("MethodNameTest", MethodStyle.unaltered) == "MethodNameTest"); assert(adjustMethodStyle("MethodNameTest", MethodStyle.camelCase) == "methodNameTest"); assert(adjustMethodStyle("MethodNameTest", MethodStyle.pascalCase) == "MethodNameTest"); assert(adjustMethodStyle("MethodNameTest", MethodStyle.lowerCase) == "methodnametest"); assert(adjustMethodStyle("MethodNameTest", MethodStyle.upperCase) == "METHODNAMETEST"); assert(adjustMethodStyle("MethodNameTest", MethodStyle.lowerUnderscored) == "method_name_test"); assert(adjustMethodStyle("MethodNameTest", MethodStyle.upperUnderscored) == "METHOD_NAME_TEST"); assert(adjustMethodStyle("Q", MethodStyle.lowerUnderscored) == "q"); assert(adjustMethodStyle("getHTML", MethodStyle.lowerUnderscored) == "get_html"); assert(adjustMethodStyle("getHTMLEntity", MethodStyle.lowerUnderscored) == "get_html_entity"); assert(adjustMethodStyle("ID", MethodStyle.lowerUnderscored) == "id"); assert(adjustMethodStyle("ID", MethodStyle.pascalCase) == "ID"); assert(adjustMethodStyle("ID", MethodStyle.camelCase) == "id"); assert(adjustMethodStyle("IDTest", MethodStyle.lowerUnderscored) == "id_test"); assert(adjustMethodStyle("IDTest", MethodStyle.pascalCase) == "IDTest"); assert(adjustMethodStyle("IDTest", MethodStyle.camelCase) == "idTest"); assert(adjustMethodStyle("anyA", MethodStyle.lowerUnderscored) == "any_a", adjustMethodStyle("anyA", MethodStyle.lowerUnderscored)); } /** Determines the HTTP method and path for a given function symbol. The final method and path are determined from the function name, as well as any $(D @method) and $(D @path) attributes that may be applied to it. This function is designed for CTFE usage and will assert at run time. Returns: A tuple of three elements is returned: $(UL $(LI flag "was UDA used to override path") $(LI $(D HTTPMethod) extracted) $(LI URL path extracted) ) */ auto extractHTTPMethodAndName(alias Func, bool indexSpecialCase)() { if (!__ctfe) assert(false); struct HandlerMeta { bool hadPathUDA; HTTPMethod method; string url; } import vibe.internal.meta.uda : findFirstUDA; import vibe.internal.meta.traits : isPropertySetter, isPropertyGetter; import std.algorithm : startsWith; import std.typecons : Nullable; immutable httpMethodPrefixes = [ HTTPMethod.GET : [ "get", "query" ], HTTPMethod.PUT : [ "put", "set" ], HTTPMethod.PATCH : [ "update", "patch" ], HTTPMethod.POST : [ "add", "create", "post" ], HTTPMethod.DELETE : [ "remove", "erase", "delete" ], ]; enum name = __traits(identifier, Func); alias T = typeof(&Func); Nullable!HTTPMethod udmethod; Nullable!string udurl; // Cases may conflict and are listed in order of priority // Workaround for Nullable incompetence enum uda1 = findFirstUDA!(MethodAttribute, Func); enum uda2 = findFirstUDA!(PathAttribute, Func); static if (uda1.found) { udmethod = uda1.value; } static if (uda2.found) { udurl = uda2.value; } // Everything is overriden, no further analysis needed if (!udmethod.isNull() && !udurl.isNull()) { return HandlerMeta(true, udmethod.get(), udurl.get()); } // Anti-copy-paste delegate typeof(return) udaOverride( HTTPMethod method, string url ){ return HandlerMeta( !udurl.isNull(), udmethod.isNull() ? method : udmethod.get(), udurl.isNull() ? url : udurl.get() ); } if (isPropertyGetter!T) { return udaOverride(HTTPMethod.GET, name); } else if(isPropertySetter!T) { return udaOverride(HTTPMethod.PUT, name); } else { foreach (method, prefixes; httpMethodPrefixes) { foreach (prefix; prefixes) { import std.uni : isLower; if (name.startsWith(prefix) && (name.length == prefix.length || !name[prefix.length].isLower)) { string tmp = name[prefix.length..$]; return udaOverride(method, tmp.length ? tmp : "/"); } } } static if (indexSpecialCase && name == "index") { return udaOverride(HTTPMethod.GET, "/"); } else return udaOverride(HTTPMethod.POST, name); } } unittest { interface Sample { string getInfo(); string updateDescription(); @method(HTTPMethod.DELETE) string putInfo(); @path("matters") string getMattersnot(); @path("compound/path") @method(HTTPMethod.POST) string mattersnot(); string get(); string posts(); string patches(); } enum ret1 = extractHTTPMethodAndName!(Sample.getInfo, false,); static assert (ret1.hadPathUDA == false); static assert (ret1.method == HTTPMethod.GET); static assert (ret1.url == "Info"); enum ret2 = extractHTTPMethodAndName!(Sample.updateDescription, false); static assert (ret2.hadPathUDA == false); static assert (ret2.method == HTTPMethod.PATCH); static assert (ret2.url == "Description"); enum ret3 = extractHTTPMethodAndName!(Sample.putInfo, false); static assert (ret3.hadPathUDA == false); static assert (ret3.method == HTTPMethod.DELETE); static assert (ret3.url == "Info"); enum ret4 = extractHTTPMethodAndName!(Sample.getMattersnot, false); static assert (ret4.hadPathUDA == true); static assert (ret4.method == HTTPMethod.GET); static assert (ret4.url == "matters"); enum ret5 = extractHTTPMethodAndName!(Sample.mattersnot, false); static assert (ret5.hadPathUDA == true); static assert (ret5.method == HTTPMethod.POST); static assert (ret5.url == "compound/path"); enum ret6 = extractHTTPMethodAndName!(Sample.get, false); static assert (ret6.hadPathUDA == false); static assert (ret6.method == HTTPMethod.GET); static assert (ret6.url == "/"); enum ret7 = extractHTTPMethodAndName!(Sample.posts, false); static assert(ret7.hadPathUDA == false); static assert(ret7.method == HTTPMethod.POST); static assert(ret7.url == "posts"); enum ret8 = extractHTTPMethodAndName!(Sample.patches, false); static assert(ret8.hadPathUDA == false); static assert(ret8.method == HTTPMethod.POST); static assert(ret8.url == "patches"); } /** Attribute to define the content type for methods. This currently applies only to methods returning an $(D InputStream) or $(D ubyte[]). */ ContentTypeAttribute contentType(string data) @safe { if (!__ctfe) assert(false, onlyAsUda!__FUNCTION__); return ContentTypeAttribute(data); } /** Attribute to force a specific HTTP method for an interface method. The usual URL generation rules are still applied, so if there are any "get", "query" or similar prefixes, they are filtered out. */ MethodAttribute method(HTTPMethod data) @safe { if (!__ctfe) assert(false, onlyAsUda!__FUNCTION__); return MethodAttribute(data); } /// unittest { interface IAPI { // Will be "POST /info" instead of default "GET /info" @method(HTTPMethod.POST) string getInfo(); } } /** Attibute to force a specific URL path. This attribute can be applied either to an interface itself, in which case it defines the root path for all methods within it, or on any function, in which case it defines the relative path of this method. Path are always relative, even path on interfaces, as you can see in the example below. See_Also: $(D rootPathFromName) for automatic name generation. */ PathAttribute path(string data) @safe { if (!__ctfe) assert(false, onlyAsUda!__FUNCTION__); return PathAttribute(data); } /// @safe unittest { @path("/foo") interface IAPI { @path("info2") string getInfo() @safe; } class API : IAPI { string getInfo() @safe { return "Hello, World!"; } } void test() @safe { import vibe.http.router; import vibe.web.rest; auto router = new URLRouter; // Tie IAPI.getInfo to "GET /root/foo/info2" router.registerRestInterface!IAPI(new API(), "/root/"); // Or just to "GET /foo/info2" router.registerRestInterface!IAPI(new API()); // ... } } /// Convenience alias to generate a name from the interface's name. @property PathAttribute rootPathFromName() @safe { if (!__ctfe) assert(false, onlyAsUda!__FUNCTION__); return PathAttribute(""); } /// @safe unittest { import vibe.http.router; import vibe.web.rest; @rootPathFromName interface IAPI { int getFoo() @safe; } class API : IAPI { int getFoo() { return 42; } } auto router = new URLRouter(); registerRestInterface(router, new API()); auto routes= router.getAllRoutes(); assert(routes[0].pattern == "/iapi/foo" && routes[0].method == HTTPMethod.GET); } /** Methods marked with this attribute will not be treated as web endpoints. This attribute enables the definition of public methods that do not take part in the interface genration process. */ @property NoRouteAttribute noRoute() { import vibe.web.common : onlyAsUda; if (!__ctfe) assert(false, onlyAsUda!__FUNCTION__); return NoRouteAttribute.init; } /// unittest { interface IAPI { // Accessible as "GET /info" string getInfo(); // Not accessible over HTTP @noRoute int getFoo(); } } /** Respresents a Rest error response */ class RestException : HTTPStatusException { private { Json m_jsonResult; } @safe: /// this(int status, Json jsonResult, string file = __FILE__, int line = __LINE__, Throwable next = null) { if (jsonResult.type == Json.Type.Object && jsonResult["statusMessage"].type == Json.Type.String) { super(status, jsonResult["statusMessage"].get!string, file, line, next); } else { super(status, httpStatusText(status) ~ " (" ~ jsonResult.toString() ~ ")", file, line, next); } m_jsonResult = jsonResult; } /// The HTTP status code @property const(Json) jsonResult() const { return m_jsonResult; } } /// private package struct ContentTypeAttribute { string data; alias data this; } /// private package struct MethodAttribute { HTTPMethod data; alias data this; } /// private package struct PathAttribute { string data; alias data this; } /// private package struct NoRouteAttribute {} /// Private struct describing the origin of a parameter (Query, Header, Body). package struct WebParamAttribute { import vibe.web.internal.rest.common : ParameterKind; ParameterKind origin; /// Parameter name string identifier; /// The meaning of this field depends on the origin. string field; } /** * Declare that a parameter will be transmitted to the API through the body. * * It will be serialized as part of a JSON object. * The serialization format is currently not customizable. * If no fieldname is given, the entire body is serialized into the object. * * Params: * - identifier: The name of the parameter to customize. A compiler error will be issued on mismatch. * - field: The name of the field in the JSON object. * * ---- * @bodyParam("pack", "package") * void ship(int pack); * // The server will receive the following body for a call to ship(42): * // { "package": 42 } * ---- */ WebParamAttribute bodyParam(string identifier, string field) @safe in { assert(field.length > 0, "fieldname can't be empty."); } body { import vibe.web.internal.rest.common : ParameterKind; if (!__ctfe) assert(false, onlyAsUda!__FUNCTION__); return WebParamAttribute(ParameterKind.body_, identifier, field); } /// ditto WebParamAttribute bodyParam(string identifier) @safe { import vibe.web.internal.rest.common : ParameterKind; if (!__ctfe) assert(false, onlyAsUda!__FUNCTION__); return WebParamAttribute(ParameterKind.body_, identifier, ""); } /** * Declare that a parameter will be transmitted to the API through the headers. * * If the parameter is a string, or any scalar type (float, int, char[], ...), it will be send as a string. * If it's an aggregate, it will be serialized as JSON. * However, passing aggregate via header isn't a good practice and should be avoided for new production code. * * Params: * - identifier: The name of the parameter to customize. A compiler error will be issued on mismatch. * - field: The name of the header field to use (e.g: 'Accept', 'Content-Type'...). * * ---- * // The server will receive the content of the "Authorization" header. * @headerParam("auth", "Authorization") * void login(string auth); * ---- */ WebParamAttribute headerParam(string identifier, string field) @safe { import vibe.web.internal.rest.common : ParameterKind; if (!__ctfe) assert(false, onlyAsUda!__FUNCTION__); return WebParamAttribute(ParameterKind.header, identifier, field); } /** * Declare that a parameter will be transmitted to the API through the query string. * * It will be serialized as part of a JSON object, and will go through URL serialization. * The serialization format is not customizable. * * Params: * - identifier: The name of the parameter to customize. A compiler error will be issued on mismatch. * - field: The field name to use. * * ---- * // For a call to postData("D is awesome"), the server will receive the query: * // POST /data?test=%22D is awesome%22 * @queryParam("data", "test") * void postData(string data); * ---- */ WebParamAttribute queryParam(string identifier, string field) @safe { import vibe.web.internal.rest.common : ParameterKind; if (!__ctfe) assert(false, onlyAsUda!__FUNCTION__); return WebParamAttribute(ParameterKind.query, identifier, field); } /** Determines the naming convention of an identifier. */ enum MethodStyle { /// Special value for free-style conventions unaltered, /// camelCaseNaming camelCase, /// PascalCaseNaming pascalCase, /// lowercasenaming lowerCase, /// UPPERCASENAMING upperCase, /// lower_case_naming lowerUnderscored, /// UPPER_CASE_NAMING upperUnderscored, /// deprecated Unaltered = unaltered, /// deprecated CamelCase = camelCase, /// deprecated PascalCase = pascalCase, /// deprecated LowerCase = lowerCase, /// deprecated UpperCase = upperCase, /// deprecated LowerUnderscored = lowerUnderscored, /// deprecated UpperUnderscored = upperUnderscored, } /// Speficies how D fields are mapped to form field names enum NestedNameStyle { underscore, /// Use underscores to separate fields and array indices d /// Use native D style and separate fields by dots and put array indices into brackets } // concatenates two URL parts avoiding any duplicate slashes // in resulting URL. `trailing` defines of result URL must // end with slash package string concatURL(string prefix, string url, bool trailing = false) @safe { import std.algorithm : startsWith, endsWith; auto pre = prefix.endsWith("/"); auto post = url.startsWith("/"); if (!url.length) return trailing && !pre ? prefix ~ "/" : prefix; auto suffix = trailing && !url.endsWith("/") ? "/" : null; if (pre) { // "/" is ASCII, so can just slice if (post) return prefix ~ url[1 .. $] ~ suffix; else return prefix ~ url ~ suffix; } else { if (post) return prefix ~ url ~ suffix; else return prefix ~ "/" ~ url ~ suffix; } } @safe unittest { assert(concatURL("/test/", "/it/", false) == "/test/it/"); assert(concatURL("/test", "it/", false) == "/test/it/"); assert(concatURL("/test", "it", false) == "/test/it"); assert(concatURL("/test", "", false) == "/test"); assert(concatURL("/test/", "", false) == "/test/"); assert(concatURL("/test/", "/it/", true) == "/test/it/"); assert(concatURL("/test", "it/", true) == "/test/it/"); assert(concatURL("/test", "it", true) == "/test/it/"); assert(concatURL("/test", "", true) == "/test/"); assert(concatURL("/test/", "", true) == "/test/"); } /// private template isNullable(T) { import std.traits; enum isNullable = isInstanceOf!(Nullable, T); } static assert(isNullable!(Nullable!int)); package struct ParamError { string field; string text; string debugText; } package enum ParamResult { ok, skipped, error } // NOTE: dst is assumed to be uninitialized package ParamResult readFormParamRec(T)(scope HTTPServerRequest req, ref T dst, string fieldname, bool required, NestedNameStyle style, ref ParamError err) { import std.traits; import std.typecons; import vibe.data.serialization; static if (isDynamicArray!T && !isSomeString!T) { alias EL = typeof(T.init[0]); static assert(!is(EL == bool), "Boolean arrays are not allowed, because their length cannot " ~ "be uniquely determined. Use a static array instead."); size_t idx = 0; dst = T.init; while (true) { EL el = void; auto r = readFormParamRec(req, el, style.getArrayFieldName(fieldname, idx), false, style, err); if (r == ParamResult.error) return r; if (r == ParamResult.skipped) break; dst ~= el; idx++; } } else static if (isStaticArray!T) { foreach (i; 0 .. T.length) { auto r = readFormParamRec(req, dst[i], style.getArrayFieldName(fieldname, i), true, style, err); if (r == ParamResult.error) return r; assert(r != ParamResult.skipped); break; } } else static if (isNullable!T) { typeof(dst.get()) el = void; auto r = readFormParamRec(req, el, fieldname, false, style, err); final switch (r) { case ParamResult.ok: dst.setVoid(el); break; case ParamResult.skipped: dst.setVoid(T.init); break; case ParamResult.error: return ParamResult.error; } } else static if (is(T == struct) && !is(typeof(T.fromString(string.init))) && !is(typeof(T.fromStringValidate(string.init, null))) && !is(typeof(T.fromISOExtString(string.init)))) { foreach (m; __traits(allMembers, T)) { auto r = readFormParamRec(req, __traits(getMember, dst, m), style.getMemberFieldName(fieldname, m), required, style, err); if (r != ParamResult.ok) return r; // FIXME: in case of errors the struct will be only partially initialized! All previous fields should be deinitialized first. } } else static if (is(T == bool)) { dst = (fieldname in req.form) !is null || (fieldname in req.query) !is null; } else if (auto pv = fieldname in req.form) { if (!(*pv).webConvTo(dst, err)) { err.field = fieldname; return ParamResult.error; } } else if (auto pv = fieldname in req.query) { if (!(*pv).webConvTo(dst, err)) { err.field = fieldname; return ParamResult.error; } } else if (required) { err.field = fieldname; err.text = "Missing form field."; return ParamResult.error; } else return ParamResult.skipped; return ParamResult.ok; } package bool webConvTo(T)(string str, ref T dst, ref ParamError err) nothrow { import std.conv; import std.exception; try { static if (is(typeof(T.fromStringValidate(str, &err.text)))) { static assert(is(typeof(T.fromStringValidate(str, &err.text)) == Nullable!T)); auto res = T.fromStringValidate(str, &err.text); if (res.isNull()) return false; dst.setVoid(res); } else static if (is(typeof(T.fromString(str)))) { static assert(is(typeof(T.fromString(str)) == T)); dst.setVoid(T.fromString(str)); } else static if (is(typeof(T.fromISOExtString(str)))) { static assert(is(typeof(T.fromISOExtString(str)) == T)); dst.setVoid(T.fromISOExtString(str)); } else { dst.setVoid(str.to!T()); } } catch (Exception e) { import vibe.core.log : logDebug; import std.encoding : sanitize; err.text = e.msg; debug try logDebug("Error converting web field: %s", e.toString().sanitize); catch (Exception) {} return false; } return true; } // properly sets an uninitialized variable package void setVoid(T, U)(ref T dst, U value) { import std.traits; static if (hasElaborateAssign!T) { static if (is(T == U)) { (cast(ubyte*)&dst)[0 .. T.sizeof] = (cast(ubyte*)&value)[0 .. T.sizeof]; typeid(T).postblit(&dst); } else { static T init = T.init; (cast(ubyte*)&dst)[0 .. T.sizeof] = (cast(ubyte*)&init)[0 .. T.sizeof]; dst = value; } } else dst = value; } unittest { static assert(!__traits(compiles, { bool[] barr; ParamError err;readFormParamRec(null, barr, "f", true, NestedNameStyle.d, err); })); static assert(__traits(compiles, { bool[2] barr; ParamError err;readFormParamRec(null, barr, "f", true, NestedNameStyle.d, err); })); } private string getArrayFieldName(T)(NestedNameStyle style, string prefix, T index) { import std.format : format; final switch (style) { case NestedNameStyle.underscore: return format("%s_%s", prefix, index); case NestedNameStyle.d: return format("%s[%s]", prefix, index); } } private string getMemberFieldName(NestedNameStyle style, string prefix, string member) @safe { import std.format : format; final switch (style) { case NestedNameStyle.underscore: return format("%s_%s", prefix, member); case NestedNameStyle.d: return format("%s.%s", prefix, member); } } vibe.d-0.8.2/web/vibe/web/i18n.d000066400000000000000000000633601324361747700161210ustar00rootroot00000000000000/** Internationalization/translation support for the web interface module. Copyright: © 2014-2017 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.web.i18n; import vibe.http.server : HTTPServerRequest; import std.algorithm : canFind, min, startsWith; import std.range.primitives : ElementType, isForwardRange, save; import std.range : only; /** Annotates an interface method or class with translation information. The translation context contains information about supported languages and the translated strings. Any translations will be automatically applied to Diet templates, as well as strings passed to $(D vibe.web.web.trWeb). By default, the "Accept-Language" header of the incoming request will be used to determine the language used. To override this behavior, add a static method $(D determineLanguage) to the translation context, which takes the request and returns a language string (see also the second example). */ @property TranslationContextAttribute!CONTEXT translationContext(CONTEXT)() { return TranslationContextAttribute!CONTEXT.init; } /// unittest { import vibe.http.router : URLRouter; import vibe.web.web : registerWebInterface; struct TranslationContext { import std.typetuple; alias languages = TypeTuple!("en_US", "de_DE", "fr_FR"); //mixin translationModule!"app"; //mixin translationModule!"somelib"; } @translationContext!TranslationContext class MyWebInterface { void getHome() { //render!("home.dt") } } void test(URLRouter router) { router.registerWebInterface(new MyWebInterface); } } /// Defining a custom function for determining the language. unittest { import vibe.http.router : URLRouter; import vibe.http.server; import vibe.web.web : registerWebInterface; struct TranslationContext { import std.typetuple; // A language can be in the form en_US, en-US or en. Put the languages you want to prioritize first. alias languages = TypeTuple!("en_US", "de_DE", "fr_FR"); //mixin translationModule!"app"; //mixin translationModule!"somelib"; // use language settings from the session instead of using the // "Accept-Language" header static string determineLanguage(scope HTTPServerRequest req) { if (!req.session) return req.determineLanguageByHeader(languages); // default behaviour using "Accept-Language" header return req.session.get("language", ""); } } @translationContext!TranslationContext class MyWebInterface { void getHome() { //render!("home.dt") } } void test(URLRouter router) { router.registerWebInterface(new MyWebInterface); } } @safe unittest { import vibe.http.router : URLRouter; import vibe.http.server : HTTPServerRequest; import vibe.web.web : registerWebInterface; struct TranslationContext { import std.typetuple; alias languages = TypeTuple!("en_US", "de_DE", "fr_FR"); static string determineLanguage(scope HTTPServerRequest req) { return "en_US"; } } @translationContext!TranslationContext class MyWebInterface { void getHome() @safe {} } auto router = new URLRouter; router.registerWebInterface(new MyWebInterface); } struct TranslationContextAttribute(CONTEXT) { alias Context = CONTEXT; } /* doctype 5 html body p& Hello, World! p& This is a translated version of #{appname}. html p(class="Sasdasd")&. This is a complete paragraph of translated text. */ /** Makes a set of PO files available to a web interface class. This mixin template needs to be mixed in at the class scope. It will parse all translation files with the specified file name prefix and make their translations available. Params: FILENAME = Base name of the set of PO files to mix in. A file with the name "..po" must be available as a string import for each language defined in the translation context. Bugs: `FILENAME` should not contain (back)slash characters, as string imports from sub directories will currently fail on Windows. See $(LINK https://issues.dlang.org/show_bug.cgi?id=14349). See_Also: `translationContext` */ mixin template translationModule(string FILENAME) { import std.string : tr; enum NAME = FILENAME.tr(`/.-\`, "____"); private static string file_mixins() { string ret; foreach (language; languages) ret ~= "enum "~language~"_"~NAME~" = extractDeclStrings(import(`"~FILENAME~"."~language~".po`));\n"; return ret; } mixin(file_mixins); } template languageSeq(CTX) { static if (is(typeof([CTX.languages]) : string[])) alias languageSeq = CTX.languages; else alias languageSeq = aliasSeqOf!(CTX.languages); } /** Performs the string translation for a statically given language. The second overload takes a plural form and a number to select from a set of translations based on the plural forms of the target language. */ template tr(CTX, string LANG) { string tr(string key, string context = null) { return tr!(CTX, LANG)(key, null, 0, context); } string tr(string key, string key_plural, int n, string context = null) { static assert([languageSeq!CTX].canFind(LANG), "Unknown language: "~LANG); foreach (i, mname; __traits(allMembers, CTX)) { static if (mname.startsWith(LANG~"_")) { enum langComponents = __traits(getMember, CTX, mname); foreach (entry; langComponents.messages) { if ((context is null) == (entry.context is null)) { if (context is null || entry.context == context) { if (entry.key == key) { if (key_plural !is null) { if (entry.pluralKey !is null && entry.pluralKey == key_plural) { static if (langComponents.nplurals_expr !is null && langComponents.plural_func_expr !is null) { mixin("int nplurals = "~langComponents.nplurals_expr~";"); if (nplurals > 0) { mixin("int index = "~langComponents.plural_func_expr~";"); return entry.pluralValues[index]; } return entry.value; } assert(false, "Plural translations are not supported when the po file does not contain an entry for Plural-Forms."); } } else { return entry.value; } } } } } } } static if (is(typeof(CTX.enforceExistingKeys)) && CTX.enforceExistingKeys) { if (key_plural !is null) { if (context is null) { assert(false, "Missing translation keys for "~LANG~": "~key~"&"~key_plural); } assert(false, "Missing translation key for "~LANG~"; "~context~": "~key~"&"~key_plural); } if (context is null) { assert(false, "Missing translation key for "~LANG~": "~key); } assert(false, "Missing translation key for "~LANG~"; "~context~": "~key); } else { return n == 1 || !key_plural.length ? key : key_plural; } } } /// Determines a language code from the value of a header string. /// Returns: The best match from the Accept-Language header for a language. `null` if there is no supported language. public string determineLanguageByHeader(T)(string accept_language, T allowed_languages) @safe pure @nogc if (isForwardRange!T && is(ElementType!T : string) || is(T == typeof(only()))) { import std.algorithm : splitter, countUntil; import std.string : indexOf; // TODO: verify that allowed_languages doesn't contain a mix of languages with and without extra specifier for the same lanaguage (but only if one without specifier comes before those with specifier) // Implementing that feature should try to give a compile time warning and not change the behaviour of this function. if (!accept_language.length) return null; string fallback = null; foreach (accept; accept_language.splitter(",")) { auto sidx = accept.indexOf(';'); if (sidx >= 0) accept = accept[0 .. sidx]; string alang, aextra; auto asep = accept.countUntil!(a => a == '_' || a == '-'); if (asep < 0) alang = accept; else { alang = accept[0 .. asep]; aextra = accept[asep + 1 .. $]; } static if (!is(T == typeof(only()))) { // workaround for type errors foreach (lang; allowed_languages.save) { string lcode, lextra; sidx = lang.countUntil!(a => a == '_' || a == '-'); if (sidx < 0) lcode = lang; else { lcode = lang[0 .. sidx]; lextra = lang[sidx + 1 .. $]; } // request en_US == serve en_US if (lcode == alang && lextra == aextra) return lang; // request en_* == serve en if (lcode == alang && !lextra.length) return lang; // request en* == serve en_* && be first occurence if (lcode == alang && lextra.length && !fallback.length) fallback = lang; } } } return fallback; } /// ditto public string determineLanguageByHeader(Tuple...)(string accept_language, Tuple allowed_languages) @safe pure @nogc if (Tuple.length != 1 || is(Tuple[0] : string)) { return determineLanguageByHeader(accept_language, only(allowed_languages)); } /// ditto public string determineLanguageByHeader(T)(HTTPServerRequest req, T allowed_languages) @safe pure if (isForwardRange!T && is(ElementType!T : string) || is(T == typeof(only()))) { return determineLanguageByHeader(req.headers.get("Accept-Language", null), allowed_languages); } /// ditto public string determineLanguageByHeader(Tuple...)(HTTPServerRequest req, Tuple allowed_languages) @safe pure if (Tuple.length != 1 || is(Tuple[0] : string)) { return determineLanguageByHeader(req.headers.get("Accept-Language", null), only(allowed_languages)); } @safe unittest { assert(determineLanguageByHeader("de,de-DE;q=0.8,en;q=0.6,en-US;q=0.4", ["en-US", "de_DE", "de_CH"]) == "de_DE"); assert(determineLanguageByHeader("de,de-CH;q=0.8,en;q=0.6,en-US;q=0.4", ["en_US", "de_DE", "de-CH"]) == "de-CH"); assert(determineLanguageByHeader("en_CA,en_US", ["ja_JP", "en"]) == "en"); assert(determineLanguageByHeader("en", ["ja_JP", "en"]) == "en"); assert(determineLanguageByHeader("en", ["ja_JP", "en_US"]) == "en_US"); assert(determineLanguageByHeader("en_US", ["ja-JP", "en"]) == "en"); assert(determineLanguageByHeader("de,de-DE;q=0.8,en;q=0.6,en-US;q=0.4", ["ja_JP"]) is null); assert(determineLanguageByHeader("de, de-DE ;q=0.8 , en ;q=0.6 , en-US;q=0.4", ["de-DE"]) == "de-DE"); assert(determineLanguageByHeader("en_GB", ["en_US"]) == "en_US"); assert(determineLanguageByHeader("de_DE", ["en_US"]) is null); assert(determineLanguageByHeader("en_US,enCA", ["en_GB"]) == "en_GB"); assert(determineLanguageByHeader("en_US,enCA", ["en_GB", "en"]) == "en"); assert(determineLanguageByHeader("en_US,enCA", ["en", "en_GB"]) == "en"); // TODO from above (should be invalid input having a more generic language first in the list!) //assert(determineLanguageByHeader("en_US,enCA", ["en", "en_US"]) == "en_US"); } package string determineLanguage(alias METHOD)(scope HTTPServerRequest req) { alias CTX = GetTranslationContext!METHOD; static if (!is(CTX == void)) { static if (is(typeof(CTX.determineLanguage(req)))) { static assert(is(typeof(CTX.determineLanguage(req)) == string), "determineLanguage in a translation context must return a language string."); return CTX.determineLanguage(req); } else { return determineLanguageByHeader(req, only(CTX.languages)); } } else return null; } unittest { // make sure that the custom determineLanguage is called static struct CTX { static string determineLanguage(Object a) { return "test"; } } @translationContext!CTX static class Test { void test() { } } auto test = new Test; assert(determineLanguage!(test.test)(null) == "test"); } unittest { // issue #1955 import std.meta : AliasSeq; import vibe.inet.url : URL; import vibe.http.server : createTestHTTPServerRequest; static struct CTX { alias languages = AliasSeq!(); } @translationContext!CTX class C { void test() {} } auto req = createTestHTTPServerRequest(URL("http://127.0.0.1/test")); assert(determineLanguage!(C.test)(req) == null); } package template GetTranslationContext(alias METHOD) { import vibe.internal.meta.uda; alias PARENT = typeof(__traits(parent, METHOD).init); enum FUNCTRANS = findFirstUDA!(TranslationContextAttribute, METHOD); enum PARENTTRANS = findFirstUDA!(TranslationContextAttribute, PARENT); static if (FUNCTRANS.found) alias GetTranslationContext = FUNCTRANS.value.Context; else static if (PARENTTRANS.found) alias GetTranslationContext = PARENTTRANS.value.Context; else alias GetTranslationContext = void; } private struct DeclString { string context; string key; string pluralKey; string value; string[] pluralValues; } private struct LangComponents { DeclString[] messages; string nplurals_expr; string plural_func_expr; } // Example po header /* * # Translation of kstars.po into Spanish. * # This file is distributed under the same license as the kdeedu package. * # Pablo de Vicente , 2005, 2006, 2007, 2008. * # Eloy Cuadra , 2007, 2008. * msgid "" * msgstr "" * "Project-Id-Version: kstars\n" * "Report-Msgid-Bugs-To: http://bugs.kde.org\n" * "POT-Creation-Date: 2008-09-01 09:37+0200\n" * "PO-Revision-Date: 2008-07-22 18:13+0200\n" * "Last-Translator: Eloy Cuadra \n" * "Language-Team: Spanish \n" * "MIME-Version: 1.0\n" * "Content-Type: text/plain; charset=UTF-8\n" * "Content-Transfer-Encoding: 8bit\n" * "Plural-Forms: nplurals=2; plural=n != 1;\n" */ // PO format notes /* * # - Translator comment * #: - source reference * #. - extracted comments * #, - flags such as "c-format" to indicate what king of substitutions may be present * #| msgid - previous string comment * #~ - obsolete message * msgctxt - disabmbiguating context, like variable scope (optional, defaults to null) * msgid - key to translate from (required) * msgid_plural - plural form of the msg id (optional) * msgstr - value to translate to (required) * msgstr[0] - indexed translation for handling the various plural forms * msgstr[1] - ditto * msgstr[2] - ditto and etc... */ LangComponents extractDeclStrings(string text) { DeclString[] declStrings; string nplurals_expr; string plural_func_expr; size_t i = 0; while (true) { i = skipToDirective(i, text); if (i >= text.length) break; string context = null; // msgctxt is an optional field if (text.length - i >= 7 && text[i .. i+7] == "msgctxt") { i = skipWhitespace(i+7, text); auto icntxt = skipString(i, text); context = dstringUnescape(wrapText(text[i+1 .. icntxt-1])); i = skipToDirective(icntxt, text); } // msgid is a required field assert(text.length - i >= 5 && text[i .. i+5] == "msgid", "Expected 'msgid', got '"~text[i .. min(i+10, $)]~"'."); i += 5; i = skipWhitespace(i, text); auto iknext = skipString(i, text); auto key = dstringUnescape(wrapText(text[i+1 .. iknext-1])); i = iknext; i = skipToDirective(i, text); // msgid_plural is an optional field string key_plural = null; if (text.length - i >= 12 && text[i .. i+12] == "msgid_plural") { i = skipWhitespace(i+12, text); auto iprl = skipString(i, text); key_plural = dstringUnescape(wrapText(text[i+1 .. iprl-1])); i = skipToDirective(iprl, text); } // msgstr is a required field assert(text.length - i >= 6 && text[i .. i+6] == "msgstr", "Expected 'msgstr', got '"~text[i .. min(i+10, $)]~"'."); i += 6; i = skipWhitespace(i, text); auto ivnext = skipString(i, text); auto value = dstringUnescape(wrapText(text[i+1 .. ivnext-1])); i = ivnext; i = skipToDirective(i, text); // msgstr[n] is a required field when msgid_plural is not null, and ignored otherwise string[] value_plural; if (key_plural !is null) { while (text.length - i >= 6 && text[i .. i+6] == "msgstr") { i = skipIndex(i+6, text); i = skipWhitespace(i, text); auto ims = skipString(i, text); string plural = dstringUnescape(wrapText(text[i+1 .. ims-1])); i = skipLine(ims, text); // Is it safe to assume that the entries are always sequential? value_plural ~= plural; } } // Add the translation for the current language if (key == "") { nplurals_expr = parse_nplurals(value); plural_func_expr = parse_plural_expression(value); } declStrings ~= DeclString(context, key, key_plural, value, value_plural); } return LangComponents(declStrings, nplurals_expr, plural_func_expr); } // Verify that two simple messages can be read and parsed correctly unittest { auto str = ` # first string msgid "ordinal.1" msgstr "first" # second string msgid "ordinal.2" msgstr "second"`; auto components = extractDeclStrings(str); auto ds = components.messages; assert(2 == ds.length, "Not enough DeclStrings have been processed"); assert(ds[0].key == "ordinal.1", "The first key is not right."); assert(ds[0].value == "first", "The first value is not right."); assert(ds[1].key == "ordinal.2", "The second key is not right."); assert(ds[1].value == "second", "The second value is not right."); } // Verify that the fields cannot be defined out of order unittest { import core.exception : AssertError; import std.exception : assertThrown; auto str1 = ` # unexpected field ahead msgstr "world" msgid "hello"`; assertThrown!AssertError(extractDeclStrings(str1)); } // Verify that string wrapping is handled correctly unittest { auto str = ` # The following text is wrapped msgid "" "This is an example of text that " "has been wrapped on two lines." msgstr "" "It should not matter where it takes place, " "the strings should all be concatenated properly."`; auto ds = extractDeclStrings(str).messages; assert(1 == ds.length, "Expected one DeclString to have been processed."); assert(ds[0].key == "This is an example of text that has been wrapped on two lines.", "Failed to properly wrap the key"); assert(ds[0].value == "It should not matter where it takes place, the strings should all be concatenated properly.", "Failed to properly wrap the key"); } // Verify that string wrapping and unescaping is handled correctly on example of PO headers unittest { auto str = ` # English translations for ThermoWebUI package. # This file is put in the public domain. # Automatically generated, 2015. # msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: developer@example.com\n" "POT-Creation-Date: 2015-04-13 17:55+0600\n" "PO-Revision-Date: 2015-04-13 14:13+0600\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" `; auto expected = `Project-Id-Version: PROJECT VERSION Report-Msgid-Bugs-To: developer@example.com POT-Creation-Date: 2015-04-13 17:55+0600 PO-Revision-Date: 2015-04-13 14:13+0600 Last-Translator: Automatically generated Language-Team: none Language: en MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); `; auto ds = extractDeclStrings(str).messages; assert(1 == ds.length, "Expected one DeclString to have been processed."); assert(ds[0].key == "", "Failed to properly wrap or unescape the key"); assert(ds[0].value == expected, "Failed to properly wrap or unescape the value"); } // Verify that the message context is properly parsed unittest { auto str1 = ` # "C" is for cookie msgctxt "food" msgid "C" msgstr "C is for cookie, that's good enough for me."`; auto ds1 = extractDeclStrings(str1).messages; assert(1 == ds1.length, "Expected one DeclString to have been processed."); assert(ds1[0].context == "food", "Expected a context of food"); assert(ds1[0].key == "C", "Expected to find the letter C for the msgid."); assert(ds1[0].value == "C is for cookie, that's good enough for me.", "Unexpected value encountered for the msgstr."); auto str2 = ` # No context validation msgid "alpha" msgstr "First greek letter."`; auto ds2 = extractDeclStrings(str2).messages; assert(1 == ds2.length, "Expected one DeclString to have been processed."); assert(ds2[0].context is null, "Expected the context to be null when it is not defined."); } unittest { enum str = ` # "C" is for cookie msgctxt "food" msgid "C" msgstr "C is for cookie, that's good enough for me." # "C" is for language msgctxt "lang" msgid "C" msgstr "Catalan" # Just "C" msgid "C" msgstr "Third letter" `; enum components = extractDeclStrings(str); struct TranslationContext { import std.typetuple; enum enforceExistingKeys = true; alias languages = TypeTuple!("en_US"); // Note that this is normally handled by mixing in an external file. enum en_US_unittest = components; } auto newTr(string msgid, string msgcntxt = null) { return tr!(TranslationContext, "en_US")(msgid, msgcntxt); } assert(newTr("C", "food") == "C is for cookie, that's good enough for me.", "Unexpected translation based on context."); assert(newTr("C", "lang") == "Catalan", "Unexpected translation based on context."); assert(newTr("C") == "Third letter", "Unexpected translation based on context."); } unittest { enum str = `msgid "" msgstr "" "Project-Id-Version: kstars\\n" "Plural-Forms: nplurals=2; plural=n != 1;\\n" msgid "One file was deleted." msgid_plural "Files were deleted." msgstr "One file was deleted." msgstr[0] "1 file was deleted." msgstr[1] "%d files were deleted." msgid "One file was created." msgid_plural "Several files were created." msgstr "One file was created." msgstr[0] "1 file was created" msgstr[1] "%d files were created." `; import std.stdio; enum components = extractDeclStrings(str); struct TranslationContext { import std.typetuple; enum enforceExistingKeys = true; alias languages = TypeTuple!("en_US"); // Note that this is normally handled by mixing in an external file. enum en_US_unittest2 = components; } auto newTr(string msgid, string msgid_plural, int count, string msgcntxt = null) { return tr!(TranslationContext, "en_US")(msgid, msgid_plural, count, msgcntxt); } string expected = "1 file was deleted."; auto actual = newTr("One file was deleted.", "Files were deleted.", 1); assert(expected == actual, "Expected: '"~expected~"' but got '"~actual~"'"); expected = "%d files were deleted."; actual = newTr("One file was deleted.", "Files were deleted.", 42); assert(expected == actual, "Expected: '"~expected~"' but got '"~actual~"'"); } private size_t skipToDirective(size_t i, ref string text) { while (i < text.length) { i = skipWhitespace(i, text); if (i < text.length && text[i] == '#') i = skipLine(i, text); else break; } return i; } private size_t skipWhitespace(size_t i, ref string text) { while (i < text.length && (text[i] == ' ' || text[i] == '\t' || text[i] == '\n' || text[i] == '\r')) i++; return i; } private size_t skipLine(size_t i, ref string text) { while (i < text.length && text[i] != '\r' && text[i] != '\n') i++; if (i+1 < text.length && (text[i+1] == '\r' || text[i+1] == '\n') && text[i] != text[i+1]) i++; return i+1; } private size_t skipString(size_t i, ref string text) { import std.conv : to; assert(text[i] == '"', "Expected to encounter the start of a string at position: "~to!string(i)); i++; while (true) { assert(i < text.length, "Missing closing '\"' for string: "~text[i .. min($, 10)]); if (text[i] == '"') { if (i+1 < text.length) { auto j = skipWhitespace(i+1, text); if (j -1) { auto beg = msgstr.indexOf("nplurals=", start+13, CaseSensitive.no); if (beg > -1) { auto end = msgstr.indexOf(';', beg+9, CaseSensitive.no); if (end > -1) { return msgstr[beg+9 .. end]; } return msgstr[beg+9 .. $]; } } return null; } unittest { auto res = parse_nplurals("Plural-Forms: nplurals=2; plural=n != 1;\n"); assert(res == "2", "Failed to parse the correct number of plural forms for a language."); } private string parse_plural_expression(string msgstr) in { assert(msgstr, "An empty string cannot be parsed for Plural-Forms."); } body { import std.string : indexOf, CaseSensitive; auto start = msgstr.indexOf("Plural-Forms:", CaseSensitive.no); if (start > -1) { auto beg = msgstr.indexOf("plural=", start+13, CaseSensitive.no); if (beg > -1) { auto end = msgstr.indexOf(';', beg+7, CaseSensitive.no); if (end > -1) { return msgstr[beg+7 .. end]; } return msgstr[beg+7 .. $]; } } return null; } unittest { auto res = parse_plural_expression("Plural-Forms: nplurals=2; plural=n != 1;\n"); assert(res == "n != 1", "Failed to parse the plural expression for a language."); } private string dstringUnescape(in string str) { string ret; size_t i, start = 0; for( i = 0; i < str.length; i++ ) if( str[i] == '\\' ){ if( i > start ){ if( start > 0 ) ret ~= str[start .. i]; else ret = str[0 .. i]; } assert(i+1 < str.length, "The string ends with the escape char: " ~ str); switch(str[i+1]){ default: ret ~= str[i+1]; break; case 'r': ret ~= '\r'; break; case 'n': ret ~= '\n'; break; case 't': ret ~= '\t'; break; } i++; start = i+1; } if( i > start ){ if( start == 0 ) return str; else ret ~= str[start .. i]; } return ret; } vibe.d-0.8.2/web/vibe/web/internal/000077500000000000000000000000001324361747700170015ustar00rootroot00000000000000vibe.d-0.8.2/web/vibe/web/internal/rest/000077500000000000000000000000001324361747700177565ustar00rootroot00000000000000vibe.d-0.8.2/web/vibe/web/internal/rest/common.d000066400000000000000000000560051324361747700214210ustar00rootroot00000000000000/** Internal module with common functionality for REST interface generators. Copyright: © 2015-2016 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.web.internal.rest.common; import vibe.http.common : HTTPMethod; import vibe.web.rest; import std.algorithm : endsWith, startsWith; import std.meta : anySatisfy, Filter; import std.traits : hasUDA; /** Provides all necessary tools to implement an automated REST interface. The given `TImpl` must be an `interface` or a `class` deriving from one. */ /*package(vibe.web.web)*/ struct RestInterface(TImpl) if (is(TImpl == class) || is(TImpl == interface)) { @safe: import std.traits : FunctionTypeOf, InterfacesTuple, MemberFunctionsTuple, ParameterIdentifierTuple, ParameterStorageClass, ParameterStorageClassTuple, ParameterTypeTuple, ReturnType; import std.typetuple : TypeTuple; import vibe.inet.url : URL; import vibe.internal.meta.funcattr : IsAttributedParameter; import vibe.internal.meta.traits : derivedMethod; import vibe.internal.meta.uda; /// The settings used to generate the interface RestInterfaceSettings settings; /// Full base path of the interface, including an eventual `@path` annotation. string basePath; /// Full base URL of the interface, including an eventual `@path` annotation. string baseURL; // determine the implementation interface I and check for validation errors private alias BaseInterfaces = InterfacesTuple!TImpl; static assert (BaseInterfaces.length > 0 || is (TImpl == interface), "Cannot registerRestInterface type '" ~ TImpl.stringof ~ "' because it doesn't implement an interface"); static if (BaseInterfaces.length > 1) pragma(msg, "Type '" ~ TImpl.stringof ~ "' implements more than one interface: make sure the one describing the REST server is the first one"); static if (is(TImpl == interface)) alias I = TImpl; else alias I = BaseInterfaces[0]; static assert(getInterfaceValidationError!I is null, getInterfaceValidationError!(I)); /// The name of each interface member enum memberNames = [__traits(allMembers, I)]; /// Aliases to all interface methods alias AllMethods = GetAllMethods!(); /** Aliases for each route method This tuple has the same number of entries as `routes`. */ alias RouteFunctions = GetRouteFunctions!(); enum routeCount = RouteFunctions.length; /** Information about each route This array has the same number of fields as `RouteFunctions` */ Route[routeCount] routes; /// Static (compile-time) information about each route static if (routeCount) static const StaticRoute[routeCount] staticRoutes = computeStaticRoutes(); else static const StaticRoute[0] staticRoutes; /** Aliases for each sub interface method This array has the same number of entries as `subInterfaces` and `SubInterfaceTypes`. */ alias SubInterfaceFunctions = GetSubInterfaceFunctions!(); /** The type of each sub interface This array has the same number of entries as `subInterfaces` and `SubInterfaceFunctions`. */ alias SubInterfaceTypes = GetSubInterfaceTypes!(); enum subInterfaceCount = SubInterfaceFunctions.length; /** Information about sub interfaces This array has the same number of entries as `SubInterfaceFunctions` and `SubInterfaceTypes`. */ SubInterface[subInterfaceCount] subInterfaces; /** Fills the struct with information. Params: settings = Optional settings object. */ this(RestInterfaceSettings settings, bool is_client) { import vibe.internal.meta.uda : findFirstUDA; this.settings = settings ? settings.dup : new RestInterfaceSettings; if (is_client) { assert(this.settings.baseURL != URL.init, "RESTful clients need to have a valid RestInterfaceSettings.baseURL set."); } else if (this.settings.baseURL == URL.init) { // use a valid dummy base URL to be able to construct sub-URLs // for nested interfaces this.settings.baseURL = URL("http://localhost/"); } this.basePath = this.settings.baseURL.path.toString(); enum uda = findFirstUDA!(PathAttribute, I); static if (uda.found) { static if (uda.value.data == "") { auto path = "/" ~ adjustMethodStyle(I.stringof, this.settings.methodStyle); this.basePath = concatURL(this.basePath, path); } else { this.basePath = concatURL(this.basePath, uda.value.data); } } URL bu = this.settings.baseURL; bu.pathString = this.basePath; this.baseURL = bu.toString(); computeRoutes(); computeSubInterfaces(); } // copying this struct is costly, so we forbid it @disable this(this); private void computeRoutes() { import std.algorithm.searching : any; foreach (si, RF; RouteFunctions) { enum sroute = staticRoutes[si]; Route route; route.functionName = sroute.functionName; route.method = sroute.method; static if (sroute.pathOverride) route.pattern = sroute.rawName; else route.pattern = computeDefaultPath!RF(sroute.rawName); route.method = sroute.method; extractPathParts(route.fullPathParts, this.basePath.endsWith("/") ? this.basePath : this.basePath ~ "/"); route.parameters.length = sroute.parameters.length; bool prefix_id = false; alias PT = ParameterTypeTuple!RF; foreach (i, _; PT) { enum sparam = sroute.parameters[i]; Parameter pi; pi.name = sparam.name; pi.kind = sparam.kind; pi.isIn = sparam.isIn; pi.isOut = sparam.isOut; static if (sparam.kind != ParameterKind.attributed && sparam.fieldName.length == 0) { pi.fieldName = stripTUnderscore(pi.name, settings); } else pi.fieldName = sparam.fieldName; static if (i == 0 && sparam.name == "id") { prefix_id = true; if (route.pattern.length && route.pattern[0] != '/') route.pattern = '/' ~ route.pattern; route.pathParts ~= PathPart(true, "id"); route.fullPathParts ~= PathPart(true, "id"); } route.parameters[i] = pi; final switch (pi.kind) { case ParameterKind.query: route.queryParameters ~= pi; break; case ParameterKind.body_: route.bodyParameters ~= pi; break; case ParameterKind.wholeBody: route.wholeBodyParameter = pi; break; case ParameterKind.header: route.headerParameters ~= pi; break; case ParameterKind.internal: route.internalParameters ~= pi; break; case ParameterKind.attributed: route.attributedParameters ~= pi; break; case ParameterKind.auth: route.authParameters ~= pi; break; } } extractPathParts(route.pathParts, route.pattern); extractPathParts(route.fullPathParts, !prefix_id && route.pattern.startsWith("/") ? route.pattern[1 .. $] : route.pattern); if (prefix_id) route.pattern = ":id" ~ route.pattern; route.fullPattern = concatURL(this.basePath, route.pattern); route.pathHasPlaceholders = route.fullPathParts.any!(p => p.isParameter); routes[si] = route; } } /** Returns an array with routes grouped by path pattern */ auto getRoutesGroupedByPattern() { import std.algorithm : map, sort, filter, any; import std.array : array; import std.typecons : tuple; // since /foo/:bar and /foo/:baz are the same route, we first normalize the patterns (by replacing each param with just ':') // after that we sort and chunkBy/groupBy, in order to group the related route auto sorted = routes[].map!((route){ return tuple(route,route.fullPathParts.map!((part){ return part.isParameter ? ":" : part.text; }).array()); // can probably remove the array here if we rewrite the comparison functions (in sort and in the foreach) to work on ranges }) .array .sort!((a,b) => a[1] < b[1]); typeof(sorted)[] groups; if (sorted.length > 0) { // NOTE: we want to support 2.066 but it doesn't have chunkBy, so we do the classic loop thingy size_t start, idx = 1; foreach(route, path; sorted[1..$]) { if (sorted[idx-1][1] != path) { groups ~= sorted[start..idx]; start = idx; } ++idx; } groups ~= sorted[start..$]; } return groups.map!(group => group.map!(tuple => tuple[0])); } private static StaticRoute[routeCount] computeStaticRoutes() { static import std.traits; import vibe.web.auth : AuthInfo; import std.algorithm.searching : any, count; import std.meta : AliasSeq; assert(__ctfe); StaticRoute[routeCount] ret; alias AUTHTP = AuthInfo!TImpl; foreach (fi, func; RouteFunctions) { StaticRoute route; route.functionName = __traits(identifier, func); static if (!is(TImpl == I)) alias cfunc = derivedMethod!(TImpl, func); else alias cfunc = func; alias FuncType = FunctionTypeOf!func; alias ParameterTypes = ParameterTypeTuple!FuncType; alias ReturnType = std.traits.ReturnType!FuncType; enum parameterNames = [ParameterIdentifierTuple!func]; enum meta = extractHTTPMethodAndName!(func, false)(); route.method = meta.method; route.rawName = meta.url; route.pathOverride = meta.hadPathUDA; foreach (i, PT; ParameterTypes) { enum pname = parameterNames[i]; alias WPAT = UDATuple!(WebParamAttribute, func); // Comparison template for anySatisfy //template Cmp(WebParamAttribute attr) { enum Cmp = (attr.identifier == ParamNames[i]); } alias CompareParamName = GenCmp!("Loop"~func.mangleof, i, parameterNames[i]); mixin(CompareParamName.Decl); StaticParameter pi; pi.name = parameterNames[i]; // determine in/out storage class enum SC = ParameterStorageClassTuple!func[i]; static if (SC & ParameterStorageClass.out_) { pi.isOut = true; } else static if (SC & ParameterStorageClass.ref_) { pi.isIn = true; pi.isOut = true; } else { pi.isIn = true; } // determine parameter source/destination static if (is(PT == AUTHTP)) { pi.kind = ParameterKind.auth; } else static if (IsAttributedParameter!(func, pname)) { pi.kind = ParameterKind.attributed; } else static if (AliasSeq!(cfunc).length > 0 && IsAttributedParameter!(cfunc, pname)) { pi.kind = ParameterKind.attributed; } else static if (anySatisfy!(mixin(CompareParamName.Name), WPAT)) { alias PWPAT = Filter!(mixin(CompareParamName.Name), WPAT); pi.kind = PWPAT[0].origin; pi.fieldName = PWPAT[0].field; if (pi.kind == ParameterKind.body_ && pi.fieldName == "") pi.kind = ParameterKind.wholeBody; } else static if (pname.startsWith("_")) { pi.kind = ParameterKind.internal; pi.fieldName = parameterNames[i][1 .. $]; } else static if (i == 0 && pname == "id") { pi.kind = ParameterKind.internal; pi.fieldName = "id"; } else { pi.kind = route.method == HTTPMethod.GET ? ParameterKind.query : ParameterKind.body_; } route.parameters ~= pi; } auto nhb = route.parameters.count!(p => p.kind == ParameterKind.wholeBody); assert(nhb <= 1, "Multiple whole-body parameters defined for "~route.functionName~"."); assert(nhb == 0 || !route.parameters.any!(p => p.kind == ParameterKind.body_), "Normal body parameters and a whole-body parameter defined at the same time for "~route.functionName~"."); ret[fi] = route; } return ret; } private void computeSubInterfaces() { foreach (i, func; SubInterfaceFunctions) { enum meta = extractHTTPMethodAndName!(func, false)(); static if (meta.hadPathUDA) string url = meta.url; else string url = computeDefaultPath!func(meta.url); SubInterface si; si.settings = settings.dup; si.settings.baseURL = URL(concatURL(this.baseURL, url, true)); subInterfaces[i] = si; } assert(subInterfaces.length == SubInterfaceFunctions.length); } private template GetSubInterfaceFunctions() { template Impl(size_t idx) { static if (idx < AllMethods.length) { alias SI = SubInterfaceType!(AllMethods[idx]); static if (!is(SI == void)) { alias Impl = TypeTuple!(AllMethods[idx], Impl!(idx+1)); } else { alias Impl = Impl!(idx+1); } } else alias Impl = TypeTuple!(); } alias GetSubInterfaceFunctions = Impl!0; } private template GetSubInterfaceTypes() { template Impl(size_t idx) { static if (idx < AllMethods.length) { alias SI = SubInterfaceType!(AllMethods[idx]); static if (!is(SI == void)) { alias Impl = TypeTuple!(SI, Impl!(idx+1)); } else { alias Impl = Impl!(idx+1); } } else alias Impl = TypeTuple!(); } alias GetSubInterfaceTypes = Impl!0; } private template GetRouteFunctions() { template Impl(size_t idx) { static if (idx < AllMethods.length) { alias F = AllMethods[idx]; alias SI = SubInterfaceType!F; static if (is(SI == void)) alias Impl = TypeTuple!(F, Impl!(idx+1)); else alias Impl = Impl!(idx+1); } else alias Impl = TypeTuple!(); } alias GetRouteFunctions = Impl!0; } private template GetAllMethods() { template Impl(size_t idx) { static if (idx < memberNames.length) { enum name = memberNames[idx]; // WORKAROUND #1045 / @@BUG14375@@ static if (name.length != 0) alias Impl = TypeTuple!(Filter!(IsRouteMethod, MemberFunctionsTuple!(I, name)), Impl!(idx+1)); else alias Impl = Impl!(idx+1); } else alias Impl = TypeTuple!(); } alias GetAllMethods = Impl!0; } private string computeDefaultPath(alias method)(string name) { auto ret = adjustMethodStyle(stripTUnderscore(name, settings), settings.methodStyle); static if (is(I.CollectionIndices)) { alias IdxTypes = typeof(I.CollectionIndices.tupleof); alias PTypes = ParameterTypeTuple!method; enum has_index_param = PTypes.length >= IdxTypes.length && is(PTypes[0 .. IdxTypes.length] == IdxTypes); enum index_name = __traits(identifier, I.CollectionIndices.tupleof[$-1]); static if (has_index_param && index_name.startsWith("_")) ret = (":" ~ index_name[1 .. $] ~ "/").concatURL(ret); } return ret; } } private enum IsRouteMethod(alias M) = !hasUDA!(M, NoRouteAttribute); struct Route { string functionName; // D name of the function HTTPMethod method; string pattern; // relative route path (relative to baseURL) string fullPattern; // absolute version of 'pattern' bool pathHasPlaceholders; // true if path/pattern contains any :placeholers PathPart[] pathParts; // path separated into text and placeholder parts PathPart[] fullPathParts; // full path separated into text and placeholder parts Parameter[] parameters; Parameter wholeBodyParameter; Parameter[] queryParameters; Parameter[] bodyParameters; Parameter[] headerParameters; Parameter[] attributedParameters; Parameter[] internalParameters; Parameter[] authParameters; } struct PathPart { /// interpret `text` as a parameter name (including the leading underscore) or as raw text bool isParameter; string text; } struct Parameter { ParameterKind kind; string name; string fieldName; bool isIn, isOut; } struct StaticRoute { string functionName; // D name of the function string rawName; // raw name as returned bool pathOverride; // @path UDA was used HTTPMethod method; StaticParameter[] parameters; } struct StaticParameter { ParameterKind kind; string name; string fieldName; // only set for parameters where the field name can be statically determined - use Parameter.fieldName in usual cases bool isIn, isOut; } enum ParameterKind { query, // req.query[] body_, // JSON body (single field) wholeBody, // JSON body header, // req.header[] attributed, // @before internal, // req.params[] auth // @authrorized!T } struct SubInterface { RestInterfaceSettings settings; } template SubInterfaceType(alias F) { import std.traits : ReturnType, isInstanceOf; alias RT = ReturnType!F; static if (is(RT == interface)) alias SubInterfaceType = RT; else static if (isInstanceOf!(Collection, RT)) alias SubInterfaceType = RT.Interface; else alias SubInterfaceType = void; } private bool extractPathParts(ref PathPart[] parts, string pattern) @safe { import std.string : indexOf; string p = pattern; bool has_placeholders = false; void addText(string str) { if (parts.length > 0 && !parts[$-1].isParameter) parts[$-1].text ~= str; else parts ~= PathPart(false, str); } while (p.length) { auto cidx = p.indexOf(':'); if (cidx < 0) break; if (cidx > 0) addText(p[0 .. cidx]); p = p[cidx+1 .. $]; auto sidx = p.indexOf('/'); if (sidx < 0) sidx = p.length; assert(sidx > 0, "Empty path placeholders are illegal."); parts ~= PathPart(true, "_" ~ p[0 .. sidx]); has_placeholders = true; p = p[sidx .. $]; } if (p.length) addText(p); return has_placeholders; } unittest { interface IDUMMY { void test(int dummy); } class DUMMY : IDUMMY { void test(int) {} } auto test = RestInterface!DUMMY(null, false); } unittest { interface IDUMMY {} class DUMMY : IDUMMY {} auto test = RestInterface!DUMMY(null, false); } unittest { interface I { void a(); @path("foo") void b(); void c(int id); @path("bar") void d(int id); @path(":baz") void e(int _baz); @path(":foo/:bar/baz") void f(int _foo, int _bar); } auto test = RestInterface!I(null, false); assert(test.routeCount == 6); assert(test.routes[0].pattern == "a"); assert(test.routes[0].fullPattern == "/a"); assert(test.routes[0].pathParts == [PathPart(false, "a")]); assert(test.routes[0].fullPathParts == [PathPart(false, "/a")]); assert(test.routes[1].pattern == "foo"); assert(test.routes[1].fullPattern == "/foo"); assert(test.routes[1].pathParts == [PathPart(false, "foo")]); assert(test.routes[1].fullPathParts == [PathPart(false, "/foo")]); assert(test.routes[2].pattern == ":id/c"); assert(test.routes[2].fullPattern == "/:id/c"); assert(test.routes[2].pathParts == [PathPart(true, "id"), PathPart(false, "/c")]); assert(test.routes[2].fullPathParts == [PathPart(false, "/"), PathPart(true, "id"), PathPart(false, "/c")]); assert(test.routes[3].pattern == ":id/bar"); assert(test.routes[3].fullPattern == "/:id/bar"); assert(test.routes[3].pathParts == [PathPart(true, "id"), PathPart(false, "/bar")]); assert(test.routes[3].fullPathParts == [PathPart(false, "/"), PathPart(true, "id"), PathPart(false, "/bar")]); assert(test.routes[4].pattern == ":baz"); assert(test.routes[4].fullPattern == "/:baz"); assert(test.routes[4].pathParts == [PathPart(true, "_baz")]); assert(test.routes[4].fullPathParts == [PathPart(false, "/"), PathPart(true, "_baz")]); assert(test.routes[5].pattern == ":foo/:bar/baz"); assert(test.routes[5].fullPattern == "/:foo/:bar/baz"); assert(test.routes[5].pathParts == [PathPart(true, "_foo"), PathPart(false, "/"), PathPart(true, "_bar"), PathPart(false, "/baz")]); assert(test.routes[5].fullPathParts == [PathPart(false, "/"), PathPart(true, "_foo"), PathPart(false, "/"), PathPart(true, "_bar"), PathPart(false, "/baz")]); } unittest { // Note: the RestInterface generates routes in a specific order. // since the assertions below also (indirectly) test ordering, // the assertions might trigger when the ordering of the routes // generated by the RestInterface changes. interface Options { @path("a") void getA(); @path("a") void setA(); @path("bar/:param") void setFoo(int _param); @path("bar/:marap") void addFoo(int _marap); void addFoo(); void getFoo(); } auto test = RestInterface!Options(null, false); import std.array : array; import std.algorithm : map; import std.range : dropOne, front; auto options = test.getRoutesGroupedByPattern.array; assert(options.length == 3); assert(options[0].front.fullPattern == "/a"); assert(options[0].dropOne.front.fullPattern == "/a"); assert(options[0].map!(route=>route.method).array == [HTTPMethod.GET,HTTPMethod.PUT]); assert(options[1].front.fullPattern == "/bar/:param"); assert(options[1].dropOne.front.fullPattern == "/bar/:marap"); assert(options[1].map!(route=>route.method).array == [HTTPMethod.PUT,HTTPMethod.POST]); assert(options[2].front.fullPattern == "/foo"); assert(options[2].dropOne.front.fullPattern == "/foo"); assert(options[2].map!(route=>route.method).array == [HTTPMethod.POST,HTTPMethod.GET]); } unittest { @rootPathFromName interface Foo { string bar(); } auto test = RestInterface!Foo(null, false); assert(test.routeCount == 1); assert(test.routes[0].pattern == "bar"); assert(test.routes[0].fullPattern == "/foo/bar"); assert(test.routes[0].pathParts == [PathPart(false, "bar")]); assert(test.routes[0].fullPathParts == [PathPart(false, "/foo/bar")]); } unittest { @path("/foo/") interface Foo { @path("/bar/") string bar(); } auto test = RestInterface!Foo(null, false); assert(test.routeCount == 1); assert(test.routes[0].pattern == "/bar/"); assert(test.routes[0].fullPattern == "/foo/bar/"); assert(test.routes[0].pathParts == [PathPart(false, "/bar/")]); assert(test.routes[0].fullPathParts == [PathPart(false, "/foo/bar/")]); } unittest { // #1285 interface I { @headerParam("b", "foo") @headerParam("c", "bar") void a(int a, out int b, ref int c); } alias RI = RestInterface!I; static assert(RI.staticRoutes[0].parameters[0].name == "a"); static assert(RI.staticRoutes[0].parameters[0].isIn && !RI.staticRoutes[0].parameters[0].isOut); static assert(RI.staticRoutes[0].parameters[1].name == "b"); static assert(!RI.staticRoutes[0].parameters[1].isIn && RI.staticRoutes[0].parameters[1].isOut); static assert(RI.staticRoutes[0].parameters[2].name == "c"); static assert(RI.staticRoutes[0].parameters[2].isIn && RI.staticRoutes[0].parameters[2].isOut); } unittest { interface Baz { struct CollectionIndices { string _barid; int _bazid; } void test(string _barid, int _bazid); void test2(string _barid); } interface Bar { struct CollectionIndices { string _barid; } Collection!Baz baz(string _barid); void test(string _barid); void test2(); } interface Foo { Collection!Bar bar(); } auto foo = RestInterface!Foo(null, false); assert(foo.subInterfaceCount == 1); auto bar = RestInterface!Bar(foo.subInterfaces[0].settings, false); assert(bar.routeCount == 2); assert(bar.routes[0].fullPattern == "/bar/:barid/test"); assert(bar.routes[0].pathHasPlaceholders); assert(bar.routes[1].fullPattern == "/bar/test2", bar.routes[1].fullPattern); assert(!bar.routes[1].pathHasPlaceholders); assert(bar.subInterfaceCount == 1); auto baz = RestInterface!Baz(bar.subInterfaces[0].settings, false); assert(baz.routeCount == 2); assert(baz.routes[0].fullPattern == "/bar/:barid/baz/:bazid/test"); assert(baz.routes[0].pathHasPlaceholders); assert(baz.routes[1].fullPattern == "/bar/:barid/baz/test2"); assert(baz.routes[1].pathHasPlaceholders); } unittest { // #1648 import vibe.web.auth; struct AI {} @requiresAuth!AI interface I { void a(); } alias RI = RestInterface!I; } unittest { interface I1 { @bodyParam("foo") void a(int foo); } alias RI = RestInterface!I1; interface I2 { @bodyParam("foo") void a(int foo, int bar); } interface I3 { @bodyParam("foo") @bodyParam("bar") void a(int foo, int bar); } static assert(__traits(compiles, RestInterface!I1.init)); static assert(!__traits(compiles, RestInterface!I2.init)); static assert(!__traits(compiles, RestInterface!I3.init)); } unittest { import vibe.http.server : HTTPServerResponse, HTTPServerRequest; int foocomp(HTTPServerRequest, HTTPServerResponse) { return 42; } interface I { void test(int foo); } class C : I { @before!foocomp("foo") void test(int foo) { assert(foo == 42); }} alias RI = RestInterface!C; static assert(RI.staticRoutes[0].parameters[0].kind == ParameterKind.attributed); } vibe.d-0.8.2/web/vibe/web/internal/rest/jsclient.d000066400000000000000000000173351324361747700217470ustar00rootroot00000000000000/** Internal module with functions to generate JavaScript REST interfaces. Copyright: © 2015-2016 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.web.internal.rest.jsclient; import vibe.inet.url : URL; import vibe.web.rest; import std.conv : to; /// class JSRestClientSettings { /// string indentStep; /// string name; /// @property JSRestClientSettings dup() const { auto ret = new JSRestClientSettings; ret.indentStep = this.indentStep; ret.name = this.name; return ret; } } /** Generates JavaScript code suitable for accessing a REST interface using XHR. */ /*package(vibe.web.web)*/ void generateInterface(TImpl, R)(ref R output, RestInterfaceSettings settings, JSRestClientSettings jsgenset, bool parent) { // TODO: handle attributed parameters and filter out internal parameters that have no path placeholder assigned to them import std.format : formattedWrite; import std.string : toUpper, strip, splitLines; import std.traits : FunctionTypeOf, ReturnType; import std.algorithm : filter, map; import std.array : replace; import std.typecons : tuple; import vibe.data.json : Json, serializeToJson; import vibe.internal.meta.uda; import vibe.http.common : HTTPMethod; import vibe.web.internal.rest.common; import vibe.web.common; auto intf = RestInterface!TImpl(settings, true); auto fout = indentSink(output, jsgenset.indentStep); fout.formattedWrite("%s%s = new function() {\n", parent ? "" : "this.", jsgenset.name.length ? jsgenset.name : intf.I.stringof); if (parent) { auto lns = ` var toRestString = function(v) { var res; switch(typeof(v)) { case "object": res = JSON.stringify(v); break; default: res = v; } return encodeURIComponent(res); }`; foreach(ln; lns.splitLines.map!(a=>a.strip ~ "\n")) fout.put(ln); } foreach (i, SI; intf.SubInterfaceTypes) { fout.put("\n"); auto chset = jsgenset.dup; chset.name = __traits(identifier, intf.SubInterfaceFunctions[i]); fout.generateInterface!SI(intf.subInterfaces[i].settings, chset, false); } foreach (i, F; intf.RouteFunctions) { alias FT = FunctionTypeOf!F; auto route = intf.routes[i]; // function signature fout.put("\n"); fout.formattedWrite("this.%s = function(", route.functionName); foreach (j, param; route.parameters) { fout.put(param.name); fout.put(", "); } static if (!is(ReturnType!FT == void)) fout.put("on_result, "); fout.put("on_error) {\n"); // url assembly fout.put("var url = "); if (route.pathHasPlaceholders) { // extract the server part of the URL auto burl = URL(intf.baseURL); burl.pathString = "/"; fout.serializeToJson(burl.toString()[0 .. $-1]); // and then assemble the full path piece-wise foreach (p; route.fullPathParts) { fout.put(" + "); if (!p.isParameter) fout.serializeToJson(p.text); else fout.formattedWrite("toRestString(%s)", p.text); } } else { fout.formattedWrite(`"%s"`, concatURL(intf.baseURL, route.pattern)); } fout.put(";\n"); // query parameters if (route.queryParameters.length) { fout.put("url = url"); foreach (j, p; route.queryParameters) fout.formattedWrite(" + \"%s%s=\" + toRestString(%s)", j == 0 ? '?' : '&', p.fieldName, p.name); fout.put(";\n"); } // body parameters if (route.wholeBodyParameter.name.length) { fout.formattedWrite("var bostbody = %s;\n", route.wholeBodyParameter.name); } else if (route.bodyParameters.length) { fout.put("var postbody = {\n"); foreach (p; route.bodyParameters) fout.formattedWrite("%s: %s,\n", Json(p.fieldName), p.name); fout.put("};\n"); } // XHR setup fout.put("var xhr = new XMLHttpRequest();\n"); fout.formattedWrite("xhr.open('%s', url, true);\n", route.method.to!string.toUpper); fout.put("xhr.onload = function () {\n"); fout.put("if (this.status >= 400) { if (on_error) on_error(JSON.parse(this.responseText)); else console.log(this.responseText); }\n"); static if (!is(ReturnType!FT == void)) { fout.put("else on_result(JSON.parse(this.responseText));\n"); } fout.put("};\n"); // error handling fout.put("xhr.onerror = function (e) { if (on_error) on_error(e); else console.log(\"XHR request failed\"); }\n"); // header parameters foreach (p; route.headerParameters) fout.formattedWrite("xhr.setRequestHeader(%s, %s);\n", Json(p.fieldName), p.name); // submit request if (route.method == HTTPMethod.GET || !route.bodyParameters.length) fout.put("xhr.send();\n"); else { fout.put("xhr.setRequestHeader('Content-Type', 'application/json');\n"); fout.put("xhr.send(JSON.stringify(postbody));\n"); } fout.put("}\n"); } fout.put("}\n"); } version (unittest) { interface IDUMMY { void test(int dummy); } class DUMMY : IDUMMY { void test(int) {} } private void dummy() { import std.array; auto app = appender!string(); app.generateInterface!DUMMY(null, null, true); } } unittest { // issue #1293 import std.algorithm : canFind, find; import std.array : appender; import vibe.inet.url; interface S { void test(); } interface I { @property S s(); int test1(); void test2(); } auto settings = new RestInterfaceSettings; settings.baseURL = URL("http://localhost/"); auto app = appender!string(); auto jsgenset = new JSRestClientSettings; app.generateInterface!I(settings, jsgenset, true); assert(app.data.canFind("this.s = new function()")); assert(app.data.canFind("this.test1 = function(on_result, on_error)")); assert(app.data.find("this.test1 = function").canFind("on_result(")); assert(app.data.canFind("this.test2 = function(on_error)")); assert(!app.data.find("this.test2 = function").canFind("on_result(")); } private auto indentSink(O)(ref O output, string step) { static struct IndentSink(R) { import std.string : strip; import std.algorithm : joiner; import std.range : repeat; R* base; string indent; size_t level, tempLevel; alias orig this; this(R* base, string indent) { this.base = base; this.indent = indent; } void pushIndent() { level++; tempLevel++; } void popIndent() { if (!level) return; level--; if (tempLevel) tempLevel = level; } void postPut(const(char)[] s) { auto ss = s.strip; if (ss.length && ss[$-1] == '{') pushIndent(); if (s.length && s[$-1] == '\n') tempLevel = level; } void prePut(const(char)[] s) { auto ss = s.strip; if (ss.length && ss[0] == '}') popIndent(); orig.put(indent.repeat(tempLevel).joiner()); tempLevel = 0; } void put(const(char)[] s) { prePut(s); orig.put(s); postPut(s); } void put(char c) { prePut([c]); orig.put(c); postPut([c]); } void formattedWrite(Args...)(string fmt, Args args) { import std.format : formattedWrite; prePut(fmt); orig.formattedWrite(fmt, args); postPut(fmt); } ref R orig() @property { return *base; } } static if (is(typeof(output.prePut)) && is(typeof(output.postPut))) // is IndentSink return output; else return IndentSink!O(&output, step); } unittest { import std.array : appender; import std.format : formattedWrite; import std.algorithm : equal; auto buf = appender!string(); auto ind = indentSink(buf, "\t"); ind.put("class A {\n"); ind.put("int func() { return 12; }\n"); auto ind2 = indentSink(ind, " "); // return itself, not override indentStep ind2.formattedWrite("void %s(%-(%s, %)) {\n", "func2", ["int a", "float b", "char c"]); ind2.formattedWrite("if (%s == %s) {\n", "a", "0"); ind2.put("action();\n"); ind2.put("}\n"); ind2.put("}\n"); ind.put("}\n"); auto res = "class A {\n\tint func() { return 12; }\n\tvoid func2(int a, float b, char c) {\n\t\t" ~ "if (a == 0) {\n\t\t\taction();\n\t\t}\n\t}\n}\n"; assert(equal(res, buf.data)); } vibe.d-0.8.2/web/vibe/web/rest.d000066400000000000000000002121561324361747700163160ustar00rootroot00000000000000/** Automatic high-level RESTful client/server interface generation facilities. This modules aims to provide a typesafe way to deal with RESTful APIs. D's `interface`s are used to define the behavior of the API, so that they can be used transparently within the application. This module assumes that HTTP is used as the underlying transport for the REST API. While convenient means are provided for generating both, the server and the client side, of the API from a single interface definition, it is also possible to use as a pure client side implementation to target existing web APIs. The following paragraphs will explain in detail how the interface definition is mapped to the RESTful API, without going into specifics about the client or server side. Take a look at `registerRestInterface` and `RestInterfaceClient` for more information in those areas. These are the main adantages of using this module to define RESTful APIs over defining them manually by registering request handlers in a `URLRouter`: $(UL $(LI Automatic client generation: once the interface is defined, it can be used both by the client side and the server side, which means that there is no way to have a protocol mismatch between the two.) $(LI Automatic route generation for the server: one job of the REST module is to generate the HTTP routes/endpoints for the API.) $(LI Automatic serialization/deserialization: Instead of doing manual serialization and deserialization, just normal statically typed member functions are defined and the code generator takes care of converting to/from wire format. Custom serialization can be achieved by defining `JSON` or `string` parameters/return values together with the appropriate `@bodyParam` annotations.) $(LI Higher level representation integrated into D: Some concepts of the interfaces, such as optional parameters or `in`/`out`/`ref` parameters, as well as `Nullable!T`, are translated naturally to the RESTful protocol.) ) The most basic interface that can be defined is as follows: ---- @path("/api/") interface APIRoot { string get(); } ---- This defines an API that has a single endpoint, 'GET /api/'. So if the server is found at http://api.example.com, performing a GET request to $(CODE http://api.example.com/api/) will call the `get()` method and send its return value verbatim as the response body. Endpoint_generation: An endpoint is a combination of an HTTP method and a local URI. For each public method of the interface, one endpoint is registered in the `URLRouter`. By default, the method and URI parts will be inferred from the method name by looking for a known prefix. For example, a method called `getFoo` will automatically be mapped to a 'GET /foo' request. The recognized prefixes are as follows: $(TABLE $(TR $(TH Prefix) $(TH HTTP verb)) $(TR $(TD get) $(TD GET)) $(TR $(TD query) $(TD GET)) $(TR $(TD set) $(TD PUT)) $(TR $(TD put) $(TD PUT)) $(TR $(TD update) $(TD PATCH)) $(TR $(TD patch) $(TD PATCH)) $(TR $(TD add) $(TD POST)) $(TR $(TD create) $(TD POST)) $(TR $(TD post) $(TD POST)) ) Member functions that have no valid prefix default to 'POST'. Note that any of the methods defined in `vibe.http.common.HTTPMethod` are supported through manual endpoint specifications, as described in the next section. After determining the HTTP method, the rest of the method's name is then treated as the local URI of the endpoint. It is expected to be in standard D camel case style and will be transformed into the style that is specified in the call to `registerRestInterface`, which defaults to `MethodStyle.lowerUnderscored`. Manual_endpoint_specification: Endpoints can be controlled manually through the use of `@path` and `@method` annotations: ---- @path("/api/") interface APIRoot { // Here we use a POST method @method(HTTPMethod.POST) // Our method will located at '/api/foo' @path("/foo") void doSomething(); } ---- Manual path annotations also allows defining custom path placeholders that will be mapped to function parameters. Placeholders are path segments that start with a colon: ---- @path("/users/") interface UsersAPI { @path(":name") Json getUserByName(string _name); } ---- This will cause a request "GET /users/peter" to be mapped to the `getUserByName` method, with the `_name` parameter receiving the string "peter". Note that the matching parameter must have an underscore prefixed so that it can be distinguished from normal form/query parameters. It is possible to partially rely on the default behavior and to only customize either the method or the path of the endpoint: ---- @method(HTTPMethod.POST) void getFoo(); ---- In the above case, as 'POST' is set explicitly, the route would be 'POST /foo'. On the other hand, if the declaration had been: ---- @path("/bar") void getFoo(); ---- The route generated would be 'GET /bar'. Properties: `@property` functions have a special mapping: property getters (no parameters and a non-void return value) are mapped as GET functions, and property setters (a single parameter) are mapped as PUT. No prefix recognition or trimming will be done for properties. Method_style: Method names will be translated to the given 'MethodStyle'. The default style is `MethodStyle.lowerUnderscored`, so that a function named `getFooBar` will match the route 'GET /foo_bar'. See `vibe.web.common.MethodStyle` for more information about the available styles. Parameter_passing: By default, parameter are passed via different methods depending on the type of request. For POST and PATCH requests, they are passed via the body as a JSON object, while for GET and PUT they are passed via the query string. The default behavior can be overridden using one of the following annotations: $(UL $(LI `@headerParam("name", "field")`: Applied on a method, it will source the parameter named `name` from the request headers named "field". If the parameter is `ref`, it will also be set as a response header. Parameters declared as `out` will $(I only) be set as a response header.) $(LI `@queryParam("name", "field")`: Applied on a method, it will source the parameter `name` from a field named "field" of the query string.) $(LI `@bodyParam("name", "field")`: Applied on a method, it will source the parameter `name` from a field named "feild" of the request body in JSON format.) ) ---- @path("/api/") interface APIRoot { // GET /api/header with 'Authorization' set @headerParam("param", "Authorization") string getHeader(string param); // GET /api/foo?param=... @queryParam("param", "param") string getFoo(int param); // GET /api/body with body set to { "myFoo": {...} } @bodyParam("myFoo", "parameter") string getBody(FooType myFoo); } ---- Default_values: Parameters with default values behave as optional parameters. If one is set in the interface declaration of a method, the client can omit a value for the corresponding field in the request and the default value is used instead. Note that this can suffer from DMD bug #14369 (Vibe.d: #1043). Aggregates: When passing aggregates as parameters, those are serialized differently depending on the way they are passed, which may be especially important when interfacing with an existing RESTful API: $(UL $(LI If the parameter is passed via the headers or the query, either implicitly or explicitly, the aggregate is serialized to JSON. If the JSON representation is a single string, the string value will be used verbatim. Otherwise the JSON representation will be used) $(LI If the parameter is passed via the body, the datastructure is serialized to JSON and set as a field of the main JSON object that is expected in the request body. Its field name equals the parameter name, unless an explicit `@bodyParam` annotation is used.) ) See_Also: To see how to implement the server side in detail, jump to `registerRestInterface`. To see how to implement the client side in detail, jump to the `RestInterfaceClient` documentation. Copyright: © 2012-2017 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig, Михаил Страшун, Mathias 'Geod24' Lang */ module vibe.web.rest; public import vibe.web.common; import vibe.core.log; import vibe.http.router : URLRouter; import vibe.http.client : HTTPClientSettings; import vibe.http.common : HTTPMethod; import vibe.http.server : HTTPServerRequestDelegate; import vibe.http.status : isSuccessCode; import vibe.internal.meta.uda; import vibe.internal.meta.funcattr; import vibe.inet.url; import vibe.inet.message : InetHeaderMap; import vibe.web.internal.rest.common : RestInterface, Route, SubInterfaceType; import vibe.web.auth : AuthInfo, handleAuthentication, handleAuthorization, isAuthenticated; import std.algorithm : startsWith, endsWith; import std.range : isOutputRange; import std.typecons : Nullable; import std.typetuple : anySatisfy, Filter; import std.traits; /** Registers a server matching a certain REST interface. Servers are implementation of the D interface that defines the RESTful API. The methods of this class are invoked by the code that is generated for each endpoint of the API, with parameters and return values being translated according to the rules documented in the `vibe.web.rest` module documentation. A basic 'hello world' API can be defined as follows: ---- @path("/api/") interface APIRoot { string get(); } class API : APIRoot { override string get() { return "Hello, World"; } } void main() { // -- Where the magic happens -- router.registerRestInterface(new API()); // GET http://127.0.0.1:8080/api/ and 'Hello, World' will be replied listenHTTP("127.0.0.1:8080", router); runApplication(); } ---- As can be seen here, the RESTful logic can be written inside the class without any concern for the actual HTTP representation. Return_value: By default, all methods that return a value send a 200 (OK) status code, or 204 if no value is being returned for the body. Non-success: In the cases where an error code should be signaled to the user, a `HTTPStatusException` can be thrown from within the method. It will be turned into a JSON object that has a `statusMessage` field with the exception message. In case of other exception types being thrown, the status code will be set to 500 (internal server error), the `statusMessage` field will again contain the exception's message, and, in debug mode, an additional `statusDebugMessage` field will be set to the complete string representation of the exception (`Exception.toString`), which usually contains a stack trace useful for debugging. Returning_data: To return data, it is possible to either use the return value, which will be sent as the response body, or individual `ref`/`out` parameters can be used. The way they are represented in the response can be customized by adding `@bodyParam`/`@headerParam` annotations in the method declaration within the interface. In case of errors, any `@headerParam` parameters are guaranteed to be set in the response, so that applications such as HTTP basic authentication can be implemented. Template_Params: TImpl = Either an interface type, or a class that derives from an interface. If the class derives from multiple interfaces, the first one will be assumed to be the API description and a warning will be issued. Params: router = The HTTP router on which the interface will be registered instance = Server instance to use settings = Additional settings, such as the `MethodStyle` or the prefix See_Also: `RestInterfaceClient` class for an automated way to generate the matching client-side implementation. */ URLRouter registerRestInterface(TImpl)(URLRouter router, TImpl instance, RestInterfaceSettings settings = null) { import std.algorithm : filter, map, all; import std.array : array; import std.range : front; import vibe.web.internal.rest.common : ParameterKind; auto intf = RestInterface!TImpl(settings, false); foreach (i, ovrld; intf.SubInterfaceFunctions) { enum fname = __traits(identifier, intf.SubInterfaceFunctions[i]); alias R = ReturnType!ovrld; static if (isInstanceOf!(Collection, R)) { auto ret = __traits(getMember, instance, fname)(R.ParentIDs.init); router.registerRestInterface!(R.Interface)(ret.m_interface, intf.subInterfaces[i].settings); } else { auto ret = __traits(getMember, instance, fname)(); router.registerRestInterface!R(ret, intf.subInterfaces[i].settings); } } foreach (i, func; intf.RouteFunctions) { auto route = intf.routes[i]; // normal handler auto handler = jsonMethodHandler!(func, i)(instance, intf); auto diagparams = route.parameters.filter!(p => p.kind != ParameterKind.internal).map!(p => p.fieldName).array; logDiagnostic("REST route: %s %s %s", route.method, route.fullPattern, diagparams); router.match(route.method, route.fullPattern, handler); } // here we filter our already existing OPTIONS routes, so we don't overwrite whenever the user explicitly made his own OPTIONS route auto routesGroupedByPattern = intf.getRoutesGroupedByPattern.filter!(rs => rs.all!(r => r.method != HTTPMethod.OPTIONS)); foreach(routes; routesGroupedByPattern){ auto route = routes.front; auto handler = optionsMethodHandler(routes, settings); auto diagparams = route.parameters.filter!(p => p.kind != ParameterKind.internal).map!(p => p.fieldName).array; logDiagnostic("REST route: %s %s %s", HTTPMethod.OPTIONS, route.fullPattern, diagparams); router.match(HTTPMethod.OPTIONS, route.fullPattern, handler); } return router; } /// ditto URLRouter registerRestInterface(TImpl)(URLRouter router, TImpl instance, MethodStyle style) { return registerRestInterface(router, instance, "/", style); } /// ditto URLRouter registerRestInterface(TImpl)(URLRouter router, TImpl instance, string url_prefix, MethodStyle style = MethodStyle.lowerUnderscored) { auto settings = new RestInterfaceSettings; if (!url_prefix.startsWith("/")) url_prefix = "/"~url_prefix; settings.baseURL = URL("http://127.0.0.1"~url_prefix); settings.methodStyle = style; return registerRestInterface(router, instance, settings); } /** This is a very limited example of REST interface features. Please refer to the "rest" project in the "examples" folder for a full overview. All details related to HTTP are inferred from the interface declaration. */ @safe unittest { @path("/") interface IMyAPI { @safe: // GET /api/greeting @property string greeting(); // PUT /api/greeting @property void greeting(string text); // POST /api/users @path("/users") void addNewUser(string name); // GET /api/users @property string[] users(); // GET /api/:id/name string getName(int id); // GET /some_custom_json Json getSomeCustomJson(); } // vibe.d takes care of all JSON encoding/decoding // and actual API implementation can work directly // with native types class API : IMyAPI { private { string m_greeting; string[] m_users; } @property string greeting() { return m_greeting; } @property void greeting(string text) { m_greeting = text; } void addNewUser(string name) { m_users ~= name; } @property string[] users() { return m_users; } string getName(int id) { return m_users[id]; } Json getSomeCustomJson() { Json ret = Json.emptyObject; ret["somefield"] = "Hello, World!"; return ret; } } // actual usage, this is usually done in app.d module // constructor void static_this() { import vibe.http.server, vibe.http.router; auto router = new URLRouter; router.registerRestInterface(new API()); listenHTTP(new HTTPServerSettings(), router); } } /** Returns a HTTP handler delegate that serves a JavaScript REST client. */ HTTPServerRequestDelegate serveRestJSClient(I)(RestInterfaceSettings settings) if (is(I == interface)) { import std.digest.md : md5Of; import std.digest.digest : toHexString; import std.array : appender; import vibe.http.server : HTTPServerRequest, HTTPServerResponse; import vibe.http.status : HTTPStatus; auto app = appender!string(); generateRestJSClient!I(app, settings); auto hash = app.data.md5Of.toHexString.idup; void serve(HTTPServerRequest req, HTTPServerResponse res) { if (auto pv = "If-None-Match" in res.headers) { res.statusCode = HTTPStatus.notModified; res.writeVoidBody(); return; } res.headers["Etag"] = hash; res.writeBody(app.data, "application/javascript; charset=UTF-8"); } return &serve; } /// ditto HTTPServerRequestDelegate serveRestJSClient(I)(URL base_url) { auto settings = new RestInterfaceSettings; settings.baseURL = base_url; return serveRestJSClient!I(settings); } /// ditto HTTPServerRequestDelegate serveRestJSClient(I)(string base_url) { auto settings = new RestInterfaceSettings; settings.baseURL = URL(base_url); return serveRestJSClient!I(settings); } /// unittest { import vibe.http.server; interface MyAPI { string getFoo(); void postBar(string param); } void test() { auto restsettings = new RestInterfaceSettings; restsettings.baseURL = URL("http://api.example.org/"); auto router = new URLRouter; router.get("/myapi.js", serveRestJSClient!MyAPI(restsettings)); //router.get("/myapi.js", serveRestJSClient!MyAPI(URL("http://api.example.org/"))); //router.get("/myapi.js", serveRestJSClient!MyAPI("http://api.example.org/")); //router.get("/", staticTemplate!"index.dt"); listenHTTP(new HTTPServerSettings, router); } /* index.dt: html head title JS REST client test script(src="myapi.js") body button(onclick="MyAPI.postBar('hello');") */ } /** Generates JavaScript code to access a REST interface from the browser. */ void generateRestJSClient(I, R)(ref R output, RestInterfaceSettings settings = null) if (is(I == interface) && isOutputRange!(R, char)) { import vibe.web.internal.rest.jsclient : generateInterface, JSRestClientSettings; auto jsgenset = new JSRestClientSettings; output.generateInterface!I(settings, jsgenset, true); } /// Writes a JavaScript REST client to a local .js file. unittest { import vibe.core.file; interface MyAPI { void getFoo(); void postBar(string param); } void generateJSClientImpl() { import std.array : appender; auto app = appender!string; auto settings = new RestInterfaceSettings; settings.baseURL = URL("http://localhost/"); generateRestJSClient!MyAPI(app, settings); } generateJSClientImpl(); } /** Implements the given interface by forwarding all public methods to a REST server. The server must talk the same protocol as registerRestInterface() generates. Be sure to set the matching method style for this. The RestInterfaceClient class will derive from the interface that is passed as a template argument. It can be used as a drop-in replacement of the real implementation of the API this way. */ class RestInterfaceClient(I) : I { import vibe.inet.url : URL; import vibe.http.client : HTTPClientRequest; import std.typetuple : staticMap; private alias Info = RestInterface!I; //pragma(msg, "imports for "~I.stringof~":"); //pragma(msg, generateModuleImports!(I)()); mixin(generateModuleImports!I()); private { // storing this struct directly causes a segfault when built with // LDC 0.15.x, so we are using a pointer here: RestInterface!I* m_intf; RequestFilter m_requestFilter; staticMap!(RestInterfaceClient, Info.SubInterfaceTypes) m_subInterfaces; } alias RequestFilter = void delegate(HTTPClientRequest req) @safe; /** Creates a new REST client implementation of $(D I). */ this(RestInterfaceSettings settings) { m_intf = new Info(settings, true); foreach (i, SI; Info.SubInterfaceTypes) m_subInterfaces[i] = new RestInterfaceClient!SI(m_intf.subInterfaces[i].settings); } /// ditto this(string base_url, MethodStyle style = MethodStyle.lowerUnderscored) { this(URL(base_url), style); } /// ditto this(URL base_url, MethodStyle style = MethodStyle.lowerUnderscored) { scope settings = new RestInterfaceSettings; settings.baseURL = base_url; settings.methodStyle = style; this(settings); } /** An optional request filter that allows to modify each request before it is made. */ final @property RequestFilter requestFilter() { return m_requestFilter; } /// ditto final @property void requestFilter(RequestFilter v) { m_requestFilter = v; foreach (i, SI; Info.SubInterfaceTypes) m_subInterfaces[i].requestFilter = v; } /// ditto final @property void requestFilter(void delegate(HTTPClientRequest req) v) { this.requestFilter = cast(RequestFilter)v; } //pragma(msg, "restinterface:"); mixin(generateRestClientMethods!I()); protected { import vibe.data.json : Json; import vibe.textfilter.urlencode; /** * Perform a request to the interface using the given parameters. * * Params: * verb = Kind of request (See $(D HTTPMethod) enum). * name = Location to request. For a request on https://github.com/rejectedsoftware/vibe.d/issues?q=author%3ASantaClaus, * it will be '/rejectedsoftware/vibe.d/issues'. * hdrs = The headers to send. Some field might be overriden (such as Content-Length). However, Content-Type will NOT be overriden. * query = The $(B encoded) query string. For a request on https://github.com/rejectedsoftware/vibe.d/issues?q=author%3ASantaClaus, * it will be 'author%3ASantaClaus'. * body_ = The body to send, as a string. If a Content-Type is present in $(D hdrs), it will be used, otherwise it will default to * the generic type "application/json". * reqReturnHdrs = A map of required return headers. * To avoid returning unused headers, nothing is written * to this structure unless there's an (usually empty) * entry (= the key exists) with the same key. * If any key present in `reqReturnHdrs` is not present * in the response, an Exception is thrown. * optReturnHdrs = A map of optional return headers. * This behaves almost as exactly as reqReturnHdrs, * except that non-existent key in the response will * not cause it to throw, but rather to set this entry * to 'null'. * * Returns: * The Json object returned by the request */ Json request(HTTPMethod verb, string name, in ref InetHeaderMap hdrs, string query, string body_, ref InetHeaderMap reqReturnHdrs, ref InetHeaderMap optReturnHdrs) const { auto path = URL(m_intf.baseURL).pathString; if (name.length) { if (path.length && path[$ - 1] == '/' && name[0] == '/') path ~= name[1 .. $]; else if (path.length && path[$ - 1] == '/' || name[0] == '/') path ~= name; else path ~= '/' ~ name; } auto httpsettings = m_intf.settings.httpClientSettings; return .request(URL(m_intf.baseURL), m_requestFilter, verb, path, hdrs, query, body_, reqReturnHdrs, optReturnHdrs, httpsettings); } } } /// unittest { interface IMyApi { // GET /status string getStatus(); // GET /greeting @property string greeting(); // PUT /greeting @property void greeting(string text); // POST /new_user void addNewUser(string name); // GET /users @property string[] users(); // GET /:id/name string getName(int id); Json getSomeCustomJson(); } void test() { auto api = new RestInterfaceClient!IMyApi("http://127.0.0.1/api/"); logInfo("Status: %s", api.getStatus()); api.greeting = "Hello, World!"; logInfo("Greeting message: %s", api.greeting); api.addNewUser("Peter"); api.addNewUser("Igor"); logInfo("Users: %s", api.users); logInfo("First user name: %s", api.getName(0)); } } /** Encapsulates settings used to customize the generated REST interface. */ class RestInterfaceSettings { /** The public URL below which the REST interface is registered. */ URL baseURL; /** List of allowed origins for CORS Empty list is interpreted as allowing all origins (e.g. *) */ string[] allowedOrigins; /** Naming convention used for the generated URLs. */ MethodStyle methodStyle = MethodStyle.lowerUnderscored; /** Ignores a trailing underscore in method and function names. With this setting set to $(D true), it's possible to use names in the REST interface that are reserved words in D. */ bool stripTrailingUnderscore = true; /// Overrides the default HTTP client settings used by the `RestInterfaceClient`. HTTPClientSettings httpClientSettings; @property RestInterfaceSettings dup() const @safe { auto ret = new RestInterfaceSettings; ret.baseURL = this.baseURL; ret.methodStyle = this.methodStyle; ret.stripTrailingUnderscore = this.stripTrailingUnderscore; ret.allowedOrigins = this.allowedOrigins.dup; return ret; } } /** Models REST collection interfaces using natural D syntax. Use this type as the return value of a REST interface getter method/property to model a collection of objects. `opIndex` is used to make the individual entries accessible using the `[index]` syntax. Nested collections are supported. The interface `I` needs to define a struct named `CollectionIndices`. The members of this struct denote the types and names of the indexes that lead to a particular resource. If a collection is nested within another collection, the order of these members must match the nesting order (outermost first). The parameter list of all of `I`'s methods must begin with all but the last entry in `CollectionIndices`. Methods that also match the last entry will be considered methods of a collection item (`collection[index].method()`), wheres all other methods will be considered methods of the collection itself (`collection.method()`). The name of the index parameters affects the default path of a method's route. Normal parameter names will be subject to the same rules as usual routes (see `registerRestInterface`) and will be mapped to query or form parameters at the protocol level. Names starting with an underscore will instead be mapped to path placeholders. For example, `void getName(int __item_id)` will be mapped to a GET request to the path `":item_id/name"`. */ struct Collection(I) if (is(I == interface)) { import std.typetuple; static assert(is(I.CollectionIndices == struct), "Collection interfaces must define a CollectionIndices struct."); alias Interface = I; alias AllIDs = TypeTuple!(typeof(I.CollectionIndices.tupleof)); alias AllIDNames = FieldNameTuple!(I.CollectionIndices); static assert(AllIDs.length >= 1, I.stringof~".CollectionIndices must define at least one member."); static assert(AllIDNames.length == AllIDs.length); alias ItemID = AllIDs[$-1]; alias ParentIDs = AllIDs[0 .. $-1]; alias ParentIDNames = AllIDNames[0 .. $-1]; private { I m_interface; ParentIDs m_parentIDs; } /** Constructs a new collection instance that is tied to a particular parent collection entry. Params: api = The target interface imstance to be mapped as a collection pids = The indexes of all collections in which this collection is nested (if any) */ this(I api, ParentIDs pids) { m_interface = api; m_parentIDs = pids; } static struct Item { private { I m_interface; AllIDs m_id; } this(I api, AllIDs id) { m_interface = api; m_id = id; } // forward all item methods mixin(() { string ret; foreach (m; __traits(allMembers, I)) { foreach (ovrld; MemberFunctionsTuple!(I, m)) { alias PT = ParameterTypeTuple!ovrld; static if (matchesAllIDs!ovrld) ret ~= "auto "~m~"(ARGS...)(ARGS args) { return m_interface."~m~"(m_id, args); }\n"; } } return ret; } ()); } // Note: the example causes a recursive template instantiation if done as a documented unit test: /** Accesses a single collection entry. Example: --- interface IMain { @property Collection!IItem items(); } interface IItem { struct CollectionIndices { int _itemID; } @method(HTTPMethod.GET) string name(int _itemID); } void test(IMain main) { auto item_name = main.items[23].name; // equivalent to IItem.name(23) } --- */ Item opIndex(ItemID id) { return Item(m_interface, m_parentIDs, id); } // forward all non-item methods mixin(() { string ret; foreach (m; __traits(allMembers, I)) { foreach (ovrld; MemberFunctionsTuple!(I, m)) { alias PT = ParameterTypeTuple!ovrld; static if (!matchesAllIDs!ovrld) { static assert(matchesParentIDs!ovrld, "Collection methods must take all parent IDs as the first parameters."~PT.stringof~" "~ParentIDs.stringof); ret ~= "auto "~m~"(ARGS...)(ARGS args) { return m_interface."~m~"(m_parentIDs, args); }\n"; } } } return ret; } ()); private template matchesParentIDs(alias func) { static if (is(ParameterTypeTuple!func[0 .. ParentIDs.length] == ParentIDs)) { static if (ParentIDNames.length == 0) enum matchesParentIDs = true; else static if (ParameterIdentifierTuple!func[0 .. ParentIDNames.length] == ParentIDNames) enum matchesParentIDs = true; else enum matchesParentIDs = false; } else enum matchesParentIDs = false; } private template matchesAllIDs(alias func) { static if (is(ParameterTypeTuple!func[0 .. AllIDs.length] == AllIDs)) { static if (ParameterIdentifierTuple!func[0 .. AllIDNames.length] == AllIDNames) enum matchesAllIDs = true; else enum matchesAllIDs = false; } else enum matchesAllIDs = false; } } /// Model two nested collections using path based indexes unittest { // // API definition // interface SubItemAPI { // Define the index path that leads to a sub item struct CollectionIndices { // The ID of the base item. This must match the definition in // ItemAPI.CollectionIndices string _item; // The index if the sub item int _index; } // GET /items/:item/subItems/length @property int length(string _item); // GET /items/:item/subItems/:index/squared_position int getSquaredPosition(string _item, int _index); } interface ItemAPI { // Define the index that identifies an item struct CollectionIndices { string _item; } // base path /items/:item/subItems Collection!SubItemAPI subItems(string _item); // GET /items/:item/name @property string name(string _item); } interface API { // a collection of items at the base path /items/ Collection!ItemAPI items(); } // // Local API implementation // class SubItemAPIImpl : SubItemAPI { @property int length(string _item) { return 10; } int getSquaredPosition(string _item, int _index) { return _index ^^ 2; } } class ItemAPIImpl : ItemAPI { private SubItemAPIImpl m_subItems; this() { m_subItems = new SubItemAPIImpl; } Collection!SubItemAPI subItems(string _item) { return Collection!SubItemAPI(m_subItems, _item); } string name(string _item) { return _item; } } class APIImpl : API { private ItemAPIImpl m_items; this() { m_items = new ItemAPIImpl; } Collection!ItemAPI items() { return Collection!ItemAPI(m_items); } } // // Resulting API usage // API api = new APIImpl; // A RestInterfaceClient!API would work just as well // GET /items/foo/name assert(api.items["foo"].name == "foo"); // GET /items/foo/sub_items/length assert(api.items["foo"].subItems.length == 10); // GET /items/foo/sub_items/2/squared_position assert(api.items["foo"].subItems[2].getSquaredPosition() == 4); } unittest { interface I { struct CollectionIndices { int id1; string id2; } void a(int id1, string id2); void b(int id1, int id2); void c(int id1, string p); void d(int id1, string id2, int p); void e(int id1, int id2, int p); void f(int id1, string p, int q); } Collection!I coll; static assert(is(typeof(coll["x"].a()) == void)); static assert(is(typeof(coll.b(42)) == void)); static assert(is(typeof(coll.c("foo")) == void)); static assert(is(typeof(coll["x"].d(42)) == void)); static assert(is(typeof(coll.e(42, 42)) == void)); static assert(is(typeof(coll.f("foo", 42)) == void)); } /// Model two nested collections using normal query parameters as indexes unittest { // // API definition // interface SubItemAPI { // Define the index path that leads to a sub item struct CollectionIndices { // The ID of the base item. This must match the definition in // ItemAPI.CollectionIndices string item; // The index if the sub item int index; } // GET /items/subItems/length?item=... @property int length(string item); // GET /items/subItems/squared_position?item=...&index=... int getSquaredPosition(string item, int index); } interface ItemAPI { // Define the index that identifies an item struct CollectionIndices { string item; } // base path /items/subItems?item=... Collection!SubItemAPI subItems(string item); // GET /items/name?item=... @property string name(string item); } interface API { // a collection of items at the base path /items/ Collection!ItemAPI items(); } // // Local API implementation // class SubItemAPIImpl : SubItemAPI { @property int length(string item) { return 10; } int getSquaredPosition(string item, int index) { return index ^^ 2; } } class ItemAPIImpl : ItemAPI { private SubItemAPIImpl m_subItems; this() { m_subItems = new SubItemAPIImpl; } Collection!SubItemAPI subItems(string item) { return Collection!SubItemAPI(m_subItems, item); } string name(string item) { return item; } } class APIImpl : API { private ItemAPIImpl m_items; this() { m_items = new ItemAPIImpl; } Collection!ItemAPI items() { return Collection!ItemAPI(m_items); } } // // Resulting API usage // API api = new APIImpl; // A RestInterfaceClient!API would work just as well // GET /items/name?item=foo assert(api.items["foo"].name == "foo"); // GET /items/subitems/length?item=foo assert(api.items["foo"].subItems.length == 10); // GET /items/subitems/squared_position?item=foo&index=2 assert(api.items["foo"].subItems[2].getSquaredPosition() == 4); } unittest { interface C { struct CollectionIndices { int _ax; int _b; } void testB(int _ax, int _b); } interface B { struct CollectionIndices { int _a; } Collection!C c(); void testA(int _a); } interface A { Collection!B b(); } static assert (!is(typeof(A.init.b[1].c[2].testB()))); } /** Allows processing the server request/response before the handler method is called. Note that this attribute is only used by `registerRestInterface`, but not by the client generators. This attribute expects the name of a parameter that will receive its return value. Writing to the response body from within the specified hander function causes any further processing of the request to be skipped. In particular, the route handler method will not be called. Note: The example shows the drawback of this attribute. It generally is a leaky abstraction that propagates to the base interface. For this reason the use of this attribute is not recommended, unless there is no suitable alternative. */ alias before = vibe.internal.meta.funcattr.before; /// @safe unittest { import vibe.http.server : HTTPServerRequest, HTTPServerResponse; interface MyService { long getHeaderCount(size_t foo = 0) @safe; } static size_t handler(HTTPServerRequest req, HTTPServerResponse res) { return req.headers.length; } class MyServiceImpl : MyService { // the "foo" parameter will receive the number of request headers @before!handler("foo") long getHeaderCount(size_t foo) { return foo; } } void test(URLRouter router) @safe { router.registerRestInterface(new MyServiceImpl); } } /** Allows processing the return value of a handler method and the request/response objects. The value returned by the REST API will be the value returned by the last `@after` handler, which allows to post process the results of the handler method. Writing to the response body from within the specified handler function causes any further processing of the request ot be skipped, including any other `@after` annotations and writing the result value. */ alias after = vibe.internal.meta.funcattr.after; /// @safe unittest { import vibe.http.server : HTTPServerRequest, HTTPServerResponse; interface MyService { long getMagic() @safe; } static long handler(long ret, HTTPServerRequest req, HTTPServerResponse res) @safe { return ret * 2; } class MyServiceImpl : MyService{ // the result reported by the REST API will be 42 @after!handler long getMagic() { return 21; } } void test(URLRouter router) @safe { router.registerRestInterface(new MyServiceImpl); } } /** * Generate an handler that will wrap the server's method * * This function returns an handler, generated at compile time, that * will deserialize the parameters, pass them to the function implemented * by the user, and return what it needs to return, be it header parameters * or body, which is at the moment either a pure string or a Json object. * * One thing that makes this method more complex that it needs be is the * inability for D to attach UDA to parameters. This means we have to roll * our own implementation, which tries to be as easy to use as possible. * We'll require the user to give the name of the parameter as a string to * our UDA. Hopefully, we're also able to detect at compile time if the user * made a typo of any kind (see $(D genInterfaceValidationError)). * * Note: * Lots of abbreviations are used to ease the code, such as * PTT (ParameterTypeTuple), WPAT (WebParamAttributeTuple) * and PWPAT (ParameterWebParamAttributeTuple). * * Params: * T = type of the object which represent the REST server (user implemented). * Func = An alias to the function of $(D T) to wrap. * * inst = REST server on which to call our $(D Func). * settings = REST server configuration. * * Returns: * A delegate suitable to use as an handler for an HTTP request. */ private HTTPServerRequestDelegate jsonMethodHandler(alias Func, size_t ridx, T)(T inst, ref RestInterface!T intf) { import std.meta : AliasSeq; import std.string : format; import vibe.http.server : HTTPServerRequest, HTTPServerResponse; import vibe.http.common : HTTPStatusException, HTTPStatus, enforceBadRequest; import vibe.utils.string : sanitizeUTF8; import vibe.web.internal.rest.common : ParameterKind; import vibe.internal.meta.funcattr : IsAttributedParameter, computeAttributedParameterCtx; import vibe.internal.meta.traits : derivedMethod; import vibe.textfilter.urlencode : urlDecode; enum Method = __traits(identifier, Func); alias PTypes = ParameterTypeTuple!Func; alias PDefaults = ParameterDefaultValueTuple!Func; alias CFuncRaw = derivedMethod!(T, Func); static if (AliasSeq!(CFuncRaw).length > 0) alias CFunc = CFuncRaw; else alias CFunc = Func; alias RT = ReturnType!(FunctionTypeOf!Func); static const sroute = RestInterface!T.staticRoutes[ridx]; auto route = intf.routes[ridx]; auto settings = intf.settings; void handler(HTTPServerRequest req, HTTPServerResponse res) @safe { if (route.bodyParameters.length) { logDebug("BODYPARAMS: %s %s", Method, route.bodyParameters.length); /*enforceBadRequest(req.contentType == "application/json", "The Content-Type header needs to be set to application/json.");*/ enforceBadRequest(req.json.type != Json.Type.undefined, "The request body does not contain a valid JSON value."); enforceBadRequest(req.json.type == Json.Type.object, "The request body must contain a JSON object."); } static if (isAuthenticated!(T, Func)) { auto auth_info = handleAuthentication!Func(inst, req, res); if (res.headerWritten) return; } PTypes params; foreach (i, PT; PTypes) { enum sparam = sroute.parameters[i]; static if (sparam.isIn) { enum pname = sparam.name; auto fieldname = route.parameters[i].fieldName; static if (isInstanceOf!(Nullable, PT)) PT v; else Nullable!PT v; static if (sparam.kind == ParameterKind.auth) { v = auth_info; } else static if (sparam.kind == ParameterKind.query) { if (auto pv = fieldname in req.query) v = fromRestString!PT(*pv); } else static if (sparam.kind == ParameterKind.wholeBody) { try v = deserializeJson!PT(req.json); catch (JSONException e) enforceBadRequest(false, e.msg); } else static if (sparam.kind == ParameterKind.body_) { try { if (auto pv = fieldname in req.json) v = deserializeJson!PT(*pv); } catch (JSONException e) enforceBadRequest(false, e.msg); } else static if (sparam.kind == ParameterKind.header) { if (auto pv = fieldname in req.headers) v = fromRestString!PT(*pv); } else static if (sparam.kind == ParameterKind.attributed) { static if (!__traits(compiles, () @safe { computeAttributedParameterCtx!(CFunc, pname)(inst, req, res); } ())) pragma(msg, "Non-@safe @before evaluators are deprecated - annotate evaluator function for parameter "~pname~" of "~T.stringof~"."~Method~" as @safe."); v = () @trusted { return computeAttributedParameterCtx!(CFunc, pname)(inst, req, res); } (); } else static if (sparam.kind == ParameterKind.internal) { if (auto pv = fieldname in req.params) v = fromRestString!PT(urlDecode(*pv)); } else static assert(false, "Unhandled parameter kind."); static if (isInstanceOf!(Nullable, PT)) params[i] = v; else if (v.isNull()) { static if (!is(PDefaults[i] == void)) params[i] = PDefaults[i]; else enforceBadRequest(false, "Missing non-optional "~sparam.kind.to!string~" parameter '"~(fieldname.length?fieldname:sparam.name)~"'."); } else params[i] = v; } } static if (isAuthenticated!(T, Func)) handleAuthorization!(T, Func, params)(auth_info); void handleCors() { import std.algorithm : any; import std.uni : sicmp; if (req.method == HTTPMethod.OPTIONS) return; auto origin = "Origin" in req.headers; if (origin is null) return; if (settings.allowedOrigins.length != 0 && !settings.allowedOrigins.any!(org => org.sicmp((*origin)) == 0)) return; res.headers["Access-Control-Allow-Origin"] = *origin; res.headers["Access-Control-Allow-Credentials"] = "true"; } // Anti copy-paste void returnHeaders() { handleCors(); foreach (i, P; PTypes) { static if (sroute.parameters[i].isOut) { static assert (sroute.parameters[i].kind == ParameterKind.header); static if (isInstanceOf!(Nullable, typeof(params[i]))) { if (!params[i].isNull) res.headers[route.parameters[i].fieldName] = to!string(params[i]); } else { res.headers[route.parameters[i].fieldName] = to!string(params[i]); } } } } try { import vibe.internal.meta.funcattr; static if (!__traits(compiles, () @safe { __traits(getMember, inst, Method)(params); })) pragma(msg, "Non-@safe methods are deprecated in REST interfaces - Mark "~T.stringof~"."~Method~" as @safe."); static if (is(RT == void)) { () @trusted { __traits(getMember, inst, Method)(params); } (); // TODO: remove after deprecation period returnHeaders(); res.writeBody(cast(ubyte[])null); } else { auto ret = () @trusted { return __traits(getMember, inst, Method)(params); } (); // TODO: remove after deprecation period static if (!__traits(compiles, () @safe { evaluateOutputModifiers!Func(ret, req, res); } ())) pragma(msg, "Non-@safe @after evaluators are deprecated - annotate @after evaluator function for "~T.stringof~"."~Method~" as @safe."); ret = () @trusted { return evaluateOutputModifiers!CFunc(ret, req, res); } (); returnHeaders(); debug res.writePrettyJsonBody(ret); else res.writeJsonBody(ret); } } catch (HTTPStatusException e) { if (res.headerWritten) logDebug("Response already started when a HTTPStatusException was thrown. Client will not receive the proper error code (%s)!", e.status); else { returnHeaders(); res.writeJsonBody([ "statusMessage": e.msg ], e.status); } } catch (Exception e) { // TODO: better error description! logDebug("REST handler exception: %s", () @trusted { return e.toString(); } ()); if (res.headerWritten) logDebug("Response already started. Client will not receive an error code!"); else { returnHeaders(); debug res.writeJsonBody( [ "statusMessage": e.msg, "statusDebugMessage": () @trusted { return sanitizeUTF8(cast(ubyte[])e.toString()); } () ], HTTPStatus.internalServerError ); else res.writeJsonBody(["statusMessage": e.msg], HTTPStatus.internalServerError); } } } return &handler; } /** * Generate an handler that will wrap the server's method * * This function returns an handler that handles the http OPTIONS method. * * It will return the ALLOW header with all the methods on this resource * And it will handle Preflight CORS. * * Params: * routes = a range of Routes were each route has the same resource/URI * just different method. * settings = REST server configuration. * * Returns: * A delegate suitable to use as an handler for an HTTP request. */ private HTTPServerRequestDelegate optionsMethodHandler(RouteRange)(RouteRange routes, RestInterfaceSettings settings = null) { import vibe.http.server : HTTPServerRequest, HTTPServerResponse; import std.algorithm : map, joiner, any; import std.conv : text; import std.array : array; import vibe.http.common : httpMethodString, httpMethodFromString; // NOTE: don't know what is better, to keep this in memory, or generate on each request auto allow = routes.map!(r => r.method.httpMethodString).joiner(",").text(); auto methods = routes.map!(r => r.method).array(); void handlePreflightedCors(HTTPServerRequest req, HTTPServerResponse res, ref HTTPMethod[] methods, RestInterfaceSettings settings = null) { import std.algorithm : among; import std.uni : sicmp; auto origin = "Origin" in req.headers; if (origin is null) return; if (settings !is null && settings.allowedOrigins.length != 0 && !settings.allowedOrigins.any!(org => org.sicmp((*origin)) == 0)) return; auto method = "Access-Control-Request-Method" in req.headers; if (method is null) return; auto httpMethod = httpMethodFromString(*method); if (!methods.any!(m => m == httpMethod)) return; res.headers["Access-Control-Allow-Origin"] = *origin; // there is no way to know if the specific resource supports credentials // (either cookies, HTTP authentication, or client-side SSL certificates), // so we always assume it does res.headers["Access-Control-Allow-Credentials"] = "true"; res.headers["Access-Control-Max-Age"] = "1728000"; res.headers["Access-Control-Allow-Methods"] = *method; // we have no way to reliably determine what headers the resource allows // so we simply copy whatever the client requested if (auto headers = "Access-Control-Request-Headers" in req.headers) res.headers["Access-Control-Allow-Headers"] = *headers; } void handler(HTTPServerRequest req, HTTPServerResponse res) { // since this is a OPTIONS request, we have to return the ALLOW headers to tell which methods we have res.headers["Allow"] = allow; // handle CORS preflighted requests handlePreflightedCors(req,res,methods,settings); // NOTE: besides just returning the allowed methods and handling CORS preflighted requests, // this would be a nice place to describe what kind of resources are on this route, // the params each accepts, the headers, etc... think WSDL but then for REST. res.writeBody(""); } return &handler; } private string generateRestClientMethods(I)() { import std.array : join; import std.string : format; import std.traits : fullyQualifiedName, isInstanceOf; alias Info = RestInterface!I; string ret = q{ import vibe.internal.meta.codegen : CloneFunction; }; // generate sub interface methods foreach (i, SI; Info.SubInterfaceTypes) { alias F = Info.SubInterfaceFunctions[i]; alias RT = ReturnType!F; alias ParamNames = ParameterIdentifierTuple!F; static if (ParamNames.length == 0) enum pnames = ""; else enum pnames = ", " ~ [ParamNames].join(", "); static if (isInstanceOf!(Collection, RT)) { ret ~= q{ mixin CloneFunction!(Info.SubInterfaceFunctions[%1$s], q{ return Collection!(%2$s)(m_subInterfaces[%1$s]%3$s); }); }.format(i, fullyQualifiedName!SI, pnames); } else { ret ~= q{ mixin CloneFunction!(Info.SubInterfaceFunctions[%1$s], q{ return m_subInterfaces[%1$s]; }); }.format(i); } } // generate route methods foreach (i, F; Info.RouteFunctions) { alias ParamNames = ParameterIdentifierTuple!F; static if (ParamNames.length == 0) enum pnames = ""; else enum pnames = ", " ~ [ParamNames].join(", "); ret ~= q{ mixin CloneFunction!(Info.RouteFunctions[%1$s], q{ return executeClientMethod!(I, %1$s%2$s)(*m_intf, m_requestFilter); }); }.format(i, pnames); } return ret; } private auto executeClientMethod(I, size_t ridx, ARGS...) (in ref RestInterface!I intf, void delegate(HTTPClientRequest) @safe request_filter) { import vibe.web.internal.rest.common : ParameterKind; import vibe.textfilter.urlencode : filterURLEncode, urlEncode; import std.array : appender; alias Info = RestInterface!I; alias Func = Info.RouteFunctions[ridx]; alias RT = ReturnType!Func; alias PTT = ParameterTypeTuple!Func; enum sroute = Info.staticRoutes[ridx]; auto route = intf.routes[ridx]; InetHeaderMap headers; InetHeaderMap reqhdrs; InetHeaderMap opthdrs; string url_prefix; auto query = appender!string(); auto jsonBody = Json.emptyObject; string body_; void addQueryParam(size_t i)(string name) { if (query.data.length) query.put('&'); query.filterURLEncode(name); query.put("="); static if (is(PT == Json)) query.filterURLEncode(ARGS[i].toString()); else // Note: CTFE triggers compiler bug here (think we are returning Json, not string). query.filterURLEncode(toRestString(serializeToJson(ARGS[i]))); } foreach (i, PT; PTT) { enum sparam = sroute.parameters[i]; auto fieldname = route.parameters[i].fieldName; static if (sparam.kind == ParameterKind.query) { addQueryParam!i(fieldname); } else static if (sparam.kind == ParameterKind.wholeBody) { jsonBody = serializeToJson(ARGS[i]); } else static if (sparam.kind == ParameterKind.body_) { jsonBody[fieldname] = serializeToJson(ARGS[i]); } else static if (sparam.kind == ParameterKind.header) { // Don't send 'out' parameter, as they should be default init anyway and it might confuse some server static if (sparam.isIn) { static if (isInstanceOf!(Nullable, PT)) { if (!ARGS[i].isNull) headers[fieldname] = to!string(ARGS[i]); } else headers[fieldname] = to!string(ARGS[i]); } static if (sparam.isOut) { // Optional parameter static if (isInstanceOf!(Nullable, PT)) { opthdrs[fieldname] = null; } else { reqhdrs[fieldname] = null; } } } } static if (sroute.method == HTTPMethod.GET) { assert(jsonBody == Json.emptyObject, "GET request trying to send body parameters."); } else { debug body_ = jsonBody.toPrettyString(); else body_ = jsonBody.toString(); } string url; foreach (i, p; route.fullPathParts) { if (p.isParameter) { switch (p.text) { foreach (j, PT; PTT) { static if (sroute.parameters[j].name[0] == '_' || sroute.parameters[j].name == "id") { case sroute.parameters[j].name: url ~= urlEncode(toRestString(serializeToJson(ARGS[j]))); goto sbrk; } } default: url ~= ":" ~ p.text; break; } sbrk:; } else url ~= p.text; } scope (exit) { foreach (i, PT; PTT) { enum sparam = sroute.parameters[i]; auto fieldname = route.parameters[i].fieldName; static if (sparam.kind == ParameterKind.header) { static if (sparam.isOut) { static if (isInstanceOf!(Nullable, PT)) { ARGS[i] = to!(TemplateArgsOf!PT)( opthdrs.get(fieldname, null)); } else { if (auto ptr = fieldname in reqhdrs) ARGS[i] = to!PT(*ptr); } } } } } auto jret = request(URL(intf.baseURL), request_filter, sroute.method, url, headers, query.data, body_, reqhdrs, opthdrs, intf.settings.httpClientSettings); static if (!is(RT == void)) return deserializeJson!RT(jret); } import vibe.http.client : HTTPClientRequest; /** * Perform a request to the interface using the given parameters. * * Params: * verb = Kind of request (See $(D HTTPMethod) enum). * name = Location to request. For a request on https://github.com/rejectedsoftware/vibe.d/issues?q=author%3ASantaClaus, * it will be '/rejectedsoftware/vibe.d/issues'. * hdrs = The headers to send. Some field might be overriden (such as Content-Length). However, Content-Type will NOT be overriden. * query = The $(B encoded) query string. For a request on https://github.com/rejectedsoftware/vibe.d/issues?q=author%3ASantaClaus, * it will be 'author%3ASantaClaus'. * body_ = The body to send, as a string. If a Content-Type is present in $(D hdrs), it will be used, otherwise it will default to * the generic type "application/json". * reqReturnHdrs = A map of required return headers. * To avoid returning unused headers, nothing is written * to this structure unless there's an (usually empty) * entry (= the key exists) with the same key. * If any key present in `reqReturnHdrs` is not present * in the response, an Exception is thrown. * optReturnHdrs = A map of optional return headers. * This behaves almost as exactly as reqReturnHdrs, * except that non-existent key in the response will * not cause it to throw, but rather to set this entry * to 'null'. * * Returns: * The Json object returned by the request */ private Json request(URL base_url, void delegate(HTTPClientRequest) @safe request_filter, HTTPMethod verb, string path, in ref InetHeaderMap hdrs, string query, string body_, ref InetHeaderMap reqReturnHdrs, ref InetHeaderMap optReturnHdrs, in HTTPClientSettings http_settings) @safe { import vibe.http.client : HTTPClientRequest, HTTPClientResponse, requestHTTP; import vibe.http.common : HTTPStatusException, HTTPStatus, httpMethodString, httpStatusText; URL url = base_url; url.pathString = path; if (query.length) url.queryString = query; Json ret; auto reqdg = (scope HTTPClientRequest req) { req.method = verb; foreach (k, v; hdrs) req.headers[k] = v; if (request_filter) () @trusted { request_filter(req); } (); if (body_ != "") req.writeBody(cast(const(ubyte)[])body_, hdrs.get("Content-Type", "application/json")); }; auto resdg = (scope HTTPClientResponse res) { if (!res.bodyReader.empty) ret = res.readJson(); logDebug( "REST call: %s %s -> %d, %s", httpMethodString(verb), url.toString(), res.statusCode, ret.toString() ); // Get required headers - Don't throw yet string[] missingKeys; foreach (k, ref v; reqReturnHdrs) if (auto ptr = k in res.headers) v = (*ptr).idup; else missingKeys ~= k; // Get optional headers foreach (k, ref v; optReturnHdrs) if (auto ptr = k in res.headers) v = (*ptr).idup; else v = null; if (missingKeys.length) throw new Exception( "REST interface mismatch: Missing required header field(s): " ~ missingKeys.to!string); if (!isSuccessCode(cast(HTTPStatus)res.statusCode)) throw new RestException(res.statusCode, ret); }; if (http_settings) requestHTTP(url, reqdg, resdg, http_settings); else requestHTTP(url, reqdg, resdg); return ret; } private { import vibe.data.json; import std.conv : to; string toRestString(Json value) @safe { switch (value.type) { default: return value.toString(); case Json.Type.Bool: return value.get!bool ? "true" : "false"; case Json.Type.Int: return to!string(value.get!long); case Json.Type.Float: return to!string(value.get!double); case Json.Type.String: return value.get!string; } } T fromRestString(T)(string value) { import std.conv : ConvException; import vibe.web.common : HTTPStatusException, HTTPStatus; try { static if (isInstanceOf!(Nullable, T)) return T(fromRestString!(typeof(T.init.get()))(value)); else static if (is(T == bool)) return value == "1" || value.to!T; else static if (is(T : int)) return to!T(value); else static if (is(T : double)) return to!T(value); // FIXME: formattedWrite(dst, "%.16g", json.get!double); else static if (is(string : T)) return value; else static if (__traits(compiles, T.fromISOExtString("hello"))) return T.fromISOExtString(value); else static if (__traits(compiles, T.fromString("hello"))) return T.fromString(value); else return deserializeJson!T(parseJson(value)); } catch (ConvException e) { throw new HTTPStatusException(HTTPStatus.badRequest, e.msg); } catch (JSONException e) { throw new HTTPStatusException(HTTPStatus.badRequest, e.msg); } } // Converting from invalid JSON string to aggregate should throw bad request unittest { import vibe.web.common : HTTPStatusException, HTTPStatus; void assertHTTPStatus(E)(lazy E expression, HTTPStatus expectedStatus, string file = __FILE__, size_t line = __LINE__) { import core.exception : AssertError; import std.format : format; try expression(); catch (HTTPStatusException e) { if (e.status != expectedStatus) throw new AssertError(format("assertHTTPStatus failed: " ~ "status expected %d but was %d", expectedStatus, e.status), file, line); return; } throw new AssertError("assertHTTPStatus failed: No " ~ "'HTTPStatusException' exception was thrown", file, line); } struct Foo { int bar; } assertHTTPStatus(fromRestString!(Foo)("foo"), HTTPStatus.badRequest); } } private string generateModuleImports(I)() { if (!__ctfe) assert (false); import vibe.internal.meta.codegen : getRequiredImports; import std.algorithm : map; import std.array : join; auto modules = getRequiredImports!I(); return join(map!(a => "static import " ~ a ~ ";")(modules), "\n"); } version(unittest) { private struct Aggregate { } private interface Interface { Aggregate[] foo(); } } unittest { enum imports = generateModuleImports!Interface; static assert (imports == "static import vibe.web.rest;"); } // Check that the interface is valid. Every checks on the correctness of the // interface should be put in checkRestInterface, which allows to have consistent // errors in the server and client. package string getInterfaceValidationError(I)() out (result) { assert((result is null) == !result.length); } body { import vibe.web.internal.rest.common : ParameterKind; import std.typetuple : TypeTuple; import std.algorithm : strip; // The hack parameter is to kill "Statement is not reachable" warnings. string validateMethod(alias Func)(bool hack = true) { import vibe.internal.meta.uda; import std.string : format; static assert(is(FunctionTypeOf!Func), "Internal error"); if (!__ctfe) assert(false, "Internal error"); enum FuncId = (fullyQualifiedName!I~ "." ~ __traits(identifier, Func)); alias PT = ParameterTypeTuple!Func; static if (!__traits(compiles, ParameterIdentifierTuple!Func)) { if (hack) return "%s: A parameter has no name.".format(FuncId); alias PN = TypeTuple!("-DummyInvalid-"); } else alias PN = ParameterIdentifierTuple!Func; alias WPAT = UDATuple!(WebParamAttribute, Func); // Check if there is no orphan UDATuple (e.g. typo while writing the name of the parameter). foreach (i, uda; WPAT) { // Note: static foreach gets unrolled, generating multiple nested sub-scope. // The spec / DMD doesn't like when you have the same symbol in those, // leading to wrong codegen / wrong template being reused. // That's why those templates need different names. // See DMD bug #9748. mixin(GenOrphan!(i).Decl); // template CmpOrphan(string name) { enum CmpOrphan = (uda.identifier == name); } static if (!anySatisfy!(mixin(GenOrphan!(i).Name), PN)) { if (hack) return "%s: No parameter '%s' (referenced by attribute @%sParam)" .format(FuncId, uda.identifier, uda.origin); } } foreach (i, P; PT) { static if (!PN[i].length) if (hack) return "%s: Parameter %d has no name." .format(FuncId, i); // Check for multiple origins static if (WPAT.length) { // It's okay to reuse GenCmp, as the order of params won't change. // It should/might not be reinstantiated by the compiler. mixin(GenCmp!("Loop", i, PN[i]).Decl); alias WPA = Filter!(mixin(GenCmp!("Loop", i, PN[i]).Name), WPAT); static if (WPA.length > 1) if (hack) return "%s: Parameter '%s' has multiple @*Param attributes on it." .format(FuncId, PN[i]); } } // Check for misplaced ref / out alias PSC = ParameterStorageClass; foreach (i, SC; ParameterStorageClassTuple!Func) { static if (SC & PSC.out_ || SC & PSC.ref_) { mixin(GenCmp!("Loop", i, PN[i]).Decl); alias Attr = Filter!(mixin(GenCmp!("Loop", i, PN[i]).Name), WPAT); static if (Attr.length != 1) { if (hack) return "%s: Parameter '%s' cannot be %s" .format(FuncId, PN[i], SC & PSC.out_ ? "out" : "ref"); } else static if (Attr[0].origin != ParameterKind.header) { if (hack) return "%s: %s parameter '%s' cannot be %s" .format(FuncId, Attr[0].origin, PN[i], SC & PSC.out_ ? "out" : "ref"); } } } // Check for @path(":name") enum pathAttr = findFirstUDA!(PathAttribute, Func); static if (pathAttr.found) { static if (!pathAttr.value.length) { if (hack) return "%s: Path is null or empty".format(FuncId); } else { import std.algorithm : canFind, splitter; // splitter doesn't work with alias this ? auto str = pathAttr.value.data; if (str.canFind("//")) return "%s: Path '%s' contains empty entries.".format(FuncId, pathAttr.value); str = str.strip('/'); if (!str.length) return null; foreach (elem; str.splitter('/')) { assert(elem.length, "Empty path entry not caught yet!?"); if (elem[0] == ':') { // typeof(PN) is void when length is 0. static if (!PN.length) { if (hack) return "%s: Path contains '%s', but no parameter '_%s' defined." .format(FuncId, elem, elem[1..$]); } else { if (![PN].canFind("_"~elem[1..$])) if (hack) return "%s: Path contains '%s', but no parameter '_%s' defined." .format(FuncId, elem, elem[1..$]); elem = elem[1..$]; } } } // TODO: Check for validity of the subpath. } } return null; } if (!__ctfe) assert(false, "Internal error"); bool hack = true; foreach (method; __traits(allMembers, I)) { // WORKAROUND #1045 / @@BUG14375@@ static if (method.length != 0) foreach (overload; MemberFunctionsTuple!(I, method)) { static if (validateMethod!(overload)()) if (hack) return validateMethod!(overload)(); } } return null; } // Test detection of user typos (e.g., if the attribute is on a parameter that doesn't exist). unittest { enum msg = "No parameter 'ath' (referenced by attribute @headerParam)"; interface ITypo { @headerParam("ath", "Authorization") // mistyped parameter name string getResponse(string auth); } enum err = getInterfaceValidationError!ITypo; static assert(err !is null && stripTestIdent(err) == msg, "Expected validation error for getResponse, got: "~stripTestIdent(err)); } // Multiple origin for a parameter unittest { enum msg = "Parameter 'arg1' has multiple @*Param attributes on it."; interface IMultipleOrigin { @headerParam("arg1", "Authorization") @bodyParam("arg1", "Authorization") string getResponse(string arg1, int arg2); } enum err = getInterfaceValidationError!IMultipleOrigin; static assert(err !is null && stripTestIdent(err) == msg, err); } // Missing parameter name unittest { enum msg = "Parameter 0 has no name."; interface IMissingName1 { string getResponse(string = "troublemaker"); } interface IMissingName2 { string getResponse(string); } enum err1 = getInterfaceValidationError!IMissingName1; static assert(err1 !is null && stripTestIdent(err1) == msg, err1); enum err2 = getInterfaceValidationError!IMissingName2; static assert(err2 !is null && stripTestIdent(err2) == msg, err2); } // Issue 949 unittest { enum msg = "Path contains ':owner', but no parameter '_owner' defined."; @path("/repos/") interface IGithubPR { @path(":owner/:repo/pulls") string getPullRequests(string owner, string repo); } enum err = getInterfaceValidationError!IGithubPR; static assert(err !is null && stripTestIdent(err) == msg, err); } // Issue 1017 unittest { interface TestSuccess { @path("/") void test(); } interface TestSuccess2 { @path("/test/") void test(); } interface TestFail { @path("//") void test(); } interface TestFail2 { @path("/test//it/") void test(); } static assert(getInterfaceValidationError!TestSuccess is null); static assert(getInterfaceValidationError!TestSuccess2 is null); static assert(stripTestIdent(getInterfaceValidationError!TestFail) == "Path '//' contains empty entries."); static assert(stripTestIdent(getInterfaceValidationError!TestFail2) == "Path '/test//it/' contains empty entries."); } unittest { interface NullPath { @path(null) void test(); } interface ExplicitlyEmptyPath { @path("") void test(); } static assert(stripTestIdent(getInterfaceValidationError!NullPath) == "Path is null or empty"); static assert(stripTestIdent(getInterfaceValidationError!ExplicitlyEmptyPath) == "Path is null or empty"); // Note: Implicitly empty path are valid: // interface ImplicitlyEmptyPath { void get(); } } // Accept @headerParam ref / out parameters unittest { interface HeaderRef { @headerParam("auth", "auth") string getData(ref string auth); } static assert(getInterfaceValidationError!HeaderRef is null, stripTestIdent(getInterfaceValidationError!HeaderRef)); interface HeaderOut { @headerParam("auth", "auth") void getData(out string auth); } static assert(getInterfaceValidationError!HeaderOut is null, stripTestIdent(getInterfaceValidationError!HeaderOut)); } // Reject unattributed / @queryParam or @bodyParam ref / out parameters unittest { interface QueryRef { @queryParam("auth", "auth") string getData(ref string auth); } static assert(stripTestIdent(getInterfaceValidationError!QueryRef) == "query parameter 'auth' cannot be ref"); interface QueryOut { @queryParam("auth", "auth") void getData(out string auth); } static assert(stripTestIdent(getInterfaceValidationError!QueryOut) == "query parameter 'auth' cannot be out"); interface BodyRef { @bodyParam("auth", "auth") string getData(ref string auth); } static assert(stripTestIdent(getInterfaceValidationError!BodyRef) == "body_ parameter 'auth' cannot be ref"); interface BodyOut { @bodyParam("auth", "auth") void getData(out string auth); } static assert(stripTestIdent(getInterfaceValidationError!BodyOut) == "body_ parameter 'auth' cannot be out"); // There's also the possibility of someone using an out unnamed // parameter (don't ask me why), but this is catched as unnamed // parameter, so we don't need to check it here. } private string stripTestIdent(string msg) @safe { import std.string; auto idx = msg.indexOf(": "); return idx >= 0 ? msg[idx+2 .. $] : msg; } // Small helper for client code generation private string paramCTMap(string[string] params) @safe { import std.array : appender, join; if (!__ctfe) assert (false, "This helper is only supposed to be called for codegen in RestClientInterface."); auto app = appender!(string[]); foreach (key, val; params) { app ~= "\""~key~"\""; app ~= val; } return app.data.join(", "); } package string stripTUnderscore(string name, RestInterfaceSettings settings) @safe { if ((settings is null || settings.stripTrailingUnderscore) && name.endsWith("_")) return name[0 .. $-1]; else return name; } // Workarounds @@DMD:9748@@, and maybe more package template GenCmp(string name, int id, string cmpTo) { import std.string : format; import std.conv : to; enum Decl = q{ template %1$s(alias uda) { enum %1$s = (uda.identifier == "%2$s"); } }.format(Name, cmpTo); enum Name = name~to!string(id); } // Ditto private template GenOrphan(int id) { import std.string : format; import std.conv : to; enum Decl = q{ template %1$s(string name) { enum %1$s = (uda.identifier == name); } }.format(Name); enum Name = "OrphanCheck"~to!string(id); } // Workaround for issue #1045 / DMD bug 14375 // Also, an example of policy-based design using this module. @safe unittest { import std.traits, std.typetuple; import vibe.internal.meta.codegen; import vibe.internal.meta.typetuple; import vibe.web.internal.rest.common : ParameterKind; interface Policies { @headerParam("auth", "Authorization") string BasicAuth(string auth, ulong expiry) @safe; } @path("/keys/") interface IKeys(alias AuthenticationPolicy = Policies.BasicAuth) { static assert(is(FunctionTypeOf!AuthenticationPolicy == function), "Policies needs to be functions"); @path("/") @method(HTTPMethod.POST) @safe mixin CloneFunctionDecl!(AuthenticationPolicy, true, "create"); } class KeysImpl : IKeys!() { override: string create(string auth, ulong expiry) @safe { return "4242-4242"; } } // Some sanity checks // Note: order is most likely implementation dependent. // Good thing we only have one frontend... alias WPA = WebParamAttribute; static assert(Compare!( Group!(__traits(getAttributes, IKeys!().create)), Group!(PathAttribute("/"), MethodAttribute(HTTPMethod.POST), WPA(ParameterKind.header, "auth", "Authorization")))); void register() @safe { auto router = new URLRouter(); router.registerRestInterface(new KeysImpl()); } void query() @safe { auto client = new RestInterfaceClient!(IKeys!())("http://127.0.0.1:8080"); assert(client.create("Hello", 0) == "4242-4242"); } } vibe.d-0.8.2/web/vibe/web/validation.d000066400000000000000000000075721324361747700174770ustar00rootroot00000000000000/** Parameter validation types transparently supported for web interface methods. Copyright: © 2014 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.web.validation; import vibe.utils.validation; import std.array : appender; import std.typecons : Nullable; /** Validated e-mail parameter type. See_also: $(D vibe.utils.validation.validateEmail) */ struct ValidEmail { private string m_value; private this(string value) { m_value = value; } @disable this(); string toString() const pure nothrow @safe { return m_value; } alias toString this; static Nullable!ValidEmail fromStringValidate(string str, string* error) { // work around disabled default construction Nullable!ValidEmail ret = Nullable!ValidEmail(ValidEmail(null)); ret.nullify(); auto err = appender!string(); // TODO: avoid allocations when possible if (validateEmail(err, str)) ret = ValidEmail(str); else *error = err.data; return ret; } } /// unittest { class WebService { void setEmail(ValidEmail email) { // email is enforced to be valid here } void updateProfileInfo(Nullable!ValidEmail email, Nullable!string full_name) { // email is optional, but always valid // full_name is optional and not validated } } } /** Validated user name parameter type. See_also: $(D vibe.utils.validation.validateUsername) */ struct ValidUsername { private string m_value; private this(string value) { m_value = value; } @disable this(); string toString() const pure nothrow @safe { return m_value; } alias toString this; static Nullable!ValidUsername fromStringValidate(string str, string* error) { // work around disabled default construction Nullable!ValidUsername ret = Nullable!ValidUsername(ValidUsername(null)); ret.nullify(); auto err = appender!string(); // TODO: avoid allocations when possible if (validateUserName(err, str)) ret = ValidUsername(str); else *error = err.data; return ret; } } /// unittest { class WebService { void setUsername(ValidUsername username) { // username is enforced to be valid here } void updateProfileInfo(Nullable!ValidUsername username, Nullable!string full_name) { // username is optional, but always valid // full_name is optional and not validated } } } /** Validated password parameter. See_also: $(D vibe.utils.validation.validatePassword) */ struct ValidPassword { private string m_value; private this(string value) { m_value = value; } @disable this(); string toString() const pure nothrow @safe { return m_value; } alias toString this; static Nullable!ValidPassword fromStringValidate(string str, string* error) { // work around disabled default construction Nullable!ValidPassword ret = Nullable!ValidPassword(ValidPassword(null)); ret.nullify(); auto err = appender!string(); // TODO: avoid allocations when possible if (validatePassword(err, str, str)) ret = ValidPassword(str); else *error = err.data; return ret; } } /** Ensures that the parameter value matches that of another parameter. */ struct Confirm(string CONFIRMED_PARAM) { enum confirmedParameter = CONFIRMED_PARAM; private string m_value; string toString() const pure nothrow @safe { return m_value; } alias toString this; static Confirm fromString(string str) { return Confirm(str); } } /// unittest { class WebService { void setPassword(ValidPassword password, Confirm!"password" password_confirmation) { // password is valid and guaranteed to equal password_confirmation } void setProfileInfo(string full_name, Nullable!ValidPassword password, Nullable!(Confirm!"password") password_confirmation) { // Password is valid and guaranteed to equal password_confirmation // It is allowed for both, password and password_confirmation // to be absent at the same time, but not for only one of them. } } } vibe.d-0.8.2/web/vibe/web/web.d000066400000000000000000001000541324361747700161070ustar00rootroot00000000000000/** Implements a declarative framework for building web interfaces. This module contains the sister funtionality to the $(D vibe.web.rest) module. While the REST interface generator is meant for stateless machine-to-machine communication, this module aims at implementing user facing web services. Apart from that, both systems use the same declarative approach. See $(D registerWebInterface) for an overview of how the system works. Copyright: © 2013-2016 RejectedSoftware e.K. License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file. Authors: Sönke Ludwig */ module vibe.web.web; public import vibe.internal.meta.funcattr : PrivateAccessProxy, before, after; public import vibe.web.common; public import vibe.web.i18n; public import vibe.web.validation; import vibe.core.core; import vibe.inet.url; import vibe.http.common; import vibe.http.router; import vibe.http.server; import vibe.http.websockets; import vibe.web.auth : AuthInfo, handleAuthentication, handleAuthorization, isAuthenticated; import std.encoding : sanitize; /* TODO: - conversion errors of path place holder parameters should result in 404 - support format patterns for redirect() */ /** Registers a HTTP/web interface based on a class instance. Each public method of the given class instance will be mapped to a HTTP route. Property methods are mapped to GET/PUT and all other methods are mapped according to their prefix verb. If the method has no known prefix, POST is used. The rest of the name is mapped to the path of the route according to the given `method_style`. Note that the prefix word must be all-lowercase and is delimited by either an upper case character, a non-alphabetic character, or the end of the string. The following table lists the mappings from prefix verb to HTTP verb: $(TABLE $(TR $(TH HTTP method) $(TH Recognized prefixes)) $(TR $(TD GET) $(TD get, query)) $(TR $(TD PUT) $(TD set, put)) $(TR $(TD POST) $(TD add, create, post)) $(TR $(TD DELETE) $(TD remove, erase, delete)) $(TR $(TD PATCH) $(TD update, patch)) ) Method parameters will be sourced from either the query string or form data of the request, or, if the parameter name has an underscore prefixed, from the $(D vibe.http.server.HTTPServerRequest.params) map. The latter can be used to inject custom data in various ways. Examples of this are placeholders specified in a `@path` annotation, values computed by a `@before` annotation, error information generated by the `@errorDisplay` annotation, or data injected manually in a HTTP method handler that processed the request prior to passing it to the generated web interface handler routes. Methods that return a $(D class) or $(D interface) instance, instead of being mapped to a single HTTP route, will be mapped recursively by iterating the public routes of the returned instance. This way, complex path hierarchies can be mapped to class hierarchies. Parameter_conversion_rules: For mapping method parameters without a prefixed underscore to query/form fields, the following rules are applied: $(UL $(LI An array of values is mapped to `_`, where `index` denotes the zero based index of the array entry. The length of the array is determined by searching for the first non-existent index in the set of form fields.) $(LI $(D Nullable!T) typed parameters, as well as parameters with default values, are optional parameters and are allowed to be missing in the set of form fields. All other parameter types require the corresponding field to be present and will result in a runtime error otherwise.) $(LI $(D struct) type parameters that don't define a $(D fromString) or a $(D fromStringValidate) method will be mapped to one form field per struct member with a scheme similar to how arrays are treated: `_`) $(LI Boolean parameters will be set to $(D true) if a form field of the corresponding name is present and to $(D false) otherwise. This is compatible to how check boxes in HTML forms work.) $(LI All other types of parameters will be converted from a string by using the first available means of the following: a static $(D fromStringValidate) method, a static $(D fromString) method, using $(D std.conv.to!T).) $(LI Any of these rules can be applied recursively, so that it is possible to nest arrays and structs appropriately.) ) Special_parameters: $(UL $(LI A parameter named $(D __error) will be populated automatically with error information, when an $(D @errorDisplay) attribute is in use.) $(LI An $(D InputStream) typed parameter will receive the request body as an input stream. Note that this stream may be already emptied if the request was subject to certain body parsing options. See $(D vibe.http.server.HTTPServerOption).) $(LI Parameters of types $(D vibe.http.server.HTTPServerRequest), $(D vibe.http.server.HTTPServerResponse), $(D vibe.http.common.HTTPRequest) or $(D vibe.http.common.HTTPResponse) will receive the request/response objects of the invoking request.) $(LI If a parameter of the type `WebSocket` is found, the route is registered as a web socket endpoint. It will automatically upgrade the connection and pass the resulting WebSocket to the connection.) ) Supported_attributes: The following attributes are supported for annotating methods of the registered class: $(D @before), $(D @after), $(D @errorDisplay), $(D @vibe.web.common.method), $(D @vibe.web.common.path), $(D @vibe.web.common.contentType) The `@path` attribute can also be applied to the class itself, in which case it will be used as an additional prefix to the one in `WebInterfaceSettings.urlPrefix`. Params: router = The HTTP router to register to instance = Class instance to use for the web interface mapping settings = Optional parameter to customize the mapping process */ URLRouter registerWebInterface(C : Object, MethodStyle method_style = MethodStyle.lowerUnderscored)(URLRouter router, C instance, WebInterfaceSettings settings = null) { import std.algorithm : endsWith; import std.traits; import vibe.internal.meta.uda : findFirstUDA; if (!settings) settings = new WebInterfaceSettings; string url_prefix = settings.urlPrefix; enum cls_path = findFirstUDA!(PathAttribute, C); static if (cls_path.found) { url_prefix = concatURL(url_prefix, cls_path.value, true); } foreach (M; __traits(allMembers, C)) { /*static if (isInstanceOf!(SessionVar, __traits(getMember, instance, M))) { __traits(getMember, instance, M).m_getContext = toDelegate({ return s_requestContext; }); }*/ static if (!is(typeof(__traits(getMember, Object, M)))) { // exclude Object's default methods and field foreach (overload; MemberFunctionsTuple!(C, M)) { alias RT = ReturnType!overload; enum minfo = extractHTTPMethodAndName!(overload, true)(); enum url = minfo.hadPathUDA ? minfo.url : adjustMethodStyle(minfo.url, method_style); static if (findFirstUDA!(NoRouteAttribute, overload).found) { import vibe.core.log : logDebug; logDebug("Method %s.%s annotated with @noRoute - not generating a route entry.", C.stringof, M); } else static if (is(RT == class) || is(RT == interface)) { // nested API static assert( ParameterTypeTuple!overload.length == 0, "Instances may only be returned from parameter-less functions ("~M~")!" ); auto subsettings = settings.dup; subsettings.urlPrefix = concatURL(url_prefix, url, true); registerWebInterface!RT(router, __traits(getMember, instance, M)(), subsettings); } else { auto fullurl = concatURL(url_prefix, url); router.match(minfo.method, fullurl, (HTTPServerRequest req, HTTPServerResponse res) @trusted { handleRequest!(M, overload)(req, res, instance, settings); }); if (settings.ignoreTrailingSlash && !fullurl.endsWith("*") && fullurl != "/") { auto m = fullurl.endsWith("/") ? fullurl[0 .. $-1] : fullurl ~ "/"; router.match(minfo.method, m, delegate void (HTTPServerRequest req, HTTPServerResponse res) @safe { static if (minfo.method == HTTPMethod.GET) { URL redurl = req.fullURL; auto redpath = redurl.path; redpath.endsWithSlash = !redpath.endsWithSlash; redurl.path = redpath; res.redirect(redurl); } else { () @trusted { handleRequest!(M, overload)(req, res, instance, settings); } (); } }); } } } } } return router; } /** Gives an overview of the basic features. For more advanced use, see the example in the "examples/web/" directory. */ unittest { import vibe.http.router; import vibe.http.server; import vibe.web.web; class WebService { private { SessionVar!(string, "login_user") m_loginUser; } @path("/") void getIndex(string _error = null) { header("Access-Control-Allow-Origin", "Access-Control-Allow-Origin: *"); //render!("index.dt", _error); } // automatically mapped to: POST /login @errorDisplay!getIndex void postLogin(string username, string password) { enforceHTTP(username.length > 0, HTTPStatus.forbidden, "User name must not be empty."); enforceHTTP(password == "secret", HTTPStatus.forbidden, "Invalid password."); m_loginUser = username; redirect("/profile"); } // automatically mapped to: POST /logout void postLogout() { terminateSession(); status(201); redirect("/"); } // automatically mapped to: GET /profile void getProfile() { enforceHTTP(m_loginUser.length > 0, HTTPStatus.forbidden, "Must be logged in to access the profile."); //render!("profile.dt") } } void run() { auto router = new URLRouter; router.registerWebInterface(new WebService); auto settings = new HTTPServerSettings; settings.port = 8080; listenHTTP(settings, router); } } /** Renders a Diet template file to the current HTTP response. This function is equivalent to `vibe.http.server.render`, but implicitly writes the result to the response object of the currently processed request. Note that this may only be called from a function/method registered using `registerWebInterface`. In addition to the vanilla `render` function, this one also makes additional functionality available within the template: $(UL $(LI The `req` variable that holds the current request object) $(LI If the `@translationContext` attribute us used, enables the built-in i18n support of Diet templates) ) */ template render(string diet_file, ALIASES...) { void render(string MODULE = __MODULE__, string FUNCTION = __FUNCTION__)() { import vibe.web.i18n; import vibe.internal.meta.uda : findFirstUDA; mixin("static import "~MODULE~";"); alias PARENT = typeof(__traits(parent, mixin(FUNCTION)).init); enum FUNCTRANS = findFirstUDA!(TranslationContextAttribute, mixin(FUNCTION)); enum PARENTTRANS = findFirstUDA!(TranslationContextAttribute, PARENT); static if (FUNCTRANS.found) alias TranslateContext = FUNCTRANS.value.Context; else static if (PARENTTRANS.found) alias TranslateContext = PARENTTRANS.value.Context; assert(s_requestContext.req !is null, "render() used outside of a web interface request!"); auto req = s_requestContext.req; struct TranslateCTX(string lang) { version (Have_diet_ng) { import diet.traits : dietTraits; @dietTraits static struct diet_translate__ { static string translate(string key, string context=null) { return tr!(TranslateContext, lang)(key, context); } } } else static string diet_translate__(string key,string context=null) { return tr!(TranslateContext, lang)(key, context); } void render() { vibe.http.server.render!(diet_file, req, ALIASES, diet_translate__)(s_requestContext.res); } } static if (is(TranslateContext) && languageSeq!TranslateContext.length) { switch (s_requestContext.language) { default: mixin({ string ret; foreach (lang; TranslateContext.languages) ret ~= "case `" ~ lang ~ "`: { TranslateCTX!`" ~ lang ~ "` renderctx; renderctx.render(); return; }"; return ret; }()); } } else { vibe.http.server.render!(diet_file, req, ALIASES)(s_requestContext.res); } } } /** Redirects to the given URL. The URL may either be a full URL, including the protocol and server portion, or it may be the local part of the URI (the path and an optional query string). Finally, it may also be a relative path that is combined with the path of the current request to yield an absolute path. Note that this may only be called from a function/method registered using registerWebInterface. */ void redirect(string url) @safe { import std.algorithm : canFind, endsWith, startsWith; auto ctx = getRequestContext(); URL fullurl; if (url.startsWith("/")) { fullurl = ctx.req.fullURL; fullurl.localURI = url; } else if (url.canFind(":")) { // TODO: better URL recognition fullurl = URL(url); } else if (ctx.req.fullURL.path.endsWithSlash) { fullurl = ctx.req.fullURL; fullurl.localURI = fullurl.path.toString() ~ url; } else { fullurl = ctx.req.fullURL.parentURL; assert(fullurl.localURI.endsWith("/"), "Parent URL not ending in a slash?!"); fullurl.localURI = fullurl.localURI ~ url; } ctx.res.redirect(fullurl); } /// @safe unittest { import vibe.data.json : Json; class WebService { // POST /item void postItem() { redirect("/item/1"); } } void run() { auto router = new URLRouter; router.registerWebInterface(new WebService); auto settings = new HTTPServerSettings; settings.port = 8080; listenHTTP(settings, router); } } /** Sets a response header. Params: name = name of the header to set value = value of the header to set Note that this may only be called from a function/method registered using registerWebInterface. */ void header(string name, string value) @safe { getRequestContext().res.headers[name] = value; } /// @safe unittest { import vibe.data.json : Json; class WebService { // POST /item Json postItem() { header("X-RateLimit-Remaining", "59"); return Json(["id": Json(100)]); } } void run() { auto router = new URLRouter; router.registerWebInterface(new WebService); auto settings = new HTTPServerSettings; settings.port = 8080; listenHTTP(settings, router); } } /** Sets the response status code. Params: statusCode = the HTTPStatus code to send to the client Note that this may only be called from a function/method registered using registerWebInterface. */ void status(int statusCode) @safe in { assert(100 <= statusCode && statusCode < 600); } body { getRequestContext().res.statusCode = statusCode; } /// @safe unittest { import vibe.data.json : Json; class WebService { // POST /item Json postItem() { status(HTTPStatus.created); return Json(["id": Json(100)]); } } void run() { auto router = new URLRouter; router.registerWebInterface(new WebService); auto settings = new HTTPServerSettings; settings.port = 8080; listenHTTP(settings, router); } } /** Returns the agreed upon language. Note that this may only be called from a function/method registered using registerWebInterface. */ @property string language() @safe { return getRequestContext().language; } /** Returns the current request. Note that this may only be called from a function/method registered using registerWebInterface. */ @property HTTPServerRequest request() @safe { return getRequestContext().req; } /// @safe unittest { void requireAuthenticated() { auto authorization = "Authorization" in request.headers; enforceHTTP(authorization !is null, HTTPStatus.forbidden); enforceHTTP(*authorization == "secret", HTTPStatus.forbidden); } class WebService { void getPage() { requireAuthenticated(); } } void run() { auto router = new URLRouter; router.registerWebInterface(new WebService); auto settings = new HTTPServerSettings; settings.port = 8080; listenHTTP(settings, router); } } /** Returns the current response. Note that this may only be called from a function/method registered using registerWebInterface. */ @property HTTPServerResponse response() @safe { return getRequestContext().res; } /// @safe unittest { void logIn() { auto session = response.startSession(); session.set("token", "secret"); } class WebService { void postLogin(string username, string password) { if (username == "foo" && password == "bar") { logIn(); } } } void run() { auto router = new URLRouter; router.registerWebInterface(new WebService); auto settings = new HTTPServerSettings; settings.port = 8080; listenHTTP(settings, router); } } /** Terminates the currently active session (if any). Note that this may only be called from a function/method registered using registerWebInterface. */ void terminateSession() @safe { auto ctx = getRequestContext(); if (ctx.req.session) { ctx.res.terminateSession(); ctx.req.session = Session.init; } } /// @safe unittest { class WebService { // automatically mapped to: POST /logout void postLogout() { terminateSession(); 201.status; redirect("/"); } } void run() { auto router = new URLRouter; router.registerWebInterface(new WebService); auto settings = new HTTPServerSettings; settings.port = 8080; listenHTTP(settings, router); } } /** Translates text based on the language of the current web request. The first overload performs a direct translation of the given translation key/text. The second overload can select from a set of plural forms based on the given integer value (msgid_plural). Params: text = The translation key context = Optional context/namespace identifier (msgctxt) plural_text = Plural form of the translation key count = The quantity used to select the proper plural form of a translation See_also: $(D vibe.web.i18n.translationContext) */ string trWeb(string text, string context = null) @safe { return getRequestContext().tr(text, context); } /// ditto string trWeb(string text, string plural_text, int count, string context = null) @safe { return getRequestContext().tr_plural(text, plural_text, count, context); } /// @safe unittest { struct TRC { import std.typetuple; alias languages = TypeTuple!("en_US", "de_DE", "fr_FR"); //mixin translationModule!"test"; } @translationContext!TRC class WebService { void index(HTTPServerResponse res) { res.writeBody(trWeb("This text will be translated!")); } } } /** Attribute to customize how errors/exceptions are displayed. The first template parameter takes a function that maps an exception and an optional field name to a single error type. The result of this function will then be passed as the $(D _error) parameter to the method referenced by the second template parameter. Supported types for the $(D _error) parameter are $(D bool), $(D string), $(D Exception), or a user defined $(D struct). The $(D field) member, if present, will be set to null if the exception was thrown after the field validation has finished. */ @property errorDisplay(alias DISPLAY_METHOD)() { return ErrorDisplayAttribute!DISPLAY_METHOD.init; } /// Shows the basic error message display. unittest { void getForm(string _error = null) { //render!("form.dt", _error); } @errorDisplay!getForm void postForm(string name) { if (name.length == 0) throw new Exception("Name must not be empty"); redirect("/"); } } /// Advanced error display including the offending form field. unittest { struct FormError { // receives the original error message string error; // receives the name of the field that caused the error, if applicable string field; } void getForm(FormError _error = FormError.init) { //render!("form.dt", _error); } // throws an error if the submitted form value is not a valid integer @errorDisplay!getForm void postForm(int ingeter) { redirect("/"); } } /** Determines how nested D fields/array entries are mapped to form field names. */ NestedNameStyleAttribute nestedNameStyle(NestedNameStyle style) { import vibe.web.common : onlyAsUda; if (!__ctfe) assert(false, onlyAsUda!__FUNCTION__); return NestedNameStyleAttribute(style); } /// unittest { struct Items { int[] entries; } @nestedNameStyle(NestedNameStyle.d) class MyService { // expects fields in D native style: // "items.entries[0]", "items.entries[1]", ... void postItems(Items items) { } } } /** Encapsulates settings used to customize the generated web interface. */ class WebInterfaceSettings { string urlPrefix = "/"; bool ignoreTrailingSlash = true; @property WebInterfaceSettings dup() const @safe { auto ret = new WebInterfaceSettings; ret.urlPrefix = this.urlPrefix; ret.ignoreTrailingSlash = this.ignoreTrailingSlash; return ret; } } /** Maps a web interface member variable to a session field. Setting a SessionVar variable will implicitly start a session, if none has been started yet. The content of the variable will be stored in the session store and is automatically serialized and deserialized. Note that variables of type SessionVar must only be used from within handler functions of a class that was registered using $(D registerWebInterface). Also note that two different session variables with the same $(D name) parameter will access the same underlying data. */ struct SessionVar(T, string name) { @safe: private { T m_initValue; } /** Initializes a session var with a constant value. */ this(T init_val) { m_initValue = init_val; } /// unittest { class MyService { SessionVar!(int, "someInt") m_someInt = 42; void index() { assert(m_someInt == 42); } } } /** Accesses the current value of the session variable. Any access will automatically start a new session and set the initializer value, if necessary. */ @property const(T) value() { auto ctx = getRequestContext(); if (!ctx.req.session) ctx.req.session = ctx.res.startSession(); if (ctx.req.session.isKeySet(name)) return ctx.req.session.get!T(name); ctx.req.session.set!T(name, m_initValue); return m_initValue; } /// ditto @property void value(T new_value) { auto ctx = getRequestContext(); if (!ctx.req.session) ctx.req.session = ctx.res.startSession(); ctx.req.session.set(name, new_value); } void opAssign(T new_value) { this.value = new_value; } alias value this; } private struct ErrorDisplayAttribute(alias DISPLAY_METHOD) { import std.traits : ParameterTypeTuple, ParameterIdentifierTuple; alias displayMethod = DISPLAY_METHOD; enum displayMethodName = __traits(identifier, DISPLAY_METHOD); private template GetErrorParamType(size_t idx) { static if (idx >= ParameterIdentifierTuple!DISPLAY_METHOD.length) static assert(false, "Error display method "~displayMethodName~" is missing the _error parameter."); else static if (ParameterIdentifierTuple!DISPLAY_METHOD[idx] == "_error") alias GetErrorParamType = ParameterTypeTuple!DISPLAY_METHOD[idx]; else alias GetErrorParamType = GetErrorParamType!(idx+1); } alias ErrorParamType = GetErrorParamType!0; ErrorParamType getError(Exception ex, string field) { static if (is(ErrorParamType == bool)) return true; else static if (is(ErrorParamType == string)) return ex.msg; else static if (is(ErrorParamType == Exception)) return ex; else static if (is(typeof(ErrorParamType(ex, field)))) return ErrorParamType(ex, field); else static if (is(typeof(ErrorParamType(ex.msg, field)))) return ErrorParamType(ex.msg, field); else static if (is(typeof(ErrorParamType(ex.msg)))) return ErrorParamType(ex.msg); else static assert(false, "Error parameter type %s does not have the required constructor."); } } private struct NestedNameStyleAttribute { NestedNameStyle value; } private { TaskLocal!RequestContext s_requestContext; } private struct RequestContext { HTTPServerRequest req; HTTPServerResponse res; string language; string function(string, string) @safe tr; string function(string, string, int, string) @safe tr_plural; } private RequestContext getRequestContext() @trusted nothrow { assert(s_requestContext.req !is null, "Request context used outside of a web interface request!"); return s_requestContext; } private void handleRequest(string M, alias overload, C, ERROR...)(HTTPServerRequest req, HTTPServerResponse res, C instance, WebInterfaceSettings settings, ERROR error) if (ERROR.length <= 1) { import std.algorithm : countUntil, startsWith; import std.traits; import std.typetuple : Filter, staticIndexOf; import vibe.core.stream; import vibe.data.json; import vibe.internal.meta.funcattr; import vibe.internal.meta.uda : findFirstUDA; alias RET = ReturnType!overload; alias PARAMS = ParameterTypeTuple!overload; alias default_values = ParameterDefaultValueTuple!overload; alias AuthInfoType = AuthInfo!C; enum param_names = [ParameterIdentifierTuple!overload]; enum erruda = findFirstUDA!(ErrorDisplayAttribute, overload); static if (findFirstUDA!(NestedNameStyleAttribute, C).found) enum nested_style = findFirstUDA!(NestedNameStyleAttribute, C).value.value; else enum nested_style = NestedNameStyle.underscore; s_requestContext = createRequestContext!overload(req, res); enum hasAuth = isAuthenticated!(C, overload); static if (hasAuth) { auto auth_info = handleAuthentication!overload(instance, req, res); if (res.headerWritten) return; } // collect all parameter values PARAMS params = void; // FIXME: in case of errors, destructors could be called on uninitialized variables! foreach (i, PT; PARAMS) { bool got_error = false; ParamError err; err.field = param_names[i]; try { static if (hasAuth && is(PT == AuthInfoType)) { params[i] = auth_info; } else static if (IsAttributedParameter!(overload, param_names[i])) { params[i].setVoid(computeAttributedParameterCtx!(overload, param_names[i])(instance, req, res)); if (res.headerWritten) return; } else static if (param_names[i] == "_error") { static if (ERROR.length == 1) params[i].setVoid(error[0]); else static if (!is(default_values[i] == void)) params[i].setVoid(default_values[i]); else params[i] = typeof(params[i]).init; } else static if (is(PT == InputStream)) params[i] = req.bodyReader; else static if (is(PT == HTTPServerRequest) || is(PT == HTTPRequest)) params[i] = req; else static if (is(PT == HTTPServerResponse) || is(PT == HTTPResponse)) params[i] = res; else static if (is(PT == WebSocket)) {} // handled below else static if (param_names[i].startsWith("_")) { if (auto pv = param_names[i][1 .. $] in req.params) { got_error = !webConvTo(*pv, params[i], err); // treat errors in route parameters as non-match // FIXME: verify that the parameter is actually a route parameter! if (got_error) return; } else static if (!is(default_values[i] == void)) params[i].setVoid(default_values[i]); else static if (!isNullable!PT) enforceHTTP(false, HTTPStatus.badRequest, "Missing request parameter for "~param_names[i]); } else static if (is(PT == bool)) { params[i] = param_names[i] in req.form || param_names[i] in req.query; } else { enum has_default = !is(default_values[i] == void); ParamResult pres = readFormParamRec(req, params[i], param_names[i], !has_default, nested_style, err); static if (has_default) { if (pres == ParamResult.skipped) params[i].setVoid(default_values[i]); } else assert(pres != ParamResult.skipped); if (pres == ParamResult.error) got_error = true; } } catch (HTTPStatusException ex) { throw ex; } catch (Exception ex) { import vibe.core.log : logDebug; got_error = true; err.text = ex.msg; debug logDebug("Error handling field '%s': %s", param_names[i], ex.toString().sanitize); } if (got_error) { static if (erruda.found && ERROR.length == 0) { auto errnfo = erruda.value.getError(new Exception(err.text), err.field); handleRequest!(erruda.value.displayMethodName, erruda.value.displayMethod)(req, res, instance, settings, errnfo); return; } else { auto hex = new HTTPStatusException(HTTPStatus.badRequest, "Error handling field '"~err.field~"': "~err.text); hex.debugMessage = err.debugText; throw hex; } } } // validate all confirmation parameters foreach (i, PT; PARAMS) { static if (isNullable!PT) alias ParamBaseType = typeof(PT.init.get()); else alias ParamBaseType = PT; static if (isInstanceOf!(Confirm, ParamBaseType)) { enum pidx = param_names.countUntil(PT.confirmedParameter); static assert(pidx >= 0, "Unknown confirmation parameter reference \""~PT.confirmedParameter~"\"."); static assert(pidx != i, "Confirmation parameter \""~PT.confirmedParameter~"\" may not reference itself."); bool matched; static if (isNullable!PT && isNullable!(PARAMS[pidx])) { matched = (params[pidx].isNull() && params[i].isNull()) || (!params[pidx].isNull() && !params[i].isNull() && params[pidx] == params[i]); } else { static assert(!isNullable!PT && !isNullable!(PARAMS[pidx]), "Either both or none of the confirmation and original fields must be nullable."); matched = params[pidx] == params[i]; } if (!matched) { auto ex = new Exception("Comfirmation field mismatch."); static if (erruda.found && ERROR.length == 0) { auto err = erruda.value.getError(ex, param_names[i]); handleRequest!(erruda.value.displayMethodName, erruda.value.displayMethod)(req, res, instance, settings, err); return; } else { throw new HTTPStatusException(HTTPStatus.badRequest, ex.msg); } } } } static if (hasAuth) handleAuthorization!(C, overload, params)(auth_info); // execute the method and write the result try { import vibe.internal.meta.funcattr; static if (staticIndexOf!(WebSocket, PARAMS) >= 0) { static assert(is(RET == void), "WebSocket handlers must return void."); handleWebSocket((scope ws) { foreach (i, PT; PARAMS) static if (is(PT == WebSocket)) params[i] = ws; __traits(getMember, instance, M)(params); }, req, res); } else static if (is(RET == void)) { __traits(getMember, instance, M)(params); } else { auto ret = __traits(getMember, instance, M)(params); ret = evaluateOutputModifiers!overload(ret, req, res); static if (is(RET : Json)) { res.writeJsonBody(ret); } else static if (is(RET : InputStream) || is(RET : const ubyte[])) { enum type = findFirstUDA!(ContentTypeAttribute, overload); static if (type.found) { res.writeBody(ret, type.value); } else { res.writeBody(ret); } } else { static assert(is(RET == void), M~": Only InputStream, Json and void are supported as return types for route methods."); } } } catch (Exception ex) { import vibe.core.log; logDebug("Web handler %s has thrown: %s", M, ex); static if (erruda.found && ERROR.length == 0) { auto err = erruda.value.getError(ex, null); handleRequest!(erruda.value.displayMethodName, erruda.value.displayMethod)(req, res, instance, settings, err); } else throw ex; } } private RequestContext createRequestContext(alias handler)(HTTPServerRequest req, HTTPServerResponse res) { RequestContext ret; ret.req = req; ret.res = res; ret.language = determineLanguage!handler(req); import vibe.web.i18n; import vibe.internal.meta.uda : findFirstUDA; alias PARENT = typeof(__traits(parent, handler).init); enum FUNCTRANS = findFirstUDA!(TranslationContextAttribute, handler); enum PARENTTRANS = findFirstUDA!(TranslationContextAttribute, PARENT); static if (FUNCTRANS.found) alias TranslateContext = FUNCTRANS.value.Context; else static if (PARENTTRANS.found) alias TranslateContext = PARENTTRANS.value.Context; static if (is(TranslateContext) && languageSeq!TranslateContext.length) { switch (ret.language) { default: mixin({ string ret; foreach (lang; TranslateContext.languages) { ret ~= "case `" ~ lang ~ "`: ret.tr = &tr!(TranslateContext, `" ~ lang ~ "`); ret.tr_plural = &tr!(TranslateContext, `" ~ lang ~ "`); break;"; } return ret; }()); } } else { ret.tr = (t,c) => t; // Without more knowledge about the requested language, the best we can do is return the msgid as a hint // that either a po file is needed for the language, or that a translation entry does not exist for the msgid. ret.tr_plural = (txt,ptxt,cnt,ctx) => !ptxt.length || cnt == 1 ? txt : ptxt; } return ret; }