diff options
author | Alexander Smirnov <alex@ydb.tech> | 2024-12-24 15:46:17 +0000 |
---|---|---|
committer | Alexander Smirnov <alex@ydb.tech> | 2024-12-24 15:46:17 +0000 |
commit | c7decaf9230ddcb1ec2c42d1f50fb3998166c4ef (patch) | |
tree | 4efde4e4276bb0f24c314909403a1f6ed94c60d7 /contrib | |
parent | cf344b64297e6a79d1e538be9f8f59afb06a2a97 (diff) | |
parent | b821606f7bd364dc755d37b5bcb3559130675364 (diff) | |
download | ydb-c7decaf9230ddcb1ec2c42d1f50fb3998166c4ef.tar.gz |
Merge branch 'rightlib' into merge-libs-241224-1545
Diffstat (limited to 'contrib')
342 files changed, 10491 insertions, 40460 deletions
diff --git a/contrib/libs/cxxsupp/libcxx/include/__support/win32/locale_win32.h b/contrib/libs/cxxsupp/libcxx/include/__support/win32/locale_win32.h index 3c7ae9c693..55e818e63a 100644 --- a/contrib/libs/cxxsupp/libcxx/include/__support/win32/locale_win32.h +++ b/contrib/libs/cxxsupp/libcxx/include/__support/win32/locale_win32.h @@ -41,8 +41,8 @@ #define LC_NUMERIC_MASK _M_NUMERIC #define LC_TIME_MASK _M_TIME #define LC_MESSAGES_MASK _M_MESSAGES -#define LC_MESSAGES _X_MESSAGES -#define LC_ALL_MASK _M_ALL +#define LC_ALL_MASK \ + (LC_COLLATE_MASK | LC_CTYPE_MASK | LC_MESSAGES_MASK | LC_MONETARY_MASK | LC_NUMERIC_MASK | LC_TIME_MASK) class __lconv_storage { public: @@ -191,7 +191,7 @@ decltype(MB_CUR_MAX) MB_CUR_MAX_L(locale_t __l); #define strtod_l _strtod_l #if defined(_LIBCPP_MSVCRT) # define strtof_l _strtof_l -# define strtold_l _strtod_l +# define strtold_l _strtold_l #else _LIBCPP_EXPORTED_FROM_ABI float strtof_l(const char*, char**, locale_t); _LIBCPP_EXPORTED_FROM_ABI long double strtold_l(const char*, char**, locale_t); diff --git a/contrib/libs/cxxsupp/libcxx/patches/09-msc-ver.patch b/contrib/libs/cxxsupp/libcxx/patches/09-clang-cl-abi.patch index dd57def15a..dd57def15a 100644 --- a/contrib/libs/cxxsupp/libcxx/patches/09-msc-ver.patch +++ b/contrib/libs/cxxsupp/libcxx/patches/09-clang-cl-abi.patch diff --git a/contrib/libs/cxxsupp/libcxx/patches/18-locale-win32.patch b/contrib/libs/cxxsupp/libcxx/patches/18-locale-win32.patch deleted file mode 100644 index 85e9323c0c..0000000000 --- a/contrib/libs/cxxsupp/libcxx/patches/18-locale-win32.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff --git a/include/__support/win32/locale_win32.h b/include/__support/win32/locale_win32.h -index 55e818e..3c7ae9c 100644 ---- a/include/__support/win32/locale_win32.h -+++ b/include/__support/win32/locale_win32.h -@@ -41,8 +41,8 @@ - #define LC_NUMERIC_MASK _M_NUMERIC - #define LC_TIME_MASK _M_TIME - #define LC_MESSAGES_MASK _M_MESSAGES --#define LC_ALL_MASK \ -- (LC_COLLATE_MASK | LC_CTYPE_MASK | LC_MESSAGES_MASK | LC_MONETARY_MASK | LC_NUMERIC_MASK | LC_TIME_MASK) -+#define LC_MESSAGES _X_MESSAGES -+#define LC_ALL_MASK _M_ALL - - class __lconv_storage { - public: -@@ -191,7 +191,7 @@ decltype(MB_CUR_MAX) MB_CUR_MAX_L(locale_t __l); - #define strtod_l _strtod_l - #if defined(_LIBCPP_MSVCRT) - # define strtof_l _strtof_l --# define strtold_l _strtold_l -+# define strtold_l _strtod_l - #else - _LIBCPP_EXPORTED_FROM_ABI float strtof_l(const char*, char**, locale_t); - _LIBCPP_EXPORTED_FROM_ABI long double strtold_l(const char*, char**, locale_t); diff --git a/contrib/libs/hyperscan/.yandex_meta/__init__.py b/contrib/libs/hyperscan/.yandex_meta/__init__.py index c56235d3b4..02f917dd90 100644 --- a/contrib/libs/hyperscan/.yandex_meta/__init__.py +++ b/contrib/libs/hyperscan/.yandex_meta/__init__.py @@ -61,7 +61,7 @@ def instantiate_runtime(self, *, runtime_name, runtime_yamake): # list of symbols that will be duplicated if compiled without proper wrapping. # It can be obtained with compiling runtime_* libraries and applying # nm --defined-only --extern-only --format=posix -o *.a | awk '{print $2}' - with open(P.join(self.meta_dir, 'symbols.json')) as f: + with open(P.join(self.meta_dir, "symbols.json")) as f: symbols_to_rename = json.load(f) # rename symbols that would be duplicated between runtimes otherwise diff --git a/contrib/libs/nghttp3/.yandex_meta/__init__.py b/contrib/libs/nghttp3/.yandex_meta/__init__.py index f75bcde11e..344c3f236e 100644 --- a/contrib/libs/nghttp3/.yandex_meta/__init__.py +++ b/contrib/libs/nghttp3/.yandex_meta/__init__.py @@ -8,7 +8,7 @@ def post_install(self): with open(includeFilePath, "r") as file: filedata = file.read() - filedata = filedata.replace("<nghttp3/version.h>", "\"version.h\"") + filedata = filedata.replace("<nghttp3/version.h>", '"version.h"') with open(includeFilePath, "w") as file: file.write(filedata) diff --git a/contrib/libs/protobuf/.yandex_meta/__init__.py b/contrib/libs/protobuf/.yandex_meta/__init__.py index 7d7498e483..8eb399ce00 100644 --- a/contrib/libs/protobuf/.yandex_meta/__init__.py +++ b/contrib/libs/protobuf/.yandex_meta/__init__.py @@ -42,7 +42,7 @@ DEPRECATED_STUBS = [ "src/google/protobuf/json_util.h", ] -DEPRECATED_SRC = [x for x in DEPRECATED_STUBS if x.endswith('.cc')] +DEPRECATED_SRC = [x for x in DEPRECATED_STUBS if x.endswith(".cc")] # Set of proto files coming with original google protobuf (excluding descriptor.proto, see below) # WARN: upon changing this file, make sure to check protobuf_std counterpart. @@ -219,19 +219,19 @@ ENDIF() for lang in ["csharp", "objectivec"]: for root, _, files in os.walk(os.path.join(libprotoc_abs_dir, "src/google/protobuf/compiler", lang)): for file in files: - if file.endswith('.h'): - with open(os.path.join(root, lang + '_' + file), 'w') as f: + if file.endswith(".h"): + with open(os.path.join(root, lang + "_" + file), "w") as f: f.write(f'#include "{file}"\n') f.write('#include "names.h"') # generate temporal proxy for ydb - with open(os.path.join(libprotoc_abs_dir, "src/google/protobuf/compiler/cpp/cpp_helpers.h"), 'w') as f: + with open(os.path.join(libprotoc_abs_dir, "src/google/protobuf/compiler/cpp/cpp_helpers.h"), "w") as f: f.write('#include "helpers.h"') with open(f"{libprotoc_abs_dir}/ya.make", "wt") as ymake: ymake.write(str(libprotoc)) - with open(os.path.join(self.ctx.arc, self.arcdir, "src/google/protobuf/util/json_util.h"), 'w') as f: + with open(os.path.join(self.ctx.arc, self.arcdir, "src/google/protobuf/util/json_util.h"), "w") as f: f.write('#define USE_DEPRECATED_NAMESPACE 1\n#include "google/protobuf/json/json.h"') diff --git a/contrib/python/Pillow/py3/.yandex_meta/__init__.py b/contrib/python/Pillow/py3/.yandex_meta/__init__.py index 248ce1165e..63d5c8ea50 100644 --- a/contrib/python/Pillow/py3/.yandex_meta/__init__.py +++ b/contrib/python/Pillow/py3/.yandex_meta/__init__.py @@ -47,8 +47,8 @@ def post_install(self): { "NOT OPENSOURCE": Linkable( CFLAGS=["-DHAVE_LIBIMAGEQUANT"], - PEERDIR=['contrib/libs/libimagequant'], - ADDINCL=['contrib/libs/libimagequant'], + PEERDIR=["contrib/libs/libimagequant"], + ADDINCL=["contrib/libs/libimagequant"], ), } ), diff --git a/contrib/python/anyio/.dist-info/METADATA b/contrib/python/anyio/.dist-info/METADATA index 10d7aafc77..5d0f7c9130 100644 --- a/contrib/python/anyio/.dist-info/METADATA +++ b/contrib/python/anyio/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: anyio -Version: 4.6.2.post1 +Version: 4.7.0 Summary: High level compatibility layer for multiple asynchronous event loop implementations Author-email: Alex Grönholm <alex.gronholm@nextday.fi> License: MIT @@ -23,28 +23,28 @@ Classifier: Programming Language :: Python :: 3.13 Requires-Python: >=3.9 Description-Content-Type: text/x-rst License-File: LICENSE -Requires-Dist: idna >=2.8 -Requires-Dist: sniffio >=1.1 -Requires-Dist: exceptiongroup >=1.0.2 ; python_version < "3.11" -Requires-Dist: typing-extensions >=4.1 ; python_version < "3.11" -Provides-Extra: doc -Requires-Dist: packaging ; extra == 'doc' -Requires-Dist: Sphinx ~=7.4 ; extra == 'doc' -Requires-Dist: sphinx-rtd-theme ; extra == 'doc' -Requires-Dist: sphinx-autodoc-typehints >=1.2.0 ; extra == 'doc' -Provides-Extra: test -Requires-Dist: anyio[trio] ; extra == 'test' -Requires-Dist: coverage[toml] >=7 ; extra == 'test' -Requires-Dist: exceptiongroup >=1.2.0 ; extra == 'test' -Requires-Dist: hypothesis >=4.0 ; extra == 'test' -Requires-Dist: psutil >=5.9 ; extra == 'test' -Requires-Dist: pytest >=7.0 ; extra == 'test' -Requires-Dist: pytest-mock >=3.6.1 ; extra == 'test' -Requires-Dist: trustme ; extra == 'test' -Requires-Dist: uvloop >=0.21.0b1 ; (platform_python_implementation == "CPython" and platform_system != "Windows") and extra == 'test' -Requires-Dist: truststore >=0.9.1 ; (python_version >= "3.10") and extra == 'test' +Requires-Dist: exceptiongroup>=1.0.2; python_version < "3.11" +Requires-Dist: idna>=2.8 +Requires-Dist: sniffio>=1.1 +Requires-Dist: typing_extensions>=4.5; python_version < "3.13" Provides-Extra: trio -Requires-Dist: trio >=0.26.1 ; extra == 'trio' +Requires-Dist: trio>=0.26.1; extra == "trio" +Provides-Extra: test +Requires-Dist: anyio[trio]; extra == "test" +Requires-Dist: coverage[toml]>=7; extra == "test" +Requires-Dist: exceptiongroup>=1.2.0; extra == "test" +Requires-Dist: hypothesis>=4.0; extra == "test" +Requires-Dist: psutil>=5.9; extra == "test" +Requires-Dist: pytest>=7.0; extra == "test" +Requires-Dist: pytest-mock>=3.6.1; extra == "test" +Requires-Dist: trustme; extra == "test" +Requires-Dist: truststore>=0.9.1; python_version >= "3.10" and extra == "test" +Requires-Dist: uvloop>=0.21; (platform_python_implementation == "CPython" and platform_system != "Windows") and extra == "test" +Provides-Extra: doc +Requires-Dist: packaging; extra == "doc" +Requires-Dist: Sphinx~=7.4; extra == "doc" +Requires-Dist: sphinx_rtd_theme; extra == "doc" +Requires-Dist: sphinx-autodoc-typehints>=1.2.0; extra == "doc" .. image:: https://github.com/agronholm/anyio/actions/workflows/test.yml/badge.svg :target: https://github.com/agronholm/anyio/actions/workflows/test.yml diff --git a/contrib/python/anyio/anyio/__init__.py b/contrib/python/anyio/anyio/__init__.py index fd9fe06bcf..0738e59583 100644 --- a/contrib/python/anyio/anyio/__init__.py +++ b/contrib/python/anyio/anyio/__init__.py @@ -34,8 +34,10 @@ from ._core._sockets import create_unix_datagram_socket as create_unix_datagram_ from ._core._sockets import create_unix_listener as create_unix_listener from ._core._sockets import getaddrinfo as getaddrinfo from ._core._sockets import getnameinfo as getnameinfo +from ._core._sockets import wait_readable as wait_readable from ._core._sockets import wait_socket_readable as wait_socket_readable from ._core._sockets import wait_socket_writable as wait_socket_writable +from ._core._sockets import wait_writable as wait_writable from ._core._streams import create_memory_object_stream as create_memory_object_stream from ._core._subprocesses import open_process as open_process from ._core._subprocesses import run_process as run_process diff --git a/contrib/python/anyio/anyio/_backends/_asyncio.py b/contrib/python/anyio/anyio/_backends/_asyncio.py index 0a69e7ac61..0b7479d264 100644 --- a/contrib/python/anyio/anyio/_backends/_asyncio.py +++ b/contrib/python/anyio/anyio/_backends/_asyncio.py @@ -28,6 +28,8 @@ from collections.abc import ( Collection, Coroutine, Iterable, + Iterator, + MutableMapping, Sequence, ) from concurrent.futures import Future @@ -50,6 +52,7 @@ from threading import Thread from types import TracebackType from typing import ( IO, + TYPE_CHECKING, Any, Optional, TypeVar, @@ -99,6 +102,11 @@ from ..abc._eventloop import StrOrBytesPath from ..lowlevel import RunVar from ..streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream +if TYPE_CHECKING: + from _typeshed import FileDescriptorLike +else: + FileDescriptorLike = object + if sys.version_info >= (3, 10): from typing import ParamSpec else: @@ -347,8 +355,12 @@ _run_vars: WeakKeyDictionary[asyncio.AbstractEventLoop, Any] = WeakKeyDictionary def _task_started(task: asyncio.Task) -> bool: """Return ``True`` if the task has been started and has not finished.""" + # The task coro should never be None here, as we never add finished tasks to the + # task list + coro = task.get_coro() + assert coro is not None try: - return getcoroutinestate(task.get_coro()) in (CORO_RUNNING, CORO_SUSPENDED) + return getcoroutinestate(coro) in (CORO_RUNNING, CORO_SUSPENDED) except AttributeError: # task coro is async_genenerator_asend https://bugs.python.org/issue37771 raise Exception(f"Cannot determine if task {task} has started or not") from None @@ -360,11 +372,22 @@ def _task_started(task: asyncio.Task) -> bool: def is_anyio_cancellation(exc: CancelledError) -> bool: - return ( - bool(exc.args) - and isinstance(exc.args[0], str) - and exc.args[0].startswith("Cancelled by cancel scope ") - ) + # Sometimes third party frameworks catch a CancelledError and raise a new one, so as + # a workaround we have to look at the previous ones in __context__ too for a + # matching cancel message + while True: + if ( + exc.args + and isinstance(exc.args[0], str) + and exc.args[0].startswith("Cancelled by cancel scope ") + ): + return True + + if isinstance(exc.__context__, CancelledError): + exc = exc.__context__ + continue + + return False class CancelScope(BaseCancelScope): @@ -385,8 +408,10 @@ class CancelScope(BaseCancelScope): self._cancel_handle: asyncio.Handle | None = None self._tasks: set[asyncio.Task] = set() self._host_task: asyncio.Task | None = None - self._cancel_calls: int = 0 - self._cancelling: int | None = None + if sys.version_info >= (3, 11): + self._pending_uncancellations: int | None = 0 + else: + self._pending_uncancellations = None def __enter__(self) -> CancelScope: if self._active: @@ -405,13 +430,13 @@ class CancelScope(BaseCancelScope): self._parent_scope = task_state.cancel_scope task_state.cancel_scope = self if self._parent_scope is not None: + # If using an eager task factory, the parent scope may not even contain + # the host task self._parent_scope._child_scopes.add(self) - self._parent_scope._tasks.remove(host_task) + self._parent_scope._tasks.discard(host_task) self._timeout() self._active = True - if sys.version_info >= (3, 11): - self._cancelling = self._host_task.cancelling() # Start cancelling the host task if the scope was cancelled before entering if self._cancel_called: @@ -456,30 +481,41 @@ class CancelScope(BaseCancelScope): host_task_state.cancel_scope = self._parent_scope - # Undo all cancellations done by this scope - if self._cancelling is not None: - while self._cancel_calls: - self._cancel_calls -= 1 - if self._host_task.uncancel() <= self._cancelling: - break + # Restart the cancellation effort in the closest visible, cancelled parent + # scope if necessary + self._restart_cancellation_in_parent() # We only swallow the exception iff it was an AnyIO CancelledError, either # directly as exc_val or inside an exception group and there are no cancelled # parent cancel scopes visible to us here - not_swallowed_exceptions = 0 - swallow_exception = False - if exc_val is not None: - for exc in iterate_exceptions(exc_val): - if self._cancel_called and isinstance(exc, CancelledError): - if not (swallow_exception := self._uncancel(exc)): - not_swallowed_exceptions += 1 - else: - not_swallowed_exceptions += 1 + if self._cancel_called and not self._parent_cancellation_is_visible_to_us: + # For each level-cancel() call made on the host task, call uncancel() + while self._pending_uncancellations: + self._host_task.uncancel() + self._pending_uncancellations -= 1 + + # Update cancelled_caught and check for exceptions we must not swallow + cannot_swallow_exc_val = False + if exc_val is not None: + for exc in iterate_exceptions(exc_val): + if isinstance(exc, CancelledError) and is_anyio_cancellation( + exc + ): + self._cancelled_caught = True + else: + cannot_swallow_exc_val = True - # Restart the cancellation effort in the closest visible, cancelled parent - # scope if necessary - self._restart_cancellation_in_parent() - return swallow_exception and not not_swallowed_exceptions + return self._cancelled_caught and not cannot_swallow_exc_val + else: + if self._pending_uncancellations: + assert self._parent_scope is not None + assert self._parent_scope._pending_uncancellations is not None + self._parent_scope._pending_uncancellations += ( + self._pending_uncancellations + ) + self._pending_uncancellations = 0 + + return False finally: self._host_task = None del exc_val @@ -506,31 +542,6 @@ class CancelScope(BaseCancelScope): and self._parent_scope._effectively_cancelled ) - def _uncancel(self, cancelled_exc: CancelledError) -> bool: - if self._host_task is None: - self._cancel_calls = 0 - return True - - while True: - if is_anyio_cancellation(cancelled_exc): - # Only swallow the cancellation exception if it's an AnyIO cancel - # exception and there are no other cancel scopes down the line pending - # cancellation - self._cancelled_caught = ( - self._effectively_cancelled - and not self._parent_cancellation_is_visible_to_us - ) - return self._cancelled_caught - - # Sometimes third party frameworks catch a CancelledError and raise a new - # one, so as a workaround we have to look at the previous ones in - # __context__ too for a matching cancel message - if isinstance(cancelled_exc.__context__, CancelledError): - cancelled_exc = cancelled_exc.__context__ - continue - - return False - def _timeout(self) -> None: if self._deadline != math.inf: loop = get_running_loop() @@ -562,8 +573,11 @@ class CancelScope(BaseCancelScope): waiter = task._fut_waiter # type: ignore[attr-defined] if not isinstance(waiter, asyncio.Future) or not waiter.done(): task.cancel(f"Cancelled by cancel scope {id(origin):x}") - if task is origin._host_task: - origin._cancel_calls += 1 + if ( + task is origin._host_task + and origin._pending_uncancellations is not None + ): + origin._pending_uncancellations += 1 # Deliver cancellation to child scopes that aren't shielded or running their own # cancellation callbacks @@ -663,7 +677,45 @@ class TaskState: self.cancel_scope = cancel_scope -_task_states: WeakKeyDictionary[asyncio.Task, TaskState] = WeakKeyDictionary() +class TaskStateStore(MutableMapping["Awaitable[Any] | asyncio.Task", TaskState]): + def __init__(self) -> None: + self._task_states = WeakKeyDictionary[asyncio.Task, TaskState]() + self._preliminary_task_states: dict[Awaitable[Any], TaskState] = {} + + def __getitem__(self, key: Awaitable[Any] | asyncio.Task, /) -> TaskState: + assert isinstance(key, asyncio.Task) + try: + return self._task_states[key] + except KeyError: + if coro := key.get_coro(): + if state := self._preliminary_task_states.get(coro): + return state + + raise KeyError(key) + + def __setitem__( + self, key: asyncio.Task | Awaitable[Any], value: TaskState, / + ) -> None: + if isinstance(key, asyncio.Task): + self._task_states[key] = value + else: + self._preliminary_task_states[key] = value + + def __delitem__(self, key: asyncio.Task | Awaitable[Any], /) -> None: + if isinstance(key, asyncio.Task): + del self._task_states[key] + else: + del self._preliminary_task_states[key] + + def __len__(self) -> int: + return len(self._task_states) + len(self._preliminary_task_states) + + def __iter__(self) -> Iterator[Awaitable[Any] | asyncio.Task]: + yield from self._task_states + yield from self._preliminary_task_states + + +_task_states = TaskStateStore() # @@ -783,7 +835,7 @@ class TaskGroup(abc.TaskGroup): task_status_future: asyncio.Future | None = None, ) -> asyncio.Task: def task_done(_task: asyncio.Task) -> None: - task_state = _task_states[_task] + # task_state = _task_states[_task] assert task_state.cancel_scope is not None assert _task in task_state.cancel_scope._tasks task_state.cancel_scope._tasks.remove(_task) @@ -840,16 +892,26 @@ class TaskGroup(abc.TaskGroup): f"the return value ({coro!r}) is not a coroutine object" ) - name = get_callable_name(func) if name is None else str(name) - task = create_task(coro, name=name) - task.add_done_callback(task_done) - # Make the spawned task inherit the task group's cancel scope - _task_states[task] = TaskState( + _task_states[coro] = task_state = TaskState( parent_id=parent_id, cancel_scope=self.cancel_scope ) + name = get_callable_name(func) if name is None else str(name) + try: + task = create_task(coro, name=name) + finally: + del _task_states[coro] + + _task_states[task] = task_state self.cancel_scope._tasks.add(task) self._tasks.add(task) + + if task.done(): + # This can happen with eager task factories + task_done(task) + else: + task.add_done_callback(task_done) + return task def start_soon( @@ -1718,8 +1780,8 @@ class ConnectedUNIXDatagramSocket(_RawSocketMixin, abc.ConnectedUNIXDatagramSock return -_read_events: RunVar[dict[Any, asyncio.Event]] = RunVar("read_events") -_write_events: RunVar[dict[Any, asyncio.Event]] = RunVar("write_events") +_read_events: RunVar[dict[int, asyncio.Event]] = RunVar("read_events") +_write_events: RunVar[dict[int, asyncio.Event]] = RunVar("write_events") # @@ -2082,7 +2144,9 @@ class AsyncIOTaskInfo(TaskInfo): else: parent_id = task_state.parent_id - super().__init__(id(task), parent_id, task.get_name(), task.get_coro()) + coro = task.get_coro() + assert coro is not None, "created TaskInfo from a completed Task" + super().__init__(id(task), parent_id, task.get_name(), coro) self._task = weakref.ref(task) def has_pending_cancellation(self) -> bool: @@ -2090,12 +2154,11 @@ class AsyncIOTaskInfo(TaskInfo): # If the task isn't around anymore, it won't have a pending cancellation return False - if sys.version_info >= (3, 11): - if task.cancelling(): - return True + if task._must_cancel: # type: ignore[attr-defined] + return True elif ( - isinstance(task._fut_waiter, asyncio.Future) - and task._fut_waiter.cancelled() + isinstance(task._fut_waiter, asyncio.Future) # type: ignore[attr-defined] + and task._fut_waiter.cancelled() # type: ignore[attr-defined] ): return True @@ -2335,10 +2398,11 @@ class AsyncIOBackend(AsyncBackend): @classmethod def current_effective_deadline(cls) -> float: + if (task := current_task()) is None: + return math.inf + try: - cancel_scope = _task_states[ - current_task() # type: ignore[index] - ].cancel_scope + cancel_scope = _task_states[task].cancel_scope except KeyError: return math.inf @@ -2671,7 +2735,7 @@ class AsyncIOBackend(AsyncBackend): return await get_running_loop().getnameinfo(sockaddr, flags) @classmethod - async def wait_socket_readable(cls, sock: socket.socket) -> None: + async def wait_readable(cls, obj: FileDescriptorLike) -> None: await cls.checkpoint() try: read_events = _read_events.get() @@ -2679,26 +2743,34 @@ class AsyncIOBackend(AsyncBackend): read_events = {} _read_events.set(read_events) - if read_events.get(sock): - raise BusyResourceError("reading from") from None + if not isinstance(obj, int): + obj = obj.fileno() + + if read_events.get(obj): + raise BusyResourceError("reading from") loop = get_running_loop() - event = read_events[sock] = asyncio.Event() - loop.add_reader(sock, event.set) + event = asyncio.Event() + try: + loop.add_reader(obj, event.set) + except NotImplementedError: + from anyio._core._asyncio_selector_thread import get_selector + + selector = get_selector() + selector.add_reader(obj, event.set) + remove_reader = selector.remove_reader + else: + remove_reader = loop.remove_reader + + read_events[obj] = event try: await event.wait() finally: - if read_events.pop(sock, None) is not None: - loop.remove_reader(sock) - readable = True - else: - readable = False - - if not readable: - raise ClosedResourceError + remove_reader(obj) + del read_events[obj] @classmethod - async def wait_socket_writable(cls, sock: socket.socket) -> None: + async def wait_writable(cls, obj: FileDescriptorLike) -> None: await cls.checkpoint() try: write_events = _write_events.get() @@ -2706,23 +2778,31 @@ class AsyncIOBackend(AsyncBackend): write_events = {} _write_events.set(write_events) - if write_events.get(sock): - raise BusyResourceError("writing to") from None + if not isinstance(obj, int): + obj = obj.fileno() + + if write_events.get(obj): + raise BusyResourceError("writing to") loop = get_running_loop() - event = write_events[sock] = asyncio.Event() - loop.add_writer(sock.fileno(), event.set) + event = asyncio.Event() + try: + loop.add_writer(obj, event.set) + except NotImplementedError: + from anyio._core._asyncio_selector_thread import get_selector + + selector = get_selector() + selector.add_writer(obj, event.set) + remove_writer = selector.remove_writer + else: + remove_writer = loop.remove_writer + + write_events[obj] = event try: await event.wait() finally: - if write_events.pop(sock, None) is not None: - loop.remove_writer(sock) - writable = True - else: - writable = False - - if not writable: - raise ClosedResourceError + del write_events[obj] + remove_writer(obj) @classmethod def current_default_thread_limiter(cls) -> CapacityLimiter: diff --git a/contrib/python/anyio/anyio/_backends/_trio.py b/contrib/python/anyio/anyio/_backends/_trio.py index 24dcd74446..70a0a60578 100644 --- a/contrib/python/anyio/anyio/_backends/_trio.py +++ b/contrib/python/anyio/anyio/_backends/_trio.py @@ -28,6 +28,7 @@ from socket import AddressFamily, SocketKind from types import TracebackType from typing import ( IO, + TYPE_CHECKING, Any, Generic, NoReturn, @@ -80,6 +81,9 @@ from ..abc import IPSockAddrType, UDPPacketType, UNIXDatagramPacketType from ..abc._eventloop import AsyncBackend, StrOrBytesPath from ..streams.memory import MemoryObjectSendStream +if TYPE_CHECKING: + from _typeshed import HasFileno + if sys.version_info >= (3, 10): from typing import ParamSpec else: @@ -1260,18 +1264,18 @@ class TrioBackend(AsyncBackend): return await trio.socket.getnameinfo(sockaddr, flags) @classmethod - async def wait_socket_readable(cls, sock: socket.socket) -> None: + async def wait_readable(cls, obj: HasFileno | int) -> None: try: - await wait_readable(sock) + await wait_readable(obj) except trio.ClosedResourceError as exc: raise ClosedResourceError().with_traceback(exc.__traceback__) from None except trio.BusyResourceError: raise BusyResourceError("reading from") from None @classmethod - async def wait_socket_writable(cls, sock: socket.socket) -> None: + async def wait_writable(cls, obj: HasFileno | int) -> None: try: - await wait_writable(sock) + await wait_writable(obj) except trio.ClosedResourceError as exc: raise ClosedResourceError().with_traceback(exc.__traceback__) from None except trio.BusyResourceError: diff --git a/contrib/python/anyio/anyio/_core/_asyncio_selector_thread.py b/contrib/python/anyio/anyio/_core/_asyncio_selector_thread.py new file mode 100644 index 0000000000..d98c304072 --- /dev/null +++ b/contrib/python/anyio/anyio/_core/_asyncio_selector_thread.py @@ -0,0 +1,150 @@ +from __future__ import annotations + +import asyncio +import socket +import threading +from collections.abc import Callable +from selectors import EVENT_READ, EVENT_WRITE, DefaultSelector +from typing import TYPE_CHECKING, Any + +if TYPE_CHECKING: + from _typeshed import FileDescriptorLike + +_selector_lock = threading.Lock() +_selector: Selector | None = None + + +class Selector: + def __init__(self) -> None: + self._thread = threading.Thread(target=self.run, name="AnyIO socket selector") + self._selector = DefaultSelector() + self._send, self._receive = socket.socketpair() + self._send.setblocking(False) + self._receive.setblocking(False) + self._selector.register(self._receive, EVENT_READ) + self._closed = False + + def start(self) -> None: + self._thread.start() + threading._register_atexit(self._stop) # type: ignore[attr-defined] + + def _stop(self) -> None: + global _selector + self._closed = True + self._notify_self() + self._send.close() + self._thread.join() + self._selector.unregister(self._receive) + self._receive.close() + self._selector.close() + _selector = None + assert ( + not self._selector.get_map() + ), "selector still has registered file descriptors after shutdown" + + def _notify_self(self) -> None: + try: + self._send.send(b"\x00") + except BlockingIOError: + pass + + def add_reader(self, fd: FileDescriptorLike, callback: Callable[[], Any]) -> None: + loop = asyncio.get_running_loop() + try: + key = self._selector.get_key(fd) + except KeyError: + self._selector.register(fd, EVENT_READ, {EVENT_READ: (loop, callback)}) + else: + if EVENT_READ in key.data: + raise ValueError( + "this file descriptor is already registered for reading" + ) + + key.data[EVENT_READ] = loop, callback + self._selector.modify(fd, key.events | EVENT_READ, key.data) + + self._notify_self() + + def add_writer(self, fd: FileDescriptorLike, callback: Callable[[], Any]) -> None: + loop = asyncio.get_running_loop() + try: + key = self._selector.get_key(fd) + except KeyError: + self._selector.register(fd, EVENT_WRITE, {EVENT_WRITE: (loop, callback)}) + else: + if EVENT_WRITE in key.data: + raise ValueError( + "this file descriptor is already registered for writing" + ) + + key.data[EVENT_WRITE] = loop, callback + self._selector.modify(fd, key.events | EVENT_WRITE, key.data) + + self._notify_self() + + def remove_reader(self, fd: FileDescriptorLike) -> bool: + try: + key = self._selector.get_key(fd) + except KeyError: + return False + + if new_events := key.events ^ EVENT_READ: + del key.data[EVENT_READ] + self._selector.modify(fd, new_events, key.data) + else: + self._selector.unregister(fd) + + return True + + def remove_writer(self, fd: FileDescriptorLike) -> bool: + try: + key = self._selector.get_key(fd) + except KeyError: + return False + + if new_events := key.events ^ EVENT_WRITE: + del key.data[EVENT_WRITE] + self._selector.modify(fd, new_events, key.data) + else: + self._selector.unregister(fd) + + return True + + def run(self) -> None: + while not self._closed: + for key, events in self._selector.select(): + if key.fileobj is self._receive: + try: + while self._receive.recv(4096): + pass + except BlockingIOError: + pass + + continue + + if events & EVENT_READ: + loop, callback = key.data[EVENT_READ] + self.remove_reader(key.fd) + try: + loop.call_soon_threadsafe(callback) + except RuntimeError: + pass # the loop was already closed + + if events & EVENT_WRITE: + loop, callback = key.data[EVENT_WRITE] + self.remove_writer(key.fd) + try: + loop.call_soon_threadsafe(callback) + except RuntimeError: + pass # the loop was already closed + + +def get_selector() -> Selector: + global _selector + + with _selector_lock: + if _selector is None: + _selector = Selector() + _selector.start() + + return _selector diff --git a/contrib/python/anyio/anyio/_core/_exceptions.py b/contrib/python/anyio/anyio/_core/_exceptions.py index 6e3f8ccc67..97ea313041 100644 --- a/contrib/python/anyio/anyio/_core/_exceptions.py +++ b/contrib/python/anyio/anyio/_core/_exceptions.py @@ -16,7 +16,7 @@ class BrokenResourceError(Exception): class BrokenWorkerProcess(Exception): """ - Raised by :func:`run_sync_in_process` if the worker process terminates abruptly or + Raised by :meth:`~anyio.to_process.run_sync` if the worker process terminates abruptly or otherwise misbehaves. """ diff --git a/contrib/python/anyio/anyio/_core/_fileio.py b/contrib/python/anyio/anyio/_core/_fileio.py index 53d3288c29..ef2930e480 100644 --- a/contrib/python/anyio/anyio/_core/_fileio.py +++ b/contrib/python/anyio/anyio/_core/_fileio.py @@ -92,10 +92,10 @@ class AsyncFile(AsyncResource, Generic[AnyStr]): async def readlines(self) -> list[AnyStr]: return await to_thread.run_sync(self._fp.readlines) - async def readinto(self: AsyncFile[bytes], b: WriteableBuffer) -> bytes: + async def readinto(self: AsyncFile[bytes], b: WriteableBuffer) -> int: return await to_thread.run_sync(self._fp.readinto, b) - async def readinto1(self: AsyncFile[bytes], b: WriteableBuffer) -> bytes: + async def readinto1(self: AsyncFile[bytes], b: WriteableBuffer) -> int: return await to_thread.run_sync(self._fp.readinto1, b) @overload diff --git a/contrib/python/anyio/anyio/_core/_sockets.py b/contrib/python/anyio/anyio/_core/_sockets.py index 6070c647fd..a822d060d7 100644 --- a/contrib/python/anyio/anyio/_core/_sockets.py +++ b/contrib/python/anyio/anyio/_core/_sockets.py @@ -10,7 +10,7 @@ from collections.abc import Awaitable from ipaddress import IPv6Address, ip_address from os import PathLike, chmod from socket import AddressFamily, SocketKind -from typing import Any, Literal, cast, overload +from typing import TYPE_CHECKING, Any, Literal, cast, overload from .. import to_thread from ..abc import ( @@ -31,9 +31,19 @@ from ._resources import aclose_forcefully from ._synchronization import Event from ._tasks import create_task_group, move_on_after +if TYPE_CHECKING: + from _typeshed import FileDescriptorLike +else: + FileDescriptorLike = object + if sys.version_info < (3, 11): from exceptiongroup import ExceptionGroup +if sys.version_info < (3, 13): + from typing_extensions import deprecated +else: + from warnings import deprecated + IPPROTO_IPV6 = getattr(socket, "IPPROTO_IPV6", 41) # https://bugs.python.org/issue29515 AnyIPAddressFamily = Literal[ @@ -186,6 +196,14 @@ async def connect_tcp( try: addr_obj = ip_address(remote_host) except ValueError: + addr_obj = None + + if addr_obj is not None: + if isinstance(addr_obj, IPv6Address): + target_addrs = [(socket.AF_INET6, addr_obj.compressed)] + else: + target_addrs = [(socket.AF_INET, addr_obj.compressed)] + else: # getaddrinfo() will raise an exception if name resolution fails gai_res = await getaddrinfo( target_host, remote_port, family=family, type=socket.SOCK_STREAM @@ -194,7 +212,7 @@ async def connect_tcp( # Organize the list so that the first address is an IPv6 address (if available) # and the second one is an IPv4 addresses. The rest can be in whatever order. v6_found = v4_found = False - target_addrs: list[tuple[socket.AddressFamily, str]] = [] + target_addrs = [] for af, *rest, sa in gai_res: if af == socket.AF_INET6 and not v6_found: v6_found = True @@ -204,11 +222,6 @@ async def connect_tcp( target_addrs.insert(1, (af, sa[0])) else: target_addrs.append((af, sa[0])) - else: - if isinstance(addr_obj, IPv6Address): - target_addrs = [(socket.AF_INET6, addr_obj.compressed)] - else: - target_addrs = [(socket.AF_INET, addr_obj.compressed)] oserrors: list[OSError] = [] async with create_task_group() as tg: @@ -588,12 +601,13 @@ def getnameinfo(sockaddr: IPSockAddrType, flags: int = 0) -> Awaitable[tuple[str return get_async_backend().getnameinfo(sockaddr, flags) +@deprecated("This function is deprecated; use `wait_readable` instead") def wait_socket_readable(sock: socket.socket) -> Awaitable[None]: """ - Wait until the given socket has data to be read. + .. deprecated:: 4.7.0 + Use :func:`wait_readable` instead. - This does **NOT** work on Windows when using the asyncio backend with a proactor - event loop (default on py3.8+). + Wait until the given socket has data to be read. .. warning:: Only use this on raw sockets that have not been wrapped by any higher level constructs like socket streams! @@ -605,11 +619,15 @@ def wait_socket_readable(sock: socket.socket) -> Awaitable[None]: to become readable """ - return get_async_backend().wait_socket_readable(sock) + return get_async_backend().wait_readable(sock.fileno()) +@deprecated("This function is deprecated; use `wait_writable` instead") def wait_socket_writable(sock: socket.socket) -> Awaitable[None]: """ + .. deprecated:: 4.7.0 + Use :func:`wait_writable` instead. + Wait until the given socket can be written to. This does **NOT** work on Windows when using the asyncio backend with a proactor @@ -625,7 +643,58 @@ def wait_socket_writable(sock: socket.socket) -> Awaitable[None]: to become writable """ - return get_async_backend().wait_socket_writable(sock) + return get_async_backend().wait_writable(sock.fileno()) + + +def wait_readable(obj: FileDescriptorLike) -> Awaitable[None]: + """ + Wait until the given object has data to be read. + + On Unix systems, ``obj`` must either be an integer file descriptor, or else an + object with a ``.fileno()`` method which returns an integer file descriptor. Any + kind of file descriptor can be passed, though the exact semantics will depend on + your kernel. For example, this probably won't do anything useful for on-disk files. + + On Windows systems, ``obj`` must either be an integer ``SOCKET`` handle, or else an + object with a ``.fileno()`` method which returns an integer ``SOCKET`` handle. File + descriptors aren't supported, and neither are handles that refer to anything besides + a ``SOCKET``. + + On backends where this functionality is not natively provided (asyncio + ``ProactorEventLoop`` on Windows), it is provided using a separate selector thread + which is set to shut down when the interpreter shuts down. + + .. warning:: Don't use this on raw sockets that have been wrapped by any higher + level constructs like socket streams! + + :param obj: an object with a ``.fileno()`` method or an integer handle + :raises ~anyio.ClosedResourceError: if the object was closed while waiting for the + object to become readable + :raises ~anyio.BusyResourceError: if another task is already waiting for the object + to become readable + + """ + return get_async_backend().wait_readable(obj) + + +def wait_writable(obj: FileDescriptorLike) -> Awaitable[None]: + """ + Wait until the given object can be written to. + + :param obj: an object with a ``.fileno()`` method or an integer handle + :raises ~anyio.ClosedResourceError: if the object was closed while waiting for the + object to become writable + :raises ~anyio.BusyResourceError: if another task is already waiting for the object + to become writable + + .. seealso:: See the documentation of :func:`wait_readable` for the definition of + ``obj`` and notes on backend compatibility. + + .. warning:: Don't use this on raw sockets that have been wrapped by any higher + level constructs like socket streams! + + """ + return get_async_backend().wait_writable(obj) # diff --git a/contrib/python/anyio/anyio/_core/_synchronization.py b/contrib/python/anyio/anyio/_core/_synchronization.py index 023ab73370..7878ba6668 100644 --- a/contrib/python/anyio/anyio/_core/_synchronization.py +++ b/contrib/python/anyio/anyio/_core/_synchronization.py @@ -109,6 +109,7 @@ class Event: class EventAdapter(Event): _internal_event: Event | None = None + _is_set: bool = False def __new__(cls) -> EventAdapter: return object.__new__(cls) @@ -117,14 +118,22 @@ class EventAdapter(Event): def _event(self) -> Event: if self._internal_event is None: self._internal_event = get_async_backend().create_event() + if self._is_set: + self._internal_event.set() return self._internal_event def set(self) -> None: - self._event.set() + if self._internal_event is None: + self._is_set = True + else: + self._event.set() def is_set(self) -> bool: - return self._internal_event is not None and self._internal_event.is_set() + if self._internal_event is None: + return self._is_set + + return self._internal_event.is_set() async def wait(self) -> None: await self._event.wait() diff --git a/contrib/python/anyio/anyio/abc/__init__.py b/contrib/python/anyio/anyio/abc/__init__.py index 1ca0fcf746..3d3b61cc9a 100644 --- a/contrib/python/anyio/anyio/abc/__init__.py +++ b/contrib/python/anyio/anyio/abc/__init__.py @@ -1,7 +1,5 @@ from __future__ import annotations -from typing import Any - from ._eventloop import AsyncBackend as AsyncBackend from ._resources import AsyncResource as AsyncResource from ._sockets import ConnectedUDPSocket as ConnectedUDPSocket @@ -50,8 +48,8 @@ from .._core._tasks import CancelScope as CancelScope from ..from_thread import BlockingPortal as BlockingPortal # Re-export imports so they look like they live directly in this package -key: str -value: Any -for key, value in list(locals().items()): - if getattr(value, "__module__", "").startswith("anyio.abc."): - value.__module__ = __name__ +for __value in list(locals().values()): + if getattr(__value, "__module__", "").startswith("anyio.abc."): + __value.__module__ = __name__ + +del __value diff --git a/contrib/python/anyio/anyio/abc/_eventloop.py b/contrib/python/anyio/anyio/abc/_eventloop.py index 93d0e9d25b..2bfdf28635 100644 --- a/contrib/python/anyio/anyio/abc/_eventloop.py +++ b/contrib/python/anyio/anyio/abc/_eventloop.py @@ -28,6 +28,8 @@ else: from typing_extensions import TypeAlias if TYPE_CHECKING: + from _typeshed import HasFileno + from .._core._synchronization import CapacityLimiter, Event, Lock, Semaphore from .._core._tasks import CancelScope from .._core._testing import TaskInfo @@ -333,12 +335,12 @@ class AsyncBackend(metaclass=ABCMeta): @classmethod @abstractmethod - async def wait_socket_readable(cls, sock: socket) -> None: + async def wait_readable(cls, obj: HasFileno | int) -> None: pass @classmethod @abstractmethod - async def wait_socket_writable(cls, sock: socket) -> None: + async def wait_writable(cls, obj: HasFileno | int) -> None: pass @classmethod diff --git a/contrib/python/anyio/anyio/abc/_tasks.py b/contrib/python/anyio/anyio/abc/_tasks.py index 88aecf3833..f6e5c40c7f 100644 --- a/contrib/python/anyio/anyio/abc/_tasks.py +++ b/contrib/python/anyio/anyio/abc/_tasks.py @@ -40,6 +40,12 @@ class TaskGroup(metaclass=ABCMeta): :ivar cancel_scope: the cancel scope inherited by all child tasks :vartype cancel_scope: CancelScope + + .. note:: On asyncio, support for eager task factories is considered to be + **experimental**. In particular, they don't follow the usual semantics of new + tasks being scheduled on the next iteration of the event loop, and may thus + cause unexpected behavior in code that wasn't written with such semantics in + mind. """ cancel_scope: CancelScope diff --git a/contrib/python/anyio/ya.make b/contrib/python/anyio/ya.make index aadbb5b297..956fc4c841 100644 --- a/contrib/python/anyio/ya.make +++ b/contrib/python/anyio/ya.make @@ -2,13 +2,14 @@ PY3_LIBRARY() -VERSION(4.6.2.post1) +VERSION(4.7.0) LICENSE(MIT) PEERDIR( contrib/python/idna contrib/python/sniffio + contrib/python/typing-extensions ) NO_LINT() @@ -25,6 +26,7 @@ PY_SRCS( anyio/_backends/_asyncio.py anyio/_backends/_trio.py anyio/_core/__init__.py + anyio/_core/_asyncio_selector_thread.py anyio/_core/_eventloop.py anyio/_core/_exceptions.py anyio/_core/_fileio.py diff --git a/contrib/python/fonttools/.dist-info/METADATA b/contrib/python/fonttools/.dist-info/METADATA index 9460888006..5a177ba30c 100644 --- a/contrib/python/fonttools/.dist-info/METADATA +++ b/contrib/python/fonttools/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: fonttools -Version: 4.55.1 +Version: 4.55.2 Summary: Tools to manipulate font files Home-page: http://github.com/fonttools/fonttools Author: Just van Rossum @@ -377,6 +377,13 @@ Have fun! Changelog ~~~~~~~~~ +4.55.2 (released 2024-12-05) +---------------------------- + +- [Docs] update Sphinx config (#3712) +- [designspaceLib] Allow axisOrdering to be set to zero (#3715) +- [feaLib] Don’t modify variable anchors in place (#3717) + 4.55.1 (released 2024-12-02) ---------------------------- diff --git a/contrib/python/fonttools/fontTools/__init__.py b/contrib/python/fonttools/fontTools/__init__.py index 6aa5f3ad59..2fe3602d32 100644 --- a/contrib/python/fonttools/fontTools/__init__.py +++ b/contrib/python/fonttools/fontTools/__init__.py @@ -3,6 +3,6 @@ from fontTools.misc.loggingTools import configLogger log = logging.getLogger(__name__) -version = __version__ = "4.55.1" +version = __version__ = "4.55.2" __all__ = ["version", "log", "configLogger"] diff --git a/contrib/python/fonttools/fontTools/designspaceLib/__init__.py b/contrib/python/fonttools/fontTools/designspaceLib/__init__.py index 0a1e782f57..661f3405da 100644 --- a/contrib/python/fonttools/fontTools/designspaceLib/__init__.py +++ b/contrib/python/fonttools/fontTools/designspaceLib/__init__.py @@ -1596,7 +1596,7 @@ class BaseDocWriter(object): mapElement.attrib["input"] = self.intOrFloat(inputValue) mapElement.attrib["output"] = self.intOrFloat(outputValue) axisElement.append(mapElement) - if axisObject.axisOrdering or axisObject.axisLabels: + if axisObject.axisOrdering is not None or axisObject.axisLabels: labelsElement = ET.Element("labels") if axisObject.axisOrdering is not None: labelsElement.attrib["ordering"] = str(axisObject.axisOrdering) diff --git a/contrib/python/fonttools/fontTools/feaLib/builder.py b/contrib/python/fonttools/fontTools/feaLib/builder.py index bda855e1e9..81aa8c2e26 100644 --- a/contrib/python/fonttools/fontTools/feaLib/builder.py +++ b/contrib/python/fonttools/fontTools/feaLib/builder.py @@ -1658,38 +1658,31 @@ class Builder(object): return default, device + def makeAnchorPos(self, varscalar, deviceTable, location): + device = None + if not isinstance(varscalar, VariableScalar): + if deviceTable is not None: + device = otl.buildDevice(dict(deviceTable)) + return varscalar, device + default, device = self.makeVariablePos(location, varscalar) + if device is not None and deviceTable is not None: + raise FeatureLibError( + "Can't define a device coordinate and variable scalar", location + ) + return default, device + def makeOpenTypeAnchor(self, location, anchor): """ast.Anchor --> otTables.Anchor""" if anchor is None: return None - variable = False deviceX, deviceY = None, None if anchor.xDeviceTable is not None: deviceX = otl.buildDevice(dict(anchor.xDeviceTable)) if anchor.yDeviceTable is not None: deviceY = otl.buildDevice(dict(anchor.yDeviceTable)) - for dim in ("x", "y"): - varscalar = getattr(anchor, dim) - if not isinstance(varscalar, VariableScalar): - continue - if getattr(anchor, dim + "DeviceTable") is not None: - raise FeatureLibError( - "Can't define a device coordinate and variable scalar", location - ) - default, device = self.makeVariablePos(location, varscalar) - setattr(anchor, dim, default) - if device is not None: - if dim == "x": - deviceX = device - else: - deviceY = device - variable = True - - otlanchor = otl.buildAnchor( - anchor.x, anchor.y, anchor.contourpoint, deviceX, deviceY - ) - if variable: - otlanchor.Format = 3 + x, deviceX = self.makeAnchorPos(anchor.x, anchor.xDeviceTable, location) + y, deviceY = self.makeAnchorPos(anchor.y, anchor.yDeviceTable, location) + otlanchor = otl.buildAnchor(x, y, anchor.contourpoint, deviceX, deviceY) return otlanchor _VALUEREC_ATTRS = { diff --git a/contrib/python/fonttools/ya.make b/contrib/python/fonttools/ya.make index ce8febfcdd..d01a0e414f 100644 --- a/contrib/python/fonttools/ya.make +++ b/contrib/python/fonttools/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(4.55.1) +VERSION(4.55.2) LICENSE(MIT) diff --git a/contrib/python/grpcio/py3/.yandex_meta/__init__.py b/contrib/python/grpcio/py3/.yandex_meta/__init__.py index d519c459ee..5e4e2c47ca 100644 --- a/contrib/python/grpcio/py3/.yandex_meta/__init__.py +++ b/contrib/python/grpcio/py3/.yandex_meta/__init__.py @@ -57,7 +57,7 @@ def post_install(self): # see https://github.com/grpc/grpc/blob/v1.45.0/tools/bazel.rc#L103 pb.after( "ADDINCL", - Switch({'SANITIZER_TYPE == undefined': Linkable(CXXFLAGS=["-fno-sanitize=function"])}), + Switch({"SANITIZER_TYPE == undefined": Linkable(CXXFLAGS=["-fno-sanitize=function"])}), ) diff --git a/contrib/python/scipy/py3/tests/_build_utils/ya.make b/contrib/python/scipy/py3/tests/_build_utils/ya.make new file mode 100644 index 0000000000..557f802cd6 --- /dev/null +++ b/contrib/python/scipy/py3/tests/_build_utils/ya.make @@ -0,0 +1,26 @@ +# Generated by devtools/yamaker. + +PY3TEST() + +SUBSCRIBER(g:python-contrib) + +VERSION(1.11.4) + +ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) + +SIZE(MEDIUM) + +PEERDIR( + contrib/python/scipy/py3/tests +) + +NO_LINT() + +SRCDIR(contrib/python/scipy/py3) + +TEST_SRCS( + scipy/_build_utils/tests/__init__.py + scipy/_build_utils/tests/test_scipy_version.py +) + +END() diff --git a/contrib/python/scipy/py3/tests/_lib/ya.make b/contrib/python/scipy/py3/tests/_lib/ya.make new file mode 100644 index 0000000000..ebc065f7d9 --- /dev/null +++ b/contrib/python/scipy/py3/tests/_lib/ya.make @@ -0,0 +1,38 @@ +# Generated by devtools/yamaker. + +PY3TEST() + +SUBSCRIBER(g:python-contrib) + +VERSION(1.11.4) + +ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) + +SIZE(MEDIUM) + +PEERDIR( + contrib/python/scipy/py3/tests +) + +NO_LINT() + +DATA( + arcadia/contrib/python/scipy/py3 +) + +SRCDIR(contrib/python/scipy/py3) + +TEST_SRCS( + scipy/_lib/tests/__init__.py + scipy/_lib/tests/test__gcutils.py + scipy/_lib/tests/test__pep440.py + scipy/_lib/tests/test__testutils.py + scipy/_lib/tests/test__threadsafety.py + scipy/_lib/tests/test__util.py + scipy/_lib/tests/test_bunch.py + scipy/_lib/tests/test_public_api.py + scipy/_lib/tests/test_tmpdirs.py + scipy/_lib/tests/test_warnings.py +) + +END() diff --git a/contrib/python/scipy/py3/tests/cluster/ya.make b/contrib/python/scipy/py3/tests/cluster/ya.make new file mode 100644 index 0000000000..016955b98e --- /dev/null +++ b/contrib/python/scipy/py3/tests/cluster/ya.make @@ -0,0 +1,29 @@ +# Generated by devtools/yamaker. + +PY3TEST() + +SUBSCRIBER(g:python-contrib) + +VERSION(1.11.4) + +ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) + +SIZE(MEDIUM) + +PEERDIR( + contrib/python/scipy/py3/tests +) + +NO_LINT() + +SRCDIR(contrib/python/scipy/py3) + +TEST_SRCS( + scipy/cluster/tests/__init__.py + scipy/cluster/tests/hierarchy_test_data.py + scipy/cluster/tests/test_disjoint_set.py + scipy/cluster/tests/test_hierarchy.py + scipy/cluster/tests/test_vq.py +) + +END() diff --git a/contrib/python/scipy/py3/tests/constants/ya.make b/contrib/python/scipy/py3/tests/constants/ya.make new file mode 100644 index 0000000000..caa3af28c6 --- /dev/null +++ b/contrib/python/scipy/py3/tests/constants/ya.make @@ -0,0 +1,27 @@ +# Generated by devtools/yamaker. + +PY3TEST() + +SUBSCRIBER(g:python-contrib) + +VERSION(1.11.4) + +ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) + +SIZE(MEDIUM) + +PEERDIR( + contrib/python/scipy/py3/tests +) + +NO_LINT() + +SRCDIR(contrib/python/scipy/py3) + +TEST_SRCS( + scipy/constants/tests/__init__.py + scipy/constants/tests/test_codata.py + scipy/constants/tests/test_constants.py +) + +END() diff --git a/contrib/python/scipy/py3/tests/fft/ya.make b/contrib/python/scipy/py3/tests/fft/ya.make new file mode 100644 index 0000000000..c6102cb142 --- /dev/null +++ b/contrib/python/scipy/py3/tests/fft/ya.make @@ -0,0 +1,42 @@ +# Generated by devtools/yamaker. + +PY3TEST() + +SUBSCRIBER(g:python-contrib) + +VERSION(1.11.4) + +ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) + +SIZE(MEDIUM) + +FORK_SUBTESTS() + +PEERDIR( + contrib/python/scipy/py3/tests +) + +NO_LINT() + +DATA( + arcadia/contrib/python/scipy/py3 +) + +SRCDIR(contrib/python/scipy/py3) + +TEST_SRCS( + scipy/fft/_pocketfft/tests/__init__.py + scipy/fft/_pocketfft/tests/test_basic.py + scipy/fft/_pocketfft/tests/test_real_transforms.py + scipy/fft/tests/__init__.py + scipy/fft/tests/mock_backend.py + scipy/fft/tests/test_backend.py + scipy/fft/tests/test_fft_function.py + scipy/fft/tests/test_fftlog.py + scipy/fft/tests/test_helper.py + scipy/fft/tests/test_multithreading.py + scipy/fft/tests/test_numpy.py + scipy/fft/tests/test_real_transforms.py +) + +END() diff --git a/contrib/python/scipy/py3/tests/fftpack/ya.make b/contrib/python/scipy/py3/tests/fftpack/ya.make new file mode 100644 index 0000000000..327fb9f677 --- /dev/null +++ b/contrib/python/scipy/py3/tests/fftpack/ya.make @@ -0,0 +1,34 @@ +# Generated by devtools/yamaker. + +PY3TEST() + +SUBSCRIBER(g:python-contrib) + +VERSION(1.11.4) + +ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) + +SIZE(MEDIUM) + +PEERDIR( + contrib/python/scipy/py3/tests +) + +NO_LINT() + +DATA( + arcadia/contrib/python/scipy/py3 +) + +SRCDIR(contrib/python/scipy/py3) + +TEST_SRCS( + scipy/fftpack/tests/__init__.py + scipy/fftpack/tests/test_basic.py + scipy/fftpack/tests/test_helper.py + scipy/fftpack/tests/test_import.py + scipy/fftpack/tests/test_pseudo_diffs.py + scipy/fftpack/tests/test_real_transforms.py +) + +END() diff --git a/contrib/python/scipy/py3/tests/integrate/ya.make b/contrib/python/scipy/py3/tests/integrate/ya.make new file mode 100644 index 0000000000..e2a1514951 --- /dev/null +++ b/contrib/python/scipy/py3/tests/integrate/ya.make @@ -0,0 +1,32 @@ +# Generated by devtools/yamaker. + +PY3TEST() + +SUBSCRIBER(g:python-contrib) + +VERSION(1.11.4) + +ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) + +SIZE(MEDIUM) + +PEERDIR( + contrib/python/scipy/py3/tests +) + +NO_LINT() + +SRCDIR(contrib/python/scipy/py3) + +TEST_SRCS( + scipy/integrate/_ivp/tests/__init__.py + scipy/integrate/_ivp/tests/test_ivp.py + scipy/integrate/_ivp/tests/test_rk.py + scipy/integrate/tests/__init__.py + scipy/integrate/tests/test__quad_vec.py + scipy/integrate/tests/test_banded_ode_solvers.py + scipy/integrate/tests/test_bvp.py + scipy/integrate/tests/test_integrate.py +) + +END() diff --git a/contrib/python/scipy/py3/tests/interpolate/ya.make b/contrib/python/scipy/py3/tests/interpolate/ya.make new file mode 100644 index 0000000000..a1f2ef582e --- /dev/null +++ b/contrib/python/scipy/py3/tests/interpolate/ya.make @@ -0,0 +1,41 @@ +# Generated by devtools/yamaker. + +PY3TEST() + +SUBSCRIBER(g:python-contrib) + +VERSION(1.11.4) + +ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) + +SIZE(MEDIUM) + +PEERDIR( + contrib/python/scipy/py3/tests +) + +NO_LINT() + +DATA( + arcadia/contrib/python/scipy/py3 +) + +SRCDIR(contrib/python/scipy/py3) + +TEST_SRCS( + scipy/interpolate/tests/__init__.py + scipy/interpolate/tests/test_bsplines.py + scipy/interpolate/tests/test_fitpack.py + scipy/interpolate/tests/test_fitpack2.py + scipy/interpolate/tests/test_gil.py + scipy/interpolate/tests/test_interpnd.py + scipy/interpolate/tests/test_interpolate.py + scipy/interpolate/tests/test_ndgriddata.py + scipy/interpolate/tests/test_pade.py + scipy/interpolate/tests/test_polyint.py + scipy/interpolate/tests/test_rbf.py + scipy/interpolate/tests/test_rbfinterp.py + scipy/interpolate/tests/test_rgi.py +) + +END() diff --git a/contrib/python/scipy/py3/tests/io/ya.make b/contrib/python/scipy/py3/tests/io/ya.make new file mode 100644 index 0000000000..66ecdbe323 --- /dev/null +++ b/contrib/python/scipy/py3/tests/io/ya.make @@ -0,0 +1,48 @@ +# Generated by devtools/yamaker. + +PY3TEST() + +SUBSCRIBER(g:python-contrib) + +VERSION(1.11.4) + +ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) + +SIZE(MEDIUM) + +PEERDIR( + contrib/python/scipy/py3/tests +) + +NO_LINT() + +DATA( + arcadia/contrib/python/scipy/py3 +) + +SRCDIR(contrib/python/scipy/py3) + +TEST_SRCS( + scipy/io/_harwell_boeing/tests/__init__.py + scipy/io/_harwell_boeing/tests/test_fortran_format.py + scipy/io/_harwell_boeing/tests/test_hb.py + scipy/io/arff/tests/__init__.py + scipy/io/arff/tests/test_arffread.py + scipy/io/matlab/tests/__init__.py + scipy/io/matlab/tests/test_byteordercodes.py + scipy/io/matlab/tests/test_mio.py + scipy/io/matlab/tests/test_mio5_utils.py + scipy/io/matlab/tests/test_mio_funcs.py + scipy/io/matlab/tests/test_mio_utils.py + scipy/io/matlab/tests/test_miobase.py + scipy/io/matlab/tests/test_pathological.py + scipy/io/matlab/tests/test_streams.py + scipy/io/tests/__init__.py + scipy/io/tests/test_idl.py + scipy/io/tests/test_mmio.py + scipy/io/tests/test_netcdf.py + scipy/io/tests/test_paths.py + scipy/io/tests/test_wavfile.py +) + +END() diff --git a/contrib/python/scipy/py3/tests/linalg/ya.make b/contrib/python/scipy/py3/tests/linalg/ya.make new file mode 100644 index 0000000000..5623e4afa0 --- /dev/null +++ b/contrib/python/scipy/py3/tests/linalg/ya.make @@ -0,0 +1,54 @@ +# Generated by devtools/yamaker. + +PY3TEST() + +SUBSCRIBER(g:python-contrib) + +VERSION(1.11.4) + +ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) + +SIZE(MEDIUM) + +FORK_SUBTESTS() + +PEERDIR( + contrib/python/scipy/py3/tests +) + +NO_LINT() + +DATA( + arcadia/contrib/python/scipy/py3 +) + +SRCDIR(contrib/python/scipy/py3) + +TEST_SRCS( + scipy/linalg/tests/__init__.py + scipy/linalg/tests/test_basic.py + scipy/linalg/tests/test_blas.py + scipy/linalg/tests/test_cython_blas.py + scipy/linalg/tests/test_cython_lapack.py + scipy/linalg/tests/test_cythonized_array_utils.py + scipy/linalg/tests/test_decomp.py + scipy/linalg/tests/test_decomp_cholesky.py + scipy/linalg/tests/test_decomp_cossin.py + scipy/linalg/tests/test_decomp_ldl.py + scipy/linalg/tests/test_decomp_lu.py + scipy/linalg/tests/test_decomp_polar.py + scipy/linalg/tests/test_decomp_update.py + scipy/linalg/tests/test_fblas.py + scipy/linalg/tests/test_interpolative.py + scipy/linalg/tests/test_lapack.py + scipy/linalg/tests/test_matfuncs.py + scipy/linalg/tests/test_matmul_toeplitz.py + scipy/linalg/tests/test_misc.py + scipy/linalg/tests/test_procrustes.py + scipy/linalg/tests/test_sketches.py + scipy/linalg/tests/test_solve_toeplitz.py + scipy/linalg/tests/test_solvers.py + scipy/linalg/tests/test_special_matrices.py +) + +END() diff --git a/contrib/python/scipy/py3/tests/misc/ya.make b/contrib/python/scipy/py3/tests/misc/ya.make new file mode 100644 index 0000000000..0e8d676c8c --- /dev/null +++ b/contrib/python/scipy/py3/tests/misc/ya.make @@ -0,0 +1,28 @@ +# Generated by devtools/yamaker. + +PY3TEST() + +SUBSCRIBER(g:python-contrib) + +VERSION(1.11.4) + +ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) + +SIZE(MEDIUM) + +PEERDIR( + contrib/python/scipy/py3/tests +) + +NO_LINT() + +SRCDIR(contrib/python/scipy/py3) + +TEST_SRCS( + scipy/misc/tests/__init__.py + scipy/misc/tests/test_common.py + scipy/misc/tests/test_config.py + scipy/misc/tests/test_doccer.py +) + +END() diff --git a/contrib/python/scipy/py3/tests/ndimage/ya.make b/contrib/python/scipy/py3/tests/ndimage/ya.make new file mode 100644 index 0000000000..45c61ce0bf --- /dev/null +++ b/contrib/python/scipy/py3/tests/ndimage/ya.make @@ -0,0 +1,36 @@ +# Generated by devtools/yamaker. + +PY3TEST() + +SUBSCRIBER(g:python-contrib) + +VERSION(1.11.4) + +ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) + +SIZE(MEDIUM) + +PEERDIR( + contrib/python/scipy/py3/tests +) + +NO_LINT() + +DATA( + arcadia/contrib/python/scipy/py3 +) + +SRCDIR(contrib/python/scipy/py3) + +TEST_SRCS( + scipy/ndimage/tests/__init__.py + scipy/ndimage/tests/test_datatypes.py + scipy/ndimage/tests/test_filters.py + scipy/ndimage/tests/test_fourier.py + scipy/ndimage/tests/test_interpolation.py + scipy/ndimage/tests/test_measurements.py + scipy/ndimage/tests/test_morphology.py + scipy/ndimage/tests/test_splines.py +) + +END() diff --git a/contrib/python/scipy/py3/tests/odr/ya.make b/contrib/python/scipy/py3/tests/odr/ya.make new file mode 100644 index 0000000000..7242b97930 --- /dev/null +++ b/contrib/python/scipy/py3/tests/odr/ya.make @@ -0,0 +1,26 @@ +# Generated by devtools/yamaker. + +PY3TEST() + +SUBSCRIBER(g:python-contrib) + +VERSION(1.11.4) + +ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) + +SIZE(MEDIUM) + +PEERDIR( + contrib/python/scipy/py3/tests +) + +NO_LINT() + +SRCDIR(contrib/python/scipy/py3) + +TEST_SRCS( + scipy/odr/tests/__init__.py + scipy/odr/tests/test_odr.py +) + +END() diff --git a/contrib/python/scipy/py3/tests/optimize/ya.make b/contrib/python/scipy/py3/tests/optimize/ya.make new file mode 100644 index 0000000000..67f934a48c --- /dev/null +++ b/contrib/python/scipy/py3/tests/optimize/ya.make @@ -0,0 +1,69 @@ +# Generated by devtools/yamaker. + +PY3TEST() + +SUBSCRIBER(g:python-contrib) + +VERSION(1.11.4) + +ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) + +SIZE(MEDIUM) + +FORK_SUBTESTS() + +PEERDIR( + contrib/python/scipy/py3/tests +) + +NO_LINT() + +SRCDIR(contrib/python/scipy/py3) + +TEST_SRCS( + scipy/optimize/_trustregion_constr/tests/__init__.py + scipy/optimize/_trustregion_constr/tests/test_canonical_constraint.py + scipy/optimize/_trustregion_constr/tests/test_projections.py + scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py + scipy/optimize/_trustregion_constr/tests/test_report.py + scipy/optimize/tests/__init__.py + scipy/optimize/tests/test__basinhopping.py + scipy/optimize/tests/test__differential_evolution.py + scipy/optimize/tests/test__dual_annealing.py + scipy/optimize/tests/test__linprog_clean_inputs.py + scipy/optimize/tests/test__numdiff.py + scipy/optimize/tests/test__remove_redundancy.py + scipy/optimize/tests/test__root.py + scipy/optimize/tests/test__shgo.py + scipy/optimize/tests/test__spectral.py + scipy/optimize/tests/test_cobyla.py + scipy/optimize/tests/test_constraint_conversion.py + scipy/optimize/tests/test_constraints.py + scipy/optimize/tests/test_cython_optimize.py + scipy/optimize/tests/test_differentiable_functions.py + scipy/optimize/tests/test_direct.py + scipy/optimize/tests/test_hessian_update_strategy.py + scipy/optimize/tests/test_lbfgsb_hessinv.py + scipy/optimize/tests/test_lbfgsb_setulb.py + scipy/optimize/tests/test_least_squares.py + scipy/optimize/tests/test_linesearch.py + scipy/optimize/tests/test_linprog.py + scipy/optimize/tests/test_lsq_common.py + scipy/optimize/tests/test_lsq_linear.py + scipy/optimize/tests/test_milp.py + scipy/optimize/tests/test_minimize_constrained.py + scipy/optimize/tests/test_minpack.py + scipy/optimize/tests/test_nnls.py + scipy/optimize/tests/test_nonlin.py + scipy/optimize/tests/test_optimize.py + scipy/optimize/tests/test_quadratic_assignment.py + scipy/optimize/tests/test_regression.py + scipy/optimize/tests/test_slsqp.py + scipy/optimize/tests/test_tnc.py + scipy/optimize/tests/test_trustregion.py + scipy/optimize/tests/test_trustregion_exact.py + scipy/optimize/tests/test_trustregion_krylov.py + scipy/optimize/tests/test_zeros.py +) + +END() diff --git a/contrib/python/scipy/py3/tests/signal/ya.make b/contrib/python/scipy/py3/tests/signal/ya.make new file mode 100644 index 0000000000..fb45a7254c --- /dev/null +++ b/contrib/python/scipy/py3/tests/signal/ya.make @@ -0,0 +1,46 @@ +# Generated by devtools/yamaker. + +PY3TEST() + +SUBSCRIBER(g:python-contrib) + +VERSION(1.11.4) + +ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) + +SIZE(MEDIUM) + +FORK_SUBTESTS() + +PEERDIR( + contrib/python/scipy/py3/tests +) + +NO_LINT() + +SRCDIR(contrib/python/scipy/py3) + +TEST_SRCS( + scipy/signal/tests/__init__.py + scipy/signal/tests/mpsig.py + scipy/signal/tests/test_array_tools.py + scipy/signal/tests/test_bsplines.py + scipy/signal/tests/test_cont2discrete.py + scipy/signal/tests/test_czt.py + scipy/signal/tests/test_dltisys.py + scipy/signal/tests/test_filter_design.py + scipy/signal/tests/test_fir_filter_design.py + scipy/signal/tests/test_ltisys.py + scipy/signal/tests/test_max_len_seq.py + scipy/signal/tests/test_peak_finding.py + scipy/signal/tests/test_result_type.py + scipy/signal/tests/test_savitzky_golay.py + scipy/signal/tests/test_signaltools.py + scipy/signal/tests/test_spectral.py + scipy/signal/tests/test_upfirdn.py + scipy/signal/tests/test_waveforms.py + scipy/signal/tests/test_wavelets.py + scipy/signal/tests/test_windows.py +) + +END() diff --git a/contrib/python/scipy/py3/tests/sparse/ya.make b/contrib/python/scipy/py3/tests/sparse/ya.make new file mode 100644 index 0000000000..946ba0acbd --- /dev/null +++ b/contrib/python/scipy/py3/tests/sparse/ya.make @@ -0,0 +1,75 @@ +# Generated by devtools/yamaker. + +PY3TEST() + +SUBSCRIBER(g:python-contrib) + +VERSION(1.11.4) + +ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) + +SIZE(MEDIUM) + +FORK_SUBTESTS() + +PEERDIR( + contrib/python/scipy/py3/tests +) + +NO_LINT() + +DATA( + arcadia/contrib/python/scipy/py3 +) + +SRCDIR(contrib/python/scipy/py3) + +TEST_SRCS( + scipy/sparse/csgraph/tests/__init__.py + scipy/sparse/csgraph/tests/test_connected_components.py + scipy/sparse/csgraph/tests/test_conversions.py + scipy/sparse/csgraph/tests/test_flow.py + scipy/sparse/csgraph/tests/test_graph_laplacian.py + scipy/sparse/csgraph/tests/test_matching.py + scipy/sparse/csgraph/tests/test_reordering.py + scipy/sparse/csgraph/tests/test_shortest_path.py + scipy/sparse/csgraph/tests/test_spanning_tree.py + scipy/sparse/csgraph/tests/test_traversal.py + scipy/sparse/linalg/_dsolve/tests/__init__.py + scipy/sparse/linalg/_dsolve/tests/test_linsolve.py + scipy/sparse/linalg/_eigen/arpack/tests/__init__.py + scipy/sparse/linalg/_eigen/arpack/tests/test_arpack.py + scipy/sparse/linalg/_eigen/lobpcg/tests/__init__.py + scipy/sparse/linalg/_eigen/lobpcg/tests/test_lobpcg.py + scipy/sparse/linalg/_eigen/tests/__init__.py + scipy/sparse/linalg/_eigen/tests/test_svds.py + scipy/sparse/linalg/_isolve/tests/__init__.py + scipy/sparse/linalg/_isolve/tests/test_gcrotmk.py + scipy/sparse/linalg/_isolve/tests/test_iterative.py + scipy/sparse/linalg/_isolve/tests/test_lgmres.py + scipy/sparse/linalg/_isolve/tests/test_lsmr.py + scipy/sparse/linalg/_isolve/tests/test_lsqr.py + scipy/sparse/linalg/_isolve/tests/test_minres.py + scipy/sparse/linalg/_isolve/tests/test_utils.py + scipy/sparse/linalg/tests/__init__.py + scipy/sparse/linalg/tests/test_expm_multiply.py + scipy/sparse/linalg/tests/test_interface.py + scipy/sparse/linalg/tests/test_matfuncs.py + scipy/sparse/linalg/tests/test_norm.py + scipy/sparse/linalg/tests/test_onenormest.py + scipy/sparse/linalg/tests/test_pydata_sparse.py + scipy/sparse/tests/__init__.py + scipy/sparse/tests/test_array_api.py + scipy/sparse/tests/test_base.py + scipy/sparse/tests/test_construct.py + scipy/sparse/tests/test_csc.py + scipy/sparse/tests/test_csr.py + scipy/sparse/tests/test_deprecations.py + scipy/sparse/tests/test_extract.py + scipy/sparse/tests/test_matrix_io.py + scipy/sparse/tests/test_sparsetools.py + scipy/sparse/tests/test_spfuncs.py + scipy/sparse/tests/test_sputils.py +) + +END() diff --git a/contrib/python/scipy/py3/tests/spatial/ya.make b/contrib/python/scipy/py3/tests/spatial/ya.make new file mode 100644 index 0000000000..b6f681177a --- /dev/null +++ b/contrib/python/scipy/py3/tests/spatial/ya.make @@ -0,0 +1,43 @@ +# Generated by devtools/yamaker. + +PY3TEST() + +SUBSCRIBER(g:python-contrib) + +VERSION(1.11.4) + +ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) + +SIZE(MEDIUM) + +FORK_SUBTESTS() + +PEERDIR( + contrib/python/scipy/py3/tests +) + +NO_LINT() + +DATA( + arcadia/contrib/python/scipy/py3 +) + +SRCDIR(contrib/python/scipy/py3) + +TEST_SRCS( + scipy/spatial/tests/__init__.py + scipy/spatial/tests/test__plotutils.py + scipy/spatial/tests/test__procrustes.py + scipy/spatial/tests/test_distance.py + scipy/spatial/tests/test_hausdorff.py + scipy/spatial/tests/test_kdtree.py + scipy/spatial/tests/test_qhull.py + scipy/spatial/tests/test_slerp.py + scipy/spatial/tests/test_spherical_voronoi.py + scipy/spatial/transform/tests/__init__.py + scipy/spatial/transform/tests/test_rotation.py + scipy/spatial/transform/tests/test_rotation_groups.py + scipy/spatial/transform/tests/test_rotation_spline.py +) + +END() diff --git a/contrib/python/scipy/py3/tests/special/ya.make b/contrib/python/scipy/py3/tests/special/ya.make new file mode 100644 index 0000000000..9ed889f3b0 --- /dev/null +++ b/contrib/python/scipy/py3/tests/special/ya.make @@ -0,0 +1,73 @@ +# Generated by devtools/yamaker. + +PY3TEST() + +SUBSCRIBER(g:python-contrib) + +VERSION(1.11.4) + +ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) + +SIZE(MEDIUM) + +FORK_SUBTESTS() + +PEERDIR( + contrib/python/scipy/py3/tests +) + +NO_LINT() + +DATA( + arcadia/contrib/python/scipy/py3 +) + +SRCDIR(contrib/python/scipy/py3) + +TEST_SRCS( + scipy/special/tests/__init__.py + scipy/special/tests/test_basic.py + scipy/special/tests/test_bdtr.py + scipy/special/tests/test_boxcox.py + scipy/special/tests/test_cdft_asymptotic.py + scipy/special/tests/test_cosine_distr.py + scipy/special/tests/test_cython_special.py + scipy/special/tests/test_data.py + scipy/special/tests/test_digamma.py + scipy/special/tests/test_ellip_harm.py + scipy/special/tests/test_erfinv.py + scipy/special/tests/test_faddeeva.py + scipy/special/tests/test_gamma.py + scipy/special/tests/test_gammainc.py + scipy/special/tests/test_hyp2f1.py + scipy/special/tests/test_hypergeometric.py + scipy/special/tests/test_kolmogorov.py + scipy/special/tests/test_lambertw.py + scipy/special/tests/test_log_softmax.py + scipy/special/tests/test_loggamma.py + scipy/special/tests/test_logit.py + scipy/special/tests/test_logsumexp.py + scipy/special/tests/test_nan_inputs.py + scipy/special/tests/test_ndtr.py + scipy/special/tests/test_ndtri_exp.py + scipy/special/tests/test_orthogonal.py + scipy/special/tests/test_orthogonal_eval.py + scipy/special/tests/test_owens_t.py + scipy/special/tests/test_pcf.py + scipy/special/tests/test_pdtr.py + scipy/special/tests/test_precompute_expn_asy.py + scipy/special/tests/test_precompute_gammainc.py + scipy/special/tests/test_precompute_utils.py + scipy/special/tests/test_sf_error.py + scipy/special/tests/test_sici.py + scipy/special/tests/test_spence.py + scipy/special/tests/test_spfun_stats.py + scipy/special/tests/test_sph_harm.py + scipy/special/tests/test_spherical_bessel.py + scipy/special/tests/test_trig.py + scipy/special/tests/test_wright_bessel.py + scipy/special/tests/test_wrightomega.py + scipy/special/tests/test_zeta.py +) + +END() diff --git a/contrib/python/scipy/py3/tests/stats/ya.make b/contrib/python/scipy/py3/tests/stats/ya.make new file mode 100644 index 0000000000..6cbecf1ab6 --- /dev/null +++ b/contrib/python/scipy/py3/tests/stats/ya.make @@ -0,0 +1,61 @@ +# Generated by devtools/yamaker. + +PY3TEST() + +SUBSCRIBER(g:python-contrib) + +VERSION(1.11.4) + +ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) + +SIZE(MEDIUM) + +FORK_SUBTESTS() + +PEERDIR( + contrib/python/scipy/py3/tests +) + +NO_LINT() + +DATA( + arcadia/contrib/python/scipy/py3 +) + +SRCDIR(contrib/python/scipy/py3) + +TEST_SRCS( + scipy/stats/tests/__init__.py + scipy/stats/tests/common_tests.py + scipy/stats/tests/data/fisher_exact_results_from_r.py + scipy/stats/tests/test_axis_nan_policy.py + scipy/stats/tests/test_binned_statistic.py + scipy/stats/tests/test_boost_ufuncs.py + scipy/stats/tests/test_censored_data.py + scipy/stats/tests/test_contingency.py + scipy/stats/tests/test_continuous_basic.py + scipy/stats/tests/test_continuous_fit_censored.py + scipy/stats/tests/test_crosstab.py + scipy/stats/tests/test_discrete_basic.py + scipy/stats/tests/test_discrete_distns.py + scipy/stats/tests/test_entropy.py + scipy/stats/tests/test_fit.py + scipy/stats/tests/test_hypotests.py + scipy/stats/tests/test_morestats.py + scipy/stats/tests/test_mstats_basic.py + scipy/stats/tests/test_mstats_extras.py + scipy/stats/tests/test_multicomp.py + scipy/stats/tests/test_odds_ratio.py + scipy/stats/tests/test_qmc.py + scipy/stats/tests/test_rank.py + scipy/stats/tests/test_relative_risk.py + scipy/stats/tests/test_resampling.py + scipy/stats/tests/test_sampling.py + scipy/stats/tests/test_sensitivity_analysis.py + scipy/stats/tests/test_stats.py + scipy/stats/tests/test_survival.py + scipy/stats/tests/test_tukeylambda_stats.py + scipy/stats/tests/test_variation.py +) + +END() diff --git a/contrib/python/scipy/py3/tests/ya.make b/contrib/python/scipy/py3/tests/ya.make index b0b1bf51bc..7ccd7890bf 100644 --- a/contrib/python/scipy/py3/tests/ya.make +++ b/contrib/python/scipy/py3/tests/ya.make @@ -1,6 +1,6 @@ # Generated by devtools/yamaker. -PY3TEST() +PY3_LIBRARY() SUBSCRIBER(g:python-contrib) @@ -8,13 +8,7 @@ VERSION(1.11.4) ORIGINAL_SOURCE(mirror://pypi/s/scipy/scipy-1.11.4.tar.gz) -SIZE(MEDIUM) - -FORK_SUBTESTS() - -SPLIT_FACTOR(20) - -REQUIREMENTS(ram:30) +LICENSE(BSD-3-Clause) PEERDIR( contrib/python/mpmath @@ -24,10 +18,6 @@ PEERDIR( NO_LINT() -DATA( - arcadia/contrib/python/scipy/py3 -) - SRCDIR(contrib/python/scipy/py3) PY_SRCS( @@ -35,319 +25,26 @@ PY_SRCS( scipy/conftest.py ) -TEST_SRCS( - scipy/_build_utils/tests/__init__.py - scipy/_build_utils/tests/test_scipy_version.py - scipy/_lib/tests/__init__.py - scipy/_lib/tests/test__gcutils.py - scipy/_lib/tests/test__pep440.py - scipy/_lib/tests/test__testutils.py - scipy/_lib/tests/test__threadsafety.py - scipy/_lib/tests/test__util.py - scipy/_lib/tests/test_bunch.py - scipy/_lib/tests/test_public_api.py - scipy/_lib/tests/test_tmpdirs.py - scipy/_lib/tests/test_warnings.py - scipy/cluster/tests/__init__.py - scipy/cluster/tests/hierarchy_test_data.py - scipy/cluster/tests/test_disjoint_set.py - scipy/cluster/tests/test_hierarchy.py - scipy/cluster/tests/test_vq.py - scipy/constants/tests/__init__.py - scipy/constants/tests/test_codata.py - scipy/constants/tests/test_constants.py - scipy/fft/_pocketfft/tests/__init__.py - scipy/fft/_pocketfft/tests/test_basic.py - scipy/fft/_pocketfft/tests/test_real_transforms.py - scipy/fft/tests/__init__.py - scipy/fft/tests/mock_backend.py - scipy/fft/tests/test_backend.py - scipy/fft/tests/test_fft_function.py - scipy/fft/tests/test_fftlog.py - scipy/fft/tests/test_helper.py - scipy/fft/tests/test_multithreading.py - scipy/fft/tests/test_numpy.py - scipy/fft/tests/test_real_transforms.py - scipy/fftpack/tests/__init__.py - scipy/fftpack/tests/test_basic.py - scipy/fftpack/tests/test_helper.py - scipy/fftpack/tests/test_import.py - scipy/fftpack/tests/test_pseudo_diffs.py - scipy/fftpack/tests/test_real_transforms.py - scipy/integrate/_ivp/tests/__init__.py - scipy/integrate/_ivp/tests/test_ivp.py - scipy/integrate/_ivp/tests/test_rk.py - scipy/integrate/tests/__init__.py - scipy/integrate/tests/test__quad_vec.py - scipy/integrate/tests/test_banded_ode_solvers.py - scipy/integrate/tests/test_bvp.py - scipy/integrate/tests/test_integrate.py - scipy/interpolate/tests/__init__.py - scipy/interpolate/tests/test_bsplines.py - scipy/interpolate/tests/test_fitpack.py - scipy/interpolate/tests/test_fitpack2.py - scipy/interpolate/tests/test_gil.py - scipy/interpolate/tests/test_interpnd.py - scipy/interpolate/tests/test_interpolate.py - scipy/interpolate/tests/test_ndgriddata.py - scipy/interpolate/tests/test_pade.py - scipy/interpolate/tests/test_polyint.py - scipy/interpolate/tests/test_rbf.py - scipy/interpolate/tests/test_rbfinterp.py - scipy/interpolate/tests/test_rgi.py - scipy/io/_harwell_boeing/tests/__init__.py - scipy/io/_harwell_boeing/tests/test_fortran_format.py - scipy/io/_harwell_boeing/tests/test_hb.py - scipy/io/arff/tests/__init__.py - scipy/io/arff/tests/test_arffread.py - scipy/io/matlab/tests/__init__.py - scipy/io/matlab/tests/test_byteordercodes.py - scipy/io/matlab/tests/test_mio.py - scipy/io/matlab/tests/test_mio5_utils.py - scipy/io/matlab/tests/test_mio_funcs.py - scipy/io/matlab/tests/test_mio_utils.py - scipy/io/matlab/tests/test_miobase.py - scipy/io/matlab/tests/test_pathological.py - scipy/io/matlab/tests/test_streams.py - scipy/io/tests/__init__.py - scipy/io/tests/test_idl.py - scipy/io/tests/test_mmio.py - scipy/io/tests/test_netcdf.py - scipy/io/tests/test_paths.py - scipy/io/tests/test_wavfile.py - scipy/linalg/tests/__init__.py - scipy/linalg/tests/test_basic.py - scipy/linalg/tests/test_blas.py - scipy/linalg/tests/test_cython_blas.py - scipy/linalg/tests/test_cython_lapack.py - scipy/linalg/tests/test_cythonized_array_utils.py - scipy/linalg/tests/test_decomp.py - scipy/linalg/tests/test_decomp_cholesky.py - scipy/linalg/tests/test_decomp_cossin.py - scipy/linalg/tests/test_decomp_ldl.py - scipy/linalg/tests/test_decomp_lu.py - scipy/linalg/tests/test_decomp_polar.py - scipy/linalg/tests/test_decomp_update.py - scipy/linalg/tests/test_fblas.py - scipy/linalg/tests/test_interpolative.py - scipy/linalg/tests/test_lapack.py - scipy/linalg/tests/test_matfuncs.py - scipy/linalg/tests/test_matmul_toeplitz.py - scipy/linalg/tests/test_misc.py - scipy/linalg/tests/test_procrustes.py - scipy/linalg/tests/test_sketches.py - scipy/linalg/tests/test_solve_toeplitz.py - scipy/linalg/tests/test_solvers.py - scipy/linalg/tests/test_special_matrices.py - scipy/misc/tests/__init__.py - scipy/misc/tests/test_common.py - scipy/misc/tests/test_config.py - scipy/misc/tests/test_doccer.py - scipy/ndimage/tests/__init__.py - scipy/ndimage/tests/test_datatypes.py - scipy/ndimage/tests/test_filters.py - scipy/ndimage/tests/test_fourier.py - scipy/ndimage/tests/test_interpolation.py - scipy/ndimage/tests/test_measurements.py - scipy/ndimage/tests/test_morphology.py - scipy/ndimage/tests/test_splines.py - scipy/odr/tests/__init__.py - scipy/odr/tests/test_odr.py - scipy/optimize/_trustregion_constr/tests/__init__.py - scipy/optimize/_trustregion_constr/tests/test_canonical_constraint.py - scipy/optimize/_trustregion_constr/tests/test_projections.py - scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py - scipy/optimize/_trustregion_constr/tests/test_report.py - scipy/optimize/tests/__init__.py - scipy/optimize/tests/test__basinhopping.py - scipy/optimize/tests/test__differential_evolution.py - scipy/optimize/tests/test__dual_annealing.py - scipy/optimize/tests/test__linprog_clean_inputs.py - scipy/optimize/tests/test__numdiff.py - scipy/optimize/tests/test__remove_redundancy.py - scipy/optimize/tests/test__root.py - scipy/optimize/tests/test__shgo.py - scipy/optimize/tests/test__spectral.py - scipy/optimize/tests/test_cobyla.py - scipy/optimize/tests/test_constraint_conversion.py - scipy/optimize/tests/test_constraints.py - scipy/optimize/tests/test_cython_optimize.py - scipy/optimize/tests/test_differentiable_functions.py - scipy/optimize/tests/test_direct.py - scipy/optimize/tests/test_hessian_update_strategy.py - scipy/optimize/tests/test_lbfgsb_hessinv.py - scipy/optimize/tests/test_lbfgsb_setulb.py - scipy/optimize/tests/test_least_squares.py - scipy/optimize/tests/test_linesearch.py - scipy/optimize/tests/test_linprog.py - scipy/optimize/tests/test_lsq_common.py - scipy/optimize/tests/test_lsq_linear.py - scipy/optimize/tests/test_milp.py - scipy/optimize/tests/test_minimize_constrained.py - scipy/optimize/tests/test_minpack.py - scipy/optimize/tests/test_nnls.py - scipy/optimize/tests/test_nonlin.py - scipy/optimize/tests/test_optimize.py - scipy/optimize/tests/test_quadratic_assignment.py - scipy/optimize/tests/test_regression.py - scipy/optimize/tests/test_slsqp.py - scipy/optimize/tests/test_tnc.py - scipy/optimize/tests/test_trustregion.py - scipy/optimize/tests/test_trustregion_exact.py - scipy/optimize/tests/test_trustregion_krylov.py - scipy/optimize/tests/test_zeros.py - scipy/signal/tests/__init__.py - scipy/signal/tests/mpsig.py - scipy/signal/tests/test_array_tools.py - scipy/signal/tests/test_bsplines.py - scipy/signal/tests/test_cont2discrete.py - scipy/signal/tests/test_czt.py - scipy/signal/tests/test_dltisys.py - scipy/signal/tests/test_filter_design.py - scipy/signal/tests/test_fir_filter_design.py - scipy/signal/tests/test_ltisys.py - scipy/signal/tests/test_max_len_seq.py - scipy/signal/tests/test_peak_finding.py - scipy/signal/tests/test_result_type.py - scipy/signal/tests/test_savitzky_golay.py - scipy/signal/tests/test_signaltools.py - scipy/signal/tests/test_spectral.py - scipy/signal/tests/test_upfirdn.py - scipy/signal/tests/test_waveforms.py - scipy/signal/tests/test_wavelets.py - scipy/signal/tests/test_windows.py - scipy/sparse/csgraph/tests/__init__.py - scipy/sparse/csgraph/tests/test_connected_components.py - scipy/sparse/csgraph/tests/test_conversions.py - scipy/sparse/csgraph/tests/test_flow.py - scipy/sparse/csgraph/tests/test_graph_laplacian.py - scipy/sparse/csgraph/tests/test_matching.py - scipy/sparse/csgraph/tests/test_reordering.py - scipy/sparse/csgraph/tests/test_shortest_path.py - scipy/sparse/csgraph/tests/test_spanning_tree.py - scipy/sparse/csgraph/tests/test_traversal.py - scipy/sparse/linalg/_dsolve/tests/__init__.py - scipy/sparse/linalg/_dsolve/tests/test_linsolve.py - scipy/sparse/linalg/_eigen/arpack/tests/__init__.py - scipy/sparse/linalg/_eigen/arpack/tests/test_arpack.py - scipy/sparse/linalg/_eigen/lobpcg/tests/__init__.py - scipy/sparse/linalg/_eigen/lobpcg/tests/test_lobpcg.py - scipy/sparse/linalg/_eigen/tests/__init__.py - scipy/sparse/linalg/_eigen/tests/test_svds.py - scipy/sparse/linalg/_isolve/tests/__init__.py - scipy/sparse/linalg/_isolve/tests/test_gcrotmk.py - scipy/sparse/linalg/_isolve/tests/test_iterative.py - scipy/sparse/linalg/_isolve/tests/test_lgmres.py - scipy/sparse/linalg/_isolve/tests/test_lsmr.py - scipy/sparse/linalg/_isolve/tests/test_lsqr.py - scipy/sparse/linalg/_isolve/tests/test_minres.py - scipy/sparse/linalg/_isolve/tests/test_utils.py - scipy/sparse/linalg/tests/__init__.py - scipy/sparse/linalg/tests/test_expm_multiply.py - scipy/sparse/linalg/tests/test_interface.py - scipy/sparse/linalg/tests/test_matfuncs.py - scipy/sparse/linalg/tests/test_norm.py - scipy/sparse/linalg/tests/test_onenormest.py - scipy/sparse/linalg/tests/test_pydata_sparse.py - scipy/sparse/tests/__init__.py - scipy/sparse/tests/test_array_api.py - scipy/sparse/tests/test_base.py - scipy/sparse/tests/test_construct.py - scipy/sparse/tests/test_csc.py - scipy/sparse/tests/test_csr.py - scipy/sparse/tests/test_deprecations.py - scipy/sparse/tests/test_extract.py - scipy/sparse/tests/test_matrix_io.py - scipy/sparse/tests/test_sparsetools.py - scipy/sparse/tests/test_spfuncs.py - scipy/sparse/tests/test_sputils.py - scipy/spatial/tests/__init__.py - scipy/spatial/tests/test__plotutils.py - scipy/spatial/tests/test__procrustes.py - scipy/spatial/tests/test_distance.py - scipy/spatial/tests/test_hausdorff.py - scipy/spatial/tests/test_kdtree.py - scipy/spatial/tests/test_qhull.py - scipy/spatial/tests/test_slerp.py - scipy/spatial/tests/test_spherical_voronoi.py - scipy/spatial/transform/tests/__init__.py - scipy/spatial/transform/tests/test_rotation.py - scipy/spatial/transform/tests/test_rotation_groups.py - scipy/spatial/transform/tests/test_rotation_spline.py - scipy/special/tests/__init__.py - scipy/special/tests/test_basic.py - scipy/special/tests/test_bdtr.py - scipy/special/tests/test_boxcox.py - scipy/special/tests/test_cdft_asymptotic.py - scipy/special/tests/test_cosine_distr.py - scipy/special/tests/test_cython_special.py - scipy/special/tests/test_data.py - scipy/special/tests/test_digamma.py - scipy/special/tests/test_ellip_harm.py - scipy/special/tests/test_erfinv.py - scipy/special/tests/test_faddeeva.py - scipy/special/tests/test_gamma.py - scipy/special/tests/test_gammainc.py - scipy/special/tests/test_hyp2f1.py - scipy/special/tests/test_hypergeometric.py - scipy/special/tests/test_kolmogorov.py - scipy/special/tests/test_lambertw.py - scipy/special/tests/test_log_softmax.py - scipy/special/tests/test_loggamma.py - scipy/special/tests/test_logit.py - scipy/special/tests/test_logsumexp.py - scipy/special/tests/test_nan_inputs.py - scipy/special/tests/test_ndtr.py - scipy/special/tests/test_ndtri_exp.py - scipy/special/tests/test_orthogonal.py - scipy/special/tests/test_orthogonal_eval.py - scipy/special/tests/test_owens_t.py - scipy/special/tests/test_pcf.py - scipy/special/tests/test_pdtr.py - scipy/special/tests/test_precompute_expn_asy.py - scipy/special/tests/test_precompute_gammainc.py - scipy/special/tests/test_precompute_utils.py - scipy/special/tests/test_sf_error.py - scipy/special/tests/test_sici.py - scipy/special/tests/test_spence.py - scipy/special/tests/test_spfun_stats.py - scipy/special/tests/test_sph_harm.py - scipy/special/tests/test_spherical_bessel.py - scipy/special/tests/test_trig.py - scipy/special/tests/test_wright_bessel.py - scipy/special/tests/test_wrightomega.py - scipy/special/tests/test_zeta.py - scipy/stats/tests/__init__.py - scipy/stats/tests/common_tests.py - scipy/stats/tests/data/fisher_exact_results_from_r.py - scipy/stats/tests/test_axis_nan_policy.py - scipy/stats/tests/test_binned_statistic.py - scipy/stats/tests/test_boost_ufuncs.py - scipy/stats/tests/test_censored_data.py - scipy/stats/tests/test_contingency.py - scipy/stats/tests/test_continuous_basic.py - scipy/stats/tests/test_continuous_fit_censored.py - scipy/stats/tests/test_crosstab.py - scipy/stats/tests/test_discrete_basic.py - scipy/stats/tests/test_discrete_distns.py - scipy/stats/tests/test_entropy.py - scipy/stats/tests/test_fit.py - scipy/stats/tests/test_hypotests.py - scipy/stats/tests/test_morestats.py - scipy/stats/tests/test_mstats_basic.py - scipy/stats/tests/test_mstats_extras.py - scipy/stats/tests/test_multicomp.py - scipy/stats/tests/test_odds_ratio.py - scipy/stats/tests/test_qmc.py - scipy/stats/tests/test_rank.py - scipy/stats/tests/test_relative_risk.py - scipy/stats/tests/test_resampling.py - scipy/stats/tests/test_sampling.py - scipy/stats/tests/test_sensitivity_analysis.py - scipy/stats/tests/test_stats.py - scipy/stats/tests/test_survival.py - scipy/stats/tests/test_tukeylambda_stats.py - scipy/stats/tests/test_variation.py -) - END() + +RECURSE_FOR_TESTS( + _build_utils + _lib + cluster + constants + fft + fftpack + integrate + interpolate + io + linalg + misc + ndimage + odr + optimize + signal + sparse + spatial + special + stats +) diff --git a/contrib/python/six/py2/.dist-info/METADATA b/contrib/python/six/py2/.dist-info/METADATA index 6d7525c2eb..cfde03c263 100644 --- a/contrib/python/six/py2/.dist-info/METADATA +++ b/contrib/python/six/py2/.dist-info/METADATA @@ -1,12 +1,11 @@ Metadata-Version: 2.1 Name: six -Version: 1.16.0 +Version: 1.17.0 Summary: Python 2 and 3 compatibility utilities Home-page: https://github.com/benjaminp/six Author: Benjamin Peterson Author-email: benjamin@python.org License: MIT -Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 3 @@ -15,15 +14,12 @@ Classifier: License :: OSI Approved :: MIT License Classifier: Topic :: Software Development :: Libraries Classifier: Topic :: Utilities Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.* +License-File: LICENSE .. image:: https://img.shields.io/pypi/v/six.svg :target: https://pypi.org/project/six/ :alt: six on PyPI -.. image:: https://travis-ci.org/benjaminp/six.svg?branch=master - :target: https://travis-ci.org/benjaminp/six - :alt: six on TravisCI - .. image:: https://readthedocs.org/projects/six/badge/?version=latest :target: https://six.readthedocs.io/ :alt: six's documentation on Read the Docs @@ -45,5 +41,3 @@ Online documentation is at https://six.readthedocs.io/. Bugs can be reported to https://github.com/benjaminp/six. The code can also be found there. - - diff --git a/contrib/python/six/py2/LICENSE b/contrib/python/six/py2/LICENSE index de6633112c..1cc22a5aa7 100644 --- a/contrib/python/six/py2/LICENSE +++ b/contrib/python/six/py2/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2010-2020 Benjamin Peterson +Copyright (c) 2010-2024 Benjamin Peterson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/contrib/python/six/py2/README.rst b/contrib/python/six/py2/README.rst index 6339ba5d93..3674bc956e 100644 --- a/contrib/python/six/py2/README.rst +++ b/contrib/python/six/py2/README.rst @@ -2,10 +2,6 @@ :target: https://pypi.org/project/six/ :alt: six on PyPI -.. image:: https://travis-ci.org/benjaminp/six.svg?branch=master - :target: https://travis-ci.org/benjaminp/six - :alt: six on TravisCI - .. image:: https://readthedocs.org/projects/six/badge/?version=latest :target: https://six.readthedocs.io/ :alt: six's documentation on Read the Docs diff --git a/contrib/python/six/py2/six.py b/contrib/python/six/py2/six.py index 4cba03c75f..29b5da2249 100644 --- a/contrib/python/six/py2/six.py +++ b/contrib/python/six/py2/six.py @@ -1,4 +1,4 @@ -# Copyright (c) 2010-2020 Benjamin Peterson +# Copyright (c) 2010-2024 Benjamin Peterson # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -29,7 +29,7 @@ import sys import types __author__ = "Benjamin Peterson <benjamin@python.org>" -__version__ = "1.16.0" +__version__ = "1.17.0" # Useful for very coarse version differentiation. @@ -263,7 +263,7 @@ _moved_attributes = [ MovedAttribute("reduce", "__builtin__", "functools"), MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), MovedAttribute("StringIO", "StringIO", "io"), - MovedAttribute("UserDict", "UserDict", "collections"), + MovedAttribute("UserDict", "UserDict", "collections", "IterableUserDict", "UserDict"), MovedAttribute("UserList", "UserList", "collections"), MovedAttribute("UserString", "UserString", "collections"), MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), @@ -435,12 +435,17 @@ _urllib_request_moved_attributes = [ MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), MovedAttribute("urlretrieve", "urllib", "urllib.request"), MovedAttribute("urlcleanup", "urllib", "urllib.request"), - MovedAttribute("URLopener", "urllib", "urllib.request"), - MovedAttribute("FancyURLopener", "urllib", "urllib.request"), MovedAttribute("proxy_bypass", "urllib", "urllib.request"), MovedAttribute("parse_http_list", "urllib2", "urllib.request"), MovedAttribute("parse_keqv_list", "urllib2", "urllib.request"), ] +if sys.version_info[:2] < (3, 14): + _urllib_request_moved_attributes.extend( + [ + MovedAttribute("URLopener", "urllib", "urllib.request"), + MovedAttribute("FancyURLopener", "urllib", "urllib.request"), + ] + ) for attr in _urllib_request_moved_attributes: setattr(Module_six_moves_urllib_request, attr.name, attr) del attr diff --git a/contrib/python/six/py2/ya.make b/contrib/python/six/py2/ya.make index ca16ba19ac..bac6050e1c 100644 --- a/contrib/python/six/py2/ya.make +++ b/contrib/python/six/py2/ya.make @@ -2,7 +2,7 @@ PY2_LIBRARY() -VERSION(1.16.0) +VERSION(1.17.0) LICENSE(MIT) diff --git a/contrib/python/six/py3/.dist-info/METADATA b/contrib/python/six/py3/.dist-info/METADATA index 6d7525c2eb..cfde03c263 100644 --- a/contrib/python/six/py3/.dist-info/METADATA +++ b/contrib/python/six/py3/.dist-info/METADATA @@ -1,12 +1,11 @@ Metadata-Version: 2.1 Name: six -Version: 1.16.0 +Version: 1.17.0 Summary: Python 2 and 3 compatibility utilities Home-page: https://github.com/benjaminp/six Author: Benjamin Peterson Author-email: benjamin@python.org License: MIT -Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 3 @@ -15,15 +14,12 @@ Classifier: License :: OSI Approved :: MIT License Classifier: Topic :: Software Development :: Libraries Classifier: Topic :: Utilities Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.* +License-File: LICENSE .. image:: https://img.shields.io/pypi/v/six.svg :target: https://pypi.org/project/six/ :alt: six on PyPI -.. image:: https://travis-ci.org/benjaminp/six.svg?branch=master - :target: https://travis-ci.org/benjaminp/six - :alt: six on TravisCI - .. image:: https://readthedocs.org/projects/six/badge/?version=latest :target: https://six.readthedocs.io/ :alt: six's documentation on Read the Docs @@ -45,5 +41,3 @@ Online documentation is at https://six.readthedocs.io/. Bugs can be reported to https://github.com/benjaminp/six. The code can also be found there. - - diff --git a/contrib/python/six/py3/LICENSE b/contrib/python/six/py3/LICENSE index de6633112c..1cc22a5aa7 100644 --- a/contrib/python/six/py3/LICENSE +++ b/contrib/python/six/py3/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2010-2020 Benjamin Peterson +Copyright (c) 2010-2024 Benjamin Peterson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/contrib/python/six/py3/README.rst b/contrib/python/six/py3/README.rst index 6339ba5d93..3674bc956e 100644 --- a/contrib/python/six/py3/README.rst +++ b/contrib/python/six/py3/README.rst @@ -2,10 +2,6 @@ :target: https://pypi.org/project/six/ :alt: six on PyPI -.. image:: https://travis-ci.org/benjaminp/six.svg?branch=master - :target: https://travis-ci.org/benjaminp/six - :alt: six on TravisCI - .. image:: https://readthedocs.org/projects/six/badge/?version=latest :target: https://six.readthedocs.io/ :alt: six's documentation on Read the Docs diff --git a/contrib/python/six/py3/six.py b/contrib/python/six/py3/six.py index 4cba03c75f..29b5da2249 100644 --- a/contrib/python/six/py3/six.py +++ b/contrib/python/six/py3/six.py @@ -1,4 +1,4 @@ -# Copyright (c) 2010-2020 Benjamin Peterson +# Copyright (c) 2010-2024 Benjamin Peterson # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -29,7 +29,7 @@ import sys import types __author__ = "Benjamin Peterson <benjamin@python.org>" -__version__ = "1.16.0" +__version__ = "1.17.0" # Useful for very coarse version differentiation. @@ -263,7 +263,7 @@ _moved_attributes = [ MovedAttribute("reduce", "__builtin__", "functools"), MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), MovedAttribute("StringIO", "StringIO", "io"), - MovedAttribute("UserDict", "UserDict", "collections"), + MovedAttribute("UserDict", "UserDict", "collections", "IterableUserDict", "UserDict"), MovedAttribute("UserList", "UserList", "collections"), MovedAttribute("UserString", "UserString", "collections"), MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), @@ -435,12 +435,17 @@ _urllib_request_moved_attributes = [ MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), MovedAttribute("urlretrieve", "urllib", "urllib.request"), MovedAttribute("urlcleanup", "urllib", "urllib.request"), - MovedAttribute("URLopener", "urllib", "urllib.request"), - MovedAttribute("FancyURLopener", "urllib", "urllib.request"), MovedAttribute("proxy_bypass", "urllib", "urllib.request"), MovedAttribute("parse_http_list", "urllib2", "urllib.request"), MovedAttribute("parse_keqv_list", "urllib2", "urllib.request"), ] +if sys.version_info[:2] < (3, 14): + _urllib_request_moved_attributes.extend( + [ + MovedAttribute("URLopener", "urllib", "urllib.request"), + MovedAttribute("FancyURLopener", "urllib", "urllib.request"), + ] + ) for attr in _urllib_request_moved_attributes: setattr(Module_six_moves_urllib_request, attr.name, attr) del attr diff --git a/contrib/python/six/py3/ya.make b/contrib/python/six/py3/ya.make index ca5870c634..077c2a4153 100644 --- a/contrib/python/six/py3/ya.make +++ b/contrib/python/six/py3/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(1.16.0) +VERSION(1.17.0) LICENSE(MIT) diff --git a/contrib/python/types-protobuf/.dist-info/METADATA b/contrib/python/types-protobuf/.dist-info/METADATA index ed5007793c..2d60622cee 100644 --- a/contrib/python/types-protobuf/.dist-info/METADATA +++ b/contrib/python/types-protobuf/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: types-protobuf -Version: 5.28.3.20241203 +Version: 5.29.1.20241207 Summary: Typing stubs for protobuf Home-page: https://github.com/python/typeshed License: Apache-2.0 @@ -26,9 +26,9 @@ It can be used by type-checking tools like [Pyre](https://pyre-check.org/), PyCharm, etc. to check code that uses `protobuf`. This version of `types-protobuf` aims to provide accurate annotations for -`protobuf~=5.28.3`. +`protobuf~=5.29.1`. -Partially generated using [mypy-protobuf==3.6.0](https://github.com/nipunn1313/mypy-protobuf/tree/v3.6.0) and libprotoc 27.2 on [protobuf v28.3](https://github.com/protocolbuffers/protobuf/releases/tag/v28.3) (python `protobuf==5.28.3`). +Partially generated using [mypy-protobuf==3.6.0](https://github.com/nipunn1313/mypy-protobuf/tree/v3.6.0) and libprotoc 28.1 on [protobuf v29.1](https://github.com/protocolbuffers/protobuf/releases/tag/v29.1) (python `protobuf==5.29.1`). This stub package is marked as [partial](https://peps.python.org/pep-0561/#partial-stub-packages). If you find that annotations are missing, feel free to contribute and help complete them. @@ -46,4 +46,4 @@ mypy 1.13.0, pyright 1.1.389, and pytype 2024.10.11. It was generated from typeshed commit -[`f7c6acde6e1718b5f8748815200e95ef05d96d32`](https://github.com/python/typeshed/commit/f7c6acde6e1718b5f8748815200e95ef05d96d32). +[`0e9c9e1362959512a880abbf1275471b0d76924f`](https://github.com/python/typeshed/commit/0e9c9e1362959512a880abbf1275471b0d76924f). diff --git a/contrib/python/types-protobuf/README.md b/contrib/python/types-protobuf/README.md index 8918d05f8e..ba94ec673a 100644 --- a/contrib/python/types-protobuf/README.md +++ b/contrib/python/types-protobuf/README.md @@ -9,9 +9,9 @@ It can be used by type-checking tools like [Pyre](https://pyre-check.org/), PyCharm, etc. to check code that uses `protobuf`. This version of `types-protobuf` aims to provide accurate annotations for -`protobuf~=5.28.3`. +`protobuf~=5.29.1`. -Partially generated using [mypy-protobuf==3.6.0](https://github.com/nipunn1313/mypy-protobuf/tree/v3.6.0) and libprotoc 27.2 on [protobuf v28.3](https://github.com/protocolbuffers/protobuf/releases/tag/v28.3) (python `protobuf==5.28.3`). +Partially generated using [mypy-protobuf==3.6.0](https://github.com/nipunn1313/mypy-protobuf/tree/v3.6.0) and libprotoc 28.1 on [protobuf v29.1](https://github.com/protocolbuffers/protobuf/releases/tag/v29.1) (python `protobuf==5.29.1`). This stub package is marked as [partial](https://peps.python.org/pep-0561/#partial-stub-packages). If you find that annotations are missing, feel free to contribute and help complete them. @@ -29,4 +29,4 @@ mypy 1.13.0, pyright 1.1.389, and pytype 2024.10.11. It was generated from typeshed commit -[`f7c6acde6e1718b5f8748815200e95ef05d96d32`](https://github.com/python/typeshed/commit/f7c6acde6e1718b5f8748815200e95ef05d96d32).
\ No newline at end of file +[`0e9c9e1362959512a880abbf1275471b0d76924f`](https://github.com/python/typeshed/commit/0e9c9e1362959512a880abbf1275471b0d76924f).
\ No newline at end of file diff --git a/contrib/python/types-protobuf/google-stubs/METADATA.toml b/contrib/python/types-protobuf/google-stubs/METADATA.toml index 8349e2ea04..04c674e5fb 100644 --- a/contrib/python/types-protobuf/google-stubs/METADATA.toml +++ b/contrib/python/types-protobuf/google-stubs/METADATA.toml @@ -1,7 +1,7 @@ # Using an exact number in the specifier for scripts/sync_protobuf/google_protobuf.py -version = "~=5.28.3" +version = "~=5.29.1" upstream_repository = "https://github.com/protocolbuffers/protobuf" -extra_description = "Partially generated using [mypy-protobuf==3.6.0](https://github.com/nipunn1313/mypy-protobuf/tree/v3.6.0) and libprotoc 27.2 on [protobuf v28.3](https://github.com/protocolbuffers/protobuf/releases/tag/v28.3) (python `protobuf==5.28.3`)." +extra_description = "Partially generated using [mypy-protobuf==3.6.0](https://github.com/nipunn1313/mypy-protobuf/tree/v3.6.0) and libprotoc 28.1 on [protobuf v29.1](https://github.com/protocolbuffers/protobuf/releases/tag/v29.1) (python `protobuf==5.29.1`)." partial_stub = true [tool.stubtest] diff --git a/contrib/python/types-protobuf/ya.make b/contrib/python/types-protobuf/ya.make index bd30a270ca..d583cb9a7c 100644 --- a/contrib/python/types-protobuf/ya.make +++ b/contrib/python/types-protobuf/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(5.28.3.20241203) +VERSION(5.29.1.20241207) LICENSE(Apache-2.0) diff --git a/contrib/python/ydb/py3/.dist-info/METADATA b/contrib/python/ydb/py3/.dist-info/METADATA index 756e15d29a..8e8b79f6ab 100644 --- a/contrib/python/ydb/py3/.dist-info/METADATA +++ b/contrib/python/ydb/py3/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: ydb -Version: 3.18.10 +Version: 3.18.11 Summary: YDB Python SDK Home-page: http://github.com/ydb-platform/ydb-python-sdk Author: Yandex LLC diff --git a/contrib/python/ydb/py3/ya.make b/contrib/python/ydb/py3/ya.make index a643d0b0b4..284cfb73d0 100644 --- a/contrib/python/ydb/py3/ya.make +++ b/contrib/python/ydb/py3/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(3.18.10) +VERSION(3.18.11) LICENSE(Apache-2.0) diff --git a/contrib/python/ydb/py3/ydb/_topic_writer/topic_writer_asyncio.py b/contrib/python/ydb/py3/ydb/_topic_writer/topic_writer_asyncio.py index c7f88a42a3..d759072c22 100644 --- a/contrib/python/ydb/py3/ydb/_topic_writer/topic_writer_asyncio.py +++ b/contrib/python/ydb/py3/ydb/_topic_writer/topic_writer_asyncio.py @@ -307,7 +307,7 @@ class WriterAsyncIOReconnector: def _prepare_internal_messages(self, messages: List[PublicMessage]) -> List[InternalMessage]: if self._settings.auto_created_at: - now = datetime.datetime.now() + now = datetime.datetime.now(datetime.timezone.utc) else: now = None diff --git a/contrib/python/ydb/py3/ydb/ydb_version.py b/contrib/python/ydb/py3/ydb/ydb_version.py index 6d13618e64..c51c9d45d8 100644 --- a/contrib/python/ydb/py3/ydb/ydb_version.py +++ b/contrib/python/ydb/py3/ydb/ydb_version.py @@ -1 +1 @@ -VERSION = "3.18.10" +VERSION = "3.18.11" diff --git a/contrib/restricted/boost/context/.yandex_meta/devtools.copyrights.report b/contrib/restricted/boost/context/.yandex_meta/devtools.copyrights.report index bc3f7ce474..5ab98d2b00 100644 --- a/contrib/restricted/boost/context/.yandex_meta/devtools.copyrights.report +++ b/contrib/restricted/boost/context/.yandex_meta/devtools.copyrights.report @@ -54,21 +54,6 @@ BELONGS ya.make src/asm/ontop_arm64_aapcs_macho_gas.S [2:4] src/asm/ontop_arm64_aapcs_pe_armasm.masm [1:3] -KEEP COPYRIGHT_SERVICE_LABEL 48ce97ba62fc10cee11a213ab0560d6d -BELONGS ya.make - License text: - Copyright Claudio Jeker 2024 - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - Scancode info: - Original SPDX id: COPYRIGHT_SERVICE_LABEL - Score : 100.00 - Match type : COPYRIGHT - Files with this license: - src/asm/jump_sparc64_sysv_elf_gas.S [2:4] - src/asm/make_sparc64_sysv_elf_gas.S [2:4] - src/asm/ontop_sparc64_sysv_elf_gas.S [2:4] - KEEP COPYRIGHT_SERVICE_LABEL 768f987faaed0adc6222ab24c7bd02e6 BELONGS ya.make License text: @@ -84,101 +69,41 @@ BELONGS ya.make src/asm/jump_arm_aapcs_elf_gas.S [2:4] src/asm/jump_arm_aapcs_macho_gas.S [2:4] src/asm/jump_arm_aapcs_pe_armasm.masm [2:4] - src/asm/jump_i386_ms_pe_clang_gas.S [2:5] - src/asm/jump_i386_ms_pe_gas.asm [2:5] src/asm/jump_i386_ms_pe_masm.masm [2:4] src/asm/jump_i386_sysv_elf_gas.S [2:4] src/asm/jump_i386_sysv_macho_gas.S [2:4] - src/asm/jump_mips32_o32_elf_gas.S [2:4] - src/asm/jump_ppc32_sysv_elf_gas.S [2:4] - src/asm/jump_ppc32_sysv_macho_gas.S [2:4] - src/asm/jump_ppc32_sysv_xcoff_gas.S [2:4] - src/asm/jump_ppc64_sysv_elf_gas.S [2:4] - src/asm/jump_ppc64_sysv_macho_gas.S [2:4] - src/asm/jump_ppc64_sysv_xcoff_gas.S [3:5] - src/asm/jump_x86_64_ms_pe_clang_gas.S [2:5] - src/asm/jump_x86_64_ms_pe_gas.asm [2:5] src/asm/jump_x86_64_ms_pe_masm.masm [2:4] src/asm/jump_x86_64_sysv_elf_gas.S [2:4] src/asm/jump_x86_64_sysv_macho_gas.S [2:4] src/asm/make_arm_aapcs_elf_gas.S [2:4] src/asm/make_arm_aapcs_macho_gas.S [2:4] src/asm/make_arm_aapcs_pe_armasm.masm [2:4] - src/asm/make_i386_ms_pe_clang_gas.S [2:5] - src/asm/make_i386_ms_pe_gas.asm [2:5] src/asm/make_i386_ms_pe_masm.masm [2:4] src/asm/make_i386_sysv_elf_gas.S [2:4] src/asm/make_i386_sysv_macho_gas.S [2:4] - src/asm/make_mips32_o32_elf_gas.S [2:4] - src/asm/make_ppc32_sysv_elf_gas.S [2:4] - src/asm/make_ppc32_sysv_macho_gas.S [2:4] - src/asm/make_ppc32_sysv_xcoff_gas.S [2:4] - src/asm/make_ppc64_sysv_elf_gas.S [2:4] - src/asm/make_ppc64_sysv_macho_gas.S [2:4] - src/asm/make_ppc64_sysv_xcoff_gas.S [2:4] - src/asm/make_x86_64_ms_pe_clang_gas.S [2:5] - src/asm/make_x86_64_ms_pe_gas.asm [2:5] src/asm/make_x86_64_ms_pe_masm.masm [2:4] src/asm/make_x86_64_sysv_elf_gas.S [2:4] src/asm/make_x86_64_sysv_macho_gas.S [2:4] src/asm/ontop_arm_aapcs_elf_gas.S [2:4] src/asm/ontop_arm_aapcs_macho_gas.S [2:4] src/asm/ontop_arm_aapcs_pe_armasm.masm [2:4] - src/asm/ontop_i386_ms_pe_clang_gas.S [2:5] - src/asm/ontop_i386_ms_pe_gas.asm [2:5] src/asm/ontop_i386_ms_pe_masm.masm [2:4] src/asm/ontop_i386_sysv_elf_gas.S [2:4] src/asm/ontop_i386_sysv_macho_gas.S [2:4] - src/asm/ontop_mips32_o32_elf_gas.S [2:4] - src/asm/ontop_ppc32_sysv_elf_gas.S [2:4] - src/asm/ontop_ppc32_sysv_macho_gas.S [2:4] - src/asm/ontop_ppc32_sysv_xcoff_gas.S [2:4] - src/asm/ontop_ppc64_sysv_elf_gas.S [2:4] - src/asm/ontop_ppc64_sysv_macho_gas.S [2:4] - src/asm/ontop_ppc64_sysv_xcoff_gas.S [2:4] - src/asm/ontop_x86_64_ms_pe_clang_gas.S [2:5] - src/asm/ontop_x86_64_ms_pe_gas.asm [2:5] src/asm/ontop_x86_64_ms_pe_masm.masm [2:4] src/asm/ontop_x86_64_sysv_elf_gas.S [2:4] src/asm/ontop_x86_64_sysv_macho_gas.S [2:4] - src/asm/tail_ontop_ppc32_sysv.cpp [2:4] src/untested.cpp [2:4] -KEEP COPYRIGHT_SERVICE_LABEL b56e68f168b25ead2610488b3af94842 -BELONGS ya.make - License text: - Copyright Jiaxun Yang 2018. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - Scancode info: - Original SPDX id: COPYRIGHT_SERVICE_LABEL - Score : 100.00 - Match type : COPYRIGHT - Files with this license: - src/asm/jump_mips64_n64_elf_gas.S [2:4] - src/asm/make_mips64_n64_elf_gas.S [2:4] - src/asm/ontop_mips64_n64_elf_gas.S [2:4] - -KEEP COPYRIGHT_SERVICE_LABEL bdb654e3fbbec678064a117bc379b41b +KEEP COPYRIGHT_SERVICE_LABEL 9ed7b7468c684d33492a4176e9cf31b1 BELONGS ya.make - License text: - Copyright Sergue E. Leontiev 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at + Note: matched license text is too long. Read it in the source files. Scancode info: Original SPDX id: COPYRIGHT_SERVICE_LABEL Score : 100.00 Match type : COPYRIGHT Files with this license: - src/asm/jump_combined_sysv_macho_gas.S [2:4] - src/asm/jump_i386_x86_64_sysv_macho_gas.S [2:4] - src/asm/jump_ppc32_ppc64_sysv_macho_gas.S [2:4] - src/asm/make_combined_sysv_macho_gas.S [2:4] - src/asm/make_i386_x86_64_sysv_macho_gas.S [2:4] - src/asm/make_ppc32_ppc64_sysv_macho_gas.S [2:4] - src/asm/ontop_combined_sysv_macho_gas.S [2:4] - src/asm/ontop_i386_x86_64_sysv_macho_gas.S [2:4] - src/asm/ontop_ppc32_ppc64_sysv_macho_gas.S [2:4] + src/fcontext.cpp [1:3] KEEP COPYRIGHT_SERVICE_LABEL c3ce9643507aa0942a28211fe8f95eff BELONGS ya.make @@ -236,24 +161,3 @@ BELONGS ya.make include/boost/context/windows/protected_fixedsize_stack.hpp [2:4] src/posix/stack_traits.cpp [2:4] src/windows/stack_traits.cpp [2:4] - -KEEP COPYRIGHT_SERVICE_LABEL d1eeae51f362a32140f64b39499ca9bf -BELONGS ya.make - Note: matched license text is too long. Read it in the source files. - Scancode info: - Original SPDX id: COPYRIGHT_SERVICE_LABEL - Score : 100.00 - Match type : COPYRIGHT - Files with this license: - src/asm/jump_i386_ms_pe_clang_gas.S [2:5] - src/asm/jump_i386_ms_pe_gas.asm [2:5] - src/asm/jump_x86_64_ms_pe_clang_gas.S [2:5] - src/asm/jump_x86_64_ms_pe_gas.asm [2:5] - src/asm/make_i386_ms_pe_clang_gas.S [2:5] - src/asm/make_i386_ms_pe_gas.asm [2:5] - src/asm/make_x86_64_ms_pe_clang_gas.S [2:5] - src/asm/make_x86_64_ms_pe_gas.asm [2:5] - src/asm/ontop_i386_ms_pe_clang_gas.S [2:5] - src/asm/ontop_i386_ms_pe_gas.asm [2:5] - src/asm/ontop_x86_64_ms_pe_clang_gas.S [2:5] - src/asm/ontop_x86_64_ms_pe_gas.asm [2:5] diff --git a/contrib/restricted/boost/context/.yandex_meta/devtools.licenses.report b/contrib/restricted/boost/context/.yandex_meta/devtools.licenses.report index 2f7dd7780d..2259eba708 100644 --- a/contrib/restricted/boost/context/.yandex_meta/devtools.licenses.report +++ b/contrib/restricted/boost/context/.yandex_meta/devtools.licenses.report @@ -127,39 +127,12 @@ BELONGS ya.make include/boost/context/stack_traits.hpp [3:5] include/boost/context/windows/protected_fixedsize_stack.hpp [3:5] src/continuation.cpp [3:5] + src/fcontext.cpp [2:4] src/fiber.cpp [3:5] src/posix/stack_traits.cpp [3:5] src/untested.cpp [3:5] src/windows/stack_traits.cpp [3:5] -KEEP BSL-1.0 a56863ff22557bda50c7e49c3d85f911 -BELONGS ya.make - License text: - // Distributed under the Boost Software License, Version 1.0. - // (See accompanying file LICENSE_1_0.txt or copy at - // http://www.boost.org/LICENSE_1_0.txt) - Scancode info: - Original SPDX id: BSL-1.0 - Score : 100.00 - Match type : NOTICE - Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0 - Files with this license: - src/asm/tail_ontop_ppc32_sysv.cpp [3:5] - -KEEP BSL-1.0 b8bd11cab76fe04f0b68b48ae6bc9630 -BELONGS ya.make - License text: - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE - Scancode info: - Original SPDX id: BSL-1.0 - Score : 88.89 - Match type : NOTICE - Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0 - Files with this license: - src/asm/ontop_mips64_n64_elf_gas.S [3:5] - KEEP BSL-1.0 d398f407edc1c91c48f2e7613f7602d5 BELONGS ya.make License text: @@ -172,22 +145,10 @@ BELONGS ya.make Match type : NOTICE Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0 Files with this license: - src/asm/jump_i386_ms_pe_clang_gas.S [4:6] - src/asm/jump_i386_ms_pe_gas.asm [4:6] - src/asm/jump_x86_64_ms_pe_clang_gas.S [4:6] - src/asm/jump_x86_64_ms_pe_gas.asm [4:6] src/asm/jump_x86_64_sysv_elf_gas.S [3:5] src/asm/jump_x86_64_sysv_macho_gas.S [3:5] - src/asm/make_i386_ms_pe_clang_gas.S [4:6] - src/asm/make_i386_ms_pe_gas.asm [4:6] - src/asm/make_x86_64_ms_pe_clang_gas.S [4:6] - src/asm/make_x86_64_ms_pe_gas.asm [4:6] src/asm/make_x86_64_sysv_elf_gas.S [3:5] src/asm/make_x86_64_sysv_macho_gas.S [3:5] - src/asm/ontop_i386_ms_pe_clang_gas.S [4:6] - src/asm/ontop_i386_ms_pe_gas.asm [4:6] - src/asm/ontop_x86_64_ms_pe_clang_gas.S [4:6] - src/asm/ontop_x86_64_ms_pe_gas.asm [4:6] src/asm/ontop_x86_64_sysv_elf_gas.S [3:5] src/asm/ontop_x86_64_sysv_macho_gas.S [3:5] @@ -207,55 +168,17 @@ BELONGS ya.make src/asm/jump_arm64_aapcs_macho_gas.S [3:5] src/asm/jump_arm_aapcs_elf_gas.S [3:5] src/asm/jump_arm_aapcs_macho_gas.S [3:5] - src/asm/jump_combined_sysv_macho_gas.S [3:5] src/asm/jump_i386_sysv_elf_gas.S [3:5] src/asm/jump_i386_sysv_macho_gas.S [3:5] - src/asm/jump_i386_x86_64_sysv_macho_gas.S [3:5] - src/asm/jump_mips32_o32_elf_gas.S [3:5] - src/asm/jump_mips64_n64_elf_gas.S [3:5] - src/asm/jump_ppc32_ppc64_sysv_macho_gas.S [3:5] - src/asm/jump_ppc32_sysv_elf_gas.S [3:5] - src/asm/jump_ppc32_sysv_macho_gas.S [3:5] - src/asm/jump_ppc32_sysv_xcoff_gas.S [3:5] - src/asm/jump_ppc64_sysv_elf_gas.S [3:5] - src/asm/jump_ppc64_sysv_macho_gas.S [3:5] - src/asm/jump_ppc64_sysv_xcoff_gas.S [4:6] - src/asm/jump_riscv64_sysv_elf_gas.S [2:4] - src/asm/jump_sparc64_sysv_elf_gas.S [3:5] src/asm/make_arm64_aapcs_elf_gas.S [3:5] src/asm/make_arm64_aapcs_macho_gas.S [3:5] src/asm/make_arm_aapcs_elf_gas.S [3:5] src/asm/make_arm_aapcs_macho_gas.S [3:5] - src/asm/make_combined_sysv_macho_gas.S [3:5] src/asm/make_i386_sysv_elf_gas.S [3:5] src/asm/make_i386_sysv_macho_gas.S [3:5] - src/asm/make_i386_x86_64_sysv_macho_gas.S [3:5] - src/asm/make_mips32_o32_elf_gas.S [3:5] - src/asm/make_mips64_n64_elf_gas.S [3:5] - src/asm/make_ppc32_ppc64_sysv_macho_gas.S [3:5] - src/asm/make_ppc32_sysv_elf_gas.S [3:5] - src/asm/make_ppc32_sysv_macho_gas.S [3:5] - src/asm/make_ppc32_sysv_xcoff_gas.S [3:5] - src/asm/make_ppc64_sysv_elf_gas.S [3:5] - src/asm/make_ppc64_sysv_macho_gas.S [3:5] - src/asm/make_ppc64_sysv_xcoff_gas.S [3:5] - src/asm/make_riscv64_sysv_elf_gas.S [2:4] - src/asm/make_sparc64_sysv_elf_gas.S [3:5] src/asm/ontop_arm64_aapcs_elf_gas.S [3:5] src/asm/ontop_arm64_aapcs_macho_gas.S [3:5] src/asm/ontop_arm_aapcs_elf_gas.S [3:5] src/asm/ontop_arm_aapcs_macho_gas.S [3:5] - src/asm/ontop_combined_sysv_macho_gas.S [3:5] src/asm/ontop_i386_sysv_elf_gas.S [3:5] src/asm/ontop_i386_sysv_macho_gas.S [3:5] - src/asm/ontop_i386_x86_64_sysv_macho_gas.S [3:5] - src/asm/ontop_mips32_o32_elf_gas.S [3:5] - src/asm/ontop_ppc32_ppc64_sysv_macho_gas.S [3:5] - src/asm/ontop_ppc32_sysv_elf_gas.S [3:5] - src/asm/ontop_ppc32_sysv_macho_gas.S [3:5] - src/asm/ontop_ppc32_sysv_xcoff_gas.S [3:5] - src/asm/ontop_ppc64_sysv_elf_gas.S [3:5] - src/asm/ontop_ppc64_sysv_macho_gas.S [3:5] - src/asm/ontop_ppc64_sysv_xcoff_gas.S [3:5] - src/asm/ontop_riscv64_sysv_elf_gas.S [2:4] - src/asm/ontop_sparc64_sysv_elf_gas.S [3:5] diff --git a/contrib/restricted/boost/context/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/context/.yandex_meta/licenses.list.txt index 6b4897d488..dbd9323671 100644 --- a/contrib/restricted/boost/context/.yandex_meta/licenses.list.txt +++ b/contrib/restricted/boost/context/.yandex_meta/licenses.list.txt @@ -7,12 +7,6 @@ ====================BSL-1.0==================== Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE - - -====================BSL-1.0==================== - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -23,12 +17,6 @@ ====================BSL-1.0==================== -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - - -====================BSL-1.0==================== ; Distributed under the Boost Software License, Version 1.0. ; (See accompanying file LICENSE_1_0.txt or copy at ; http://www.boost.org/LICENSE_1_0.txt) @@ -47,31 +35,6 @@ ====================COPYRIGHT==================== - Copyright Jiaxun Yang 2018. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - - -====================COPYRIGHT==================== - Copyright Oliver Kowalke 2009. - Copyright Thomas Sailer 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - - -====================COPYRIGHT==================== - Copyright Sergue E. Leontiev 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - - -====================COPYRIGHT==================== - Copyright Claudio Jeker 2024 - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - - -====================COPYRIGHT==================== Copyright Edward Nevill + Oliver Kowalke 2015 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -93,3 +56,9 @@ // Copyright Oliver Kowalke 2017. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at + + +====================COPYRIGHT==================== +// SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliates <open-source-office@arm.com> +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at diff --git a/contrib/restricted/boost/context/fcontext_impl/ya.make b/contrib/restricted/boost/context/fcontext_impl/ya.make index 830a53b844..d0b2bdffa7 100644 --- a/contrib/restricted/boost/context/fcontext_impl/ya.make +++ b/contrib/restricted/boost/context/fcontext_impl/ya.make @@ -4,22 +4,12 @@ LIBRARY() WITHOUT_LICENSE_TEXTS() -VERSION(1.86.0) +VERSION(1.87.0) -ORIGINAL_SOURCE(https://github.com/boostorg/context/archive/boost-1.86.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/context/archive/boost-1.87.0.tar.gz) LICENSE(BSL-1.0) -SET(BOOST_CONTEXT_ABI sysv) - -SET(BOOST_CONTEXT_ARCHITECTURE x86_64) - -SET(BOOST_CONTEXT_ASM_EXT .S) - -SET(BOOST_CONTEXT_ASSEMBLER gas) - -SET(BOOST_CONTEXT_BINARY_FORMAT elf) - PEERDIR( contrib/restricted/boost/context/impl_common ) @@ -36,40 +26,49 @@ IF (OS_WINDOWS) ENDIF() ENDIF() -SRCDIR(contrib/restricted/boost/context/src) +SRCDIR(contrib/restricted/boost/context) -IF (OS_DARWIN OR OS_IOS) - SET(BOOST_CONTEXT_BINARY_FORMAT macho) -ELSEIF (OS_WINDOWS) - SET(BOOST_CONTEXT_ABI ms) - SET(BOOST_CONTEXT_ASM_EXT .masm) - SET(BOOST_CONTEXT_ASSEMBLER masm) - SET(BOOST_CONTEXT_BINARY_FORMAT pe) - IF (ARCH_ARM) - SET(BOOST_CONTEXT_ASSEMBLER armasm) - ELSEIF (ARCH_I386) - MASMFLAGS(/safeseh) - ENDIF() +IF (OS_WINDOWS AND ARCH_I386) + MASMFLAGS(/safeseh) ENDIF() -IF (ARCH_ARM) - SET(BOOST_CONTEXT_ABI aapcs) +IF (ARCH_I386) + SET(FCONTEXT_ARCH "i386") +ELSEIF (ARCH_X86_64) + SET(FCONTEXT_ARCH "x86_64") +ELSEIF (ARCH_ARM64) + SET(FCONTEXT_ARCH "arm64") +ELSEIF (ARCH_ARM) + SET(FCONTEXT_ARCH "arm") ENDIF() -IF (ARCH_ARM64) - SET(BOOST_CONTEXT_ARCHITECTURE arm64) -ELSEIF (ARCH_ARM7) - SET(BOOST_CONTEXT_ARCHITECTURE arm) -ELSEIF (ARCH_I386) - SET(BOOST_CONTEXT_ARCHITECTURE i386) +IF (OS_WINDOWS) + SET(FCONTEXT_ABI ms) +ELSEIF (ARCH_ARM64 OR ARCH_ARM) + SET(FCONTEXT_ABI aapcs) +ELSE(OS_LINUX OR OS_ANDROID) + SET(FCONTEXT_ABI sysv) ENDIF() -SET(BOOST_CONTEXT_ASM_SUFFIX ${BOOST_CONTEXT_ARCHITECTURE}_${BOOST_CONTEXT_ABI}_${BOOST_CONTEXT_BINARY_FORMAT}_${BOOST_CONTEXT_ASSEMBLER}${BOOST_CONTEXT_ASM_EXT}) +IF (OS_DARWIN OR OS_IOS) + SET(FCONTEXT_FMT macho) + SET(FCONTEXT_SUF gas.S) +ELSEIF (OS_LINUX OR OS_ANDROID) + SET(FCONTEXT_FMT elf) + SET(FCONTEXT_SUF gas.S) +ELSEIF (OS_WINDOWS AND ARCH_ARM64) + SET(FCONTEXT_FMT pe) + SET(FCONTEXT_SUF asmasm.masm) +ELSEIF (OS_WINDOWS) + SET(FCONTEXT_FMT pe) + SET(FCONTEXT_SUF masm.masm) +ENDIF() SRCS( - asm/jump_${BOOST_CONTEXT_ASM_SUFFIX} - asm/make_${BOOST_CONTEXT_ASM_SUFFIX} - asm/ontop_${BOOST_CONTEXT_ASM_SUFFIX} + src/asm/make_${FCONTEXT_ARCH}_${FCONTEXT_ABI}_${FCONTEXT_FMT}_${FCONTEXT_SUF} + src/asm/jump_${FCONTEXT_ARCH}_${FCONTEXT_ABI}_${FCONTEXT_FMT}_${FCONTEXT_SUF} + src/asm/ontop_${FCONTEXT_ARCH}_${FCONTEXT_ABI}_${FCONTEXT_FMT}_${FCONTEXT_SUF} + src/fcontext.cpp ) END() diff --git a/contrib/restricted/boost/context/impl_common/ya.make b/contrib/restricted/boost/context/impl_common/ya.make index 61f7516118..3a9a118a9c 100644 --- a/contrib/restricted/boost/context/impl_common/ya.make +++ b/contrib/restricted/boost/context/impl_common/ya.make @@ -4,9 +4,9 @@ LIBRARY() WITHOUT_LICENSE_TEXTS() -VERSION(1.86.0) +VERSION(1.87.0) -ORIGINAL_SOURCE(https://github.com/boostorg/context/archive/boost-1.86.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/context/archive/boost-1.87.0.tar.gz) LICENSE(BSL-1.0) diff --git a/contrib/restricted/boost/context/include/boost/context/detail/fcontext.hpp b/contrib/restricted/boost/context/include/boost/context/detail/fcontext.hpp index 00cb24d941..52be6083af 100644 --- a/contrib/restricted/boost/context/include/boost/context/detail/fcontext.hpp +++ b/contrib/restricted/boost/context/include/boost/context/detail/fcontext.hpp @@ -27,14 +27,11 @@ struct transfer_t { void * data; }; -extern "C" BOOST_CONTEXT_DECL -transfer_t BOOST_CONTEXT_CALLDECL jump_fcontext( fcontext_t const to, void * vp); -extern "C" BOOST_CONTEXT_DECL -fcontext_t BOOST_CONTEXT_CALLDECL make_fcontext( void * sp, std::size_t size, void (* fn)( transfer_t) ); +BOOST_CONTEXT_DECL transfer_t jump_fcontext( fcontext_t const to, void * vp); +BOOST_CONTEXT_DECL fcontext_t make_fcontext( void * sp, std::size_t size, void (* fn)( transfer_t) ); // based on an idea of Giovanni Derreta -extern "C" BOOST_CONTEXT_DECL -transfer_t BOOST_CONTEXT_CALLDECL ontop_fcontext( fcontext_t const to, void * vp, transfer_t (* fn)( transfer_t) ); +BOOST_CONTEXT_DECL transfer_t ontop_fcontext( fcontext_t const to, void * vp, transfer_t (* fn)( transfer_t) ); }}} diff --git a/contrib/restricted/boost/context/src/asm/jump_arm64_aapcs_elf_gas.S b/contrib/restricted/boost/context/src/asm/jump_arm64_aapcs_elf_gas.S index cefd1830d7..7c1f075355 100644 --- a/contrib/restricted/boost/context/src/asm/jump_arm64_aapcs_elf_gas.S +++ b/contrib/restricted/boost/context/src/asm/jump_arm64_aapcs_elf_gas.S @@ -55,6 +55,7 @@ .text .align 2 .global jump_fcontext +.hidden jump_fcontext .type jump_fcontext, %function jump_fcontext: # prepare stack for GP + FPU diff --git a/contrib/restricted/boost/context/src/asm/jump_arm64_aapcs_macho_gas.S b/contrib/restricted/boost/context/src/asm/jump_arm64_aapcs_macho_gas.S index 31738f7453..12cc021586 100644 --- a/contrib/restricted/boost/context/src/asm/jump_arm64_aapcs_macho_gas.S +++ b/contrib/restricted/boost/context/src/asm/jump_arm64_aapcs_macho_gas.S @@ -52,6 +52,7 @@ *******************************************************/ .text +.private_extern _jump_fcontext .globl _jump_fcontext .balign 16 _jump_fcontext: diff --git a/contrib/restricted/boost/context/src/asm/jump_arm_aapcs_elf_gas.S b/contrib/restricted/boost/context/src/asm/jump_arm_aapcs_elf_gas.S index 86efe9d821..9934c0897c 100644 --- a/contrib/restricted/boost/context/src/asm/jump_arm_aapcs_elf_gas.S +++ b/contrib/restricted/boost/context/src/asm/jump_arm_aapcs_elf_gas.S @@ -41,6 +41,7 @@ .file "jump_arm_aapcs_elf_gas.S" .text .globl jump_fcontext +.hidden jump_fcontext .align 2 .type jump_fcontext,%function .syntax unified diff --git a/contrib/restricted/boost/context/src/asm/jump_arm_aapcs_macho_gas.S b/contrib/restricted/boost/context/src/asm/jump_arm_aapcs_macho_gas.S index 077c36409e..44e7f2a422 100644 --- a/contrib/restricted/boost/context/src/asm/jump_arm_aapcs_macho_gas.S +++ b/contrib/restricted/boost/context/src/asm/jump_arm_aapcs_macho_gas.S @@ -39,6 +39,7 @@ *******************************************************/ .text +.private_extern _jump_fcontext .globl _jump_fcontext .align 2 _jump_fcontext: diff --git a/contrib/restricted/boost/context/src/asm/jump_combined_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/jump_combined_sysv_macho_gas.S deleted file mode 100644 index 34a32f785f..0000000000 --- a/contrib/restricted/boost/context/src/asm/jump_combined_sysv_macho_gas.S +++ /dev/null @@ -1,24 +0,0 @@ -/* - Copyright Sergue E. Leontiev 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -// Stub file for universal binary - -#if defined(__i386__) - #include "jump_i386_sysv_macho_gas.S" -#elif defined(__x86_64__) - #include "jump_x86_64_sysv_macho_gas.S" -#elif defined(__ppc__) - #include "jump_ppc32_sysv_macho_gas.S" -#elif defined(__ppc64__) - #include "jump_ppc64_sysv_macho_gas.S" -#elif defined(__arm__) - #include "jump_arm_aapcs_macho_gas.S" -#elif defined(__arm64__) - #include "jump_arm64_aapcs_macho_gas.S" -#else - #error "No arch's" -#endif diff --git a/contrib/restricted/boost/context/src/asm/jump_i386_ms_pe_clang_gas.S b/contrib/restricted/boost/context/src/asm/jump_i386_ms_pe_clang_gas.S deleted file mode 100644 index cad2c1361f..0000000000 --- a/contrib/restricted/boost/context/src/asm/jump_i386_ms_pe_clang_gas.S +++ /dev/null @@ -1,123 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Copyright Thomas Sailer 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/************************************************************************************* -* --------------------------------------------------------------------------------- * -* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * -* --------------------------------------------------------------------------------- * -* | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch | * -* --------------------------------------------------------------------------------- * -* | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI | * -* --------------------------------------------------------------------------------- * -* --------------------------------------------------------------------------------- * -* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * -* --------------------------------------------------------------------------------- * -* | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch | * -* --------------------------------------------------------------------------------- * -* | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR| * -* --------------------------------------------------------------------------------- * -**************************************************************************************/ - -.file "jump_i386_ms_pe_clang_gas.S" -.text -.p2align 4,,15 - -/* mark as using no unregistered SEH handlers */ -.globl @feat.00 -.def @feat.00; .scl 3; .type 0; .endef -.set @feat.00, 1 - -.globl _jump_fcontext -.def _jump_fcontext; .scl 2; .type 32; .endef -_jump_fcontext: - /* prepare stack */ - leal -0x2c(%esp), %esp - -#if !defined(BOOST_USE_TSX) - /* save MMX control- and status-word */ - stmxcsr (%esp) - /* save x87 control-word */ - fnstcw 0x4(%esp) -#endif - - /* load NT_TIB */ - movl %fs:(0x18), %edx - /* load fiber local storage */ - movl 0x10(%edx), %eax - movl %eax, 0x8(%esp) - /* load current dealloction stack */ - movl 0xe0c(%edx), %eax - movl %eax, 0xc(%esp) - /* load current stack limit */ - movl 0x8(%edx), %eax - movl %eax, 0x10(%esp) - /* load current stack base */ - movl 0x4(%edx), %eax - movl %eax, 0x14(%esp) - /* load current SEH exception list */ - movl (%edx), %eax - movl %eax, 0x18(%esp) - - movl %edi, 0x1c(%esp) /* save EDI */ - movl %esi, 0x20(%esp) /* save ESI */ - movl %ebx, 0x24(%esp) /* save EBX */ - movl %ebp, 0x28(%esp) /* save EBP */ - - /* store ESP (pointing to context-data) in EAX */ - movl %esp, %eax - - /* firstarg of jump_fcontext() == fcontext to jump to */ - movl 0x30(%esp), %ecx - - /* restore ESP (pointing to context-data) from ECX */ - movl %ecx, %esp - -#if !defined(BOOST_USE_TSX) - /* restore MMX control- and status-word */ - ldmxcsr (%esp) - /* restore x87 control-word */ - fldcw 0x4(%esp) -#endif - - /* restore NT_TIB into EDX */ - movl %fs:(0x18), %edx - /* restore fiber local storage */ - movl 0x8(%esp), %ecx - movl %ecx, 0x10(%edx) - /* restore current deallocation stack */ - movl 0xc(%esp), %ecx - movl %ecx, 0xe0c(%edx) - /* restore current stack limit */ - movl 0x10(%esp), %ecx - movl %ecx, 0x8(%edx) - /* restore current stack base */ - movl 0x14(%esp), %ecx - movl %ecx, 0x4(%edx) - /* restore current SEH exception list */ - movl 0x18(%esp), %ecx - movl %ecx, (%edx) - - movl 0x2c(%esp), %ecx /* restore EIP */ - - movl 0x1c(%esp), %edi /* restore EDI */ - movl 0x20(%esp), %esi /* restore ESI */ - movl 0x24(%esp), %ebx /* restore EBX */ - movl 0x28(%esp), %ebp /* restore EBP */ - - /* prepare stack */ - leal 0x30(%esp), %esp - - /* return transfer_t */ - /* FCTX == EAX, DATA == EDX */ - movl 0x34(%eax), %edx - - /* jump to context */ - jmp *%ecx - -.section .drectve -.ascii " -export:\"_jump_fcontext\"" diff --git a/contrib/restricted/boost/context/src/asm/jump_i386_ms_pe_gas.asm b/contrib/restricted/boost/context/src/asm/jump_i386_ms_pe_gas.asm deleted file mode 100644 index 6eb45326ce..0000000000 --- a/contrib/restricted/boost/context/src/asm/jump_i386_ms_pe_gas.asm +++ /dev/null @@ -1,123 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Copyright Thomas Sailer 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/************************************************************************************* -* --------------------------------------------------------------------------------- * -* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * -* --------------------------------------------------------------------------------- * -* | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch | * -* --------------------------------------------------------------------------------- * -* | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI | * -* --------------------------------------------------------------------------------- * -* --------------------------------------------------------------------------------- * -* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * -* --------------------------------------------------------------------------------- * -* | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch | * -* --------------------------------------------------------------------------------- * -* | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR| * -* --------------------------------------------------------------------------------- * -**************************************************************************************/ - -.file "jump_i386_ms_pe_gas.asm" -.text -.p2align 4,,15 - -/* mark as using no unregistered SEH handlers */ -.globl @feat.00 -.def @feat.00; .scl 3; .type 0; .endef -.set @feat.00, 1 - -.globl _jump_fcontext -.def _jump_fcontext; .scl 2; .type 32; .endef -_jump_fcontext: - /* prepare stack */ - leal -0x2c(%esp), %esp - -#if !defined(BOOST_USE_TSX) - /* save MMX control- and status-word */ - stmxcsr (%esp) - /* save x87 control-word */ - fnstcw 0x4(%esp) -#endif - - /* load NT_TIB */ - movl %fs:(0x18), %edx - /* load fiber local storage */ - movl 0x10(%edx), %eax - movl %eax, 0x8(%esp) - /* load current dealloction stack */ - movl 0xe0c(%edx), %eax - movl %eax, 0xc(%esp) - /* load current stack limit */ - movl 0x8(%edx), %eax - movl %eax, 0x10(%esp) - /* load current stack base */ - movl 0x4(%edx), %eax - movl %eax, 0x14(%esp) - /* load current SEH exception list */ - movl (%edx), %eax - movl %eax, 0x18(%esp) - - movl %edi, 0x1c(%esp) /* save EDI */ - movl %esi, 0x20(%esp) /* save ESI */ - movl %ebx, 0x24(%esp) /* save EBX */ - movl %ebp, 0x28(%esp) /* save EBP */ - - /* store ESP (pointing to context-data) in EAX */ - movl %esp, %eax - - /* firstarg of jump_fcontext() == fcontext to jump to */ - movl 0x30(%esp), %ecx - - /* restore ESP (pointing to context-data) from ECX */ - movl %ecx, %esp - -#if !defined(BOOST_USE_TSX) - /* restore MMX control- and status-word */ - ldmxcsr (%esp) - /* restore x87 control-word */ - fldcw 0x4(%esp) -#endif - - /* restore NT_TIB into EDX */ - movl %fs:(0x18), %edx - /* restore fiber local storage */ - movl 0x8(%esp), %ecx - movl %ecx, 0x10(%edx) - /* restore current deallocation stack */ - movl 0xc(%esp), %ecx - movl %ecx, 0xe0c(%edx) - /* restore current stack limit */ - movl 0x10(%esp), %ecx - movl %ecx, 0x8(%edx) - /* restore current stack base */ - movl 0x14(%esp), %ecx - movl %ecx, 0x4(%edx) - /* restore current SEH exception list */ - movl 0x18(%esp), %ecx - movl %ecx, (%edx) - - movl 0x2c(%esp), %ecx /* restore EIP */ - - movl 0x1c(%esp), %edi /* restore EDI */ - movl 0x20(%esp), %esi /* restore ESI */ - movl 0x24(%esp), %ebx /* restore EBX */ - movl 0x28(%esp), %ebp /* restore EBP */ - - /* prepare stack */ - leal 0x30(%esp), %esp - - /* return transfer_t */ - /* FCTX == EAX, DATA == EDX */ - movl 0x34(%eax), %edx - - /* jump to context */ - jmp *%ecx - -.section .drectve -.ascii " -export:\"jump_fcontext\"" diff --git a/contrib/restricted/boost/context/src/asm/jump_i386_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/jump_i386_sysv_elf_gas.S index ed83717ce2..d00ac4fffd 100644 --- a/contrib/restricted/boost/context/src/asm/jump_i386_sysv_elf_gas.S +++ b/contrib/restricted/boost/context/src/asm/jump_i386_sysv_elf_gas.S @@ -31,6 +31,7 @@ .file "jump_i386_sysv_elf_gas.S" .text .globl jump_fcontext +.hidden jump_fcontext .align 2 .type jump_fcontext,@function jump_fcontext: diff --git a/contrib/restricted/boost/context/src/asm/jump_i386_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/jump_i386_sysv_macho_gas.S index 8ab7c6f29c..12aa702be9 100644 --- a/contrib/restricted/boost/context/src/asm/jump_i386_sysv_macho_gas.S +++ b/contrib/restricted/boost/context/src/asm/jump_i386_sysv_macho_gas.S @@ -25,6 +25,7 @@ ****************************************************************************************/ .text +.private_extern _jump_fcontext .globl _jump_fcontext .align 2 _jump_fcontext: diff --git a/contrib/restricted/boost/context/src/asm/jump_i386_x86_64_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/jump_i386_x86_64_sysv_macho_gas.S deleted file mode 100644 index 959ddac16f..0000000000 --- a/contrib/restricted/boost/context/src/asm/jump_i386_x86_64_sysv_macho_gas.S +++ /dev/null @@ -1,16 +0,0 @@ -/* - Copyright Sergue E. Leontiev 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -// Stub file for universal binary - -#if defined(__i386__) - #include "jump_i386_sysv_macho_gas.S" -#elif defined(__x86_64__) - #include "jump_x86_64_sysv_macho_gas.S" -#else - #error "No arch's" -#endif diff --git a/contrib/restricted/boost/context/src/asm/jump_loongarch64_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/jump_loongarch64_sysv_elf_gas.S deleted file mode 100644 index 74c081e07f..0000000000 --- a/contrib/restricted/boost/context/src/asm/jump_loongarch64_sysv_elf_gas.S +++ /dev/null @@ -1,121 +0,0 @@ -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 8 | 16 | 24 | * - * ------------------------------------------------- * - * | FS0 | FS1 | FS2 | FS3 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 40 | 48 | 56 | * - * ------------------------------------------------- * - * | FS4 | FS5 | FS6 | FS7 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 72 | 80 | 88 | * - * ------------------------------------------------- * - * | S0 | S1 | S2 | S3 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | S4 | S5 | S6 | S7 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | S8 | FP | RA | PC | * - * ------------------------------------------------- * - * * - * *****************************************************/ - -.file "jump_loongarch64_sysv_elf_gas.S" -.text -.globl jump_fcontext -.align 2 -.type jump_fcontext,@function -jump_fcontext: - # reserve space on stack - addi.d $sp, $sp, -160 - - # save fs0 - fs7 - fst.d $fs0, $sp, 0 - fst.d $fs1, $sp, 8 - fst.d $fs2, $sp, 16 - fst.d $fs3, $sp, 24 - fst.d $fs4, $sp, 32 - fst.d $fs5, $sp, 40 - fst.d $fs6, $sp, 48 - fst.d $fs7, $sp, 56 - - # save s0 - s8, fp, ra - st.d $s0, $sp, 64 - st.d $s1, $sp, 72 - st.d $s2, $sp, 80 - st.d $s3, $sp, 88 - st.d $s4, $sp, 96 - st.d $s5, $sp, 104 - st.d $s6, $sp, 112 - st.d $s7, $sp, 120 - st.d $s8, $sp, 128 - st.d $fp, $sp, 136 - st.d $ra, $sp, 144 - - # save RA as PC - st.d $ra, $sp, 152 - - # store SP (pointing to context-data) in A2 - move $a2, $sp - - # restore SP (pointing to context-data) from A0 - move $sp, $a0 - - # load fs0 - fs7 - fld.d $fs0, $sp, 0 - fld.d $fs1, $sp, 8 - fld.d $fs2, $sp, 16 - fld.d $fs3, $sp, 24 - fld.d $fs4, $sp, 32 - fld.d $fs5, $sp, 40 - fld.d $fs6, $sp, 48 - fld.d $fs7, $sp, 56 - - #load s0 - s7 - ld.d $s0, $sp, 64 - ld.d $s1, $sp, 72 - ld.d $s2, $sp, 80 - ld.d $s3, $sp, 88 - ld.d $s4, $sp, 96 - ld.d $s5, $sp, 104 - ld.d $s6, $sp, 112 - ld.d $s7, $sp, 120 - ld.d $s8, $sp, 128 - ld.d $fp, $sp, 136 - ld.d $ra, $sp, 144 - - # return transfer_t from jump - # pass transfer_t as first arg in context function - # a0 == FCTX, a1 == DATA - move $a0, $a2 - - # load PC - ld.d $a2, $sp, 152 - - # restore stack - addi.d $sp, $sp, 160 - - # jump to context - jr $a2 -.size jump_fcontext, .-jump_fcontext - -/* Mark that we don't need executable stack. */ -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/jump_mips32_o32_elf_gas.S b/contrib/restricted/boost/context/src/asm/jump_mips32_o32_elf_gas.S deleted file mode 100644 index f2b8034d8c..0000000000 --- a/contrib/restricted/boost/context/src/asm/jump_mips32_o32_elf_gas.S +++ /dev/null @@ -1,119 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * | F20 | F22 | F24 | F26 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | F28 | F30 | S0 | S1 | S2 | S3 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | S4 | S5 | S6 | S7 | FP |hiddn| RA | PC | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | ABI ARGS | GP | FCTX| DATA| | * - * ------------------------------------------------- * - * * - * *****************************************************/ - -.file "jump_mips32_o32_elf_gas.S" -.text -.globl jump_fcontext -.align 2 -.type jump_fcontext,@function -.ent jump_fcontext -jump_fcontext: - # reserve space on stack - addiu $sp, $sp, -96 - - sw $s0, 48($sp) # save S0 - sw $s1, 52($sp) # save S1 - sw $s2, 56($sp) # save S2 - sw $s3, 60($sp) # save S3 - sw $s4, 64($sp) # save S4 - sw $s5, 68($sp) # save S5 - sw $s6, 72($sp) # save S6 - sw $s7, 76($sp) # save S7 - sw $fp, 80($sp) # save FP - sw $a0, 84($sp) # save hidden, address of returned transfer_t - sw $ra, 88($sp) # save RA - sw $ra, 92($sp) # save RA as PC - -#if defined(__mips_hard_float) - s.d $f20, ($sp) # save F20 - s.d $f22, 8($sp) # save F22 - s.d $f24, 16($sp) # save F24 - s.d $f26, 24($sp) # save F26 - s.d $f28, 32($sp) # save F28 - s.d $f30, 40($sp) # save F30 -#endif - - # store SP (pointing to context-data) in A0 - move $a0, $sp - - # restore SP (pointing to context-data) from A1 - move $sp, $a1 - -#if defined(__mips_hard_float) - l.d $f20, ($sp) # restore F20 - l.d $f22, 8($sp) # restore F22 - l.d $f24, 16($sp) # restore F24 - l.d $f26, 24($sp) # restore F26 - l.d $f28, 32($sp) # restore F28 - l.d $f30, 40($sp) # restore F30 -#endif - - lw $s0, 48($sp) # restore S0 - lw $s1, 52($sp) # restore S1 - lw $s2, 56($sp) # restore S2 - lw $s3, 60($sp) # restore S3 - lw $s4, 64($sp) # restore S4 - lw $s5, 68($sp) # restore S5 - lw $s6, 72($sp) # restore S6 - lw $s7, 76($sp) # restore S7 - lw $fp, 80($sp) # restore FP - lw $v0, 84($sp) # restore hidden, address of returned transfer_t - lw $ra, 88($sp) # restore RA - - # load PC - lw $t9, 92($sp) - - # adjust stack - addiu $sp, $sp, 96 - - # return transfer_t from jump - sw $a0, ($v0) # fctx of transfer_t - sw $a2, 4($v0) # data of transfer_t - # pass transfer_t as first arg in context function - # A0 == fctx, A1 == data - move $a1, $a2 - - # jump to context - jr $t9 -.end jump_fcontext -.size jump_fcontext, .-jump_fcontext - -/* Mark that we don't need executable stack. */ -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/jump_mips64_n64_elf_gas.S b/contrib/restricted/boost/context/src/asm/jump_mips64_n64_elf_gas.S deleted file mode 100644 index e338912bb6..0000000000 --- a/contrib/restricted/boost/context/src/asm/jump_mips64_n64_elf_gas.S +++ /dev/null @@ -1,124 +0,0 @@ -/* - Copyright Jiaxun Yang 2018. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 8 | 16 | 24 | * - * ------------------------------------------------- * - * | F24 | F25 | F26 | F27 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 40 | 48 | 56 | * - * ------------------------------------------------- * - * | F28 | F29 | F30 | F31 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 72 | 80 | 88 | * - * ------------------------------------------------- * - * | S0 | S1 | S2 | S3 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | S4 | S5 | S6 | S7 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | FP | GP | RA | PC | * - * ------------------------------------------------- * - * * - * *****************************************************/ - -.file "jump_mips64_n64_elf_gas.S" -.text -.globl jump_fcontext -.align 3 -.type jump_fcontext,@function -.ent jump_fcontext -jump_fcontext: - # reserve space on stack - daddiu $sp, $sp, -160 - - sd $s0, 64($sp) # save S0 - sd $s1, 72($sp) # save S1 - sd $s2, 80($sp) # save S2 - sd $s3, 88($sp) # save S3 - sd $s4, 96($sp) # save S4 - sd $s5, 104($sp) # save S5 - sd $s6, 112($sp) # save S6 - sd $s7, 120($sp) # save S7 - sd $fp, 128($sp) # save FP - sd $ra, 144($sp) # save RA - sd $ra, 152($sp) # save RA as PC - -#if defined(__mips_hard_float) - s.d $f24, 0($sp) # save F24 - s.d $f25, 8($sp) # save F25 - s.d $f26, 16($sp) # save F26 - s.d $f27, 24($sp) # save F27 - s.d $f28, 32($sp) # save F28 - s.d $f29, 40($sp) # save F29 - s.d $f30, 48($sp) # save F30 - s.d $f31, 56($sp) # save F31 -#endif - - # store SP (pointing to old context-data) in v0 as return - move $v0, $sp - - # get SP (pointing to new context-data) from a0 param - move $sp, $a0 - -#if defined(__mips_hard_float) - l.d $f24, 0($sp) # restore F24 - l.d $f25, 8($sp) # restore F25 - l.d $f26, 16($sp) # restore F26 - l.d $f27, 24($sp) # restore F27 - l.d $f28, 32($sp) # restore F28 - l.d $f29, 40($sp) # restore F29 - l.d $f30, 48($sp) # restore F30 - l.d $f31, 56($sp) # restore F31 -#endif - - ld $s0, 64($sp) # restore S0 - ld $s1, 72($sp) # restore S1 - ld $s2, 80($sp) # restore S2 - ld $s3, 88($sp) # restore S3 - ld $s4, 96($sp) # restore S4 - ld $s5, 104($sp) # restore S5 - ld $s6, 112($sp) # restore S6 - ld $s7, 120($sp) # restore S7 - ld $fp, 128($sp) # restore FP - ld $ra, 144($sp) # restore RAa - - # load PC - ld $t9, 152($sp) - - # adjust stack - daddiu $sp, $sp, 160 - - move $a0, $v0 # move old sp from v0 to a0 as param - move $v1, $a1 # move *data from a1 to v1 as return - - # jump to context - jr $t9 -.end jump_fcontext -.size jump_fcontext, .-jump_fcontext - -/* Mark that we don't need executable stack. */ -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/jump_ppc32_ppc64_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/jump_ppc32_ppc64_sysv_macho_gas.S deleted file mode 100644 index f175e31233..0000000000 --- a/contrib/restricted/boost/context/src/asm/jump_ppc32_ppc64_sysv_macho_gas.S +++ /dev/null @@ -1,16 +0,0 @@ -/* - Copyright Sergue E. Leontiev 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -// Stub file for universal binary - -#if defined(__ppc__) - #include "jump_ppc32_sysv_macho_gas.S" -#elif defined(__ppc64__) - #include "jump_ppc64_sysv_macho_gas.S" -#else - #error "No arch's" -#endif diff --git a/contrib/restricted/boost/context/src/asm/jump_ppc32_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/jump_ppc32_sysv_elf_gas.S deleted file mode 100644 index 48e09c935e..0000000000 --- a/contrib/restricted/boost/context/src/asm/jump_ppc32_sysv_elf_gas.S +++ /dev/null @@ -1,201 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * |bchai|hiddn| fpscr | PC | CR | R14 | R15 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | R16 | R17 | R18 | R19 | R20 | R21 | R22 | R23 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | R24 | R25 | R26 | R27 | R28 | R29 | R30 | R31 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | F14 | F15 | F16 | F17 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | F18 | F19 | F20 | F21 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | * - * ------------------------------------------------- * - * | F22 | F23 | F24 | F25 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * - * ------------------------------------------------- * - * | F26 | F27 | F28 | F29 | * - * ------------------------------------------------- * - * ------------------------|------------ * - * | 224 | 228 | 232 | 236 | 240 | 244 | * - * ------------------------|------------ * - * | F30 | F31 |bchai| LR | * - * ------------------------|------------ * - * * - *******************************************************/ - -.file "jump_ppc32_sysv_elf_gas.S" -.text -.globl jump_fcontext -.align 2 -.type jump_fcontext,@function -jump_fcontext: - # Linux: jump_fcontext( hidden transfer_t * R3, R4, R5) - # Other: transfer_t R3:R4 = jump_fcontext( R3, R4) - - mflr %r0 # return address from LR - mffs %f0 # FPSCR - mfcr %r8 # condition register - - stwu %r1, -240(%r1) # allocate stack space, R1 % 16 == 0 - stw %r0, 244(%r1) # save LR in caller's frame - -#ifdef __linux__ - stw %r3, 4(%r1) # hidden pointer -#endif - - stfd %f0, 8(%r1) # FPSCR - stw %r0, 16(%r1) # LR as PC - stw %r8, 20(%r1) # CR - - # Save registers R14 to R31. - # Don't change R2, the thread-local storage pointer. - # Don't change R13, the small data pointer. - stw %r14, 24(%r1) - stw %r15, 28(%r1) - stw %r16, 32(%r1) - stw %r17, 36(%r1) - stw %r18, 40(%r1) - stw %r19, 44(%r1) - stw %r20, 48(%r1) - stw %r21, 52(%r1) - stw %r22, 56(%r1) - stw %r23, 60(%r1) - stw %r24, 64(%r1) - stw %r25, 68(%r1) - stw %r26, 72(%r1) - stw %r27, 76(%r1) - stw %r28, 80(%r1) - stw %r29, 84(%r1) - stw %r30, 88(%r1) - stw %r31, 92(%r1) - - # Save registers F14 to F31 in slots with 8-byte alignment. - # 4-byte alignment may stall the pipeline of some processors. - # Less than 4 may cause alignment traps. - stfd %f14, 96(%r1) - stfd %f15, 104(%r1) - stfd %f16, 112(%r1) - stfd %f17, 120(%r1) - stfd %f18, 128(%r1) - stfd %f19, 136(%r1) - stfd %f20, 144(%r1) - stfd %f21, 152(%r1) - stfd %f22, 160(%r1) - stfd %f23, 168(%r1) - stfd %f24, 176(%r1) - stfd %f25, 184(%r1) - stfd %f26, 192(%r1) - stfd %f27, 200(%r1) - stfd %f28, 208(%r1) - stfd %f29, 216(%r1) - stfd %f30, 224(%r1) - stfd %f31, 232(%r1) - - # store RSP (pointing to context-data) in R7/R6 - # restore RSP (pointing to context-data) from R4/R3 -#ifdef __linux__ - mr %r7, %r1 - mr %r1, %r4 - lwz %r3, 4(%r1) # hidden pointer -#else - mr %r6, %r1 - mr %r1, %r3 -#endif - - lfd %f0, 8(%r1) # FPSCR - lwz %r0, 16(%r1) # PC - lwz %r8, 20(%r1) # CR - - mtfsf 0xff, %f0 # restore FPSCR - mtctr %r0 # load CTR with PC - mtcr %r8 # restore CR - - # restore R14 to R31 - lwz %r14, 24(%r1) - lwz %r15, 28(%r1) - lwz %r16, 32(%r1) - lwz %r17, 36(%r1) - lwz %r18, 40(%r1) - lwz %r19, 44(%r1) - lwz %r20, 48(%r1) - lwz %r21, 52(%r1) - lwz %r22, 56(%r1) - lwz %r23, 60(%r1) - lwz %r24, 64(%r1) - lwz %r25, 68(%r1) - lwz %r26, 72(%r1) - lwz %r27, 76(%r1) - lwz %r28, 80(%r1) - lwz %r29, 84(%r1) - lwz %r30, 88(%r1) - lwz %r31, 92(%r1) - - # restore F14 to F31 - lfd %f14, 96(%r1) - lfd %f15, 104(%r1) - lfd %f16, 112(%r1) - lfd %f17, 120(%r1) - lfd %f18, 128(%r1) - lfd %f19, 136(%r1) - lfd %f20, 144(%r1) - lfd %f21, 152(%r1) - lfd %f22, 160(%r1) - lfd %f23, 168(%r1) - lfd %f24, 176(%r1) - lfd %f25, 184(%r1) - lfd %f26, 192(%r1) - lfd %f27, 200(%r1) - lfd %f28, 208(%r1) - lfd %f29, 216(%r1) - lfd %f30, 224(%r1) - lfd %f31, 232(%r1) - - # restore LR from caller's frame - lwz %r0, 244(%r1) - mtlr %r0 - - # adjust stack - addi %r1, %r1, 240 - - # return transfer_t -#ifdef __linux__ - stw %r7, 0(%r3) - stw %r5, 4(%r3) -#else - mr %r3, %r6 - # %r4, %r4 -#endif - - # jump to context - bctr -.size jump_fcontext, .-jump_fcontext - -/* Mark that we don't need executable stack. */ -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/jump_ppc32_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/jump_ppc32_sysv_macho_gas.S deleted file mode 100644 index fef90c295f..0000000000 --- a/contrib/restricted/boost/context/src/asm/jump_ppc32_sysv_macho_gas.S +++ /dev/null @@ -1,201 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/****************************************************** - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * | F14 | F15 | F16 | F17 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | F18 | F19 | F20 | F21 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | F22 | F23 | F24 | F25 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | F26 | F27 | F28 | F29 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | F30 | F31 | fpscr | R13 | R14 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | * - * ------------------------------------------------- * - * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | * - * ------------------------------------------------- * - * | R15 | R16 | R17 | R18 | R19 | R20 | R21 | R22 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | * - * ------------------------------------------------- * - * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * - * ------------------------------------------------- * - * | R23 | R24 | R25 | R26 | R27 | R28 | R29 | R30 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | * - * ------------------------------------------------- * - * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | * - * ------------------------------------------------- * - * | R31 |hiddn| CR | LR | PC |bchai|linkr| FCTX| * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 64 | | * - * ------------------------------------------------- * - * | 256 | | * - * ------------------------------------------------- * - * | DATA| | * - * ------------------------------------------------- * - * * - *******************************************************/ - -.text -.globl _jump_fcontext -.align 2 -_jump_fcontext: - ; reserve space on stack - subi r1, r1, 244 - - stfd f14, 0(r1) ; save F14 - stfd f15, 8(r1) ; save F15 - stfd f16, 16(r1) ; save F16 - stfd f17, 24(r1) ; save F17 - stfd f18, 32(r1) ; save F18 - stfd f19, 40(r1) ; save F19 - stfd f20, 48(r1) ; save F20 - stfd f21, 56(r1) ; save F21 - stfd f22, 64(r1) ; save F22 - stfd f23, 72(r1) ; save F23 - stfd f24, 80(r1) ; save F24 - stfd f25, 88(r1) ; save F25 - stfd f26, 96(r1) ; save F26 - stfd f27, 104(r1) ; save F27 - stfd f28, 112(r1) ; save F28 - stfd f29, 120(r1) ; save F29 - stfd f30, 128(r1) ; save F30 - stfd f31, 136(r1) ; save F31 - mffs f0 ; load FPSCR - stfd f0, 144(r1) ; save FPSCR - - stw r13, 152(r1) ; save R13 - stw r14, 156(r1) ; save R14 - stw r15, 160(r1) ; save R15 - stw r16, 164(r1) ; save R16 - stw r17, 168(r1) ; save R17 - stw r18, 172(r1) ; save R18 - stw r19, 176(r1) ; save R19 - stw r20, 180(r1) ; save R20 - stw r21, 184(r1) ; save R21 - stw r22, 188(r1) ; save R22 - stw r23, 192(r1) ; save R23 - stw r24, 196(r1) ; save R24 - stw r25, 200(r1) ; save R25 - stw r26, 204(r1) ; save R26 - stw r27, 208(r1) ; save R27 - stw r28, 212(r1) ; save R28 - stw r29, 216(r1) ; save R29 - stw r30, 220(r1) ; save R30 - stw r31, 224(r1) ; save R31 - stw r3, 228(r1) ; save hidden - - ; save CR - mfcr r0 - stw r0, 232(r1) - ; save LR - mflr r0 - stw r0, 236(r1) - ; save LR as PC - stw r0, 240(r1) - - ; store RSP (pointing to context-data) in R6 - mr r6, r1 - - ; restore RSP (pointing to context-data) from R4 - mr r1, r4 - - lfd f14, 0(r1) ; restore F14 - lfd f15, 8(r1) ; restore F15 - lfd f16, 16(r1) ; restore F16 - lfd f17, 24(r1) ; restore F17 - lfd f18, 32(r1) ; restore F18 - lfd f19, 40(r1) ; restore F19 - lfd f20, 48(r1) ; restore F20 - lfd f21, 56(r1) ; restore F21 - lfd f22, 64(r1) ; restore F22 - lfd f23, 72(r1) ; restore F23 - lfd f24, 80(r1) ; restore F24 - lfd f25, 88(r1) ; restore F25 - lfd f26, 96(r1) ; restore F26 - lfd f27, 104(r1) ; restore F27 - lfd f28, 112(r1) ; restore F28 - lfd f29, 120(r1) ; restore F29 - lfd f30, 128(r1) ; restore F30 - lfd f31, 136(r1) ; restore F31 - lfd f0, 144(r1) ; load FPSCR - mtfsf 0xff, f0 ; restore FPSCR - - lwz r13, 152(r1) ; restore R13 - lwz r14, 156(r1) ; restore R14 - lwz r15, 160(r1) ; restore R15 - lwz r16, 164(r1) ; restore R16 - lwz r17, 168(r1) ; restore R17 - lwz r18, 172(r1) ; restore R18 - lwz r19, 176(r1) ; restore R19 - lwz r20, 180(r1) ; restore R20 - lwz r21, 184(r1) ; restore R21 - lwz r22, 188(r1) ; restore R22 - lwz r23, 192(r1) ; restore R23 - lwz r24, 196(r1) ; restore R24 - lwz r25, 200(r1) ; restore R25 - lwz r26, 204(r1) ; restore R26 - lwz r27, 208(r1) ; restore R27 - lwz r28, 212(r1) ; restore R28 - lwz r29, 216(r1) ; restore R29 - lwz r30, 220(r1) ; restore R30 - lwz r31, 224(r1) ; restore R31 - lwz r3, 228(r1) ; restore hidden - - ; restore CR - lwz r0, 232(r1) - mtcr r0 - ; restore LR - lwz r0, 236(r1) - mtlr r0 - ; load PC - lwz r0, 240(r1) - ; restore CTR - mtctr r0 - - ; adjust stack - addi r1, r1, 244 - - ; return transfer_t - stw r6, 0(r3) - stw r5, 4(r3) - - ; jump to context - bctr diff --git a/contrib/restricted/boost/context/src/asm/jump_ppc32_sysv_xcoff_gas.S b/contrib/restricted/boost/context/src/asm/jump_ppc32_sysv_xcoff_gas.S deleted file mode 100644 index 1854613d76..0000000000 --- a/contrib/restricted/boost/context/src/asm/jump_ppc32_sysv_xcoff_gas.S +++ /dev/null @@ -1,216 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * |bchai| CR | LR |compl| link| TOC | R14 | R15 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | R16 | R17 | R18 | R19 | R20 | R21 | R22 | R23 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | R24 | R25 | R26 | R27 | R28 | R29 | R30 | R31 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | F14 | F15 | F16 | F17 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | F18 | F19 | F20 | F21 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | * - * ------------------------------------------------- * - * | F22 | F23 | F24 | F25 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * - * ------------------------------------------------- * - * | F26 | F27 | F28 | F29 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | * - * ------------------------------------------------- * - * | F30 | F31 | PC |hiddn| fpscr | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 256 | 260 | 264 | 268 | 272 | 276 | 280 | 284 | * - * ------------------------------------------------- * - * |bchai|savCR|savLR|compl| link|svTOC| FCTX| DATA| * - * ------------------------------------------------- * - * * - *******************************************************/ - - .file "jump_ppc32_sysv_xcoff_gas.S" - .toc - .csect .text[PR], 5 - .globl jump_fcontext[DS] - .globl .jump_fcontext - .csect jump_fcontext[DS] -jump_fcontext: - .long .jump_fcontext[PR], TOC[tc0], 0 - .csect .text[PR], 5 -.jump_fcontext: - # reserve space on stack - subi 1, 1, 256 - - # save CR - mfcr 0 - stw 0, 4(1) - # save LR - mflr 0 - stw 0, 8(1) - # save LR as PC - stw 0, 240(1) - # save TOC - stw 2, 20(1) - - # Save registers R14 to R31. - stw 14, 24(1) - stw 15, 28(1) - stw 16, 32(1) - stw 17, 36(1) - stw 18, 40(1) - stw 19, 44(1) - stw 20, 48(1) - stw 21, 52(1) - stw 22, 56(1) - stw 23, 60(1) - stw 24, 64(1) - stw 25, 68(1) - stw 26, 72(1) - stw 27, 76(1) - stw 28, 80(1) - stw 29, 84(1) - stw 30, 88(1) - stw 31, 92(1) - - # Save registers F14 to F31 in slots with 8-byte alignment. - # 4-byte alignment may stall the pipeline of some processors. - # Less than 4 may cause alignment traps. - stfd 14, 96(1) - stfd 15, 104(1) - stfd 16, 112(1) - stfd 17, 120(1) - stfd 18, 128(1) - stfd 19, 136(1) - stfd 20, 144(1) - stfd 21, 152(1) - stfd 22, 160(1) - stfd 23, 168(1) - stfd 24, 176(1) - stfd 25, 184(1) - stfd 26, 192(1) - stfd 27, 200(1) - stfd 28, 208(1) - stfd 29, 216(1) - stfd 30, 224(1) - stfd 31, 232(1) - - # hidden pointer - stw 3, 244(1) - - mffs 0 # load FPSCR - stfd 0, 248(1) # save FPSCR - - - # store RSP (pointing to context-data) in R6 - mr 6, 1 - - # restore RSP (pointing to context-data) from R4 - mr 1, 4 - - # restore CR - lwz 0, 4(1) - mtcr 0 - # restore LR - lwz 0, 8(1) - mtlr 0 - # load PC - lwz 0, 240(1) - mtctr 0 - - # restore TOC - lwz 2, 20(1) - - # restore R14 to R31 - lwz 14, 24(1) - lwz 15, 28(1) - lwz 16, 32(1) - lwz 17, 36(1) - lwz 18, 40(1) - lwz 19, 44(1) - lwz 20, 48(1) - lwz 21, 52(1) - lwz 22, 56(1) - lwz 23, 60(1) - lwz 24, 64(1) - lwz 25, 68(1) - lwz 26, 72(1) - lwz 27, 76(1) - lwz 28, 80(1) - lwz 29, 84(1) - lwz 30, 88(1) - lwz 31, 92(1) - - # restore F14 to F31 - lfd 14, 96(1) - lfd 15, 104(1) - lfd 16, 112(1) - lfd 17, 120(1) - lfd 18, 128(1) - lfd 19, 136(1) - lfd 20, 144(1) - lfd 21, 152(1) - lfd 22, 160(1) - lfd 23, 168(1) - lfd 24, 176(1) - lfd 25, 184(1) - lfd 26, 192(1) - lfd 27, 200(1) - lfd 28, 208(1) - lfd 29, 216(1) - lfd 30, 224(1) - lfd 31, 232(1) - - # hidden pointer - lwz 3, 244(1) - - lfd 0, 248(1) # load FPSCR - mtfsf 0xff, 0 # restore FPSCR - - # adjust stack - addi 1, 1, 256 - - # zero in r3 indicates first jump to context-function - cmpdi 3, 0 - beq use_entry_arg - - # return transfer_t - stw 6, 0(3) - stw 5, 4(3) - - # jump to context - bctr - -use_entry_arg: - # copy transfer_t into transfer_fn arg registers - mr 3, 6 - mr 4, 5 - - # jump to context - bctr diff --git a/contrib/restricted/boost/context/src/asm/jump_ppc64_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/jump_ppc64_sysv_elf_gas.S deleted file mode 100644 index 28907db32b..0000000000 --- a/contrib/restricted/boost/context/src/asm/jump_ppc64_sysv_elf_gas.S +++ /dev/null @@ -1,221 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * | TOC | R14 | R15 | R16 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | R17 | R18 | R19 | R20 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | R21 | R22 | R23 | R24 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | R25 | R26 | R27 | R28 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | R29 | R30 | R31 | hidden | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | * - * ------------------------------------------------- * - * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | * - * ------------------------------------------------- * - * | CR | LR | PC | back-chain| * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | * - * ------------------------------------------------- * - * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * - * ------------------------------------------------- * - * | cr saved | lr saved | compiler | linker | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | * - * ------------------------------------------------- * - * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | * - * ------------------------------------------------- * - * | TOC saved | FCTX | DATA | | * - * ------------------------------------------------- * - * * - *******************************************************/ - -.file "jump_ppc64_sysv_elf_gas.S" -.globl jump_fcontext -#if _CALL_ELF == 2 - .text - .align 2 -jump_fcontext: - addis %r2, %r12, .TOC.-jump_fcontext@ha - addi %r2, %r2, .TOC.-jump_fcontext@l - .localentry jump_fcontext, . - jump_fcontext -#else - .section ".opd","aw" - .align 3 -jump_fcontext: -# ifdef _CALL_LINUX - .quad .L.jump_fcontext,.TOC.@tocbase,0 - .type jump_fcontext,@function - .text - .align 2 -.L.jump_fcontext: -# else - .hidden .jump_fcontext - .globl .jump_fcontext - .quad .jump_fcontext,.TOC.@tocbase,0 - .size jump_fcontext,24 - .type .jump_fcontext,@function - .text - .align 2 -.jump_fcontext: -# endif -#endif - # reserve space on stack - subi %r1, %r1, 184 - -#if _CALL_ELF != 2 - std %r2, 0(%r1) # save TOC -#endif - std %r14, 8(%r1) # save R14 - std %r15, 16(%r1) # save R15 - std %r16, 24(%r1) # save R16 - std %r17, 32(%r1) # save R17 - std %r18, 40(%r1) # save R18 - std %r19, 48(%r1) # save R19 - std %r20, 56(%r1) # save R20 - std %r21, 64(%r1) # save R21 - std %r22, 72(%r1) # save R22 - std %r23, 80(%r1) # save R23 - std %r24, 88(%r1) # save R24 - std %r25, 96(%r1) # save R25 - std %r26, 104(%r1) # save R26 - std %r27, 112(%r1) # save R27 - std %r28, 120(%r1) # save R28 - std %r29, 128(%r1) # save R29 - std %r30, 136(%r1) # save R30 - std %r31, 144(%r1) # save R31 -#if _CALL_ELF != 2 - std %r3, 152(%r1) # save hidden -#endif - - # save CR - mfcr %r0 - std %r0, 160(%r1) - # save LR - mflr %r0 - std %r0, 168(%r1) - # save LR as PC - std %r0, 176(%r1) - - # store RSP (pointing to context-data) in R6 - mr %r6, %r1 - -#if _CALL_ELF == 2 - # restore RSP (pointing to context-data) from R3 - mr %r1, %r3 -#else - # restore RSP (pointing to context-data) from R4 - mr %r1, %r4 - - ld %r2, 0(%r1) # restore TOC -#endif - ld %r14, 8(%r1) # restore R14 - ld %r15, 16(%r1) # restore R15 - ld %r16, 24(%r1) # restore R16 - ld %r17, 32(%r1) # restore R17 - ld %r18, 40(%r1) # restore R18 - ld %r19, 48(%r1) # restore R19 - ld %r20, 56(%r1) # restore R20 - ld %r21, 64(%r1) # restore R21 - ld %r22, 72(%r1) # restore R22 - ld %r23, 80(%r1) # restore R23 - ld %r24, 88(%r1) # restore R24 - ld %r25, 96(%r1) # restore R25 - ld %r26, 104(%r1) # restore R26 - ld %r27, 112(%r1) # restore R27 - ld %r28, 120(%r1) # restore R28 - ld %r29, 128(%r1) # restore R29 - ld %r30, 136(%r1) # restore R30 - ld %r31, 144(%r1) # restore R31 -#if _CALL_ELF != 2 - ld %r3, 152(%r1) # restore hidden -#endif - - # restore CR - ld %r0, 160(%r1) - mtcr %r0 - # restore LR - ld %r0, 168(%r1) - mtlr %r0 - - # load PC - ld %r12, 176(%r1) - # restore CTR - mtctr %r12 - - # adjust stack - addi %r1, %r1, 184 - -#if _CALL_ELF == 2 - # copy transfer_t into transfer_fn arg registers - mr %r3, %r6 - # arg pointer already in %r4 - - # jump to context - bctr - .size jump_fcontext, .-jump_fcontext -#else - # zero in r3 indicates first jump to context-function - cmpdi %r3, 0 - beq use_entry_arg - - # return transfer_t - std %r6, 0(%r3) - std %r5, 8(%r3) - - # jump to context - bctr - -use_entry_arg: - # copy transfer_t into transfer_fn arg registers - mr %r3, %r6 - mr %r4, %r5 - - # jump to context - bctr -# ifdef _CALL_LINUX - .size .jump_fcontext, .-.L.jump_fcontext -# else - .size .jump_fcontext, .-.jump_fcontext -# endif -#endif - - -/* Mark that we don't need executable stack. */ -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/jump_ppc64_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/jump_ppc64_sysv_macho_gas.S deleted file mode 100644 index dcc6c645db..0000000000 --- a/contrib/restricted/boost/context/src/asm/jump_ppc64_sysv_macho_gas.S +++ /dev/null @@ -1,164 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * | R13 | R14 | R15 | R16 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | R17 | R18 | R19 | R20 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | R21 | R22 | R23 | R24 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | R25 | R26 | R27 | R28 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | R29 | R30 | R31 | hidden | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | * - * ------------------------------------------------- * - * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | * - * ------------------------------------------------- * - * | CR | LR | PC | back-chain| * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | * - * ------------------------------------------------- * - * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * - * ------------------------------------------------- * - * | cr saved | lr saved | compiler | linker | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | * - * ------------------------------------------------- * - * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | * - * ------------------------------------------------- * - * | FCTX | DATA | | | * - * ------------------------------------------------- * - * * - *******************************************************/ - -.text -.align 2 -.globl _jump_fcontext - -_jump_fcontext: - ; reserve space on stack - subi r1, r1, 184 - - std r14, 8(r1) ; save R14 - std r15, 16(r1) ; save R15 - std r16, 24(r1) ; save R16 - std r17, 32(r1) ; save R17 - std r18, 40(r1) ; save R18 - std r19, 48(r1) ; save R19 - std r20, 56(r1) ; save R20 - std r21, 64(r1) ; save R21 - std r22, 72(r1) ; save R22 - std r23, 80(r1) ; save R23 - std r24, 88(r1) ; save R24 - std r25, 96(r1) ; save R25 - std r26, 104(r1) ; save R26 - std r27, 112(r1) ; save R27 - std r28, 120(r1) ; save R28 - std r29, 128(r1) ; save R29 - std r30, 136(r1) ; save R30 - std r31, 144(r1) ; save R31 - std r3, 152(r1) ; save hidden - - ; save CR - mfcr r0 - std r0, 160(r1) - ; save LR - mflr r0 - std r0, 168(r1) - ; save LR as PC - std r0, 176(r1) - - ; store RSP (pointing to context-data) in R6 - mr r6, r1 - - ; restore RSP (pointing to context-data) from R4 - mr r1, r4 - - ld r14, 8(r1) ; restore R14 - ld r15, 16(r1) ; restore R15 - ld r16, 24(r1) ; restore R16 - ld r17, 32(r1) ; restore R17 - ld r18, 40(r1) ; restore R18 - ld r19, 48(r1) ; restore R19 - ld r20, 56(r1) ; restore R20 - ld r21, 64(r1) ; restore R21 - ld r22, 72(r1) ; restore R22 - ld r23, 80(r1) ; restore R23 - ld r24, 88(r1) ; restore R24 - ld r25, 96(r1) ; restore R25 - ld r26, 104(r1) ; restore R26 - ld r27, 112(r1) ; restore R27 - ld r28, 120(r1) ; restore R28 - ld r29, 128(r1) ; restore R29 - ld r30, 136(r1) ; restore R30 - ld r31, 144(r1) ; restore R31 - ld r3, 152(r1) ; restore hidden - - ; restore CR - ld r0, 160(r1) - mtcr r0 - ; restore LR - ld r0, 168(r1) - mtlr r0 - - ; load PC - ld r12, 176(r1) - ; restore CTR - mtctr r12 - - ; adjust stack - addi r1, r1, 184 - - ; zero in r3 indicates first jump to context-function - cmpdi r3, 0 - beq use_entry_arg - - ; return transfer_t - std r6, 0(r3) - std r5, 8(r3) - - ; jump to context - bctr - -use_entry_arg: - ; copy transfer_t into transfer_fn arg registers - mr r3, r6 - mr r4, r5 - - ; jump to context - bctr diff --git a/contrib/restricted/boost/context/src/asm/jump_ppc64_sysv_xcoff_gas.S b/contrib/restricted/boost/context/src/asm/jump_ppc64_sysv_xcoff_gas.S deleted file mode 100644 index f835d2a76a..0000000000 --- a/contrib/restricted/boost/context/src/asm/jump_ppc64_sysv_xcoff_gas.S +++ /dev/null @@ -1,173 +0,0 @@ - -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * | TOC | R14 | R15 | R16 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | R17 | R18 | R19 | R20 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | R21 | R22 | R23 | R24 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | R25 | R26 | R27 | R28 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | R29 | R30 | R31 | hidden | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | * - * ------------------------------------------------- * - * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | * - * ------------------------------------------------- * - * | CR | LR | PC | back-chain| * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | * - * ------------------------------------------------- * - * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * - * ------------------------------------------------- * - * | cr saved | lr saved | compiler | linker | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | * - * ------------------------------------------------- * - * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | * - * ------------------------------------------------- * - * | TOC saved | FCTX | DATA | | * - * ------------------------------------------------- * - * * - *******************************************************/ - - .file "jump_ppc64_sysv_xcoff_gas.S" - .toc - .csect .text[PR], 5 - .align 2 - .globl jump_fcontext[DS] - .globl .jump_fcontext - .csect jump_fcontext[DS], 3 -jump_fcontext: - .llong .jump_fcontext[PR], TOC[tc0], 0 - .csect .text[PR], 5 -.jump_fcontext: - # reserve space on stack - subi 1, 1, 184 - - std 2, 0(1) # save TOC - std 14, 8(1) # save R14 - std 15, 16(1) # save R15 - std 16, 24(1) # save R16 - std 17, 32(1) # save R17 - std 18, 40(1) # save R18 - std 19, 48(1) # save R19 - std 20, 56(1) # save R20 - std 21, 64(1) # save R21 - std 22, 72(1) # save R22 - std 23, 80(1) # save R23 - std 24, 88(1) # save R24 - std 25, 96(1) # save R25 - std 26, 104(1) # save R26 - std 27, 112(1) # save R27 - std 28, 120(1) # save R28 - std 29, 128(1) # save R29 - std 30, 136(1) # save R30 - std 31, 144(1) # save R31 - std 3, 152(1) # save hidden - - # save CR - mfcr 0 - std 0, 160(1) - # save LR - mflr 0 - std 0, 168(1) - # save LR as PC - std 0, 176(1) - - # store RSP (pointing to context-data) in R6 - mr 6, 1 - - # restore RSP (pointing to context-data) from R4 - mr 1, 4 - - ld 2, 0(1) # restore TOC - ld 14, 8(1) # restore R14 - ld 15, 16(1) # restore R15 - ld 16, 24(1) # restore R16 - ld 17, 32(1) # restore R17 - ld 18, 40(1) # restore R18 - ld 19, 48(1) # restore R19 - ld 20, 56(1) # restore R20 - ld 21, 64(1) # restore R21 - ld 22, 72(1) # restore R22 - ld 23, 80(1) # restore R23 - ld 24, 88(1) # restore R24 - ld 25, 96(1) # restore R25 - ld 26, 104(1) # restore R26 - ld 27, 112(1) # restore R27 - ld 28, 120(1) # restore R28 - ld 29, 128(1) # restore R29 - ld 30, 136(1) # restore R30 - ld 31, 144(1) # restore R31 - ld 3, 152(1) # restore hidden - - # restore CR - ld 0, 160(1) - mtcr 0 - # restore LR - ld 0, 168(1) - mtlr 0 - - # load PC - ld 0, 176(1) - # restore CTR - mtctr 0 - - # adjust stack - addi 1, 1, 184 - - # zero in r3 indicates first jump to context-function - cmpdi 3, 0 - beq use_entry_arg - - # return transfer_t - std 6, 0(3) - std 5, 8(3) - - # jump to context - bctr - -use_entry_arg: - # copy transfer_t into transfer_fn arg registers - mr 3, 6 - mr 4, 5 - - # jump to context - bctr diff --git a/contrib/restricted/boost/context/src/asm/jump_riscv64_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/jump_riscv64_sysv_elf_gas.S deleted file mode 100644 index 5417e5d5e3..0000000000 --- a/contrib/restricted/boost/context/src/asm/jump_riscv64_sysv_elf_gas.S +++ /dev/null @@ -1,150 +0,0 @@ -/* - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| * - * ------------------------------------------------- * - * | fs0 | fs1 | fs2 | fs3 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| * - * ------------------------------------------------- * - * | fs4 | fs5 | fs6 | fs7 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| * - * ------------------------------------------------- * - * | fs8 | fs9 | fs10 | fs11 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| * - * ------------------------------------------------- * - * | s0 | s1 | s2 | s3 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c| * - * ------------------------------------------------- * - * | s4 | s5 | s6 | s7 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | * - * ------------------------------------------------- * - * | 0xa0| 0xa4| 0xa8| 0xac| 0xb0| 0xb4| 0xb8| 0xbc| * - * ------------------------------------------------- * - * | s8 | s9 | s10 | s11 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 48 | 49 | 50 | 51 | | | | | * - * ------------------------------------------------- * - * | 0xc0| 0xc4| 0xc8| 0xcc| | | | | * - * ------------------------------------------------- * - * | ra | pc | | | * - * ------------------------------------------------- * - * * - *******************************************************/ - -.file "jump_riscv64_sysv_elf_gas.S" -.text -.align 1 -.global jump_fcontext -.type jump_fcontext, %function -jump_fcontext: - # prepare stack for GP + FPU - addi sp, sp, -0xd0 - - # save fs0 - fs11 - fsd fs0, 0x00(sp) - fsd fs1, 0x08(sp) - fsd fs2, 0x10(sp) - fsd fs3, 0x18(sp) - fsd fs4, 0x20(sp) - fsd fs5, 0x28(sp) - fsd fs6, 0x30(sp) - fsd fs7, 0x38(sp) - fsd fs8, 0x40(sp) - fsd fs9, 0x48(sp) - fsd fs10, 0x50(sp) - fsd fs11, 0x58(sp) - - # save s0-s11, ra - sd s0, 0x60(sp) - sd s1, 0x68(sp) - sd s2, 0x70(sp) - sd s3, 0x78(sp) - sd s4, 0x80(sp) - sd s5, 0x88(sp) - sd s6, 0x90(sp) - sd s7, 0x98(sp) - sd s8, 0xa0(sp) - sd s9, 0xa8(sp) - sd s10, 0xb0(sp) - sd s11, 0xb8(sp) - sd ra, 0xc0(sp) - - # save RA as PC - sd ra, 0xc8(sp) - - # store SP (pointing to context-data) in A2 - mv a2, sp - - # restore SP (pointing to context-data) from A0 - mv sp, a0 - - # load fs0 - fs11 - fld fs0, 0x00(sp) - fld fs1, 0x08(sp) - fld fs2, 0x10(sp) - fld fs3, 0x18(sp) - fld fs4, 0x20(sp) - fld fs5, 0x28(sp) - fld fs6, 0x30(sp) - fld fs7, 0x38(sp) - fld fs8, 0x40(sp) - fld fs9, 0x48(sp) - fld fs10, 0x50(sp) - fld fs11, 0x58(sp) - - # load s0-s11,ra - ld s0, 0x60(sp) - ld s1, 0x68(sp) - ld s2, 0x70(sp) - ld s3, 0x78(sp) - ld s4, 0x80(sp) - ld s5, 0x88(sp) - ld s6, 0x90(sp) - ld s7, 0x98(sp) - ld s8, 0xa0(sp) - ld s9, 0xa8(sp) - ld s10, 0xb0(sp) - ld s11, 0xb8(sp) - ld ra, 0xc0(sp) - - # return transfer_t from jump - # pass transfer_t as first arg in context function - # a0 == FCTX, a1 == DATA - mv a0, a2 - - # load pc - ld a2, 0xc8(sp) - - # restore stack from GP + FPU - addi sp, sp, 0xd0 - - jr a2 -.size jump_fcontext,.-jump_fcontext -# Mark that we don't need executable stack. -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/jump_s390x_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/jump_s390x_sysv_elf_gas.S deleted file mode 100644 index fa71467756..0000000000 --- a/contrib/restricted/boost/context/src/asm/jump_s390x_sysv_elf_gas.S +++ /dev/null @@ -1,160 +0,0 @@ -/******************************************************* - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 8 | 16 | 24 | * - * ------------------------------------------------- * - * | t.fctx | t.data | r2 | r6 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 40 | 48 | 56 | * - * ------------------------------------------------- * - * | r7 | r8 | r9 | r10 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 72 | 80 | 88 | * - * ------------------------------------------------- * - * | r11 | r12 | r13 | r14 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 104 | 112 | 120 | * - * ------------------------------------------------- * - * | f8 | f9 | f10 | f11 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 136 | 144 | 152 | * - * ------------------------------------------------- * - * | f12 | f13 | f14 | f15 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | * - * ------------------------------------------------- * - * | 160 | 168 | 176 | | * - * ------------------------------------------------- * - * | fpc | pc | | | * - * ------------------------------------------------- * - *******************************************************/ - -.text -.align 8 -.global jump_fcontext -.type jump_fcontext, @function - -#define ARG_OFFSET 0 -#define GR_OFFSET 16 -#define R14_OFFSET 88 -#define FP_OFFSET 96 -#define FPC_OFFSET 160 -#define PC_OFFSET 168 -#define CONTEXT_SIZE 176 - -#define REG_SAVE_AREA_SIZE 160 - -/* - -typedef void* fcontext_t; - -struct transfer_t { - fcontext_t fctx; - void * data; -}; - -transfer_t jump_fcontext( fcontext_t const to, - void * data); - -Incoming args -r2 - Hidden argument to the location where the return transfer_t needs to be returned -r3 - Context we want to switch to -r4 - Data pointer - -*/ - -jump_fcontext: - .machine "z10" - /* Reserve stack space to store the current context. */ - aghi %r15,-CONTEXT_SIZE - - /* Save the argument register holding the location of the return value. */ - stg %r2,GR_OFFSET(%r15) - - /* Save the call-saved general purpose registers. */ - stmg %r6,%r14,GR_OFFSET+8(%r15) - - /* Save call-saved floating point registers. */ - std %f8,FP_OFFSET(%r15) - std %f9,FP_OFFSET+8(%r15) - std %f10,FP_OFFSET+16(%r15) - std %f11,FP_OFFSET+24(%r15) - std %f12,FP_OFFSET+32(%r15) - std %f13,FP_OFFSET+40(%r15) - std %f14,FP_OFFSET+48(%r15) - std %f15,FP_OFFSET+56(%r15) - - /* Save the return address as current pc. */ - stg %r14,PC_OFFSET(%r15) - - /* Save the floating point control register. */ - stfpc FPC_OFFSET(%r15) - - /* Backup the stack pointer pointing to the old context-data into r1. */ - lgr %r1,%r15 - - /* Load the new context pointer as stack pointer. */ - lgr %r15,%r3 - - /* Restore the call-saved GPRs from the new context. */ - lmg %r6,%r14,GR_OFFSET+8(%r15) - - /* Restore call-saved floating point registers. */ - ld %f8,FP_OFFSET(%r15) - ld %f9,FP_OFFSET+8(%r15) - ld %f10,FP_OFFSET+16(%r15) - ld %f11,FP_OFFSET+24(%r15) - ld %f12,FP_OFFSET+32(%r15) - ld %f13,FP_OFFSET+40(%r15) - ld %f14,FP_OFFSET+48(%r15) - ld %f15,FP_OFFSET+56(%r15) - - /* Load the floating point control register. */ - lfpc FPC_OFFSET(%r15) - - /* Restore PC - the location where we will jump to at the end. */ - lg %r5,PC_OFFSET(%r15) - - ltg %r2,GR_OFFSET(%r15) - jnz use_return_slot - - /* We're restoring a context created by make_fcontext. - This is going to be the argument of the entry point - of the fiber. We're placing it on top of the ABI - defined register save area of the fiber's own stack. */ - la %r2,REG_SAVE_AREA_SIZE(%r15) - - /* REG_SAVE_AREA_SIZE + sizeof(transfer_t) */ - aghi %r15,-(REG_SAVE_AREA_SIZE+16) - -use_return_slot: - /* Save the two fields in transfer_t. When calling a - make_fcontext function this becomes the function argument of - the target function, otherwise it will be the return value of - jump_fcontext. */ - stg %r1,0(%r2) - stg %r4,8(%r2) - - /* Free the restored context. */ - aghi %r15,CONTEXT_SIZE - - /* Jump to the PC loaded from the new context. */ - br %r5 - - -.size jump_fcontext,.-jump_fcontext -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/jump_sparc64_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/jump_sparc64_sysv_elf_gas.S deleted file mode 100644 index 61101fb1f6..0000000000 --- a/contrib/restricted/boost/context/src/asm/jump_sparc64_sysv_elf_gas.S +++ /dev/null @@ -1,51 +0,0 @@ -/* - Copyright Claudio Jeker 2024 - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/* - * typedef void* fcontext_t; - * - * struct transfer_t { - * fcontext_t fctx; - * void * data; - * }; - * - * transfer_t jump_fcontext(fcontext_t const to, void *vp); - */ -#define CC64FSZ 176 -#define BIAS 2047 -#define SP 128 -#define I7 136 - -.file "jump_sparc64_sysv_elf_gas.S" -.text -.align 4 -.global jump_fcontext -.type jump_fcontext, %function -jump_fcontext: - # prepare stack - save %sp, -CC64FSZ, %sp - - # store framepointer and return address in slots reserved - # for arguments - stx %fp, [%sp + BIAS + SP] - stx %i7, [%sp + BIAS + I7] - mov %sp, %o0 - # force flush register windows to stack and with that save context - flushw - # get SP (pointing to new context-data) from %i0 param - mov %i0, %sp - # load framepointer and return address from context - ldx [%sp + BIAS + SP], %fp - ldx [%sp + BIAS + I7], %i7 - - ret - restore %o0, %g0, %o0 - # restore old %sp (pointing to old context-data) in %o0 - # *data stored in %o1 was not modified -.size jump_fcontext,.-jump_fcontext -# Mark that we don't need executable stack. -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/jump_x86_64_ms_pe_clang_gas.S b/contrib/restricted/boost/context/src/asm/jump_x86_64_ms_pe_clang_gas.S deleted file mode 100644 index 1f633f7562..0000000000 --- a/contrib/restricted/boost/context/src/asm/jump_x86_64_ms_pe_clang_gas.S +++ /dev/null @@ -1,209 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Copyright Thomas Sailer 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/************************************************************************************* -* ---------------------------------------------------------------------------------- * -* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * -* ---------------------------------------------------------------------------------- * -* | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * -* ---------------------------------------------------------------------------------- * -* | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * -* ---------------------------------------------------------------------------------- * -* | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * -* ---------------------------------------------------------------------------------- * -* | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | * -* ---------------------------------------------------------------------------------- * -* | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | * -* ---------------------------------------------------------------------------------- * -* | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc | * -* ---------------------------------------------------------------------------------- * -* | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | * -* ---------------------------------------------------------------------------------- * -* | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc | * -* ---------------------------------------------------------------------------------- * -* | limit | base | R12 | R13 | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | * -* ---------------------------------------------------------------------------------- * -* | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc | * -* ---------------------------------------------------------------------------------- * -* | R14 | R15 | RDI | RSI | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | * -* ---------------------------------------------------------------------------------- * -* | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c | * -* ---------------------------------------------------------------------------------- * -* | RBX | RBP | hidden | RIP | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | * -* ---------------------------------------------------------------------------------- * -* | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c | * -* ---------------------------------------------------------------------------------- * -* | parameter area | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | * -* ---------------------------------------------------------------------------------- * -* | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c | * -* ---------------------------------------------------------------------------------- * -* | FCTX | DATA | | * -* ---------------------------------------------------------------------------------- * -**************************************************************************************/ - -.file "jump_x86_64_ms_pe_clang_gas.S" -.text -.p2align 4,,15 -.globl jump_fcontext -.def jump_fcontext; .scl 2; .type 32; .endef -.seh_proc jump_fcontext -jump_fcontext: -.seh_endprologue - - leaq -0x118(%rsp), %rsp /* prepare stack */ - -#if !defined(BOOST_USE_TSX) - /* save XMM storage */ - movaps %xmm6, 0x0(%rsp) - movaps %xmm7, 0x10(%rsp) - movaps %xmm8, 0x20(%rsp) - movaps %xmm9, 0x30(%rsp) - movaps %xmm10, 0x40(%rsp) - movaps %xmm11, 0x50(%rsp) - movaps %xmm12, 0x60(%rsp) - movaps %xmm13, 0x70(%rsp) - movaps %xmm14, 0x80(%rsp) - movaps %xmm15, 0x90(%rsp) - stmxcsr 0xa0(%rsp) /* save MMX control- and status-word */ - fnstcw 0xa4(%rsp) /* save x87 control-word */ -#endif - - /* load NT_TIB */ - movq %gs:(0x30), %r10 - /* save fiber local storage */ - movq 0x20(%r10), %rax - movq %rax, 0xb0(%rsp) - /* save current deallocation stack */ - movq 0x1478(%r10), %rax - movq %rax, 0xb8(%rsp) - /* save current stack limit */ - movq 0x10(%r10), %rax - movq %rax, 0xc0(%rsp) - /* save current stack base */ - movq 0x08(%r10), %rax - movq %rax, 0xc8(%rsp) - - movq %r12, 0xd0(%rsp) /* save R12 */ - movq %r13, 0xd8(%rsp) /* save R13 */ - movq %r14, 0xe0(%rsp) /* save R14 */ - movq %r15, 0xe8(%rsp) /* save R15 */ - movq %rdi, 0xf0(%rsp) /* save RDI */ - movq %rsi, 0xf8(%rsp) /* save RSI */ - movq %rbx, 0x100(%rsp) /* save RBX */ - movq %rbp, 0x108(%rsp) /* save RBP */ - - movq %rcx, 0x110(%rsp) /* save hidden address of transport_t */ - - /* preserve RSP (pointing to context-data) in R9 */ - movq %rsp, %r9 - - /* restore RSP (pointing to context-data) from RDX */ - movq %rdx, %rsp - -#if !defined(BOOST_USE_TSX) - /* restore XMM storage */ - movaps 0x0(%rsp), %xmm6 - movaps 0x10(%rsp), %xmm7 - movaps 0x20(%rsp), %xmm8 - movaps 0x30(%rsp), %xmm9 - movaps 0x40(%rsp), %xmm10 - movaps 0x50(%rsp), %xmm11 - movaps 0x60(%rsp), %xmm12 - movaps 0x70(%rsp), %xmm13 - movaps 0x80(%rsp), %xmm14 - movaps 0x90(%rsp), %xmm15 - ldmxcsr 0xa0(%rsp) /* restore MMX control- and status-word */ - fldcw 0xa4(%rsp) /* restore x87 control-word */ -#endif - - /* load NT_TIB */ - movq %gs:(0x30), %r10 - /* restore fiber local storage */ - movq 0xb0(%rsp), %rax - movq %rax, 0x20(%r10) - /* restore current deallocation stack */ - movq 0xb8(%rsp), %rax - movq %rax, 0x1478(%r10) - /* restore current stack limit */ - movq 0xc0(%rsp), %rax - movq %rax, 0x10(%r10) - /* restore current stack base */ - movq 0xc8(%rsp), %rax - movq %rax, 0x08(%r10) - - movq 0xd0(%rsp), %r12 /* restore R12 */ - movq 0xd8(%rsp), %r13 /* restore R13 */ - movq 0xe0(%rsp), %r14 /* restore R14 */ - movq 0xe8(%rsp), %r15 /* restore R15 */ - movq 0xf0(%rsp), %rdi /* restore RDI */ - movq 0xf8(%rsp), %rsi /* restore RSI */ - movq 0x100(%rsp), %rbx /* restore RBX */ - movq 0x108(%rsp), %rbp /* restore RBP */ - - movq 0x110(%rsp), %rax /* restore hidden address of transport_t */ - - leaq 0x118(%rsp), %rsp /* prepare stack */ - - /* restore return-address */ - popq %r10 - - /* transport_t returned in RAX */ - /* return parent fcontext_t */ - movq %r9, 0x0(%rax) - /* return data */ - movq %r8, 0x8(%rax) - - /* transport_t as 1.arg of context-function */ - movq %rax, %rcx - - /* indirect jump to context */ - jmp *%r10 -.seh_endproc - -.section .drectve -.ascii " -export:\"jump_fcontext\"" diff --git a/contrib/restricted/boost/context/src/asm/jump_x86_64_ms_pe_gas.asm b/contrib/restricted/boost/context/src/asm/jump_x86_64_ms_pe_gas.asm deleted file mode 100644 index ec4ecfe946..0000000000 --- a/contrib/restricted/boost/context/src/asm/jump_x86_64_ms_pe_gas.asm +++ /dev/null @@ -1,209 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Copyright Thomas Sailer 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/************************************************************************************* -* ---------------------------------------------------------------------------------- * -* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * -* ---------------------------------------------------------------------------------- * -* | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * -* ---------------------------------------------------------------------------------- * -* | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * -* ---------------------------------------------------------------------------------- * -* | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * -* ---------------------------------------------------------------------------------- * -* | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | * -* ---------------------------------------------------------------------------------- * -* | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | * -* ---------------------------------------------------------------------------------- * -* | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc | * -* ---------------------------------------------------------------------------------- * -* | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | * -* ---------------------------------------------------------------------------------- * -* | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc | * -* ---------------------------------------------------------------------------------- * -* | limit | base | R12 | R13 | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | * -* ---------------------------------------------------------------------------------- * -* | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc | * -* ---------------------------------------------------------------------------------- * -* | R14 | R15 | RDI | RSI | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | * -* ---------------------------------------------------------------------------------- * -* | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c | * -* ---------------------------------------------------------------------------------- * -* | RBX | RBP | hidden | RIP | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | * -* ---------------------------------------------------------------------------------- * -* | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c | * -* ---------------------------------------------------------------------------------- * -* | parameter area | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | * -* ---------------------------------------------------------------------------------- * -* | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c | * -* ---------------------------------------------------------------------------------- * -* | FCTX | DATA | | * -* ---------------------------------------------------------------------------------- * -**************************************************************************************/ - -.file "jump_x86_64_ms_pe_gas.asm" -.text -.p2align 4,,15 -.globl jump_fcontext -.def jump_fcontext; .scl 2; .type 32; .endef -.seh_proc jump_fcontext -jump_fcontext: -.seh_endprologue - - leaq -0x118(%rsp), %rsp /* prepare stack */ - -#if !defined(BOOST_USE_TSX) - /* save XMM storage */ - movaps %xmm6, 0x0(%rsp) - movaps %xmm7, 0x10(%rsp) - movaps %xmm8, 0x20(%rsp) - movaps %xmm9, 0x30(%rsp) - movaps %xmm10, 0x40(%rsp) - movaps %xmm11, 0x50(%rsp) - movaps %xmm12, 0x60(%rsp) - movaps %xmm13, 0x70(%rsp) - movaps %xmm14, 0x80(%rsp) - movaps %xmm15, 0x90(%rsp) - stmxcsr 0xa0(%rsp) /* save MMX control- and status-word */ - fnstcw 0xa4(%rsp) /* save x87 control-word */ -#endif - - /* load NT_TIB */ - movq %gs:(0x30), %r10 - /* save fiber local storage */ - movq 0x20(%r10), %rax - movq %rax, 0xb0(%rsp) - /* save current deallocation stack */ - movq 0x1478(%r10), %rax - movq %rax, 0xb8(%rsp) - /* save current stack limit */ - movq 0x10(%r10), %rax - movq %rax, 0xc0(%rsp) - /* save current stack base */ - movq 0x08(%r10), %rax - movq %rax, 0xc8(%rsp) - - movq %r12, 0xd0(%rsp) /* save R12 */ - movq %r13, 0xd8(%rsp) /* save R13 */ - movq %r14, 0xe0(%rsp) /* save R14 */ - movq %r15, 0xe8(%rsp) /* save R15 */ - movq %rdi, 0xf0(%rsp) /* save RDI */ - movq %rsi, 0xf8(%rsp) /* save RSI */ - movq %rbx, 0x100(%rsp) /* save RBX */ - movq %rbp, 0x108(%rsp) /* save RBP */ - - movq %rcx, 0x110(%rsp) /* save hidden address of transport_t */ - - /* preserve RSP (pointing to context-data) in R9 */ - movq %rsp, %r9 - - /* restore RSP (pointing to context-data) from RDX */ - movq %rdx, %rsp - -#if !defined(BOOST_USE_TSX) - /* restore XMM storage */ - movaps 0x0(%rsp), %xmm6 - movaps 0x10(%rsp), %xmm7 - movaps 0x20(%rsp), %xmm8 - movaps 0x30(%rsp), %xmm9 - movaps 0x40(%rsp), %xmm10 - movaps 0x50(%rsp), %xmm11 - movaps 0x60(%rsp), %xmm12 - movaps 0x70(%rsp), %xmm13 - movaps 0x80(%rsp), %xmm14 - movaps 0x90(%rsp), %xmm15 - ldmxcsr 0xa0(%rsp) /* restore MMX control- and status-word */ - fldcw 0xa4(%rsp) /* restore x87 control-word */ -#endif - - /* load NT_TIB */ - movq %gs:(0x30), %r10 - /* restore fiber local storage */ - movq 0xb0(%rsp), %rax - movq %rax, 0x20(%r10) - /* restore current deallocation stack */ - movq 0xb8(%rsp), %rax - movq %rax, 0x1478(%r10) - /* restore current stack limit */ - movq 0xc0(%rsp), %rax - movq %rax, 0x10(%r10) - /* restore current stack base */ - movq 0xc8(%rsp), %rax - movq %rax, 0x08(%r10) - - movq 0xd0(%rsp), %r12 /* restore R12 */ - movq 0xd8(%rsp), %r13 /* restore R13 */ - movq 0xe0(%rsp), %r14 /* restore R14 */ - movq 0xe8(%rsp), %r15 /* restore R15 */ - movq 0xf0(%rsp), %rdi /* restore RDI */ - movq 0xf8(%rsp), %rsi /* restore RSI */ - movq 0x100(%rsp), %rbx /* restore RBX */ - movq 0x108(%rsp), %rbp /* restore RBP */ - - movq 0x110(%rsp), %rax /* restore hidden address of transport_t */ - - leaq 0x118(%rsp), %rsp /* prepare stack */ - - /* restore return-address */ - popq %r10 - - /* transport_t returned in RAX */ - /* return parent fcontext_t */ - movq %r9, 0x0(%rax) - /* return data */ - movq %r8, 0x8(%rax) - - /* transport_t as 1.arg of context-function */ - movq %rax, %rcx - - /* indirect jump to context */ - jmp *%r10 -.seh_endproc - -.section .drectve -.ascii " -export:\"jump_fcontext\"" diff --git a/contrib/restricted/boost/context/src/asm/jump_x86_64_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/jump_x86_64_sysv_elf_gas.S index be264bdc2e..2eff59a380 100644 --- a/contrib/restricted/boost/context/src/asm/jump_x86_64_sysv_elf_gas.S +++ b/contrib/restricted/boost/context/src/asm/jump_x86_64_sysv_elf_gas.S @@ -44,6 +44,7 @@ .file "jump_x86_64_sysv_elf_gas.S" .text .globl jump_fcontext +.hidden jump_fcontext .type jump_fcontext,@function .align 16 jump_fcontext: @@ -73,14 +74,6 @@ jump_fcontext: /* read the current SSP and store it */ rdsspq %rcx movq %rcx, (%rsp) -#endif - -#if BOOST_CONTEXT_SHADOW_STACK - /* grow the stack to reserve space for shadow stack pointer(SSP) */ - leaq -0x8(%rsp), %rsp - /* read the current SSP and store it */ - rdsspq %rcx - movq %rcx, (%rsp) # endif /* store RSP (pointing to context-data) in RAX */ diff --git a/contrib/restricted/boost/context/src/asm/jump_x86_64_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/jump_x86_64_sysv_macho_gas.S index afc3e5c126..673daa61df 100644 --- a/contrib/restricted/boost/context/src/asm/jump_x86_64_sysv_macho_gas.S +++ b/contrib/restricted/boost/context/src/asm/jump_x86_64_sysv_macho_gas.S @@ -25,6 +25,7 @@ ****************************************************************************************/ .text +.private_extern _jump_fcontext .globl _jump_fcontext .align 8 _jump_fcontext: diff --git a/contrib/restricted/boost/context/src/asm/make_arm64_aapcs_elf_gas.S b/contrib/restricted/boost/context/src/asm/make_arm64_aapcs_elf_gas.S index 66cfb2da17..8ac825bf54 100644 --- a/contrib/restricted/boost/context/src/asm/make_arm64_aapcs_elf_gas.S +++ b/contrib/restricted/boost/context/src/asm/make_arm64_aapcs_elf_gas.S @@ -55,6 +55,7 @@ .text .align 2 .global make_fcontext +.hidden make_fcontext .type make_fcontext, %function make_fcontext: # shift address in x0 (allocated stack) to lower 16 byte boundary diff --git a/contrib/restricted/boost/context/src/asm/make_arm64_aapcs_macho_gas.S b/contrib/restricted/boost/context/src/asm/make_arm64_aapcs_macho_gas.S index b30b1e3e5b..a6a1314c0d 100644 --- a/contrib/restricted/boost/context/src/asm/make_arm64_aapcs_macho_gas.S +++ b/contrib/restricted/boost/context/src/asm/make_arm64_aapcs_macho_gas.S @@ -52,6 +52,7 @@ *******************************************************/ .text +.private_extern _make_fcontext .globl _make_fcontext .balign 16 diff --git a/contrib/restricted/boost/context/src/asm/make_arm_aapcs_elf_gas.S b/contrib/restricted/boost/context/src/asm/make_arm_aapcs_elf_gas.S index 98ae64b43f..9616e566af 100644 --- a/contrib/restricted/boost/context/src/asm/make_arm_aapcs_elf_gas.S +++ b/contrib/restricted/boost/context/src/asm/make_arm_aapcs_elf_gas.S @@ -41,6 +41,7 @@ .file "make_arm_aapcs_elf_gas.S" .text .globl make_fcontext +.hidden make_fcontext .align 2 .type make_fcontext,%function .syntax unified diff --git a/contrib/restricted/boost/context/src/asm/make_arm_aapcs_macho_gas.S b/contrib/restricted/boost/context/src/asm/make_arm_aapcs_macho_gas.S index c909ae9d43..de934075d2 100644 --- a/contrib/restricted/boost/context/src/asm/make_arm_aapcs_macho_gas.S +++ b/contrib/restricted/boost/context/src/asm/make_arm_aapcs_macho_gas.S @@ -39,6 +39,7 @@ *******************************************************/ .text +.private_extern _make_fcontext .globl _make_fcontext .align 2 _make_fcontext: diff --git a/contrib/restricted/boost/context/src/asm/make_combined_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/make_combined_sysv_macho_gas.S deleted file mode 100644 index b22fa7ebe9..0000000000 --- a/contrib/restricted/boost/context/src/asm/make_combined_sysv_macho_gas.S +++ /dev/null @@ -1,24 +0,0 @@ -/* - Copyright Sergue E. Leontiev 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -// Stub file for universal binary - -#if defined(__i386__) - #include "make_i386_sysv_macho_gas.S" -#elif defined(__x86_64__) - #include "make_x86_64_sysv_macho_gas.S" -#elif defined(__ppc__) - #include "make_ppc32_sysv_macho_gas.S" -#elif defined(__ppc64__) - #include "make_ppc64_sysv_macho_gas.S" -#elif defined(__arm__) - #include "make_arm_aapcs_macho_gas.S" -#elif defined(__arm64__) - #include "make_arm64_aapcs_macho_gas.S" -#else - #error "No arch's" -#endif diff --git a/contrib/restricted/boost/context/src/asm/make_i386_ms_pe_clang_gas.S b/contrib/restricted/boost/context/src/asm/make_i386_ms_pe_clang_gas.S deleted file mode 100644 index 79f5024602..0000000000 --- a/contrib/restricted/boost/context/src/asm/make_i386_ms_pe_clang_gas.S +++ /dev/null @@ -1,153 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Copyright Thomas Sailer 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/************************************************************************************* -* --------------------------------------------------------------------------------- * -* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * -* --------------------------------------------------------------------------------- * -* | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch | * -* --------------------------------------------------------------------------------- * -* | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI | * -* --------------------------------------------------------------------------------- * -* --------------------------------------------------------------------------------- * -* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * -* --------------------------------------------------------------------------------- * -* | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch | * -* --------------------------------------------------------------------------------- * -* | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR| * -* --------------------------------------------------------------------------------- * -**************************************************************************************/ - -.file "make_i386_ms_pe_clang_gas.S" -.text -.p2align 4,,15 - -/* mark as using no unregistered SEH handlers */ -.globl @feat.00 -.def @feat.00; .scl 3; .type 0; .endef -.set @feat.00, 1 - -.globl _make_fcontext -.def _make_fcontext; .scl 2; .type 32; .endef -_make_fcontext: - /* first arg of make_fcontext() == top of context-stack */ - movl 0x04(%esp), %eax - - /* reserve space for first argument of context-function */ - /* EAX might already point to a 16byte border */ - leal -0x8(%eax), %eax - - /* shift address in EAX to lower 16 byte boundary */ - andl $-16, %eax - - /* reserve space for context-data on context-stack */ - /* size for fc_mxcsr .. EIP + return-address for context-function */ - /* on context-function entry: (ESP -0x4) % 8 == 0 */ - /* additional space is required for SEH */ - leal -0x40(%eax), %eax - - /* save MMX control- and status-word */ - stmxcsr (%eax) - /* save x87 control-word */ - fnstcw 0x4(%eax) - - /* first arg of make_fcontext() == top of context-stack */ - movl 0x4(%esp), %ecx - /* save top address of context stack as 'base' */ - movl %ecx, 0x14(%eax) - /* second arg of make_fcontext() == size of context-stack */ - movl 0x8(%esp), %edx - /* negate stack size for LEA instruction (== substraction) */ - negl %edx - /* compute bottom address of context stack (limit) */ - leal (%ecx,%edx), %ecx - /* save bottom address of context-stack as 'limit' */ - movl %ecx, 0x10(%eax) - /* save bottom address of context-stack as 'dealloction stack' */ - movl %ecx, 0xc(%eax) - /* set fiber-storage to zero */ - xorl %ecx, %ecx - movl %ecx, 0x8(%eax) - - /* third arg of make_fcontext() == address of context-function */ - /* stored in EBX */ - movl 0xc(%esp), %ecx - movl %ecx, 0x24(%eax) - - /* compute abs address of label trampoline */ - movl $trampoline, %ecx - /* save address of trampoline as return-address for context-function */ - /* will be entered after calling jump_fcontext() first time */ - movl %ecx, 0x2c(%eax) - - /* compute abs address of label finish */ - movl $finish, %ecx - /* save address of finish as return-address for context-function */ - /* will be entered after context-function returns */ - movl %ecx, 0x28(%eax) - - /* traverse current seh chain to get the last exception handler installed by Windows */ - /* note that on Windows Server 2008 and 2008 R2, SEHOP is activated by default */ - /* the exception handler chain is tested for the presence of ntdll.dll!FinalExceptionHandler */ - /* at its end by RaiseException all seh andlers are disregarded if not present and the */ - /* program is aborted */ - /* load NT_TIB into ECX */ - movl %fs:(0x0), %ecx - -walk: - /* load 'next' member of current SEH into EDX */ - movl (%ecx), %edx - /* test if 'next' of current SEH is last (== 0xffffffff) */ - incl %edx - jz found - decl %edx - /* exchange content; ECX contains address of next SEH */ - xchgl %ecx, %edx - /* inspect next SEH */ - jmp walk - -found: - /* load 'handler' member of SEH == address of last SEH handler installed by Windows */ - movl 0x04(%ecx), %ecx - /* save address in ECX as SEH handler for context */ - movl %ecx, 0x3c(%eax) - /* set ECX to -1 */ - movl $0xffffffff, %ecx - /* save ECX as next SEH item */ - movl %ecx, 0x38(%eax) - /* load address of next SEH item */ - leal 0x38(%eax), %ecx - /* save next SEH */ - movl %ecx, 0x18(%eax) - - /* return pointer to context-data */ - ret - -trampoline: - /* move transport_t for entering context-function */ - /* FCTX == EAX, DATA == EDX */ - movl %eax, (%esp) - movl %edx, 0x4(%esp) - /* label finish as return-address */ - pushl %ebp - /* jump to context-function */ - jmp *%ebx - -finish: - /* ESP points to same address as ESP on entry of context function + 0x4 */ - xorl %eax, %eax - /* exit code is zero */ - movl %eax, (%esp) - /* exit application */ - call __exit - hlt - -.def __exit; .scl 2; .type 32; .endef /* standard C library function */ - -.section .drectve -.ascii " -export:\"_make_fcontext\"" diff --git a/contrib/restricted/boost/context/src/asm/make_i386_ms_pe_gas.asm b/contrib/restricted/boost/context/src/asm/make_i386_ms_pe_gas.asm deleted file mode 100644 index 608ddf3af0..0000000000 --- a/contrib/restricted/boost/context/src/asm/make_i386_ms_pe_gas.asm +++ /dev/null @@ -1,153 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Copyright Thomas Sailer 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/************************************************************************************* -* --------------------------------------------------------------------------------- * -* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * -* --------------------------------------------------------------------------------- * -* | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch | * -* --------------------------------------------------------------------------------- * -* | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI | * -* --------------------------------------------------------------------------------- * -* --------------------------------------------------------------------------------- * -* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * -* --------------------------------------------------------------------------------- * -* | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch | * -* --------------------------------------------------------------------------------- * -* | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR| * -* --------------------------------------------------------------------------------- * -**************************************************************************************/ - -.file "make_i386_ms_pe_gas.asm" -.text -.p2align 4,,15 - -/* mark as using no unregistered SEH handlers */ -.globl @feat.00 -.def @feat.00; .scl 3; .type 0; .endef -.set @feat.00, 1 - -.globl _make_fcontext -.def _make_fcontext; .scl 2; .type 32; .endef -_make_fcontext: - /* first arg of make_fcontext() == top of context-stack */ - movl 0x04(%esp), %eax - - /* reserve space for first argument of context-function */ - /* EAX might already point to a 16byte border */ - leal -0x8(%eax), %eax - - /* shift address in EAX to lower 16 byte boundary */ - andl $-16, %eax - - /* reserve space for context-data on context-stack */ - /* size for fc_mxcsr .. EIP + return-address for context-function */ - /* on context-function entry: (ESP -0x4) % 8 == 0 */ - /* additional space is required for SEH */ - leal -0x40(%eax), %eax - - /* save MMX control- and status-word */ - stmxcsr (%eax) - /* save x87 control-word */ - fnstcw 0x4(%eax) - - /* first arg of make_fcontext() == top of context-stack */ - movl 0x4(%esp), %ecx - /* save top address of context stack as 'base' */ - movl %ecx, 0x14(%eax) - /* second arg of make_fcontext() == size of context-stack */ - movl 0x8(%esp), %edx - /* negate stack size for LEA instruction (== substraction) */ - negl %edx - /* compute bottom address of context stack (limit) */ - leal (%ecx,%edx), %ecx - /* save bottom address of context-stack as 'limit' */ - movl %ecx, 0x10(%eax) - /* save bottom address of context-stack as 'dealloction stack' */ - movl %ecx, 0xc(%eax) - /* set fiber-storage to zero */ - xorl %ecx, %ecx - movl %ecx, 0x8(%eax) - - /* third arg of make_fcontext() == address of context-function */ - /* stored in EBX */ - movl 0xc(%esp), %ecx - movl %ecx, 0x24(%eax) - - /* compute abs address of label trampoline */ - movl $trampoline, %ecx - /* save address of trampoline as return-address for context-function */ - /* will be entered after calling jump_fcontext() first time */ - movl %ecx, 0x2c(%eax) - - /* compute abs address of label finish */ - movl $finish, %ecx - /* save address of finish as return-address for context-function */ - /* will be entered after context-function returns */ - movl %ecx, 0x28(%eax) - - /* traverse current seh chain to get the last exception handler installed by Windows */ - /* note that on Windows Server 2008 and 2008 R2, SEHOP is activated by default */ - /* the exception handler chain is tested for the presence of ntdll.dll!FinalExceptionHandler */ - /* at its end by RaiseException all seh andlers are disregarded if not present and the */ - /* program is aborted */ - /* load NT_TIB into ECX */ - movl %fs:(0x0), %ecx - -walk: - /* load 'next' member of current SEH into EDX */ - movl (%ecx), %edx - /* test if 'next' of current SEH is last (== 0xffffffff) */ - incl %edx - jz found - decl %edx - /* exchange content; ECX contains address of next SEH */ - xchgl %ecx, %edx - /* inspect next SEH */ - jmp walk - -found: - /* load 'handler' member of SEH == address of last SEH handler installed by Windows */ - movl 0x04(%ecx), %ecx - /* save address in ECX as SEH handler for context */ - movl %ecx, 0x3c(%eax) - /* set ECX to -1 */ - movl $0xffffffff, %ecx - /* save ECX as next SEH item */ - movl %ecx, 0x38(%eax) - /* load address of next SEH item */ - leal 0x38(%eax), %ecx - /* save next SEH */ - movl %ecx, 0x18(%eax) - - /* return pointer to context-data */ - ret - -trampoline: - /* move transport_t for entering context-function */ - /* FCTX == EAX, DATA == EDX */ - movl %eax, (%esp) - movl %edx, 0x4(%esp) - /* label finish as return-address */ - pushl %ebp - /* jump to context-function */ - jmp *%ebx - -finish: - /* ESP points to same address as ESP on entry of context function + 0x4 */ - xorl %eax, %eax - /* exit code is zero */ - movl %eax, (%esp) - /* exit application */ - call __exit - hlt - -.def __exit; .scl 2; .type 32; .endef /* standard C library function */ - -.section .drectve -.ascii " -export:\"make_fcontext\"" diff --git a/contrib/restricted/boost/context/src/asm/make_i386_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/make_i386_sysv_elf_gas.S index c6e0b36558..992bae019a 100644 --- a/contrib/restricted/boost/context/src/asm/make_i386_sysv_elf_gas.S +++ b/contrib/restricted/boost/context/src/asm/make_i386_sysv_elf_gas.S @@ -31,6 +31,7 @@ .file "make_i386_sysv_elf_gas.S" .text .globl make_fcontext +.hidden make_fcontext .align 2 .type make_fcontext,@function make_fcontext: diff --git a/contrib/restricted/boost/context/src/asm/make_i386_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/make_i386_sysv_macho_gas.S index 519e406248..a5890d75f6 100644 --- a/contrib/restricted/boost/context/src/asm/make_i386_sysv_macho_gas.S +++ b/contrib/restricted/boost/context/src/asm/make_i386_sysv_macho_gas.S @@ -25,6 +25,7 @@ ****************************************************************************************/ .text +.private_extern _make_fcontext .globl _make_fcontext .align 2 _make_fcontext: diff --git a/contrib/restricted/boost/context/src/asm/make_i386_x86_64_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/make_i386_x86_64_sysv_macho_gas.S deleted file mode 100644 index e364b2db62..0000000000 --- a/contrib/restricted/boost/context/src/asm/make_i386_x86_64_sysv_macho_gas.S +++ /dev/null @@ -1,16 +0,0 @@ -/* - Copyright Sergue E. Leontiev 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -// Stub file for universal binary - -#if defined(__i386__) - #include "make_i386_sysv_macho_gas.S" -#elif defined(__x86_64__) - #include "make_x86_64_sysv_macho_gas.S" -#else - #error "No arch's" -#endif diff --git a/contrib/restricted/boost/context/src/asm/make_loongarch64_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/make_loongarch64_sysv_elf_gas.S deleted file mode 100644 index 55062702f1..0000000000 --- a/contrib/restricted/boost/context/src/asm/make_loongarch64_sysv_elf_gas.S +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 8 | 16 | 24 | * - * ------------------------------------------------- * - * | FS0 | FS1 | FS2 | FS3 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 40 | 48 | 56 | * - * ------------------------------------------------- * - * | FS4 | FS5 | FS6 | FS7 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 72 | 80 | 88 | * - * ------------------------------------------------- * - * | S0 | S1 | S2 | S3 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | S4 | S5 | S6 | S7 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | S8 | FP | RA | PC | * - * ------------------------------------------------- * - * * - * *****************************************************/ - -.file "make_loongarch64_sysv_elf_gas.S" -.text -.globl make_fcontext -.align 2 -.type make_fcontext,@function -make_fcontext: - # shift address in A0 to lower 16 byte boundary - bstrins.d $a0, $zero, 3, 0 - - # reserve space for context-data on context-stack - addi.d $a0, $a0, -160 - - # third arg of make_fcontext() == address of context-function - st.d $a2, $a0, 152 - - # save address of finish as return-address for context-function - # will be entered after context-function returns - la.local $a4, finish - st.d $a4, $a0, 144 - - # return pointer to context-data - jr $ra - -finish: - # exit code is zero - li.d $a0, 0 - # call _exit(0) - b %plt(_exit) - -.size make_fcontext, .-make_fcontext -/* Mark that we don't need executable stack. */ -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/make_mips32_o32_elf_gas.S b/contrib/restricted/boost/context/src/asm/make_mips32_o32_elf_gas.S deleted file mode 100644 index 4e11e3d058..0000000000 --- a/contrib/restricted/boost/context/src/asm/make_mips32_o32_elf_gas.S +++ /dev/null @@ -1,97 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * | F20 | F22 | F24 | F26 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | F28 | F30 | S0 | S1 | S2 | S3 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | S4 | S5 | S6 | S7 | FP |hiddn| RA | PC | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | ABI ARGS | GP | FCTX| DATA| | * - * ------------------------------------------------- * - * * - * *****************************************************/ - -.file "make_mips32_o32_elf_gas.S" -.text -.globl make_fcontext -.align 2 -.type make_fcontext,@function -.ent make_fcontext -make_fcontext: -#ifdef __PIC__ -.set noreorder -.cpload $t9 -.set reorder -#endif - # shift address in A0 to lower 16 byte boundary - li $v1, -16 # 0xfffffffffffffff0 - and $v0, $v1, $a0 - - # reserve space for context-data on context-stack - # includes an extra 32 bytes for: - # - 16-byte incoming argument area required by mips ABI used when - # jump_context calls the initial function - # - 4 bytes to save our GP register used in finish - # - 8 bytes to as space for transfer_t returned to finish - # - 4 bytes for alignment - addiu $v0, $v0, -128 - - # third arg of make_fcontext() == address of context-function - sw $a2, 92($v0) - # save global pointer in context-data - sw $gp, 112($v0) - - # compute address of returned transfer_t - addiu $t0, $v0, 116 - sw $t0, 84($v0) - - # compute abs address of label finish - la $t9, finish - # save address of finish as return-address for context-function - # will be entered after context-function returns - sw $t9, 88($v0) - - jr $ra # return pointer to context-data - -finish: - # reload our gp register (needed for la) - lw $gp, 16($sp) - - # call _exit(0) - # the previous function should have left the 16 bytes incoming argument - # area on the stack which we reuse for calling _exit - la $t9, _exit - move $a0, $zero - jr $t9 -.end make_fcontext -.size make_fcontext, .-make_fcontext - -/* Mark that we don't need executable stack. */ -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/make_mips64_n64_elf_gas.S b/contrib/restricted/boost/context/src/asm/make_mips64_n64_elf_gas.S deleted file mode 100644 index 7bb30b14de..0000000000 --- a/contrib/restricted/boost/context/src/asm/make_mips64_n64_elf_gas.S +++ /dev/null @@ -1,96 +0,0 @@ -/* - Copyright Jiaxun Yang 2018. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 8 | 16 | 24 | * - * ------------------------------------------------- * - * | F24 | F25 | F26 | F27 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 40 | 48 | 56 | * - * ------------------------------------------------- * - * | F28 | F29 | F30 | F31 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 72 | 80 | 88 | * - * ------------------------------------------------- * - * | S0 | S1 | S2 | S3 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | S4 | S5 | S6 | S7 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | FP | GP | RA | PC | * - * ------------------------------------------------- * - * * - * *****************************************************/ - -.file "make_mips64_n64_elf_gas.S" -.text -.globl make_fcontext -.align 3 -.type make_fcontext,@function -.ent make_fcontext -make_fcontext: -#ifdef __PIC__ -.set noreorder -.cpload $t9 -.set reorder -#endif - # shift address in A0 to lower 16 byte boundary - li $v1, 0xfffffffffffffff0 - and $v0, $v1, $a0 - - # reserve space for context-data on context-stack - daddiu $v0, $v0, -160 - - # third arg of make_fcontext() == address of context-function - sd $a2, 152($v0) - # save global pointer in context-data - sd $gp, 136($v0) - - # psudo instruction compute abs address of label finish based on GP - dla $t9, finish - - # save address of finish as return-address for context-function - # will be entered after context-function returns - sd $t9, 144($v0) - - jr $ra # return pointer to context-data - -finish: - # reload our gp register (needed for la) - daddiu $t0, $sp, -160 - ld $gp, 136($t0) - - # call _exit(0) - # the previous function should have left the 16 bytes incoming argument - # area on the stack which we reuse for calling _exit - dla $t9, _exit - move $a0, $zero - jr $t9 -.end make_fcontext -.size make_fcontext, .-make_fcontext - -/* Mark that we don't need executable stack. */ -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/make_ppc32_ppc64_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/make_ppc32_ppc64_sysv_macho_gas.S deleted file mode 100644 index 52e7220933..0000000000 --- a/contrib/restricted/boost/context/src/asm/make_ppc32_ppc64_sysv_macho_gas.S +++ /dev/null @@ -1,16 +0,0 @@ -/* - Copyright Sergue E. Leontiev 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -// Stub file for universal binary - -#if defined(__ppc__) - #include "make_ppc32_sysv_macho_gas.S" -#elif defined(__ppc64__) - #include "make_ppc64_sysv_macho_gas.S" -#else - #error "No arch's" -#endif diff --git a/contrib/restricted/boost/context/src/asm/make_ppc32_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/make_ppc32_sysv_elf_gas.S deleted file mode 100644 index 9616c4ca9b..0000000000 --- a/contrib/restricted/boost/context/src/asm/make_ppc32_sysv_elf_gas.S +++ /dev/null @@ -1,146 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * |bchai|hiddn| fpscr | PC | CR | R14 | R15 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | R16 | R17 | R18 | R19 | R20 | R21 | R22 | R23 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | R24 | R25 | R26 | R27 | R28 | R29 | R30 | R31 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | F14 | F15 | F16 | F17 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | F18 | F19 | F20 | F21 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | * - * ------------------------------------------------- * - * | F22 | F23 | F24 | F25 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * - * ------------------------------------------------- * - * | F26 | F27 | F28 | F29 | * - * ------------------------------------------------- * - * ------------------------|------------ * - * | 224 | 228 | 232 | 236 | 240 | 244 | * - * ------------------------|------------ * - * | F30 | F31 |bchai| LR | * - * ------------------------|------------ * - * * - *******************************************************/ - -.file "make_ppc32_sysv_elf_gas.S" -.text -.globl make_fcontext -.align 2 -.type make_fcontext,@function -make_fcontext: - # save return address into R6 - mflr %r6 - - # first arg of make_fcontext() == top address of context-function - # shift address in R3 to lower 16 byte boundary - clrrwi %r3, %r3, 4 - - # reserve space on context-stack, including 16 bytes of linkage - # and parameter area + 240 bytes of context-data (R1 % 16 == 0) - subi %r3, %r3, 16 + 240 - - # third arg of make_fcontext() == address of context-function -#ifdef __linux__ - # save context-function as PC - stw %r5, 16(%r3) -#else - # save context-function for trampoline - stw %r5, 248(%r3) -#endif - - # set back-chain to zero - li %r0, 0 - stw %r0, 240(%r3) - - # copy FPSCR to new context - mffs %f0 - stfd %f0, 8(%r3) - -#ifdef __linux__ - # set hidden pointer for returning transfer_t - la %r0, 248(%r3) - stw %r0, 4(%r3) -#endif - - # load address of label 1 into R4 - bl 1f -1: mflr %r4 -#ifndef __linux__ - # compute abs address of trampoline, use as PC - addi %r7, %r4, trampoline - 1b - stw %r7, 16(%r3) -#endif - # compute abs address of label finish - addi %r4, %r4, finish - 1b - # save address of finish as return-address for context-function - # will be entered after context-function returns - stw %r4, 244(%r3) - - # restore return address from R6 - mtlr %r6 - - blr # return pointer to context-data - -#ifndef __linux__ -trampoline: - # On systems other than Linux, jump_fcontext is returning the - # transfer_t in R3:R4, but we need to pass transfer_t * R3 to - # our context-function. - lwz %r0, 8(%r1) # address of context-function - mtctr %r0 - stw %r3, 8(%r1) - stw %r4, 12(%r1) - la %r3, 8(%r1) # address of transfer_t - bctr -#endif - -finish: - # Use the secure PLT for _exit(0). If we use the insecure BSS PLT - # here, then the linker may use the insecure BSS PLT even if the - # C++ compiler wanted the secure PLT. - - # set R30 for secure PLT, large model - bl 2f -2: mflr %r30 - addis %r30, %r30, .Ltoc - 2b@ha - addi %r30, %r30, .Ltoc - 2b@l - - # call _exit(0) with special addend 0x8000 for large model - li %r3, 0 - bl _exit + 0x8000@plt -.size make_fcontext, .-make_fcontext - -/* Provide the GOT pointer for secure PLT, large model. */ -.section .got2,"aw" -.Ltoc = . + 0x8000 - -/* Mark that we don't need executable stack. */ -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/make_ppc32_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/make_ppc32_sysv_macho_gas.S deleted file mode 100644 index 1102ee90ef..0000000000 --- a/contrib/restricted/boost/context/src/asm/make_ppc32_sysv_macho_gas.S +++ /dev/null @@ -1,154 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/****************************************************** - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * | F14 | F15 | F16 | F17 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | F18 | F19 | F20 | F21 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | F22 | F23 | F24 | F25 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | F26 | F27 | F28 | F29 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | F30 | F31 | fpscr | R13 | R14 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | * - * ------------------------------------------------- * - * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | * - * ------------------------------------------------- * - * | R15 | R16 | R17 | R18 | R19 | R20 | R21 | R22 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | * - * ------------------------------------------------- * - * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * - * ------------------------------------------------- * - * | R23 | R24 | R25 | R26 | R27 | R28 | R29 | R30 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | * - * ------------------------------------------------- * - * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | * - * ------------------------------------------------- * - * | R31 |hiddn| CR | LR | PC |bchai|linkr| FCTX| * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 64 | | * - * ------------------------------------------------- * - * | 256 | | * - * ------------------------------------------------- * - * | DATA| | * - * ------------------------------------------------- * - * * - *******************************************************/ - -.text -.globl _make_fcontext -.align 2 -_make_fcontext: - ; save return address into R6 - mflr r6 - - ; first arg of make_fcontext() == top address of context-function - ; shift address in R3 to lower 16 byte boundary - clrrwi r3, r3, 4 - - ; reserve space for context-data on context-stack - ; including 64 byte of linkage + parameter area (R1 % 16 == 0) - subi r3, r3, 336 - - ; third arg of make_fcontext() == address of context-function - ; store as trampoline's R31 - stw r5, 224(r3) - - ; set back-chain to zero - li r0, 0 - stw r0, 244(r3) - - mffs f0 ; load FPSCR - stfd f0, 144(r3) ; save FPSCR - - ; compute address of returned transfer_t - addi r0, r3, 252 - mr r4, r0 - stw r4, 228(r3) - - ; load LR - mflr r0 - ; jump to label 1 - bcl 20, 31, L1 -L1: - ; load LR into R4 - mflr r4 - ; compute abs address of trampoline, use as PC - addi r5, r4, lo16(Ltrampoline - L1) - stw r5, 240(r3) - ; compute abs address of label finish - addi r4, r4, lo16(Lfinish - L1) - ; restore LR - mtlr r0 - ; save address of finish as return-address for context-function - ; will be entered after context-function returns - stw r4, 236(r3) - - ; restore return address from R6 - mtlr r6 - - blr ; return pointer to context-data - -Ltrampoline: - ; We get R31 = context-function, R3 = address of transfer_t, - ; but we need to pass R3:R4 = transfer_t. - mtctr r31 - lwz r4, 4(r3) - lwz r3, 0(r3) - bctr - -Lfinish: - ; load address of _exit into CTR - bcl 20, 31, L2 -L2: - mflr r4 - addis r4, r4, ha16(Lexitp - L2) - lwz r4, lo16(Lexitp - L2)(r4) - mtctr r4 - ; exit code is zero - li r3, 0 - ; exit application - bctr - -.const_data -.align 2 -Lexitp: - .long __exit diff --git a/contrib/restricted/boost/context/src/asm/make_ppc32_sysv_xcoff_gas.S b/contrib/restricted/boost/context/src/asm/make_ppc32_sysv_xcoff_gas.S deleted file mode 100644 index e803757fa3..0000000000 --- a/contrib/restricted/boost/context/src/asm/make_ppc32_sysv_xcoff_gas.S +++ /dev/null @@ -1,125 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * |bchai| CR | LR |compl| link| TOC | R14 | R15 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | R16 | R17 | R18 | R19 | R20 | R21 | R22 | R23 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | R24 | R25 | R26 | R27 | R28 | R29 | R30 | R31 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | F14 | F15 | F16 | F17 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | F18 | F19 | F20 | F21 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | * - * ------------------------------------------------- * - * | F22 | F23 | F24 | F25 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * - * ------------------------------------------------- * - * | F26 | F27 | F28 | F29 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | * - * ------------------------------------------------- * - * | F30 | F31 | PC |hiddn| fpscr | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 256 | 260 | 264 | 268 | 272 | 276 | 280 | 284 | * - * ------------------------------------------------- * - * |bchai|savLR|savLR|compl| link|svTOC| FCTX| DATA| * - * ------------------------------------------------- * - * * - *******************************************************/ - .file "make_ppc32_sysv_xcoff_xas.S" - .toc - .csect .text[PR] - .align 2 - .globl make_fcontext[DS] - .globl .make_fcontext - .csect make_fcontext[DS] -make_fcontext: - .long .make_fcontext[PR], TOC[tc0], 0 - .csect .text[PR], 5 -.make_fcontext: - # save return address into R6 - mflr 6 - - # first arg of make_fcontext() == top address of context-function - # shift address in R3 to lower 16 byte boundary - clrrwi 3, 3, 4 - - # reserve space for context-data on context-stack - # including 32 byte of linkage + parameter area (R1 % 16 == 0) - subi 3, 3, 288 - - # third arg of make_fcontext() == address of context-function descriptor - lwz 4, 0(5) - stw 4, 240(3) - # save TOC of context-function - lwz 4, 4(5) - stw 4, 20(3) - - # set back-chain to zero - li 0, 0 - stw 0, 256(3) - - # zero in r3 indicates first jump to context-function - std 0, 244(3) - - # load LR - mflr 0 - # jump to label 1 - bl .Label -.Label: - # load LR into R4 - mflr 4 - # compute abs address of label .L_finish - addi 4, 4, .L_finish - .Label - # restore LR - mtlr 0 - # save address of finish as return-address for context-function - # will be entered after context-function returns - stw 4, 8(3) - - # restore return address from R6 - mtlr 6 - - blr # return pointer to context-data - -.L_finish: - # save return address into R0 - mflr 0 - # save return address on stack, set up stack frame - stw 0, 4(1) - # allocate stack space, R1 % 16 == 0 - stwu 1, -16(1) - - # exit code is zero - li 3, 0 - # exit application - bl ._exit - nop diff --git a/contrib/restricted/boost/context/src/asm/make_ppc64_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/make_ppc64_sysv_elf_gas.S deleted file mode 100644 index c4d7ee5982..0000000000 --- a/contrib/restricted/boost/context/src/asm/make_ppc64_sysv_elf_gas.S +++ /dev/null @@ -1,177 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * | TOC | R14 | R15 | R16 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | R17 | R18 | R19 | R20 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | R21 | R22 | R23 | R24 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | R25 | R26 | R27 | R28 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | R29 | R30 | R31 | hidden | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | * - * ------------------------------------------------- * - * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | * - * ------------------------------------------------- * - * | CR | LR | PC | back-chain| * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | * - * ------------------------------------------------- * - * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * - * ------------------------------------------------- * - * | cr saved | lr saved | compiler | linker | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | * - * ------------------------------------------------- * - * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | * - * ------------------------------------------------- * - * | TOC saved | FCTX | DATA | | * - * ------------------------------------------------- * - * * - *******************************************************/ - -.file "make_ppc64_sysv_elf_gas.S" -.globl make_fcontext -#if _CALL_ELF == 2 - .text - .align 2 -make_fcontext: - addis %r2, %r12, .TOC.-make_fcontext@ha - addi %r2, %r2, .TOC.-make_fcontext@l - .localentry make_fcontext, . - make_fcontext -#else - .section ".opd","aw" - .align 3 -make_fcontext: -# ifdef _CALL_LINUX - .quad .L.make_fcontext,.TOC.@tocbase,0 - .type make_fcontext,@function - .text - .align 2 -.L.make_fcontext: -# else - .hidden .make_fcontext - .globl .make_fcontext - .quad .make_fcontext,.TOC.@tocbase,0 - .size make_fcontext,24 - .type .make_fcontext,@function - .text - .align 2 -.make_fcontext: -# endif -#endif - # save return address into R6 - mflr %r6 - - # first arg of make_fcontext() == top address of context-stack - # shift address in R3 to lower 16 byte boundary - clrrdi %r3, %r3, 4 - - # reserve space for context-data on context-stack - # including 64 byte of linkage + parameter area (R1 % 16 == 0) - subi %r3, %r3, 248 - - # third arg of make_fcontext() == address of context-function - # entry point (ELFv2) or descriptor (ELFv1) -#if _CALL_ELF == 2 - # save address of context-function entry point - std %r5, 176(%r3) -#else - # save address of context-function entry point - ld %r4, 0(%r5) - std %r4, 176(%r3) - # save TOC of context-function - ld %r4, 8(%r5) - std %r4, 0(%r3) -#endif - - # set back-chain to zero - li %r0, 0 - std %r0, 184(%r3) - -#if _CALL_ELF != 2 - # zero in r3 indicates first jump to context-function - std %r0, 152(%r3) -#endif - - # load LR - mflr %r0 - # jump to label 1 - bl 1f -1: - # load LR into R4 - mflr %r4 - # compute abs address of label finish - addi %r4, %r4, finish - 1b - # restore LR - mtlr %r0 - # save address of finish as return-address for context-function - # will be entered after context-function returns - std %r4, 168(%r3) - - # restore return address from R6 - mtlr %r6 - - blr # return pointer to context-data - -finish: - # save return address into R0 - mflr %r0 - # save return address on stack, set up stack frame - std %r0, 8(%r1) - # allocate stack space, R1 % 16 == 0 - stdu %r1, -32(%r1) - - # exit code is zero - li %r3, 0 - # exit application - bl _exit - nop -#if _CALL_ELF == 2 - .size make_fcontext, .-make_fcontext -#else -# ifdef _CALL_LINUX - .size .make_fcontext, .-.L.make_fcontext -# else - .size .make_fcontext, .-.make_fcontext -# endif -#endif - -/* Mark that we don't need executable stack. */ -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/make_ppc64_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/make_ppc64_sysv_macho_gas.S deleted file mode 100644 index dd7bf2c5c0..0000000000 --- a/contrib/restricted/boost/context/src/asm/make_ppc64_sysv_macho_gas.S +++ /dev/null @@ -1,127 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * | R13 | R14 | R15 | R16 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | R17 | R18 | R19 | R20 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | R21 | R22 | R23 | R24 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | R25 | R26 | R27 | R28 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | R29 | R30 | R31 | hidden | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | * - * ------------------------------------------------- * - * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | * - * ------------------------------------------------- * - * | CR | LR | PC | back-chain| * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | * - * ------------------------------------------------- * - * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * - * ------------------------------------------------- * - * | cr saved | lr saved | compiler | linker | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | * - * ------------------------------------------------- * - * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | * - * ------------------------------------------------- * - * | FCTX | DATA | | | * - * ------------------------------------------------- * - * * - *******************************************************/ - -.text -.globl _make_fcontext -_make_fcontext: - ; save return address into R6 - mflr r6 - - ; first arg of make_fcontext() == top address of context-function - ; shift address in R3 to lower 16 byte boundary - clrrwi r3, r3, 4 - - ; reserve space for context-data on context-stack - ; including 64 byte of linkage + parameter area (R1 16 == 0) - subi r3, r3, 240 - - ; third arg of make_fcontext() == address of context-function - stw r5, 176(r3) - - ; set back-chain to zero - li r0, 0 - std r0, 184(r3) - - ; compute address of returned transfer_t - addi r0, r3, 224 - mr r4, r0 - std r4, 152(r3) - - ; load LR - mflr r0 - ; jump to label 1 - bl l1 -l1: - ; load LR into R4 - mflr r4 - ; compute abs address of label finish - addi r4, r4, lo16((finish - .) + 4) - ; restore LR - mtlr r0 - ; save address of finish as return-address for context-function - ; will be entered after context-function returns - std r4, 168(r3) - - ; restore return address from R6 - mtlr r6 - - blr ; return pointer to context-data - -finish: - ; save return address into R0 - mflr r0 - ; save return address on stack, set up stack frame - stw r0, 8(r1) - ; allocate stack space, R1 16 == 0 - stwu r1, -32(r1) - - ; set return value to zero - li r3, 0 - ; exit application - bl __exit - nop diff --git a/contrib/restricted/boost/context/src/asm/make_ppc64_sysv_xcoff_gas.S b/contrib/restricted/boost/context/src/asm/make_ppc64_sysv_xcoff_gas.S deleted file mode 100644 index 2374b50ee6..0000000000 --- a/contrib/restricted/boost/context/src/asm/make_ppc64_sysv_xcoff_gas.S +++ /dev/null @@ -1,137 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * | TOC | R14 | R15 | R16 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | R17 | R18 | R19 | R20 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | R21 | R22 | R23 | R24 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | R25 | R26 | R27 | R28 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | R29 | R30 | R31 | hidden | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | * - * ------------------------------------------------- * - * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | * - * ------------------------------------------------- * - * | CR | LR | PC | back-chain| * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | * - * ------------------------------------------------- * - * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * - * ------------------------------------------------- * - * | cr saved | lr saved | compiler | linker | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | * - * ------------------------------------------------- * - * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | * - * ------------------------------------------------- * - * | TOC saved | FCTX | DATA | | * - * ------------------------------------------------- * - * * - *******************************************************/ - - .file "make_ppc64_sysv_xcoff_gas.S" - .toc - .csect .text[PR], 5 - .align 2 - .globl make_fcontext[DS] - .globl .make_fcontext - .csect make_fcontext[DS], 3 -make_fcontext: - .llong .make_fcontext[PR], TOC[tc0], 0 - .csect .text[PR], 5 -.make_fcontext: - # save return address into R6 - mflr 6 - - # first arg of make_fcontext() == top address of context-function - # shift address in R3 to lower 16 byte boundary - clrrdi 3, 3, 4 - - # reserve space for context-data on context-stack - # including 64 byte of linkage + parameter area (R1 % 16 == 0) - subi 3, 3, 248 - - # third arg of make_fcontext() == address of context-function descriptor - ld 4, 0(5) - std 4, 176(3) - # save TOC of context-function - ld 4, 8(5) - std 4, 0(3) - - # set back-chain to zero - li 0, 0 - std 0, 184(3) - - # zero in r3 indicates first jump to context-function - std 0, 152(3) - - # load LR - mflr 0 - # jump to label 1 - bl .Label -.Label: - # load LR into R4 - mflr 4 - # compute abs address of label .L_finish - addi 4, 4, .L_finish - .Label - # restore LR - mtlr 0 - # save address of finish as return-address for context-function - # will be entered after context-function returns - std 4, 168(3) - - # restore return address from R6 - mtlr 6 - - blr # return pointer to context-data - -.L_finish: - # save return address into R0 - mflr 0 - # save return address on stack, set up stack frame - std 0, 8(1) - # allocate stack space, R1 % 16 == 0 - stdu 1, -32(1) - - # exit code is zero - li 3, 0 - # exit application - bl ._exit - nop diff --git a/contrib/restricted/boost/context/src/asm/make_riscv64_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/make_riscv64_sysv_elf_gas.S deleted file mode 100644 index 5322e0fdbd..0000000000 --- a/contrib/restricted/boost/context/src/asm/make_riscv64_sysv_elf_gas.S +++ /dev/null @@ -1,91 +0,0 @@ -/* - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| * - * ------------------------------------------------- * - * | fs0 | fs1 | fs2 | fs3 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| * - * ------------------------------------------------- * - * | fs4 | fs5 | fs6 | fs7 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| * - * ------------------------------------------------- * - * | fs8 | fs9 | fs10 | fs11 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| * - * ------------------------------------------------- * - * | s0 | s1 | s2 | s3 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c| * - * ------------------------------------------------- * - * | s4 | s5 | s6 | s7 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | * - * ------------------------------------------------- * - * | 0xa0| 0xa4| 0xa8| 0xac| 0xb0| 0xb4| 0xb8| 0xbc| * - * ------------------------------------------------- * - * | s8 | s9 | s10 | s11 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 48 | 49 | 50 | 51 | | | | | * - * ------------------------------------------------- * - * | 0xc0| 0xc4| 0xc8| 0xcc| | | | | * - * ------------------------------------------------- * - * | ra | pc | | | * - * ------------------------------------------------- * - * * - *******************************************************/ - -.file "make_riscv64_sysv_elf_gas.S" -.text -.align 1 -.global make_fcontext -.type make_fcontext, %function -make_fcontext: - # shift address in a0 (allocated stack) to lower 16 byte boundary - andi a0, a0, ~0xF - - # reserve space for context-data on context-stack - addi a0, a0, -0xd0 - - # third arg of make_fcontext() == address of context-function - # store address as a PC to jump in - sd a2, 0xc8(a0) - - # save address of finish as return-address for context-function - # will be entered after context-function returns (RA register) - lla a4, finish - sd a4, 0xc0(a0) - - ret // return pointer to context-data (a0) - -finish: - # exit code is zero - li a0, 0 - # exit application - tail _exit@plt - -.size make_fcontext,.-make_fcontext -# Mark that we don't need executable stack. -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/make_s390x_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/make_s390x_sysv_elf_gas.S deleted file mode 100644 index 4dd423e2a4..0000000000 --- a/contrib/restricted/boost/context/src/asm/make_s390x_sysv_elf_gas.S +++ /dev/null @@ -1,108 +0,0 @@ -/******************************************************* - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 8 | 16 | 24 | * - * ------------------------------------------------- * - * | t.fctx | t.data | r2 | r6 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 40 | 48 | 56 | * - * ------------------------------------------------- * - * | r7 | r8 | r9 | r10 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 72 | 80 | 88 | * - * ------------------------------------------------- * - * | r11 | r12 | r13 | r14 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 104 | 112 | 120 | * - * ------------------------------------------------- * - * | f8 | f9 | f10 | f11 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 136 | 144 | 152 | * - * ------------------------------------------------- * - * | f12 | f13 | f14 | f15 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | * - * ------------------------------------------------- * - * | 160 | 168 | 176 | | * - * ------------------------------------------------- * - * | fpc | pc | | | * - * ------------------------------------------------- * - *******************************************************/ - -.text -.align 8 -.global make_fcontext -.type make_fcontext, @function - -#define ARG_OFFSET 0 -#define GR_OFFSET 16 -#define R14_OFFSET 88 -#define FP_OFFSET 96 -#define FPC_OFFSET 160 -#define PC_OFFSET 168 -#define CONTEXT_SIZE 176 - -/* - -fcontext_t make_fcontext( void * sp, std::size_t size, void (* fn)( transfer_t) ); - -Create and return a context below SP to call FN. - -Incoming args -r2 - The stack location where to create the context -r3 - The size of the context -r4 - The address of the context function - -*/ - -make_fcontext: - .machine "z10" - /* Align the stack to an 8 byte boundary. */ - nill %r2,0xfff8 - - /* Allocate stack space for the context. */ - aghi %r2,-CONTEXT_SIZE - - /* Set the r2 save slot to zero. This indicates jump_fcontext - that this is a special context. */ - mvghi GR_OFFSET(%r2),0 - - /* Save the floating point control register. */ - stfpc FPC_OFFSET(%r2) - - /* Store the address of the target function as new pc. */ - stg %r4,PC_OFFSET(%r2) - - /* Store a pointer to the finish routine as r14. If a function - called via context routines just returns that value will be - loaded and used as return address. Hence the program will - just exit. */ - larl %r1,finish - stg %r1,R14_OFFSET(%r2) - - /* Return as usual with the new context returned in r2. */ - br %r14 - -finish: - /* In finish tasks, you load the exit code and exit the - make_fcontext This is called when the context-function is - entirely executed. */ - lghi %r2,0 - brasl %r14,_exit@PLT - -.size make_fcontext,.-make_fcontext -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/make_sparc64_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/make_sparc64_sysv_elf_gas.S deleted file mode 100644 index 3e7ee809c9..0000000000 --- a/contrib/restricted/boost/context/src/asm/make_sparc64_sysv_elf_gas.S +++ /dev/null @@ -1,68 +0,0 @@ -/* - Copyright Claudio Jeker 2024 - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/* - * fcontext_t *make_fcontext(void *sp, size_t size, void (*fn)(transfer_t)); - */ -#define CC64FSZ 176 -#define BIAS 2047 -#define FP 112 -#define SP 128 -#define I7 136 - -.file "make_sparc64_sysv_elf_gas.S" -.text -.align 4 -.global make_fcontext -.type make_fcontext, %function -make_fcontext: - save %sp, -CC64FSZ, %sp - - # shift address in %i0 (allocated stack) to lower 16 byte boundary - and %i0, -0xf, %i0 - - # reserve space for two frames on the stack - # the first frame is for the call the second one holds the data - # for jump_fcontext - sub %i0, 2 * CC64FSZ, %i0 - - # third argument of make_fcontext() is the context-function to call - # store it in the first stack frame, also clear %fp there to indicate - # the end of the stack. - stx %i2, [%i0 + CC64FSZ + I7] - stx %g0, [%i0 + CC64FSZ + FP] - - # On OpenBSD stackghost prevents overriding the return address on - # a stack frame. So this code uses an extra trampoline to load - # to call the context-function and then do the _exit(0) dance. - # Extract the full address of the trampoline via pc relative addressing -1: - rd %pc, %l0 - add %l0, (trampoline - 1b - 8), %l0 - stx %l0, [%i0 + I7] - - # Save framepointer to first stack frame but first substract the BIAS - add %i0, CC64FSZ - BIAS, %l0 - stx %l0, [%i0 + SP] - - # Return context-data which is also includes the BIAS - ret - restore %i0, -BIAS, %o0 - -trampoline: - ldx [%sp + BIAS + I7], %l0 - - # no need to setup transfer_t, already in %o0 and %o1 - jmpl %l0, %o7 - nop - - call _exit - clr %o0 - unimp -.size make_fcontext,.-make_fcontext -# Mark that we don't need executable stack. -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/make_x86_64_ms_pe_clang_gas.S b/contrib/restricted/boost/context/src/asm/make_x86_64_ms_pe_clang_gas.S deleted file mode 100644 index 9b3a6fccf7..0000000000 --- a/contrib/restricted/boost/context/src/asm/make_x86_64_ms_pe_clang_gas.S +++ /dev/null @@ -1,174 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Copyright Thomas Sailer 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/************************************************************************************* -* ---------------------------------------------------------------------------------- * -* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * -* ---------------------------------------------------------------------------------- * -* | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * -* ---------------------------------------------------------------------------------- * -* | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * -* ---------------------------------------------------------------------------------- * -* | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * -* ---------------------------------------------------------------------------------- * -* | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | * -* ---------------------------------------------------------------------------------- * -* | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | * -* ---------------------------------------------------------------------------------- * -* | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc | * -* ---------------------------------------------------------------------------------- * -* | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | * -* ---------------------------------------------------------------------------------- * -* | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc | * -* ---------------------------------------------------------------------------------- * -* | limit | base | R12 | R13 | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | * -* ---------------------------------------------------------------------------------- * -* | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc | * -* ---------------------------------------------------------------------------------- * -* | R14 | R15 | RDI | RSI | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | * -* ---------------------------------------------------------------------------------- * -* | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c | * -* ---------------------------------------------------------------------------------- * -* | RBX | RBP | hidden | RIP | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | * -* ---------------------------------------------------------------------------------- * -* | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c | * -* ---------------------------------------------------------------------------------- * -* | parameter area | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | * -* ---------------------------------------------------------------------------------- * -* | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c | * -* ---------------------------------------------------------------------------------- * -* | FCTX | DATA | | * -* ---------------------------------------------------------------------------------- * -**************************************************************************************/ - -.file "make_x86_64_ms_pe_clang_gas.S" -.text -.p2align 4,,15 -.globl make_fcontext -.def make_fcontext; .scl 2; .type 32; .endef -.seh_proc make_fcontext -make_fcontext: -.seh_endprologue - - /* first arg of make_fcontext() == top of context-stack */ - movq %rcx, %rax - - /* shift address in RAX to lower 16 byte boundary */ - /* == pointer to fcontext_t and address of context stack */ - andq $-16, %rax - - /* reserve space for context-data on context-stack */ - /* on context-function entry: (RSP -0x8) % 16 == 0 */ - leaq -0x150(%rax), %rax - - /* third arg of make_fcontext() == address of context-function */ - movq %r8, 0x100(%rax) - - /* first arg of make_fcontext() == top of context-stack */ - /* save top address of context stack as 'base' */ - movq %rcx, 0xc8(%rax) - /* second arg of make_fcontext() == size of context-stack */ - /* negate stack size for LEA instruction (== substraction) */ - negq %rdx - /* compute bottom address of context stack (limit) */ - leaq (%rcx,%rdx), %rcx - /* save bottom address of context stack as 'limit' */ - movq %rcx, 0xc0(%rax) - /* save address of context stack limit as 'dealloction stack' */ - movq %rcx, 0xb8(%rax) - /* set fiber-storage to zero */ - xorq %rcx, %rcx - movq %rcx, 0xb0(%rax) - - /* save MMX control- and status-word */ - stmxcsr 0xa0(%rax) - /* save x87 control-word */ - fnstcw 0xa4(%rax) - - /* compute address of transport_t */ - leaq 0x140(%rax), %rcx - /* store address of transport_t in hidden field */ - movq %rcx, 0x110(%rax) - - /* compute abs address of label trampoline */ - leaq trampoline(%rip), %rcx - /* save address of finish as return-address for context-function */ - /* will be entered after jump_fcontext() first time */ - movq %rcx, 0x118(%rax) - - /* compute abs address of label finish */ - leaq finish(%rip), %rcx - /* save address of finish as return-address for context-function */ - /* will be entered after context-function returns */ - movq %rcx, 0x108(%rax) - - ret /* return pointer to context-data */ - -trampoline: - /* store return address on stack */ - /* fix stack alignment */ - pushq %rbp - /* jump to context-function */ - jmp *%rbx - -finish: - /* 32byte shadow-space for _exit() */ - andq $-32, %rsp - /* 32byte shadow-space for _exit() are */ - /* already reserved by make_fcontext() */ - /* exit code is zero */ - xorq %rcx, %rcx - /* exit application */ - call _exit - hlt -.seh_endproc - -.def _exit; .scl 2; .type 32; .endef /* standard C library function */ - -.section .drectve -.ascii " -export:\"make_fcontext\"" diff --git a/contrib/restricted/boost/context/src/asm/make_x86_64_ms_pe_gas.asm b/contrib/restricted/boost/context/src/asm/make_x86_64_ms_pe_gas.asm deleted file mode 100644 index 958a2a7b6d..0000000000 --- a/contrib/restricted/boost/context/src/asm/make_x86_64_ms_pe_gas.asm +++ /dev/null @@ -1,174 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Copyright Thomas Sailer 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/************************************************************************************* -* ---------------------------------------------------------------------------------- * -* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * -* ---------------------------------------------------------------------------------- * -* | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * -* ---------------------------------------------------------------------------------- * -* | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * -* ---------------------------------------------------------------------------------- * -* | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * -* ---------------------------------------------------------------------------------- * -* | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | * -* ---------------------------------------------------------------------------------- * -* | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | * -* ---------------------------------------------------------------------------------- * -* | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc | * -* ---------------------------------------------------------------------------------- * -* | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | * -* ---------------------------------------------------------------------------------- * -* | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc | * -* ---------------------------------------------------------------------------------- * -* | limit | base | R12 | R13 | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | * -* ---------------------------------------------------------------------------------- * -* | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc | * -* ---------------------------------------------------------------------------------- * -* | R14 | R15 | RDI | RSI | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | * -* ---------------------------------------------------------------------------------- * -* | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c | * -* ---------------------------------------------------------------------------------- * -* | RBX | RBP | hidden | RIP | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | * -* ---------------------------------------------------------------------------------- * -* | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c | * -* ---------------------------------------------------------------------------------- * -* | parameter area | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | * -* ---------------------------------------------------------------------------------- * -* | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c | * -* ---------------------------------------------------------------------------------- * -* | FCTX | DATA | | * -* ---------------------------------------------------------------------------------- * -**************************************************************************************/ - -.file "make_x86_64_ms_pe_gas.asm" -.text -.p2align 4,,15 -.globl make_fcontext -.def make_fcontext; .scl 2; .type 32; .endef -.seh_proc make_fcontext -make_fcontext: -.seh_endprologue - - /* first arg of make_fcontext() == top of context-stack */ - movq %rcx, %rax - - /* shift address in RAX to lower 16 byte boundary */ - /* == pointer to fcontext_t and address of context stack */ - andq $-16, %rax - - /* reserve space for context-data on context-stack */ - /* on context-function entry: (RSP -0x8) % 16 == 0 */ - leaq -0x150(%rax), %rax - - /* third arg of make_fcontext() == address of context-function */ - movq %r8, 0x100(%rax) - - /* first arg of make_fcontext() == top of context-stack */ - /* save top address of context stack as 'base' */ - movq %rcx, 0xc8(%rax) - /* second arg of make_fcontext() == size of context-stack */ - /* negate stack size for LEA instruction (== substraction) */ - negq %rdx - /* compute bottom address of context stack (limit) */ - leaq (%rcx,%rdx), %rcx - /* save bottom address of context stack as 'limit' */ - movq %rcx, 0xc0(%rax) - /* save address of context stack limit as 'dealloction stack' */ - movq %rcx, 0xb8(%rax) - /* set fiber-storage to zero */ - xorq %rcx, %rcx - movq %rcx, 0xb0(%rax) - - /* save MMX control- and status-word */ - stmxcsr 0xa0(%rax) - /* save x87 control-word */ - fnstcw 0xa4(%rax) - - /* compute address of transport_t */ - leaq 0x140(%rax), %rcx - /* store address of transport_t in hidden field */ - movq %rcx, 0x110(%rax) - - /* compute abs address of label trampoline */ - leaq trampoline(%rip), %rcx - /* save address of finish as return-address for context-function */ - /* will be entered after jump_fcontext() first time */ - movq %rcx, 0x118(%rax) - - /* compute abs address of label finish */ - leaq finish(%rip), %rcx - /* save address of finish as return-address for context-function */ - /* will be entered after context-function returns */ - movq %rcx, 0x108(%rax) - - ret /* return pointer to context-data */ - -trampoline: - /* store return address on stack */ - /* fix stack alignment */ - pushq %rbp - /* jump to context-function */ - jmp *%rbx - -finish: - /* 32byte shadow-space for _exit() */ - andq $-32, %rsp - /* 32byte shadow-space for _exit() are */ - /* already reserved by make_fcontext() */ - /* exit code is zero */ - xorq %rcx, %rcx - /* exit application */ - call _exit - hlt -.seh_endproc - -.def _exit; .scl 2; .type 32; .endef /* standard C library function */ - -.section .drectve -.ascii " -export:\"make_fcontext\"" diff --git a/contrib/restricted/boost/context/src/asm/make_x86_64_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/make_x86_64_sysv_elf_gas.S index b0d0c0341e..7561c0896b 100644 --- a/contrib/restricted/boost/context/src/asm/make_x86_64_sysv_elf_gas.S +++ b/contrib/restricted/boost/context/src/asm/make_x86_64_sysv_elf_gas.S @@ -44,6 +44,7 @@ .file "make_x86_64_sysv_elf_gas.S" .text .globl make_fcontext +.hidden make_fcontext .type make_fcontext,@function .align 16 make_fcontext: @@ -92,35 +93,6 @@ make_fcontext: movq %rcx, 0x38(%rax) #if BOOST_CONTEXT_SHADOW_STACK - /* Populate the shadow stack and normal stack */ - /* get original SSP */ - rdsspq %r8 - /* restore new shadow stack */ - rstorssp -0x8(%r9) - /* save the restore token on the original shadow stack */ - saveprevssp - /* push the address of "jmp trampoline" to the new shadow stack */ - /* as well as the stack */ - call 1f - jmp trampoline -1: - /* save address of "jmp trampoline" as return-address */ - /* for context-function */ - pop 0x38(%rax) - /* Get the new SSP. */ - rdsspq %r9 - /* restore original shadow stack */ - rstorssp -0x8(%r8) - /* save the restore token on the new shadow stack. */ - saveprevssp - - /* reserve space for the new SSP */ - leaq -0x8(%rax), %rax - /* save the new SSP to this fcontext */ - movq %r9, (%rax) -#endif - -#if BOOST_CONTEXT_SHADOW_STACK /* Populate the shadow stack */ /* get original SSP */ diff --git a/contrib/restricted/boost/context/src/asm/make_x86_64_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/make_x86_64_sysv_macho_gas.S index 5d6c5431c5..06357f678a 100644 --- a/contrib/restricted/boost/context/src/asm/make_x86_64_sysv_macho_gas.S +++ b/contrib/restricted/boost/context/src/asm/make_x86_64_sysv_macho_gas.S @@ -25,6 +25,7 @@ ****************************************************************************************/ .text +.private_extern _make_fcontext .globl _make_fcontext .align 8 _make_fcontext: diff --git a/contrib/restricted/boost/context/src/asm/ontop_arm64_aapcs_elf_gas.S b/contrib/restricted/boost/context/src/asm/ontop_arm64_aapcs_elf_gas.S index 665ca5a2c1..8e40fc7d36 100644 --- a/contrib/restricted/boost/context/src/asm/ontop_arm64_aapcs_elf_gas.S +++ b/contrib/restricted/boost/context/src/asm/ontop_arm64_aapcs_elf_gas.S @@ -55,6 +55,7 @@ .text .align 2 .global ontop_fcontext +.hidden ontop_fcontext .type ontop_fcontext, %function ontop_fcontext: # prepare stack for GP + FPU diff --git a/contrib/restricted/boost/context/src/asm/ontop_arm64_aapcs_macho_gas.S b/contrib/restricted/boost/context/src/asm/ontop_arm64_aapcs_macho_gas.S index a387d06dd2..8babe47023 100644 --- a/contrib/restricted/boost/context/src/asm/ontop_arm64_aapcs_macho_gas.S +++ b/contrib/restricted/boost/context/src/asm/ontop_arm64_aapcs_macho_gas.S @@ -52,6 +52,7 @@ *******************************************************/ .text +.private_extern _ontop_fcontext .global _ontop_fcontext .balign 16 _ontop_fcontext: diff --git a/contrib/restricted/boost/context/src/asm/ontop_arm_aapcs_elf_gas.S b/contrib/restricted/boost/context/src/asm/ontop_arm_aapcs_elf_gas.S index 59ad5ca9ce..8c6c9020de 100644 --- a/contrib/restricted/boost/context/src/asm/ontop_arm_aapcs_elf_gas.S +++ b/contrib/restricted/boost/context/src/asm/ontop_arm_aapcs_elf_gas.S @@ -41,6 +41,7 @@ .file "ontop_arm_aapcs_elf_gas.S" .text .globl ontop_fcontext +.hidden ontop_fcontext .align 2 .type ontop_fcontext,%function .syntax unified diff --git a/contrib/restricted/boost/context/src/asm/ontop_arm_aapcs_macho_gas.S b/contrib/restricted/boost/context/src/asm/ontop_arm_aapcs_macho_gas.S index 3633aca641..07e63fb24f 100644 --- a/contrib/restricted/boost/context/src/asm/ontop_arm_aapcs_macho_gas.S +++ b/contrib/restricted/boost/context/src/asm/ontop_arm_aapcs_macho_gas.S @@ -39,6 +39,7 @@ *******************************************************/ .text +.private_extern _ontop_fcontext .globl _ontop_fcontext .align 2 _ontop_fcontext: diff --git a/contrib/restricted/boost/context/src/asm/ontop_combined_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/ontop_combined_sysv_macho_gas.S deleted file mode 100644 index 7d254de22c..0000000000 --- a/contrib/restricted/boost/context/src/asm/ontop_combined_sysv_macho_gas.S +++ /dev/null @@ -1,24 +0,0 @@ -/* - Copyright Sergue E. Leontiev 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -// Stub file for universal binary - -#if defined(__i386__) - #include "ontop_i386_sysv_macho_gas.S" -#elif defined(__x86_64__) - #include "ontop_x86_64_sysv_macho_gas.S" -#elif defined(__ppc__) - #include "ontop_ppc32_sysv_macho_gas.S" -#elif defined(__ppc64__) - #include "ontop_ppc64_sysv_macho_gas.S" -#elif defined(__arm__) - #include "ontop_arm_aapcs_macho_gas.S" -#elif defined(__arm64__) - #include "ontop_arm64_aapcs_macho_gas.S" -#else - #error "No arch's" -#endif diff --git a/contrib/restricted/boost/context/src/asm/ontop_i386_ms_pe_clang_gas.S b/contrib/restricted/boost/context/src/asm/ontop_i386_ms_pe_clang_gas.S deleted file mode 100644 index 16eb33e1a7..0000000000 --- a/contrib/restricted/boost/context/src/asm/ontop_i386_ms_pe_clang_gas.S +++ /dev/null @@ -1,131 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Copyright Thomas Sailer 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/************************************************************************************* -* --------------------------------------------------------------------------------- * -* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * -* --------------------------------------------------------------------------------- * -* | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch | * -* --------------------------------------------------------------------------------- * -* | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI | * -* --------------------------------------------------------------------------------- * -* --------------------------------------------------------------------------------- * -* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * -* --------------------------------------------------------------------------------- * -* | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch | * -* --------------------------------------------------------------------------------- * -* | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR| * -* --------------------------------------------------------------------------------- * -**************************************************************************************/ - -.file "ontop_i386_ms_pe_clang_gas.S" -.text -.p2align 4,,15 - -/* mark as using no unregistered SEH handlers */ -.globl @feat.00 -.def @feat.00; .scl 3; .type 0; .endef -.set @feat.00, 1 - -.globl _ontop_fcontext -.def _ontop_fcontext; .scl 2; .type 32; .endef -_ontop_fcontext: - /* prepare stack */ - leal -0x2c(%esp), %esp - -#if !defined(BOOST_USE_TSX) - /* save MMX control- and status-word */ - stmxcsr (%esp) - /* save x87 control-word */ - fnstcw 0x4(%esp) -#endif - - /* load NT_TIB */ - movl %fs:(0x18), %edx - /* load fiber local storage */ - movl 0x10(%edx), %eax - movl %eax, 0x8(%esp) - /* load current dealloction stack */ - movl 0xe0c(%edx), %eax - movl %eax, 0xc(%esp) - /* load current stack limit */ - movl 0x8(%edx), %eax - movl %eax, 0x10(%esp) - /* load current stack base */ - movl 0x4(%edx), %eax - movl %eax, 0x14(%esp) - /* load current SEH exception list */ - movl (%edx), %eax - movl %eax, 0x18(%esp) - - movl %edi, 0x1c(%esp) /* save EDI */ - movl %esi, 0x20(%esp) /* save ESI */ - movl %ebx, 0x24(%esp) /* save EBX */ - movl %ebp, 0x28(%esp) /* save EBP */ - - /* store ESP (pointing to context-data) in ECX */ - movl %esp, %ecx - - /* first arg of ontop_fcontext() == fcontext to jump to */ - movl 0x30(%esp), %eax - - /* pass parent fcontext_t */ - movl %ecx, 0x30(%eax) - - /* second arg of ontop_fcontext() == data to be transferred */ - movl 0x34(%esp), %ecx - - /* pass data */ - movl %ecx, 0x34(%eax) - - /* third arg of ontop_fcontext() == ontop-function */ - movl 0x38(%esp), %ecx - - /* restore ESP (pointing to context-data) from EDX */ - movl %eax, %esp - -#if !defined(BOOST_USE_TSX) - /* restore MMX control- and status-word */ - ldmxcsr (%esp) - /* restore x87 control-word */ - fldcw 0x4(%esp) -#endif - - /* restore NT_TIB into EDX */ - movl %fs:(0x18), %edx - /* restore fiber local storage */ - movl 0x8(%esp), %eax - movl %eax, 0x10(%edx) - /* restore current deallocation stack */ - movl 0xc(%esp), %eax - movl %eax, 0xe0c(%edx) - /* restore current stack limit */ - movl 0x10(%esp), %eax - movl %eax, 0x08(%edx) - /* restore current stack base */ - movl 0x14(%esp), %eax - movl %eax, 0x04(%edx) - /* restore current SEH exception list */ - movl 0x18(%esp), %eax - movl %eax, (%edx) - - movl 0x1c(%esp), %edi /* restore EDI */ - movl 0x20(%esp), %esi /* restore ESI */ - movl 0x24(%esp), %ebx /* restore EBX */ - movl 0x28(%esp), %ebp /* restore EBP */ - - /* prepare stack */ - leal 0x2c(%esp), %esp - - /* keep return-address on stack */ - - /* jump to context */ - jmp *%ecx - -.section .drectve -.ascii " -export:\"_ontop_fcontext\"" diff --git a/contrib/restricted/boost/context/src/asm/ontop_i386_ms_pe_gas.asm b/contrib/restricted/boost/context/src/asm/ontop_i386_ms_pe_gas.asm deleted file mode 100644 index abe9002a4b..0000000000 --- a/contrib/restricted/boost/context/src/asm/ontop_i386_ms_pe_gas.asm +++ /dev/null @@ -1,131 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Copyright Thomas Sailer 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/************************************************************************************* -* --------------------------------------------------------------------------------- * -* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * -* --------------------------------------------------------------------------------- * -* | 0h | 04h | 08h | 0ch | 010h | 014h | 018h | 01ch | * -* --------------------------------------------------------------------------------- * -* | fc_mxcsr|fc_x87_cw| fc_strg |fc_deallo| limit | base | fc_seh | EDI | * -* --------------------------------------------------------------------------------- * -* --------------------------------------------------------------------------------- * -* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * -* --------------------------------------------------------------------------------- * -* | 020h | 024h | 028h | 02ch | 030h | 034h | 038h | 03ch | * -* --------------------------------------------------------------------------------- * -* | ESI | EBX | EBP | EIP | to | data | EH NXT |SEH HNDLR| * -* --------------------------------------------------------------------------------- * -**************************************************************************************/ - -.file "ontop_i386_ms_pe_gas.asm" -.text -.p2align 4,,15 - -/* mark as using no unregistered SEH handlers */ -.globl @feat.00 -.def @feat.00; .scl 3; .type 0; .endef -.set @feat.00, 1 - -.globl _ontop_fcontext -.def _ontop_fcontext; .scl 2; .type 32; .endef -_ontop_fcontext: - /* prepare stack */ - leal -0x2c(%esp), %esp - -#if !defined(BOOST_USE_TSX) - /* save MMX control- and status-word */ - stmxcsr (%esp) - /* save x87 control-word */ - fnstcw 0x4(%esp) -#endif - - /* load NT_TIB */ - movl %fs:(0x18), %edx - /* load fiber local storage */ - movl 0x10(%edx), %eax - movl %eax, 0x8(%esp) - /* load current dealloction stack */ - movl 0xe0c(%edx), %eax - movl %eax, 0xc(%esp) - /* load current stack limit */ - movl 0x8(%edx), %eax - movl %eax, 0x10(%esp) - /* load current stack base */ - movl 0x4(%edx), %eax - movl %eax, 0x14(%esp) - /* load current SEH exception list */ - movl (%edx), %eax - movl %eax, 0x18(%esp) - - movl %edi, 0x1c(%esp) /* save EDI */ - movl %esi, 0x20(%esp) /* save ESI */ - movl %ebx, 0x24(%esp) /* save EBX */ - movl %ebp, 0x28(%esp) /* save EBP */ - - /* store ESP (pointing to context-data) in ECX */ - movl %esp, %ecx - - /* first arg of ontop_fcontext() == fcontext to jump to */ - movl 0x30(%esp), %eax - - /* pass parent fcontext_t */ - movl %ecx, 0x30(%eax) - - /* second arg of ontop_fcontext() == data to be transferred */ - movl 0x34(%esp), %ecx - - /* pass data */ - movl %ecx, 0x34(%eax) - - /* third arg of ontop_fcontext() == ontop-function */ - movl 0x38(%esp), %ecx - - /* restore ESP (pointing to context-data) from EDX */ - movl %eax, %esp - -#if !defined(BOOST_USE_TSX) - /* restore MMX control- and status-word */ - ldmxcsr (%esp) - /* restore x87 control-word */ - fldcw 0x4(%esp) -#endif - - /* restore NT_TIB into EDX */ - movl %fs:(0x18), %edx - /* restore fiber local storage */ - movl 0x8(%esp), %eax - movl %eax, 0x10(%edx) - /* restore current deallocation stack */ - movl 0xc(%esp), %eax - movl %eax, 0xe0c(%edx) - /* restore current stack limit */ - movl 0x10(%esp), %eax - movl %eax, 0x08(%edx) - /* restore current stack base */ - movl 0x14(%esp), %eax - movl %eax, 0x04(%edx) - /* restore current SEH exception list */ - movl 0x18(%esp), %eax - movl %eax, (%edx) - - movl 0x1c(%esp), %edi /* restore EDI */ - movl 0x20(%esp), %esi /* restore ESI */ - movl 0x24(%esp), %ebx /* restore EBX */ - movl 0x28(%esp), %ebp /* restore EBP */ - - /* prepare stack */ - leal 0x2c(%esp), %esp - - /* keep return-address on stack */ - - /* jump to context */ - jmp *%ecx - -.section .drectve -.ascii " -export:\"ontop_fcontext\"" diff --git a/contrib/restricted/boost/context/src/asm/ontop_i386_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/ontop_i386_sysv_elf_gas.S index 0cb6168fab..ea7a75b90f 100644 --- a/contrib/restricted/boost/context/src/asm/ontop_i386_sysv_elf_gas.S +++ b/contrib/restricted/boost/context/src/asm/ontop_i386_sysv_elf_gas.S @@ -24,9 +24,14 @@ * * ****************************************************************************************/ +#ifdef __x86_64__ +#include "ontop_x86_64_sysv_elf_gas.S" +#else + .file "ontop_i386_sysv_elf_gas.S" .text .globl ontop_fcontext +.hidden ontop_fcontext .align 2 .type ontop_fcontext,@function ontop_fcontext: @@ -98,3 +103,5 @@ ontop_fcontext: /* Mark that we don't need executable stack. */ .section .note.GNU-stack,"",%progbits + +#endif diff --git a/contrib/restricted/boost/context/src/asm/ontop_i386_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/ontop_i386_sysv_macho_gas.S index 3a88372b3a..c129e8e0c7 100644 --- a/contrib/restricted/boost/context/src/asm/ontop_i386_sysv_macho_gas.S +++ b/contrib/restricted/boost/context/src/asm/ontop_i386_sysv_macho_gas.S @@ -25,6 +25,7 @@ ****************************************************************************************/ .text +.private_extern _ontop_fcontext .globl _ontop_fcontext .align 2 _ontop_fcontext: diff --git a/contrib/restricted/boost/context/src/asm/ontop_i386_x86_64_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/ontop_i386_x86_64_sysv_macho_gas.S deleted file mode 100644 index 393c5fe43e..0000000000 --- a/contrib/restricted/boost/context/src/asm/ontop_i386_x86_64_sysv_macho_gas.S +++ /dev/null @@ -1,16 +0,0 @@ -/* - Copyright Sergue E. Leontiev 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -// Stub file for universal binary - -#if defined(__i386__) - #include "ontop_i386_sysv_macho_gas.S" -#elif defined(__x86_64__) - #include "ontop_x86_64_sysv_macho_gas.S" -#else - #error "No arch's" -#endif diff --git a/contrib/restricted/boost/context/src/asm/ontop_loongarch64_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/ontop_loongarch64_sysv_elf_gas.S deleted file mode 100644 index c6ea044857..0000000000 --- a/contrib/restricted/boost/context/src/asm/ontop_loongarch64_sysv_elf_gas.S +++ /dev/null @@ -1,118 +0,0 @@ -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 8 | 16 | 24 | * - * ------------------------------------------------- * - * | FS0 | FS1 | FS2 | FS3 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 40 | 48 | 56 | * - * ------------------------------------------------- * - * | FS4 | FS5 | FS6 | FS7 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 72 | 80 | 88 | * - * ------------------------------------------------- * - * | S0 | S1 | S2 | S3 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | S4 | S5 | S6 | S7 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | S8 | FP | RA | PC | * - * ------------------------------------------------- * - * * - * *****************************************************/ - -.file "ontop_loongarch64_sysv_elf_gas.S" -.text -.globl ontop_fcontext -.align 2 -.type ontop_fcontext,@function -ontop_fcontext: - # reserve space on stack - addi.d $sp, $sp, -160 - - # save fs0 - fs7 - fst.d $fs0, $sp, 0 - fst.d $fs1, $sp, 8 - fst.d $fs2, $sp, 16 - fst.d $fs3, $sp, 24 - fst.d $fs4, $sp, 32 - fst.d $fs5, $sp, 40 - fst.d $fs6, $sp, 48 - fst.d $fs7, $sp, 56 - - # save s0 - s8, fp, ra - st.d $s0, $sp, 64 - st.d $s1, $sp, 72 - st.d $s2, $sp, 80 - st.d $s3, $sp, 88 - st.d $s4, $sp, 96 - st.d $s5, $sp, 104 - st.d $s6, $sp, 112 - st.d $s7, $sp, 120 - st.d $s8, $sp, 128 - st.d $fp, $sp, 136 - st.d $ra, $sp, 144 - - # save RA as PC - st.d $ra, $sp, 152 - - # store SP (pointing to context-data) in A3 - move $a3, $sp - - # restore SP (pointing to context-data) from A0 - move $sp, $a0 - - # load fs0 - fs11 - fld.d $fs0, $sp, 0 - fld.d $fs1, $sp, 8 - fld.d $fs2, $sp, 16 - fld.d $fs3, $sp, 24 - fld.d $fs4, $sp, 32 - fld.d $fs5, $sp, 40 - fld.d $fs6, $sp, 48 - fld.d $fs7, $sp, 56 - - #load s0 - s11, fp, ra - ld.d $s0, $sp, 64 - ld.d $s1, $sp, 72 - ld.d $s2, $sp, 80 - ld.d $s3, $sp, 88 - ld.d $s4, $sp, 96 - ld.d $s5, $sp, 104 - ld.d $s6, $sp, 112 - ld.d $s7, $sp, 120 - ld.d $s8, $sp, 128 - ld.d $fp, $sp, 136 - ld.d $ra, $sp, 144 - - # return transfer_t from jump - # pass transfer_t as first arg in context function - # a0 == FCTX, a1 == DATA - move $a0, $a3 - - # adjust stack - addi.d $sp, $sp, 160 - - # jump to context - jr $a2 -.size ontop_fcontext, .-ontop_fcontext - -/* Mark that we don't need executable stack. */ -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/ontop_mips32_o32_elf_gas.S b/contrib/restricted/boost/context/src/asm/ontop_mips32_o32_elf_gas.S deleted file mode 100644 index c69203c655..0000000000 --- a/contrib/restricted/boost/context/src/asm/ontop_mips32_o32_elf_gas.S +++ /dev/null @@ -1,120 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * | F20 | F22 | F24 | F26 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | F28 | F30 | S0 | S1 | S2 | S3 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | S4 | S5 | S6 | S7 | FP |hiddn| RA | PC | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | ABI ARGS | GP | FCTX| DATA| | * - * ------------------------------------------------- * - * * - * *****************************************************/ - -.file "ontop_mips32_o32_elf_gas.S" -.text -.globl ontop_fcontext -.align 2 -.type ontop_fcontext,@function -.ent ontop_fcontext -ontop_fcontext: - # reserve space on stack - addiu $sp, $sp, -96 - - sw $s0, 48($sp) # save S0 - sw $s1, 52($sp) # save S1 - sw $s2, 56($sp) # save S2 - sw $s3, 60($sp) # save S3 - sw $s4, 64($sp) # save S4 - sw $s5, 68($sp) # save S5 - sw $s6, 72($sp) # save S6 - sw $s7, 76($sp) # save S7 - sw $fp, 80($sp) # save FP - sw $a0, 84($sp) # save hidden, address of returned transfer_t - sw $ra, 88($sp) # save RA - sw $ra, 92($sp) # save RA as PC - -#if defined(__mips_hard_float) - s.d $f20, ($sp) # save F20 - s.d $f22, 8($sp) # save F22 - s.d $f24, 16($sp) # save F24 - s.d $f26, 24($sp) # save F26 - s.d $f28, 32($sp) # save F28 - s.d $f30, 40($sp) # save F30 -#endif - - # store SP (pointing to context-data) in A0 - move $a0, $sp - - # restore SP (pointing to context-data) from A1 - move $sp, $a1 - -#if defined(__mips_hard_float) - l.d $f20, ($sp) # restore F20 - l.d $f22, 8($sp) # restore F22 - l.d $f24, 16($sp) # restore F24 - l.d $f26, 24($sp) # restore F26 - l.d $f28, 32($sp) # restore F28 - l.d $f30, 40($sp) # restore F30 -#endif - - lw $s0, 48($sp) # restore S0 - lw $s1, 52($sp) # restore S1 - lw $s2, 56($sp) # restore S2 - lw $s3, 60($sp) # restore S3 - lw $s4, 64($sp) # restore S4 - lw $s5, 68($sp) # restore S5 - lw $s6, 72($sp) # restore S6 - lw $s7, 76($sp) # restore S7 - lw $fp, 80($sp) # restore FP - lw $v0, 84($sp) # restore hidden, address of returned transfer_t - lw $ra, 88($sp) # restore RA - - # load PC - move $t9, $a3 - - # adjust stack - addiu $sp, $sp, 96 - - # return transfer_t from jump - sw $a0, ($v0) # fctx of transfer_t - sw $a2, 4($v0) # data of transfer_t - # pass transfer_t as first arg in context function - # A0 == hidden, A1 == fctx, A2 == data - move $a1, $a0 - move $a0, $v0 - - # jump to context - jr $t9 -.end ontop_fcontext -.size ontop_fcontext, .-ontop_fcontext - -/* Mark that we don't need executable stack. */ -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/ontop_mips64_n64_elf_gas.S b/contrib/restricted/boost/context/src/asm/ontop_mips64_n64_elf_gas.S deleted file mode 100644 index 68087b0521..0000000000 --- a/contrib/restricted/boost/context/src/asm/ontop_mips64_n64_elf_gas.S +++ /dev/null @@ -1,123 +0,0 @@ -/* - Copyright Jiaxun Yang 2018. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 8 | 16 | 24 | * - * ------------------------------------------------- * - * | F24 | F25 | F26 | F27 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 40 | 48 | 56 | * - * ------------------------------------------------- * - * | F28 | F29 | F30 | F31 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 72 | 80 | 88 | * - * ------------------------------------------------- * - * | S0 | S1 | S2 | S3 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | S4 | S5 | S6 | S7 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | FP | GP | RA | PC | * - * ------------------------------------------------- * - * * - * *****************************************************/ - -.file "ontop_mips64_n64_elf_gas.S" -.text -.globl ontop_fcontext -.align 3 -.type ontop_fcontext,@function -.ent ontop_fcontext -ontop_fcontext: - # reserve space on stack - daddiu $sp, $sp, -160 - - sd $s0, 64($sp) # save S0 - sd $s1, 72($sp) # save S1 - sd $s2, 80($sp) # save S2 - sd $s3, 88($sp) # save S3 - sd $s4, 96($sp) # save S4 - sd $s5, 104($sp) # save S5 - sd $s6, 112($sp) # save S6 - sd $s7, 120($sp) # save S7 - sd $fp, 128($sp) # save FP - sd $ra, 144($sp) # save RA - sd $ra, 152($sp) # save RA as PC - -#if defined(__mips_hard_float) - s.d $f24, 0($sp) # save F24 - s.d $f25, 8($sp) # save F25 - s.d $f26, 16($sp) # save F26 - s.d $f27, 24($sp) # save F27 - s.d $f28, 32($sp) # save F28 - s.d $f29, 40($sp) # save F29 - s.d $f30, 48($sp) # save F30 - s.d $f31, 56($sp) # save F31 -#endif - - # store SP (pointing to context-data) in t0 - move $t0, $sp - - # restore SP (pointing to context-data) from a0 - move $sp, $a0 - -#if defined(__mips_hard_float) - l.d $f24, 0($sp) # restore F24 - l.d $f25, 8($sp) # restore F25 - l.d $f26, 16($sp) # restore F26 - l.d $f27, 24($sp) # restore F27 - l.d $f28, 32($sp) # restore F28 - l.d $f29, 40($sp) # restore F29 - l.d $f30, 48($sp) # restore F30 - l.d $f31, 56($sp) # restore F31 -#endif - - ld $s0, 64($sp) # restore S0 - ld $s1, 72($sp) # restore S1 - ld $s2, 80($sp) # restore S2 - ld $s3, 88($sp) # restore S3 - ld $s4, 96($sp) # restore S4 - ld $s5, 104($sp) # restore S5 - ld $s6, 112($sp) # restore S6 - ld $s7, 120($sp) # restore S7 - ld $fp, 128($sp) # restore FP - ld $ra, 144($sp) # restore RA - - # load PC - move $t9, $a2 - - # adjust stack - daddiu $sp, $sp, 160 - - move $a0, $t0 # move param from t0 to a0 as param - - # jump to context - jr $t9 -.end ontop_fcontext -.size ontop_fcontext, .-ontop_fcontext - -/* Mark that we don't need executable stack. */ -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/ontop_ppc32_ppc64_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/ontop_ppc32_ppc64_sysv_macho_gas.S deleted file mode 100644 index 4632f4cc9e..0000000000 --- a/contrib/restricted/boost/context/src/asm/ontop_ppc32_ppc64_sysv_macho_gas.S +++ /dev/null @@ -1,16 +0,0 @@ -/* - Copyright Sergue E. Leontiev 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -// Stub file for universal binary - -#if defined(__ppc__) - #include "ontop_ppc32_sysv_macho_gas.S" -#elif defined(__ppc64__) - #include "ontop_ppc64_sysv_macho_gas.S" -#else - #error "No arch's" -#endif diff --git a/contrib/restricted/boost/context/src/asm/ontop_ppc32_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/ontop_ppc32_sysv_elf_gas.S deleted file mode 100644 index 464d99d59d..0000000000 --- a/contrib/restricted/boost/context/src/asm/ontop_ppc32_sysv_elf_gas.S +++ /dev/null @@ -1,193 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * |bchai|hiddn| fpscr | PC | CR | R14 | R15 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | R16 | R17 | R18 | R19 | R20 | R21 | R22 | R23 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | R24 | R25 | R26 | R27 | R28 | R29 | R30 | R31 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | F14 | F15 | F16 | F17 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | F18 | F19 | F20 | F21 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | * - * ------------------------------------------------- * - * | F22 | F23 | F24 | F25 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * - * ------------------------------------------------- * - * | F26 | F27 | F28 | F29 | * - * ------------------------------------------------- * - * ------------------------|------------ * - * | 224 | 228 | 232 | 236 | 240 | 244 | * - * ------------------------|------------ * - * | F30 | F31 |bchai| LR | * - * ------------------------|------------ * - * * - *******************************************************/ - -.file "ontop_ppc32_sysv_elf_gas.S" -.text -.globl ontop_fcontext -.align 2 -.type ontop_fcontext,@function -ontop_fcontext: - # Linux: ontop_fcontext( hidden transfer_t * R3, R4, R5, R6) - # Other: transfer_t R3:R4 = jump_fcontext( R3, R4, R5) - - mflr %r0 # return address from LR - mffs %f0 # FPSCR - mfcr %r8 # condition register - - stwu %r1, -240(%r1) # allocate stack space, R1 % 16 == 0 - stw %r0, 244(%r1) # save LR in caller's frame - -#ifdef __linux__ - stw %r3, 4(%r1) # hidden pointer -#endif - - stfd %f0, 8(%r1) # FPSCR - stw %r0, 16(%r1) # LR as PC - stw %r8, 20(%r1) # CR - - # Save registers R14 to R31. - # Don't change R2, the thread-local storage pointer. - # Don't change R13, the small data pointer. - stw %r14, 24(%r1) - stw %r15, 28(%r1) - stw %r16, 32(%r1) - stw %r17, 36(%r1) - stw %r18, 40(%r1) - stw %r19, 44(%r1) - stw %r20, 48(%r1) - stw %r21, 52(%r1) - stw %r22, 56(%r1) - stw %r23, 60(%r1) - stw %r24, 64(%r1) - stw %r25, 68(%r1) - stw %r26, 72(%r1) - stw %r27, 76(%r1) - stw %r28, 80(%r1) - stw %r29, 84(%r1) - stw %r30, 88(%r1) - stw %r31, 92(%r1) - - # Save registers F14 to F31 in slots with 8-byte alignment. - # 4-byte alignment may stall the pipeline of some processors. - # Less than 4 may cause alignment traps. - stfd %f14, 96(%r1) - stfd %f15, 104(%r1) - stfd %f16, 112(%r1) - stfd %f17, 120(%r1) - stfd %f18, 128(%r1) - stfd %f19, 136(%r1) - stfd %f20, 144(%r1) - stfd %f21, 152(%r1) - stfd %f22, 160(%r1) - stfd %f23, 168(%r1) - stfd %f24, 176(%r1) - stfd %f25, 184(%r1) - stfd %f26, 192(%r1) - stfd %f27, 200(%r1) - stfd %f28, 208(%r1) - stfd %f29, 216(%r1) - stfd %f30, 224(%r1) - stfd %f31, 232(%r1) - - # store RSP (pointing to context-data) in R7/R6 - # restore RSP (pointing to context-data) from R4/R3 -#ifdef __linux__ - mr %r7, %r1 - mr %r1, %r4 - lwz %r3, 4(%r1) # hidden pointer -#else - mr %r6, %r1 - mr %r1, %r3 -#endif - - # ignore PC at 16(%r1) - lfd %f0, 8(%r1) # FPSCR - lwz %r8, 20(%r1) # CR - - mtfsf 0xff, %f0 # restore FPSCR - mtcr %r8 # restore CR - - # restore R14 to R31 - lwz %r14, 24(%r1) - lwz %r15, 28(%r1) - lwz %r16, 32(%r1) - lwz %r17, 36(%r1) - lwz %r18, 40(%r1) - lwz %r19, 44(%r1) - lwz %r20, 48(%r1) - lwz %r21, 52(%r1) - lwz %r22, 56(%r1) - lwz %r23, 60(%r1) - lwz %r24, 64(%r1) - lwz %r25, 68(%r1) - lwz %r26, 72(%r1) - lwz %r27, 76(%r1) - lwz %r28, 80(%r1) - lwz %r29, 84(%r1) - lwz %r30, 88(%r1) - lwz %r31, 92(%r1) - - # restore F14 to F31 - lfd %f14, 96(%r1) - lfd %f15, 104(%r1) - lfd %f16, 112(%r1) - lfd %f17, 120(%r1) - lfd %f18, 128(%r1) - lfd %f19, 136(%r1) - lfd %f20, 144(%r1) - lfd %f21, 152(%r1) - lfd %f22, 160(%r1) - lfd %f23, 168(%r1) - lfd %f24, 176(%r1) - lfd %f25, 184(%r1) - lfd %f26, 192(%r1) - lfd %f27, 200(%r1) - lfd %f28, 208(%r1) - lfd %f29, 216(%r1) - lfd %f30, 224(%r1) - lfd %f31, 232(%r1) - - # restore LR from caller's frame - lwz %r0, 244(%r1) - mtlr %r0 - - # adjust stack - addi %r1, %r1, 240 - - # see tail_ppc32_sysv_elf_gas.cpp - # Linux: fcontext_ontop_tail( hidden transfer_t * R3, R4, R5, R6, R7) - # Other: transfer_t R3:R4 = fcontext_ontop_tail( R3, R4, R5, R6) - b ontop_fcontext_tail -.size ontop_fcontext, .-ontop_fcontext - -/* Mark that we don't need executable stack. */ -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/ontop_ppc32_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/ontop_ppc32_sysv_macho_gas.S deleted file mode 100644 index a74617172c..0000000000 --- a/contrib/restricted/boost/context/src/asm/ontop_ppc32_sysv_macho_gas.S +++ /dev/null @@ -1,201 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/****************************************************** - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * | F14 | F15 | F16 | F17 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | F18 | F19 | F20 | F21 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | F22 | F23 | F24 | F25 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | F26 | F27 | F28 | F29 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | F30 | F31 | fpscr | R13 | R14 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | * - * ------------------------------------------------- * - * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | * - * ------------------------------------------------- * - * | R15 | R16 | R17 | R18 | R19 | R20 | R21 | R22 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | * - * ------------------------------------------------- * - * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * - * ------------------------------------------------- * - * | R23 | R24 | R25 | R26 | R27 | R28 | R29 | R30 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | * - * ------------------------------------------------- * - * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | * - * ------------------------------------------------- * - * | R31 |hiddn| CR | LR | PC |bchai|linkr| FCTX| * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 64 | | * - * ------------------------------------------------- * - * | 256 | | * - * ------------------------------------------------- * - * | DATA| | * - * ------------------------------------------------- * - * * - *******************************************************/ - -.text -.globl _ontop_fcontext -.align 2 -_ontop_fcontext: - ; reserve space on stack - subi r1, r1, 244 - - stfd f14, 0(r1) ; save F14 - stfd f15, 8(r1) ; save F15 - stfd f16, 16(r1) ; save F16 - stfd f17, 24(r1) ; save F17 - stfd f18, 32(r1) ; save F18 - stfd f19, 40(r1) ; save F19 - stfd f20, 48(r1) ; save F20 - stfd f21, 56(r1) ; save F21 - stfd f22, 64(r1) ; save F22 - stfd f23, 72(r1) ; save F23 - stfd f24, 80(r1) ; save F24 - stfd f25, 88(r1) ; save F25 - stfd f26, 96(r1) ; save F26 - stfd f27, 104(r1) ; save F27 - stfd f28, 112(r1) ; save F28 - stfd f29, 120(r1) ; save F29 - stfd f30, 128(r1) ; save F30 - stfd f31, 136(r1) ; save F31 - mffs f0 ; load FPSCR - stfd f0, 144(r1) ; save FPSCR - - stw r13, 152(r1) ; save R13 - stw r14, 156(r1) ; save R14 - stw r15, 160(r1) ; save R15 - stw r16, 164(r1) ; save R16 - stw r17, 168(r1) ; save R17 - stw r18, 172(r1) ; save R18 - stw r19, 176(r1) ; save R19 - stw r20, 180(r1) ; save R20 - stw r21, 184(r1) ; save R21 - stw r22, 188(r1) ; save R22 - stw r23, 192(r1) ; save R23 - stw r24, 196(r1) ; save R24 - stw r25, 200(r1) ; save R25 - stw r26, 204(r1) ; save R26 - stw r27, 208(r1) ; save R27 - stw r28, 212(r1) ; save R28 - stw r29, 216(r1) ; save R29 - stw r30, 220(r1) ; save R30 - stw r31, 224(r1) ; save R31 - stw r3, 228(r1) ; save hidden - - ; save CR - mfcr r0 - stw r0, 232(r1) - ; save LR - mflr r0 - stw r0, 236(r1) - ; save LR as PC - stw r0, 240(r1) - - ; store RSP (pointing to context-data) in R7 - mr r7, r1 - - ; restore RSP (pointing to context-data) from R4 - mr r1, r4 - - lfd f14, 0(r1) ; restore F14 - lfd f15, 8(r1) ; restore F15 - lfd f16, 16(r1) ; restore F16 - lfd f17, 24(r1) ; restore F17 - lfd f18, 32(r1) ; restore F18 - lfd f19, 40(r1) ; restore F19 - lfd f20, 48(r1) ; restore F20 - lfd f21, 56(r1) ; restore F21 - lfd f22, 64(r1) ; restore F22 - lfd f23, 72(r1) ; restore F23 - lfd f24, 80(r1) ; restore F24 - lfd f25, 88(r1) ; restore F25 - lfd f26, 96(r1) ; restore F26 - lfd f27, 104(r1) ; restore F27 - lfd f28, 112(r1) ; restore F28 - lfd f29, 120(r1) ; restore F29 - lfd f30, 128(r1) ; restore F30 - lfd f31, 136(r1) ; restore F31 - lfd f0, 144(r1) ; load FPSCR - mtfsf 0xff, f0 ; restore FPSCR - - lwz r13, 152(r1) ; restore R13 - lwz r14, 156(r1) ; restore R14 - lwz r15, 160(r1) ; restore R15 - lwz r16, 164(r1) ; restore R16 - lwz r17, 168(r1) ; restore R17 - lwz r18, 172(r1) ; restore R18 - lwz r19, 176(r1) ; restore R19 - lwz r20, 180(r1) ; restore R20 - lwz r21, 184(r1) ; restore R21 - lwz r22, 188(r1) ; restore R22 - lwz r23, 192(r1) ; restore R23 - lwz r24, 196(r1) ; restore R24 - lwz r25, 200(r1) ; restore R25 - lwz r26, 204(r1) ; restore R26 - lwz r27, 208(r1) ; restore R27 - lwz r28, 212(r1) ; restore R28 - lwz r29, 216(r1) ; restore R29 - lwz r30, 220(r1) ; restore R30 - lwz r31, 224(r1) ; restore R31 - lwz r3, 228(r1) ; restore hidden - - ; restore CR - lwz r0, 232(r1) - mtcr r0 - ; restore LR - lwz r0, 236(r1) - mtlr r0 - ; ignore PC - - ; adjust stack - addi r1, r1, 244 - - ; Need to pass ontop_fcontext_tail( - ; hidden R3, - ; R4 = ignore, - ; R5 = data, - ; R6 = ontop-function, - ; R7 = fcontext_t - ; ) - ; All of these registers are correctly set at this point - b _ontop_fcontext_tail diff --git a/contrib/restricted/boost/context/src/asm/ontop_ppc32_sysv_xcoff_gas.S b/contrib/restricted/boost/context/src/asm/ontop_ppc32_sysv_xcoff_gas.S deleted file mode 100644 index 9dfb492f7e..0000000000 --- a/contrib/restricted/boost/context/src/asm/ontop_ppc32_sysv_xcoff_gas.S +++ /dev/null @@ -1,230 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * |bchai| CR | LR |compl| link| TOC | R14 | R15 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | R16 | R17 | R18 | R19 | R20 | R21 | R22 | R23 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | R24 | R25 | R26 | R27 | R28 | R29 | R30 | R31 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | F14 | F15 | F16 | F17 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | F18 | F19 | F20 | F21 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | * - * ------------------------------------------------- * - * | F22 | F23 | F24 | F25 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * - * ------------------------------------------------- * - * | F26 | F27 | F28 | F29 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | * - * ------------------------------------------------- * - * | F30 | F31 | PC |hiddn| fpscr | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 256 | 260 | 264 | 268 | 272 | 276 | 280 | 284 | * - * ------------------------------------------------- * - * |bchai|savLR|savLR|compl| link|svTOC| FCTX| DATA| * - * ------------------------------------------------- * - * * - *******************************************************/ - - .file "ontop_ppc32_sysv_xcoff_xas.S" - .toc - .csect .text[PR] - .align 2 - .globl ontop_fcontext[DS] - .globl .ontop_fcontext - .csect ontop_fcontext[DS] -ontop_fcontext: - .long .ontop_fcontext[PR], TOC[tc0], 0 - .csect .text[PR], 5 -.ontop_fcontext: - # reserve space on stack - subi 1, 1, 256 - - # save CR - mfcr 0 - stw 0, 4(1) - # save LR - mflr 0 - stw 0, 8(1) - # save LR as PC - stw 0, 240(1) - # save TOC - stw 2, 20(1) - - # Save registers R14 to R31. - stw 14, 24(1) - stw 15, 28(1) - stw 16, 32(1) - stw 17, 36(1) - stw 18, 40(1) - stw 19, 44(1) - stw 20, 48(1) - stw 21, 52(1) - stw 22, 56(1) - stw 23, 60(1) - stw 24, 64(1) - stw 25, 68(1) - stw 26, 72(1) - stw 27, 76(1) - stw 28, 80(1) - stw 29, 84(1) - stw 30, 88(1) - stw 31, 92(1) - - # Save registers F14 to F31 in slots with 8-byte alignment. - # 4-byte alignment may stall the pipeline of some processors. - # Less than 4 may cause alignment traps. - stfd 14, 96(1) - stfd 15, 104(1) - stfd 16, 112(1) - stfd 17, 120(1) - stfd 18, 128(1) - stfd 19, 136(1) - stfd 20, 144(1) - stfd 21, 152(1) - stfd 22, 160(1) - stfd 23, 168(1) - stfd 24, 176(1) - stfd 25, 184(1) - stfd 26, 192(1) - stfd 27, 200(1) - stfd 28, 208(1) - stfd 29, 216(1) - stfd 30, 224(1) - stfd 31, 232(1) - - # hidden pointer - stw 3, 244(1) - - mffs 0 # load FPSCR - stfd 0, 248(1) # save FPSCR - - # store RSP (pointing to context-data) in R7 - mr 7, 1 - - # restore RSP (pointing to context-data) from R4 - mr 1, 4 - - # restore CR - lwz 0, 4(1) - mtcr 0 - - # restore R14 to R31 - lwz 14, 24(1) - lwz 15, 28(1) - lwz 16, 32(1) - lwz 17, 36(1) - lwz 18, 40(1) - lwz 19, 44(1) - lwz 20, 48(1) - lwz 21, 52(1) - lwz 22, 56(1) - lwz 23, 60(1) - lwz 24, 64(1) - lwz 25, 68(1) - lwz 26, 72(1) - lwz 27, 76(1) - lwz 28, 80(1) - lwz 29, 84(1) - lwz 30, 88(1) - lwz 31, 92(1) - - # restore F14 to F31 - lfd 14, 96(1) - lfd 15, 104(1) - lfd 16, 112(1) - lfd 17, 120(1) - lfd 18, 128(1) - lfd 19, 136(1) - lfd 20, 144(1) - lfd 21, 152(1) - lfd 22, 160(1) - lfd 23, 168(1) - lfd 24, 176(1) - lfd 25, 184(1) - lfd 26, 192(1) - lfd 27, 200(1) - lfd 28, 208(1) - lfd 29, 216(1) - lfd 30, 224(1) - lfd 31, 232(1) - - lwz 3, 244(1) # restore hidden - - lfd 0, 248(1) # load FPSCR - mtfsf 0xff, 0 # restore FPSCR - - # copy transfer_t into ontop_fn arg registers - mr 4, 7 - # arg pointer already in r5 - # hidden arg already in r3 - - # restore CTR - lwz 7, 0(6) - mtctr 7 - # restore TOC - lwz 2, 4(6) - - # zero in r3 indicates first jump to context-function - cmpdi 3, 0 - beq use_entry_arg - -return_to_ctx: - # restore LR - lwz 0, 8(1) - mtlr 0 - - # adjust stack - addi 1, 1, 256 - - # jump to context - bctr - -use_entry_arg: - # compute return-value struct address - # (passed has hidden arg to ontop_fn) - addi 3, 1, 8 - - # jump to context and update LR - bctrl - - # restore CTR - lwz 7, 4(1) - mtctr 7 - # restore TOC - lwz 2, 20(1) - - # copy returned transfer_t into entry_fn arg registers - lwz 3, 8(1) - lwz 4, 12(1) - - b return_to_ctx diff --git a/contrib/restricted/boost/context/src/asm/ontop_ppc64_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/ontop_ppc64_sysv_elf_gas.S deleted file mode 100644 index cd97f45671..0000000000 --- a/contrib/restricted/boost/context/src/asm/ontop_ppc64_sysv_elf_gas.S +++ /dev/null @@ -1,244 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * | TOC | R14 | R15 | R16 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | R17 | R18 | R19 | R20 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | R21 | R22 | R23 | R24 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | R25 | R26 | R27 | R28 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | R29 | R30 | R31 | hidden | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | * - * ------------------------------------------------- * - * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | * - * ------------------------------------------------- * - * | CR | LR | PC | back-chain| * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | * - * ------------------------------------------------- * - * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * - * ------------------------------------------------- * - * | cr saved | lr saved | compiler | linker | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | * - * ------------------------------------------------- * - * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | * - * ------------------------------------------------- * - * | TOC saved | FCTX | DATA | | * - * ------------------------------------------------- * - * * - *******************************************************/ - -.file "ontop_ppc64_sysv_elf_gas.S" -.globl ontop_fcontext -#if _CALL_ELF == 2 - .text - .align 2 -ontop_fcontext: - addis %r2, %r12, .TOC.-ontop_fcontext@ha - addi %r2, %r2, .TOC.-ontop_fcontext@l - .localentry ontop_fcontext, . - ontop_fcontext -#else - .section ".opd","aw" - .align 3 -ontop_fcontext: -# ifdef _CALL_LINUX - .quad .L.ontop_fcontext,.TOC.@tocbase,0 - .type ontop_fcontext,@function - .text - .align 2 -.L.ontop_fcontext: -# else - .hidden .ontop_fcontext - .globl .ontop_fcontext - .quad .ontop_fcontext,.TOC.@tocbase,0 - .size ontop_fcontext,24 - .type .ontop_fcontext,@function - .text - .align 2 -.ontop_fcontext: -# endif -#endif - # reserve space on stack - subi %r1, %r1, 184 - -#if _CALL_ELF != 2 - std %r2, 0(%r1) # save TOC -#endif - std %r14, 8(%r1) # save R14 - std %r15, 16(%r1) # save R15 - std %r16, 24(%r1) # save R16 - std %r17, 32(%r1) # save R17 - std %r18, 40(%r1) # save R18 - std %r19, 48(%r1) # save R19 - std %r20, 56(%r1) # save R20 - std %r21, 64(%r1) # save R21 - std %r22, 72(%r1) # save R22 - std %r23, 80(%r1) # save R23 - std %r24, 88(%r1) # save R24 - std %r25, 96(%r1) # save R25 - std %r26, 104(%r1) # save R26 - std %r27, 112(%r1) # save R27 - std %r28, 120(%r1) # save R28 - std %r29, 128(%r1) # save R29 - std %r30, 136(%r1) # save R30 - std %r31, 144(%r1) # save R31 -#if _CALL_ELF != 2 - std %r3, 152(%r1) # save hidden -#endif - - # save CR - mfcr %r0 - std %r0, 160(%r1) - # save LR - mflr %r0 - std %r0, 168(%r1) - # save LR as PC - std %r0, 176(%r1) - - # store RSP (pointing to context-data) in R7 - mr %r7, %r1 - -#if _CALL_ELF == 2 - # restore RSP (pointing to context-data) from R3 - mr %r1, %r3 -#else - # restore RSP (pointing to context-data) from R4 - mr %r1, %r4 -#endif - - ld %r14, 8(%r1) # restore R14 - ld %r15, 16(%r1) # restore R15 - ld %r16, 24(%r1) # restore R16 - ld %r17, 32(%r1) # restore R17 - ld %r18, 40(%r1) # restore R18 - ld %r19, 48(%r1) # restore R19 - ld %r20, 56(%r1) # restore R20 - ld %r21, 64(%r1) # restore R21 - ld %r22, 72(%r1) # restore R22 - ld %r23, 80(%r1) # restore R23 - ld %r24, 88(%r1) # restore R24 - ld %r25, 96(%r1) # restore R25 - ld %r26, 104(%r1) # restore R26 - ld %r27, 112(%r1) # restore R27 - ld %r28, 120(%r1) # restore R28 - ld %r29, 128(%r1) # restore R29 - ld %r30, 136(%r1) # restore R30 - ld %r31, 144(%r1) # restore R31 -#if _CALL_ELF != 2 - ld %r3, 152(%r1) # restore hidden -#endif - - # restore CR - ld %r0, 160(%r1) - mtcr %r0 - -#if _CALL_ELF == 2 - # restore CTR - mtctr %r5 - - # store cb entrypoint in %r12, used for TOC calculation - mr %r12, %r5 - - # copy transfer_t into ontop_fn arg registers - mr %r3, %r7 - # arg pointer already in %r4 -#else - # copy transfer_t into ontop_fn arg registers - mr %r4, %r7 - # arg pointer already in %r5 - # hidden arg already in %r3 - - # restore CTR - ld %r7, 0(%r6) - mtctr %r7 - # restore TOC - ld %r2, 8(%r6) - - # zero in r3 indicates first jump to context-function - cmpdi %r3, 0 - beq use_entry_arg -#endif - -return_to_ctx: - # restore LR - ld %r0, 168(%r1) - mtlr %r0 - - # adjust stack - addi %r1, %r1, 184 - - # jump to context - bctr - -#if _CALL_ELF == 2 - .size ontop_fcontext, .-ontop_fcontext -#else -use_entry_arg: - # compute return-value struct address - # (passed has hidden arg to ontop_fn) - addi %r3, %r1, 8 - - # jump to context and update LR - bctrl - - # restore CTR - ld %r7, 176(%r1) - mtctr %r7 -#if _CALL_ELF != 2 - # restore TOC - ld %r2, 0(%r1) -#endif - - # copy returned transfer_t into entry_fn arg registers - ld %r3, 8(%r1) - ld %r4, 16(%r1) - - b return_to_ctx -# ifdef _CALL_LINUX - .size .ontop_fcontext, .-.L.ontop_fcontext -# else - .size .ontop_fcontext, .-.ontop_fcontext -# endif -#endif - - -/* Mark that we don't need executable stack. */ -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/ontop_ppc64_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/ontop_ppc64_sysv_macho_gas.S deleted file mode 100644 index a9fe8cf5b8..0000000000 --- a/contrib/restricted/boost/context/src/asm/ontop_ppc64_sysv_macho_gas.S +++ /dev/null @@ -1,151 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * | R13 | R14 | R15 | R16 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | R17 | R18 | R19 | R20 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | R21 | R22 | R23 | R24 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | R25 | R26 | R27 | R28 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | R29 | R30 | R31 | hidden | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | * - * ------------------------------------------------- * - * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | * - * ------------------------------------------------- * - * | CR | LR | PC | back-chain| * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | * - * ------------------------------------------------- * - * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * - * ------------------------------------------------- * - * | cr saved | lr saved | compiler | linker | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | * - * ------------------------------------------------- * - * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | * - * ------------------------------------------------- * - * | FCTX | DATA | | | * - * ------------------------------------------------- * - * * - *******************************************************/ - -.text -.align 2 -.globl _ontop_fcontext - -_ontop_fcontext: - ; reserve space on stack - subi r1, r1, 184 - - std r14, 8(r1) ; save R14 - std r15, 16(r1) ; save R15 - std r16, 24(r1) ; save R16 - std r17, 32(r1) ; save R17 - std r18, 40(r1) ; save R18 - std r19, 48(r1) ; save R19 - std r20, 56(r1) ; save R20 - std r21, 64(r1) ; save R21 - std r22, 72(r1) ; save R22 - std r23, 80(r1) ; save R23 - std r24, 88(r1) ; save R24 - std r25, 96(r1) ; save R25 - std r26, 104(r1) ; save R26 - std r27, 112(r1) ; save R27 - std r28, 120(r1) ; save R28 - std r29, 128(r1) ; save R29 - std r30, 136(r1) ; save R30 - std r31, 144(r1) ; save R31 - std r3, 152(r1) ; save hidden - - ; save CR - mfcr r0 - std r0, 160(r1) - ; save LR - mflr r0 - std r0, 168(r1) - ; save LR as PC - std r0, 176(r1) - - ; store RSP (pointing to context-data) in R7 - mr r7, r1 - - ; restore RSP (pointing to context-data) from R4 - mr r1, r4 - - ld r14, 8(r1) ; restore R14 - ld r15, 16(r1) ; restore R15 - ld r16, 24(r1) ; restore R16 - ld r17, 32(r1) ; restore R17 - ld r18, 40(r1) ; restore R18 - ld r19, 48(r1) ; restore R19 - ld r20, 56(r1) ; restore R20 - ld r21, 64(r1) ; restore R21 - ld r22, 72(r1) ; restore R22 - ld r23, 80(r1) ; restore R23 - ld r24, 88(r1) ; restore R24 - ld r25, 96(r1) ; restore R25 - ld r26, 104(r1) ; restore R26 - ld r27, 112(r1) ; restore R27 - ld r28, 120(r1) ; restore R28 - ld r29, 128(r1) ; restore R29 - ld r30, 136(r1) ; restore R30 - ld r31, 144(r1) ; restore R31 - ld r4, 152(r1) ; restore hidden - - ; restore CR - ld r0, 160(r1) - mtcr r0 - ; restore LR - ld r0, 168(r1) - mtlr r0 - ; ignore PC - - ; adjust stack - addi r1, r1, 184 - - ; return transfer_t - std r7, 0(r4) - std r5, 8(r4) - - ; restore CTR - mtctr r6 - - ; jump to context - bctr diff --git a/contrib/restricted/boost/context/src/asm/ontop_ppc64_sysv_xcoff_gas.S b/contrib/restricted/boost/context/src/asm/ontop_ppc64_sysv_xcoff_gas.S deleted file mode 100644 index 546b1b2da8..0000000000 --- a/contrib/restricted/boost/context/src/asm/ontop_ppc64_sysv_xcoff_gas.S +++ /dev/null @@ -1,187 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | * - * ------------------------------------------------- * - * | TOC | R14 | R15 | R16 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | * - * ------------------------------------------------- * - * | R17 | R18 | R19 | R20 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 68 | 72 | 76 | 80 | 84 | 88 | 92 | * - * ------------------------------------------------- * - * | R21 | R22 | R23 | R24 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | * - * ------------------------------------------------- * - * | R25 | R26 | R27 | R28 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 132 | 136 | 140 | 144 | 148 | 152 | 156 | * - * ------------------------------------------------- * - * | R29 | R30 | R31 | hidden | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | * - * ------------------------------------------------- * - * | 160 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | * - * ------------------------------------------------- * - * | CR | LR | PC | back-chain| * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | * - * ------------------------------------------------- * - * | 192 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | * - * ------------------------------------------------- * - * | cr saved | lr saved | compiler | linker | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | * - * ------------------------------------------------- * - * | 224 | 228 | 232 | 236 | 240 | 244 | 248 | 252 | * - * ------------------------------------------------- * - * | TOC saved | FCTX | DATA | | * - * ------------------------------------------------- * - * * - *******************************************************/ - - .file "ontop_ppc64_sysv_xcoff_gas.S" - .toc - .csect .text[PR], 5 - .align 2 - .globl ontop_fcontext[DS] - .globl .ontop_fcontext - .csect ontop_fcontext[DS], 3 -ontop_fcontext: - .llong .ontop_fcontext[PR], TOC[tc0], 0 - .csect .text[PR], 5 -.ontop_fcontext: - # reserve space on stack - subi 1, 1, 184 - - std 2, 0(1) # save TOC - std 14, 8(1) # save R14 - std 15, 16(1) # save R15 - std 16, 24(1) # save R16 - std 17, 32(1) # save R17 - std 18, 40(1) # save R18 - std 19, 48(1) # save R19 - std 20, 56(1) # save R20 - std 21, 64(1) # save R21 - std 22, 72(1) # save R22 - std 23, 80(1) # save R23 - std 24, 88(1) # save R24 - std 25, 96(1) # save R25 - std 26, 104(1) # save R26 - std 27, 112(1) # save R27 - std 28, 120(1) # save R28 - std 29, 128(1) # save R29 - std 30, 136(1) # save R30 - std 31, 144(1) # save R31 - std 3, 152(1) # save hidden - - # save CR - mfcr 0 - std 0, 160(1) - # save LR - mflr 0 - std 0, 168(1) - # save LR as PC - std 0, 176(1) - - # store RSP (pointing to context-data) in R7 - mr 7, 1 - - # restore RSP (pointing to context-data) from R4 - mr 1, 4 - - ld 14, 8(1) # restore R14 - ld 15, 16(1) # restore R15 - ld 16, 24(1) # restore R16 - ld 17, 32(1) # restore R17 - ld 18, 40(1) # restore R18 - ld 19, 48(1) # restore R19 - ld 20, 56(1) # restore R20 - ld 21, 64(1) # restore R21 - ld 22, 72(1) # restore R22 - ld 23, 80(1) # restore R23 - ld 24, 88(1) # restore R24 - ld 25, 96(1) # restore R25 - ld 26, 104(1) # restore R26 - ld 27, 112(1) # restore R27 - ld 28, 120(1) # restore R28 - ld 29, 128(1) # restore R29 - ld 30, 136(1) # restore R30 - ld 31, 144(1) # restore R31 - ld 3, 152(1) # restore hidden - - # restore CR - ld 0, 160(1) - mtcr 0 - - # copy transfer_t into ontop_fn arg registers - mr 4, 7 - # arg pointer already in r5 - # hidden arg already in r3 - - # restore CTR - ld 7, 0(6) - mtctr 7 - # restore TOC - ld 2, 8(6) - - # zero in r3 indicates first jump to context-function - cmpdi 3, 0 - beq use_entry_arg - -return_to_ctx: - # restore LR - ld 0, 168(1) - mtlr 0 - - # adjust stack - addi 1, 1, 184 - - # jump to context - bctr - -use_entry_arg: - # compute return-value struct address - # (passed has hidden arg to ontop_fn) - addi 3, 1, 8 - - # jump to context and update LR - bctrl - - # restore CTR - ld 7, 176(1) - mtctr 7 - # restore TOC - ld 2, 0(1) - - # copy returned transfer_t into entry_fn arg registers - ld 3, 8(1) - ld 4, 16(1) - - b return_to_ctx diff --git a/contrib/restricted/boost/context/src/asm/ontop_riscv64_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/ontop_riscv64_sysv_elf_gas.S deleted file mode 100644 index 61ab46bcc6..0000000000 --- a/contrib/restricted/boost/context/src/asm/ontop_riscv64_sysv_elf_gas.S +++ /dev/null @@ -1,149 +0,0 @@ -/* - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ -/******************************************************* - * * - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| * - * ------------------------------------------------- * - * | fs0 | fs1 | fs2 | fs3 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| * - * ------------------------------------------------- * - * | fs4 | fs5 | fs6 | fs7 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| * - * ------------------------------------------------- * - * | fs8 | fs9 | fs10 | fs11 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| * - * ------------------------------------------------- * - * | s0 | s1 | s2 | s3 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c| * - * ------------------------------------------------- * - * | s4 | s5 | s6 | s7 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | * - * ------------------------------------------------- * - * | 0xa0| 0xa4| 0xa8| 0xac| 0xb0| 0xb4| 0xb8| 0xbc| * - * ------------------------------------------------- * - * | s8 | s9 | s10 | s11 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 48 | 49 | 50 | 51 | | | | | * - * ------------------------------------------------- * - * | 0xc0| 0xc4| 0xc8| 0xcc| | | | | * - * ------------------------------------------------- * - * | ra | pc | | | * - * ------------------------------------------------- * - * * - *******************************************************/ - -.file "ontop_riscv64_sysv_elf_gas.S" -.text -.align 1 -.global ontop_fcontext -.type ontop_fcontext, %function -ontop_fcontext: - # prepare stack for GP + FPU - addi sp, sp, -0xd0 - - # save fs0 - fs11 - fsd fs0, 0x00(sp) - fsd fs1, 0x08(sp) - fsd fs2, 0x10(sp) - fsd fs3, 0x18(sp) - fsd fs4, 0x20(sp) - fsd fs5, 0x28(sp) - fsd fs6, 0x30(sp) - fsd fs7, 0x38(sp) - fsd fs8, 0x40(sp) - fsd fs9, 0x48(sp) - fsd fs10, 0x50(sp) - fsd fs11, 0x58(sp) - - # save s0-s11, ra - sd s0, 0x60(sp) - sd s1, 0x68(sp) - sd s2, 0x70(sp) - sd s3, 0x78(sp) - sd s4, 0x80(sp) - sd s5, 0x88(sp) - sd s6, 0x90(sp) - sd s7, 0x98(sp) - sd s8, 0xa0(sp) - sd s9, 0xa8(sp) - sd s10, 0xb0(sp) - sd s11, 0xb8(sp) - sd ra, 0xc0(sp) - - # save RA as PC - sd ra, 0xc8(sp) - - # store SP (pointing to context-data) in A3 - mv a3, sp - - # restore SP (pointing to context-data) from A0 - mv sp, a0 - - # load fs0 - fs11 - fld fs0, 0x00(sp) - fld fs1, 0x08(sp) - fld fs2, 0x10(sp) - fld fs3, 0x18(sp) - fld fs4, 0x20(sp) - fld fs5, 0x28(sp) - fld fs6, 0x30(sp) - fld fs7, 0x38(sp) - fld fs8, 0x40(sp) - fld fs9, 0x48(sp) - fld fs10, 0x50(sp) - fld fs11, 0x58(sp) - - # load s0-s11,ra - ld s0, 0x60(sp) - ld s1, 0x68(sp) - ld s2, 0x70(sp) - ld s3, 0x78(sp) - ld s4, 0x80(sp) - ld s5, 0x88(sp) - ld s6, 0x90(sp) - ld s7, 0x98(sp) - ld s8, 0xa0(sp) - ld s9, 0xa8(sp) - ld s10, 0xb0(sp) - ld s11, 0xb8(sp) - ld ra, 0xc0(sp) - - # return transfer_t from jump - # pass transfer_t as first arg in context function - # a0 == FCTX, a1 == DATA - mv a0, a3 - - # skip pc - # restore stack from GP + FPU - addi sp, sp, 0xd0 - - # jump to ontop-function - jr a2 -.size ontop_fcontext,.-ontop_fcontext -# Mark that we don't need executable stack. -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/ontop_s390x_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/ontop_s390x_sysv_elf_gas.S deleted file mode 100644 index 6a464aa3bf..0000000000 --- a/contrib/restricted/boost/context/src/asm/ontop_s390x_sysv_elf_gas.S +++ /dev/null @@ -1,145 +0,0 @@ -/******************************************************* - * ------------------------------------------------- * - * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * - * ------------------------------------------------- * - * | 0 | 8 | 16 | 24 | * - * ------------------------------------------------- * - * | t.fctx | t.data | r2 | r6 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * - * ------------------------------------------------- * - * | 32 | 40 | 48 | 56 | * - * ------------------------------------------------- * - * | r7 | r8 | r9 | r10 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * - * ------------------------------------------------- * - * | 64 | 72 | 80 | 88 | * - * ------------------------------------------------- * - * | r11 | r12 | r13 | r14 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * - * ------------------------------------------------- * - * | 96 | 104 | 112 | 120 | * - * ------------------------------------------------- * - * | f8 | f9 | f10 | f11 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | * - * ------------------------------------------------- * - * | 128 | 136 | 144 | 152 | * - * ------------------------------------------------- * - * | f12 | f13 | f14 | f15 | * - * ------------------------------------------------- * - * ------------------------------------------------- * - * | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | * - * ------------------------------------------------- * - * | 160 | 168 | 176 | | * - * ------------------------------------------------- * - * | fpc | pc | | | * - * ------------------------------------------------- * - *******************************************************/ - -.text -.align 8 -.global ontop_fcontext -.type ontop_fcontext, @function - -#define ARG_OFFSET 0 -#define GR_OFFSET 16 -#define R14_OFFSET 88 -#define FP_OFFSET 96 -#define FPC_OFFSET 160 -#define PC_OFFSET 168 -#define CONTEXT_SIZE 176 - -/* - -typedef void* fcontext_t; - -struct transfer_t { - fcontext_t fctx; - void * data; -}; - -transfer_t ontop_fcontext( fcontext_t const to, - void * vp, - transfer_t (* fn)( transfer_t) ); - -Incoming args -r2 - Hidden argument to the location where the return transfer_t needs to be returned -r3 - Target context -r4 - Data pointer -r5 - Function to be executed - -This implementation assumes that ontop_fcontext will never be called with target contexts -created via make_fcontext. - -*/ - -ontop_fcontext: - /* Reserve stack space to store the current context. */ - aghi %r15,-CONTEXT_SIZE - - /* Save the argument register holding the location of the return value. */ - stg %r2,GR_OFFSET(%r15) - - /* Save the call-saved general purpose registers. */ - stmg %r6,%r14,GR_OFFSET+8(%r15) - - /* Save call-saved floating point registers. */ - std %f8,FP_OFFSET(%r15) - std %f9,FP_OFFSET+8(%r15) - std %f10,FP_OFFSET+16(%r15) - std %f11,FP_OFFSET+24(%r15) - std %f12,FP_OFFSET+32(%r15) - std %f13,FP_OFFSET+40(%r15) - std %f14,FP_OFFSET+48(%r15) - std %f15,FP_OFFSET+56(%r15) - - /* Save the return address as current pc. */ - stg %r14,PC_OFFSET(%r15) - - /* Save the floating point control register. */ - stfpc FPC_OFFSET(%r15) - - /* Backup the stack pointer pointing to the old context-data into r1. */ - lgr %r1,%r15 - - /* Load the new context pointer as stack pointer. */ - lgr %r15,%r3 - - /* Restore the call-saved GPRs from the new context. */ - lmg %r6,%r14,GR_OFFSET+8(%r15) - - /* Restore call-saved floating point registers. */ - ld %f8,FP_OFFSET(%r15) - ld %f9,FP_OFFSET+8(%r15) - ld %f10,FP_OFFSET+16(%r15) - ld %f11,FP_OFFSET+24(%r15) - ld %f12,FP_OFFSET+32(%r15) - ld %f13,FP_OFFSET+40(%r15) - ld %f14,FP_OFFSET+48(%r15) - ld %f15,FP_OFFSET+56(%r15) - - /* Load the floating point control register. */ - lfpc FPC_OFFSET(%r15) - - /* Store the transfer_t values located in the saved context. */ - stg %r1,0(%r1) /* transfer_t.fctx = old context */ - stg %r4,8(%r1) /* transfer_t.data = data */ - - /* Set up the arguments for the target function. */ - lg %r2,GR_OFFSET(%r15) - lgr %r3,%r1 - - /* Deallocate the context. */ - aghi %r15,CONTEXT_SIZE - - br %r5 - -.size ontop_fcontext,.-ontop_fcontext -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/ontop_sparc64_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/ontop_sparc64_sysv_elf_gas.S deleted file mode 100644 index 2fcdb89105..0000000000 --- a/contrib/restricted/boost/context/src/asm/ontop_sparc64_sysv_elf_gas.S +++ /dev/null @@ -1,50 +0,0 @@ -/* - Copyright Claudio Jeker 2024 - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/* - * transfer_t ontop_fcontext(fcontext_t const to, void *vp, transfer_t (*fn)(transfer_t)); - */ -#define CC64FSZ 176 -#define BIAS 2047 -#define SP 128 -#define I7 136 - -.file "ontop_sparc64_sysv_elf_gas.S" -.text -.align 4 -.global ontop_fcontext -.type ontop_fcontext, %function -ontop_fcontext: - # prepare stack - save %sp, -CC64FSZ, %sp - - # store framepointer and return address in slots reserved - # for arguments - stx %fp, [%sp + BIAS + SP] - stx %i7, [%sp + BIAS + I7] - mov %sp, %o0 - # force flush register windows to stack and with that save context - flushw - # get SP (pointing to new context-data) from %i0 param - mov %i0, %sp - # load framepointer and return address from context - ldx [%sp + BIAS + SP], %fp - ldx [%sp + BIAS + I7], %i7 - - # ontop_fcontext requires to directly call a function on top of the - # current frame so restore register window before doing the jump - # to the context function which then is in %o2. Do not clobber - # %o7 in the jump so that (*fn)() returns to that address. - restore %o0, %g0, %o0 - # restore old %sp (pointing to old context-data) in %o0 - # *data stored in %o1 was not modified - - jmpl %o2, %g0 - nop -.size jump_fcontext,.-jump_fcontext -# Mark that we don't need executable stack. -.section .note.GNU-stack,"",%progbits diff --git a/contrib/restricted/boost/context/src/asm/ontop_x86_64_ms_pe_clang_gas.S b/contrib/restricted/boost/context/src/asm/ontop_x86_64_ms_pe_clang_gas.S deleted file mode 100644 index 162c1f4ea0..0000000000 --- a/contrib/restricted/boost/context/src/asm/ontop_x86_64_ms_pe_clang_gas.S +++ /dev/null @@ -1,211 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Copyright Thomas Sailer 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/************************************************************************************* -* ---------------------------------------------------------------------------------- * -* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * -* ---------------------------------------------------------------------------------- * -* | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * -* ---------------------------------------------------------------------------------- * -* | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * -* ---------------------------------------------------------------------------------- * -* | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * -* ---------------------------------------------------------------------------------- * -* | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | * -* ---------------------------------------------------------------------------------- * -* | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | * -* ---------------------------------------------------------------------------------- * -* | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc | * -* ---------------------------------------------------------------------------------- * -* | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | * -* ---------------------------------------------------------------------------------- * -* | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc | * -* ---------------------------------------------------------------------------------- * -* | limit | base | R12 | R13 | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | * -* ---------------------------------------------------------------------------------- * -* | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc | * -* ---------------------------------------------------------------------------------- * -* | R14 | R15 | RDI | RSI | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | * -* ---------------------------------------------------------------------------------- * -* | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c | * -* ---------------------------------------------------------------------------------- * -* | RBX | RBP | hidden | RIP | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | * -* ---------------------------------------------------------------------------------- * -* | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c | * -* ---------------------------------------------------------------------------------- * -* | parameter area | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | * -* ---------------------------------------------------------------------------------- * -* | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c | * -* ---------------------------------------------------------------------------------- * -* | FCTX | DATA | | * -* ---------------------------------------------------------------------------------- * -**************************************************************************************/ - -.file "ontop_x86_64_ms_pe_clang_gas.S" -.text -.p2align 4,,15 -.globl ontop_fcontext -.def ontop_fcontext; .scl 2; .type 32; .endef -.seh_proc ontop_fcontext -ontop_fcontext: -.seh_endprologue - - leaq -0x118(%rsp), %rsp /* prepare stack */ - -#if !defined(BOOST_USE_TSX) - /* save XMM storage */ - movaps %xmm6, 0x0(%rsp) - movaps %xmm7, 0x10(%rsp) - movaps %xmm8, 0x20(%rsp) - movaps %xmm9, 0x30(%rsp) - movaps %xmm10, 0x40(%rsp) - movaps %xmm11, 0x50(%rsp) - movaps %xmm12, 0x60(%rsp) - movaps %xmm13, 0x70(%rsp) - movaps %xmm14, 0x80(%rsp) - movaps %xmm15, 0x90(%rsp) - stmxcsr 0xa0(%rsp) /* save MMX control- and status-word */ - fnstcw 0xa4(%rsp) /* save x87 control-word */ -#endif - - /* load NT_TIB */ - movq %gs:(0x30), %r10 - /* save fiber local storage */ - movq 0x20(%r10), %rax - movq %rax, 0xb0(%rsp) - /* save current deallocation stack */ - movq 0x1478(%r10), %rax - movq %rax, 0xb8(%rsp) - /* save current stack limit */ - movq 0x10(%r10), %rax - movq %rax, 0xc0(%rsp) - /* save current stack base */ - movq 0x08(%r10), %rax - movq %rax, 0xc8(%rsp) - - movq %r12, 0xd0(%rsp) /* save R12 */ - movq %r13, 0xd8(%rsp) /* save R13 */ - movq %r14, 0xe0(%rsp) /* save R14 */ - movq %r15, 0xe8(%rsp) /* save R15 */ - movq %rdi, 0xf0(%rsp) /* save RDI */ - movq %rsi, 0xf8(%rsp) /* save RSI */ - movq %rbx, 0x100(%rsp) /* save RBX */ - movq %rbp, 0x108(%rsp) /* save RBP */ - - movq %rcx, 0x110(%rsp) /* save hidden address of transport_t */ - - /* preserve RSP (pointing to context-data) in RCX */ - movq %rsp, %rcx - - /* restore RSP (pointing to context-data) from RDX */ - movq %rdx, %rsp - -#if !defined(BOOST_USE_TSX) - /* restore XMM storage */ - movaps 0x0(%rsp), %xmm6 - movaps 0x10(%rsp), %xmm7 - movaps 0x20(%rsp), %xmm8 - movaps 0x30(%rsp), %xmm9 - movaps 0x40(%rsp), %xmm10 - movaps 0x50(%rsp), %xmm11 - movaps 0x60(%rsp), %xmm12 - movaps 0x70(%rsp), %xmm13 - movaps 0x80(%rsp), %xmm14 - movaps 0x90(%rsp), %xmm15 - ldmxcsr 0xa0(%rsp) /* restore MMX control- and status-word */ - fldcw 0xa4(%rsp) /* restore x87 control-word */ -#endif - - /* load NT_TIB */ - movq %gs:(0x30), %r10 - /* restore fiber local storage */ - movq 0xb0(%rsp), %rax - movq %rax, 0x20(%r10) - /* restore current deallocation stack */ - movq 0xb8(%rsp), %rax - movq %rax, 0x1478(%r10) - /* restore current stack limit */ - movq 0xc0(%rsp), %rax - movq %rax, 0x10(%r10) - /* restore current stack base */ - movq 0xc8(%rsp), %rax - movq %rax, 0x08(%r10) - - movq 0xd0(%rsp), %r12 /* restore R12 */ - movq 0xd8(%rsp), %r13 /* restore R13 */ - movq 0xe0(%rsp), %r14 /* restore R14 */ - movq 0xe8(%rsp), %r15 /* restore R15 */ - movq 0xf0(%rsp), %rdi /* restore RDI */ - movq 0xf8(%rsp), %rsi /* restore RSI */ - movq 0x100(%rsp), %rbx /* restore RBX */ - movq 0x108(%rsp), %rbp /* restore RBP */ - - movq 0x110(%rsp), %rax /* restore hidden address of transport_t */ - - leaq 0x118(%rsp), %rsp /* prepare stack */ - - /* keep return-address on stack */ - - /* transport_t returned in RAX */ - /* return parent fcontext_t */ - movq %rcx, 0x0(%rax) - /* return data */ - movq %r8, 0x8(%rax) - - /* transport_t as 1.arg of context-function */ - /* RCX contains address of returned (hidden) transfer_t */ - movq %rax, %rcx - /* RDX contains address of passed transfer_t */ - movq %rax, %rdx - - /* indirect jump to context */ - jmp *%r9 -.seh_endproc - -.section .drectve -.ascii " -export:\"ontop_fcontext\"" diff --git a/contrib/restricted/boost/context/src/asm/ontop_x86_64_ms_pe_gas.asm b/contrib/restricted/boost/context/src/asm/ontop_x86_64_ms_pe_gas.asm deleted file mode 100644 index 02e040c9dc..0000000000 --- a/contrib/restricted/boost/context/src/asm/ontop_x86_64_ms_pe_gas.asm +++ /dev/null @@ -1,211 +0,0 @@ -/* - Copyright Oliver Kowalke 2009. - Copyright Thomas Sailer 2013. - Distributed under the Boost Software License, Version 1.0. - (See accompanying file LICENSE_1_0.txt or copy at - http://www.boost.org/LICENSE_1_0.txt) -*/ - -/************************************************************************************* -* ---------------------------------------------------------------------------------- * -* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * -* ---------------------------------------------------------------------------------- * -* | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * -* ---------------------------------------------------------------------------------- * -* | 0x20 | 0x24 | 0x28 | 0x2c | 0x30 | 0x34 | 0x38 | 0x3c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | * -* ---------------------------------------------------------------------------------- * -* | 0xe40 | 0x44 | 0x48 | 0x4c | 0x50 | 0x54 | 0x58 | 0x5c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | * -* ---------------------------------------------------------------------------------- * -* | 0x60 | 0x64 | 0x68 | 0x6c | 0x70 | 0x74 | 0x78 | 0x7c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | * -* ---------------------------------------------------------------------------------- * -* | 0x80 | 0x84 | 0x88 | 0x8c | 0x90 | 0x94 | 0x98 | 0x9c | * -* ---------------------------------------------------------------------------------- * -* | SEE registers (XMM6-XMM15) | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | * -* ---------------------------------------------------------------------------------- * -* | 0xa0 | 0xa4 | 0xa8 | 0xac | 0xb0 | 0xb4 | 0xb8 | 0xbc | * -* ---------------------------------------------------------------------------------- * -* | fc_mxcsr|fc_x87_cw| <alignment> | fbr_strg | fc_dealloc | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | * -* ---------------------------------------------------------------------------------- * -* | 0xc0 | 0xc4 | 0xc8 | 0xcc | 0xd0 | 0xd4 | 0xd8 | 0xdc | * -* ---------------------------------------------------------------------------------- * -* | limit | base | R12 | R13 | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | * -* ---------------------------------------------------------------------------------- * -* | 0xe0 | 0xe4 | 0xe8 | 0xec | 0xf0 | 0xf4 | 0xf8 | 0xfc | * -* ---------------------------------------------------------------------------------- * -* | R14 | R15 | RDI | RSI | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | * -* ---------------------------------------------------------------------------------- * -* | 0x100 | 0x104 | 0x108 | 0x10c | 0x110 | 0x114 | 0x118 | 0x11c | * -* ---------------------------------------------------------------------------------- * -* | RBX | RBP | hidden | RIP | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | * -* ---------------------------------------------------------------------------------- * -* | 0x120 | 0x124 | 0x128 | 0x12c | 0x130 | 0x134 | 0x138 | 0x13c | * -* ---------------------------------------------------------------------------------- * -* | parameter area | * -* ---------------------------------------------------------------------------------- * -* ---------------------------------------------------------------------------------- * -* | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | * -* ---------------------------------------------------------------------------------- * -* | 0x140 | 0x144 | 0x148 | 0x14c | 0x150 | 0x154 | 0x158 | 0x15c | * -* ---------------------------------------------------------------------------------- * -* | FCTX | DATA | | * -* ---------------------------------------------------------------------------------- * -**************************************************************************************/ - -.file "ontop_x86_64_ms_pe_gas.asm" -.text -.p2align 4,,15 -.globl ontop_fcontext -.def ontop_fcontext; .scl 2; .type 32; .endef -.seh_proc ontop_fcontext -ontop_fcontext: -.seh_endprologue - - leaq -0x118(%rsp), %rsp /* prepare stack */ - -#if !defined(BOOST_USE_TSX) - /* save XMM storage */ - movaps %xmm6, 0x0(%rsp) - movaps %xmm7, 0x10(%rsp) - movaps %xmm8, 0x20(%rsp) - movaps %xmm9, 0x30(%rsp) - movaps %xmm10, 0x40(%rsp) - movaps %xmm11, 0x50(%rsp) - movaps %xmm12, 0x60(%rsp) - movaps %xmm13, 0x70(%rsp) - movaps %xmm14, 0x80(%rsp) - movaps %xmm15, 0x90(%rsp) - stmxcsr 0xa0(%rsp) /* save MMX control- and status-word */ - fnstcw 0xa4(%rsp) /* save x87 control-word */ -#endif - - /* load NT_TIB */ - movq %gs:(0x30), %r10 - /* save fiber local storage */ - movq 0x20(%r10), %rax - movq %rax, 0xb0(%rsp) - /* save current deallocation stack */ - movq 0x1478(%r10), %rax - movq %rax, 0xb8(%rsp) - /* save current stack limit */ - movq 0x10(%r10), %rax - movq %rax, 0xc0(%rsp) - /* save current stack base */ - movq 0x08(%r10), %rax - movq %rax, 0xc8(%rsp) - - movq %r12, 0xd0(%rsp) /* save R12 */ - movq %r13, 0xd8(%rsp) /* save R13 */ - movq %r14, 0xe0(%rsp) /* save R14 */ - movq %r15, 0xe8(%rsp) /* save R15 */ - movq %rdi, 0xf0(%rsp) /* save RDI */ - movq %rsi, 0xf8(%rsp) /* save RSI */ - movq %rbx, 0x100(%rsp) /* save RBX */ - movq %rbp, 0x108(%rsp) /* save RBP */ - - movq %rcx, 0x110(%rsp) /* save hidden address of transport_t */ - - /* preserve RSP (pointing to context-data) in RCX */ - movq %rsp, %rcx - - /* restore RSP (pointing to context-data) from RDX */ - movq %rdx, %rsp - -#if !defined(BOOST_USE_TSX) - /* restore XMM storage */ - movaps 0x0(%rsp), %xmm6 - movaps 0x10(%rsp), %xmm7 - movaps 0x20(%rsp), %xmm8 - movaps 0x30(%rsp), %xmm9 - movaps 0x40(%rsp), %xmm10 - movaps 0x50(%rsp), %xmm11 - movaps 0x60(%rsp), %xmm12 - movaps 0x70(%rsp), %xmm13 - movaps 0x80(%rsp), %xmm14 - movaps 0x90(%rsp), %xmm15 - ldmxcsr 0xa0(%rsp) /* restore MMX control- and status-word */ - fldcw 0xa4(%rsp) /* restore x87 control-word */ -#endif - - /* load NT_TIB */ - movq %gs:(0x30), %r10 - /* restore fiber local storage */ - movq 0xb0(%rsp), %rax - movq %rax, 0x20(%r10) - /* restore current deallocation stack */ - movq 0xb8(%rsp), %rax - movq %rax, 0x1478(%r10) - /* restore current stack limit */ - movq 0xc0(%rsp), %rax - movq %rax, 0x10(%r10) - /* restore current stack base */ - movq 0xc8(%rsp), %rax - movq %rax, 0x08(%r10) - - movq 0xd0(%rsp), %r12 /* restore R12 */ - movq 0xd8(%rsp), %r13 /* restore R13 */ - movq 0xe0(%rsp), %r14 /* restore R14 */ - movq 0xe8(%rsp), %r15 /* restore R15 */ - movq 0xf0(%rsp), %rdi /* restore RDI */ - movq 0xf8(%rsp), %rsi /* restore RSI */ - movq 0x100(%rsp), %rbx /* restore RBX */ - movq 0x108(%rsp), %rbp /* restore RBP */ - - movq 0x110(%rsp), %rax /* restore hidden address of transport_t */ - - leaq 0x118(%rsp), %rsp /* prepare stack */ - - /* keep return-address on stack */ - - /* transport_t returned in RAX */ - /* return parent fcontext_t */ - movq %rcx, 0x0(%rax) - /* return data */ - movq %r8, 0x8(%rax) - - /* transport_t as 1.arg of context-function */ - /* RCX contains address of returned (hidden) transfer_t */ - movq %rax, %rcx - /* RDX contains address of passed transfer_t */ - movq %rax, %rdx - - /* indirect jump to context */ - jmp *%r9 -.seh_endproc - -.section .drectve -.ascii " -export:\"ontop_fcontext\"" diff --git a/contrib/restricted/boost/context/src/asm/ontop_x86_64_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/ontop_x86_64_sysv_elf_gas.S index c3892b8ba0..e3e4bdf870 100644 --- a/contrib/restricted/boost/context/src/asm/ontop_x86_64_sysv_elf_gas.S +++ b/contrib/restricted/boost/context/src/asm/ontop_x86_64_sysv_elf_gas.S @@ -40,6 +40,7 @@ .file "ontop_x86_64_sysv_elf_gas.S" .text .globl ontop_fcontext +.hidden ontop_fcontext .type ontop_fcontext,@function .align 16 ontop_fcontext: diff --git a/contrib/restricted/boost/context/src/asm/ontop_x86_64_sysv_macho_gas.S b/contrib/restricted/boost/context/src/asm/ontop_x86_64_sysv_macho_gas.S index 49755c69b0..7d15b5ba24 100644 --- a/contrib/restricted/boost/context/src/asm/ontop_x86_64_sysv_macho_gas.S +++ b/contrib/restricted/boost/context/src/asm/ontop_x86_64_sysv_macho_gas.S @@ -25,6 +25,7 @@ ****************************************************************************************/ .text +.private_extern _ontop_fcontext .globl _ontop_fcontext .align 8 _ontop_fcontext: diff --git a/contrib/restricted/boost/context/src/asm/tail_ontop_ppc32_sysv.cpp b/contrib/restricted/boost/context/src/asm/tail_ontop_ppc32_sysv.cpp deleted file mode 100644 index 348608460f..0000000000 --- a/contrib/restricted/boost/context/src/asm/tail_ontop_ppc32_sysv.cpp +++ /dev/null @@ -1,18 +0,0 @@ - -// Copyright Oliver Kowalke 2009. -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#include <boost/context/detail/fcontext.hpp> - -using boost::context::detail::fcontext_t; -using boost::context::detail::transfer_t; - -// This C++ tail of ontop_fcontext() allocates transfer_t{ from, vp } -// on the stack. If fn() throws a C++ exception, then the C++ runtime -// must remove this tail's stack frame. -extern "C" transfer_t -ontop_fcontext_tail( int ignore, void * vp, transfer_t (* fn)(transfer_t), fcontext_t const from) { - return fn( transfer_t{ from, vp }); -} diff --git a/contrib/restricted/boost/context/src/fcontext.cpp b/contrib/restricted/boost/context/src/fcontext.cpp new file mode 100644 index 0000000000..9fe0a4892d --- /dev/null +++ b/contrib/restricted/boost/context/src/fcontext.cpp @@ -0,0 +1,39 @@ +// SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliates <open-source-office@arm.com> +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// This code wraps the plain C asm symbols into properly +// namespaced and mangled C++ symbols that are safe to +// export from a library. + +#include <boost/context/detail/fcontext.hpp> + +extern "C" +boost::context::detail::transfer_t BOOST_CONTEXT_CALLDECL jump_fcontext( boost::context::detail::fcontext_t const to, void * vp); +extern "C" +boost::context::detail::fcontext_t BOOST_CONTEXT_CALLDECL make_fcontext( void * sp, std::size_t size, void (* fn)( boost::context::detail::transfer_t) ); + +// based on an idea of Giovanni Derreta +extern "C" +boost::context::detail::transfer_t BOOST_CONTEXT_CALLDECL ontop_fcontext( boost::context::detail::fcontext_t const to, void * vp, boost::context::detail::transfer_t (* fn)( boost::context::detail::transfer_t) ); + +namespace boost { +namespace context { +namespace detail { + +transfer_t jump_fcontext( fcontext_t const to, void * vp) +{ + return ::jump_fcontext(to, vp); +} + +fcontext_t make_fcontext( void * sp, std::size_t size, void (* fn)( transfer_t) ) +{ + return ::make_fcontext(sp, size, fn); +} + +transfer_t ontop_fcontext( fcontext_t const to, void * vp, transfer_t (* fn)( transfer_t) ) +{ + return ::ontop_fcontext(to, vp, fn); +} +}}} diff --git a/contrib/restricted/boost/context/ucontext_impl/ya.make b/contrib/restricted/boost/context/ucontext_impl/ya.make index 61ba1464c0..8c9ce98e9b 100644 --- a/contrib/restricted/boost/context/ucontext_impl/ya.make +++ b/contrib/restricted/boost/context/ucontext_impl/ya.make @@ -4,9 +4,9 @@ LIBRARY() WITHOUT_LICENSE_TEXTS() -VERSION(1.86.0) +VERSION(1.87.0) -ORIGINAL_SOURCE(https://github.com/boostorg/context/archive/boost-1.86.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/context/archive/boost-1.87.0.tar.gz) LICENSE(BSL-1.0) diff --git a/contrib/restricted/boost/context/ya.make b/contrib/restricted/boost/context/ya.make index f70cdc034c..d3c74aa986 100644 --- a/contrib/restricted/boost/context/ya.make +++ b/contrib/restricted/boost/context/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.86.0) +VERSION(1.87.0) -ORIGINAL_SOURCE(https://github.com/boostorg/context/archive/boost-1.86.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/context/archive/boost-1.87.0.tar.gz) IF (SANITIZER_TYPE) PEERDIR( diff --git a/contrib/restricted/boost/coroutine/include/boost/coroutine/posix/protected_stack_allocator.hpp b/contrib/restricted/boost/coroutine/include/boost/coroutine/posix/protected_stack_allocator.hpp index 164bb56cd8..5c50e81d29 100644 --- a/contrib/restricted/boost/coroutine/include/boost/coroutine/posix/protected_stack_allocator.hpp +++ b/contrib/restricted/boost/coroutine/include/boost/coroutine/posix/protected_stack_allocator.hpp @@ -65,13 +65,7 @@ struct basic_protected_stack_allocator if ( MAP_FAILED == limit) throw std::bad_alloc(); // conforming to POSIX.1-2001 -#if defined(BOOST_DISABLE_ASSERTS) - ::mprotect( limit, traits_type::page_size(), PROT_NONE); -#else - const int result( ::mprotect( limit, traits_type::page_size(), PROT_NONE) ); - (void)result; - BOOST_ASSERT( 0 == result); -#endif + BOOST_VERIFY( 0 == ::mprotect( limit, traits_type::page_size(), PROT_NONE)); ctx.size = size_; ctx.sp = static_cast< char * >( limit) + ctx.size; diff --git a/contrib/restricted/boost/coroutine/include/boost/coroutine/windows/protected_stack_allocator.hpp b/contrib/restricted/boost/coroutine/include/boost/coroutine/windows/protected_stack_allocator.hpp index 29e19babb7..4eda8fd3f9 100644 --- a/contrib/restricted/boost/coroutine/include/boost/coroutine/windows/protected_stack_allocator.hpp +++ b/contrib/restricted/boost/coroutine/include/boost/coroutine/windows/protected_stack_allocator.hpp @@ -52,14 +52,8 @@ struct basic_protected_stack_allocator if ( ! limit) throw std::bad_alloc(); DWORD old_options; -#if defined(BOOST_DISABLE_ASSERTS) - ::VirtualProtect( - limit, traits_type::page_size(), PAGE_READWRITE | PAGE_GUARD /*PAGE_NOACCESS*/, & old_options); -#else - const BOOL result = ::VirtualProtect( - limit, traits_type::page_size(), PAGE_READWRITE | PAGE_GUARD /*PAGE_NOACCESS*/, & old_options); - BOOST_ASSERT( FALSE != result); -#endif + BOOST_VERIFY( FALSE != ::VirtualProtect( + limit, traits_type::page_size(), PAGE_READWRITE | PAGE_GUARD /*PAGE_NOACCESS*/, & old_options)); ctx.size = size_; ctx.sp = static_cast< char * >( limit) + ctx.size; diff --git a/contrib/restricted/boost/coroutine/src/posix/stack_traits.cpp b/contrib/restricted/boost/coroutine/src/posix/stack_traits.cpp index 7a467b7493..20b3ab79b1 100644 --- a/contrib/restricted/boost/coroutine/src/posix/stack_traits.cpp +++ b/contrib/restricted/boost/coroutine/src/posix/stack_traits.cpp @@ -35,7 +35,7 @@ namespace { std::size_t pagesize() { // conform to POSIX.1-2001 - return ::sysconf( _SC_PAGESIZE); + return static_cast<std::size_t>( ::sysconf( _SC_PAGESIZE) ); } rlim_t stacksize_limit_() @@ -86,7 +86,7 @@ stack_traits::default_size() BOOST_NOEXCEPT std::size_t stack_traits::minimum_size() BOOST_NOEXCEPT -{ return SIGSTKSZ; } +{ return static_cast<std::size_t>( SIGSTKSZ ); } std::size_t stack_traits::maximum_size() BOOST_NOEXCEPT diff --git a/contrib/restricted/boost/coroutine/ya.make b/contrib/restricted/boost/coroutine/ya.make index cb5d0b6e21..ffe47ab248 100644 --- a/contrib/restricted/boost/coroutine/ya.make +++ b/contrib/restricted/boost/coroutine/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.86.0) +VERSION(1.87.0) -ORIGINAL_SOURCE(https://github.com/boostorg/coroutine/archive/boost-1.86.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/coroutine/archive/boost-1.87.0.tar.gz) PEERDIR( contrib/restricted/boost/assert diff --git a/contrib/restricted/boost/function/include/boost/function/function_template.hpp b/contrib/restricted/boost/function/include/boost/function/function_template.hpp index f21a395beb..ac4a5b247b 100644 --- a/contrib/restricted/boost/function/include/boost/function/function_template.hpp +++ b/contrib/restricted/boost/function/include/boost/function/function_template.hpp @@ -261,9 +261,9 @@ namespace boost { actual invoker that will be used for the given function object. - Each specialization contains an "apply" nested class template + Each specialization contains an "apply_" nested class template that accepts the function object, return type, function - argument types, and allocator. The resulting "apply" class + argument types, and allocator. The resulting "apply_" class contains two typedefs, "invoker_type" and "manager_type", which correspond to the invoker and manager types. */ template<typename Tag> @@ -275,7 +275,7 @@ namespace boost { { template<typename FunctionPtr, typename R, typename... T> - struct apply + struct apply_ { typedef typename get_function_invoker< FunctionPtr, @@ -308,7 +308,7 @@ namespace boost { { template<typename MemberPtr, typename R, typename... T> - struct apply + struct apply_ { typedef typename get_member_invoker< MemberPtr, @@ -341,7 +341,7 @@ namespace boost { { template<typename FunctionObj, typename R, typename... T> - struct apply + struct apply_ { typedef typename get_function_obj_invoker< FunctionObj, @@ -374,7 +374,7 @@ namespace boost { { template<typename RefWrapper, typename R, typename... T> - struct apply + struct apply_ { typedef typename get_function_ref_invoker< typename RefWrapper::type, @@ -923,7 +923,7 @@ namespace boost { typedef typename boost::detail::function::get_function_tag<Functor>::type tag; typedef boost::detail::function::get_invoker<tag> get_invoker; typedef typename get_invoker:: - template apply<Functor, R, + template apply_<Functor, R, T...> handler_type; diff --git a/contrib/restricted/boost/function/ya.make b/contrib/restricted/boost/function/ya.make index ca3eef69e2..6b4f5f501e 100644 --- a/contrib/restricted/boost/function/ya.make +++ b/contrib/restricted/boost/function/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.86.0) +VERSION(1.87.0) -ORIGINAL_SOURCE(https://github.com/boostorg/function/archive/boost-1.86.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/function/archive/boost-1.87.0.tar.gz) PEERDIR( contrib/restricted/boost/assert @@ -16,7 +16,6 @@ PEERDIR( contrib/restricted/boost/config contrib/restricted/boost/core contrib/restricted/boost/throw_exception - contrib/restricted/boost/type_traits ) ADDINCL( diff --git a/contrib/restricted/boost/move/include/boost/move/adl_move_swap.hpp b/contrib/restricted/boost/move/include/boost/move/adl_move_swap.hpp index 63ad7888e7..3648ea47f7 100644 --- a/contrib/restricted/boost/move/include/boost/move/adl_move_swap.hpp +++ b/contrib/restricted/boost/move/include/boost/move/adl_move_swap.hpp @@ -40,6 +40,8 @@ //In GCC 4.4 stl_move.h was renamed to move.h #include <bits/move.h> #endif +#elif defined(_LIBCPP_VERSION) && (_LIBCPP_VERSION >= 13000) + #include <__utility/swap.h> //libc++ refactored <utility> headers in smaller headers #elif defined(_LIBCPP_VERSION) #include <type_traits> //The initial import of libc++ defines std::swap and still there #elif __cplusplus >= 201103L diff --git a/contrib/restricted/boost/move/include/boost/move/core.hpp b/contrib/restricted/boost/move/include/boost/move/core.hpp index 79205d6526..f309139353 100644 --- a/contrib/restricted/boost/move/include/boost/move/core.hpp +++ b/contrib/restricted/boost/move/include/boost/move/core.hpp @@ -262,12 +262,12 @@ #define BOOST_COPYABLE_AND_MOVABLE(TYPE)\ public:\ - inline TYPE& operator=(TYPE &t)\ + BOOST_MOVE_FORCEINLINE TYPE& operator=(TYPE &t)\ { this->operator=(const_cast<const TYPE&>(t)); return *this;}\ public:\ - inline operator ::boost::rv<TYPE>&() \ + BOOST_MOVE_FORCEINLINE operator ::boost::rv<TYPE>&() \ { return *BOOST_MOVE_TO_RV_CAST(::boost::rv<TYPE>*, this); }\ - inline operator const ::boost::rv<TYPE>&() const \ + BOOST_MOVE_FORCEINLINE operator const ::boost::rv<TYPE>&() const \ { return *BOOST_MOVE_TO_RV_CAST(const ::boost::rv<TYPE>*, this); }\ private:\ // @@ -447,7 +447,7 @@ #else //!defined(BOOST_MOVE_MSVC_AUTO_MOVE_RETURN_BUG) || defined(BOOST_MOVE_DOXYGEN_INVOKED) - #include <boost/move/detail/meta_utils.hpp> + #include <boost/move/detail/meta_utils_core.hpp> namespace boost { namespace move_detail { diff --git a/contrib/restricted/boost/move/include/boost/move/detail/meta_utils.hpp b/contrib/restricted/boost/move/include/boost/move/detail/meta_utils.hpp index ad5654a395..6e12b178fe 100644 --- a/contrib/restricted/boost/move/include/boost/move/detail/meta_utils.hpp +++ b/contrib/restricted/boost/move/include/boost/move/detail/meta_utils.hpp @@ -17,10 +17,9 @@ #if defined(BOOST_HAS_PRAGMA_ONCE) # pragma once #endif -#include <boost/move/detail/config_begin.hpp> + #include <boost/move/detail/workaround.hpp> //forceinline #include <boost/move/detail/meta_utils_core.hpp> -#include <cstddef> //for std::size_t #include <boost/move/detail/addressof.hpp> //Small meta-typetraits to support move @@ -202,22 +201,6 @@ struct add_const_lvalue_reference }; ////////////////////////////////////// -// is_lvalue_reference -////////////////////////////////////// -template<class T> -struct is_lvalue_reference -{ - static const bool value = false; -}; - -template<class T> -struct is_lvalue_reference<T&> -{ - static const bool value = true; -}; - - -////////////////////////////////////// // identity ////////////////////////////////////// template <class T> @@ -558,6 +541,4 @@ template< class T > struct remove_rvalue_reference { typedef T type; }; } //namespace move_detail { } //namespace boost { -#include <boost/move/detail/config_end.hpp> - #endif //#ifndef BOOST_MOVE_DETAIL_META_UTILS_HPP diff --git a/contrib/restricted/boost/move/include/boost/move/detail/meta_utils_core.hpp b/contrib/restricted/boost/move/include/boost/move/detail/meta_utils_core.hpp index 4e11673834..fcd04c749b 100644 --- a/contrib/restricted/boost/move/include/boost/move/detail/meta_utils_core.hpp +++ b/contrib/restricted/boost/move/include/boost/move/detail/meta_utils_core.hpp @@ -131,6 +131,21 @@ struct enable_if_same : enable_if<is_same<T, U>, R> {}; template <class T, class U, class R = enable_if_nat> struct disable_if_same : disable_if<is_same<T, U>, R> {}; +////////////////////////////////////// +// is_lvalue_reference +////////////////////////////////////// +template<class T> +struct is_lvalue_reference +{ + static const bool value = false; +}; + +template<class T> +struct is_lvalue_reference<T&> +{ + static const bool value = true; +}; + } //namespace move_detail { } //namespace boost { diff --git a/contrib/restricted/boost/move/include/boost/move/detail/nsec_clock.hpp b/contrib/restricted/boost/move/include/boost/move/detail/nsec_clock.hpp index 88c0551d2d..62ec2dfb0b 100644 --- a/contrib/restricted/boost/move/include/boost/move/detail/nsec_clock.hpp +++ b/contrib/restricted/boost/move/include/boost/move/detail/nsec_clock.hpp @@ -43,7 +43,7 @@ #include <cassert> #if defined( BOOST_USE_WINDOWS_H ) -#include <Windows.h> +#include <windows.h> #else #if defined (WIN32_PLATFORM_PSPC) diff --git a/contrib/restricted/boost/move/include/boost/move/detail/placement_new.hpp b/contrib/restricted/boost/move/include/boost/move/detail/placement_new.hpp index 69d33328cf..11a9fca576 100644 --- a/contrib/restricted/boost/move/include/boost/move/detail/placement_new.hpp +++ b/contrib/restricted/boost/move/include/boost/move/detail/placement_new.hpp @@ -18,6 +18,8 @@ # pragma once #endif +#include <cstddef> + struct boost_move_new_t{}; //avoid including <new> diff --git a/contrib/restricted/boost/move/include/boost/move/detail/std_ns_begin.hpp b/contrib/restricted/boost/move/include/boost/move/detail/std_ns_begin.hpp index 1d28117b7c..de13cde548 100644 --- a/contrib/restricted/boost/move/include/boost/move/detail/std_ns_begin.hpp +++ b/contrib/restricted/boost/move/include/boost/move/detail/std_ns_begin.hpp @@ -23,12 +23,12 @@ #elif defined(BOOST_GNU_STDLIB) && defined(_GLIBCXX_BEGIN_NAMESPACE) //GCC >= 4.2 #define BOOST_MOVE_STD_NS_BEG _GLIBCXX_BEGIN_NAMESPACE(std) #define BOOST_MOVE_STD_NS_END _GLIBCXX_END_NAMESPACE -#else - #if defined(_MSC_VER) && (_MSC_VER >= 1915) - #pragma warning (push) - #pragma warning (disable : 4643) // Forward declaring 'X' in namespace std is not permitted by the C++ Standard - #endif +#elif defined(BOOST_DINKUMWARE_STDLIB) + #define BOOST_MOVE_STD_NS_BEG _STD_BEGIN + #define BOOST_MOVE_STD_NS_END _STD_END +#endif - #define BOOST_MOVE_STD_NS_BEG namespace std{ - #define BOOST_MOVE_STD_NS_END } +#if defined(_MSC_VER) && (_MSC_VER >= 1915) + #pragma warning (push) + #pragma warning (disable : 4643) // Forward declaring 'X' in namespace std is not permitted by the C++ Standard #endif diff --git a/contrib/restricted/boost/move/include/boost/move/detail/std_ns_end.hpp b/contrib/restricted/boost/move/include/boost/move/detail/std_ns_end.hpp index 61af2d7b1e..abc40ed022 100644 --- a/contrib/restricted/boost/move/include/boost/move/detail/std_ns_end.hpp +++ b/contrib/restricted/boost/move/include/boost/move/detail/std_ns_end.hpp @@ -14,3 +14,6 @@ #elif defined(_MSC_VER) && (_MSC_VER >= 1915) #pragma warning (pop) #endif //BOOST_MOVE_STD_NS_GCC_DIAGNOSTIC_PUSH + +#undef BOOST_MOVE_STD_NS_BEG +#undef BOOST_MOVE_STD_NS_END diff --git a/contrib/restricted/boost/move/ya.make b/contrib/restricted/boost/move/ya.make index 0821343e3e..5475939966 100644 --- a/contrib/restricted/boost/move/ya.make +++ b/contrib/restricted/boost/move/ya.make @@ -9,9 +9,9 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.86.0) +VERSION(1.87.0) -ORIGINAL_SOURCE(https://github.com/boostorg/move/archive/boost-1.86.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/move/archive/boost-1.87.0.tar.gz) PEERDIR( contrib/restricted/boost/config diff --git a/contrib/restricted/boost/regex/.yandex_meta/devtools.copyrights.report b/contrib/restricted/boost/regex/.yandex_meta/devtools.copyrights.report index 0a83d961d8..87aebabfea 100644 --- a/contrib/restricted/boost/regex/.yandex_meta/devtools.copyrights.report +++ b/contrib/restricted/boost/regex/.yandex_meta/devtools.copyrights.report @@ -45,7 +45,6 @@ BELONGS ya.make Files with this license: include/boost/regex/icu.hpp [3:4] include/boost/regex/pending/unicode_iterator.hpp [3:4] - include/boost/regex/v4/indexed_bit_flag.hpp [3:4] KEEP COPYRIGHT_SERVICE_LABEL 1f04e771ae77a341bbc9ea094604bb99 BELONGS ya.make @@ -69,7 +68,6 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - include/boost/regex/v4/error_type.hpp [3:4] include/boost/regex/v5/error_type.hpp [3:4] KEEP COPYRIGHT_SERVICE_LABEL 3e16d1b440a4ce72af6366ce0b5d944c @@ -82,7 +80,6 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - include/boost/regex/v4/basic_regex.hpp [3:4] include/boost/regex/v5/basic_regex.hpp [3:4] src/regex.cpp [3:4] src/regex_debug.cpp [3:4] @@ -97,8 +94,6 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - include/boost/regex/v4/basic_regex.hpp [3:4] - include/boost/regex/v4/cpp_regex_traits.hpp [3:4] include/boost/regex/v5/basic_regex.hpp [3:4] include/boost/regex/v5/cpp_regex_traits.hpp [3:4] @@ -116,16 +111,6 @@ BELONGS ya.make include/boost/regex/mfc.hpp [3:4] include/boost/regex/pending/object_cache.hpp [3:4] include/boost/regex/pending/static_mutex.hpp [3:4] - include/boost/regex/v4/basic_regex_creator.hpp [3:4] - include/boost/regex/v4/basic_regex_parser.hpp [3:4] - include/boost/regex/v4/c_regex_traits.hpp [3:4] - include/boost/regex/v4/cpp_regex_traits.hpp [3:4] - include/boost/regex/v4/icu.hpp [3:4] - include/boost/regex/v4/object_cache.hpp [3:4] - include/boost/regex/v4/protected_call.hpp [3:4] - include/boost/regex/v4/regex_traits_defaults.hpp [3:4] - include/boost/regex/v4/unicode_iterator.hpp [3:4] - include/boost/regex/v4/w32_regex_traits.hpp [3:4] include/boost/regex/v5/basic_regex_creator.hpp [3:4] include/boost/regex/v5/basic_regex_parser.hpp [3:4] include/boost/regex/v5/c_regex_traits.hpp [3:4] @@ -159,13 +144,6 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - include/boost/regex/v4/char_regex_traits.hpp [3:4] - include/boost/regex/v4/iterator_category.hpp [3:4] - include/boost/regex/v4/mem_block_cache.hpp [2:3] - include/boost/regex/v4/perl_matcher.hpp [3:4] - include/boost/regex/v4/perl_matcher_common.hpp [3:4] - include/boost/regex/v4/perl_matcher_non_recursive.hpp [3:4] - include/boost/regex/v4/perl_matcher_recursive.hpp [3:4] include/boost/regex/v5/char_regex_traits.hpp [3:4] include/boost/regex/v5/iterator_category.hpp [3:4] include/boost/regex/v5/mem_block_cache.hpp [2:3] @@ -191,22 +169,6 @@ BELONGS ya.make include/boost/regex/pattern_except.hpp [3:4] include/boost/regex/regex_traits.hpp [3:4] include/boost/regex/user.hpp [3:4] - include/boost/regex/v4/cregex.hpp [3:4] - include/boost/regex/v4/iterator_traits.hpp [3:4] - include/boost/regex/v4/match_flags.hpp [3:4] - include/boost/regex/v4/pattern_except.hpp [3:4] - include/boost/regex/v4/primary_transform.hpp [3:4] - include/boost/regex/v4/regbase.hpp [3:4] - include/boost/regex/v4/regex.hpp [3:4] - include/boost/regex/v4/regex_fwd.hpp [3:4] - include/boost/regex/v4/regex_grep.hpp [3:4] - include/boost/regex/v4/regex_match.hpp [3:4] - include/boost/regex/v4/regex_merge.hpp [3:4] - include/boost/regex/v4/regex_raw_buffer.hpp [3:4] - include/boost/regex/v4/regex_search.hpp [3:4] - include/boost/regex/v4/regex_split.hpp [3:4] - include/boost/regex/v4/states.hpp [3:4] - include/boost/regex/v4/sub_match.hpp [3:4] include/boost/regex/v5/cregex.hpp [3:4] include/boost/regex/v5/iterator_traits.hpp [3:4] include/boost/regex/v5/match_flags.hpp [3:4] @@ -237,7 +199,6 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - include/boost/regex/v4/regex_format.hpp [3:4] include/boost/regex/v5/regex_format.hpp [3:4] KEEP COPYRIGHT_SERVICE_LABEL e242cf22a8569c95827537aca7b8285d @@ -250,12 +211,6 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - include/boost/regex/v4/regex_iterator.hpp [3:4] - include/boost/regex/v4/regex_token_iterator.hpp [3:4] - include/boost/regex/v4/regex_traits.hpp [3:4] - include/boost/regex/v4/syntax_type.hpp [3:4] - include/boost/regex/v4/u32regex_iterator.hpp [3:4] - include/boost/regex/v4/u32regex_token_iterator.hpp [3:4] include/boost/regex/v5/regex_iterator.hpp [3:4] include/boost/regex/v5/regex_token_iterator.hpp [3:4] include/boost/regex/v5/regex_traits.hpp [3:4] @@ -273,9 +228,6 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - include/boost/regex/v4/match_results.hpp [3:4] - include/boost/regex/v4/regex_format.hpp [3:4] - include/boost/regex/v4/regex_replace.hpp [3:4] include/boost/regex/v5/match_results.hpp [3:4] include/boost/regex/v5/regex_format.hpp [3:4] include/boost/regex/v5/regex_replace.hpp [3:4] @@ -290,5 +242,4 @@ BELONGS ya.make Score : 100.00 Match type : COPYRIGHT Files with this license: - include/boost/regex/v4/regex_workaround.hpp [3:4] include/boost/regex/v5/regex_workaround.hpp [3:4] diff --git a/contrib/restricted/boost/regex/.yandex_meta/devtools.licenses.report b/contrib/restricted/boost/regex/.yandex_meta/devtools.licenses.report index fbec0562d9..45b8ef2d5f 100644 --- a/contrib/restricted/boost/regex/.yandex_meta/devtools.licenses.report +++ b/contrib/restricted/boost/regex/.yandex_meta/devtools.licenses.report @@ -45,7 +45,6 @@ BELONGS ya.make Match type : NOTICE Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0 Files with this license: - include/boost/regex/v4/regex_token_iterator.hpp [6:8] include/boost/regex/v5/regex_token_iterator.hpp [6:8] KEEP BSL-1.0 65724380ee1601b28f0db6323a0ad006 @@ -61,11 +60,6 @@ BELONGS ya.make Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0 Files with this license: include/boost/regex/config.hpp [6:8] - include/boost/regex/v4/char_regex_traits.hpp [6:8] - include/boost/regex/v4/cregex.hpp [6:8] - include/boost/regex/v4/error_type.hpp [6:8] - include/boost/regex/v4/icu.hpp [6:8] - include/boost/regex/v4/regex_traits_defaults.hpp [6:8] include/boost/regex/v5/char_regex_traits.hpp [6:8] include/boost/regex/v5/cregex.hpp [6:8] include/boost/regex/v5/error_type.hpp [6:8] @@ -97,45 +91,6 @@ BELONGS ya.make include/boost/regex/pending/unicode_iterator.hpp [6:8] include/boost/regex/regex_traits.hpp [6:8] include/boost/regex/user.hpp [6:8] - include/boost/regex/v4/basic_regex_creator.hpp [6:8] - include/boost/regex/v4/basic_regex_parser.hpp [6:8] - include/boost/regex/v4/c_regex_traits.hpp [6:8] - include/boost/regex/v4/cpp_regex_traits.hpp [6:8] - include/boost/regex/v4/indexed_bit_flag.hpp [6:8] - include/boost/regex/v4/iterator_category.hpp [6:8] - include/boost/regex/v4/iterator_traits.hpp [6:8] - include/boost/regex/v4/match_flags.hpp [6:8] - include/boost/regex/v4/match_results.hpp [6:8] - include/boost/regex/v4/mem_block_cache.hpp [5:7] - include/boost/regex/v4/object_cache.hpp [6:8] - include/boost/regex/v4/pattern_except.hpp [6:8] - include/boost/regex/v4/perl_matcher.hpp [6:8] - include/boost/regex/v4/perl_matcher_common.hpp [6:8] - include/boost/regex/v4/perl_matcher_non_recursive.hpp [6:8] - include/boost/regex/v4/perl_matcher_recursive.hpp [6:8] - include/boost/regex/v4/primary_transform.hpp [6:8] - include/boost/regex/v4/protected_call.hpp [6:8] - include/boost/regex/v4/regbase.hpp [6:8] - include/boost/regex/v4/regex.hpp [6:8] - include/boost/regex/v4/regex_format.hpp [6:8] - include/boost/regex/v4/regex_fwd.hpp [6:8] - include/boost/regex/v4/regex_grep.hpp [6:8] - include/boost/regex/v4/regex_iterator.hpp [6:8] - include/boost/regex/v4/regex_match.hpp [6:8] - include/boost/regex/v4/regex_merge.hpp [6:8] - include/boost/regex/v4/regex_raw_buffer.hpp [6:8] - include/boost/regex/v4/regex_replace.hpp [6:8] - include/boost/regex/v4/regex_search.hpp [6:8] - include/boost/regex/v4/regex_split.hpp [6:8] - include/boost/regex/v4/regex_traits.hpp [6:8] - include/boost/regex/v4/regex_workaround.hpp [6:8] - include/boost/regex/v4/states.hpp [6:8] - include/boost/regex/v4/sub_match.hpp [6:8] - include/boost/regex/v4/syntax_type.hpp [6:8] - include/boost/regex/v4/u32regex_iterator.hpp [6:8] - include/boost/regex/v4/u32regex_token_iterator.hpp [6:8] - include/boost/regex/v4/unicode_iterator.hpp [6:8] - include/boost/regex/v4/w32_regex_traits.hpp [6:8] include/boost/regex/v5/basic_regex_creator.hpp [6:8] include/boost/regex/v5/basic_regex_parser.hpp [6:8] include/boost/regex/v5/c_regex_traits.hpp [6:8] @@ -193,5 +148,4 @@ BELONGS ya.make Match type : NOTICE Links : http://www.boost.org/LICENSE_1_0.txt, http://www.boost.org/users/license.html, https://spdx.org/licenses/BSL-1.0 Files with this license: - include/boost/regex/v4/basic_regex.hpp [6:8] include/boost/regex/v5/basic_regex.hpp [6:8] diff --git a/contrib/restricted/boost/regex/include/boost/cregex.hpp b/contrib/restricted/boost/regex/include/boost/cregex.hpp index 78012dd658..7ad09e3f84 100644 --- a/contrib/restricted/boost/regex/include/boost/cregex.hpp +++ b/contrib/restricted/boost/regex/include/boost/cregex.hpp @@ -25,7 +25,7 @@ #endif #ifdef BOOST_REGEX_CXX03 -#include <boost/regex/v4/cregex.hpp> +#error #include <boost/regex/v4/cregex.hpp> #else #include <boost/regex/v5/cregex.hpp> #endif diff --git a/contrib/restricted/boost/regex/include/boost/regex.hpp b/contrib/restricted/boost/regex/include/boost/regex.hpp index b0c8bf13c7..37e0dfe3ef 100644 --- a/contrib/restricted/boost/regex/include/boost/regex.hpp +++ b/contrib/restricted/boost/regex/include/boost/regex.hpp @@ -29,7 +29,7 @@ #endif #ifdef BOOST_REGEX_CXX03 -#include <boost/regex/v4/regex.hpp> +#error #include <boost/regex/v4/regex.hpp> #else #include <boost/regex/v5/regex.hpp> #endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/concepts.hpp b/contrib/restricted/boost/regex/include/boost/regex/concepts.hpp index 2eafac1b57..d2c96afad9 100644 --- a/contrib/restricted/boost/regex/include/boost/regex/concepts.hpp +++ b/contrib/restricted/boost/regex/include/boost/regex/concepts.hpp @@ -23,7 +23,7 @@ #include <boost/concept_check.hpp> #include <boost/type_traits/is_enum.hpp> #include <boost/type_traits/is_base_and_derived.hpp> -#include <boost/static_assert.hpp> +#error #include <boost/static_assert.hpp> #ifndef BOOST_TEST_TR1_REGEX #include <boost/regex.hpp> #endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/icu.hpp b/contrib/restricted/boost/regex/include/boost/regex/icu.hpp index b312612d19..601717d1c7 100644 --- a/contrib/restricted/boost/regex/include/boost/regex/icu.hpp +++ b/contrib/restricted/boost/regex/include/boost/regex/icu.hpp @@ -22,7 +22,7 @@ #include <boost/regex/config.hpp> #ifdef BOOST_REGEX_CXX03 -#include <boost/regex/v4/icu.hpp> +#error #include <boost/regex/v4/icu.hpp> #else #include <boost/regex/v5/icu.hpp> #endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/pattern_except.hpp b/contrib/restricted/boost/regex/include/boost/regex/pattern_except.hpp index f2af1afe64..59c0d399c1 100644 --- a/contrib/restricted/boost/regex/include/boost/regex/pattern_except.hpp +++ b/contrib/restricted/boost/regex/include/boost/regex/pattern_except.hpp @@ -24,7 +24,7 @@ #endif #ifdef BOOST_REGEX_CXX03 -#include <boost/regex/v4/pattern_except.hpp> +#error #include <boost/regex/v4/pattern_except.hpp> #else #include <boost/regex/v5/pattern_except.hpp> #endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/pending/object_cache.hpp b/contrib/restricted/boost/regex/include/boost/regex/pending/object_cache.hpp index 0ddbdadfa3..271cb2c36f 100644 --- a/contrib/restricted/boost/regex/include/boost/regex/pending/object_cache.hpp +++ b/contrib/restricted/boost/regex/include/boost/regex/pending/object_cache.hpp @@ -21,7 +21,7 @@ #include <boost/regex/config.hpp> #ifdef BOOST_REGEX_CXX03 -#include <boost/regex/v4/object_cache.hpp> +#error #include <boost/regex/v4/object_cache.hpp> #else #include <boost/regex/v5/object_cache.hpp> #endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/pending/unicode_iterator.hpp b/contrib/restricted/boost/regex/include/boost/regex/pending/unicode_iterator.hpp index a565570a22..c5b4200e0e 100644 --- a/contrib/restricted/boost/regex/include/boost/regex/pending/unicode_iterator.hpp +++ b/contrib/restricted/boost/regex/include/boost/regex/pending/unicode_iterator.hpp @@ -22,7 +22,7 @@ #include <boost/regex/config.hpp> #if defined(BOOST_REGEX_CXX03) -#include <boost/regex/v4/unicode_iterator.hpp> +#error #include <boost/regex/v4/unicode_iterator.hpp> #else #include <boost/regex/v5/unicode_iterator.hpp> #endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/regex_traits.hpp b/contrib/restricted/boost/regex/include/boost/regex/regex_traits.hpp index 2b383160c1..e66284c6cd 100644 --- a/contrib/restricted/boost/regex/include/boost/regex/regex_traits.hpp +++ b/contrib/restricted/boost/regex/include/boost/regex/regex_traits.hpp @@ -25,7 +25,7 @@ # ifndef BOOST_REGEX_TRAITS_HPP_INCLUDED #ifdef BOOST_REGEX_CXX03 -# include <boost/regex/v4/regex_traits.hpp> +# error #include <boost/regex/v4/regex_traits.hpp> #else # include <boost/regex/v5/regex_traits.hpp> #endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/basic_regex.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/basic_regex.hpp deleted file mode 100644 index 0408a7543c..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/basic_regex.hpp +++ /dev/null @@ -1,797 +0,0 @@ -/* - * - * Copyright (c) 1998-2004 John Maddock - * Copyright 2011 Garmin Ltd. or its subsidiaries - * - * Distributed under the Boost Software License, Version 1.0. - * (See accompanying file LICENSE_1_0.txt or copy at - * http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org/ for most recent version. - * FILE basic_regex.cpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares template class basic_regex. - */ - -#ifndef BOOST_REGEX_V4_BASIC_REGEX_HPP -#define BOOST_REGEX_V4_BASIC_REGEX_HPP - -#include <boost/type_traits/is_same.hpp> -#include <boost/container_hash/hash.hpp> - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -namespace boost{ -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable : 4251) -#if BOOST_MSVC < 1700 -# pragma warning(disable : 4231) -#endif -#if BOOST_MSVC < 1600 -#pragma warning(disable : 4660) -#endif -#if BOOST_MSVC < 1910 -#pragma warning(disable:4800) -#endif -#endif - -namespace BOOST_REGEX_DETAIL_NS{ - -// -// forward declaration, we will need this one later: -// -template <class charT, class traits> -class basic_regex_parser; - -template <class I> -void bubble_down_one(I first, I last) -{ - if(first != last) - { - I next = last - 1; - while((next != first) && (*next < *(next-1))) - { - (next-1)->swap(*next); - --next; - } - } -} - -static const int hash_value_mask = 1 << (std::numeric_limits<int>::digits - 1); - -template <class Iterator> -inline int hash_value_from_capture_name(Iterator i, Iterator j) -{ - std::size_t r = boost::hash_range(i, j); - r %= ((std::numeric_limits<int>::max)()); - return static_cast<int>(r) | hash_value_mask; -} - -class named_subexpressions -{ -public: - struct name - { - template <class charT> - name(const charT* i, const charT* j, int idx) - : index(idx) - { - hash = hash_value_from_capture_name(i, j); - } - name(int h, int idx) - : index(idx), hash(h) - { - } - int index; - int hash; - bool operator < (const name& other)const - { - return hash < other.hash; - } - bool operator == (const name& other)const - { - return hash == other.hash; - } - void swap(name& other) - { - std::swap(index, other.index); - std::swap(hash, other.hash); - } - }; - - typedef std::vector<name>::const_iterator const_iterator; - typedef std::pair<const_iterator, const_iterator> range_type; - - named_subexpressions(){} - - template <class charT> - void set_name(const charT* i, const charT* j, int index) - { - m_sub_names.push_back(name(i, j, index)); - bubble_down_one(m_sub_names.begin(), m_sub_names.end()); - } - template <class charT> - int get_id(const charT* i, const charT* j)const - { - name t(i, j, 0); - typename std::vector<name>::const_iterator pos = std::lower_bound(m_sub_names.begin(), m_sub_names.end(), t); - if((pos != m_sub_names.end()) && (*pos == t)) - { - return pos->index; - } - return -1; - } - template <class charT> - range_type equal_range(const charT* i, const charT* j)const - { - name t(i, j, 0); - return std::equal_range(m_sub_names.begin(), m_sub_names.end(), t); - } - int get_id(int h)const - { - name t(h, 0); - std::vector<name>::const_iterator pos = std::lower_bound(m_sub_names.begin(), m_sub_names.end(), t); - if((pos != m_sub_names.end()) && (*pos == t)) - { - return pos->index; - } - return -1; - } - range_type equal_range(int h)const - { - name t(h, 0); - return std::equal_range(m_sub_names.begin(), m_sub_names.end(), t); - } -private: - std::vector<name> m_sub_names; -}; - -// -// class regex_data: -// represents the data we wish to expose to the matching algorithms. -// -template <class charT, class traits> -struct regex_data : public named_subexpressions -{ - typedef regex_constants::syntax_option_type flag_type; - typedef std::size_t size_type; - - regex_data(const ::boost::shared_ptr< - ::boost::regex_traits_wrapper<traits> >& t) - : m_ptraits(t), m_flags(0), m_status(0), m_expression(0), m_expression_len(0), - m_mark_count(0), m_first_state(0), m_restart_type(0), -#if !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) && !(defined(BOOST_MSVC) && (BOOST_MSVC < 1900)) - m_startmap{ 0 }, -#endif - m_can_be_null(0), m_word_mask(0), m_has_recursions(false), m_disable_match_any(false) {} - regex_data() - : m_ptraits(new ::boost::regex_traits_wrapper<traits>()), m_flags(0), m_status(0), m_expression(0), m_expression_len(0), - m_mark_count(0), m_first_state(0), m_restart_type(0), -#if !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) && !(defined(BOOST_MSVC) && (BOOST_MSVC < 1900)) - m_startmap{ 0 }, -#endif - m_can_be_null(0), m_word_mask(0), m_has_recursions(false), m_disable_match_any(false) {} - - ::boost::shared_ptr< - ::boost::regex_traits_wrapper<traits> - > m_ptraits; // traits class instance - flag_type m_flags; // flags with which we were compiled - int m_status; // error code (0 implies OK). - const charT* m_expression; // the original expression - std::ptrdiff_t m_expression_len; // the length of the original expression - size_type m_mark_count; // the number of marked sub-expressions - BOOST_REGEX_DETAIL_NS::re_syntax_base* m_first_state; // the first state of the machine - unsigned m_restart_type; // search optimisation type - unsigned char m_startmap[1 << CHAR_BIT]; // which characters can start a match - unsigned int m_can_be_null; // whether we can match a null string - BOOST_REGEX_DETAIL_NS::raw_storage m_data; // the buffer in which our states are constructed - typename traits::char_class_type m_word_mask; // mask used to determine if a character is a word character - std::vector< - std::pair< - std::size_t, std::size_t> > m_subs; // Position of sub-expressions within the *string*. - bool m_has_recursions; // whether we have recursive expressions; - bool m_disable_match_any; // when set we need to disable the match_any flag as it causes different/buggy behaviour. -}; -// -// class basic_regex_implementation -// pimpl implementation class for basic_regex. -// -template <class charT, class traits> -class basic_regex_implementation - : public regex_data<charT, traits> -{ -public: - typedef regex_constants::syntax_option_type flag_type; - typedef std::ptrdiff_t difference_type; - typedef std::size_t size_type; - typedef typename traits::locale_type locale_type; - typedef const charT* const_iterator; - - basic_regex_implementation(){} - basic_regex_implementation(const ::boost::shared_ptr< - ::boost::regex_traits_wrapper<traits> >& t) - : regex_data<charT, traits>(t) {} - void assign(const charT* arg_first, - const charT* arg_last, - flag_type f) - { - regex_data<charT, traits>* pdat = this; - basic_regex_parser<charT, traits> parser(pdat); - parser.parse(arg_first, arg_last, f); - } - - locale_type BOOST_REGEX_CALL imbue(locale_type l) - { - return this->m_ptraits->imbue(l); - } - locale_type BOOST_REGEX_CALL getloc()const - { - return this->m_ptraits->getloc(); - } - std::basic_string<charT> BOOST_REGEX_CALL str()const - { - std::basic_string<charT> result; - if(this->m_status == 0) - result = std::basic_string<charT>(this->m_expression, this->m_expression_len); - return result; - } - const_iterator BOOST_REGEX_CALL expression()const - { - return this->m_expression; - } - std::pair<const_iterator, const_iterator> BOOST_REGEX_CALL subexpression(std::size_t n)const - { - const std::pair<std::size_t, std::size_t>& pi = this->m_subs.at(n); - std::pair<const_iterator, const_iterator> p(expression() + pi.first, expression() + pi.second); - return p; - } - // - // begin, end: - const_iterator BOOST_REGEX_CALL begin()const - { - return (this->m_status ? 0 : this->m_expression); - } - const_iterator BOOST_REGEX_CALL end()const - { - return (this->m_status ? 0 : this->m_expression + this->m_expression_len); - } - flag_type BOOST_REGEX_CALL flags()const - { - return this->m_flags; - } - size_type BOOST_REGEX_CALL size()const - { - return this->m_expression_len; - } - int BOOST_REGEX_CALL status()const - { - return this->m_status; - } - size_type BOOST_REGEX_CALL mark_count()const - { - return this->m_mark_count - 1; - } - const BOOST_REGEX_DETAIL_NS::re_syntax_base* get_first_state()const - { - return this->m_first_state; - } - unsigned get_restart_type()const - { - return this->m_restart_type; - } - const unsigned char* get_map()const - { - return this->m_startmap; - } - const ::boost::regex_traits_wrapper<traits>& get_traits()const - { - return *(this->m_ptraits); - } - bool can_be_null()const - { - return this->m_can_be_null; - } - const regex_data<charT, traits>& get_data()const - { - basic_regex_implementation<charT, traits> const* p = this; - return *static_cast<const regex_data<charT, traits>*>(p); - } -}; - -} // namespace BOOST_REGEX_DETAIL_NS -// -// class basic_regex: -// represents the compiled -// regular expression: -// - -#ifdef BOOST_REGEX_NO_FWD -template <class charT, class traits = regex_traits<charT> > -#else -template <class charT, class traits > -#endif -class basic_regex : public regbase -{ -public: - // typedefs: - typedef std::size_t traits_size_type; - typedef typename traits::string_type traits_string_type; - typedef charT char_type; - typedef traits traits_type; - - typedef charT value_type; - typedef charT& reference; - typedef const charT& const_reference; - typedef const charT* const_iterator; - typedef const_iterator iterator; - typedef std::ptrdiff_t difference_type; - typedef std::size_t size_type; - typedef regex_constants::syntax_option_type flag_type; - // locale_type - // placeholder for actual locale type used by the - // traits class to localise *this. - typedef typename traits::locale_type locale_type; - -public: - explicit basic_regex(){} - explicit basic_regex(const charT* p, flag_type f = regex_constants::normal) - { - assign(p, f); - } - basic_regex(const charT* p1, const charT* p2, flag_type f = regex_constants::normal) - { - assign(p1, p2, f); - } - basic_regex(const charT* p, size_type len, flag_type f) - { - assign(p, len, f); - } - basic_regex(const basic_regex& that) - : m_pimpl(that.m_pimpl) {} - ~basic_regex(){} - basic_regex& BOOST_REGEX_CALL operator=(const basic_regex& that) - { - return assign(that); - } - basic_regex& BOOST_REGEX_CALL operator=(const charT* ptr) - { - return assign(ptr); - } - - // - // assign: - basic_regex& assign(const basic_regex& that) - { - m_pimpl = that.m_pimpl; - return *this; - } - basic_regex& assign(const charT* p, flag_type f = regex_constants::normal) - { - return assign(p, p + traits::length(p), f); - } - basic_regex& assign(const charT* p, size_type len, flag_type f) - { - return assign(p, p + len, f); - } -private: - basic_regex& do_assign(const charT* p1, - const charT* p2, - flag_type f); -public: - basic_regex& assign(const charT* p1, - const charT* p2, - flag_type f = regex_constants::normal) - { - return do_assign(p1, p2, f); - } -#if !defined(BOOST_NO_MEMBER_TEMPLATES) - - template <class ST, class SA> - unsigned int BOOST_REGEX_CALL set_expression(const std::basic_string<charT, ST, SA>& p, flag_type f = regex_constants::normal) - { - return set_expression(p.data(), p.data() + p.size(), f); - } - - template <class ST, class SA> - explicit basic_regex(const std::basic_string<charT, ST, SA>& p, flag_type f = regex_constants::normal) - { - assign(p, f); - } - - template <class InputIterator> - basic_regex(InputIterator arg_first, InputIterator arg_last, flag_type f = regex_constants::normal) - { - typedef typename traits::string_type seq_type; - seq_type a(arg_first, arg_last); - if(!a.empty()) - assign(static_cast<const charT*>(&*a.begin()), static_cast<const charT*>(&*a.begin() + a.size()), f); - else - assign(static_cast<const charT*>(0), static_cast<const charT*>(0), f); - } - - template <class ST, class SA> - basic_regex& BOOST_REGEX_CALL operator=(const std::basic_string<charT, ST, SA>& p) - { - return assign(p.data(), p.data() + p.size(), regex_constants::normal); - } - - template <class string_traits, class A> - basic_regex& BOOST_REGEX_CALL assign( - const std::basic_string<charT, string_traits, A>& s, - flag_type f = regex_constants::normal) - { - return assign(s.data(), s.data() + s.size(), f); - } - - template <class InputIterator> - basic_regex& BOOST_REGEX_CALL assign(InputIterator arg_first, - InputIterator arg_last, - flag_type f = regex_constants::normal) - { - typedef typename traits::string_type seq_type; - seq_type a(arg_first, arg_last); - if(a.size()) - { - const charT* p1 = &*a.begin(); - const charT* p2 = &*a.begin() + a.size(); - return assign(p1, p2, f); - } - return assign(static_cast<const charT*>(0), static_cast<const charT*>(0), f); - } -#else - unsigned int BOOST_REGEX_CALL set_expression(const std::basic_string<charT>& p, flag_type f = regex_constants::normal) - { - return set_expression(p.data(), p.data() + p.size(), f); - } - - basic_regex(const std::basic_string<charT>& p, flag_type f = regex_constants::normal) - { - assign(p, f); - } - - basic_regex& BOOST_REGEX_CALL operator=(const std::basic_string<charT>& p) - { - return assign(p.data(), p.data() + p.size(), regex_constants::normal); - } - - basic_regex& BOOST_REGEX_CALL assign( - const std::basic_string<charT>& s, - flag_type f = regex_constants::normal) - { - return assign(s.data(), s.data() + s.size(), f); - } - -#endif - - // - // locale: - locale_type BOOST_REGEX_CALL imbue(locale_type l); - locale_type BOOST_REGEX_CALL getloc()const - { - return m_pimpl.get() ? m_pimpl->getloc() : locale_type(); - } - // - // getflags: - // retained for backwards compatibility only, "flags" - // is now the preferred name: - flag_type BOOST_REGEX_CALL getflags()const - { - return flags(); - } - flag_type BOOST_REGEX_CALL flags()const - { - return m_pimpl.get() ? m_pimpl->flags() : 0; - } - // - // str: - std::basic_string<charT> BOOST_REGEX_CALL str()const - { - return m_pimpl.get() ? m_pimpl->str() : std::basic_string<charT>(); - } - // - // begin, end, subexpression: - std::pair<const_iterator, const_iterator> BOOST_REGEX_CALL subexpression(std::size_t n)const - { - if(!m_pimpl.get()) - boost::throw_exception(std::logic_error("Can't access subexpressions in an invalid regex.")); - return m_pimpl->subexpression(n); - } - const_iterator BOOST_REGEX_CALL begin()const - { - return (m_pimpl.get() ? m_pimpl->begin() : 0); - } - const_iterator BOOST_REGEX_CALL end()const - { - return (m_pimpl.get() ? m_pimpl->end() : 0); - } - // - // swap: - void BOOST_REGEX_CALL swap(basic_regex& that)throw() - { - m_pimpl.swap(that.m_pimpl); - } - // - // size: - size_type BOOST_REGEX_CALL size()const - { - return (m_pimpl.get() ? m_pimpl->size() : 0); - } - // - // max_size: - size_type BOOST_REGEX_CALL max_size()const - { - return UINT_MAX; - } - // - // empty: - bool BOOST_REGEX_CALL empty()const - { - return (m_pimpl.get() ? 0 != m_pimpl->status() : true); - } - - size_type BOOST_REGEX_CALL mark_count()const - { - return (m_pimpl.get() ? m_pimpl->mark_count() : 0); - } - - int status()const - { - return (m_pimpl.get() ? m_pimpl->status() : regex_constants::error_empty); - } - - int BOOST_REGEX_CALL compare(const basic_regex& that) const - { - if(m_pimpl.get() == that.m_pimpl.get()) - return 0; - if(!m_pimpl.get()) - return -1; - if(!that.m_pimpl.get()) - return 1; - if(status() != that.status()) - return status() - that.status(); - if(flags() != that.flags()) - return flags() - that.flags(); - return str().compare(that.str()); - } - bool BOOST_REGEX_CALL operator==(const basic_regex& e)const - { - return compare(e) == 0; - } - bool BOOST_REGEX_CALL operator != (const basic_regex& e)const - { - return compare(e) != 0; - } - bool BOOST_REGEX_CALL operator<(const basic_regex& e)const - { - return compare(e) < 0; - } - bool BOOST_REGEX_CALL operator>(const basic_regex& e)const - { - return compare(e) > 0; - } - bool BOOST_REGEX_CALL operator<=(const basic_regex& e)const - { - return compare(e) <= 0; - } - bool BOOST_REGEX_CALL operator>=(const basic_regex& e)const - { - return compare(e) >= 0; - } - - // - // The following are deprecated as public interfaces - // but are available for compatibility with earlier versions. - const charT* BOOST_REGEX_CALL expression()const - { - return (m_pimpl.get() && !m_pimpl->status() ? m_pimpl->expression() : 0); - } - unsigned int BOOST_REGEX_CALL set_expression(const charT* p1, const charT* p2, flag_type f = regex_constants::normal) - { - assign(p1, p2, f | regex_constants::no_except); - return status(); - } - unsigned int BOOST_REGEX_CALL set_expression(const charT* p, flag_type f = regex_constants::normal) - { - assign(p, f | regex_constants::no_except); - return status(); - } - unsigned int BOOST_REGEX_CALL error_code()const - { - return status(); - } - // - // private access methods: - // - const BOOST_REGEX_DETAIL_NS::re_syntax_base* get_first_state()const - { - BOOST_REGEX_ASSERT(0 != m_pimpl.get()); - return m_pimpl->get_first_state(); - } - unsigned get_restart_type()const - { - BOOST_REGEX_ASSERT(0 != m_pimpl.get()); - return m_pimpl->get_restart_type(); - } - const unsigned char* get_map()const - { - BOOST_REGEX_ASSERT(0 != m_pimpl.get()); - return m_pimpl->get_map(); - } - const ::boost::regex_traits_wrapper<traits>& get_traits()const - { - BOOST_REGEX_ASSERT(0 != m_pimpl.get()); - return m_pimpl->get_traits(); - } - bool can_be_null()const - { - BOOST_REGEX_ASSERT(0 != m_pimpl.get()); - return m_pimpl->can_be_null(); - } - const BOOST_REGEX_DETAIL_NS::regex_data<charT, traits>& get_data()const - { - BOOST_REGEX_ASSERT(0 != m_pimpl.get()); - return m_pimpl->get_data(); - } - boost::shared_ptr<BOOST_REGEX_DETAIL_NS::named_subexpressions > get_named_subs()const - { - return m_pimpl; - } - -private: - shared_ptr<BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits> > m_pimpl; -}; - -// -// out of line members; -// these are the only members that mutate the basic_regex object, -// and are designed to provide the strong exception guarantee -// (in the event of a throw, the state of the object remains unchanged). -// -template <class charT, class traits> -basic_regex<charT, traits>& basic_regex<charT, traits>::do_assign(const charT* p1, - const charT* p2, - flag_type f) -{ - shared_ptr<BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits> > temp; - if(!m_pimpl.get()) - { - temp = shared_ptr<BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits> >(new BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits>()); - } - else - { - temp = shared_ptr<BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits> >(new BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits>(m_pimpl->m_ptraits)); - } - temp->assign(p1, p2, f); - temp.swap(m_pimpl); - return *this; -} - -template <class charT, class traits> -typename basic_regex<charT, traits>::locale_type BOOST_REGEX_CALL basic_regex<charT, traits>::imbue(locale_type l) -{ - shared_ptr<BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits> > temp(new BOOST_REGEX_DETAIL_NS::basic_regex_implementation<charT, traits>()); - locale_type result = temp->imbue(l); - temp.swap(m_pimpl); - return result; -} - -// -// non-members: -// -template <class charT, class traits> -void swap(basic_regex<charT, traits>& e1, basic_regex<charT, traits>& e2) -{ - e1.swap(e2); -} - -#ifndef BOOST_NO_STD_LOCALE -template <class charT, class traits, class traits2> -std::basic_ostream<charT, traits>& - operator << (std::basic_ostream<charT, traits>& os, - const basic_regex<charT, traits2>& e) -{ - return (os << e.str()); -} -#else -template <class traits> -std::ostream& operator << (std::ostream& os, const basic_regex<char, traits>& e) -{ - return (os << e.str()); -} -#endif - -// -// class reg_expression: -// this is provided for backwards compatibility only, -// it is deprecated, no not use! -// -#ifdef BOOST_REGEX_NO_FWD -template <class charT, class traits = regex_traits<charT> > -#else -template <class charT, class traits > -#endif -class reg_expression : public basic_regex<charT, traits> -{ -public: - typedef typename basic_regex<charT, traits>::flag_type flag_type; - typedef typename basic_regex<charT, traits>::size_type size_type; - explicit reg_expression(){} - explicit reg_expression(const charT* p, flag_type f = regex_constants::normal) - : basic_regex<charT, traits>(p, f){} - reg_expression(const charT* p1, const charT* p2, flag_type f = regex_constants::normal) - : basic_regex<charT, traits>(p1, p2, f){} - reg_expression(const charT* p, size_type len, flag_type f) - : basic_regex<charT, traits>(p, len, f){} - reg_expression(const reg_expression& that) - : basic_regex<charT, traits>(that) {} - ~reg_expression(){} - reg_expression& BOOST_REGEX_CALL operator=(const reg_expression& that) - { - return this->assign(that); - } - -#if !defined(BOOST_NO_MEMBER_TEMPLATES) - template <class ST, class SA> - explicit reg_expression(const std::basic_string<charT, ST, SA>& p, flag_type f = regex_constants::normal) - : basic_regex<charT, traits>(p, f) - { - } - - template <class InputIterator> - reg_expression(InputIterator arg_first, InputIterator arg_last, flag_type f = regex_constants::normal) - : basic_regex<charT, traits>(arg_first, arg_last, f) - { - } - - template <class ST, class SA> - reg_expression& BOOST_REGEX_CALL operator=(const std::basic_string<charT, ST, SA>& p) - { - this->assign(p); - return *this; - } -#else - explicit reg_expression(const std::basic_string<charT>& p, flag_type f = regex_constants::normal) - : basic_regex<charT, traits>(p, f) - { - } - - reg_expression& BOOST_REGEX_CALL operator=(const std::basic_string<charT>& p) - { - this->assign(p); - return *this; - } -#endif - -}; - -#ifdef BOOST_MSVC -#pragma warning (pop) -#endif - -} // namespace boost - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/basic_regex_creator.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/basic_regex_creator.hpp deleted file mode 100644 index b9f02ecea0..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/basic_regex_creator.hpp +++ /dev/null @@ -1,1598 +0,0 @@ -/* - * - * Copyright (c) 2004 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE basic_regex_creator.cpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares template class basic_regex_creator which fills in - * the data members of a regex_data object. - */ - -#ifndef BOOST_REGEX_V4_BASIC_REGEX_CREATOR_HPP -#define BOOST_REGEX_V4_BASIC_REGEX_CREATOR_HPP - -#include <boost/regex/v4/indexed_bit_flag.hpp> - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#ifdef BOOST_MSVC -# pragma warning(push) -#if BOOST_MSVC < 1910 -#pragma warning(disable:4800) -#endif -#endif - -namespace boost{ - -namespace BOOST_REGEX_DETAIL_NS{ - -template <class charT> -struct digraph : public std::pair<charT, charT> -{ - digraph() : std::pair<charT, charT>(charT(0), charT(0)){} - digraph(charT c1) : std::pair<charT, charT>(c1, charT(0)){} - digraph(charT c1, charT c2) : std::pair<charT, charT>(c1, c2) - {} - digraph(const digraph<charT>& d) : std::pair<charT, charT>(d.first, d.second){} -#ifndef BOOST_NO_CXX11_DEFAULTED_FUNCTIONS - digraph<charT>& operator=(const digraph<charT>&) = default; -#endif - template <class Seq> - digraph(const Seq& s) : std::pair<charT, charT>() - { - BOOST_REGEX_ASSERT(s.size() <= 2); - BOOST_REGEX_ASSERT(s.size()); - this->first = s[0]; - this->second = (s.size() > 1) ? s[1] : 0; - } -}; - -template <class charT, class traits> -class basic_char_set -{ -public: - typedef digraph<charT> digraph_type; - typedef typename traits::string_type string_type; - typedef typename traits::char_class_type m_type; - - basic_char_set() - { - m_negate = false; - m_has_digraphs = false; - m_classes = 0; - m_negated_classes = 0; - m_empty = true; - } - - void add_single(const digraph_type& s) - { - m_singles.insert(s); - if(s.second) - m_has_digraphs = true; - m_empty = false; - } - void add_range(const digraph_type& first, const digraph_type& end) - { - m_ranges.push_back(first); - m_ranges.push_back(end); - if(first.second) - { - m_has_digraphs = true; - add_single(first); - } - if(end.second) - { - m_has_digraphs = true; - add_single(end); - } - m_empty = false; - } - void add_class(m_type m) - { - m_classes |= m; - m_empty = false; - } - void add_negated_class(m_type m) - { - m_negated_classes |= m; - m_empty = false; - } - void add_equivalent(const digraph_type& s) - { - m_equivalents.insert(s); - if(s.second) - { - m_has_digraphs = true; - add_single(s); - } - m_empty = false; - } - void negate() - { - m_negate = true; - //m_empty = false; - } - - // - // accessor functions: - // - bool has_digraphs()const - { - return m_has_digraphs; - } - bool is_negated()const - { - return m_negate; - } - typedef typename std::vector<digraph_type>::const_iterator list_iterator; - typedef typename std::set<digraph_type>::const_iterator set_iterator; - set_iterator singles_begin()const - { - return m_singles.begin(); - } - set_iterator singles_end()const - { - return m_singles.end(); - } - list_iterator ranges_begin()const - { - return m_ranges.begin(); - } - list_iterator ranges_end()const - { - return m_ranges.end(); - } - set_iterator equivalents_begin()const - { - return m_equivalents.begin(); - } - set_iterator equivalents_end()const - { - return m_equivalents.end(); - } - m_type classes()const - { - return m_classes; - } - m_type negated_classes()const - { - return m_negated_classes; - } - bool empty()const - { - return m_empty; - } -private: - std::set<digraph_type> m_singles; // a list of single characters to match - std::vector<digraph_type> m_ranges; // a list of end points of our ranges - bool m_negate; // true if the set is to be negated - bool m_has_digraphs; // true if we have digraphs present - m_type m_classes; // character classes to match - m_type m_negated_classes; // negated character classes to match - bool m_empty; // whether we've added anything yet - std::set<digraph_type> m_equivalents; // a list of equivalence classes -}; - -template <class charT, class traits> -class basic_regex_creator -{ -public: - basic_regex_creator(regex_data<charT, traits>* data); - std::ptrdiff_t getoffset(void* addr) - { - return getoffset(addr, m_pdata->m_data.data()); - } - std::ptrdiff_t getoffset(const void* addr, const void* base) - { - return static_cast<const char*>(addr) - static_cast<const char*>(base); - } - re_syntax_base* getaddress(std::ptrdiff_t off) - { - return getaddress(off, m_pdata->m_data.data()); - } - re_syntax_base* getaddress(std::ptrdiff_t off, void* base) - { - return static_cast<re_syntax_base*>(static_cast<void*>(static_cast<char*>(base) + off)); - } - void init(unsigned l_flags) - { - m_pdata->m_flags = l_flags; - m_icase = l_flags & regex_constants::icase; - } - regbase::flag_type flags() - { - return m_pdata->m_flags; - } - void flags(regbase::flag_type f) - { - m_pdata->m_flags = f; - if(m_icase != static_cast<bool>(f & regbase::icase)) - { - m_icase = static_cast<bool>(f & regbase::icase); - } - } - re_syntax_base* append_state(syntax_element_type t, std::size_t s = sizeof(re_syntax_base)); - re_syntax_base* insert_state(std::ptrdiff_t pos, syntax_element_type t, std::size_t s = sizeof(re_syntax_base)); - re_literal* append_literal(charT c); - re_syntax_base* append_set(const basic_char_set<charT, traits>& char_set); - re_syntax_base* append_set(const basic_char_set<charT, traits>& char_set, mpl::false_*); - re_syntax_base* append_set(const basic_char_set<charT, traits>& char_set, mpl::true_*); - void finalize(const charT* p1, const charT* p2); -protected: - regex_data<charT, traits>* m_pdata; // pointer to the basic_regex_data struct we are filling in - const ::boost::regex_traits_wrapper<traits>& - m_traits; // convenience reference to traits class - re_syntax_base* m_last_state; // the last state we added - bool m_icase; // true for case insensitive matches - unsigned m_repeater_id; // the state_id of the next repeater - bool m_has_backrefs; // true if there are actually any backrefs - indexed_bit_flag m_backrefs; // bitmask of permitted backrefs - boost::uintmax_t m_bad_repeats; // bitmask of repeats we can't deduce a startmap for; - bool m_has_recursions; // set when we have recursive expressions to fixup - std::vector<unsigned char> m_recursion_checks; // notes which recursions we've followed while analysing this expression - typename traits::char_class_type m_word_mask; // mask used to determine if a character is a word character - typename traits::char_class_type m_mask_space; // mask used to determine if a character is a word character - typename traits::char_class_type m_lower_mask; // mask used to determine if a character is a lowercase character - typename traits::char_class_type m_upper_mask; // mask used to determine if a character is an uppercase character - typename traits::char_class_type m_alpha_mask; // mask used to determine if a character is an alphabetic character -private: - basic_regex_creator& operator=(const basic_regex_creator&); - basic_regex_creator(const basic_regex_creator&); - - void fixup_pointers(re_syntax_base* state); - void fixup_recursions(re_syntax_base* state); - void create_startmaps(re_syntax_base* state); - int calculate_backstep(re_syntax_base* state); - void create_startmap(re_syntax_base* state, unsigned char* l_map, unsigned int* pnull, unsigned char mask); - unsigned get_restart_type(re_syntax_base* state); - void set_all_masks(unsigned char* bits, unsigned char); - bool is_bad_repeat(re_syntax_base* pt); - void set_bad_repeat(re_syntax_base* pt); - syntax_element_type get_repeat_type(re_syntax_base* state); - void probe_leading_repeat(re_syntax_base* state); -}; - -template <class charT, class traits> -basic_regex_creator<charT, traits>::basic_regex_creator(regex_data<charT, traits>* data) - : m_pdata(data), m_traits(*(data->m_ptraits)), m_last_state(0), m_icase(false), m_repeater_id(0), - m_has_backrefs(false), m_bad_repeats(0), m_has_recursions(false), m_word_mask(0), m_mask_space(0), m_lower_mask(0), m_upper_mask(0), m_alpha_mask(0) -{ - m_pdata->m_data.clear(); - m_pdata->m_status = ::boost::regex_constants::error_ok; - static const charT w = 'w'; - static const charT s = 's'; - static const charT l[5] = { 'l', 'o', 'w', 'e', 'r', }; - static const charT u[5] = { 'u', 'p', 'p', 'e', 'r', }; - static const charT a[5] = { 'a', 'l', 'p', 'h', 'a', }; - m_word_mask = m_traits.lookup_classname(&w, &w +1); - m_mask_space = m_traits.lookup_classname(&s, &s +1); - m_lower_mask = m_traits.lookup_classname(l, l + 5); - m_upper_mask = m_traits.lookup_classname(u, u + 5); - m_alpha_mask = m_traits.lookup_classname(a, a + 5); - m_pdata->m_word_mask = m_word_mask; - BOOST_REGEX_ASSERT(m_word_mask != 0); - BOOST_REGEX_ASSERT(m_mask_space != 0); - BOOST_REGEX_ASSERT(m_lower_mask != 0); - BOOST_REGEX_ASSERT(m_upper_mask != 0); - BOOST_REGEX_ASSERT(m_alpha_mask != 0); -} - -template <class charT, class traits> -re_syntax_base* basic_regex_creator<charT, traits>::append_state(syntax_element_type t, std::size_t s) -{ - // if the state is a backref then make a note of it: - if(t == syntax_element_backref) - this->m_has_backrefs = true; - // append a new state, start by aligning our last one: - m_pdata->m_data.align(); - // set the offset to the next state in our last one: - if(m_last_state) - m_last_state->next.i = m_pdata->m_data.size() - getoffset(m_last_state); - // now actually extend our data: - m_last_state = static_cast<re_syntax_base*>(m_pdata->m_data.extend(s)); - // fill in boilerplate options in the new state: - m_last_state->next.i = 0; - m_last_state->type = t; - return m_last_state; -} - -template <class charT, class traits> -re_syntax_base* basic_regex_creator<charT, traits>::insert_state(std::ptrdiff_t pos, syntax_element_type t, std::size_t s) -{ - // append a new state, start by aligning our last one: - m_pdata->m_data.align(); - // set the offset to the next state in our last one: - if(m_last_state) - m_last_state->next.i = m_pdata->m_data.size() - getoffset(m_last_state); - // remember the last state position: - std::ptrdiff_t off = getoffset(m_last_state) + s; - // now actually insert our data: - re_syntax_base* new_state = static_cast<re_syntax_base*>(m_pdata->m_data.insert(pos, s)); - // fill in boilerplate options in the new state: - new_state->next.i = s; - new_state->type = t; - m_last_state = getaddress(off); - return new_state; -} - -template <class charT, class traits> -re_literal* basic_regex_creator<charT, traits>::append_literal(charT c) -{ - re_literal* result; - // start by seeing if we have an existing re_literal we can extend: - if((0 == m_last_state) || (m_last_state->type != syntax_element_literal)) - { - // no existing re_literal, create a new one: - result = static_cast<re_literal*>(append_state(syntax_element_literal, sizeof(re_literal) + sizeof(charT))); - result->length = 1; - *static_cast<charT*>(static_cast<void*>(result+1)) = m_traits.translate(c, m_icase); - } - else - { - // we have an existing re_literal, extend it: - std::ptrdiff_t off = getoffset(m_last_state); - m_pdata->m_data.extend(sizeof(charT)); - m_last_state = result = static_cast<re_literal*>(getaddress(off)); - charT* characters = static_cast<charT*>(static_cast<void*>(result+1)); - characters[result->length] = m_traits.translate(c, m_icase); - result->length += 1; - } - return result; -} - -template <class charT, class traits> -inline re_syntax_base* basic_regex_creator<charT, traits>::append_set( - const basic_char_set<charT, traits>& char_set) -{ - typedef mpl::bool_< (sizeof(charT) == 1) > truth_type; - return char_set.has_digraphs() - ? append_set(char_set, static_cast<mpl::false_*>(0)) - : append_set(char_set, static_cast<truth_type*>(0)); -} - -template <class charT, class traits> -re_syntax_base* basic_regex_creator<charT, traits>::append_set( - const basic_char_set<charT, traits>& char_set, mpl::false_*) -{ - typedef typename traits::string_type string_type; - typedef typename basic_char_set<charT, traits>::list_iterator item_iterator; - typedef typename basic_char_set<charT, traits>::set_iterator set_iterator; - typedef typename traits::char_class_type m_type; - - re_set_long<m_type>* result = static_cast<re_set_long<m_type>*>(append_state(syntax_element_long_set, sizeof(re_set_long<m_type>))); - // - // fill in the basics: - // - result->csingles = static_cast<unsigned int>(::boost::BOOST_REGEX_DETAIL_NS::distance(char_set.singles_begin(), char_set.singles_end())); - result->cranges = static_cast<unsigned int>(::boost::BOOST_REGEX_DETAIL_NS::distance(char_set.ranges_begin(), char_set.ranges_end())) / 2; - result->cequivalents = static_cast<unsigned int>(::boost::BOOST_REGEX_DETAIL_NS::distance(char_set.equivalents_begin(), char_set.equivalents_end())); - result->cclasses = char_set.classes(); - result->cnclasses = char_set.negated_classes(); - if(flags() & regbase::icase) - { - // adjust classes as needed: - if(((result->cclasses & m_lower_mask) == m_lower_mask) || ((result->cclasses & m_upper_mask) == m_upper_mask)) - result->cclasses |= m_alpha_mask; - if(((result->cnclasses & m_lower_mask) == m_lower_mask) || ((result->cnclasses & m_upper_mask) == m_upper_mask)) - result->cnclasses |= m_alpha_mask; - } - - result->isnot = char_set.is_negated(); - result->singleton = !char_set.has_digraphs(); - // - // remember where the state is for later: - // - std::ptrdiff_t offset = getoffset(result); - // - // now extend with all the singles: - // - item_iterator first, last; - set_iterator sfirst, slast; - sfirst = char_set.singles_begin(); - slast = char_set.singles_end(); - while(sfirst != slast) - { - charT* p = static_cast<charT*>(this->m_pdata->m_data.extend(sizeof(charT) * (sfirst->first == static_cast<charT>(0) ? 1 : sfirst->second ? 3 : 2))); - p[0] = m_traits.translate(sfirst->first, m_icase); - if(sfirst->first == static_cast<charT>(0)) - { - p[0] = 0; - } - else if(sfirst->second) - { - p[1] = m_traits.translate(sfirst->second, m_icase); - p[2] = 0; - } - else - p[1] = 0; - ++sfirst; - } - // - // now extend with all the ranges: - // - first = char_set.ranges_begin(); - last = char_set.ranges_end(); - while(first != last) - { - // first grab the endpoints of the range: - digraph<charT> c1 = *first; - c1.first = this->m_traits.translate(c1.first, this->m_icase); - c1.second = this->m_traits.translate(c1.second, this->m_icase); - ++first; - digraph<charT> c2 = *first; - c2.first = this->m_traits.translate(c2.first, this->m_icase); - c2.second = this->m_traits.translate(c2.second, this->m_icase); - ++first; - string_type s1, s2; - // different actions now depending upon whether collation is turned on: - if(flags() & regex_constants::collate) - { - // we need to transform our range into sort keys: - charT a1[3] = { c1.first, c1.second, charT(0), }; - charT a2[3] = { c2.first, c2.second, charT(0), }; - s1 = this->m_traits.transform(a1, (a1[1] ? a1+2 : a1+1)); - s2 = this->m_traits.transform(a2, (a2[1] ? a2+2 : a2+1)); - if(s1.empty()) - s1 = string_type(1, charT(0)); - if(s2.empty()) - s2 = string_type(1, charT(0)); - } - else - { - if(c1.second) - { - s1.insert(s1.end(), c1.first); - s1.insert(s1.end(), c1.second); - } - else - s1 = string_type(1, c1.first); - if(c2.second) - { - s2.insert(s2.end(), c2.first); - s2.insert(s2.end(), c2.second); - } - else - s2.insert(s2.end(), c2.first); - } - if(s1 > s2) - { - // Oops error: - return 0; - } - charT* p = static_cast<charT*>(this->m_pdata->m_data.extend(sizeof(charT) * (s1.size() + s2.size() + 2) ) ); - BOOST_REGEX_DETAIL_NS::copy(s1.begin(), s1.end(), p); - p[s1.size()] = charT(0); - p += s1.size() + 1; - BOOST_REGEX_DETAIL_NS::copy(s2.begin(), s2.end(), p); - p[s2.size()] = charT(0); - } - // - // now process the equivalence classes: - // - sfirst = char_set.equivalents_begin(); - slast = char_set.equivalents_end(); - while(sfirst != slast) - { - string_type s; - if(sfirst->second) - { - charT cs[3] = { sfirst->first, sfirst->second, charT(0), }; - s = m_traits.transform_primary(cs, cs+2); - } - else - s = m_traits.transform_primary(&sfirst->first, &sfirst->first+1); - if(s.empty()) - return 0; // invalid or unsupported equivalence class - charT* p = static_cast<charT*>(this->m_pdata->m_data.extend(sizeof(charT) * (s.size()+1) ) ); - BOOST_REGEX_DETAIL_NS::copy(s.begin(), s.end(), p); - p[s.size()] = charT(0); - ++sfirst; - } - // - // finally reset the address of our last state: - // - m_last_state = result = static_cast<re_set_long<m_type>*>(getaddress(offset)); - return result; -} - -template<class T> -inline bool char_less(T t1, T t2) -{ - return t1 < t2; -} -inline bool char_less(char t1, char t2) -{ - return static_cast<unsigned char>(t1) < static_cast<unsigned char>(t2); -} -inline bool char_less(signed char t1, signed char t2) -{ - return static_cast<unsigned char>(t1) < static_cast<unsigned char>(t2); -} - -template <class charT, class traits> -re_syntax_base* basic_regex_creator<charT, traits>::append_set( - const basic_char_set<charT, traits>& char_set, mpl::true_*) -{ - typedef typename traits::string_type string_type; - typedef typename basic_char_set<charT, traits>::list_iterator item_iterator; - typedef typename basic_char_set<charT, traits>::set_iterator set_iterator; - - re_set* result = static_cast<re_set*>(append_state(syntax_element_set, sizeof(re_set))); - bool negate = char_set.is_negated(); - std::memset(result->_map, 0, sizeof(result->_map)); - // - // handle singles first: - // - item_iterator first, last; - set_iterator sfirst, slast; - sfirst = char_set.singles_begin(); - slast = char_set.singles_end(); - while(sfirst != slast) - { - for(unsigned int i = 0; i < (1 << CHAR_BIT); ++i) - { - if(this->m_traits.translate(static_cast<charT>(i), this->m_icase) - == this->m_traits.translate(sfirst->first, this->m_icase)) - result->_map[i] = true; - } - ++sfirst; - } - // - // OK now handle ranges: - // - first = char_set.ranges_begin(); - last = char_set.ranges_end(); - while(first != last) - { - // first grab the endpoints of the range: - charT c1 = this->m_traits.translate(first->first, this->m_icase); - ++first; - charT c2 = this->m_traits.translate(first->first, this->m_icase); - ++first; - // different actions now depending upon whether collation is turned on: - if(flags() & regex_constants::collate) - { - // we need to transform our range into sort keys: - charT c3[2] = { c1, charT(0), }; - string_type s1 = this->m_traits.transform(c3, c3+1); - c3[0] = c2; - string_type s2 = this->m_traits.transform(c3, c3+1); - if(s1 > s2) - { - // Oops error: - return 0; - } - BOOST_REGEX_ASSERT(c3[1] == charT(0)); - for(unsigned i = 0; i < (1u << CHAR_BIT); ++i) - { - c3[0] = static_cast<charT>(i); - string_type s3 = this->m_traits.transform(c3, c3 +1); - if((s1 <= s3) && (s3 <= s2)) - result->_map[i] = true; - } - } - else - { - if(char_less(c2, c1)) - { - // Oops error: - return 0; - } - // everything in range matches: - std::memset(result->_map + static_cast<unsigned char>(c1), true, static_cast<unsigned char>(1u) + static_cast<unsigned char>(static_cast<unsigned char>(c2) - static_cast<unsigned char>(c1))); - } - } - // - // and now the classes: - // - typedef typename traits::char_class_type m_type; - m_type m = char_set.classes(); - if(flags() & regbase::icase) - { - // adjust m as needed: - if(((m & m_lower_mask) == m_lower_mask) || ((m & m_upper_mask) == m_upper_mask)) - m |= m_alpha_mask; - } - if(m != 0) - { - for(unsigned i = 0; i < (1u << CHAR_BIT); ++i) - { - if(this->m_traits.isctype(static_cast<charT>(i), m)) - result->_map[i] = true; - } - } - // - // and now the negated classes: - // - m = char_set.negated_classes(); - if(flags() & regbase::icase) - { - // adjust m as needed: - if(((m & m_lower_mask) == m_lower_mask) || ((m & m_upper_mask) == m_upper_mask)) - m |= m_alpha_mask; - } - if(m != 0) - { - for(unsigned i = 0; i < (1u << CHAR_BIT); ++i) - { - if(0 == this->m_traits.isctype(static_cast<charT>(i), m)) - result->_map[i] = true; - } - } - // - // now process the equivalence classes: - // - sfirst = char_set.equivalents_begin(); - slast = char_set.equivalents_end(); - while(sfirst != slast) - { - string_type s; - BOOST_REGEX_ASSERT(static_cast<charT>(0) == sfirst->second); - s = m_traits.transform_primary(&sfirst->first, &sfirst->first+1); - if(s.empty()) - return 0; // invalid or unsupported equivalence class - for(unsigned i = 0; i < (1u << CHAR_BIT); ++i) - { - charT c[2] = { (static_cast<charT>(i)), charT(0), }; - string_type s2 = this->m_traits.transform_primary(c, c+1); - if(s == s2) - result->_map[i] = true; - } - ++sfirst; - } - if(negate) - { - for(unsigned i = 0; i < (1u << CHAR_BIT); ++i) - { - result->_map[i] = !(result->_map[i]); - } - } - return result; -} - -template <class charT, class traits> -void basic_regex_creator<charT, traits>::finalize(const charT* p1, const charT* p2) -{ - if(this->m_pdata->m_status) - return; - // we've added all the states we need, now finish things off. - // start by adding a terminating state: - append_state(syntax_element_match); - // extend storage to store original expression: - std::ptrdiff_t len = p2 - p1; - m_pdata->m_expression_len = len; - charT* ps = static_cast<charT*>(m_pdata->m_data.extend(sizeof(charT) * (1 + (p2 - p1)))); - m_pdata->m_expression = ps; - BOOST_REGEX_DETAIL_NS::copy(p1, p2, ps); - ps[p2 - p1] = 0; - // fill in our other data... - // successful parsing implies a zero status: - m_pdata->m_status = 0; - // get the first state of the machine: - m_pdata->m_first_state = static_cast<re_syntax_base*>(m_pdata->m_data.data()); - // fixup pointers in the machine: - fixup_pointers(m_pdata->m_first_state); - if(m_has_recursions) - { - m_pdata->m_has_recursions = true; - fixup_recursions(m_pdata->m_first_state); - if(this->m_pdata->m_status) - return; - } - else - m_pdata->m_has_recursions = false; - // create nested startmaps: - create_startmaps(m_pdata->m_first_state); - // create main startmap: - std::memset(m_pdata->m_startmap, 0, sizeof(m_pdata->m_startmap)); - m_pdata->m_can_be_null = 0; - - m_bad_repeats = 0; - if(m_has_recursions) - m_recursion_checks.assign(1 + m_pdata->m_mark_count, 0u); - create_startmap(m_pdata->m_first_state, m_pdata->m_startmap, &(m_pdata->m_can_be_null), mask_all); - // get the restart type: - m_pdata->m_restart_type = get_restart_type(m_pdata->m_first_state); - // optimise a leading repeat if there is one: - probe_leading_repeat(m_pdata->m_first_state); -} - -template <class charT, class traits> -void basic_regex_creator<charT, traits>::fixup_pointers(re_syntax_base* state) -{ - while(state) - { - switch(state->type) - { - case syntax_element_recurse: - m_has_recursions = true; - if(state->next.i) - state->next.p = getaddress(state->next.i, state); - else - state->next.p = 0; - break; - case syntax_element_rep: - case syntax_element_dot_rep: - case syntax_element_char_rep: - case syntax_element_short_set_rep: - case syntax_element_long_set_rep: - // set the state_id of this repeat: - static_cast<re_repeat*>(state)->state_id = m_repeater_id++; - BOOST_FALLTHROUGH; - case syntax_element_alt: - std::memset(static_cast<re_alt*>(state)->_map, 0, sizeof(static_cast<re_alt*>(state)->_map)); - static_cast<re_alt*>(state)->can_be_null = 0; - BOOST_FALLTHROUGH; - case syntax_element_jump: - static_cast<re_jump*>(state)->alt.p = getaddress(static_cast<re_jump*>(state)->alt.i, state); - BOOST_FALLTHROUGH; - default: - if(state->next.i) - state->next.p = getaddress(state->next.i, state); - else - state->next.p = 0; - } - state = state->next.p; - } -} - -template <class charT, class traits> -void basic_regex_creator<charT, traits>::fixup_recursions(re_syntax_base* state) -{ - re_syntax_base* base = state; - while(state) - { - switch(state->type) - { - case syntax_element_assert_backref: - { - // just check that the index is valid: - int idx = static_cast<const re_brace*>(state)->index; - if(idx < 0) - { - idx = -idx-1; - if(idx >= hash_value_mask) - { - idx = m_pdata->get_id(idx); - if(idx <= 0) - { - // check of sub-expression that doesn't exist: - if(0 == this->m_pdata->m_status) // update the error code if not already set - this->m_pdata->m_status = boost::regex_constants::error_bad_pattern; - // - // clear the expression, we should be empty: - // - this->m_pdata->m_expression = 0; - this->m_pdata->m_expression_len = 0; - // - // and throw if required: - // - if(0 == (this->flags() & regex_constants::no_except)) - { - std::string message = "Encountered a forward reference to a marked sub-expression that does not exist."; - boost::regex_error e(message, boost::regex_constants::error_bad_pattern, 0); - e.raise(); - } - } - } - } - } - break; - case syntax_element_recurse: - { - bool ok = false; - re_syntax_base* p = base; - std::ptrdiff_t idx = static_cast<re_jump*>(state)->alt.i; - if(idx >= hash_value_mask) - { - // - // There may be more than one capture group with this hash, just do what Perl - // does and recurse to the leftmost: - // - idx = m_pdata->get_id(static_cast<int>(idx)); - } - if(idx < 0) - { - ok = false; - } - else - { - while(p) - { - if((p->type == syntax_element_startmark) && (static_cast<re_brace*>(p)->index == idx)) - { - // - // We've found the target of the recursion, set the jump target: - // - static_cast<re_jump*>(state)->alt.p = p; - ok = true; - // - // Now scan the target for nested repeats: - // - p = p->next.p; - int next_rep_id = 0; - while(p) - { - switch(p->type) - { - case syntax_element_rep: - case syntax_element_dot_rep: - case syntax_element_char_rep: - case syntax_element_short_set_rep: - case syntax_element_long_set_rep: - next_rep_id = static_cast<re_repeat*>(p)->state_id; - break; - case syntax_element_endmark: - if(static_cast<const re_brace*>(p)->index == idx) - next_rep_id = -1; - break; - default: - break; - } - if(next_rep_id) - break; - p = p->next.p; - } - if(next_rep_id > 0) - { - static_cast<re_recurse*>(state)->state_id = next_rep_id - 1; - } - - break; - } - p = p->next.p; - } - } - if(!ok) - { - // recursion to sub-expression that doesn't exist: - if(0 == this->m_pdata->m_status) // update the error code if not already set - this->m_pdata->m_status = boost::regex_constants::error_bad_pattern; - // - // clear the expression, we should be empty: - // - this->m_pdata->m_expression = 0; - this->m_pdata->m_expression_len = 0; - // - // and throw if required: - // - if(0 == (this->flags() & regex_constants::no_except)) - { - std::string message = "Encountered a forward reference to a recursive sub-expression that does not exist."; - boost::regex_error e(message, boost::regex_constants::error_bad_pattern, 0); - e.raise(); - } - } - } - break; - default: - break; - } - state = state->next.p; - } -} - -template <class charT, class traits> -void basic_regex_creator<charT, traits>::create_startmaps(re_syntax_base* state) -{ - // non-recursive implementation: - // create the last map in the machine first, so that earlier maps - // can make use of the result... - // - // This was originally a recursive implementation, but that caused stack - // overflows with complex expressions on small stacks (think COM+). - - // start by saving the case setting: - bool l_icase = m_icase; - std::vector<std::pair<bool, re_syntax_base*> > v; - - while(state) - { - switch(state->type) - { - case syntax_element_toggle_case: - // we need to track case changes here: - m_icase = static_cast<re_case*>(state)->icase; - state = state->next.p; - continue; - case syntax_element_alt: - case syntax_element_rep: - case syntax_element_dot_rep: - case syntax_element_char_rep: - case syntax_element_short_set_rep: - case syntax_element_long_set_rep: - // just push the state onto our stack for now: - v.push_back(std::pair<bool, re_syntax_base*>(m_icase, state)); - state = state->next.p; - break; - case syntax_element_backstep: - // we need to calculate how big the backstep is: - static_cast<re_brace*>(state)->index - = this->calculate_backstep(state->next.p); - if(static_cast<re_brace*>(state)->index < 0) - { - // Oops error: - if(0 == this->m_pdata->m_status) // update the error code if not already set - this->m_pdata->m_status = boost::regex_constants::error_bad_pattern; - // - // clear the expression, we should be empty: - // - this->m_pdata->m_expression = 0; - this->m_pdata->m_expression_len = 0; - // - // and throw if required: - // - if(0 == (this->flags() & regex_constants::no_except)) - { - std::string message = "Invalid lookbehind assertion encountered in the regular expression."; - boost::regex_error e(message, boost::regex_constants::error_bad_pattern, 0); - e.raise(); - } - } - BOOST_FALLTHROUGH; - default: - state = state->next.p; - } - } - - // now work through our list, building all the maps as we go: - while(!v.empty()) - { - // Initialize m_recursion_checks if we need it: - if(m_has_recursions) - m_recursion_checks.assign(1 + m_pdata->m_mark_count, 0u); - - const std::pair<bool, re_syntax_base*>& p = v.back(); - m_icase = p.first; - state = p.second; - v.pop_back(); - - // Build maps: - m_bad_repeats = 0; - create_startmap(state->next.p, static_cast<re_alt*>(state)->_map, &static_cast<re_alt*>(state)->can_be_null, mask_take); - m_bad_repeats = 0; - - if(m_has_recursions) - m_recursion_checks.assign(1 + m_pdata->m_mark_count, 0u); - create_startmap(static_cast<re_alt*>(state)->alt.p, static_cast<re_alt*>(state)->_map, &static_cast<re_alt*>(state)->can_be_null, mask_skip); - // adjust the type of the state to allow for faster matching: - state->type = this->get_repeat_type(state); - } - // restore case sensitivity: - m_icase = l_icase; -} - -template <class charT, class traits> -int basic_regex_creator<charT, traits>::calculate_backstep(re_syntax_base* state) -{ - typedef typename traits::char_class_type m_type; - int result = 0; - while(state) - { - switch(state->type) - { - case syntax_element_startmark: - if((static_cast<re_brace*>(state)->index == -1) - || (static_cast<re_brace*>(state)->index == -2)) - { - state = static_cast<re_jump*>(state->next.p)->alt.p->next.p; - continue; - } - else if(static_cast<re_brace*>(state)->index == -3) - { - state = state->next.p->next.p; - continue; - } - break; - case syntax_element_endmark: - if((static_cast<re_brace*>(state)->index == -1) - || (static_cast<re_brace*>(state)->index == -2)) - return result; - break; - case syntax_element_literal: - result += static_cast<re_literal*>(state)->length; - break; - case syntax_element_wild: - case syntax_element_set: - result += 1; - break; - case syntax_element_dot_rep: - case syntax_element_char_rep: - case syntax_element_short_set_rep: - case syntax_element_backref: - case syntax_element_rep: - case syntax_element_combining: - case syntax_element_long_set_rep: - case syntax_element_backstep: - { - re_repeat* rep = static_cast<re_repeat *>(state); - // adjust the type of the state to allow for faster matching: - state->type = this->get_repeat_type(state); - if((state->type == syntax_element_dot_rep) - || (state->type == syntax_element_char_rep) - || (state->type == syntax_element_short_set_rep)) - { - if(rep->max != rep->min) - return -1; - result += static_cast<int>(rep->min); - state = rep->alt.p; - continue; - } - else if(state->type == syntax_element_long_set_rep) - { - BOOST_REGEX_ASSERT(rep->next.p->type == syntax_element_long_set); - if(static_cast<re_set_long<m_type>*>(rep->next.p)->singleton == 0) - return -1; - if(rep->max != rep->min) - return -1; - result += static_cast<int>(rep->min); - state = rep->alt.p; - continue; - } - } - return -1; - case syntax_element_long_set: - if(static_cast<re_set_long<m_type>*>(state)->singleton == 0) - return -1; - result += 1; - break; - case syntax_element_jump: - state = static_cast<re_jump*>(state)->alt.p; - continue; - case syntax_element_alt: - { - int r1 = calculate_backstep(state->next.p); - int r2 = calculate_backstep(static_cast<re_alt*>(state)->alt.p); - if((r1 < 0) || (r1 != r2)) - return -1; - return result + r1; - } - default: - break; - } - state = state->next.p; - } - return -1; -} - -struct recursion_saver -{ - std::vector<unsigned char> saved_state; - std::vector<unsigned char>* state; - recursion_saver(std::vector<unsigned char>* p) : saved_state(*p), state(p) {} - ~recursion_saver() - { - state->swap(saved_state); - } -}; - -template <class charT, class traits> -void basic_regex_creator<charT, traits>::create_startmap(re_syntax_base* state, unsigned char* l_map, unsigned int* pnull, unsigned char mask) -{ - recursion_saver saved_recursions(&m_recursion_checks); - int not_last_jump = 1; - re_syntax_base* recursion_start = 0; - int recursion_sub = 0; - re_syntax_base* recursion_restart = 0; - - // track case sensitivity: - bool l_icase = m_icase; - - while(state) - { - switch(state->type) - { - case syntax_element_toggle_case: - l_icase = static_cast<re_case*>(state)->icase; - state = state->next.p; - break; - case syntax_element_literal: - { - // don't set anything in *pnull, set each element in l_map - // that could match the first character in the literal: - if(l_map) - { - l_map[0] |= mask_init; - charT first_char = *static_cast<charT*>(static_cast<void*>(static_cast<re_literal*>(state) + 1)); - for(unsigned int i = 0; i < (1u << CHAR_BIT); ++i) - { - if(m_traits.translate(static_cast<charT>(i), l_icase) == first_char) - l_map[i] |= mask; - } - } - return; - } - case syntax_element_end_line: - { - // next character must be a line separator (if there is one): - if(l_map) - { - l_map[0] |= mask_init; - l_map[static_cast<unsigned>('\n')] |= mask; - l_map[static_cast<unsigned>('\r')] |= mask; - l_map[static_cast<unsigned>('\f')] |= mask; - l_map[0x85] |= mask; - } - // now figure out if we can match a NULL string at this point: - if(pnull) - create_startmap(state->next.p, 0, pnull, mask); - return; - } - case syntax_element_recurse: - { - BOOST_REGEX_ASSERT(static_cast<const re_jump*>(state)->alt.p->type == syntax_element_startmark); - recursion_sub = static_cast<re_brace*>(static_cast<const re_jump*>(state)->alt.p)->index; - if(m_recursion_checks[recursion_sub] & 1u) - { - // Infinite recursion!! - if(0 == this->m_pdata->m_status) // update the error code if not already set - this->m_pdata->m_status = boost::regex_constants::error_bad_pattern; - // - // clear the expression, we should be empty: - // - this->m_pdata->m_expression = 0; - this->m_pdata->m_expression_len = 0; - // - // and throw if required: - // - if(0 == (this->flags() & regex_constants::no_except)) - { - std::string message = "Encountered an infinite recursion."; - boost::regex_error e(message, boost::regex_constants::error_bad_pattern, 0); - e.raise(); - } - } - else if(recursion_start == 0) - { - recursion_start = state; - recursion_restart = state->next.p; - state = static_cast<re_jump*>(state)->alt.p; - m_recursion_checks[recursion_sub] |= 1u; - break; - } - m_recursion_checks[recursion_sub] |= 1u; - // can't handle nested recursion here... - BOOST_FALLTHROUGH; - } - case syntax_element_backref: - // can be null, and any character can match: - if(pnull) - *pnull |= mask; - BOOST_FALLTHROUGH; - case syntax_element_wild: - { - // can't be null, any character can match: - set_all_masks(l_map, mask); - return; - } - case syntax_element_accept: - case syntax_element_match: - { - // must be null, any character can match: - set_all_masks(l_map, mask); - if(pnull) - *pnull |= mask; - return; - } - case syntax_element_word_start: - { - // recurse, then AND with all the word characters: - create_startmap(state->next.p, l_map, pnull, mask); - if(l_map) - { - l_map[0] |= mask_init; - for(unsigned int i = 0; i < (1u << CHAR_BIT); ++i) - { - if(!m_traits.isctype(static_cast<charT>(i), m_word_mask)) - l_map[i] &= static_cast<unsigned char>(~mask); - } - } - return; - } - case syntax_element_word_end: - { - // recurse, then AND with all the word characters: - create_startmap(state->next.p, l_map, pnull, mask); - if(l_map) - { - l_map[0] |= mask_init; - for(unsigned int i = 0; i < (1u << CHAR_BIT); ++i) - { - if(m_traits.isctype(static_cast<charT>(i), m_word_mask)) - l_map[i] &= static_cast<unsigned char>(~mask); - } - } - return; - } - case syntax_element_buffer_end: - { - // we *must be null* : - if(pnull) - *pnull |= mask; - return; - } - case syntax_element_long_set: - if(l_map) - { - typedef typename traits::char_class_type m_type; - if(static_cast<re_set_long<m_type>*>(state)->singleton) - { - l_map[0] |= mask_init; - for(unsigned int i = 0; i < (1u << CHAR_BIT); ++i) - { - charT c = static_cast<charT>(i); - if(&c != re_is_set_member(&c, &c + 1, static_cast<re_set_long<m_type>*>(state), *m_pdata, l_icase)) - l_map[i] |= mask; - } - } - else - set_all_masks(l_map, mask); - } - return; - case syntax_element_set: - if(l_map) - { - l_map[0] |= mask_init; - for(unsigned int i = 0; i < (1u << CHAR_BIT); ++i) - { - if(static_cast<re_set*>(state)->_map[ - static_cast<unsigned char>(m_traits.translate(static_cast<charT>(i), l_icase))]) - l_map[i] |= mask; - } - } - return; - case syntax_element_jump: - // take the jump: - state = static_cast<re_alt*>(state)->alt.p; - not_last_jump = -1; - break; - case syntax_element_alt: - case syntax_element_rep: - case syntax_element_dot_rep: - case syntax_element_char_rep: - case syntax_element_short_set_rep: - case syntax_element_long_set_rep: - { - re_alt* rep = static_cast<re_alt*>(state); - if(rep->_map[0] & mask_init) - { - if(l_map) - { - // copy previous results: - l_map[0] |= mask_init; - for(unsigned int i = 0; i <= UCHAR_MAX; ++i) - { - if(rep->_map[i] & mask_any) - l_map[i] |= mask; - } - } - if(pnull) - { - if(rep->can_be_null & mask_any) - *pnull |= mask; - } - } - else - { - // we haven't created a startmap for this alternative yet - // so take the union of the two options: - if(is_bad_repeat(state)) - { - set_all_masks(l_map, mask); - if(pnull) - *pnull |= mask; - return; - } - set_bad_repeat(state); - create_startmap(state->next.p, l_map, pnull, mask); - if((state->type == syntax_element_alt) - || (static_cast<re_repeat*>(state)->min == 0) - || (not_last_jump == 0)) - create_startmap(rep->alt.p, l_map, pnull, mask); - } - } - return; - case syntax_element_soft_buffer_end: - // match newline or null: - if(l_map) - { - l_map[0] |= mask_init; - l_map[static_cast<unsigned>('\n')] |= mask; - l_map[static_cast<unsigned>('\r')] |= mask; - } - if(pnull) - *pnull |= mask; - return; - case syntax_element_endmark: - // need to handle independent subs as a special case: - if(static_cast<re_brace*>(state)->index < 0) - { - // can be null, any character can match: - set_all_masks(l_map, mask); - if(pnull) - *pnull |= mask; - return; - } - else if(recursion_start && (recursion_sub != 0) && (recursion_sub == static_cast<re_brace*>(state)->index)) - { - // recursion termination: - recursion_start = 0; - state = recursion_restart; - break; - } - - // - // Normally we just go to the next state... but if this sub-expression is - // the target of a recursion, then we might be ending a recursion, in which - // case we should check whatever follows that recursion, as well as whatever - // follows this state: - // - if(m_pdata->m_has_recursions && static_cast<re_brace*>(state)->index) - { - bool ok = false; - re_syntax_base* p = m_pdata->m_first_state; - while(p) - { - if(p->type == syntax_element_recurse) - { - re_brace* p2 = static_cast<re_brace*>(static_cast<re_jump*>(p)->alt.p); - if((p2->type == syntax_element_startmark) && (p2->index == static_cast<re_brace*>(state)->index)) - { - ok = true; - break; - } - } - p = p->next.p; - } - if(ok && ((m_recursion_checks[static_cast<re_brace*>(state)->index] & 2u) == 0)) - { - m_recursion_checks[static_cast<re_brace*>(state)->index] |= 2u; - create_startmap(p->next.p, l_map, pnull, mask); - } - } - state = state->next.p; - break; - - case syntax_element_commit: - set_all_masks(l_map, mask); - // Continue scanning so we can figure out whether we can be null: - state = state->next.p; - break; - case syntax_element_startmark: - // need to handle independent subs as a special case: - if(static_cast<re_brace*>(state)->index == -3) - { - state = state->next.p->next.p; - break; - } - BOOST_FALLTHROUGH; - default: - state = state->next.p; - } - ++not_last_jump; - } -} - -template <class charT, class traits> -unsigned basic_regex_creator<charT, traits>::get_restart_type(re_syntax_base* state) -{ - // - // find out how the machine starts, so we can optimise the search: - // - while(state) - { - switch(state->type) - { - case syntax_element_startmark: - case syntax_element_endmark: - state = state->next.p; - continue; - case syntax_element_start_line: - return regbase::restart_line; - case syntax_element_word_start: - return regbase::restart_word; - case syntax_element_buffer_start: - return regbase::restart_buf; - case syntax_element_restart_continue: - return regbase::restart_continue; - default: - state = 0; - continue; - } - } - return regbase::restart_any; -} - -template <class charT, class traits> -void basic_regex_creator<charT, traits>::set_all_masks(unsigned char* bits, unsigned char mask) -{ - // - // set mask in all of bits elements, - // if bits[0] has mask_init not set then we can - // optimise this to a call to memset: - // - if(bits) - { - if(bits[0] == 0) - (std::memset)(bits, mask, 1u << CHAR_BIT); - else - { - for(unsigned i = 0; i < (1u << CHAR_BIT); ++i) - bits[i] |= mask; - } - bits[0] |= mask_init; - } -} - -template <class charT, class traits> -bool basic_regex_creator<charT, traits>::is_bad_repeat(re_syntax_base* pt) -{ - switch(pt->type) - { - case syntax_element_rep: - case syntax_element_dot_rep: - case syntax_element_char_rep: - case syntax_element_short_set_rep: - case syntax_element_long_set_rep: - { - unsigned state_id = static_cast<re_repeat*>(pt)->state_id; - if(state_id >= sizeof(m_bad_repeats) * CHAR_BIT) - return true; // run out of bits, assume we can't traverse this one. - static const boost::uintmax_t one = 1uL; - return m_bad_repeats & (one << state_id); - } - default: - return false; - } -} - -template <class charT, class traits> -void basic_regex_creator<charT, traits>::set_bad_repeat(re_syntax_base* pt) -{ - switch(pt->type) - { - case syntax_element_rep: - case syntax_element_dot_rep: - case syntax_element_char_rep: - case syntax_element_short_set_rep: - case syntax_element_long_set_rep: - { - unsigned state_id = static_cast<re_repeat*>(pt)->state_id; - static const boost::uintmax_t one = 1uL; - if(state_id <= sizeof(m_bad_repeats) * CHAR_BIT) - m_bad_repeats |= (one << state_id); - } - break; - default: - break; - } -} - -template <class charT, class traits> -syntax_element_type basic_regex_creator<charT, traits>::get_repeat_type(re_syntax_base* state) -{ - typedef typename traits::char_class_type m_type; - if(state->type == syntax_element_rep) - { - // check to see if we are repeating a single state: - if(state->next.p->next.p->next.p == static_cast<re_alt*>(state)->alt.p) - { - switch(state->next.p->type) - { - case BOOST_REGEX_DETAIL_NS::syntax_element_wild: - return BOOST_REGEX_DETAIL_NS::syntax_element_dot_rep; - case BOOST_REGEX_DETAIL_NS::syntax_element_literal: - return BOOST_REGEX_DETAIL_NS::syntax_element_char_rep; - case BOOST_REGEX_DETAIL_NS::syntax_element_set: - return BOOST_REGEX_DETAIL_NS::syntax_element_short_set_rep; - case BOOST_REGEX_DETAIL_NS::syntax_element_long_set: - if(static_cast<BOOST_REGEX_DETAIL_NS::re_set_long<m_type>*>(state->next.p)->singleton) - return BOOST_REGEX_DETAIL_NS::syntax_element_long_set_rep; - break; - default: - break; - } - } - } - return state->type; -} - -template <class charT, class traits> -void basic_regex_creator<charT, traits>::probe_leading_repeat(re_syntax_base* state) -{ - // enumerate our states, and see if we have a leading repeat - // for which failed search restarts can be optimized; - do - { - switch(state->type) - { - case syntax_element_startmark: - if(static_cast<re_brace*>(state)->index >= 0) - { - state = state->next.p; - continue; - } -#ifdef BOOST_MSVC -# pragma warning(push) -#pragma warning(disable:6011) -#endif - if((static_cast<re_brace*>(state)->index == -1) - || (static_cast<re_brace*>(state)->index == -2)) - { - // skip past the zero width assertion: - state = static_cast<const re_jump*>(state->next.p)->alt.p->next.p; - continue; - } -#ifdef BOOST_MSVC -# pragma warning(pop) -#endif - if(static_cast<re_brace*>(state)->index == -3) - { - // Have to skip the leading jump state: - state = state->next.p->next.p; - continue; - } - return; - case syntax_element_endmark: - case syntax_element_start_line: - case syntax_element_end_line: - case syntax_element_word_boundary: - case syntax_element_within_word: - case syntax_element_word_start: - case syntax_element_word_end: - case syntax_element_buffer_start: - case syntax_element_buffer_end: - case syntax_element_restart_continue: - state = state->next.p; - break; - case syntax_element_dot_rep: - case syntax_element_char_rep: - case syntax_element_short_set_rep: - case syntax_element_long_set_rep: - if(this->m_has_backrefs == 0) - static_cast<re_repeat*>(state)->leading = true; - BOOST_FALLTHROUGH; - default: - return; - } - }while(state); -} - -} // namespace BOOST_REGEX_DETAIL_NS - -} // namespace boost - -#ifdef BOOST_MSVC -# pragma warning(pop) -#endif - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/basic_regex_parser.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/basic_regex_parser.hpp deleted file mode 100644 index 1b7121f057..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/basic_regex_parser.hpp +++ /dev/null @@ -1,3174 +0,0 @@ -/* - * - * Copyright (c) 2004 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE basic_regex_parser.cpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares template class basic_regex_parser. - */ - -#ifndef BOOST_REGEX_V4_BASIC_REGEX_PARSER_HPP -#define BOOST_REGEX_V4_BASIC_REGEX_PARSER_HPP - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#if BOOST_MSVC >= 1800 -#pragma warning(disable: 26812) -#endif -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -namespace boost{ -namespace BOOST_REGEX_DETAIL_NS{ - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4244) -#if BOOST_MSVC < 1910 -#pragma warning(disable:4800) -#endif -#endif - -inline boost::intmax_t umax(mpl::false_ const&) -{ - // Get out clause here, just in case numeric_limits is unspecialized: - return std::numeric_limits<boost::intmax_t>::is_specialized ? (std::numeric_limits<boost::intmax_t>::max)() : INT_MAX; -} -inline boost::intmax_t umax(mpl::true_ const&) -{ - return (std::numeric_limits<std::size_t>::max)(); -} - -inline boost::intmax_t umax() -{ - return umax(mpl::bool_<std::numeric_limits<boost::intmax_t>::digits >= std::numeric_limits<std::size_t>::digits>()); -} - -template <class charT, class traits> -class basic_regex_parser : public basic_regex_creator<charT, traits> -{ -public: - basic_regex_parser(regex_data<charT, traits>* data); - void parse(const charT* p1, const charT* p2, unsigned flags); - void fail(regex_constants::error_type error_code, std::ptrdiff_t position); - void fail(regex_constants::error_type error_code, std::ptrdiff_t position, std::string message, std::ptrdiff_t start_pos); - void fail(regex_constants::error_type error_code, std::ptrdiff_t position, const std::string& message) - { - fail(error_code, position, message, position); - } - - bool parse_all(); - bool parse_basic(); - bool parse_extended(); - bool parse_literal(); - bool parse_open_paren(); - bool parse_basic_escape(); - bool parse_extended_escape(); - bool parse_match_any(); - bool parse_repeat(std::size_t low = 0, std::size_t high = (std::numeric_limits<std::size_t>::max)()); - bool parse_repeat_range(bool isbasic); - bool parse_alt(); - bool parse_set(); - bool parse_backref(); - void parse_set_literal(basic_char_set<charT, traits>& char_set); - bool parse_inner_set(basic_char_set<charT, traits>& char_set); - bool parse_QE(); - bool parse_perl_extension(); - bool parse_perl_verb(); - bool match_verb(const char*); - bool add_emacs_code(bool negate); - bool unwind_alts(std::ptrdiff_t last_paren_start); - digraph<charT> get_next_set_literal(basic_char_set<charT, traits>& char_set); - charT unescape_character(); - regex_constants::syntax_option_type parse_options(); - -private: - typedef bool (basic_regex_parser::*parser_proc_type)(); - typedef typename traits::string_type string_type; - typedef typename traits::char_class_type char_class_type; - parser_proc_type m_parser_proc; // the main parser to use - const charT* m_base; // the start of the string being parsed - const charT* m_end; // the end of the string being parsed - const charT* m_position; // our current parser position - unsigned m_mark_count; // how many sub-expressions we have - int m_mark_reset; // used to indicate that we're inside a (?|...) block. - unsigned m_max_mark; // largest mark count seen inside a (?|...) block. - std::ptrdiff_t m_paren_start; // where the last seen ')' began (where repeats are inserted). - std::ptrdiff_t m_alt_insert_point; // where to insert the next alternative - bool m_has_case_change; // true if somewhere in the current block the case has changed - unsigned m_recursion_count; // How many times we've called parse_all. -#if defined(BOOST_MSVC) && defined(_M_IX86) - // This is an ugly warning suppression workaround (for warnings *inside* std::vector - // that can not otherwise be suppressed)... - BOOST_STATIC_ASSERT(sizeof(long) >= sizeof(void*)); - std::vector<long> m_alt_jumps; // list of alternative in the current scope. -#else - std::vector<std::ptrdiff_t> m_alt_jumps; // list of alternative in the current scope. -#endif - - basic_regex_parser& operator=(const basic_regex_parser&); - basic_regex_parser(const basic_regex_parser&); -}; - -template <class charT, class traits> -basic_regex_parser<charT, traits>::basic_regex_parser(regex_data<charT, traits>* data) - : basic_regex_creator<charT, traits>(data), m_parser_proc(), m_base(0), m_end(0), m_position(0), - m_mark_count(0), m_mark_reset(-1), m_max_mark(0), m_paren_start(0), m_alt_insert_point(0), m_has_case_change(false), m_recursion_count(0) -{ -} - -template <class charT, class traits> -void basic_regex_parser<charT, traits>::parse(const charT* p1, const charT* p2, unsigned l_flags) -{ - // pass l_flags on to base class: - this->init(l_flags); - // set up pointers: - m_position = m_base = p1; - m_end = p2; - // empty strings are errors: - if((p1 == p2) && - ( - ((l_flags & regbase::main_option_type) != regbase::perl_syntax_group) - || (l_flags & regbase::no_empty_expressions) - ) - ) - { - fail(regex_constants::error_empty, 0); - return; - } - // select which parser to use: - switch(l_flags & regbase::main_option_type) - { - case regbase::perl_syntax_group: - { - m_parser_proc = &basic_regex_parser<charT, traits>::parse_extended; - // - // Add a leading paren with index zero to give recursions a target: - // - re_brace* br = static_cast<re_brace*>(this->append_state(syntax_element_startmark, sizeof(re_brace))); - br->index = 0; - br->icase = this->flags() & regbase::icase; - break; - } - case regbase::basic_syntax_group: - m_parser_proc = &basic_regex_parser<charT, traits>::parse_basic; - break; - case regbase::literal: - m_parser_proc = &basic_regex_parser<charT, traits>::parse_literal; - break; - default: - // Oops, someone has managed to set more than one of the main option flags, - // so this must be an error: - fail(regex_constants::error_unknown, 0, "An invalid combination of regular expression syntax flags was used."); - return; - } - - // parse all our characters: - bool result = parse_all(); - // - // Unwind our alternatives: - // - unwind_alts(-1); - // reset l_flags as a global scope (?imsx) may have altered them: - this->flags(l_flags); - // if we haven't gobbled up all the characters then we must - // have had an unexpected ')' : - if(!result) - { - fail(regex_constants::error_paren, ::boost::BOOST_REGEX_DETAIL_NS::distance(m_base, m_position), "Found a closing ) with no corresponding opening parenthesis."); - return; - } - // if an error has been set then give up now: - if(this->m_pdata->m_status) - return; - // fill in our sub-expression count: - this->m_pdata->m_mark_count = 1u + (std::size_t)m_mark_count; - this->finalize(p1, p2); -} - -template <class charT, class traits> -void basic_regex_parser<charT, traits>::fail(regex_constants::error_type error_code, std::ptrdiff_t position) -{ - // get the error message: - std::string message = this->m_pdata->m_ptraits->error_string(error_code); - fail(error_code, position, message); -} - -template <class charT, class traits> -void basic_regex_parser<charT, traits>::fail(regex_constants::error_type error_code, std::ptrdiff_t position, std::string message, std::ptrdiff_t start_pos) -{ - if(0 == this->m_pdata->m_status) // update the error code if not already set - this->m_pdata->m_status = error_code; - m_position = m_end; // don't bother parsing anything else - -#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS - // - // Augment error message with the regular expression text: - // - if(start_pos == position) - start_pos = (std::max)(static_cast<std::ptrdiff_t>(0), position - static_cast<std::ptrdiff_t>(10)); - std::ptrdiff_t end_pos = (std::min)(position + static_cast<std::ptrdiff_t>(10), static_cast<std::ptrdiff_t>(m_end - m_base)); - if(error_code != regex_constants::error_empty) - { - if((start_pos != 0) || (end_pos != (m_end - m_base))) - message += " The error occurred while parsing the regular expression fragment: '"; - else - message += " The error occurred while parsing the regular expression: '"; - if(start_pos != end_pos) - { - message += std::string(m_base + start_pos, m_base + position); - message += ">>>HERE>>>"; - message += std::string(m_base + position, m_base + end_pos); - } - message += "'."; - } -#endif - -#ifndef BOOST_NO_EXCEPTIONS - if(0 == (this->flags() & regex_constants::no_except)) - { - boost::regex_error e(message, error_code, position); - e.raise(); - } -#else - (void)position; // suppress warnings. -#endif -} - -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::parse_all() -{ - if (++m_recursion_count > 400) - { - // exceeded internal limits - fail(boost::regex_constants::error_complexity, m_position - m_base, "Exceeded nested brace limit."); - } - bool result = true; - while(result && (m_position != m_end)) - { - result = (this->*m_parser_proc)(); - } - --m_recursion_count; - return result; -} - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4702) -#endif -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::parse_basic() -{ - switch(this->m_traits.syntax_type(*m_position)) - { - case regex_constants::syntax_escape: - return parse_basic_escape(); - case regex_constants::syntax_dot: - return parse_match_any(); - case regex_constants::syntax_caret: - ++m_position; - this->append_state(syntax_element_start_line); - break; - case regex_constants::syntax_dollar: - ++m_position; - this->append_state(syntax_element_end_line); - break; - case regex_constants::syntax_star: - if(!(this->m_last_state) || (this->m_last_state->type == syntax_element_start_line)) - return parse_literal(); - else - { - ++m_position; - return parse_repeat(); - } - case regex_constants::syntax_plus: - if(!(this->m_last_state) || (this->m_last_state->type == syntax_element_start_line) || !(this->flags() & regbase::emacs_ex)) - return parse_literal(); - else - { - ++m_position; - return parse_repeat(1); - } - case regex_constants::syntax_question: - if(!(this->m_last_state) || (this->m_last_state->type == syntax_element_start_line) || !(this->flags() & regbase::emacs_ex)) - return parse_literal(); - else - { - ++m_position; - return parse_repeat(0, 1); - } - case regex_constants::syntax_open_set: - return parse_set(); - case regex_constants::syntax_newline: - if(this->flags() & regbase::newline_alt) - return parse_alt(); - else - return parse_literal(); - default: - return parse_literal(); - } - return true; -} - -#ifdef BOOST_MSVC -# pragma warning(push) -#if BOOST_MSVC >= 1800 -#pragma warning(disable:26812) -#endif -#endif -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::parse_extended() -{ - bool result = true; - switch(this->m_traits.syntax_type(*m_position)) - { - case regex_constants::syntax_open_mark: - return parse_open_paren(); - case regex_constants::syntax_close_mark: - return false; - case regex_constants::syntax_escape: - return parse_extended_escape(); - case regex_constants::syntax_dot: - return parse_match_any(); - case regex_constants::syntax_caret: - ++m_position; - this->append_state( - (this->flags() & regex_constants::no_mod_m ? syntax_element_buffer_start : syntax_element_start_line)); - break; - case regex_constants::syntax_dollar: - ++m_position; - this->append_state( - (this->flags() & regex_constants::no_mod_m ? syntax_element_buffer_end : syntax_element_end_line)); - break; - case regex_constants::syntax_star: - if(m_position == this->m_base) - { - fail(regex_constants::error_badrepeat, 0, "The repeat operator \"*\" cannot start a regular expression."); - return false; - } - ++m_position; - return parse_repeat(); - case regex_constants::syntax_question: - if(m_position == this->m_base) - { - fail(regex_constants::error_badrepeat, 0, "The repeat operator \"?\" cannot start a regular expression."); - return false; - } - ++m_position; - return parse_repeat(0,1); - case regex_constants::syntax_plus: - if(m_position == this->m_base) - { - fail(regex_constants::error_badrepeat, 0, "The repeat operator \"+\" cannot start a regular expression."); - return false; - } - ++m_position; - return parse_repeat(1); - case regex_constants::syntax_open_brace: - ++m_position; - return parse_repeat_range(false); - case regex_constants::syntax_close_brace: - if((this->flags() & regbase::no_perl_ex) == regbase::no_perl_ex) - { - fail(regex_constants::error_brace, this->m_position - this->m_base, "Found a closing repetition operator } with no corresponding {."); - return false; - } - result = parse_literal(); - break; - case regex_constants::syntax_or: - return parse_alt(); - case regex_constants::syntax_open_set: - return parse_set(); - case regex_constants::syntax_newline: - if(this->flags() & regbase::newline_alt) - return parse_alt(); - else - return parse_literal(); - case regex_constants::syntax_hash: - // - // If we have a mod_x flag set, then skip until - // we get to a newline character: - // - if((this->flags() - & (regbase::no_perl_ex|regbase::mod_x)) - == regbase::mod_x) - { - while((m_position != m_end) && !is_separator(*m_position++)){} - return true; - } - BOOST_FALLTHROUGH; - default: - result = parse_literal(); - break; - } - return result; -} -#ifdef BOOST_MSVC -# pragma warning(pop) -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::parse_literal() -{ - // append this as a literal provided it's not a space character - // or the perl option regbase::mod_x is not set: - if( - ((this->flags() - & (regbase::main_option_type|regbase::mod_x|regbase::no_perl_ex)) - != regbase::mod_x) - || !this->m_traits.isctype(*m_position, this->m_mask_space)) - this->append_literal(*m_position); - ++m_position; - return true; -} - -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::parse_open_paren() -{ - // - // skip the '(' and error check: - // - if(++m_position == m_end) - { - fail(regex_constants::error_paren, m_position - m_base); - return false; - } - // - // begin by checking for a perl-style (?...) extension: - // - if( - ((this->flags() & (regbase::main_option_type | regbase::no_perl_ex)) == 0) - || ((this->flags() & (regbase::main_option_type | regbase::emacs_ex)) == (regbase::basic_syntax_group|regbase::emacs_ex)) - ) - { - if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_question) - return parse_perl_extension(); - if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_star) - return parse_perl_verb(); - } - // - // update our mark count, and append the required state: - // - unsigned markid = 0; - if(0 == (this->flags() & regbase::nosubs)) - { - markid = ++m_mark_count; -#ifndef BOOST_NO_STD_DISTANCE - if(this->flags() & regbase::save_subexpression_location) - this->m_pdata->m_subs.push_back(std::pair<std::size_t, std::size_t>(std::distance(m_base, m_position) - 1, 0)); -#else - if(this->flags() & regbase::save_subexpression_location) - this->m_pdata->m_subs.push_back(std::pair<std::size_t, std::size_t>((m_position - m_base) - 1, 0)); -#endif - } - re_brace* pb = static_cast<re_brace*>(this->append_state(syntax_element_startmark, sizeof(re_brace))); - pb->index = markid; - pb->icase = this->flags() & regbase::icase; - std::ptrdiff_t last_paren_start = this->getoffset(pb); - // back up insertion point for alternations, and set new point: - std::ptrdiff_t last_alt_point = m_alt_insert_point; - this->m_pdata->m_data.align(); - m_alt_insert_point = this->m_pdata->m_data.size(); - // - // back up the current flags in case we have a nested (?imsx) group: - // - regex_constants::syntax_option_type opts = this->flags(); - bool old_case_change = m_has_case_change; - m_has_case_change = false; // no changes to this scope as yet... - // - // Back up branch reset data in case we have a nested (?|...) - // - int mark_reset = m_mark_reset; - m_mark_reset = -1; - // - // now recursively add more states, this will terminate when we get to a - // matching ')' : - // - parse_all(); - // - // Unwind pushed alternatives: - // - if(0 == unwind_alts(last_paren_start)) - return false; - // - // restore flags: - // - if(m_has_case_change) - { - // the case has changed in one or more of the alternatives - // within the scoped (...) block: we have to add a state - // to reset the case sensitivity: - static_cast<re_case*>( - this->append_state(syntax_element_toggle_case, sizeof(re_case)) - )->icase = opts & regbase::icase; - } - this->flags(opts); - m_has_case_change = old_case_change; - // - // restore branch reset: - // - m_mark_reset = mark_reset; - // - // we either have a ')' or we have run out of characters prematurely: - // - if(m_position == m_end) - { - this->fail(regex_constants::error_paren, ::boost::BOOST_REGEX_DETAIL_NS::distance(m_base, m_end)); - return false; - } - if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark) - return false; -#ifndef BOOST_NO_STD_DISTANCE - if(markid && (this->flags() & regbase::save_subexpression_location)) - this->m_pdata->m_subs.at(markid - 1).second = std::distance(m_base, m_position); -#else - if(markid && (this->flags() & regbase::save_subexpression_location)) - this->m_pdata->m_subs.at(markid - 1).second = (m_position - m_base); -#endif - ++m_position; - // - // append closing parenthesis state: - // - pb = static_cast<re_brace*>(this->append_state(syntax_element_endmark, sizeof(re_brace))); - pb->index = markid; - pb->icase = this->flags() & regbase::icase; - this->m_paren_start = last_paren_start; - // - // restore the alternate insertion point: - // - this->m_alt_insert_point = last_alt_point; - // - // allow backrefs to this mark: - // - if(markid > 0) - this->m_backrefs.set(markid); - - return true; -} - -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::parse_basic_escape() -{ - if(++m_position == m_end) - { - fail(regex_constants::error_paren, m_position - m_base); - return false; - } - bool result = true; - switch(this->m_traits.escape_syntax_type(*m_position)) - { - case regex_constants::syntax_open_mark: - return parse_open_paren(); - case regex_constants::syntax_close_mark: - return false; - case regex_constants::syntax_plus: - if(this->flags() & regex_constants::bk_plus_qm) - { - ++m_position; - return parse_repeat(1); - } - else - return parse_literal(); - case regex_constants::syntax_question: - if(this->flags() & regex_constants::bk_plus_qm) - { - ++m_position; - return parse_repeat(0, 1); - } - else - return parse_literal(); - case regex_constants::syntax_open_brace: - if(this->flags() & regbase::no_intervals) - return parse_literal(); - ++m_position; - return parse_repeat_range(true); - case regex_constants::syntax_close_brace: - if(this->flags() & regbase::no_intervals) - return parse_literal(); - fail(regex_constants::error_brace, this->m_position - this->m_base, "Found a closing repetition operator } with no corresponding {."); - return false; - case regex_constants::syntax_or: - if(this->flags() & regbase::bk_vbar) - return parse_alt(); - else - result = parse_literal(); - break; - case regex_constants::syntax_digit: - return parse_backref(); - case regex_constants::escape_type_start_buffer: - if(this->flags() & regbase::emacs_ex) - { - ++m_position; - this->append_state(syntax_element_buffer_start); - } - else - result = parse_literal(); - break; - case regex_constants::escape_type_end_buffer: - if(this->flags() & regbase::emacs_ex) - { - ++m_position; - this->append_state(syntax_element_buffer_end); - } - else - result = parse_literal(); - break; - case regex_constants::escape_type_word_assert: - if(this->flags() & regbase::emacs_ex) - { - ++m_position; - this->append_state(syntax_element_word_boundary); - } - else - result = parse_literal(); - break; - case regex_constants::escape_type_not_word_assert: - if(this->flags() & regbase::emacs_ex) - { - ++m_position; - this->append_state(syntax_element_within_word); - } - else - result = parse_literal(); - break; - case regex_constants::escape_type_left_word: - if(this->flags() & regbase::emacs_ex) - { - ++m_position; - this->append_state(syntax_element_word_start); - } - else - result = parse_literal(); - break; - case regex_constants::escape_type_right_word: - if(this->flags() & regbase::emacs_ex) - { - ++m_position; - this->append_state(syntax_element_word_end); - } - else - result = parse_literal(); - break; - default: - if(this->flags() & regbase::emacs_ex) - { - bool negate = true; - switch(*m_position) - { - case 'w': - negate = false; - BOOST_FALLTHROUGH; - case 'W': - { - basic_char_set<charT, traits> char_set; - if(negate) - char_set.negate(); - char_set.add_class(this->m_word_mask); - if(0 == this->append_set(char_set)) - { - fail(regex_constants::error_ctype, m_position - m_base); - return false; - } - ++m_position; - return true; - } - case 's': - negate = false; - BOOST_FALLTHROUGH; - case 'S': - return add_emacs_code(negate); - case 'c': - case 'C': - // not supported yet: - fail(regex_constants::error_escape, m_position - m_base, "The \\c and \\C escape sequences are not supported by POSIX basic regular expressions: try the Perl syntax instead."); - return false; - default: - break; - } - } - result = parse_literal(); - break; - } - return result; -} - -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::parse_extended_escape() -{ - ++m_position; - if(m_position == m_end) - { - fail(regex_constants::error_escape, m_position - m_base, "Incomplete escape sequence found."); - return false; - } - bool negate = false; // in case this is a character class escape: \w \d etc - switch(this->m_traits.escape_syntax_type(*m_position)) - { - case regex_constants::escape_type_not_class: - negate = true; - BOOST_FALLTHROUGH; - case regex_constants::escape_type_class: - { -escape_type_class_jump: - typedef typename traits::char_class_type m_type; - m_type m = this->m_traits.lookup_classname(m_position, m_position+1); - if(m != 0) - { - basic_char_set<charT, traits> char_set; - if(negate) - char_set.negate(); - char_set.add_class(m); - if(0 == this->append_set(char_set)) - { - fail(regex_constants::error_ctype, m_position - m_base); - return false; - } - ++m_position; - return true; - } - // - // not a class, just a regular unknown escape: - // - this->append_literal(unescape_character()); - break; - } - case regex_constants::syntax_digit: - return parse_backref(); - case regex_constants::escape_type_left_word: - ++m_position; - this->append_state(syntax_element_word_start); - break; - case regex_constants::escape_type_right_word: - ++m_position; - this->append_state(syntax_element_word_end); - break; - case regex_constants::escape_type_start_buffer: - ++m_position; - this->append_state(syntax_element_buffer_start); - break; - case regex_constants::escape_type_end_buffer: - ++m_position; - this->append_state(syntax_element_buffer_end); - break; - case regex_constants::escape_type_word_assert: - ++m_position; - this->append_state(syntax_element_word_boundary); - break; - case regex_constants::escape_type_not_word_assert: - ++m_position; - this->append_state(syntax_element_within_word); - break; - case regex_constants::escape_type_Z: - ++m_position; - this->append_state(syntax_element_soft_buffer_end); - break; - case regex_constants::escape_type_Q: - return parse_QE(); - case regex_constants::escape_type_C: - return parse_match_any(); - case regex_constants::escape_type_X: - ++m_position; - this->append_state(syntax_element_combining); - break; - case regex_constants::escape_type_G: - ++m_position; - this->append_state(syntax_element_restart_continue); - break; - case regex_constants::escape_type_not_property: - negate = true; - BOOST_FALLTHROUGH; - case regex_constants::escape_type_property: - { - ++m_position; - char_class_type m; - if(m_position == m_end) - { - fail(regex_constants::error_escape, m_position - m_base, "Incomplete property escape found."); - return false; - } - // maybe have \p{ddd} - if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_open_brace) - { - const charT* base = m_position; - // skip forward until we find enclosing brace: - while((m_position != m_end) && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_brace)) - ++m_position; - if(m_position == m_end) - { - fail(regex_constants::error_escape, m_position - m_base, "Closing } missing from property escape sequence."); - return false; - } - m = this->m_traits.lookup_classname(++base, m_position++); - } - else - { - m = this->m_traits.lookup_classname(m_position, m_position+1); - ++m_position; - } - if(m != 0) - { - basic_char_set<charT, traits> char_set; - if(negate) - char_set.negate(); - char_set.add_class(m); - if(0 == this->append_set(char_set)) - { - fail(regex_constants::error_ctype, m_position - m_base); - return false; - } - return true; - } - fail(regex_constants::error_ctype, m_position - m_base, "Escape sequence was neither a valid property nor a valid character class name."); - return false; - } - case regex_constants::escape_type_reset_start_mark: - if(0 == (this->flags() & (regbase::main_option_type | regbase::no_perl_ex))) - { - re_brace* pb = static_cast<re_brace*>(this->append_state(syntax_element_startmark, sizeof(re_brace))); - pb->index = -5; - pb->icase = this->flags() & regbase::icase; - this->m_pdata->m_data.align(); - ++m_position; - return true; - } - goto escape_type_class_jump; - case regex_constants::escape_type_line_ending: - if(0 == (this->flags() & (regbase::main_option_type | regbase::no_perl_ex))) - { - const charT* e = get_escape_R_string<charT>(); - const charT* old_position = m_position; - const charT* old_end = m_end; - const charT* old_base = m_base; - m_position = e; - m_base = e; - m_end = e + traits::length(e); - bool r = parse_all(); - m_position = ++old_position; - m_end = old_end; - m_base = old_base; - return r; - } - goto escape_type_class_jump; - case regex_constants::escape_type_extended_backref: - if(0 == (this->flags() & (regbase::main_option_type | regbase::no_perl_ex))) - { - bool have_brace = false; - bool negative = false; - static const char incomplete_message[] = "Incomplete \\g escape found."; - if(++m_position == m_end) - { - fail(regex_constants::error_escape, m_position - m_base, incomplete_message); - return false; - } - // maybe have \g{ddd} - regex_constants::syntax_type syn = this->m_traits.syntax_type(*m_position); - regex_constants::syntax_type syn_end = 0; - if((syn == regex_constants::syntax_open_brace) - || (syn == regex_constants::escape_type_left_word) - || (syn == regex_constants::escape_type_end_buffer)) - { - if(++m_position == m_end) - { - fail(regex_constants::error_escape, m_position - m_base, incomplete_message); - return false; - } - have_brace = true; - switch(syn) - { - case regex_constants::syntax_open_brace: - syn_end = regex_constants::syntax_close_brace; - break; - case regex_constants::escape_type_left_word: - syn_end = regex_constants::escape_type_right_word; - break; - default: - syn_end = regex_constants::escape_type_end_buffer; - break; - } - } - negative = (*m_position == static_cast<charT>('-')); - if((negative) && (++m_position == m_end)) - { - fail(regex_constants::error_escape, m_position - m_base, incomplete_message); - return false; - } - const charT* pc = m_position; - boost::intmax_t i = this->m_traits.toi(pc, m_end, 10); - if((i < 0) && syn_end) - { - // Check for a named capture, get the leftmost one if there is more than one: - const charT* base = m_position; - while((m_position != m_end) && (this->m_traits.syntax_type(*m_position) != syn_end)) - { - ++m_position; - } - i = hash_value_from_capture_name(base, m_position); - pc = m_position; - } - if(negative) - i = 1 + (static_cast<boost::intmax_t>(m_mark_count) - i); - if(((i < hash_value_mask) && (i > 0) && (this->m_backrefs.test(i))) || ((i >= hash_value_mask) && (this->m_pdata->get_id(i) > 0) && (this->m_backrefs.test(this->m_pdata->get_id(i))))) - { - m_position = pc; - re_brace* pb = static_cast<re_brace*>(this->append_state(syntax_element_backref, sizeof(re_brace))); - pb->index = i; - pb->icase = this->flags() & regbase::icase; - } - else - { - fail(regex_constants::error_backref, m_position - m_base); - return false; - } - m_position = pc; - if(have_brace) - { - if((m_position == m_end) || (this->m_traits.syntax_type(*m_position) != syn_end)) - { - fail(regex_constants::error_escape, m_position - m_base, incomplete_message); - return false; - } - ++m_position; - } - return true; - } - goto escape_type_class_jump; - case regex_constants::escape_type_control_v: - if(0 == (this->flags() & (regbase::main_option_type | regbase::no_perl_ex))) - goto escape_type_class_jump; - BOOST_FALLTHROUGH; - default: - this->append_literal(unescape_character()); - break; - } - return true; -} - -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::parse_match_any() -{ - // - // we have a '.' that can match any character: - // - ++m_position; - static_cast<re_dot*>( - this->append_state(syntax_element_wild, sizeof(re_dot)) - )->mask = static_cast<unsigned char>(this->flags() & regbase::no_mod_s - ? BOOST_REGEX_DETAIL_NS::force_not_newline - : this->flags() & regbase::mod_s ? - BOOST_REGEX_DETAIL_NS::force_newline : BOOST_REGEX_DETAIL_NS::dont_care); - return true; -} - -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::parse_repeat(std::size_t low, std::size_t high) -{ - bool greedy = true; - bool possessive = false; - std::size_t insert_point; - // - // when we get to here we may have a non-greedy ? mark still to come: - // - if((m_position != m_end) - && ( - (0 == (this->flags() & (regbase::main_option_type | regbase::no_perl_ex))) - || ((regbase::basic_syntax_group|regbase::emacs_ex) == (this->flags() & (regbase::main_option_type | regbase::emacs_ex))) - ) - ) - { - // OK we have a perl or emacs regex, check for a '?': - if ((this->flags() & (regbase::main_option_type | regbase::mod_x | regbase::no_perl_ex)) == regbase::mod_x) - { - // whitespace skip: - while ((m_position != m_end) && this->m_traits.isctype(*m_position, this->m_mask_space)) - ++m_position; - } - if((m_position != m_end) && (this->m_traits.syntax_type(*m_position) == regex_constants::syntax_question)) - { - greedy = false; - ++m_position; - } - // for perl regexes only check for possessive ++ repeats. - if((m_position != m_end) - && (0 == (this->flags() & regbase::main_option_type)) - && (this->m_traits.syntax_type(*m_position) == regex_constants::syntax_plus)) - { - possessive = true; - ++m_position; - } - } - if(0 == this->m_last_state) - { - fail(regex_constants::error_badrepeat, ::boost::BOOST_REGEX_DETAIL_NS::distance(m_base, m_position), "Nothing to repeat."); - return false; - } - if(this->m_last_state->type == syntax_element_endmark) - { - // insert a repeat before the '(' matching the last ')': - insert_point = this->m_paren_start; - } - else if((this->m_last_state->type == syntax_element_literal) && (static_cast<re_literal*>(this->m_last_state)->length > 1)) - { - // the last state was a literal with more than one character, split it in two: - re_literal* lit = static_cast<re_literal*>(this->m_last_state); - charT c = (static_cast<charT*>(static_cast<void*>(lit+1)))[lit->length - 1]; - lit->length -= 1; - // now append new state: - lit = static_cast<re_literal*>(this->append_state(syntax_element_literal, sizeof(re_literal) + sizeof(charT))); - lit->length = 1; - (static_cast<charT*>(static_cast<void*>(lit+1)))[0] = c; - insert_point = this->getoffset(this->m_last_state); - } - else - { - // repeat the last state whatever it was, need to add some error checking here: - switch(this->m_last_state->type) - { - case syntax_element_start_line: - case syntax_element_end_line: - case syntax_element_word_boundary: - case syntax_element_within_word: - case syntax_element_word_start: - case syntax_element_word_end: - case syntax_element_buffer_start: - case syntax_element_buffer_end: - case syntax_element_alt: - case syntax_element_soft_buffer_end: - case syntax_element_restart_continue: - case syntax_element_jump: - case syntax_element_startmark: - case syntax_element_backstep: - case syntax_element_toggle_case: - // can't legally repeat any of the above: - fail(regex_constants::error_badrepeat, m_position - m_base); - return false; - default: - // do nothing... - break; - } - insert_point = this->getoffset(this->m_last_state); - } - // - // OK we now know what to repeat, so insert the repeat around it: - // - re_repeat* rep = static_cast<re_repeat*>(this->insert_state(insert_point, syntax_element_rep, re_repeater_size)); - rep->min = low; - rep->max = high; - rep->greedy = greedy; - rep->leading = false; - // store our repeater position for later: - std::ptrdiff_t rep_off = this->getoffset(rep); - // and append a back jump to the repeat: - re_jump* jmp = static_cast<re_jump*>(this->append_state(syntax_element_jump, sizeof(re_jump))); - jmp->alt.i = rep_off - this->getoffset(jmp); - this->m_pdata->m_data.align(); - // now fill in the alt jump for the repeat: - rep = static_cast<re_repeat*>(this->getaddress(rep_off)); - rep->alt.i = this->m_pdata->m_data.size() - rep_off; - // - // If the repeat is possessive then bracket the repeat with a (?>...) - // independent sub-expression construct: - // - if(possessive) - { - if(m_position != m_end) - { - // - // Check for illegal following quantifier, we have to do this here, because - // the extra states we insert below circumvents our usual error checking :-( - // - bool contin = false; - do - { - if ((this->flags() & (regbase::main_option_type | regbase::mod_x | regbase::no_perl_ex)) == regbase::mod_x) - { - // whitespace skip: - while ((m_position != m_end) && this->m_traits.isctype(*m_position, this->m_mask_space)) - ++m_position; - } - if (m_position != m_end) - { - switch (this->m_traits.syntax_type(*m_position)) - { - case regex_constants::syntax_star: - case regex_constants::syntax_plus: - case regex_constants::syntax_question: - case regex_constants::syntax_open_brace: - fail(regex_constants::error_badrepeat, m_position - m_base); - return false; - case regex_constants::syntax_open_mark: - // Do we have a comment? If so we need to skip it here... - if ((m_position + 2 < m_end) && this->m_traits.syntax_type(*(m_position + 1)) == regex_constants::syntax_question - && this->m_traits.syntax_type(*(m_position + 2)) == regex_constants::syntax_hash) - { - while ((m_position != m_end) - && (this->m_traits.syntax_type(*m_position++) != regex_constants::syntax_close_mark)) { - } - contin = true; - } - else - contin = false; - break; - default: - contin = false; - } - } - else - contin = false; - } while (contin); - } - re_brace* pb = static_cast<re_brace*>(this->insert_state(insert_point, syntax_element_startmark, sizeof(re_brace))); - pb->index = -3; - pb->icase = this->flags() & regbase::icase; - jmp = static_cast<re_jump*>(this->insert_state(insert_point + sizeof(re_brace), syntax_element_jump, sizeof(re_jump))); - this->m_pdata->m_data.align(); - jmp->alt.i = this->m_pdata->m_data.size() - this->getoffset(jmp); - pb = static_cast<re_brace*>(this->append_state(syntax_element_endmark, sizeof(re_brace))); - pb->index = -3; - pb->icase = this->flags() & regbase::icase; - } - return true; -} - -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::parse_repeat_range(bool isbasic) -{ - static const char incomplete_message[] = "Missing } in quantified repetition."; - // - // parse a repeat-range: - // - std::size_t min, max; - boost::intmax_t v; - // skip whitespace: - while((m_position != m_end) && this->m_traits.isctype(*m_position, this->m_mask_space)) - ++m_position; - if(this->m_position == this->m_end) - { - if(this->flags() & (regbase::main_option_type | regbase::no_perl_ex)) - { - fail(regex_constants::error_brace, this->m_position - this->m_base, incomplete_message); - return false; - } - // Treat the opening '{' as a literal character, rewind to start of error: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_brace) --m_position; - return parse_literal(); - } - // get min: - v = this->m_traits.toi(m_position, m_end, 10); - // skip whitespace: - if((v < 0) || (v > umax())) - { - if(this->flags() & (regbase::main_option_type | regbase::no_perl_ex)) - { - fail(regex_constants::error_brace, this->m_position - this->m_base, incomplete_message); - return false; - } - // Treat the opening '{' as a literal character, rewind to start of error: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_brace) --m_position; - return parse_literal(); - } - while((m_position != m_end) && this->m_traits.isctype(*m_position, this->m_mask_space)) - ++m_position; - if(this->m_position == this->m_end) - { - if(this->flags() & (regbase::main_option_type | regbase::no_perl_ex)) - { - fail(regex_constants::error_brace, this->m_position - this->m_base, incomplete_message); - return false; - } - // Treat the opening '{' as a literal character, rewind to start of error: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_brace) --m_position; - return parse_literal(); - } - min = static_cast<std::size_t>(v); - // see if we have a comma: - if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_comma) - { - // move on and error check: - ++m_position; - // skip whitespace: - while((m_position != m_end) && this->m_traits.isctype(*m_position, this->m_mask_space)) - ++m_position; - if(this->m_position == this->m_end) - { - if(this->flags() & (regbase::main_option_type | regbase::no_perl_ex)) - { - fail(regex_constants::error_brace, this->m_position - this->m_base, incomplete_message); - return false; - } - // Treat the opening '{' as a literal character, rewind to start of error: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_brace) --m_position; - return parse_literal(); - } - // get the value if any: - v = this->m_traits.toi(m_position, m_end, 10); - max = ((v >= 0) && (v < umax())) ? (std::size_t)v : (std::numeric_limits<std::size_t>::max)(); - } - else - { - // no comma, max = min: - max = min; - } - // skip whitespace: - while((m_position != m_end) && this->m_traits.isctype(*m_position, this->m_mask_space)) - ++m_position; - // OK now check trailing }: - if(this->m_position == this->m_end) - { - if(this->flags() & (regbase::main_option_type | regbase::no_perl_ex)) - { - fail(regex_constants::error_brace, this->m_position - this->m_base, incomplete_message); - return false; - } - // Treat the opening '{' as a literal character, rewind to start of error: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_brace) --m_position; - return parse_literal(); - } - if(isbasic) - { - if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_escape) - { - ++m_position; - if(this->m_position == this->m_end) - { - fail(regex_constants::error_brace, this->m_position - this->m_base, incomplete_message); - return false; - } - } - else - { - fail(regex_constants::error_brace, this->m_position - this->m_base, incomplete_message); - return false; - } - } - if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_close_brace) - ++m_position; - else - { - // Treat the opening '{' as a literal character, rewind to start of error: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_brace) --m_position; - return parse_literal(); - } - // - // finally go and add the repeat, unless error: - // - if(min > max) - { - // Backtrack to error location: - m_position -= 2; - while(this->m_traits.isctype(*m_position, this->m_word_mask)) --m_position; - ++m_position; - fail(regex_constants::error_badbrace, m_position - m_base); - return false; - } - return parse_repeat(min, max); -} - -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::parse_alt() -{ - // - // error check: if there have been no previous states, - // or if the last state was a '(' then error: - // - if( - ((this->m_last_state == 0) || (this->m_last_state->type == syntax_element_startmark)) - && - !( - ((this->flags() & regbase::main_option_type) == regbase::perl_syntax_group) - && - ((this->flags() & regbase::no_empty_expressions) == 0) - ) - ) - { - fail(regex_constants::error_empty, this->m_position - this->m_base, "A regular expression cannot start with the alternation operator |."); - return false; - } - // - // Reset mark count if required: - // - if(m_max_mark < m_mark_count) - m_max_mark = m_mark_count; - if(m_mark_reset >= 0) - m_mark_count = m_mark_reset; - - ++m_position; - // - // we need to append a trailing jump: - // - re_syntax_base* pj = this->append_state(BOOST_REGEX_DETAIL_NS::syntax_element_jump, sizeof(re_jump)); - std::ptrdiff_t jump_offset = this->getoffset(pj); - // - // now insert the alternative: - // - re_alt* palt = static_cast<re_alt*>(this->insert_state(this->m_alt_insert_point, syntax_element_alt, re_alt_size)); - jump_offset += re_alt_size; - this->m_pdata->m_data.align(); - palt->alt.i = this->m_pdata->m_data.size() - this->getoffset(palt); - // - // update m_alt_insert_point so that the next alternate gets - // inserted at the start of the second of the two we've just created: - // - this->m_alt_insert_point = this->m_pdata->m_data.size(); - // - // the start of this alternative must have a case changes state - // if the current block has messed around with case changes: - // - if(m_has_case_change) - { - static_cast<re_case*>( - this->append_state(syntax_element_toggle_case, sizeof(re_case)) - )->icase = this->m_icase; - } - // - // push the alternative onto our stack, a recursive - // implementation here is easier to understand (and faster - // as it happens), but causes all kinds of stack overflow problems - // on programs with small stacks (COM+). - // - m_alt_jumps.push_back(jump_offset); - return true; -} - -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::parse_set() -{ - static const char incomplete_message[] = "Character set declaration starting with [ terminated prematurely - either no ] was found or the set had no content."; - ++m_position; - if(m_position == m_end) - { - fail(regex_constants::error_brack, m_position - m_base, incomplete_message); - return false; - } - basic_char_set<charT, traits> char_set; - - const charT* base = m_position; // where the '[' was - const charT* item_base = m_position; // where the '[' or '^' was - - while(m_position != m_end) - { - switch(this->m_traits.syntax_type(*m_position)) - { - case regex_constants::syntax_caret: - if(m_position == base) - { - char_set.negate(); - ++m_position; - item_base = m_position; - } - else - parse_set_literal(char_set); - break; - case regex_constants::syntax_close_set: - if(m_position == item_base) - { - parse_set_literal(char_set); - break; - } - else - { - ++m_position; - if(0 == this->append_set(char_set)) - { - fail(regex_constants::error_ctype, m_position - m_base); - return false; - } - } - return true; - case regex_constants::syntax_open_set: - if(parse_inner_set(char_set)) - break; - return true; - case regex_constants::syntax_escape: - { - // - // look ahead and see if this is a character class shortcut - // \d \w \s etc... - // - ++m_position; - if(this->m_traits.escape_syntax_type(*m_position) - == regex_constants::escape_type_class) - { - char_class_type m = this->m_traits.lookup_classname(m_position, m_position+1); - if(m != 0) - { - char_set.add_class(m); - ++m_position; - break; - } - } - else if(this->m_traits.escape_syntax_type(*m_position) - == regex_constants::escape_type_not_class) - { - // negated character class: - char_class_type m = this->m_traits.lookup_classname(m_position, m_position+1); - if(m != 0) - { - char_set.add_negated_class(m); - ++m_position; - break; - } - } - // not a character class, just a regular escape: - --m_position; - parse_set_literal(char_set); - break; - } - default: - parse_set_literal(char_set); - break; - } - } - return m_position != m_end; -} - -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::parse_inner_set(basic_char_set<charT, traits>& char_set) -{ - static const char incomplete_message[] = "Character class declaration starting with [ terminated prematurely - either no ] was found or the set had no content."; - // - // we have either a character class [:name:] - // a collating element [.name.] - // or an equivalence class [=name=] - // - if(m_end == ++m_position) - { - fail(regex_constants::error_brack, m_position - m_base, incomplete_message); - return false; - } - switch(this->m_traits.syntax_type(*m_position)) - { - case regex_constants::syntax_dot: - // - // a collating element is treated as a literal: - // - --m_position; - parse_set_literal(char_set); - return true; - case regex_constants::syntax_colon: - { - // check that character classes are actually enabled: - if((this->flags() & (regbase::main_option_type | regbase::no_char_classes)) - == (regbase::basic_syntax_group | regbase::no_char_classes)) - { - --m_position; - parse_set_literal(char_set); - return true; - } - // skip the ':' - if(m_end == ++m_position) - { - fail(regex_constants::error_brack, m_position - m_base, incomplete_message); - return false; - } - const charT* name_first = m_position; - // skip at least one character, then find the matching ':]' - if(m_end == ++m_position) - { - fail(regex_constants::error_brack, m_position - m_base, incomplete_message); - return false; - } - while((m_position != m_end) - && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_colon)) - ++m_position; - const charT* name_last = m_position; - if(m_end == m_position) - { - fail(regex_constants::error_brack, m_position - m_base, incomplete_message); - return false; - } - if((m_end == ++m_position) - || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_set)) - { - fail(regex_constants::error_brack, m_position - m_base, incomplete_message); - return false; - } - // - // check for negated class: - // - bool negated = false; - if(this->m_traits.syntax_type(*name_first) == regex_constants::syntax_caret) - { - ++name_first; - negated = true; - } - typedef typename traits::char_class_type m_type; - m_type m = this->m_traits.lookup_classname(name_first, name_last); - if(m == 0) - { - if(char_set.empty() && (name_last - name_first == 1)) - { - // maybe a special case: - ++m_position; - if( (m_position != m_end) - && (this->m_traits.syntax_type(*m_position) - == regex_constants::syntax_close_set)) - { - if(this->m_traits.escape_syntax_type(*name_first) - == regex_constants::escape_type_left_word) - { - ++m_position; - this->append_state(syntax_element_word_start); - return false; - } - if(this->m_traits.escape_syntax_type(*name_first) - == regex_constants::escape_type_right_word) - { - ++m_position; - this->append_state(syntax_element_word_end); - return false; - } - } - } - fail(regex_constants::error_ctype, name_first - m_base); - return false; - } - if(!negated) - char_set.add_class(m); - else - char_set.add_negated_class(m); - ++m_position; - break; - } - case regex_constants::syntax_equal: - { - // skip the '=' - if(m_end == ++m_position) - { - fail(regex_constants::error_brack, m_position - m_base, incomplete_message); - return false; - } - const charT* name_first = m_position; - // skip at least one character, then find the matching '=]' - if(m_end == ++m_position) - { - fail(regex_constants::error_brack, m_position - m_base, incomplete_message); - return false; - } - while((m_position != m_end) - && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_equal)) - ++m_position; - const charT* name_last = m_position; - if(m_end == m_position) - { - fail(regex_constants::error_brack, m_position - m_base, incomplete_message); - return false; - } - if((m_end == ++m_position) - || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_set)) - { - fail(regex_constants::error_brack, m_position - m_base, incomplete_message); - return false; - } - string_type m = this->m_traits.lookup_collatename(name_first, name_last); - if(m.empty() || (m.size() > 2)) - { - fail(regex_constants::error_collate, name_first - m_base); - return false; - } - digraph<charT> d; - d.first = m[0]; - if(m.size() > 1) - d.second = m[1]; - else - d.second = 0; - char_set.add_equivalent(d); - ++m_position; - break; - } - default: - --m_position; - parse_set_literal(char_set); - break; - } - return true; -} - -template <class charT, class traits> -void basic_regex_parser<charT, traits>::parse_set_literal(basic_char_set<charT, traits>& char_set) -{ - digraph<charT> start_range(get_next_set_literal(char_set)); - if(m_end == m_position) - { - fail(regex_constants::error_brack, m_position - m_base); - return; - } - if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_dash) - { - // we have a range: - if(m_end == ++m_position) - { - fail(regex_constants::error_brack, m_position - m_base); - return; - } - if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_set) - { - digraph<charT> end_range = get_next_set_literal(char_set); - char_set.add_range(start_range, end_range); - if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_dash) - { - if(m_end == ++m_position) - { - fail(regex_constants::error_brack, m_position - m_base); - return; - } - if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_close_set) - { - // trailing - : - --m_position; - return; - } - fail(regex_constants::error_range, m_position - m_base); - return; - } - return; - } - --m_position; - } - char_set.add_single(start_range); -} - -template <class charT, class traits> -digraph<charT> basic_regex_parser<charT, traits>::get_next_set_literal(basic_char_set<charT, traits>& char_set) -{ - digraph<charT> result; - switch(this->m_traits.syntax_type(*m_position)) - { - case regex_constants::syntax_dash: - if(!char_set.empty()) - { - // see if we are at the end of the set: - if((++m_position == m_end) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_set)) - { - fail(regex_constants::error_range, m_position - m_base); - return result; - } - --m_position; - } - result.first = *m_position++; - return result; - case regex_constants::syntax_escape: - // check to see if escapes are supported first: - if(this->flags() & regex_constants::no_escape_in_lists) - { - result = *m_position++; - break; - } - ++m_position; - result = unescape_character(); - break; - case regex_constants::syntax_open_set: - { - if(m_end == ++m_position) - { - fail(regex_constants::error_collate, m_position - m_base); - return result; - } - if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_dot) - { - --m_position; - result.first = *m_position; - ++m_position; - return result; - } - if(m_end == ++m_position) - { - fail(regex_constants::error_collate, m_position - m_base); - return result; - } - const charT* name_first = m_position; - // skip at least one character, then find the matching ':]' - if(m_end == ++m_position) - { - fail(regex_constants::error_collate, name_first - m_base); - return result; - } - while((m_position != m_end) - && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_dot)) - ++m_position; - const charT* name_last = m_position; - if(m_end == m_position) - { - fail(regex_constants::error_collate, name_first - m_base); - return result; - } - if((m_end == ++m_position) - || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_set)) - { - fail(regex_constants::error_collate, name_first - m_base); - return result; - } - ++m_position; - string_type s = this->m_traits.lookup_collatename(name_first, name_last); - if(s.empty() || (s.size() > 2)) - { - fail(regex_constants::error_collate, name_first - m_base); - return result; - } - result.first = s[0]; - if(s.size() > 1) - result.second = s[1]; - else - result.second = 0; - return result; - } - default: - result = *m_position++; - } - return result; -} - -// -// does a value fit in the specified charT type? -// -template <class charT> -bool valid_value(charT, boost::intmax_t v, const mpl::true_&) -{ - return (v >> (sizeof(charT) * CHAR_BIT)) == 0; -} -template <class charT> -bool valid_value(charT, boost::intmax_t, const mpl::false_&) -{ - return true; // v will alsways fit in a charT -} -template <class charT> -bool valid_value(charT c, boost::intmax_t v) -{ - return valid_value(c, v, mpl::bool_<(sizeof(charT) < sizeof(boost::intmax_t))>()); -} - -template <class charT, class traits> -charT basic_regex_parser<charT, traits>::unescape_character() -{ -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4127) -#endif - charT result(0); - if(m_position == m_end) - { - fail(regex_constants::error_escape, m_position - m_base, "Escape sequence terminated prematurely."); - return false; - } - switch(this->m_traits.escape_syntax_type(*m_position)) - { - case regex_constants::escape_type_control_a: - result = charT('\a'); - break; - case regex_constants::escape_type_e: - result = charT(27); - break; - case regex_constants::escape_type_control_f: - result = charT('\f'); - break; - case regex_constants::escape_type_control_n: - result = charT('\n'); - break; - case regex_constants::escape_type_control_r: - result = charT('\r'); - break; - case regex_constants::escape_type_control_t: - result = charT('\t'); - break; - case regex_constants::escape_type_control_v: - result = charT('\v'); - break; - case regex_constants::escape_type_word_assert: - result = charT('\b'); - break; - case regex_constants::escape_type_ascii_control: - ++m_position; - if(m_position == m_end) - { - // Rewind to start of escape: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; - fail(regex_constants::error_escape, m_position - m_base, "ASCII escape sequence terminated prematurely."); - return result; - } - result = static_cast<charT>(*m_position % 32); - break; - case regex_constants::escape_type_hex: - ++m_position; - if(m_position == m_end) - { - // Rewind to start of escape: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; - fail(regex_constants::error_escape, m_position - m_base, "Hexadecimal escape sequence terminated prematurely."); - return result; - } - // maybe have \x{ddd} - if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_open_brace) - { - ++m_position; - if(m_position == m_end) - { - // Rewind to start of escape: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; - fail(regex_constants::error_escape, m_position - m_base, "Missing } in hexadecimal escape sequence."); - return result; - } - boost::intmax_t i = this->m_traits.toi(m_position, m_end, 16); - if((m_position == m_end) - || (i < 0) - || ((std::numeric_limits<charT>::is_specialized) && (i > (boost::intmax_t)(std::numeric_limits<charT>::max)())) - || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_brace)) - { - // Rewind to start of escape: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; - fail(regex_constants::error_badbrace, m_position - m_base, "Hexadecimal escape sequence was invalid."); - return result; - } - ++m_position; - result = charT(i); - } - else - { - std::ptrdiff_t len = (std::min)(static_cast<std::ptrdiff_t>(2), static_cast<std::ptrdiff_t>(m_end - m_position)); - boost::intmax_t i = this->m_traits.toi(m_position, m_position + len, 16); - if((i < 0) - || !valid_value(charT(0), i)) - { - // Rewind to start of escape: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; - fail(regex_constants::error_escape, m_position - m_base, "Escape sequence did not encode a valid character."); - return result; - } - result = charT(i); - } - return result; - case regex_constants::syntax_digit: - { - // an octal escape sequence, the first character must be a zero - // followed by up to 3 octal digits: - std::ptrdiff_t len = (std::min)(::boost::BOOST_REGEX_DETAIL_NS::distance(m_position, m_end), static_cast<std::ptrdiff_t>(4)); - const charT* bp = m_position; - boost::intmax_t val = this->m_traits.toi(bp, bp + 1, 8); - if(val != 0) - { - // Rewind to start of escape: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; - // Oops not an octal escape after all: - fail(regex_constants::error_escape, m_position - m_base, "Invalid octal escape sequence."); - return result; - } - val = this->m_traits.toi(m_position, m_position + len, 8); - if((val < 0) || (val > (boost::intmax_t)(std::numeric_limits<charT>::max)())) - { - // Rewind to start of escape: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; - fail(regex_constants::error_escape, m_position - m_base, "Octal escape sequence is invalid."); - return result; - } - return static_cast<charT>(val); - } - case regex_constants::escape_type_named_char: - { - ++m_position; - if(m_position == m_end) - { - // Rewind to start of escape: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; - fail(regex_constants::error_escape, m_position - m_base); - return false; - } - // maybe have \N{name} - if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_open_brace) - { - const charT* base = m_position; - // skip forward until we find enclosing brace: - while((m_position != m_end) && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_brace)) - ++m_position; - if(m_position == m_end) - { - // Rewind to start of escape: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; - fail(regex_constants::error_escape, m_position - m_base); - return false; - } - string_type s = this->m_traits.lookup_collatename(++base, m_position++); - if(s.empty()) - { - // Rewind to start of escape: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; - fail(regex_constants::error_collate, m_position - m_base); - return false; - } - if(s.size() == 1) - { - return s[0]; - } - } - // fall through is a failure: - // Rewind to start of escape: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; - fail(regex_constants::error_escape, m_position - m_base); - return false; - } - default: - result = *m_position; - break; - } - ++m_position; - return result; -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif -} - -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::parse_backref() -{ - BOOST_REGEX_ASSERT(m_position != m_end); - const charT* pc = m_position; - boost::intmax_t i = this->m_traits.toi(pc, pc + 1, 10); - if((i == 0) || (((this->flags() & regbase::main_option_type) == regbase::perl_syntax_group) && (this->flags() & regbase::no_bk_refs))) - { - // not a backref at all but an octal escape sequence: - charT c = unescape_character(); - this->append_literal(c); - } - else if((i > 0) && (this->m_backrefs.test(i))) - { - m_position = pc; - re_brace* pb = static_cast<re_brace*>(this->append_state(syntax_element_backref, sizeof(re_brace))); - pb->index = i; - pb->icase = this->flags() & regbase::icase; - } - else - { - // Rewind to start of escape: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; - fail(regex_constants::error_backref, m_position - m_base); - return false; - } - return true; -} - -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::parse_QE() -{ -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4127) -#endif - // - // parse a \Q...\E sequence: - // - ++m_position; // skip the Q - const charT* start = m_position; - const charT* end; - do - { - while((m_position != m_end) - && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape)) - ++m_position; - if(m_position == m_end) - { - // a \Q...\E sequence may terminate with the end of the expression: - end = m_position; - break; - } - if(++m_position == m_end) // skip the escape - { - fail(regex_constants::error_escape, m_position - m_base, "Unterminated \\Q...\\E sequence."); - return false; - } - // check to see if it's a \E: - if(this->m_traits.escape_syntax_type(*m_position) == regex_constants::escape_type_E) - { - ++m_position; - end = m_position - 2; - break; - } - // otherwise go round again: - }while(true); - // - // now add all the character between the two escapes as literals: - // - while(start != end) - { - this->append_literal(*start); - ++start; - } - return true; -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif -} - -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::parse_perl_extension() -{ - if(++m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - // - // treat comments as a special case, as these - // are the only ones that don't start with a leading - // startmark state: - // - if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_hash) - { - while((m_position != m_end) - && (this->m_traits.syntax_type(*m_position++) != regex_constants::syntax_close_mark)) - {} - return true; - } - // - // backup some state, and prepare the way: - // - int markid = 0; - std::ptrdiff_t jump_offset = 0; - re_brace* pb = static_cast<re_brace*>(this->append_state(syntax_element_startmark, sizeof(re_brace))); - pb->icase = this->flags() & regbase::icase; - std::ptrdiff_t last_paren_start = this->getoffset(pb); - // back up insertion point for alternations, and set new point: - std::ptrdiff_t last_alt_point = m_alt_insert_point; - this->m_pdata->m_data.align(); - m_alt_insert_point = this->m_pdata->m_data.size(); - std::ptrdiff_t expected_alt_point = m_alt_insert_point; - bool restore_flags = true; - regex_constants::syntax_option_type old_flags = this->flags(); - bool old_case_change = m_has_case_change; - m_has_case_change = false; - charT name_delim; - int mark_reset = m_mark_reset; - int max_mark = m_max_mark; - m_mark_reset = -1; - m_max_mark = m_mark_count; - boost::intmax_t v; - // - // select the actual extension used: - // - switch(this->m_traits.syntax_type(*m_position)) - { - case regex_constants::syntax_or: - m_mark_reset = m_mark_count; - BOOST_FALLTHROUGH; - case regex_constants::syntax_colon: - // - // a non-capturing mark: - // - pb->index = markid = 0; - ++m_position; - break; - case regex_constants::syntax_digit: - { - // - // a recursive subexpression: - // - v = this->m_traits.toi(m_position, m_end, 10); - if((v < 0) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base, "The recursive sub-expression refers to an invalid marking group, or is unterminated."); - return false; - } -insert_recursion: - pb->index = markid = 0; - re_recurse* pr = static_cast<re_recurse*>(this->append_state(syntax_element_recurse, sizeof(re_recurse))); - pr->alt.i = v; - pr->state_id = 0; - static_cast<re_case*>( - this->append_state(syntax_element_toggle_case, sizeof(re_case)) - )->icase = this->flags() & regbase::icase; - break; - } - case regex_constants::syntax_plus: - // - // A forward-relative recursive subexpression: - // - ++m_position; - v = this->m_traits.toi(m_position, m_end, 10); - if((v <= 0) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base, "An invalid or unterminated recursive sub-expression."); - return false; - } - if ((std::numeric_limits<boost::intmax_t>::max)() - m_mark_count < v) - { - fail(regex_constants::error_perl_extension, m_position - m_base, "An invalid or unterminated recursive sub-expression."); - return false; - } - v += m_mark_count; - goto insert_recursion; - case regex_constants::syntax_dash: - // - // Possibly a backward-relative recursive subexpression: - // - ++m_position; - v = this->m_traits.toi(m_position, m_end, 10); - if(v <= 0) - { - --m_position; - // Oops not a relative recursion at all, but a (?-imsx) group: - goto option_group_jump; - } - v = static_cast<boost::intmax_t>(m_mark_count) + 1 - v; - if(v <= 0) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base, "An invalid or unterminated recursive sub-expression."); - return false; - } - goto insert_recursion; - case regex_constants::syntax_equal: - pb->index = markid = -1; - ++m_position; - jump_offset = this->getoffset(this->append_state(syntax_element_jump, sizeof(re_jump))); - this->m_pdata->m_data.align(); - m_alt_insert_point = this->m_pdata->m_data.size(); - break; - case regex_constants::syntax_not: - pb->index = markid = -2; - ++m_position; - jump_offset = this->getoffset(this->append_state(syntax_element_jump, sizeof(re_jump))); - this->m_pdata->m_data.align(); - m_alt_insert_point = this->m_pdata->m_data.size(); - break; - case regex_constants::escape_type_left_word: - { - // a lookbehind assertion: - if(++m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - regex_constants::syntax_type t = this->m_traits.syntax_type(*m_position); - if(t == regex_constants::syntax_not) - pb->index = markid = -2; - else if(t == regex_constants::syntax_equal) - pb->index = markid = -1; - else - { - // Probably a named capture which also starts (?< : - name_delim = '>'; - --m_position; - goto named_capture_jump; - } - ++m_position; - jump_offset = this->getoffset(this->append_state(syntax_element_jump, sizeof(re_jump))); - this->append_state(syntax_element_backstep, sizeof(re_brace)); - this->m_pdata->m_data.align(); - m_alt_insert_point = this->m_pdata->m_data.size(); - break; - } - case regex_constants::escape_type_right_word: - // - // an independent sub-expression: - // - pb->index = markid = -3; - ++m_position; - jump_offset = this->getoffset(this->append_state(syntax_element_jump, sizeof(re_jump))); - this->m_pdata->m_data.align(); - m_alt_insert_point = this->m_pdata->m_data.size(); - break; - case regex_constants::syntax_open_mark: - { - // a conditional expression: - pb->index = markid = -4; - if(++m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - v = this->m_traits.toi(m_position, m_end, 10); - if(m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - if(*m_position == charT('R')) - { - if(++m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - if(*m_position == charT('&')) - { - const charT* base = ++m_position; - while((m_position != m_end) && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)) - ++m_position; - if(m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - v = -static_cast<int>(hash_value_from_capture_name(base, m_position)); - } - else - { - v = -this->m_traits.toi(m_position, m_end, 10); - } - re_brace* br = static_cast<re_brace*>(this->append_state(syntax_element_assert_backref, sizeof(re_brace))); - br->index = v < 0 ? (v - 1) : 0; - if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - if(++m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - } - else if((*m_position == charT('\'')) || (*m_position == charT('<'))) - { - const charT* base = ++m_position; - while((m_position != m_end) && (*m_position != charT('>')) && (*m_position != charT('\''))) - ++m_position; - if(m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - v = static_cast<int>(hash_value_from_capture_name(base, m_position)); - re_brace* br = static_cast<re_brace*>(this->append_state(syntax_element_assert_backref, sizeof(re_brace))); - br->index = v; - if(((*m_position != charT('>')) && (*m_position != charT('\''))) || (++m_position == m_end)) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base, "Unterminated named capture."); - return false; - } - if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - if(++m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - } - else if(*m_position == charT('D')) - { - const char* def = "DEFINE"; - while(*def && (m_position != m_end) && (*m_position == charT(*def))) - ++m_position, ++def; - if((m_position == m_end) || *def) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - re_brace* br = static_cast<re_brace*>(this->append_state(syntax_element_assert_backref, sizeof(re_brace))); - br->index = 9999; // special magic value! - if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - if(++m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - } - else if(v > 0) - { - re_brace* br = static_cast<re_brace*>(this->append_state(syntax_element_assert_backref, sizeof(re_brace))); - br->index = v; - if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - if(++m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - } - else - { - // verify that we have a lookahead or lookbehind assert: - if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_question) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - if(++m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - if(this->m_traits.syntax_type(*m_position) == regex_constants::escape_type_left_word) - { - if(++m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - if((this->m_traits.syntax_type(*m_position) != regex_constants::syntax_equal) - && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_not)) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - m_position -= 3; - } - else - { - if((this->m_traits.syntax_type(*m_position) != regex_constants::syntax_equal) - && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_not)) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - m_position -= 2; - } - } - break; - } - case regex_constants::syntax_close_mark: - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - case regex_constants::escape_type_end_buffer: - { - name_delim = *m_position; -named_capture_jump: - markid = 0; - if(0 == (this->flags() & regbase::nosubs)) - { - markid = ++m_mark_count; - #ifndef BOOST_NO_STD_DISTANCE - if(this->flags() & regbase::save_subexpression_location) - this->m_pdata->m_subs.push_back(std::pair<std::size_t, std::size_t>(std::distance(m_base, m_position) - 2, 0)); - #else - if(this->flags() & regbase::save_subexpression_location) - this->m_pdata->m_subs.push_back(std::pair<std::size_t, std::size_t>((m_position - m_base) - 2, 0)); - #endif - } - pb->index = markid; - const charT* base = ++m_position; - if(m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - while((m_position != m_end) && (*m_position != name_delim)) - ++m_position; - if(m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - this->m_pdata->set_name(base, m_position, markid); - ++m_position; - break; - } - default: - if(*m_position == charT('R')) - { - ++m_position; - v = 0; - if(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - goto insert_recursion; - } - if(*m_position == charT('&')) - { - ++m_position; - const charT* base = m_position; - while((m_position != m_end) && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)) - ++m_position; - if(m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - v = static_cast<int>(hash_value_from_capture_name(base, m_position)); - goto insert_recursion; - } - if(*m_position == charT('P')) - { - ++m_position; - if(m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - if(*m_position == charT('>')) - { - ++m_position; - const charT* base = m_position; - while((m_position != m_end) && (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)) - ++m_position; - if(m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - v = static_cast<int>(hash_value_from_capture_name(base, m_position)); - goto insert_recursion; - } - } - // - // lets assume that we have a (?imsx) group and try and parse it: - // -option_group_jump: - regex_constants::syntax_option_type opts = parse_options(); - if(m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - // make a note of whether we have a case change: - m_has_case_change = ((opts & regbase::icase) != (this->flags() & regbase::icase)); - pb->index = markid = 0; - if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_close_mark) - { - // update flags and carry on as normal: - this->flags(opts); - restore_flags = false; - old_case_change |= m_has_case_change; // defer end of scope by one ')' - } - else if(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_colon) - { - // update flags and carry on until the matching ')' is found: - this->flags(opts); - ++m_position; - } - else - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - - // finally append a case change state if we need it: - if(m_has_case_change) - { - static_cast<re_case*>( - this->append_state(syntax_element_toggle_case, sizeof(re_case)) - )->icase = opts & regbase::icase; - } - - } - // - // now recursively add more states, this will terminate when we get to a - // matching ')' : - // - parse_all(); - // - // Unwind alternatives: - // - if(0 == unwind_alts(last_paren_start)) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base, "Invalid alternation operators within (?...) block."); - return false; - } - // - // we either have a ')' or we have run out of characters prematurely: - // - if(m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - this->fail(regex_constants::error_paren, ::boost::BOOST_REGEX_DETAIL_NS::distance(m_base, m_end)); - return false; - } - BOOST_REGEX_ASSERT(this->m_traits.syntax_type(*m_position) == regex_constants::syntax_close_mark); - ++m_position; - // - // restore the flags: - // - if(restore_flags) - { - // append a case change state if we need it: - if(m_has_case_change) - { - static_cast<re_case*>( - this->append_state(syntax_element_toggle_case, sizeof(re_case)) - )->icase = old_flags & regbase::icase; - } - this->flags(old_flags); - } - // - // set up the jump pointer if we have one: - // - if(jump_offset) - { - this->m_pdata->m_data.align(); - re_jump* jmp = static_cast<re_jump*>(this->getaddress(jump_offset)); - jmp->alt.i = this->m_pdata->m_data.size() - this->getoffset(jmp); - if((this->m_last_state == jmp) && (markid != -2)) - { - // Oops... we didn't have anything inside the assertion. - // Note we don't get here for negated forward lookahead as (?!) - // does have some uses. - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base, "Invalid or empty zero width assertion."); - return false; - } - } - // - // verify that if this is conditional expression, that we do have - // an alternative, if not add one: - // - if(markid == -4) - { - re_syntax_base* b = this->getaddress(expected_alt_point); - // Make sure we have exactly one alternative following this state: - if(b->type != syntax_element_alt) - { - re_alt* alt = static_cast<re_alt*>(this->insert_state(expected_alt_point, syntax_element_alt, sizeof(re_alt))); - alt->alt.i = this->m_pdata->m_data.size() - this->getoffset(alt); - } - else if(((std::ptrdiff_t)this->m_pdata->m_data.size() > (static_cast<re_alt*>(b)->alt.i + this->getoffset(b))) && (static_cast<re_alt*>(b)->alt.i > 0) && this->getaddress(static_cast<re_alt*>(b)->alt.i, b)->type == syntax_element_alt) - { - // Can't have seen more than one alternative: - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_bad_pattern, m_position - m_base, "More than one alternation operator | was encountered inside a conditional expression."); - return false; - } - else - { - // We must *not* have seen an alternative inside a (DEFINE) block: - b = this->getaddress(b->next.i, b); - if((b->type == syntax_element_assert_backref) && (static_cast<re_brace*>(b)->index == 9999)) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_bad_pattern, m_position - m_base, "Alternation operators are not allowed inside a DEFINE block."); - return false; - } - } - // check for invalid repetition of next state: - b = this->getaddress(expected_alt_point); - b = this->getaddress(static_cast<re_alt*>(b)->next.i, b); - if((b->type != syntax_element_assert_backref) - && (b->type != syntax_element_startmark)) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_badrepeat, m_position - m_base, "A repetition operator cannot be applied to a zero-width assertion."); - return false; - } - } - // - // append closing parenthesis state: - // - pb = static_cast<re_brace*>(this->append_state(syntax_element_endmark, sizeof(re_brace))); - pb->index = markid; - pb->icase = this->flags() & regbase::icase; - this->m_paren_start = last_paren_start; - // - // restore the alternate insertion point: - // - this->m_alt_insert_point = last_alt_point; - // - // and the case change data: - // - m_has_case_change = old_case_change; - // - // And the mark_reset data: - // - if(m_max_mark > m_mark_count) - { - m_mark_count = m_max_mark; - } - m_mark_reset = mark_reset; - m_max_mark = max_mark; - - - if(markid > 0) - { -#ifndef BOOST_NO_STD_DISTANCE - if(this->flags() & regbase::save_subexpression_location) - this->m_pdata->m_subs.at((std::size_t)markid - 1).second = std::distance(m_base, m_position) - 1; -#else - if(this->flags() & regbase::save_subexpression_location) - this->m_pdata->m_subs.at(markid - 1).second = (m_position - m_base) - 1; -#endif - // - // allow backrefs to this mark: - // - this->m_backrefs.set(markid); - } - return true; -} - -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::match_verb(const char* verb) -{ - while(*verb) - { - if(static_cast<charT>(*verb) != *m_position) - { - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - if(++m_position == m_end) - { - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - ++verb; - } - return true; -} - -#ifdef BOOST_MSVC -# pragma warning(push) -#if BOOST_MSVC >= 1800 -#pragma warning(disable:26812) -#endif -#endif -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::parse_perl_verb() -{ - if(++m_position == m_end) - { - // Rewind to start of (* sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - switch(*m_position) - { - case 'F': - if(++m_position == m_end) - { - // Rewind to start of (* sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - if((this->m_traits.syntax_type(*m_position) == regex_constants::syntax_close_mark) || match_verb("AIL")) - { - if((m_position == m_end) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)) - { - // Rewind to start of (* sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - ++m_position; - this->append_state(syntax_element_fail); - return true; - } - break; - case 'A': - if(++m_position == m_end) - { - // Rewind to start of (* sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - if(match_verb("CCEPT")) - { - if((m_position == m_end) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)) - { - // Rewind to start of (* sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - ++m_position; - this->append_state(syntax_element_accept); - return true; - } - break; - case 'C': - if(++m_position == m_end) - { - // Rewind to start of (* sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - if(match_verb("OMMIT")) - { - if((m_position == m_end) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)) - { - // Rewind to start of (* sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - ++m_position; - static_cast<re_commit*>(this->append_state(syntax_element_commit, sizeof(re_commit)))->action = commit_commit; - this->m_pdata->m_disable_match_any = true; - return true; - } - break; - case 'P': - if(++m_position == m_end) - { - // Rewind to start of (* sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - if(match_verb("RUNE")) - { - if((m_position == m_end) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)) - { - // Rewind to start of (* sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - ++m_position; - static_cast<re_commit*>(this->append_state(syntax_element_commit, sizeof(re_commit)))->action = commit_prune; - this->m_pdata->m_disable_match_any = true; - return true; - } - break; - case 'S': - if(++m_position == m_end) - { - // Rewind to start of (* sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - if(match_verb("KIP")) - { - if((m_position == m_end) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)) - { - // Rewind to start of (* sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - ++m_position; - static_cast<re_commit*>(this->append_state(syntax_element_commit, sizeof(re_commit)))->action = commit_skip; - this->m_pdata->m_disable_match_any = true; - return true; - } - break; - case 'T': - if(++m_position == m_end) - { - // Rewind to start of (* sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - if(match_verb("HEN")) - { - if((m_position == m_end) || (this->m_traits.syntax_type(*m_position) != regex_constants::syntax_close_mark)) - { - // Rewind to start of (* sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; - } - ++m_position; - this->append_state(syntax_element_then); - this->m_pdata->m_disable_match_any = true; - return true; - } - break; - } - // Rewind to start of (* sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_perl_extension, m_position - m_base); - return false; -} -#ifdef BOOST_MSVC -# pragma warning(pop) -#endif - -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::add_emacs_code(bool negate) -{ - // - // parses an emacs style \sx or \Sx construct. - // - if(++m_position == m_end) - { - // Rewind to start of sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_escape) --m_position; - fail(regex_constants::error_escape, m_position - m_base); - return false; - } - basic_char_set<charT, traits> char_set; - if(negate) - char_set.negate(); - - static const charT s_punct[5] = { 'p', 'u', 'n', 'c', 't', }; - - switch(*m_position) - { - case 's': - case ' ': - char_set.add_class(this->m_mask_space); - break; - case 'w': - char_set.add_class(this->m_word_mask); - break; - case '_': - char_set.add_single(digraph<charT>(charT('$'))); - char_set.add_single(digraph<charT>(charT('&'))); - char_set.add_single(digraph<charT>(charT('*'))); - char_set.add_single(digraph<charT>(charT('+'))); - char_set.add_single(digraph<charT>(charT('-'))); - char_set.add_single(digraph<charT>(charT('_'))); - char_set.add_single(digraph<charT>(charT('<'))); - char_set.add_single(digraph<charT>(charT('>'))); - break; - case '.': - char_set.add_class(this->m_traits.lookup_classname(s_punct, s_punct+5)); - break; - case '(': - char_set.add_single(digraph<charT>(charT('('))); - char_set.add_single(digraph<charT>(charT('['))); - char_set.add_single(digraph<charT>(charT('{'))); - break; - case ')': - char_set.add_single(digraph<charT>(charT(')'))); - char_set.add_single(digraph<charT>(charT(']'))); - char_set.add_single(digraph<charT>(charT('}'))); - break; - case '"': - char_set.add_single(digraph<charT>(charT('"'))); - char_set.add_single(digraph<charT>(charT('\''))); - char_set.add_single(digraph<charT>(charT('`'))); - break; - case '\'': - char_set.add_single(digraph<charT>(charT('\''))); - char_set.add_single(digraph<charT>(charT(','))); - char_set.add_single(digraph<charT>(charT('#'))); - break; - case '<': - char_set.add_single(digraph<charT>(charT(';'))); - break; - case '>': - char_set.add_single(digraph<charT>(charT('\n'))); - char_set.add_single(digraph<charT>(charT('\f'))); - break; - default: - fail(regex_constants::error_ctype, m_position - m_base); - return false; - } - if(0 == this->append_set(char_set)) - { - fail(regex_constants::error_ctype, m_position - m_base); - return false; - } - ++m_position; - return true; -} - -template <class charT, class traits> -regex_constants::syntax_option_type basic_regex_parser<charT, traits>::parse_options() -{ - // we have a (?imsx-imsx) group, convert it into a set of flags: - regex_constants::syntax_option_type f = this->flags(); - bool breakout = false; - do - { - switch(*m_position) - { - case 's': - f |= regex_constants::mod_s; - f &= ~regex_constants::no_mod_s; - break; - case 'm': - f &= ~regex_constants::no_mod_m; - break; - case 'i': - f |= regex_constants::icase; - break; - case 'x': - f |= regex_constants::mod_x; - break; - default: - breakout = true; - continue; - } - if(++m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_paren, m_position - m_base); - return false; - } - } - while(!breakout); - - breakout = false; - - if(*m_position == static_cast<charT>('-')) - { - if(++m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_paren, m_position - m_base); - return false; - } - do - { - switch(*m_position) - { - case 's': - f &= ~regex_constants::mod_s; - f |= regex_constants::no_mod_s; - break; - case 'm': - f |= regex_constants::no_mod_m; - break; - case 'i': - f &= ~regex_constants::icase; - break; - case 'x': - f &= ~regex_constants::mod_x; - break; - default: - breakout = true; - continue; - } - if(++m_position == m_end) - { - // Rewind to start of (? sequence: - --m_position; - while(this->m_traits.syntax_type(*m_position) != regex_constants::syntax_open_mark) --m_position; - fail(regex_constants::error_paren, m_position - m_base); - return false; - } - } - while(!breakout); - } - return f; -} - -template <class charT, class traits> -bool basic_regex_parser<charT, traits>::unwind_alts(std::ptrdiff_t last_paren_start) -{ - // - // If we didn't actually add any states after the last - // alternative then that's an error: - // - if((this->m_alt_insert_point == static_cast<std::ptrdiff_t>(this->m_pdata->m_data.size())) - && (!m_alt_jumps.empty()) && (m_alt_jumps.back() > last_paren_start) - && - !( - ((this->flags() & regbase::main_option_type) == regbase::perl_syntax_group) - && - ((this->flags() & regbase::no_empty_expressions) == 0) - ) - ) - { - fail(regex_constants::error_empty, this->m_position - this->m_base, "Can't terminate a sub-expression with an alternation operator |."); - return false; - } - // - // Fix up our alternatives: - // - while((!m_alt_jumps.empty()) && (m_alt_jumps.back() > last_paren_start)) - { - // - // fix up the jump to point to the end of the states - // that we've just added: - // - std::ptrdiff_t jump_offset = m_alt_jumps.back(); - m_alt_jumps.pop_back(); - this->m_pdata->m_data.align(); - re_jump* jmp = static_cast<re_jump*>(this->getaddress(jump_offset)); - if (jmp->type != syntax_element_jump) - { - // Something really bad happened, this used to be an assert, - // but we'll make it an error just in case we should ever get here. - fail(regex_constants::error_unknown, this->m_position - this->m_base, "Internal logic failed while compiling the expression, probably you added a repeat to something non-repeatable!"); - return false; - } - jmp->alt.i = this->m_pdata->m_data.size() - jump_offset; - } - return true; -} - -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -} // namespace BOOST_REGEX_DETAIL_NS -} // namespace boost - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/c_regex_traits.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/c_regex_traits.hpp deleted file mode 100644 index f966c4d4b4..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/c_regex_traits.hpp +++ /dev/null @@ -1,511 +0,0 @@ -/* - * - * Copyright (c) 2004 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE c_regex_traits.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares regular expression traits class that wraps the global C locale. - */ - -#ifndef BOOST_C_REGEX_TRAITS_HPP_INCLUDED -#define BOOST_C_REGEX_TRAITS_HPP_INCLUDED - -#ifndef BOOST_REGEX_CONFIG_HPP -#include <boost/regex/config.hpp> -#endif -#ifndef BOOST_REGEX_WORKAROUND_HPP -#include <boost/regex/v4/regex_workaround.hpp> -#endif - -#include <cctype> - -#ifdef BOOST_NO_STDC_NAMESPACE -namespace std{ - using ::strlen; using ::tolower; -} -#endif - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103 4244) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -namespace boost{ - - namespace BOOST_REGEX_DETAIL_NS { - - enum - { - char_class_space = 1 << 0, - char_class_print = 1 << 1, - char_class_cntrl = 1 << 2, - char_class_upper = 1 << 3, - char_class_lower = 1 << 4, - char_class_alpha = 1 << 5, - char_class_digit = 1 << 6, - char_class_punct = 1 << 7, - char_class_xdigit = 1 << 8, - char_class_alnum = char_class_alpha | char_class_digit, - char_class_graph = char_class_alnum | char_class_punct, - char_class_blank = 1 << 9, - char_class_word = 1 << 10, - char_class_unicode = 1 << 11, - char_class_horizontal = 1 << 12, - char_class_vertical = 1 << 13 - }; - - } - -template <class charT> -struct c_regex_traits; - -template<> -struct c_regex_traits<char> -{ - c_regex_traits(){} - typedef char char_type; - typedef std::size_t size_type; - typedef std::string string_type; - struct locale_type{}; - typedef boost::uint32_t char_class_type; - - static size_type length(const char_type* p) - { - return (std::strlen)(p); - } - - char translate(char c) const - { - return c; - } - char translate_nocase(char c) const - { - return static_cast<char>((std::tolower)(static_cast<unsigned char>(c))); - } - - static string_type BOOST_REGEX_CALL transform(const char* p1, const char* p2); - static string_type BOOST_REGEX_CALL transform_primary(const char* p1, const char* p2); - - static char_class_type BOOST_REGEX_CALL lookup_classname(const char* p1, const char* p2); - static string_type BOOST_REGEX_CALL lookup_collatename(const char* p1, const char* p2); - - static bool BOOST_REGEX_CALL isctype(char, char_class_type); - static int BOOST_REGEX_CALL value(char, int); - - locale_type imbue(locale_type l) - { return l; } - locale_type getloc()const - { return locale_type(); } - -private: - // this type is not copyable: - c_regex_traits(const c_regex_traits&); - c_regex_traits& operator=(const c_regex_traits&); -}; - -#ifndef BOOST_NO_WREGEX -template<> -struct c_regex_traits<wchar_t> -{ - c_regex_traits(){} - typedef wchar_t char_type; - typedef std::size_t size_type; - typedef std::wstring string_type; - struct locale_type{}; - typedef boost::uint32_t char_class_type; - - static size_type length(const char_type* p) - { - return (std::wcslen)(p); - } - - wchar_t translate(wchar_t c) const - { - return c; - } - wchar_t translate_nocase(wchar_t c) const - { - return (std::towlower)(c); - } - - static string_type BOOST_REGEX_CALL transform(const wchar_t* p1, const wchar_t* p2); - static string_type BOOST_REGEX_CALL transform_primary(const wchar_t* p1, const wchar_t* p2); - - static char_class_type BOOST_REGEX_CALL lookup_classname(const wchar_t* p1, const wchar_t* p2); - static string_type BOOST_REGEX_CALL lookup_collatename(const wchar_t* p1, const wchar_t* p2); - - static bool BOOST_REGEX_CALL isctype(wchar_t, char_class_type); - static int BOOST_REGEX_CALL value(wchar_t, int); - - locale_type imbue(locale_type l) - { return l; } - locale_type getloc()const - { return locale_type(); } - -private: - // this type is not copyable: - c_regex_traits(const c_regex_traits&); - c_regex_traits& operator=(const c_regex_traits&); -}; - -#endif // BOOST_NO_WREGEX - -inline c_regex_traits<char>::string_type BOOST_REGEX_CALL c_regex_traits<char>::transform(const char* p1, const char* p2) -{ - std::string result(10, ' '); - std::size_t s = result.size(); - std::size_t r; - std::string src(p1, p2); - while (s < (r = std::strxfrm(&*result.begin(), src.c_str(), s))) - { -#if defined(_CPPLIB_VER) - // - // A bug in VC11 and 12 causes the program to hang if we pass a null-string - // to std::strxfrm, but only for certain locales :-( - // Probably effects Intel and Clang or any compiler using the VC std library (Dinkumware). - // - if (r == INT_MAX) - { - result.erase(); - result.insert(result.begin(), static_cast<char>(0)); - return result; - } -#endif - result.append(r - s + 3, ' '); - s = result.size(); - } - result.erase(r); - return result; -} - -inline c_regex_traits<char>::string_type BOOST_REGEX_CALL c_regex_traits<char>::transform_primary(const char* p1, const char* p2) -{ - static char s_delim; - static const int s_collate_type = ::boost::BOOST_REGEX_DETAIL_NS::find_sort_syntax(static_cast<c_regex_traits<char>*>(0), &s_delim); - std::string result; - // - // What we do here depends upon the format of the sort key returned by - // sort key returned by this->transform: - // - switch (s_collate_type) - { - case ::boost::BOOST_REGEX_DETAIL_NS::sort_C: - case ::boost::BOOST_REGEX_DETAIL_NS::sort_unknown: - // the best we can do is translate to lower case, then get a regular sort key: - { - result.assign(p1, p2); - for (std::string::size_type i = 0; i < result.size(); ++i) - result[i] = static_cast<char>((std::tolower)(static_cast<unsigned char>(result[i]))); - result = transform(&*result.begin(), &*result.begin() + result.size()); - break; - } - case ::boost::BOOST_REGEX_DETAIL_NS::sort_fixed: - { - // get a regular sort key, and then truncate it: - result = transform(p1, p2); - result.erase(s_delim); - break; - } - case ::boost::BOOST_REGEX_DETAIL_NS::sort_delim: - // get a regular sort key, and then truncate everything after the delim: - result = transform(p1, p2); - if ((!result.empty()) && (result[0] == s_delim)) - break; - std::size_t i; - for (i = 0; i < result.size(); ++i) - { - if (result[i] == s_delim) - break; - } - result.erase(i); - break; - } - if (result.empty()) - result = std::string(1, char(0)); - return result; -} - -inline c_regex_traits<char>::char_class_type BOOST_REGEX_CALL c_regex_traits<char>::lookup_classname(const char* p1, const char* p2) -{ - using namespace BOOST_REGEX_DETAIL_NS; - static const char_class_type masks[] = - { - 0, - char_class_alnum, - char_class_alpha, - char_class_blank, - char_class_cntrl, - char_class_digit, - char_class_digit, - char_class_graph, - char_class_horizontal, - char_class_lower, - char_class_lower, - char_class_print, - char_class_punct, - char_class_space, - char_class_space, - char_class_upper, - char_class_unicode, - char_class_upper, - char_class_vertical, - char_class_alnum | char_class_word, - char_class_alnum | char_class_word, - char_class_xdigit, - }; - - int idx = ::boost::BOOST_REGEX_DETAIL_NS::get_default_class_id(p1, p2); - if (idx < 0) - { - std::string s(p1, p2); - for (std::string::size_type i = 0; i < s.size(); ++i) - s[i] = static_cast<char>((std::tolower)(static_cast<unsigned char>(s[i]))); - idx = ::boost::BOOST_REGEX_DETAIL_NS::get_default_class_id(&*s.begin(), &*s.begin() + s.size()); - } - BOOST_REGEX_ASSERT(std::size_t(idx) + 1u < sizeof(masks) / sizeof(masks[0])); - return masks[idx + 1]; -} - -inline bool BOOST_REGEX_CALL c_regex_traits<char>::isctype(char c, char_class_type mask) -{ - using namespace BOOST_REGEX_DETAIL_NS; - return - ((mask & char_class_space) && (std::isspace)(static_cast<unsigned char>(c))) - || ((mask & char_class_print) && (std::isprint)(static_cast<unsigned char>(c))) - || ((mask & char_class_cntrl) && (std::iscntrl)(static_cast<unsigned char>(c))) - || ((mask & char_class_upper) && (std::isupper)(static_cast<unsigned char>(c))) - || ((mask & char_class_lower) && (std::islower)(static_cast<unsigned char>(c))) - || ((mask & char_class_alpha) && (std::isalpha)(static_cast<unsigned char>(c))) - || ((mask & char_class_digit) && (std::isdigit)(static_cast<unsigned char>(c))) - || ((mask & char_class_punct) && (std::ispunct)(static_cast<unsigned char>(c))) - || ((mask & char_class_xdigit) && (std::isxdigit)(static_cast<unsigned char>(c))) - || ((mask & char_class_blank) && (std::isspace)(static_cast<unsigned char>(c)) && !::boost::BOOST_REGEX_DETAIL_NS::is_separator(c)) - || ((mask & char_class_word) && (c == '_')) - || ((mask & char_class_vertical) && (::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) || (c == '\v'))) - || ((mask & char_class_horizontal) && (std::isspace)(static_cast<unsigned char>(c)) && !::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) && (c != '\v')); -} - -inline c_regex_traits<char>::string_type BOOST_REGEX_CALL c_regex_traits<char>::lookup_collatename(const char* p1, const char* p2) -{ - std::string s(p1, p2); - s = ::boost::BOOST_REGEX_DETAIL_NS::lookup_default_collate_name(s); - if (s.empty() && (p2 - p1 == 1)) - s.append(1, *p1); - return s; -} - -inline int BOOST_REGEX_CALL c_regex_traits<char>::value(char c, int radix) -{ - char b[2] = { c, '\0', }; - char* ep; - int result = std::strtol(b, &ep, radix); - if (ep == b) - return -1; - return result; -} - -#ifndef BOOST_NO_WREGEX - -inline c_regex_traits<wchar_t>::string_type BOOST_REGEX_CALL c_regex_traits<wchar_t>::transform(const wchar_t* p1, const wchar_t* p2) -{ - std::size_t r; - std::size_t s = 10; - std::wstring src(p1, p2); - std::wstring result(s, L' '); - while (s < (r = std::wcsxfrm(&*result.begin(), src.c_str(), s))) - { -#if defined(_CPPLIB_VER) - // - // A bug in VC11 and 12 causes the program to hang if we pass a null-string - // to std::strxfrm, but only for certain locales :-( - // Probably effects Intel and Clang or any compiler using the VC std library (Dinkumware). - // - if (r == INT_MAX) - { - result.erase(); - result.insert(result.begin(), static_cast<wchar_t>(0)); - return result; - } -#endif - result.append(r - s + 3, L' '); - s = result.size(); - } - result.erase(r); - return result; -} - -inline c_regex_traits<wchar_t>::string_type BOOST_REGEX_CALL c_regex_traits<wchar_t>::transform_primary(const wchar_t* p1, const wchar_t* p2) -{ - static wchar_t s_delim; - static const int s_collate_type = ::boost::BOOST_REGEX_DETAIL_NS::find_sort_syntax(static_cast<const c_regex_traits<wchar_t>*>(0), &s_delim); - std::wstring result; - // - // What we do here depends upon the format of the sort key returned by - // sort key returned by this->transform: - // - switch (s_collate_type) - { - case ::boost::BOOST_REGEX_DETAIL_NS::sort_C: - case ::boost::BOOST_REGEX_DETAIL_NS::sort_unknown: - // the best we can do is translate to lower case, then get a regular sort key: - { - result.assign(p1, p2); - for (std::wstring::size_type i = 0; i < result.size(); ++i) - result[i] = (std::towlower)(result[i]); - result = c_regex_traits<wchar_t>::transform(&*result.begin(), &*result.begin() + result.size()); - break; - } - case ::boost::BOOST_REGEX_DETAIL_NS::sort_fixed: - { - // get a regular sort key, and then truncate it: - result = c_regex_traits<wchar_t>::transform(&*result.begin(), &*result.begin() + result.size()); - result.erase(s_delim); - break; - } - case ::boost::BOOST_REGEX_DETAIL_NS::sort_delim: - // get a regular sort key, and then truncate everything after the delim: - result = c_regex_traits<wchar_t>::transform(&*result.begin(), &*result.begin() + result.size()); - if ((!result.empty()) && (result[0] == s_delim)) - break; - std::size_t i; - for (i = 0; i < result.size(); ++i) - { - if (result[i] == s_delim) - break; - } - result.erase(i); - break; - } - if (result.empty()) - result = std::wstring(1, char(0)); - return result; -} - -inline c_regex_traits<wchar_t>::char_class_type BOOST_REGEX_CALL c_regex_traits<wchar_t>::lookup_classname(const wchar_t* p1, const wchar_t* p2) -{ - using namespace BOOST_REGEX_DETAIL_NS; - static const char_class_type masks[] = - { - 0, - char_class_alnum, - char_class_alpha, - char_class_blank, - char_class_cntrl, - char_class_digit, - char_class_digit, - char_class_graph, - char_class_horizontal, - char_class_lower, - char_class_lower, - char_class_print, - char_class_punct, - char_class_space, - char_class_space, - char_class_upper, - char_class_unicode, - char_class_upper, - char_class_vertical, - char_class_alnum | char_class_word, - char_class_alnum | char_class_word, - char_class_xdigit, - }; - - int idx = ::boost::BOOST_REGEX_DETAIL_NS::get_default_class_id(p1, p2); - if (idx < 0) - { - std::wstring s(p1, p2); - for (std::wstring::size_type i = 0; i < s.size(); ++i) - s[i] = (std::towlower)(s[i]); - idx = ::boost::BOOST_REGEX_DETAIL_NS::get_default_class_id(&*s.begin(), &*s.begin() + s.size()); - } - BOOST_REGEX_ASSERT(idx + 1 < static_cast<int>(sizeof(masks) / sizeof(masks[0]))); - return masks[idx + 1]; -} - -inline bool BOOST_REGEX_CALL c_regex_traits<wchar_t>::isctype(wchar_t c, char_class_type mask) -{ - using namespace BOOST_REGEX_DETAIL_NS; - return - ((mask & char_class_space) && (std::iswspace)(c)) - || ((mask & char_class_print) && (std::iswprint)(c)) - || ((mask & char_class_cntrl) && (std::iswcntrl)(c)) - || ((mask & char_class_upper) && (std::iswupper)(c)) - || ((mask & char_class_lower) && (std::iswlower)(c)) - || ((mask & char_class_alpha) && (std::iswalpha)(c)) - || ((mask & char_class_digit) && (std::iswdigit)(c)) - || ((mask & char_class_punct) && (std::iswpunct)(c)) - || ((mask & char_class_xdigit) && (std::iswxdigit)(c)) - || ((mask & char_class_blank) && (std::iswspace)(c) && !::boost::BOOST_REGEX_DETAIL_NS::is_separator(c)) - || ((mask & char_class_word) && (c == '_')) - || ((mask & char_class_unicode) && (c & ~static_cast<wchar_t>(0xff))) - || ((mask & char_class_vertical) && (::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) || (c == L'\v'))) - || ((mask & char_class_horizontal) && (std::iswspace)(c) && !::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) && (c != L'\v')); -} - -inline c_regex_traits<wchar_t>::string_type BOOST_REGEX_CALL c_regex_traits<wchar_t>::lookup_collatename(const wchar_t* p1, const wchar_t* p2) -{ -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4244) -#endif - std::string name(p1, p2); -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - name = ::boost::BOOST_REGEX_DETAIL_NS::lookup_default_collate_name(name); - if (!name.empty()) - return string_type(name.begin(), name.end()); - if (p2 - p1 == 1) - return string_type(1, *p1); - return string_type(); -} - -inline int BOOST_REGEX_CALL c_regex_traits<wchar_t>::value(wchar_t c, int radix) -{ -#ifdef BOOST_BORLANDC - // workaround for broken wcstol: - if ((std::iswxdigit)(c) == 0) - return -1; -#endif - wchar_t b[2] = { c, '\0', }; - wchar_t* ep; - int result = std::wcstol(b, &ep, radix); - if (ep == b) - return -1; - return result; -} - -#endif - -} - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#endif - - - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/char_regex_traits.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/char_regex_traits.hpp deleted file mode 100644 index e8a501ca00..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/char_regex_traits.hpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * - * Copyright (c) 2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE char_regex_traits.cpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares deprecated traits classes char_regex_traits<>. - */ - - -#ifndef BOOST_REGEX_V4_CHAR_REGEX_TRAITS_HPP -#define BOOST_REGEX_V4_CHAR_REGEX_TRAITS_HPP - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -namespace boost{ - -namespace deprecated{ -// -// class char_regex_traits_i -// provides case insensitive traits classes (deprecated): -template <class charT> -class char_regex_traits_i : public regex_traits<charT> {}; - -template<> -class char_regex_traits_i<char> : public regex_traits<char> -{ -public: - typedef char char_type; - typedef unsigned char uchar_type; - typedef unsigned int size_type; - typedef regex_traits<char> base_type; - -}; - -#ifndef BOOST_NO_WREGEX -template<> -class char_regex_traits_i<wchar_t> : public regex_traits<wchar_t> -{ -public: - typedef wchar_t char_type; - typedef unsigned short uchar_type; - typedef unsigned int size_type; - typedef regex_traits<wchar_t> base_type; - -}; -#endif -} // namespace deprecated -} // namespace boost - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#endif // include - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/cpp_regex_traits.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/cpp_regex_traits.hpp deleted file mode 100644 index 98b251511d..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/cpp_regex_traits.hpp +++ /dev/null @@ -1,1237 +0,0 @@ -/* - * - * Copyright (c) 2004 John Maddock - * Copyright 2011 Garmin Ltd. or its subsidiaries - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE cpp_regex_traits.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares regular expression traits class cpp_regex_traits. - */ - -#ifndef BOOST_CPP_REGEX_TRAITS_HPP_INCLUDED -#define BOOST_CPP_REGEX_TRAITS_HPP_INCLUDED - -#include <boost/config.hpp> -#include <boost/integer.hpp> -#include <boost/type_traits/make_unsigned.hpp> - -#ifndef BOOST_NO_STD_LOCALE - -#ifndef BOOST_RE_PAT_EXCEPT_HPP -#include <boost/regex/pattern_except.hpp> -#endif -#ifndef BOOST_REGEX_TRAITS_DEFAULTS_HPP_INCLUDED -#include <boost/regex/v4/regex_traits_defaults.hpp> -#endif -#ifdef BOOST_HAS_THREADS -#include <boost/regex/pending/static_mutex.hpp> -#endif -#ifndef BOOST_REGEX_PRIMARY_TRANSFORM -#include <boost/regex/v4/primary_transform.hpp> -#endif -#ifndef BOOST_REGEX_OBJECT_CACHE_HPP -#include <boost/regex/v4/object_cache.hpp> -#endif - -#include <climits> -#include <ios> -#include <istream> - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4786 4251) -#endif - -namespace boost{ - -// -// forward declaration is needed by some compilers: -// -template <class charT> -class cpp_regex_traits; - -namespace BOOST_REGEX_DETAIL_NS{ - -// -// class parser_buf: -// acts as a stream buffer which wraps around a pair of pointers: -// -template <class charT, - class traits = ::std::char_traits<charT> > -class parser_buf : public ::std::basic_streambuf<charT, traits> -{ - typedef ::std::basic_streambuf<charT, traits> base_type; - typedef typename base_type::int_type int_type; - typedef typename base_type::char_type char_type; - typedef typename base_type::pos_type pos_type; - typedef ::std::streamsize streamsize; - typedef typename base_type::off_type off_type; -public: - parser_buf() : base_type() { setbuf(0, 0); } - const charT* getnext() { return this->gptr(); } -protected: - std::basic_streambuf<charT, traits>* setbuf(char_type* s, streamsize n) BOOST_OVERRIDE; - typename parser_buf<charT, traits>::pos_type seekpos(pos_type sp, ::std::ios_base::openmode which) BOOST_OVERRIDE; - typename parser_buf<charT, traits>::pos_type seekoff(off_type off, ::std::ios_base::seekdir way, ::std::ios_base::openmode which) BOOST_OVERRIDE; -private: - parser_buf& operator=(const parser_buf&); - parser_buf(const parser_buf&); -}; - -template<class charT, class traits> -std::basic_streambuf<charT, traits>* -parser_buf<charT, traits>::setbuf(char_type* s, streamsize n) -{ - this->setg(s, s, s + n); - return this; -} - -template<class charT, class traits> -typename parser_buf<charT, traits>::pos_type -parser_buf<charT, traits>::seekoff(off_type off, ::std::ios_base::seekdir way, ::std::ios_base::openmode which) -{ - typedef typename boost::int_t<sizeof(way) * CHAR_BIT>::least cast_type; - - if(which & ::std::ios_base::out) - return pos_type(off_type(-1)); - std::ptrdiff_t size = this->egptr() - this->eback(); - std::ptrdiff_t pos = this->gptr() - this->eback(); - charT* g = this->eback(); - switch(static_cast<cast_type>(way)) - { - case ::std::ios_base::beg: - if((off < 0) || (off > size)) - return pos_type(off_type(-1)); - else - this->setg(g, g + off, g + size); - break; - case ::std::ios_base::end: - if((off < 0) || (off > size)) - return pos_type(off_type(-1)); - else - this->setg(g, g + size - off, g + size); - break; - case ::std::ios_base::cur: - { - std::ptrdiff_t newpos = static_cast<std::ptrdiff_t>(pos + off); - if((newpos < 0) || (newpos > size)) - return pos_type(off_type(-1)); - else - this->setg(g, g + newpos, g + size); - break; - } - default: ; - } -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4244) -#endif - return static_cast<pos_type>(this->gptr() - this->eback()); -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif -} - -template<class charT, class traits> -typename parser_buf<charT, traits>::pos_type -parser_buf<charT, traits>::seekpos(pos_type sp, ::std::ios_base::openmode which) -{ - if(which & ::std::ios_base::out) - return pos_type(off_type(-1)); - off_type size = static_cast<off_type>(this->egptr() - this->eback()); - charT* g = this->eback(); - if(off_type(sp) <= size) - { - this->setg(g, g + off_type(sp), g + size); - } - return pos_type(off_type(-1)); -} - -// -// class cpp_regex_traits_base: -// acts as a container for locale and the facets we are using. -// -template <class charT> -struct cpp_regex_traits_base -{ - cpp_regex_traits_base(const std::locale& l) - { (void)imbue(l); } - std::locale imbue(const std::locale& l); - - std::locale m_locale; - std::ctype<charT> const* m_pctype; -#ifndef BOOST_NO_STD_MESSAGES - std::messages<charT> const* m_pmessages; -#endif - std::collate<charT> const* m_pcollate; - - bool operator<(const cpp_regex_traits_base& b)const - { - if(m_pctype == b.m_pctype) - { -#ifndef BOOST_NO_STD_MESSAGES - if(m_pmessages == b.m_pmessages) - { - return m_pcollate < b.m_pcollate; - } - return m_pmessages < b.m_pmessages; -#else - return m_pcollate < b.m_pcollate; -#endif - } - return m_pctype < b.m_pctype; - } - bool operator==(const cpp_regex_traits_base& b)const - { - return (m_pctype == b.m_pctype) -#ifndef BOOST_NO_STD_MESSAGES - && (m_pmessages == b.m_pmessages) -#endif - && (m_pcollate == b.m_pcollate); - } -}; - -template <class charT> -std::locale cpp_regex_traits_base<charT>::imbue(const std::locale& l) -{ - std::locale result(m_locale); - m_locale = l; - m_pctype = &BOOST_USE_FACET(std::ctype<charT>, l); -#ifndef BOOST_NO_STD_MESSAGES - m_pmessages = BOOST_HAS_FACET(std::messages<charT>, l) ? &BOOST_USE_FACET(std::messages<charT>, l) : 0; -#endif - m_pcollate = &BOOST_USE_FACET(std::collate<charT>, l); - return result; -} - -// -// class cpp_regex_traits_char_layer: -// implements methods that require specialization for narrow characters: -// -template <class charT> -class cpp_regex_traits_char_layer : public cpp_regex_traits_base<charT> -{ - typedef std::basic_string<charT> string_type; - typedef std::map<charT, regex_constants::syntax_type> map_type; - typedef typename map_type::const_iterator map_iterator_type; -public: - cpp_regex_traits_char_layer(const std::locale& l) - : cpp_regex_traits_base<charT>(l) - { - init(); - } - cpp_regex_traits_char_layer(const cpp_regex_traits_base<charT>& b) - : cpp_regex_traits_base<charT>(b) - { - init(); - } - void init(); - - regex_constants::syntax_type syntax_type(charT c)const - { - map_iterator_type i = m_char_map.find(c); - return ((i == m_char_map.end()) ? 0 : i->second); - } - regex_constants::escape_syntax_type escape_syntax_type(charT c) const - { - map_iterator_type i = m_char_map.find(c); - if(i == m_char_map.end()) - { - if(this->m_pctype->is(std::ctype_base::lower, c)) return regex_constants::escape_type_class; - if(this->m_pctype->is(std::ctype_base::upper, c)) return regex_constants::escape_type_not_class; - return 0; - } - return i->second; - } - -private: - string_type get_default_message(regex_constants::syntax_type); - // TODO: use a hash table when available! - map_type m_char_map; -}; - -template <class charT> -void cpp_regex_traits_char_layer<charT>::init() -{ - // we need to start by initialising our syntax map so we know which - // character is used for which purpose: -#ifndef BOOST_NO_STD_MESSAGES -#ifndef __IBMCPP__ - typename std::messages<charT>::catalog cat = static_cast<std::messages<char>::catalog>(-1); -#else - typename std::messages<charT>::catalog cat = reinterpret_cast<std::messages<char>::catalog>(-1); -#endif - std::string cat_name(cpp_regex_traits<charT>::get_catalog_name()); - if((!cat_name.empty()) && (this->m_pmessages != 0)) - { - cat = this->m_pmessages->open( - cat_name, - this->m_locale); - if((int)cat < 0) - { - std::string m("Unable to open message catalog: "); - std::runtime_error err(m + cat_name); - boost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(err); - } - } - // - // if we have a valid catalog then load our messages: - // - if((int)cat >= 0) - { -#ifndef BOOST_NO_EXCEPTIONS - try{ -#endif - for(regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i) - { - string_type mss = this->m_pmessages->get(cat, 0, i, get_default_message(i)); - for(typename string_type::size_type j = 0; j < mss.size(); ++j) - { - m_char_map[mss[j]] = i; - } - } - this->m_pmessages->close(cat); -#ifndef BOOST_NO_EXCEPTIONS - } - catch(...) - { - if(this->m_pmessages) - this->m_pmessages->close(cat); - throw; - } -#endif - } - else - { -#endif - for(regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i) - { - const char* ptr = get_default_syntax(i); - while(ptr && *ptr) - { - m_char_map[this->m_pctype->widen(*ptr)] = i; - ++ptr; - } - } -#ifndef BOOST_NO_STD_MESSAGES - } -#endif -} - -template <class charT> -typename cpp_regex_traits_char_layer<charT>::string_type - cpp_regex_traits_char_layer<charT>::get_default_message(regex_constants::syntax_type i) -{ - const char* ptr = get_default_syntax(i); - string_type result; - while(ptr && *ptr) - { - result.append(1, this->m_pctype->widen(*ptr)); - ++ptr; - } - return result; -} - -// -// specialized version for narrow characters: -// -template <> -class cpp_regex_traits_char_layer<char> : public cpp_regex_traits_base<char> -{ - typedef std::string string_type; -public: - cpp_regex_traits_char_layer(const std::locale& l) - : cpp_regex_traits_base<char>(l) - { - init(); - } - cpp_regex_traits_char_layer(const cpp_regex_traits_base<char>& l) - : cpp_regex_traits_base<char>(l) - { - init(); - } - - regex_constants::syntax_type syntax_type(char c)const - { - return m_char_map[static_cast<unsigned char>(c)]; - } - regex_constants::escape_syntax_type escape_syntax_type(char c) const - { - return m_char_map[static_cast<unsigned char>(c)]; - } - -private: - regex_constants::syntax_type m_char_map[1u << CHAR_BIT]; - void init(); -}; - -#ifdef BOOST_REGEX_BUGGY_CTYPE_FACET -enum -{ - char_class_space=1<<0, - char_class_print=1<<1, - char_class_cntrl=1<<2, - char_class_upper=1<<3, - char_class_lower=1<<4, - char_class_alpha=1<<5, - char_class_digit=1<<6, - char_class_punct=1<<7, - char_class_xdigit=1<<8, - char_class_alnum=char_class_alpha|char_class_digit, - char_class_graph=char_class_alnum|char_class_punct, - char_class_blank=1<<9, - char_class_word=1<<10, - char_class_unicode=1<<11, - char_class_horizontal_space=1<<12, - char_class_vertical_space=1<<13 -}; - -#endif - -// -// class cpp_regex_traits_implementation: -// provides pimpl implementation for cpp_regex_traits. -// -template <class charT> -class cpp_regex_traits_implementation : public cpp_regex_traits_char_layer<charT> -{ -public: - typedef typename cpp_regex_traits<charT>::char_class_type char_class_type; - typedef typename std::ctype<charT>::mask native_mask_type; - typedef typename boost::make_unsigned<native_mask_type>::type unsigned_native_mask_type; -#ifndef BOOST_REGEX_BUGGY_CTYPE_FACET - BOOST_STATIC_CONSTANT(char_class_type, mask_blank = 1u << 24); - BOOST_STATIC_CONSTANT(char_class_type, mask_word = 1u << 25); - BOOST_STATIC_CONSTANT(char_class_type, mask_unicode = 1u << 26); - BOOST_STATIC_CONSTANT(char_class_type, mask_horizontal = 1u << 27); - BOOST_STATIC_CONSTANT(char_class_type, mask_vertical = 1u << 28); -#endif - - typedef std::basic_string<charT> string_type; - typedef charT char_type; - //cpp_regex_traits_implementation(); - cpp_regex_traits_implementation(const std::locale& l) - : cpp_regex_traits_char_layer<charT>(l) - { - init(); - } - cpp_regex_traits_implementation(const cpp_regex_traits_base<charT>& l) - : cpp_regex_traits_char_layer<charT>(l) - { - init(); - } - std::string error_string(regex_constants::error_type n) const - { - if(!m_error_strings.empty()) - { - std::map<int, std::string>::const_iterator p = m_error_strings.find(n); - return (p == m_error_strings.end()) ? std::string(get_default_error_string(n)) : p->second; - } - return get_default_error_string(n); - } - char_class_type lookup_classname(const charT* p1, const charT* p2) const - { - char_class_type result = lookup_classname_imp(p1, p2); - if(result == 0) - { - string_type temp(p1, p2); - this->m_pctype->tolower(&*temp.begin(), &*temp.begin() + temp.size()); - result = lookup_classname_imp(&*temp.begin(), &*temp.begin() + temp.size()); - } - return result; - } - string_type lookup_collatename(const charT* p1, const charT* p2) const; - string_type transform_primary(const charT* p1, const charT* p2) const; - string_type transform(const charT* p1, const charT* p2) const; -private: - std::map<int, std::string> m_error_strings; // error messages indexed by numberic ID - std::map<string_type, char_class_type> m_custom_class_names; // character class names - std::map<string_type, string_type> m_custom_collate_names; // collating element names - unsigned m_collate_type; // the form of the collation string - charT m_collate_delim; // the collation group delimiter - // - // helpers: - // - char_class_type lookup_classname_imp(const charT* p1, const charT* p2) const; - void init(); -#ifdef BOOST_REGEX_BUGGY_CTYPE_FACET -public: - bool isctype(charT c, char_class_type m)const; -#endif -}; - -#ifndef BOOST_REGEX_BUGGY_CTYPE_FACET -#if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION) - -template <class charT> -typename cpp_regex_traits_implementation<charT>::char_class_type const cpp_regex_traits_implementation<charT>::mask_blank; -template <class charT> -typename cpp_regex_traits_implementation<charT>::char_class_type const cpp_regex_traits_implementation<charT>::mask_word; -template <class charT> -typename cpp_regex_traits_implementation<charT>::char_class_type const cpp_regex_traits_implementation<charT>::mask_unicode; -template <class charT> -typename cpp_regex_traits_implementation<charT>::char_class_type const cpp_regex_traits_implementation<charT>::mask_vertical; -template <class charT> -typename cpp_regex_traits_implementation<charT>::char_class_type const cpp_regex_traits_implementation<charT>::mask_horizontal; - -#endif -#endif - -template <class charT> -typename cpp_regex_traits_implementation<charT>::string_type - cpp_regex_traits_implementation<charT>::transform_primary(const charT* p1, const charT* p2) const -{ - // - // PRECONDITIONS: - // - // A bug in gcc 3.2 (and maybe other versions as well) treats - // p1 as a null terminated string, for efficiency reasons - // we work around this elsewhere, but just assert here that - // we adhere to gcc's (buggy) preconditions... - // - BOOST_REGEX_ASSERT(*p2 == 0); - string_type result; -#if defined(_CPPLIB_VER) - // - // A bug in VC11 and 12 causes the program to hang if we pass a null-string - // to std::collate::transform, but only for certain locales :-( - // Probably effects Intel and Clang or any compiler using the VC std library (Dinkumware). - // - if(*p1 == 0) - { - return string_type(1, charT(0)); - } -#endif - // - // swallowing all exceptions here is a bad idea - // however at least one std lib will always throw - // std::bad_alloc for certain arguments... - // -#ifndef BOOST_NO_EXCEPTIONS - try{ -#endif - // - // What we do here depends upon the format of the sort key returned by - // sort key returned by this->transform: - // - switch(m_collate_type) - { - case sort_C: - case sort_unknown: - // the best we can do is translate to lower case, then get a regular sort key: - { - result.assign(p1, p2); - this->m_pctype->tolower(&*result.begin(), &*result.begin() + result.size()); - result = this->m_pcollate->transform(&*result.begin(), &*result.begin() + result.size()); - break; - } - case sort_fixed: - { - // get a regular sort key, and then truncate it: - result.assign(this->m_pcollate->transform(p1, p2)); - result.erase(this->m_collate_delim); - break; - } - case sort_delim: - // get a regular sort key, and then truncate everything after the delim: - result.assign(this->m_pcollate->transform(p1, p2)); - std::size_t i; - for(i = 0; i < result.size(); ++i) - { - if(result[i] == m_collate_delim) - break; - } - result.erase(i); - break; - } -#ifndef BOOST_NO_EXCEPTIONS - }catch(...){} -#endif - while((!result.empty()) && (charT(0) == *result.rbegin())) - result.erase(result.size() - 1); - if(result.empty()) - { - // character is ignorable at the primary level: - result = string_type(1, charT(0)); - } - return result; -} - -template <class charT> -typename cpp_regex_traits_implementation<charT>::string_type - cpp_regex_traits_implementation<charT>::transform(const charT* p1, const charT* p2) const -{ - // - // PRECONDITIONS: - // - // A bug in gcc 3.2 (and maybe other versions as well) treats - // p1 as a null terminated string, for efficiency reasons - // we work around this elsewhere, but just assert here that - // we adhere to gcc's (buggy) preconditions... - // - BOOST_REGEX_ASSERT(*p2 == 0); - // - // swallowing all exceptions here is a bad idea - // however at least one std lib will always throw - // std::bad_alloc for certain arguments... - // - string_type result, result2; -#if defined(_CPPLIB_VER) - // - // A bug in VC11 and 12 causes the program to hang if we pass a null-string - // to std::collate::transform, but only for certain locales :-( - // Probably effects Intel and Clang or any compiler using the VC std library (Dinkumware). - // - if(*p1 == 0) - { - return result; - } -#endif -#ifndef BOOST_NO_EXCEPTIONS - try{ -#endif - result = this->m_pcollate->transform(p1, p2); - // - // Borland's STLPort version returns a NULL-terminated - // string that has garbage at the end - each call to - // std::collate<wchar_t>::transform returns a different string! - // So as a workaround, we'll truncate the string at the first NULL - // which _seems_ to work.... -#if BOOST_WORKAROUND(BOOST_BORLANDC, < 0x580) - result.erase(result.find(charT(0))); -#else - // - // some implementations (Dinkumware) append unnecessary trailing \0's: - while((!result.empty()) && (charT(0) == *result.rbegin())) - result.erase(result.size() - 1); -#endif - // - // We may have NULL's used as separators between sections of the collate string, - // an example would be Boost.Locale. We have no way to detect this case via - // #defines since this can be used with any compiler/platform combination. - // Unfortunately our state machine (which was devised when all implementations - // used underlying C language API's) can't cope with that case. One workaround - // is to replace each character with 2, fortunately this code isn't used that - // much as this is now slower than before :-( - // - typedef typename make_unsigned<charT>::type uchar_type; - result2.reserve(result.size() * 2 + 2); - for(unsigned i = 0; i < result.size(); ++i) - { - if(static_cast<uchar_type>(result[i]) == (std::numeric_limits<uchar_type>::max)()) - { - result2.append(1, charT((std::numeric_limits<uchar_type>::max)())).append(1, charT('b')); - } - else - { - result2.append(1, static_cast<charT>(1 + static_cast<uchar_type>(result[i]))).append(1, charT('b') - 1); - } - } - BOOST_REGEX_ASSERT(std::find(result2.begin(), result2.end(), charT(0)) == result2.end()); -#ifndef BOOST_NO_EXCEPTIONS - } - catch(...) - { - } -#endif - return result2; -} - - -template <class charT> -typename cpp_regex_traits_implementation<charT>::string_type - cpp_regex_traits_implementation<charT>::lookup_collatename(const charT* p1, const charT* p2) const -{ - typedef typename std::map<string_type, string_type>::const_iterator iter_type; - if(!m_custom_collate_names.empty()) - { - iter_type pos = m_custom_collate_names.find(string_type(p1, p2)); - if(pos != m_custom_collate_names.end()) - return pos->second; - } -#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\ - && !BOOST_WORKAROUND(BOOST_BORLANDC, <= 0x0551) - std::string name(p1, p2); -#else - std::string name; - const charT* p0 = p1; - while(p0 != p2) - name.append(1, char(*p0++)); -#endif - name = lookup_default_collate_name(name); -#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\ - && !BOOST_WORKAROUND(BOOST_BORLANDC, <= 0x0551) - if(!name.empty()) - return string_type(name.begin(), name.end()); -#else - if(!name.empty()) - { - string_type result; - typedef std::string::const_iterator iter; - iter b = name.begin(); - iter e = name.end(); - while(b != e) - result.append(1, charT(*b++)); - return result; - } -#endif - if(p2 - p1 == 1) - return string_type(1, *p1); - return string_type(); -} - -template <class charT> -void cpp_regex_traits_implementation<charT>::init() -{ -#ifndef BOOST_NO_STD_MESSAGES -#ifndef __IBMCPP__ - typename std::messages<charT>::catalog cat = static_cast<std::messages<char>::catalog>(-1); -#else - typename std::messages<charT>::catalog cat = reinterpret_cast<std::messages<char>::catalog>(-1); -#endif - std::string cat_name(cpp_regex_traits<charT>::get_catalog_name()); - if((!cat_name.empty()) && (this->m_pmessages != 0)) - { - cat = this->m_pmessages->open( - cat_name, - this->m_locale); - if((int)cat < 0) - { - std::string m("Unable to open message catalog: "); - std::runtime_error err(m + cat_name); - boost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(err); - } - } - // - // if we have a valid catalog then load our messages: - // - if((int)cat >= 0) - { - // - // Error messages: - // - for(boost::regex_constants::error_type i = static_cast<boost::regex_constants::error_type>(0); - i <= boost::regex_constants::error_unknown; - i = static_cast<boost::regex_constants::error_type>(i + 1)) - { - const char* p = get_default_error_string(i); - string_type default_message; - while(*p) - { - default_message.append(1, this->m_pctype->widen(*p)); - ++p; - } - string_type s = this->m_pmessages->get(cat, 0, i+200, default_message); - std::string result; - for(std::string::size_type j = 0; j < s.size(); ++j) - { - result.append(1, this->m_pctype->narrow(s[j], 0)); - } - m_error_strings[i] = result; - } - // - // Custom class names: - // -#ifndef BOOST_REGEX_BUGGY_CTYPE_FACET - static const char_class_type masks[16] = - { - static_cast<unsigned_native_mask_type>(std::ctype<charT>::alnum), - static_cast<unsigned_native_mask_type>(std::ctype<charT>::alpha), - static_cast<unsigned_native_mask_type>(std::ctype<charT>::cntrl), - static_cast<unsigned_native_mask_type>(std::ctype<charT>::digit), - static_cast<unsigned_native_mask_type>(std::ctype<charT>::graph), - cpp_regex_traits_implementation<charT>::mask_horizontal, - static_cast<unsigned_native_mask_type>(std::ctype<charT>::lower), - static_cast<unsigned_native_mask_type>(std::ctype<charT>::print), - static_cast<unsigned_native_mask_type>(std::ctype<charT>::punct), - static_cast<unsigned_native_mask_type>(std::ctype<charT>::space), - static_cast<unsigned_native_mask_type>(std::ctype<charT>::upper), - cpp_regex_traits_implementation<charT>::mask_vertical, - static_cast<unsigned_native_mask_type>(std::ctype<charT>::xdigit), - cpp_regex_traits_implementation<charT>::mask_blank, - cpp_regex_traits_implementation<charT>::mask_word, - cpp_regex_traits_implementation<charT>::mask_unicode, - }; -#else - static const char_class_type masks[16] = - { - ::boost::BOOST_REGEX_DETAIL_NS::char_class_alnum, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_alpha, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_cntrl, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_digit, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_graph, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_horizontal_space, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_lower, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_print, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_punct, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_space, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_upper, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_vertical_space, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_xdigit, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_blank, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_word, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_unicode, - }; -#endif - static const string_type null_string; - for(unsigned int j = 0; j <= 13; ++j) - { - string_type s(this->m_pmessages->get(cat, 0, j+300, null_string)); - if(!s.empty()) - this->m_custom_class_names[s] = masks[j]; - } - } -#endif - // - // get the collation format used by m_pcollate: - // - m_collate_type = BOOST_REGEX_DETAIL_NS::find_sort_syntax(this, &m_collate_delim); -} - -template <class charT> -typename cpp_regex_traits_implementation<charT>::char_class_type - cpp_regex_traits_implementation<charT>::lookup_classname_imp(const charT* p1, const charT* p2) const -{ -#ifndef BOOST_REGEX_BUGGY_CTYPE_FACET - static const char_class_type masks[22] = - { - 0, - static_cast<unsigned_native_mask_type>(std::ctype<char>::alnum), - static_cast<unsigned_native_mask_type>(std::ctype<char>::alpha), - cpp_regex_traits_implementation<charT>::mask_blank, - static_cast<unsigned_native_mask_type>(std::ctype<char>::cntrl), - static_cast<unsigned_native_mask_type>(std::ctype<char>::digit), - static_cast<unsigned_native_mask_type>(std::ctype<char>::digit), - static_cast<unsigned_native_mask_type>(std::ctype<char>::graph), - cpp_regex_traits_implementation<charT>::mask_horizontal, - static_cast<unsigned_native_mask_type>(std::ctype<char>::lower), - static_cast<unsigned_native_mask_type>(std::ctype<char>::lower), - static_cast<unsigned_native_mask_type>(std::ctype<char>::print), - static_cast<unsigned_native_mask_type>(std::ctype<char>::punct), - static_cast<unsigned_native_mask_type>(std::ctype<char>::space), - static_cast<unsigned_native_mask_type>(std::ctype<char>::space), - static_cast<unsigned_native_mask_type>(std::ctype<char>::upper), - cpp_regex_traits_implementation<charT>::mask_unicode, - static_cast<unsigned_native_mask_type>(std::ctype<char>::upper), - cpp_regex_traits_implementation<charT>::mask_vertical, - static_cast<unsigned_native_mask_type>(std::ctype<char>::alnum) | cpp_regex_traits_implementation<charT>::mask_word, - static_cast<unsigned_native_mask_type>(std::ctype<char>::alnum) | cpp_regex_traits_implementation<charT>::mask_word, - static_cast<unsigned_native_mask_type>(std::ctype<char>::xdigit), - }; -#else - static const char_class_type masks[22] = - { - 0, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_alnum, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_alpha, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_blank, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_cntrl, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_digit, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_digit, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_graph, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_horizontal_space, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_lower, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_lower, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_print, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_punct, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_space, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_space, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_upper, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_unicode, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_upper, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_vertical_space, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_alnum | ::boost::BOOST_REGEX_DETAIL_NS::char_class_word, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_alnum | ::boost::BOOST_REGEX_DETAIL_NS::char_class_word, - ::boost::BOOST_REGEX_DETAIL_NS::char_class_xdigit, - }; -#endif - if(!m_custom_class_names.empty()) - { - typedef typename std::map<std::basic_string<charT>, char_class_type>::const_iterator map_iter; - map_iter pos = m_custom_class_names.find(string_type(p1, p2)); - if(pos != m_custom_class_names.end()) - return pos->second; - } - std::size_t state_id = 1 + BOOST_REGEX_DETAIL_NS::get_default_class_id(p1, p2); - BOOST_REGEX_ASSERT(state_id < sizeof(masks) / sizeof(masks[0])); - return masks[state_id]; -} - -#ifdef BOOST_REGEX_BUGGY_CTYPE_FACET -template <class charT> -bool cpp_regex_traits_implementation<charT>::isctype(const charT c, char_class_type mask) const -{ - return - ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_space) && (this->m_pctype->is(std::ctype<charT>::space, c))) - || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_print) && (this->m_pctype->is(std::ctype<charT>::print, c))) - || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_cntrl) && (this->m_pctype->is(std::ctype<charT>::cntrl, c))) - || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_upper) && (this->m_pctype->is(std::ctype<charT>::upper, c))) - || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_lower) && (this->m_pctype->is(std::ctype<charT>::lower, c))) - || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_alpha) && (this->m_pctype->is(std::ctype<charT>::alpha, c))) - || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_digit) && (this->m_pctype->is(std::ctype<charT>::digit, c))) - || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_punct) && (this->m_pctype->is(std::ctype<charT>::punct, c))) - || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_xdigit) && (this->m_pctype->is(std::ctype<charT>::xdigit, c))) - || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_blank) && (this->m_pctype->is(std::ctype<charT>::space, c)) && !::boost::BOOST_REGEX_DETAIL_NS::is_separator(c)) - || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_word) && (c == '_')) - || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_unicode) && ::boost::BOOST_REGEX_DETAIL_NS::is_extended(c)) - || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_vertical_space) && (is_separator(c) || (c == '\v'))) - || ((mask & ::boost::BOOST_REGEX_DETAIL_NS::char_class_horizontal_space) && this->m_pctype->is(std::ctype<charT>::space, c) && !(is_separator(c) || (c == '\v'))); -} -#endif - - -template <class charT> -inline boost::shared_ptr<const cpp_regex_traits_implementation<charT> > create_cpp_regex_traits(const std::locale& l) -{ - cpp_regex_traits_base<charT> key(l); - return ::boost::object_cache<cpp_regex_traits_base<charT>, cpp_regex_traits_implementation<charT> >::get(key, 5); -} - -} // BOOST_REGEX_DETAIL_NS - -template <class charT> -class cpp_regex_traits -{ -private: - typedef std::ctype<charT> ctype_type; -public: - typedef charT char_type; - typedef std::size_t size_type; - typedef std::basic_string<char_type> string_type; - typedef std::locale locale_type; - typedef boost::uint_least32_t char_class_type; - - struct boost_extensions_tag{}; - - cpp_regex_traits() - : m_pimpl(BOOST_REGEX_DETAIL_NS::create_cpp_regex_traits<charT>(std::locale())) - { } - static size_type length(const char_type* p) - { - return std::char_traits<charT>::length(p); - } - regex_constants::syntax_type syntax_type(charT c)const - { - return m_pimpl->syntax_type(c); - } - regex_constants::escape_syntax_type escape_syntax_type(charT c) const - { - return m_pimpl->escape_syntax_type(c); - } - charT translate(charT c) const - { - return c; - } - charT translate_nocase(charT c) const - { - return m_pimpl->m_pctype->tolower(c); - } - charT translate(charT c, bool icase) const - { - return icase ? m_pimpl->m_pctype->tolower(c) : c; - } - charT tolower(charT c) const - { - return m_pimpl->m_pctype->tolower(c); - } - charT toupper(charT c) const - { - return m_pimpl->m_pctype->toupper(c); - } - string_type transform(const charT* p1, const charT* p2) const - { - return m_pimpl->transform(p1, p2); - } - string_type transform_primary(const charT* p1, const charT* p2) const - { - return m_pimpl->transform_primary(p1, p2); - } - char_class_type lookup_classname(const charT* p1, const charT* p2) const - { - return m_pimpl->lookup_classname(p1, p2); - } - string_type lookup_collatename(const charT* p1, const charT* p2) const - { - return m_pimpl->lookup_collatename(p1, p2); - } - bool isctype(charT c, char_class_type f) const - { -#ifndef BOOST_REGEX_BUGGY_CTYPE_FACET - typedef typename std::ctype<charT>::mask ctype_mask; - - static const ctype_mask mask_base = - static_cast<ctype_mask>( - std::ctype<charT>::alnum - | std::ctype<charT>::alpha - | std::ctype<charT>::cntrl - | std::ctype<charT>::digit - | std::ctype<charT>::graph - | std::ctype<charT>::lower - | std::ctype<charT>::print - | std::ctype<charT>::punct - | std::ctype<charT>::space - | std::ctype<charT>::upper - | std::ctype<charT>::xdigit); - - if((f & mask_base) - && (m_pimpl->m_pctype->is( - static_cast<ctype_mask>(f & mask_base), c))) - return true; - else if((f & BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT>::mask_unicode) && BOOST_REGEX_DETAIL_NS::is_extended(c)) - return true; - else if((f & BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT>::mask_word) && (c == '_')) - return true; - else if((f & BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT>::mask_blank) - && m_pimpl->m_pctype->is(std::ctype<charT>::space, c) - && !BOOST_REGEX_DETAIL_NS::is_separator(c)) - return true; - else if((f & BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT>::mask_vertical) - && (::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) || (c == '\v'))) - return true; - else if((f & BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT>::mask_horizontal) - && this->isctype(c, std::ctype<charT>::space) && !this->isctype(c, BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT>::mask_vertical)) - return true; -#ifdef __CYGWIN__ - // - // Cygwin has a buggy ctype facet, see https://www.cygwin.com/ml/cygwin/2012-08/msg00178.html: - // - else if((f & std::ctype<charT>::xdigit) == std::ctype<charT>::xdigit) - { - if((c >= 'a') && (c <= 'f')) - return true; - if((c >= 'A') && (c <= 'F')) - return true; - } -#endif - return false; -#else - return m_pimpl->isctype(c, f); -#endif - } - boost::intmax_t toi(const charT*& p1, const charT* p2, int radix)const; - int value(charT c, int radix)const - { - const charT* pc = &c; - return (int)toi(pc, pc + 1, radix); - } - locale_type imbue(locale_type l) - { - std::locale result(getloc()); - m_pimpl = BOOST_REGEX_DETAIL_NS::create_cpp_regex_traits<charT>(l); - return result; - } - locale_type getloc()const - { - return m_pimpl->m_locale; - } - std::string error_string(regex_constants::error_type n) const - { - return m_pimpl->error_string(n); - } - - // - // extension: - // set the name of the message catalog in use (defaults to "boost_regex"). - // - static std::string catalog_name(const std::string& name); - static std::string get_catalog_name(); - -private: - boost::shared_ptr<const BOOST_REGEX_DETAIL_NS::cpp_regex_traits_implementation<charT> > m_pimpl; - // - // catalog name handler: - // - static std::string& get_catalog_name_inst(); - -#ifdef BOOST_HAS_THREADS - static static_mutex& get_mutex_inst(); -#endif -}; - - -template <class charT> -boost::intmax_t cpp_regex_traits<charT>::toi(const charT*& first, const charT* last, int radix)const -{ - BOOST_REGEX_DETAIL_NS::parser_buf<charT> sbuf; // buffer for parsing numbers. - std::basic_istream<charT> is(&sbuf); // stream for parsing numbers. - - // we do NOT want to parse any thousands separators inside the stream: - last = std::find(first, last, BOOST_USE_FACET(std::numpunct<charT>, is.getloc()).thousands_sep()); - - sbuf.pubsetbuf(const_cast<charT*>(static_cast<const charT*>(first)), static_cast<std::streamsize>(last-first)); - is.clear(); - if(std::abs(radix) == 16) is >> std::hex; - else if(std::abs(radix) == 8) is >> std::oct; - else is >> std::dec; - boost::intmax_t val; - if(is >> val) - { - first = first + ((last - first) - sbuf.in_avail()); - return val; - } - else - return -1; -} - -template <class charT> -std::string cpp_regex_traits<charT>::catalog_name(const std::string& name) -{ -#ifdef BOOST_HAS_THREADS - static_mutex::scoped_lock lk(get_mutex_inst()); -#endif - std::string result(get_catalog_name_inst()); - get_catalog_name_inst() = name; - return result; -} - -template <class charT> -std::string& cpp_regex_traits<charT>::get_catalog_name_inst() -{ - static std::string s_name; - return s_name; -} - -template <class charT> -std::string cpp_regex_traits<charT>::get_catalog_name() -{ -#ifdef BOOST_HAS_THREADS - static_mutex::scoped_lock lk(get_mutex_inst()); -#endif - std::string result(get_catalog_name_inst()); - return result; -} - -#ifdef BOOST_HAS_THREADS -template <class charT> -static_mutex& cpp_regex_traits<charT>::get_mutex_inst() -{ - static static_mutex s_mutex = BOOST_STATIC_MUTEX_INIT; - return s_mutex; -} -#endif - -namespace BOOST_REGEX_DETAIL_NS { - - inline void cpp_regex_traits_char_layer<char>::init() - { - // we need to start by initialising our syntax map so we know which - // character is used for which purpose: - std::memset(m_char_map, 0, sizeof(m_char_map)); -#ifndef BOOST_NO_STD_MESSAGES -#ifndef __IBMCPP__ - std::messages<char>::catalog cat = static_cast<std::messages<char>::catalog>(-1); -#else - std::messages<char>::catalog cat = reinterpret_cast<std::messages<char>::catalog>(-1); -#endif - std::string cat_name(cpp_regex_traits<char>::get_catalog_name()); - if ((!cat_name.empty()) && (m_pmessages != 0)) - { - cat = this->m_pmessages->open( - cat_name, - this->m_locale); - if ((int)cat < 0) - { - std::string m("Unable to open message catalog: "); - std::runtime_error err(m + cat_name); - boost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(err); - } - } - // - // if we have a valid catalog then load our messages: - // - if ((int)cat >= 0) - { -#ifndef BOOST_NO_EXCEPTIONS - try { -#endif - for (regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i) - { - string_type mss = this->m_pmessages->get(cat, 0, i, get_default_syntax(i)); - for (string_type::size_type j = 0; j < mss.size(); ++j) - { - m_char_map[static_cast<unsigned char>(mss[j])] = i; - } - } - this->m_pmessages->close(cat); -#ifndef BOOST_NO_EXCEPTIONS - } - catch (...) - { - this->m_pmessages->close(cat); - throw; - } -#endif - } - else - { -#endif - for (regex_constants::syntax_type j = 1; j < regex_constants::syntax_max; ++j) - { - const char* ptr = get_default_syntax(j); - while (ptr && *ptr) - { - m_char_map[static_cast<unsigned char>(*ptr)] = j; - ++ptr; - } - } -#ifndef BOOST_NO_STD_MESSAGES - } -#endif - // - // finish off by calculating our escape types: - // - unsigned char i = 'A'; - do - { - if (m_char_map[i] == 0) - { - if (this->m_pctype->is(std::ctype_base::lower, i)) - m_char_map[i] = regex_constants::escape_type_class; - else if (this->m_pctype->is(std::ctype_base::upper, i)) - m_char_map[i] = regex_constants::escape_type_not_class; - } - } while (0xFF != i++); - } - -} // namespace detail - - -} // boost - -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#endif - -#endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/cregex.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/cregex.hpp deleted file mode 100644 index dec49c9b9f..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/cregex.hpp +++ /dev/null @@ -1,213 +0,0 @@ -/* - * - * Copyright (c) 1998-2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE cregex.cpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares POSIX API functions - * + boost::RegEx high level wrapper. - */ - -#ifndef BOOST_RE_CREGEX_HPP_INCLUDED -#define BOOST_RE_CREGEX_HPP_INCLUDED - -#ifndef BOOST_REGEX_CONFIG_HPP -#include <boost/regex/config.hpp> -#endif -#include <boost/regex/v4/match_flags.hpp> -#include <boost/regex/v4/error_type.hpp> - -#ifdef __cplusplus -#include <cstddef> -#else -#include <stddef.h> -#endif - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -/* include these defs only for POSIX compatablity */ -#ifdef __cplusplus -namespace boost{ -extern "C" { -#endif - -#if defined(__cplusplus) && !defined(BOOST_NO_STDC_NAMESPACE) -typedef std::ptrdiff_t regoff_t; -typedef std::size_t regsize_t; -#else -typedef ptrdiff_t regoff_t; -typedef size_t regsize_t; -#endif - -typedef struct -{ - unsigned int re_magic; -#ifdef __cplusplus - std::size_t re_nsub; /* number of parenthesized subexpressions */ -#else - size_t re_nsub; -#endif - const char* re_endp; /* end pointer for REG_PEND */ - void* guts; /* none of your business :-) */ - match_flag_type eflags; /* none of your business :-) */ -} regex_tA; - -#ifndef BOOST_NO_WREGEX -typedef struct -{ - unsigned int re_magic; -#ifdef __cplusplus - std::size_t re_nsub; /* number of parenthesized subexpressions */ -#else - size_t re_nsub; -#endif - const wchar_t* re_endp; /* end pointer for REG_PEND */ - void* guts; /* none of your business :-) */ - match_flag_type eflags; /* none of your business :-) */ -} regex_tW; -#endif - -typedef struct -{ - regoff_t rm_so; /* start of match */ - regoff_t rm_eo; /* end of match */ -} regmatch_t; - -/* regcomp() flags */ -typedef enum{ - REG_BASIC = 0000, - REG_EXTENDED = 0001, - REG_ICASE = 0002, - REG_NOSUB = 0004, - REG_NEWLINE = 0010, - REG_NOSPEC = 0020, - REG_PEND = 0040, - REG_DUMP = 0200, - REG_NOCOLLATE = 0400, - REG_ESCAPE_IN_LISTS = 01000, - REG_NEWLINE_ALT = 02000, - REG_PERLEX = 04000, - - REG_PERL = REG_EXTENDED | REG_NOCOLLATE | REG_ESCAPE_IN_LISTS | REG_PERLEX, - REG_AWK = REG_EXTENDED | REG_ESCAPE_IN_LISTS, - REG_GREP = REG_BASIC | REG_NEWLINE_ALT, - REG_EGREP = REG_EXTENDED | REG_NEWLINE_ALT, - - REG_ASSERT = 15, - REG_INVARG = 16, - REG_ATOI = 255, /* convert name to number (!) */ - REG_ITOA = 0400 /* convert number to name (!) */ -} reg_comp_flags; - -/* regexec() flags */ -typedef enum{ - REG_NOTBOL = 00001, - REG_NOTEOL = 00002, - REG_STARTEND = 00004 -} reg_exec_flags; - -/* - * POSIX error codes: - */ -typedef unsigned reg_error_t; -typedef reg_error_t reg_errcode_t; /* backwards compatibility */ - -static const reg_error_t REG_NOERROR = 0; /* Success. */ -static const reg_error_t REG_NOMATCH = 1; /* Didn't find a match (for regexec). */ - - /* POSIX regcomp return error codes. (In the order listed in the - standard.) */ -static const reg_error_t REG_BADPAT = 2; /* Invalid pattern. */ -static const reg_error_t REG_ECOLLATE = 3; /* Undefined collating element. */ -static const reg_error_t REG_ECTYPE = 4; /* Invalid character class name. */ -static const reg_error_t REG_EESCAPE = 5; /* Trailing backslash. */ -static const reg_error_t REG_ESUBREG = 6; /* Invalid back reference. */ -static const reg_error_t REG_EBRACK = 7; /* Unmatched left bracket. */ -static const reg_error_t REG_EPAREN = 8; /* Parenthesis imbalance. */ -static const reg_error_t REG_EBRACE = 9; /* Unmatched \{. */ -static const reg_error_t REG_BADBR = 10; /* Invalid contents of \{\}. */ -static const reg_error_t REG_ERANGE = 11; /* Invalid range end. */ -static const reg_error_t REG_ESPACE = 12; /* Ran out of memory. */ -static const reg_error_t REG_BADRPT = 13; /* No preceding re for repetition op. */ -static const reg_error_t REG_EEND = 14; /* unexpected end of expression */ -static const reg_error_t REG_ESIZE = 15; /* expression too big */ -static const reg_error_t REG_ERPAREN = 8; /* = REG_EPAREN : unmatched right parenthesis */ -static const reg_error_t REG_EMPTY = 17; /* empty expression */ -static const reg_error_t REG_E_MEMORY = 15; /* = REG_ESIZE : out of memory */ -static const reg_error_t REG_ECOMPLEXITY = 18; /* complexity too high */ -static const reg_error_t REG_ESTACK = 19; /* out of stack space */ -static const reg_error_t REG_E_PERL = 20; /* Perl (?...) error */ -static const reg_error_t REG_E_UNKNOWN = 21; /* unknown error */ -static const reg_error_t REG_ENOSYS = 21; /* = REG_E_UNKNOWN : Reserved. */ - -BOOST_REGEX_DECL int BOOST_REGEX_CCALL regcompA(regex_tA*, const char*, int); -BOOST_REGEX_DECL regsize_t BOOST_REGEX_CCALL regerrorA(int, const regex_tA*, char*, regsize_t); -BOOST_REGEX_DECL int BOOST_REGEX_CCALL regexecA(const regex_tA*, const char*, regsize_t, regmatch_t*, int); -BOOST_REGEX_DECL void BOOST_REGEX_CCALL regfreeA(regex_tA*); - -#ifndef BOOST_NO_WREGEX -BOOST_REGEX_DECL int BOOST_REGEX_CCALL regcompW(regex_tW*, const wchar_t*, int); -BOOST_REGEX_DECL regsize_t BOOST_REGEX_CCALL regerrorW(int, const regex_tW*, wchar_t*, regsize_t); -BOOST_REGEX_DECL int BOOST_REGEX_CCALL regexecW(const regex_tW*, const wchar_t*, regsize_t, regmatch_t*, int); -BOOST_REGEX_DECL void BOOST_REGEX_CCALL regfreeW(regex_tW*); -#endif - -#ifdef UNICODE -#define regcomp regcompW -#define regerror regerrorW -#define regexec regexecW -#define regfree regfreeW -#define regex_t regex_tW -#else -#define regcomp regcompA -#define regerror regerrorA -#define regexec regexecA -#define regfree regfreeA -#define regex_t regex_tA -#endif - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#ifdef __cplusplus -} /* extern "C" */ -} /* namespace */ -#endif - -#endif /* include guard */ - - - - - - - - - - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/error_type.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/error_type.hpp deleted file mode 100644 index afcc71e3d8..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/error_type.hpp +++ /dev/null @@ -1,59 +0,0 @@ -/* - * - * Copyright (c) 2003-2005 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE error_type.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares regular expression error type enumerator. - */ - -#ifndef BOOST_REGEX_ERROR_TYPE_HPP -#define BOOST_REGEX_ERROR_TYPE_HPP - -#ifdef __cplusplus -namespace boost{ -#endif - -#ifdef __cplusplus -namespace regex_constants{ - -enum error_type{ - - error_ok = 0, /* not used */ - error_no_match = 1, /* not used */ - error_bad_pattern = 2, - error_collate = 3, - error_ctype = 4, - error_escape = 5, - error_backref = 6, - error_brack = 7, - error_paren = 8, - error_brace = 9, - error_badbrace = 10, - error_range = 11, - error_space = 12, - error_badrepeat = 13, - error_end = 14, /* not used */ - error_size = 15, - error_right_paren = 16, /* not used */ - error_empty = 17, - error_complexity = 18, - error_stack = 19, - error_perl_extension = 20, - error_unknown = 21 -}; - -} -} -#endif /* __cplusplus */ - -#endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/icu.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/icu.hpp deleted file mode 100644 index 7e70f57e5a..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/icu.hpp +++ /dev/null @@ -1,1516 +0,0 @@ -/* - * - * Copyright (c) 2004 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE icu.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Unicode regular expressions on top of the ICU Library. - */ - -#ifndef BOOST_REGEX_ICU_V4_HPP -#define BOOST_REGEX_ICU_V4_HPP - -#include <boost/config.hpp> -#include <unicode/utypes.h> -#include <unicode/uchar.h> -#include <unicode/coll.h> -#include <boost/regex.hpp> -#include <boost/regex/v4/unicode_iterator.hpp> -#include <boost/mpl/int_fwd.hpp> -#include <boost/static_assert.hpp> -#include <bitset> - -#ifdef BOOST_MSVC -#pragma warning (push) -#pragma warning (disable: 4251) -#endif - -namespace boost { - - namespace BOOST_REGEX_DETAIL_NS { - - // - // Implementation details: - // - class icu_regex_traits_implementation - { - typedef UChar32 char_type; - typedef std::size_t size_type; - typedef std::vector<char_type> string_type; - typedef U_NAMESPACE_QUALIFIER Locale locale_type; - typedef boost::uint_least32_t char_class_type; - public: - icu_regex_traits_implementation(const U_NAMESPACE_QUALIFIER Locale& l) - : m_locale(l) - { - UErrorCode success = U_ZERO_ERROR; - m_collator.reset(U_NAMESPACE_QUALIFIER Collator::createInstance(l, success)); - if (U_SUCCESS(success) == 0) - init_error(); - m_collator->setStrength(U_NAMESPACE_QUALIFIER Collator::IDENTICAL); - success = U_ZERO_ERROR; - m_primary_collator.reset(U_NAMESPACE_QUALIFIER Collator::createInstance(l, success)); - if (U_SUCCESS(success) == 0) - init_error(); - m_primary_collator->setStrength(U_NAMESPACE_QUALIFIER Collator::PRIMARY); - } - U_NAMESPACE_QUALIFIER Locale getloc()const - { - return m_locale; - } - string_type do_transform(const char_type* p1, const char_type* p2, const U_NAMESPACE_QUALIFIER Collator* pcoll) const - { - // TODO make thread safe!!!! : - typedef u32_to_u16_iterator<const char_type*, ::UChar> itt; - itt i(p1), j(p2); -#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS - std::vector< ::UChar> t(i, j); -#else - std::vector< ::UChar> t; - while (i != j) - t.push_back(*i++); -#endif - ::uint8_t result[100]; - ::int32_t len; - if (!t.empty()) - len = pcoll->getSortKey(&*t.begin(), static_cast< ::int32_t>(t.size()), result, sizeof(result)); - else - len = pcoll->getSortKey(static_cast<UChar const*>(0), static_cast< ::int32_t>(0), result, sizeof(result)); - if (std::size_t(len) > sizeof(result)) - { - scoped_array< ::uint8_t> presult(new ::uint8_t[len + 1]); - if (!t.empty()) - len = pcoll->getSortKey(&*t.begin(), static_cast< ::int32_t>(t.size()), presult.get(), len + 1); - else - len = pcoll->getSortKey(static_cast<UChar const*>(0), static_cast< ::int32_t>(0), presult.get(), len + 1); - if ((0 == presult[len - 1]) && (len > 1)) - --len; -#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS - return string_type(presult.get(), presult.get() + len); -#else - string_type sresult; - ::uint8_t const* ia = presult.get(); - ::uint8_t const* ib = presult.get() + len; - while (ia != ib) - sresult.push_back(*ia++); - return sresult; -#endif - } - if ((0 == result[len - 1]) && (len > 1)) - --len; -#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS - return string_type(result, result + len); -#else - string_type sresult; - ::uint8_t const* ia = result; - ::uint8_t const* ib = result + len; - while (ia != ib) - sresult.push_back(*ia++); - return sresult; -#endif - } - string_type transform(const char_type* p1, const char_type* p2) const - { - return do_transform(p1, p2, m_collator.get()); - } - string_type transform_primary(const char_type* p1, const char_type* p2) const - { - return do_transform(p1, p2, m_primary_collator.get()); - } - private: - void init_error() - { - std::runtime_error e("Could not initialize ICU resources"); - boost::throw_exception(e); - } - U_NAMESPACE_QUALIFIER Locale m_locale; // The ICU locale that we're using - boost::scoped_ptr< U_NAMESPACE_QUALIFIER Collator> m_collator; // The full collation object - boost::scoped_ptr< U_NAMESPACE_QUALIFIER Collator> m_primary_collator; // The primary collation object - }; - - inline boost::shared_ptr<icu_regex_traits_implementation> get_icu_regex_traits_implementation(const U_NAMESPACE_QUALIFIER Locale& loc) - { - return boost::shared_ptr<icu_regex_traits_implementation>(new icu_regex_traits_implementation(loc)); - } - - } - - class icu_regex_traits - { - public: - typedef UChar32 char_type; - typedef std::size_t size_type; - typedef std::vector<char_type> string_type; - typedef U_NAMESPACE_QUALIFIER Locale locale_type; -#ifdef BOOST_NO_INT64_T - typedef std::bitset<64> char_class_type; -#else - typedef boost::uint64_t char_class_type; -#endif - - struct boost_extensions_tag {}; - - icu_regex_traits() - : m_pimpl(BOOST_REGEX_DETAIL_NS::get_icu_regex_traits_implementation(U_NAMESPACE_QUALIFIER Locale())) - { - } - static size_type length(const char_type* p) - { - size_type result = 0; - while (*p) - { - ++p; - ++result; - } - return result; - } - ::boost::regex_constants::syntax_type syntax_type(char_type c)const - { - return ((c < 0x7f) && (c > 0)) ? BOOST_REGEX_DETAIL_NS::get_default_syntax_type(static_cast<char>(c)) : regex_constants::syntax_char; - } - ::boost::regex_constants::escape_syntax_type escape_syntax_type(char_type c) const - { - return ((c < 0x7f) && (c > 0)) ? BOOST_REGEX_DETAIL_NS::get_default_escape_syntax_type(static_cast<char>(c)) : regex_constants::syntax_char; - } - char_type translate(char_type c) const - { - return c; - } - char_type translate_nocase(char_type c) const - { - return ::u_foldCase(c, U_FOLD_CASE_DEFAULT); - } - char_type translate(char_type c, bool icase) const - { - return icase ? translate_nocase(c) : translate(c); - } - char_type tolower(char_type c) const - { - return ::u_tolower(c); - } - char_type toupper(char_type c) const - { - return ::u_toupper(c); - } - string_type transform(const char_type* p1, const char_type* p2) const - { - return m_pimpl->transform(p1, p2); - } - string_type transform_primary(const char_type* p1, const char_type* p2) const - { - return m_pimpl->transform_primary(p1, p2); - } - char_class_type lookup_classname(const char_type* p1, const char_type* p2) const - { - static const char_class_type mask_blank = char_class_type(1) << offset_blank; - static const char_class_type mask_space = char_class_type(1) << offset_space; - static const char_class_type mask_xdigit = char_class_type(1) << offset_xdigit; - static const char_class_type mask_underscore = char_class_type(1) << offset_underscore; - static const char_class_type mask_unicode = char_class_type(1) << offset_unicode; - static const char_class_type mask_any = char_class_type(1) << offset_any; - static const char_class_type mask_ascii = char_class_type(1) << offset_ascii; - static const char_class_type mask_horizontal = char_class_type(1) << offset_horizontal; - static const char_class_type mask_vertical = char_class_type(1) << offset_vertical; - - static const char_class_type masks[] = - { - 0, - U_GC_L_MASK | U_GC_ND_MASK, - U_GC_L_MASK, - mask_blank, - U_GC_CC_MASK | U_GC_CF_MASK | U_GC_ZL_MASK | U_GC_ZP_MASK, - U_GC_ND_MASK, - U_GC_ND_MASK, - (0x3FFFFFFFu) & ~(U_GC_CC_MASK | U_GC_CF_MASK | U_GC_CS_MASK | U_GC_CN_MASK | U_GC_Z_MASK), - mask_horizontal, - U_GC_LL_MASK, - U_GC_LL_MASK, - ~(U_GC_C_MASK), - U_GC_P_MASK, - char_class_type(U_GC_Z_MASK) | mask_space, - char_class_type(U_GC_Z_MASK) | mask_space, - U_GC_LU_MASK, - mask_unicode, - U_GC_LU_MASK, - mask_vertical, - char_class_type(U_GC_L_MASK | U_GC_ND_MASK | U_GC_MN_MASK) | mask_underscore, - char_class_type(U_GC_L_MASK | U_GC_ND_MASK | U_GC_MN_MASK) | mask_underscore, - char_class_type(U_GC_ND_MASK) | mask_xdigit, - }; - - int idx = ::boost::BOOST_REGEX_DETAIL_NS::get_default_class_id(p1, p2); - if (idx >= 0) - return masks[idx + 1]; - char_class_type result = lookup_icu_mask(p1, p2); - if (result != 0) - return result; - - if (idx < 0) - { - string_type s(p1, p2); - string_type::size_type i = 0; - while (i < s.size()) - { - s[i] = static_cast<char>((::u_tolower)(s[i])); - if (::u_isspace(s[i]) || (s[i] == '-') || (s[i] == '_')) - s.erase(s.begin() + i, s.begin() + i + 1); - else - { - s[i] = static_cast<char>((::u_tolower)(s[i])); - ++i; - } - } - if (!s.empty()) - idx = ::boost::BOOST_REGEX_DETAIL_NS::get_default_class_id(&*s.begin(), &*s.begin() + s.size()); - if (idx >= 0) - return masks[idx + 1]; - if (!s.empty()) - result = lookup_icu_mask(&*s.begin(), &*s.begin() + s.size()); - if (result != 0) - return result; - } - BOOST_ASSERT(std::size_t(idx + 1) < sizeof(masks) / sizeof(masks[0])); - return masks[idx + 1]; - } - string_type lookup_collatename(const char_type* p1, const char_type* p2) const - { - string_type result; -#ifdef BOOST_NO_CXX98_BINDERS - if (std::find_if(p1, p2, std::bind(std::greater< ::UChar32>(), std::placeholders::_1, 0x7f)) == p2) -#else - if (std::find_if(p1, p2, std::bind2nd(std::greater< ::UChar32>(), 0x7f)) == p2) -#endif - { -#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS - std::string s(p1, p2); -#else - std::string s; - const char_type* p3 = p1; - while (p3 != p2) - s.append(1, *p3++); -#endif - // Try Unicode name: - UErrorCode err = U_ZERO_ERROR; - UChar32 c = ::u_charFromName(U_UNICODE_CHAR_NAME, s.c_str(), &err); - if (U_SUCCESS(err)) - { - result.push_back(c); - return result; - } - // Try Unicode-extended name: - err = U_ZERO_ERROR; - c = ::u_charFromName(U_EXTENDED_CHAR_NAME, s.c_str(), &err); - if (U_SUCCESS(err)) - { - result.push_back(c); - return result; - } - // try POSIX name: - s = ::boost::BOOST_REGEX_DETAIL_NS::lookup_default_collate_name(s); -#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS - result.assign(s.begin(), s.end()); -#else - result.clear(); - std::string::const_iterator si, sj; - si = s.begin(); - sj = s.end(); - while (si != sj) - result.push_back(*si++); -#endif - } - if (result.empty() && (p2 - p1 == 1)) - result.push_back(*p1); - return result; - } - bool isctype(char_type c, char_class_type f) const - { - static const char_class_type mask_blank = char_class_type(1) << offset_blank; - static const char_class_type mask_space = char_class_type(1) << offset_space; - static const char_class_type mask_xdigit = char_class_type(1) << offset_xdigit; - static const char_class_type mask_underscore = char_class_type(1) << offset_underscore; - static const char_class_type mask_unicode = char_class_type(1) << offset_unicode; - static const char_class_type mask_any = char_class_type(1) << offset_any; - static const char_class_type mask_ascii = char_class_type(1) << offset_ascii; - static const char_class_type mask_horizontal = char_class_type(1) << offset_horizontal; - static const char_class_type mask_vertical = char_class_type(1) << offset_vertical; - - // check for standard catagories first: - char_class_type m = char_class_type(static_cast<char_class_type>(1) << u_charType(c)); - if ((m & f) != 0) - return true; - // now check for special cases: - if (((f & mask_blank) != 0) && u_isblank(c)) - return true; - if (((f & mask_space) != 0) && u_isspace(c)) - return true; - if (((f & mask_xdigit) != 0) && (u_digit(c, 16) >= 0)) - return true; - if (((f & mask_unicode) != 0) && (c >= 0x100)) - return true; - if (((f & mask_underscore) != 0) && (c == '_')) - return true; - if (((f & mask_any) != 0) && (c <= 0x10FFFF)) - return true; - if (((f & mask_ascii) != 0) && (c <= 0x7F)) - return true; - if (((f & mask_vertical) != 0) && (::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) || (c == static_cast<char_type>('\v')) || (m == U_GC_ZL_MASK) || (m == U_GC_ZP_MASK))) - return true; - if (((f & mask_horizontal) != 0) && !::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) && u_isspace(c) && (c != static_cast<char_type>('\v'))) - return true; - return false; - } - boost::intmax_t toi(const char_type*& p1, const char_type* p2, int radix)const - { - return BOOST_REGEX_DETAIL_NS::global_toi(p1, p2, radix, *this); - } - int value(char_type c, int radix)const - { - return u_digit(c, static_cast< ::int8_t>(radix)); - } - locale_type imbue(locale_type l) - { - locale_type result(m_pimpl->getloc()); - m_pimpl = BOOST_REGEX_DETAIL_NS::get_icu_regex_traits_implementation(l); - return result; - } - locale_type getloc()const - { - return locale_type(); - } - std::string error_string(::boost::regex_constants::error_type n) const - { - return BOOST_REGEX_DETAIL_NS::get_default_error_string(n); - } - private: - icu_regex_traits(const icu_regex_traits&); - icu_regex_traits& operator=(const icu_regex_traits&); - - // - // define the bitmasks offsets we need for additional character properties: - // - enum { - offset_blank = U_CHAR_CATEGORY_COUNT, - offset_space = U_CHAR_CATEGORY_COUNT + 1, - offset_xdigit = U_CHAR_CATEGORY_COUNT + 2, - offset_underscore = U_CHAR_CATEGORY_COUNT + 3, - offset_unicode = U_CHAR_CATEGORY_COUNT + 4, - offset_any = U_CHAR_CATEGORY_COUNT + 5, - offset_ascii = U_CHAR_CATEGORY_COUNT + 6, - offset_horizontal = U_CHAR_CATEGORY_COUNT + 7, - offset_vertical = U_CHAR_CATEGORY_COUNT + 8 - }; - - static char_class_type lookup_icu_mask(const ::UChar32* p1, const ::UChar32* p2) - { - static const char_class_type mask_blank = char_class_type(1) << offset_blank; - static const char_class_type mask_space = char_class_type(1) << offset_space; - static const char_class_type mask_xdigit = char_class_type(1) << offset_xdigit; - static const char_class_type mask_underscore = char_class_type(1) << offset_underscore; - static const char_class_type mask_unicode = char_class_type(1) << offset_unicode; - static const char_class_type mask_any = char_class_type(1) << offset_any; - static const char_class_type mask_ascii = char_class_type(1) << offset_ascii; - static const char_class_type mask_horizontal = char_class_type(1) << offset_horizontal; - static const char_class_type mask_vertical = char_class_type(1) << offset_vertical; - - static const ::UChar32 prop_name_table[] = { - /* any */ 'a', 'n', 'y', - /* ascii */ 'a', 's', 'c', 'i', 'i', - /* assigned */ 'a', 's', 's', 'i', 'g', 'n', 'e', 'd', - /* c* */ 'c', '*', - /* cc */ 'c', 'c', - /* cf */ 'c', 'f', - /* closepunctuation */ 'c', 'l', 'o', 's', 'e', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', - /* cn */ 'c', 'n', - /* co */ 'c', 'o', - /* connectorpunctuation */ 'c', 'o', 'n', 'n', 'e', 'c', 't', 'o', 'r', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', - /* control */ 'c', 'o', 'n', 't', 'r', 'o', 'l', - /* cs */ 'c', 's', - /* currencysymbol */ 'c', 'u', 'r', 'r', 'e', 'n', 'c', 'y', 's', 'y', 'm', 'b', 'o', 'l', - /* dashpunctuation */ 'd', 'a', 's', 'h', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', - /* decimaldigitnumber */ 'd', 'e', 'c', 'i', 'm', 'a', 'l', 'd', 'i', 'g', 'i', 't', 'n', 'u', 'm', 'b', 'e', 'r', - /* enclosingmark */ 'e', 'n', 'c', 'l', 'o', 's', 'i', 'n', 'g', 'm', 'a', 'r', 'k', - /* finalpunctuation */ 'f', 'i', 'n', 'a', 'l', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', - /* format */ 'f', 'o', 'r', 'm', 'a', 't', - /* initialpunctuation */ 'i', 'n', 'i', 't', 'i', 'a', 'l', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', - /* l* */ 'l', '*', - /* letter */ 'l', 'e', 't', 't', 'e', 'r', - /* letternumber */ 'l', 'e', 't', 't', 'e', 'r', 'n', 'u', 'm', 'b', 'e', 'r', - /* lineseparator */ 'l', 'i', 'n', 'e', 's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r', - /* ll */ 'l', 'l', - /* lm */ 'l', 'm', - /* lo */ 'l', 'o', - /* lowercaseletter */ 'l', 'o', 'w', 'e', 'r', 'c', 'a', 's', 'e', 'l', 'e', 't', 't', 'e', 'r', - /* lt */ 'l', 't', - /* lu */ 'l', 'u', - /* m* */ 'm', '*', - /* mark */ 'm', 'a', 'r', 'k', - /* mathsymbol */ 'm', 'a', 't', 'h', 's', 'y', 'm', 'b', 'o', 'l', - /* mc */ 'm', 'c', - /* me */ 'm', 'e', - /* mn */ 'm', 'n', - /* modifierletter */ 'm', 'o', 'd', 'i', 'f', 'i', 'e', 'r', 'l', 'e', 't', 't', 'e', 'r', - /* modifiersymbol */ 'm', 'o', 'd', 'i', 'f', 'i', 'e', 'r', 's', 'y', 'm', 'b', 'o', 'l', - /* n* */ 'n', '*', - /* nd */ 'n', 'd', - /* nl */ 'n', 'l', - /* no */ 'n', 'o', - /* nonspacingmark */ 'n', 'o', 'n', 's', 'p', 'a', 'c', 'i', 'n', 'g', 'm', 'a', 'r', 'k', - /* notassigned */ 'n', 'o', 't', 'a', 's', 's', 'i', 'g', 'n', 'e', 'd', - /* number */ 'n', 'u', 'm', 'b', 'e', 'r', - /* openpunctuation */ 'o', 'p', 'e', 'n', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', - /* other */ 'o', 't', 'h', 'e', 'r', - /* otherletter */ 'o', 't', 'h', 'e', 'r', 'l', 'e', 't', 't', 'e', 'r', - /* othernumber */ 'o', 't', 'h', 'e', 'r', 'n', 'u', 'm', 'b', 'e', 'r', - /* otherpunctuation */ 'o', 't', 'h', 'e', 'r', 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', - /* othersymbol */ 'o', 't', 'h', 'e', 'r', 's', 'y', 'm', 'b', 'o', 'l', - /* p* */ 'p', '*', - /* paragraphseparator */ 'p', 'a', 'r', 'a', 'g', 'r', 'a', 'p', 'h', 's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r', - /* pc */ 'p', 'c', - /* pd */ 'p', 'd', - /* pe */ 'p', 'e', - /* pf */ 'p', 'f', - /* pi */ 'p', 'i', - /* po */ 'p', 'o', - /* privateuse */ 'p', 'r', 'i', 'v', 'a', 't', 'e', 'u', 's', 'e', - /* ps */ 'p', 's', - /* punctuation */ 'p', 'u', 'n', 'c', 't', 'u', 'a', 't', 'i', 'o', 'n', - /* s* */ 's', '*', - /* sc */ 's', 'c', - /* separator */ 's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r', - /* sk */ 's', 'k', - /* sm */ 's', 'm', - /* so */ 's', 'o', - /* spaceseparator */ 's', 'p', 'a', 'c', 'e', 's', 'e', 'p', 'a', 'r', 'a', 't', 'o', 'r', - /* spacingcombiningmark */ 's', 'p', 'a', 'c', 'i', 'n', 'g', 'c', 'o', 'm', 'b', 'i', 'n', 'i', 'n', 'g', 'm', 'a', 'r', 'k', - /* surrogate */ 's', 'u', 'r', 'r', 'o', 'g', 'a', 't', 'e', - /* symbol */ 's', 'y', 'm', 'b', 'o', 'l', - /* titlecase */ 't', 'i', 't', 'l', 'e', 'c', 'a', 's', 'e', - /* titlecaseletter */ 't', 'i', 't', 'l', 'e', 'c', 'a', 's', 'e', 'l', 'e', 't', 't', 'e', 'r', - /* uppercaseletter */ 'u', 'p', 'p', 'e', 'r', 'c', 'a', 's', 'e', 'l', 'e', 't', 't', 'e', 'r', - /* z* */ 'z', '*', - /* zl */ 'z', 'l', - /* zp */ 'z', 'p', - /* zs */ 'z', 's', - }; - - static const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32> range_data[] = { - { prop_name_table + 0, prop_name_table + 3, }, // any - { prop_name_table + 3, prop_name_table + 8, }, // ascii - { prop_name_table + 8, prop_name_table + 16, }, // assigned - { prop_name_table + 16, prop_name_table + 18, }, // c* - { prop_name_table + 18, prop_name_table + 20, }, // cc - { prop_name_table + 20, prop_name_table + 22, }, // cf - { prop_name_table + 22, prop_name_table + 38, }, // closepunctuation - { prop_name_table + 38, prop_name_table + 40, }, // cn - { prop_name_table + 40, prop_name_table + 42, }, // co - { prop_name_table + 42, prop_name_table + 62, }, // connectorpunctuation - { prop_name_table + 62, prop_name_table + 69, }, // control - { prop_name_table + 69, prop_name_table + 71, }, // cs - { prop_name_table + 71, prop_name_table + 85, }, // currencysymbol - { prop_name_table + 85, prop_name_table + 100, }, // dashpunctuation - { prop_name_table + 100, prop_name_table + 118, }, // decimaldigitnumber - { prop_name_table + 118, prop_name_table + 131, }, // enclosingmark - { prop_name_table + 131, prop_name_table + 147, }, // finalpunctuation - { prop_name_table + 147, prop_name_table + 153, }, // format - { prop_name_table + 153, prop_name_table + 171, }, // initialpunctuation - { prop_name_table + 171, prop_name_table + 173, }, // l* - { prop_name_table + 173, prop_name_table + 179, }, // letter - { prop_name_table + 179, prop_name_table + 191, }, // letternumber - { prop_name_table + 191, prop_name_table + 204, }, // lineseparator - { prop_name_table + 204, prop_name_table + 206, }, // ll - { prop_name_table + 206, prop_name_table + 208, }, // lm - { prop_name_table + 208, prop_name_table + 210, }, // lo - { prop_name_table + 210, prop_name_table + 225, }, // lowercaseletter - { prop_name_table + 225, prop_name_table + 227, }, // lt - { prop_name_table + 227, prop_name_table + 229, }, // lu - { prop_name_table + 229, prop_name_table + 231, }, // m* - { prop_name_table + 231, prop_name_table + 235, }, // mark - { prop_name_table + 235, prop_name_table + 245, }, // mathsymbol - { prop_name_table + 245, prop_name_table + 247, }, // mc - { prop_name_table + 247, prop_name_table + 249, }, // me - { prop_name_table + 249, prop_name_table + 251, }, // mn - { prop_name_table + 251, prop_name_table + 265, }, // modifierletter - { prop_name_table + 265, prop_name_table + 279, }, // modifiersymbol - { prop_name_table + 279, prop_name_table + 281, }, // n* - { prop_name_table + 281, prop_name_table + 283, }, // nd - { prop_name_table + 283, prop_name_table + 285, }, // nl - { prop_name_table + 285, prop_name_table + 287, }, // no - { prop_name_table + 287, prop_name_table + 301, }, // nonspacingmark - { prop_name_table + 301, prop_name_table + 312, }, // notassigned - { prop_name_table + 312, prop_name_table + 318, }, // number - { prop_name_table + 318, prop_name_table + 333, }, // openpunctuation - { prop_name_table + 333, prop_name_table + 338, }, // other - { prop_name_table + 338, prop_name_table + 349, }, // otherletter - { prop_name_table + 349, prop_name_table + 360, }, // othernumber - { prop_name_table + 360, prop_name_table + 376, }, // otherpunctuation - { prop_name_table + 376, prop_name_table + 387, }, // othersymbol - { prop_name_table + 387, prop_name_table + 389, }, // p* - { prop_name_table + 389, prop_name_table + 407, }, // paragraphseparator - { prop_name_table + 407, prop_name_table + 409, }, // pc - { prop_name_table + 409, prop_name_table + 411, }, // pd - { prop_name_table + 411, prop_name_table + 413, }, // pe - { prop_name_table + 413, prop_name_table + 415, }, // pf - { prop_name_table + 415, prop_name_table + 417, }, // pi - { prop_name_table + 417, prop_name_table + 419, }, // po - { prop_name_table + 419, prop_name_table + 429, }, // privateuse - { prop_name_table + 429, prop_name_table + 431, }, // ps - { prop_name_table + 431, prop_name_table + 442, }, // punctuation - { prop_name_table + 442, prop_name_table + 444, }, // s* - { prop_name_table + 444, prop_name_table + 446, }, // sc - { prop_name_table + 446, prop_name_table + 455, }, // separator - { prop_name_table + 455, prop_name_table + 457, }, // sk - { prop_name_table + 457, prop_name_table + 459, }, // sm - { prop_name_table + 459, prop_name_table + 461, }, // so - { prop_name_table + 461, prop_name_table + 475, }, // spaceseparator - { prop_name_table + 475, prop_name_table + 495, }, // spacingcombiningmark - { prop_name_table + 495, prop_name_table + 504, }, // surrogate - { prop_name_table + 504, prop_name_table + 510, }, // symbol - { prop_name_table + 510, prop_name_table + 519, }, // titlecase - { prop_name_table + 519, prop_name_table + 534, }, // titlecaseletter - { prop_name_table + 534, prop_name_table + 549, }, // uppercaseletter - { prop_name_table + 549, prop_name_table + 551, }, // z* - { prop_name_table + 551, prop_name_table + 553, }, // zl - { prop_name_table + 553, prop_name_table + 555, }, // zp - { prop_name_table + 555, prop_name_table + 557, }, // zs - }; - - static const icu_regex_traits::char_class_type icu_class_map[] = { - mask_any, // any - mask_ascii, // ascii - (0x3FFFFFFFu) & ~(U_GC_CN_MASK), // assigned - U_GC_C_MASK, // c* - U_GC_CC_MASK, // cc - U_GC_CF_MASK, // cf - U_GC_PE_MASK, // closepunctuation - U_GC_CN_MASK, // cn - U_GC_CO_MASK, // co - U_GC_PC_MASK, // connectorpunctuation - U_GC_CC_MASK, // control - U_GC_CS_MASK, // cs - U_GC_SC_MASK, // currencysymbol - U_GC_PD_MASK, // dashpunctuation - U_GC_ND_MASK, // decimaldigitnumber - U_GC_ME_MASK, // enclosingmark - U_GC_PF_MASK, // finalpunctuation - U_GC_CF_MASK, // format - U_GC_PI_MASK, // initialpunctuation - U_GC_L_MASK, // l* - U_GC_L_MASK, // letter - U_GC_NL_MASK, // letternumber - U_GC_ZL_MASK, // lineseparator - U_GC_LL_MASK, // ll - U_GC_LM_MASK, // lm - U_GC_LO_MASK, // lo - U_GC_LL_MASK, // lowercaseletter - U_GC_LT_MASK, // lt - U_GC_LU_MASK, // lu - U_GC_M_MASK, // m* - U_GC_M_MASK, // mark - U_GC_SM_MASK, // mathsymbol - U_GC_MC_MASK, // mc - U_GC_ME_MASK, // me - U_GC_MN_MASK, // mn - U_GC_LM_MASK, // modifierletter - U_GC_SK_MASK, // modifiersymbol - U_GC_N_MASK, // n* - U_GC_ND_MASK, // nd - U_GC_NL_MASK, // nl - U_GC_NO_MASK, // no - U_GC_MN_MASK, // nonspacingmark - U_GC_CN_MASK, // notassigned - U_GC_N_MASK, // number - U_GC_PS_MASK, // openpunctuation - U_GC_C_MASK, // other - U_GC_LO_MASK, // otherletter - U_GC_NO_MASK, // othernumber - U_GC_PO_MASK, // otherpunctuation - U_GC_SO_MASK, // othersymbol - U_GC_P_MASK, // p* - U_GC_ZP_MASK, // paragraphseparator - U_GC_PC_MASK, // pc - U_GC_PD_MASK, // pd - U_GC_PE_MASK, // pe - U_GC_PF_MASK, // pf - U_GC_PI_MASK, // pi - U_GC_PO_MASK, // po - U_GC_CO_MASK, // privateuse - U_GC_PS_MASK, // ps - U_GC_P_MASK, // punctuation - U_GC_S_MASK, // s* - U_GC_SC_MASK, // sc - U_GC_Z_MASK, // separator - U_GC_SK_MASK, // sk - U_GC_SM_MASK, // sm - U_GC_SO_MASK, // so - U_GC_ZS_MASK, // spaceseparator - U_GC_MC_MASK, // spacingcombiningmark - U_GC_CS_MASK, // surrogate - U_GC_S_MASK, // symbol - U_GC_LT_MASK, // titlecase - U_GC_LT_MASK, // titlecaseletter - U_GC_LU_MASK, // uppercaseletter - U_GC_Z_MASK, // z* - U_GC_ZL_MASK, // zl - U_GC_ZP_MASK, // zp - U_GC_ZS_MASK, // zs - }; - - - const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32>* ranges_begin = range_data; - const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32>* ranges_end = range_data + (sizeof(range_data) / sizeof(range_data[0])); - - BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32> t = { p1, p2, }; - const BOOST_REGEX_DETAIL_NS::character_pointer_range< ::UChar32>* p = std::lower_bound(ranges_begin, ranges_end, t); - if ((p != ranges_end) && (t == *p)) - return icu_class_map[p - ranges_begin]; - return 0; - } - - boost::shared_ptr< ::boost::BOOST_REGEX_DETAIL_NS::icu_regex_traits_implementation> m_pimpl; - }; - -} // namespace boost - -namespace boost { - - // types: - typedef basic_regex< ::UChar32, icu_regex_traits> u32regex; - typedef match_results<const ::UChar32*> u32match; - typedef match_results<const ::UChar*> u16match; - - // - // Construction of 32-bit regex types from UTF-8 and UTF-16 primitives: - // - namespace BOOST_REGEX_DETAIL_NS { - -#if !defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(__IBMCPP__) - template <class InputIterator> - inline u32regex do_make_u32regex(InputIterator i, - InputIterator j, - boost::regex_constants::syntax_option_type opt, - const boost::mpl::int_<1>*) - { - typedef boost::u8_to_u32_iterator<InputIterator, UChar32> conv_type; - return u32regex(conv_type(i, i, j), conv_type(j, i, j), opt); - } - - template <class InputIterator> - inline u32regex do_make_u32regex(InputIterator i, - InputIterator j, - boost::regex_constants::syntax_option_type opt, - const boost::mpl::int_<2>*) - { - typedef boost::u16_to_u32_iterator<InputIterator, UChar32> conv_type; - return u32regex(conv_type(i, i, j), conv_type(j, i, j), opt); - } - - template <class InputIterator> - inline u32regex do_make_u32regex(InputIterator i, - InputIterator j, - boost::regex_constants::syntax_option_type opt, - const boost::mpl::int_<4>*) - { - return u32regex(i, j, opt); - } -#else - template <class InputIterator> - inline u32regex do_make_u32regex(InputIterator i, - InputIterator j, - boost::regex_constants::syntax_option_type opt, - const boost::mpl::int_<1>*) - { - typedef boost::u8_to_u32_iterator<InputIterator, UChar32> conv_type; - typedef std::vector<UChar32> vector_type; - vector_type v; - conv_type a(i, i, j), b(j, i, j); - while (a != b) - { - v.push_back(*a); - ++a; - } - if (v.size()) - return u32regex(&*v.begin(), v.size(), opt); - return u32regex(static_cast<UChar32 const*>(0), static_cast<u32regex::size_type>(0), opt); - } - - template <class InputIterator> - inline u32regex do_make_u32regex(InputIterator i, - InputIterator j, - boost::regex_constants::syntax_option_type opt, - const boost::mpl::int_<2>*) - { - typedef boost::u16_to_u32_iterator<InputIterator, UChar32> conv_type; - typedef std::vector<UChar32> vector_type; - vector_type v; - conv_type a(i, i, j), b(j, i, j); - while (a != b) - { - v.push_back(*a); - ++a; - } - if (v.size()) - return u32regex(&*v.begin(), v.size(), opt); - return u32regex(static_cast<UChar32 const*>(0), static_cast<u32regex::size_type>(0), opt); - } - - template <class InputIterator> - inline u32regex do_make_u32regex(InputIterator i, - InputIterator j, - boost::regex_constants::syntax_option_type opt, - const boost::mpl::int_<4>*) - { - typedef std::vector<UChar32> vector_type; - vector_type v; - while (i != j) - { - v.push_back((UChar32)(*i)); - ++i; - } - if (v.size()) - return u32regex(&*v.begin(), v.size(), opt); - return u32regex(static_cast<UChar32 const*>(0), static_cast<u32regex::size_type>(0), opt); - } -#endif - } - - // BOOST_REGEX_UCHAR_IS_WCHAR_T - // - // Source inspection of unicode/umachine.h in ICU version 59 indicates that: - // - // On version 59, UChar is always char16_t in C++ mode (and uint16_t in C mode) - // - // On earlier versions, the logic is - // - // #if U_SIZEOF_WCHAR_T==2 - // typedef wchar_t OldUChar; - // #elif defined(__CHAR16_TYPE__) - // typedef __CHAR16_TYPE__ OldUChar; - // #else - // typedef uint16_t OldUChar; - // #endif - // - // That is, UChar is wchar_t only on versions below 59, when U_SIZEOF_WCHAR_T==2 - // - // Hence, - -#define BOOST_REGEX_UCHAR_IS_WCHAR_T (U_ICU_VERSION_MAJOR_NUM < 59 && U_SIZEOF_WCHAR_T == 2) - -#if BOOST_REGEX_UCHAR_IS_WCHAR_T - BOOST_STATIC_ASSERT((boost::is_same<UChar, wchar_t>::value)); -#else - BOOST_STATIC_ASSERT(!(boost::is_same<UChar, wchar_t>::value)); -#endif - - // - // Construction from an iterator pair: - // - template <class InputIterator> - inline u32regex make_u32regex(InputIterator i, - InputIterator j, - boost::regex_constants::syntax_option_type opt) - { - return BOOST_REGEX_DETAIL_NS::do_make_u32regex(i, j, opt, static_cast<boost::mpl::int_<sizeof(*i)> const*>(0)); - } - // - // construction from UTF-8 nul-terminated strings: - // - inline u32regex make_u32regex(const char* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl) - { - return BOOST_REGEX_DETAIL_NS::do_make_u32regex(p, p + std::strlen(p), opt, static_cast<boost::mpl::int_<1> const*>(0)); - } - inline u32regex make_u32regex(const unsigned char* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl) - { - return BOOST_REGEX_DETAIL_NS::do_make_u32regex(p, p + std::strlen(reinterpret_cast<const char*>(p)), opt, static_cast<boost::mpl::int_<1> const*>(0)); - } - // - // construction from UTF-16 nul-terminated strings: - // -#ifndef BOOST_NO_WREGEX - inline u32regex make_u32regex(const wchar_t* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl) - { - return BOOST_REGEX_DETAIL_NS::do_make_u32regex(p, p + std::wcslen(p), opt, static_cast<boost::mpl::int_<sizeof(wchar_t)> const*>(0)); - } -#endif -#if !BOOST_REGEX_UCHAR_IS_WCHAR_T - inline u32regex make_u32regex(const UChar* p, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl) - { - return BOOST_REGEX_DETAIL_NS::do_make_u32regex(p, p + u_strlen(p), opt, static_cast<boost::mpl::int_<2> const*>(0)); - } -#endif - // - // construction from basic_string class-template: - // - template<class C, class T, class A> - inline u32regex make_u32regex(const std::basic_string<C, T, A>& s, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl) - { - return BOOST_REGEX_DETAIL_NS::do_make_u32regex(s.begin(), s.end(), opt, static_cast<boost::mpl::int_<sizeof(C)> const*>(0)); - } - // - // Construction from ICU string type: - // - inline u32regex make_u32regex(const U_NAMESPACE_QUALIFIER UnicodeString& s, boost::regex_constants::syntax_option_type opt = boost::regex_constants::perl) - { - return BOOST_REGEX_DETAIL_NS::do_make_u32regex(s.getBuffer(), s.getBuffer() + s.length(), opt, static_cast<boost::mpl::int_<2> const*>(0)); - } - - // - // regex_match overloads that widen the character type as appropriate: - // - namespace BOOST_REGEX_DETAIL_NS { - template<class MR1, class MR2, class NSubs> - void copy_results(MR1& out, MR2 const& in, NSubs named_subs) - { - // copy results from an adapted MR2 match_results: - out.set_size(in.size(), in.prefix().first.base(), in.suffix().second.base()); - out.set_base(in.base().base()); - out.set_named_subs(named_subs); - for (int i = 0; i < (int)in.size(); ++i) - { - if (in[i].matched || !i) - { - out.set_first(in[i].first.base(), i); - out.set_second(in[i].second.base(), i, in[i].matched); - } - } -#ifdef BOOST_REGEX_MATCH_EXTRA - // Copy full capture info as well: - for (int i = 0; i < (int)in.size(); ++i) - { - if (in[i].captures().size()) - { - out[i].get_captures().assign(in[i].captures().size(), typename MR1::value_type()); - for (int j = 0; j < (int)out[i].captures().size(); ++j) - { - out[i].get_captures()[j].first = in[i].captures()[j].first.base(); - out[i].get_captures()[j].second = in[i].captures()[j].second.base(); - out[i].get_captures()[j].matched = in[i].captures()[j].matched; - } - } - } -#endif - } - - template <class BidiIterator, class Allocator> - inline bool do_regex_match(BidiIterator first, BidiIterator last, - match_results<BidiIterator, Allocator>& m, - const u32regex& e, - match_flag_type flags, - boost::mpl::int_<4> const*) - { - return ::boost::regex_match(first, last, m, e, flags); - } - template <class BidiIterator, class Allocator> - bool do_regex_match(BidiIterator first, BidiIterator last, - match_results<BidiIterator, Allocator>& m, - const u32regex& e, - match_flag_type flags, - boost::mpl::int_<2> const*) - { - typedef u16_to_u32_iterator<BidiIterator, UChar32> conv_type; - typedef match_results<conv_type> match_type; - //typedef typename match_type::allocator_type alloc_type; - match_type what; - bool result = ::boost::regex_match(conv_type(first, first, last), conv_type(last, first, last), what, e, flags); - // copy results across to m: - if (result) copy_results(m, what, e.get_named_subs()); - return result; - } - template <class BidiIterator, class Allocator> - bool do_regex_match(BidiIterator first, BidiIterator last, - match_results<BidiIterator, Allocator>& m, - const u32regex& e, - match_flag_type flags, - boost::mpl::int_<1> const*) - { - typedef u8_to_u32_iterator<BidiIterator, UChar32> conv_type; - typedef match_results<conv_type> match_type; - //typedef typename match_type::allocator_type alloc_type; - match_type what; - bool result = ::boost::regex_match(conv_type(first, first, last), conv_type(last, first, last), what, e, flags); - // copy results across to m: - if (result) copy_results(m, what, e.get_named_subs()); - return result; - } - } // namespace BOOST_REGEX_DETAIL_NS - - template <class BidiIterator, class Allocator> - inline bool u32regex_match(BidiIterator first, BidiIterator last, - match_results<BidiIterator, Allocator>& m, - const u32regex& e, - match_flag_type flags = match_default) - { - return BOOST_REGEX_DETAIL_NS::do_regex_match(first, last, m, e, flags, static_cast<mpl::int_<sizeof(*first)> const*>(0)); - } - inline bool u32regex_match(const UChar* p, - match_results<const UChar*>& m, - const u32regex& e, - match_flag_type flags = match_default) - { - return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p + u_strlen(p), m, e, flags, static_cast<mpl::int_<2> const*>(0)); - } -#if !BOOST_REGEX_UCHAR_IS_WCHAR_T && !defined(BOOST_NO_WREGEX) - inline bool u32regex_match(const wchar_t* p, - match_results<const wchar_t*>& m, - const u32regex& e, - match_flag_type flags = match_default) - { - return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p + std::wcslen(p), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0)); - } -#endif - inline bool u32regex_match(const char* p, - match_results<const char*>& m, - const u32regex& e, - match_flag_type flags = match_default) - { - return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p + std::strlen(p), m, e, flags, static_cast<mpl::int_<1> const*>(0)); - } - inline bool u32regex_match(const unsigned char* p, - match_results<const unsigned char*>& m, - const u32regex& e, - match_flag_type flags = match_default) - { - return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p + std::strlen((const char*)p), m, e, flags, static_cast<mpl::int_<1> const*>(0)); - } - inline bool u32regex_match(const std::string& s, - match_results<std::string::const_iterator>& m, - const u32regex& e, - match_flag_type flags = match_default) - { - return BOOST_REGEX_DETAIL_NS::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<1> const*>(0)); - } -#ifndef BOOST_NO_STD_WSTRING - inline bool u32regex_match(const std::wstring& s, - match_results<std::wstring::const_iterator>& m, - const u32regex& e, - match_flag_type flags = match_default) - { - return BOOST_REGEX_DETAIL_NS::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0)); - } -#endif - inline bool u32regex_match(const U_NAMESPACE_QUALIFIER UnicodeString& s, - match_results<const UChar*>& m, - const u32regex& e, - match_flag_type flags = match_default) - { - return BOOST_REGEX_DETAIL_NS::do_regex_match(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, static_cast<mpl::int_<2> const*>(0)); - } - // - // regex_match overloads that do not return what matched: - // - template <class BidiIterator> - inline bool u32regex_match(BidiIterator first, BidiIterator last, - const u32regex& e, - match_flag_type flags = match_default) - { - match_results<BidiIterator> m; - return BOOST_REGEX_DETAIL_NS::do_regex_match(first, last, m, e, flags, static_cast<mpl::int_<sizeof(*first)> const*>(0)); - } - inline bool u32regex_match(const UChar* p, - const u32regex& e, - match_flag_type flags = match_default) - { - match_results<const UChar*> m; - return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p + u_strlen(p), m, e, flags, static_cast<mpl::int_<2> const*>(0)); - } -#if !BOOST_REGEX_UCHAR_IS_WCHAR_T && !defined(BOOST_NO_WREGEX) - inline bool u32regex_match(const wchar_t* p, - const u32regex& e, - match_flag_type flags = match_default) - { - match_results<const wchar_t*> m; - return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p + std::wcslen(p), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0)); - } -#endif - inline bool u32regex_match(const char* p, - const u32regex& e, - match_flag_type flags = match_default) - { - match_results<const char*> m; - return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p + std::strlen(p), m, e, flags, static_cast<mpl::int_<1> const*>(0)); - } - inline bool u32regex_match(const unsigned char* p, - const u32regex& e, - match_flag_type flags = match_default) - { - match_results<const unsigned char*> m; - return BOOST_REGEX_DETAIL_NS::do_regex_match(p, p + std::strlen((const char*)p), m, e, flags, static_cast<mpl::int_<1> const*>(0)); - } - inline bool u32regex_match(const std::string& s, - const u32regex& e, - match_flag_type flags = match_default) - { - match_results<std::string::const_iterator> m; - return BOOST_REGEX_DETAIL_NS::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<1> const*>(0)); - } -#ifndef BOOST_NO_STD_WSTRING - inline bool u32regex_match(const std::wstring& s, - const u32regex& e, - match_flag_type flags = match_default) - { - match_results<std::wstring::const_iterator> m; - return BOOST_REGEX_DETAIL_NS::do_regex_match(s.begin(), s.end(), m, e, flags, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0)); - } -#endif - inline bool u32regex_match(const U_NAMESPACE_QUALIFIER UnicodeString& s, - const u32regex& e, - match_flag_type flags = match_default) - { - match_results<const UChar*> m; - return BOOST_REGEX_DETAIL_NS::do_regex_match(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, static_cast<mpl::int_<2> const*>(0)); - } - - // - // regex_search overloads that widen the character type as appropriate: - // - namespace BOOST_REGEX_DETAIL_NS { - template <class BidiIterator, class Allocator> - inline bool do_regex_search(BidiIterator first, BidiIterator last, - match_results<BidiIterator, Allocator>& m, - const u32regex& e, - match_flag_type flags, - BidiIterator base, - boost::mpl::int_<4> const*) - { - return ::boost::regex_search(first, last, m, e, flags, base); - } - template <class BidiIterator, class Allocator> - bool do_regex_search(BidiIterator first, BidiIterator last, - match_results<BidiIterator, Allocator>& m, - const u32regex& e, - match_flag_type flags, - BidiIterator base, - boost::mpl::int_<2> const*) - { - typedef u16_to_u32_iterator<BidiIterator, UChar32> conv_type; - typedef match_results<conv_type> match_type; - //typedef typename match_type::allocator_type alloc_type; - match_type what; - bool result = ::boost::regex_search(conv_type(first, first, last), conv_type(last, first, last), what, e, flags, conv_type(base)); - // copy results across to m: - if (result) copy_results(m, what, e.get_named_subs()); - return result; - } - template <class BidiIterator, class Allocator> - bool do_regex_search(BidiIterator first, BidiIterator last, - match_results<BidiIterator, Allocator>& m, - const u32regex& e, - match_flag_type flags, - BidiIterator base, - boost::mpl::int_<1> const*) - { - typedef u8_to_u32_iterator<BidiIterator, UChar32> conv_type; - typedef match_results<conv_type> match_type; - //typedef typename match_type::allocator_type alloc_type; - match_type what; - bool result = ::boost::regex_search(conv_type(first, first, last), conv_type(last, first, last), what, e, flags, conv_type(base)); - // copy results across to m: - if (result) copy_results(m, what, e.get_named_subs()); - return result; - } - } - - template <class BidiIterator, class Allocator> - inline bool u32regex_search(BidiIterator first, BidiIterator last, - match_results<BidiIterator, Allocator>& m, - const u32regex& e, - match_flag_type flags = match_default) - { - return BOOST_REGEX_DETAIL_NS::do_regex_search(first, last, m, e, flags, first, static_cast<mpl::int_<sizeof(*first)> const*>(0)); - } - template <class BidiIterator, class Allocator> - inline bool u32regex_search(BidiIterator first, BidiIterator last, - match_results<BidiIterator, Allocator>& m, - const u32regex& e, - match_flag_type flags, - BidiIterator base) - { - return BOOST_REGEX_DETAIL_NS::do_regex_search(first, last, m, e, flags, base, static_cast<mpl::int_<sizeof(*first)> const*>(0)); - } - inline bool u32regex_search(const UChar* p, - match_results<const UChar*>& m, - const u32regex& e, - match_flag_type flags = match_default) - { - return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p + u_strlen(p), m, e, flags, p, static_cast<mpl::int_<2> const*>(0)); - } -#if !BOOST_REGEX_UCHAR_IS_WCHAR_T && !defined(BOOST_NO_WREGEX) - inline bool u32regex_search(const wchar_t* p, - match_results<const wchar_t*>& m, - const u32regex& e, - match_flag_type flags = match_default) - { - return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p + std::wcslen(p), m, e, flags, p, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0)); - } -#endif - inline bool u32regex_search(const char* p, - match_results<const char*>& m, - const u32regex& e, - match_flag_type flags = match_default) - { - return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p + std::strlen(p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0)); - } - inline bool u32regex_search(const unsigned char* p, - match_results<const unsigned char*>& m, - const u32regex& e, - match_flag_type flags = match_default) - { - return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p + std::strlen((const char*)p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0)); - } - inline bool u32regex_search(const std::string& s, - match_results<std::string::const_iterator>& m, - const u32regex& e, - match_flag_type flags = match_default) - { - return BOOST_REGEX_DETAIL_NS::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<1> const*>(0)); - } -#ifndef BOOST_NO_STD_WSTRING - inline bool u32regex_search(const std::wstring& s, - match_results<std::wstring::const_iterator>& m, - const u32regex& e, - match_flag_type flags = match_default) - { - return BOOST_REGEX_DETAIL_NS::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<sizeof(wchar_t)> const*>(0)); - } -#endif - inline bool u32regex_search(const U_NAMESPACE_QUALIFIER UnicodeString& s, - match_results<const UChar*>& m, - const u32regex& e, - match_flag_type flags = match_default) - { - return BOOST_REGEX_DETAIL_NS::do_regex_search(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, s.getBuffer(), static_cast<mpl::int_<2> const*>(0)); - } - template <class BidiIterator> - inline bool u32regex_search(BidiIterator first, BidiIterator last, - const u32regex& e, - match_flag_type flags = match_default) - { - match_results<BidiIterator> m; - return BOOST_REGEX_DETAIL_NS::do_regex_search(first, last, m, e, flags, first, static_cast<mpl::int_<sizeof(*first)> const*>(0)); - } - inline bool u32regex_search(const UChar* p, - const u32regex& e, - match_flag_type flags = match_default) - { - match_results<const UChar*> m; - return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p + u_strlen(p), m, e, flags, p, static_cast<mpl::int_<2> const*>(0)); - } -#if !BOOST_REGEX_UCHAR_IS_WCHAR_T && !defined(BOOST_NO_WREGEX) - inline bool u32regex_search(const wchar_t* p, - const u32regex& e, - match_flag_type flags = match_default) - { - match_results<const wchar_t*> m; - return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p + std::wcslen(p), m, e, flags, p, static_cast<mpl::int_<sizeof(wchar_t)> const*>(0)); - } -#endif - inline bool u32regex_search(const char* p, - const u32regex& e, - match_flag_type flags = match_default) - { - match_results<const char*> m; - return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p + std::strlen(p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0)); - } - inline bool u32regex_search(const unsigned char* p, - const u32regex& e, - match_flag_type flags = match_default) - { - match_results<const unsigned char*> m; - return BOOST_REGEX_DETAIL_NS::do_regex_search(p, p + std::strlen((const char*)p), m, e, flags, p, static_cast<mpl::int_<1> const*>(0)); - } - inline bool u32regex_search(const std::string& s, - const u32regex& e, - match_flag_type flags = match_default) - { - match_results<std::string::const_iterator> m; - return BOOST_REGEX_DETAIL_NS::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<1> const*>(0)); - } -#ifndef BOOST_NO_STD_WSTRING - inline bool u32regex_search(const std::wstring& s, - const u32regex& e, - match_flag_type flags = match_default) - { - match_results<std::wstring::const_iterator> m; - return BOOST_REGEX_DETAIL_NS::do_regex_search(s.begin(), s.end(), m, e, flags, s.begin(), static_cast<mpl::int_<sizeof(wchar_t)> const*>(0)); - } -#endif - inline bool u32regex_search(const U_NAMESPACE_QUALIFIER UnicodeString& s, - const u32regex& e, - match_flag_type flags = match_default) - { - match_results<const UChar*> m; - return BOOST_REGEX_DETAIL_NS::do_regex_search(s.getBuffer(), s.getBuffer() + s.length(), m, e, flags, s.getBuffer(), static_cast<mpl::int_<2> const*>(0)); - } - - // - // overloads for regex_replace with utf-8 and utf-16 data types: - // - namespace BOOST_REGEX_DETAIL_NS { - template <class I> - inline std::pair< boost::u8_to_u32_iterator<I>, boost::u8_to_u32_iterator<I> > - make_utf32_seq(I i, I j, mpl::int_<1> const*) - { - return std::pair< boost::u8_to_u32_iterator<I>, boost::u8_to_u32_iterator<I> >(boost::u8_to_u32_iterator<I>(i, i, j), boost::u8_to_u32_iterator<I>(j, i, j)); - } - template <class I> - inline std::pair< boost::u16_to_u32_iterator<I>, boost::u16_to_u32_iterator<I> > - make_utf32_seq(I i, I j, mpl::int_<2> const*) - { - return std::pair< boost::u16_to_u32_iterator<I>, boost::u16_to_u32_iterator<I> >(boost::u16_to_u32_iterator<I>(i, i, j), boost::u16_to_u32_iterator<I>(j, i, j)); - } - template <class I> - inline std::pair< I, I > - make_utf32_seq(I i, I j, mpl::int_<4> const*) - { - return std::pair< I, I >(i, j); - } - template <class charT> - inline std::pair< boost::u8_to_u32_iterator<const charT*>, boost::u8_to_u32_iterator<const charT*> > - make_utf32_seq(const charT* p, mpl::int_<1> const*) - { - std::size_t len = std::strlen((const char*)p); - return std::pair< boost::u8_to_u32_iterator<const charT*>, boost::u8_to_u32_iterator<const charT*> >(boost::u8_to_u32_iterator<const charT*>(p, p, p + len), boost::u8_to_u32_iterator<const charT*>(p + len, p, p + len)); - } - template <class charT> - inline std::pair< boost::u16_to_u32_iterator<const charT*>, boost::u16_to_u32_iterator<const charT*> > - make_utf32_seq(const charT* p, mpl::int_<2> const*) - { - std::size_t len = u_strlen((const UChar*)p); - return std::pair< boost::u16_to_u32_iterator<const charT*>, boost::u16_to_u32_iterator<const charT*> >(boost::u16_to_u32_iterator<const charT*>(p, p, p + len), boost::u16_to_u32_iterator<const charT*>(p + len, p, p + len)); - } - template <class charT> - inline std::pair< const charT*, const charT* > - make_utf32_seq(const charT* p, mpl::int_<4> const*) - { - return std::pair< const charT*, const charT* >(p, p + icu_regex_traits::length((UChar32 const*)p)); - } - template <class OutputIterator> - inline OutputIterator make_utf32_out(OutputIterator o, mpl::int_<4> const*) - { - return o; - } - template <class OutputIterator> - inline utf16_output_iterator<OutputIterator> make_utf32_out(OutputIterator o, mpl::int_<2> const*) - { - return o; - } - template <class OutputIterator> - inline utf8_output_iterator<OutputIterator> make_utf32_out(OutputIterator o, mpl::int_<1> const*) - { - return o; - } - - template <class OutputIterator, class I1, class I2> - OutputIterator do_regex_replace(OutputIterator out, - std::pair<I1, I1> const& in, - const u32regex& e, - const std::pair<I2, I2>& fmt, - match_flag_type flags - ) - { - // unfortunately we have to copy the format string in order to pass in onward: - std::vector<UChar32> f; -#ifndef BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS - f.assign(fmt.first, fmt.second); -#else - f.clear(); - I2 pos = fmt.first; - while (pos != fmt.second) - f.push_back(*pos++); -#endif - - regex_iterator<I1, UChar32, icu_regex_traits> i(in.first, in.second, e, flags); - regex_iterator<I1, UChar32, icu_regex_traits> j; - if (i == j) - { - if (!(flags & regex_constants::format_no_copy)) - out = BOOST_REGEX_DETAIL_NS::copy(in.first, in.second, out); - } - else - { - I1 last_m = in.first; - while (i != j) - { - if (!(flags & regex_constants::format_no_copy)) - out = BOOST_REGEX_DETAIL_NS::copy(i->prefix().first, i->prefix().second, out); - if (!f.empty()) - out = ::boost::BOOST_REGEX_DETAIL_NS::regex_format_imp(out, *i, &*f.begin(), &*f.begin() + f.size(), flags, e.get_traits()); - else - out = ::boost::BOOST_REGEX_DETAIL_NS::regex_format_imp(out, *i, static_cast<UChar32 const*>(0), static_cast<UChar32 const*>(0), flags, e.get_traits()); - last_m = (*i)[0].second; - if (flags & regex_constants::format_first_only) - break; - ++i; - } - if (!(flags & regex_constants::format_no_copy)) - out = BOOST_REGEX_DETAIL_NS::copy(last_m, in.second, out); - } - return out; - } - template <class BaseIterator> - inline const BaseIterator& extract_output_base(const BaseIterator& b) - { - return b; - } - template <class BaseIterator> - inline BaseIterator extract_output_base(const utf8_output_iterator<BaseIterator>& b) - { - return b.base(); - } - template <class BaseIterator> - inline BaseIterator extract_output_base(const utf16_output_iterator<BaseIterator>& b) - { - return b.base(); - } - } // BOOST_REGEX_DETAIL_NS - - template <class OutputIterator, class BidirectionalIterator, class charT> - inline OutputIterator u32regex_replace(OutputIterator out, - BidirectionalIterator first, - BidirectionalIterator last, - const u32regex& e, - const charT* fmt, - match_flag_type flags = match_default) - { - return BOOST_REGEX_DETAIL_NS::extract_output_base - ( - BOOST_REGEX_DETAIL_NS::do_regex_replace( - BOOST_REGEX_DETAIL_NS::make_utf32_out(out, static_cast<mpl::int_<sizeof(*first)> const*>(0)), - BOOST_REGEX_DETAIL_NS::make_utf32_seq(first, last, static_cast<mpl::int_<sizeof(*first)> const*>(0)), - e, - BOOST_REGEX_DETAIL_NS::make_utf32_seq(fmt, static_cast<mpl::int_<sizeof(*fmt)> const*>(0)), - flags) - ); - } - - template <class OutputIterator, class Iterator, class charT> - inline OutputIterator u32regex_replace(OutputIterator out, - Iterator first, - Iterator last, - const u32regex& e, - const std::basic_string<charT>& fmt, - match_flag_type flags = match_default) - { - return BOOST_REGEX_DETAIL_NS::extract_output_base - ( - BOOST_REGEX_DETAIL_NS::do_regex_replace( - BOOST_REGEX_DETAIL_NS::make_utf32_out(out, static_cast<mpl::int_<sizeof(*first)> const*>(0)), - BOOST_REGEX_DETAIL_NS::make_utf32_seq(first, last, static_cast<mpl::int_<sizeof(*first)> const*>(0)), - e, - BOOST_REGEX_DETAIL_NS::make_utf32_seq(fmt.begin(), fmt.end(), static_cast<mpl::int_<sizeof(charT)> const*>(0)), - flags) - ); - } - - template <class OutputIterator, class Iterator> - inline OutputIterator u32regex_replace(OutputIterator out, - Iterator first, - Iterator last, - const u32regex& e, - const U_NAMESPACE_QUALIFIER UnicodeString& fmt, - match_flag_type flags = match_default) - { - return BOOST_REGEX_DETAIL_NS::extract_output_base - ( - BOOST_REGEX_DETAIL_NS::do_regex_replace( - BOOST_REGEX_DETAIL_NS::make_utf32_out(out, static_cast<mpl::int_<sizeof(*first)> const*>(0)), - BOOST_REGEX_DETAIL_NS::make_utf32_seq(first, last, static_cast<mpl::int_<sizeof(*first)> const*>(0)), - e, - BOOST_REGEX_DETAIL_NS::make_utf32_seq(fmt.getBuffer(), fmt.getBuffer() + fmt.length(), static_cast<mpl::int_<2> const*>(0)), - flags) - ); - } - - template <class charT> - std::basic_string<charT> u32regex_replace(const std::basic_string<charT>& s, - const u32regex& e, - const charT* fmt, - match_flag_type flags = match_default) - { - std::basic_string<charT> result; - BOOST_REGEX_DETAIL_NS::string_out_iterator<std::basic_string<charT> > i(result); - u32regex_replace(i, s.begin(), s.end(), e, fmt, flags); - return result; - } - - template <class charT> - std::basic_string<charT> u32regex_replace(const std::basic_string<charT>& s, - const u32regex& e, - const std::basic_string<charT>& fmt, - match_flag_type flags = match_default) - { - std::basic_string<charT> result; - BOOST_REGEX_DETAIL_NS::string_out_iterator<std::basic_string<charT> > i(result); - u32regex_replace(i, s.begin(), s.end(), e, fmt.c_str(), flags); - return result; - } - - namespace BOOST_REGEX_DETAIL_NS { - - class unicode_string_out_iterator - { - U_NAMESPACE_QUALIFIER UnicodeString* out; - public: - unicode_string_out_iterator(U_NAMESPACE_QUALIFIER UnicodeString& s) : out(&s) {} - unicode_string_out_iterator& operator++() { return *this; } - unicode_string_out_iterator& operator++(int) { return *this; } - unicode_string_out_iterator& operator*() { return *this; } - unicode_string_out_iterator& operator=(UChar v) - { - *out += v; - return *this; - } - typedef std::ptrdiff_t difference_type; - typedef UChar value_type; - typedef value_type* pointer; - typedef value_type& reference; - typedef std::output_iterator_tag iterator_category; - }; - - } - - inline U_NAMESPACE_QUALIFIER UnicodeString u32regex_replace(const U_NAMESPACE_QUALIFIER UnicodeString& s, - const u32regex& e, - const UChar* fmt, - match_flag_type flags = match_default) - { - U_NAMESPACE_QUALIFIER UnicodeString result; - BOOST_REGEX_DETAIL_NS::unicode_string_out_iterator i(result); - u32regex_replace(i, s.getBuffer(), s.getBuffer() + s.length(), e, fmt, flags); - return result; - } - - inline U_NAMESPACE_QUALIFIER UnicodeString u32regex_replace(const U_NAMESPACE_QUALIFIER UnicodeString& s, - const u32regex& e, - const U_NAMESPACE_QUALIFIER UnicodeString& fmt, - match_flag_type flags = match_default) - { - U_NAMESPACE_QUALIFIER UnicodeString result; - BOOST_REGEX_DETAIL_NS::unicode_string_out_iterator i(result); - BOOST_REGEX_DETAIL_NS::do_regex_replace( - BOOST_REGEX_DETAIL_NS::make_utf32_out(i, static_cast<mpl::int_<2> const*>(0)), - BOOST_REGEX_DETAIL_NS::make_utf32_seq(s.getBuffer(), s.getBuffer() + s.length(), static_cast<mpl::int_<2> const*>(0)), - e, - BOOST_REGEX_DETAIL_NS::make_utf32_seq(fmt.getBuffer(), fmt.getBuffer() + fmt.length(), static_cast<mpl::int_<2> const*>(0)), - flags); - return result; - } - -} // namespace boost. - -#ifdef BOOST_MSVC -#pragma warning (pop) -#endif - -#include <boost/regex/v4/u32regex_iterator.hpp> -#include <boost/regex/v4/u32regex_token_iterator.hpp> - -#endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/indexed_bit_flag.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/indexed_bit_flag.hpp deleted file mode 100644 index c9d32c59a1..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/indexed_bit_flag.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * - * Copyright (c) 2020 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE basic_regex_parser.cpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares template class basic_regex_parser. - */ - -#include <boost/regex/config.hpp> -#include <set> - -#ifndef BOOST_REGEX_V4_INDEXED_BIT_FLAG_HPP -#define BOOST_REGEX_V4_INDEXED_BIT_FLAG_HPP - -namespace boost{ -namespace BOOST_REGEX_DETAIL_NS{ - -class indexed_bit_flag -{ - boost::uint64_t low_mask; - std::set<std::size_t> mask_set; -public: - indexed_bit_flag() : low_mask(0) {} - void set(std::size_t i) - { - if (i < std::numeric_limits<boost::uint64_t>::digits - 1) - low_mask |= static_cast<boost::uint64_t>(1u) << i; - else - mask_set.insert(i); - } - bool test(std::size_t i) - { - if (i < std::numeric_limits<boost::uint64_t>::digits - 1) - return low_mask & static_cast<boost::uint64_t>(1u) << i ? true : false; - else - return mask_set.find(i) != mask_set.end(); - } -}; - -} // namespace BOOST_REGEX_DETAIL_NS -} // namespace boost - - -#endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/iterator_category.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/iterator_category.hpp deleted file mode 100644 index 9e40142378..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/iterator_category.hpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - * - * Copyright (c) 2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE regex_match.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Iterator traits for selecting an iterator type as - * an integral constant expression. - */ - - -#ifndef BOOST_REGEX_ITERATOR_CATEGORY_HPP -#define BOOST_REGEX_ITERATOR_CATEGORY_HPP - -#include <iterator> -#include <boost/type_traits/is_convertible.hpp> -#include <boost/type_traits/is_pointer.hpp> - -namespace boost{ -namespace detail{ - -template <class I> -struct is_random_imp -{ -#ifndef BOOST_NO_STD_ITERATOR_TRAITS -private: - typedef typename std::iterator_traits<I>::iterator_category cat; -public: - BOOST_STATIC_CONSTANT(bool, value = (::boost::is_convertible<cat*, std::random_access_iterator_tag*>::value)); -#else - BOOST_STATIC_CONSTANT(bool, value = false); -#endif -}; - -template <class I> -struct is_random_pointer_imp -{ - BOOST_STATIC_CONSTANT(bool, value = true); -}; - -template <bool is_pointer_type> -struct is_random_imp_selector -{ - template <class I> - struct rebind - { - typedef is_random_imp<I> type; - }; -}; - -template <> -struct is_random_imp_selector<true> -{ - template <class I> - struct rebind - { - typedef is_random_pointer_imp<I> type; - }; -}; - -} - -template <class I> -struct is_random_access_iterator -{ -private: - typedef detail::is_random_imp_selector< ::boost::is_pointer<I>::value> selector; - typedef typename selector::template rebind<I> bound_type; - typedef typename bound_type::type answer; -public: - BOOST_STATIC_CONSTANT(bool, value = answer::value); -}; - -#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION -template <class I> -const bool is_random_access_iterator<I>::value; -#endif - -} - -#endif - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/iterator_traits.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/iterator_traits.hpp deleted file mode 100644 index ae45ecb80c..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/iterator_traits.hpp +++ /dev/null @@ -1,135 +0,0 @@ -/* - * - * Copyright (c) 1998-2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE iterator_traits.cpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares iterator traits workarounds. - */ - -#ifndef BOOST_REGEX_V4_ITERATOR_TRAITS_HPP -#define BOOST_REGEX_V4_ITERATOR_TRAITS_HPP - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -namespace boost{ -namespace BOOST_REGEX_DETAIL_NS{ - -#if defined(BOOST_NO_STD_ITERATOR_TRAITS) - -template <class T> -struct regex_iterator_traits -{ - typedef typename T::iterator_category iterator_category; - typedef typename T::value_type value_type; -#if !defined(BOOST_NO_STD_ITERATOR) - typedef typename T::difference_type difference_type; - typedef typename T::pointer pointer; - typedef typename T::reference reference; -#else - typedef std::ptrdiff_t difference_type; - typedef value_type* pointer; - typedef value_type& reference; -#endif -}; - -template <class T> -struct pointer_iterator_traits -{ - typedef std::ptrdiff_t difference_type; - typedef T value_type; - typedef T* pointer; - typedef T& reference; - typedef std::random_access_iterator_tag iterator_category; -}; -template <class T> -struct const_pointer_iterator_traits -{ - typedef std::ptrdiff_t difference_type; - typedef T value_type; - typedef const T* pointer; - typedef const T& reference; - typedef std::random_access_iterator_tag iterator_category; -}; - -template<> -struct regex_iterator_traits<char*> : pointer_iterator_traits<char>{}; -template<> -struct regex_iterator_traits<const char*> : const_pointer_iterator_traits<char>{}; -template<> -struct regex_iterator_traits<wchar_t*> : pointer_iterator_traits<wchar_t>{}; -template<> -struct regex_iterator_traits<const wchar_t*> : const_pointer_iterator_traits<wchar_t>{}; -// -// the follwoing are needed for ICU support: -// -template<> -struct regex_iterator_traits<unsigned char*> : pointer_iterator_traits<char>{}; -template<> -struct regex_iterator_traits<const unsigned char*> : const_pointer_iterator_traits<char>{}; -template<> -struct regex_iterator_traits<int*> : pointer_iterator_traits<int>{}; -template<> -struct regex_iterator_traits<const int*> : const_pointer_iterator_traits<int>{}; - -#ifdef BOOST_REGEX_HAS_OTHER_WCHAR_T -template<> -struct regex_iterator_traits<unsigned short*> : pointer_iterator_traits<unsigned short>{}; -template<> -struct regex_iterator_traits<const unsigned short*> : const_pointer_iterator_traits<unsigned short>{}; -#endif - -#if defined(__SGI_STL_PORT) && defined(__STL_DEBUG) -template<> -struct regex_iterator_traits<std::string::iterator> : pointer_iterator_traits<char>{}; -template<> -struct regex_iterator_traits<std::string::const_iterator> : const_pointer_iterator_traits<char>{}; -#ifndef BOOST_NO_STD_WSTRING -template<> -struct regex_iterator_traits<std::wstring::iterator> : pointer_iterator_traits<wchar_t>{}; -template<> -struct regex_iterator_traits<std::wstring::const_iterator> : const_pointer_iterator_traits<wchar_t>{}; -#endif // BOOST_NO_WSTRING -#endif // stport - -#else - -template <class T> -struct regex_iterator_traits : public std::iterator_traits<T> {}; - -#endif - -} // namespace BOOST_REGEX_DETAIL_NS -} // namespace boost - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#endif - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/match_flags.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/match_flags.hpp deleted file mode 100644 index 5dc7265508..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/match_flags.hpp +++ /dev/null @@ -1,161 +0,0 @@ -/* - * - * Copyright (c) 1998-2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE match_flags.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares match_flags type. - */ - -#ifndef BOOST_REGEX_V4_MATCH_FLAGS -#define BOOST_REGEX_V4_MATCH_FLAGS - -#ifdef __cplusplus -# include <boost/cstdint.hpp> -#endif - -#ifdef __cplusplus -namespace boost{ - namespace regex_constants{ -#endif - -#ifdef BOOST_MSVC -#pragma warning(push) -#if BOOST_MSVC >= 1800 -#pragma warning(disable : 26812) -#endif -#endif - -typedef enum _match_flags -{ - match_default = 0, - match_not_bol = 1, /* first is not start of line */ - match_not_eol = match_not_bol << 1, /* last is not end of line */ - match_not_bob = match_not_eol << 1, /* first is not start of buffer */ - match_not_eob = match_not_bob << 1, /* last is not end of buffer */ - match_not_bow = match_not_eob << 1, /* first is not start of word */ - match_not_eow = match_not_bow << 1, /* last is not end of word */ - match_not_dot_newline = match_not_eow << 1, /* \n is not matched by '.' */ - match_not_dot_null = match_not_dot_newline << 1, /* '\0' is not matched by '.' */ - match_prev_avail = match_not_dot_null << 1, /* *--first is a valid expression */ - match_init = match_prev_avail << 1, /* internal use */ - match_any = match_init << 1, /* don't care what we match */ - match_not_null = match_any << 1, /* string can't be null */ - match_continuous = match_not_null << 1, /* each grep match must continue from */ - /* uninterrupted from the previous one */ - match_partial = match_continuous << 1, /* find partial matches */ - - match_stop = match_partial << 1, /* stop after first match (grep) V3 only */ - match_not_initial_null = match_stop, /* don't match initial null, V4 only */ - match_all = match_stop << 1, /* must find the whole of input even if match_any is set */ - match_perl = match_all << 1, /* Use perl matching rules */ - match_posix = match_perl << 1, /* Use POSIX matching rules */ - match_nosubs = match_posix << 1, /* don't trap marked subs */ - match_extra = match_nosubs << 1, /* include full capture information for repeated captures */ - match_single_line = match_extra << 1, /* treat text as single line and ignore any \n's when matching ^ and $. */ - match_unused1 = match_single_line << 1, /* unused */ - match_unused2 = match_unused1 << 1, /* unused */ - match_unused3 = match_unused2 << 1, /* unused */ - match_max = match_unused3, - - format_perl = 0, /* perl style replacement */ - format_default = 0, /* ditto. */ - format_sed = match_max << 1, /* sed style replacement. */ - format_all = format_sed << 1, /* enable all extensions to syntax. */ - format_no_copy = format_all << 1, /* don't copy non-matching segments. */ - format_first_only = format_no_copy << 1, /* Only replace first occurrence. */ - format_is_if = format_first_only << 1, /* internal use only. */ - format_literal = format_is_if << 1, /* treat string as a literal */ - - match_not_any = match_not_bol | match_not_eol | match_not_bob - | match_not_eob | match_not_bow | match_not_eow | match_not_dot_newline - | match_not_dot_null | match_prev_avail | match_init | match_not_null - | match_continuous | match_partial | match_stop | match_not_initial_null - | match_stop | match_all | match_perl | match_posix | match_nosubs - | match_extra | match_single_line | match_unused1 | match_unused2 - | match_unused3 | match_max | format_perl | format_default | format_sed - | format_all | format_no_copy | format_first_only | format_is_if - | format_literal - - -} match_flags; - -#if defined(BOOST_BORLANDC) || (defined(_MSC_VER) && (_MSC_VER <= 1310)) -typedef unsigned long match_flag_type; -#else -typedef match_flags match_flag_type; - - -#ifdef __cplusplus -inline match_flags operator&(match_flags m1, match_flags m2) -{ return static_cast<match_flags>(static_cast<boost::int32_t>(m1) & static_cast<boost::int32_t>(m2)); } -inline match_flags operator|(match_flags m1, match_flags m2) -{ return static_cast<match_flags>(static_cast<boost::int32_t>(m1) | static_cast<boost::int32_t>(m2)); } -inline match_flags operator^(match_flags m1, match_flags m2) -{ return static_cast<match_flags>(static_cast<boost::int32_t>(m1) ^ static_cast<boost::int32_t>(m2)); } -inline match_flags operator~(match_flags m1) -{ return static_cast<match_flags>(~static_cast<boost::int32_t>(m1)); } -inline match_flags& operator&=(match_flags& m1, match_flags m2) -{ m1 = m1&m2; return m1; } -inline match_flags& operator|=(match_flags& m1, match_flags m2) -{ m1 = m1|m2; return m1; } -inline match_flags& operator^=(match_flags& m1, match_flags m2) -{ m1 = m1^m2; return m1; } -#endif -#endif - -#ifdef __cplusplus -} /* namespace regex_constants */ -/* - * import names into boost for backwards compatibility: - */ -using regex_constants::match_flag_type; -using regex_constants::match_default; -using regex_constants::match_not_bol; -using regex_constants::match_not_eol; -using regex_constants::match_not_bob; -using regex_constants::match_not_eob; -using regex_constants::match_not_bow; -using regex_constants::match_not_eow; -using regex_constants::match_not_dot_newline; -using regex_constants::match_not_dot_null; -using regex_constants::match_prev_avail; -/* using regex_constants::match_init; */ -using regex_constants::match_any; -using regex_constants::match_not_null; -using regex_constants::match_continuous; -using regex_constants::match_partial; -/*using regex_constants::match_stop; */ -using regex_constants::match_all; -using regex_constants::match_perl; -using regex_constants::match_posix; -using regex_constants::match_nosubs; -using regex_constants::match_extra; -using regex_constants::match_single_line; -/*using regex_constants::match_max; */ -using regex_constants::format_all; -using regex_constants::format_sed; -using regex_constants::format_perl; -using regex_constants::format_default; -using regex_constants::format_no_copy; -using regex_constants::format_first_only; -/*using regex_constants::format_is_if;*/ - -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - - -} /* namespace boost */ -#endif /* __cplusplus */ -#endif /* include guard */ - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/match_results.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/match_results.hpp deleted file mode 100644 index c580e4fcba..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/match_results.hpp +++ /dev/null @@ -1,716 +0,0 @@ -/* - * - * Copyright (c) 1998-2009 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE match_results.cpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares template class match_results. - */ - -#ifndef BOOST_REGEX_V4_MATCH_RESULTS_HPP -#define BOOST_REGEX_V4_MATCH_RESULTS_HPP - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -namespace boost{ -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable : 4251) -#if BOOST_MSVC < 1700 -# pragma warning(disable : 4231) -#endif -# if BOOST_MSVC < 1600 -# pragma warning(disable : 4660) -# endif -#endif - -namespace BOOST_REGEX_DETAIL_NS{ - -class named_subexpressions; - -} - -template <class BidiIterator, class Allocator> -class match_results -{ -private: -#ifndef BOOST_NO_STD_ALLOCATOR - typedef std::vector<sub_match<BidiIterator>, Allocator> vector_type; -#else - typedef std::vector<sub_match<BidiIterator> > vector_type; -#endif -public: - typedef sub_match<BidiIterator> value_type; -#ifndef BOOST_NO_CXX11_ALLOCATOR - typedef typename std::allocator_traits<Allocator>::value_type const & const_reference; -#elif !defined(BOOST_NO_STD_ALLOCATOR) && !(defined(BOOST_MSVC) && defined(_STLPORT_VERSION)) - typedef typename Allocator::const_reference const_reference; -#else - typedef const value_type& const_reference; -#endif - typedef const_reference reference; - typedef typename vector_type::const_iterator const_iterator; - typedef const_iterator iterator; - typedef typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits< - BidiIterator>::difference_type difference_type; -#ifdef BOOST_NO_CXX11_ALLOCATOR - typedef typename Allocator::size_type size_type; -#else - typedef typename std::allocator_traits<Allocator>::size_type size_type; -#endif - typedef Allocator allocator_type; - typedef typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits< - BidiIterator>::value_type char_type; - typedef std::basic_string<char_type> string_type; - typedef BOOST_REGEX_DETAIL_NS::named_subexpressions named_sub_type; - - // construct/copy/destroy: - explicit match_results(const Allocator& a = Allocator()) -#ifndef BOOST_NO_STD_ALLOCATOR - : m_subs(a), m_base(), m_null(), m_last_closed_paren(0), m_is_singular(true) {} -#else - : m_subs(), m_base(), m_null(), m_last_closed_paren(0), m_is_singular(true) { (void)a; } -#endif - // - // IMPORTANT: in the code below, the crazy looking checks around m_is_singular are - // all required because it is illegal to copy a singular iterator. - // See https://svn.boost.org/trac/boost/ticket/3632. - // - match_results(const match_results& m) - : m_subs(m.m_subs), m_base(), m_null(), m_named_subs(m.m_named_subs), m_last_closed_paren(m.m_last_closed_paren), m_is_singular(m.m_is_singular) - { - if(!m_is_singular) - { - m_base = m.m_base; - m_null = m.m_null; - } - } - match_results& operator=(const match_results& m) - { - m_subs = m.m_subs; - m_named_subs = m.m_named_subs; - m_last_closed_paren = m.m_last_closed_paren; - m_is_singular = m.m_is_singular; - if(!m_is_singular) - { - m_base = m.m_base; - m_null = m.m_null; - } - return *this; - } - ~match_results(){} - - // size: - size_type size() const - { return empty() ? 0 : m_subs.size() - 2; } - size_type max_size() const - { return m_subs.max_size(); } - bool empty() const - { return m_subs.size() < 2; } - // element access: - difference_type length(int sub = 0) const - { - if(m_is_singular) - raise_logic_error(); - sub += 2; - if((sub < (int)m_subs.size()) && (sub > 0)) - return m_subs[sub].length(); - return 0; - } - difference_type length(const char_type* sub) const - { - if(m_is_singular) - raise_logic_error(); - const char_type* sub_end = sub; - while(*sub_end) ++sub_end; - return length(named_subexpression_index(sub, sub_end)); - } - template <class charT> - difference_type length(const charT* sub) const - { - if(m_is_singular) - raise_logic_error(); - const charT* sub_end = sub; - while(*sub_end) ++sub_end; - return length(named_subexpression_index(sub, sub_end)); - } - template <class charT, class Traits, class A> - difference_type length(const std::basic_string<charT, Traits, A>& sub) const - { - return length(sub.c_str()); - } - difference_type position(size_type sub = 0) const - { - if(m_is_singular) - raise_logic_error(); - sub += 2; - if(sub < m_subs.size()) - { - const sub_match<BidiIterator>& s = m_subs[sub]; - if(s.matched || (sub == 2)) - { - return ::boost::BOOST_REGEX_DETAIL_NS::distance((BidiIterator)(m_base), (BidiIterator)(s.first)); - } - } - return ~static_cast<difference_type>(0); - } - difference_type position(const char_type* sub) const - { - const char_type* sub_end = sub; - while(*sub_end) ++sub_end; - return position(named_subexpression_index(sub, sub_end)); - } - template <class charT> - difference_type position(const charT* sub) const - { - const charT* sub_end = sub; - while(*sub_end) ++sub_end; - return position(named_subexpression_index(sub, sub_end)); - } - template <class charT, class Traits, class A> - difference_type position(const std::basic_string<charT, Traits, A>& sub) const - { - return position(sub.c_str()); - } - string_type str(int sub = 0) const - { - if(m_is_singular) - raise_logic_error(); - sub += 2; - string_type result; - if(sub < (int)m_subs.size() && (sub > 0)) - { - const sub_match<BidiIterator>& s = m_subs[sub]; - if(s.matched) - { - result = s.str(); - } - } - return result; - } - string_type str(const char_type* sub) const - { - return (*this)[sub].str(); - } - template <class Traits, class A> - string_type str(const std::basic_string<char_type, Traits, A>& sub) const - { - return (*this)[sub].str(); - } - template <class charT> - string_type str(const charT* sub) const - { - return (*this)[sub].str(); - } - template <class charT, class Traits, class A> - string_type str(const std::basic_string<charT, Traits, A>& sub) const - { - return (*this)[sub].str(); - } - const_reference operator[](int sub) const - { - if(m_is_singular && m_subs.empty()) - raise_logic_error(); - sub += 2; - if(sub < (int)m_subs.size() && (sub >= 0)) - { - return m_subs[sub]; - } - return m_null; - } - // - // Named sub-expressions: - // - const_reference named_subexpression(const char_type* i, const char_type* j) const - { - // - // Scan for the leftmost *matched* subexpression with the specified named: - // - if(m_is_singular) - raise_logic_error(); - BOOST_REGEX_DETAIL_NS::named_subexpressions::range_type r = m_named_subs->equal_range(i, j); - while((r.first != r.second) && ((*this)[r.first->index].matched == false)) - ++r.first; - return r.first != r.second ? (*this)[r.first->index] : m_null; - } - template <class charT> - const_reference named_subexpression(const charT* i, const charT* j) const - { - BOOST_STATIC_ASSERT(sizeof(charT) <= sizeof(char_type)); - if(i == j) - return m_null; - std::vector<char_type> s; - while(i != j) - s.insert(s.end(), *i++); - return named_subexpression(&*s.begin(), &*s.begin() + s.size()); - } - int named_subexpression_index(const char_type* i, const char_type* j) const - { - // - // Scan for the leftmost *matched* subexpression with the specified named. - // If none found then return the leftmost expression with that name, - // otherwise an invalid index: - // - if(m_is_singular) - raise_logic_error(); - BOOST_REGEX_DETAIL_NS::named_subexpressions::range_type s, r; - s = r = m_named_subs->equal_range(i, j); - while((r.first != r.second) && ((*this)[r.first->index].matched == false)) - ++r.first; - if(r.first == r.second) - r = s; - return r.first != r.second ? r.first->index : -20; - } - template <class charT> - int named_subexpression_index(const charT* i, const charT* j) const - { - BOOST_STATIC_ASSERT(sizeof(charT) <= sizeof(char_type)); - if(i == j) - return -20; - std::vector<char_type> s; - while(i != j) - s.insert(s.end(), *i++); - return named_subexpression_index(&*s.begin(), &*s.begin() + s.size()); - } - template <class Traits, class A> - const_reference operator[](const std::basic_string<char_type, Traits, A>& s) const - { - return named_subexpression(s.c_str(), s.c_str() + s.size()); - } - const_reference operator[](const char_type* p) const - { - const char_type* e = p; - while(*e) ++e; - return named_subexpression(p, e); - } - - template <class charT> - const_reference operator[](const charT* p) const - { - BOOST_STATIC_ASSERT(sizeof(charT) <= sizeof(char_type)); - if(*p == 0) - return m_null; - std::vector<char_type> s; - while(*p) - s.insert(s.end(), *p++); - return named_subexpression(&*s.begin(), &*s.begin() + s.size()); - } - template <class charT, class Traits, class A> - const_reference operator[](const std::basic_string<charT, Traits, A>& ns) const - { - BOOST_STATIC_ASSERT(sizeof(charT) <= sizeof(char_type)); - if(ns.empty()) - return m_null; - std::vector<char_type> s; - for(unsigned i = 0; i < ns.size(); ++i) - s.insert(s.end(), ns[i]); - return named_subexpression(&*s.begin(), &*s.begin() + s.size()); - } - - const_reference prefix() const - { - if(m_is_singular) - raise_logic_error(); - return (*this)[-1]; - } - - const_reference suffix() const - { - if(m_is_singular) - raise_logic_error(); - return (*this)[-2]; - } - const_iterator begin() const - { - return (m_subs.size() > 2) ? (m_subs.begin() + 2) : m_subs.end(); - } - const_iterator end() const - { - return m_subs.end(); - } - // format: - template <class OutputIterator, class Functor> - OutputIterator format(OutputIterator out, - Functor fmt, - match_flag_type flags = format_default) const - { - if(m_is_singular) - raise_logic_error(); - typedef typename BOOST_REGEX_DETAIL_NS::compute_functor_type<Functor, match_results<BidiIterator, Allocator>, OutputIterator>::type F; - F func(fmt); - return func(*this, out, flags); - } - template <class Functor> - string_type format(Functor fmt, match_flag_type flags = format_default) const - { - if(m_is_singular) - raise_logic_error(); - std::basic_string<char_type> result; - BOOST_REGEX_DETAIL_NS::string_out_iterator<std::basic_string<char_type> > i(result); - - typedef typename BOOST_REGEX_DETAIL_NS::compute_functor_type<Functor, match_results<BidiIterator, Allocator>, BOOST_REGEX_DETAIL_NS::string_out_iterator<std::basic_string<char_type> > >::type F; - F func(fmt); - - func(*this, i, flags); - return result; - } - // format with locale: - template <class OutputIterator, class Functor, class RegexT> - OutputIterator format(OutputIterator out, - Functor fmt, - match_flag_type flags, - const RegexT& re) const - { - if(m_is_singular) - raise_logic_error(); - typedef ::boost::regex_traits_wrapper<typename RegexT::traits_type> traits_type; - typedef typename BOOST_REGEX_DETAIL_NS::compute_functor_type<Functor, match_results<BidiIterator, Allocator>, OutputIterator, traits_type>::type F; - F func(fmt); - return func(*this, out, flags, re.get_traits()); - } - template <class RegexT, class Functor> - string_type format(Functor fmt, - match_flag_type flags, - const RegexT& re) const - { - if(m_is_singular) - raise_logic_error(); - typedef ::boost::regex_traits_wrapper<typename RegexT::traits_type> traits_type; - std::basic_string<char_type> result; - BOOST_REGEX_DETAIL_NS::string_out_iterator<std::basic_string<char_type> > i(result); - - typedef typename BOOST_REGEX_DETAIL_NS::compute_functor_type<Functor, match_results<BidiIterator, Allocator>, BOOST_REGEX_DETAIL_NS::string_out_iterator<std::basic_string<char_type> >, traits_type >::type F; - F func(fmt); - - func(*this, i, flags, re.get_traits()); - return result; - } - - const_reference get_last_closed_paren()const - { - if(m_is_singular) - raise_logic_error(); - return m_last_closed_paren == 0 ? m_null : (*this)[m_last_closed_paren]; - } - - allocator_type get_allocator() const - { -#ifndef BOOST_NO_STD_ALLOCATOR - return m_subs.get_allocator(); -#else - return allocator_type(); -#endif - } - void swap(match_results& that) - { - std::swap(m_subs, that.m_subs); - std::swap(m_named_subs, that.m_named_subs); - std::swap(m_last_closed_paren, that.m_last_closed_paren); - if(m_is_singular) - { - if(!that.m_is_singular) - { - m_base = that.m_base; - m_null = that.m_null; - } - } - else if(that.m_is_singular) - { - that.m_base = m_base; - that.m_null = m_null; - } - else - { - std::swap(m_base, that.m_base); - std::swap(m_null, that.m_null); - } - std::swap(m_is_singular, that.m_is_singular); - } - bool operator==(const match_results& that)const - { - if(m_is_singular) - { - return that.m_is_singular; - } - else if(that.m_is_singular) - { - return false; - } - return (m_subs == that.m_subs) && (m_base == that.m_base) && (m_last_closed_paren == that.m_last_closed_paren); - } - bool operator!=(const match_results& that)const - { return !(*this == that); } - -#ifdef BOOST_REGEX_MATCH_EXTRA - typedef typename sub_match<BidiIterator>::capture_sequence_type capture_sequence_type; - - const capture_sequence_type& captures(int i)const - { - if(m_is_singular) - raise_logic_error(); - return (*this)[i].captures(); - } -#endif - - // - // private access functions: - void BOOST_REGEX_CALL set_second(BidiIterator i) - { - BOOST_REGEX_ASSERT(m_subs.size() > 2); - m_subs[2].second = i; - m_subs[2].matched = true; - m_subs[0].first = i; - m_subs[0].matched = (m_subs[0].first != m_subs[0].second); - m_null.first = i; - m_null.second = i; - m_null.matched = false; - m_is_singular = false; - } - - void BOOST_REGEX_CALL set_second(BidiIterator i, size_type pos, bool m = true, bool escape_k = false) - { - if(pos) - m_last_closed_paren = static_cast<int>(pos); - pos += 2; - BOOST_REGEX_ASSERT(m_subs.size() > pos); - m_subs[pos].second = i; - m_subs[pos].matched = m; - if((pos == 2) && !escape_k) - { - m_subs[0].first = i; - m_subs[0].matched = (m_subs[0].first != m_subs[0].second); - m_null.first = i; - m_null.second = i; - m_null.matched = false; - m_is_singular = false; - } - } - void BOOST_REGEX_CALL set_size(size_type n, BidiIterator i, BidiIterator j) - { - value_type v(j); - size_type len = m_subs.size(); - if(len > n + 2) - { - m_subs.erase(m_subs.begin()+n+2, m_subs.end()); - std::fill(m_subs.begin(), m_subs.end(), v); - } - else - { - std::fill(m_subs.begin(), m_subs.end(), v); - if(n+2 != len) - m_subs.insert(m_subs.end(), n+2-len, v); - } - m_subs[1].first = i; - m_last_closed_paren = 0; - } - void BOOST_REGEX_CALL set_base(BidiIterator pos) - { - m_base = pos; - } - BidiIterator base()const - { - return m_base; - } - void BOOST_REGEX_CALL set_first(BidiIterator i) - { - BOOST_REGEX_ASSERT(m_subs.size() > 2); - // set up prefix: - m_subs[1].second = i; - m_subs[1].matched = (m_subs[1].first != i); - // set up $0: - m_subs[2].first = i; - // zero out everything else: - for(size_type n = 3; n < m_subs.size(); ++n) - { - m_subs[n].first = m_subs[n].second = m_subs[0].second; - m_subs[n].matched = false; - } - } - void BOOST_REGEX_CALL set_first(BidiIterator i, size_type pos, bool escape_k = false) - { - BOOST_REGEX_ASSERT(pos+2 < m_subs.size()); - if(pos || escape_k) - { - m_subs[pos+2].first = i; - if(escape_k) - { - m_subs[1].second = i; - m_subs[1].matched = (m_subs[1].first != m_subs[1].second); - } - } - else - set_first(i); - } - void BOOST_REGEX_CALL maybe_assign(const match_results<BidiIterator, Allocator>& m); - - void BOOST_REGEX_CALL set_named_subs(boost::shared_ptr<named_sub_type> subs) - { - m_named_subs = subs; - } - -private: - // - // Error handler called when an uninitialized match_results is accessed: - // - static void raise_logic_error() - { - std::logic_error e("Attempt to access an uninitialized boost::match_results<> class."); - boost::throw_exception(e); - } - - - vector_type m_subs; // subexpressions - BidiIterator m_base; // where the search started from - sub_match<BidiIterator> m_null; // a null match - boost::shared_ptr<named_sub_type> m_named_subs; // Shared copy of named subs in the regex object - int m_last_closed_paren; // Last ) to be seen - used for formatting - bool m_is_singular; // True if our stored iterators are singular -}; - -template <class BidiIterator, class Allocator> -void BOOST_REGEX_CALL match_results<BidiIterator, Allocator>::maybe_assign(const match_results<BidiIterator, Allocator>& m) -{ - if(m_is_singular) - { - *this = m; - return; - } - const_iterator p1, p2; - p1 = begin(); - p2 = m.begin(); - // - // Distances are measured from the start of *this* match, unless this isn't - // a valid match in which case we use the start of the whole sequence. Note that - // no subsequent match-candidate can ever be to the left of the first match found. - // This ensures that when we are using bidirectional iterators, that distances - // measured are as short as possible, and therefore as efficient as possible - // to compute. Finally note that we don't use the "matched" data member to test - // whether a sub-expression is a valid match, because partial matches set this - // to false for sub-expression 0. - // - BidiIterator l_end = this->suffix().second; - BidiIterator l_base = (p1->first == l_end) ? this->prefix().first : (*this)[0].first; - difference_type len1 = 0; - difference_type len2 = 0; - difference_type base1 = 0; - difference_type base2 = 0; - std::size_t i; - for(i = 0; i < size(); ++i, ++p1, ++p2) - { - // - // Leftmost takes priority over longest; handle special cases - // where distances need not be computed first (an optimisation - // for bidirectional iterators: ensure that we don't accidently - // compute the length of the whole sequence, as this can be really - // expensive). - // - if(p1->first == l_end) - { - if(p2->first != l_end) - { - // p2 must be better than p1, and no need to calculate - // actual distances: - base1 = 1; - base2 = 0; - break; - } - else - { - // *p1 and *p2 are either unmatched or match end-of sequence, - // either way no need to calculate distances: - if((p1->matched == false) && (p2->matched == true)) - break; - if((p1->matched == true) && (p2->matched == false)) - return; - continue; - } - } - else if(p2->first == l_end) - { - // p1 better than p2, and no need to calculate distances: - return; - } - base1 = ::boost::BOOST_REGEX_DETAIL_NS::distance(l_base, p1->first); - base2 = ::boost::BOOST_REGEX_DETAIL_NS::distance(l_base, p2->first); - BOOST_REGEX_ASSERT(base1 >= 0); - BOOST_REGEX_ASSERT(base2 >= 0); - if(base1 < base2) return; - if(base2 < base1) break; - - len1 = ::boost::BOOST_REGEX_DETAIL_NS::distance((BidiIterator)p1->first, (BidiIterator)p1->second); - len2 = ::boost::BOOST_REGEX_DETAIL_NS::distance((BidiIterator)p2->first, (BidiIterator)p2->second); - BOOST_REGEX_ASSERT(len1 >= 0); - BOOST_REGEX_ASSERT(len2 >= 0); - if((len1 != len2) || ((p1->matched == false) && (p2->matched == true))) - break; - if((p1->matched == true) && (p2->matched == false)) - return; - } - if(i == size()) - return; - if(base2 < base1) - *this = m; - else if((len2 > len1) || ((p1->matched == false) && (p2->matched == true)) ) - *this = m; -} - -template <class BidiIterator, class Allocator> -void swap(match_results<BidiIterator, Allocator>& a, match_results<BidiIterator, Allocator>& b) -{ - a.swap(b); -} - -#ifndef BOOST_NO_STD_LOCALE -template <class charT, class traits, class BidiIterator, class Allocator> -std::basic_ostream<charT, traits>& - operator << (std::basic_ostream<charT, traits>& os, - const match_results<BidiIterator, Allocator>& s) -{ - return (os << s.str()); -} -#else -template <class BidiIterator, class Allocator> -std::ostream& operator << (std::ostream& os, - const match_results<BidiIterator, Allocator>& s) -{ - return (os << s.str()); -} -#endif - -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif -} // namespace boost - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#endif - - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/mem_block_cache.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/mem_block_cache.hpp deleted file mode 100644 index 1996a512af..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/mem_block_cache.hpp +++ /dev/null @@ -1,183 +0,0 @@ - /* - * Copyright (c) 2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE mem_block_cache.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: memory block cache used by the non-recursive matcher. - */ - -#ifndef BOOST_REGEX_V4_MEM_BLOCK_CACHE_HPP -#define BOOST_REGEX_V4_MEM_BLOCK_CACHE_HPP - -#include <new> -#ifdef BOOST_HAS_THREADS -#include <boost/regex/pending/static_mutex.hpp> -#endif - -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif - -#ifndef BOOST_NO_CXX11_HDR_ATOMIC - #include <atomic> - #if ATOMIC_POINTER_LOCK_FREE == 2 - #define BOOST_REGEX_MEM_BLOCK_CACHE_LOCK_FREE - #define BOOST_REGEX_ATOMIC_POINTER std::atomic - #endif -#endif - -namespace boost{ -namespace BOOST_REGEX_DETAIL_NS{ - -#ifdef BOOST_REGEX_MEM_BLOCK_CACHE_LOCK_FREE /* lock free implementation */ -struct mem_block_cache -{ - std::atomic<void*> cache[BOOST_REGEX_MAX_CACHE_BLOCKS]; - - ~mem_block_cache() - { - for (size_t i = 0;i < BOOST_REGEX_MAX_CACHE_BLOCKS; ++i) { - if (cache[i].load()) ::operator delete(cache[i].load()); - } - } - void* get() - { - for (size_t i = 0;i < BOOST_REGEX_MAX_CACHE_BLOCKS; ++i) { - void* p = cache[i].load(); - if (p != NULL) { - if (cache[i].compare_exchange_strong(p, NULL)) return p; - } - } - return ::operator new(BOOST_REGEX_BLOCKSIZE); - } - void put(void* ptr) - { - for (size_t i = 0;i < BOOST_REGEX_MAX_CACHE_BLOCKS; ++i) { - void* p = cache[i].load(); - if (p == NULL) { - if (cache[i].compare_exchange_strong(p, ptr)) return; - } - } - ::operator delete(ptr); - } - - static mem_block_cache& instance() - { - static mem_block_cache block_cache = { { {nullptr} } }; - return block_cache; - } -}; - - -#else /* lock-based implementation */ - - -struct mem_block_node -{ - mem_block_node* next; -}; - -struct mem_block_cache -{ - // this member has to be statically initialsed: - mem_block_node* next; - unsigned cached_blocks; -#ifdef BOOST_HAS_THREADS - boost::static_mutex mut; -#endif - - ~mem_block_cache() - { - while(next) - { - mem_block_node* old = next; - next = next->next; - ::operator delete(old); - } - } - void* get() - { -#ifdef BOOST_HAS_THREADS - boost::static_mutex::scoped_lock g(mut); -#endif - if(next) - { - mem_block_node* result = next; - next = next->next; - --cached_blocks; - return result; - } - return ::operator new(BOOST_REGEX_BLOCKSIZE); - } - void put(void* p) - { -#ifdef BOOST_HAS_THREADS - boost::static_mutex::scoped_lock g(mut); -#endif - if(cached_blocks >= BOOST_REGEX_MAX_CACHE_BLOCKS) - { - ::operator delete(p); - } - else - { - mem_block_node* old = static_cast<mem_block_node*>(p); - old->next = next; - next = old; - ++cached_blocks; - } - } - static mem_block_cache& instance() - { -#ifdef BOOST_HAS_THREADS - static mem_block_cache block_cache = { 0, 0, BOOST_STATIC_MUTEX_INIT, }; -#else - static mem_block_cache block_cache = { 0, 0, }; -#endif - return block_cache; - } -}; -#endif - -#if BOOST_REGEX_MAX_CACHE_BLOCKS == 0 - -inline void* BOOST_REGEX_CALL get_mem_block() -{ - return ::operator new(BOOST_REGEX_BLOCKSIZE); -} - -inline void BOOST_REGEX_CALL put_mem_block(void* p) -{ - ::operator delete(p); -} - -#else - -inline void* BOOST_REGEX_CALL get_mem_block() -{ - return mem_block_cache::instance().get(); -} - -inline void BOOST_REGEX_CALL put_mem_block(void* p) -{ - mem_block_cache::instance().put(p); -} - -#endif -} -} // namespace boost - -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif - -#endif - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/object_cache.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/object_cache.hpp deleted file mode 100644 index 98ba4c19d3..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/object_cache.hpp +++ /dev/null @@ -1,171 +0,0 @@ -/* - * - * Copyright (c) 2004 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE object_cache.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Implements a generic object cache. - */ - -#ifndef BOOST_REGEX_OBJECT_CACHE_HPP -#define BOOST_REGEX_OBJECT_CACHE_HPP - -#include <boost/regex/config.hpp> -#include <boost/shared_ptr.hpp> -#include <map> -#include <list> -#include <stdexcept> -#include <string> -#ifdef BOOST_HAS_THREADS -#include <boost/regex/pending/static_mutex.hpp> -#endif - -namespace boost{ - -template <class Key, class Object> -class object_cache -{ -public: - typedef std::pair< ::boost::shared_ptr<Object const>, Key const*> value_type; - typedef std::list<value_type> list_type; - typedef typename list_type::iterator list_iterator; - typedef std::map<Key, list_iterator> map_type; - typedef typename map_type::iterator map_iterator; - typedef typename list_type::size_type size_type; - static boost::shared_ptr<Object const> get(const Key& k, size_type l_max_cache_size); - -private: - static boost::shared_ptr<Object const> do_get(const Key& k, size_type l_max_cache_size); - - struct data - { - list_type cont; - map_type index; - }; - - // Needed by compilers not implementing the resolution to DR45. For reference, - // see http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#45. - friend struct data; -}; - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4702) -#endif -template <class Key, class Object> -boost::shared_ptr<Object const> object_cache<Key, Object>::get(const Key& k, size_type l_max_cache_size) -{ -#ifdef BOOST_HAS_THREADS - static boost::static_mutex mut = BOOST_STATIC_MUTEX_INIT; - boost::static_mutex::scoped_lock l(mut); - if (l) - { - return do_get(k, l_max_cache_size); - } - // - // what do we do if the lock fails? - // for now just throw, but we should never really get here... - // - ::boost::throw_exception(std::runtime_error("Error in thread safety code: could not acquire a lock")); -#if defined(BOOST_NO_UNREACHABLE_RETURN_DETECTION) || defined(BOOST_NO_EXCEPTIONS) - return boost::shared_ptr<Object>(); -#endif -#else - return do_get(k, l_max_cache_size); -#endif -} -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -template <class Key, class Object> -boost::shared_ptr<Object const> object_cache<Key, Object>::do_get(const Key& k, size_type l_max_cache_size) -{ - typedef typename object_cache<Key, Object>::data object_data; - typedef typename map_type::size_type map_size_type; - static object_data s_data; - - // - // see if the object is already in the cache: - // - map_iterator mpos = s_data.index.find(k); - if(mpos != s_data.index.end()) - { - // - // Eureka! - // We have a cached item, bump it up the list and return it: - // - if(--(s_data.cont.end()) != mpos->second) - { - // splice out the item we want to move: - list_type temp; - temp.splice(temp.end(), s_data.cont, mpos->second); - // and now place it at the end of the list: - s_data.cont.splice(s_data.cont.end(), temp, temp.begin()); - BOOST_REGEX_ASSERT(*(s_data.cont.back().second) == k); - // update index with new position: - mpos->second = --(s_data.cont.end()); - BOOST_REGEX_ASSERT(&(mpos->first) == mpos->second->second); - BOOST_REGEX_ASSERT(&(mpos->first) == s_data.cont.back().second); - } - return s_data.cont.back().first; - } - // - // if we get here then the item is not in the cache, - // so create it: - // - boost::shared_ptr<Object const> result(new Object(k)); - // - // Add it to the list, and index it: - // - s_data.cont.push_back(value_type(result, static_cast<Key const*>(0))); - s_data.index.insert(std::make_pair(k, --(s_data.cont.end()))); - s_data.cont.back().second = &(s_data.index.find(k)->first); - map_size_type s = s_data.index.size(); - BOOST_REGEX_ASSERT(s_data.index[k]->first.get() == result.get()); - BOOST_REGEX_ASSERT(&(s_data.index.find(k)->first) == s_data.cont.back().second); - BOOST_REGEX_ASSERT(s_data.index.find(k)->first == k); - if(s > l_max_cache_size) - { - // - // We have too many items in the list, so we need to start - // popping them off the back of the list, but only if they're - // being held uniquely by us: - // - list_iterator pos = s_data.cont.begin(); - list_iterator last = s_data.cont.end(); - while((pos != last) && (s > l_max_cache_size)) - { - if(pos->first.unique()) - { - list_iterator condemmed(pos); - ++pos; - // now remove the items from our containers, - // then order has to be as follows: - BOOST_REGEX_ASSERT(s_data.index.find(*(condemmed->second)) != s_data.index.end()); - s_data.index.erase(*(condemmed->second)); - s_data.cont.erase(condemmed); - --s; - } - else - ++pos; - } - BOOST_REGEX_ASSERT(s_data.index[k]->first.get() == result.get()); - BOOST_REGEX_ASSERT(&(s_data.index.find(k)->first) == s_data.cont.back().second); - BOOST_REGEX_ASSERT(s_data.index.find(k)->first == k); - } - return result; -} - -} - -#endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/pattern_except.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/pattern_except.hpp deleted file mode 100644 index 7aba564bbf..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/pattern_except.hpp +++ /dev/null @@ -1,128 +0,0 @@ -/* - * - * Copyright (c) 1998-2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE pattern_except.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares pattern-matching exception classes. - */ - -#ifndef BOOST_RE_V4_PAT_EXCEPT_HPP -#define BOOST_RE_V4_PAT_EXCEPT_HPP - -#ifndef BOOST_REGEX_CONFIG_HPP -#include <boost/regex/config.hpp> -#endif - -#include <cstddef> -#include <stdexcept> -#include <boost/regex/v4/error_type.hpp> -#include <boost/regex/v4/regex_traits_defaults.hpp> - -namespace boost{ - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable : 4275) -#if BOOST_MSVC >= 1800 -#pragma warning(disable : 26812) -#endif -#endif -class regex_error : public std::runtime_error -{ -public: - explicit regex_error(const std::string& s, regex_constants::error_type err = regex_constants::error_unknown, std::ptrdiff_t pos = 0) - : std::runtime_error(s) - , m_error_code(err) - , m_position(pos) - { - } - explicit regex_error(regex_constants::error_type err) - : std::runtime_error(::boost::BOOST_REGEX_DETAIL_NS::get_default_error_string(err)) - , m_error_code(err) - , m_position(0) - { - } - ~regex_error() BOOST_NOEXCEPT_OR_NOTHROW BOOST_OVERRIDE {} - regex_constants::error_type code()const - { return m_error_code; } - std::ptrdiff_t position()const - { return m_position; } - void raise()const - { -#ifndef BOOST_NO_EXCEPTIONS -#ifndef BOOST_REGEX_STANDALONE - ::boost::throw_exception(*this); -#else - throw* this; -#endif -#endif - } -private: - regex_constants::error_type m_error_code; - std::ptrdiff_t m_position; -}; - -typedef regex_error bad_pattern; -typedef regex_error bad_expression; - -namespace BOOST_REGEX_DETAIL_NS{ - -template <class E> -inline void raise_runtime_error(const E& ex) -{ -#ifndef BOOST_REGEX_STANDALONE - ::boost::throw_exception(ex); -#else - throw ex; -#endif -} - -template <class traits> -void raise_error(const traits& t, regex_constants::error_type code) -{ - (void)t; // warning suppression - regex_error e(t.error_string(code), code, 0); - ::boost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(e); -} - -} - -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -} // namespace boost - -#endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/perl_matcher.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/perl_matcher.hpp deleted file mode 100644 index 4bd7d11463..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/perl_matcher.hpp +++ /dev/null @@ -1,645 +0,0 @@ -/* - * - * Copyright (c) 2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - -#ifndef BOOST_REGEX_MATCHER_HPP -#define BOOST_REGEX_MATCHER_HPP - -#include <boost/regex/v4/iterator_category.hpp> - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#ifdef BOOST_MSVC -# pragma warning(push) -#pragma warning(disable : 4251) -#if BOOST_MSVC < 1700 -# pragma warning(disable : 4231) -#endif -# if BOOST_MSVC < 1600 -# pragma warning(disable : 4660) -# endif -#if BOOST_MSVC < 1910 -#pragma warning(disable:4800) -#endif -#endif - -namespace boost{ -namespace BOOST_REGEX_DETAIL_NS{ - -// -// error checking API: -// -inline void BOOST_REGEX_CALL verify_options(boost::regex_constants::syntax_option_type, match_flag_type mf) -{ - // - // can't mix match_extra with POSIX matching rules: - // - if ((mf & match_extra) && (mf & match_posix)) - { - std::logic_error msg("Usage Error: Can't mix regular expression captures with POSIX matching rules"); - throw_exception(msg); - } -} -// -// function can_start: -// -template <class charT> -inline bool can_start(charT c, const unsigned char* map, unsigned char mask) -{ - return ((c < static_cast<charT>(0)) ? true : ((c >= static_cast<charT>(1 << CHAR_BIT)) ? true : map[c] & mask)); -} -inline bool can_start(char c, const unsigned char* map, unsigned char mask) -{ - return map[(unsigned char)c] & mask; -} -inline bool can_start(signed char c, const unsigned char* map, unsigned char mask) -{ - return map[(unsigned char)c] & mask; -} -inline bool can_start(unsigned char c, const unsigned char* map, unsigned char mask) -{ - return map[c] & mask; -} -inline bool can_start(unsigned short c, const unsigned char* map, unsigned char mask) -{ - return ((c >= (1 << CHAR_BIT)) ? true : map[c] & mask); -} -#if !defined(__hpux) && !defined(__WINSCW__)// WCHAR_MIN not usable in pp-directives. -#if defined(WCHAR_MIN) && (WCHAR_MIN == 0) && !defined(BOOST_NO_INTRINSIC_WCHAR_T) -inline bool can_start(wchar_t c, const unsigned char* map, unsigned char mask) -{ - return ((c >= static_cast<wchar_t>(1u << CHAR_BIT)) ? true : map[c] & mask); -} -#endif -#endif -#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) -inline bool can_start(unsigned int c, const unsigned char* map, unsigned char mask) -{ - return (((c >= static_cast<unsigned int>(1u << CHAR_BIT)) ? true : map[c] & mask)); -} -#endif - - -// -// Unfortunately Rogue Waves standard library appears to have a bug -// in std::basic_string::compare that results in erroneous answers -// in some cases (tested with Borland C++ 5.1, Rogue Wave lib version -// 0x020101) the test case was: -// {39135,0} < {0xff,0} -// which succeeds when it should not. -// -#ifndef _RWSTD_VER -template <class C, class T, class A> -inline int string_compare(const std::basic_string<C,T,A>& s, const C* p) -{ - if(0 == *p) - { - if(s.empty() || ((s.size() == 1) && (s[0] == 0))) - return 0; - } - return s.compare(p); -} -#else -template <class C, class T, class A> -inline int string_compare(const std::basic_string<C,T,A>& s, const C* p) -{ - if(0 == *p) - { - if(s.empty() || ((s.size() == 1) && (s[0] == 0))) - return 0; - } - return s.compare(p); -} -inline int string_compare(const std::string& s, const char* p) -{ return std::strcmp(s.c_str(), p); } -# ifndef BOOST_NO_WREGEX -inline int string_compare(const std::wstring& s, const wchar_t* p) -{ return std::wcscmp(s.c_str(), p); } -#endif -#endif -template <class Seq, class C> -inline int string_compare(const Seq& s, const C* p) -{ - std::size_t i = 0; - while((i < s.size()) && (p[i] == s[i])) - { - ++i; - } - return (i == s.size()) ? -(int)p[i] : (int)s[i] - (int)p[i]; -} -# define STR_COMP(s,p) string_compare(s,p) - -template<class charT> -inline const charT* re_skip_past_null(const charT* p) -{ - while (*p != static_cast<charT>(0)) ++p; - return ++p; -} - -template <class iterator, class charT, class traits_type, class char_classT> -iterator BOOST_REGEX_CALL re_is_set_member(iterator next, - iterator last, - const re_set_long<char_classT>* set_, - const regex_data<charT, traits_type>& e, bool icase) -{ - const charT* p = reinterpret_cast<const charT*>(set_+1); - iterator ptr; - unsigned int i; - //bool icase = e.m_flags & regex_constants::icase; - - if(next == last) return next; - - typedef typename traits_type::string_type traits_string_type; - const ::boost::regex_traits_wrapper<traits_type>& traits_inst = *(e.m_ptraits); - - // dwa 9/13/00 suppress incorrect MSVC warning - it claims this is never - // referenced - (void)traits_inst; - - // try and match a single character, could be a multi-character - // collating element... - for(i = 0; i < set_->csingles; ++i) - { - ptr = next; - if(*p == static_cast<charT>(0)) - { - // treat null string as special case: - if(traits_inst.translate(*ptr, icase)) - { - ++p; - continue; - } - return set_->isnot ? next : (ptr == next) ? ++next : ptr; - } - else - { - while(*p && (ptr != last)) - { - if(traits_inst.translate(*ptr, icase) != *p) - break; - ++p; - ++ptr; - } - - if(*p == static_cast<charT>(0)) // if null we've matched - return set_->isnot ? next : (ptr == next) ? ++next : ptr; - - p = re_skip_past_null(p); // skip null - } - } - - charT col = traits_inst.translate(*next, icase); - - - if(set_->cranges || set_->cequivalents) - { - traits_string_type s1; - // - // try and match a range, NB only a single character can match - if(set_->cranges) - { - if((e.m_flags & regex_constants::collate) == 0) - s1.assign(1, col); - else - { - charT a[2] = { col, charT(0), }; - s1 = traits_inst.transform(a, a + 1); - } - for(i = 0; i < set_->cranges; ++i) - { - if(STR_COMP(s1, p) >= 0) - { - do{ ++p; }while(*p); - ++p; - if(STR_COMP(s1, p) <= 0) - return set_->isnot ? next : ++next; - } - else - { - // skip first string - do{ ++p; }while(*p); - ++p; - } - // skip second string - do{ ++p; }while(*p); - ++p; - } - } - // - // try and match an equivalence class, NB only a single character can match - if(set_->cequivalents) - { - charT a[2] = { col, charT(0), }; - s1 = traits_inst.transform_primary(a, a +1); - for(i = 0; i < set_->cequivalents; ++i) - { - if(STR_COMP(s1, p) == 0) - return set_->isnot ? next : ++next; - // skip string - do{ ++p; }while(*p); - ++p; - } - } - } - if(traits_inst.isctype(col, set_->cclasses) == true) - return set_->isnot ? next : ++next; - if((set_->cnclasses != 0) && (traits_inst.isctype(col, set_->cnclasses) == false)) - return set_->isnot ? next : ++next; - return set_->isnot ? ++next : next; -} - -template <class BidiIterator> -class repeater_count -{ - repeater_count** stack; - repeater_count* next; - int state_id; - std::size_t count; // the number of iterations so far - BidiIterator start_pos; // where the last repeat started - - repeater_count* unwind_until(int n, repeater_count* p, int current_recursion_id) - { - while(p && (p->state_id != n)) - { - if(-2 - current_recursion_id == p->state_id) - return 0; - p = p->next; - if(p && (p->state_id < 0)) - { - p = unwind_until(p->state_id, p, current_recursion_id); - if(!p) - return p; - p = p->next; - } - } - return p; - } -public: - repeater_count(repeater_count** s) : stack(s), next(0), state_id(-1), count(0), start_pos() {} - - repeater_count(int i, repeater_count** s, BidiIterator start, int current_recursion_id) - : start_pos(start) - { - state_id = i; - stack = s; - next = *stack; - *stack = this; - if((state_id > next->state_id) && (next->state_id >= 0)) - count = 0; - else - { - repeater_count* p = next; - p = unwind_until(state_id, p, current_recursion_id); - if(p) - { - count = p->count; - start_pos = p->start_pos; - } - else - count = 0; - } - } - ~repeater_count() - { - if(next) - *stack = next; - } - std::size_t get_count() { return count; } - int get_id() { return state_id; } - std::size_t operator++() { return ++count; } - bool check_null_repeat(const BidiIterator& pos, std::size_t max) - { - // this is called when we are about to start a new repeat, - // if the last one was NULL move our count to max, - // otherwise save the current position. - bool result = (count == 0) ? false : (pos == start_pos); - if(result) - count = max; - else - start_pos = pos; - return result; - } -}; - -struct saved_state; - -enum saved_state_type -{ - saved_type_end = 0, - saved_type_paren = 1, - saved_type_recurse = 2, - saved_type_assertion = 3, - saved_state_alt = 4, - saved_state_repeater_count = 5, - saved_state_extra_block = 6, - saved_state_greedy_single_repeat = 7, - saved_state_rep_slow_dot = 8, - saved_state_rep_fast_dot = 9, - saved_state_rep_char = 10, - saved_state_rep_short_set = 11, - saved_state_rep_long_set = 12, - saved_state_non_greedy_long_repeat = 13, - saved_state_count = 14 -}; - -#ifdef BOOST_MSVC -# pragma warning(push) -#if BOOST_MSVC >= 1800 -#pragma warning(disable:26495) -#endif -#endif -template <class Results> -struct recursion_info -{ - typedef typename Results::value_type value_type; - typedef typename value_type::iterator iterator; - int idx; - const re_syntax_base* preturn_address; - Results results; - repeater_count<iterator>* repeater_stack; - iterator location_of_start; -}; -#ifdef BOOST_MSVC -# pragma warning(pop) -#endif - -template <class BidiIterator, class Allocator, class traits> -class perl_matcher -{ -public: - typedef typename traits::char_type char_type; - typedef perl_matcher<BidiIterator, Allocator, traits> self_type; - typedef bool (self_type::*matcher_proc_type)(); - typedef std::size_t traits_size_type; - typedef typename is_byte<char_type>::width_type width_type; - typedef typename regex_iterator_traits<BidiIterator>::difference_type difference_type; - typedef match_results<BidiIterator, Allocator> results_type; - - perl_matcher(BidiIterator first, BidiIterator end, - match_results<BidiIterator, Allocator>& what, - const basic_regex<char_type, traits>& e, - match_flag_type f, - BidiIterator l_base) - : m_result(what), base(first), last(end), - position(first), backstop(l_base), re(e), traits_inst(e.get_traits()), - m_independent(false), next_count(&rep_obj), rep_obj(&next_count) -#ifdef BOOST_REGEX_NON_RECURSIVE - , m_recursions(0) -#endif - { - construct_init(e, f); - } - - bool match(); - bool find(); - - void setf(match_flag_type f) - { m_match_flags |= f; } - void unsetf(match_flag_type f) - { m_match_flags &= ~f; } - -private: - void construct_init(const basic_regex<char_type, traits>& e, match_flag_type f); - - bool find_imp(); - bool match_imp(); -#ifdef BOOST_REGEX_HAS_MS_STACK_GUARD - typedef bool (perl_matcher::*protected_proc_type)(); - bool protected_call(protected_proc_type); -#endif - void estimate_max_state_count(std::random_access_iterator_tag*); - void estimate_max_state_count(void*); - bool match_prefix(); - bool match_all_states(); - - // match procs, stored in s_match_vtable: - bool match_startmark(); - bool match_endmark(); - bool match_literal(); - bool match_start_line(); - bool match_end_line(); - bool match_wild(); - bool match_match(); - bool match_word_boundary(); - bool match_within_word(); - bool match_word_start(); - bool match_word_end(); - bool match_buffer_start(); - bool match_buffer_end(); - bool match_backref(); - bool match_long_set(); - bool match_set(); - bool match_jump(); - bool match_alt(); - bool match_rep(); - bool match_combining(); - bool match_soft_buffer_end(); - bool match_restart_continue(); - bool match_long_set_repeat(); - bool match_set_repeat(); - bool match_char_repeat(); - bool match_dot_repeat_fast(); - bool match_dot_repeat_slow(); - bool match_dot_repeat_dispatch() - { - return ::boost::is_random_access_iterator<BidiIterator>::value ? match_dot_repeat_fast() : match_dot_repeat_slow(); - } - bool match_backstep(); - bool match_assert_backref(); - bool match_toggle_case(); -#ifdef BOOST_REGEX_RECURSIVE - bool backtrack_till_match(std::size_t count); -#endif - bool match_recursion(); - bool match_fail(); - bool match_accept(); - bool match_commit(); - bool match_then(); - bool skip_until_paren(int index, bool match = true); - - // find procs stored in s_find_vtable: - bool find_restart_any(); - bool find_restart_word(); - bool find_restart_line(); - bool find_restart_buf(); - bool find_restart_lit(); - -private: - // final result structure to be filled in: - match_results<BidiIterator, Allocator>& m_result; - // temporary result for POSIX matches: - scoped_ptr<match_results<BidiIterator, Allocator> > m_temp_match; - // pointer to actual result structure to fill in: - match_results<BidiIterator, Allocator>* m_presult; - // start of sequence being searched: - BidiIterator base; - // end of sequence being searched: - BidiIterator last; - // current character being examined: - BidiIterator position; - // where to restart next search after failed match attempt: - BidiIterator restart; - // where the current search started from, acts as base for $` during grep: - BidiIterator search_base; - // how far we can go back when matching lookbehind: - BidiIterator backstop; - // the expression being examined: - const basic_regex<char_type, traits>& re; - // the expression's traits class: - const ::boost::regex_traits_wrapper<traits>& traits_inst; - // the next state in the machine being matched: - const re_syntax_base* pstate; - // matching flags in use: - match_flag_type m_match_flags; - // how many states we have examined so far: - std::ptrdiff_t state_count; - // max number of states to examine before giving up: - std::ptrdiff_t max_state_count; - // whether we should ignore case or not: - bool icase; - // set to true when (position == last), indicates that we may have a partial match: - bool m_has_partial_match; - // set to true whenever we get a match: - bool m_has_found_match; - // set to true whenever we're inside an independent sub-expression: - bool m_independent; - // the current repeat being examined: - repeater_count<BidiIterator>* next_count; - // the first repeat being examined (top of linked list): - repeater_count<BidiIterator> rep_obj; - // the mask to pass when matching word boundaries: - typename traits::char_class_type m_word_mask; - // the bitmask to use when determining whether a match_any matches a newline or not: - unsigned char match_any_mask; - // recursion information: - std::vector<recursion_info<results_type> > recursion_stack; -#ifdef BOOST_REGEX_RECURSIVE - // Set to false by a (*COMMIT): - bool m_can_backtrack; - bool m_have_accept; - bool m_have_then; -#endif -#ifdef BOOST_REGEX_NON_RECURSIVE - // - // additional members for non-recursive version: - // - typedef bool (self_type::*unwind_proc_type)(bool); - - void extend_stack(); - bool unwind(bool); - bool unwind_end(bool); - bool unwind_paren(bool); - bool unwind_recursion_stopper(bool); - bool unwind_assertion(bool); - bool unwind_alt(bool); - bool unwind_repeater_counter(bool); - bool unwind_extra_block(bool); - bool unwind_greedy_single_repeat(bool); - bool unwind_slow_dot_repeat(bool); - bool unwind_fast_dot_repeat(bool); - bool unwind_char_repeat(bool); - bool unwind_short_set_repeat(bool); - bool unwind_long_set_repeat(bool); - bool unwind_non_greedy_repeat(bool); - bool unwind_recursion(bool); - bool unwind_recursion_pop(bool); - bool unwind_commit(bool); - bool unwind_then(bool); - bool unwind_case(bool); - void destroy_single_repeat(); - void push_matched_paren(int index, const sub_match<BidiIterator>& sub); - void push_recursion_stopper(); - void push_assertion(const re_syntax_base* ps, bool positive); - void push_alt(const re_syntax_base* ps); - void push_repeater_count(int i, repeater_count<BidiIterator>** s); - void push_single_repeat(std::size_t c, const re_repeat* r, BidiIterator last_position, int state_id); - void push_non_greedy_repeat(const re_syntax_base* ps); - void push_recursion(int idx, const re_syntax_base* p, results_type* presults, results_type* presults2); - void push_recursion_pop(); - void push_case_change(bool); - - // pointer to base of stack: - saved_state* m_stack_base; - // pointer to current stack position: - saved_state* m_backup_state; - // how many memory blocks have we used up?: - unsigned used_block_count; - // determines what value to return when unwinding from recursion, - // allows for mixed recursive/non-recursive algorithm: - bool m_recursive_result; - // We have unwound to a lookahead/lookbehind, used by COMMIT/PRUNE/SKIP: - bool m_unwound_lookahead; - // We have unwound to an alternative, used by THEN: - bool m_unwound_alt; - // We are unwinding a commit - used by independent subs to determine whether to stop there or carry on unwinding: - //bool m_unwind_commit; - // Recursion limit: - unsigned m_recursions; -#endif - -#ifdef BOOST_MSVC -# pragma warning(push) -#if BOOST_MSVC >= 1800 -#pragma warning(disable:26495) -#endif -#endif - // these operations aren't allowed, so are declared private, - // bodies are provided to keep explicit-instantiation requests happy: - perl_matcher& operator=(const perl_matcher&) - { - return *this; - } - perl_matcher(const perl_matcher& that) - : m_result(that.m_result), re(that.re), traits_inst(that.traits_inst), rep_obj(0) {} -#ifdef BOOST_MSVC -# pragma warning(pop) -#endif -}; - -} // namespace BOOST_REGEX_DETAIL_NS - -#ifdef BOOST_MSVC -# pragma warning(pop) -#endif - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -} // namespace boost - -// -// include the implementation of perl_matcher: -// -#ifdef BOOST_REGEX_RECURSIVE -#include <boost/regex/v4/perl_matcher_recursive.hpp> -#else -#include <boost/regex/v4/perl_matcher_non_recursive.hpp> -#endif -// this one has to be last: -#include <boost/regex/v4/perl_matcher_common.hpp> - -#endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/perl_matcher_common.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/perl_matcher_common.hpp deleted file mode 100644 index 7cf0574beb..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/perl_matcher_common.hpp +++ /dev/null @@ -1,1030 +0,0 @@ -/* - * - * Copyright (c) 2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE perl_matcher_common.cpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Definitions of perl_matcher member functions that are - * common to both the recursive and non-recursive versions. - */ - -#ifndef BOOST_REGEX_V4_PERL_MATCHER_COMMON_HPP -#define BOOST_REGEX_V4_PERL_MATCHER_COMMON_HPP - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#if BOOST_MSVC >= 1800 -#pragma warning(disable: 26812) -#endif -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#ifdef BOOST_BORLANDC -# pragma option push -w-8008 -w-8066 -#endif -#ifdef BOOST_MSVC -# pragma warning(push) -#if BOOST_MSVC < 1910 -#pragma warning(disable:4800) -#endif -#endif - -namespace boost{ -namespace BOOST_REGEX_DETAIL_NS{ - -#ifdef BOOST_MSVC -# pragma warning(push) -#pragma warning(disable:26812) -#endif - template <class BidiIterator, class Allocator, class traits> -void perl_matcher<BidiIterator, Allocator, traits>::construct_init(const basic_regex<char_type, traits>& e, match_flag_type f) -{ - typedef typename regex_iterator_traits<BidiIterator>::iterator_category category; - typedef typename basic_regex<char_type, traits>::flag_type expression_flag_type; - - if(e.empty()) - { - // precondition failure: e is not a valid regex. - std::invalid_argument ex("Invalid regular expression object"); - boost::throw_exception(ex); - } - pstate = 0; - m_match_flags = f; - estimate_max_state_count(static_cast<category*>(0)); - expression_flag_type re_f = re.flags(); - icase = re_f & regex_constants::icase; - if(!(m_match_flags & (match_perl|match_posix))) - { - if((re_f & (regbase::main_option_type|regbase::no_perl_ex)) == 0) - m_match_flags |= match_perl; - else if((re_f & (regbase::main_option_type|regbase::emacs_ex)) == (regbase::basic_syntax_group|regbase::emacs_ex)) - m_match_flags |= match_perl; - else if((re_f & (regbase::main_option_type|regbase::literal)) == (regbase::literal)) - m_match_flags |= match_perl; - else - m_match_flags |= match_posix; - } - if(m_match_flags & match_posix) - { - m_temp_match.reset(new match_results<BidiIterator, Allocator>()); - m_presult = m_temp_match.get(); - } - else - m_presult = &m_result; -#ifdef BOOST_REGEX_NON_RECURSIVE - m_stack_base = 0; - m_backup_state = 0; -#elif defined(BOOST_REGEX_RECURSIVE) - m_can_backtrack = true; - m_have_accept = false; -#endif - // find the value to use for matching word boundaries: - m_word_mask = re.get_data().m_word_mask; - // find bitmask to use for matching '.': - match_any_mask = static_cast<unsigned char>((f & match_not_dot_newline) ? BOOST_REGEX_DETAIL_NS::test_not_newline : BOOST_REGEX_DETAIL_NS::test_newline); - // Disable match_any if requested in the state machine: - if(e.get_data().m_disable_match_any) - m_match_flags &= regex_constants::match_not_any; -} -#ifdef BOOST_MSVC -# pragma warning(pop) -#endif - -template <class BidiIterator, class Allocator, class traits> -void perl_matcher<BidiIterator, Allocator, traits>::estimate_max_state_count(std::random_access_iterator_tag*) -{ - // - // How many states should we allow our machine to visit before giving up? - // This is a heuristic: it takes the greater of O(N^2) and O(NS^2) - // where N is the length of the string, and S is the number of states - // in the machine. It's tempting to up this to O(N^2S) or even O(N^2S^2) - // but these take unreasonably amounts of time to bale out in pathological - // cases. - // - // Calculate NS^2 first: - // - static const std::ptrdiff_t k = 100000; - std::ptrdiff_t dist = boost::BOOST_REGEX_DETAIL_NS::distance(base, last); - if(dist == 0) - dist = 1; - std::ptrdiff_t states = re.size(); - if(states == 0) - states = 1; - if ((std::numeric_limits<std::ptrdiff_t>::max)() / states < states) - { - max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits<std::ptrdiff_t>::max)() - 2); - return; - } - states *= states; - if((std::numeric_limits<std::ptrdiff_t>::max)() / dist < states) - { - max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits<std::ptrdiff_t>::max)() - 2); - return; - } - states *= dist; - if((std::numeric_limits<std::ptrdiff_t>::max)() - k < states) - { - max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits<std::ptrdiff_t>::max)() - 2); - return; - } - states += k; - - max_state_count = states; - - // - // Now calculate N^2: - // - states = dist; - if((std::numeric_limits<std::ptrdiff_t>::max)() / dist < states) - { - max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits<std::ptrdiff_t>::max)() - 2); - return; - } - states *= dist; - if((std::numeric_limits<std::ptrdiff_t>::max)() - k < states) - { - max_state_count = (std::min)((std::ptrdiff_t)BOOST_REGEX_MAX_STATE_COUNT, (std::numeric_limits<std::ptrdiff_t>::max)() - 2); - return; - } - states += k; - // - // N^2 can be a very large number indeed, to prevent things getting out - // of control, cap the max states: - // - if(states > BOOST_REGEX_MAX_STATE_COUNT) - states = BOOST_REGEX_MAX_STATE_COUNT; - // - // If (the possibly capped) N^2 is larger than our first estimate, - // use this instead: - // - if(states > max_state_count) - max_state_count = states; -} - -template <class BidiIterator, class Allocator, class traits> -inline void perl_matcher<BidiIterator, Allocator, traits>::estimate_max_state_count(void*) -{ - // we don't know how long the sequence is: - max_state_count = BOOST_REGEX_MAX_STATE_COUNT; -} - -#ifdef BOOST_REGEX_HAS_MS_STACK_GUARD -template <class BidiIterator, class Allocator, class traits> -inline bool perl_matcher<BidiIterator, Allocator, traits>::protected_call( - protected_proc_type proc) -{ - ::boost::BOOST_REGEX_DETAIL_NS::concrete_protected_call - <perl_matcher<BidiIterator, Allocator, traits> > - obj(this, proc); - return obj.execute(); - -} -#endif - -template <class BidiIterator, class Allocator, class traits> -inline bool perl_matcher<BidiIterator, Allocator, traits>::match() -{ -#ifdef BOOST_REGEX_HAS_MS_STACK_GUARD - return protected_call(&perl_matcher<BidiIterator, Allocator, traits>::match_imp); -#else - return match_imp(); -#endif -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_imp() -{ - // initialise our stack if we are non-recursive: -#ifdef BOOST_REGEX_NON_RECURSIVE - save_state_init init(&m_stack_base, &m_backup_state); - used_block_count = BOOST_REGEX_MAX_BLOCKS; -#if !defined(BOOST_NO_EXCEPTIONS) - try{ -#endif -#endif - - // reset our state machine: - position = base; - search_base = base; - state_count = 0; - m_match_flags |= regex_constants::match_all; - m_presult->set_size((m_match_flags & match_nosubs) ? 1u : static_cast<typename results_type::size_type>(1u + re.mark_count()), search_base, last); - m_presult->set_base(base); - m_presult->set_named_subs(this->re.get_named_subs()); - if(m_match_flags & match_posix) - m_result = *m_presult; - verify_options(re.flags(), m_match_flags); - if(0 == match_prefix()) - return false; - return (m_result[0].second == last) && (m_result[0].first == base); - -#if defined(BOOST_REGEX_NON_RECURSIVE) && !defined(BOOST_NO_EXCEPTIONS) - } - catch(...) - { - // unwind all pushed states, apart from anything else this - // ensures that all the states are correctly destructed - // not just the memory freed. - while(unwind(true)){} - throw; - } -#endif -} - -template <class BidiIterator, class Allocator, class traits> -inline bool perl_matcher<BidiIterator, Allocator, traits>::find() -{ -#ifdef BOOST_REGEX_HAS_MS_STACK_GUARD - return protected_call(&perl_matcher<BidiIterator, Allocator, traits>::find_imp); -#else - return find_imp(); -#endif -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::find_imp() -{ - static matcher_proc_type const s_find_vtable[7] = - { - &perl_matcher<BidiIterator, Allocator, traits>::find_restart_any, - &perl_matcher<BidiIterator, Allocator, traits>::find_restart_word, - &perl_matcher<BidiIterator, Allocator, traits>::find_restart_line, - &perl_matcher<BidiIterator, Allocator, traits>::find_restart_buf, - &perl_matcher<BidiIterator, Allocator, traits>::match_prefix, - &perl_matcher<BidiIterator, Allocator, traits>::find_restart_lit, - &perl_matcher<BidiIterator, Allocator, traits>::find_restart_lit, - }; - - // initialise our stack if we are non-recursive: -#ifdef BOOST_REGEX_NON_RECURSIVE - save_state_init init(&m_stack_base, &m_backup_state); - used_block_count = BOOST_REGEX_MAX_BLOCKS; -#if !defined(BOOST_NO_EXCEPTIONS) - try{ -#endif -#endif - - state_count = 0; - if((m_match_flags & regex_constants::match_init) == 0) - { - // reset our state machine: - search_base = position = base; - pstate = re.get_first_state(); - m_presult->set_size((m_match_flags & match_nosubs) ? 1u : static_cast<typename results_type::size_type>(1u + re.mark_count()), base, last); - m_presult->set_base(base); - m_presult->set_named_subs(this->re.get_named_subs()); - m_match_flags |= regex_constants::match_init; - } - else - { - // start again: - search_base = position = m_result[0].second; - // If last match was null and match_not_null was not set then increment - // our start position, otherwise we go into an infinite loop: - if(((m_match_flags & match_not_null) == 0) && (m_result.length() == 0)) - { - if(position == last) - return false; - else - ++position; - } - // reset $` start: - m_presult->set_size((m_match_flags & match_nosubs) ? 1u : static_cast<typename results_type::size_type>(1u + re.mark_count()), search_base, last); - //if((base != search_base) && (base == backstop)) - // m_match_flags |= match_prev_avail; - } - if(m_match_flags & match_posix) - { - m_result.set_size(static_cast<typename results_type::size_type>(1u + re.mark_count()), base, last); - m_result.set_base(base); - } - - verify_options(re.flags(), m_match_flags); - // find out what kind of expression we have: - unsigned type = (m_match_flags & match_continuous) ? - static_cast<unsigned int>(regbase::restart_continue) - : static_cast<unsigned int>(re.get_restart_type()); - - // call the appropriate search routine: - matcher_proc_type proc = s_find_vtable[type]; - return (this->*proc)(); - -#if defined(BOOST_REGEX_NON_RECURSIVE) && !defined(BOOST_NO_EXCEPTIONS) - } - catch(...) - { - // unwind all pushed states, apart from anything else this - // ensures that all the states are correctly destructed - // not just the memory freed. - while(unwind(true)){} - throw; - } -#endif -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_prefix() -{ - m_has_partial_match = false; - m_has_found_match = false; - pstate = re.get_first_state(); - m_presult->set_first(position); - restart = position; - match_all_states(); - if(!m_has_found_match && m_has_partial_match && (m_match_flags & match_partial)) - { - m_has_found_match = true; - m_presult->set_second(last, 0, false); - position = last; - if((m_match_flags & match_posix) == match_posix) - { - m_result.maybe_assign(*m_presult); - } - } -#ifdef BOOST_REGEX_MATCH_EXTRA - if(m_has_found_match && (match_extra & m_match_flags)) - { - // - // we have a match, reverse the capture information: - // - for(unsigned i = 0; i < m_presult->size(); ++i) - { - typename sub_match<BidiIterator>::capture_sequence_type & seq = ((*m_presult)[i]).get_captures(); - std::reverse(seq.begin(), seq.end()); - } - } -#endif - if(!m_has_found_match) - position = restart; // reset search postion -#ifdef BOOST_REGEX_RECURSIVE - m_can_backtrack = true; // reset for further searches -#endif - return m_has_found_match; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_literal() -{ - unsigned int len = static_cast<const re_literal*>(pstate)->length; - const char_type* what = reinterpret_cast<const char_type*>(static_cast<const re_literal*>(pstate) + 1); - // - // compare string with what we stored in - // our records: - for(unsigned int i = 0; i < len; ++i, ++position) - { - if((position == last) || (traits_inst.translate(*position, icase) != what[i])) - return false; - } - pstate = pstate->next.p; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_start_line() -{ - if(position == backstop) - { - if((m_match_flags & match_prev_avail) == 0) - { - if((m_match_flags & match_not_bol) == 0) - { - pstate = pstate->next.p; - return true; - } - return false; - } - } - else if(m_match_flags & match_single_line) - return false; - - // check the previous value character: - BidiIterator t(position); - --t; - if(position != last) - { - if(is_separator(*t) && !((*t == static_cast<char_type>('\r')) && (*position == static_cast<char_type>('\n'))) ) - { - pstate = pstate->next.p; - return true; - } - } - else if(is_separator(*t)) - { - pstate = pstate->next.p; - return true; - } - return false; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_end_line() -{ - if(position != last) - { - if(m_match_flags & match_single_line) - return false; - // we're not yet at the end so *first is always valid: - if(is_separator(*position)) - { - if((position != backstop) || (m_match_flags & match_prev_avail)) - { - // check that we're not in the middle of \r\n sequence - BidiIterator t(position); - --t; - if((*t == static_cast<char_type>('\r')) && (*position == static_cast<char_type>('\n'))) - { - return false; - } - } - pstate = pstate->next.p; - return true; - } - } - else if((m_match_flags & match_not_eol) == 0) - { - pstate = pstate->next.p; - return true; - } - return false; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_wild() -{ - if(position == last) - return false; - if(is_separator(*position) && ((match_any_mask & static_cast<const re_dot*>(pstate)->mask) == 0)) - return false; - if((*position == char_type(0)) && (m_match_flags & match_not_dot_null)) - return false; - pstate = pstate->next.p; - ++position; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_word_boundary() -{ - bool b; // indcates whether next character is a word character - if(position != last) - { - // prev and this character must be opposites: - b = traits_inst.isctype(*position, m_word_mask); - } - else - { - if (m_match_flags & match_not_eow) - return false; - b = false; - } - if((position == backstop) && ((m_match_flags & match_prev_avail) == 0)) - { - if(m_match_flags & match_not_bow) - return false; - else - b ^= false; - } - else - { - --position; - b ^= traits_inst.isctype(*position, m_word_mask); - ++position; - } - if(b) - { - pstate = pstate->next.p; - return true; - } - return false; // no match if we get to here... -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_within_word() -{ - if(position == last) - return false; - // both prev and this character must be m_word_mask: - bool prev = traits_inst.isctype(*position, m_word_mask); - { - bool b; - if((position == backstop) && ((m_match_flags & match_prev_avail) == 0)) - return false; - else - { - --position; - b = traits_inst.isctype(*position, m_word_mask); - ++position; - } - if(b == prev) - { - pstate = pstate->next.p; - return true; - } - } - return false; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_word_start() -{ - if(position == last) - return false; // can't be starting a word if we're already at the end of input - if(!traits_inst.isctype(*position, m_word_mask)) - return false; // next character isn't a word character - if((position == backstop) && ((m_match_flags & match_prev_avail) == 0)) - { - if(m_match_flags & match_not_bow) - return false; // no previous input - } - else - { - // otherwise inside buffer: - BidiIterator t(position); - --t; - if(traits_inst.isctype(*t, m_word_mask)) - return false; // previous character not non-word - } - // OK we have a match: - pstate = pstate->next.p; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_word_end() -{ - if((position == backstop) && ((m_match_flags & match_prev_avail) == 0)) - return false; // start of buffer can't be end of word - BidiIterator t(position); - --t; - if(traits_inst.isctype(*t, m_word_mask) == false) - return false; // previous character wasn't a word character - - if(position == last) - { - if(m_match_flags & match_not_eow) - return false; // end of buffer but not end of word - } - else - { - // otherwise inside buffer: - if(traits_inst.isctype(*position, m_word_mask)) - return false; // next character is a word character - } - pstate = pstate->next.p; - return true; // if we fall through to here then we've succeeded -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_buffer_start() -{ - if((position != backstop) || (m_match_flags & match_not_bob)) - return false; - // OK match: - pstate = pstate->next.p; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_buffer_end() -{ - if((position != last) || (m_match_flags & match_not_eob)) - return false; - // OK match: - pstate = pstate->next.p; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_backref() -{ - // - // Compare with what we previously matched. - // Note that this succeeds if the backref did not partisipate - // in the match, this is in line with ECMAScript, but not Perl - // or PCRE. - // - int index = static_cast<const re_brace*>(pstate)->index; - if(index >= hash_value_mask) - { - named_subexpressions::range_type r = re.get_data().equal_range(index); - BOOST_REGEX_ASSERT(r.first != r.second); - do - { - index = r.first->index; - ++r.first; - }while((r.first != r.second) && ((*m_presult)[index].matched != true)); - } - - if((m_match_flags & match_perl) && !(*m_presult)[index].matched) - return false; - - BidiIterator i = (*m_presult)[index].first; - BidiIterator j = (*m_presult)[index].second; - while(i != j) - { - if((position == last) || (traits_inst.translate(*position, icase) != traits_inst.translate(*i, icase))) - return false; - ++i; - ++position; - } - pstate = pstate->next.p; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_long_set() -{ - typedef typename traits::char_class_type char_class_type; - // let the traits class do the work: - if(position == last) - return false; - BidiIterator t = re_is_set_member(position, last, static_cast<const re_set_long<char_class_type>*>(pstate), re.get_data(), icase); - if(t != position) - { - pstate = pstate->next.p; - position = t; - return true; - } - return false; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_set() -{ - if(position == last) - return false; - if(static_cast<const re_set*>(pstate)->_map[static_cast<unsigned char>(traits_inst.translate(*position, icase))]) - { - pstate = pstate->next.p; - ++position; - return true; - } - return false; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_jump() -{ - pstate = static_cast<const re_jump*>(pstate)->alt.p; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_combining() -{ - if(position == last) - return false; - if(is_combining(traits_inst.translate(*position, icase))) - return false; - ++position; - while((position != last) && is_combining(traits_inst.translate(*position, icase))) - ++position; - pstate = pstate->next.p; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_soft_buffer_end() -{ - if(m_match_flags & match_not_eob) - return false; - BidiIterator p(position); - while((p != last) && is_separator(traits_inst.translate(*p, icase)))++p; - if(p != last) - return false; - pstate = pstate->next.p; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_restart_continue() -{ - if(position == search_base) - { - pstate = pstate->next.p; - return true; - } - return false; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_backstep() -{ -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4127) -#endif - if( ::boost::is_random_access_iterator<BidiIterator>::value) - { - std::ptrdiff_t maxlen = ::boost::BOOST_REGEX_DETAIL_NS::distance(backstop, position); - if(maxlen < static_cast<const re_brace*>(pstate)->index) - return false; - std::advance(position, -static_cast<const re_brace*>(pstate)->index); - } - else - { - int c = static_cast<const re_brace*>(pstate)->index; - while(c--) - { - if(position == backstop) - return false; - --position; - } - } - pstate = pstate->next.p; - return true; -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif -} - -template <class BidiIterator, class Allocator, class traits> -inline bool perl_matcher<BidiIterator, Allocator, traits>::match_assert_backref() -{ - // return true if marked sub-expression N has been matched: - int index = static_cast<const re_brace*>(pstate)->index; - bool result = false; - if(index == 9999) - { - // Magic value for a (DEFINE) block: - return false; - } - else if(index > 0) - { - // Have we matched subexpression "index"? - // Check if index is a hash value: - if(index >= hash_value_mask) - { - named_subexpressions::range_type r = re.get_data().equal_range(index); - while(r.first != r.second) - { - if((*m_presult)[r.first->index].matched) - { - result = true; - break; - } - ++r.first; - } - } - else - { - result = (*m_presult)[index].matched; - } - pstate = pstate->next.p; - } - else - { - // Have we recursed into subexpression "index"? - // If index == 0 then check for any recursion at all, otherwise for recursion to -index-1. - int idx = -(index+1); - if(idx >= hash_value_mask) - { - named_subexpressions::range_type r = re.get_data().equal_range(idx); - int stack_index = recursion_stack.empty() ? -1 : recursion_stack.back().idx; - while(r.first != r.second) - { - result |= (stack_index == r.first->index); - if(result)break; - ++r.first; - } - } - else - { - result = !recursion_stack.empty() && ((recursion_stack.back().idx == idx) || (index == 0)); - } - pstate = pstate->next.p; - } - return result; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_fail() -{ - // Just force a backtrack: - return false; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_accept() -{ - if(!recursion_stack.empty()) - { - return skip_until_paren(recursion_stack.back().idx); - } - else - { - return skip_until_paren(INT_MAX); - } -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::find_restart_any() -{ -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4127) -#endif - const unsigned char* _map = re.get_map(); - while(true) - { - // skip everything we can't match: - while((position != last) && !can_start(*position, _map, (unsigned char)mask_any) ) - ++position; - if(position == last) - { - // run out of characters, try a null match if possible: - if(re.can_be_null()) - return match_prefix(); - break; - } - // now try and obtain a match: - if(match_prefix()) - return true; - if(position == last) - return false; - ++position; - } - return false; -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::find_restart_word() -{ -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4127) -#endif - // do search optimised for word starts: - const unsigned char* _map = re.get_map(); - if((m_match_flags & match_prev_avail) || (position != base)) - --position; - else if(match_prefix()) - return true; - do - { - while((position != last) && traits_inst.isctype(*position, m_word_mask)) - ++position; - while((position != last) && !traits_inst.isctype(*position, m_word_mask)) - ++position; - if(position == last) - break; - - if(can_start(*position, _map, (unsigned char)mask_any) ) - { - if(match_prefix()) - return true; - } - if(position == last) - break; - } while(true); - return false; -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::find_restart_line() -{ - // do search optimised for line starts: - const unsigned char* _map = re.get_map(); - if(match_prefix()) - return true; - while(position != last) - { - while((position != last) && !is_separator(*position)) - ++position; - if(position == last) - return false; - ++position; - if(position == last) - { - if(re.can_be_null() && match_prefix()) - return true; - return false; - } - - if( can_start(*position, _map, (unsigned char)mask_any) ) - { - if(match_prefix()) - return true; - } - if(position == last) - return false; - //++position; - } - return false; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::find_restart_buf() -{ - if((position == base) && ((m_match_flags & match_not_bob) == 0)) - return match_prefix(); - return false; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::find_restart_lit() -{ -#if 0 - if(position == last) - return false; // can't possibly match if we're at the end already - - unsigned type = (m_match_flags & match_continuous) ? - static_cast<unsigned int>(regbase::restart_continue) - : static_cast<unsigned int>(re.get_restart_type()); - - const kmp_info<char_type>* info = access::get_kmp(re); - int len = info->len; - const char_type* x = info->pstr; - int j = 0; - while (position != last) - { - while((j > -1) && (x[j] != traits_inst.translate(*position, icase))) - j = info->kmp_next[j]; - ++position; - ++j; - if(j >= len) - { - if(type == regbase::restart_fixed_lit) - { - std::advance(position, -j); - restart = position; - std::advance(restart, len); - m_result.set_first(position); - m_result.set_second(restart); - position = restart; - return true; - } - else - { - restart = position; - std::advance(position, -j); - if(match_prefix()) - return true; - else - { - for(int k = 0; (restart != position) && (k < j); ++k, --restart) - {} // dwa 10/20/2000 - warning suppression for MWCW - if(restart != last) - ++restart; - position = restart; - j = 0; //we could do better than this... - } - } - } - } - if((m_match_flags & match_partial) && (position == last) && j) - { - // we need to check for a partial match: - restart = position; - std::advance(position, -j); - return match_prefix(); - } -#endif - return false; -} - -} // namespace BOOST_REGEX_DETAIL_NS - -} // namespace boost - -#ifdef BOOST_MSVC -# pragma warning(pop) -#endif - -#ifdef BOOST_BORLANDC -# pragma option pop -#endif -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#endif - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/perl_matcher_non_recursive.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/perl_matcher_non_recursive.hpp deleted file mode 100644 index 670efbab07..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/perl_matcher_non_recursive.hpp +++ /dev/null @@ -1,1947 +0,0 @@ -/* - * - * Copyright (c) 2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE perl_matcher_common.cpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Definitions of perl_matcher member functions that are - * specific to the non-recursive implementation. - */ - -#ifndef BOOST_REGEX_V4_PERL_MATCHER_NON_RECURSIVE_HPP -#define BOOST_REGEX_V4_PERL_MATCHER_NON_RECURSIVE_HPP - -#include <boost/regex/v4/mem_block_cache.hpp> - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif -#ifdef BOOST_MSVC -# pragma warning(push) -# pragma warning(disable: 4706) -#if BOOST_MSVC < 1910 -#pragma warning(disable:4800) -#endif -#endif - -namespace boost{ -namespace BOOST_REGEX_DETAIL_NS{ - -template <class T> -inline void inplace_destroy(T* p) -{ - (void)p; // warning suppression - p->~T(); -} - -struct saved_state -{ - union{ - unsigned int state_id; - // this padding ensures correct alignment on 64-bit platforms: - std::size_t padding1; - std::ptrdiff_t padding2; - void* padding3; - }; - saved_state(unsigned i) : state_id(i) {} -}; - -template <class BidiIterator> -struct saved_matched_paren : public saved_state -{ - int index; - sub_match<BidiIterator> sub; - saved_matched_paren(int i, const sub_match<BidiIterator>& s) : saved_state(1), index(i), sub(s){} -}; - -template <class BidiIterator> -struct saved_position : public saved_state -{ - const re_syntax_base* pstate; - BidiIterator position; - saved_position(const re_syntax_base* ps, BidiIterator pos, int i) : saved_state(i), pstate(ps), position(pos){} -}; - -template <class BidiIterator> -struct saved_assertion : public saved_position<BidiIterator> -{ - bool positive; - saved_assertion(bool p, const re_syntax_base* ps, BidiIterator pos) - : saved_position<BidiIterator>(ps, pos, saved_type_assertion), positive(p){} -}; - -template <class BidiIterator> -struct saved_repeater : public saved_state -{ - repeater_count<BidiIterator> count; - saved_repeater(int i, repeater_count<BidiIterator>** s, BidiIterator start, int current_recursion_id) - : saved_state(saved_state_repeater_count), count(i, s, start, current_recursion_id){} -}; - -struct saved_extra_block : public saved_state -{ - saved_state *base, *end; - saved_extra_block(saved_state* b, saved_state* e) - : saved_state(saved_state_extra_block), base(b), end(e) {} -}; - -struct save_state_init -{ - saved_state** stack; - save_state_init(saved_state** base, saved_state** end) - : stack(base) - { - *base = static_cast<saved_state*>(get_mem_block()); - *end = reinterpret_cast<saved_state*>(reinterpret_cast<char*>(*base)+BOOST_REGEX_BLOCKSIZE); - --(*end); - (void) new (*end)saved_state(0); - BOOST_REGEX_ASSERT(*end > *base); - } - ~save_state_init() - { - put_mem_block(*stack); - *stack = 0; - } -}; - -template <class BidiIterator> -struct saved_single_repeat : public saved_state -{ - std::size_t count; - const re_repeat* rep; - BidiIterator last_position; - saved_single_repeat(std::size_t c, const re_repeat* r, BidiIterator lp, int arg_id) - : saved_state(arg_id), count(c), rep(r), last_position(lp){} -}; - -template <class Results> -struct saved_recursion : public saved_state -{ - saved_recursion(int idx, const re_syntax_base* p, Results* pr, Results* pr2) - : saved_state(14), recursion_id(idx), preturn_address(p), internal_results(*pr), prior_results(*pr2) {} - int recursion_id; - const re_syntax_base* preturn_address; - Results internal_results, prior_results; -}; - -struct saved_change_case : public saved_state -{ - bool icase; - saved_change_case(bool c) : saved_state(18), icase(c) {} -}; - -struct incrementer -{ - incrementer(unsigned* pu) : m_pu(pu) { ++*m_pu; } - ~incrementer() { --*m_pu; } - bool operator > (unsigned i) { return *m_pu > i; } -private: - unsigned* m_pu; -}; - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_all_states() -{ - static matcher_proc_type const s_match_vtable[34] = - { - (&perl_matcher<BidiIterator, Allocator, traits>::match_startmark), - &perl_matcher<BidiIterator, Allocator, traits>::match_endmark, - &perl_matcher<BidiIterator, Allocator, traits>::match_literal, - &perl_matcher<BidiIterator, Allocator, traits>::match_start_line, - &perl_matcher<BidiIterator, Allocator, traits>::match_end_line, - &perl_matcher<BidiIterator, Allocator, traits>::match_wild, - &perl_matcher<BidiIterator, Allocator, traits>::match_match, - &perl_matcher<BidiIterator, Allocator, traits>::match_word_boundary, - &perl_matcher<BidiIterator, Allocator, traits>::match_within_word, - &perl_matcher<BidiIterator, Allocator, traits>::match_word_start, - &perl_matcher<BidiIterator, Allocator, traits>::match_word_end, - &perl_matcher<BidiIterator, Allocator, traits>::match_buffer_start, - &perl_matcher<BidiIterator, Allocator, traits>::match_buffer_end, - &perl_matcher<BidiIterator, Allocator, traits>::match_backref, - &perl_matcher<BidiIterator, Allocator, traits>::match_long_set, - &perl_matcher<BidiIterator, Allocator, traits>::match_set, - &perl_matcher<BidiIterator, Allocator, traits>::match_jump, - &perl_matcher<BidiIterator, Allocator, traits>::match_alt, - &perl_matcher<BidiIterator, Allocator, traits>::match_rep, - &perl_matcher<BidiIterator, Allocator, traits>::match_combining, - &perl_matcher<BidiIterator, Allocator, traits>::match_soft_buffer_end, - &perl_matcher<BidiIterator, Allocator, traits>::match_restart_continue, - // Although this next line *should* be evaluated at compile time, in practice - // some compilers (VC++) emit run-time initialisation which breaks thread - // safety, so use a dispatch function instead: - //(::boost::is_random_access_iterator<BidiIterator>::value ? &perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_fast : &perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_slow), - &perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_dispatch, - &perl_matcher<BidiIterator, Allocator, traits>::match_char_repeat, - &perl_matcher<BidiIterator, Allocator, traits>::match_set_repeat, - &perl_matcher<BidiIterator, Allocator, traits>::match_long_set_repeat, - &perl_matcher<BidiIterator, Allocator, traits>::match_backstep, - &perl_matcher<BidiIterator, Allocator, traits>::match_assert_backref, - &perl_matcher<BidiIterator, Allocator, traits>::match_toggle_case, - &perl_matcher<BidiIterator, Allocator, traits>::match_recursion, - &perl_matcher<BidiIterator, Allocator, traits>::match_fail, - &perl_matcher<BidiIterator, Allocator, traits>::match_accept, - &perl_matcher<BidiIterator, Allocator, traits>::match_commit, - &perl_matcher<BidiIterator, Allocator, traits>::match_then, - }; - incrementer inc(&m_recursions); - if(inc > 80) - raise_error(traits_inst, regex_constants::error_complexity); - push_recursion_stopper(); - do{ - while(pstate) - { - matcher_proc_type proc = s_match_vtable[pstate->type]; - ++state_count; - if(!(this->*proc)()) - { - if(state_count > max_state_count) - raise_error(traits_inst, regex_constants::error_complexity); - if((m_match_flags & match_partial) && (position == last) && (position != search_base)) - m_has_partial_match = true; - bool successful_unwind = unwind(false); - if((m_match_flags & match_partial) && (position == last) && (position != search_base)) - m_has_partial_match = true; - if(!successful_unwind) - return m_recursive_result; - } - } - }while(unwind(true)); - return m_recursive_result; -} - -template <class BidiIterator, class Allocator, class traits> -void perl_matcher<BidiIterator, Allocator, traits>::extend_stack() -{ - if(used_block_count) - { - --used_block_count; - saved_state* stack_base; - saved_state* backup_state; - stack_base = static_cast<saved_state*>(get_mem_block()); - backup_state = reinterpret_cast<saved_state*>(reinterpret_cast<char*>(stack_base)+BOOST_REGEX_BLOCKSIZE); - saved_extra_block* block = static_cast<saved_extra_block*>(backup_state); - --block; - (void) new (block) saved_extra_block(m_stack_base, m_backup_state); - m_stack_base = stack_base; - m_backup_state = block; - } - else - raise_error(traits_inst, regex_constants::error_stack); -} - -template <class BidiIterator, class Allocator, class traits> -inline void perl_matcher<BidiIterator, Allocator, traits>::push_matched_paren(int index, const sub_match<BidiIterator>& sub) -{ - //BOOST_REGEX_ASSERT(index); - saved_matched_paren<BidiIterator>* pmp = static_cast<saved_matched_paren<BidiIterator>*>(m_backup_state); - --pmp; - if(pmp < m_stack_base) - { - extend_stack(); - pmp = static_cast<saved_matched_paren<BidiIterator>*>(m_backup_state); - --pmp; - } - (void) new (pmp)saved_matched_paren<BidiIterator>(index, sub); - m_backup_state = pmp; -} - -template <class BidiIterator, class Allocator, class traits> -inline void perl_matcher<BidiIterator, Allocator, traits>::push_case_change(bool c) -{ - //BOOST_REGEX_ASSERT(index); - saved_change_case* pmp = static_cast<saved_change_case*>(m_backup_state); - --pmp; - if(pmp < m_stack_base) - { - extend_stack(); - pmp = static_cast<saved_change_case*>(m_backup_state); - --pmp; - } - (void) new (pmp)saved_change_case(c); - m_backup_state = pmp; -} - -template <class BidiIterator, class Allocator, class traits> -inline void perl_matcher<BidiIterator, Allocator, traits>::push_recursion_stopper() -{ - saved_state* pmp = m_backup_state; - --pmp; - if(pmp < m_stack_base) - { - extend_stack(); - pmp = m_backup_state; - --pmp; - } - (void) new (pmp)saved_state(saved_type_recurse); - m_backup_state = pmp; -} - -template <class BidiIterator, class Allocator, class traits> -inline void perl_matcher<BidiIterator, Allocator, traits>::push_assertion(const re_syntax_base* ps, bool positive) -{ - saved_assertion<BidiIterator>* pmp = static_cast<saved_assertion<BidiIterator>*>(m_backup_state); - --pmp; - if(pmp < m_stack_base) - { - extend_stack(); - pmp = static_cast<saved_assertion<BidiIterator>*>(m_backup_state); - --pmp; - } - (void) new (pmp)saved_assertion<BidiIterator>(positive, ps, position); - m_backup_state = pmp; -} - -template <class BidiIterator, class Allocator, class traits> -inline void perl_matcher<BidiIterator, Allocator, traits>::push_alt(const re_syntax_base* ps) -{ - saved_position<BidiIterator>* pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state); - --pmp; - if(pmp < m_stack_base) - { - extend_stack(); - pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state); - --pmp; - } - (void) new (pmp)saved_position<BidiIterator>(ps, position, saved_state_alt); - m_backup_state = pmp; -} - -template <class BidiIterator, class Allocator, class traits> -inline void perl_matcher<BidiIterator, Allocator, traits>::push_non_greedy_repeat(const re_syntax_base* ps) -{ - saved_position<BidiIterator>* pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state); - --pmp; - if(pmp < m_stack_base) - { - extend_stack(); - pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state); - --pmp; - } - (void) new (pmp)saved_position<BidiIterator>(ps, position, saved_state_non_greedy_long_repeat); - m_backup_state = pmp; -} - -template <class BidiIterator, class Allocator, class traits> -inline void perl_matcher<BidiIterator, Allocator, traits>::push_repeater_count(int i, repeater_count<BidiIterator>** s) -{ - saved_repeater<BidiIterator>* pmp = static_cast<saved_repeater<BidiIterator>*>(m_backup_state); - --pmp; - if(pmp < m_stack_base) - { - extend_stack(); - pmp = static_cast<saved_repeater<BidiIterator>*>(m_backup_state); - --pmp; - } - (void) new (pmp)saved_repeater<BidiIterator>(i, s, position, this->recursion_stack.empty() ? (INT_MIN + 3) : this->recursion_stack.back().idx); - m_backup_state = pmp; -} - -template <class BidiIterator, class Allocator, class traits> -inline void perl_matcher<BidiIterator, Allocator, traits>::push_single_repeat(std::size_t c, const re_repeat* r, BidiIterator last_position, int state_id) -{ - saved_single_repeat<BidiIterator>* pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state); - --pmp; - if(pmp < m_stack_base) - { - extend_stack(); - pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state); - --pmp; - } - (void) new (pmp)saved_single_repeat<BidiIterator>(c, r, last_position, state_id); - m_backup_state = pmp; -} - -template <class BidiIterator, class Allocator, class traits> -inline void perl_matcher<BidiIterator, Allocator, traits>::push_recursion(int idx, const re_syntax_base* p, results_type* presults, results_type* presults2) -{ - saved_recursion<results_type>* pmp = static_cast<saved_recursion<results_type>*>(m_backup_state); - --pmp; - if(pmp < m_stack_base) - { - extend_stack(); - pmp = static_cast<saved_recursion<results_type>*>(m_backup_state); - --pmp; - } - (void) new (pmp)saved_recursion<results_type>(idx, p, presults, presults2); - m_backup_state = pmp; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_toggle_case() -{ - // change our case sensitivity: - push_case_change(this->icase); - this->icase = static_cast<const re_case*>(pstate)->icase; - pstate = pstate->next.p; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_startmark() -{ - int index = static_cast<const re_brace*>(pstate)->index; - icase = static_cast<const re_brace*>(pstate)->icase; - switch(index) - { - case 0: - pstate = pstate->next.p; - break; - case -1: - case -2: - { - // forward lookahead assert: - const re_syntax_base* next_pstate = static_cast<const re_jump*>(pstate->next.p)->alt.p->next.p; - pstate = pstate->next.p->next.p; - push_assertion(next_pstate, index == -1); - break; - } - case -3: - { - // independent sub-expression, currently this is always recursive: - bool old_independent = m_independent; - m_independent = true; - const re_syntax_base* next_pstate = static_cast<const re_jump*>(pstate->next.p)->alt.p->next.p; - pstate = pstate->next.p->next.p; - bool r = false; -#if !defined(BOOST_NO_EXCEPTIONS) - try{ -#endif - r = match_all_states(); - if(!r && !m_independent) - { - // Must be unwinding from a COMMIT/SKIP/PRUNE and the independent - // sub failed, need to unwind everything else: - while(unwind(false)); - return false; - } -#if !defined(BOOST_NO_EXCEPTIONS) - } - catch(...) - { - pstate = next_pstate; - // unwind all pushed states, apart from anything else this - // ensures that all the states are correctly destructed - // not just the memory freed. - while(unwind(true)) {} - throw; - } -#endif - pstate = next_pstate; - m_independent = old_independent; -#ifdef BOOST_REGEX_MATCH_EXTRA - if(r && (m_match_flags & match_extra)) - { - // - // our captures have been stored in *m_presult - // we need to unpack them, and insert them - // back in the right order when we unwind the stack: - // - match_results<BidiIterator, Allocator> temp_match(*m_presult); - unsigned i; - for(i = 0; i < temp_match.size(); ++i) - (*m_presult)[i].get_captures().clear(); - // match everything else: -#if !defined(BOOST_NO_EXCEPTIONS) - try{ -#endif - r = match_all_states(); -#if !defined(BOOST_NO_EXCEPTIONS) - } - catch(...) - { - pstate = next_pstate; - // unwind all pushed states, apart from anything else this - // ensures that all the states are correctly destructed - // not just the memory freed. - while(unwind(true)) {} - throw; - } -#endif - // now place the stored captures back: - for(i = 0; i < temp_match.size(); ++i) - { - typedef typename sub_match<BidiIterator>::capture_sequence_type seq; - seq& s1 = (*m_presult)[i].get_captures(); - const seq& s2 = temp_match[i].captures(); - s1.insert( - s1.end(), - s2.begin(), - s2.end()); - } - } -#endif - return r; - } - case -4: - { - // conditional expression: - const re_alt* alt = static_cast<const re_alt*>(pstate->next.p); - BOOST_REGEX_ASSERT(alt->type == syntax_element_alt); - pstate = alt->next.p; - if(pstate->type == syntax_element_assert_backref) - { - if(!match_assert_backref()) - pstate = alt->alt.p; - break; - } - else - { - // zero width assertion, have to match this recursively: - BOOST_REGEX_ASSERT(pstate->type == syntax_element_startmark); - bool negated = static_cast<const re_brace*>(pstate)->index == -2; - BidiIterator saved_position = position; - const re_syntax_base* next_pstate = static_cast<const re_jump*>(pstate->next.p)->alt.p->next.p; - pstate = pstate->next.p->next.p; -#if !defined(BOOST_NO_EXCEPTIONS) - try{ -#endif - bool r = match_all_states(); - position = saved_position; - if(negated) - r = !r; - if(r) - pstate = next_pstate; - else - pstate = alt->alt.p; -#if !defined(BOOST_NO_EXCEPTIONS) - } - catch(...) - { - pstate = next_pstate; - // unwind all pushed states, apart from anything else this - // ensures that all the states are correctly destructed - // not just the memory freed. - while(unwind(true)){} - throw; - } -#endif - break; - } - } - case -5: - { - push_matched_paren(0, (*m_presult)[0]); - m_presult->set_first(position, 0, true); - pstate = pstate->next.p; - break; - } - default: - { - BOOST_REGEX_ASSERT(index > 0); - if((m_match_flags & match_nosubs) == 0) - { - push_matched_paren(index, (*m_presult)[index]); - m_presult->set_first(position, index); - } - pstate = pstate->next.p; - break; - } - } - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_alt() -{ - bool take_first, take_second; - const re_alt* jmp = static_cast<const re_alt*>(pstate); - - // find out which of these two alternatives we need to take: - if(position == last) - { - take_first = jmp->can_be_null & mask_take; - take_second = jmp->can_be_null & mask_skip; - } - else - { - take_first = can_start(*position, jmp->_map, (unsigned char)mask_take); - take_second = can_start(*position, jmp->_map, (unsigned char)mask_skip); - } - - if(take_first) - { - // we can take the first alternative, - // see if we need to push next alternative: - if(take_second) - { - push_alt(jmp->alt.p); - } - pstate = pstate->next.p; - return true; - } - if(take_second) - { - pstate = jmp->alt.p; - return true; - } - return false; // neither option is possible -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_rep() -{ -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4127 4244) -#endif -#ifdef BOOST_BORLANDC -#pragma option push -w-8008 -w-8066 -w-8004 -#endif - const re_repeat* rep = static_cast<const re_repeat*>(pstate); - - // find out which of these two alternatives we need to take: - bool take_first, take_second; - if(position == last) - { - take_first = rep->can_be_null & mask_take; - take_second = rep->can_be_null & mask_skip; - } - else - { - take_first = can_start(*position, rep->_map, (unsigned char)mask_take); - take_second = can_start(*position, rep->_map, (unsigned char)mask_skip); - } - - if((m_backup_state->state_id != saved_state_repeater_count) - || (static_cast<saved_repeater<BidiIterator>*>(m_backup_state)->count.get_id() != rep->state_id) - || (next_count->get_id() != rep->state_id)) - { - // we're moving to a different repeat from the last - // one, so set up a counter object: - push_repeater_count(rep->state_id, &next_count); - } - // - // If we've had at least one repeat already, and the last one - // matched the NULL string then set the repeat count to - // maximum: - // - next_count->check_null_repeat(position, rep->max); - - if(next_count->get_count() < rep->min) - { - // we must take the repeat: - if(take_first) - { - // increase the counter: - ++(*next_count); - pstate = rep->next.p; - return true; - } - return false; - } - - bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent); - if(greedy) - { - // try and take the repeat if we can: - if((next_count->get_count() < rep->max) && take_first) - { - if(take_second) - { - // store position in case we fail: - push_alt(rep->alt.p); - } - // increase the counter: - ++(*next_count); - pstate = rep->next.p; - return true; - } - else if(take_second) - { - pstate = rep->alt.p; - return true; - } - return false; // can't take anything, fail... - } - else // non-greedy - { - // try and skip the repeat if we can: - if(take_second) - { - if((next_count->get_count() < rep->max) && take_first) - { - // store position in case we fail: - push_non_greedy_repeat(rep->next.p); - } - pstate = rep->alt.p; - return true; - } - if((next_count->get_count() < rep->max) && take_first) - { - // increase the counter: - ++(*next_count); - pstate = rep->next.p; - return true; - } - } - return false; -#ifdef BOOST_BORLANDC -#pragma option pop -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_slow() -{ - std::size_t count = 0; - const re_repeat* rep = static_cast<const re_repeat*>(pstate); - re_syntax_base* psingle = rep->next.p; - // match compulsory repeats first: - while(count < rep->min) - { - pstate = psingle; - if(!match_wild()) - return false; - ++count; - } - bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent); - if(greedy) - { - // repeat for as long as we can: - while(count < rep->max) - { - pstate = psingle; - if(!match_wild()) - break; - ++count; - } - // remember where we got to if this is a leading repeat: - if((rep->leading) && (count < rep->max)) - restart = position; - // push backtrack info if available: - if(count - rep->min) - push_single_repeat(count, rep, position, saved_state_greedy_single_repeat); - // jump to next state: - pstate = rep->alt.p; - return true; - } - else - { - // non-greedy, push state and return true if we can skip: - if(count < rep->max) - push_single_repeat(count, rep, position, saved_state_rep_slow_dot); - pstate = rep->alt.p; - return (position == last) ? (rep->can_be_null & mask_skip) : can_start(*position, rep->_map, mask_skip); - } -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_fast() -{ - if(m_match_flags & match_not_dot_null) - return match_dot_repeat_slow(); - if((static_cast<const re_dot*>(pstate->next.p)->mask & match_any_mask) == 0) - return match_dot_repeat_slow(); - - const re_repeat* rep = static_cast<const re_repeat*>(pstate); - bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent); - std::size_t count = static_cast<std::size_t>((std::min)(static_cast<std::size_t>(::boost::BOOST_REGEX_DETAIL_NS::distance(position, last)), greedy ? rep->max : rep->min)); - if(rep->min > count) - { - position = last; - return false; // not enough text left to match - } - std::advance(position, count); - - if(greedy) - { - if((rep->leading) && (count < rep->max)) - restart = position; - // push backtrack info if available: - if(count - rep->min) - push_single_repeat(count, rep, position, saved_state_greedy_single_repeat); - // jump to next state: - pstate = rep->alt.p; - return true; - } - else - { - // non-greedy, push state and return true if we can skip: - if(count < rep->max) - push_single_repeat(count, rep, position, saved_state_rep_fast_dot); - pstate = rep->alt.p; - return (position == last) ? (rep->can_be_null & mask_skip) : can_start(*position, rep->_map, mask_skip); - } -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_char_repeat() -{ -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4127) -#endif -#ifdef BOOST_BORLANDC -#pragma option push -w-8008 -w-8066 -w-8004 -#endif - const re_repeat* rep = static_cast<const re_repeat*>(pstate); - BOOST_REGEX_ASSERT(1 == static_cast<const re_literal*>(rep->next.p)->length); - const char_type what = *reinterpret_cast<const char_type*>(static_cast<const re_literal*>(rep->next.p) + 1); - std::size_t count = 0; - // - // start by working out how much we can skip: - // - bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent); - std::size_t desired = greedy ? rep->max : rep->min; - if(::boost::is_random_access_iterator<BidiIterator>::value) - { - BidiIterator end = position; - // Move end forward by "desired", preferably without using distance or advance if we can - // as these can be slow for some iterator types. - std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::BOOST_REGEX_DETAIL_NS::distance(position, last); - if(desired >= len) - end = last; - else - std::advance(end, desired); - BidiIterator origin(position); - while((position != end) && (traits_inst.translate(*position, icase) == what)) - { - ++position; - } - count = (unsigned)::boost::BOOST_REGEX_DETAIL_NS::distance(origin, position); - } - else - { - while((count < desired) && (position != last) && (traits_inst.translate(*position, icase) == what)) - { - ++position; - ++count; - } - } - - if(count < rep->min) - return false; - - if(greedy) - { - if((rep->leading) && (count < rep->max)) - restart = position; - // push backtrack info if available: - if(count - rep->min) - push_single_repeat(count, rep, position, saved_state_greedy_single_repeat); - // jump to next state: - pstate = rep->alt.p; - return true; - } - else - { - // non-greedy, push state and return true if we can skip: - if(count < rep->max) - push_single_repeat(count, rep, position, saved_state_rep_char); - pstate = rep->alt.p; - return (position == last) ? (rep->can_be_null & mask_skip) : can_start(*position, rep->_map, mask_skip); - } -#ifdef BOOST_BORLANDC -#pragma option pop -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_set_repeat() -{ -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4127) -#endif -#ifdef BOOST_BORLANDC -#pragma option push -w-8008 -w-8066 -w-8004 -#endif - const re_repeat* rep = static_cast<const re_repeat*>(pstate); - const unsigned char* map = static_cast<const re_set*>(rep->next.p)->_map; - std::size_t count = 0; - // - // start by working out how much we can skip: - // - bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent); - std::size_t desired = greedy ? rep->max : rep->min; - if(::boost::is_random_access_iterator<BidiIterator>::value) - { - BidiIterator end = position; - // Move end forward by "desired", preferably without using distance or advance if we can - // as these can be slow for some iterator types. - std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::BOOST_REGEX_DETAIL_NS::distance(position, last); - if(desired >= len) - end = last; - else - std::advance(end, desired); - BidiIterator origin(position); - while((position != end) && map[static_cast<unsigned char>(traits_inst.translate(*position, icase))]) - { - ++position; - } - count = (unsigned)::boost::BOOST_REGEX_DETAIL_NS::distance(origin, position); - } - else - { - while((count < desired) && (position != last) && map[static_cast<unsigned char>(traits_inst.translate(*position, icase))]) - { - ++position; - ++count; - } - } - - if(count < rep->min) - return false; - - if(greedy) - { - if((rep->leading) && (count < rep->max)) - restart = position; - // push backtrack info if available: - if(count - rep->min) - push_single_repeat(count, rep, position, saved_state_greedy_single_repeat); - // jump to next state: - pstate = rep->alt.p; - return true; - } - else - { - // non-greedy, push state and return true if we can skip: - if(count < rep->max) - push_single_repeat(count, rep, position, saved_state_rep_short_set); - pstate = rep->alt.p; - return (position == last) ? (rep->can_be_null & mask_skip) : can_start(*position, rep->_map, mask_skip); - } -#ifdef BOOST_BORLANDC -#pragma option pop -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_long_set_repeat() -{ -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4127) -#endif -#ifdef BOOST_BORLANDC -#pragma option push -w-8008 -w-8066 -w-8004 -#endif - typedef typename traits::char_class_type m_type; - const re_repeat* rep = static_cast<const re_repeat*>(pstate); - const re_set_long<m_type>* set = static_cast<const re_set_long<m_type>*>(pstate->next.p); - std::size_t count = 0; - // - // start by working out how much we can skip: - // - bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent); - std::size_t desired = greedy ? rep->max : rep->min; - if(::boost::is_random_access_iterator<BidiIterator>::value) - { - BidiIterator end = position; - // Move end forward by "desired", preferably without using distance or advance if we can - // as these can be slow for some iterator types. - std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::BOOST_REGEX_DETAIL_NS::distance(position, last); - if(desired >= len) - end = last; - else - std::advance(end, desired); - BidiIterator origin(position); - while((position != end) && (position != re_is_set_member(position, last, set, re.get_data(), icase))) - { - ++position; - } - count = (unsigned)::boost::BOOST_REGEX_DETAIL_NS::distance(origin, position); - } - else - { - while((count < desired) && (position != last) && (position != re_is_set_member(position, last, set, re.get_data(), icase))) - { - ++position; - ++count; - } - } - - if(count < rep->min) - return false; - - if(greedy) - { - if((rep->leading) && (count < rep->max)) - restart = position; - // push backtrack info if available: - if(count - rep->min) - push_single_repeat(count, rep, position, saved_state_greedy_single_repeat); - // jump to next state: - pstate = rep->alt.p; - return true; - } - else - { - // non-greedy, push state and return true if we can skip: - if(count < rep->max) - push_single_repeat(count, rep, position, saved_state_rep_long_set); - pstate = rep->alt.p; - return (position == last) ? (rep->can_be_null & mask_skip) : can_start(*position, rep->_map, mask_skip); - } -#ifdef BOOST_BORLANDC -#pragma option pop -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_recursion() -{ - BOOST_REGEX_ASSERT(pstate->type == syntax_element_recurse); - // - // See if we've seen this recursion before at this location, if we have then - // we need to prevent infinite recursion: - // - for(typename std::vector<recursion_info<results_type> >::reverse_iterator i = recursion_stack.rbegin(); i != recursion_stack.rend(); ++i) - { - if(i->idx == static_cast<const re_brace*>(static_cast<const re_jump*>(pstate)->alt.p)->index) - { - if(i->location_of_start == position) - return false; - break; - } - } - // - // Backup call stack: - // - push_recursion_pop(); - // - // Set new call stack: - // - if(recursion_stack.capacity() == 0) - { - recursion_stack.reserve(50); - } - recursion_stack.push_back(recursion_info<results_type>()); - recursion_stack.back().preturn_address = pstate->next.p; - recursion_stack.back().results = *m_presult; - pstate = static_cast<const re_jump*>(pstate)->alt.p; - recursion_stack.back().idx = static_cast<const re_brace*>(pstate)->index; - recursion_stack.back().location_of_start = position; - //if(static_cast<const re_recurse*>(pstate)->state_id > 0) - { - push_repeater_count(-(2 + static_cast<const re_brace*>(pstate)->index), &next_count); - } - - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_endmark() -{ - int index = static_cast<const re_brace*>(pstate)->index; - icase = static_cast<const re_brace*>(pstate)->icase; - if(index > 0) - { - if((m_match_flags & match_nosubs) == 0) - { - m_presult->set_second(position, index); - } - if(!recursion_stack.empty()) - { - if(index == recursion_stack.back().idx) - { - pstate = recursion_stack.back().preturn_address; - *m_presult = recursion_stack.back().results; - push_recursion(recursion_stack.back().idx, recursion_stack.back().preturn_address, m_presult, &recursion_stack.back().results); - recursion_stack.pop_back(); - push_repeater_count(-(2 + index), &next_count); - } - } - } - else if((index < 0) && (index != -4)) - { - // matched forward lookahead: - pstate = 0; - return true; - } - pstate = pstate->next.p; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_match() -{ - if(!recursion_stack.empty()) - { - BOOST_REGEX_ASSERT(0 == recursion_stack.back().idx); - pstate = recursion_stack.back().preturn_address; - push_recursion(recursion_stack.back().idx, recursion_stack.back().preturn_address, m_presult, &recursion_stack.back().results); - *m_presult = recursion_stack.back().results; - recursion_stack.pop_back(); - return true; - } - if((m_match_flags & match_not_null) && (position == (*m_presult)[0].first)) - return false; - if((m_match_flags & match_all) && (position != last)) - return false; - if((m_match_flags & regex_constants::match_not_initial_null) && (position == search_base)) - return false; - m_presult->set_second(position); - pstate = 0; - m_has_found_match = true; - if((m_match_flags & match_posix) == match_posix) - { - m_result.maybe_assign(*m_presult); - if((m_match_flags & match_any) == 0) - return false; - } -#ifdef BOOST_REGEX_MATCH_EXTRA - if(match_extra & m_match_flags) - { - for(unsigned i = 0; i < m_presult->size(); ++i) - if((*m_presult)[i].matched) - ((*m_presult)[i]).get_captures().push_back((*m_presult)[i]); - } -#endif - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_commit() -{ - // Ideally we would just junk all the states that are on the stack, - // however we might not unwind correctly in that case, so for now, - // just mark that we don't backtrack into whatever is left (or rather - // we'll unwind it unconditionally without pausing to try other matches). - - switch(static_cast<const re_commit*>(pstate)->action) - { - case commit_commit: - restart = last; - break; - case commit_skip: - if(base != position) - { - restart = position; - // Have to decrement restart since it will get incremented again later: - --restart; - } - break; - case commit_prune: - break; - } - - saved_state* pmp = m_backup_state; - --pmp; - if(pmp < m_stack_base) - { - extend_stack(); - pmp = m_backup_state; - --pmp; - } - (void) new (pmp)saved_state(16); - m_backup_state = pmp; - pstate = pstate->next.p; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_then() -{ - // Just leave a mark that we need to skip to next alternative: - saved_state* pmp = m_backup_state; - --pmp; - if(pmp < m_stack_base) - { - extend_stack(); - pmp = m_backup_state; - --pmp; - } - (void) new (pmp)saved_state(17); - m_backup_state = pmp; - pstate = pstate->next.p; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::skip_until_paren(int index, bool have_match) -{ - while(pstate) - { - if(pstate->type == syntax_element_endmark) - { - if(static_cast<const re_brace*>(pstate)->index == index) - { - if(have_match) - return this->match_endmark(); - pstate = pstate->next.p; - return true; - } - else - { - // Unenclosed closing ), occurs when (*ACCEPT) is inside some other - // parenthesis which may or may not have other side effects associated with it. - const re_syntax_base* sp = pstate; - match_endmark(); - if(!pstate) - { - unwind(true); - // unwind may leave pstate NULL if we've unwound a forward lookahead, in which - // case just move to the next state and keep looking... - if (!pstate) - pstate = sp->next.p; - } - } - continue; - } - else if(pstate->type == syntax_element_match) - return true; - else if(pstate->type == syntax_element_startmark) - { - int idx = static_cast<const re_brace*>(pstate)->index; - pstate = pstate->next.p; - skip_until_paren(idx, false); - continue; - } - pstate = pstate->next.p; - } - return true; -} - -/**************************************************************************** - -Unwind and associated procedures follow, these perform what normal stack -unwinding does in the recursive implementation. - -****************************************************************************/ - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind(bool have_match) -{ - static unwind_proc_type const s_unwind_table[19] = - { - &perl_matcher<BidiIterator, Allocator, traits>::unwind_end, - &perl_matcher<BidiIterator, Allocator, traits>::unwind_paren, - &perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion_stopper, - &perl_matcher<BidiIterator, Allocator, traits>::unwind_assertion, - &perl_matcher<BidiIterator, Allocator, traits>::unwind_alt, - &perl_matcher<BidiIterator, Allocator, traits>::unwind_repeater_counter, - &perl_matcher<BidiIterator, Allocator, traits>::unwind_extra_block, - &perl_matcher<BidiIterator, Allocator, traits>::unwind_greedy_single_repeat, - &perl_matcher<BidiIterator, Allocator, traits>::unwind_slow_dot_repeat, - &perl_matcher<BidiIterator, Allocator, traits>::unwind_fast_dot_repeat, - &perl_matcher<BidiIterator, Allocator, traits>::unwind_char_repeat, - &perl_matcher<BidiIterator, Allocator, traits>::unwind_short_set_repeat, - &perl_matcher<BidiIterator, Allocator, traits>::unwind_long_set_repeat, - &perl_matcher<BidiIterator, Allocator, traits>::unwind_non_greedy_repeat, - &perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion, - &perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion_pop, - &perl_matcher<BidiIterator, Allocator, traits>::unwind_commit, - &perl_matcher<BidiIterator, Allocator, traits>::unwind_then, - &perl_matcher<BidiIterator, Allocator, traits>::unwind_case, - }; - - m_recursive_result = have_match; - m_unwound_lookahead = false; - m_unwound_alt = false; - unwind_proc_type unwinder; - bool cont; - // - // keep unwinding our stack until we have something to do: - // - do - { - unwinder = s_unwind_table[m_backup_state->state_id]; - cont = (this->*unwinder)(m_recursive_result); - }while(cont); - // - // return true if we have more states to try: - // - return pstate ? true : false; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_end(bool) -{ - pstate = 0; // nothing left to search - return false; // end of stack nothing more to search -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_case(bool) -{ - saved_change_case* pmp = static_cast<saved_change_case*>(m_backup_state); - icase = pmp->icase; - boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++); - m_backup_state = pmp; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_paren(bool have_match) -{ - saved_matched_paren<BidiIterator>* pmp = static_cast<saved_matched_paren<BidiIterator>*>(m_backup_state); - // restore previous values if no match was found: - if(!have_match) - { - m_presult->set_first(pmp->sub.first, pmp->index, pmp->index == 0); - m_presult->set_second(pmp->sub.second, pmp->index, pmp->sub.matched, pmp->index == 0); - } -#ifdef BOOST_REGEX_MATCH_EXTRA - // - // we have a match, push the capture information onto the stack: - // - else if(pmp->sub.matched && (match_extra & m_match_flags)) - ((*m_presult)[pmp->index]).get_captures().push_back(pmp->sub); -#endif - // unwind stack: - m_backup_state = pmp+1; - boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp); - return true; // keep looking -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion_stopper(bool) -{ - boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(m_backup_state++); - pstate = 0; // nothing left to search - return false; // end of stack nothing more to search -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_assertion(bool r) -{ - saved_assertion<BidiIterator>* pmp = static_cast<saved_assertion<BidiIterator>*>(m_backup_state); - pstate = pmp->pstate; - position = pmp->position; - bool result = (r == pmp->positive); - m_recursive_result = pmp->positive ? r : !r; - boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++); - m_backup_state = pmp; - m_unwound_lookahead = true; - return !result; // return false if the assertion was matched to stop search. -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_alt(bool r) -{ - saved_position<BidiIterator>* pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state); - if(!r) - { - pstate = pmp->pstate; - position = pmp->position; - } - boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++); - m_backup_state = pmp; - m_unwound_alt = !r; - return r; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_repeater_counter(bool) -{ - ++used_block_count; - saved_repeater<BidiIterator>* pmp = static_cast<saved_repeater<BidiIterator>*>(m_backup_state); - boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++); - m_backup_state = pmp; - return true; // keep looking -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_extra_block(bool) -{ - saved_extra_block* pmp = static_cast<saved_extra_block*>(m_backup_state); - void* condemmed = m_stack_base; - m_stack_base = pmp->base; - m_backup_state = pmp->end; - boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp); - put_mem_block(condemmed); - return true; // keep looking -} - -template <class BidiIterator, class Allocator, class traits> -inline void perl_matcher<BidiIterator, Allocator, traits>::destroy_single_repeat() -{ - saved_single_repeat<BidiIterator>* p = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state); - boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(p++); - m_backup_state = p; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_greedy_single_repeat(bool r) -{ - saved_single_repeat<BidiIterator>* pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state); - - // if we have a match, just discard this state: - if(r) - { - destroy_single_repeat(); - return true; - } - - const re_repeat* rep = pmp->rep; - std::size_t count = pmp->count; - BOOST_REGEX_ASSERT(rep->next.p != 0); - BOOST_REGEX_ASSERT(rep->alt.p != 0); - - count -= rep->min; - - if((m_match_flags & match_partial) && (position == last)) - m_has_partial_match = true; - - BOOST_REGEX_ASSERT(count); - position = pmp->last_position; - - // backtrack till we can skip out: - do - { - --position; - --count; - ++state_count; - }while(count && !can_start(*position, rep->_map, mask_skip)); - - // if we've hit base, destroy this state: - if(count == 0) - { - destroy_single_repeat(); - if(!can_start(*position, rep->_map, mask_skip)) - return true; - } - else - { - pmp->count = count + rep->min; - pmp->last_position = position; - } - pstate = rep->alt.p; - return false; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_slow_dot_repeat(bool r) -{ - saved_single_repeat<BidiIterator>* pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state); - - // if we have a match, just discard this state: - if(r) - { - destroy_single_repeat(); - return true; - } - - const re_repeat* rep = pmp->rep; - std::size_t count = pmp->count; - BOOST_REGEX_ASSERT(rep->type == syntax_element_dot_rep); - BOOST_REGEX_ASSERT(rep->next.p != 0); - BOOST_REGEX_ASSERT(rep->alt.p != 0); - BOOST_REGEX_ASSERT(rep->next.p->type == syntax_element_wild); - - BOOST_REGEX_ASSERT(count < rep->max); - pstate = rep->next.p; - position = pmp->last_position; - - if(position != last) - { - // wind forward until we can skip out of the repeat: - do - { - if(!match_wild()) - { - // failed repeat match, discard this state and look for another: - destroy_single_repeat(); - return true; - } - ++count; - ++state_count; - pstate = rep->next.p; - }while((count < rep->max) && (position != last) && !can_start(*position, rep->_map, mask_skip)); - } - if(position == last) - { - // can't repeat any more, remove the pushed state: - destroy_single_repeat(); - if((m_match_flags & match_partial) && (position == last) && (position != search_base)) - m_has_partial_match = true; - if(0 == (rep->can_be_null & mask_skip)) - return true; - } - else if(count == rep->max) - { - // can't repeat any more, remove the pushed state: - destroy_single_repeat(); - if(!can_start(*position, rep->_map, mask_skip)) - return true; - } - else - { - pmp->count = count; - pmp->last_position = position; - } - pstate = rep->alt.p; - return false; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_fast_dot_repeat(bool r) -{ - saved_single_repeat<BidiIterator>* pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state); - - // if we have a match, just discard this state: - if(r) - { - destroy_single_repeat(); - return true; - } - - const re_repeat* rep = pmp->rep; - std::size_t count = pmp->count; - - BOOST_REGEX_ASSERT(count < rep->max); - position = pmp->last_position; - if(position != last) - { - - // wind forward until we can skip out of the repeat: - do - { - ++position; - ++count; - ++state_count; - }while((count < rep->max) && (position != last) && !can_start(*position, rep->_map, mask_skip)); - } - - // remember where we got to if this is a leading repeat: - if((rep->leading) && (count < rep->max)) - restart = position; - if(position == last) - { - // can't repeat any more, remove the pushed state: - destroy_single_repeat(); - if((m_match_flags & match_partial) && (position == last) && (position != search_base)) - m_has_partial_match = true; - if(0 == (rep->can_be_null & mask_skip)) - return true; - } - else if(count == rep->max) - { - // can't repeat any more, remove the pushed state: - destroy_single_repeat(); - if(!can_start(*position, rep->_map, mask_skip)) - return true; - } - else - { - pmp->count = count; - pmp->last_position = position; - } - pstate = rep->alt.p; - return false; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_char_repeat(bool r) -{ - saved_single_repeat<BidiIterator>* pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state); - - // if we have a match, just discard this state: - if(r) - { - destroy_single_repeat(); - return true; - } - - const re_repeat* rep = pmp->rep; - std::size_t count = pmp->count; - pstate = rep->next.p; - const char_type what = *reinterpret_cast<const char_type*>(static_cast<const re_literal*>(pstate) + 1); - position = pmp->last_position; - - BOOST_REGEX_ASSERT(rep->type == syntax_element_char_rep); - BOOST_REGEX_ASSERT(rep->next.p != 0); - BOOST_REGEX_ASSERT(rep->alt.p != 0); - BOOST_REGEX_ASSERT(rep->next.p->type == syntax_element_literal); - BOOST_REGEX_ASSERT(count < rep->max); - - if(position != last) - { - // wind forward until we can skip out of the repeat: - do - { - if(traits_inst.translate(*position, icase) != what) - { - // failed repeat match, discard this state and look for another: - destroy_single_repeat(); - return true; - } - ++count; - ++ position; - ++state_count; - pstate = rep->next.p; - }while((count < rep->max) && (position != last) && !can_start(*position, rep->_map, mask_skip)); - } - // remember where we got to if this is a leading repeat: - if((rep->leading) && (count < rep->max)) - restart = position; - if(position == last) - { - // can't repeat any more, remove the pushed state: - destroy_single_repeat(); - if((m_match_flags & match_partial) && (position == last) && (position != search_base)) - m_has_partial_match = true; - if(0 == (rep->can_be_null & mask_skip)) - return true; - } - else if(count == rep->max) - { - // can't repeat any more, remove the pushed state: - destroy_single_repeat(); - if(!can_start(*position, rep->_map, mask_skip)) - return true; - } - else - { - pmp->count = count; - pmp->last_position = position; - } - pstate = rep->alt.p; - return false; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_short_set_repeat(bool r) -{ - saved_single_repeat<BidiIterator>* pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state); - - // if we have a match, just discard this state: - if(r) - { - destroy_single_repeat(); - return true; - } - - const re_repeat* rep = pmp->rep; - std::size_t count = pmp->count; - pstate = rep->next.p; - const unsigned char* map = static_cast<const re_set*>(rep->next.p)->_map; - position = pmp->last_position; - - BOOST_REGEX_ASSERT(rep->type == syntax_element_short_set_rep); - BOOST_REGEX_ASSERT(rep->next.p != 0); - BOOST_REGEX_ASSERT(rep->alt.p != 0); - BOOST_REGEX_ASSERT(rep->next.p->type == syntax_element_set); - BOOST_REGEX_ASSERT(count < rep->max); - - if(position != last) - { - // wind forward until we can skip out of the repeat: - do - { - if(!map[static_cast<unsigned char>(traits_inst.translate(*position, icase))]) - { - // failed repeat match, discard this state and look for another: - destroy_single_repeat(); - return true; - } - ++count; - ++ position; - ++state_count; - pstate = rep->next.p; - }while((count < rep->max) && (position != last) && !can_start(*position, rep->_map, mask_skip)); - } - // remember where we got to if this is a leading repeat: - if((rep->leading) && (count < rep->max)) - restart = position; - if(position == last) - { - // can't repeat any more, remove the pushed state: - destroy_single_repeat(); - if((m_match_flags & match_partial) && (position == last) && (position != search_base)) - m_has_partial_match = true; - if(0 == (rep->can_be_null & mask_skip)) - return true; - } - else if(count == rep->max) - { - // can't repeat any more, remove the pushed state: - destroy_single_repeat(); - if(!can_start(*position, rep->_map, mask_skip)) - return true; - } - else - { - pmp->count = count; - pmp->last_position = position; - } - pstate = rep->alt.p; - return false; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_long_set_repeat(bool r) -{ - typedef typename traits::char_class_type m_type; - saved_single_repeat<BidiIterator>* pmp = static_cast<saved_single_repeat<BidiIterator>*>(m_backup_state); - - // if we have a match, just discard this state: - if(r) - { - destroy_single_repeat(); - return true; - } - - const re_repeat* rep = pmp->rep; - std::size_t count = pmp->count; - pstate = rep->next.p; - const re_set_long<m_type>* set = static_cast<const re_set_long<m_type>*>(pstate); - position = pmp->last_position; - - BOOST_REGEX_ASSERT(rep->type == syntax_element_long_set_rep); - BOOST_REGEX_ASSERT(rep->next.p != 0); - BOOST_REGEX_ASSERT(rep->alt.p != 0); - BOOST_REGEX_ASSERT(rep->next.p->type == syntax_element_long_set); - BOOST_REGEX_ASSERT(count < rep->max); - - if(position != last) - { - // wind forward until we can skip out of the repeat: - do - { - if(position == re_is_set_member(position, last, set, re.get_data(), icase)) - { - // failed repeat match, discard this state and look for another: - destroy_single_repeat(); - return true; - } - ++position; - ++count; - ++state_count; - pstate = rep->next.p; - }while((count < rep->max) && (position != last) && !can_start(*position, rep->_map, mask_skip)); - } - // remember where we got to if this is a leading repeat: - if((rep->leading) && (count < rep->max)) - restart = position; - if(position == last) - { - // can't repeat any more, remove the pushed state: - destroy_single_repeat(); - if((m_match_flags & match_partial) && (position == last) && (position != search_base)) - m_has_partial_match = true; - if(0 == (rep->can_be_null & mask_skip)) - return true; - } - else if(count == rep->max) - { - // can't repeat any more, remove the pushed state: - destroy_single_repeat(); - if(!can_start(*position, rep->_map, mask_skip)) - return true; - } - else - { - pmp->count = count; - pmp->last_position = position; - } - pstate = rep->alt.p; - return false; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_non_greedy_repeat(bool r) -{ - saved_position<BidiIterator>* pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state); - if(!r) - { - position = pmp->position; - pstate = pmp->pstate; - ++(*next_count); - } - boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++); - m_backup_state = pmp; - return r; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion(bool r) -{ - // We are backtracking back inside a recursion, need to push the info - // back onto the recursion stack, and do so unconditionally, otherwise - // we can get mismatched pushes and pops... - saved_recursion<results_type>* pmp = static_cast<saved_recursion<results_type>*>(m_backup_state); - if (!r) - { - recursion_stack.push_back(recursion_info<results_type>()); - recursion_stack.back().idx = pmp->recursion_id; - recursion_stack.back().preturn_address = pmp->preturn_address; - recursion_stack.back().results = pmp->prior_results; - recursion_stack.back().location_of_start = position; - *m_presult = pmp->internal_results; - } - boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++); - m_backup_state = pmp; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_recursion_pop(bool r) -{ - // Backtracking out of a recursion, we must pop state off the recursion - // stack unconditionally to ensure matched pushes and pops: - saved_state* pmp = static_cast<saved_state*>(m_backup_state); - if (!r && !recursion_stack.empty()) - { - *m_presult = recursion_stack.back().results; - position = recursion_stack.back().location_of_start; - recursion_stack.pop_back(); - } - boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++); - m_backup_state = pmp; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -void perl_matcher<BidiIterator, Allocator, traits>::push_recursion_pop() -{ - saved_state* pmp = static_cast<saved_state*>(m_backup_state); - --pmp; - if(pmp < m_stack_base) - { - extend_stack(); - pmp = static_cast<saved_state*>(m_backup_state); - --pmp; - } - (void) new (pmp)saved_state(15); - m_backup_state = pmp; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_commit(bool b) -{ - boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(m_backup_state++); - while(unwind(b) && !m_unwound_lookahead){} - if(m_unwound_lookahead && pstate) - { - // - // If we stop because we just unwound an assertion, put the - // commit state back on the stack again: - // - m_unwound_lookahead = false; - saved_state* pmp = m_backup_state; - --pmp; - if(pmp < m_stack_base) - { - extend_stack(); - pmp = m_backup_state; - --pmp; - } - (void) new (pmp)saved_state(16); - m_backup_state = pmp; - } - // This prevents us from stopping when we exit from an independent sub-expression: - m_independent = false; - return false; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_then(bool b) -{ - // Unwind everything till we hit an alternative: - boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(m_backup_state++); - bool result = false; - while((result = unwind(b)) && !m_unwound_alt){} - // We're now pointing at the next alternative, need one more backtrack - // since *all* the other alternatives must fail once we've reached a THEN clause: - if(result && m_unwound_alt) - unwind(b); - return false; -} - -/* -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_parenthesis_pop(bool r) -{ - saved_state* pmp = static_cast<saved_state*>(m_backup_state); - if(!r) - { - --parenthesis_stack_position; - } - boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++); - m_backup_state = pmp; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -void perl_matcher<BidiIterator, Allocator, traits>::push_parenthesis_pop() -{ - saved_state* pmp = static_cast<saved_state*>(m_backup_state); - --pmp; - if(pmp < m_stack_base) - { - extend_stack(); - pmp = static_cast<saved_state*>(m_backup_state); - --pmp; - } - (void) new (pmp)saved_state(16); - m_backup_state = pmp; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::unwind_parenthesis_push(bool r) -{ - saved_position<BidiIterator>* pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state); - if(!r) - { - parenthesis_stack[parenthesis_stack_position++] = pmp->position; - } - boost::BOOST_REGEX_DETAIL_NS::inplace_destroy(pmp++); - m_backup_state = pmp; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -inline void perl_matcher<BidiIterator, Allocator, traits>::push_parenthesis_push(BidiIterator p) -{ - saved_position<BidiIterator>* pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state); - --pmp; - if(pmp < m_stack_base) - { - extend_stack(); - pmp = static_cast<saved_position<BidiIterator>*>(m_backup_state); - --pmp; - } - (void) new (pmp)saved_position<BidiIterator>(0, p, 17); - m_backup_state = pmp; -} -*/ -} // namespace BOOST_REGEX_DETAIL_NS -} // namespace boost - -#ifdef BOOST_MSVC -# pragma warning(pop) -#endif - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/perl_matcher_recursive.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/perl_matcher_recursive.hpp deleted file mode 100644 index 7d262fe2f2..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/perl_matcher_recursive.hpp +++ /dev/null @@ -1,1131 +0,0 @@ -/* - * - * Copyright (c) 2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE perl_matcher_common.cpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Definitions of perl_matcher member functions that are - * specific to the recursive implementation. - */ - -#ifndef BOOST_REGEX_V4_PERL_MATCHER_RECURSIVE_HPP -#define BOOST_REGEX_V4_PERL_MATCHER_RECURSIVE_HPP - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4800) -#endif - -namespace boost{ -namespace BOOST_REGEX_DETAIL_NS{ - -template <class BidiIterator> -class backup_subex -{ - int index; - sub_match<BidiIterator> sub; -public: - template <class A> - backup_subex(const match_results<BidiIterator, A>& w, int i) - : index(i), sub(w[i], false) {} - template <class A> - void restore(match_results<BidiIterator, A>& w) - { - w.set_first(sub.first, index, index == 0); - w.set_second(sub.second, index, sub.matched, index == 0); - } - const sub_match<BidiIterator>& get() { return sub; } -}; - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_all_states() -{ - static matcher_proc_type const s_match_vtable[34] = - { - (&perl_matcher<BidiIterator, Allocator, traits>::match_startmark), - &perl_matcher<BidiIterator, Allocator, traits>::match_endmark, - &perl_matcher<BidiIterator, Allocator, traits>::match_literal, - &perl_matcher<BidiIterator, Allocator, traits>::match_start_line, - &perl_matcher<BidiIterator, Allocator, traits>::match_end_line, - &perl_matcher<BidiIterator, Allocator, traits>::match_wild, - &perl_matcher<BidiIterator, Allocator, traits>::match_match, - &perl_matcher<BidiIterator, Allocator, traits>::match_word_boundary, - &perl_matcher<BidiIterator, Allocator, traits>::match_within_word, - &perl_matcher<BidiIterator, Allocator, traits>::match_word_start, - &perl_matcher<BidiIterator, Allocator, traits>::match_word_end, - &perl_matcher<BidiIterator, Allocator, traits>::match_buffer_start, - &perl_matcher<BidiIterator, Allocator, traits>::match_buffer_end, - &perl_matcher<BidiIterator, Allocator, traits>::match_backref, - &perl_matcher<BidiIterator, Allocator, traits>::match_long_set, - &perl_matcher<BidiIterator, Allocator, traits>::match_set, - &perl_matcher<BidiIterator, Allocator, traits>::match_jump, - &perl_matcher<BidiIterator, Allocator, traits>::match_alt, - &perl_matcher<BidiIterator, Allocator, traits>::match_rep, - &perl_matcher<BidiIterator, Allocator, traits>::match_combining, - &perl_matcher<BidiIterator, Allocator, traits>::match_soft_buffer_end, - &perl_matcher<BidiIterator, Allocator, traits>::match_restart_continue, - // Although this next line *should* be evaluated at compile time, in practice - // some compilers (VC++) emit run-time initialisation which breaks thread - // safety, so use a dispatch function instead: - //(::boost::is_random_access_iterator<BidiIterator>::value ? &perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_fast : &perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_slow), - &perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_dispatch, - &perl_matcher<BidiIterator, Allocator, traits>::match_char_repeat, - &perl_matcher<BidiIterator, Allocator, traits>::match_set_repeat, - &perl_matcher<BidiIterator, Allocator, traits>::match_long_set_repeat, - &perl_matcher<BidiIterator, Allocator, traits>::match_backstep, - &perl_matcher<BidiIterator, Allocator, traits>::match_assert_backref, - &perl_matcher<BidiIterator, Allocator, traits>::match_toggle_case, - &perl_matcher<BidiIterator, Allocator, traits>::match_recursion, - &perl_matcher<BidiIterator, Allocator, traits>::match_fail, - &perl_matcher<BidiIterator, Allocator, traits>::match_accept, - &perl_matcher<BidiIterator, Allocator, traits>::match_commit, - &perl_matcher<BidiIterator, Allocator, traits>::match_then, - }; - - if(state_count > max_state_count) - raise_error(traits_inst, regex_constants::error_complexity); - while(pstate) - { - matcher_proc_type proc = s_match_vtable[pstate->type]; - ++state_count; - if(!(this->*proc)()) - { - if((m_match_flags & match_partial) && (position == last) && (position != search_base)) - m_has_partial_match = true; - return 0; - } - } - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_startmark() -{ - int index = static_cast<const re_brace*>(pstate)->index; - icase = static_cast<const re_brace*>(pstate)->icase; - bool r = true; - switch(index) - { - case 0: - pstate = pstate->next.p; - break; - case -1: - case -2: - { - // forward lookahead assert: - BidiIterator old_position(position); - const re_syntax_base* next_pstate = static_cast<const re_jump*>(pstate->next.p)->alt.p->next.p; - pstate = pstate->next.p->next.p; - r = match_all_states(); - pstate = next_pstate; - position = old_position; - if((r && (index != -1)) || (!r && (index != -2))) - r = false; - else - r = true; - if(r && m_have_accept) - r = skip_until_paren(INT_MAX); - break; - } - case -3: - { - // independent sub-expression: - bool old_independent = m_independent; - m_independent = true; - const re_syntax_base* next_pstate = static_cast<const re_jump*>(pstate->next.p)->alt.p->next.p; - pstate = pstate->next.p->next.p; - bool can_backtrack = m_can_backtrack; - r = match_all_states(); - if(r) - m_can_backtrack = can_backtrack; - pstate = next_pstate; - m_independent = old_independent; -#ifdef BOOST_REGEX_MATCH_EXTRA - if(r && (m_match_flags & match_extra)) - { - // - // our captures have been stored in *m_presult - // we need to unpack them, and insert them - // back in the right order when we unwind the stack: - // - unsigned i; - match_results<BidiIterator, Allocator> tm(*m_presult); - for(i = 0; i < tm.size(); ++i) - (*m_presult)[i].get_captures().clear(); - // match everything else: - r = match_all_states(); - // now place the stored captures back: - for(i = 0; i < tm.size(); ++i) - { - typedef typename sub_match<BidiIterator>::capture_sequence_type seq; - seq& s1 = (*m_presult)[i].get_captures(); - const seq& s2 = tm[i].captures(); - s1.insert( - s1.end(), - s2.begin(), - s2.end()); - } - } -#endif - if(r && m_have_accept) - r = skip_until_paren(INT_MAX); - break; - } - case -4: - { - // conditional expression: - const re_alt* alt = static_cast<const re_alt*>(pstate->next.p); - BOOST_REGEX_ASSERT(alt->type == syntax_element_alt); - pstate = alt->next.p; - if(pstate->type == syntax_element_assert_backref) - { - if(!match_assert_backref()) - pstate = alt->alt.p; - break; - } - else - { - // zero width assertion, have to match this recursively: - BOOST_REGEX_ASSERT(pstate->type == syntax_element_startmark); - bool negated = static_cast<const re_brace*>(pstate)->index == -2; - BidiIterator saved_position = position; - const re_syntax_base* next_pstate = static_cast<const re_jump*>(pstate->next.p)->alt.p->next.p; - pstate = pstate->next.p->next.p; - bool res = match_all_states(); - position = saved_position; - if(negated) - res = !res; - if(res) - pstate = next_pstate; - else - pstate = alt->alt.p; - break; - } - } - case -5: - { - // Reset start of $0, since we have a \K escape - backup_subex<BidiIterator> sub(*m_presult, 0); - m_presult->set_first(position, 0, true); - pstate = pstate->next.p; - r = match_all_states(); - if(r == false) - sub.restore(*m_presult); - break; - } - default: - { - BOOST_REGEX_ASSERT(index > 0); - if((m_match_flags & match_nosubs) == 0) - { - backup_subex<BidiIterator> sub(*m_presult, index); - m_presult->set_first(position, index); - pstate = pstate->next.p; - r = match_all_states(); - if(r == false) - sub.restore(*m_presult); -#ifdef BOOST_REGEX_MATCH_EXTRA - // - // we have a match, push the capture information onto the stack: - // - else if(sub.get().matched && (match_extra & m_match_flags)) - ((*m_presult)[index]).get_captures().push_back(sub.get()); -#endif - } - else - { - pstate = pstate->next.p; - } - break; - } - } - return r; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_alt() -{ - bool take_first, take_second; - const re_alt* jmp = static_cast<const re_alt*>(pstate); - - // find out which of these two alternatives we need to take: - if(position == last) - { - take_first = jmp->can_be_null & mask_take; - take_second = jmp->can_be_null & mask_skip; - } - else - { - take_first = can_start(*position, jmp->_map, (unsigned char)mask_take); - take_second = can_start(*position, jmp->_map, (unsigned char)mask_skip); - } - - if(take_first) - { - // we can take the first alternative, - // see if we need to push next alternative: - if(take_second) - { - BidiIterator oldposition(position); - const re_syntax_base* old_pstate = jmp->alt.p; - pstate = pstate->next.p; - bool oldcase = icase; - m_have_then = false; - if(!match_all_states()) - { - pstate = old_pstate; - position = oldposition; - icase = oldcase; - if(m_have_then) - { - m_can_backtrack = true; - m_have_then = false; - return false; - } - } - m_have_then = false; - return m_can_backtrack; - } - pstate = pstate->next.p; - return true; - } - if(take_second) - { - pstate = jmp->alt.p; - return true; - } - return false; // neither option is possible -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_rep() -{ -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4127 4244) -#endif - const re_repeat* rep = static_cast<const re_repeat*>(pstate); - // - // Always copy the repeat count, so that the state is restored - // when we exit this scope: - // - repeater_count<BidiIterator> r(rep->state_id, &next_count, position, this->recursion_stack.size() ? this->recursion_stack.back().idx : INT_MIN + 3); - // - // If we've had at least one repeat already, and the last one - // matched the NULL string then set the repeat count to - // maximum: - // - next_count->check_null_repeat(position, rep->max); - - // find out which of these two alternatives we need to take: - bool take_first, take_second; - if(position == last) - { - take_first = rep->can_be_null & mask_take; - take_second = rep->can_be_null & mask_skip; - } - else - { - take_first = can_start(*position, rep->_map, (unsigned char)mask_take); - take_second = can_start(*position, rep->_map, (unsigned char)mask_skip); - } - - if(next_count->get_count() < rep->min) - { - // we must take the repeat: - if(take_first) - { - // increase the counter: - ++(*next_count); - pstate = rep->next.p; - return match_all_states(); - } - return false; - } - bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent); - if(greedy) - { - // try and take the repeat if we can: - if((next_count->get_count() < rep->max) && take_first) - { - // store position in case we fail: - BidiIterator pos = position; - // increase the counter: - ++(*next_count); - pstate = rep->next.p; - if(match_all_states()) - return true; - if(!m_can_backtrack) - return false; - // failed repeat, reset posistion and fall through for alternative: - position = pos; - } - if(take_second) - { - pstate = rep->alt.p; - return true; - } - return false; // can't take anything, fail... - } - else // non-greedy - { - // try and skip the repeat if we can: - if(take_second) - { - // store position in case we fail: - BidiIterator pos = position; - pstate = rep->alt.p; - if(match_all_states()) - return true; - if(!m_can_backtrack) - return false; - // failed alternative, reset posistion and fall through for repeat: - position = pos; - } - if((next_count->get_count() < rep->max) && take_first) - { - // increase the counter: - ++(*next_count); - pstate = rep->next.p; - return match_all_states(); - } - } - return false; -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_slow() -{ -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4127) -#endif - std::size_t count = 0; - const re_repeat* rep = static_cast<const re_repeat*>(pstate); - re_syntax_base* psingle = rep->next.p; - // match compulsary repeats first: - while(count < rep->min) - { - pstate = psingle; - if(!match_wild()) - return false; - ++count; - } - bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent); - if(greedy) - { - // normal repeat: - while(count < rep->max) - { - pstate = psingle; - if(!match_wild()) - break; - ++count; - } - if((rep->leading) && (count < rep->max)) - restart = position; - pstate = rep; - return backtrack_till_match(count - rep->min); - } - else - { - // non-greedy, keep trying till we get a match: - BidiIterator save_pos; - do - { - if((rep->leading) && (rep->max == UINT_MAX)) - restart = position; - pstate = rep->alt.p; - save_pos = position; - ++state_count; - if(match_all_states()) - return true; - if((count >= rep->max) || !m_can_backtrack) - return false; - ++count; - pstate = psingle; - position = save_pos; - if(!match_wild()) - return false; - }while(true); - } -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_dot_repeat_fast() -{ -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4127) -#endif - if(m_match_flags & match_not_dot_null) - return match_dot_repeat_slow(); - if((static_cast<const re_dot*>(pstate->next.p)->mask & match_any_mask) == 0) - return match_dot_repeat_slow(); - // - // start by working out how much we can skip: - // - const re_repeat* rep = static_cast<const re_repeat*>(pstate); -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4267) -#endif - bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent); - std::size_t count = (std::min)(static_cast<std::size_t>(::boost::BOOST_REGEX_DETAIL_NS::distance(position, last)), greedy ? rep->max : rep->min); - if(rep->min > count) - { - position = last; - return false; // not enough text left to match - } - std::advance(position, count); -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - if((rep->leading) && (count < rep->max) && greedy) - restart = position; - if(greedy) - return backtrack_till_match(count - rep->min); - - // non-greedy, keep trying till we get a match: - BidiIterator save_pos; - do - { - while((position != last) && (count < rep->max) && !can_start(*position, rep->_map, mask_skip)) - { - ++position; - ++count; - } - if((rep->leading) && (rep->max == UINT_MAX)) - restart = position; - pstate = rep->alt.p; - save_pos = position; - ++state_count; - if(match_all_states()) - return true; - if((count >= rep->max) || !m_can_backtrack) - return false; - if(save_pos == last) - return false; - position = ++save_pos; - ++count; - }while(true); -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_char_repeat() -{ -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4127) -#pragma warning(disable:4267) -#endif -#ifdef BOOST_BORLANDC -#pragma option push -w-8008 -w-8066 -w-8004 -#endif - const re_repeat* rep = static_cast<const re_repeat*>(pstate); - BOOST_REGEX_ASSERT(1 == static_cast<const re_literal*>(rep->next.p)->length); - const char_type what = *reinterpret_cast<const char_type*>(static_cast<const re_literal*>(rep->next.p) + 1); - // - // start by working out how much we can skip: - // - bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent); - std::size_t count, desired; - if(::boost::is_random_access_iterator<BidiIterator>::value) - { - desired = - (std::min)( - (std::size_t)(greedy ? rep->max : rep->min), - (std::size_t)::boost::BOOST_REGEX_DETAIL_NS::distance(position, last)); - count = desired; - ++desired; - if(icase) - { - while(--desired && (traits_inst.translate_nocase(*position) == what)) - { - ++position; - } - } - else - { - while(--desired && (traits_inst.translate(*position) == what)) - { - ++position; - } - } - count = count - desired; - } - else - { - count = 0; - desired = greedy ? rep->max : rep->min; - while((count < desired) && (position != last) && (traits_inst.translate(*position, icase) == what)) - { - ++position; - ++count; - } - } - if((rep->leading) && (count < rep->max) && greedy) - restart = position; - if(count < rep->min) - return false; - - if(greedy) - return backtrack_till_match(count - rep->min); - - // non-greedy, keep trying till we get a match: - BidiIterator save_pos; - do - { - while((position != last) && (count < rep->max) && !can_start(*position, rep->_map, mask_skip)) - { - if((traits_inst.translate(*position, icase) == what)) - { - ++position; - ++count; - } - else - return false; // counldn't repeat even though it was the only option - } - if((rep->leading) && (rep->max == UINT_MAX)) - restart = position; - pstate = rep->alt.p; - save_pos = position; - ++state_count; - if(match_all_states()) - return true; - if((count >= rep->max) || !m_can_backtrack) - return false; - position = save_pos; - if(position == last) - return false; - if(traits_inst.translate(*position, icase) == what) - { - ++position; - ++count; - } - else - { - return false; - } - }while(true); -#ifdef BOOST_BORLANDC -#pragma option pop -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_set_repeat() -{ -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4127) -#endif -#ifdef BOOST_BORLANDC -#pragma option push -w-8008 -w-8066 -w-8004 -#endif - const re_repeat* rep = static_cast<const re_repeat*>(pstate); - const unsigned char* map = static_cast<const re_set*>(rep->next.p)->_map; - std::size_t count = 0; - // - // start by working out how much we can skip: - // - bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent); - std::size_t desired = greedy ? rep->max : rep->min; - if(::boost::is_random_access_iterator<BidiIterator>::value) - { - BidiIterator end = position; - // Move end forward by "desired", preferably without using distance or advance if we can - // as these can be slow for some iterator types. - std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::BOOST_REGEX_DETAIL_NS::distance(position, last); - if(desired >= len) - end = last; - else - std::advance(end, desired); - BidiIterator origin(position); - while((position != end) && map[static_cast<unsigned char>(traits_inst.translate(*position, icase))]) - { - ++position; - } - count = (unsigned)::boost::BOOST_REGEX_DETAIL_NS::distance(origin, position); - } - else - { - while((count < desired) && (position != last) && map[static_cast<unsigned char>(traits_inst.translate(*position, icase))]) - { - ++position; - ++count; - } - } - if((rep->leading) && (count < rep->max) && greedy) - restart = position; - if(count < rep->min) - return false; - - if(greedy) - return backtrack_till_match(count - rep->min); - - // non-greedy, keep trying till we get a match: - BidiIterator save_pos; - do - { - while((position != last) && (count < rep->max) && !can_start(*position, rep->_map, mask_skip)) - { - if(map[static_cast<unsigned char>(traits_inst.translate(*position, icase))]) - { - ++position; - ++count; - } - else - return false; // counldn't repeat even though it was the only option - } - if((rep->leading) && (rep->max == UINT_MAX)) - restart = position; - pstate = rep->alt.p; - save_pos = position; - ++state_count; - if(match_all_states()) - return true; - if((count >= rep->max) || !m_can_backtrack) - return false; - position = save_pos; - if(position == last) - return false; - if(map[static_cast<unsigned char>(traits_inst.translate(*position, icase))]) - { - ++position; - ++count; - } - else - { - return false; - } - }while(true); -#ifdef BOOST_BORLANDC -#pragma option pop -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_long_set_repeat() -{ -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4127) -#endif -#ifdef BOOST_BORLANDC -#pragma option push -w-8008 -w-8066 -w-8004 -#endif - typedef typename traits::char_class_type char_class_type; - const re_repeat* rep = static_cast<const re_repeat*>(pstate); - const re_set_long<char_class_type>* set = static_cast<const re_set_long<char_class_type>*>(pstate->next.p); - std::size_t count = 0; - // - // start by working out how much we can skip: - // - bool greedy = (rep->greedy) && (!(m_match_flags & regex_constants::match_any) || m_independent); - std::size_t desired = greedy ? rep->max : rep->min; - if(::boost::is_random_access_iterator<BidiIterator>::value) - { - BidiIterator end = position; - // Move end forward by "desired", preferably without using distance or advance if we can - // as these can be slow for some iterator types. - std::size_t len = (desired == (std::numeric_limits<std::size_t>::max)()) ? 0u : ::boost::BOOST_REGEX_DETAIL_NS::distance(position, last); - if(desired >= len) - end = last; - else - std::advance(end, desired); - BidiIterator origin(position); - while((position != end) && (position != re_is_set_member(position, last, set, re.get_data(), icase))) - { - ++position; - } - count = (unsigned)::boost::BOOST_REGEX_DETAIL_NS::distance(origin, position); - } - else - { - while((count < desired) && (position != last) && (position != re_is_set_member(position, last, set, re.get_data(), icase))) - { - ++position; - ++count; - } - } - if((rep->leading) && (count < rep->max) && greedy) - restart = position; - if(count < rep->min) - return false; - - if(greedy) - return backtrack_till_match(count - rep->min); - - // non-greedy, keep trying till we get a match: - BidiIterator save_pos; - do - { - while((position != last) && (count < rep->max) && !can_start(*position, rep->_map, mask_skip)) - { - if(position != re_is_set_member(position, last, set, re.get_data(), icase)) - { - ++position; - ++count; - } - else - return false; // counldn't repeat even though it was the only option - } - if((rep->leading) && (rep->max == UINT_MAX)) - restart = position; - pstate = rep->alt.p; - save_pos = position; - ++state_count; - if(match_all_states()) - return true; - if((count >= rep->max) || !m_can_backtrack) - return false; - position = save_pos; - if(position == last) - return false; - if(position != re_is_set_member(position, last, set, re.get_data(), icase)) - { - ++position; - ++count; - } - else - { - return false; - } - }while(true); -#ifdef BOOST_BORLANDC -#pragma option pop -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::backtrack_till_match(std::size_t count) -{ -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4127) -#endif - if(!m_can_backtrack) - return false; - if((m_match_flags & match_partial) && (position == last)) - m_has_partial_match = true; - - const re_repeat* rep = static_cast<const re_repeat*>(pstate); - BidiIterator backtrack = position; - if(position == last) - { - if(rep->can_be_null & mask_skip) - { - pstate = rep->alt.p; - if(match_all_states()) - return true; - } - if(count) - { - position = --backtrack; - --count; - } - else - return false; - } - do - { - while(count && !can_start(*position, rep->_map, mask_skip)) - { - --position; - --count; - ++state_count; - } - pstate = rep->alt.p; - backtrack = position; - if(match_all_states()) - return true; - if(count == 0) - return false; - position = --backtrack; - ++state_count; - --count; - }while(true); -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_recursion() -{ - BOOST_REGEX_ASSERT(pstate->type == syntax_element_recurse); - // - // Set new call stack: - // - if(recursion_stack.capacity() == 0) - { - recursion_stack.reserve(50); - } - // - // See if we've seen this recursion before at this location, if we have then - // we need to prevent infinite recursion: - // - for(typename std::vector<recursion_info<results_type> >::reverse_iterator i = recursion_stack.rbegin(); i != recursion_stack.rend(); ++i) - { - if(i->idx == static_cast<const re_brace*>(static_cast<const re_jump*>(pstate)->alt.p)->index) - { - if(i->location_of_start == position) - return false; - break; - } - } - // - // Now get on with it: - // - recursion_stack.push_back(recursion_info<results_type>()); - recursion_stack.back().preturn_address = pstate->next.p; - recursion_stack.back().results = *m_presult; - recursion_stack.back().repeater_stack = next_count; - recursion_stack.back().location_of_start = position; - pstate = static_cast<const re_jump*>(pstate)->alt.p; - recursion_stack.back().idx = static_cast<const re_brace*>(pstate)->index; - - repeater_count<BidiIterator>* saved = next_count; - repeater_count<BidiIterator> r(&next_count); // resets all repeat counts since we're recursing and starting fresh on those - next_count = &r; - bool can_backtrack = m_can_backtrack; - bool result = match_all_states(); - m_can_backtrack = can_backtrack; - next_count = saved; - - if(!result) - { - next_count = recursion_stack.back().repeater_stack; - *m_presult = recursion_stack.back().results; - recursion_stack.pop_back(); - return false; - } - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_endmark() -{ - int index = static_cast<const re_brace*>(pstate)->index; - icase = static_cast<const re_brace*>(pstate)->icase; - if(index > 0) - { - if((m_match_flags & match_nosubs) == 0) - { - m_presult->set_second(position, index); - } - if(!recursion_stack.empty()) - { - if(index == recursion_stack.back().idx) - { - recursion_info<results_type> saved = recursion_stack.back(); - recursion_stack.pop_back(); - pstate = saved.preturn_address; - repeater_count<BidiIterator>* saved_count = next_count; - next_count = saved.repeater_stack; - *m_presult = saved.results; - if(!match_all_states()) - { - recursion_stack.push_back(saved); - next_count = saved_count; - return false; - } - } - } - } - else if((index < 0) && (index != -4)) - { - // matched forward lookahead: - pstate = 0; - return true; - } - pstate = pstate ? pstate->next.p : 0; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_match() -{ - if(!recursion_stack.empty()) - { - BOOST_REGEX_ASSERT(0 == recursion_stack.back().idx); - const re_syntax_base* saved_state = pstate = recursion_stack.back().preturn_address; - *m_presult = recursion_stack.back().results; - recursion_stack.pop_back(); - if(!match_all_states()) - { - recursion_stack.push_back(recursion_info<results_type>()); - recursion_stack.back().preturn_address = saved_state; - recursion_stack.back().results = *m_presult; - recursion_stack.back().location_of_start = position; - return false; - } - return true; - } - if((m_match_flags & match_not_null) && (position == (*m_presult)[0].first)) - return false; - if((m_match_flags & match_all) && (position != last)) - return false; - if((m_match_flags & regex_constants::match_not_initial_null) && (position == search_base)) - return false; - m_presult->set_second(position); - pstate = 0; - m_has_found_match = true; - if((m_match_flags & match_posix) == match_posix) - { - m_result.maybe_assign(*m_presult); - if((m_match_flags & match_any) == 0) - return false; - } -#ifdef BOOST_REGEX_MATCH_EXTRA - if(match_extra & m_match_flags) - { - for(unsigned i = 0; i < m_presult->size(); ++i) - if((*m_presult)[i].matched) - ((*m_presult)[i]).get_captures().push_back((*m_presult)[i]); - } -#endif - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_commit() -{ - m_can_backtrack = false; - int action = static_cast<const re_commit*>(pstate)->action; - switch(action) - { - case commit_commit: - restart = last; - break; - case commit_skip: - restart = position; - break; - } - pstate = pstate->next.p; - return true; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_then() -{ - pstate = pstate->next.p; - if(match_all_states()) - return true; - m_can_backtrack = false; - m_have_then = true; - return false; -} - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::match_toggle_case() -{ - // change our case sensitivity: - bool oldcase = this->icase; - this->icase = static_cast<const re_case*>(pstate)->icase; - pstate = pstate->next.p; - bool result = match_all_states(); - this->icase = oldcase; - return result; -} - - - -template <class BidiIterator, class Allocator, class traits> -bool perl_matcher<BidiIterator, Allocator, traits>::skip_until_paren(int index, bool have_match) -{ - while(pstate) - { - if(pstate->type == syntax_element_endmark) - { - if(static_cast<const re_brace*>(pstate)->index == index) - { - if(have_match) - return this->match_endmark(); - pstate = pstate->next.p; - return true; - } - else - { - // Unenclosed closing ), occurs when (*ACCEPT) is inside some other - // parenthesis which may or may not have other side effects associated with it. - bool r = match_endmark(); - m_have_accept = true; - if(!pstate) - return r; - } - continue; - } - else if(pstate->type == syntax_element_match) - return true; - else if(pstate->type == syntax_element_startmark) - { - int idx = static_cast<const re_brace*>(pstate)->index; - pstate = pstate->next.p; - skip_until_paren(idx, false); - continue; - } - pstate = pstate->next.p; - } - return true; -} - - -} // namespace BOOST_REGEX_DETAIL_NS -} // namespace boost -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#endif - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/primary_transform.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/primary_transform.hpp deleted file mode 100644 index 47d172aa80..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/primary_transform.hpp +++ /dev/null @@ -1,146 +0,0 @@ -/* - * - * Copyright (c) 1998-2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE: primary_transform.hpp - * VERSION: see <boost/version.hpp> - * DESCRIPTION: Heuristically determines the sort string format in use - * by the current locale. - */ - -#ifndef BOOST_REGEX_PRIMARY_TRANSFORM -#define BOOST_REGEX_PRIMARY_TRANSFORM - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -namespace boost{ - namespace BOOST_REGEX_DETAIL_NS{ - - -enum{ - sort_C, - sort_fixed, - sort_delim, - sort_unknown -}; - -template <class S, class charT> -unsigned count_chars(const S& s, charT c) -{ - // - // Count how many occurrences of character c occur - // in string s: if c is a delimeter between collation - // fields, then this should be the same value for all - // sort keys: - // - unsigned int count = 0; - for(unsigned pos = 0; pos < s.size(); ++pos) - { - if(s[pos] == c) ++count; - } - return count; -} - - -template <class traits, class charT> -unsigned find_sort_syntax(const traits* pt, charT* delim) -{ - // - // compare 'a' with 'A' to see how similar they are, - // should really use a-accute but we can't portably do that, - // - typedef typename traits::string_type string_type; - typedef typename traits::char_type char_type; - - // Suppress incorrect warning for MSVC - (void)pt; - - char_type a[2] = {'a', '\0', }; - string_type sa(pt->transform(a, a+1)); - if(sa == a) - { - *delim = 0; - return sort_C; - } - char_type A[2] = { 'A', '\0', }; - string_type sA(pt->transform(A, A+1)); - char_type c[2] = { ';', '\0', }; - string_type sc(pt->transform(c, c+1)); - - int pos = 0; - while((pos <= static_cast<int>(sa.size())) && (pos <= static_cast<int>(sA.size())) && (sa[pos] == sA[pos])) ++pos; - --pos; - if(pos < 0) - { - *delim = 0; - return sort_unknown; - } - // - // at this point sa[pos] is either the end of a fixed width field - // or the character that acts as a delimiter: - // - charT maybe_delim = sa[pos]; - if((pos != 0) && (count_chars(sa, maybe_delim) == count_chars(sA, maybe_delim)) && (count_chars(sa, maybe_delim) == count_chars(sc, maybe_delim))) - { - *delim = maybe_delim; - return sort_delim; - } - // - // OK doen't look like a delimiter, try for fixed width field: - // - if((sa.size() == sA.size()) && (sa.size() == sc.size())) - { - // note assumes that the fixed width field is less than - // (numeric_limits<charT>::max)(), should be true for all types - // I can't imagine 127 character fields... - *delim = static_cast<charT>(++pos); - return sort_fixed; - } - // - // don't know what it is: - // - *delim = 0; - return sort_unknown; -} - - - } // namespace BOOST_REGEX_DETAIL_NS -} // namespace boost - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#endif - - - - - - - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/protected_call.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/protected_call.hpp deleted file mode 100644 index 451b2e34bd..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/protected_call.hpp +++ /dev/null @@ -1,83 +0,0 @@ -/* - * - * Copyright (c) 2004 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE basic_regex_creator.cpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares template class basic_regex_creator which fills in - * the data members of a regex_data object. - */ - -#ifndef BOOST_REGEX_V4_PROTECTED_CALL_HPP -#define BOOST_REGEX_V4_PROTECTED_CALL_HPP - -#include <boost/config.hpp> - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -namespace boost{ -namespace BOOST_REGEX_DETAIL_NS{ - -class BOOST_REGEX_DECL abstract_protected_call -{ -public: - bool BOOST_REGEX_CALL execute()const; - // this stops gcc-4 from complaining: - virtual ~abstract_protected_call(){} -private: - virtual bool call()const = 0; -}; - -template <class T> -class concrete_protected_call - : public abstract_protected_call -{ -public: - typedef bool (T::*proc_type)(); - concrete_protected_call(T* o, proc_type p) - : obj(o), proc(p) {} -private: - bool call()const BOOST_OVERRIDE; - T* obj; - proc_type proc; -}; - -template <class T> -bool concrete_protected_call<T>::call()const -{ - return (obj->*proc)(); -} - -} -} // namespace boost - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/regbase.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/regbase.hpp deleted file mode 100644 index 2b737d5aba..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/regbase.hpp +++ /dev/null @@ -1,180 +0,0 @@ -/* - * - * Copyright (c) 1998-2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE regbase.cpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares class regbase. - */ - -#ifndef BOOST_REGEX_V4_REGBASE_HPP -#define BOOST_REGEX_V4_REGBASE_HPP - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -namespace boost{ -// -// class regbase -// handles error codes and flags -// -class BOOST_REGEX_DECL regbase -{ -public: - enum flag_type_ - { - // - // Divide the flags up into logical groups: - // bits 0-7 indicate main synatx type. - // bits 8-15 indicate syntax subtype. - // bits 16-31 indicate options that are common to all - // regex syntaxes. - // In all cases the default is 0. - // - // Main synatx group: - // - perl_syntax_group = 0, // default - basic_syntax_group = 1, // POSIX basic - literal = 2, // all characters are literals - main_option_type = literal | basic_syntax_group | perl_syntax_group, // everything! - // - // options specific to perl group: - // - no_bk_refs = 1 << 8, // \d not allowed - no_perl_ex = 1 << 9, // disable perl extensions - no_mod_m = 1 << 10, // disable Perl m modifier - mod_x = 1 << 11, // Perl x modifier - mod_s = 1 << 12, // force s modifier on (overrides match_not_dot_newline) - no_mod_s = 1 << 13, // force s modifier off (overrides match_not_dot_newline) - - // - // options specific to basic group: - // - no_char_classes = 1 << 8, // [[:CLASS:]] not allowed - no_intervals = 1 << 9, // {x,y} not allowed - bk_plus_qm = 1 << 10, // uses \+ and \? - bk_vbar = 1 << 11, // use \| for alternatives - emacs_ex = 1 << 12, // enables emacs extensions - - // - // options common to all groups: - // - no_escape_in_lists = 1 << 16, // '\' not special inside [...] - newline_alt = 1 << 17, // \n is the same as | - no_except = 1 << 18, // no exception on error - failbit = 1 << 19, // error flag - icase = 1 << 20, // characters are matched regardless of case - nocollate = 0, // don't use locale specific collation (deprecated) - collate = 1 << 21, // use locale specific collation - nosubs = 1 << 22, // don't mark sub-expressions - save_subexpression_location = 1 << 23, // save subexpression locations - no_empty_expressions = 1 << 24, // no empty expressions allowed - optimize = 0, // not really supported - - - - basic = basic_syntax_group | collate | no_escape_in_lists, - extended = no_bk_refs | collate | no_perl_ex | no_escape_in_lists, - normal = 0, - emacs = basic_syntax_group | collate | emacs_ex | bk_vbar, - awk = no_bk_refs | collate | no_perl_ex, - grep = basic | newline_alt, - egrep = extended | newline_alt, - sed = basic, - perl = normal, - ECMAScript = normal, - JavaScript = normal, - JScript = normal - }; - typedef unsigned int flag_type; - - enum restart_info - { - restart_any = 0, - restart_word = 1, - restart_line = 2, - restart_buf = 3, - restart_continue = 4, - restart_lit = 5, - restart_fixed_lit = 6, - restart_count = 7 - }; -}; - -// -// provide std lib proposal compatible constants: -// -namespace regex_constants{ - - enum flag_type_ - { - - no_except = ::boost::regbase::no_except, - failbit = ::boost::regbase::failbit, - literal = ::boost::regbase::literal, - icase = ::boost::regbase::icase, - nocollate = ::boost::regbase::nocollate, - collate = ::boost::regbase::collate, - nosubs = ::boost::regbase::nosubs, - optimize = ::boost::regbase::optimize, - bk_plus_qm = ::boost::regbase::bk_plus_qm, - bk_vbar = ::boost::regbase::bk_vbar, - no_intervals = ::boost::regbase::no_intervals, - no_char_classes = ::boost::regbase::no_char_classes, - no_escape_in_lists = ::boost::regbase::no_escape_in_lists, - no_mod_m = ::boost::regbase::no_mod_m, - mod_x = ::boost::regbase::mod_x, - mod_s = ::boost::regbase::mod_s, - no_mod_s = ::boost::regbase::no_mod_s, - save_subexpression_location = ::boost::regbase::save_subexpression_location, - no_empty_expressions = ::boost::regbase::no_empty_expressions, - - basic = ::boost::regbase::basic, - extended = ::boost::regbase::extended, - normal = ::boost::regbase::normal, - emacs = ::boost::regbase::emacs, - awk = ::boost::regbase::awk, - grep = ::boost::regbase::grep, - egrep = ::boost::regbase::egrep, - sed = basic, - perl = normal, - ECMAScript = normal, - JavaScript = normal, - JScript = normal - }; - typedef ::boost::regbase::flag_type syntax_option_type; - -} // namespace regex_constants - -} // namespace boost - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#endif - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/regex.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/regex.hpp deleted file mode 100644 index e8ce7e5e05..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/regex.hpp +++ /dev/null @@ -1,166 +0,0 @@ -/* - * - * Copyright (c) 1998-2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE regex.cpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares boost::basic_regex<> and associated - * functions and classes. This header is the main - * entry point for the template regex code. - */ - -#ifndef BOOST_RE_REGEX_HPP_INCLUDED -#define BOOST_RE_REGEX_HPP_INCLUDED - -#ifdef __cplusplus - -// what follows is all C++ don't include in C builds!! - -#ifndef BOOST_REGEX_CONFIG_HPP -#include <boost/regex/config.hpp> -#endif -#ifndef BOOST_REGEX_WORKAROUND_HPP -#include <boost/regex/v4/regex_workaround.hpp> -#endif - -#ifndef BOOST_REGEX_FWD_HPP -#include <boost/regex_fwd.hpp> -#endif -#ifndef BOOST_REGEX_TRAITS_HPP -#include <boost/regex/regex_traits.hpp> -#endif -#ifndef BOOST_REGEX_RAW_BUFFER_HPP -#include <boost/regex/v4/error_type.hpp> -#endif -#ifndef BOOST_REGEX_V4_MATCH_FLAGS -#include <boost/regex/v4/match_flags.hpp> -#endif -#ifndef BOOST_REGEX_RAW_BUFFER_HPP -#include <boost/regex/v4/regex_raw_buffer.hpp> -#endif -#ifndef BOOST_RE_PAT_EXCEPT_HPP -#include <boost/regex/pattern_except.hpp> -#endif - -#ifndef BOOST_REGEX_V4_CHAR_REGEX_TRAITS_HPP -#include <boost/regex/v4/char_regex_traits.hpp> -#endif -#ifndef BOOST_REGEX_V4_STATES_HPP -#include <boost/regex/v4/states.hpp> -#endif -#ifndef BOOST_REGEX_V4_REGBASE_HPP -#include <boost/regex/v4/regbase.hpp> -#endif -#ifndef BOOST_REGEX_V4_ITERATOR_TRAITS_HPP -#include <boost/regex/v4/iterator_traits.hpp> -#endif -#ifndef BOOST_REGEX_V4_BASIC_REGEX_HPP -#include <boost/regex/v4/basic_regex.hpp> -#endif -#ifndef BOOST_REGEX_V4_BASIC_REGEX_CREATOR_HPP -#include <boost/regex/v4/basic_regex_creator.hpp> -#endif -#ifndef BOOST_REGEX_V4_BASIC_REGEX_PARSER_HPP -#include <boost/regex/v4/basic_regex_parser.hpp> -#endif -#ifndef BOOST_REGEX_V4_SUB_MATCH_HPP -#include <boost/regex/v4/sub_match.hpp> -#endif -#ifndef BOOST_REGEX_FORMAT_HPP -#include <boost/regex/v4/regex_format.hpp> -#endif -#ifndef BOOST_REGEX_V4_MATCH_RESULTS_HPP -#include <boost/regex/v4/match_results.hpp> -#endif -#ifndef BOOST_REGEX_V4_PROTECTED_CALL_HPP -#include <boost/regex/v4/protected_call.hpp> -#endif -#ifndef BOOST_REGEX_MATCHER_HPP -#include <boost/regex/v4/perl_matcher.hpp> -#endif - - -namespace boost{ -#ifdef BOOST_REGEX_NO_FWD -typedef basic_regex<char, regex_traits<char> > regex; -#ifndef BOOST_NO_WREGEX -typedef basic_regex<wchar_t, regex_traits<wchar_t> > wregex; -#endif -#endif - -typedef match_results<const char*> cmatch; -typedef match_results<std::string::const_iterator> smatch; -#ifndef BOOST_NO_WREGEX -typedef match_results<const wchar_t*> wcmatch; -typedef match_results<std::wstring::const_iterator> wsmatch; -#endif - -} // namespace boost -#ifndef BOOST_REGEX_MATCH_HPP -#include <boost/regex/v4/regex_match.hpp> -#endif -#ifndef BOOST_REGEX_V4_REGEX_SEARCH_HPP -#include <boost/regex/v4/regex_search.hpp> -#endif -#ifndef BOOST_REGEX_ITERATOR_HPP -#include <boost/regex/v4/regex_iterator.hpp> -#endif -#ifndef BOOST_REGEX_TOKEN_ITERATOR_HPP -#include <boost/regex/v4/regex_token_iterator.hpp> -#endif -#ifndef BOOST_REGEX_V4_REGEX_GREP_HPP -#include <boost/regex/v4/regex_grep.hpp> -#endif -#ifndef BOOST_REGEX_V4_REGEX_REPLACE_HPP -#include <boost/regex/v4/regex_replace.hpp> -#endif -#ifndef BOOST_REGEX_V4_REGEX_MERGE_HPP -#include <boost/regex/v4/regex_merge.hpp> -#endif -#ifndef BOOST_REGEX_SPLIT_HPP -#include <boost/regex/v4/regex_split.hpp> -#endif - -#endif // __cplusplus - -#endif // include - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_format.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/regex_format.hpp deleted file mode 100644 index 9401fa30de..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_format.hpp +++ /dev/null @@ -1,1158 +0,0 @@ -/* - * - * Copyright (c) 1998-2009 John Maddock - * Copyright 2008 Eric Niebler. - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE regex_format.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Provides formatting output routines for search and replace - * operations. Note this is an internal header file included - * by regex.hpp, do not include on its own. - */ - -#ifndef BOOST_REGEX_FORMAT_HPP -#define BOOST_REGEX_FORMAT_HPP - -#include <boost/type_traits/is_pointer.hpp> -#include <boost/type_traits/is_function.hpp> -#include <boost/type_traits/is_class.hpp> -#include <boost/type_traits/is_same.hpp> -#include <boost/type_traits/is_convertible.hpp> -#include <boost/type_traits/remove_pointer.hpp> -#include <boost/type_traits/remove_cv.hpp> -#include <boost/mpl/if.hpp> -#include <boost/mpl/and.hpp> -#include <boost/mpl/not.hpp> -#ifndef BOOST_NO_SFINAE -#include <boost/mpl/has_xxx.hpp> -#endif -#include <boost/ref.hpp> - -namespace boost{ - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -// -// Forward declaration: -// - template <class BidiIterator, class Allocator = BOOST_DEDUCED_TYPENAME std::vector<sub_match<BidiIterator> >::allocator_type > -class match_results; - -namespace BOOST_REGEX_DETAIL_NS{ - -// -// struct trivial_format_traits: -// defines minimum localisation support for formatting -// in the case that the actual regex traits is unavailable. -// -template <class charT> -struct trivial_format_traits -{ - typedef charT char_type; - - static std::ptrdiff_t length(const charT* p) - { - return global_length(p); - } - static charT tolower(charT c) - { - return ::boost::BOOST_REGEX_DETAIL_NS::global_lower(c); - } - static charT toupper(charT c) - { - return ::boost::BOOST_REGEX_DETAIL_NS::global_upper(c); - } - static int value(const charT c, int radix) - { - int result = global_value(c); - return result >= radix ? -1 : result; - } - int toi(const charT*& p1, const charT* p2, int radix)const - { - return (int)global_toi(p1, p2, radix, *this); - } -}; - -#ifdef BOOST_MSVC -# pragma warning(push) -#pragma warning(disable:26812) -#endif -template <class OutputIterator, class Results, class traits, class ForwardIter> -class basic_regex_formatter -{ -public: - typedef typename traits::char_type char_type; - basic_regex_formatter(OutputIterator o, const Results& r, const traits& t) - : m_traits(t), m_results(r), m_out(o), m_position(), m_end(), m_flags(), m_state(output_copy), m_restore_state(output_copy), m_have_conditional(false) {} - OutputIterator format(ForwardIter p1, ForwardIter p2, match_flag_type f); - OutputIterator format(ForwardIter p1, match_flag_type f) - { - return format(p1, p1 + m_traits.length(p1), f); - } -private: - typedef typename Results::value_type sub_match_type; - enum output_state - { - output_copy, - output_next_lower, - output_next_upper, - output_lower, - output_upper, - output_none - }; - - void put(char_type c); - void put(const sub_match_type& sub); - void format_all(); - void format_perl(); - void format_escape(); - void format_conditional(); - void format_until_scope_end(); - bool handle_perl_verb(bool have_brace); - - inline typename Results::value_type const& get_named_sub(ForwardIter i, ForwardIter j, const mpl::false_&) - { - std::vector<char_type> v(i, j); - return (i != j) ? this->m_results.named_subexpression(&v[0], &v[0] + v.size()) - : this->m_results.named_subexpression(static_cast<const char_type*>(0), static_cast<const char_type*>(0)); - } - inline typename Results::value_type const& get_named_sub(ForwardIter i, ForwardIter j, const mpl::true_&) - { - return this->m_results.named_subexpression(i, j); - } - inline typename Results::value_type const& get_named_sub(ForwardIter i, ForwardIter j) - { - typedef typename boost::is_convertible<ForwardIter, const char_type*>::type tag_type; - return get_named_sub(i, j, tag_type()); - } - inline int get_named_sub_index(ForwardIter i, ForwardIter j, const mpl::false_&) - { - std::vector<char_type> v(i, j); - return (i != j) ? this->m_results.named_subexpression_index(&v[0], &v[0] + v.size()) - : this->m_results.named_subexpression_index(static_cast<const char_type*>(0), static_cast<const char_type*>(0)); - } - inline int get_named_sub_index(ForwardIter i, ForwardIter j, const mpl::true_&) - { - return this->m_results.named_subexpression_index(i, j); - } - inline int get_named_sub_index(ForwardIter i, ForwardIter j) - { - typedef typename boost::is_convertible<ForwardIter, const char_type*>::type tag_type; - return get_named_sub_index(i, j, tag_type()); - } -#ifdef BOOST_MSVC - // msvc-8.0 issues a spurious warning on the call to std::advance here: -#pragma warning(push) -#pragma warning(disable:4244) -#endif - inline int toi(ForwardIter& i, ForwardIter j, int base, const boost::mpl::false_&) - { - if(i != j) - { - std::vector<char_type> v(i, j); - const char_type* start = &v[0]; - const char_type* pos = start; - int r = (int)m_traits.toi(pos, &v[0] + v.size(), base); - std::advance(i, pos - start); - return r; - } - return -1; - } -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - inline int toi(ForwardIter& i, ForwardIter j, int base, const boost::mpl::true_&) - { - return m_traits.toi(i, j, base); - } - inline int toi(ForwardIter& i, ForwardIter j, int base) - { -#if defined(_MSC_VER) && defined(__INTEL_COMPILER) && ((__INTEL_COMPILER == 9999) || (__INTEL_COMPILER == 1210)) - // Workaround for Intel support issue #656654. - // See also https://svn.boost.org/trac/boost/ticket/6359 - return toi(i, j, base, mpl::false_()); -#else - typedef typename boost::is_convertible<ForwardIter, const char_type*&>::type tag_type; - return toi(i, j, base, tag_type()); -#endif - } - - const traits& m_traits; // the traits class for localised formatting operations - const Results& m_results; // the match_results being used. - OutputIterator m_out; // where to send output. - ForwardIter m_position; // format string, current position - ForwardIter m_end; // format string end - match_flag_type m_flags; // format flags to use - output_state m_state; // what to do with the next character - output_state m_restore_state; // what state to restore to. - bool m_have_conditional; // we are parsing a conditional -private: - basic_regex_formatter(const basic_regex_formatter&); - basic_regex_formatter& operator=(const basic_regex_formatter&); -}; -#ifdef BOOST_MSVC -# pragma warning(pop) -#endif - -template <class OutputIterator, class Results, class traits, class ForwardIter> -OutputIterator basic_regex_formatter<OutputIterator, Results, traits, ForwardIter>::format(ForwardIter p1, ForwardIter p2, match_flag_type f) -{ - m_position = p1; - m_end = p2; - m_flags = f; - format_all(); - return m_out; -} - -template <class OutputIterator, class Results, class traits, class ForwardIter> -void basic_regex_formatter<OutputIterator, Results, traits, ForwardIter>::format_all() -{ - // over and over: - while(m_position != m_end) - { - switch(*m_position) - { - case '&': - if(m_flags & ::boost::regex_constants::format_sed) - { - ++m_position; - put(m_results[0]); - break; - } - put(*m_position++); - break; - case '\\': - format_escape(); - break; - case '(': - if(m_flags & boost::regex_constants::format_all) - { - ++m_position; - bool have_conditional = m_have_conditional; - m_have_conditional = false; - format_until_scope_end(); - m_have_conditional = have_conditional; - if(m_position == m_end) - return; - BOOST_REGEX_ASSERT(*m_position == static_cast<char_type>(')')); - ++m_position; // skip the closing ')' - break; - } - put(*m_position); - ++m_position; - break; - case ')': - if(m_flags & boost::regex_constants::format_all) - { - return; - } - put(*m_position); - ++m_position; - break; - case ':': - if((m_flags & boost::regex_constants::format_all) && m_have_conditional) - { - return; - } - put(*m_position); - ++m_position; - break; - case '?': - if(m_flags & boost::regex_constants::format_all) - { - ++m_position; - format_conditional(); - break; - } - put(*m_position); - ++m_position; - break; - case '$': - if((m_flags & format_sed) == 0) - { - format_perl(); - break; - } - // not a special character: - BOOST_FALLTHROUGH; - default: - put(*m_position); - ++m_position; - break; - } - } -} - -template <class OutputIterator, class Results, class traits, class ForwardIter> -void basic_regex_formatter<OutputIterator, Results, traits, ForwardIter>::format_perl() -{ - // - // On entry *m_position points to a '$' character - // output the information that goes with it: - // - BOOST_REGEX_ASSERT(*m_position == '$'); - // - // see if this is a trailing '$': - // - if(++m_position == m_end) - { - --m_position; - put(*m_position); - ++m_position; - return; - } - // - // OK find out what kind it is: - // - bool have_brace = false; - ForwardIter save_position = m_position; - switch(*m_position) - { - case '&': - ++m_position; - put(this->m_results[0]); - break; - case '`': - ++m_position; - put(this->m_results.prefix()); - break; - case '\'': - ++m_position; - put(this->m_results.suffix()); - break; - case '$': - put(*m_position++); - break; - case '+': - if((++m_position != m_end) && (*m_position == '{')) - { - ForwardIter base = ++m_position; - while((m_position != m_end) && (*m_position != '}')) ++m_position; - if(m_position != m_end) - { - // Named sub-expression: - put(get_named_sub(base, m_position)); - ++m_position; - break; - } - else - { - m_position = --base; - } - } - put((this->m_results)[this->m_results.size() > 1 ? static_cast<int>(this->m_results.size() - 1) : 1]); - break; - case '{': - have_brace = true; - ++m_position; - BOOST_FALLTHROUGH; - default: - // see if we have a number: - { - std::ptrdiff_t len = ::boost::BOOST_REGEX_DETAIL_NS::distance(m_position, m_end); - //len = (std::min)(static_cast<std::ptrdiff_t>(2), len); - int v = this->toi(m_position, m_position + len, 10); - if((v < 0) || (have_brace && ((m_position == m_end) || (*m_position != '}')))) - { - // Look for a Perl-5.10 verb: - if(!handle_perl_verb(have_brace)) - { - // leave the $ as is, and carry on: - m_position = --save_position; - put(*m_position); - ++m_position; - } - break; - } - // otherwise output sub v: - put(this->m_results[v]); - if(have_brace) - ++m_position; - } - } -} - -template <class OutputIterator, class Results, class traits, class ForwardIter> -bool basic_regex_formatter<OutputIterator, Results, traits, ForwardIter>::handle_perl_verb(bool have_brace) -{ - // - // We may have a capitalised string containing a Perl action: - // - static const char_type MATCH[] = { 'M', 'A', 'T', 'C', 'H' }; - static const char_type PREMATCH[] = { 'P', 'R', 'E', 'M', 'A', 'T', 'C', 'H' }; - static const char_type POSTMATCH[] = { 'P', 'O', 'S', 'T', 'M', 'A', 'T', 'C', 'H' }; - static const char_type LAST_PAREN_MATCH[] = { 'L', 'A', 'S', 'T', '_', 'P', 'A', 'R', 'E', 'N', '_', 'M', 'A', 'T', 'C', 'H' }; - static const char_type LAST_SUBMATCH_RESULT[] = { 'L', 'A', 'S', 'T', '_', 'S', 'U', 'B', 'M', 'A', 'T', 'C', 'H', '_', 'R', 'E', 'S', 'U', 'L', 'T' }; - static const char_type LAST_SUBMATCH_RESULT_ALT[] = { '^', 'N' }; - - if(m_position == m_end) - return false; - if(have_brace && (*m_position == '^')) - ++m_position; - - std::ptrdiff_t max_len = m_end - m_position; - - if((max_len >= 5) && std::equal(m_position, m_position + 5, MATCH)) - { - m_position += 5; - if(have_brace) - { - if((m_position != m_end) && (*m_position == '}')) - ++m_position; - else - { - m_position -= 5; - return false; - } - } - put(this->m_results[0]); - return true; - } - if((max_len >= 8) && std::equal(m_position, m_position + 8, PREMATCH)) - { - m_position += 8; - if(have_brace) - { - if((m_position != m_end) && (*m_position == '}')) - ++m_position; - else - { - m_position -= 8; - return false; - } - } - put(this->m_results.prefix()); - return true; - } - if((max_len >= 9) && std::equal(m_position, m_position + 9, POSTMATCH)) - { - m_position += 9; - if(have_brace) - { - if((m_position != m_end) && (*m_position == '}')) - ++m_position; - else - { - m_position -= 9; - return false; - } - } - put(this->m_results.suffix()); - return true; - } - if((max_len >= 16) && std::equal(m_position, m_position + 16, LAST_PAREN_MATCH)) - { - m_position += 16; - if(have_brace) - { - if((m_position != m_end) && (*m_position == '}')) - ++m_position; - else - { - m_position -= 16; - return false; - } - } - put((this->m_results)[this->m_results.size() > 1 ? static_cast<int>(this->m_results.size() - 1) : 1]); - return true; - } - if((max_len >= 20) && std::equal(m_position, m_position + 20, LAST_SUBMATCH_RESULT)) - { - m_position += 20; - if(have_brace) - { - if((m_position != m_end) && (*m_position == '}')) - ++m_position; - else - { - m_position -= 20; - return false; - } - } - put(this->m_results.get_last_closed_paren()); - return true; - } - if((max_len >= 2) && std::equal(m_position, m_position + 2, LAST_SUBMATCH_RESULT_ALT)) - { - m_position += 2; - if(have_brace) - { - if((m_position != m_end) && (*m_position == '}')) - ++m_position; - else - { - m_position -= 2; - return false; - } - } - put(this->m_results.get_last_closed_paren()); - return true; - } - return false; -} - -template <class OutputIterator, class Results, class traits, class ForwardIter> -void basic_regex_formatter<OutputIterator, Results, traits, ForwardIter>::format_escape() -{ - // skip the escape and check for trailing escape: - if(++m_position == m_end) - { - put(static_cast<char_type>('\\')); - return; - } - // now switch on the escape type: - switch(*m_position) - { - case 'a': - put(static_cast<char_type>('\a')); - ++m_position; - break; - case 'f': - put(static_cast<char_type>('\f')); - ++m_position; - break; - case 'n': - put(static_cast<char_type>('\n')); - ++m_position; - break; - case 'r': - put(static_cast<char_type>('\r')); - ++m_position; - break; - case 't': - put(static_cast<char_type>('\t')); - ++m_position; - break; - case 'v': - put(static_cast<char_type>('\v')); - ++m_position; - break; - case 'x': - if(++m_position == m_end) - { - put(static_cast<char_type>('x')); - return; - } - // maybe have \x{ddd} - if(*m_position == static_cast<char_type>('{')) - { - ++m_position; - int val = this->toi(m_position, m_end, 16); - if(val < 0) - { - // invalid value treat everything as literals: - put(static_cast<char_type>('x')); - put(static_cast<char_type>('{')); - return; - } - if((m_position == m_end) || (*m_position != static_cast<char_type>('}'))) - { - --m_position; - while(*m_position != static_cast<char_type>('\\')) - --m_position; - ++m_position; - put(*m_position++); - return; - } - ++m_position; - put(static_cast<char_type>(val)); - return; - } - else - { - std::ptrdiff_t len = ::boost::BOOST_REGEX_DETAIL_NS::distance(m_position, m_end); - len = (std::min)(static_cast<std::ptrdiff_t>(2), len); - int val = this->toi(m_position, m_position + len, 16); - if(val < 0) - { - --m_position; - put(*m_position++); - return; - } - put(static_cast<char_type>(val)); - } - break; - case 'c': - if(++m_position == m_end) - { - --m_position; - put(*m_position++); - return; - } - put(static_cast<char_type>(*m_position++ % 32)); - break; - case 'e': - put(static_cast<char_type>(27)); - ++m_position; - break; - default: - // see if we have a perl specific escape: - if((m_flags & boost::regex_constants::format_sed) == 0) - { - bool breakout = false; - switch(*m_position) - { - case 'l': - ++m_position; - m_restore_state = m_state; - m_state = output_next_lower; - breakout = true; - break; - case 'L': - ++m_position; - m_state = output_lower; - breakout = true; - break; - case 'u': - ++m_position; - m_restore_state = m_state; - m_state = output_next_upper; - breakout = true; - break; - case 'U': - ++m_position; - m_state = output_upper; - breakout = true; - break; - case 'E': - ++m_position; - m_state = output_copy; - breakout = true; - break; - } - if(breakout) - break; - } - // see if we have a \n sed style backreference: - std::ptrdiff_t len = ::boost::BOOST_REGEX_DETAIL_NS::distance(m_position, m_end); - len = (std::min)(static_cast<std::ptrdiff_t>(1), len); - int v = this->toi(m_position, m_position+len, 10); - if((v > 0) || ((v == 0) && (m_flags & ::boost::regex_constants::format_sed))) - { - put(m_results[v]); - break; - } - else if(v == 0) - { - // octal ecape sequence: - --m_position; - len = ::boost::BOOST_REGEX_DETAIL_NS::distance(m_position, m_end); - len = (std::min)(static_cast<std::ptrdiff_t>(4), len); - v = this->toi(m_position, m_position + len, 8); - BOOST_REGEX_ASSERT(v >= 0); - put(static_cast<char_type>(v)); - break; - } - // Otherwise output the character "as is": - put(*m_position++); - break; - } -} - -template <class OutputIterator, class Results, class traits, class ForwardIter> -void basic_regex_formatter<OutputIterator, Results, traits, ForwardIter>::format_conditional() -{ - if(m_position == m_end) - { - // oops trailing '?': - put(static_cast<char_type>('?')); - return; - } - int v; - if(*m_position == '{') - { - ForwardIter base = m_position; - ++m_position; - v = this->toi(m_position, m_end, 10); - if(v < 0) - { - // Try a named subexpression: - while((m_position != m_end) && (*m_position != '}')) - ++m_position; - v = this->get_named_sub_index(base + 1, m_position); - } - if((v < 0) || (*m_position != '}')) - { - m_position = base; - // oops trailing '?': - put(static_cast<char_type>('?')); - return; - } - // Skip trailing '}': - ++m_position; - } - else - { - std::ptrdiff_t len = ::boost::BOOST_REGEX_DETAIL_NS::distance(m_position, m_end); - len = (std::min)(static_cast<std::ptrdiff_t>(2), len); - v = this->toi(m_position, m_position + len, 10); - } - if(v < 0) - { - // oops not a number: - put(static_cast<char_type>('?')); - return; - } - - // output varies depending upon whether sub-expression v matched or not: - if(m_results[v].matched) - { - m_have_conditional = true; - format_all(); - m_have_conditional = false; - if((m_position != m_end) && (*m_position == static_cast<char_type>(':'))) - { - // skip the ':': - ++m_position; - // save output state, then turn it off: - output_state saved_state = m_state; - m_state = output_none; - // format the rest of this scope: - format_until_scope_end(); - // restore output state: - m_state = saved_state; - } - } - else - { - // save output state, then turn it off: - output_state saved_state = m_state; - m_state = output_none; - // format until ':' or ')': - m_have_conditional = true; - format_all(); - m_have_conditional = false; - // restore state: - m_state = saved_state; - if((m_position != m_end) && (*m_position == static_cast<char_type>(':'))) - { - // skip the ':': - ++m_position; - // format the rest of this scope: - format_until_scope_end(); - } - } -} - -template <class OutputIterator, class Results, class traits, class ForwardIter> -void basic_regex_formatter<OutputIterator, Results, traits, ForwardIter>::format_until_scope_end() -{ - do - { - format_all(); - if((m_position == m_end) || (*m_position == static_cast<char_type>(')'))) - return; - put(*m_position++); - }while(m_position != m_end); -} - -template <class OutputIterator, class Results, class traits, class ForwardIter> -void basic_regex_formatter<OutputIterator, Results, traits, ForwardIter>::put(char_type c) -{ - // write a single character to output - // according to which case translation mode we are in: - switch(this->m_state) - { - case output_none: - return; - case output_next_lower: - c = m_traits.tolower(c); - this->m_state = m_restore_state; - break; - case output_next_upper: - c = m_traits.toupper(c); - this->m_state = m_restore_state; - break; - case output_lower: - c = m_traits.tolower(c); - break; - case output_upper: - c = m_traits.toupper(c); - break; - default: - break; - } - *m_out = c; - ++m_out; -} - -template <class OutputIterator, class Results, class traits, class ForwardIter> -void basic_regex_formatter<OutputIterator, Results, traits, ForwardIter>::put(const sub_match_type& sub) -{ - typedef typename sub_match_type::iterator iterator_type; - iterator_type i = sub.first; - while(i != sub.second) - { - put(*i); - ++i; - } -} - -template <class S> -class string_out_iterator -{ - S* out; -public: - string_out_iterator(S& s) : out(&s) {} - string_out_iterator& operator++() { return *this; } - string_out_iterator& operator++(int) { return *this; } - string_out_iterator& operator*() { return *this; } - string_out_iterator& operator=(typename S::value_type v) - { - out->append(1, v); - return *this; - } - - typedef std::ptrdiff_t difference_type; - typedef typename S::value_type value_type; - typedef value_type* pointer; - typedef value_type& reference; - typedef std::output_iterator_tag iterator_category; -}; - -template <class OutputIterator, class Iterator, class Alloc, class ForwardIter, class traits> -OutputIterator regex_format_imp(OutputIterator out, - const match_results<Iterator, Alloc>& m, - ForwardIter p1, ForwardIter p2, - match_flag_type flags, - const traits& t - ) -{ - if(flags & regex_constants::format_literal) - { - return BOOST_REGEX_DETAIL_NS::copy(p1, p2, out); - } - - BOOST_REGEX_DETAIL_NS::basic_regex_formatter< - OutputIterator, - match_results<Iterator, Alloc>, - traits, ForwardIter> f(out, m, t); - return f.format(p1, p2, flags); -} - -#ifndef BOOST_NO_SFINAE - -BOOST_MPL_HAS_XXX_TRAIT_DEF(const_iterator) - -struct any_type -{ - template <class T> - any_type(const T&); - template <class T, class U> - any_type(const T&, const U&); - template <class T, class U, class V> - any_type(const T&, const U&, const V&); -}; -typedef char no_type; -typedef char (&unary_type)[2]; -typedef char (&binary_type)[3]; -typedef char (&ternary_type)[4]; - -no_type check_is_formatter(unary_type, binary_type, ternary_type); -template<typename T> -unary_type check_is_formatter(T const &, binary_type, ternary_type); -template<typename T> -binary_type check_is_formatter(unary_type, T const &, ternary_type); -template<typename T, typename U> -binary_type check_is_formatter(T const &, U const &, ternary_type); -template<typename T> -ternary_type check_is_formatter(unary_type, binary_type, T const &); -template<typename T, typename U> -ternary_type check_is_formatter(T const &, binary_type, U const &); -template<typename T, typename U> -ternary_type check_is_formatter(unary_type, T const &, U const &); -template<typename T, typename U, typename V> -ternary_type check_is_formatter(T const &, U const &, V const &); - -struct unary_binary_ternary -{ - typedef unary_type (*unary_fun)(any_type); - typedef binary_type (*binary_fun)(any_type, any_type); - typedef ternary_type (*ternary_fun)(any_type, any_type, any_type); - operator unary_fun(); - operator binary_fun(); - operator ternary_fun(); -}; - -template<typename Formatter, bool IsFunction = boost::is_function<Formatter>::value> -struct formatter_wrapper - : Formatter - , unary_binary_ternary -{ - formatter_wrapper(){} -}; - -template<typename Formatter> -struct formatter_wrapper<Formatter, true> - : unary_binary_ternary -{ - operator Formatter *(); -}; - -template<typename Formatter> -struct formatter_wrapper<Formatter *, false> - : unary_binary_ternary -{ - operator Formatter *(); -}; - -template <class F, class M, class O> -struct format_traits_imp -{ -private: - // - // F must be a pointer, a function, or a class with a function call operator: - // - BOOST_STATIC_ASSERT((::boost::is_pointer<F>::value || ::boost::is_function<F>::value || ::boost::is_class<F>::value)); - static formatter_wrapper<typename unwrap_reference<F>::type> f; - static M m; - static O out; - static boost::regex_constants::match_flag_type flags; -public: - BOOST_STATIC_CONSTANT(int, value = sizeof(check_is_formatter(f(m), f(m, out), f(m, out, flags)))); -}; - -template <class F, class M, class O> -struct format_traits -{ -public: - // - // Type is mpl::int_<N> where N is one of: - // - // 0 : F is a pointer to a presumably null-terminated string. - // 1 : F is a character-container such as a std::string. - // 2 : F is a Unary Functor. - // 3 : F is a Binary Functor. - // 4 : F is a Ternary Functor. - // - typedef typename boost::mpl::if_< - boost::mpl::and_<boost::is_pointer<F>, boost::mpl::not_<boost::is_function<typename boost::remove_pointer<F>::type> > >, - boost::mpl::int_<0>, - typename boost::mpl::if_< - has_const_iterator<F>, - boost::mpl::int_<1>, - boost::mpl::int_<format_traits_imp<F, M, O>::value> - >::type - >::type type; - // - // This static assertion will fail if the functor passed does not accept - // the same type of arguments passed. - // - BOOST_STATIC_ASSERT( boost::is_class<F>::value && !has_const_iterator<F>::value ? (type::value > 1) : true); -}; - -#else // BOOST_NO_SFINAE - -template <class F, class M, class O> -struct format_traits -{ -public: - // - // Type is mpl::int_<N> where N is one of: - // - // 0 : F is a pointer to a presumably null-terminated string. - // 1 : F is a character-container such as a std::string. - // - // Other options such as F being a Functor are not supported without - // SFINAE support. - // - typedef typename boost::mpl::if_< - boost::is_pointer<F>, - boost::mpl::int_<0>, - boost::mpl::int_<1> - >::type type; -}; - -#endif // BOOST_NO_SFINAE - -template <class Base, class Match> -struct format_functor3 -{ - format_functor3(Base b) : func(b) {} - template <class OutputIter> - OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type f) - { - return boost::unwrap_ref(func)(m, i, f); - } - template <class OutputIter, class Traits> - OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type f, const Traits&) - { - return (*this)(m, i, f); - } -private: - Base func; - format_functor3(const format_functor3&); - format_functor3& operator=(const format_functor3&); -}; - -template <class Base, class Match> -struct format_functor2 -{ - format_functor2(Base b) : func(b) {} - template <class OutputIter> - OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type /*f*/) - { - return boost::unwrap_ref(func)(m, i); - } - template <class OutputIter, class Traits> - OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type f, const Traits&) - { - return (*this)(m, i, f); - } -private: - Base func; - format_functor2(const format_functor2&); - format_functor2& operator=(const format_functor2&); -}; - -template <class Base, class Match> -struct format_functor1 -{ - format_functor1(Base b) : func(b) {} - - template <class S, class OutputIter> - OutputIter do_format_string(const S& s, OutputIter i) - { - return BOOST_REGEX_DETAIL_NS::copy(s.begin(), s.end(), i); - } - template <class S, class OutputIter> - inline OutputIter do_format_string(const S* s, OutputIter i) - { - while(s && *s) - { - *i = *s; - ++i; - ++s; - } - return i; - } - template <class OutputIter> - OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type /*f*/) - { - return do_format_string(boost::unwrap_ref(func)(m), i); - } - template <class OutputIter, class Traits> - OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type f, const Traits&) - { - return (*this)(m, i, f); - } -private: - Base func; - format_functor1(const format_functor1&); - format_functor1& operator=(const format_functor1&); -}; - -template <class charT, class Match, class Traits> -struct format_functor_c_string -{ - format_functor_c_string(const charT* ps) : func(ps) {} - - template <class OutputIter> - OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type f, const Traits& t = Traits()) - { - //typedef typename Match::char_type char_type; - const charT* end = func; - while(*end) ++end; - return regex_format_imp(i, m, func, end, f, t); - } -private: - const charT* func; - format_functor_c_string(const format_functor_c_string&); - format_functor_c_string& operator=(const format_functor_c_string&); -}; - -template <class Container, class Match, class Traits> -struct format_functor_container -{ - format_functor_container(const Container& c) : func(c) {} - - template <class OutputIter> - OutputIter operator()(const Match& m, OutputIter i, boost::regex_constants::match_flag_type f, const Traits& t = Traits()) - { - //typedef typename Match::char_type char_type; - return BOOST_REGEX_DETAIL_NS::regex_format_imp(i, m, func.begin(), func.end(), f, t); - } -private: - const Container& func; - format_functor_container(const format_functor_container&); - format_functor_container& operator=(const format_functor_container&); -}; - -template <class Func, class Match, class OutputIterator, class Traits = BOOST_REGEX_DETAIL_NS::trivial_format_traits<typename Match::char_type> > -struct compute_functor_type -{ - typedef typename format_traits<Func, Match, OutputIterator>::type tag; - typedef typename boost::remove_cv< typename boost::remove_pointer<Func>::type>::type maybe_char_type; - - typedef typename mpl::if_< - ::boost::is_same<tag, mpl::int_<0> >, format_functor_c_string<maybe_char_type, Match, Traits>, - typename mpl::if_< - ::boost::is_same<tag, mpl::int_<1> >, format_functor_container<Func, Match, Traits>, - typename mpl::if_< - ::boost::is_same<tag, mpl::int_<2> >, format_functor1<Func, Match>, - typename mpl::if_< - ::boost::is_same<tag, mpl::int_<3> >, format_functor2<Func, Match>, - format_functor3<Func, Match> - >::type - >::type - >::type - >::type type; -}; - -} // namespace BOOST_REGEX_DETAIL_NS - -template <class OutputIterator, class Iterator, class Allocator, class Functor> -inline OutputIterator regex_format(OutputIterator out, - const match_results<Iterator, Allocator>& m, - Functor fmt, - match_flag_type flags = format_all - ) -{ - return m.format(out, fmt, flags); -} - -template <class Iterator, class Allocator, class Functor> -inline std::basic_string<typename match_results<Iterator, Allocator>::char_type> regex_format(const match_results<Iterator, Allocator>& m, - Functor fmt, - match_flag_type flags = format_all) -{ - return m.format(fmt, flags); -} - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -} // namespace boost - -#endif // BOOST_REGEX_FORMAT_HPP - - - - - - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_fwd.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/regex_fwd.hpp deleted file mode 100644 index 3076b069ac..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_fwd.hpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - * - * Copyright (c) 1998-2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE regex_fwd.cpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Forward declares boost::basic_regex<> and - * associated typedefs. - */ - -#ifndef BOOST_REGEX_FWD_HPP_INCLUDED -#define BOOST_REGEX_FWD_HPP_INCLUDED - -#ifndef BOOST_REGEX_CONFIG_HPP -#include <boost/regex/config.hpp> -#endif - -// -// define BOOST_REGEX_NO_FWD if this -// header doesn't work! -// -#ifdef BOOST_REGEX_NO_FWD -# ifndef BOOST_RE_REGEX_HPP -# include <boost/regex.hpp> -# endif -#else - -namespace boost{ - -template <class charT> -class cpp_regex_traits; -template <class charT> -struct c_regex_traits; -template <class charT> -class w32_regex_traits; - -#ifdef BOOST_REGEX_USE_WIN32_LOCALE -template <class charT, class implementationT = w32_regex_traits<charT> > -struct regex_traits; -#elif defined(BOOST_REGEX_USE_CPP_LOCALE) -template <class charT, class implementationT = cpp_regex_traits<charT> > -struct regex_traits; -#else -template <class charT, class implementationT = c_regex_traits<charT> > -struct regex_traits; -#endif - -template <class charT, class traits = regex_traits<charT> > -class basic_regex; - -typedef basic_regex<char, regex_traits<char> > regex; -#ifndef BOOST_NO_WREGEX -typedef basic_regex<wchar_t, regex_traits<wchar_t> > wregex; -#endif - -} // namespace boost - -#endif // BOOST_REGEX_NO_FWD - -#endif - - - - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_grep.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/regex_grep.hpp deleted file mode 100644 index c5cb054e58..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_grep.hpp +++ /dev/null @@ -1,155 +0,0 @@ -/* - * - * Copyright (c) 1998-2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE regex_grep.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Provides regex_grep implementation. - */ - -#ifndef BOOST_REGEX_V4_REGEX_GREP_HPP -#define BOOST_REGEX_V4_REGEX_GREP_HPP - - -namespace boost{ - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -// -// regex_grep: -// find all non-overlapping matches within the sequence first last: -// -template <class Predicate, class BidiIterator, class charT, class traits> -inline unsigned int regex_grep(Predicate foo, - BidiIterator first, - BidiIterator last, - const basic_regex<charT, traits>& e, - match_flag_type flags = match_default) -{ - if(e.flags() & regex_constants::failbit) - return false; - - typedef typename match_results<BidiIterator>::allocator_type match_allocator_type; - - match_results<BidiIterator> m; - BOOST_REGEX_DETAIL_NS::perl_matcher<BidiIterator, match_allocator_type, traits> matcher(first, last, m, e, flags, first); - unsigned int count = 0; - while(matcher.find()) - { - ++count; - if(0 == foo(m)) - return count; // caller doesn't want to go on - if(m[0].second == last) - return count; // we've reached the end, don't try and find an extra null match. - if(m.length() == 0) - { - if(m[0].second == last) - return count; - // we found a NULL-match, now try to find - // a non-NULL one at the same position: - match_results<BidiIterator, match_allocator_type> m2(m); - matcher.setf(match_not_null | match_continuous); - if(matcher.find()) - { - ++count; - if(0 == foo(m)) - return count; - } - else - { - // reset match back to where it was: - m = m2; - } - matcher.unsetf((match_not_null | match_continuous) & ~flags); - } - } - return count; -} - -// -// regex_grep convenience interfaces: -#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING -// -// this isn't really a partial specialisation, but template function -// overloading - if the compiler doesn't support partial specialisation -// then it really won't support this either: -template <class Predicate, class charT, class traits> -inline unsigned int regex_grep(Predicate foo, const charT* str, - const basic_regex<charT, traits>& e, - match_flag_type flags = match_default) -{ - return regex_grep(foo, str, str + traits::length(str), e, flags); -} - -template <class Predicate, class ST, class SA, class charT, class traits> -inline unsigned int regex_grep(Predicate foo, const std::basic_string<charT, ST, SA>& s, - const basic_regex<charT, traits>& e, - match_flag_type flags = match_default) -{ - return regex_grep(foo, s.begin(), s.end(), e, flags); -} -#else // partial specialisation -inline unsigned int regex_grep(bool (*foo)(const cmatch&), const char* str, - const regex& e, - match_flag_type flags = match_default) -{ - return regex_grep(foo, str, str + regex::traits_type::length(str), e, flags); -} -#ifndef BOOST_NO_WREGEX -inline unsigned int regex_grep(bool (*foo)(const wcmatch&), const wchar_t* str, - const wregex& e, - match_flag_type flags = match_default) -{ - return regex_grep(foo, str, str + wregex::traits_type::length(str), e, flags); -} -#endif -inline unsigned int regex_grep(bool (*foo)(const match_results<std::string::const_iterator>&), const std::string& s, - const regex& e, - match_flag_type flags = match_default) -{ - return regex_grep(foo, s.begin(), s.end(), e, flags); -} -#if !defined(BOOST_NO_WREGEX) -inline unsigned int regex_grep(bool (*foo)(const match_results<std::basic_string<wchar_t>::const_iterator>&), - const std::basic_string<wchar_t>& s, - const wregex& e, - match_flag_type flags = match_default) -{ - return regex_grep(foo, s.begin(), s.end(), e, flags); -} -#endif -#endif - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -} // namespace boost - -#endif // BOOST_REGEX_V4_REGEX_GREP_HPP - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_iterator.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/regex_iterator.hpp deleted file mode 100644 index bbdeed5880..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_iterator.hpp +++ /dev/null @@ -1,195 +0,0 @@ -/* - * - * Copyright (c) 2003 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE regex_iterator.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Provides regex_iterator implementation. - */ - -#ifndef BOOST_REGEX_V4_REGEX_ITERATOR_HPP -#define BOOST_REGEX_V4_REGEX_ITERATOR_HPP - -#include <boost/shared_ptr.hpp> - -namespace boost{ - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -template <class BidirectionalIterator, - class charT, - class traits> -class regex_iterator_implementation -{ - typedef basic_regex<charT, traits> regex_type; - - match_results<BidirectionalIterator> what; // current match - BidirectionalIterator base; // start of sequence - BidirectionalIterator end; // end of sequence - const regex_type re; // the expression - match_flag_type flags; // flags for matching - -public: - regex_iterator_implementation(const regex_type* p, BidirectionalIterator last, match_flag_type f) - : base(), end(last), re(*p), flags(f){} - regex_iterator_implementation(const regex_iterator_implementation& other) - :what(other.what), base(other.base), end(other.end), re(other.re), flags(other.flags){} - bool init(BidirectionalIterator first) - { - base = first; - return regex_search(first, end, what, re, flags); - } - bool compare(const regex_iterator_implementation& that) - { - if(this == &that) return true; - return (&re.get_data() == &that.re.get_data()) && (end == that.end) && (flags == that.flags) && (what[0].first == that.what[0].first) && (what[0].second == that.what[0].second); - } - const match_results<BidirectionalIterator>& get() - { return what; } - bool next() - { - //if(what.prefix().first != what[0].second) - // flags |= match_prev_avail; - BidirectionalIterator next_start = what[0].second; - match_flag_type f(flags); - if(!what.length() || (f & regex_constants::match_posix)) - f |= regex_constants::match_not_initial_null; - //if(base != next_start) - // f |= regex_constants::match_not_bob; - bool result = regex_search(next_start, end, what, re, f, base); - if(result) - what.set_base(base); - return result; - } -private: - regex_iterator_implementation& operator=(const regex_iterator_implementation&); -}; - -template <class BidirectionalIterator, - class charT = BOOST_DEDUCED_TYPENAME BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidirectionalIterator>::value_type, - class traits = regex_traits<charT> > -class regex_iterator -{ -private: - typedef regex_iterator_implementation<BidirectionalIterator, charT, traits> impl; - typedef shared_ptr<impl> pimpl; -public: - typedef basic_regex<charT, traits> regex_type; - typedef match_results<BidirectionalIterator> value_type; - typedef typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidirectionalIterator>::difference_type - difference_type; - typedef const value_type* pointer; - typedef const value_type& reference; - typedef std::forward_iterator_tag iterator_category; - - regex_iterator(){} - regex_iterator(BidirectionalIterator a, BidirectionalIterator b, - const regex_type& re, - match_flag_type m = match_default) - : pdata(new impl(&re, b, m)) - { - if(!pdata->init(a)) - { - pdata.reset(); - } - } - regex_iterator(const regex_iterator& that) - : pdata(that.pdata) {} - regex_iterator& operator=(const regex_iterator& that) - { - pdata = that.pdata; - return *this; - } - bool operator==(const regex_iterator& that)const - { - if((pdata.get() == 0) || (that.pdata.get() == 0)) - return pdata.get() == that.pdata.get(); - return pdata->compare(*(that.pdata.get())); - } - bool operator!=(const regex_iterator& that)const - { return !(*this == that); } - const value_type& operator*()const - { return pdata->get(); } - const value_type* operator->()const - { return &(pdata->get()); } - regex_iterator& operator++() - { - cow(); - if(0 == pdata->next()) - { - pdata.reset(); - } - return *this; - } - regex_iterator operator++(int) - { - regex_iterator result(*this); - ++(*this); - return result; - } -private: - - pimpl pdata; - - void cow() - { - // copy-on-write - if(pdata.get() && !pdata.unique()) - { - pdata.reset(new impl(*(pdata.get()))); - } - } -}; - -typedef regex_iterator<const char*> cregex_iterator; -typedef regex_iterator<std::string::const_iterator> sregex_iterator; -#ifndef BOOST_NO_WREGEX -typedef regex_iterator<const wchar_t*> wcregex_iterator; -typedef regex_iterator<std::wstring::const_iterator> wsregex_iterator; -#endif - -// make_regex_iterator: -template <class charT, class traits> -inline regex_iterator<const charT*, charT, traits> make_regex_iterator(const charT* p, const basic_regex<charT, traits>& e, regex_constants::match_flag_type m = regex_constants::match_default) -{ - return regex_iterator<const charT*, charT, traits>(p, p+traits::length(p), e, m); -} -template <class charT, class traits, class ST, class SA> -inline regex_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits> make_regex_iterator(const std::basic_string<charT, ST, SA>& p, const basic_regex<charT, traits>& e, regex_constants::match_flag_type m = regex_constants::match_default) -{ - return regex_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits>(p.begin(), p.end(), e, m); -} - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -} // namespace boost - -#endif // BOOST_REGEX_V4_REGEX_ITERATOR_HPP - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_match.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/regex_match.hpp deleted file mode 100644 index a50daa2aa5..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_match.hpp +++ /dev/null @@ -1,382 +0,0 @@ -/* - * - * Copyright (c) 1998-2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE regex_match.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Regular expression matching algorithms. - * Note this is an internal header file included - * by regex.hpp, do not include on its own. - */ - - -#ifndef BOOST_REGEX_MATCH_HPP -#define BOOST_REGEX_MATCH_HPP - -namespace boost{ - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -// -// proc regex_match -// returns true if the specified regular expression matches -// the whole of the input. Fills in what matched in m. -// -template <class BidiIterator, class Allocator, class charT, class traits> -bool regex_match(BidiIterator first, BidiIterator last, - match_results<BidiIterator, Allocator>& m, - const basic_regex<charT, traits>& e, - match_flag_type flags = match_default) -{ - BOOST_REGEX_DETAIL_NS::perl_matcher<BidiIterator, Allocator, traits> matcher(first, last, m, e, flags, first); - return matcher.match(); -} -template <class iterator, class charT, class traits> -bool regex_match(iterator first, iterator last, - const basic_regex<charT, traits>& e, - match_flag_type flags = match_default) -{ - match_results<iterator> m; - return regex_match(first, last, m, e, flags | regex_constants::match_any); -} -// -// query_match convenience interfaces: -#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING -// -// this isn't really a partial specialisation, but template function -// overloading - if the compiler doesn't support partial specialisation -// then it really won't support this either: -template <class charT, class Allocator, class traits> -inline bool regex_match(const charT* str, - match_results<const charT*, Allocator>& m, - const basic_regex<charT, traits>& e, - match_flag_type flags = match_default) -{ - return regex_match(str, str + traits::length(str), m, e, flags); -} - -template <class ST, class SA, class Allocator, class charT, class traits> -inline bool regex_match(const std::basic_string<charT, ST, SA>& s, - match_results<typename std::basic_string<charT, ST, SA>::const_iterator, Allocator>& m, - const basic_regex<charT, traits>& e, - match_flag_type flags = match_default) -{ - return regex_match(s.begin(), s.end(), m, e, flags); -} -template <class charT, class traits> -inline bool regex_match(const charT* str, - const basic_regex<charT, traits>& e, - match_flag_type flags = match_default) -{ - match_results<const charT*> m; - return regex_match(str, str + traits::length(str), m, e, flags | regex_constants::match_any); -} - -template <class ST, class SA, class charT, class traits> -inline bool regex_match(const std::basic_string<charT, ST, SA>& s, - const basic_regex<charT, traits>& e, - match_flag_type flags = match_default) -{ - typedef typename std::basic_string<charT, ST, SA>::const_iterator iterator; - match_results<iterator> m; - return regex_match(s.begin(), s.end(), m, e, flags | regex_constants::match_any); -} -#else // partial ordering -inline bool regex_match(const char* str, - cmatch& m, - const regex& e, - match_flag_type flags = match_default) -{ - return regex_match(str, str + regex::traits_type::length(str), m, e, flags); -} -inline bool regex_match(const char* str, - const regex& e, - match_flag_type flags = match_default) -{ - match_results<const char*> m; - return regex_match(str, str + regex::traits_type::length(str), m, e, flags | regex_constants::match_any); -} -#ifndef BOOST_NO_STD_LOCALE -inline bool regex_match(const char* str, - cmatch& m, - const basic_regex<char, cpp_regex_traits<char> >& e, - match_flag_type flags = match_default) -{ - return regex_match(str, str + regex::traits_type::length(str), m, e, flags); -} -inline bool regex_match(const char* str, - const basic_regex<char, cpp_regex_traits<char> >& e, - match_flag_type flags = match_default) -{ - match_results<const char*> m; - return regex_match(str, str + regex::traits_type::length(str), m, e, flags | regex_constants::match_any); -} -#endif -inline bool regex_match(const char* str, - cmatch& m, - const basic_regex<char, c_regex_traits<char> >& e, - match_flag_type flags = match_default) -{ - return regex_match(str, str + regex::traits_type::length(str), m, e, flags); -} -inline bool regex_match(const char* str, - const basic_regex<char, c_regex_traits<char> >& e, - match_flag_type flags = match_default) -{ - match_results<const char*> m; - return regex_match(str, str + regex::traits_type::length(str), m, e, flags | regex_constants::match_any); -} -#if defined(_WIN32) && !defined(BOOST_REGEX_NO_W32) -inline bool regex_match(const char* str, - cmatch& m, - const basic_regex<char, w32_regex_traits<char> >& e, - match_flag_type flags = match_default) -{ - return regex_match(str, str + regex::traits_type::length(str), m, e, flags); -} -inline bool regex_match(const char* str, - const basic_regex<char, w32_regex_traits<char> >& e, - match_flag_type flags = match_default) -{ - match_results<const char*> m; - return regex_match(str, str + regex::traits_type::length(str), m, e, flags | regex_constants::match_any); -} -#endif -#ifndef BOOST_NO_WREGEX -inline bool regex_match(const wchar_t* str, - wcmatch& m, - const wregex& e, - match_flag_type flags = match_default) -{ - return regex_match(str, str + wregex::traits_type::length(str), m, e, flags); -} -inline bool regex_match(const wchar_t* str, - const wregex& e, - match_flag_type flags = match_default) -{ - match_results<const wchar_t*> m; - return regex_match(str, str + wregex::traits_type::length(str), m, e, flags | regex_constants::match_any); -} -#ifndef BOOST_NO_STD_LOCALE -inline bool regex_match(const wchar_t* str, - wcmatch& m, - const basic_regex<wchar_t, cpp_regex_traits<wchar_t> >& e, - match_flag_type flags = match_default) -{ - return regex_match(str, str + wregex::traits_type::length(str), m, e, flags); -} -inline bool regex_match(const wchar_t* str, - const basic_regex<wchar_t, cpp_regex_traits<wchar_t> >& e, - match_flag_type flags = match_default) -{ - match_results<const wchar_t*> m; - return regex_match(str, str + wregex::traits_type::length(str), m, e, flags | regex_constants::match_any); -} -#endif -inline bool regex_match(const wchar_t* str, - wcmatch& m, - const basic_regex<wchar_t, c_regex_traits<wchar_t> >& e, - match_flag_type flags = match_default) -{ - return regex_match(str, str + wregex::traits_type::length(str), m, e, flags); -} -inline bool regex_match(const wchar_t* str, - const basic_regex<wchar_t, c_regex_traits<wchar_t> >& e, - match_flag_type flags = match_default) -{ - match_results<const wchar_t*> m; - return regex_match(str, str + wregex::traits_type::length(str), m, e, flags | regex_constants::match_any); -} -#if defined(_WIN32) && !defined(BOOST_REGEX_NO_W32) -inline bool regex_match(const wchar_t* str, - wcmatch& m, - const basic_regex<wchar_t, w32_regex_traits<wchar_t> >& e, - match_flag_type flags = match_default) -{ - return regex_match(str, str + wregex::traits_type::length(str), m, e, flags); -} -inline bool regex_match(const wchar_t* str, - const basic_regex<wchar_t, w32_regex_traits<wchar_t> >& e, - match_flag_type flags = match_default) -{ - match_results<const wchar_t*> m; - return regex_match(str, str + wregex::traits_type::length(str), m, e, flags | regex_constants::match_any); -} -#endif -#endif -inline bool regex_match(const std::string& s, - smatch& m, - const regex& e, - match_flag_type flags = match_default) -{ - return regex_match(s.begin(), s.end(), m, e, flags); -} -inline bool regex_match(const std::string& s, - const regex& e, - match_flag_type flags = match_default) -{ - match_results<std::string::const_iterator> m; - return regex_match(s.begin(), s.end(), m, e, flags | regex_constants::match_any); -} -#ifndef BOOST_NO_STD_LOCALE -inline bool regex_match(const std::string& s, - smatch& m, - const basic_regex<char, cpp_regex_traits<char> >& e, - match_flag_type flags = match_default) -{ - return regex_match(s.begin(), s.end(), m, e, flags); -} -inline bool regex_match(const std::string& s, - const basic_regex<char, cpp_regex_traits<char> >& e, - match_flag_type flags = match_default) -{ - match_results<std::string::const_iterator> m; - return regex_match(s.begin(), s.end(), m, e, flags | regex_constants::match_any); -} -#endif -inline bool regex_match(const std::string& s, - smatch& m, - const basic_regex<char, c_regex_traits<char> >& e, - match_flag_type flags = match_default) -{ - return regex_match(s.begin(), s.end(), m, e, flags); -} -inline bool regex_match(const std::string& s, - const basic_regex<char, c_regex_traits<char> >& e, - match_flag_type flags = match_default) -{ - match_results<std::string::const_iterator> m; - return regex_match(s.begin(), s.end(), m, e, flags | regex_constants::match_any); -} -#if defined(_WIN32) && !defined(BOOST_REGEX_NO_W32) -inline bool regex_match(const std::string& s, - smatch& m, - const basic_regex<char, w32_regex_traits<char> >& e, - match_flag_type flags = match_default) -{ - return regex_match(s.begin(), s.end(), m, e, flags); -} -inline bool regex_match(const std::string& s, - const basic_regex<char, w32_regex_traits<char> >& e, - match_flag_type flags = match_default) -{ - match_results<std::string::const_iterator> m; - return regex_match(s.begin(), s.end(), m, e, flags | regex_constants::match_any); -} -#endif -#if !defined(BOOST_NO_WREGEX) -inline bool regex_match(const std::basic_string<wchar_t>& s, - match_results<std::basic_string<wchar_t>::const_iterator>& m, - const wregex& e, - match_flag_type flags = match_default) -{ - return regex_match(s.begin(), s.end(), m, e, flags); -} -inline bool regex_match(const std::basic_string<wchar_t>& s, - const wregex& e, - match_flag_type flags = match_default) -{ - match_results<std::basic_string<wchar_t>::const_iterator> m; - return regex_match(s.begin(), s.end(), m, e, flags | regex_constants::match_any); -} -#ifndef BOOST_NO_STD_LOCALE -inline bool regex_match(const std::basic_string<wchar_t>& s, - match_results<std::basic_string<wchar_t>::const_iterator>& m, - const basic_regex<wchar_t, cpp_regex_traits<wchar_t> >& e, - match_flag_type flags = match_default) -{ - return regex_match(s.begin(), s.end(), m, e, flags); -} -inline bool regex_match(const std::basic_string<wchar_t>& s, - const basic_regex<wchar_t, cpp_regex_traits<wchar_t> >& e, - match_flag_type flags = match_default) -{ - match_results<std::basic_string<wchar_t>::const_iterator> m; - return regex_match(s.begin(), s.end(), m, e, flags | regex_constants::match_any); -} -#endif -inline bool regex_match(const std::basic_string<wchar_t>& s, - match_results<std::basic_string<wchar_t>::const_iterator>& m, - const basic_regex<wchar_t, c_regex_traits<wchar_t> >& e, - match_flag_type flags = match_default) -{ - return regex_match(s.begin(), s.end(), m, e, flags); -} -inline bool regex_match(const std::basic_string<wchar_t>& s, - const basic_regex<wchar_t, c_regex_traits<wchar_t> >& e, - match_flag_type flags = match_default) -{ - match_results<std::basic_string<wchar_t>::const_iterator> m; - return regex_match(s.begin(), s.end(), m, e, flags | regex_constants::match_any); -} -#if defined(_WIN32) && !defined(BOOST_REGEX_NO_W32) -inline bool regex_match(const std::basic_string<wchar_t>& s, - match_results<std::basic_string<wchar_t>::const_iterator>& m, - const basic_regex<wchar_t, w32_regex_traits<wchar_t> >& e, - match_flag_type flags = match_default) -{ - return regex_match(s.begin(), s.end(), m, e, flags); -} -inline bool regex_match(const std::basic_string<wchar_t>& s, - const basic_regex<wchar_t, w32_regex_traits<wchar_t> >& e, - match_flag_type flags = match_default) -{ - match_results<std::basic_string<wchar_t>::const_iterator> m; - return regex_match(s.begin(), s.end(), m, e, flags | regex_constants::match_any); -} -#endif -#endif - -#endif - - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -} // namespace boost - -#endif // BOOST_REGEX_MATCH_HPP - - - - - - - - - - - - - - - - - - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_merge.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/regex_merge.hpp deleted file mode 100644 index 404ca77501..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_merge.hpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - * - * Copyright (c) 1998-2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE regex_format.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Provides formatting output routines for search and replace - * operations. Note this is an internal header file included - * by regex.hpp, do not include on its own. - */ - -#ifndef BOOST_REGEX_V4_REGEX_MERGE_HPP -#define BOOST_REGEX_V4_REGEX_MERGE_HPP - - -namespace boost{ - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -template <class OutputIterator, class Iterator, class traits, class charT> -inline OutputIterator regex_merge(OutputIterator out, - Iterator first, - Iterator last, - const basic_regex<charT, traits>& e, - const charT* fmt, - match_flag_type flags = match_default) -{ - return regex_replace(out, first, last, e, fmt, flags); -} - -template <class OutputIterator, class Iterator, class traits, class charT> -inline OutputIterator regex_merge(OutputIterator out, - Iterator first, - Iterator last, - const basic_regex<charT, traits>& e, - const std::basic_string<charT>& fmt, - match_flag_type flags = match_default) -{ - return regex_merge(out, first, last, e, fmt.c_str(), flags); -} - -template <class traits, class charT> -inline std::basic_string<charT> regex_merge(const std::basic_string<charT>& s, - const basic_regex<charT, traits>& e, - const charT* fmt, - match_flag_type flags = match_default) -{ - return regex_replace(s, e, fmt, flags); -} - -template <class traits, class charT> -inline std::basic_string<charT> regex_merge(const std::basic_string<charT>& s, - const basic_regex<charT, traits>& e, - const std::basic_string<charT>& fmt, - match_flag_type flags = match_default) -{ - return regex_replace(s, e, fmt, flags); -} - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -} // namespace boost - -#endif // BOOST_REGEX_V4_REGEX_MERGE_HPP - - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_raw_buffer.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/regex_raw_buffer.hpp deleted file mode 100644 index ac27e1a29e..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_raw_buffer.hpp +++ /dev/null @@ -1,241 +0,0 @@ -/* - * - * Copyright (c) 1998-2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE regex_raw_buffer.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Raw character buffer for regex code. - * Note this is an internal header file included - * by regex.hpp, do not include on its own. - */ - -#ifndef BOOST_REGEX_RAW_BUFFER_HPP -#define BOOST_REGEX_RAW_BUFFER_HPP - -#ifndef BOOST_REGEX_CONFIG_HPP -#include <boost/regex/config.hpp> -#endif - -#include <algorithm> -#include <cstddef> - -namespace boost{ - namespace BOOST_REGEX_DETAIL_NS{ - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -struct empty_padding{}; - -union padding -{ - void* p; - unsigned int i; -}; - -template <int N> -struct padding3 -{ - enum{ - padding_size = 8, - padding_mask = 7 - }; -}; - -template<> -struct padding3<2> -{ - enum{ - padding_size = 2, - padding_mask = 1 - }; -}; - -template<> -struct padding3<4> -{ - enum{ - padding_size = 4, - padding_mask = 3 - }; -}; - -template<> -struct padding3<8> -{ - enum{ - padding_size = 8, - padding_mask = 7 - }; -}; - -template<> -struct padding3<16> -{ - enum{ - padding_size = 16, - padding_mask = 15 - }; -}; - -enum{ - padding_size = padding3<sizeof(padding)>::padding_size, - padding_mask = padding3<sizeof(padding)>::padding_mask -}; - -// -// class raw_storage -// basically this is a simplified vector<unsigned char> -// this is used by basic_regex for expression storage -// - -class raw_storage -{ -public: - typedef std::size_t size_type; - typedef unsigned char* pointer; -private: - pointer last, start, end; -public: - - raw_storage(); - raw_storage(size_type n); - - ~raw_storage() - { - ::operator delete(start); - } - - void BOOST_REGEX_CALL resize(size_type n) - { - size_type newsize = start ? last - start : 1024; - while (newsize < n) - newsize *= 2; - size_type datasize = end - start; - // extend newsize to WORD/DWORD boundary: - newsize = (newsize + padding_mask) & ~(padding_mask); - - // allocate and copy data: - pointer ptr = static_cast<pointer>(::operator new(newsize)); - BOOST_REGEX_NOEH_ASSERT(ptr) - if (start) - std::memcpy(ptr, start, datasize); - - // get rid of old buffer: - ::operator delete(start); - - // and set up pointers: - start = ptr; - end = ptr + datasize; - last = ptr + newsize; - } - - void* BOOST_REGEX_CALL extend(size_type n) - { - if(size_type(last - end) < n) - resize(n + (end - start)); - pointer result = end; - end += n; - return result; - } - - void* BOOST_REGEX_CALL insert(size_type pos, size_type n) - { - BOOST_REGEX_ASSERT(pos <= size_type(end - start)); - if (size_type(last - end) < n) - resize(n + (end - start)); - void* result = start + pos; - std::memmove(start + pos + n, start + pos, (end - start) - pos); - end += n; - return result; - } - - size_type BOOST_REGEX_CALL size() - { - return size_type(end - start); - } - - size_type BOOST_REGEX_CALL capacity() - { - return size_type(last - start); - } - - void* BOOST_REGEX_CALL data()const - { - return start; - } - - size_type BOOST_REGEX_CALL index(void* ptr) - { - return size_type(static_cast<pointer>(ptr) - static_cast<pointer>(data())); - } - - void BOOST_REGEX_CALL clear() - { - end = start; - } - - void BOOST_REGEX_CALL align() - { - // move end up to a boundary: - end = start + (((end - start) + padding_mask) & ~padding_mask); - } - void swap(raw_storage& that) - { - std::swap(start, that.start); - std::swap(end, that.end); - std::swap(last, that.last); - } -}; - -inline raw_storage::raw_storage() -{ - last = start = end = 0; -} - -inline raw_storage::raw_storage(size_type n) -{ - start = end = static_cast<pointer>(::operator new(n)); - BOOST_REGEX_NOEH_ASSERT(start) - last = start + n; -} - - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -} // namespace BOOST_REGEX_DETAIL_NS -} // namespace boost - -#endif - - - - - - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_replace.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/regex_replace.hpp deleted file mode 100644 index 415c58b634..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_replace.hpp +++ /dev/null @@ -1,99 +0,0 @@ -/* - * - * Copyright (c) 1998-2009 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE regex_format.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Provides formatting output routines for search and replace - * operations. Note this is an internal header file included - * by regex.hpp, do not include on its own. - */ - -#ifndef BOOST_REGEX_V4_REGEX_REPLACE_HPP -#define BOOST_REGEX_V4_REGEX_REPLACE_HPP - - -namespace boost{ - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -template <class OutputIterator, class BidirectionalIterator, class traits, class charT, class Formatter> -OutputIterator regex_replace(OutputIterator out, - BidirectionalIterator first, - BidirectionalIterator last, - const basic_regex<charT, traits>& e, - Formatter fmt, - match_flag_type flags = match_default) -{ - regex_iterator<BidirectionalIterator, charT, traits> i(first, last, e, flags); - regex_iterator<BidirectionalIterator, charT, traits> j; - if(i == j) - { - if(!(flags & regex_constants::format_no_copy)) - out = BOOST_REGEX_DETAIL_NS::copy(first, last, out); - } - else - { - BidirectionalIterator last_m(first); - while(i != j) - { - if(!(flags & regex_constants::format_no_copy)) - out = BOOST_REGEX_DETAIL_NS::copy(i->prefix().first, i->prefix().second, out); - out = i->format(out, fmt, flags, e); - last_m = (*i)[0].second; - if(flags & regex_constants::format_first_only) - break; - ++i; - } - if(!(flags & regex_constants::format_no_copy)) - out = BOOST_REGEX_DETAIL_NS::copy(last_m, last, out); - } - return out; -} - -template <class traits, class charT, class Formatter> -std::basic_string<charT> regex_replace(const std::basic_string<charT>& s, - const basic_regex<charT, traits>& e, - Formatter fmt, - match_flag_type flags = match_default) -{ - std::basic_string<charT> result; - BOOST_REGEX_DETAIL_NS::string_out_iterator<std::basic_string<charT> > i(result); - regex_replace(i, s.begin(), s.end(), e, fmt, flags); - return result; -} - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -} // namespace boost - -#endif // BOOST_REGEX_V4_REGEX_REPLACE_HPP - - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_search.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/regex_search.hpp deleted file mode 100644 index 0725d3ec3f..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_search.hpp +++ /dev/null @@ -1,217 +0,0 @@ -/* - * - * Copyright (c) 1998-2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE regex_search.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Provides regex_search implementation. - */ - -#ifndef BOOST_REGEX_V4_REGEX_SEARCH_HPP -#define BOOST_REGEX_V4_REGEX_SEARCH_HPP - - -namespace boost{ - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -template <class BidiIterator, class Allocator, class charT, class traits> -bool regex_search(BidiIterator first, BidiIterator last, - match_results<BidiIterator, Allocator>& m, - const basic_regex<charT, traits>& e, - match_flag_type flags = match_default) -{ - return regex_search(first, last, m, e, flags, first); -} - -template <class BidiIterator, class Allocator, class charT, class traits> -bool regex_search(BidiIterator first, BidiIterator last, - match_results<BidiIterator, Allocator>& m, - const basic_regex<charT, traits>& e, - match_flag_type flags, - BidiIterator base) -{ - if(e.flags() & regex_constants::failbit) - return false; - - BOOST_REGEX_DETAIL_NS::perl_matcher<BidiIterator, Allocator, traits> matcher(first, last, m, e, flags, base); - return matcher.find(); -} - -// -// regex_search convenience interfaces: -#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING -// -// this isn't really a partial specialisation, but template function -// overloading - if the compiler doesn't support partial specialisation -// then it really won't support this either: -template <class charT, class Allocator, class traits> -inline bool regex_search(const charT* str, - match_results<const charT*, Allocator>& m, - const basic_regex<charT, traits>& e, - match_flag_type flags = match_default) -{ - return regex_search(str, str + traits::length(str), m, e, flags); -} - -template <class ST, class SA, class Allocator, class charT, class traits> -inline bool regex_search(const std::basic_string<charT, ST, SA>& s, - match_results<typename std::basic_string<charT, ST, SA>::const_iterator, Allocator>& m, - const basic_regex<charT, traits>& e, - match_flag_type flags = match_default) -{ - return regex_search(s.begin(), s.end(), m, e, flags); -} -#else // partial overloads: -inline bool regex_search(const char* str, - cmatch& m, - const regex& e, - match_flag_type flags = match_default) -{ - return regex_search(str, str + regex::traits_type::length(str), m, e, flags); -} -inline bool regex_search(const char* first, const char* last, - const regex& e, - match_flag_type flags = match_default) -{ - cmatch m; - return regex_search(first, last, m, e, flags | regex_constants::match_any); -} - -#ifndef BOOST_NO_WREGEX -inline bool regex_search(const wchar_t* str, - wcmatch& m, - const wregex& e, - match_flag_type flags = match_default) -{ - return regex_search(str, str + wregex::traits_type::length(str), m, e, flags); -} -inline bool regex_search(const wchar_t* first, const wchar_t* last, - const wregex& e, - match_flag_type flags = match_default) -{ - wcmatch m; - return regex_search(first, last, m, e, flags | regex_constants::match_any); -} -#endif -inline bool regex_search(const std::string& s, - smatch& m, - const regex& e, - match_flag_type flags = match_default) -{ - return regex_search(s.begin(), s.end(), m, e, flags); -} -#if !defined(BOOST_NO_WREGEX) -inline bool regex_search(const std::basic_string<wchar_t>& s, - wsmatch& m, - const wregex& e, - match_flag_type flags = match_default) -{ - return regex_search(s.begin(), s.end(), m, e, flags); -} -#endif - -#endif - -template <class BidiIterator, class charT, class traits> -bool regex_search(BidiIterator first, BidiIterator last, - const basic_regex<charT, traits>& e, - match_flag_type flags = match_default) -{ - if(e.flags() & regex_constants::failbit) - return false; - - match_results<BidiIterator> m; - typedef typename match_results<BidiIterator>::allocator_type match_alloc_type; - BOOST_REGEX_DETAIL_NS::perl_matcher<BidiIterator, match_alloc_type, traits> matcher(first, last, m, e, flags | regex_constants::match_any, first); - return matcher.find(); -} - -#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING - -template <class charT, class traits> -inline bool regex_search(const charT* str, - const basic_regex<charT, traits>& e, - match_flag_type flags = match_default) -{ - return regex_search(str, str + traits::length(str), e, flags); -} - -template <class ST, class SA, class charT, class traits> -inline bool regex_search(const std::basic_string<charT, ST, SA>& s, - const basic_regex<charT, traits>& e, - match_flag_type flags = match_default) -{ - return regex_search(s.begin(), s.end(), e, flags); -} -#else // non-template function overloads -inline bool regex_search(const char* str, - const regex& e, - match_flag_type flags = match_default) -{ - cmatch m; - return regex_search(str, str + regex::traits_type::length(str), m, e, flags | regex_constants::match_any); -} -#ifndef BOOST_NO_WREGEX -inline bool regex_search(const wchar_t* str, - const wregex& e, - match_flag_type flags = match_default) -{ - wcmatch m; - return regex_search(str, str + wregex::traits_type::length(str), m, e, flags | regex_constants::match_any); -} -#endif -inline bool regex_search(const std::string& s, - const regex& e, - match_flag_type flags = match_default) -{ - smatch m; - return regex_search(s.begin(), s.end(), m, e, flags | regex_constants::match_any); -} -#if !defined(BOOST_NO_WREGEX) -inline bool regex_search(const std::basic_string<wchar_t>& s, - const wregex& e, - match_flag_type flags = match_default) -{ - wsmatch m; - return regex_search(s.begin(), s.end(), m, e, flags | regex_constants::match_any); -} - -#endif // BOOST_NO_WREGEX - -#endif // partial overload - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -} // namespace boost - -#endif // BOOST_REGEX_V4_REGEX_SEARCH_HPP - - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_split.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/regex_split.hpp deleted file mode 100644 index afa5659831..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_split.hpp +++ /dev/null @@ -1,174 +0,0 @@ -/* - * - * Copyright (c) 1998-2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE regex_split.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Implements regex_split and associated functions. - * Note this is an internal header file included - * by regex.hpp, do not include on its own. - */ - -#ifndef BOOST_REGEX_SPLIT_HPP -#define BOOST_REGEX_SPLIT_HPP - -namespace boost{ - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#ifdef BOOST_MSVC -# pragma warning(push) -#if BOOST_MSVC < 1910 -#pragma warning(disable:4800) -#endif -#endif - -namespace BOOST_REGEX_DETAIL_NS{ - -template <class charT> -const basic_regex<charT>& get_default_expression(charT) -{ - static const charT expression_text[4] = { '\\', 's', '+', '\00', }; - static const basic_regex<charT> e(expression_text); - return e; -} - -template <class OutputIterator, class charT, class Traits1, class Alloc1> -class split_pred -{ - typedef std::basic_string<charT, Traits1, Alloc1> string_type; - typedef typename string_type::const_iterator iterator_type; - iterator_type* p_last; - OutputIterator* p_out; - std::size_t* p_max; - std::size_t initial_max; -public: - split_pred(iterator_type* a, OutputIterator* b, std::size_t* c) - : p_last(a), p_out(b), p_max(c), initial_max(*c) {} - - bool operator()(const match_results<iterator_type>& what); -}; - -template <class OutputIterator, class charT, class Traits1, class Alloc1> -bool split_pred<OutputIterator, charT, Traits1, Alloc1>::operator() - (const match_results<iterator_type>& what) -{ - *p_last = what[0].second; - if(what.size() > 1) - { - // output sub-expressions only: - for(unsigned i = 1; i < what.size(); ++i) - { - *(*p_out) = what.str(i); - ++(*p_out); - if(0 == --*p_max) return false; - } - return *p_max != 0; - } - else - { - // output $` only if it's not-null or not at the start of the input: - const sub_match<iterator_type>& sub = what[-1]; - if((sub.first != sub.second) || (*p_max != initial_max)) - { - *(*p_out) = sub.str(); - ++(*p_out); - return --*p_max; - } - } - // - // initial null, do nothing: - return true; -} - -} // namespace BOOST_REGEX_DETAIL_NS - -template <class OutputIterator, class charT, class Traits1, class Alloc1, class Traits2> -std::size_t regex_split(OutputIterator out, - std::basic_string<charT, Traits1, Alloc1>& s, - const basic_regex<charT, Traits2>& e, - match_flag_type flags, - std::size_t max_split) -{ - typedef typename std::basic_string<charT, Traits1, Alloc1>::const_iterator ci_t; - //typedef typename match_results<ci_t>::allocator_type match_allocator; - ci_t last = s.begin(); - std::size_t init_size = max_split; - BOOST_REGEX_DETAIL_NS::split_pred<OutputIterator, charT, Traits1, Alloc1> pred(&last, &out, &max_split); - ci_t i, j; - i = s.begin(); - j = s.end(); - regex_grep(pred, i, j, e, flags); - // - // if there is still input left, do a final push as long as max_split - // is not exhausted, and we're not splitting sub-expressions rather - // than whitespace: - if(max_split && (last != s.end()) && (e.mark_count() == 0)) - { - *out = std::basic_string<charT, Traits1, Alloc1>((ci_t)last, (ci_t)s.end()); - ++out; - last = s.end(); - --max_split; - } - // - // delete from the string everything that has been processed so far: - s.erase(0, last - s.begin()); - // - // return the number of new records pushed: - return init_size - max_split; -} - -template <class OutputIterator, class charT, class Traits1, class Alloc1, class Traits2> -inline std::size_t regex_split(OutputIterator out, - std::basic_string<charT, Traits1, Alloc1>& s, - const basic_regex<charT, Traits2>& e, - match_flag_type flags = match_default) -{ - return regex_split(out, s, e, flags, UINT_MAX); -} - -template <class OutputIterator, class charT, class Traits1, class Alloc1> -inline std::size_t regex_split(OutputIterator out, - std::basic_string<charT, Traits1, Alloc1>& s) -{ - return regex_split(out, s, BOOST_REGEX_DETAIL_NS::get_default_expression(charT(0)), match_default, UINT_MAX); -} - -#ifdef BOOST_MSVC -# pragma warning(pop) -#endif - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -} // namespace boost - -#endif - - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_token_iterator.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/regex_token_iterator.hpp deleted file mode 100644 index fc54b3c97f..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_token_iterator.hpp +++ /dev/null @@ -1,327 +0,0 @@ -/* - * - * Copyright (c) 2003 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE regex_token_iterator.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Provides regex_token_iterator implementation. - */ - -#ifndef BOOST_REGEX_V4_REGEX_TOKEN_ITERATOR_HPP -#define BOOST_REGEX_V4_REGEX_TOKEN_ITERATOR_HPP - -#include <boost/shared_ptr.hpp> -#include <boost/detail/workaround.hpp> -#if (BOOST_WORKAROUND(BOOST_BORLANDC, >= 0x560) && BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x570)))\ - || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) -// -// Borland C++ Builder 6, and Visual C++ 6, -// can't cope with the array template constructor -// so we have a template member that will accept any type as -// argument, and then assert that is really is an array: -// -#include <boost/static_assert.hpp> -#include <boost/type_traits/is_array.hpp> -#endif - -namespace boost{ - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#pragma warning(push) -#pragma warning(disable:4700) -#endif - -template <class BidirectionalIterator, - class charT, - class traits> -class regex_token_iterator_implementation -{ - typedef basic_regex<charT, traits> regex_type; - typedef sub_match<BidirectionalIterator> value_type; - - match_results<BidirectionalIterator> what; // current match - BidirectionalIterator base; // start of search area - BidirectionalIterator end; // end of search area - const regex_type re; // the expression - match_flag_type flags; // match flags - value_type result; // the current string result - int N; // the current sub-expression being enumerated - std::vector<int> subs; // the sub-expressions to enumerate - -public: - regex_token_iterator_implementation(const regex_token_iterator_implementation& other) - : what(other.what), base(other.base), end(other.end), re(other.re), flags(other.flags), result(other.result), N(other.N), subs(other.subs) {} - regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, int sub, match_flag_type f) - : end(last), re(*p), flags(f), N(0){ subs.push_back(sub); } - regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, const std::vector<int>& v, match_flag_type f) - : end(last), re(*p), flags(f), N(0), subs(v){} -#if !BOOST_WORKAROUND(__HP_aCC, < 60700) -#if (BOOST_WORKAROUND(BOOST_BORLANDC, >= 0x560) && BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x570)))\ - || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) \ - || BOOST_WORKAROUND(__HP_aCC, < 60700) - template <class T> - regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, const T& submatches, match_flag_type f) - : end(last), re(*p), flags(f), N(0) - { - // assert that T really is an array: - BOOST_STATIC_ASSERT(::boost::is_array<T>::value); - const std::size_t array_size = sizeof(T) / sizeof(submatches[0]); - for(std::size_t i = 0; i < array_size; ++i) - { - subs.push_back(submatches[i]); - } - } -#else - template <std::size_t CN> - regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, const int (&submatches)[CN], match_flag_type f) - : end(last), re(*p), flags(f), N(0) - { - for(std::size_t i = 0; i < CN; ++i) - { - subs.push_back(submatches[i]); - } - } -#endif -#endif - bool init(BidirectionalIterator first) - { - N = 0; - base = first; - if(regex_search(first, end, what, re, flags, base) == true) - { - N = 0; - result = ((subs[N] == -1) ? what.prefix() : what[(int)subs[N]]); - return true; - } - else if((subs[N] == -1) && (first != end)) - { - result.first = first; - result.second = end; - result.matched = (first != end); - N = -1; - return true; - } - return false; - } - bool compare(const regex_token_iterator_implementation& that) - { - if(this == &that) return true; - return (&re.get_data() == &that.re.get_data()) - && (end == that.end) - && (flags == that.flags) - && (N == that.N) - && (what[0].first == that.what[0].first) - && (what[0].second == that.what[0].second); - } - const value_type& get() - { return result; } - bool next() - { - if(N == -1) - return false; - if(N+1 < (int)subs.size()) - { - ++N; - result =((subs[N] == -1) ? what.prefix() : what[subs[N]]); - return true; - } - //if(what.prefix().first != what[0].second) - // flags |= /*match_prev_avail |*/ regex_constants::match_not_bob; - BidirectionalIterator last_end(what[0].second); - if(regex_search(last_end, end, what, re, ((what[0].first == what[0].second) ? flags | regex_constants::match_not_initial_null : flags), base)) - { - N =0; - result =((subs[N] == -1) ? what.prefix() : what[subs[N]]); - return true; - } - else if((last_end != end) && (subs[0] == -1)) - { - N =-1; - result.first = last_end; - result.second = end; - result.matched = (last_end != end); - return true; - } - return false; - } -private: - regex_token_iterator_implementation& operator=(const regex_token_iterator_implementation&); -}; - -template <class BidirectionalIterator, - class charT = BOOST_DEDUCED_TYPENAME BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidirectionalIterator>::value_type, - class traits = regex_traits<charT> > -class regex_token_iterator -{ -private: - typedef regex_token_iterator_implementation<BidirectionalIterator, charT, traits> impl; - typedef shared_ptr<impl> pimpl; -public: - typedef basic_regex<charT, traits> regex_type; - typedef sub_match<BidirectionalIterator> value_type; - typedef typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidirectionalIterator>::difference_type - difference_type; - typedef const value_type* pointer; - typedef const value_type& reference; - typedef std::forward_iterator_tag iterator_category; - - regex_token_iterator(){} - regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re, - int submatch = 0, match_flag_type m = match_default) - : pdata(new impl(&re, b, submatch, m)) - { - if(!pdata->init(a)) - pdata.reset(); - } - regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re, - const std::vector<int>& submatches, match_flag_type m = match_default) - : pdata(new impl(&re, b, submatches, m)) - { - if(!pdata->init(a)) - pdata.reset(); - } -#if !BOOST_WORKAROUND(__HP_aCC, < 60700) -#if (BOOST_WORKAROUND(BOOST_BORLANDC, >= 0x560) && BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x570)))\ - || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) \ - || BOOST_WORKAROUND(__HP_aCC, < 60700) - template <class T> - regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re, - const T& submatches, match_flag_type m = match_default) - : pdata(new impl(&re, b, submatches, m)) - { - if(!pdata->init(a)) - pdata.reset(); - } -#else - template <std::size_t N> - regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re, - const int (&submatches)[N], match_flag_type m = match_default) - : pdata(new impl(&re, b, submatches, m)) - { - if(!pdata->init(a)) - pdata.reset(); - } -#endif -#endif - regex_token_iterator(const regex_token_iterator& that) - : pdata(that.pdata) {} - regex_token_iterator& operator=(const regex_token_iterator& that) - { - pdata = that.pdata; - return *this; - } - bool operator==(const regex_token_iterator& that)const - { - if((pdata.get() == 0) || (that.pdata.get() == 0)) - return pdata.get() == that.pdata.get(); - return pdata->compare(*(that.pdata.get())); - } - bool operator!=(const regex_token_iterator& that)const - { return !(*this == that); } - const value_type& operator*()const - { return pdata->get(); } - const value_type* operator->()const - { return &(pdata->get()); } - regex_token_iterator& operator++() - { - cow(); - if(0 == pdata->next()) - { - pdata.reset(); - } - return *this; - } - regex_token_iterator operator++(int) - { - regex_token_iterator result(*this); - ++(*this); - return result; - } -private: - - pimpl pdata; - - void cow() - { - // copy-on-write - if(pdata.get() && !pdata.unique()) - { - pdata.reset(new impl(*(pdata.get()))); - } - } -}; - -typedef regex_token_iterator<const char*> cregex_token_iterator; -typedef regex_token_iterator<std::string::const_iterator> sregex_token_iterator; -#ifndef BOOST_NO_WREGEX -typedef regex_token_iterator<const wchar_t*> wcregex_token_iterator; -typedef regex_token_iterator<std::wstring::const_iterator> wsregex_token_iterator; -#endif - -template <class charT, class traits> -inline regex_token_iterator<const charT*, charT, traits> make_regex_token_iterator(const charT* p, const basic_regex<charT, traits>& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default) -{ - return regex_token_iterator<const charT*, charT, traits>(p, p+traits::length(p), e, submatch, m); -} -template <class charT, class traits, class ST, class SA> -inline regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits> make_regex_token_iterator(const std::basic_string<charT, ST, SA>& p, const basic_regex<charT, traits>& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default) -{ - return regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits>(p.begin(), p.end(), e, submatch, m); -} -template <class charT, class traits, std::size_t N> -inline regex_token_iterator<const charT*, charT, traits> make_regex_token_iterator(const charT* p, const basic_regex<charT, traits>& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default) -{ - return regex_token_iterator<const charT*, charT, traits>(p, p+traits::length(p), e, submatch, m); -} -template <class charT, class traits, class ST, class SA, std::size_t N> -inline regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits> make_regex_token_iterator(const std::basic_string<charT, ST, SA>& p, const basic_regex<charT, traits>& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default) -{ - return regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits>(p.begin(), p.end(), e, submatch, m); -} -template <class charT, class traits> -inline regex_token_iterator<const charT*, charT, traits> make_regex_token_iterator(const charT* p, const basic_regex<charT, traits>& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default) -{ - return regex_token_iterator<const charT*, charT, traits>(p, p+traits::length(p), e, submatch, m); -} -template <class charT, class traits, class ST, class SA> -inline regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits> make_regex_token_iterator(const std::basic_string<charT, ST, SA>& p, const basic_regex<charT, traits>& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default) -{ - return regex_token_iterator<typename std::basic_string<charT, ST, SA>::const_iterator, charT, traits>(p.begin(), p.end(), e, submatch, m); -} - -#ifdef BOOST_MSVC -#pragma warning(pop) -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -} // namespace boost - -#endif // BOOST_REGEX_V4_REGEX_TOKEN_ITERATOR_HPP - - - - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_traits.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/regex_traits.hpp deleted file mode 100644 index ffa2bb6871..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_traits.hpp +++ /dev/null @@ -1,189 +0,0 @@ -/* - * - * Copyright (c) 2003 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE regex_traits.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares regular expression traits classes. - */ - -#ifndef BOOST_REGEX_TRAITS_HPP_INCLUDED -#define BOOST_REGEX_TRAITS_HPP_INCLUDED - -#ifndef BOOST_REGEX_CONFIG_HPP -#include <boost/regex/config.hpp> -#endif -#ifndef BOOST_REGEX_WORKAROUND_HPP -#include <boost/regex/v4/regex_workaround.hpp> -#endif -#ifndef BOOST_REGEX_SYNTAX_TYPE_HPP -#include <boost/regex/v4/syntax_type.hpp> -#endif -#ifndef BOOST_REGEX_ERROR_TYPE_HPP -#include <boost/regex/v4/error_type.hpp> -#endif -#ifndef BOOST_REGEX_TRAITS_DEFAULTS_HPP_INCLUDED -#include <boost/regex/v4/regex_traits_defaults.hpp> -#endif -#ifndef BOOST_NO_STD_LOCALE -# ifndef BOOST_CPP_REGEX_TRAITS_HPP_INCLUDED -# include <boost/regex/v4/cpp_regex_traits.hpp> -# endif -#endif -#if !BOOST_WORKAROUND(BOOST_BORLANDC, < 0x560) -# ifndef BOOST_C_REGEX_TRAITS_HPP_INCLUDED -# include <boost/regex/v4/c_regex_traits.hpp> -# endif -#endif -#if defined(_WIN32) && !defined(BOOST_REGEX_NO_W32) -# ifndef BOOST_W32_REGEX_TRAITS_HPP_INCLUDED -# include <boost/regex/v4/w32_regex_traits.hpp> -# endif -#endif -#ifndef BOOST_REGEX_FWD_HPP_INCLUDED -#include <boost/regex_fwd.hpp> -#endif - -#include "boost/mpl/has_xxx.hpp" -#include <boost/static_assert.hpp> - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -namespace boost{ - -template <class charT, class implementationT > -struct regex_traits : public implementationT -{ - regex_traits() : implementationT() {} -}; - -// -// class regex_traits_wrapper. -// this is what our implementation will actually store; -// it provides default implementations of the "optional" -// interfaces that we support, in addition to the -// required "standard" ones: -// -namespace BOOST_REGEX_DETAIL_NS{ -#if !BOOST_WORKAROUND(__HP_aCC, < 60000) -BOOST_MPL_HAS_XXX_TRAIT_DEF(boost_extensions_tag) -#else -template<class T> -struct has_boost_extensions_tag -{ - BOOST_STATIC_CONSTANT(bool, value = false); -}; -#endif - -template <class BaseT> -struct default_wrapper : public BaseT -{ - typedef typename BaseT::char_type char_type; - std::string error_string(::boost::regex_constants::error_type e)const - { - return ::boost::BOOST_REGEX_DETAIL_NS::get_default_error_string(e); - } - ::boost::regex_constants::syntax_type syntax_type(char_type c)const - { - return ((c & 0x7f) == c) ? get_default_syntax_type(static_cast<char>(c)) : ::boost::regex_constants::syntax_char; - } - ::boost::regex_constants::escape_syntax_type escape_syntax_type(char_type c)const - { - return ((c & 0x7f) == c) ? get_default_escape_syntax_type(static_cast<char>(c)) : ::boost::regex_constants::escape_type_identity; - } - boost::intmax_t toi(const char_type*& p1, const char_type* p2, int radix)const - { - return ::boost::BOOST_REGEX_DETAIL_NS::global_toi(p1, p2, radix, *this); - } - char_type translate(char_type c, bool icase)const - { - return (icase ? this->translate_nocase(c) : this->translate(c)); - } - char_type translate(char_type c)const - { - return BaseT::translate(c); - } - char_type tolower(char_type c)const - { - return ::boost::BOOST_REGEX_DETAIL_NS::global_lower(c); - } - char_type toupper(char_type c)const - { - return ::boost::BOOST_REGEX_DETAIL_NS::global_upper(c); - } -}; - -template <class BaseT, bool has_extensions> -struct compute_wrapper_base -{ - typedef BaseT type; -}; -#if !BOOST_WORKAROUND(__HP_aCC, < 60000) -template <class BaseT> -struct compute_wrapper_base<BaseT, false> -{ - typedef default_wrapper<BaseT> type; -}; -#else -template <> -struct compute_wrapper_base<c_regex_traits<char>, false> -{ - typedef default_wrapper<c_regex_traits<char> > type; -}; -#ifndef BOOST_NO_WREGEX -template <> -struct compute_wrapper_base<c_regex_traits<wchar_t>, false> -{ - typedef default_wrapper<c_regex_traits<wchar_t> > type; -}; -#endif -#endif - -} // namespace BOOST_REGEX_DETAIL_NS - -template <class BaseT> -struct regex_traits_wrapper - : public ::boost::BOOST_REGEX_DETAIL_NS::compute_wrapper_base< - BaseT, - ::boost::BOOST_REGEX_DETAIL_NS::has_boost_extensions_tag<BaseT>::value - >::type -{ - regex_traits_wrapper(){} -private: - regex_traits_wrapper(const regex_traits_wrapper&); - regex_traits_wrapper& operator=(const regex_traits_wrapper&); -}; - -} // namespace boost - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#endif // include - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_traits_defaults.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/regex_traits_defaults.hpp deleted file mode 100644 index 1dbb0bf9c5..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_traits_defaults.hpp +++ /dev/null @@ -1,997 +0,0 @@ -/* - * - * Copyright (c) 2004 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE regex_traits_defaults.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares API's for access to regex_traits default properties. - */ - -#ifndef BOOST_REGEX_TRAITS_DEFAULTS_HPP_INCLUDED -#define BOOST_REGEX_TRAITS_DEFAULTS_HPP_INCLUDED - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#include <boost/regex/config.hpp> -#include <boost/cstdint.hpp> - -#include <cctype> -#include <cwctype> -#include <locale> - -#ifndef BOOST_REGEX_SYNTAX_TYPE_HPP -#include <boost/regex/v4/syntax_type.hpp> -#endif -#ifndef BOOST_REGEX_ERROR_TYPE_HPP -#include <boost/regex/v4/error_type.hpp> -#endif -#include <boost/regex/v4/regex_workaround.hpp> -#include <boost/type_traits/make_unsigned.hpp> -#include <boost/utility/enable_if.hpp> - -#ifdef BOOST_NO_STDC_NAMESPACE -namespace std{ - using ::strlen; -} -#endif - -namespace boost{ namespace BOOST_REGEX_DETAIL_NS{ - - -// -// helpers to suppress warnings: -// -template <class charT> -inline bool is_extended(charT c) -{ - typedef typename make_unsigned<charT>::type unsigned_type; - return (sizeof(charT) > 1) && (static_cast<unsigned_type>(c) >= 256u); -} -inline bool is_extended(char) -{ return false; } - -inline const char* BOOST_REGEX_CALL get_default_syntax(regex_constants::syntax_type n) -{ - // if the user hasn't supplied a message catalog, then this supplies - // default "messages" for us to load in the range 1-100. - const char* messages[] = { - "", - "(", - ")", - "$", - "^", - ".", - "*", - "+", - "?", - "[", - "]", - "|", - "\\", - "#", - "-", - "{", - "}", - "0123456789", - "b", - "B", - "<", - ">", - "", - "", - "A`", - "z'", - "\n", - ",", - "a", - "f", - "n", - "r", - "t", - "v", - "x", - "c", - ":", - "=", - "e", - "", - "", - "", - "", - "", - "", - "", - "", - "E", - "Q", - "X", - "C", - "Z", - "G", - "!", - "p", - "P", - "N", - "gk", - "K", - "R", - }; - - return ((n >= (sizeof(messages) / sizeof(messages[1]))) ? "" : messages[n]); -} - -inline const char* BOOST_REGEX_CALL get_default_error_string(regex_constants::error_type n) -{ - static const char* const s_default_error_messages[] = { - "Success", /* REG_NOERROR 0 error_ok */ - "No match", /* REG_NOMATCH 1 error_no_match */ - "Invalid regular expression.", /* REG_BADPAT 2 error_bad_pattern */ - "Invalid collation character.", /* REG_ECOLLATE 3 error_collate */ - "Invalid character class name, collating name, or character range.", /* REG_ECTYPE 4 error_ctype */ - "Invalid or unterminated escape sequence.", /* REG_EESCAPE 5 error_escape */ - "Invalid back reference: specified capturing group does not exist.", /* REG_ESUBREG 6 error_backref */ - "Unmatched [ or [^ in character class declaration.", /* REG_EBRACK 7 error_brack */ - "Unmatched marking parenthesis ( or \\(.", /* REG_EPAREN 8 error_paren */ - "Unmatched quantified repeat operator { or \\{.", /* REG_EBRACE 9 error_brace */ - "Invalid content of repeat range.", /* REG_BADBR 10 error_badbrace */ - "Invalid range end in character class", /* REG_ERANGE 11 error_range */ - "Out of memory.", /* REG_ESPACE 12 error_space NOT USED */ - "Invalid preceding regular expression prior to repetition operator.", /* REG_BADRPT 13 error_badrepeat */ - "Premature end of regular expression", /* REG_EEND 14 error_end NOT USED */ - "Regular expression is too large.", /* REG_ESIZE 15 error_size NOT USED */ - "Unmatched ) or \\)", /* REG_ERPAREN 16 error_right_paren NOT USED */ - "Empty regular expression.", /* REG_EMPTY 17 error_empty */ - "The complexity of matching the regular expression exceeded predefined bounds. " - "Try refactoring the regular expression to make each choice made by the state machine unambiguous. " - "This exception is thrown to prevent \"eternal\" matches that take an " - "indefinite period time to locate.", /* REG_ECOMPLEXITY 18 error_complexity */ - "Ran out of stack space trying to match the regular expression.", /* REG_ESTACK 19 error_stack */ - "Invalid or unterminated Perl (?...) sequence.", /* REG_E_PERL 20 error_perl */ - "Unknown error.", /* REG_E_UNKNOWN 21 error_unknown */ - }; - - return (n > ::boost::regex_constants::error_unknown) ? s_default_error_messages[::boost::regex_constants::error_unknown] : s_default_error_messages[n]; -} - -inline regex_constants::syntax_type BOOST_REGEX_CALL get_default_syntax_type(char c) -{ - // - // char_syntax determines how the compiler treats a given character - // in a regular expression. - // - static regex_constants::syntax_type char_syntax[] = { - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_newline, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /* */ // 32 - regex_constants::syntax_not, /*!*/ - regex_constants::syntax_char, /*"*/ - regex_constants::syntax_hash, /*#*/ - regex_constants::syntax_dollar, /*$*/ - regex_constants::syntax_char, /*%*/ - regex_constants::syntax_char, /*&*/ - regex_constants::escape_type_end_buffer, /*'*/ - regex_constants::syntax_open_mark, /*(*/ - regex_constants::syntax_close_mark, /*)*/ - regex_constants::syntax_star, /***/ - regex_constants::syntax_plus, /*+*/ - regex_constants::syntax_comma, /*,*/ - regex_constants::syntax_dash, /*-*/ - regex_constants::syntax_dot, /*.*/ - regex_constants::syntax_char, /*/*/ - regex_constants::syntax_digit, /*0*/ - regex_constants::syntax_digit, /*1*/ - regex_constants::syntax_digit, /*2*/ - regex_constants::syntax_digit, /*3*/ - regex_constants::syntax_digit, /*4*/ - regex_constants::syntax_digit, /*5*/ - regex_constants::syntax_digit, /*6*/ - regex_constants::syntax_digit, /*7*/ - regex_constants::syntax_digit, /*8*/ - regex_constants::syntax_digit, /*9*/ - regex_constants::syntax_colon, /*:*/ - regex_constants::syntax_char, /*;*/ - regex_constants::escape_type_left_word, /*<*/ - regex_constants::syntax_equal, /*=*/ - regex_constants::escape_type_right_word, /*>*/ - regex_constants::syntax_question, /*?*/ - regex_constants::syntax_char, /*@*/ - regex_constants::syntax_char, /*A*/ - regex_constants::syntax_char, /*B*/ - regex_constants::syntax_char, /*C*/ - regex_constants::syntax_char, /*D*/ - regex_constants::syntax_char, /*E*/ - regex_constants::syntax_char, /*F*/ - regex_constants::syntax_char, /*G*/ - regex_constants::syntax_char, /*H*/ - regex_constants::syntax_char, /*I*/ - regex_constants::syntax_char, /*J*/ - regex_constants::syntax_char, /*K*/ - regex_constants::syntax_char, /*L*/ - regex_constants::syntax_char, /*M*/ - regex_constants::syntax_char, /*N*/ - regex_constants::syntax_char, /*O*/ - regex_constants::syntax_char, /*P*/ - regex_constants::syntax_char, /*Q*/ - regex_constants::syntax_char, /*R*/ - regex_constants::syntax_char, /*S*/ - regex_constants::syntax_char, /*T*/ - regex_constants::syntax_char, /*U*/ - regex_constants::syntax_char, /*V*/ - regex_constants::syntax_char, /*W*/ - regex_constants::syntax_char, /*X*/ - regex_constants::syntax_char, /*Y*/ - regex_constants::syntax_char, /*Z*/ - regex_constants::syntax_open_set, /*[*/ - regex_constants::syntax_escape, /*\*/ - regex_constants::syntax_close_set, /*]*/ - regex_constants::syntax_caret, /*^*/ - regex_constants::syntax_char, /*_*/ - regex_constants::syntax_char, /*`*/ - regex_constants::syntax_char, /*a*/ - regex_constants::syntax_char, /*b*/ - regex_constants::syntax_char, /*c*/ - regex_constants::syntax_char, /*d*/ - regex_constants::syntax_char, /*e*/ - regex_constants::syntax_char, /*f*/ - regex_constants::syntax_char, /*g*/ - regex_constants::syntax_char, /*h*/ - regex_constants::syntax_char, /*i*/ - regex_constants::syntax_char, /*j*/ - regex_constants::syntax_char, /*k*/ - regex_constants::syntax_char, /*l*/ - regex_constants::syntax_char, /*m*/ - regex_constants::syntax_char, /*n*/ - regex_constants::syntax_char, /*o*/ - regex_constants::syntax_char, /*p*/ - regex_constants::syntax_char, /*q*/ - regex_constants::syntax_char, /*r*/ - regex_constants::syntax_char, /*s*/ - regex_constants::syntax_char, /*t*/ - regex_constants::syntax_char, /*u*/ - regex_constants::syntax_char, /*v*/ - regex_constants::syntax_char, /*w*/ - regex_constants::syntax_char, /*x*/ - regex_constants::syntax_char, /*y*/ - regex_constants::syntax_char, /*z*/ - regex_constants::syntax_open_brace, /*{*/ - regex_constants::syntax_or, /*|*/ - regex_constants::syntax_close_brace, /*}*/ - regex_constants::syntax_char, /*~*/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - regex_constants::syntax_char, /**/ - }; - - return char_syntax[(unsigned char)c]; -} - -inline regex_constants::escape_syntax_type BOOST_REGEX_CALL get_default_escape_syntax_type(char c) -{ - // - // char_syntax determines how the compiler treats a given character - // in a regular expression. - // - static regex_constants::escape_syntax_type char_syntax[] = { - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /* */ // 32 - regex_constants::escape_type_identity, /*!*/ - regex_constants::escape_type_identity, /*"*/ - regex_constants::escape_type_identity, /*#*/ - regex_constants::escape_type_identity, /*$*/ - regex_constants::escape_type_identity, /*%*/ - regex_constants::escape_type_identity, /*&*/ - regex_constants::escape_type_end_buffer, /*'*/ - regex_constants::syntax_open_mark, /*(*/ - regex_constants::syntax_close_mark, /*)*/ - regex_constants::escape_type_identity, /***/ - regex_constants::syntax_plus, /*+*/ - regex_constants::escape_type_identity, /*,*/ - regex_constants::escape_type_identity, /*-*/ - regex_constants::escape_type_identity, /*.*/ - regex_constants::escape_type_identity, /*/*/ - regex_constants::escape_type_decimal, /*0*/ - regex_constants::escape_type_backref, /*1*/ - regex_constants::escape_type_backref, /*2*/ - regex_constants::escape_type_backref, /*3*/ - regex_constants::escape_type_backref, /*4*/ - regex_constants::escape_type_backref, /*5*/ - regex_constants::escape_type_backref, /*6*/ - regex_constants::escape_type_backref, /*7*/ - regex_constants::escape_type_backref, /*8*/ - regex_constants::escape_type_backref, /*9*/ - regex_constants::escape_type_identity, /*:*/ - regex_constants::escape_type_identity, /*;*/ - regex_constants::escape_type_left_word, /*<*/ - regex_constants::escape_type_identity, /*=*/ - regex_constants::escape_type_right_word, /*>*/ - regex_constants::syntax_question, /*?*/ - regex_constants::escape_type_identity, /*@*/ - regex_constants::escape_type_start_buffer, /*A*/ - regex_constants::escape_type_not_word_assert, /*B*/ - regex_constants::escape_type_C, /*C*/ - regex_constants::escape_type_not_class, /*D*/ - regex_constants::escape_type_E, /*E*/ - regex_constants::escape_type_not_class, /*F*/ - regex_constants::escape_type_G, /*G*/ - regex_constants::escape_type_not_class, /*H*/ - regex_constants::escape_type_not_class, /*I*/ - regex_constants::escape_type_not_class, /*J*/ - regex_constants::escape_type_reset_start_mark, /*K*/ - regex_constants::escape_type_not_class, /*L*/ - regex_constants::escape_type_not_class, /*M*/ - regex_constants::escape_type_named_char, /*N*/ - regex_constants::escape_type_not_class, /*O*/ - regex_constants::escape_type_not_property, /*P*/ - regex_constants::escape_type_Q, /*Q*/ - regex_constants::escape_type_line_ending, /*R*/ - regex_constants::escape_type_not_class, /*S*/ - regex_constants::escape_type_not_class, /*T*/ - regex_constants::escape_type_not_class, /*U*/ - regex_constants::escape_type_not_class, /*V*/ - regex_constants::escape_type_not_class, /*W*/ - regex_constants::escape_type_X, /*X*/ - regex_constants::escape_type_not_class, /*Y*/ - regex_constants::escape_type_Z, /*Z*/ - regex_constants::escape_type_identity, /*[*/ - regex_constants::escape_type_identity, /*\*/ - regex_constants::escape_type_identity, /*]*/ - regex_constants::escape_type_identity, /*^*/ - regex_constants::escape_type_identity, /*_*/ - regex_constants::escape_type_start_buffer, /*`*/ - regex_constants::escape_type_control_a, /*a*/ - regex_constants::escape_type_word_assert, /*b*/ - regex_constants::escape_type_ascii_control, /*c*/ - regex_constants::escape_type_class, /*d*/ - regex_constants::escape_type_e, /*e*/ - regex_constants::escape_type_control_f, /*f*/ - regex_constants::escape_type_extended_backref, /*g*/ - regex_constants::escape_type_class, /*h*/ - regex_constants::escape_type_class, /*i*/ - regex_constants::escape_type_class, /*j*/ - regex_constants::escape_type_extended_backref, /*k*/ - regex_constants::escape_type_class, /*l*/ - regex_constants::escape_type_class, /*m*/ - regex_constants::escape_type_control_n, /*n*/ - regex_constants::escape_type_class, /*o*/ - regex_constants::escape_type_property, /*p*/ - regex_constants::escape_type_class, /*q*/ - regex_constants::escape_type_control_r, /*r*/ - regex_constants::escape_type_class, /*s*/ - regex_constants::escape_type_control_t, /*t*/ - regex_constants::escape_type_class, /*u*/ - regex_constants::escape_type_control_v, /*v*/ - regex_constants::escape_type_class, /*w*/ - regex_constants::escape_type_hex, /*x*/ - regex_constants::escape_type_class, /*y*/ - regex_constants::escape_type_end_buffer, /*z*/ - regex_constants::syntax_open_brace, /*{*/ - regex_constants::syntax_or, /*|*/ - regex_constants::syntax_close_brace, /*}*/ - regex_constants::escape_type_identity, /*~*/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - regex_constants::escape_type_identity, /**/ - }; - - return char_syntax[(unsigned char)c]; -} - -// is charT c a combining character? -inline bool BOOST_REGEX_CALL is_combining_implementation(boost::uint_least16_t c) -{ - const boost::uint_least16_t combining_ranges[] = { 0x0300, 0x0361, - 0x0483, 0x0486, - 0x0903, 0x0903, - 0x093E, 0x0940, - 0x0949, 0x094C, - 0x0982, 0x0983, - 0x09BE, 0x09C0, - 0x09C7, 0x09CC, - 0x09D7, 0x09D7, - 0x0A3E, 0x0A40, - 0x0A83, 0x0A83, - 0x0ABE, 0x0AC0, - 0x0AC9, 0x0ACC, - 0x0B02, 0x0B03, - 0x0B3E, 0x0B3E, - 0x0B40, 0x0B40, - 0x0B47, 0x0B4C, - 0x0B57, 0x0B57, - 0x0B83, 0x0B83, - 0x0BBE, 0x0BBF, - 0x0BC1, 0x0BCC, - 0x0BD7, 0x0BD7, - 0x0C01, 0x0C03, - 0x0C41, 0x0C44, - 0x0C82, 0x0C83, - 0x0CBE, 0x0CBE, - 0x0CC0, 0x0CC4, - 0x0CC7, 0x0CCB, - 0x0CD5, 0x0CD6, - 0x0D02, 0x0D03, - 0x0D3E, 0x0D40, - 0x0D46, 0x0D4C, - 0x0D57, 0x0D57, - 0x0F7F, 0x0F7F, - 0x20D0, 0x20E1, - 0x3099, 0x309A, - 0xFE20, 0xFE23, - 0xffff, 0xffff, }; - - const boost::uint_least16_t* p = combining_ranges + 1; - while (*p < c) p += 2; - --p; - if ((c >= *p) && (c <= *(p + 1))) - return true; - return false; -} - -template <class charT> -inline bool is_combining(charT c) -{ - return (c <= static_cast<charT>(0)) ? false : ((c >= static_cast<charT>((std::numeric_limits<uint_least16_t>::max)())) ? false : is_combining_implementation(static_cast<unsigned short>(c))); -} -template <> -inline bool is_combining<char>(char) -{ - return false; -} -template <> -inline bool is_combining<signed char>(signed char) -{ - return false; -} -template <> -inline bool is_combining<unsigned char>(unsigned char) -{ - return false; -} -#if !defined(__hpux) && !defined(__WINSCW__) // can't use WCHAR_MAX/MIN in pp-directives -#ifdef _MSC_VER -template<> -inline bool is_combining<wchar_t>(wchar_t c) -{ - return is_combining_implementation(static_cast<unsigned short>(c)); -} -#elif !defined(__DECCXX) && !defined(__osf__) && !defined(__OSF__) && defined(WCHAR_MIN) && (WCHAR_MIN == 0) && !defined(BOOST_NO_INTRINSIC_WCHAR_T) -#if defined(WCHAR_MAX) && (WCHAR_MAX <= USHRT_MAX) -template<> -inline bool is_combining<wchar_t>(wchar_t c) -{ - return is_combining_implementation(static_cast<unsigned short>(c)); -} -#else -template<> -inline bool is_combining<wchar_t>(wchar_t c) -{ - return (c >= (std::numeric_limits<uint_least16_t>::max)()) ? false : is_combining_implementation(static_cast<unsigned short>(c)); -} -#endif -#endif -#endif - -// -// is a charT c a line separator? -// -template <class charT> -inline bool is_separator(charT c) -{ - return BOOST_REGEX_MAKE_BOOL( - (c == static_cast<charT>('\n')) - || (c == static_cast<charT>('\r')) - || (c == static_cast<charT>('\f')) - || (static_cast<boost::uint16_t>(c) == 0x2028u) - || (static_cast<boost::uint16_t>(c) == 0x2029u) - || (static_cast<boost::uint16_t>(c) == 0x85u)); -} -template <> -inline bool is_separator<char>(char c) -{ - return BOOST_REGEX_MAKE_BOOL((c == '\n') || (c == '\r') || (c == '\f')); -} - -// -// get a default collating element: -// -inline std::string BOOST_REGEX_CALL lookup_default_collate_name(const std::string& name) -{ - // - // these are the POSIX collating names: - // - static const char* def_coll_names[] = { - "NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "alert", "backspace", "tab", "newline", - "vertical-tab", "form-feed", "carriage-return", "SO", "SI", "DLE", "DC1", "DC2", "DC3", "DC4", "NAK", - "SYN", "ETB", "CAN", "EM", "SUB", "ESC", "IS4", "IS3", "IS2", "IS1", "space", "exclamation-mark", - "quotation-mark", "number-sign", "dollar-sign", "percent-sign", "ampersand", "apostrophe", - "left-parenthesis", "right-parenthesis", "asterisk", "plus-sign", "comma", "hyphen", - "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", - "colon", "semicolon", "less-than-sign", "equals-sign", "greater-than-sign", - "question-mark", "commercial-at", "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", "left-square-bracket", "backslash", - "right-square-bracket", "circumflex", "underscore", "grave-accent", "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", "left-curly-bracket", - "vertical-line", "right-curly-bracket", "tilde", "DEL", "", - }; - - // these multi-character collating elements - // should keep most Western-European locales - // happy - we should really localise these a - // little more - but this will have to do for - // now: - - static const char* def_multi_coll[] = { - "ae", - "Ae", - "AE", - "ch", - "Ch", - "CH", - "ll", - "Ll", - "LL", - "ss", - "Ss", - "SS", - "nj", - "Nj", - "NJ", - "dz", - "Dz", - "DZ", - "lj", - "Lj", - "LJ", - "", - }; - - unsigned int i = 0; - while (*def_coll_names[i]) - { - if (def_coll_names[i] == name) - { - return std::string(1, char(i)); - } - ++i; - } - i = 0; - while (*def_multi_coll[i]) - { - if (def_multi_coll[i] == name) - { - return def_multi_coll[i]; - } - ++i; - } - return std::string(); -} - -// -// get the state_id of a character classification, the individual -// traits classes then transform that state_id into a bitmask: -// -template <class charT> -struct character_pointer_range -{ - const charT* p1; - const charT* p2; - - bool operator < (const character_pointer_range& r)const - { - return std::lexicographical_compare(p1, p2, r.p1, r.p2); - } - bool operator == (const character_pointer_range& r)const - { - // Not only do we check that the ranges are of equal size before - // calling std::equal, but there is no other algorithm available: - // not even a non-standard MS one. So forward to unchecked_equal - // in the MS case. - return ((p2 - p1) == (r.p2 - r.p1)) && BOOST_REGEX_DETAIL_NS::equal(p1, p2, r.p1); - } -}; -template <class charT> -int get_default_class_id(const charT* p1, const charT* p2) -{ - static const charT data[73] = { - 'a', 'l', 'n', 'u', 'm', - 'a', 'l', 'p', 'h', 'a', - 'b', 'l', 'a', 'n', 'k', - 'c', 'n', 't', 'r', 'l', - 'd', 'i', 'g', 'i', 't', - 'g', 'r', 'a', 'p', 'h', - 'l', 'o', 'w', 'e', 'r', - 'p', 'r', 'i', 'n', 't', - 'p', 'u', 'n', 'c', 't', - 's', 'p', 'a', 'c', 'e', - 'u', 'n', 'i', 'c', 'o', 'd', 'e', - 'u', 'p', 'p', 'e', 'r', - 'v', - 'w', 'o', 'r', 'd', - 'x', 'd', 'i', 'g', 'i', 't', - }; - - static const character_pointer_range<charT> ranges[21] = - { - {data+0, data+5,}, // alnum - {data+5, data+10,}, // alpha - {data+10, data+15,}, // blank - {data+15, data+20,}, // cntrl - {data+20, data+21,}, // d - {data+20, data+25,}, // digit - {data+25, data+30,}, // graph - {data+29, data+30,}, // h - {data+30, data+31,}, // l - {data+30, data+35,}, // lower - {data+35, data+40,}, // print - {data+40, data+45,}, // punct - {data+45, data+46,}, // s - {data+45, data+50,}, // space - {data+57, data+58,}, // u - {data+50, data+57,}, // unicode - {data+57, data+62,}, // upper - {data+62, data+63,}, // v - {data+63, data+64,}, // w - {data+63, data+67,}, // word - {data+67, data+73,}, // xdigit - }; - const character_pointer_range<charT>* ranges_begin = ranges; - const character_pointer_range<charT>* ranges_end = ranges + (sizeof(ranges)/sizeof(ranges[0])); - - character_pointer_range<charT> t = { p1, p2, }; - const character_pointer_range<charT>* p = std::lower_bound(ranges_begin, ranges_end, t); - if((p != ranges_end) && (t == *p)) - return static_cast<int>(p - ranges); - return -1; -} - -// -// helper functions: -// -template <class charT> -std::ptrdiff_t global_length(const charT* p) -{ - std::ptrdiff_t n = 0; - while(*p) - { - ++p; - ++n; - } - return n; -} -template<> -inline std::ptrdiff_t global_length<char>(const char* p) -{ - return (std::strlen)(p); -} -#ifndef BOOST_NO_WREGEX -template<> -inline std::ptrdiff_t global_length<wchar_t>(const wchar_t* p) -{ - return (std::ptrdiff_t)(std::wcslen)(p); -} -#endif -template <class charT> -inline charT BOOST_REGEX_CALL global_lower(charT c) -{ - return c; -} -template <class charT> -inline charT BOOST_REGEX_CALL global_upper(charT c) -{ - return c; -} - -inline char BOOST_REGEX_CALL do_global_lower(char c) -{ - return static_cast<char>((std::tolower)((unsigned char)c)); -} - -inline char BOOST_REGEX_CALL do_global_upper(char c) -{ - return static_cast<char>((std::toupper)((unsigned char)c)); -} -#ifndef BOOST_NO_WREGEX -inline wchar_t BOOST_REGEX_CALL do_global_lower(wchar_t c) -{ - return (std::towlower)(c); -} - -inline wchar_t BOOST_REGEX_CALL do_global_upper(wchar_t c) -{ - return (std::towupper)(c); -} -#endif -// -// This sucks: declare template specialisations of global_lower/global_upper -// that just forward to the non-template implementation functions. We do -// this because there is one compiler (Compaq Tru64 C++) that doesn't seem -// to differentiate between templates and non-template overloads.... -// what's more, the primary template, plus all overloads have to be -// defined in the same translation unit (if one is inline they all must be) -// otherwise the "local template instantiation" compiler option can pick -// the wrong instantiation when linking: -// -template<> inline char BOOST_REGEX_CALL global_lower<char>(char c) { return do_global_lower(c); } -template<> inline char BOOST_REGEX_CALL global_upper<char>(char c) { return do_global_upper(c); } -#ifndef BOOST_NO_WREGEX -template<> inline wchar_t BOOST_REGEX_CALL global_lower<wchar_t>(wchar_t c) { return do_global_lower(c); } -template<> inline wchar_t BOOST_REGEX_CALL global_upper<wchar_t>(wchar_t c) { return do_global_upper(c); } -#endif - -template <class charT> -int global_value(charT c) -{ - static const charT zero = '0'; - static const charT nine = '9'; - static const charT a = 'a'; - static const charT f = 'f'; - static const charT A = 'A'; - static const charT F = 'F'; - - if(c > f) return -1; - if(c >= a) return 10 + (c - a); - if(c > F) return -1; - if(c >= A) return 10 + (c - A); - if(c > nine) return -1; - if(c >= zero) return c - zero; - return -1; -} -template <class charT, class traits> -boost::intmax_t global_toi(const charT*& p1, const charT* p2, int radix, const traits& t) -{ - (void)t; // warning suppression - boost::intmax_t limit = (std::numeric_limits<boost::intmax_t>::max)() / radix; - boost::intmax_t next_value = t.value(*p1, radix); - if((p1 == p2) || (next_value < 0) || (next_value >= radix)) - return -1; - boost::intmax_t result = 0; - while(p1 != p2) - { - next_value = t.value(*p1, radix); - if((next_value < 0) || (next_value >= radix)) - break; - result *= radix; - result += next_value; - ++p1; - if (result > limit) - return -1; - } - return result; -} - -template <class charT> -inline typename boost::enable_if_c<(sizeof(charT) > 1), const charT*>::type get_escape_R_string() -{ -#ifdef BOOST_MSVC -# pragma warning(push) -# pragma warning(disable:4309 4245) -#endif - static const charT e1[] = { '(', '?', '-', 'x', ':', '(', '?', '>', '\x0D', '\x0A', '?', - '|', '[', '\x0A', '\x0B', '\x0C', static_cast<charT>(0x85), static_cast<charT>(0x2028), - static_cast<charT>(0x2029), ']', ')', ')', '\0' }; - static const charT e2[] = { '(', '?', '-', 'x', ':', '(', '?', '>', '\x0D', '\x0A', '?', - '|', '[', '\x0A', '\x0B', '\x0C', static_cast<charT>(0x85), ']', ')', ')', '\0' }; - - charT c = static_cast<charT>(0x2029u); - bool b = (static_cast<unsigned>(c) == 0x2029u); - - return (b ? e1 : e2); -#ifdef BOOST_MSVC -# pragma warning(pop) -#endif -} - -template <class charT> -inline typename boost::disable_if_c<(sizeof(charT) > 1), const charT*>::type get_escape_R_string() -{ -#ifdef BOOST_MSVC -# pragma warning(push) -# pragma warning(disable:4309) -#endif - static const charT e2[] = { '(', '?', '-', 'x', ':', '(', '?', '>', '\x0D', '\x0A', '?', - '|', '[', '\x0A', '\x0B', '\x0C', '\x85', ']', ')', ')', '\0' }; - return e2; -#ifdef BOOST_MSVC -# pragma warning(pop) -#endif -} - -} // BOOST_REGEX_DETAIL_NS -} // boost - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_workaround.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/regex_workaround.hpp deleted file mode 100644 index 324136e07b..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/regex_workaround.hpp +++ /dev/null @@ -1,237 +0,0 @@ -/* - * - * Copyright (c) 1998-2005 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE regex_workarounds.cpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares Misc workarounds. - */ - -#ifndef BOOST_REGEX_WORKAROUND_HPP -#define BOOST_REGEX_WORKAROUND_HPP - -#include <boost/config.hpp> -#include <new> -#include <cstring> -#include <cstdlib> -#include <cstddef> -#include <cassert> -#include <cstdio> -#include <climits> -#include <string> -#include <stdexcept> -#include <iterator> -#include <algorithm> -#include <iosfwd> -#include <vector> -#include <set> -#include <map> -#include <boost/limits.hpp> -#include <boost/assert.hpp> -#include <boost/cstdint.hpp> -#include <boost/throw_exception.hpp> -#include <boost/scoped_ptr.hpp> -#include <boost/scoped_array.hpp> -#include <boost/shared_ptr.hpp> -#include <boost/mpl/bool_fwd.hpp> -#include <boost/regex/config.hpp> -#ifndef BOOST_NO_STD_LOCALE -# include <locale> -#endif - -#if defined(BOOST_NO_STDC_NAMESPACE) -namespace std{ - using ::sprintf; using ::strcpy; using ::strcat; using ::strlen; -} -#endif - -namespace boost{ namespace BOOST_REGEX_DETAIL_NS{ -#ifdef BOOST_NO_STD_DISTANCE -template <class T> -std::ptrdiff_t distance(const T& x, const T& y) -{ return y - x; } -#else -using std::distance; -#endif -}} - - -#ifdef BOOST_REGEX_NO_BOOL -# define BOOST_REGEX_MAKE_BOOL(x) static_cast<bool>((x) ? true : false) -#else -# define BOOST_REGEX_MAKE_BOOL(x) static_cast<bool>(x) -#endif - -/***************************************************************************** - * - * Fix broken namespace support: - * - ****************************************************************************/ - -#if defined(BOOST_NO_STDC_NAMESPACE) && defined(__cplusplus) - -namespace std{ - using ::ptrdiff_t; - using ::size_t; - using ::abs; - using ::memset; - using ::memcpy; -} - -#endif - -/***************************************************************************** - * - * helper functions pointer_construct/pointer_destroy: - * - ****************************************************************************/ - -#ifdef __cplusplus -namespace boost{ namespace BOOST_REGEX_DETAIL_NS{ - -#ifdef BOOST_MSVC -#pragma warning (push) -#pragma warning (disable : 4100) -#endif - -template <class T> -inline void pointer_destroy(T* p) -{ p->~T(); (void)p; } - -#ifdef BOOST_MSVC -#pragma warning (pop) -#endif - -template <class T> -inline void pointer_construct(T* p, const T& t) -{ new (p) T(t); } - -}} // namespaces -#endif - -/***************************************************************************** - * - * helper function copy: - * - ****************************************************************************/ - -#ifdef __cplusplus -namespace boost{ namespace BOOST_REGEX_DETAIL_NS{ -#if BOOST_WORKAROUND(BOOST_MSVC,>=1400) && BOOST_WORKAROUND(BOOST_MSVC, <1600) && defined(_CPPLIB_VER) && defined(BOOST_DINKUMWARE_STDLIB) && !(defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) - // - // MSVC 8 will either emit warnings or else refuse to compile - // code that makes perfectly legitimate use of std::copy, when - // the OutputIterator type is a user-defined class (apparently all user - // defined iterators are "unsafe"). This code works around that: - // - template<class InputIterator, class OutputIterator> - inline OutputIterator copy( - InputIterator first, - InputIterator last, - OutputIterator dest - ) - { - return stdext::unchecked_copy(first, last, dest); - } - template<class InputIterator1, class InputIterator2> - inline bool equal( - InputIterator1 first, - InputIterator1 last, - InputIterator2 with - ) - { - return stdext::unchecked_equal(first, last, with); - } -#elif BOOST_WORKAROUND(BOOST_MSVC, > 1500) - // - // MSVC 10 will either emit warnings or else refuse to compile - // code that makes perfectly legitimate use of std::copy, when - // the OutputIterator type is a user-defined class (apparently all user - // defined iterators are "unsafe"). What's more Microsoft have removed their - // non-standard "unchecked" versions, even though their still in the MS - // documentation!! Work around this as best we can: - // - template<class InputIterator, class OutputIterator> - inline OutputIterator copy( - InputIterator first, - InputIterator last, - OutputIterator dest - ) - { - while(first != last) - *dest++ = *first++; - return dest; - } - template<class InputIterator1, class InputIterator2> - inline bool equal( - InputIterator1 first, - InputIterator1 last, - InputIterator2 with - ) - { - while(first != last) - if(*first++ != *with++) return false; - return true; - } -#else - using std::copy; - using std::equal; -#endif -#if BOOST_WORKAROUND(BOOST_MSVC,>=1400) && defined(__STDC_WANT_SECURE_LIB__) && __STDC_WANT_SECURE_LIB__ - - // use safe versions of strcpy etc: - using ::strcpy_s; - using ::strcat_s; -#else - inline std::size_t strcpy_s( - char *strDestination, - std::size_t sizeInBytes, - const char *strSource - ) - { - std::size_t lenSourceWithNull = std::strlen(strSource) + 1; - if (lenSourceWithNull > sizeInBytes) - return 1; - std::memcpy(strDestination, strSource, lenSourceWithNull); - return 0; - } - inline std::size_t strcat_s( - char *strDestination, - std::size_t sizeInBytes, - const char *strSource - ) - { - std::size_t lenSourceWithNull = std::strlen(strSource) + 1; - std::size_t lenDestination = std::strlen(strDestination); - if (lenSourceWithNull + lenDestination > sizeInBytes) - return 1; - std::memcpy(strDestination + lenDestination, strSource, lenSourceWithNull); - return 0; - } - -#endif - - inline void overflow_error_if_not_zero(std::size_t i) - { - if(i) - { - std::overflow_error e("String buffer too small"); - boost::throw_exception(e); - } - } - -}} // namespaces - -#endif // __cplusplus - -#endif // include guard - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/states.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/states.hpp deleted file mode 100644 index 86eb02b102..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/states.hpp +++ /dev/null @@ -1,321 +0,0 @@ -/* - * - * Copyright (c) 1998-2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE states.cpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares internal state machine structures. - */ - -#ifndef BOOST_REGEX_V4_STATES_HPP -#define BOOST_REGEX_V4_STATES_HPP - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -namespace boost{ -namespace BOOST_REGEX_DETAIL_NS{ - -/*** mask_type ******************************************************* -Whenever we have a choice of two alternatives, we use an array of bytes -to indicate which of the two alternatives it is possible to take for any -given input character. If mask_take is set, then we can take the next -state, and if mask_skip is set then we can take the alternative. -***********************************************************************/ -enum mask_type -{ - mask_take = 1, - mask_skip = 2, - mask_init = 4, - mask_any = mask_skip | mask_take, - mask_all = mask_any -}; - -/*** helpers ********************************************************** -These helpers let us use function overload resolution to detect whether -we have narrow or wide character strings: -***********************************************************************/ -struct _narrow_type{}; -struct _wide_type{}; -template <class charT> struct is_byte; -template<> struct is_byte<char> { typedef _narrow_type width_type; }; -template<> struct is_byte<unsigned char>{ typedef _narrow_type width_type; }; -template<> struct is_byte<signed char> { typedef _narrow_type width_type; }; -template <class charT> struct is_byte { typedef _wide_type width_type; }; - -/*** enum syntax_element_type ****************************************** -Every record in the state machine falls into one of the following types: -***********************************************************************/ -enum syntax_element_type -{ - // start of a marked sub-expression, or perl-style (?...) extension - syntax_element_startmark = 0, - // end of a marked sub-expression, or perl-style (?...) extension - syntax_element_endmark = syntax_element_startmark + 1, - // any sequence of literal characters - syntax_element_literal = syntax_element_endmark + 1, - // start of line assertion: ^ - syntax_element_start_line = syntax_element_literal + 1, - // end of line assertion $ - syntax_element_end_line = syntax_element_start_line + 1, - // match any character: . - syntax_element_wild = syntax_element_end_line + 1, - // end of expression: we have a match when we get here - syntax_element_match = syntax_element_wild + 1, - // perl style word boundary: \b - syntax_element_word_boundary = syntax_element_match + 1, - // perl style within word boundary: \B - syntax_element_within_word = syntax_element_word_boundary + 1, - // start of word assertion: \< - syntax_element_word_start = syntax_element_within_word + 1, - // end of word assertion: \> - syntax_element_word_end = syntax_element_word_start + 1, - // start of buffer assertion: \` - syntax_element_buffer_start = syntax_element_word_end + 1, - // end of buffer assertion: \' - syntax_element_buffer_end = syntax_element_buffer_start + 1, - // backreference to previously matched sub-expression - syntax_element_backref = syntax_element_buffer_end + 1, - // either a wide character set [..] or one with multicharacter collating elements: - syntax_element_long_set = syntax_element_backref + 1, - // narrow character set: [...] - syntax_element_set = syntax_element_long_set + 1, - // jump to a new state in the machine: - syntax_element_jump = syntax_element_set + 1, - // choose between two production states: - syntax_element_alt = syntax_element_jump + 1, - // a repeat - syntax_element_rep = syntax_element_alt + 1, - // match a combining character sequence - syntax_element_combining = syntax_element_rep + 1, - // perl style soft buffer end: \z - syntax_element_soft_buffer_end = syntax_element_combining + 1, - // perl style continuation: \G - syntax_element_restart_continue = syntax_element_soft_buffer_end + 1, - // single character repeats: - syntax_element_dot_rep = syntax_element_restart_continue + 1, - syntax_element_char_rep = syntax_element_dot_rep + 1, - syntax_element_short_set_rep = syntax_element_char_rep + 1, - syntax_element_long_set_rep = syntax_element_short_set_rep + 1, - // a backstep for lookbehind repeats: - syntax_element_backstep = syntax_element_long_set_rep + 1, - // an assertion that a mark was matched: - syntax_element_assert_backref = syntax_element_backstep + 1, - syntax_element_toggle_case = syntax_element_assert_backref + 1, - // a recursive expression: - syntax_element_recurse = syntax_element_toggle_case + 1, - // Verbs: - syntax_element_fail = syntax_element_recurse + 1, - syntax_element_accept = syntax_element_fail + 1, - syntax_element_commit = syntax_element_accept + 1, - syntax_element_then = syntax_element_commit + 1 -}; - -#ifdef BOOST_REGEX_DEBUG -// dwa 09/26/00 - This is needed to suppress warnings about an ambiguous conversion -std::ostream& operator<<(std::ostream&, syntax_element_type); -#endif - -struct re_syntax_base; - -/*** union offset_type ************************************************ -Points to another state in the machine. During machine construction -we use integral offsets, but these are converted to pointers before -execution of the machine. -***********************************************************************/ -union offset_type -{ - re_syntax_base* p; - std::ptrdiff_t i; -}; - -/*** struct re_syntax_base ******************************************** -Base class for all states in the machine. -***********************************************************************/ -struct re_syntax_base -{ - syntax_element_type type; // what kind of state this is - offset_type next; // next state in the machine -}; - -/*** struct re_brace ************************************************** -A marked parenthesis. -***********************************************************************/ -struct re_brace : public re_syntax_base -{ - // The index to match, can be zero (don't mark the sub-expression) - // or negative (for perl style (?...) extensions): - int index; - bool icase; -}; - -/*** struct re_dot ************************************************** -Match anything. -***********************************************************************/ -enum -{ - dont_care = 1, - force_not_newline = 0, - force_newline = 2, - - test_not_newline = 2, - test_newline = 3 -}; -struct re_dot : public re_syntax_base -{ - unsigned char mask; -}; - -/*** struct re_literal ************************************************ -A string of literals, following this structure will be an -array of characters: charT[length] -***********************************************************************/ -struct re_literal : public re_syntax_base -{ - unsigned int length; -}; - -/*** struct re_case ************************************************ -Indicates whether we are moving to a case insensive block or not -***********************************************************************/ -struct re_case : public re_syntax_base -{ - bool icase; -}; - -/*** struct re_set_long *********************************************** -A wide character set of characters, following this structure will be -an array of type charT: -First csingles null-terminated strings -Then 2 * cranges NULL terminated strings -Then cequivalents NULL terminated strings -***********************************************************************/ -template <class mask_type> -struct re_set_long : public re_syntax_base -{ - unsigned int csingles, cranges, cequivalents; - mask_type cclasses; - mask_type cnclasses; - bool isnot; - bool singleton; -}; - -/*** struct re_set **************************************************** -A set of narrow-characters, matches any of _map which is none-zero -***********************************************************************/ -struct re_set : public re_syntax_base -{ - unsigned char _map[1 << CHAR_BIT]; -}; - -/*** struct re_jump *************************************************** -Jump to a new location in the machine (not next). -***********************************************************************/ -struct re_jump : public re_syntax_base -{ - offset_type alt; // location to jump to -}; - -/*** struct re_alt *************************************************** -Jump to a new location in the machine (possibly next). -***********************************************************************/ -struct re_alt : public re_jump -{ - unsigned char _map[1 << CHAR_BIT]; // which characters can take the jump - unsigned int can_be_null; // true if we match a NULL string -}; - -/*** struct re_repeat ************************************************* -Repeat a section of the machine -***********************************************************************/ -struct re_repeat : public re_alt -{ - std::size_t min, max; // min and max allowable repeats - int state_id; // Unique identifier for this repeat - bool leading; // True if this repeat is at the start of the machine (lets us optimize some searches) - bool greedy; // True if this is a greedy repeat -}; - -/*** struct re_recurse ************************************************ -Recurse to a particular subexpression. -**********************************************************************/ -struct re_recurse : public re_jump -{ - int state_id; // identifier of first nested repeat within the recursion. -}; - -/*** struct re_commit ************************************************* -Used for the PRUNE, SKIP and COMMIT verbs which basically differ only in what happens -if no match is found and we start searching forward. -**********************************************************************/ -enum commit_type -{ - commit_prune, - commit_skip, - commit_commit -}; -struct re_commit : public re_syntax_base -{ - commit_type action; -}; - -/*** enum re_jump_size_type ******************************************* -Provides compiled size of re_jump structure (allowing for trailing alignment). -We provide this so we know how manybytes to insert when constructing the machine -(The value of padding_mask is defined in regex_raw_buffer.hpp). -***********************************************************************/ -enum re_jump_size_type -{ - re_jump_size = (sizeof(re_jump) + padding_mask) & ~(padding_mask), - re_repeater_size = (sizeof(re_repeat) + padding_mask) & ~(padding_mask), - re_alt_size = (sizeof(re_alt) + padding_mask) & ~(padding_mask) -}; - -/*** proc re_is_set_member ********************************************* -Forward declaration: we'll need this one later... -***********************************************************************/ - -template<class charT, class traits> -struct regex_data; - -template <class iterator, class charT, class traits_type, class char_classT> -iterator BOOST_REGEX_CALL re_is_set_member(iterator next, - iterator last, - const re_set_long<char_classT>* set_, - const regex_data<charT, traits_type>& e, bool icase); - -} // namespace BOOST_REGEX_DETAIL_NS - -} // namespace boost - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#endif - - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/sub_match.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/sub_match.hpp deleted file mode 100644 index 30a580d523..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/sub_match.hpp +++ /dev/null @@ -1,516 +0,0 @@ -/* - * - * Copyright (c) 1998-2002 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE sub_match.cpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares template class sub_match. - */ - -#ifndef BOOST_REGEX_V4_SUB_MATCH_HPP -#define BOOST_REGEX_V4_SUB_MATCH_HPP - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -namespace boost{ - -template <class BidiIterator> -struct sub_match : public std::pair<BidiIterator, BidiIterator> -{ - typedef typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidiIterator>::value_type value_type; -#if defined(BOOST_NO_STD_ITERATOR_TRAITS) - typedef std::ptrdiff_t difference_type; -#else - typedef typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidiIterator>::difference_type difference_type; -#endif - typedef BidiIterator iterator_type; - typedef BidiIterator iterator; - typedef BidiIterator const_iterator; - - bool matched; - - sub_match() : std::pair<BidiIterator, BidiIterator>(), matched(false) {} - sub_match(BidiIterator i) : std::pair<BidiIterator, BidiIterator>(i, i), matched(false) {} -#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\ - && !BOOST_WORKAROUND(BOOST_BORLANDC, <= 0x0551)\ - && !BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042)) - template <class T, class A> - operator std::basic_string<value_type, T, A> ()const - { - return matched ? std::basic_string<value_type, T, A>(this->first, this->second) : std::basic_string<value_type, T, A>(); - } -#else - operator std::basic_string<value_type> ()const - { - return str(); - } -#endif - difference_type BOOST_REGEX_CALL length()const - { - difference_type n = matched ? ::boost::BOOST_REGEX_DETAIL_NS::distance((BidiIterator)this->first, (BidiIterator)this->second) : 0; - return n; - } - std::basic_string<value_type> str()const - { - std::basic_string<value_type> result; - if(matched) - { - std::size_t len = ::boost::BOOST_REGEX_DETAIL_NS::distance((BidiIterator)this->first, (BidiIterator)this->second); - result.reserve(len); - BidiIterator i = this->first; - while(i != this->second) - { - result.append(1, *i); - ++i; - } - } - return result; - } - int compare(const sub_match& s)const - { - if(matched != s.matched) - return static_cast<int>(matched) - static_cast<int>(s.matched); - return str().compare(s.str()); - } - int compare(const std::basic_string<value_type>& s)const - { - return str().compare(s); - } - int compare(const value_type* p)const - { - return str().compare(p); - } - - bool operator==(const sub_match& that)const - { return compare(that) == 0; } - bool BOOST_REGEX_CALL operator !=(const sub_match& that)const - { return compare(that) != 0; } - bool operator<(const sub_match& that)const - { return compare(that) < 0; } - bool operator>(const sub_match& that)const - { return compare(that) > 0; } - bool operator<=(const sub_match& that)const - { return compare(that) <= 0; } - bool operator>=(const sub_match& that)const - { return compare(that) >= 0; } - -#ifdef BOOST_REGEX_MATCH_EXTRA - typedef std::vector<sub_match<BidiIterator> > capture_sequence_type; - - const capture_sequence_type& captures()const - { - if(!m_captures) - m_captures.reset(new capture_sequence_type()); - return *m_captures; - } - // - // Private implementation API: DO NOT USE! - // - capture_sequence_type& get_captures()const - { - if(!m_captures) - m_captures.reset(new capture_sequence_type()); - return *m_captures; - } - -private: - mutable boost::scoped_ptr<capture_sequence_type> m_captures; -public: - -#endif - sub_match(const sub_match& that, bool -#ifdef BOOST_REGEX_MATCH_EXTRA - deep_copy -#endif - = true - ) - : std::pair<BidiIterator, BidiIterator>(that), - matched(that.matched) - { -#ifdef BOOST_REGEX_MATCH_EXTRA - if(that.m_captures) - if(deep_copy) - m_captures.reset(new capture_sequence_type(*(that.m_captures))); -#endif - } - sub_match& operator=(const sub_match& that) - { - this->first = that.first; - this->second = that.second; - matched = that.matched; -#ifdef BOOST_REGEX_MATCH_EXTRA - if(that.m_captures) - get_captures() = *(that.m_captures); -#endif - return *this; - } - // - // Make this type a range, for both Boost.Range, and C++11: - // - BidiIterator begin()const { return this->first; } - BidiIterator end()const { return this->second; } - - -#ifdef BOOST_OLD_REGEX_H - // - // the following are deprecated, do not use!! - // - operator int()const; - operator unsigned int()const; - operator short()const - { - return (short)(int)(*this); - } - operator unsigned short()const - { - return (unsigned short)(unsigned int)(*this); - } -#endif -}; - -typedef sub_match<const char*> csub_match; -typedef sub_match<std::string::const_iterator> ssub_match; -#ifndef BOOST_NO_WREGEX -typedef sub_match<const wchar_t*> wcsub_match; -typedef sub_match<std::wstring::const_iterator> wssub_match; -#endif - -// comparison to std::basic_string<> part 1: -template <class RandomAccessIterator, class traits, class Allocator> -inline bool operator == (const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s, - const sub_match<RandomAccessIterator>& m) -{ return s.compare(m.str()) == 0; } -template <class RandomAccessIterator, class traits, class Allocator> -inline bool operator != (const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s, - const sub_match<RandomAccessIterator>& m) -{ return s.compare(m.str()) != 0; } -template <class RandomAccessIterator, class traits, class Allocator> -inline bool operator < (const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s, - const sub_match<RandomAccessIterator>& m) -{ return s.compare(m.str()) < 0; } -template <class RandomAccessIterator, class traits, class Allocator> -inline bool operator <= (const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s, - const sub_match<RandomAccessIterator>& m) -{ return s.compare(m.str()) <= 0; } -template <class RandomAccessIterator, class traits, class Allocator> -inline bool operator >= (const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s, - const sub_match<RandomAccessIterator>& m) -{ return s.compare(m.str()) >= 0; } -template <class RandomAccessIterator, class traits, class Allocator> -inline bool operator > (const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s, - const sub_match<RandomAccessIterator>& m) -{ return s.compare(m.str()) > 0; } -// comparison to std::basic_string<> part 2: -template <class RandomAccessIterator, class traits, class Allocator> -inline bool operator == (const sub_match<RandomAccessIterator>& m, - const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s) -{ return m.str().compare(s) == 0; } -template <class RandomAccessIterator, class traits, class Allocator> -inline bool operator != (const sub_match<RandomAccessIterator>& m, - const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s) -{ return m.str().compare(s) != 0; } -template <class RandomAccessIterator, class traits, class Allocator> -inline bool operator < (const sub_match<RandomAccessIterator>& m, - const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s) -{ return m.str().compare(s) < 0; } -template <class RandomAccessIterator, class traits, class Allocator> -inline bool operator > (const sub_match<RandomAccessIterator>& m, - const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s) -{ return m.str().compare(s) > 0; } -template <class RandomAccessIterator, class traits, class Allocator> -inline bool operator <= (const sub_match<RandomAccessIterator>& m, - const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s) -{ return m.str().compare(s) <= 0; } -template <class RandomAccessIterator, class traits, class Allocator> -inline bool operator >= (const sub_match<RandomAccessIterator>& m, - const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s) -{ return m.str().compare(s) >= 0; } -// comparison to const charT* part 1: -template <class RandomAccessIterator> -inline bool operator == (const sub_match<RandomAccessIterator>& m, - typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s) -{ return m.str().compare(s) == 0; } -template <class RandomAccessIterator> -inline bool operator != (const sub_match<RandomAccessIterator>& m, - typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s) -{ return m.str().compare(s) != 0; } -template <class RandomAccessIterator> -inline bool operator > (const sub_match<RandomAccessIterator>& m, - typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s) -{ return m.str().compare(s) > 0; } -template <class RandomAccessIterator> -inline bool operator < (const sub_match<RandomAccessIterator>& m, - typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s) -{ return m.str().compare(s) < 0; } -template <class RandomAccessIterator> -inline bool operator >= (const sub_match<RandomAccessIterator>& m, - typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s) -{ return m.str().compare(s) >= 0; } -template <class RandomAccessIterator> -inline bool operator <= (const sub_match<RandomAccessIterator>& m, - typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s) -{ return m.str().compare(s) <= 0; } -// comparison to const charT* part 2: -template <class RandomAccessIterator> -inline bool operator == (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s, - const sub_match<RandomAccessIterator>& m) -{ return m.str().compare(s) == 0; } -template <class RandomAccessIterator> -inline bool operator != (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s, - const sub_match<RandomAccessIterator>& m) -{ return m.str().compare(s) != 0; } -template <class RandomAccessIterator> -inline bool operator < (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s, - const sub_match<RandomAccessIterator>& m) -{ return m.str().compare(s) > 0; } -template <class RandomAccessIterator> -inline bool operator > (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s, - const sub_match<RandomAccessIterator>& m) -{ return m.str().compare(s) < 0; } -template <class RandomAccessIterator> -inline bool operator <= (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s, - const sub_match<RandomAccessIterator>& m) -{ return m.str().compare(s) >= 0; } -template <class RandomAccessIterator> -inline bool operator >= (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s, - const sub_match<RandomAccessIterator>& m) -{ return m.str().compare(s) <= 0; } - -// comparison to const charT& part 1: -template <class RandomAccessIterator> -inline bool operator == (const sub_match<RandomAccessIterator>& m, - typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s) -{ return m.str().compare(0, m.length(), &s, 1) == 0; } -template <class RandomAccessIterator> -inline bool operator != (const sub_match<RandomAccessIterator>& m, - typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s) -{ return m.str().compare(0, m.length(), &s, 1) != 0; } -template <class RandomAccessIterator> -inline bool operator > (const sub_match<RandomAccessIterator>& m, - typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s) -{ return m.str().compare(0, m.length(), &s, 1) > 0; } -template <class RandomAccessIterator> -inline bool operator < (const sub_match<RandomAccessIterator>& m, - typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s) -{ return m.str().compare(0, m.length(), &s, 1) < 0; } -template <class RandomAccessIterator> -inline bool operator >= (const sub_match<RandomAccessIterator>& m, - typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s) -{ return m.str().compare(0, m.length(), &s, 1) >= 0; } -template <class RandomAccessIterator> -inline bool operator <= (const sub_match<RandomAccessIterator>& m, - typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s) -{ return m.str().compare(0, m.length(), &s, 1) <= 0; } -// comparison to const charT* part 2: -template <class RandomAccessIterator> -inline bool operator == (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s, - const sub_match<RandomAccessIterator>& m) -{ return m.str().compare(0, m.length(), &s, 1) == 0; } -template <class RandomAccessIterator> -inline bool operator != (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s, - const sub_match<RandomAccessIterator>& m) -{ return m.str().compare(0, m.length(), &s, 1) != 0; } -template <class RandomAccessIterator> -inline bool operator < (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s, - const sub_match<RandomAccessIterator>& m) -{ return m.str().compare(0, m.length(), &s, 1) > 0; } -template <class RandomAccessIterator> -inline bool operator > (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s, - const sub_match<RandomAccessIterator>& m) -{ return m.str().compare(0, m.length(), &s, 1) < 0; } -template <class RandomAccessIterator> -inline bool operator <= (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s, - const sub_match<RandomAccessIterator>& m) -{ return m.str().compare(0, m.length(), &s, 1) >= 0; } -template <class RandomAccessIterator> -inline bool operator >= (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s, - const sub_match<RandomAccessIterator>& m) -{ return m.str().compare(0, m.length(), &s, 1) <= 0; } - -// addition operators: -template <class RandomAccessIterator, class traits, class Allocator> -inline std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator> -operator + (const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s, - const sub_match<RandomAccessIterator>& m) -{ - std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator> result; - result.reserve(s.size() + m.length() + 1); - return result.append(s).append(m.first, m.second); -} -template <class RandomAccessIterator, class traits, class Allocator> -inline std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator> -operator + (const sub_match<RandomAccessIterator>& m, - const std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator>& s) -{ - std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type, traits, Allocator> result; - result.reserve(s.size() + m.length() + 1); - return result.append(m.first, m.second).append(s); -} -#if !(defined(__GNUC__) && defined(BOOST_NO_STD_LOCALE)) -template <class RandomAccessIterator> -inline std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> -operator + (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s, - const sub_match<RandomAccessIterator>& m) -{ - std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> result; - result.reserve(std::char_traits<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type>::length(s) + m.length() + 1); - return result.append(s).append(m.first, m.second); -} -template <class RandomAccessIterator> -inline std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> -operator + (const sub_match<RandomAccessIterator>& m, - typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const * s) -{ - std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> result; - result.reserve(std::char_traits<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type>::length(s) + m.length() + 1); - return result.append(m.first, m.second).append(s); -} -#else -// worwaround versions: -template <class RandomAccessIterator> -inline std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> -operator + (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const* s, - const sub_match<RandomAccessIterator>& m) -{ - return s + m.str(); -} -template <class RandomAccessIterator> -inline std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> -operator + (const sub_match<RandomAccessIterator>& m, - typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const * s) -{ - return m.str() + s; -} -#endif -template <class RandomAccessIterator> -inline std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> -operator + (typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s, - const sub_match<RandomAccessIterator>& m) -{ - std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> result; - result.reserve(m.length() + 2); - return result.append(1, s).append(m.first, m.second); -} -template <class RandomAccessIterator> -inline std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> -operator + (const sub_match<RandomAccessIterator>& m, - typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type const& s) -{ - std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> result; - result.reserve(m.length() + 2); - return result.append(m.first, m.second).append(1, s); -} -template <class RandomAccessIterator> -inline std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> -operator + (const sub_match<RandomAccessIterator>& m1, - const sub_match<RandomAccessIterator>& m2) -{ - std::basic_string<typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<RandomAccessIterator>::value_type> result; - result.reserve(m1.length() + m2.length() + 1); - return result.append(m1.first, m1.second).append(m2.first, m2.second); -} -#ifndef BOOST_NO_STD_LOCALE -template <class charT, class traits, class RandomAccessIterator> -std::basic_ostream<charT, traits>& - operator << (std::basic_ostream<charT, traits>& os, - const sub_match<RandomAccessIterator>& s) -{ - return (os << s.str()); -} -#else -template <class RandomAccessIterator> -std::ostream& operator << (std::ostream& os, - const sub_match<RandomAccessIterator>& s) -{ - return (os << s.str()); -} -#endif - -#ifdef BOOST_OLD_REGEX_H -namespace BOOST_REGEX_DETAIL_NS{ -template <class BidiIterator, class charT> -int do_toi(BidiIterator i, BidiIterator j, char c, int radix) -{ - std::string s(i, j); - char* p; - int result = std::strtol(s.c_str(), &p, radix); - if(*p)raise_regex_exception("Bad sub-expression"); - return result; -} - -// -// helper: -template <class I, class charT> -int do_toi(I& i, I j, charT c) -{ - int result = 0; - while((i != j) && (isdigit(*i))) - { - result = result*10 + (*i - '0'); - ++i; - } - return result; -} -} - - -template <class BidiIterator> -sub_match<BidiIterator>::operator int()const -{ - BidiIterator i = first; - BidiIterator j = second; - if(i == j)raise_regex_exception("Bad sub-expression"); - int neg = 1; - if((i != j) && (*i == '-')) - { - neg = -1; - ++i; - } - neg *= BOOST_REGEX_DETAIL_NS::do_toi(i, j, *i); - if(i != j)raise_regex_exception("Bad sub-expression"); - return neg; -} -template <class BidiIterator> -sub_match<BidiIterator>::operator unsigned int()const -{ - BidiIterator i = first; - BidiIterator j = second; - if(i == j) - raise_regex_exception("Bad sub-expression"); - return BOOST_REGEX_DETAIL_NS::do_toi(i, j, *first); -} -#endif - -} // namespace boost - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#endif - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/syntax_type.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/syntax_type.hpp deleted file mode 100644 index 3efdf0b0f9..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/syntax_type.hpp +++ /dev/null @@ -1,105 +0,0 @@ -/* - * - * Copyright (c) 2003 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE syntax_type.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares regular expression synatx type enumerator. - */ - -#ifndef BOOST_REGEX_SYNTAX_TYPE_HPP -#define BOOST_REGEX_SYNTAX_TYPE_HPP - -namespace boost{ -namespace regex_constants{ - -typedef unsigned char syntax_type; - -// -// values chosen are binary compatible with previous version: -// -static const syntax_type syntax_char = 0; -static const syntax_type syntax_open_mark = 1; -static const syntax_type syntax_close_mark = 2; -static const syntax_type syntax_dollar = 3; -static const syntax_type syntax_caret = 4; -static const syntax_type syntax_dot = 5; -static const syntax_type syntax_star = 6; -static const syntax_type syntax_plus = 7; -static const syntax_type syntax_question = 8; -static const syntax_type syntax_open_set = 9; -static const syntax_type syntax_close_set = 10; -static const syntax_type syntax_or = 11; -static const syntax_type syntax_escape = 12; -static const syntax_type syntax_dash = 14; -static const syntax_type syntax_open_brace = 15; -static const syntax_type syntax_close_brace = 16; -static const syntax_type syntax_digit = 17; -static const syntax_type syntax_comma = 27; -static const syntax_type syntax_equal = 37; -static const syntax_type syntax_colon = 36; -static const syntax_type syntax_not = 53; - -// extensions: - -static const syntax_type syntax_hash = 13; -static const syntax_type syntax_newline = 26; - -// escapes: - -typedef syntax_type escape_syntax_type; - -static const escape_syntax_type escape_type_word_assert = 18; -static const escape_syntax_type escape_type_not_word_assert = 19; -static const escape_syntax_type escape_type_control_f = 29; -static const escape_syntax_type escape_type_control_n = 30; -static const escape_syntax_type escape_type_control_r = 31; -static const escape_syntax_type escape_type_control_t = 32; -static const escape_syntax_type escape_type_control_v = 33; -static const escape_syntax_type escape_type_ascii_control = 35; -static const escape_syntax_type escape_type_hex = 34; -static const escape_syntax_type escape_type_unicode = 0; // not used -static const escape_syntax_type escape_type_identity = 0; // not used -static const escape_syntax_type escape_type_backref = syntax_digit; -static const escape_syntax_type escape_type_decimal = syntax_digit; // not used -static const escape_syntax_type escape_type_class = 22; -static const escape_syntax_type escape_type_not_class = 23; - -// extensions: - -static const escape_syntax_type escape_type_left_word = 20; -static const escape_syntax_type escape_type_right_word = 21; -static const escape_syntax_type escape_type_start_buffer = 24; // for \` -static const escape_syntax_type escape_type_end_buffer = 25; // for \' -static const escape_syntax_type escape_type_control_a = 28; // for \a -static const escape_syntax_type escape_type_e = 38; // for \e -static const escape_syntax_type escape_type_E = 47; // for \Q\E -static const escape_syntax_type escape_type_Q = 48; // for \Q\E -static const escape_syntax_type escape_type_X = 49; // for \X -static const escape_syntax_type escape_type_C = 50; // for \C -static const escape_syntax_type escape_type_Z = 51; // for \Z -static const escape_syntax_type escape_type_G = 52; // for \G - -static const escape_syntax_type escape_type_property = 54; // for \p -static const escape_syntax_type escape_type_not_property = 55; // for \P -static const escape_syntax_type escape_type_named_char = 56; // for \N -static const escape_syntax_type escape_type_extended_backref = 57; // for \g -static const escape_syntax_type escape_type_reset_start_mark = 58; // for \K -static const escape_syntax_type escape_type_line_ending = 59; // for \R - -static const escape_syntax_type syntax_max = 60; - -} -} - - -#endif diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/u32regex_iterator.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/u32regex_iterator.hpp deleted file mode 100644 index f8763a8d6a..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/u32regex_iterator.hpp +++ /dev/null @@ -1,185 +0,0 @@ -/* - * - * Copyright (c) 2003 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE u32regex_iterator.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Provides u32regex_iterator implementation. - */ - -#ifndef BOOST_REGEX_V4_U32REGEX_ITERATOR_HPP -#define BOOST_REGEX_V4_U32REGEX_ITERATOR_HPP - -namespace boost{ - -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif - -template <class BidirectionalIterator> -class u32regex_iterator_implementation -{ - typedef u32regex regex_type; - - match_results<BidirectionalIterator> what; // current match - BidirectionalIterator base; // start of sequence - BidirectionalIterator end; // end of sequence - const regex_type re; // the expression - match_flag_type flags; // flags for matching - -public: - u32regex_iterator_implementation(const regex_type* p, BidirectionalIterator last, match_flag_type f) - : base(), end(last), re(*p), flags(f){} - bool init(BidirectionalIterator first) - { - base = first; - return u32regex_search(first, end, what, re, flags, base); - } - bool compare(const u32regex_iterator_implementation& that) - { - if(this == &that) return true; - return (&re.get_data() == &that.re.get_data()) && (end == that.end) && (flags == that.flags) && (what[0].first == that.what[0].first) && (what[0].second == that.what[0].second); - } - const match_results<BidirectionalIterator>& get() - { return what; } - bool next() - { - //if(what.prefix().first != what[0].second) - // flags |= match_prev_avail; - BidirectionalIterator next_start = what[0].second; - match_flag_type f(flags); - if(!what.length()) - f |= regex_constants::match_not_initial_null; - //if(base != next_start) - // f |= regex_constants::match_not_bob; - bool result = u32regex_search(next_start, end, what, re, f, base); - if(result) - what.set_base(base); - return result; - } -private: - u32regex_iterator_implementation& operator=(const u32regex_iterator_implementation&); -}; - -template <class BidirectionalIterator> -class u32regex_iterator -{ -private: - typedef u32regex_iterator_implementation<BidirectionalIterator> impl; - typedef shared_ptr<impl> pimpl; -public: - typedef u32regex regex_type; - typedef match_results<BidirectionalIterator> value_type; - typedef typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidirectionalIterator>::difference_type - difference_type; - typedef const value_type* pointer; - typedef const value_type& reference; - typedef std::forward_iterator_tag iterator_category; - - u32regex_iterator(){} - u32regex_iterator(BidirectionalIterator a, BidirectionalIterator b, - const regex_type& re, - match_flag_type m = match_default) - : pdata(new impl(&re, b, m)) - { - if(!pdata->init(a)) - { - pdata.reset(); - } - } - u32regex_iterator(const u32regex_iterator& that) - : pdata(that.pdata) {} - u32regex_iterator& operator=(const u32regex_iterator& that) - { - pdata = that.pdata; - return *this; - } - bool operator==(const u32regex_iterator& that)const - { - if((pdata.get() == 0) || (that.pdata.get() == 0)) - return pdata.get() == that.pdata.get(); - return pdata->compare(*(that.pdata.get())); - } - bool operator!=(const u32regex_iterator& that)const - { return !(*this == that); } - const value_type& operator*()const - { return pdata->get(); } - const value_type* operator->()const - { return &(pdata->get()); } - u32regex_iterator& operator++() - { - cow(); - if(0 == pdata->next()) - { - pdata.reset(); - } - return *this; - } - u32regex_iterator operator++(int) - { - u32regex_iterator result(*this); - ++(*this); - return result; - } -private: - - pimpl pdata; - - void cow() - { - // copy-on-write - if(pdata.get() && !pdata.unique()) - { - pdata.reset(new impl(*(pdata.get()))); - } - } -}; - -typedef u32regex_iterator<const char*> utf8regex_iterator; -typedef u32regex_iterator<const UChar*> utf16regex_iterator; -typedef u32regex_iterator<const UChar32*> utf32regex_iterator; - -inline u32regex_iterator<const char*> make_u32regex_iterator(const char* p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default) -{ - return u32regex_iterator<const char*>(p, p+std::strlen(p), e, m); -} -#ifndef BOOST_NO_WREGEX -inline u32regex_iterator<const wchar_t*> make_u32regex_iterator(const wchar_t* p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default) -{ - return u32regex_iterator<const wchar_t*>(p, p+std::wcslen(p), e, m); -} -#endif -#if !defined(BOOST_REGEX_UCHAR_IS_WCHAR_T) -inline u32regex_iterator<const UChar*> make_u32regex_iterator(const UChar* p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default) -{ - return u32regex_iterator<const UChar*>(p, p+u_strlen(p), e, m); -} -#endif -template <class charT, class Traits, class Alloc> -inline u32regex_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default) -{ - typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type; - return u32regex_iterator<iter_type>(p.begin(), p.end(), e, m); -} -inline u32regex_iterator<const UChar*> make_u32regex_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, regex_constants::match_flag_type m = regex_constants::match_default) -{ - return u32regex_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, m); -} - -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif - -} // namespace boost - -#endif // BOOST_REGEX_V4_REGEX_ITERATOR_HPP - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/u32regex_token_iterator.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/u32regex_token_iterator.hpp deleted file mode 100644 index 2e04810dff..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/u32regex_token_iterator.hpp +++ /dev/null @@ -1,360 +0,0 @@ -/* - * - * Copyright (c) 2003 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE u32regex_token_iterator.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Provides u32regex_token_iterator implementation. - */ - -#ifndef BOOST_REGEX_V4_U32REGEX_TOKEN_ITERATOR_HPP -#define BOOST_REGEX_V4_U32REGEX_TOKEN_ITERATOR_HPP - -#if (BOOST_WORKAROUND(BOOST_BORLANDC, >= 0x560) && BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x570)))\ - || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) -// -// Borland C++ Builder 6, and Visual C++ 6, -// can't cope with the array template constructor -// so we have a template member that will accept any type as -// argument, and then assert that is really is an array: -// -#include <boost/static_assert.hpp> -#include <boost/type_traits/is_array.hpp> -#endif - -namespace boost{ - -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -# pragma warning(push) -# pragma warning(disable:4700) -#endif - -template <class BidirectionalIterator> -class u32regex_token_iterator_implementation -{ - typedef u32regex regex_type; - typedef sub_match<BidirectionalIterator> value_type; - - match_results<BidirectionalIterator> what; // current match - BidirectionalIterator end; // end of search area - BidirectionalIterator base; // start of search area - const regex_type re; // the expression - match_flag_type flags; // match flags - value_type result; // the current string result - int N; // the current sub-expression being enumerated - std::vector<int> subs; // the sub-expressions to enumerate - -public: - u32regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, int sub, match_flag_type f) - : end(last), re(*p), flags(f){ subs.push_back(sub); } - u32regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, const std::vector<int>& v, match_flag_type f) - : end(last), re(*p), flags(f), subs(v){} -#if (BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)))\ - || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) \ - || BOOST_WORKAROUND(__HP_aCC, < 60700) - template <class T> - u32regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, const T& submatches, match_flag_type f) - : end(last), re(*p), flags(f) - { - // assert that T really is an array: - BOOST_STATIC_ASSERT(::boost::is_array<T>::value); - const std::size_t array_size = sizeof(T) / sizeof(submatches[0]); - for(std::size_t i = 0; i < array_size; ++i) - { - subs.push_back(submatches[i]); - } - } -#else - template <std::size_t CN> - u32regex_token_iterator_implementation(const regex_type* p, BidirectionalIterator last, const int (&submatches)[CN], match_flag_type f) - : end(last), re(*p), flags(f) - { - for(std::size_t i = 0; i < CN; ++i) - { - subs.push_back(submatches[i]); - } - } -#endif - - bool init(BidirectionalIterator first) - { - base = first; - N = 0; - if(u32regex_search(first, end, what, re, flags, base) == true) - { - N = 0; - result = ((subs[N] == -1) ? what.prefix() : what[(int)subs[N]]); - return true; - } - else if((subs[N] == -1) && (first != end)) - { - result.first = first; - result.second = end; - result.matched = (first != end); - N = -1; - return true; - } - return false; - } - bool compare(const u32regex_token_iterator_implementation& that) - { - if(this == &that) return true; - return (&re.get_data() == &that.re.get_data()) - && (end == that.end) - && (flags == that.flags) - && (N == that.N) - && (what[0].first == that.what[0].first) - && (what[0].second == that.what[0].second); - } - const value_type& get() - { return result; } - bool next() - { - if(N == -1) - return false; - if(N+1 < (int)subs.size()) - { - ++N; - result =((subs[N] == -1) ? what.prefix() : what[subs[N]]); - return true; - } - //if(what.prefix().first != what[0].second) - // flags |= match_prev_avail | regex_constants::match_not_bob; - BidirectionalIterator last_end(what[0].second); - if(u32regex_search(last_end, end, what, re, ((what[0].first == what[0].second) ? flags | regex_constants::match_not_initial_null : flags), base)) - { - N =0; - result =((subs[N] == -1) ? what.prefix() : what[subs[N]]); - return true; - } - else if((last_end != end) && (subs[0] == -1)) - { - N =-1; - result.first = last_end; - result.second = end; - result.matched = (last_end != end); - return true; - } - return false; - } -private: - u32regex_token_iterator_implementation& operator=(const u32regex_token_iterator_implementation&); -}; - -template <class BidirectionalIterator> -class u32regex_token_iterator -{ -private: - typedef u32regex_token_iterator_implementation<BidirectionalIterator> impl; - typedef shared_ptr<impl> pimpl; -public: - typedef u32regex regex_type; - typedef sub_match<BidirectionalIterator> value_type; - typedef typename BOOST_REGEX_DETAIL_NS::regex_iterator_traits<BidirectionalIterator>::difference_type - difference_type; - typedef const value_type* pointer; - typedef const value_type& reference; - typedef std::forward_iterator_tag iterator_category; - - u32regex_token_iterator(){} - u32regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re, - int submatch = 0, match_flag_type m = match_default) - : pdata(new impl(&re, b, submatch, m)) - { - if(!pdata->init(a)) - pdata.reset(); - } - u32regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re, - const std::vector<int>& submatches, match_flag_type m = match_default) - : pdata(new impl(&re, b, submatches, m)) - { - if(!pdata->init(a)) - pdata.reset(); - } -#if (BOOST_WORKAROUND(__BORLANDC__, >= 0x560) && BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x570)))\ - || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) \ - || BOOST_WORKAROUND(__HP_aCC, < 60700) - template <class T> - u32regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re, - const T& submatches, match_flag_type m = match_default) - : pdata(new impl(&re, b, submatches, m)) - { - if(!pdata->init(a)) - pdata.reset(); - } -#else - template <std::size_t N> - u32regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b, const regex_type& re, - const int (&submatches)[N], match_flag_type m = match_default) - : pdata(new impl(&re, b, submatches, m)) - { - if(!pdata->init(a)) - pdata.reset(); - } -#endif - u32regex_token_iterator(const u32regex_token_iterator& that) - : pdata(that.pdata) {} - u32regex_token_iterator& operator=(const u32regex_token_iterator& that) - { - pdata = that.pdata; - return *this; - } - bool operator==(const u32regex_token_iterator& that)const - { - if((pdata.get() == 0) || (that.pdata.get() == 0)) - return pdata.get() == that.pdata.get(); - return pdata->compare(*(that.pdata.get())); - } - bool operator!=(const u32regex_token_iterator& that)const - { return !(*this == that); } - const value_type& operator*()const - { return pdata->get(); } - const value_type* operator->()const - { return &(pdata->get()); } - u32regex_token_iterator& operator++() - { - cow(); - if(0 == pdata->next()) - { - pdata.reset(); - } - return *this; - } - u32regex_token_iterator operator++(int) - { - u32regex_token_iterator result(*this); - ++(*this); - return result; - } -private: - - pimpl pdata; - - void cow() - { - // copy-on-write - if(pdata.get() && !pdata.unique()) - { - pdata.reset(new impl(*(pdata.get()))); - } - } -}; - -typedef u32regex_token_iterator<const char*> utf8regex_token_iterator; -typedef u32regex_token_iterator<const UChar*> utf16regex_token_iterator; -typedef u32regex_token_iterator<const UChar32*> utf32regex_token_iterator; - -// construction from an integral sub_match state_id: -inline u32regex_token_iterator<const char*> make_u32regex_token_iterator(const char* p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default) -{ - return u32regex_token_iterator<const char*>(p, p+std::strlen(p), e, submatch, m); -} -#ifndef BOOST_NO_WREGEX -inline u32regex_token_iterator<const wchar_t*> make_u32regex_token_iterator(const wchar_t* p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default) -{ - return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m); -} -#endif -#if !defined(BOOST_REGEX_UCHAR_IS_WCHAR_T) -inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default) -{ - return u32regex_token_iterator<const UChar*>(p, p+u_strlen(p), e, submatch, m); -} -#endif -template <class charT, class Traits, class Alloc> -inline u32regex_token_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_token_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default) -{ - typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type; - return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, submatch, m); -} -inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, int submatch = 0, regex_constants::match_flag_type m = regex_constants::match_default) -{ - return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m); -} - -// construction from a reference to an array: -template <std::size_t N> -inline u32regex_token_iterator<const char*> make_u32regex_token_iterator(const char* p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default) -{ - return u32regex_token_iterator<const char*>(p, p+std::strlen(p), e, submatch, m); -} -#ifndef BOOST_NO_WREGEX -template <std::size_t N> -inline u32regex_token_iterator<const wchar_t*> make_u32regex_token_iterator(const wchar_t* p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default) -{ - return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m); -} -#endif -#if !defined(BOOST_REGEX_UCHAR_IS_WCHAR_T) -template <std::size_t N> -inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default) -{ - return u32regex_token_iterator<const UChar*>(p, p+u_strlen(p), e, submatch, m); -} -#endif -template <class charT, class Traits, class Alloc, std::size_t N> -inline u32regex_token_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_token_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default) -{ - typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type; - return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, submatch, m); -} -template <std::size_t N> -inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, const int (&submatch)[N], regex_constants::match_flag_type m = regex_constants::match_default) -{ - return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m); -} - -// construction from a vector of sub_match state_id's: -inline u32regex_token_iterator<const char*> make_u32regex_token_iterator(const char* p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default) -{ - return u32regex_token_iterator<const char*>(p, p+std::strlen(p), e, submatch, m); -} -#ifndef BOOST_NO_WREGEX -inline u32regex_token_iterator<const wchar_t*> make_u32regex_token_iterator(const wchar_t* p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default) -{ - return u32regex_token_iterator<const wchar_t*>(p, p+std::wcslen(p), e, submatch, m); -} -#endif -#if !defined(U_WCHAR_IS_UTF16) && (U_SIZEOF_WCHAR_T != 2) -inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const UChar* p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default) -{ - return u32regex_token_iterator<const UChar*>(p, p+u_strlen(p), e, submatch, m); -} -#endif -template <class charT, class Traits, class Alloc> -inline u32regex_token_iterator<typename std::basic_string<charT, Traits, Alloc>::const_iterator> make_u32regex_token_iterator(const std::basic_string<charT, Traits, Alloc>& p, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default) -{ - typedef typename std::basic_string<charT, Traits, Alloc>::const_iterator iter_type; - return u32regex_token_iterator<iter_type>(p.begin(), p.end(), e, submatch, m); -} -inline u32regex_token_iterator<const UChar*> make_u32regex_token_iterator(const U_NAMESPACE_QUALIFIER UnicodeString& s, const u32regex& e, const std::vector<int>& submatch, regex_constants::match_flag_type m = regex_constants::match_default) -{ - return u32regex_token_iterator<const UChar*>(s.getBuffer(), s.getBuffer() + s.length(), e, submatch, m); -} - -#ifdef BOOST_MSVC -# pragma warning(pop) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif - -} // namespace boost - -#endif // BOOST_REGEX_V4_REGEX_TOKEN_ITERATOR_HPP - - - - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/unicode_iterator.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/unicode_iterator.hpp deleted file mode 100644 index 985aa72b20..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/unicode_iterator.hpp +++ /dev/null @@ -1,871 +0,0 @@ -/* - * - * Copyright (c) 2004 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE unicode_iterator.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Iterator adapters for converting between different Unicode encodings. - */ - -/**************************************************************************** - -Contents: -~~~~~~~~~ - -1) Read Only, Input Adapters: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -template <class BaseIterator, class U8Type = ::boost::uint8_t> -class u32_to_u8_iterator; - -Adapts sequence of UTF-32 code points to "look like" a sequence of UTF-8. - -template <class BaseIterator, class U32Type = ::boost::uint32_t> -class u8_to_u32_iterator; - -Adapts sequence of UTF-8 code points to "look like" a sequence of UTF-32. - -template <class BaseIterator, class U16Type = ::boost::uint16_t> -class u32_to_u16_iterator; - -Adapts sequence of UTF-32 code points to "look like" a sequence of UTF-16. - -template <class BaseIterator, class U32Type = ::boost::uint32_t> -class u16_to_u32_iterator; - -Adapts sequence of UTF-16 code points to "look like" a sequence of UTF-32. - -2) Single pass output iterator adapters: - -template <class BaseIterator> -class utf8_output_iterator; - -Accepts UTF-32 code points and forwards them on as UTF-8 code points. - -template <class BaseIterator> -class utf16_output_iterator; - -Accepts UTF-32 code points and forwards them on as UTF-16 code points. - -****************************************************************************/ - -#ifndef BOOST_REGEX_V4_UNICODE_ITERATOR_HPP -#define BOOST_REGEX_V4_UNICODE_ITERATOR_HPP -#include <boost/cstdint.hpp> -#include <boost/regex/config.hpp> -#include <boost/static_assert.hpp> -#include <boost/throw_exception.hpp> -#include <stdexcept> -#ifndef BOOST_NO_STD_LOCALE -#include <sstream> -#include <ios> -#endif -#include <limits.h> // CHAR_BIT - -#ifdef BOOST_REGEX_CXX03 - -#else -#endif - -namespace boost{ - -namespace detail{ - -static const ::boost::uint16_t high_surrogate_base = 0xD7C0u; -static const ::boost::uint16_t low_surrogate_base = 0xDC00u; -static const ::boost::uint32_t ten_bit_mask = 0x3FFu; - -inline bool is_high_surrogate(::boost::uint16_t v) -{ - return (v & 0xFFFFFC00u) == 0xd800u; -} -inline bool is_low_surrogate(::boost::uint16_t v) -{ - return (v & 0xFFFFFC00u) == 0xdc00u; -} -template <class T> -inline bool is_surrogate(T v) -{ - return (v & 0xFFFFF800u) == 0xd800; -} - -inline unsigned utf8_byte_count(boost::uint8_t c) -{ - // if the most significant bit with a zero in it is in position - // 8-N then there are N bytes in this UTF-8 sequence: - boost::uint8_t mask = 0x80u; - unsigned result = 0; - while(c & mask) - { - ++result; - mask >>= 1; - } - return (result == 0) ? 1 : ((result > 4) ? 4 : result); -} - -inline unsigned utf8_trailing_byte_count(boost::uint8_t c) -{ - return utf8_byte_count(c) - 1; -} - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4100) -#endif -#ifndef BOOST_NO_EXCEPTIONS -BOOST_NORETURN -#endif -inline void invalid_utf32_code_point(::boost::uint32_t val) -{ -#ifndef BOOST_NO_STD_LOCALE - std::stringstream ss; - ss << "Invalid UTF-32 code point U+" << std::showbase << std::hex << val << " encountered while trying to encode UTF-16 sequence"; - std::out_of_range e(ss.str()); -#else - std::out_of_range e("Invalid UTF-32 code point encountered while trying to encode UTF-16 sequence"); -#endif - boost::throw_exception(e); -} -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - - -} // namespace detail - -template <class BaseIterator, class U16Type = ::boost::uint16_t> -class u32_to_u16_iterator -{ -#if !defined(BOOST_NO_STD_ITERATOR_TRAITS) - typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type; - - BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 32); - BOOST_STATIC_ASSERT(sizeof(U16Type)*CHAR_BIT == 16); -#endif - -public: - typedef std::ptrdiff_t difference_type; - typedef U16Type value_type; - typedef value_type const* pointer; - typedef value_type const reference; - typedef std::bidirectional_iterator_tag iterator_category; - - reference operator*()const - { - if(m_current == 2) - extract_current(); - return m_values[m_current]; - } - bool operator==(const u32_to_u16_iterator& that)const - { - if(m_position == that.m_position) - { - // Both m_currents must be equal, or both even - // this is the same as saying their sum must be even: - return (m_current + that.m_current) & 1u ? false : true; - } - return false; - } - bool operator!=(const u32_to_u16_iterator& that)const - { - return !(*this == that); - } - u32_to_u16_iterator& operator++() - { - // if we have a pending read then read now, so that we know whether - // to skip a position, or move to a low-surrogate: - if(m_current == 2) - { - // pending read: - extract_current(); - } - // move to the next surrogate position: - ++m_current; - // if we've reached the end skip a position: - if(m_values[m_current] == 0) - { - m_current = 2; - ++m_position; - } - return *this; - } - u32_to_u16_iterator operator++(int) - { - u32_to_u16_iterator r(*this); - ++(*this); - return r; - } - u32_to_u16_iterator& operator--() - { - if(m_current != 1) - { - // decrementing an iterator always leads to a valid position: - --m_position; - extract_current(); - m_current = m_values[1] ? 1 : 0; - } - else - { - m_current = 0; - } - return *this; - } - u32_to_u16_iterator operator--(int) - { - u32_to_u16_iterator r(*this); - --(*this); - return r; - } - BaseIterator base()const - { - return m_position; - } - // construct: - u32_to_u16_iterator() : m_position(), m_current(0) - { - m_values[0] = 0; - m_values[1] = 0; - m_values[2] = 0; - } - u32_to_u16_iterator(BaseIterator b) : m_position(b), m_current(2) - { - m_values[0] = 0; - m_values[1] = 0; - m_values[2] = 0; - } -private: - - void extract_current()const - { - // begin by checking for a code point out of range: - ::boost::uint32_t v = *m_position; - if(v >= 0x10000u) - { - if(v > 0x10FFFFu) - detail::invalid_utf32_code_point(*m_position); - // split into two surrogates: - m_values[0] = static_cast<U16Type>(v >> 10) + detail::high_surrogate_base; - m_values[1] = static_cast<U16Type>(v & detail::ten_bit_mask) + detail::low_surrogate_base; - m_current = 0; - BOOST_REGEX_ASSERT(detail::is_high_surrogate(m_values[0])); - BOOST_REGEX_ASSERT(detail::is_low_surrogate(m_values[1])); - } - else - { - // 16-bit code point: - m_values[0] = static_cast<U16Type>(*m_position); - m_values[1] = 0; - m_current = 0; - // value must not be a surrogate: - if(detail::is_surrogate(m_values[0])) - detail::invalid_utf32_code_point(*m_position); - } - } - BaseIterator m_position; - mutable U16Type m_values[3]; - mutable unsigned m_current; -}; - -template <class BaseIterator, class U32Type = ::boost::uint32_t> -class u16_to_u32_iterator -{ - // special values for pending iterator reads: - BOOST_STATIC_CONSTANT(U32Type, pending_read = 0xffffffffu); - -#if !defined(BOOST_NO_STD_ITERATOR_TRAITS) - typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type; - - BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 16); - BOOST_STATIC_ASSERT(sizeof(U32Type)*CHAR_BIT == 32); -#endif - -public: - typedef std::ptrdiff_t difference_type; - typedef U32Type value_type; - typedef value_type const* pointer; - typedef value_type const reference; - typedef std::bidirectional_iterator_tag iterator_category; - - reference operator*()const - { - if(m_value == pending_read) - extract_current(); - return m_value; - } - bool operator==(const u16_to_u32_iterator& that)const - { - return m_position == that.m_position; - } - bool operator!=(const u16_to_u32_iterator& that)const - { - return !(*this == that); - } - u16_to_u32_iterator& operator++() - { - // skip high surrogate first if there is one: - if(detail::is_high_surrogate(*m_position)) ++m_position; - ++m_position; - m_value = pending_read; - return *this; - } - u16_to_u32_iterator operator++(int) - { - u16_to_u32_iterator r(*this); - ++(*this); - return r; - } - u16_to_u32_iterator& operator--() - { - --m_position; - // if we have a low surrogate then go back one more: - if(detail::is_low_surrogate(*m_position)) - --m_position; - m_value = pending_read; - return *this; - } - u16_to_u32_iterator operator--(int) - { - u16_to_u32_iterator r(*this); - --(*this); - return r; - } - BaseIterator base()const - { - return m_position; - } - // construct: - u16_to_u32_iterator() : m_position() - { - m_value = pending_read; - } - u16_to_u32_iterator(BaseIterator b) : m_position(b) - { - m_value = pending_read; - } - // - // Range checked version: - // - u16_to_u32_iterator(BaseIterator b, BaseIterator start, BaseIterator end) : m_position(b) - { - m_value = pending_read; - // - // The range must not start with a low surrogate, or end in a high surrogate, - // otherwise we run the risk of running outside the underlying input range. - // Likewise b must not be located at a low surrogate. - // - boost::uint16_t val; - if(start != end) - { - if((b != start) && (b != end)) - { - val = *b; - if(detail::is_surrogate(val) && ((val & 0xFC00u) == 0xDC00u)) - invalid_code_point(val); - } - val = *start; - if(detail::is_surrogate(val) && ((val & 0xFC00u) == 0xDC00u)) - invalid_code_point(val); - val = *--end; - if(detail::is_high_surrogate(val)) - invalid_code_point(val); - } - } -private: - static void invalid_code_point(::boost::uint16_t val) - { -#ifndef BOOST_NO_STD_LOCALE - std::stringstream ss; - ss << "Misplaced UTF-16 surrogate U+" << std::showbase << std::hex << val << " encountered while trying to encode UTF-32 sequence"; - std::out_of_range e(ss.str()); -#else - std::out_of_range e("Misplaced UTF-16 surrogate encountered while trying to encode UTF-32 sequence"); -#endif - boost::throw_exception(e); - } - void extract_current()const - { - m_value = static_cast<U32Type>(static_cast< ::boost::uint16_t>(*m_position)); - // if the last value is a high surrogate then adjust m_position and m_value as needed: - if(detail::is_high_surrogate(*m_position)) - { - // precondition; next value must have be a low-surrogate: - BaseIterator next(m_position); - ::boost::uint16_t t = *++next; - if((t & 0xFC00u) != 0xDC00u) - invalid_code_point(t); - m_value = (m_value - detail::high_surrogate_base) << 10; - m_value |= (static_cast<U32Type>(static_cast< ::boost::uint16_t>(t)) & detail::ten_bit_mask); - } - // postcondition; result must not be a surrogate: - if(detail::is_surrogate(m_value)) - invalid_code_point(static_cast< ::boost::uint16_t>(m_value)); - } - BaseIterator m_position; - mutable U32Type m_value; -}; - -template <class BaseIterator, class U8Type = ::boost::uint8_t> -class u32_to_u8_iterator -{ -#if !defined(BOOST_NO_STD_ITERATOR_TRAITS) - typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type; - - BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 32); - BOOST_STATIC_ASSERT(sizeof(U8Type)*CHAR_BIT == 8); -#endif - -public: - typedef std::ptrdiff_t difference_type; - typedef U8Type value_type; - typedef value_type const* pointer; - typedef value_type const reference; - typedef std::bidirectional_iterator_tag iterator_category; - - reference operator*()const - { - if(m_current == 4) - extract_current(); - return m_values[m_current]; - } - bool operator==(const u32_to_u8_iterator& that)const - { - if(m_position == that.m_position) - { - // either the m_current's must be equal, or one must be 0 and - // the other 4: which means neither must have bits 1 or 2 set: - return (m_current == that.m_current) - || (((m_current | that.m_current) & 3) == 0); - } - return false; - } - bool operator!=(const u32_to_u8_iterator& that)const - { - return !(*this == that); - } - u32_to_u8_iterator& operator++() - { - // if we have a pending read then read now, so that we know whether - // to skip a position, or move to a low-surrogate: - if(m_current == 4) - { - // pending read: - extract_current(); - } - // move to the next surrogate position: - ++m_current; - // if we've reached the end skip a position: - if(m_values[m_current] == 0) - { - m_current = 4; - ++m_position; - } - return *this; - } - u32_to_u8_iterator operator++(int) - { - u32_to_u8_iterator r(*this); - ++(*this); - return r; - } - u32_to_u8_iterator& operator--() - { - if((m_current & 3) == 0) - { - --m_position; - extract_current(); - m_current = 3; - while(m_current && (m_values[m_current] == 0)) - --m_current; - } - else - --m_current; - return *this; - } - u32_to_u8_iterator operator--(int) - { - u32_to_u8_iterator r(*this); - --(*this); - return r; - } - BaseIterator base()const - { - return m_position; - } - // construct: - u32_to_u8_iterator() : m_position(), m_current(0) - { - m_values[0] = 0; - m_values[1] = 0; - m_values[2] = 0; - m_values[3] = 0; - m_values[4] = 0; - } - u32_to_u8_iterator(BaseIterator b) : m_position(b), m_current(4) - { - m_values[0] = 0; - m_values[1] = 0; - m_values[2] = 0; - m_values[3] = 0; - m_values[4] = 0; - } -private: - - void extract_current()const - { - boost::uint32_t c = *m_position; - if(c > 0x10FFFFu) - detail::invalid_utf32_code_point(c); - if(c < 0x80u) - { - m_values[0] = static_cast<unsigned char>(c); - m_values[1] = static_cast<unsigned char>(0u); - m_values[2] = static_cast<unsigned char>(0u); - m_values[3] = static_cast<unsigned char>(0u); - } - else if(c < 0x800u) - { - m_values[0] = static_cast<unsigned char>(0xC0u + (c >> 6)); - m_values[1] = static_cast<unsigned char>(0x80u + (c & 0x3Fu)); - m_values[2] = static_cast<unsigned char>(0u); - m_values[3] = static_cast<unsigned char>(0u); - } - else if(c < 0x10000u) - { - m_values[0] = static_cast<unsigned char>(0xE0u + (c >> 12)); - m_values[1] = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu)); - m_values[2] = static_cast<unsigned char>(0x80u + (c & 0x3Fu)); - m_values[3] = static_cast<unsigned char>(0u); - } - else - { - m_values[0] = static_cast<unsigned char>(0xF0u + (c >> 18)); - m_values[1] = static_cast<unsigned char>(0x80u + ((c >> 12) & 0x3Fu)); - m_values[2] = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu)); - m_values[3] = static_cast<unsigned char>(0x80u + (c & 0x3Fu)); - } - m_current= 0; - } - BaseIterator m_position; - mutable U8Type m_values[5]; - mutable unsigned m_current; -}; - -template <class BaseIterator, class U32Type = ::boost::uint32_t> -class u8_to_u32_iterator -{ - // special values for pending iterator reads: - BOOST_STATIC_CONSTANT(U32Type, pending_read = 0xffffffffu); - -#if !defined(BOOST_NO_STD_ITERATOR_TRAITS) - typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type; - - BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 8); - BOOST_STATIC_ASSERT(sizeof(U32Type)*CHAR_BIT == 32); -#endif - -public: - typedef std::ptrdiff_t difference_type; - typedef U32Type value_type; - typedef value_type const* pointer; - typedef value_type const reference; - typedef std::bidirectional_iterator_tag iterator_category; - - reference operator*()const - { - if(m_value == pending_read) - extract_current(); - return m_value; - } - bool operator==(const u8_to_u32_iterator& that)const - { - return m_position == that.m_position; - } - bool operator!=(const u8_to_u32_iterator& that)const - { - return !(*this == that); - } - u8_to_u32_iterator& operator++() - { - // We must not start with a continuation character: - if((static_cast<boost::uint8_t>(*m_position) & 0xC0) == 0x80) - invalid_sequence(); - // skip high surrogate first if there is one: - unsigned c = detail::utf8_byte_count(*m_position); - if(m_value == pending_read) - { - // Since we haven't read in a value, we need to validate the code points: - for(unsigned i = 0; i < c; ++i) - { - ++m_position; - // We must have a continuation byte: - if((i != c - 1) && ((static_cast<boost::uint8_t>(*m_position) & 0xC0) != 0x80)) - invalid_sequence(); - } - } - else - { - std::advance(m_position, c); - } - m_value = pending_read; - return *this; - } - u8_to_u32_iterator operator++(int) - { - u8_to_u32_iterator r(*this); - ++(*this); - return r; - } - u8_to_u32_iterator& operator--() - { - // Keep backtracking until we don't have a trailing character: - unsigned count = 0; - while((*--m_position & 0xC0u) == 0x80u) ++count; - // now check that the sequence was valid: - if(count != detail::utf8_trailing_byte_count(*m_position)) - invalid_sequence(); - m_value = pending_read; - return *this; - } - u8_to_u32_iterator operator--(int) - { - u8_to_u32_iterator r(*this); - --(*this); - return r; - } - BaseIterator base()const - { - return m_position; - } - // construct: - u8_to_u32_iterator() : m_position() - { - m_value = pending_read; - } - u8_to_u32_iterator(BaseIterator b) : m_position(b) - { - m_value = pending_read; - } - // - // Checked constructor: - // - u8_to_u32_iterator(BaseIterator b, BaseIterator start, BaseIterator end) : m_position(b) - { - m_value = pending_read; - // - // We must not start with a continuation character, or end with a - // truncated UTF-8 sequence otherwise we run the risk of going past - // the start/end of the underlying sequence: - // - if(start != end) - { - unsigned char v = *start; - if((v & 0xC0u) == 0x80u) - invalid_sequence(); - if((b != start) && (b != end) && ((*b & 0xC0u) == 0x80u)) - invalid_sequence(); - BaseIterator pos = end; - do - { - v = *--pos; - } - while((start != pos) && ((v & 0xC0u) == 0x80u)); - std::ptrdiff_t extra = detail::utf8_byte_count(v); - if(std::distance(pos, end) < extra) - invalid_sequence(); - } - } -private: - static void invalid_sequence() - { - std::out_of_range e("Invalid UTF-8 sequence encountered while trying to encode UTF-32 character"); - boost::throw_exception(e); - } - void extract_current()const - { - m_value = static_cast<U32Type>(static_cast< ::boost::uint8_t>(*m_position)); - // we must not have a continuation character: - if((m_value & 0xC0u) == 0x80u) - invalid_sequence(); - // see how many extra bytes we have: - unsigned extra = detail::utf8_trailing_byte_count(*m_position); - // extract the extra bits, 6 from each extra byte: - BaseIterator next(m_position); - for(unsigned c = 0; c < extra; ++c) - { - ++next; - m_value <<= 6; - // We must have a continuation byte: - if((static_cast<boost::uint8_t>(*next) & 0xC0) != 0x80) - invalid_sequence(); - m_value += static_cast<boost::uint8_t>(*next) & 0x3Fu; - } - // we now need to remove a few of the leftmost bits, but how many depends - // upon how many extra bytes we've extracted: - static const boost::uint32_t masks[4] = - { - 0x7Fu, - 0x7FFu, - 0xFFFFu, - 0x1FFFFFu, - }; - m_value &= masks[extra]; - // check the result is in range: - if(m_value > static_cast<U32Type>(0x10FFFFu)) - invalid_sequence(); - // The result must not be a surrogate: - if((m_value >= static_cast<U32Type>(0xD800)) && (m_value <= static_cast<U32Type>(0xDFFF))) - invalid_sequence(); - // We should not have had an invalidly encoded UTF8 sequence: - if((extra > 0) && (m_value <= static_cast<U32Type>(masks[extra - 1]))) - invalid_sequence(); - } - BaseIterator m_position; - mutable U32Type m_value; -}; - -template <class BaseIterator> -class utf16_output_iterator -{ -public: - typedef void difference_type; - typedef void value_type; - typedef boost::uint32_t* pointer; - typedef boost::uint32_t& reference; - typedef std::output_iterator_tag iterator_category; - - utf16_output_iterator(const BaseIterator& b) - : m_position(b){} - utf16_output_iterator(const utf16_output_iterator& that) - : m_position(that.m_position){} - utf16_output_iterator& operator=(const utf16_output_iterator& that) - { - m_position = that.m_position; - return *this; - } - const utf16_output_iterator& operator*()const - { - return *this; - } - void operator=(boost::uint32_t val)const - { - push(val); - } - utf16_output_iterator& operator++() - { - return *this; - } - utf16_output_iterator& operator++(int) - { - return *this; - } - BaseIterator base()const - { - return m_position; - } -private: - void push(boost::uint32_t v)const - { - if(v >= 0x10000u) - { - // begin by checking for a code point out of range: - if(v > 0x10FFFFu) - detail::invalid_utf32_code_point(v); - // split into two surrogates: - *m_position++ = static_cast<boost::uint16_t>(v >> 10) + detail::high_surrogate_base; - *m_position++ = static_cast<boost::uint16_t>(v & detail::ten_bit_mask) + detail::low_surrogate_base; - } - else - { - // 16-bit code point: - // value must not be a surrogate: - if(detail::is_surrogate(v)) - detail::invalid_utf32_code_point(v); - *m_position++ = static_cast<boost::uint16_t>(v); - } - } - mutable BaseIterator m_position; -}; - -template <class BaseIterator> -class utf8_output_iterator -{ -public: - typedef void difference_type; - typedef void value_type; - typedef boost::uint32_t* pointer; - typedef boost::uint32_t& reference; - typedef std::output_iterator_tag iterator_category; - - utf8_output_iterator(const BaseIterator& b) - : m_position(b){} - utf8_output_iterator(const utf8_output_iterator& that) - : m_position(that.m_position){} - utf8_output_iterator& operator=(const utf8_output_iterator& that) - { - m_position = that.m_position; - return *this; - } - const utf8_output_iterator& operator*()const - { - return *this; - } - void operator=(boost::uint32_t val)const - { - push(val); - } - utf8_output_iterator& operator++() - { - return *this; - } - utf8_output_iterator& operator++(int) - { - return *this; - } - BaseIterator base()const - { - return m_position; - } -private: - void push(boost::uint32_t c)const - { - if(c > 0x10FFFFu) - detail::invalid_utf32_code_point(c); - if(c < 0x80u) - { - *m_position++ = static_cast<unsigned char>(c); - } - else if(c < 0x800u) - { - *m_position++ = static_cast<unsigned char>(0xC0u + (c >> 6)); - *m_position++ = static_cast<unsigned char>(0x80u + (c & 0x3Fu)); - } - else if(c < 0x10000u) - { - *m_position++ = static_cast<unsigned char>(0xE0u + (c >> 12)); - *m_position++ = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu)); - *m_position++ = static_cast<unsigned char>(0x80u + (c & 0x3Fu)); - } - else - { - *m_position++ = static_cast<unsigned char>(0xF0u + (c >> 18)); - *m_position++ = static_cast<unsigned char>(0x80u + ((c >> 12) & 0x3Fu)); - *m_position++ = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu)); - *m_position++ = static_cast<unsigned char>(0x80u + (c & 0x3Fu)); - } - } - mutable BaseIterator m_position; -}; - -} // namespace boost - -#endif // BOOST_REGEX_UNICODE_ITERATOR_HPP - diff --git a/contrib/restricted/boost/regex/include/boost/regex/v4/w32_regex_traits.hpp b/contrib/restricted/boost/regex/include/boost/regex/v4/w32_regex_traits.hpp deleted file mode 100644 index e1ac5d5f55..0000000000 --- a/contrib/restricted/boost/regex/include/boost/regex/v4/w32_regex_traits.hpp +++ /dev/null @@ -1,1229 +0,0 @@ -/* - * - * Copyright (c) 2004 - * John Maddock - * - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - - /* - * LOCATION: see http://www.boost.org for most recent version. - * FILE w32_regex_traits.hpp - * VERSION see <boost/version.hpp> - * DESCRIPTION: Declares regular expression traits class w32_regex_traits. - */ - -#ifndef BOOST_W32_REGEX_TRAITS_HPP_INCLUDED -#define BOOST_W32_REGEX_TRAITS_HPP_INCLUDED - -#ifndef BOOST_REGEX_NO_WIN32_LOCALE - -#ifndef BOOST_RE_PAT_EXCEPT_HPP -#include <boost/regex/pattern_except.hpp> -#endif -#ifndef BOOST_REGEX_TRAITS_DEFAULTS_HPP_INCLUDED -#include <boost/regex/v4/regex_traits_defaults.hpp> -#endif -#ifdef BOOST_HAS_THREADS -#include <boost/regex/pending/static_mutex.hpp> -#endif -#ifndef BOOST_REGEX_PRIMARY_TRANSFORM -#include <boost/regex/v4/primary_transform.hpp> -#endif -#ifndef BOOST_REGEX_OBJECT_CACHE_HPP -#include <boost/regex/v4/object_cache.hpp> -#endif - -#define VC_EXTRALEAN -#define WIN32_LEAN_AND_MEAN -#include <windows.h> - -#if defined(_MSC_VER) && !defined(_WIN32_WCE) && !defined(UNDER_CE) -#pragma comment(lib, "user32.lib") -#endif - - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_PREFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable:4786) -#if BOOST_MSVC < 1910 -#pragma warning(disable:4800) -#endif -#endif - -namespace boost{ - -// -// forward declaration is needed by some compilers: -// -template <class charT> -class w32_regex_traits; - -namespace BOOST_REGEX_DETAIL_NS{ - -// -// start by typedeffing the types we'll need: -// -typedef ::boost::uint32_t lcid_type; // placeholder for LCID. -typedef ::boost::shared_ptr<void> cat_type; // placeholder for dll HANDLE. - -// -// then add wrappers around the actual Win32 API's (ie implementation hiding): -// -lcid_type BOOST_REGEX_CALL w32_get_default_locale(); -bool BOOST_REGEX_CALL w32_is_lower(char, lcid_type); -#ifndef BOOST_NO_WREGEX -bool BOOST_REGEX_CALL w32_is_lower(wchar_t, lcid_type); -#endif -bool BOOST_REGEX_CALL w32_is_upper(char, lcid_type); -#ifndef BOOST_NO_WREGEX -bool BOOST_REGEX_CALL w32_is_upper(wchar_t, lcid_type); -#endif -cat_type BOOST_REGEX_CALL w32_cat_open(const std::string& name); -std::string BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, lcid_type state_id, int i, const std::string& def); -#ifndef BOOST_NO_WREGEX -std::wstring BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, lcid_type state_id, int i, const std::wstring& def); -#endif -std::string BOOST_REGEX_CALL w32_transform(lcid_type state_id, const char* p1, const char* p2); -#ifndef BOOST_NO_WREGEX -std::wstring BOOST_REGEX_CALL w32_transform(lcid_type state_id, const wchar_t* p1, const wchar_t* p2); -#endif -char BOOST_REGEX_CALL w32_tolower(char c, lcid_type); -#ifndef BOOST_NO_WREGEX -wchar_t BOOST_REGEX_CALL w32_tolower(wchar_t c, lcid_type); -#endif -char BOOST_REGEX_CALL w32_toupper(char c, lcid_type); -#ifndef BOOST_NO_WREGEX -wchar_t BOOST_REGEX_CALL w32_toupper(wchar_t c, lcid_type); -#endif -bool BOOST_REGEX_CALL w32_is(lcid_type, boost::uint32_t mask, char c); -#ifndef BOOST_NO_WREGEX -bool BOOST_REGEX_CALL w32_is(lcid_type, boost::uint32_t mask, wchar_t c); -#endif -// -// class w32_regex_traits_base: -// acts as a container for locale and the facets we are using. -// -template <class charT> -struct w32_regex_traits_base -{ - w32_regex_traits_base(lcid_type l) - { imbue(l); } - lcid_type imbue(lcid_type l); - - lcid_type m_locale; -}; - -template <class charT> -inline lcid_type w32_regex_traits_base<charT>::imbue(lcid_type l) -{ - lcid_type result(m_locale); - m_locale = l; - return result; -} - -// -// class w32_regex_traits_char_layer: -// implements methods that require specialisation for narrow characters: -// -template <class charT> -class w32_regex_traits_char_layer : public w32_regex_traits_base<charT> -{ - typedef std::basic_string<charT> string_type; - typedef std::map<charT, regex_constants::syntax_type> map_type; - typedef typename map_type::const_iterator map_iterator_type; -public: - w32_regex_traits_char_layer(const lcid_type l); - - regex_constants::syntax_type syntax_type(charT c)const - { - map_iterator_type i = m_char_map.find(c); - return ((i == m_char_map.end()) ? 0 : i->second); - } - regex_constants::escape_syntax_type escape_syntax_type(charT c) const - { - map_iterator_type i = m_char_map.find(c); - if(i == m_char_map.end()) - { - if(::boost::BOOST_REGEX_DETAIL_NS::w32_is_lower(c, this->m_locale)) return regex_constants::escape_type_class; - if(::boost::BOOST_REGEX_DETAIL_NS::w32_is_upper(c, this->m_locale)) return regex_constants::escape_type_not_class; - return 0; - } - return i->second; - } - charT tolower(charT c)const - { - return ::boost::BOOST_REGEX_DETAIL_NS::w32_tolower(c, this->m_locale); - } - bool isctype(boost::uint32_t mask, charT c)const - { - return ::boost::BOOST_REGEX_DETAIL_NS::w32_is(this->m_locale, mask, c); - } - -private: - string_type get_default_message(regex_constants::syntax_type); - // TODO: use a hash table when available! - map_type m_char_map; -}; - -template <class charT> -w32_regex_traits_char_layer<charT>::w32_regex_traits_char_layer(::boost::BOOST_REGEX_DETAIL_NS::lcid_type l) - : w32_regex_traits_base<charT>(l) -{ - // we need to start by initialising our syntax map so we know which - // character is used for which purpose: - cat_type cat; - std::string cat_name(w32_regex_traits<charT>::get_catalog_name()); - if(cat_name.size()) - { - cat = ::boost::BOOST_REGEX_DETAIL_NS::w32_cat_open(cat_name); - if(!cat) - { - std::string m("Unable to open message catalog: "); - std::runtime_error err(m + cat_name); - boost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(err); - } - } - // - // if we have a valid catalog then load our messages: - // - if(cat) - { - for(regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i) - { - string_type mss = ::boost::BOOST_REGEX_DETAIL_NS::w32_cat_get(cat, this->m_locale, i, get_default_message(i)); - for(typename string_type::size_type j = 0; j < mss.size(); ++j) - { - this->m_char_map[mss[j]] = i; - } - } - } - else - { - for(regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i) - { - const char* ptr = get_default_syntax(i); - while(ptr && *ptr) - { - this->m_char_map[static_cast<charT>(*ptr)] = i; - ++ptr; - } - } - } -} - -template <class charT> -typename w32_regex_traits_char_layer<charT>::string_type - w32_regex_traits_char_layer<charT>::get_default_message(regex_constants::syntax_type i) -{ - const char* ptr = get_default_syntax(i); - string_type result; - while(ptr && *ptr) - { - result.append(1, static_cast<charT>(*ptr)); - ++ptr; - } - return result; -} - -// -// specialised version for narrow characters: -// -template <> -class w32_regex_traits_char_layer<char> : public w32_regex_traits_base<char> -{ - typedef std::string string_type; -public: - w32_regex_traits_char_layer(::boost::BOOST_REGEX_DETAIL_NS::lcid_type l) - : w32_regex_traits_base<char>(l) - { - init<char>(); - } - - regex_constants::syntax_type syntax_type(char c)const - { - return m_char_map[static_cast<unsigned char>(c)]; - } - regex_constants::escape_syntax_type escape_syntax_type(char c) const - { - return m_char_map[static_cast<unsigned char>(c)]; - } - char tolower(char c)const - { - return m_lower_map[static_cast<unsigned char>(c)]; - } - bool isctype(boost::uint32_t mask, char c)const - { - return m_type_map[static_cast<unsigned char>(c)] & mask; - } - -private: - regex_constants::syntax_type m_char_map[1u << CHAR_BIT]; - char m_lower_map[1u << CHAR_BIT]; - boost::uint16_t m_type_map[1u << CHAR_BIT]; - template <class U> - void init(); -}; - -// -// class w32_regex_traits_implementation: -// provides pimpl implementation for w32_regex_traits. -// -template <class charT> -class w32_regex_traits_implementation : public w32_regex_traits_char_layer<charT> -{ -public: - typedef typename w32_regex_traits<charT>::char_class_type char_class_type; - BOOST_STATIC_CONSTANT(char_class_type, mask_word = 0x0400); // must be C1_DEFINED << 1 - BOOST_STATIC_CONSTANT(char_class_type, mask_unicode = 0x0800); // must be C1_DEFINED << 2 - BOOST_STATIC_CONSTANT(char_class_type, mask_horizontal = 0x1000); // must be C1_DEFINED << 3 - BOOST_STATIC_CONSTANT(char_class_type, mask_vertical = 0x2000); // must be C1_DEFINED << 4 - BOOST_STATIC_CONSTANT(char_class_type, mask_base = 0x3ff); // all the masks used by the CT_CTYPE1 group - - typedef std::basic_string<charT> string_type; - typedef charT char_type; - w32_regex_traits_implementation(::boost::BOOST_REGEX_DETAIL_NS::lcid_type l); - std::string error_string(regex_constants::error_type n) const - { - if(!m_error_strings.empty()) - { - std::map<int, std::string>::const_iterator p = m_error_strings.find(n); - return (p == m_error_strings.end()) ? std::string(get_default_error_string(n)) : p->second; - } - return get_default_error_string(n); - } - char_class_type lookup_classname(const charT* p1, const charT* p2) const - { - char_class_type result = lookup_classname_imp(p1, p2); - if(result == 0) - { - typedef typename string_type::size_type size_type; - string_type temp(p1, p2); - for(size_type i = 0; i < temp.size(); ++i) - temp[i] = this->tolower(temp[i]); - result = lookup_classname_imp(&*temp.begin(), &*temp.begin() + temp.size()); - } - return result; - } - string_type lookup_collatename(const charT* p1, const charT* p2) const; - string_type transform_primary(const charT* p1, const charT* p2) const; - string_type transform(const charT* p1, const charT* p2) const - { - return ::boost::BOOST_REGEX_DETAIL_NS::w32_transform(this->m_locale, p1, p2); - } -private: - std::map<int, std::string> m_error_strings; // error messages indexed by numberic ID - std::map<string_type, char_class_type> m_custom_class_names; // character class names - std::map<string_type, string_type> m_custom_collate_names; // collating element names - unsigned m_collate_type; // the form of the collation string - charT m_collate_delim; // the collation group delimiter - // - // helpers: - // - char_class_type lookup_classname_imp(const charT* p1, const charT* p2) const; -}; - -template <class charT> -typename w32_regex_traits_implementation<charT>::string_type - w32_regex_traits_implementation<charT>::transform_primary(const charT* p1, const charT* p2) const -{ - string_type result; - // - // What we do here depends upon the format of the sort key returned by - // sort key returned by this->transform: - // - switch(m_collate_type) - { - case sort_C: - case sort_unknown: - // the best we can do is translate to lower case, then get a regular sort key: - { - result.assign(p1, p2); - typedef typename string_type::size_type size_type; - for(size_type i = 0; i < result.size(); ++i) - result[i] = this->tolower(result[i]); - result = this->transform(&*result.begin(), &*result.begin() + result.size()); - break; - } - case sort_fixed: - { - // get a regular sort key, and then truncate it: - result.assign(this->transform(p1, p2)); - result.erase(this->m_collate_delim); - break; - } - case sort_delim: - // get a regular sort key, and then truncate everything after the delim: - result.assign(this->transform(p1, p2)); - std::size_t i; - for(i = 0; i < result.size(); ++i) - { - if(result[i] == m_collate_delim) - break; - } - result.erase(i); - break; - } - if(result.empty()) - result = string_type(1, charT(0)); - return result; -} - -template <class charT> -typename w32_regex_traits_implementation<charT>::string_type - w32_regex_traits_implementation<charT>::lookup_collatename(const charT* p1, const charT* p2) const -{ - typedef typename std::map<string_type, string_type>::const_iterator iter_type; - if(m_custom_collate_names.size()) - { - iter_type pos = m_custom_collate_names.find(string_type(p1, p2)); - if(pos != m_custom_collate_names.end()) - return pos->second; - } -#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\ - && !BOOST_WORKAROUND(BOOST_BORLANDC, <= 0x0551) - std::string name(p1, p2); -#else - std::string name; - const charT* p0 = p1; - while(p0 != p2) - name.append(1, char(*p0++)); -#endif - name = lookup_default_collate_name(name); -#if !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)\ - && !BOOST_WORKAROUND(BOOST_BORLANDC, <= 0x0551) - if(name.size()) - return string_type(name.begin(), name.end()); -#else - if(name.size()) - { - string_type result; - typedef std::string::const_iterator iter; - iter b = name.begin(); - iter e = name.end(); - while(b != e) - result.append(1, charT(*b++)); - return result; - } -#endif - if(p2 - p1 == 1) - return string_type(1, *p1); - return string_type(); -} - -template <class charT> -w32_regex_traits_implementation<charT>::w32_regex_traits_implementation(::boost::BOOST_REGEX_DETAIL_NS::lcid_type l) -: w32_regex_traits_char_layer<charT>(l) -{ - cat_type cat; - std::string cat_name(w32_regex_traits<charT>::get_catalog_name()); - if(cat_name.size()) - { - cat = ::boost::BOOST_REGEX_DETAIL_NS::w32_cat_open(cat_name); - if(!cat) - { - std::string m("Unable to open message catalog: "); - std::runtime_error err(m + cat_name); - boost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(err); - } - } - // - // if we have a valid catalog then load our messages: - // - if(cat) - { - // - // Error messages: - // - for(boost::regex_constants::error_type i = static_cast<boost::regex_constants::error_type>(0); - i <= boost::regex_constants::error_unknown; - i = static_cast<boost::regex_constants::error_type>(i + 1)) - { - const char* p = get_default_error_string(i); - string_type default_message; - while(*p) - { - default_message.append(1, static_cast<charT>(*p)); - ++p; - } - string_type s = ::boost::BOOST_REGEX_DETAIL_NS::w32_cat_get(cat, this->m_locale, i+200, default_message); - std::string result; - for(std::string::size_type j = 0; j < s.size(); ++j) - { - result.append(1, static_cast<char>(s[j])); - } - m_error_strings[i] = result; - } - // - // Custom class names: - // - static const char_class_type masks[14] = - { - 0x0104u, // C1_ALPHA | C1_DIGIT - 0x0100u, // C1_ALPHA - 0x0020u, // C1_CNTRL - 0x0004u, // C1_DIGIT - (~(0x0020u|0x0008u) & 0x01ffu) | 0x0400u, // not C1_CNTRL or C1_SPACE - 0x0002u, // C1_LOWER - (~0x0020u & 0x01ffu) | 0x0400, // not C1_CNTRL - 0x0010u, // C1_PUNCT - 0x0008u, // C1_SPACE - 0x0001u, // C1_UPPER - 0x0080u, // C1_XDIGIT - 0x0040u, // C1_BLANK - w32_regex_traits_implementation<charT>::mask_word, - w32_regex_traits_implementation<charT>::mask_unicode, - }; - static const string_type null_string; - for(unsigned int j = 0; j <= 13; ++j) - { - string_type s(::boost::BOOST_REGEX_DETAIL_NS::w32_cat_get(cat, this->m_locale, j+300, null_string)); - if(s.size()) - this->m_custom_class_names[s] = masks[j]; - } - } - // - // get the collation format used by m_pcollate: - // - m_collate_type = BOOST_REGEX_DETAIL_NS::find_sort_syntax(this, &m_collate_delim); -} - -template <class charT> -typename w32_regex_traits_implementation<charT>::char_class_type - w32_regex_traits_implementation<charT>::lookup_classname_imp(const charT* p1, const charT* p2) const -{ - static const char_class_type masks[22] = - { - 0, - 0x0104u, // C1_ALPHA | C1_DIGIT - 0x0100u, // C1_ALPHA - 0x0040u, // C1_BLANK - 0x0020u, // C1_CNTRL - 0x0004u, // C1_DIGIT - 0x0004u, // C1_DIGIT - (~(0x0020u|0x0008u|0x0040) & 0x01ffu) | 0x0400u, // not C1_CNTRL or C1_SPACE or C1_BLANK - w32_regex_traits_implementation<charT>::mask_horizontal, - 0x0002u, // C1_LOWER - 0x0002u, // C1_LOWER - (~0x0020u & 0x01ffu) | 0x0400, // not C1_CNTRL - 0x0010u, // C1_PUNCT - 0x0008u, // C1_SPACE - 0x0008u, // C1_SPACE - 0x0001u, // C1_UPPER - w32_regex_traits_implementation<charT>::mask_unicode, - 0x0001u, // C1_UPPER - w32_regex_traits_implementation<charT>::mask_vertical, - 0x0104u | w32_regex_traits_implementation<charT>::mask_word, - 0x0104u | w32_regex_traits_implementation<charT>::mask_word, - 0x0080u, // C1_XDIGIT - }; - if(m_custom_class_names.size()) - { - typedef typename std::map<std::basic_string<charT>, char_class_type>::const_iterator map_iter; - map_iter pos = m_custom_class_names.find(string_type(p1, p2)); - if(pos != m_custom_class_names.end()) - return pos->second; - } - std::size_t state_id = 1u + (std::size_t)BOOST_REGEX_DETAIL_NS::get_default_class_id(p1, p2); - if(state_id < sizeof(masks) / sizeof(masks[0])) - return masks[state_id]; - return masks[0]; -} - - -template <class charT> -boost::shared_ptr<const w32_regex_traits_implementation<charT> > create_w32_regex_traits(::boost::BOOST_REGEX_DETAIL_NS::lcid_type l) -{ - // TODO: create a cache for previously constructed objects. - return boost::object_cache< ::boost::BOOST_REGEX_DETAIL_NS::lcid_type, w32_regex_traits_implementation<charT> >::get(l, 5); -} - -} // BOOST_REGEX_DETAIL_NS - -template <class charT> -class w32_regex_traits -{ -public: - typedef charT char_type; - typedef std::size_t size_type; - typedef std::basic_string<char_type> string_type; - typedef ::boost::BOOST_REGEX_DETAIL_NS::lcid_type locale_type; - typedef boost::uint_least32_t char_class_type; - - struct boost_extensions_tag{}; - - w32_regex_traits() - : m_pimpl(BOOST_REGEX_DETAIL_NS::create_w32_regex_traits<charT>(::boost::BOOST_REGEX_DETAIL_NS::w32_get_default_locale())) - { } - static size_type length(const char_type* p) - { - return std::char_traits<charT>::length(p); - } - regex_constants::syntax_type syntax_type(charT c)const - { - return m_pimpl->syntax_type(c); - } - regex_constants::escape_syntax_type escape_syntax_type(charT c) const - { - return m_pimpl->escape_syntax_type(c); - } - charT translate(charT c) const - { - return c; - } - charT translate_nocase(charT c) const - { - return this->m_pimpl->tolower(c); - } - charT translate(charT c, bool icase) const - { - return icase ? this->m_pimpl->tolower(c) : c; - } - charT tolower(charT c) const - { - return this->m_pimpl->tolower(c); - } - charT toupper(charT c) const - { - return ::boost::BOOST_REGEX_DETAIL_NS::w32_toupper(c, this->m_pimpl->m_locale); - } - string_type transform(const charT* p1, const charT* p2) const - { - return ::boost::BOOST_REGEX_DETAIL_NS::w32_transform(this->m_pimpl->m_locale, p1, p2); - } - string_type transform_primary(const charT* p1, const charT* p2) const - { - return m_pimpl->transform_primary(p1, p2); - } - char_class_type lookup_classname(const charT* p1, const charT* p2) const - { - return m_pimpl->lookup_classname(p1, p2); - } - string_type lookup_collatename(const charT* p1, const charT* p2) const - { - return m_pimpl->lookup_collatename(p1, p2); - } - bool isctype(charT c, char_class_type f) const - { - if((f & BOOST_REGEX_DETAIL_NS::w32_regex_traits_implementation<charT>::mask_base) - && (this->m_pimpl->isctype(f & BOOST_REGEX_DETAIL_NS::w32_regex_traits_implementation<charT>::mask_base, c))) - return true; - else if((f & BOOST_REGEX_DETAIL_NS::w32_regex_traits_implementation<charT>::mask_unicode) && BOOST_REGEX_DETAIL_NS::is_extended(c)) - return true; - else if((f & BOOST_REGEX_DETAIL_NS::w32_regex_traits_implementation<charT>::mask_word) && (c == '_')) - return true; - else if((f & BOOST_REGEX_DETAIL_NS::w32_regex_traits_implementation<charT>::mask_vertical) - && (::boost::BOOST_REGEX_DETAIL_NS::is_separator(c) || (c == '\v'))) - return true; - else if((f & BOOST_REGEX_DETAIL_NS::w32_regex_traits_implementation<charT>::mask_horizontal) - && this->isctype(c, 0x0008u) && !this->isctype(c, BOOST_REGEX_DETAIL_NS::w32_regex_traits_implementation<charT>::mask_vertical)) - return true; - return false; - } - boost::intmax_t toi(const charT*& p1, const charT* p2, int radix)const - { - return ::boost::BOOST_REGEX_DETAIL_NS::global_toi(p1, p2, radix, *this); - } - int value(charT c, int radix)const - { - int result = (int)::boost::BOOST_REGEX_DETAIL_NS::global_value(c); - return result < radix ? result : -1; - } - locale_type imbue(locale_type l) - { - ::boost::BOOST_REGEX_DETAIL_NS::lcid_type result(getloc()); - m_pimpl = BOOST_REGEX_DETAIL_NS::create_w32_regex_traits<charT>(l); - return result; - } - locale_type getloc()const - { - return m_pimpl->m_locale; - } - std::string error_string(regex_constants::error_type n) const - { - return m_pimpl->error_string(n); - } - - // - // extension: - // set the name of the message catalog in use (defaults to "boost_regex"). - // - static std::string catalog_name(const std::string& name); - static std::string get_catalog_name(); - -private: - boost::shared_ptr<const BOOST_REGEX_DETAIL_NS::w32_regex_traits_implementation<charT> > m_pimpl; - // - // catalog name handler: - // - static std::string& get_catalog_name_inst(); - -#ifdef BOOST_HAS_THREADS - static static_mutex& get_mutex_inst(); -#endif -}; - -template <class charT> -std::string w32_regex_traits<charT>::catalog_name(const std::string& name) -{ -#ifdef BOOST_HAS_THREADS - static_mutex::scoped_lock lk(get_mutex_inst()); -#endif - std::string result(get_catalog_name_inst()); - get_catalog_name_inst() = name; - return result; -} - -template <class charT> -std::string& w32_regex_traits<charT>::get_catalog_name_inst() -{ - static std::string s_name; - return s_name; -} - -template <class charT> -std::string w32_regex_traits<charT>::get_catalog_name() -{ -#ifdef BOOST_HAS_THREADS - static_mutex::scoped_lock lk(get_mutex_inst()); -#endif - std::string result(get_catalog_name_inst()); - return result; -} - -#ifdef BOOST_HAS_THREADS -template <class charT> -static_mutex& w32_regex_traits<charT>::get_mutex_inst() -{ - static static_mutex s_mutex = BOOST_STATIC_MUTEX_INIT; - return s_mutex; -} -#endif - -namespace BOOST_REGEX_DETAIL_NS { - -#ifdef BOOST_NO_ANSI_APIS - inline UINT get_code_page_for_locale_id(lcid_type idx) - { - WCHAR code_page_string[7]; - if (::GetLocaleInfoW(idx, LOCALE_IDEFAULTANSICODEPAGE, code_page_string, 7) == 0) - return 0; - - return static_cast<UINT>(_wtol(code_page_string)); -} -#endif - - template <class U> - inline void w32_regex_traits_char_layer<char>::init() - { - // we need to start by initialising our syntax map so we know which - // character is used for which purpose: - std::memset(m_char_map, 0, sizeof(m_char_map)); - cat_type cat; - std::string cat_name(w32_regex_traits<char>::get_catalog_name()); - if (cat_name.size()) - { - cat = ::boost::BOOST_REGEX_DETAIL_NS::w32_cat_open(cat_name); - if (!cat) - { - std::string m("Unable to open message catalog: "); - std::runtime_error err(m + cat_name); - ::boost::BOOST_REGEX_DETAIL_NS::raise_runtime_error(err); - } - } - // - // if we have a valid catalog then load our messages: - // - if (cat) - { - for (regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i) - { - string_type mss = ::boost::BOOST_REGEX_DETAIL_NS::w32_cat_get(cat, this->m_locale, i, get_default_syntax(i)); - for (string_type::size_type j = 0; j < mss.size(); ++j) - { - m_char_map[static_cast<unsigned char>(mss[j])] = i; - } - } - } - else - { - for (regex_constants::syntax_type i = 1; i < regex_constants::syntax_max; ++i) - { - const char* ptr = get_default_syntax(i); - while (ptr && *ptr) - { - m_char_map[static_cast<unsigned char>(*ptr)] = i; - ++ptr; - } - } - } - // - // finish off by calculating our escape types: - // - unsigned char i = 'A'; - do - { - if (m_char_map[i] == 0) - { - if (::boost::BOOST_REGEX_DETAIL_NS::w32_is(this->m_locale, 0x0002u, (char)i)) - m_char_map[i] = regex_constants::escape_type_class; - else if (::boost::BOOST_REGEX_DETAIL_NS::w32_is(this->m_locale, 0x0001u, (char)i)) - m_char_map[i] = regex_constants::escape_type_not_class; - } - } while (0xFF != i++); - - // - // fill in lower case map: - // - char char_map[1 << CHAR_BIT]; - for (int ii = 0; ii < (1 << CHAR_BIT); ++ii) - char_map[ii] = static_cast<char>(ii); -#ifndef BOOST_NO_ANSI_APIS - int r = ::LCMapStringA(this->m_locale, LCMAP_LOWERCASE, char_map, 1 << CHAR_BIT, this->m_lower_map, 1 << CHAR_BIT); - BOOST_REGEX_ASSERT(r != 0); -#else - UINT code_page = get_code_page_for_locale_id(this->m_locale); - BOOST_REGEX_ASSERT(code_page != 0); - - WCHAR wide_char_map[1 << CHAR_BIT]; - int conv_r = ::MultiByteToWideChar(code_page, 0, char_map, 1 << CHAR_BIT, wide_char_map, 1 << CHAR_BIT); - BOOST_REGEX_ASSERT(conv_r != 0); - - WCHAR wide_lower_map[1 << CHAR_BIT]; - int r = ::LCMapStringW(this->m_locale, LCMAP_LOWERCASE, wide_char_map, 1 << CHAR_BIT, wide_lower_map, 1 << CHAR_BIT); - BOOST_REGEX_ASSERT(r != 0); - - conv_r = ::WideCharToMultiByte(code_page, 0, wide_lower_map, r, this->m_lower_map, 1 << CHAR_BIT, NULL, NULL); - BOOST_REGEX_ASSERT(conv_r != 0); -#endif - if (r < (1 << CHAR_BIT)) - { - // if we have multibyte characters then not all may have been given - // a lower case mapping: - for (int jj = r; jj < (1 << CHAR_BIT); ++jj) - this->m_lower_map[jj] = static_cast<char>(jj); - } - -#ifndef BOOST_NO_ANSI_APIS - r = ::GetStringTypeExA(this->m_locale, CT_CTYPE1, char_map, 1 << CHAR_BIT, this->m_type_map); -#else - r = ::GetStringTypeExW(this->m_locale, CT_CTYPE1, wide_char_map, 1 << CHAR_BIT, this->m_type_map); -#endif - BOOST_REGEX_ASSERT(0 != r); - } - - inline lcid_type BOOST_REGEX_CALL w32_get_default_locale() - { - return ::GetUserDefaultLCID(); - } - - inline bool BOOST_REGEX_CALL w32_is_lower(char c, lcid_type idx) - { -#ifndef BOOST_NO_ANSI_APIS - WORD mask; - if (::GetStringTypeExA(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_LOWER)) - return true; - return false; -#else - UINT code_page = get_code_page_for_locale_id(idx); - if (code_page == 0) - return false; - - WCHAR wide_c; - if (::MultiByteToWideChar(code_page, 0, &c, 1, &wide_c, 1) == 0) - return false; - - WORD mask; - if (::GetStringTypeExW(idx, CT_CTYPE1, &wide_c, 1, &mask) && (mask & C1_LOWER)) - return true; - return false; -#endif - } - - inline bool BOOST_REGEX_CALL w32_is_lower(wchar_t c, lcid_type idx) - { - WORD mask; - if (::GetStringTypeExW(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_LOWER)) - return true; - return false; - } - - inline bool BOOST_REGEX_CALL w32_is_upper(char c, lcid_type idx) - { -#ifndef BOOST_NO_ANSI_APIS - WORD mask; - if (::GetStringTypeExA(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_UPPER)) - return true; - return false; -#else - UINT code_page = get_code_page_for_locale_id(idx); - if (code_page == 0) - return false; - - WCHAR wide_c; - if (::MultiByteToWideChar(code_page, 0, &c, 1, &wide_c, 1) == 0) - return false; - - WORD mask; - if (::GetStringTypeExW(idx, CT_CTYPE1, &wide_c, 1, &mask) && (mask & C1_UPPER)) - return true; - return false; -#endif - } - - inline bool BOOST_REGEX_CALL w32_is_upper(wchar_t c, lcid_type idx) - { - WORD mask; - if (::GetStringTypeExW(idx, CT_CTYPE1, &c, 1, &mask) && (mask & C1_UPPER)) - return true; - return false; - } - - inline void free_module(void* mod) - { - ::FreeLibrary(static_cast<HMODULE>(mod)); - } - - inline cat_type BOOST_REGEX_CALL w32_cat_open(const std::string& name) - { -#ifndef BOOST_NO_ANSI_APIS - cat_type result(::LoadLibraryA(name.c_str()), &free_module); - return result; -#else - LPWSTR wide_name = (LPWSTR)_alloca((name.size() + 1) * sizeof(WCHAR)); - if (::MultiByteToWideChar(CP_ACP, 0, name.c_str(), name.size(), wide_name, name.size() + 1) == 0) - return cat_type(); - - cat_type result(::LoadLibraryW(wide_name), &free_module); - return result; -#endif - } - - inline std::string BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, lcid_type, int i, const std::string& def) - { -#ifndef BOOST_NO_ANSI_APIS - char buf[256]; - if (0 == ::LoadStringA( - static_cast<HMODULE>(cat.get()), - i, - buf, - 256 - )) - { - return def; - } -#else - WCHAR wbuf[256]; - int r = ::LoadStringW( - static_cast<HMODULE>(cat.get()), - i, - wbuf, - 256 - ); - if (r == 0) - return def; - - - int buf_size = 1 + ::WideCharToMultiByte(CP_ACP, 0, wbuf, r, NULL, 0, NULL, NULL); - LPSTR buf = (LPSTR)_alloca(buf_size); - if (::WideCharToMultiByte(CP_ACP, 0, wbuf, r, buf, buf_size, NULL, NULL) == 0) - return def; // failed conversion. -#endif - return std::string(buf); - } - -#ifndef BOOST_NO_WREGEX - inline std::wstring BOOST_REGEX_CALL w32_cat_get(const cat_type& cat, lcid_type, int i, const std::wstring& def) - { - wchar_t buf[256]; - if (0 == ::LoadStringW( - static_cast<HMODULE>(cat.get()), - i, - buf, - 256 - )) - { - return def; - } - return std::wstring(buf); - } -#endif - inline std::string BOOST_REGEX_CALL w32_transform(lcid_type idx, const char* p1, const char* p2) - { -#ifndef BOOST_NO_ANSI_APIS - int bytes = ::LCMapStringA( - idx, // locale identifier - LCMAP_SORTKEY, // mapping transformation type - p1, // source string - static_cast<int>(p2 - p1), // number of characters in source string - 0, // destination buffer - 0 // size of destination buffer - ); - if (!bytes) - return std::string(p1, p2); - std::string result(++bytes, '\0'); - bytes = ::LCMapStringA( - idx, // locale identifier - LCMAP_SORTKEY, // mapping transformation type - p1, // source string - static_cast<int>(p2 - p1), // number of characters in source string - &*result.begin(), // destination buffer - bytes // size of destination buffer - ); -#else - UINT code_page = get_code_page_for_locale_id(idx); - if (code_page == 0) - return std::string(p1, p2); - - int src_len = static_cast<int>(p2 - p1); - LPWSTR wide_p1 = (LPWSTR)_alloca((src_len + 1) * 2); - if (::MultiByteToWideChar(code_page, 0, p1, src_len, wide_p1, src_len + 1) == 0) - return std::string(p1, p2); - - int bytes = ::LCMapStringW( - idx, // locale identifier - LCMAP_SORTKEY, // mapping transformation type - wide_p1, // source string - src_len, // number of characters in source string - 0, // destination buffer - 0 // size of destination buffer - ); - if (!bytes) - return std::string(p1, p2); - std::string result(++bytes, '\0'); - bytes = ::LCMapStringW( - idx, // locale identifier - LCMAP_SORTKEY, // mapping transformation type - wide_p1, // source string - src_len, // number of characters in source string - (LPWSTR) & *result.begin(), // destination buffer - bytes // size of destination buffer - ); -#endif - if (bytes > static_cast<int>(result.size())) - return std::string(p1, p2); - while (result.size() && result[result.size() - 1] == '\0') - { - result.erase(result.size() - 1); - } - return result; - } - -#ifndef BOOST_NO_WREGEX - inline std::wstring BOOST_REGEX_CALL w32_transform(lcid_type idx, const wchar_t* p1, const wchar_t* p2) - { - int bytes = ::LCMapStringW( - idx, // locale identifier - LCMAP_SORTKEY, // mapping transformation type - p1, // source string - static_cast<int>(p2 - p1), // number of characters in source string - 0, // destination buffer - 0 // size of destination buffer - ); - if (!bytes) - return std::wstring(p1, p2); - std::string result(++bytes, '\0'); - bytes = ::LCMapStringW( - idx, // locale identifier - LCMAP_SORTKEY, // mapping transformation type - p1, // source string - static_cast<int>(p2 - p1), // number of characters in source string - reinterpret_cast<wchar_t*>(&*result.begin()), // destination buffer *of bytes* - bytes // size of destination buffer - ); - if (bytes > static_cast<int>(result.size())) - return std::wstring(p1, p2); - while (result.size() && result[result.size() - 1] == L'\0') - { - result.erase(result.size() - 1); - } - std::wstring r2; - for (std::string::size_type i = 0; i < result.size(); ++i) - r2.append(1, static_cast<wchar_t>(static_cast<unsigned char>(result[i]))); - return r2; - } -#endif - inline char BOOST_REGEX_CALL w32_tolower(char c, lcid_type idx) - { - char result[2]; -#ifndef BOOST_NO_ANSI_APIS - int b = ::LCMapStringA( - idx, // locale identifier - LCMAP_LOWERCASE, // mapping transformation type - &c, // source string - 1, // number of characters in source string - result, // destination buffer - 1); // size of destination buffer - if (b == 0) - return c; -#else - UINT code_page = get_code_page_for_locale_id(idx); - if (code_page == 0) - return c; - - WCHAR wide_c; - if (::MultiByteToWideChar(code_page, 0, &c, 1, &wide_c, 1) == 0) - return c; - - WCHAR wide_result; - int b = ::LCMapStringW( - idx, // locale identifier - LCMAP_LOWERCASE, // mapping transformation type - &wide_c, // source string - 1, // number of characters in source string - &wide_result, // destination buffer - 1); // size of destination buffer - if (b == 0) - return c; - - if (::WideCharToMultiByte(code_page, 0, &wide_result, 1, result, 2, NULL, NULL) == 0) - return c; // No single byte lower case equivalent available -#endif - return result[0]; - } - -#ifndef BOOST_NO_WREGEX - inline wchar_t BOOST_REGEX_CALL w32_tolower(wchar_t c, lcid_type idx) - { - wchar_t result[2]; - int b = ::LCMapStringW( - idx, // locale identifier - LCMAP_LOWERCASE, // mapping transformation type - &c, // source string - 1, // number of characters in source string - result, // destination buffer - 1); // size of destination buffer - if (b == 0) - return c; - return result[0]; - } -#endif - inline char BOOST_REGEX_CALL w32_toupper(char c, lcid_type idx) - { - char result[2]; -#ifndef BOOST_NO_ANSI_APIS - int b = ::LCMapStringA( - idx, // locale identifier - LCMAP_UPPERCASE, // mapping transformation type - &c, // source string - 1, // number of characters in source string - result, // destination buffer - 1); // size of destination buffer - if (b == 0) - return c; -#else - UINT code_page = get_code_page_for_locale_id(idx); - if (code_page == 0) - return c; - - WCHAR wide_c; - if (::MultiByteToWideChar(code_page, 0, &c, 1, &wide_c, 1) == 0) - return c; - - WCHAR wide_result; - int b = ::LCMapStringW( - idx, // locale identifier - LCMAP_UPPERCASE, // mapping transformation type - &wide_c, // source string - 1, // number of characters in source string - &wide_result, // destination buffer - 1); // size of destination buffer - if (b == 0) - return c; - - if (::WideCharToMultiByte(code_page, 0, &wide_result, 1, result, 2, NULL, NULL) == 0) - return c; // No single byte upper case equivalent available. -#endif - return result[0]; - } - -#ifndef BOOST_NO_WREGEX - inline wchar_t BOOST_REGEX_CALL w32_toupper(wchar_t c, lcid_type idx) - { - wchar_t result[2]; - int b = ::LCMapStringW( - idx, // locale identifier - LCMAP_UPPERCASE, // mapping transformation type - &c, // source string - 1, // number of characters in source string - result, // destination buffer - 1); // size of destination buffer - if (b == 0) - return c; - return result[0]; - } -#endif - inline bool BOOST_REGEX_CALL w32_is(lcid_type idx, boost::uint32_t m, char c) - { - WORD mask; -#ifndef BOOST_NO_ANSI_APIS - if (::GetStringTypeExA(idx, CT_CTYPE1, &c, 1, &mask) && (mask & m & w32_regex_traits_implementation<char>::mask_base)) - return true; -#else - UINT code_page = get_code_page_for_locale_id(idx); - if (code_page == 0) - return false; - - WCHAR wide_c; - if (::MultiByteToWideChar(code_page, 0, &c, 1, &wide_c, 1) == 0) - return false; - - if (::GetStringTypeExW(idx, CT_CTYPE1, &wide_c, 1, &mask) && (mask & m & w32_regex_traits_implementation<char>::mask_base)) - return true; -#endif - if ((m & w32_regex_traits_implementation<char>::mask_word) && (c == '_')) - return true; - return false; - } - -#ifndef BOOST_NO_WREGEX - inline bool BOOST_REGEX_CALL w32_is(lcid_type idx, boost::uint32_t m, wchar_t c) - { - WORD mask; - if (::GetStringTypeExW(idx, CT_CTYPE1, &c, 1, &mask) && (mask & m & w32_regex_traits_implementation<wchar_t>::mask_base)) - return true; - if ((m & w32_regex_traits_implementation<wchar_t>::mask_word) && (c == '_')) - return true; - if ((m & w32_regex_traits_implementation<wchar_t>::mask_unicode) && (c > 0xff)) - return true; - return false; - } -#endif - -} // BOOST_REGEX_DETAIL_NS - - -} // boost - -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#ifdef BOOST_MSVC -#pragma warning(push) -#pragma warning(disable: 4103) -#endif -#ifdef BOOST_HAS_ABI_HEADERS -# include BOOST_ABI_SUFFIX -#endif -#ifdef BOOST_MSVC -#pragma warning(pop) -#endif - -#endif // BOOST_REGEX_NO_WIN32_LOCALE - -#endif diff --git a/contrib/restricted/boost/regex/include/boost/regex_fwd.hpp b/contrib/restricted/boost/regex/include/boost/regex_fwd.hpp index 99371b8cae..5efd7b35d0 100644 --- a/contrib/restricted/boost/regex/include/boost/regex_fwd.hpp +++ b/contrib/restricted/boost/regex/include/boost/regex_fwd.hpp @@ -25,7 +25,7 @@ #endif #ifdef BOOST_REGEX_CXX03 -#include <boost/regex/v4/regex_fwd.hpp> +#error #include <boost/regex/v4/regex_fwd.hpp> #else #include <boost/regex/v5/regex_fwd.hpp> #endif diff --git a/contrib/restricted/boost/regex/src/posix_api.cpp b/contrib/restricted/boost/regex/src/posix_api.cpp index e30f9d8e1e..59f16ebcca 100644 --- a/contrib/restricted/boost/regex/src/posix_api.cpp +++ b/contrib/restricted/boost/regex/src/posix_api.cpp @@ -27,7 +27,7 @@ #endif #ifndef BOOST_REGEX_STANDALONE -#include <boost/core/snprintf.hpp> +#error #include <boost/core/snprintf.hpp> #else namespace boost { namespace core { using std::snprintf; } } #endif diff --git a/contrib/restricted/boost/regex/src/regex.cpp b/contrib/restricted/boost/regex/src/regex.cpp index 2d9239553c..8c251f60e1 100644 --- a/contrib/restricted/boost/regex/src/regex.cpp +++ b/contrib/restricted/boost/regex/src/regex.cpp @@ -36,7 +36,7 @@ #include <windows.h> #include <stdexcept> #include <boost/regex/pattern_except.hpp> -#include <boost/regex/v4/protected_call.hpp> +#error #include <boost/regex/v4/protected_call.hpp> namespace boost { namespace BOOST_REGEX_DETAIL_NS { diff --git a/contrib/restricted/boost/regex/src/static_mutex.cpp b/contrib/restricted/boost/regex/src/static_mutex.cpp index b238b44a41..2c6d4b0c1f 100644 --- a/contrib/restricted/boost/regex/src/static_mutex.cpp +++ b/contrib/restricted/boost/regex/src/static_mutex.cpp @@ -35,7 +35,7 @@ # define WIN32_LEAN_AND_MEAN #endif #include <windows.h> -#include <boost/static_assert.hpp> +#error #include <boost/static_assert.hpp> #endif diff --git a/contrib/restricted/boost/regex/src/wide_posix_api.cpp b/contrib/restricted/boost/regex/src/wide_posix_api.cpp index 993464f86b..ae95025131 100644 --- a/contrib/restricted/boost/regex/src/wide_posix_api.cpp +++ b/contrib/restricted/boost/regex/src/wide_posix_api.cpp @@ -26,7 +26,7 @@ #include <boost/cregex.hpp> #ifndef BOOST_REGEX_STANDALONE -#include <boost/core/snprintf.hpp> +#error #include <boost/core/snprintf.hpp> #else namespace boost { namespace core { using std::swprintf; } } #endif diff --git a/contrib/restricted/boost/regex/ya.make b/contrib/restricted/boost/regex/ya.make index a9f0211ed8..956cc1dd53 100644 --- a/contrib/restricted/boost/regex/ya.make +++ b/contrib/restricted/boost/regex/ya.make @@ -13,17 +13,9 @@ ORIGINAL_SOURCE(https://github.com/boostorg/regex/archive/boost-1.87.0.tar.gz) PEERDIR( contrib/libs/icu contrib/restricted/boost/assert - contrib/restricted/boost/concept_check contrib/restricted/boost/config - contrib/restricted/boost/container_hash - contrib/restricted/boost/core - contrib/restricted/boost/integer - contrib/restricted/boost/mpl contrib/restricted/boost/predef - contrib/restricted/boost/smart_ptr - contrib/restricted/boost/static_assert contrib/restricted/boost/throw_exception - contrib/restricted/boost/type_traits ) ADDINCL( @@ -37,6 +29,7 @@ NO_UTIL() CFLAGS( -DBOOST_HAS_ICU -DBOOST_NO_CXX98_BINDERS + -DBOOST_REGEX_STANDALONE ) IF (DYNAMIC_BOOST) diff --git a/contrib/tools/python3/.yandex_meta/devtools.licenses.report b/contrib/tools/python3/.yandex_meta/devtools.licenses.report index 017cad0d0c..f3d1534cd2 100644 --- a/contrib/tools/python3/.yandex_meta/devtools.licenses.report +++ b/contrib/tools/python3/.yandex_meta/devtools.licenses.report @@ -464,7 +464,7 @@ BELONGS ya.make Match type : TAG Links : http://docs.python.org/license.html, http://spdx.org/licenses/Python-2.0, https://spdx.org/licenses/Python-2.0 Files with this license: - Python/deepfreeze/deepfreeze.c [127606:127606] + Python/deepfreeze/deepfreeze.c [127644:127644] KEEP LicenseRef-scancode-warranty-disclaimer 50a3e16ca7c1aaf79e69114d558b25a0 BELONGS Lib/ya.make @@ -1201,7 +1201,7 @@ BELONGS Lib/ya.make Match type : TAG Links : http://docs.python.org/license.html, http://spdx.org/licenses/Python-2.0, https://spdx.org/licenses/Python-2.0 Files with this license: - Lib/site.py [442:442] + Lib/site.py [443:443] KEEP LicenseRef-scancode-unknown-license-reference f488ff2759d4446215ccf983a020a815 BELONGS Lib/ya.make diff --git a/contrib/tools/python3/.yandex_meta/override.nix b/contrib/tools/python3/.yandex_meta/override.nix index 38414e7229..faea16f445 100644 --- a/contrib/tools/python3/.yandex_meta/override.nix +++ b/contrib/tools/python3/.yandex_meta/override.nix @@ -1,11 +1,11 @@ pkgs: attrs: with pkgs; with attrs; rec { - version = "3.12.7"; + version = "3.12.8"; src = fetchFromGitHub { owner = "python"; repo = "cpython"; rev = "v${version}"; - hash = "sha256-do8N5njMyYapDRyjDWYsIifRlhJKVumSAE1HrWWHvdM="; + hash = "sha256-1Z2SMEut5YY9tTtrzPpmXcsIQKw5MGcGI4l0ysJbg28="; }; patches = []; diff --git a/contrib/tools/python3/Include/internal/pycore_object_state.h b/contrib/tools/python3/Include/internal/pycore_object_state.h index 65feb5af96..6e07b1a01b 100644 --- a/contrib/tools/python3/Include/internal/pycore_object_state.h +++ b/contrib/tools/python3/Include/internal/pycore_object_state.h @@ -24,7 +24,13 @@ struct _py_object_state { * together via the _ob_prev and _ob_next members of a PyObject, which * exist only in a Py_TRACE_REFS build. */ - PyObject refchain; + PyObject *refchain; + /* In most cases, refchain points to _refchain_obj. + * In sub-interpreters that share objmalloc state with the main interp, + * refchain points to the main interpreter's _refchain_obj, and their own + * _refchain_obj is unused. + */ + PyObject _refchain_obj; #endif int _not_used; }; diff --git a/contrib/tools/python3/Include/internal/pycore_runtime_init.h b/contrib/tools/python3/Include/internal/pycore_runtime_init.h index e5f9e17eff..ad90ea680a 100644 --- a/contrib/tools/python3/Include/internal/pycore_runtime_init.h +++ b/contrib/tools/python3/Include/internal/pycore_runtime_init.h @@ -132,15 +132,8 @@ extern PyTypeObject _PyExc_MemoryError; .context_ver = 1, \ } -#ifdef Py_TRACE_REFS -# define _py_object_state_INIT(INTERP) \ - { \ - .refchain = {&INTERP.object_state.refchain, &INTERP.object_state.refchain}, \ - } -#else # define _py_object_state_INIT(INTERP) \ { 0 } -#endif // global objects diff --git a/contrib/tools/python3/Include/internal/pycore_typeobject.h b/contrib/tools/python3/Include/internal/pycore_typeobject.h index 63f76fc55c..4fdbc91a1b 100644 --- a/contrib/tools/python3/Include/internal/pycore_typeobject.h +++ b/contrib/tools/python3/Include/internal/pycore_typeobject.h @@ -143,6 +143,8 @@ PyAPI_DATA(PyTypeObject) _PyBufferWrapper_Type; PyObject * _PySuper_Lookup(PyTypeObject *su_type, PyObject *su_obj, PyObject *name, int *meth_found); +extern int _PyType_AddMethod(PyTypeObject *, PyMethodDef *); + #ifdef __cplusplus } #endif diff --git a/contrib/tools/python3/Include/internal/pycore_unicodeobject.h b/contrib/tools/python3/Include/internal/pycore_unicodeobject.h index 44eccdea55..cecdabe415 100644 --- a/contrib/tools/python3/Include/internal/pycore_unicodeobject.h +++ b/contrib/tools/python3/Include/internal/pycore_unicodeobject.h @@ -76,6 +76,9 @@ struct _Py_unicode_state { extern void _PyUnicode_ClearInterned(PyInterpreterState *interp); +// Like PyUnicode_AsUTF8(), but check for embedded null characters. +extern const char* _PyUnicode_AsUTF8NoNUL(PyObject *); + #ifdef __cplusplus } diff --git a/contrib/tools/python3/Include/patchlevel.h b/contrib/tools/python3/Include/patchlevel.h index 4f0c8fb1aa..6c597837da 100644 --- a/contrib/tools/python3/Include/patchlevel.h +++ b/contrib/tools/python3/Include/patchlevel.h @@ -18,12 +18,12 @@ /*--start constants--*/ #define PY_MAJOR_VERSION 3 #define PY_MINOR_VERSION 12 -#define PY_MICRO_VERSION 7 +#define PY_MICRO_VERSION 8 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL #define PY_RELEASE_SERIAL 0 /* Version as a string */ -#define PY_VERSION "3.12.7" +#define PY_VERSION "3.12.8" /*--end constants--*/ /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. diff --git a/contrib/tools/python3/Lib/_collections_abc.py b/contrib/tools/python3/Lib/_collections_abc.py index 601107d2d8..09745658de 100644 --- a/contrib/tools/python3/Lib/_collections_abc.py +++ b/contrib/tools/python3/Lib/_collections_abc.py @@ -973,7 +973,7 @@ class MutableMapping(Mapping): def update(self, other=(), /, **kwds): ''' D.update([E, ]**F) -> None. Update D from mapping/iterable E and F. - If E present and has a .keys() method, does: for k in E: D[k] = E[k] + If E present and has a .keys() method, does: for k in E.keys(): D[k] = E[k] If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v In either case, this is followed by: for k, v in F.items(): D[k] = v ''' diff --git a/contrib/tools/python3/Lib/_strptime.py b/contrib/tools/python3/Lib/_strptime.py index 798cf9f9d3..dfd2bc5d8b 100644 --- a/contrib/tools/python3/Lib/_strptime.py +++ b/contrib/tools/python3/Lib/_strptime.py @@ -14,6 +14,7 @@ import time import locale import calendar from re import compile as re_compile +from re import sub as re_sub from re import IGNORECASE from re import escape as re_escape from datetime import (date as datetime_date, @@ -27,6 +28,18 @@ def _getlang(): # Figure out what the current language is set to. return locale.getlocale(locale.LC_TIME) +def _findall(haystack, needle): + # Find all positions of needle in haystack. + if not needle: + return + i = 0 + while True: + i = haystack.find(needle, i) + if i < 0: + break + yield i + i += len(needle) + class LocaleTime(object): """Stores and handles locale-specific information related to time. @@ -101,7 +114,8 @@ class LocaleTime(object): am_pm = [] for hour in (1, 22): time_tuple = time.struct_time((1999,3,17,hour,44,55,2,76,0)) - am_pm.append(time.strftime("%p", time_tuple).lower()) + # br_FR has AM/PM info (' ',' '). + am_pm.append(time.strftime("%p", time_tuple).lower().strip()) self.am_pm = am_pm def __calc_date_time(self): @@ -113,42 +127,130 @@ class LocaleTime(object): # values within the format string is very important; it eliminates # possible ambiguity for what something represents. time_tuple = time.struct_time((1999,3,17,22,44,55,2,76,0)) - date_time = [None, None, None] - date_time[0] = time.strftime("%c", time_tuple).lower() - date_time[1] = time.strftime("%x", time_tuple).lower() - date_time[2] = time.strftime("%X", time_tuple).lower() - replacement_pairs = [('%', '%%'), (self.f_weekday[2], '%A'), - (self.f_month[3], '%B'), (self.a_weekday[2], '%a'), - (self.a_month[3], '%b'), (self.am_pm[1], '%p'), - ('1999', '%Y'), ('99', '%y'), ('22', '%H'), - ('44', '%M'), ('55', '%S'), ('76', '%j'), - ('17', '%d'), ('03', '%m'), ('3', '%m'), - # '3' needed for when no leading zero. - ('2', '%w'), ('10', '%I')] - replacement_pairs.extend([(tz, "%Z") for tz_values in self.timezone - for tz in tz_values]) - for offset,directive in ((0,'%c'), (1,'%x'), (2,'%X')): - current_format = date_time[offset] - for old, new in replacement_pairs: + time_tuple2 = time.struct_time((1999,1,3,1,1,1,6,3,0)) + replacement_pairs = [ + ('1999', '%Y'), ('99', '%y'), ('22', '%H'), + ('44', '%M'), ('55', '%S'), ('76', '%j'), + ('17', '%d'), ('03', '%m'), ('3', '%m'), + # '3' needed for when no leading zero. + ('2', '%w'), ('10', '%I'), + # Non-ASCII digits + ('\u0661\u0669\u0669\u0669', '%Y'), + ('\u0669\u0669', '%Oy'), + ('\u0662\u0662', '%OH'), + ('\u0664\u0664', '%OM'), + ('\u0665\u0665', '%OS'), + ('\u0661\u0667', '%Od'), + ('\u0660\u0663', '%Om'), + ('\u0663', '%Om'), + ('\u0662', '%Ow'), + ('\u0661\u0660', '%OI'), + ] + date_time = [] + for directive in ('%c', '%x', '%X'): + current_format = time.strftime(directive, time_tuple).lower() + current_format = current_format.replace('%', '%%') + # The month and the day of the week formats are treated specially + # because of a possible ambiguity in some locales where the full + # and abbreviated names are equal or names of different types + # are equal. See doc of __find_month_format for more details. + lst, fmt = self.__find_weekday_format(directive) + if lst: + current_format = current_format.replace(lst[2], fmt, 1) + lst, fmt = self.__find_month_format(directive) + if lst: + current_format = current_format.replace(lst[3], fmt, 1) + if self.am_pm[1]: # Must deal with possible lack of locale info # manifesting itself as the empty string (e.g., Swedish's # lack of AM/PM info) or a platform returning a tuple of empty # strings (e.g., MacOS 9 having timezone as ('','')). - if old: - current_format = current_format.replace(old, new) + current_format = current_format.replace(self.am_pm[1], '%p') + for tz_values in self.timezone: + for tz in tz_values: + if tz: + current_format = current_format.replace(tz, "%Z") + # Transform all non-ASCII digits to digits in range U+0660 to U+0669. + current_format = re_sub(r'\d(?<![0-9])', + lambda m: chr(0x0660 + int(m[0])), + current_format) + for old, new in replacement_pairs: + current_format = current_format.replace(old, new) # If %W is used, then Sunday, 2005-01-03 will fall on week 0 since # 2005-01-03 occurs before the first Monday of the year. Otherwise # %U is used. - time_tuple = time.struct_time((1999,1,3,1,1,1,6,3,0)) - if '00' in time.strftime(directive, time_tuple): + if '00' in time.strftime(directive, time_tuple2): U_W = '%W' else: U_W = '%U' - date_time[offset] = current_format.replace('11', U_W) + current_format = current_format.replace('11', U_W) + date_time.append(current_format) self.LC_date_time = date_time[0] self.LC_date = date_time[1] self.LC_time = date_time[2] + def __find_month_format(self, directive): + """Find the month format appropriate for the current locale. + + In some locales (for example French and Hebrew), the default month + used in __calc_date_time has the same name in full and abbreviated + form. Also, the month name can by accident match other part of the + representation: the day of the week name (for example in Morisyen) + or the month number (for example in Japanese). Thus, cycle months + of the year and find all positions that match the month name for + each month, If no common positions are found, the representation + does not use the month name. + """ + full_indices = abbr_indices = None + for m in range(1, 13): + time_tuple = time.struct_time((1999, m, 17, 22, 44, 55, 2, 76, 0)) + datetime = time.strftime(directive, time_tuple).lower() + indices = set(_findall(datetime, self.f_month[m])) + if full_indices is None: + full_indices = indices + else: + full_indices &= indices + indices = set(_findall(datetime, self.a_month[m])) + if abbr_indices is None: + abbr_indices = indices + else: + abbr_indices &= indices + if not full_indices and not abbr_indices: + return None, None + if full_indices: + return self.f_month, '%B' + if abbr_indices: + return self.a_month, '%b' + return None, None + + def __find_weekday_format(self, directive): + """Find the day of the week format appropriate for the current locale. + + Similar to __find_month_format(). + """ + full_indices = abbr_indices = None + for wd in range(7): + time_tuple = time.struct_time((1999, 3, 17, 22, 44, 55, wd, 76, 0)) + datetime = time.strftime(directive, time_tuple).lower() + indices = set(_findall(datetime, self.f_weekday[wd])) + if full_indices is None: + full_indices = indices + else: + full_indices &= indices + if self.f_weekday[wd] != self.a_weekday[wd]: + indices = set(_findall(datetime, self.a_weekday[wd])) + if abbr_indices is None: + abbr_indices = indices + else: + abbr_indices &= indices + if not full_indices and not abbr_indices: + return None, None + if full_indices: + return self.f_weekday, '%A' + if abbr_indices: + return self.a_weekday, '%a' + return None, None + def __calc_timezone(self): # Set self.timezone by using time.tzname. # Do not worry about possibility of time.tzname[0] == time.tzname[1] @@ -181,12 +283,12 @@ class TimeRE(dict): else: self.locale_time = LocaleTime() base = super() - base.__init__({ + mapping = { # The " [1-9]" part of the regex is to make %c from ANSI C work 'd': r"(?P<d>3[0-1]|[1-2]\d|0[1-9]|[1-9]| [1-9])", 'f': r"(?P<f>[0-9]{1,6})", 'H': r"(?P<H>2[0-3]|[0-1]\d|\d)", - 'I': r"(?P<I>1[0-2]|0[1-9]|[1-9])", + 'I': r"(?P<I>1[0-2]|0[1-9]|[1-9]| [1-9])", 'G': r"(?P<G>\d\d\d\d)", 'j': r"(?P<j>36[0-6]|3[0-5]\d|[1-2]\d\d|0[1-9]\d|00[1-9]|[1-9]\d|0[1-9]|[1-9])", 'm': r"(?P<m>1[0-2]|0[1-9]|[1-9])", @@ -210,11 +312,15 @@ class TimeRE(dict): 'Z': self.__seqToRE((tz for tz_names in self.locale_time.timezone for tz in tz_names), 'Z'), - '%': '%'}) - base.__setitem__('W', base.__getitem__('U').replace('U', 'W')) - base.__setitem__('c', self.pattern(self.locale_time.LC_date_time)) - base.__setitem__('x', self.pattern(self.locale_time.LC_date)) + '%': '%'} + for d in 'dmyHIMS': + mapping['O' + d] = r'(?P<%s>\d\d|\d| \d)' % d + mapping['Ow'] = r'(?P<w>\d)' + mapping['W'] = mapping['U'].replace('U', 'W') + base.__init__(mapping) base.__setitem__('X', self.pattern(self.locale_time.LC_time)) + base.__setitem__('x', self.pattern(self.locale_time.LC_date)) + base.__setitem__('c', self.pattern(self.locale_time.LC_date_time)) def __seqToRE(self, to_convert, directive): """Convert a list to a regex string for matching a directive. @@ -242,21 +348,16 @@ class TimeRE(dict): regex syntax are escaped. """ - processed_format = '' # The sub() call escapes all characters that might be misconstrued # as regex syntax. Cannot use re.escape since we have to deal with # format directives (%m, etc.). - regex_chars = re_compile(r"([\\.^$*+?\(\){}\[\]|])") - format = regex_chars.sub(r"\\\1", format) - whitespace_replacement = re_compile(r'\s+') - format = whitespace_replacement.sub(r'\\s+', format) - while '%' in format: - directive_index = format.index('%')+1 - processed_format = "%s%s%s" % (processed_format, - format[:directive_index-1], - self[format[directive_index]]) - format = format[directive_index+1:] - return "%s%s" % (processed_format, format) + format = re_sub(r"([\\.^$*+?\(\){}\[\]|])", r"\\\1", format) + format = re_sub(r'\s+', r'\\s+', format) + format = re_sub(r"'", "['\u02bc]", format) # needed for br_FR + def repl(m): + return self[m[1]] + format = re_sub(r'%(O?.)', repl, format) + return format def compile(self, format): """Return a compiled re object for the format string.""" diff --git a/contrib/tools/python3/Lib/argparse.py b/contrib/tools/python3/Lib/argparse.py index 3d01415fcf..2a8b501a44 100644 --- a/contrib/tools/python3/Lib/argparse.py +++ b/contrib/tools/python3/Lib/argparse.py @@ -564,8 +564,7 @@ class HelpFormatter(object): def _format_action_invocation(self, action): if not action.option_strings: default = self._get_default_metavar_for_positional(action) - metavar, = self._metavar_formatter(action, default)(1) - return metavar + return ' '.join(self._metavar_formatter(action, default)(1)) else: parts = [] @@ -589,8 +588,7 @@ class HelpFormatter(object): if action.metavar is not None: result = action.metavar elif action.choices is not None: - choice_strs = [str(choice) for choice in action.choices] - result = '{%s}' % ','.join(choice_strs) + result = '{%s}' % ','.join(map(str, action.choices)) else: result = default_metavar @@ -638,8 +636,7 @@ class HelpFormatter(object): if hasattr(params[name], '__name__'): params[name] = params[name].__name__ if params.get('choices') is not None: - choices_str = ', '.join([str(c) for c in params['choices']]) - params['choices'] = choices_str + params['choices'] = ', '.join(map(str, params['choices'])) return self._get_help_string(action) % params def _iter_indented_subactions(self, action): @@ -752,11 +749,19 @@ def _get_action_name(argument): elif argument.option_strings: return '/'.join(argument.option_strings) elif argument.metavar not in (None, SUPPRESS): - return argument.metavar + metavar = argument.metavar + if not isinstance(metavar, tuple): + return metavar + if argument.nargs == ZERO_OR_MORE and len(metavar) == 2: + return '%s[, %s]' % metavar + elif argument.nargs == ONE_OR_MORE: + return '%s[, %s]' % metavar + else: + return ', '.join(metavar) elif argument.dest not in (None, SUPPRESS): return argument.dest elif argument.choices: - return '{' + ','.join(argument.choices) + '}' + return '{%s}' % ','.join(map(str, argument.choices)) else: return None @@ -1557,7 +1562,11 @@ class _ActionsContainer(object): # NOTE: if add_mutually_exclusive_group ever gains title= and # description= then this code will need to be expanded as above for group in container._mutually_exclusive_groups: - mutex_group = self.add_mutually_exclusive_group( + if group._container is container: + cont = self + else: + cont = title_group_map[group._container.title] + mutex_group = cont.add_mutually_exclusive_group( required=group.required) # map the actions to their new mutex group @@ -1902,6 +1911,9 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): return args def parse_known_args(self, args=None, namespace=None): + return self._parse_known_args2(args, namespace, intermixed=False) + + def _parse_known_args2(self, args, namespace, intermixed): if args is None: # args default to the system args args = _sys.argv[1:] @@ -1928,18 +1940,18 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): # parse the arguments and exit if there are any errors if self.exit_on_error: try: - namespace, args = self._parse_known_args(args, namespace) + namespace, args = self._parse_known_args(args, namespace, intermixed) except ArgumentError as err: self.error(str(err)) else: - namespace, args = self._parse_known_args(args, namespace) + namespace, args = self._parse_known_args(args, namespace, intermixed) if hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR): args.extend(getattr(namespace, _UNRECOGNIZED_ARGS_ATTR)) delattr(namespace, _UNRECOGNIZED_ARGS_ATTR) return namespace, args - def _parse_known_args(self, arg_strings, namespace): + def _parse_known_args(self, arg_strings, namespace, intermixed): # replace arg strings that are file references if self.fromfile_prefix_chars is not None: arg_strings = self._read_args_from_files(arg_strings) @@ -2014,7 +2026,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): if len(option_tuples) > 1: options = ', '.join([option_string for action, option_string, sep, explicit_arg in option_tuples]) - args = {'option': arg_string, 'matches': options} + args = {'option': arg_strings[start_index], 'matches': options} msg = _('ambiguous option: %(option)s could match %(matches)s') raise ArgumentError(None, msg % args) @@ -2029,6 +2041,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): # if we found no optional action, skip it if action is None: extras.append(arg_strings[start_index]) + extras_pattern.append('O') return start_index + 1 # if there is an explicit argument, try to match the @@ -2064,6 +2077,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): sep = '' else: extras.append(char + explicit_arg) + extras_pattern.append('O') stop = start_index + 1 break # if the action expect exactly one argument, we've @@ -2134,6 +2148,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): # consume Positionals and Optionals alternately, until we have # passed the last option string extras = [] + extras_pattern = [] start_index = 0 if option_string_indices: max_option_string_index = max(option_string_indices) @@ -2146,7 +2161,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): index for index in option_string_indices if index >= start_index]) - if start_index != next_option_string_index: + if not intermixed and start_index != next_option_string_index: positionals_end_index = consume_positionals(start_index) # only try to parse the next optional if we didn't consume @@ -2162,16 +2177,35 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): if start_index not in option_string_indices: strings = arg_strings[start_index:next_option_string_index] extras.extend(strings) + extras_pattern.extend(arg_strings_pattern[start_index:next_option_string_index]) start_index = next_option_string_index # consume the next optional and any arguments for it start_index = consume_optional(start_index) - # consume any positionals following the last Optional - stop_index = consume_positionals(start_index) + if not intermixed: + # consume any positionals following the last Optional + stop_index = consume_positionals(start_index) - # if we didn't consume all the argument strings, there were extras - extras.extend(arg_strings[stop_index:]) + # if we didn't consume all the argument strings, there were extras + extras.extend(arg_strings[stop_index:]) + else: + extras.extend(arg_strings[start_index:]) + extras_pattern.extend(arg_strings_pattern[start_index:]) + extras_pattern = ''.join(extras_pattern) + assert len(extras_pattern) == len(extras) + # consume all positionals + arg_strings = [s for s, c in zip(extras, extras_pattern) if c != 'O'] + arg_strings_pattern = extras_pattern.replace('O', '') + stop_index = consume_positionals(0) + # leave unknown optionals and non-consumed positionals in extras + for i, c in enumerate(extras_pattern): + if not stop_index: + break + if c != 'O': + stop_index -= 1 + extras[i] = None + extras = [s for s in extras if s is not None] # make sure all required actions were present and also convert # action defaults which were not given as arguments @@ -2437,10 +2471,6 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): # are then parsed. If the parser definition is incompatible with the # intermixed assumptions (e.g. use of REMAINDER, subparsers) a # TypeError is raised. - # - # positionals are 'deactivated' by setting nargs and default to - # SUPPRESS. This blocks the addition of that positional to the - # namespace positionals = self._get_positional_actions() a = [action for action in positionals @@ -2449,59 +2479,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): raise TypeError('parse_intermixed_args: positional arg' ' with nargs=%s'%a[0].nargs) - if [action.dest for group in self._mutually_exclusive_groups - for action in group._group_actions if action in positionals]: - raise TypeError('parse_intermixed_args: positional in' - ' mutuallyExclusiveGroup') - - try: - save_usage = self.usage - try: - if self.usage is None: - # capture the full usage for use in error messages - self.usage = self.format_usage()[7:] - for action in positionals: - # deactivate positionals - action.save_nargs = action.nargs - # action.nargs = 0 - action.nargs = SUPPRESS - action.save_default = action.default - action.default = SUPPRESS - namespace, remaining_args = self.parse_known_args(args, - namespace) - for action in positionals: - # remove the empty positional values from namespace - if (hasattr(namespace, action.dest) - and getattr(namespace, action.dest)==[]): - from warnings import warn - warn('Do not expect %s in %s' % (action.dest, namespace)) - delattr(namespace, action.dest) - finally: - # restore nargs and usage before exiting - for action in positionals: - action.nargs = action.save_nargs - action.default = action.save_default - optionals = self._get_optional_actions() - try: - # parse positionals. optionals aren't normally required, but - # they could be, so make sure they aren't. - for action in optionals: - action.save_required = action.required - action.required = False - for group in self._mutually_exclusive_groups: - group.save_required = group.required - group.required = False - namespace, extras = self.parse_known_args(remaining_args, - namespace) - finally: - # restore parser values before exiting - for action in optionals: - action.required = action.save_required - for group in self._mutually_exclusive_groups: - group.required = group.save_required - finally: - self.usage = save_usage - return namespace, extras + return self._parse_known_args2(args, namespace, intermixed=True) # ======================== # Value conversion methods @@ -2589,8 +2567,8 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): if isinstance(choices, str): choices = iter(choices) if value not in choices: - args = {'value': value, - 'choices': ', '.join(map(repr, action.choices))} + args = {'value': str(value), + 'choices': ', '.join(map(str, action.choices))} msg = _('invalid choice: %(value)r (choose from %(choices)s)') raise ArgumentError(action, msg % args) diff --git a/contrib/tools/python3/Lib/asyncio/__main__.py b/contrib/tools/python3/Lib/asyncio/__main__.py index 0465580115..29e528aeed 100644 --- a/contrib/tools/python3/Lib/asyncio/__main__.py +++ b/contrib/tools/python3/Lib/asyncio/__main__.py @@ -2,6 +2,7 @@ import ast import asyncio import code import concurrent.futures +import contextvars import inspect import sys import threading @@ -17,6 +18,7 @@ class AsyncIOInteractiveConsole(code.InteractiveConsole): super().__init__(locals) self.compile.compiler.flags |= ast.PyCF_ALLOW_TOP_LEVEL_AWAIT self.loop = loop + self.context = contextvars.copy_context() def runcode(self, code): future = concurrent.futures.Future() @@ -46,12 +48,12 @@ class AsyncIOInteractiveConsole(code.InteractiveConsole): return try: - repl_future = self.loop.create_task(coro) + repl_future = self.loop.create_task(coro, context=self.context) futures._chain_future(repl_future, future) except BaseException as exc: future.set_exception(exc) - loop.call_soon_threadsafe(callback) + loop.call_soon_threadsafe(callback, context=self.context) try: return future.result() diff --git a/contrib/tools/python3/Lib/asyncio/base_events.py b/contrib/tools/python3/Lib/asyncio/base_events.py index cb037fd472..3146f7f3f6 100644 --- a/contrib/tools/python3/Lib/asyncio/base_events.py +++ b/contrib/tools/python3/Lib/asyncio/base_events.py @@ -17,7 +17,6 @@ import collections import collections.abc import concurrent.futures import errno -import functools import heapq import itertools import os @@ -1106,11 +1105,18 @@ class BaseEventLoop(events.AbstractEventLoop): except OSError: continue else: # using happy eyeballs - sock, _, _ = await staggered.staggered_race( - (functools.partial(self._connect_sock, - exceptions, addrinfo, laddr_infos) - for addrinfo in infos), - happy_eyeballs_delay, loop=self) + sock = (await staggered.staggered_race( + ( + # can't use functools.partial as it keeps a reference + # to exceptions + lambda addrinfo=addrinfo: self._connect_sock( + exceptions, addrinfo, laddr_infos + ) + for addrinfo in infos + ), + happy_eyeballs_delay, + loop=self, + ))[0] # can't use sock, _, _ as it keeks a reference to exceptions if sock is None: exceptions = [exc for sub in exceptions for exc in sub] diff --git a/contrib/tools/python3/Lib/asyncio/futures.py b/contrib/tools/python3/Lib/asyncio/futures.py index fd486f02c6..0c530bbdbc 100644 --- a/contrib/tools/python3/Lib/asyncio/futures.py +++ b/contrib/tools/python3/Lib/asyncio/futures.py @@ -194,8 +194,7 @@ class Future: the future is done and has an exception set, this exception is raised. """ if self._state == _CANCELLED: - exc = self._make_cancelled_error() - raise exc + raise self._make_cancelled_error() if self._state != _FINISHED: raise exceptions.InvalidStateError('Result is not ready.') self.__log_traceback = False @@ -212,8 +211,7 @@ class Future: InvalidStateError. """ if self._state == _CANCELLED: - exc = self._make_cancelled_error() - raise exc + raise self._make_cancelled_error() if self._state != _FINISHED: raise exceptions.InvalidStateError('Exception is not set.') self.__log_traceback = False diff --git a/contrib/tools/python3/Lib/asyncio/sslproto.py b/contrib/tools/python3/Lib/asyncio/sslproto.py index e51669a2ab..29e72b1fd9 100644 --- a/contrib/tools/python3/Lib/asyncio/sslproto.py +++ b/contrib/tools/python3/Lib/asyncio/sslproto.py @@ -101,7 +101,7 @@ class _SSLProtocolTransport(transports._FlowControlMixin, return self._ssl_protocol._app_protocol def is_closing(self): - return self._closed + return self._closed or self._ssl_protocol._is_transport_closing() def close(self): """Close the transport. @@ -379,6 +379,9 @@ class SSLProtocol(protocols.BufferedProtocol): self._app_transport_created = True return self._app_transport + def _is_transport_closing(self): + return self._transport is not None and self._transport.is_closing() + def connection_made(self, transport): """Called when the low-level connection is made. diff --git a/contrib/tools/python3/Lib/asyncio/staggered.py b/contrib/tools/python3/Lib/asyncio/staggered.py index c3a7441a7b..0f4df8855a 100644 --- a/contrib/tools/python3/Lib/asyncio/staggered.py +++ b/contrib/tools/python3/Lib/asyncio/staggered.py @@ -69,7 +69,11 @@ async def staggered_race(coro_fns, delay, *, loop=None): exceptions = [] running_tasks = [] - async def run_one_coro(previous_failed) -> None: + async def run_one_coro(ok_to_start, previous_failed) -> None: + # in eager tasks this waits for the calling task to append this task + # to running_tasks, in regular tasks this wait is a no-op that does + # not yield a future. See gh-124309. + await ok_to_start.wait() # Wait for the previous task to finish, or for delay seconds if previous_failed is not None: with contextlib.suppress(exceptions_mod.TimeoutError): @@ -85,8 +89,12 @@ async def staggered_race(coro_fns, delay, *, loop=None): return # Start task that will run the next coroutine this_failed = locks.Event() - next_task = loop.create_task(run_one_coro(this_failed)) + next_ok_to_start = locks.Event() + next_task = loop.create_task(run_one_coro(next_ok_to_start, this_failed)) running_tasks.append(next_task) + # next_task has been appended to running_tasks so next_task is ok to + # start. + next_ok_to_start.set() assert len(running_tasks) == this_index + 2 # Prepare place to put this coroutine's exceptions if not won exceptions.append(None) @@ -116,8 +124,11 @@ async def staggered_race(coro_fns, delay, *, loop=None): if i != this_index: t.cancel() - first_task = loop.create_task(run_one_coro(None)) + ok_to_start = locks.Event() + first_task = loop.create_task(run_one_coro(ok_to_start, None)) running_tasks.append(first_task) + # first_task has been appended to running_tasks so first_task is ok to start. + ok_to_start.set() try: # Wait for a growing list of tasks to all finish: poor man's version of # curio's TaskGroup or trio's nursery @@ -133,6 +144,7 @@ async def staggered_race(coro_fns, delay, *, loop=None): raise d.exception() return winner_result, winner_index, exceptions finally: + del exceptions # Make sure no tasks are left running if we leave this function for t in running_tasks: t.cancel() diff --git a/contrib/tools/python3/Lib/asyncio/taskgroups.py b/contrib/tools/python3/Lib/asyncio/taskgroups.py index d264e51f1f..aada3ffa8e 100644 --- a/contrib/tools/python3/Lib/asyncio/taskgroups.py +++ b/contrib/tools/python3/Lib/asyncio/taskgroups.py @@ -66,6 +66,20 @@ class TaskGroup: return self async def __aexit__(self, et, exc, tb): + tb = None + try: + return await self._aexit(et, exc) + finally: + # Exceptions are heavy objects that can have object + # cycles (bad for GC); let's not keep a reference to + # a bunch of them. It would be nicer to use a try/finally + # in __aexit__ directly but that introduced some diff noise + self._parent_task = None + self._errors = None + self._base_error = None + exc = None + + async def _aexit(self, et, exc): self._exiting = True if (exc is not None and @@ -126,25 +140,34 @@ class TaskGroup: assert not self._tasks if self._base_error is not None: - raise self._base_error + try: + raise self._base_error + finally: + exc = None # Propagate CancelledError if there is one, except if there # are other errors -- those have priority. - if propagate_cancellation_error and not self._errors: - raise propagate_cancellation_error + try: + if propagate_cancellation_error and not self._errors: + try: + raise propagate_cancellation_error + finally: + exc = None + finally: + propagate_cancellation_error = None if et is not None and et is not exceptions.CancelledError: self._errors.append(exc) if self._errors: - # Exceptions are heavy objects that can have object - # cycles (bad for GC); let's not keep a reference to - # a bunch of them. try: - me = BaseExceptionGroup('unhandled errors in a TaskGroup', self._errors) - raise me from None + raise BaseExceptionGroup( + 'unhandled errors in a TaskGroup', + self._errors, + ) from None finally: - self._errors = None + exc = None + def create_task(self, coro, *, name=None, context=None): """Create a new task in this group and return it. diff --git a/contrib/tools/python3/Lib/bdb.py b/contrib/tools/python3/Lib/bdb.py index 564d6c5e53..196e6b178c 100644 --- a/contrib/tools/python3/Lib/bdb.py +++ b/contrib/tools/python3/Lib/bdb.py @@ -295,9 +295,10 @@ class Bdb: # Issue #13183: pdb skips frames after hitting a breakpoint and running # step commands. # Restore the trace function in the caller (that may not have been set - # for performance reasons) when returning from the current frame. + # for performance reasons) when returning from the current frame, unless + # the caller is the botframe. caller_frame = current_frame.f_back - if caller_frame and not caller_frame.f_trace: + if caller_frame and not caller_frame.f_trace and caller_frame is not self.botframe: caller_frame.f_trace = self.trace_dispatch # Derived classes and clients can call the following methods diff --git a/contrib/tools/python3/Lib/calendar.py b/contrib/tools/python3/Lib/calendar.py index ee3ec838c9..3509648435 100644 --- a/contrib/tools/python3/Lib/calendar.py +++ b/contrib/tools/python3/Lib/calendar.py @@ -28,7 +28,9 @@ __all__ = ["IllegalMonthError", "IllegalWeekdayError", "setfirstweekday", error = ValueError # Exceptions raised for bad input -class IllegalMonthError(ValueError): +# This is trick for backward compatibility. Since 3.13, we will raise IllegalMonthError instead of +# IndexError for bad month number(out of 1-12). But we can't remove IndexError for backward compatibility. +class IllegalMonthError(ValueError, IndexError): def __init__(self, month): self.month = month def __str__(self): @@ -158,11 +160,14 @@ def weekday(year, month, day): return Day(datetime.date(year, month, day).weekday()) +def _validate_month(month): + if not 1 <= month <= 12: + raise IllegalMonthError(month) + def monthrange(year, month): """Return weekday of first day of month (0-6 ~ Mon-Sun) and number of days (28-31) for year, month.""" - if not 1 <= month <= 12: - raise IllegalMonthError(month) + _validate_month(month) day1 = weekday(year, month, 1) ndays = mdays[month] + (month == FEBRUARY and isleap(year)) return day1, ndays @@ -370,6 +375,8 @@ class TextCalendar(Calendar): """ Return a formatted month name. """ + _validate_month(themonth) + s = month_name[themonth] if withyear: s = "%s %r" % (s, theyear) @@ -500,6 +507,7 @@ class HTMLCalendar(Calendar): """ Return a month name as a table row. """ + _validate_month(themonth) if withyear: s = '%s %s' % (month_name[themonth], theyear) else: @@ -781,6 +789,8 @@ def main(args): if options.month is None: optdict["c"] = options.spacing optdict["m"] = options.months + if options.month is not None: + _validate_month(options.month) if options.year is None: result = cal.formatyear(datetime.date.today().year, **optdict) elif options.month is None: diff --git a/contrib/tools/python3/Lib/concurrent/futures/process.py b/contrib/tools/python3/Lib/concurrent/futures/process.py index 0e45288396..ff7c17efaa 100644 --- a/contrib/tools/python3/Lib/concurrent/futures/process.py +++ b/contrib/tools/python3/Lib/concurrent/futures/process.py @@ -68,27 +68,31 @@ _global_shutdown = False class _ThreadWakeup: def __init__(self): self._closed = False + self._lock = threading.Lock() self._reader, self._writer = mp.Pipe(duplex=False) def close(self): - # Please note that we do not take the shutdown lock when + # Please note that we do not take the self._lock when # calling clear() (to avoid deadlocking) so this method can # only be called safely from the same thread as all calls to - # clear() even if you hold the shutdown lock. Otherwise we + # clear() even if you hold the lock. Otherwise we # might try to read from the closed pipe. - if not self._closed: - self._closed = True - self._writer.close() - self._reader.close() + with self._lock: + if not self._closed: + self._closed = True + self._writer.close() + self._reader.close() def wakeup(self): - if not self._closed: - self._writer.send_bytes(b"") + with self._lock: + if not self._closed: + self._writer.send_bytes(b"") def clear(self): - if not self._closed: - while self._reader.poll(): - self._reader.recv_bytes() + if self._closed: + raise RuntimeError('operation on closed _ThreadWakeup') + while self._reader.poll(): + self._reader.recv_bytes() def _python_exit(): @@ -167,10 +171,8 @@ class _CallItem(object): class _SafeQueue(Queue): """Safe Queue set exception to the future object linked to a job""" - def __init__(self, max_size=0, *, ctx, pending_work_items, shutdown_lock, - thread_wakeup): + def __init__(self, max_size=0, *, ctx, pending_work_items, thread_wakeup): self.pending_work_items = pending_work_items - self.shutdown_lock = shutdown_lock self.thread_wakeup = thread_wakeup super().__init__(max_size, ctx=ctx) @@ -179,8 +181,7 @@ class _SafeQueue(Queue): tb = format_exception(type(e), e, e.__traceback__) e.__cause__ = _RemoteTraceback('\n"""\n{}"""'.format(''.join(tb))) work_item = self.pending_work_items.pop(obj.work_id, None) - with self.shutdown_lock: - self.thread_wakeup.wakeup() + self.thread_wakeup.wakeup() # work_item can be None if another process terminated. In this # case, the executor_manager_thread fails all work_items # with BrokenProcessPool @@ -305,12 +306,10 @@ class _ExecutorManagerThread(threading.Thread): # will wake up the queue management thread so that it can terminate # if there is no pending work item. def weakref_cb(_, - thread_wakeup=self.thread_wakeup, - shutdown_lock=self.shutdown_lock): + thread_wakeup=self.thread_wakeup): mp.util.debug('Executor collected: triggering callback for' ' QueueManager wakeup') - with shutdown_lock: - thread_wakeup.wakeup() + thread_wakeup.wakeup() self.executor_reference = weakref.ref(executor, weakref_cb) @@ -438,11 +437,6 @@ class _ExecutorManagerThread(threading.Thread): elif wakeup_reader in ready: is_broken = False - # No need to hold the _shutdown_lock here because: - # 1. we're the only thread to use the wakeup reader - # 2. we're also the only thread to call thread_wakeup.close() - # 3. we want to avoid a possible deadlock when both reader and writer - # would block (gh-105829) self.thread_wakeup.clear() return result_item, is_broken, cause @@ -740,10 +734,9 @@ class ProcessPoolExecutor(_base.Executor): # as it could result in a deadlock if a worker process dies with the # _result_queue write lock still acquired. # - # _shutdown_lock must be locked to access _ThreadWakeup.close() and - # .wakeup(). Care must also be taken to not call clear or close from - # more than one thread since _ThreadWakeup.clear() is not protected by - # the _shutdown_lock + # Care must be taken to only call clear and close from the + # executor_manager_thread, since _ThreadWakeup.clear() is not protected + # by a lock. self._executor_manager_thread_wakeup = _ThreadWakeup() # Create communication channels for the executor @@ -754,7 +747,6 @@ class ProcessPoolExecutor(_base.Executor): self._call_queue = _SafeQueue( max_size=queue_size, ctx=self._mp_context, pending_work_items=self._pending_work_items, - shutdown_lock=self._shutdown_lock, thread_wakeup=self._executor_manager_thread_wakeup) # Killed worker processes can produce spurious "broken pipe" # tracebacks in the queue's own worker thread. But we detect killed diff --git a/contrib/tools/python3/Lib/concurrent/futures/thread.py b/contrib/tools/python3/Lib/concurrent/futures/thread.py index 3b3a36a509..61dbff8a48 100644 --- a/contrib/tools/python3/Lib/concurrent/futures/thread.py +++ b/contrib/tools/python3/Lib/concurrent/futures/thread.py @@ -41,6 +41,7 @@ if hasattr(os, 'register_at_fork'): os.register_at_fork(before=_global_shutdown_lock.acquire, after_in_child=_global_shutdown_lock._at_fork_reinit, after_in_parent=_global_shutdown_lock.release) + os.register_at_fork(after_in_child=_threads_queues.clear) class _WorkItem: diff --git a/contrib/tools/python3/Lib/email/_policybase.py b/contrib/tools/python3/Lib/email/_policybase.py index 5f9aa9fb09..c9f0d74309 100644 --- a/contrib/tools/python3/Lib/email/_policybase.py +++ b/contrib/tools/python3/Lib/email/_policybase.py @@ -302,12 +302,12 @@ class Compat32(Policy): """+ The name is parsed as everything up to the ':' and returned unmodified. The value is determined by stripping leading whitespace off the - remainder of the first line, joining all subsequent lines together, and + remainder of the first line joined with all subsequent lines, and stripping any trailing carriage return or linefeed characters. """ name, value = sourcelines[0].split(':', 1) - value = value.lstrip(' \t') + ''.join(sourcelines[1:]) + value = ''.join((value, *sourcelines[1:])).lstrip(' \t\r\n') return (name, value.rstrip('\r\n')) def header_store_parse(self, name, value): diff --git a/contrib/tools/python3/Lib/email/policy.py b/contrib/tools/python3/Lib/email/policy.py index 46b7de5bb6..6e109b6501 100644 --- a/contrib/tools/python3/Lib/email/policy.py +++ b/contrib/tools/python3/Lib/email/policy.py @@ -119,13 +119,13 @@ class EmailPolicy(Policy): """+ The name is parsed as everything up to the ':' and returned unmodified. The value is determined by stripping leading whitespace off the - remainder of the first line, joining all subsequent lines together, and + remainder of the first line joined with all subsequent lines, and stripping any trailing carriage return or linefeed characters. (This is the same as Compat32). """ name, value = sourcelines[0].split(':', 1) - value = value.lstrip(' \t') + ''.join(sourcelines[1:]) + value = ''.join((value, *sourcelines[1:])).lstrip(' \t\r\n') return (name, value.rstrip('\r\n')) def header_store_parse(self, name, value): diff --git a/contrib/tools/python3/Lib/ensurepip/__init__.py b/contrib/tools/python3/Lib/ensurepip/__init__.py index a7c8457238..35d04d2f8b 100644 --- a/contrib/tools/python3/Lib/ensurepip/__init__.py +++ b/contrib/tools/python3/Lib/ensurepip/__init__.py @@ -10,7 +10,7 @@ from importlib import resources __all__ = ["version", "bootstrap"] _PACKAGE_NAMES = ('pip',) -_PIP_VERSION = "24.2" +_PIP_VERSION = "24.3.1" _PROJECTS = [ ("pip", _PIP_VERSION, "py3"), ] diff --git a/contrib/tools/python3/Lib/enum.py b/contrib/tools/python3/Lib/enum.py index d9859b3c0a..eaa517e2fb 100644 --- a/contrib/tools/python3/Lib/enum.py +++ b/contrib/tools/python3/Lib/enum.py @@ -592,19 +592,13 @@ class EnumType(type): classdict['_all_bits_'] = 0 classdict['_inverted_'] = None try: - exc = None enum_class = super().__new__(metacls, cls, bases, classdict, **kwds) except Exception as e: - # since 3.12 the line "Error calling __set_name__ on '_proto_member' instance ..." - # is tacked on to the error instead of raising a RuntimeError - # recreate the exception to discard - exc = type(e)(str(e)) - exc.__cause__ = e.__cause__ - exc.__context__ = e.__context__ - tb = e.__traceback__ - if exc is not None: - raise exc.with_traceback(tb) - # + # since 3.12 the note "Error calling __set_name__ on '_proto_member' instance ..." + # is tacked on to the error instead of raising a RuntimeError, so discard it + if hasattr(e, '__notes__'): + del e.__notes__ + raise # update classdict with any changes made by __init_subclass__ classdict.update(enum_class.__dict__) # diff --git a/contrib/tools/python3/Lib/functools.py b/contrib/tools/python3/Lib/functools.py index 318efd04fd..f6849899e7 100644 --- a/contrib/tools/python3/Lib/functools.py +++ b/contrib/tools/python3/Lib/functools.py @@ -238,12 +238,14 @@ def reduce(function, sequence, initial=_initial_missing): """ reduce(function, iterable[, initial]) -> value - Apply a function of two arguments cumulatively to the items of a sequence - or iterable, from left to right, so as to reduce the iterable to a single - value. For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates - ((((1+2)+3)+4)+5). If initial is present, it is placed before the items - of the iterable in the calculation, and serves as a default when the - iterable is empty. + Apply a function of two arguments cumulatively to the items of an iterable, from left to right. + + This effectively reduces the iterable to a single value. If initial is present, + it is placed before the items of the iterable in the calculation, and serves as + a default when the iterable is empty. + + For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) + calculates ((((1 + 2) + 3) + 4) + 5). """ it = iter(sequence) diff --git a/contrib/tools/python3/Lib/importlib/__init__.py b/contrib/tools/python3/Lib/importlib/__init__.py index 707c081cb2..5b92442fc3 100644 --- a/contrib/tools/python3/Lib/importlib/__init__.py +++ b/contrib/tools/python3/Lib/importlib/__init__.py @@ -105,7 +105,7 @@ def reload(module): try: name = module.__name__ except AttributeError: - raise TypeError("reload() argument must be a module") + raise TypeError("reload() argument must be a module") from None if sys.modules.get(name) is not module: raise ImportError(f"module {name} not in sys.modules", name=name) diff --git a/contrib/tools/python3/Lib/importlib/_bootstrap_external.py b/contrib/tools/python3/Lib/importlib/_bootstrap_external.py index 61dafc0f4c..9b8a8dfc5a 100644 --- a/contrib/tools/python3/Lib/importlib/_bootstrap_external.py +++ b/contrib/tools/python3/Lib/importlib/_bootstrap_external.py @@ -204,7 +204,11 @@ def _write_atomic(path, data, mode=0o666): # We first write data to a temporary file, and then use os.replace() to # perform an atomic rename. with _io.FileIO(fd, 'wb') as file: - file.write(data) + bytes_written = file.write(data) + if bytes_written != len(data): + # Raise an OSError so the 'except' below cleans up the partially + # written file. + raise OSError("os.write() didn't write the full pyc file") _os.replace(path_tmp, path) except OSError: try: diff --git a/contrib/tools/python3/Lib/inspect.py b/contrib/tools/python3/Lib/inspect.py index c43faa7315..b630cb2835 100644 --- a/contrib/tools/python3/Lib/inspect.py +++ b/contrib/tools/python3/Lib/inspect.py @@ -1638,11 +1638,15 @@ def getclosurevars(func): global_vars = {} builtin_vars = {} unbound_names = set() - for name in code.co_names: - if name in ("None", "True", "False"): - # Because these used to be builtins instead of keywords, they - # may still show up as name references. We ignore them. - continue + global_names = set() + for instruction in dis.get_instructions(code): + opname = instruction.opname + name = instruction.argval + if opname == "LOAD_ATTR": + unbound_names.add(name) + elif opname == "LOAD_GLOBAL": + global_names.add(name) + for name in global_names: try: global_vars[name] = global_ns[name] except KeyError: diff --git a/contrib/tools/python3/Lib/json/decoder.py b/contrib/tools/python3/Lib/json/decoder.py index c5d9ae2d0d..5e5effeac0 100644 --- a/contrib/tools/python3/Lib/json/decoder.py +++ b/contrib/tools/python3/Lib/json/decoder.py @@ -50,17 +50,18 @@ _CONSTANTS = { } +HEXDIGITS = re.compile(r'[0-9A-Fa-f]{4}', FLAGS) STRINGCHUNK = re.compile(r'(.*?)(["\\\x00-\x1f])', FLAGS) BACKSLASH = { '"': '"', '\\': '\\', '/': '/', 'b': '\b', 'f': '\f', 'n': '\n', 'r': '\r', 't': '\t', } -def _decode_uXXXX(s, pos): - esc = s[pos + 1:pos + 5] - if len(esc) == 4 and esc[1] not in 'xX': +def _decode_uXXXX(s, pos, _m=HEXDIGITS.match): + esc = _m(s, pos + 1) + if esc is not None: try: - return int(esc, 16) + return int(esc.group(), 16) except ValueError: pass msg = "Invalid \\uXXXX escape" diff --git a/contrib/tools/python3/Lib/json/scanner.py b/contrib/tools/python3/Lib/json/scanner.py index 7a61cfc2d2..090897515f 100644 --- a/contrib/tools/python3/Lib/json/scanner.py +++ b/contrib/tools/python3/Lib/json/scanner.py @@ -9,7 +9,7 @@ except ImportError: __all__ = ['make_scanner'] NUMBER_RE = re.compile( - r'(-?(?:0|[1-9]\d*))(\.\d+)?([eE][-+]?\d+)?', + r'(-?(?:0|[1-9][0-9]*))(\.[0-9]+)?([eE][-+]?[0-9]+)?', (re.VERBOSE | re.MULTILINE | re.DOTALL)) def py_make_scanner(context): diff --git a/contrib/tools/python3/Lib/logging/config.py b/contrib/tools/python3/Lib/logging/config.py index ac90b537d8..c128bc7a61 100644 --- a/contrib/tools/python3/Lib/logging/config.py +++ b/contrib/tools/python3/Lib/logging/config.py @@ -502,7 +502,7 @@ class BaseConfigurator(object): def _is_queue_like_object(obj): """Check that *obj* implements the Queue API.""" - if isinstance(obj, queue.Queue): + if isinstance(obj, (queue.Queue, queue.SimpleQueue)): return True # defer importing multiprocessing as much as possible from multiprocessing.queues import Queue as MPQueue @@ -519,13 +519,13 @@ def _is_queue_like_object(obj): # Ideally, we would have wanted to simply use strict type checking # instead of a protocol-based type checking since the latter does # not check the method signatures. - queue_interface = [ - 'empty', 'full', 'get', 'get_nowait', - 'put', 'put_nowait', 'join', 'qsize', - 'task_done', - ] + # + # Note that only 'put_nowait' and 'get' are required by the logging + # queue handler and queue listener (see gh-124653) and that other + # methods are either optional or unused. + minimal_queue_interface = ['put_nowait', 'get'] return all(callable(getattr(obj, method, None)) - for method in queue_interface) + for method in minimal_queue_interface) class DictConfigurator(BaseConfigurator): """ diff --git a/contrib/tools/python3/Lib/multiprocessing/connection.py b/contrib/tools/python3/Lib/multiprocessing/connection.py index d0582e3cd5..fdbc3bda7d 100644 --- a/contrib/tools/python3/Lib/multiprocessing/connection.py +++ b/contrib/tools/python3/Lib/multiprocessing/connection.py @@ -956,7 +956,7 @@ def answer_challenge(connection, authkey: bytes): f'Protocol error, expected challenge: {message=}') message = message[len(_CHALLENGE):] if len(message) < _MD5ONLY_MESSAGE_LENGTH: - raise AuthenticationError('challenge too short: {len(message)} bytes') + raise AuthenticationError(f'challenge too short: {len(message)} bytes') digest = _create_response(authkey, message) connection.send_bytes(digest) response = connection.recv_bytes(256) # reject large message diff --git a/contrib/tools/python3/Lib/multiprocessing/forkserver.py b/contrib/tools/python3/Lib/multiprocessing/forkserver.py index 4642707dae..9fb563276e 100644 --- a/contrib/tools/python3/Lib/multiprocessing/forkserver.py +++ b/contrib/tools/python3/Lib/multiprocessing/forkserver.py @@ -167,6 +167,8 @@ class ForkServer(object): def main(listener_fd, alive_r, preload, main_path=None, sys_path=None): '''Run forkserver.''' if preload: + if sys_path is not None: + sys.path[:] = sys_path if '__main__' in preload and main_path is not None: process.current_process()._inheriting = True try: diff --git a/contrib/tools/python3/Lib/multiprocessing/managers.py b/contrib/tools/python3/Lib/multiprocessing/managers.py index 75d9c18c20..010d16e149 100644 --- a/contrib/tools/python3/Lib/multiprocessing/managers.py +++ b/contrib/tools/python3/Lib/multiprocessing/managers.py @@ -755,22 +755,29 @@ class BaseProxy(object): _address_to_local = {} _mutex = util.ForkAwareThreadLock() + # Each instance gets a `_serial` number. Unlike `id(...)`, this number + # is never reused. + _next_serial = 1 + def __init__(self, token, serializer, manager=None, authkey=None, exposed=None, incref=True, manager_owned=False): with BaseProxy._mutex: - tls_idset = BaseProxy._address_to_local.get(token.address, None) - if tls_idset is None: - tls_idset = util.ForkAwareLocal(), ProcessLocalSet() - BaseProxy._address_to_local[token.address] = tls_idset + tls_serials = BaseProxy._address_to_local.get(token.address, None) + if tls_serials is None: + tls_serials = util.ForkAwareLocal(), ProcessLocalSet() + BaseProxy._address_to_local[token.address] = tls_serials + + self._serial = BaseProxy._next_serial + BaseProxy._next_serial += 1 # self._tls is used to record the connection used by this # thread to communicate with the manager at token.address - self._tls = tls_idset[0] + self._tls = tls_serials[0] - # self._idset is used to record the identities of all shared - # objects for which the current process owns references and + # self._all_serials is a set used to record the identities of all + # shared objects for which the current process owns references and # which are in the manager at token.address - self._idset = tls_idset[1] + self._all_serials = tls_serials[1] self._token = token self._id = self._token.id @@ -850,20 +857,20 @@ class BaseProxy(object): dispatch(conn, None, 'incref', (self._id,)) util.debug('INCREF %r', self._token.id) - self._idset.add(self._id) + self._all_serials.add(self._serial) state = self._manager and self._manager._state self._close = util.Finalize( self, BaseProxy._decref, - args=(self._token, self._authkey, state, - self._tls, self._idset, self._Client), + args=(self._token, self._serial, self._authkey, state, + self._tls, self._all_serials, self._Client), exitpriority=10 ) @staticmethod - def _decref(token, authkey, state, tls, idset, _Client): - idset.discard(token.id) + def _decref(token, serial, authkey, state, tls, idset, _Client): + idset.discard(serial) # check whether manager is still alive if state is None or state.value == State.STARTED: diff --git a/contrib/tools/python3/Lib/multiprocessing/synchronize.py b/contrib/tools/python3/Lib/multiprocessing/synchronize.py index 3ccbfe311c..0f682b9a09 100644 --- a/contrib/tools/python3/Lib/multiprocessing/synchronize.py +++ b/contrib/tools/python3/Lib/multiprocessing/synchronize.py @@ -174,7 +174,7 @@ class Lock(SemLock): name = process.current_process().name if threading.current_thread().name != 'MainThread': name += '|' + threading.current_thread().name - elif self._semlock._get_value() == 1: + elif not self._semlock._is_zero(): name = 'None' elif self._semlock._count() > 0: name = 'SomeOtherThread' @@ -200,7 +200,7 @@ class RLock(SemLock): if threading.current_thread().name != 'MainThread': name += '|' + threading.current_thread().name count = self._semlock._count() - elif self._semlock._get_value() == 1: + elif not self._semlock._is_zero(): name, count = 'None', 0 elif self._semlock._count() > 0: name, count = 'SomeOtherThread', 'nonzero' diff --git a/contrib/tools/python3/Lib/ntpath.py b/contrib/tools/python3/Lib/ntpath.py index 2e290dcf9d..c05e965fcb 100644 --- a/contrib/tools/python3/Lib/ntpath.py +++ b/contrib/tools/python3/Lib/ntpath.py @@ -561,28 +561,21 @@ except ImportError: return prefix + sep.join(comps) -def _abspath_fallback(path): - """Return the absolute version of a path as a fallback function in case - `nt._getfullpathname` is not available or raises OSError. See bpo-31047 for - more. - - """ - - path = os.fspath(path) - if not isabs(path): - if isinstance(path, bytes): - cwd = os.getcwdb() - else: - cwd = os.getcwd() - path = join(cwd, path) - return normpath(path) - # Return an absolute path. try: from nt import _getfullpathname except ImportError: # not running on Windows - mock up something sensible - abspath = _abspath_fallback + def abspath(path): + """Return the absolute version of a path.""" + path = os.fspath(path) + if not isabs(path): + if isinstance(path, bytes): + cwd = os.getcwdb() + else: + cwd = os.getcwd() + path = join(cwd, path) + return normpath(path) else: # use native Windows method on Windows def abspath(path): @@ -590,7 +583,27 @@ else: # use native Windows method on Windows try: return _getfullpathname(normpath(path)) except (OSError, ValueError): - return _abspath_fallback(path) + # See gh-75230, handle outside for cleaner traceback + pass + path = os.fspath(path) + if not isabs(path): + if isinstance(path, bytes): + sep = b'\\' + getcwd = os.getcwdb + else: + sep = '\\' + getcwd = os.getcwd + drive, root, path = splitroot(path) + # Either drive or root can be nonempty, but not both. + if drive or root: + try: + path = join(_getfullpathname(drive + root), path) + except (OSError, ValueError): + # Drive "\0:" cannot exist; use the root directory. + path = drive + sep + path + else: + path = join(getcwd(), path) + return normpath(path) try: from nt import _getfinalpathname, readlink as _nt_readlink diff --git a/contrib/tools/python3/Lib/nturl2path.py b/contrib/tools/python3/Lib/nturl2path.py index 61852aff58..757fd01bec 100644 --- a/contrib/tools/python3/Lib/nturl2path.py +++ b/contrib/tools/python3/Lib/nturl2path.py @@ -15,32 +15,29 @@ def url2pathname(url): # become # C:\foo\bar\spam.foo import string, urllib.parse + if url[:3] == '///': + # URL has an empty authority section, so the path begins on the third + # character. + url = url[2:] + elif url[:12] == '//localhost/': + # Skip past 'localhost' authority. + url = url[11:] + if url[:3] == '///': + # Skip past extra slash before UNC drive in URL path. + url = url[1:] # Windows itself uses ":" even in URLs. url = url.replace(':', '|') if not '|' in url: # No drive specifier, just convert slashes - if url[:4] == '////': - # path is something like ////host/path/on/remote/host - # convert this to \\host\path\on\remote\host - # (notice halving of slashes at the start of the path) - url = url[2:] - components = url.split('/') # make sure not to convert quoted slashes :-) - return urllib.parse.unquote('\\'.join(components)) + return urllib.parse.unquote(url.replace('/', '\\')) comp = url.split('|') if len(comp) != 2 or comp[0][-1] not in string.ascii_letters: error = 'Bad URL: ' + url raise OSError(error) drive = comp[0][-1].upper() - components = comp[1].split('/') - path = drive + ':' - for comp in components: - if comp: - path = path + '\\' + urllib.parse.unquote(comp) - # Issue #11474 - handing url such as |c/| - if path.endswith(':') and url.endswith('/'): - path += '\\' - return path + tail = urllib.parse.unquote(comp[1].replace('/', '\\')) + return drive + ':' + tail def pathname2url(p): """OS-specific conversion from a file system path to a relative URL @@ -52,30 +49,21 @@ def pathname2url(p): import urllib.parse # First, clean up some special forms. We are going to sacrifice # the additional information anyway - if p[:4] == '\\\\?\\': + p = p.replace('\\', '/') + if p[:4] == '//?/': p = p[4:] - if p[:4].upper() == 'UNC\\': - p = '\\' + p[4:] + if p[:4].upper() == 'UNC/': + p = '//' + p[4:] elif p[1:2] != ':': raise OSError('Bad path: ' + p) if not ':' in p: - # No drive specifier, just convert slashes and quote the name - if p[:2] == '\\\\': - # path is something like \\host\path\on\remote\host - # convert this to ////host/path/on/remote/host - # (notice doubling of slashes at the start of the path) - p = '\\\\' + p - components = p.split('\\') - return urllib.parse.quote('/'.join(components)) + # No DOS drive specified, just quote the pathname + return urllib.parse.quote(p) comp = p.split(':', maxsplit=2) if len(comp) != 2 or len(comp[0]) > 1: error = 'Bad path: ' + p raise OSError(error) drive = urllib.parse.quote(comp[0].upper()) - components = comp[1].split('\\') - path = '///' + drive + ':' - for comp in components: - if comp: - path = path + '/' + urllib.parse.quote(comp) - return path + tail = urllib.parse.quote(comp[1]) + return '///' + drive + ':' + tail diff --git a/contrib/tools/python3/Lib/pathlib.py b/contrib/tools/python3/Lib/pathlib.py index 65ff0ee197..02eb5c2598 100644 --- a/contrib/tools/python3/Lib/pathlib.py +++ b/contrib/tools/python3/Lib/pathlib.py @@ -359,9 +359,9 @@ class PurePath(object): paths = [] for arg in args: if isinstance(arg, PurePath): - if arg._flavour is ntpath and self._flavour is posixpath: + if arg._flavour is not self._flavour: # GH-103631: Convert separators for backwards compatibility. - paths.extend(path.replace('\\', '/') for path in arg._raw_paths) + paths.append(arg.as_posix()) else: paths.extend(arg._raw_paths) else: diff --git a/contrib/tools/python3/Lib/pdb.py b/contrib/tools/python3/Lib/pdb.py index 89cf975164..1e1b5ea4f0 100755 --- a/contrib/tools/python3/Lib/pdb.py +++ b/contrib/tools/python3/Lib/pdb.py @@ -96,7 +96,7 @@ __all__ = ["run", "pm", "Pdb", "runeval", "runctx", "runcall", "set_trace", "post_mortem", "help"] def find_function(funcname, filename): - cre = re.compile(r'def\s+%s\s*[(]' % re.escape(funcname)) + cre = re.compile(r'def\s+%s(\s*\[.+\])?\s*[(]' % re.escape(funcname)) try: fp = tokenize.open(filename) except OSError: @@ -321,8 +321,7 @@ class Pdb(bdb.Bdb, cmd.Cmd): def user_line(self, frame): """This function is called when we stop or break at this line.""" if self._wait_for_mainpyfile: - if (self.mainpyfile != self.canonic(frame.f_code.co_filename) - or frame.f_lineno <= 0): + if (self.mainpyfile != self.canonic(frame.f_code.co_filename)): return self._wait_for_mainpyfile = False if self.bp_commands(frame): diff --git a/contrib/tools/python3/Lib/pickle.py b/contrib/tools/python3/Lib/pickle.py index 01c1a10279..ea5f1c5dc3 100644 --- a/contrib/tools/python3/Lib/pickle.py +++ b/contrib/tools/python3/Lib/pickle.py @@ -533,10 +533,11 @@ class _Pickler: self.framer.commit_frame() # Check for persistent id (defined by a subclass) - pid = self.persistent_id(obj) - if pid is not None and save_persistent_id: - self.save_pers(pid) - return + if save_persistent_id: + pid = self.persistent_id(obj) + if pid is not None: + self.save_pers(pid) + return # Check the memo x = self.memo.get(id(obj)) diff --git a/contrib/tools/python3/Lib/pickletools.py b/contrib/tools/python3/Lib/pickletools.py index 51ee4a7a26..33a51492ea 100644 --- a/contrib/tools/python3/Lib/pickletools.py +++ b/contrib/tools/python3/Lib/pickletools.py @@ -312,7 +312,7 @@ uint8 = ArgumentDescriptor( doc="Eight-byte unsigned integer, little-endian.") -def read_stringnl(f, decode=True, stripquotes=True): +def read_stringnl(f, decode=True, stripquotes=True, *, encoding='latin-1'): r""" >>> import io >>> read_stringnl(io.BytesIO(b"'abcd'\nefg\n")) @@ -356,7 +356,7 @@ def read_stringnl(f, decode=True, stripquotes=True): raise ValueError("no string quotes around %r" % data) if decode: - data = codecs.escape_decode(data)[0].decode("ascii") + data = codecs.escape_decode(data)[0].decode(encoding) return data stringnl = ArgumentDescriptor( @@ -370,7 +370,7 @@ stringnl = ArgumentDescriptor( """) def read_stringnl_noescape(f): - return read_stringnl(f, stripquotes=False) + return read_stringnl(f, stripquotes=False, encoding='utf-8') stringnl_noescape = ArgumentDescriptor( name='stringnl_noescape', @@ -2513,7 +2513,10 @@ def dis(pickle, out=None, memo=None, indentlevel=4, annotate=0): # make a mild effort to align arguments line += ' ' * (10 - len(opcode.name)) if arg is not None: - line += ' ' + repr(arg) + if opcode.name in ("STRING", "BINSTRING", "SHORT_BINSTRING"): + line += ' ' + ascii(arg) + else: + line += ' ' + repr(arg) if markmsg: line += ' ' + markmsg if annotate: diff --git a/contrib/tools/python3/Lib/pydoc_data/topics.py b/contrib/tools/python3/Lib/pydoc_data/topics.py index b5464cb4d0..12523999ca 100644 --- a/contrib/tools/python3/Lib/pydoc_data/topics.py +++ b/contrib/tools/python3/Lib/pydoc_data/topics.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Autogenerated by Sphinx on Tue Oct 1 04:02:04 2024 +# Autogenerated by Sphinx on Tue Dec 3 19:41:14 2024 # as part of the release process. topics = {'assert': 'The "assert" statement\n' '**********************\n' @@ -29,13 +29,12 @@ topics = {'assert': 'The "assert" statement\n' '(command\n' 'line option "-O"). The current code generator emits no code for ' 'an\n' - 'assert statement when optimization is requested at compile time. ' - 'Note\n' - 'that it is unnecessary to include the source code for the ' - 'expression\n' - 'that failed in the error message; it will be displayed as part of ' - 'the\n' - 'stack trace.\n' + '"assert" statement when optimization is requested at compile ' + 'time.\n' + 'Note that it is unnecessary to include the source code for the\n' + 'expression that failed in the error message; it will be displayed ' + 'as\n' + 'part of the stack trace.\n' '\n' 'Assignments to "__debug__" are illegal. The value for the ' 'built-in\n' @@ -673,7 +672,8 @@ topics = {'assert': 'The "assert" statement\n' 'should either\n' ' return the (computed) attribute value or raise an ' '"AttributeError"\n' - ' exception.\n' + ' exception. The "object" class itself does not provide ' + 'this method.\n' '\n' ' Note that if the attribute is found through the ' 'normal mechanism,\n' @@ -856,7 +856,9 @@ topics = {'assert': 'The "assert" statement\n' 'parents). In the\n' 'examples below, “the attribute” refers to the attribute ' 'whose name is\n' - 'the key of the property in the owner class’ "__dict__".\n' + 'the key of the property in the owner class’ "__dict__". ' + 'The "object"\n' + 'class itself does not implement any of these protocols.\n' '\n' 'object.__get__(self, instance, owner=None)\n' '\n' @@ -1529,7 +1531,9 @@ topics = {'assert': 'The "assert" statement\n' ' Called when the instance is “called” as a function; if ' 'this method\n' ' is defined, "x(arg1, arg2, ...)" roughly translates to\n' - ' "type(x).__call__(x, arg1, ...)".\n', + ' "type(x).__call__(x, arg1, ...)". The "object" class ' + 'itself does\n' + ' not provide this method.\n', 'calls': 'Calls\n' '*****\n' '\n' @@ -1714,6 +1718,9 @@ topics = {'assert': 'The "assert" statement\n' ' Function definitions. When the code block executes a "return"\n' ' statement, this specifies the return value of the function ' 'call.\n' + ' If execution reaches the end of the code block without executing ' + 'a\n' + ' "return" statement, the return value is "None".\n' '\n' 'a built-in function or method:\n' ' The result is up to the interpreter; see Built-in Functions for ' @@ -2762,18 +2769,15 @@ topics = {'assert': 'The "assert" statement\n' ' enter = type(manager).__enter__\n' ' exit = type(manager).__exit__\n' ' value = enter(manager)\n' - ' hit_except = False\n' '\n' ' try:\n' ' TARGET = value\n' ' SUITE\n' ' except:\n' - ' hit_except = True\n' ' if not exit(manager, *sys.exc_info()):\n' ' raise\n' - ' finally:\n' - ' if not hit_except:\n' - ' exit(manager, None, None, None)\n' + ' else:\n' + ' exit(manager, None, None, None)\n' '\n' 'With more than one item, the context managers are processed as ' 'if\n' @@ -4389,6 +4393,9 @@ topics = {'assert': 'The "assert" statement\n' '\n' 'For more information on context managers, see Context ' 'Manager Types.\n' + 'The "object" class itself does not provide the context ' + 'manager\n' + 'methods.\n' '\n' 'object.__enter__(self)\n' '\n' @@ -4658,17 +4665,20 @@ topics = {'assert': 'The "assert" statement\n' '\n' ' This is typically used for debugging, so it is important ' 'that the\n' - ' representation is information-rich and unambiguous.\n' + ' representation is information-rich and unambiguous. A ' + 'default\n' + ' implementation is provided by the "object" class ' + 'itself.\n' '\n' 'object.__str__(self)\n' '\n' - ' Called by "str(object)" and the built-in functions ' - '"format()" and\n' - ' "print()" to compute the “informal” or nicely printable ' - 'string\n' - ' representation of an object. The return value must be a ' - 'string\n' - ' object.\n' + ' Called by "str(object)", the default "__format__()" ' + 'implementation,\n' + ' and the built-in function "print()", to compute the ' + '“informal” or\n' + ' nicely printable string representation of an object. ' + 'The return\n' + ' value must be a str object.\n' '\n' ' This method differs from "object.__repr__()" in that ' 'there is no\n' @@ -4684,7 +4694,9 @@ topics = {'assert': 'The "assert" statement\n' '\n' ' Called by bytes to compute a byte-string representation ' 'of an\n' - ' object. This should return a "bytes" object.\n' + ' object. This should return a "bytes" object. The ' + '"object" class\n' + ' itself does not provide this method.\n' '\n' 'object.__format__(self, format_spec)\n' '\n' @@ -4712,6 +4724,11 @@ topics = {'assert': 'The "assert" statement\n' '\n' ' The return value must be a string object.\n' '\n' + ' The default implementation by the "object" class should ' + 'be given an\n' + ' empty *format_spec* string. It delegates to ' + '"__str__()".\n' + '\n' ' Changed in version 3.4: The __format__ method of ' '"object" itself\n' ' raises a "TypeError" if passed any non-empty string.\n' @@ -4769,6 +4786,16 @@ topics = {'assert': 'The "assert" statement\n' ' ordering operations from a single root operation, see\n' ' "functools.total_ordering()".\n' '\n' + ' By default, the "object" class provides implementations ' + 'consistent\n' + ' with Value comparisons: equality compares according to ' + 'object\n' + ' identity, and order comparisons raise "TypeError". Each ' + 'default\n' + ' method may generate these results directly, but may also ' + 'return\n' + ' "NotImplemented".\n' + '\n' ' See the paragraph on "__hash__()" for some important ' 'notes on\n' ' creating *hashable* objects which support custom ' @@ -4855,12 +4882,13 @@ topics = {'assert': 'The "assert" statement\n' '\n' ' User-defined classes have "__eq__()" and "__hash__()" ' 'methods by\n' - ' default; with them, all objects compare unequal (except ' - 'with\n' - ' themselves) and "x.__hash__()" returns an appropriate ' - 'value such\n' - ' that "x == y" implies both that "x is y" and "hash(x) == ' - 'hash(y)".\n' + ' default (inherited from the "object" class); with them, ' + 'all objects\n' + ' compare unequal (except with themselves) and ' + '"x.__hash__()" returns\n' + ' an appropriate value such that "x == y" implies both ' + 'that "x is y"\n' + ' and "hash(x) == hash(y)".\n' '\n' ' A class that overrides "__eq__()" and does not define ' '"__hash__()"\n' @@ -4931,9 +4959,9 @@ topics = {'assert': 'The "assert" statement\n' 'the object is\n' ' considered true if its result is nonzero. If a class ' 'defines\n' - ' neither "__len__()" nor "__bool__()", all its instances ' - 'are\n' - ' considered true.\n', + ' neither "__len__()" nor "__bool__()" (which is true of ' + 'the "object"\n' + ' class itself), all its instances are considered true.\n', 'debugger': '"pdb" — The Python Debugger\n' '***************************\n' '\n' @@ -6802,10 +6830,12 @@ topics = {'assert': 'The "assert" statement\n' 'printing fields |\n' '| | in the form ‘+000000120’. This alignment ' 'option is only |\n' - '| | valid for numeric types. It becomes the ' - 'default for |\n' - '| | numbers when ‘0’ immediately precedes the ' - 'field width. |\n' + '| | valid for numeric types, excluding "complex". ' + 'It becomes |\n' + '| | the default for numbers when ‘0’ immediately ' + 'precedes the |\n' + '| | field ' + 'width. |\n' '+-----------+------------------------------------------------------------+\n' '| "\'^\'" | Forces the field to be centered within the ' 'available |\n' @@ -6912,9 +6942,9 @@ topics = {'assert': 'The "assert" statement\n' 'field by a\n' 'zero ("\'0\'") character enables sign-aware zero-padding ' 'for numeric\n' - 'types. This is equivalent to a *fill* character of "\'0\'" ' - 'with an\n' - '*alignment* type of "\'=\'".\n' + 'types, excluding "complex". This is equivalent to a *fill* ' + 'character\n' + 'of "\'0\'" with an *alignment* type of "\'=\'".\n' '\n' 'Changed in version 3.10: Preceding the *width* field by ' '"\'0\'" no\n' @@ -7045,12 +7075,10 @@ topics = {'assert': 'The "assert" statement\n' 'of "6" digits |\n' ' | | after the decimal point for "float", and ' 'shows all |\n' - ' | | coefficient digits for "Decimal". If no ' - 'digits follow the |\n' - ' | | decimal point, the decimal point is also ' - 'removed unless |\n' - ' | | the "#" option is ' - 'used. |\n' + ' | | coefficient digits for "Decimal". If ' + '"p=0", the decimal |\n' + ' | | point is omitted unless the "#" option is ' + 'used. |\n' ' ' '+-----------+------------------------------------------------------------+\n' ' | "\'E\'" | Scientific notation. Same as "\'e\'" ' @@ -7069,12 +7097,10 @@ topics = {'assert': 'The "assert" statement\n' 'decimal point for |\n' ' | | "float", and uses a precision large enough ' 'to show all |\n' - ' | | coefficient digits for "Decimal". If no ' - 'digits follow the |\n' - ' | | decimal point, the decimal point is also ' - 'removed unless |\n' - ' | | the "#" option is ' - 'used. |\n' + ' | | coefficient digits for "Decimal". If ' + '"p=0", the decimal |\n' + ' | | point is omitted unless the "#" option is ' + 'used. |\n' ' ' '+-----------+------------------------------------------------------------+\n' ' | "\'F\'" | Fixed-point notation. Same as "\'f\'", ' @@ -7184,6 +7210,32 @@ topics = {'assert': 'The "assert" statement\n' ' ' '+-----------+------------------------------------------------------------+\n' '\n' + 'The result should be correctly rounded to a given precision ' + '"p" of\n' + 'digits after the decimal point. The rounding mode for ' + '"float" matches\n' + 'that of the "round()" builtin. For "Decimal", the rounding ' + 'mode of\n' + 'the current context will be used.\n' + '\n' + 'The available presentation types for "complex" are the same ' + 'as those\n' + 'for "float" ("\'%\'" is not allowed). Both the real and ' + 'imaginary\n' + 'components of a complex number are formatted as ' + 'floating-point\n' + 'numbers, according to the specified presentation type. ' + 'They are\n' + 'separated by the mandatory sign of the imaginary part, the ' + 'latter\n' + 'being terminated by a "j" suffix. If the presentation type ' + 'is\n' + 'missing, the result will match the output of "str()" ' + '(complex numbers\n' + 'with a non-zero real part are also surrounded by ' + 'parentheses),\n' + 'possibly altered by other format modifiers.\n' + '\n' '\n' 'Format examples\n' '===============\n' @@ -7577,33 +7629,17 @@ topics = {'assert': 'The "assert" statement\n' '\n' ' global_stmt ::= "global" identifier ("," identifier)*\n' '\n' - 'The "global" statement is a declaration which holds for the ' - 'entire\n' - 'current code block. It means that the listed identifiers are to ' - 'be\n' - 'interpreted as globals. It would be impossible to assign to a ' - 'global\n' - 'variable without "global", although free variables may refer to\n' - 'globals without being declared global.\n' - '\n' - 'Names listed in a "global" statement must not be used in the same ' - 'code\n' - 'block textually preceding that "global" statement.\n' - '\n' - 'Names listed in a "global" statement must not be defined as ' - 'formal\n' - 'parameters, or as targets in "with" statements or "except" ' - 'clauses, or\n' - 'in a "for" target list, "class" definition, function definition,\n' - '"import" statement, or variable annotation.\n' + 'The "global" statement causes the listed identifiers to be ' + 'interpreted\n' + 'as globals. It would be impossible to assign to a global variable\n' + 'without "global", although free variables may refer to globals ' + 'without\n' + 'being declared global.\n' '\n' - '**CPython implementation detail:** The current implementation does ' - 'not\n' - 'enforce some of these restrictions, but programs should not abuse ' - 'this\n' - 'freedom, as future implementations may enforce them or silently ' - 'change\n' - 'the meaning of the program.\n' + 'The "global" statement applies to the entire scope of a function ' + 'or\n' + 'class body. A "SyntaxError" is raised if a variable is used or\n' + 'assigned to prior to its global declaration in the scope.\n' '\n' '**Programmer’s note:** "global" is a directive to the parser. It\n' 'applies only to code parsed at the same time as the "global"\n' @@ -7690,19 +7726,16 @@ topics = {'assert': 'The "assert" statement\n' '\n' 'Within the ASCII range (U+0001..U+007F), the valid characters ' 'for\n' - 'identifiers are the same as in Python 2.x: the uppercase and ' - 'lowercase\n' - 'letters "A" through "Z", the underscore "_" and, except for ' - 'the first\n' - 'character, the digits "0" through "9".\n' - '\n' - 'Python 3.0 introduces additional characters from outside the ' - 'ASCII\n' - 'range (see **PEP 3131**). For these characters, the ' - 'classification\n' - 'uses the version of the Unicode Character Database as ' - 'included in the\n' - '"unicodedata" module.\n' + 'identifiers include the uppercase and lowercase letters "A" ' + 'through\n' + '"Z", the underscore "_" and, except for the first character, ' + 'the\n' + 'digits "0" through "9". Python 3.0 introduced additional ' + 'characters\n' + 'from outside the ASCII range (see **PEP 3131**). For these\n' + 'characters, the classification uses the version of the ' + 'Unicode\n' + 'Character Database as included in the "unicodedata" module.\n' '\n' 'Identifiers are unlimited in length. Case is significant.\n' '\n' @@ -8666,8 +8699,8 @@ topics = {'assert': 'The "assert" statement\n' 'scope,\n' 'or if there is no nonlocal scope, a "SyntaxError" is raised.\n' '\n' - 'The nonlocal statement applies to the entire scope of a function ' - 'or\n' + 'The "nonlocal" statement applies to the entire scope of a ' + 'function or\n' 'class body. A "SyntaxError" is raised if a variable is used or\n' 'assigned to prior to its nonlocal declaration in the scope.\n' '\n' @@ -9425,56 +9458,58 @@ topics = {'assert': 'The "assert" statement\n' '\n' 'The following methods can be defined to implement ' 'container objects.\n' - 'Containers usually are *sequences* (such as "lists" or ' - '"tuples") or\n' - '*mappings* (like "dictionaries"), but can represent other ' - 'containers\n' - 'as well. The first set of methods is used either to ' - 'emulate a\n' - 'sequence or to emulate a mapping; the difference is that ' - 'for a\n' - 'sequence, the allowable keys should be the integers *k* ' - 'for which "0\n' - '<= k < N" where *N* is the length of the sequence, or ' - '"slice" objects,\n' - 'which define a range of items. It is also recommended ' - 'that mappings\n' - 'provide the methods "keys()", "values()", "items()", ' - '"get()",\n' - '"clear()", "setdefault()", "pop()", "popitem()", "copy()", ' + 'None of them are provided by the "object" class itself. ' + 'Containers\n' + 'usually are *sequences* (such as "lists" or "tuples") or ' + '*mappings*\n' + '(like *dictionaries*), but can represent other containers ' + 'as well.\n' + 'The first set of methods is used either to emulate a ' + 'sequence or to\n' + 'emulate a mapping; the difference is that for a sequence, ' + 'the\n' + 'allowable keys should be the integers *k* for which "0 <= ' + 'k < N" where\n' + '*N* is the length of the sequence, or "slice" objects, ' + 'which define a\n' + 'range of items. It is also recommended that mappings ' + 'provide the\n' + 'methods "keys()", "values()", "items()", "get()", ' + '"clear()",\n' + '"setdefault()", "pop()", "popitem()", "copy()", and ' + '"update()"\n' + 'behaving similar to those for Python’s standard ' + '"dictionary" objects.\n' + 'The "collections.abc" module provides a "MutableMapping" ' + '*abstract\n' + 'base class* to help create those methods from a base set ' + 'of\n' + '"__getitem__()", "__setitem__()", "__delitem__()", and ' + '"keys()".\n' + 'Mutable sequences should provide methods "append()", ' + '"count()",\n' + '"index()", "extend()", "insert()", "pop()", "remove()", ' + '"reverse()"\n' + 'and "sort()", like Python standard "list" objects. ' + 'Finally, sequence\n' + 'types should implement addition (meaning concatenation) ' 'and\n' - '"update()" behaving similar to those for Python’s ' - 'standard\n' - '"dictionary" objects. The "collections.abc" module ' - 'provides a\n' - '"MutableMapping" *abstract base class* to help create ' - 'those methods\n' - 'from a base set of "__getitem__()", "__setitem__()", ' - '"__delitem__()",\n' - 'and "keys()". Mutable sequences should provide methods ' - '"append()",\n' - '"count()", "index()", "extend()", "insert()", "pop()", ' - '"remove()",\n' - '"reverse()" and "sort()", like Python standard "list" ' - 'objects.\n' - 'Finally, sequence types should implement addition ' - '(meaning\n' - 'concatenation) and multiplication (meaning repetition) by ' - 'defining the\n' - 'methods "__add__()", "__radd__()", "__iadd__()", ' - '"__mul__()",\n' - '"__rmul__()" and "__imul__()" described below; they should ' - 'not define\n' - 'other numerical operators. It is recommended that both ' - 'mappings and\n' - 'sequences implement the "__contains__()" method to allow ' - 'efficient use\n' - 'of the "in" operator; for mappings, "in" should search the ' - 'mapping’s\n' - 'keys; for sequences, it should search through the values. ' - 'It is\n' - 'further recommended that both mappings and sequences ' - 'implement the\n' + 'multiplication (meaning repetition) by defining the ' + 'methods\n' + '"__add__()", "__radd__()", "__iadd__()", "__mul__()", ' + '"__rmul__()" and\n' + '"__imul__()" described below; they should not define other ' + 'numerical\n' + 'operators. It is recommended that both mappings and ' + 'sequences\n' + 'implement the "__contains__()" method to allow efficient ' + 'use of the\n' + '"in" operator; for mappings, "in" should search the ' + 'mapping’s keys;\n' + 'for sequences, it should search through the values. It is ' + 'further\n' + 'recommended that both mappings and sequences implement ' + 'the\n' '"__iter__()" method to allow efficient iteration through ' 'the\n' 'container; for mappings, "__iter__()" should iterate ' @@ -10014,17 +10049,19 @@ topics = {'assert': 'The "assert" statement\n' '\n' ' This is typically used for debugging, so it is important ' 'that the\n' - ' representation is information-rich and unambiguous.\n' + ' representation is information-rich and unambiguous. A ' + 'default\n' + ' implementation is provided by the "object" class itself.\n' '\n' 'object.__str__(self)\n' '\n' - ' Called by "str(object)" and the built-in functions ' - '"format()" and\n' - ' "print()" to compute the “informal” or nicely printable ' - 'string\n' - ' representation of an object. The return value must be a ' - 'string\n' - ' object.\n' + ' Called by "str(object)", the default "__format__()" ' + 'implementation,\n' + ' and the built-in function "print()", to compute the ' + '“informal” or\n' + ' nicely printable string representation of an object. The ' + 'return\n' + ' value must be a str object.\n' '\n' ' This method differs from "object.__repr__()" in that ' 'there is no\n' @@ -10040,7 +10077,9 @@ topics = {'assert': 'The "assert" statement\n' '\n' ' Called by bytes to compute a byte-string representation ' 'of an\n' - ' object. This should return a "bytes" object.\n' + ' object. This should return a "bytes" object. The "object" ' + 'class\n' + ' itself does not provide this method.\n' '\n' 'object.__format__(self, format_spec)\n' '\n' @@ -10068,6 +10107,10 @@ topics = {'assert': 'The "assert" statement\n' '\n' ' The return value must be a string object.\n' '\n' + ' The default implementation by the "object" class should ' + 'be given an\n' + ' empty *format_spec* string. It delegates to "__str__()".\n' + '\n' ' Changed in version 3.4: The __format__ method of "object" ' 'itself\n' ' raises a "TypeError" if passed any non-empty string.\n' @@ -10125,6 +10168,16 @@ topics = {'assert': 'The "assert" statement\n' ' ordering operations from a single root operation, see\n' ' "functools.total_ordering()".\n' '\n' + ' By default, the "object" class provides implementations ' + 'consistent\n' + ' with Value comparisons: equality compares according to ' + 'object\n' + ' identity, and order comparisons raise "TypeError". Each ' + 'default\n' + ' method may generate these results directly, but may also ' + 'return\n' + ' "NotImplemented".\n' + '\n' ' See the paragraph on "__hash__()" for some important ' 'notes on\n' ' creating *hashable* objects which support custom ' @@ -10210,12 +10263,13 @@ topics = {'assert': 'The "assert" statement\n' '\n' ' User-defined classes have "__eq__()" and "__hash__()" ' 'methods by\n' - ' default; with them, all objects compare unequal (except ' - 'with\n' - ' themselves) and "x.__hash__()" returns an appropriate ' - 'value such\n' - ' that "x == y" implies both that "x is y" and "hash(x) == ' - 'hash(y)".\n' + ' default (inherited from the "object" class); with them, ' + 'all objects\n' + ' compare unequal (except with themselves) and ' + '"x.__hash__()" returns\n' + ' an appropriate value such that "x == y" implies both that ' + '"x is y"\n' + ' and "hash(x) == hash(y)".\n' '\n' ' A class that overrides "__eq__()" and does not define ' '"__hash__()"\n' @@ -10284,9 +10338,9 @@ topics = {'assert': 'The "assert" statement\n' 'object is\n' ' considered true if its result is nonzero. If a class ' 'defines\n' - ' neither "__len__()" nor "__bool__()", all its instances ' - 'are\n' - ' considered true.\n' + ' neither "__len__()" nor "__bool__()" (which is true of ' + 'the "object"\n' + ' class itself), all its instances are considered true.\n' '\n' '\n' 'Customizing attribute access\n' @@ -10310,7 +10364,8 @@ topics = {'assert': 'The "assert" statement\n' 'either\n' ' return the (computed) attribute value or raise an ' '"AttributeError"\n' - ' exception.\n' + ' exception. The "object" class itself does not provide ' + 'this method.\n' '\n' ' Note that if the attribute is found through the normal ' 'mechanism,\n' @@ -10490,7 +10545,9 @@ topics = {'assert': 'The "assert" statement\n' 'parents). In the\n' 'examples below, “the attribute” refers to the attribute ' 'whose name is\n' - 'the key of the property in the owner class’ "__dict__".\n' + 'the key of the property in the owner class’ "__dict__". The ' + '"object"\n' + 'class itself does not implement any of these protocols.\n' '\n' 'object.__get__(self, instance, owner=None)\n' '\n' @@ -11373,7 +11430,9 @@ topics = {'assert': 'The "assert" statement\n' ' Called when the instance is “called” as a function; if ' 'this method\n' ' is defined, "x(arg1, arg2, ...)" roughly translates to\n' - ' "type(x).__call__(x, arg1, ...)".\n' + ' "type(x).__call__(x, arg1, ...)". The "object" class ' + 'itself does\n' + ' not provide this method.\n' '\n' '\n' 'Emulating container types\n' @@ -11381,54 +11440,54 @@ topics = {'assert': 'The "assert" statement\n' '\n' 'The following methods can be defined to implement container ' 'objects.\n' - 'Containers usually are *sequences* (such as "lists" or ' - '"tuples") or\n' - '*mappings* (like "dictionaries"), but can represent other ' - 'containers\n' - 'as well. The first set of methods is used either to emulate ' - 'a\n' - 'sequence or to emulate a mapping; the difference is that for ' - 'a\n' - 'sequence, the allowable keys should be the integers *k* for ' - 'which "0\n' - '<= k < N" where *N* is the length of the sequence, or ' - '"slice" objects,\n' - 'which define a range of items. It is also recommended that ' - 'mappings\n' - 'provide the methods "keys()", "values()", "items()", ' - '"get()",\n' - '"clear()", "setdefault()", "pop()", "popitem()", "copy()", ' - 'and\n' - '"update()" behaving similar to those for Python’s standard\n' - '"dictionary" objects. The "collections.abc" module provides ' - 'a\n' - '"MutableMapping" *abstract base class* to help create those ' - 'methods\n' - 'from a base set of "__getitem__()", "__setitem__()", ' - '"__delitem__()",\n' - 'and "keys()". Mutable sequences should provide methods ' - '"append()",\n' - '"count()", "index()", "extend()", "insert()", "pop()", ' - '"remove()",\n' - '"reverse()" and "sort()", like Python standard "list" ' + 'None of them are provided by the "object" class itself. ' + 'Containers\n' + 'usually are *sequences* (such as "lists" or "tuples") or ' + '*mappings*\n' + '(like *dictionaries*), but can represent other containers as ' + 'well.\n' + 'The first set of methods is used either to emulate a ' + 'sequence or to\n' + 'emulate a mapping; the difference is that for a sequence, ' + 'the\n' + 'allowable keys should be the integers *k* for which "0 <= k ' + '< N" where\n' + '*N* is the length of the sequence, or "slice" objects, which ' + 'define a\n' + 'range of items. It is also recommended that mappings ' + 'provide the\n' + 'methods "keys()", "values()", "items()", "get()", ' + '"clear()",\n' + '"setdefault()", "pop()", "popitem()", "copy()", and ' + '"update()"\n' + 'behaving similar to those for Python’s standard "dictionary" ' 'objects.\n' - 'Finally, sequence types should implement addition (meaning\n' - 'concatenation) and multiplication (meaning repetition) by ' - 'defining the\n' - 'methods "__add__()", "__radd__()", "__iadd__()", ' - '"__mul__()",\n' - '"__rmul__()" and "__imul__()" described below; they should ' - 'not define\n' - 'other numerical operators. It is recommended that both ' - 'mappings and\n' - 'sequences implement the "__contains__()" method to allow ' - 'efficient use\n' - 'of the "in" operator; for mappings, "in" should search the ' - 'mapping’s\n' - 'keys; for sequences, it should search through the values. ' - 'It is\n' - 'further recommended that both mappings and sequences ' - 'implement the\n' + 'The "collections.abc" module provides a "MutableMapping" ' + '*abstract\n' + 'base class* to help create those methods from a base set of\n' + '"__getitem__()", "__setitem__()", "__delitem__()", and ' + '"keys()".\n' + 'Mutable sequences should provide methods "append()", ' + '"count()",\n' + '"index()", "extend()", "insert()", "pop()", "remove()", ' + '"reverse()"\n' + 'and "sort()", like Python standard "list" objects. Finally, ' + 'sequence\n' + 'types should implement addition (meaning concatenation) and\n' + 'multiplication (meaning repetition) by defining the methods\n' + '"__add__()", "__radd__()", "__iadd__()", "__mul__()", ' + '"__rmul__()" and\n' + '"__imul__()" described below; they should not define other ' + 'numerical\n' + 'operators. It is recommended that both mappings and ' + 'sequences\n' + 'implement the "__contains__()" method to allow efficient use ' + 'of the\n' + '"in" operator; for mappings, "in" should search the ' + 'mapping’s keys;\n' + 'for sequences, it should search through the values. It is ' + 'further\n' + 'recommended that both mappings and sequences implement the\n' '"__iter__()" method to allow efficient iteration through ' 'the\n' 'container; for mappings, "__iter__()" should iterate through ' @@ -11844,6 +11903,9 @@ topics = {'assert': 'The "assert" statement\n' '\n' 'For more information on context managers, see Context ' 'Manager Types.\n' + 'The "object" class itself does not provide the context ' + 'manager\n' + 'methods.\n' '\n' 'object.__enter__(self)\n' '\n' @@ -14348,43 +14410,254 @@ topics = {'assert': 'The "assert" statement\n' 'e.g.,\n' '"m.x = 1" is equivalent to "m.__dict__["x"] = 1".\n' '\n' - 'Predefined (writable) attributes:\n' '\n' - ' "__name__"\n' - ' The module’s name.\n' + 'Import-related attributes on module objects\n' + '-------------------------------------------\n' + '\n' + 'Module objects have the following attributes that relate to the ' + 'import\n' + 'system. When a module is created using the machinery associated ' + 'with\n' + 'the import system, these attributes are filled in based on the\n' + 'module’s *spec*, before the *loader* executes and loads the ' + 'module.\n' + '\n' + 'To create a module dynamically rather than using the import ' + 'system,\n' + 'it’s recommended to use "importlib.util.module_from_spec()", which\n' + 'will set the various import-controlled attributes to appropriate\n' + 'values. It’s also possible to use the "types.ModuleType" ' + 'constructor\n' + 'to create modules directly, but this technique is more error-prone, ' + 'as\n' + 'most attributes must be manually set on the module object after it ' + 'has\n' + 'been created when using this approach.\n' + '\n' + 'Caution:\n' + '\n' + ' With the exception of "__name__", it is **strongly** recommended\n' + ' that you rely on "__spec__" and its attributes instead of any of ' + 'the\n' + ' other individual attributes listed in this subsection. Note that\n' + ' updating an attribute on "__spec__" will not update the\n' + ' corresponding attribute on the module itself:\n' + '\n' + ' >>> import typing\n' + ' >>> typing.__name__, typing.__spec__.name\n' + " ('typing', 'typing')\n" + " >>> typing.__spec__.name = 'spelling'\n" + ' >>> typing.__name__, typing.__spec__.name\n' + " ('typing', 'spelling')\n" + " >>> typing.__name__ = 'keyboard_smashing'\n" + ' >>> typing.__name__, typing.__spec__.name\n' + " ('keyboard_smashing', 'spelling')\n" + '\n' + 'module.__name__\n' + '\n' + ' The name used to uniquely identify the module in the import ' + 'system.\n' + ' For a directly executed module, this will be set to ' + '""__main__"".\n' + '\n' + ' This attribute must be set to the fully qualified name of the\n' + ' module. It is expected to match the value of\n' + ' "module.__spec__.name".\n' + '\n' + 'module.__spec__\n' + '\n' + ' A record of the module’s import-system-related state.\n' + '\n' + ' Set to the "module spec" that was used when importing the ' + 'module.\n' + ' See Module specs for more details.\n' + '\n' + ' Added in version 3.4.\n' + '\n' + 'module.__package__\n' + '\n' + ' The *package* a module belongs to.\n' + '\n' + ' If the module is top-level (that is, not a part of any specific\n' + ' package) then the attribute should be set to "\'\'" (the empty\n' + ' string). Otherwise, it should be set to the name of the ' + 'module’s\n' + ' package (which can be equal to "module.__name__" if the module\n' + ' itself is a package). See **PEP 366** for further details.\n' + '\n' + ' This attribute is used instead of "__name__" to calculate ' + 'explicit\n' + ' relative imports for main modules. It defaults to "None" for\n' + ' modules created dynamically using the "types.ModuleType"\n' + ' constructor; use "importlib.util.module_from_spec()" instead to\n' + ' ensure the attribute is set to a "str".\n' + '\n' + ' It is **strongly** recommended that you use\n' + ' "module.__spec__.parent" instead of "module.__package__".\n' + ' "__package__" is now only used as a fallback if ' + '"__spec__.parent"\n' + ' is not set, and this fallback path is deprecated.\n' + '\n' + ' Changed in version 3.4: This attribute now defaults to "None" ' + 'for\n' + ' modules created dynamically using the "types.ModuleType"\n' + ' constructor. Previously the attribute was optional.\n' + '\n' + ' Changed in version 3.6: The value of "__package__" is expected ' + 'to\n' + ' be the same as "__spec__.parent". "__package__" is now only used ' + 'as\n' + ' a fallback during import resolution if "__spec__.parent" is not\n' + ' defined.\n' + '\n' + ' Changed in version 3.10: "ImportWarning" is raised if an import\n' + ' resolution falls back to "__package__" instead of\n' + ' "__spec__.parent".\n' + '\n' + ' Changed in version 3.12: Raise "DeprecationWarning" instead of\n' + ' "ImportWarning" when falling back to "__package__" during ' + 'import\n' + ' resolution.\n' + '\n' + 'module.__loader__\n' '\n' - ' "__doc__"\n' - ' The module’s documentation string, or "None" if unavailable.\n' + ' The *loader* object that the import machinery used to load the\n' + ' module.\n' + '\n' + ' This attribute is mostly useful for introspection, but can be ' + 'used\n' + ' for additional loader-specific functionality, for example ' + 'getting\n' + ' data associated with a loader.\n' + '\n' + ' "__loader__" defaults to "None" for modules created dynamically\n' + ' using the "types.ModuleType" constructor; use\n' + ' "importlib.util.module_from_spec()" instead to ensure the ' + 'attribute\n' + ' is set to a *loader* object.\n' '\n' - ' "__file__"\n' - ' The pathname of the file from which the module was loaded, if ' - 'it\n' - ' was loaded from a file. The "__file__" attribute may be ' - 'missing\n' - ' for certain types of modules, such as C modules that are\n' - ' statically linked into the interpreter. For extension ' + ' It is **strongly** recommended that you use\n' + ' "module.__spec__.loader" instead of "module.__loader__".\n' + '\n' + ' Changed in version 3.4: This attribute now defaults to "None" ' + 'for\n' + ' modules created dynamically using the "types.ModuleType"\n' + ' constructor. Previously the attribute was optional.\n' + '\n' + ' Deprecated since version 3.12, will be removed in version 3.16:\n' + ' Setting "__loader__" on a module while failing to set\n' + ' "__spec__.loader" is deprecated. In Python 3.16, "__loader__" ' + 'will\n' + ' cease to be set or taken into consideration by the import system ' + 'or\n' + ' the standard library.\n' + '\n' + 'module.__path__\n' + '\n' + ' A (possibly empty) *sequence* of strings enumerating the ' + 'locations\n' + ' where the package’s submodules will be found. Non-package ' 'modules\n' - ' loaded dynamically from a shared library, it’s the pathname ' - 'of\n' - ' the shared library file.\n' + ' should not have a "__path__" attribute. See __path__ attributes ' + 'on\n' + ' modules for more details.\n' + '\n' + ' It is **strongly** recommended that you use\n' + ' "module.__spec__.submodule_search_locations" instead of\n' + ' "module.__path__".\n' + '\n' + 'module.__file__\n' + '\n' + 'module.__cached__\n' + '\n' + ' "__file__" and "__cached__" are both optional attributes that ' + 'may\n' + ' or may not be set. Both attributes should be a "str" when they ' + 'are\n' + ' available.\n' + '\n' + ' "__file__" indicates the pathname of the file from which the ' + 'module\n' + ' was loaded (if loaded from a file), or the pathname of the ' + 'shared\n' + ' library file for extension modules loaded dynamically from a ' + 'shared\n' + ' library. It might be missing for certain types of modules, such ' + 'as\n' + ' C modules that are statically linked into the interpreter, and ' + 'the\n' + ' import system may opt to leave it unset if it has no semantic\n' + ' meaning (for example, a module loaded from a database).\n' + '\n' + ' If "__file__" is set then the "__cached__" attribute might also ' + 'be\n' + ' set, which is the path to any compiled version of the code ' + '(for\n' + ' example, a byte-compiled file). The file does not need to exist ' + 'to\n' + ' set this attribute; the path can simply point to where the ' + 'compiled\n' + ' file *would* exist (see **PEP 3147**).\n' + '\n' + ' Note that "__cached__" may be set even if "__file__" is not ' + 'set.\n' + ' However, that scenario is quite atypical. Ultimately, the ' + '*loader*\n' + ' is what makes use of the module spec provided by the *finder* ' + '(from\n' + ' which "__file__" and "__cached__" are derived). So if a loader ' + 'can\n' + ' load from a cached module but otherwise does not load from a ' + 'file,\n' + ' that atypical scenario may be appropriate.\n' + '\n' + ' It is **strongly** recommended that you use\n' + ' "module.__spec__.cached" instead of "module.__cached__".\n' + '\n' + '\n' + 'Other writable attributes on module objects\n' + '-------------------------------------------\n' + '\n' + 'As well as the import-related attributes listed above, module ' + 'objects\n' + 'also have the following writable attributes:\n' + '\n' + 'module.__doc__\n' + '\n' + ' The module’s documentation string, or "None" if unavailable. ' + 'See\n' + ' also: "__doc__ attributes".\n' '\n' - ' "__annotations__"\n' - ' A dictionary containing *variable annotations* collected ' - 'during\n' - ' module body execution. For best practices on working with\n' - ' "__annotations__", please see Annotations Best Practices.\n' + 'module.__annotations__\n' '\n' - 'Special read-only attribute: "__dict__" is the module’s namespace ' - 'as a\n' - 'dictionary object.\n' + ' A dictionary containing *variable annotations* collected during\n' + ' module body execution. For best practices on working with\n' + ' "__annotations__", please see Annotations Best Practices.\n' '\n' - '**CPython implementation detail:** Because of the way CPython ' - 'clears\n' - 'module dictionaries, the module dictionary will be cleared when ' + '\n' + 'Module dictionaries\n' + '-------------------\n' + '\n' + 'Module objects also have the following special read-only ' + 'attribute:\n' + '\n' + 'module.__dict__\n' + '\n' + ' The module’s namespace as a dictionary object. Uniquely among ' + 'the\n' + ' attributes listed here, "__dict__" cannot be accessed as a ' + 'global\n' + ' variable from within a module; it can only be accessed as an\n' + ' attribute on module objects.\n' + '\n' + ' **CPython implementation detail:** Because of the way CPython\n' + ' clears module dictionaries, the module dictionary will be ' + 'cleared\n' + ' when the module falls out of scope even if the dictionary still ' + 'has\n' + ' live references. To avoid this, copy the dictionary or keep ' 'the\n' - 'module falls out of scope even if the dictionary still has live\n' - 'references. To avoid this, copy the dictionary or keep the module\n' - 'around while using its dictionary directly.\n' + ' module around while using its dictionary directly.\n' '\n' '\n' 'Custom classes\n' @@ -14719,7 +14992,7 @@ topics = {'assert': 'The "assert" statement\n' '| | version ' '3.12: This attribute of code objects is |\n' '| | deprecated, ' - 'and may be removed in Python 3.14. |\n' + 'and may be removed in Python 3.15. |\n' '+----------------------------------------------------+----------------------------------------------------+\n' '| codeobject.co_stacksize | The required ' 'stack size of the code object |\n' @@ -15174,21 +15447,23 @@ topics = {'assert': 'The "assert" statement\n' '\n' ' If no positional argument is given, an empty dictionary ' 'is created.\n' - ' If a positional argument is given and it is a mapping ' - 'object, a\n' - ' dictionary is created with the same key-value pairs as ' - 'the mapping\n' - ' object. Otherwise, the positional argument must be an ' - '*iterable*\n' - ' object. Each item in the iterable must itself be an ' - 'iterable with\n' - ' exactly two objects. The first object of each item ' - 'becomes a key\n' - ' in the new dictionary, and the second object the ' - 'corresponding\n' - ' value. If a key occurs more than once, the last value ' - 'for that key\n' - ' becomes the corresponding value in the new dictionary.\n' + ' If a positional argument is given and it defines a ' + '"keys()" method,\n' + ' a dictionary is created by calling "__getitem__()" on the ' + 'argument\n' + ' with each returned key from the method. Otherwise, the ' + 'positional\n' + ' argument must be an *iterable* object. Each item in the ' + 'iterable\n' + ' must itself be an iterable with exactly two elements. ' + 'The first\n' + ' element of each item becomes a key in the new dictionary, ' + 'and the\n' + ' second element the corresponding value. If a key occurs ' + 'more than\n' + ' once, the last value for that key becomes the ' + 'corresponding value\n' + ' in the new dictionary.\n' '\n' ' If keyword arguments are given, the keyword arguments and ' 'their\n' @@ -15383,15 +15658,17 @@ topics = {'assert': 'The "assert" statement\n' '*other*,\n' ' overwriting existing keys. Return "None".\n' '\n' - ' "update()" accepts either another dictionary object or ' - 'an\n' - ' iterable of key/value pairs (as tuples or other ' - 'iterables of\n' - ' length two). If keyword arguments are specified, the ' - 'dictionary\n' - ' is then updated with those key/value pairs: ' - '"d.update(red=1,\n' - ' blue=2)".\n' + ' "update()" accepts either another object with a ' + '"keys()" method\n' + ' (in which case "__getitem__()" is called with every ' + 'key returned\n' + ' from the method) or an iterable of key/value pairs (as ' + 'tuples or\n' + ' other iterables of length two). If keyword arguments ' + 'are\n' + ' specified, the dictionary is then updated with those ' + 'key/value\n' + ' pairs: "d.update(red=1, blue=2)".\n' '\n' ' values()\n' '\n' @@ -16699,18 +16976,15 @@ topics = {'assert': 'The "assert" statement\n' ' enter = type(manager).__enter__\n' ' exit = type(manager).__exit__\n' ' value = enter(manager)\n' - ' hit_except = False\n' '\n' ' try:\n' ' TARGET = value\n' ' SUITE\n' ' except:\n' - ' hit_except = True\n' ' if not exit(manager, *sys.exc_info()):\n' ' raise\n' - ' finally:\n' - ' if not hit_except:\n' - ' exit(manager, None, None, None)\n' + ' else:\n' + ' exit(manager, None, None, None)\n' '\n' 'With more than one item, the context managers are processed as if\n' 'multiple "with" statements were nested:\n' @@ -16751,7 +17025,8 @@ topics = {'assert': 'The "assert" statement\n' '\n' 'A "yield" statement is semantically equivalent to a yield ' 'expression.\n' - 'The yield statement can be used to omit the parentheses that would\n' + 'The "yield" statement can be used to omit the parentheses that ' + 'would\n' 'otherwise be required in the equivalent yield expression ' 'statement.\n' 'For example, the yield statements\n' @@ -16767,10 +17042,9 @@ topics = {'assert': 'The "assert" statement\n' 'Yield expressions and statements are only used when defining a\n' '*generator* function, and are only used in the body of the ' 'generator\n' - 'function. Using yield in a function definition is sufficient to ' - 'cause\n' - 'that definition to create a generator function instead of a normal\n' - 'function.\n' + 'function. Using "yield" in a function definition is sufficient to\n' + 'cause that definition to create a generator function instead of a\n' + 'normal function.\n' '\n' 'For full details of "yield" semantics, refer to the Yield ' 'expressions\n' diff --git a/contrib/tools/python3/Lib/re/_compiler.py b/contrib/tools/python3/Lib/re/_compiler.py index 285c21936f..bb97f9fdd1 100644 --- a/contrib/tools/python3/Lib/re/_compiler.py +++ b/contrib/tools/python3/Lib/re/_compiler.py @@ -250,11 +250,11 @@ def _optimize_charset(charset, iscased=None, fixup=None, fixes=None): while True: try: if op is LITERAL: - if fixup: - lo = fixup(av) - charmap[lo] = 1 - if fixes and lo in fixes: - for k in fixes[lo]: + if fixup: # IGNORECASE and not LOCALE + av = fixup(av) + charmap[av] = 1 + if fixes and av in fixes: + for k in fixes[av]: charmap[k] = 1 if not hascased and iscased(av): hascased = True @@ -262,7 +262,7 @@ def _optimize_charset(charset, iscased=None, fixup=None, fixes=None): charmap[av] = 1 elif op is RANGE: r = range(av[0], av[1]+1) - if fixup: + if fixup: # IGNORECASE and not LOCALE if fixes: for i in map(fixup, r): charmap[i] = 1 @@ -289,8 +289,7 @@ def _optimize_charset(charset, iscased=None, fixup=None, fixes=None): # Character set contains non-BMP character codes. # For range, all BMP characters in the range are already # proceeded. - if fixup: - hascased = True + if fixup: # IGNORECASE and not LOCALE # For now, IN_UNI_IGNORE+LITERAL and # IN_UNI_IGNORE+RANGE_UNI_IGNORE work for all non-BMP # characters, because two characters (at least one of @@ -301,7 +300,13 @@ def _optimize_charset(charset, iscased=None, fixup=None, fixes=None): # Also, both c.lower() and c.lower().upper() are single # characters for every non-BMP character. if op is RANGE: - op = RANGE_UNI_IGNORE + if fixes: # not ASCII + op = RANGE_UNI_IGNORE + hascased = True + else: + assert op is LITERAL + if not hascased and iscased(av): + hascased = True tail.append((op, av)) break diff --git a/contrib/tools/python3/Lib/reprlib.py b/contrib/tools/python3/Lib/reprlib.py index a7b37630a4..85c1b94a0e 100644 --- a/contrib/tools/python3/Lib/reprlib.py +++ b/contrib/tools/python3/Lib/reprlib.py @@ -35,6 +35,17 @@ def recursive_repr(fillvalue='...'): return decorating_function class Repr: + _lookup = { + 'tuple': 'builtins', + 'list': 'builtins', + 'array': 'array', + 'set': 'builtins', + 'frozenset': 'builtins', + 'deque': 'collections', + 'dict': 'builtins', + 'str': 'builtins', + 'int': 'builtins' + } def __init__( self, *, maxlevel=6, maxtuple=6, maxlist=6, maxarray=5, maxdict=4, @@ -59,14 +70,24 @@ class Repr: return self.repr1(x, self.maxlevel) def repr1(self, x, level): - typename = type(x).__name__ + cls = type(x) + typename = cls.__name__ + if ' ' in typename: parts = typename.split() typename = '_'.join(parts) - if hasattr(self, 'repr_' + typename): - return getattr(self, 'repr_' + typename)(x, level) - else: - return self.repr_instance(x, level) + + method = getattr(self, 'repr_' + typename, None) + if method: + # not defined in this class + if typename not in self._lookup: + return method(x, level) + module = getattr(cls, '__module__', None) + # defined in this class and is the module intended + if module == self._lookup[typename]: + return method(x, level) + + return self.repr_instance(x, level) def _join(self, pieces, level): if self.indent is None: diff --git a/contrib/tools/python3/Lib/shutil.py b/contrib/tools/python3/Lib/shutil.py index 20ad1cb568..2d28569128 100644 --- a/contrib/tools/python3/Lib/shutil.py +++ b/contrib/tools/python3/Lib/shutil.py @@ -1534,21 +1534,21 @@ def which(cmd, mode=os.F_OK | os.X_OK, path=None): if sys.platform == "win32": # PATHEXT is necessary to check on Windows. pathext_source = os.getenv("PATHEXT") or _WIN_DEFAULT_PATHEXT - pathext = [ext for ext in pathext_source.split(os.pathsep) if ext] + pathext = pathext_source.split(os.pathsep) + pathext = [ext.rstrip('.') for ext in pathext if ext] if use_bytes: pathext = [os.fsencode(ext) for ext in pathext] - files = ([cmd] + [cmd + ext for ext in pathext]) + files = [cmd + ext for ext in pathext] - # gh-109590. If we are looking for an executable, we need to look - # for a PATHEXT match. The first cmd is the direct match - # (e.g. python.exe instead of python) - # Check that direct match first if and only if the extension is in PATHEXT - # Otherwise check it last - suffix = os.path.splitext(files[0])[1].upper() - if mode & os.X_OK and not any(suffix == ext.upper() for ext in pathext): - files.append(files.pop(0)) + # If X_OK in mode, simulate the cmd.exe behavior: look at direct + # match if and only if the extension is in PATHEXT. + # If X_OK not in mode, simulate the first result of where.exe: + # always look at direct match before a PATHEXT match. + normcmd = cmd.upper() + if not (mode & os.X_OK) or any(normcmd.endswith(ext.upper()) for ext in pathext): + files.insert(0, cmd) else: # On other platforms you don't have things like PATHEXT to tell you # what file suffixes are executable, so just pass on cmd as-is. @@ -1557,7 +1557,7 @@ def which(cmd, mode=os.F_OK | os.X_OK, path=None): seen = set() for dir in path: normdir = os.path.normcase(dir) - if not normdir in seen: + if normdir not in seen: seen.add(normdir) for thefile in files: name = os.path.join(dir, thefile) diff --git a/contrib/tools/python3/Lib/site.py b/contrib/tools/python3/Lib/site.py index a2ef1bbacd..5eeec5100f 100644 --- a/contrib/tools/python3/Lib/site.py +++ b/contrib/tools/python3/Lib/site.py @@ -426,8 +426,9 @@ def setcopyright(): """Set 'copyright' and 'credits' in builtins""" builtins.copyright = _sitebuiltins._Printer("copyright", sys.copyright) builtins.credits = _sitebuiltins._Printer("credits", """\ - Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands - for supporting Python development. See www.python.org for more information.""") + Thanks to CWI, CNRI, BeOpen, Zope Corporation, the Python Software + Foundation, and a cast of thousands for supporting Python + development. See www.python.org for more information.""") files, dirs = [], [] # Not all modules are required to have a __file__ attribute. See # PEP 420 for more details. diff --git a/contrib/tools/python3/Lib/sysconfig.py b/contrib/tools/python3/Lib/sysconfig.py index 4fd5fbaab5..9bb81e7842 100644 --- a/contrib/tools/python3/Lib/sysconfig.py +++ b/contrib/tools/python3/Lib/sysconfig.py @@ -169,9 +169,7 @@ _SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include', _PY_VERSION = sys.version.split()[0] _PY_VERSION_SHORT = f'{sys.version_info[0]}.{sys.version_info[1]}' _PY_VERSION_SHORT_NO_DOT = f'{sys.version_info[0]}{sys.version_info[1]}' -_PREFIX = os.path.normpath(sys.prefix) _BASE_PREFIX = os.path.normpath(sys.base_prefix) -_EXEC_PREFIX = os.path.normpath(sys.exec_prefix) _BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix) # Mutex guarding initialization of _CONFIG_VARS. _CONFIG_VARS_LOCK = threading.RLock() @@ -642,8 +640,10 @@ def _init_config_vars(): # Normalized versions of prefix and exec_prefix are handy to have; # in fact, these are the standard versions used most places in the # Distutils. - _CONFIG_VARS['prefix'] = _PREFIX - _CONFIG_VARS['exec_prefix'] = _EXEC_PREFIX + _PREFIX = os.path.normpath(sys.prefix) + _EXEC_PREFIX = os.path.normpath(sys.exec_prefix) + _CONFIG_VARS['prefix'] = _PREFIX # FIXME: This gets overwriten by _init_posix. + _CONFIG_VARS['exec_prefix'] = _EXEC_PREFIX # FIXME: This gets overwriten by _init_posix. _CONFIG_VARS['py_version'] = _PY_VERSION _CONFIG_VARS['py_version_short'] = _PY_VERSION_SHORT _CONFIG_VARS['py_version_nodot'] = _PY_VERSION_SHORT_NO_DOT @@ -711,6 +711,7 @@ def get_config_vars(*args): With arguments, return a list of values that result from looking up each argument in the configuration variable dictionary. """ + global _CONFIG_VARS_INITIALIZED # Avoid claiming the lock once initialization is complete. if not _CONFIG_VARS_INITIALIZED: @@ -721,6 +722,15 @@ def get_config_vars(*args): # don't re-enter init_config_vars(). if _CONFIG_VARS is None: _init_config_vars() + else: + # If the site module initialization happened after _CONFIG_VARS was + # initialized, a virtual environment might have been activated, resulting in + # variables like sys.prefix changing their value, so we need to re-init the + # config vars (see GH-126789). + if _CONFIG_VARS['base'] != os.path.normpath(sys.prefix): + with _CONFIG_VARS_LOCK: + _CONFIG_VARS_INITIALIZED = False + _init_config_vars() if args: vals = [] diff --git a/contrib/tools/python3/Lib/token.py b/contrib/tools/python3/Lib/token.py index 487f6edd3c..e26d36bd64 100644 --- a/contrib/tools/python3/Lib/token.py +++ b/contrib/tools/python3/Lib/token.py @@ -1,7 +1,8 @@ """Token constants.""" # Auto-generated by Tools/build/generate_token.py -__all__ = ['tok_name', 'ISTERMINAL', 'ISNONTERMINAL', 'ISEOF'] +__all__ = ['tok_name', 'ISTERMINAL', 'ISNONTERMINAL', 'ISEOF', + 'EXACT_TOKEN_TYPES'] ENDMARKER = 0 NAME = 1 diff --git a/contrib/tools/python3/Lib/tokenize.py b/contrib/tools/python3/Lib/tokenize.py index 7af7a5cc1c..b2dff8e696 100644 --- a/contrib/tools/python3/Lib/tokenize.py +++ b/contrib/tools/python3/Lib/tokenize.py @@ -202,7 +202,7 @@ class Untokenizer: characters[-2::-1] ) ) - if n_backslashes % 2 == 0: + if n_backslashes % 2 == 0 or characters[-1] != "N": characters.append(character) else: consume_until_next_bracket = True diff --git a/contrib/tools/python3/Lib/typing.py b/contrib/tools/python3/Lib/typing.py index 94c211292e..a271416d46 100644 --- a/contrib/tools/python3/Lib/typing.py +++ b/contrib/tools/python3/Lib/typing.py @@ -1815,7 +1815,8 @@ def _allow_reckless_class_checks(depth=2): _PROTO_ALLOWLIST = { 'collections.abc': [ 'Callable', 'Awaitable', 'Iterable', 'Iterator', 'AsyncIterable', - 'Hashable', 'Sized', 'Container', 'Collection', 'Reversible', 'Buffer', + 'AsyncIterator', 'Hashable', 'Sized', 'Container', 'Collection', + 'Reversible', 'Buffer', ], 'contextlib': ['AbstractContextManager', 'AbstractAsyncContextManager'], } diff --git a/contrib/tools/python3/Lib/unittest/async_case.py b/contrib/tools/python3/Lib/unittest/async_case.py index bd2a471156..2abfb79079 100644 --- a/contrib/tools/python3/Lib/unittest/async_case.py +++ b/contrib/tools/python3/Lib/unittest/async_case.py @@ -5,6 +5,7 @@ import warnings from .case import TestCase +__unittest = True class IsolatedAsyncioTestCase(TestCase): # Names intentionally have a long prefix diff --git a/contrib/tools/python3/Lib/unittest/mock.py b/contrib/tools/python3/Lib/unittest/mock.py index 3e9791b22d..c4ce8f8a3e 100644 --- a/contrib/tools/python3/Lib/unittest/mock.py +++ b/contrib/tools/python3/Lib/unittest/mock.py @@ -1329,6 +1329,7 @@ class _patch(object): self.autospec = autospec self.kwargs = kwargs self.additional_patchers = [] + self.is_started = False def copy(self): @@ -1441,6 +1442,9 @@ class _patch(object): def __enter__(self): """Perform the patch.""" + if self.is_started: + raise RuntimeError("Patch is already started") + new, spec, spec_set = self.new, self.spec, self.spec_set autospec, kwargs = self.autospec, self.kwargs new_callable = self.new_callable @@ -1572,6 +1576,7 @@ class _patch(object): self.temp_original = original self.is_local = local self._exit_stack = contextlib.ExitStack() + self.is_started = True try: setattr(self.target, self.attribute, new_attr) if self.attribute_name is not None: @@ -1591,6 +1596,9 @@ class _patch(object): def __exit__(self, *exc_info): """Undo the patch.""" + if not self.is_started: + return + if self.is_local and self.temp_original is not DEFAULT: setattr(self.target, self.attribute, self.temp_original) else: @@ -1607,6 +1615,7 @@ class _patch(object): del self.target exit_stack = self._exit_stack del self._exit_stack + self.is_started = False return exit_stack.__exit__(*exc_info) diff --git a/contrib/tools/python3/Lib/urllib/request.py b/contrib/tools/python3/Lib/urllib/request.py index 7228a35534..9a559f4415 100644 --- a/contrib/tools/python3/Lib/urllib/request.py +++ b/contrib/tools/python3/Lib/urllib/request.py @@ -1681,12 +1681,27 @@ else: def url2pathname(pathname): """OS-specific conversion from a relative URL of the 'file' scheme to a file system path; not recommended for general use.""" - return unquote(pathname) + if pathname[:3] == '///': + # URL has an empty authority section, so the path begins on the + # third character. + pathname = pathname[2:] + elif pathname[:12] == '//localhost/': + # Skip past 'localhost' authority. + pathname = pathname[11:] + encoding = sys.getfilesystemencoding() + errors = sys.getfilesystemencodeerrors() + return unquote(pathname, encoding=encoding, errors=errors) def pathname2url(pathname): """OS-specific conversion from a file system path to a relative URL of the 'file' scheme; not recommended for general use.""" - return quote(pathname) + if pathname[:2] == '//': + # Add explicitly empty authority to avoid interpreting the path + # as authority. + pathname = '//' + pathname + encoding = sys.getfilesystemencoding() + errors = sys.getfilesystemencodeerrors() + return quote(pathname, encoding=encoding, errors=errors) ftpcache = {} diff --git a/contrib/tools/python3/Lib/venv/__init__.py b/contrib/tools/python3/Lib/venv/__init__.py index d5dec4ab44..aeb522c319 100644 --- a/contrib/tools/python3/Lib/venv/__init__.py +++ b/contrib/tools/python3/Lib/venv/__init__.py @@ -11,6 +11,7 @@ import subprocess import sys import sysconfig import types +import shlex CORE_VENV_DEPS = ('pip',) @@ -422,11 +423,41 @@ class EnvBuilder: :param context: The information for the environment creation request being processed. """ - text = text.replace('__VENV_DIR__', context.env_dir) - text = text.replace('__VENV_NAME__', context.env_name) - text = text.replace('__VENV_PROMPT__', context.prompt) - text = text.replace('__VENV_BIN_NAME__', context.bin_name) - text = text.replace('__VENV_PYTHON__', context.env_exe) + replacements = { + '__VENV_DIR__': context.env_dir, + '__VENV_NAME__': context.env_name, + '__VENV_PROMPT__': context.prompt, + '__VENV_BIN_NAME__': context.bin_name, + '__VENV_PYTHON__': context.env_exe, + } + + def quote_ps1(s): + """ + This should satisfy PowerShell quoting rules [1], unless the quoted + string is passed directly to Windows native commands [2]. + [1]: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules + [2]: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_parsing#passing-arguments-that-contain-quote-characters + """ + s = s.replace("'", "''") + return f"'{s}'" + + def quote_bat(s): + return s + + # gh-124651: need to quote the template strings properly + quote = shlex.quote + script_path = context.script_path + if script_path.endswith('.ps1'): + quote = quote_ps1 + elif script_path.endswith('.bat'): + quote = quote_bat + else: + # fallbacks to POSIX shell compliant quote + quote = shlex.quote + + replacements = {key: quote(s) for key, s in replacements.items()} + for key, quoted in replacements.items(): + text = text.replace(key, quoted) return text def install_scripts(self, context, path): @@ -466,6 +497,7 @@ class EnvBuilder: with open(srcfile, 'rb') as f: data = f.read() if not srcfile.endswith(('.exe', '.pdb')): + context.script_path = srcfile try: data = data.decode('utf-8') data = self.replace_variables(data, context) diff --git a/contrib/tools/python3/Lib/venv/scripts/common/activate b/contrib/tools/python3/Lib/venv/scripts/common/activate index d5914e0cbb..74825877c3 100644 --- a/contrib/tools/python3/Lib/venv/scripts/common/activate +++ b/contrib/tools/python3/Lib/venv/scripts/common/activate @@ -14,8 +14,9 @@ deactivate () { unset _OLD_VIRTUAL_PYTHONHOME fi - # Call hash to forget past commands. Without forgetting - # past commands the $PATH changes we made may not be respected + # Call hash to forget past locations. Without forgetting + # past locations the $PATH changes we made may not be respected. + # See "man bash" for more details. hash is usually a builtin of your shell hash -r 2> /dev/null if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then @@ -39,14 +40,14 @@ deactivate nondestructive if [ "${OSTYPE:-}" = "cygwin" ] || [ "${OSTYPE:-}" = "msys" ] ; then # transform D:\path\to\venv to /d/path/to/venv on MSYS # and to /cygdrive/d/path/to/venv on Cygwin - export VIRTUAL_ENV=$(cygpath "__VENV_DIR__") + export VIRTUAL_ENV=$(cygpath __VENV_DIR__) else # use the path as-is - export VIRTUAL_ENV="__VENV_DIR__" + export VIRTUAL_ENV=__VENV_DIR__ fi _OLD_VIRTUAL_PATH="$PATH" -PATH="$VIRTUAL_ENV/__VENV_BIN_NAME__:$PATH" +PATH="$VIRTUAL_ENV/"__VENV_BIN_NAME__":$PATH" export PATH # unset PYTHONHOME if set @@ -59,9 +60,9 @@ fi if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then _OLD_VIRTUAL_PS1="${PS1:-}" - PS1="__VENV_PROMPT__${PS1:-}" + PS1=__VENV_PROMPT__"${PS1:-}" export PS1 - VIRTUAL_ENV_PROMPT="__VENV_PROMPT__" + VIRTUAL_ENV_PROMPT=__VENV_PROMPT__ export VIRTUAL_ENV_PROMPT fi diff --git a/contrib/tools/python3/Lib/venv/scripts/nt/activate.bat b/contrib/tools/python3/Lib/venv/scripts/nt/activate.bat index 5daa45afc9..c2c6dd29fe 100644 --- a/contrib/tools/python3/Lib/venv/scripts/nt/activate.bat +++ b/contrib/tools/python3/Lib/venv/scripts/nt/activate.bat @@ -8,7 +8,7 @@ if defined _OLD_CODEPAGE ( "%SystemRoot%\System32\chcp.com" 65001 > nul
)
-set VIRTUAL_ENV=__VENV_DIR__
+set "VIRTUAL_ENV=__VENV_DIR__"
if not defined PROMPT set PROMPT=$P$G
@@ -24,8 +24,8 @@ set PYTHONHOME= if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH%
if not defined _OLD_VIRTUAL_PATH set _OLD_VIRTUAL_PATH=%PATH%
-set PATH=%VIRTUAL_ENV%\__VENV_BIN_NAME__;%PATH%
-set VIRTUAL_ENV_PROMPT=__VENV_PROMPT__
+set "PATH=%VIRTUAL_ENV%\__VENV_BIN_NAME__;%PATH%"
+set "VIRTUAL_ENV_PROMPT=__VENV_PROMPT__"
:END
if defined _OLD_CODEPAGE (
diff --git a/contrib/tools/python3/Lib/venv/scripts/posix/activate.csh b/contrib/tools/python3/Lib/venv/scripts/posix/activate.csh index 5e8d66fa9e..08f79296f5 100644 --- a/contrib/tools/python3/Lib/venv/scripts/posix/activate.csh +++ b/contrib/tools/python3/Lib/venv/scripts/posix/activate.csh @@ -9,17 +9,17 @@ alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PA # Unset irrelevant variables. deactivate nondestructive -setenv VIRTUAL_ENV "__VENV_DIR__" +setenv VIRTUAL_ENV __VENV_DIR__ set _OLD_VIRTUAL_PATH="$PATH" -setenv PATH "$VIRTUAL_ENV/__VENV_BIN_NAME__:$PATH" +setenv PATH "$VIRTUAL_ENV/"__VENV_BIN_NAME__":$PATH" set _OLD_VIRTUAL_PROMPT="$prompt" if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then - set prompt = "__VENV_PROMPT__$prompt" - setenv VIRTUAL_ENV_PROMPT "__VENV_PROMPT__" + set prompt = __VENV_PROMPT__"$prompt" + setenv VIRTUAL_ENV_PROMPT __VENV_PROMPT__ endif alias pydoc python -m pydoc diff --git a/contrib/tools/python3/Lib/venv/scripts/posix/activate.fish b/contrib/tools/python3/Lib/venv/scripts/posix/activate.fish index 91ad6442e0..508cab0db4 100644 --- a/contrib/tools/python3/Lib/venv/scripts/posix/activate.fish +++ b/contrib/tools/python3/Lib/venv/scripts/posix/activate.fish @@ -33,10 +33,10 @@ end # Unset irrelevant variables. deactivate nondestructive -set -gx VIRTUAL_ENV "__VENV_DIR__" +set -gx VIRTUAL_ENV __VENV_DIR__ set -gx _OLD_VIRTUAL_PATH $PATH -set -gx PATH "$VIRTUAL_ENV/__VENV_BIN_NAME__" $PATH +set -gx PATH "$VIRTUAL_ENV/"__VENV_BIN_NAME__ $PATH # Unset PYTHONHOME if set. if set -q PYTHONHOME @@ -56,7 +56,7 @@ if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" set -l old_status $status # Output the venv prompt; color taken from the blue of the Python logo. - printf "%s%s%s" (set_color 4B8BBE) "__VENV_PROMPT__" (set_color normal) + printf "%s%s%s" (set_color 4B8BBE) __VENV_PROMPT__ (set_color normal) # Restore the return status of the previous command. echo "exit $old_status" | . @@ -65,5 +65,5 @@ if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" end set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" - set -gx VIRTUAL_ENV_PROMPT "__VENV_PROMPT__" + set -gx VIRTUAL_ENV_PROMPT __VENV_PROMPT__ end diff --git a/contrib/tools/python3/Lib/ya.make b/contrib/tools/python3/Lib/ya.make index 30bec98478..ba53fefab3 100644 --- a/contrib/tools/python3/Lib/ya.make +++ b/contrib/tools/python3/Lib/ya.make @@ -4,9 +4,9 @@ ENABLE(PYBUILD_NO_PY) PY3_LIBRARY() -VERSION(3.12.7) +VERSION(3.12.8) -ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.7.tar.gz) +ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.8.tar.gz) LICENSE(Python-2.0) diff --git a/contrib/tools/python3/Lib/zipfile/__init__.py b/contrib/tools/python3/Lib/zipfile/__init__.py index 91358156bc..cf71c6dba2 100644 --- a/contrib/tools/python3/Lib/zipfile/__init__.py +++ b/contrib/tools/python3/Lib/zipfile/__init__.py @@ -295,7 +295,7 @@ def _EndRecData(fpin): fpin.seek(-sizeEndCentDir, 2) except OSError: return None - data = fpin.read() + data = fpin.read(sizeEndCentDir) if (len(data) == sizeEndCentDir and data[0:4] == stringEndArchive and data[-2:] == b"\000\000"): @@ -315,9 +315,9 @@ def _EndRecData(fpin): # record signature. The comment is the last item in the ZIP file and may be # up to 64K long. It is assumed that the "end of central directory" magic # number does not appear in the comment. - maxCommentStart = max(filesize - (1 << 16) - sizeEndCentDir, 0) + maxCommentStart = max(filesize - ZIP_MAX_COMMENT - sizeEndCentDir, 0) fpin.seek(maxCommentStart, 0) - data = fpin.read() + data = fpin.read(ZIP_MAX_COMMENT + sizeEndCentDir) start = data.rfind(stringEndArchive) if start >= 0: # found the magic number; attempt to unpack and interpret diff --git a/contrib/tools/python3/Lib/zipfile/_path/__init__.py b/contrib/tools/python3/Lib/zipfile/_path/__init__.py index 8db5ef18d7..645cfafdd6 100644 --- a/contrib/tools/python3/Lib/zipfile/_path/__init__.py +++ b/contrib/tools/python3/Lib/zipfile/_path/__init__.py @@ -303,7 +303,7 @@ class Path: if self.is_dir(): raise IsADirectoryError(self) zip_mode = mode[0] - if not self.exists() and zip_mode == 'r': + if zip_mode == 'r' and not self.exists(): raise FileNotFoundError(self) stream = self.root.open(self.at, zip_mode, pwd=pwd) if 'b' in mode: diff --git a/contrib/tools/python3/Modules/_asynciomodule.c b/contrib/tools/python3/Modules/_asynciomodule.c index da44bb6b71..2356b708ee 100644 --- a/contrib/tools/python3/Modules/_asynciomodule.c +++ b/contrib/tools/python3/Modules/_asynciomodule.c @@ -430,18 +430,22 @@ future_ensure_alive(FutureObj *fut) static int future_schedule_callbacks(asyncio_state *state, FutureObj *fut) { - Py_ssize_t len; - Py_ssize_t i; - if (fut->fut_callback0 != NULL) { /* There's a 1st callback */ - int ret = call_soon(state, - fut->fut_loop, fut->fut_callback0, - (PyObject *)fut, fut->fut_context0); - - Py_CLEAR(fut->fut_callback0); - Py_CLEAR(fut->fut_context0); + // Beware: An evil call_soon could alter fut_callback0 or fut_context0. + // Since we are anyway clearing them after the call, whether call_soon + // succeeds or not, the idea is to transfer ownership so that external + // code is not able to alter them during the call. + PyObject *fut_callback0 = fut->fut_callback0; + fut->fut_callback0 = NULL; + PyObject *fut_context0 = fut->fut_context0; + fut->fut_context0 = NULL; + + int ret = call_soon(state, fut->fut_loop, fut_callback0, + (PyObject *)fut, fut_context0); + Py_CLEAR(fut_callback0); + Py_CLEAR(fut_context0); if (ret) { /* If an error occurs in pure-Python implementation, all callbacks are cleared. */ @@ -458,27 +462,25 @@ future_schedule_callbacks(asyncio_state *state, FutureObj *fut) return 0; } - len = PyList_GET_SIZE(fut->fut_callbacks); - if (len == 0) { - /* The list of callbacks was empty; clear it and return. */ - Py_CLEAR(fut->fut_callbacks); - return 0; - } - - for (i = 0; i < len; i++) { - PyObject *cb_tup = PyList_GET_ITEM(fut->fut_callbacks, i); + // Beware: An evil call_soon could change fut->fut_callbacks. + // The idea is to transfer the ownership of the callbacks list + // so that external code is not able to mutate the list during + // the iteration. + PyObject *callbacks = fut->fut_callbacks; + fut->fut_callbacks = NULL; + Py_ssize_t n = PyList_GET_SIZE(callbacks); + for (Py_ssize_t i = 0; i < n; i++) { + assert(PyList_GET_SIZE(callbacks) == n); + PyObject *cb_tup = PyList_GET_ITEM(callbacks, i); PyObject *cb = PyTuple_GET_ITEM(cb_tup, 0); PyObject *ctx = PyTuple_GET_ITEM(cb_tup, 1); if (call_soon(state, fut->fut_loop, cb, (PyObject *)fut, ctx)) { - /* If an error occurs in pure-Python implementation, - all callbacks are cleared. */ - Py_CLEAR(fut->fut_callbacks); + Py_DECREF(callbacks); return -1; } } - - Py_CLEAR(fut->fut_callbacks); + Py_DECREF(callbacks); return 0; } @@ -1042,7 +1044,12 @@ _asyncio_Future_remove_done_callback_impl(FutureObj *self, PyTypeObject *cls, ENSURE_FUTURE_ALIVE(state, self) if (self->fut_callback0 != NULL) { - int cmp = PyObject_RichCompareBool(self->fut_callback0, fn, Py_EQ); + // Beware: An evil PyObject_RichCompareBool could free fut_callback0 + // before a recursive call is made with that same arg. For details, see + // https://github.com/python/cpython/pull/125967#discussion_r1816593340. + PyObject *fut_callback0 = Py_NewRef(self->fut_callback0); + int cmp = PyObject_RichCompareBool(fut_callback0, fn, Py_EQ); + Py_DECREF(fut_callback0); if (cmp == -1) { return NULL; } @@ -1066,8 +1073,10 @@ _asyncio_Future_remove_done_callback_impl(FutureObj *self, PyTypeObject *cls, if (len == 1) { PyObject *cb_tup = PyList_GET_ITEM(self->fut_callbacks, 0); + Py_INCREF(cb_tup); int cmp = PyObject_RichCompareBool( PyTuple_GET_ITEM(cb_tup, 0), fn, Py_EQ); + Py_DECREF(cb_tup); if (cmp == -1) { return NULL; } @@ -1290,52 +1299,49 @@ static PyObject * FutureObj_get_callbacks(FutureObj *fut, void *Py_UNUSED(ignored)) { asyncio_state *state = get_asyncio_state_by_def((PyObject *)fut); - Py_ssize_t i; - ENSURE_FUTURE_ALIVE(state, fut) - if (fut->fut_callback0 == NULL) { - if (fut->fut_callbacks == NULL) { - Py_RETURN_NONE; - } - - return Py_NewRef(fut->fut_callbacks); + Py_ssize_t len = 0; + if (fut->fut_callback0 != NULL) { + len++; } - - Py_ssize_t len = 1; if (fut->fut_callbacks != NULL) { len += PyList_GET_SIZE(fut->fut_callbacks); } - - PyObject *new_list = PyList_New(len); - if (new_list == NULL) { - return NULL; + if (len == 0) { + Py_RETURN_NONE; } - PyObject *tup0 = PyTuple_New(2); - if (tup0 == NULL) { - Py_DECREF(new_list); + PyObject *callbacks = PyList_New(len); + if (callbacks == NULL) { return NULL; } - Py_INCREF(fut->fut_callback0); - PyTuple_SET_ITEM(tup0, 0, fut->fut_callback0); - assert(fut->fut_context0 != NULL); - Py_INCREF(fut->fut_context0); - PyTuple_SET_ITEM(tup0, 1, (PyObject *)fut->fut_context0); - - PyList_SET_ITEM(new_list, 0, tup0); + Py_ssize_t i = 0; + if (fut->fut_callback0 != NULL) { + PyObject *tup0 = PyTuple_New(2); + if (tup0 == NULL) { + Py_DECREF(callbacks); + return NULL; + } + PyTuple_SET_ITEM(tup0, 0, Py_NewRef(fut->fut_callback0)); + assert(fut->fut_context0 != NULL); + PyTuple_SET_ITEM(tup0, 1, Py_NewRef(fut->fut_context0)); + PyList_SET_ITEM(callbacks, i, tup0); + i++; + } if (fut->fut_callbacks != NULL) { - for (i = 0; i < PyList_GET_SIZE(fut->fut_callbacks); i++) { - PyObject *cb = PyList_GET_ITEM(fut->fut_callbacks, i); + for (Py_ssize_t j = 0; j < PyList_GET_SIZE(fut->fut_callbacks); j++) { + PyObject *cb = PyList_GET_ITEM(fut->fut_callbacks, j); Py_INCREF(cb); - PyList_SET_ITEM(new_list, i + 1, cb); + PyList_SET_ITEM(callbacks, i, cb); + i++; } } - return new_list; + return callbacks; } static PyObject * @@ -2139,7 +2145,7 @@ _asyncio_Task___init___impl(TaskObj *self, PyObject *coro, PyObject *loop, return -1; } } else { - self->task_context = Py_NewRef(context); + Py_XSETREF(self->task_context, Py_NewRef(context)); } Py_CLEAR(self->task_fut_waiter); @@ -2747,7 +2753,11 @@ task_call_step_soon(asyncio_state *state, TaskObj *task, PyObject *arg) return -1; } - int ret = call_soon(state, task->task_loop, cb, NULL, task->task_context); + // Beware: An evil call_soon could alter task_context. + // See: https://github.com/python/cpython/issues/126080. + PyObject *task_context = Py_NewRef(task->task_context); + int ret = call_soon(state, task->task_loop, cb, NULL, task_context); + Py_DECREF(task_context); Py_DECREF(cb); return ret; } @@ -2986,8 +2996,17 @@ task_step_handle_result_impl(asyncio_state *state, TaskObj *task, PyObject *resu if (task->task_must_cancel) { PyObject *r; int is_true; + + // Beware: An evil `__getattribute__` could + // prematurely delete task->task_cancel_msg before the + // task is cancelled, thereby causing a UAF crash. + // + // See https://github.com/python/cpython/issues/126138 + PyObject *task_cancel_msg = Py_NewRef(task->task_cancel_msg); r = PyObject_CallMethodOneArg(result, &_Py_ID(cancel), - task->task_cancel_msg); + task_cancel_msg); + Py_DECREF(task_cancel_msg); + if (r == NULL) { return NULL; } @@ -3079,8 +3098,17 @@ task_step_handle_result_impl(asyncio_state *state, TaskObj *task, PyObject *resu if (task->task_must_cancel) { PyObject *r; int is_true; + + // Beware: An evil `__getattribute__` could + // prematurely delete task->task_cancel_msg before the + // task is cancelled, thereby causing a UAF crash. + // + // See https://github.com/python/cpython/issues/126138 + PyObject *task_cancel_msg = Py_NewRef(task->task_cancel_msg); r = PyObject_CallMethodOneArg(result, &_Py_ID(cancel), - task->task_cancel_msg); + task_cancel_msg); + Py_DECREF(task_cancel_msg); + if (r == NULL) { return NULL; } diff --git a/contrib/tools/python3/Modules/_bisectmodule.c b/contrib/tools/python3/Modules/_bisectmodule.c index 0773bbd191..d79946c840 100644 --- a/contrib/tools/python3/Modules/_bisectmodule.c +++ b/contrib/tools/python3/Modules/_bisectmodule.c @@ -66,7 +66,7 @@ internal_bisect_right(PyObject *list, PyObject *item, Py_ssize_t lo, Py_ssize_t if (sq_item == NULL) { return -1; } - if (Py_EnterRecursiveCall("in _bisect.bisect_right")) { + if (Py_EnterRecursiveCall(" in _bisect.bisect_right")) { return -1; } PyTypeObject *tp = Py_TYPE(item); @@ -250,7 +250,7 @@ internal_bisect_left(PyObject *list, PyObject *item, Py_ssize_t lo, Py_ssize_t h if (sq_item == NULL) { return -1; } - if (Py_EnterRecursiveCall("in _bisect.bisect_left")) { + if (Py_EnterRecursiveCall(" in _bisect.bisect_left")) { return -1; } PyTypeObject *tp = Py_TYPE(item); diff --git a/contrib/tools/python3/Modules/_ctypes/_ctypes.c b/contrib/tools/python3/Modules/_ctypes/_ctypes.c index d72614d2b8..b6d45e9264 100644 --- a/contrib/tools/python3/Modules/_ctypes/_ctypes.c +++ b/contrib/tools/python3/Modules/_ctypes/_ctypes.c @@ -2269,7 +2269,7 @@ PyCSimpleType_from_param(PyObject *type, PyObject *value) return NULL; } if (as_parameter) { - if (_Py_EnterRecursiveCall("while processing _as_parameter_")) { + if (_Py_EnterRecursiveCall(" while processing _as_parameter_")) { Py_DECREF(as_parameter); Py_XDECREF(exc); return NULL; diff --git a/contrib/tools/python3/Modules/_datetimemodule.c b/contrib/tools/python3/Modules/_datetimemodule.c index 5a062b9c8c..8535811a61 100644 --- a/contrib/tools/python3/Modules/_datetimemodule.c +++ b/contrib/tools/python3/Modules/_datetimemodule.c @@ -1501,7 +1501,7 @@ make_somezreplacement(PyObject *object, char *sep, PyObject *tzinfoarg) PyObject *tzinfo = get_tzinfo_member(object); if (tzinfo == Py_None || tzinfo == NULL) { - return PyBytes_FromStringAndSize(NULL, 0); + return PyUnicode_FromStringAndSize(NULL, 0); } assert(tzinfoarg != NULL); @@ -1512,7 +1512,7 @@ make_somezreplacement(PyObject *object, char *sep, PyObject *tzinfoarg) tzinfoarg) < 0) return NULL; - return PyBytes_FromStringAndSize(buf, strlen(buf)); + return PyUnicode_FromString(buf); } static PyObject * @@ -1569,7 +1569,7 @@ make_freplacement(PyObject *object) else sprintf(freplacement, "%06d", 0); - return PyBytes_FromStringAndSize(freplacement, strlen(freplacement)); + return PyUnicode_FromString(freplacement); } /* I sure don't want to reproduce the strftime code from the time module, @@ -1590,79 +1590,60 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple, PyObject *Zreplacement = NULL; /* py string, replacement for %Z */ PyObject *freplacement = NULL; /* py string, replacement for %f */ - const char *pin; /* pointer to next char in input format */ - Py_ssize_t flen; /* length of input format */ - char ch; /* next char in input format */ - - PyObject *newfmt = NULL; /* py string, the output format */ - char *pnew; /* pointer to available byte in output format */ - size_t totalnew; /* number bytes total in output format buffer, - exclusive of trailing \0 */ - size_t usednew; /* number bytes used so far in output format buffer */ - - const char *ptoappend; /* ptr to string to append to output buffer */ - Py_ssize_t ntoappend; /* # of bytes to append to output buffer */ - assert(object && format && timetuple); assert(PyUnicode_Check(format)); - /* Convert the input format to a C string and size */ - pin = PyUnicode_AsUTF8AndSize(format, &flen); - if (!pin) + + PyObject *strftime = _PyImport_GetModuleAttrString("time", "strftime"); + if (strftime == NULL) { return NULL; + } /* Scan the input format, looking for %z/%Z/%f escapes, building * a new format. Since computing the replacements for those codes * is expensive, don't unless they're actually used. */ - if (flen > INT_MAX - 1) { - PyErr_NoMemory(); - goto Done; - } - totalnew = flen + 1; /* realistic if no %z/%Z */ - newfmt = PyBytes_FromStringAndSize(NULL, totalnew); - if (newfmt == NULL) goto Done; - pnew = PyBytes_AsString(newfmt); - usednew = 0; - - while ((ch = *pin++) != '\0') { - if (ch != '%') { - ptoappend = pin - 1; - ntoappend = 1; + _PyUnicodeWriter writer; + _PyUnicodeWriter_Init(&writer); + writer.overallocate = 1; + + Py_ssize_t flen = PyUnicode_GET_LENGTH(format); + Py_ssize_t i = 0; + Py_ssize_t start = 0; + Py_ssize_t end = 0; + while (i != flen) { + i = PyUnicode_FindChar(format, '%', i, flen, 1); + if (i < 0) { + assert(!PyErr_Occurred()); + break; } - else if ((ch = *pin++) == '\0') { - /* Null byte follows %, copy only '%'. - * - * Back the pin up one char so that we catch the null check - * the next time through the loop.*/ - pin--; - ptoappend = pin - 1; - ntoappend = 1; + end = i; + i++; + if (i == flen) { + break; } + Py_UCS4 ch = PyUnicode_READ_CHAR(format, i); + i++; /* A % has been seen and ch is the character after it. */ - else if (ch == 'z') { + PyObject *replacement = NULL; + if (ch == 'z') { /* %z -> +HHMM */ if (zreplacement == NULL) { zreplacement = make_somezreplacement(object, "", tzinfoarg); if (zreplacement == NULL) - goto Done; + goto Error; } - assert(zreplacement != NULL); - assert(PyBytes_Check(zreplacement)); - ptoappend = PyBytes_AS_STRING(zreplacement); - ntoappend = PyBytes_GET_SIZE(zreplacement); + replacement = zreplacement; } - else if (ch == ':' && *pin == 'z' && pin++) { + else if (ch == ':' && i < flen && PyUnicode_READ_CHAR(format, i) == 'z') { /* %:z -> +HH:MM */ + i++; if (colonzreplacement == NULL) { colonzreplacement = make_somezreplacement(object, ":", tzinfoarg); if (colonzreplacement == NULL) - goto Done; + goto Error; } - assert(colonzreplacement != NULL); - assert(PyBytes_Check(colonzreplacement)); - ptoappend = PyBytes_AS_STRING(colonzreplacement); - ntoappend = PyBytes_GET_SIZE(colonzreplacement); + replacement = colonzreplacement; } else if (ch == 'Z') { /* format tzname */ @@ -1670,79 +1651,63 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple, Zreplacement = make_Zreplacement(object, tzinfoarg); if (Zreplacement == NULL) - goto Done; + goto Error; } - assert(Zreplacement != NULL); - assert(PyUnicode_Check(Zreplacement)); - ptoappend = PyUnicode_AsUTF8AndSize(Zreplacement, - &ntoappend); - if (ptoappend == NULL) - goto Done; + replacement = Zreplacement; } else if (ch == 'f') { /* format microseconds */ if (freplacement == NULL) { freplacement = make_freplacement(object); if (freplacement == NULL) - goto Done; + goto Error; } - assert(freplacement != NULL); - assert(PyBytes_Check(freplacement)); - ptoappend = PyBytes_AS_STRING(freplacement); - ntoappend = PyBytes_GET_SIZE(freplacement); + replacement = freplacement; } else { /* percent followed by something else */ - ptoappend = pin - 2; - ntoappend = 2; - } - - /* Append the ntoappend chars starting at ptoappend to - * the new format. - */ - if (ntoappend == 0) continue; - assert(ptoappend != NULL); - assert(ntoappend > 0); - while (usednew + ntoappend > totalnew) { - if (totalnew > (PY_SSIZE_T_MAX >> 1)) { /* overflow */ - PyErr_NoMemory(); - goto Done; - } - totalnew <<= 1; - if (_PyBytes_Resize(&newfmt, totalnew) < 0) - goto Done; - pnew = PyBytes_AsString(newfmt) + usednew; } - memcpy(pnew, ptoappend, ntoappend); - pnew += ntoappend; - usednew += ntoappend; - assert(usednew <= totalnew); + assert(replacement != NULL); + assert(PyUnicode_Check(replacement)); + if (_PyUnicodeWriter_WriteSubstring(&writer, format, start, end) < 0) { + goto Error; + } + start = i; + if (_PyUnicodeWriter_WriteStr(&writer, replacement) < 0) { + goto Error; + } } /* end while() */ - if (_PyBytes_Resize(&newfmt, usednew) < 0) - goto Done; - { - PyObject *format; - PyObject *strftime = _PyImport_GetModuleAttrString("time", "strftime"); - - if (strftime == NULL) + PyObject *newformat; + if (start == 0) { + _PyUnicodeWriter_Dealloc(&writer); + newformat = Py_NewRef(format); + } + else { + if (_PyUnicodeWriter_WriteSubstring(&writer, format, start, flen) < 0) { + goto Error; + } + newformat = _PyUnicodeWriter_Finish(&writer); + if (newformat == NULL) { goto Done; - format = PyUnicode_FromString(PyBytes_AS_STRING(newfmt)); - if (format != NULL) { - result = PyObject_CallFunctionObjArgs(strftime, - format, timetuple, NULL); - Py_DECREF(format); } - Py_DECREF(strftime); } + result = PyObject_CallFunctionObjArgs(strftime, + newformat, timetuple, NULL); + Py_DECREF(newformat); + Done: Py_XDECREF(freplacement); Py_XDECREF(zreplacement); Py_XDECREF(colonzreplacement); Py_XDECREF(Zreplacement); - Py_XDECREF(newfmt); + Py_XDECREF(strftime); return result; + + Error: + _PyUnicodeWriter_Dealloc(&writer); + goto Done; } /* --------------------------------------------------------------------------- diff --git a/contrib/tools/python3/Modules/_functoolsmodule.c b/contrib/tools/python3/Modules/_functoolsmodule.c index a8001d7122..a6d1b83984 100644 --- a/contrib/tools/python3/Modules/_functoolsmodule.c +++ b/contrib/tools/python3/Modules/_functoolsmodule.c @@ -734,12 +734,14 @@ Fail: PyDoc_STRVAR(functools_reduce_doc, "reduce(function, iterable[, initial]) -> value\n\ \n\ -Apply a function of two arguments cumulatively to the items of a sequence\n\ -or iterable, from left to right, so as to reduce the iterable to a single\n\ -value. For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates\n\ -((((1+2)+3)+4)+5). If initial is present, it is placed before the items\n\ -of the iterable in the calculation, and serves as a default when the\n\ -iterable is empty."); +Apply a function of two arguments cumulatively to the items of an iterable, from left to right.\n\ +\n\ +This effectively reduces the iterable to a single value. If initial is present,\n\ +it is placed before the items of the iterable in the calculation, and serves as\n\ +a default when the iterable is empty.\n\ +\n\ +For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])\n\ +calculates ((((1 + 2) + 3) + 4) + 5)."); /* lru_cache object **********************************************************/ diff --git a/contrib/tools/python3/Modules/_io/stringio.c b/contrib/tools/python3/Modules/_io/stringio.c index 568d0bd709..ed9cf0da91 100644 --- a/contrib/tools/python3/Modules/_io/stringio.c +++ b/contrib/tools/python3/Modules/_io/stringio.c @@ -884,23 +884,25 @@ stringio_setstate(stringio *self, PyObject *state) once by __init__. So we do not take any chance and replace object's buffer completely. */ { - PyObject *item; - Py_UCS4 *buf; - Py_ssize_t bufsize; - - item = PyTuple_GET_ITEM(state, 0); - buf = PyUnicode_AsUCS4Copy(item); - if (buf == NULL) - return NULL; - bufsize = PyUnicode_GET_LENGTH(item); + PyObject *item = PyTuple_GET_ITEM(state, 0); + if (PyUnicode_Check(item)) { + Py_UCS4 *buf = PyUnicode_AsUCS4Copy(item); + if (buf == NULL) + return NULL; + Py_ssize_t bufsize = PyUnicode_GET_LENGTH(item); - if (resize_buffer(self, bufsize) < 0) { + if (resize_buffer(self, bufsize) < 0) { + PyMem_Free(buf); + return NULL; + } + memcpy(self->buf, buf, bufsize * sizeof(Py_UCS4)); PyMem_Free(buf); - return NULL; + self->string_size = bufsize; + } + else { + assert(item == Py_None); + self->string_size = 0; } - memcpy(self->buf, buf, bufsize * sizeof(Py_UCS4)); - PyMem_Free(buf); - self->string_size = bufsize; } /* Set carefully the position value. Alternatively, we could use the seek diff --git a/contrib/tools/python3/Modules/_io/winconsoleio.c b/contrib/tools/python3/Modules/_io/winconsoleio.c index c2c365e080..da4907ec2d 100644 --- a/contrib/tools/python3/Modules/_io/winconsoleio.c +++ b/contrib/tools/python3/Modules/_io/winconsoleio.c @@ -135,19 +135,67 @@ char _PyIO_get_console_type(PyObject *path_or_fd) { } static DWORD -_find_last_utf8_boundary(const char *buf, DWORD len) +_find_last_utf8_boundary(const unsigned char *buf, DWORD len) { - /* This function never returns 0, returns the original len instead */ - DWORD count = 1; - if (len == 0 || (buf[len - 1] & 0x80) == 0) { - return len; - } - for (;; count++) { - if (count > 3 || count >= len) { + for (DWORD count = 1; count < 4 && count <= len; count++) { + unsigned char c = buf[len - count]; + if (c < 0x80) { + /* No starting byte found. */ return len; } - if ((buf[len - count] & 0xc0) != 0x80) { - return len - count; + if (c >= 0xc0) { + if (c < 0xe0 /* 2-bytes sequence */ ? count < 2 : + c < 0xf0 /* 3-bytes sequence */ ? count < 3 : + c < 0xf8 /* 4-bytes sequence */) + { + /* Incomplete multibyte sequence. */ + return len - count; + } + /* Either complete or invalid sequence. */ + return len; + } + } + /* Either complete 4-bytes sequence or invalid sequence. */ + return len; +} + +/* Find the number of UTF-8 bytes that corresponds to the specified number of + * wchars. + * I.e. find x <= len so that MultiByteToWideChar(CP_UTF8, 0, s, x, NULL, 0) == n. + * + * WideCharToMultiByte() cannot be used for this, because the UTF-8 -> wchar + * conversion is not reversible (invalid UTF-8 byte produces \ufffd which + * will be converted back to 3-bytes UTF-8 sequence \xef\xbf\xbd). + * So we need to use binary search. + */ +static DWORD +_wchar_to_utf8_count(const unsigned char *s, DWORD len, DWORD n) +{ + DWORD start = 0; + while (1) { + DWORD mid = 0; + for (DWORD i = len / 2; i <= len; i++) { + mid = _find_last_utf8_boundary(s, i); + if (mid != 0) { + break; + } + /* The middle could split the first multibytes sequence. */ + } + if (mid == len) { + return start + len; + } + if (mid == 0) { + mid = len > 1 ? len - 1 : 1; + } + DWORD wlen = MultiByteToWideChar(CP_UTF8, 0, s, mid, NULL, 0); + if (wlen <= n) { + s += mid; + start += mid; + len -= mid; + n -= wlen; + } + else { + len = mid; } } } @@ -556,8 +604,10 @@ read_console_w(HANDLE handle, DWORD maxlen, DWORD *readlen) { int err = 0, sig = 0; wchar_t *buf = (wchar_t*)PyMem_Malloc(maxlen * sizeof(wchar_t)); - if (!buf) + if (!buf) { + PyErr_NoMemory(); goto error; + } *readlen = 0; @@ -615,6 +665,7 @@ read_console_w(HANDLE handle, DWORD maxlen, DWORD *readlen) { Py_UNBLOCK_THREADS if (!newbuf) { sig = -1; + PyErr_NoMemory(); break; } buf = newbuf; @@ -638,8 +689,10 @@ read_console_w(HANDLE handle, DWORD maxlen, DWORD *readlen) { if (*readlen > 0 && buf[0] == L'\x1a') { PyMem_Free(buf); buf = (wchar_t *)PyMem_Malloc(sizeof(wchar_t)); - if (!buf) + if (!buf) { + PyErr_NoMemory(); goto error; + } buf[0] = L'\0'; *readlen = 0; } @@ -817,8 +870,10 @@ _io__WindowsConsoleIO_readall_impl(winconsoleio *self) bufsize = BUFSIZ; buf = (wchar_t*)PyMem_Malloc((bufsize + 1) * sizeof(wchar_t)); - if (buf == NULL) + if (buf == NULL) { + PyErr_NoMemory(); return NULL; + } while (1) { wchar_t *subbuf; @@ -840,6 +895,7 @@ _io__WindowsConsoleIO_readall_impl(winconsoleio *self) (bufsize + 1) * sizeof(wchar_t)); if (tmp == NULL) { PyMem_Free(buf); + PyErr_NoMemory(); return NULL; } buf = tmp; @@ -1015,43 +1071,49 @@ _io__WindowsConsoleIO_write_impl(winconsoleio *self, PyTypeObject *cls, len = (DWORD)b->len; Py_BEGIN_ALLOW_THREADS - wlen = MultiByteToWideChar(CP_UTF8, 0, b->buf, len, NULL, 0); - /* issue11395 there is an unspecified upper bound on how many bytes can be written at once. We cap at 32k - the caller will have to handle partial writes. Since we don't know how many input bytes are being ignored, we have to reduce and recalculate. */ - while (wlen > 32766 / sizeof(wchar_t)) { - len /= 2; + const DWORD max_wlen = 32766 / sizeof(wchar_t); + /* UTF-8 to wchar ratio is at most 3:1. */ + len = Py_MIN(len, max_wlen * 3); + while (1) { /* Fix for github issues gh-110913 and gh-82052. */ len = _find_last_utf8_boundary(b->buf, len); wlen = MultiByteToWideChar(CP_UTF8, 0, b->buf, len, NULL, 0); + if (wlen <= max_wlen) { + break; + } + len /= 2; } Py_END_ALLOW_THREADS - if (!wlen) - return PyErr_SetFromWindowsErr(0); + if (!wlen) { + return PyLong_FromLong(0); + } wbuf = (wchar_t*)PyMem_Malloc(wlen * sizeof(wchar_t)); + if (!wbuf) { + PyErr_NoMemory(); + return NULL; + } Py_BEGIN_ALLOW_THREADS wlen = MultiByteToWideChar(CP_UTF8, 0, b->buf, len, wbuf, wlen); if (wlen) { res = WriteConsoleW(handle, wbuf, wlen, &n, NULL); +#ifdef Py_DEBUG + if (res) { +#else if (res && n < wlen) { +#endif /* Wrote fewer characters than expected, which means our * len value may be wrong. So recalculate it from the - * characters that were written. As this could potentially - * result in a different value, we also validate that value. + * characters that were written. */ - len = WideCharToMultiByte(CP_UTF8, 0, wbuf, n, - NULL, 0, NULL, NULL); - if (len) { - wlen = MultiByteToWideChar(CP_UTF8, 0, b->buf, len, - NULL, 0); - assert(wlen == len); - } + len = _wchar_to_utf8_count(b->buf, len, n); } } else res = 0; diff --git a/contrib/tools/python3/Modules/_localemodule.c b/contrib/tools/python3/Modules/_localemodule.c index f080b97034..db8194372d 100644 --- a/contrib/tools/python3/Modules/_localemodule.c +++ b/contrib/tools/python3/Modules/_localemodule.c @@ -595,6 +595,37 @@ static struct langinfo_constant{ {0, 0} }; +#ifdef __GLIBC__ +#if defined(ALT_DIGITS) || defined(ERA) +static PyObject * +decode_strings(const char *result, size_t max_count) +{ + /* Convert a sequence of NUL-separated C strings to a Python string + * containing semicolon separated items. */ + size_t i = 0; + size_t count = 0; + for (; count < max_count && result[i]; count++) { + i += strlen(result + i) + 1; + } + char *buf = PyMem_Malloc(i); + if (buf == NULL) { + PyErr_NoMemory(); + return NULL; + } + memcpy(buf, result, i); + /* Replace all NULs with semicolons. */ + i = 0; + while (--count) { + i += strlen(buf + i); + buf[i++] = ';'; + } + PyObject *pyresult = PyUnicode_DecodeLocale(buf, NULL); + PyMem_Free(buf); + return pyresult; +} +#endif +#endif + /*[clinic input] _locale.nl_langinfo @@ -618,7 +649,28 @@ _locale_nl_langinfo_impl(PyObject *module, int item) instead of an empty string for nl_langinfo(ERA). */ const char *result = nl_langinfo(item); result = result != NULL ? result : ""; - return PyUnicode_DecodeLocale(result, NULL); + PyObject *pyresult; +#ifdef __GLIBC__ + /* According to the POSIX specification the result must be + * a sequence of semicolon-separated strings. + * But in Glibc they are NUL-separated. */ +#ifdef ALT_DIGITS + if (item == ALT_DIGITS && *result) { + pyresult = decode_strings(result, 100); + } + else +#endif +#ifdef ERA + if (item == ERA && *result) { + pyresult = decode_strings(result, SIZE_MAX); + } + else +#endif +#endif + { + pyresult = PyUnicode_DecodeLocale(result, NULL); + } + return pyresult; } PyErr_SetString(PyExc_ValueError, "unsupported langinfo constant"); return NULL; diff --git a/contrib/tools/python3/Modules/_lsprof.c b/contrib/tools/python3/Modules/_lsprof.c index 2c82b18c0e..0464e7e8a4 100644 --- a/contrib/tools/python3/Modules/_lsprof.c +++ b/contrib/tools/python3/Modules/_lsprof.c @@ -604,6 +604,12 @@ setBuiltins(ProfilerObject *pObj, int nvalue) PyObject* pystart_callback(ProfilerObject* self, PyObject *const *args, Py_ssize_t size) { + if (size < 2) { + PyErr_Format(PyExc_TypeError, + "_pystart_callback expected 2 arguments, got %zd", + size); + return NULL; + } PyObject* code = args[0]; ptrace_enter_call((PyObject*)self, (void *)code, (PyObject *)code); @@ -612,6 +618,12 @@ PyObject* pystart_callback(ProfilerObject* self, PyObject *const *args, Py_ssize PyObject* pyreturn_callback(ProfilerObject* self, PyObject *const *args, Py_ssize_t size) { + if (size < 3) { + PyErr_Format(PyExc_TypeError, + "_pyreturn_callback expected 3 arguments, got %zd", + size); + return NULL; + } PyObject* code = args[0]; ptrace_leave_call((PyObject*)self, (void *)code); @@ -647,6 +659,12 @@ PyObject* get_cfunc_from_callable(PyObject* callable, PyObject* self_arg, PyObje PyObject* ccall_callback(ProfilerObject* self, PyObject *const *args, Py_ssize_t size) { + if (size < 4) { + PyErr_Format(PyExc_TypeError, + "_ccall_callback expected 4 arguments, got %zd", + size); + return NULL; + } if (self->flags & POF_BUILTINS) { PyObject* callable = args[2]; PyObject* self_arg = args[3]; @@ -665,6 +683,12 @@ PyObject* ccall_callback(ProfilerObject* self, PyObject *const *args, Py_ssize_t PyObject* creturn_callback(ProfilerObject* self, PyObject *const *args, Py_ssize_t size) { + if (size < 4) { + PyErr_Format(PyExc_TypeError, + "_creturn_callback expected 4 arguments, got %zd", + size); + return NULL; + } if (self->flags & POF_BUILTINS) { PyObject* callable = args[2]; PyObject* self_arg = args[3]; @@ -726,34 +750,47 @@ profiler_enable(ProfilerObject *self, PyObject *args, PyObject *kwds) return NULL; } - if (PyObject_CallMethod(monitoring, "use_tool_id", "is", self->tool_id, "cProfile") == NULL) { + PyObject *check = PyObject_CallMethod(monitoring, + "use_tool_id", "is", + self->tool_id, "cProfile"); + if (check == NULL) { PyErr_Format(PyExc_ValueError, "Another profiling tool is already active"); - Py_DECREF(monitoring); - return NULL; + goto error; } + Py_DECREF(check); for (int i = 0; callback_table[i].callback_method; i++) { + int event = (1 << callback_table[i].event); PyObject* callback = PyObject_GetAttrString((PyObject*)self, callback_table[i].callback_method); if (!callback) { - Py_DECREF(monitoring); - return NULL; + goto error; } - Py_XDECREF(PyObject_CallMethod(monitoring, "register_callback", "iiO", self->tool_id, - (1 << callback_table[i].event), - callback)); + PyObject *register_result = PyObject_CallMethod(monitoring, "register_callback", + "iiO", self->tool_id, + event, callback); Py_DECREF(callback); - all_events |= (1 << callback_table[i].event); + if (register_result == NULL) { + goto error; + } + Py_DECREF(register_result); + all_events |= event; } - if (!PyObject_CallMethod(monitoring, "set_events", "ii", self->tool_id, all_events)) { - Py_DECREF(monitoring); - return NULL; + PyObject *event_result = PyObject_CallMethod(monitoring, "set_events", "ii", + self->tool_id, all_events); + if (event_result == NULL) { + goto error; } + Py_DECREF(event_result); Py_DECREF(monitoring); self->flags |= POF_ENABLED; Py_RETURN_NONE; + +error: + Py_DECREF(monitoring); + return NULL; } static void diff --git a/contrib/tools/python3/Modules/_pickle.c b/contrib/tools/python3/Modules/_pickle.c index 879c18263d..b8f701c2af 100644 --- a/contrib/tools/python3/Modules/_pickle.c +++ b/contrib/tools/python3/Modules/_pickle.c @@ -1344,6 +1344,10 @@ _Unpickler_ReadFromFile(UnpicklerObject *self, Py_ssize_t n) else { read_size = _Unpickler_SetStringInput(self, data); Py_DECREF(data); + if (read_size < 0) { + return -1; + } + self->prefetched_idx = 0; if (n <= read_size) return n; @@ -6722,6 +6726,7 @@ load_build(PickleState *st, UnpicklerObject *self) } if (PyObject_SetItem(dict, d_key, d_value) < 0) { Py_DECREF(d_key); + Py_DECREF(dict); goto error; } Py_DECREF(d_key); diff --git a/contrib/tools/python3/Modules/_sqlite/ya.make b/contrib/tools/python3/Modules/_sqlite/ya.make index 9b0a2db882..bbafbaff85 100644 --- a/contrib/tools/python3/Modules/_sqlite/ya.make +++ b/contrib/tools/python3/Modules/_sqlite/ya.make @@ -2,9 +2,9 @@ PY3_LIBRARY() -VERSION(3.12.7) +VERSION(3.12.8) -ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.7.tar.gz) +ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.8.tar.gz) LICENSE(Python-2.0) diff --git a/contrib/tools/python3/Modules/_sre/clinic/sre.c.h b/contrib/tools/python3/Modules/_sre/clinic/sre.c.h index 529c634e76..56a4e6048f 100644 --- a/contrib/tools/python3/Modules/_sre/clinic/sre.c.h +++ b/contrib/tools/python3/Modules/_sre/clinic/sre.c.h @@ -975,6 +975,44 @@ PyDoc_STRVAR(_sre_SRE_Pattern___deepcopy____doc__, #define _SRE_SRE_PATTERN___DEEPCOPY___METHODDEF \ {"__deepcopy__", (PyCFunction)_sre_SRE_Pattern___deepcopy__, METH_O, _sre_SRE_Pattern___deepcopy____doc__}, +#if defined(Py_DEBUG) + +PyDoc_STRVAR(_sre_SRE_Pattern__fail_after__doc__, +"_fail_after($self, count, exception, /)\n" +"--\n" +"\n" +"For debugging."); + +#define _SRE_SRE_PATTERN__FAIL_AFTER_METHODDEF \ + {"_fail_after", _PyCFunction_CAST(_sre_SRE_Pattern__fail_after), METH_FASTCALL, _sre_SRE_Pattern__fail_after__doc__}, + +static PyObject * +_sre_SRE_Pattern__fail_after_impl(PatternObject *self, int count, + PyObject *exception); + +static PyObject * +_sre_SRE_Pattern__fail_after(PatternObject *self, PyObject *const *args, Py_ssize_t nargs) +{ + PyObject *return_value = NULL; + int count; + PyObject *exception; + + if (!_PyArg_CheckPositional("_fail_after", nargs, 2, 2)) { + goto exit; + } + count = _PyLong_AsInt(args[0]); + if (count == -1 && PyErr_Occurred()) { + goto exit; + } + exception = args[1]; + return_value = _sre_SRE_Pattern__fail_after_impl(self, count, exception); + +exit: + return return_value; +} + +#endif /* defined(Py_DEBUG) */ + PyDoc_STRVAR(_sre_compile__doc__, "compile($module, /, pattern, flags, code, groups, groupindex,\n" " indexgroup)\n" @@ -1460,4 +1498,8 @@ _sre_SRE_Scanner_search(ScannerObject *self, PyTypeObject *cls, PyObject *const } return _sre_SRE_Scanner_search_impl(self, cls); } -/*[clinic end generated code: output=045de53cfe02dee0 input=a9049054013a1b77]*/ + +#ifndef _SRE_SRE_PATTERN__FAIL_AFTER_METHODDEF + #define _SRE_SRE_PATTERN__FAIL_AFTER_METHODDEF +#endif /* !defined(_SRE_SRE_PATTERN__FAIL_AFTER_METHODDEF) */ +/*[clinic end generated code: output=2165ecf43a7c20e8 input=a9049054013a1b77]*/ diff --git a/contrib/tools/python3/Modules/_sre/sre.c b/contrib/tools/python3/Modules/_sre/sre.c index 6d9843bb76..35c6058dac 100644 --- a/contrib/tools/python3/Modules/_sre/sre.c +++ b/contrib/tools/python3/Modules/_sre/sre.c @@ -218,6 +218,85 @@ data_stack_grow(SRE_STATE* state, Py_ssize_t size) return 0; } +/* memory pool functions for SRE_REPEAT, this can avoid memory + leak when SRE(match) function terminates abruptly. + state->repeat_pool_used is a doubly-linked list, so that we + can remove a SRE_REPEAT node from it. + state->repeat_pool_unused is a singly-linked list, we put/get + node at the head. */ +static SRE_REPEAT * +repeat_pool_malloc(SRE_STATE *state) +{ + SRE_REPEAT *repeat; + + if (state->repeat_pool_unused) { + /* remove from unused pool (singly-linked list) */ + repeat = state->repeat_pool_unused; + state->repeat_pool_unused = repeat->pool_next; + } + else { + repeat = PyObject_Malloc(sizeof(SRE_REPEAT)); + if (!repeat) { + return NULL; + } + } + + /* add to used pool (doubly-linked list) */ + SRE_REPEAT *temp = state->repeat_pool_used; + if (temp) { + temp->pool_prev = repeat; + } + repeat->pool_prev = NULL; + repeat->pool_next = temp; + state->repeat_pool_used = repeat; + + return repeat; +} + +static void +repeat_pool_free(SRE_STATE *state, SRE_REPEAT *repeat) +{ + SRE_REPEAT *prev = repeat->pool_prev; + SRE_REPEAT *next = repeat->pool_next; + + /* remove from used pool (doubly-linked list) */ + if (prev) { + prev->pool_next = next; + } + else { + state->repeat_pool_used = next; + } + if (next) { + next->pool_prev = prev; + } + + /* add to unused pool (singly-linked list) */ + repeat->pool_next = state->repeat_pool_unused; + state->repeat_pool_unused = repeat; +} + +static void +repeat_pool_clear(SRE_STATE *state) +{ + /* clear used pool */ + SRE_REPEAT *next = state->repeat_pool_used; + state->repeat_pool_used = NULL; + while (next) { + SRE_REPEAT *temp = next; + next = temp->pool_next; + PyObject_Free(temp); + } + + /* clear unused pool */ + next = state->repeat_pool_unused; + state->repeat_pool_unused = NULL; + while (next) { + SRE_REPEAT *temp = next; + next = temp->pool_next; + PyObject_Free(temp); + } +} + /* generate 8-bit version */ #define SRE_CHAR Py_UCS1 @@ -463,6 +542,11 @@ state_init(SRE_STATE* state, PatternObject* pattern, PyObject* string, state->pos = start; state->endpos = end; +#ifdef Py_DEBUG + state->fail_after_count = pattern->fail_after_count; + state->fail_after_exc = pattern->fail_after_exc; // borrowed ref +#endif + return string; err: /* We add an explicit cast here because MSVC has a bug when @@ -485,6 +569,8 @@ state_fini(SRE_STATE* state) /* See above PyMem_Del for why we explicitly cast here. */ PyMem_Free((void*) state->mark); state->mark = NULL; + /* SRE_REPEAT pool */ + repeat_pool_clear(state); } /* calculate offset from start of string */ @@ -571,6 +657,9 @@ pattern_traverse(PatternObject *self, visitproc visit, void *arg) Py_VISIT(self->groupindex); Py_VISIT(self->indexgroup); Py_VISIT(self->pattern); +#ifdef Py_DEBUG + Py_VISIT(self->fail_after_exc); +#endif return 0; } @@ -580,6 +669,9 @@ pattern_clear(PatternObject *self) Py_CLEAR(self->groupindex); Py_CLEAR(self->indexgroup); Py_CLEAR(self->pattern); +#ifdef Py_DEBUG + Py_CLEAR(self->fail_after_exc); +#endif return 0; } @@ -642,7 +734,7 @@ _sre_SRE_Pattern_match_impl(PatternObject *self, PyTypeObject *cls, Py_ssize_t status; PyObject *match; - if (!state_init(&state, (PatternObject *)self, string, pos, endpos)) + if (!state_init(&state, self, string, pos, endpos)) return NULL; state.ptr = state.start; @@ -1330,6 +1422,29 @@ _sre_SRE_Pattern___deepcopy__(PatternObject *self, PyObject *memo) return Py_NewRef(self); } +#ifdef Py_DEBUG +/*[clinic input] +_sre.SRE_Pattern._fail_after + + count: int + exception: object + / + +For debugging. +[clinic start generated code]*/ + +static PyObject * +_sre_SRE_Pattern__fail_after_impl(PatternObject *self, int count, + PyObject *exception) +/*[clinic end generated code: output=9a6bf12135ac50c2 input=ef80a45c66c5499d]*/ +{ + self->fail_after_count = count; + Py_INCREF(exception); + Py_XSETREF(self->fail_after_exc, exception); + Py_RETURN_NONE; +} +#endif /* Py_DEBUG */ + static PyObject * pattern_repr(PatternObject *obj) { @@ -1456,6 +1571,10 @@ _sre_compile_impl(PyObject *module, PyObject *pattern, int flags, self->pattern = NULL; self->groupindex = NULL; self->indexgroup = NULL; +#ifdef Py_DEBUG + self->fail_after_count = -1; + self->fail_after_exc = NULL; +#endif self->codesize = n; @@ -2552,7 +2671,8 @@ pattern_new_match(_sremodulestate* module_state, if (!match) return NULL; - match->pattern = (PatternObject*)Py_NewRef(pattern); + Py_INCREF(pattern); + match->pattern = pattern; match->string = Py_NewRef(state->string); @@ -2688,7 +2808,7 @@ _sre_SRE_Scanner_match_impl(ScannerObject *self, PyTypeObject *cls) return NULL; } - match = pattern_new_match(module_state, (PatternObject*) self->pattern, + match = pattern_new_match(module_state, self->pattern, state, status); if (status == 0) @@ -2738,7 +2858,7 @@ _sre_SRE_Scanner_search_impl(ScannerObject *self, PyTypeObject *cls) return NULL; } - match = pattern_new_match(module_state, (PatternObject*) self->pattern, + match = pattern_new_match(module_state, self->pattern, state, status); if (status == 0) @@ -2774,7 +2894,8 @@ pattern_scanner(_sremodulestate *module_state, return NULL; } - scanner->pattern = Py_NewRef(self); + Py_INCREF(self); + scanner->pattern = self; PyObject_GC_Track(scanner); return (PyObject*) scanner; @@ -2968,6 +3089,7 @@ static PyMethodDef pattern_methods[] = { _SRE_SRE_PATTERN_SCANNER_METHODDEF _SRE_SRE_PATTERN___COPY___METHODDEF _SRE_SRE_PATTERN___DEEPCOPY___METHODDEF + _SRE_SRE_PATTERN__FAIL_AFTER_METHODDEF {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, PyDoc_STR("See PEP 585")}, {NULL, NULL} diff --git a/contrib/tools/python3/Modules/_sre/sre.h b/contrib/tools/python3/Modules/_sre/sre.h index a0f235606e..b8c6f8e3e6 100644 --- a/contrib/tools/python3/Modules/_sre/sre.h +++ b/contrib/tools/python3/Modules/_sre/sre.h @@ -34,6 +34,11 @@ typedef struct { int flags; /* flags used when compiling pattern source */ PyObject *weakreflist; /* List of weak references */ int isbytes; /* pattern type (1 - bytes, 0 - string, -1 - None) */ +#ifdef Py_DEBUG + /* for simulation of user interruption */ + int fail_after_count; + PyObject *fail_after_exc; +#endif /* pattern code */ Py_ssize_t codesize; SRE_CODE code[1]; @@ -68,6 +73,9 @@ typedef struct SRE_REPEAT_T { const SRE_CODE* pattern; /* points to REPEAT operator arguments */ const void* last_ptr; /* helper to check for infinite loops */ struct SRE_REPEAT_T *prev; /* points to previous repeat context */ + /* for SRE_REPEAT pool */ + struct SRE_REPEAT_T *pool_prev; + struct SRE_REPEAT_T *pool_next; } SRE_REPEAT; typedef struct { @@ -94,12 +102,19 @@ typedef struct { size_t data_stack_base; /* current repeat context */ SRE_REPEAT *repeat; + /* SRE_REPEAT pool */ + SRE_REPEAT *repeat_pool_used; + SRE_REPEAT *repeat_pool_unused; unsigned int sigcount; +#ifdef Py_DEBUG + int fail_after_count; + PyObject *fail_after_exc; +#endif } SRE_STATE; typedef struct { PyObject_HEAD - PyObject* pattern; + PatternObject* pattern; SRE_STATE state; int executing; } ScannerObject; diff --git a/contrib/tools/python3/Modules/_sre/sre_lib.h b/contrib/tools/python3/Modules/_sre/sre_lib.h index 95c1ada908..9e9a0ec926 100644 --- a/contrib/tools/python3/Modules/_sre/sre_lib.h +++ b/contrib/tools/python3/Modules/_sre/sre_lib.h @@ -524,13 +524,28 @@ typedef struct { Py_ssize_t last_ctx_pos; } SRE(match_context); -#define MAYBE_CHECK_SIGNALS \ +#define _MAYBE_CHECK_SIGNALS \ do { \ if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \ RETURN_ERROR(SRE_ERROR_INTERRUPTED); \ } \ } while (0) +#ifdef Py_DEBUG +# define MAYBE_CHECK_SIGNALS \ + do { \ + _MAYBE_CHECK_SIGNALS; \ + if (state->fail_after_count >= 0) { \ + if (state->fail_after_count-- == 0) { \ + PyErr_SetNone(state->fail_after_exc); \ + RETURN_ERROR(SRE_ERROR_INTERRUPTED); \ + } \ + } \ + } while (0) +#else +# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS +#endif /* Py_DEBUG */ + #ifdef HAVE_COMPUTED_GOTOS #ifndef USE_COMPUTED_GOTOS #define USE_COMPUTED_GOTOS 1 @@ -1083,12 +1098,9 @@ dispatch: pattern[1], pattern[2])); /* install new repeat context */ - /* TODO(https://github.com/python/cpython/issues/67877): Fix this - * potential memory leak. */ - ctx->u.rep = (SRE_REPEAT*) PyObject_Malloc(sizeof(*ctx->u.rep)); + ctx->u.rep = repeat_pool_malloc(state); if (!ctx->u.rep) { - PyErr_NoMemory(); - RETURN_FAILURE; + RETURN_ERROR(SRE_ERROR_MEMORY); } ctx->u.rep->count = -1; ctx->u.rep->pattern = pattern; @@ -1099,7 +1111,7 @@ dispatch: state->ptr = ptr; DO_JUMP(JUMP_REPEAT, jump_repeat, pattern+pattern[0]); state->repeat = ctx->u.rep->prev; - PyObject_Free(ctx->u.rep); + repeat_pool_free(state, ctx->u.rep); if (ret) { RETURN_ON_ERROR(ret); @@ -1257,6 +1269,17 @@ dispatch: pointer */ state->ptr = ptr; + /* Set state->repeat to non-NULL */ + ctx->u.rep = repeat_pool_malloc(state); + if (!ctx->u.rep) { + RETURN_ERROR(SRE_ERROR_MEMORY); + } + ctx->u.rep->count = -1; + ctx->u.rep->pattern = NULL; + ctx->u.rep->prev = state->repeat; + ctx->u.rep->last_ptr = NULL; + state->repeat = ctx->u.rep; + /* Initialize Count to 0 */ ctx->count = 0; @@ -1271,6 +1294,9 @@ dispatch: } else { state->ptr = ptr; + /* Restore state->repeat */ + state->repeat = ctx->u.rep->prev; + repeat_pool_free(state, ctx->u.rep); RETURN_FAILURE; } } @@ -1343,6 +1369,10 @@ dispatch: } } + /* Restore state->repeat */ + state->repeat = ctx->u.rep->prev; + repeat_pool_free(state, ctx->u.rep); + /* Evaluate Tail */ /* Jump to end of pattern indicated by skip, and then skip the SUCCESS op code that follows it. */ diff --git a/contrib/tools/python3/Modules/_ssl.c b/contrib/tools/python3/Modules/_ssl.c index 7a104bebb4..dbb4e8da78 100644 --- a/contrib/tools/python3/Modules/_ssl.c +++ b/contrib/tools/python3/Modules/_ssl.c @@ -2900,7 +2900,7 @@ static PyType_Spec PySSLSocket_spec = { .name = "_ssl._SSLSocket", .basicsize = sizeof(PySSLSocket), .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE | - Py_TPFLAGS_HAVE_GC), + Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_DISALLOW_INSTANTIATION), .slots = PySSLSocket_slots, }; @@ -4951,14 +4951,14 @@ PySSLSession_dealloc(PySSLSession *self) static PyObject * PySSLSession_richcompare(PyObject *left, PyObject *right, int op) { - int result; - PyTypeObject *sesstype = ((PySSLSession*)left)->ctx->state->PySSLSession_Type; - if (left == NULL || right == NULL) { PyErr_BadInternalCall(); return NULL; } + int result; + PyTypeObject *sesstype = ((PySSLSession*)left)->ctx->state->PySSLSession_Type; + if (!Py_IS_TYPE(left, sesstype) || !Py_IS_TYPE(right, sesstype)) { Py_RETURN_NOTIMPLEMENTED; } diff --git a/contrib/tools/python3/Modules/_struct.c b/contrib/tools/python3/Modules/_struct.c index 84474043b0..6532174a0b 100644 --- a/contrib/tools/python3/Modules/_struct.c +++ b/contrib/tools/python3/Modules/_struct.c @@ -483,9 +483,8 @@ nu_ulonglong(_structmodulestate *state, const char *p, const formatdef *f) static PyObject * nu_bool(_structmodulestate *state, const char *p, const formatdef *f) { - _Bool x; - memcpy((char *)&x, p, sizeof x); - return PyBool_FromLong(x != 0); + const _Bool bool_false = 0; + return PyBool_FromLong(memcmp(p, &bool_false, sizeof(_Bool))); } diff --git a/contrib/tools/python3/Modules/_threadmodule.c b/contrib/tools/python3/Modules/_threadmodule.c index 365f446008..366ee6186d 100644 --- a/contrib/tools/python3/Modules/_threadmodule.c +++ b/contrib/tools/python3/Modules/_threadmodule.c @@ -961,7 +961,7 @@ local_setattro(localobject *self, PyObject *name, PyObject *v) } if (r == 1) { PyErr_Format(PyExc_AttributeError, - "'%.100s' object attribute '%U' is read-only", + "'%.100s' object attribute %R is read-only", Py_TYPE(self)->tp_name, name); return -1; } @@ -1219,6 +1219,7 @@ thread_PyThread_start_new_thread(PyObject *self, PyObject *fargs) if (ident == PYTHREAD_INVALID_THREAD_ID) { PyErr_SetString(ThreadError, "can't start new thread"); PyThreadState_Clear(boot->tstate); + PyThreadState_Delete(boot->tstate); thread_bootstate_free(boot, 1); return NULL; } diff --git a/contrib/tools/python3/Modules/clinic/_cursesmodule.c.h b/contrib/tools/python3/Modules/clinic/_cursesmodule.c.h index 9d99d41af5..1d716bec89 100644 --- a/contrib/tools/python3/Modules/clinic/_cursesmodule.c.h +++ b/contrib/tools/python3/Modules/clinic/_cursesmodule.c.h @@ -3688,25 +3688,55 @@ PyDoc_STRVAR(_curses_resizeterm__doc__, {"resizeterm", _PyCFunction_CAST(_curses_resizeterm), METH_FASTCALL, _curses_resizeterm__doc__}, static PyObject * -_curses_resizeterm_impl(PyObject *module, int nlines, int ncols); +_curses_resizeterm_impl(PyObject *module, short nlines, short ncols); static PyObject * _curses_resizeterm(PyObject *module, PyObject *const *args, Py_ssize_t nargs) { PyObject *return_value = NULL; - int nlines; - int ncols; + short nlines; + short ncols; if (!_PyArg_CheckPositional("resizeterm", nargs, 2, 2)) { goto exit; } - nlines = _PyLong_AsInt(args[0]); - if (nlines == -1 && PyErr_Occurred()) { - goto exit; + { + long ival = PyLong_AsLong(args[0]); + if (ival == -1 && PyErr_Occurred()) { + goto exit; + } + else if (ival < SHRT_MIN) { + PyErr_SetString(PyExc_OverflowError, + "signed short integer is less than minimum"); + goto exit; + } + else if (ival > SHRT_MAX) { + PyErr_SetString(PyExc_OverflowError, + "signed short integer is greater than maximum"); + goto exit; + } + else { + nlines = (short) ival; + } } - ncols = _PyLong_AsInt(args[1]); - if (ncols == -1 && PyErr_Occurred()) { - goto exit; + { + long ival = PyLong_AsLong(args[1]); + if (ival == -1 && PyErr_Occurred()) { + goto exit; + } + else if (ival < SHRT_MIN) { + PyErr_SetString(PyExc_OverflowError, + "signed short integer is less than minimum"); + goto exit; + } + else if (ival > SHRT_MAX) { + PyErr_SetString(PyExc_OverflowError, + "signed short integer is greater than maximum"); + goto exit; + } + else { + ncols = (short) ival; + } } return_value = _curses_resizeterm_impl(module, nlines, ncols); @@ -3739,25 +3769,55 @@ PyDoc_STRVAR(_curses_resize_term__doc__, {"resize_term", _PyCFunction_CAST(_curses_resize_term), METH_FASTCALL, _curses_resize_term__doc__}, static PyObject * -_curses_resize_term_impl(PyObject *module, int nlines, int ncols); +_curses_resize_term_impl(PyObject *module, short nlines, short ncols); static PyObject * _curses_resize_term(PyObject *module, PyObject *const *args, Py_ssize_t nargs) { PyObject *return_value = NULL; - int nlines; - int ncols; + short nlines; + short ncols; if (!_PyArg_CheckPositional("resize_term", nargs, 2, 2)) { goto exit; } - nlines = _PyLong_AsInt(args[0]); - if (nlines == -1 && PyErr_Occurred()) { - goto exit; + { + long ival = PyLong_AsLong(args[0]); + if (ival == -1 && PyErr_Occurred()) { + goto exit; + } + else if (ival < SHRT_MIN) { + PyErr_SetString(PyExc_OverflowError, + "signed short integer is less than minimum"); + goto exit; + } + else if (ival > SHRT_MAX) { + PyErr_SetString(PyExc_OverflowError, + "signed short integer is greater than maximum"); + goto exit; + } + else { + nlines = (short) ival; + } } - ncols = _PyLong_AsInt(args[1]); - if (ncols == -1 && PyErr_Occurred()) { - goto exit; + { + long ival = PyLong_AsLong(args[1]); + if (ival == -1 && PyErr_Occurred()) { + goto exit; + } + else if (ival < SHRT_MIN) { + PyErr_SetString(PyExc_OverflowError, + "signed short integer is less than minimum"); + goto exit; + } + else if (ival > SHRT_MAX) { + PyErr_SetString(PyExc_OverflowError, + "signed short integer is greater than maximum"); + goto exit; + } + else { + ncols = (short) ival; + } } return_value = _curses_resize_term_impl(module, nlines, ncols); @@ -4313,4 +4373,4 @@ _curses_has_extended_color_support(PyObject *module, PyObject *Py_UNUSED(ignored #ifndef _CURSES_USE_DEFAULT_COLORS_METHODDEF #define _CURSES_USE_DEFAULT_COLORS_METHODDEF #endif /* !defined(_CURSES_USE_DEFAULT_COLORS_METHODDEF) */ -/*[clinic end generated code: output=27a2364193b503c1 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=764ee4c154c6d4a8 input=a9049054013a1b77]*/ diff --git a/contrib/tools/python3/Modules/clinic/posixmodule.c.h b/contrib/tools/python3/Modules/clinic/posixmodule.c.h index f46aa65148..a33461dc56 100644 --- a/contrib/tools/python3/Modules/clinic/posixmodule.c.h +++ b/contrib/tools/python3/Modules/clinic/posixmodule.c.h @@ -1975,25 +1975,55 @@ exit: #if defined(MS_WINDOWS) PyDoc_STRVAR(os__path_exists__doc__, -"_path_exists($module, path, /)\n" +"_path_exists($module, /, path)\n" "--\n" "\n" "Test whether a path exists. Returns False for broken symbolic links."); #define OS__PATH_EXISTS_METHODDEF \ - {"_path_exists", (PyCFunction)os__path_exists, METH_O, os__path_exists__doc__}, + {"_path_exists", _PyCFunction_CAST(os__path_exists), METH_FASTCALL|METH_KEYWORDS, os__path_exists__doc__}, static int os__path_exists_impl(PyObject *module, path_t *path); static PyObject * -os__path_exists(PyObject *module, PyObject *arg) +os__path_exists(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; + #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) + + #define NUM_KEYWORDS 1 + static struct { + PyGC_Head _this_is_not_used; + PyObject_VAR_HEAD + PyObject *ob_item[NUM_KEYWORDS]; + } _kwtuple = { + .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) + .ob_item = { &_Py_ID(path), }, + }; + #undef NUM_KEYWORDS + #define KWTUPLE (&_kwtuple.ob_base.ob_base) + + #else // !Py_BUILD_CORE + # define KWTUPLE NULL + #endif // !Py_BUILD_CORE + + static const char * const _keywords[] = {"path", NULL}; + static _PyArg_Parser _parser = { + .keywords = _keywords, + .fname = "_path_exists", + .kwtuple = KWTUPLE, + }; + #undef KWTUPLE + PyObject *argsbuf[1]; path_t path = PATH_T_INITIALIZE_P("_path_exists", "path", 0, 0, 1, 1); int _return_value; - if (!path_converter(arg, &path)) { + args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf); + if (!args) { + goto exit; + } + if (!path_converter(args[0], &path)) { goto exit; } _return_value = os__path_exists_impl(module, &path); @@ -12002,4 +12032,4 @@ exit: #ifndef OS_WAITSTATUS_TO_EXITCODE_METHODDEF #define OS_WAITSTATUS_TO_EXITCODE_METHODDEF #endif /* !defined(OS_WAITSTATUS_TO_EXITCODE_METHODDEF) */ -/*[clinic end generated code: output=67c2e3d4537287c1 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=6d34c4564aca7725 input=a9049054013a1b77]*/ diff --git a/contrib/tools/python3/Modules/itertoolsmodule.c b/contrib/tools/python3/Modules/itertoolsmodule.c index d42f9dd076..12708f49bd 100644 --- a/contrib/tools/python3/Modules/itertoolsmodule.c +++ b/contrib/tools/python3/Modules/itertoolsmodule.c @@ -1137,7 +1137,7 @@ itertools_tee_impl(PyObject *module, PyObject *iterable, Py_ssize_t n) /*[clinic end generated code: output=1c64519cd859c2f0 input=c99a1472c425d66d]*/ { Py_ssize_t i; - PyObject *it, *copyable, *copyfunc, *result; + PyObject *it, *to, *result; if (n < 0) { PyErr_SetString(PyExc_ValueError, "n must be >= 0"); @@ -1154,41 +1154,24 @@ itertools_tee_impl(PyObject *module, PyObject *iterable, Py_ssize_t n) return NULL; } - if (_PyObject_LookupAttr(it, &_Py_ID(__copy__), ©func) < 0) { - Py_DECREF(it); + (void)&_Py_ID(__copy__); // Retain a reference to __copy__ + itertools_state *state = get_module_state(module); + to = tee_fromiterable(state, it); + Py_DECREF(it); + if (to == NULL) { Py_DECREF(result); return NULL; } - if (copyfunc != NULL) { - copyable = it; - } - else { - itertools_state *state = get_module_state(module); - copyable = tee_fromiterable(state, it); - Py_DECREF(it); - if (copyable == NULL) { - Py_DECREF(result); - return NULL; - } - copyfunc = PyObject_GetAttr(copyable, &_Py_ID(__copy__)); - if (copyfunc == NULL) { - Py_DECREF(copyable); - Py_DECREF(result); - return NULL; - } - } - PyTuple_SET_ITEM(result, 0, copyable); + PyTuple_SET_ITEM(result, 0, to); for (i = 1; i < n; i++) { - copyable = _PyObject_CallNoArgs(copyfunc); - if (copyable == NULL) { - Py_DECREF(copyfunc); + to = tee_copy((teeobject *)to, NULL); + if (to == NULL) { Py_DECREF(result); return NULL; } - PyTuple_SET_ITEM(result, i, copyable); + PyTuple_SET_ITEM(result, i, to); } - Py_DECREF(copyfunc); return result; } @@ -3998,7 +3981,7 @@ typedef struct { fast_mode: when cnt an integer < PY_SSIZE_T_MAX and no step is specified. - assert(cnt != PY_SSIZE_T_MAX && long_cnt == NULL && long_step==PyLong(1)); + assert(long_cnt == NULL && long_step==PyLong(1)); Advances with: cnt += 1 When count hits Y_SSIZE_T_MAX, switch to slow_mode. @@ -4085,7 +4068,7 @@ itertools_count_impl(PyTypeObject *type, PyObject *long_cnt, else cnt = PY_SSIZE_T_MAX; - assert((cnt != PY_SSIZE_T_MAX && long_cnt == NULL && fast_mode) || + assert((long_cnt == NULL && fast_mode) || (cnt == PY_SSIZE_T_MAX && long_cnt != NULL && !fast_mode)); assert(!fast_mode || (PyLong_Check(long_step) && PyLong_AS_LONG(long_step) == 1)); @@ -4157,7 +4140,7 @@ count_next(countobject *lz) static PyObject * count_repr(countobject *lz) { - if (lz->cnt != PY_SSIZE_T_MAX) + if (lz->long_cnt == NULL) return PyUnicode_FromFormat("%s(%zd)", _PyType_Name(Py_TYPE(lz)), lz->cnt); diff --git a/contrib/tools/python3/Modules/posixmodule.c b/contrib/tools/python3/Modules/posixmodule.c index e5680a9874..ce2c80e6da 100644 --- a/contrib/tools/python3/Modules/posixmodule.c +++ b/contrib/tools/python3/Modules/posixmodule.c @@ -24,6 +24,7 @@ #include "pycore_object.h" // _PyObject_LookupSpecial() #include "pycore_pystate.h" // _PyInterpreterState_GET() #include "pycore_signal.h" // Py_NSIG +#include "pycore_typeobject.h" // _PyType_AddMethod() #ifdef MS_WINDOWS # include <windows.h> @@ -5210,7 +5211,6 @@ _testFileType(path_t *path, int testedType) os._path_exists -> bool path: path_t(allow_fd=True, suppress_value_error=True) - / Test whether a path exists. Returns False for broken symbolic links. @@ -5218,7 +5218,7 @@ Test whether a path exists. Returns False for broken symbolic links. static int os__path_exists_impl(PyObject *module, path_t *path) -/*[clinic end generated code: output=8da13acf666e16ba input=29198507a6082a57]*/ +/*[clinic end generated code: output=8da13acf666e16ba input=142beabfc66783eb]*/ { return _testFileExists(path, TRUE); } @@ -7868,6 +7868,16 @@ os_sched_param_impl(PyTypeObject *type, PyObject *sched_priority) return res; } +static PyObject * +os_sched_param_reduce(PyObject *self, PyObject *Py_UNUSED(ignored)) +{ + return Py_BuildValue("(O(N))", Py_TYPE(self), PyStructSequence_GetItem(self, 0)); +} + +static PyMethodDef os_sched_param_reduce_method = { + "__reduce__", (PyCFunction)os_sched_param_reduce, METH_NOARGS|METH_COEXIST, NULL, +}; + PyDoc_VAR(os_sched_param__doc__); static PyStructSequence_Field sched_param_fields[] = { @@ -17006,6 +17016,12 @@ posixmodule_exec(PyObject *m) return -1; } ((PyTypeObject *)state->SchedParamType)->tp_new = os_sched_param; + if (_PyType_AddMethod((PyTypeObject *)state->SchedParamType, + &os_sched_param_reduce_method) < 0) + { + return -1; + } + PyType_Modified((PyTypeObject *)state->SchedParamType); #endif /* initialize TerminalSize_info */ diff --git a/contrib/tools/python3/Modules/socketmodule.c b/contrib/tools/python3/Modules/socketmodule.c index 97248792c0..7f2ebba988 100644 --- a/contrib/tools/python3/Modules/socketmodule.c +++ b/contrib/tools/python3/Modules/socketmodule.c @@ -816,7 +816,9 @@ internal_select(PySocketSockObject *s, int writing, _PyTime_t interval, /* s->sock_timeout is in seconds, timeout in ms */ ms = _PyTime_AsMilliseconds(interval, _PyTime_ROUND_CEILING); - assert(ms <= INT_MAX); + if (ms > INT_MAX) { + ms = INT_MAX; + } /* On some OSes, typically BSD-based ones, the timeout parameter of the poll() syscall, when negative, must be exactly INFTIM, where defined, @@ -828,6 +830,7 @@ internal_select(PySocketSockObject *s, int writing, _PyTime_t interval, ms = -1; #endif } + assert(INT_MIN <= ms && ms <= INT_MAX); Py_BEGIN_ALLOW_THREADS; n = poll(&pollfd, 1, (int)ms); diff --git a/contrib/tools/python3/Modules/timemodule.c b/contrib/tools/python3/Modules/timemodule.c index 8613fccfe0..5907826357 100644 --- a/contrib/tools/python3/Modules/timemodule.c +++ b/contrib/tools/python3/Modules/timemodule.c @@ -795,27 +795,100 @@ the C library strftime function.\n" #endif static PyObject * -time_strftime(PyObject *module, PyObject *args) +time_strftime1(time_char **outbuf, size_t *bufsize, + time_char *format, size_t fmtlen, + struct tm *tm) { - PyObject *tup = NULL; - struct tm buf; - const time_char *fmt; + size_t buflen; +#if defined(MS_WINDOWS) && !defined(HAVE_WCSFTIME) + /* check that the format string contains only valid directives */ + for (const time_char *f = strchr(format, '%'); + f != NULL; + f = strchr(f + 2, '%')) + { + if (f[1] == '#') + ++f; /* not documented by python, */ + if (f[1] == '\0') + break; + if ((f[1] == 'y') && tm->tm_year < 0) { + PyErr_SetString(PyExc_ValueError, + "format %y requires year >= 1900 on Windows"); + return NULL; + } + } +#elif (defined(_AIX) || (defined(__sun) && defined(__SVR4))) && defined(HAVE_WCSFTIME) + for (const time_char *f = wcschr(format, '%'); + f != NULL; + f = wcschr(f + 2, '%')) + { + if (f[1] == L'\0') + break; + /* Issue #19634: On AIX, wcsftime("y", (1899, 1, 1, 0, 0, 0, 0, 0, 0)) + returns "0/" instead of "99" */ + if (f[1] == L'y' && tm->tm_year < 0) { + PyErr_SetString(PyExc_ValueError, + "format %y requires year >= 1900 on AIX"); + return NULL; + } + } +#endif + + /* I hate these functions that presume you know how big the output + * will be ahead of time... + */ + while (1) { + if (*bufsize > PY_SSIZE_T_MAX/sizeof(time_char)) { + PyErr_NoMemory(); + return NULL; + } + *outbuf = (time_char *)PyMem_Realloc(*outbuf, + *bufsize*sizeof(time_char)); + if (*outbuf == NULL) { + PyErr_NoMemory(); + return NULL; + } +#if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__) + errno = 0; +#endif + _Py_BEGIN_SUPPRESS_IPH + buflen = format_time(*outbuf, *bufsize, format, tm); + _Py_END_SUPPRESS_IPH +#if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__) + /* VisualStudio .NET 2005 does this properly */ + if (buflen == 0 && errno == EINVAL) { + PyErr_SetString(PyExc_ValueError, "Invalid format string"); + return NULL; + } +#endif + if (buflen == 0 && *bufsize < 256 * fmtlen) { + *bufsize += *bufsize; + continue; + } + /* If the buffer is 256 times as long as the format, + it's probably not failing for lack of room! + More likely, the format yields an empty result, + e.g. an empty format, or %Z when the timezone + is unknown. */ #ifdef HAVE_WCSFTIME - wchar_t *format; + return PyUnicode_FromWideChar(*outbuf, buflen); #else - PyObject *format; + return PyUnicode_DecodeLocaleAndSize(*outbuf, buflen, "surrogateescape"); #endif + } +} + +static PyObject * +time_strftime(PyObject *module, PyObject *args) +{ + PyObject *tup = NULL; + struct tm buf; PyObject *format_arg; - size_t fmtlen, buflen; - time_char *outbuf = NULL; - size_t i; - PyObject *ret = NULL; + Py_ssize_t format_size; + time_char *format, *outbuf = NULL; + size_t fmtlen, bufsize = 1024; memset((void *) &buf, '\0', sizeof(buf)); - /* Will always expect a unicode string to be passed as format. - Given that there's no str type anymore in py3k this seems safe. - */ if (!PyArg_ParseTuple(args, "U|O:strftime", &format_arg, &tup)) return NULL; @@ -848,101 +921,65 @@ time_strftime(PyObject *module, PyObject *args) else if (buf.tm_isdst > 1) buf.tm_isdst = 1; -#ifdef HAVE_WCSFTIME - format = PyUnicode_AsWideCharString(format_arg, NULL); - if (format == NULL) + format_size = PyUnicode_GET_LENGTH(format_arg); + if ((size_t)format_size > PY_SSIZE_T_MAX/sizeof(time_char) - 1) { + PyErr_NoMemory(); return NULL; - fmt = format; -#else - /* Convert the unicode string to an ascii one */ - format = PyUnicode_EncodeLocale(format_arg, "surrogateescape"); - if (format == NULL) + } + format = PyMem_Malloc((format_size + 1)*sizeof(time_char)); + if (format == NULL) { + PyErr_NoMemory(); return NULL; - fmt = PyBytes_AS_STRING(format); -#endif - -#if defined(MS_WINDOWS) && !defined(HAVE_WCSFTIME) - /* check that the format string contains only valid directives */ - for (outbuf = strchr(fmt, '%'); - outbuf != NULL; - outbuf = strchr(outbuf+2, '%')) - { - if (outbuf[1] == '#') - ++outbuf; /* not documented by python, */ - if (outbuf[1] == '\0') - break; - if ((outbuf[1] == 'y') && buf.tm_year < 0) { - PyErr_SetString(PyExc_ValueError, - "format %y requires year >= 1900 on Windows"); - Py_DECREF(format); - return NULL; - } } -#elif (defined(_AIX) || (defined(__sun) && defined(__SVR4))) && defined(HAVE_WCSFTIME) - for (outbuf = wcschr(fmt, '%'); - outbuf != NULL; - outbuf = wcschr(outbuf+2, '%')) - { - if (outbuf[1] == L'\0') - break; - /* Issue #19634: On AIX, wcsftime("y", (1899, 1, 1, 0, 0, 0, 0, 0, 0)) - returns "0/" instead of "99" */ - if (outbuf[1] == L'y' && buf.tm_year < 0) { - PyErr_SetString(PyExc_ValueError, - "format %y requires year >= 1900 on AIX"); - PyMem_Free(format); - return NULL; + _PyUnicodeWriter writer; + _PyUnicodeWriter_Init(&writer); + writer.overallocate = 1; + Py_ssize_t i = 0; + while (i < format_size) { + fmtlen = 0; + for (; i < format_size; i++) { + Py_UCS4 c = PyUnicode_READ_CHAR(format_arg, i); + if (!c || c > 127) { + break; + } + format[fmtlen++] = (char)c; } - } -#endif - - fmtlen = time_strlen(fmt); - - /* I hate these functions that presume you know how big the output - * will be ahead of time... - */ - for (i = 1024; ; i += i) { - outbuf = (time_char *)PyMem_Malloc(i*sizeof(time_char)); - if (outbuf == NULL) { - PyErr_NoMemory(); - break; + if (fmtlen) { + format[fmtlen] = 0; + PyObject *unicode = time_strftime1(&outbuf, &bufsize, + format, fmtlen, &buf); + if (unicode == NULL) { + goto error; + } + if (_PyUnicodeWriter_WriteStr(&writer, unicode) < 0) { + Py_DECREF(unicode); + goto error; + } + Py_DECREF(unicode); } -#if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__) - errno = 0; -#endif - _Py_BEGIN_SUPPRESS_IPH - buflen = format_time(outbuf, i, fmt, &buf); - _Py_END_SUPPRESS_IPH -#if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__) - /* VisualStudio .NET 2005 does this properly */ - if (buflen == 0 && errno == EINVAL) { - PyErr_SetString(PyExc_ValueError, "Invalid format string"); - PyMem_Free(outbuf); - break; + + Py_ssize_t start = i; + for (; i < format_size; i++) { + Py_UCS4 c = PyUnicode_READ_CHAR(format_arg, i); + if (c == '%') { + break; + } } -#endif - if (buflen > 0 || i >= 256 * fmtlen) { - /* If the buffer is 256 times as long as the format, - it's probably not failing for lack of room! - More likely, the format yields an empty result, - e.g. an empty format, or %Z when the timezone - is unknown. */ -#ifdef HAVE_WCSFTIME - ret = PyUnicode_FromWideChar(outbuf, buflen); -#else - ret = PyUnicode_DecodeLocaleAndSize(outbuf, buflen, "surrogateescape"); -#endif - PyMem_Free(outbuf); - break; + if (start < i) { + if (_PyUnicodeWriter_WriteSubstring(&writer, format_arg, start, i) < 0) { + goto error; + } } - PyMem_Free(outbuf); } -#ifdef HAVE_WCSFTIME + + PyMem_Free(outbuf); PyMem_Free(format); -#else - Py_DECREF(format); -#endif - return ret; + return _PyUnicodeWriter_Finish(&writer); +error: + PyMem_Free(outbuf); + PyMem_Free(format); + _PyUnicodeWriter_Dealloc(&writer); + return NULL; } #undef time_char @@ -1292,8 +1329,14 @@ _PyTime_GetProcessTimeWithInfo(_PyTime_t *tp, _Py_clock_info_t *info) #else /* clock_gettime */ +// gh-115714: Don't use CLOCK_PROCESS_CPUTIME_ID on WASI. +/* CLOCK_PROF is defined on NetBSD, but not supported. + * CLOCK_PROCESS_CPUTIME_ID is broken on NetBSD for the same reason as + * CLOCK_THREAD_CPUTIME_ID (see comment below). + */ #if defined(HAVE_CLOCK_GETTIME) \ - && (defined(CLOCK_PROCESS_CPUTIME_ID) || defined(CLOCK_PROF)) + && (defined(CLOCK_PROCESS_CPUTIME_ID) || defined(CLOCK_PROF)) \ + && !defined(__NetBSD__) struct timespec ts; if (HAVE_CLOCK_GETTIME_RUNTIME) { @@ -1499,9 +1542,16 @@ _PyTime_GetThreadTimeWithInfo(_PyTime_t *tp, _Py_clock_info_t *info) return 0; } +/* CLOCK_THREAD_CPUTIME_ID is broken on NetBSD: the result of clock_gettime() + * includes the sleeping time, that defeats the purpose of the clock. + * Also, clock_getres() does not support it. + * https://github.com/python/cpython/issues/123978 + * https://gnats.netbsd.org/57512 + */ #elif defined(HAVE_CLOCK_GETTIME) && \ - defined(CLOCK_PROCESS_CPUTIME_ID) && \ - !defined(__EMSCRIPTEN__) && !defined(__wasi__) + defined(CLOCK_THREAD_CPUTIME_ID) && \ + !defined(__EMSCRIPTEN__) && !defined(__wasi__) && \ + !defined(__NetBSD__) #define HAVE_THREAD_TIME #if defined(__APPLE__) && defined(__has_attribute) && __has_attribute(availability) diff --git a/contrib/tools/python3/Objects/complexobject.c b/contrib/tools/python3/Objects/complexobject.c index 7f7e7e6b08..eff1738029 100644 --- a/contrib/tools/python3/Objects/complexobject.c +++ b/contrib/tools/python3/Objects/complexobject.c @@ -146,7 +146,7 @@ _Py_c_pow(Py_complex a, Py_complex b) at = atan2(a.imag, a.real); phase = at*b.real; if (b.imag != 0.0) { - len /= exp(at*b.imag); + len *= exp(-at*b.imag); phase += b.imag*log(vabs); } r.real = len*cos(phase); diff --git a/contrib/tools/python3/Objects/dictobject.c b/contrib/tools/python3/Objects/dictobject.c index 0712bedc83..4e96531494 100644 --- a/contrib/tools/python3/Objects/dictobject.c +++ b/contrib/tools/python3/Objects/dictobject.c @@ -3634,8 +3634,8 @@ PyDoc_STRVAR(sizeof__doc__, "D.__sizeof__() -> size of D in memory, in bytes"); PyDoc_STRVAR(update__doc__, -"D.update([E, ]**F) -> None. Update D from dict/iterable E and F.\n\ -If E is present and has a .keys() method, then does: for k in E: D[k] = E[k]\n\ +"D.update([E, ]**F) -> None. Update D from mapping/iterable E and F.\n\ +If E is present and has a .keys() method, then does: for k in E.keys(): D[k] = E[k]\n\ If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v\n\ In either case, this is followed by: for k in F: D[k] = F[k]"); diff --git a/contrib/tools/python3/Objects/exceptions.c b/contrib/tools/python3/Objects/exceptions.c index 4f2153b193..c579563db7 100644 --- a/contrib/tools/python3/Objects/exceptions.c +++ b/contrib/tools/python3/Objects/exceptions.c @@ -2961,46 +2961,55 @@ UnicodeEncodeError_init(PyObject *self, PyObject *args, PyObject *kwds) static PyObject * UnicodeEncodeError_str(PyObject *self) { - PyUnicodeErrorObject *uself = (PyUnicodeErrorObject *)self; + PyUnicodeErrorObject *exc = (PyUnicodeErrorObject *)self; PyObject *result = NULL; PyObject *reason_str = NULL; PyObject *encoding_str = NULL; - if (!uself->object) + if (exc->object == NULL) { /* Not properly initialized. */ return PyUnicode_FromString(""); + } /* Get reason and encoding as strings, which they might not be if they've been modified after we were constructed. */ - reason_str = PyObject_Str(uself->reason); - if (reason_str == NULL) + reason_str = PyObject_Str(exc->reason); + if (reason_str == NULL) { goto done; - encoding_str = PyObject_Str(uself->encoding); - if (encoding_str == NULL) + } + encoding_str = PyObject_Str(exc->encoding); + if (encoding_str == NULL) { goto done; + } + + Py_ssize_t len = PyUnicode_GET_LENGTH(exc->object); + Py_ssize_t start = exc->start, end = exc->end; - if (uself->start < PyUnicode_GET_LENGTH(uself->object) && uself->end == uself->start+1) { - Py_UCS4 badchar = PyUnicode_ReadChar(uself->object, uself->start); + if ((start >= 0 && start < len) && (end >= 0 && end <= len) && end == start + 1) { + Py_UCS4 badchar = PyUnicode_ReadChar(exc->object, start); const char *fmt; - if (badchar <= 0xff) + if (badchar <= 0xff) { fmt = "'%U' codec can't encode character '\\x%02x' in position %zd: %U"; - else if (badchar <= 0xffff) + } + else if (badchar <= 0xffff) { fmt = "'%U' codec can't encode character '\\u%04x' in position %zd: %U"; - else + } + else { fmt = "'%U' codec can't encode character '\\U%08x' in position %zd: %U"; + } result = PyUnicode_FromFormat( fmt, encoding_str, (int)badchar, - uself->start, + start, reason_str); } else { result = PyUnicode_FromFormat( "'%U' codec can't encode characters in position %zd-%zd: %U", encoding_str, - uself->start, - uself->end-1, + start, + end - 1, reason_str); } done: @@ -3074,41 +3083,46 @@ error: static PyObject * UnicodeDecodeError_str(PyObject *self) { - PyUnicodeErrorObject *uself = (PyUnicodeErrorObject *)self; + PyUnicodeErrorObject *exc = (PyUnicodeErrorObject *)self; PyObject *result = NULL; PyObject *reason_str = NULL; PyObject *encoding_str = NULL; - if (!uself->object) + if (exc->object == NULL) { /* Not properly initialized. */ return PyUnicode_FromString(""); + } /* Get reason and encoding as strings, which they might not be if they've been modified after we were constructed. */ - reason_str = PyObject_Str(uself->reason); - if (reason_str == NULL) + reason_str = PyObject_Str(exc->reason); + if (reason_str == NULL) { goto done; - encoding_str = PyObject_Str(uself->encoding); - if (encoding_str == NULL) + } + encoding_str = PyObject_Str(exc->encoding); + if (encoding_str == NULL) { goto done; + } + + Py_ssize_t len = PyBytes_GET_SIZE(exc->object); + Py_ssize_t start = exc->start, end = exc->end; - if (uself->start < PyBytes_GET_SIZE(uself->object) && uself->end == uself->start+1) { - int byte = (int)(PyBytes_AS_STRING(((PyUnicodeErrorObject *)self)->object)[uself->start]&0xff); + if ((start >= 0 && start < len) && (end >= 0 && end <= len) && end == start + 1) { + int badbyte = (int)(PyBytes_AS_STRING(exc->object)[start] & 0xff); result = PyUnicode_FromFormat( "'%U' codec can't decode byte 0x%02x in position %zd: %U", encoding_str, - byte, - uself->start, + badbyte, + start, reason_str); } else { result = PyUnicode_FromFormat( "'%U' codec can't decode bytes in position %zd-%zd: %U", encoding_str, - uself->start, - uself->end-1, - reason_str - ); + start, + end - 1, + reason_str); } done: Py_XDECREF(reason_str); @@ -3171,42 +3185,49 @@ UnicodeTranslateError_init(PyUnicodeErrorObject *self, PyObject *args, static PyObject * UnicodeTranslateError_str(PyObject *self) { - PyUnicodeErrorObject *uself = (PyUnicodeErrorObject *)self; + PyUnicodeErrorObject *exc = (PyUnicodeErrorObject *)self; PyObject *result = NULL; PyObject *reason_str = NULL; - if (!uself->object) + if (exc->object == NULL) { /* Not properly initialized. */ return PyUnicode_FromString(""); + } /* Get reason as a string, which it might not be if it's been modified after we were constructed. */ - reason_str = PyObject_Str(uself->reason); - if (reason_str == NULL) + reason_str = PyObject_Str(exc->reason); + if (reason_str == NULL) { goto done; + } + + Py_ssize_t len = PyUnicode_GET_LENGTH(exc->object); + Py_ssize_t start = exc->start, end = exc->end; - if (uself->start < PyUnicode_GET_LENGTH(uself->object) && uself->end == uself->start+1) { - Py_UCS4 badchar = PyUnicode_ReadChar(uself->object, uself->start); + if ((start >= 0 && start < len) && (end >= 0 && end <= len) && end == start + 1) { + Py_UCS4 badchar = PyUnicode_ReadChar(exc->object, start); const char *fmt; - if (badchar <= 0xff) + if (badchar <= 0xff) { fmt = "can't translate character '\\x%02x' in position %zd: %U"; - else if (badchar <= 0xffff) + } + else if (badchar <= 0xffff) { fmt = "can't translate character '\\u%04x' in position %zd: %U"; - else + } + else { fmt = "can't translate character '\\U%08x' in position %zd: %U"; + } result = PyUnicode_FromFormat( fmt, (int)badchar, - uself->start, - reason_str - ); - } else { + start, + reason_str); + } + else { result = PyUnicode_FromFormat( "can't translate characters in position %zd-%zd: %U", - uself->start, - uself->end-1, - reason_str - ); + start, + end - 1, + reason_str); } done: Py_XDECREF(reason_str); diff --git a/contrib/tools/python3/Objects/memoryobject.c b/contrib/tools/python3/Objects/memoryobject.c index 26871612ea..9a5f9c665b 100644 --- a/contrib/tools/python3/Objects/memoryobject.c +++ b/contrib/tools/python3/Objects/memoryobject.c @@ -3322,6 +3322,7 @@ memory_iter(PyObject *seq) PyErr_BadInternalCall(); return NULL; } + CHECK_RELEASED(seq); PyMemoryViewObject *obj = (PyMemoryViewObject *)seq; int ndims = obj->view.ndim; if (ndims == 0) { diff --git a/contrib/tools/python3/Objects/object.c b/contrib/tools/python3/Objects/object.c index 6b2e0aeaab..706719116d 100644 --- a/contrib/tools/python3/Objects/object.c +++ b/contrib/tools/python3/Objects/object.c @@ -159,11 +159,27 @@ _PyDebug_PrintTotalRefs(void) { #ifdef Py_TRACE_REFS -#define REFCHAIN(interp) &interp->object_state.refchain +#define REFCHAIN(interp) interp->object_state.refchain + +static inline int +has_own_refchain(PyInterpreterState *interp) +{ + if (interp->feature_flags & Py_RTFLAGS_USE_MAIN_OBMALLOC) { + return (_Py_IsMainInterpreter(interp) + || _PyInterpreterState_Main() == NULL); + } + return 1; +} static inline void init_refchain(PyInterpreterState *interp) { + if (!has_own_refchain(interp)) { + // Legacy subinterpreters share a refchain with the main interpreter. + REFCHAIN(interp) = REFCHAIN(_PyInterpreterState_Main()); + return; + } + REFCHAIN(interp) = &interp->object_state._refchain_obj; PyObject *refchain = REFCHAIN(interp); refchain->_ob_prev = refchain; refchain->_ob_next = refchain; @@ -2010,9 +2026,7 @@ void _PyObject_InitState(PyInterpreterState *interp) { #ifdef Py_TRACE_REFS - if (!_Py_IsMainInterpreter(interp)) { - init_refchain(interp); - } + init_refchain(interp); #endif } diff --git a/contrib/tools/python3/Objects/typeobject.c b/contrib/tools/python3/Objects/typeobject.c index 017d951bdc..46d7a4b973 100644 --- a/contrib/tools/python3/Objects/typeobject.c +++ b/contrib/tools/python3/Objects/typeobject.c @@ -6656,6 +6656,12 @@ type_add_method(PyTypeObject *type, PyMethodDef *meth) return 0; } +int +_PyType_AddMethod(PyTypeObject *type, PyMethodDef *meth) +{ + return type_add_method(type, meth); +} + /* Add the methods from tp_methods to the __dict__ in a type object */ static int @@ -8212,13 +8218,13 @@ wrap_buffer(PyObject *self, PyObject *args, void *wrapped) if (flags == -1 && PyErr_Occurred()) { return NULL; } - if (flags > INT_MAX) { + if (flags > INT_MAX || flags < INT_MIN) { PyErr_SetString(PyExc_OverflowError, - "buffer flags too large"); + "buffer flags out of range"); return NULL; } - return _PyMemoryView_FromBufferProc(self, Py_SAFE_DOWNCAST(flags, Py_ssize_t, int), + return _PyMemoryView_FromBufferProc(self, (int)flags, (getbufferproc)wrapped); } diff --git a/contrib/tools/python3/Objects/unicodeobject.c b/contrib/tools/python3/Objects/unicodeobject.c index 3235ae8ae0..8fe275d4c8 100644 --- a/contrib/tools/python3/Objects/unicodeobject.c +++ b/contrib/tools/python3/Objects/unicodeobject.c @@ -287,13 +287,37 @@ hashtable_unicode_compare(const void *key1, const void *key2) } } +/* Return true if this interpreter should share the main interpreter's + intern_dict. That's important for interpreters which load basic + single-phase init extension modules (m_size == -1). There could be interned + immortal strings that are shared between interpreters, due to the + PyDict_Update(mdict, m_copy) call in import_find_extension(). + + It's not safe to deallocate those strings until all interpreters that + potentially use them are freed. By storing them in the main interpreter, we + ensure they get freed after all other interpreters are freed. +*/ +static bool +has_shared_intern_dict(PyInterpreterState *interp) +{ + PyInterpreterState *main_interp = _PyInterpreterState_Main(); + return interp != main_interp && interp->feature_flags & Py_RTFLAGS_USE_MAIN_OBMALLOC; +} + static int init_interned_dict(PyInterpreterState *interp) { assert(get_interned_dict(interp) == NULL); - PyObject *interned = interned = PyDict_New(); - if (interned == NULL) { - return -1; + PyObject *interned; + if (has_shared_intern_dict(interp)) { + interned = get_interned_dict(_PyInterpreterState_Main()); + Py_INCREF(interned); + } + else { + interned = PyDict_New(); + if (interned == NULL) { + return -1; + } } _Py_INTERP_CACHED_OBJECT(interp, interned_strings) = interned; return 0; @@ -304,7 +328,10 @@ clear_interned_dict(PyInterpreterState *interp) { PyObject *interned = get_interned_dict(interp); if (interned != NULL) { - PyDict_Clear(interned); + if (!has_shared_intern_dict(interp)) { + // only clear if the dict belongs to this interpreter + PyDict_Clear(interned); + } Py_DECREF(interned); _Py_INTERP_CACHED_OBJECT(interp, interned_strings) = NULL; } @@ -1445,12 +1472,12 @@ _copy_characters(PyObject *to, Py_ssize_t to_start, assert(PyUnicode_Check(from)); assert(from_start + how_many <= PyUnicode_GET_LENGTH(from)); - assert(PyUnicode_Check(to)); - assert(to_start + how_many <= PyUnicode_GET_LENGTH(to)); - if (how_many == 0) return 0; + assert(PyUnicode_Check(to)); + assert(to_start + how_many <= PyUnicode_GET_LENGTH(to)); + from_kind = PyUnicode_KIND(from); from_data = PyUnicode_DATA(from); to_kind = PyUnicode_KIND(to); @@ -3996,6 +4023,18 @@ PyUnicode_AsUTF8(PyObject *unicode) return PyUnicode_AsUTF8AndSize(unicode, NULL); } +const char * +_PyUnicode_AsUTF8NoNUL(PyObject *unicode) +{ + Py_ssize_t size; + const char *s = PyUnicode_AsUTF8AndSize(unicode, &size); + if (s && strlen(s) != (size_t)size) { + PyErr_SetString(PyExc_ValueError, "embedded null character"); + return NULL; + } + return s; +} + /* PyUnicode_GetSize() has been deprecated since Python 3.3 because it returned length of Py_UNICODE. @@ -15145,6 +15184,13 @@ _PyUnicode_ClearInterned(PyInterpreterState *interp) } assert(PyDict_CheckExact(interned)); + if (has_shared_intern_dict(interp)) { + // the dict doesn't belong to this interpreter, skip the debug + // checks on it and just clear the pointer to it + clear_interned_dict(interp); + return; + } + #ifdef INTERNED_STATS fprintf(stderr, "releasing %zd interned strings\n", PyDict_GET_SIZE(interned)); @@ -15439,7 +15485,7 @@ encode_wstr_utf8(wchar_t *wstr, char **str, const char *name) int res; res = _Py_EncodeUTF8Ex(wstr, str, NULL, NULL, 1, _Py_ERROR_STRICT); if (res == -2) { - PyErr_Format(PyExc_RuntimeWarning, "cannot decode %s", name); + PyErr_Format(PyExc_RuntimeError, "cannot encode %s", name); return -1; } if (res < 0) { @@ -15663,8 +15709,10 @@ _PyUnicode_Fini(PyInterpreterState *interp) { struct _Py_unicode_state *state = &interp->unicode; - // _PyUnicode_ClearInterned() must be called before _PyUnicode_Fini() - assert(get_interned_dict(interp) == NULL); + if (!has_shared_intern_dict(interp)) { + // _PyUnicode_ClearInterned() must be called before _PyUnicode_Fini() + assert(get_interned_dict(interp) == NULL); + } _PyUnicode_FiniEncodings(&state->fs_codec); diff --git a/contrib/tools/python3/Parser/action_helpers.c b/contrib/tools/python3/Parser/action_helpers.c index 085622e655..be52d89495 100644 --- a/contrib/tools/python3/Parser/action_helpers.c +++ b/contrib/tools/python3/Parser/action_helpers.c @@ -1043,6 +1043,9 @@ expr_ty _PyPegen_collect_call_seqs(Parser *p, asdl_expr_seq *a, asdl_seq *b, } asdl_expr_seq *args = _Py_asdl_expr_seq_new(total_len, arena); + if (args == NULL) { + return NULL; + } Py_ssize_t i = 0; for (i = 0; i < args_len; i++) { @@ -1210,6 +1213,9 @@ unpack_top_level_joined_strs(Parser *p, asdl_expr_seq *raw_expressions) { } asdl_expr_seq *expressions = _Py_asdl_expr_seq_new(req_size, p->arena); + if (expressions == NULL) { + return NULL; + } Py_ssize_t raw_index, req_index = 0; for (raw_index = 0; raw_index < raw_size; raw_index++) { @@ -1400,6 +1406,9 @@ expr_ty _PyPegen_formatted_value(Parser *p, expr_ty expression, Token *debug, } asdl_expr_seq *values = _Py_asdl_expr_seq_new(2, arena); + if (values == NULL) { + return NULL; + } asdl_seq_SET(values, 0, debug_text); asdl_seq_SET(values, 1, formatted_value); return _PyAST_JoinedStr(values, lineno, col_offset, debug_end_line, diff --git a/contrib/tools/python3/Python/Python-ast.c b/contrib/tools/python3/Python/Python-ast.c index ecaff2041f..3d5aeff837 100644 --- a/contrib/tools/python3/Python/Python-ast.c +++ b/contrib/tools/python3/Python/Python-ast.c @@ -863,14 +863,15 @@ ast_type_init(PyObject *self, PyObject *args, PyObject *kw) Py_ssize_t i, numfields = 0; int res = -1; PyObject *key, *value, *fields; - if (_PyObject_LookupAttr((PyObject*)Py_TYPE(self), state->_fields, &fields) < 0) { + + fields = PyObject_GetAttr((PyObject*)Py_TYPE(self), state->_fields); + if (fields == NULL) { goto cleanup; } - if (fields) { - numfields = PySequence_Size(fields); - if (numfields == -1) { - goto cleanup; - } + + numfields = PySequence_Size(fields); + if (numfields == -1) { + goto cleanup; } res = 0; /* if no error occurs, this stays 0 to the end */ diff --git a/contrib/tools/python3/Python/compile.c b/contrib/tools/python3/Python/compile.c index 49b2ebf003..56fdbfae6f 100644 --- a/contrib/tools/python3/Python/compile.c +++ b/contrib/tools/python3/Python/compile.c @@ -1835,7 +1835,7 @@ compiler_make_closure(struct compiler *c, location loc, c->u->u_metadata.u_name, co->co_name, freevars); - Py_DECREF(freevars); + Py_XDECREF(freevars); return ERROR; } ADDOP_I(c, loc, LOAD_CLOSURE, arg); @@ -5191,9 +5191,12 @@ ex_call: } -/* List and set comprehensions and generator expressions work by creating a - nested function to perform the actual iteration. This means that the - iteration variables don't leak into the current scope. +/* List and set comprehensions work by being inlined at the location where + they are defined. The isolation of iteration variables is provided by + pushing/popping clashing locals on the stack. Generator expressions work + by creating a nested function to perform the actual iteration. + This means that the iteration variables don't leak into the current scope. + See https://peps.python.org/pep-0709/ for additional information. The defined function is called immediately following its definition, with the result of that call being the result of the expression. The LC/SC version returns the populated container, while the GE version is diff --git a/contrib/tools/python3/Python/deepfreeze/deepfreeze.c b/contrib/tools/python3/Python/deepfreeze/deepfreeze.c index f7c18bf793..89be737a24 100644 --- a/contrib/tools/python3/Python/deepfreeze/deepfreeze.c +++ b/contrib/tools/python3/Python/deepfreeze/deepfreeze.c @@ -24020,10 +24020,32 @@ const_str_wb = { }; static struct { + PyASCIIObject _ascii; + uint8_t _data[42]; + } +importlib__bootstrap_external_toplevel_consts_25_consts_5 = { + ._ascii = { + .ob_base = { + .ob_refcnt = _Py_IMMORTAL_REFCNT, + .ob_type = &PyUnicode_Type, + }, + .length = 41, + .hash = -1, + .state = { + .kind = 1, + .compact = 1, + .ascii = 1, + .statically_allocated = 1, + }, + }, + ._data = "os.write() didn't write the full pyc file", +}; +static + struct { PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[5]; + PyObject *ob_item[6]; }_object; } importlib__bootstrap_external_toplevel_consts_25_consts = { @@ -24033,7 +24055,7 @@ importlib__bootstrap_external_toplevel_consts_25_consts = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 5, + .ob_size = 6, }, .ob_item = { & importlib__bootstrap_external_toplevel_consts_25_consts_0._ascii.ob_base, @@ -24041,6 +24063,7 @@ importlib__bootstrap_external_toplevel_consts_25_consts = { & const_int_438.ob_base, & const_str_wb._ascii.ob_base, Py_None, + & importlib__bootstrap_external_toplevel_consts_25_consts_5._ascii.ob_base, }, }, }; @@ -24137,7 +24160,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[12]; + PyObject *ob_item[13]; }_object; } importlib__bootstrap_external_toplevel_consts_25_names = { @@ -24147,7 +24170,7 @@ importlib__bootstrap_external_toplevel_consts_25_names = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 12, + .ob_size = 13, }, .ob_item = { &_Py_ID(id), @@ -24159,8 +24182,9 @@ importlib__bootstrap_external_toplevel_consts_25_names = { &_Py_ID(_io), & const_str_FileIO._ascii.ob_base, &_Py_ID(write), - &_Py_ID(replace), + &_Py_ID(len), & const_str_OSError._ascii.ob_base, + &_Py_ID(replace), &_Py_ID(unlink), }, }, @@ -24191,7 +24215,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[197]; + char ob_sval[225]; } importlib__bootstrap_external_toplevel_consts_25_linetable = { .ob_base = { @@ -24199,10 +24223,10 @@ importlib__bootstrap_external_toplevel_consts_25_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 196, + .ob_size = 224, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xf0\x0a\x00\x13\x17\x90\x16\x90\x71\x9c\x12\x98\x44\x9b\x18\x98\x0a\xd0\x0f\x23\x80\x48\xdc\x09\x0c\x8f\x18\x89\x18\x90\x28\xdc\x12\x15\x97\x2a\x91\x2a\x9c\x73\x9f\x7b\x99\x7b\xd1\x12\x2a\xac\x53\xaf\x5c\xa9\x5c\xd1\x12\x39\xb8\x34\xc0\x25\xb9\x3c\xf3\x03\x01\x0a\x49\x01\x80\x42\xf0\x04\x0b\x05\x0e\xf4\x06\x00\x0e\x11\x8f\x5a\x89\x5a\x98\x02\x98\x44\xd4\x0d\x21\xa0\x54\xd8\x0c\x10\x8f\x4a\x89\x4a\x90\x74\xd4\x0c\x1c\xf7\x03\x00\x0e\x22\xe4\x08\x0b\x8f\x0b\x89\x0b\x90\x48\x98\x64\xd5\x08\x23\xf7\x05\x00\x0e\x22\xd0\x0d\x21\xfb\xf4\x06\x00\x0c\x13\xf2\x00\x05\x05\x0e\xf0\x02\x03\x09\x11\xdc\x0c\x0f\x8f\x4a\x89\x4a\x90\x78\xd4\x0c\x20\xf0\x06\x00\x09\x0e\xf8\xf4\x05\x00\x10\x17\xf2\x00\x01\x09\x11\xd8\x0c\x10\xd8\x08\x0d\xf0\x05\x01\x09\x11\xfa\xf0\x07\x05\x05\x0e\xfa", + .ob_sval = "\x80\x00\xf0\x0a\x00\x13\x17\x90\x16\x90\x71\x9c\x12\x98\x44\x9b\x18\x98\x0a\xd0\x0f\x23\x80\x48\xdc\x09\x0c\x8f\x18\x89\x18\x90\x28\xdc\x12\x15\x97\x2a\x91\x2a\x9c\x73\x9f\x7b\x99\x7b\xd1\x12\x2a\xac\x53\xaf\x5c\xa9\x5c\xd1\x12\x39\xb8\x34\xc0\x25\xb9\x3c\xf3\x03\x01\x0a\x49\x01\x80\x42\xf0\x04\x0f\x05\x0e\xf4\x06\x00\x0e\x11\x8f\x5a\x89\x5a\x98\x02\x98\x44\xd4\x0d\x21\xa0\x54\xd8\x1c\x20\x9f\x4a\x99\x4a\xa0\x74\xd3\x1c\x2c\x88\x4d\xf7\x03\x00\x0e\x22\xe0\x0b\x18\x9c\x43\xa0\x04\x9b\x49\xd2\x0b\x25\xf4\x06\x00\x13\x1a\xd0\x1a\x45\xd3\x12\x46\xd0\x0c\x46\xdc\x08\x0b\x8f\x0b\x89\x0b\x90\x48\x98\x64\xd5\x08\x23\xf7\x0d\x00\x0e\x22\xd0\x0d\x21\xfb\xf4\x0e\x00\x0c\x13\xf2\x00\x05\x05\x0e\xf0\x02\x03\x09\x11\xdc\x0c\x0f\x8f\x4a\x89\x4a\x90\x78\xd4\x0c\x20\xf0\x06\x00\x09\x0e\xf8\xf4\x05\x00\x10\x17\xf2\x00\x01\x09\x11\xd8\x0c\x10\xd8\x08\x0d\xf0\x05\x01\x09\x11\xfa\xf0\x07\x05\x05\x0e\xfa", }; static struct { @@ -24219,7 +24243,7 @@ importlib__bootstrap_external_toplevel_consts_25_exceptiontable = { .ob_size = 72, }, .ob_shash = -1, - .ob_sval = "\xc1\x1c\x16\x42\x2f\x00\xc1\x32\x12\x42\x23\x03\xc2\x04\x1e\x42\x2f\x00\xc2\x23\x05\x42\x2c\x07\xc2\x28\x07\x42\x2f\x00\xc2\x2f\x09\x43\x1f\x03\xc2\x39\x15\x43\x0f\x02\xc3\x0e\x01\x43\x1f\x03\xc3\x0f\x09\x43\x1b\x05\xc3\x18\x02\x43\x1f\x03\xc3\x1a\x01\x43\x1b\x05\xc3\x1b\x04\x43\x1f\x03", + .ob_sval = "\xc1\x1c\x16\x43\x08\x00\xc1\x32\x12\x42\x3c\x03\xc2\x04\x37\x43\x08\x00\xc2\x3c\x05\x43\x05\x07\xc3\x01\x07\x43\x08\x00\xc3\x08\x09\x43\x38\x03\xc3\x12\x15\x43\x28\x02\xc3\x27\x01\x43\x38\x03\xc3\x28\x09\x43\x34\x05\xc3\x31\x02\x43\x38\x03\xc3\x33\x01\x43\x34\x05\xc3\x34\x04\x43\x38\x03", }; static struct { @@ -24245,10 +24269,32 @@ const_str_path_tmp = { }; static struct { + PyASCIIObject _ascii; + uint8_t _data[14]; + } +const_str_bytes_written = { + ._ascii = { + .ob_base = { + .ob_refcnt = _Py_IMMORTAL_REFCNT, + .ob_type = &PyUnicode_Type, + }, + .length = 13, + .hash = -1, + .state = { + .kind = 1, + .compact = 1, + .ascii = 1, + .statically_allocated = 1, + }, + }, + ._data = "bytes_written", +}; +static + struct { PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[6]; + PyObject *ob_item[7]; }_object; } importlib__bootstrap_external_toplevel_consts_25_localsplusnames = { @@ -24258,7 +24304,7 @@ importlib__bootstrap_external_toplevel_consts_25_localsplusnames = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 6, + .ob_size = 7, }, .ob_item = { &_Py_ID(path), @@ -24267,18 +24313,19 @@ importlib__bootstrap_external_toplevel_consts_25_localsplusnames = { & const_str_path_tmp._ascii.ob_base, &_Py_ID(fd), &_Py_ID(file), + & const_str_bytes_written._ascii.ob_base, }, }, }; static - struct _PyCode_DEF(452) + struct _PyCode_DEF(502) importlib__bootstrap_external_toplevel_consts_25 = { .ob_base = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyCode_Type, }, - .ob_size = 226, + .ob_size = 251, }, .co_consts = & importlib__bootstrap_external_toplevel_consts_25_consts._object.ob_base.ob_base, .co_names = & importlib__bootstrap_external_toplevel_consts_25_names._object.ob_base.ob_base, @@ -24287,22 +24334,22 @@ importlib__bootstrap_external_toplevel_consts_25 = { .co_argcount = 3, .co_posonlyargcount = 0, .co_kwonlyargcount = 0, - .co_framesize = 12 + FRAME_SPECIALS_SIZE, + .co_framesize = 13 + FRAME_SPECIALS_SIZE, .co_stacksize = 6, .co_firstlineno = 195, - .co_nlocalsplus = 6, - .co_nlocals = 6, + .co_nlocalsplus = 7, + .co_nlocals = 7, .co_ncellvars = 0, .co_nfreevars = 0, .co_version = 117, .co_localsplusnames = & importlib__bootstrap_external_toplevel_consts_25_localsplusnames._object.ob_base.ob_base, - .co_localspluskinds = & importlib__bootstrap_toplevel_consts_30_consts_4_localspluskinds.ob_base.ob_base, + .co_localspluskinds = & importlib__bootstrap_toplevel_consts_46_consts_9_localspluskinds.ob_base.ob_base, .co_filename = & importlib__bootstrap_external_toplevel_consts_6_filename._ascii.ob_base, .co_name = & const_str__write_atomic._ascii.ob_base, .co_qualname = & const_str__write_atomic._ascii.ob_base, .co_linetable = & importlib__bootstrap_external_toplevel_consts_25_linetable.ob_base.ob_base, ._co_cached = NULL, - .co_code_adaptive = "\x97\x00\x7c\x00\x9b\x00\x64\x01\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x9b\x00\x9d\x03\x7d\x03\x74\x03\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x03\x74\x02\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x02\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x07\x00\x00\x74\x02\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x07\x00\x00\x7c\x02\x64\x02\x7a\x01\x00\x00\xab\x03\x00\x00\x00\x00\x00\x00\x7d\x04\x09\x00\x74\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x04\x64\x03\xab\x02\x00\x00\x00\x00\x00\x00\x35\x00\x7d\x05\x7c\x05\x6a\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x01\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x64\x04\x64\x04\x64\x04\xab\x02\x00\x00\x00\x00\x00\x00\x01\x00\x74\x03\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x03\x7c\x00\xab\x02\x00\x00\x00\x00\x00\x00\x01\x00\x79\x04\x23\x00\x31\x00\x73\x01\x77\x02\x01\x00\x59\x00\x01\x00\x01\x00\x8c\x20\x78\x03\x59\x00\x77\x01\x23\x00\x74\x14\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x72\x27\x01\x00\x09\x00\x74\x03\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x03\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x82\x00\x23\x00\x74\x14\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x72\x03\x01\x00\x59\x00\x82\x00\x77\x00\x78\x03\x59\x00\x77\x01\x77\x00\x78\x03\x59\x00\x77\x01", + .co_code_adaptive = "\x97\x00\x7c\x00\x9b\x00\x64\x01\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x9b\x00\x9d\x03\x7d\x03\x74\x03\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x03\x74\x02\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x02\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x07\x00\x00\x74\x02\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x07\x00\x00\x7c\x02\x64\x02\x7a\x01\x00\x00\xab\x03\x00\x00\x00\x00\x00\x00\x7d\x04\x09\x00\x74\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x04\x64\x03\xab\x02\x00\x00\x00\x00\x00\x00\x35\x00\x7d\x05\x7c\x05\x6a\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x01\xab\x01\x00\x00\x00\x00\x00\x00\x7d\x06\x64\x04\x64\x04\x64\x04\xab\x02\x00\x00\x00\x00\x00\x00\x01\x00\x7f\x06\x74\x13\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x01\xab\x01\x00\x00\x00\x00\x00\x00\x6b\x37\x00\x00\x72\x0b\x74\x15\x00\x00\x00\x00\x00\x00\x00\x00\x64\x05\xab\x01\x00\x00\x00\x00\x00\x00\x82\x01\x74\x03\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x03\x7c\x00\xab\x02\x00\x00\x00\x00\x00\x00\x01\x00\x79\x04\x23\x00\x31\x00\x73\x01\x77\x02\x01\x00\x59\x00\x01\x00\x01\x00\x8c\x39\x78\x03\x59\x00\x77\x01\x23\x00\x74\x14\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x72\x27\x01\x00\x09\x00\x74\x03\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x03\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x82\x00\x23\x00\x74\x14\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x72\x03\x01\x00\x59\x00\x82\x00\x77\x00\x78\x03\x59\x00\x77\x01\x77\x00\x78\x03\x59\x00\x77\x01", ._co_firsttraceable = 0, }; static @@ -25030,7 +25077,7 @@ importlib__bootstrap_external_toplevel_consts_36 = { .co_kwonlyargcount = 1, .co_framesize = 18 + FRAME_SPECIALS_SIZE, .co_stacksize = 6, - .co_firstlineno = 482, + .co_firstlineno = 486, .co_nlocalsplus = 12, .co_nlocals = 12, .co_ncellvars = 0, @@ -25547,7 +25594,7 @@ importlib__bootstrap_external_toplevel_consts_37 = { .co_kwonlyargcount = 0, .co_framesize = 16 + FRAME_SPECIALS_SIZE, .co_stacksize = 6, - .co_firstlineno = 552, + .co_firstlineno = 556, .co_nlocalsplus = 10, .co_nlocals = 10, .co_ncellvars = 0, @@ -25830,7 +25877,7 @@ importlib__bootstrap_external_toplevel_consts_38 = { .co_kwonlyargcount = 0, .co_framesize = 9 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 592, + .co_firstlineno = 596, .co_nlocalsplus = 5, .co_nlocals = 5, .co_ncellvars = 0, @@ -25970,7 +26017,7 @@ importlib__bootstrap_external_toplevel_consts_39 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 611, + .co_firstlineno = 615, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -26154,7 +26201,7 @@ importlib__bootstrap_external_toplevel_consts_40 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 623, + .co_firstlineno = 627, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -26390,7 +26437,7 @@ importlib__bootstrap_external_toplevel_consts_41_consts_1 = { .co_kwonlyargcount = 0, .co_framesize = 11 + FRAME_SPECIALS_SIZE, .co_stacksize = 6, - .co_firstlineno = 643, + .co_firstlineno = 647, .co_nlocalsplus = 5, .co_nlocals = 4, .co_ncellvars = 0, @@ -26487,7 +26534,7 @@ importlib__bootstrap_external_toplevel_consts_41_consts_2 = { .co_kwonlyargcount = 0, .co_framesize = 12 + FRAME_SPECIALS_SIZE, .co_stacksize = 9, - .co_firstlineno = 656, + .co_firstlineno = 660, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -26650,7 +26697,7 @@ importlib__bootstrap_external_toplevel_consts_41 = { .co_kwonlyargcount = 0, .co_framesize = 7 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 635, + .co_firstlineno = 639, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 1, @@ -27054,7 +27101,7 @@ importlib__bootstrap_external_toplevel_consts_42 = { .co_kwonlyargcount = 0, .co_framesize = 11 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 666, + .co_firstlineno = 670, .co_nlocalsplus = 6, .co_nlocals = 6, .co_ncellvars = 0, @@ -27297,7 +27344,7 @@ importlib__bootstrap_external_toplevel_consts_43 = { .co_kwonlyargcount = 0, .co_framesize = 11 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 699, + .co_firstlineno = 703, .co_nlocalsplus = 6, .co_nlocals = 6, .co_ncellvars = 0, @@ -27510,7 +27557,7 @@ importlib__bootstrap_external_toplevel_consts_44 = { .co_kwonlyargcount = 0, .co_framesize = 9 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 727, + .co_firstlineno = 731, .co_nlocalsplus = 4, .co_nlocals = 4, .co_ncellvars = 0, @@ -27842,7 +27889,7 @@ importlib__bootstrap_external_toplevel_consts_45 = { .co_kwonlyargcount = 0, .co_framesize = 10 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 751, + .co_firstlineno = 755, .co_nlocalsplus = 5, .co_nlocals = 5, .co_ncellvars = 0, @@ -28079,7 +28126,7 @@ importlib__bootstrap_external_toplevel_consts_46 = { .co_kwonlyargcount = 0, .co_framesize = 9 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 764, + .co_firstlineno = 768, .co_nlocalsplus = 4, .co_nlocals = 4, .co_ncellvars = 0, @@ -28275,7 +28322,7 @@ importlib__bootstrap_external_toplevel_consts_47 = { .co_kwonlyargcount = 0, .co_framesize = 10 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 774, + .co_firstlineno = 778, .co_nlocalsplus = 5, .co_nlocals = 5, .co_ncellvars = 0, @@ -28604,7 +28651,7 @@ importlib__bootstrap_external_toplevel_consts_48 = { .co_kwonlyargcount = 0, .co_framesize = 11 + FRAME_SPECIALS_SIZE, .co_stacksize = 6, - .co_firstlineno = 785, + .co_firstlineno = 789, .co_nlocalsplus = 5, .co_nlocals = 5, .co_ncellvars = 0, @@ -28904,7 +28951,7 @@ importlib__bootstrap_external_toplevel_consts_50 = { .co_kwonlyargcount = 2, .co_framesize = 15 + FRAME_SPECIALS_SIZE, .co_stacksize = 6, - .co_firstlineno = 802, + .co_firstlineno = 806, .co_nlocalsplus = 9, .co_nlocals = 9, .co_ncellvars = 0, @@ -29174,7 +29221,7 @@ importlib__bootstrap_external_toplevel_consts_51 = { .co_kwonlyargcount = 0, .co_framesize = 11 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 872, + .co_firstlineno = 876, .co_nlocalsplus = 6, .co_nlocals = 6, .co_ncellvars = 0, @@ -29511,7 +29558,7 @@ importlib__bootstrap_external_toplevel_consts_52_consts_5 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 934, + .co_firstlineno = 938, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -29929,7 +29976,7 @@ importlib__bootstrap_external_toplevel_consts_52_consts_6 = { .co_kwonlyargcount = 0, .co_framesize = 13 + FRAME_SPECIALS_SIZE, .co_stacksize = 7, - .co_firstlineno = 941, + .co_firstlineno = 945, .co_nlocalsplus = 6, .co_nlocals = 6, .co_ncellvars = 0, @@ -30078,7 +30125,7 @@ importlib__bootstrap_external_toplevel_consts_52_consts_8 = { .co_kwonlyargcount = 0, .co_framesize = 16 + FRAME_SPECIALS_SIZE, .co_stacksize = 8, - .co_firstlineno = 956, + .co_firstlineno = 960, .co_nlocalsplus = 8, .co_nlocals = 8, .co_ncellvars = 0, @@ -30240,7 +30287,7 @@ importlib__bootstrap_external_toplevel_consts_52 = { .co_kwonlyargcount = 0, .co_framesize = 3 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 922, + .co_firstlineno = 926, .co_nlocalsplus = 0, .co_nlocals = 0, .co_ncellvars = 0, @@ -30502,7 +30549,7 @@ importlib__bootstrap_external_toplevel_consts_54_consts_2 = { .co_kwonlyargcount = 0, .co_framesize = 10 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 978, + .co_firstlineno = 982, .co_nlocalsplus = 5, .co_nlocals = 5, .co_ncellvars = 0, @@ -30644,7 +30691,7 @@ importlib__bootstrap_external_toplevel_consts_54_consts_3 = { .co_kwonlyargcount = 0, .co_framesize = 2 + FRAME_SPECIALS_SIZE, .co_stacksize = 0, - .co_firstlineno = 986, + .co_firstlineno = 990, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -30861,7 +30908,7 @@ importlib__bootstrap_external_toplevel_consts_54_consts_4 = { .co_kwonlyargcount = 0, .co_framesize = 8 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 989, + .co_firstlineno = 993, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -31025,7 +31072,7 @@ importlib__bootstrap_external_toplevel_consts_54_consts_5 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 997, + .co_firstlineno = 1001, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -31134,7 +31181,7 @@ importlib__bootstrap_external_toplevel_consts_54 = { .co_kwonlyargcount = 0, .co_framesize = 1 + FRAME_SPECIALS_SIZE, .co_stacksize = 1, - .co_firstlineno = 973, + .co_firstlineno = 977, .co_nlocalsplus = 0, .co_nlocals = 0, .co_ncellvars = 0, @@ -31341,7 +31388,7 @@ importlib__bootstrap_external_toplevel_consts_56_consts_1 = { .co_kwonlyargcount = 0, .co_framesize = 3 + FRAME_SPECIALS_SIZE, .co_stacksize = 1, - .co_firstlineno = 1005, + .co_firstlineno = 1009, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -31504,7 +31551,7 @@ importlib__bootstrap_external_toplevel_consts_56_consts_2 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 1013, + .co_firstlineno = 1017, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -31735,7 +31782,7 @@ importlib__bootstrap_external_toplevel_consts_56_consts_3 = { .co_kwonlyargcount = 0, .co_framesize = 8 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 1027, + .co_firstlineno = 1031, .co_nlocalsplus = 4, .co_nlocals = 4, .co_ncellvars = 0, @@ -31861,7 +31908,7 @@ importlib__bootstrap_external_toplevel_consts_56_consts_4 = { .co_kwonlyargcount = 0, .co_framesize = 3 + FRAME_SPECIALS_SIZE, .co_stacksize = 0, - .co_firstlineno = 1037, + .co_firstlineno = 1041, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -32095,7 +32142,7 @@ importlib__bootstrap_external_toplevel_consts_56_consts_5 = { .co_kwonlyargcount = 0, .co_framesize = 10 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1044, + .co_firstlineno = 1048, .co_nlocalsplus = 5, .co_nlocals = 5, .co_ncellvars = 0, @@ -32376,7 +32423,7 @@ importlib__bootstrap_external_toplevel_consts_56_consts_8 = { .co_kwonlyargcount = 1, .co_framesize = 12 + FRAME_SPECIALS_SIZE, .co_stacksize = 8, - .co_firstlineno = 1054, + .co_firstlineno = 1058, .co_nlocalsplus = 4, .co_nlocals = 4, .co_ncellvars = 0, @@ -32937,7 +32984,7 @@ importlib__bootstrap_external_toplevel_consts_56_consts_9 = { .co_kwonlyargcount = 0, .co_framesize = 22 + FRAME_SPECIALS_SIZE, .co_stacksize = 7, - .co_firstlineno = 1062, + .co_firstlineno = 1066, .co_nlocalsplus = 15, .co_nlocals = 15, .co_ncellvars = 0, @@ -33052,7 +33099,7 @@ importlib__bootstrap_external_toplevel_consts_56 = { .co_kwonlyargcount = 0, .co_framesize = 2 + FRAME_SPECIALS_SIZE, .co_stacksize = 2, - .co_firstlineno = 1003, + .co_firstlineno = 1007, .co_nlocalsplus = 0, .co_nlocals = 0, .co_ncellvars = 0, @@ -33239,7 +33286,7 @@ importlib__bootstrap_external_toplevel_consts_58_consts_2 = { .co_kwonlyargcount = 0, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 2, - .co_firstlineno = 1153, + .co_firstlineno = 1157, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -33359,7 +33406,7 @@ importlib__bootstrap_external_toplevel_consts_58_consts_3 = { .co_kwonlyargcount = 0, .co_framesize = 4 + FRAME_SPECIALS_SIZE, .co_stacksize = 2, - .co_firstlineno = 1159, + .co_firstlineno = 1163, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -33479,7 +33526,7 @@ importlib__bootstrap_external_toplevel_consts_58_consts_4 = { .co_kwonlyargcount = 0, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 1163, + .co_firstlineno = 1167, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -33645,7 +33692,7 @@ importlib__bootstrap_external_toplevel_consts_58_consts_5 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 1166, + .co_firstlineno = 1170, .co_nlocalsplus = 3, .co_nlocals = 2, .co_ncellvars = 0, @@ -33763,7 +33810,7 @@ importlib__bootstrap_external_toplevel_consts_58_consts_6 = { .co_kwonlyargcount = 0, .co_framesize = 3 + FRAME_SPECIALS_SIZE, .co_stacksize = 1, - .co_firstlineno = 1178, + .co_firstlineno = 1182, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -33997,7 +34044,7 @@ importlib__bootstrap_external_toplevel_consts_58_consts_7 = { .co_kwonlyargcount = 0, .co_framesize = 9 + FRAME_SPECIALS_SIZE, .co_stacksize = 6, - .co_firstlineno = 1183, + .co_firstlineno = 1187, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -34230,7 +34277,7 @@ importlib__bootstrap_external_toplevel_consts_58_consts_8 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 1192, + .co_firstlineno = 1196, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -34368,7 +34415,7 @@ importlib__bootstrap_external_toplevel_consts_58 = { .co_kwonlyargcount = 0, .co_framesize = 4 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 1148, + .co_firstlineno = 1152, .co_nlocalsplus = 1, .co_nlocals = 0, .co_ncellvars = 1, @@ -34646,7 +34693,7 @@ importlib__bootstrap_external_toplevel_consts_60_consts_2 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 1202, + .co_firstlineno = 1206, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -34836,7 +34883,7 @@ importlib__bootstrap_external_toplevel_consts_60_consts_3 = { .co_kwonlyargcount = 0, .co_framesize = 10 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1207, + .co_firstlineno = 1211, .co_nlocalsplus = 5, .co_nlocals = 5, .co_ncellvars = 0, @@ -35125,7 +35172,7 @@ importlib__bootstrap_external_toplevel_consts_60_consts_6 = { .co_kwonlyargcount = 1, .co_framesize = 16 + FRAME_SPECIALS_SIZE, .co_stacksize = 7, - .co_firstlineno = 1212, + .co_firstlineno = 1216, .co_nlocalsplus = 9, .co_nlocals = 9, .co_ncellvars = 0, @@ -35234,7 +35281,7 @@ importlib__bootstrap_external_toplevel_consts_60 = { .co_kwonlyargcount = 0, .co_framesize = 2 + FRAME_SPECIALS_SIZE, .co_stacksize = 2, - .co_firstlineno = 1198, + .co_firstlineno = 1202, .co_nlocalsplus = 0, .co_nlocals = 0, .co_ncellvars = 0, @@ -35452,7 +35499,7 @@ importlib__bootstrap_external_toplevel_consts_62_consts_2 = { .co_kwonlyargcount = 0, .co_framesize = 10 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1247, + .co_firstlineno = 1251, .co_nlocalsplus = 5, .co_nlocals = 5, .co_ncellvars = 0, @@ -35571,7 +35618,7 @@ importlib__bootstrap_external_toplevel_consts_62_consts_3 = { .co_kwonlyargcount = 0, .co_framesize = 2 + FRAME_SPECIALS_SIZE, .co_stacksize = 0, - .co_firstlineno = 1263, + .co_firstlineno = 1267, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -35676,7 +35723,7 @@ importlib__bootstrap_external_toplevel_consts_62 = { .co_kwonlyargcount = 0, .co_framesize = 1 + FRAME_SPECIALS_SIZE, .co_stacksize = 1, - .co_firstlineno = 1243, + .co_firstlineno = 1247, .co_nlocalsplus = 0, .co_nlocals = 0, .co_ncellvars = 0, @@ -35796,7 +35843,7 @@ importlib__bootstrap_external_toplevel_consts_64_consts_2 = { .co_kwonlyargcount = 0, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 2, - .co_firstlineno = 1276, + .co_firstlineno = 1280, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -35853,7 +35900,7 @@ importlib__bootstrap_external_toplevel_consts_64_consts_3 = { .co_kwonlyargcount = 0, .co_framesize = 4 + FRAME_SPECIALS_SIZE, .co_stacksize = 2, - .co_firstlineno = 1280, + .co_firstlineno = 1284, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -35910,7 +35957,7 @@ importlib__bootstrap_external_toplevel_consts_64_consts_4 = { .co_kwonlyargcount = 0, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 1284, + .co_firstlineno = 1288, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -36125,7 +36172,7 @@ importlib__bootstrap_external_toplevel_consts_64_consts_5 = { .co_kwonlyargcount = 0, .co_framesize = 8 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1287, + .co_firstlineno = 1291, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -36340,7 +36387,7 @@ importlib__bootstrap_external_toplevel_consts_64_consts_6 = { .co_kwonlyargcount = 0, .co_framesize = 7 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1295, + .co_firstlineno = 1299, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -36544,7 +36591,7 @@ importlib__bootstrap_external_toplevel_consts_64_consts_7_consts_2 = { .co_kwonlyargcount = 0, .co_framesize = 7 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 1304, + .co_firstlineno = 1308, .co_nlocalsplus = 3, .co_nlocals = 2, .co_ncellvars = 0, @@ -36713,7 +36760,7 @@ importlib__bootstrap_external_toplevel_consts_64_consts_7 = { .co_kwonlyargcount = 0, .co_framesize = 7 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 1301, + .co_firstlineno = 1305, .co_nlocalsplus = 3, .co_nlocals = 2, .co_ncellvars = 1, @@ -36815,7 +36862,7 @@ importlib__bootstrap_external_toplevel_consts_64_consts_8 = { .co_kwonlyargcount = 0, .co_framesize = 2 + FRAME_SPECIALS_SIZE, .co_stacksize = 0, - .co_firstlineno = 1307, + .co_firstlineno = 1311, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -36917,7 +36964,7 @@ importlib__bootstrap_external_toplevel_consts_64_consts_9 = { .co_kwonlyargcount = 0, .co_framesize = 2 + FRAME_SPECIALS_SIZE, .co_stacksize = 0, - .co_firstlineno = 1311, + .co_firstlineno = 1315, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -36974,7 +37021,7 @@ importlib__bootstrap_external_toplevel_consts_64_consts_10 = { .co_kwonlyargcount = 0, .co_framesize = 3 + FRAME_SPECIALS_SIZE, .co_stacksize = 1, - .co_firstlineno = 1315, + .co_firstlineno = 1319, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -37094,7 +37141,7 @@ importlib__bootstrap_external_toplevel_consts_64 = { .co_kwonlyargcount = 0, .co_framesize = 2 + FRAME_SPECIALS_SIZE, .co_stacksize = 2, - .co_firstlineno = 1268, + .co_firstlineno = 1272, .co_nlocalsplus = 0, .co_nlocals = 0, .co_ncellvars = 0, @@ -37398,7 +37445,7 @@ importlib__bootstrap_external_toplevel_consts_66_consts_3 = { .co_kwonlyargcount = 0, .co_framesize = 8 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 1332, + .co_firstlineno = 1336, .co_nlocalsplus = 4, .co_nlocals = 4, .co_ncellvars = 0, @@ -37657,7 +37704,7 @@ importlib__bootstrap_external_toplevel_consts_66_consts_4 = { .co_kwonlyargcount = 0, .co_framesize = 7 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 1339, + .co_firstlineno = 1343, .co_nlocalsplus = 4, .co_nlocals = 4, .co_ncellvars = 0, @@ -37824,7 +37871,7 @@ importlib__bootstrap_external_toplevel_consts_66_consts_5 = { .co_kwonlyargcount = 0, .co_framesize = 7 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 1349, + .co_firstlineno = 1353, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -37997,7 +38044,7 @@ importlib__bootstrap_external_toplevel_consts_66_consts_6 = { .co_kwonlyargcount = 0, .co_framesize = 7 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 1353, + .co_firstlineno = 1357, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -38094,7 +38141,7 @@ importlib__bootstrap_external_toplevel_consts_66_consts_7 = { .co_kwonlyargcount = 0, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 1367, + .co_firstlineno = 1371, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -38235,7 +38282,7 @@ importlib__bootstrap_external_toplevel_consts_66_consts_8 = { .co_kwonlyargcount = 0, .co_framesize = 4 + FRAME_SPECIALS_SIZE, .co_stacksize = 2, - .co_firstlineno = 1370, + .co_firstlineno = 1374, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -38355,7 +38402,7 @@ importlib__bootstrap_external_toplevel_consts_66_consts_9 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 1373, + .co_firstlineno = 1377, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -38452,7 +38499,7 @@ importlib__bootstrap_external_toplevel_consts_66_consts_10 = { .co_kwonlyargcount = 0, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 1376, + .co_firstlineno = 1380, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -38572,7 +38619,7 @@ importlib__bootstrap_external_toplevel_consts_66_consts_11 = { .co_kwonlyargcount = 0, .co_framesize = 4 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 1379, + .co_firstlineno = 1383, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -38669,7 +38716,7 @@ importlib__bootstrap_external_toplevel_consts_66_consts_12 = { .co_kwonlyargcount = 0, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 1382, + .co_firstlineno = 1386, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -38766,7 +38813,7 @@ importlib__bootstrap_external_toplevel_consts_66_consts_13 = { .co_kwonlyargcount = 0, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 1385, + .co_firstlineno = 1389, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -38891,7 +38938,7 @@ importlib__bootstrap_external_toplevel_consts_66 = { .co_kwonlyargcount = 0, .co_framesize = 1 + FRAME_SPECIALS_SIZE, .co_stacksize = 1, - .co_firstlineno = 1321, + .co_firstlineno = 1325, .co_nlocalsplus = 0, .co_nlocals = 0, .co_ncellvars = 0, @@ -38988,7 +39035,7 @@ importlib__bootstrap_external_toplevel_consts_68_consts_1 = { .co_kwonlyargcount = 0, .co_framesize = 9 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1393, + .co_firstlineno = 1397, .co_nlocalsplus = 4, .co_nlocals = 4, .co_ncellvars = 0, @@ -39085,7 +39132,7 @@ importlib__bootstrap_external_toplevel_consts_68_consts_2 = { .co_kwonlyargcount = 0, .co_framesize = 2 + FRAME_SPECIALS_SIZE, .co_stacksize = 0, - .co_firstlineno = 1396, + .co_firstlineno = 1400, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -39182,7 +39229,7 @@ importlib__bootstrap_external_toplevel_consts_68_consts_3 = { .co_kwonlyargcount = 0, .co_framesize = 2 + FRAME_SPECIALS_SIZE, .co_stacksize = 0, - .co_firstlineno = 1399, + .co_firstlineno = 1403, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -39327,7 +39374,7 @@ importlib__bootstrap_external_toplevel_consts_68_consts_4 = { .co_kwonlyargcount = 0, .co_framesize = 8 + FRAME_SPECIALS_SIZE, .co_stacksize = 6, - .co_firstlineno = 1402, + .co_firstlineno = 1406, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -39384,7 +39431,7 @@ importlib__bootstrap_external_toplevel_consts_68_consts_5 = { .co_kwonlyargcount = 0, .co_framesize = 2 + FRAME_SPECIALS_SIZE, .co_stacksize = 0, - .co_firstlineno = 1405, + .co_firstlineno = 1409, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -39458,7 +39505,7 @@ importlib__bootstrap_external_toplevel_consts_68_consts_6 = { .co_kwonlyargcount = 0, .co_framesize = 2 + FRAME_SPECIALS_SIZE, .co_stacksize = 0, - .co_firstlineno = 1408, + .co_firstlineno = 1412, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -39624,7 +39671,7 @@ importlib__bootstrap_external_toplevel_consts_68_consts_7 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 1411, + .co_firstlineno = 1415, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -39814,7 +39861,7 @@ importlib__bootstrap_external_toplevel_consts_68_consts_8 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 1423, + .co_firstlineno = 1427, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -39929,7 +39976,7 @@ importlib__bootstrap_external_toplevel_consts_68 = { .co_kwonlyargcount = 0, .co_framesize = 1 + FRAME_SPECIALS_SIZE, .co_stacksize = 1, - .co_firstlineno = 1392, + .co_firstlineno = 1396, .co_nlocalsplus = 0, .co_nlocals = 0, .co_ncellvars = 0, @@ -40262,7 +40309,7 @@ importlib__bootstrap_external_toplevel_consts_70_consts_2 = { .co_kwonlyargcount = 0, .co_framesize = 8 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1438, + .co_firstlineno = 1442, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -40515,7 +40562,7 @@ importlib__bootstrap_external_toplevel_consts_70_consts_3 = { .co_kwonlyargcount = 0, .co_framesize = 7 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1456, + .co_firstlineno = 1460, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -40748,7 +40795,7 @@ importlib__bootstrap_external_toplevel_consts_70_consts_4 = { .co_kwonlyargcount = 0, .co_framesize = 7 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 1469, + .co_firstlineno = 1473, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -41039,7 +41086,7 @@ importlib__bootstrap_external_toplevel_consts_70_consts_6 = { .co_kwonlyargcount = 0, .co_framesize = 14 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1491, + .co_firstlineno = 1495, .co_nlocalsplus = 9, .co_nlocals = 9, .co_ncellvars = 0, @@ -41213,7 +41260,7 @@ importlib__bootstrap_external_toplevel_consts_70_consts_7 = { .co_kwonlyargcount = 0, .co_framesize = 11 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1520, + .co_firstlineno = 1524, .co_nlocalsplus = 6, .co_nlocals = 6, .co_ncellvars = 0, @@ -41403,7 +41450,7 @@ importlib__bootstrap_external_toplevel_consts_70_consts_8 = { .co_kwonlyargcount = 0, .co_framesize = 8 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1544, + .co_firstlineno = 1548, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -41520,7 +41567,7 @@ importlib__bootstrap_external_toplevel_consts_70 = { .co_kwonlyargcount = 0, .co_framesize = 3 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 1434, + .co_firstlineno = 1438, .co_nlocalsplus = 0, .co_nlocals = 0, .co_ncellvars = 0, @@ -41701,7 +41748,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_2_consts_1 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 1573, + .co_firstlineno = 1577, .co_nlocalsplus = 3, .co_nlocals = 2, .co_ncellvars = 0, @@ -42008,7 +42055,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_2 = { .co_kwonlyargcount = 0, .co_framesize = 11 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1567, + .co_firstlineno = 1571, .co_nlocalsplus = 6, .co_nlocals = 5, .co_ncellvars = 1, @@ -42150,7 +42197,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_3 = { .co_kwonlyargcount = 0, .co_framesize = 3 + FRAME_SPECIALS_SIZE, .co_stacksize = 2, - .co_firstlineno = 1584, + .co_firstlineno = 1588, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -42297,7 +42344,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_4 = { .co_kwonlyargcount = 0, .co_framesize = 13 + FRAME_SPECIALS_SIZE, .co_stacksize = 6, - .co_firstlineno = 1588, + .co_firstlineno = 1592, .co_nlocalsplus = 7, .co_nlocals = 7, .co_ncellvars = 0, @@ -42757,7 +42804,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_6 = { .co_kwonlyargcount = 0, .co_framesize = 22 + FRAME_SPECIALS_SIZE, .co_stacksize = 8, - .co_firstlineno = 1593, + .co_firstlineno = 1597, .co_nlocalsplus = 14, .co_nlocals = 14, .co_ncellvars = 0, @@ -43118,7 +43165,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_7 = { .co_kwonlyargcount = 0, .co_framesize = 15 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1644, + .co_firstlineno = 1648, .co_nlocalsplus = 10, .co_nlocals = 10, .co_ncellvars = 0, @@ -43368,7 +43415,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_8_consts_1 = { .co_kwonlyargcount = 0, .co_framesize = 7 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 1685, + .co_firstlineno = 1689, .co_nlocalsplus = 3, .co_nlocals = 1, .co_ncellvars = 0, @@ -43528,7 +43575,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_8 = { .co_kwonlyargcount = 0, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 2, - .co_firstlineno = 1675, + .co_firstlineno = 1679, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 2, @@ -43648,7 +43695,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_9 = { .co_kwonlyargcount = 0, .co_framesize = 4 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 1693, + .co_firstlineno = 1697, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -43765,7 +43812,7 @@ importlib__bootstrap_external_toplevel_consts_72 = { .co_kwonlyargcount = 0, .co_framesize = 2 + FRAME_SPECIALS_SIZE, .co_stacksize = 2, - .co_firstlineno = 1558, + .co_firstlineno = 1562, .co_nlocalsplus = 0, .co_nlocals = 0, .co_ncellvars = 0, @@ -43983,7 +44030,7 @@ importlib__bootstrap_external_toplevel_consts_74 = { .co_kwonlyargcount = 0, .co_framesize = 11 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1699, + .co_firstlineno = 1703, .co_nlocalsplus = 6, .co_nlocals = 6, .co_ncellvars = 0, @@ -44197,7 +44244,7 @@ importlib__bootstrap_external_toplevel_consts_75 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 1724, + .co_firstlineno = 1728, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -44337,7 +44384,7 @@ importlib__bootstrap_external_toplevel_consts_76 = { .co_kwonlyargcount = 0, .co_framesize = 2 + FRAME_SPECIALS_SIZE, .co_stacksize = 1, - .co_firstlineno = 1735, + .co_firstlineno = 1739, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -44510,7 +44557,7 @@ importlib__bootstrap_external_toplevel_consts_77 = { .co_kwonlyargcount = 0, .co_framesize = 7 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1740, + .co_firstlineno = 1744, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -44998,7 +45045,7 @@ importlib__bootstrap_external_toplevel_linetable = { .ob_size = 710, }, .ob_shash = -1, - .ob_sval = "\xf0\x03\x01\x01\x01\xf1\x02\x07\x01\x04\xf0\x2c\x00\x0e\x12\x80\x0a\xf3\x06\x00\x01\x0c\xdb\x00\x0a\xdb\x00\x0a\xdb\x00\x10\xdb\x00\x0e\xf0\x06\x00\x10\x13\x8f\x7c\x89\x7c\x98\x77\xd1\x0f\x26\x80\x0b\xd9\x03\x0e\xdb\x04\x14\xdc\x04\x11\xe3\x04\x17\xf1\x06\x00\x04\x0f\xd8\x17\x1b\x98\x53\x90\x6b\x81\x4f\xe0\x17\x1a\x90\x65\x80\x4f\xe1\x07\x0a\xd1\x0a\x34\xa1\x4f\xd3\x0a\x34\xd4\x07\x34\xd0\x00\x34\xd0\x07\x34\xd8\x0b\x1a\x98\x31\xd1\x0b\x1d\x80\x08\xd9\x11\x16\x90\x7f\xd3\x11\x27\x80\x0e\xd8\x12\x14\x97\x27\x91\x27\x98\x2f\xd3\x12\x2a\x80\x0f\xd9\x29\x38\xd3\x17\x39\xa9\x1f\xa0\x41\x98\x21\x98\x41\x98\x33\x9a\x07\xa8\x1f\xd1\x17\x39\xd0\x00\x14\xf0\x08\x00\x27\x2d\xd0\x00\x23\xd8\x28\x3a\xd0\x00\x25\xd8\x20\x45\xd8\x22\x45\xf1\x03\x01\x21\x46\x01\xd0\x00\x1b\xf2\x08\x0e\x01\x17\xf1\x20\x00\x0f\x1f\xd3\x0e\x20\x80\x0b\xf2\x06\x02\x01\x37\xf2\x0a\x03\x01\x2a\xf2\x0a\x03\x01\x2a\xf1\x0c\x00\x04\x0f\xf3\x02\x1b\x05\x2a\xf2\x3c\x03\x05\x3f\xf2\x0c\x05\x01\x22\xf2\x10\x07\x01\x1a\xf2\x14\x06\x01\x32\xf2\x12\x02\x01\x2e\xf2\x0a\x04\x01\x2e\xf1\x0e\x00\x04\x0f\xf3\x02\x05\x05\x52\x01\xf2\x10\x02\x05\x30\xf2\x0a\x07\x01\x14\xf3\x14\x13\x01\x0e\xf1\x2c\x00\x0e\x12\x90\x2d\xd7\x12\x28\xd1\x12\x28\xd3\x0d\x29\x80\x0a\xf0\x70\x07\x00\x11\x15\x8f\x7f\x89\x7f\x98\x71\xa0\x28\xd3\x0f\x2b\xa8\x67\xd1\x0f\x35\x80\x0c\xe0\x14\x17\x97\x4e\x91\x4e\xa0\x3c\xb0\x18\xd3\x14\x3a\xd0\x00\x11\xe0\x0b\x18\x80\x08\xd8\x07\x0d\x80\x04\xe0\x13\x18\x90\x27\x80\x0f\xd9\x03\x0e\xd8\x04\x13\xd7\x04\x1a\xd1\x04\x1a\x98\x36\xd4\x04\x22\xe0\x15\x2c\x90\x54\xd7\x15\x2c\xd1\x15\x2c\xd3\x15\x2e\xd0\x00\x12\xe0\x15\x1b\x90\x48\xd0\x00\x11\xe0\x38\x49\xd0\x00\x49\xd0\x00\x17\xd0\x1a\x35\xf0\x04\x43\x01\x01\x30\xc0\x14\xf4\x00\x43\x01\x01\x30\xf2\x4c\x02\x25\x01\x40\x01\xf2\x50\x01\x10\x01\x47\x01\xf2\x26\x09\x01\x14\xf2\x18\x09\x01\x10\xf2\x18\x1c\x01\x1f\xf2\x3e\x1e\x01\x11\xf2\x42\x01\x19\x01\x4c\x01\xf2\x38\x15\x01\x0a\xf3\x30\x0a\x01\x39\xf3\x1a\x07\x01\x10\xf3\x14\x08\x01\x10\xf2\x16\x09\x01\x44\x01\xf1\x1c\x00\x0d\x13\x8b\x48\x80\x09\xf0\x06\x43\x01\x01\x10\xb8\x34\xd8\x37\x40\xf4\x03\x43\x01\x01\x10\xf2\x4c\x02\x2d\x01\x17\xf7\x64\x01\x30\x01\x1c\xf1\x00\x30\x01\x1c\xf7\x66\x01\x1b\x01\x3c\xf1\x00\x1b\x01\x3c\xf4\x3c\x4e\x02\x01\x1b\x90\x3d\xf4\x00\x4e\x02\x01\x1b\xf7\x62\x04\x2f\x01\x20\xf1\x00\x2f\x01\x20\xf4\x64\x01\x2a\x01\x2d\x90\x7a\xa0\x3c\xf4\x00\x2a\x01\x2d\xf4\x5a\x01\x16\x01\x14\x98\x3a\xa0\x7d\xf4\x00\x16\x01\x14\xf4\x32\x32\x01\x19\x98\x2a\xa0\x6d\xf4\x00\x32\x01\x19\xf7\x6a\x01\x41\x01\x01\x20\xf1\x00\x41\x01\x01\x20\xf7\x4e\x02\x21\x01\x2b\xf1\x00\x21\x01\x2b\xf0\x4a\x01\x00\x14\x23\xd0\x00\x10\xf7\x0a\x79\x01\x01\x46\x01\xf1\x00\x79\x01\x01\x46\x01\xf7\x78\x03\x48\x02\x01\x2c\xf1\x00\x48\x02\x01\x2c\xf3\x5a\x04\x16\x01\x0d\xf2\x32\x08\x01\x2a\xf2\x16\x02\x01\x23\xf3\x0a\x05\x01\x25\xf9\xf2\x75\x34\x00\x18\x3a", + .ob_sval = "\xf0\x03\x01\x01\x01\xf1\x02\x07\x01\x04\xf0\x2c\x00\x0e\x12\x80\x0a\xf3\x06\x00\x01\x0c\xdb\x00\x0a\xdb\x00\x0a\xdb\x00\x10\xdb\x00\x0e\xf0\x06\x00\x10\x13\x8f\x7c\x89\x7c\x98\x77\xd1\x0f\x26\x80\x0b\xd9\x03\x0e\xdb\x04\x14\xdc\x04\x11\xe3\x04\x17\xf1\x06\x00\x04\x0f\xd8\x17\x1b\x98\x53\x90\x6b\x81\x4f\xe0\x17\x1a\x90\x65\x80\x4f\xe1\x07\x0a\xd1\x0a\x34\xa1\x4f\xd3\x0a\x34\xd4\x07\x34\xd0\x00\x34\xd0\x07\x34\xd8\x0b\x1a\x98\x31\xd1\x0b\x1d\x80\x08\xd9\x11\x16\x90\x7f\xd3\x11\x27\x80\x0e\xd8\x12\x14\x97\x27\x91\x27\x98\x2f\xd3\x12\x2a\x80\x0f\xd9\x29\x38\xd3\x17\x39\xa9\x1f\xa0\x41\x98\x21\x98\x41\x98\x33\x9a\x07\xa8\x1f\xd1\x17\x39\xd0\x00\x14\xf0\x08\x00\x27\x2d\xd0\x00\x23\xd8\x28\x3a\xd0\x00\x25\xd8\x20\x45\xd8\x22\x45\xf1\x03\x01\x21\x46\x01\xd0\x00\x1b\xf2\x08\x0e\x01\x17\xf1\x20\x00\x0f\x1f\xd3\x0e\x20\x80\x0b\xf2\x06\x02\x01\x37\xf2\x0a\x03\x01\x2a\xf2\x0a\x03\x01\x2a\xf1\x0c\x00\x04\x0f\xf3\x02\x1b\x05\x2a\xf2\x3c\x03\x05\x3f\xf2\x0c\x05\x01\x22\xf2\x10\x07\x01\x1a\xf2\x14\x06\x01\x32\xf2\x12\x02\x01\x2e\xf2\x0a\x04\x01\x2e\xf1\x0e\x00\x04\x0f\xf3\x02\x05\x05\x52\x01\xf2\x10\x02\x05\x30\xf2\x0a\x07\x01\x14\xf3\x14\x17\x01\x0e\xf1\x34\x00\x0e\x12\x90\x2d\xd7\x12\x28\xd1\x12\x28\xd3\x0d\x29\x80\x0a\xf0\x70\x07\x00\x11\x15\x8f\x7f\x89\x7f\x98\x71\xa0\x28\xd3\x0f\x2b\xa8\x67\xd1\x0f\x35\x80\x0c\xe0\x14\x17\x97\x4e\x91\x4e\xa0\x3c\xb0\x18\xd3\x14\x3a\xd0\x00\x11\xe0\x0b\x18\x80\x08\xd8\x07\x0d\x80\x04\xe0\x13\x18\x90\x27\x80\x0f\xd9\x03\x0e\xd8\x04\x13\xd7\x04\x1a\xd1\x04\x1a\x98\x36\xd4\x04\x22\xe0\x15\x2c\x90\x54\xd7\x15\x2c\xd1\x15\x2c\xd3\x15\x2e\xd0\x00\x12\xe0\x15\x1b\x90\x48\xd0\x00\x11\xe0\x38\x49\xd0\x00\x49\xd0\x00\x17\xd0\x1a\x35\xf0\x04\x43\x01\x01\x30\xc0\x14\xf4\x00\x43\x01\x01\x30\xf2\x4c\x02\x25\x01\x40\x01\xf2\x50\x01\x10\x01\x47\x01\xf2\x26\x09\x01\x14\xf2\x18\x09\x01\x10\xf2\x18\x1c\x01\x1f\xf2\x3e\x1e\x01\x11\xf2\x42\x01\x19\x01\x4c\x01\xf2\x38\x15\x01\x0a\xf3\x30\x0a\x01\x39\xf3\x1a\x07\x01\x10\xf3\x14\x08\x01\x10\xf2\x16\x09\x01\x44\x01\xf1\x1c\x00\x0d\x13\x8b\x48\x80\x09\xf0\x06\x43\x01\x01\x10\xb8\x34\xd8\x37\x40\xf4\x03\x43\x01\x01\x10\xf2\x4c\x02\x2d\x01\x17\xf7\x64\x01\x30\x01\x1c\xf1\x00\x30\x01\x1c\xf7\x66\x01\x1b\x01\x3c\xf1\x00\x1b\x01\x3c\xf4\x3c\x4e\x02\x01\x1b\x90\x3d\xf4\x00\x4e\x02\x01\x1b\xf7\x62\x04\x2f\x01\x20\xf1\x00\x2f\x01\x20\xf4\x64\x01\x2a\x01\x2d\x90\x7a\xa0\x3c\xf4\x00\x2a\x01\x2d\xf4\x5a\x01\x16\x01\x14\x98\x3a\xa0\x7d\xf4\x00\x16\x01\x14\xf4\x32\x32\x01\x19\x98\x2a\xa0\x6d\xf4\x00\x32\x01\x19\xf7\x6a\x01\x41\x01\x01\x20\xf1\x00\x41\x01\x01\x20\xf7\x4e\x02\x21\x01\x2b\xf1\x00\x21\x01\x2b\xf0\x4a\x01\x00\x14\x23\xd0\x00\x10\xf7\x0a\x79\x01\x01\x46\x01\xf1\x00\x79\x01\x01\x46\x01\xf7\x78\x03\x48\x02\x01\x2c\xf1\x00\x48\x02\x01\x2c\xf3\x5a\x04\x16\x01\x0d\xf2\x32\x08\x01\x2a\xf2\x16\x02\x01\x23\xf3\x0a\x05\x01\x25\xf9\xf2\x7d\x34\x00\x18\x3a", }; static struct { @@ -86872,7 +86919,7 @@ _collections_abc_toplevel_consts_66_consts_7 = { static struct { PyASCIIObject _ascii; - uint8_t _data[332]; + uint8_t _data[339]; } _collections_abc_toplevel_consts_66_consts_8_consts_0 = { ._ascii = { @@ -86880,7 +86927,7 @@ _collections_abc_toplevel_consts_66_consts_8_consts_0 = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyUnicode_Type, }, - .length = 331, + .length = 338, .hash = -1, .state = { .kind = 1, @@ -86889,7 +86936,7 @@ _collections_abc_toplevel_consts_66_consts_8_consts_0 = { .statically_allocated = 1, }, }, - ._data = "\x20\x44\x2e\x75\x70\x64\x61\x74\x65\x28\x5b\x45\x2c\x20\x5d\x2a\x2a\x46\x29\x20\x2d\x3e\x20\x4e\x6f\x6e\x65\x2e\x20\x20\x55\x70\x64\x61\x74\x65\x20\x44\x20\x66\x72\x6f\x6d\x20\x6d\x61\x70\x70\x69\x6e\x67\x2f\x69\x74\x65\x72\x61\x62\x6c\x65\x20\x45\x20\x61\x6e\x64\x20\x46\x2e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x49\x66\x20\x45\x20\x70\x72\x65\x73\x65\x6e\x74\x20\x61\x6e\x64\x20\x68\x61\x73\x20\x61\x20\x2e\x6b\x65\x79\x73\x28\x29\x20\x6d\x65\x74\x68\x6f\x64\x2c\x20\x64\x6f\x65\x73\x3a\x20\x20\x20\x20\x20\x66\x6f\x72\x20\x6b\x20\x69\x6e\x20\x45\x3a\x20\x44\x5b\x6b\x5d\x20\x3d\x20\x45\x5b\x6b\x5d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x49\x66\x20\x45\x20\x70\x72\x65\x73\x65\x6e\x74\x20\x61\x6e\x64\x20\x6c\x61\x63\x6b\x73\x20\x2e\x6b\x65\x79\x73\x28\x29\x20\x6d\x65\x74\x68\x6f\x64\x2c\x20\x64\x6f\x65\x73\x3a\x20\x20\x20\x20\x20\x66\x6f\x72\x20\x28\x6b\x2c\x20\x76\x29\x20\x69\x6e\x20\x45\x3a\x20\x44\x5b\x6b\x5d\x20\x3d\x20\x76\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x49\x6e\x20\x65\x69\x74\x68\x65\x72\x20\x63\x61\x73\x65\x2c\x20\x74\x68\x69\x73\x20\x69\x73\x20\x66\x6f\x6c\x6c\x6f\x77\x65\x64\x20\x62\x79\x3a\x20\x66\x6f\x72\x20\x6b\x2c\x20\x76\x20\x69\x6e\x20\x46\x2e\x69\x74\x65\x6d\x73\x28\x29\x3a\x20\x44\x5b\x6b\x5d\x20\x3d\x20\x76\x0a\x20\x20\x20\x20\x20\x20\x20\x20", + ._data = "\x20\x44\x2e\x75\x70\x64\x61\x74\x65\x28\x5b\x45\x2c\x20\x5d\x2a\x2a\x46\x29\x20\x2d\x3e\x20\x4e\x6f\x6e\x65\x2e\x20\x20\x55\x70\x64\x61\x74\x65\x20\x44\x20\x66\x72\x6f\x6d\x20\x6d\x61\x70\x70\x69\x6e\x67\x2f\x69\x74\x65\x72\x61\x62\x6c\x65\x20\x45\x20\x61\x6e\x64\x20\x46\x2e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x49\x66\x20\x45\x20\x70\x72\x65\x73\x65\x6e\x74\x20\x61\x6e\x64\x20\x68\x61\x73\x20\x61\x20\x2e\x6b\x65\x79\x73\x28\x29\x20\x6d\x65\x74\x68\x6f\x64\x2c\x20\x64\x6f\x65\x73\x3a\x20\x20\x20\x20\x20\x66\x6f\x72\x20\x6b\x20\x69\x6e\x20\x45\x2e\x6b\x65\x79\x73\x28\x29\x3a\x20\x44\x5b\x6b\x5d\x20\x3d\x20\x45\x5b\x6b\x5d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x49\x66\x20\x45\x20\x70\x72\x65\x73\x65\x6e\x74\x20\x61\x6e\x64\x20\x6c\x61\x63\x6b\x73\x20\x2e\x6b\x65\x79\x73\x28\x29\x20\x6d\x65\x74\x68\x6f\x64\x2c\x20\x64\x6f\x65\x73\x3a\x20\x20\x20\x20\x20\x66\x6f\x72\x20\x28\x6b\x2c\x20\x76\x29\x20\x69\x6e\x20\x45\x3a\x20\x44\x5b\x6b\x5d\x20\x3d\x20\x76\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x49\x6e\x20\x65\x69\x74\x68\x65\x72\x20\x63\x61\x73\x65\x2c\x20\x74\x68\x69\x73\x20\x69\x73\x20\x66\x6f\x6c\x6c\x6f\x77\x65\x64\x20\x62\x79\x3a\x20\x66\x6f\x72\x20\x6b\x2c\x20\x76\x20\x69\x6e\x20\x46\x2e\x69\x74\x65\x6d\x73\x28\x29\x3a\x20\x44\x5b\x6b\x5d\x20\x3d\x20\x76\x0a\x20\x20\x20\x20\x20\x20\x20\x20", }; static struct { @@ -101242,15 +101289,15 @@ ntpath_toplevel_consts_33 = { static struct { PyASCIIObject _ascii; - uint8_t _data[165]; + uint8_t _data[17]; } -ntpath_toplevel_consts_34_consts_0 = { +const_str__getfullpathname = { ._ascii = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyUnicode_Type, }, - .length = 164, + .length = 16, .hash = -1, .state = { .kind = 1, @@ -101259,7 +101306,7 @@ ntpath_toplevel_consts_34_consts_0 = { .statically_allocated = 1, }, }, - ._data = "\x52\x65\x74\x75\x72\x6e\x20\x74\x68\x65\x20\x61\x62\x73\x6f\x6c\x75\x74\x65\x20\x76\x65\x72\x73\x69\x6f\x6e\x20\x6f\x66\x20\x61\x20\x70\x61\x74\x68\x20\x61\x73\x20\x61\x20\x66\x61\x6c\x6c\x62\x61\x63\x6b\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x69\x6e\x20\x63\x61\x73\x65\x0a\x20\x20\x20\x20\x60\x6e\x74\x2e\x5f\x67\x65\x74\x66\x75\x6c\x6c\x70\x61\x74\x68\x6e\x61\x6d\x65\x60\x20\x69\x73\x20\x6e\x6f\x74\x20\x61\x76\x61\x69\x6c\x61\x62\x6c\x65\x20\x6f\x72\x20\x72\x61\x69\x73\x65\x73\x20\x4f\x53\x45\x72\x72\x6f\x72\x2e\x20\x53\x65\x65\x20\x62\x70\x6f\x2d\x33\x31\x30\x34\x37\x20\x66\x6f\x72\x0a\x20\x20\x20\x20\x6d\x6f\x72\x65\x2e\x0a\x0a\x20\x20\x20\x20", + ._data = "_getfullpathname", }; static struct { @@ -101269,7 +101316,7 @@ static PyObject *ob_item[1]; }_object; } -ntpath_toplevel_consts_34_consts = { +ntpath_toplevel_consts_34 = { ._object = { .ob_base = { .ob_base = { @@ -101279,22 +101326,22 @@ ntpath_toplevel_consts_34_consts = { .ob_size = 1, }, .ob_item = { - & ntpath_toplevel_consts_34_consts_0._ascii.ob_base, + & const_str__getfullpathname._ascii.ob_base, }, }, }; static struct { PyASCIIObject _ascii; - uint8_t _data[8]; + uint8_t _data[39]; } -const_str_getcwdb = { +ntpath_toplevel_consts_35_consts_0 = { ._ascii = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyUnicode_Type, }, - .length = 7, + .length = 38, .hash = -1, .state = { .kind = 1, @@ -101303,50 +101350,44 @@ const_str_getcwdb = { .statically_allocated = 1, }, }, - ._data = "getcwdb", + ._data = "Return the absolute version of a path.", }; static struct { PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[9]; + PyObject *ob_item[3]; }_object; } -ntpath_toplevel_consts_34_names = { +ntpath_toplevel_consts_35_consts = { ._object = { .ob_base = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 9, + .ob_size = 3, }, .ob_item = { - & const_str_os._ascii.ob_base, - & const_str_fspath._ascii.ob_base, - & const_str_isabs._ascii.ob_base, - &_Py_ID(isinstance), - &_Py_ID(bytes), - & const_str_getcwdb._ascii.ob_base, - & const_str_getcwd._ascii.ob_base, - &_Py_ID(join), - & const_str_normpath._ascii.ob_base, + & ntpath_toplevel_consts_35_consts_0._ascii.ob_base, + (PyObject *)&_Py_SINGLETON(bytes_characters[92]), + (PyObject *)&_Py_SINGLETON(strings).ascii[92], }, }, }; static struct { PyASCIIObject _ascii; - uint8_t _data[18]; + uint8_t _data[8]; } -const_str__abspath_fallback = { +const_str_getcwdb = { ._ascii = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyUnicode_Type, }, - .length = 17, + .length = 7, .hash = -1, .state = { .kind = 1, @@ -101355,148 +101396,136 @@ const_str__abspath_fallback = { .statically_allocated = 1, }, }, - ._data = "_abspath_fallback", -}; -static - struct { - PyObject_VAR_HEAD - Py_hash_t ob_shash; - char ob_sval[78]; - } -ntpath_toplevel_consts_34_linetable = { - .ob_base = { - .ob_base = { - .ob_refcnt = _Py_IMMORTAL_REFCNT, - .ob_type = &PyBytes_Type, - }, - .ob_size = 77, - }, - .ob_shash = -1, - .ob_sval = "\x80\x00\xf4\x0e\x00\x0c\x0e\x8f\x39\x89\x39\x90\x54\x8b\x3f\x80\x44\xdc\x0b\x10\x90\x14\x8c\x3b\xdc\x0b\x15\x90\x64\x9c\x45\xd4\x0b\x22\xdc\x12\x14\x97\x2a\x91\x2a\x93\x2c\x89\x43\xe4\x12\x14\x97\x29\x91\x29\x93\x2b\x88\x43\xdc\x0f\x13\x90\x43\x98\x14\x8b\x7f\x88\x04\xdc\x0b\x13\x90\x44\x8b\x3e\xd0\x04\x19", + ._data = "getcwdb", }; static struct { PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[2]; + PyObject *ob_item[13]; }_object; } -ntpath_toplevel_consts_34_localsplusnames = { +ntpath_toplevel_consts_35_names = { ._object = { .ob_base = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 2, + .ob_size = 13, }, .ob_item = { - &_Py_ID(path), - &_Py_ID(cwd), + & const_str__getfullpathname._ascii.ob_base, + & const_str_normpath._ascii.ob_base, + & const_str_OSError._ascii.ob_base, + & const_str_ValueError._ascii.ob_base, + & const_str_os._ascii.ob_base, + & const_str_fspath._ascii.ob_base, + & const_str_isabs._ascii.ob_base, + &_Py_ID(isinstance), + &_Py_ID(bytes), + & const_str_getcwdb._ascii.ob_base, + & const_str_getcwd._ascii.ob_base, + & const_str_splitroot._ascii.ob_base, + &_Py_ID(join), }, }, }; static - struct _PyCode_DEF(226) -ntpath_toplevel_consts_34 = { + struct { + PyObject_VAR_HEAD + Py_hash_t ob_shash; + char ob_sval[240]; + } +ntpath_toplevel_consts_35_linetable = { .ob_base = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, - .ob_type = &PyCode_Type, + .ob_type = &PyBytes_Type, }, - .ob_size = 113, + .ob_size = 239, }, - .co_consts = & ntpath_toplevel_consts_34_consts._object.ob_base.ob_base, - .co_names = & ntpath_toplevel_consts_34_names._object.ob_base.ob_base, - .co_exceptiontable = (PyObject *)&_Py_SINGLETON(bytes_empty), - .co_flags = 3, - .co_argcount = 1, - .co_posonlyargcount = 0, - .co_kwonlyargcount = 0, - .co_framesize = 6 + FRAME_SPECIALS_SIZE, - .co_stacksize = 4, - .co_firstlineno = 564, - .co_nlocalsplus = 2, - .co_nlocals = 2, - .co_ncellvars = 0, - .co_nfreevars = 0, - .co_version = 566, - .co_localsplusnames = & ntpath_toplevel_consts_34_localsplusnames._object.ob_base.ob_base, - .co_localspluskinds = & importlib__bootstrap_toplevel_consts_14_consts_2_localspluskinds.ob_base.ob_base, - .co_filename = & ntpath_toplevel_consts_12_filename._ascii.ob_base, - .co_name = & const_str__abspath_fallback._ascii.ob_base, - .co_qualname = & const_str__abspath_fallback._ascii.ob_base, - .co_linetable = & ntpath_toplevel_consts_34_linetable.ob_base.ob_base, - ._co_cached = NULL, - .co_code_adaptive = "\x97\x00\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x7d\x00\x74\x05\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x73\x45\x74\x07\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x74\x08\x00\x00\x00\x00\x00\x00\x00\x00\xab\x02\x00\x00\x00\x00\x00\x00\x72\x15\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x7d\x01\x6e\x14\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x7d\x01\x74\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x01\x7c\x00\xab\x02\x00\x00\x00\x00\x00\x00\x7d\x00\x74\x11\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x53\x00", - ._co_firsttraceable = 0, + .ob_shash = -1, + .ob_sval = "\x80\x00\xf0\x04\x04\x09\x11\xdc\x13\x23\xa4\x48\xa8\x54\xa3\x4e\xd3\x13\x33\xd0\x0c\x33\xf8\xdc\x10\x17\x9c\x1a\xd0\x0f\x24\xf2\x00\x02\x09\x11\xe1\x0c\x10\xf0\x05\x02\x09\x11\xfa\xf4\x06\x00\x10\x12\x8f\x79\x89\x79\x98\x14\x8b\x7f\x88\x04\xdc\x0f\x14\x90\x54\x8c\x7b\xdc\x0f\x19\x98\x24\xa4\x05\xd4\x0f\x26\xd8\x16\x1b\x90\x03\xdc\x19\x1b\x9f\x1a\x99\x1a\x91\x06\xe0\x16\x1a\x90\x03\xdc\x19\x1b\x9f\x19\x99\x19\x90\x06\xdc\x20\x29\xa8\x24\xa3\x0f\xd1\x0c\x1d\x88\x45\x90\x34\x98\x14\xe1\x0f\x14\x99\x04\xf0\x02\x04\x11\x2e\xdc\x1b\x1f\xd4\x20\x30\xb0\x15\xb8\x14\xb1\x1c\xd3\x20\x3e\xc0\x04\xd3\x1b\x45\x90\x44\xf4\x0c\x00\x10\x18\x98\x04\x8b\x7e\xd0\x08\x1d\xf8\xf4\x0b\x00\x19\x20\xa4\x1a\xd0\x17\x2c\xf2\x00\x02\x11\x2e\xe0\x1b\x20\xa0\x33\x99\x3b\xa8\x14\xd1\x1b\x2d\x91\x44\xf4\x06\x00\x10\x18\x98\x04\x8b\x7e\xd0\x08\x1d\xf0\x0b\x02\x11\x2e\xfa\xf4\x08\x00\x18\x1c\x99\x46\x9b\x48\xa0\x64\xd3\x17\x2b\x90\x04\xdc\x0f\x17\x98\x04\x8b\x7e\xd0\x08\x1d", }; static struct { - PyASCIIObject _ascii; - uint8_t _data[17]; + PyObject_VAR_HEAD + Py_hash_t ob_shash; + char ob_sval[31]; } -const_str__getfullpathname = { - ._ascii = { +ntpath_toplevel_consts_35_exceptiontable = { + .ob_base = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, - .ob_type = &PyUnicode_Type, - }, - .length = 16, - .hash = -1, - .state = { - .kind = 1, - .compact = 1, - .ascii = 1, - .statically_allocated = 1, + .ob_type = &PyBytes_Type, }, + .ob_size = 30, }, - ._data = "_getfullpathname", + .ob_shash = -1, + .ob_sval = "\x82\x13\x16\x00\x96\x0f\x28\x03\xa7\x01\x28\x03\xc2\x14\x18\x42\x37\x00\xc2\x37\x17\x43\x1b\x03\xc3\x1a\x01\x43\x1b\x03", }; static struct { PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[1]; + PyObject *ob_item[5]; }_object; } -ntpath_toplevel_consts_35 = { +ntpath_toplevel_consts_35_localsplusnames = { ._object = { .ob_base = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 1, + .ob_size = 5, }, .ob_item = { - & const_str__getfullpathname._ascii.ob_base, + &_Py_ID(path), + &_Py_ID(sep), + & const_str_getcwd._ascii.ob_base, + & const_str_drive._ascii.ob_base, + & const_str_root._ascii.ob_base, }, }, }; static - struct { - PyASCIIObject _ascii; - uint8_t _data[39]; - } -ntpath_toplevel_consts_36_consts_0 = { - ._ascii = { + struct _PyCode_DEF(500) +ntpath_toplevel_consts_35 = { + .ob_base = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, - .ob_type = &PyUnicode_Type, - }, - .length = 38, - .hash = -1, - .state = { - .kind = 1, - .compact = 1, - .ascii = 1, - .statically_allocated = 1, + .ob_type = &PyCode_Type, }, + .ob_size = 250, }, - ._data = "Return the absolute version of a path.", + .co_consts = & ntpath_toplevel_consts_35_consts._object.ob_base.ob_base, + .co_names = & ntpath_toplevel_consts_35_names._object.ob_base.ob_base, + .co_exceptiontable = & ntpath_toplevel_consts_35_exceptiontable.ob_base.ob_base, + .co_flags = 3, + .co_argcount = 1, + .co_posonlyargcount = 0, + .co_kwonlyargcount = 0, + .co_framesize = 11 + FRAME_SPECIALS_SIZE, + .co_stacksize = 6, + .co_firstlineno = 581, + .co_nlocalsplus = 5, + .co_nlocals = 5, + .co_ncellvars = 0, + .co_nfreevars = 0, + .co_version = 566, + .co_localsplusnames = & ntpath_toplevel_consts_35_localsplusnames._object.ob_base.ob_base, + .co_localspluskinds = & importlib__bootstrap_toplevel_consts_7_consts_5_localspluskinds.ob_base.ob_base, + .co_filename = & ntpath_toplevel_consts_12_filename._ascii.ob_base, + .co_name = & const_str_abspath._ascii.ob_base, + .co_qualname = & const_str_abspath._ascii.ob_base, + .co_linetable = & ntpath_toplevel_consts_35_linetable.ob_base.ob_base, + ._co_cached = NULL, + .co_code_adaptive = "\x97\x00\x09\x00\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x74\x03\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x53\x00\x23\x00\x74\x04\x00\x00\x00\x00\x00\x00\x00\x00\x74\x06\x00\x00\x00\x00\x00\x00\x00\x00\x66\x02\x24\x00\x72\x03\x01\x00\x59\x00\x6e\x04\x77\x00\x78\x03\x59\x00\x77\x01\x74\x09\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x7d\x00\x74\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x73\xa4\x74\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x74\x10\x00\x00\x00\x00\x00\x00\x00\x00\xab\x02\x00\x00\x00\x00\x00\x00\x72\x13\x64\x01\x7d\x01\x74\x08\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x02\x6e\x12\x64\x02\x7d\x01\x74\x08\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x02\x74\x17\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x5c\x03\x00\x00\x7d\x03\x7d\x04\x7d\x00\x7c\x03\x73\x02\x7c\x04\x72\x4b\x09\x00\x74\x19\x00\x00\x00\x00\x00\x00\x00\x00\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x03\x7c\x04\x7a\x00\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x02\x00\x00\x00\x00\x00\x00\x7d\x00\x74\x03\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x53\x00\x23\x00\x74\x04\x00\x00\x00\x00\x00\x00\x00\x00\x74\x06\x00\x00\x00\x00\x00\x00\x00\x00\x66\x02\x24\x00\x72\x15\x01\x00\x7c\x03\x7c\x01\x7a\x00\x00\x00\x7c\x00\x7a\x00\x00\x00\x7d\x00\x59\x00\x74\x03\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x53\x00\x77\x00\x78\x03\x59\x00\x77\x01\x74\x19\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x7c\x02\xab\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x02\x00\x00\x00\x00\x00\x00\x7d\x00\x74\x03\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x53\x00", + ._co_firsttraceable = 0, }; static struct { @@ -101516,7 +101545,7 @@ ntpath_toplevel_consts_36_consts = { .ob_size = 1, }, .ob_item = { - & ntpath_toplevel_consts_36_consts_0._ascii.ob_base, + & ntpath_toplevel_consts_35_consts_0._ascii.ob_base, }, }, }; @@ -101525,7 +101554,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[5]; + PyObject *ob_item[9]; }_object; } ntpath_toplevel_consts_36_names = { @@ -101535,14 +101564,18 @@ ntpath_toplevel_consts_36_names = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 5, + .ob_size = 9, }, .ob_item = { - & const_str__getfullpathname._ascii.ob_base, + & const_str_os._ascii.ob_base, + & const_str_fspath._ascii.ob_base, + & const_str_isabs._ascii.ob_base, + &_Py_ID(isinstance), + &_Py_ID(bytes), + & const_str_getcwdb._ascii.ob_base, + & const_str_getcwd._ascii.ob_base, + &_Py_ID(join), & const_str_normpath._ascii.ob_base, - & const_str_OSError._ascii.ob_base, - & const_str_ValueError._ascii.ob_base, - & const_str__abspath_fallback._ascii.ob_base, }, }, }; @@ -101550,7 +101583,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[54]; + char ob_sval[76]; } ntpath_toplevel_consts_36_linetable = { .ob_base = { @@ -101558,61 +101591,67 @@ ntpath_toplevel_consts_36_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 53, + .ob_size = 75, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xf0\x04\x03\x09\x2b\xdc\x13\x23\xa4\x48\xa8\x54\xa3\x4e\xd3\x13\x33\xd0\x0c\x33\xf8\xdc\x10\x17\x9c\x1a\xd0\x0f\x24\xf2\x00\x01\x09\x2b\xdc\x13\x24\xa0\x54\xd3\x13\x2a\xd2\x0c\x2a\xf0\x03\x01\x09\x2b\xfa", + .ob_sval = "\x80\x00\xe4\x0f\x11\x8f\x79\x89\x79\x98\x14\x8b\x7f\x88\x04\xdc\x0f\x14\x90\x54\x8c\x7b\xdc\x0f\x19\x98\x24\xa4\x05\xd4\x0f\x26\xdc\x16\x18\x97\x6a\x91\x6a\x93\x6c\x91\x03\xe4\x16\x18\x97\x69\x91\x69\x93\x6b\x90\x03\xdc\x13\x17\x98\x03\x98\x54\x93\x3f\x88\x44\xdc\x0f\x17\x98\x04\x8b\x7e\xd0\x08\x1d", }; static struct { - PyObject_VAR_HEAD - Py_hash_t ob_shash; - char ob_sval[13]; + PyGC_Head _gc_head; + struct { + PyObject_VAR_HEAD + PyObject *ob_item[2]; + }_object; } -ntpath_toplevel_consts_36_exceptiontable = { - .ob_base = { +ntpath_toplevel_consts_36_localsplusnames = { + ._object = { .ob_base = { - .ob_refcnt = _Py_IMMORTAL_REFCNT, - .ob_type = &PyBytes_Type, + .ob_base = { + .ob_refcnt = _Py_IMMORTAL_REFCNT, + .ob_type = &PyTuple_Type, + }, + .ob_size = 2, + }, + .ob_item = { + &_Py_ID(path), + &_Py_ID(cwd), }, - .ob_size = 12, }, - .ob_shash = -1, - .ob_sval = "\x82\x13\x16\x00\x96\x1a\x33\x03\xb2\x01\x33\x03", }; static - struct _PyCode_DEF(108) + struct _PyCode_DEF(226) ntpath_toplevel_consts_36 = { .ob_base = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyCode_Type, }, - .ob_size = 54, + .ob_size = 113, }, .co_consts = & ntpath_toplevel_consts_36_consts._object.ob_base.ob_base, .co_names = & ntpath_toplevel_consts_36_names._object.ob_base.ob_base, - .co_exceptiontable = & ntpath_toplevel_consts_36_exceptiontable.ob_base.ob_base, + .co_exceptiontable = (PyObject *)&_Py_SINGLETON(bytes_empty), .co_flags = 3, .co_argcount = 1, .co_posonlyargcount = 0, .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, - .co_stacksize = 5, - .co_firstlineno = 588, - .co_nlocalsplus = 1, - .co_nlocals = 1, + .co_stacksize = 4, + .co_firstlineno = 569, + .co_nlocalsplus = 2, + .co_nlocals = 2, .co_ncellvars = 0, .co_nfreevars = 0, .co_version = 567, - .co_localsplusnames = & importlib__bootstrap_external_toplevel_consts_18_localsplusnames._object.ob_base.ob_base, - .co_localspluskinds = (PyObject *)&_Py_SINGLETON(bytes_characters[32]), + .co_localsplusnames = & ntpath_toplevel_consts_36_localsplusnames._object.ob_base.ob_base, + .co_localspluskinds = & importlib__bootstrap_toplevel_consts_14_consts_2_localspluskinds.ob_base.ob_base, .co_filename = & ntpath_toplevel_consts_12_filename._ascii.ob_base, .co_name = & const_str_abspath._ascii.ob_base, .co_qualname = & const_str_abspath._ascii.ob_base, .co_linetable = & ntpath_toplevel_consts_36_linetable.ob_base.ob_base, ._co_cached = NULL, - .co_code_adaptive = "\x97\x00\x09\x00\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x74\x03\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x53\x00\x23\x00\x74\x04\x00\x00\x00\x00\x00\x00\x00\x00\x74\x06\x00\x00\x00\x00\x00\x00\x00\x00\x66\x02\x24\x00\x72\x0e\x01\x00\x74\x09\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x63\x02\x59\x00\x53\x00\x77\x00\x78\x03\x59\x00\x77\x01", + .co_code_adaptive = "\x97\x00\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x7d\x00\x74\x05\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x73\x45\x74\x07\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x74\x08\x00\x00\x00\x00\x00\x00\x00\x00\xab\x02\x00\x00\x00\x00\x00\x00\x72\x15\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x7d\x01\x6e\x14\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x7d\x01\x74\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x01\x7c\x00\xab\x02\x00\x00\x00\x00\x00\x00\x7d\x00\x74\x11\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x53\x00", ._co_firsttraceable = 0, }; static @@ -102046,7 +102085,7 @@ ntpath_toplevel_consts_38 = { .co_kwonlyargcount = 0, .co_framesize = 12 + FRAME_SPECIALS_SIZE, .co_stacksize = 7, - .co_firstlineno = 601, + .co_firstlineno = 614, .co_nlocalsplus = 5, .co_nlocals = 5, .co_ncellvars = 0, @@ -102301,7 +102340,7 @@ ntpath_toplevel_consts_39 = { .co_kwonlyargcount = 0, .co_framesize = 11 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 643, + .co_firstlineno = 656, .co_nlocalsplus = 6, .co_nlocals = 6, .co_ncellvars = 0, @@ -102655,7 +102694,7 @@ ntpath_toplevel_consts_42 = { .co_kwonlyargcount = 1, .co_framesize = 16 + FRAME_SPECIALS_SIZE, .co_stacksize = 6, - .co_firstlineno = 692, + .co_firstlineno = 705, .co_nlocalsplus = 10, .co_nlocals = 10, .co_ncellvars = 0, @@ -103186,7 +103225,7 @@ ntpath_toplevel_consts_44 = { .co_kwonlyargcount = 0, .co_framesize = 26 + FRAME_SPECIALS_SIZE, .co_stacksize = 7, - .co_firstlineno = 758, + .co_firstlineno = 771, .co_nlocalsplus = 19, .co_nlocals = 19, .co_ncellvars = 0, @@ -103541,7 +103580,7 @@ ntpath_toplevel_consts_45 = { .co_kwonlyargcount = 0, .co_framesize = 28 + FRAME_SPECIALS_SIZE, .co_stacksize = 10, - .co_firstlineno = 814, + .co_firstlineno = 827, .co_nlocalsplus = 18, .co_nlocals = 18, .co_ncellvars = 0, @@ -103877,7 +103916,7 @@ ntpath_toplevel_consts_51 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 884, + .co_firstlineno = 897, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -103929,7 +103968,7 @@ ntpath_toplevel_consts_52 = { .co_kwonlyargcount = 0, .co_framesize = 1 + FRAME_SPECIALS_SIZE, .co_stacksize = 0, - .co_firstlineno = 879, + .co_firstlineno = 892, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -103997,8 +104036,8 @@ ntpath_toplevel_consts = { & ntpath_toplevel_consts_31.ob_base.ob_base, & ntpath_toplevel_consts_32._object.ob_base.ob_base, & ntpath_toplevel_consts_33.ob_base.ob_base, - & ntpath_toplevel_consts_34.ob_base.ob_base, - & ntpath_toplevel_consts_35._object.ob_base.ob_base, + & ntpath_toplevel_consts_34._object.ob_base.ob_base, + & ntpath_toplevel_consts_35.ob_base.ob_base, & ntpath_toplevel_consts_36.ob_base.ob_base, & ntpath_toplevel_consts_37._object.ob_base.ob_base, & ntpath_toplevel_consts_38.ob_base.ob_base, @@ -104069,7 +104108,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[66]; + PyObject *ob_item[65]; }_object; } ntpath_toplevel_names = { @@ -104079,7 +104118,7 @@ ntpath_toplevel_names = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 66, + .ob_size = 65, }, .ob_item = { &_Py_ID(__doc__), @@ -104126,7 +104165,6 @@ ntpath_toplevel_names = { & const_str_expandvars._ascii.ob_base, & const_str__path_normpath._ascii.ob_base, & const_str_normpath._ascii.ob_base, - & const_str__abspath_fallback._ascii.ob_base, & const_str__getfullpathname._ascii.ob_base, & const_str_abspath._ascii.ob_base, & const_str__getfinalpathname._ascii.ob_base, @@ -104155,7 +104193,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[488]; + char ob_sval[484]; } ntpath_toplevel_linetable = { .ob_base = { @@ -104163,10 +104201,10 @@ ntpath_toplevel_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 487, + .ob_size = 483, }, .ob_shash = -1, - .ob_sval = "\xf0\x03\x01\x01\x01\xf1\x04\x04\x01\x04\xf0\x12\x00\x0a\x0d\x80\x06\xd8\x09\x0d\x80\x06\xd8\x09\x0c\x80\x06\xd8\x06\x0a\x80\x03\xd8\x0a\x0d\x80\x07\xd8\x09\x0c\x80\x06\xd8\x0a\x15\x80\x07\xd8\x0a\x0f\x80\x07\xe3\x00\x09\xdb\x00\x0a\xdb\x00\x0b\xdb\x00\x12\xdc\x00\x19\xf2\x06\x06\x0b\x4f\x01\x80\x07\xf2\x10\x04\x01\x15\xf0\x14\x21\x01\x2c\xf7\x02\x03\x05\x2d\xf1\x00\x03\x05\x2d\xf2\x0a\x11\x05\x38\xf2\x48\x01\x10\x01\x11\xf2\x28\x2b\x01\x0e\xf2\x62\x01\x14\x01\x1e\xf2\x2e\x31\x01\x1f\xf2\x72\x01\x0d\x01\x2b\xf2\x2a\x05\x01\x38\xf0\x0c\x00\x14\x1f\xd7\x13\x28\xd1\x13\x28\xd7\x13\x30\xd1\x13\x30\x80\x08\xd4\x00\x10\xf2\x0a\x02\x01\x17\xf2\x0e\x02\x01\x17\xf1\x0e\x00\x04\x0b\x88\x32\x8f\x3e\x89\x3e\xd0\x1b\x2b\xd4\x03\x2c\xf3\x02\x06\x05\x4a\x01\xf2\x10\x03\x05\x15\xf2\x10\x06\x01\x10\xf0\x24\x03\x01\x1e\xdd\x04\x25\xf2\x06\x11\x01\x15\xf2\x3a\x2d\x01\x1f\xf2\x7a\x01\x6a\x01\x01\x0f\xf0\x60\x03\x26\x01\x28\xdd\x04\x2d\xf2\x50\x01\x0e\x01\x1a\xf0\x22\x0c\x01\x2b\xdd\x04\x23\xf2\x0c\x05\x05\x2b\xf0\x0e\x5d\x02\x01\x14\xdf\x04\x3e\xf2\x0a\x28\x05\x14\xf2\x54\x01\x2f\x05\x14\xf0\x62\x01\x00\x22\x27\xf4\x00\x3c\x05\x14\xf0\x40\x02\x00\x1e\x22\xd0\x00\x1a\xf3\x04\x2b\x01\x0e\xf2\x70\x01\x2e\x01\x0e\xf0\x62\x01\x0a\x01\x09\xf5\x08\x00\x05\x28\xdd\x04\x29\xdd\x04\x29\xdd\x04\x29\xf0\x0c\x0d\x01\x19\xdd\x04\x23\xf3\x0e\x05\x05\x19\xf8\xf0\x5f\x19\x00\x08\x13\xf2\x00\x09\x01\x2c\xf4\x02\x08\x05\x2c\xf0\x03\x09\x01\x2c\xfb\xf0\x74\x07\x00\x08\x13\xf2\x00\x01\x01\x1e\xd8\x19\x1d\xd2\x04\x16\xf0\x03\x01\x01\x1e\xfb\xf0\x5e\x06\x00\x08\x13\xf2\x00\x23\x01\x28\xf4\x02\x22\x05\x28\xf0\x03\x23\x01\x28\xfb\xf0\x74\x01\x00\x08\x13\xf2\x00\x01\x01\x20\xd8\x0e\x1f\x82\x47\xf0\x03\x01\x01\x20\xfb\xf0\x1a\x00\x08\x13\xf2\x00\x02\x01\x17\xe0\x0f\x16\x82\x48\xf0\x05\x02\x01\x17\xfb\xf0\x64\x08\x00\x08\x13\xf2\x00\x02\x01\x09\xe1\x04\x08\xf0\x05\x02\x01\x09\xfb\xf0\x0e\x00\x08\x13\xf2\x00\x04\x01\x15\xf4\x02\x03\x05\x15\xf0\x03\x04\x01\x15\xfa", + .ob_sval = "\xf0\x03\x01\x01\x01\xf1\x04\x04\x01\x04\xf0\x12\x00\x0a\x0d\x80\x06\xd8\x09\x0d\x80\x06\xd8\x09\x0c\x80\x06\xd8\x06\x0a\x80\x03\xd8\x0a\x0d\x80\x07\xd8\x09\x0c\x80\x06\xd8\x0a\x15\x80\x07\xd8\x0a\x0f\x80\x07\xe3\x00\x09\xdb\x00\x0a\xdb\x00\x0b\xdb\x00\x12\xdc\x00\x19\xf2\x06\x06\x0b\x4f\x01\x80\x07\xf2\x10\x04\x01\x15\xf0\x14\x21\x01\x2c\xf7\x02\x03\x05\x2d\xf1\x00\x03\x05\x2d\xf2\x0a\x11\x05\x38\xf2\x48\x01\x10\x01\x11\xf2\x28\x2b\x01\x0e\xf2\x62\x01\x14\x01\x1e\xf2\x2e\x31\x01\x1f\xf2\x72\x01\x0d\x01\x2b\xf2\x2a\x05\x01\x38\xf0\x0c\x00\x14\x1f\xd7\x13\x28\xd1\x13\x28\xd7\x13\x30\xd1\x13\x30\x80\x08\xd4\x00\x10\xf2\x0a\x02\x01\x17\xf2\x0e\x02\x01\x17\xf1\x0e\x00\x04\x0b\x88\x32\x8f\x3e\x89\x3e\xd0\x1b\x2b\xd4\x03\x2c\xf3\x02\x06\x05\x4a\x01\xf2\x10\x03\x05\x15\xf2\x10\x06\x01\x10\xf0\x24\x03\x01\x1e\xdd\x04\x25\xf2\x06\x11\x01\x15\xf2\x3a\x2d\x01\x1f\xf2\x7a\x01\x6a\x01\x01\x0f\xf0\x60\x03\x26\x01\x28\xdd\x04\x2d\xf0\x52\x01\x29\x01\x1e\xdd\x04\x23\xf2\x1e\x19\x05\x1e\xf0\x36\x5d\x02\x01\x14\xdf\x04\x3e\xf2\x0a\x28\x05\x14\xf2\x54\x01\x2f\x05\x14\xf0\x62\x01\x00\x22\x27\xf4\x00\x3c\x05\x14\xf0\x40\x02\x00\x1e\x22\xd0\x00\x1a\xf3\x04\x2b\x01\x0e\xf2\x70\x01\x2e\x01\x0e\xf0\x62\x01\x0a\x01\x09\xf5\x08\x00\x05\x28\xdd\x04\x29\xdd\x04\x29\xdd\x04\x29\xf0\x0c\x0d\x01\x19\xdd\x04\x23\xf3\x0e\x05\x05\x19\xf8\xf0\x79\x19\x00\x08\x13\xf2\x00\x09\x01\x2c\xf4\x02\x08\x05\x2c\xf0\x03\x09\x01\x2c\xfb\xf0\x74\x07\x00\x08\x13\xf2\x00\x01\x01\x1e\xd8\x19\x1d\xd2\x04\x16\xf0\x03\x01\x01\x1e\xfb\xf0\x5e\x06\x00\x08\x13\xf2\x00\x23\x01\x28\xf4\x02\x22\x05\x28\xf0\x03\x23\x01\x28\xfb\xf0\x54\x01\x00\x08\x13\xf2\x00\x0a\x01\x1e\xf4\x02\x09\x05\x1e\xf0\x03\x0a\x01\x1e\xfb\xf0\x54\x01\x00\x08\x13\xf2\x00\x02\x01\x17\xe0\x0f\x16\x82\x48\xf0\x05\x02\x01\x17\xfb\xf0\x64\x08\x00\x08\x13\xf2\x00\x02\x01\x09\xe1\x04\x08\xf0\x05\x02\x01\x09\xfb\xf0\x0e\x00\x08\x13\xf2\x00\x04\x01\x15\xf4\x02\x03\x05\x15\xf0\x03\x04\x01\x15\xfa", }; static struct { @@ -104183,17 +104221,17 @@ ntpath_toplevel_exceptiontable = { .ob_size = 125, }, .ob_shash = -1, - .ob_sval = "\xb0\x0d\x43\x33\x00\xc2\x0e\x06\x44\x01\x00\xc2\x1e\x06\x44\x0e\x00\xc2\x28\x06\x44\x1c\x00\xc2\x32\x08\x44\x29\x00\xc3\x10\x18\x44\x36\x00\xc3\x29\x06\x45\x01\x00\xc3\x33\x08\x43\x3e\x03\xc3\x3d\x01\x43\x3e\x03\xc4\x01\x07\x44\x0b\x03\xc4\x0a\x01\x44\x0b\x03\xc4\x0e\x08\x44\x19\x03\xc4\x18\x01\x44\x19\x03\xc4\x1c\x07\x44\x26\x03\xc4\x25\x01\x44\x26\x03\xc4\x29\x07\x44\x33\x03\xc4\x32\x01\x44\x33\x03\xc4\x36\x05\x44\x3e\x03\xc4\x3d\x01\x44\x3e\x03\xc5\x01\x08\x45\x0c\x03\xc5\x0b\x01\x45\x0c\x03", + .ob_sval = "\xb0\x0d\x43\x30\x00\xc2\x0e\x06\x43\x3e\x00\xc2\x1e\x06\x44\x0b\x00\xc2\x25\x06\x44\x19\x00\xc2\x2f\x08\x44\x27\x00\xc3\x0d\x18\x44\x34\x00\xc3\x26\x06\x44\x3f\x00\xc3\x30\x08\x43\x3b\x03\xc3\x3a\x01\x43\x3b\x03\xc3\x3e\x07\x44\x08\x03\xc4\x07\x01\x44\x08\x03\xc4\x0b\x08\x44\x16\x03\xc4\x15\x01\x44\x16\x03\xc4\x19\x08\x44\x24\x03\xc4\x23\x01\x44\x24\x03\xc4\x27\x07\x44\x31\x03\xc4\x30\x01\x44\x31\x03\xc4\x34\x05\x44\x3c\x03\xc4\x3b\x01\x44\x3c\x03\xc4\x3f\x08\x45\x0a\x03\xc5\x09\x01\x45\x0a\x03", }; static - struct _PyCode_DEF(670) + struct _PyCode_DEF(666) ntpath_toplevel = { .ob_base = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyCode_Type, }, - .ob_size = 335, + .ob_size = 333, }, .co_consts = & ntpath_toplevel_consts._object.ob_base.ob_base, .co_names = & ntpath_toplevel_names._object.ob_base.ob_base, @@ -104217,7 +104255,7 @@ ntpath_toplevel = { .co_qualname = &_Py_STR(anon_module), .co_linetable = & ntpath_toplevel_linetable.ob_base.ob_base, ._co_cached = NULL, - .co_code_adaptive = "\x97\x00\x64\x00\x5a\x00\x64\x01\x5a\x01\x64\x02\x5a\x02\x64\x01\x5a\x03\x64\x03\x5a\x04\x64\x04\x5a\x05\x64\x05\x5a\x06\x64\x06\x5a\x07\x64\x07\x5a\x08\x64\x08\x64\x09\x6c\x09\x5a\x09\x64\x08\x64\x09\x6c\x0a\x5a\x0a\x64\x08\x64\x09\x6c\x0b\x5a\x0b\x64\x08\x64\x09\x6c\x0c\x5a\x0c\x64\x08\x64\x0a\x6c\x0c\xad\x02\x01\x00\x67\x00\x64\x0b\xa2\x01\x5a\x0d\x64\x0c\x84\x00\x5a\x0e\x09\x00\x64\x08\x64\x0d\x6c\x0f\x6d\x10\x5a\x11\x6d\x12\x5a\x13\x6d\x14\x5a\x15\x01\x00\x64\x0e\x84\x00\x5a\x16\x64\x10\x84\x00\x5a\x18\x64\x11\x84\x00\x5a\x19\x64\x12\x84\x00\x5a\x1a\x64\x13\x84\x00\x5a\x1b\x64\x14\x84\x00\x5a\x1c\x64\x15\x84\x00\x5a\x1d\x65\x0c\x6a\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x65\x1d\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x16\x84\x00\x5a\x1f\x64\x17\x84\x00\x5a\x20\x02\x00\x65\x21\x65\x09\x6a\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x18\xab\x02\x00\x00\x00\x00\x00\x00\x72\x04\x64\x19\x84\x00\x5a\x23\x6e\x03\x64\x1a\x84\x00\x5a\x23\x64\x1b\x84\x00\x5a\x24\x09\x00\x64\x08\x64\x1c\x6c\x25\x6d\x26\x5a\x26\x01\x00\x64\x1d\x84\x00\x5a\x27\x64\x1e\x84\x00\x5a\x28\x64\x1f\x84\x00\x5a\x29\x09\x00\x64\x08\x64\x20\x6c\x25\x6d\x2a\x5a\x2b\x01\x00\x64\x22\x84\x00\x5a\x2c\x09\x00\x64\x08\x64\x23\x6c\x25\x6d\x2d\x5a\x2d\x01\x00\x64\x24\x84\x00\x5a\x2e\x09\x00\x64\x08\x64\x25\x6c\x25\x6d\x2f\x5a\x2f\x6d\x30\x5a\x31\x01\x00\x64\x26\x84\x00\x5a\x32\x64\x27\x84\x00\x5a\x33\x64\x28\x64\x29\x9c\x01\x64\x2a\x84\x02\x5a\x34\x64\x2b\x5a\x35\x64\x35\x64\x2c\x84\x01\x5a\x36\x64\x2d\x84\x00\x5a\x37\x09\x00\x64\x08\x64\x2e\x6c\x25\x6d\x38\x5a\x39\x01\x00\x64\x08\x64\x2f\x6c\x25\x6d\x3a\x5a\x3b\x01\x00\x64\x08\x64\x30\x6c\x25\x6d\x3c\x5a\x3d\x01\x00\x64\x08\x64\x31\x6c\x25\x6d\x3e\x5a\x3f\x01\x00\x09\x00\x64\x08\x64\x32\x6c\x25\x6d\x40\x5a\x40\x01\x00\x64\x33\x84\x00\x5a\x41\x79\x09\x23\x00\x65\x17\x24\x00\x72\x06\x01\x00\x64\x0f\x84\x00\x5a\x16\x59\x00\x8c\xc0\x77\x00\x78\x03\x59\x00\x77\x01\x23\x00\x65\x17\x24\x00\x72\x05\x01\x00\x64\x09\x5a\x26\x59\x00\x8c\x76\x77\x00\x78\x03\x59\x00\x77\x01\x23\x00\x65\x17\x24\x00\x72\x06\x01\x00\x64\x21\x84\x00\x5a\x2b\x59\x00\x8c\x74\x77\x00\x78\x03\x59\x00\x77\x01\x23\x00\x65\x17\x24\x00\x72\x05\x01\x00\x65\x2c\x5a\x2e\x59\x00\x8c\x74\x77\x00\x78\x03\x59\x00\x77\x01\x23\x00\x65\x17\x24\x00\x72\x05\x01\x00\x65\x2e\x5a\x34\x59\x00\x8c\x6c\x77\x00\x78\x03\x59\x00\x77\x01\x23\x00\x65\x17\x24\x00\x72\x03\x01\x00\x59\x00\x8c\x55\x77\x00\x78\x03\x59\x00\x77\x01\x23\x00\x65\x17\x24\x00\x72\x06\x01\x00\x64\x34\x84\x00\x5a\x41\x59\x00\x79\x09\x77\x00\x78\x03\x59\x00\x77\x01", + .co_code_adaptive = "\x97\x00\x64\x00\x5a\x00\x64\x01\x5a\x01\x64\x02\x5a\x02\x64\x01\x5a\x03\x64\x03\x5a\x04\x64\x04\x5a\x05\x64\x05\x5a\x06\x64\x06\x5a\x07\x64\x07\x5a\x08\x64\x08\x64\x09\x6c\x09\x5a\x09\x64\x08\x64\x09\x6c\x0a\x5a\x0a\x64\x08\x64\x09\x6c\x0b\x5a\x0b\x64\x08\x64\x09\x6c\x0c\x5a\x0c\x64\x08\x64\x0a\x6c\x0c\xad\x02\x01\x00\x67\x00\x64\x0b\xa2\x01\x5a\x0d\x64\x0c\x84\x00\x5a\x0e\x09\x00\x64\x08\x64\x0d\x6c\x0f\x6d\x10\x5a\x11\x6d\x12\x5a\x13\x6d\x14\x5a\x15\x01\x00\x64\x0e\x84\x00\x5a\x16\x64\x10\x84\x00\x5a\x18\x64\x11\x84\x00\x5a\x19\x64\x12\x84\x00\x5a\x1a\x64\x13\x84\x00\x5a\x1b\x64\x14\x84\x00\x5a\x1c\x64\x15\x84\x00\x5a\x1d\x65\x0c\x6a\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x65\x1d\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x16\x84\x00\x5a\x1f\x64\x17\x84\x00\x5a\x20\x02\x00\x65\x21\x65\x09\x6a\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x18\xab\x02\x00\x00\x00\x00\x00\x00\x72\x04\x64\x19\x84\x00\x5a\x23\x6e\x03\x64\x1a\x84\x00\x5a\x23\x64\x1b\x84\x00\x5a\x24\x09\x00\x64\x08\x64\x1c\x6c\x25\x6d\x26\x5a\x26\x01\x00\x64\x1d\x84\x00\x5a\x27\x64\x1e\x84\x00\x5a\x28\x64\x1f\x84\x00\x5a\x29\x09\x00\x64\x08\x64\x20\x6c\x25\x6d\x2a\x5a\x2b\x01\x00\x09\x00\x64\x08\x64\x22\x6c\x25\x6d\x2c\x5a\x2c\x01\x00\x64\x23\x84\x00\x5a\x2d\x09\x00\x64\x08\x64\x25\x6c\x25\x6d\x2e\x5a\x2e\x6d\x2f\x5a\x30\x01\x00\x64\x26\x84\x00\x5a\x31\x64\x27\x84\x00\x5a\x32\x64\x28\x64\x29\x9c\x01\x64\x2a\x84\x02\x5a\x33\x64\x2b\x5a\x34\x64\x35\x64\x2c\x84\x01\x5a\x35\x64\x2d\x84\x00\x5a\x36\x09\x00\x64\x08\x64\x2e\x6c\x25\x6d\x37\x5a\x38\x01\x00\x64\x08\x64\x2f\x6c\x25\x6d\x39\x5a\x3a\x01\x00\x64\x08\x64\x30\x6c\x25\x6d\x3b\x5a\x3c\x01\x00\x64\x08\x64\x31\x6c\x25\x6d\x3d\x5a\x3e\x01\x00\x09\x00\x64\x08\x64\x32\x6c\x25\x6d\x3f\x5a\x3f\x01\x00\x64\x33\x84\x00\x5a\x40\x79\x09\x23\x00\x65\x17\x24\x00\x72\x06\x01\x00\x64\x0f\x84\x00\x5a\x16\x59\x00\x8c\xbd\x77\x00\x78\x03\x59\x00\x77\x01\x23\x00\x65\x17\x24\x00\x72\x05\x01\x00\x64\x09\x5a\x26\x59\x00\x8c\x73\x77\x00\x78\x03\x59\x00\x77\x01\x23\x00\x65\x17\x24\x00\x72\x06\x01\x00\x64\x21\x84\x00\x5a\x2b\x59\x00\x8c\x71\x77\x00\x78\x03\x59\x00\x77\x01\x23\x00\x65\x17\x24\x00\x72\x06\x01\x00\x64\x24\x84\x00\x5a\x2d\x59\x00\x8c\x75\x77\x00\x78\x03\x59\x00\x77\x01\x23\x00\x65\x17\x24\x00\x72\x05\x01\x00\x65\x2d\x5a\x33\x59\x00\x8c\x6d\x77\x00\x78\x03\x59\x00\x77\x01\x23\x00\x65\x17\x24\x00\x72\x03\x01\x00\x59\x00\x8c\x56\x77\x00\x78\x03\x59\x00\x77\x01\x23\x00\x65\x17\x24\x00\x72\x06\x01\x00\x64\x34\x84\x00\x5a\x40\x59\x00\x79\x09\x77\x00\x78\x03\x59\x00\x77\x01", ._co_firsttraceable = 0, }; @@ -107059,7 +107097,7 @@ posixpath_toplevel_consts_28 = { .ob_size = 113, }, .co_consts = & posixpath_toplevel_consts_28_consts._object.ob_base.ob_base, - .co_names = & ntpath_toplevel_consts_34_names._object.ob_base.ob_base, + .co_names = & ntpath_toplevel_consts_36_names._object.ob_base.ob_base, .co_exceptiontable = (PyObject *)&_Py_SINGLETON(bytes_empty), .co_flags = 3, .co_argcount = 1, @@ -107073,7 +107111,7 @@ posixpath_toplevel_consts_28 = { .co_ncellvars = 0, .co_nfreevars = 0, .co_version = 592, - .co_localsplusnames = & ntpath_toplevel_consts_34_localsplusnames._object.ob_base.ob_base, + .co_localsplusnames = & ntpath_toplevel_consts_36_localsplusnames._object.ob_base.ob_base, .co_localspluskinds = & importlib__bootstrap_toplevel_consts_14_consts_2_localspluskinds.ob_base.ob_base, .co_filename = & posixpath_toplevel_consts_11_filename._ascii.ob_base, .co_name = & const_str_abspath._ascii.ob_base, @@ -127498,7 +127536,7 @@ const_str_credits = { static struct { PyASCIIObject _ascii; - uint8_t _data[159]; + uint8_t _data[192]; } site_toplevel_consts_19_consts_3 = { ._ascii = { @@ -127506,7 +127544,7 @@ site_toplevel_consts_19_consts_3 = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyUnicode_Type, }, - .length = 158, + .length = 191, .hash = -1, .state = { .kind = 1, @@ -127515,7 +127553,7 @@ site_toplevel_consts_19_consts_3 = { .statically_allocated = 1, }, }, - ._data = "\x20\x20\x20\x20\x54\x68\x61\x6e\x6b\x73\x20\x74\x6f\x20\x43\x57\x49\x2c\x20\x43\x4e\x52\x49\x2c\x20\x42\x65\x4f\x70\x65\x6e\x2e\x63\x6f\x6d\x2c\x20\x5a\x6f\x70\x65\x20\x43\x6f\x72\x70\x6f\x72\x61\x74\x69\x6f\x6e\x20\x61\x6e\x64\x20\x61\x20\x63\x61\x73\x74\x20\x6f\x66\x20\x74\x68\x6f\x75\x73\x61\x6e\x64\x73\x0a\x20\x20\x20\x20\x66\x6f\x72\x20\x73\x75\x70\x70\x6f\x72\x74\x69\x6e\x67\x20\x50\x79\x74\x68\x6f\x6e\x20\x64\x65\x76\x65\x6c\x6f\x70\x6d\x65\x6e\x74\x2e\x20\x20\x53\x65\x65\x20\x77\x77\x77\x2e\x70\x79\x74\x68\x6f\x6e\x2e\x6f\x72\x67\x20\x66\x6f\x72\x20\x6d\x6f\x72\x65\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x2e", + ._data = "\x20\x20\x20\x20\x54\x68\x61\x6e\x6b\x73\x20\x74\x6f\x20\x43\x57\x49\x2c\x20\x43\x4e\x52\x49\x2c\x20\x42\x65\x4f\x70\x65\x6e\x2c\x20\x5a\x6f\x70\x65\x20\x43\x6f\x72\x70\x6f\x72\x61\x74\x69\x6f\x6e\x2c\x20\x74\x68\x65\x20\x50\x79\x74\x68\x6f\x6e\x20\x53\x6f\x66\x74\x77\x61\x72\x65\x0a\x20\x20\x20\x20\x46\x6f\x75\x6e\x64\x61\x74\x69\x6f\x6e\x2c\x20\x61\x6e\x64\x20\x61\x20\x63\x61\x73\x74\x20\x6f\x66\x20\x74\x68\x6f\x75\x73\x61\x6e\x64\x73\x20\x66\x6f\x72\x20\x73\x75\x70\x70\x6f\x72\x74\x69\x6e\x67\x20\x50\x79\x74\x68\x6f\x6e\x0a\x20\x20\x20\x20\x64\x65\x76\x65\x6c\x6f\x70\x6d\x65\x6e\x74\x2e\x20\x20\x53\x65\x65\x20\x77\x77\x77\x2e\x70\x79\x74\x68\x6f\x6e\x2e\x6f\x72\x67\x20\x66\x6f\x72\x20\x6d\x6f\x72\x65\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x2e", }; static struct { @@ -127701,7 +127739,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[209]; + char ob_sval[207]; } site_toplevel_consts_19_linetable = { .ob_base = { @@ -127709,10 +127747,10 @@ site_toplevel_consts_19_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 208, + .ob_size = 206, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xe4\x19\x26\xd7\x19\x2f\xd1\x19\x2f\xb0\x0b\xbc\x53\xbf\x5d\xb9\x5d\xd3\x19\x4b\x84\x48\xd4\x04\x16\xdc\x17\x24\xd7\x17\x2d\xd1\x17\x2d\xa8\x69\xf0\x00\x02\x3a\x54\x01\xf3\x00\x02\x18\x55\x01\x84\x48\xd4\x04\x14\xf0\x06\x00\x13\x15\x90\x62\x88\x34\x80\x45\xf4\x06\x00\x0c\x13\x94\x33\x98\x0d\xa0\x74\xd3\x0b\x2c\x80\x44\xd9\x0b\x0f\x94\x47\x9c\x42\xa0\x0a\xd4\x14\x2b\xdc\x0f\x11\x8f\x77\x89\x77\x8f\x7f\x89\x7f\x9c\x72\x9f\x7b\x99\x7b\xd3\x0f\x2b\x88\x04\xd9\x07\x0b\xd8\x08\x0d\x8f\x0c\x89\x0c\x90\x6d\xa0\x59\xd0\x15\x2f\xd4\x08\x30\xd8\x08\x0c\x8f\x0b\x89\x0b\x94\x52\x97\x57\x91\x57\x97\x5c\x91\x5c\xa0\x24\xac\x02\xaf\x09\xa9\x09\xd3\x15\x32\xb0\x44\xbc\x22\xbf\x29\xb9\x29\xd0\x14\x44\xd4\x08\x45\xdc\x17\x24\xd7\x17\x2d\xd1\x17\x2d\xd8\x08\x11\xd8\x08\x31\xd8\x08\x0d\x88\x74\xf3\x07\x03\x18\x15\x84\x48\xd5\x04\x14", + .ob_sval = "\x80\x00\xe4\x19\x26\xd7\x19\x2f\xd1\x19\x2f\xb0\x0b\xbc\x53\xbf\x5d\xb9\x5d\xd3\x19\x4b\x84\x48\xd4\x04\x16\xdc\x17\x24\xd7\x17\x2d\xd1\x17\x2d\xa8\x69\xf0\x00\x03\x3a\x3e\xf3\x00\x03\x18\x3f\x84\x48\xd4\x04\x14\xf0\x08\x00\x13\x15\x90\x62\x88\x34\x80\x45\xf4\x06\x00\x0c\x13\x94\x33\x98\x0d\xa0\x74\xd3\x0b\x2c\x80\x44\xd9\x0b\x0f\x94\x47\x9c\x42\xa0\x0a\xd4\x14\x2b\xdc\x0f\x11\x8f\x77\x89\x77\x8f\x7f\x89\x7f\x9c\x72\x9f\x7b\x99\x7b\xd3\x0f\x2b\x88\x04\xd9\x07\x0b\xd8\x08\x0d\x8f\x0c\x89\x0c\x90\x6d\xa0\x59\xd0\x15\x2f\xd4\x08\x30\xd8\x08\x0c\x8f\x0b\x89\x0b\x94\x52\x97\x57\x91\x57\x97\x5c\x91\x5c\xa0\x24\xac\x02\xaf\x09\xa9\x09\xd3\x15\x32\xb0\x44\xbc\x22\xbf\x29\xb9\x29\xd0\x14\x44\xd4\x08\x45\xdc\x17\x24\xd7\x17\x2d\xd1\x17\x2d\xd8\x08\x11\xd8\x08\x31\xd8\x08\x0d\x88\x74\xf3\x07\x03\x18\x15\x84\x48\xd5\x04\x14", }; static struct { @@ -127878,7 +127916,7 @@ site_toplevel_consts_20 = { .co_kwonlyargcount = 0, .co_framesize = 2 + FRAME_SPECIALS_SIZE, .co_stacksize = 2, - .co_firstlineno = 446, + .co_firstlineno = 447, .co_nlocalsplus = 0, .co_nlocals = 0, .co_ncellvars = 0, @@ -128208,7 +128246,7 @@ site_toplevel_consts_21_consts_1_consts_9 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 496, + .co_firstlineno = 497, .co_nlocalsplus = 2, .co_nlocals = 0, .co_ncellvars = 0, @@ -128586,7 +128624,7 @@ site_toplevel_consts_21_consts_1 = { .co_kwonlyargcount = 0, .co_framesize = 11 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 458, + .co_firstlineno = 459, .co_nlocalsplus = 6, .co_nlocals = 4, .co_ncellvars = 2, @@ -128751,7 +128789,7 @@ site_toplevel_consts_21 = { .co_kwonlyargcount = 0, .co_framesize = 3 + FRAME_SPECIALS_SIZE, .co_stacksize = 2, - .co_firstlineno = 449, + .co_firstlineno = 450, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -128938,7 +128976,7 @@ site_toplevel_consts_22_consts_4 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 521, + .co_firstlineno = 522, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -129405,7 +129443,7 @@ site_toplevel_consts_22 = { .co_kwonlyargcount = 0, .co_framesize = 22 + FRAME_SPECIALS_SIZE, .co_stacksize = 8, - .co_firstlineno = 508, + .co_firstlineno = 509, .co_nlocalsplus = 14, .co_nlocals = 14, .co_ncellvars = 0, @@ -129670,7 +129708,7 @@ site_toplevel_consts_23 = { .co_kwonlyargcount = 0, .co_framesize = 11 + FRAME_SPECIALS_SIZE, .co_stacksize = 8, - .co_firstlineno = 563, + .co_firstlineno = 564, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -129879,7 +129917,7 @@ site_toplevel_consts_24 = { .co_kwonlyargcount = 0, .co_framesize = 11 + FRAME_SPECIALS_SIZE, .co_stacksize = 8, - .co_firstlineno = 583, + .co_firstlineno = 584, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -130103,7 +130141,7 @@ site_toplevel_consts_25 = { .co_kwonlyargcount = 0, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 603, + .co_firstlineno = 604, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -130313,7 +130351,7 @@ site_toplevel_consts_26_consts_7 = { .co_kwonlyargcount = 0, .co_framesize = 4 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 660, + .co_firstlineno = 661, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -130670,7 +130708,7 @@ site_toplevel_consts_26 = { .co_kwonlyargcount = 0, .co_framesize = 16 + FRAME_SPECIALS_SIZE, .co_stacksize = 8, - .co_firstlineno = 637, + .co_firstlineno = 638, .co_nlocalsplus = 8, .co_nlocals = 8, .co_ncellvars = 0, @@ -130834,7 +130872,7 @@ site_toplevel_linetable = { .ob_size = 239, }, .ob_shash = -1, - .ob_sval = "\xf0\x03\x01\x01\x01\xf1\x02\x45\x01\x01\x04\xf3\x4e\x02\x00\x01\x0b\xdb\x00\x09\xdb\x00\x0f\xdb\x00\x14\xdb\x00\x09\xdb\x00\x0b\xf0\x06\x00\x0d\x10\x8f\x4a\x89\x4a\x98\x03\x9f\x0f\x99\x0f\xd0\x0b\x28\x80\x08\xf0\x06\x00\x14\x18\xd0\x00\x10\xf0\x0a\x00\x0d\x11\x80\x09\xd8\x0c\x10\x80\x09\xf2\x06\x02\x01\x28\xf2\x0a\x06\x01\x26\xf2\x12\x14\x01\x11\xf2\x2e\x10\x01\x17\xf2\x26\x0a\x01\x0d\xf2\x1a\x3f\x01\x17\xf3\x44\x02\x17\x01\x17\xf2\x34\x16\x01\x10\xf2\x40\x01\x14\x01\x23\xf2\x30\x0a\x01\x4b\x01\xf2\x1a\x0a\x01\x15\xf2\x1a\x0f\x01\x15\xf2\x22\x0d\x01\x17\xf3\x1e\x1f\x01\x18\xf3\x42\x01\x07\x01\x17\xf2\x12\x0d\x01\x37\xf2\x20\x12\x01\x15\xf2\x2a\x01\x01\x2c\xf2\x06\x39\x01\x30\xf2\x76\x01\x34\x01\x17\xf2\x6e\x01\x11\x01\x2f\xf2\x28\x11\x01\x2f\xf2\x28\x1b\x01\x1c\xf0\x3e\x00\x08\x0b\x87\x79\x81\x79\xd7\x07\x18\xd2\x07\x18\xd9\x04\x08\x84\x46\xf2\x04\x34\x01\x15\xf0\x6c\x01\x00\x04\x0c\x88\x7a\xd2\x03\x19\xd9\x04\x0b\x85\x49\xf0\x03\x00\x04\x1a", + .ob_sval = "\xf0\x03\x01\x01\x01\xf1\x02\x45\x01\x01\x04\xf3\x4e\x02\x00\x01\x0b\xdb\x00\x09\xdb\x00\x0f\xdb\x00\x14\xdb\x00\x09\xdb\x00\x0b\xf0\x06\x00\x0d\x10\x8f\x4a\x89\x4a\x98\x03\x9f\x0f\x99\x0f\xd0\x0b\x28\x80\x08\xf0\x06\x00\x14\x18\xd0\x00\x10\xf0\x0a\x00\x0d\x11\x80\x09\xd8\x0c\x10\x80\x09\xf2\x06\x02\x01\x28\xf2\x0a\x06\x01\x26\xf2\x12\x14\x01\x11\xf2\x2e\x10\x01\x17\xf2\x26\x0a\x01\x0d\xf2\x1a\x3f\x01\x17\xf3\x44\x02\x17\x01\x17\xf2\x34\x16\x01\x10\xf2\x40\x01\x14\x01\x23\xf2\x30\x0a\x01\x4b\x01\xf2\x1a\x0a\x01\x15\xf2\x1a\x0f\x01\x15\xf2\x22\x0d\x01\x17\xf3\x1e\x1f\x01\x18\xf3\x42\x01\x07\x01\x17\xf2\x12\x0d\x01\x37\xf2\x20\x13\x01\x15\xf2\x2c\x01\x01\x2c\xf2\x06\x39\x01\x30\xf2\x76\x01\x34\x01\x17\xf2\x6e\x01\x11\x01\x2f\xf2\x28\x11\x01\x2f\xf2\x28\x1b\x01\x1c\xf0\x3e\x00\x08\x0b\x87\x79\x81\x79\xd7\x07\x18\xd2\x07\x18\xd9\x04\x08\x84\x46\xf2\x04\x34\x01\x15\xf0\x6c\x01\x00\x04\x0c\x88\x7a\xd2\x03\x19\xd9\x04\x0b\x85\x49\xf0\x03\x00\x04\x1a", }; static struct _PyCode_DEF(350) @@ -144791,7 +144829,7 @@ _Py_Deepfreeze_Fini(void) { _PyStaticCode_Fini((PyCodeObject *)&ntpath_toplevel_consts_30); _PyStaticCode_Fini((PyCodeObject *)&ntpath_toplevel_consts_31); _PyStaticCode_Fini((PyCodeObject *)&ntpath_toplevel_consts_33); - _PyStaticCode_Fini((PyCodeObject *)&ntpath_toplevel_consts_34); + _PyStaticCode_Fini((PyCodeObject *)&ntpath_toplevel_consts_35); _PyStaticCode_Fini((PyCodeObject *)&ntpath_toplevel_consts_36); _PyStaticCode_Fini((PyCodeObject *)&ntpath_toplevel_consts_38); _PyStaticCode_Fini((PyCodeObject *)&ntpath_toplevel_consts_39); @@ -146692,7 +146730,7 @@ _Py_Deepfreeze_Init(void) { if (_PyStaticCode_Init((PyCodeObject *)&ntpath_toplevel_consts_33) < 0) { return -1; } - if (_PyStaticCode_Init((PyCodeObject *)&ntpath_toplevel_consts_34) < 0) { + if (_PyStaticCode_Init((PyCodeObject *)&ntpath_toplevel_consts_35) < 0) { return -1; } if (_PyStaticCode_Init((PyCodeObject *)&ntpath_toplevel_consts_36) < 0) { diff --git a/contrib/tools/python3/Python/frozen_modules/_collections_abc.h b/contrib/tools/python3/Python/frozen_modules/_collections_abc.h index c30a6104af..5e0263574f 100644 --- a/contrib/tools/python3/Python/frozen_modules/_collections_abc.h +++ b/contrib/tools/python3/Python/frozen_modules/_collections_abc.h @@ -2256,7 +2256,7 @@ const unsigned char _Py_M___collections_abc[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, 0,0,0,0,0,0,0,68,0,93,10,0,0,92,2,0, 0,125,3,125,4,124,4,124,0,124,3,60,0,0,0,140, - 12,4,0,121,2,41,3,97,75,1,0,0,32,68,46,117, + 12,4,0,121,2,41,3,97,82,1,0,0,32,68,46,117, 112,100,97,116,101,40,91,69,44,32,93,42,42,70,41,32, 45,62,32,78,111,110,101,46,32,32,85,112,100,97,116,101, 32,68,32,102,114,111,109,32,109,97,112,112,105,110,103,47, @@ -2265,601 +2265,601 @@ const unsigned char _Py_M___collections_abc[] = { 32,69,32,112,114,101,115,101,110,116,32,97,110,100,32,104, 97,115,32,97,32,46,107,101,121,115,40,41,32,109,101,116, 104,111,100,44,32,100,111,101,115,58,32,32,32,32,32,102, - 111,114,32,107,32,105,110,32,69,58,32,68,91,107,93,32, - 61,32,69,91,107,93,10,32,32,32,32,32,32,32,32,32, - 32,32,32,73,102,32,69,32,112,114,101,115,101,110,116,32, - 97,110,100,32,108,97,99,107,115,32,46,107,101,121,115,40, - 41,32,109,101,116,104,111,100,44,32,100,111,101,115,58,32, - 32,32,32,32,102,111,114,32,40,107,44,32,118,41,32,105, - 110,32,69,58,32,68,91,107,93,32,61,32,118,10,32,32, - 32,32,32,32,32,32,32,32,32,32,73,110,32,101,105,116, - 104,101,114,32,99,97,115,101,44,32,116,104,105,115,32,105, - 115,32,102,111,108,108,111,119,101,100,32,98,121,58,32,102, - 111,114,32,107,44,32,118,32,105,110,32,70,46,105,116,101, - 109,115,40,41,58,32,68,91,107,93,32,61,32,118,10,32, - 32,32,32,32,32,32,32,114,75,1,0,0,78,41,5,114, - 177,0,0,0,114,27,0,0,0,218,7,104,97,115,97,116, - 116,114,114,75,1,0,0,114,77,1,0,0,41,5,114,61, - 0,0,0,114,235,0,0,0,114,227,0,0,0,114,66,1, - 0,0,114,87,0,0,0,115,5,0,0,0,32,32,32,32, - 32,114,9,0,0,0,218,6,117,112,100,97,116,101,122,21, - 77,117,116,97,98,108,101,77,97,112,112,105,110,103,46,117, - 112,100,97,116,101,206,3,0,0,115,130,0,0,0,128,0, - 244,12,0,12,22,144,101,156,87,212,11,37,219,23,28,144, - 3,216,28,33,160,35,153,74,144,4,144,83,146,9,241,3, - 0,24,29,228,13,20,144,85,152,70,212,13,35,216,23,28, - 151,122,145,122,150,124,144,3,216,28,33,160,35,153,74,144, - 4,144,83,146,9,241,3,0,24,36,243,6,0,31,36,145, - 10,144,3,144,85,216,28,33,144,4,144,83,146,9,240,3, - 0,31,36,224,26,30,159,42,153,42,158,44,137,74,136,67, - 144,21,216,24,29,136,68,144,19,138,73,241,3,0,27,39, - 114,8,0,0,0,78,99,3,0,0,0,0,0,0,0,0, - 0,0,0,4,0,0,0,3,0,0,0,243,56,0,0,0, - 151,0,9,0,124,0,124,1,25,0,0,0,83,0,35,0, - 116,0,0,0,0,0,0,0,0,0,36,0,114,9,1,0, - 124,2,124,0,124,1,60,0,0,0,89,0,124,2,83,0, - 119,0,120,3,89,0,119,1,41,1,122,64,68,46,115,101, - 116,100,101,102,97,117,108,116,40,107,91,44,100,93,41,32, - 45,62,32,68,46,103,101,116,40,107,44,100,41,44,32,97, - 108,115,111,32,115,101,116,32,68,91,107,93,61,100,32,105, - 102,32,107,32,110,111,116,32,105,110,32,68,114,64,1,0, - 0,114,69,1,0,0,115,3,0,0,0,32,32,32,114,9, - 0,0,0,218,10,115,101,116,100,101,102,97,117,108,116,122, - 25,77,117,116,97,98,108,101,77,97,112,112,105,110,103,46, - 115,101,116,100,101,102,97,117,108,116,224,3,0,0,115,46, - 0,0,0,128,0,240,4,3,9,32,216,19,23,152,3,145, - 57,208,12,28,248,220,15,23,242,0,1,9,32,216,24,31, - 136,68,144,19,138,73,216,15,22,136,14,240,5,1,9,32, - 250,115,12,0,0,0,130,4,7,0,135,14,25,3,152,1, - 25,3,41,1,114,7,0,0,0,114,6,0,0,0,41,15, + 111,114,32,107,32,105,110,32,69,46,107,101,121,115,40,41, + 58,32,68,91,107,93,32,61,32,69,91,107,93,10,32,32, + 32,32,32,32,32,32,32,32,32,32,73,102,32,69,32,112, + 114,101,115,101,110,116,32,97,110,100,32,108,97,99,107,115, + 32,46,107,101,121,115,40,41,32,109,101,116,104,111,100,44, + 32,100,111,101,115,58,32,32,32,32,32,102,111,114,32,40, + 107,44,32,118,41,32,105,110,32,69,58,32,68,91,107,93, + 32,61,32,118,10,32,32,32,32,32,32,32,32,32,32,32, + 32,73,110,32,101,105,116,104,101,114,32,99,97,115,101,44, + 32,116,104,105,115,32,105,115,32,102,111,108,108,111,119,101, + 100,32,98,121,58,32,102,111,114,32,107,44,32,118,32,105, + 110,32,70,46,105,116,101,109,115,40,41,58,32,68,91,107, + 93,32,61,32,118,10,32,32,32,32,32,32,32,32,114,75, + 1,0,0,78,41,5,114,177,0,0,0,114,27,0,0,0, + 218,7,104,97,115,97,116,116,114,114,75,1,0,0,114,77, + 1,0,0,41,5,114,61,0,0,0,114,235,0,0,0,114, + 227,0,0,0,114,66,1,0,0,114,87,0,0,0,115,5, + 0,0,0,32,32,32,32,32,114,9,0,0,0,218,6,117, + 112,100,97,116,101,122,21,77,117,116,97,98,108,101,77,97, + 112,112,105,110,103,46,117,112,100,97,116,101,206,3,0,0, + 115,130,0,0,0,128,0,244,12,0,12,22,144,101,156,87, + 212,11,37,219,23,28,144,3,216,28,33,160,35,153,74,144, + 4,144,83,146,9,241,3,0,24,29,228,13,20,144,85,152, + 70,212,13,35,216,23,28,151,122,145,122,150,124,144,3,216, + 28,33,160,35,153,74,144,4,144,83,146,9,241,3,0,24, + 36,243,6,0,31,36,145,10,144,3,144,85,216,28,33,144, + 4,144,83,146,9,240,3,0,31,36,224,26,30,159,42,153, + 42,158,44,137,74,136,67,144,21,216,24,29,136,68,144,19, + 138,73,241,3,0,27,39,114,8,0,0,0,78,99,3,0, + 0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,0, + 0,0,243,56,0,0,0,151,0,9,0,124,0,124,1,25, + 0,0,0,83,0,35,0,116,0,0,0,0,0,0,0,0, + 0,36,0,114,9,1,0,124,2,124,0,124,1,60,0,0, + 0,89,0,124,2,83,0,119,0,120,3,89,0,119,1,41, + 1,122,64,68,46,115,101,116,100,101,102,97,117,108,116,40, + 107,91,44,100,93,41,32,45,62,32,68,46,103,101,116,40, + 107,44,100,41,44,32,97,108,115,111,32,115,101,116,32,68, + 91,107,93,61,100,32,105,102,32,107,32,110,111,116,32,105, + 110,32,68,114,64,1,0,0,114,69,1,0,0,115,3,0, + 0,0,32,32,32,114,9,0,0,0,218,10,115,101,116,100, + 101,102,97,117,108,116,122,25,77,117,116,97,98,108,101,77, + 97,112,112,105,110,103,46,115,101,116,100,101,102,97,117,108, + 116,224,3,0,0,115,46,0,0,0,128,0,240,4,3,9, + 32,216,19,23,152,3,145,57,208,12,28,248,220,15,23,242, + 0,1,9,32,216,24,31,136,68,144,19,138,73,216,15,22, + 136,14,240,5,1,9,32,250,115,12,0,0,0,130,4,7, + 0,135,14,25,3,152,1,25,3,41,1,114,7,0,0,0, + 114,6,0,0,0,41,15,114,69,0,0,0,114,70,0,0, + 0,114,71,0,0,0,114,204,0,0,0,114,72,0,0,0, + 114,4,0,0,0,114,111,1,0,0,114,113,1,0,0,218, + 6,111,98,106,101,99,116,114,115,1,0,0,114,49,1,0, + 0,114,117,1,0,0,114,51,1,0,0,114,121,1,0,0, + 114,123,1,0,0,114,7,0,0,0,114,8,0,0,0,114, + 9,0,0,0,114,28,0,0,0,114,28,0,0,0,151,3, + 0,0,115,89,0,0,0,132,0,241,2,6,5,8,240,16, + 0,17,19,128,73,224,5,19,241,2,1,5,23,243,3,0, + 6,20,240,2,1,5,23,240,6,0,6,20,241,2,1,5, + 23,243,3,0,6,20,240,2,1,5,23,241,6,0,16,22, + 139,120,128,72,224,31,39,243,0,12,5,25,242,28,10,5, + 26,242,24,6,5,17,243,16,16,5,30,244,36,6,5,23, + 114,8,0,0,0,114,28,0,0,0,99,0,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,243, + 72,0,0,0,151,0,101,0,90,1,100,0,90,2,100,1, + 90,3,100,2,90,4,100,3,90,5,101,6,100,4,132,0, + 171,0,0,0,0,0,0,0,90,7,100,5,132,0,90,8, + 100,6,132,0,90,9,100,7,132,0,90,10,100,11,100,9, + 132,1,90,11,100,10,132,0,90,12,121,8,41,12,114,33, + 0,0,0,122,138,65,108,108,32,116,104,101,32,111,112,101, + 114,97,116,105,111,110,115,32,111,110,32,97,32,114,101,97, + 100,45,111,110,108,121,32,115,101,113,117,101,110,99,101,46, + 10,10,32,32,32,32,67,111,110,99,114,101,116,101,32,115, + 117,98,99,108,97,115,115,101,115,32,109,117,115,116,32,111, + 118,101,114,114,105,100,101,32,95,95,110,101,119,95,95,32, + 111,114,32,95,95,105,110,105,116,95,95,44,10,32,32,32, + 32,95,95,103,101,116,105,116,101,109,95,95,44,32,97,110, + 100,32,95,95,108,101,110,95,95,46,10,32,32,32,32,114, + 7,0,0,0,233,32,0,0,0,99,2,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,3,0,0,0,243,14, + 0,0,0,151,0,116,0,0,0,0,0,0,0,0,0,130, + 1,114,6,0,0,0,169,1,218,10,73,110,100,101,120,69, + 114,114,111,114,169,2,114,61,0,0,0,218,5,105,110,100, + 101,120,115,2,0,0,0,32,32,114,9,0,0,0,114,201, + 0,0,0,122,20,83,101,113,117,101,110,99,101,46,95,95, + 103,101,116,105,116,101,109,95,95,250,3,0,0,243,8,0, + 0,0,128,0,228,14,24,208,8,24,114,8,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, + 35,0,0,0,243,78,0,0,0,75,0,1,0,151,0,100, + 1,125,1,9,0,9,0,124,0,124,1,25,0,0,0,125, + 2,124,2,150,2,151,1,1,0,124,1,100,2,122,13,0, + 0,125,1,140,15,35,0,116,0,0,0,0,0,0,0,0, + 0,36,0,114,3,1,0,89,0,121,0,119,0,120,3,89, + 0,119,1,173,3,119,1,41,3,78,114,2,0,0,0,114, + 37,0,0,0,114,128,1,0,0,41,3,114,61,0,0,0, + 218,1,105,114,103,1,0,0,115,3,0,0,0,32,32,32, + 114,9,0,0,0,114,132,0,0,0,122,17,83,101,113,117, + 101,110,99,101,46,95,95,105,116,101,114,95,95,254,3,0, + 0,115,66,0,0,0,232,0,248,128,0,216,12,13,136,1, + 240,2,6,9,19,216,18,22,216,20,24,152,17,145,71,144, + 1,216,22,23,146,7,216,16,17,144,81,145,6,144,1,240, + 7,0,19,23,248,244,8,0,16,26,242,0,1,9,19,217, + 12,18,240,3,1,9,19,252,115,24,0,0,0,130,3,37, + 1,134,16,22,0,150,9,34,3,159,2,37,1,161,1,34, + 3,162,3,37,1,99,2,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,3,0,0,0,243,40,0,0,0,151, + 0,124,0,68,0,93,13,0,0,125,2,124,2,124,1,117, + 0,115,6,124,2,124,1,107,40,0,0,115,1,140,13,1, + 0,121,1,4,0,121,2,114,73,1,0,0,114,7,0,0, + 0,41,3,114,61,0,0,0,114,87,0,0,0,114,103,1, + 0,0,115,3,0,0,0,32,32,32,114,9,0,0,0,114, + 158,0,0,0,122,21,83,101,113,117,101,110,99,101,46,95, + 95,99,111,110,116,97,105,110,115,95,95,8,4,0,0,115, + 33,0,0,0,128,0,219,17,21,136,65,216,15,16,144,69, + 137,122,152,81,160,37,155,90,217,23,27,240,5,0,18,22, + 240,6,0,16,21,114,8,0,0,0,99,1,0,0,0,0, + 0,0,0,0,0,0,0,7,0,0,0,35,0,0,0,243, + 94,0,0,0,75,0,1,0,151,0,116,1,0,0,0,0, + 0,0,0,0,116,3,0,0,0,0,0,0,0,0,116,5, + 0,0,0,0,0,0,0,0,124,0,171,1,0,0,0,0, + 0,0,171,1,0,0,0,0,0,0,171,1,0,0,0,0, + 0,0,68,0,93,9,0,0,125,1,124,0,124,1,25,0, + 0,0,150,1,151,1,1,0,140,11,4,0,121,0,173,3, + 119,1,114,6,0,0,0,41,3,218,8,114,101,118,101,114, + 115,101,100,218,5,114,97,110,103,101,114,179,0,0,0,41, + 2,114,61,0,0,0,114,134,1,0,0,115,2,0,0,0, + 32,32,114,9,0,0,0,114,142,0,0,0,122,21,83,101, + 113,117,101,110,99,101,46,95,95,114,101,118,101,114,115,101, + 100,95,95,14,4,0,0,115,39,0,0,0,232,0,248,128, + 0,220,17,25,156,37,164,3,160,68,163,9,211,26,42,214, + 17,43,136,65,216,18,22,144,113,145,39,139,77,241,3,0, + 18,44,249,115,4,0,0,0,130,43,45,1,78,99,4,0, + 0,0,0,0,0,0,0,0,0,0,5,0,0,0,3,0, + 0,0,243,238,0,0,0,151,0,124,2,129,29,124,2,100, + 1,107,2,0,0,114,24,116,1,0,0,0,0,0,0,0, + 0,116,3,0,0,0,0,0,0,0,0,124,0,171,1,0, + 0,0,0,0,0,124,2,122,0,0,0,100,1,171,2,0, + 0,0,0,0,0,125,2,124,3,129,19,124,3,100,1,107, + 2,0,0,114,14,124,3,116,3,0,0,0,0,0,0,0, + 0,124,0,171,1,0,0,0,0,0,0,122,13,0,0,125, + 3,124,2,125,4,124,3,129,5,124,4,124,3,107,2,0, + 0,114,31,9,0,124,0,124,4,25,0,0,0,125,5,124, + 5,124,1,117,0,115,5,124,5,124,1,107,40,0,0,114, + 2,124,4,83,0,124,4,100,2,122,13,0,0,125,4,124, + 3,128,1,140,25,124,4,124,3,107,2,0,0,114,1,140, + 31,116,6,0,0,0,0,0,0,0,0,130,1,35,0,116, + 4,0,0,0,0,0,0,0,0,36,0,114,8,1,0,89, + 0,116,6,0,0,0,0,0,0,0,0,130,1,119,0,120, + 3,89,0,119,1,41,3,122,230,83,46,105,110,100,101,120, + 40,118,97,108,117,101,44,32,91,115,116,97,114,116,44,32, + 91,115,116,111,112,93,93,41,32,45,62,32,105,110,116,101, + 103,101,114,32,45,45,32,114,101,116,117,114,110,32,102,105, + 114,115,116,32,105,110,100,101,120,32,111,102,32,118,97,108, + 117,101,46,10,32,32,32,32,32,32,32,32,32,32,32,82, + 97,105,115,101,115,32,86,97,108,117,101,69,114,114,111,114, + 32,105,102,32,116,104,101,32,118,97,108,117,101,32,105,115, + 32,110,111,116,32,112,114,101,115,101,110,116,46,10,10,32, + 32,32,32,32,32,32,32,32,32,32,83,117,112,112,111,114, + 116,105,110,103,32,115,116,97,114,116,32,97,110,100,32,115, + 116,111,112,32,97,114,103,117,109,101,110,116,115,32,105,115, + 32,111,112,116,105,111,110,97,108,44,32,98,117,116,10,32, + 32,32,32,32,32,32,32,32,32,32,114,101,99,111,109,109, + 101,110,100,101,100,46,10,32,32,32,32,32,32,32,32,114, + 2,0,0,0,114,37,0,0,0,41,4,218,3,109,97,120, + 114,179,0,0,0,114,129,1,0,0,218,10,86,97,108,117, + 101,69,114,114,111,114,41,6,114,61,0,0,0,114,87,0, + 0,0,218,5,115,116,97,114,116,218,4,115,116,111,112,114, + 134,1,0,0,114,103,1,0,0,115,6,0,0,0,32,32, + 32,32,32,32,114,9,0,0,0,114,131,1,0,0,122,14, + 83,101,113,117,101,110,99,101,46,105,110,100,101,120,18,4, + 0,0,115,171,0,0,0,128,0,240,14,0,12,17,208,11, + 28,160,21,168,17,162,25,220,20,23,156,3,152,68,155,9, + 160,69,209,24,41,168,49,211,20,45,136,69,216,11,15,208, + 11,27,160,4,160,113,162,8,216,12,16,148,67,152,4,147, + 73,209,12,29,136,68,224,12,17,136,1,216,14,18,136,108, + 152,97,160,36,154,104,240,2,3,13,22,216,20,24,152,17, + 145,71,144,1,240,6,0,16,17,144,69,137,122,152,81,160, + 37,154,90,216,23,24,144,8,216,12,13,144,17,137,70,136, + 65,240,15,0,15,19,137,108,152,97,160,36,155,104,244,16, + 0,15,25,208,8,24,248,244,11,0,20,30,242,0,1,13, + 22,216,16,21,244,8,0,15,25,208,8,24,240,11,1,13, + 22,250,115,17,0,0,0,191,5,65,35,0,193,35,9,65, + 52,3,193,51,1,65,52,3,99,2,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,3,0,0,0,243,44,0, + 0,0,135,1,151,0,116,1,0,0,0,0,0,0,0,0, + 136,1,102,1,100,1,132,8,124,0,68,0,171,0,0,0, + 0,0,0,0,171,1,0,0,0,0,0,0,83,0,41,2, + 122,66,83,46,99,111,117,110,116,40,118,97,108,117,101,41, + 32,45,62,32,105,110,116,101,103,101,114,32,45,45,32,114, + 101,116,117,114,110,32,110,117,109,98,101,114,32,111,102,32, + 111,99,99,117,114,114,101,110,99,101,115,32,111,102,32,118, + 97,108,117,101,99,1,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,51,0,0,0,243,54,0,0,0,149,1, + 75,0,1,0,151,0,124,0,93,16,0,0,125,1,124,1, + 137,2,117,0,115,6,124,1,137,2,107,40,0,0,115,1, + 140,13,100,0,150,1,151,1,1,0,140,18,4,0,121,1, + 173,3,119,1,41,2,114,37,0,0,0,78,114,7,0,0, + 0,41,3,114,212,0,0,0,114,103,1,0,0,114,87,0, + 0,0,115,3,0,0,0,32,32,128,114,9,0,0,0,114, + 215,0,0,0,122,33,83,101,113,117,101,110,99,101,46,99, + 111,117,110,116,46,60,108,111,99,97,108,115,62,46,60,103, + 101,110,101,120,112,114,62,43,4,0,0,115,30,0,0,0, + 248,232,0,248,128,0,208,18,63,153,100,152,17,160,97,168, + 53,161,106,176,65,184,21,179,74,148,49,153,100,249,115,8, + 0,0,0,131,14,25,1,146,7,25,1,41,1,218,3,115, + 117,109,114,86,0,0,0,115,2,0,0,0,32,96,114,9, + 0,0,0,218,5,99,111,117,110,116,122,14,83,101,113,117, + 101,110,99,101,46,99,111,117,110,116,41,4,0,0,115,20, + 0,0,0,248,128,0,228,15,18,211,18,63,153,100,211,18, + 63,211,15,63,208,8,63,114,8,0,0,0,41,2,114,2, + 0,0,0,78,41,13,114,69,0,0,0,114,70,0,0,0, + 114,71,0,0,0,114,204,0,0,0,114,72,0,0,0,114, + 82,1,0,0,114,4,0,0,0,114,201,0,0,0,114,132, + 0,0,0,114,158,0,0,0,114,142,0,0,0,114,131,1, + 0,0,114,147,1,0,0,114,7,0,0,0,114,8,0,0, + 0,114,9,0,0,0,114,33,0,0,0,114,33,0,0,0, + 238,3,0,0,115,65,0,0,0,132,0,241,2,4,5,8, + 240,12,0,17,19,128,73,240,6,0,23,29,128,79,224,5, + 19,241,2,1,5,25,243,3,0,6,20,240,2,1,5,25, + 242,6,8,5,19,242,20,4,5,21,242,12,2,5,26,243, + 8,21,5,25,243,46,2,5,64,1,114,8,0,0,0,114, + 33,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,0,0,0,0,243,40,0,0,0,135,0, + 151,0,101,0,90,1,100,0,90,2,136,0,102,1,100,1, + 132,8,90,3,136,0,102,1,100,2,132,8,90,4,136,0, + 120,1,90,5,83,0,41,3,218,24,95,68,101,112,114,101, + 99,97,116,101,66,121,116,101,83,116,114,105,110,103,77,101, + 116,97,99,4,0,0,0,0,0,0,0,0,0,0,0,6, + 0,0,0,11,0,0,0,243,98,0,0,0,149,1,151,0, + 124,1,100,1,107,55,0,0,114,23,100,2,100,0,108,0, + 125,5,124,5,106,3,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,100,3,100,4,172,5,171,2, + 0,0,0,0,0,0,1,0,116,5,0,0,0,0,0,0, + 0,0,137,6,124,0,141,12,0,0,124,0,124,1,124,2, + 124,3,102,4,105,0,124,4,164,1,142,1,83,0,41,6, + 78,114,35,0,0,0,114,2,0,0,0,250,26,99,111,108, + 108,101,99,116,105,111,110,115,46,97,98,99,46,66,121,116, + 101,83,116,114,105,110,103,169,2,233,3,0,0,0,233,14, + 0,0,0,169,1,114,44,1,0,0,41,4,218,8,119,97, + 114,110,105,110,103,115,218,11,95,100,101,112,114,101,99,97, + 116,101,100,114,183,0,0,0,114,184,0,0,0,41,7,114, + 66,0,0,0,114,213,0,0,0,218,5,98,97,115,101,115, + 218,9,110,97,109,101,115,112,97,99,101,218,6,107,119,97, + 114,103,115,114,156,1,0,0,114,189,0,0,0,115,7,0, + 0,0,32,32,32,32,32,32,128,114,9,0,0,0,114,184, + 0,0,0,122,32,95,68,101,112,114,101,99,97,116,101,66, + 121,116,101,83,116,114,105,110,103,77,101,116,97,46,95,95, + 110,101,119,95,95,51,4,0,0,115,67,0,0,0,248,128, + 0,216,11,15,144,60,210,11,31,219,12,27,224,12,20,215, + 12,32,209,12,32,216,16,44,216,23,30,240,5,0,13,33, + 244,0,3,13,14,244,8,0,16,21,137,119,137,127,152,115, + 160,68,168,37,176,25,209,15,69,184,102,209,15,69,208,8, + 69,114,8,0,0,0,99,2,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,3,0,0,0,243,80,0,0,0, + 149,1,151,0,100,1,100,0,108,0,125,2,124,2,106,3, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,100,2,100,3,172,4,171,2,0,0,0,0,0,0, + 1,0,116,4,0,0,0,0,0,0,0,0,137,3,124,0, + 141,13,0,0,124,1,171,1,0,0,0,0,0,0,83,0, + 41,5,78,114,2,0,0,0,114,151,1,0,0,114,152,1, + 0,0,114,155,1,0,0,41,4,114,156,1,0,0,114,157, + 1,0,0,114,183,0,0,0,218,17,95,95,105,110,115,116, + 97,110,99,101,99,104,101,99,107,95,95,41,4,114,66,0, + 0,0,218,8,105,110,115,116,97,110,99,101,114,156,1,0, + 0,114,189,0,0,0,115,4,0,0,0,32,32,32,128,114, + 9,0,0,0,114,162,1,0,0,122,42,95,68,101,112,114, + 101,99,97,116,101,66,121,116,101,83,116,114,105,110,103,77, + 101,116,97,46,95,95,105,110,115,116,97,110,99,101,99,104, + 101,99,107,95,95,61,4,0,0,115,49,0,0,0,248,128, + 0,219,8,23,224,8,16,215,8,28,209,8,28,216,12,40, + 216,19,26,240,5,0,9,29,244,0,3,9,10,244,8,0, + 16,21,137,119,209,15,40,168,24,211,15,50,208,8,50,114, + 8,0,0,0,41,6,114,69,0,0,0,114,70,0,0,0, + 114,71,0,0,0,114,184,0,0,0,114,162,1,0,0,114, + 205,0,0,0,114,206,0,0,0,115,1,0,0,0,64,114, + 9,0,0,0,114,149,1,0,0,114,149,1,0,0,50,4, + 0,0,115,19,0,0,0,248,132,0,244,2,8,5,70,1, + 247,20,7,5,51,240,0,7,5,51,114,8,0,0,0,114, + 149,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,1,0,0,0,0,0,0,0,243,20,0,0,0,151,0, + 101,0,90,1,100,0,90,2,100,1,90,3,100,2,90,4, + 121,3,41,4,114,35,0,0,0,122,77,84,104,105,115,32, + 117,110,105,102,105,101,115,32,98,121,116,101,115,32,97,110, + 100,32,98,121,116,101,97,114,114,97,121,46,10,10,32,32, + 32,32,88,88,88,32,83,104,111,117,108,100,32,97,100,100, + 32,97,108,108,32,116,104,101,105,114,32,109,101,116,104,111, + 100,115,46,10,32,32,32,32,114,7,0,0,0,78,41,5, 114,69,0,0,0,114,70,0,0,0,114,71,0,0,0,114, - 204,0,0,0,114,72,0,0,0,114,4,0,0,0,114,111, - 1,0,0,114,113,1,0,0,218,6,111,98,106,101,99,116, - 114,115,1,0,0,114,49,1,0,0,114,117,1,0,0,114, - 51,1,0,0,114,121,1,0,0,114,123,1,0,0,114,7, - 0,0,0,114,8,0,0,0,114,9,0,0,0,114,28,0, - 0,0,114,28,0,0,0,151,3,0,0,115,89,0,0,0, - 132,0,241,2,6,5,8,240,16,0,17,19,128,73,224,5, - 19,241,2,1,5,23,243,3,0,6,20,240,2,1,5,23, - 240,6,0,6,20,241,2,1,5,23,243,3,0,6,20,240, - 2,1,5,23,241,6,0,16,22,139,120,128,72,224,31,39, - 243,0,12,5,25,242,28,10,5,26,242,24,6,5,17,243, - 16,16,5,30,244,36,6,5,23,114,8,0,0,0,114,28, + 204,0,0,0,114,72,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,9,0,0,0,114,35,0,0,0,114,35,0, + 0,0,70,4,0,0,115,14,0,0,0,132,0,241,2,3, + 5,8,240,10,0,17,19,129,73,114,8,0,0,0,114,35, 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,0,0,0,0,243,72,0,0,0,151,0,101, - 0,90,1,100,0,90,2,100,1,90,3,100,2,90,4,100, - 3,90,5,101,6,100,4,132,0,171,0,0,0,0,0,0, - 0,90,7,100,5,132,0,90,8,100,6,132,0,90,9,100, - 7,132,0,90,10,100,11,100,9,132,1,90,11,100,10,132, - 0,90,12,121,8,41,12,114,33,0,0,0,122,138,65,108, - 108,32,116,104,101,32,111,112,101,114,97,116,105,111,110,115, - 32,111,110,32,97,32,114,101,97,100,45,111,110,108,121,32, - 115,101,113,117,101,110,99,101,46,10,10,32,32,32,32,67, - 111,110,99,114,101,116,101,32,115,117,98,99,108,97,115,115, - 101,115,32,109,117,115,116,32,111,118,101,114,114,105,100,101, - 32,95,95,110,101,119,95,95,32,111,114,32,95,95,105,110, - 105,116,95,95,44,10,32,32,32,32,95,95,103,101,116,105, - 116,101,109,95,95,44,32,97,110,100,32,95,95,108,101,110, - 95,95,46,10,32,32,32,32,114,7,0,0,0,233,32,0, - 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,3,0,0,0,243,14,0,0,0,151,0,116,0, - 0,0,0,0,0,0,0,0,130,1,114,6,0,0,0,169, - 1,218,10,73,110,100,101,120,69,114,114,111,114,169,2,114, - 61,0,0,0,218,5,105,110,100,101,120,115,2,0,0,0, - 32,32,114,9,0,0,0,114,201,0,0,0,122,20,83,101, - 113,117,101,110,99,101,46,95,95,103,101,116,105,116,101,109, - 95,95,250,3,0,0,243,8,0,0,0,128,0,228,14,24, - 208,8,24,114,8,0,0,0,99,1,0,0,0,0,0,0, - 0,0,0,0,0,4,0,0,0,35,0,0,0,243,78,0, - 0,0,75,0,1,0,151,0,100,1,125,1,9,0,9,0, - 124,0,124,1,25,0,0,0,125,2,124,2,150,2,151,1, - 1,0,124,1,100,2,122,13,0,0,125,1,140,15,35,0, - 116,0,0,0,0,0,0,0,0,0,36,0,114,3,1,0, - 89,0,121,0,119,0,120,3,89,0,119,1,173,3,119,1, - 41,3,78,114,2,0,0,0,114,37,0,0,0,114,128,1, - 0,0,41,3,114,61,0,0,0,218,1,105,114,103,1,0, - 0,115,3,0,0,0,32,32,32,114,9,0,0,0,114,132, - 0,0,0,122,17,83,101,113,117,101,110,99,101,46,95,95, - 105,116,101,114,95,95,254,3,0,0,115,66,0,0,0,232, - 0,248,128,0,216,12,13,136,1,240,2,6,9,19,216,18, - 22,216,20,24,152,17,145,71,144,1,216,22,23,146,7,216, - 16,17,144,81,145,6,144,1,240,7,0,19,23,248,244,8, - 0,16,26,242,0,1,9,19,217,12,18,240,3,1,9,19, - 252,115,24,0,0,0,130,3,37,1,134,16,22,0,150,9, - 34,3,159,2,37,1,161,1,34,3,162,3,37,1,99,2, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3, - 0,0,0,243,40,0,0,0,151,0,124,0,68,0,93,13, - 0,0,125,2,124,2,124,1,117,0,115,6,124,2,124,1, - 107,40,0,0,115,1,140,13,1,0,121,1,4,0,121,2, - 114,73,1,0,0,114,7,0,0,0,41,3,114,61,0,0, - 0,114,87,0,0,0,114,103,1,0,0,115,3,0,0,0, - 32,32,32,114,9,0,0,0,114,158,0,0,0,122,21,83, - 101,113,117,101,110,99,101,46,95,95,99,111,110,116,97,105, - 110,115,95,95,8,4,0,0,115,33,0,0,0,128,0,219, - 17,21,136,65,216,15,16,144,69,137,122,152,81,160,37,155, - 90,217,23,27,240,5,0,18,22,240,6,0,16,21,114,8, - 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 7,0,0,0,35,0,0,0,243,94,0,0,0,75,0,1, - 0,151,0,116,1,0,0,0,0,0,0,0,0,116,3,0, - 0,0,0,0,0,0,0,116,5,0,0,0,0,0,0,0, - 0,124,0,171,1,0,0,0,0,0,0,171,1,0,0,0, - 0,0,0,171,1,0,0,0,0,0,0,68,0,93,9,0, - 0,125,1,124,0,124,1,25,0,0,0,150,1,151,1,1, - 0,140,11,4,0,121,0,173,3,119,1,114,6,0,0,0, - 41,3,218,8,114,101,118,101,114,115,101,100,218,5,114,97, - 110,103,101,114,179,0,0,0,41,2,114,61,0,0,0,114, - 134,1,0,0,115,2,0,0,0,32,32,114,9,0,0,0, - 114,142,0,0,0,122,21,83,101,113,117,101,110,99,101,46, - 95,95,114,101,118,101,114,115,101,100,95,95,14,4,0,0, - 115,39,0,0,0,232,0,248,128,0,220,17,25,156,37,164, - 3,160,68,163,9,211,26,42,214,17,43,136,65,216,18,22, - 144,113,145,39,139,77,241,3,0,18,44,249,115,4,0,0, - 0,130,43,45,1,78,99,4,0,0,0,0,0,0,0,0, - 0,0,0,5,0,0,0,3,0,0,0,243,238,0,0,0, - 151,0,124,2,129,29,124,2,100,1,107,2,0,0,114,24, - 116,1,0,0,0,0,0,0,0,0,116,3,0,0,0,0, - 0,0,0,0,124,0,171,1,0,0,0,0,0,0,124,2, - 122,0,0,0,100,1,171,2,0,0,0,0,0,0,125,2, - 124,3,129,19,124,3,100,1,107,2,0,0,114,14,124,3, - 116,3,0,0,0,0,0,0,0,0,124,0,171,1,0,0, - 0,0,0,0,122,13,0,0,125,3,124,2,125,4,124,3, - 129,5,124,4,124,3,107,2,0,0,114,31,9,0,124,0, - 124,4,25,0,0,0,125,5,124,5,124,1,117,0,115,5, - 124,5,124,1,107,40,0,0,114,2,124,4,83,0,124,4, - 100,2,122,13,0,0,125,4,124,3,128,1,140,25,124,4, - 124,3,107,2,0,0,114,1,140,31,116,6,0,0,0,0, - 0,0,0,0,130,1,35,0,116,4,0,0,0,0,0,0, - 0,0,36,0,114,8,1,0,89,0,116,6,0,0,0,0, - 0,0,0,0,130,1,119,0,120,3,89,0,119,1,41,3, - 122,230,83,46,105,110,100,101,120,40,118,97,108,117,101,44, - 32,91,115,116,97,114,116,44,32,91,115,116,111,112,93,93, - 41,32,45,62,32,105,110,116,101,103,101,114,32,45,45,32, - 114,101,116,117,114,110,32,102,105,114,115,116,32,105,110,100, - 101,120,32,111,102,32,118,97,108,117,101,46,10,32,32,32, - 32,32,32,32,32,32,32,32,82,97,105,115,101,115,32,86, - 97,108,117,101,69,114,114,111,114,32,105,102,32,116,104,101, - 32,118,97,108,117,101,32,105,115,32,110,111,116,32,112,114, - 101,115,101,110,116,46,10,10,32,32,32,32,32,32,32,32, - 32,32,32,83,117,112,112,111,114,116,105,110,103,32,115,116, - 97,114,116,32,97,110,100,32,115,116,111,112,32,97,114,103, - 117,109,101,110,116,115,32,105,115,32,111,112,116,105,111,110, - 97,108,44,32,98,117,116,10,32,32,32,32,32,32,32,32, - 32,32,32,114,101,99,111,109,109,101,110,100,101,100,46,10, - 32,32,32,32,32,32,32,32,114,2,0,0,0,114,37,0, - 0,0,41,4,218,3,109,97,120,114,179,0,0,0,114,129, - 1,0,0,218,10,86,97,108,117,101,69,114,114,111,114,41, - 6,114,61,0,0,0,114,87,0,0,0,218,5,115,116,97, - 114,116,218,4,115,116,111,112,114,134,1,0,0,114,103,1, - 0,0,115,6,0,0,0,32,32,32,32,32,32,114,9,0, - 0,0,114,131,1,0,0,122,14,83,101,113,117,101,110,99, - 101,46,105,110,100,101,120,18,4,0,0,115,171,0,0,0, - 128,0,240,14,0,12,17,208,11,28,160,21,168,17,162,25, - 220,20,23,156,3,152,68,155,9,160,69,209,24,41,168,49, - 211,20,45,136,69,216,11,15,208,11,27,160,4,160,113,162, - 8,216,12,16,148,67,152,4,147,73,209,12,29,136,68,224, - 12,17,136,1,216,14,18,136,108,152,97,160,36,154,104,240, - 2,3,13,22,216,20,24,152,17,145,71,144,1,240,6,0, - 16,17,144,69,137,122,152,81,160,37,154,90,216,23,24,144, - 8,216,12,13,144,17,137,70,136,65,240,15,0,15,19,137, - 108,152,97,160,36,155,104,244,16,0,15,25,208,8,24,248, - 244,11,0,20,30,242,0,1,13,22,216,16,21,244,8,0, - 15,25,208,8,24,240,11,1,13,22,250,115,17,0,0,0, - 191,5,65,35,0,193,35,9,65,52,3,193,51,1,65,52, - 3,99,2,0,0,0,0,0,0,0,0,0,0,0,4,0, - 0,0,3,0,0,0,243,44,0,0,0,135,1,151,0,116, - 1,0,0,0,0,0,0,0,0,136,1,102,1,100,1,132, - 8,124,0,68,0,171,0,0,0,0,0,0,0,171,1,0, - 0,0,0,0,0,83,0,41,2,122,66,83,46,99,111,117, - 110,116,40,118,97,108,117,101,41,32,45,62,32,105,110,116, - 101,103,101,114,32,45,45,32,114,101,116,117,114,110,32,110, - 117,109,98,101,114,32,111,102,32,111,99,99,117,114,114,101, - 110,99,101,115,32,111,102,32,118,97,108,117,101,99,1,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,51,0, - 0,0,243,54,0,0,0,149,1,75,0,1,0,151,0,124, - 0,93,16,0,0,125,1,124,1,137,2,117,0,115,6,124, - 1,137,2,107,40,0,0,115,1,140,13,100,0,150,1,151, - 1,1,0,140,18,4,0,121,1,173,3,119,1,41,2,114, - 37,0,0,0,78,114,7,0,0,0,41,3,114,212,0,0, - 0,114,103,1,0,0,114,87,0,0,0,115,3,0,0,0, - 32,32,128,114,9,0,0,0,114,215,0,0,0,122,33,83, - 101,113,117,101,110,99,101,46,99,111,117,110,116,46,60,108, - 111,99,97,108,115,62,46,60,103,101,110,101,120,112,114,62, - 43,4,0,0,115,30,0,0,0,248,232,0,248,128,0,208, - 18,63,153,100,152,17,160,97,168,53,161,106,176,65,184,21, - 179,74,148,49,153,100,249,115,8,0,0,0,131,14,25,1, - 146,7,25,1,41,1,218,3,115,117,109,114,86,0,0,0, - 115,2,0,0,0,32,96,114,9,0,0,0,218,5,99,111, - 117,110,116,122,14,83,101,113,117,101,110,99,101,46,99,111, - 117,110,116,41,4,0,0,115,20,0,0,0,248,128,0,228, - 15,18,211,18,63,153,100,211,18,63,211,15,63,208,8,63, - 114,8,0,0,0,41,2,114,2,0,0,0,78,41,13,114, - 69,0,0,0,114,70,0,0,0,114,71,0,0,0,114,204, - 0,0,0,114,72,0,0,0,114,82,1,0,0,114,4,0, - 0,0,114,201,0,0,0,114,132,0,0,0,114,158,0,0, - 0,114,142,0,0,0,114,131,1,0,0,114,147,1,0,0, - 114,7,0,0,0,114,8,0,0,0,114,9,0,0,0,114, - 33,0,0,0,114,33,0,0,0,238,3,0,0,115,65,0, - 0,0,132,0,241,2,4,5,8,240,12,0,17,19,128,73, - 240,6,0,23,29,128,79,224,5,19,241,2,1,5,25,243, - 3,0,6,20,240,2,1,5,25,242,6,8,5,19,242,20, - 4,5,21,242,12,2,5,26,243,8,21,5,25,243,46,2, - 5,64,1,114,8,0,0,0,114,33,0,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0, - 0,0,243,40,0,0,0,135,0,151,0,101,0,90,1,100, - 0,90,2,136,0,102,1,100,1,132,8,90,3,136,0,102, - 1,100,2,132,8,90,4,136,0,120,1,90,5,83,0,41, - 3,218,24,95,68,101,112,114,101,99,97,116,101,66,121,116, - 101,83,116,114,105,110,103,77,101,116,97,99,4,0,0,0, - 0,0,0,0,0,0,0,0,6,0,0,0,11,0,0,0, - 243,98,0,0,0,149,1,151,0,124,1,100,1,107,55,0, - 0,114,23,100,2,100,0,108,0,125,5,124,5,106,3,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,100,3,100,4,172,5,171,2,0,0,0,0,0,0,1, - 0,116,5,0,0,0,0,0,0,0,0,137,6,124,0,141, - 12,0,0,124,0,124,1,124,2,124,3,102,4,105,0,124, - 4,164,1,142,1,83,0,41,6,78,114,35,0,0,0,114, - 2,0,0,0,250,26,99,111,108,108,101,99,116,105,111,110, - 115,46,97,98,99,46,66,121,116,101,83,116,114,105,110,103, - 169,2,233,3,0,0,0,233,14,0,0,0,169,1,114,44, - 1,0,0,41,4,218,8,119,97,114,110,105,110,103,115,218, - 11,95,100,101,112,114,101,99,97,116,101,100,114,183,0,0, - 0,114,184,0,0,0,41,7,114,66,0,0,0,114,213,0, - 0,0,218,5,98,97,115,101,115,218,9,110,97,109,101,115, - 112,97,99,101,218,6,107,119,97,114,103,115,114,156,1,0, - 0,114,189,0,0,0,115,7,0,0,0,32,32,32,32,32, - 32,128,114,9,0,0,0,114,184,0,0,0,122,32,95,68, - 101,112,114,101,99,97,116,101,66,121,116,101,83,116,114,105, - 110,103,77,101,116,97,46,95,95,110,101,119,95,95,51,4, - 0,0,115,67,0,0,0,248,128,0,216,11,15,144,60,210, - 11,31,219,12,27,224,12,20,215,12,32,209,12,32,216,16, - 44,216,23,30,240,5,0,13,33,244,0,3,13,14,244,8, - 0,16,21,137,119,137,127,152,115,160,68,168,37,176,25,209, - 15,69,184,102,209,15,69,208,8,69,114,8,0,0,0,99, - 2,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, - 3,0,0,0,243,80,0,0,0,149,1,151,0,100,1,100, - 0,108,0,125,2,124,2,106,3,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,100,2,100,3,172, - 4,171,2,0,0,0,0,0,0,1,0,116,4,0,0,0, - 0,0,0,0,0,137,3,124,0,141,13,0,0,124,1,171, - 1,0,0,0,0,0,0,83,0,41,5,78,114,2,0,0, - 0,114,151,1,0,0,114,152,1,0,0,114,155,1,0,0, - 41,4,114,156,1,0,0,114,157,1,0,0,114,183,0,0, - 0,218,17,95,95,105,110,115,116,97,110,99,101,99,104,101, - 99,107,95,95,41,4,114,66,0,0,0,218,8,105,110,115, - 116,97,110,99,101,114,156,1,0,0,114,189,0,0,0,115, - 4,0,0,0,32,32,32,128,114,9,0,0,0,114,162,1, - 0,0,122,42,95,68,101,112,114,101,99,97,116,101,66,121, - 116,101,83,116,114,105,110,103,77,101,116,97,46,95,95,105, - 110,115,116,97,110,99,101,99,104,101,99,107,95,95,61,4, - 0,0,115,49,0,0,0,248,128,0,219,8,23,224,8,16, - 215,8,28,209,8,28,216,12,40,216,19,26,240,5,0,9, - 29,244,0,3,9,10,244,8,0,16,21,137,119,209,15,40, - 168,24,211,15,50,208,8,50,114,8,0,0,0,41,6,114, - 69,0,0,0,114,70,0,0,0,114,71,0,0,0,114,184, - 0,0,0,114,162,1,0,0,114,205,0,0,0,114,206,0, - 0,0,115,1,0,0,0,64,114,9,0,0,0,114,149,1, - 0,0,114,149,1,0,0,50,4,0,0,115,19,0,0,0, - 248,132,0,244,2,8,5,70,1,247,20,7,5,51,240,0, - 7,5,51,114,8,0,0,0,114,149,1,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, - 0,0,243,20,0,0,0,151,0,101,0,90,1,100,0,90, - 2,100,1,90,3,100,2,90,4,121,3,41,4,114,35,0, - 0,0,122,77,84,104,105,115,32,117,110,105,102,105,101,115, - 32,98,121,116,101,115,32,97,110,100,32,98,121,116,101,97, - 114,114,97,121,46,10,10,32,32,32,32,88,88,88,32,83, - 104,111,117,108,100,32,97,100,100,32,97,108,108,32,116,104, - 101,105,114,32,109,101,116,104,111,100,115,46,10,32,32,32, - 32,114,7,0,0,0,78,41,5,114,69,0,0,0,114,70, - 0,0,0,114,71,0,0,0,114,204,0,0,0,114,72,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,9,0,0, - 0,114,35,0,0,0,114,35,0,0,0,70,4,0,0,115, - 14,0,0,0,132,0,241,2,3,5,8,240,10,0,17,19, - 129,73,114,8,0,0,0,114,35,0,0,0,99,0,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0, - 0,243,112,0,0,0,151,0,101,0,90,1,100,0,90,2, - 100,1,90,3,100,2,90,4,101,5,100,3,132,0,171,0, - 0,0,0,0,0,0,90,6,101,5,100,4,132,0,171,0, - 0,0,0,0,0,0,90,7,101,5,100,5,132,0,171,0, - 0,0,0,0,0,0,90,8,100,6,132,0,90,9,100,7, - 132,0,90,10,100,8,132,0,90,11,100,9,132,0,90,12, - 100,14,100,10,132,1,90,13,100,11,132,0,90,14,100,12, - 132,0,90,15,121,13,41,15,114,34,0,0,0,122,174,65, - 108,108,32,116,104,101,32,111,112,101,114,97,116,105,111,110, - 115,32,111,110,32,97,32,114,101,97,100,45,119,114,105,116, - 101,32,115,101,113,117,101,110,99,101,46,10,10,32,32,32, - 32,67,111,110,99,114,101,116,101,32,115,117,98,99,108,97, - 115,115,101,115,32,109,117,115,116,32,112,114,111,118,105,100, - 101,32,95,95,110,101,119,95,95,32,111,114,32,95,95,105, - 110,105,116,95,95,44,10,32,32,32,32,95,95,103,101,116, - 105,116,101,109,95,95,44,32,95,95,115,101,116,105,116,101, - 109,95,95,44,32,95,95,100,101,108,105,116,101,109,95,95, - 44,32,95,95,108,101,110,95,95,44,32,97,110,100,32,105, - 110,115,101,114,116,40,41,46,10,32,32,32,32,114,7,0, - 0,0,99,3,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,3,0,0,0,243,14,0,0,0,151,0,116,0, - 0,0,0,0,0,0,0,0,130,1,114,6,0,0,0,114, - 128,1,0,0,169,3,114,61,0,0,0,114,131,1,0,0, - 114,87,0,0,0,115,3,0,0,0,32,32,32,114,9,0, - 0,0,114,111,1,0,0,122,27,77,117,116,97,98,108,101, - 83,101,113,117,101,110,99,101,46,95,95,115,101,116,105,116, - 101,109,95,95,91,4,0,0,114,132,1,0,0,114,8,0, - 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,3,0,0,0,243,14,0,0,0,151,0,116,0, - 0,0,0,0,0,0,0,0,130,1,114,6,0,0,0,114, - 128,1,0,0,114,130,1,0,0,115,2,0,0,0,32,32, - 114,9,0,0,0,114,113,1,0,0,122,27,77,117,116,97, - 98,108,101,83,101,113,117,101,110,99,101,46,95,95,100,101, - 108,105,116,101,109,95,95,95,4,0,0,114,132,1,0,0, - 114,8,0,0,0,99,3,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,3,0,0,0,243,14,0,0,0,151, - 0,116,0,0,0,0,0,0,0,0,0,130,1,41,1,122, - 51,83,46,105,110,115,101,114,116,40,105,110,100,101,120,44, - 32,118,97,108,117,101,41,32,45,45,32,105,110,115,101,114, - 116,32,118,97,108,117,101,32,98,101,102,111,114,101,32,105, - 110,100,101,120,114,128,1,0,0,114,167,1,0,0,115,3, - 0,0,0,32,32,32,114,9,0,0,0,218,6,105,110,115, - 101,114,116,122,22,77,117,116,97,98,108,101,83,101,113,117, - 101,110,99,101,46,105,110,115,101,114,116,99,4,0,0,115, - 10,0,0,0,128,0,244,6,0,15,25,208,8,24,114,8, - 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, - 5,0,0,0,3,0,0,0,243,58,0,0,0,151,0,124, - 0,106,1,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,116,3,0,0,0,0,0,0,0,0,124, - 0,171,1,0,0,0,0,0,0,124,1,171,2,0,0,0, - 0,0,0,1,0,121,1,41,2,122,58,83,46,97,112,112, - 101,110,100,40,118,97,108,117,101,41,32,45,45,32,97,112, - 112,101,110,100,32,118,97,108,117,101,32,116,111,32,116,104, - 101,32,101,110,100,32,111,102,32,116,104,101,32,115,101,113, - 117,101,110,99,101,78,41,2,114,170,1,0,0,114,179,0, - 0,0,114,86,0,0,0,115,2,0,0,0,32,32,114,9, - 0,0,0,218,6,97,112,112,101,110,100,122,22,77,117,116, - 97,98,108,101,83,101,113,117,101,110,99,101,46,97,112,112, - 101,110,100,104,4,0,0,115,20,0,0,0,128,0,224,8, - 12,143,11,137,11,148,67,152,4,147,73,152,117,213,8,37, - 114,8,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,3,0,0,0,243,70,0,0,0,151, - 0,9,0,9,0,124,0,106,1,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,171,0,0,0,0, - 0,0,0,1,0,140,17,35,0,116,2,0,0,0,0,0, - 0,0,0,36,0,114,3,1,0,89,0,121,1,119,0,120, - 3,89,0,119,1,41,2,122,44,83,46,99,108,101,97,114, - 40,41,32,45,62,32,78,111,110,101,32,45,45,32,114,101, - 109,111,118,101,32,97,108,108,32,105,116,101,109,115,32,102, - 114,111,109,32,83,78,41,2,114,49,1,0,0,114,129,1, - 0,0,114,60,0,0,0,115,1,0,0,0,32,114,9,0, - 0,0,114,51,1,0,0,122,21,77,117,116,97,98,108,101, - 83,101,113,117,101,110,99,101,46,99,108,101,97,114,108,4, - 0,0,115,42,0,0,0,128,0,240,4,4,9,17,216,18, - 22,216,16,20,151,8,145,8,148,10,240,3,0,19,23,248, - 228,15,25,242,0,1,9,17,217,12,16,240,3,1,9,17, - 250,114,52,1,0,0,99,1,0,0,0,0,0,0,0,0, - 0,0,0,5,0,0,0,3,0,0,0,243,122,0,0,0, - 151,0,116,1,0,0,0,0,0,0,0,0,124,0,171,1, - 0,0,0,0,0,0,125,1,116,3,0,0,0,0,0,0, - 0,0,124,1,100,1,122,2,0,0,171,1,0,0,0,0, - 0,0,68,0,93,31,0,0,125,2,124,0,124,1,124,2, - 122,10,0,0,100,2,122,10,0,0,25,0,0,0,124,0, - 124,2,25,0,0,0,99,2,124,0,124,2,60,0,0,0, - 124,0,124,1,124,2,122,10,0,0,100,2,122,10,0,0, - 60,0,0,0,140,33,4,0,121,3,41,4,122,33,83,46, - 114,101,118,101,114,115,101,40,41,32,45,45,32,114,101,118, - 101,114,115,101,32,42,73,78,32,80,76,65,67,69,42,114, - 176,0,0,0,114,37,0,0,0,78,41,2,114,179,0,0, - 0,114,138,1,0,0,41,3,114,61,0,0,0,114,29,1, - 0,0,114,134,1,0,0,115,3,0,0,0,32,32,32,114, - 9,0,0,0,218,7,114,101,118,101,114,115,101,122,23,77, - 117,116,97,98,108,101,83,101,113,117,101,110,99,101,46,114, - 101,118,101,114,115,101,116,4,0,0,115,73,0,0,0,128, - 0,228,12,15,144,4,139,73,136,1,220,17,22,144,113,152, - 33,145,116,150,27,136,65,216,35,39,168,1,168,33,169,3, - 168,65,169,5,161,59,176,4,176,81,177,7,208,12,32,136, - 68,144,17,137,71,144,84,152,33,152,65,153,35,152,97,153, - 37,146,91,241,3,0,18,29,114,8,0,0,0,99,2,0, - 0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,0, - 0,0,243,82,0,0,0,151,0,124,1,124,0,117,0,114, - 11,116,1,0,0,0,0,0,0,0,0,124,1,171,1,0, - 0,0,0,0,0,125,1,124,1,68,0,93,19,0,0,125, - 2,124,0,106,3,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,2,171,1,0,0,0,0,0, - 0,1,0,140,21,4,0,121,1,41,2,122,77,83,46,101, - 120,116,101,110,100,40,105,116,101,114,97,98,108,101,41,32, - 45,45,32,101,120,116,101,110,100,32,115,101,113,117,101,110, - 99,101,32,98,121,32,97,112,112,101,110,100,105,110,103,32, - 101,108,101,109,101,110,116,115,32,102,114,111,109,32,116,104, - 101,32,105,116,101,114,97,98,108,101,78,41,2,114,181,0, - 0,0,114,172,1,0,0,41,3,114,61,0,0,0,114,79, - 1,0,0,114,103,1,0,0,115,3,0,0,0,32,32,32, - 114,9,0,0,0,218,6,101,120,116,101,110,100,122,22,77, - 117,116,97,98,108,101,83,101,113,117,101,110,99,101,46,101, - 120,116,101,110,100,122,4,0,0,115,39,0,0,0,128,0, - 224,11,17,144,84,137,62,220,21,25,152,38,147,92,136,70, - 219,17,23,136,65,216,12,16,143,75,137,75,152,1,141,78, - 241,3,0,18,24,114,8,0,0,0,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,243, - 22,0,0,0,151,0,124,0,124,1,25,0,0,0,125,2, - 124,0,124,1,61,0,124,2,83,0,41,1,122,153,83,46, - 112,111,112,40,91,105,110,100,101,120,93,41,32,45,62,32, - 105,116,101,109,32,45,45,32,114,101,109,111,118,101,32,97, - 110,100,32,114,101,116,117,114,110,32,105,116,101,109,32,97, - 116,32,105,110,100,101,120,32,40,100,101,102,97,117,108,116, - 32,108,97,115,116,41,46,10,32,32,32,32,32,32,32,32, - 32,32,32,82,97,105,115,101,32,73,110,100,101,120,69,114, - 114,111,114,32,105,102,32,108,105,115,116,32,105,115,32,101, - 109,112,116,121,32,111,114,32,105,110,100,101,120,32,105,115, - 32,111,117,116,32,111,102,32,114,97,110,103,101,46,10,32, - 32,32,32,32,32,32,32,114,7,0,0,0,41,3,114,61, - 0,0,0,114,131,1,0,0,114,103,1,0,0,115,3,0, - 0,0,32,32,32,114,9,0,0,0,114,49,1,0,0,122, - 19,77,117,116,97,98,108,101,83,101,113,117,101,110,99,101, - 46,112,111,112,129,4,0,0,115,25,0,0,0,128,0,240, - 8,0,13,17,144,21,137,75,136,1,216,12,16,144,21,136, - 75,216,15,16,136,8,114,8,0,0,0,99,2,0,0,0, - 0,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, - 243,40,0,0,0,151,0,124,0,124,0,106,1,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 1,171,1,0,0,0,0,0,0,61,0,121,1,41,2,122, - 118,83,46,114,101,109,111,118,101,40,118,97,108,117,101,41, - 32,45,45,32,114,101,109,111,118,101,32,102,105,114,115,116, - 32,111,99,99,117,114,114,101,110,99,101,32,111,102,32,118, - 97,108,117,101,46,10,32,32,32,32,32,32,32,32,32,32, - 32,82,97,105,115,101,32,86,97,108,117,101,69,114,114,111, - 114,32,105,102,32,116,104,101,32,118,97,108,117,101,32,105, - 115,32,110,111,116,32,112,114,101,115,101,110,116,46,10,32, - 32,32,32,32,32,32,32,78,41,1,114,131,1,0,0,114, - 86,0,0,0,115,2,0,0,0,32,32,114,9,0,0,0, - 114,44,1,0,0,122,22,77,117,116,97,98,108,101,83,101, - 113,117,101,110,99,101,46,114,101,109,111,118,101,137,4,0, - 0,115,21,0,0,0,128,0,240,8,0,13,17,144,20,151, - 26,145,26,152,69,211,17,34,209,12,35,114,8,0,0,0, - 99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,3,0,0,0,243,40,0,0,0,151,0,124,0,106,1, + 2,0,0,0,0,0,0,0,243,112,0,0,0,151,0,101, + 0,90,1,100,0,90,2,100,1,90,3,100,2,90,4,101, + 5,100,3,132,0,171,0,0,0,0,0,0,0,90,6,101, + 5,100,4,132,0,171,0,0,0,0,0,0,0,90,7,101, + 5,100,5,132,0,171,0,0,0,0,0,0,0,90,8,100, + 6,132,0,90,9,100,7,132,0,90,10,100,8,132,0,90, + 11,100,9,132,0,90,12,100,14,100,10,132,1,90,13,100, + 11,132,0,90,14,100,12,132,0,90,15,121,13,41,15,114, + 34,0,0,0,122,174,65,108,108,32,116,104,101,32,111,112, + 101,114,97,116,105,111,110,115,32,111,110,32,97,32,114,101, + 97,100,45,119,114,105,116,101,32,115,101,113,117,101,110,99, + 101,46,10,10,32,32,32,32,67,111,110,99,114,101,116,101, + 32,115,117,98,99,108,97,115,115,101,115,32,109,117,115,116, + 32,112,114,111,118,105,100,101,32,95,95,110,101,119,95,95, + 32,111,114,32,95,95,105,110,105,116,95,95,44,10,32,32, + 32,32,95,95,103,101,116,105,116,101,109,95,95,44,32,95, + 95,115,101,116,105,116,101,109,95,95,44,32,95,95,100,101, + 108,105,116,101,109,95,95,44,32,95,95,108,101,110,95,95, + 44,32,97,110,100,32,105,110,115,101,114,116,40,41,46,10, + 32,32,32,32,114,7,0,0,0,99,3,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,3,0,0,0,243,14, + 0,0,0,151,0,116,0,0,0,0,0,0,0,0,0,130, + 1,114,6,0,0,0,114,128,1,0,0,169,3,114,61,0, + 0,0,114,131,1,0,0,114,87,0,0,0,115,3,0,0, + 0,32,32,32,114,9,0,0,0,114,111,1,0,0,122,27, + 77,117,116,97,98,108,101,83,101,113,117,101,110,99,101,46, + 95,95,115,101,116,105,116,101,109,95,95,91,4,0,0,114, + 132,1,0,0,114,8,0,0,0,99,2,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,3,0,0,0,243,14, + 0,0,0,151,0,116,0,0,0,0,0,0,0,0,0,130, + 1,114,6,0,0,0,114,128,1,0,0,114,130,1,0,0, + 115,2,0,0,0,32,32,114,9,0,0,0,114,113,1,0, + 0,122,27,77,117,116,97,98,108,101,83,101,113,117,101,110, + 99,101,46,95,95,100,101,108,105,116,101,109,95,95,95,4, + 0,0,114,132,1,0,0,114,8,0,0,0,99,3,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, + 0,243,14,0,0,0,151,0,116,0,0,0,0,0,0,0, + 0,0,130,1,41,1,122,51,83,46,105,110,115,101,114,116, + 40,105,110,100,101,120,44,32,118,97,108,117,101,41,32,45, + 45,32,105,110,115,101,114,116,32,118,97,108,117,101,32,98, + 101,102,111,114,101,32,105,110,100,101,120,114,128,1,0,0, + 114,167,1,0,0,115,3,0,0,0,32,32,32,114,9,0, + 0,0,218,6,105,110,115,101,114,116,122,22,77,117,116,97, + 98,108,101,83,101,113,117,101,110,99,101,46,105,110,115,101, + 114,116,99,4,0,0,115,10,0,0,0,128,0,244,6,0, + 15,25,208,8,24,114,8,0,0,0,99,2,0,0,0,0, + 0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,243, + 58,0,0,0,151,0,124,0,106,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,116,3,0,0, + 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, + 124,1,171,2,0,0,0,0,0,0,1,0,121,1,41,2, + 122,58,83,46,97,112,112,101,110,100,40,118,97,108,117,101, + 41,32,45,45,32,97,112,112,101,110,100,32,118,97,108,117, + 101,32,116,111,32,116,104,101,32,101,110,100,32,111,102,32, + 116,104,101,32,115,101,113,117,101,110,99,101,78,41,2,114, + 170,1,0,0,114,179,0,0,0,114,86,0,0,0,115,2, + 0,0,0,32,32,114,9,0,0,0,218,6,97,112,112,101, + 110,100,122,22,77,117,116,97,98,108,101,83,101,113,117,101, + 110,99,101,46,97,112,112,101,110,100,104,4,0,0,115,20, + 0,0,0,128,0,224,8,12,143,11,137,11,148,67,152,4, + 147,73,152,117,213,8,37,114,8,0,0,0,99,1,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,0, + 0,243,70,0,0,0,151,0,9,0,9,0,124,0,106,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,1,171,1,0,0,0,0,0,0,1,0,124,0, - 83,0,114,6,0,0,0,41,1,114,177,1,0,0,41,2, - 114,61,0,0,0,114,79,1,0,0,115,2,0,0,0,32, - 32,114,9,0,0,0,218,8,95,95,105,97,100,100,95,95, - 122,24,77,117,116,97,98,108,101,83,101,113,117,101,110,99, - 101,46,95,95,105,97,100,100,95,95,143,4,0,0,115,19, - 0,0,0,128,0,216,8,12,143,11,137,11,144,70,212,8, - 27,216,15,19,136,11,114,8,0,0,0,78,41,1,114,191, - 0,0,0,41,16,114,69,0,0,0,114,70,0,0,0,114, - 71,0,0,0,114,204,0,0,0,114,72,0,0,0,114,4, - 0,0,0,114,111,1,0,0,114,113,1,0,0,114,170,1, - 0,0,114,172,1,0,0,114,51,1,0,0,114,175,1,0, - 0,114,177,1,0,0,114,49,1,0,0,114,44,1,0,0, - 114,181,1,0,0,114,7,0,0,0,114,8,0,0,0,114, - 9,0,0,0,114,34,0,0,0,114,34,0,0,0,82,4, - 0,0,115,107,0,0,0,132,0,241,2,4,5,8,240,12, - 0,17,19,128,73,224,5,19,241,2,1,5,25,243,3,0, - 6,20,240,2,1,5,25,240,6,0,6,20,241,2,1,5, - 25,243,3,0,6,20,240,2,1,5,25,240,6,0,6,20, - 241,2,2,5,25,243,3,0,6,20,240,2,2,5,25,242, - 8,2,5,38,242,8,6,5,17,242,16,4,5,56,242,12, - 5,5,27,243,14,6,5,17,242,16,4,5,36,243,12,2, - 5,20,114,8,0,0,0,114,34,0,0,0,41,85,114,204, - 0,0,0,218,3,97,98,99,114,3,0,0,0,114,4,0, - 0,0,114,24,1,0,0,114,217,0,0,0,114,181,0,0, - 0,114,171,0,0,0,114,80,0,0,0,218,12,69,108,108, - 105,112,115,105,115,84,121,112,101,114,10,0,0,0,114,223, - 0,0,0,218,7,95,95,97,108,108,95,95,114,69,0,0, - 0,114,46,1,0,0,218,14,98,121,116,101,115,95,105,116, - 101,114,97,116,111,114,218,9,98,121,116,101,97,114,114,97, - 121,218,18,98,121,116,101,97,114,114,97,121,95,105,116,101, - 114,97,116,111,114,114,75,1,0,0,218,16,100,105,99,116, - 95,107,101,121,105,116,101,114,97,116,111,114,114,79,1,0, - 0,218,18,100,105,99,116,95,118,97,108,117,101,105,116,101, - 114,97,116,111,114,114,77,1,0,0,218,17,100,105,99,116, - 95,105,116,101,109,105,116,101,114,97,116,111,114,218,13,108, - 105,115,116,95,105,116,101,114,97,116,111,114,114,137,1,0, - 0,218,20,108,105,115,116,95,114,101,118,101,114,115,101,105, - 116,101,114,97,116,111,114,114,138,1,0,0,218,14,114,97, - 110,103,101,95,105,116,101,114,97,116,111,114,218,18,108,111, - 110,103,114,97,110,103,101,95,105,116,101,114,97,116,111,114, - 114,95,1,0,0,218,12,115,101,116,95,105,116,101,114,97, - 116,111,114,218,12,115,116,114,95,105,116,101,114,97,116,111, - 114,218,14,116,117,112,108,101,95,105,116,101,114,97,116,111, - 114,218,3,122,105,112,218,12,122,105,112,95,105,116,101,114, - 97,116,111,114,218,9,100,105,99,116,95,107,101,121,115,218, - 11,100,105,99,116,95,118,97,108,117,101,115,218,10,100,105, - 99,116,95,105,116,101,109,115,114,49,0,0,0,218,12,109, - 97,112,112,105,110,103,112,114,111,120,121,218,9,103,101,110, - 101,114,97,116,111,114,114,42,0,0,0,218,9,99,111,114, - 111,117,116,105,110,101,114,104,0,0,0,114,45,0,0,0, - 218,15,97,115,121,110,99,95,103,101,110,101,114,97,116,111, - 114,114,56,0,0,0,114,16,0,0,0,114,11,0,0,0, - 114,12,0,0,0,218,8,114,101,103,105,115,116,101,114,114, - 13,0,0,0,114,14,0,0,0,114,15,0,0,0,114,17, - 0,0,0,114,18,0,0,0,114,20,0,0,0,114,19,0, - 0,0,114,21,0,0,0,114,22,0,0,0,114,24,0,0, - 0,114,36,0,0,0,114,174,0,0,0,114,182,0,0,0, - 114,196,0,0,0,114,23,0,0,0,114,25,0,0,0,218, - 9,102,114,111,122,101,110,115,101,116,114,26,0,0,0,114, - 27,0,0,0,114,29,0,0,0,114,30,0,0,0,114,31, - 0,0,0,114,32,0,0,0,114,28,0,0,0,114,81,1, - 0,0,114,33,0,0,0,114,178,0,0,0,218,3,115,116, - 114,114,172,0,0,0,114,149,1,0,0,114,35,0,0,0, - 218,5,98,121,116,101,115,114,34,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,9,0,0,0,218,8,60,109,111, - 100,117,108,101,62,114,211,1,0,0,1,0,0,0,115,1, - 5,0,0,240,3,1,1,1,241,8,3,1,4,247,62,0, - 1,40,219,0,10,225,15,19,144,68,152,19,145,73,139,127, - 128,12,217,15,19,144,67,139,121,128,12,218,0,14,217,15, - 19,144,66,139,120,128,12,216,4,6,242,4,9,11,13,128, - 7,240,30,0,12,29,128,8,241,18,0,18,22,145,100,152, - 51,147,105,147,31,128,14,217,21,25,153,36,153,121,155,123, - 211,26,43,211,21,44,208,0,18,225,19,23,153,4,152,82, - 159,87,153,87,155,89,155,15,211,19,40,208,0,16,217,21, - 25,153,36,152,114,159,121,153,121,155,123,211,26,43,211,21, - 44,208,0,18,217,20,24,153,20,152,98,159,104,153,104,155, - 106,211,25,41,211,20,42,208,0,17,217,16,20,145,84,152, - 34,147,88,147,14,128,13,217,23,27,153,68,161,24,168,34, - 163,28,211,28,46,211,23,47,208,0,20,217,17,21,145,100, - 153,53,160,17,155,56,147,110,211,17,37,128,14,217,21,25, - 153,36,153,117,160,81,168,36,161,89,211,31,47,211,26,48, - 211,21,49,208,0,18,217,15,19,145,68,153,19,155,21,147, - 75,211,15,32,128,12,217,15,19,145,68,152,18,147,72,139, - 126,128,12,217,17,21,145,100,152,50,147,104,147,30,128,14, - 217,15,19,145,68,153,19,155,21,147,75,211,15,32,128,12, - 225,12,16,144,18,151,23,145,23,147,25,139,79,128,9,217, - 14,18,144,50,151,57,145,57,147,59,211,14,31,128,11,217, - 13,17,144,34,151,40,145,40,147,42,211,13,29,128,10,225, - 15,19,144,68,151,77,145,77,211,15,34,128,12,217,12,16, - 146,47,211,17,36,211,12,37,128,9,226,0,23,217,8,13, - 139,7,128,5,217,12,16,144,21,139,75,128,9,216,0,5, - 135,11,129,11,132,13,216,4,9,226,0,22,217,6,9,131, - 101,128,3,217,18,22,144,115,147,41,128,15,216,4,7,242, - 10,10,1,16,244,24,12,1,30,152,23,245,0,12,1,30, - 244,30,14,1,50,152,39,245,0,14,1,50,244,34,38,1, - 30,144,9,244,0,38,1,30,240,82,1,0,1,10,215,0, - 18,209,0,18,144,57,212,0,29,244,6,14,1,50,152,103, - 245,0,14,1,50,244,34,16,1,30,144,77,244,0,16,1, - 30,244,38,45,1,30,144,93,244,0,45,1,30,240,96,1, - 0,1,15,215,0,23,209,0,23,152,15,212,0,40,244,6, - 15,1,50,152,23,245,0,15,1,50,244,36,16,1,30,136, - 120,244,0,16,1,30,240,38,0,1,9,215,0,17,209,0, - 17,144,46,212,0,33,216,0,8,215,0,17,209,0,17,208, - 18,36,212,0,37,224,0,8,215,0,17,209,0,17,208,18, - 34,212,0,35,216,0,8,215,0,17,209,0,17,208,18,36, - 212,0,37,216,0,8,215,0,17,209,0,17,208,18,35,212, - 0,36,216,0,8,215,0,17,209,0,17,144,45,212,0,32, - 216,0,8,215,0,17,209,0,17,208,18,38,212,0,39,216, + 0,0,171,0,0,0,0,0,0,0,1,0,140,17,35,0, + 116,2,0,0,0,0,0,0,0,0,36,0,114,3,1,0, + 89,0,121,1,119,0,120,3,89,0,119,1,41,2,122,44, + 83,46,99,108,101,97,114,40,41,32,45,62,32,78,111,110, + 101,32,45,45,32,114,101,109,111,118,101,32,97,108,108,32, + 105,116,101,109,115,32,102,114,111,109,32,83,78,41,2,114, + 49,1,0,0,114,129,1,0,0,114,60,0,0,0,115,1, + 0,0,0,32,114,9,0,0,0,114,51,1,0,0,122,21, + 77,117,116,97,98,108,101,83,101,113,117,101,110,99,101,46, + 99,108,101,97,114,108,4,0,0,115,42,0,0,0,128,0, + 240,4,4,9,17,216,18,22,216,16,20,151,8,145,8,148, + 10,240,3,0,19,23,248,228,15,25,242,0,1,9,17,217, + 12,16,240,3,1,9,17,250,114,52,1,0,0,99,1,0, + 0,0,0,0,0,0,0,0,0,0,5,0,0,0,3,0, + 0,0,243,122,0,0,0,151,0,116,1,0,0,0,0,0, + 0,0,0,124,0,171,1,0,0,0,0,0,0,125,1,116, + 3,0,0,0,0,0,0,0,0,124,1,100,1,122,2,0, + 0,171,1,0,0,0,0,0,0,68,0,93,31,0,0,125, + 2,124,0,124,1,124,2,122,10,0,0,100,2,122,10,0, + 0,25,0,0,0,124,0,124,2,25,0,0,0,99,2,124, + 0,124,2,60,0,0,0,124,0,124,1,124,2,122,10,0, + 0,100,2,122,10,0,0,60,0,0,0,140,33,4,0,121, + 3,41,4,122,33,83,46,114,101,118,101,114,115,101,40,41, + 32,45,45,32,114,101,118,101,114,115,101,32,42,73,78,32, + 80,76,65,67,69,42,114,176,0,0,0,114,37,0,0,0, + 78,41,2,114,179,0,0,0,114,138,1,0,0,41,3,114, + 61,0,0,0,114,29,1,0,0,114,134,1,0,0,115,3, + 0,0,0,32,32,32,114,9,0,0,0,218,7,114,101,118, + 101,114,115,101,122,23,77,117,116,97,98,108,101,83,101,113, + 117,101,110,99,101,46,114,101,118,101,114,115,101,116,4,0, + 0,115,73,0,0,0,128,0,228,12,15,144,4,139,73,136, + 1,220,17,22,144,113,152,33,145,116,150,27,136,65,216,35, + 39,168,1,168,33,169,3,168,65,169,5,161,59,176,4,176, + 81,177,7,208,12,32,136,68,144,17,137,71,144,84,152,33, + 152,65,153,35,152,97,153,37,146,91,241,3,0,18,29,114, + 8,0,0,0,99,2,0,0,0,0,0,0,0,0,0,0, + 0,4,0,0,0,3,0,0,0,243,82,0,0,0,151,0, + 124,1,124,0,117,0,114,11,116,1,0,0,0,0,0,0, + 0,0,124,1,171,1,0,0,0,0,0,0,125,1,124,1, + 68,0,93,19,0,0,125,2,124,0,106,3,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,2, + 171,1,0,0,0,0,0,0,1,0,140,21,4,0,121,1, + 41,2,122,77,83,46,101,120,116,101,110,100,40,105,116,101, + 114,97,98,108,101,41,32,45,45,32,101,120,116,101,110,100, + 32,115,101,113,117,101,110,99,101,32,98,121,32,97,112,112, + 101,110,100,105,110,103,32,101,108,101,109,101,110,116,115,32, + 102,114,111,109,32,116,104,101,32,105,116,101,114,97,98,108, + 101,78,41,2,114,181,0,0,0,114,172,1,0,0,41,3, + 114,61,0,0,0,114,79,1,0,0,114,103,1,0,0,115, + 3,0,0,0,32,32,32,114,9,0,0,0,218,6,101,120, + 116,101,110,100,122,22,77,117,116,97,98,108,101,83,101,113, + 117,101,110,99,101,46,101,120,116,101,110,100,122,4,0,0, + 115,39,0,0,0,128,0,224,11,17,144,84,137,62,220,21, + 25,152,38,147,92,136,70,219,17,23,136,65,216,12,16,143, + 75,137,75,152,1,141,78,241,3,0,18,24,114,8,0,0, + 0,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,3,0,0,0,243,22,0,0,0,151,0,124,0,124, + 1,25,0,0,0,125,2,124,0,124,1,61,0,124,2,83, + 0,41,1,122,153,83,46,112,111,112,40,91,105,110,100,101, + 120,93,41,32,45,62,32,105,116,101,109,32,45,45,32,114, + 101,109,111,118,101,32,97,110,100,32,114,101,116,117,114,110, + 32,105,116,101,109,32,97,116,32,105,110,100,101,120,32,40, + 100,101,102,97,117,108,116,32,108,97,115,116,41,46,10,32, + 32,32,32,32,32,32,32,32,32,32,82,97,105,115,101,32, + 73,110,100,101,120,69,114,114,111,114,32,105,102,32,108,105, + 115,116,32,105,115,32,101,109,112,116,121,32,111,114,32,105, + 110,100,101,120,32,105,115,32,111,117,116,32,111,102,32,114, + 97,110,103,101,46,10,32,32,32,32,32,32,32,32,114,7, + 0,0,0,41,3,114,61,0,0,0,114,131,1,0,0,114, + 103,1,0,0,115,3,0,0,0,32,32,32,114,9,0,0, + 0,114,49,1,0,0,122,19,77,117,116,97,98,108,101,83, + 101,113,117,101,110,99,101,46,112,111,112,129,4,0,0,115, + 25,0,0,0,128,0,240,8,0,13,17,144,21,137,75,136, + 1,216,12,16,144,21,136,75,216,15,16,136,8,114,8,0, + 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,3,0,0,0,243,40,0,0,0,151,0,124,0, + 124,0,106,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,1,171,1,0,0,0,0,0,0, + 61,0,121,1,41,2,122,118,83,46,114,101,109,111,118,101, + 40,118,97,108,117,101,41,32,45,45,32,114,101,109,111,118, + 101,32,102,105,114,115,116,32,111,99,99,117,114,114,101,110, + 99,101,32,111,102,32,118,97,108,117,101,46,10,32,32,32, + 32,32,32,32,32,32,32,32,82,97,105,115,101,32,86,97, + 108,117,101,69,114,114,111,114,32,105,102,32,116,104,101,32, + 118,97,108,117,101,32,105,115,32,110,111,116,32,112,114,101, + 115,101,110,116,46,10,32,32,32,32,32,32,32,32,78,41, + 1,114,131,1,0,0,114,86,0,0,0,115,2,0,0,0, + 32,32,114,9,0,0,0,114,44,1,0,0,122,22,77,117, + 116,97,98,108,101,83,101,113,117,101,110,99,101,46,114,101, + 109,111,118,101,137,4,0,0,115,21,0,0,0,128,0,240, + 8,0,13,17,144,20,151,26,145,26,152,69,211,17,34,209, + 12,35,114,8,0,0,0,99,2,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,3,0,0,0,243,40,0,0, + 0,151,0,124,0,106,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,1,171,1,0,0,0, + 0,0,0,1,0,124,0,83,0,114,6,0,0,0,41,1, + 114,177,1,0,0,41,2,114,61,0,0,0,114,79,1,0, + 0,115,2,0,0,0,32,32,114,9,0,0,0,218,8,95, + 95,105,97,100,100,95,95,122,24,77,117,116,97,98,108,101, + 83,101,113,117,101,110,99,101,46,95,95,105,97,100,100,95, + 95,143,4,0,0,115,19,0,0,0,128,0,216,8,12,143, + 11,137,11,144,70,212,8,27,216,15,19,136,11,114,8,0, + 0,0,78,41,1,114,191,0,0,0,41,16,114,69,0,0, + 0,114,70,0,0,0,114,71,0,0,0,114,204,0,0,0, + 114,72,0,0,0,114,4,0,0,0,114,111,1,0,0,114, + 113,1,0,0,114,170,1,0,0,114,172,1,0,0,114,51, + 1,0,0,114,175,1,0,0,114,177,1,0,0,114,49,1, + 0,0,114,44,1,0,0,114,181,1,0,0,114,7,0,0, + 0,114,8,0,0,0,114,9,0,0,0,114,34,0,0,0, + 114,34,0,0,0,82,4,0,0,115,107,0,0,0,132,0, + 241,2,4,5,8,240,12,0,17,19,128,73,224,5,19,241, + 2,1,5,25,243,3,0,6,20,240,2,1,5,25,240,6, + 0,6,20,241,2,1,5,25,243,3,0,6,20,240,2,1, + 5,25,240,6,0,6,20,241,2,2,5,25,243,3,0,6, + 20,240,2,2,5,25,242,8,2,5,38,242,8,6,5,17, + 242,16,4,5,56,242,12,5,5,27,243,14,6,5,17,242, + 16,4,5,36,243,12,2,5,20,114,8,0,0,0,114,34, + 0,0,0,41,85,114,204,0,0,0,218,3,97,98,99,114, + 3,0,0,0,114,4,0,0,0,114,24,1,0,0,114,217, + 0,0,0,114,181,0,0,0,114,171,0,0,0,114,80,0, + 0,0,218,12,69,108,108,105,112,115,105,115,84,121,112,101, + 114,10,0,0,0,114,223,0,0,0,218,7,95,95,97,108, + 108,95,95,114,69,0,0,0,114,46,1,0,0,218,14,98, + 121,116,101,115,95,105,116,101,114,97,116,111,114,218,9,98, + 121,116,101,97,114,114,97,121,218,18,98,121,116,101,97,114, + 114,97,121,95,105,116,101,114,97,116,111,114,114,75,1,0, + 0,218,16,100,105,99,116,95,107,101,121,105,116,101,114,97, + 116,111,114,114,79,1,0,0,218,18,100,105,99,116,95,118, + 97,108,117,101,105,116,101,114,97,116,111,114,114,77,1,0, + 0,218,17,100,105,99,116,95,105,116,101,109,105,116,101,114, + 97,116,111,114,218,13,108,105,115,116,95,105,116,101,114,97, + 116,111,114,114,137,1,0,0,218,20,108,105,115,116,95,114, + 101,118,101,114,115,101,105,116,101,114,97,116,111,114,114,138, + 1,0,0,218,14,114,97,110,103,101,95,105,116,101,114,97, + 116,111,114,218,18,108,111,110,103,114,97,110,103,101,95,105, + 116,101,114,97,116,111,114,114,95,1,0,0,218,12,115,101, + 116,95,105,116,101,114,97,116,111,114,218,12,115,116,114,95, + 105,116,101,114,97,116,111,114,218,14,116,117,112,108,101,95, + 105,116,101,114,97,116,111,114,218,3,122,105,112,218,12,122, + 105,112,95,105,116,101,114,97,116,111,114,218,9,100,105,99, + 116,95,107,101,121,115,218,11,100,105,99,116,95,118,97,108, + 117,101,115,218,10,100,105,99,116,95,105,116,101,109,115,114, + 49,0,0,0,218,12,109,97,112,112,105,110,103,112,114,111, + 120,121,218,9,103,101,110,101,114,97,116,111,114,114,42,0, + 0,0,218,9,99,111,114,111,117,116,105,110,101,114,104,0, + 0,0,114,45,0,0,0,218,15,97,115,121,110,99,95,103, + 101,110,101,114,97,116,111,114,114,56,0,0,0,114,16,0, + 0,0,114,11,0,0,0,114,12,0,0,0,218,8,114,101, + 103,105,115,116,101,114,114,13,0,0,0,114,14,0,0,0, + 114,15,0,0,0,114,17,0,0,0,114,18,0,0,0,114, + 20,0,0,0,114,19,0,0,0,114,21,0,0,0,114,22, + 0,0,0,114,24,0,0,0,114,36,0,0,0,114,174,0, + 0,0,114,182,0,0,0,114,196,0,0,0,114,23,0,0, + 0,114,25,0,0,0,218,9,102,114,111,122,101,110,115,101, + 116,114,26,0,0,0,114,27,0,0,0,114,29,0,0,0, + 114,30,0,0,0,114,31,0,0,0,114,32,0,0,0,114, + 28,0,0,0,114,81,1,0,0,114,33,0,0,0,114,178, + 0,0,0,218,3,115,116,114,114,172,0,0,0,114,149,1, + 0,0,114,35,0,0,0,218,5,98,121,116,101,115,114,34, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,9,0, + 0,0,218,8,60,109,111,100,117,108,101,62,114,211,1,0, + 0,1,0,0,0,115,1,5,0,0,240,3,1,1,1,241, + 8,3,1,4,247,62,0,1,40,219,0,10,225,15,19,144, + 68,152,19,145,73,139,127,128,12,217,15,19,144,67,139,121, + 128,12,218,0,14,217,15,19,144,66,139,120,128,12,216,4, + 6,242,4,9,11,13,128,7,240,30,0,12,29,128,8,241, + 18,0,18,22,145,100,152,51,147,105,147,31,128,14,217,21, + 25,153,36,153,121,155,123,211,26,43,211,21,44,208,0,18, + 225,19,23,153,4,152,82,159,87,153,87,155,89,155,15,211, + 19,40,208,0,16,217,21,25,153,36,152,114,159,121,153,121, + 155,123,211,26,43,211,21,44,208,0,18,217,20,24,153,20, + 152,98,159,104,153,104,155,106,211,25,41,211,20,42,208,0, + 17,217,16,20,145,84,152,34,147,88,147,14,128,13,217,23, + 27,153,68,161,24,168,34,163,28,211,28,46,211,23,47,208, + 0,20,217,17,21,145,100,153,53,160,17,155,56,147,110,211, + 17,37,128,14,217,21,25,153,36,153,117,160,81,168,36,161, + 89,211,31,47,211,26,48,211,21,49,208,0,18,217,15,19, + 145,68,153,19,155,21,147,75,211,15,32,128,12,217,15,19, + 145,68,152,18,147,72,139,126,128,12,217,17,21,145,100,152, + 50,147,104,147,30,128,14,217,15,19,145,68,153,19,155,21, + 147,75,211,15,32,128,12,225,12,16,144,18,151,23,145,23, + 147,25,139,79,128,9,217,14,18,144,50,151,57,145,57,147, + 59,211,14,31,128,11,217,13,17,144,34,151,40,145,40,147, + 42,211,13,29,128,10,225,15,19,144,68,151,77,145,77,211, + 15,34,128,12,217,12,16,146,47,211,17,36,211,12,37,128, + 9,226,0,23,217,8,13,139,7,128,5,217,12,16,144,21, + 139,75,128,9,216,0,5,135,11,129,11,132,13,216,4,9, + 226,0,22,217,6,9,131,101,128,3,217,18,22,144,115,147, + 41,128,15,216,4,7,242,10,10,1,16,244,24,12,1,30, + 152,23,245,0,12,1,30,244,30,14,1,50,152,39,245,0, + 14,1,50,244,34,38,1,30,144,9,244,0,38,1,30,240, + 82,1,0,1,10,215,0,18,209,0,18,144,57,212,0,29, + 244,6,14,1,50,152,103,245,0,14,1,50,244,34,16,1, + 30,144,77,244,0,16,1,30,244,38,45,1,30,144,93,244, + 0,45,1,30,240,96,1,0,1,15,215,0,23,209,0,23, + 152,15,212,0,40,244,6,15,1,50,152,23,245,0,15,1, + 50,244,36,16,1,30,136,120,244,0,16,1,30,240,38,0, + 1,9,215,0,17,209,0,17,144,46,212,0,33,216,0,8, + 215,0,17,209,0,17,208,18,36,212,0,37,224,0,8,215, + 0,17,209,0,17,208,18,34,212,0,35,216,0,8,215,0, + 17,209,0,17,208,18,36,212,0,37,216,0,8,215,0,17, + 209,0,17,208,18,35,212,0,36,216,0,8,215,0,17,209, + 0,17,144,45,212,0,32,216,0,8,215,0,17,209,0,17, + 208,18,38,212,0,39,216,0,8,215,0,17,209,0,17,144, + 46,212,0,33,216,0,8,215,0,17,209,0,17,208,18,36, + 212,0,37,216,0,8,215,0,17,209,0,17,144,44,212,0, + 31,216,0,8,215,0,17,209,0,17,144,44,212,0,31,216, 0,8,215,0,17,209,0,17,144,46,212,0,33,216,0,8, - 215,0,17,209,0,17,208,18,36,212,0,37,216,0,8,215, - 0,17,209,0,17,144,44,212,0,31,216,0,8,215,0,17, - 209,0,17,144,44,212,0,31,216,0,8,215,0,17,209,0, - 17,144,46,212,0,33,216,0,8,215,0,17,209,0,17,144, - 44,212,0,31,244,6,13,1,30,144,24,244,0,13,1,30, - 244,32,45,1,30,144,8,244,0,45,1,30,240,96,1,0, - 1,10,215,0,18,209,0,18,144,57,212,0,29,244,6,12, - 1,30,144,103,245,0,12,1,30,244,30,14,1,50,152,39, - 245,0,14,1,50,244,34,8,1,30,144,21,152,8,160,41, - 244,0,8,1,30,244,22,12,1,30,144,119,245,0,12,1, - 30,244,30,52,1,64,1,152,76,244,0,52,1,64,1,242, - 108,1,10,1,86,1,242,24,15,1,21,244,36,14,1,59, - 152,23,245,0,14,1,59,244,40,71,2,1,17,136,42,244, - 0,71,2,1,17,240,84,4,0,1,4,135,12,129,12,136, - 89,212,0,23,244,6,77,1,1,20,144,19,244,0,77,1, - 1,20,240,96,2,0,1,11,215,0,19,209,0,19,144,67, - 212,0,24,244,10,49,1,24,136,106,244,0,49,1,24,240, - 102,1,0,1,8,215,0,16,209,0,16,144,28,212,0,30, - 244,6,13,1,50,144,37,244,0,13,1,50,244,32,12,1, - 33,136,123,152,67,244,0,12,1,33,240,30,0,1,9,215, - 0,17,209,0,17,144,41,212,0,28,244,6,19,1,44,144, - 11,152,83,244,0,19,1,44,240,44,0,1,10,215,0,18, - 209,0,18,144,58,212,0,30,244,6,13,1,37,144,27,152, - 106,244,0,13,1,37,240,32,0,1,11,215,0,19,209,0, - 19,144,75,212,0,32,244,6,79,1,1,23,144,87,244,0, - 79,1,1,23,240,100,2,0,1,15,215,0,23,209,0,23, - 152,4,212,0,29,244,10,61,1,64,1,136,122,152,58,244, - 0,61,1,64,1,240,126,1,0,1,9,215,0,17,209,0, - 17,144,37,212,0,24,216,0,8,215,0,17,209,0,17,144, - 35,212,0,22,216,0,8,215,0,17,209,0,17,144,37,212, - 0,24,216,0,8,215,0,17,209,0,17,144,42,212,0,29, - 244,4,18,1,51,152,119,244,0,18,1,51,244,40,6,1, - 19,144,24,208,37,61,245,0,6,1,19,240,16,0,1,11, - 215,0,19,209,0,19,144,69,212,0,26,216,0,10,215,0, - 19,209,0,19,144,73,212,0,30,244,6,63,1,20,144,104, - 244,0,63,1,20,240,68,2,0,1,16,215,0,24,209,0, - 24,152,20,212,0,30,216,0,15,215,0,24,209,0,24,152, - 25,213,0,35,114,8,0,0,0, + 215,0,17,209,0,17,144,44,212,0,31,244,6,13,1,30, + 144,24,244,0,13,1,30,244,32,45,1,30,144,8,244,0, + 45,1,30,240,96,1,0,1,10,215,0,18,209,0,18,144, + 57,212,0,29,244,6,12,1,30,144,103,245,0,12,1,30, + 244,30,14,1,50,152,39,245,0,14,1,50,244,34,8,1, + 30,144,21,152,8,160,41,244,0,8,1,30,244,22,12,1, + 30,144,119,245,0,12,1,30,244,30,52,1,64,1,152,76, + 244,0,52,1,64,1,242,108,1,10,1,86,1,242,24,15, + 1,21,244,36,14,1,59,152,23,245,0,14,1,59,244,40, + 71,2,1,17,136,42,244,0,71,2,1,17,240,84,4,0, + 1,4,135,12,129,12,136,89,212,0,23,244,6,77,1,1, + 20,144,19,244,0,77,1,1,20,240,96,2,0,1,11,215, + 0,19,209,0,19,144,67,212,0,24,244,10,49,1,24,136, + 106,244,0,49,1,24,240,102,1,0,1,8,215,0,16,209, + 0,16,144,28,212,0,30,244,6,13,1,50,144,37,244,0, + 13,1,50,244,32,12,1,33,136,123,152,67,244,0,12,1, + 33,240,30,0,1,9,215,0,17,209,0,17,144,41,212,0, + 28,244,6,19,1,44,144,11,152,83,244,0,19,1,44,240, + 44,0,1,10,215,0,18,209,0,18,144,58,212,0,30,244, + 6,13,1,37,144,27,152,106,244,0,13,1,37,240,32,0, + 1,11,215,0,19,209,0,19,144,75,212,0,32,244,6,79, + 1,1,23,144,87,244,0,79,1,1,23,240,100,2,0,1, + 15,215,0,23,209,0,23,152,4,212,0,29,244,10,61,1, + 64,1,136,122,152,58,244,0,61,1,64,1,240,126,1,0, + 1,9,215,0,17,209,0,17,144,37,212,0,24,216,0,8, + 215,0,17,209,0,17,144,35,212,0,22,216,0,8,215,0, + 17,209,0,17,144,37,212,0,24,216,0,8,215,0,17,209, + 0,17,144,42,212,0,29,244,4,18,1,51,152,119,244,0, + 18,1,51,244,40,6,1,19,144,24,208,37,61,245,0,6, + 1,19,240,16,0,1,11,215,0,19,209,0,19,144,69,212, + 0,26,216,0,10,215,0,19,209,0,19,144,73,212,0,30, + 244,6,63,1,20,144,104,244,0,63,1,20,240,68,2,0, + 1,16,215,0,24,209,0,24,152,20,212,0,30,216,0,15, + 215,0,24,209,0,24,152,25,213,0,35,114,8,0,0,0, }; diff --git a/contrib/tools/python3/Python/frozen_modules/importlib._bootstrap_external.h b/contrib/tools/python3/Python/frozen_modules/importlib._bootstrap_external.h index 742a31e268..4affed7e68 100644 --- a/contrib/tools/python3/Python/frozen_modules/importlib._bootstrap_external.h +++ b/contrib/tools/python3/Python/frozen_modules/importlib._bootstrap_external.h @@ -471,7 +471,7 @@ const unsigned char _Py_M__importlib__bootstrap_external[] = { 137,68,240,3,0,20,35,228,15,25,156,35,159,42,153,42, 155,44,168,4,211,15,45,208,8,45,224,15,19,136,11,114, 28,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0, - 0,6,0,0,0,3,0,0,0,243,196,1,0,0,151,0, + 0,6,0,0,0,3,0,0,0,243,246,1,0,0,151,0, 124,0,155,0,100,1,116,1,0,0,0,0,0,0,0,0, 124,0,171,1,0,0,0,0,0,0,155,0,157,3,125,3, 116,3,0,0,0,0,0,0,0,0,106,4,0,0,0,0, @@ -488,3359 +488,3368 @@ const unsigned char _Py_M__importlib__bootstrap_external[] = { 0,0,0,0,124,4,100,3,171,2,0,0,0,0,0,0, 53,0,125,5,124,5,106,17,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,124,1,171,1,0,0, - 0,0,0,0,1,0,100,4,100,4,100,4,171,2,0,0, - 0,0,0,0,1,0,116,3,0,0,0,0,0,0,0,0, - 106,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,3,124,0,171,2,0,0,0,0,0,0, - 1,0,121,4,35,0,49,0,115,1,119,2,1,0,89,0, - 1,0,1,0,140,32,120,3,89,0,119,1,35,0,116,20, - 0,0,0,0,0,0,0,0,36,0,114,39,1,0,9,0, - 116,3,0,0,0,0,0,0,0,0,106,22,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,3, - 171,1,0,0,0,0,0,0,1,0,130,0,35,0,116,20, - 0,0,0,0,0,0,0,0,36,0,114,3,1,0,89,0, - 130,0,119,0,120,3,89,0,119,1,119,0,120,3,89,0, - 119,1,41,5,122,162,66,101,115,116,45,101,102,102,111,114, - 116,32,102,117,110,99,116,105,111,110,32,116,111,32,119,114, - 105,116,101,32,100,97,116,97,32,116,111,32,97,32,112,97, - 116,104,32,97,116,111,109,105,99,97,108,108,121,46,10,32, - 32,32,32,66,101,32,112,114,101,112,97,114,101,100,32,116, - 111,32,104,97,110,100,108,101,32,97,32,70,105,108,101,69, - 120,105,115,116,115,69,114,114,111,114,32,105,102,32,99,111, - 110,99,117,114,114,101,110,116,32,119,114,105,116,105,110,103, - 32,111,102,32,116,104,101,10,32,32,32,32,116,101,109,112, - 111,114,97,114,121,32,102,105,108,101,32,105,115,32,97,116, - 116,101,109,112,116,101,100,46,114,103,0,0,0,233,182,1, - 0,0,218,2,119,98,78,41,12,218,2,105,100,114,23,0, - 0,0,218,4,111,112,101,110,218,6,79,95,69,88,67,76, - 218,7,79,95,67,82,69,65,84,218,8,79,95,87,82,79, - 78,76,89,218,3,95,105,111,218,6,70,105,108,101,73,79, - 218,5,119,114,105,116,101,114,99,0,0,0,114,87,0,0, - 0,218,6,117,110,108,105,110,107,41,6,114,68,0,0,0, - 114,48,0,0,0,114,89,0,0,0,218,8,112,97,116,104, - 95,116,109,112,218,2,102,100,218,4,102,105,108,101,115,6, - 0,0,0,32,32,32,32,32,32,114,10,0,0,0,218,13, - 95,119,114,105,116,101,95,97,116,111,109,105,99,114,121,0, - 0,0,195,0,0,0,115,196,0,0,0,128,0,240,10,0, - 19,23,144,22,144,113,156,18,152,68,155,24,152,10,208,15, - 35,128,72,220,9,12,143,24,137,24,144,40,220,18,21,151, - 42,145,42,156,115,159,123,153,123,209,18,42,172,83,175,92, - 169,92,209,18,57,184,52,192,37,185,60,243,3,1,10,73, - 1,128,66,240,4,11,5,14,244,6,0,14,17,143,90,137, - 90,152,2,152,68,212,13,33,160,84,216,12,16,143,74,137, - 74,144,116,212,12,28,247,3,0,14,34,228,8,11,143,11, - 137,11,144,72,152,100,213,8,35,247,5,0,14,34,208,13, - 33,251,244,6,0,12,19,242,0,5,5,14,240,2,3,9, - 17,220,12,15,143,74,137,74,144,120,212,12,32,240,6,0, - 9,14,248,244,5,0,16,23,242,0,1,9,17,216,12,16, - 216,8,13,240,5,1,9,17,250,240,7,5,5,14,250,115, - 72,0,0,0,193,28,22,66,47,0,193,50,18,66,35,3, - 194,4,30,66,47,0,194,35,5,66,44,7,194,40,7,66, - 47,0,194,47,9,67,31,3,194,57,21,67,15,2,195,14, - 1,67,31,3,195,15,9,67,27,5,195,24,2,67,31,3, - 195,26,1,67,27,5,195,27,4,67,31,3,105,203,13,0, - 0,114,52,0,0,0,114,39,0,0,0,115,2,0,0,0, - 13,10,218,11,95,95,112,121,99,97,99,104,101,95,95,122, - 4,111,112,116,45,122,3,46,112,121,122,4,46,112,121,119, - 122,4,46,112,121,99,41,1,218,12,111,112,116,105,109,105, - 122,97,116,105,111,110,99,2,0,0,0,0,0,0,0,1, - 0,0,0,6,0,0,0,3,0,0,0,243,60,3,0,0, - 151,0,124,1,129,47,116,1,0,0,0,0,0,0,0,0, - 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,100,2,116,4,0,0,0,0,0,0,0,0, - 171,2,0,0,0,0,0,0,1,0,124,2,129,13,100,3, - 125,3,116,7,0,0,0,0,0,0,0,0,124,3,171,1, - 0,0,0,0,0,0,130,1,124,1,114,2,100,4,110,1, - 100,5,125,2,116,9,0,0,0,0,0,0,0,0,106,10, + 0,0,0,0,125,6,100,4,100,4,100,4,171,2,0,0, + 0,0,0,0,1,0,127,6,116,19,0,0,0,0,0,0, + 0,0,124,1,171,1,0,0,0,0,0,0,107,55,0,0, + 114,11,116,21,0,0,0,0,0,0,0,0,100,5,171,1, + 0,0,0,0,0,0,130,1,116,3,0,0,0,0,0,0, + 0,0,106,22,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,3,124,0,171,2,0,0,0,0, + 0,0,1,0,121,4,35,0,49,0,115,1,119,2,1,0, + 89,0,1,0,1,0,140,57,120,3,89,0,119,1,35,0, + 116,20,0,0,0,0,0,0,0,0,36,0,114,39,1,0, + 9,0,116,3,0,0,0,0,0,0,0,0,106,24,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 124,3,171,1,0,0,0,0,0,0,1,0,130,0,35,0, + 116,20,0,0,0,0,0,0,0,0,36,0,114,3,1,0, + 89,0,130,0,119,0,120,3,89,0,119,1,119,0,120,3, + 89,0,119,1,41,6,122,162,66,101,115,116,45,101,102,102, + 111,114,116,32,102,117,110,99,116,105,111,110,32,116,111,32, + 119,114,105,116,101,32,100,97,116,97,32,116,111,32,97,32, + 112,97,116,104,32,97,116,111,109,105,99,97,108,108,121,46, + 10,32,32,32,32,66,101,32,112,114,101,112,97,114,101,100, + 32,116,111,32,104,97,110,100,108,101,32,97,32,70,105,108, + 101,69,120,105,115,116,115,69,114,114,111,114,32,105,102,32, + 99,111,110,99,117,114,114,101,110,116,32,119,114,105,116,105, + 110,103,32,111,102,32,116,104,101,10,32,32,32,32,116,101, + 109,112,111,114,97,114,121,32,102,105,108,101,32,105,115,32, + 97,116,116,101,109,112,116,101,100,46,114,103,0,0,0,233, + 182,1,0,0,218,2,119,98,78,122,41,111,115,46,119,114, + 105,116,101,40,41,32,100,105,100,110,39,116,32,119,114,105, + 116,101,32,116,104,101,32,102,117,108,108,32,112,121,99,32, + 102,105,108,101,41,13,218,2,105,100,114,23,0,0,0,218, + 4,111,112,101,110,218,6,79,95,69,88,67,76,218,7,79, + 95,67,82,69,65,84,218,8,79,95,87,82,79,78,76,89, + 218,3,95,105,111,218,6,70,105,108,101,73,79,218,5,119, + 114,105,116,101,114,7,0,0,0,114,87,0,0,0,114,99, + 0,0,0,218,6,117,110,108,105,110,107,41,7,114,68,0, + 0,0,114,48,0,0,0,114,89,0,0,0,218,8,112,97, + 116,104,95,116,109,112,218,2,102,100,218,4,102,105,108,101, + 218,13,98,121,116,101,115,95,119,114,105,116,116,101,110,115, + 7,0,0,0,32,32,32,32,32,32,32,114,10,0,0,0, + 218,13,95,119,114,105,116,101,95,97,116,111,109,105,99,114, + 122,0,0,0,195,0,0,0,115,224,0,0,0,128,0,240, + 10,0,19,23,144,22,144,113,156,18,152,68,155,24,152,10, + 208,15,35,128,72,220,9,12,143,24,137,24,144,40,220,18, + 21,151,42,145,42,156,115,159,123,153,123,209,18,42,172,83, + 175,92,169,92,209,18,57,184,52,192,37,185,60,243,3,1, + 10,73,1,128,66,240,4,15,5,14,244,6,0,14,17,143, + 90,137,90,152,2,152,68,212,13,33,160,84,216,28,32,159, + 74,153,74,160,116,211,28,44,136,77,247,3,0,14,34,224, + 11,24,156,67,160,4,155,73,210,11,37,244,6,0,19,26, + 208,26,69,211,18,70,208,12,70,220,8,11,143,11,137,11, + 144,72,152,100,213,8,35,247,13,0,14,34,208,13,33,251, + 244,14,0,12,19,242,0,5,5,14,240,2,3,9,17,220, + 12,15,143,74,137,74,144,120,212,12,32,240,6,0,9,14, + 248,244,5,0,16,23,242,0,1,9,17,216,12,16,216,8, + 13,240,5,1,9,17,250,240,7,5,5,14,250,115,72,0, + 0,0,193,28,22,67,8,0,193,50,18,66,60,3,194,4, + 55,67,8,0,194,60,5,67,5,7,195,1,7,67,8,0, + 195,8,9,67,56,3,195,18,21,67,40,2,195,39,1,67, + 56,3,195,40,9,67,52,5,195,49,2,67,56,3,195,51, + 1,67,52,5,195,52,4,67,56,3,105,203,13,0,0,114, + 52,0,0,0,114,39,0,0,0,115,2,0,0,0,13,10, + 218,11,95,95,112,121,99,97,99,104,101,95,95,122,4,111, + 112,116,45,122,3,46,112,121,122,4,46,112,121,119,122,4, + 46,112,121,99,41,1,218,12,111,112,116,105,109,105,122,97, + 116,105,111,110,99,2,0,0,0,0,0,0,0,1,0,0, + 0,6,0,0,0,3,0,0,0,243,60,3,0,0,151,0, + 124,1,129,47,116,1,0,0,0,0,0,0,0,0,106,2, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,100,2,116,4,0,0,0,0,0,0,0,0,171,2, + 0,0,0,0,0,0,1,0,124,2,129,13,100,3,125,3, + 116,7,0,0,0,0,0,0,0,0,124,3,171,1,0,0, + 0,0,0,0,130,1,124,1,114,2,100,4,110,1,100,5, + 125,2,116,9,0,0,0,0,0,0,0,0,106,10,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 124,0,171,1,0,0,0,0,0,0,125,0,116,13,0,0, + 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, + 92,2,0,0,125,4,125,5,124,5,106,15,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,6, + 171,1,0,0,0,0,0,0,92,3,0,0,125,6,125,7, + 125,8,116,16,0,0,0,0,0,0,0,0,106,18,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,0,171,1,0,0,0,0,0,0,125,0,116,13, - 0,0,0,0,0,0,0,0,124,0,171,1,0,0,0,0, - 0,0,92,2,0,0,125,4,125,5,124,5,106,15,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 100,6,171,1,0,0,0,0,0,0,92,3,0,0,125,6, - 125,7,125,8,116,16,0,0,0,0,0,0,0,0,106,18, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,106,20,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,125,9,124,9,128,11,116,23,0,0, - 0,0,0,0,0,0,100,7,171,1,0,0,0,0,0,0, - 130,1,100,4,106,25,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,6,114,2,124,6,110,1, - 124,8,124,7,124,9,103,3,171,1,0,0,0,0,0,0, - 125,10,124,2,128,58,116,16,0,0,0,0,0,0,0,0, - 106,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,106,28,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,100,8,107,40,0,0,114,3, - 100,4,125,2,110,26,116,16,0,0,0,0,0,0,0,0, - 106,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,106,28,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,125,2,116,31,0,0,0,0, - 0,0,0,0,124,2,171,1,0,0,0,0,0,0,125,2, - 124,2,100,4,107,55,0,0,114,43,124,2,106,33,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 171,0,0,0,0,0,0,0,115,14,116,35,0,0,0,0, - 0,0,0,0,124,2,155,2,100,9,157,2,171,1,0,0, - 0,0,0,0,130,1,124,10,155,0,100,6,116,36,0,0, - 0,0,0,0,0,0,155,0,124,2,155,0,157,4,125,10, - 124,10,116,38,0,0,0,0,0,0,0,0,100,8,25,0, - 0,0,122,0,0,0,125,11,116,16,0,0,0,0,0,0, - 0,0,106,40,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,129,81,116,43,0,0,0,0,0,0, - 0,0,124,4,171,1,0,0,0,0,0,0,125,4,124,4, - 100,5,25,0,0,0,100,10,107,40,0,0,114,16,124,4, - 100,8,25,0,0,0,116,44,0,0,0,0,0,0,0,0, - 118,1,114,5,124,4,100,11,100,1,26,0,125,4,116,47, - 0,0,0,0,0,0,0,0,116,16,0,0,0,0,0,0, - 0,0,106,40,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,4,106,49,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,116,44,0,0, - 0,0,0,0,0,0,171,1,0,0,0,0,0,0,124,11, - 171,3,0,0,0,0,0,0,83,0,116,47,0,0,0,0, - 0,0,0,0,124,4,116,50,0,0,0,0,0,0,0,0, - 124,11,171,3,0,0,0,0,0,0,83,0,41,12,97,254, - 2,0,0,71,105,118,101,110,32,116,104,101,32,112,97,116, - 104,32,116,111,32,97,32,46,112,121,32,102,105,108,101,44, - 32,114,101,116,117,114,110,32,116,104,101,32,112,97,116,104, - 32,116,111,32,105,116,115,32,46,112,121,99,32,102,105,108, - 101,46,10,10,32,32,32,32,84,104,101,32,46,112,121,32, - 102,105,108,101,32,100,111,101,115,32,110,111,116,32,110,101, - 101,100,32,116,111,32,101,120,105,115,116,59,32,116,104,105, - 115,32,115,105,109,112,108,121,32,114,101,116,117,114,110,115, - 32,116,104,101,32,112,97,116,104,32,116,111,32,116,104,101, - 10,32,32,32,32,46,112,121,99,32,102,105,108,101,32,99, - 97,108,99,117,108,97,116,101,100,32,97,115,32,105,102,32, - 116,104,101,32,46,112,121,32,102,105,108,101,32,119,101,114, - 101,32,105,109,112,111,114,116,101,100,46,10,10,32,32,32, - 32,84,104,101,32,39,111,112,116,105,109,105,122,97,116,105, - 111,110,39,32,112,97,114,97,109,101,116,101,114,32,99,111, - 110,116,114,111,108,115,32,116,104,101,32,112,114,101,115,117, - 109,101,100,32,111,112,116,105,109,105,122,97,116,105,111,110, - 32,108,101,118,101,108,32,111,102,10,32,32,32,32,116,104, - 101,32,98,121,116,101,99,111,100,101,32,102,105,108,101,46, - 32,73,102,32,39,111,112,116,105,109,105,122,97,116,105,111, - 110,39,32,105,115,32,110,111,116,32,78,111,110,101,44,32, - 116,104,101,32,115,116,114,105,110,103,32,114,101,112,114,101, - 115,101,110,116,97,116,105,111,110,10,32,32,32,32,111,102, - 32,116,104,101,32,97,114,103,117,109,101,110,116,32,105,115, - 32,116,97,107,101,110,32,97,110,100,32,118,101,114,105,102, - 105,101,100,32,116,111,32,98,101,32,97,108,112,104,97,110, - 117,109,101,114,105,99,32,40,101,108,115,101,32,86,97,108, - 117,101,69,114,114,111,114,10,32,32,32,32,105,115,32,114, - 97,105,115,101,100,41,46,10,10,32,32,32,32,84,104,101, - 32,100,101,98,117,103,95,111,118,101,114,114,105,100,101,32, - 112,97,114,97,109,101,116,101,114,32,105,115,32,100,101,112, - 114,101,99,97,116,101,100,46,32,73,102,32,100,101,98,117, - 103,95,111,118,101,114,114,105,100,101,32,105,115,32,110,111, - 116,32,78,111,110,101,44,10,32,32,32,32,97,32,84,114, - 117,101,32,118,97,108,117,101,32,105,115,32,116,104,101,32, - 115,97,109,101,32,97,115,32,115,101,116,116,105,110,103,32, - 39,111,112,116,105,109,105,122,97,116,105,111,110,39,32,116, - 111,32,116,104,101,32,101,109,112,116,121,32,115,116,114,105, - 110,103,10,32,32,32,32,119,104,105,108,101,32,97,32,70, - 97,108,115,101,32,118,97,108,117,101,32,105,115,32,101,113, - 117,105,118,97,108,101,110,116,32,116,111,32,115,101,116,116, - 105,110,103,32,39,111,112,116,105,109,105,122,97,116,105,111, - 110,39,32,116,111,32,39,49,39,46,10,10,32,32,32,32, - 73,102,32,115,121,115,46,105,109,112,108,101,109,101,110,116, - 97,116,105,111,110,46,99,97,99,104,101,95,116,97,103,32, - 105,115,32,78,111,110,101,32,116,104,101,110,32,78,111,116, - 73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114, + 106,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,125,9,124,9,128,11,116,23,0,0,0,0, + 0,0,0,0,100,7,171,1,0,0,0,0,0,0,130,1, + 100,4,106,25,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,6,114,2,124,6,110,1,124,8, + 124,7,124,9,103,3,171,1,0,0,0,0,0,0,125,10, + 124,2,128,58,116,16,0,0,0,0,0,0,0,0,106,26, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,106,28,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,100,8,107,40,0,0,114,3,100,4, + 125,2,110,26,116,16,0,0,0,0,0,0,0,0,106,26, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,106,28,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,125,2,116,31,0,0,0,0,0,0, + 0,0,124,2,171,1,0,0,0,0,0,0,125,2,124,2, + 100,4,107,55,0,0,114,43,124,2,106,33,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,0, + 0,0,0,0,0,0,115,14,116,35,0,0,0,0,0,0, + 0,0,124,2,155,2,100,9,157,2,171,1,0,0,0,0, + 0,0,130,1,124,10,155,0,100,6,116,36,0,0,0,0, + 0,0,0,0,155,0,124,2,155,0,157,4,125,10,124,10, + 116,38,0,0,0,0,0,0,0,0,100,8,25,0,0,0, + 122,0,0,0,125,11,116,16,0,0,0,0,0,0,0,0, + 106,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,129,81,116,43,0,0,0,0,0,0,0,0, + 124,4,171,1,0,0,0,0,0,0,125,4,124,4,100,5, + 25,0,0,0,100,10,107,40,0,0,114,16,124,4,100,8, + 25,0,0,0,116,44,0,0,0,0,0,0,0,0,118,1, + 114,5,124,4,100,11,100,1,26,0,125,4,116,47,0,0, + 0,0,0,0,0,0,116,16,0,0,0,0,0,0,0,0, + 106,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,4,106,49,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,116,44,0,0,0,0, + 0,0,0,0,171,1,0,0,0,0,0,0,124,11,171,3, + 0,0,0,0,0,0,83,0,116,47,0,0,0,0,0,0, + 0,0,124,4,116,50,0,0,0,0,0,0,0,0,124,11, + 171,3,0,0,0,0,0,0,83,0,41,12,97,254,2,0, + 0,71,105,118,101,110,32,116,104,101,32,112,97,116,104,32, + 116,111,32,97,32,46,112,121,32,102,105,108,101,44,32,114, + 101,116,117,114,110,32,116,104,101,32,112,97,116,104,32,116, + 111,32,105,116,115,32,46,112,121,99,32,102,105,108,101,46, + 10,10,32,32,32,32,84,104,101,32,46,112,121,32,102,105, + 108,101,32,100,111,101,115,32,110,111,116,32,110,101,101,100, + 32,116,111,32,101,120,105,115,116,59,32,116,104,105,115,32, + 115,105,109,112,108,121,32,114,101,116,117,114,110,115,32,116, + 104,101,32,112,97,116,104,32,116,111,32,116,104,101,10,32, + 32,32,32,46,112,121,99,32,102,105,108,101,32,99,97,108, + 99,117,108,97,116,101,100,32,97,115,32,105,102,32,116,104, + 101,32,46,112,121,32,102,105,108,101,32,119,101,114,101,32, + 105,109,112,111,114,116,101,100,46,10,10,32,32,32,32,84, + 104,101,32,39,111,112,116,105,109,105,122,97,116,105,111,110, + 39,32,112,97,114,97,109,101,116,101,114,32,99,111,110,116, + 114,111,108,115,32,116,104,101,32,112,114,101,115,117,109,101, + 100,32,111,112,116,105,109,105,122,97,116,105,111,110,32,108, + 101,118,101,108,32,111,102,10,32,32,32,32,116,104,101,32, + 98,121,116,101,99,111,100,101,32,102,105,108,101,46,32,73, + 102,32,39,111,112,116,105,109,105,122,97,116,105,111,110,39, + 32,105,115,32,110,111,116,32,78,111,110,101,44,32,116,104, + 101,32,115,116,114,105,110,103,32,114,101,112,114,101,115,101, + 110,116,97,116,105,111,110,10,32,32,32,32,111,102,32,116, + 104,101,32,97,114,103,117,109,101,110,116,32,105,115,32,116, + 97,107,101,110,32,97,110,100,32,118,101,114,105,102,105,101, + 100,32,116,111,32,98,101,32,97,108,112,104,97,110,117,109, + 101,114,105,99,32,40,101,108,115,101,32,86,97,108,117,101, + 69,114,114,111,114,10,32,32,32,32,105,115,32,114,97,105, + 115,101,100,41,46,10,10,32,32,32,32,84,104,101,32,100, + 101,98,117,103,95,111,118,101,114,114,105,100,101,32,112,97, + 114,97,109,101,116,101,114,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,46,32,73,102,32,100,101,98,117,103,95, + 111,118,101,114,114,105,100,101,32,105,115,32,110,111,116,32, + 78,111,110,101,44,10,32,32,32,32,97,32,84,114,117,101, + 32,118,97,108,117,101,32,105,115,32,116,104,101,32,115,97, + 109,101,32,97,115,32,115,101,116,116,105,110,103,32,39,111, + 112,116,105,109,105,122,97,116,105,111,110,39,32,116,111,32, + 116,104,101,32,101,109,112,116,121,32,115,116,114,105,110,103, + 10,32,32,32,32,119,104,105,108,101,32,97,32,70,97,108, + 115,101,32,118,97,108,117,101,32,105,115,32,101,113,117,105, + 118,97,108,101,110,116,32,116,111,32,115,101,116,116,105,110, + 103,32,39,111,112,116,105,109,105,122,97,116,105,111,110,39, + 32,116,111,32,39,49,39,46,10,10,32,32,32,32,73,102, + 32,115,121,115,46,105,109,112,108,101,109,101,110,116,97,116, + 105,111,110,46,99,97,99,104,101,95,116,97,103,32,105,115, + 32,78,111,110,101,32,116,104,101,110,32,78,111,116,73,109, + 112,108,101,109,101,110,116,101,100,69,114,114,111,114,32,105, + 115,32,114,97,105,115,101,100,46,10,10,32,32,32,32,78, + 122,70,116,104,101,32,100,101,98,117,103,95,111,118,101,114, + 114,105,100,101,32,112,97,114,97,109,101,116,101,114,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,59,32,117,115, + 101,32,39,111,112,116,105,109,105,122,97,116,105,111,110,39, + 32,105,110,115,116,101,97,100,122,50,100,101,98,117,103,95, + 111,118,101,114,114,105,100,101,32,111,114,32,111,112,116,105, + 109,105,122,97,116,105,111,110,32,109,117,115,116,32,98,101, + 32,115,101,116,32,116,111,32,78,111,110,101,114,12,0,0, + 0,114,6,0,0,0,114,103,0,0,0,250,36,115,121,115, + 46,105,109,112,108,101,109,101,110,116,97,116,105,111,110,46, + 99,97,99,104,101,95,116,97,103,32,105,115,32,78,111,110, + 101,114,1,0,0,0,122,20,32,105,115,32,110,111,116,32, + 97,108,112,104,97,110,117,109,101,114,105,99,114,13,0,0, + 0,114,52,0,0,0,41,26,218,9,95,119,97,114,110,105, + 110,103,115,218,4,119,97,114,110,218,18,68,101,112,114,101, + 99,97,116,105,111,110,87,97,114,110,105,110,103,218,9,84, + 121,112,101,69,114,114,111,114,114,23,0,0,0,218,6,102, + 115,112,97,116,104,114,81,0,0,0,218,10,114,112,97,114, + 116,105,116,105,111,110,114,20,0,0,0,218,14,105,109,112, + 108,101,109,101,110,116,97,116,105,111,110,218,9,99,97,99, + 104,101,95,116,97,103,218,19,78,111,116,73,109,112,108,101, + 109,101,110,116,101,100,69,114,114,111,114,114,65,0,0,0, + 114,21,0,0,0,218,8,111,112,116,105,109,105,122,101,218, + 3,115,116,114,218,7,105,115,97,108,110,117,109,218,10,86, + 97,108,117,101,69,114,114,111,114,218,4,95,79,80,84,218, + 17,66,89,84,69,67,79,68,69,95,83,85,70,70,73,88, + 69,83,218,14,112,121,99,97,99,104,101,95,112,114,101,102, + 105,120,114,105,0,0,0,114,61,0,0,0,114,72,0,0, + 0,218,6,108,115,116,114,105,112,218,8,95,80,89,67,65, + 67,72,69,41,12,114,68,0,0,0,218,14,100,101,98,117, + 103,95,111,118,101,114,114,105,100,101,114,124,0,0,0,218, + 7,109,101,115,115,97,103,101,218,4,104,101,97,100,114,70, + 0,0,0,218,4,98,97,115,101,114,9,0,0,0,218,4, + 114,101,115,116,218,3,116,97,103,218,15,97,108,109,111,115, + 116,95,102,105,108,101,110,97,109,101,218,8,102,105,108,101, + 110,97,109,101,115,12,0,0,0,32,32,32,32,32,32,32, + 32,32,32,32,32,114,10,0,0,0,218,17,99,97,99,104, + 101,95,102,114,111,109,95,115,111,117,114,99,101,114,153,0, + 0,0,230,1,0,0,115,159,1,0,0,128,0,240,36,0, + 8,22,208,7,33,220,8,17,143,14,137,14,240,0,1,24, + 48,220,49,67,244,3,1,9,69,1,224,11,23,208,11,35, + 216,22,74,136,71,220,18,27,152,71,211,18,36,208,12,36, + 217,29,43,145,114,176,17,136,12,220,11,14,143,58,137,58, + 144,100,211,11,27,128,68,220,17,28,152,84,211,17,34,129, + 74,128,68,136,36,216,22,26,151,111,145,111,160,99,211,22, + 42,129,79,128,68,136,35,136,116,220,10,13,215,10,28,209, + 10,28,215,10,38,209,10,38,128,67,216,7,10,128,123,220, + 14,33,208,34,72,211,14,73,208,8,73,216,22,24,151,103, + 145,103,169,4,161,4,176,36,184,19,184,99,208,30,66,211, + 22,67,128,79,216,7,19,208,7,27,220,11,14,143,57,137, + 57,215,11,29,209,11,29,160,17,210,11,34,216,27,29,137, + 76,228,27,30,159,57,153,57,215,27,45,209,27,45,136,76, + 220,19,22,144,124,211,19,36,128,76,216,7,19,144,114,210, + 7,25,216,15,27,215,15,35,209,15,35,212,15,37,220,18, + 28,160,12,208,31,47,208,47,67,208,29,68,211,18,69,208, + 12,69,216,29,44,208,28,45,168,81,172,116,168,102,176,92, + 176,78,208,26,67,136,15,216,15,30,212,33,50,176,49,209, + 33,53,209,15,53,128,72,220,7,10,215,7,25,209,7,25, + 208,7,37,244,18,0,16,29,152,84,211,15,34,136,4,240, + 10,0,12,16,144,1,137,55,144,99,138,62,152,100,160,49, + 153,103,172,95,209,30,60,216,19,23,152,1,152,2,144,56, + 136,68,244,8,0,16,26,220,12,15,215,12,30,209,12,30, + 216,12,16,143,75,137,75,156,15,211,12,40,216,12,20,243, + 7,4,16,10,240,0,4,9,10,244,10,0,12,22,144,100, + 156,72,160,104,211,11,47,208,4,47,114,28,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, + 3,0,0,0,243,36,3,0,0,151,0,116,0,0,0,0, + 0,0,0,0,0,106,2,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,106,4,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,128,11,116, + 7,0,0,0,0,0,0,0,0,100,2,171,1,0,0,0, + 0,0,0,130,1,116,9,0,0,0,0,0,0,0,0,106, + 10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,0,171,1,0,0,0,0,0,0,125,0,116, + 13,0,0,0,0,0,0,0,0,124,0,171,1,0,0,0, + 0,0,0,92,2,0,0,125,1,125,2,100,3,125,3,116, + 0,0,0,0,0,0,0,0,0,106,14,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,129,75,116, + 0,0,0,0,0,0,0,0,0,106,14,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,106,17,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,116,18,0,0,0,0,0,0,0,0,171,1,0,0,0, + 0,0,0,125,4,124,1,106,21,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,4,116,22,0, + 0,0,0,0,0,0,0,122,0,0,0,171,1,0,0,0, + 0,0,0,114,16,124,1,116,25,0,0,0,0,0,0,0, + 0,124,4,171,1,0,0,0,0,0,0,100,1,26,0,125, + 1,100,4,125,3,124,3,115,43,116,13,0,0,0,0,0, + 0,0,0,124,1,171,1,0,0,0,0,0,0,92,2,0, + 0,125,1,125,5,124,5,116,26,0,0,0,0,0,0,0, + 0,107,55,0,0,114,20,116,29,0,0,0,0,0,0,0, + 0,116,26,0,0,0,0,0,0,0,0,155,0,100,5,124, + 0,155,2,157,3,171,1,0,0,0,0,0,0,130,1,124, + 2,106,31,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,100,6,171,1,0,0,0,0,0,0,125, + 6,124,6,100,7,118,1,114,14,116,29,0,0,0,0,0, + 0,0,0,100,8,124,2,155,2,157,2,171,1,0,0,0, + 0,0,0,130,1,124,6,100,9,107,40,0,0,114,109,124, + 2,106,33,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,100,6,100,10,171,2,0,0,0,0,0, + 0,100,11,25,0,0,0,125,7,124,7,106,21,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,116, + 34,0,0,0,0,0,0,0,0,171,1,0,0,0,0,0, + 0,115,18,116,29,0,0,0,0,0,0,0,0,100,12,116, + 34,0,0,0,0,0,0,0,0,155,2,157,2,171,1,0, + 0,0,0,0,0,130,1,124,7,116,25,0,0,0,0,0, + 0,0,0,116,34,0,0,0,0,0,0,0,0,171,1,0, + 0,0,0,0,0,100,1,26,0,125,8,124,8,106,37,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,171,0,0,0,0,0,0,0,115,15,116,29,0,0,0, + 0,0,0,0,0,100,13,124,7,155,2,100,14,157,3,171, + 1,0,0,0,0,0,0,130,1,124,2,106,39,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, + 6,171,1,0,0,0,0,0,0,100,15,25,0,0,0,125, + 9,116,41,0,0,0,0,0,0,0,0,124,1,124,9,116, + 42,0,0,0,0,0,0,0,0,100,15,25,0,0,0,122, + 0,0,0,171,2,0,0,0,0,0,0,83,0,41,16,97, + 110,1,0,0,71,105,118,101,110,32,116,104,101,32,112,97, + 116,104,32,116,111,32,97,32,46,112,121,99,46,32,102,105, + 108,101,44,32,114,101,116,117,114,110,32,116,104,101,32,112, + 97,116,104,32,116,111,32,105,116,115,32,46,112,121,32,102, + 105,108,101,46,10,10,32,32,32,32,84,104,101,32,46,112, + 121,99,32,102,105,108,101,32,100,111,101,115,32,110,111,116, + 32,110,101,101,100,32,116,111,32,101,120,105,115,116,59,32, + 116,104,105,115,32,115,105,109,112,108,121,32,114,101,116,117, + 114,110,115,32,116,104,101,32,112,97,116,104,32,116,111,10, + 32,32,32,32,116,104,101,32,46,112,121,32,102,105,108,101, + 32,99,97,108,99,117,108,97,116,101,100,32,116,111,32,99, + 111,114,114,101,115,112,111,110,100,32,116,111,32,116,104,101, + 32,46,112,121,99,32,102,105,108,101,46,32,32,73,102,32, + 112,97,116,104,32,100,111,101,115,10,32,32,32,32,110,111, + 116,32,99,111,110,102,111,114,109,32,116,111,32,80,69,80, + 32,51,49,52,55,47,52,56,56,32,102,111,114,109,97,116, + 44,32,86,97,108,117,101,69,114,114,111,114,32,119,105,108, + 108,32,98,101,32,114,97,105,115,101,100,46,32,73,102,10, + 32,32,32,32,115,121,115,46,105,109,112,108,101,109,101,110, + 116,97,116,105,111,110,46,99,97,99,104,101,95,116,97,103, + 32,105,115,32,78,111,110,101,32,116,104,101,110,32,78,111, + 116,73,109,112,108,101,109,101,110,116,101,100,69,114,114,111, + 114,32,105,115,32,114,97,105,115,101,100,46,10,10,32,32, + 32,32,78,114,126,0,0,0,70,84,122,31,32,110,111,116, + 32,98,111,116,116,111,109,45,108,101,118,101,108,32,100,105, + 114,101,99,116,111,114,121,32,105,110,32,114,103,0,0,0, + 62,2,0,0,0,114,52,0,0,0,233,3,0,0,0,122, + 29,101,120,112,101,99,116,101,100,32,111,110,108,121,32,50, + 32,111,114,32,51,32,100,111,116,115,32,105,110,32,114,155, + 0,0,0,114,52,0,0,0,233,254,255,255,255,122,53,111, + 112,116,105,109,105,122,97,116,105,111,110,32,112,111,114,116, + 105,111,110,32,111,102,32,102,105,108,101,110,97,109,101,32, + 100,111,101,115,32,110,111,116,32,115,116,97,114,116,32,119, + 105,116,104,32,122,19,111,112,116,105,109,105,122,97,116,105, + 111,110,32,108,101,118,101,108,32,122,29,32,105,115,32,110, + 111,116,32,97,110,32,97,108,112,104,97,110,117,109,101,114, + 105,99,32,118,97,108,117,101,114,1,0,0,0,41,22,114, + 20,0,0,0,114,133,0,0,0,114,134,0,0,0,114,135, + 0,0,0,114,23,0,0,0,114,131,0,0,0,114,81,0, + 0,0,114,142,0,0,0,114,60,0,0,0,114,61,0,0, + 0,114,32,0,0,0,114,62,0,0,0,114,7,0,0,0, + 114,144,0,0,0,114,139,0,0,0,218,5,99,111,117,110, + 116,218,6,114,115,112,108,105,116,114,140,0,0,0,114,138, + 0,0,0,218,9,112,97,114,116,105,116,105,111,110,114,72, + 0,0,0,218,15,83,79,85,82,67,69,95,83,85,70,70, + 73,88,69,83,41,10,114,68,0,0,0,114,147,0,0,0, + 218,16,112,121,99,97,99,104,101,95,102,105,108,101,110,97, + 109,101,218,23,102,111,117,110,100,95,105,110,95,112,121,99, + 97,99,104,101,95,112,114,101,102,105,120,218,13,115,116,114, + 105,112,112,101,100,95,112,97,116,104,218,7,112,121,99,97, + 99,104,101,218,9,100,111,116,95,99,111,117,110,116,114,124, + 0,0,0,218,9,111,112,116,95,108,101,118,101,108,218,13, + 98,97,115,101,95,102,105,108,101,110,97,109,101,115,10,0, + 0,0,32,32,32,32,32,32,32,32,32,32,114,10,0,0, + 0,218,17,115,111,117,114,99,101,95,102,114,111,109,95,99, + 97,99,104,101,114,168,0,0,0,44,2,0,0,115,165,1, + 0,0,128,0,244,18,0,8,11,215,7,25,209,7,25,215, + 7,35,209,7,35,208,7,43,220,14,33,208,34,72,211,14, + 73,208,8,73,220,11,14,143,58,137,58,144,100,211,11,27, + 128,68,220,29,40,168,20,211,29,46,209,4,26,128,68,208, + 10,26,216,30,35,208,4,27,220,7,10,215,7,25,209,7, + 25,208,7,37,220,24,27,215,24,42,209,24,42,215,24,49, + 209,24,49,180,47,211,24,66,136,13,216,11,15,143,63,137, + 63,152,61,172,56,209,27,51,212,11,52,216,19,23,156,3, + 152,77,211,24,42,208,24,43,208,19,44,136,68,216,38,42, + 208,12,35,217,11,34,220,24,35,160,68,211,24,41,137,13, + 136,4,136,103,216,11,18,148,104,210,11,30,220,18,28,164, + 8,152,122,208,41,72,216,32,36,152,120,240,3,1,30,41, + 243,0,1,19,42,240,0,1,13,42,224,16,32,215,16,38, + 209,16,38,160,115,211,16,43,128,73,216,7,16,152,6,209, + 7,30,220,14,24,208,27,56,208,57,73,208,56,76,208,25, + 77,211,14,78,208,8,78,216,9,18,144,97,138,30,216,23, + 39,215,23,46,209,23,46,168,115,176,65,211,23,54,176,114, + 209,23,58,136,12,216,15,27,215,15,38,209,15,38,164,116, + 212,15,44,220,18,28,240,0,1,30,37,220,37,41,160,72, + 240,3,1,30,46,243,0,1,19,47,240,0,1,13,47,224, + 20,32,164,19,164,84,163,25,160,26,208,20,44,136,9,216, + 15,24,215,15,32,209,15,32,212,15,34,220,18,28,208,31, + 50,176,60,208,50,66,240,0,1,67,1,50,240,0,1,30, + 50,243,0,1,19,51,240,0,1,13,51,224,20,36,215,20, + 46,209,20,46,168,115,211,20,51,176,65,209,20,54,128,77, + 220,11,21,144,100,152,77,172,79,184,65,209,44,62,209,28, + 62,211,11,63,208,4,63,114,28,0,0,0,99,1,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,0, + 0,243,232,0,0,0,151,0,116,1,0,0,0,0,0,0, + 0,0,124,0,171,1,0,0,0,0,0,0,100,1,107,40, + 0,0,114,1,121,2,124,0,106,3,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,100,3,171,1, + 0,0,0,0,0,0,92,3,0,0,125,1,125,2,125,3, + 124,1,114,22,124,3,106,5,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,171,0,0,0,0,0, + 0,0,100,4,100,5,26,0,100,6,107,55,0,0,114,2, + 124,0,83,0,9,0,116,7,0,0,0,0,0,0,0,0, + 124,0,171,1,0,0,0,0,0,0,125,4,116,13,0,0, + 0,0,0,0,0,0,124,4,171,1,0,0,0,0,0,0, + 114,2,124,4,83,0,124,0,83,0,35,0,116,8,0,0, + 0,0,0,0,0,0,116,10,0,0,0,0,0,0,0,0, + 102,2,36,0,114,8,1,0,124,0,100,2,100,5,26,0, + 125,4,89,0,140,37,119,0,120,3,89,0,119,1,41,7, + 122,188,67,111,110,118,101,114,116,32,97,32,98,121,116,101, + 99,111,100,101,32,102,105,108,101,32,112,97,116,104,32,116, + 111,32,97,32,115,111,117,114,99,101,32,112,97,116,104,32, + 40,105,102,32,112,111,115,115,105,98,108,101,41,46,10,10, + 32,32,32,32,84,104,105,115,32,102,117,110,99,116,105,111, + 110,32,101,120,105,115,116,115,32,112,117,114,101,108,121,32, + 102,111,114,32,98,97,99,107,119,97,114,100,115,45,99,111, + 109,112,97,116,105,98,105,108,105,116,121,32,102,111,114,10, + 32,32,32,32,80,121,73,109,112,111,114,116,95,69,120,101, + 99,67,111,100,101,77,111,100,117,108,101,87,105,116,104,70, + 105,108,101,110,97,109,101,115,40,41,32,105,110,32,116,104, + 101,32,67,32,65,80,73,46,10,10,32,32,32,32,114,1, + 0,0,0,78,114,103,0,0,0,233,253,255,255,255,233,255, + 255,255,255,218,2,112,121,41,7,114,7,0,0,0,114,132, + 0,0,0,218,5,108,111,119,101,114,114,168,0,0,0,114, + 135,0,0,0,114,139,0,0,0,114,93,0,0,0,41,5, + 218,13,98,121,116,101,99,111,100,101,95,112,97,116,104,114, + 149,0,0,0,218,1,95,218,9,101,120,116,101,110,115,105, + 111,110,218,11,115,111,117,114,99,101,95,112,97,116,104,115, + 5,0,0,0,32,32,32,32,32,114,10,0,0,0,218,15, + 95,103,101,116,95,115,111,117,114,99,101,102,105,108,101,114, + 178,0,0,0,84,2,0,0,115,142,0,0,0,128,0,244, + 14,0,8,11,136,61,211,7,25,152,81,210,7,30,216,15, + 19,216,25,38,215,25,49,209,25,49,176,35,211,25,54,209, + 4,22,128,68,136,33,136,89,217,11,15,144,57,151,63,145, + 63,211,19,36,160,82,168,2,208,19,43,168,116,210,19,51, + 216,15,28,208,8,28,240,2,3,5,41,220,22,39,168,13, + 211,22,54,136,11,244,6,0,27,39,160,123,212,26,51,136, + 59,208,4,70,184,29,208,4,70,248,244,5,0,13,32,164, + 26,208,11,44,242,0,1,5,41,216,22,35,160,67,160,82, + 208,22,40,138,11,240,3,1,5,41,250,115,18,0,0,0, + 193,0,11,65,26,0,193,26,20,65,49,3,193,48,1,65, + 49,3,99,1,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,3,0,0,0,243,182,0,0,0,151,0,124,0, + 106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,116,3,0,0,0,0,0,0,0,0,116,4, + 0,0,0,0,0,0,0,0,171,1,0,0,0,0,0,0, + 171,1,0,0,0,0,0,0,114,12,9,0,116,7,0,0, + 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, + 83,0,124,0,106,1,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,116,3,0,0,0,0,0,0, + 0,0,116,10,0,0,0,0,0,0,0,0,171,1,0,0, + 0,0,0,0,171,1,0,0,0,0,0,0,114,2,124,0, + 83,0,121,0,35,0,116,8,0,0,0,0,0,0,0,0, + 36,0,114,3,1,0,89,0,121,0,119,0,120,3,89,0, + 119,1,114,77,0,0,0,41,6,114,59,0,0,0,218,5, + 116,117,112,108,101,114,160,0,0,0,114,153,0,0,0,114, + 135,0,0,0,114,141,0,0,0,41,1,114,152,0,0,0, + 115,1,0,0,0,32,114,10,0,0,0,218,11,95,103,101, + 116,95,99,97,99,104,101,100,114,181,0,0,0,103,2,0, + 0,115,87,0,0,0,128,0,216,7,15,215,7,24,209,7, + 24,156,21,156,127,211,25,47,212,7,48,240,2,3,9,17, + 220,19,36,160,88,211,19,46,208,12,46,240,6,0,10,18, + 215,9,26,209,9,26,156,53,212,33,50,211,27,51,212,9, + 52,216,15,23,136,15,224,15,19,248,244,11,0,16,35,242, + 0,1,9,17,217,12,16,240,3,1,9,17,250,115,17,0, + 0,0,160,10,65,12,0,193,12,9,65,24,3,193,23,1, + 65,24,3,99,1,0,0,0,0,0,0,0,0,0,0,0, + 4,0,0,0,3,0,0,0,243,94,0,0,0,151,0,9, + 0,116,1,0,0,0,0,0,0,0,0,124,0,171,1,0, + 0,0,0,0,0,106,2,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,125,1,124,1,100,2,122, + 20,0,0,125,1,124,1,83,0,35,0,116,4,0,0,0, + 0,0,0,0,0,36,0,114,5,1,0,100,1,125,1,89, + 0,140,20,119,0,120,3,89,0,119,1,41,3,122,51,67, + 97,108,99,117,108,97,116,101,32,116,104,101,32,109,111,100, + 101,32,112,101,114,109,105,115,115,105,111,110,115,32,102,111, + 114,32,97,32,98,121,116,101,99,111,100,101,32,102,105,108, + 101,46,114,107,0,0,0,233,128,0,0,0,41,3,114,85, + 0,0,0,114,88,0,0,0,114,87,0,0,0,41,2,114, + 68,0,0,0,114,89,0,0,0,115,2,0,0,0,32,32, + 114,10,0,0,0,218,10,95,99,97,108,99,95,109,111,100, + 101,114,184,0,0,0,115,2,0,0,115,61,0,0,0,128, + 0,240,4,3,5,21,220,15,25,152,36,211,15,31,215,15, + 39,209,15,39,136,4,240,10,0,5,9,136,69,129,77,128, + 68,216,11,15,128,75,248,244,11,0,12,19,242,0,1,5, + 21,216,15,20,138,4,240,3,1,5,21,250,115,12,0,0, + 0,130,21,30,0,158,11,44,3,171,1,44,3,99,1,0, + 0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,0, + 0,0,243,90,0,0,0,135,0,151,0,100,3,136,0,102, + 1,100,1,132,9,125,1,116,0,0,0,0,0,0,0,0, + 0,129,17,116,0,0,0,0,0,0,0,0,0,106,2,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,125,2,110,3,100,2,132,0,125,2,2,0,124,2,124, + 1,137,0,171,2,0,0,0,0,0,0,1,0,124,1,83, + 0,41,4,122,252,68,101,99,111,114,97,116,111,114,32,116, + 111,32,118,101,114,105,102,121,32,116,104,97,116,32,116,104, + 101,32,109,111,100,117,108,101,32,98,101,105,110,103,32,114, + 101,113,117,101,115,116,101,100,32,109,97,116,99,104,101,115, + 32,116,104,101,32,111,110,101,32,116,104,101,10,32,32,32, + 32,108,111,97,100,101,114,32,99,97,110,32,104,97,110,100, + 108,101,46,10,10,32,32,32,32,84,104,101,32,102,105,114, + 115,116,32,97,114,103,117,109,101,110,116,32,40,115,101,108, + 102,41,32,109,117,115,116,32,100,101,102,105,110,101,32,95, + 110,97,109,101,32,119,104,105,99,104,32,116,104,101,32,115, + 101,99,111,110,100,32,97,114,103,117,109,101,110,116,32,105, + 115,10,32,32,32,32,99,111,109,112,97,114,101,100,32,97, + 103,97,105,110,115,116,46,32,73,102,32,116,104,101,32,99, + 111,109,112,97,114,105,115,111,110,32,102,97,105,108,115,32, + 116,104,101,110,32,73,109,112,111,114,116,69,114,114,111,114, 32,105,115,32,114,97,105,115,101,100,46,10,10,32,32,32, - 32,78,122,70,116,104,101,32,100,101,98,117,103,95,111,118, - 101,114,114,105,100,101,32,112,97,114,97,109,101,116,101,114, - 32,105,115,32,100,101,112,114,101,99,97,116,101,100,59,32, - 117,115,101,32,39,111,112,116,105,109,105,122,97,116,105,111, - 110,39,32,105,110,115,116,101,97,100,122,50,100,101,98,117, - 103,95,111,118,101,114,114,105,100,101,32,111,114,32,111,112, - 116,105,109,105,122,97,116,105,111,110,32,109,117,115,116,32, - 98,101,32,115,101,116,32,116,111,32,78,111,110,101,114,12, - 0,0,0,114,6,0,0,0,114,103,0,0,0,250,36,115, - 121,115,46,105,109,112,108,101,109,101,110,116,97,116,105,111, - 110,46,99,97,99,104,101,95,116,97,103,32,105,115,32,78, - 111,110,101,114,1,0,0,0,122,20,32,105,115,32,110,111, - 116,32,97,108,112,104,97,110,117,109,101,114,105,99,114,13, - 0,0,0,114,52,0,0,0,41,26,218,9,95,119,97,114, - 110,105,110,103,115,218,4,119,97,114,110,218,18,68,101,112, - 114,101,99,97,116,105,111,110,87,97,114,110,105,110,103,218, - 9,84,121,112,101,69,114,114,111,114,114,23,0,0,0,218, - 6,102,115,112,97,116,104,114,81,0,0,0,218,10,114,112, - 97,114,116,105,116,105,111,110,114,20,0,0,0,218,14,105, - 109,112,108,101,109,101,110,116,97,116,105,111,110,218,9,99, - 97,99,104,101,95,116,97,103,218,19,78,111,116,73,109,112, - 108,101,109,101,110,116,101,100,69,114,114,111,114,114,65,0, - 0,0,114,21,0,0,0,218,8,111,112,116,105,109,105,122, - 101,218,3,115,116,114,218,7,105,115,97,108,110,117,109,218, - 10,86,97,108,117,101,69,114,114,111,114,218,4,95,79,80, - 84,218,17,66,89,84,69,67,79,68,69,95,83,85,70,70, - 73,88,69,83,218,14,112,121,99,97,99,104,101,95,112,114, - 101,102,105,120,114,105,0,0,0,114,61,0,0,0,114,72, - 0,0,0,218,6,108,115,116,114,105,112,218,8,95,80,89, - 67,65,67,72,69,41,12,114,68,0,0,0,218,14,100,101, - 98,117,103,95,111,118,101,114,114,105,100,101,114,123,0,0, - 0,218,7,109,101,115,115,97,103,101,218,4,104,101,97,100, - 114,70,0,0,0,218,4,98,97,115,101,114,9,0,0,0, - 218,4,114,101,115,116,218,3,116,97,103,218,15,97,108,109, - 111,115,116,95,102,105,108,101,110,97,109,101,218,8,102,105, - 108,101,110,97,109,101,115,12,0,0,0,32,32,32,32,32, - 32,32,32,32,32,32,32,114,10,0,0,0,218,17,99,97, - 99,104,101,95,102,114,111,109,95,115,111,117,114,99,101,114, - 152,0,0,0,226,1,0,0,115,159,1,0,0,128,0,240, - 36,0,8,22,208,7,33,220,8,17,143,14,137,14,240,0, - 1,24,48,220,49,67,244,3,1,9,69,1,224,11,23,208, - 11,35,216,22,74,136,71,220,18,27,152,71,211,18,36,208, - 12,36,217,29,43,145,114,176,17,136,12,220,11,14,143,58, - 137,58,144,100,211,11,27,128,68,220,17,28,152,84,211,17, - 34,129,74,128,68,136,36,216,22,26,151,111,145,111,160,99, - 211,22,42,129,79,128,68,136,35,136,116,220,10,13,215,10, - 28,209,10,28,215,10,38,209,10,38,128,67,216,7,10,128, - 123,220,14,33,208,34,72,211,14,73,208,8,73,216,22,24, - 151,103,145,103,169,4,161,4,176,36,184,19,184,99,208,30, - 66,211,22,67,128,79,216,7,19,208,7,27,220,11,14,143, - 57,137,57,215,11,29,209,11,29,160,17,210,11,34,216,27, - 29,137,76,228,27,30,159,57,153,57,215,27,45,209,27,45, - 136,76,220,19,22,144,124,211,19,36,128,76,216,7,19,144, - 114,210,7,25,216,15,27,215,15,35,209,15,35,212,15,37, - 220,18,28,160,12,208,31,47,208,47,67,208,29,68,211,18, - 69,208,12,69,216,29,44,208,28,45,168,81,172,116,168,102, - 176,92,176,78,208,26,67,136,15,216,15,30,212,33,50,176, - 49,209,33,53,209,15,53,128,72,220,7,10,215,7,25,209, - 7,25,208,7,37,244,18,0,16,29,152,84,211,15,34,136, - 4,240,10,0,12,16,144,1,137,55,144,99,138,62,152,100, - 160,49,153,103,172,95,209,30,60,216,19,23,152,1,152,2, - 144,56,136,68,244,8,0,16,26,220,12,15,215,12,30,209, - 12,30,216,12,16,143,75,137,75,156,15,211,12,40,216,12, - 20,243,7,4,16,10,240,0,4,9,10,244,10,0,12,22, - 144,100,156,72,160,104,211,11,47,208,4,47,114,28,0,0, - 0,99,1,0,0,0,0,0,0,0,0,0,0,0,6,0, - 0,0,3,0,0,0,243,36,3,0,0,151,0,116,0,0, - 0,0,0,0,0,0,0,106,2,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,106,4,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128, - 11,116,7,0,0,0,0,0,0,0,0,100,2,171,1,0, - 0,0,0,0,0,130,1,116,9,0,0,0,0,0,0,0, - 0,106,10,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,124,0,171,1,0,0,0,0,0,0,125, - 0,116,13,0,0,0,0,0,0,0,0,124,0,171,1,0, - 0,0,0,0,0,92,2,0,0,125,1,125,2,100,3,125, - 3,116,0,0,0,0,0,0,0,0,0,106,14,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,129, - 75,116,0,0,0,0,0,0,0,0,0,106,14,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106, - 17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,116,18,0,0,0,0,0,0,0,0,171,1,0, - 0,0,0,0,0,125,4,124,1,106,21,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,4,116, - 22,0,0,0,0,0,0,0,0,122,0,0,0,171,1,0, - 0,0,0,0,0,114,16,124,1,116,25,0,0,0,0,0, - 0,0,0,124,4,171,1,0,0,0,0,0,0,100,1,26, - 0,125,1,100,4,125,3,124,3,115,43,116,13,0,0,0, - 0,0,0,0,0,124,1,171,1,0,0,0,0,0,0,92, - 2,0,0,125,1,125,5,124,5,116,26,0,0,0,0,0, - 0,0,0,107,55,0,0,114,20,116,29,0,0,0,0,0, - 0,0,0,116,26,0,0,0,0,0,0,0,0,155,0,100, - 5,124,0,155,2,157,3,171,1,0,0,0,0,0,0,130, - 1,124,2,106,31,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,100,6,171,1,0,0,0,0,0, - 0,125,6,124,6,100,7,118,1,114,14,116,29,0,0,0, - 0,0,0,0,0,100,8,124,2,155,2,157,2,171,1,0, - 0,0,0,0,0,130,1,124,6,100,9,107,40,0,0,114, - 109,124,2,106,33,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,100,6,100,10,171,2,0,0,0, - 0,0,0,100,11,25,0,0,0,125,7,124,7,106,21,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,116,34,0,0,0,0,0,0,0,0,171,1,0,0,0, - 0,0,0,115,18,116,29,0,0,0,0,0,0,0,0,100, - 12,116,34,0,0,0,0,0,0,0,0,155,2,157,2,171, - 1,0,0,0,0,0,0,130,1,124,7,116,25,0,0,0, - 0,0,0,0,0,116,34,0,0,0,0,0,0,0,0,171, - 1,0,0,0,0,0,0,100,1,26,0,125,8,124,8,106, - 37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,171,0,0,0,0,0,0,0,115,15,116,29,0, - 0,0,0,0,0,0,0,100,13,124,7,155,2,100,14,157, - 3,171,1,0,0,0,0,0,0,130,1,124,2,106,39,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,100,6,171,1,0,0,0,0,0,0,100,15,25,0,0, - 0,125,9,116,41,0,0,0,0,0,0,0,0,124,1,124, - 9,116,42,0,0,0,0,0,0,0,0,100,15,25,0,0, - 0,122,0,0,0,171,2,0,0,0,0,0,0,83,0,41, - 16,97,110,1,0,0,71,105,118,101,110,32,116,104,101,32, - 112,97,116,104,32,116,111,32,97,32,46,112,121,99,46,32, - 102,105,108,101,44,32,114,101,116,117,114,110,32,116,104,101, - 32,112,97,116,104,32,116,111,32,105,116,115,32,46,112,121, - 32,102,105,108,101,46,10,10,32,32,32,32,84,104,101,32, - 46,112,121,99,32,102,105,108,101,32,100,111,101,115,32,110, - 111,116,32,110,101,101,100,32,116,111,32,101,120,105,115,116, - 59,32,116,104,105,115,32,115,105,109,112,108,121,32,114,101, - 116,117,114,110,115,32,116,104,101,32,112,97,116,104,32,116, - 111,10,32,32,32,32,116,104,101,32,46,112,121,32,102,105, - 108,101,32,99,97,108,99,117,108,97,116,101,100,32,116,111, - 32,99,111,114,114,101,115,112,111,110,100,32,116,111,32,116, - 104,101,32,46,112,121,99,32,102,105,108,101,46,32,32,73, - 102,32,112,97,116,104,32,100,111,101,115,10,32,32,32,32, - 110,111,116,32,99,111,110,102,111,114,109,32,116,111,32,80, - 69,80,32,51,49,52,55,47,52,56,56,32,102,111,114,109, - 97,116,44,32,86,97,108,117,101,69,114,114,111,114,32,119, - 105,108,108,32,98,101,32,114,97,105,115,101,100,46,32,73, - 102,10,32,32,32,32,115,121,115,46,105,109,112,108,101,109, - 101,110,116,97,116,105,111,110,46,99,97,99,104,101,95,116, - 97,103,32,105,115,32,78,111,110,101,32,116,104,101,110,32, - 78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,114, - 114,111,114,32,105,115,32,114,97,105,115,101,100,46,10,10, - 32,32,32,32,78,114,125,0,0,0,70,84,122,31,32,110, - 111,116,32,98,111,116,116,111,109,45,108,101,118,101,108,32, - 100,105,114,101,99,116,111,114,121,32,105,110,32,114,103,0, - 0,0,62,2,0,0,0,114,52,0,0,0,233,3,0,0, - 0,122,29,101,120,112,101,99,116,101,100,32,111,110,108,121, - 32,50,32,111,114,32,51,32,100,111,116,115,32,105,110,32, - 114,154,0,0,0,114,52,0,0,0,233,254,255,255,255,122, - 53,111,112,116,105,109,105,122,97,116,105,111,110,32,112,111, - 114,116,105,111,110,32,111,102,32,102,105,108,101,110,97,109, - 101,32,100,111,101,115,32,110,111,116,32,115,116,97,114,116, - 32,119,105,116,104,32,122,19,111,112,116,105,109,105,122,97, - 116,105,111,110,32,108,101,118,101,108,32,122,29,32,105,115, - 32,110,111,116,32,97,110,32,97,108,112,104,97,110,117,109, - 101,114,105,99,32,118,97,108,117,101,114,1,0,0,0,41, - 22,114,20,0,0,0,114,132,0,0,0,114,133,0,0,0, - 114,134,0,0,0,114,23,0,0,0,114,130,0,0,0,114, - 81,0,0,0,114,141,0,0,0,114,60,0,0,0,114,61, - 0,0,0,114,32,0,0,0,114,62,0,0,0,114,7,0, - 0,0,114,143,0,0,0,114,138,0,0,0,218,5,99,111, - 117,110,116,218,6,114,115,112,108,105,116,114,139,0,0,0, - 114,137,0,0,0,218,9,112,97,114,116,105,116,105,111,110, - 114,72,0,0,0,218,15,83,79,85,82,67,69,95,83,85, - 70,70,73,88,69,83,41,10,114,68,0,0,0,114,146,0, - 0,0,218,16,112,121,99,97,99,104,101,95,102,105,108,101, - 110,97,109,101,218,23,102,111,117,110,100,95,105,110,95,112, - 121,99,97,99,104,101,95,112,114,101,102,105,120,218,13,115, - 116,114,105,112,112,101,100,95,112,97,116,104,218,7,112,121, - 99,97,99,104,101,218,9,100,111,116,95,99,111,117,110,116, - 114,123,0,0,0,218,9,111,112,116,95,108,101,118,101,108, - 218,13,98,97,115,101,95,102,105,108,101,110,97,109,101,115, - 10,0,0,0,32,32,32,32,32,32,32,32,32,32,114,10, - 0,0,0,218,17,115,111,117,114,99,101,95,102,114,111,109, - 95,99,97,99,104,101,114,167,0,0,0,40,2,0,0,115, - 165,1,0,0,128,0,244,18,0,8,11,215,7,25,209,7, - 25,215,7,35,209,7,35,208,7,43,220,14,33,208,34,72, - 211,14,73,208,8,73,220,11,14,143,58,137,58,144,100,211, - 11,27,128,68,220,29,40,168,20,211,29,46,209,4,26,128, - 68,208,10,26,216,30,35,208,4,27,220,7,10,215,7,25, - 209,7,25,208,7,37,220,24,27,215,24,42,209,24,42,215, - 24,49,209,24,49,180,47,211,24,66,136,13,216,11,15,143, - 63,137,63,152,61,172,56,209,27,51,212,11,52,216,19,23, - 156,3,152,77,211,24,42,208,24,43,208,19,44,136,68,216, - 38,42,208,12,35,217,11,34,220,24,35,160,68,211,24,41, - 137,13,136,4,136,103,216,11,18,148,104,210,11,30,220,18, - 28,164,8,152,122,208,41,72,216,32,36,152,120,240,3,1, - 30,41,243,0,1,19,42,240,0,1,13,42,224,16,32,215, - 16,38,209,16,38,160,115,211,16,43,128,73,216,7,16,152, - 6,209,7,30,220,14,24,208,27,56,208,57,73,208,56,76, - 208,25,77,211,14,78,208,8,78,216,9,18,144,97,138,30, - 216,23,39,215,23,46,209,23,46,168,115,176,65,211,23,54, - 176,114,209,23,58,136,12,216,15,27,215,15,38,209,15,38, - 164,116,212,15,44,220,18,28,240,0,1,30,37,220,37,41, - 160,72,240,3,1,30,46,243,0,1,19,47,240,0,1,13, - 47,224,20,32,164,19,164,84,163,25,160,26,208,20,44,136, - 9,216,15,24,215,15,32,209,15,32,212,15,34,220,18,28, - 208,31,50,176,60,208,50,66,240,0,1,67,1,50,240,0, - 1,30,50,243,0,1,19,51,240,0,1,13,51,224,20,36, - 215,20,46,209,20,46,168,115,211,20,51,176,65,209,20,54, - 128,77,220,11,21,144,100,152,77,172,79,184,65,209,44,62, - 209,28,62,211,11,63,208,4,63,114,28,0,0,0,99,1, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3, - 0,0,0,243,232,0,0,0,151,0,116,1,0,0,0,0, - 0,0,0,0,124,0,171,1,0,0,0,0,0,0,100,1, - 107,40,0,0,114,1,121,2,124,0,106,3,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,3, - 171,1,0,0,0,0,0,0,92,3,0,0,125,1,125,2, - 125,3,124,1,114,22,124,3,106,5,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,171,0,0,0, - 0,0,0,0,100,4,100,5,26,0,100,6,107,55,0,0, - 114,2,124,0,83,0,9,0,116,7,0,0,0,0,0,0, - 0,0,124,0,171,1,0,0,0,0,0,0,125,4,116,13, - 0,0,0,0,0,0,0,0,124,4,171,1,0,0,0,0, - 0,0,114,2,124,4,83,0,124,0,83,0,35,0,116,8, - 0,0,0,0,0,0,0,0,116,10,0,0,0,0,0,0, - 0,0,102,2,36,0,114,8,1,0,124,0,100,2,100,5, - 26,0,125,4,89,0,140,37,119,0,120,3,89,0,119,1, - 41,7,122,188,67,111,110,118,101,114,116,32,97,32,98,121, - 116,101,99,111,100,101,32,102,105,108,101,32,112,97,116,104, - 32,116,111,32,97,32,115,111,117,114,99,101,32,112,97,116, - 104,32,40,105,102,32,112,111,115,115,105,98,108,101,41,46, - 10,10,32,32,32,32,84,104,105,115,32,102,117,110,99,116, - 105,111,110,32,101,120,105,115,116,115,32,112,117,114,101,108, - 121,32,102,111,114,32,98,97,99,107,119,97,114,100,115,45, - 99,111,109,112,97,116,105,98,105,108,105,116,121,32,102,111, - 114,10,32,32,32,32,80,121,73,109,112,111,114,116,95,69, - 120,101,99,67,111,100,101,77,111,100,117,108,101,87,105,116, - 104,70,105,108,101,110,97,109,101,115,40,41,32,105,110,32, - 116,104,101,32,67,32,65,80,73,46,10,10,32,32,32,32, - 114,1,0,0,0,78,114,103,0,0,0,233,253,255,255,255, - 233,255,255,255,255,218,2,112,121,41,7,114,7,0,0,0, - 114,131,0,0,0,218,5,108,111,119,101,114,114,167,0,0, - 0,114,134,0,0,0,114,138,0,0,0,114,93,0,0,0, - 41,5,218,13,98,121,116,101,99,111,100,101,95,112,97,116, - 104,114,148,0,0,0,218,1,95,218,9,101,120,116,101,110, - 115,105,111,110,218,11,115,111,117,114,99,101,95,112,97,116, - 104,115,5,0,0,0,32,32,32,32,32,114,10,0,0,0, - 218,15,95,103,101,116,95,115,111,117,114,99,101,102,105,108, - 101,114,177,0,0,0,80,2,0,0,115,142,0,0,0,128, - 0,244,14,0,8,11,136,61,211,7,25,152,81,210,7,30, - 216,15,19,216,25,38,215,25,49,209,25,49,176,35,211,25, - 54,209,4,22,128,68,136,33,136,89,217,11,15,144,57,151, - 63,145,63,211,19,36,160,82,168,2,208,19,43,168,116,210, - 19,51,216,15,28,208,8,28,240,2,3,5,41,220,22,39, - 168,13,211,22,54,136,11,244,6,0,27,39,160,123,212,26, - 51,136,59,208,4,70,184,29,208,4,70,248,244,5,0,13, - 32,164,26,208,11,44,242,0,1,5,41,216,22,35,160,67, - 160,82,208,22,40,138,11,240,3,1,5,41,250,115,18,0, - 0,0,193,0,11,65,26,0,193,26,20,65,49,3,193,48, - 1,65,49,3,99,1,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,3,0,0,0,243,182,0,0,0,151,0, - 124,0,106,1,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,116,3,0,0,0,0,0,0,0,0, - 116,4,0,0,0,0,0,0,0,0,171,1,0,0,0,0, - 0,0,171,1,0,0,0,0,0,0,114,12,9,0,116,7, - 0,0,0,0,0,0,0,0,124,0,171,1,0,0,0,0, - 0,0,83,0,124,0,106,1,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,116,3,0,0,0,0, - 0,0,0,0,116,10,0,0,0,0,0,0,0,0,171,1, - 0,0,0,0,0,0,171,1,0,0,0,0,0,0,114,2, - 124,0,83,0,121,0,35,0,116,8,0,0,0,0,0,0, - 0,0,36,0,114,3,1,0,89,0,121,0,119,0,120,3, - 89,0,119,1,114,77,0,0,0,41,6,114,59,0,0,0, - 218,5,116,117,112,108,101,114,159,0,0,0,114,152,0,0, - 0,114,134,0,0,0,114,140,0,0,0,41,1,114,151,0, - 0,0,115,1,0,0,0,32,114,10,0,0,0,218,11,95, - 103,101,116,95,99,97,99,104,101,100,114,180,0,0,0,99, - 2,0,0,115,87,0,0,0,128,0,216,7,15,215,7,24, - 209,7,24,156,21,156,127,211,25,47,212,7,48,240,2,3, - 9,17,220,19,36,160,88,211,19,46,208,12,46,240,6,0, - 10,18,215,9,26,209,9,26,156,53,212,33,50,211,27,51, - 212,9,52,216,15,23,136,15,224,15,19,248,244,11,0,16, - 35,242,0,1,9,17,217,12,16,240,3,1,9,17,250,115, - 17,0,0,0,160,10,65,12,0,193,12,9,65,24,3,193, - 23,1,65,24,3,99,1,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,3,0,0,0,243,94,0,0,0,151, - 0,9,0,116,1,0,0,0,0,0,0,0,0,124,0,171, - 1,0,0,0,0,0,0,106,2,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,125,1,124,1,100, - 2,122,20,0,0,125,1,124,1,83,0,35,0,116,4,0, - 0,0,0,0,0,0,0,36,0,114,5,1,0,100,1,125, - 1,89,0,140,20,119,0,120,3,89,0,119,1,41,3,122, - 51,67,97,108,99,117,108,97,116,101,32,116,104,101,32,109, - 111,100,101,32,112,101,114,109,105,115,115,105,111,110,115,32, - 102,111,114,32,97,32,98,121,116,101,99,111,100,101,32,102, - 105,108,101,46,114,107,0,0,0,233,128,0,0,0,41,3, - 114,85,0,0,0,114,88,0,0,0,114,87,0,0,0,41, - 2,114,68,0,0,0,114,89,0,0,0,115,2,0,0,0, - 32,32,114,10,0,0,0,218,10,95,99,97,108,99,95,109, - 111,100,101,114,183,0,0,0,111,2,0,0,115,61,0,0, - 0,128,0,240,4,3,5,21,220,15,25,152,36,211,15,31, - 215,15,39,209,15,39,136,4,240,10,0,5,9,136,69,129, - 77,128,68,216,11,15,128,75,248,244,11,0,12,19,242,0, - 1,5,21,216,15,20,138,4,240,3,1,5,21,250,115,12, - 0,0,0,130,21,30,0,158,11,44,3,171,1,44,3,99, - 1,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, - 3,0,0,0,243,90,0,0,0,135,0,151,0,100,3,136, - 0,102,1,100,1,132,9,125,1,116,0,0,0,0,0,0, - 0,0,0,129,17,116,0,0,0,0,0,0,0,0,0,106, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,125,2,110,3,100,2,132,0,125,2,2,0,124, - 2,124,1,137,0,171,2,0,0,0,0,0,0,1,0,124, - 1,83,0,41,4,122,252,68,101,99,111,114,97,116,111,114, - 32,116,111,32,118,101,114,105,102,121,32,116,104,97,116,32, - 116,104,101,32,109,111,100,117,108,101,32,98,101,105,110,103, - 32,114,101,113,117,101,115,116,101,100,32,109,97,116,99,104, - 101,115,32,116,104,101,32,111,110,101,32,116,104,101,10,32, - 32,32,32,108,111,97,100,101,114,32,99,97,110,32,104,97, - 110,100,108,101,46,10,10,32,32,32,32,84,104,101,32,102, - 105,114,115,116,32,97,114,103,117,109,101,110,116,32,40,115, - 101,108,102,41,32,109,117,115,116,32,100,101,102,105,110,101, - 32,95,110,97,109,101,32,119,104,105,99,104,32,116,104,101, - 32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116, - 32,105,115,10,32,32,32,32,99,111,109,112,97,114,101,100, - 32,97,103,97,105,110,115,116,46,32,73,102,32,116,104,101, - 32,99,111,109,112,97,114,105,115,111,110,32,102,97,105,108, - 115,32,116,104,101,110,32,73,109,112,111,114,116,69,114,114, - 111,114,32,105,115,32,114,97,105,115,101,100,46,10,10,32, - 32,32,32,99,2,0,0,0,0,0,0,0,0,0,0,0, - 6,0,0,0,31,0,0,0,243,148,0,0,0,149,1,151, - 0,124,1,128,13,124,0,106,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,125,1,110,44,124, - 0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,124,1,107,55,0,0,114,29,116,3,0, - 0,0,0,0,0,0,0,100,1,124,0,106,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155, - 1,100,2,124,1,155,1,157,4,124,1,172,3,171,2,0, - 0,0,0,0,0,130,1,2,0,137,4,124,0,124,1,103, - 2,124,2,162,1,173,6,105,0,124,3,164,1,142,1,83, - 0,41,4,78,122,11,108,111,97,100,101,114,32,102,111,114, - 32,122,15,32,99,97,110,110,111,116,32,104,97,110,100,108, - 101,32,169,1,218,4,110,97,109,101,41,2,114,187,0,0, - 0,218,11,73,109,112,111,114,116,69,114,114,111,114,41,5, - 218,4,115,101,108,102,114,187,0,0,0,218,4,97,114,103, - 115,218,6,107,119,97,114,103,115,218,6,109,101,116,104,111, - 100,115,5,0,0,0,32,32,32,32,128,114,10,0,0,0, - 218,19,95,99,104,101,99,107,95,110,97,109,101,95,119,114, - 97,112,112,101,114,122,40,95,99,104,101,99,107,95,110,97, - 109,101,46,60,108,111,99,97,108,115,62,46,95,99,104,101, - 99,107,95,110,97,109,101,95,119,114,97,112,112,101,114,131, - 2,0,0,115,82,0,0,0,248,128,0,216,11,15,136,60, - 216,19,23,151,57,145,57,137,68,216,13,17,143,89,137,89, - 152,36,210,13,30,221,18,29,216,33,37,167,25,163,25,169, - 68,240,3,1,31,50,216,56,60,244,3,1,19,62,240,0, - 1,13,62,225,15,21,144,100,152,68,208,15,50,160,52,210, - 15,50,168,54,209,15,50,208,8,50,114,28,0,0,0,99, - 2,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0, - 19,0,0,0,243,164,0,0,0,151,0,100,1,68,0,93, - 38,0,0,125,2,116,1,0,0,0,0,0,0,0,0,124, - 1,124,2,171,2,0,0,0,0,0,0,115,1,140,16,116, - 3,0,0,0,0,0,0,0,0,124,0,124,2,116,5,0, - 0,0,0,0,0,0,0,124,1,124,2,171,2,0,0,0, - 0,0,0,171,3,0,0,0,0,0,0,1,0,140,40,4, - 0,124,0,106,6,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,106,9,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,1,106,6,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,171,1,0,0,0,0,0,0,1,0,121,0,41,2,78, - 41,4,218,10,95,95,109,111,100,117,108,101,95,95,218,8, - 95,95,110,97,109,101,95,95,218,12,95,95,113,117,97,108, - 110,97,109,101,95,95,218,7,95,95,100,111,99,95,95,41, - 5,218,7,104,97,115,97,116,116,114,218,7,115,101,116,97, - 116,116,114,218,7,103,101,116,97,116,116,114,218,8,95,95, - 100,105,99,116,95,95,218,6,117,112,100,97,116,101,41,3, - 218,3,110,101,119,218,3,111,108,100,114,99,0,0,0,115, - 3,0,0,0,32,32,32,114,10,0,0,0,218,5,95,119, - 114,97,112,122,26,95,99,104,101,99,107,95,110,97,109,101, - 46,60,108,111,99,97,108,115,62,46,95,119,114,97,112,144, - 2,0,0,115,66,0,0,0,128,0,219,27,80,144,7,220, - 19,26,152,51,160,7,213,19,40,220,20,27,152,67,160,23, - 172,39,176,35,176,119,211,42,63,213,20,64,240,5,0,28, - 81,1,240,6,0,13,16,143,76,137,76,215,12,31,209,12, - 31,160,3,167,12,161,12,213,12,45,114,28,0,0,0,114, - 77,0,0,0,41,2,218,10,95,98,111,111,116,115,116,114, - 97,112,114,206,0,0,0,41,3,114,192,0,0,0,114,193, - 0,0,0,114,206,0,0,0,115,3,0,0,0,96,32,32, - 114,10,0,0,0,218,11,95,99,104,101,99,107,95,110,97, - 109,101,114,208,0,0,0,123,2,0,0,115,51,0,0,0, - 248,128,0,245,16,6,5,51,244,20,0,8,18,208,7,29, - 220,16,26,215,16,32,209,16,32,137,5,242,4,4,9,46, - 241,12,0,5,10,208,10,29,152,118,212,4,38,216,11,30, - 208,4,30,114,28,0,0,0,99,3,0,0,0,0,0,0, - 0,0,0,0,0,5,0,0,0,3,0,0,0,243,44,1, - 0,0,151,0,124,0,100,1,100,2,26,0,125,3,124,3, - 116,0,0,0,0,0,0,0,0,0,107,55,0,0,114,42, - 100,3,124,1,155,2,100,4,124,3,155,2,157,4,125,4, - 116,2,0,0,0,0,0,0,0,0,106,5,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,5, - 124,4,171,2,0,0,0,0,0,0,1,0,116,7,0,0, - 0,0,0,0,0,0,124,4,102,1,105,0,124,2,164,1, - 142,1,130,1,116,9,0,0,0,0,0,0,0,0,124,0, - 171,1,0,0,0,0,0,0,100,6,107,2,0,0,114,38, - 100,7,124,1,155,2,157,2,125,4,116,2,0,0,0,0, - 0,0,0,0,106,5,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,100,5,124,4,171,2,0,0, - 0,0,0,0,1,0,116,11,0,0,0,0,0,0,0,0, - 124,4,171,1,0,0,0,0,0,0,130,1,116,13,0,0, - 0,0,0,0,0,0,124,0,100,2,100,8,26,0,171,1, - 0,0,0,0,0,0,125,5,124,5,100,9,122,1,0,0, - 114,20,100,10,124,5,155,2,100,11,124,1,155,2,157,4, - 125,4,116,7,0,0,0,0,0,0,0,0,124,4,102,1, - 105,0,124,2,164,1,142,1,130,1,124,5,83,0,41,12, - 97,84,2,0,0,80,101,114,102,111,114,109,32,98,97,115, - 105,99,32,118,97,108,105,100,105,116,121,32,99,104,101,99, - 107,105,110,103,32,111,102,32,97,32,112,121,99,32,104,101, - 97,100,101,114,32,97,110,100,32,114,101,116,117,114,110,32, - 116,104,101,32,102,108,97,103,115,32,102,105,101,108,100,44, - 10,32,32,32,32,119,104,105,99,104,32,100,101,116,101,114, - 109,105,110,101,115,32,104,111,119,32,116,104,101,32,112,121, - 99,32,115,104,111,117,108,100,32,98,101,32,102,117,114,116, - 104,101,114,32,118,97,108,105,100,97,116,101,100,32,97,103, - 97,105,110,115,116,32,116,104,101,32,115,111,117,114,99,101, - 46,10,10,32,32,32,32,42,100,97,116,97,42,32,105,115, - 32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102, - 32,116,104,101,32,112,121,99,32,102,105,108,101,46,32,40, - 79,110,108,121,32,116,104,101,32,102,105,114,115,116,32,49, - 54,32,98,121,116,101,115,32,97,114,101,10,32,32,32,32, - 114,101,113,117,105,114,101,100,44,32,116,104,111,117,103,104, - 46,41,10,10,32,32,32,32,42,110,97,109,101,42,32,105, - 115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104, - 101,32,109,111,100,117,108,101,32,98,101,105,110,103,32,105, - 109,112,111,114,116,101,100,46,32,73,116,32,105,115,32,117, - 115,101,100,32,102,111,114,32,108,111,103,103,105,110,103,46, - 10,10,32,32,32,32,42,101,120,99,95,100,101,116,97,105, - 108,115,42,32,105,115,32,97,32,100,105,99,116,105,111,110, - 97,114,121,32,112,97,115,115,101,100,32,116,111,32,73,109, - 112,111,114,116,69,114,114,111,114,32,105,102,32,105,116,32, - 114,97,105,115,101,100,32,102,111,114,10,32,32,32,32,105, - 109,112,114,111,118,101,100,32,100,101,98,117,103,103,105,110, - 103,46,10,10,32,32,32,32,73,109,112,111,114,116,69,114, - 114,111,114,32,105,115,32,114,97,105,115,101,100,32,119,104, - 101,110,32,116,104,101,32,109,97,103,105,99,32,110,117,109, - 98,101,114,32,105,115,32,105,110,99,111,114,114,101,99,116, - 32,111,114,32,119,104,101,110,32,116,104,101,32,102,108,97, - 103,115,10,32,32,32,32,102,105,101,108,100,32,105,115,32, - 105,110,118,97,108,105,100,46,32,69,79,70,69,114,114,111, + 32,99,2,0,0,0,0,0,0,0,0,0,0,0,6,0, + 0,0,31,0,0,0,243,148,0,0,0,149,1,151,0,124, + 1,128,13,124,0,106,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,125,1,110,44,124,0,106, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,1,107,55,0,0,114,29,116,3,0,0,0, + 0,0,0,0,0,100,1,124,0,106,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,155,1,100, + 2,124,1,155,1,157,4,124,1,172,3,171,2,0,0,0, + 0,0,0,130,1,2,0,137,4,124,0,124,1,103,2,124, + 2,162,1,173,6,105,0,124,3,164,1,142,1,83,0,41, + 4,78,122,11,108,111,97,100,101,114,32,102,111,114,32,122, + 15,32,99,97,110,110,111,116,32,104,97,110,100,108,101,32, + 169,1,218,4,110,97,109,101,41,2,114,188,0,0,0,218, + 11,73,109,112,111,114,116,69,114,114,111,114,41,5,218,4, + 115,101,108,102,114,188,0,0,0,218,4,97,114,103,115,218, + 6,107,119,97,114,103,115,218,6,109,101,116,104,111,100,115, + 5,0,0,0,32,32,32,32,128,114,10,0,0,0,218,19, + 95,99,104,101,99,107,95,110,97,109,101,95,119,114,97,112, + 112,101,114,122,40,95,99,104,101,99,107,95,110,97,109,101, + 46,60,108,111,99,97,108,115,62,46,95,99,104,101,99,107, + 95,110,97,109,101,95,119,114,97,112,112,101,114,135,2,0, + 0,115,82,0,0,0,248,128,0,216,11,15,136,60,216,19, + 23,151,57,145,57,137,68,216,13,17,143,89,137,89,152,36, + 210,13,30,221,18,29,216,33,37,167,25,163,25,169,68,240, + 3,1,31,50,216,56,60,244,3,1,19,62,240,0,1,13, + 62,225,15,21,144,100,152,68,208,15,50,160,52,210,15,50, + 168,54,209,15,50,208,8,50,114,28,0,0,0,99,2,0, + 0,0,0,0,0,0,0,0,0,0,9,0,0,0,19,0, + 0,0,243,164,0,0,0,151,0,100,1,68,0,93,38,0, + 0,125,2,116,1,0,0,0,0,0,0,0,0,124,1,124, + 2,171,2,0,0,0,0,0,0,115,1,140,16,116,3,0, + 0,0,0,0,0,0,0,124,0,124,2,116,5,0,0,0, + 0,0,0,0,0,124,1,124,2,171,2,0,0,0,0,0, + 0,171,3,0,0,0,0,0,0,1,0,140,40,4,0,124, + 0,106,6,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,106,9,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,1,106,6,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, + 1,0,0,0,0,0,0,1,0,121,0,41,2,78,41,4, + 218,10,95,95,109,111,100,117,108,101,95,95,218,8,95,95, + 110,97,109,101,95,95,218,12,95,95,113,117,97,108,110,97, + 109,101,95,95,218,7,95,95,100,111,99,95,95,41,5,218, + 7,104,97,115,97,116,116,114,218,7,115,101,116,97,116,116, + 114,218,7,103,101,116,97,116,116,114,218,8,95,95,100,105, + 99,116,95,95,218,6,117,112,100,97,116,101,41,3,218,3, + 110,101,119,218,3,111,108,100,114,99,0,0,0,115,3,0, + 0,0,32,32,32,114,10,0,0,0,218,5,95,119,114,97, + 112,122,26,95,99,104,101,99,107,95,110,97,109,101,46,60, + 108,111,99,97,108,115,62,46,95,119,114,97,112,148,2,0, + 0,115,66,0,0,0,128,0,219,27,80,144,7,220,19,26, + 152,51,160,7,213,19,40,220,20,27,152,67,160,23,172,39, + 176,35,176,119,211,42,63,213,20,64,240,5,0,28,81,1, + 240,6,0,13,16,143,76,137,76,215,12,31,209,12,31,160, + 3,167,12,161,12,213,12,45,114,28,0,0,0,114,77,0, + 0,0,41,2,218,10,95,98,111,111,116,115,116,114,97,112, + 114,207,0,0,0,41,3,114,193,0,0,0,114,194,0,0, + 0,114,207,0,0,0,115,3,0,0,0,96,32,32,114,10, + 0,0,0,218,11,95,99,104,101,99,107,95,110,97,109,101, + 114,209,0,0,0,127,2,0,0,115,51,0,0,0,248,128, + 0,245,16,6,5,51,244,20,0,8,18,208,7,29,220,16, + 26,215,16,32,209,16,32,137,5,242,4,4,9,46,241,12, + 0,5,10,208,10,29,152,118,212,4,38,216,11,30,208,4, + 30,114,28,0,0,0,99,3,0,0,0,0,0,0,0,0, + 0,0,0,5,0,0,0,3,0,0,0,243,44,1,0,0, + 151,0,124,0,100,1,100,2,26,0,125,3,124,3,116,0, + 0,0,0,0,0,0,0,0,107,55,0,0,114,42,100,3, + 124,1,155,2,100,4,124,3,155,2,157,4,125,4,116,2, + 0,0,0,0,0,0,0,0,106,5,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,100,5,124,4, + 171,2,0,0,0,0,0,0,1,0,116,7,0,0,0,0, + 0,0,0,0,124,4,102,1,105,0,124,2,164,1,142,1, + 130,1,116,9,0,0,0,0,0,0,0,0,124,0,171,1, + 0,0,0,0,0,0,100,6,107,2,0,0,114,38,100,7, + 124,1,155,2,157,2,125,4,116,2,0,0,0,0,0,0, + 0,0,106,5,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,100,5,124,4,171,2,0,0,0,0, + 0,0,1,0,116,11,0,0,0,0,0,0,0,0,124,4, + 171,1,0,0,0,0,0,0,130,1,116,13,0,0,0,0, + 0,0,0,0,124,0,100,2,100,8,26,0,171,1,0,0, + 0,0,0,0,125,5,124,5,100,9,122,1,0,0,114,20, + 100,10,124,5,155,2,100,11,124,1,155,2,157,4,125,4, + 116,7,0,0,0,0,0,0,0,0,124,4,102,1,105,0, + 124,2,164,1,142,1,130,1,124,5,83,0,41,12,97,84, + 2,0,0,80,101,114,102,111,114,109,32,98,97,115,105,99, + 32,118,97,108,105,100,105,116,121,32,99,104,101,99,107,105, + 110,103,32,111,102,32,97,32,112,121,99,32,104,101,97,100, + 101,114,32,97,110,100,32,114,101,116,117,114,110,32,116,104, + 101,32,102,108,97,103,115,32,102,105,101,108,100,44,10,32, + 32,32,32,119,104,105,99,104,32,100,101,116,101,114,109,105, + 110,101,115,32,104,111,119,32,116,104,101,32,112,121,99,32, + 115,104,111,117,108,100,32,98,101,32,102,117,114,116,104,101, + 114,32,118,97,108,105,100,97,116,101,100,32,97,103,97,105, + 110,115,116,32,116,104,101,32,115,111,117,114,99,101,46,10, + 10,32,32,32,32,42,100,97,116,97,42,32,105,115,32,116, + 104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116, + 104,101,32,112,121,99,32,102,105,108,101,46,32,40,79,110, + 108,121,32,116,104,101,32,102,105,114,115,116,32,49,54,32, + 98,121,116,101,115,32,97,114,101,10,32,32,32,32,114,101, + 113,117,105,114,101,100,44,32,116,104,111,117,103,104,46,41, + 10,10,32,32,32,32,42,110,97,109,101,42,32,105,115,32, + 116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32, + 109,111,100,117,108,101,32,98,101,105,110,103,32,105,109,112, + 111,114,116,101,100,46,32,73,116,32,105,115,32,117,115,101, + 100,32,102,111,114,32,108,111,103,103,105,110,103,46,10,10, + 32,32,32,32,42,101,120,99,95,100,101,116,97,105,108,115, + 42,32,105,115,32,97,32,100,105,99,116,105,111,110,97,114, + 121,32,112,97,115,115,101,100,32,116,111,32,73,109,112,111, + 114,116,69,114,114,111,114,32,105,102,32,105,116,32,114,97, + 105,115,101,100,32,102,111,114,10,32,32,32,32,105,109,112, + 114,111,118,101,100,32,100,101,98,117,103,103,105,110,103,46, + 10,10,32,32,32,32,73,109,112,111,114,116,69,114,114,111, 114,32,105,115,32,114,97,105,115,101,100,32,119,104,101,110, - 32,116,104,101,32,100,97,116,97,32,105,115,32,102,111,117, - 110,100,32,116,111,32,98,101,32,116,114,117,110,99,97,116, - 101,100,46,10,10,32,32,32,32,78,114,38,0,0,0,122, - 20,98,97,100,32,109,97,103,105,99,32,110,117,109,98,101, - 114,32,105,110,32,122,2,58,32,250,2,123,125,233,16,0, - 0,0,122,40,114,101,97,99,104,101,100,32,69,79,70,32, - 119,104,105,108,101,32,114,101,97,100,105,110,103,32,112,121, - 99,32,104,101,97,100,101,114,32,111,102,32,233,8,0,0, - 0,233,252,255,255,255,122,14,105,110,118,97,108,105,100,32, - 102,108,97,103,115,32,122,4,32,105,110,32,41,7,218,12, - 77,65,71,73,67,95,78,85,77,66,69,82,114,207,0,0, - 0,218,16,95,118,101,114,98,111,115,101,95,109,101,115,115, - 97,103,101,114,188,0,0,0,114,7,0,0,0,218,8,69, - 79,70,69,114,114,111,114,114,49,0,0,0,41,6,114,48, - 0,0,0,114,187,0,0,0,218,11,101,120,99,95,100,101, - 116,97,105,108,115,218,5,109,97,103,105,99,114,145,0,0, - 0,114,21,0,0,0,115,6,0,0,0,32,32,32,32,32, - 32,114,10,0,0,0,218,13,95,99,108,97,115,115,105,102, - 121,95,112,121,99,114,219,0,0,0,154,2,0,0,115,185, - 0,0,0,128,0,240,32,0,13,17,144,18,144,33,136,72, - 128,69,216,7,12,148,12,210,7,28,216,20,40,168,20,168, - 8,176,2,176,53,176,41,208,18,60,136,7,220,8,18,215, - 8,35,209,8,35,160,68,168,39,212,8,50,220,14,25,152, - 39,209,14,49,160,91,209,14,49,208,8,49,220,7,10,136, - 52,131,121,144,50,130,126,216,20,60,184,84,184,72,208,18, - 69,136,7,220,8,18,215,8,35,209,8,35,160,68,168,39, - 212,8,50,220,14,22,144,119,211,14,31,208,8,31,220,12, - 26,152,52,160,1,160,33,152,57,211,12,37,128,69,224,7, - 12,136,117,130,125,216,20,34,160,53,160,41,168,52,176,4, - 168,120,208,18,56,136,7,220,14,25,152,39,209,14,49,160, - 91,209,14,49,208,8,49,216,11,16,128,76,114,28,0,0, - 0,99,5,0,0,0,0,0,0,0,0,0,0,0,5,0, - 0,0,3,0,0,0,243,198,0,0,0,151,0,116,1,0, - 0,0,0,0,0,0,0,124,0,100,1,100,2,26,0,171, - 1,0,0,0,0,0,0,124,1,100,3,122,1,0,0,107, - 55,0,0,114,39,100,4,124,3,155,2,157,2,125,5,116, - 2,0,0,0,0,0,0,0,0,106,5,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,100,5,124, - 5,171,2,0,0,0,0,0,0,1,0,116,7,0,0,0, - 0,0,0,0,0,124,5,102,1,105,0,124,4,164,1,142, - 1,130,1,124,2,129,36,116,1,0,0,0,0,0,0,0, - 0,124,0,100,2,100,7,26,0,171,1,0,0,0,0,0, - 0,124,2,100,3,122,1,0,0,107,55,0,0,114,15,116, - 7,0,0,0,0,0,0,0,0,100,4,124,3,155,2,157, - 2,102,1,105,0,124,4,164,1,142,1,130,1,121,6,121, - 6,41,8,97,7,2,0,0,86,97,108,105,100,97,116,101, - 32,97,32,112,121,99,32,97,103,97,105,110,115,116,32,116, - 104,101,32,115,111,117,114,99,101,32,108,97,115,116,45,109, - 111,100,105,102,105,101,100,32,116,105,109,101,46,10,10,32, - 32,32,32,42,100,97,116,97,42,32,105,115,32,116,104,101, - 32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,101, - 32,112,121,99,32,102,105,108,101,46,32,40,79,110,108,121, - 32,116,104,101,32,102,105,114,115,116,32,49,54,32,98,121, - 116,101,115,32,97,114,101,10,32,32,32,32,114,101,113,117, - 105,114,101,100,46,41,10,10,32,32,32,32,42,115,111,117, - 114,99,101,95,109,116,105,109,101,42,32,105,115,32,116,104, - 101,32,108,97,115,116,32,109,111,100,105,102,105,101,100,32, - 116,105,109,101,115,116,97,109,112,32,111,102,32,116,104,101, - 32,115,111,117,114,99,101,32,102,105,108,101,46,10,10,32, - 32,32,32,42,115,111,117,114,99,101,95,115,105,122,101,42, - 32,105,115,32,78,111,110,101,32,111,114,32,116,104,101,32, - 115,105,122,101,32,111,102,32,116,104,101,32,115,111,117,114, - 99,101,32,102,105,108,101,32,105,110,32,98,121,116,101,115, - 46,10,10,32,32,32,32,42,110,97,109,101,42,32,105,115, - 32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101, - 32,109,111,100,117,108,101,32,98,101,105,110,103,32,105,109, - 112,111,114,116,101,100,46,32,73,116,32,105,115,32,117,115, - 101,100,32,102,111,114,32,108,111,103,103,105,110,103,46,10, - 10,32,32,32,32,42,101,120,99,95,100,101,116,97,105,108, - 115,42,32,105,115,32,97,32,100,105,99,116,105,111,110,97, - 114,121,32,112,97,115,115,101,100,32,116,111,32,73,109,112, - 111,114,116,69,114,114,111,114,32,105,102,32,105,116,32,114, - 97,105,115,101,100,32,102,111,114,10,32,32,32,32,105,109, - 112,114,111,118,101,100,32,100,101,98,117,103,103,105,110,103, - 46,10,10,32,32,32,32,65,110,32,73,109,112,111,114,116, - 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,32, - 105,102,32,116,104,101,32,98,121,116,101,99,111,100,101,32, - 105,115,32,115,116,97,108,101,46,10,10,32,32,32,32,114, - 212,0,0,0,233,12,0,0,0,114,37,0,0,0,122,22, - 98,121,116,101,99,111,100,101,32,105,115,32,115,116,97,108, - 101,32,102,111,114,32,114,210,0,0,0,78,114,211,0,0, - 0,41,4,114,49,0,0,0,114,207,0,0,0,114,215,0, - 0,0,114,188,0,0,0,41,6,114,48,0,0,0,218,12, - 115,111,117,114,99,101,95,109,116,105,109,101,218,11,115,111, - 117,114,99,101,95,115,105,122,101,114,187,0,0,0,114,217, - 0,0,0,114,145,0,0,0,115,6,0,0,0,32,32,32, - 32,32,32,114,10,0,0,0,218,23,95,118,97,108,105,100, - 97,116,101,95,116,105,109,101,115,116,97,109,112,95,112,121, - 99,114,224,0,0,0,187,2,0,0,115,137,0,0,0,128, - 0,244,38,0,8,22,144,100,152,49,152,82,144,106,211,7, - 33,160,108,176,90,209,38,63,210,7,64,216,20,42,168,52, - 168,40,208,18,51,136,7,220,8,18,215,8,35,209,8,35, - 160,68,168,39,212,8,50,220,14,25,152,39,209,14,49,160, - 91,209,14,49,208,8,49,216,8,19,208,8,31,220,8,22, - 144,116,152,66,152,114,144,123,211,8,35,168,11,176,106,209, - 40,64,210,8,65,220,14,25,208,28,50,176,52,176,40,208, - 26,59,209,14,75,184,123,209,14,75,208,8,75,240,3,0, - 9,66,1,240,3,0,9,32,114,28,0,0,0,99,4,0, - 0,0,0,0,0,0,0,0,0,0,5,0,0,0,3,0, - 0,0,243,50,0,0,0,151,0,124,0,100,1,100,2,26, - 0,124,1,107,55,0,0,114,15,116,1,0,0,0,0,0, - 0,0,0,100,3,124,2,155,2,157,2,102,1,105,0,124, - 3,164,1,142,1,130,1,121,4,41,5,97,243,1,0,0, - 86,97,108,105,100,97,116,101,32,97,32,104,97,115,104,45, - 98,97,115,101,100,32,112,121,99,32,98,121,32,99,104,101, - 99,107,105,110,103,32,116,104,101,32,114,101,97,108,32,115, - 111,117,114,99,101,32,104,97,115,104,32,97,103,97,105,110, - 115,116,32,116,104,101,32,111,110,101,32,105,110,10,32,32, - 32,32,116,104,101,32,112,121,99,32,104,101,97,100,101,114, - 46,10,10,32,32,32,32,42,100,97,116,97,42,32,105,115, - 32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102, - 32,116,104,101,32,112,121,99,32,102,105,108,101,46,32,40, - 79,110,108,121,32,116,104,101,32,102,105,114,115,116,32,49, - 54,32,98,121,116,101,115,32,97,114,101,10,32,32,32,32, - 114,101,113,117,105,114,101,100,46,41,10,10,32,32,32,32, - 42,115,111,117,114,99,101,95,104,97,115,104,42,32,105,115, - 32,116,104,101,32,105,109,112,111,114,116,108,105,98,46,117, - 116,105,108,46,115,111,117,114,99,101,95,104,97,115,104,40, - 41,32,111,102,32,116,104,101,32,115,111,117,114,99,101,32, - 102,105,108,101,46,10,10,32,32,32,32,42,110,97,109,101, - 42,32,105,115,32,116,104,101,32,110,97,109,101,32,111,102, - 32,116,104,101,32,109,111,100,117,108,101,32,98,101,105,110, - 103,32,105,109,112,111,114,116,101,100,46,32,73,116,32,105, - 115,32,117,115,101,100,32,102,111,114,32,108,111,103,103,105, - 110,103,46,10,10,32,32,32,32,42,101,120,99,95,100,101, - 116,97,105,108,115,42,32,105,115,32,97,32,100,105,99,116, - 105,111,110,97,114,121,32,112,97,115,115,101,100,32,116,111, - 32,73,109,112,111,114,116,69,114,114,111,114,32,105,102,32, - 105,116,32,114,97,105,115,101,100,32,102,111,114,10,32,32, - 32,32,105,109,112,114,111,118,101,100,32,100,101,98,117,103, - 103,105,110,103,46,10,10,32,32,32,32,65,110,32,73,109, - 112,111,114,116,69,114,114,111,114,32,105,115,32,114,97,105, - 115,101,100,32,105,102,32,116,104,101,32,98,121,116,101,99, - 111,100,101,32,105,115,32,115,116,97,108,101,46,10,10,32, - 32,32,32,114,212,0,0,0,114,211,0,0,0,122,46,104, - 97,115,104,32,105,110,32,98,121,116,101,99,111,100,101,32, - 100,111,101,115,110,39,116,32,109,97,116,99,104,32,104,97, - 115,104,32,111,102,32,115,111,117,114,99,101,32,78,41,1, - 114,188,0,0,0,41,4,114,48,0,0,0,218,11,115,111, - 117,114,99,101,95,104,97,115,104,114,187,0,0,0,114,217, - 0,0,0,115,4,0,0,0,32,32,32,32,114,10,0,0, - 0,218,18,95,118,97,108,105,100,97,116,101,95,104,97,115, - 104,95,112,121,99,114,227,0,0,0,215,2,0,0,115,54, - 0,0,0,128,0,240,34,0,8,12,136,65,136,98,128,122, - 144,91,210,7,32,220,14,25,216,14,61,184,100,184,88,208, - 12,70,241,3,3,15,10,224,14,25,241,5,3,15,10,240, - 0,3,9,10,240,3,0,8,33,114,28,0,0,0,99,4, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,3, - 0,0,0,243,206,0,0,0,151,0,116,1,0,0,0,0, - 0,0,0,0,106,2,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,0,171,1,0,0,0,0, - 0,0,125,4,116,5,0,0,0,0,0,0,0,0,124,4, - 116,6,0,0,0,0,0,0,0,0,171,2,0,0,0,0, - 0,0,114,48,116,8,0,0,0,0,0,0,0,0,106,11, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,100,1,124,2,171,2,0,0,0,0,0,0,1,0, - 124,3,129,22,116,13,0,0,0,0,0,0,0,0,106,14, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,4,124,3,171,2,0,0,0,0,0,0,1,0, - 124,4,83,0,116,17,0,0,0,0,0,0,0,0,100,2, - 124,2,155,2,157,2,124,1,124,2,172,3,171,3,0,0, - 0,0,0,0,130,1,41,4,122,35,67,111,109,112,105,108, - 101,32,98,121,116,101,99,111,100,101,32,97,115,32,102,111, - 117,110,100,32,105,110,32,97,32,112,121,99,46,122,21,99, - 111,100,101,32,111,98,106,101,99,116,32,102,114,111,109,32, - 123,33,114,125,122,19,78,111,110,45,99,111,100,101,32,111, - 98,106,101,99,116,32,105,110,32,169,2,114,187,0,0,0, - 114,68,0,0,0,41,9,218,7,109,97,114,115,104,97,108, - 218,5,108,111,97,100,115,218,10,105,115,105,110,115,116,97, - 110,99,101,218,10,95,99,111,100,101,95,116,121,112,101,114, - 207,0,0,0,114,215,0,0,0,218,4,95,105,109,112,218, - 16,95,102,105,120,95,99,111,95,102,105,108,101,110,97,109, - 101,114,188,0,0,0,41,5,114,48,0,0,0,114,187,0, - 0,0,114,173,0,0,0,114,176,0,0,0,218,4,99,111, - 100,101,115,5,0,0,0,32,32,32,32,32,114,10,0,0, - 0,218,17,95,99,111,109,112,105,108,101,95,98,121,116,101, - 99,111,100,101,114,237,0,0,0,239,2,0,0,115,99,0, - 0,0,128,0,228,11,18,143,61,137,61,152,20,211,11,30, - 128,68,220,7,17,144,36,156,10,212,7,35,220,8,18,215, - 8,35,209,8,35,208,36,59,184,93,212,8,75,216,11,22, - 208,11,34,220,12,16,215,12,33,209,12,33,160,36,168,11, - 212,12,52,216,15,19,136,11,228,14,25,208,28,47,176,13, - 208,47,64,208,26,65,216,31,35,168,45,244,3,1,15,57, - 240,0,1,9,57,114,28,0,0,0,99,3,0,0,0,0, - 0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,243, - 8,1,0,0,151,0,116,1,0,0,0,0,0,0,0,0, - 116,2,0,0,0,0,0,0,0,0,171,1,0,0,0,0, - 0,0,125,3,124,3,106,5,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,116,7,0,0,0,0, - 0,0,0,0,100,1,171,1,0,0,0,0,0,0,171,1, - 0,0,0,0,0,0,1,0,124,3,106,5,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,7, - 0,0,0,0,0,0,0,0,124,1,171,1,0,0,0,0, - 0,0,171,1,0,0,0,0,0,0,1,0,124,3,106,5, + 32,116,104,101,32,109,97,103,105,99,32,110,117,109,98,101, + 114,32,105,115,32,105,110,99,111,114,114,101,99,116,32,111, + 114,32,119,104,101,110,32,116,104,101,32,102,108,97,103,115, + 10,32,32,32,32,102,105,101,108,100,32,105,115,32,105,110, + 118,97,108,105,100,46,32,69,79,70,69,114,114,111,114,32, + 105,115,32,114,97,105,115,101,100,32,119,104,101,110,32,116, + 104,101,32,100,97,116,97,32,105,115,32,102,111,117,110,100, + 32,116,111,32,98,101,32,116,114,117,110,99,97,116,101,100, + 46,10,10,32,32,32,32,78,114,38,0,0,0,122,20,98, + 97,100,32,109,97,103,105,99,32,110,117,109,98,101,114,32, + 105,110,32,122,2,58,32,250,2,123,125,233,16,0,0,0, + 122,40,114,101,97,99,104,101,100,32,69,79,70,32,119,104, + 105,108,101,32,114,101,97,100,105,110,103,32,112,121,99,32, + 104,101,97,100,101,114,32,111,102,32,233,8,0,0,0,233, + 252,255,255,255,122,14,105,110,118,97,108,105,100,32,102,108, + 97,103,115,32,122,4,32,105,110,32,41,7,218,12,77,65, + 71,73,67,95,78,85,77,66,69,82,114,208,0,0,0,218, + 16,95,118,101,114,98,111,115,101,95,109,101,115,115,97,103, + 101,114,189,0,0,0,114,7,0,0,0,218,8,69,79,70, + 69,114,114,111,114,114,49,0,0,0,41,6,114,48,0,0, + 0,114,188,0,0,0,218,11,101,120,99,95,100,101,116,97, + 105,108,115,218,5,109,97,103,105,99,114,146,0,0,0,114, + 21,0,0,0,115,6,0,0,0,32,32,32,32,32,32,114, + 10,0,0,0,218,13,95,99,108,97,115,115,105,102,121,95, + 112,121,99,114,220,0,0,0,158,2,0,0,115,185,0,0, + 0,128,0,240,32,0,13,17,144,18,144,33,136,72,128,69, + 216,7,12,148,12,210,7,28,216,20,40,168,20,168,8,176, + 2,176,53,176,41,208,18,60,136,7,220,8,18,215,8,35, + 209,8,35,160,68,168,39,212,8,50,220,14,25,152,39,209, + 14,49,160,91,209,14,49,208,8,49,220,7,10,136,52,131, + 121,144,50,130,126,216,20,60,184,84,184,72,208,18,69,136, + 7,220,8,18,215,8,35,209,8,35,160,68,168,39,212,8, + 50,220,14,22,144,119,211,14,31,208,8,31,220,12,26,152, + 52,160,1,160,33,152,57,211,12,37,128,69,224,7,12,136, + 117,130,125,216,20,34,160,53,160,41,168,52,176,4,168,120, + 208,18,56,136,7,220,14,25,152,39,209,14,49,160,91,209, + 14,49,208,8,49,216,11,16,128,76,114,28,0,0,0,99, + 5,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, + 3,0,0,0,243,198,0,0,0,151,0,116,1,0,0,0, + 0,0,0,0,0,124,0,100,1,100,2,26,0,171,1,0, + 0,0,0,0,0,124,1,100,3,122,1,0,0,107,55,0, + 0,114,39,100,4,124,3,155,2,157,2,125,5,116,2,0, + 0,0,0,0,0,0,0,106,5,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,100,5,124,5,171, + 2,0,0,0,0,0,0,1,0,116,7,0,0,0,0,0, + 0,0,0,124,5,102,1,105,0,124,4,164,1,142,1,130, + 1,124,2,129,36,116,1,0,0,0,0,0,0,0,0,124, + 0,100,2,100,7,26,0,171,1,0,0,0,0,0,0,124, + 2,100,3,122,1,0,0,107,55,0,0,114,15,116,7,0, + 0,0,0,0,0,0,0,100,4,124,3,155,2,157,2,102, + 1,105,0,124,4,164,1,142,1,130,1,121,6,121,6,41, + 8,97,7,2,0,0,86,97,108,105,100,97,116,101,32,97, + 32,112,121,99,32,97,103,97,105,110,115,116,32,116,104,101, + 32,115,111,117,114,99,101,32,108,97,115,116,45,109,111,100, + 105,102,105,101,100,32,116,105,109,101,46,10,10,32,32,32, + 32,42,100,97,116,97,42,32,105,115,32,116,104,101,32,99, + 111,110,116,101,110,116,115,32,111,102,32,116,104,101,32,112, + 121,99,32,102,105,108,101,46,32,40,79,110,108,121,32,116, + 104,101,32,102,105,114,115,116,32,49,54,32,98,121,116,101, + 115,32,97,114,101,10,32,32,32,32,114,101,113,117,105,114, + 101,100,46,41,10,10,32,32,32,32,42,115,111,117,114,99, + 101,95,109,116,105,109,101,42,32,105,115,32,116,104,101,32, + 108,97,115,116,32,109,111,100,105,102,105,101,100,32,116,105, + 109,101,115,116,97,109,112,32,111,102,32,116,104,101,32,115, + 111,117,114,99,101,32,102,105,108,101,46,10,10,32,32,32, + 32,42,115,111,117,114,99,101,95,115,105,122,101,42,32,105, + 115,32,78,111,110,101,32,111,114,32,116,104,101,32,115,105, + 122,101,32,111,102,32,116,104,101,32,115,111,117,114,99,101, + 32,102,105,108,101,32,105,110,32,98,121,116,101,115,46,10, + 10,32,32,32,32,42,110,97,109,101,42,32,105,115,32,116, + 104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,109, + 111,100,117,108,101,32,98,101,105,110,103,32,105,109,112,111, + 114,116,101,100,46,32,73,116,32,105,115,32,117,115,101,100, + 32,102,111,114,32,108,111,103,103,105,110,103,46,10,10,32, + 32,32,32,42,101,120,99,95,100,101,116,97,105,108,115,42, + 32,105,115,32,97,32,100,105,99,116,105,111,110,97,114,121, + 32,112,97,115,115,101,100,32,116,111,32,73,109,112,111,114, + 116,69,114,114,111,114,32,105,102,32,105,116,32,114,97,105, + 115,101,100,32,102,111,114,10,32,32,32,32,105,109,112,114, + 111,118,101,100,32,100,101,98,117,103,103,105,110,103,46,10, + 10,32,32,32,32,65,110,32,73,109,112,111,114,116,69,114, + 114,111,114,32,105,115,32,114,97,105,115,101,100,32,105,102, + 32,116,104,101,32,98,121,116,101,99,111,100,101,32,105,115, + 32,115,116,97,108,101,46,10,10,32,32,32,32,114,213,0, + 0,0,233,12,0,0,0,114,37,0,0,0,122,22,98,121, + 116,101,99,111,100,101,32,105,115,32,115,116,97,108,101,32, + 102,111,114,32,114,211,0,0,0,78,114,212,0,0,0,41, + 4,114,49,0,0,0,114,208,0,0,0,114,216,0,0,0, + 114,189,0,0,0,41,6,114,48,0,0,0,218,12,115,111, + 117,114,99,101,95,109,116,105,109,101,218,11,115,111,117,114, + 99,101,95,115,105,122,101,114,188,0,0,0,114,218,0,0, + 0,114,146,0,0,0,115,6,0,0,0,32,32,32,32,32, + 32,114,10,0,0,0,218,23,95,118,97,108,105,100,97,116, + 101,95,116,105,109,101,115,116,97,109,112,95,112,121,99,114, + 225,0,0,0,191,2,0,0,115,137,0,0,0,128,0,244, + 38,0,8,22,144,100,152,49,152,82,144,106,211,7,33,160, + 108,176,90,209,38,63,210,7,64,216,20,42,168,52,168,40, + 208,18,51,136,7,220,8,18,215,8,35,209,8,35,160,68, + 168,39,212,8,50,220,14,25,152,39,209,14,49,160,91,209, + 14,49,208,8,49,216,8,19,208,8,31,220,8,22,144,116, + 152,66,152,114,144,123,211,8,35,168,11,176,106,209,40,64, + 210,8,65,220,14,25,208,28,50,176,52,176,40,208,26,59, + 209,14,75,184,123,209,14,75,208,8,75,240,3,0,9,66, + 1,240,3,0,9,32,114,28,0,0,0,99,4,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0, + 243,50,0,0,0,151,0,124,0,100,1,100,2,26,0,124, + 1,107,55,0,0,114,15,116,1,0,0,0,0,0,0,0, + 0,100,3,124,2,155,2,157,2,102,1,105,0,124,3,164, + 1,142,1,130,1,121,4,41,5,97,243,1,0,0,86,97, + 108,105,100,97,116,101,32,97,32,104,97,115,104,45,98,97, + 115,101,100,32,112,121,99,32,98,121,32,99,104,101,99,107, + 105,110,103,32,116,104,101,32,114,101,97,108,32,115,111,117, + 114,99,101,32,104,97,115,104,32,97,103,97,105,110,115,116, + 32,116,104,101,32,111,110,101,32,105,110,10,32,32,32,32, + 116,104,101,32,112,121,99,32,104,101,97,100,101,114,46,10, + 10,32,32,32,32,42,100,97,116,97,42,32,105,115,32,116, + 104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116, + 104,101,32,112,121,99,32,102,105,108,101,46,32,40,79,110, + 108,121,32,116,104,101,32,102,105,114,115,116,32,49,54,32, + 98,121,116,101,115,32,97,114,101,10,32,32,32,32,114,101, + 113,117,105,114,101,100,46,41,10,10,32,32,32,32,42,115, + 111,117,114,99,101,95,104,97,115,104,42,32,105,115,32,116, + 104,101,32,105,109,112,111,114,116,108,105,98,46,117,116,105, + 108,46,115,111,117,114,99,101,95,104,97,115,104,40,41,32, + 111,102,32,116,104,101,32,115,111,117,114,99,101,32,102,105, + 108,101,46,10,10,32,32,32,32,42,110,97,109,101,42,32, + 105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116, + 104,101,32,109,111,100,117,108,101,32,98,101,105,110,103,32, + 105,109,112,111,114,116,101,100,46,32,73,116,32,105,115,32, + 117,115,101,100,32,102,111,114,32,108,111,103,103,105,110,103, + 46,10,10,32,32,32,32,42,101,120,99,95,100,101,116,97, + 105,108,115,42,32,105,115,32,97,32,100,105,99,116,105,111, + 110,97,114,121,32,112,97,115,115,101,100,32,116,111,32,73, + 109,112,111,114,116,69,114,114,111,114,32,105,102,32,105,116, + 32,114,97,105,115,101,100,32,102,111,114,10,32,32,32,32, + 105,109,112,114,111,118,101,100,32,100,101,98,117,103,103,105, + 110,103,46,10,10,32,32,32,32,65,110,32,73,109,112,111, + 114,116,69,114,114,111,114,32,105,115,32,114,97,105,115,101, + 100,32,105,102,32,116,104,101,32,98,121,116,101,99,111,100, + 101,32,105,115,32,115,116,97,108,101,46,10,10,32,32,32, + 32,114,213,0,0,0,114,212,0,0,0,122,46,104,97,115, + 104,32,105,110,32,98,121,116,101,99,111,100,101,32,100,111, + 101,115,110,39,116,32,109,97,116,99,104,32,104,97,115,104, + 32,111,102,32,115,111,117,114,99,101,32,78,41,1,114,189, + 0,0,0,41,4,114,48,0,0,0,218,11,115,111,117,114, + 99,101,95,104,97,115,104,114,188,0,0,0,114,218,0,0, + 0,115,4,0,0,0,32,32,32,32,114,10,0,0,0,218, + 18,95,118,97,108,105,100,97,116,101,95,104,97,115,104,95, + 112,121,99,114,228,0,0,0,219,2,0,0,115,54,0,0, + 0,128,0,240,34,0,8,12,136,65,136,98,128,122,144,91, + 210,7,32,220,14,25,216,14,61,184,100,184,88,208,12,70, + 241,3,3,15,10,224,14,25,241,5,3,15,10,240,0,3, + 9,10,240,3,0,8,33,114,28,0,0,0,99,4,0,0, + 0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,0, + 0,243,206,0,0,0,151,0,116,1,0,0,0,0,0,0, + 0,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, + 125,4,116,5,0,0,0,0,0,0,0,0,124,4,116,6, + 0,0,0,0,0,0,0,0,171,2,0,0,0,0,0,0, + 114,48,116,8,0,0,0,0,0,0,0,0,106,11,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 100,1,124,2,171,2,0,0,0,0,0,0,1,0,124,3, + 129,22,116,13,0,0,0,0,0,0,0,0,106,14,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 124,4,124,3,171,2,0,0,0,0,0,0,1,0,124,4, + 83,0,116,17,0,0,0,0,0,0,0,0,100,2,124,2, + 155,2,157,2,124,1,124,2,172,3,171,3,0,0,0,0, + 0,0,130,1,41,4,122,35,67,111,109,112,105,108,101,32, + 98,121,116,101,99,111,100,101,32,97,115,32,102,111,117,110, + 100,32,105,110,32,97,32,112,121,99,46,122,21,99,111,100, + 101,32,111,98,106,101,99,116,32,102,114,111,109,32,123,33, + 114,125,122,19,78,111,110,45,99,111,100,101,32,111,98,106, + 101,99,116,32,105,110,32,169,2,114,188,0,0,0,114,68, + 0,0,0,41,9,218,7,109,97,114,115,104,97,108,218,5, + 108,111,97,100,115,218,10,105,115,105,110,115,116,97,110,99, + 101,218,10,95,99,111,100,101,95,116,121,112,101,114,208,0, + 0,0,114,216,0,0,0,218,4,95,105,109,112,218,16,95, + 102,105,120,95,99,111,95,102,105,108,101,110,97,109,101,114, + 189,0,0,0,41,5,114,48,0,0,0,114,188,0,0,0, + 114,174,0,0,0,114,177,0,0,0,218,4,99,111,100,101, + 115,5,0,0,0,32,32,32,32,32,114,10,0,0,0,218, + 17,95,99,111,109,112,105,108,101,95,98,121,116,101,99,111, + 100,101,114,238,0,0,0,243,2,0,0,115,99,0,0,0, + 128,0,228,11,18,143,61,137,61,152,20,211,11,30,128,68, + 220,7,17,144,36,156,10,212,7,35,220,8,18,215,8,35, + 209,8,35,208,36,59,184,93,212,8,75,216,11,22,208,11, + 34,220,12,16,215,12,33,209,12,33,160,36,168,11,212,12, + 52,216,15,19,136,11,228,14,25,208,28,47,176,13,208,47, + 64,208,26,65,216,31,35,168,45,244,3,1,15,57,240,0, + 1,9,57,114,28,0,0,0,99,3,0,0,0,0,0,0, + 0,0,0,0,0,5,0,0,0,3,0,0,0,243,8,1, + 0,0,151,0,116,1,0,0,0,0,0,0,0,0,116,2, + 0,0,0,0,0,0,0,0,171,1,0,0,0,0,0,0, + 125,3,124,3,106,5,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,116,7,0,0,0,0,0,0, + 0,0,100,1,171,1,0,0,0,0,0,0,171,1,0,0, + 0,0,0,0,1,0,124,3,106,5,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,116,7,0,0, + 0,0,0,0,0,0,124,1,171,1,0,0,0,0,0,0, + 171,1,0,0,0,0,0,0,1,0,124,3,106,5,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,116,7,0,0,0,0,0,0,0,0,124,2,171,1, - 0,0,0,0,0,0,171,1,0,0,0,0,0,0,1,0, - 124,3,106,5,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,116,9,0,0,0,0,0,0,0,0, - 106,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,0,171,1,0,0,0,0,0,0,171,1, - 0,0,0,0,0,0,1,0,124,3,83,0,41,2,122,43, - 80,114,111,100,117,99,101,32,116,104,101,32,100,97,116,97, - 32,102,111,114,32,97,32,116,105,109,101,115,116,97,109,112, - 45,98,97,115,101,100,32,112,121,99,46,114,1,0,0,0, - 41,6,218,9,98,121,116,101,97,114,114,97,121,114,214,0, - 0,0,218,6,101,120,116,101,110,100,114,43,0,0,0,114, - 230,0,0,0,218,5,100,117,109,112,115,41,4,114,236,0, - 0,0,218,5,109,116,105,109,101,114,223,0,0,0,114,48, - 0,0,0,115,4,0,0,0,32,32,32,32,114,10,0,0, - 0,218,22,95,99,111,100,101,95,116,111,95,116,105,109,101, - 115,116,97,109,112,95,112,121,99,114,243,0,0,0,252,2, - 0,0,115,88,0,0,0,128,0,228,11,20,148,92,211,11, - 34,128,68,216,4,8,135,75,129,75,148,12,152,81,147,15, - 212,4,32,216,4,8,135,75,129,75,148,12,152,85,211,16, - 35,212,4,36,216,4,8,135,75,129,75,148,12,152,91,211, - 16,41,212,4,42,216,4,8,135,75,129,75,148,7,151,13, - 145,13,152,100,211,16,35,212,4,36,216,11,15,128,75,114, - 28,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,3,0,0,0,243,242,0,0,0,151,0, - 116,1,0,0,0,0,0,0,0,0,116,2,0,0,0,0, - 0,0,0,0,171,1,0,0,0,0,0,0,125,3,100,1, - 124,2,100,1,122,3,0,0,122,7,0,0,125,4,124,3, + 116,7,0,0,0,0,0,0,0,0,124,2,171,1,0,0, + 0,0,0,0,171,1,0,0,0,0,0,0,1,0,124,3, 106,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,116,7,0,0,0,0,0,0,0,0,124,4, - 171,1,0,0,0,0,0,0,171,1,0,0,0,0,0,0, - 1,0,116,9,0,0,0,0,0,0,0,0,124,1,171,1, - 0,0,0,0,0,0,100,2,107,40,0,0,115,2,74,0, - 130,1,124,3,106,5,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,1,171,1,0,0,0,0, - 0,0,1,0,124,3,106,5,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,116,11,0,0,0,0, - 0,0,0,0,106,12,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,0,171,1,0,0,0,0, - 0,0,171,1,0,0,0,0,0,0,1,0,124,3,83,0, - 41,3,122,38,80,114,111,100,117,99,101,32,116,104,101,32, - 100,97,116,97,32,102,111,114,32,97,32,104,97,115,104,45, - 98,97,115,101,100,32,112,121,99,46,114,6,0,0,0,114, - 212,0,0,0,41,7,114,239,0,0,0,114,214,0,0,0, - 114,240,0,0,0,114,43,0,0,0,114,7,0,0,0,114, - 230,0,0,0,114,241,0,0,0,41,5,114,236,0,0,0, - 114,226,0,0,0,218,7,99,104,101,99,107,101,100,114,48, - 0,0,0,114,21,0,0,0,115,5,0,0,0,32,32,32, - 32,32,114,10,0,0,0,218,17,95,99,111,100,101,95,116, - 111,95,104,97,115,104,95,112,121,99,114,246,0,0,0,6, - 3,0,0,115,100,0,0,0,128,0,228,11,20,148,92,211, - 11,34,128,68,216,12,15,144,39,152,81,145,44,209,12,30, - 128,69,216,4,8,135,75,129,75,148,12,152,85,211,16,35, - 212,4,36,220,11,14,136,123,211,11,27,152,113,210,11,32, - 208,4,32,208,11,32,216,4,8,135,75,129,75,144,11,212, - 4,28,216,4,8,135,75,129,75,148,7,151,13,145,13,152, - 100,211,16,35,212,4,36,216,11,15,128,75,114,28,0,0, - 0,99,1,0,0,0,0,0,0,0,0,0,0,0,6,0, - 0,0,3,0,0,0,243,220,0,0,0,151,0,100,1,100, - 2,108,0,125,1,116,3,0,0,0,0,0,0,0,0,106, - 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,0,171,1,0,0,0,0,0,0,106,6,0, + 0,0,0,0,116,9,0,0,0,0,0,0,0,0,106,10, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,124,0,171,1,0,0,0,0,0,0,171,1,0,0, + 0,0,0,0,1,0,124,3,83,0,41,2,122,43,80,114, + 111,100,117,99,101,32,116,104,101,32,100,97,116,97,32,102, + 111,114,32,97,32,116,105,109,101,115,116,97,109,112,45,98, + 97,115,101,100,32,112,121,99,46,114,1,0,0,0,41,6, + 218,9,98,121,116,101,97,114,114,97,121,114,215,0,0,0, + 218,6,101,120,116,101,110,100,114,43,0,0,0,114,231,0, + 0,0,218,5,100,117,109,112,115,41,4,114,237,0,0,0, + 218,5,109,116,105,109,101,114,224,0,0,0,114,48,0,0, + 0,115,4,0,0,0,32,32,32,32,114,10,0,0,0,218, + 22,95,99,111,100,101,95,116,111,95,116,105,109,101,115,116, + 97,109,112,95,112,121,99,114,244,0,0,0,0,3,0,0, + 115,88,0,0,0,128,0,228,11,20,148,92,211,11,34,128, + 68,216,4,8,135,75,129,75,148,12,152,81,147,15,212,4, + 32,216,4,8,135,75,129,75,148,12,152,85,211,16,35,212, + 4,36,216,4,8,135,75,129,75,148,12,152,91,211,16,41, + 212,4,42,216,4,8,135,75,129,75,148,7,151,13,145,13, + 152,100,211,16,35,212,4,36,216,11,15,128,75,114,28,0, + 0,0,99,3,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,3,0,0,0,243,242,0,0,0,151,0,116,1, + 0,0,0,0,0,0,0,0,116,2,0,0,0,0,0,0, + 0,0,171,1,0,0,0,0,0,0,125,3,100,1,124,2, + 100,1,122,3,0,0,122,7,0,0,125,4,124,3,106,5, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,125,2,124,1,106,9,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,124,2,171,1,0,0,0, - 0,0,0,125,3,116,3,0,0,0,0,0,0,0,0,106, - 10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,100,2,100,3,171,2,0,0,0,0,0,0,125, - 4,124,4,106,13,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,0,106,13,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,3,100, - 1,25,0,0,0,171,1,0,0,0,0,0,0,171,1,0, - 0,0,0,0,0,83,0,41,4,122,121,68,101,99,111,100, - 101,32,98,121,116,101,115,32,114,101,112,114,101,115,101,110, - 116,105,110,103,32,115,111,117,114,99,101,32,99,111,100,101, - 32,97,110,100,32,114,101,116,117,114,110,32,116,104,101,32, - 115,116,114,105,110,103,46,10,10,32,32,32,32,85,110,105, - 118,101,114,115,97,108,32,110,101,119,108,105,110,101,32,115, - 117,112,112,111,114,116,32,105,115,32,117,115,101,100,32,105, - 110,32,116,104,101,32,100,101,99,111,100,105,110,103,46,10, - 32,32,32,32,114,1,0,0,0,78,84,41,7,218,8,116, - 111,107,101,110,105,122,101,114,114,0,0,0,218,7,66,121, - 116,101,115,73,79,218,8,114,101,97,100,108,105,110,101,218, - 15,100,101,116,101,99,116,95,101,110,99,111,100,105,110,103, - 218,25,73,110,99,114,101,109,101,110,116,97,108,78,101,119, - 108,105,110,101,68,101,99,111,100,101,114,218,6,100,101,99, - 111,100,101,41,5,218,12,115,111,117,114,99,101,95,98,121, - 116,101,115,114,248,0,0,0,218,21,115,111,117,114,99,101, - 95,98,121,116,101,115,95,114,101,97,100,108,105,110,101,218, - 8,101,110,99,111,100,105,110,103,218,15,110,101,119,108,105, - 110,101,95,100,101,99,111,100,101,114,115,5,0,0,0,32, - 32,32,32,32,114,10,0,0,0,218,13,100,101,99,111,100, - 101,95,115,111,117,114,99,101,114,2,1,0,0,17,3,0, - 0,115,95,0,0,0,128,0,243,10,0,5,20,220,28,31, - 159,75,153,75,168,12,211,28,53,215,28,62,209,28,62,208, - 4,25,216,15,23,215,15,39,209,15,39,208,40,61,211,15, - 62,128,72,220,22,25,215,22,51,209,22,51,176,68,184,36, - 211,22,63,128,79,216,11,26,215,11,33,209,11,33,160,44, - 215,34,53,209,34,53,176,104,184,113,177,107,211,34,66,211, - 11,67,208,4,67,114,28,0,0,0,169,2,218,6,108,111, - 97,100,101,114,218,26,115,117,98,109,111,100,117,108,101,95, - 115,101,97,114,99,104,95,108,111,99,97,116,105,111,110,115, - 99,2,0,0,0,0,0,0,0,2,0,0,0,6,0,0, - 0,3,0,0,0,243,138,2,0,0,151,0,124,1,128,33, - 100,2,125,1,116,1,0,0,0,0,0,0,0,0,124,2, - 100,3,171,2,0,0,0,0,0,0,114,52,9,0,124,2, - 106,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,0,171,1,0,0,0,0,0,0,125,1, - 110,33,116,7,0,0,0,0,0,0,0,0,106,8,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,1,171,1,0,0,0,0,0,0,125,1,9,0,116,11, - 0,0,0,0,0,0,0,0,124,1,171,1,0,0,0,0, - 0,0,125,1,116,14,0,0,0,0,0,0,0,0,106,17, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,0,124,2,124,1,172,4,171,3,0,0,0,0, - 0,0,125,4,100,5,124,4,95,9,0,0,0,0,0,0, - 0,0,124,2,128,63,116,21,0,0,0,0,0,0,0,0, - 171,0,0,0,0,0,0,0,68,0,93,49,0,0,92,2, - 0,0,125,5,125,6,124,1,106,23,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,116,25,0,0, - 0,0,0,0,0,0,124,6,171,1,0,0,0,0,0,0, - 171,1,0,0,0,0,0,0,115,1,140,33,2,0,124,5, - 124,0,124,1,171,2,0,0,0,0,0,0,125,2,124,2, - 124,4,95,13,0,0,0,0,0,0,0,0,1,0,110,2, - 4,0,121,1,124,3,116,28,0,0,0,0,0,0,0,0, - 117,0,114,40,116,1,0,0,0,0,0,0,0,0,124,2, - 100,6,171,2,0,0,0,0,0,0,114,35,9,0,124,2, - 106,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,0,171,1,0,0,0,0,0,0,125,7, - 124,7,114,15,103,0,124,4,95,16,0,0,0,0,0,0, - 0,0,110,7,124,3,124,4,95,16,0,0,0,0,0,0, - 0,0,124,4,106,32,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,103,0,107,40,0,0,114,43, - 124,1,114,41,116,35,0,0,0,0,0,0,0,0,124,1, - 171,1,0,0,0,0,0,0,100,7,25,0,0,0,125,8, + 0,0,116,7,0,0,0,0,0,0,0,0,124,4,171,1, + 0,0,0,0,0,0,171,1,0,0,0,0,0,0,1,0, + 116,9,0,0,0,0,0,0,0,0,124,1,171,1,0,0, + 0,0,0,0,100,2,107,40,0,0,115,2,74,0,130,1, + 124,3,106,5,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,1,171,1,0,0,0,0,0,0, + 1,0,124,3,106,5,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,116,11,0,0,0,0,0,0, + 0,0,106,12,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, + 171,1,0,0,0,0,0,0,1,0,124,3,83,0,41,3, + 122,38,80,114,111,100,117,99,101,32,116,104,101,32,100,97, + 116,97,32,102,111,114,32,97,32,104,97,115,104,45,98,97, + 115,101,100,32,112,121,99,46,114,6,0,0,0,114,213,0, + 0,0,41,7,114,240,0,0,0,114,215,0,0,0,114,241, + 0,0,0,114,43,0,0,0,114,7,0,0,0,114,231,0, + 0,0,114,242,0,0,0,41,5,114,237,0,0,0,114,227, + 0,0,0,218,7,99,104,101,99,107,101,100,114,48,0,0, + 0,114,21,0,0,0,115,5,0,0,0,32,32,32,32,32, + 114,10,0,0,0,218,17,95,99,111,100,101,95,116,111,95, + 104,97,115,104,95,112,121,99,114,247,0,0,0,10,3,0, + 0,115,100,0,0,0,128,0,228,11,20,148,92,211,11,34, + 128,68,216,12,15,144,39,152,81,145,44,209,12,30,128,69, + 216,4,8,135,75,129,75,148,12,152,85,211,16,35,212,4, + 36,220,11,14,136,123,211,11,27,152,113,210,11,32,208,4, + 32,208,11,32,216,4,8,135,75,129,75,144,11,212,4,28, + 216,4,8,135,75,129,75,148,7,151,13,145,13,152,100,211, + 16,35,212,4,36,216,11,15,128,75,114,28,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, + 3,0,0,0,243,220,0,0,0,151,0,100,1,100,2,108, + 0,125,1,116,3,0,0,0,0,0,0,0,0,106,4,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,124,0,171,1,0,0,0,0,0,0,106,6,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,125, + 2,124,1,106,9,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,2,171,1,0,0,0,0,0, + 0,125,3,116,3,0,0,0,0,0,0,0,0,106,10,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,100,2,100,3,171,2,0,0,0,0,0,0,125,4,124, + 4,106,13,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,0,106,13,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,3,100,1,25, + 0,0,0,171,1,0,0,0,0,0,0,171,1,0,0,0, + 0,0,0,83,0,41,4,122,121,68,101,99,111,100,101,32, + 98,121,116,101,115,32,114,101,112,114,101,115,101,110,116,105, + 110,103,32,115,111,117,114,99,101,32,99,111,100,101,32,97, + 110,100,32,114,101,116,117,114,110,32,116,104,101,32,115,116, + 114,105,110,103,46,10,10,32,32,32,32,85,110,105,118,101, + 114,115,97,108,32,110,101,119,108,105,110,101,32,115,117,112, + 112,111,114,116,32,105,115,32,117,115,101,100,32,105,110,32, + 116,104,101,32,100,101,99,111,100,105,110,103,46,10,32,32, + 32,32,114,1,0,0,0,78,84,41,7,218,8,116,111,107, + 101,110,105,122,101,114,114,0,0,0,218,7,66,121,116,101, + 115,73,79,218,8,114,101,97,100,108,105,110,101,218,15,100, + 101,116,101,99,116,95,101,110,99,111,100,105,110,103,218,25, + 73,110,99,114,101,109,101,110,116,97,108,78,101,119,108,105, + 110,101,68,101,99,111,100,101,114,218,6,100,101,99,111,100, + 101,41,5,218,12,115,111,117,114,99,101,95,98,121,116,101, + 115,114,249,0,0,0,218,21,115,111,117,114,99,101,95,98, + 121,116,101,115,95,114,101,97,100,108,105,110,101,218,8,101, + 110,99,111,100,105,110,103,218,15,110,101,119,108,105,110,101, + 95,100,101,99,111,100,101,114,115,5,0,0,0,32,32,32, + 32,32,114,10,0,0,0,218,13,100,101,99,111,100,101,95, + 115,111,117,114,99,101,114,3,1,0,0,21,3,0,0,115, + 95,0,0,0,128,0,243,10,0,5,20,220,28,31,159,75, + 153,75,168,12,211,28,53,215,28,62,209,28,62,208,4,25, + 216,15,23,215,15,39,209,15,39,208,40,61,211,15,62,128, + 72,220,22,25,215,22,51,209,22,51,176,68,184,36,211,22, + 63,128,79,216,11,26,215,11,33,209,11,33,160,44,215,34, + 53,209,34,53,176,104,184,113,177,107,211,34,66,211,11,67, + 208,4,67,114,28,0,0,0,169,2,218,6,108,111,97,100, + 101,114,218,26,115,117,98,109,111,100,117,108,101,95,115,101, + 97,114,99,104,95,108,111,99,97,116,105,111,110,115,99,2, + 0,0,0,0,0,0,0,2,0,0,0,6,0,0,0,3, + 0,0,0,243,138,2,0,0,151,0,124,1,128,33,100,2, + 125,1,116,1,0,0,0,0,0,0,0,0,124,2,100,3, + 171,2,0,0,0,0,0,0,114,52,9,0,124,2,106,3, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,124,0,171,1,0,0,0,0,0,0,125,1,110,33, + 116,7,0,0,0,0,0,0,0,0,106,8,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,1, + 171,1,0,0,0,0,0,0,125,1,9,0,116,11,0,0, + 0,0,0,0,0,0,124,1,171,1,0,0,0,0,0,0, + 125,1,116,14,0,0,0,0,0,0,0,0,106,17,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 124,0,124,2,124,1,172,4,171,3,0,0,0,0,0,0, + 125,4,100,5,124,4,95,9,0,0,0,0,0,0,0,0, + 124,2,128,63,116,21,0,0,0,0,0,0,0,0,171,0, + 0,0,0,0,0,0,68,0,93,49,0,0,92,2,0,0, + 125,5,125,6,124,1,106,23,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,116,25,0,0,0,0, + 0,0,0,0,124,6,171,1,0,0,0,0,0,0,171,1, + 0,0,0,0,0,0,115,1,140,33,2,0,124,5,124,0, + 124,1,171,2,0,0,0,0,0,0,125,2,124,2,124,4, + 95,13,0,0,0,0,0,0,0,0,1,0,110,2,4,0, + 121,1,124,3,116,28,0,0,0,0,0,0,0,0,117,0, + 114,40,116,1,0,0,0,0,0,0,0,0,124,2,100,6, + 171,2,0,0,0,0,0,0,114,35,9,0,124,2,106,31, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,124,0,171,1,0,0,0,0,0,0,125,7,124,7, + 114,15,103,0,124,4,95,16,0,0,0,0,0,0,0,0, + 110,7,124,3,124,4,95,16,0,0,0,0,0,0,0,0, 124,4,106,32,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,106,37,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,8,171,1,0,0, - 0,0,0,0,1,0,124,4,83,0,35,0,116,4,0,0, - 0,0,0,0,0,0,36,0,114,3,1,0,89,0,140,222, - 119,0,120,3,89,0,119,1,35,0,116,12,0,0,0,0, - 0,0,0,0,36,0,114,3,1,0,89,0,140,237,119,0, - 120,3,89,0,119,1,35,0,116,4,0,0,0,0,0,0, - 0,0,36,0,114,3,1,0,89,0,140,101,119,0,120,3, - 89,0,119,1,41,8,97,61,1,0,0,82,101,116,117,114, - 110,32,97,32,109,111,100,117,108,101,32,115,112,101,99,32, - 98,97,115,101,100,32,111,110,32,97,32,102,105,108,101,32, - 108,111,99,97,116,105,111,110,46,10,10,32,32,32,32,84, - 111,32,105,110,100,105,99,97,116,101,32,116,104,97,116,32, - 116,104,101,32,109,111,100,117,108,101,32,105,115,32,97,32, - 112,97,99,107,97,103,101,44,32,115,101,116,10,32,32,32, - 32,115,117,98,109,111,100,117,108,101,95,115,101,97,114,99, - 104,95,108,111,99,97,116,105,111,110,115,32,116,111,32,97, - 32,108,105,115,116,32,111,102,32,100,105,114,101,99,116,111, - 114,121,32,112,97,116,104,115,46,32,32,65,110,10,32,32, - 32,32,101,109,112,116,121,32,108,105,115,116,32,105,115,32, - 115,117,102,102,105,99,105,101,110,116,44,32,116,104,111,117, - 103,104,32,105,116,115,32,110,111,116,32,111,116,104,101,114, - 119,105,115,101,32,117,115,101,102,117,108,32,116,111,32,116, - 104,101,10,32,32,32,32,105,109,112,111,114,116,32,115,121, - 115,116,101,109,46,10,10,32,32,32,32,84,104,101,32,108, - 111,97,100,101,114,32,109,117,115,116,32,116,97,107,101,32, - 97,32,115,112,101,99,32,97,115,32,105,116,115,32,111,110, - 108,121,32,95,95,105,110,105,116,95,95,40,41,32,97,114, - 103,46,10,10,32,32,32,32,78,122,9,60,117,110,107,110, - 111,119,110,62,218,12,103,101,116,95,102,105,108,101,110,97, - 109,101,169,1,218,6,111,114,105,103,105,110,84,218,10,105, - 115,95,112,97,99,107,97,103,101,114,1,0,0,0,41,19, - 114,199,0,0,0,114,7,1,0,0,114,188,0,0,0,114, - 23,0,0,0,114,130,0,0,0,114,105,0,0,0,114,87, - 0,0,0,114,207,0,0,0,218,10,77,111,100,117,108,101, - 83,112,101,99,218,13,95,115,101,116,95,102,105,108,101,97, - 116,116,114,218,27,95,103,101,116,95,115,117,112,112,111,114, - 116,101,100,95,102,105,108,101,95,108,111,97,100,101,114,115, - 114,59,0,0,0,114,179,0,0,0,114,4,1,0,0,218, - 9,95,80,79,80,85,76,65,84,69,114,10,1,0,0,114, - 5,1,0,0,114,81,0,0,0,114,64,0,0,0,41,9, - 114,187,0,0,0,218,8,108,111,99,97,116,105,111,110,114, - 4,1,0,0,114,5,1,0,0,218,4,115,112,101,99,218, - 12,108,111,97,100,101,114,95,99,108,97,115,115,218,8,115, - 117,102,102,105,120,101,115,114,10,1,0,0,218,7,100,105, - 114,110,97,109,101,115,9,0,0,0,32,32,32,32,32,32, - 32,32,32,114,10,0,0,0,218,23,115,112,101,99,95,102, - 114,111,109,95,102,105,108,101,95,108,111,99,97,116,105,111, - 110,114,20,1,0,0,34,3,0,0,115,105,1,0,0,128, - 0,240,24,0,8,16,208,7,23,240,8,0,20,31,136,8, - 220,11,18,144,54,152,62,212,11,42,240,4,3,13,21,216, - 27,33,215,27,46,209,27,46,168,116,211,27,52,145,8,244, - 8,0,20,23,151,58,145,58,152,104,211,19,39,136,8,240, - 2,3,9,17,220,23,36,160,88,211,23,46,136,72,244,20, - 0,12,22,215,11,32,209,11,32,160,20,160,118,176,104,208, - 11,32,211,11,63,128,68,216,25,29,128,68,212,4,22,240, - 6,0,8,14,128,126,220,38,65,214,38,67,209,12,34,136, - 76,152,40,216,15,23,215,15,32,209,15,32,164,21,160,120, - 163,31,213,15,49,217,25,37,160,100,168,72,211,25,53,144, - 6,216,30,36,144,4,148,11,217,16,21,240,9,0,39,68, - 1,240,12,0,20,24,240,6,0,8,34,164,89,209,7,46, - 228,11,18,144,54,152,60,212,11,40,240,2,6,13,57,216, - 29,35,215,29,46,209,29,46,168,116,211,29,52,144,10,241, - 8,0,20,30,216,54,56,144,68,213,20,51,224,42,68,136, - 4,212,8,39,216,7,11,215,7,38,209,7,38,168,34,210, - 7,44,217,11,19,220,22,33,160,40,211,22,43,168,65,209, - 22,46,136,71,216,12,16,215,12,43,209,12,43,215,12,50, - 209,12,50,176,55,212,12,59,224,11,15,128,75,248,244,93, - 1,0,20,31,242,0,1,13,21,217,16,20,240,3,1,13, - 21,251,244,12,0,16,23,242,0,1,9,17,217,12,16,240, - 3,1,9,17,251,244,56,0,20,31,242,0,1,13,21,217, - 16,20,240,3,1,13,21,250,115,52,0,0,0,146,17,68, - 24,0,186,11,68,39,0,194,58,17,68,54,0,196,24,9, - 68,36,3,196,35,1,68,36,3,196,39,9,68,51,3,196, - 50,1,68,51,3,196,54,9,69,2,3,197,1,1,69,2, - 3,99,1,0,0,0,0,0,0,0,0,0,0,0,5,0, - 0,0,3,0,0,0,243,140,1,0,0,151,0,116,1,0, - 0,0,0,0,0,0,0,124,0,116,2,0,0,0,0,0, - 0,0,0,171,2,0,0,0,0,0,0,115,1,121,1,116, - 5,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, - 0,125,1,124,0,106,7,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,100,2,100,1,171,2,0, - 0,0,0,0,0,125,2,124,0,106,7,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,100,3,124, - 1,171,2,0,0,0,0,0,0,125,3,124,2,128,18,124, - 3,124,1,117,0,114,1,121,1,124,3,128,11,116,9,0, - 0,0,0,0,0,0,0,100,4,171,1,0,0,0,0,0, - 0,130,1,116,11,0,0,0,0,0,0,0,0,124,3,100, - 5,124,1,171,3,0,0,0,0,0,0,125,4,124,4,124, - 1,100,1,102,2,118,0,114,54,124,2,128,24,124,4,124, - 1,117,0,114,6,116,12,0,0,0,0,0,0,0,0,110, - 5,116,8,0,0,0,0,0,0,0,0,125,5,2,0,124, - 5,100,4,171,1,0,0,0,0,0,0,130,1,116,15,0, - 0,0,0,0,0,0,0,106,16,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,100,4,116,18,0, - 0,0,0,0,0,0,0,171,2,0,0,0,0,0,0,1, - 0,124,2,125,4,124,4,128,2,74,0,130,1,124,2,129, - 33,124,2,124,4,107,55,0,0,114,28,116,15,0,0,0, + 0,0,0,0,0,0,103,0,107,40,0,0,114,43,124,1, + 114,41,116,35,0,0,0,0,0,0,0,0,124,1,171,1, + 0,0,0,0,0,0,100,7,25,0,0,0,125,8,124,4, + 106,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,106,37,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,124,8,171,1,0,0,0,0, + 0,0,1,0,124,4,83,0,35,0,116,4,0,0,0,0, + 0,0,0,0,36,0,114,3,1,0,89,0,140,222,119,0, + 120,3,89,0,119,1,35,0,116,12,0,0,0,0,0,0, + 0,0,36,0,114,3,1,0,89,0,140,237,119,0,120,3, + 89,0,119,1,35,0,116,4,0,0,0,0,0,0,0,0, + 36,0,114,3,1,0,89,0,140,101,119,0,120,3,89,0, + 119,1,41,8,97,61,1,0,0,82,101,116,117,114,110,32, + 97,32,109,111,100,117,108,101,32,115,112,101,99,32,98,97, + 115,101,100,32,111,110,32,97,32,102,105,108,101,32,108,111, + 99,97,116,105,111,110,46,10,10,32,32,32,32,84,111,32, + 105,110,100,105,99,97,116,101,32,116,104,97,116,32,116,104, + 101,32,109,111,100,117,108,101,32,105,115,32,97,32,112,97, + 99,107,97,103,101,44,32,115,101,116,10,32,32,32,32,115, + 117,98,109,111,100,117,108,101,95,115,101,97,114,99,104,95, + 108,111,99,97,116,105,111,110,115,32,116,111,32,97,32,108, + 105,115,116,32,111,102,32,100,105,114,101,99,116,111,114,121, + 32,112,97,116,104,115,46,32,32,65,110,10,32,32,32,32, + 101,109,112,116,121,32,108,105,115,116,32,105,115,32,115,117, + 102,102,105,99,105,101,110,116,44,32,116,104,111,117,103,104, + 32,105,116,115,32,110,111,116,32,111,116,104,101,114,119,105, + 115,101,32,117,115,101,102,117,108,32,116,111,32,116,104,101, + 10,32,32,32,32,105,109,112,111,114,116,32,115,121,115,116, + 101,109,46,10,10,32,32,32,32,84,104,101,32,108,111,97, + 100,101,114,32,109,117,115,116,32,116,97,107,101,32,97,32, + 115,112,101,99,32,97,115,32,105,116,115,32,111,110,108,121, + 32,95,95,105,110,105,116,95,95,40,41,32,97,114,103,46, + 10,10,32,32,32,32,78,122,9,60,117,110,107,110,111,119, + 110,62,218,12,103,101,116,95,102,105,108,101,110,97,109,101, + 169,1,218,6,111,114,105,103,105,110,84,218,10,105,115,95, + 112,97,99,107,97,103,101,114,1,0,0,0,41,19,114,200, + 0,0,0,114,8,1,0,0,114,189,0,0,0,114,23,0, + 0,0,114,131,0,0,0,114,105,0,0,0,114,87,0,0, + 0,114,208,0,0,0,218,10,77,111,100,117,108,101,83,112, + 101,99,218,13,95,115,101,116,95,102,105,108,101,97,116,116, + 114,218,27,95,103,101,116,95,115,117,112,112,111,114,116,101, + 100,95,102,105,108,101,95,108,111,97,100,101,114,115,114,59, + 0,0,0,114,180,0,0,0,114,5,1,0,0,218,9,95, + 80,79,80,85,76,65,84,69,114,11,1,0,0,114,6,1, + 0,0,114,81,0,0,0,114,64,0,0,0,41,9,114,188, + 0,0,0,218,8,108,111,99,97,116,105,111,110,114,5,1, + 0,0,114,6,1,0,0,218,4,115,112,101,99,218,12,108, + 111,97,100,101,114,95,99,108,97,115,115,218,8,115,117,102, + 102,105,120,101,115,114,11,1,0,0,218,7,100,105,114,110, + 97,109,101,115,9,0,0,0,32,32,32,32,32,32,32,32, + 32,114,10,0,0,0,218,23,115,112,101,99,95,102,114,111, + 109,95,102,105,108,101,95,108,111,99,97,116,105,111,110,114, + 21,1,0,0,38,3,0,0,115,105,1,0,0,128,0,240, + 24,0,8,16,208,7,23,240,8,0,20,31,136,8,220,11, + 18,144,54,152,62,212,11,42,240,4,3,13,21,216,27,33, + 215,27,46,209,27,46,168,116,211,27,52,145,8,244,8,0, + 20,23,151,58,145,58,152,104,211,19,39,136,8,240,2,3, + 9,17,220,23,36,160,88,211,23,46,136,72,244,20,0,12, + 22,215,11,32,209,11,32,160,20,160,118,176,104,208,11,32, + 211,11,63,128,68,216,25,29,128,68,212,4,22,240,6,0, + 8,14,128,126,220,38,65,214,38,67,209,12,34,136,76,152, + 40,216,15,23,215,15,32,209,15,32,164,21,160,120,163,31, + 213,15,49,217,25,37,160,100,168,72,211,25,53,144,6,216, + 30,36,144,4,148,11,217,16,21,240,9,0,39,68,1,240, + 12,0,20,24,240,6,0,8,34,164,89,209,7,46,228,11, + 18,144,54,152,60,212,11,40,240,2,6,13,57,216,29,35, + 215,29,46,209,29,46,168,116,211,29,52,144,10,241,8,0, + 20,30,216,54,56,144,68,213,20,51,224,42,68,136,4,212, + 8,39,216,7,11,215,7,38,209,7,38,168,34,210,7,44, + 217,11,19,220,22,33,160,40,211,22,43,168,65,209,22,46, + 136,71,216,12,16,215,12,43,209,12,43,215,12,50,209,12, + 50,176,55,212,12,59,224,11,15,128,75,248,244,93,1,0, + 20,31,242,0,1,13,21,217,16,20,240,3,1,13,21,251, + 244,12,0,16,23,242,0,1,9,17,217,12,16,240,3,1, + 9,17,251,244,56,0,20,31,242,0,1,13,21,217,16,20, + 240,3,1,13,21,250,115,52,0,0,0,146,17,68,24,0, + 186,11,68,39,0,194,58,17,68,54,0,196,24,9,68,36, + 3,196,35,1,68,36,3,196,39,9,68,51,3,196,50,1, + 68,51,3,196,54,9,69,2,3,197,1,1,69,2,3,99, + 1,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, + 3,0,0,0,243,140,1,0,0,151,0,116,1,0,0,0, + 0,0,0,0,0,124,0,116,2,0,0,0,0,0,0,0, + 0,171,2,0,0,0,0,0,0,115,1,121,1,116,5,0, + 0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,125, + 1,124,0,106,7,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,100,2,100,1,171,2,0,0,0, + 0,0,0,125,2,124,0,106,7,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,100,3,124,1,171, + 2,0,0,0,0,0,0,125,3,124,2,128,18,124,3,124, + 1,117,0,114,1,121,1,124,3,128,11,116,9,0,0,0, + 0,0,0,0,0,100,4,171,1,0,0,0,0,0,0,130, + 1,116,11,0,0,0,0,0,0,0,0,124,3,100,5,124, + 1,171,3,0,0,0,0,0,0,125,4,124,4,124,1,100, + 1,102,2,118,0,114,54,124,2,128,24,124,4,124,1,117, + 0,114,6,116,12,0,0,0,0,0,0,0,0,110,5,116, + 8,0,0,0,0,0,0,0,0,125,5,2,0,124,5,100, + 4,171,1,0,0,0,0,0,0,130,1,116,15,0,0,0, 0,0,0,0,0,106,16,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,100,6,116,18,0,0,0, + 0,0,0,0,0,0,0,0,0,100,4,116,18,0,0,0, 0,0,0,0,0,171,2,0,0,0,0,0,0,1,0,124, - 2,83,0,124,4,83,0,41,7,122,67,72,101,108,112,101, - 114,32,102,117,110,99,116,105,111,110,32,102,111,114,32,95, - 119,97,114,110,105,110,103,115,46,99,10,10,32,32,32,32, - 83,101,101,32,71,72,35,57,55,56,53,48,32,102,111,114, - 32,100,101,116,97,105,108,115,46,10,32,32,32,32,78,218, - 10,95,95,108,111,97,100,101,114,95,95,218,8,95,95,115, - 112,101,99,95,95,122,43,77,111,100,117,108,101,32,103,108, - 111,98,97,108,115,32,105,115,32,109,105,115,115,105,110,103, - 32,97,32,95,95,115,112,101,99,95,95,46,108,111,97,100, - 101,114,114,4,1,0,0,122,45,77,111,100,117,108,101,32, - 103,108,111,98,97,108,115,59,32,95,95,108,111,97,100,101, - 114,95,95,32,33,61,32,95,95,115,112,101,99,95,95,46, - 108,111,97,100,101,114,41,10,114,232,0,0,0,218,4,100, - 105,99,116,218,6,111,98,106,101,99,116,218,3,103,101,116, - 114,138,0,0,0,114,201,0,0,0,218,14,65,116,116,114, - 105,98,117,116,101,69,114,114,111,114,114,126,0,0,0,114, - 127,0,0,0,114,128,0,0,0,41,6,218,14,109,111,100, - 117,108,101,95,103,108,111,98,97,108,115,218,7,109,105,115, - 115,105,110,103,114,4,1,0,0,114,16,1,0,0,218,11, - 115,112,101,99,95,108,111,97,100,101,114,218,3,101,120,99, - 115,6,0,0,0,32,32,32,32,32,32,114,10,0,0,0, - 218,16,95,98,108,101,115,115,95,109,121,95,108,111,97,100, - 101,114,114,32,1,0,0,104,3,0,0,115,232,0,0,0, - 128,0,244,24,0,12,22,144,110,164,100,212,11,43,216,15, - 19,228,14,20,139,104,128,71,216,13,27,215,13,31,209,13, - 31,160,12,168,100,211,13,51,128,70,216,11,25,215,11,29, - 209,11,29,152,106,168,39,211,11,50,128,68,224,7,13,128, - 126,216,11,15,144,55,137,63,240,6,0,20,24,216,13,17, - 136,92,220,18,28,208,29,74,211,18,75,208,12,75,228,18, - 25,152,36,160,8,168,39,211,18,50,128,75,224,7,18,144, - 119,160,4,144,111,209,7,37,216,11,17,136,62,216,36,47, - 176,55,209,36,58,149,46,196,10,136,67,217,18,21,208,22, - 67,211,18,68,208,12,68,220,8,17,143,14,137,14,216,12, - 57,220,12,30,244,5,2,9,32,240,6,0,23,29,136,11, - 224,11,22,208,11,34,208,4,34,208,11,34,216,7,13,208, - 7,25,152,102,168,11,210,30,51,220,8,17,143,14,137,14, - 216,12,59,220,12,30,244,5,2,9,32,240,6,0,16,22, - 136,13,224,11,22,208,4,22,114,28,0,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0, - 0,0,243,90,0,0,0,151,0,101,0,90,1,100,0,90, - 2,100,1,90,3,100,2,90,4,100,3,90,5,101,6,120, - 1,114,4,1,0,100,4,101,7,118,0,90,8,101,9,100, - 5,132,0,171,0,0,0,0,0,0,0,90,10,101,11,100, - 6,132,0,171,0,0,0,0,0,0,0,90,12,101,11,100, - 9,100,8,132,1,171,0,0,0,0,0,0,0,90,13,121, - 7,41,10,218,21,87,105,110,100,111,119,115,82,101,103,105, - 115,116,114,121,70,105,110,100,101,114,122,62,77,101,116,97, - 32,112,97,116,104,32,102,105,110,100,101,114,32,102,111,114, - 32,109,111,100,117,108,101,115,32,100,101,99,108,97,114,101, - 100,32,105,110,32,116,104,101,32,87,105,110,100,111,119,115, - 32,114,101,103,105,115,116,114,121,46,122,59,83,111,102,116, - 119,97,114,101,92,80,121,116,104,111,110,92,80,121,116,104, - 111,110,67,111,114,101,92,123,115,121,115,95,118,101,114,115, - 105,111,110,125,92,77,111,100,117,108,101,115,92,123,102,117, - 108,108,110,97,109,101,125,122,65,83,111,102,116,119,97,114, - 101,92,80,121,116,104,111,110,92,80,121,116,104,111,110,67, - 111,114,101,92,123,115,121,115,95,118,101,114,115,105,111,110, - 125,92,77,111,100,117,108,101,115,92,123,102,117,108,108,110, - 97,109,101,125,92,68,101,98,117,103,122,6,95,100,46,112, - 121,100,99,1,0,0,0,0,0,0,0,0,0,0,0,5, - 0,0,0,3,0,0,0,243,178,0,0,0,151,0,9,0, - 116,1,0,0,0,0,0,0,0,0,106,2,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,0, - 0,0,0,0,0,0,0,0,106,4,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,0,171,2, - 0,0,0,0,0,0,83,0,35,0,116,6,0,0,0,0, - 0,0,0,0,36,0,114,39,1,0,116,1,0,0,0,0, - 0,0,0,0,106,2,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,116,0,0,0,0,0,0,0, - 0,0,106,8,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,0,171,2,0,0,0,0,0,0, - 99,2,89,0,83,0,119,0,120,3,89,0,119,1,114,77, - 0,0,0,41,5,218,6,119,105,110,114,101,103,218,7,79, - 112,101,110,75,101,121,218,17,72,75,69,89,95,67,85,82, - 82,69,78,84,95,85,83,69,82,114,87,0,0,0,218,18, - 72,75,69,89,95,76,79,67,65,76,95,77,65,67,72,73, - 78,69,114,25,0,0,0,115,1,0,0,0,32,114,10,0, - 0,0,218,14,95,111,112,101,110,95,114,101,103,105,115,116, - 114,121,122,36,87,105,110,100,111,119,115,82,101,103,105,115, - 116,114,121,70,105,110,100,101,114,46,95,111,112,101,110,95, - 114,101,103,105,115,116,114,121,166,3,0,0,115,71,0,0, - 0,128,0,240,4,3,9,66,1,220,19,25,151,62,145,62, - 164,38,215,34,58,209,34,58,184,67,211,19,64,208,12,64, - 248,220,15,22,242,0,1,9,66,1,220,19,25,151,62,145, - 62,164,38,215,34,59,209,34,59,184,83,211,19,65,210,12, - 65,240,3,1,9,66,1,250,115,15,0,0,0,130,35,38, - 0,166,45,65,22,3,193,21,1,65,22,3,99,2,0,0, - 0,0,0,0,0,0,0,0,0,7,0,0,0,3,0,0, - 0,243,56,1,0,0,151,0,124,0,106,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,13, - 124,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,125,2,110,12,124,0,106,4,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 125,2,124,2,106,7,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,1,100,1,116,8,0,0, - 0,0,0,0,0,0,106,10,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,100,0,100,2,26,0, - 122,6,0,0,172,3,171,2,0,0,0,0,0,0,125,3, - 9,0,124,0,106,13,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,3,171,1,0,0,0,0, - 0,0,53,0,125,4,116,15,0,0,0,0,0,0,0,0, - 106,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,4,100,4,171,2,0,0,0,0,0,0, - 125,5,100,0,100,0,100,0,171,2,0,0,0,0,0,0, - 1,0,124,5,83,0,35,0,49,0,115,1,119,2,1,0, - 89,0,1,0,1,0,127,5,83,0,120,3,89,0,119,1, - 35,0,116,18,0,0,0,0,0,0,0,0,36,0,114,3, - 1,0,89,0,121,0,119,0,120,3,89,0,119,1,41,5, - 78,122,5,37,100,46,37,100,114,52,0,0,0,41,2,218, - 8,102,117,108,108,110,97,109,101,218,11,115,121,115,95,118, - 101,114,115,105,111,110,114,12,0,0,0,41,10,218,11,68, - 69,66,85,71,95,66,85,73,76,68,218,18,82,69,71,73, - 83,84,82,89,95,75,69,89,95,68,69,66,85,71,218,12, - 82,69,71,73,83,84,82,89,95,75,69,89,218,6,102,111, - 114,109,97,116,114,20,0,0,0,218,12,118,101,114,115,105, - 111,110,95,105,110,102,111,114,40,1,0,0,114,36,1,0, - 0,218,10,81,117,101,114,121,86,97,108,117,101,114,87,0, - 0,0,41,6,218,3,99,108,115,114,42,1,0,0,218,12, - 114,101,103,105,115,116,114,121,95,107,101,121,114,26,0,0, - 0,218,4,104,107,101,121,218,8,102,105,108,101,112,97,116, - 104,115,6,0,0,0,32,32,32,32,32,32,114,10,0,0, - 0,218,16,95,115,101,97,114,99,104,95,114,101,103,105,115, - 116,114,121,122,38,87,105,110,100,111,119,115,82,101,103,105, - 115,116,114,121,70,105,110,100,101,114,46,95,115,101,97,114, - 99,104,95,114,101,103,105,115,116,114,121,173,3,0,0,115, - 159,0,0,0,128,0,224,11,14,143,63,138,63,216,27,30, - 215,27,49,209,27,49,137,76,224,27,30,215,27,43,209,27, - 43,136,76,216,14,26,215,14,33,209,14,33,168,56,216,46, - 53,188,3,215,56,72,209,56,72,200,18,200,33,208,56,76, - 209,46,76,240,3,0,15,34,243,0,1,15,78,1,136,3, - 240,4,4,9,24,216,17,20,215,17,35,209,17,35,160,67, - 212,17,40,168,68,220,27,33,215,27,44,209,27,44,168,84, - 176,50,211,27,54,144,8,247,3,0,18,41,240,8,0,16, - 24,136,15,247,9,0,18,41,240,8,0,16,24,136,15,251, - 244,5,0,16,23,242,0,1,9,24,217,19,23,240,3,1, - 9,24,250,115,48,0,0,0,193,14,17,66,13,0,193,31, - 23,66,0,3,193,54,8,66,13,0,194,0,5,66,10,7, - 194,5,3,66,13,0,194,10,3,66,13,0,194,13,9,66, - 25,3,194,24,1,66,25,3,78,99,4,0,0,0,0,0, - 0,0,0,0,0,0,8,0,0,0,3,0,0,0,243,0, - 1,0,0,151,0,124,0,106,1,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,1,171,1,0, - 0,0,0,0,0,125,4,124,4,128,1,121,0,9,0,116, - 3,0,0,0,0,0,0,0,0,124,4,171,1,0,0,0, - 0,0,0,1,0,116,7,0,0,0,0,0,0,0,0,171, - 0,0,0,0,0,0,0,68,0,93,66,0,0,92,2,0, - 0,125,5,125,6,124,4,106,9,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,116,11,0,0,0, - 0,0,0,0,0,124,6,171,1,0,0,0,0,0,0,171, - 1,0,0,0,0,0,0,115,1,140,33,116,12,0,0,0, - 0,0,0,0,0,106,15,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,124,1,2,0,124,5,124, - 1,124,4,171,2,0,0,0,0,0,0,124,4,172,1,171, - 3,0,0,0,0,0,0,125,7,124,7,99,2,1,0,83, - 0,4,0,121,0,35,0,116,4,0,0,0,0,0,0,0, - 0,36,0,114,3,1,0,89,0,121,0,119,0,120,3,89, - 0,119,1,41,2,78,114,8,1,0,0,41,8,114,54,1, - 0,0,114,85,0,0,0,114,87,0,0,0,114,13,1,0, - 0,114,59,0,0,0,114,179,0,0,0,114,207,0,0,0, - 218,16,115,112,101,99,95,102,114,111,109,95,108,111,97,100, - 101,114,41,8,114,50,1,0,0,114,42,1,0,0,114,68, - 0,0,0,218,6,116,97,114,103,101,116,114,53,1,0,0, - 114,4,1,0,0,114,18,1,0,0,114,16,1,0,0,115, - 8,0,0,0,32,32,32,32,32,32,32,32,114,10,0,0, - 0,218,9,102,105,110,100,95,115,112,101,99,122,31,87,105, - 110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110, - 100,101,114,46,102,105,110,100,95,115,112,101,99,188,3,0, - 0,115,142,0,0,0,128,0,224,19,22,215,19,39,209,19, - 39,168,8,211,19,49,136,8,216,11,19,208,11,27,216,19, - 23,240,2,3,9,24,220,12,22,144,120,212,12,32,244,6, - 0,33,60,214,32,61,209,12,28,136,70,144,72,216,15,23, - 215,15,32,209,15,32,164,21,160,120,163,31,213,15,49,220, - 23,33,215,23,50,209,23,50,176,56,217,51,57,184,40,192, - 72,211,51,77,216,58,66,240,5,0,24,51,243,0,2,24, - 68,1,144,4,240,6,0,24,28,146,11,241,11,0,33,62, - 248,244,5,0,16,23,242,0,1,9,24,217,19,23,240,3, - 1,9,24,250,115,17,0,0,0,150,11,65,49,0,193,49, - 9,65,61,3,193,60,1,65,61,3,169,2,78,78,41,14, - 114,196,0,0,0,114,195,0,0,0,114,197,0,0,0,114, - 198,0,0,0,114,46,1,0,0,114,45,1,0,0,218,11, - 95,77,83,95,87,73,78,68,79,87,83,218,18,69,88,84, - 69,78,83,73,79,78,95,83,85,70,70,73,88,69,83,114, - 44,1,0,0,218,12,115,116,97,116,105,99,109,101,116,104, - 111,100,114,40,1,0,0,218,11,99,108,97,115,115,109,101, - 116,104,111,100,114,54,1,0,0,114,58,1,0,0,114,30, - 0,0,0,114,28,0,0,0,114,10,0,0,0,114,34,1, - 0,0,114,34,1,0,0,154,3,0,0,115,103,0,0,0, - 132,0,225,4,72,240,6,1,9,32,240,3,0,5,17,240, - 8,1,9,39,240,3,0,5,23,240,6,0,20,31,210,19, - 65,160,56,208,47,65,208,35,65,128,75,224,5,17,241,2, - 4,5,66,1,243,3,0,6,18,240,2,4,5,66,1,240, - 12,0,6,17,241,2,12,5,24,243,3,0,6,17,240,2, - 12,5,24,240,28,0,6,17,242,2,13,5,28,243,3,0, - 6,17,241,2,13,5,28,114,28,0,0,0,114,34,1,0, - 0,99,0,0,0,0,0,0,0,0,0,0,0,0,1,0, - 0,0,0,0,0,0,243,40,0,0,0,151,0,101,0,90, - 1,100,0,90,2,100,1,90,3,100,2,132,0,90,4,100, - 3,132,0,90,5,100,4,132,0,90,6,100,5,132,0,90, - 7,121,6,41,7,218,13,95,76,111,97,100,101,114,66,97, - 115,105,99,115,122,83,66,97,115,101,32,99,108,97,115,115, - 32,111,102,32,99,111,109,109,111,110,32,99,111,100,101,32, - 110,101,101,100,101,100,32,98,121,32,98,111,116,104,32,83, - 111,117,114,99,101,76,111,97,100,101,114,32,97,110,100,10, - 32,32,32,32,83,111,117,114,99,101,108,101,115,115,70,105, - 108,101,76,111,97,100,101,114,46,99,2,0,0,0,0,0, - 0,0,0,0,0,0,5,0,0,0,3,0,0,0,243,166, - 0,0,0,151,0,116,1,0,0,0,0,0,0,0,0,124, - 0,106,3,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,124,1,171,1,0,0,0,0,0,0,171, - 1,0,0,0,0,0,0,100,1,25,0,0,0,125,2,124, - 2,106,5,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,100,2,100,1,171,2,0,0,0,0,0, - 0,100,3,25,0,0,0,125,3,124,1,106,7,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, - 2,171,1,0,0,0,0,0,0,100,4,25,0,0,0,125, - 4,124,3,100,5,107,40,0,0,120,1,114,5,1,0,124, - 4,100,5,107,55,0,0,83,0,41,6,122,141,67,111,110, - 99,114,101,116,101,32,105,109,112,108,101,109,101,110,116,97, - 116,105,111,110,32,111,102,32,73,110,115,112,101,99,116,76, - 111,97,100,101,114,46,105,115,95,112,97,99,107,97,103,101, - 32,98,121,32,99,104,101,99,107,105,110,103,32,105,102,10, - 32,32,32,32,32,32,32,32,116,104,101,32,112,97,116,104, - 32,114,101,116,117,114,110,101,100,32,98,121,32,103,101,116, - 95,102,105,108,101,110,97,109,101,32,104,97,115,32,97,32, - 102,105,108,101,110,97,109,101,32,111,102,32,39,95,95,105, - 110,105,116,95,95,46,112,121,39,46,114,6,0,0,0,114, - 103,0,0,0,114,1,0,0,0,114,52,0,0,0,218,8, - 95,95,105,110,105,116,95,95,41,4,114,81,0,0,0,114, - 7,1,0,0,114,157,0,0,0,114,131,0,0,0,41,5, - 114,189,0,0,0,114,42,1,0,0,114,151,0,0,0,218, - 13,102,105,108,101,110,97,109,101,95,98,97,115,101,218,9, - 116,97,105,108,95,110,97,109,101,115,5,0,0,0,32,32, - 32,32,32,114,10,0,0,0,114,10,1,0,0,122,24,95, - 76,111,97,100,101,114,66,97,115,105,99,115,46,105,115,95, - 112,97,99,107,97,103,101,210,3,0,0,115,93,0,0,0, - 128,0,244,6,0,20,31,152,116,215,31,48,209,31,48,176, - 24,211,31,58,211,19,59,184,65,209,19,62,136,8,216,24, - 32,159,15,153,15,168,3,168,81,211,24,47,176,1,209,24, - 50,136,13,216,20,28,215,20,39,209,20,39,168,3,211,20, - 44,168,81,209,20,47,136,9,216,15,28,160,10,209,15,42, - 210,15,70,168,121,184,74,209,47,70,208,8,70,114,28,0, - 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,243,4,0,0,0,151,0,121,1, - 169,2,122,42,85,115,101,32,100,101,102,97,117,108,116,32, - 115,101,109,97,110,116,105,99,115,32,102,111,114,32,109,111, - 100,117,108,101,32,99,114,101,97,116,105,111,110,46,78,114, - 30,0,0,0,169,2,114,189,0,0,0,114,16,1,0,0, - 115,2,0,0,0,32,32,114,10,0,0,0,218,13,99,114, - 101,97,116,101,95,109,111,100,117,108,101,122,27,95,76,111, - 97,100,101,114,66,97,115,105,99,115,46,99,114,101,97,116, - 101,95,109,111,100,117,108,101,218,3,0,0,243,2,0,0, - 0,129,0,114,28,0,0,0,99,2,0,0,0,0,0,0, - 0,0,0,0,0,5,0,0,0,3,0,0,0,243,186,0, - 0,0,151,0,124,0,106,1,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,1,106,2,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 171,1,0,0,0,0,0,0,125,2,124,2,128,25,116,5, - 0,0,0,0,0,0,0,0,100,2,124,1,106,2,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 155,2,100,3,157,3,171,1,0,0,0,0,0,0,130,1, - 116,6,0,0,0,0,0,0,0,0,106,9,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,10, - 0,0,0,0,0,0,0,0,124,2,124,1,106,12,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 171,3,0,0,0,0,0,0,1,0,121,1,41,4,122,19, - 69,120,101,99,117,116,101,32,116,104,101,32,109,111,100,117, - 108,101,46,78,122,19,99,97,110,110,111,116,32,108,111,97, - 100,32,109,111,100,117,108,101,32,122,29,32,119,104,101,110, - 32,103,101,116,95,99,111,100,101,40,41,32,114,101,116,117, - 114,110,115,32,78,111,110,101,41,7,218,8,103,101,116,95, - 99,111,100,101,114,196,0,0,0,114,188,0,0,0,114,207, - 0,0,0,218,25,95,99,97,108,108,95,119,105,116,104,95, - 102,114,97,109,101,115,95,114,101,109,111,118,101,100,218,4, - 101,120,101,99,114,202,0,0,0,41,3,114,189,0,0,0, - 218,6,109,111,100,117,108,101,114,236,0,0,0,115,3,0, - 0,0,32,32,32,114,10,0,0,0,218,11,101,120,101,99, - 95,109,111,100,117,108,101,122,25,95,76,111,97,100,101,114, - 66,97,115,105,99,115,46,101,120,101,99,95,109,111,100,117, - 108,101,221,3,0,0,115,83,0,0,0,128,0,224,15,19, - 143,125,137,125,152,86,159,95,153,95,211,15,45,136,4,216, - 11,15,136,60,220,18,29,208,32,51,176,70,183,79,177,79, - 208,51,70,240,0,1,71,1,56,240,0,1,31,56,243,0, - 1,19,57,240,0,1,13,57,228,8,18,215,8,44,209,8, - 44,172,84,176,52,184,22,191,31,185,31,213,8,73,114,28, - 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,3,0,0,0,243,46,0,0,0,151,0,116, - 0,0,0,0,0,0,0,0,0,106,3,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,124, - 1,171,2,0,0,0,0,0,0,83,0,41,1,122,26,84, - 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,41,2,114,207,0,0,0, - 218,17,95,108,111,97,100,95,109,111,100,117,108,101,95,115, - 104,105,109,169,2,114,189,0,0,0,114,42,1,0,0,115, - 2,0,0,0,32,32,114,10,0,0,0,218,11,108,111,97, - 100,95,109,111,100,117,108,101,122,25,95,76,111,97,100,101, - 114,66,97,115,105,99,115,46,108,111,97,100,95,109,111,100, - 117,108,101,229,3,0,0,115,23,0,0,0,128,0,244,6, - 0,16,26,215,15,43,209,15,43,168,68,176,40,211,15,59, - 208,8,59,114,28,0,0,0,78,41,8,114,196,0,0,0, - 114,195,0,0,0,114,197,0,0,0,114,198,0,0,0,114, - 10,1,0,0,114,73,1,0,0,114,80,1,0,0,114,84, - 1,0,0,114,30,0,0,0,114,28,0,0,0,114,10,0, - 0,0,114,65,1,0,0,114,65,1,0,0,205,3,0,0, - 115,29,0,0,0,132,0,241,4,1,5,29,242,6,6,5, - 71,1,242,16,1,5,57,242,6,6,5,74,1,243,16,3, - 5,60,114,28,0,0,0,114,65,1,0,0,99,0,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0, - 0,243,60,0,0,0,151,0,101,0,90,1,100,0,90,2, - 100,1,132,0,90,3,100,2,132,0,90,4,100,3,132,0, - 90,5,100,4,132,0,90,6,100,5,132,0,90,7,100,6, - 100,7,156,1,100,8,132,2,90,8,100,9,132,0,90,9, - 121,10,41,11,218,12,83,111,117,114,99,101,76,111,97,100, - 101,114,99,2,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,3,0,0,0,243,14,0,0,0,151,0,116,0, - 0,0,0,0,0,0,0,0,130,1,41,1,122,165,79,112, - 116,105,111,110,97,108,32,109,101,116,104,111,100,32,116,104, - 97,116,32,114,101,116,117,114,110,115,32,116,104,101,32,109, - 111,100,105,102,105,99,97,116,105,111,110,32,116,105,109,101, - 32,40,97,110,32,105,110,116,41,32,102,111,114,32,116,104, - 101,10,32,32,32,32,32,32,32,32,115,112,101,99,105,102, - 105,101,100,32,112,97,116,104,32,40,97,32,115,116,114,41, - 46,10,10,32,32,32,32,32,32,32,32,82,97,105,115,101, + 2,125,4,124,4,128,2,74,0,130,1,124,2,129,33,124, + 2,124,4,107,55,0,0,114,28,116,15,0,0,0,0,0, + 0,0,0,106,16,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,100,6,116,18,0,0,0,0,0, + 0,0,0,171,2,0,0,0,0,0,0,1,0,124,2,83, + 0,124,4,83,0,41,7,122,67,72,101,108,112,101,114,32, + 102,117,110,99,116,105,111,110,32,102,111,114,32,95,119,97, + 114,110,105,110,103,115,46,99,10,10,32,32,32,32,83,101, + 101,32,71,72,35,57,55,56,53,48,32,102,111,114,32,100, + 101,116,97,105,108,115,46,10,32,32,32,32,78,218,10,95, + 95,108,111,97,100,101,114,95,95,218,8,95,95,115,112,101, + 99,95,95,122,43,77,111,100,117,108,101,32,103,108,111,98, + 97,108,115,32,105,115,32,109,105,115,115,105,110,103,32,97, + 32,95,95,115,112,101,99,95,95,46,108,111,97,100,101,114, + 114,5,1,0,0,122,45,77,111,100,117,108,101,32,103,108, + 111,98,97,108,115,59,32,95,95,108,111,97,100,101,114,95, + 95,32,33,61,32,95,95,115,112,101,99,95,95,46,108,111, + 97,100,101,114,41,10,114,233,0,0,0,218,4,100,105,99, + 116,218,6,111,98,106,101,99,116,218,3,103,101,116,114,139, + 0,0,0,114,202,0,0,0,218,14,65,116,116,114,105,98, + 117,116,101,69,114,114,111,114,114,127,0,0,0,114,128,0, + 0,0,114,129,0,0,0,41,6,218,14,109,111,100,117,108, + 101,95,103,108,111,98,97,108,115,218,7,109,105,115,115,105, + 110,103,114,5,1,0,0,114,17,1,0,0,218,11,115,112, + 101,99,95,108,111,97,100,101,114,218,3,101,120,99,115,6, + 0,0,0,32,32,32,32,32,32,114,10,0,0,0,218,16, + 95,98,108,101,115,115,95,109,121,95,108,111,97,100,101,114, + 114,33,1,0,0,108,3,0,0,115,232,0,0,0,128,0, + 244,24,0,12,22,144,110,164,100,212,11,43,216,15,19,228, + 14,20,139,104,128,71,216,13,27,215,13,31,209,13,31,160, + 12,168,100,211,13,51,128,70,216,11,25,215,11,29,209,11, + 29,152,106,168,39,211,11,50,128,68,224,7,13,128,126,216, + 11,15,144,55,137,63,240,6,0,20,24,216,13,17,136,92, + 220,18,28,208,29,74,211,18,75,208,12,75,228,18,25,152, + 36,160,8,168,39,211,18,50,128,75,224,7,18,144,119,160, + 4,144,111,209,7,37,216,11,17,136,62,216,36,47,176,55, + 209,36,58,149,46,196,10,136,67,217,18,21,208,22,67,211, + 18,68,208,12,68,220,8,17,143,14,137,14,216,12,57,220, + 12,30,244,5,2,9,32,240,6,0,23,29,136,11,224,11, + 22,208,11,34,208,4,34,208,11,34,216,7,13,208,7,25, + 152,102,168,11,210,30,51,220,8,17,143,14,137,14,216,12, + 59,220,12,30,244,5,2,9,32,240,6,0,16,22,136,13, + 224,11,22,208,4,22,114,28,0,0,0,99,0,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0, + 243,90,0,0,0,151,0,101,0,90,1,100,0,90,2,100, + 1,90,3,100,2,90,4,100,3,90,5,101,6,120,1,114, + 4,1,0,100,4,101,7,118,0,90,8,101,9,100,5,132, + 0,171,0,0,0,0,0,0,0,90,10,101,11,100,6,132, + 0,171,0,0,0,0,0,0,0,90,12,101,11,100,9,100, + 8,132,1,171,0,0,0,0,0,0,0,90,13,121,7,41, + 10,218,21,87,105,110,100,111,119,115,82,101,103,105,115,116, + 114,121,70,105,110,100,101,114,122,62,77,101,116,97,32,112, + 97,116,104,32,102,105,110,100,101,114,32,102,111,114,32,109, + 111,100,117,108,101,115,32,100,101,99,108,97,114,101,100,32, + 105,110,32,116,104,101,32,87,105,110,100,111,119,115,32,114, + 101,103,105,115,116,114,121,46,122,59,83,111,102,116,119,97, + 114,101,92,80,121,116,104,111,110,92,80,121,116,104,111,110, + 67,111,114,101,92,123,115,121,115,95,118,101,114,115,105,111, + 110,125,92,77,111,100,117,108,101,115,92,123,102,117,108,108, + 110,97,109,101,125,122,65,83,111,102,116,119,97,114,101,92, + 80,121,116,104,111,110,92,80,121,116,104,111,110,67,111,114, + 101,92,123,115,121,115,95,118,101,114,115,105,111,110,125,92, + 77,111,100,117,108,101,115,92,123,102,117,108,108,110,97,109, + 101,125,92,68,101,98,117,103,122,6,95,100,46,112,121,100, + 99,1,0,0,0,0,0,0,0,0,0,0,0,5,0,0, + 0,3,0,0,0,243,178,0,0,0,151,0,9,0,116,1, + 0,0,0,0,0,0,0,0,106,2,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,116,0,0,0, + 0,0,0,0,0,0,106,4,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,0,171,2,0,0, + 0,0,0,0,83,0,35,0,116,6,0,0,0,0,0,0, + 0,0,36,0,114,39,1,0,116,1,0,0,0,0,0,0, + 0,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,116,0,0,0,0,0,0,0,0,0, + 106,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,0,171,2,0,0,0,0,0,0,99,2, + 89,0,83,0,119,0,120,3,89,0,119,1,114,77,0,0, + 0,41,5,218,6,119,105,110,114,101,103,218,7,79,112,101, + 110,75,101,121,218,17,72,75,69,89,95,67,85,82,82,69, + 78,84,95,85,83,69,82,114,87,0,0,0,218,18,72,75, + 69,89,95,76,79,67,65,76,95,77,65,67,72,73,78,69, + 114,25,0,0,0,115,1,0,0,0,32,114,10,0,0,0, + 218,14,95,111,112,101,110,95,114,101,103,105,115,116,114,121, + 122,36,87,105,110,100,111,119,115,82,101,103,105,115,116,114, + 121,70,105,110,100,101,114,46,95,111,112,101,110,95,114,101, + 103,105,115,116,114,121,170,3,0,0,115,71,0,0,0,128, + 0,240,4,3,9,66,1,220,19,25,151,62,145,62,164,38, + 215,34,58,209,34,58,184,67,211,19,64,208,12,64,248,220, + 15,22,242,0,1,9,66,1,220,19,25,151,62,145,62,164, + 38,215,34,59,209,34,59,184,83,211,19,65,210,12,65,240, + 3,1,9,66,1,250,115,15,0,0,0,130,35,38,0,166, + 45,65,22,3,193,21,1,65,22,3,99,2,0,0,0,0, + 0,0,0,0,0,0,0,7,0,0,0,3,0,0,0,243, + 56,1,0,0,151,0,124,0,106,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,114,13,124,0, + 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,125,2,110,12,124,0,106,4,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,2, + 124,2,106,7,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,1,100,1,116,8,0,0,0,0, + 0,0,0,0,106,10,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,100,0,100,2,26,0,122,6, + 0,0,172,3,171,2,0,0,0,0,0,0,125,3,9,0, + 124,0,106,13,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,3,171,1,0,0,0,0,0,0, + 53,0,125,4,116,15,0,0,0,0,0,0,0,0,106,16, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,124,4,100,4,171,2,0,0,0,0,0,0,125,5, + 100,0,100,0,100,0,171,2,0,0,0,0,0,0,1,0, + 124,5,83,0,35,0,49,0,115,1,119,2,1,0,89,0, + 1,0,1,0,127,5,83,0,120,3,89,0,119,1,35,0, + 116,18,0,0,0,0,0,0,0,0,36,0,114,3,1,0, + 89,0,121,0,119,0,120,3,89,0,119,1,41,5,78,122, + 5,37,100,46,37,100,114,52,0,0,0,41,2,218,8,102, + 117,108,108,110,97,109,101,218,11,115,121,115,95,118,101,114, + 115,105,111,110,114,12,0,0,0,41,10,218,11,68,69,66, + 85,71,95,66,85,73,76,68,218,18,82,69,71,73,83,84, + 82,89,95,75,69,89,95,68,69,66,85,71,218,12,82,69, + 71,73,83,84,82,89,95,75,69,89,218,6,102,111,114,109, + 97,116,114,20,0,0,0,218,12,118,101,114,115,105,111,110, + 95,105,110,102,111,114,41,1,0,0,114,37,1,0,0,218, + 10,81,117,101,114,121,86,97,108,117,101,114,87,0,0,0, + 41,6,218,3,99,108,115,114,43,1,0,0,218,12,114,101, + 103,105,115,116,114,121,95,107,101,121,114,26,0,0,0,218, + 4,104,107,101,121,218,8,102,105,108,101,112,97,116,104,115, + 6,0,0,0,32,32,32,32,32,32,114,10,0,0,0,218, + 16,95,115,101,97,114,99,104,95,114,101,103,105,115,116,114, + 121,122,38,87,105,110,100,111,119,115,82,101,103,105,115,116, + 114,121,70,105,110,100,101,114,46,95,115,101,97,114,99,104, + 95,114,101,103,105,115,116,114,121,177,3,0,0,115,159,0, + 0,0,128,0,224,11,14,143,63,138,63,216,27,30,215,27, + 49,209,27,49,137,76,224,27,30,215,27,43,209,27,43,136, + 76,216,14,26,215,14,33,209,14,33,168,56,216,46,53,188, + 3,215,56,72,209,56,72,200,18,200,33,208,56,76,209,46, + 76,240,3,0,15,34,243,0,1,15,78,1,136,3,240,4, + 4,9,24,216,17,20,215,17,35,209,17,35,160,67,212,17, + 40,168,68,220,27,33,215,27,44,209,27,44,168,84,176,50, + 211,27,54,144,8,247,3,0,18,41,240,8,0,16,24,136, + 15,247,9,0,18,41,240,8,0,16,24,136,15,251,244,5, + 0,16,23,242,0,1,9,24,217,19,23,240,3,1,9,24, + 250,115,48,0,0,0,193,14,17,66,13,0,193,31,23,66, + 0,3,193,54,8,66,13,0,194,0,5,66,10,7,194,5, + 3,66,13,0,194,10,3,66,13,0,194,13,9,66,25,3, + 194,24,1,66,25,3,78,99,4,0,0,0,0,0,0,0, + 0,0,0,0,8,0,0,0,3,0,0,0,243,0,1,0, + 0,151,0,124,0,106,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,1,171,1,0,0,0, + 0,0,0,125,4,124,4,128,1,121,0,9,0,116,3,0, + 0,0,0,0,0,0,0,124,4,171,1,0,0,0,0,0, + 0,1,0,116,7,0,0,0,0,0,0,0,0,171,0,0, + 0,0,0,0,0,68,0,93,66,0,0,92,2,0,0,125, + 5,125,6,124,4,106,9,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,116,11,0,0,0,0,0, + 0,0,0,124,6,171,1,0,0,0,0,0,0,171,1,0, + 0,0,0,0,0,115,1,140,33,116,12,0,0,0,0,0, + 0,0,0,106,15,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,1,2,0,124,5,124,1,124, + 4,171,2,0,0,0,0,0,0,124,4,172,1,171,3,0, + 0,0,0,0,0,125,7,124,7,99,2,1,0,83,0,4, + 0,121,0,35,0,116,4,0,0,0,0,0,0,0,0,36, + 0,114,3,1,0,89,0,121,0,119,0,120,3,89,0,119, + 1,41,2,78,114,9,1,0,0,41,8,114,55,1,0,0, + 114,85,0,0,0,114,87,0,0,0,114,14,1,0,0,114, + 59,0,0,0,114,180,0,0,0,114,208,0,0,0,218,16, + 115,112,101,99,95,102,114,111,109,95,108,111,97,100,101,114, + 41,8,114,51,1,0,0,114,43,1,0,0,114,68,0,0, + 0,218,6,116,97,114,103,101,116,114,54,1,0,0,114,5, + 1,0,0,114,19,1,0,0,114,17,1,0,0,115,8,0, + 0,0,32,32,32,32,32,32,32,32,114,10,0,0,0,218, + 9,102,105,110,100,95,115,112,101,99,122,31,87,105,110,100, + 111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,101, + 114,46,102,105,110,100,95,115,112,101,99,192,3,0,0,115, + 142,0,0,0,128,0,224,19,22,215,19,39,209,19,39,168, + 8,211,19,49,136,8,216,11,19,208,11,27,216,19,23,240, + 2,3,9,24,220,12,22,144,120,212,12,32,244,6,0,33, + 60,214,32,61,209,12,28,136,70,144,72,216,15,23,215,15, + 32,209,15,32,164,21,160,120,163,31,213,15,49,220,23,33, + 215,23,50,209,23,50,176,56,217,51,57,184,40,192,72,211, + 51,77,216,58,66,240,5,0,24,51,243,0,2,24,68,1, + 144,4,240,6,0,24,28,146,11,241,11,0,33,62,248,244, + 5,0,16,23,242,0,1,9,24,217,19,23,240,3,1,9, + 24,250,115,17,0,0,0,150,11,65,49,0,193,49,9,65, + 61,3,193,60,1,65,61,3,169,2,78,78,41,14,114,197, + 0,0,0,114,196,0,0,0,114,198,0,0,0,114,199,0, + 0,0,114,47,1,0,0,114,46,1,0,0,218,11,95,77, + 83,95,87,73,78,68,79,87,83,218,18,69,88,84,69,78, + 83,73,79,78,95,83,85,70,70,73,88,69,83,114,45,1, + 0,0,218,12,115,116,97,116,105,99,109,101,116,104,111,100, + 114,41,1,0,0,218,11,99,108,97,115,115,109,101,116,104, + 111,100,114,55,1,0,0,114,59,1,0,0,114,30,0,0, + 0,114,28,0,0,0,114,10,0,0,0,114,35,1,0,0, + 114,35,1,0,0,158,3,0,0,115,103,0,0,0,132,0, + 225,4,72,240,6,1,9,32,240,3,0,5,17,240,8,1, + 9,39,240,3,0,5,23,240,6,0,20,31,210,19,65,160, + 56,208,47,65,208,35,65,128,75,224,5,17,241,2,4,5, + 66,1,243,3,0,6,18,240,2,4,5,66,1,240,12,0, + 6,17,241,2,12,5,24,243,3,0,6,17,240,2,12,5, + 24,240,28,0,6,17,242,2,13,5,28,243,3,0,6,17, + 241,2,13,5,28,114,28,0,0,0,114,35,1,0,0,99, + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 0,0,0,0,243,40,0,0,0,151,0,101,0,90,1,100, + 0,90,2,100,1,90,3,100,2,132,0,90,4,100,3,132, + 0,90,5,100,4,132,0,90,6,100,5,132,0,90,7,121, + 6,41,7,218,13,95,76,111,97,100,101,114,66,97,115,105, + 99,115,122,83,66,97,115,101,32,99,108,97,115,115,32,111, + 102,32,99,111,109,109,111,110,32,99,111,100,101,32,110,101, + 101,100,101,100,32,98,121,32,98,111,116,104,32,83,111,117, + 114,99,101,76,111,97,100,101,114,32,97,110,100,10,32,32, + 32,32,83,111,117,114,99,101,108,101,115,115,70,105,108,101, + 76,111,97,100,101,114,46,99,2,0,0,0,0,0,0,0, + 0,0,0,0,5,0,0,0,3,0,0,0,243,166,0,0, + 0,151,0,116,1,0,0,0,0,0,0,0,0,124,0,106, + 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,1,171,1,0,0,0,0,0,0,171,1,0, + 0,0,0,0,0,100,1,25,0,0,0,125,2,124,2,106, + 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,100,2,100,1,171,2,0,0,0,0,0,0,100, + 3,25,0,0,0,125,3,124,1,106,7,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,100,2,171, + 1,0,0,0,0,0,0,100,4,25,0,0,0,125,4,124, + 3,100,5,107,40,0,0,120,1,114,5,1,0,124,4,100, + 5,107,55,0,0,83,0,41,6,122,141,67,111,110,99,114, + 101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,105, + 111,110,32,111,102,32,73,110,115,112,101,99,116,76,111,97, + 100,101,114,46,105,115,95,112,97,99,107,97,103,101,32,98, + 121,32,99,104,101,99,107,105,110,103,32,105,102,10,32,32, + 32,32,32,32,32,32,116,104,101,32,112,97,116,104,32,114, + 101,116,117,114,110,101,100,32,98,121,32,103,101,116,95,102, + 105,108,101,110,97,109,101,32,104,97,115,32,97,32,102,105, + 108,101,110,97,109,101,32,111,102,32,39,95,95,105,110,105, + 116,95,95,46,112,121,39,46,114,6,0,0,0,114,103,0, + 0,0,114,1,0,0,0,114,52,0,0,0,218,8,95,95, + 105,110,105,116,95,95,41,4,114,81,0,0,0,114,8,1, + 0,0,114,158,0,0,0,114,132,0,0,0,41,5,114,190, + 0,0,0,114,43,1,0,0,114,152,0,0,0,218,13,102, + 105,108,101,110,97,109,101,95,98,97,115,101,218,9,116,97, + 105,108,95,110,97,109,101,115,5,0,0,0,32,32,32,32, + 32,114,10,0,0,0,114,11,1,0,0,122,24,95,76,111, + 97,100,101,114,66,97,115,105,99,115,46,105,115,95,112,97, + 99,107,97,103,101,214,3,0,0,115,93,0,0,0,128,0, + 244,6,0,20,31,152,116,215,31,48,209,31,48,176,24,211, + 31,58,211,19,59,184,65,209,19,62,136,8,216,24,32,159, + 15,153,15,168,3,168,81,211,24,47,176,1,209,24,50,136, + 13,216,20,28,215,20,39,209,20,39,168,3,211,20,44,168, + 81,209,20,47,136,9,216,15,28,160,10,209,15,42,210,15, + 70,168,121,184,74,209,47,70,208,8,70,114,28,0,0,0, + 99,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,243,4,0,0,0,151,0,121,1,169,2, + 122,42,85,115,101,32,100,101,102,97,117,108,116,32,115,101, + 109,97,110,116,105,99,115,32,102,111,114,32,109,111,100,117, + 108,101,32,99,114,101,97,116,105,111,110,46,78,114,30,0, + 0,0,169,2,114,190,0,0,0,114,17,1,0,0,115,2, + 0,0,0,32,32,114,10,0,0,0,218,13,99,114,101,97, + 116,101,95,109,111,100,117,108,101,122,27,95,76,111,97,100, + 101,114,66,97,115,105,99,115,46,99,114,101,97,116,101,95, + 109,111,100,117,108,101,222,3,0,0,243,2,0,0,0,129, + 0,114,28,0,0,0,99,2,0,0,0,0,0,0,0,0, + 0,0,0,5,0,0,0,3,0,0,0,243,186,0,0,0, + 151,0,124,0,106,1,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,124,1,106,2,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,1, + 0,0,0,0,0,0,125,2,124,2,128,25,116,5,0,0, + 0,0,0,0,0,0,100,2,124,1,106,2,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,2, + 100,3,157,3,171,1,0,0,0,0,0,0,130,1,116,6, + 0,0,0,0,0,0,0,0,106,9,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,116,10,0,0, + 0,0,0,0,0,0,124,2,124,1,106,12,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,3, + 0,0,0,0,0,0,1,0,121,1,41,4,122,19,69,120, + 101,99,117,116,101,32,116,104,101,32,109,111,100,117,108,101, + 46,78,122,19,99,97,110,110,111,116,32,108,111,97,100,32, + 109,111,100,117,108,101,32,122,29,32,119,104,101,110,32,103, + 101,116,95,99,111,100,101,40,41,32,114,101,116,117,114,110, + 115,32,78,111,110,101,41,7,218,8,103,101,116,95,99,111, + 100,101,114,197,0,0,0,114,189,0,0,0,114,208,0,0, + 0,218,25,95,99,97,108,108,95,119,105,116,104,95,102,114, + 97,109,101,115,95,114,101,109,111,118,101,100,218,4,101,120, + 101,99,114,203,0,0,0,41,3,114,190,0,0,0,218,6, + 109,111,100,117,108,101,114,237,0,0,0,115,3,0,0,0, + 32,32,32,114,10,0,0,0,218,11,101,120,101,99,95,109, + 111,100,117,108,101,122,25,95,76,111,97,100,101,114,66,97, + 115,105,99,115,46,101,120,101,99,95,109,111,100,117,108,101, + 225,3,0,0,115,83,0,0,0,128,0,224,15,19,143,125, + 137,125,152,86,159,95,153,95,211,15,45,136,4,216,11,15, + 136,60,220,18,29,208,32,51,176,70,183,79,177,79,208,51, + 70,240,0,1,71,1,56,240,0,1,31,56,243,0,1,19, + 57,240,0,1,13,57,228,8,18,215,8,44,209,8,44,172, + 84,176,52,184,22,191,31,185,31,213,8,73,114,28,0,0, + 0,99,2,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,3,0,0,0,243,46,0,0,0,151,0,116,0,0, + 0,0,0,0,0,0,0,106,3,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,0,124,1,171, + 2,0,0,0,0,0,0,83,0,41,1,122,26,84,104,105, + 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,41,2,114,208,0,0,0,218,17, + 95,108,111,97,100,95,109,111,100,117,108,101,95,115,104,105, + 109,169,2,114,190,0,0,0,114,43,1,0,0,115,2,0, + 0,0,32,32,114,10,0,0,0,218,11,108,111,97,100,95, + 109,111,100,117,108,101,122,25,95,76,111,97,100,101,114,66, + 97,115,105,99,115,46,108,111,97,100,95,109,111,100,117,108, + 101,233,3,0,0,115,23,0,0,0,128,0,244,6,0,16, + 26,215,15,43,209,15,43,168,68,176,40,211,15,59,208,8, + 59,114,28,0,0,0,78,41,8,114,197,0,0,0,114,196, + 0,0,0,114,198,0,0,0,114,199,0,0,0,114,11,1, + 0,0,114,74,1,0,0,114,81,1,0,0,114,85,1,0, + 0,114,30,0,0,0,114,28,0,0,0,114,10,0,0,0, + 114,66,1,0,0,114,66,1,0,0,209,3,0,0,115,29, + 0,0,0,132,0,241,4,1,5,29,242,6,6,5,71,1, + 242,16,1,5,57,242,6,6,5,74,1,243,16,3,5,60, + 114,28,0,0,0,114,66,1,0,0,99,0,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,243, + 60,0,0,0,151,0,101,0,90,1,100,0,90,2,100,1, + 132,0,90,3,100,2,132,0,90,4,100,3,132,0,90,5, + 100,4,132,0,90,6,100,5,132,0,90,7,100,6,100,7, + 156,1,100,8,132,2,90,8,100,9,132,0,90,9,121,10, + 41,11,218,12,83,111,117,114,99,101,76,111,97,100,101,114, + 99,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,3,0,0,0,243,14,0,0,0,151,0,116,0,0,0, + 0,0,0,0,0,0,130,1,41,1,122,165,79,112,116,105, + 111,110,97,108,32,109,101,116,104,111,100,32,116,104,97,116, + 32,114,101,116,117,114,110,115,32,116,104,101,32,109,111,100, + 105,102,105,99,97,116,105,111,110,32,116,105,109,101,32,40, + 97,110,32,105,110,116,41,32,102,111,114,32,116,104,101,10, + 32,32,32,32,32,32,32,32,115,112,101,99,105,102,105,101, + 100,32,112,97,116,104,32,40,97,32,115,116,114,41,46,10, + 10,32,32,32,32,32,32,32,32,82,97,105,115,101,115,32, + 79,83,69,114,114,111,114,32,119,104,101,110,32,116,104,101, + 32,112,97,116,104,32,99,97,110,110,111,116,32,98,101,32, + 104,97,110,100,108,101,100,46,10,32,32,32,32,32,32,32, + 32,41,1,114,87,0,0,0,169,2,114,190,0,0,0,114, + 68,0,0,0,115,2,0,0,0,32,32,114,10,0,0,0, + 218,10,112,97,116,104,95,109,116,105,109,101,122,23,83,111, + 117,114,99,101,76,111,97,100,101,114,46,112,97,116,104,95, + 109,116,105,109,101,241,3,0,0,115,9,0,0,0,128,0, + 244,12,0,15,22,136,13,114,28,0,0,0,99,2,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,0, + 0,243,40,0,0,0,151,0,100,1,124,0,106,1,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 124,1,171,1,0,0,0,0,0,0,105,1,83,0,41,2, + 97,158,1,0,0,79,112,116,105,111,110,97,108,32,109,101, + 116,104,111,100,32,114,101,116,117,114,110,105,110,103,32,97, + 32,109,101,116,97,100,97,116,97,32,100,105,99,116,32,102, + 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, + 10,32,32,32,32,32,32,32,32,112,97,116,104,32,40,97, + 32,115,116,114,41,46,10,10,32,32,32,32,32,32,32,32, + 80,111,115,115,105,98,108,101,32,107,101,121,115,58,10,32, + 32,32,32,32,32,32,32,45,32,39,109,116,105,109,101,39, + 32,40,109,97,110,100,97,116,111,114,121,41,32,105,115,32, + 116,104,101,32,110,117,109,101,114,105,99,32,116,105,109,101, + 115,116,97,109,112,32,111,102,32,108,97,115,116,32,115,111, + 117,114,99,101,10,32,32,32,32,32,32,32,32,32,32,99, + 111,100,101,32,109,111,100,105,102,105,99,97,116,105,111,110, + 59,10,32,32,32,32,32,32,32,32,45,32,39,115,105,122, + 101,39,32,40,111,112,116,105,111,110,97,108,41,32,105,115, + 32,116,104,101,32,115,105,122,101,32,105,110,32,98,121,116, + 101,115,32,111,102,32,116,104,101,32,115,111,117,114,99,101, + 32,99,111,100,101,46,10,10,32,32,32,32,32,32,32,32, + 73,109,112,108,101,109,101,110,116,105,110,103,32,116,104,105, + 115,32,109,101,116,104,111,100,32,97,108,108,111,119,115,32, + 116,104,101,32,108,111,97,100,101,114,32,116,111,32,114,101, + 97,100,32,98,121,116,101,99,111,100,101,32,102,105,108,101, + 115,46,10,32,32,32,32,32,32,32,32,82,97,105,115,101, 115,32,79,83,69,114,114,111,114,32,119,104,101,110,32,116, 104,101,32,112,97,116,104,32,99,97,110,110,111,116,32,98, 101,32,104,97,110,100,108,101,100,46,10,32,32,32,32,32, - 32,32,32,41,1,114,87,0,0,0,169,2,114,189,0,0, - 0,114,68,0,0,0,115,2,0,0,0,32,32,114,10,0, - 0,0,218,10,112,97,116,104,95,109,116,105,109,101,122,23, - 83,111,117,114,99,101,76,111,97,100,101,114,46,112,97,116, - 104,95,109,116,105,109,101,237,3,0,0,115,9,0,0,0, - 128,0,244,12,0,15,22,136,13,114,28,0,0,0,99,2, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3, - 0,0,0,243,40,0,0,0,151,0,100,1,124,0,106,1, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,1,171,1,0,0,0,0,0,0,105,1,83,0, - 41,2,97,158,1,0,0,79,112,116,105,111,110,97,108,32, - 109,101,116,104,111,100,32,114,101,116,117,114,110,105,110,103, - 32,97,32,109,101,116,97,100,97,116,97,32,100,105,99,116, - 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, - 101,100,10,32,32,32,32,32,32,32,32,112,97,116,104,32, - 40,97,32,115,116,114,41,46,10,10,32,32,32,32,32,32, - 32,32,80,111,115,115,105,98,108,101,32,107,101,121,115,58, - 10,32,32,32,32,32,32,32,32,45,32,39,109,116,105,109, - 101,39,32,40,109,97,110,100,97,116,111,114,121,41,32,105, - 115,32,116,104,101,32,110,117,109,101,114,105,99,32,116,105, - 109,101,115,116,97,109,112,32,111,102,32,108,97,115,116,32, - 115,111,117,114,99,101,10,32,32,32,32,32,32,32,32,32, - 32,99,111,100,101,32,109,111,100,105,102,105,99,97,116,105, - 111,110,59,10,32,32,32,32,32,32,32,32,45,32,39,115, - 105,122,101,39,32,40,111,112,116,105,111,110,97,108,41,32, - 105,115,32,116,104,101,32,115,105,122,101,32,105,110,32,98, - 121,116,101,115,32,111,102,32,116,104,101,32,115,111,117,114, - 99,101,32,99,111,100,101,46,10,10,32,32,32,32,32,32, - 32,32,73,109,112,108,101,109,101,110,116,105,110,103,32,116, - 104,105,115,32,109,101,116,104,111,100,32,97,108,108,111,119, - 115,32,116,104,101,32,108,111,97,100,101,114,32,116,111,32, - 114,101,97,100,32,98,121,116,101,99,111,100,101,32,102,105, - 108,101,115,46,10,32,32,32,32,32,32,32,32,82,97,105, - 115,101,115,32,79,83,69,114,114,111,114,32,119,104,101,110, - 32,116,104,101,32,112,97,116,104,32,99,97,110,110,111,116, - 32,98,101,32,104,97,110,100,108,101,100,46,10,32,32,32, - 32,32,32,32,32,114,242,0,0,0,41,1,114,89,1,0, - 0,114,88,1,0,0,115,2,0,0,0,32,32,114,10,0, - 0,0,218,10,112,97,116,104,95,115,116,97,116,115,122,23, - 83,111,117,114,99,101,76,111,97,100,101,114,46,112,97,116, - 104,95,115,116,97,116,115,245,3,0,0,115,24,0,0,0, - 128,0,240,24,0,17,24,152,20,159,31,153,31,168,20,211, - 25,46,208,15,47,208,8,47,114,28,0,0,0,99,4,0, - 0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,0, - 0,0,243,38,0,0,0,151,0,124,0,106,1,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 2,124,3,171,2,0,0,0,0,0,0,83,0,41,1,122, - 228,79,112,116,105,111,110,97,108,32,109,101,116,104,111,100, - 32,119,104,105,99,104,32,119,114,105,116,101,115,32,100,97, - 116,97,32,40,98,121,116,101,115,41,32,116,111,32,97,32, - 102,105,108,101,32,112,97,116,104,32,40,97,32,115,116,114, - 41,46,10,10,32,32,32,32,32,32,32,32,73,109,112,108, - 101,109,101,110,116,105,110,103,32,116,104,105,115,32,109,101, - 116,104,111,100,32,97,108,108,111,119,115,32,102,111,114,32, - 116,104,101,32,119,114,105,116,105,110,103,32,111,102,32,98, - 121,116,101,99,111,100,101,32,102,105,108,101,115,46,10,10, - 32,32,32,32,32,32,32,32,84,104,101,32,115,111,117,114, - 99,101,32,112,97,116,104,32,105,115,32,110,101,101,100,101, - 100,32,105,110,32,111,114,100,101,114,32,116,111,32,99,111, - 114,114,101,99,116,108,121,32,116,114,97,110,115,102,101,114, - 32,112,101,114,109,105,115,115,105,111,110,115,10,32,32,32, - 32,32,32,32,32,41,1,218,8,115,101,116,95,100,97,116, - 97,41,4,114,189,0,0,0,114,176,0,0,0,218,10,99, - 97,99,104,101,95,112,97,116,104,114,48,0,0,0,115,4, - 0,0,0,32,32,32,32,114,10,0,0,0,218,15,95,99, - 97,99,104,101,95,98,121,116,101,99,111,100,101,122,28,83, - 111,117,114,99,101,76,111,97,100,101,114,46,95,99,97,99, - 104,101,95,98,121,116,101,99,111,100,101,3,4,0,0,115, - 21,0,0,0,128,0,240,16,0,16,20,143,125,137,125,152, - 90,168,20,211,15,46,208,8,46,114,28,0,0,0,99,3, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,243,4,0,0,0,151,0,121,1,41,2,122,150, - 79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,32, - 119,104,105,99,104,32,119,114,105,116,101,115,32,100,97,116, - 97,32,40,98,121,116,101,115,41,32,116,111,32,97,32,102, - 105,108,101,32,112,97,116,104,32,40,97,32,115,116,114,41, - 46,10,10,32,32,32,32,32,32,32,32,73,109,112,108,101, - 109,101,110,116,105,110,103,32,116,104,105,115,32,109,101,116, - 104,111,100,32,97,108,108,111,119,115,32,102,111,114,32,116, - 104,101,32,119,114,105,116,105,110,103,32,111,102,32,98,121, - 116,101,99,111,100,101,32,102,105,108,101,115,46,10,32,32, - 32,32,32,32,32,32,78,114,30,0,0,0,41,3,114,189, - 0,0,0,114,68,0,0,0,114,48,0,0,0,115,3,0, - 0,0,32,32,32,114,10,0,0,0,114,93,1,0,0,122, - 21,83,111,117,114,99,101,76,111,97,100,101,114,46,115,101, - 116,95,100,97,116,97,13,4,0,0,114,74,1,0,0,114, - 28,0,0,0,99,2,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,3,0,0,0,243,156,0,0,0,151,0, - 124,0,106,1,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,1,171,1,0,0,0,0,0,0, - 125,2,9,0,124,0,106,3,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,2,171,1,0,0, - 0,0,0,0,125,3,116,9,0,0,0,0,0,0,0,0, - 124,3,171,1,0,0,0,0,0,0,83,0,35,0,116,4, - 0,0,0,0,0,0,0,0,36,0,114,19,125,4,116,7, - 0,0,0,0,0,0,0,0,100,1,124,1,172,2,171,2, - 0,0,0,0,0,0,124,4,130,2,100,3,125,4,126,4, - 119,1,119,0,120,3,89,0,119,1,41,4,122,52,67,111, - 110,99,114,101,116,101,32,105,109,112,108,101,109,101,110,116, - 97,116,105,111,110,32,111,102,32,73,110,115,112,101,99,116, - 76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,99, - 101,46,122,39,115,111,117,114,99,101,32,110,111,116,32,97, - 118,97,105,108,97,98,108,101,32,116,104,114,111,117,103,104, - 32,103,101,116,95,100,97,116,97,40,41,114,186,0,0,0, - 78,41,5,114,7,1,0,0,218,8,103,101,116,95,100,97, - 116,97,114,87,0,0,0,114,188,0,0,0,114,2,1,0, - 0,41,5,114,189,0,0,0,114,42,1,0,0,114,68,0, - 0,0,114,254,0,0,0,114,31,1,0,0,115,5,0,0, - 0,32,32,32,32,32,114,10,0,0,0,218,10,103,101,116, - 95,115,111,117,114,99,101,122,23,83,111,117,114,99,101,76, - 111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101, - 20,4,0,0,115,90,0,0,0,128,0,224,15,19,215,15, - 32,209,15,32,160,24,211,15,42,136,4,240,2,4,9,54, - 216,27,31,159,61,153,61,168,20,211,27,46,136,76,244,8, - 0,16,29,152,92,211,15,42,208,8,42,248,244,7,0,16, - 23,242,0,2,9,54,220,18,29,208,30,71,216,35,43,244, - 3,1,19,45,216,50,53,240,3,1,13,54,251,240,3,2, - 9,54,250,115,20,0,0,0,147,17,47,0,175,9,65,11, - 3,184,14,65,6,3,193,6,5,65,11,3,114,170,0,0, - 0,41,1,218,9,95,111,112,116,105,109,105,122,101,99,3, - 0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,3, - 0,0,0,243,64,0,0,0,151,0,116,0,0,0,0,0, - 0,0,0,0,106,3,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,116,4,0,0,0,0,0,0, - 0,0,124,1,124,2,100,1,100,2,124,3,172,3,171,6, - 0,0,0,0,0,0,83,0,41,4,122,130,82,101,116,117, - 114,110,32,116,104,101,32,99,111,100,101,32,111,98,106,101, - 99,116,32,99,111,109,112,105,108,101,100,32,102,114,111,109, - 32,115,111,117,114,99,101,46,10,10,32,32,32,32,32,32, - 32,32,84,104,101,32,39,100,97,116,97,39,32,97,114,103, - 117,109,101,110,116,32,99,97,110,32,98,101,32,97,110,121, - 32,111,98,106,101,99,116,32,116,121,112,101,32,116,104,97, - 116,32,99,111,109,112,105,108,101,40,41,32,115,117,112,112, - 111,114,116,115,46,10,32,32,32,32,32,32,32,32,114,78, - 1,0,0,84,41,2,218,12,100,111,110,116,95,105,110,104, - 101,114,105,116,114,135,0,0,0,41,3,114,207,0,0,0, - 114,77,1,0,0,218,7,99,111,109,112,105,108,101,41,4, - 114,189,0,0,0,114,48,0,0,0,114,68,0,0,0,114, - 100,1,0,0,115,4,0,0,0,32,32,32,32,114,10,0, - 0,0,218,14,115,111,117,114,99,101,95,116,111,95,99,111, - 100,101,122,27,83,111,117,114,99,101,76,111,97,100,101,114, - 46,115,111,117,114,99,101,95,116,111,95,99,111,100,101,30, - 4,0,0,115,43,0,0,0,128,0,244,10,0,16,26,215, - 15,51,209,15,51,180,71,184,84,192,52,200,22,216,53,57, - 192,73,240,3,0,16,52,243,0,1,16,79,1,240,0,1, - 9,79,1,114,28,0,0,0,99,2,0,0,0,0,0,0, - 0,0,0,0,0,7,0,0,0,3,0,0,0,243,72,4, - 0,0,151,0,124,0,106,1,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,1,171,1,0,0, - 0,0,0,0,125,2,100,1,125,3,100,1,125,4,100,1, - 125,5,100,2,125,6,100,3,125,7,9,0,116,3,0,0, - 0,0,0,0,0,0,124,2,171,1,0,0,0,0,0,0, - 125,8,9,0,124,0,106,5,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,2,171,1,0,0, - 0,0,0,0,125,9,116,7,0,0,0,0,0,0,0,0, - 124,9,100,4,25,0,0,0,171,1,0,0,0,0,0,0, - 125,3,9,0,124,0,106,9,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,8,171,1,0,0, - 0,0,0,0,125,10,124,1,124,8,100,5,156,2,125,11, - 9,0,116,11,0,0,0,0,0,0,0,0,124,10,124,1, - 124,11,171,3,0,0,0,0,0,0,125,12,116,13,0,0, - 0,0,0,0,0,0,124,10,171,1,0,0,0,0,0,0, - 100,6,100,1,26,0,125,13,124,12,100,7,122,1,0,0, - 100,8,107,55,0,0,125,6,124,6,114,106,124,12,100,9, - 122,1,0,0,100,8,107,55,0,0,125,7,116,14,0,0, - 0,0,0,0,0,0,106,16,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,100,10,107,55,0,0, - 114,97,124,7,115,19,116,14,0,0,0,0,0,0,0,0, - 106,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,100,11,107,40,0,0,114,76,124,0,106,9, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,2,171,1,0,0,0,0,0,0,125,4,116,15, - 0,0,0,0,0,0,0,0,106,18,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,116,20,0,0, - 0,0,0,0,0,0,124,4,171,2,0,0,0,0,0,0, - 125,5,116,23,0,0,0,0,0,0,0,0,124,10,124,5, - 124,1,124,11,171,4,0,0,0,0,0,0,1,0,110,18, - 116,25,0,0,0,0,0,0,0,0,124,10,124,3,124,9, - 100,12,25,0,0,0,124,1,124,11,171,5,0,0,0,0, - 0,0,1,0,116,26,0,0,0,0,0,0,0,0,106,29, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,100,13,124,8,124,2,171,3,0,0,0,0,0,0, - 1,0,116,31,0,0,0,0,0,0,0,0,124,13,124,1, - 124,8,124,2,172,14,171,4,0,0,0,0,0,0,83,0, - 35,0,116,32,0,0,0,0,0,0,0,0,116,34,0,0, - 0,0,0,0,0,0,102,2,36,0,114,3,1,0,89,0, - 110,51,119,0,120,3,89,0,119,1,35,0,116,36,0,0, - 0,0,0,0,0,0,36,0,114,3,1,0,89,0,110,36, + 32,32,32,114,243,0,0,0,41,1,114,90,1,0,0,114, + 89,1,0,0,115,2,0,0,0,32,32,114,10,0,0,0, + 218,10,112,97,116,104,95,115,116,97,116,115,122,23,83,111, + 117,114,99,101,76,111,97,100,101,114,46,112,97,116,104,95, + 115,116,97,116,115,249,3,0,0,115,24,0,0,0,128,0, + 240,24,0,17,24,152,20,159,31,153,31,168,20,211,25,46, + 208,15,47,208,8,47,114,28,0,0,0,99,4,0,0,0, + 0,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, + 243,38,0,0,0,151,0,124,0,106,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,2,124, + 3,171,2,0,0,0,0,0,0,83,0,41,1,122,228,79, + 112,116,105,111,110,97,108,32,109,101,116,104,111,100,32,119, + 104,105,99,104,32,119,114,105,116,101,115,32,100,97,116,97, + 32,40,98,121,116,101,115,41,32,116,111,32,97,32,102,105, + 108,101,32,112,97,116,104,32,40,97,32,115,116,114,41,46, + 10,10,32,32,32,32,32,32,32,32,73,109,112,108,101,109, + 101,110,116,105,110,103,32,116,104,105,115,32,109,101,116,104, + 111,100,32,97,108,108,111,119,115,32,102,111,114,32,116,104, + 101,32,119,114,105,116,105,110,103,32,111,102,32,98,121,116, + 101,99,111,100,101,32,102,105,108,101,115,46,10,10,32,32, + 32,32,32,32,32,32,84,104,101,32,115,111,117,114,99,101, + 32,112,97,116,104,32,105,115,32,110,101,101,100,101,100,32, + 105,110,32,111,114,100,101,114,32,116,111,32,99,111,114,114, + 101,99,116,108,121,32,116,114,97,110,115,102,101,114,32,112, + 101,114,109,105,115,115,105,111,110,115,10,32,32,32,32,32, + 32,32,32,41,1,218,8,115,101,116,95,100,97,116,97,41, + 4,114,190,0,0,0,114,177,0,0,0,218,10,99,97,99, + 104,101,95,112,97,116,104,114,48,0,0,0,115,4,0,0, + 0,32,32,32,32,114,10,0,0,0,218,15,95,99,97,99, + 104,101,95,98,121,116,101,99,111,100,101,122,28,83,111,117, + 114,99,101,76,111,97,100,101,114,46,95,99,97,99,104,101, + 95,98,121,116,101,99,111,100,101,7,4,0,0,115,21,0, + 0,0,128,0,240,16,0,16,20,143,125,137,125,152,90,168, + 20,211,15,46,208,8,46,114,28,0,0,0,99,3,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,243,4,0,0,0,151,0,121,1,41,2,122,150,79,112, + 116,105,111,110,97,108,32,109,101,116,104,111,100,32,119,104, + 105,99,104,32,119,114,105,116,101,115,32,100,97,116,97,32, + 40,98,121,116,101,115,41,32,116,111,32,97,32,102,105,108, + 101,32,112,97,116,104,32,40,97,32,115,116,114,41,46,10, + 10,32,32,32,32,32,32,32,32,73,109,112,108,101,109,101, + 110,116,105,110,103,32,116,104,105,115,32,109,101,116,104,111, + 100,32,97,108,108,111,119,115,32,102,111,114,32,116,104,101, + 32,119,114,105,116,105,110,103,32,111,102,32,98,121,116,101, + 99,111,100,101,32,102,105,108,101,115,46,10,32,32,32,32, + 32,32,32,32,78,114,30,0,0,0,41,3,114,190,0,0, + 0,114,68,0,0,0,114,48,0,0,0,115,3,0,0,0, + 32,32,32,114,10,0,0,0,114,94,1,0,0,122,21,83, + 111,117,114,99,101,76,111,97,100,101,114,46,115,101,116,95, + 100,97,116,97,17,4,0,0,114,75,1,0,0,114,28,0, + 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,3,0,0,0,243,156,0,0,0,151,0,124,0, + 106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,1,171,1,0,0,0,0,0,0,125,2, + 9,0,124,0,106,3,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,124,2,171,1,0,0,0,0, + 0,0,125,3,116,9,0,0,0,0,0,0,0,0,124,3, + 171,1,0,0,0,0,0,0,83,0,35,0,116,4,0,0, + 0,0,0,0,0,0,36,0,114,19,125,4,116,7,0,0, + 0,0,0,0,0,0,100,1,124,1,172,2,171,2,0,0, + 0,0,0,0,124,4,130,2,100,3,125,4,126,4,119,1, + 119,0,120,3,89,0,119,1,41,4,122,52,67,111,110,99, + 114,101,116,101,32,105,109,112,108,101,109,101,110,116,97,116, + 105,111,110,32,111,102,32,73,110,115,112,101,99,116,76,111, + 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,46, + 122,39,115,111,117,114,99,101,32,110,111,116,32,97,118,97, + 105,108,97,98,108,101,32,116,104,114,111,117,103,104,32,103, + 101,116,95,100,97,116,97,40,41,114,187,0,0,0,78,41, + 5,114,8,1,0,0,218,8,103,101,116,95,100,97,116,97, + 114,87,0,0,0,114,189,0,0,0,114,3,1,0,0,41, + 5,114,190,0,0,0,114,43,1,0,0,114,68,0,0,0, + 114,255,0,0,0,114,32,1,0,0,115,5,0,0,0,32, + 32,32,32,32,114,10,0,0,0,218,10,103,101,116,95,115, + 111,117,114,99,101,122,23,83,111,117,114,99,101,76,111,97, + 100,101,114,46,103,101,116,95,115,111,117,114,99,101,24,4, + 0,0,115,90,0,0,0,128,0,224,15,19,215,15,32,209, + 15,32,160,24,211,15,42,136,4,240,2,4,9,54,216,27, + 31,159,61,153,61,168,20,211,27,46,136,76,244,8,0,16, + 29,152,92,211,15,42,208,8,42,248,244,7,0,16,23,242, + 0,2,9,54,220,18,29,208,30,71,216,35,43,244,3,1, + 19,45,216,50,53,240,3,1,13,54,251,240,3,2,9,54, + 250,115,20,0,0,0,147,17,47,0,175,9,65,11,3,184, + 14,65,6,3,193,6,5,65,11,3,114,171,0,0,0,41, + 1,218,9,95,111,112,116,105,109,105,122,101,99,3,0,0, + 0,0,0,0,0,1,0,0,0,8,0,0,0,3,0,0, + 0,243,64,0,0,0,151,0,116,0,0,0,0,0,0,0, + 0,0,106,3,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,116,4,0,0,0,0,0,0,0,0, + 124,1,124,2,100,1,100,2,124,3,172,3,171,6,0,0, + 0,0,0,0,83,0,41,4,122,130,82,101,116,117,114,110, + 32,116,104,101,32,99,111,100,101,32,111,98,106,101,99,116, + 32,99,111,109,112,105,108,101,100,32,102,114,111,109,32,115, + 111,117,114,99,101,46,10,10,32,32,32,32,32,32,32,32, + 84,104,101,32,39,100,97,116,97,39,32,97,114,103,117,109, + 101,110,116,32,99,97,110,32,98,101,32,97,110,121,32,111, + 98,106,101,99,116,32,116,121,112,101,32,116,104,97,116,32, + 99,111,109,112,105,108,101,40,41,32,115,117,112,112,111,114, + 116,115,46,10,32,32,32,32,32,32,32,32,114,79,1,0, + 0,84,41,2,218,12,100,111,110,116,95,105,110,104,101,114, + 105,116,114,136,0,0,0,41,3,114,208,0,0,0,114,78, + 1,0,0,218,7,99,111,109,112,105,108,101,41,4,114,190, + 0,0,0,114,48,0,0,0,114,68,0,0,0,114,101,1, + 0,0,115,4,0,0,0,32,32,32,32,114,10,0,0,0, + 218,14,115,111,117,114,99,101,95,116,111,95,99,111,100,101, + 122,27,83,111,117,114,99,101,76,111,97,100,101,114,46,115, + 111,117,114,99,101,95,116,111,95,99,111,100,101,34,4,0, + 0,115,43,0,0,0,128,0,244,10,0,16,26,215,15,51, + 209,15,51,180,71,184,84,192,52,200,22,216,53,57,192,73, + 240,3,0,16,52,243,0,1,16,79,1,240,0,1,9,79, + 1,114,28,0,0,0,99,2,0,0,0,0,0,0,0,0, + 0,0,0,7,0,0,0,3,0,0,0,243,72,4,0,0, + 151,0,124,0,106,1,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,124,1,171,1,0,0,0,0, + 0,0,125,2,100,1,125,3,100,1,125,4,100,1,125,5, + 100,2,125,6,100,3,125,7,9,0,116,3,0,0,0,0, + 0,0,0,0,124,2,171,1,0,0,0,0,0,0,125,8, + 9,0,124,0,106,5,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,124,2,171,1,0,0,0,0, + 0,0,125,9,116,7,0,0,0,0,0,0,0,0,124,9, + 100,4,25,0,0,0,171,1,0,0,0,0,0,0,125,3, + 9,0,124,0,106,9,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,124,8,171,1,0,0,0,0, + 0,0,125,10,124,1,124,8,100,5,156,2,125,11,9,0, + 116,11,0,0,0,0,0,0,0,0,124,10,124,1,124,11, + 171,3,0,0,0,0,0,0,125,12,116,13,0,0,0,0, + 0,0,0,0,124,10,171,1,0,0,0,0,0,0,100,6, + 100,1,26,0,125,13,124,12,100,7,122,1,0,0,100,8, + 107,55,0,0,125,6,124,6,114,106,124,12,100,9,122,1, + 0,0,100,8,107,55,0,0,125,7,116,14,0,0,0,0, + 0,0,0,0,106,16,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,100,10,107,55,0,0,114,97, + 124,7,115,19,116,14,0,0,0,0,0,0,0,0,106,16, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,100,11,107,40,0,0,114,76,124,0,106,9,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 124,2,171,1,0,0,0,0,0,0,125,4,116,15,0,0, + 0,0,0,0,0,0,106,18,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,116,20,0,0,0,0, + 0,0,0,0,124,4,171,2,0,0,0,0,0,0,125,5, + 116,23,0,0,0,0,0,0,0,0,124,10,124,5,124,1, + 124,11,171,4,0,0,0,0,0,0,1,0,110,18,116,25, + 0,0,0,0,0,0,0,0,124,10,124,3,124,9,100,12, + 25,0,0,0,124,1,124,11,171,5,0,0,0,0,0,0, + 1,0,116,26,0,0,0,0,0,0,0,0,106,29,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 100,13,124,8,124,2,171,3,0,0,0,0,0,0,1,0, + 116,31,0,0,0,0,0,0,0,0,124,13,124,1,124,8, + 124,2,172,14,171,4,0,0,0,0,0,0,83,0,35,0, + 116,32,0,0,0,0,0,0,0,0,116,34,0,0,0,0, + 0,0,0,0,102,2,36,0,114,3,1,0,89,0,110,51, 119,0,120,3,89,0,119,1,35,0,116,36,0,0,0,0, - 0,0,0,0,36,0,114,3,1,0,89,0,110,21,119,0, - 120,3,89,0,119,1,35,0,116,38,0,0,0,0,0,0, - 0,0,36,0,114,5,1,0,100,1,125,8,89,0,110,4, - 119,0,120,3,89,0,119,1,124,4,128,17,124,0,106,9, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,2,171,1,0,0,0,0,0,0,125,4,124,0, - 106,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,4,124,2,171,2,0,0,0,0,0,0, - 125,14,116,26,0,0,0,0,0,0,0,0,106,29,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 100,15,124,2,171,2,0,0,0,0,0,0,1,0,116,42, - 0,0,0,0,0,0,0,0,106,44,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,115,108,124,8, - 129,106,124,3,129,104,124,6,114,42,124,5,128,26,116,15, - 0,0,0,0,0,0,0,0,106,18,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,116,20,0,0, - 0,0,0,0,0,0,124,4,171,2,0,0,0,0,0,0, - 125,5,116,47,0,0,0,0,0,0,0,0,124,14,124,5, - 124,7,171,3,0,0,0,0,0,0,125,10,110,22,116,49, - 0,0,0,0,0,0,0,0,124,14,124,3,116,51,0,0, - 0,0,0,0,0,0,124,4,171,1,0,0,0,0,0,0, - 171,3,0,0,0,0,0,0,125,10,9,0,124,0,106,53, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,2,124,8,124,10,171,3,0,0,0,0,0,0, - 1,0,124,14,83,0,35,0,116,38,0,0,0,0,0,0, - 0,0,36,0,114,4,1,0,89,0,124,14,83,0,119,0, - 120,3,89,0,119,1,124,14,83,0,41,16,122,190,67,111, - 110,99,114,101,116,101,32,105,109,112,108,101,109,101,110,116, - 97,116,105,111,110,32,111,102,32,73,110,115,112,101,99,116, - 76,111,97,100,101,114,46,103,101,116,95,99,111,100,101,46, - 10,10,32,32,32,32,32,32,32,32,82,101,97,100,105,110, - 103,32,111,102,32,98,121,116,101,99,111,100,101,32,114,101, - 113,117,105,114,101,115,32,112,97,116,104,95,115,116,97,116, - 115,32,116,111,32,98,101,32,105,109,112,108,101,109,101,110, - 116,101,100,46,32,84,111,32,119,114,105,116,101,10,32,32, - 32,32,32,32,32,32,98,121,116,101,99,111,100,101,44,32, - 115,101,116,95,100,97,116,97,32,109,117,115,116,32,97,108, - 115,111,32,98,101,32,105,109,112,108,101,109,101,110,116,101, - 100,46,10,10,32,32,32,32,32,32,32,32,78,70,84,114, - 242,0,0,0,114,229,0,0,0,114,211,0,0,0,114,6, - 0,0,0,114,1,0,0,0,114,52,0,0,0,218,5,110, - 101,118,101,114,218,6,97,108,119,97,121,115,218,4,115,105, - 122,101,122,13,123,125,32,109,97,116,99,104,101,115,32,123, - 125,41,3,114,187,0,0,0,114,173,0,0,0,114,176,0, - 0,0,122,19,99,111,100,101,32,111,98,106,101,99,116,32, - 102,114,111,109,32,123,125,41,27,114,7,1,0,0,114,152, - 0,0,0,114,91,1,0,0,114,40,0,0,0,114,98,1, - 0,0,114,219,0,0,0,218,10,109,101,109,111,114,121,118, - 105,101,119,114,234,0,0,0,218,21,99,104,101,99,107,95, - 104,97,115,104,95,98,97,115,101,100,95,112,121,99,115,114, - 226,0,0,0,218,17,95,82,65,87,95,77,65,71,73,67, - 95,78,85,77,66,69,82,114,227,0,0,0,114,224,0,0, - 0,114,207,0,0,0,114,215,0,0,0,114,237,0,0,0, - 114,188,0,0,0,114,216,0,0,0,114,87,0,0,0,114, - 134,0,0,0,114,104,1,0,0,114,20,0,0,0,218,19, - 100,111,110,116,95,119,114,105,116,101,95,98,121,116,101,99, - 111,100,101,114,246,0,0,0,114,243,0,0,0,114,7,0, - 0,0,114,95,1,0,0,41,15,114,189,0,0,0,114,42, - 1,0,0,114,176,0,0,0,114,222,0,0,0,114,254,0, - 0,0,114,226,0,0,0,218,10,104,97,115,104,95,98,97, - 115,101,100,218,12,99,104,101,99,107,95,115,111,117,114,99, - 101,114,173,0,0,0,218,2,115,116,114,48,0,0,0,114, - 217,0,0,0,114,21,0,0,0,218,10,98,121,116,101,115, - 95,100,97,116,97,218,11,99,111,100,101,95,111,98,106,101, - 99,116,115,15,0,0,0,32,32,32,32,32,32,32,32,32, - 32,32,32,32,32,32,114,10,0,0,0,114,76,1,0,0, - 122,21,83,111,117,114,99,101,76,111,97,100,101,114,46,103, - 101,116,95,99,111,100,101,38,4,0,0,115,147,2,0,0, - 128,0,240,14,0,23,27,215,22,39,209,22,39,168,8,211, - 22,49,136,11,216,23,27,136,12,216,23,27,136,12,216,22, - 26,136,11,216,21,26,136,10,216,23,27,136,12,240,2,51, - 9,74,1,220,28,45,168,107,211,28,58,136,77,240,8,46, - 13,74,1,216,21,25,151,95,145,95,160,91,211,21,49,144, - 2,244,8,0,32,35,160,50,160,103,161,59,211,31,47,144, - 12,240,2,40,17,74,1,216,27,31,159,61,153,61,168,29, - 211,27,55,144,68,240,10,0,33,41,216,32,45,241,5,3, - 35,22,144,75,240,8,31,21,74,1,220,32,45,168,100,176, - 72,184,107,211,32,74,152,5,220,37,47,176,4,211,37,53, - 176,98,176,99,208,37,58,152,10,216,37,42,168,83,161,91, - 176,65,209,37,53,152,10,217,27,37,216,43,48,176,52,169, - 60,184,49,209,43,60,152,76,220,32,36,215,32,58,209,32, - 58,184,103,210,32,69,217,33,45,220,33,37,215,33,59,209, - 33,59,184,120,210,33,71,216,47,51,175,125,169,125,184,91, - 211,47,73,160,12,220,46,50,215,46,62,209,46,62,220,36, - 53,216,36,48,243,5,3,47,34,160,11,244,8,0,33,51, - 176,52,184,27,192,104,216,51,62,245,3,1,33,64,1,244, - 6,0,29,52,216,32,36,216,32,44,216,32,34,160,54,161, - 10,216,32,40,216,32,43,244,11,6,29,30,244,20,0,25, - 35,215,24,51,209,24,51,176,79,192,93,216,52,63,244,3, - 1,25,65,1,228,31,48,176,26,192,40,216,63,76,216,61, - 72,244,5,2,32,74,1,240,0,2,25,74,1,248,244,11, - 0,29,40,172,24,208,27,50,242,0,1,21,29,217,24,28, - 240,3,1,21,29,251,244,63,0,24,31,242,0,1,17,25, - 217,20,24,240,3,1,17,25,251,244,13,0,20,27,242,0, - 1,13,21,217,16,20,240,3,1,13,21,251,244,11,0,16, - 35,242,0,1,9,33,216,28,32,138,77,240,3,1,9,33, - 250,240,100,1,0,12,24,208,11,31,216,27,31,159,61,153, - 61,168,27,211,27,53,136,76,216,22,26,215,22,41,209,22, - 41,168,44,184,11,211,22,68,136,11,220,8,18,215,8,35, - 209,8,35,208,36,57,184,59,212,8,71,220,16,19,215,16, - 39,210,16,39,168,77,208,44,69,216,16,28,208,16,40,217, - 15,25,216,19,30,208,19,38,220,34,38,215,34,50,209,34, - 50,212,51,68,216,51,63,243,3,1,35,65,1,144,75,228, - 23,40,168,27,176,107,192,60,211,23,80,145,4,228,23,45, - 168,107,184,60,220,46,49,176,44,211,46,63,243,3,1,24, - 65,1,144,4,240,4,3,13,21,216,16,20,215,16,36,209, - 16,36,160,91,176,45,192,20,212,16,70,240,6,0,16,27, - 208,8,26,248,244,5,0,20,39,242,0,1,13,21,216,16, - 20,216,15,26,208,8,26,240,5,1,13,21,250,224,15,26, - 208,8,26,115,89,0,0,0,157,11,69,26,0,169,17,69, - 11,0,193,9,17,68,60,0,193,32,66,33,68,39,0,196, - 39,15,68,57,3,196,56,1,68,57,3,196,60,9,69,8, - 3,197,7,1,69,8,3,197,11,9,69,23,3,197,22,1, - 69,23,3,197,26,11,69,40,3,197,39,1,69,40,3,199, - 61,19,72,18,0,200,18,9,72,31,3,200,30,1,72,31, - 3,78,41,10,114,196,0,0,0,114,195,0,0,0,114,197, - 0,0,0,114,89,1,0,0,114,91,1,0,0,114,95,1, - 0,0,114,93,1,0,0,114,99,1,0,0,114,104,1,0, - 0,114,76,1,0,0,114,30,0,0,0,114,28,0,0,0, - 114,10,0,0,0,114,86,1,0,0,114,86,1,0,0,235, - 3,0,0,115,44,0,0,0,132,0,242,4,6,5,22,242, - 16,12,5,48,242,28,8,5,47,242,20,4,5,12,242,14, - 8,5,43,240,20,0,55,57,244,0,6,5,79,1,243,16, - 83,1,5,27,114,28,0,0,0,114,86,1,0,0,99,0, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0, - 0,0,0,243,100,0,0,0,135,0,151,0,101,0,90,1, - 100,0,90,2,100,1,90,3,100,2,132,0,90,4,100,3, - 132,0,90,5,100,4,132,0,90,6,101,7,136,0,102,1, - 100,5,132,8,171,0,0,0,0,0,0,0,90,8,101,7, - 100,6,132,0,171,0,0,0,0,0,0,0,90,9,100,7, - 132,0,90,10,101,7,100,8,132,0,171,0,0,0,0,0, - 0,0,90,11,136,0,120,1,90,12,83,0,41,9,218,10, - 70,105,108,101,76,111,97,100,101,114,122,103,66,97,115,101, - 32,102,105,108,101,32,108,111,97,100,101,114,32,99,108,97, - 115,115,32,119,104,105,99,104,32,105,109,112,108,101,109,101, - 110,116,115,32,116,104,101,32,108,111,97,100,101,114,32,112, - 114,111,116,111,99,111,108,32,109,101,116,104,111,100,115,32, - 116,104,97,116,10,32,32,32,32,114,101,113,117,105,114,101, - 32,102,105,108,101,32,115,121,115,116,101,109,32,117,115,97, - 103,101,46,99,3,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,3,0,0,0,243,32,0,0,0,151,0,124, - 1,124,0,95,0,0,0,0,0,0,0,0,0,124,2,124, - 0,95,1,0,0,0,0,0,0,0,0,121,1,41,2,122, - 75,67,97,99,104,101,32,116,104,101,32,109,111,100,117,108, - 101,32,110,97,109,101,32,97,110,100,32,116,104,101,32,112, - 97,116,104,32,116,111,32,116,104,101,32,102,105,108,101,32, - 102,111,117,110,100,32,98,121,32,116,104,101,10,32,32,32, - 32,32,32,32,32,102,105,110,100,101,114,46,78,114,229,0, - 0,0,41,3,114,189,0,0,0,114,42,1,0,0,114,68, - 0,0,0,115,3,0,0,0,32,32,32,114,10,0,0,0, - 114,67,1,0,0,122,19,70,105,108,101,76,111,97,100,101, - 114,46,95,95,105,110,105,116,95,95,129,4,0,0,115,18, - 0,0,0,128,0,240,6,0,21,29,136,4,140,9,216,20, - 24,136,4,141,9,114,28,0,0,0,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,243, - 106,0,0,0,151,0,124,0,106,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,1,106,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,107,40,0,0,120,1,114,25,1,0,124,0,106,2, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,1,106,2,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,107,40,0,0,83,0,114,77, - 0,0,0,169,2,218,9,95,95,99,108,97,115,115,95,95, - 114,202,0,0,0,169,2,114,189,0,0,0,218,5,111,116, - 104,101,114,115,2,0,0,0,32,32,114,10,0,0,0,218, - 6,95,95,101,113,95,95,122,17,70,105,108,101,76,111,97, - 100,101,114,46,95,95,101,113,95,95,135,4,0,0,243,44, - 0,0,0,128,0,216,16,20,151,14,145,14,160,37,167,47, - 161,47,209,16,49,242,0,1,17,48,216,16,20,151,13,145, - 13,160,21,167,30,161,30,209,16,47,240,3,1,9,49,114, - 28,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,3,0,0,0,243,88,0,0,0,151,0, - 116,1,0,0,0,0,0,0,0,0,124,0,106,2,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 171,1,0,0,0,0,0,0,116,1,0,0,0,0,0,0, - 0,0,124,0,106,4,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,171,1,0,0,0,0,0,0, - 122,12,0,0,83,0,114,77,0,0,0,169,3,218,4,104, - 97,115,104,114,187,0,0,0,114,68,0,0,0,169,1,114, - 189,0,0,0,115,1,0,0,0,32,114,10,0,0,0,218, - 8,95,95,104,97,115,104,95,95,122,19,70,105,108,101,76, - 111,97,100,101,114,46,95,95,104,97,115,104,95,95,139,4, - 0,0,243,29,0,0,0,128,0,220,15,19,144,68,151,73, - 145,73,139,127,164,20,160,100,167,105,161,105,163,31,209,15, - 48,208,8,48,114,28,0,0,0,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,3,0,0,0,243,42, - 0,0,0,149,1,151,0,116,0,0,0,0,0,0,0,0, - 0,116,2,0,0,0,0,0,0,0,0,124,0,141,11,0, - 0,124,1,171,1,0,0,0,0,0,0,83,0,41,1,122, - 100,76,111,97,100,32,97,32,109,111,100,117,108,101,32,102, - 114,111,109,32,97,32,102,105,108,101,46,10,10,32,32,32, - 32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, - 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, - 32,85,115,101,32,101,120,101,99,95,109,111,100,117,108,101, - 40,41,32,105,110,115,116,101,97,100,46,10,10,32,32,32, - 32,32,32,32,32,41,3,218,5,115,117,112,101,114,114,119, - 1,0,0,114,84,1,0,0,41,3,114,189,0,0,0,114, - 42,1,0,0,114,123,1,0,0,115,3,0,0,0,32,32, - 128,114,10,0,0,0,114,84,1,0,0,122,22,70,105,108, - 101,76,111,97,100,101,114,46,108,111,97,100,95,109,111,100, - 117,108,101,142,4,0,0,115,23,0,0,0,248,128,0,244, - 20,0,16,21,148,90,160,20,209,15,50,176,56,211,15,60, - 208,8,60,114,28,0,0,0,99,2,0,0,0,0,0,0, - 0,0,0,0,0,1,0,0,0,3,0,0,0,243,26,0, + 0,0,0,0,36,0,114,3,1,0,89,0,110,36,119,0, + 120,3,89,0,119,1,35,0,116,36,0,0,0,0,0,0, + 0,0,36,0,114,3,1,0,89,0,110,21,119,0,120,3, + 89,0,119,1,35,0,116,38,0,0,0,0,0,0,0,0, + 36,0,114,5,1,0,100,1,125,8,89,0,110,4,119,0, + 120,3,89,0,119,1,124,4,128,17,124,0,106,9,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 124,2,171,1,0,0,0,0,0,0,125,4,124,0,106,41, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,124,4,124,2,171,2,0,0,0,0,0,0,125,14, + 116,26,0,0,0,0,0,0,0,0,106,29,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,15, + 124,2,171,2,0,0,0,0,0,0,1,0,116,42,0,0, + 0,0,0,0,0,0,106,44,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,115,108,124,8,129,106, + 124,3,129,104,124,6,114,42,124,5,128,26,116,15,0,0, + 0,0,0,0,0,0,106,18,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,116,20,0,0,0,0, + 0,0,0,0,124,4,171,2,0,0,0,0,0,0,125,5, + 116,47,0,0,0,0,0,0,0,0,124,14,124,5,124,7, + 171,3,0,0,0,0,0,0,125,10,110,22,116,49,0,0, + 0,0,0,0,0,0,124,14,124,3,116,51,0,0,0,0, + 0,0,0,0,124,4,171,1,0,0,0,0,0,0,171,3, + 0,0,0,0,0,0,125,10,9,0,124,0,106,53,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 124,2,124,8,124,10,171,3,0,0,0,0,0,0,1,0, + 124,14,83,0,35,0,116,38,0,0,0,0,0,0,0,0, + 36,0,114,4,1,0,89,0,124,14,83,0,119,0,120,3, + 89,0,119,1,124,14,83,0,41,16,122,190,67,111,110,99, + 114,101,116,101,32,105,109,112,108,101,109,101,110,116,97,116, + 105,111,110,32,111,102,32,73,110,115,112,101,99,116,76,111, + 97,100,101,114,46,103,101,116,95,99,111,100,101,46,10,10, + 32,32,32,32,32,32,32,32,82,101,97,100,105,110,103,32, + 111,102,32,98,121,116,101,99,111,100,101,32,114,101,113,117, + 105,114,101,115,32,112,97,116,104,95,115,116,97,116,115,32, + 116,111,32,98,101,32,105,109,112,108,101,109,101,110,116,101, + 100,46,32,84,111,32,119,114,105,116,101,10,32,32,32,32, + 32,32,32,32,98,121,116,101,99,111,100,101,44,32,115,101, + 116,95,100,97,116,97,32,109,117,115,116,32,97,108,115,111, + 32,98,101,32,105,109,112,108,101,109,101,110,116,101,100,46, + 10,10,32,32,32,32,32,32,32,32,78,70,84,114,243,0, + 0,0,114,230,0,0,0,114,212,0,0,0,114,6,0,0, + 0,114,1,0,0,0,114,52,0,0,0,218,5,110,101,118, + 101,114,218,6,97,108,119,97,121,115,218,4,115,105,122,101, + 122,13,123,125,32,109,97,116,99,104,101,115,32,123,125,41, + 3,114,188,0,0,0,114,174,0,0,0,114,177,0,0,0, + 122,19,99,111,100,101,32,111,98,106,101,99,116,32,102,114, + 111,109,32,123,125,41,27,114,8,1,0,0,114,153,0,0, + 0,114,92,1,0,0,114,40,0,0,0,114,99,1,0,0, + 114,220,0,0,0,218,10,109,101,109,111,114,121,118,105,101, + 119,114,235,0,0,0,218,21,99,104,101,99,107,95,104,97, + 115,104,95,98,97,115,101,100,95,112,121,99,115,114,227,0, + 0,0,218,17,95,82,65,87,95,77,65,71,73,67,95,78, + 85,77,66,69,82,114,228,0,0,0,114,225,0,0,0,114, + 208,0,0,0,114,216,0,0,0,114,238,0,0,0,114,189, + 0,0,0,114,217,0,0,0,114,87,0,0,0,114,135,0, + 0,0,114,105,1,0,0,114,20,0,0,0,218,19,100,111, + 110,116,95,119,114,105,116,101,95,98,121,116,101,99,111,100, + 101,114,247,0,0,0,114,244,0,0,0,114,7,0,0,0, + 114,96,1,0,0,41,15,114,190,0,0,0,114,43,1,0, + 0,114,177,0,0,0,114,223,0,0,0,114,255,0,0,0, + 114,227,0,0,0,218,10,104,97,115,104,95,98,97,115,101, + 100,218,12,99,104,101,99,107,95,115,111,117,114,99,101,114, + 174,0,0,0,218,2,115,116,114,48,0,0,0,114,218,0, + 0,0,114,21,0,0,0,218,10,98,121,116,101,115,95,100, + 97,116,97,218,11,99,111,100,101,95,111,98,106,101,99,116, + 115,15,0,0,0,32,32,32,32,32,32,32,32,32,32,32, + 32,32,32,32,114,10,0,0,0,114,77,1,0,0,122,21, + 83,111,117,114,99,101,76,111,97,100,101,114,46,103,101,116, + 95,99,111,100,101,42,4,0,0,115,147,2,0,0,128,0, + 240,14,0,23,27,215,22,39,209,22,39,168,8,211,22,49, + 136,11,216,23,27,136,12,216,23,27,136,12,216,22,26,136, + 11,216,21,26,136,10,216,23,27,136,12,240,2,51,9,74, + 1,220,28,45,168,107,211,28,58,136,77,240,8,46,13,74, + 1,216,21,25,151,95,145,95,160,91,211,21,49,144,2,244, + 8,0,32,35,160,50,160,103,161,59,211,31,47,144,12,240, + 2,40,17,74,1,216,27,31,159,61,153,61,168,29,211,27, + 55,144,68,240,10,0,33,41,216,32,45,241,5,3,35,22, + 144,75,240,8,31,21,74,1,220,32,45,168,100,176,72,184, + 107,211,32,74,152,5,220,37,47,176,4,211,37,53,176,98, + 176,99,208,37,58,152,10,216,37,42,168,83,161,91,176,65, + 209,37,53,152,10,217,27,37,216,43,48,176,52,169,60,184, + 49,209,43,60,152,76,220,32,36,215,32,58,209,32,58,184, + 103,210,32,69,217,33,45,220,33,37,215,33,59,209,33,59, + 184,120,210,33,71,216,47,51,175,125,169,125,184,91,211,47, + 73,160,12,220,46,50,215,46,62,209,46,62,220,36,53,216, + 36,48,243,5,3,47,34,160,11,244,8,0,33,51,176,52, + 184,27,192,104,216,51,62,245,3,1,33,64,1,244,6,0, + 29,52,216,32,36,216,32,44,216,32,34,160,54,161,10,216, + 32,40,216,32,43,244,11,6,29,30,244,20,0,25,35,215, + 24,51,209,24,51,176,79,192,93,216,52,63,244,3,1,25, + 65,1,228,31,48,176,26,192,40,216,63,76,216,61,72,244, + 5,2,32,74,1,240,0,2,25,74,1,248,244,11,0,29, + 40,172,24,208,27,50,242,0,1,21,29,217,24,28,240,3, + 1,21,29,251,244,63,0,24,31,242,0,1,17,25,217,20, + 24,240,3,1,17,25,251,244,13,0,20,27,242,0,1,13, + 21,217,16,20,240,3,1,13,21,251,244,11,0,16,35,242, + 0,1,9,33,216,28,32,138,77,240,3,1,9,33,250,240, + 100,1,0,12,24,208,11,31,216,27,31,159,61,153,61,168, + 27,211,27,53,136,76,216,22,26,215,22,41,209,22,41,168, + 44,184,11,211,22,68,136,11,220,8,18,215,8,35,209,8, + 35,208,36,57,184,59,212,8,71,220,16,19,215,16,39,210, + 16,39,168,77,208,44,69,216,16,28,208,16,40,217,15,25, + 216,19,30,208,19,38,220,34,38,215,34,50,209,34,50,212, + 51,68,216,51,63,243,3,1,35,65,1,144,75,228,23,40, + 168,27,176,107,192,60,211,23,80,145,4,228,23,45,168,107, + 184,60,220,46,49,176,44,211,46,63,243,3,1,24,65,1, + 144,4,240,4,3,13,21,216,16,20,215,16,36,209,16,36, + 160,91,176,45,192,20,212,16,70,240,6,0,16,27,208,8, + 26,248,244,5,0,20,39,242,0,1,13,21,216,16,20,216, + 15,26,208,8,26,240,5,1,13,21,250,224,15,26,208,8, + 26,115,89,0,0,0,157,11,69,26,0,169,17,69,11,0, + 193,9,17,68,60,0,193,32,66,33,68,39,0,196,39,15, + 68,57,3,196,56,1,68,57,3,196,60,9,69,8,3,197, + 7,1,69,8,3,197,11,9,69,23,3,197,22,1,69,23, + 3,197,26,11,69,40,3,197,39,1,69,40,3,199,61,19, + 72,18,0,200,18,9,72,31,3,200,30,1,72,31,3,78, + 41,10,114,197,0,0,0,114,196,0,0,0,114,198,0,0, + 0,114,90,1,0,0,114,92,1,0,0,114,96,1,0,0, + 114,94,1,0,0,114,100,1,0,0,114,105,1,0,0,114, + 77,1,0,0,114,30,0,0,0,114,28,0,0,0,114,10, + 0,0,0,114,87,1,0,0,114,87,1,0,0,239,3,0, + 0,115,44,0,0,0,132,0,242,4,6,5,22,242,16,12, + 5,48,242,28,8,5,47,242,20,4,5,12,242,14,8,5, + 43,240,20,0,55,57,244,0,6,5,79,1,243,16,83,1, + 5,27,114,28,0,0,0,114,87,1,0,0,99,0,0,0, + 0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0, + 0,243,100,0,0,0,135,0,151,0,101,0,90,1,100,0, + 90,2,100,1,90,3,100,2,132,0,90,4,100,3,132,0, + 90,5,100,4,132,0,90,6,101,7,136,0,102,1,100,5, + 132,8,171,0,0,0,0,0,0,0,90,8,101,7,100,6, + 132,0,171,0,0,0,0,0,0,0,90,9,100,7,132,0, + 90,10,101,7,100,8,132,0,171,0,0,0,0,0,0,0, + 90,11,136,0,120,1,90,12,83,0,41,9,218,10,70,105, + 108,101,76,111,97,100,101,114,122,103,66,97,115,101,32,102, + 105,108,101,32,108,111,97,100,101,114,32,99,108,97,115,115, + 32,119,104,105,99,104,32,105,109,112,108,101,109,101,110,116, + 115,32,116,104,101,32,108,111,97,100,101,114,32,112,114,111, + 116,111,99,111,108,32,109,101,116,104,111,100,115,32,116,104, + 97,116,10,32,32,32,32,114,101,113,117,105,114,101,32,102, + 105,108,101,32,115,121,115,116,101,109,32,117,115,97,103,101, + 46,99,3,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,3,0,0,0,243,32,0,0,0,151,0,124,1,124, + 0,95,0,0,0,0,0,0,0,0,0,124,2,124,0,95, + 1,0,0,0,0,0,0,0,0,121,1,41,2,122,75,67, + 97,99,104,101,32,116,104,101,32,109,111,100,117,108,101,32, + 110,97,109,101,32,97,110,100,32,116,104,101,32,112,97,116, + 104,32,116,111,32,116,104,101,32,102,105,108,101,32,102,111, + 117,110,100,32,98,121,32,116,104,101,10,32,32,32,32,32, + 32,32,32,102,105,110,100,101,114,46,78,114,230,0,0,0, + 41,3,114,190,0,0,0,114,43,1,0,0,114,68,0,0, + 0,115,3,0,0,0,32,32,32,114,10,0,0,0,114,68, + 1,0,0,122,19,70,105,108,101,76,111,97,100,101,114,46, + 95,95,105,110,105,116,95,95,133,4,0,0,115,18,0,0, + 0,128,0,240,6,0,21,29,136,4,140,9,216,20,24,136, + 4,141,9,114,28,0,0,0,99,2,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,3,0,0,0,243,106,0, 0,0,151,0,124,0,106,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,83,0,169,1,122,58, - 82,101,116,117,114,110,32,116,104,101,32,112,97,116,104,32, - 116,111,32,116,104,101,32,115,111,117,114,99,101,32,102,105, - 108,101,32,97,115,32,102,111,117,110,100,32,98,121,32,116, - 104,101,32,102,105,110,100,101,114,46,114,84,0,0,0,114, - 83,1,0,0,115,2,0,0,0,32,32,114,10,0,0,0, - 114,7,1,0,0,122,23,70,105,108,101,76,111,97,100,101, - 114,46,103,101,116,95,102,105,108,101,110,97,109,101,154,4, - 0,0,243,14,0,0,0,128,0,240,6,0,16,20,143,121, - 137,121,208,8,24,114,28,0,0,0,99,2,0,0,0,0, - 0,0,0,0,0,0,0,6,0,0,0,3,0,0,0,243, - 46,1,0,0,151,0,116,1,0,0,0,0,0,0,0,0, - 124,0,116,2,0,0,0,0,0,0,0,0,116,4,0,0, - 0,0,0,0,0,0,102,2,171,2,0,0,0,0,0,0, - 114,56,116,7,0,0,0,0,0,0,0,0,106,8,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 116,11,0,0,0,0,0,0,0,0,124,1,171,1,0,0, - 0,0,0,0,171,1,0,0,0,0,0,0,53,0,125,2, - 124,2,106,13,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,171,0,0,0,0,0,0,0,99,2, - 100,1,100,1,100,1,171,2,0,0,0,0,0,0,1,0, - 83,0,116,7,0,0,0,0,0,0,0,0,106,14,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,1,100,2,171,2,0,0,0,0,0,0,53,0,125,2, - 124,2,106,13,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,171,0,0,0,0,0,0,0,99,2, - 100,1,100,1,100,1,171,2,0,0,0,0,0,0,1,0, - 83,0,35,0,49,0,115,1,119,2,1,0,89,0,1,0, - 1,0,121,1,120,3,89,0,119,1,35,0,49,0,115,1, - 119,2,1,0,89,0,1,0,1,0,121,1,120,3,89,0, - 119,1,41,3,122,39,82,101,116,117,114,110,32,116,104,101, - 32,100,97,116,97,32,102,114,111,109,32,112,97,116,104,32, - 97,115,32,114,97,119,32,98,121,116,101,115,46,78,218,1, - 114,41,8,114,232,0,0,0,114,86,1,0,0,218,19,69, - 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, - 101,114,114,114,0,0,0,218,9,111,112,101,110,95,99,111, - 100,101,114,136,0,0,0,218,4,114,101,97,100,114,115,0, - 0,0,41,3,114,189,0,0,0,114,68,0,0,0,114,120, - 0,0,0,115,3,0,0,0,32,32,32,114,10,0,0,0, - 114,98,1,0,0,122,19,70,105,108,101,76,111,97,100,101, - 114,46,103,101,116,95,100,97,116,97,159,4,0,0,115,106, - 0,0,0,128,0,228,11,21,144,100,156,92,212,43,62,208, - 28,63,212,11,64,220,17,20,151,29,145,29,156,115,160,52, - 155,121,212,17,41,168,84,216,23,27,151,121,145,121,147,123, - 247,3,0,18,42,209,17,41,244,6,0,18,21,151,26,145, - 26,152,68,160,35,212,17,38,168,36,216,23,27,151,121,145, - 121,147,123,247,3,0,18,39,209,17,38,247,7,0,18,42, - 208,17,41,250,247,6,0,18,39,208,17,38,250,115,23,0, - 0,0,181,16,65,63,3,193,37,16,66,11,3,193,63,5, - 66,8,7,194,11,5,66,20,7,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,3,0,0,0,243,30, - 0,0,0,151,0,100,1,100,2,108,0,109,1,125,2,1, - 0,2,0,124,2,124,0,171,1,0,0,0,0,0,0,83, - 0,41,3,78,114,1,0,0,0,41,1,218,10,70,105,108, - 101,82,101,97,100,101,114,41,2,218,17,105,109,112,111,114, - 116,108,105,98,46,114,101,97,100,101,114,115,114,145,1,0, - 0,41,3,114,189,0,0,0,114,79,1,0,0,114,145,1, - 0,0,115,3,0,0,0,32,32,32,114,10,0,0,0,218, - 19,103,101,116,95,114,101,115,111,117,114,99,101,95,114,101, - 97,100,101,114,122,30,70,105,108,101,76,111,97,100,101,114, - 46,103,101,116,95,114,101,115,111,117,114,99,101,95,114,101, - 97,100,101,114,168,4,0,0,115,16,0,0,0,128,0,229, - 8,48,217,15,25,152,36,211,15,31,208,8,31,114,28,0, - 0,0,41,13,114,196,0,0,0,114,195,0,0,0,114,197, - 0,0,0,114,198,0,0,0,114,67,1,0,0,114,126,1, - 0,0,114,132,1,0,0,114,208,0,0,0,114,84,1,0, - 0,114,7,1,0,0,114,98,1,0,0,114,147,1,0,0, - 218,13,95,95,99,108,97,115,115,99,101,108,108,95,95,41, - 1,114,123,1,0,0,115,1,0,0,0,64,114,10,0,0, - 0,114,119,1,0,0,114,119,1,0,0,124,4,0,0,115, - 88,0,0,0,248,132,0,241,4,1,5,34,242,6,4,5, - 25,242,12,2,5,49,242,8,1,5,49,240,6,0,6,17, - 243,2,9,5,61,243,3,0,6,17,240,2,9,5,61,240, - 22,0,6,17,241,2,2,5,25,243,3,0,6,17,240,2, - 2,5,25,242,8,7,5,35,240,18,0,6,17,241,2,2, - 5,32,243,3,0,6,17,244,2,2,5,32,114,28,0,0, - 0,114,119,1,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,0,0,0,0,243,40,0,0,0, - 151,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, - 132,0,90,4,100,3,132,0,90,5,100,4,100,5,156,1, - 100,6,132,2,90,6,121,7,41,8,218,16,83,111,117,114, - 99,101,70,105,108,101,76,111,97,100,101,114,122,62,67,111, - 110,99,114,101,116,101,32,105,109,112,108,101,109,101,110,116, - 97,116,105,111,110,32,111,102,32,83,111,117,114,99,101,76, - 111,97,100,101,114,32,117,115,105,110,103,32,116,104,101,32, - 102,105,108,101,32,115,121,115,116,101,109,46,99,2,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0, - 0,243,74,0,0,0,151,0,116,1,0,0,0,0,0,0, - 0,0,124,1,171,1,0,0,0,0,0,0,125,2,124,2, - 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,2,106,4,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,100,1,156,2,83,0, - 41,2,122,33,82,101,116,117,114,110,32,116,104,101,32,109, - 101,116,97,100,97,116,97,32,102,111,114,32,116,104,101,32, - 112,97,116,104,46,41,2,114,242,0,0,0,114,108,1,0, - 0,41,3,114,85,0,0,0,218,8,115,116,95,109,116,105, - 109,101,218,7,115,116,95,115,105,122,101,41,3,114,189,0, - 0,0,114,68,0,0,0,114,115,1,0,0,115,3,0,0, - 0,32,32,32,114,10,0,0,0,114,91,1,0,0,122,27, - 83,111,117,114,99,101,70,105,108,101,76,111,97,100,101,114, - 46,112,97,116,104,95,115,116,97,116,115,178,4,0,0,115, - 31,0,0,0,128,0,228,13,23,152,4,211,13,29,136,2, - 216,25,27,159,27,153,27,168,98,175,106,169,106,209,15,57, - 208,8,57,114,28,0,0,0,99,4,0,0,0,0,0,0, - 0,0,0,0,0,5,0,0,0,3,0,0,0,243,64,0, - 0,0,151,0,116,1,0,0,0,0,0,0,0,0,124,1, - 171,1,0,0,0,0,0,0,125,4,124,0,106,3,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,2,124,3,124,4,172,1,171,3,0,0,0,0,0,0, - 83,0,41,2,78,169,1,218,5,95,109,111,100,101,41,2, - 114,183,0,0,0,114,93,1,0,0,41,5,114,189,0,0, - 0,114,176,0,0,0,114,173,0,0,0,114,48,0,0,0, - 114,89,0,0,0,115,5,0,0,0,32,32,32,32,32,114, - 10,0,0,0,114,95,1,0,0,122,32,83,111,117,114,99, - 101,70,105,108,101,76,111,97,100,101,114,46,95,99,97,99, - 104,101,95,98,121,116,101,99,111,100,101,183,4,0,0,115, - 33,0,0,0,128,0,228,15,25,152,43,211,15,38,136,4, - 216,15,19,143,125,137,125,152,93,168,68,184,4,136,125,211, - 15,61,208,8,61,114,28,0,0,0,114,107,0,0,0,114, - 155,1,0,0,99,3,0,0,0,0,0,0,0,1,0,0, - 0,7,0,0,0,3,0,0,0,243,14,2,0,0,151,0, - 116,1,0,0,0,0,0,0,0,0,124,1,171,1,0,0, - 0,0,0,0,92,2,0,0,125,4,125,5,103,0,125,6, - 124,4,114,56,116,3,0,0,0,0,0,0,0,0,124,4, - 171,1,0,0,0,0,0,0,115,45,116,1,0,0,0,0, - 0,0,0,0,124,4,171,1,0,0,0,0,0,0,92,2, - 0,0,125,4,125,7,124,6,106,5,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,7,171,1, - 0,0,0,0,0,0,1,0,124,4,114,12,116,3,0,0, + 0,0,0,0,0,0,0,0,0,0,124,1,106,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 107,40,0,0,120,1,114,25,1,0,124,0,106,2,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 124,1,106,2,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,107,40,0,0,83,0,114,77,0,0, + 0,169,2,218,9,95,95,99,108,97,115,115,95,95,114,203, + 0,0,0,169,2,114,190,0,0,0,218,5,111,116,104,101, + 114,115,2,0,0,0,32,32,114,10,0,0,0,218,6,95, + 95,101,113,95,95,122,17,70,105,108,101,76,111,97,100,101, + 114,46,95,95,101,113,95,95,139,4,0,0,243,44,0,0, + 0,128,0,216,16,20,151,14,145,14,160,37,167,47,161,47, + 209,16,49,242,0,1,17,48,216,16,20,151,13,145,13,160, + 21,167,30,161,30,209,16,47,240,3,1,9,49,114,28,0, + 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,3,0,0,0,243,88,0,0,0,151,0,116,1, + 0,0,0,0,0,0,0,0,124,0,106,2,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,1, + 0,0,0,0,0,0,116,1,0,0,0,0,0,0,0,0, + 124,0,106,4,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,171,1,0,0,0,0,0,0,122,12, + 0,0,83,0,114,77,0,0,0,169,3,218,4,104,97,115, + 104,114,188,0,0,0,114,68,0,0,0,169,1,114,190,0, + 0,0,115,1,0,0,0,32,114,10,0,0,0,218,8,95, + 95,104,97,115,104,95,95,122,19,70,105,108,101,76,111,97, + 100,101,114,46,95,95,104,97,115,104,95,95,143,4,0,0, + 243,29,0,0,0,128,0,220,15,19,144,68,151,73,145,73, + 139,127,164,20,160,100,167,105,161,105,163,31,209,15,48,208, + 8,48,114,28,0,0,0,99,2,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,3,0,0,0,243,42,0,0, + 0,149,1,151,0,116,0,0,0,0,0,0,0,0,0,116, + 2,0,0,0,0,0,0,0,0,124,0,141,11,0,0,124, + 1,171,1,0,0,0,0,0,0,83,0,41,1,122,100,76, + 111,97,100,32,97,32,109,111,100,117,108,101,32,102,114,111, + 109,32,97,32,102,105,108,101,46,10,10,32,32,32,32,32, + 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, + 115,101,32,101,120,101,99,95,109,111,100,117,108,101,40,41, + 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,32, + 32,32,32,41,3,218,5,115,117,112,101,114,114,120,1,0, + 0,114,85,1,0,0,41,3,114,190,0,0,0,114,43,1, + 0,0,114,124,1,0,0,115,3,0,0,0,32,32,128,114, + 10,0,0,0,114,85,1,0,0,122,22,70,105,108,101,76, + 111,97,100,101,114,46,108,111,97,100,95,109,111,100,117,108, + 101,146,4,0,0,115,23,0,0,0,248,128,0,244,20,0, + 16,21,148,90,160,20,209,15,50,176,56,211,15,60,208,8, + 60,114,28,0,0,0,99,2,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,3,0,0,0,243,26,0,0,0, + 151,0,124,0,106,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,83,0,169,1,122,58,82,101, + 116,117,114,110,32,116,104,101,32,112,97,116,104,32,116,111, + 32,116,104,101,32,115,111,117,114,99,101,32,102,105,108,101, + 32,97,115,32,102,111,117,110,100,32,98,121,32,116,104,101, + 32,102,105,110,100,101,114,46,114,84,0,0,0,114,84,1, + 0,0,115,2,0,0,0,32,32,114,10,0,0,0,114,8, + 1,0,0,122,23,70,105,108,101,76,111,97,100,101,114,46, + 103,101,116,95,102,105,108,101,110,97,109,101,158,4,0,0, + 243,14,0,0,0,128,0,240,6,0,16,20,143,121,137,121, + 208,8,24,114,28,0,0,0,99,2,0,0,0,0,0,0, + 0,0,0,0,0,6,0,0,0,3,0,0,0,243,46,1, + 0,0,151,0,116,1,0,0,0,0,0,0,0,0,124,0, + 116,2,0,0,0,0,0,0,0,0,116,4,0,0,0,0, + 0,0,0,0,102,2,171,2,0,0,0,0,0,0,114,56, + 116,7,0,0,0,0,0,0,0,0,106,8,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,11, + 0,0,0,0,0,0,0,0,124,1,171,1,0,0,0,0, + 0,0,171,1,0,0,0,0,0,0,53,0,125,2,124,2, + 106,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,171,0,0,0,0,0,0,0,99,2,100,1, + 100,1,100,1,171,2,0,0,0,0,0,0,1,0,83,0, + 116,7,0,0,0,0,0,0,0,0,106,14,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,1, + 100,2,171,2,0,0,0,0,0,0,53,0,125,2,124,2, + 106,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,171,0,0,0,0,0,0,0,99,2,100,1, + 100,1,100,1,171,2,0,0,0,0,0,0,1,0,83,0, + 35,0,49,0,115,1,119,2,1,0,89,0,1,0,1,0, + 121,1,120,3,89,0,119,1,35,0,49,0,115,1,119,2, + 1,0,89,0,1,0,1,0,121,1,120,3,89,0,119,1, + 41,3,122,39,82,101,116,117,114,110,32,116,104,101,32,100, + 97,116,97,32,102,114,111,109,32,112,97,116,104,32,97,115, + 32,114,97,119,32,98,121,116,101,115,46,78,218,1,114,41, + 8,114,233,0,0,0,114,87,1,0,0,218,19,69,120,116, + 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, + 114,114,0,0,0,218,9,111,112,101,110,95,99,111,100,101, + 114,137,0,0,0,218,4,114,101,97,100,114,115,0,0,0, + 41,3,114,190,0,0,0,114,68,0,0,0,114,120,0,0, + 0,115,3,0,0,0,32,32,32,114,10,0,0,0,114,99, + 1,0,0,122,19,70,105,108,101,76,111,97,100,101,114,46, + 103,101,116,95,100,97,116,97,163,4,0,0,115,106,0,0, + 0,128,0,228,11,21,144,100,156,92,212,43,62,208,28,63, + 212,11,64,220,17,20,151,29,145,29,156,115,160,52,155,121, + 212,17,41,168,84,216,23,27,151,121,145,121,147,123,247,3, + 0,18,42,209,17,41,244,6,0,18,21,151,26,145,26,152, + 68,160,35,212,17,38,168,36,216,23,27,151,121,145,121,147, + 123,247,3,0,18,39,209,17,38,247,7,0,18,42,208,17, + 41,250,247,6,0,18,39,208,17,38,250,115,23,0,0,0, + 181,16,65,63,3,193,37,16,66,11,3,193,63,5,66,8, + 7,194,11,5,66,20,7,99,2,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,3,0,0,0,243,30,0,0, + 0,151,0,100,1,100,2,108,0,109,1,125,2,1,0,2, + 0,124,2,124,0,171,1,0,0,0,0,0,0,83,0,41, + 3,78,114,1,0,0,0,41,1,218,10,70,105,108,101,82, + 101,97,100,101,114,41,2,218,17,105,109,112,111,114,116,108, + 105,98,46,114,101,97,100,101,114,115,114,146,1,0,0,41, + 3,114,190,0,0,0,114,80,1,0,0,114,146,1,0,0, + 115,3,0,0,0,32,32,32,114,10,0,0,0,218,19,103, + 101,116,95,114,101,115,111,117,114,99,101,95,114,101,97,100, + 101,114,122,30,70,105,108,101,76,111,97,100,101,114,46,103, + 101,116,95,114,101,115,111,117,114,99,101,95,114,101,97,100, + 101,114,172,4,0,0,115,16,0,0,0,128,0,229,8,48, + 217,15,25,152,36,211,15,31,208,8,31,114,28,0,0,0, + 41,13,114,197,0,0,0,114,196,0,0,0,114,198,0,0, + 0,114,199,0,0,0,114,68,1,0,0,114,127,1,0,0, + 114,133,1,0,0,114,209,0,0,0,114,85,1,0,0,114, + 8,1,0,0,114,99,1,0,0,114,148,1,0,0,218,13, + 95,95,99,108,97,115,115,99,101,108,108,95,95,41,1,114, + 124,1,0,0,115,1,0,0,0,64,114,10,0,0,0,114, + 120,1,0,0,114,120,1,0,0,128,4,0,0,115,88,0, + 0,0,248,132,0,241,4,1,5,34,242,6,4,5,25,242, + 12,2,5,49,242,8,1,5,49,240,6,0,6,17,243,2, + 9,5,61,243,3,0,6,17,240,2,9,5,61,240,22,0, + 6,17,241,2,2,5,25,243,3,0,6,17,240,2,2,5, + 25,242,8,7,5,35,240,18,0,6,17,241,2,2,5,32, + 243,3,0,6,17,244,2,2,5,32,114,28,0,0,0,114, + 120,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,0,0,0,0,243,40,0,0,0,151,0, + 101,0,90,1,100,0,90,2,100,1,90,3,100,2,132,0, + 90,4,100,3,132,0,90,5,100,4,100,5,156,1,100,6, + 132,2,90,6,121,7,41,8,218,16,83,111,117,114,99,101, + 70,105,108,101,76,111,97,100,101,114,122,62,67,111,110,99, + 114,101,116,101,32,105,109,112,108,101,109,101,110,116,97,116, + 105,111,110,32,111,102,32,83,111,117,114,99,101,76,111,97, + 100,101,114,32,117,115,105,110,103,32,116,104,101,32,102,105, + 108,101,32,115,121,115,116,101,109,46,99,2,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,243, + 74,0,0,0,151,0,116,1,0,0,0,0,0,0,0,0, + 124,1,171,1,0,0,0,0,0,0,125,2,124,2,106,2, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,124,2,106,4,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,100,1,156,2,83,0,41,2, + 122,33,82,101,116,117,114,110,32,116,104,101,32,109,101,116, + 97,100,97,116,97,32,102,111,114,32,116,104,101,32,112,97, + 116,104,46,41,2,114,243,0,0,0,114,109,1,0,0,41, + 3,114,85,0,0,0,218,8,115,116,95,109,116,105,109,101, + 218,7,115,116,95,115,105,122,101,41,3,114,190,0,0,0, + 114,68,0,0,0,114,116,1,0,0,115,3,0,0,0,32, + 32,32,114,10,0,0,0,114,92,1,0,0,122,27,83,111, + 117,114,99,101,70,105,108,101,76,111,97,100,101,114,46,112, + 97,116,104,95,115,116,97,116,115,182,4,0,0,115,31,0, + 0,0,128,0,228,13,23,152,4,211,13,29,136,2,216,25, + 27,159,27,153,27,168,98,175,106,169,106,209,15,57,208,8, + 57,114,28,0,0,0,99,4,0,0,0,0,0,0,0,0, + 0,0,0,5,0,0,0,3,0,0,0,243,64,0,0,0, + 151,0,116,1,0,0,0,0,0,0,0,0,124,1,171,1, + 0,0,0,0,0,0,125,4,124,0,106,3,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,2, + 124,3,124,4,172,1,171,3,0,0,0,0,0,0,83,0, + 41,2,78,169,1,218,5,95,109,111,100,101,41,2,114,184, + 0,0,0,114,94,1,0,0,41,5,114,190,0,0,0,114, + 177,0,0,0,114,174,0,0,0,114,48,0,0,0,114,89, + 0,0,0,115,5,0,0,0,32,32,32,32,32,114,10,0, + 0,0,114,96,1,0,0,122,32,83,111,117,114,99,101,70, + 105,108,101,76,111,97,100,101,114,46,95,99,97,99,104,101, + 95,98,121,116,101,99,111,100,101,187,4,0,0,115,33,0, + 0,0,128,0,228,15,25,152,43,211,15,38,136,4,216,15, + 19,143,125,137,125,152,93,168,68,184,4,136,125,211,15,61, + 208,8,61,114,28,0,0,0,114,107,0,0,0,114,156,1, + 0,0,99,3,0,0,0,0,0,0,0,1,0,0,0,7, + 0,0,0,3,0,0,0,243,14,2,0,0,151,0,116,1, + 0,0,0,0,0,0,0,0,124,1,171,1,0,0,0,0, + 0,0,92,2,0,0,125,4,125,5,103,0,125,6,124,4, + 114,56,116,3,0,0,0,0,0,0,0,0,124,4,171,1, + 0,0,0,0,0,0,115,45,116,1,0,0,0,0,0,0, + 0,0,124,4,171,1,0,0,0,0,0,0,92,2,0,0, + 125,4,125,7,124,6,106,5,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,7,171,1,0,0, + 0,0,0,0,1,0,124,4,114,12,116,3,0,0,0,0, + 0,0,0,0,124,4,171,1,0,0,0,0,0,0,115,1, + 140,45,116,7,0,0,0,0,0,0,0,0,124,6,171,1, + 0,0,0,0,0,0,68,0,93,36,0,0,125,7,116,9, + 0,0,0,0,0,0,0,0,124,4,124,7,171,2,0,0, + 0,0,0,0,125,4,9,0,116,11,0,0,0,0,0,0, + 0,0,106,12,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,124,4,171,1,0,0,0,0,0,0, - 115,1,140,45,116,7,0,0,0,0,0,0,0,0,124,6, - 171,1,0,0,0,0,0,0,68,0,93,36,0,0,125,7, - 116,9,0,0,0,0,0,0,0,0,124,4,124,7,171,2, - 0,0,0,0,0,0,125,4,9,0,116,11,0,0,0,0, - 0,0,0,0,106,12,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,4,171,1,0,0,0,0, - 0,0,1,0,140,38,4,0,9,0,116,23,0,0,0,0, - 0,0,0,0,124,1,124,2,124,3,171,3,0,0,0,0, - 0,0,1,0,116,18,0,0,0,0,0,0,0,0,106,21, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,100,3,124,1,171,2,0,0,0,0,0,0,1,0, - 121,2,35,0,116,14,0,0,0,0,0,0,0,0,36,0, - 114,3,1,0,89,0,140,87,116,16,0,0,0,0,0,0, - 0,0,36,0,114,34,125,8,116,18,0,0,0,0,0,0, - 0,0,106,21,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,100,1,124,4,124,8,171,3,0,0, - 0,0,0,0,1,0,89,0,100,2,125,8,126,8,1,0, - 121,2,100,2,125,8,126,8,119,1,119,0,120,3,89,0, - 119,1,35,0,116,16,0,0,0,0,0,0,0,0,36,0, - 114,33,125,8,116,18,0,0,0,0,0,0,0,0,106,21, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,100,1,124,1,124,8,171,3,0,0,0,0,0,0, - 1,0,89,0,100,2,125,8,126,8,121,2,100,2,125,8, - 126,8,119,1,119,0,120,3,89,0,119,1,41,4,122,27, - 87,114,105,116,101,32,98,121,116,101,115,32,100,97,116,97, - 32,116,111,32,97,32,102,105,108,101,46,122,27,99,111,117, - 108,100,32,110,111,116,32,99,114,101,97,116,101,32,123,33, - 114,125,58,32,123,33,114,125,78,122,12,99,114,101,97,116, - 101,100,32,123,33,114,125,41,12,114,81,0,0,0,114,96, - 0,0,0,114,64,0,0,0,218,8,114,101,118,101,114,115, - 101,100,114,72,0,0,0,114,23,0,0,0,218,5,109,107, - 100,105,114,218,15,70,105,108,101,69,120,105,115,116,115,69, - 114,114,111,114,114,87,0,0,0,114,207,0,0,0,114,215, - 0,0,0,114,121,0,0,0,41,9,114,189,0,0,0,114, - 68,0,0,0,114,48,0,0,0,114,156,1,0,0,218,6, - 112,97,114,101,110,116,114,151,0,0,0,114,66,0,0,0, - 114,74,0,0,0,114,31,1,0,0,115,9,0,0,0,32, - 32,32,32,32,32,32,32,32,114,10,0,0,0,114,93,1, - 0,0,122,25,83,111,117,114,99,101,70,105,108,101,76,111, - 97,100,101,114,46,115,101,116,95,100,97,116,97,188,4,0, - 0,115,251,0,0,0,128,0,228,27,38,160,116,211,27,44, - 209,8,24,136,6,144,8,216,21,23,136,10,225,14,20,156, - 91,168,22,212,29,48,220,27,38,160,118,211,27,46,137,76, - 136,70,144,68,216,12,22,215,12,29,209,12,29,152,100,212, - 12,35,241,5,0,15,21,156,91,168,22,213,29,48,244,8, - 0,21,29,152,90,214,20,40,136,68,220,21,31,160,6,168, - 4,211,21,45,136,70,240,2,10,13,23,220,16,19,151,9, - 145,9,152,38,213,16,33,240,7,0,21,41,240,26,6,9, - 45,220,12,25,152,36,160,4,160,101,212,12,44,220,12,22, - 215,12,39,209,12,39,168,14,184,4,213,12,61,248,244,23, - 0,20,35,242,0,2,13,25,225,16,24,220,19,26,242,0, - 5,13,23,244,6,0,17,27,215,16,43,209,16,43,208,44, - 73,216,44,50,176,67,244,3,1,17,57,229,16,22,251,240, - 11,5,13,23,251,244,18,0,16,23,242,0,3,9,45,228, - 12,22,215,12,39,209,12,39,208,40,69,192,116,216,40,43, - 247,3,1,13,45,241,0,1,13,45,251,240,5,3,9,45, - 250,115,54,0,0,0,193,38,21,66,34,2,193,62,35,67, - 26,0,194,34,9,67,23,5,194,45,8,67,23,5,194,53, - 23,67,18,5,195,18,5,67,23,5,195,26,9,68,4,3, - 195,35,23,67,63,3,195,63,5,68,4,3,78,41,7,114, - 196,0,0,0,114,195,0,0,0,114,197,0,0,0,114,198, - 0,0,0,114,91,1,0,0,114,95,1,0,0,114,93,1, - 0,0,114,30,0,0,0,114,28,0,0,0,114,10,0,0, - 0,114,150,1,0,0,114,150,1,0,0,174,4,0,0,115, - 25,0,0,0,132,0,225,4,72,242,4,3,5,58,242,10, - 3,5,62,240,10,0,45,50,245,0,28,5,45,114,28,0, - 0,0,114,150,1,0,0,99,0,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,0,0,0,0,243,28,0,0, - 0,151,0,101,0,90,1,100,0,90,2,100,1,90,3,100, - 2,132,0,90,4,100,3,132,0,90,5,121,4,41,5,218, - 20,83,111,117,114,99,101,108,101,115,115,70,105,108,101,76, - 111,97,100,101,114,122,45,76,111,97,100,101,114,32,119,104, - 105,99,104,32,104,97,110,100,108,101,115,32,115,111,117,114, - 99,101,108,101,115,115,32,102,105,108,101,32,105,109,112,111, - 114,116,115,46,99,2,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,3,0,0,0,243,158,0,0,0,151,0, - 124,0,106,1,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,1,171,1,0,0,0,0,0,0, - 125,2,124,0,106,3,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,2,171,1,0,0,0,0, - 0,0,125,3,124,1,124,2,100,1,156,2,125,4,116,5, - 0,0,0,0,0,0,0,0,124,3,124,1,124,4,171,3, - 0,0,0,0,0,0,1,0,116,7,0,0,0,0,0,0, - 0,0,116,9,0,0,0,0,0,0,0,0,124,3,171,1, - 0,0,0,0,0,0,100,2,100,0,26,0,124,1,124,2, - 172,3,171,3,0,0,0,0,0,0,83,0,41,4,78,114, - 229,0,0,0,114,211,0,0,0,41,2,114,187,0,0,0, - 114,173,0,0,0,41,5,114,7,1,0,0,114,98,1,0, - 0,114,219,0,0,0,114,237,0,0,0,114,109,1,0,0, - 41,5,114,189,0,0,0,114,42,1,0,0,114,68,0,0, - 0,114,48,0,0,0,114,217,0,0,0,115,5,0,0,0, - 32,32,32,32,32,114,10,0,0,0,114,76,1,0,0,122, - 29,83,111,117,114,99,101,108,101,115,115,70,105,108,101,76, - 111,97,100,101,114,46,103,101,116,95,99,111,100,101,223,4, - 0,0,115,95,0,0,0,128,0,216,15,19,215,15,32,209, - 15,32,160,24,211,15,42,136,4,216,15,19,143,125,137,125, - 152,84,211,15,34,136,4,240,8,0,21,29,216,20,24,241, - 5,3,23,10,136,11,244,8,0,9,22,144,100,152,72,160, - 107,212,8,50,220,15,32,220,12,22,144,116,211,12,28,152, - 82,152,83,208,12,33,216,17,25,216,26,30,244,7,4,16, - 10,240,0,4,9,10,114,28,0,0,0,99,2,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 243,4,0,0,0,151,0,121,1,41,2,122,39,82,101,116, - 117,114,110,32,78,111,110,101,32,97,115,32,116,104,101,114, - 101,32,105,115,32,110,111,32,115,111,117,114,99,101,32,99, - 111,100,101,46,78,114,30,0,0,0,114,83,1,0,0,115, - 2,0,0,0,32,32,114,10,0,0,0,114,99,1,0,0, - 122,31,83,111,117,114,99,101,108,101,115,115,70,105,108,101, - 76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,99, - 101,239,4,0,0,243,5,0,0,0,128,0,224,15,19,114, - 28,0,0,0,78,41,6,114,196,0,0,0,114,195,0,0, - 0,114,197,0,0,0,114,198,0,0,0,114,76,1,0,0, - 114,99,1,0,0,114,30,0,0,0,114,28,0,0,0,114, - 10,0,0,0,114,163,1,0,0,114,163,1,0,0,219,4, - 0,0,115,15,0,0,0,132,0,225,4,55,242,4,14,5, - 10,243,32,2,5,20,114,28,0,0,0,114,163,1,0,0, - 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,0,0,0,0,243,80,0,0,0,151,0,101,0,90,1, - 100,0,90,2,100,1,90,3,100,2,132,0,90,4,100,3, - 132,0,90,5,100,4,132,0,90,6,100,5,132,0,90,7, - 100,6,132,0,90,8,100,7,132,0,90,9,100,8,132,0, - 90,10,100,9,132,0,90,11,101,12,100,10,132,0,171,0, - 0,0,0,0,0,0,90,13,121,11,41,12,114,141,1,0, - 0,122,93,76,111,97,100,101,114,32,102,111,114,32,101,120, - 116,101,110,115,105,111,110,32,109,111,100,117,108,101,115,46, - 10,10,32,32,32,32,84,104,101,32,99,111,110,115,116,114, - 117,99,116,111,114,32,105,115,32,100,101,115,105,103,110,101, - 100,32,116,111,32,119,111,114,107,32,119,105,116,104,32,70, - 105,108,101,70,105,110,100,101,114,46,10,10,32,32,32,32, - 99,3,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,3,0,0,0,243,32,0,0,0,151,0,124,1,124,0, - 95,0,0,0,0,0,0,0,0,0,124,2,124,0,95,1, - 0,0,0,0,0,0,0,0,121,0,114,77,0,0,0,114, - 229,0,0,0,41,3,114,189,0,0,0,114,187,0,0,0, - 114,68,0,0,0,115,3,0,0,0,32,32,32,114,10,0, - 0,0,114,67,1,0,0,122,28,69,120,116,101,110,115,105, - 111,110,70,105,108,101,76,111,97,100,101,114,46,95,95,105, - 110,105,116,95,95,252,4,0,0,115,16,0,0,0,128,0, - 216,20,24,136,4,140,9,216,20,24,136,4,141,9,114,28, - 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,3,0,0,0,243,106,0,0,0,151,0,124, - 0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,124,1,106,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,107,40,0,0,120, - 1,114,25,1,0,124,0,106,2,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,1,106,2,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,107,40,0,0,83,0,114,77,0,0,0,114,122,1,0, - 0,114,124,1,0,0,115,2,0,0,0,32,32,114,10,0, - 0,0,114,126,1,0,0,122,26,69,120,116,101,110,115,105, - 111,110,70,105,108,101,76,111,97,100,101,114,46,95,95,101, - 113,95,95,0,5,0,0,114,127,1,0,0,114,28,0,0, - 0,99,1,0,0,0,0,0,0,0,0,0,0,0,4,0, - 0,0,3,0,0,0,243,88,0,0,0,151,0,116,1,0, - 0,0,0,0,0,0,0,124,0,106,2,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,171,1,0, - 0,0,0,0,0,116,1,0,0,0,0,0,0,0,0,124, - 0,106,4,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,171,1,0,0,0,0,0,0,122,12,0, - 0,83,0,114,77,0,0,0,114,129,1,0,0,114,131,1, - 0,0,115,1,0,0,0,32,114,10,0,0,0,114,132,1, - 0,0,122,28,69,120,116,101,110,115,105,111,110,70,105,108, - 101,76,111,97,100,101,114,46,95,95,104,97,115,104,95,95, - 4,5,0,0,114,133,1,0,0,114,28,0,0,0,99,2, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,3, - 0,0,0,243,164,0,0,0,151,0,116,0,0,0,0,0, - 0,0,0,0,106,3,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,116,4,0,0,0,0,0,0, - 0,0,106,6,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,1,171,2,0,0,0,0,0,0, - 125,2,116,0,0,0,0,0,0,0,0,0,106,9,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 100,1,124,1,106,10,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,0,106,12,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,3, - 0,0,0,0,0,0,1,0,124,2,83,0,41,2,122,40, - 67,114,101,97,116,101,32,97,110,32,117,110,105,110,105,116, - 105,97,108,105,122,101,100,32,101,120,116,101,110,115,105,111, - 110,32,109,111,100,117,108,101,122,38,101,120,116,101,110,115, - 105,111,110,32,109,111,100,117,108,101,32,123,33,114,125,32, - 108,111,97,100,101,100,32,102,114,111,109,32,123,33,114,125, - 41,7,114,207,0,0,0,114,77,1,0,0,114,234,0,0, - 0,218,14,99,114,101,97,116,101,95,100,121,110,97,109,105, - 99,114,215,0,0,0,114,187,0,0,0,114,68,0,0,0, - 41,3,114,189,0,0,0,114,16,1,0,0,114,79,1,0, - 0,115,3,0,0,0,32,32,32,114,10,0,0,0,114,73, - 1,0,0,122,33,69,120,116,101,110,115,105,111,110,70,105, - 108,101,76,111,97,100,101,114,46,99,114,101,97,116,101,95, - 109,111,100,117,108,101,7,5,0,0,115,64,0,0,0,128, - 0,228,17,27,215,17,53,209,17,53,220,12,16,215,12,31, - 209,12,31,160,20,243,3,1,18,39,136,6,228,8,18,215, - 8,35,209,8,35,208,36,76,216,25,29,159,25,153,25,160, - 68,167,73,161,73,244,3,1,9,47,224,15,21,136,13,114, - 28,0,0,0,99,2,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,3,0,0,0,243,162,0,0,0,151,0, - 116,0,0,0,0,0,0,0,0,0,106,3,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,4, - 0,0,0,0,0,0,0,0,106,6,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,1,171,2, - 0,0,0,0,0,0,1,0,116,0,0,0,0,0,0,0, - 0,0,106,9,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,100,1,124,0,106,10,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0, - 106,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,171,3,0,0,0,0,0,0,1,0,121,2, - 41,3,122,30,73,110,105,116,105,97,108,105,122,101,32,97, - 110,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, - 108,101,122,40,101,120,116,101,110,115,105,111,110,32,109,111, - 100,117,108,101,32,123,33,114,125,32,101,120,101,99,117,116, - 101,100,32,102,114,111,109,32,123,33,114,125,78,41,7,114, - 207,0,0,0,114,77,1,0,0,114,234,0,0,0,218,12, - 101,120,101,99,95,100,121,110,97,109,105,99,114,215,0,0, - 0,114,187,0,0,0,114,68,0,0,0,169,2,114,189,0, - 0,0,114,79,1,0,0,115,2,0,0,0,32,32,114,10, - 0,0,0,114,80,1,0,0,122,31,69,120,116,101,110,115, - 105,111,110,70,105,108,101,76,111,97,100,101,114,46,101,120, - 101,99,95,109,111,100,117,108,101,15,5,0,0,115,54,0, - 0,0,128,0,228,8,18,215,8,44,209,8,44,172,84,215, - 45,62,209,45,62,192,6,212,8,71,220,8,18,215,8,35, - 209,8,35,208,36,78,216,25,29,159,25,153,25,160,68,167, - 73,161,73,245,3,1,9,47,114,28,0,0,0,99,2,0, - 0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,0, - 0,0,243,100,0,0,0,135,2,151,0,116,1,0,0,0, + 1,0,140,38,4,0,9,0,116,23,0,0,0,0,0,0, + 0,0,124,1,124,2,124,3,171,3,0,0,0,0,0,0, + 1,0,116,18,0,0,0,0,0,0,0,0,106,21,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 100,3,124,1,171,2,0,0,0,0,0,0,1,0,121,2, + 35,0,116,14,0,0,0,0,0,0,0,0,36,0,114,3, + 1,0,89,0,140,87,116,16,0,0,0,0,0,0,0,0, + 36,0,114,34,125,8,116,18,0,0,0,0,0,0,0,0, + 106,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,100,1,124,4,124,8,171,3,0,0,0,0, + 0,0,1,0,89,0,100,2,125,8,126,8,1,0,121,2, + 100,2,125,8,126,8,119,1,119,0,120,3,89,0,119,1, + 35,0,116,16,0,0,0,0,0,0,0,0,36,0,114,33, + 125,8,116,18,0,0,0,0,0,0,0,0,106,21,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 100,1,124,1,124,8,171,3,0,0,0,0,0,0,1,0, + 89,0,100,2,125,8,126,8,121,2,100,2,125,8,126,8, + 119,1,119,0,120,3,89,0,119,1,41,4,122,27,87,114, + 105,116,101,32,98,121,116,101,115,32,100,97,116,97,32,116, + 111,32,97,32,102,105,108,101,46,122,27,99,111,117,108,100, + 32,110,111,116,32,99,114,101,97,116,101,32,123,33,114,125, + 58,32,123,33,114,125,78,122,12,99,114,101,97,116,101,100, + 32,123,33,114,125,41,12,114,81,0,0,0,114,96,0,0, + 0,114,64,0,0,0,218,8,114,101,118,101,114,115,101,100, + 114,72,0,0,0,114,23,0,0,0,218,5,109,107,100,105, + 114,218,15,70,105,108,101,69,120,105,115,116,115,69,114,114, + 111,114,114,87,0,0,0,114,208,0,0,0,114,216,0,0, + 0,114,122,0,0,0,41,9,114,190,0,0,0,114,68,0, + 0,0,114,48,0,0,0,114,157,1,0,0,218,6,112,97, + 114,101,110,116,114,152,0,0,0,114,66,0,0,0,114,74, + 0,0,0,114,32,1,0,0,115,9,0,0,0,32,32,32, + 32,32,32,32,32,32,114,10,0,0,0,114,94,1,0,0, + 122,25,83,111,117,114,99,101,70,105,108,101,76,111,97,100, + 101,114,46,115,101,116,95,100,97,116,97,192,4,0,0,115, + 251,0,0,0,128,0,228,27,38,160,116,211,27,44,209,8, + 24,136,6,144,8,216,21,23,136,10,225,14,20,156,91,168, + 22,212,29,48,220,27,38,160,118,211,27,46,137,76,136,70, + 144,68,216,12,22,215,12,29,209,12,29,152,100,212,12,35, + 241,5,0,15,21,156,91,168,22,213,29,48,244,8,0,21, + 29,152,90,214,20,40,136,68,220,21,31,160,6,168,4,211, + 21,45,136,70,240,2,10,13,23,220,16,19,151,9,145,9, + 152,38,213,16,33,240,7,0,21,41,240,26,6,9,45,220, + 12,25,152,36,160,4,160,101,212,12,44,220,12,22,215,12, + 39,209,12,39,168,14,184,4,213,12,61,248,244,23,0,20, + 35,242,0,2,13,25,225,16,24,220,19,26,242,0,5,13, + 23,244,6,0,17,27,215,16,43,209,16,43,208,44,73,216, + 44,50,176,67,244,3,1,17,57,229,16,22,251,240,11,5, + 13,23,251,244,18,0,16,23,242,0,3,9,45,228,12,22, + 215,12,39,209,12,39,208,40,69,192,116,216,40,43,247,3, + 1,13,45,241,0,1,13,45,251,240,5,3,9,45,250,115, + 54,0,0,0,193,38,21,66,34,2,193,62,35,67,26,0, + 194,34,9,67,23,5,194,45,8,67,23,5,194,53,23,67, + 18,5,195,18,5,67,23,5,195,26,9,68,4,3,195,35, + 23,67,63,3,195,63,5,68,4,3,78,41,7,114,197,0, + 0,0,114,196,0,0,0,114,198,0,0,0,114,199,0,0, + 0,114,92,1,0,0,114,96,1,0,0,114,94,1,0,0, + 114,30,0,0,0,114,28,0,0,0,114,10,0,0,0,114, + 151,1,0,0,114,151,1,0,0,178,4,0,0,115,25,0, + 0,0,132,0,225,4,72,242,4,3,5,58,242,10,3,5, + 62,240,10,0,45,50,245,0,28,5,45,114,28,0,0,0, + 114,151,1,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,0,0,0,0,243,28,0,0,0,151, + 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,132, + 0,90,4,100,3,132,0,90,5,121,4,41,5,218,20,83, + 111,117,114,99,101,108,101,115,115,70,105,108,101,76,111,97, + 100,101,114,122,45,76,111,97,100,101,114,32,119,104,105,99, + 104,32,104,97,110,100,108,101,115,32,115,111,117,114,99,101, + 108,101,115,115,32,102,105,108,101,32,105,109,112,111,114,116, + 115,46,99,2,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,3,0,0,0,243,158,0,0,0,151,0,124,0, + 106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,1,171,1,0,0,0,0,0,0,125,2, + 124,0,106,3,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,2,171,1,0,0,0,0,0,0, + 125,3,124,1,124,2,100,1,156,2,125,4,116,5,0,0, + 0,0,0,0,0,0,124,3,124,1,124,4,171,3,0,0, + 0,0,0,0,1,0,116,7,0,0,0,0,0,0,0,0, + 116,9,0,0,0,0,0,0,0,0,124,3,171,1,0,0, + 0,0,0,0,100,2,100,0,26,0,124,1,124,2,172,3, + 171,3,0,0,0,0,0,0,83,0,41,4,78,114,230,0, + 0,0,114,212,0,0,0,41,2,114,188,0,0,0,114,174, + 0,0,0,41,5,114,8,1,0,0,114,99,1,0,0,114, + 220,0,0,0,114,238,0,0,0,114,110,1,0,0,41,5, + 114,190,0,0,0,114,43,1,0,0,114,68,0,0,0,114, + 48,0,0,0,114,218,0,0,0,115,5,0,0,0,32,32, + 32,32,32,114,10,0,0,0,114,77,1,0,0,122,29,83, + 111,117,114,99,101,108,101,115,115,70,105,108,101,76,111,97, + 100,101,114,46,103,101,116,95,99,111,100,101,227,4,0,0, + 115,95,0,0,0,128,0,216,15,19,215,15,32,209,15,32, + 160,24,211,15,42,136,4,216,15,19,143,125,137,125,152,84, + 211,15,34,136,4,240,8,0,21,29,216,20,24,241,5,3, + 23,10,136,11,244,8,0,9,22,144,100,152,72,160,107,212, + 8,50,220,15,32,220,12,22,144,116,211,12,28,152,82,152, + 83,208,12,33,216,17,25,216,26,30,244,7,4,16,10,240, + 0,4,9,10,114,28,0,0,0,99,2,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,243,4, + 0,0,0,151,0,121,1,41,2,122,39,82,101,116,117,114, + 110,32,78,111,110,101,32,97,115,32,116,104,101,114,101,32, + 105,115,32,110,111,32,115,111,117,114,99,101,32,99,111,100, + 101,46,78,114,30,0,0,0,114,84,1,0,0,115,2,0, + 0,0,32,32,114,10,0,0,0,114,100,1,0,0,122,31, + 83,111,117,114,99,101,108,101,115,115,70,105,108,101,76,111, + 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,243, + 4,0,0,243,5,0,0,0,128,0,224,15,19,114,28,0, + 0,0,78,41,6,114,197,0,0,0,114,196,0,0,0,114, + 198,0,0,0,114,199,0,0,0,114,77,1,0,0,114,100, + 1,0,0,114,30,0,0,0,114,28,0,0,0,114,10,0, + 0,0,114,164,1,0,0,114,164,1,0,0,223,4,0,0, + 115,15,0,0,0,132,0,225,4,55,242,4,14,5,10,243, + 32,2,5,20,114,28,0,0,0,114,164,1,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0, + 0,0,0,243,80,0,0,0,151,0,101,0,90,1,100,0, + 90,2,100,1,90,3,100,2,132,0,90,4,100,3,132,0, + 90,5,100,4,132,0,90,6,100,5,132,0,90,7,100,6, + 132,0,90,8,100,7,132,0,90,9,100,8,132,0,90,10, + 100,9,132,0,90,11,101,12,100,10,132,0,171,0,0,0, + 0,0,0,0,90,13,121,11,41,12,114,142,1,0,0,122, + 93,76,111,97,100,101,114,32,102,111,114,32,101,120,116,101, + 110,115,105,111,110,32,109,111,100,117,108,101,115,46,10,10, + 32,32,32,32,84,104,101,32,99,111,110,115,116,114,117,99, + 116,111,114,32,105,115,32,100,101,115,105,103,110,101,100,32, + 116,111,32,119,111,114,107,32,119,105,116,104,32,70,105,108, + 101,70,105,110,100,101,114,46,10,10,32,32,32,32,99,3, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3, + 0,0,0,243,32,0,0,0,151,0,124,1,124,0,95,0, + 0,0,0,0,0,0,0,0,124,2,124,0,95,1,0,0, + 0,0,0,0,0,0,121,0,114,77,0,0,0,114,230,0, + 0,0,41,3,114,190,0,0,0,114,188,0,0,0,114,68, + 0,0,0,115,3,0,0,0,32,32,32,114,10,0,0,0, + 114,68,1,0,0,122,28,69,120,116,101,110,115,105,111,110, + 70,105,108,101,76,111,97,100,101,114,46,95,95,105,110,105, + 116,95,95,0,5,0,0,115,16,0,0,0,128,0,216,20, + 24,136,4,140,9,216,20,24,136,4,141,9,114,28,0,0, + 0,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,3,0,0,0,243,106,0,0,0,151,0,124,0,106, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,1,106,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,107,40,0,0,120,1,114, + 25,1,0,124,0,106,2,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,1,106,2,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,107, + 40,0,0,83,0,114,77,0,0,0,114,123,1,0,0,114, + 125,1,0,0,115,2,0,0,0,32,32,114,10,0,0,0, + 114,127,1,0,0,122,26,69,120,116,101,110,115,105,111,110, + 70,105,108,101,76,111,97,100,101,114,46,95,95,101,113,95, + 95,4,5,0,0,114,128,1,0,0,114,28,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, + 3,0,0,0,243,88,0,0,0,151,0,116,1,0,0,0, 0,0,0,0,0,124,0,106,2,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,171,1,0,0,0, - 0,0,0,100,1,25,0,0,0,138,2,116,5,0,0,0, - 0,0,0,0,0,136,2,102,1,100,2,132,8,116,6,0, - 0,0,0,0,0,0,0,68,0,171,0,0,0,0,0,0, - 0,171,1,0,0,0,0,0,0,83,0,41,3,122,49,82, - 101,116,117,114,110,32,84,114,117,101,32,105,102,32,116,104, - 101,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, - 108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,46, - 114,6,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,51,0,0,0,243,46,0,0,0,149, - 1,75,0,1,0,151,0,124,0,93,12,0,0,125,1,137, - 2,100,0,124,1,122,0,0,0,107,40,0,0,150,1,151, - 1,1,0,140,14,4,0,121,1,173,3,119,1,41,2,114, - 67,1,0,0,78,114,30,0,0,0,41,3,114,8,0,0, - 0,218,6,115,117,102,102,105,120,218,9,102,105,108,101,95, - 110,97,109,101,115,3,0,0,0,32,32,128,114,10,0,0, - 0,114,11,0,0,0,122,49,69,120,116,101,110,115,105,111, - 110,70,105,108,101,76,111,97,100,101,114,46,105,115,95,112, - 97,99,107,97,103,101,46,60,108,111,99,97,108,115,62,46, - 60,103,101,110,101,120,112,114,62,24,5,0,0,115,35,0, - 0,0,248,232,0,248,128,0,240,0,1,19,53,217,33,51, - 144,118,240,3,0,20,29,160,10,168,86,209,32,51,213,19, - 51,217,33,51,249,115,4,0,0,0,131,18,21,1,41,4, - 114,81,0,0,0,114,68,0,0,0,218,3,97,110,121,114, - 61,1,0,0,41,3,114,189,0,0,0,114,42,1,0,0, - 114,179,1,0,0,115,3,0,0,0,32,32,64,114,10,0, - 0,0,114,10,1,0,0,122,30,69,120,116,101,110,115,105, - 111,110,70,105,108,101,76,111,97,100,101,114,46,105,115,95, - 112,97,99,107,97,103,101,21,5,0,0,115,48,0,0,0, - 248,128,0,228,20,31,160,4,167,9,161,9,211,20,42,168, - 49,209,20,45,136,9,220,15,18,243,0,1,19,53,221,33, - 51,243,3,1,19,53,243,0,1,16,53,240,0,1,9,53, - 114,28,0,0,0,99,2,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,243,4,0,0,0,151, - 0,121,1,41,2,122,63,82,101,116,117,114,110,32,78,111, - 110,101,32,97,115,32,97,110,32,101,120,116,101,110,115,105, - 111,110,32,109,111,100,117,108,101,32,99,97,110,110,111,116, - 32,99,114,101,97,116,101,32,97,32,99,111,100,101,32,111, - 98,106,101,99,116,46,78,114,30,0,0,0,114,83,1,0, - 0,115,2,0,0,0,32,32,114,10,0,0,0,114,76,1, - 0,0,122,28,69,120,116,101,110,115,105,111,110,70,105,108, - 101,76,111,97,100,101,114,46,103,101,116,95,99,111,100,101, - 27,5,0,0,114,166,1,0,0,114,28,0,0,0,99,2, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,243,4,0,0,0,151,0,121,1,41,2,122,53, - 82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,101, - 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,115, - 32,104,97,118,101,32,110,111,32,115,111,117,114,99,101,32, - 99,111,100,101,46,78,114,30,0,0,0,114,83,1,0,0, - 115,2,0,0,0,32,32,114,10,0,0,0,114,99,1,0, - 0,122,30,69,120,116,101,110,115,105,111,110,70,105,108,101, - 76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,99, - 101,31,5,0,0,114,166,1,0,0,114,28,0,0,0,99, - 2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 3,0,0,0,243,26,0,0,0,151,0,124,0,106,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,83,0,114,137,1,0,0,114,84,0,0,0,114,83,1, - 0,0,115,2,0,0,0,32,32,114,10,0,0,0,114,7, - 1,0,0,122,32,69,120,116,101,110,115,105,111,110,70,105, - 108,101,76,111,97,100,101,114,46,103,101,116,95,102,105,108, - 101,110,97,109,101,35,5,0,0,114,138,1,0,0,114,28, - 0,0,0,78,41,14,114,196,0,0,0,114,195,0,0,0, - 114,197,0,0,0,114,198,0,0,0,114,67,1,0,0,114, - 126,1,0,0,114,132,1,0,0,114,73,1,0,0,114,80, - 1,0,0,114,10,1,0,0,114,76,1,0,0,114,99,1, - 0,0,114,208,0,0,0,114,7,1,0,0,114,30,0,0, - 0,114,28,0,0,0,114,10,0,0,0,114,141,1,0,0, - 114,141,1,0,0,244,4,0,0,115,67,0,0,0,132,0, - 241,4,4,5,8,242,12,2,5,25,242,8,2,5,49,242, - 8,1,5,49,242,6,6,5,22,242,16,4,5,47,242,12, - 4,5,53,242,12,2,5,20,242,8,2,5,20,240,8,0, - 6,17,241,2,2,5,25,243,3,0,6,17,241,2,2,5, - 25,114,28,0,0,0,114,141,1,0,0,99,0,0,0,0, - 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, - 243,86,0,0,0,151,0,101,0,90,1,100,0,90,2,100, - 1,90,3,100,2,90,4,100,3,132,0,90,5,100,4,132, - 0,90,6,100,5,132,0,90,7,100,6,132,0,90,8,100, - 7,132,0,90,9,100,8,132,0,90,10,100,9,132,0,90, - 11,100,10,132,0,90,12,100,11,132,0,90,13,100,12,132, - 0,90,14,100,13,132,0,90,15,121,14,41,15,218,14,95, - 78,97,109,101,115,112,97,99,101,80,97,116,104,97,38,1, - 0,0,82,101,112,114,101,115,101,110,116,115,32,97,32,110, - 97,109,101,115,112,97,99,101,32,112,97,99,107,97,103,101, - 39,115,32,112,97,116,104,46,32,32,73,116,32,117,115,101, - 115,32,116,104,101,32,109,111,100,117,108,101,32,110,97,109, - 101,10,32,32,32,32,116,111,32,102,105,110,100,32,105,116, - 115,32,112,97,114,101,110,116,32,109,111,100,117,108,101,44, - 32,97,110,100,32,102,114,111,109,32,116,104,101,114,101,32, - 105,116,32,108,111,111,107,115,32,117,112,32,116,104,101,32, - 112,97,114,101,110,116,39,115,10,32,32,32,32,95,95,112, - 97,116,104,95,95,46,32,32,87,104,101,110,32,116,104,105, - 115,32,99,104,97,110,103,101,115,44,32,116,104,101,32,109, - 111,100,117,108,101,39,115,32,111,119,110,32,112,97,116,104, - 32,105,115,32,114,101,99,111,109,112,117,116,101,100,44,10, - 32,32,32,32,117,115,105,110,103,32,112,97,116,104,95,102, - 105,110,100,101,114,46,32,32,70,111,114,32,116,111,112,45, - 108,101,118,101,108,32,109,111,100,117,108,101,115,44,32,116, - 104,101,32,112,97,114,101,110,116,32,109,111,100,117,108,101, - 39,115,32,112,97,116,104,10,32,32,32,32,105,115,32,115, - 121,115,46,112,97,116,104,46,114,1,0,0,0,99,4,0, - 0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,0, - 0,0,243,140,0,0,0,151,0,124,1,124,0,95,0,0, - 0,0,0,0,0,0,0,124,2,124,0,95,1,0,0,0, - 0,0,0,0,0,116,5,0,0,0,0,0,0,0,0,124, - 0,106,7,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,171,0,0,0,0,0,0,0,171,1,0, - 0,0,0,0,0,124,0,95,4,0,0,0,0,0,0,0, - 0,124,0,106,10,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,0,95,6,0,0,0,0,0, - 0,0,0,124,3,124,0,95,7,0,0,0,0,0,0,0, - 0,121,0,114,77,0,0,0,41,8,218,5,95,110,97,109, - 101,218,5,95,112,97,116,104,114,179,0,0,0,218,16,95, - 103,101,116,95,112,97,114,101,110,116,95,112,97,116,104,218, - 17,95,108,97,115,116,95,112,97,114,101,110,116,95,112,97, - 116,104,218,6,95,101,112,111,99,104,218,11,95,108,97,115, - 116,95,101,112,111,99,104,218,12,95,112,97,116,104,95,102, - 105,110,100,101,114,169,4,114,189,0,0,0,114,187,0,0, - 0,114,68,0,0,0,218,11,112,97,116,104,95,102,105,110, - 100,101,114,115,4,0,0,0,32,32,32,32,114,10,0,0, - 0,114,67,1,0,0,122,23,95,78,97,109,101,115,112,97, - 99,101,80,97,116,104,46,95,95,105,110,105,116,95,95,52, - 5,0,0,115,58,0,0,0,128,0,216,21,25,136,4,140, - 10,216,21,25,136,4,140,10,220,33,38,160,116,215,39,60, - 209,39,60,211,39,62,211,33,63,136,4,212,8,30,216,27, - 31,159,59,153,59,136,4,212,8,24,216,28,39,136,4,213, - 8,25,114,28,0,0,0,99,1,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,3,0,0,0,243,84,0,0, - 0,151,0,124,0,106,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,106,3,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,100,1,171, - 1,0,0,0,0,0,0,92,3,0,0,125,1,125,2,125, - 3,124,2,100,2,107,40,0,0,114,1,121,3,124,1,100, - 4,102,2,83,0,41,5,122,62,82,101,116,117,114,110,115, - 32,97,32,116,117,112,108,101,32,111,102,32,40,112,97,114, - 101,110,116,45,109,111,100,117,108,101,45,110,97,109,101,44, - 32,112,97,114,101,110,116,45,112,97,116,104,45,97,116,116, - 114,45,110,97,109,101,41,114,103,0,0,0,114,12,0,0, - 0,41,2,114,20,0,0,0,114,68,0,0,0,218,8,95, - 95,112,97,116,104,95,95,41,2,114,187,1,0,0,114,131, - 0,0,0,41,4,114,189,0,0,0,114,161,1,0,0,218, - 3,100,111,116,218,2,109,101,115,4,0,0,0,32,32,32, - 32,114,10,0,0,0,218,23,95,102,105,110,100,95,112,97, - 114,101,110,116,95,112,97,116,104,95,110,97,109,101,115,122, - 38,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 95,102,105,110,100,95,112,97,114,101,110,116,95,112,97,116, - 104,95,110,97,109,101,115,59,5,0,0,115,51,0,0,0, - 128,0,224,26,30,159,42,153,42,215,26,47,209,26,47,176, - 3,211,26,52,137,15,136,6,144,3,144,82,216,11,14,144, - 34,138,57,224,19,32,240,6,0,16,22,144,122,208,15,33, - 208,8,33,114,28,0,0,0,99,1,0,0,0,0,0,0, - 0,0,0,0,0,4,0,0,0,3,0,0,0,243,98,0, - 0,0,151,0,124,0,106,1,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,171,0,0,0,0,0, - 0,0,92,2,0,0,125,1,125,2,116,3,0,0,0,0, - 0,0,0,0,116,4,0,0,0,0,0,0,0,0,106,6, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,1,25,0,0,0,124,2,171,2,0,0,0,0, - 0,0,83,0,114,77,0,0,0,41,4,114,200,1,0,0, - 114,201,0,0,0,114,20,0,0,0,218,7,109,111,100,117, - 108,101,115,41,3,114,189,0,0,0,218,18,112,97,114,101, - 110,116,95,109,111,100,117,108,101,95,110,97,109,101,218,14, - 112,97,116,104,95,97,116,116,114,95,110,97,109,101,115,3, - 0,0,0,32,32,32,114,10,0,0,0,114,189,1,0,0, - 122,31,95,78,97,109,101,115,112,97,99,101,80,97,116,104, - 46,95,103,101,116,95,112,97,114,101,110,116,95,112,97,116, - 104,69,5,0,0,115,45,0,0,0,128,0,216,45,49,215, - 45,73,209,45,73,211,45,75,209,8,42,208,8,26,152,78, - 220,15,22,148,115,151,123,145,123,208,35,53,209,23,54,184, - 14,211,15,71,208,8,71,114,28,0,0,0,99,1,0,0, - 0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,0, - 0,243,90,1,0,0,151,0,116,1,0,0,0,0,0,0, - 0,0,124,0,106,3,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0, - 171,1,0,0,0,0,0,0,125,1,124,1,124,0,106,4, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,107,55,0,0,115,25,124,0,106,6,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0, - 106,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,107,55,0,0,114,95,124,0,106,11,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,0,106,12,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,1,171,2,0,0,0,0,0,0, - 125,2,124,2,129,41,124,2,106,14,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,128,29,124,2, - 106,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,114,17,124,2,106,16,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,0,95,9, - 0,0,0,0,0,0,0,0,124,1,124,0,95,2,0,0, - 0,0,0,0,0,0,124,0,106,6,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,0,95,4, - 0,0,0,0,0,0,0,0,124,0,106,18,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,0, - 114,77,0,0,0,41,10,114,179,0,0,0,114,189,1,0, - 0,114,190,1,0,0,114,191,1,0,0,114,192,1,0,0, - 114,193,1,0,0,114,187,1,0,0,114,4,1,0,0,114, - 5,1,0,0,114,188,1,0,0,41,3,114,189,0,0,0, - 218,11,112,97,114,101,110,116,95,112,97,116,104,114,16,1, - 0,0,115,3,0,0,0,32,32,32,114,10,0,0,0,218, - 12,95,114,101,99,97,108,99,117,108,97,116,101,122,27,95, - 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,114, - 101,99,97,108,99,117,108,97,116,101,73,5,0,0,115,143, - 0,0,0,128,0,228,22,27,152,68,215,28,49,209,28,49, - 211,28,51,211,22,52,136,11,216,11,22,152,36,215,26,48, - 209,26,48,210,11,48,176,68,183,75,177,75,192,52,215,67, - 83,209,67,83,210,52,83,216,19,23,215,19,36,209,19,36, - 160,84,167,90,161,90,176,27,211,19,61,136,68,240,6,0, - 16,20,208,15,31,160,68,167,75,161,75,208,36,55,216,19, - 23,215,19,50,210,19,50,216,33,37,215,33,64,209,33,64, - 144,68,148,74,216,37,48,136,68,212,12,34,216,31,35,159, - 123,153,123,136,68,212,12,28,216,15,19,143,122,137,122,208, - 8,25,114,28,0,0,0,99,1,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,3,0,0,0,243,52,0,0, - 0,151,0,116,1,0,0,0,0,0,0,0,0,124,0,106, - 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,171,0,0,0,0,0,0,0,171,1,0,0,0, - 0,0,0,83,0,114,77,0,0,0,41,2,218,4,105,116, - 101,114,114,207,1,0,0,114,131,1,0,0,115,1,0,0, - 0,32,114,10,0,0,0,218,8,95,95,105,116,101,114,95, - 95,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116, - 104,46,95,95,105,116,101,114,95,95,87,5,0,0,115,22, - 0,0,0,128,0,220,15,19,144,68,215,20,37,209,20,37, - 211,20,39,211,15,40,208,8,40,114,28,0,0,0,99,2, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3, - 0,0,0,243,40,0,0,0,151,0,124,0,106,1,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 171,0,0,0,0,0,0,0,124,1,25,0,0,0,83,0, - 114,77,0,0,0,169,1,114,207,1,0,0,41,2,114,189, - 0,0,0,218,5,105,110,100,101,120,115,2,0,0,0,32, - 32,114,10,0,0,0,218,11,95,95,103,101,116,105,116,101, - 109,95,95,122,26,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,46,95,95,103,101,116,105,116,101,109,95,95,90, - 5,0,0,115,22,0,0,0,128,0,216,15,19,215,15,32, - 209,15,32,211,15,34,160,53,209,15,41,208,8,41,114,28, - 0,0,0,99,3,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,3,0,0,0,243,34,0,0,0,151,0,124, - 2,124,0,106,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,1,60,0,0,0,121,0,114, - 77,0,0,0,169,1,114,188,1,0,0,41,3,114,189,0, - 0,0,114,213,1,0,0,114,68,0,0,0,115,3,0,0, - 0,32,32,32,114,10,0,0,0,218,11,95,95,115,101,116, - 105,116,101,109,95,95,122,26,95,78,97,109,101,115,112,97, - 99,101,80,97,116,104,46,95,95,115,101,116,105,116,101,109, - 95,95,93,5,0,0,115,16,0,0,0,128,0,216,28,32, - 136,4,143,10,137,10,144,53,210,8,25,114,28,0,0,0, - 99,1,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,3,0,0,0,243,52,0,0,0,151,0,116,1,0,0, - 0,0,0,0,0,0,124,0,106,3,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,171,0,0,0, - 0,0,0,0,171,1,0,0,0,0,0,0,83,0,114,77, - 0,0,0,41,2,114,7,0,0,0,114,207,1,0,0,114, - 131,1,0,0,115,1,0,0,0,32,114,10,0,0,0,218, - 7,95,95,108,101,110,95,95,122,22,95,78,97,109,101,115, - 112,97,99,101,80,97,116,104,46,95,95,108,101,110,95,95, - 96,5,0,0,115,22,0,0,0,128,0,220,15,18,144,52, - 215,19,36,209,19,36,211,19,38,211,15,39,208,8,39,114, - 28,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,3,0,0,0,243,34,0,0,0,151,0, - 100,1,124,0,106,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,155,2,100,2,157,3,83,0, - 41,3,78,122,15,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,40,218,1,41,114,216,1,0,0,114,131,1,0, - 0,115,1,0,0,0,32,114,10,0,0,0,218,8,95,95, - 114,101,112,114,95,95,122,23,95,78,97,109,101,115,112,97, - 99,101,80,97,116,104,46,95,95,114,101,112,114,95,95,99, - 5,0,0,115,21,0,0,0,128,0,216,17,32,160,20,167, - 26,161,26,160,14,168,97,208,15,48,208,8,48,114,28,0, - 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,3,0,0,0,243,38,0,0,0,151,0,124,1, - 124,0,106,1,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,171,0,0,0,0,0,0,0,118,0, - 83,0,114,77,0,0,0,114,212,1,0,0,169,2,114,189, - 0,0,0,218,4,105,116,101,109,115,2,0,0,0,32,32, - 114,10,0,0,0,218,12,95,95,99,111,110,116,97,105,110, - 115,95,95,122,27,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,46,95,95,99,111,110,116,97,105,110,115,95,95, - 102,5,0,0,115,22,0,0,0,128,0,216,15,19,144,116, - 215,23,40,209,23,40,211,23,42,208,15,42,208,8,42,114, - 28,0,0,0,99,2,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,3,0,0,0,243,58,0,0,0,151,0, - 124,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,106,3,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,1,171,1,0,0, - 0,0,0,0,1,0,121,0,114,77,0,0,0,41,2,114, - 188,1,0,0,114,64,0,0,0,114,224,1,0,0,115,2, - 0,0,0,32,32,114,10,0,0,0,114,64,0,0,0,122, - 21,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 97,112,112,101,110,100,105,5,0,0,115,20,0,0,0,128, - 0,216,8,12,143,10,137,10,215,8,25,209,8,25,152,36, - 213,8,31,114,28,0,0,0,78,41,16,114,196,0,0,0, - 114,195,0,0,0,114,197,0,0,0,114,198,0,0,0,114, - 191,1,0,0,114,67,1,0,0,114,200,1,0,0,114,189, - 1,0,0,114,207,1,0,0,114,210,1,0,0,114,214,1, - 0,0,114,217,1,0,0,114,219,1,0,0,114,222,1,0, - 0,114,226,1,0,0,114,64,0,0,0,114,30,0,0,0, - 114,28,0,0,0,114,10,0,0,0,114,185,1,0,0,114, - 185,1,0,0,41,5,0,0,115,70,0,0,0,132,0,241, - 2,4,5,20,240,16,0,14,15,128,70,242,4,5,5,40, - 242,14,8,5,34,242,20,2,5,72,1,242,8,12,5,26, - 242,28,1,5,41,242,6,1,5,42,242,6,1,5,33,242, - 6,1,5,40,242,6,1,5,49,242,6,1,5,43,243,6, - 1,5,32,114,28,0,0,0,114,185,1,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, - 0,0,243,60,0,0,0,151,0,101,0,90,1,100,0,90, - 2,100,1,132,0,90,3,100,2,132,0,90,4,100,3,132, - 0,90,5,100,4,132,0,90,6,100,5,132,0,90,7,100, - 6,132,0,90,8,100,7,132,0,90,9,100,8,132,0,90, - 10,121,9,41,10,218,15,78,97,109,101,115,112,97,99,101, - 76,111,97,100,101,114,99,4,0,0,0,0,0,0,0,0, - 0,0,0,5,0,0,0,3,0,0,0,243,40,0,0,0, - 151,0,116,1,0,0,0,0,0,0,0,0,124,1,124,2, - 124,3,171,3,0,0,0,0,0,0,124,0,95,1,0,0, - 0,0,0,0,0,0,121,0,114,77,0,0,0,41,2,114, - 185,1,0,0,114,188,1,0,0,114,194,1,0,0,115,4, - 0,0,0,32,32,32,32,114,10,0,0,0,114,67,1,0, - 0,122,24,78,97,109,101,115,112,97,99,101,76,111,97,100, - 101,114,46,95,95,105,110,105,116,95,95,113,5,0,0,115, - 18,0,0,0,128,0,220,21,35,160,68,168,36,176,11,211, - 21,60,136,4,141,10,114,28,0,0,0,99,2,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 243,4,0,0,0,151,0,121,1,41,2,78,84,114,30,0, - 0,0,114,83,1,0,0,115,2,0,0,0,32,32,114,10, - 0,0,0,114,10,1,0,0,122,26,78,97,109,101,115,112, - 97,99,101,76,111,97,100,101,114,46,105,115,95,112,97,99, - 107,97,103,101,116,5,0,0,115,5,0,0,0,128,0,216, - 15,19,114,28,0,0,0,99,2,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,243,4,0,0, - 0,151,0,121,1,41,2,78,114,12,0,0,0,114,30,0, - 0,0,114,83,1,0,0,115,2,0,0,0,32,32,114,10, - 0,0,0,114,99,1,0,0,122,26,78,97,109,101,115,112, - 97,99,101,76,111,97,100,101,114,46,103,101,116,95,115,111, - 117,114,99,101,119,5,0,0,115,5,0,0,0,128,0,216, - 15,17,114,28,0,0,0,99,2,0,0,0,0,0,0,0, - 0,0,0,0,6,0,0,0,3,0,0,0,243,32,0,0, - 0,151,0,116,1,0,0,0,0,0,0,0,0,100,1,100, - 2,100,3,100,4,172,5,171,4,0,0,0,0,0,0,83, - 0,41,6,78,114,12,0,0,0,122,8,60,115,116,114,105, - 110,103,62,114,78,1,0,0,84,41,1,114,102,1,0,0, - 41,1,114,103,1,0,0,114,83,1,0,0,115,2,0,0, - 0,32,32,114,10,0,0,0,114,76,1,0,0,122,24,78, - 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,103, - 101,116,95,99,111,100,101,122,5,0,0,115,19,0,0,0, - 128,0,220,15,22,144,114,152,58,160,118,184,68,212,15,65, - 208,8,65,114,28,0,0,0,99,2,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,243,4,0, - 0,0,151,0,121,1,114,71,1,0,0,114,30,0,0,0, - 114,72,1,0,0,115,2,0,0,0,32,32,114,10,0,0, - 0,114,73,1,0,0,122,29,78,97,109,101,115,112,97,99, - 101,76,111,97,100,101,114,46,99,114,101,97,116,101,95,109, - 111,100,117,108,101,125,5,0,0,114,74,1,0,0,114,28, + 0,0,0,116,1,0,0,0,0,0,0,0,0,124,0,106, + 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,171,1,0,0,0,0,0,0,122,12,0,0,83, + 0,114,77,0,0,0,114,130,1,0,0,114,132,1,0,0, + 115,1,0,0,0,32,114,10,0,0,0,114,133,1,0,0, + 122,28,69,120,116,101,110,115,105,111,110,70,105,108,101,76, + 111,97,100,101,114,46,95,95,104,97,115,104,95,95,8,5, + 0,0,114,134,1,0,0,114,28,0,0,0,99,2,0,0, + 0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,0, + 0,243,164,0,0,0,151,0,116,0,0,0,0,0,0,0, + 0,0,106,3,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,116,4,0,0,0,0,0,0,0,0, + 106,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,1,171,2,0,0,0,0,0,0,125,2, + 116,0,0,0,0,0,0,0,0,0,106,9,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,1, + 124,1,106,10,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,0,106,12,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,171,3,0,0, + 0,0,0,0,1,0,124,2,83,0,41,2,122,40,67,114, + 101,97,116,101,32,97,110,32,117,110,105,110,105,116,105,97, + 108,105,122,101,100,32,101,120,116,101,110,115,105,111,110,32, + 109,111,100,117,108,101,122,38,101,120,116,101,110,115,105,111, + 110,32,109,111,100,117,108,101,32,123,33,114,125,32,108,111, + 97,100,101,100,32,102,114,111,109,32,123,33,114,125,41,7, + 114,208,0,0,0,114,78,1,0,0,114,235,0,0,0,218, + 14,99,114,101,97,116,101,95,100,121,110,97,109,105,99,114, + 216,0,0,0,114,188,0,0,0,114,68,0,0,0,41,3, + 114,190,0,0,0,114,17,1,0,0,114,80,1,0,0,115, + 3,0,0,0,32,32,32,114,10,0,0,0,114,74,1,0, + 0,122,33,69,120,116,101,110,115,105,111,110,70,105,108,101, + 76,111,97,100,101,114,46,99,114,101,97,116,101,95,109,111, + 100,117,108,101,11,5,0,0,115,64,0,0,0,128,0,228, + 17,27,215,17,53,209,17,53,220,12,16,215,12,31,209,12, + 31,160,20,243,3,1,18,39,136,6,228,8,18,215,8,35, + 209,8,35,208,36,76,216,25,29,159,25,153,25,160,68,167, + 73,161,73,244,3,1,9,47,224,15,21,136,13,114,28,0, + 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,3,0,0,0,243,162,0,0,0,151,0,116,0, + 0,0,0,0,0,0,0,0,106,3,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,116,4,0,0, + 0,0,0,0,0,0,106,6,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,1,171,2,0,0, + 0,0,0,0,1,0,116,0,0,0,0,0,0,0,0,0, + 106,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,100,1,124,0,106,10,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,124,0,106,12, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,171,3,0,0,0,0,0,0,1,0,121,2,41,3, + 122,30,73,110,105,116,105,97,108,105,122,101,32,97,110,32, + 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, + 122,40,101,120,116,101,110,115,105,111,110,32,109,111,100,117, + 108,101,32,123,33,114,125,32,101,120,101,99,117,116,101,100, + 32,102,114,111,109,32,123,33,114,125,78,41,7,114,208,0, + 0,0,114,78,1,0,0,114,235,0,0,0,218,12,101,120, + 101,99,95,100,121,110,97,109,105,99,114,216,0,0,0,114, + 188,0,0,0,114,68,0,0,0,169,2,114,190,0,0,0, + 114,80,1,0,0,115,2,0,0,0,32,32,114,10,0,0, + 0,114,81,1,0,0,122,31,69,120,116,101,110,115,105,111, + 110,70,105,108,101,76,111,97,100,101,114,46,101,120,101,99, + 95,109,111,100,117,108,101,19,5,0,0,115,54,0,0,0, + 128,0,228,8,18,215,8,44,209,8,44,172,84,215,45,62, + 209,45,62,192,6,212,8,71,220,8,18,215,8,35,209,8, + 35,208,36,78,216,25,29,159,25,153,25,160,68,167,73,161, + 73,245,3,1,9,47,114,28,0,0,0,99,2,0,0,0, + 0,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, + 243,100,0,0,0,135,2,151,0,116,1,0,0,0,0,0, + 0,0,0,124,0,106,2,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,171,1,0,0,0,0,0, + 0,100,1,25,0,0,0,138,2,116,5,0,0,0,0,0, + 0,0,0,136,2,102,1,100,2,132,8,116,6,0,0,0, + 0,0,0,0,0,68,0,171,0,0,0,0,0,0,0,171, + 1,0,0,0,0,0,0,83,0,41,3,122,49,82,101,116, + 117,114,110,32,84,114,117,101,32,105,102,32,116,104,101,32, + 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, + 32,105,115,32,97,32,112,97,99,107,97,103,101,46,114,6, + 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, + 4,0,0,0,51,0,0,0,243,46,0,0,0,149,1,75, + 0,1,0,151,0,124,0,93,12,0,0,125,1,137,2,100, + 0,124,1,122,0,0,0,107,40,0,0,150,1,151,1,1, + 0,140,14,4,0,121,1,173,3,119,1,41,2,114,68,1, + 0,0,78,114,30,0,0,0,41,3,114,8,0,0,0,218, + 6,115,117,102,102,105,120,218,9,102,105,108,101,95,110,97, + 109,101,115,3,0,0,0,32,32,128,114,10,0,0,0,114, + 11,0,0,0,122,49,69,120,116,101,110,115,105,111,110,70, + 105,108,101,76,111,97,100,101,114,46,105,115,95,112,97,99, + 107,97,103,101,46,60,108,111,99,97,108,115,62,46,60,103, + 101,110,101,120,112,114,62,28,5,0,0,115,35,0,0,0, + 248,232,0,248,128,0,240,0,1,19,53,217,33,51,144,118, + 240,3,0,20,29,160,10,168,86,209,32,51,213,19,51,217, + 33,51,249,115,4,0,0,0,131,18,21,1,41,4,114,81, + 0,0,0,114,68,0,0,0,218,3,97,110,121,114,62,1, + 0,0,41,3,114,190,0,0,0,114,43,1,0,0,114,180, + 1,0,0,115,3,0,0,0,32,32,64,114,10,0,0,0, + 114,11,1,0,0,122,30,69,120,116,101,110,115,105,111,110, + 70,105,108,101,76,111,97,100,101,114,46,105,115,95,112,97, + 99,107,97,103,101,25,5,0,0,115,48,0,0,0,248,128, + 0,228,20,31,160,4,167,9,161,9,211,20,42,168,49,209, + 20,45,136,9,220,15,18,243,0,1,19,53,221,33,51,243, + 3,1,19,53,243,0,1,16,53,240,0,1,9,53,114,28, 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,3,0,0,0,243,4,0,0,0,151,0,121, - 0,114,77,0,0,0,114,30,0,0,0,114,175,1,0,0, - 115,2,0,0,0,32,32,114,10,0,0,0,114,80,1,0, - 0,122,27,78,97,109,101,115,112,97,99,101,76,111,97,100, - 101,114,46,101,120,101,99,95,109,111,100,117,108,101,128,5, - 0,0,115,5,0,0,0,128,0,216,8,12,114,28,0,0, - 0,99,2,0,0,0,0,0,0,0,0,0,0,0,4,0, - 0,0,3,0,0,0,243,110,0,0,0,151,0,116,0,0, + 1,41,2,122,63,82,101,116,117,114,110,32,78,111,110,101, + 32,97,115,32,97,110,32,101,120,116,101,110,115,105,111,110, + 32,109,111,100,117,108,101,32,99,97,110,110,111,116,32,99, + 114,101,97,116,101,32,97,32,99,111,100,101,32,111,98,106, + 101,99,116,46,78,114,30,0,0,0,114,84,1,0,0,115, + 2,0,0,0,32,32,114,10,0,0,0,114,77,1,0,0, + 122,28,69,120,116,101,110,115,105,111,110,70,105,108,101,76, + 111,97,100,101,114,46,103,101,116,95,99,111,100,101,31,5, + 0,0,114,167,1,0,0,114,28,0,0,0,99,2,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,243,4,0,0,0,151,0,121,1,41,2,122,53,82,101, + 116,117,114,110,32,78,111,110,101,32,97,115,32,101,120,116, + 101,110,115,105,111,110,32,109,111,100,117,108,101,115,32,104, + 97,118,101,32,110,111,32,115,111,117,114,99,101,32,99,111, + 100,101,46,78,114,30,0,0,0,114,84,1,0,0,115,2, + 0,0,0,32,32,114,10,0,0,0,114,100,1,0,0,122, + 30,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, + 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,35, + 5,0,0,114,167,1,0,0,114,28,0,0,0,99,2,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, + 0,0,243,26,0,0,0,151,0,124,0,106,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83, + 0,114,138,1,0,0,114,84,0,0,0,114,84,1,0,0, + 115,2,0,0,0,32,32,114,10,0,0,0,114,8,1,0, + 0,122,32,69,120,116,101,110,115,105,111,110,70,105,108,101, + 76,111,97,100,101,114,46,103,101,116,95,102,105,108,101,110, + 97,109,101,39,5,0,0,114,139,1,0,0,114,28,0,0, + 0,78,41,14,114,197,0,0,0,114,196,0,0,0,114,198, + 0,0,0,114,199,0,0,0,114,68,1,0,0,114,127,1, + 0,0,114,133,1,0,0,114,74,1,0,0,114,81,1,0, + 0,114,11,1,0,0,114,77,1,0,0,114,100,1,0,0, + 114,209,0,0,0,114,8,1,0,0,114,30,0,0,0,114, + 28,0,0,0,114,10,0,0,0,114,142,1,0,0,114,142, + 1,0,0,248,4,0,0,115,67,0,0,0,132,0,241,4, + 4,5,8,242,12,2,5,25,242,8,2,5,49,242,8,1, + 5,49,242,6,6,5,22,242,16,4,5,47,242,12,4,5, + 53,242,12,2,5,20,242,8,2,5,20,240,8,0,6,17, + 241,2,2,5,25,243,3,0,6,17,241,2,2,5,25,114, + 28,0,0,0,114,142,1,0,0,99,0,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,0,0,0,0,243,86, + 0,0,0,151,0,101,0,90,1,100,0,90,2,100,1,90, + 3,100,2,90,4,100,3,132,0,90,5,100,4,132,0,90, + 6,100,5,132,0,90,7,100,6,132,0,90,8,100,7,132, + 0,90,9,100,8,132,0,90,10,100,9,132,0,90,11,100, + 10,132,0,90,12,100,11,132,0,90,13,100,12,132,0,90, + 14,100,13,132,0,90,15,121,14,41,15,218,14,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,97,38,1,0,0, + 82,101,112,114,101,115,101,110,116,115,32,97,32,110,97,109, + 101,115,112,97,99,101,32,112,97,99,107,97,103,101,39,115, + 32,112,97,116,104,46,32,32,73,116,32,117,115,101,115,32, + 116,104,101,32,109,111,100,117,108,101,32,110,97,109,101,10, + 32,32,32,32,116,111,32,102,105,110,100,32,105,116,115,32, + 112,97,114,101,110,116,32,109,111,100,117,108,101,44,32,97, + 110,100,32,102,114,111,109,32,116,104,101,114,101,32,105,116, + 32,108,111,111,107,115,32,117,112,32,116,104,101,32,112,97, + 114,101,110,116,39,115,10,32,32,32,32,95,95,112,97,116, + 104,95,95,46,32,32,87,104,101,110,32,116,104,105,115,32, + 99,104,97,110,103,101,115,44,32,116,104,101,32,109,111,100, + 117,108,101,39,115,32,111,119,110,32,112,97,116,104,32,105, + 115,32,114,101,99,111,109,112,117,116,101,100,44,10,32,32, + 32,32,117,115,105,110,103,32,112,97,116,104,95,102,105,110, + 100,101,114,46,32,32,70,111,114,32,116,111,112,45,108,101, + 118,101,108,32,109,111,100,117,108,101,115,44,32,116,104,101, + 32,112,97,114,101,110,116,32,109,111,100,117,108,101,39,115, + 32,112,97,116,104,10,32,32,32,32,105,115,32,115,121,115, + 46,112,97,116,104,46,114,1,0,0,0,99,4,0,0,0, + 0,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, + 243,140,0,0,0,151,0,124,1,124,0,95,0,0,0,0, + 0,0,0,0,0,124,2,124,0,95,1,0,0,0,0,0, + 0,0,0,116,5,0,0,0,0,0,0,0,0,124,0,106, + 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,171,0,0,0,0,0,0,0,171,1,0,0,0, + 0,0,0,124,0,95,4,0,0,0,0,0,0,0,0,124, + 0,106,10,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,0,95,6,0,0,0,0,0,0,0, + 0,124,3,124,0,95,7,0,0,0,0,0,0,0,0,121, + 0,114,77,0,0,0,41,8,218,5,95,110,97,109,101,218, + 5,95,112,97,116,104,114,180,0,0,0,218,16,95,103,101, + 116,95,112,97,114,101,110,116,95,112,97,116,104,218,17,95, + 108,97,115,116,95,112,97,114,101,110,116,95,112,97,116,104, + 218,6,95,101,112,111,99,104,218,11,95,108,97,115,116,95, + 101,112,111,99,104,218,12,95,112,97,116,104,95,102,105,110, + 100,101,114,169,4,114,190,0,0,0,114,188,0,0,0,114, + 68,0,0,0,218,11,112,97,116,104,95,102,105,110,100,101, + 114,115,4,0,0,0,32,32,32,32,114,10,0,0,0,114, + 68,1,0,0,122,23,95,78,97,109,101,115,112,97,99,101, + 80,97,116,104,46,95,95,105,110,105,116,95,95,56,5,0, + 0,115,58,0,0,0,128,0,216,21,25,136,4,140,10,216, + 21,25,136,4,140,10,220,33,38,160,116,215,39,60,209,39, + 60,211,39,62,211,33,63,136,4,212,8,30,216,27,31,159, + 59,153,59,136,4,212,8,24,216,28,39,136,4,213,8,25, + 114,28,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,3,0,0,0,243,84,0,0,0,151, + 0,124,0,106,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,106,3,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,100,1,124,0,106, - 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,171,2,0,0,0,0,0,0,1,0,116,0,0, - 0,0,0,0,0,0,0,106,7,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,0,124,1,171, - 2,0,0,0,0,0,0,83,0,41,2,122,98,76,111,97, - 100,32,97,32,110,97,109,101,115,112,97,99,101,32,109,111, - 100,117,108,101,46,10,10,32,32,32,32,32,32,32,32,84, - 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,101, - 120,101,99,95,109,111,100,117,108,101,40,41,32,105,110,115, - 116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,122, - 38,110,97,109,101,115,112,97,99,101,32,109,111,100,117,108, - 101,32,108,111,97,100,101,100,32,119,105,116,104,32,112,97, - 116,104,32,123,33,114,125,41,4,114,207,0,0,0,114,215, - 0,0,0,114,188,1,0,0,114,82,1,0,0,114,83,1, - 0,0,115,2,0,0,0,32,32,114,10,0,0,0,114,84, - 1,0,0,122,27,78,97,109,101,115,112,97,99,101,76,111, - 97,100,101,114,46,108,111,97,100,95,109,111,100,117,108,101, - 131,5,0,0,115,49,0,0,0,128,0,244,14,0,9,19, - 215,8,35,209,8,35,208,36,76,216,36,40,167,74,161,74, - 244,3,1,9,48,244,6,0,16,26,215,15,43,209,15,43, - 168,68,176,40,211,15,59,208,8,59,114,28,0,0,0,99, - 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 3,0,0,0,243,50,0,0,0,151,0,100,1,100,2,108, - 0,109,1,125,2,1,0,2,0,124,2,124,0,106,4,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,171,1,0,0,0,0,0,0,83,0,41,3,78,114,1, - 0,0,0,41,1,218,15,78,97,109,101,115,112,97,99,101, - 82,101,97,100,101,114,41,3,114,146,1,0,0,114,238,1, - 0,0,114,188,1,0,0,41,3,114,189,0,0,0,114,79, - 1,0,0,114,238,1,0,0,115,3,0,0,0,32,32,32, - 114,10,0,0,0,114,147,1,0,0,122,35,78,97,109,101, - 115,112,97,99,101,76,111,97,100,101,114,46,103,101,116,95, - 114,101,115,111,117,114,99,101,95,114,101,97,100,101,114,143, - 5,0,0,115,20,0,0,0,128,0,221,8,53,217,15,30, - 152,116,159,122,153,122,211,15,42,208,8,42,114,28,0,0, - 0,78,41,11,114,196,0,0,0,114,195,0,0,0,114,197, - 0,0,0,114,67,1,0,0,114,10,1,0,0,114,99,1, - 0,0,114,76,1,0,0,114,73,1,0,0,114,80,1,0, - 0,114,84,1,0,0,114,147,1,0,0,114,30,0,0,0, - 114,28,0,0,0,114,10,0,0,0,114,229,1,0,0,114, - 229,1,0,0,112,5,0,0,115,43,0,0,0,132,0,242, - 2,1,5,61,242,6,1,5,20,242,6,1,5,18,242,6, - 1,5,66,1,242,6,1,5,57,242,6,1,5,13,242,6, - 10,5,60,243,24,2,5,43,114,28,0,0,0,114,229,1, - 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,0,0,0,0,243,116,0,0,0,151,0,101,0, - 90,1,100,0,90,2,100,1,90,3,101,4,100,2,132,0, - 171,0,0,0,0,0,0,0,90,5,101,4,100,3,132,0, - 171,0,0,0,0,0,0,0,90,6,101,7,100,4,132,0, - 171,0,0,0,0,0,0,0,90,8,101,7,100,9,100,6, - 132,1,171,0,0,0,0,0,0,0,90,9,101,7,100,10, - 100,7,132,1,171,0,0,0,0,0,0,0,90,10,101,4, - 100,8,132,0,171,0,0,0,0,0,0,0,90,11,121,5, - 41,11,218,10,80,97,116,104,70,105,110,100,101,114,122,62, - 77,101,116,97,32,112,97,116,104,32,102,105,110,100,101,114, - 32,102,111,114,32,115,121,115,46,112,97,116,104,32,97,110, - 100,32,112,97,99,107,97,103,101,32,95,95,112,97,116,104, - 95,95,32,97,116,116,114,105,98,117,116,101,115,46,99,0, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,3, - 0,0,0,243,56,1,0,0,151,0,116,1,0,0,0,0, - 0,0,0,0,116,2,0,0,0,0,0,0,0,0,106,4, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,106,7,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,100,1,171,1,0, + 0,0,0,0,0,92,3,0,0,125,1,125,2,125,3,124, + 2,100,2,107,40,0,0,114,1,121,3,124,1,100,4,102, + 2,83,0,41,5,122,62,82,101,116,117,114,110,115,32,97, + 32,116,117,112,108,101,32,111,102,32,40,112,97,114,101,110, + 116,45,109,111,100,117,108,101,45,110,97,109,101,44,32,112, + 97,114,101,110,116,45,112,97,116,104,45,97,116,116,114,45, + 110,97,109,101,41,114,103,0,0,0,114,12,0,0,0,41, + 2,114,20,0,0,0,114,68,0,0,0,218,8,95,95,112, + 97,116,104,95,95,41,2,114,188,1,0,0,114,132,0,0, + 0,41,4,114,190,0,0,0,114,162,1,0,0,218,3,100, + 111,116,218,2,109,101,115,4,0,0,0,32,32,32,32,114, + 10,0,0,0,218,23,95,102,105,110,100,95,112,97,114,101, + 110,116,95,112,97,116,104,95,110,97,109,101,115,122,38,95, + 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,102, + 105,110,100,95,112,97,114,101,110,116,95,112,97,116,104,95, + 110,97,109,101,115,63,5,0,0,115,51,0,0,0,128,0, + 224,26,30,159,42,153,42,215,26,47,209,26,47,176,3,211, + 26,52,137,15,136,6,144,3,144,82,216,11,14,144,34,138, + 57,224,19,32,240,6,0,16,22,144,122,208,15,33,208,8, + 33,114,28,0,0,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,3,0,0,0,243,98,0,0,0, + 151,0,124,0,106,1,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0, + 92,2,0,0,125,1,125,2,116,3,0,0,0,0,0,0, + 0,0,116,4,0,0,0,0,0,0,0,0,106,6,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 124,1,25,0,0,0,124,2,171,2,0,0,0,0,0,0, + 83,0,114,77,0,0,0,41,4,114,201,1,0,0,114,202, + 0,0,0,114,20,0,0,0,218,7,109,111,100,117,108,101, + 115,41,3,114,190,0,0,0,218,18,112,97,114,101,110,116, + 95,109,111,100,117,108,101,95,110,97,109,101,218,14,112,97, + 116,104,95,97,116,116,114,95,110,97,109,101,115,3,0,0, + 0,32,32,32,114,10,0,0,0,114,190,1,0,0,122,31, + 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, + 103,101,116,95,112,97,114,101,110,116,95,112,97,116,104,73, + 5,0,0,115,45,0,0,0,128,0,216,45,49,215,45,73, + 209,45,73,211,45,75,209,8,42,208,8,26,152,78,220,15, + 22,148,115,151,123,145,123,208,35,53,209,23,54,184,14,211, + 15,71,208,8,71,114,28,0,0,0,99,1,0,0,0,0, + 0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,243, + 90,1,0,0,151,0,116,1,0,0,0,0,0,0,0,0, + 124,0,106,3,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,171,0,0,0,0,0,0,0,171,1, - 0,0,0,0,0,0,68,0,93,65,0,0,92,2,0,0, - 125,0,125,1,124,1,129,11,116,9,0,0,0,0,0,0, - 0,0,124,0,171,1,0,0,0,0,0,0,115,18,116,2, - 0,0,0,0,0,0,0,0,106,4,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,0,61,0, - 140,37,116,11,0,0,0,0,0,0,0,0,124,1,100,2, - 171,2,0,0,0,0,0,0,115,1,140,50,124,1,106,13, + 0,0,0,0,0,0,125,1,124,1,124,0,106,4,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,171,0,0,0,0,0,0,0,1,0,140,67,4,0, - 116,14,0,0,0,0,0,0,0,0,120,1,106,16,0,0, + 107,55,0,0,115,25,124,0,106,6,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,124,0,106,8, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 100,3,122,13,0,0,99,2,95,8,0,0,0,0,0,0, - 0,0,100,4,100,5,108,9,109,10,125,2,1,0,124,2, - 106,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,171,0,0,0,0,0,0,0,1,0,121,1, - 41,6,122,125,67,97,108,108,32,116,104,101,32,105,110,118, - 97,108,105,100,97,116,101,95,99,97,99,104,101,115,40,41, - 32,109,101,116,104,111,100,32,111,110,32,97,108,108,32,112, - 97,116,104,32,101,110,116,114,121,32,102,105,110,100,101,114, - 115,10,32,32,32,32,32,32,32,32,115,116,111,114,101,100, - 32,105,110,32,115,121,115,46,112,97,116,104,95,105,109,112, - 111,114,116,101,114,95,99,97,99,104,101,115,32,40,119,104, - 101,114,101,32,105,109,112,108,101,109,101,110,116,101,100,41, - 46,78,218,17,105,110,118,97,108,105,100,97,116,101,95,99, - 97,99,104,101,115,114,6,0,0,0,114,1,0,0,0,169, - 1,218,18,77,101,116,97,100,97,116,97,80,97,116,104,70, - 105,110,100,101,114,41,11,218,4,108,105,115,116,114,20,0, - 0,0,218,19,112,97,116,104,95,105,109,112,111,114,116,101, - 114,95,99,97,99,104,101,218,5,105,116,101,109,115,114,100, - 0,0,0,114,199,0,0,0,114,242,1,0,0,114,185,1, - 0,0,114,191,1,0,0,218,18,105,109,112,111,114,116,108, - 105,98,46,109,101,116,97,100,97,116,97,114,244,1,0,0, - 41,3,114,187,0,0,0,218,6,102,105,110,100,101,114,114, - 244,1,0,0,115,3,0,0,0,32,32,32,114,10,0,0, - 0,114,242,1,0,0,122,28,80,97,116,104,70,105,110,100, - 101,114,46,105,110,118,97,108,105,100,97,116,101,95,99,97, - 99,104,101,115,158,5,0,0,115,124,0,0,0,128,0,244, - 8,0,29,33,164,19,215,33,56,209,33,56,215,33,62,209, - 33,62,211,33,64,214,28,65,137,76,136,68,144,38,240,6, - 0,16,22,136,126,164,91,176,20,212,37,54,220,20,23,215, - 20,43,209,20,43,168,68,209,20,49,220,17,24,152,22,208, - 33,52,213,17,53,216,16,22,215,16,40,209,16,40,213,16, - 42,240,13,0,29,66,1,244,18,0,9,23,215,8,29,210, - 8,29,160,17,209,8,34,213,8,29,229,8,57,216,8,26, - 215,8,44,209,8,44,213,8,46,114,28,0,0,0,99,1, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,3, - 0,0,0,243,212,0,0,0,151,0,116,0,0,0,0,0, - 0,0,0,0,106,2,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,129,42,116,0,0,0,0,0, - 0,0,0,0,106,2,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,115,26,116,5,0,0,0,0, - 0,0,0,0,106,6,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,100,2,116,8,0,0,0,0, - 0,0,0,0,171,2,0,0,0,0,0,0,1,0,116,0, - 0,0,0,0,0,0,0,0,106,2,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,68,0,93,12, - 0,0,125,1,9,0,2,0,124,1,124,0,171,1,0,0, - 0,0,0,0,99,2,1,0,83,0,4,0,121,1,35,0, - 116,10,0,0,0,0,0,0,0,0,36,0,114,3,1,0, - 89,0,140,27,119,0,120,3,89,0,119,1,41,3,122,46, - 83,101,97,114,99,104,32,115,121,115,46,112,97,116,104,95, - 104,111,111,107,115,32,102,111,114,32,97,32,102,105,110,100, - 101,114,32,102,111,114,32,39,112,97,116,104,39,46,78,122, - 23,115,121,115,46,112,97,116,104,95,104,111,111,107,115,32, - 105,115,32,101,109,112,116,121,41,6,114,20,0,0,0,218, - 10,112,97,116,104,95,104,111,111,107,115,114,126,0,0,0, - 114,127,0,0,0,218,13,73,109,112,111,114,116,87,97,114, - 110,105,110,103,114,188,0,0,0,41,2,114,68,0,0,0, - 218,4,104,111,111,107,115,2,0,0,0,32,32,114,10,0, - 0,0,218,11,95,112,97,116,104,95,104,111,111,107,115,122, - 22,80,97,116,104,70,105,110,100,101,114,46,95,112,97,116, - 104,95,104,111,111,107,115,176,5,0,0,115,89,0,0,0, - 128,0,244,6,0,12,15,143,62,137,62,208,11,37,172,99, - 175,110,170,110,220,12,21,143,78,137,78,208,27,52,180,109, - 212,12,68,220,20,23,151,78,148,78,136,68,240,2,3,13, - 25,217,23,27,152,68,147,122,210,16,33,240,5,0,21,35, - 240,12,0,20,24,248,244,7,0,20,31,242,0,1,13,25, - 217,16,24,240,3,1,13,25,250,115,18,0,0,0,193,15, - 7,65,27,2,193,27,9,65,39,5,193,38,1,65,39,5, - 99,2,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,3,0,0,0,243,232,0,0,0,151,0,124,1,100,1, - 107,40,0,0,114,21,9,0,116,1,0,0,0,0,0,0, - 0,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,171,0,0,0,0,0,0,0,125,1, - 9,0,116,6,0,0,0,0,0,0,0,0,106,8,0,0, + 0,0,107,55,0,0,114,95,124,0,106,11,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0, + 106,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,1,171,2,0,0,0,0,0,0,125,2, + 124,2,129,41,124,2,106,14,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,128,29,124,2,106,16, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,114,17,124,2,106,16,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,0,95,9,0,0, + 0,0,0,0,0,0,124,1,124,0,95,2,0,0,0,0, + 0,0,0,0,124,0,106,6,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,0,95,4,0,0, + 0,0,0,0,0,0,124,0,106,18,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,83,0,114,77, + 0,0,0,41,10,114,180,0,0,0,114,190,1,0,0,114, + 191,1,0,0,114,192,1,0,0,114,193,1,0,0,114,194, + 1,0,0,114,188,1,0,0,114,5,1,0,0,114,6,1, + 0,0,114,189,1,0,0,41,3,114,190,0,0,0,218,11, + 112,97,114,101,110,116,95,112,97,116,104,114,17,1,0,0, + 115,3,0,0,0,32,32,32,114,10,0,0,0,218,12,95, + 114,101,99,97,108,99,117,108,97,116,101,122,27,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,46,95,114,101,99, + 97,108,99,117,108,97,116,101,77,5,0,0,115,143,0,0, + 0,128,0,228,22,27,152,68,215,28,49,209,28,49,211,28, + 51,211,22,52,136,11,216,11,22,152,36,215,26,48,209,26, + 48,210,11,48,176,68,183,75,177,75,192,52,215,67,83,209, + 67,83,210,52,83,216,19,23,215,19,36,209,19,36,160,84, + 167,90,161,90,176,27,211,19,61,136,68,240,6,0,16,20, + 208,15,31,160,68,167,75,161,75,208,36,55,216,19,23,215, + 19,50,210,19,50,216,33,37,215,33,64,209,33,64,144,68, + 148,74,216,37,48,136,68,212,12,34,216,31,35,159,123,153, + 123,136,68,212,12,28,216,15,19,143,122,137,122,208,8,25, + 114,28,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,4,0,0,0,3,0,0,0,243,52,0,0,0,151, + 0,116,1,0,0,0,0,0,0,0,0,124,0,106,3,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,1,25,0,0,0,125,2,124,2,83,0,35,0,116,4, + 0,171,0,0,0,0,0,0,0,171,1,0,0,0,0,0, + 0,83,0,114,77,0,0,0,41,2,218,4,105,116,101,114, + 114,208,1,0,0,114,132,1,0,0,115,1,0,0,0,32, + 114,10,0,0,0,218,8,95,95,105,116,101,114,95,95,122, + 23,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, + 95,95,105,116,101,114,95,95,91,5,0,0,115,22,0,0, + 0,128,0,220,15,19,144,68,215,20,37,209,20,37,211,20, + 39,211,15,40,208,8,40,114,28,0,0,0,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0, + 0,243,40,0,0,0,151,0,124,0,106,1,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,0, + 0,0,0,0,0,0,124,1,25,0,0,0,83,0,114,77, + 0,0,0,169,1,114,208,1,0,0,41,2,114,190,0,0, + 0,218,5,105,110,100,101,120,115,2,0,0,0,32,32,114, + 10,0,0,0,218,11,95,95,103,101,116,105,116,101,109,95, + 95,122,26,95,78,97,109,101,115,112,97,99,101,80,97,116, + 104,46,95,95,103,101,116,105,116,101,109,95,95,94,5,0, + 0,115,22,0,0,0,128,0,216,15,19,215,15,32,209,15, + 32,211,15,34,160,53,209,15,41,208,8,41,114,28,0,0, + 0,99,3,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,3,0,0,0,243,34,0,0,0,151,0,124,2,124, + 0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,1,60,0,0,0,121,0,114,77,0, + 0,0,169,1,114,189,1,0,0,41,3,114,190,0,0,0, + 114,214,1,0,0,114,68,0,0,0,115,3,0,0,0,32, + 32,32,114,10,0,0,0,218,11,95,95,115,101,116,105,116, + 101,109,95,95,122,26,95,78,97,109,101,115,112,97,99,101, + 80,97,116,104,46,95,95,115,101,116,105,116,101,109,95,95, + 97,5,0,0,115,16,0,0,0,128,0,216,28,32,136,4, + 143,10,137,10,144,53,210,8,25,114,28,0,0,0,99,1, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3, + 0,0,0,243,52,0,0,0,151,0,116,1,0,0,0,0, + 0,0,0,0,124,0,106,3,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,171,0,0,0,0,0, + 0,0,171,1,0,0,0,0,0,0,83,0,114,77,0,0, + 0,41,2,114,7,0,0,0,114,208,1,0,0,114,132,1, + 0,0,115,1,0,0,0,32,114,10,0,0,0,218,7,95, + 95,108,101,110,95,95,122,22,95,78,97,109,101,115,112,97, + 99,101,80,97,116,104,46,95,95,108,101,110,95,95,100,5, + 0,0,115,22,0,0,0,128,0,220,15,18,144,52,215,19, + 36,209,19,36,211,19,38,211,15,39,208,8,39,114,28,0, + 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,3,0,0,0,243,34,0,0,0,151,0,100,1, + 124,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,155,2,100,2,157,3,83,0,41,3, + 78,122,15,95,78,97,109,101,115,112,97,99,101,80,97,116, + 104,40,218,1,41,114,217,1,0,0,114,132,1,0,0,115, + 1,0,0,0,32,114,10,0,0,0,218,8,95,95,114,101, + 112,114,95,95,122,23,95,78,97,109,101,115,112,97,99,101, + 80,97,116,104,46,95,95,114,101,112,114,95,95,103,5,0, + 0,115,21,0,0,0,128,0,216,17,32,160,20,167,26,161, + 26,160,14,168,97,208,15,48,208,8,48,114,28,0,0,0, + 99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,3,0,0,0,243,38,0,0,0,151,0,124,1,124,0, + 106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,171,0,0,0,0,0,0,0,118,0,83,0, + 114,77,0,0,0,114,213,1,0,0,169,2,114,190,0,0, + 0,218,4,105,116,101,109,115,2,0,0,0,32,32,114,10, + 0,0,0,218,12,95,95,99,111,110,116,97,105,110,115,95, + 95,122,27,95,78,97,109,101,115,112,97,99,101,80,97,116, + 104,46,95,95,99,111,110,116,97,105,110,115,95,95,106,5, + 0,0,115,22,0,0,0,128,0,216,15,19,144,116,215,23, + 40,209,23,40,211,23,42,208,15,42,208,8,42,114,28,0, + 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,3,0,0,0,243,58,0,0,0,151,0,124,0, + 106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,106,3,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,124,1,171,1,0,0,0,0, + 0,0,1,0,121,0,114,77,0,0,0,41,2,114,189,1, + 0,0,114,64,0,0,0,114,225,1,0,0,115,2,0,0, + 0,32,32,114,10,0,0,0,114,64,0,0,0,122,21,95, + 78,97,109,101,115,112,97,99,101,80,97,116,104,46,97,112, + 112,101,110,100,109,5,0,0,115,20,0,0,0,128,0,216, + 8,12,143,10,137,10,215,8,25,209,8,25,152,36,213,8, + 31,114,28,0,0,0,78,41,16,114,197,0,0,0,114,196, + 0,0,0,114,198,0,0,0,114,199,0,0,0,114,192,1, + 0,0,114,68,1,0,0,114,201,1,0,0,114,190,1,0, + 0,114,208,1,0,0,114,211,1,0,0,114,215,1,0,0, + 114,218,1,0,0,114,220,1,0,0,114,223,1,0,0,114, + 227,1,0,0,114,64,0,0,0,114,30,0,0,0,114,28, + 0,0,0,114,10,0,0,0,114,186,1,0,0,114,186,1, + 0,0,45,5,0,0,115,70,0,0,0,132,0,241,2,4, + 5,20,240,16,0,14,15,128,70,242,4,5,5,40,242,14, + 8,5,34,242,20,2,5,72,1,242,8,12,5,26,242,28, + 1,5,41,242,6,1,5,42,242,6,1,5,33,242,6,1, + 5,40,242,6,1,5,49,242,6,1,5,43,243,6,1,5, + 32,114,28,0,0,0,114,186,1,0,0,99,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, + 243,60,0,0,0,151,0,101,0,90,1,100,0,90,2,100, + 1,132,0,90,3,100,2,132,0,90,4,100,3,132,0,90, + 5,100,4,132,0,90,6,100,5,132,0,90,7,100,6,132, + 0,90,8,100,7,132,0,90,9,100,8,132,0,90,10,121, + 9,41,10,218,15,78,97,109,101,115,112,97,99,101,76,111, + 97,100,101,114,99,4,0,0,0,0,0,0,0,0,0,0, + 0,5,0,0,0,3,0,0,0,243,40,0,0,0,151,0, + 116,1,0,0,0,0,0,0,0,0,124,1,124,2,124,3, + 171,3,0,0,0,0,0,0,124,0,95,1,0,0,0,0, + 0,0,0,0,121,0,114,77,0,0,0,41,2,114,186,1, + 0,0,114,189,1,0,0,114,195,1,0,0,115,4,0,0, + 0,32,32,32,32,114,10,0,0,0,114,68,1,0,0,122, + 24,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, + 46,95,95,105,110,105,116,95,95,117,5,0,0,115,18,0, + 0,0,128,0,220,21,35,160,68,168,36,176,11,211,21,60, + 136,4,141,10,114,28,0,0,0,99,2,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,243,4, + 0,0,0,151,0,121,1,41,2,78,84,114,30,0,0,0, + 114,84,1,0,0,115,2,0,0,0,32,32,114,10,0,0, + 0,114,11,1,0,0,122,26,78,97,109,101,115,112,97,99, + 101,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97, + 103,101,120,5,0,0,115,5,0,0,0,128,0,216,15,19, + 114,28,0,0,0,99,2,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,3,0,0,0,243,4,0,0,0,151, + 0,121,1,41,2,78,114,12,0,0,0,114,30,0,0,0, + 114,84,1,0,0,115,2,0,0,0,32,32,114,10,0,0, + 0,114,100,1,0,0,122,26,78,97,109,101,115,112,97,99, + 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, + 99,101,123,5,0,0,115,5,0,0,0,128,0,216,15,17, + 114,28,0,0,0,99,2,0,0,0,0,0,0,0,0,0, + 0,0,6,0,0,0,3,0,0,0,243,32,0,0,0,151, + 0,116,1,0,0,0,0,0,0,0,0,100,1,100,2,100, + 3,100,4,172,5,171,4,0,0,0,0,0,0,83,0,41, + 6,78,114,12,0,0,0,122,8,60,115,116,114,105,110,103, + 62,114,79,1,0,0,84,41,1,114,103,1,0,0,41,1, + 114,104,1,0,0,114,84,1,0,0,115,2,0,0,0,32, + 32,114,10,0,0,0,114,77,1,0,0,122,24,78,97,109, + 101,115,112,97,99,101,76,111,97,100,101,114,46,103,101,116, + 95,99,111,100,101,126,5,0,0,115,19,0,0,0,128,0, + 220,15,22,144,114,152,58,160,118,184,68,212,15,65,208,8, + 65,114,28,0,0,0,99,2,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,243,4,0,0,0, + 151,0,121,1,114,72,1,0,0,114,30,0,0,0,114,73, + 1,0,0,115,2,0,0,0,32,32,114,10,0,0,0,114, + 74,1,0,0,122,29,78,97,109,101,115,112,97,99,101,76, + 111,97,100,101,114,46,99,114,101,97,116,101,95,109,111,100, + 117,108,101,129,5,0,0,114,75,1,0,0,114,28,0,0, + 0,99,2,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,243,4,0,0,0,151,0,121,0,114, + 77,0,0,0,114,30,0,0,0,114,176,1,0,0,115,2, + 0,0,0,32,32,114,10,0,0,0,114,81,1,0,0,122, + 27,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, + 46,101,120,101,99,95,109,111,100,117,108,101,132,5,0,0, + 115,5,0,0,0,128,0,216,8,12,114,28,0,0,0,99, + 2,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, + 3,0,0,0,243,110,0,0,0,151,0,116,0,0,0,0, + 0,0,0,0,0,106,3,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,100,1,124,0,106,4,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,171,2,0,0,0,0,0,0,1,0,116,0,0,0,0, + 0,0,0,0,0,106,7,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,0,124,1,171,2,0, + 0,0,0,0,0,83,0,41,2,122,98,76,111,97,100,32, + 97,32,110,97,109,101,115,112,97,99,101,32,109,111,100,117, + 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, + 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101, + 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, + 97,100,46,10,10,32,32,32,32,32,32,32,32,122,38,110, + 97,109,101,115,112,97,99,101,32,109,111,100,117,108,101,32, + 108,111,97,100,101,100,32,119,105,116,104,32,112,97,116,104, + 32,123,33,114,125,41,4,114,208,0,0,0,114,216,0,0, + 0,114,189,1,0,0,114,83,1,0,0,114,84,1,0,0, + 115,2,0,0,0,32,32,114,10,0,0,0,114,85,1,0, + 0,122,27,78,97,109,101,115,112,97,99,101,76,111,97,100, + 101,114,46,108,111,97,100,95,109,111,100,117,108,101,135,5, + 0,0,115,49,0,0,0,128,0,244,14,0,9,19,215,8, + 35,209,8,35,208,36,76,216,36,40,167,74,161,74,244,3, + 1,9,48,244,6,0,16,26,215,15,43,209,15,43,168,68, + 176,40,211,15,59,208,8,59,114,28,0,0,0,99,2,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0, + 0,0,243,50,0,0,0,151,0,100,1,100,2,108,0,109, + 1,125,2,1,0,2,0,124,2,124,0,106,4,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, + 1,0,0,0,0,0,0,83,0,41,3,78,114,1,0,0, + 0,41,1,218,15,78,97,109,101,115,112,97,99,101,82,101, + 97,100,101,114,41,3,114,147,1,0,0,114,239,1,0,0, + 114,189,1,0,0,41,3,114,190,0,0,0,114,80,1,0, + 0,114,239,1,0,0,115,3,0,0,0,32,32,32,114,10, + 0,0,0,114,148,1,0,0,122,35,78,97,109,101,115,112, + 97,99,101,76,111,97,100,101,114,46,103,101,116,95,114,101, + 115,111,117,114,99,101,95,114,101,97,100,101,114,147,5,0, + 0,115,20,0,0,0,128,0,221,8,53,217,15,30,152,116, + 159,122,153,122,211,15,42,208,8,42,114,28,0,0,0,78, + 41,11,114,197,0,0,0,114,196,0,0,0,114,198,0,0, + 0,114,68,1,0,0,114,11,1,0,0,114,100,1,0,0, + 114,77,1,0,0,114,74,1,0,0,114,81,1,0,0,114, + 85,1,0,0,114,148,1,0,0,114,30,0,0,0,114,28, + 0,0,0,114,10,0,0,0,114,230,1,0,0,114,230,1, + 0,0,116,5,0,0,115,43,0,0,0,132,0,242,2,1, + 5,61,242,6,1,5,20,242,6,1,5,18,242,6,1,5, + 66,1,242,6,1,5,57,242,6,1,5,13,242,6,10,5, + 60,243,24,2,5,43,114,28,0,0,0,114,230,1,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,0,0,0,0,243,116,0,0,0,151,0,101,0,90,1, + 100,0,90,2,100,1,90,3,101,4,100,2,132,0,171,0, + 0,0,0,0,0,0,90,5,101,4,100,3,132,0,171,0, + 0,0,0,0,0,0,90,6,101,7,100,4,132,0,171,0, + 0,0,0,0,0,0,90,8,101,7,100,9,100,6,132,1, + 171,0,0,0,0,0,0,0,90,9,101,7,100,10,100,7, + 132,1,171,0,0,0,0,0,0,0,90,10,101,4,100,8, + 132,0,171,0,0,0,0,0,0,0,90,11,121,5,41,11, + 218,10,80,97,116,104,70,105,110,100,101,114,122,62,77,101, + 116,97,32,112,97,116,104,32,102,105,110,100,101,114,32,102, + 111,114,32,115,121,115,46,112,97,116,104,32,97,110,100,32, + 112,97,99,107,97,103,101,32,95,95,112,97,116,104,95,95, + 32,97,116,116,114,105,98,117,116,101,115,46,99,0,0,0, + 0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,0, + 0,243,56,1,0,0,151,0,116,1,0,0,0,0,0,0, + 0,0,116,2,0,0,0,0,0,0,0,0,106,4,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 106,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,171,0,0,0,0,0,0,0,171,1,0,0, + 0,0,0,0,68,0,93,65,0,0,92,2,0,0,125,0, + 125,1,124,1,129,11,116,9,0,0,0,0,0,0,0,0, + 124,0,171,1,0,0,0,0,0,0,115,18,116,2,0,0, + 0,0,0,0,0,0,106,4,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,0,61,0,140,37, + 116,11,0,0,0,0,0,0,0,0,124,1,100,2,171,2, + 0,0,0,0,0,0,115,1,140,50,124,1,106,13,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 171,0,0,0,0,0,0,0,1,0,140,67,4,0,116,14, + 0,0,0,0,0,0,0,0,120,1,106,16,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,3, + 122,13,0,0,99,2,95,8,0,0,0,0,0,0,0,0, + 100,4,100,5,108,9,109,10,125,2,1,0,124,2,106,13, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,171,0,0,0,0,0,0,0,1,0,121,1,41,6, + 122,125,67,97,108,108,32,116,104,101,32,105,110,118,97,108, + 105,100,97,116,101,95,99,97,99,104,101,115,40,41,32,109, + 101,116,104,111,100,32,111,110,32,97,108,108,32,112,97,116, + 104,32,101,110,116,114,121,32,102,105,110,100,101,114,115,10, + 32,32,32,32,32,32,32,32,115,116,111,114,101,100,32,105, + 110,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, + 116,101,114,95,99,97,99,104,101,115,32,40,119,104,101,114, + 101,32,105,109,112,108,101,109,101,110,116,101,100,41,46,78, + 218,17,105,110,118,97,108,105,100,97,116,101,95,99,97,99, + 104,101,115,114,6,0,0,0,114,1,0,0,0,169,1,218, + 18,77,101,116,97,100,97,116,97,80,97,116,104,70,105,110, + 100,101,114,41,11,218,4,108,105,115,116,114,20,0,0,0, + 218,19,112,97,116,104,95,105,109,112,111,114,116,101,114,95, + 99,97,99,104,101,218,5,105,116,101,109,115,114,100,0,0, + 0,114,200,0,0,0,114,243,1,0,0,114,186,1,0,0, + 114,192,1,0,0,218,18,105,109,112,111,114,116,108,105,98, + 46,109,101,116,97,100,97,116,97,114,245,1,0,0,41,3, + 114,188,0,0,0,218,6,102,105,110,100,101,114,114,245,1, + 0,0,115,3,0,0,0,32,32,32,114,10,0,0,0,114, + 243,1,0,0,122,28,80,97,116,104,70,105,110,100,101,114, + 46,105,110,118,97,108,105,100,97,116,101,95,99,97,99,104, + 101,115,162,5,0,0,115,124,0,0,0,128,0,244,8,0, + 29,33,164,19,215,33,56,209,33,56,215,33,62,209,33,62, + 211,33,64,214,28,65,137,76,136,68,144,38,240,6,0,16, + 22,136,126,164,91,176,20,212,37,54,220,20,23,215,20,43, + 209,20,43,168,68,209,20,49,220,17,24,152,22,208,33,52, + 213,17,53,216,16,22,215,16,40,209,16,40,213,16,42,240, + 13,0,29,66,1,244,18,0,9,23,215,8,29,210,8,29, + 160,17,209,8,34,213,8,29,229,8,57,216,8,26,215,8, + 44,209,8,44,213,8,46,114,28,0,0,0,99,1,0,0, + 0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,0, + 0,243,212,0,0,0,151,0,116,0,0,0,0,0,0,0, + 0,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,129,42,116,0,0,0,0,0,0,0, + 0,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,115,26,116,5,0,0,0,0,0,0, + 0,0,106,6,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,100,2,116,8,0,0,0,0,0,0, + 0,0,171,2,0,0,0,0,0,0,1,0,116,0,0,0, + 0,0,0,0,0,0,106,2,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,68,0,93,12,0,0, + 125,1,9,0,2,0,124,1,124,0,171,1,0,0,0,0, + 0,0,99,2,1,0,83,0,4,0,121,1,35,0,116,10, 0,0,0,0,0,0,0,0,36,0,114,3,1,0,89,0, - 121,2,119,0,120,3,89,0,119,1,35,0,116,10,0,0, - 0,0,0,0,0,0,36,0,114,40,1,0,124,0,106,13, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,1,171,1,0,0,0,0,0,0,125,2,124,2, + 140,27,119,0,120,3,89,0,119,1,41,3,122,46,83,101, + 97,114,99,104,32,115,121,115,46,112,97,116,104,95,104,111, + 111,107,115,32,102,111,114,32,97,32,102,105,110,100,101,114, + 32,102,111,114,32,39,112,97,116,104,39,46,78,122,23,115, + 121,115,46,112,97,116,104,95,104,111,111,107,115,32,105,115, + 32,101,109,112,116,121,41,6,114,20,0,0,0,218,10,112, + 97,116,104,95,104,111,111,107,115,114,127,0,0,0,114,128, + 0,0,0,218,13,73,109,112,111,114,116,87,97,114,110,105, + 110,103,114,189,0,0,0,41,2,114,68,0,0,0,218,4, + 104,111,111,107,115,2,0,0,0,32,32,114,10,0,0,0, + 218,11,95,112,97,116,104,95,104,111,111,107,115,122,22,80, + 97,116,104,70,105,110,100,101,114,46,95,112,97,116,104,95, + 104,111,111,107,115,180,5,0,0,115,89,0,0,0,128,0, + 244,6,0,12,15,143,62,137,62,208,11,37,172,99,175,110, + 170,110,220,12,21,143,78,137,78,208,27,52,180,109,212,12, + 68,220,20,23,151,78,148,78,136,68,240,2,3,13,25,217, + 23,27,152,68,147,122,210,16,33,240,5,0,21,35,240,12, + 0,20,24,248,244,7,0,20,31,242,0,1,13,25,217,16, + 24,240,3,1,13,25,250,115,18,0,0,0,193,15,7,65, + 27,2,193,27,9,65,39,5,193,38,1,65,39,5,99,2, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3, + 0,0,0,243,232,0,0,0,151,0,124,1,100,1,107,40, + 0,0,114,21,9,0,116,1,0,0,0,0,0,0,0,0, + 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,171,0,0,0,0,0,0,0,125,1,9,0, 116,6,0,0,0,0,0,0,0,0,106,8,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,1, - 60,0,0,0,89,0,124,2,83,0,119,0,120,3,89,0, - 119,1,41,3,122,210,71,101,116,32,116,104,101,32,102,105, - 110,100,101,114,32,102,111,114,32,116,104,101,32,112,97,116, - 104,32,101,110,116,114,121,32,102,114,111,109,32,115,121,115, - 46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, - 97,99,104,101,46,10,10,32,32,32,32,32,32,32,32,73, - 102,32,116,104,101,32,112,97,116,104,32,101,110,116,114,121, - 32,105,115,32,110,111,116,32,105,110,32,116,104,101,32,99, - 97,99,104,101,44,32,102,105,110,100,32,116,104,101,32,97, - 112,112,114,111,112,114,105,97,116,101,32,102,105,110,100,101, - 114,10,32,32,32,32,32,32,32,32,97,110,100,32,99,97, - 99,104,101,32,105,116,46,32,73,102,32,110,111,32,102,105, - 110,100,101,114,32,105,115,32,97,118,97,105,108,97,98,108, - 101,44,32,115,116,111,114,101,32,78,111,110,101,46,10,10, - 32,32,32,32,32,32,32,32,114,12,0,0,0,78,41,7, - 114,23,0,0,0,114,95,0,0,0,218,17,70,105,108,101, - 78,111,116,70,111,117,110,100,69,114,114,111,114,114,20,0, - 0,0,114,246,1,0,0,218,8,75,101,121,69,114,114,111, - 114,114,254,1,0,0,41,3,114,50,1,0,0,114,68,0, - 0,0,114,249,1,0,0,115,3,0,0,0,32,32,32,114, - 10,0,0,0,218,20,95,112,97,116,104,95,105,109,112,111, - 114,116,101,114,95,99,97,99,104,101,122,31,80,97,116,104, - 70,105,110,100,101,114,46,95,112,97,116,104,95,105,109,112, - 111,114,116,101,114,95,99,97,99,104,101,189,5,0,0,115, - 128,0,0,0,128,0,240,16,0,12,16,144,50,138,58,240, - 2,5,13,28,220,23,26,151,122,145,122,147,124,144,4,240, - 10,4,9,51,220,21,24,215,21,44,209,21,44,168,84,209, - 21,50,136,70,240,8,0,16,22,136,13,248,244,19,0,20, - 37,242,0,3,13,28,241,6,0,24,28,240,7,3,13,28, - 251,244,12,0,16,24,242,0,2,9,51,216,21,24,151,95, - 145,95,160,84,211,21,42,136,70,216,44,50,140,67,215,12, - 35,209,12,35,160,68,210,12,41,216,15,21,136,13,240,7, - 2,9,51,250,115,29,0,0,0,135,20,49,0,156,19,65, - 0,0,177,9,61,3,188,1,61,3,193,0,45,65,49,3, - 193,48,1,65,49,3,78,99,4,0,0,0,0,0,0,0, - 0,0,0,0,5,0,0,0,3,0,0,0,243,58,1,0, - 0,151,0,103,0,125,4,124,2,68,0,93,118,0,0,125, - 5,116,1,0,0,0,0,0,0,0,0,124,5,116,2,0, - 0,0,0,0,0,0,0,171,2,0,0,0,0,0,0,115, - 1,140,20,124,0,106,5,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,124,5,171,1,0,0,0, - 0,0,0,125,6,124,6,128,1,140,40,124,6,106,7,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,1,124,3,171,2,0,0,0,0,0,0,125,7,124, - 7,128,1,140,61,124,7,106,8,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,129,4,124,7,99, - 2,1,0,83,0,124,7,106,10,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,125,8,124,8,128, - 11,116,13,0,0,0,0,0,0,0,0,100,2,171,1,0, - 0,0,0,0,0,130,1,124,4,106,15,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,8,171, - 1,0,0,0,0,0,0,1,0,140,120,4,0,116,16,0, - 0,0,0,0,0,0,0,106,19,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,1,100,1,171, - 2,0,0,0,0,0,0,125,7,124,4,124,7,95,5,0, - 0,0,0,0,0,0,0,124,7,83,0,41,3,122,63,70, - 105,110,100,32,116,104,101,32,108,111,97,100,101,114,32,111, - 114,32,110,97,109,101,115,112,97,99,101,95,112,97,116,104, - 32,102,111,114,32,116,104,105,115,32,109,111,100,117,108,101, - 47,112,97,99,107,97,103,101,32,110,97,109,101,46,78,122, - 19,115,112,101,99,32,109,105,115,115,105,110,103,32,108,111, - 97,100,101,114,41,10,114,232,0,0,0,114,136,0,0,0, - 114,2,2,0,0,114,58,1,0,0,114,4,1,0,0,114, - 5,1,0,0,114,188,0,0,0,114,240,0,0,0,114,207, - 0,0,0,114,11,1,0,0,41,9,114,50,1,0,0,114, - 42,1,0,0,114,68,0,0,0,114,57,1,0,0,218,14, - 110,97,109,101,115,112,97,99,101,95,112,97,116,104,218,5, - 101,110,116,114,121,114,249,1,0,0,114,16,1,0,0,218, - 8,112,111,114,116,105,111,110,115,115,9,0,0,0,32,32, - 32,32,32,32,32,32,32,114,10,0,0,0,218,9,95,103, - 101,116,95,115,112,101,99,122,20,80,97,116,104,70,105,110, - 100,101,114,46,95,103,101,116,95,115,112,101,99,211,5,0, - 0,115,173,0,0,0,128,0,240,10,0,26,28,136,14,219, - 21,25,136,69,220,19,29,152,101,164,83,212,19,41,216,16, - 24,216,21,24,215,21,45,209,21,45,168,101,211,21,52,136, - 70,216,15,21,209,15,33,216,23,29,215,23,39,209,23,39, - 168,8,176,38,211,23,57,144,4,216,19,23,144,60,216,20, - 28,216,19,23,151,59,145,59,208,19,42,216,27,31,146,75, - 216,27,31,215,27,58,209,27,58,144,8,216,19,27,208,19, - 35,220,26,37,208,38,59,211,26,60,208,20,60,240,10,0, - 17,31,215,16,37,209,16,37,160,104,213,16,47,240,35,0, - 22,26,244,38,0,20,30,215,19,40,209,19,40,168,24,176, - 52,211,19,56,136,68,216,46,60,136,68,212,12,43,216,19, - 23,136,75,114,28,0,0,0,99,4,0,0,0,0,0,0, - 0,0,0,0,0,5,0,0,0,3,0,0,0,243,214,0, - 0,0,151,0,124,2,128,16,116,0,0,0,0,0,0,0, - 0,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,125,2,124,0,106,5,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,1, - 124,2,124,3,171,3,0,0,0,0,0,0,125,4,124,4, - 128,1,121,1,124,4,106,6,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,128,52,124,4,106,8, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,125,5,124,5,114,37,100,1,124,4,95,5,0,0, - 0,0,0,0,0,0,116,13,0,0,0,0,0,0,0,0, - 124,1,124,5,124,0,106,4,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,171,3,0,0,0,0, - 0,0,124,4,95,4,0,0,0,0,0,0,0,0,124,4, - 83,0,121,1,124,4,83,0,41,2,122,141,84,114,121,32, - 116,111,32,102,105,110,100,32,97,32,115,112,101,99,32,102, - 111,114,32,39,102,117,108,108,110,97,109,101,39,32,111,110, - 32,115,121,115,46,112,97,116,104,32,111,114,32,39,112,97, - 116,104,39,46,10,10,32,32,32,32,32,32,32,32,84,104, - 101,32,115,101,97,114,99,104,32,105,115,32,98,97,115,101, - 100,32,111,110,32,115,121,115,46,112,97,116,104,95,104,111, - 111,107,115,32,97,110,100,32,115,121,115,46,112,97,116,104, - 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,46, - 10,32,32,32,32,32,32,32,32,78,41,7,114,20,0,0, - 0,114,68,0,0,0,114,7,2,0,0,114,4,1,0,0, - 114,5,1,0,0,114,9,1,0,0,114,185,1,0,0,41, - 6,114,50,1,0,0,114,42,1,0,0,114,68,0,0,0, - 114,57,1,0,0,114,16,1,0,0,114,4,2,0,0,115, - 6,0,0,0,32,32,32,32,32,32,114,10,0,0,0,114, - 58,1,0,0,122,20,80,97,116,104,70,105,110,100,101,114, - 46,102,105,110,100,95,115,112,101,99,240,5,0,0,115,114, - 0,0,0,128,0,240,12,0,12,16,136,60,220,19,22,151, - 56,145,56,136,68,216,15,18,143,125,137,125,152,88,160,116, - 168,86,211,15,52,136,4,216,11,15,136,60,216,19,23,216, - 13,17,143,91,137,91,208,13,32,216,29,33,215,29,60,209, - 29,60,136,78,217,15,29,240,6,0,31,35,144,4,148,11, - 220,50,64,192,24,200,62,208,91,94,215,91,104,209,91,104, - 211,50,105,144,4,212,16,47,216,23,27,144,11,224,23,27, - 224,19,23,136,75,114,28,0,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,5,0,0,0,15,0,0,0,243, - 50,0,0,0,151,0,100,1,100,2,108,0,109,1,125,2, - 1,0,2,0,124,2,106,4,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,0,105,0,124,1, - 164,1,142,1,83,0,41,3,97,32,1,0,0,10,32,32, - 32,32,32,32,32,32,70,105,110,100,32,100,105,115,116,114, - 105,98,117,116,105,111,110,115,46,10,10,32,32,32,32,32, - 32,32,32,82,101,116,117,114,110,32,97,110,32,105,116,101, - 114,97,98,108,101,32,111,102,32,97,108,108,32,68,105,115, - 116,114,105,98,117,116,105,111,110,32,105,110,115,116,97,110, - 99,101,115,32,99,97,112,97,98,108,101,32,111,102,10,32, - 32,32,32,32,32,32,32,108,111,97,100,105,110,103,32,116, - 104,101,32,109,101,116,97,100,97,116,97,32,102,111,114,32, - 112,97,99,107,97,103,101,115,32,109,97,116,99,104,105,110, - 103,32,96,96,99,111,110,116,101,120,116,46,110,97,109,101, - 96,96,10,32,32,32,32,32,32,32,32,40,111,114,32,97, - 108,108,32,110,97,109,101,115,32,105,102,32,96,96,78,111, - 110,101,96,96,32,105,110,100,105,99,97,116,101,100,41,32, - 97,108,111,110,103,32,116,104,101,32,112,97,116,104,115,32, - 105,110,32,116,104,101,32,108,105,115,116,10,32,32,32,32, - 32,32,32,32,111,102,32,100,105,114,101,99,116,111,114,105, - 101,115,32,96,96,99,111,110,116,101,120,116,46,112,97,116, - 104,96,96,46,10,32,32,32,32,32,32,32,32,114,1,0, - 0,0,114,243,1,0,0,41,3,114,248,1,0,0,114,244, - 1,0,0,218,18,102,105,110,100,95,100,105,115,116,114,105, - 98,117,116,105,111,110,115,41,3,114,190,0,0,0,114,191, - 0,0,0,114,244,1,0,0,115,3,0,0,0,32,32,32, - 114,10,0,0,0,114,10,2,0,0,122,29,80,97,116,104, - 70,105,110,100,101,114,46,102,105,110,100,95,100,105,115,116, - 114,105,98,117,116,105,111,110,115,8,6,0,0,115,32,0, - 0,0,128,0,245,20,0,9,58,216,15,52,208,15,33,215, - 15,52,209,15,52,176,100,208,15,69,184,102,209,15,69,208, - 8,69,114,28,0,0,0,114,77,0,0,0,114,59,1,0, - 0,41,12,114,196,0,0,0,114,195,0,0,0,114,197,0, - 0,0,114,198,0,0,0,114,62,1,0,0,114,242,1,0, - 0,114,254,1,0,0,114,63,1,0,0,114,2,2,0,0, - 114,7,2,0,0,114,58,1,0,0,114,10,2,0,0,114, - 30,0,0,0,114,28,0,0,0,114,10,0,0,0,114,240, - 1,0,0,114,240,1,0,0,154,5,0,0,115,125,0,0, - 0,132,0,225,4,72,224,5,17,241,2,15,5,47,243,3, - 0,6,18,240,2,15,5,47,240,34,0,6,18,241,2,10, - 5,24,243,3,0,6,18,240,2,10,5,24,240,24,0,6, - 17,241,2,19,5,22,243,3,0,6,17,240,2,19,5,22, - 240,42,0,6,17,242,2,26,5,24,243,3,0,6,17,240, - 2,26,5,24,240,56,0,6,17,242,2,21,5,24,243,3, - 0,6,17,240,2,21,5,24,240,46,0,6,18,241,2,10, - 5,70,1,243,3,0,6,18,241,2,10,5,70,1,114,28, - 0,0,0,114,240,1,0,0,99,0,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,0,0,0,0,243,70,0, - 0,0,151,0,101,0,90,1,100,0,90,2,100,1,90,3, - 100,2,132,0,90,4,100,3,132,0,90,5,100,4,132,0, - 90,6,100,10,100,6,132,1,90,7,100,7,132,0,90,8, - 101,9,100,8,132,0,171,0,0,0,0,0,0,0,90,10, - 100,9,132,0,90,11,121,5,41,11,218,10,70,105,108,101, - 70,105,110,100,101,114,122,172,70,105,108,101,45,98,97,115, - 101,100,32,102,105,110,100,101,114,46,10,10,32,32,32,32, - 73,110,116,101,114,97,99,116,105,111,110,115,32,119,105,116, - 104,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101, - 109,32,97,114,101,32,99,97,99,104,101,100,32,102,111,114, - 32,112,101,114,102,111,114,109,97,110,99,101,44,32,98,101, - 105,110,103,10,32,32,32,32,114,101,102,114,101,115,104,101, - 100,32,119,104,101,110,32,116,104,101,32,100,105,114,101,99, - 116,111,114,121,32,116,104,101,32,102,105,110,100,101,114,32, - 105,115,32,104,97,110,100,108,105,110,103,32,104,97,115,32, - 98,101,101,110,32,109,111,100,105,102,105,101,100,46,10,10, - 32,32,32,32,99,2,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,7,0,0,0,243,12,1,0,0,135,5, - 151,0,103,0,125,3,124,2,68,0,93,31,0,0,92,2, - 0,0,138,5,125,4,124,3,106,1,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,136,5,102,1, - 100,1,132,8,124,4,68,0,171,0,0,0,0,0,0,0, - 171,1,0,0,0,0,0,0,1,0,140,33,4,0,124,3, - 124,0,95,1,0,0,0,0,0,0,0,0,124,1,114,5, - 124,1,100,2,107,40,0,0,114,26,116,5,0,0,0,0, - 0,0,0,0,106,6,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0, - 124,0,95,4,0,0,0,0,0,0,0,0,110,16,116,11, - 0,0,0,0,0,0,0,0,124,1,171,1,0,0,0,0, - 0,0,124,0,95,4,0,0,0,0,0,0,0,0,100,3, - 124,0,95,6,0,0,0,0,0,0,0,0,116,15,0,0, + 25,0,0,0,125,2,124,2,83,0,35,0,116,4,0,0, + 0,0,0,0,0,0,36,0,114,3,1,0,89,0,121,2, + 119,0,120,3,89,0,119,1,35,0,116,10,0,0,0,0, + 0,0,0,0,36,0,114,40,1,0,124,0,106,13,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 124,1,171,1,0,0,0,0,0,0,125,2,124,2,116,6, + 0,0,0,0,0,0,0,0,106,8,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,124,1,60,0, + 0,0,89,0,124,2,83,0,119,0,120,3,89,0,119,1, + 41,3,122,210,71,101,116,32,116,104,101,32,102,105,110,100, + 101,114,32,102,111,114,32,116,104,101,32,112,97,116,104,32, + 101,110,116,114,121,32,102,114,111,109,32,115,121,115,46,112, + 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, + 104,101,46,10,10,32,32,32,32,32,32,32,32,73,102,32, + 116,104,101,32,112,97,116,104,32,101,110,116,114,121,32,105, + 115,32,110,111,116,32,105,110,32,116,104,101,32,99,97,99, + 104,101,44,32,102,105,110,100,32,116,104,101,32,97,112,112, + 114,111,112,114,105,97,116,101,32,102,105,110,100,101,114,10, + 32,32,32,32,32,32,32,32,97,110,100,32,99,97,99,104, + 101,32,105,116,46,32,73,102,32,110,111,32,102,105,110,100, + 101,114,32,105,115,32,97,118,97,105,108,97,98,108,101,44, + 32,115,116,111,114,101,32,78,111,110,101,46,10,10,32,32, + 32,32,32,32,32,32,114,12,0,0,0,78,41,7,114,23, + 0,0,0,114,95,0,0,0,218,17,70,105,108,101,78,111, + 116,70,111,117,110,100,69,114,114,111,114,114,20,0,0,0, + 114,247,1,0,0,218,8,75,101,121,69,114,114,111,114,114, + 255,1,0,0,41,3,114,51,1,0,0,114,68,0,0,0, + 114,250,1,0,0,115,3,0,0,0,32,32,32,114,10,0, + 0,0,218,20,95,112,97,116,104,95,105,109,112,111,114,116, + 101,114,95,99,97,99,104,101,122,31,80,97,116,104,70,105, + 110,100,101,114,46,95,112,97,116,104,95,105,109,112,111,114, + 116,101,114,95,99,97,99,104,101,193,5,0,0,115,128,0, + 0,0,128,0,240,16,0,12,16,144,50,138,58,240,2,5, + 13,28,220,23,26,151,122,145,122,147,124,144,4,240,10,4, + 9,51,220,21,24,215,21,44,209,21,44,168,84,209,21,50, + 136,70,240,8,0,16,22,136,13,248,244,19,0,20,37,242, + 0,3,13,28,241,6,0,24,28,240,7,3,13,28,251,244, + 12,0,16,24,242,0,2,9,51,216,21,24,151,95,145,95, + 160,84,211,21,42,136,70,216,44,50,140,67,215,12,35,209, + 12,35,160,68,210,12,41,216,15,21,136,13,240,7,2,9, + 51,250,115,29,0,0,0,135,20,49,0,156,19,65,0,0, + 177,9,61,3,188,1,61,3,193,0,45,65,49,3,193,48, + 1,65,49,3,78,99,4,0,0,0,0,0,0,0,0,0, + 0,0,5,0,0,0,3,0,0,0,243,58,1,0,0,151, + 0,103,0,125,4,124,2,68,0,93,118,0,0,125,5,116, + 1,0,0,0,0,0,0,0,0,124,5,116,2,0,0,0, + 0,0,0,0,0,171,2,0,0,0,0,0,0,115,1,140, + 20,124,0,106,5,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,5,171,1,0,0,0,0,0, + 0,125,6,124,6,128,1,140,40,124,6,106,7,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, + 1,124,3,171,2,0,0,0,0,0,0,125,7,124,7,128, + 1,140,61,124,7,106,8,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,129,4,124,7,99,2,1, + 0,83,0,124,7,106,10,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,125,8,124,8,128,11,116, + 13,0,0,0,0,0,0,0,0,100,2,171,1,0,0,0, + 0,0,0,130,1,124,4,106,15,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,8,171,1,0, + 0,0,0,0,0,1,0,140,120,4,0,116,16,0,0,0, + 0,0,0,0,0,106,19,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,1,100,1,171,2,0, + 0,0,0,0,0,125,7,124,4,124,7,95,5,0,0,0, + 0,0,0,0,0,124,7,83,0,41,3,122,63,70,105,110, + 100,32,116,104,101,32,108,111,97,100,101,114,32,111,114,32, + 110,97,109,101,115,112,97,99,101,95,112,97,116,104,32,102, + 111,114,32,116,104,105,115,32,109,111,100,117,108,101,47,112, + 97,99,107,97,103,101,32,110,97,109,101,46,78,122,19,115, + 112,101,99,32,109,105,115,115,105,110,103,32,108,111,97,100, + 101,114,41,10,114,233,0,0,0,114,137,0,0,0,114,3, + 2,0,0,114,59,1,0,0,114,5,1,0,0,114,6,1, + 0,0,114,189,0,0,0,114,241,0,0,0,114,208,0,0, + 0,114,12,1,0,0,41,9,114,51,1,0,0,114,43,1, + 0,0,114,68,0,0,0,114,58,1,0,0,218,14,110,97, + 109,101,115,112,97,99,101,95,112,97,116,104,218,5,101,110, + 116,114,121,114,250,1,0,0,114,17,1,0,0,218,8,112, + 111,114,116,105,111,110,115,115,9,0,0,0,32,32,32,32, + 32,32,32,32,32,114,10,0,0,0,218,9,95,103,101,116, + 95,115,112,101,99,122,20,80,97,116,104,70,105,110,100,101, + 114,46,95,103,101,116,95,115,112,101,99,215,5,0,0,115, + 173,0,0,0,128,0,240,10,0,26,28,136,14,219,21,25, + 136,69,220,19,29,152,101,164,83,212,19,41,216,16,24,216, + 21,24,215,21,45,209,21,45,168,101,211,21,52,136,70,216, + 15,21,209,15,33,216,23,29,215,23,39,209,23,39,168,8, + 176,38,211,23,57,144,4,216,19,23,144,60,216,20,28,216, + 19,23,151,59,145,59,208,19,42,216,27,31,146,75,216,27, + 31,215,27,58,209,27,58,144,8,216,19,27,208,19,35,220, + 26,37,208,38,59,211,26,60,208,20,60,240,10,0,17,31, + 215,16,37,209,16,37,160,104,213,16,47,240,35,0,22,26, + 244,38,0,20,30,215,19,40,209,19,40,168,24,176,52,211, + 19,56,136,68,216,46,60,136,68,212,12,43,216,19,23,136, + 75,114,28,0,0,0,99,4,0,0,0,0,0,0,0,0, + 0,0,0,5,0,0,0,3,0,0,0,243,214,0,0,0, + 151,0,124,2,128,16,116,0,0,0,0,0,0,0,0,0, + 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,125,2,124,0,106,5,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,124,1,124,2, + 124,3,171,3,0,0,0,0,0,0,125,4,124,4,128,1, + 121,1,124,4,106,6,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,128,52,124,4,106,8,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 125,5,124,5,114,37,100,1,124,4,95,5,0,0,0,0, + 0,0,0,0,116,13,0,0,0,0,0,0,0,0,124,1, + 124,5,124,0,106,4,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,171,3,0,0,0,0,0,0, + 124,4,95,4,0,0,0,0,0,0,0,0,124,4,83,0, + 121,1,124,4,83,0,41,2,122,141,84,114,121,32,116,111, + 32,102,105,110,100,32,97,32,115,112,101,99,32,102,111,114, + 32,39,102,117,108,108,110,97,109,101,39,32,111,110,32,115, + 121,115,46,112,97,116,104,32,111,114,32,39,112,97,116,104, + 39,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, + 115,101,97,114,99,104,32,105,115,32,98,97,115,101,100,32, + 111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107, + 115,32,97,110,100,32,115,121,115,46,112,97,116,104,95,105, + 109,112,111,114,116,101,114,95,99,97,99,104,101,46,10,32, + 32,32,32,32,32,32,32,78,41,7,114,20,0,0,0,114, + 68,0,0,0,114,8,2,0,0,114,5,1,0,0,114,6, + 1,0,0,114,10,1,0,0,114,186,1,0,0,41,6,114, + 51,1,0,0,114,43,1,0,0,114,68,0,0,0,114,58, + 1,0,0,114,17,1,0,0,114,5,2,0,0,115,6,0, + 0,0,32,32,32,32,32,32,114,10,0,0,0,114,59,1, + 0,0,122,20,80,97,116,104,70,105,110,100,101,114,46,102, + 105,110,100,95,115,112,101,99,244,5,0,0,115,114,0,0, + 0,128,0,240,12,0,12,16,136,60,220,19,22,151,56,145, + 56,136,68,216,15,18,143,125,137,125,152,88,160,116,168,86, + 211,15,52,136,4,216,11,15,136,60,216,19,23,216,13,17, + 143,91,137,91,208,13,32,216,29,33,215,29,60,209,29,60, + 136,78,217,15,29,240,6,0,31,35,144,4,148,11,220,50, + 64,192,24,200,62,208,91,94,215,91,104,209,91,104,211,50, + 105,144,4,212,16,47,216,23,27,144,11,224,23,27,224,19, + 23,136,75,114,28,0,0,0,99,0,0,0,0,0,0,0, + 0,0,0,0,0,5,0,0,0,15,0,0,0,243,50,0, + 0,0,151,0,100,1,100,2,108,0,109,1,125,2,1,0, + 2,0,124,2,106,4,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,124,0,105,0,124,1,164,1, + 142,1,83,0,41,3,97,32,1,0,0,10,32,32,32,32, + 32,32,32,32,70,105,110,100,32,100,105,115,116,114,105,98, + 117,116,105,111,110,115,46,10,10,32,32,32,32,32,32,32, + 32,82,101,116,117,114,110,32,97,110,32,105,116,101,114,97, + 98,108,101,32,111,102,32,97,108,108,32,68,105,115,116,114, + 105,98,117,116,105,111,110,32,105,110,115,116,97,110,99,101, + 115,32,99,97,112,97,98,108,101,32,111,102,10,32,32,32, + 32,32,32,32,32,108,111,97,100,105,110,103,32,116,104,101, + 32,109,101,116,97,100,97,116,97,32,102,111,114,32,112,97, + 99,107,97,103,101,115,32,109,97,116,99,104,105,110,103,32, + 96,96,99,111,110,116,101,120,116,46,110,97,109,101,96,96, + 10,32,32,32,32,32,32,32,32,40,111,114,32,97,108,108, + 32,110,97,109,101,115,32,105,102,32,96,96,78,111,110,101, + 96,96,32,105,110,100,105,99,97,116,101,100,41,32,97,108, + 111,110,103,32,116,104,101,32,112,97,116,104,115,32,105,110, + 32,116,104,101,32,108,105,115,116,10,32,32,32,32,32,32, + 32,32,111,102,32,100,105,114,101,99,116,111,114,105,101,115, + 32,96,96,99,111,110,116,101,120,116,46,112,97,116,104,96, + 96,46,10,32,32,32,32,32,32,32,32,114,1,0,0,0, + 114,244,1,0,0,41,3,114,249,1,0,0,114,245,1,0, + 0,218,18,102,105,110,100,95,100,105,115,116,114,105,98,117, + 116,105,111,110,115,41,3,114,191,0,0,0,114,192,0,0, + 0,114,245,1,0,0,115,3,0,0,0,32,32,32,114,10, + 0,0,0,114,11,2,0,0,122,29,80,97,116,104,70,105, + 110,100,101,114,46,102,105,110,100,95,100,105,115,116,114,105, + 98,117,116,105,111,110,115,12,6,0,0,115,32,0,0,0, + 128,0,245,20,0,9,58,216,15,52,208,15,33,215,15,52, + 209,15,52,176,100,208,15,69,184,102,209,15,69,208,8,69, + 114,28,0,0,0,114,77,0,0,0,114,60,1,0,0,41, + 12,114,197,0,0,0,114,196,0,0,0,114,198,0,0,0, + 114,199,0,0,0,114,63,1,0,0,114,243,1,0,0,114, + 255,1,0,0,114,64,1,0,0,114,3,2,0,0,114,8, + 2,0,0,114,59,1,0,0,114,11,2,0,0,114,30,0, + 0,0,114,28,0,0,0,114,10,0,0,0,114,241,1,0, + 0,114,241,1,0,0,158,5,0,0,115,125,0,0,0,132, + 0,225,4,72,224,5,17,241,2,15,5,47,243,3,0,6, + 18,240,2,15,5,47,240,34,0,6,18,241,2,10,5,24, + 243,3,0,6,18,240,2,10,5,24,240,24,0,6,17,241, + 2,19,5,22,243,3,0,6,17,240,2,19,5,22,240,42, + 0,6,17,242,2,26,5,24,243,3,0,6,17,240,2,26, + 5,24,240,56,0,6,17,242,2,21,5,24,243,3,0,6, + 17,240,2,21,5,24,240,46,0,6,18,241,2,10,5,70, + 1,243,3,0,6,18,241,2,10,5,70,1,114,28,0,0, + 0,114,241,1,0,0,99,0,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,0,0,0,0,243,70,0,0,0, + 151,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, + 132,0,90,4,100,3,132,0,90,5,100,4,132,0,90,6, + 100,10,100,6,132,1,90,7,100,7,132,0,90,8,101,9, + 100,8,132,0,171,0,0,0,0,0,0,0,90,10,100,9, + 132,0,90,11,121,5,41,11,218,10,70,105,108,101,70,105, + 110,100,101,114,122,172,70,105,108,101,45,98,97,115,101,100, + 32,102,105,110,100,101,114,46,10,10,32,32,32,32,73,110, + 116,101,114,97,99,116,105,111,110,115,32,119,105,116,104,32, + 116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,32, + 97,114,101,32,99,97,99,104,101,100,32,102,111,114,32,112, + 101,114,102,111,114,109,97,110,99,101,44,32,98,101,105,110, + 103,10,32,32,32,32,114,101,102,114,101,115,104,101,100,32, + 119,104,101,110,32,116,104,101,32,100,105,114,101,99,116,111, + 114,121,32,116,104,101,32,102,105,110,100,101,114,32,105,115, + 32,104,97,110,100,108,105,110,103,32,104,97,115,32,98,101, + 101,110,32,109,111,100,105,102,105,101,100,46,10,10,32,32, + 32,32,99,2,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,7,0,0,0,243,12,1,0,0,135,5,151,0, + 103,0,125,3,124,2,68,0,93,31,0,0,92,2,0,0, + 138,5,125,4,124,3,106,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,136,5,102,1,100,1, + 132,8,124,4,68,0,171,0,0,0,0,0,0,0,171,1, + 0,0,0,0,0,0,1,0,140,33,4,0,124,3,124,0, + 95,1,0,0,0,0,0,0,0,0,124,1,114,5,124,1, + 100,2,107,40,0,0,114,26,116,5,0,0,0,0,0,0, + 0,0,106,6,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,171,0,0,0,0,0,0,0,124,0, - 95,8,0,0,0,0,0,0,0,0,116,15,0,0,0,0, - 0,0,0,0,171,0,0,0,0,0,0,0,124,0,95,9, - 0,0,0,0,0,0,0,0,121,4,41,5,122,154,73,110, - 105,116,105,97,108,105,122,101,32,119,105,116,104,32,116,104, - 101,32,112,97,116,104,32,116,111,32,115,101,97,114,99,104, - 32,111,110,32,97,110,100,32,97,32,118,97,114,105,97,98, - 108,101,32,110,117,109,98,101,114,32,111,102,10,32,32,32, - 32,32,32,32,32,50,45,116,117,112,108,101,115,32,99,111, - 110,116,97,105,110,105,110,103,32,116,104,101,32,108,111,97, - 100,101,114,32,97,110,100,32,116,104,101,32,102,105,108,101, - 32,115,117,102,102,105,120,101,115,32,116,104,101,32,108,111, - 97,100,101,114,10,32,32,32,32,32,32,32,32,114,101,99, - 111,103,110,105,122,101,115,46,99,1,0,0,0,0,0,0, - 0,0,0,0,0,3,0,0,0,51,0,0,0,243,38,0, - 0,0,149,1,75,0,1,0,151,0,124,0,93,8,0,0, - 125,1,124,1,137,2,102,2,150,1,151,1,1,0,140,10, - 4,0,121,0,173,3,119,1,114,77,0,0,0,114,30,0, - 0,0,41,3,114,8,0,0,0,114,178,1,0,0,114,4, - 1,0,0,115,3,0,0,0,32,32,128,114,10,0,0,0, - 114,11,0,0,0,122,38,70,105,108,101,70,105,110,100,101, - 114,46,95,95,105,110,105,116,95,95,46,60,108,111,99,97, - 108,115,62,46,60,103,101,110,101,120,112,114,62,37,6,0, - 0,115,23,0,0,0,248,232,0,248,128,0,208,26,67,185, - 40,176,6,152,70,160,70,212,27,43,185,40,249,115,4,0, - 0,0,131,14,17,1,114,103,0,0,0,114,170,0,0,0, - 78,41,10,114,240,0,0,0,218,8,95,108,111,97,100,101, - 114,115,114,23,0,0,0,114,95,0,0,0,114,68,0,0, - 0,114,105,0,0,0,218,11,95,112,97,116,104,95,109,116, - 105,109,101,218,3,115,101,116,218,11,95,112,97,116,104,95, - 99,97,99,104,101,218,19,95,114,101,108,97,120,101,100,95, - 112,97,116,104,95,99,97,99,104,101,41,6,114,189,0,0, - 0,114,68,0,0,0,218,14,108,111,97,100,101,114,95,100, - 101,116,97,105,108,115,218,7,108,111,97,100,101,114,115,114, - 18,1,0,0,114,4,1,0,0,115,6,0,0,0,32,32, - 32,32,32,64,114,10,0,0,0,114,67,1,0,0,122,19, - 70,105,108,101,70,105,110,100,101,114,46,95,95,105,110,105, - 116,95,95,31,6,0,0,115,112,0,0,0,248,128,0,240, - 8,0,19,21,136,7,219,32,46,209,12,28,136,70,144,72, - 216,12,19,143,78,137,78,211,26,67,185,40,211,26,67,213, - 12,67,240,3,0,33,47,224,24,31,136,4,140,13,225,15, - 19,144,116,152,115,146,123,220,24,27,159,10,153,10,155,12, - 136,68,141,73,228,24,37,160,100,211,24,43,136,68,140,73, - 216,27,29,136,4,212,8,24,220,27,30,155,53,136,4,212, - 8,24,220,35,38,163,53,136,4,213,8,32,114,28,0,0, - 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,3,0,0,0,243,18,0,0,0,151,0,100,1,124, - 0,95,0,0,0,0,0,0,0,0,0,121,2,41,3,122, - 31,73,110,118,97,108,105,100,97,116,101,32,116,104,101,32, - 100,105,114,101,99,116,111,114,121,32,109,116,105,109,101,46, - 114,170,0,0,0,78,41,1,114,16,2,0,0,114,131,1, - 0,0,115,1,0,0,0,32,114,10,0,0,0,114,242,1, - 0,0,122,28,70,105,108,101,70,105,110,100,101,114,46,105, - 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, - 48,6,0,0,115,10,0,0,0,128,0,224,27,29,136,4, - 213,8,24,114,28,0,0,0,99,6,0,0,0,0,0,0, - 0,0,0,0,0,6,0,0,0,3,0,0,0,243,50,0, - 0,0,151,0,2,0,124,1,124,2,124,3,171,2,0,0, - 0,0,0,0,125,6,116,1,0,0,0,0,0,0,0,0, - 124,2,124,3,124,6,124,4,172,1,171,4,0,0,0,0, - 0,0,83,0,41,2,78,114,3,1,0,0,41,1,114,20, - 1,0,0,41,7,114,189,0,0,0,114,17,1,0,0,114, - 42,1,0,0,114,68,0,0,0,218,4,115,109,115,108,114, - 57,1,0,0,114,4,1,0,0,115,7,0,0,0,32,32, - 32,32,32,32,32,114,10,0,0,0,114,7,2,0,0,122, - 20,70,105,108,101,70,105,110,100,101,114,46,95,103,101,116, - 95,115,112,101,99,52,6,0,0,115,38,0,0,0,128,0, - 217,17,29,152,104,168,4,211,17,45,136,6,220,15,38,160, - 120,176,20,184,102,216,66,70,244,3,1,16,72,1,240,0, - 1,9,72,1,114,28,0,0,0,78,99,3,0,0,0,0, - 0,0,0,0,0,0,0,8,0,0,0,3,0,0,0,243, - 192,3,0,0,151,0,100,1,125,3,124,1,106,1,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 100,2,171,1,0,0,0,0,0,0,100,3,25,0,0,0, - 125,4,9,0,116,3,0,0,0,0,0,0,0,0,124,0, - 106,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,120,1,115,20,1,0,116,7,0,0,0,0, - 0,0,0,0,106,8,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0, - 171,1,0,0,0,0,0,0,106,10,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,125,5,124,5, - 124,0,106,14,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,107,55,0,0,114,23,124,0,106,17, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,171,0,0,0,0,0,0,0,1,0,124,5,124,0, - 95,7,0,0,0,0,0,0,0,0,116,19,0,0,0,0, - 0,0,0,0,171,0,0,0,0,0,0,0,114,29,124,0, - 106,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,125,6,124,4,106,23,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,171,0,0,0, - 0,0,0,0,125,7,110,14,124,0,106,24,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,6, - 124,4,125,7,124,7,124,6,118,0,114,105,116,27,0,0, - 0,0,0,0,0,0,124,0,106,4,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,4,171,2, - 0,0,0,0,0,0,125,8,124,0,106,28,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,0, - 93,57,0,0,92,2,0,0,125,9,125,10,100,5,124,9, - 122,0,0,0,125,11,116,27,0,0,0,0,0,0,0,0, - 124,8,124,11,171,2,0,0,0,0,0,0,125,12,116,31, - 0,0,0,0,0,0,0,0,124,12,171,1,0,0,0,0, - 0,0,115,1,140,35,124,0,106,33,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,10,124,1, - 124,12,124,8,103,1,124,2,171,5,0,0,0,0,0,0, - 99,2,1,0,83,0,4,0,116,35,0,0,0,0,0,0, - 0,0,124,8,171,1,0,0,0,0,0,0,125,3,124,0, - 106,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,68,0,93,97,0,0,92,2,0,0,125,9, - 125,10,9,0,116,27,0,0,0,0,0,0,0,0,124,0, - 106,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,4,124,9,122,0,0,0,171,2,0,0, - 0,0,0,0,125,12,116,38,0,0,0,0,0,0,0,0, - 106,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,100,7,124,12,100,3,172,8,171,3,0,0, - 0,0,0,0,1,0,124,7,124,9,122,0,0,0,124,6, - 118,0,115,1,140,64,116,31,0,0,0,0,0,0,0,0, - 124,12,171,1,0,0,0,0,0,0,115,1,140,76,124,0, - 106,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,10,124,1,124,12,100,6,124,2,171,5, - 0,0,0,0,0,0,99,2,1,0,83,0,4,0,124,3, - 114,54,116,38,0,0,0,0,0,0,0,0,106,41,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 100,9,127,8,171,2,0,0,0,0,0,0,1,0,116,38, - 0,0,0,0,0,0,0,0,106,43,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,1,100,6, - 171,2,0,0,0,0,0,0,125,13,124,8,103,1,124,13, - 95,22,0,0,0,0,0,0,0,0,124,13,83,0,121,6, - 35,0,116,12,0,0,0,0,0,0,0,0,36,0,114,6, - 1,0,100,4,125,5,89,0,144,1,140,127,119,0,120,3, - 89,0,119,1,35,0,116,36,0,0,0,0,0,0,0,0, - 36,0,114,4,1,0,89,0,1,0,121,6,119,0,120,3, - 89,0,119,1,41,10,122,111,84,114,121,32,116,111,32,102, - 105,110,100,32,97,32,115,112,101,99,32,102,111,114,32,116, - 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, - 117,108,101,46,10,10,32,32,32,32,32,32,32,32,82,101, - 116,117,114,110,115,32,116,104,101,32,109,97,116,99,104,105, - 110,103,32,115,112,101,99,44,32,111,114,32,78,111,110,101, - 32,105,102,32,110,111,116,32,102,111,117,110,100,46,10,32, - 32,32,32,32,32,32,32,70,114,103,0,0,0,114,52,0, - 0,0,114,170,0,0,0,114,67,1,0,0,78,122,9,116, - 114,121,105,110,103,32,123,125,41,1,218,9,118,101,114,98, - 111,115,105,116,121,122,25,112,111,115,115,105,98,108,101,32, - 110,97,109,101,115,112,97,99,101,32,102,111,114,32,123,125, - 41,23,114,131,0,0,0,114,85,0,0,0,114,68,0,0, - 0,114,23,0,0,0,114,95,0,0,0,114,152,1,0,0, - 114,87,0,0,0,114,16,2,0,0,218,11,95,102,105,108, - 108,95,99,97,99,104,101,114,27,0,0,0,114,19,2,0, - 0,114,172,0,0,0,114,18,2,0,0,114,72,0,0,0, - 114,15,2,0,0,114,93,0,0,0,114,7,2,0,0,114, - 96,0,0,0,114,138,0,0,0,114,207,0,0,0,114,215, - 0,0,0,114,11,1,0,0,114,5,1,0,0,41,14,114, - 189,0,0,0,114,42,1,0,0,114,57,1,0,0,218,12, - 105,115,95,110,97,109,101,115,112,97,99,101,218,11,116,97, - 105,108,95,109,111,100,117,108,101,114,242,0,0,0,218,5, - 99,97,99,104,101,218,12,99,97,99,104,101,95,109,111,100, - 117,108,101,218,9,98,97,115,101,95,112,97,116,104,114,178, - 1,0,0,114,17,1,0,0,218,13,105,110,105,116,95,102, - 105,108,101,110,97,109,101,218,9,102,117,108,108,95,112,97, - 116,104,114,16,1,0,0,115,14,0,0,0,32,32,32,32, - 32,32,32,32,32,32,32,32,32,32,114,10,0,0,0,114, - 58,1,0,0,122,20,70,105,108,101,70,105,110,100,101,114, - 46,102,105,110,100,95,115,112,101,99,57,6,0,0,115,220, - 1,0,0,128,0,240,10,0,24,29,136,12,216,22,30,215, - 22,41,209,22,41,168,35,211,22,46,168,113,209,22,49,136, - 11,240,2,3,9,23,220,20,30,152,116,159,121,153,121,210, - 31,56,172,67,175,74,169,74,171,76,211,20,57,215,20,66, - 209,20,66,136,69,240,6,0,12,17,144,68,215,20,36,209, - 20,36,210,11,36,216,12,16,215,12,28,209,12,28,212,12, - 30,216,31,36,136,68,212,12,28,228,11,22,140,61,216,20, - 24,215,20,44,209,20,44,136,69,216,27,38,215,27,44,209, - 27,44,211,27,46,137,76,224,20,24,215,20,36,209,20,36, - 136,69,216,27,38,136,76,224,11,23,152,53,209,11,32,220, - 24,34,160,52,167,57,161,57,168,107,211,24,58,136,73,216, - 40,44,175,13,172,13,209,16,36,144,6,152,12,216,32,42, - 168,86,209,32,51,144,13,220,28,38,160,121,176,45,211,28, - 64,144,9,220,19,31,160,9,213,19,42,216,27,31,159,62, - 153,62,168,44,184,8,192,41,200,105,200,91,208,90,96,211, - 27,97,210,20,97,240,9,0,41,54,244,16,0,32,43,168, - 57,211,31,53,144,12,224,36,40,167,77,164,77,209,12,32, - 136,70,144,76,240,2,3,13,28,220,28,38,160,116,167,121, - 161,121,176,43,192,6,209,50,70,211,28,71,144,9,244,6, - 0,13,23,215,12,39,209,12,39,168,11,176,89,200,33,208, - 12,39,212,12,76,216,15,27,152,102,209,15,36,168,5,210, - 15,45,220,19,31,160,9,213,19,42,216,27,31,159,62,153, - 62,168,44,184,8,192,41,216,42,46,176,6,243,3,1,28, - 56,242,0,1,21,56,240,17,0,37,50,241,20,0,12,24, - 220,12,22,215,12,39,209,12,39,208,40,67,192,89,212,12, - 79,220,19,29,215,19,40,209,19,40,168,24,176,52,211,19, - 56,136,68,216,47,56,168,107,136,68,212,12,43,216,19,23, - 136,75,216,15,19,248,244,81,1,0,16,23,242,0,1,9, - 23,216,20,22,139,69,240,3,1,9,23,251,244,56,0,20, - 30,242,0,1,13,28,218,23,27,240,3,1,13,28,250,115, - 35,0,0,0,152,53,70,62,0,196,40,25,71,16,2,198, - 62,11,71,13,3,199,12,1,71,13,3,199,16,9,71,29, - 5,199,28,1,71,29,5,99,1,0,0,0,0,0,0,0, - 0,0,0,0,5,0,0,0,3,0,0,0,243,84,2,0, - 0,151,0,124,0,106,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,125,1,9,0,116,3,0, - 0,0,0,0,0,0,0,106,4,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,1,120,1,115, - 20,1,0,116,3,0,0,0,0,0,0,0,0,106,6,0, + 95,4,0,0,0,0,0,0,0,0,110,16,116,11,0,0, + 0,0,0,0,0,0,124,1,171,1,0,0,0,0,0,0, + 124,0,95,4,0,0,0,0,0,0,0,0,100,3,124,0, + 95,6,0,0,0,0,0,0,0,0,116,15,0,0,0,0, + 0,0,0,0,171,0,0,0,0,0,0,0,124,0,95,8, + 0,0,0,0,0,0,0,0,116,15,0,0,0,0,0,0, + 0,0,171,0,0,0,0,0,0,0,124,0,95,9,0,0, + 0,0,0,0,0,0,121,4,41,5,122,154,73,110,105,116, + 105,97,108,105,122,101,32,119,105,116,104,32,116,104,101,32, + 112,97,116,104,32,116,111,32,115,101,97,114,99,104,32,111, + 110,32,97,110,100,32,97,32,118,97,114,105,97,98,108,101, + 32,110,117,109,98,101,114,32,111,102,10,32,32,32,32,32, + 32,32,32,50,45,116,117,112,108,101,115,32,99,111,110,116, + 97,105,110,105,110,103,32,116,104,101,32,108,111,97,100,101, + 114,32,97,110,100,32,116,104,101,32,102,105,108,101,32,115, + 117,102,102,105,120,101,115,32,116,104,101,32,108,111,97,100, + 101,114,10,32,32,32,32,32,32,32,32,114,101,99,111,103, + 110,105,122,101,115,46,99,1,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,51,0,0,0,243,38,0,0,0, + 149,1,75,0,1,0,151,0,124,0,93,8,0,0,125,1, + 124,1,137,2,102,2,150,1,151,1,1,0,140,10,4,0, + 121,0,173,3,119,1,114,77,0,0,0,114,30,0,0,0, + 41,3,114,8,0,0,0,114,179,1,0,0,114,5,1,0, + 0,115,3,0,0,0,32,32,128,114,10,0,0,0,114,11, + 0,0,0,122,38,70,105,108,101,70,105,110,100,101,114,46, + 95,95,105,110,105,116,95,95,46,60,108,111,99,97,108,115, + 62,46,60,103,101,110,101,120,112,114,62,41,6,0,0,115, + 23,0,0,0,248,232,0,248,128,0,208,26,67,185,40,176, + 6,152,70,160,70,212,27,43,185,40,249,115,4,0,0,0, + 131,14,17,1,114,103,0,0,0,114,171,0,0,0,78,41, + 10,114,241,0,0,0,218,8,95,108,111,97,100,101,114,115, + 114,23,0,0,0,114,95,0,0,0,114,68,0,0,0,114, + 105,0,0,0,218,11,95,112,97,116,104,95,109,116,105,109, + 101,218,3,115,101,116,218,11,95,112,97,116,104,95,99,97, + 99,104,101,218,19,95,114,101,108,97,120,101,100,95,112,97, + 116,104,95,99,97,99,104,101,41,6,114,190,0,0,0,114, + 68,0,0,0,218,14,108,111,97,100,101,114,95,100,101,116, + 97,105,108,115,218,7,108,111,97,100,101,114,115,114,19,1, + 0,0,114,5,1,0,0,115,6,0,0,0,32,32,32,32, + 32,64,114,10,0,0,0,114,68,1,0,0,122,19,70,105, + 108,101,70,105,110,100,101,114,46,95,95,105,110,105,116,95, + 95,35,6,0,0,115,112,0,0,0,248,128,0,240,8,0, + 19,21,136,7,219,32,46,209,12,28,136,70,144,72,216,12, + 19,143,78,137,78,211,26,67,185,40,211,26,67,213,12,67, + 240,3,0,33,47,224,24,31,136,4,140,13,225,15,19,144, + 116,152,115,146,123,220,24,27,159,10,153,10,155,12,136,68, + 141,73,228,24,37,160,100,211,24,43,136,68,140,73,216,27, + 29,136,4,212,8,24,220,27,30,155,53,136,4,212,8,24, + 220,35,38,163,53,136,4,213,8,32,114,28,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 3,0,0,0,243,18,0,0,0,151,0,100,1,124,0,95, + 0,0,0,0,0,0,0,0,0,121,2,41,3,122,31,73, + 110,118,97,108,105,100,97,116,101,32,116,104,101,32,100,105, + 114,101,99,116,111,114,121,32,109,116,105,109,101,46,114,171, + 0,0,0,78,41,1,114,17,2,0,0,114,132,1,0,0, + 115,1,0,0,0,32,114,10,0,0,0,114,243,1,0,0, + 122,28,70,105,108,101,70,105,110,100,101,114,46,105,110,118, + 97,108,105,100,97,116,101,95,99,97,99,104,101,115,52,6, + 0,0,115,10,0,0,0,128,0,224,27,29,136,4,213,8, + 24,114,28,0,0,0,99,6,0,0,0,0,0,0,0,0, + 0,0,0,6,0,0,0,3,0,0,0,243,50,0,0,0, + 151,0,2,0,124,1,124,2,124,3,171,2,0,0,0,0, + 0,0,125,6,116,1,0,0,0,0,0,0,0,0,124,2, + 124,3,124,6,124,4,172,1,171,4,0,0,0,0,0,0, + 83,0,41,2,78,114,4,1,0,0,41,1,114,21,1,0, + 0,41,7,114,190,0,0,0,114,18,1,0,0,114,43,1, + 0,0,114,68,0,0,0,218,4,115,109,115,108,114,58,1, + 0,0,114,5,1,0,0,115,7,0,0,0,32,32,32,32, + 32,32,32,114,10,0,0,0,114,8,2,0,0,122,20,70, + 105,108,101,70,105,110,100,101,114,46,95,103,101,116,95,115, + 112,101,99,56,6,0,0,115,38,0,0,0,128,0,217,17, + 29,152,104,168,4,211,17,45,136,6,220,15,38,160,120,176, + 20,184,102,216,66,70,244,3,1,16,72,1,240,0,1,9, + 72,1,114,28,0,0,0,78,99,3,0,0,0,0,0,0, + 0,0,0,0,0,8,0,0,0,3,0,0,0,243,192,3, + 0,0,151,0,100,1,125,3,124,1,106,1,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,2, + 171,1,0,0,0,0,0,0,100,3,25,0,0,0,125,4, + 9,0,116,3,0,0,0,0,0,0,0,0,124,0,106,4, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,171,0,0,0,0,0,0,0,171,1,0,0,0,0,0, - 0,125,2,116,14,0,0,0,0,0,0,0,0,106,16,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,106,19,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,100,1,171,1,0,0,0,0,0,0,115, - 17,116,21,0,0,0,0,0,0,0,0,124,2,171,1,0, - 0,0,0,0,0,124,0,95,11,0,0,0,0,0,0,0, - 0,110,88,116,21,0,0,0,0,0,0,0,0,171,0,0, - 0,0,0,0,0,125,3,124,2,68,0,93,66,0,0,125, - 4,124,4,106,25,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,100,2,171,1,0,0,0,0,0, - 0,92,3,0,0,125,5,125,6,125,7,124,6,114,22,124, - 5,155,0,100,2,124,7,106,27,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,171,0,0,0,0, - 0,0,0,155,0,157,3,125,8,110,2,124,5,125,8,124, - 3,106,29,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,124,8,171,1,0,0,0,0,0,0,1, - 0,140,68,4,0,124,3,124,0,95,11,0,0,0,0,0, - 0,0,0,116,14,0,0,0,0,0,0,0,0,106,16,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,106,19,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,116,30,0,0,0,0,0,0,0,0,171, - 1,0,0,0,0,0,0,114,36,124,2,68,0,143,9,99, - 2,104,0,99,2,93,18,0,0,125,9,124,9,106,27,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,171,0,0,0,0,0,0,0,146,2,140,20,4,0,99, - 2,125,9,124,0,95,16,0,0,0,0,0,0,0,0,121, - 3,121,3,35,0,116,8,0,0,0,0,0,0,0,0,116, - 10,0,0,0,0,0,0,0,0,116,12,0,0,0,0,0, - 0,0,0,102,3,36,0,114,5,1,0,103,0,125,2,89, - 0,140,232,119,0,120,3,89,0,119,1,99,2,1,0,99, - 2,125,9,119,0,41,4,122,68,70,105,108,108,32,116,104, - 101,32,99,97,99,104,101,32,111,102,32,112,111,116,101,110, - 116,105,97,108,32,109,111,100,117,108,101,115,32,97,110,100, - 32,112,97,99,107,97,103,101,115,32,102,111,114,32,116,104, - 105,115,32,100,105,114,101,99,116,111,114,121,46,114,14,0, - 0,0,114,103,0,0,0,78,41,17,114,68,0,0,0,114, - 23,0,0,0,218,7,108,105,115,116,100,105,114,114,95,0, - 0,0,114,0,2,0,0,218,15,80,101,114,109,105,115,115, - 105,111,110,69,114,114,111,114,218,18,78,111,116,65,68,105, - 114,101,99,116,111,114,121,69,114,114,111,114,114,20,0,0, - 0,114,31,0,0,0,114,32,0,0,0,114,17,2,0,0, - 114,18,2,0,0,114,158,0,0,0,114,172,0,0,0,218, - 3,97,100,100,114,33,0,0,0,114,19,2,0,0,41,10, - 114,189,0,0,0,114,68,0,0,0,218,8,99,111,110,116, - 101,110,116,115,218,21,108,111,119,101,114,95,115,117,102,102, - 105,120,95,99,111,110,116,101,110,116,115,114,225,1,0,0, - 114,187,0,0,0,114,198,1,0,0,114,178,1,0,0,218, - 8,110,101,119,95,110,97,109,101,218,2,102,110,115,10,0, - 0,0,32,32,32,32,32,32,32,32,32,32,114,10,0,0, - 0,114,27,2,0,0,122,22,70,105,108,101,70,105,110,100, - 101,114,46,95,102,105,108,108,95,99,97,99,104,101,108,6, - 0,0,115,4,1,0,0,128,0,224,15,19,143,121,137,121, - 136,4,240,2,5,9,26,220,23,26,151,123,145,123,160,52, - 210,35,55,172,51,175,58,169,58,171,60,211,23,56,136,72, - 244,14,0,16,19,143,124,137,124,215,15,38,209,15,38,160, - 117,212,15,45,220,31,34,160,56,155,125,136,68,213,12,28, - 244,14,0,37,40,163,69,208,12,33,219,24,32,144,4,216, - 36,40,167,78,161,78,176,51,211,36,55,209,16,33,144,4, - 144,99,152,54,217,19,22,216,34,38,160,22,160,113,168,22, - 175,28,169,28,171,30,208,40,56,208,31,57,145,72,224,31, - 35,144,72,216,16,37,215,16,41,209,16,41,168,40,213,16, - 51,240,13,0,25,33,240,14,0,32,53,136,68,212,12,28, - 220,11,14,143,60,137,60,215,11,34,209,11,34,212,35,62, - 212,11,63,217,61,69,211,39,70,185,88,176,114,168,2,175, - 8,169,8,173,10,184,88,209,39,70,136,68,213,12,36,240, - 3,0,12,64,1,248,244,47,0,17,34,164,63,212,52,70, - 208,15,71,242,0,3,9,26,240,6,0,24,26,138,72,240, - 7,3,9,26,252,242,48,0,40,71,1,115,23,0,0,0, - 142,43,68,9,0,195,40,23,68,37,4,196,9,22,68,34, - 3,196,33,1,68,34,3,99,1,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,7,0,0,0,243,22,0,0, - 0,135,0,135,1,151,0,136,0,136,1,102,2,100,1,132, - 8,125,2,124,2,83,0,41,2,97,20,1,0,0,65,32, - 99,108,97,115,115,32,109,101,116,104,111,100,32,119,104,105, - 99,104,32,114,101,116,117,114,110,115,32,97,32,99,108,111, - 115,117,114,101,32,116,111,32,117,115,101,32,111,110,32,115, - 121,115,46,112,97,116,104,95,104,111,111,107,10,32,32,32, - 32,32,32,32,32,119,104,105,99,104,32,119,105,108,108,32, - 114,101,116,117,114,110,32,97,110,32,105,110,115,116,97,110, - 99,101,32,117,115,105,110,103,32,116,104,101,32,115,112,101, - 99,105,102,105,101,100,32,108,111,97,100,101,114,115,32,97, - 110,100,32,116,104,101,32,112,97,116,104,10,32,32,32,32, - 32,32,32,32,99,97,108,108,101,100,32,111,110,32,116,104, - 101,32,99,108,111,115,117,114,101,46,10,10,32,32,32,32, - 32,32,32,32,73,102,32,116,104,101,32,112,97,116,104,32, - 99,97,108,108,101,100,32,111,110,32,116,104,101,32,99,108, - 111,115,117,114,101,32,105,115,32,110,111,116,32,97,32,100, - 105,114,101,99,116,111,114,121,44,32,73,109,112,111,114,116, - 69,114,114,111,114,32,105,115,10,32,32,32,32,32,32,32, - 32,114,97,105,115,101,100,46,10,10,32,32,32,32,32,32, - 32,32,99,1,0,0,0,0,0,0,0,0,0,0,0,4, - 0,0,0,19,0,0,0,243,70,0,0,0,149,2,151,0, - 116,1,0,0,0,0,0,0,0,0,124,0,171,1,0,0, - 0,0,0,0,115,13,116,3,0,0,0,0,0,0,0,0, - 100,1,124,0,172,2,171,2,0,0,0,0,0,0,130,1, - 2,0,137,1,124,0,103,1,137,2,162,1,173,6,142,0, - 83,0,41,3,122,45,80,97,116,104,32,104,111,111,107,32, - 102,111,114,32,105,109,112,111,114,116,108,105,98,46,109,97, - 99,104,105,110,101,114,121,46,70,105,108,101,70,105,110,100, - 101,114,46,122,30,111,110,108,121,32,100,105,114,101,99,116, - 111,114,105,101,115,32,97,114,101,32,115,117,112,112,111,114, - 116,101,100,114,84,0,0,0,41,2,114,96,0,0,0,114, - 188,0,0,0,41,3,114,68,0,0,0,114,50,1,0,0, - 114,20,2,0,0,115,3,0,0,0,32,128,128,114,10,0, - 0,0,218,24,112,97,116,104,95,104,111,111,107,95,102,111, - 114,95,70,105,108,101,70,105,110,100,101,114,122,54,70,105, - 108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,111, - 111,107,46,60,108,111,99,97,108,115,62,46,112,97,116,104, - 95,104,111,111,107,95,102,111,114,95,70,105,108,101,70,105, - 110,100,101,114,149,6,0,0,115,41,0,0,0,248,128,0, - 228,19,30,152,116,212,19,36,220,22,33,208,34,66,200,20, - 212,22,78,208,16,78,217,19,22,144,116,208,19,45,152,110, - 210,19,45,208,12,45,114,28,0,0,0,114,30,0,0,0, - 41,3,114,50,1,0,0,114,20,2,0,0,114,46,2,0, - 0,115,3,0,0,0,96,96,32,114,10,0,0,0,218,9, - 112,97,116,104,95,104,111,111,107,122,20,70,105,108,101,70, - 105,110,100,101,114,46,112,97,116,104,95,104,111,111,107,139, - 6,0,0,115,16,0,0,0,249,128,0,245,20,4,9,46, - 240,12,0,16,40,208,8,39,114,28,0,0,0,99,1,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0, - 0,0,243,34,0,0,0,151,0,100,1,124,0,106,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,155,2,100,2,157,3,83,0,41,3,78,122,11,70,105, - 108,101,70,105,110,100,101,114,40,114,221,1,0,0,114,84, - 0,0,0,114,131,1,0,0,115,1,0,0,0,32,114,10, - 0,0,0,114,222,1,0,0,122,19,70,105,108,101,70,105, - 110,100,101,114,46,95,95,114,101,112,114,95,95,157,6,0, - 0,115,21,0,0,0,128,0,216,17,28,152,84,159,89,153, - 89,152,77,168,17,208,15,43,208,8,43,114,28,0,0,0, - 114,77,0,0,0,41,12,114,196,0,0,0,114,195,0,0, - 0,114,197,0,0,0,114,198,0,0,0,114,67,1,0,0, - 114,242,1,0,0,114,7,2,0,0,114,58,1,0,0,114, - 27,2,0,0,114,63,1,0,0,114,47,2,0,0,114,222, - 1,0,0,114,30,0,0,0,114,28,0,0,0,114,10,0, - 0,0,114,12,2,0,0,114,12,2,0,0,22,6,0,0, - 115,60,0,0,0,132,0,241,4,5,5,8,242,14,15,5, - 41,242,34,2,5,30,242,8,3,5,72,1,243,10,49,5, - 20,242,102,1,29,5,71,1,240,62,0,6,17,241,2,15, - 5,40,243,3,0,6,17,240,2,15,5,40,243,34,1,5, - 44,114,28,0,0,0,114,12,2,0,0,99,4,0,0,0, - 0,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0, - 243,50,1,0,0,151,0,124,0,106,1,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,100,1,171, - 1,0,0,0,0,0,0,125,4,124,0,106,1,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, - 2,171,1,0,0,0,0,0,0,125,5,124,4,115,45,124, - 5,114,13,124,5,106,2,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,125,4,110,30,124,2,124, - 3,107,40,0,0,114,13,116,5,0,0,0,0,0,0,0, - 0,124,1,124,2,171,2,0,0,0,0,0,0,125,4,110, - 12,116,7,0,0,0,0,0,0,0,0,124,1,124,2,171, - 2,0,0,0,0,0,0,125,4,124,5,115,32,116,9,0, - 0,0,0,0,0,0,0,124,1,124,2,124,4,172,3,171, - 3,0,0,0,0,0,0,125,5,124,3,114,16,116,11,0, - 0,0,0,0,0,0,0,124,3,171,1,0,0,0,0,0, - 0,124,5,95,6,0,0,0,0,0,0,0,0,9,0,124, - 5,124,0,100,2,60,0,0,0,124,4,124,0,100,1,60, - 0,0,0,124,2,124,0,100,4,60,0,0,0,124,3,124, - 0,100,5,60,0,0,0,121,0,35,0,116,14,0,0,0, - 0,0,0,0,0,36,0,114,3,1,0,89,0,121,0,119, - 0,120,3,89,0,119,1,41,6,78,114,22,1,0,0,114, - 23,1,0,0,41,1,114,4,1,0,0,218,8,95,95,102, - 105,108,101,95,95,218,10,95,95,99,97,99,104,101,100,95, - 95,41,8,114,26,1,0,0,114,4,1,0,0,114,163,1, - 0,0,114,150,1,0,0,114,20,1,0,0,114,105,0,0, - 0,218,6,99,97,99,104,101,100,218,9,69,120,99,101,112, - 116,105,111,110,41,6,218,2,110,115,114,187,0,0,0,218, - 8,112,97,116,104,110,97,109,101,218,9,99,112,97,116,104, - 110,97,109,101,114,4,1,0,0,114,16,1,0,0,115,6, - 0,0,0,32,32,32,32,32,32,114,10,0,0,0,218,14, - 95,102,105,120,95,117,112,95,109,111,100,117,108,101,114,57, - 2,0,0,163,6,0,0,115,170,0,0,0,128,0,224,13, - 15,143,86,137,86,144,76,211,13,33,128,70,216,11,13,143, - 54,137,54,144,42,211,11,29,128,68,217,11,17,217,11,15, - 216,21,25,151,91,145,91,137,70,216,13,21,152,25,210,13, - 34,220,21,41,168,36,176,8,211,21,57,137,70,228,21,37, - 160,100,168,72,211,21,53,136,70,217,11,15,220,15,38,160, - 116,168,88,184,102,212,15,69,136,4,217,11,20,220,26,39, - 168,9,211,26,50,136,68,140,75,240,2,7,5,13,216,25, - 29,136,2,136,58,137,14,216,27,33,136,2,136,60,209,8, - 24,216,25,33,136,2,136,58,137,14,216,27,36,136,2,136, - 60,210,8,24,248,220,11,20,242,0,2,5,13,225,8,12, - 240,5,2,5,13,250,115,18,0,0,0,193,53,20,66,10, - 0,194,10,9,66,22,3,194,21,1,66,22,3,99,0,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0, - 0,0,243,112,0,0,0,151,0,116,0,0,0,0,0,0, - 0,0,0,116,3,0,0,0,0,0,0,0,0,106,4,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,171,0,0,0,0,0,0,0,102,2,125,0,116,6,0, - 0,0,0,0,0,0,0,116,8,0,0,0,0,0,0,0, - 0,102,2,125,1,116,10,0,0,0,0,0,0,0,0,116, - 12,0,0,0,0,0,0,0,0,102,2,125,2,124,0,124, - 1,124,2,103,3,83,0,41,1,122,95,82,101,116,117,114, - 110,115,32,97,32,108,105,115,116,32,111,102,32,102,105,108, - 101,45,98,97,115,101,100,32,109,111,100,117,108,101,32,108, - 111,97,100,101,114,115,46,10,10,32,32,32,32,69,97,99, - 104,32,105,116,101,109,32,105,115,32,97,32,116,117,112,108, - 101,32,40,108,111,97,100,101,114,44,32,115,117,102,102,105, - 120,101,115,41,46,10,32,32,32,32,41,7,114,141,1,0, - 0,114,234,0,0,0,218,18,101,120,116,101,110,115,105,111, - 110,95,115,117,102,102,105,120,101,115,114,150,1,0,0,114, - 159,0,0,0,114,163,1,0,0,114,140,0,0,0,41,3, - 218,10,101,120,116,101,110,115,105,111,110,115,218,6,115,111, - 117,114,99,101,218,8,98,121,116,101,99,111,100,101,115,3, - 0,0,0,32,32,32,114,10,0,0,0,114,13,1,0,0, - 114,13,1,0,0,188,6,0,0,115,57,0,0,0,128,0, - 244,10,0,18,37,164,100,215,38,61,209,38,61,211,38,63, - 208,17,63,128,74,220,13,29,156,127,208,13,46,128,70,220, - 15,35,212,37,54,208,15,54,128,72,216,12,22,152,6,160, - 8,208,11,41,208,4,41,114,28,0,0,0,99,1,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, - 0,243,8,0,0,0,151,0,124,0,97,0,121,0,114,77, - 0,0,0,41,1,114,207,0,0,0,41,1,218,17,95,98, - 111,111,116,115,116,114,97,112,95,109,111,100,117,108,101,115, - 1,0,0,0,32,114,10,0,0,0,218,21,95,115,101,116, - 95,98,111,111,116,115,116,114,97,112,95,109,111,100,117,108, - 101,114,65,2,0,0,199,6,0,0,115,7,0,0,0,128, - 0,224,17,34,129,74,114,28,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0, - 243,212,0,0,0,151,0,116,1,0,0,0,0,0,0,0, - 0,124,0,171,1,0,0,0,0,0,0,1,0,116,3,0, - 0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,125, - 1,116,4,0,0,0,0,0,0,0,0,106,6,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106, - 9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,116,11,0,0,0,0,0,0,0,0,106,12,0, + 0,0,120,1,115,20,1,0,116,7,0,0,0,0,0,0, + 0,0,106,8,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,171,0,0,0,0,0,0,0,171,1, + 0,0,0,0,0,0,106,10,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,125,5,124,5,124,0, + 106,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,107,55,0,0,114,23,124,0,106,17,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,1,142,0,103,1,171,1,0,0,0,0,0,0,1, - 0,116,4,0,0,0,0,0,0,0,0,106,14,0,0,0, + 171,0,0,0,0,0,0,0,1,0,124,5,124,0,95,7, + 0,0,0,0,0,0,0,0,116,19,0,0,0,0,0,0, + 0,0,171,0,0,0,0,0,0,0,114,29,124,0,106,20, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,125,6,124,4,106,23,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,171,0,0,0,0,0, + 0,0,125,7,110,14,124,0,106,24,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,125,6,124,4, + 125,7,124,7,124,6,118,0,114,105,116,27,0,0,0,0, + 0,0,0,0,124,0,106,4,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,4,171,2,0,0, + 0,0,0,0,125,8,124,0,106,28,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,68,0,93,57, + 0,0,92,2,0,0,125,9,125,10,100,5,124,9,122,0, + 0,0,125,11,116,27,0,0,0,0,0,0,0,0,124,8, + 124,11,171,2,0,0,0,0,0,0,125,12,116,31,0,0, + 0,0,0,0,0,0,124,12,171,1,0,0,0,0,0,0, + 115,1,140,35,124,0,106,33,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,10,124,1,124,12, + 124,8,103,1,124,2,171,5,0,0,0,0,0,0,99,2, + 1,0,83,0,4,0,116,35,0,0,0,0,0,0,0,0, + 124,8,171,1,0,0,0,0,0,0,125,3,124,0,106,28, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,68,0,93,97,0,0,92,2,0,0,125,9,125,10, + 9,0,116,27,0,0,0,0,0,0,0,0,124,0,106,4, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,124,4,124,9,122,0,0,0,171,2,0,0,0,0, + 0,0,125,12,116,38,0,0,0,0,0,0,0,0,106,41, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,100,7,124,12,100,3,172,8,171,3,0,0,0,0, + 0,0,1,0,124,7,124,9,122,0,0,0,124,6,118,0, + 115,1,140,64,116,31,0,0,0,0,0,0,0,0,124,12, + 171,1,0,0,0,0,0,0,115,1,140,76,124,0,106,33, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,124,10,124,1,124,12,100,6,124,2,171,5,0,0, + 0,0,0,0,99,2,1,0,83,0,4,0,124,3,114,54, + 116,38,0,0,0,0,0,0,0,0,106,41,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,9, + 127,8,171,2,0,0,0,0,0,0,1,0,116,38,0,0, + 0,0,0,0,0,0,106,43,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,1,100,6,171,2, + 0,0,0,0,0,0,125,13,124,8,103,1,124,13,95,22, + 0,0,0,0,0,0,0,0,124,13,83,0,121,6,35,0, + 116,12,0,0,0,0,0,0,0,0,36,0,114,6,1,0, + 100,4,125,5,89,0,144,1,140,127,119,0,120,3,89,0, + 119,1,35,0,116,36,0,0,0,0,0,0,0,0,36,0, + 114,4,1,0,89,0,1,0,121,6,119,0,120,3,89,0, + 119,1,41,10,122,111,84,114,121,32,116,111,32,102,105,110, + 100,32,97,32,115,112,101,99,32,102,111,114,32,116,104,101, + 32,115,112,101,99,105,102,105,101,100,32,109,111,100,117,108, + 101,46,10,10,32,32,32,32,32,32,32,32,82,101,116,117, + 114,110,115,32,116,104,101,32,109,97,116,99,104,105,110,103, + 32,115,112,101,99,44,32,111,114,32,78,111,110,101,32,105, + 102,32,110,111,116,32,102,111,117,110,100,46,10,32,32,32, + 32,32,32,32,32,70,114,103,0,0,0,114,52,0,0,0, + 114,171,0,0,0,114,68,1,0,0,78,122,9,116,114,121, + 105,110,103,32,123,125,41,1,218,9,118,101,114,98,111,115, + 105,116,121,122,25,112,111,115,115,105,98,108,101,32,110,97, + 109,101,115,112,97,99,101,32,102,111,114,32,123,125,41,23, + 114,132,0,0,0,114,85,0,0,0,114,68,0,0,0,114, + 23,0,0,0,114,95,0,0,0,114,153,1,0,0,114,87, + 0,0,0,114,17,2,0,0,218,11,95,102,105,108,108,95, + 99,97,99,104,101,114,27,0,0,0,114,20,2,0,0,114, + 173,0,0,0,114,19,2,0,0,114,72,0,0,0,114,16, + 2,0,0,114,93,0,0,0,114,8,2,0,0,114,96,0, + 0,0,114,139,0,0,0,114,208,0,0,0,114,216,0,0, + 0,114,12,1,0,0,114,6,1,0,0,41,14,114,190,0, + 0,0,114,43,1,0,0,114,58,1,0,0,218,12,105,115, + 95,110,97,109,101,115,112,97,99,101,218,11,116,97,105,108, + 95,109,111,100,117,108,101,114,243,0,0,0,218,5,99,97, + 99,104,101,218,12,99,97,99,104,101,95,109,111,100,117,108, + 101,218,9,98,97,115,101,95,112,97,116,104,114,179,1,0, + 0,114,18,1,0,0,218,13,105,110,105,116,95,102,105,108, + 101,110,97,109,101,218,9,102,117,108,108,95,112,97,116,104, + 114,17,1,0,0,115,14,0,0,0,32,32,32,32,32,32, + 32,32,32,32,32,32,32,32,114,10,0,0,0,114,59,1, + 0,0,122,20,70,105,108,101,70,105,110,100,101,114,46,102, + 105,110,100,95,115,112,101,99,61,6,0,0,115,220,1,0, + 0,128,0,240,10,0,24,29,136,12,216,22,30,215,22,41, + 209,22,41,168,35,211,22,46,168,113,209,22,49,136,11,240, + 2,3,9,23,220,20,30,152,116,159,121,153,121,210,31,56, + 172,67,175,74,169,74,171,76,211,20,57,215,20,66,209,20, + 66,136,69,240,6,0,12,17,144,68,215,20,36,209,20,36, + 210,11,36,216,12,16,215,12,28,209,12,28,212,12,30,216, + 31,36,136,68,212,12,28,228,11,22,140,61,216,20,24,215, + 20,44,209,20,44,136,69,216,27,38,215,27,44,209,27,44, + 211,27,46,137,76,224,20,24,215,20,36,209,20,36,136,69, + 216,27,38,136,76,224,11,23,152,53,209,11,32,220,24,34, + 160,52,167,57,161,57,168,107,211,24,58,136,73,216,40,44, + 175,13,172,13,209,16,36,144,6,152,12,216,32,42,168,86, + 209,32,51,144,13,220,28,38,160,121,176,45,211,28,64,144, + 9,220,19,31,160,9,213,19,42,216,27,31,159,62,153,62, + 168,44,184,8,192,41,200,105,200,91,208,90,96,211,27,97, + 210,20,97,240,9,0,41,54,244,16,0,32,43,168,57,211, + 31,53,144,12,224,36,40,167,77,164,77,209,12,32,136,70, + 144,76,240,2,3,13,28,220,28,38,160,116,167,121,161,121, + 176,43,192,6,209,50,70,211,28,71,144,9,244,6,0,13, + 23,215,12,39,209,12,39,168,11,176,89,200,33,208,12,39, + 212,12,76,216,15,27,152,102,209,15,36,168,5,210,15,45, + 220,19,31,160,9,213,19,42,216,27,31,159,62,153,62,168, + 44,184,8,192,41,216,42,46,176,6,243,3,1,28,56,242, + 0,1,21,56,240,17,0,37,50,241,20,0,12,24,220,12, + 22,215,12,39,209,12,39,208,40,67,192,89,212,12,79,220, + 19,29,215,19,40,209,19,40,168,24,176,52,211,19,56,136, + 68,216,47,56,168,107,136,68,212,12,43,216,19,23,136,75, + 216,15,19,248,244,81,1,0,16,23,242,0,1,9,23,216, + 20,22,139,69,240,3,1,9,23,251,244,56,0,20,30,242, + 0,1,13,28,218,23,27,240,3,1,13,28,250,115,35,0, + 0,0,152,53,70,62,0,196,40,25,71,16,2,198,62,11, + 71,13,3,199,12,1,71,13,3,199,16,9,71,29,5,199, + 28,1,71,29,5,99,1,0,0,0,0,0,0,0,0,0, + 0,0,5,0,0,0,3,0,0,0,243,84,2,0,0,151, + 0,124,0,106,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,125,1,9,0,116,3,0,0,0, + 0,0,0,0,0,106,4,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,1,120,1,115,20,1, + 0,116,3,0,0,0,0,0,0,0,0,106,6,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, + 0,0,0,0,0,0,0,171,1,0,0,0,0,0,0,125, + 2,116,14,0,0,0,0,0,0,0,0,106,16,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106, + 19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,100,1,171,1,0,0,0,0,0,0,115,17,116, + 21,0,0,0,0,0,0,0,0,124,2,171,1,0,0,0, + 0,0,0,124,0,95,11,0,0,0,0,0,0,0,0,110, + 88,116,21,0,0,0,0,0,0,0,0,171,0,0,0,0, + 0,0,0,125,3,124,2,68,0,93,66,0,0,125,4,124, + 4,106,25,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,100,2,171,1,0,0,0,0,0,0,92, + 3,0,0,125,5,125,6,125,7,124,6,114,22,124,5,155, + 0,100,2,124,7,106,27,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, + 0,155,0,157,3,125,8,110,2,124,5,125,8,124,3,106, + 29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,8,171,1,0,0,0,0,0,0,1,0,140, + 68,4,0,124,3,124,0,95,11,0,0,0,0,0,0,0, + 0,116,14,0,0,0,0,0,0,0,0,106,16,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106, - 17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,116,18,0,0,0,0,0,0,0,0,171,1,0, - 0,0,0,0,0,1,0,121,1,41,2,122,41,73,110,115, - 116,97,108,108,32,116,104,101,32,112,97,116,104,45,98,97, - 115,101,100,32,105,109,112,111,114,116,32,99,111,109,112,111, - 110,101,110,116,115,46,78,41,10,114,65,2,0,0,114,13, - 1,0,0,114,20,0,0,0,114,251,1,0,0,114,240,0, - 0,0,114,12,2,0,0,114,47,2,0,0,218,9,109,101, - 116,97,95,112,97,116,104,114,64,0,0,0,114,240,1,0, - 0,41,2,114,64,2,0,0,218,17,115,117,112,112,111,114, - 116,101,100,95,108,111,97,100,101,114,115,115,2,0,0,0, - 32,32,114,10,0,0,0,218,8,95,105,110,115,116,97,108, - 108,114,69,2,0,0,204,6,0,0,115,71,0,0,0,128, - 0,228,4,25,208,26,43,212,4,44,220,24,51,211,24,53, - 208,4,21,220,4,7,135,78,129,78,215,4,25,209,4,25, - 156,58,215,27,47,209,27,47,208,49,66,208,27,67,208,26, - 68,212,4,69,220,4,7,135,77,129,77,215,4,24,209,4, - 24,156,26,213,4,36,114,28,0,0,0,41,1,114,107,0, - 0,0,114,77,0,0,0,41,3,78,78,78,41,2,114,1, - 0,0,0,114,1,0,0,0,41,1,84,41,87,114,198,0, - 0,0,114,207,0,0,0,114,234,0,0,0,114,114,0,0, - 0,114,20,0,0,0,114,126,0,0,0,114,230,0,0,0, - 114,31,0,0,0,114,60,1,0,0,218,2,110,116,114,23, - 0,0,0,114,36,1,0,0,218,5,112,111,115,105,120,114, - 61,0,0,0,218,3,97,108,108,114,62,0,0,0,114,179, - 0,0,0,114,58,0,0,0,114,65,0,0,0,218,20,95, - 112,97,116,104,115,101,112,115,95,119,105,116,104,95,99,111, - 108,111,110,114,34,0,0,0,218,37,95,67,65,83,69,95, - 73,78,83,69,78,83,73,84,73,86,69,95,80,76,65,84, - 70,79,82,77,83,95,66,89,84,69,83,95,75,69,89,114, - 33,0,0,0,114,35,0,0,0,114,27,0,0,0,114,43, - 0,0,0,114,49,0,0,0,114,53,0,0,0,114,72,0, - 0,0,114,81,0,0,0,114,85,0,0,0,114,91,0,0, - 0,114,93,0,0,0,114,96,0,0,0,114,100,0,0,0, - 114,105,0,0,0,114,121,0,0,0,218,4,116,121,112,101, - 218,8,95,95,99,111,100,101,95,95,114,233,0,0,0,114, - 41,0,0,0,114,214,0,0,0,114,40,0,0,0,114,46, - 0,0,0,114,111,1,0,0,114,143,0,0,0,114,139,0, - 0,0,114,159,0,0,0,114,64,0,0,0,114,59,2,0, - 0,114,61,1,0,0,114,140,0,0,0,218,23,68,69,66, - 85,71,95,66,89,84,69,67,79,68,69,95,83,85,70,70, - 73,88,69,83,218,27,79,80,84,73,77,73,90,69,68,95, - 66,89,84,69,67,79,68,69,95,83,85,70,70,73,88,69, - 83,114,152,0,0,0,114,167,0,0,0,114,177,0,0,0, - 114,180,0,0,0,114,183,0,0,0,114,208,0,0,0,114, - 219,0,0,0,114,224,0,0,0,114,227,0,0,0,114,237, - 0,0,0,114,243,0,0,0,114,246,0,0,0,114,2,1, - 0,0,114,25,1,0,0,114,14,1,0,0,114,20,1,0, - 0,114,32,1,0,0,114,34,1,0,0,114,65,1,0,0, - 114,86,1,0,0,114,119,1,0,0,114,150,1,0,0,114, - 163,1,0,0,114,141,1,0,0,114,185,1,0,0,114,229, - 1,0,0,218,16,95,78,97,109,101,115,112,97,99,101,76, - 111,97,100,101,114,114,240,1,0,0,114,12,2,0,0,114, - 57,2,0,0,114,13,1,0,0,114,65,2,0,0,114,69, - 2,0,0,41,1,218,1,115,115,1,0,0,0,48,114,10, - 0,0,0,218,8,60,109,111,100,117,108,101,62,114,81,2, - 0,0,1,0,0,0,115,198,2,0,0,240,3,1,1,1, - 241,2,7,1,4,240,44,0,14,18,128,10,243,6,0,1, - 12,219,0,10,219,0,10,219,0,16,219,0,14,240,6,0, - 16,19,143,124,137,124,152,119,209,15,38,128,11,217,3,14, - 219,4,20,220,4,17,227,4,23,241,6,0,4,15,216,23, - 27,152,83,144,107,129,79,224,23,26,144,101,128,79,225,7, - 10,209,10,52,161,79,211,10,52,212,7,52,208,0,52,208, - 7,52,216,11,26,152,49,209,11,29,128,8,217,17,22,144, - 127,211,17,39,128,14,216,18,20,151,39,145,39,152,47,211, - 18,42,128,15,217,41,56,211,23,57,169,31,160,65,152,33, - 152,65,152,51,154,7,168,31,209,23,57,208,0,20,240,8, - 0,39,45,208,0,35,216,40,58,208,0,37,216,32,69,216, - 34,69,241,3,1,33,70,1,208,0,27,242,8,14,1,23, - 241,32,0,15,31,211,14,32,128,11,242,6,2,1,55,242, - 10,3,1,42,242,10,3,1,42,241,12,0,4,15,243,2, - 27,5,42,242,60,3,5,63,242,12,5,1,34,242,16,7, - 1,26,242,20,6,1,50,242,18,2,1,46,242,10,4,1, - 46,241,14,0,4,15,243,2,5,5,82,1,242,16,2,5, - 48,242,10,7,1,20,243,20,19,1,14,241,44,0,14,18, - 144,45,215,18,40,209,18,40,211,13,41,128,10,240,112,7, - 0,17,21,143,127,137,127,152,113,160,40,211,15,43,168,103, - 209,15,53,128,12,224,20,23,151,78,145,78,160,60,176,24, - 211,20,58,208,0,17,224,11,24,128,8,216,7,13,128,4, - 224,19,24,144,39,128,15,217,3,14,216,4,19,215,4,26, - 209,4,26,152,54,212,4,34,224,21,44,144,84,215,21,44, - 209,21,44,211,21,46,208,0,18,224,21,27,144,72,208,0, - 17,224,56,73,208,0,73,208,0,23,208,26,53,240,4,67, - 1,1,48,192,20,244,0,67,1,1,48,242,76,2,37,1, - 64,1,242,80,1,16,1,71,1,242,38,9,1,20,242,24, - 9,1,16,242,24,28,1,31,242,62,30,1,17,242,66,1, - 25,1,76,1,242,56,21,1,10,243,48,10,1,57,243,26, - 7,1,16,243,20,8,1,16,242,22,9,1,68,1,241,28, - 0,13,19,139,72,128,9,240,6,67,1,1,16,184,52,216, - 55,64,244,3,67,1,1,16,242,76,2,45,1,23,247,100, - 1,48,1,28,241,0,48,1,28,247,102,1,27,1,60,241, - 0,27,1,60,244,60,78,2,1,27,144,61,244,0,78,2, - 1,27,247,98,4,47,1,32,241,0,47,1,32,244,100,1, - 42,1,45,144,122,160,60,244,0,42,1,45,244,90,1,22, - 1,20,152,58,160,125,244,0,22,1,20,244,50,50,1,25, - 152,42,160,109,244,0,50,1,25,247,106,1,65,1,1,32, - 241,0,65,1,1,32,247,78,2,33,1,43,241,0,33,1, - 43,240,74,1,0,20,35,208,0,16,247,10,121,1,1,70, - 1,241,0,121,1,1,70,1,247,120,3,72,2,1,44,241, - 0,72,2,1,44,243,90,4,22,1,13,242,50,8,1,42, - 242,22,2,1,35,243,10,5,1,37,249,242,117,52,0,24, - 58,115,6,0,0,0,193,52,12,71,55,4, + 19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,116,30,0,0,0,0,0,0,0,0,171,1,0, + 0,0,0,0,0,114,36,124,2,68,0,143,9,99,2,104, + 0,99,2,93,18,0,0,125,9,124,9,106,27,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, + 0,0,0,0,0,0,0,146,2,140,20,4,0,99,2,125, + 9,124,0,95,16,0,0,0,0,0,0,0,0,121,3,121, + 3,35,0,116,8,0,0,0,0,0,0,0,0,116,10,0, + 0,0,0,0,0,0,0,116,12,0,0,0,0,0,0,0, + 0,102,3,36,0,114,5,1,0,103,0,125,2,89,0,140, + 232,119,0,120,3,89,0,119,1,99,2,1,0,99,2,125, + 9,119,0,41,4,122,68,70,105,108,108,32,116,104,101,32, + 99,97,99,104,101,32,111,102,32,112,111,116,101,110,116,105, + 97,108,32,109,111,100,117,108,101,115,32,97,110,100,32,112, + 97,99,107,97,103,101,115,32,102,111,114,32,116,104,105,115, + 32,100,105,114,101,99,116,111,114,121,46,114,14,0,0,0, + 114,103,0,0,0,78,41,17,114,68,0,0,0,114,23,0, + 0,0,218,7,108,105,115,116,100,105,114,114,95,0,0,0, + 114,1,2,0,0,218,15,80,101,114,109,105,115,115,105,111, + 110,69,114,114,111,114,218,18,78,111,116,65,68,105,114,101, + 99,116,111,114,121,69,114,114,111,114,114,20,0,0,0,114, + 31,0,0,0,114,32,0,0,0,114,18,2,0,0,114,19, + 2,0,0,114,159,0,0,0,114,173,0,0,0,218,3,97, + 100,100,114,33,0,0,0,114,20,2,0,0,41,10,114,190, + 0,0,0,114,68,0,0,0,218,8,99,111,110,116,101,110, + 116,115,218,21,108,111,119,101,114,95,115,117,102,102,105,120, + 95,99,111,110,116,101,110,116,115,114,226,1,0,0,114,188, + 0,0,0,114,199,1,0,0,114,179,1,0,0,218,8,110, + 101,119,95,110,97,109,101,218,2,102,110,115,10,0,0,0, + 32,32,32,32,32,32,32,32,32,32,114,10,0,0,0,114, + 28,2,0,0,122,22,70,105,108,101,70,105,110,100,101,114, + 46,95,102,105,108,108,95,99,97,99,104,101,112,6,0,0, + 115,4,1,0,0,128,0,224,15,19,143,121,137,121,136,4, + 240,2,5,9,26,220,23,26,151,123,145,123,160,52,210,35, + 55,172,51,175,58,169,58,171,60,211,23,56,136,72,244,14, + 0,16,19,143,124,137,124,215,15,38,209,15,38,160,117,212, + 15,45,220,31,34,160,56,155,125,136,68,213,12,28,244,14, + 0,37,40,163,69,208,12,33,219,24,32,144,4,216,36,40, + 167,78,161,78,176,51,211,36,55,209,16,33,144,4,144,99, + 152,54,217,19,22,216,34,38,160,22,160,113,168,22,175,28, + 169,28,171,30,208,40,56,208,31,57,145,72,224,31,35,144, + 72,216,16,37,215,16,41,209,16,41,168,40,213,16,51,240, + 13,0,25,33,240,14,0,32,53,136,68,212,12,28,220,11, + 14,143,60,137,60,215,11,34,209,11,34,212,35,62,212,11, + 63,217,61,69,211,39,70,185,88,176,114,168,2,175,8,169, + 8,173,10,184,88,209,39,70,136,68,213,12,36,240,3,0, + 12,64,1,248,244,47,0,17,34,164,63,212,52,70,208,15, + 71,242,0,3,9,26,240,6,0,24,26,138,72,240,7,3, + 9,26,252,242,48,0,40,71,1,115,23,0,0,0,142,43, + 68,9,0,195,40,23,68,37,4,196,9,22,68,34,3,196, + 33,1,68,34,3,99,1,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,7,0,0,0,243,22,0,0,0,135, + 0,135,1,151,0,136,0,136,1,102,2,100,1,132,8,125, + 2,124,2,83,0,41,2,97,20,1,0,0,65,32,99,108, + 97,115,115,32,109,101,116,104,111,100,32,119,104,105,99,104, + 32,114,101,116,117,114,110,115,32,97,32,99,108,111,115,117, + 114,101,32,116,111,32,117,115,101,32,111,110,32,115,121,115, + 46,112,97,116,104,95,104,111,111,107,10,32,32,32,32,32, + 32,32,32,119,104,105,99,104,32,119,105,108,108,32,114,101, + 116,117,114,110,32,97,110,32,105,110,115,116,97,110,99,101, + 32,117,115,105,110,103,32,116,104,101,32,115,112,101,99,105, + 102,105,101,100,32,108,111,97,100,101,114,115,32,97,110,100, + 32,116,104,101,32,112,97,116,104,10,32,32,32,32,32,32, + 32,32,99,97,108,108,101,100,32,111,110,32,116,104,101,32, + 99,108,111,115,117,114,101,46,10,10,32,32,32,32,32,32, + 32,32,73,102,32,116,104,101,32,112,97,116,104,32,99,97, + 108,108,101,100,32,111,110,32,116,104,101,32,99,108,111,115, + 117,114,101,32,105,115,32,110,111,116,32,97,32,100,105,114, + 101,99,116,111,114,121,44,32,73,109,112,111,114,116,69,114, + 114,111,114,32,105,115,10,32,32,32,32,32,32,32,32,114, + 97,105,115,101,100,46,10,10,32,32,32,32,32,32,32,32, + 99,1,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,19,0,0,0,243,70,0,0,0,149,2,151,0,116,1, + 0,0,0,0,0,0,0,0,124,0,171,1,0,0,0,0, + 0,0,115,13,116,3,0,0,0,0,0,0,0,0,100,1, + 124,0,172,2,171,2,0,0,0,0,0,0,130,1,2,0, + 137,1,124,0,103,1,137,2,162,1,173,6,142,0,83,0, + 41,3,122,45,80,97,116,104,32,104,111,111,107,32,102,111, + 114,32,105,109,112,111,114,116,108,105,98,46,109,97,99,104, + 105,110,101,114,121,46,70,105,108,101,70,105,110,100,101,114, + 46,122,30,111,110,108,121,32,100,105,114,101,99,116,111,114, + 105,101,115,32,97,114,101,32,115,117,112,112,111,114,116,101, + 100,114,84,0,0,0,41,2,114,96,0,0,0,114,189,0, + 0,0,41,3,114,68,0,0,0,114,51,1,0,0,114,21, + 2,0,0,115,3,0,0,0,32,128,128,114,10,0,0,0, + 218,24,112,97,116,104,95,104,111,111,107,95,102,111,114,95, + 70,105,108,101,70,105,110,100,101,114,122,54,70,105,108,101, + 70,105,110,100,101,114,46,112,97,116,104,95,104,111,111,107, + 46,60,108,111,99,97,108,115,62,46,112,97,116,104,95,104, + 111,111,107,95,102,111,114,95,70,105,108,101,70,105,110,100, + 101,114,153,6,0,0,115,41,0,0,0,248,128,0,228,19, + 30,152,116,212,19,36,220,22,33,208,34,66,200,20,212,22, + 78,208,16,78,217,19,22,144,116,208,19,45,152,110,210,19, + 45,208,12,45,114,28,0,0,0,114,30,0,0,0,41,3, + 114,51,1,0,0,114,21,2,0,0,114,47,2,0,0,115, + 3,0,0,0,96,96,32,114,10,0,0,0,218,9,112,97, + 116,104,95,104,111,111,107,122,20,70,105,108,101,70,105,110, + 100,101,114,46,112,97,116,104,95,104,111,111,107,143,6,0, + 0,115,16,0,0,0,249,128,0,245,20,4,9,46,240,12, + 0,16,40,208,8,39,114,28,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, + 243,34,0,0,0,151,0,100,1,124,0,106,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155, + 2,100,2,157,3,83,0,41,3,78,122,11,70,105,108,101, + 70,105,110,100,101,114,40,114,222,1,0,0,114,84,0,0, + 0,114,132,1,0,0,115,1,0,0,0,32,114,10,0,0, + 0,114,223,1,0,0,122,19,70,105,108,101,70,105,110,100, + 101,114,46,95,95,114,101,112,114,95,95,161,6,0,0,115, + 21,0,0,0,128,0,216,17,28,152,84,159,89,153,89,152, + 77,168,17,208,15,43,208,8,43,114,28,0,0,0,114,77, + 0,0,0,41,12,114,197,0,0,0,114,196,0,0,0,114, + 198,0,0,0,114,199,0,0,0,114,68,1,0,0,114,243, + 1,0,0,114,8,2,0,0,114,59,1,0,0,114,28,2, + 0,0,114,64,1,0,0,114,48,2,0,0,114,223,1,0, + 0,114,30,0,0,0,114,28,0,0,0,114,10,0,0,0, + 114,13,2,0,0,114,13,2,0,0,26,6,0,0,115,60, + 0,0,0,132,0,241,4,5,5,8,242,14,15,5,41,242, + 34,2,5,30,242,8,3,5,72,1,243,10,49,5,20,242, + 102,1,29,5,71,1,240,62,0,6,17,241,2,15,5,40, + 243,3,0,6,17,240,2,15,5,40,243,34,1,5,44,114, + 28,0,0,0,114,13,2,0,0,99,4,0,0,0,0,0, + 0,0,0,0,0,0,5,0,0,0,3,0,0,0,243,50, + 1,0,0,151,0,124,0,106,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,100,1,171,1,0, + 0,0,0,0,0,125,4,124,0,106,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,100,2,171, + 1,0,0,0,0,0,0,125,5,124,4,115,45,124,5,114, + 13,124,5,106,2,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,125,4,110,30,124,2,124,3,107, + 40,0,0,114,13,116,5,0,0,0,0,0,0,0,0,124, + 1,124,2,171,2,0,0,0,0,0,0,125,4,110,12,116, + 7,0,0,0,0,0,0,0,0,124,1,124,2,171,2,0, + 0,0,0,0,0,125,4,124,5,115,32,116,9,0,0,0, + 0,0,0,0,0,124,1,124,2,124,4,172,3,171,3,0, + 0,0,0,0,0,125,5,124,3,114,16,116,11,0,0,0, + 0,0,0,0,0,124,3,171,1,0,0,0,0,0,0,124, + 5,95,6,0,0,0,0,0,0,0,0,9,0,124,5,124, + 0,100,2,60,0,0,0,124,4,124,0,100,1,60,0,0, + 0,124,2,124,0,100,4,60,0,0,0,124,3,124,0,100, + 5,60,0,0,0,121,0,35,0,116,14,0,0,0,0,0, + 0,0,0,36,0,114,3,1,0,89,0,121,0,119,0,120, + 3,89,0,119,1,41,6,78,114,23,1,0,0,114,24,1, + 0,0,41,1,114,5,1,0,0,218,8,95,95,102,105,108, + 101,95,95,218,10,95,95,99,97,99,104,101,100,95,95,41, + 8,114,27,1,0,0,114,5,1,0,0,114,164,1,0,0, + 114,151,1,0,0,114,21,1,0,0,114,105,0,0,0,218, + 6,99,97,99,104,101,100,218,9,69,120,99,101,112,116,105, + 111,110,41,6,218,2,110,115,114,188,0,0,0,218,8,112, + 97,116,104,110,97,109,101,218,9,99,112,97,116,104,110,97, + 109,101,114,5,1,0,0,114,17,1,0,0,115,6,0,0, + 0,32,32,32,32,32,32,114,10,0,0,0,218,14,95,102, + 105,120,95,117,112,95,109,111,100,117,108,101,114,58,2,0, + 0,167,6,0,0,115,170,0,0,0,128,0,224,13,15,143, + 86,137,86,144,76,211,13,33,128,70,216,11,13,143,54,137, + 54,144,42,211,11,29,128,68,217,11,17,217,11,15,216,21, + 25,151,91,145,91,137,70,216,13,21,152,25,210,13,34,220, + 21,41,168,36,176,8,211,21,57,137,70,228,21,37,160,100, + 168,72,211,21,53,136,70,217,11,15,220,15,38,160,116,168, + 88,184,102,212,15,69,136,4,217,11,20,220,26,39,168,9, + 211,26,50,136,68,140,75,240,2,7,5,13,216,25,29,136, + 2,136,58,137,14,216,27,33,136,2,136,60,209,8,24,216, + 25,33,136,2,136,58,137,14,216,27,36,136,2,136,60,210, + 8,24,248,220,11,20,242,0,2,5,13,225,8,12,240,5, + 2,5,13,250,115,18,0,0,0,193,53,20,66,10,0,194, + 10,9,66,22,3,194,21,1,66,22,3,99,0,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, + 243,112,0,0,0,151,0,116,0,0,0,0,0,0,0,0, + 0,116,3,0,0,0,0,0,0,0,0,106,4,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, + 0,0,0,0,0,0,0,102,2,125,0,116,6,0,0,0, + 0,0,0,0,0,116,8,0,0,0,0,0,0,0,0,102, + 2,125,1,116,10,0,0,0,0,0,0,0,0,116,12,0, + 0,0,0,0,0,0,0,102,2,125,2,124,0,124,1,124, + 2,103,3,83,0,41,1,122,95,82,101,116,117,114,110,115, + 32,97,32,108,105,115,116,32,111,102,32,102,105,108,101,45, + 98,97,115,101,100,32,109,111,100,117,108,101,32,108,111,97, + 100,101,114,115,46,10,10,32,32,32,32,69,97,99,104,32, + 105,116,101,109,32,105,115,32,97,32,116,117,112,108,101,32, + 40,108,111,97,100,101,114,44,32,115,117,102,102,105,120,101, + 115,41,46,10,32,32,32,32,41,7,114,142,1,0,0,114, + 235,0,0,0,218,18,101,120,116,101,110,115,105,111,110,95, + 115,117,102,102,105,120,101,115,114,151,1,0,0,114,160,0, + 0,0,114,164,1,0,0,114,141,0,0,0,41,3,218,10, + 101,120,116,101,110,115,105,111,110,115,218,6,115,111,117,114, + 99,101,218,8,98,121,116,101,99,111,100,101,115,3,0,0, + 0,32,32,32,114,10,0,0,0,114,14,1,0,0,114,14, + 1,0,0,192,6,0,0,115,57,0,0,0,128,0,244,10, + 0,18,37,164,100,215,38,61,209,38,61,211,38,63,208,17, + 63,128,74,220,13,29,156,127,208,13,46,128,70,220,15,35, + 212,37,54,208,15,54,128,72,216,12,22,152,6,160,8,208, + 11,41,208,4,41,114,28,0,0,0,99,1,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,243, + 8,0,0,0,151,0,124,0,97,0,121,0,114,77,0,0, + 0,41,1,114,208,0,0,0,41,1,218,17,95,98,111,111, + 116,115,116,114,97,112,95,109,111,100,117,108,101,115,1,0, + 0,0,32,114,10,0,0,0,218,21,95,115,101,116,95,98, + 111,111,116,115,116,114,97,112,95,109,111,100,117,108,101,114, + 66,2,0,0,203,6,0,0,115,7,0,0,0,128,0,224, + 17,34,129,74,114,28,0,0,0,99,1,0,0,0,0,0, + 0,0,0,0,0,0,5,0,0,0,3,0,0,0,243,212, + 0,0,0,151,0,116,1,0,0,0,0,0,0,0,0,124, + 0,171,1,0,0,0,0,0,0,1,0,116,3,0,0,0, + 0,0,0,0,0,171,0,0,0,0,0,0,0,125,1,116, + 4,0,0,0,0,0,0,0,0,106,6,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,106,9,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,116,11,0,0,0,0,0,0,0,0,106,12,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, + 1,142,0,103,1,171,1,0,0,0,0,0,0,1,0,116, + 4,0,0,0,0,0,0,0,0,106,14,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,106,17,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,116,18,0,0,0,0,0,0,0,0,171,1,0,0,0, + 0,0,0,1,0,121,1,41,2,122,41,73,110,115,116,97, + 108,108,32,116,104,101,32,112,97,116,104,45,98,97,115,101, + 100,32,105,109,112,111,114,116,32,99,111,109,112,111,110,101, + 110,116,115,46,78,41,10,114,66,2,0,0,114,14,1,0, + 0,114,20,0,0,0,114,252,1,0,0,114,241,0,0,0, + 114,13,2,0,0,114,48,2,0,0,218,9,109,101,116,97, + 95,112,97,116,104,114,64,0,0,0,114,241,1,0,0,41, + 2,114,65,2,0,0,218,17,115,117,112,112,111,114,116,101, + 100,95,108,111,97,100,101,114,115,115,2,0,0,0,32,32, + 114,10,0,0,0,218,8,95,105,110,115,116,97,108,108,114, + 70,2,0,0,208,6,0,0,115,71,0,0,0,128,0,228, + 4,25,208,26,43,212,4,44,220,24,51,211,24,53,208,4, + 21,220,4,7,135,78,129,78,215,4,25,209,4,25,156,58, + 215,27,47,209,27,47,208,49,66,208,27,67,208,26,68,212, + 4,69,220,4,7,135,77,129,77,215,4,24,209,4,24,156, + 26,213,4,36,114,28,0,0,0,41,1,114,107,0,0,0, + 114,77,0,0,0,41,3,78,78,78,41,2,114,1,0,0, + 0,114,1,0,0,0,41,1,84,41,87,114,199,0,0,0, + 114,208,0,0,0,114,235,0,0,0,114,114,0,0,0,114, + 20,0,0,0,114,127,0,0,0,114,231,0,0,0,114,31, + 0,0,0,114,61,1,0,0,218,2,110,116,114,23,0,0, + 0,114,37,1,0,0,218,5,112,111,115,105,120,114,61,0, + 0,0,218,3,97,108,108,114,62,0,0,0,114,180,0,0, + 0,114,58,0,0,0,114,65,0,0,0,218,20,95,112,97, + 116,104,115,101,112,115,95,119,105,116,104,95,99,111,108,111, + 110,114,34,0,0,0,218,37,95,67,65,83,69,95,73,78, + 83,69,78,83,73,84,73,86,69,95,80,76,65,84,70,79, + 82,77,83,95,66,89,84,69,83,95,75,69,89,114,33,0, + 0,0,114,35,0,0,0,114,27,0,0,0,114,43,0,0, + 0,114,49,0,0,0,114,53,0,0,0,114,72,0,0,0, + 114,81,0,0,0,114,85,0,0,0,114,91,0,0,0,114, + 93,0,0,0,114,96,0,0,0,114,100,0,0,0,114,105, + 0,0,0,114,122,0,0,0,218,4,116,121,112,101,218,8, + 95,95,99,111,100,101,95,95,114,234,0,0,0,114,41,0, + 0,0,114,215,0,0,0,114,40,0,0,0,114,46,0,0, + 0,114,112,1,0,0,114,144,0,0,0,114,140,0,0,0, + 114,160,0,0,0,114,64,0,0,0,114,60,2,0,0,114, + 62,1,0,0,114,141,0,0,0,218,23,68,69,66,85,71, + 95,66,89,84,69,67,79,68,69,95,83,85,70,70,73,88, + 69,83,218,27,79,80,84,73,77,73,90,69,68,95,66,89, + 84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,114, + 153,0,0,0,114,168,0,0,0,114,178,0,0,0,114,181, + 0,0,0,114,184,0,0,0,114,209,0,0,0,114,220,0, + 0,0,114,225,0,0,0,114,228,0,0,0,114,238,0,0, + 0,114,244,0,0,0,114,247,0,0,0,114,3,1,0,0, + 114,26,1,0,0,114,15,1,0,0,114,21,1,0,0,114, + 33,1,0,0,114,35,1,0,0,114,66,1,0,0,114,87, + 1,0,0,114,120,1,0,0,114,151,1,0,0,114,164,1, + 0,0,114,142,1,0,0,114,186,1,0,0,114,230,1,0, + 0,218,16,95,78,97,109,101,115,112,97,99,101,76,111,97, + 100,101,114,114,241,1,0,0,114,13,2,0,0,114,58,2, + 0,0,114,14,1,0,0,114,66,2,0,0,114,70,2,0, + 0,41,1,218,1,115,115,1,0,0,0,48,114,10,0,0, + 0,218,8,60,109,111,100,117,108,101,62,114,82,2,0,0, + 1,0,0,0,115,198,2,0,0,240,3,1,1,1,241,2, + 7,1,4,240,44,0,14,18,128,10,243,6,0,1,12,219, + 0,10,219,0,10,219,0,16,219,0,14,240,6,0,16,19, + 143,124,137,124,152,119,209,15,38,128,11,217,3,14,219,4, + 20,220,4,17,227,4,23,241,6,0,4,15,216,23,27,152, + 83,144,107,129,79,224,23,26,144,101,128,79,225,7,10,209, + 10,52,161,79,211,10,52,212,7,52,208,0,52,208,7,52, + 216,11,26,152,49,209,11,29,128,8,217,17,22,144,127,211, + 17,39,128,14,216,18,20,151,39,145,39,152,47,211,18,42, + 128,15,217,41,56,211,23,57,169,31,160,65,152,33,152,65, + 152,51,154,7,168,31,209,23,57,208,0,20,240,8,0,39, + 45,208,0,35,216,40,58,208,0,37,216,32,69,216,34,69, + 241,3,1,33,70,1,208,0,27,242,8,14,1,23,241,32, + 0,15,31,211,14,32,128,11,242,6,2,1,55,242,10,3, + 1,42,242,10,3,1,42,241,12,0,4,15,243,2,27,5, + 42,242,60,3,5,63,242,12,5,1,34,242,16,7,1,26, + 242,20,6,1,50,242,18,2,1,46,242,10,4,1,46,241, + 14,0,4,15,243,2,5,5,82,1,242,16,2,5,48,242, + 10,7,1,20,243,20,23,1,14,241,52,0,14,18,144,45, + 215,18,40,209,18,40,211,13,41,128,10,240,112,7,0,17, + 21,143,127,137,127,152,113,160,40,211,15,43,168,103,209,15, + 53,128,12,224,20,23,151,78,145,78,160,60,176,24,211,20, + 58,208,0,17,224,11,24,128,8,216,7,13,128,4,224,19, + 24,144,39,128,15,217,3,14,216,4,19,215,4,26,209,4, + 26,152,54,212,4,34,224,21,44,144,84,215,21,44,209,21, + 44,211,21,46,208,0,18,224,21,27,144,72,208,0,17,224, + 56,73,208,0,73,208,0,23,208,26,53,240,4,67,1,1, + 48,192,20,244,0,67,1,1,48,242,76,2,37,1,64,1, + 242,80,1,16,1,71,1,242,38,9,1,20,242,24,9,1, + 16,242,24,28,1,31,242,62,30,1,17,242,66,1,25,1, + 76,1,242,56,21,1,10,243,48,10,1,57,243,26,7,1, + 16,243,20,8,1,16,242,22,9,1,68,1,241,28,0,13, + 19,139,72,128,9,240,6,67,1,1,16,184,52,216,55,64, + 244,3,67,1,1,16,242,76,2,45,1,23,247,100,1,48, + 1,28,241,0,48,1,28,247,102,1,27,1,60,241,0,27, + 1,60,244,60,78,2,1,27,144,61,244,0,78,2,1,27, + 247,98,4,47,1,32,241,0,47,1,32,244,100,1,42,1, + 45,144,122,160,60,244,0,42,1,45,244,90,1,22,1,20, + 152,58,160,125,244,0,22,1,20,244,50,50,1,25,152,42, + 160,109,244,0,50,1,25,247,106,1,65,1,1,32,241,0, + 65,1,1,32,247,78,2,33,1,43,241,0,33,1,43,240, + 74,1,0,20,35,208,0,16,247,10,121,1,1,70,1,241, + 0,121,1,1,70,1,247,120,3,72,2,1,44,241,0,72, + 2,1,44,243,90,4,22,1,13,242,50,8,1,42,242,22, + 2,1,35,243,10,5,1,37,249,242,125,52,0,24,58,115, + 6,0,0,0,193,52,12,71,55,4, }; diff --git a/contrib/tools/python3/Python/frozen_modules/ntpath.h b/contrib/tools/python3/Python/frozen_modules/ntpath.h index eadc882495..2ca7a45419 100644 --- a/contrib/tools/python3/Python/frozen_modules/ntpath.h +++ b/contrib/tools/python3/Python/frozen_modules/ntpath.h @@ -1,7 +1,7 @@ /* Auto-generated by Programs/_freeze_module.py */ const unsigned char _Py_M__ntpath[] = { 227,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,0,0,0,0,243,158,2,0,0,151,0,100,0,90,0, + 0,0,0,0,0,243,154,2,0,0,151,0,100,0,90,0, 100,1,90,1,100,2,90,2,100,1,90,3,100,3,90,4, 100,4,90,5,100,5,90,6,100,6,90,7,100,7,90,8, 100,8,100,9,108,9,90,9,100,8,100,9,108,10,90,10, @@ -22,775 +22,810 @@ const unsigned char _Py_M__ntpath[] = { 132,0,90,36,9,0,100,8,100,28,108,37,109,38,90,38, 1,0,100,29,132,0,90,39,100,30,132,0,90,40,100,31, 132,0,90,41,9,0,100,8,100,32,108,37,109,42,90,43, - 1,0,100,34,132,0,90,44,9,0,100,8,100,35,108,37, - 109,45,90,45,1,0,100,36,132,0,90,46,9,0,100,8, - 100,37,108,37,109,47,90,47,109,48,90,49,1,0,100,38, - 132,0,90,50,100,39,132,0,90,51,100,40,100,41,156,1, - 100,42,132,2,90,52,100,43,90,53,100,53,100,44,132,1, - 90,54,100,45,132,0,90,55,9,0,100,8,100,46,108,37, - 109,56,90,57,1,0,100,8,100,47,108,37,109,58,90,59, - 1,0,100,8,100,48,108,37,109,60,90,61,1,0,100,8, - 100,49,108,37,109,62,90,63,1,0,9,0,100,8,100,50, - 108,37,109,64,90,64,1,0,100,51,132,0,90,65,121,9, - 35,0,101,23,36,0,114,6,1,0,100,15,132,0,90,22, - 89,0,140,192,119,0,120,3,89,0,119,1,35,0,101,23, - 36,0,114,5,1,0,100,9,90,38,89,0,140,118,119,0, - 120,3,89,0,119,1,35,0,101,23,36,0,114,6,1,0, - 100,33,132,0,90,43,89,0,140,116,119,0,120,3,89,0, - 119,1,35,0,101,23,36,0,114,5,1,0,101,44,90,46, - 89,0,140,116,119,0,120,3,89,0,119,1,35,0,101,23, - 36,0,114,5,1,0,101,46,90,52,89,0,140,108,119,0, - 120,3,89,0,119,1,35,0,101,23,36,0,114,3,1,0, - 89,0,140,85,119,0,120,3,89,0,119,1,35,0,101,23, - 36,0,114,6,1,0,100,52,132,0,90,65,89,0,121,9, - 119,0,120,3,89,0,119,1,41,54,122,144,67,111,109,109, - 111,110,32,112,97,116,104,110,97,109,101,32,109,97,110,105, - 112,117,108,97,116,105,111,110,115,44,32,87,105,110,100,111, - 119,115,78,84,47,57,53,32,118,101,114,115,105,111,110,46, - 10,10,73,110,115,116,101,97,100,32,111,102,32,105,109,112, - 111,114,116,105,110,103,32,116,104,105,115,32,109,111,100,117, - 108,101,32,100,105,114,101,99,116,108,121,44,32,105,109,112, - 111,114,116,32,111,115,32,97,110,100,32,114,101,102,101,114, - 32,116,111,32,116,104,105,115,10,109,111,100,117,108,101,32, - 97,115,32,111,115,46,112,97,116,104,46,10,218,1,46,250, - 2,46,46,218,1,92,218,1,59,218,1,47,122,8,46,59, - 67,58,92,98,105,110,218,3,110,117,108,233,0,0,0,0, - 78,41,1,218,1,42,41,40,218,8,110,111,114,109,99,97, - 115,101,218,5,105,115,97,98,115,218,4,106,111,105,110,218, - 10,115,112,108,105,116,100,114,105,118,101,218,9,115,112,108, - 105,116,114,111,111,116,218,5,115,112,108,105,116,218,8,115, - 112,108,105,116,101,120,116,218,8,98,97,115,101,110,97,109, - 101,218,7,100,105,114,110,97,109,101,218,12,99,111,109,109, - 111,110,112,114,101,102,105,120,218,7,103,101,116,115,105,122, - 101,218,8,103,101,116,109,116,105,109,101,218,8,103,101,116, - 97,116,105,109,101,218,8,103,101,116,99,116,105,109,101,218, - 6,105,115,108,105,110,107,218,6,101,120,105,115,116,115,218, - 7,108,101,120,105,115,116,115,218,5,105,115,100,105,114,218, - 6,105,115,102,105,108,101,218,7,105,115,109,111,117,110,116, - 218,10,101,120,112,97,110,100,117,115,101,114,218,10,101,120, - 112,97,110,100,118,97,114,115,218,8,110,111,114,109,112,97, - 116,104,218,7,97,98,115,112,97,116,104,218,6,99,117,114, - 100,105,114,218,6,112,97,114,100,105,114,218,3,115,101,112, - 218,7,112,97,116,104,115,101,112,218,7,100,101,102,112,97, - 116,104,218,6,97,108,116,115,101,112,218,6,101,120,116,115, - 101,112,218,7,100,101,118,110,117,108,108,218,8,114,101,97, - 108,112,97,116,104,218,26,115,117,112,112,111,114,116,115,95, - 117,110,105,99,111,100,101,95,102,105,108,101,110,97,109,101, - 115,218,7,114,101,108,112,97,116,104,218,8,115,97,109,101, - 102,105,108,101,218,12,115,97,109,101,111,112,101,110,102,105, - 108,101,218,8,115,97,109,101,115,116,97,116,218,10,99,111, - 109,109,111,110,112,97,116,104,218,10,105,115,106,117,110,99, - 116,105,111,110,99,1,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,3,0,0,0,243,38,0,0,0,151,0, - 116,1,0,0,0,0,0,0,0,0,124,0,116,2,0,0, - 0,0,0,0,0,0,171,2,0,0,0,0,0,0,114,1, - 121,1,121,2,41,3,78,243,2,0,0,0,92,47,250,2, - 92,47,41,2,218,10,105,115,105,110,115,116,97,110,99,101, - 218,5,98,121,116,101,115,169,1,218,4,112,97,116,104,115, - 1,0,0,0,32,250,15,60,102,114,111,122,101,110,32,110, - 116,112,97,116,104,62,218,13,95,103,101,116,95,98,111,116, - 104,115,101,112,115,114,58,0,0,0,35,0,0,0,115,18, - 0,0,0,128,0,220,7,17,144,36,156,5,212,7,30,216, - 15,21,224,15,20,243,0,0,0,0,41,3,218,13,76,67, - 77,97,112,83,116,114,105,110,103,69,120,218,21,76,79,67, - 65,76,69,95,78,65,77,69,95,73,78,86,65,82,73,65, - 78,84,218,15,76,67,77,65,80,95,76,79,87,69,82,67, - 65,83,69,99,1,0,0,0,0,0,0,0,0,0,0,0, - 8,0,0,0,3,0,0,0,243,88,1,0,0,151,0,116, - 1,0,0,0,0,0,0,0,0,106,2,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,171, - 1,0,0,0,0,0,0,125,0,124,0,115,2,124,0,83, - 0,116,5,0,0,0,0,0,0,0,0,124,0,116,6,0, - 0,0,0,0,0,0,0,171,2,0,0,0,0,0,0,114, - 93,116,9,0,0,0,0,0,0,0,0,106,10,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, - 0,0,0,0,0,0,0,125,1,124,0,106,13,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 1,100,1,171,2,0,0,0,0,0,0,106,15,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, - 2,100,3,171,2,0,0,0,0,0,0,125,0,116,17,0, - 0,0,0,0,0,0,0,116,18,0,0,0,0,0,0,0, - 0,116,20,0,0,0,0,0,0,0,0,124,0,171,3,0, - 0,0,0,0,0,125,0,124,0,106,23,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,1,100, - 1,171,2,0,0,0,0,0,0,83,0,116,17,0,0,0, - 0,0,0,0,0,116,18,0,0,0,0,0,0,0,0,116, - 20,0,0,0,0,0,0,0,0,124,0,106,15,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, - 2,100,3,171,2,0,0,0,0,0,0,171,3,0,0,0, - 0,0,0,83,0,41,4,250,110,78,111,114,109,97,108,105, - 122,101,32,99,97,115,101,32,111,102,32,112,97,116,104,110, - 97,109,101,46,10,10,32,32,32,32,32,32,32,32,77,97, - 107,101,115,32,97,108,108,32,99,104,97,114,97,99,116,101, - 114,115,32,108,111,119,101,114,99,97,115,101,32,97,110,100, - 32,97,108,108,32,115,108,97,115,104,101,115,32,105,110,116, - 111,32,98,97,99,107,115,108,97,115,104,101,115,46,10,32, - 32,32,32,32,32,32,32,218,15,115,117,114,114,111,103,97, - 116,101,101,115,99,97,112,101,114,6,0,0,0,114,4,0, - 0,0,41,12,218,2,111,115,218,6,102,115,112,97,116,104, - 114,53,0,0,0,114,54,0,0,0,218,3,115,121,115,218, - 21,103,101,116,102,105,108,101,115,121,115,116,101,109,101,110, - 99,111,100,105,110,103,218,6,100,101,99,111,100,101,218,7, - 114,101,112,108,97,99,101,218,14,95,76,67,77,97,112,83, - 116,114,105,110,103,69,120,218,22,95,76,79,67,65,76,69, - 95,78,65,77,69,95,73,78,86,65,82,73,65,78,84,218, - 16,95,76,67,77,65,80,95,76,79,87,69,82,67,65,83, - 69,218,6,101,110,99,111,100,101,41,2,218,1,115,218,8, - 101,110,99,111,100,105,110,103,115,2,0,0,0,32,32,114, - 57,0,0,0,114,10,0,0,0,114,10,0,0,0,51,0, - 0,0,115,148,0,0,0,128,0,244,10,0,13,15,143,73, - 137,73,144,97,139,76,136,1,217,15,16,216,19,20,136,72, - 220,11,21,144,97,156,21,212,11,31,220,23,26,215,23,48, - 209,23,48,211,23,50,136,72,216,16,17,151,8,145,8,152, - 24,208,35,52,211,16,53,215,16,61,209,16,61,184,99,192, - 52,211,16,72,136,65,220,16,30,212,31,53,220,31,47,176, - 17,243,3,1,17,52,136,65,224,19,20,151,56,145,56,152, - 72,208,38,55,211,19,56,208,12,56,228,19,33,212,34,56, - 220,34,50,216,34,35,167,41,161,41,168,67,176,20,211,34, - 54,243,5,2,20,56,240,0,2,13,56,114,59,0,0,0, - 99,1,0,0,0,0,0,0,0,0,0,0,0,6,0,0, - 0,3,0,0,0,243,24,1,0,0,151,0,116,1,0,0, - 0,0,0,0,0,0,106,2,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,0,171,1,0,0, - 0,0,0,0,125,0,116,5,0,0,0,0,0,0,0,0, - 124,0,116,6,0,0,0,0,0,0,0,0,171,2,0,0, - 0,0,0,0,114,70,116,1,0,0,0,0,0,0,0,0, - 106,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,116,1,0,0,0,0,0,0,0,0,106,10, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,0,171,1,0,0,0,0,0,0,106,13,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 100,1,100,2,171,2,0,0,0,0,0,0,106,15,0,0, + 1,0,9,0,100,8,100,34,108,37,109,44,90,44,1,0, + 100,35,132,0,90,45,9,0,100,8,100,37,108,37,109,46, + 90,46,109,47,90,48,1,0,100,38,132,0,90,49,100,39, + 132,0,90,50,100,40,100,41,156,1,100,42,132,2,90,51, + 100,43,90,52,100,53,100,44,132,1,90,53,100,45,132,0, + 90,54,9,0,100,8,100,46,108,37,109,55,90,56,1,0, + 100,8,100,47,108,37,109,57,90,58,1,0,100,8,100,48, + 108,37,109,59,90,60,1,0,100,8,100,49,108,37,109,61, + 90,62,1,0,9,0,100,8,100,50,108,37,109,63,90,63, + 1,0,100,51,132,0,90,64,121,9,35,0,101,23,36,0, + 114,6,1,0,100,15,132,0,90,22,89,0,140,189,119,0, + 120,3,89,0,119,1,35,0,101,23,36,0,114,5,1,0, + 100,9,90,38,89,0,140,115,119,0,120,3,89,0,119,1, + 35,0,101,23,36,0,114,6,1,0,100,33,132,0,90,43, + 89,0,140,113,119,0,120,3,89,0,119,1,35,0,101,23, + 36,0,114,6,1,0,100,36,132,0,90,45,89,0,140,117, + 119,0,120,3,89,0,119,1,35,0,101,23,36,0,114,5, + 1,0,101,45,90,51,89,0,140,109,119,0,120,3,89,0, + 119,1,35,0,101,23,36,0,114,3,1,0,89,0,140,86, + 119,0,120,3,89,0,119,1,35,0,101,23,36,0,114,6, + 1,0,100,52,132,0,90,64,89,0,121,9,119,0,120,3, + 89,0,119,1,41,54,122,144,67,111,109,109,111,110,32,112, + 97,116,104,110,97,109,101,32,109,97,110,105,112,117,108,97, + 116,105,111,110,115,44,32,87,105,110,100,111,119,115,78,84, + 47,57,53,32,118,101,114,115,105,111,110,46,10,10,73,110, + 115,116,101,97,100,32,111,102,32,105,109,112,111,114,116,105, + 110,103,32,116,104,105,115,32,109,111,100,117,108,101,32,100, + 105,114,101,99,116,108,121,44,32,105,109,112,111,114,116,32, + 111,115,32,97,110,100,32,114,101,102,101,114,32,116,111,32, + 116,104,105,115,10,109,111,100,117,108,101,32,97,115,32,111, + 115,46,112,97,116,104,46,10,218,1,46,250,2,46,46,218, + 1,92,218,1,59,218,1,47,122,8,46,59,67,58,92,98, + 105,110,218,3,110,117,108,233,0,0,0,0,78,41,1,218, + 1,42,41,40,218,8,110,111,114,109,99,97,115,101,218,5, + 105,115,97,98,115,218,4,106,111,105,110,218,10,115,112,108, + 105,116,100,114,105,118,101,218,9,115,112,108,105,116,114,111, + 111,116,218,5,115,112,108,105,116,218,8,115,112,108,105,116, + 101,120,116,218,8,98,97,115,101,110,97,109,101,218,7,100, + 105,114,110,97,109,101,218,12,99,111,109,109,111,110,112,114, + 101,102,105,120,218,7,103,101,116,115,105,122,101,218,8,103, + 101,116,109,116,105,109,101,218,8,103,101,116,97,116,105,109, + 101,218,8,103,101,116,99,116,105,109,101,218,6,105,115,108, + 105,110,107,218,6,101,120,105,115,116,115,218,7,108,101,120, + 105,115,116,115,218,5,105,115,100,105,114,218,6,105,115,102, + 105,108,101,218,7,105,115,109,111,117,110,116,218,10,101,120, + 112,97,110,100,117,115,101,114,218,10,101,120,112,97,110,100, + 118,97,114,115,218,8,110,111,114,109,112,97,116,104,218,7, + 97,98,115,112,97,116,104,218,6,99,117,114,100,105,114,218, + 6,112,97,114,100,105,114,218,3,115,101,112,218,7,112,97, + 116,104,115,101,112,218,7,100,101,102,112,97,116,104,218,6, + 97,108,116,115,101,112,218,6,101,120,116,115,101,112,218,7, + 100,101,118,110,117,108,108,218,8,114,101,97,108,112,97,116, + 104,218,26,115,117,112,112,111,114,116,115,95,117,110,105,99, + 111,100,101,95,102,105,108,101,110,97,109,101,115,218,7,114, + 101,108,112,97,116,104,218,8,115,97,109,101,102,105,108,101, + 218,12,115,97,109,101,111,112,101,110,102,105,108,101,218,8, + 115,97,109,101,115,116,97,116,218,10,99,111,109,109,111,110, + 112,97,116,104,218,10,105,115,106,117,110,99,116,105,111,110, + 99,1,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,3,0,0,0,243,38,0,0,0,151,0,116,1,0,0, + 0,0,0,0,0,0,124,0,116,2,0,0,0,0,0,0, + 0,0,171,2,0,0,0,0,0,0,114,1,121,1,121,2, + 41,3,78,243,2,0,0,0,92,47,250,2,92,47,41,2, + 218,10,105,115,105,110,115,116,97,110,99,101,218,5,98,121, + 116,101,115,169,1,218,4,112,97,116,104,115,1,0,0,0, + 32,250,15,60,102,114,111,122,101,110,32,110,116,112,97,116, + 104,62,218,13,95,103,101,116,95,98,111,116,104,115,101,112, + 115,114,58,0,0,0,35,0,0,0,115,18,0,0,0,128, + 0,220,7,17,144,36,156,5,212,7,30,216,15,21,224,15, + 20,243,0,0,0,0,41,3,218,13,76,67,77,97,112,83, + 116,114,105,110,103,69,120,218,21,76,79,67,65,76,69,95, + 78,65,77,69,95,73,78,86,65,82,73,65,78,84,218,15, + 76,67,77,65,80,95,76,79,87,69,82,67,65,83,69,99, + 1,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0, + 3,0,0,0,243,88,1,0,0,151,0,116,1,0,0,0, + 0,0,0,0,0,106,2,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,0,171,1,0,0,0, + 0,0,0,125,0,124,0,115,2,124,0,83,0,116,5,0, + 0,0,0,0,0,0,0,124,0,116,6,0,0,0,0,0, + 0,0,0,171,2,0,0,0,0,0,0,114,93,116,9,0, + 0,0,0,0,0,0,0,106,10,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,171,0,0,0,0, + 0,0,0,125,1,124,0,106,13,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,1,100,1,171, + 2,0,0,0,0,0,0,106,15,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,100,2,100,3,171, + 2,0,0,0,0,0,0,125,0,116,17,0,0,0,0,0, + 0,0,0,116,18,0,0,0,0,0,0,0,0,116,20,0, + 0,0,0,0,0,0,0,124,0,171,3,0,0,0,0,0, + 0,125,0,124,0,106,23,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,1,100,1,171,2,0, + 0,0,0,0,0,83,0,116,17,0,0,0,0,0,0,0, + 0,116,18,0,0,0,0,0,0,0,0,116,20,0,0,0, + 0,0,0,0,0,124,0,106,15,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,100,2,100,3,171, + 2,0,0,0,0,0,0,171,3,0,0,0,0,0,0,83, + 0,41,4,250,110,78,111,114,109,97,108,105,122,101,32,99, + 97,115,101,32,111,102,32,112,97,116,104,110,97,109,101,46, + 10,10,32,32,32,32,32,32,32,32,77,97,107,101,115,32, + 97,108,108,32,99,104,97,114,97,99,116,101,114,115,32,108, + 111,119,101,114,99,97,115,101,32,97,110,100,32,97,108,108, + 32,115,108,97,115,104,101,115,32,105,110,116,111,32,98,97, + 99,107,115,108,97,115,104,101,115,46,10,32,32,32,32,32, + 32,32,32,218,15,115,117,114,114,111,103,97,116,101,101,115, + 99,97,112,101,114,6,0,0,0,114,4,0,0,0,41,12, + 218,2,111,115,218,6,102,115,112,97,116,104,114,53,0,0, + 0,114,54,0,0,0,218,3,115,121,115,218,21,103,101,116, + 102,105,108,101,115,121,115,116,101,109,101,110,99,111,100,105, + 110,103,218,6,100,101,99,111,100,101,218,7,114,101,112,108, + 97,99,101,218,14,95,76,67,77,97,112,83,116,114,105,110, + 103,69,120,218,22,95,76,79,67,65,76,69,95,78,65,77, + 69,95,73,78,86,65,82,73,65,78,84,218,16,95,76,67, + 77,65,80,95,76,79,87,69,82,67,65,83,69,218,6,101, + 110,99,111,100,101,41,2,218,1,115,218,8,101,110,99,111, + 100,105,110,103,115,2,0,0,0,32,32,114,57,0,0,0, + 114,10,0,0,0,114,10,0,0,0,51,0,0,0,115,148, + 0,0,0,128,0,244,10,0,13,15,143,73,137,73,144,97, + 139,76,136,1,217,15,16,216,19,20,136,72,220,11,21,144, + 97,156,21,212,11,31,220,23,26,215,23,48,209,23,48,211, + 23,50,136,72,216,16,17,151,8,145,8,152,24,208,35,52, + 211,16,53,215,16,61,209,16,61,184,99,192,52,211,16,72, + 136,65,220,16,30,212,31,53,220,31,47,176,17,243,3,1, + 17,52,136,65,224,19,20,151,56,145,56,152,72,208,38,55, + 211,19,56,208,12,56,228,19,33,212,34,56,220,34,50,216, + 34,35,167,41,161,41,168,67,176,20,211,34,54,243,5,2, + 20,56,240,0,2,13,56,114,59,0,0,0,99,1,0,0, + 0,0,0,0,0,0,0,0,0,6,0,0,0,3,0,0, + 0,243,24,1,0,0,151,0,116,1,0,0,0,0,0,0, + 0,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, + 125,0,116,5,0,0,0,0,0,0,0,0,124,0,116,6, + 0,0,0,0,0,0,0,0,171,2,0,0,0,0,0,0, + 114,70,116,1,0,0,0,0,0,0,0,0,106,8,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 171,0,0,0,0,0,0,0,171,1,0,0,0,0,0,0, - 83,0,124,0,106,13,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,100,1,100,2,171,2,0,0, - 0,0,0,0,106,15,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0, - 83,0,41,3,114,64,0,0,0,114,6,0,0,0,114,4, - 0,0,0,41,8,114,66,0,0,0,114,67,0,0,0,114, - 53,0,0,0,114,54,0,0,0,218,8,102,115,101,110,99, - 111,100,101,218,8,102,115,100,101,99,111,100,101,114,71,0, - 0,0,218,5,108,111,119,101,114,41,1,114,76,0,0,0, - 115,1,0,0,0,32,114,57,0,0,0,114,10,0,0,0, - 114,10,0,0,0,70,0,0,0,115,98,0,0,0,128,0, - 244,10,0,13,15,143,73,137,73,144,97,139,76,136,1,220, - 11,21,144,97,156,21,212,11,31,220,19,21,151,59,145,59, - 156,114,159,123,153,123,168,49,155,126,215,31,53,209,31,53, - 176,99,184,52,211,31,64,215,31,70,209,31,70,211,31,72, - 211,19,73,208,12,73,216,15,16,143,121,137,121,152,19,152, - 100,211,15,35,215,15,41,209,15,41,211,15,43,208,8,43, - 114,59,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,3,0,0,0,243,218,0,0,0,151, - 0,116,1,0,0,0,0,0,0,0,0,106,2,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 0,171,1,0,0,0,0,0,0,125,0,116,5,0,0,0, - 0,0,0,0,0,124,0,116,6,0,0,0,0,0,0,0, - 0,171,2,0,0,0,0,0,0,114,7,100,1,125,1,100, - 2,125,2,100,3,125,3,110,6,100,4,125,1,100,5,125, - 2,100,6,125,3,124,0,100,7,100,8,26,0,106,9,0, + 116,1,0,0,0,0,0,0,0,0,106,10,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0, + 171,1,0,0,0,0,0,0,106,13,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,100,1,100,2, + 171,2,0,0,0,0,0,0,106,15,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,171,0,0,0, + 0,0,0,0,171,1,0,0,0,0,0,0,83,0,124,0, + 106,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,100,1,100,2,171,2,0,0,0,0,0,0, + 106,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,171,0,0,0,0,0,0,0,83,0,41,3, + 114,64,0,0,0,114,6,0,0,0,114,4,0,0,0,41, + 8,114,66,0,0,0,114,67,0,0,0,114,53,0,0,0, + 114,54,0,0,0,218,8,102,115,101,110,99,111,100,101,218, + 8,102,115,100,101,99,111,100,101,114,71,0,0,0,218,5, + 108,111,119,101,114,41,1,114,76,0,0,0,115,1,0,0, + 0,32,114,57,0,0,0,114,10,0,0,0,114,10,0,0, + 0,70,0,0,0,115,98,0,0,0,128,0,244,10,0,13, + 15,143,73,137,73,144,97,139,76,136,1,220,11,21,144,97, + 156,21,212,11,31,220,19,21,151,59,145,59,156,114,159,123, + 153,123,168,49,155,126,215,31,53,209,31,53,176,99,184,52, + 211,31,64,215,31,70,209,31,70,211,31,72,211,19,73,208, + 12,73,216,15,16,143,121,137,121,152,19,152,100,211,15,35, + 215,15,41,209,15,41,211,15,43,208,8,43,114,59,0,0, + 0,99,1,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,3,0,0,0,243,218,0,0,0,151,0,116,1,0, + 0,0,0,0,0,0,0,106,2,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,0,171,1,0, + 0,0,0,0,0,125,0,116,5,0,0,0,0,0,0,0, + 0,124,0,116,6,0,0,0,0,0,0,0,0,171,2,0, + 0,0,0,0,0,114,7,100,1,125,1,100,2,125,2,100, + 3,125,3,110,6,100,4,125,1,100,5,125,2,100,6,125, + 3,124,0,100,7,100,8,26,0,106,9,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,2,124, + 1,171,2,0,0,0,0,0,0,125,0,124,0,106,11,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,2,124,1,171,2,0,0,0,0,0,0,125,0,124, - 0,106,11,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,124,1,171,1,0,0,0,0,0,0,115, - 18,124,0,106,11,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,3,100,9,171,2,0,0,0, - 0,0,0,114,1,121,10,121,11,41,12,122,31,84,101,115, - 116,32,119,104,101,116,104,101,114,32,97,32,112,97,116,104, - 32,105,115,32,97,98,115,111,108,117,116,101,243,1,0,0, - 0,92,243,1,0,0,0,47,115,2,0,0,0,58,92,114, - 4,0,0,0,114,6,0,0,0,122,2,58,92,78,233,3, - 0,0,0,233,1,0,0,0,84,70,41,6,114,66,0,0, - 0,114,67,0,0,0,114,53,0,0,0,114,54,0,0,0, - 114,71,0,0,0,218,10,115,116,97,114,116,115,119,105,116, - 104,41,4,114,76,0,0,0,114,36,0,0,0,114,39,0, - 0,0,218,9,99,111,108,111,110,95,115,101,112,115,4,0, - 0,0,32,32,32,32,114,57,0,0,0,114,11,0,0,0, - 114,11,0,0,0,87,0,0,0,115,110,0,0,0,128,0, - 228,8,10,143,9,137,9,144,33,139,12,128,65,220,7,17, - 144,33,148,85,212,7,27,216,14,19,136,3,216,17,21,136, - 6,216,20,26,137,9,224,14,18,136,3,216,17,20,136,6, - 216,20,25,136,9,216,8,9,136,34,136,49,136,5,143,13, - 137,13,144,102,152,99,211,8,34,128,65,240,6,0,8,9, - 135,124,129,124,144,67,212,7,24,152,65,159,76,153,76,168, - 25,176,65,212,28,54,216,15,19,216,11,16,114,59,0,0, + 0,124,1,171,1,0,0,0,0,0,0,115,18,124,0,106, + 11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,3,100,9,171,2,0,0,0,0,0,0,114, + 1,121,10,121,11,41,12,122,31,84,101,115,116,32,119,104, + 101,116,104,101,114,32,97,32,112,97,116,104,32,105,115,32, + 97,98,115,111,108,117,116,101,243,1,0,0,0,92,243,1, + 0,0,0,47,115,2,0,0,0,58,92,114,4,0,0,0, + 114,6,0,0,0,122,2,58,92,78,233,3,0,0,0,233, + 1,0,0,0,84,70,41,6,114,66,0,0,0,114,67,0, + 0,0,114,53,0,0,0,114,54,0,0,0,114,71,0,0, + 0,218,10,115,116,97,114,116,115,119,105,116,104,41,4,114, + 76,0,0,0,114,36,0,0,0,114,39,0,0,0,218,9, + 99,111,108,111,110,95,115,101,112,115,4,0,0,0,32,32, + 32,32,114,57,0,0,0,114,11,0,0,0,114,11,0,0, + 0,87,0,0,0,115,110,0,0,0,128,0,228,8,10,143, + 9,137,9,144,33,139,12,128,65,220,7,17,144,33,148,85, + 212,7,27,216,14,19,136,3,216,17,21,136,6,216,20,26, + 137,9,224,14,18,136,3,216,17,20,136,6,216,20,25,136, + 9,216,8,9,136,34,136,49,136,5,143,13,137,13,144,102, + 152,99,211,8,34,128,65,240,6,0,8,9,135,124,129,124, + 144,67,212,7,24,152,65,159,76,153,76,168,25,176,65,212, + 28,54,216,15,19,216,11,16,114,59,0,0,0,99,1,0, + 0,0,0,0,0,0,0,0,0,0,5,0,0,0,7,0, + 0,0,243,56,2,0,0,151,0,116,1,0,0,0,0,0, + 0,0,0,106,2,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,0,171,1,0,0,0,0,0, + 0,125,0,116,5,0,0,0,0,0,0,0,0,124,0,116, + 6,0,0,0,0,0,0,0,0,171,2,0,0,0,0,0, + 0,114,7,100,1,125,2,100,2,125,3,100,3,125,4,110, + 6,100,4,125,2,100,5,125,3,100,6,125,4,9,0,124, + 1,115,8,124,0,100,0,100,7,26,0,124,2,122,0,0, + 0,1,0,116,9,0,0,0,0,0,0,0,0,124,0,171, + 1,0,0,0,0,0,0,92,3,0,0,125,5,125,6,125, + 7,116,11,0,0,0,0,0,0,0,0,116,0,0,0,0, + 0,0,0,0,0,106,2,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,1,171,2,0,0,0, + 0,0,0,68,0,93,98,0,0,125,8,116,9,0,0,0, + 0,0,0,0,0,124,8,171,1,0,0,0,0,0,0,92, + 3,0,0,125,9,125,10,125,11,124,10,114,11,124,9,115, + 2,124,5,115,2,124,9,125,5,124,10,125,6,124,11,125, + 7,140,31,124,9,114,47,124,9,124,5,107,55,0,0,114, + 42,124,9,106,13,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,124, + 5,106,13,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,171,0,0,0,0,0,0,0,107,55,0, + 0,114,7,124,9,125,5,124,10,125,6,124,11,125,7,140, + 78,124,9,125,5,124,7,114,12,124,7,100,8,25,0,0, + 0,124,3,118,1,114,5,124,7,124,2,122,0,0,0,125, + 7,124,7,124,11,122,0,0,0,125,7,140,100,4,0,124, + 7,114,22,124,6,115,20,124,5,114,18,124,5,100,8,100, + 0,26,0,124,4,124,3,122,0,0,0,118,1,114,8,124, + 5,124,2,122,0,0,0,124,7,122,0,0,0,83,0,124, + 5,124,6,122,0,0,0,124,7,122,0,0,0,83,0,35, + 0,116,14,0,0,0,0,0,0,0,0,116,16,0,0,0, + 0,0,0,0,0,116,18,0,0,0,0,0,0,0,0,102, + 3,36,0,114,25,1,0,116,21,0,0,0,0,0,0,0, + 0,106,22,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,100,9,124,0,103,2,124,1,162,1,173, + 6,142,0,1,0,130,0,119,0,120,3,89,0,119,1,41, + 10,78,114,83,0,0,0,114,51,0,0,0,243,1,0,0, + 0,58,114,4,0,0,0,114,52,0,0,0,218,1,58,114, + 8,0,0,0,233,255,255,255,255,114,12,0,0,0,41,12, + 114,66,0,0,0,114,67,0,0,0,114,53,0,0,0,114, + 54,0,0,0,114,14,0,0,0,218,3,109,97,112,114,81, + 0,0,0,218,9,84,121,112,101,69,114,114,111,114,218,14, + 65,116,116,114,105,98,117,116,101,69,114,114,111,114,218,12, + 66,121,116,101,115,87,97,114,110,105,110,103,218,11,103,101, + 110,101,114,105,99,112,97,116,104,218,16,95,99,104,101,99, + 107,95,97,114,103,95,116,121,112,101,115,41,12,114,56,0, + 0,0,218,5,112,97,116,104,115,114,36,0,0,0,218,4, + 115,101,112,115,218,5,99,111,108,111,110,218,12,114,101,115, + 117,108,116,95,100,114,105,118,101,218,11,114,101,115,117,108, + 116,95,114,111,111,116,218,11,114,101,115,117,108,116,95,112, + 97,116,104,218,1,112,218,7,112,95,100,114,105,118,101,218, + 6,112,95,114,111,111,116,218,6,112,95,112,97,116,104,115, + 12,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32, + 114,57,0,0,0,114,12,0,0,0,114,12,0,0,0,107, + 0,0,0,115,95,1,0,0,128,0,220,11,13,143,57,137, + 57,144,84,139,63,128,68,220,7,17,144,36,156,5,212,7, + 30,216,14,19,136,3,216,15,21,136,4,216,16,20,137,5, + 224,14,18,136,3,216,15,20,136,4,216,16,19,136,5,240, + 2,33,5,14,217,15,20,216,12,16,144,18,144,33,136,72, + 144,115,138,78,220,49,58,184,52,179,31,209,8,46,136,12, + 144,107,160,59,220,17,20,148,82,151,89,145,89,160,5,214, + 17,38,136,65,220,38,47,176,1,163,108,209,12,35,136,71, + 144,86,152,86,217,15,21,225,19,26,161,44,216,35,42,144, + 76,216,30,36,144,11,216,30,36,144,11,216,16,24,217,17, + 24,152,87,168,12,210,29,52,216,19,26,151,61,145,61,147, + 63,160,108,215,38,56,209,38,56,211,38,58,210,19,58,224, + 35,42,144,76,216,34,40,144,75,216,34,40,144,75,216,20, + 28,224,31,38,144,12,225,15,26,152,123,168,50,153,127,176, + 100,209,31,58,216,30,41,168,67,209,30,47,144,11,216,26, + 37,168,6,209,26,46,137,75,240,43,0,18,39,241,46,0, + 13,24,161,11,217,12,24,152,92,168,34,168,35,208,29,46, + 176,101,184,100,177,108,209,29,66,216,19,31,160,35,209,19, + 37,168,11,209,19,51,208,12,51,216,15,27,152,107,209,15, + 41,168,75,209,15,55,208,8,55,248,220,12,21,148,126,164, + 124,208,11,52,242,0,2,5,14,220,8,19,215,8,36,209, + 8,36,160,86,168,84,208,8,58,176,69,211,8,58,216,8, + 13,240,5,2,5,14,250,115,18,0,0,0,180,66,47,67, + 44,0,195,36,7,67,44,0,195,44,45,68,25,3,99,1, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3, + 0,0,0,243,46,0,0,0,151,0,116,1,0,0,0,0, + 0,0,0,0,124,0,171,1,0,0,0,0,0,0,92,3, + 0,0,125,1,125,2,125,3,124,1,124,2,124,3,122,0, + 0,0,102,2,83,0,41,1,97,218,2,0,0,83,112,108, + 105,116,32,97,32,112,97,116,104,110,97,109,101,32,105,110, + 116,111,32,100,114,105,118,101,47,85,78,67,32,115,104,97, + 114,101,112,111,105,110,116,32,97,110,100,32,114,101,108,97, + 116,105,118,101,32,112,97,116,104,32,115,112,101,99,105,102, + 105,101,114,115,46,10,32,32,32,32,82,101,116,117,114,110, + 115,32,97,32,50,45,116,117,112,108,101,32,40,100,114,105, + 118,101,95,111,114,95,117,110,99,44,32,112,97,116,104,41, + 59,32,101,105,116,104,101,114,32,112,97,114,116,32,109,97, + 121,32,98,101,32,101,109,112,116,121,46,10,10,32,32,32, + 32,73,102,32,121,111,117,32,97,115,115,105,103,110,10,32, + 32,32,32,32,32,32,32,114,101,115,117,108,116,32,61,32, + 115,112,108,105,116,100,114,105,118,101,40,112,41,10,32,32, + 32,32,73,116,32,105,115,32,97,108,119,97,121,115,32,116, + 114,117,101,32,116,104,97,116,58,10,32,32,32,32,32,32, + 32,32,114,101,115,117,108,116,91,48,93,32,43,32,114,101, + 115,117,108,116,91,49,93,32,61,61,32,112,10,10,32,32, + 32,32,73,102,32,116,104,101,32,112,97,116,104,32,99,111, + 110,116,97,105,110,101,100,32,97,32,100,114,105,118,101,32, + 108,101,116,116,101,114,44,32,100,114,105,118,101,95,111,114, + 95,117,110,99,32,119,105,108,108,32,99,111,110,116,97,105, + 110,32,101,118,101,114,121,116,104,105,110,103,10,32,32,32, + 32,117,112,32,116,111,32,97,110,100,32,105,110,99,108,117, + 100,105,110,103,32,116,104,101,32,99,111,108,111,110,46,32, + 32,101,46,103,46,32,115,112,108,105,116,100,114,105,118,101, + 40,34,99,58,47,100,105,114,34,41,32,114,101,116,117,114, + 110,115,32,40,34,99,58,34,44,32,34,47,100,105,114,34, + 41,10,10,32,32,32,32,73,102,32,116,104,101,32,112,97, + 116,104,32,99,111,110,116,97,105,110,101,100,32,97,32,85, + 78,67,32,112,97,116,104,44,32,116,104,101,32,100,114,105, + 118,101,95,111,114,95,117,110,99,32,119,105,108,108,32,99, + 111,110,116,97,105,110,32,116,104,101,32,104,111,115,116,32, + 110,97,109,101,10,32,32,32,32,97,110,100,32,115,104,97, + 114,101,32,117,112,32,116,111,32,98,117,116,32,110,111,116, + 32,105,110,99,108,117,100,105,110,103,32,116,104,101,32,102, + 111,117,114,116,104,32,100,105,114,101,99,116,111,114,121,32, + 115,101,112,97,114,97,116,111,114,32,99,104,97,114,97,99, + 116,101,114,46,10,32,32,32,32,101,46,103,46,32,115,112, + 108,105,116,100,114,105,118,101,40,34,47,47,104,111,115,116, + 47,99,111,109,112,117,116,101,114,47,100,105,114,34,41,32, + 114,101,116,117,114,110,115,32,40,34,47,47,104,111,115,116, + 47,99,111,109,112,117,116,101,114,34,44,32,34,47,100,105, + 114,34,41,10,10,32,32,32,32,80,97,116,104,115,32,99, + 97,110,110,111,116,32,99,111,110,116,97,105,110,32,98,111, + 116,104,32,97,32,100,114,105,118,101,32,108,101,116,116,101, + 114,32,97,110,100,32,97,32,85,78,67,32,112,97,116,104, + 46,10,10,32,32,32,32,41,1,114,14,0,0,0,41,4, + 114,105,0,0,0,218,5,100,114,105,118,101,218,4,114,111, + 111,116,218,4,116,97,105,108,115,4,0,0,0,32,32,32, + 32,114,57,0,0,0,114,13,0,0,0,114,13,0,0,0, + 156,0,0,0,115,35,0,0,0,128,0,244,38,0,25,34, + 160,33,155,12,209,4,21,128,69,136,52,144,20,216,11,16, + 144,36,152,20,145,43,208,11,29,208,4,29,114,59,0,0, 0,99,1,0,0,0,0,0,0,0,0,0,0,0,5,0, - 0,0,7,0,0,0,243,56,2,0,0,151,0,116,1,0, + 0,0,3,0,0,0,243,254,1,0,0,151,0,116,1,0, 0,0,0,0,0,0,0,106,2,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,124,0,171,1,0, 0,0,0,0,0,125,0,116,5,0,0,0,0,0,0,0, 0,124,0,116,6,0,0,0,0,0,0,0,0,171,2,0, - 0,0,0,0,0,114,7,100,1,125,2,100,2,125,3,100, - 3,125,4,110,6,100,4,125,2,100,5,125,3,100,6,125, - 4,9,0,124,1,115,8,124,0,100,0,100,7,26,0,124, - 2,122,0,0,0,1,0,116,9,0,0,0,0,0,0,0, - 0,124,0,171,1,0,0,0,0,0,0,92,3,0,0,125, - 5,125,6,125,7,116,11,0,0,0,0,0,0,0,0,116, - 0,0,0,0,0,0,0,0,0,106,2,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,1,171, - 2,0,0,0,0,0,0,68,0,93,98,0,0,125,8,116, - 9,0,0,0,0,0,0,0,0,124,8,171,1,0,0,0, - 0,0,0,92,3,0,0,125,9,125,10,125,11,124,10,114, - 11,124,9,115,2,124,5,115,2,124,9,125,5,124,10,125, - 6,124,11,125,7,140,31,124,9,114,47,124,9,124,5,107, - 55,0,0,114,42,124,9,106,13,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,171,0,0,0,0, - 0,0,0,124,5,106,13,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, - 0,107,55,0,0,114,7,124,9,125,5,124,10,125,6,124, - 11,125,7,140,78,124,9,125,5,124,7,114,12,124,7,100, - 8,25,0,0,0,124,3,118,1,114,5,124,7,124,2,122, - 0,0,0,125,7,124,7,124,11,122,0,0,0,125,7,140, - 100,4,0,124,7,114,22,124,6,115,20,124,5,114,18,124, - 5,100,8,100,0,26,0,124,4,124,3,122,0,0,0,118, - 1,114,8,124,5,124,2,122,0,0,0,124,7,122,0,0, - 0,83,0,124,5,124,6,122,0,0,0,124,7,122,0,0, - 0,83,0,35,0,116,14,0,0,0,0,0,0,0,0,116, - 16,0,0,0,0,0,0,0,0,116,18,0,0,0,0,0, - 0,0,0,102,3,36,0,114,25,1,0,116,21,0,0,0, - 0,0,0,0,0,106,22,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,100,9,124,0,103,2,124, - 1,162,1,173,6,142,0,1,0,130,0,119,0,120,3,89, - 0,119,1,41,10,78,114,83,0,0,0,114,51,0,0,0, - 243,1,0,0,0,58,114,4,0,0,0,114,52,0,0,0, - 218,1,58,114,8,0,0,0,233,255,255,255,255,114,12,0, - 0,0,41,12,114,66,0,0,0,114,67,0,0,0,114,53, - 0,0,0,114,54,0,0,0,114,14,0,0,0,218,3,109, - 97,112,114,81,0,0,0,218,9,84,121,112,101,69,114,114, - 111,114,218,14,65,116,116,114,105,98,117,116,101,69,114,114, - 111,114,218,12,66,121,116,101,115,87,97,114,110,105,110,103, - 218,11,103,101,110,101,114,105,99,112,97,116,104,218,16,95, - 99,104,101,99,107,95,97,114,103,95,116,121,112,101,115,41, - 12,114,56,0,0,0,218,5,112,97,116,104,115,114,36,0, - 0,0,218,4,115,101,112,115,218,5,99,111,108,111,110,218, - 12,114,101,115,117,108,116,95,100,114,105,118,101,218,11,114, - 101,115,117,108,116,95,114,111,111,116,218,11,114,101,115,117, - 108,116,95,112,97,116,104,218,1,112,218,7,112,95,100,114, - 105,118,101,218,6,112,95,114,111,111,116,218,6,112,95,112, - 97,116,104,115,12,0,0,0,32,32,32,32,32,32,32,32, - 32,32,32,32,114,57,0,0,0,114,12,0,0,0,114,12, - 0,0,0,107,0,0,0,115,95,1,0,0,128,0,220,11, - 13,143,57,137,57,144,84,139,63,128,68,220,7,17,144,36, - 156,5,212,7,30,216,14,19,136,3,216,15,21,136,4,216, - 16,20,137,5,224,14,18,136,3,216,15,20,136,4,216,16, - 19,136,5,240,2,33,5,14,217,15,20,216,12,16,144,18, - 144,33,136,72,144,115,138,78,220,49,58,184,52,179,31,209, - 8,46,136,12,144,107,160,59,220,17,20,148,82,151,89,145, - 89,160,5,214,17,38,136,65,220,38,47,176,1,163,108,209, - 12,35,136,71,144,86,152,86,217,15,21,225,19,26,161,44, - 216,35,42,144,76,216,30,36,144,11,216,30,36,144,11,216, - 16,24,217,17,24,152,87,168,12,210,29,52,216,19,26,151, - 61,145,61,147,63,160,108,215,38,56,209,38,56,211,38,58, - 210,19,58,224,35,42,144,76,216,34,40,144,75,216,34,40, - 144,75,216,20,28,224,31,38,144,12,225,15,26,152,123,168, - 50,153,127,176,100,209,31,58,216,30,41,168,67,209,30,47, - 144,11,216,26,37,168,6,209,26,46,137,75,240,43,0,18, - 39,241,46,0,13,24,161,11,217,12,24,152,92,168,34,168, - 35,208,29,46,176,101,184,100,177,108,209,29,66,216,19,31, - 160,35,209,19,37,168,11,209,19,51,208,12,51,216,15,27, - 152,107,209,15,41,168,75,209,15,55,208,8,55,248,220,12, - 21,148,126,164,124,208,11,52,242,0,2,5,14,220,8,19, - 215,8,36,209,8,36,160,86,168,84,208,8,58,176,69,211, - 8,58,216,8,13,240,5,2,5,14,250,115,18,0,0,0, - 180,66,47,67,44,0,195,36,7,67,44,0,195,44,45,68, - 25,3,99,1,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,3,0,0,0,243,46,0,0,0,151,0,116,1, - 0,0,0,0,0,0,0,0,124,0,171,1,0,0,0,0, - 0,0,92,3,0,0,125,1,125,2,125,3,124,1,124,2, - 124,3,122,0,0,0,102,2,83,0,41,1,97,218,2,0, - 0,83,112,108,105,116,32,97,32,112,97,116,104,110,97,109, - 101,32,105,110,116,111,32,100,114,105,118,101,47,85,78,67, - 32,115,104,97,114,101,112,111,105,110,116,32,97,110,100,32, - 114,101,108,97,116,105,118,101,32,112,97,116,104,32,115,112, - 101,99,105,102,105,101,114,115,46,10,32,32,32,32,82,101, - 116,117,114,110,115,32,97,32,50,45,116,117,112,108,101,32, - 40,100,114,105,118,101,95,111,114,95,117,110,99,44,32,112, - 97,116,104,41,59,32,101,105,116,104,101,114,32,112,97,114, - 116,32,109,97,121,32,98,101,32,101,109,112,116,121,46,10, - 10,32,32,32,32,73,102,32,121,111,117,32,97,115,115,105, - 103,110,10,32,32,32,32,32,32,32,32,114,101,115,117,108, - 116,32,61,32,115,112,108,105,116,100,114,105,118,101,40,112, - 41,10,32,32,32,32,73,116,32,105,115,32,97,108,119,97, - 121,115,32,116,114,117,101,32,116,104,97,116,58,10,32,32, - 32,32,32,32,32,32,114,101,115,117,108,116,91,48,93,32, - 43,32,114,101,115,117,108,116,91,49,93,32,61,61,32,112, - 10,10,32,32,32,32,73,102,32,116,104,101,32,112,97,116, - 104,32,99,111,110,116,97,105,110,101,100,32,97,32,100,114, - 105,118,101,32,108,101,116,116,101,114,44,32,100,114,105,118, - 101,95,111,114,95,117,110,99,32,119,105,108,108,32,99,111, - 110,116,97,105,110,32,101,118,101,114,121,116,104,105,110,103, - 10,32,32,32,32,117,112,32,116,111,32,97,110,100,32,105, - 110,99,108,117,100,105,110,103,32,116,104,101,32,99,111,108, - 111,110,46,32,32,101,46,103,46,32,115,112,108,105,116,100, - 114,105,118,101,40,34,99,58,47,100,105,114,34,41,32,114, - 101,116,117,114,110,115,32,40,34,99,58,34,44,32,34,47, - 100,105,114,34,41,10,10,32,32,32,32,73,102,32,116,104, - 101,32,112,97,116,104,32,99,111,110,116,97,105,110,101,100, - 32,97,32,85,78,67,32,112,97,116,104,44,32,116,104,101, - 32,100,114,105,118,101,95,111,114,95,117,110,99,32,119,105, - 108,108,32,99,111,110,116,97,105,110,32,116,104,101,32,104, - 111,115,116,32,110,97,109,101,10,32,32,32,32,97,110,100, - 32,115,104,97,114,101,32,117,112,32,116,111,32,98,117,116, - 32,110,111,116,32,105,110,99,108,117,100,105,110,103,32,116, - 104,101,32,102,111,117,114,116,104,32,100,105,114,101,99,116, - 111,114,121,32,115,101,112,97,114,97,116,111,114,32,99,104, - 97,114,97,99,116,101,114,46,10,32,32,32,32,101,46,103, - 46,32,115,112,108,105,116,100,114,105,118,101,40,34,47,47, - 104,111,115,116,47,99,111,109,112,117,116,101,114,47,100,105, - 114,34,41,32,114,101,116,117,114,110,115,32,40,34,47,47, - 104,111,115,116,47,99,111,109,112,117,116,101,114,34,44,32, - 34,47,100,105,114,34,41,10,10,32,32,32,32,80,97,116, - 104,115,32,99,97,110,110,111,116,32,99,111,110,116,97,105, - 110,32,98,111,116,104,32,97,32,100,114,105,118,101,32,108, - 101,116,116,101,114,32,97,110,100,32,97,32,85,78,67,32, - 112,97,116,104,46,10,10,32,32,32,32,41,1,114,14,0, - 0,0,41,4,114,105,0,0,0,218,5,100,114,105,118,101, - 218,4,114,111,111,116,218,4,116,97,105,108,115,4,0,0, - 0,32,32,32,32,114,57,0,0,0,114,13,0,0,0,114, - 13,0,0,0,156,0,0,0,115,35,0,0,0,128,0,244, - 38,0,25,34,160,33,155,12,209,4,21,128,69,136,52,144, - 20,216,11,16,144,36,152,20,145,43,208,11,29,208,4,29, - 114,59,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,5,0,0,0,3,0,0,0,243,254,1,0,0,151, - 0,116,1,0,0,0,0,0,0,0,0,106,2,0,0,0, + 0,0,0,0,0,114,11,100,1,125,1,100,2,125,2,100, + 3,125,3,100,4,125,4,100,5,125,5,110,10,100,6,125, + 1,100,7,125,2,100,8,125,3,100,9,125,4,100,10,125, + 5,124,0,106,9,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,2,124,1,171,2,0,0,0, + 0,0,0,125,6,124,6,100,11,100,12,26,0,124,1,107, + 40,0,0,114,124,124,6,100,12,100,13,26,0,124,1,107, + 40,0,0,114,105,124,6,100,11,100,14,26,0,106,11,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,171,0,0,0,0,0,0,0,124,4,107,40,0,0,114, + 2,100,14,110,1,100,13,125,7,124,6,106,13,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 0,171,1,0,0,0,0,0,0,125,0,116,5,0,0,0, - 0,0,0,0,0,124,0,116,6,0,0,0,0,0,0,0, - 0,171,2,0,0,0,0,0,0,114,11,100,1,125,1,100, - 2,125,2,100,3,125,3,100,4,125,4,100,5,125,5,110, - 10,100,6,125,1,100,7,125,2,100,8,125,3,100,9,125, - 4,100,10,125,5,124,0,106,9,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,2,124,1,171, - 2,0,0,0,0,0,0,125,6,124,6,100,11,100,12,26, - 0,124,1,107,40,0,0,114,124,124,6,100,12,100,13,26, - 0,124,1,107,40,0,0,114,105,124,6,100,11,100,14,26, - 0,106,11,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,171,0,0,0,0,0,0,0,124,4,107, - 40,0,0,114,2,100,14,110,1,100,13,125,7,124,6,106, - 13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,1,124,7,171,2,0,0,0,0,0,0,125, - 8,124,8,100,15,107,40,0,0,114,5,124,0,124,5,124, - 5,102,3,83,0,124,6,106,13,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,1,124,8,100, - 12,122,0,0,0,171,2,0,0,0,0,0,0,125,9,124, - 9,100,15,107,40,0,0,114,5,124,0,124,5,124,5,102, - 3,83,0,124,0,100,11,124,9,26,0,124,0,124,9,124, - 9,100,12,122,0,0,0,26,0,124,0,124,9,100,12,122, - 0,0,0,100,11,26,0,102,3,83,0,124,5,124,0,100, - 11,100,12,26,0,124,0,100,12,100,11,26,0,102,3,83, - 0,124,6,100,12,100,13,26,0,124,3,107,40,0,0,114, - 33,124,6,100,13,100,16,26,0,124,1,107,40,0,0,114, - 14,124,0,100,11,100,13,26,0,124,0,100,13,100,16,26, - 0,124,0,100,16,100,11,26,0,102,3,83,0,124,0,100, - 11,100,13,26,0,124,5,124,0,100,13,100,11,26,0,102, - 3,83,0,124,5,124,5,124,0,102,3,83,0,41,17,97, - 254,1,0,0,83,112,108,105,116,32,97,32,112,97,116,104, - 110,97,109,101,32,105,110,116,111,32,100,114,105,118,101,44, - 32,114,111,111,116,32,97,110,100,32,116,97,105,108,46,32, - 84,104,101,32,100,114,105,118,101,32,105,115,32,100,101,102, - 105,110,101,100,10,32,32,32,32,101,120,97,99,116,108,121, - 32,97,115,32,105,110,32,115,112,108,105,116,100,114,105,118, - 101,40,41,46,32,79,110,32,87,105,110,100,111,119,115,44, - 32,116,104,101,32,114,111,111,116,32,109,97,121,32,98,101, - 32,97,32,115,105,110,103,108,101,32,112,97,116,104,10,32, - 32,32,32,115,101,112,97,114,97,116,111,114,32,111,114,32, - 97,110,32,101,109,112,116,121,32,115,116,114,105,110,103,46, - 32,84,104,101,32,116,97,105,108,32,99,111,110,116,97,105, - 110,115,32,97,110,121,116,104,105,110,103,32,97,102,116,101, - 114,32,116,104,101,32,114,111,111,116,46,10,32,32,32,32, - 70,111,114,32,101,120,97,109,112,108,101,58,10,10,32,32, + 1,124,7,171,2,0,0,0,0,0,0,125,8,124,8,100, + 15,107,40,0,0,114,5,124,0,124,5,124,5,102,3,83, + 0,124,6,106,13,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,1,124,8,100,12,122,0,0, + 0,171,2,0,0,0,0,0,0,125,9,124,9,100,15,107, + 40,0,0,114,5,124,0,124,5,124,5,102,3,83,0,124, + 0,100,11,124,9,26,0,124,0,124,9,124,9,100,12,122, + 0,0,0,26,0,124,0,124,9,100,12,122,0,0,0,100, + 11,26,0,102,3,83,0,124,5,124,0,100,11,100,12,26, + 0,124,0,100,12,100,11,26,0,102,3,83,0,124,6,100, + 12,100,13,26,0,124,3,107,40,0,0,114,33,124,6,100, + 13,100,16,26,0,124,1,107,40,0,0,114,14,124,0,100, + 11,100,13,26,0,124,0,100,13,100,16,26,0,124,0,100, + 16,100,11,26,0,102,3,83,0,124,0,100,11,100,13,26, + 0,124,5,124,0,100,13,100,11,26,0,102,3,83,0,124, + 5,124,5,124,0,102,3,83,0,41,17,97,254,1,0,0, + 83,112,108,105,116,32,97,32,112,97,116,104,110,97,109,101, + 32,105,110,116,111,32,100,114,105,118,101,44,32,114,111,111, + 116,32,97,110,100,32,116,97,105,108,46,32,84,104,101,32, + 100,114,105,118,101,32,105,115,32,100,101,102,105,110,101,100, + 10,32,32,32,32,101,120,97,99,116,108,121,32,97,115,32, + 105,110,32,115,112,108,105,116,100,114,105,118,101,40,41,46, + 32,79,110,32,87,105,110,100,111,119,115,44,32,116,104,101, + 32,114,111,111,116,32,109,97,121,32,98,101,32,97,32,115, + 105,110,103,108,101,32,112,97,116,104,10,32,32,32,32,115, + 101,112,97,114,97,116,111,114,32,111,114,32,97,110,32,101, + 109,112,116,121,32,115,116,114,105,110,103,46,32,84,104,101, + 32,116,97,105,108,32,99,111,110,116,97,105,110,115,32,97, + 110,121,116,104,105,110,103,32,97,102,116,101,114,32,116,104, + 101,32,114,111,111,116,46,10,32,32,32,32,70,111,114,32, + 101,120,97,109,112,108,101,58,10,10,32,32,32,32,32,32, + 32,32,115,112,108,105,116,114,111,111,116,40,39,47,47,115, + 101,114,118,101,114,47,115,104,97,114,101,47,39,41,32,61, + 61,32,40,39,47,47,115,101,114,118,101,114,47,115,104,97, + 114,101,39,44,32,39,47,39,44,32,39,39,41,10,32,32, 32,32,32,32,32,32,115,112,108,105,116,114,111,111,116,40, - 39,47,47,115,101,114,118,101,114,47,115,104,97,114,101,47, - 39,41,32,61,61,32,40,39,47,47,115,101,114,118,101,114, - 47,115,104,97,114,101,39,44,32,39,47,39,44,32,39,39, + 39,67,58,47,85,115,101,114,115,47,66,97,114,110,101,121, + 39,41,32,61,61,32,40,39,67,58,39,44,32,39,47,39, + 44,32,39,85,115,101,114,115,47,66,97,114,110,101,121,39, 41,10,32,32,32,32,32,32,32,32,115,112,108,105,116,114, - 111,111,116,40,39,67,58,47,85,115,101,114,115,47,66,97, - 114,110,101,121,39,41,32,61,61,32,40,39,67,58,39,44, - 32,39,47,39,44,32,39,85,115,101,114,115,47,66,97,114, - 110,101,121,39,41,10,32,32,32,32,32,32,32,32,115,112, - 108,105,116,114,111,111,116,40,39,67,58,47,47,47,115,112, - 97,109,47,47,47,104,97,109,39,41,32,61,61,32,40,39, - 67,58,39,44,32,39,47,39,44,32,39,47,47,115,112,97, - 109,47,47,47,104,97,109,39,41,10,32,32,32,32,32,32, - 32,32,115,112,108,105,116,114,111,111,116,40,39,87,105,110, - 100,111,119,115,47,110,111,116,101,112,97,100,39,41,32,61, - 61,32,40,39,39,44,32,39,39,44,32,39,87,105,110,100, - 111,119,115,47,110,111,116,101,112,97,100,39,41,10,32,32, - 32,32,114,83,0,0,0,114,84,0,0,0,114,90,0,0, - 0,243,8,0,0,0,92,92,63,92,85,78,67,92,114,59, - 0,0,0,114,4,0,0,0,114,6,0,0,0,114,91,0, - 0,0,250,8,92,92,63,92,85,78,67,92,218,0,78,114, - 86,0,0,0,233,2,0,0,0,233,8,0,0,0,114,92, - 0,0,0,114,85,0,0,0,41,7,114,66,0,0,0,114, - 67,0,0,0,114,53,0,0,0,114,54,0,0,0,114,71, - 0,0,0,218,5,117,112,112,101,114,218,4,102,105,110,100, - 41,10,114,105,0,0,0,114,36,0,0,0,114,39,0,0, - 0,114,101,0,0,0,218,10,117,110,99,95,112,114,101,102, - 105,120,218,5,101,109,112,116,121,218,5,110,111,114,109,112, - 218,5,115,116,97,114,116,218,5,105,110,100,101,120,218,6, - 105,110,100,101,120,50,115,10,0,0,0,32,32,32,32,32, - 32,32,32,32,32,114,57,0,0,0,114,14,0,0,0,114, - 14,0,0,0,179,0,0,0,115,135,1,0,0,128,0,244, - 22,0,9,11,143,9,137,9,144,33,139,12,128,65,220,7, - 17,144,33,148,85,212,7,27,216,14,19,136,3,216,17,21, - 136,6,216,16,20,136,5,216,21,36,136,10,216,16,19,137, - 5,224,14,18,136,3,216,17,20,136,6,216,16,19,136,5, - 216,21,35,136,10,216,16,18,136,5,216,12,13,143,73,137, - 73,144,102,152,99,211,12,34,128,69,216,7,12,136,82,136, - 97,128,121,144,67,210,7,23,216,11,16,144,17,144,49,136, - 58,152,19,210,11,28,240,6,0,26,31,152,114,160,1,152, - 25,159,31,153,31,211,25,42,168,106,210,25,56,145,65,184, - 97,136,69,216,20,25,151,74,145,74,152,115,160,69,211,20, - 42,136,69,216,15,20,152,2,138,123,216,23,24,152,37,160, - 21,144,127,208,16,38,216,21,26,151,90,145,90,160,3,160, - 85,168,81,161,89,211,21,47,136,70,216,15,21,152,18,138, - 124,216,23,24,152,37,160,21,144,127,208,16,38,216,19,20, - 144,87,144,102,144,58,152,113,160,22,168,6,176,17,169,10, - 208,31,51,176,81,176,118,192,1,177,122,176,123,176,94,208, - 19,67,208,12,67,240,6,0,20,25,152,33,152,66,152,81, - 152,37,160,17,160,49,160,50,160,21,208,19,38,208,12,38, - 216,9,14,136,113,144,17,136,26,144,117,210,9,28,216,11, - 16,144,17,144,49,136,58,152,19,210,11,28,224,19,20,144, - 82,144,97,144,53,152,33,152,65,152,97,152,38,160,33,160, - 65,160,66,160,37,208,19,39,208,12,39,240,6,0,20,21, - 144,82,144,97,144,53,152,37,160,17,160,49,160,50,160,21, - 208,19,38,208,12,38,240,6,0,16,21,144,101,152,81,136, - 127,208,8,30,114,59,0,0,0,99,1,0,0,0,0,0, - 0,0,0,0,0,0,4,0,0,0,3,0,0,0,243,248, - 0,0,0,151,0,116,1,0,0,0,0,0,0,0,0,106, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,0,171,1,0,0,0,0,0,0,125,0,116, - 5,0,0,0,0,0,0,0,0,124,0,171,1,0,0,0, - 0,0,0,125,1,116,7,0,0,0,0,0,0,0,0,124, - 0,171,1,0,0,0,0,0,0,92,3,0,0,125,2,125, - 3,125,0,116,9,0,0,0,0,0,0,0,0,124,0,171, - 1,0,0,0,0,0,0,125,4,124,4,114,28,124,0,124, - 4,100,1,122,10,0,0,25,0,0,0,124,1,118,1,114, - 18,124,4,100,1,122,23,0,0,125,4,124,4,114,11,124, - 0,124,4,100,1,122,10,0,0,25,0,0,0,124,1,118, - 1,114,1,140,18,124,0,100,2,124,4,26,0,124,0,124, - 4,100,2,26,0,125,6,125,5,124,2,124,3,122,0,0, - 0,124,5,106,11,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,1,171,1,0,0,0,0,0, - 0,122,0,0,0,124,6,102,2,83,0,41,3,122,126,83, - 112,108,105,116,32,97,32,112,97,116,104,110,97,109,101,46, - 10,10,32,32,32,32,82,101,116,117,114,110,32,116,117,112, - 108,101,32,40,104,101,97,100,44,32,116,97,105,108,41,32, - 119,104,101,114,101,32,116,97,105,108,32,105,115,32,101,118, - 101,114,121,116,104,105,110,103,32,97,102,116,101,114,32,116, - 104,101,32,102,105,110,97,108,32,115,108,97,115,104,46,10, - 32,32,32,32,69,105,116,104,101,114,32,112,97,114,116,32, - 109,97,121,32,98,101,32,101,109,112,116,121,46,114,86,0, - 0,0,78,41,6,114,66,0,0,0,114,67,0,0,0,114, - 58,0,0,0,114,14,0,0,0,218,3,108,101,110,218,6, - 114,115,116,114,105,112,41,7,114,105,0,0,0,114,100,0, - 0,0,218,1,100,218,1,114,218,1,105,218,4,104,101,97, - 100,114,112,0,0,0,115,7,0,0,0,32,32,32,32,32, - 32,32,114,57,0,0,0,114,15,0,0,0,114,15,0,0, - 0,236,0,0,0,115,148,0,0,0,128,0,244,10,0,9, - 11,143,9,137,9,144,33,139,12,128,65,220,11,24,152,17, - 211,11,27,128,68,220,14,23,152,1,139,108,129,71,128,65, - 128,113,136,33,228,8,11,136,65,139,6,128,65,217,10,11, - 144,1,144,33,144,65,145,35,145,6,152,100,209,16,34,216, - 8,9,136,81,137,6,136,1,241,3,0,11,12,144,1,144, - 33,144,65,145,35,145,6,152,100,210,16,34,224,17,18,144, - 50,144,65,144,21,152,1,152,33,152,34,152,5,136,36,128, - 68,216,11,12,136,113,137,53,144,52,151,59,145,59,152,116, - 211,19,36,209,11,36,160,100,208,11,42,208,4,42,114,59, - 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 6,0,0,0,3,0,0,0,243,172,0,0,0,151,0,116, - 1,0,0,0,0,0,0,0,0,106,2,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,171, - 1,0,0,0,0,0,0,125,0,116,5,0,0,0,0,0, - 0,0,0,124,0,116,6,0,0,0,0,0,0,0,0,171, - 2,0,0,0,0,0,0,114,24,116,9,0,0,0,0,0, - 0,0,0,106,10,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,0,100,1,100,2,100,3,171, - 4,0,0,0,0,0,0,83,0,116,9,0,0,0,0,0, - 0,0,0,106,10,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,0,100,4,100,5,100,6,171, - 4,0,0,0,0,0,0,83,0,41,7,78,114,83,0,0, - 0,114,84,0,0,0,243,1,0,0,0,46,114,4,0,0, - 0,114,6,0,0,0,114,2,0,0,0,41,6,114,66,0, - 0,0,114,67,0,0,0,114,53,0,0,0,114,54,0,0, - 0,114,97,0,0,0,218,9,95,115,112,108,105,116,101,120, - 116,169,1,114,105,0,0,0,115,1,0,0,0,32,114,57, - 0,0,0,114,16,0,0,0,114,16,0,0,0,1,1,0, - 0,115,71,0,0,0,128,0,220,8,10,143,9,137,9,144, - 33,139,12,128,65,220,7,17,144,33,148,85,212,7,27,220, - 15,26,215,15,36,209,15,36,160,81,168,5,168,116,176,84, - 211,15,58,208,8,58,228,15,26,215,15,36,209,15,36,160, - 81,168,4,168,99,176,51,211,15,55,208,8,55,114,59,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,3,0,0,0,243,30,0,0,0,151,0,116,1, - 0,0,0,0,0,0,0,0,124,0,171,1,0,0,0,0, - 0,0,100,1,25,0,0,0,83,0,41,2,122,41,82,101, - 116,117,114,110,115,32,116,104,101,32,102,105,110,97,108,32, - 99,111,109,112,111,110,101,110,116,32,111,102,32,97,32,112, - 97,116,104,110,97,109,101,114,86,0,0,0,169,1,114,15, - 0,0,0,114,137,0,0,0,115,1,0,0,0,32,114,57, - 0,0,0,114,17,0,0,0,114,17,0,0,0,12,1,0, - 0,243,16,0,0,0,128,0,228,11,16,144,17,139,56,144, - 65,137,59,208,4,22,114,59,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, - 243,30,0,0,0,151,0,116,1,0,0,0,0,0,0,0, - 0,124,0,171,1,0,0,0,0,0,0,100,1,25,0,0, - 0,83,0,41,2,122,45,82,101,116,117,114,110,115,32,116, - 104,101,32,100,105,114,101,99,116,111,114,121,32,99,111,109, - 112,111,110,101,110,116,32,111,102,32,97,32,112,97,116,104, - 110,97,109,101,114,8,0,0,0,114,139,0,0,0,114,137, - 0,0,0,115,1,0,0,0,32,114,57,0,0,0,114,18, - 0,0,0,114,18,0,0,0,19,1,0,0,114,140,0,0, - 0,114,59,0,0,0,218,14,115,116,95,114,101,112,97,114, - 115,101,95,116,97,103,99,1,0,0,0,0,0,0,0,0, - 0,0,0,5,0,0,0,3,0,0,0,243,174,0,0,0, - 151,0,9,0,116,1,0,0,0,0,0,0,0,0,106,2, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,0,171,1,0,0,0,0,0,0,125,1,116,11, - 0,0,0,0,0,0,0,0,124,1,106,12,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,14, - 0,0,0,0,0,0,0,0,106,16,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,107,40,0,0, - 171,1,0,0,0,0,0,0,83,0,35,0,116,4,0,0, - 0,0,0,0,0,0,116,6,0,0,0,0,0,0,0,0, - 116,8,0,0,0,0,0,0,0,0,102,3,36,0,114,3, - 1,0,89,0,121,1,119,0,120,3,89,0,119,1,169,2, - 122,33,84,101,115,116,32,119,104,101,116,104,101,114,32,97, - 32,112,97,116,104,32,105,115,32,97,32,106,117,110,99,116, - 105,111,110,70,41,9,114,66,0,0,0,218,5,108,115,116, - 97,116,218,7,79,83,69,114,114,111,114,218,10,86,97,108, - 117,101,69,114,114,111,114,114,95,0,0,0,218,4,98,111, - 111,108,114,142,0,0,0,218,4,115,116,97,116,218,26,73, - 79,95,82,69,80,65,82,83,69,95,84,65,71,95,77,79, - 85,78,84,95,80,79,73,78,84,169,2,114,56,0,0,0, - 218,2,115,116,115,2,0,0,0,32,32,114,57,0,0,0, - 114,49,0,0,0,114,49,0,0,0,27,1,0,0,115,77, - 0,0,0,128,0,240,4,3,9,25,220,17,19,151,24,145, - 24,152,36,147,30,136,66,244,6,0,16,20,144,66,215,20, - 37,209,20,37,172,20,215,41,72,209,41,72,209,20,72,211, - 15,73,208,8,73,248,244,5,0,17,24,156,26,164,94,208, - 15,52,242,0,1,9,25,217,19,24,240,3,1,9,25,250, - 115,15,0,0,0,130,21,61,0,189,20,65,20,3,193,19, - 1,65,20,3,99,1,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,3,0,0,0,243,46,0,0,0,151,0, - 116,1,0,0,0,0,0,0,0,0,106,2,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0, - 171,1,0,0,0,0,0,0,1,0,121,1,114,144,0,0, - 0,41,2,114,66,0,0,0,114,67,0,0,0,114,55,0, - 0,0,115,1,0,0,0,32,114,57,0,0,0,114,49,0, - 0,0,114,49,0,0,0,35,1,0,0,115,16,0,0,0, - 128,0,228,8,10,143,9,137,9,144,36,140,15,216,15,20, + 111,111,116,40,39,67,58,47,47,47,115,112,97,109,47,47, + 47,104,97,109,39,41,32,61,61,32,40,39,67,58,39,44, + 32,39,47,39,44,32,39,47,47,115,112,97,109,47,47,47, + 104,97,109,39,41,10,32,32,32,32,32,32,32,32,115,112, + 108,105,116,114,111,111,116,40,39,87,105,110,100,111,119,115, + 47,110,111,116,101,112,97,100,39,41,32,61,61,32,40,39, + 39,44,32,39,39,44,32,39,87,105,110,100,111,119,115,47, + 110,111,116,101,112,97,100,39,41,10,32,32,32,32,114,83, + 0,0,0,114,84,0,0,0,114,90,0,0,0,243,8,0, + 0,0,92,92,63,92,85,78,67,92,114,59,0,0,0,114, + 4,0,0,0,114,6,0,0,0,114,91,0,0,0,250,8, + 92,92,63,92,85,78,67,92,218,0,78,114,86,0,0,0, + 233,2,0,0,0,233,8,0,0,0,114,92,0,0,0,114, + 85,0,0,0,41,7,114,66,0,0,0,114,67,0,0,0, + 114,53,0,0,0,114,54,0,0,0,114,71,0,0,0,218, + 5,117,112,112,101,114,218,4,102,105,110,100,41,10,114,105, + 0,0,0,114,36,0,0,0,114,39,0,0,0,114,101,0, + 0,0,218,10,117,110,99,95,112,114,101,102,105,120,218,5, + 101,109,112,116,121,218,5,110,111,114,109,112,218,5,115,116, + 97,114,116,218,5,105,110,100,101,120,218,6,105,110,100,101, + 120,50,115,10,0,0,0,32,32,32,32,32,32,32,32,32, + 32,114,57,0,0,0,114,14,0,0,0,114,14,0,0,0, + 179,0,0,0,115,135,1,0,0,128,0,244,22,0,9,11, + 143,9,137,9,144,33,139,12,128,65,220,7,17,144,33,148, + 85,212,7,27,216,14,19,136,3,216,17,21,136,6,216,16, + 20,136,5,216,21,36,136,10,216,16,19,137,5,224,14,18, + 136,3,216,17,20,136,6,216,16,19,136,5,216,21,35,136, + 10,216,16,18,136,5,216,12,13,143,73,137,73,144,102,152, + 99,211,12,34,128,69,216,7,12,136,82,136,97,128,121,144, + 67,210,7,23,216,11,16,144,17,144,49,136,58,152,19,210, + 11,28,240,6,0,26,31,152,114,160,1,152,25,159,31,153, + 31,211,25,42,168,106,210,25,56,145,65,184,97,136,69,216, + 20,25,151,74,145,74,152,115,160,69,211,20,42,136,69,216, + 15,20,152,2,138,123,216,23,24,152,37,160,21,144,127,208, + 16,38,216,21,26,151,90,145,90,160,3,160,85,168,81,161, + 89,211,21,47,136,70,216,15,21,152,18,138,124,216,23,24, + 152,37,160,21,144,127,208,16,38,216,19,20,144,87,144,102, + 144,58,152,113,160,22,168,6,176,17,169,10,208,31,51,176, + 81,176,118,192,1,177,122,176,123,176,94,208,19,67,208,12, + 67,240,6,0,20,25,152,33,152,66,152,81,152,37,160,17, + 160,49,160,50,160,21,208,19,38,208,12,38,216,9,14,136, + 113,144,17,136,26,144,117,210,9,28,216,11,16,144,17,144, + 49,136,58,152,19,210,11,28,224,19,20,144,82,144,97,144, + 53,152,33,152,65,152,97,152,38,160,33,160,65,160,66,160, + 37,208,19,39,208,12,39,240,6,0,20,21,144,82,144,97, + 144,53,152,37,160,17,160,49,160,50,160,21,208,19,38,208, + 12,38,240,6,0,16,21,144,101,152,81,136,127,208,8,30, 114,59,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,3,0,0,0,243,90,0,0,0,151, - 0,9,0,116,1,0,0,0,0,0,0,0,0,106,2,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,0,171,1,0,0,0,0,0,0,125,1,121,2,35, - 0,116,4,0,0,0,0,0,0,0,0,116,6,0,0,0, - 0,0,0,0,0,102,2,36,0,114,3,1,0,89,0,121, - 1,119,0,120,3,89,0,119,1,41,3,122,67,84,101,115, - 116,32,119,104,101,116,104,101,114,32,97,32,112,97,116,104, - 32,101,120,105,115,116,115,46,32,32,82,101,116,117,114,110, - 115,32,84,114,117,101,32,102,111,114,32,98,114,111,107,101, - 110,32,115,121,109,98,111,108,105,99,32,108,105,110,107,115, - 70,84,41,4,114,66,0,0,0,114,145,0,0,0,114,146, - 0,0,0,114,147,0,0,0,114,151,0,0,0,115,2,0, - 0,0,32,32,114,57,0,0,0,114,26,0,0,0,114,26, - 0,0,0,43,1,0,0,115,50,0,0,0,128,0,240,4, - 3,5,21,220,13,15,143,88,137,88,144,100,139,94,136,2, - 240,6,0,12,16,248,244,5,0,13,20,148,90,208,11,32, - 242,0,1,5,21,217,15,20,240,3,1,5,21,250,115,12, - 0,0,0,130,21,24,0,152,15,42,3,169,1,42,3,41, - 1,218,18,95,103,101,116,118,111,108,117,109,101,112,97,116, - 104,110,97,109,101,99,1,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,3,0,0,0,243,62,1,0,0,151, + 0,0,4,0,0,0,3,0,0,0,243,248,0,0,0,151, 0,116,1,0,0,0,0,0,0,0,0,106,2,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, 0,171,1,0,0,0,0,0,0,125,0,116,5,0,0,0, 0,0,0,0,0,124,0,171,1,0,0,0,0,0,0,125, 1,116,7,0,0,0,0,0,0,0,0,124,0,171,1,0, - 0,0,0,0,0,125,0,116,9,0,0,0,0,0,0,0, - 0,124,0,171,1,0,0,0,0,0,0,92,3,0,0,125, - 2,125,3,125,4,124,2,114,10,124,2,100,1,25,0,0, - 0,124,1,118,0,114,3,124,4,12,0,83,0,124,3,114, - 3,124,4,115,1,121,2,116,10,0,0,0,0,0,0,0, - 0,114,76,124,0,106,13,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,124,1,171,1,0,0,0, - 0,0,0,125,5,116,11,0,0,0,0,0,0,0,0,124, - 0,171,1,0,0,0,0,0,0,106,13,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,1,171, - 1,0,0,0,0,0,0,125,6,124,5,106,15,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, - 0,0,0,0,0,0,0,124,6,106,15,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,171,0,0, - 0,0,0,0,0,107,40,0,0,83,0,121,3,41,4,122, - 97,84,101,115,116,32,119,104,101,116,104,101,114,32,97,32, - 112,97,116,104,32,105,115,32,97,32,109,111,117,110,116,32, - 112,111,105,110,116,32,40,97,32,100,114,105,118,101,32,114, - 111,111,116,44,32,116,104,101,32,114,111,111,116,32,111,102, - 32,97,10,32,32,32,32,115,104,97,114,101,44,32,111,114, - 32,97,32,109,111,117,110,116,101,100,32,118,111,108,117,109, - 101,41,114,8,0,0,0,84,70,41,8,114,66,0,0,0, - 114,67,0,0,0,114,58,0,0,0,114,33,0,0,0,114, - 14,0,0,0,114,155,0,0,0,114,129,0,0,0,218,8, - 99,97,115,101,102,111,108,100,41,7,114,56,0,0,0,114, - 100,0,0,0,114,110,0,0,0,114,111,0,0,0,218,4, - 114,101,115,116,218,1,120,218,1,121,115,7,0,0,0,32, - 32,32,32,32,32,32,114,57,0,0,0,114,29,0,0,0, - 114,29,0,0,0,65,1,0,0,115,145,0,0,0,128,0, - 244,6,0,12,14,143,57,137,57,144,84,139,63,128,68,220, - 11,24,152,20,211,11,30,128,68,220,11,18,144,52,139,61, - 128,68,220,24,33,160,36,155,15,209,4,21,128,69,136,52, - 144,20,217,7,12,144,21,144,113,145,24,152,84,209,17,33, - 216,19,23,136,120,136,15,217,7,11,145,68,216,15,19,229, - 7,25,216,12,16,143,75,137,75,152,4,211,12,29,136,1, - 220,11,29,152,100,211,11,35,215,11,42,209,11,42,168,52, - 211,11,48,136,1,216,15,16,143,122,137,122,139,124,152,113, - 159,122,153,122,155,124,209,15,43,208,8,43,224,15,20,114, - 59,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,3,0,0,0,243,56,3,0,0,151,0, + 0,0,0,0,0,92,3,0,0,125,2,125,3,125,0,116, + 9,0,0,0,0,0,0,0,0,124,0,171,1,0,0,0, + 0,0,0,125,4,124,4,114,28,124,0,124,4,100,1,122, + 10,0,0,25,0,0,0,124,1,118,1,114,18,124,4,100, + 1,122,23,0,0,125,4,124,4,114,11,124,0,124,4,100, + 1,122,10,0,0,25,0,0,0,124,1,118,1,114,1,140, + 18,124,0,100,2,124,4,26,0,124,0,124,4,100,2,26, + 0,125,6,125,5,124,2,124,3,122,0,0,0,124,5,106, + 11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,1,171,1,0,0,0,0,0,0,122,0,0, + 0,124,6,102,2,83,0,41,3,122,126,83,112,108,105,116, + 32,97,32,112,97,116,104,110,97,109,101,46,10,10,32,32, + 32,32,82,101,116,117,114,110,32,116,117,112,108,101,32,40, + 104,101,97,100,44,32,116,97,105,108,41,32,119,104,101,114, + 101,32,116,97,105,108,32,105,115,32,101,118,101,114,121,116, + 104,105,110,103,32,97,102,116,101,114,32,116,104,101,32,102, + 105,110,97,108,32,115,108,97,115,104,46,10,32,32,32,32, + 69,105,116,104,101,114,32,112,97,114,116,32,109,97,121,32, + 98,101,32,101,109,112,116,121,46,114,86,0,0,0,78,41, + 6,114,66,0,0,0,114,67,0,0,0,114,58,0,0,0, + 114,14,0,0,0,218,3,108,101,110,218,6,114,115,116,114, + 105,112,41,7,114,105,0,0,0,114,100,0,0,0,218,1, + 100,218,1,114,218,1,105,218,4,104,101,97,100,114,112,0, + 0,0,115,7,0,0,0,32,32,32,32,32,32,32,114,57, + 0,0,0,114,15,0,0,0,114,15,0,0,0,236,0,0, + 0,115,148,0,0,0,128,0,244,10,0,9,11,143,9,137, + 9,144,33,139,12,128,65,220,11,24,152,17,211,11,27,128, + 68,220,14,23,152,1,139,108,129,71,128,65,128,113,136,33, + 228,8,11,136,65,139,6,128,65,217,10,11,144,1,144,33, + 144,65,145,35,145,6,152,100,209,16,34,216,8,9,136,81, + 137,6,136,1,241,3,0,11,12,144,1,144,33,144,65,145, + 35,145,6,152,100,210,16,34,224,17,18,144,50,144,65,144, + 21,152,1,152,33,152,34,152,5,136,36,128,68,216,11,12, + 136,113,137,53,144,52,151,59,145,59,152,116,211,19,36,209, + 11,36,160,100,208,11,42,208,4,42,114,59,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, + 3,0,0,0,243,172,0,0,0,151,0,116,1,0,0,0, + 0,0,0,0,0,106,2,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,0,171,1,0,0,0, + 0,0,0,125,0,116,5,0,0,0,0,0,0,0,0,124, + 0,116,6,0,0,0,0,0,0,0,0,171,2,0,0,0, + 0,0,0,114,24,116,9,0,0,0,0,0,0,0,0,106, + 10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,0,100,1,100,2,100,3,171,4,0,0,0, + 0,0,0,83,0,116,9,0,0,0,0,0,0,0,0,106, + 10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,0,100,4,100,5,100,6,171,4,0,0,0, + 0,0,0,83,0,41,7,78,114,83,0,0,0,114,84,0, + 0,0,243,1,0,0,0,46,114,4,0,0,0,114,6,0, + 0,0,114,2,0,0,0,41,6,114,66,0,0,0,114,67, + 0,0,0,114,53,0,0,0,114,54,0,0,0,114,97,0, + 0,0,218,9,95,115,112,108,105,116,101,120,116,169,1,114, + 105,0,0,0,115,1,0,0,0,32,114,57,0,0,0,114, + 16,0,0,0,114,16,0,0,0,1,1,0,0,115,71,0, + 0,0,128,0,220,8,10,143,9,137,9,144,33,139,12,128, + 65,220,7,17,144,33,148,85,212,7,27,220,15,26,215,15, + 36,209,15,36,160,81,168,5,168,116,176,84,211,15,58,208, + 8,58,228,15,26,215,15,36,209,15,36,160,81,168,4,168, + 99,176,51,211,15,55,208,8,55,114,59,0,0,0,99,1, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3, + 0,0,0,243,30,0,0,0,151,0,116,1,0,0,0,0, + 0,0,0,0,124,0,171,1,0,0,0,0,0,0,100,1, + 25,0,0,0,83,0,41,2,122,41,82,101,116,117,114,110, + 115,32,116,104,101,32,102,105,110,97,108,32,99,111,109,112, + 111,110,101,110,116,32,111,102,32,97,32,112,97,116,104,110, + 97,109,101,114,86,0,0,0,169,1,114,15,0,0,0,114, + 137,0,0,0,115,1,0,0,0,32,114,57,0,0,0,114, + 17,0,0,0,114,17,0,0,0,12,1,0,0,243,16,0, + 0,0,128,0,228,11,16,144,17,139,56,144,65,137,59,208, + 4,22,114,59,0,0,0,99,1,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,3,0,0,0,243,30,0,0, + 0,151,0,116,1,0,0,0,0,0,0,0,0,124,0,171, + 1,0,0,0,0,0,0,100,1,25,0,0,0,83,0,41, + 2,122,45,82,101,116,117,114,110,115,32,116,104,101,32,100, + 105,114,101,99,116,111,114,121,32,99,111,109,112,111,110,101, + 110,116,32,111,102,32,97,32,112,97,116,104,110,97,109,101, + 114,8,0,0,0,114,139,0,0,0,114,137,0,0,0,115, + 1,0,0,0,32,114,57,0,0,0,114,18,0,0,0,114, + 18,0,0,0,19,1,0,0,114,140,0,0,0,114,59,0, + 0,0,218,14,115,116,95,114,101,112,97,114,115,101,95,116, + 97,103,99,1,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,3,0,0,0,243,174,0,0,0,151,0,9,0, 116,1,0,0,0,0,0,0,0,0,106,2,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0, - 171,1,0,0,0,0,0,0,125,0,116,5,0,0,0,0, - 0,0,0,0,124,0,116,6,0,0,0,0,0,0,0,0, - 171,2,0,0,0,0,0,0,114,3,100,1,125,1,110,2, - 100,2,125,1,124,0,106,9,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,1,171,1,0,0, - 0,0,0,0,115,2,124,0,83,0,100,3,116,11,0,0, - 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, - 125,3,125,2,124,2,124,3,107,2,0,0,114,43,124,0, + 171,1,0,0,0,0,0,0,125,1,116,11,0,0,0,0, + 0,0,0,0,124,1,106,12,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,116,14,0,0,0,0, + 0,0,0,0,106,16,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,107,40,0,0,171,1,0,0, + 0,0,0,0,83,0,35,0,116,4,0,0,0,0,0,0, + 0,0,116,6,0,0,0,0,0,0,0,0,116,8,0,0, + 0,0,0,0,0,0,102,3,36,0,114,3,1,0,89,0, + 121,1,119,0,120,3,89,0,119,1,169,2,122,33,84,101, + 115,116,32,119,104,101,116,104,101,114,32,97,32,112,97,116, + 104,32,105,115,32,97,32,106,117,110,99,116,105,111,110,70, + 41,9,114,66,0,0,0,218,5,108,115,116,97,116,218,7, + 79,83,69,114,114,111,114,218,10,86,97,108,117,101,69,114, + 114,111,114,114,95,0,0,0,218,4,98,111,111,108,114,142, + 0,0,0,218,4,115,116,97,116,218,26,73,79,95,82,69, + 80,65,82,83,69,95,84,65,71,95,77,79,85,78,84,95, + 80,79,73,78,84,169,2,114,56,0,0,0,218,2,115,116, + 115,2,0,0,0,32,32,114,57,0,0,0,114,49,0,0, + 0,114,49,0,0,0,27,1,0,0,115,77,0,0,0,128, + 0,240,4,3,9,25,220,17,19,151,24,145,24,152,36,147, + 30,136,66,244,6,0,16,20,144,66,215,20,37,209,20,37, + 172,20,215,41,72,209,41,72,209,20,72,211,15,73,208,8, + 73,248,244,5,0,17,24,156,26,164,94,208,15,52,242,0, + 1,9,25,217,19,24,240,3,1,9,25,250,115,15,0,0, + 0,130,21,61,0,189,20,65,20,3,193,19,1,65,20,3, + 99,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,3,0,0,0,243,46,0,0,0,151,0,116,1,0,0, + 0,0,0,0,0,0,106,2,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,0,171,1,0,0, + 0,0,0,0,1,0,121,1,114,144,0,0,0,41,2,114, + 66,0,0,0,114,67,0,0,0,114,55,0,0,0,115,1, + 0,0,0,32,114,57,0,0,0,114,49,0,0,0,114,49, + 0,0,0,35,1,0,0,115,16,0,0,0,128,0,228,8, + 10,143,9,137,9,144,36,140,15,216,15,20,114,59,0,0, + 0,99,1,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,3,0,0,0,243,90,0,0,0,151,0,9,0,116, + 1,0,0,0,0,0,0,0,0,106,2,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,171, + 1,0,0,0,0,0,0,125,1,121,2,35,0,116,4,0, + 0,0,0,0,0,0,0,116,6,0,0,0,0,0,0,0, + 0,102,2,36,0,114,3,1,0,89,0,121,1,119,0,120, + 3,89,0,119,1,41,3,122,67,84,101,115,116,32,119,104, + 101,116,104,101,114,32,97,32,112,97,116,104,32,101,120,105, + 115,116,115,46,32,32,82,101,116,117,114,110,115,32,84,114, + 117,101,32,102,111,114,32,98,114,111,107,101,110,32,115,121, + 109,98,111,108,105,99,32,108,105,110,107,115,70,84,41,4, + 114,66,0,0,0,114,145,0,0,0,114,146,0,0,0,114, + 147,0,0,0,114,151,0,0,0,115,2,0,0,0,32,32, + 114,57,0,0,0,114,26,0,0,0,114,26,0,0,0,43, + 1,0,0,115,50,0,0,0,128,0,240,4,3,5,21,220, + 13,15,143,88,137,88,144,100,139,94,136,2,240,6,0,12, + 16,248,244,5,0,13,20,148,90,208,11,32,242,0,1,5, + 21,217,15,20,240,3,1,5,21,250,115,12,0,0,0,130, + 21,24,0,152,15,42,3,169,1,42,3,41,1,218,18,95, + 103,101,116,118,111,108,117,109,101,112,97,116,104,110,97,109, + 101,99,1,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,3,0,0,0,243,62,1,0,0,151,0,116,1,0, + 0,0,0,0,0,0,0,106,2,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,0,171,1,0, + 0,0,0,0,0,125,0,116,5,0,0,0,0,0,0,0, + 0,124,0,171,1,0,0,0,0,0,0,125,1,116,7,0, + 0,0,0,0,0,0,0,124,0,171,1,0,0,0,0,0, + 0,125,0,116,9,0,0,0,0,0,0,0,0,124,0,171, + 1,0,0,0,0,0,0,92,3,0,0,125,2,125,3,125, + 4,124,2,114,10,124,2,100,1,25,0,0,0,124,1,118, + 0,114,3,124,4,12,0,83,0,124,3,114,3,124,4,115, + 1,121,2,116,10,0,0,0,0,0,0,0,0,114,76,124, + 0,106,13,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,1,171,1,0,0,0,0,0,0,125, + 5,116,11,0,0,0,0,0,0,0,0,124,0,171,1,0, + 0,0,0,0,0,106,13,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,1,171,1,0,0,0, + 0,0,0,125,6,124,5,106,15,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,171,0,0,0,0, + 0,0,0,124,6,106,15,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, + 0,107,40,0,0,83,0,121,3,41,4,122,97,84,101,115, + 116,32,119,104,101,116,104,101,114,32,97,32,112,97,116,104, + 32,105,115,32,97,32,109,111,117,110,116,32,112,111,105,110, + 116,32,40,97,32,100,114,105,118,101,32,114,111,111,116,44, + 32,116,104,101,32,114,111,111,116,32,111,102,32,97,10,32, + 32,32,32,115,104,97,114,101,44,32,111,114,32,97,32,109, + 111,117,110,116,101,100,32,118,111,108,117,109,101,41,114,8, + 0,0,0,84,70,41,8,114,66,0,0,0,114,67,0,0, + 0,114,58,0,0,0,114,33,0,0,0,114,14,0,0,0, + 114,155,0,0,0,114,129,0,0,0,218,8,99,97,115,101, + 102,111,108,100,41,7,114,56,0,0,0,114,100,0,0,0, + 114,110,0,0,0,114,111,0,0,0,218,4,114,101,115,116, + 218,1,120,218,1,121,115,7,0,0,0,32,32,32,32,32, + 32,32,114,57,0,0,0,114,29,0,0,0,114,29,0,0, + 0,65,1,0,0,115,145,0,0,0,128,0,244,6,0,12, + 14,143,57,137,57,144,84,139,63,128,68,220,11,24,152,20, + 211,11,30,128,68,220,11,18,144,52,139,61,128,68,220,24, + 33,160,36,155,15,209,4,21,128,69,136,52,144,20,217,7, + 12,144,21,144,113,145,24,152,84,209,17,33,216,19,23,136, + 120,136,15,217,7,11,145,68,216,15,19,229,7,25,216,12, + 16,143,75,137,75,152,4,211,12,29,136,1,220,11,29,152, + 100,211,11,35,215,11,42,209,11,42,168,52,211,11,48,136, + 1,216,15,16,143,122,137,122,139,124,152,113,159,122,153,122, + 155,124,209,15,43,208,8,43,224,15,20,114,59,0,0,0, + 99,1,0,0,0,0,0,0,0,0,0,0,0,5,0,0, + 0,3,0,0,0,243,56,3,0,0,151,0,116,1,0,0, + 0,0,0,0,0,0,106,2,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,0,171,1,0,0, + 0,0,0,0,125,0,116,5,0,0,0,0,0,0,0,0, + 124,0,116,6,0,0,0,0,0,0,0,0,171,2,0,0, + 0,0,0,0,114,3,100,1,125,1,110,2,100,2,125,1, + 124,0,106,9,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,1,171,1,0,0,0,0,0,0, + 115,2,124,0,83,0,100,3,116,11,0,0,0,0,0,0, + 0,0,124,0,171,1,0,0,0,0,0,0,125,3,125,2, + 124,2,124,3,107,2,0,0,114,43,124,0,124,2,25,0, + 0,0,116,13,0,0,0,0,0,0,0,0,124,0,171,1, + 0,0,0,0,0,0,118,1,114,27,124,2,100,3,122,13, + 0,0,125,2,124,2,124,3,107,2,0,0,114,17,124,0, 124,2,25,0,0,0,116,13,0,0,0,0,0,0,0,0, - 124,0,171,1,0,0,0,0,0,0,118,1,114,27,124,2, - 100,3,122,13,0,0,125,2,124,2,124,3,107,2,0,0, - 114,17,124,0,124,2,25,0,0,0,116,13,0,0,0,0, - 0,0,0,0,124,0,171,1,0,0,0,0,0,0,118,1, - 114,1,140,27,100,4,116,0,0,0,0,0,0,0,0,0, - 106,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,118,0,114,20,116,0,0,0,0,0,0,0, - 0,0,106,14,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,100,4,25,0,0,0,125,4,110,69, - 100,5,116,0,0,0,0,0,0,0,0,0,106,14,0,0, + 124,0,171,1,0,0,0,0,0,0,118,1,114,1,140,27, + 100,4,116,0,0,0,0,0,0,0,0,0,106,14,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 118,1,114,2,124,0,83,0,9,0,116,0,0,0,0,0, - 0,0,0,0,106,14,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,100,6,25,0,0,0,125,5, - 116,19,0,0,0,0,0,0,0,0,124,5,116,0,0,0, - 0,0,0,0,0,0,106,14,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,100,5,25,0,0,0, - 171,2,0,0,0,0,0,0,125,4,124,2,100,3,107,55, - 0,0,114,115,124,0,100,3,124,2,26,0,125,6,116,5, - 0,0,0,0,0,0,0,0,124,6,116,6,0,0,0,0, - 0,0,0,0,171,2,0,0,0,0,0,0,114,21,116,1, - 0,0,0,0,0,0,0,0,106,20,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,6,171,1, - 0,0,0,0,0,0,125,6,116,0,0,0,0,0,0,0, + 118,0,114,20,116,0,0,0,0,0,0,0,0,0,106,14, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,100,4,25,0,0,0,125,4,110,69,100,5,116,0, + 0,0,0,0,0,0,0,0,106,14,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,118,1,114,2, + 124,0,83,0,9,0,116,0,0,0,0,0,0,0,0,0, + 106,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,100,6,25,0,0,0,125,5,116,19,0,0, + 0,0,0,0,0,0,124,5,116,0,0,0,0,0,0,0, 0,0,106,14,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,106,23,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,100,8,171,1,0,0, - 0,0,0,0,125,7,124,6,124,7,107,55,0,0,114,37, - 124,7,116,25,0,0,0,0,0,0,0,0,124,4,171,1, - 0,0,0,0,0,0,107,55,0,0,114,2,124,0,83,0, - 116,19,0,0,0,0,0,0,0,0,116,27,0,0,0,0, - 0,0,0,0,124,4,171,1,0,0,0,0,0,0,124,6, - 171,2,0,0,0,0,0,0,125,4,116,5,0,0,0,0, - 0,0,0,0,124,0,116,6,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,100,5,25,0,0,0,171,2,0,0, + 0,0,0,0,125,4,124,2,100,3,107,55,0,0,114,115, + 124,0,100,3,124,2,26,0,125,6,116,5,0,0,0,0, + 0,0,0,0,124,6,116,6,0,0,0,0,0,0,0,0, 171,2,0,0,0,0,0,0,114,21,116,1,0,0,0,0, - 0,0,0,0,106,28,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,106,20,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,124,6,171,1,0,0,0,0, + 0,0,125,6,116,0,0,0,0,0,0,0,0,0,106,14, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,106,23,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,100,8,171,1,0,0,0,0,0,0, + 125,7,124,6,124,7,107,55,0,0,114,37,124,7,116,25, 0,0,0,0,0,0,0,0,124,4,171,1,0,0,0,0, - 0,0,125,4,124,4,124,0,124,2,100,9,26,0,122,0, - 0,0,83,0,35,0,116,16,0,0,0,0,0,0,0,0, - 36,0,114,5,1,0,100,7,125,5,89,0,140,207,119,0, - 120,3,89,0,119,1,41,10,122,76,69,120,112,97,110,100, - 32,126,32,97,110,100,32,126,117,115,101,114,32,99,111,110, - 115,116,114,117,99,116,115,46,10,10,32,32,32,32,73,102, - 32,117,115,101,114,32,111,114,32,36,72,79,77,69,32,105, - 115,32,117,110,107,110,111,119,110,44,32,100,111,32,110,111, - 116,104,105,110,103,46,243,1,0,0,0,126,218,1,126,114, - 86,0,0,0,218,11,85,83,69,82,80,82,79,70,73,76, - 69,218,8,72,79,77,69,80,65,84,72,218,9,72,79,77, - 69,68,82,73,86,69,114,116,0,0,0,218,8,85,83,69, - 82,78,65,77,69,78,41,15,114,66,0,0,0,114,67,0, - 0,0,114,53,0,0,0,114,54,0,0,0,114,87,0,0, - 0,114,128,0,0,0,114,58,0,0,0,218,7,101,110,118, - 105,114,111,110,218,8,75,101,121,69,114,114,111,114,114,12, - 0,0,0,114,80,0,0,0,218,3,103,101,116,114,17,0, - 0,0,114,18,0,0,0,114,79,0,0,0,41,8,114,56, - 0,0,0,218,5,116,105,108,100,101,114,132,0,0,0,218, - 1,110,218,8,117,115,101,114,104,111,109,101,114,110,0,0, - 0,218,11,116,97,114,103,101,116,95,117,115,101,114,218,12, - 99,117,114,114,101,110,116,95,117,115,101,114,115,8,0,0, - 0,32,32,32,32,32,32,32,32,114,57,0,0,0,114,30, - 0,0,0,114,30,0,0,0,94,1,0,0,115,123,1,0, - 0,128,0,244,8,0,12,14,143,57,137,57,144,84,139,63, - 128,68,220,7,17,144,36,156,5,212,7,30,216,16,20,137, - 5,224,16,19,136,5,216,11,15,143,63,137,63,152,53,212, - 11,33,216,15,19,136,11,216,11,12,140,99,144,36,139,105, - 128,113,128,65,216,10,11,136,97,138,37,144,68,152,17,145, - 71,164,61,176,20,211,35,54,209,20,54,216,8,9,136,81, - 137,6,136,1,240,3,0,11,12,136,97,138,37,144,68,152, - 17,145,71,164,61,176,20,211,35,54,210,20,54,240,6,0, - 8,21,156,2,159,10,153,10,209,7,34,220,19,21,151,58, - 145,58,152,109,209,19,44,137,8,216,13,23,156,50,159,58, - 153,58,209,13,37,216,15,19,136,11,240,4,3,9,23,220, - 20,22,151,74,145,74,152,123,209,20,43,136,69,244,6,0, - 20,24,152,5,156,114,159,122,153,122,168,42,209,31,53,211, - 19,54,136,8,224,7,8,136,65,130,118,216,22,26,152,49, - 152,81,144,105,136,11,220,11,21,144,107,164,53,212,11,41, - 220,26,28,159,43,153,43,160,107,211,26,50,136,75,220,23, - 25,151,122,145,122,151,126,145,126,160,106,211,23,49,136,12, - 224,11,22,152,44,210,11,38,240,12,0,16,28,156,120,168, - 8,211,31,49,210,15,49,216,23,27,144,11,220,23,27,156, - 71,160,72,211,28,45,168,123,211,23,59,136,72,228,7,17, - 144,36,156,5,212,7,30,220,19,21,151,59,145,59,152,120, - 211,19,40,136,8,224,11,19,144,100,152,49,152,50,144,104, - 209,11,30,208,4,30,248,244,47,0,16,24,242,0,1,9, - 23,216,20,22,138,69,240,3,1,9,23,250,115,18,0,0, - 0,194,54,19,70,11,0,198,11,11,70,25,3,198,24,1, - 70,25,3,99,1,0,0,0,0,0,0,0,0,0,0,0, - 6,0,0,0,3,0,0,0,243,236,6,0,0,151,0,116, - 1,0,0,0,0,0,0,0,0,106,2,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,171, - 1,0,0,0,0,0,0,125,0,116,5,0,0,0,0,0, - 0,0,0,124,0,116,6,0,0,0,0,0,0,0,0,171, - 2,0,0,0,0,0,0,114,80,100,1,124,0,118,1,114, - 6,100,2,124,0,118,1,114,2,124,0,83,0,100,3,100, - 4,108,4,125,1,116,7,0,0,0,0,0,0,0,0,124, - 1,106,10,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,124,1,106,12,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,122,0,0,0,100, - 5,122,0,0,0,100,6,171,2,0,0,0,0,0,0,125, - 2,100,7,125,3,100,2,125,4,100,8,125,5,100,9,125, - 6,100,1,125,7,116,15,0,0,0,0,0,0,0,0,116, - 0,0,0,0,0,0,0,0,0,100,10,100,4,171,3,0, - 0,0,0,0,0,125,8,110,68,100,11,124,0,118,1,114, - 6,100,12,124,0,118,1,114,2,124,0,83,0,100,3,100, - 4,108,4,125,1,124,1,106,10,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,1,106,12,0, + 0,0,107,55,0,0,114,2,124,0,83,0,116,19,0,0, + 0,0,0,0,0,0,116,27,0,0,0,0,0,0,0,0, + 124,4,171,1,0,0,0,0,0,0,124,6,171,2,0,0, + 0,0,0,0,125,4,116,5,0,0,0,0,0,0,0,0, + 124,0,116,6,0,0,0,0,0,0,0,0,171,2,0,0, + 0,0,0,0,114,21,116,1,0,0,0,0,0,0,0,0, + 106,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,4,171,1,0,0,0,0,0,0,125,4, + 124,4,124,0,124,2,100,9,26,0,122,0,0,0,83,0, + 35,0,116,16,0,0,0,0,0,0,0,0,36,0,114,5, + 1,0,100,7,125,5,89,0,140,207,119,0,120,3,89,0, + 119,1,41,10,122,76,69,120,112,97,110,100,32,126,32,97, + 110,100,32,126,117,115,101,114,32,99,111,110,115,116,114,117, + 99,116,115,46,10,10,32,32,32,32,73,102,32,117,115,101, + 114,32,111,114,32,36,72,79,77,69,32,105,115,32,117,110, + 107,110,111,119,110,44,32,100,111,32,110,111,116,104,105,110, + 103,46,243,1,0,0,0,126,218,1,126,114,86,0,0,0, + 218,11,85,83,69,82,80,82,79,70,73,76,69,218,8,72, + 79,77,69,80,65,84,72,218,9,72,79,77,69,68,82,73, + 86,69,114,116,0,0,0,218,8,85,83,69,82,78,65,77, + 69,78,41,15,114,66,0,0,0,114,67,0,0,0,114,53, + 0,0,0,114,54,0,0,0,114,87,0,0,0,114,128,0, + 0,0,114,58,0,0,0,218,7,101,110,118,105,114,111,110, + 218,8,75,101,121,69,114,114,111,114,114,12,0,0,0,114, + 80,0,0,0,218,3,103,101,116,114,17,0,0,0,114,18, + 0,0,0,114,79,0,0,0,41,8,114,56,0,0,0,218, + 5,116,105,108,100,101,114,132,0,0,0,218,1,110,218,8, + 117,115,101,114,104,111,109,101,114,110,0,0,0,218,11,116, + 97,114,103,101,116,95,117,115,101,114,218,12,99,117,114,114, + 101,110,116,95,117,115,101,114,115,8,0,0,0,32,32,32, + 32,32,32,32,32,114,57,0,0,0,114,30,0,0,0,114, + 30,0,0,0,94,1,0,0,115,123,1,0,0,128,0,244, + 8,0,12,14,143,57,137,57,144,84,139,63,128,68,220,7, + 17,144,36,156,5,212,7,30,216,16,20,137,5,224,16,19, + 136,5,216,11,15,143,63,137,63,152,53,212,11,33,216,15, + 19,136,11,216,11,12,140,99,144,36,139,105,128,113,128,65, + 216,10,11,136,97,138,37,144,68,152,17,145,71,164,61,176, + 20,211,35,54,209,20,54,216,8,9,136,81,137,6,136,1, + 240,3,0,11,12,136,97,138,37,144,68,152,17,145,71,164, + 61,176,20,211,35,54,210,20,54,240,6,0,8,21,156,2, + 159,10,153,10,209,7,34,220,19,21,151,58,145,58,152,109, + 209,19,44,137,8,216,13,23,156,50,159,58,153,58,209,13, + 37,216,15,19,136,11,240,4,3,9,23,220,20,22,151,74, + 145,74,152,123,209,20,43,136,69,244,6,0,20,24,152,5, + 156,114,159,122,153,122,168,42,209,31,53,211,19,54,136,8, + 224,7,8,136,65,130,118,216,22,26,152,49,152,81,144,105, + 136,11,220,11,21,144,107,164,53,212,11,41,220,26,28,159, + 43,153,43,160,107,211,26,50,136,75,220,23,25,151,122,145, + 122,151,126,145,126,160,106,211,23,49,136,12,224,11,22,152, + 44,210,11,38,240,12,0,16,28,156,120,168,8,211,31,49, + 210,15,49,216,23,27,144,11,220,23,27,156,71,160,72,211, + 28,45,168,123,211,23,59,136,72,228,7,17,144,36,156,5, + 212,7,30,220,19,21,151,59,145,59,152,120,211,19,40,136, + 8,224,11,19,144,100,152,49,152,50,144,104,209,11,30,208, + 4,30,248,244,47,0,16,24,242,0,1,9,23,216,20,22, + 138,69,240,3,1,9,23,250,115,18,0,0,0,194,54,19, + 70,11,0,198,11,11,70,25,3,198,24,1,70,25,3,99, + 1,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, + 3,0,0,0,243,236,6,0,0,151,0,116,1,0,0,0, + 0,0,0,0,0,106,2,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,0,171,1,0,0,0, + 0,0,0,125,0,116,5,0,0,0,0,0,0,0,0,124, + 0,116,6,0,0,0,0,0,0,0,0,171,2,0,0,0, + 0,0,0,114,80,100,1,124,0,118,1,114,6,100,2,124, + 0,118,1,114,2,124,0,83,0,100,3,100,4,108,4,125, + 1,116,7,0,0,0,0,0,0,0,0,124,1,106,10,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,122,0,0,0,100,5,122,0,0,0,125,2,100,13,125, - 3,100,12,125,4,100,14,125,5,100,15,125,6,100,11,125, - 7,116,0,0,0,0,0,0,0,0,0,106,16,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,125, - 8,124,0,100,4,100,3,26,0,125,9,100,3,125,10,116, - 19,0,0,0,0,0,0,0,0,124,0,171,1,0,0,0, - 0,0,0,125,11,124,10,124,11,107,2,0,0,144,2,114, - 5,124,0,124,10,124,10,100,16,122,0,0,0,26,0,125, - 12,124,12,124,3,107,40,0,0,114,53,124,0,124,10,100, - 16,122,0,0,0,100,4,26,0,125,0,116,19,0,0,0, + 0,124,1,106,12,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,122,0,0,0,100,5,122,0,0, + 0,100,6,171,2,0,0,0,0,0,0,125,2,100,7,125, + 3,100,2,125,4,100,8,125,5,100,9,125,6,100,1,125, + 7,116,15,0,0,0,0,0,0,0,0,116,0,0,0,0, + 0,0,0,0,0,100,10,100,4,171,3,0,0,0,0,0, + 0,125,8,110,68,100,11,124,0,118,1,114,6,100,12,124, + 0,118,1,114,2,124,0,83,0,100,3,100,4,108,4,125, + 1,124,1,106,10,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,1,106,12,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,122,0,0, + 0,100,5,122,0,0,0,125,2,100,13,125,3,100,12,125, + 4,100,14,125,5,100,15,125,6,100,11,125,7,116,0,0, + 0,0,0,0,0,0,0,106,16,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,125,8,124,0,100, + 4,100,3,26,0,125,9,100,3,125,10,116,19,0,0,0, 0,0,0,0,0,124,0,171,1,0,0,0,0,0,0,125, - 11,9,0,124,0,106,21,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,124,12,171,1,0,0,0, - 0,0,0,125,10,124,9,124,12,124,0,100,4,124,10,100, - 16,122,0,0,0,26,0,122,0,0,0,122,13,0,0,125, - 9,144,1,110,183,124,12,124,4,107,40,0,0,114,141,124, - 0,124,10,100,16,122,0,0,0,124,10,100,17,122,0,0, - 0,26,0,124,4,107,40,0,0,114,12,124,9,124,12,122, - 13,0,0,125,9,124,10,100,16,122,13,0,0,125,10,144, - 1,110,152,124,0,124,10,100,16,122,0,0,0,100,4,26, - 0,125,0,116,19,0,0,0,0,0,0,0,0,124,0,171, - 1,0,0,0,0,0,0,125,11,9,0,124,0,106,21,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,4,171,1,0,0,0,0,0,0,125,10,124,0,100, - 4,124,10,26,0,125,13,9,0,124,8,128,58,116,1,0, + 11,124,10,124,11,107,2,0,0,144,2,114,5,124,0,124, + 10,124,10,100,16,122,0,0,0,26,0,125,12,124,12,124, + 3,107,40,0,0,114,53,124,0,124,10,100,16,122,0,0, + 0,100,4,26,0,125,0,116,19,0,0,0,0,0,0,0, + 0,124,0,171,1,0,0,0,0,0,0,125,11,9,0,124, + 0,106,21,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,12,171,1,0,0,0,0,0,0,125, + 10,124,9,124,12,124,0,100,4,124,10,100,16,122,0,0, + 0,26,0,122,0,0,0,122,13,0,0,125,9,144,1,110, + 183,124,12,124,4,107,40,0,0,114,141,124,0,124,10,100, + 16,122,0,0,0,124,10,100,17,122,0,0,0,26,0,124, + 4,107,40,0,0,114,12,124,9,124,12,122,13,0,0,125, + 9,124,10,100,16,122,13,0,0,125,10,144,1,110,152,124, + 0,124,10,100,16,122,0,0,0,100,4,26,0,125,0,116, + 19,0,0,0,0,0,0,0,0,124,0,171,1,0,0,0, + 0,0,0,125,11,9,0,124,0,106,21,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,4,171, + 1,0,0,0,0,0,0,125,10,124,0,100,4,124,10,26, + 0,125,13,9,0,124,8,128,58,116,1,0,0,0,0,0, + 0,0,0,106,24,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,116,0,0,0,0,0,0,0,0, + 0,106,16,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,116,1,0,0,0,0,0,0,0,0,106, + 26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,13,171,1,0,0,0,0,0,0,25,0,0, + 0,171,1,0,0,0,0,0,0,125,14,110,5,124,8,124, + 13,25,0,0,0,125,14,124,9,124,14,122,13,0,0,125, + 9,144,1,110,37,124,12,124,7,107,40,0,0,144,1,114, + 26,124,0,124,10,100,16,122,0,0,0,124,10,100,17,122, + 0,0,0,26,0,124,7,107,40,0,0,114,12,124,9,124, + 12,122,13,0,0,125,9,124,10,100,16,122,13,0,0,125, + 10,144,1,110,5,124,0,124,10,100,16,122,0,0,0,124, + 10,100,17,122,0,0,0,26,0,124,5,107,40,0,0,114, + 114,124,0,124,10,100,17,122,0,0,0,100,4,26,0,125, + 0,116,19,0,0,0,0,0,0,0,0,124,0,171,1,0, + 0,0,0,0,0,125,11,9,0,124,0,106,21,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, + 6,171,1,0,0,0,0,0,0,125,10,124,0,100,4,124, + 10,26,0,125,13,9,0,124,8,128,58,116,1,0,0,0, + 0,0,0,0,0,106,24,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,116,0,0,0,0,0,0, + 0,0,0,106,16,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,116,1,0,0,0,0,0,0,0, + 0,106,26,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,13,171,1,0,0,0,0,0,0,25, + 0,0,0,171,1,0,0,0,0,0,0,125,14,110,5,124, + 8,124,13,25,0,0,0,125,14,124,9,124,14,122,13,0, + 0,125,9,110,133,124,0,100,4,100,3,26,0,125,13,124, + 10,100,16,122,13,0,0,125,10,124,0,124,10,124,10,100, + 16,122,0,0,0,26,0,125,12,124,12,114,29,124,12,124, + 2,118,0,114,25,124,13,124,12,122,13,0,0,125,13,124, + 10,100,16,122,13,0,0,125,10,124,0,124,10,124,10,100, + 16,122,0,0,0,26,0,125,12,124,12,114,5,124,12,124, + 2,118,0,114,1,140,25,9,0,124,8,128,58,116,1,0, 0,0,0,0,0,0,0,106,24,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,116,0,0,0,0, 0,0,0,0,0,106,16,0,0,0,0,0,0,0,0,0, @@ -799,871 +834,866 @@ const unsigned char _Py_M__ntpath[] = { 0,0,0,0,0,0,0,124,13,171,1,0,0,0,0,0, 0,25,0,0,0,171,1,0,0,0,0,0,0,125,14,110, 5,124,8,124,13,25,0,0,0,125,14,124,9,124,14,122, - 13,0,0,125,9,144,1,110,37,124,12,124,7,107,40,0, - 0,144,1,114,26,124,0,124,10,100,16,122,0,0,0,124, - 10,100,17,122,0,0,0,26,0,124,7,107,40,0,0,114, - 12,124,9,124,12,122,13,0,0,125,9,124,10,100,16,122, - 13,0,0,125,10,144,1,110,5,124,0,124,10,100,16,122, - 0,0,0,124,10,100,17,122,0,0,0,26,0,124,5,107, - 40,0,0,114,114,124,0,124,10,100,17,122,0,0,0,100, - 4,26,0,125,0,116,19,0,0,0,0,0,0,0,0,124, - 0,171,1,0,0,0,0,0,0,125,11,9,0,124,0,106, - 21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,6,171,1,0,0,0,0,0,0,125,10,124, - 0,100,4,124,10,26,0,125,13,9,0,124,8,128,58,116, - 1,0,0,0,0,0,0,0,0,106,24,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,116,0,0, - 0,0,0,0,0,0,0,106,16,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,116,1,0,0,0, - 0,0,0,0,0,106,26,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,124,13,171,1,0,0,0, - 0,0,0,25,0,0,0,171,1,0,0,0,0,0,0,125, - 14,110,5,124,8,124,13,25,0,0,0,125,14,124,9,124, - 14,122,13,0,0,125,9,110,133,124,0,100,4,100,3,26, - 0,125,13,124,10,100,16,122,13,0,0,125,10,124,0,124, - 10,124,10,100,16,122,0,0,0,26,0,125,12,124,12,114, - 29,124,12,124,2,118,0,114,25,124,13,124,12,122,13,0, - 0,125,13,124,10,100,16,122,13,0,0,125,10,124,0,124, - 10,124,10,100,16,122,0,0,0,26,0,125,12,124,12,114, - 5,124,12,124,2,118,0,114,1,140,25,9,0,124,8,128, - 58,116,1,0,0,0,0,0,0,0,0,106,24,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,116, - 0,0,0,0,0,0,0,0,0,106,16,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,116,1,0, - 0,0,0,0,0,0,0,106,26,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,13,171,1,0, - 0,0,0,0,0,25,0,0,0,171,1,0,0,0,0,0, - 0,125,14,110,5,124,8,124,13,25,0,0,0,125,14,124, - 9,124,14,122,13,0,0,125,9,124,12,114,11,124,10,100, - 16,122,23,0,0,125,10,110,5,124,9,124,12,122,13,0, - 0,125,9,124,10,100,16,122,13,0,0,125,10,124,10,124, - 11,107,2,0,0,114,2,144,2,140,5,124,9,83,0,35, - 0,116,22,0,0,0,0,0,0,0,0,36,0,114,16,1, - 0,124,9,124,12,124,0,122,0,0,0,122,13,0,0,125, - 9,124,11,100,16,122,10,0,0,125,10,89,0,140,38,119, - 0,120,3,89,0,119,1,35,0,116,28,0,0,0,0,0, - 0,0,0,36,0,114,12,1,0,124,4,124,13,122,0,0, - 0,124,4,122,0,0,0,125,14,89,0,144,1,140,106,119, - 0,120,3,89,0,119,1,35,0,116,22,0,0,0,0,0, - 0,0,0,36,0,114,16,1,0,124,9,124,4,124,0,122, - 0,0,0,122,13,0,0,125,9,124,11,100,16,122,10,0, - 0,125,10,89,0,140,90,119,0,120,3,89,0,119,1,35, - 0,116,28,0,0,0,0,0,0,0,0,36,0,114,14,1, - 0,124,7,124,5,122,0,0,0,124,13,122,0,0,0,124, - 6,122,0,0,0,125,14,89,0,140,255,119,0,120,3,89, + 13,0,0,125,9,124,12,114,11,124,10,100,16,122,23,0, + 0,125,10,110,5,124,9,124,12,122,13,0,0,125,9,124, + 10,100,16,122,13,0,0,125,10,124,10,124,11,107,2,0, + 0,114,2,144,2,140,5,124,9,83,0,35,0,116,22,0, + 0,0,0,0,0,0,0,36,0,114,16,1,0,124,9,124, + 12,124,0,122,0,0,0,122,13,0,0,125,9,124,11,100, + 16,122,10,0,0,125,10,89,0,140,38,119,0,120,3,89, + 0,119,1,35,0,116,28,0,0,0,0,0,0,0,0,36, + 0,114,12,1,0,124,4,124,13,122,0,0,0,124,4,122, + 0,0,0,125,14,89,0,144,1,140,106,119,0,120,3,89, 0,119,1,35,0,116,22,0,0,0,0,0,0,0,0,36, - 0,114,19,1,0,124,9,124,7,124,5,122,0,0,0,124, - 0,122,0,0,0,122,13,0,0,125,9,124,11,100,16,122, - 10,0,0,125,10,89,0,140,147,119,0,120,3,89,0,119, - 1,35,0,116,28,0,0,0,0,0,0,0,0,36,0,114, - 8,1,0,124,7,124,13,122,0,0,0,125,14,89,0,140, - 185,119,0,120,3,89,0,119,1,41,18,122,102,69,120,112, - 97,110,100,32,115,104,101,108,108,32,118,97,114,105,97,98, - 108,101,115,32,111,102,32,116,104,101,32,102,111,114,109,115, - 32,36,118,97,114,44,32,36,123,118,97,114,125,32,97,110, - 100,32,37,118,97,114,37,46,10,10,32,32,32,32,85,110, - 107,110,111,119,110,32,118,97,114,105,97,98,108,101,115,32, - 97,114,101,32,108,101,102,116,32,117,110,99,104,97,110,103, - 101,100,46,243,1,0,0,0,36,243,1,0,0,0,37,114, - 8,0,0,0,78,122,2,95,45,218,5,97,115,99,105,105, - 243,1,0,0,0,39,243,1,0,0,0,123,243,1,0,0, - 0,125,218,8,101,110,118,105,114,111,110,98,218,1,36,218, - 1,37,218,1,39,218,1,123,218,1,125,114,86,0,0,0, - 114,117,0,0,0,41,15,114,66,0,0,0,114,67,0,0, - 0,114,53,0,0,0,114,54,0,0,0,218,6,115,116,114, - 105,110,103,218,13,97,115,99,105,105,95,108,101,116,116,101, - 114,115,218,6,100,105,103,105,116,115,218,7,103,101,116,97, - 116,116,114,114,168,0,0,0,114,128,0,0,0,114,125,0, - 0,0,114,147,0,0,0,114,79,0,0,0,114,80,0,0, - 0,114,169,0,0,0,41,15,114,56,0,0,0,114,189,0, - 0,0,218,8,118,97,114,99,104,97,114,115,218,5,113,117, - 111,116,101,218,7,112,101,114,99,101,110,116,218,5,98,114, - 97,99,101,218,6,114,98,114,97,99,101,218,6,100,111,108, - 108,97,114,114,168,0,0,0,218,3,114,101,115,114,125,0, - 0,0,218,7,112,97,116,104,108,101,110,218,1,99,218,3, - 118,97,114,218,5,118,97,108,117,101,115,15,0,0,0,32, - 32,32,32,32,32,32,32,32,32,32,32,32,32,32,114,57, - 0,0,0,114,31,0,0,0,114,31,0,0,0,155,1,0, - 0,115,72,4,0,0,128,0,244,8,0,12,14,143,57,137, - 57,144,84,139,63,128,68,220,7,17,144,36,156,5,212,7, - 30,216,11,15,144,116,209,11,27,160,4,168,68,209,32,48, - 216,19,23,136,75,219,8,21,220,19,24,152,22,215,25,45, - 209,25,45,176,6,183,13,177,13,209,25,61,192,4,209,25, - 68,192,103,211,19,78,136,8,216,16,21,136,5,216,18,22, - 136,7,216,16,20,136,5,216,17,21,136,6,216,17,21,136, - 6,220,18,25,156,34,152,106,168,36,211,18,47,137,7,224, - 11,14,144,100,137,63,152,115,168,36,153,127,216,19,23,136, - 75,219,8,21,216,19,25,215,19,39,209,19,39,168,38,175, - 45,169,45,209,19,55,184,36,209,19,62,136,8,216,16,20, - 136,5,216,18,21,136,7,216,16,19,136,5,216,17,20,136, - 6,216,17,20,136,6,220,18,20,151,42,145,42,136,7,216, - 10,14,136,114,144,1,136,40,128,67,216,12,13,128,69,220, - 14,17,144,36,139,105,128,71,216,10,15,144,39,139,47,216, - 12,16,144,21,144,117,152,81,145,119,208,12,31,136,1,216, - 11,12,144,5,138,58,216,19,23,152,5,160,1,153,9,152, - 10,208,19,35,136,68,220,22,25,152,36,147,105,136,71,240, - 2,5,13,36,216,24,28,159,10,153,10,160,49,155,13,144, - 5,216,16,19,144,113,152,52,160,10,160,21,168,17,161,25, - 208,27,43,209,23,43,209,16,43,146,3,240,8,0,14,15, - 144,39,138,92,216,15,19,144,69,152,65,145,73,152,101,160, - 97,153,105,208,15,40,168,71,210,15,51,216,16,19,144,113, - 145,8,144,3,216,16,21,152,17,145,10,146,5,224,23,27, - 152,69,160,33,153,71,152,72,144,126,144,4,220,26,29,152, - 100,155,41,144,7,240,2,14,17,33,216,28,32,159,74,153, - 74,160,119,211,28,47,144,69,240,10,0,27,31,152,118,160, - 5,152,44,144,67,240,2,6,21,56,216,27,34,152,63,220, - 36,38,167,75,161,75,180,2,183,10,177,10,188,50,191,59, - 185,59,192,115,211,59,75,209,48,76,211,36,77,153,69,224, - 36,43,168,67,161,76,152,69,240,6,0,21,24,152,53,145, - 76,146,67,216,13,14,144,38,139,91,216,15,19,144,69,152, - 65,145,73,152,101,160,97,153,105,208,15,40,168,70,210,15, - 50,216,16,19,144,113,145,8,144,3,216,16,21,152,17,145, - 10,146,5,216,17,21,144,101,152,97,145,105,160,5,168,1, - 161,9,208,17,42,168,101,210,17,51,216,23,27,152,69,160, - 33,153,71,152,72,144,126,144,4,220,26,29,152,100,155,41, - 144,7,240,2,14,17,33,216,28,32,159,74,153,74,160,118, - 211,28,46,144,69,240,10,0,27,31,152,118,160,5,152,44, - 144,67,240,2,6,21,62,216,27,34,152,63,220,36,38,167, - 75,161,75,180,2,183,10,177,10,188,50,191,59,185,59,192, - 115,211,59,75,209,48,76,211,36,77,153,69,224,36,43,168, - 67,161,76,152,69,240,6,0,21,24,152,53,145,76,145,67, - 224,22,26,152,50,152,65,144,104,144,3,216,16,21,152,17, - 145,10,144,5,216,20,24,152,21,152,117,160,113,153,121,208, - 20,41,144,1,217,22,23,152,65,160,24,153,77,216,20,23, - 152,49,145,72,144,67,216,20,25,152,81,145,74,144,69,216, - 24,28,152,85,160,53,168,49,161,57,208,24,45,144,65,241, - 7,0,23,24,152,65,160,24,154,77,240,8,6,17,41,216, - 23,30,144,127,220,32,34,167,11,161,11,172,66,175,74,169, - 74,180,114,183,123,177,123,192,51,211,55,71,209,44,72,211, - 32,73,153,5,224,32,39,168,3,161,12,152,5,240,6,0, - 17,20,144,117,145,12,144,3,217,19,20,216,20,25,152,81, - 145,74,145,69,224,12,15,144,49,137,72,136,67,216,8,13, - 144,17,137,10,136,5,240,87,2,0,11,16,144,39,140,47, - 240,88,2,0,12,15,128,74,248,244,73,2,0,20,30,242, - 0,2,13,36,216,16,19,144,113,152,52,145,120,145,15,144, - 3,216,24,31,160,33,153,11,146,5,240,5,2,13,36,251, - 244,44,0,28,36,242,0,1,21,56,216,32,39,168,35,161, - 13,176,7,209,32,55,155,5,240,3,1,21,56,251,244,21, - 0,24,34,242,0,2,17,40,216,20,23,152,55,160,84,153, - 62,209,20,41,144,67,216,28,35,160,97,153,75,146,69,240, - 5,2,17,40,251,244,64,1,0,28,36,242,0,1,21,62, - 216,32,38,168,21,161,14,176,19,209,32,52,176,118,209,32, - 61,154,5,240,3,1,21,62,251,244,21,0,24,34,242,0, - 2,17,40,216,20,23,152,54,160,69,153,62,168,68,209,27, - 48,209,20,48,144,67,216,28,35,160,97,153,75,146,69,240, - 5,2,17,40,251,244,52,0,24,32,242,0,1,17,41,216, - 28,34,160,83,153,76,146,69,240,3,1,17,41,250,115,111, - 0,0,0,195,51,31,75,25,0,197,7,17,76,13,0,197, - 30,65,1,75,53,0,199,40,17,77,3,0,199,63,65,1, - 76,41,0,201,56,65,1,77,34,0,203,25,22,75,50,3, - 203,49,1,75,50,3,203,53,17,76,10,3,204,9,1,76, - 10,3,204,13,22,76,38,3,204,37,1,76,38,3,204,41, - 20,77,0,3,204,63,1,77,0,3,205,3,25,77,31,3, - 205,30,1,77,31,3,205,34,14,77,51,3,205,50,1,77, - 51,3,41,1,218,14,95,112,97,116,104,95,110,111,114,109, - 112,97,116,104,99,1,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,3,0,0,0,243,12,2,0,0,151,0, - 116,1,0,0,0,0,0,0,0,0,106,2,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0, - 171,1,0,0,0,0,0,0,125,0,116,5,0,0,0,0, - 0,0,0,0,124,0,116,6,0,0,0,0,0,0,0,0, - 171,2,0,0,0,0,0,0,114,9,100,1,125,1,100,2, - 125,2,100,3,125,3,100,4,125,4,110,8,100,5,125,1, - 100,6,125,2,100,7,125,3,100,8,125,4,124,0,106,9, + 0,114,16,1,0,124,9,124,4,124,0,122,0,0,0,122, + 13,0,0,125,9,124,11,100,16,122,10,0,0,125,10,89, + 0,140,90,119,0,120,3,89,0,119,1,35,0,116,28,0, + 0,0,0,0,0,0,0,36,0,114,14,1,0,124,7,124, + 5,122,0,0,0,124,13,122,0,0,0,124,6,122,0,0, + 0,125,14,89,0,140,255,119,0,120,3,89,0,119,1,35, + 0,116,22,0,0,0,0,0,0,0,0,36,0,114,19,1, + 0,124,9,124,7,124,5,122,0,0,0,124,0,122,0,0, + 0,122,13,0,0,125,9,124,11,100,16,122,10,0,0,125, + 10,89,0,140,147,119,0,120,3,89,0,119,1,35,0,116, + 28,0,0,0,0,0,0,0,0,36,0,114,8,1,0,124, + 7,124,13,122,0,0,0,125,14,89,0,140,185,119,0,120, + 3,89,0,119,1,41,18,122,102,69,120,112,97,110,100,32, + 115,104,101,108,108,32,118,97,114,105,97,98,108,101,115,32, + 111,102,32,116,104,101,32,102,111,114,109,115,32,36,118,97, + 114,44,32,36,123,118,97,114,125,32,97,110,100,32,37,118, + 97,114,37,46,10,10,32,32,32,32,85,110,107,110,111,119, + 110,32,118,97,114,105,97,98,108,101,115,32,97,114,101,32, + 108,101,102,116,32,117,110,99,104,97,110,103,101,100,46,243, + 1,0,0,0,36,243,1,0,0,0,37,114,8,0,0,0, + 78,122,2,95,45,218,5,97,115,99,105,105,243,1,0,0, + 0,39,243,1,0,0,0,123,243,1,0,0,0,125,218,8, + 101,110,118,105,114,111,110,98,218,1,36,218,1,37,218,1, + 39,218,1,123,218,1,125,114,86,0,0,0,114,117,0,0, + 0,41,15,114,66,0,0,0,114,67,0,0,0,114,53,0, + 0,0,114,54,0,0,0,218,6,115,116,114,105,110,103,218, + 13,97,115,99,105,105,95,108,101,116,116,101,114,115,218,6, + 100,105,103,105,116,115,218,7,103,101,116,97,116,116,114,114, + 168,0,0,0,114,128,0,0,0,114,125,0,0,0,114,147, + 0,0,0,114,79,0,0,0,114,80,0,0,0,114,169,0, + 0,0,41,15,114,56,0,0,0,114,189,0,0,0,218,8, + 118,97,114,99,104,97,114,115,218,5,113,117,111,116,101,218, + 7,112,101,114,99,101,110,116,218,5,98,114,97,99,101,218, + 6,114,98,114,97,99,101,218,6,100,111,108,108,97,114,114, + 168,0,0,0,218,3,114,101,115,114,125,0,0,0,218,7, + 112,97,116,104,108,101,110,218,1,99,218,3,118,97,114,218, + 5,118,97,108,117,101,115,15,0,0,0,32,32,32,32,32, + 32,32,32,32,32,32,32,32,32,32,114,57,0,0,0,114, + 31,0,0,0,114,31,0,0,0,155,1,0,0,115,72,4, + 0,0,128,0,244,8,0,12,14,143,57,137,57,144,84,139, + 63,128,68,220,7,17,144,36,156,5,212,7,30,216,11,15, + 144,116,209,11,27,160,4,168,68,209,32,48,216,19,23,136, + 75,219,8,21,220,19,24,152,22,215,25,45,209,25,45,176, + 6,183,13,177,13,209,25,61,192,4,209,25,68,192,103,211, + 19,78,136,8,216,16,21,136,5,216,18,22,136,7,216,16, + 20,136,5,216,17,21,136,6,216,17,21,136,6,220,18,25, + 156,34,152,106,168,36,211,18,47,137,7,224,11,14,144,100, + 137,63,152,115,168,36,153,127,216,19,23,136,75,219,8,21, + 216,19,25,215,19,39,209,19,39,168,38,175,45,169,45,209, + 19,55,184,36,209,19,62,136,8,216,16,20,136,5,216,18, + 21,136,7,216,16,19,136,5,216,17,20,136,6,216,17,20, + 136,6,220,18,20,151,42,145,42,136,7,216,10,14,136,114, + 144,1,136,40,128,67,216,12,13,128,69,220,14,17,144,36, + 139,105,128,71,216,10,15,144,39,139,47,216,12,16,144,21, + 144,117,152,81,145,119,208,12,31,136,1,216,11,12,144,5, + 138,58,216,19,23,152,5,160,1,153,9,152,10,208,19,35, + 136,68,220,22,25,152,36,147,105,136,71,240,2,5,13,36, + 216,24,28,159,10,153,10,160,49,155,13,144,5,216,16,19, + 144,113,152,52,160,10,160,21,168,17,161,25,208,27,43,209, + 23,43,209,16,43,146,3,240,8,0,14,15,144,39,138,92, + 216,15,19,144,69,152,65,145,73,152,101,160,97,153,105,208, + 15,40,168,71,210,15,51,216,16,19,144,113,145,8,144,3, + 216,16,21,152,17,145,10,146,5,224,23,27,152,69,160,33, + 153,71,152,72,144,126,144,4,220,26,29,152,100,155,41,144, + 7,240,2,14,17,33,216,28,32,159,74,153,74,160,119,211, + 28,47,144,69,240,10,0,27,31,152,118,160,5,152,44,144, + 67,240,2,6,21,56,216,27,34,152,63,220,36,38,167,75, + 161,75,180,2,183,10,177,10,188,50,191,59,185,59,192,115, + 211,59,75,209,48,76,211,36,77,153,69,224,36,43,168,67, + 161,76,152,69,240,6,0,21,24,152,53,145,76,146,67,216, + 13,14,144,38,139,91,216,15,19,144,69,152,65,145,73,152, + 101,160,97,153,105,208,15,40,168,70,210,15,50,216,16,19, + 144,113,145,8,144,3,216,16,21,152,17,145,10,146,5,216, + 17,21,144,101,152,97,145,105,160,5,168,1,161,9,208,17, + 42,168,101,210,17,51,216,23,27,152,69,160,33,153,71,152, + 72,144,126,144,4,220,26,29,152,100,155,41,144,7,240,2, + 14,17,33,216,28,32,159,74,153,74,160,118,211,28,46,144, + 69,240,10,0,27,31,152,118,160,5,152,44,144,67,240,2, + 6,21,62,216,27,34,152,63,220,36,38,167,75,161,75,180, + 2,183,10,177,10,188,50,191,59,185,59,192,115,211,59,75, + 209,48,76,211,36,77,153,69,224,36,43,168,67,161,76,152, + 69,240,6,0,21,24,152,53,145,76,145,67,224,22,26,152, + 50,152,65,144,104,144,3,216,16,21,152,17,145,10,144,5, + 216,20,24,152,21,152,117,160,113,153,121,208,20,41,144,1, + 217,22,23,152,65,160,24,153,77,216,20,23,152,49,145,72, + 144,67,216,20,25,152,81,145,74,144,69,216,24,28,152,85, + 160,53,168,49,161,57,208,24,45,144,65,241,7,0,23,24, + 152,65,160,24,154,77,240,8,6,17,41,216,23,30,144,127, + 220,32,34,167,11,161,11,172,66,175,74,169,74,180,114,183, + 123,177,123,192,51,211,55,71,209,44,72,211,32,73,153,5, + 224,32,39,168,3,161,12,152,5,240,6,0,17,20,144,117, + 145,12,144,3,217,19,20,216,20,25,152,81,145,74,145,69, + 224,12,15,144,49,137,72,136,67,216,8,13,144,17,137,10, + 136,5,240,87,2,0,11,16,144,39,140,47,240,88,2,0, + 12,15,128,74,248,244,73,2,0,20,30,242,0,2,13,36, + 216,16,19,144,113,152,52,145,120,145,15,144,3,216,24,31, + 160,33,153,11,146,5,240,5,2,13,36,251,244,44,0,28, + 36,242,0,1,21,56,216,32,39,168,35,161,13,176,7,209, + 32,55,155,5,240,3,1,21,56,251,244,21,0,24,34,242, + 0,2,17,40,216,20,23,152,55,160,84,153,62,209,20,41, + 144,67,216,28,35,160,97,153,75,146,69,240,5,2,17,40, + 251,244,64,1,0,28,36,242,0,1,21,62,216,32,38,168, + 21,161,14,176,19,209,32,52,176,118,209,32,61,154,5,240, + 3,1,21,62,251,244,21,0,24,34,242,0,2,17,40,216, + 20,23,152,54,160,69,153,62,168,68,209,27,48,209,20,48, + 144,67,216,28,35,160,97,153,75,146,69,240,5,2,17,40, + 251,244,52,0,24,32,242,0,1,17,41,216,28,34,160,83, + 153,76,146,69,240,3,1,17,41,250,115,111,0,0,0,195, + 51,31,75,25,0,197,7,17,76,13,0,197,30,65,1,75, + 53,0,199,40,17,77,3,0,199,63,65,1,76,41,0,201, + 56,65,1,77,34,0,203,25,22,75,50,3,203,49,1,75, + 50,3,203,53,17,76,10,3,204,9,1,76,10,3,204,13, + 22,76,38,3,204,37,1,76,38,3,204,41,20,77,0,3, + 204,63,1,77,0,3,205,3,25,77,31,3,205,30,1,77, + 31,3,205,34,14,77,51,3,205,50,1,77,51,3,41,1, + 218,14,95,112,97,116,104,95,110,111,114,109,112,97,116,104, + 99,1,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,3,0,0,0,243,12,2,0,0,151,0,116,1,0,0, + 0,0,0,0,0,0,106,2,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,0,171,1,0,0, + 0,0,0,0,125,0,116,5,0,0,0,0,0,0,0,0, + 124,0,116,6,0,0,0,0,0,0,0,0,171,2,0,0, + 0,0,0,0,114,9,100,1,125,1,100,2,125,2,100,3, + 125,3,100,4,125,4,110,8,100,5,125,1,100,6,125,2, + 100,7,125,3,100,8,125,4,124,0,106,9,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,2, + 124,1,171,2,0,0,0,0,0,0,125,0,116,11,0,0, + 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, + 92,3,0,0,125,5,125,6,125,0,124,5,124,6,122,0, + 0,0,125,7,124,0,106,13,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,1,171,1,0,0, + 0,0,0,0,125,8,100,9,125,9,124,9,116,15,0,0, + 0,0,0,0,0,0,124,8,171,1,0,0,0,0,0,0, + 107,2,0,0,114,95,124,8,124,9,25,0,0,0,114,8, + 124,8,124,9,25,0,0,0,124,3,107,40,0,0,114,4, + 124,8,124,9,61,0,110,63,124,8,124,9,25,0,0,0, + 124,4,107,40,0,0,114,50,124,9,100,9,107,68,0,0, + 114,28,124,8,124,9,100,10,122,10,0,0,25,0,0,0, + 124,4,107,55,0,0,114,17,124,8,124,9,100,10,122,10, + 0,0,124,9,100,10,122,0,0,0,133,2,61,0,124,9, + 100,10,122,23,0,0,125,9,110,22,124,9,100,9,107,40, + 0,0,114,6,124,6,114,4,124,8,124,9,61,0,110,11, + 124,9,100,10,122,13,0,0,125,9,110,5,124,9,100,10, + 122,13,0,0,125,9,124,9,116,15,0,0,0,0,0,0, + 0,0,124,8,171,1,0,0,0,0,0,0,107,2,0,0, + 114,1,140,95,124,7,115,19,124,8,115,17,124,8,106,17, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,2,124,1,171,2,0,0,0,0,0,0,125,0, - 116,11,0,0,0,0,0,0,0,0,124,0,171,1,0,0, - 0,0,0,0,92,3,0,0,125,5,125,6,125,0,124,5, - 124,6,122,0,0,0,125,7,124,0,106,13,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,1, - 171,1,0,0,0,0,0,0,125,8,100,9,125,9,124,9, - 116,15,0,0,0,0,0,0,0,0,124,8,171,1,0,0, - 0,0,0,0,107,2,0,0,114,95,124,8,124,9,25,0, - 0,0,114,8,124,8,124,9,25,0,0,0,124,3,107,40, - 0,0,114,4,124,8,124,9,61,0,110,63,124,8,124,9, - 25,0,0,0,124,4,107,40,0,0,114,50,124,9,100,9, - 107,68,0,0,114,28,124,8,124,9,100,10,122,10,0,0, - 25,0,0,0,124,4,107,55,0,0,114,17,124,8,124,9, - 100,10,122,10,0,0,124,9,100,10,122,0,0,0,133,2, - 61,0,124,9,100,10,122,23,0,0,125,9,110,22,124,9, - 100,9,107,40,0,0,114,6,124,6,114,4,124,8,124,9, - 61,0,110,11,124,9,100,10,122,13,0,0,125,9,110,5, - 124,9,100,10,122,13,0,0,125,9,124,9,116,15,0,0, + 0,0,124,3,171,1,0,0,0,0,0,0,1,0,124,7, + 124,1,106,19,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,124,8,171,1,0,0,0,0,0,0, - 107,2,0,0,114,1,140,95,124,7,115,19,124,8,115,17, - 124,8,106,17,0,0,0,0,0,0,0,0,0,0,0,0, + 122,0,0,0,83,0,41,11,122,48,78,111,114,109,97,108, + 105,122,101,32,112,97,116,104,44,32,101,108,105,109,105,110, + 97,116,105,110,103,32,100,111,117,98,108,101,32,115,108,97, + 115,104,101,115,44,32,101,116,99,46,114,83,0,0,0,114, + 84,0,0,0,114,135,0,0,0,243,2,0,0,0,46,46, + 114,4,0,0,0,114,6,0,0,0,114,2,0,0,0,114, + 3,0,0,0,114,8,0,0,0,114,86,0,0,0,41,10, + 114,66,0,0,0,114,67,0,0,0,114,53,0,0,0,114, + 54,0,0,0,114,71,0,0,0,114,14,0,0,0,114,15, + 0,0,0,114,128,0,0,0,218,6,97,112,112,101,110,100, + 114,12,0,0,0,41,10,114,56,0,0,0,114,36,0,0, + 0,114,39,0,0,0,114,34,0,0,0,114,35,0,0,0, + 114,110,0,0,0,114,111,0,0,0,218,6,112,114,101,102, + 105,120,218,5,99,111,109,112,115,114,132,0,0,0,115,10, + 0,0,0,32,32,32,32,32,32,32,32,32,32,114,57,0, + 0,0,114,32,0,0,0,114,32,0,0,0,15,2,0,0, + 115,51,1,0,0,128,0,228,15,17,143,121,137,121,152,20, + 139,127,136,4,220,11,21,144,100,156,69,212,11,34,216,18, + 23,136,67,216,21,25,136,70,216,21,25,136,70,216,21,26, + 137,70,224,18,22,136,67,216,21,24,136,70,216,21,24,136, + 70,216,21,25,136,70,216,15,19,143,124,137,124,152,70,160, + 67,211,15,40,136,4,220,28,37,160,100,155,79,209,8,25, + 136,5,136,116,144,84,216,17,22,152,20,145,28,136,6,216, + 16,20,151,10,145,10,152,51,147,15,136,5,216,12,13,136, + 1,216,14,15,148,35,144,101,147,42,138,110,216,19,24,152, + 17,146,56,152,117,160,81,153,120,168,54,210,31,49,216,20, + 25,152,33,145,72,216,17,22,144,113,145,24,152,86,210,17, + 35,216,19,20,144,113,146,53,152,85,160,49,160,81,161,51, + 153,90,168,54,210,29,49,216,24,29,152,97,160,1,153,99, + 160,33,160,65,161,35,152,103,152,14,216,20,21,152,17,145, + 70,145,65,216,21,22,152,33,146,86,161,4,216,24,29,152, + 97,153,8,224,20,21,152,17,145,70,145,65,224,16,17,144, + 81,145,6,144,1,240,25,0,15,16,148,35,144,101,147,42, + 139,110,241,28,0,16,22,153,101,216,12,17,143,76,137,76, + 152,22,212,12,32,216,15,21,152,3,159,8,153,8,160,21, + 155,15,209,15,39,208,8,39,114,59,0,0,0,41,1,218, + 16,95,103,101,116,102,117,108,108,112,97,116,104,110,97,109, + 101,99,1,0,0,0,0,0,0,0,0,0,0,0,6,0, + 0,0,3,0,0,0,243,244,1,0,0,151,0,9,0,116, + 1,0,0,0,0,0,0,0,0,116,3,0,0,0,0,0, + 0,0,0,124,0,171,1,0,0,0,0,0,0,171,1,0, + 0,0,0,0,0,83,0,35,0,116,4,0,0,0,0,0, + 0,0,0,116,6,0,0,0,0,0,0,0,0,102,2,36, + 0,114,3,1,0,89,0,110,4,119,0,120,3,89,0,119, + 1,116,9,0,0,0,0,0,0,0,0,106,10,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, + 0,171,1,0,0,0,0,0,0,125,0,116,13,0,0,0, + 0,0,0,0,0,124,0,171,1,0,0,0,0,0,0,115, + 164,116,15,0,0,0,0,0,0,0,0,124,0,116,16,0, + 0,0,0,0,0,0,0,171,2,0,0,0,0,0,0,114, + 19,100,1,125,1,116,8,0,0,0,0,0,0,0,0,106, + 18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,125,2,110,18,100,2,125,1,116,8,0,0,0, + 0,0,0,0,0,106,20,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,125,2,116,23,0,0,0, + 0,0,0,0,0,124,0,171,1,0,0,0,0,0,0,92, + 3,0,0,125,3,125,4,125,0,124,3,115,2,124,4,114, + 75,9,0,116,25,0,0,0,0,0,0,0,0,116,1,0, + 0,0,0,0,0,0,0,124,3,124,4,122,0,0,0,171, + 1,0,0,0,0,0,0,124,0,171,2,0,0,0,0,0, + 0,125,0,116,3,0,0,0,0,0,0,0,0,124,0,171, + 1,0,0,0,0,0,0,83,0,35,0,116,4,0,0,0, + 0,0,0,0,0,116,6,0,0,0,0,0,0,0,0,102, + 2,36,0,114,21,1,0,124,3,124,1,122,0,0,0,124, + 0,122,0,0,0,125,0,89,0,116,3,0,0,0,0,0, + 0,0,0,124,0,171,1,0,0,0,0,0,0,83,0,119, + 0,120,3,89,0,119,1,116,25,0,0,0,0,0,0,0, + 0,2,0,124,2,171,0,0,0,0,0,0,0,124,0,171, + 2,0,0,0,0,0,0,125,0,116,3,0,0,0,0,0, + 0,0,0,124,0,171,1,0,0,0,0,0,0,83,0,41, + 3,250,38,82,101,116,117,114,110,32,116,104,101,32,97,98, + 115,111,108,117,116,101,32,118,101,114,115,105,111,110,32,111, + 102,32,97,32,112,97,116,104,46,114,83,0,0,0,114,4, + 0,0,0,41,13,114,210,0,0,0,114,32,0,0,0,114, + 146,0,0,0,114,147,0,0,0,114,66,0,0,0,114,67, + 0,0,0,114,11,0,0,0,114,53,0,0,0,114,54,0, + 0,0,218,7,103,101,116,99,119,100,98,218,6,103,101,116, + 99,119,100,114,14,0,0,0,114,12,0,0,0,41,5,114, + 56,0,0,0,114,36,0,0,0,114,214,0,0,0,114,110, + 0,0,0,114,111,0,0,0,115,5,0,0,0,32,32,32, + 32,32,114,57,0,0,0,114,33,0,0,0,114,33,0,0, + 0,69,2,0,0,115,239,0,0,0,128,0,240,4,4,9, + 17,220,19,35,164,72,168,84,163,78,211,19,51,208,12,51, + 248,220,16,23,156,26,208,15,36,242,0,2,9,17,225,12, + 16,240,5,2,9,17,250,244,6,0,16,18,143,121,137,121, + 152,20,139,127,136,4,220,15,20,144,84,140,123,220,15,25, + 152,36,164,5,212,15,38,216,22,27,144,3,220,25,27,159, + 26,153,26,145,6,224,22,26,144,3,220,25,27,159,25,153, + 25,144,6,220,32,41,168,36,163,15,209,12,29,136,69,144, + 52,152,20,225,15,20,153,4,240,2,4,17,46,220,27,31, + 212,32,48,176,21,184,20,177,28,211,32,62,192,4,211,27, + 69,144,68,244,12,0,16,24,152,4,139,126,208,8,29,248, + 244,11,0,25,32,164,26,208,23,44,242,0,2,17,46,224, + 27,32,160,51,153,59,168,20,209,27,45,145,68,244,6,0, + 16,24,152,4,139,126,208,8,29,240,11,2,17,46,250,244, + 8,0,24,28,153,70,155,72,160,100,211,23,43,144,4,220, + 15,23,152,4,139,126,208,8,29,115,30,0,0,0,130,19, + 22,0,150,15,40,3,167,1,40,3,194,20,24,66,55,0, + 194,55,23,67,27,3,195,26,1,67,27,3,99,1,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,0, + 0,243,226,0,0,0,151,0,116,1,0,0,0,0,0,0, + 0,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, + 125,0,116,5,0,0,0,0,0,0,0,0,124,0,171,1, + 0,0,0,0,0,0,115,69,116,7,0,0,0,0,0,0, + 0,0,124,0,116,8,0,0,0,0,0,0,0,0,171,2, + 0,0,0,0,0,0,114,21,116,1,0,0,0,0,0,0, + 0,0,106,10,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,171,0,0,0,0,0,0,0,125,1, + 110,20,116,1,0,0,0,0,0,0,0,0,106,12,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 171,0,0,0,0,0,0,0,125,1,116,15,0,0,0,0, + 0,0,0,0,124,1,124,0,171,2,0,0,0,0,0,0, + 125,0,116,17,0,0,0,0,0,0,0,0,124,0,171,1, + 0,0,0,0,0,0,83,0,41,1,114,212,0,0,0,41, + 9,114,66,0,0,0,114,67,0,0,0,114,11,0,0,0, + 114,53,0,0,0,114,54,0,0,0,114,213,0,0,0,114, + 214,0,0,0,114,12,0,0,0,114,32,0,0,0,41,2, + 114,56,0,0,0,218,3,99,119,100,115,2,0,0,0,32, + 32,114,57,0,0,0,114,33,0,0,0,114,33,0,0,0, + 57,2,0,0,115,75,0,0,0,128,0,228,15,17,143,121, + 137,121,152,20,139,127,136,4,220,15,20,144,84,140,123,220, + 15,25,152,36,164,5,212,15,38,220,22,24,151,106,145,106, + 147,108,145,3,228,22,24,151,105,145,105,147,107,144,3,220, + 19,23,152,3,152,84,147,63,136,68,220,15,23,152,4,139, + 126,208,8,29,114,59,0,0,0,41,2,218,17,95,103,101, + 116,102,105,110,97,108,112,97,116,104,110,97,109,101,218,8, + 114,101,97,100,108,105,110,107,99,1,0,0,0,0,0,0, + 0,0,0,0,0,7,0,0,0,3,0,0,0,243,120,1, + 0,0,151,0,100,1,125,1,116,1,0,0,0,0,0,0, + 0,0,171,0,0,0,0,0,0,0,125,2,116,3,0,0, + 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, + 124,2,118,1,114,111,124,2,106,5,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,116,3,0,0, + 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, + 171,1,0,0,0,0,0,0,1,0,9,0,124,0,125,3, + 116,7,0,0,0,0,0,0,0,0,124,0,171,1,0,0, + 0,0,0,0,125,0,116,9,0,0,0,0,0,0,0,0, + 124,0,171,1,0,0,0,0,0,0,115,46,116,11,0,0, 0,0,0,0,0,0,124,3,171,1,0,0,0,0,0,0, - 1,0,124,7,124,1,106,19,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,8,171,1,0,0, - 0,0,0,0,122,0,0,0,83,0,41,11,122,48,78,111, - 114,109,97,108,105,122,101,32,112,97,116,104,44,32,101,108, - 105,109,105,110,97,116,105,110,103,32,100,111,117,98,108,101, - 32,115,108,97,115,104,101,115,44,32,101,116,99,46,114,83, - 0,0,0,114,84,0,0,0,114,135,0,0,0,243,2,0, - 0,0,46,46,114,4,0,0,0,114,6,0,0,0,114,2, - 0,0,0,114,3,0,0,0,114,8,0,0,0,114,86,0, - 0,0,41,10,114,66,0,0,0,114,67,0,0,0,114,53, - 0,0,0,114,54,0,0,0,114,71,0,0,0,114,14,0, - 0,0,114,15,0,0,0,114,128,0,0,0,218,6,97,112, - 112,101,110,100,114,12,0,0,0,41,10,114,56,0,0,0, - 114,36,0,0,0,114,39,0,0,0,114,34,0,0,0,114, - 35,0,0,0,114,110,0,0,0,114,111,0,0,0,218,6, - 112,114,101,102,105,120,218,5,99,111,109,112,115,114,132,0, - 0,0,115,10,0,0,0,32,32,32,32,32,32,32,32,32, - 32,114,57,0,0,0,114,32,0,0,0,114,32,0,0,0, - 15,2,0,0,115,51,1,0,0,128,0,228,15,17,143,121, - 137,121,152,20,139,127,136,4,220,11,21,144,100,156,69,212, - 11,34,216,18,23,136,67,216,21,25,136,70,216,21,25,136, - 70,216,21,26,137,70,224,18,22,136,67,216,21,24,136,70, - 216,21,24,136,70,216,21,25,136,70,216,15,19,143,124,137, - 124,152,70,160,67,211,15,40,136,4,220,28,37,160,100,155, - 79,209,8,25,136,5,136,116,144,84,216,17,22,152,20,145, - 28,136,6,216,16,20,151,10,145,10,152,51,147,15,136,5, - 216,12,13,136,1,216,14,15,148,35,144,101,147,42,138,110, - 216,19,24,152,17,146,56,152,117,160,81,153,120,168,54,210, - 31,49,216,20,25,152,33,145,72,216,17,22,144,113,145,24, - 152,86,210,17,35,216,19,20,144,113,146,53,152,85,160,49, - 160,81,161,51,153,90,168,54,210,29,49,216,24,29,152,97, - 160,1,153,99,160,33,160,65,161,35,152,103,152,14,216,20, - 21,152,17,145,70,145,65,216,21,22,152,33,146,86,161,4, - 216,24,29,152,97,153,8,224,20,21,152,17,145,70,145,65, - 224,16,17,144,81,145,6,144,1,240,25,0,15,16,148,35, - 144,101,147,42,139,110,241,28,0,16,22,153,101,216,12,17, - 143,76,137,76,152,22,212,12,32,216,15,21,152,3,159,8, - 153,8,160,21,155,15,209,15,39,208,8,39,114,59,0,0, - 0,99,1,0,0,0,0,0,0,0,0,0,0,0,4,0, - 0,0,3,0,0,0,243,226,0,0,0,151,0,116,1,0, - 0,0,0,0,0,0,0,106,2,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,0,171,1,0, - 0,0,0,0,0,125,0,116,5,0,0,0,0,0,0,0, - 0,124,0,171,1,0,0,0,0,0,0,115,69,116,7,0, - 0,0,0,0,0,0,0,124,0,116,8,0,0,0,0,0, - 0,0,0,171,2,0,0,0,0,0,0,114,21,116,1,0, - 0,0,0,0,0,0,0,106,10,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,171,0,0,0,0, - 0,0,0,125,1,110,20,116,1,0,0,0,0,0,0,0, - 0,106,12,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,171,0,0,0,0,0,0,0,125,1,116, - 15,0,0,0,0,0,0,0,0,124,1,124,0,171,2,0, - 0,0,0,0,0,125,0,116,17,0,0,0,0,0,0,0, - 0,124,0,171,1,0,0,0,0,0,0,83,0,41,1,122, - 164,82,101,116,117,114,110,32,116,104,101,32,97,98,115,111, - 108,117,116,101,32,118,101,114,115,105,111,110,32,111,102,32, - 97,32,112,97,116,104,32,97,115,32,97,32,102,97,108,108, - 98,97,99,107,32,102,117,110,99,116,105,111,110,32,105,110, - 32,99,97,115,101,10,32,32,32,32,96,110,116,46,95,103, - 101,116,102,117,108,108,112,97,116,104,110,97,109,101,96,32, - 105,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101, - 32,111,114,32,114,97,105,115,101,115,32,79,83,69,114,114, - 111,114,46,32,83,101,101,32,98,112,111,45,51,49,48,52, - 55,32,102,111,114,10,32,32,32,32,109,111,114,101,46,10, - 10,32,32,32,32,41,9,114,66,0,0,0,114,67,0,0, - 0,114,11,0,0,0,114,53,0,0,0,114,54,0,0,0, - 218,7,103,101,116,99,119,100,98,218,6,103,101,116,99,119, - 100,114,12,0,0,0,114,32,0,0,0,41,2,114,56,0, - 0,0,218,3,99,119,100,115,2,0,0,0,32,32,114,57, - 0,0,0,218,17,95,97,98,115,112,97,116,104,95,102,97, - 108,108,98,97,99,107,114,214,0,0,0,52,2,0,0,115, - 77,0,0,0,128,0,244,14,0,12,14,143,57,137,57,144, - 84,139,63,128,68,220,11,16,144,20,140,59,220,11,21,144, - 100,156,69,212,11,34,220,18,20,151,42,145,42,147,44,137, - 67,228,18,20,151,41,145,41,147,43,136,67,220,15,19,144, - 67,152,20,139,127,136,4,220,11,19,144,68,139,62,208,4, - 25,114,59,0,0,0,41,1,218,16,95,103,101,116,102,117, - 108,108,112,97,116,104,110,97,109,101,99,1,0,0,0,0, - 0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,243, - 108,0,0,0,151,0,9,0,116,1,0,0,0,0,0,0, - 0,0,116,3,0,0,0,0,0,0,0,0,124,0,171,1, - 0,0,0,0,0,0,171,1,0,0,0,0,0,0,83,0, - 35,0,116,4,0,0,0,0,0,0,0,0,116,6,0,0, - 0,0,0,0,0,0,102,2,36,0,114,14,1,0,116,9, + 115,5,124,3,125,0,9,0,124,0,83,0,116,13,0,0, + 0,0,0,0,0,0,116,15,0,0,0,0,0,0,0,0, + 116,17,0,0,0,0,0,0,0,0,124,3,171,1,0,0, + 0,0,0,0,124,0,171,2,0,0,0,0,0,0,171,1, + 0,0,0,0,0,0,125,0,116,3,0,0,0,0,0,0, + 0,0,124,0,171,1,0,0,0,0,0,0,124,2,118,1, + 114,1,140,111,124,0,83,0,35,0,116,18,0,0,0,0, + 0,0,0,0,36,0,114,26,125,4,124,4,106,20,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 124,1,118,0,114,6,89,0,100,0,125,4,126,4,124,0, + 83,0,130,0,100,0,125,4,126,4,119,1,116,22,0,0, + 0,0,0,0,0,0,36,0,114,4,1,0,89,0,124,0, + 83,0,119,0,120,3,89,0,119,1,41,2,78,41,12,114, + 86,0,0,0,114,117,0,0,0,114,85,0,0,0,233,5, + 0,0,0,233,21,0,0,0,233,32,0,0,0,233,50,0, + 0,0,233,67,0,0,0,233,87,0,0,0,105,38,17,0, + 0,105,40,17,0,0,105,41,17,0,0,41,12,218,3,115, + 101,116,114,10,0,0,0,218,3,97,100,100,218,12,95,110, + 116,95,114,101,97,100,108,105,110,107,114,11,0,0,0,114, + 24,0,0,0,114,32,0,0,0,114,12,0,0,0,114,18, + 0,0,0,114,146,0,0,0,218,8,119,105,110,101,114,114, + 111,114,114,147,0,0,0,41,5,114,56,0,0,0,218,16, + 97,108,108,111,119,101,100,95,119,105,110,101,114,114,111,114, + 218,4,115,101,101,110,218,8,111,108,100,95,112,97,116,104, + 218,2,101,120,115,5,0,0,0,32,32,32,32,32,114,57, + 0,0,0,218,14,95,114,101,97,100,108,105,110,107,95,100, + 101,101,112,114,234,0,0,0,102,2,0,0,115,207,0,0, + 0,128,0,240,30,0,28,76,1,208,8,24,228,15,18,139, + 117,136,4,220,14,22,144,116,139,110,160,68,209,14,40,216, + 12,16,143,72,137,72,148,88,152,100,147,94,212,12,36,240, + 2,19,13,22,216,27,31,144,8,220,23,35,160,68,211,23, + 41,144,4,244,6,0,24,29,152,84,148,123,244,8,0,28, + 34,160,40,212,27,43,216,31,39,152,4,216,24,29,240,18, + 0,16,20,136,11,244,17,0,28,36,164,68,172,23,176,24, + 211,41,58,184,68,211,36,65,211,27,66,144,68,244,29,0, + 15,23,144,116,139,110,160,68,210,14,40,240,44,0,16,20, + 136,11,248,244,15,0,20,27,242,0,3,13,22,216,19,21, + 151,59,145,59,208,34,50,209,19,50,219,20,25,240,10,0, + 16,20,136,11,240,9,0,17,22,251,220,19,29,242,0,2, + 13,22,224,16,21,216,15,19,136,11,240,7,2,13,22,250, + 115,41,0,0,0,181,37,66,11,0,193,29,30,66,11,0, + 194,11,9,66,57,3,194,20,14,66,41,3,194,40,1,66, + 41,3,194,41,12,66,57,3,194,56,1,66,57,3,99,1, + 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,3, + 0,0,0,243,102,1,0,0,151,0,100,1,125,1,124,0, + 100,0,100,2,26,0,125,2,124,0,114,28,9,0,116,1, 0,0,0,0,0,0,0,0,124,0,171,1,0,0,0,0, - 0,0,99,2,89,0,83,0,119,0,120,3,89,0,119,1, - 41,1,122,38,82,101,116,117,114,110,32,116,104,101,32,97, - 98,115,111,108,117,116,101,32,118,101,114,115,105,111,110,32, - 111,102,32,97,32,112,97,116,104,46,41,5,114,215,0,0, - 0,114,32,0,0,0,114,146,0,0,0,114,147,0,0,0, - 114,214,0,0,0,114,55,0,0,0,115,1,0,0,0,32, - 114,57,0,0,0,114,33,0,0,0,114,33,0,0,0,76, - 2,0,0,115,53,0,0,0,128,0,240,4,3,9,43,220, - 19,35,164,72,168,84,163,78,211,19,51,208,12,51,248,220, - 16,23,156,26,208,15,36,242,0,1,9,43,220,19,36,160, - 84,211,19,42,210,12,42,240,3,1,9,43,250,115,12,0, - 0,0,130,19,22,0,150,26,51,3,178,1,51,3,41,2, - 218,17,95,103,101,116,102,105,110,97,108,112,97,116,104,110, - 97,109,101,218,8,114,101,97,100,108,105,110,107,99,1,0, - 0,0,0,0,0,0,0,0,0,0,7,0,0,0,3,0, - 0,0,243,120,1,0,0,151,0,100,1,125,1,116,1,0, - 0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,125, - 2,116,3,0,0,0,0,0,0,0,0,124,0,171,1,0, - 0,0,0,0,0,124,2,118,1,114,111,124,2,106,5,0, + 0,0,125,0,124,2,114,12,116,3,0,0,0,0,0,0, + 0,0,124,0,124,2,171,2,0,0,0,0,0,0,83,0, + 124,0,83,0,124,2,83,0,35,0,116,4,0,0,0,0, + 0,0,0,0,36,0,114,123,125,3,124,3,106,6,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,116,3,0,0,0,0,0,0,0,0,124,0,171,1,0, - 0,0,0,0,0,171,1,0,0,0,0,0,0,1,0,9, - 0,124,0,125,3,116,7,0,0,0,0,0,0,0,0,124, - 0,171,1,0,0,0,0,0,0,125,0,116,9,0,0,0, - 0,0,0,0,0,124,0,171,1,0,0,0,0,0,0,115, - 46,116,11,0,0,0,0,0,0,0,0,124,3,171,1,0, - 0,0,0,0,0,115,5,124,3,125,0,9,0,124,0,83, - 0,116,13,0,0,0,0,0,0,0,0,116,15,0,0,0, - 0,0,0,0,0,116,17,0,0,0,0,0,0,0,0,124, - 3,171,1,0,0,0,0,0,0,124,0,171,2,0,0,0, - 0,0,0,171,1,0,0,0,0,0,0,125,0,116,3,0, - 0,0,0,0,0,0,0,124,0,171,1,0,0,0,0,0, - 0,124,2,118,1,114,1,140,111,124,0,83,0,35,0,116, - 18,0,0,0,0,0,0,0,0,36,0,114,26,125,4,124, - 4,106,20,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,124,1,118,0,114,6,89,0,100,0,125, - 4,126,4,124,0,83,0,130,0,100,0,125,4,126,4,119, - 1,116,22,0,0,0,0,0,0,0,0,36,0,114,4,1, - 0,89,0,124,0,83,0,119,0,120,3,89,0,119,1,41, - 2,78,41,12,114,86,0,0,0,114,117,0,0,0,114,85, - 0,0,0,233,5,0,0,0,233,21,0,0,0,233,32,0, - 0,0,233,50,0,0,0,233,67,0,0,0,233,87,0,0, - 0,105,38,17,0,0,105,40,17,0,0,105,41,17,0,0, - 41,12,218,3,115,101,116,114,10,0,0,0,218,3,97,100, - 100,218,12,95,110,116,95,114,101,97,100,108,105,110,107,114, - 11,0,0,0,114,24,0,0,0,114,32,0,0,0,114,12, - 0,0,0,114,18,0,0,0,114,146,0,0,0,218,8,119, - 105,110,101,114,114,111,114,114,147,0,0,0,41,5,114,56, - 0,0,0,218,16,97,108,108,111,119,101,100,95,119,105,110, - 101,114,114,111,114,218,4,115,101,101,110,218,8,111,108,100, - 95,112,97,116,104,218,2,101,120,115,5,0,0,0,32,32, - 32,32,32,114,57,0,0,0,218,14,95,114,101,97,100,108, - 105,110,107,95,100,101,101,112,114,234,0,0,0,89,2,0, - 0,115,207,0,0,0,128,0,240,30,0,28,76,1,208,8, - 24,228,15,18,139,117,136,4,220,14,22,144,116,139,110,160, - 68,209,14,40,216,12,16,143,72,137,72,148,88,152,100,147, - 94,212,12,36,240,2,19,13,22,216,27,31,144,8,220,23, - 35,160,68,211,23,41,144,4,244,6,0,24,29,152,84,148, - 123,244,8,0,28,34,160,40,212,27,43,216,31,39,152,4, - 216,24,29,240,18,0,16,20,136,11,244,17,0,28,36,164, - 68,172,23,176,24,211,41,58,184,68,211,36,65,211,27,66, - 144,68,244,29,0,15,23,144,116,139,110,160,68,210,14,40, - 240,44,0,16,20,136,11,248,244,15,0,20,27,242,0,3, - 13,22,216,19,21,151,59,145,59,208,34,50,209,19,50,219, - 20,25,240,10,0,16,20,136,11,240,9,0,17,22,251,220, - 19,29,242,0,2,13,22,224,16,21,216,15,19,136,11,240, - 7,2,13,22,250,115,41,0,0,0,181,37,66,11,0,193, - 29,30,66,11,0,194,11,9,66,57,3,194,20,14,66,41, - 3,194,40,1,66,41,3,194,41,12,66,57,3,194,56,1, - 66,57,3,99,1,0,0,0,0,0,0,0,0,0,0,0, - 5,0,0,0,3,0,0,0,243,102,1,0,0,151,0,100, - 1,125,1,124,0,100,0,100,2,26,0,125,2,124,0,114, - 28,9,0,116,1,0,0,0,0,0,0,0,0,124,0,171, - 1,0,0,0,0,0,0,125,0,124,2,114,12,116,3,0, - 0,0,0,0,0,0,0,124,0,124,2,171,2,0,0,0, - 0,0,0,83,0,124,0,83,0,124,2,83,0,35,0,116, - 4,0,0,0,0,0,0,0,0,36,0,114,123,125,3,124, - 3,106,6,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,124,1,118,1,114,1,130,0,9,0,116, - 9,0,0,0,0,0,0,0,0,124,0,171,1,0,0,0, - 0,0,0,125,4,124,4,124,0,107,55,0,0,114,21,124, - 2,114,12,116,3,0,0,0,0,0,0,0,0,124,4,124, - 2,171,2,0,0,0,0,0,0,110,1,124,4,99,2,89, - 0,100,0,125,3,126,3,83,0,110,15,35,0,116,4,0, - 0,0,0,0,0,0,0,36,0,114,3,1,0,89,0,110, - 4,119,0,120,3,89,0,119,1,116,11,0,0,0,0,0, - 0,0,0,124,0,171,1,0,0,0,0,0,0,92,2,0, - 0,125,0,125,5,124,0,114,12,124,5,115,10,124,0,124, - 2,122,0,0,0,99,2,89,0,100,0,125,3,126,3,83, - 0,124,2,114,12,116,3,0,0,0,0,0,0,0,0,124, - 5,124,2,171,2,0,0,0,0,0,0,110,1,124,5,125, - 2,89,0,100,0,125,3,126,3,110,8,100,0,125,3,126, - 3,119,1,119,0,120,3,89,0,119,1,124,0,114,1,140, - 168,140,141,41,3,78,41,15,114,86,0,0,0,114,117,0, - 0,0,114,85,0,0,0,114,220,0,0,0,114,221,0,0, - 0,114,222,0,0,0,114,223,0,0,0,233,53,0,0,0, - 233,65,0,0,0,114,224,0,0,0,114,225,0,0,0,233, - 123,0,0,0,233,161,0,0,0,105,128,7,0,0,105,129, - 7,0,0,114,8,0,0,0,41,6,114,217,0,0,0,114, - 12,0,0,0,114,146,0,0,0,114,229,0,0,0,114,234, - 0,0,0,114,15,0,0,0,41,6,114,56,0,0,0,114, - 230,0,0,0,114,112,0,0,0,114,233,0,0,0,218,8, - 110,101,119,95,112,97,116,104,218,4,110,97,109,101,115,6, - 0,0,0,32,32,32,32,32,32,114,57,0,0,0,218,27, - 95,103,101,116,102,105,110,97,108,112,97,116,104,110,97,109, - 101,95,110,111,110,115,116,114,105,99,116,114,242,0,0,0, - 131,2,0,0,115,222,0,0,0,128,0,240,36,0,28,88, - 1,208,8,24,240,8,0,16,20,144,66,144,81,136,120,136, - 4,217,14,18,240,2,22,13,58,220,23,40,168,20,211,23, - 46,144,4,217,43,47,148,116,152,68,160,36,211,23,39,208, - 16,57,176,84,208,16,57,240,42,0,16,20,136,11,248,244, - 41,0,20,27,242,0,19,13,58,216,19,21,151,59,145,59, - 208,38,54,209,19,54,216,20,25,240,2,9,17,25,244,8, - 0,32,46,168,100,211,31,51,144,72,216,23,31,160,52,210, - 23,39,217,55,59,156,116,160,72,168,100,212,31,51,192,24, - 213,24,73,240,3,0,24,40,248,228,23,30,242,0,2,17, - 25,225,20,24,240,5,2,17,25,250,244,6,0,30,35,160, - 52,155,91,145,10,144,4,144,100,241,8,0,20,24,161,4, - 216,27,31,160,36,153,59,213,20,38,217,43,47,148,116,152, - 68,160,36,212,23,39,176,84,149,4,251,240,39,19,13,58, - 250,242,9,0,15,19,248,115,78,0,0,0,139,24,40,0, - 164,1,40,0,168,9,66,44,3,177,15,66,39,3,193,1, - 31,65,39,2,193,32,1,66,44,3,193,38,1,66,39,3, - 193,39,9,65,51,5,193,48,2,66,39,3,193,50,1,65, - 51,5,193,51,25,66,39,3,194,12,1,66,44,3,194,18, - 16,66,39,3,194,39,5,66,44,3,70,41,1,218,6,115, - 116,114,105,99,116,99,1,0,0,0,0,0,0,0,1,0, - 0,0,6,0,0,0,3,0,0,0,243,146,3,0,0,151, - 0,116,1,0,0,0,0,0,0,0,0,124,0,171,1,0, - 0,0,0,0,0,125,0,116,3,0,0,0,0,0,0,0, - 0,124,0,116,4,0,0,0,0,0,0,0,0,171,2,0, - 0,0,0,0,0,114,73,100,1,125,2,100,2,125,3,100, - 3,125,4,116,7,0,0,0,0,0,0,0,0,106,8,0, + 124,1,118,1,114,1,130,0,9,0,116,9,0,0,0,0, + 0,0,0,0,124,0,171,1,0,0,0,0,0,0,125,4, + 124,4,124,0,107,55,0,0,114,21,124,2,114,12,116,3, + 0,0,0,0,0,0,0,0,124,4,124,2,171,2,0,0, + 0,0,0,0,110,1,124,4,99,2,89,0,100,0,125,3, + 126,3,83,0,110,15,35,0,116,4,0,0,0,0,0,0, + 0,0,36,0,114,3,1,0,89,0,110,4,119,0,120,3, + 89,0,119,1,116,11,0,0,0,0,0,0,0,0,124,0, + 171,1,0,0,0,0,0,0,92,2,0,0,125,0,125,5, + 124,0,114,12,124,5,115,10,124,0,124,2,122,0,0,0, + 99,2,89,0,100,0,125,3,126,3,83,0,124,2,114,12, + 116,3,0,0,0,0,0,0,0,0,124,5,124,2,171,2, + 0,0,0,0,0,0,110,1,124,5,125,2,89,0,100,0, + 125,3,126,3,110,8,100,0,125,3,126,3,119,1,119,0, + 120,3,89,0,119,1,124,0,114,1,140,168,140,141,41,3, + 78,41,15,114,86,0,0,0,114,117,0,0,0,114,85,0, + 0,0,114,220,0,0,0,114,221,0,0,0,114,222,0,0, + 0,114,223,0,0,0,233,53,0,0,0,233,65,0,0,0, + 114,224,0,0,0,114,225,0,0,0,233,123,0,0,0,233, + 161,0,0,0,105,128,7,0,0,105,129,7,0,0,114,8, + 0,0,0,41,6,114,217,0,0,0,114,12,0,0,0,114, + 146,0,0,0,114,229,0,0,0,114,234,0,0,0,114,15, + 0,0,0,41,6,114,56,0,0,0,114,230,0,0,0,114, + 112,0,0,0,114,233,0,0,0,218,8,110,101,119,95,112, + 97,116,104,218,4,110,97,109,101,115,6,0,0,0,32,32, + 32,32,32,32,114,57,0,0,0,218,27,95,103,101,116,102, + 105,110,97,108,112,97,116,104,110,97,109,101,95,110,111,110, + 115,116,114,105,99,116,114,242,0,0,0,144,2,0,0,115, + 222,0,0,0,128,0,240,36,0,28,88,1,208,8,24,240, + 8,0,16,20,144,66,144,81,136,120,136,4,217,14,18,240, + 2,22,13,58,220,23,40,168,20,211,23,46,144,4,217,43, + 47,148,116,152,68,160,36,211,23,39,208,16,57,176,84,208, + 16,57,240,42,0,16,20,136,11,248,244,41,0,20,27,242, + 0,19,13,58,216,19,21,151,59,145,59,208,38,54,209,19, + 54,216,20,25,240,2,9,17,25,244,8,0,32,46,168,100, + 211,31,51,144,72,216,23,31,160,52,210,23,39,217,55,59, + 156,116,160,72,168,100,212,31,51,192,24,213,24,73,240,3, + 0,24,40,248,228,23,30,242,0,2,17,25,225,20,24,240, + 5,2,17,25,250,244,6,0,30,35,160,52,155,91,145,10, + 144,4,144,100,241,8,0,20,24,161,4,216,27,31,160,36, + 153,59,213,20,38,217,43,47,148,116,152,68,160,36,212,23, + 39,176,84,149,4,251,240,39,19,13,58,250,242,9,0,15, + 19,248,115,78,0,0,0,139,24,40,0,164,1,40,0,168, + 9,66,44,3,177,15,66,39,3,193,1,31,65,39,2,193, + 32,1,66,44,3,193,38,1,66,39,3,193,39,9,65,51, + 5,193,48,2,66,39,3,193,50,1,65,51,5,193,51,25, + 66,39,3,194,12,1,66,44,3,194,18,16,66,39,3,194, + 39,5,66,44,3,70,41,1,218,6,115,116,114,105,99,116, + 99,1,0,0,0,0,0,0,0,1,0,0,0,6,0,0, + 0,3,0,0,0,243,146,3,0,0,151,0,116,1,0,0, + 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, + 125,0,116,3,0,0,0,0,0,0,0,0,124,0,116,4, + 0,0,0,0,0,0,0,0,171,2,0,0,0,0,0,0, + 114,73,100,1,125,2,100,2,125,3,100,3,125,4,116,7, + 0,0,0,0,0,0,0,0,106,8,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,171,0,0,0, + 0,0,0,0,125,5,116,11,0,0,0,0,0,0,0,0, + 124,0,171,1,0,0,0,0,0,0,116,11,0,0,0,0, + 0,0,0,0,116,7,0,0,0,0,0,0,0,0,106,12, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,171,0,0,0,0,0,0,0,125,5,116,11,0,0,0, - 0,0,0,0,0,124,0,171,1,0,0,0,0,0,0,116, - 11,0,0,0,0,0,0,0,0,116,7,0,0,0,0,0, - 0,0,0,106,12,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,116,14,0,0,0,0,0,0,0, - 0,171,1,0,0,0,0,0,0,171,1,0,0,0,0,0, - 0,107,40,0,0,114,55,121,4,100,5,125,2,100,6,125, - 3,100,7,125,4,116,7,0,0,0,0,0,0,0,0,106, - 16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,171,0,0,0,0,0,0,0,125,5,116,11,0, - 0,0,0,0,0,0,0,124,0,171,1,0,0,0,0,0, - 0,116,11,0,0,0,0,0,0,0,0,116,14,0,0,0, - 0,0,0,0,0,171,1,0,0,0,0,0,0,107,40,0, - 0,114,1,121,8,124,0,106,19,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,2,171,1,0, - 0,0,0,0,0,125,6,124,6,115,23,116,21,0,0,0, - 0,0,0,0,0,124,0,171,1,0,0,0,0,0,0,115, - 12,116,23,0,0,0,0,0,0,0,0,124,5,124,0,171, - 2,0,0,0,0,0,0,125,0,9,0,116,25,0,0,0, - 0,0,0,0,0,124,0,171,1,0,0,0,0,0,0,125, - 0,100,9,125,7,124,6,115,85,124,0,106,19,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 2,171,1,0,0,0,0,0,0,114,68,124,0,106,19,0, + 0,0,116,14,0,0,0,0,0,0,0,0,171,1,0,0, + 0,0,0,0,171,1,0,0,0,0,0,0,107,40,0,0, + 114,55,121,4,100,5,125,2,100,6,125,3,100,7,125,4, + 116,7,0,0,0,0,0,0,0,0,106,16,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,0, + 0,0,0,0,0,0,125,5,116,11,0,0,0,0,0,0, + 0,0,124,0,171,1,0,0,0,0,0,0,116,11,0,0, + 0,0,0,0,0,0,116,14,0,0,0,0,0,0,0,0, + 171,1,0,0,0,0,0,0,107,40,0,0,114,1,121,8, + 124,0,106,19,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,2,171,1,0,0,0,0,0,0, + 125,6,124,6,115,23,116,21,0,0,0,0,0,0,0,0, + 124,0,171,1,0,0,0,0,0,0,115,12,116,23,0,0, + 0,0,0,0,0,0,124,5,124,0,171,2,0,0,0,0, + 0,0,125,0,9,0,116,25,0,0,0,0,0,0,0,0, + 124,0,171,1,0,0,0,0,0,0,125,0,100,9,125,7, + 124,6,115,85,124,0,106,19,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,2,171,1,0,0, + 0,0,0,0,114,68,124,0,106,19,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,124,3,171,1, + 0,0,0,0,0,0,114,18,124,4,124,0,116,37,0,0, + 0,0,0,0,0,0,124,3,171,1,0,0,0,0,0,0, + 100,0,26,0,122,0,0,0,125,9,110,14,124,0,116,37, + 0,0,0,0,0,0,0,0,124,2,171,1,0,0,0,0, + 0,0,100,0,26,0,125,9,9,0,116,25,0,0,0,0, + 0,0,0,0,124,9,171,1,0,0,0,0,0,0,124,0, + 107,40,0,0,114,2,124,9,125,0,124,0,83,0,124,0, + 83,0,35,0,116,26,0,0,0,0,0,0,0,0,36,0, + 114,44,125,8,124,1,114,21,116,29,0,0,0,0,0,0, + 0,0,116,31,0,0,0,0,0,0,0,0,124,8,171,1, + 0,0,0,0,0,0,171,1,0,0,0,0,0,0,100,0, + 130,2,116,1,0,0,0,0,0,0,0,0,124,0,171,1, + 0,0,0,0,0,0,125,0,89,0,100,0,125,8,126,8, + 140,137,100,0,125,8,126,8,119,1,116,28,0,0,0,0, + 0,0,0,0,36,0,114,36,125,8,124,1,114,1,130,0, + 124,8,106,32,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,125,7,116,35,0,0,0,0,0,0, + 0,0,124,0,171,1,0,0,0,0,0,0,125,0,89,0, + 100,0,125,8,126,8,140,180,100,0,125,8,126,8,119,1, + 119,0,120,3,89,0,119,1,35,0,116,26,0,0,0,0, + 0,0,0,0,36,0,114,11,125,8,89,0,100,0,125,8, + 126,8,124,0,83,0,100,0,125,8,126,8,119,1,116,28, + 0,0,0,0,0,0,0,0,36,0,114,28,125,8,124,8, + 106,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,127,7,107,40,0,0,114,2,124,9,125,0, + 89,0,100,0,125,8,126,8,124,0,83,0,100,0,125,8, + 126,8,119,1,119,0,120,3,89,0,119,1,41,10,78,115, + 4,0,0,0,92,92,63,92,114,114,0,0,0,115,2,0, + 0,0,92,92,115,7,0,0,0,92,92,46,92,78,85,76, + 122,4,92,92,63,92,114,115,0,0,0,122,2,92,92,122, + 7,92,92,46,92,78,85,76,114,8,0,0,0,41,19,114, + 32,0,0,0,114,53,0,0,0,114,54,0,0,0,114,66, + 0,0,0,114,213,0,0,0,114,10,0,0,0,114,79,0, + 0,0,114,41,0,0,0,114,214,0,0,0,114,87,0,0, + 0,114,11,0,0,0,114,12,0,0,0,114,217,0,0,0, + 114,147,0,0,0,114,146,0,0,0,218,3,115,116,114,114, + 229,0,0,0,114,242,0,0,0,114,128,0,0,0,41,10, + 114,56,0,0,0,114,243,0,0,0,114,208,0,0,0,114, + 121,0,0,0,218,14,110,101,119,95,117,110,99,95,112,114, + 101,102,105,120,114,216,0,0,0,218,10,104,97,100,95,112, + 114,101,102,105,120,218,16,105,110,105,116,105,97,108,95,119, + 105,110,101,114,114,111,114,114,233,0,0,0,218,5,115,112, + 97,116,104,115,10,0,0,0,32,32,32,32,32,32,32,32, + 32,32,114,57,0,0,0,114,42,0,0,0,114,42,0,0, + 0,193,2,0,0,115,174,1,0,0,128,0,220,15,23,152, + 4,139,126,136,4,220,11,21,144,100,156,69,212,11,34,216, + 21,31,136,70,216,25,40,136,74,216,29,36,136,78,220,18, + 20,151,42,145,42,147,44,136,67,228,15,23,152,4,139,126, + 164,24,172,34,175,43,169,43,180,103,211,42,62,211,33,63, + 210,15,63,216,23,36,224,21,30,136,70,216,25,39,136,74, + 216,29,35,136,78,220,18,20,151,41,145,41,147,43,136,67, + 228,15,23,152,4,139,126,164,24,172,39,211,33,50,210,15, + 50,216,23,35,216,21,25,151,95,145,95,160,86,211,21,44, + 136,10,217,15,25,164,37,168,4,164,43,220,19,23,152,3, + 152,84,147,63,136,68,240,2,15,9,53,220,19,36,160,84, + 211,19,42,136,68,216,31,32,208,12,28,241,34,0,16,26, + 152,100,159,111,153,111,168,102,212,30,53,240,6,0,16,20, + 143,127,137,127,152,122,212,15,42,216,24,38,168,20,172,99, + 176,42,171,111,208,46,62,208,41,63,209,24,63,145,5,224, + 24,28,156,83,160,22,155,91,152,92,208,24,42,144,5,240, + 4,11,13,33,220,19,36,160,85,211,19,43,168,116,210,19, + 51,216,27,32,144,68,240,20,0,16,20,136,11,136,116,136, + 11,248,244,73,1,0,16,26,242,0,7,9,34,241,10,0, + 16,22,220,22,29,156,99,160,34,155,103,211,22,38,168,68, + 208,16,48,220,19,27,152,68,147,62,141,68,251,220,15,22, + 242,0,4,9,53,217,15,21,216,16,21,216,31,33,159,123, + 153,123,208,12,28,220,19,46,168,116,211,19,52,141,68,251, + 240,9,4,9,53,251,244,38,0,20,30,242,0,3,13,21, + 243,6,0,17,21,240,12,0,16,20,136,11,251,244,11,0, + 20,27,242,0,4,13,33,240,6,0,20,22,151,59,145,59, + 208,34,50,210,19,50,216,27,32,144,68,251,216,15,19,136, + 11,251,240,11,4,13,33,250,115,66,0,0,0,195,6,13, + 68,44,0,196,24,16,70,15,0,196,44,9,70,12,3,196, + 53,34,69,28,3,197,28,12,70,12,3,197,40,26,70,7, + 3,198,7,5,70,12,3,198,15,9,71,6,3,198,30,12, + 71,6,3,198,42,17,71,1,3,199,1,5,71,6,3,84, + 99,2,0,0,0,0,0,0,0,0,0,0,0,7,0,0, + 0,3,0,0,0,243,76,3,0,0,151,0,116,1,0,0, + 0,0,0,0,0,0,106,2,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,0,171,1,0,0, + 0,0,0,0,125,0,116,5,0,0,0,0,0,0,0,0, + 124,0,116,6,0,0,0,0,0,0,0,0,171,2,0,0, + 0,0,0,0,114,7,100,1,125,2,100,2,125,3,100,3, + 125,4,110,6,100,4,125,2,100,5,125,3,100,6,125,4, + 124,1,128,2,124,3,125,1,124,0,115,11,116,9,0,0, + 0,0,0,0,0,0,100,8,171,1,0,0,0,0,0,0, + 130,1,116,1,0,0,0,0,0,0,0,0,106,2,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,3,171,1,0,0,0,0,0,0,114,18,124,4,124, - 0,116,37,0,0,0,0,0,0,0,0,124,3,171,1,0, - 0,0,0,0,0,100,0,26,0,122,0,0,0,125,9,110, - 14,124,0,116,37,0,0,0,0,0,0,0,0,124,2,171, - 1,0,0,0,0,0,0,100,0,26,0,125,9,9,0,116, - 25,0,0,0,0,0,0,0,0,124,9,171,1,0,0,0, - 0,0,0,124,0,107,40,0,0,114,2,124,9,125,0,124, - 0,83,0,124,0,83,0,35,0,116,26,0,0,0,0,0, - 0,0,0,36,0,114,44,125,8,124,1,114,21,116,29,0, - 0,0,0,0,0,0,0,116,31,0,0,0,0,0,0,0, - 0,124,8,171,1,0,0,0,0,0,0,171,1,0,0,0, - 0,0,0,100,0,130,2,116,1,0,0,0,0,0,0,0, - 0,124,0,171,1,0,0,0,0,0,0,125,0,89,0,100, - 0,125,8,126,8,140,137,100,0,125,8,126,8,119,1,116, - 28,0,0,0,0,0,0,0,0,36,0,114,36,125,8,124, - 1,114,1,130,0,124,8,106,32,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,125,7,116,35,0, - 0,0,0,0,0,0,0,124,0,171,1,0,0,0,0,0, - 0,125,0,89,0,100,0,125,8,126,8,140,180,100,0,125, - 8,126,8,119,1,119,0,120,3,89,0,119,1,35,0,116, - 26,0,0,0,0,0,0,0,0,36,0,114,11,125,8,89, - 0,100,0,125,8,126,8,124,0,83,0,100,0,125,8,126, - 8,119,1,116,28,0,0,0,0,0,0,0,0,36,0,114, - 28,125,8,124,8,106,32,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,127,7,107,40,0,0,114, - 2,124,9,125,0,89,0,100,0,125,8,126,8,124,0,83, - 0,100,0,125,8,126,8,119,1,119,0,120,3,89,0,119, - 1,41,10,78,115,4,0,0,0,92,92,63,92,114,114,0, - 0,0,115,2,0,0,0,92,92,115,7,0,0,0,92,92, - 46,92,78,85,76,122,4,92,92,63,92,114,115,0,0,0, - 122,2,92,92,122,7,92,92,46,92,78,85,76,114,8,0, - 0,0,41,19,114,32,0,0,0,114,53,0,0,0,114,54, - 0,0,0,114,66,0,0,0,114,211,0,0,0,114,10,0, - 0,0,114,79,0,0,0,114,41,0,0,0,114,212,0,0, - 0,114,87,0,0,0,114,11,0,0,0,114,12,0,0,0, - 114,217,0,0,0,114,147,0,0,0,114,146,0,0,0,218, - 3,115,116,114,114,229,0,0,0,114,242,0,0,0,114,128, - 0,0,0,41,10,114,56,0,0,0,114,243,0,0,0,114, - 208,0,0,0,114,121,0,0,0,218,14,110,101,119,95,117, - 110,99,95,112,114,101,102,105,120,114,213,0,0,0,218,10, - 104,97,100,95,112,114,101,102,105,120,218,16,105,110,105,116, - 105,97,108,95,119,105,110,101,114,114,111,114,114,233,0,0, - 0,218,5,115,112,97,116,104,115,10,0,0,0,32,32,32, - 32,32,32,32,32,32,32,114,57,0,0,0,114,42,0,0, - 0,114,42,0,0,0,180,2,0,0,115,174,1,0,0,128, - 0,220,15,23,152,4,139,126,136,4,220,11,21,144,100,156, - 69,212,11,34,216,21,31,136,70,216,25,40,136,74,216,29, - 36,136,78,220,18,20,151,42,145,42,147,44,136,67,228,15, - 23,152,4,139,126,164,24,172,34,175,43,169,43,180,103,211, - 42,62,211,33,63,210,15,63,216,23,36,224,21,30,136,70, - 216,25,39,136,74,216,29,35,136,78,220,18,20,151,41,145, - 41,147,43,136,67,228,15,23,152,4,139,126,164,24,172,39, - 211,33,50,210,15,50,216,23,35,216,21,25,151,95,145,95, - 160,86,211,21,44,136,10,217,15,25,164,37,168,4,164,43, - 220,19,23,152,3,152,84,147,63,136,68,240,2,15,9,53, - 220,19,36,160,84,211,19,42,136,68,216,31,32,208,12,28, - 241,34,0,16,26,152,100,159,111,153,111,168,102,212,30,53, - 240,6,0,16,20,143,127,137,127,152,122,212,15,42,216,24, - 38,168,20,172,99,176,42,171,111,208,46,62,208,41,63,209, - 24,63,145,5,224,24,28,156,83,160,22,155,91,152,92,208, - 24,42,144,5,240,4,11,13,33,220,19,36,160,85,211,19, - 43,168,116,210,19,51,216,27,32,144,68,240,20,0,16,20, - 136,11,136,116,136,11,248,244,73,1,0,16,26,242,0,7, - 9,34,241,10,0,16,22,220,22,29,156,99,160,34,155,103, - 211,22,38,168,68,208,16,48,220,19,27,152,68,147,62,141, - 68,251,220,15,22,242,0,4,9,53,217,15,21,216,16,21, - 216,31,33,159,123,153,123,208,12,28,220,19,46,168,116,211, - 19,52,141,68,251,240,9,4,9,53,251,244,38,0,20,30, - 242,0,3,13,21,243,6,0,17,21,240,12,0,16,20,136, - 11,251,244,11,0,20,27,242,0,4,13,33,240,6,0,20, - 22,151,59,145,59,208,34,50,210,19,50,216,27,32,144,68, - 251,216,15,19,136,11,251,240,11,4,13,33,250,115,66,0, - 0,0,195,6,13,68,44,0,196,24,16,70,15,0,196,44, - 9,70,12,3,196,53,34,69,28,3,197,28,12,70,12,3, - 197,40,26,70,7,3,198,7,5,70,12,3,198,15,9,71, - 6,3,198,30,12,71,6,3,198,42,17,71,1,3,199,1, - 5,71,6,3,84,99,2,0,0,0,0,0,0,0,0,0, - 0,0,7,0,0,0,3,0,0,0,243,76,3,0,0,151, - 0,116,1,0,0,0,0,0,0,0,0,106,2,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 0,171,1,0,0,0,0,0,0,125,0,116,5,0,0,0, - 0,0,0,0,0,124,0,116,6,0,0,0,0,0,0,0, - 0,171,2,0,0,0,0,0,0,114,7,100,1,125,2,100, - 2,125,3,100,3,125,4,110,6,100,4,125,2,100,5,125, - 3,100,6,125,4,124,1,128,2,124,3,125,1,124,0,115, - 11,116,9,0,0,0,0,0,0,0,0,100,8,171,1,0, - 0,0,0,0,0,130,1,116,1,0,0,0,0,0,0,0, - 0,106,2,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,124,1,171,1,0,0,0,0,0,0,125, - 1,9,0,116,11,0,0,0,0,0,0,0,0,116,13,0, - 0,0,0,0,0,0,0,124,1,171,1,0,0,0,0,0, - 0,171,1,0,0,0,0,0,0,125,5,116,11,0,0,0, - 0,0,0,0,0,116,13,0,0,0,0,0,0,0,0,124, - 0,171,1,0,0,0,0,0,0,171,1,0,0,0,0,0, - 0,125,6,116,15,0,0,0,0,0,0,0,0,124,5,171, - 1,0,0,0,0,0,0,92,3,0,0,125,7,125,8,125, - 9,116,15,0,0,0,0,0,0,0,0,124,6,171,1,0, - 0,0,0,0,0,92,3,0,0,125,10,125,8,125,11,116, - 17,0,0,0,0,0,0,0,0,124,7,171,1,0,0,0, - 0,0,0,116,17,0,0,0,0,0,0,0,0,124,10,171, - 1,0,0,0,0,0,0,107,55,0,0,114,17,116,9,0, - 0,0,0,0,0,0,0,100,9,124,10,155,2,100,10,124, - 7,155,2,157,4,171,1,0,0,0,0,0,0,130,1,124, - 9,106,19,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,124,2,171,1,0,0,0,0,0,0,68, - 0,143,12,99,2,103,0,99,2,93,7,0,0,125,12,124, - 12,115,1,140,6,124,12,145,2,140,9,4,0,125,13,125, - 12,124,11,106,19,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,2,171,1,0,0,0,0,0, - 0,68,0,143,12,99,2,103,0,99,2,93,7,0,0,125, - 12,124,12,115,1,140,6,124,12,145,2,140,9,4,0,125, - 14,125,12,100,11,125,15,116,21,0,0,0,0,0,0,0, - 0,124,13,124,14,171,2,0,0,0,0,0,0,68,0,93, - 35,0,0,92,2,0,0,125,16,125,17,116,17,0,0,0, - 0,0,0,0,0,124,16,171,1,0,0,0,0,0,0,116, - 17,0,0,0,0,0,0,0,0,124,17,171,1,0,0,0, - 0,0,0,107,55,0,0,114,2,1,0,110,7,124,15,100, - 12,122,13,0,0,125,15,140,37,4,0,124,4,103,1,116, - 23,0,0,0,0,0,0,0,0,124,13,171,1,0,0,0, - 0,0,0,124,15,122,10,0,0,122,5,0,0,124,14,124, - 15,100,7,26,0,122,0,0,0,125,18,124,18,115,2,124, - 3,83,0,116,25,0,0,0,0,0,0,0,0,124,18,142, - 0,83,0,99,2,1,0,99,2,125,12,119,0,99,2,1, - 0,99,2,125,12,119,0,35,0,116,26,0,0,0,0,0, - 0,0,0,116,8,0,0,0,0,0,0,0,0,116,28,0, - 0,0,0,0,0,0,0,116,30,0,0,0,0,0,0,0, - 0,116,32,0,0,0,0,0,0,0,0,102,5,36,0,114, - 25,1,0,116,35,0,0,0,0,0,0,0,0,106,36,0, + 124,1,171,1,0,0,0,0,0,0,125,1,9,0,116,11, + 0,0,0,0,0,0,0,0,116,13,0,0,0,0,0,0, + 0,0,124,1,171,1,0,0,0,0,0,0,171,1,0,0, + 0,0,0,0,125,5,116,11,0,0,0,0,0,0,0,0, + 116,13,0,0,0,0,0,0,0,0,124,0,171,1,0,0, + 0,0,0,0,171,1,0,0,0,0,0,0,125,6,116,15, + 0,0,0,0,0,0,0,0,124,5,171,1,0,0,0,0, + 0,0,92,3,0,0,125,7,125,8,125,9,116,15,0,0, + 0,0,0,0,0,0,124,6,171,1,0,0,0,0,0,0, + 92,3,0,0,125,10,125,8,125,11,116,17,0,0,0,0, + 0,0,0,0,124,7,171,1,0,0,0,0,0,0,116,17, + 0,0,0,0,0,0,0,0,124,10,171,1,0,0,0,0, + 0,0,107,55,0,0,114,17,116,9,0,0,0,0,0,0, + 0,0,100,9,124,10,155,2,100,10,124,7,155,2,157,4, + 171,1,0,0,0,0,0,0,130,1,124,9,106,19,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,100,13,124,0,124,1,171,3,0,0,0,0,0,0,1, - 0,130,0,119,0,120,3,89,0,119,1,41,14,122,35,82, - 101,116,117,114,110,32,97,32,114,101,108,97,116,105,118,101, - 32,118,101,114,115,105,111,110,32,111,102,32,97,32,112,97, - 116,104,114,83,0,0,0,114,135,0,0,0,114,206,0,0, - 0,114,4,0,0,0,114,2,0,0,0,114,3,0,0,0, - 78,122,17,110,111,32,112,97,116,104,32,115,112,101,99,105, - 102,105,101,100,122,17,112,97,116,104,32,105,115,32,111,110, - 32,109,111,117,110,116,32,122,17,44,32,115,116,97,114,116, - 32,111,110,32,109,111,117,110,116,32,114,8,0,0,0,114, - 86,0,0,0,114,44,0,0,0,41,19,114,66,0,0,0, - 114,67,0,0,0,114,53,0,0,0,114,54,0,0,0,114, - 147,0,0,0,114,33,0,0,0,114,32,0,0,0,114,14, - 0,0,0,114,10,0,0,0,114,15,0,0,0,218,3,122, - 105,112,114,128,0,0,0,114,12,0,0,0,114,94,0,0, - 0,114,95,0,0,0,114,96,0,0,0,218,18,68,101,112, - 114,101,99,97,116,105,111,110,87,97,114,110,105,110,103,114, - 97,0,0,0,114,98,0,0,0,41,19,114,56,0,0,0, - 114,124,0,0,0,114,36,0,0,0,114,34,0,0,0,114, - 35,0,0,0,218,9,115,116,97,114,116,95,97,98,115,218, - 8,112,97,116,104,95,97,98,115,218,11,115,116,97,114,116, - 95,100,114,105,118,101,218,1,95,218,10,115,116,97,114,116, - 95,114,101,115,116,218,10,112,97,116,104,95,100,114,105,118, - 101,218,9,112,97,116,104,95,114,101,115,116,114,159,0,0, - 0,218,10,115,116,97,114,116,95,108,105,115,116,218,9,112, - 97,116,104,95,108,105,115,116,114,132,0,0,0,218,2,101, - 49,218,2,101,50,218,8,114,101,108,95,108,105,115,116,115, - 19,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32, - 32,32,32,32,32,32,32,114,57,0,0,0,114,44,0,0, - 0,114,44,0,0,0,246,2,0,0,115,180,1,0,0,128, - 0,228,11,13,143,57,137,57,144,84,139,63,128,68,220,7, - 17,144,36,156,5,212,7,30,216,14,19,136,3,216,17,21, - 136,6,216,17,22,137,6,224,14,18,136,3,216,17,20,136, - 6,216,17,21,136,6,224,7,12,128,125,216,16,22,136,5, - 225,11,15,220,14,24,208,25,44,211,14,45,208,8,45,228, - 12,14,143,73,137,73,144,101,211,12,28,128,69,240,2,24, - 5,14,220,20,27,156,72,160,85,155,79,211,20,44,136,9, - 220,19,26,156,56,160,68,155,62,211,19,42,136,8,220,37, - 46,168,121,211,37,57,209,8,34,136,11,144,81,152,10,220, - 35,44,168,88,211,35,54,209,8,32,136,10,144,65,144,121, - 220,11,19,144,75,211,11,32,164,72,168,90,211,36,56,210, - 11,56,221,18,28,218,16,26,153,75,240,3,1,30,41,243, - 0,1,19,42,240,0,1,13,42,240,6,0,34,44,215,33, - 49,209,33,49,176,35,212,33,54,211,21,60,209,33,54,152, - 65,186,33,146,97,208,33,54,136,10,208,21,60,216,32,41, - 167,15,161,15,176,3,212,32,52,211,20,58,209,32,52,152, - 49,186,1,146,81,208,32,52,136,9,208,20,58,224,12,13, - 136,1,220,22,25,152,42,160,105,214,22,48,137,70,136,66, - 144,2,220,15,23,152,2,139,124,156,120,168,2,155,124,210, - 15,43,217,16,21,216,12,13,144,17,137,70,137,65,240,7, - 0,23,49,240,10,0,21,27,144,56,156,115,160,58,155,127, - 168,113,209,31,48,209,19,49,176,73,184,97,184,98,176,77, - 209,19,65,136,8,217,15,23,216,19,25,136,77,220,15,19, - 144,88,136,127,208,8,30,249,242,25,0,22,61,249,218,20, - 58,248,244,24,0,13,22,148,122,164,62,180,60,212,65,83, - 208,11,84,242,0,2,5,14,220,8,19,215,8,36,209,8, - 36,160,89,176,4,176,101,212,8,60,216,8,13,240,5,2, - 5,14,250,115,62,0,0,0,193,26,66,1,69,44,0,195, - 27,7,69,34,4,195,35,4,69,34,4,195,39,21,69,44, - 0,195,60,7,69,39,4,196,4,4,69,39,4,196,8,65, - 17,69,44,0,197,26,7,69,44,0,197,34,10,69,44,0, - 197,44,55,70,35,3,99,1,0,0,0,0,0,0,0,0, - 0,0,0,10,0,0,0,3,0,0,0,243,96,4,0,0, - 151,0,124,0,115,11,116,1,0,0,0,0,0,0,0,0, - 100,1,171,1,0,0,0,0,0,0,130,1,116,3,0,0, - 0,0,0,0,0,0,116,5,0,0,0,0,0,0,0,0, - 116,6,0,0,0,0,0,0,0,0,106,8,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0, - 171,2,0,0,0,0,0,0,171,1,0,0,0,0,0,0, - 125,0,116,11,0,0,0,0,0,0,0,0,124,0,100,2, - 25,0,0,0,116,12,0,0,0,0,0,0,0,0,171,2, - 0,0,0,0,0,0,114,7,100,3,125,1,100,4,125,2, - 100,5,125,3,110,6,100,6,125,1,100,7,125,2,100,8, - 125,3,9,0,124,0,68,0,143,4,99,2,103,0,99,2, - 93,43,0,0,125,4,116,15,0,0,0,0,0,0,0,0, - 124,4,106,17,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,2,124,1,171,2,0,0,0,0, - 0,0,106,19,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,171,0,0,0,0,0,0,0,171,1, - 0,0,0,0,0,0,145,2,140,45,4,0,125,5,125,4, - 124,5,68,0,143,6,143,7,143,4,99,4,103,0,99,2, - 93,23,0,0,92,3,0,0,125,6,125,7,125,4,124,4, - 106,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,1,171,1,0,0,0,0,0,0,145,2, - 140,25,4,0,125,8,125,7,125,6,125,4,116,23,0,0, - 0,0,0,0,0,0,124,5,68,0,143,6,143,7,143,4, - 99,4,104,0,99,2,93,8,0,0,92,3,0,0,125,6, - 125,7,125,4,124,7,146,2,140,10,4,0,99,4,125,4, - 125,7,125,6,171,1,0,0,0,0,0,0,100,9,107,55, - 0,0,114,11,116,1,0,0,0,0,0,0,0,0,100,10, - 171,1,0,0,0,0,0,0,130,1,116,23,0,0,0,0, - 0,0,0,0,124,5,68,0,143,6,143,7,143,4,99,4, - 104,0,99,2,93,8,0,0,92,3,0,0,125,6,125,7, - 125,4,124,6,146,2,140,10,4,0,99,4,125,4,125,7, - 125,6,171,1,0,0,0,0,0,0,100,9,107,55,0,0, - 114,11,116,1,0,0,0,0,0,0,0,0,100,11,171,1, - 0,0,0,0,0,0,130,1,116,15,0,0,0,0,0,0, - 0,0,124,0,100,2,25,0,0,0,106,17,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,2, - 124,1,171,2,0,0,0,0,0,0,171,1,0,0,0,0, - 0,0,92,3,0,0,125,9,125,10,125,11,124,11,106,21, + 124,2,171,1,0,0,0,0,0,0,68,0,143,12,99,2, + 103,0,99,2,93,7,0,0,125,12,124,12,115,1,140,6, + 124,12,145,2,140,9,4,0,125,13,125,12,124,11,106,19, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,1,171,1,0,0,0,0,0,0,125,12,124,12, - 68,0,143,13,99,2,103,0,99,2,93,13,0,0,125,13, - 124,13,115,1,140,6,124,13,124,3,107,55,0,0,115,1, - 140,12,124,13,145,2,140,15,4,0,125,12,125,13,124,8, - 68,0,143,14,143,13,99,3,103,0,99,2,93,27,0,0, - 125,14,124,14,68,0,143,13,99,2,103,0,99,2,93,13, - 0,0,125,13,124,13,115,1,140,6,124,13,124,3,107,55, - 0,0,115,1,140,12,124,13,145,2,140,15,4,0,99,2, - 125,13,145,2,140,29,4,0,125,8,125,14,125,13,116,25, - 0,0,0,0,0,0,0,0,124,8,171,1,0,0,0,0, - 0,0,125,15,116,27,0,0,0,0,0,0,0,0,124,8, - 171,1,0,0,0,0,0,0,125,16,116,29,0,0,0,0, - 0,0,0,0,124,15,171,1,0,0,0,0,0,0,68,0, - 93,20,0,0,92,2,0,0,125,17,125,13,124,13,124,16, - 124,17,25,0,0,0,107,55,0,0,115,1,140,15,124,12, - 100,12,124,17,26,0,125,12,1,0,110,15,4,0,124,12, - 100,12,116,23,0,0,0,0,0,0,0,0,124,15,171,1, - 0,0,0,0,0,0,26,0,125,12,124,9,124,10,122,0, - 0,0,124,1,106,31,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,12,171,1,0,0,0,0, - 0,0,122,0,0,0,83,0,99,2,1,0,99,2,125,4, - 119,0,99,2,1,0,99,4,125,4,125,7,125,6,119,0, - 99,2,1,0,99,4,125,4,125,7,125,6,119,0,99,2, - 1,0,99,4,125,4,125,7,125,6,119,0,99,2,1,0, - 99,2,125,13,119,0,99,2,1,0,99,2,125,13,119,0, - 99,2,1,0,99,3,125,13,125,14,119,0,35,0,116,32, - 0,0,0,0,0,0,0,0,116,34,0,0,0,0,0,0, - 0,0,102,2,36,0,114,24,1,0,116,37,0,0,0,0, - 0,0,0,0,106,38,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,100,13,103,1,124,0,162,1, - 173,6,142,0,1,0,130,0,119,0,120,3,89,0,119,1, - 41,14,122,68,71,105,118,101,110,32,97,32,115,101,113,117, - 101,110,99,101,32,111,102,32,112,97,116,104,32,110,97,109, - 101,115,44,32,114,101,116,117,114,110,115,32,116,104,101,32, - 108,111,110,103,101,115,116,32,99,111,109,109,111,110,32,115, - 117,98,45,112,97,116,104,46,122,37,99,111,109,109,111,110, - 112,97,116,104,40,41,32,97,114,103,32,105,115,32,97,110, - 32,101,109,112,116,121,32,115,101,113,117,101,110,99,101,114, - 8,0,0,0,114,83,0,0,0,114,84,0,0,0,114,135, - 0,0,0,114,4,0,0,0,114,6,0,0,0,114,2,0, - 0,0,114,86,0,0,0,122,37,67,97,110,39,116,32,109, - 105,120,32,97,98,115,111,108,117,116,101,32,97,110,100,32, - 114,101,108,97,116,105,118,101,32,112,97,116,104,115,122,31, - 80,97,116,104,115,32,100,111,110,39,116,32,104,97,118,101, - 32,116,104,101,32,115,97,109,101,32,100,114,105,118,101,78, - 114,48,0,0,0,41,20,114,147,0,0,0,218,5,116,117, - 112,108,101,114,93,0,0,0,114,66,0,0,0,114,67,0, - 0,0,114,53,0,0,0,114,54,0,0,0,114,14,0,0, - 0,114,71,0,0,0,114,81,0,0,0,114,15,0,0,0, - 114,128,0,0,0,218,3,109,105,110,218,3,109,97,120,218, - 9,101,110,117,109,101,114,97,116,101,114,12,0,0,0,114, - 94,0,0,0,114,95,0,0,0,114,97,0,0,0,114,98, - 0,0,0,41,18,114,99,0,0,0,114,36,0,0,0,114, - 39,0,0,0,114,34,0,0,0,114,105,0,0,0,218,11, - 100,114,105,118,101,115,112,108,105,116,115,114,130,0,0,0, - 114,131,0,0,0,218,11,115,112,108,105,116,95,112,97,116, - 104,115,114,110,0,0,0,114,111,0,0,0,114,56,0,0, - 0,218,6,99,111,109,109,111,110,114,201,0,0,0,114,76, - 0,0,0,218,2,115,49,218,2,115,50,114,132,0,0,0, - 115,18,0,0,0,32,32,32,32,32,32,32,32,32,32,32, - 32,32,32,32,32,32,32,114,57,0,0,0,114,48,0,0, - 0,114,48,0,0,0,46,3,0,0,115,45,2,0,0,128, - 0,241,6,0,12,17,220,14,24,208,25,64,211,14,65,208, - 8,65,228,12,17,148,35,148,98,151,105,145,105,160,21,211, - 18,39,211,12,40,128,69,220,7,17,144,37,152,1,145,40, - 156,69,212,7,34,216,14,19,136,3,216,17,21,136,6,216, - 17,21,137,6,224,14,18,136,3,216,17,20,136,6,216,17, - 20,136,6,240,4,30,5,14,217,74,79,211,22,80,201,37, - 192,81,148,121,160,17,167,25,161,25,168,54,176,51,211,33, - 55,215,33,61,209,33,61,211,33,63,213,23,64,200,37,136, - 11,208,22,80,217,51,62,213,22,63,177,59,169,7,168,1, - 168,49,168,97,144,113,151,119,145,119,152,115,149,124,176,59, - 136,11,210,22,63,228,11,14,161,27,213,15,45,161,27,145, - 103,144,97,152,17,152,65,146,1,160,27,211,15,45,211,11, - 46,176,33,210,11,51,220,18,28,208,29,68,211,18,69,208, - 12,69,244,10,0,12,15,161,27,213,15,45,161,27,145,103, - 144,97,152,17,152,65,146,1,160,27,211,15,45,211,11,46, - 176,33,210,11,51,220,18,28,208,29,62,211,18,63,208,12, - 63,228,28,37,160,101,168,65,161,104,215,38,54,209,38,54, - 176,118,184,115,211,38,67,211,28,68,209,8,25,136,5,136, - 116,144,84,216,17,21,151,26,145,26,152,67,147,31,136,6, - 217,29,35,211,17,57,153,86,152,1,162,113,168,81,176,38, - 171,91,146,33,152,86,136,6,208,17,57,225,68,79,212,22, - 80,193,75,184,113,161,49,211,23,58,161,49,152,97,170,1, - 168,97,176,54,171,107,154,1,160,49,211,23,58,192,75,136, - 11,209,22,80,220,13,16,144,27,211,13,29,136,2,220,13, - 16,144,27,211,13,29,136,2,220,20,29,152,98,150,77,137, - 68,136,65,136,113,216,15,16,144,66,144,113,145,69,139,122, - 216,25,31,160,2,160,17,152,26,144,6,217,16,21,240,7, - 0,21,34,240,10,0,22,28,152,72,156,83,160,18,155,87, - 208,21,37,136,70,224,15,20,144,116,137,124,152,99,159,104, - 153,104,160,118,211,30,46,209,15,46,208,8,46,249,242,53, - 0,23,81,1,249,220,22,63,249,228,15,45,249,244,12,0, - 16,46,249,242,10,0,18,58,249,226,23,58,249,211,22,80, - 248,244,22,0,13,22,148,126,208,11,38,242,0,2,5,14, - 220,8,19,215,8,36,209,8,36,160,92,208,8,58,176,69, - 211,8,58,216,8,13,240,5,2,5,14,250,115,145,0,0, - 0,193,18,4,72,6,0,193,22,48,71,28,4,194,6,8, - 72,6,0,194,14,28,71,33,8,194,42,15,72,6,0,194, - 57,13,71,40,12,195,6,34,72,6,0,195,40,13,71,47, - 12,195,53,65,14,72,6,0,197,3,7,71,54,4,197,11, - 5,71,54,4,197,17,4,71,54,4,197,21,7,72,6,0, - 197,28,9,72,0,6,197,37,7,71,59,12,197,45,5,71, - 59,12,197,51,4,71,59,12,197,55,5,72,0,6,197,60, - 50,72,6,0,198,47,44,72,6,0,199,28,31,72,6,0, - 199,59,5,72,0,6,200,0,6,72,6,0,200,6,39,72, - 45,3,41,1,218,11,95,112,97,116,104,95,105,115,100,105, - 114,41,1,218,12,95,112,97,116,104,95,105,115,102,105,108, - 101,41,1,218,12,95,112,97,116,104,95,105,115,108,105,110, - 107,41,1,218,12,95,112,97,116,104,95,101,120,105,115,116, - 115,41,1,218,16,95,112,97,116,104,95,105,115,100,101,118, - 100,114,105,118,101,99,1,0,0,0,0,0,0,0,0,0, - 0,0,5,0,0,0,3,0,0,0,243,74,0,0,0,151, - 0,9,0,116,1,0,0,0,0,0,0,0,0,116,3,0, - 0,0,0,0,0,0,0,124,0,171,1,0,0,0,0,0, - 0,171,1,0,0,0,0,0,0,83,0,35,0,116,4,0, - 0,0,0,0,0,0,0,36,0,114,3,1,0,89,0,121, - 1,119,0,120,3,89,0,119,1,169,2,122,64,68,101,116, - 101,114,109,105,110,101,115,32,119,104,101,116,104,101,114,32, - 116,104,101,32,115,112,101,99,105,102,105,101,100,32,112,97, - 116,104,32,105,115,32,111,110,32,97,32,87,105,110,100,111, - 119,115,32,68,101,118,32,68,114,105,118,101,46,70,41,3, - 114,23,1,0,0,114,33,0,0,0,114,146,0,0,0,114, - 55,0,0,0,115,1,0,0,0,32,114,57,0,0,0,218, - 10,105,115,100,101,118,100,114,105,118,101,114,26,1,0,0, - 116,3,0,0,115,40,0,0,0,128,0,240,4,3,9,25, - 220,19,35,164,71,168,68,163,77,211,19,50,208,12,50,248, - 220,15,22,242,0,1,9,25,217,19,24,240,3,1,9,25, - 250,115,12,0,0,0,130,19,22,0,150,9,34,3,161,1, - 34,3,99,1,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,243,4,0,0,0,151,0,121,1, - 114,25,1,0,0,169,0,114,55,0,0,0,115,1,0,0, - 0,32,114,57,0,0,0,114,26,1,0,0,114,26,1,0, - 0,111,3,0,0,115,7,0,0,0,128,0,240,6,0,16, - 21,114,59,0,0,0,41,1,78,41,66,218,7,95,95,100, - 111,99,95,95,114,34,0,0,0,114,35,0,0,0,114,40, - 0,0,0,114,36,0,0,0,114,37,0,0,0,114,39,0, - 0,0,114,38,0,0,0,114,41,0,0,0,114,66,0,0, - 0,114,68,0,0,0,114,149,0,0,0,114,97,0,0,0, - 218,7,95,95,97,108,108,95,95,114,58,0,0,0,218,7, - 95,119,105,110,97,112,105,114,60,0,0,0,114,72,0,0, - 0,114,61,0,0,0,114,73,0,0,0,114,62,0,0,0, - 114,74,0,0,0,114,10,0,0,0,218,11,73,109,112,111, - 114,116,69,114,114,111,114,114,11,0,0,0,114,12,0,0, - 0,114,13,0,0,0,114,14,0,0,0,114,15,0,0,0, - 114,16,0,0,0,114,136,0,0,0,114,17,0,0,0,114, - 18,0,0,0,218,7,104,97,115,97,116,116,114,218,11,115, - 116,97,116,95,114,101,115,117,108,116,114,49,0,0,0,114, - 26,0,0,0,218,2,110,116,114,155,0,0,0,114,29,0, - 0,0,114,30,0,0,0,114,31,0,0,0,114,204,0,0, - 0,114,32,0,0,0,114,214,0,0,0,114,215,0,0,0, - 114,33,0,0,0,114,217,0,0,0,114,218,0,0,0,114, - 228,0,0,0,114,234,0,0,0,114,242,0,0,0,114,42, - 0,0,0,114,43,0,0,0,114,44,0,0,0,114,48,0, - 0,0,114,19,1,0,0,114,27,0,0,0,114,20,1,0, - 0,114,28,0,0,0,114,21,1,0,0,114,24,0,0,0, - 114,22,1,0,0,114,25,0,0,0,114,23,1,0,0,114, - 26,1,0,0,114,28,1,0,0,114,59,0,0,0,114,57, - 0,0,0,218,8,60,109,111,100,117,108,101,62,114,36,1, - 0,0,1,0,0,0,115,231,1,0,0,240,3,1,1,1, - 241,4,4,1,4,240,18,0,10,13,128,6,216,9,13,128, - 6,216,9,12,128,6,216,6,10,128,3,216,10,13,128,7, - 216,9,12,128,6,216,10,21,128,7,216,10,15,128,7,227, - 0,9,219,0,10,219,0,11,219,0,18,220,0,25,242,6, - 6,11,79,1,128,7,242,16,4,1,21,240,20,33,1,44, - 247,2,3,5,45,241,0,3,5,45,242,10,17,5,56,242, - 72,1,16,1,17,242,40,43,1,14,242,98,1,20,1,30, - 242,46,49,1,31,242,114,1,13,1,43,242,42,5,1,56, - 240,12,0,20,31,215,19,40,209,19,40,215,19,48,209,19, - 48,128,8,212,0,16,242,10,2,1,23,242,14,2,1,23, - 241,14,0,4,11,136,50,143,62,137,62,208,27,43,212,3, - 44,243,2,6,5,74,1,242,16,3,5,21,242,16,6,1, - 16,240,36,3,1,30,221,4,37,242,6,17,1,21,242,58, - 45,1,31,242,122,1,106,1,1,15,240,96,3,38,1,40, - 221,4,45,242,80,1,14,1,26,240,34,12,1,43,221,4, - 35,242,12,5,5,43,240,14,93,2,1,20,223,4,62,242, - 10,40,5,20,242,84,1,47,5,20,240,98,1,0,34,39, - 244,0,60,5,20,240,64,2,0,30,34,208,0,26,243,4, - 43,1,14,242,112,1,46,1,14,240,98,1,10,1,9,245, - 8,0,5,40,221,4,41,221,4,41,221,4,41,240,12,13, - 1,25,221,4,35,243,14,5,5,25,248,240,95,25,0,8, - 19,242,0,9,1,44,244,2,8,5,44,240,3,9,1,44, - 251,240,116,7,0,8,19,242,0,1,1,30,216,25,29,210, - 4,22,240,3,1,1,30,251,240,94,6,0,8,19,242,0, - 35,1,40,244,2,34,5,40,240,3,35,1,40,251,240,116, - 1,0,8,19,242,0,1,1,32,216,14,31,130,71,240,3, - 1,1,32,251,240,26,0,8,19,242,0,2,1,23,224,15, - 22,130,72,240,5,2,1,23,251,240,100,8,0,8,19,242, - 0,2,1,9,225,4,8,240,5,2,1,9,251,240,14,0, - 8,19,242,0,4,1,21,244,2,3,5,21,240,3,4,1, - 21,250,115,125,0,0,0,176,13,67,51,0,194,14,6,68, - 1,0,194,30,6,68,14,0,194,40,6,68,28,0,194,50, - 8,68,41,0,195,16,24,68,54,0,195,41,6,69,1,0, - 195,51,8,67,62,3,195,61,1,67,62,3,196,1,7,68, - 11,3,196,10,1,68,11,3,196,14,8,68,25,3,196,24, - 1,68,25,3,196,28,7,68,38,3,196,37,1,68,38,3, - 196,41,7,68,51,3,196,50,1,68,51,3,196,54,5,68, - 62,3,196,61,1,68,62,3,197,1,8,69,12,3,197,11, - 1,69,12,3, + 0,0,124,2,171,1,0,0,0,0,0,0,68,0,143,12, + 99,2,103,0,99,2,93,7,0,0,125,12,124,12,115,1, + 140,6,124,12,145,2,140,9,4,0,125,14,125,12,100,11, + 125,15,116,21,0,0,0,0,0,0,0,0,124,13,124,14, + 171,2,0,0,0,0,0,0,68,0,93,35,0,0,92,2, + 0,0,125,16,125,17,116,17,0,0,0,0,0,0,0,0, + 124,16,171,1,0,0,0,0,0,0,116,17,0,0,0,0, + 0,0,0,0,124,17,171,1,0,0,0,0,0,0,107,55, + 0,0,114,2,1,0,110,7,124,15,100,12,122,13,0,0, + 125,15,140,37,4,0,124,4,103,1,116,23,0,0,0,0, + 0,0,0,0,124,13,171,1,0,0,0,0,0,0,124,15, + 122,10,0,0,122,5,0,0,124,14,124,15,100,7,26,0, + 122,0,0,0,125,18,124,18,115,2,124,3,83,0,116,25, + 0,0,0,0,0,0,0,0,124,18,142,0,83,0,99,2, + 1,0,99,2,125,12,119,0,99,2,1,0,99,2,125,12, + 119,0,35,0,116,26,0,0,0,0,0,0,0,0,116,8, + 0,0,0,0,0,0,0,0,116,28,0,0,0,0,0,0, + 0,0,116,30,0,0,0,0,0,0,0,0,116,32,0,0, + 0,0,0,0,0,0,102,5,36,0,114,25,1,0,116,35, + 0,0,0,0,0,0,0,0,106,36,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,100,13,124,0, + 124,1,171,3,0,0,0,0,0,0,1,0,130,0,119,0, + 120,3,89,0,119,1,41,14,122,35,82,101,116,117,114,110, + 32,97,32,114,101,108,97,116,105,118,101,32,118,101,114,115, + 105,111,110,32,111,102,32,97,32,112,97,116,104,114,83,0, + 0,0,114,135,0,0,0,114,206,0,0,0,114,4,0,0, + 0,114,2,0,0,0,114,3,0,0,0,78,122,17,110,111, + 32,112,97,116,104,32,115,112,101,99,105,102,105,101,100,122, + 17,112,97,116,104,32,105,115,32,111,110,32,109,111,117,110, + 116,32,122,17,44,32,115,116,97,114,116,32,111,110,32,109, + 111,117,110,116,32,114,8,0,0,0,114,86,0,0,0,114, + 44,0,0,0,41,19,114,66,0,0,0,114,67,0,0,0, + 114,53,0,0,0,114,54,0,0,0,114,147,0,0,0,114, + 33,0,0,0,114,32,0,0,0,114,14,0,0,0,114,10, + 0,0,0,114,15,0,0,0,218,3,122,105,112,114,128,0, + 0,0,114,12,0,0,0,114,94,0,0,0,114,95,0,0, + 0,114,96,0,0,0,218,18,68,101,112,114,101,99,97,116, + 105,111,110,87,97,114,110,105,110,103,114,97,0,0,0,114, + 98,0,0,0,41,19,114,56,0,0,0,114,124,0,0,0, + 114,36,0,0,0,114,34,0,0,0,114,35,0,0,0,218, + 9,115,116,97,114,116,95,97,98,115,218,8,112,97,116,104, + 95,97,98,115,218,11,115,116,97,114,116,95,100,114,105,118, + 101,218,1,95,218,10,115,116,97,114,116,95,114,101,115,116, + 218,10,112,97,116,104,95,100,114,105,118,101,218,9,112,97, + 116,104,95,114,101,115,116,114,159,0,0,0,218,10,115,116, + 97,114,116,95,108,105,115,116,218,9,112,97,116,104,95,108, + 105,115,116,114,132,0,0,0,218,2,101,49,218,2,101,50, + 218,8,114,101,108,95,108,105,115,116,115,19,0,0,0,32, + 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, + 32,32,114,57,0,0,0,114,44,0,0,0,114,44,0,0, + 0,3,3,0,0,115,180,1,0,0,128,0,228,11,13,143, + 57,137,57,144,84,139,63,128,68,220,7,17,144,36,156,5, + 212,7,30,216,14,19,136,3,216,17,21,136,6,216,17,22, + 137,6,224,14,18,136,3,216,17,20,136,6,216,17,21,136, + 6,224,7,12,128,125,216,16,22,136,5,225,11,15,220,14, + 24,208,25,44,211,14,45,208,8,45,228,12,14,143,73,137, + 73,144,101,211,12,28,128,69,240,2,24,5,14,220,20,27, + 156,72,160,85,155,79,211,20,44,136,9,220,19,26,156,56, + 160,68,155,62,211,19,42,136,8,220,37,46,168,121,211,37, + 57,209,8,34,136,11,144,81,152,10,220,35,44,168,88,211, + 35,54,209,8,32,136,10,144,65,144,121,220,11,19,144,75, + 211,11,32,164,72,168,90,211,36,56,210,11,56,221,18,28, + 218,16,26,153,75,240,3,1,30,41,243,0,1,19,42,240, + 0,1,13,42,240,6,0,34,44,215,33,49,209,33,49,176, + 35,212,33,54,211,21,60,209,33,54,152,65,186,33,146,97, + 208,33,54,136,10,208,21,60,216,32,41,167,15,161,15,176, + 3,212,32,52,211,20,58,209,32,52,152,49,186,1,146,81, + 208,32,52,136,9,208,20,58,224,12,13,136,1,220,22,25, + 152,42,160,105,214,22,48,137,70,136,66,144,2,220,15,23, + 152,2,139,124,156,120,168,2,155,124,210,15,43,217,16,21, + 216,12,13,144,17,137,70,137,65,240,7,0,23,49,240,10, + 0,21,27,144,56,156,115,160,58,155,127,168,113,209,31,48, + 209,19,49,176,73,184,97,184,98,176,77,209,19,65,136,8, + 217,15,23,216,19,25,136,77,220,15,19,144,88,136,127,208, + 8,30,249,242,25,0,22,61,249,218,20,58,248,244,24,0, + 13,22,148,122,164,62,180,60,212,65,83,208,11,84,242,0, + 2,5,14,220,8,19,215,8,36,209,8,36,160,89,176,4, + 176,101,212,8,60,216,8,13,240,5,2,5,14,250,115,62, + 0,0,0,193,26,66,1,69,44,0,195,27,7,69,34,4, + 195,35,4,69,34,4,195,39,21,69,44,0,195,60,7,69, + 39,4,196,4,4,69,39,4,196,8,65,17,69,44,0,197, + 26,7,69,44,0,197,34,10,69,44,0,197,44,55,70,35, + 3,99,1,0,0,0,0,0,0,0,0,0,0,0,10,0, + 0,0,3,0,0,0,243,96,4,0,0,151,0,124,0,115, + 11,116,1,0,0,0,0,0,0,0,0,100,1,171,1,0, + 0,0,0,0,0,130,1,116,3,0,0,0,0,0,0,0, + 0,116,5,0,0,0,0,0,0,0,0,116,6,0,0,0, + 0,0,0,0,0,106,8,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,0,171,2,0,0,0, + 0,0,0,171,1,0,0,0,0,0,0,125,0,116,11,0, + 0,0,0,0,0,0,0,124,0,100,2,25,0,0,0,116, + 12,0,0,0,0,0,0,0,0,171,2,0,0,0,0,0, + 0,114,7,100,3,125,1,100,4,125,2,100,5,125,3,110, + 6,100,6,125,1,100,7,125,2,100,8,125,3,9,0,124, + 0,68,0,143,4,99,2,103,0,99,2,93,43,0,0,125, + 4,116,15,0,0,0,0,0,0,0,0,124,4,106,17,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,124,2,124,1,171,2,0,0,0,0,0,0,106,19,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,171,0,0,0,0,0,0,0,171,1,0,0,0,0,0, + 0,145,2,140,45,4,0,125,5,125,4,124,5,68,0,143, + 6,143,7,143,4,99,4,103,0,99,2,93,23,0,0,92, + 3,0,0,125,6,125,7,125,4,124,4,106,21,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, + 1,171,1,0,0,0,0,0,0,145,2,140,25,4,0,125, + 8,125,7,125,6,125,4,116,23,0,0,0,0,0,0,0, + 0,124,5,68,0,143,6,143,7,143,4,99,4,104,0,99, + 2,93,8,0,0,92,3,0,0,125,6,125,7,125,4,124, + 7,146,2,140,10,4,0,99,4,125,4,125,7,125,6,171, + 1,0,0,0,0,0,0,100,9,107,55,0,0,114,11,116, + 1,0,0,0,0,0,0,0,0,100,10,171,1,0,0,0, + 0,0,0,130,1,116,23,0,0,0,0,0,0,0,0,124, + 5,68,0,143,6,143,7,143,4,99,4,104,0,99,2,93, + 8,0,0,92,3,0,0,125,6,125,7,125,4,124,6,146, + 2,140,10,4,0,99,4,125,4,125,7,125,6,171,1,0, + 0,0,0,0,0,100,9,107,55,0,0,114,11,116,1,0, + 0,0,0,0,0,0,0,100,11,171,1,0,0,0,0,0, + 0,130,1,116,15,0,0,0,0,0,0,0,0,124,0,100, + 2,25,0,0,0,106,17,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,2,124,1,171,2,0, + 0,0,0,0,0,171,1,0,0,0,0,0,0,92,3,0, + 0,125,9,125,10,125,11,124,11,106,21,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,1,171, + 1,0,0,0,0,0,0,125,12,124,12,68,0,143,13,99, + 2,103,0,99,2,93,13,0,0,125,13,124,13,115,1,140, + 6,124,13,124,3,107,55,0,0,115,1,140,12,124,13,145, + 2,140,15,4,0,125,12,125,13,124,8,68,0,143,14,143, + 13,99,3,103,0,99,2,93,27,0,0,125,14,124,14,68, + 0,143,13,99,2,103,0,99,2,93,13,0,0,125,13,124, + 13,115,1,140,6,124,13,124,3,107,55,0,0,115,1,140, + 12,124,13,145,2,140,15,4,0,99,2,125,13,145,2,140, + 29,4,0,125,8,125,14,125,13,116,25,0,0,0,0,0, + 0,0,0,124,8,171,1,0,0,0,0,0,0,125,15,116, + 27,0,0,0,0,0,0,0,0,124,8,171,1,0,0,0, + 0,0,0,125,16,116,29,0,0,0,0,0,0,0,0,124, + 15,171,1,0,0,0,0,0,0,68,0,93,20,0,0,92, + 2,0,0,125,17,125,13,124,13,124,16,124,17,25,0,0, + 0,107,55,0,0,115,1,140,15,124,12,100,12,124,17,26, + 0,125,12,1,0,110,15,4,0,124,12,100,12,116,23,0, + 0,0,0,0,0,0,0,124,15,171,1,0,0,0,0,0, + 0,26,0,125,12,124,9,124,10,122,0,0,0,124,1,106, + 31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,12,171,1,0,0,0,0,0,0,122,0,0, + 0,83,0,99,2,1,0,99,2,125,4,119,0,99,2,1, + 0,99,4,125,4,125,7,125,6,119,0,99,2,1,0,99, + 4,125,4,125,7,125,6,119,0,99,2,1,0,99,4,125, + 4,125,7,125,6,119,0,99,2,1,0,99,2,125,13,119, + 0,99,2,1,0,99,2,125,13,119,0,99,2,1,0,99, + 3,125,13,125,14,119,0,35,0,116,32,0,0,0,0,0, + 0,0,0,116,34,0,0,0,0,0,0,0,0,102,2,36, + 0,114,24,1,0,116,37,0,0,0,0,0,0,0,0,106, + 38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,100,13,103,1,124,0,162,1,173,6,142,0,1, + 0,130,0,119,0,120,3,89,0,119,1,41,14,122,68,71, + 105,118,101,110,32,97,32,115,101,113,117,101,110,99,101,32, + 111,102,32,112,97,116,104,32,110,97,109,101,115,44,32,114, + 101,116,117,114,110,115,32,116,104,101,32,108,111,110,103,101, + 115,116,32,99,111,109,109,111,110,32,115,117,98,45,112,97, + 116,104,46,122,37,99,111,109,109,111,110,112,97,116,104,40, + 41,32,97,114,103,32,105,115,32,97,110,32,101,109,112,116, + 121,32,115,101,113,117,101,110,99,101,114,8,0,0,0,114, + 83,0,0,0,114,84,0,0,0,114,135,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,2,0,0,0,114,86,0, + 0,0,122,37,67,97,110,39,116,32,109,105,120,32,97,98, + 115,111,108,117,116,101,32,97,110,100,32,114,101,108,97,116, + 105,118,101,32,112,97,116,104,115,122,31,80,97,116,104,115, + 32,100,111,110,39,116,32,104,97,118,101,32,116,104,101,32, + 115,97,109,101,32,100,114,105,118,101,78,114,48,0,0,0, + 41,20,114,147,0,0,0,218,5,116,117,112,108,101,114,93, + 0,0,0,114,66,0,0,0,114,67,0,0,0,114,53,0, + 0,0,114,54,0,0,0,114,14,0,0,0,114,71,0,0, + 0,114,81,0,0,0,114,15,0,0,0,114,128,0,0,0, + 218,3,109,105,110,218,3,109,97,120,218,9,101,110,117,109, + 101,114,97,116,101,114,12,0,0,0,114,94,0,0,0,114, + 95,0,0,0,114,97,0,0,0,114,98,0,0,0,41,18, + 114,99,0,0,0,114,36,0,0,0,114,39,0,0,0,114, + 34,0,0,0,114,105,0,0,0,218,11,100,114,105,118,101, + 115,112,108,105,116,115,114,130,0,0,0,114,131,0,0,0, + 218,11,115,112,108,105,116,95,112,97,116,104,115,114,110,0, + 0,0,114,111,0,0,0,114,56,0,0,0,218,6,99,111, + 109,109,111,110,114,201,0,0,0,114,76,0,0,0,218,2, + 115,49,218,2,115,50,114,132,0,0,0,115,18,0,0,0, + 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, + 32,32,114,57,0,0,0,114,48,0,0,0,114,48,0,0, + 0,59,3,0,0,115,45,2,0,0,128,0,241,6,0,12, + 17,220,14,24,208,25,64,211,14,65,208,8,65,228,12,17, + 148,35,148,98,151,105,145,105,160,21,211,18,39,211,12,40, + 128,69,220,7,17,144,37,152,1,145,40,156,69,212,7,34, + 216,14,19,136,3,216,17,21,136,6,216,17,21,137,6,224, + 14,18,136,3,216,17,20,136,6,216,17,20,136,6,240,4, + 30,5,14,217,74,79,211,22,80,201,37,192,81,148,121,160, + 17,167,25,161,25,168,54,176,51,211,33,55,215,33,61,209, + 33,61,211,33,63,213,23,64,200,37,136,11,208,22,80,217, + 51,62,213,22,63,177,59,169,7,168,1,168,49,168,97,144, + 113,151,119,145,119,152,115,149,124,176,59,136,11,210,22,63, + 228,11,14,161,27,213,15,45,161,27,145,103,144,97,152,17, + 152,65,146,1,160,27,211,15,45,211,11,46,176,33,210,11, + 51,220,18,28,208,29,68,211,18,69,208,12,69,244,10,0, + 12,15,161,27,213,15,45,161,27,145,103,144,97,152,17,152, + 65,146,1,160,27,211,15,45,211,11,46,176,33,210,11,51, + 220,18,28,208,29,62,211,18,63,208,12,63,228,28,37,160, + 101,168,65,161,104,215,38,54,209,38,54,176,118,184,115,211, + 38,67,211,28,68,209,8,25,136,5,136,116,144,84,216,17, + 21,151,26,145,26,152,67,147,31,136,6,217,29,35,211,17, + 57,153,86,152,1,162,113,168,81,176,38,171,91,146,33,152, + 86,136,6,208,17,57,225,68,79,212,22,80,193,75,184,113, + 161,49,211,23,58,161,49,152,97,170,1,168,97,176,54,171, + 107,154,1,160,49,211,23,58,192,75,136,11,209,22,80,220, + 13,16,144,27,211,13,29,136,2,220,13,16,144,27,211,13, + 29,136,2,220,20,29,152,98,150,77,137,68,136,65,136,113, + 216,15,16,144,66,144,113,145,69,139,122,216,25,31,160,2, + 160,17,152,26,144,6,217,16,21,240,7,0,21,34,240,10, + 0,22,28,152,72,156,83,160,18,155,87,208,21,37,136,70, + 224,15,20,144,116,137,124,152,99,159,104,153,104,160,118,211, + 30,46,209,15,46,208,8,46,249,242,53,0,23,81,1,249, + 220,22,63,249,228,15,45,249,244,12,0,16,46,249,242,10, + 0,18,58,249,226,23,58,249,211,22,80,248,244,22,0,13, + 22,148,126,208,11,38,242,0,2,5,14,220,8,19,215,8, + 36,209,8,36,160,92,208,8,58,176,69,211,8,58,216,8, + 13,240,5,2,5,14,250,115,145,0,0,0,193,18,4,72, + 6,0,193,22,48,71,28,4,194,6,8,72,6,0,194,14, + 28,71,33,8,194,42,15,72,6,0,194,57,13,71,40,12, + 195,6,34,72,6,0,195,40,13,71,47,12,195,53,65,14, + 72,6,0,197,3,7,71,54,4,197,11,5,71,54,4,197, + 17,4,71,54,4,197,21,7,72,6,0,197,28,9,72,0, + 6,197,37,7,71,59,12,197,45,5,71,59,12,197,51,4, + 71,59,12,197,55,5,72,0,6,197,60,50,72,6,0,198, + 47,44,72,6,0,199,28,31,72,6,0,199,59,5,72,0, + 6,200,0,6,72,6,0,200,6,39,72,45,3,41,1,218, + 11,95,112,97,116,104,95,105,115,100,105,114,41,1,218,12, + 95,112,97,116,104,95,105,115,102,105,108,101,41,1,218,12, + 95,112,97,116,104,95,105,115,108,105,110,107,41,1,218,12, + 95,112,97,116,104,95,101,120,105,115,116,115,41,1,218,16, + 95,112,97,116,104,95,105,115,100,101,118,100,114,105,118,101, + 99,1,0,0,0,0,0,0,0,0,0,0,0,5,0,0, + 0,3,0,0,0,243,74,0,0,0,151,0,9,0,116,1, + 0,0,0,0,0,0,0,0,116,3,0,0,0,0,0,0, + 0,0,124,0,171,1,0,0,0,0,0,0,171,1,0,0, + 0,0,0,0,83,0,35,0,116,4,0,0,0,0,0,0, + 0,0,36,0,114,3,1,0,89,0,121,1,119,0,120,3, + 89,0,119,1,169,2,122,64,68,101,116,101,114,109,105,110, + 101,115,32,119,104,101,116,104,101,114,32,116,104,101,32,115, + 112,101,99,105,102,105,101,100,32,112,97,116,104,32,105,115, + 32,111,110,32,97,32,87,105,110,100,111,119,115,32,68,101, + 118,32,68,114,105,118,101,46,70,41,3,114,23,1,0,0, + 114,33,0,0,0,114,146,0,0,0,114,55,0,0,0,115, + 1,0,0,0,32,114,57,0,0,0,218,10,105,115,100,101, + 118,100,114,105,118,101,114,26,1,0,0,129,3,0,0,115, + 40,0,0,0,128,0,240,4,3,9,25,220,19,35,164,71, + 168,68,163,77,211,19,50,208,12,50,248,220,15,22,242,0, + 1,9,25,217,19,24,240,3,1,9,25,250,115,12,0,0, + 0,130,19,22,0,150,9,34,3,161,1,34,3,99,1,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,243,4,0,0,0,151,0,121,1,114,25,1,0,0, + 169,0,114,55,0,0,0,115,1,0,0,0,32,114,57,0, + 0,0,114,26,1,0,0,114,26,1,0,0,124,3,0,0, + 115,7,0,0,0,128,0,240,6,0,16,21,114,59,0,0, + 0,41,1,78,41,65,218,7,95,95,100,111,99,95,95,114, + 34,0,0,0,114,35,0,0,0,114,40,0,0,0,114,36, + 0,0,0,114,37,0,0,0,114,39,0,0,0,114,38,0, + 0,0,114,41,0,0,0,114,66,0,0,0,114,68,0,0, + 0,114,149,0,0,0,114,97,0,0,0,218,7,95,95,97, + 108,108,95,95,114,58,0,0,0,218,7,95,119,105,110,97, + 112,105,114,60,0,0,0,114,72,0,0,0,114,61,0,0, + 0,114,73,0,0,0,114,62,0,0,0,114,74,0,0,0, + 114,10,0,0,0,218,11,73,109,112,111,114,116,69,114,114, + 111,114,114,11,0,0,0,114,12,0,0,0,114,13,0,0, + 0,114,14,0,0,0,114,15,0,0,0,114,16,0,0,0, + 114,136,0,0,0,114,17,0,0,0,114,18,0,0,0,218, + 7,104,97,115,97,116,116,114,218,11,115,116,97,116,95,114, + 101,115,117,108,116,114,49,0,0,0,114,26,0,0,0,218, + 2,110,116,114,155,0,0,0,114,29,0,0,0,114,30,0, + 0,0,114,31,0,0,0,114,204,0,0,0,114,32,0,0, + 0,114,210,0,0,0,114,33,0,0,0,114,217,0,0,0, + 114,218,0,0,0,114,228,0,0,0,114,234,0,0,0,114, + 242,0,0,0,114,42,0,0,0,114,43,0,0,0,114,44, + 0,0,0,114,48,0,0,0,114,19,1,0,0,114,27,0, + 0,0,114,20,1,0,0,114,28,0,0,0,114,21,1,0, + 0,114,24,0,0,0,114,22,1,0,0,114,25,0,0,0, + 114,23,1,0,0,114,26,1,0,0,114,28,1,0,0,114, + 59,0,0,0,114,57,0,0,0,218,8,60,109,111,100,117, + 108,101,62,114,36,1,0,0,1,0,0,0,115,227,1,0, + 0,240,3,1,1,1,241,4,4,1,4,240,18,0,10,13, + 128,6,216,9,13,128,6,216,9,12,128,6,216,6,10,128, + 3,216,10,13,128,7,216,9,12,128,6,216,10,21,128,7, + 216,10,15,128,7,227,0,9,219,0,10,219,0,11,219,0, + 18,220,0,25,242,6,6,11,79,1,128,7,242,16,4,1, + 21,240,20,33,1,44,247,2,3,5,45,241,0,3,5,45, + 242,10,17,5,56,242,72,1,16,1,17,242,40,43,1,14, + 242,98,1,20,1,30,242,46,49,1,31,242,114,1,13,1, + 43,242,42,5,1,56,240,12,0,20,31,215,19,40,209,19, + 40,215,19,48,209,19,48,128,8,212,0,16,242,10,2,1, + 23,242,14,2,1,23,241,14,0,4,11,136,50,143,62,137, + 62,208,27,43,212,3,44,243,2,6,5,74,1,242,16,3, + 5,21,242,16,6,1,16,240,36,3,1,30,221,4,37,242, + 6,17,1,21,242,58,45,1,31,242,122,1,106,1,1,15, + 240,96,3,38,1,40,221,4,45,240,82,1,41,1,30,221, + 4,35,242,30,25,5,30,240,54,93,2,1,20,223,4,62, + 242,10,40,5,20,242,84,1,47,5,20,240,98,1,0,34, + 39,244,0,60,5,20,240,64,2,0,30,34,208,0,26,243, + 4,43,1,14,242,112,1,46,1,14,240,98,1,10,1,9, + 245,8,0,5,40,221,4,41,221,4,41,221,4,41,240,12, + 13,1,25,221,4,35,243,14,5,5,25,248,240,121,25,0, + 8,19,242,0,9,1,44,244,2,8,5,44,240,3,9,1, + 44,251,240,116,7,0,8,19,242,0,1,1,30,216,25,29, + 210,4,22,240,3,1,1,30,251,240,94,6,0,8,19,242, + 0,35,1,40,244,2,34,5,40,240,3,35,1,40,251,240, + 84,1,0,8,19,242,0,10,1,30,244,2,9,5,30,240, + 3,10,1,30,251,240,84,1,0,8,19,242,0,2,1,23, + 224,15,22,130,72,240,5,2,1,23,251,240,100,8,0,8, + 19,242,0,2,1,9,225,4,8,240,5,2,1,9,251,240, + 14,0,8,19,242,0,4,1,21,244,2,3,5,21,240,3, + 4,1,21,250,115,125,0,0,0,176,13,67,48,0,194,14, + 6,67,62,0,194,30,6,68,11,0,194,37,6,68,25,0, + 194,47,8,68,39,0,195,13,24,68,52,0,195,38,6,68, + 63,0,195,48,8,67,59,3,195,58,1,67,59,3,195,62, + 7,68,8,3,196,7,1,68,8,3,196,11,8,68,22,3, + 196,21,1,68,22,3,196,25,8,68,36,3,196,35,1,68, + 36,3,196,39,7,68,49,3,196,48,1,68,49,3,196,52, + 5,68,60,3,196,59,1,68,60,3,196,63,8,69,10,3, + 197,9,1,69,10,3, }; diff --git a/contrib/tools/python3/Python/frozen_modules/site.h b/contrib/tools/python3/Python/frozen_modules/site.h index 7de3b27654..b91a82ef21 100644 --- a/contrib/tools/python3/Python/frozen_modules/site.h +++ b/contrib/tools/python3/Python/frozen_modules/site.h @@ -1110,664 +1110,666 @@ const unsigned char _Py_M__site[] = { 114,105,103,104,116,39,32,97,110,100,32,39,99,114,101,100, 105,116,115,39,32,105,110,32,98,117,105,108,116,105,110,115, 218,9,99,111,112,121,114,105,103,104,116,218,7,99,114,101, - 100,105,116,115,122,158,32,32,32,32,84,104,97,110,107,115, + 100,105,116,115,122,191,32,32,32,32,84,104,97,110,107,115, 32,116,111,32,67,87,73,44,32,67,78,82,73,44,32,66, - 101,79,112,101,110,46,99,111,109,44,32,90,111,112,101,32, - 67,111,114,112,111,114,97,116,105,111,110,32,97,110,100,32, - 97,32,99,97,115,116,32,111,102,32,116,104,111,117,115,97, - 110,100,115,10,32,32,32,32,102,111,114,32,115,117,112,112, - 111,114,116,105,110,103,32,80,121,116,104,111,110,32,100,101, - 118,101,108,111,112,109,101,110,116,46,32,32,83,101,101,32, - 119,119,119,46,112,121,116,104,111,110,46,111,114,103,32,102, - 111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116, - 105,111,110,46,218,11,95,115,116,100,108,105,98,95,100,105, - 114,78,114,37,0,0,0,122,11,76,73,67,69,78,83,69, - 46,116,120,116,218,7,76,73,67,69,78,83,69,218,7,108, - 105,99,101,110,115,101,122,39,83,101,101,32,104,116,116,112, - 115,58,47,47,119,119,119,46,112,121,116,104,111,110,46,111, - 114,103,47,112,115,102,47,108,105,99,101,110,115,101,47,41, - 17,114,175,0,0,0,218,8,95,80,114,105,110,116,101,114, - 114,6,0,0,0,114,181,0,0,0,114,177,0,0,0,114, - 182,0,0,0,114,64,0,0,0,114,110,0,0,0,114,17, - 0,0,0,114,18,0,0,0,218,7,100,105,114,110,97,109, - 101,114,37,0,0,0,218,6,101,120,116,101,110,100,114,19, - 0,0,0,218,6,112,97,114,100,105,114,218,6,99,117,114, - 100,105,114,114,185,0,0,0,41,3,218,5,102,105,108,101, - 115,218,4,100,105,114,115,218,4,104,101,114,101,115,3,0, - 0,0,32,32,32,114,12,0,0,0,218,12,115,101,116,99, - 111,112,121,114,105,103,104,116,114,194,0,0,0,169,1,0, - 0,115,208,0,0,0,128,0,228,25,38,215,25,47,209,25, - 47,176,11,188,83,191,93,185,93,211,25,75,132,72,212,4, - 22,220,23,36,215,23,45,209,23,45,168,105,240,0,2,58, - 84,1,243,0,2,24,85,1,132,72,212,4,20,240,6,0, - 19,21,144,98,136,52,128,69,244,6,0,12,19,148,51,152, - 13,160,116,211,11,44,128,68,217,11,15,148,71,156,66,160, - 10,212,20,43,220,15,17,143,119,137,119,143,127,137,127,156, - 114,159,123,153,123,211,15,43,136,4,217,7,11,216,8,13, - 143,12,137,12,144,109,160,89,208,21,47,212,8,48,216,8, - 12,143,11,137,11,148,82,151,87,145,87,151,92,145,92,160, - 36,172,2,175,9,169,9,211,21,50,176,68,188,34,191,41, - 185,41,208,20,68,212,8,69,220,23,36,215,23,45,209,23, - 45,216,8,17,216,8,49,216,8,13,136,116,243,7,3,24, - 21,132,72,213,4,20,114,14,0,0,0,99,0,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, - 243,62,0,0,0,151,0,116,1,0,0,0,0,0,0,0, - 0,106,2,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,171,0,0,0,0,0,0,0,116,4,0, - 0,0,0,0,0,0,0,95,3,0,0,0,0,0,0,0, - 0,121,0,114,16,0,0,0,41,4,114,175,0,0,0,218, - 7,95,72,101,108,112,101,114,114,177,0,0,0,218,4,104, - 101,108,112,114,111,0,0,0,114,14,0,0,0,114,12,0, - 0,0,218,9,115,101,116,104,101,108,112,101,114,114,198,0, - 0,0,190,1,0,0,115,18,0,0,0,128,0,220,20,33, - 215,20,41,209,20,41,211,20,43,132,72,133,77,114,14,0, - 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,3,0,0,0,243,32,0,0,0,151,0,100,1, - 132,0,125,0,124,0,116,0,0,0,0,0,0,0,0,0, - 95,1,0,0,0,0,0,0,0,0,121,2,41,3,97,106, - 1,0,0,69,110,97,98,108,101,32,100,101,102,97,117,108, - 116,32,114,101,97,100,108,105,110,101,32,99,111,110,102,105, - 103,117,114,97,116,105,111,110,32,111,110,32,105,110,116,101, - 114,97,99,116,105,118,101,32,112,114,111,109,112,116,115,44, - 32,98,121,10,32,32,32,32,114,101,103,105,115,116,101,114, - 105,110,103,32,97,32,115,121,115,46,95,95,105,110,116,101, - 114,97,99,116,105,118,101,104,111,111,107,95,95,46,10,10, - 32,32,32,32,73,102,32,116,104,101,32,114,101,97,100,108, - 105,110,101,32,109,111,100,117,108,101,32,99,97,110,32,98, - 101,32,105,109,112,111,114,116,101,100,44,32,116,104,101,32, - 104,111,111,107,32,119,105,108,108,32,115,101,116,32,116,104, - 101,32,84,97,98,32,107,101,121,10,32,32,32,32,97,115, - 32,99,111,109,112,108,101,116,105,111,110,32,107,101,121,32, - 97,110,100,32,114,101,103,105,115,116,101,114,32,126,47,46, - 112,121,116,104,111,110,95,104,105,115,116,111,114,121,32,97, - 115,32,104,105,115,116,111,114,121,32,102,105,108,101,46,10, - 32,32,32,32,84,104,105,115,32,99,97,110,32,98,101,32, - 111,118,101,114,114,105,100,100,101,110,32,105,110,32,116,104, - 101,32,115,105,116,101,99,117,115,116,111,109,105,122,101,32, - 111,114,32,117,115,101,114,99,117,115,116,111,109,105,122,101, - 32,109,111,100,117,108,101,44,10,32,32,32,32,111,114,32, - 105,110,32,97,32,80,89,84,72,79,78,83,84,65,82,84, - 85,80,32,102,105,108,101,46,10,32,32,32,32,99,0,0, - 0,0,0,0,0,0,0,0,0,0,5,0,0,0,19,0, - 0,0,243,254,1,0,0,135,4,135,5,151,0,100,1,100, - 0,108,0,125,0,9,0,100,1,100,0,108,1,138,5,100, - 1,100,0,108,2,125,1,116,9,0,0,0,0,0,0,0, - 0,137,5,100,2,100,3,171,3,0,0,0,0,0,0,125, - 2,124,2,129,22,100,4,124,2,118,0,114,18,137,5,106, - 11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,100,5,171,1,0,0,0,0,0,0,1,0,110, - 17,137,5,106,11,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,100,6,171,1,0,0,0,0,0, - 0,1,0,9,0,137,5,106,13,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,171,0,0,0,0, - 0,0,0,1,0,137,5,106,17,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,171,0,0,0,0, - 0,0,0,100,1,107,40,0,0,114,103,116,18,0,0,0, - 0,0,0,0,0,106,20,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,106,23,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,116,18,0, - 0,0,0,0,0,0,0,106,20,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,106,25,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, - 7,171,1,0,0,0,0,0,0,100,8,171,2,0,0,0, - 0,0,0,138,4,9,0,137,5,106,27,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,137,4,171, - 1,0,0,0,0,0,0,1,0,136,4,136,5,102,2,100, - 9,132,8,125,3,124,0,106,29,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,3,171,1,0, - 0,0,0,0,0,1,0,121,0,121,0,35,0,116,6,0, - 0,0,0,0,0,0,0,36,0,114,3,1,0,89,0,121, - 0,119,0,120,3,89,0,119,1,35,0,116,14,0,0,0, - 0,0,0,0,0,36,0,114,3,1,0,89,0,140,149,119, - 0,120,3,89,0,119,1,35,0,116,14,0,0,0,0,0, - 0,0,0,36,0,114,3,1,0,89,0,140,66,119,0,120, - 3,89,0,119,1,41,10,78,114,2,0,0,0,218,7,95, - 95,100,111,99,95,95,114,62,0,0,0,218,7,108,105,98, - 101,100,105,116,122,19,98,105,110,100,32,94,73,32,114,108, - 95,99,111,109,112,108,101,116,101,122,13,116,97,98,58,32, - 99,111,109,112,108,101,116,101,114,124,0,0,0,122,15,46, - 112,121,116,104,111,110,95,104,105,115,116,111,114,121,99,0, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,19, - 0,0,0,243,72,0,0,0,149,2,151,0,9,0,137,1, - 106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,137,0,171,1,0,0,0,0,0,0,1,0, - 121,0,35,0,116,2,0,0,0,0,0,0,0,0,36,0, - 114,3,1,0,89,0,121,0,119,0,120,3,89,0,119,1, - 114,16,0,0,0,41,2,218,18,119,114,105,116,101,95,104, - 105,115,116,111,114,121,95,102,105,108,101,114,21,0,0,0, - 41,2,218,7,104,105,115,116,111,114,121,218,8,114,101,97, - 100,108,105,110,101,115,2,0,0,0,128,128,114,12,0,0, - 0,218,13,119,114,105,116,101,95,104,105,115,116,111,114,121, - 122,67,101,110,97,98,108,101,114,108,99,111,109,112,108,101, - 116,101,114,46,60,108,111,99,97,108,115,62,46,114,101,103, - 105,115,116,101,114,95,114,101,97,100,108,105,110,101,46,60, - 108,111,99,97,108,115,62,46,119,114,105,116,101,95,104,105, - 115,116,111,114,121,240,1,0,0,115,42,0,0,0,248,128, - 0,240,2,5,17,25,216,20,28,215,20,47,209,20,47,176, - 7,213,20,56,248,220,23,30,242,0,3,17,25,241,6,0, - 21,25,240,7,3,17,25,250,115,12,0,0,0,131,17,21, - 0,149,9,33,3,160,1,33,3,41,15,218,6,97,116,101, - 120,105,116,114,206,0,0,0,218,11,114,108,99,111,109,112, - 108,101,116,101,114,218,11,73,109,112,111,114,116,69,114,114, - 111,114,114,64,0,0,0,218,14,112,97,114,115,101,95,97, - 110,100,95,98,105,110,100,218,14,114,101,97,100,95,105,110, - 105,116,95,102,105,108,101,114,21,0,0,0,218,26,103,101, - 116,95,99,117,114,114,101,110,116,95,104,105,115,116,111,114, - 121,95,108,101,110,103,116,104,114,17,0,0,0,114,18,0, - 0,0,114,19,0,0,0,114,119,0,0,0,218,17,114,101, - 97,100,95,104,105,115,116,111,114,121,95,102,105,108,101,218, - 8,114,101,103,105,115,116,101,114,41,6,114,208,0,0,0, - 114,209,0,0,0,218,12,114,101,97,100,108,105,110,101,95, - 100,111,99,114,207,0,0,0,114,205,0,0,0,114,206,0, - 0,0,115,6,0,0,0,32,32,32,32,64,64,114,12,0, - 0,0,218,17,114,101,103,105,115,116,101,114,95,114,101,97, - 100,108,105,110,101,122,44,101,110,97,98,108,101,114,108,99, - 111,109,112,108,101,116,101,114,46,60,108,111,99,97,108,115, - 62,46,114,101,103,105,115,116,101,114,95,114,101,97,100,108, - 105,110,101,202,1,0,0,115,254,0,0,0,249,128,0,219, - 8,21,240,2,4,9,19,219,12,27,219,12,30,244,12,0, - 24,31,152,120,168,25,176,66,211,23,55,136,12,216,11,23, - 208,11,35,168,9,176,92,209,40,65,216,12,20,215,12,35, - 209,12,35,208,36,57,213,12,58,224,12,20,215,12,35,209, - 12,35,160,79,212,12,52,240,4,7,9,17,216,12,20,215, - 12,35,209,12,35,212,12,37,240,16,0,12,20,215,11,46, - 209,11,46,211,11,48,176,65,210,11,53,244,12,0,23,25, - 151,103,145,103,151,108,145,108,164,50,167,55,161,55,215,35, - 53,209,35,53,176,99,211,35,58,216,35,52,243,3,1,23, - 54,136,71,240,4,3,13,21,216,16,24,215,16,42,209,16, - 42,168,55,212,16,51,245,8,6,13,25,240,16,0,13,19, - 143,79,137,79,152,77,213,12,42,240,43,0,12,54,248,244, - 41,0,16,27,242,0,1,9,19,217,12,18,240,3,1,9, - 19,251,244,26,0,16,23,242,0,5,9,17,241,10,0,13, - 17,240,11,5,9,17,251,244,34,0,20,27,242,0,1,13, - 21,217,16,20,240,3,1,13,21,250,115,53,0,0,0,136, - 8,67,18,0,193,7,16,67,33,0,194,40,17,67,48,0, - 195,18,9,67,30,3,195,29,1,67,30,3,195,33,9,67, - 45,3,195,44,1,67,45,3,195,48,9,67,60,3,195,59, - 1,67,60,3,78,41,2,114,6,0,0,0,218,19,95,95, - 105,110,116,101,114,97,99,116,105,118,101,104,111,111,107,95, - 95,41,1,114,217,0,0,0,115,1,0,0,0,32,114,12, - 0,0,0,218,17,101,110,97,98,108,101,114,108,99,111,109, - 112,108,101,116,101,114,114,219,0,0,0,193,1,0,0,115, - 18,0,0,0,128,0,242,18,46,5,43,240,96,1,0,31, - 48,132,67,213,4,27,114,14,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,8,0,0,0,3,0,0,0, - 243,66,4,0,0,151,0,116,0,0,0,0,0,0,0,0, - 0,106,2,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,125,1,116,4,0,0,0,0,0,0,0, - 0,106,6,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,100,1,107,40,0,0,114,35,100,2,124, - 1,118,0,114,31,116,0,0,0,0,0,0,0,0,0,106, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,100,2,25,0,0,0,120,1,125,2,116,4,0, - 0,0,0,0,0,0,0,95,4,0,0,0,0,0,0,0, - 0,110,16,116,4,0,0,0,0,0,0,0,0,106,10,0, + 101,79,112,101,110,44,32,90,111,112,101,32,67,111,114,112, + 111,114,97,116,105,111,110,44,32,116,104,101,32,80,121,116, + 104,111,110,32,83,111,102,116,119,97,114,101,10,32,32,32, + 32,70,111,117,110,100,97,116,105,111,110,44,32,97,110,100, + 32,97,32,99,97,115,116,32,111,102,32,116,104,111,117,115, + 97,110,100,115,32,102,111,114,32,115,117,112,112,111,114,116, + 105,110,103,32,80,121,116,104,111,110,10,32,32,32,32,100, + 101,118,101,108,111,112,109,101,110,116,46,32,32,83,101,101, + 32,119,119,119,46,112,121,116,104,111,110,46,111,114,103,32, + 102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97, + 116,105,111,110,46,218,11,95,115,116,100,108,105,98,95,100, + 105,114,78,114,37,0,0,0,122,11,76,73,67,69,78,83, + 69,46,116,120,116,218,7,76,73,67,69,78,83,69,218,7, + 108,105,99,101,110,115,101,122,39,83,101,101,32,104,116,116, + 112,115,58,47,47,119,119,119,46,112,121,116,104,111,110,46, + 111,114,103,47,112,115,102,47,108,105,99,101,110,115,101,47, + 41,17,114,175,0,0,0,218,8,95,80,114,105,110,116,101, + 114,114,6,0,0,0,114,181,0,0,0,114,177,0,0,0, + 114,182,0,0,0,114,64,0,0,0,114,110,0,0,0,114, + 17,0,0,0,114,18,0,0,0,218,7,100,105,114,110,97, + 109,101,114,37,0,0,0,218,6,101,120,116,101,110,100,114, + 19,0,0,0,218,6,112,97,114,100,105,114,218,6,99,117, + 114,100,105,114,114,185,0,0,0,41,3,218,5,102,105,108, + 101,115,218,4,100,105,114,115,218,4,104,101,114,101,115,3, + 0,0,0,32,32,32,114,12,0,0,0,218,12,115,101,116, + 99,111,112,121,114,105,103,104,116,114,194,0,0,0,169,1, + 0,0,115,206,0,0,0,128,0,228,25,38,215,25,47,209, + 25,47,176,11,188,83,191,93,185,93,211,25,75,132,72,212, + 4,22,220,23,36,215,23,45,209,23,45,168,105,240,0,3, + 58,62,243,0,3,24,63,132,72,212,4,20,240,8,0,19, + 21,144,98,136,52,128,69,244,6,0,12,19,148,51,152,13, + 160,116,211,11,44,128,68,217,11,15,148,71,156,66,160,10, + 212,20,43,220,15,17,143,119,137,119,143,127,137,127,156,114, + 159,123,153,123,211,15,43,136,4,217,7,11,216,8,13,143, + 12,137,12,144,109,160,89,208,21,47,212,8,48,216,8,12, + 143,11,137,11,148,82,151,87,145,87,151,92,145,92,160,36, + 172,2,175,9,169,9,211,21,50,176,68,188,34,191,41,185, + 41,208,20,68,212,8,69,220,23,36,215,23,45,209,23,45, + 216,8,17,216,8,49,216,8,13,136,116,243,7,3,24,21, + 132,72,213,4,20,114,14,0,0,0,99,0,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,243, + 62,0,0,0,151,0,116,1,0,0,0,0,0,0,0,0, + 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,171,0,0,0,0,0,0,0,116,4,0,0, + 0,0,0,0,0,0,95,3,0,0,0,0,0,0,0,0, + 121,0,114,16,0,0,0,41,4,114,175,0,0,0,218,7, + 95,72,101,108,112,101,114,114,177,0,0,0,218,4,104,101, + 108,112,114,111,0,0,0,114,14,0,0,0,114,12,0,0, + 0,218,9,115,101,116,104,101,108,112,101,114,114,198,0,0, + 0,191,1,0,0,115,18,0,0,0,128,0,220,20,33,215, + 20,41,209,20,41,211,20,43,132,72,133,77,114,14,0,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,3,0,0,0,243,32,0,0,0,151,0,100,1,132, + 0,125,0,124,0,116,0,0,0,0,0,0,0,0,0,95, + 1,0,0,0,0,0,0,0,0,121,2,41,3,97,106,1, + 0,0,69,110,97,98,108,101,32,100,101,102,97,117,108,116, + 32,114,101,97,100,108,105,110,101,32,99,111,110,102,105,103, + 117,114,97,116,105,111,110,32,111,110,32,105,110,116,101,114, + 97,99,116,105,118,101,32,112,114,111,109,112,116,115,44,32, + 98,121,10,32,32,32,32,114,101,103,105,115,116,101,114,105, + 110,103,32,97,32,115,121,115,46,95,95,105,110,116,101,114, + 97,99,116,105,118,101,104,111,111,107,95,95,46,10,10,32, + 32,32,32,73,102,32,116,104,101,32,114,101,97,100,108,105, + 110,101,32,109,111,100,117,108,101,32,99,97,110,32,98,101, + 32,105,109,112,111,114,116,101,100,44,32,116,104,101,32,104, + 111,111,107,32,119,105,108,108,32,115,101,116,32,116,104,101, + 32,84,97,98,32,107,101,121,10,32,32,32,32,97,115,32, + 99,111,109,112,108,101,116,105,111,110,32,107,101,121,32,97, + 110,100,32,114,101,103,105,115,116,101,114,32,126,47,46,112, + 121,116,104,111,110,95,104,105,115,116,111,114,121,32,97,115, + 32,104,105,115,116,111,114,121,32,102,105,108,101,46,10,32, + 32,32,32,84,104,105,115,32,99,97,110,32,98,101,32,111, + 118,101,114,114,105,100,100,101,110,32,105,110,32,116,104,101, + 32,115,105,116,101,99,117,115,116,111,109,105,122,101,32,111, + 114,32,117,115,101,114,99,117,115,116,111,109,105,122,101,32, + 109,111,100,117,108,101,44,10,32,32,32,32,111,114,32,105, + 110,32,97,32,80,89,84,72,79,78,83,84,65,82,84,85, + 80,32,102,105,108,101,46,10,32,32,32,32,99,0,0,0, + 0,0,0,0,0,0,0,0,0,5,0,0,0,19,0,0, + 0,243,254,1,0,0,135,4,135,5,151,0,100,1,100,0, + 108,0,125,0,9,0,100,1,100,0,108,1,138,5,100,1, + 100,0,108,2,125,1,116,9,0,0,0,0,0,0,0,0, + 137,5,100,2,100,3,171,3,0,0,0,0,0,0,125,2, + 124,2,129,22,100,4,124,2,118,0,114,18,137,5,106,11, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,125,2,116,0,0,0,0,0,0,0,0,0,106,12,0, + 0,0,100,5,171,1,0,0,0,0,0,0,1,0,110,17, + 137,5,106,11,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,100,6,171,1,0,0,0,0,0,0, + 1,0,9,0,137,5,106,13,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,171,0,0,0,0,0, + 0,0,1,0,137,5,106,17,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,171,0,0,0,0,0, + 0,0,100,1,107,40,0,0,114,103,116,18,0,0,0,0, + 0,0,0,0,106,20,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,106,23,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,116,18,0,0, + 0,0,0,0,0,0,106,20,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,106,25,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,7, + 171,1,0,0,0,0,0,0,100,8,171,2,0,0,0,0, + 0,0,138,4,9,0,137,5,106,27,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,137,4,171,1, + 0,0,0,0,0,0,1,0,136,4,136,5,102,2,100,9, + 132,8,125,3,124,0,106,29,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,3,171,1,0,0, + 0,0,0,0,1,0,121,0,121,0,35,0,116,6,0,0, + 0,0,0,0,0,0,36,0,114,3,1,0,89,0,121,0, + 119,0,120,3,89,0,119,1,35,0,116,14,0,0,0,0, + 0,0,0,0,36,0,114,3,1,0,89,0,140,149,119,0, + 120,3,89,0,119,1,35,0,116,14,0,0,0,0,0,0, + 0,0,36,0,114,3,1,0,89,0,140,66,119,0,120,3, + 89,0,119,1,41,10,78,114,2,0,0,0,218,7,95,95, + 100,111,99,95,95,114,62,0,0,0,218,7,108,105,98,101, + 100,105,116,122,19,98,105,110,100,32,94,73,32,114,108,95, + 99,111,109,112,108,101,116,101,122,13,116,97,98,58,32,99, + 111,109,112,108,101,116,101,114,124,0,0,0,122,15,46,112, + 121,116,104,111,110,95,104,105,115,116,111,114,121,99,0,0, + 0,0,0,0,0,0,0,0,0,0,4,0,0,0,19,0, + 0,0,243,72,0,0,0,149,2,151,0,9,0,137,1,106, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,137,0,171,1,0,0,0,0,0,0,1,0,121, + 0,35,0,116,2,0,0,0,0,0,0,0,0,36,0,114, + 3,1,0,89,0,121,0,119,0,120,3,89,0,119,1,114, + 16,0,0,0,41,2,218,18,119,114,105,116,101,95,104,105, + 115,116,111,114,121,95,102,105,108,101,114,21,0,0,0,41, + 2,218,7,104,105,115,116,111,114,121,218,8,114,101,97,100, + 108,105,110,101,115,2,0,0,0,128,128,114,12,0,0,0, + 218,13,119,114,105,116,101,95,104,105,115,116,111,114,121,122, + 67,101,110,97,98,108,101,114,108,99,111,109,112,108,101,116, + 101,114,46,60,108,111,99,97,108,115,62,46,114,101,103,105, + 115,116,101,114,95,114,101,97,100,108,105,110,101,46,60,108, + 111,99,97,108,115,62,46,119,114,105,116,101,95,104,105,115, + 116,111,114,121,241,1,0,0,115,42,0,0,0,248,128,0, + 240,2,5,17,25,216,20,28,215,20,47,209,20,47,176,7, + 213,20,56,248,220,23,30,242,0,3,17,25,241,6,0,21, + 25,240,7,3,17,25,250,115,12,0,0,0,131,17,21,0, + 149,9,33,3,160,1,33,3,41,15,218,6,97,116,101,120, + 105,116,114,206,0,0,0,218,11,114,108,99,111,109,112,108, + 101,116,101,114,218,11,73,109,112,111,114,116,69,114,114,111, + 114,114,64,0,0,0,218,14,112,97,114,115,101,95,97,110, + 100,95,98,105,110,100,218,14,114,101,97,100,95,105,110,105, + 116,95,102,105,108,101,114,21,0,0,0,218,26,103,101,116, + 95,99,117,114,114,101,110,116,95,104,105,115,116,111,114,121, + 95,108,101,110,103,116,104,114,17,0,0,0,114,18,0,0, + 0,114,19,0,0,0,114,119,0,0,0,218,17,114,101,97, + 100,95,104,105,115,116,111,114,121,95,102,105,108,101,218,8, + 114,101,103,105,115,116,101,114,41,6,114,208,0,0,0,114, + 209,0,0,0,218,12,114,101,97,100,108,105,110,101,95,100, + 111,99,114,207,0,0,0,114,205,0,0,0,114,206,0,0, + 0,115,6,0,0,0,32,32,32,32,64,64,114,12,0,0, + 0,218,17,114,101,103,105,115,116,101,114,95,114,101,97,100, + 108,105,110,101,122,44,101,110,97,98,108,101,114,108,99,111, + 109,112,108,101,116,101,114,46,60,108,111,99,97,108,115,62, + 46,114,101,103,105,115,116,101,114,95,114,101,97,100,108,105, + 110,101,203,1,0,0,115,254,0,0,0,249,128,0,219,8, + 21,240,2,4,9,19,219,12,27,219,12,30,244,12,0,24, + 31,152,120,168,25,176,66,211,23,55,136,12,216,11,23,208, + 11,35,168,9,176,92,209,40,65,216,12,20,215,12,35,209, + 12,35,208,36,57,213,12,58,224,12,20,215,12,35,209,12, + 35,160,79,212,12,52,240,4,7,9,17,216,12,20,215,12, + 35,209,12,35,212,12,37,240,16,0,12,20,215,11,46,209, + 11,46,211,11,48,176,65,210,11,53,244,12,0,23,25,151, + 103,145,103,151,108,145,108,164,50,167,55,161,55,215,35,53, + 209,35,53,176,99,211,35,58,216,35,52,243,3,1,23,54, + 136,71,240,4,3,13,21,216,16,24,215,16,42,209,16,42, + 168,55,212,16,51,245,8,6,13,25,240,16,0,13,19,143, + 79,137,79,152,77,213,12,42,240,43,0,12,54,248,244,41, + 0,16,27,242,0,1,9,19,217,12,18,240,3,1,9,19, + 251,244,26,0,16,23,242,0,5,9,17,241,10,0,13,17, + 240,11,5,9,17,251,244,34,0,20,27,242,0,1,13,21, + 217,16,20,240,3,1,13,21,250,115,53,0,0,0,136,8, + 67,18,0,193,7,16,67,33,0,194,40,17,67,48,0,195, + 18,9,67,30,3,195,29,1,67,30,3,195,33,9,67,45, + 3,195,44,1,67,45,3,195,48,9,67,60,3,195,59,1, + 67,60,3,78,41,2,114,6,0,0,0,218,19,95,95,105, + 110,116,101,114,97,99,116,105,118,101,104,111,111,107,95,95, + 41,1,114,217,0,0,0,115,1,0,0,0,32,114,12,0, + 0,0,218,17,101,110,97,98,108,101,114,108,99,111,109,112, + 108,101,116,101,114,114,219,0,0,0,194,1,0,0,115,18, + 0,0,0,128,0,242,18,46,5,43,240,96,1,0,31,48, + 132,67,213,4,27,114,14,0,0,0,99,1,0,0,0,0, + 0,0,0,0,0,0,0,8,0,0,0,3,0,0,0,243, + 66,4,0,0,151,0,116,0,0,0,0,0,0,0,0,0, + 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,125,1,116,4,0,0,0,0,0,0,0,0, + 106,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,100,1,107,40,0,0,114,35,100,2,124,1, + 118,0,114,31,116,0,0,0,0,0,0,0,0,0,106,2, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,106,15,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,116,0,0,0,0,0,0,0,0,0,106, - 12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,106,17,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,2,171,1,0,0,0,0,0, - 0,171,1,0,0,0,0,0,0,125,3,116,0,0,0,0, - 0,0,0,0,0,106,12,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,106,15,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,3,171, - 1,0,0,0,0,0,0,125,4,100,0,116,4,0,0,0, - 0,0,0,0,0,95,9,0,0,0,0,0,0,0,0,100, - 3,125,5,116,21,0,0,0,0,0,0,0,0,100,4,132, - 0,116,0,0,0,0,0,0,0,0,0,106,12,0,0,0, + 0,0,100,2,25,0,0,0,120,1,125,2,116,4,0,0, + 0,0,0,0,0,0,95,4,0,0,0,0,0,0,0,0, + 110,16,116,4,0,0,0,0,0,0,0,0,106,10,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 125,2,116,0,0,0,0,0,0,0,0,0,106,12,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 106,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,116,0,0,0,0,0,0,0,0,0,106,12, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,106,17,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,2,171,1,0,0,0,0,0,0, + 171,1,0,0,0,0,0,0,125,3,116,0,0,0,0,0, + 0,0,0,0,106,12,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,106,15,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,124,3,171,1, + 0,0,0,0,0,0,125,4,100,0,116,4,0,0,0,0, + 0,0,0,0,95,9,0,0,0,0,0,0,0,0,100,3, + 125,5,116,21,0,0,0,0,0,0,0,0,100,4,132,0, + 116,0,0,0,0,0,0,0,0,0,106,12,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,106,23, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,124,3,124,5,171,2,0,0,0,0,0,0,116,0, + 0,0,0,0,0,0,0,0,106,12,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,106,23,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 124,4,124,5,171,2,0,0,0,0,0,0,102,2,68,0, + 171,0,0,0,0,0,0,0,100,0,171,2,0,0,0,0, + 0,0,125,6,124,6,144,1,114,0,124,6,125,7,100,5, + 125,8,116,25,0,0,0,0,0,0,0,0,124,7,100,6, + 172,7,171,2,0,0,0,0,0,0,53,0,125,9,124,9, + 68,0,93,113,0,0,125,10,100,8,124,10,118,0,115,1, + 140,8,124,10,106,27,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,100,8,171,1,0,0,0,0, + 0,0,92,3,0,0,125,11,125,12,125,13,124,11,106,29, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,171,0,0,0,0,0,0,0,106,31,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,0, + 0,0,0,0,0,0,125,11,124,13,106,29,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,0, + 0,0,0,0,0,0,125,13,124,11,100,9,107,40,0,0, + 114,17,124,13,106,31,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0, + 125,8,140,97,124,11,100,10,107,40,0,0,115,1,140,103, + 124,13,116,4,0,0,0,0,0,0,0,0,95,9,0,0, + 0,0,0,0,0,0,140,115,4,0,9,0,100,0,100,0, + 100,0,171,2,0,0,0,0,0,0,1,0,124,4,120,1, + 116,4,0,0,0,0,0,0,0,0,95,16,0,0,0,0, + 0,0,0,0,116,4,0,0,0,0,0,0,0,0,95,17, + 0,0,0,0,0,0,0,0,116,37,0,0,0,0,0,0, + 0,0,124,0,116,4,0,0,0,0,0,0,0,0,106,32, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,103,1,171,2,0,0,0,0,0,0,1,0,124,8, + 100,5,107,40,0,0,114,38,116,38,0,0,0,0,0,0, + 0,0,106,41,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,100,11,116,4,0,0,0,0,0,0, + 0,0,106,32,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,171,2,0,0,0,0,0,0,1,0, + 124,0,83,0,116,4,0,0,0,0,0,0,0,0,106,32, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,103,1,97,19,100,12,97,21,124,0,83,0,35,0, + 49,0,115,1,119,2,1,0,89,0,1,0,1,0,140,122, + 120,3,89,0,119,1,41,13,78,114,126,0,0,0,218,19, + 95,95,80,89,86,69,78,86,95,76,65,85,78,67,72,69, + 82,95,95,122,10,112,121,118,101,110,118,46,99,102,103,99, + 1,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, + 51,0,0,0,243,94,0,0,0,75,0,1,0,151,0,124, + 0,93,37,0,0,125,1,116,0,0,0,0,0,0,0,0, + 0,106,2,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,106,5,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,1,171,1,0,0,0, + 0,0,0,114,4,124,1,150,1,151,1,1,0,140,39,4, + 0,121,0,173,3,119,1,114,16,0,0,0,41,3,114,17, + 0,0,0,114,18,0,0,0,218,6,105,115,102,105,108,101, + 41,2,218,2,46,48,218,8,99,111,110,102,102,105,108,101, + 115,2,0,0,0,32,32,114,12,0,0,0,218,9,60,103, + 101,110,101,120,112,114,62,122,23,118,101,110,118,46,60,108, + 111,99,97,108,115,62,46,60,103,101,110,101,120,112,114,62, + 10,2,0,0,115,46,0,0,0,232,0,248,128,0,240,0, + 6,9,10,241,2,3,38,14,152,24,244,8,0,16,18,143, + 119,137,119,143,126,137,126,152,104,212,15,39,244,9,0,13, + 21,241,0,3,38,14,249,115,4,0,0,0,130,43,45,1, + 218,4,116,114,117,101,122,5,117,116,102,45,56,41,1,218, + 8,101,110,99,111,100,105,110,103,218,1,61,122,28,105,110, + 99,108,117,100,101,45,115,121,115,116,101,109,45,115,105,116, + 101,45,112,97,99,107,97,103,101,115,218,4,104,111,109,101, + 114,2,0,0,0,70,41,22,114,17,0,0,0,114,129,0, + 0,0,114,6,0,0,0,114,131,0,0,0,218,16,95,98, + 97,115,101,95,101,120,101,99,117,116,97,98,108,101,218,10, + 101,120,101,99,117,116,97,98,108,101,114,18,0,0,0,114, + 187,0,0,0,114,20,0,0,0,218,5,95,104,111,109,101, + 218,4,110,101,120,116,114,19,0,0,0,218,4,111,112,101, + 110,218,9,112,97,114,116,105,116,105,111,110,114,78,0,0, + 0,218,5,108,111,119,101,114,114,165,0,0,0,218,11,101, + 120,101,99,95,112,114,101,102,105,120,114,170,0,0,0,114, + 159,0,0,0,218,6,105,110,115,101,114,116,114,149,0,0, + 0,41,14,114,47,0,0,0,218,3,101,110,118,114,232,0, + 0,0,218,7,101,120,101,95,100,105,114,218,11,115,105,116, + 101,95,112,114,101,102,105,120,218,13,99,111,110,102,95,98, + 97,115,101,110,97,109,101,218,14,99,97,110,100,105,100,97, + 116,101,95,99,111,110,102,218,12,118,105,114,116,117,97,108, + 95,99,111,110,102,218,11,115,121,115,116,101,109,95,115,105, + 116,101,114,89,0,0,0,114,92,0,0,0,218,3,107,101, + 121,114,54,0,0,0,218,5,118,97,108,117,101,115,14,0, + 0,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32, + 114,12,0,0,0,218,4,118,101,110,118,114,249,0,0,0, + 253,1,0,0,115,176,1,0,0,128,0,244,6,0,11,13, + 143,42,137,42,128,67,220,7,10,135,124,129,124,144,120,210, + 7,31,208,36,57,184,83,209,36,64,220,44,46,175,74,169, + 74,208,55,76,209,44,77,208,8,77,136,10,148,83,213,21, + 41,228,21,24,151,94,145,94,136,10,220,14,16,143,103,137, + 103,143,111,137,111,156,98,159,103,153,103,159,111,153,111,168, + 106,211,30,57,211,14,58,128,71,220,18,20,151,39,145,39, + 151,47,145,47,160,39,211,18,42,128,75,216,16,20,132,67, + 132,73,216,20,32,128,77,220,21,25,241,2,6,9,10,228, + 16,18,151,7,145,7,151,12,145,12,152,87,160,109,211,16, + 52,220,16,18,151,7,145,7,151,12,145,12,152,91,168,45, + 211,16,56,241,5,3,38,14,243,3,6,9,10,240,14,0, + 9,13,243,17,9,22,6,128,78,242,22,0,8,22,216,23, + 37,136,12,216,22,28,136,11,244,6,0,14,18,144,44,168, + 23,213,13,49,176,81,219,24,25,144,4,216,19,22,152,36, + 146,59,216,36,40,167,78,161,78,176,51,211,36,55,145,77, + 144,67,152,17,152,69,216,26,29,159,41,153,41,155,43,215, + 26,43,209,26,43,211,26,45,144,67,216,28,33,159,75,153, + 75,155,77,144,69,216,23,26,208,30,60,210,23,60,216,38, + 43,167,107,161,107,163,109,153,11,216,25,28,160,6,155,29, + 216,36,41,156,3,157,9,241,17,0,25,26,247,3,0,14, + 50,240,22,0,40,51,208,8,50,140,3,140,10,148,83,148, + 95,244,6,0,9,24,152,11,164,99,167,106,161,106,160,92, + 212,8,50,240,8,0,12,23,152,38,210,11,32,220,12,20, + 143,79,137,79,152,65,156,115,159,122,153,122,212,12,42,240, + 10,0,12,23,208,4,22,244,7,0,25,28,159,10,153,10, + 144,124,136,72,216,31,36,208,12,28,224,11,22,208,4,22, + 247,49,0,14,50,208,13,49,250,115,25,0,0,0,196,36, + 10,72,21,3,196,47,65,30,72,21,3,198,14,13,72,21, + 3,200,21,5,72,30,7,99,0,0,0,0,0,0,0,0, + 0,0,0,0,8,0,0,0,3,0,0,0,243,134,1,0, + 0,151,0,9,0,9,0,100,1,100,2,108,0,125,0,121, + 2,35,0,116,2,0,0,0,0,0,0,0,0,36,0,114, + 27,125,1,124,1,106,4,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,100,3,107,40,0,0,114, + 1,110,1,130,0,89,0,100,2,125,1,126,1,121,2,100, + 2,125,1,126,1,119,1,119,0,120,3,89,0,119,1,35, + 0,116,6,0,0,0,0,0,0,0,0,36,0,114,136,125, + 2,116,8,0,0,0,0,0,0,0,0,106,10,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106, - 23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,3,124,5,171,2,0,0,0,0,0,0,116, - 0,0,0,0,0,0,0,0,0,106,12,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,106,23,0, + 12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,114,37,116,9,0,0,0,0,0,0,0,0,106, + 14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,116,9,0,0,0,0,0,0,0,0,106,16,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,4,124,5,171,2,0,0,0,0,0,0,102,2,68, - 0,171,0,0,0,0,0,0,0,100,0,171,2,0,0,0, - 0,0,0,125,6,124,6,144,1,114,0,124,6,125,7,100, - 5,125,8,116,25,0,0,0,0,0,0,0,0,124,7,100, - 6,172,7,171,2,0,0,0,0,0,0,53,0,125,9,124, - 9,68,0,93,113,0,0,125,10,100,8,124,10,118,0,115, - 1,140,8,124,10,106,27,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,100,8,171,1,0,0,0, - 0,0,0,92,3,0,0,125,11,125,12,125,13,124,11,106, - 29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,171,0,0,0,0,0,0,0,106,31,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, - 0,0,0,0,0,0,0,125,11,124,13,106,29,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, - 0,0,0,0,0,0,0,125,13,124,11,100,9,107,40,0, - 0,114,17,124,13,106,31,0,0,0,0,0,0,0,0,0, + 0,171,0,0,0,0,0,0,0,142,0,1,0,110,63,116, + 8,0,0,0,0,0,0,0,0,106,18,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,106,21,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,100,4,124,2,106,22,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,106,24,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,155,1,100, + 5,124,2,155,1,100,6,157,5,171,1,0,0,0,0,0, + 0,1,0,89,0,100,2,125,2,126,2,121,2,89,0,100, + 2,125,2,126,2,121,2,100,2,125,2,126,2,119,1,119, + 0,120,3,89,0,119,1,41,7,122,44,82,117,110,32,99, + 117,115,116,111,109,32,115,105,116,101,32,115,112,101,99,105, + 102,105,99,32,99,111,100,101,44,32,105,102,32,97,118,97, + 105,108,97,98,108,101,46,114,2,0,0,0,78,218,13,115, + 105,116,101,99,117,115,116,111,109,105,122,101,122,57,69,114, + 114,111,114,32,105,110,32,115,105,116,101,99,117,115,116,111, + 109,105,122,101,59,32,115,101,116,32,80,89,84,72,79,78, + 86,69,82,66,79,83,69,32,102,111,114,32,116,114,97,99, + 101,98,97,99,107,58,10,250,2,58,32,218,1,10,41,13, + 114,251,0,0,0,114,210,0,0,0,114,85,0,0,0,114, + 81,0,0,0,114,6,0,0,0,114,7,0,0,0,114,8, + 0,0,0,218,10,101,120,99,101,112,116,104,111,111,107,218, + 8,101,120,99,95,105,110,102,111,114,10,0,0,0,218,5, + 119,114,105,116,101,218,9,95,95,99,108,97,115,115,95,95, + 218,8,95,95,110,97,109,101,95,95,41,3,114,251,0,0, + 0,114,93,0,0,0,218,3,101,114,114,115,3,0,0,0, + 32,32,32,114,12,0,0,0,218,17,101,120,101,99,115,105, + 116,101,99,117,115,116,111,109,105,122,101,114,4,1,0,0, + 52,2,0,0,243,152,0,0,0,128,0,240,4,15,5,47, + 240,2,6,9,22,220,12,32,248,220,15,26,242,0,4,9, + 22,216,15,18,143,120,137,120,152,63,210,15,42,216,16,20, + 224,16,21,244,5,0,17,21,251,240,5,4,9,22,251,244, + 10,0,12,21,242,0,7,5,47,220,11,14,143,57,137,57, + 215,11,28,210,11,28,220,12,15,143,78,137,78,156,67,159, + 76,153,76,155,78,210,12,43,228,12,15,143,74,137,74,215, + 12,28,210,12,28,240,6,0,18,21,151,29,145,29,215,17, + 39,211,17,39,170,19,240,5,2,17,46,247,3,3,13,47, + 241,0,3,13,47,244,5,0,13,44,251,240,5,7,5,47, + 250,243,41,0,0,0,131,4,8,0,136,9,44,3,145,17, + 39,3,162,4,47,0,167,5,44,3,172,3,47,0,175,9, + 67,0,3,184,65,57,66,59,3,194,59,5,67,0,3,99, + 0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0, + 3,0,0,0,243,134,1,0,0,151,0,9,0,9,0,100, + 1,100,2,108,0,125,0,121,2,35,0,116,2,0,0,0, + 0,0,0,0,0,36,0,114,27,125,1,124,1,106,4,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,100,3,107,40,0,0,114,1,110,1,130,0,89,0,100, + 2,125,1,126,1,121,2,100,2,125,1,126,1,119,1,119, + 0,120,3,89,0,119,1,35,0,116,6,0,0,0,0,0, + 0,0,0,36,0,114,136,125,2,116,8,0,0,0,0,0, + 0,0,0,106,10,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,106,12,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,114,37,116,9,0, + 0,0,0,0,0,0,0,106,14,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,116,9,0,0,0, + 0,0,0,0,0,106,16,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, - 0,125,8,140,97,124,11,100,10,107,40,0,0,115,1,140, - 103,124,13,116,4,0,0,0,0,0,0,0,0,95,9,0, - 0,0,0,0,0,0,0,140,115,4,0,9,0,100,0,100, - 0,100,0,171,2,0,0,0,0,0,0,1,0,124,4,120, - 1,116,4,0,0,0,0,0,0,0,0,95,16,0,0,0, - 0,0,0,0,0,116,4,0,0,0,0,0,0,0,0,95, - 17,0,0,0,0,0,0,0,0,116,37,0,0,0,0,0, - 0,0,0,124,0,116,4,0,0,0,0,0,0,0,0,106, - 32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,103,1,171,2,0,0,0,0,0,0,1,0,124, - 8,100,5,107,40,0,0,114,38,116,38,0,0,0,0,0, - 0,0,0,106,41,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,100,11,116,4,0,0,0,0,0, - 0,0,0,106,32,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,171,2,0,0,0,0,0,0,1, - 0,124,0,83,0,116,4,0,0,0,0,0,0,0,0,106, - 32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,103,1,97,19,100,12,97,21,124,0,83,0,35, - 0,49,0,115,1,119,2,1,0,89,0,1,0,1,0,140, - 122,120,3,89,0,119,1,41,13,78,114,126,0,0,0,218, - 19,95,95,80,89,86,69,78,86,95,76,65,85,78,67,72, - 69,82,95,95,122,10,112,121,118,101,110,118,46,99,102,103, - 99,1,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,51,0,0,0,243,94,0,0,0,75,0,1,0,151,0, - 124,0,93,37,0,0,125,1,116,0,0,0,0,0,0,0, + 0,142,0,1,0,110,63,116,8,0,0,0,0,0,0,0, + 0,106,18,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,106,21,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,100,4,124,2,106,22,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,106,24,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,155,1,100,5,124,2,155,1,100,6,157, + 5,171,1,0,0,0,0,0,0,1,0,89,0,100,2,125, + 2,126,2,121,2,89,0,100,2,125,2,126,2,121,2,100, + 2,125,2,126,2,119,1,119,0,120,3,89,0,119,1,41, + 7,122,44,82,117,110,32,99,117,115,116,111,109,32,117,115, + 101,114,32,115,112,101,99,105,102,105,99,32,99,111,100,101, + 44,32,105,102,32,97,118,97,105,108,97,98,108,101,46,114, + 2,0,0,0,78,218,13,117,115,101,114,99,117,115,116,111, + 109,105,122,101,122,57,69,114,114,111,114,32,105,110,32,117, + 115,101,114,99,117,115,116,111,109,105,122,101,59,32,115,101, + 116,32,80,89,84,72,79,78,86,69,82,66,79,83,69,32, + 102,111,114,32,116,114,97,99,101,98,97,99,107,58,10,114, + 252,0,0,0,114,253,0,0,0,41,13,114,8,1,0,0, + 114,210,0,0,0,114,85,0,0,0,114,81,0,0,0,114, + 6,0,0,0,114,7,0,0,0,114,8,0,0,0,114,254, + 0,0,0,114,255,0,0,0,114,10,0,0,0,114,0,1, + 0,0,114,1,1,0,0,114,2,1,0,0,41,3,114,8, + 1,0,0,114,93,0,0,0,114,3,1,0,0,115,3,0, + 0,0,32,32,32,114,12,0,0,0,218,17,101,120,101,99, + 117,115,101,114,99,117,115,116,111,109,105,122,101,114,9,1, + 0,0,72,2,0,0,114,5,1,0,0,114,6,1,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,3,0,0,0,243,148,1,0,0,151,0,116,0,0,0, + 0,0,0,0,0,0,106,2,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,100,1,100,1,26,0, + 125,0,116,5,0,0,0,0,0,0,0,0,171,0,0,0, + 0,0,0,0,125,1,124,0,116,0,0,0,0,0,0,0, 0,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,106,5,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,1,171,1,0,0, - 0,0,0,0,114,4,124,1,150,1,151,1,1,0,140,39, - 4,0,121,0,173,3,119,1,114,16,0,0,0,41,3,114, - 17,0,0,0,114,18,0,0,0,218,6,105,115,102,105,108, - 101,41,2,218,2,46,48,218,8,99,111,110,102,102,105,108, - 101,115,2,0,0,0,32,32,114,12,0,0,0,218,9,60, - 103,101,110,101,120,112,114,62,122,23,118,101,110,118,46,60, - 108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,114, - 62,9,2,0,0,115,46,0,0,0,232,0,248,128,0,240, - 0,6,9,10,241,2,3,38,14,152,24,244,8,0,16,18, - 143,119,137,119,143,126,137,126,152,104,212,15,39,244,9,0, - 13,21,241,0,3,38,14,249,115,4,0,0,0,130,43,45, - 1,218,4,116,114,117,101,122,5,117,116,102,45,56,41,1, - 218,8,101,110,99,111,100,105,110,103,218,1,61,122,28,105, - 110,99,108,117,100,101,45,115,121,115,116,101,109,45,115,105, - 116,101,45,112,97,99,107,97,103,101,115,218,4,104,111,109, - 101,114,2,0,0,0,70,41,22,114,17,0,0,0,114,129, - 0,0,0,114,6,0,0,0,114,131,0,0,0,218,16,95, - 98,97,115,101,95,101,120,101,99,117,116,97,98,108,101,218, - 10,101,120,101,99,117,116,97,98,108,101,114,18,0,0,0, - 114,187,0,0,0,114,20,0,0,0,218,5,95,104,111,109, - 101,218,4,110,101,120,116,114,19,0,0,0,218,4,111,112, - 101,110,218,9,112,97,114,116,105,116,105,111,110,114,78,0, - 0,0,218,5,108,111,119,101,114,114,165,0,0,0,218,11, - 101,120,101,99,95,112,114,101,102,105,120,114,170,0,0,0, - 114,159,0,0,0,218,6,105,110,115,101,114,116,114,149,0, - 0,0,41,14,114,47,0,0,0,218,3,101,110,118,114,232, - 0,0,0,218,7,101,120,101,95,100,105,114,218,11,115,105, - 116,101,95,112,114,101,102,105,120,218,13,99,111,110,102,95, - 98,97,115,101,110,97,109,101,218,14,99,97,110,100,105,100, - 97,116,101,95,99,111,110,102,218,12,118,105,114,116,117,97, - 108,95,99,111,110,102,218,11,115,121,115,116,101,109,95,115, - 105,116,101,114,89,0,0,0,114,92,0,0,0,218,3,107, - 101,121,114,54,0,0,0,218,5,118,97,108,117,101,115,14, - 0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,32, - 32,114,12,0,0,0,218,4,118,101,110,118,114,249,0,0, - 0,252,1,0,0,115,176,1,0,0,128,0,244,6,0,11, - 13,143,42,137,42,128,67,220,7,10,135,124,129,124,144,120, - 210,7,31,208,36,57,184,83,209,36,64,220,44,46,175,74, - 169,74,208,55,76,209,44,77,208,8,77,136,10,148,83,213, - 21,41,228,21,24,151,94,145,94,136,10,220,14,16,143,103, - 137,103,143,111,137,111,156,98,159,103,153,103,159,111,153,111, - 168,106,211,30,57,211,14,58,128,71,220,18,20,151,39,145, - 39,151,47,145,47,160,39,211,18,42,128,75,216,16,20,132, - 67,132,73,216,20,32,128,77,220,21,25,241,2,6,9,10, - 228,16,18,151,7,145,7,151,12,145,12,152,87,160,109,211, - 16,52,220,16,18,151,7,145,7,151,12,145,12,152,91,168, - 45,211,16,56,241,5,3,38,14,243,3,6,9,10,240,14, - 0,9,13,243,17,9,22,6,128,78,242,22,0,8,22,216, - 23,37,136,12,216,22,28,136,11,244,6,0,14,18,144,44, - 168,23,213,13,49,176,81,219,24,25,144,4,216,19,22,152, - 36,146,59,216,36,40,167,78,161,78,176,51,211,36,55,145, - 77,144,67,152,17,152,69,216,26,29,159,41,153,41,155,43, - 215,26,43,209,26,43,211,26,45,144,67,216,28,33,159,75, - 153,75,155,77,144,69,216,23,26,208,30,60,210,23,60,216, - 38,43,167,107,161,107,163,109,153,11,216,25,28,160,6,155, - 29,216,36,41,156,3,157,9,241,17,0,25,26,247,3,0, - 14,50,240,22,0,40,51,208,8,50,140,3,140,10,148,83, - 148,95,244,6,0,9,24,152,11,164,99,167,106,161,106,160, - 92,212,8,50,240,8,0,12,23,152,38,210,11,32,220,12, - 20,143,79,137,79,152,65,156,115,159,122,153,122,212,12,42, - 240,10,0,12,23,208,4,22,244,7,0,25,28,159,10,153, - 10,144,124,136,72,216,31,36,208,12,28,224,11,22,208,4, - 22,247,49,0,14,50,208,13,49,250,115,25,0,0,0,196, - 36,10,72,21,3,196,47,65,30,72,21,3,198,14,13,72, - 21,3,200,21,5,72,30,7,99,0,0,0,0,0,0,0, - 0,0,0,0,0,8,0,0,0,3,0,0,0,243,134,1, - 0,0,151,0,9,0,9,0,100,1,100,2,108,0,125,0, - 121,2,35,0,116,2,0,0,0,0,0,0,0,0,36,0, - 114,27,125,1,124,1,106,4,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,100,3,107,40,0,0, - 114,1,110,1,130,0,89,0,100,2,125,1,126,1,121,2, - 100,2,125,1,126,1,119,1,119,0,120,3,89,0,119,1, - 35,0,116,6,0,0,0,0,0,0,0,0,36,0,114,136, - 125,2,116,8,0,0,0,0,0,0,0,0,106,10,0,0, + 0,0,0,0,0,0,107,55,0,0,114,10,116,7,0,0, + 0,0,0,0,0,0,171,0,0,0,0,0,0,0,1,0, + 116,9,0,0,0,0,0,0,0,0,124,1,171,1,0,0, + 0,0,0,0,125,1,116,10,0,0,0,0,0,0,0,0, + 128,10,116,13,0,0,0,0,0,0,0,0,171,0,0,0, + 0,0,0,0,97,5,116,15,0,0,0,0,0,0,0,0, + 124,1,171,1,0,0,0,0,0,0,125,1,116,17,0,0, + 0,0,0,0,0,0,124,1,171,1,0,0,0,0,0,0, + 125,1,116,19,0,0,0,0,0,0,0,0,171,0,0,0, + 0,0,0,0,1,0,116,21,0,0,0,0,0,0,0,0, + 171,0,0,0,0,0,0,0,1,0,116,23,0,0,0,0, + 0,0,0,0,171,0,0,0,0,0,0,0,1,0,116,0, + 0,0,0,0,0,0,0,0,106,24,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,106,26,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 106,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,114,37,116,9,0,0,0,0,0,0,0,0, - 106,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,116,9,0,0,0,0,0,0,0,0,106,16, + 115,10,116,29,0,0,0,0,0,0,0,0,171,0,0,0, + 0,0,0,0,1,0,116,31,0,0,0,0,0,0,0,0, + 171,0,0,0,0,0,0,0,1,0,116,10,0,0,0,0, + 0,0,0,0,114,11,116,33,0,0,0,0,0,0,0,0, + 171,0,0,0,0,0,0,0,1,0,121,1,121,1,41,2, + 122,207,65,100,100,32,115,116,97,110,100,97,114,100,32,115, + 105,116,101,45,115,112,101,99,105,102,105,99,32,100,105,114, + 101,99,116,111,114,105,101,115,32,116,111,32,116,104,101,32, + 109,111,100,117,108,101,32,115,101,97,114,99,104,32,112,97, + 116,104,46,10,10,32,32,32,32,84,104,105,115,32,102,117, + 110,99,116,105,111,110,32,105,115,32,99,97,108,108,101,100, + 32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,119, + 104,101,110,32,116,104,105,115,32,109,111,100,117,108,101,32, + 105,115,32,105,109,112,111,114,116,101,100,44,10,32,32,32, + 32,117,110,108,101,115,115,32,116,104,101,32,112,121,116,104, + 111,110,32,105,110,116,101,114,112,114,101,116,101,114,32,119, + 97,115,32,115,116,97,114,116,101,100,32,119,105,116,104,32, + 116,104,101,32,45,83,32,102,108,97,103,46,10,32,32,32, + 32,78,41,17,114,6,0,0,0,114,18,0,0,0,114,49, + 0,0,0,114,42,0,0,0,114,249,0,0,0,114,149,0, + 0,0,114,112,0,0,0,114,154,0,0,0,114,170,0,0, + 0,114,179,0,0,0,114,194,0,0,0,114,198,0,0,0, + 114,7,0,0,0,218,8,105,115,111,108,97,116,101,100,114, + 219,0,0,0,114,4,1,0,0,114,9,1,0,0,41,2, + 218,9,111,114,105,103,95,112,97,116,104,114,47,0,0,0, + 115,2,0,0,0,32,32,114,12,0,0,0,218,4,109,97, + 105,110,114,13,1,0,0,92,2,0,0,115,143,0,0,0, + 128,0,244,16,0,17,20,151,8,145,8,153,17,144,11,128, + 73,220,18,32,211,18,34,128,75,216,7,16,148,67,151,72, + 145,72,210,7,28,244,6,0,9,18,140,11,228,18,22,144, + 123,211,18,35,128,75,220,7,23,208,7,31,220,27,47,211, + 27,49,208,8,24,220,18,37,160,107,211,18,50,128,75,220, + 18,33,160,43,211,18,46,128,75,220,4,11,132,73,220,4, + 16,132,78,220,4,13,132,75,220,11,14,143,57,137,57,215, + 11,29,210,11,29,220,8,25,212,8,27,220,4,21,212,4, + 23,221,7,23,220,8,25,213,8,27,240,3,0,8,24,114, + 14,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,8,0,0,0,3,0,0,0,243,196,3,0,0,151,0, + 100,1,125,0,116,0,0,0,0,0,0,0,0,0,106,2, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,171,0,0,0,0,0,0,0,142,0,1,0,110,63, - 116,8,0,0,0,0,0,0,0,0,106,18,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,106,21, + 0,0,100,2,100,0,26,0,125,1,124,1,115,168,116,5, + 0,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0, + 125,2,116,7,0,0,0,0,0,0,0,0,171,0,0,0, + 0,0,0,0,125,3,116,9,0,0,0,0,0,0,0,0, + 100,3,171,1,0,0,0,0,0,0,1,0,116,0,0,0, + 0,0,0,0,0,0,106,10,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,68,0,93,17,0,0, + 125,4,116,9,0,0,0,0,0,0,0,0,100,4,124,4, + 155,2,100,5,157,3,171,1,0,0,0,0,0,0,1,0, + 140,19,4,0,116,9,0,0,0,0,0,0,0,0,100,6, + 171,1,0,0,0,0,0,0,1,0,100,7,132,0,125,5, + 116,9,0,0,0,0,0,0,0,0,100,8,124,2,155,2, + 100,9,2,0,124,5,124,2,171,1,0,0,0,0,0,0, + 155,0,100,10,157,5,171,1,0,0,0,0,0,0,1,0, + 116,9,0,0,0,0,0,0,0,0,100,11,124,3,155,2, + 100,9,2,0,124,5,124,3,171,1,0,0,0,0,0,0, + 155,0,100,10,157,5,171,1,0,0,0,0,0,0,1,0, + 116,9,0,0,0,0,0,0,0,0,100,12,116,12,0,0, + 0,0,0,0,0,0,155,2,157,2,171,1,0,0,0,0, + 0,0,1,0,116,1,0,0,0,0,0,0,0,0,106,14, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,100,4,124,2,106,22,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,106,24,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,1, - 100,5,124,2,155,1,100,6,157,5,171,1,0,0,0,0, - 0,0,1,0,89,0,100,2,125,2,126,2,121,2,89,0, - 100,2,125,2,126,2,121,2,100,2,125,2,126,2,119,1, - 119,0,120,3,89,0,119,1,41,7,122,44,82,117,110,32, - 99,117,115,116,111,109,32,115,105,116,101,32,115,112,101,99, - 105,102,105,99,32,99,111,100,101,44,32,105,102,32,97,118, - 97,105,108,97,98,108,101,46,114,2,0,0,0,78,218,13, - 115,105,116,101,99,117,115,116,111,109,105,122,101,122,57,69, - 114,114,111,114,32,105,110,32,115,105,116,101,99,117,115,116, - 111,109,105,122,101,59,32,115,101,116,32,80,89,84,72,79, - 78,86,69,82,66,79,83,69,32,102,111,114,32,116,114,97, - 99,101,98,97,99,107,58,10,250,2,58,32,218,1,10,41, - 13,114,251,0,0,0,114,210,0,0,0,114,85,0,0,0, - 114,81,0,0,0,114,6,0,0,0,114,7,0,0,0,114, - 8,0,0,0,218,10,101,120,99,101,112,116,104,111,111,107, - 218,8,101,120,99,95,105,110,102,111,114,10,0,0,0,218, - 5,119,114,105,116,101,218,9,95,95,99,108,97,115,115,95, - 95,218,8,95,95,110,97,109,101,95,95,41,3,114,251,0, - 0,0,114,93,0,0,0,218,3,101,114,114,115,3,0,0, - 0,32,32,32,114,12,0,0,0,218,17,101,120,101,99,115, - 105,116,101,99,117,115,116,111,109,105,122,101,114,4,1,0, - 0,51,2,0,0,243,152,0,0,0,128,0,240,4,15,5, - 47,240,2,6,9,22,220,12,32,248,220,15,26,242,0,4, - 9,22,216,15,18,143,120,137,120,152,63,210,15,42,216,16, - 20,224,16,21,244,5,0,17,21,251,240,5,4,9,22,251, - 244,10,0,12,21,242,0,7,5,47,220,11,14,143,57,137, - 57,215,11,28,210,11,28,220,12,15,143,78,137,78,156,67, - 159,76,153,76,155,78,210,12,43,228,12,15,143,74,137,74, - 215,12,28,210,12,28,240,6,0,18,21,151,29,145,29,215, - 17,39,211,17,39,170,19,240,5,2,17,46,247,3,3,13, - 47,241,0,3,13,47,244,5,0,13,44,251,240,5,7,5, - 47,250,243,41,0,0,0,131,4,8,0,136,9,44,3,145, - 17,39,3,162,4,47,0,167,5,44,3,172,3,47,0,175, - 9,67,0,3,184,65,57,66,59,3,194,59,5,67,0,3, - 99,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0, - 0,3,0,0,0,243,134,1,0,0,151,0,9,0,9,0, - 100,1,100,2,108,0,125,0,121,2,35,0,116,2,0,0, - 0,0,0,0,0,0,36,0,114,27,125,1,124,1,106,4, + 0,0,100,13,171,1,0,0,0,0,0,0,1,0,103,0, + 125,6,100,14,124,1,118,0,114,21,124,6,106,17,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,100,3,107,40,0,0,114,1,110,1,130,0,89,0, - 100,2,125,1,126,1,121,2,100,2,125,1,126,1,119,1, - 119,0,120,3,89,0,119,1,35,0,116,6,0,0,0,0, - 0,0,0,0,36,0,114,136,125,2,116,8,0,0,0,0, - 0,0,0,0,106,10,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,106,12,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,114,37,116,9, - 0,0,0,0,0,0,0,0,106,14,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,116,9,0,0, - 0,0,0,0,0,0,106,16,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,171,0,0,0,0,0, - 0,0,142,0,1,0,110,63,116,8,0,0,0,0,0,0, - 0,0,106,18,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,106,21,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,100,4,124,2,106,22, + 116,18,0,0,0,0,0,0,0,0,171,1,0,0,0,0, + 0,0,1,0,100,15,124,1,118,0,114,21,124,6,106,17, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,106,24,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,155,1,100,5,124,2,155,1,100,6, - 157,5,171,1,0,0,0,0,0,0,1,0,89,0,100,2, - 125,2,126,2,121,2,89,0,100,2,125,2,126,2,121,2, - 100,2,125,2,126,2,119,1,119,0,120,3,89,0,119,1, - 41,7,122,44,82,117,110,32,99,117,115,116,111,109,32,117, - 115,101,114,32,115,112,101,99,105,102,105,99,32,99,111,100, - 101,44,32,105,102,32,97,118,97,105,108,97,98,108,101,46, - 114,2,0,0,0,78,218,13,117,115,101,114,99,117,115,116, - 111,109,105,122,101,122,57,69,114,114,111,114,32,105,110,32, - 117,115,101,114,99,117,115,116,111,109,105,122,101,59,32,115, - 101,116,32,80,89,84,72,79,78,86,69,82,66,79,83,69, - 32,102,111,114,32,116,114,97,99,101,98,97,99,107,58,10, - 114,252,0,0,0,114,253,0,0,0,41,13,114,8,1,0, - 0,114,210,0,0,0,114,85,0,0,0,114,81,0,0,0, - 114,6,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 254,0,0,0,114,255,0,0,0,114,10,0,0,0,114,0, - 1,0,0,114,1,1,0,0,114,2,1,0,0,41,3,114, - 8,1,0,0,114,93,0,0,0,114,3,1,0,0,115,3, - 0,0,0,32,32,32,114,12,0,0,0,218,17,101,120,101, - 99,117,115,101,114,99,117,115,116,111,109,105,122,101,114,9, - 1,0,0,71,2,0,0,114,5,1,0,0,114,6,1,0, - 0,99,0,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,3,0,0,0,243,148,1,0,0,151,0,116,0,0, - 0,0,0,0,0,0,0,106,2,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,100,1,100,1,26, - 0,125,0,116,5,0,0,0,0,0,0,0,0,171,0,0, - 0,0,0,0,0,125,1,124,0,116,0,0,0,0,0,0, - 0,0,0,106,2,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,107,55,0,0,114,10,116,7,0, - 0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,1, - 0,116,9,0,0,0,0,0,0,0,0,124,1,171,1,0, - 0,0,0,0,0,125,1,116,10,0,0,0,0,0,0,0, - 0,128,10,116,13,0,0,0,0,0,0,0,0,171,0,0, - 0,0,0,0,0,97,5,116,15,0,0,0,0,0,0,0, - 0,124,1,171,1,0,0,0,0,0,0,125,1,116,17,0, - 0,0,0,0,0,0,0,124,1,171,1,0,0,0,0,0, - 0,125,1,116,19,0,0,0,0,0,0,0,0,171,0,0, - 0,0,0,0,0,1,0,116,21,0,0,0,0,0,0,0, - 0,171,0,0,0,0,0,0,0,1,0,116,23,0,0,0, - 0,0,0,0,0,171,0,0,0,0,0,0,0,1,0,116, - 0,0,0,0,0,0,0,0,0,106,24,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,106,26,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,115,10,116,29,0,0,0,0,0,0,0,0,171,0,0, - 0,0,0,0,0,1,0,116,31,0,0,0,0,0,0,0, - 0,171,0,0,0,0,0,0,0,1,0,116,10,0,0,0, - 0,0,0,0,0,114,11,116,33,0,0,0,0,0,0,0, - 0,171,0,0,0,0,0,0,0,1,0,121,1,121,1,41, - 2,122,207,65,100,100,32,115,116,97,110,100,97,114,100,32, - 115,105,116,101,45,115,112,101,99,105,102,105,99,32,100,105, - 114,101,99,116,111,114,105,101,115,32,116,111,32,116,104,101, - 32,109,111,100,117,108,101,32,115,101,97,114,99,104,32,112, - 97,116,104,46,10,10,32,32,32,32,84,104,105,115,32,102, - 117,110,99,116,105,111,110,32,105,115,32,99,97,108,108,101, - 100,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32, - 119,104,101,110,32,116,104,105,115,32,109,111,100,117,108,101, - 32,105,115,32,105,109,112,111,114,116,101,100,44,10,32,32, - 32,32,117,110,108,101,115,115,32,116,104,101,32,112,121,116, - 104,111,110,32,105,110,116,101,114,112,114,101,116,101,114,32, - 119,97,115,32,115,116,97,114,116,101,100,32,119,105,116,104, - 32,116,104,101,32,45,83,32,102,108,97,103,46,10,32,32, - 32,32,78,41,17,114,6,0,0,0,114,18,0,0,0,114, - 49,0,0,0,114,42,0,0,0,114,249,0,0,0,114,149, - 0,0,0,114,112,0,0,0,114,154,0,0,0,114,170,0, - 0,0,114,179,0,0,0,114,194,0,0,0,114,198,0,0, - 0,114,7,0,0,0,218,8,105,115,111,108,97,116,101,100, - 114,219,0,0,0,114,4,1,0,0,114,9,1,0,0,41, - 2,218,9,111,114,105,103,95,112,97,116,104,114,47,0,0, - 0,115,2,0,0,0,32,32,114,12,0,0,0,218,4,109, - 97,105,110,114,13,1,0,0,91,2,0,0,115,143,0,0, - 0,128,0,244,16,0,17,20,151,8,145,8,153,17,144,11, - 128,73,220,18,32,211,18,34,128,75,216,7,16,148,67,151, - 72,145,72,210,7,28,244,6,0,9,18,140,11,228,18,22, - 144,123,211,18,35,128,75,220,7,23,208,7,31,220,27,47, - 211,27,49,208,8,24,220,18,37,160,107,211,18,50,128,75, - 220,18,33,160,43,211,18,46,128,75,220,4,11,132,73,220, - 4,16,132,78,220,4,13,132,75,220,11,14,143,57,137,57, - 215,11,29,210,11,29,220,8,25,212,8,27,220,4,21,212, - 4,23,221,7,23,220,8,25,213,8,27,240,3,0,8,24, - 114,14,0,0,0,99,0,0,0,0,0,0,0,0,0,0, - 0,0,8,0,0,0,3,0,0,0,243,196,3,0,0,151, - 0,100,1,125,0,116,0,0,0,0,0,0,0,0,0,106, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,100,2,100,0,26,0,125,1,124,1,115,168,116, - 5,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, - 0,125,2,116,7,0,0,0,0,0,0,0,0,171,0,0, - 0,0,0,0,0,125,3,116,9,0,0,0,0,0,0,0, - 0,100,3,171,1,0,0,0,0,0,0,1,0,116,0,0, - 0,0,0,0,0,0,0,106,10,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,68,0,93,17,0, - 0,125,4,116,9,0,0,0,0,0,0,0,0,100,4,124, - 4,155,2,100,5,157,3,171,1,0,0,0,0,0,0,1, - 0,140,19,4,0,116,9,0,0,0,0,0,0,0,0,100, - 6,171,1,0,0,0,0,0,0,1,0,100,7,132,0,125, - 5,116,9,0,0,0,0,0,0,0,0,100,8,124,2,155, - 2,100,9,2,0,124,5,124,2,171,1,0,0,0,0,0, - 0,155,0,100,10,157,5,171,1,0,0,0,0,0,0,1, - 0,116,9,0,0,0,0,0,0,0,0,100,11,124,3,155, - 2,100,9,2,0,124,5,124,3,171,1,0,0,0,0,0, - 0,155,0,100,10,157,5,171,1,0,0,0,0,0,0,1, - 0,116,9,0,0,0,0,0,0,0,0,100,12,116,12,0, - 0,0,0,0,0,0,0,155,2,157,2,171,1,0,0,0, - 0,0,0,1,0,116,1,0,0,0,0,0,0,0,0,106, - 14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,100,13,171,1,0,0,0,0,0,0,1,0,103, - 0,125,6,100,14,124,1,118,0,114,21,124,6,106,17,0, + 0,0,116,20,0,0,0,0,0,0,0,0,171,1,0,0, + 0,0,0,0,1,0,124,6,114,148,116,9,0,0,0,0, + 0,0,0,0,116,22,0,0,0,0,0,0,0,0,106,24, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,116,18,0,0,0,0,0,0,0,0,171,1,0,0,0, - 0,0,0,1,0,100,15,124,1,118,0,114,21,124,6,106, - 17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,116,20,0,0,0,0,0,0,0,0,171,1,0, - 0,0,0,0,0,1,0,124,6,114,148,116,9,0,0,0, - 0,0,0,0,0,116,22,0,0,0,0,0,0,0,0,106, - 24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,106,27,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,6,171,1,0,0,0,0,0, - 0,171,1,0,0,0,0,0,0,1,0,116,12,0,0,0, - 0,0,0,0,0,114,22,116,1,0,0,0,0,0,0,0, - 0,106,14,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,100,13,171,1,0,0,0,0,0,0,1, - 0,121,0,116,12,0,0,0,0,0,0,0,0,100,16,117, - 0,114,22,116,1,0,0,0,0,0,0,0,0,106,14,0, + 0,0,106,27,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,6,171,1,0,0,0,0,0,0, + 171,1,0,0,0,0,0,0,1,0,116,12,0,0,0,0, + 0,0,0,0,114,22,116,1,0,0,0,0,0,0,0,0, + 106,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,100,13,171,1,0,0,0,0,0,0,1,0, + 121,0,116,12,0,0,0,0,0,0,0,0,100,16,117,0, + 114,22,116,1,0,0,0,0,0,0,0,0,106,14,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,100,2,171,1,0,0,0,0,0,0,1,0,121,0,116, - 12,0,0,0,0,0,0,0,0,128,22,116,1,0,0,0, - 0,0,0,0,0,106,14,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,100,17,171,1,0,0,0, - 0,0,0,1,0,121,0,116,1,0,0,0,0,0,0,0, - 0,106,14,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,100,18,171,1,0,0,0,0,0,0,1, - 0,121,0,100,13,100,0,108,14,125,7,116,9,0,0,0, - 0,0,0,0,0,124,7,106,31,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,0,116,0,0, - 0,0,0,0,0,0,0,106,2,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,100,13,25,0,0, - 0,116,22,0,0,0,0,0,0,0,0,106,24,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102, - 2,122,6,0,0,171,1,0,0,0,0,0,0,171,1,0, - 0,0,0,0,0,1,0,116,1,0,0,0,0,0,0,0, - 0,106,14,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,100,19,171,1,0,0,0,0,0,0,1, - 0,121,0,41,20,78,97,178,1,0,0,32,32,32,32,37, - 115,32,91,45,45,117,115,101,114,45,98,97,115,101,93,32, - 91,45,45,117,115,101,114,45,115,105,116,101,93,10,10,32, - 32,32,32,87,105,116,104,111,117,116,32,97,114,103,117,109, - 101,110,116,115,32,112,114,105,110,116,32,115,111,109,101,32, - 117,115,101,102,117,108,32,105,110,102,111,114,109,97,116,105, - 111,110,10,32,32,32,32,87,105,116,104,32,97,114,103,117, - 109,101,110,116,115,32,112,114,105,110,116,32,116,104,101,32, - 118,97,108,117,101,32,111,102,32,85,83,69,82,95,66,65, - 83,69,32,97,110,100,47,111,114,32,85,83,69,82,95,83, - 73,84,69,32,115,101,112,97,114,97,116,101,100,10,32,32, - 32,32,98,121,32,39,37,115,39,46,10,10,32,32,32,32, - 69,120,105,116,32,99,111,100,101,115,32,119,105,116,104,32, - 45,45,117,115,101,114,45,98,97,115,101,32,111,114,32,45, - 45,117,115,101,114,45,115,105,116,101,58,10,32,32,32,32, - 32,32,48,32,45,32,117,115,101,114,32,115,105,116,101,32, - 100,105,114,101,99,116,111,114,121,32,105,115,32,101,110,97, - 98,108,101,100,10,32,32,32,32,32,32,49,32,45,32,117, - 115,101,114,32,115,105,116,101,32,100,105,114,101,99,116,111, - 114,121,32,105,115,32,100,105,115,97,98,108,101,100,32,98, - 121,32,117,115,101,114,10,32,32,32,32,32,32,50,32,45, - 32,117,115,101,114,32,115,105,116,101,32,100,105,114,101,99, - 116,111,114,121,32,105,115,32,100,105,115,97,98,108,101,100, - 32,98,121,32,115,117,112,101,114,32,117,115,101,114,10,32, - 32,32,32,32,32,32,32,32,32,111,114,32,102,111,114,32, - 115,101,99,117,114,105,116,121,32,114,101,97,115,111,110,115, - 10,32,32,32,32,32,62,50,32,45,32,117,110,107,110,111, - 119,110,32,101,114,114,111,114,10,32,32,32,32,114,60,0, - 0,0,122,12,115,121,115,46,112,97,116,104,32,61,32,91, - 122,4,32,32,32,32,218,1,44,218,1,93,99,1,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,19,0,0, - 0,243,72,0,0,0,151,0,124,0,129,32,116,0,0,0, + 100,2,171,1,0,0,0,0,0,0,1,0,121,0,116,12, + 0,0,0,0,0,0,0,0,128,22,116,1,0,0,0,0, + 0,0,0,0,106,14,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,100,17,171,1,0,0,0,0, + 0,0,1,0,121,0,116,1,0,0,0,0,0,0,0,0, + 106,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,100,18,171,1,0,0,0,0,0,0,1,0, + 121,0,100,13,100,0,108,14,125,7,116,9,0,0,0,0, + 0,0,0,0,124,7,106,31,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,0,116,0,0,0, 0,0,0,0,0,0,106,2,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,106,5,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0, - 171,1,0,0,0,0,0,0,114,1,121,1,121,2,41,3, - 78,114,51,0,0,0,122,13,100,111,101,115,110,39,116,32, - 101,120,105,115,116,41,3,114,17,0,0,0,114,18,0,0, - 0,114,152,0,0,0,41,1,114,18,0,0,0,115,1,0, - 0,0,32,114,12,0,0,0,114,51,0,0,0,122,23,95, - 115,99,114,105,112,116,46,60,108,111,99,97,108,115,62,46, - 101,120,105,115,116,115,148,2,0,0,115,29,0,0,0,128, - 0,216,15,19,208,15,31,164,66,167,71,161,71,167,77,161, - 77,176,36,212,36,55,216,23,31,224,23,38,114,14,0,0, - 0,122,11,85,83,69,82,95,66,65,83,69,58,32,122,2, - 32,40,218,1,41,122,11,85,83,69,82,95,83,73,84,69, - 58,32,122,18,69,78,65,66,76,69,95,85,83,69,82,95, - 83,73,84,69,58,32,114,2,0,0,0,122,11,45,45,117, - 115,101,114,45,98,97,115,101,122,11,45,45,117,115,101,114, - 45,115,105,116,101,70,114,128,0,0,0,233,3,0,0,0, - 233,10,0,0,0,41,16,114,6,0,0,0,218,4,97,114, - 103,118,114,146,0,0,0,114,150,0,0,0,114,9,0,0, - 0,114,18,0,0,0,114,149,0,0,0,114,174,0,0,0, - 114,44,0,0,0,114,145,0,0,0,114,148,0,0,0,114, - 17,0,0,0,218,7,112,97,116,104,115,101,112,114,19,0, - 0,0,218,8,116,101,120,116,119,114,97,112,218,6,100,101, - 100,101,110,116,41,8,114,197,0,0,0,114,120,0,0,0, - 218,9,117,115,101,114,95,98,97,115,101,114,153,0,0,0, - 114,24,0,0,0,114,51,0,0,0,218,6,98,117,102,102, - 101,114,114,23,1,0,0,115,8,0,0,0,32,32,32,32, - 32,32,32,32,114,12,0,0,0,218,7,95,115,99,114,105, - 112,116,114,27,1,0,0,125,2,0,0,115,105,1,0,0, - 128,0,240,2,13,12,8,128,68,244,28,0,12,15,143,56, - 137,56,144,65,144,66,136,60,128,68,217,11,15,220,20,31, - 147,77,136,9,220,20,39,211,20,41,136,9,220,8,13,136, - 110,212,8,29,220,19,22,151,56,148,56,136,67,221,12,17, - 154,115,208,18,36,213,12,37,240,3,0,20,28,228,8,13, - 136,99,140,10,242,2,4,9,39,244,10,0,9,14,144,11, - 152,73,152,61,168,2,169,54,176,41,211,43,60,208,42,61, - 184,81,208,14,63,212,8,64,220,8,13,144,11,152,73,152, - 61,168,2,169,54,176,41,211,43,60,208,42,61,184,81,208, - 14,63,212,8,64,220,8,13,208,16,34,212,35,51,208,34, - 54,208,14,55,212,8,56,220,8,11,143,8,137,8,144,17, - 140,11,224,13,15,128,70,216,7,20,152,4,209,7,28,216, - 8,14,143,13,137,13,148,105,212,8,32,216,7,20,152,4, - 209,7,28,216,8,14,143,13,137,13,148,105,212,8,32,225, - 7,13,220,8,13,140,98,143,106,137,106,143,111,137,111,152, - 102,211,14,37,212,8,38,221,11,27,220,12,15,143,72,137, - 72,144,81,141,75,220,13,29,160,21,209,13,38,220,12,15, - 143,72,137,72,144,81,141,75,220,13,29,208,13,37,220,12, - 15,143,72,137,72,144,81,141,75,228,12,15,143,72,137,72, - 144,81,141,75,227,8,23,220,8,13,136,104,143,111,137,111, - 152,100,164,99,167,104,161,104,168,113,161,107,180,50,183,58, - 177,58,208,37,62,209,30,62,211,14,63,212,8,64,220,8, - 11,143,8,137,8,144,18,141,12,114,14,0,0,0,218,8, - 95,95,109,97,105,110,95,95,114,16,0,0,0,41,40,114, - 201,0,0,0,114,6,0,0,0,114,17,0,0,0,114,177, - 0,0,0,114,175,0,0,0,114,68,0,0,0,114,65,0, - 0,0,114,165,0,0,0,114,238,0,0,0,114,159,0,0, - 0,114,149,0,0,0,114,148,0,0,0,114,145,0,0,0, - 114,13,0,0,0,114,25,0,0,0,114,42,0,0,0,114, - 49,0,0,0,114,56,0,0,0,114,95,0,0,0,114,103, - 0,0,0,114,112,0,0,0,114,136,0,0,0,114,143,0, - 0,0,114,146,0,0,0,114,150,0,0,0,114,154,0,0, - 0,114,168,0,0,0,114,170,0,0,0,114,179,0,0,0, - 114,194,0,0,0,114,198,0,0,0,114,219,0,0,0,114, - 249,0,0,0,114,4,1,0,0,114,9,1,0,0,114,13, - 1,0,0,114,7,0,0,0,218,7,110,111,95,115,105,116, - 101,114,27,1,0,0,114,2,1,0,0,114,111,0,0,0, - 114,14,0,0,0,114,12,0,0,0,218,8,60,109,111,100, - 117,108,101,62,114,30,1,0,0,1,0,0,0,115,239,0, - 0,0,240,3,1,1,1,241,2,69,1,1,4,243,78,2, - 0,1,11,219,0,9,219,0,15,219,0,20,219,0,9,219, - 0,11,240,6,0,13,16,143,74,137,74,152,3,159,15,153, - 15,208,11,40,128,8,240,6,0,20,24,208,0,16,240,10, - 0,13,17,128,9,216,12,16,128,9,242,6,2,1,40,242, - 10,6,1,38,242,18,20,1,17,242,46,16,1,23,242,38, - 10,1,13,242,26,63,1,23,243,68,2,23,1,23,242,52, - 22,1,16,242,64,1,20,1,35,242,48,10,1,75,1,242, - 26,10,1,21,242,26,15,1,21,242,34,13,1,23,243,30, - 31,1,24,243,66,1,7,1,23,242,18,13,1,55,242,32, - 18,1,21,242,42,1,1,44,242,6,57,1,48,242,118,1, - 52,1,23,242,110,1,17,1,47,242,40,17,1,47,242,40, - 27,1,28,240,62,0,8,11,135,121,129,121,215,7,24,210, - 7,24,217,4,8,132,70,242,4,52,1,21,240,108,1,0, - 4,12,136,122,210,3,25,217,4,11,133,73,240,3,0,4, - 26,114,14,0,0,0, + 0,0,0,0,0,0,0,0,0,0,100,13,25,0,0,0, + 116,22,0,0,0,0,0,0,0,0,106,24,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,2, + 122,6,0,0,171,1,0,0,0,0,0,0,171,1,0,0, + 0,0,0,0,1,0,116,1,0,0,0,0,0,0,0,0, + 106,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,100,19,171,1,0,0,0,0,0,0,1,0, + 121,0,41,20,78,97,178,1,0,0,32,32,32,32,37,115, + 32,91,45,45,117,115,101,114,45,98,97,115,101,93,32,91, + 45,45,117,115,101,114,45,115,105,116,101,93,10,10,32,32, + 32,32,87,105,116,104,111,117,116,32,97,114,103,117,109,101, + 110,116,115,32,112,114,105,110,116,32,115,111,109,101,32,117, + 115,101,102,117,108,32,105,110,102,111,114,109,97,116,105,111, + 110,10,32,32,32,32,87,105,116,104,32,97,114,103,117,109, + 101,110,116,115,32,112,114,105,110,116,32,116,104,101,32,118, + 97,108,117,101,32,111,102,32,85,83,69,82,95,66,65,83, + 69,32,97,110,100,47,111,114,32,85,83,69,82,95,83,73, + 84,69,32,115,101,112,97,114,97,116,101,100,10,32,32,32, + 32,98,121,32,39,37,115,39,46,10,10,32,32,32,32,69, + 120,105,116,32,99,111,100,101,115,32,119,105,116,104,32,45, + 45,117,115,101,114,45,98,97,115,101,32,111,114,32,45,45, + 117,115,101,114,45,115,105,116,101,58,10,32,32,32,32,32, + 32,48,32,45,32,117,115,101,114,32,115,105,116,101,32,100, + 105,114,101,99,116,111,114,121,32,105,115,32,101,110,97,98, + 108,101,100,10,32,32,32,32,32,32,49,32,45,32,117,115, + 101,114,32,115,105,116,101,32,100,105,114,101,99,116,111,114, + 121,32,105,115,32,100,105,115,97,98,108,101,100,32,98,121, + 32,117,115,101,114,10,32,32,32,32,32,32,50,32,45,32, + 117,115,101,114,32,115,105,116,101,32,100,105,114,101,99,116, + 111,114,121,32,105,115,32,100,105,115,97,98,108,101,100,32, + 98,121,32,115,117,112,101,114,32,117,115,101,114,10,32,32, + 32,32,32,32,32,32,32,32,111,114,32,102,111,114,32,115, + 101,99,117,114,105,116,121,32,114,101,97,115,111,110,115,10, + 32,32,32,32,32,62,50,32,45,32,117,110,107,110,111,119, + 110,32,101,114,114,111,114,10,32,32,32,32,114,60,0,0, + 0,122,12,115,121,115,46,112,97,116,104,32,61,32,91,122, + 4,32,32,32,32,218,1,44,218,1,93,99,1,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,19,0,0,0, + 243,72,0,0,0,151,0,124,0,129,32,116,0,0,0,0, + 0,0,0,0,0,106,2,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,106,5,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,171, + 1,0,0,0,0,0,0,114,1,121,1,121,2,41,3,78, + 114,51,0,0,0,122,13,100,111,101,115,110,39,116,32,101, + 120,105,115,116,41,3,114,17,0,0,0,114,18,0,0,0, + 114,152,0,0,0,41,1,114,18,0,0,0,115,1,0,0, + 0,32,114,12,0,0,0,114,51,0,0,0,122,23,95,115, + 99,114,105,112,116,46,60,108,111,99,97,108,115,62,46,101, + 120,105,115,116,115,149,2,0,0,115,29,0,0,0,128,0, + 216,15,19,208,15,31,164,66,167,71,161,71,167,77,161,77, + 176,36,212,36,55,216,23,31,224,23,38,114,14,0,0,0, + 122,11,85,83,69,82,95,66,65,83,69,58,32,122,2,32, + 40,218,1,41,122,11,85,83,69,82,95,83,73,84,69,58, + 32,122,18,69,78,65,66,76,69,95,85,83,69,82,95,83, + 73,84,69,58,32,114,2,0,0,0,122,11,45,45,117,115, + 101,114,45,98,97,115,101,122,11,45,45,117,115,101,114,45, + 115,105,116,101,70,114,128,0,0,0,233,3,0,0,0,233, + 10,0,0,0,41,16,114,6,0,0,0,218,4,97,114,103, + 118,114,146,0,0,0,114,150,0,0,0,114,9,0,0,0, + 114,18,0,0,0,114,149,0,0,0,114,174,0,0,0,114, + 44,0,0,0,114,145,0,0,0,114,148,0,0,0,114,17, + 0,0,0,218,7,112,97,116,104,115,101,112,114,19,0,0, + 0,218,8,116,101,120,116,119,114,97,112,218,6,100,101,100, + 101,110,116,41,8,114,197,0,0,0,114,120,0,0,0,218, + 9,117,115,101,114,95,98,97,115,101,114,153,0,0,0,114, + 24,0,0,0,114,51,0,0,0,218,6,98,117,102,102,101, + 114,114,23,1,0,0,115,8,0,0,0,32,32,32,32,32, + 32,32,32,114,12,0,0,0,218,7,95,115,99,114,105,112, + 116,114,27,1,0,0,126,2,0,0,115,105,1,0,0,128, + 0,240,2,13,12,8,128,68,244,28,0,12,15,143,56,137, + 56,144,65,144,66,136,60,128,68,217,11,15,220,20,31,147, + 77,136,9,220,20,39,211,20,41,136,9,220,8,13,136,110, + 212,8,29,220,19,22,151,56,148,56,136,67,221,12,17,154, + 115,208,18,36,213,12,37,240,3,0,20,28,228,8,13,136, + 99,140,10,242,2,4,9,39,244,10,0,9,14,144,11,152, + 73,152,61,168,2,169,54,176,41,211,43,60,208,42,61,184, + 81,208,14,63,212,8,64,220,8,13,144,11,152,73,152,61, + 168,2,169,54,176,41,211,43,60,208,42,61,184,81,208,14, + 63,212,8,64,220,8,13,208,16,34,212,35,51,208,34,54, + 208,14,55,212,8,56,220,8,11,143,8,137,8,144,17,140, + 11,224,13,15,128,70,216,7,20,152,4,209,7,28,216,8, + 14,143,13,137,13,148,105,212,8,32,216,7,20,152,4,209, + 7,28,216,8,14,143,13,137,13,148,105,212,8,32,225,7, + 13,220,8,13,140,98,143,106,137,106,143,111,137,111,152,102, + 211,14,37,212,8,38,221,11,27,220,12,15,143,72,137,72, + 144,81,141,75,220,13,29,160,21,209,13,38,220,12,15,143, + 72,137,72,144,81,141,75,220,13,29,208,13,37,220,12,15, + 143,72,137,72,144,81,141,75,228,12,15,143,72,137,72,144, + 81,141,75,227,8,23,220,8,13,136,104,143,111,137,111,152, + 100,164,99,167,104,161,104,168,113,161,107,180,50,183,58,177, + 58,208,37,62,209,30,62,211,14,63,212,8,64,220,8,11, + 143,8,137,8,144,18,141,12,114,14,0,0,0,218,8,95, + 95,109,97,105,110,95,95,114,16,0,0,0,41,40,114,201, + 0,0,0,114,6,0,0,0,114,17,0,0,0,114,177,0, + 0,0,114,175,0,0,0,114,68,0,0,0,114,65,0,0, + 0,114,165,0,0,0,114,238,0,0,0,114,159,0,0,0, + 114,149,0,0,0,114,148,0,0,0,114,145,0,0,0,114, + 13,0,0,0,114,25,0,0,0,114,42,0,0,0,114,49, + 0,0,0,114,56,0,0,0,114,95,0,0,0,114,103,0, + 0,0,114,112,0,0,0,114,136,0,0,0,114,143,0,0, + 0,114,146,0,0,0,114,150,0,0,0,114,154,0,0,0, + 114,168,0,0,0,114,170,0,0,0,114,179,0,0,0,114, + 194,0,0,0,114,198,0,0,0,114,219,0,0,0,114,249, + 0,0,0,114,4,1,0,0,114,9,1,0,0,114,13,1, + 0,0,114,7,0,0,0,218,7,110,111,95,115,105,116,101, + 114,27,1,0,0,114,2,1,0,0,114,111,0,0,0,114, + 14,0,0,0,114,12,0,0,0,218,8,60,109,111,100,117, + 108,101,62,114,30,1,0,0,1,0,0,0,115,239,0,0, + 0,240,3,1,1,1,241,2,69,1,1,4,243,78,2,0, + 1,11,219,0,9,219,0,15,219,0,20,219,0,9,219,0, + 11,240,6,0,13,16,143,74,137,74,152,3,159,15,153,15, + 208,11,40,128,8,240,6,0,20,24,208,0,16,240,10,0, + 13,17,128,9,216,12,16,128,9,242,6,2,1,40,242,10, + 6,1,38,242,18,20,1,17,242,46,16,1,23,242,38,10, + 1,13,242,26,63,1,23,243,68,2,23,1,23,242,52,22, + 1,16,242,64,1,20,1,35,242,48,10,1,75,1,242,26, + 10,1,21,242,26,15,1,21,242,34,13,1,23,243,30,31, + 1,24,243,66,1,7,1,23,242,18,13,1,55,242,32,19, + 1,21,242,44,1,1,44,242,6,57,1,48,242,118,1,52, + 1,23,242,110,1,17,1,47,242,40,17,1,47,242,40,27, + 1,28,240,62,0,8,11,135,121,129,121,215,7,24,210,7, + 24,217,4,8,132,70,242,4,52,1,21,240,108,1,0,4, + 12,136,122,210,3,25,217,4,11,133,73,240,3,0,4,26, + 114,14,0,0,0, }; diff --git a/contrib/tools/python3/Python/future.c b/contrib/tools/python3/Python/future.c index d56f733096..998a7f740e 100644 --- a/contrib/tools/python3/Python/future.c +++ b/contrib/tools/python3/Python/future.c @@ -39,12 +39,20 @@ future_check_features(PyFutureFeatures *ff, stmt_ty s, PyObject *filename) } else if (strcmp(feature, "braces") == 0) { PyErr_SetString(PyExc_SyntaxError, "not a chance"); - PyErr_SyntaxLocationObject(filename, s->lineno, s->col_offset + 1); + PyErr_RangedSyntaxLocationObject(filename, + name->lineno, + name->col_offset + 1, + name->end_lineno, + name->end_col_offset + 1); return 0; } else { PyErr_Format(PyExc_SyntaxError, UNDEFINED_FUTURE_FEATURE, feature); - PyErr_SyntaxLocationObject(filename, s->lineno, s->col_offset + 1); + PyErr_RangedSyntaxLocationObject(filename, + name->lineno, + name->col_offset + 1, + name->end_lineno, + name->end_col_offset + 1); return 0; } } diff --git a/contrib/tools/python3/Python/import.c b/contrib/tools/python3/Python/import.c index 76b418840e..daac00593d 100644 --- a/contrib/tools/python3/Python/import.c +++ b/contrib/tools/python3/Python/import.c @@ -917,12 +917,14 @@ extensions_lock_release(void) static void * hashtable_key_from_2_strings(PyObject *str1, PyObject *str2, const char sep) { - Py_ssize_t str1_len, str2_len; - const char *str1_data = PyUnicode_AsUTF8AndSize(str1, &str1_len); - const char *str2_data = PyUnicode_AsUTF8AndSize(str2, &str2_len); + const char *str1_data = _PyUnicode_AsUTF8NoNUL(str1); + const char *str2_data = _PyUnicode_AsUTF8NoNUL(str2); if (str1_data == NULL || str2_data == NULL) { return NULL; } + Py_ssize_t str1_len = strlen(str1_data); + Py_ssize_t str2_len = strlen(str2_data); + /* Make sure sep and the NULL byte won't cause an overflow. */ assert(SIZE_MAX - str1_len - str2_len > 2); size_t size = str1_len + 1 + str2_len + 1; @@ -3548,7 +3550,7 @@ _imp_find_frozen_impl(PyObject *module, PyObject *name, int withdata) if (info.origname != NULL && info.origname[0] != '\0') { origname = PyUnicode_FromString(info.origname); if (origname == NULL) { - Py_DECREF(data); + Py_XDECREF(data); return NULL; } } diff --git a/contrib/tools/python3/Python/pylifecycle.c b/contrib/tools/python3/Python/pylifecycle.c index 6d580c6d48..e9c1a0d72d 100644 --- a/contrib/tools/python3/Python/pylifecycle.c +++ b/contrib/tools/python3/Python/pylifecycle.c @@ -650,6 +650,10 @@ pycore_create_interpreter(_PyRuntimeState *runtime, return status; } + // This could be done in init_interpreter() (in pystate.c) if it + // didn't depend on interp->feature_flags being set already. + _PyObject_InitState(interp); + PyThreadState *tstate = _PyThreadState_New(interp); if (tstate == NULL) { return _PyStatus_ERR("can't make first thread"); @@ -2103,6 +2107,10 @@ new_interpreter(PyThreadState **tstate_p, const PyInterpreterConfig *config) goto error; } + // This could be done in init_interpreter() (in pystate.c) if it + // didn't depend on interp->feature_flags being set already. + _PyObject_InitState(interp); + status = init_interp_create_gil(tstate, config->gil); if (_PyStatus_EXCEPTION(status)) { goto error; diff --git a/contrib/tools/python3/Python/pystate.c b/contrib/tools/python3/Python/pystate.c index 93fbbaaf01..c829f64431 100644 --- a/contrib/tools/python3/Python/pystate.c +++ b/contrib/tools/python3/Python/pystate.c @@ -691,7 +691,9 @@ init_interpreter(PyInterpreterState *interp, _obmalloc_pools_INIT(interp->obmalloc.pools); memcpy(&interp->obmalloc.pools.used, temp, sizeof(temp)); } - _PyObject_InitState(interp); + + // We would call _PyObject_InitState() at this point + // if interp->feature_flags were alredy set. _PyEval_InitState(interp, pending_lock); _PyGC_InitState(&interp->gc); @@ -1598,7 +1600,9 @@ tstate_delete_common(PyThreadState *tstate) if (tstate->_status.bound_gilstate) { unbind_gilstate_tstate(tstate); } - unbind_tstate(tstate); + if (tstate->_status.bound) { + unbind_tstate(tstate); + } // XXX Move to PyThreadState_Clear()? clear_datastack(tstate); diff --git a/contrib/tools/python3/Python/traceback.c b/contrib/tools/python3/Python/traceback.c index fdaf19d370..fba3594e97 100644 --- a/contrib/tools/python3/Python/traceback.c +++ b/contrib/tools/python3/Python/traceback.c @@ -1242,6 +1242,8 @@ done: static void dump_frame(int fd, _PyInterpreterFrame *frame) { + assert(frame->owner != FRAME_OWNED_BY_CSTACK); + PyCodeObject *code = frame->f_code; PUTS(fd, " File "); if (code->co_filename != NULL @@ -1315,24 +1317,27 @@ dump_traceback(int fd, PyThreadState *tstate, int write_header) unsigned int depth = 0; while (1) { + if (frame->owner == FRAME_OWNED_BY_CSTACK) { + /* Trampoline frame */ + frame = frame->previous; + if (frame == NULL) { + break; + } + + /* Can't have more than one shim frame in a row */ + assert(frame->owner != FRAME_OWNED_BY_CSTACK); + } + if (MAX_FRAME_DEPTH <= depth) { PUTS(fd, " ...\n"); break; } + dump_frame(fd, frame); frame = frame->previous; if (frame == NULL) { break; } - if (frame->owner == FRAME_OWNED_BY_CSTACK) { - /* Trampoline frame */ - frame = frame->previous; - } - if (frame == NULL) { - break; - } - /* Can't have more than one shim frame in a row */ - assert(frame->owner != FRAME_OWNED_BY_CSTACK); depth++; } } diff --git a/contrib/tools/python3/README.rst b/contrib/tools/python3/README.rst index f7fbe2083d..c6dc40b17f 100644 --- a/contrib/tools/python3/README.rst +++ b/contrib/tools/python3/README.rst @@ -1,4 +1,4 @@ -This is Python version 3.12.7 +This is Python version 3.12.8 ============================= .. image:: https://github.com/python/cpython/workflows/Tests/badge.svg @@ -64,7 +64,7 @@ the executable is called ``python.exe``; elsewhere it's just ``python``. Building a complete Python installation requires the use of various additional third-party libraries, depending on your build platform and configure options. Not all standard library modules are buildable or -useable on all platforms. Refer to the +usable on all platforms. Refer to the `Install dependencies <https://devguide.python.org/getting-started/setup-building.html#build-dependencies>`_ section of the `Developer Guide`_ for current detailed information on dependencies for various Linux distributions and macOS. diff --git a/contrib/tools/python3/bin/ya.make b/contrib/tools/python3/bin/ya.make index 49dfb8b7c4..082185c090 100644 --- a/contrib/tools/python3/bin/ya.make +++ b/contrib/tools/python3/bin/ya.make @@ -2,9 +2,9 @@ PY3_PROGRAM(python3) -VERSION(3.12.7) +VERSION(3.12.8) -ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.7.tar.gz) +ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.8.tar.gz) LICENSE(Python-2.0) diff --git a/contrib/tools/python3/patches/124938.patch b/contrib/tools/python3/patches/124938.patch deleted file mode 100644 index 218691a926..0000000000 --- a/contrib/tools/python3/patches/124938.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 3e07c20277cda90941953426f7bddc71d009388a Mon Sep 17 00:00:00 2001 -From: "Miss Islington (bot)" - <31488909+miss-islington@users.noreply.github.com> -Date: Tue, 16 Jul 2024 15:42:49 +0200 -Subject: [PATCH] [3.12] gh-113993: For string interning, do not rely on (or - assert) _Py_IsImmortal (GH-121358) (GH-121851) - -gh-113993: For string interning, do not rely on (or assert) _Py_IsImmortal (GH-121358) - -Older stable ABI extensions are allowed to make immortal objects mortal. -Instead, use `_PyUnicode_STATE` (`interned` and `statically_allocated`). -(cherry picked from commit 956270d08d5c23f59937e2f29f8e0b7f63d68afd) - -Co-authored-by: Petr Viktorin <encukou@gmail.com> ---- - ...024-07-04-13-23-27.gh-issue-113601.K3RLqp.rst | 2 ++ - Objects/unicodeobject.c | 16 ++++++++++------ - 2 files changed, 12 insertions(+), 6 deletions(-) - create mode 100644 Misc/NEWS.d/next/C API/2024-07-04-13-23-27.gh-issue-113601.K3RLqp.rst - -diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c -index 815747e1b1ed9c..7bd4b221c83cf7 100644 ---- a/Objects/unicodeobject.c -+++ b/Objects/unicodeobject.c -@@ -257,7 +257,8 @@ _PyUnicode_InternedSize_Immortal(void) - // value, to help detect bugs in optimizations. - - while (PyDict_Next(dict, &pos, &key, &value)) { -- if (_Py_IsImmortal(key)) { -+ assert(PyUnicode_CHECK_INTERNED(key) != SSTATE_INTERNED_IMMORTAL_STATIC); -+ if (PyUnicode_CHECK_INTERNED(key) == SSTATE_INTERNED_IMMORTAL) { - count++; - } - } -@@ -691,10 +692,14 @@ _PyUnicode_CheckConsistency(PyObject *op, int check_content) - - /* Check interning state */ - #ifdef Py_DEBUG -+ // Note that we do not check `_Py_IsImmortal(op)`, since stable ABI -+ // extensions can make immortal strings mortal (but with a high enough -+ // refcount). -+ // The other way is extremely unlikely (worth a potential failed assertion -+ // in a debug build), so we do check `!_Py_IsImmortal(op)`. - switch (PyUnicode_CHECK_INTERNED(op)) { - case SSTATE_NOT_INTERNED: - if (ascii->state.statically_allocated) { -- CHECK(_Py_IsImmortal(op)); - // This state is for two exceptions: - // - strings are currently checked before they're interned - // - the 256 one-latin1-character strings -@@ -710,11 +715,9 @@ _PyUnicode_CheckConsistency(PyObject *op, int check_content) - break; - case SSTATE_INTERNED_IMMORTAL: - CHECK(!ascii->state.statically_allocated); -- CHECK(_Py_IsImmortal(op)); - break; - case SSTATE_INTERNED_IMMORTAL_STATIC: - CHECK(ascii->state.statically_allocated); -- CHECK(_Py_IsImmortal(op)); - break; - default: - Py_UNREACHABLE(); -@@ -1899,7 +1902,8 @@ unicode_write_cstr(PyObject *unicode, Py_ssize_t index, - static PyObject* - get_latin1_char(Py_UCS1 ch) - { -- return Py_NewRef(LATIN1(ch)); -+ PyObject *o = LATIN1(ch); -+ return o; - } - - static PyObject* -@@ -15015,7 +15019,7 @@ intern_common(PyInterpreterState *interp, PyObject *s /* stolen */, - { - PyObject *r = (PyObject *)_Py_hashtable_get(INTERNED_STRINGS, s); - if (r != NULL) { -- assert(_Py_IsImmortal(r)); -+ assert(_PyUnicode_STATE(r).statically_allocated); - assert(r != s); // r must be statically_allocated; s is not - Py_DECREF(s); - return Py_NewRef(r); diff --git a/contrib/tools/python3/patches/pr127876-fix-segfault.patch b/contrib/tools/python3/patches/pr127876-fix-segfault.patch new file mode 100644 index 0000000000..1cadd3e8ad --- /dev/null +++ b/contrib/tools/python3/patches/pr127876-fix-segfault.patch @@ -0,0 +1,29 @@ +From c56b5256ff30f59955362ab536c6f089dd86f9fd Mon Sep 17 00:00:00 2001 +From: Alexander Shadchin <shadchin@yandex-team.com> +Date: Thu, 12 Dec 2024 19:39:27 +0300 +Subject: [PATCH 1/2] Fix segmentation fault + +--- + Objects/unicodeobject.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c +index 33c4747bbef488..e043015b49d510 100644 +--- a/Objects/unicodeobject.c ++++ b/Objects/unicodeobject.c +@@ -1429,12 +1429,12 @@ _copy_characters(PyObject *to, Py_ssize_t to_start, + assert(PyUnicode_Check(from)); + assert(from_start + how_many <= PyUnicode_GET_LENGTH(from)); + +- assert(PyUnicode_Check(to)); +- assert(to_start + how_many <= PyUnicode_GET_LENGTH(to)); +- + if (how_many == 0) + return 0; + ++ assert(PyUnicode_Check(to)); ++ assert(to_start + how_many <= PyUnicode_GET_LENGTH(to)); ++ + from_kind = PyUnicode_KIND(from); + from_data = PyUnicode_DATA(from); + to_kind = PyUnicode_KIND(to); diff --git a/contrib/tools/python3/ya.make b/contrib/tools/python3/ya.make index 025d2180f3..c7cc5c443b 100644 --- a/contrib/tools/python3/ya.make +++ b/contrib/tools/python3/ya.make @@ -2,9 +2,9 @@ LIBRARY() -VERSION(3.12.7) +VERSION(3.12.8) -ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.7.tar.gz) +ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.8.tar.gz) LICENSE(Python-2.0) |