diff options
author | Alexander Smirnov <alex@ydb.tech> | 2024-10-28 20:34:11 +0000 |
---|---|---|
committer | Alexander Smirnov <alex@ydb.tech> | 2024-10-28 20:34:11 +0000 |
commit | ef9875b11a33dbd25e92bc6b4cf692c18c9ba0ce (patch) | |
tree | 1f2fd4e4d9e585da35937b42fbda5f854af04728 | |
parent | 37ae9cc90160b53eb0e22021c47b3996a01cd656 (diff) | |
parent | e3c8507a3d1cb090278f211232ddfde3bedc54d4 (diff) | |
download | ydb-ef9875b11a33dbd25e92bc6b4cf692c18c9ba0ce.tar.gz |
Merge branch 'rightlib' into mergelibs-241028-2033
393 files changed, 13750 insertions, 10118 deletions
diff --git a/.piglet-meta.json b/.piglet-meta.json index a733cd2ea9..62429614de 100644 --- a/.piglet-meta.json +++ b/.piglet-meta.json @@ -1,3 +1,4 @@ { - "project":"ydblib" + "project":"ydblib", + "repository":"arcadia" }
\ No newline at end of file diff --git a/build/conf/autoincludes.json b/build/conf/autoincludes.json deleted file mode 100644 index fe51488c70..0000000000 --- a/build/conf/autoincludes.json +++ /dev/null @@ -1 +0,0 @@ -[] diff --git a/build/conf/fbs.conf b/build/conf/fbs.conf index 83932fb23c..3489175d04 100644 --- a/build/conf/fbs.conf +++ b/build/conf/fbs.conf @@ -122,6 +122,7 @@ multimodule FBS_LIBRARY { module PY2_FBS: PY2_LIBRARY { .IGNORED=GENERATE_ENUM_SERIALIZATION GENERATE_ENUM_SERIALIZATION_WITH_HEADER .ALIASES=SRCS=PY_SRCS + .INCLUDE_TAG=no ENABLE(PY2_FBS) SET(PEERDIR_TAGS PY2 PY2_FBS) # Can not use NO_LINT(), because is not allowed outside of contrib directory diff --git a/build/conf/python.conf b/build/conf/python.conf index 756d986315..5f043ccc59 100644 --- a/build/conf/python.conf +++ b/build/conf/python.conf @@ -142,7 +142,7 @@ when ($BUILD_PYTHON3_BIN) { YMAKE_PYTHON3_PEERDIR= } otherwise { - YMAKE_PYTHON3=${YMAKE_PYTHON3_RESOURCE_GLOBAL}/python3 + YMAKE_PYTHON3=${YMAKE_PYTHON3_RESOURCE_GLOBAL}/bin/python3 } # tag:python-specific diff --git a/build/conf/settings.conf b/build/conf/settings.conf index 40fa804104..ef90bb9fc3 100644 --- a/build/conf/settings.conf +++ b/build/conf/settings.conf @@ -125,5 +125,3 @@ _FOLDABLE_VARS=\ ARCADIA_TEST_ROOT=../arcadia_tests_data/ DEFAULT_REQUIREMENTS=network:restricted cpu:1 ram:32 - -AUTOINCLUDE_PATHS=build/conf/autoincludes.json diff --git a/build/conf/ts/ts_test.conf b/build/conf/ts/ts_test.conf index 46887b8cd2..be683c6ff1 100644 --- a/build/conf/ts/ts_test.conf +++ b/build/conf/ts/ts_test.conf @@ -32,7 +32,7 @@ module TS_TEST_JEST_FOR: _TS_TEST_BASE { .CMD=TS_TEST_JEST_CMD # for multimodule peers we should choose NODE_MODULES - SET(PEERDIR_TAGS TS) + SET(PEERDIR_TAGS TS TS_PROTO) # compatibility with old TS_TEST_SRCS SET(TS_TEST_EXTENSION test.(ts|tsx|js|jsx)) @@ -46,7 +46,7 @@ module TS_TEST_JEST_FOR: _TS_TEST_BASE { _TS_ADD_NODE_MODULES_FOR_BUILDER() } -TS_TEST_HERMIONE_CMD=$TOUCH_UNIT \ +TS_TEST_HERMIONE_CMD=$TOUCH_UNIT ${hide:PEERS} \ && ${cwd:BINDIR} $MOVE_FILE ${input:TS_TEST_NM} ${output:"workspace_node_modules.tar"} \ ${hide;kv:"p TSHRM"} ${hide;kv:"pc magenta"} @@ -67,7 +67,7 @@ module TS_TEST_HERMIONE_FOR: _TS_TEST_BASE { .CMD=TS_TEST_HERMIONE_CMD # for multimodule peers we should choose TS - SET(PEERDIR_TAGS TS) + SET(PEERDIR_TAGS TS TS_PROTO) # compatibility with old TS_TEST_SRCS SET(TS_TEST_EXTENSION hermione.(ts|js)) @@ -101,7 +101,7 @@ module TS_TEST_PLAYWRIGHT_FOR: _TS_TEST_BASE { .CMD=TS_TEST_PLAYWRIGHT_CMD # for multimodule peers we should choose TS - SET(PEERDIR_TAGS TS) + SET(PEERDIR_TAGS TS TS_PROTO) # compatibility with old TS_TEST_SRCS SET(TS_TEST_EXTENSION (playwright|spec).(ts|js)) @@ -134,7 +134,7 @@ module TS_TEST_PLAYWRIGHT_LARGE_FOR: _TS_TEST_BASE { .CMD=TS_TEST_PLAYWRIGHT_LARGE_CMD # for multimodule peers we should choose TS - SET(PEERDIR_TAGS TS) + SET(PEERDIR_TAGS TS TS_PROTO) # compatibility with old TS_TEST_SRCS SET(TS_TEST_EXTENSION (playwright|spec).(ts|js)) diff --git a/build/mapping.conf.json b/build/mapping.conf.json index c527364b80..da06c1f807 100644 --- a/build/mapping.conf.json +++ b/build/mapping.conf.json @@ -418,8 +418,12 @@ "7258655189": "https://devtools-registry.s3.yandex.net/7258655189", "7268412397": "https://devtools-registry.s3.yandex.net/7268412397", "7268415538": "https://devtools-registry.s3.yandex.net/7268415538", - "7303146160": "https://devtools-registry.s3.yandex.net/7303146160", - "7303155140": "https://devtools-registry.s3.yandex.net/7303155140", + "7312971312": "https://devtools-registry.s3.yandex.net/7312971312", + "7313006036": "https://devtools-registry.s3.yandex.net/7313006036", + "7328789439": "https://devtools-registry.s3.yandex.net/7328789439", + "7328798659": "https://devtools-registry.s3.yandex.net/7328798659", + "7347465174": "https://devtools-registry.s3.yandex.net/7347465174", + "7347467510": "https://devtools-registry.s3.yandex.net/7347467510", "5486731632": "https://devtools-registry.s3.yandex.net/5486731632", "5514350352": "https://devtools-registry.s3.yandex.net/5514350352", "5514360398": "https://devtools-registry.s3.yandex.net/5514360398", @@ -844,8 +848,11 @@ "6990868751": "https://devtools-registry.s3.yandex.net/6990868751", "6990860705": "https://devtools-registry.s3.yandex.net/6990860705", "6990881789": "https://devtools-registry.s3.yandex.net/6990881789", + "7324461836": "https://devtools-registry.s3.yandex.net/7324461836", "7193803465": "https://devtools-registry.s3.yandex.net/7193803465", + "7324464594": "https://devtools-registry.s3.yandex.net/7324464594", "7193800506": "https://devtools-registry.s3.yandex.net/7193800506", + "7324461714": "https://devtools-registry.s3.yandex.net/7324461714", "7193813071": "https://devtools-registry.s3.yandex.net/7193813071", "3167009386": "https://devtools-registry.s3.yandex.net/3167009386", "3050798466": "https://devtools-registry.s3.yandex.net/3050798466", @@ -938,6 +945,16 @@ "5647712429": "https://devtools-registry.s3.yandex.net/5647712429", "5690801745": "https://devtools-registry.s3.yandex.net/5690801745", "5731299437": "https://devtools-registry.s3.yandex.net/5731299437", + "7320178938": "https://devtools-registry.s3.yandex.net/7320178938", + "7335838685": "https://devtools-registry.s3.yandex.net/7335838685", + "7320191969": "https://devtools-registry.s3.yandex.net/7320191969", + "7335977723": "https://devtools-registry.s3.yandex.net/7335977723", + "7320114121": "https://devtools-registry.s3.yandex.net/7320114121", + "7335939646": "https://devtools-registry.s3.yandex.net/7335939646", + "7320108874": "https://devtools-registry.s3.yandex.net/7320108874", + "7336031045": "https://devtools-registry.s3.yandex.net/7336031045", + "7320257970": "https://devtools-registry.s3.yandex.net/7320257970", + "7336062757": "https://devtools-registry.s3.yandex.net/7336062757", "6048579718": "https://devtools-registry.s3.yandex.net/6048579718", "2980468199": "https://devtools-registry.s3.yandex.net/2980468199", "5562224408": "https://devtools-registry.s3.yandex.net/5562224408" @@ -1360,8 +1377,12 @@ "7258655189": "devtools/ya/test/programs/test_tool/bin/test_tool for linux", "7268412397": "devtools/ya/test/programs/test_tool/bin/test_tool for linux", "7268415538": "devtools/ya/test/programs/test_tool/bin/test_tool for linux", - "7303146160": "devtools/ya/test/programs/test_tool/bin/test_tool for linux", - "7303155140": "devtools/ya/test/programs/test_tool/bin/test_tool for linux", + "7312971312": "devtools/ya/test/programs/test_tool/bin/test_tool for linux", + "7313006036": "devtools/ya/test/programs/test_tool/bin/test_tool for linux", + "7328789439": "devtools/ya/test/programs/test_tool/bin/test_tool for linux", + "7328798659": "devtools/ya/test/programs/test_tool/bin/test_tool for linux", + "7347465174": "devtools/ya/test/programs/test_tool/bin/test_tool for linux", + "7347467510": "devtools/ya/test/programs/test_tool/bin/test_tool for linux", "5486731632": "devtools/ya/test/programs/test_tool/bin3/test_tool3 for linux", "5514350352": "devtools/ya/test/programs/test_tool/bin3/test_tool3 for linux", "5514360398": "devtools/ya/test/programs/test_tool/bin3/test_tool3 for linux", @@ -1786,8 +1807,11 @@ "6990868751": "none-none-none-sandbox/backup/3527d100-e2d0-4b0e-bb7a-905010853d98/yfm-docs.tar", "6990860705": "none-none-none-sandbox/backup/d386643e-58f8-43e1-8760-341d73801df8/yfm-docs.tar", "6990881789": "none-none-none-sandbox/backup/efc428e5-52a5-4a6f-8f0c-53f1d255efea/yfm-docs.tar", + "7324461836": "none-none-none-service_resources/TASKLET_EXECUTABLE/backup/0541e185-8261-4b07-9149-257f03a9c8ae/yfm-docs.tar", "7193803465": "none-none-none-service_resources/TASKLET_EXECUTABLE/backup/17df2ad2-24bc-49e8-8909-b58685dac393/yfm-docs.tar", + "7324464594": "none-none-none-service_resources/TASKLET_EXECUTABLE/backup/32cc8c74-decd-44a8-bc8c-f8f0d7edfffe/yfm-docs.tar", "7193800506": "none-none-none-service_resources/TASKLET_EXECUTABLE/backup/9be8ed55-d7f8-4029-a7fd-fbfa072b896f/yfm-docs.tar", + "7324461714": "none-none-none-service_resources/TASKLET_EXECUTABLE/backup/b3543418-58d4-4e1c-b2be-43b55b035e91/yfm-docs.tar", "7193813071": "none-none-none-service_resources/TASKLET_EXECUTABLE/backup/b6531a79-b803-4672-a9e9-f9f348009f5f/yfm-docs.tar", "3167009386": "openjdk 11.0.15 vanilla for darwin", "3050798466": "openjdk 11.0.15 vanilla for darwin-arm64", @@ -1880,6 +1904,16 @@ "5647712429": "ymake.exe for win32-clang-cl", "5690801745": "ymake.exe for win32-clang-cl", "5731299437": "ymake.exe for win32-clang-cl", + "7320178938": "ynd-bin-frozen-python3-darwin-arm64-e139f4d2038ecfbb34fbbd77f84c4b63ddcb613b", + "7335838685": "ynd-bin-frozen-python3-darwin-arm64-eacbfe8057414a218b407c837c9dcd8f2162f810", + "7320191969": "ynd-bin-frozen-python3-darwin-x86_64-e139f4d2038ecfbb34fbbd77f84c4b63ddcb613b", + "7335977723": "ynd-bin-frozen-python3-darwin-x86_64-eacbfe8057414a218b407c837c9dcd8f2162f810", + "7320114121": "ynd-bin-frozen-python3-linux-aarch64-e139f4d2038ecfbb34fbbd77f84c4b63ddcb613b", + "7335939646": "ynd-bin-frozen-python3-linux-aarch64-eacbfe8057414a218b407c837c9dcd8f2162f810", + "7320108874": "ynd-bin-frozen-python3-linux-x86_64-e139f4d2038ecfbb34fbbd77f84c4b63ddcb613b", + "7336031045": "ynd-bin-frozen-python3-linux-x86_64-eacbfe8057414a218b407c837c9dcd8f2162f810", + "7320257970": "ynd-bin-frozen-python3-mingw-w64-x86_64-e139f4d2038ecfbb34fbbd77f84c4b63ddcb613b", + "7336062757": "ynd-bin-frozen-python3-mingw-w64-x86_64-eacbfe8057414a218b407c837c9dcd8f2162f810", "6048579718": "yt/go/ytrecipe/cmd/ytexec for linux", "2980468199": "ytexec for linux", "5562224408": "ytexec for linux" diff --git a/build/platform/python/ymake_python3/resources.json b/build/platform/python/ymake_python3/resources.json index 53c4a82d5b..3daed006e9 100644 --- a/build/platform/python/ymake_python3/resources.json +++ b/build/platform/python/ymake_python3/resources.json @@ -1,19 +1,19 @@ { "by_platform": { - "darwin-x86_64": { - "uri": "sbr:7203671634" - }, "darwin-arm64": { - "uri": "sbr:7203671142" + "uri": "sbr:7335838685" }, - "linux-x86_64": { - "uri": "sbr:7203672677" + "darwin-x86_64": { + "uri": "sbr:7335977723" }, "linux-aarch64": { - "uri": "sbr:7203672172" + "uri": "sbr:7335939646" + }, + "linux-x86_64": { + "uri": "sbr:7336031045" }, "win32-x86_64": { - "uri": "sbr:7203670792" + "uri": "sbr:7336062757" } } } diff --git a/build/platform/test_tool/host.ya.make.inc b/build/platform/test_tool/host.ya.make.inc index 058b1a9d61..57f40b0903 100644 --- a/build/platform/test_tool/host.ya.make.inc +++ b/build/platform/test_tool/host.ya.make.inc @@ -1,12 +1,12 @@ IF (HOST_OS_DARWIN AND HOST_ARCH_X86_64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7303154871) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7347466790) ELSEIF (HOST_OS_DARWIN AND HOST_ARCH_ARM64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7303154594) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7347466501) ELSEIF (HOST_OS_LINUX AND HOST_ARCH_X86_64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7303155140) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7347467510) ELSEIF (HOST_OS_LINUX AND HOST_ARCH_AARCH64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7303154435) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7347466127) ELSEIF (HOST_OS_WINDOWS AND HOST_ARCH_X86_64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7303155023) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7347467244) ENDIF() diff --git a/build/platform/test_tool/host_os.ya.make.inc b/build/platform/test_tool/host_os.ya.make.inc index 0066d0c96f..5b2f6a58fa 100644 --- a/build/platform/test_tool/host_os.ya.make.inc +++ b/build/platform/test_tool/host_os.ya.make.inc @@ -1,12 +1,12 @@ IF (HOST_OS_DARWIN AND HOST_ARCH_X86_64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7303145767) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7347464693) ELSEIF (HOST_OS_DARWIN AND HOST_ARCH_ARM64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7303145350) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7347464406) ELSEIF (HOST_OS_LINUX AND HOST_ARCH_X86_64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7303146160) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7347465174) ELSEIF (HOST_OS_LINUX AND HOST_ARCH_AARCH64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7303145126) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7347464141) ELSEIF (HOST_OS_WINDOWS AND HOST_ARCH_X86_64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7303145973) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:7347464906) ENDIF() diff --git a/build/platform/yfm/ya.make b/build/platform/yfm/ya.make index 7fecd8cd59..c0605f4b9d 100644 --- a/build/platform/yfm/ya.make +++ b/build/platform/yfm/ya.make @@ -6,10 +6,10 @@ ENDIF() DECLARE_EXTERNAL_HOST_RESOURCES_BUNDLE( YFM_TOOL - sbr:7193813071 FOR DARWIN-ARM64 - sbr:7193813071 FOR DARWIN - sbr:7193800506 FOR LINUX - sbr:7193803465 FOR WIN32 + sbr:7324461714 FOR DARWIN-ARM64 + sbr:7324461714 FOR DARWIN + sbr:7324464594 FOR LINUX + sbr:7324461836 FOR WIN32 ) END() diff --git a/build/plugins/lib/nots/package_manager/base/package_manager.py b/build/plugins/lib/nots/package_manager/base/package_manager.py index efd5038d27..fbe4a16436 100644 --- a/build/plugins/lib/nots/package_manager/base/package_manager.py +++ b/build/plugins/lib/nots/package_manager/base/package_manager.py @@ -102,7 +102,7 @@ class BasePackageManager(object): pass @abstractmethod - def calc_node_modules_inouts(self, local_cli=False) -> tuple[list[str], list[str]]: + def calc_node_modules_inouts(self, local_cli: bool, has_deps: bool) -> tuple[list[str], list[str]]: pass @abstractmethod diff --git a/build/plugins/lib/nots/package_manager/base/utils.py b/build/plugins/lib/nots/package_manager/base/utils.py index 916da6d9b3..ffb3952721 100644 --- a/build/plugins/lib/nots/package_manager/base/utils.py +++ b/build/plugins/lib/nots/package_manager/base/utils.py @@ -50,6 +50,13 @@ def build_nm_bundle_path(p): return os.path.join(p, NODE_MODULES_WORKSPACE_BUNDLE_FILENAME) +def build_nm_store_path(moddir: str) -> str: + nots_store_path = os.getenv("NOTS_STORE_PATH", os.path.join(home_dir(), ".nots")) + build_path = os.path.join(nots_store_path, "nm_store", moddir) + + return build_path + + def extract_package_name_from_path(p): # if we have scope prefix then we are using the first two tokens, otherwise - only the first one parts = p.split("/", 2) diff --git a/build/plugins/lib/nots/package_manager/npm/npm_package_manager.py b/build/plugins/lib/nots/package_manager/npm/npm_package_manager.py index 3de14b1d7c..1d251ee1c8 100644 --- a/build/plugins/lib/nots/package_manager/npm/npm_package_manager.py +++ b/build/plugins/lib/nots/package_manager/npm/npm_package_manager.py @@ -64,38 +64,28 @@ class NpmPackageManager(BasePackageManager): resources = [] if has_deps: - for dep_path in self.get_local_peers_from_package_json(): - ins.append(b_rooted(build_ws_config_path(dep_path))) - for pkg in self.extract_packages_meta_from_lockfiles([build_lockfile_path(self.sources_path)]): resources.append(pkg.to_uri()) outs.append(b_rooted(self._tarballs_store_path(pkg, store_path))) return ins, outs, resources - def calc_node_modules_inouts(self, local_cli=False) -> tuple[list[str], list[str]]: + def calc_node_modules_inouts(self, local_cli: bool, has_deps: bool) -> tuple[list[str], list[str]]: """ Returns input and output paths for command that creates `node_modules` bundle. It relies on .PEERDIRSELF=TS_PREPARE_DEPS Inputs: - source package.json - - merged pre-lockfiles and workspace configs of TS_PREPARE_DEPS Outputs: - created node_modules bundle """ ins = [ s_rooted(build_pj_path(self.module_path)), - b_rooted(build_ws_config_path(self.module_path)), ] outs = [] - pj = self.load_package_json_from_dir(self.sources_path) - if pj.has_dependencies(): - ins.append(b_rooted(build_pre_lockfile_path(self.module_path))) - if not local_cli: - outs.append(b_rooted(build_nm_bundle_path(self.module_path))) - for dep_path in self.get_local_peers_from_package_json(): - ins.append(b_rooted(build_pj_path(dep_path))) + if not local_cli and has_deps: + outs.append(b_rooted(build_nm_bundle_path(self.module_path))) return ins, outs diff --git a/build/plugins/lib/nots/package_manager/pnpm/package_manager.py b/build/plugins/lib/nots/package_manager/pnpm/package_manager.py index 8be7a2dddb..b40cafeb34 100644 --- a/build/plugins/lib/nots/package_manager/pnpm/package_manager.py +++ b/build/plugins/lib/nots/package_manager/pnpm/package_manager.py @@ -8,7 +8,15 @@ from ..base import BasePackageManager, PackageManagerError from ..base.constants import NODE_MODULES_WORKSPACE_BUNDLE_FILENAME from ..base.node_modules_bundler import bundle_node_modules from ..base.timeit import timeit -from ..base.utils import b_rooted, build_nm_bundle_path, build_pj_path, home_dir, s_rooted +from ..base.utils import ( + b_rooted, + build_nm_bundle_path, + build_nm_path, + build_nm_store_path, + build_pj_path, + home_dir, + s_rooted, +) class PnpmPackageManager(BasePackageManager): @@ -55,8 +63,10 @@ class PnpmPackageManager(BasePackageManager): if local_cli: # Use single CAS for all the projects built locally store_dir = self.get_local_pnpm_store() - # It's a default value of pnpm itself. But it should be defined explicitly for not using values from the lockfiles or from the previous installations. - virtual_store_dir = self._nm_path('.pnpm') + + nm_store_path = build_nm_store_path(self.module_path) + # Use single virtual-store location in ~/.nots/nm_store/$MODDIR/node_modules/.pnpm/virtual-store + virtual_store_dir = os.path.join(build_nm_path(nm_store_path), self._VSTORE_NM_PATH) self._run_pnpm_install(store_dir, virtual_store_dir) self._run_apply_addons_if_need(yatool_prebuilder_path, virtual_store_dir) @@ -106,39 +116,26 @@ class PnpmPackageManager(BasePackageManager): resources = [] if has_deps: - for dep_path in self.get_local_peers_from_package_json(): - ins.append(b_rooted(build_ws_config_path(dep_path))) - ins.append(b_rooted(build_pre_lockfile_path(dep_path))) - for pkg in self.extract_packages_meta_from_lockfiles([build_lockfile_path(self.sources_path)]): resources.append(pkg.to_uri()) outs.append(b_rooted(self._tarballs_store_path(pkg, store_path))) return ins, outs, resources - # TODO: FBP-1254 - # def calc_node_modules_inouts(self, local_cli=False) -> (list[str], list[str]): - def calc_node_modules_inouts(self, local_cli=False): + def calc_node_modules_inouts(self, local_cli: bool, has_deps: bool) -> tuple[list[str], list[str]]: """ Returns input and output paths for command that creates `node_modules` bundle. It relies on .PEERDIRSELF=TS_PREPARE_DEPS Inputs: - source package.json - - merged pre-lockfiles and workspace configs of TS_PREPARE_DEPS Outputs: - created node_modules bundle """ ins = [s_rooted(build_pj_path(self.module_path))] outs = [] - pj = self.load_package_json_from_dir(self.sources_path) - if pj.has_dependencies(): - ins.append(b_rooted(build_pre_lockfile_path(self.module_path))) - ins.append(b_rooted(build_ws_config_path(self.module_path))) - if not local_cli: - outs.append(b_rooted(build_nm_bundle_path(self.module_path))) - for dep_path in self.get_local_peers_from_package_json(): - ins.append(b_rooted(build_pj_path(dep_path))) + if not local_cli and has_deps: + outs.append(b_rooted(build_nm_bundle_path(self.module_path))) return ins, outs diff --git a/build/plugins/lib/nots/typescript/ts_config.py b/build/plugins/lib/nots/typescript/ts_config.py index d05a928171..9d762a0d94 100644 --- a/build/plugins/lib/nots/typescript/ts_config.py +++ b/build/plugins/lib/nots/typescript/ts_config.py @@ -276,7 +276,7 @@ class TsConfig(object): return ts_glob(ts_glob_config, all_files) def get_out_dirs(self): - # type: () -> list[str] + # type: () -> set[str] output_dirs = [self.compiler_option("outDir"), self.compiler_option("declarationDir")] - return [d for d in output_dirs if d is not None] + return {d for d in output_dirs if d is not None} diff --git a/build/plugins/lib/test_const/__init__.py b/build/plugins/lib/test_const/__init__.py index c6f16bdb09..1499b0c2f7 100644 --- a/build/plugins/lib/test_const/__init__.py +++ b/build/plugins/lib/test_const/__init__.py @@ -436,6 +436,25 @@ class ServiceTags(Enum): AnyTag = "ya:anytag" +class PythonLinterName(Enum): + Flake8 = "flake8" + Py2Flake8 = "py2_flake8" + Black = "black" + DummyLinter = "dummy_linter" + + +class CppLinterName(Enum): + ClangFormat = "clang_format" + # kept for compatibility + # TODO delete along with the record in default_configs.json + DoNotUse = "clang-format" + + +class DefaultLinterConfig(Enum): + Python = "build/config/tests/py_style/default_configs.json" + Cpp = "build/config/tests/cpp_style/default_configs.json" + + class Status(object): GOOD, XFAIL, FAIL, XPASS, MISSING, CRASHED, TIMEOUT = range(1, 8) SKIPPED = -100 diff --git a/build/plugins/nots.py b/build/plugins/nots.py index f6824b67e7..2f49030375 100644 --- a/build/plugins/nots.py +++ b/build/plugins/nots.py @@ -795,11 +795,12 @@ def on_prepare_deps_configure(unit: NotsUnitType) -> None: def on_node_modules_configure(unit: NotsUnitType) -> None: pm = _create_pm(unit) pj = pm.load_package_json_from_dir(pm.sources_path) + has_deps = pj.has_dependencies() - if pj.has_dependencies(): + if has_deps: unit.onpeerdir(pm.get_local_peers_from_package_json()) local_cli = unit.get("TS_LOCAL_CLI") == "yes" - ins, outs = pm.calc_node_modules_inouts(local_cli) + ins, outs = pm.calc_node_modules_inouts(local_cli, has_deps) __set_append(unit, "_NODE_MODULES_INOUTS", _build_directives("input", ["hide"], sorted(ins))) if not unit.get("TS_TEST_FOR"): diff --git a/build/scripts/Readme.md b/build/scripts/Readme.md new file mode 100644 index 0000000000..bed6615ba0 --- /dev/null +++ b/build/scripts/Readme.md @@ -0,0 +1,9 @@ +# Note +При добавлении новых скриптов в данную директорию не забывайте указывать две вещи: + +1. Явное разрешать импорт модулей из текущей директории, если это вам необходимо, с помощью строк: +```python3 +import os.path, sys +sys.path.append(os.path.dirname(os.path.abspath(__file__))) +``` +2. В командах вызова скриптов прописывать все их зависимые модули через `${input:"build/scripts/module_1.py"}`, `${input:"build/scripts/module_2.py"}` ... diff --git a/build/scripts/c_templates/svn_interface.c b/build/scripts/c_templates/svn_interface.c index 65fd97f9b2..8baf1d197b 100644 --- a/build/scripts/c_templates/svn_interface.c +++ b/build/scripts/c_templates/svn_interface.c @@ -1,6 +1,7 @@ // Used indirectly. See build/scripts/vcs_info.py // ya-bin dump vcs-info > vcs.json // python build/scripts/vcs_info.py vcs.json out.c build/scripts/c_templates/svn_interface.c <any_prefix>library/cpp/svnversion<any_suffix> +// DO_NOT_STYLE because this script is sometimes implicilty added as a styling target to STYLE_CPP #include "build/scripts/c_templates/svnversion.h" diff --git a/build/scripts/compile_java.py b/build/scripts/compile_java.py index 654543f976..a28d737195 100644 --- a/build/scripts/compile_java.py +++ b/build/scripts/compile_java.py @@ -8,6 +8,9 @@ import tarfile import zipfile import sys +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf import java_command_file as jcf diff --git a/build/scripts/copy_clang_profile_rt.py b/build/scripts/copy_clang_profile_rt.py index f8058e9e64..84444b9dbf 100644 --- a/build/scripts/copy_clang_profile_rt.py +++ b/build/scripts/copy_clang_profile_rt.py @@ -1,7 +1,10 @@ import optparse -import os +import sys, os import shutil +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf # List is a temporary thing to ensure that nothing breaks before and after switching to newer clang diff --git a/build/scripts/copy_docs_files.py b/build/scripts/copy_docs_files.py index 4ad70997c1..2428b5fddf 100644 --- a/build/scripts/copy_docs_files.py +++ b/build/scripts/copy_docs_files.py @@ -2,9 +2,13 @@ import argparse import codecs import errno import os +import sys + +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf import shutil -import sys def parse_args(): diff --git a/build/scripts/copy_docs_files_to_dir.py b/build/scripts/copy_docs_files_to_dir.py index 8ac23b0700..ea9fd7fccb 100644 --- a/build/scripts/copy_docs_files_to_dir.py +++ b/build/scripts/copy_docs_files_to_dir.py @@ -2,9 +2,13 @@ import argparse import codecs import errno import os +import sys + +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf import shutil -import sys def parse_args(): diff --git a/build/scripts/copy_files_to_dir.py b/build/scripts/copy_files_to_dir.py index 2403f0a683..a597eb987d 100644 --- a/build/scripts/copy_files_to_dir.py +++ b/build/scripts/copy_files_to_dir.py @@ -1,9 +1,13 @@ import argparse import errno import os +import sys + +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf import shutil -import sys def parse_args(): diff --git a/build/scripts/extract_docs.py b/build/scripts/extract_docs.py index 5bf19f8866..8ab835b720 100644 --- a/build/scripts/extract_docs.py +++ b/build/scripts/extract_docs.py @@ -1,9 +1,13 @@ import argparse import os -import process_command_files as pcf import tarfile import sys +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) +import process_command_files as pcf + def parse_args(): parser = argparse.ArgumentParser() diff --git a/build/scripts/fetch_from.py b/build/scripts/fetch_from.py index bd27d75d8e..0e543c810a 100755 --- a/build/scripts/fetch_from.py +++ b/build/scripts/fetch_from.py @@ -22,6 +22,9 @@ except (ImportError, ModuleNotFoundError): # Python 3 import urllib.request as urllib_request from urllib.error import HTTPError, URLError + # Explicitly enable local imports + # Don't forget to add imported scripts to inputs of the calling command! + sys.path.append(os.path.dirname(os.path.abspath(__file__))) import retry diff --git a/build/scripts/fetch_from_archive.py b/build/scripts/fetch_from_archive.py index 3214b78dc8..c5513c48d1 100644 --- a/build/scripts/fetch_from_archive.py +++ b/build/scripts/fetch_from_archive.py @@ -4,6 +4,9 @@ import sys import logging import argparse +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import fetch_from diff --git a/build/scripts/fetch_from_mds.py b/build/scripts/fetch_from_mds.py index 559cf8350d..b7126d0b4b 100644 --- a/build/scripts/fetch_from_mds.py +++ b/build/scripts/fetch_from_mds.py @@ -1,11 +1,13 @@ from __future__ import print_function -from __future__ import print_function import os import sys import logging import argparse +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import fetch_from diff --git a/build/scripts/fetch_from_sandbox.py b/build/scripts/fetch_from_sandbox.py index a8f0fc5997..2995d4df71 100755 --- a/build/scripts/fetch_from_sandbox.py +++ b/build/scripts/fetch_from_sandbox.py @@ -11,6 +11,10 @@ import time import urllib2 import uuid +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) + import fetch_from diff --git a/build/scripts/fix_msvc_output.py b/build/scripts/fix_msvc_output.py index c9694afbc8..49df9aee3b 100644 --- a/build/scripts/fix_msvc_output.py +++ b/build/scripts/fix_msvc_output.py @@ -1,6 +1,9 @@ import subprocess -import sys +import os, sys +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf import process_whole_archive_option as pwa diff --git a/build/scripts/fix_py2_protobuf.py b/build/scripts/fix_py2_protobuf.py index 06e81ed648..b2e9ed028b 100644 --- a/build/scripts/fix_py2_protobuf.py +++ b/build/scripts/fix_py2_protobuf.py @@ -1,6 +1,9 @@ import subprocess -import os +import os, sys +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf diff --git a/build/scripts/fs_tools.py b/build/scripts/fs_tools.py index 63ca00932e..74ca8fef29 100644 --- a/build/scripts/fs_tools.py +++ b/build/scripts/fs_tools.py @@ -6,6 +6,9 @@ import sys import shutil import errno +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf diff --git a/build/scripts/gen_join_srcs.py b/build/scripts/gen_join_srcs.py index e0c2df161a..dfb12e7733 100644 --- a/build/scripts/gen_join_srcs.py +++ b/build/scripts/gen_join_srcs.py @@ -1,5 +1,8 @@ -import sys +import os, sys +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf diff --git a/build/scripts/generate_mf.py b/build/scripts/generate_mf.py index 447215c723..14db77c7b6 100644 --- a/build/scripts/generate_mf.py +++ b/build/scripts/generate_mf.py @@ -6,6 +6,9 @@ import io import six +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf diff --git a/build/scripts/go_tool.py b/build/scripts/go_tool.py index f1dbc9731e..e73fa7e7f9 100644 --- a/build/scripts/go_tool.py +++ b/build/scripts/go_tool.py @@ -13,6 +13,9 @@ import traceback from contextlib import contextmanager from functools import reduce +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf import process_whole_archive_option as pwa diff --git a/build/scripts/link_dyn_lib.py b/build/scripts/link_dyn_lib.py index 3e62f4c407..53757a7c75 100644 --- a/build/scripts/link_dyn_lib.py +++ b/build/scripts/link_dyn_lib.py @@ -7,6 +7,9 @@ import collections import optparse import pipes +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import thinlto_cache import link_exe diff --git a/build/scripts/link_exe.py b/build/scripts/link_exe.py index 6ea2f91c3d..634840cf90 100644 --- a/build/scripts/link_exe.py +++ b/build/scripts/link_exe.py @@ -6,6 +6,9 @@ import subprocess import optparse import textwrap +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf import thinlto_cache diff --git a/build/scripts/link_fat_obj.py b/build/scripts/link_fat_obj.py index aeafea58c4..1b6f59777d 100644 --- a/build/scripts/link_fat_obj.py +++ b/build/scripts/link_fat_obj.py @@ -1,7 +1,10 @@ import argparse import subprocess -import sys +import sys, os +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf from process_whole_archive_option import ProcessWholeArchiveOption diff --git a/build/scripts/make_container.py b/build/scripts/make_container.py index 2c07177fdb..05a310a5fc 100644 --- a/build/scripts/make_container.py +++ b/build/scripts/make_container.py @@ -5,6 +5,9 @@ import struct import subprocess import sys +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import container # 1 diff --git a/build/scripts/make_java_classpath_file.py b/build/scripts/make_java_classpath_file.py index fbd9eb1358..0219a386f1 100644 --- a/build/scripts/make_java_classpath_file.py +++ b/build/scripts/make_java_classpath_file.py @@ -1,6 +1,9 @@ import os import sys +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf diff --git a/build/scripts/make_java_srclists.py b/build/scripts/make_java_srclists.py index ccf4027b0d..02a9da78e0 100644 --- a/build/scripts/make_java_srclists.py +++ b/build/scripts/make_java_srclists.py @@ -2,6 +2,9 @@ import os import sys import argparse +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf import java_pack_to_file as jcov diff --git a/build/scripts/move.py b/build/scripts/move.py index f38e88a406..0154294505 100644 --- a/build/scripts/move.py +++ b/build/scripts/move.py @@ -1,6 +1,9 @@ import os import sys +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf # /script/move.py <src-1> <tgt-1> <src-2> <tgt-2> ... <src-n> <tgt-n> diff --git a/build/scripts/process_whole_archive_option.py b/build/scripts/process_whole_archive_option.py index 3e4458a8c7..0f5c3bf4c4 100644 --- a/build/scripts/process_whole_archive_option.py +++ b/build/scripts/process_whole_archive_option.py @@ -1,5 +1,8 @@ -import os +import os, sys +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf diff --git a/build/scripts/run_javac.py b/build/scripts/run_javac.py index a7c2296197..a3c91da13c 100644 --- a/build/scripts/run_javac.py +++ b/build/scripts/run_javac.py @@ -4,6 +4,9 @@ import optparse import os import re +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import build_java_with_error_prone2 as java_error_prone import setup_java_tmpdir as java_tmpdir diff --git a/build/scripts/run_msvc_wine.py b/build/scripts/run_msvc_wine.py index 3a498d7388..d7ede556d2 100644 --- a/build/scripts/run_msvc_wine.py +++ b/build/scripts/run_msvc_wine.py @@ -9,6 +9,9 @@ import json import argparse import errno +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf import process_whole_archive_option as pwa diff --git a/build/scripts/sky.py b/build/scripts/sky.py index b703af7ed1..89ee2e8d36 100644 --- a/build/scripts/sky.py +++ b/build/scripts/sky.py @@ -1,7 +1,10 @@ import logging -import os +import os, sys import subprocess +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import fetch_from diff --git a/build/scripts/writer.py b/build/scripts/writer.py index ce88e35693..08c47c9f5c 100644 --- a/build/scripts/writer.py +++ b/build/scripts/writer.py @@ -1,6 +1,9 @@ -import sys +import sys, os import argparse +# Explicitly enable local imports +# Don't forget to add imported scripts to inputs of the calling command! +sys.path.append(os.path.dirname(os.path.abspath(__file__))) import process_command_files as pcf diff --git a/build/ya.conf.json b/build/ya.conf.json index a36158cf1f..0a0836a7d2 100644 --- a/build/ya.conf.json +++ b/build/ya.conf.json @@ -232,6 +232,7 @@ "python3": { "executable": { "python3": [ + "bin", "python3" ] }, diff --git a/build/ymake.core.conf b/build/ymake.core.conf index 8470d35c2f..7964201a89 100644 --- a/build/ymake.core.conf +++ b/build/ymake.core.conf @@ -5899,12 +5899,15 @@ macro STYLE_CPP() { _ADD_CPP_LINTER_CHECK(NAME clang_format LINTER tools/cpp_style_checker/cpp_style_checker DEPENDS contrib/libs/clang16/tools/clang-format CONFIGS $CPP_LINTERS_DEFAULT_CONFIGS) } -### @usage: HEADERS([Dir1 Dir2 ...]) +### @usage: HEADERS(<Dirs...> [EXCLUDE patterns...]) ### ### Add all C/C++ header files (h|H|hh|hpp|hxx|ipp) in given directories to SRCS -macro HEADERS(Dirs...) { - _GLOB(_HEADERS ${suf=/*.(h|H|hh|hpp|hxx|ipp):Dirs}) - SRCS($_HEADERS) +### Exclude files matching EXCLUDE patterns +macro HEADERS(EXCLUDE[], Dirs...) { + SET(_VAR_HEADERS_SALT __Dirs__ ${Dirs} __EXCLUDE__ ${EXCLUDE}) + SET(_HEADERS_GLOB uniq_headers_${hash:_VAR_HEADERS_SALT}) + _GLOB(${_HEADERS_GLOB} ${suf=/*.(h|H|hh|hpp|hxx|ipp):Dirs} EXCLUDE ${EXCLUDE}) + SRCS(${${_HEADERS_GLOB}}) } ### @usage: CLANG_EMIT_AST_CXX_RUN_TOOL(Tool Args... [SOURCES ...] [OPTS ...] [IN ...] [IN_NOPARSE ...] [TOOL ...] [OUTPUT_INCLUDES ...] [INDUCED_DEPS ...] [IN_DEPS ...] [STDOUT out-file-name] [STDOUT_NOAUTO out-file-name] [CWD cwd]) diff --git a/contrib/libs/clang16-rt/lib/msan/ya.make b/contrib/libs/clang16-rt/lib/msan/ya.make index dcb03a8033..e08113531b 100644 --- a/contrib/libs/clang16-rt/lib/msan/ya.make +++ b/contrib/libs/clang16-rt/lib/msan/ya.make @@ -27,6 +27,10 @@ NO_UTIL() NO_SANITIZE() +IF(MAPSMOBI_BUILD_TARGET == "yes") + NO_OPTIMIZE() +ENDIF() + CFLAGS( -DHAVE_RPC_XDR_H=0 -DUBSAN_CAN_USE_CXXABI diff --git a/contrib/libs/cxxsupp/builtins/.yandex_meta/build.ym b/contrib/libs/cxxsupp/builtins/.yandex_meta/build.ym index 573546c8a5..bfbe52b4bc 100644 --- a/contrib/libs/cxxsupp/builtins/.yandex_meta/build.ym +++ b/contrib/libs/cxxsupp/builtins/.yandex_meta/build.ym @@ -72,21 +72,48 @@ ENDIF() {% block gen_ya_make %} ( cd lib/builtins + +cat << EOF > join.py +import os +import sys + +common = open(sys.argv[1]).read().strip().split('\n') +special = open(sys.argv[2]).read().strip().split('\n') + +def name(n): + return os.path.basename(n).split('.')[0] + +sset = frozenset([name(x) for x in special]) + +def it_srcs(): + for x in common: + if name(x) not in sset: + yield x + + yield from special + +print('\n'.join(sorted(list(it_srcs()))).strip()) +EOF + +ls *.c > common + +echo 'IF (ARCH_AARCH64)' echo 'SRCS(' -ls *.c | sort +ls aarch64/*.c aarch64/*.S > special +python3 join.py common special echo ')' -echo 'IF (ARCH_AARCH64)' +echo 'ELSEIF (ARCH_X86_64)' echo 'SRCS(' -ls aarch64/*.c | sort -ls aarch64/*.S | sort +ls x86_64/*.c x86_64/*.S > special +python3 join.py common special echo ')' -echo 'ENDIF()' -echo 'IF (ARCH_X86_64)' +echo 'ELSE()' echo 'SRCS(' -ls x86_64/*.c | sort -ls x86_64/*.S | sort +cat common | sort echo ')' echo 'ENDIF()' + +rm join.py common special ) >> ya.make {% endblock %} @@ -94,3 +121,8 @@ echo 'ENDIF()' {{super()}} cp -R lib/builtins/* ${OUTPUT}/ {% endblock %} + +{% block run_license_analyzer %} +{{super()}} +sed -e 's|.* LLVM.*||' -i ${OUTPUT}/ya.make +{% endblock %} diff --git a/contrib/libs/cxxsupp/builtins/ya.make b/contrib/libs/cxxsupp/builtins/ya.make index 8b0bb97bd9..85ef0ccff7 100644 --- a/contrib/libs/cxxsupp/builtins/ya.make +++ b/contrib/libs/cxxsupp/builtins/ya.make @@ -5,6 +5,7 @@ LIBRARY() LICENSE( Apache-2.0 AND Apache-2.0 WITH LLVM-exception AND + MIT AND NCSA ) @@ -59,199 +60,534 @@ IF (GCC OR CLANG) NO_LTO() ENDIF() -SRCS( - absvdi2.c - absvsi2.c - absvti2.c - adddf3.c - addsf3.c - addtf3.c - addvdi3.c - addvsi3.c - addvti3.c - apple_versioning.c - ashldi3.c - ashlti3.c - ashrdi3.c - ashrti3.c - atomic.c - atomic_flag_clear.c - atomic_flag_clear_explicit.c - atomic_flag_test_and_set.c - atomic_flag_test_and_set_explicit.c - atomic_signal_fence.c - atomic_thread_fence.c - bswapdi2.c - bswapsi2.c - clear_cache.c - clzdi2.c - clzsi2.c - clzti2.c - cmpdi2.c - cmpti2.c - comparedf2.c - comparesf2.c - comparetf2.c - cpu_model.c - ctzdi2.c - ctzsi2.c - ctzti2.c - divdc3.c - divdf3.c - divdi3.c - divmoddi4.c - divmodsi4.c - divmodti4.c - divsc3.c - divsf3.c - divsi3.c - divtc3.c - divtf3.c - divti3.c - divxc3.c - emutls.c - enable_execute_stack.c - eprintf.c - extenddftf2.c - extendhfsf2.c - extendhftf2.c - extendsfdf2.c - extendsftf2.c - ffsdi2.c - ffssi2.c - ffsti2.c - fixdfdi.c - fixdfsi.c - fixdfti.c - fixsfdi.c - fixsfsi.c - fixsfti.c - fixtfdi.c - fixtfsi.c - fixtfti.c - fixunsdfdi.c - fixunsdfsi.c - fixunsdfti.c - fixunssfdi.c - fixunssfsi.c - fixunssfti.c - fixunstfdi.c - fixunstfsi.c - fixunstfti.c - fixunsxfdi.c - fixunsxfsi.c - fixunsxfti.c - fixxfdi.c - fixxfti.c - floatdidf.c - floatdisf.c - floatditf.c - floatdixf.c - floatsidf.c - floatsisf.c - floatsitf.c - floattidf.c - floattisf.c - floattitf.c - floattixf.c - floatundidf.c - floatundisf.c - floatunditf.c - floatundixf.c - floatunsidf.c - floatunsisf.c - floatunsitf.c - floatuntidf.c - floatuntisf.c - floatuntitf.c - floatuntixf.c - fp_mode.c - gcc_personality_v0.c - int_util.c - lshrdi3.c - lshrti3.c - moddi3.c - modsi3.c - modti3.c - muldc3.c - muldf3.c - muldi3.c - mulodi4.c - mulosi4.c - muloti4.c - mulsc3.c - mulsf3.c - multc3.c - multf3.c - multi3.c - mulvdi3.c - mulvsi3.c - mulvti3.c - mulxc3.c - negdf2.c - negdi2.c - negsf2.c - negti2.c - negvdi2.c - negvsi2.c - negvti2.c - os_version_check.c - paritydi2.c - paritysi2.c - parityti2.c - popcountdi2.c - popcountsi2.c - popcountti2.c - powidf2.c - powisf2.c - powitf2.c - powixf2.c - subdf3.c - subsf3.c - subtf3.c - subvdi3.c - subvsi3.c - subvti3.c - trampoline_setup.c - truncdfbf2.c - truncdfhf2.c - truncdfsf2.c - truncsfbf2.c - truncsfhf2.c - trunctfdf2.c - trunctfhf2.c - trunctfsf2.c - ucmpdi2.c - ucmpti2.c - udivdi3.c - udivmoddi4.c - udivmodsi4.c - udivmodti4.c - udivsi3.c - udivti3.c - umoddi3.c - umodsi3.c - umodti3.c -) - IF (ARCH_AARCH64) SRCS( - aarch64/fp_mode.c aarch64/chkstk.S + aarch64/fp_mode.c + absvdi2.c + absvsi2.c + absvti2.c + adddf3.c + addsf3.c + addtf3.c + addvdi3.c + addvsi3.c + addvti3.c + apple_versioning.c + ashldi3.c + ashlti3.c + ashrdi3.c + ashrti3.c + atomic.c + atomic_flag_clear.c + atomic_flag_clear_explicit.c + atomic_flag_test_and_set.c + atomic_flag_test_and_set_explicit.c + atomic_signal_fence.c + atomic_thread_fence.c + bswapdi2.c + bswapsi2.c + clear_cache.c + clzdi2.c + clzsi2.c + clzti2.c + cmpdi2.c + cmpti2.c + comparedf2.c + comparesf2.c + comparetf2.c + cpu_model.c + ctzdi2.c + ctzsi2.c + ctzti2.c + divdc3.c + divdf3.c + divdi3.c + divmoddi4.c + divmodsi4.c + divmodti4.c + divsc3.c + divsf3.c + divsi3.c + divtc3.c + divtf3.c + divti3.c + divxc3.c + emutls.c + enable_execute_stack.c + eprintf.c + extenddftf2.c + extendhfsf2.c + extendhftf2.c + extendsfdf2.c + extendsftf2.c + ffsdi2.c + ffssi2.c + ffsti2.c + fixdfdi.c + fixdfsi.c + fixdfti.c + fixsfdi.c + fixsfsi.c + fixsfti.c + fixtfdi.c + fixtfsi.c + fixtfti.c + fixunsdfdi.c + fixunsdfsi.c + fixunsdfti.c + fixunssfdi.c + fixunssfsi.c + fixunssfti.c + fixunstfdi.c + fixunstfsi.c + fixunstfti.c + fixunsxfdi.c + fixunsxfsi.c + fixunsxfti.c + fixxfdi.c + fixxfti.c + floatdidf.c + floatdisf.c + floatditf.c + floatdixf.c + floatsidf.c + floatsisf.c + floatsitf.c + floattidf.c + floattisf.c + floattitf.c + floattixf.c + floatundidf.c + floatundisf.c + floatunditf.c + floatundixf.c + floatunsidf.c + floatunsisf.c + floatunsitf.c + floatuntidf.c + floatuntisf.c + floatuntitf.c + floatuntixf.c + gcc_personality_v0.c + int_util.c + lshrdi3.c + lshrti3.c + moddi3.c + modsi3.c + modti3.c + muldc3.c + muldf3.c + muldi3.c + mulodi4.c + mulosi4.c + muloti4.c + mulsc3.c + mulsf3.c + multc3.c + multf3.c + multi3.c + mulvdi3.c + mulvsi3.c + mulvti3.c + mulxc3.c + negdf2.c + negdi2.c + negsf2.c + negti2.c + negvdi2.c + negvsi2.c + negvti2.c + os_version_check.c + paritydi2.c + paritysi2.c + parityti2.c + popcountdi2.c + popcountsi2.c + popcountti2.c + powidf2.c + powisf2.c + powitf2.c + powixf2.c + subdf3.c + subsf3.c + subtf3.c + subvdi3.c + subvsi3.c + subvti3.c + trampoline_setup.c + truncdfbf2.c + truncdfhf2.c + truncdfsf2.c + truncsfbf2.c + truncsfhf2.c + trunctfdf2.c + trunctfhf2.c + trunctfsf2.c + ucmpdi2.c + ucmpti2.c + udivdi3.c + udivmoddi4.c + udivmodsi4.c + udivmodti4.c + udivsi3.c + udivti3.c + umoddi3.c + umodsi3.c + umodti3.c ) -ENDIF() - -IF (ARCH_X86_64) +ELSEIF (ARCH_X86_64) SRCS( + absvdi2.c + absvsi2.c + absvti2.c + adddf3.c + addsf3.c + addtf3.c + addvdi3.c + addvsi3.c + addvti3.c + apple_versioning.c + ashldi3.c + ashlti3.c + ashrdi3.c + ashrti3.c + atomic.c + atomic_flag_clear.c + atomic_flag_clear_explicit.c + atomic_flag_test_and_set.c + atomic_flag_test_and_set_explicit.c + atomic_signal_fence.c + atomic_thread_fence.c + bswapdi2.c + bswapsi2.c + clear_cache.c + clzdi2.c + clzsi2.c + clzti2.c + cmpdi2.c + cmpti2.c + comparedf2.c + comparesf2.c + comparetf2.c + cpu_model.c + ctzdi2.c + ctzsi2.c + ctzti2.c + divdc3.c + divdf3.c + divdi3.c + divmoddi4.c + divmodsi4.c + divmodti4.c + divsc3.c + divsf3.c + divsi3.c + divtc3.c + divtf3.c + divti3.c + divxc3.c + emutls.c + enable_execute_stack.c + eprintf.c + extenddftf2.c + extendhfsf2.c + extendhftf2.c + extendsfdf2.c + extendsftf2.c + ffsdi2.c + ffssi2.c + ffsti2.c + fixdfdi.c + fixdfsi.c + fixdfti.c + fixsfdi.c + fixsfsi.c + fixsfti.c + fixtfdi.c + fixtfsi.c + fixtfti.c + fixunsdfdi.c + fixunsdfsi.c + fixunsdfti.c + fixunssfdi.c + fixunssfsi.c + fixunssfti.c + fixunstfdi.c + fixunstfsi.c + fixunstfti.c + fixunsxfdi.c + fixunsxfsi.c + fixunsxfti.c + fixxfdi.c + fixxfti.c + floatditf.c + floatsidf.c + floatsisf.c + floatsitf.c + floattidf.c + floattisf.c + floattitf.c + floattixf.c + floatunditf.c + floatunsidf.c + floatunsisf.c + floatunsitf.c + floatuntidf.c + floatuntisf.c + floatuntitf.c + floatuntixf.c + fp_mode.c + gcc_personality_v0.c + int_util.c + lshrdi3.c + lshrti3.c + moddi3.c + modsi3.c + modti3.c + muldc3.c + muldf3.c + muldi3.c + mulodi4.c + mulosi4.c + muloti4.c + mulsc3.c + mulsf3.c + multc3.c + multf3.c + multi3.c + mulvdi3.c + mulvsi3.c + mulvti3.c + mulxc3.c + negdf2.c + negdi2.c + negsf2.c + negti2.c + negvdi2.c + negvsi2.c + negvti2.c + os_version_check.c + paritydi2.c + paritysi2.c + parityti2.c + popcountdi2.c + popcountsi2.c + popcountti2.c + powidf2.c + powisf2.c + powitf2.c + powixf2.c + subdf3.c + subsf3.c + subtf3.c + subvdi3.c + subvsi3.c + subvti3.c + trampoline_setup.c + truncdfbf2.c + truncdfhf2.c + truncdfsf2.c + truncsfbf2.c + truncsfhf2.c + trunctfdf2.c + trunctfhf2.c + trunctfsf2.c + ucmpdi2.c + ucmpti2.c + udivdi3.c + udivmoddi4.c + udivmodsi4.c + udivmodti4.c + udivsi3.c + udivti3.c + umoddi3.c + umodsi3.c + umodti3.c + x86_64/chkstk.S + x86_64/chkstk2.S x86_64/floatdidf.c x86_64/floatdisf.c x86_64/floatdixf.c - x86_64/chkstk2.S - x86_64/chkstk.S x86_64/floatundidf.S x86_64/floatundisf.S x86_64/floatundixf.S ) +ELSE() + SRCS( + absvdi2.c + absvsi2.c + absvti2.c + adddf3.c + addsf3.c + addtf3.c + addvdi3.c + addvsi3.c + addvti3.c + apple_versioning.c + ashldi3.c + ashlti3.c + ashrdi3.c + ashrti3.c + atomic.c + atomic_flag_clear.c + atomic_flag_clear_explicit.c + atomic_flag_test_and_set.c + atomic_flag_test_and_set_explicit.c + atomic_signal_fence.c + atomic_thread_fence.c + bswapdi2.c + bswapsi2.c + clear_cache.c + clzdi2.c + clzsi2.c + clzti2.c + cmpdi2.c + cmpti2.c + comparedf2.c + comparesf2.c + comparetf2.c + cpu_model.c + ctzdi2.c + ctzsi2.c + ctzti2.c + divdc3.c + divdf3.c + divdi3.c + divmoddi4.c + divmodsi4.c + divmodti4.c + divsc3.c + divsf3.c + divsi3.c + divtc3.c + divtf3.c + divti3.c + divxc3.c + emutls.c + enable_execute_stack.c + eprintf.c + extenddftf2.c + extendhfsf2.c + extendhftf2.c + extendsfdf2.c + extendsftf2.c + ffsdi2.c + ffssi2.c + ffsti2.c + fixdfdi.c + fixdfsi.c + fixdfti.c + fixsfdi.c + fixsfsi.c + fixsfti.c + fixtfdi.c + fixtfsi.c + fixtfti.c + fixunsdfdi.c + fixunsdfsi.c + fixunsdfti.c + fixunssfdi.c + fixunssfsi.c + fixunssfti.c + fixunstfdi.c + fixunstfsi.c + fixunstfti.c + fixunsxfdi.c + fixunsxfsi.c + fixunsxfti.c + fixxfdi.c + fixxfti.c + floatdidf.c + floatdisf.c + floatditf.c + floatdixf.c + floatsidf.c + floatsisf.c + floatsitf.c + floattidf.c + floattisf.c + floattitf.c + floattixf.c + floatundidf.c + floatundisf.c + floatunditf.c + floatundixf.c + floatunsidf.c + floatunsisf.c + floatunsitf.c + floatuntidf.c + floatuntisf.c + floatuntitf.c + floatuntixf.c + fp_mode.c + gcc_personality_v0.c + int_util.c + lshrdi3.c + lshrti3.c + moddi3.c + modsi3.c + modti3.c + muldc3.c + muldf3.c + muldi3.c + mulodi4.c + mulosi4.c + muloti4.c + mulsc3.c + mulsf3.c + multc3.c + multf3.c + multi3.c + mulvdi3.c + mulvsi3.c + mulvti3.c + mulxc3.c + negdf2.c + negdi2.c + negsf2.c + negti2.c + negvdi2.c + negvsi2.c + negvti2.c + os_version_check.c + paritydi2.c + paritysi2.c + parityti2.c + popcountdi2.c + popcountsi2.c + popcountti2.c + powidf2.c + powisf2.c + powitf2.c + powixf2.c + subdf3.c + subsf3.c + subtf3.c + subvdi3.c + subvsi3.c + subvti3.c + trampoline_setup.c + truncdfbf2.c + truncdfhf2.c + truncdfsf2.c + truncsfbf2.c + truncsfhf2.c + trunctfdf2.c + trunctfhf2.c + trunctfsf2.c + ucmpdi2.c + ucmpti2.c + udivdi3.c + udivmoddi4.c + udivmodsi4.c + udivmodti4.c + udivsi3.c + udivti3.c + umoddi3.c + umodsi3.c + umodti3.c + ) ENDIF() END() diff --git a/contrib/libs/hyperscan/.yandex_meta/__init__.py b/contrib/libs/hyperscan/.yandex_meta/__init__.py index 910fa36cbc..82a4450293 100644 --- a/contrib/libs/hyperscan/.yandex_meta/__init__.py +++ b/contrib/libs/hyperscan/.yandex_meta/__init__.py @@ -105,6 +105,7 @@ def post_install(self): with self.yamakes["runtime_avx512"] as m: # Do not sanitize to workaround the ICE in clang-16 + # See DEVTOOLSSUPPORT-49258 for details. m.NO_SANITIZE = True with self.yamakes["."] as hyperscan: diff --git a/contrib/python/MarkupSafe/py3/.dist-info/METADATA b/contrib/python/MarkupSafe/py3/.dist-info/METADATA index dfe37d52df..cbf0cfef4f 100644 --- a/contrib/python/MarkupSafe/py3/.dist-info/METADATA +++ b/contrib/python/MarkupSafe/py3/.dist-info/METADATA @@ -1,16 +1,41 @@ Metadata-Version: 2.1 Name: MarkupSafe -Version: 2.1.5 +Version: 3.0.1 Summary: Safely add untrusted strings to HTML/XML markup. -Home-page: https://palletsprojects.com/p/markupsafe/ -Maintainer: Pallets -Maintainer-email: contact@palletsprojects.com -License: BSD-3-Clause +Maintainer-email: Pallets <contact@palletsprojects.com> +License: Copyright 2010 Pallets + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + Project-URL: Donate, https://palletsprojects.com/donate Project-URL: Documentation, https://markupsafe.palletsprojects.com/ Project-URL: Changes, https://markupsafe.palletsprojects.com/changes/ -Project-URL: Source Code, https://github.com/pallets/markupsafe/ -Project-URL: Issue Tracker, https://github.com/pallets/markupsafe/issues/ +Project-URL: Source, https://github.com/pallets/markupsafe/ Project-URL: Chat, https://discord.gg/pallets Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: Web Environment @@ -20,12 +45,12 @@ Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content Classifier: Topic :: Text Processing :: Markup :: HTML -Requires-Python: >=3.7 -Description-Content-Type: text/x-rst -License-File: LICENSE.rst +Classifier: Typing :: Typed +Requires-Python: >=3.9 +Description-Content-Type: text/markdown +License-File: LICENSE.txt -MarkupSafe -========== +# MarkupSafe MarkupSafe implements a text object that escapes characters so it is safe to use in HTML and XML. Characters that have special meanings are @@ -34,60 +59,34 @@ injection attacks, meaning untrusted user input can safely be displayed on a page. -Installing ----------- +## Examples -Install and update using `pip`_: +```pycon +>>> from markupsafe import Markup, escape -.. code-block:: text +>>> # escape replaces special characters and wraps in Markup +>>> escape("<script>alert(document.cookie);</script>") +Markup('<script>alert(document.cookie);</script>') - pip install -U MarkupSafe +>>> # wrap in Markup to mark text "safe" and prevent escaping +>>> Markup("<strong>Hello</strong>") +Markup('<strong>hello</strong>') -.. _pip: https://pip.pypa.io/en/stable/getting-started/ +>>> escape(Markup("<strong>Hello</strong>")) +Markup('<strong>hello</strong>') +>>> # Markup is a str subclass +>>> # methods and operators escape their arguments +>>> template = Markup("Hello <em>{name}</em>") +>>> template.format(name='"World"') +Markup('Hello <em>"World"</em>') +``` -Examples --------- - -.. code-block:: pycon - - >>> from markupsafe import Markup, escape - - >>> # escape replaces special characters and wraps in Markup - >>> escape("<script>alert(document.cookie);</script>") - Markup('<script>alert(document.cookie);</script>') - - >>> # wrap in Markup to mark text "safe" and prevent escaping - >>> Markup("<strong>Hello</strong>") - Markup('<strong>hello</strong>') - - >>> escape(Markup("<strong>Hello</strong>")) - Markup('<strong>hello</strong>') - - >>> # Markup is a str subclass - >>> # methods and operators escape their arguments - >>> template = Markup("Hello <em>{name}</em>") - >>> template.format(name='"World"') - Markup('Hello <em>"World"</em>') - - -Donate ------- +## Donate The Pallets organization develops and supports MarkupSafe and other popular packages. In order to grow the community of contributors and users, and allow the maintainers to devote more time to the projects, -`please donate today`_. - -.. _please donate today: https://palletsprojects.com/donate - - -Links ------ +[please donate today][]. -- Documentation: https://markupsafe.palletsprojects.com/ -- Changes: https://markupsafe.palletsprojects.com/changes/ -- PyPI Releases: https://pypi.org/project/MarkupSafe/ -- Source Code: https://github.com/pallets/markupsafe/ -- Issue Tracker: https://github.com/pallets/markupsafe/issues/ -- Chat: https://discord.gg/pallets +[please donate today]: https://palletsprojects.com/donate diff --git a/contrib/python/MarkupSafe/py3/LICENSE.rst b/contrib/python/MarkupSafe/py3/LICENSE.txt index 9d227a0cc4..9d227a0cc4 100644 --- a/contrib/python/MarkupSafe/py3/LICENSE.rst +++ b/contrib/python/MarkupSafe/py3/LICENSE.txt diff --git a/contrib/python/MarkupSafe/py3/README.md b/contrib/python/MarkupSafe/py3/README.md new file mode 100644 index 0000000000..df8fbaf908 --- /dev/null +++ b/contrib/python/MarkupSafe/py3/README.md @@ -0,0 +1,40 @@ +# MarkupSafe + +MarkupSafe implements a text object that escapes characters so it is +safe to use in HTML and XML. Characters that have special meanings are +replaced so that they display as the actual characters. This mitigates +injection attacks, meaning untrusted user input can safely be displayed +on a page. + + +## Examples + +```pycon +>>> from markupsafe import Markup, escape + +>>> # escape replaces special characters and wraps in Markup +>>> escape("<script>alert(document.cookie);</script>") +Markup('<script>alert(document.cookie);</script>') + +>>> # wrap in Markup to mark text "safe" and prevent escaping +>>> Markup("<strong>Hello</strong>") +Markup('<strong>hello</strong>') + +>>> escape(Markup("<strong>Hello</strong>")) +Markup('<strong>hello</strong>') + +>>> # Markup is a str subclass +>>> # methods and operators escape their arguments +>>> template = Markup("Hello <em>{name}</em>") +>>> template.format(name='"World"') +Markup('Hello <em>"World"</em>') +``` + +## Donate + +The Pallets organization develops and supports MarkupSafe and other +popular packages. In order to grow the community of contributors and +users, and allow the maintainers to devote more time to the projects, +[please donate today][]. + +[please donate today]: https://palletsprojects.com/donate diff --git a/contrib/python/MarkupSafe/py3/README.rst b/contrib/python/MarkupSafe/py3/README.rst deleted file mode 100644 index 16431d3a6a..0000000000 --- a/contrib/python/MarkupSafe/py3/README.rst +++ /dev/null @@ -1,67 +0,0 @@ -MarkupSafe -========== - -MarkupSafe implements a text object that escapes characters so it is -safe to use in HTML and XML. Characters that have special meanings are -replaced so that they display as the actual characters. This mitigates -injection attacks, meaning untrusted user input can safely be displayed -on a page. - - -Installing ----------- - -Install and update using `pip`_: - -.. code-block:: text - - pip install -U MarkupSafe - -.. _pip: https://pip.pypa.io/en/stable/getting-started/ - - -Examples --------- - -.. code-block:: pycon - - >>> from markupsafe import Markup, escape - - >>> # escape replaces special characters and wraps in Markup - >>> escape("<script>alert(document.cookie);</script>") - Markup('<script>alert(document.cookie);</script>') - - >>> # wrap in Markup to mark text "safe" and prevent escaping - >>> Markup("<strong>Hello</strong>") - Markup('<strong>hello</strong>') - - >>> escape(Markup("<strong>Hello</strong>")) - Markup('<strong>hello</strong>') - - >>> # Markup is a str subclass - >>> # methods and operators escape their arguments - >>> template = Markup("Hello <em>{name}</em>") - >>> template.format(name='"World"') - Markup('Hello <em>"World"</em>') - - -Donate ------- - -The Pallets organization develops and supports MarkupSafe and other -popular packages. In order to grow the community of contributors and -users, and allow the maintainers to devote more time to the projects, -`please donate today`_. - -.. _please donate today: https://palletsprojects.com/donate - - -Links ------ - -- Documentation: https://markupsafe.palletsprojects.com/ -- Changes: https://markupsafe.palletsprojects.com/changes/ -- PyPI Releases: https://pypi.org/project/MarkupSafe/ -- Source Code: https://github.com/pallets/markupsafe/ -- Issue Tracker: https://github.com/pallets/markupsafe/issues/ -- Chat: https://discord.gg/pallets diff --git a/contrib/python/MarkupSafe/py3/markupsafe/__init__.py b/contrib/python/MarkupSafe/py3/markupsafe/__init__.py index b40f24c66d..fee8dc7acc 100644 --- a/contrib/python/MarkupSafe/py3/markupsafe/__init__.py +++ b/contrib/python/MarkupSafe/py3/markupsafe/__init__.py @@ -1,29 +1,84 @@ -import functools +from __future__ import annotations + +import collections.abc as cabc import string -import sys import typing as t +try: + from ._speedups import _escape_inner +except ImportError: + from ._native import _escape_inner + if t.TYPE_CHECKING: import typing_extensions as te - class HasHTML(te.Protocol): - def __html__(self) -> str: - pass - _P = te.ParamSpec("_P") +class _HasHTML(t.Protocol): + def __html__(self, /) -> str: ... + + +class _TPEscape(t.Protocol): + def __call__(self, s: t.Any, /) -> Markup: ... + + +def escape(s: t.Any, /) -> Markup: + """Replace the characters ``&``, ``<``, ``>``, ``'``, and ``"`` in + the string with HTML-safe sequences. Use this if you need to display + text that might contain such characters in HTML. + + If the object has an ``__html__`` method, it is called and the + return value is assumed to already be safe for HTML. + + :param s: An object to be converted to a string and escaped. + :return: A :class:`Markup` string with the escaped text. + """ + # If the object is already a plain string, skip __html__ check and string + # conversion. This is the most common use case. + # Use type(s) instead of s.__class__ because a proxy object may be reporting + # the __class__ of the proxied value. + if type(s) is str: + return Markup(_escape_inner(s)) + + if hasattr(s, "__html__"): + return Markup(s.__html__()) + + return Markup(_escape_inner(str(s))) + + +def escape_silent(s: t.Any | None, /) -> Markup: + """Like :func:`escape` but treats ``None`` as the empty string. + Useful with optional values, as otherwise you get the string + ``'None'`` when the value is ``None``. + + >>> escape(None) + Markup('None') + >>> escape_silent(None) + Markup('') + """ + if s is None: + return Markup() + return escape(s) -__version__ = "2.1.5" +def soft_str(s: t.Any, /) -> str: + """Convert an object to a string if it isn't already. This preserves + a :class:`Markup` string rather than converting it back to a basic + string, so it will still be marked as safe and won't be escaped + again. -def _simple_escaping_wrapper(func: "t.Callable[_P, str]") -> "t.Callable[_P, Markup]": - @functools.wraps(func) - def wrapped(self: "Markup", *args: "_P.args", **kwargs: "_P.kwargs") -> "Markup": - arg_list = _escape_argspec(list(args), enumerate(args), self.escape) - _escape_argspec(kwargs, kwargs.items(), self.escape) - return self.__class__(func(self, *arg_list, **kwargs)) # type: ignore[arg-type] + >>> value = escape("<User 1>") + >>> value + Markup('<User 1>') + >>> escape(str(value)) + Markup('&lt;User 1&gt;') + >>> escape(soft_str(value)) + Markup('<User 1>') + """ + if not isinstance(s, str): + return str(s) - return wrapped # type: ignore[return-value] + return s class Markup(str): @@ -65,82 +120,72 @@ class Markup(str): __slots__ = () def __new__( - cls, base: t.Any = "", encoding: t.Optional[str] = None, errors: str = "strict" - ) -> "te.Self": - if hasattr(base, "__html__"): - base = base.__html__() + cls, object: t.Any = "", encoding: str | None = None, errors: str = "strict" + ) -> te.Self: + if hasattr(object, "__html__"): + object = object.__html__() if encoding is None: - return super().__new__(cls, base) + return super().__new__(cls, object) - return super().__new__(cls, base, encoding, errors) + return super().__new__(cls, object, encoding, errors) - def __html__(self) -> "te.Self": + def __html__(self, /) -> te.Self: return self - def __add__(self, other: t.Union[str, "HasHTML"]) -> "te.Self": - if isinstance(other, str) or hasattr(other, "__html__"): - return self.__class__(super().__add__(self.escape(other))) + def __add__(self, value: str | _HasHTML, /) -> te.Self: + if isinstance(value, str) or hasattr(value, "__html__"): + return self.__class__(super().__add__(self.escape(value))) return NotImplemented - def __radd__(self, other: t.Union[str, "HasHTML"]) -> "te.Self": - if isinstance(other, str) or hasattr(other, "__html__"): - return self.escape(other).__add__(self) + def __radd__(self, value: str | _HasHTML, /) -> te.Self: + if isinstance(value, str) or hasattr(value, "__html__"): + return self.escape(value).__add__(self) return NotImplemented - def __mul__(self, num: "te.SupportsIndex") -> "te.Self": - if isinstance(num, int): - return self.__class__(super().__mul__(num)) + def __mul__(self, value: t.SupportsIndex, /) -> te.Self: + return self.__class__(super().__mul__(value)) - return NotImplemented - - __rmul__ = __mul__ + def __rmul__(self, value: t.SupportsIndex, /) -> te.Self: + return self.__class__(super().__mul__(value)) - def __mod__(self, arg: t.Any) -> "te.Self": - if isinstance(arg, tuple): + def __mod__(self, value: t.Any, /) -> te.Self: + if isinstance(value, tuple): # a tuple of arguments, each wrapped - arg = tuple(_MarkupEscapeHelper(x, self.escape) for x in arg) - elif hasattr(type(arg), "__getitem__") and not isinstance(arg, str): + value = tuple(_MarkupEscapeHelper(x, self.escape) for x in value) + elif hasattr(type(value), "__getitem__") and not isinstance(value, str): # a mapping of arguments, wrapped - arg = _MarkupEscapeHelper(arg, self.escape) + value = _MarkupEscapeHelper(value, self.escape) else: # a single argument, wrapped with the helper and a tuple - arg = (_MarkupEscapeHelper(arg, self.escape),) + value = (_MarkupEscapeHelper(value, self.escape),) - return self.__class__(super().__mod__(arg)) + return self.__class__(super().__mod__(value)) - def __repr__(self) -> str: + def __repr__(self, /) -> str: return f"{self.__class__.__name__}({super().__repr__()})" - def join(self, seq: t.Iterable[t.Union[str, "HasHTML"]]) -> "te.Self": - return self.__class__(super().join(map(self.escape, seq))) - - join.__doc__ = str.join.__doc__ + def join(self, iterable: cabc.Iterable[str | _HasHTML], /) -> te.Self: + return self.__class__(super().join(map(self.escape, iterable))) def split( # type: ignore[override] - self, sep: t.Optional[str] = None, maxsplit: int = -1 - ) -> t.List["te.Self"]: + self, /, sep: str | None = None, maxsplit: t.SupportsIndex = -1 + ) -> list[te.Self]: return [self.__class__(v) for v in super().split(sep, maxsplit)] - split.__doc__ = str.split.__doc__ - def rsplit( # type: ignore[override] - self, sep: t.Optional[str] = None, maxsplit: int = -1 - ) -> t.List["te.Self"]: + self, /, sep: str | None = None, maxsplit: t.SupportsIndex = -1 + ) -> list[te.Self]: return [self.__class__(v) for v in super().rsplit(sep, maxsplit)] - rsplit.__doc__ = str.rsplit.__doc__ - def splitlines( # type: ignore[override] - self, keepends: bool = False - ) -> t.List["te.Self"]: + self, /, keepends: bool = False + ) -> list[te.Self]: return [self.__class__(v) for v in super().splitlines(keepends)] - splitlines.__doc__ = str.splitlines.__doc__ - - def unescape(self) -> str: + def unescape(self, /) -> str: """Convert escaped markup back into a text string. This replaces HTML entities with the characters they represent. @@ -151,7 +196,7 @@ class Markup(str): return unescape(str(self)) - def striptags(self) -> str: + def striptags(self, /) -> str: """:meth:`unescape` the markup, remove tags, and normalize whitespace to single spaces. @@ -163,31 +208,17 @@ class Markup(str): # Look for comments then tags separately. Otherwise, a comment that # contains a tag would end early, leaving some of the comment behind. - while True: - # keep finding comment start marks - start = value.find("<!--") - - if start == -1: - break - + # keep finding comment start marks + while (start := value.find("<!--")) != -1: # find a comment end mark beyond the start, otherwise stop - end = value.find("-->", start) - - if end == -1: + if (end := value.find("-->", start)) == -1: break value = f"{value[:start]}{value[end + 3:]}" # remove tags using the same method - while True: - start = value.find("<") - - if start == -1: - break - - end = value.find(">", start) - - if end == -1: + while (start := value.find("<")) != -1: + if (end := value.find(">", start)) == -1: break value = f"{value[:start]}{value[end + 1:]}" @@ -197,7 +228,7 @@ class Markup(str): return self.__class__(value).unescape() @classmethod - def escape(cls, s: t.Any) -> "te.Self": + def escape(cls, s: t.Any, /) -> te.Self: """Escape a string. Calls :func:`escape` and ensures that for subclasses the correct type is returned. """ @@ -208,49 +239,90 @@ class Markup(str): return rv # type: ignore[return-value] - __getitem__ = _simple_escaping_wrapper(str.__getitem__) - capitalize = _simple_escaping_wrapper(str.capitalize) - title = _simple_escaping_wrapper(str.title) - lower = _simple_escaping_wrapper(str.lower) - upper = _simple_escaping_wrapper(str.upper) - replace = _simple_escaping_wrapper(str.replace) - ljust = _simple_escaping_wrapper(str.ljust) - rjust = _simple_escaping_wrapper(str.rjust) - lstrip = _simple_escaping_wrapper(str.lstrip) - rstrip = _simple_escaping_wrapper(str.rstrip) - center = _simple_escaping_wrapper(str.center) - strip = _simple_escaping_wrapper(str.strip) - translate = _simple_escaping_wrapper(str.translate) - expandtabs = _simple_escaping_wrapper(str.expandtabs) - swapcase = _simple_escaping_wrapper(str.swapcase) - zfill = _simple_escaping_wrapper(str.zfill) - casefold = _simple_escaping_wrapper(str.casefold) - - if sys.version_info >= (3, 9): - removeprefix = _simple_escaping_wrapper(str.removeprefix) - removesuffix = _simple_escaping_wrapper(str.removesuffix) - - def partition(self, sep: str) -> t.Tuple["te.Self", "te.Self", "te.Self"]: - l, s, r = super().partition(self.escape(sep)) + def __getitem__(self, key: t.SupportsIndex | slice, /) -> te.Self: + return self.__class__(super().__getitem__(key)) + + def capitalize(self, /) -> te.Self: + return self.__class__(super().capitalize()) + + def title(self, /) -> te.Self: + return self.__class__(super().title()) + + def lower(self, /) -> te.Self: + return self.__class__(super().lower()) + + def upper(self, /) -> te.Self: + return self.__class__(super().upper()) + + def replace(self, old: str, new: str, count: t.SupportsIndex = -1, /) -> te.Self: + return self.__class__(super().replace(old, self.escape(new), count)) + + def ljust(self, width: t.SupportsIndex, fillchar: str = " ", /) -> te.Self: + return self.__class__(super().ljust(width, self.escape(fillchar))) + + def rjust(self, width: t.SupportsIndex, fillchar: str = " ", /) -> te.Self: + return self.__class__(super().rjust(width, self.escape(fillchar))) + + def lstrip(self, chars: str | None = None, /) -> te.Self: + return self.__class__(super().lstrip(chars)) + + def rstrip(self, chars: str | None = None, /) -> te.Self: + return self.__class__(super().rstrip(chars)) + + def center(self, width: t.SupportsIndex, fillchar: str = " ", /) -> te.Self: + return self.__class__(super().center(width, self.escape(fillchar))) + + def strip(self, chars: str | None = None, /) -> te.Self: + return self.__class__(super().strip(chars)) + + def translate( + self, + table: cabc.Mapping[int, str | int | None], # type: ignore[override] + /, + ) -> str: + return self.__class__(super().translate(table)) + + def expandtabs(self, /, tabsize: t.SupportsIndex = 8) -> te.Self: + return self.__class__(super().expandtabs(tabsize)) + + def swapcase(self, /) -> te.Self: + return self.__class__(super().swapcase()) + + def zfill(self, width: t.SupportsIndex, /) -> te.Self: + return self.__class__(super().zfill(width)) + + def casefold(self, /) -> te.Self: + return self.__class__(super().casefold()) + + def removeprefix(self, prefix: str, /) -> te.Self: + return self.__class__(super().removeprefix(prefix)) + + def removesuffix(self, suffix: str) -> te.Self: + return self.__class__(super().removesuffix(suffix)) + + def partition(self, sep: str, /) -> tuple[te.Self, te.Self, te.Self]: + left, sep, right = super().partition(sep) cls = self.__class__ - return cls(l), cls(s), cls(r) + return cls(left), cls(sep), cls(right) - def rpartition(self, sep: str) -> t.Tuple["te.Self", "te.Self", "te.Self"]: - l, s, r = super().rpartition(self.escape(sep)) + def rpartition(self, sep: str, /) -> tuple[te.Self, te.Self, te.Self]: + left, sep, right = super().rpartition(sep) cls = self.__class__ - return cls(l), cls(s), cls(r) + return cls(left), cls(sep), cls(right) - def format(self, *args: t.Any, **kwargs: t.Any) -> "te.Self": + def format(self, *args: t.Any, **kwargs: t.Any) -> te.Self: formatter = EscapeFormatter(self.escape) return self.__class__(formatter.vformat(self, args, kwargs)) - def format_map( # type: ignore[override] - self, map: t.Mapping[str, t.Any] - ) -> "te.Self": + def format_map( + self, + mapping: cabc.Mapping[str, t.Any], # type: ignore[override] + /, + ) -> te.Self: formatter = EscapeFormatter(self.escape) - return self.__class__(formatter.vformat(self, (), map)) + return self.__class__(formatter.vformat(self, (), mapping)) - def __html_format__(self, format_spec: str) -> "te.Self": + def __html_format__(self, format_spec: str, /) -> te.Self: if format_spec: raise ValueError("Unsupported format specification for Markup.") @@ -260,8 +332,8 @@ class Markup(str): class EscapeFormatter(string.Formatter): __slots__ = ("escape",) - def __init__(self, escape: t.Callable[[t.Any], Markup]) -> None: - self.escape = escape + def __init__(self, escape: _TPEscape) -> None: + self.escape: _TPEscape = escape super().__init__() def format_field(self, value: t.Any, format_spec: str) -> str: @@ -278,55 +350,46 @@ class EscapeFormatter(string.Formatter): else: # We need to make sure the format spec is str here as # otherwise the wrong callback methods are invoked. - rv = string.Formatter.format_field(self, value, str(format_spec)) + rv = super().format_field(value, str(format_spec)) return str(self.escape(rv)) -_ListOrDict = t.TypeVar("_ListOrDict", list, dict) - - -def _escape_argspec( - obj: _ListOrDict, iterable: t.Iterable[t.Any], escape: t.Callable[[t.Any], Markup] -) -> _ListOrDict: - """Helper for various string-wrapped functions.""" - for key, value in iterable: - if isinstance(value, str) or hasattr(value, "__html__"): - obj[key] = escape(value) - - return obj - - class _MarkupEscapeHelper: """Helper for :meth:`Markup.__mod__`.""" __slots__ = ("obj", "escape") - def __init__(self, obj: t.Any, escape: t.Callable[[t.Any], Markup]) -> None: - self.obj = obj - self.escape = escape + def __init__(self, obj: t.Any, escape: _TPEscape) -> None: + self.obj: t.Any = obj + self.escape: _TPEscape = escape - def __getitem__(self, item: t.Any) -> "te.Self": - return self.__class__(self.obj[item], self.escape) + def __getitem__(self, key: t.Any, /) -> te.Self: + return self.__class__(self.obj[key], self.escape) - def __str__(self) -> str: + def __str__(self, /) -> str: return str(self.escape(self.obj)) - def __repr__(self) -> str: + def __repr__(self, /) -> str: return str(self.escape(repr(self.obj))) - def __int__(self) -> int: + def __int__(self, /) -> int: return int(self.obj) - def __float__(self) -> float: + def __float__(self, /) -> float: return float(self.obj) -# circular import -try: - from ._speedups import escape as escape - from ._speedups import escape_silent as escape_silent - from ._speedups import soft_str as soft_str -except ImportError: - from ._native import escape as escape - from ._native import escape_silent as escape_silent # noqa: F401 - from ._native import soft_str as soft_str # noqa: F401 +def __getattr__(name: str) -> t.Any: + if name == "__version__": + import importlib.metadata + import warnings + + warnings.warn( + "The '__version__' attribute is deprecated and will be removed in" + " MarkupSafe 3.1. Use feature detection, or" + ' `importlib.metadata.version("markupsafe")`, instead.', + stacklevel=2, + ) + return importlib.metadata.version("markupsafe") + + raise AttributeError(name) diff --git a/contrib/python/MarkupSafe/py3/markupsafe/_native.py b/contrib/python/MarkupSafe/py3/markupsafe/_native.py index 8117b2716d..088b3bca98 100644 --- a/contrib/python/MarkupSafe/py3/markupsafe/_native.py +++ b/contrib/python/MarkupSafe/py3/markupsafe/_native.py @@ -1,63 +1,8 @@ -import typing as t - -from . import Markup - - -def escape(s: t.Any) -> Markup: - """Replace the characters ``&``, ``<``, ``>``, ``'``, and ``"`` in - the string with HTML-safe sequences. Use this if you need to display - text that might contain such characters in HTML. - - If the object has an ``__html__`` method, it is called and the - return value is assumed to already be safe for HTML. - - :param s: An object to be converted to a string and escaped. - :return: A :class:`Markup` string with the escaped text. - """ - if hasattr(s, "__html__"): - return Markup(s.__html__()) - - return Markup( - str(s) - .replace("&", "&") +def _escape_inner(s: str, /) -> str: + return ( + s.replace("&", "&") .replace(">", ">") .replace("<", "<") .replace("'", "'") .replace('"', """) ) - - -def escape_silent(s: t.Optional[t.Any]) -> Markup: - """Like :func:`escape` but treats ``None`` as the empty string. - Useful with optional values, as otherwise you get the string - ``'None'`` when the value is ``None``. - - >>> escape(None) - Markup('None') - >>> escape_silent(None) - Markup('') - """ - if s is None: - return Markup() - - return escape(s) - - -def soft_str(s: t.Any) -> str: - """Convert an object to a string if it isn't already. This preserves - a :class:`Markup` string rather than converting it back to a basic - string, so it will still be marked as safe and won't be escaped - again. - - >>> value = escape("<User 1>") - >>> value - Markup('<User 1>') - >>> escape(str(value)) - Markup('&lt;User 1&gt;') - >>> escape(soft_str(value)) - Markup('<User 1>') - """ - if not isinstance(s, str): - return str(s) - - return s diff --git a/contrib/python/MarkupSafe/py3/markupsafe/_speedups.c b/contrib/python/MarkupSafe/py3/markupsafe/_speedups.c index 3c463fb82d..73c2955827 100644 --- a/contrib/python/MarkupSafe/py3/markupsafe/_speedups.c +++ b/contrib/python/MarkupSafe/py3/markupsafe/_speedups.c @@ -1,22 +1,5 @@ #include <Python.h> -static PyObject* markup; - -static int -init_constants(void) -{ - PyObject *module; - - /* import markup type so that we can mark the return value */ - module = PyImport_ImportModule("markupsafe"); - if (!module) - return 0; - markup = PyObject_GetAttrString(module, "Markup"); - Py_DECREF(module); - - return 1; -} - #define GET_DELTA(inp, inp_end, delta) \ while (inp < inp_end) { \ switch (*inp++) { \ @@ -166,135 +149,29 @@ escape_unicode_kind4(PyUnicodeObject *in) } static PyObject* -escape_unicode(PyUnicodeObject *in) +escape_unicode(PyObject *self, PyObject *s) { - if (PyUnicode_READY(in)) + if (!PyUnicode_CheckExact(s)) + return NULL; + + // This check is no longer needed in Python 3.12. + if (PyUnicode_READY(s)) return NULL; - switch (PyUnicode_KIND(in)) { + switch (PyUnicode_KIND(s)) { case PyUnicode_1BYTE_KIND: - return escape_unicode_kind1(in); + return escape_unicode_kind1((PyUnicodeObject*) s); case PyUnicode_2BYTE_KIND: - return escape_unicode_kind2(in); + return escape_unicode_kind2((PyUnicodeObject*) s); case PyUnicode_4BYTE_KIND: - return escape_unicode_kind4(in); + return escape_unicode_kind4((PyUnicodeObject*) s); } assert(0); /* shouldn't happen */ return NULL; } -static PyObject* -escape(PyObject *self, PyObject *text) -{ - static PyObject *id_html; - PyObject *s = NULL, *rv = NULL, *html; - - if (id_html == NULL) { - id_html = PyUnicode_InternFromString("__html__"); - if (id_html == NULL) { - return NULL; - } - } - - /* we don't have to escape integers, bools or floats */ - if (PyLong_CheckExact(text) || - PyFloat_CheckExact(text) || PyBool_Check(text) || - text == Py_None) - return PyObject_CallFunctionObjArgs(markup, text, NULL); - - /* if the object has an __html__ method that performs the escaping */ - html = PyObject_GetAttr(text ,id_html); - if (html) { - s = PyObject_CallObject(html, NULL); - Py_DECREF(html); - if (s == NULL) { - return NULL; - } - /* Convert to Markup object */ - rv = PyObject_CallFunctionObjArgs(markup, (PyObject*)s, NULL); - Py_DECREF(s); - return rv; - } - - /* otherwise make the object unicode if it isn't, then escape */ - PyErr_Clear(); - if (!PyUnicode_Check(text)) { - PyObject *unicode = PyObject_Str(text); - if (!unicode) - return NULL; - s = escape_unicode((PyUnicodeObject*)unicode); - Py_DECREF(unicode); - } - else - s = escape_unicode((PyUnicodeObject*)text); - - /* convert the unicode string into a markup object. */ - rv = PyObject_CallFunctionObjArgs(markup, (PyObject*)s, NULL); - Py_DECREF(s); - return rv; -} - - -static PyObject* -escape_silent(PyObject *self, PyObject *text) -{ - if (text != Py_None) - return escape(self, text); - return PyObject_CallFunctionObjArgs(markup, NULL); -} - - -static PyObject* -soft_str(PyObject *self, PyObject *s) -{ - if (!PyUnicode_Check(s)) - return PyObject_Str(s); - Py_INCREF(s); - return s; -} - - static PyMethodDef module_methods[] = { - { - "escape", - (PyCFunction)escape, - METH_O, - "Replace the characters ``&``, ``<``, ``>``, ``'``, and ``\"`` in" - " the string with HTML-safe sequences. Use this if you need to display" - " text that might contain such characters in HTML.\n\n" - "If the object has an ``__html__`` method, it is called and the" - " return value is assumed to already be safe for HTML.\n\n" - ":param s: An object to be converted to a string and escaped.\n" - ":return: A :class:`Markup` string with the escaped text.\n" - }, - { - "escape_silent", - (PyCFunction)escape_silent, - METH_O, - "Like :func:`escape` but treats ``None`` as the empty string." - " Useful with optional values, as otherwise you get the string" - " ``'None'`` when the value is ``None``.\n\n" - ">>> escape(None)\n" - "Markup('None')\n" - ">>> escape_silent(None)\n" - "Markup('')\n" - }, - { - "soft_str", - (PyCFunction)soft_str, - METH_O, - "Convert an object to a string if it isn't already. This preserves" - " a :class:`Markup` string rather than converting it back to a basic" - " string, so it will still be marked as safe and won't be escaped" - " again.\n\n" - ">>> value = escape(\"<User 1>\")\n" - ">>> value\n" - "Markup('<User 1>')\n" - ">>> escape(str(value))\n" - "Markup('&lt;User 1&gt;')\n" - ">>> escape(soft_str(value))\n" - "Markup('<User 1>')\n" - }, + {"_escape_inner", (PyCFunction)escape_unicode, METH_O, NULL}, {NULL, NULL, 0, NULL} /* Sentinel */ }; @@ -313,8 +190,15 @@ static struct PyModuleDef module_definition = { PyMODINIT_FUNC PyInit__speedups(void) { - if (!init_constants()) + PyObject *m = PyModule_Create(&module_definition); + + if (m == NULL) { return NULL; + } + + #ifdef Py_GIL_DISABLED + PyUnstable_Module_SetGIL(m, Py_MOD_GIL_NOT_USED); + #endif - return PyModule_Create(&module_definition); + return m; } diff --git a/contrib/python/MarkupSafe/py3/markupsafe/_speedups.pyi b/contrib/python/MarkupSafe/py3/markupsafe/_speedups.pyi index f673240f6d..8c8885852a 100644 --- a/contrib/python/MarkupSafe/py3/markupsafe/_speedups.pyi +++ b/contrib/python/MarkupSafe/py3/markupsafe/_speedups.pyi @@ -1,9 +1 @@ -from typing import Any -from typing import Optional - -from . import Markup - -def escape(s: Any) -> Markup: ... -def escape_silent(s: Optional[Any]) -> Markup: ... -def soft_str(s: Any) -> str: ... -def soft_unicode(s: Any) -> str: ... +def _escape_inner(s: str, /) -> str: ... diff --git a/contrib/python/MarkupSafe/py3/tests/__init__.py b/contrib/python/MarkupSafe/py3/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/contrib/python/MarkupSafe/py3/tests/__init__.py diff --git a/contrib/python/MarkupSafe/py3/tests/conftest.py b/contrib/python/MarkupSafe/py3/tests/conftest.py index d040ea8b1c..d941970b8e 100644 --- a/contrib/python/MarkupSafe/py3/tests/conftest.py +++ b/contrib/python/MarkupSafe/py3/tests/conftest.py @@ -1,5 +1,12 @@ +from __future__ import annotations + +import sys +import typing as t +from types import ModuleType + import pytest +import markupsafe from markupsafe import _native try: @@ -8,8 +15,17 @@ except ImportError: _speedups = None # type: ignore +def pytest_report_header() -> list[str]: + """Return a list of strings to be displayed in the header of the report.""" + if sys.version_info >= (3, 13): + return [f"Free-threaded: {not sys._is_gil_enabled()}"] + + return [] + + @pytest.fixture( scope="session", + autouse=True, params=( _native, pytest.param( @@ -18,20 +34,6 @@ except ImportError: ), ), ) -def _mod(request): - return request.param - - -@pytest.fixture(scope="session") -def escape(_mod): - return _mod.escape - - -@pytest.fixture(scope="session") -def escape_silent(_mod): - return _mod.escape_silent - - -@pytest.fixture(scope="session") -def soft_str(_mod): - return _mod.soft_str +def _mod(request: pytest.FixtureRequest) -> None: + mod = t.cast(ModuleType, request.param) + markupsafe._escape_inner = mod._escape_inner # type: ignore[attr-defined] diff --git a/contrib/python/MarkupSafe/py3/tests/test_escape.py b/contrib/python/MarkupSafe/py3/tests/test_escape.py index bf53facedd..03e0b64892 100644 --- a/contrib/python/MarkupSafe/py3/tests/test_escape.py +++ b/contrib/python/MarkupSafe/py3/tests/test_escape.py @@ -1,5 +1,8 @@ +from __future__ import annotations + import pytest +from markupsafe import escape from markupsafe import Markup @@ -18,12 +21,12 @@ from markupsafe import Markup ("こんにちは&><'\"", "こんにちは&><'""), # 4 byte ( - "\U0001F363\U0001F362&><'\"\U0001F37A xyz", - "\U0001F363\U0001F362&><'"\U0001F37A xyz", + "\U0001f363\U0001f362&><'\"\U0001f37a xyz", + "\U0001f363\U0001f362&><'"\U0001f37a xyz", ), - ("&><'\"\U0001F37A xyz", "&><'"\U0001F37A xyz"), - ("\U0001F363\U0001F362&><'\"", "\U0001F363\U0001F362&><'""), + ("&><'\"\U0001f37a xyz", "&><'"\U0001f37a xyz"), + ("\U0001f363\U0001f362&><'\"", "\U0001f363\U0001f362&><'""), ), ) -def test_escape(escape, value, expect): +def test_escape(value: str, expect: str) -> None: assert escape(value) == Markup(expect) diff --git a/contrib/python/MarkupSafe/py3/tests/test_exception_custom_html.py b/contrib/python/MarkupSafe/py3/tests/test_exception_custom_html.py index ec2f10b1d1..582c749136 100644 --- a/contrib/python/MarkupSafe/py3/tests/test_exception_custom_html.py +++ b/contrib/python/MarkupSafe/py3/tests/test_exception_custom_html.py @@ -1,12 +1,16 @@ +from __future__ import annotations + import pytest +from markupsafe import escape + class CustomHtmlThatRaises: - def __html__(self): + def __html__(self) -> str: raise ValueError(123) -def test_exception_custom_html(escape): +def test_exception_custom_html() -> None: """Checks whether exceptions in custom __html__ implementations are propagated correctly. @@ -14,5 +18,6 @@ def test_exception_custom_html(escape): https://github.com/pallets/markupsafe/issues/108 """ obj = CustomHtmlThatRaises() + with pytest.raises(ValueError): escape(obj) diff --git a/contrib/python/MarkupSafe/py3/tests/test_leak.py b/contrib/python/MarkupSafe/py3/tests/test_leak.py index 55b10b98a4..b786e0725d 100644 --- a/contrib/python/MarkupSafe/py3/tests/test_leak.py +++ b/contrib/python/MarkupSafe/py3/tests/test_leak.py @@ -1,28 +1,25 @@ -import gc -import platform +from __future__ import annotations -import pytest +import gc from markupsafe import escape -@pytest.mark.skipif( - escape.__module__ == "markupsafe._native", - reason="only test memory leak with speedups", -) -def test_markup_leaks(): +def test_markup_leaks() -> None: counts = set() + # Try to start with a "clean" count. Works for PyPy but not 3.13 JIT. + gc.collect() - for _i in range(20): - for _j in range(1000): + for _ in range(20): + for _ in range(1000): escape("foo") escape("<foo>") escape("foo") escape("<foo>") - if platform.python_implementation() == "PyPy": - gc.collect() - counts.add(len(gc.get_objects())) - assert len(counts) == 1 + # Some implementations, such as PyPy and Python 3.13 JIT, end up with 2 + # counts rather than one. Presumably this is internals stabilizing. A leak + # would presumably have a different count every loop. + assert len(counts) < 3 diff --git a/contrib/python/MarkupSafe/py3/tests/test_markupsafe.py b/contrib/python/MarkupSafe/py3/tests/test_markupsafe.py index 94bea38795..85d9ea16be 100644 --- a/contrib/python/MarkupSafe/py3/tests/test_markupsafe.py +++ b/contrib/python/MarkupSafe/py3/tests/test_markupsafe.py @@ -1,9 +1,16 @@ +from __future__ import annotations + +import typing as t + import pytest +from markupsafe import escape +from markupsafe import escape_silent from markupsafe import Markup +from markupsafe import soft_str -def test_adding(escape): +def test_adding() -> None: unsafe = '<script type="application/x-some-script">alert("foo");</script>' safe = Markup("<em>username</em>") assert unsafe + safe == str(escape(unsafe)) + str(safe) @@ -22,22 +29,22 @@ def test_adding(escape): ("%.2f", 3.14, "3.14"), ), ) -def test_string_interpolation(template, data, expect): +def test_string_interpolation(template: str, data: t.Any, expect: str) -> None: assert Markup(template) % data == expect -def test_type_behavior(): +def test_type_behavior() -> None: assert type(Markup("foo") + "bar") is Markup x = Markup("foo") assert x.__html__() is x -def test_html_interop(): +def test_html_interop() -> None: class Foo: - def __html__(self): + def __html__(self) -> str: return "<em>awesome</em>" - def __str__(self): + def __str__(self) -> str: return "awesome" assert Markup(Foo()) == "<em>awesome</em>" @@ -46,18 +53,18 @@ def test_html_interop(): @pytest.mark.parametrize("args", ["foo", 42, ("foo", 42)]) -def test_missing_interpol(args): +def test_missing_interpol(args: t.Any) -> None: with pytest.raises(TypeError): - Markup("<em></em>") % args + assert Markup("<em></em>") % args -def test_tuple_interpol(): +def test_tuple_interpol() -> None: result = Markup("<em>%s:%s</em>") % ("<foo>", "<bar>") expect = Markup("<em><foo>:<bar></em>") assert result == expect -def test_dict_interpol(): +def test_dict_interpol() -> None: result = Markup("<em>%(foo)s</em>") % {"foo": "<foo>"} expect = Markup("<em><foo></em>") assert result == expect @@ -67,7 +74,7 @@ def test_dict_interpol(): assert result == expect -def test_escaping(escape): +def test_escaping() -> None: assert escape("\"<>&'") == ""<>&'" assert ( Markup( @@ -82,7 +89,7 @@ def test_escaping(escape): ) -def test_unescape(): +def test_unescape() -> None: assert Markup("<test>").unescape() == "<test>" result = Markup("jack & tavi are cooler than mike & russ").unescape() @@ -97,7 +104,7 @@ def test_unescape(): assert twice == expect -def test_format(): +def test_format() -> None: result = Markup("<em>{awesome}</em>").format(awesome="<awesome>") assert result == "<em><awesome></em>" @@ -108,39 +115,39 @@ def test_format(): assert result == "<bar/>" -def test_format_map(): +def test_format_map() -> None: result = Markup("<em>{value}</em>").format_map({"value": "<value>"}) assert result == "<em><value></em>" -def test_formatting_empty(): +def test_formatting_empty() -> None: formatted = Markup("{}").format(0) assert formatted == Markup("0") -def test_custom_formatting(): +def test_custom_formatting() -> None: class HasHTMLOnly: - def __html__(self): + def __html__(self) -> Markup: return Markup("<foo>") class HasHTMLAndFormat: - def __html__(self): + def __html__(self) -> Markup: return Markup("<foo>") - def __html_format__(self, spec): + def __html_format__(self, spec: str) -> Markup: return Markup("<FORMAT>") assert Markup("{0}").format(HasHTMLOnly()) == Markup("<foo>") assert Markup("{0}").format(HasHTMLAndFormat()) == Markup("<FORMAT>") -def test_complex_custom_formatting(): +def test_complex_custom_formatting() -> None: class User: - def __init__(self, id, username): + def __init__(self, id: int, username: str) -> None: self.id = id self.username = username - def __html_format__(self, format_spec): + def __html_format__(self, format_spec: str) -> Markup: if format_spec == "link": return Markup('<a href="/user/{0}">{1}</a>').format( self.id, self.__html__() @@ -150,7 +157,7 @@ def test_complex_custom_formatting(): return self.__html__() - def __html__(self): + def __html__(self) -> Markup: return Markup("<span class=user>{0}</span>").format(self.username) user = User(1, "foo") @@ -159,43 +166,43 @@ def test_complex_custom_formatting(): assert result == expect -def test_formatting_with_objects(): +def test_formatting_with_objects() -> None: class Stringable: - def __str__(self): + def __str__(self) -> str: return "строка" assert Markup("{s}").format(s=Stringable()) == Markup("строка") -def test_escape_silent(escape, escape_silent): +def test_escape_silent() -> None: assert escape_silent(None) == Markup() assert escape(None) == Markup(None) assert escape_silent("<foo>") == Markup("<foo>") -def test_splitting(): +def test_splitting() -> None: expect = [Markup("a"), Markup("b")] assert Markup("a b").split() == expect assert Markup("a b").rsplit() == expect assert Markup("a\nb").splitlines() == expect -def test_mul(): +def test_mul() -> None: assert Markup("a") * 3 == Markup("aaa") -def test_escape_return_type(escape): +def test_escape_return_type() -> None: assert isinstance(escape("a"), Markup) assert isinstance(escape(Markup("a")), Markup) class Foo: - def __html__(self): + def __html__(self) -> str: return "<strong>Foo</strong>" assert isinstance(escape(Foo()), Markup) -def test_soft_str(soft_str): - assert type(soft_str("")) is str - assert type(soft_str(Markup())) is Markup - assert type(soft_str(15)) is str +def test_soft_str() -> None: + assert type(soft_str("")) is str # noqa: E721 + assert type(soft_str(Markup())) is Markup # noqa: E721 + assert type(soft_str(15)) is str # noqa: E721 diff --git a/contrib/python/MarkupSafe/py3/ya.make b/contrib/python/MarkupSafe/py3/ya.make index f1664c93e8..7b942e706a 100644 --- a/contrib/python/MarkupSafe/py3/ya.make +++ b/contrib/python/MarkupSafe/py3/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(2.1.5) +VERSION(3.0.1) LICENSE(BSD-3-Clause) diff --git a/contrib/python/anyio/.dist-info/METADATA b/contrib/python/anyio/.dist-info/METADATA index 747e994c6b..e28bbd52d0 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.0 +Version: 4.6.2 Summary: High level compatibility layer for multiple asynchronous event loop implementations Author-email: Alex Grönholm <alex.gronholm@nextday.fi> License: MIT @@ -15,12 +15,13 @@ Classifier: Framework :: AnyIO Classifier: Typing :: Typed Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 -Requires-Python: >=3.9 +Requires-Python: >=3.8 Description-Content-Type: text/x-rst License-File: LICENSE Requires-Dist: idna >=2.8 @@ -42,6 +43,7 @@ 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' Provides-Extra: trio Requires-Dist: trio >=0.26.1 ; extra == 'trio' diff --git a/contrib/python/anyio/anyio/_backends/_asyncio.py b/contrib/python/anyio/anyio/_backends/_asyncio.py index 9342fab818..fa5349a8c2 100644 --- a/contrib/python/anyio/anyio/_backends/_asyncio.py +++ b/contrib/python/anyio/anyio/_backends/_asyncio.py @@ -20,18 +20,9 @@ from asyncio import ( ) from asyncio.base_events import _run_until_complete_cb # type: ignore[attr-defined] from collections import OrderedDict, deque -from collections.abc import ( - AsyncGenerator, - AsyncIterator, - Awaitable, - Callable, - Collection, - Coroutine, - Iterable, - Sequence, -) +from collections.abc import AsyncIterator, Iterable from concurrent.futures import Future -from contextlib import AbstractContextManager, suppress +from contextlib import suppress from contextvars import Context, copy_context from dataclasses import dataclass from functools import partial, wraps @@ -51,7 +42,15 @@ from types import TracebackType from typing import ( IO, Any, + AsyncGenerator, + Awaitable, + Callable, + Collection, + ContextManager, + Coroutine, Optional, + Sequence, + Tuple, TypeVar, cast, ) @@ -359,14 +358,6 @@ 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 ") - ) - - class CancelScope(BaseCancelScope): def __new__( cls, *, deadline: float = math.inf, shield: bool = False @@ -453,77 +444,35 @@ 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 - - # 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 - - # Restart the cancellation effort in the closest visible, cancelled parent - # scope if necessary + # Restart the cancellation effort in the closest directly cancelled parent + # scope if this one was shielded self._restart_cancellation_in_parent() - return swallow_exception and not not_swallowed_exceptions - @property - def _effectively_cancelled(self) -> bool: - cancel_scope: CancelScope | None = self - while cancel_scope is not None: - if cancel_scope._cancel_called: - return True - - if cancel_scope.shield: - return False - - cancel_scope = cancel_scope._parent_scope + if self._cancel_called and exc_val is not None: + for exc in iterate_exceptions(exc_val): + if isinstance(exc, CancelledError): + self._cancelled_caught = self._uncancel(exc) + if self._cancelled_caught: + break - return False + return self._cancelled_caught - @property - def _parent_cancellation_is_visible_to_us(self) -> bool: - return ( - self._parent_scope is not None - and not self.shield - and self._parent_scope._effectively_cancelled - ) + return None def _uncancel(self, cancelled_exc: CancelledError) -> bool: - if self._host_task is None: + if sys.version_info < (3, 9) or 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 + # 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: + return True - return False + self._cancel_calls = 0 + return f"Cancelled by cancel scope {id(self):x}" in cancelled_exc.args def _timeout(self) -> None: if self._deadline != math.inf: @@ -547,17 +496,19 @@ class CancelScope(BaseCancelScope): should_retry = False current = current_task() for task in self._tasks: - should_retry = True if task._must_cancel: # type: ignore[attr-defined] continue # The task is eligible for cancellation if it has started + should_retry = True if task is not current and (task is self._host_task or _task_started(task)): 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 + origin._cancel_calls += 1 + if sys.version_info >= (3, 9): + task.cancel(f"Cancelled by cancel scope {id(origin):x}") + else: + task.cancel() # Deliver cancellation to child scopes that aren't shielded or running their own # cancellation callbacks @@ -595,6 +546,17 @@ class CancelScope(BaseCancelScope): scope = scope._parent_scope + def _parent_cancelled(self) -> bool: + # Check whether any parent has been cancelled + cancel_scope = self._parent_scope + while cancel_scope is not None and not cancel_scope._shield: + if cancel_scope._cancel_called: + return True + else: + cancel_scope = cancel_scope._parent_scope + + return False + def cancel(self) -> None: if not self._cancel_called: if self._timeout_handle: @@ -701,50 +663,38 @@ class TaskGroup(abc.TaskGroup): exc_val: BaseException | None, exc_tb: TracebackType | None, ) -> bool | None: + ignore_exception = self.cancel_scope.__exit__(exc_type, exc_val, exc_tb) if exc_val is not None: self.cancel_scope.cancel() if not isinstance(exc_val, CancelledError): self._exceptions.append(exc_val) - try: - if self._tasks: - with CancelScope() as wait_scope: - while self._tasks: - try: - await asyncio.wait(self._tasks) - except CancelledError as exc: - # Shield the scope against further cancellation attempts, - # as they're not productive (#695) - wait_scope.shield = True - self.cancel_scope.cancel() - - # Set exc_val from the cancellation exception if it was - # previously unset. However, we should not replace a native - # cancellation exception with one raise by a cancel scope. - if exc_val is None or ( - isinstance(exc_val, CancelledError) - and not is_anyio_cancellation(exc) - ): - exc_val = exc - else: - # If there are no child tasks to wait on, run at least one checkpoint - # anyway - await AsyncIOBackend.cancel_shielded_checkpoint() + cancelled_exc_while_waiting_tasks: CancelledError | None = None + while self._tasks: + try: + await asyncio.wait(self._tasks) + except CancelledError as exc: + # This task was cancelled natively; reraise the CancelledError later + # unless this task was already interrupted by another exception + self.cancel_scope.cancel() + if cancelled_exc_while_waiting_tasks is None: + cancelled_exc_while_waiting_tasks = exc - self._active = False - if self._exceptions: - raise BaseExceptionGroup( - "unhandled errors in a TaskGroup", self._exceptions - ) - elif exc_val: - raise exc_val - except BaseException as exc: - if self.cancel_scope.__exit__(type(exc), exc, exc.__traceback__): - return True + self._active = False + if self._exceptions: + raise BaseExceptionGroup( + "unhandled errors in a TaskGroup", self._exceptions + ) - raise + # Raise the CancelledError received while waiting for child tasks to exit, + # unless the context manager itself was previously exited with another + # exception, or if any of the child tasks raised an exception other than + # CancelledError + if cancelled_exc_while_waiting_tasks: + if exc_val is None or ignore_exception: + raise cancelled_exc_while_waiting_tasks - return self.cancel_scope.__exit__(exc_type, exc_val, exc_tb) + return ignore_exception def _spawn( self, @@ -780,7 +730,7 @@ class TaskGroup(abc.TaskGroup): if not isinstance(exc, CancelledError): self._exceptions.append(exc) - if not self.cancel_scope._effectively_cancelled: + if not self.cancel_scope._parent_cancelled(): self.cancel_scope.cancel() else: task_status_future.set_exception(exc) @@ -856,7 +806,7 @@ class TaskGroup(abc.TaskGroup): # Threads # -_Retval_Queue_Type = tuple[Optional[T_Retval], Optional[BaseException]] +_Retval_Queue_Type = Tuple[Optional[T_Retval], Optional[BaseException]] class WorkerThread(Thread): @@ -1005,7 +955,7 @@ class Process(abc.Process): _stderr: StreamReaderWrapper | None async def aclose(self) -> None: - with CancelScope(shield=True) as scope: + with CancelScope(shield=True): if self._stdin: await self._stdin.aclose() if self._stdout: @@ -1013,14 +963,14 @@ class Process(abc.Process): if self._stderr: await self._stderr.aclose() - scope.shield = False - try: - await self.wait() - except BaseException: - scope.shield = True - self.kill() + try: + await self.wait() + except BaseException: + self.kill() + with CancelScope(shield=True): await self.wait() - raise + + raise async def wait(self) -> int: return await self._process.wait() @@ -1731,9 +1681,10 @@ class Lock(BaseLock): self._waiters: deque[tuple[asyncio.Task, asyncio.Future]] = deque() async def acquire(self) -> None: + task = cast(asyncio.Task, current_task()) if self._owner_task is None and not self._waiters: await AsyncIOBackend.checkpoint_if_cancelled() - self._owner_task = current_task() + self._owner_task = task # Unless on the "fast path", yield control of the event loop so that other # tasks can run too @@ -1746,7 +1697,9 @@ class Lock(BaseLock): return - task = cast(asyncio.Task, current_task()) + if self._owner_task == task: + raise RuntimeError("Attempted to acquire an already held Lock") + fut: asyncio.Future[None] = asyncio.Future() item = task, fut self._waiters.append(item) @@ -1762,10 +1715,14 @@ class Lock(BaseLock): self._waiters.remove(item) def acquire_nowait(self) -> None: + task = cast(asyncio.Task, current_task()) if self._owner_task is None and not self._waiters: - self._owner_task = current_task() + self._owner_task = task return + if self._owner_task is task: + raise RuntimeError("Attempted to acquire an already held Lock") + raise WouldBlock def locked(self) -> bool: @@ -2065,7 +2022,9 @@ class AsyncIOTaskInfo(TaskInfo): if task_state := _task_states.get(task): if cancel_scope := task_state.cancel_scope: - return cancel_scope._effectively_cancelled + return cancel_scope.cancel_called or ( + not cancel_scope.shield and cancel_scope._parent_cancelled() + ) return False @@ -2159,7 +2118,7 @@ class TestRunner(abc.TestRunner): ) -> T_Retval: if not self._runner_task: self._send_stream, receive_stream = create_memory_object_stream[ - tuple[Awaitable[Any], asyncio.Future] + Tuple[Awaitable[Any], asyncio.Future] ](1) self._runner_task = self.get_loop().create_task( self._run_tests_and_fixtures(receive_stream) @@ -2521,7 +2480,7 @@ class AsyncIOBackend(AsyncBackend): cls, host: str, port: int, local_address: IPSockAddrType | None = None ) -> abc.SocketStream: transport, protocol = cast( - tuple[asyncio.Transport, StreamProtocol], + Tuple[asyncio.Transport, StreamProtocol], await get_running_loop().create_connection( StreamProtocol, host, port, local_addr=local_address ), @@ -2700,7 +2659,7 @@ class AsyncIOBackend(AsyncBackend): @classmethod def open_signal_receiver( cls, *signals: Signals - ) -> AbstractContextManager[AsyncIterator[Signals]]: + ) -> ContextManager[AsyncIterator[Signals]]: return _SignalReceiver(signals) @classmethod diff --git a/contrib/python/anyio/anyio/_backends/_trio.py b/contrib/python/anyio/anyio/_backends/_trio.py index de2189ce78..aee974deb6 100644 --- a/contrib/python/anyio/anyio/_backends/_trio.py +++ b/contrib/python/anyio/anyio/_backends/_trio.py @@ -7,18 +7,8 @@ import socket import sys import types import weakref -from collections.abc import ( - AsyncGenerator, - AsyncIterator, - Awaitable, - Callable, - Collection, - Coroutine, - Iterable, - Sequence, -) +from collections.abc import AsyncIterator, Iterable from concurrent.futures import Future -from contextlib import AbstractContextManager from dataclasses import dataclass from functools import partial from io import IOBase @@ -29,8 +19,15 @@ from types import TracebackType from typing import ( IO, Any, + AsyncGenerator, + Awaitable, + Callable, + Collection, + ContextManager, + Coroutine, Generic, NoReturn, + Sequence, TypeVar, cast, overload, @@ -662,9 +659,19 @@ class Lock(BaseLock): self._fast_acquire = fast_acquire self.__original = trio.Lock() + @staticmethod + def _convert_runtime_error_msg(exc: RuntimeError) -> None: + if exc.args == ("attempt to re-acquire an already held Lock",): + exc.args = ("Attempted to acquire an already held Lock",) + async def acquire(self) -> None: if not self._fast_acquire: - await self.__original.acquire() + try: + await self.__original.acquire() + except RuntimeError as exc: + self._convert_runtime_error_msg(exc) + raise + return # This is the "fast path" where we don't let other tasks run @@ -673,12 +680,18 @@ class Lock(BaseLock): self.__original.acquire_nowait() except trio.WouldBlock: await self.__original._lot.park() + except RuntimeError as exc: + self._convert_runtime_error_msg(exc) + raise def acquire_nowait(self) -> None: try: self.__original.acquire_nowait() except trio.WouldBlock: raise WouldBlock from None + except RuntimeError as exc: + self._convert_runtime_error_msg(exc) + raise def locked(self) -> bool: return self.__original.locked() @@ -1276,7 +1289,7 @@ class TrioBackend(AsyncBackend): @classmethod def open_signal_receiver( cls, *signals: Signals - ) -> AbstractContextManager[AsyncIterator[Signals]]: + ) -> ContextManager[AsyncIterator[Signals]]: return _SignalReceiver(signals) @classmethod diff --git a/contrib/python/anyio/anyio/_core/_fileio.py b/contrib/python/anyio/anyio/_core/_fileio.py index 23ccb0d66f..214a90bfd8 100644 --- a/contrib/python/anyio/anyio/_core/_fileio.py +++ b/contrib/python/anyio/anyio/_core/_fileio.py @@ -3,7 +3,7 @@ from __future__ import annotations import os import pathlib import sys -from collections.abc import AsyncIterator, Callable, Iterable, Iterator, Sequence +from collections.abc import Callable, Iterable, Iterator, Sequence from dataclasses import dataclass from functools import partial from os import PathLike @@ -12,6 +12,7 @@ from typing import ( TYPE_CHECKING, Any, AnyStr, + AsyncIterator, Final, Generic, overload, @@ -217,6 +218,18 @@ class Path: It implements the Python 3.10 version of :class:`pathlib.Path` interface, except for the deprecated :meth:`~pathlib.Path.link_to` method. + Some methods may be unavailable or have limited functionality, based on the Python + version: + + * :meth:`~pathlib.Path.from_uri` (available on Python 3.13 or later) + * :meth:`~pathlib.Path.full_match` (available on Python 3.13 or later) + * :meth:`~pathlib.Path.is_junction` (available on Python 3.12 or later) + * :meth:`~pathlib.Path.match` (the ``case_sensitive`` paramater is only available on + Python 3.13 or later) + * :meth:`~pathlib.Path.relative_to` (the ``walk_up`` parameter is only available on + Python 3.12 or later) + * :meth:`~pathlib.Path.walk` (available on Python 3.12 or later) + Any methods that do disk I/O need to be awaited on. These methods are: * :meth:`~pathlib.Path.absolute` @@ -232,7 +245,10 @@ class Path: * :meth:`~pathlib.Path.is_dir` * :meth:`~pathlib.Path.is_fifo` * :meth:`~pathlib.Path.is_file` + * :meth:`~pathlib.Path.is_junction` * :meth:`~pathlib.Path.is_mount` + * :meth:`~pathlib.Path.is_socket` + * :meth:`~pathlib.Path.is_symlink` * :meth:`~pathlib.Path.lchmod` * :meth:`~pathlib.Path.lstat` * :meth:`~pathlib.Path.mkdir` @@ -243,11 +259,14 @@ class Path: * :meth:`~pathlib.Path.readlink` * :meth:`~pathlib.Path.rename` * :meth:`~pathlib.Path.replace` + * :meth:`~pathlib.Path.resolve` * :meth:`~pathlib.Path.rmdir` * :meth:`~pathlib.Path.samefile` * :meth:`~pathlib.Path.stat` + * :meth:`~pathlib.Path.symlink_to` * :meth:`~pathlib.Path.touch` * :meth:`~pathlib.Path.unlink` + * :meth:`~pathlib.Path.walk` * :meth:`~pathlib.Path.write_bytes` * :meth:`~pathlib.Path.write_text` @@ -385,9 +404,6 @@ class Path: except ValueError: return False - async def is_junction(self) -> bool: - return await to_thread.run_sync(self._path.is_junction) - async def chmod(self, mode: int, *, follow_symlinks: bool = True) -> None: func = partial(os.chmod, follow_symlinks=follow_symlinks) return await to_thread.run_sync(func, self._path, mode) @@ -447,6 +463,11 @@ class Path: async def is_file(self) -> bool: return await to_thread.run_sync(self._path.is_file, abandon_on_cancel=True) + if sys.version_info >= (3, 12): + + async def is_junction(self) -> bool: + return await to_thread.run_sync(self._path.is_junction) + async def is_mount(self) -> bool: return await to_thread.run_sync( os.path.ismount, self._path, abandon_on_cancel=True diff --git a/contrib/python/anyio/anyio/_core/_signals.py b/contrib/python/anyio/anyio/_core/_signals.py index f3451d302f..115c749bd9 100644 --- a/contrib/python/anyio/anyio/_core/_signals.py +++ b/contrib/python/anyio/anyio/_core/_signals.py @@ -1,15 +1,13 @@ from __future__ import annotations from collections.abc import AsyncIterator -from contextlib import AbstractContextManager from signal import Signals +from typing import ContextManager from ._eventloop import get_async_backend -def open_signal_receiver( - *signals: Signals, -) -> AbstractContextManager[AsyncIterator[Signals]]: +def open_signal_receiver(*signals: Signals) -> ContextManager[AsyncIterator[Signals]]: """ Start receiving operating system signals. diff --git a/contrib/python/anyio/anyio/_core/_streams.py b/contrib/python/anyio/anyio/_core/_streams.py index 6a9814e5a9..aa6b0c222a 100644 --- a/contrib/python/anyio/anyio/_core/_streams.py +++ b/contrib/python/anyio/anyio/_core/_streams.py @@ -1,7 +1,7 @@ from __future__ import annotations import math -from typing import TypeVar +from typing import Tuple, TypeVar from warnings import warn from ..streams.memory import ( @@ -14,7 +14,7 @@ T_Item = TypeVar("T_Item") class create_memory_object_stream( - tuple[MemoryObjectSendStream[T_Item], MemoryObjectReceiveStream[T_Item]], + Tuple[MemoryObjectSendStream[T_Item], MemoryObjectReceiveStream[T_Item]], ): """ Create a memory object stream. diff --git a/contrib/python/anyio/anyio/_core/_subprocesses.py b/contrib/python/anyio/anyio/_core/_subprocesses.py index 7ba41a5b03..1ac2d549df 100644 --- a/contrib/python/anyio/anyio/_core/_subprocesses.py +++ b/contrib/python/anyio/anyio/_core/_subprocesses.py @@ -160,25 +160,38 @@ async def open_process( child process prior to the execution of the subprocess. (POSIX only) :param pass_fds: sequence of file descriptors to keep open between the parent and child processes. (POSIX only) - :param user: effective user to run the process as (POSIX only) - :param group: effective group to run the process as (POSIX only) - :param extra_groups: supplementary groups to set in the subprocess (POSIX only) + :param user: effective user to run the process as (Python >= 3.9; POSIX only) + :param group: effective group to run the process as (Python >= 3.9; POSIX only) + :param extra_groups: supplementary groups to set in the subprocess (Python >= 3.9; + POSIX only) :param umask: if not negative, this umask is applied in the child process before - running the given command (POSIX only) + running the given command (Python >= 3.9; POSIX only) :return: an asynchronous process object """ kwargs: dict[str, Any] = {} if user is not None: + if sys.version_info < (3, 9): + raise TypeError("the 'user' argument requires Python 3.9 or later") + kwargs["user"] = user if group is not None: + if sys.version_info < (3, 9): + raise TypeError("the 'group' argument requires Python 3.9 or later") + kwargs["group"] = group if extra_groups is not None: + if sys.version_info < (3, 9): + raise TypeError("the 'extra_groups' argument requires Python 3.9 or later") + kwargs["extra_groups"] = group if umask >= 0: + if sys.version_info < (3, 9): + raise TypeError("the 'umask' argument requires Python 3.9 or later") + kwargs["umask"] = umask return await get_async_backend().open_process( diff --git a/contrib/python/anyio/anyio/abc/_eventloop.py b/contrib/python/anyio/anyio/abc/_eventloop.py index 93d0e9d25b..2c73bb9ffb 100644 --- a/contrib/python/anyio/anyio/abc/_eventloop.py +++ b/contrib/python/anyio/anyio/abc/_eventloop.py @@ -3,8 +3,7 @@ from __future__ import annotations import math import sys from abc import ABCMeta, abstractmethod -from collections.abc import AsyncIterator, Awaitable, Callable, Sequence -from contextlib import AbstractContextManager +from collections.abc import AsyncIterator, Awaitable from os import PathLike from signal import Signals from socket import AddressFamily, SocketKind, socket @@ -12,6 +11,9 @@ from typing import ( IO, TYPE_CHECKING, Any, + Callable, + ContextManager, + Sequence, TypeVar, Union, overload, @@ -350,7 +352,7 @@ class AsyncBackend(metaclass=ABCMeta): @abstractmethod def open_signal_receiver( cls, *signals: Signals - ) -> AbstractContextManager[AsyncIterator[Signals]]: + ) -> ContextManager[AsyncIterator[Signals]]: pass @classmethod diff --git a/contrib/python/anyio/anyio/abc/_sockets.py b/contrib/python/anyio/anyio/abc/_sockets.py index 1c6a450cdc..b321225a7b 100644 --- a/contrib/python/anyio/anyio/abc/_sockets.py +++ b/contrib/python/anyio/anyio/abc/_sockets.py @@ -8,7 +8,7 @@ from io import IOBase from ipaddress import IPv4Address, IPv6Address from socket import AddressFamily from types import TracebackType -from typing import Any, TypeVar, Union +from typing import Any, Tuple, TypeVar, Union from .._core._typedattr import ( TypedAttributeProvider, @@ -19,10 +19,10 @@ from ._streams import ByteStream, Listener, UnreliableObjectStream from ._tasks import TaskGroup IPAddressType = Union[str, IPv4Address, IPv6Address] -IPSockAddrType = tuple[str, int] +IPSockAddrType = Tuple[str, int] SockAddrType = Union[IPSockAddrType, str] -UDPPacketType = tuple[bytes, IPSockAddrType] -UNIXDatagramPacketType = tuple[bytes, str] +UDPPacketType = Tuple[bytes, IPSockAddrType] +UNIXDatagramPacketType = Tuple[bytes, str] T_Retval = TypeVar("T_Retval") diff --git a/contrib/python/anyio/anyio/from_thread.py b/contrib/python/anyio/anyio/from_thread.py index 93a4cfe8e4..b8785845ba 100644 --- a/contrib/python/anyio/anyio/from_thread.py +++ b/contrib/python/anyio/anyio/from_thread.py @@ -3,17 +3,15 @@ from __future__ import annotations import sys from collections.abc import Awaitable, Callable, Generator from concurrent.futures import Future -from contextlib import ( - AbstractAsyncContextManager, - AbstractContextManager, - contextmanager, -) +from contextlib import AbstractContextManager, contextmanager from dataclasses import dataclass, field from inspect import isawaitable from threading import Lock, Thread, get_ident from types import TracebackType from typing import ( Any, + AsyncContextManager, + ContextManager, Generic, TypeVar, cast, @@ -89,9 +87,7 @@ class _BlockingAsyncContextManager(Generic[T_co], AbstractContextManager): type[BaseException] | None, BaseException | None, TracebackType | None ] = (None, None, None) - def __init__( - self, async_cm: AbstractAsyncContextManager[T_co], portal: BlockingPortal - ): + def __init__(self, async_cm: AsyncContextManager[T_co], portal: BlockingPortal): self._async_cm = async_cm self._portal = portal @@ -378,8 +374,8 @@ class BlockingPortal: return f, task_status_future.result() def wrap_async_context_manager( - self, cm: AbstractAsyncContextManager[T_co] - ) -> AbstractContextManager[T_co]: + self, cm: AsyncContextManager[T_co] + ) -> ContextManager[T_co]: """ Wrap an async context manager as a synchronous context manager via this portal. diff --git a/contrib/python/anyio/anyio/pytest_plugin.py b/contrib/python/anyio/anyio/pytest_plugin.py index c9fe1bde92..b7d9305614 100644 --- a/contrib/python/anyio/anyio/pytest_plugin.py +++ b/contrib/python/anyio/anyio/pytest_plugin.py @@ -1,13 +1,14 @@ from __future__ import annotations import sys -from collections.abc import Iterator +from collections.abc import Generator, Iterator from contextlib import ExitStack, contextmanager -from inspect import isasyncgenfunction, iscoroutinefunction -from typing import Any, cast +from inspect import isasyncgenfunction, iscoroutinefunction, ismethod +from typing import Any, Dict, Tuple, cast import pytest import sniffio +from _pytest.fixtures import SubRequest from _pytest.outcomes import Exit from ._core._eventloop import get_all_backends, get_async_backend @@ -27,7 +28,7 @@ def extract_backend_and_options(backend: object) -> tuple[str, dict[str, Any]]: return backend, {} elif isinstance(backend, tuple) and len(backend) == 2: if isinstance(backend[0], str) and isinstance(backend[1], dict): - return cast(tuple[str, dict[str, Any]], backend) + return cast(Tuple[str, Dict[str, Any]], backend) raise TypeError("anyio_backend must be either a string or tuple of (string, dict)") @@ -70,28 +71,56 @@ def pytest_configure(config: Any) -> None: ) -def pytest_fixture_setup(fixturedef: Any, request: Any) -> None: - def wrapper(*args, anyio_backend, **kwargs): # type: ignore[no-untyped-def] +@pytest.hookimpl(hookwrapper=True) +def pytest_fixture_setup(fixturedef: Any, request: Any) -> Generator[Any]: + def wrapper( + *args: Any, anyio_backend: Any, request: SubRequest, **kwargs: Any + ) -> Any: + # Rebind any fixture methods to the request instance + if ( + request.instance + and ismethod(func) + and type(func.__self__) is type(request.instance) + ): + local_func = func.__func__.__get__(request.instance) + else: + local_func = func + backend_name, backend_options = extract_backend_and_options(anyio_backend) if has_backend_arg: kwargs["anyio_backend"] = anyio_backend + if has_request_arg: + kwargs["request"] = request + with get_runner(backend_name, backend_options) as runner: - if isasyncgenfunction(func): - yield from runner.run_asyncgen_fixture(func, kwargs) + if isasyncgenfunction(local_func): + yield from runner.run_asyncgen_fixture(local_func, kwargs) else: - yield runner.run_fixture(func, kwargs) + yield runner.run_fixture(local_func, kwargs) # Only apply this to coroutine functions and async generator functions in requests # that involve the anyio_backend fixture func = fixturedef.func if isasyncgenfunction(func) or iscoroutinefunction(func): if "anyio_backend" in request.fixturenames: - has_backend_arg = "anyio_backend" in fixturedef.argnames fixturedef.func = wrapper - if not has_backend_arg: + original_argname = fixturedef.argnames + + if not (has_backend_arg := "anyio_backend" in fixturedef.argnames): fixturedef.argnames += ("anyio_backend",) + if not (has_request_arg := "request" in fixturedef.argnames): + fixturedef.argnames += ("request",) + + try: + return (yield) + finally: + fixturedef.func = func + fixturedef.argnames = original_argname + + return (yield) + @pytest.hookimpl(tryfirst=True) def pytest_pycollect_makeitem(collector: Any, name: Any, obj: Any) -> None: diff --git a/contrib/python/anyio/anyio/streams/tls.py b/contrib/python/anyio/anyio/streams/tls.py index 83240b4d35..d01c8e6f4c 100644 --- a/contrib/python/anyio/anyio/streams/tls.py +++ b/contrib/python/anyio/anyio/streams/tls.py @@ -7,7 +7,7 @@ import sys from collections.abc import Callable, Mapping from dataclasses import dataclass from functools import wraps -from typing import Any, TypeVar +from typing import Any, Tuple, TypeVar from .. import ( BrokenResourceError, @@ -25,8 +25,8 @@ else: T_Retval = TypeVar("T_Retval") PosArgsT = TypeVarTuple("PosArgsT") -_PCTRTT = tuple[tuple[str, str], ...] -_PCTRTTT = tuple[_PCTRTT, ...] +_PCTRTT = Tuple[Tuple[str, str], ...] +_PCTRTTT = Tuple[_PCTRTT, ...] class TLSAttribute(TypedAttributeSet): @@ -162,9 +162,8 @@ class TLSStream(ByteStream): except ssl.SSLError as exc: self._read_bio.write_eof() self._write_bio.write_eof() - if ( - isinstance(exc, ssl.SSLEOFError) - or "UNEXPECTED_EOF_WHILE_READING" in exc.strerror + if isinstance(exc, ssl.SSLEOFError) or ( + exc.strerror and "UNEXPECTED_EOF_WHILE_READING" in exc.strerror ): if self.standard_compatible: raise BrokenResourceError from exc diff --git a/contrib/python/anyio/ya.make b/contrib/python/anyio/ya.make index cec445229c..bb56a53ce5 100644 --- a/contrib/python/anyio/ya.make +++ b/contrib/python/anyio/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(4.6.0) +VERSION(4.6.2) LICENSE(MIT) diff --git a/contrib/python/argcomplete/py3/.dist-info/METADATA b/contrib/python/argcomplete/py3/.dist-info/METADATA index ce75d7bfa8..8bda4dd4a3 100644 --- a/contrib/python/argcomplete/py3/.dist-info/METADATA +++ b/contrib/python/argcomplete/py3/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: argcomplete -Version: 3.5.0 +Version: 3.5.1 Summary: Bash tab completion for argparse Home-page: https://github.com/kislyuk/argcomplete Author: Andrey Kislyuk @@ -9,7 +9,7 @@ License: Apache Software License Project-URL: Documentation, https://kislyuk.github.io/argcomplete Project-URL: Source Code, https://github.com/kislyuk/argcomplete Project-URL: Issue Tracker, https://github.com/kislyuk/argcomplete/issues -Project-URL: Change Log, https://github.com/kislyuk/argcomplete/blob/master/Changes.rst +Project-URL: Change Log, https://github.com/kislyuk/argcomplete/blob/develop/Changes.rst Platform: MacOS X Platform: Posix Classifier: Environment :: Console diff --git a/contrib/python/argcomplete/py3/argcomplete/packages/_argparse.py b/contrib/python/argcomplete/py3/argcomplete/packages/_argparse.py index 2a064f9a8f..d10cf01da9 100644 --- a/contrib/python/argcomplete/py3/argcomplete/packages/_argparse.py +++ b/contrib/python/argcomplete/py3/argcomplete/packages/_argparse.py @@ -162,6 +162,8 @@ class IntrospectiveArgumentParser(ArgumentParser): def consume_optional(start_index): # get the optional identified at this index option_tuple = option_string_indices[start_index] + if isinstance(option_tuple, list): # Python 3.12.7+ + option_tuple = option_tuple[0] if len(option_tuple) == 3: action, option_string, explicit_arg = option_tuple else: # Python 3.11.9+, 3.12.3+, 3.13+ diff --git a/contrib/python/argcomplete/py3/ya.make b/contrib/python/argcomplete/py3/ya.make index 16487619c8..ddce3929fb 100644 --- a/contrib/python/argcomplete/py3/ya.make +++ b/contrib/python/argcomplete/py3/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(3.5.0) +VERSION(3.5.1) LICENSE(Apache-2.0) diff --git a/contrib/python/clickhouse-connect/.dist-info/METADATA b/contrib/python/clickhouse-connect/.dist-info/METADATA index bb928a4bc2..f47d5e0e6c 100644 --- a/contrib/python/clickhouse-connect/.dist-info/METADATA +++ b/contrib/python/clickhouse-connect/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: clickhouse-connect -Version: 0.8.2 +Version: 0.8.3 Summary: ClickHouse Database Core Driver for Python, Pandas, and Superset Home-page: https://github.com/ClickHouse/clickhouse-connect Author: ClickHouse Inc. diff --git a/contrib/python/clickhouse-connect/clickhouse_connect/__version__.py b/contrib/python/clickhouse-connect/clickhouse_connect/__version__.py index c400d68132..b4ab55be61 100644 --- a/contrib/python/clickhouse-connect/clickhouse_connect/__version__.py +++ b/contrib/python/clickhouse-connect/clickhouse_connect/__version__.py @@ -1 +1 @@ -version = '0.8.2' +version = '0.8.3' diff --git a/contrib/python/clickhouse-connect/clickhouse_connect/driver/__init__.py b/contrib/python/clickhouse-connect/clickhouse_connect/driver/__init__.py index fe3e4b3fbc..58efb5f8a8 100644 --- a/contrib/python/clickhouse-connect/clickhouse_connect/driver/__init__.py +++ b/contrib/python/clickhouse-connect/clickhouse_connect/driver/__init__.py @@ -133,6 +133,7 @@ async def create_async_client(*, dsn: Optional[str] = None, settings: Optional[Dict[str, Any]] = None, generic_args: Optional[Dict[str, Any]] = None, + executor_threads: Optional[int] = None, **kwargs) -> AsyncClient: """ The preferred method to get an async ClickHouse Connect Client instance. @@ -154,6 +155,8 @@ async def create_async_client(*, :param settings: ClickHouse server settings to be used with the session/every request :param generic_args: Used internally to parse DBAPI connection strings into keyword arguments and ClickHouse settings. It is not recommended to use this parameter externally + :param: executor_threads 'max_worker' threads used by the client ThreadPoolExecutor. If not set, the default + of 4 + detected CPU cores will be used :param kwargs -- Recognized keyword arguments (used by the HTTP client), see below :param compress: Enable compression for ClickHouse HTTP inserts and query results. True will select the preferred @@ -194,4 +197,4 @@ async def create_async_client(*, loop = asyncio.get_running_loop() _client = await loop.run_in_executor(None, _create_client) - return AsyncClient(client=_client) + return AsyncClient(client=_client, executor_threads=executor_threads) diff --git a/contrib/python/clickhouse-connect/clickhouse_connect/driver/asyncclient.py b/contrib/python/clickhouse-connect/clickhouse_connect/driver/asyncclient.py index bf56c9783f..b63a14f776 100644 --- a/contrib/python/clickhouse-connect/clickhouse_connect/driver/asyncclient.py +++ b/contrib/python/clickhouse-connect/clickhouse_connect/driver/asyncclient.py @@ -1,5 +1,7 @@ import asyncio import io +import os +from concurrent.futures.thread import ThreadPoolExecutor from datetime import tzinfo from typing import Optional, Union, Dict, Any, Sequence, Iterable, Generator, BinaryIO @@ -20,10 +22,13 @@ class AsyncClient: Internally, each of the methods that uses IO is wrapped in a call to EventLoop.run_in_executor. """ - def __init__(self, *, client: Client): + def __init__(self, *, client: Client, executor_threads: int = 0): if isinstance(client, HttpClient): client.headers['User-Agent'] = client.headers['User-Agent'].replace('mode:sync;', 'mode:async;') self.client = client + if executor_threads == 0: + executor_threads = min(32, (os.cpu_count() or 1) + 4) # Mimic the default behavior + self.executor = ThreadPoolExecutor(max_workers=executor_threads) def set_client_setting(self, key, value): @@ -88,7 +93,7 @@ class AsyncClient: external_data=external_data) loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _query) + result = await loop.run_in_executor(self.executor, _query) return result async def query_column_block_stream(self, @@ -117,7 +122,7 @@ class AsyncClient: external_data=external_data) loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _query_column_block_stream) + result = await loop.run_in_executor(self.executor, _query_column_block_stream) return result async def query_row_block_stream(self, @@ -146,7 +151,7 @@ class AsyncClient: external_data=external_data) loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _query_row_block_stream) + result = await loop.run_in_executor(self.executor, _query_row_block_stream) return result async def query_rows_stream(self, @@ -175,7 +180,7 @@ class AsyncClient: external_data=external_data) loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _query_rows_stream) + result = await loop.run_in_executor(self.executor, _query_rows_stream) return result async def raw_query(self, @@ -202,7 +207,7 @@ class AsyncClient: use_database=use_database, external_data=external_data) loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _raw_query) + result = await loop.run_in_executor(self.executor, _raw_query) return result async def raw_stream(self, query: str, @@ -228,7 +233,7 @@ class AsyncClient: use_database=use_database, external_data=external_data) loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _raw_stream) + result = await loop.run_in_executor(self.executor, _raw_stream) return result async def query_np(self, @@ -255,7 +260,7 @@ class AsyncClient: external_data=external_data) loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _query_np) + result = await loop.run_in_executor(self.executor, _query_np) return result async def query_np_stream(self, @@ -282,7 +287,7 @@ class AsyncClient: context=context, external_data=external_data) loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _query_np_stream) + result = await loop.run_in_executor(self.executor, _query_np_stream) return result async def query_df(self, @@ -314,7 +319,7 @@ class AsyncClient: external_data=external_data, use_extended_dtypes=use_extended_dtypes) loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _query_df) + result = await loop.run_in_executor(self.executor, _query_df) return result async def query_df_stream(self, @@ -347,7 +352,7 @@ class AsyncClient: external_data=external_data, use_extended_dtypes=use_extended_dtypes) loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _query_df_stream) + result = await loop.run_in_executor(self.executor, _query_df_stream) return result def create_query_context(self, @@ -433,7 +438,7 @@ class AsyncClient: use_strings=use_strings, external_data=external_data) loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _query_arrow) + result = await loop.run_in_executor(self.executor, _query_arrow) return result async def query_arrow_stream(self, @@ -457,7 +462,7 @@ class AsyncClient: use_strings=use_strings, external_data=external_data) loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _query_arrow_stream) + result = await loop.run_in_executor(self.executor, _query_arrow_stream) return result async def command(self, @@ -486,7 +491,7 @@ class AsyncClient: use_database=use_database, external_data=external_data) loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _command) + result = await loop.run_in_executor(self.executor, _command) return result async def ping(self) -> bool: @@ -499,7 +504,7 @@ class AsyncClient: return self.client.ping() loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _ping) + result = await loop.run_in_executor(self.executor, _ping) return result async def insert(self, @@ -537,7 +542,7 @@ class AsyncClient: column_oriented=column_oriented, settings=settings, context=context) loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _insert) + result = await loop.run_in_executor(self.executor, _insert) return result async def insert_df(self, table: str = None, @@ -572,7 +577,7 @@ class AsyncClient: context=context) loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _insert_df) + result = await loop.run_in_executor(self.executor, _insert_df) return result async def insert_arrow(self, table: str, @@ -591,7 +596,7 @@ class AsyncClient: return self.client.insert_arrow(table=table, arrow_table=arrow_table, database=database, settings=settings) loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _insert_arrow) + result = await loop.run_in_executor(self.executor, _insert_arrow) return result async def create_insert_context(self, @@ -625,7 +630,7 @@ class AsyncClient: column_oriented=column_oriented, settings=settings, data=data) loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _create_insert_context) + result = await loop.run_in_executor(self.executor, _create_insert_context) return result async def data_insert(self, context: InsertContext) -> QuerySummary: @@ -639,7 +644,7 @@ class AsyncClient: return self.client.data_insert(context=context) loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _data_insert) + result = await loop.run_in_executor(self.executor, _data_insert) return result async def raw_insert(self, table: str, @@ -663,5 +668,5 @@ class AsyncClient: settings=settings, fmt=fmt, compression=compression) loop = asyncio.get_running_loop() - result = await loop.run_in_executor(None, _raw_insert) + result = await loop.run_in_executor(self.executor, _raw_insert) return result diff --git a/contrib/python/clickhouse-connect/ya.make b/contrib/python/clickhouse-connect/ya.make index 89d942df53..23919d9b30 100644 --- a/contrib/python/clickhouse-connect/ya.make +++ b/contrib/python/clickhouse-connect/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(0.8.2) +VERSION(0.8.3) LICENSE(Apache-2.0) diff --git a/contrib/python/hypothesis/py3/.dist-info/METADATA b/contrib/python/hypothesis/py3/.dist-info/METADATA index 418a478f2c..7916731906 100644 --- a/contrib/python/hypothesis/py3/.dist-info/METADATA +++ b/contrib/python/hypothesis/py3/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: hypothesis -Version: 6.112.4 +Version: 6.112.5 Summary: A library for property-based testing Home-page: https://hypothesis.works Author: David R. MacIver and Zac Hatfield-Dodds diff --git a/contrib/python/hypothesis/py3/hypothesis/stateful.py b/contrib/python/hypothesis/py3/hypothesis/stateful.py index 06e97b7ba5..190d7076fd 100644 --- a/contrib/python/hypothesis/py3/hypothesis/stateful.py +++ b/contrib/python/hypothesis/py3/hypothesis/stateful.py @@ -501,9 +501,12 @@ class Bundle(SearchStrategy[Ex]): drawn from this bundle will be consumed (as above) when requested. """ - def __init__(self, name: str, *, consume: bool = False) -> None: + def __init__( + self, name: str, *, consume: bool = False, draw_references: bool = True + ) -> None: self.name = name self.consume = consume + self.draw_references = draw_references def do_draw(self, data): machine = data.draw(self_strategy) @@ -522,7 +525,9 @@ class Bundle(SearchStrategy[Ex]): else: reference = bundle[position] - return reference + if self.draw_references: + return reference + return machine.names_to_values[reference.name] def __repr__(self): consume = self.consume @@ -541,6 +546,13 @@ class Bundle(SearchStrategy[Ex]): machine = data.draw(self_strategy) return bool(machine.bundle(self.name)) + def flatmap(self, expand): + if self.draw_references: + return type(self)( + self.name, consume=self.consume, draw_references=False + ).flatmap(expand) + return super().flatmap(expand) + def consumes(bundle: Bundle[Ex]) -> SearchStrategy[Ex]: """When introducing a rule in a RuleBasedStateMachine, this function can diff --git a/contrib/python/hypothesis/py3/hypothesis/version.py b/contrib/python/hypothesis/py3/hypothesis/version.py index a2112a2f36..11ed864977 100644 --- a/contrib/python/hypothesis/py3/hypothesis/version.py +++ b/contrib/python/hypothesis/py3/hypothesis/version.py @@ -8,5 +8,5 @@ # v. 2.0. If a copy of the MPL was not distributed with this file, You can # obtain one at https://mozilla.org/MPL/2.0/. -__version_info__ = (6, 112, 4) +__version_info__ = (6, 112, 5) __version__ = ".".join(map(str, __version_info__)) diff --git a/contrib/python/hypothesis/py3/ya.make b/contrib/python/hypothesis/py3/ya.make index 7dc523a75e..13a8342b39 100644 --- a/contrib/python/hypothesis/py3/ya.make +++ b/contrib/python/hypothesis/py3/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(6.112.4) +VERSION(6.112.5) LICENSE(MPL-2.0) diff --git a/contrib/python/zope.interface/py3/.dist-info/METADATA b/contrib/python/zope.interface/py3/.dist-info/METADATA index 369d5d2401..30f01bb893 100644 --- a/contrib/python/zope.interface/py3/.dist-info/METADATA +++ b/contrib/python/zope.interface/py3/.dist-info/METADATA @@ -1,10 +1,10 @@ Metadata-Version: 2.1 Name: zope.interface -Version: 7.0.3 +Version: 7.1.0 Summary: Interfaces for Python Home-page: https://github.com/zopefoundation/zope.interface Author: Zope Foundation and Contributors -Author-email: zope-dev@zope.org +Author-email: zope-dev@zope.dev License: ZPL 2.1 Keywords: interface,components,plugins Classifier: Development Status :: 5 - Production/Stable @@ -18,25 +18,27 @@ Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Framework :: Zope :: 3 Classifier: Topic :: Software Development :: Libraries :: Python Modules Requires-Python: >=3.8 +Description-Content-Type: text/x-rst License-File: LICENSE.txt Requires-Dist: setuptools Provides-Extra: docs -Requires-Dist: Sphinx; extra == "docs" -Requires-Dist: repoze.sphinx.autointerface; extra == "docs" -Requires-Dist: sphinx-rtd-theme; extra == "docs" +Requires-Dist: Sphinx ; extra == 'docs' +Requires-Dist: repoze.sphinx.autointerface ; extra == 'docs' +Requires-Dist: furo ; extra == 'docs' Provides-Extra: test -Requires-Dist: coverage>=5.0.3; extra == "test" -Requires-Dist: zope.event; extra == "test" -Requires-Dist: zope.testing; extra == "test" +Requires-Dist: coverage[toml] ; extra == 'test' +Requires-Dist: zope.event ; extra == 'test' +Requires-Dist: zope.testing ; extra == 'test' Provides-Extra: testing -Requires-Dist: coverage>=5.0.3; extra == "testing" -Requires-Dist: zope.event; extra == "testing" -Requires-Dist: zope.testing; extra == "testing" +Requires-Dist: coverage[toml] ; extra == 'testing' +Requires-Dist: zope.event ; extra == 'testing' +Requires-Dist: zope.testing ; extra == 'testing' ==================== ``zope.interface`` @@ -74,6 +76,15 @@ For detailed documentation, please see https://zopeinterface.readthedocs.io/en/l Changes ========= +7.1.0 (2024-10-10) +================== + +- Declare support for Python 3.13. + +- Fix segmentation faults on Python 3.13. + (`#323 <https://github.com/zopefoundation/zope.interface/issues/323>`_) + + 7.0.3 (2024-08-27) ================== diff --git a/contrib/python/zope.interface/py3/ya.make b/contrib/python/zope.interface/py3/ya.make index 966c73c1fe..2448b66894 100644 --- a/contrib/python/zope.interface/py3/ya.make +++ b/contrib/python/zope.interface/py3/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(7.0.3) +VERSION(7.1.0) LICENSE(ZPL-2.1) diff --git a/contrib/python/zope.interface/py3/zope/interface/common/interfaces.py b/contrib/python/zope.interface/py3/zope/interface/common/interfaces.py index 74386de024..9075795822 100644 --- a/contrib/python/zope.interface/py3/zope/interface/common/interfaces.py +++ b/contrib/python/zope.interface/py3/zope/interface/common/interfaces.py @@ -19,6 +19,8 @@ from zope.interface import classImplements class IException(Interface): "Interface for `Exception`" + + classImplements(Exception, IException) # noqa E305 @@ -28,116 +30,162 @@ class IStandardError(IException): class IWarning(IException): "Interface for `Warning`" + + classImplements(Warning, IWarning) # noqa E305 class ISyntaxError(IStandardError): "Interface for `SyntaxError`" + + classImplements(SyntaxError, ISyntaxError) # noqa E305 class ILookupError(IStandardError): "Interface for `LookupError`" + + classImplements(LookupError, ILookupError) # noqa E305 class IValueError(IStandardError): "Interface for `ValueError`" + + classImplements(ValueError, IValueError) # noqa E305 class IRuntimeError(IStandardError): "Interface for `RuntimeError`" + + classImplements(RuntimeError, IRuntimeError) # noqa E305 class IArithmeticError(IStandardError): "Interface for `ArithmeticError`" + + classImplements(ArithmeticError, IArithmeticError) # noqa E305 class IAssertionError(IStandardError): "Interface for `AssertionError`" + + classImplements(AssertionError, IAssertionError) # noqa E305 class IAttributeError(IStandardError): "Interface for `AttributeError`" + + classImplements(AttributeError, IAttributeError) # noqa E305 class IDeprecationWarning(IWarning): "Interface for `DeprecationWarning`" + + classImplements(DeprecationWarning, IDeprecationWarning) # noqa E305 class IEOFError(IStandardError): "Interface for `EOFError`" + + classImplements(EOFError, IEOFError) # noqa E305 class IEnvironmentError(IStandardError): "Interface for `EnvironmentError`" + + classImplements(EnvironmentError, IEnvironmentError) # noqa E305 class IFloatingPointError(IArithmeticError): "Interface for `FloatingPointError`" + + classImplements(FloatingPointError, IFloatingPointError) # noqa E305 class IIOError(IEnvironmentError): "Interface for `IOError`" + + classImplements(IOError, IIOError) # noqa E305 class IImportError(IStandardError): "Interface for `ImportError`" + + classImplements(ImportError, IImportError) # noqa E305 class IIndentationError(ISyntaxError): "Interface for `IndentationError`" + + classImplements(IndentationError, IIndentationError) # noqa E305 class IIndexError(ILookupError): "Interface for `IndexError`" + + classImplements(IndexError, IIndexError) # noqa E305 class IKeyError(ILookupError): "Interface for `KeyError`" + + classImplements(KeyError, IKeyError) # noqa E305 class IKeyboardInterrupt(IStandardError): "Interface for `KeyboardInterrupt`" + + classImplements(KeyboardInterrupt, IKeyboardInterrupt) # noqa E305 class IMemoryError(IStandardError): "Interface for `MemoryError`" + + classImplements(MemoryError, IMemoryError) # noqa E305 class INameError(IStandardError): "Interface for `NameError`" + + classImplements(NameError, INameError) # noqa E305 class INotImplementedError(IRuntimeError): "Interface for `NotImplementedError`" + + classImplements(NotImplementedError, INotImplementedError) # noqa E305 class IOSError(IEnvironmentError): "Interface for `OSError`" + + classImplements(OSError, IOSError) # noqa E305 class IOverflowError(IArithmeticError): "Interface for `ArithmeticError`" + + classImplements(OverflowError, IOverflowError) # noqa E305 @@ -151,59 +199,83 @@ class IOverflowWarning(IWarning): class IReferenceError(IStandardError): "Interface for `ReferenceError`" + + classImplements(ReferenceError, IReferenceError) # noqa E305 class IRuntimeWarning(IWarning): "Interface for `RuntimeWarning`" + + classImplements(RuntimeWarning, IRuntimeWarning) # noqa E305 class IStopIteration(IException): "Interface for `StopIteration`" + + classImplements(StopIteration, IStopIteration) # noqa E305 class ISyntaxWarning(IWarning): "Interface for `SyntaxWarning`" + + classImplements(SyntaxWarning, ISyntaxWarning) # noqa E305 class ISystemError(IStandardError): "Interface for `SystemError`" + + classImplements(SystemError, ISystemError) # noqa E305 class ISystemExit(IException): "Interface for `SystemExit`" + + classImplements(SystemExit, ISystemExit) # noqa E305 class ITabError(IIndentationError): "Interface for `TabError`" + + classImplements(TabError, ITabError) # noqa E305 class ITypeError(IStandardError): "Interface for `TypeError`" + + classImplements(TypeError, ITypeError) # noqa E305 class IUnboundLocalError(INameError): "Interface for `UnboundLocalError`" + + classImplements(UnboundLocalError, IUnboundLocalError) # noqa E305 class IUnicodeError(IValueError): "Interface for `UnicodeError`" + + classImplements(UnicodeError, IUnicodeError) # noqa E305 class IUserWarning(IWarning): "Interface for `UserWarning`" + + classImplements(UserWarning, IUserWarning) # noqa E305 class IZeroDivisionError(IArithmeticError): "Interface for `ZeroDivisionError`" + + classImplements(ZeroDivisionError, IZeroDivisionError) # noqa E305 diff --git a/contrib/python/zope.interface/py3/zope/interface/common/tests/basemapping.py b/contrib/python/zope.interface/py3/zope/interface/common/tests/basemapping.py index db4c091ff6..fc4e285057 100644 --- a/contrib/python/zope.interface/py3/zope/interface/common/tests/basemapping.py +++ b/contrib/python/zope.interface/py3/zope/interface/common/tests/basemapping.py @@ -20,7 +20,7 @@ def _testIReadMapping(self, inst, state, absent): for key in state: self.assertEqual(inst[key], state[key]) self.assertEqual(inst.get(key, None), state[key]) - self.assertTrue(key in inst) + self.assertIn(key, inst) for key in absent: self.assertEqual(inst.get(key, None), None) diff --git a/contrib/python/zope.interface/py3/zope/interface/common/tests/test_collections.py b/contrib/python/zope.interface/py3/zope/interface/common/tests/test_collections.py index 6d23f6f960..df7dec99a2 100644 --- a/contrib/python/zope.interface/py3/zope/interface/common/tests/test_collections.py +++ b/contrib/python/zope.interface/py3/zope/interface/common/tests/test_collections.py @@ -12,6 +12,7 @@ import array +import sys import unittest from collections import OrderedDict from collections import abc @@ -100,6 +101,10 @@ class TestVerifyClass(VerifyClassMixin, unittest.TestCase): add_abc_interface_tests(TestVerifyClass, collections.ISet.__module__) +def _get_FrameLocalsProxy(): + return type(sys._getframe().f_locals) + + class TestVerifyObject(VerifyObjectMixin, TestVerifyClass): CONSTRUCTORS = { @@ -127,6 +132,11 @@ class TestVerifyObject(VerifyObjectMixin, 'async_generator': unittest.SkipTest, type(iter(tuple())): lambda: iter(tuple()), } + if sys.version_info >= (3, 13): + def FrameLocalsProxy_constructor(): + return _get_FrameLocalsProxy()(sys._getframe()) + FrameLocalsProxy = _get_FrameLocalsProxy() + CONSTRUCTORS[FrameLocalsProxy] = FrameLocalsProxy_constructor UNVERIFIABLE_RO = { # ``array.array`` fails the ``test_auto_ro_*`` tests with and diff --git a/contrib/python/zope.interface/py3/zope/interface/declarations.py b/contrib/python/zope.interface/py3/zope/interface/declarations.py index a9b983da81..825c578920 100644 --- a/contrib/python/zope.interface/py3/zope/interface/declarations.py +++ b/contrib/python/zope.interface/py3/zope/interface/declarations.py @@ -953,6 +953,7 @@ class ClassProvides(Declaration, ClassProvidesBase): __get__ = ClassProvidesBase.__get__ +# autopep8: off (it breaks the statements in the "if") def directlyProvidedBy(object): # pylint:disable=redefined-builtin """Return the interfaces directly provided by the given object @@ -970,6 +971,7 @@ def directlyProvidedBy(object): # pylint:disable=redefined-builtin # Strip off the class part of the spec: return Declaration(provides.__bases__[:-1]) +# autopep8: on class provider: diff --git a/contrib/python/zope.interface/py3/zope/interface/interface.py b/contrib/python/zope.interface/py3/zope/interface/interface.py index 575b6381e3..e5dddb8811 100644 --- a/contrib/python/zope.interface/py3/zope/interface/interface.py +++ b/contrib/python/zope.interface/py3/zope/interface/interface.py @@ -825,8 +825,8 @@ class InterfaceClass(_InterfaceClassBase): # __firstlineno__: Python 3.13b1+ # https://github.com/python/cpython/pull/118475 '__firstlineno__', - ) - and aval is not _decorator_non_return # noqa W503 + ) and + aval is not _decorator_non_return # noqa W503 } def interfaces(self): diff --git a/contrib/python/zope.interface/py3/zope/interface/interfaces.py b/contrib/python/zope.interface/py3/zope/interface/interfaces.py index 454fee893c..9bafeb5842 100644 --- a/contrib/python/zope.interface/py3/zope/interface/interfaces.py +++ b/contrib/python/zope.interface/py3/zope/interface/interfaces.py @@ -1156,6 +1156,7 @@ class IRegistrationEvent(IObjectEvent): class RegistrationEvent(ObjectEvent): """There has been a change in a registration """ + def __repr__(self): return f"{self.__class__.__name__} event:\n{self.object!r}" diff --git a/contrib/python/zope.interface/py3/zope/interface/tests/test_advice.py b/contrib/python/zope.interface/py3/zope/interface/tests/test_advice.py index 5d5f0218b0..e439b44779 100644 --- a/contrib/python/zope.interface/py3/zope/interface/tests/test_advice.py +++ b/contrib/python/zope.interface/py3/zope/interface/tests/test_advice.py @@ -37,7 +37,7 @@ class FrameInfoTest(unittest.TestCase): f_locals, f_globals) = advisory_testing.moduleLevelFrameInfo self.assertEqual(kind, "module") for d in module.__dict__, f_locals, f_globals: - self.assertTrue(d is advisory_testing.my_globals) + self.assertIs(d, advisory_testing.my_globals) def test_w_class(self): from . import advisory_testing @@ -48,7 +48,7 @@ class FrameInfoTest(unittest.TestCase): self.assertEqual(kind, "class") for d in module.__dict__, f_globals: - self.assertTrue(d is advisory_testing.my_globals) + self.assertIs(d, advisory_testing.my_globals) def test_inside_function_call(self): from zope.interface.advice import getFrameInfo @@ -60,7 +60,7 @@ class FrameInfoTest(unittest.TestCase): self.assertEqual(f_locals, locals()) for d in module.__dict__, f_globals: - self.assertTrue(d is globals()) + self.assertIs(d, globals()) def test_inside_exec(self): from zope.interface.advice import getFrameInfo @@ -68,9 +68,9 @@ class FrameInfoTest(unittest.TestCase): _locals = {} exec(_FUNKY_EXEC, _globals, _locals) self.assertEqual(_locals['kind'], "exec") - self.assertTrue(_locals['f_locals'] is _locals) - self.assertTrue(_locals['module'] is None) - self.assertTrue(_locals['f_globals'] is _globals) + self.assertIs(_locals['f_locals'], _locals) + self.assertIsNone(_locals['module']) + self.assertIs(_locals['f_globals'], _globals) _FUNKY_EXEC = """\ diff --git a/contrib/python/zope.interface/py3/zope/interface/tests/test_declarations.py b/contrib/python/zope.interface/py3/zope/interface/tests/test_declarations.py index 6b76d8eaf8..64fc0e0696 100644 --- a/contrib/python/zope.interface/py3/zope/interface/tests/test_declarations.py +++ b/contrib/python/zope.interface/py3/zope/interface/tests/test_declarations.py @@ -457,15 +457,16 @@ class TestImplements(NameAndModuleComparisonTestsMixin, self.assertEqual(implementedBy(A), implementedBy(A)) self.assertEqual(hash(implementedBy(A)), hash(implementedBy(A))) - self.assertTrue(implementedBy(A) < None) - self.assertTrue( - None > implementedBy(A) - ) # pylint:disable=misplaced-comparison-constant - self.assertTrue(implementedBy(A) < implementedBy(B)) - self.assertTrue(implementedBy(A) > IFoo) - self.assertTrue(implementedBy(A) <= implementedBy(B)) - self.assertTrue(implementedBy(A) >= IFoo) - self.assertTrue(implementedBy(A) != IFoo) + self.assertLess(implementedBy(A), None) + self.assertGreater( + None, + implementedBy(A) + ) + self.assertLess(implementedBy(A), implementedBy(B)) + self.assertGreater(implementedBy(A), IFoo) + self.assertLessEqual(implementedBy(A), implementedBy(B)) + self.assertGreaterEqual(implementedBy(A), IFoo) + self.assertNotEqual(implementedBy(A), IFoo) def test_proxy_equality(self): # https://github.com/zopefoundation/zope.interface/issues/55 @@ -496,19 +497,20 @@ class TestImplements(NameAndModuleComparisonTestsMixin, # The order of arguments to the operators matters, # test both - self.assertTrue( - implementedByA == implementedByA - ) # pylint:disable=comparison-with-itself - self.assertTrue(implementedByA != implementedByB) - self.assertTrue(implementedByB != implementedByA) + self.assertEqual( + implementedByA, + implementedByA + ) + self.assertNotEqual(implementedByA, implementedByB) + self.assertNotEqual(implementedByB, implementedByA) - self.assertTrue(proxy == implementedByA) - self.assertTrue(implementedByA == proxy) - self.assertFalse(proxy != implementedByA) - self.assertFalse(implementedByA != proxy) + self.assertEqual(proxy, implementedByA) + self.assertEqual(implementedByA, proxy) + self.assertEqual(proxy, implementedByA) + self.assertEqual(implementedByA, proxy) - self.assertTrue(proxy != implementedByB) - self.assertTrue(implementedByB != proxy) + self.assertNotEqual(proxy, implementedByB) + self.assertNotEqual(implementedByB, proxy) def test_changed_deletes_super_cache(self): impl = self._makeOne() @@ -581,7 +583,7 @@ class Test_implementedByFallback(unittest.TestCase): with _MonkeyDict(declarations, 'BuiltinImplementationSpecifications') as specs: specs[foo] = reg - self.assertTrue(self._callFUT(foo) is reg) + self.assertIs(self._callFUT(foo), reg) def test_dictless_w_existing_Implements(self): from zope.interface.declarations import Implements @@ -592,7 +594,7 @@ class Test_implementedByFallback(unittest.TestCase): foo = Foo() foo.__implemented__ = impl - self.assertTrue(self._callFUT(foo) is impl) + self.assertIs(self._callFUT(foo), impl) def test_dictless_w_existing_not_Implements(self): from zope.interface.interface import InterfaceClass @@ -612,7 +614,7 @@ class Test_implementedByFallback(unittest.TestCase): class Foo: __implemented__ = impl - self.assertTrue(self._callFUT(Foo) is impl) + self.assertIs(self._callFUT(Foo), impl) def test_builtins_added_to_cache(self): from zope.interface import declarations @@ -637,9 +639,9 @@ class Test_implementedByFallback(unittest.TestCase): specs[tuple] = t_spec specs[list] = l_spec specs[dict] = d_spec - self.assertTrue(self._callFUT(tuple) is t_spec) - self.assertTrue(self._callFUT(list) is l_spec) - self.assertTrue(self._callFUT(dict) is d_spec) + self.assertIs(self._callFUT(tuple), t_spec) + self.assertIs(self._callFUT(list), l_spec) + self.assertIs(self._callFUT(dict), d_spec) def test_oldstyle_class_no_assertions(self): # TODO: Figure out P3 story @@ -714,7 +716,7 @@ class Test_implementedByFallback(unittest.TestCase): class Foo: __implemented__ = impl - self.assertTrue(self._callFUT(Foo) is impl) + self.assertIs(self._callFUT(Foo), impl) def test_super_when_base_implements_interface(self): from zope.interface import Interface @@ -963,7 +965,7 @@ class Test_classImplementsOnly(_ImplementsTestMixin, unittest.TestCase): impl.inherit = Foo self._callFUT(Foo, IBar) # Same spec, now different values - self.assertTrue(Foo.__implemented__ is impl) + self.assertIs(Foo.__implemented__, impl) self.assertEqual(impl.inherit, None) self.assertEqual(impl.declared, (IBar,)) @@ -1172,7 +1174,7 @@ class Test_implementer(Test_classImplements): foo = Foo() decorator = self._makeOne(IFoo) returned = decorator(foo) - self.assertTrue(returned is foo) + self.assertIs(returned, foo) spec = foo.__implemented__ # pylint:disable=no-member self.assertEqual( spec.__name__, '__tests__.tests.test_declarations.?' @@ -1564,7 +1566,7 @@ class Test_Provides(unittest.TestCase): with _Monkey(declarations, InstanceDeclarations=cache): spec = self._callFUT(Foo, IFoo) self.assertEqual(list(spec), [IFoo]) - self.assertTrue(cache[(Foo, IFoo)] is spec) + self.assertIs(cache[(Foo, IFoo)], spec) def test_w_cached_spec(self): from zope.interface import declarations @@ -1578,7 +1580,7 @@ class Test_Provides(unittest.TestCase): cache = {(Foo, IFoo): prior} with _Monkey(declarations, InstanceDeclarations=cache): spec = self._callFUT(Foo, IFoo) - self.assertTrue(spec is prior) + self.assertIs(spec, prior) class Test_directlyProvides(unittest.TestCase): @@ -1775,7 +1777,7 @@ class ClassProvidesBaseFallbackTests(unittest.TestCase): pass cpbp = Foo.__provides__ = self._makeOne(Foo, IFoo) - self.assertTrue(Foo.__provides__ is cpbp) + self.assertIs(Foo.__provides__, cpbp) def test_w_same_class_via_instance(self): from zope.interface.interface import InterfaceClass @@ -1841,7 +1843,7 @@ class ClassProvidesTests(unittest.TestCase): pass cp = Foo.__provides__ = self._makeOne(Foo, type(Foo), IBar) - self.assertTrue(Foo.__provides__ is cp) + self.assertIs(Foo.__provides__, cp) self.assertEqual(list(Foo().__provides__), [IFoo]) def test___reduce__(self): @@ -2323,7 +2325,7 @@ class Test_providedByFallback(unittest.TestCase): foo.__providedBy__ = object() expected = foo.__provides__ = object() spec = self._callFUT(foo) - self.assertTrue(spec is expected) + self.assertIs(spec, expected) def test_w_providedBy_invalid_spec_w_provides_diff_provides_on_class(self): @@ -2335,7 +2337,7 @@ class Test_providedByFallback(unittest.TestCase): expected = foo.__provides__ = object() Foo.__provides__ = object() spec = self._callFUT(foo) - self.assertTrue(spec is expected) + self.assertIs(spec, expected) def test_w_providedBy_invalid_spec_w_provides_same_provides_on_class(self): from zope.interface.declarations import implementer diff --git a/contrib/python/zope.interface/py3/zope/interface/tests/test_interface.py b/contrib/python/zope.interface/py3/zope/interface/tests/test_interface.py index a07ae9f7ab..b6f59c8331 100644 --- a/contrib/python/zope.interface/py3/zope/interface/tests/test_interface.py +++ b/contrib/python/zope.interface/py3/zope/interface/tests/test_interface.py @@ -505,8 +505,8 @@ class SpecificationTests(unittest.TestCase): spec = self._makeOne() self.assertEqual(spec.__bases__, ()) self.assertEqual(len(spec._implied), 2) - self.assertTrue(spec in spec._implied) - self.assertTrue(Interface in spec._implied) + self.assertIn(spec, spec._implied) + self.assertIn(Interface, spec._implied) self.assertEqual(len(spec.dependents), 0) def test_subscribe_first_time(self): @@ -536,7 +536,7 @@ class SpecificationTests(unittest.TestCase): spec.unsubscribe(dep) self.assertEqual(spec.dependents[dep], 1) spec.unsubscribe(dep) - self.assertFalse(dep in spec.dependents) + self.assertNotIn(dep, spec.dependents) def test___setBases_subscribes_bases_and_notifies_dependents(self): from zope.interface.interface import Interface @@ -568,7 +568,7 @@ class SpecificationTests(unittest.TestCase): spec._implied[IFoo] = () spec.changed(spec) self.assertIsNone(spec._v_attrs) - self.assertFalse(IFoo in spec._implied) + self.assertNotIn(IFoo, spec._implied) def test_interfaces_skips_already_seen(self): from zope.interface.interface import Interface @@ -600,7 +600,7 @@ class SpecificationTests(unittest.TestCase): spec = self._makeOne() foo = object() spec._v_attrs = {'foo': foo} - self.assertTrue(spec.get('foo') is foo) + self.assertIs(spec.get('foo'), foo) def test_get_hit_from_base_wo__v_attrs(self): from zope.interface.interface import Attribute @@ -613,8 +613,8 @@ class SpecificationTests(unittest.TestCase): bar = Attribute('bar') spec = self._makeOne([IFoo, IBar]) - self.assertTrue(spec.get('foo') is IFoo.get('foo')) - self.assertTrue(spec.get('bar') is IBar.get('bar')) + self.assertIs(spec.get('foo'), IFoo.get('foo')) + self.assertIs(spec.get('bar'), IBar.get('bar')) def test_multiple_inheritance_no_interfaces(self): # If we extend an object that implements interfaces, @@ -998,7 +998,7 @@ class InterfaceClassTests(unittest.TestCase): def test___contains___miss(self): one = self._makeOne() - self.assertFalse('nonesuch' in one) + self.assertNotIn('nonesuch', one) def test___contains___hit(self): from zope.interface.interface import Attribute @@ -1012,8 +1012,8 @@ class InterfaceClassTests(unittest.TestCase): 'bar': fromFunction(_bar), } one = self._makeOne(attrs=ATTRS) - self.assertTrue('foo' in one) - self.assertTrue('bar' in one) + self.assertIn('foo', one) + self.assertIn('bar', one) def test_direct_miss(self): one = self._makeOne() @@ -1102,7 +1102,7 @@ class InterfaceClassTests(unittest.TestCase): self.assertRaises(Invalid, iface.validateInvariants, obj, _errors) self.assertEqual(_fail_called_with, [((obj,), {})]) self.assertEqual(len(_errors), 1) - self.assertTrue(isinstance(_errors[0], Invalid)) + self.assertIsInstance(_errors[0], Invalid) def test_validateInvariants_fail_in_base_wo_errors_passed(self): from zope.interface.exceptions import Invalid @@ -1151,7 +1151,7 @@ class InterfaceClassTests(unittest.TestCase): self.assertEqual(_passable_called_with, [((obj,), {})]) self.assertEqual(_fail_called_with, [((obj,), {})]) self.assertEqual(len(_errors), 1) - self.assertTrue(isinstance(_errors[0], Invalid)) + self.assertIsInstance(_errors[0], Invalid) def test_validateInvariants_inherited_not_called_multiple_times(self): _passable_called_with = [] @@ -1191,29 +1191,29 @@ class InterfaceClassTests(unittest.TestCase): def test_comparison_with_None(self): # pylint:disable=singleton-comparison,misplaced-comparison-constant iface = self._makeOne() - self.assertTrue(iface < None) # noqa E711 - self.assertTrue(iface <= None) # noqa E711 - self.assertFalse(iface == None) # noqa E711 - self.assertTrue(iface != None) # noqa E711 + self.assertLess(iface, None) # noqa E711 + self.assertLessEqual(iface, None) # noqa E711 + self.assertNotEqual(iface, None) # noqa E711 + self.assertNotEqual(iface, None) # noqa E711 self.assertFalse(iface >= None) # noqa E711 self.assertFalse(iface > None) # noqa E711 self.assertFalse(None < iface) # noqa E711 self.assertFalse(None <= iface) # noqa E711 - self.assertFalse(None == iface) # noqa E711 - self.assertTrue(None != iface) # noqa E711 - self.assertTrue(None >= iface) # noqa E711 - self.assertTrue(None > iface) # noqa E711 + self.assertNotEqual(None, iface) # noqa E711 + self.assertNotEqual(None, iface) # noqa E711 + self.assertGreaterEqual(None, iface) # noqa E711 + self.assertGreater(None, iface) # noqa E711 def test_comparison_with_same_instance(self): # pylint:disable=comparison-with-itself iface = self._makeOne() self.assertFalse(iface < iface) - self.assertTrue(iface <= iface) - self.assertTrue(iface == iface) - self.assertFalse(iface != iface) - self.assertTrue(iface >= iface) + self.assertLessEqual(iface, iface) + self.assertEqual(iface, iface) + self.assertEqual(iface, iface) + self.assertGreaterEqual(iface, iface) self.assertFalse(iface > iface) def test_comparison_with_same_named_instance_in_other_module(self): @@ -1221,18 +1221,18 @@ class InterfaceClassTests(unittest.TestCase): one = self._makeOne('IName', __module__='__tests__.tests.one') other = self._makeOne('IName', __module__='__tests__.tests.other') - self.assertTrue(one < other) + self.assertLess(one, other) self.assertFalse(other < one) - self.assertTrue(one <= other) + self.assertLessEqual(one, other) self.assertFalse(other <= one) - self.assertFalse(one == other) - self.assertFalse(other == one) - self.assertTrue(one != other) - self.assertTrue(other != one) + self.assertNotEqual(one, other) + self.assertNotEqual(other, one) + self.assertNotEqual(one, other) + self.assertNotEqual(other, one) self.assertFalse(one >= other) - self.assertTrue(other >= one) + self.assertGreaterEqual(other, one) self.assertFalse(one > other) - self.assertTrue(other > one) + self.assertGreater(other, one) def test_assignment_to__class__(self): # https://github.com/zopefoundation/zope.interface/issues/6 @@ -1299,7 +1299,7 @@ class InterfaceTests(unittest.TestCase): class I1(Interface): attr = Attribute("My attr") - self.assertTrue(I1['attr'].interface is I1) + self.assertIs(I1['attr'].interface, I1) def test_methods_link_to_interface(self): from zope.interface import Interface @@ -1308,7 +1308,7 @@ class InterfaceTests(unittest.TestCase): def method(foo, bar, bingo): "A method" - self.assertTrue(I1['method'].interface is I1) + self.assertIs(I1['method'].interface, I1) def test_classImplements_simple(self): from zope.interface import Interface @@ -1339,10 +1339,10 @@ class InterfaceTests(unittest.TestCase): self.assertTrue(ICurrent.implementedBy(Current)) self.assertFalse(IOther.implementedBy(Current)) self.assertEqual(ICurrent, ICurrent) - self.assertTrue(ICurrent in implementedBy(Current)) - self.assertFalse(IOther in implementedBy(Current)) - self.assertTrue(ICurrent in providedBy(current)) - self.assertFalse(IOther in providedBy(current)) + self.assertIn(ICurrent, implementedBy(Current)) + self.assertNotIn(IOther, implementedBy(Current)) + self.assertIn(ICurrent, providedBy(current)) + self.assertNotIn(IOther, providedBy(current)) def test_classImplements_base_not_derived(self): from zope.interface import Interface @@ -1366,10 +1366,10 @@ class InterfaceTests(unittest.TestCase): self.assertTrue(IBase.implementedBy(Current)) self.assertFalse(IDerived.implementedBy(Current)) - self.assertTrue(IBase in implementedBy(Current)) - self.assertFalse(IDerived in implementedBy(Current)) - self.assertTrue(IBase in providedBy(current)) - self.assertFalse(IDerived in providedBy(current)) + self.assertIn(IBase, implementedBy(Current)) + self.assertNotIn(IDerived, implementedBy(Current)) + self.assertIn(IBase, providedBy(current)) + self.assertNotIn(IDerived, providedBy(current)) def test_classImplements_base_and_derived(self): from zope.interface import Interface @@ -1393,12 +1393,12 @@ class InterfaceTests(unittest.TestCase): self.assertTrue(IBase.implementedBy(Current)) self.assertTrue(IDerived.implementedBy(Current)) - self.assertFalse(IBase in implementedBy(Current)) - self.assertTrue(IBase in implementedBy(Current).flattened()) - self.assertTrue(IDerived in implementedBy(Current)) - self.assertFalse(IBase in providedBy(current)) - self.assertTrue(IBase in providedBy(current).flattened()) - self.assertTrue(IDerived in providedBy(current)) + self.assertNotIn(IBase, implementedBy(Current)) + self.assertIn(IBase, implementedBy(Current).flattened()) + self.assertIn(IDerived, implementedBy(Current)) + self.assertNotIn(IBase, providedBy(current)) + self.assertIn(IBase, providedBy(current).flattened()) + self.assertIn(IDerived, providedBy(current)) def test_classImplements_multiple(self): from zope.interface import Interface @@ -1428,10 +1428,10 @@ class InterfaceTests(unittest.TestCase): self.assertTrue(ILeft.implementedBy(Ambi)) self.assertTrue(IRight.implementedBy(Ambi)) - self.assertTrue(ILeft in implementedBy(Ambi)) - self.assertTrue(IRight in implementedBy(Ambi)) - self.assertTrue(ILeft in providedBy(ambi)) - self.assertTrue(IRight in providedBy(ambi)) + self.assertIn(ILeft, implementedBy(Ambi)) + self.assertIn(IRight, implementedBy(Ambi)) + self.assertIn(ILeft, providedBy(ambi)) + self.assertIn(IRight, providedBy(ambi)) def test_classImplements_multiple_w_explict_implements(self): from zope.interface import Interface @@ -1469,12 +1469,12 @@ class InterfaceTests(unittest.TestCase): self.assertTrue(ILeft.implementedBy(Mixed)) self.assertFalse(IRight.implementedBy(Mixed)) self.assertTrue(IOther.implementedBy(Mixed)) - self.assertTrue(ILeft in implementedBy(Mixed)) - self.assertFalse(IRight in implementedBy(Mixed)) - self.assertTrue(IOther in implementedBy(Mixed)) - self.assertTrue(ILeft in providedBy(mixed)) - self.assertFalse(IRight in providedBy(mixed)) - self.assertTrue(IOther in providedBy(mixed)) + self.assertIn(ILeft, implementedBy(Mixed)) + self.assertNotIn(IRight, implementedBy(Mixed)) + self.assertIn(IOther, implementedBy(Mixed)) + self.assertIn(ILeft, providedBy(mixed)) + self.assertNotIn(IRight, providedBy(mixed)) + self.assertIn(IOther, providedBy(mixed)) def testInterfaceExtendsInterface(self): from zope.interface import Interface @@ -1594,11 +1594,11 @@ class InterfaceTests(unittest.TestCase): self.assertEqual(len(name_values), 2) self.assertEqual(name_values[0][0], 'attr') - self.assertTrue(isinstance(name_values[0][1], Attribute)) + self.assertIsInstance(name_values[0][1], Attribute) self.assertEqual(name_values[0][1].__name__, 'attr') self.assertEqual(name_values[0][1].__doc__, 'My attr') self.assertEqual(name_values[1][0], 'method') - self.assertTrue(isinstance(name_values[1][1], Method)) + self.assertIsInstance(name_values[1][1], Method) self.assertEqual(name_values[1][1].__name__, 'method') self.assertEqual(name_values[1][1].__doc__, 'My method') @@ -1626,15 +1626,15 @@ class InterfaceTests(unittest.TestCase): self.assertEqual(len(name_values), 3) self.assertEqual(name_values[0][0], 'attr2') - self.assertTrue(isinstance(name_values[0][1], Attribute)) + self.assertIsInstance(name_values[0][1], Attribute) self.assertEqual(name_values[0][1].__name__, 'attr2') self.assertEqual(name_values[0][1].__doc__, 'My attr2') self.assertEqual(name_values[1][0], 'method') - self.assertTrue(isinstance(name_values[1][1], Method)) + self.assertIsInstance(name_values[1][1], Method) self.assertEqual(name_values[1][1].__name__, 'method') self.assertEqual(name_values[1][1].__doc__, 'My method, overridden') self.assertEqual(name_values[2][0], 'method2') - self.assertTrue(isinstance(name_values[2][1], Method)) + self.assertIsInstance(name_values[2][1], Method) self.assertEqual(name_values[2][1].__name__, 'method2') self.assertEqual(name_values[2][1].__doc__, 'My method2') @@ -1642,19 +1642,19 @@ class InterfaceTests(unittest.TestCase): self.assertEqual(len(name_values), 4) self.assertEqual(name_values[0][0], 'attr') - self.assertTrue(isinstance(name_values[0][1], Attribute)) + self.assertIsInstance(name_values[0][1], Attribute) self.assertEqual(name_values[0][1].__name__, 'attr') self.assertEqual(name_values[0][1].__doc__, 'My attr') self.assertEqual(name_values[1][0], 'attr2') - self.assertTrue(isinstance(name_values[1][1], Attribute)) + self.assertIsInstance(name_values[1][1], Attribute) self.assertEqual(name_values[1][1].__name__, 'attr2') self.assertEqual(name_values[1][1].__doc__, 'My attr2') self.assertEqual(name_values[2][0], 'method') - self.assertTrue(isinstance(name_values[2][1], Method)) + self.assertIsInstance(name_values[2][1], Method) self.assertEqual(name_values[2][1].__name__, 'method') self.assertEqual(name_values[2][1].__doc__, 'My method, overridden') self.assertEqual(name_values[3][0], 'method2') - self.assertTrue(isinstance(name_values[3][1], Method)) + self.assertIsInstance(name_values[3][1], Method) self.assertEqual(name_values[3][1].__name__, 'method2') self.assertEqual(name_values[3][1].__doc__, 'My method2') @@ -1678,12 +1678,12 @@ class InterfaceTests(unittest.TestCase): "My method" a_desc = ISimple.getDescriptionFor('attr') - self.assertTrue(isinstance(a_desc, Attribute)) + self.assertIsInstance(a_desc, Attribute) self.assertEqual(a_desc.__name__, 'attr') self.assertEqual(a_desc.__doc__, 'My attr') m_desc = ISimple.getDescriptionFor('method') - self.assertTrue(isinstance(m_desc, Method)) + self.assertIsInstance(m_desc, Method) self.assertEqual(m_desc.__name__, 'method') self.assertEqual(m_desc.__doc__, 'My method') @@ -1708,22 +1708,22 @@ class InterfaceTests(unittest.TestCase): "My method2" a_desc = IDerived.getDescriptionFor('attr') - self.assertTrue(isinstance(a_desc, Attribute)) + self.assertIsInstance(a_desc, Attribute) self.assertEqual(a_desc.__name__, 'attr') self.assertEqual(a_desc.__doc__, 'My attr') m_desc = IDerived.getDescriptionFor('method') - self.assertTrue(isinstance(m_desc, Method)) + self.assertIsInstance(m_desc, Method) self.assertEqual(m_desc.__name__, 'method') self.assertEqual(m_desc.__doc__, 'My method, overridden') a2_desc = IDerived.getDescriptionFor('attr2') - self.assertTrue(isinstance(a2_desc, Attribute)) + self.assertIsInstance(a2_desc, Attribute) self.assertEqual(a2_desc.__name__, 'attr2') self.assertEqual(a2_desc.__doc__, 'My attr2') m2_desc = IDerived.getDescriptionFor('method2') - self.assertTrue(isinstance(m2_desc, Method)) + self.assertIsInstance(m2_desc, Method) self.assertEqual(m2_desc.__name__, 'method2') self.assertEqual(m2_desc.__doc__, 'My method2') @@ -1747,12 +1747,12 @@ class InterfaceTests(unittest.TestCase): "My method" a_desc = ISimple['attr'] - self.assertTrue(isinstance(a_desc, Attribute)) + self.assertIsInstance(a_desc, Attribute) self.assertEqual(a_desc.__name__, 'attr') self.assertEqual(a_desc.__doc__, 'My attr') m_desc = ISimple['method'] - self.assertTrue(isinstance(m_desc, Method)) + self.assertIsInstance(m_desc, Method) self.assertEqual(m_desc.__name__, 'method') self.assertEqual(m_desc.__doc__, 'My method') @@ -1777,22 +1777,22 @@ class InterfaceTests(unittest.TestCase): "My method2" a_desc = IDerived['attr'] - self.assertTrue(isinstance(a_desc, Attribute)) + self.assertIsInstance(a_desc, Attribute) self.assertEqual(a_desc.__name__, 'attr') self.assertEqual(a_desc.__doc__, 'My attr') m_desc = IDerived['method'] - self.assertTrue(isinstance(m_desc, Method)) + self.assertIsInstance(m_desc, Method) self.assertEqual(m_desc.__name__, 'method') self.assertEqual(m_desc.__doc__, 'My method, overridden') a2_desc = IDerived['attr2'] - self.assertTrue(isinstance(a2_desc, Attribute)) + self.assertIsInstance(a2_desc, Attribute) self.assertEqual(a2_desc.__name__, 'attr2') self.assertEqual(a2_desc.__doc__, 'My attr2') m2_desc = IDerived['method2'] - self.assertTrue(isinstance(m2_desc, Method)) + self.assertIsInstance(m2_desc, Method) self.assertEqual(m2_desc.__name__, 'method2') self.assertEqual(m2_desc.__doc__, 'My method2') @@ -1802,7 +1802,7 @@ class InterfaceTests(unittest.TestCase): class IEmpty(Interface): pass - self.assertFalse('nonesuch' in IEmpty) + self.assertNotIn('nonesuch', IEmpty) def test___contains__simple(self): from zope.interface import Attribute @@ -1814,8 +1814,8 @@ class InterfaceTests(unittest.TestCase): def method(): "My method" - self.assertTrue('attr' in ISimple) - self.assertTrue('method' in ISimple) + self.assertIn('attr', ISimple) + self.assertIn('method', ISimple) def test___contains__derived(self): from zope.interface import Attribute @@ -1836,10 +1836,10 @@ class InterfaceTests(unittest.TestCase): def method2(): "My method2" - self.assertTrue('attr' in IDerived) - self.assertTrue('method' in IDerived) - self.assertTrue('attr2' in IDerived) - self.assertTrue('method2' in IDerived) + self.assertIn('attr', IDerived) + self.assertIn('method', IDerived) + self.assertIn('attr2', IDerived) + self.assertIn('method2', IDerived) def test___iter__empty(self): from zope.interface import Interface @@ -2223,10 +2223,10 @@ class InterfaceTests(unittest.TestCase): class I3(I2): pass - self.assertTrue(I3.get('a') is I1.get('a')) + self.assertIs(I3.get('a'), I1.get('a')) I2.__bases__ = (Interface,) - self.assertTrue(I3.get('a') is None) + self.assertIsNone(I3.get('a')) def test___call___defers_to___conform___(self): from zope.interface import Interface @@ -2254,7 +2254,7 @@ class InterfaceTests(unittest.TestCase): pass c = C() - self.assertTrue(IFoo(c) is c) + self.assertIs(IFoo(c), c) def test___call___miss_wo_alternate(self): from zope.interface import Interface @@ -2278,7 +2278,7 @@ class InterfaceTests(unittest.TestCase): pass c = C() - self.assertTrue(IFoo(c, self) is self) + self.assertIs(IFoo(c, self), self) def test___call___w_adapter_hook(self): from zope.interface import Interface @@ -2301,7 +2301,7 @@ class InterfaceTests(unittest.TestCase): old_adapter_hooks = adapter_hooks[:] adapter_hooks[:] = [_miss, _hit] try: - self.assertTrue(IFoo(c) is self) + self.assertIs(IFoo(c), self) finally: adapter_hooks[:] = old_adapter_hooks diff --git a/contrib/python/zope.interface/py3/zope/interface/tests/test_interfaces.py b/contrib/python/zope.interface/py3/zope/interface/tests/test_interfaces.py index 6c41d49412..a1006493af 100644 --- a/contrib/python/zope.interface/py3/zope/interface/tests/test_interfaces.py +++ b/contrib/python/zope.interface/py3/zope/interface/tests/test_interfaces.py @@ -41,7 +41,7 @@ class ObjectEventTests(unittest.TestCase, _ConformsToIObjectEvent): def test_ctor(self): target = object() event = self._makeOne(target) - self.assertTrue(event.object is target) + self.assertIs(event.object, target) class RegistrationEventTests(unittest.TestCase, diff --git a/contrib/python/zope.interface/py3/zope/interface/tests/test_odd_declarations.py b/contrib/python/zope.interface/py3/zope/interface/tests/test_odd_declarations.py index 75000ddb05..b0f01e9084 100644 --- a/contrib/python/zope.interface/py3/zope/interface/tests/test_odd_declarations.py +++ b/contrib/python/zope.interface/py3/zope/interface/tests/test_odd_declarations.py @@ -94,8 +94,8 @@ class Test(unittest.TestCase): self.assertEqual([i.getName() for i in providedBy(c).flattened()], ['I4', 'I31', 'I3', 'I1', 'I2', 'Interface'] ) - self.assertTrue(I1 in providedBy(c)) - self.assertFalse(I3 in providedBy(c)) + self.assertIn(I1, providedBy(c)) + self.assertNotIn(I3, providedBy(c)) self.assertTrue(providedBy(c).extends(I3)) self.assertTrue(providedBy(c).extends(I31)) self.assertFalse(providedBy(c).extends(I5)) @@ -116,8 +116,8 @@ class Test(unittest.TestCase): ['I4', 'I5', 'I31']) self.assertEqual([i.getName() for i in providedBy(c).flattened()], ['I4', 'I5', 'I31', 'I3', 'Interface']) - self.assertFalse(I1 in providedBy(c)) - self.assertFalse(I3 in providedBy(c)) + self.assertNotIn(I1, providedBy(c)) + self.assertNotIn(I3, providedBy(c)) self.assertTrue(providedBy(c).extends(I3)) self.assertFalse(providedBy(c).extends(I1)) self.assertTrue(providedBy(c).extends(I31)) @@ -138,8 +138,8 @@ class Test(unittest.TestCase): ['I4', 'I5', 'I31']) self.assertEqual([i.getName() for i in providedBy(c).flattened()], ['I4', 'I5', 'I31', 'I3', 'Interface']) - self.assertFalse(I1 in providedBy(c)) - self.assertFalse(I3 in providedBy(c)) + self.assertNotIn(I1, providedBy(c)) + self.assertNotIn(I3, providedBy(c)) self.assertTrue(providedBy(c).extends(I3)) self.assertFalse(providedBy(c).extends(I1)) self.assertTrue(providedBy(c).extends(I31)) @@ -211,19 +211,19 @@ class Test(unittest.TestCase): ob = C() directlyProvides(ob, I1, I2) - self.assertTrue(I1 in providedBy(ob)) - self.assertTrue(I2 in providedBy(ob)) - self.assertTrue(IA1 in providedBy(ob)) - self.assertTrue(IA2 in providedBy(ob)) - self.assertTrue(IB in providedBy(ob)) - self.assertTrue(IC in providedBy(ob)) + self.assertIn(I1, providedBy(ob)) + self.assertIn(I2, providedBy(ob)) + self.assertIn(IA1, providedBy(ob)) + self.assertIn(IA2, providedBy(ob)) + self.assertIn(IB, providedBy(ob)) + self.assertIn(IC, providedBy(ob)) directlyProvides(ob, directlyProvidedBy(ob) - I2) - self.assertTrue(I1 in providedBy(ob)) - self.assertFalse(I2 in providedBy(ob)) - self.assertFalse(I2 in providedBy(ob)) + self.assertIn(I1, providedBy(ob)) + self.assertNotIn(I2, providedBy(ob)) + self.assertNotIn(I2, providedBy(ob)) directlyProvides(ob, directlyProvidedBy(ob), I2) - self.assertTrue(I2 in providedBy(ob)) + self.assertIn(I2, providedBy(ob)) # see above # def TODO_test_classProvides_fails_for_odd_class(self): diff --git a/contrib/python/zope.interface/py3/zope/interface/tests/test_registry.py b/contrib/python/zope.interface/py3/zope/interface/tests/test_registry.py index fbe1ed2b54..0da200ebed 100644 --- a/contrib/python/zope.interface/py3/zope/interface/tests/test_registry.py +++ b/contrib/python/zope.interface/py3/zope/interface/tests/test_registry.py @@ -43,8 +43,8 @@ class ComponentsTests(unittest.TestCase): comp = self._makeOne('testing') self.assertEqual(comp.__name__, 'testing') self.assertEqual(comp.__bases__, ()) - self.assertTrue(isinstance(comp.adapters, AdapterRegistry)) - self.assertTrue(isinstance(comp.utilities, AdapterRegistry)) + self.assertIsInstance(comp.adapters, AdapterRegistry) + self.assertIsInstance(comp.utilities, AdapterRegistry) self.assertEqual(comp.adapters.__bases__, ()) self.assertEqual(comp.utilities.__bases__, ()) self.assertEqual(comp._utility_registrations, {}) @@ -123,7 +123,7 @@ class ComponentsTests(unittest.TestCase): _monkey, _events = self._wrapEvents() with _monkey: comp.registerUtility(_to_reg, ifoo, _name, _info) - self.assertTrue(comp.utilities._adapters[0][ifoo][_name] is _to_reg) + self.assertIs(comp.utilities._adapters[0][ifoo][_name], _to_reg) self.assertEqual(comp._utility_registrations[ifoo, _name], (_to_reg, _info, None)) self.assertEqual(comp.utilities._subscribers[0][ifoo][''], (_to_reg,)) @@ -131,14 +131,14 @@ class ComponentsTests(unittest.TestCase): args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Registered)) - self.assertTrue(isinstance(event.object, UtilityRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) - self.assertTrue(event.object.name is _name) - self.assertTrue(event.object.component is _to_reg) - self.assertTrue(event.object.info is _info) - self.assertTrue(event.object.factory is None) + self.assertIsInstance(event, Registered) + self.assertIsInstance(event.object, UtilityRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) + self.assertIs(event.object.name, _name) + self.assertIs(event.object.component, _to_reg) + self.assertIs(event.object.info, _info) + self.assertIsNone(event.object.factory) def test_registerUtility_w_factory(self): from zope.interface.declarations import InterfaceClass @@ -164,14 +164,14 @@ class ComponentsTests(unittest.TestCase): args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Registered)) - self.assertTrue(isinstance(event.object, UtilityRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) - self.assertTrue(event.object.name is _name) - self.assertTrue(event.object.component is _to_reg) - self.assertTrue(event.object.info is _info) - self.assertTrue(event.object.factory is _factory) + self.assertIsInstance(event, Registered) + self.assertIsInstance(event.object, UtilityRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) + self.assertIs(event.object.name, _name) + self.assertIs(event.object.component, _to_reg) + self.assertIs(event.object.info, _info) + self.assertIs(event.object.factory, _factory) def test_registerUtility_no_provided_available(self): @@ -210,14 +210,14 @@ class ComponentsTests(unittest.TestCase): args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Registered)) - self.assertTrue(isinstance(event.object, UtilityRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) - self.assertTrue(event.object.name is _name) - self.assertTrue(event.object.component is _to_reg) - self.assertTrue(event.object.info is _info) - self.assertTrue(event.object.factory is None) + self.assertIsInstance(event, Registered) + self.assertIsInstance(event.object, UtilityRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) + self.assertIs(event.object.name, _name) + self.assertIs(event.object.component, _to_reg) + self.assertIs(event.object.info, _info) + self.assertIsNone(event.object.factory) def test_registerUtility_duplicates_existing_reg(self): from zope.interface.declarations import InterfaceClass @@ -305,25 +305,25 @@ class ComponentsTests(unittest.TestCase): args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Unregistered)) - self.assertTrue(isinstance(event.object, UtilityRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) - self.assertTrue(event.object.name is _name) - self.assertTrue(event.object.component is _before) - self.assertTrue(event.object.info is _info) - self.assertTrue(event.object.factory is None) + self.assertIsInstance(event, Unregistered) + self.assertIsInstance(event.object, UtilityRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) + self.assertIs(event.object.name, _name) + self.assertIs(event.object.component, _before) + self.assertIs(event.object.info, _info) + self.assertIsNone(event.object.factory) args, kw = _events[1] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Registered)) - self.assertTrue(isinstance(event.object, UtilityRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) - self.assertTrue(event.object.name is _name) - self.assertTrue(event.object.component is _after) - self.assertTrue(event.object.info is _info) - self.assertTrue(event.object.factory is None) + self.assertIsInstance(event, Registered) + self.assertIsInstance(event.object, UtilityRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) + self.assertIs(event.object.name, _name) + self.assertIs(event.object.component, _after) + self.assertIs(event.object.info, _info) + self.assertIsNone(event.object.factory) def test_registerUtility_w_existing_subscr(self): from zope.interface.declarations import InterfaceClass @@ -463,19 +463,19 @@ class ComponentsTests(unittest.TestCase): unreg = comp.unregisterUtility(_to_reg, ifoo, _name) self.assertTrue(unreg) self.assertFalse(comp.utilities._adapters) # all erased - self.assertFalse((ifoo, _name) in comp._utility_registrations) + self.assertNotIn((ifoo, _name), comp._utility_registrations) self.assertFalse(comp.utilities._subscribers) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Unregistered)) - self.assertTrue(isinstance(event.object, UtilityRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) - self.assertTrue(event.object.name is _name) - self.assertTrue(event.object.component is _to_reg) - self.assertTrue(event.object.factory is None) + self.assertIsInstance(event, Unregistered) + self.assertIsInstance(event.object, UtilityRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) + self.assertIs(event.object.name, _name) + self.assertIs(event.object.component, _to_reg) + self.assertIsNone(event.object.factory) def test_unregisterUtility_w_factory(self): from zope.interface.declarations import InterfaceClass @@ -503,13 +503,13 @@ class ComponentsTests(unittest.TestCase): args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Unregistered)) - self.assertTrue(isinstance(event.object, UtilityRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) - self.assertTrue(event.object.name is _name) - self.assertTrue(event.object.component is _to_reg) - self.assertTrue(event.object.factory is _factory) + self.assertIsInstance(event, Unregistered) + self.assertIsInstance(event.object, UtilityRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) + self.assertIs(event.object.name, _name) + self.assertIs(event.object.component, _to_reg) + self.assertIs(event.object.factory, _factory) def test_unregisterUtility_wo_explicit_provided(self): from zope.interface.declarations import InterfaceClass @@ -538,14 +538,14 @@ class ComponentsTests(unittest.TestCase): args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Unregistered)) - self.assertTrue(isinstance(event.object, UtilityRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) - self.assertTrue(event.object.name is _name) - self.assertTrue(event.object.component is _to_reg) - self.assertTrue(event.object.info is _info) - self.assertTrue(event.object.factory is None) + self.assertIsInstance(event, Unregistered) + self.assertIsInstance(event.object, UtilityRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) + self.assertIs(event.object.name, _name) + self.assertIs(event.object.component, _to_reg) + self.assertIs(event.object.info, _info) + self.assertIsNone(event.object.factory) def test_unregisterUtility_wo_component_or_factory(self): from zope.interface.declarations import InterfaceClass @@ -575,14 +575,14 @@ class ComponentsTests(unittest.TestCase): args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Unregistered)) - self.assertTrue(isinstance(event.object, UtilityRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) - self.assertTrue(event.object.name is _name) - self.assertTrue(event.object.component is _to_reg) - self.assertTrue(event.object.info is _info) - self.assertTrue(event.object.factory is None) + self.assertIsInstance(event, Unregistered) + self.assertIsInstance(event.object, UtilityRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) + self.assertIs(event.object.name, _name) + self.assertIs(event.object.component, _to_reg) + self.assertIs(event.object.info, _info) + self.assertIsNone(event.object.factory) def test_unregisterUtility_w_existing_subscr(self): from zope.interface.declarations import InterfaceClass @@ -738,20 +738,20 @@ class ComponentsTests(unittest.TestCase): comp.registerUtility(_to_reg, ifoo, _name2, _info) reg = sorted(comp.registeredUtilities(), key=lambda r: r.name) self.assertEqual(len(reg), 2) - self.assertTrue(isinstance(reg[0], UtilityRegistration)) - self.assertTrue(reg[0].registry is comp) - self.assertTrue(reg[0].provided is ifoo) - self.assertTrue(reg[0].name is _name1) - self.assertTrue(reg[0].component is _to_reg) - self.assertTrue(reg[0].info is _info) - self.assertTrue(reg[0].factory is None) - self.assertTrue(isinstance(reg[1], UtilityRegistration)) - self.assertTrue(reg[1].registry is comp) - self.assertTrue(reg[1].provided is ifoo) - self.assertTrue(reg[1].name is _name2) - self.assertTrue(reg[1].component is _to_reg) - self.assertTrue(reg[1].info is _info) - self.assertTrue(reg[1].factory is None) + self.assertIsInstance(reg[0], UtilityRegistration) + self.assertIs(reg[0].registry, comp) + self.assertIs(reg[0].provided, ifoo) + self.assertIs(reg[0].name, _name1) + self.assertIs(reg[0].component, _to_reg) + self.assertIs(reg[0].info, _info) + self.assertIsNone(reg[0].factory) + self.assertIsInstance(reg[1], UtilityRegistration) + self.assertIs(reg[1].registry, comp) + self.assertIs(reg[1].provided, ifoo) + self.assertIs(reg[1].name, _name2) + self.assertIs(reg[1].component, _to_reg) + self.assertIs(reg[1].info, _info) + self.assertIsNone(reg[1].factory) def test_queryUtility_miss_no_default(self): from zope.interface.declarations import InterfaceClass @@ -761,7 +761,7 @@ class ComponentsTests(unittest.TestCase): ifoo = IFoo('IFoo') comp = self._makeOne() - self.assertTrue(comp.queryUtility(ifoo) is None) + self.assertIsNone(comp.queryUtility(ifoo)) def test_queryUtility_miss_w_default(self): from zope.interface.declarations import InterfaceClass @@ -772,7 +772,7 @@ class ComponentsTests(unittest.TestCase): ifoo = IFoo('IFoo') comp = self._makeOne() _default = object() - self.assertTrue(comp.queryUtility(ifoo, default=_default) is _default) + self.assertIs(comp.queryUtility(ifoo, default=_default), _default) def test_queryUtility_hit(self): from zope.interface.declarations import InterfaceClass @@ -784,7 +784,7 @@ class ComponentsTests(unittest.TestCase): _to_reg = object() comp = self._makeOne() comp.registerUtility(_to_reg, ifoo) - self.assertTrue(comp.queryUtility(ifoo) is _to_reg) + self.assertIs(comp.queryUtility(ifoo), _to_reg) def test_getUtility_miss(self): from zope.interface.declarations import InterfaceClass @@ -807,7 +807,7 @@ class ComponentsTests(unittest.TestCase): _to_reg = object() comp = self._makeOne() comp.registerUtility(_to_reg, ifoo) - self.assertTrue(comp.getUtility(ifoo) is _to_reg) + self.assertIs(comp.getUtility(ifoo), _to_reg) def test_getUtilitiesFor_miss(self): from zope.interface.declarations import InterfaceClass @@ -902,22 +902,24 @@ class ComponentsTests(unittest.TestCase): _monkey, _events = self._wrapEvents() with _monkey: comp.registerAdapter(_factory, (ibar,), ifoo, _name, _info) - self.assertTrue(comp.adapters._adapters[1][ibar][ifoo][_name] - is _factory) + self.assertIs( + comp.adapters._adapters[1][ibar][ifoo][_name], + _factory + ) self.assertEqual(comp._adapter_registrations[(ibar,), ifoo, _name], (_factory, _info)) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Registered)) - self.assertTrue(isinstance(event.object, AdapterRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) + self.assertIsInstance(event, Registered) + self.assertIsInstance(event.object, AdapterRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) self.assertEqual(event.object.required, (ibar,)) - self.assertTrue(event.object.name is _name) - self.assertTrue(event.object.info is _info) - self.assertTrue(event.object.factory is _factory) + self.assertIs(event.object.name, _name) + self.assertIs(event.object.info, _info) + self.assertIs(event.object.factory, _factory) def test_registerAdapter_no_provided_available(self): from zope.interface.declarations import InterfaceClass @@ -958,22 +960,24 @@ class ComponentsTests(unittest.TestCase): _monkey, _events = self._wrapEvents() with _monkey: comp.registerAdapter(_Factory, (ibar,), name=_name, info=_info) - self.assertTrue(comp.adapters._adapters[1][ibar][ifoo][_name] - is _Factory) + self.assertIs( + comp.adapters._adapters[1][ibar][ifoo][_name], + _Factory + ) self.assertEqual(comp._adapter_registrations[(ibar,), ifoo, _name], (_Factory, _info)) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Registered)) - self.assertTrue(isinstance(event.object, AdapterRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) + self.assertIsInstance(event, Registered) + self.assertIsInstance(event.object, AdapterRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) self.assertEqual(event.object.required, (ibar,)) - self.assertTrue(event.object.name is _name) - self.assertTrue(event.object.info is _info) - self.assertTrue(event.object.factory is _Factory) + self.assertIs(event.object.name, _name) + self.assertIs(event.object.info, _info) + self.assertIs(event.object.factory, _Factory) def test_registerAdapter_no_required_available(self): from zope.interface.declarations import InterfaceClass @@ -1032,8 +1036,9 @@ class ComponentsTests(unittest.TestCase): with _monkey: comp.registerAdapter(_Factory, [None], provided=ifoo, name=_name, info=_info) - self.assertTrue( - comp.adapters._adapters[1][Interface][ifoo][_name] is _Factory + self.assertIs( + comp.adapters._adapters[1][Interface][ifoo][_name], + _Factory ) self.assertEqual( comp._adapter_registrations[(Interface,), ifoo, _name], @@ -1043,14 +1048,14 @@ class ComponentsTests(unittest.TestCase): args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Registered)) - self.assertTrue(isinstance(event.object, AdapterRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) + self.assertIsInstance(event, Registered) + self.assertIsInstance(event.object, AdapterRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) self.assertEqual(event.object.required, (Interface,)) - self.assertTrue(event.object.name is _name) - self.assertTrue(event.object.info is _info) - self.assertTrue(event.object.factory is _Factory) + self.assertIs(event.object.name, _name) + self.assertIs(event.object.info, _info) + self.assertIs(event.object.factory, _Factory) def test_registerAdapter_w_required_containing_class(self): from zope.interface.declarations import InterfaceClass @@ -1080,8 +1085,9 @@ class ComponentsTests(unittest.TestCase): with _monkey: comp.registerAdapter(_Factory, [_Context], provided=ifoo, name=_name, info=_info) - self.assertTrue( - comp.adapters._adapters[1][_ctx_impl][ifoo][_name] is _Factory + self.assertIs( + comp.adapters._adapters[1][_ctx_impl][ifoo][_name], + _Factory ) self.assertEqual( comp._adapter_registrations[(_ctx_impl,), ifoo, _name], @@ -1091,14 +1097,14 @@ class ComponentsTests(unittest.TestCase): args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Registered)) - self.assertTrue(isinstance(event.object, AdapterRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) + self.assertIsInstance(event, Registered) + self.assertIsInstance(event.object, AdapterRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) self.assertEqual(event.object.required, (_ctx_impl,)) - self.assertTrue(event.object.name is _name) - self.assertTrue(event.object.info is _info) - self.assertTrue(event.object.factory is _Factory) + self.assertIs(event.object.name, _name) + self.assertIs(event.object.info, _info) + self.assertIs(event.object.factory, _Factory) def test_registerAdapter_w_required_containing_junk(self): from zope.interface.declarations import InterfaceClass @@ -1141,22 +1147,24 @@ class ComponentsTests(unittest.TestCase): with _monkey: comp.registerAdapter(_Factory, provided=ifoo, name=_name, info=_info) - self.assertTrue(comp.adapters._adapters[1][ibar][ifoo][_name] - is _Factory) + self.assertIs( + comp.adapters._adapters[1][ibar][ifoo][_name], + _Factory + ) self.assertEqual(comp._adapter_registrations[(ibar,), ifoo, _name], (_Factory, _info)) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Registered)) - self.assertTrue(isinstance(event.object, AdapterRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) + self.assertIsInstance(event, Registered) + self.assertIsInstance(event.object, AdapterRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) self.assertEqual(event.object.required, (ibar,)) - self.assertTrue(event.object.name is _name) - self.assertTrue(event.object.info is _info) - self.assertTrue(event.object.factory is _Factory) + self.assertIs(event.object.name, _name) + self.assertIs(event.object.info, _info) + self.assertIs(event.object.factory, _Factory) def test_registerAdapter_wo_event(self): from zope.interface.declarations import InterfaceClass @@ -1238,14 +1246,14 @@ class ComponentsTests(unittest.TestCase): args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Unregistered)) - self.assertTrue(isinstance(event.object, AdapterRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) + self.assertIsInstance(event, Unregistered) + self.assertIsInstance(event.object, AdapterRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, '') self.assertEqual(event.object.info, '') - self.assertTrue(event.object.factory is _Factory) + self.assertIs(event.object.factory, _Factory) def test_unregisterAdapter_wo_explicit_provided(self): from zope.interface.declarations import InterfaceClass @@ -1273,14 +1281,14 @@ class ComponentsTests(unittest.TestCase): args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Unregistered)) - self.assertTrue(isinstance(event.object, AdapterRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) + self.assertIsInstance(event, Unregistered) + self.assertIsInstance(event.object, AdapterRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, '') self.assertEqual(event.object.info, '') - self.assertTrue(event.object.factory is _Factory) + self.assertIs(event.object.factory, _Factory) def test_unregisterAdapter_wo_explicit_required(self): from zope.interface.declarations import InterfaceClass @@ -1306,14 +1314,14 @@ class ComponentsTests(unittest.TestCase): args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Unregistered)) - self.assertTrue(isinstance(event.object, AdapterRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) + self.assertIsInstance(event, Unregistered) + self.assertIsInstance(event.object, AdapterRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, '') self.assertEqual(event.object.info, '') - self.assertTrue(event.object.factory is _Factory) + self.assertIs(event.object.factory, _Factory) def test_registeredAdapters_empty(self): comp = self._makeOne() @@ -1340,20 +1348,20 @@ class ComponentsTests(unittest.TestCase): comp.registerAdapter(_Factory, (ibar,), ifoo, _name2, _info) reg = sorted(comp.registeredAdapters(), key=lambda r: r.name) self.assertEqual(len(reg), 2) - self.assertTrue(isinstance(reg[0], AdapterRegistration)) - self.assertTrue(reg[0].registry is comp) - self.assertTrue(reg[0].provided is ifoo) + self.assertIsInstance(reg[0], AdapterRegistration) + self.assertIs(reg[0].registry, comp) + self.assertIs(reg[0].provided, ifoo) self.assertEqual(reg[0].required, (ibar,)) - self.assertTrue(reg[0].name is _name1) - self.assertTrue(reg[0].info is _info) - self.assertTrue(reg[0].factory is _Factory) - self.assertTrue(isinstance(reg[1], AdapterRegistration)) - self.assertTrue(reg[1].registry is comp) - self.assertTrue(reg[1].provided is ifoo) + self.assertIs(reg[0].name, _name1) + self.assertIs(reg[0].info, _info) + self.assertIs(reg[0].factory, _Factory) + self.assertIsInstance(reg[1], AdapterRegistration) + self.assertIs(reg[1].registry, comp) + self.assertIs(reg[1].provided, ifoo) self.assertEqual(reg[1].required, (ibar,)) - self.assertTrue(reg[1].name is _name2) - self.assertTrue(reg[1].info is _info) - self.assertTrue(reg[1].factory is _Factory) + self.assertIs(reg[1].name, _name2) + self.assertIs(reg[1].info, _info) + self.assertIs(reg[1].factory, _Factory) def test_queryAdapter_miss_no_default(self): from zope.interface.declarations import InterfaceClass @@ -1364,7 +1372,7 @@ class ComponentsTests(unittest.TestCase): ifoo = IFoo('IFoo') comp = self._makeOne() _context = object() - self.assertTrue(comp.queryAdapter(_context, ifoo) is None) + self.assertIsNone(comp.queryAdapter(_context, ifoo)) def test_queryAdapter_miss_w_default(self): from zope.interface.declarations import InterfaceClass @@ -1376,8 +1384,10 @@ class ComponentsTests(unittest.TestCase): comp = self._makeOne() _context = object() _default = object() - self.assertTrue( - comp.queryAdapter(_context, ifoo, default=_default) is _default) + self.assertIs( + comp.queryAdapter(_context, ifoo, default=_default), + _default + ) def test_queryAdapter_hit(self): from zope.interface.declarations import InterfaceClass @@ -1401,8 +1411,8 @@ class ComponentsTests(unittest.TestCase): comp = self._makeOne() comp.registerAdapter(_Factory, (ibar,), ifoo) adapter = comp.queryAdapter(_context, ifoo) - self.assertTrue(isinstance(adapter, _Factory)) - self.assertTrue(adapter.context is _context) + self.assertIsInstance(adapter, _Factory) + self.assertIs(adapter.context, _context) def test_getAdapter_miss(self): from zope.interface.declarations import InterfaceClass @@ -1590,9 +1600,11 @@ class ComponentsTests(unittest.TestCase): _context2 = _Context2() _default = object() comp = self._makeOne() - self.assertTrue( + self.assertIs( comp.queryMultiAdapter((_context1, _context2), ifoo, - default=_default) is _default) + default=_default), + _default + ) def test_queryMultiAdapter_hit(self): from zope.interface.declarations import InterfaceClass @@ -1623,7 +1635,7 @@ class ComponentsTests(unittest.TestCase): comp = self._makeOne() comp.registerAdapter(_Factory, (ibar, ibaz), ifoo) adapter = comp.queryMultiAdapter((_context1, _context2), ifoo) - self.assertTrue(isinstance(adapter, _Factory)) + self.assertIsInstance(adapter, _Factory) self.assertEqual(adapter.context, (_context1, _context2)) def test_getMultiAdapter_miss(self): @@ -1681,7 +1693,7 @@ class ComponentsTests(unittest.TestCase): comp = self._makeOne() comp.registerAdapter(_Factory, (ibar, ibaz), ifoo) adapter = comp.getMultiAdapter((_context1, _context2), ifoo) - self.assertTrue(isinstance(adapter, _Factory)) + self.assertIsInstance(adapter, _Factory) self.assertEqual(adapter.context, (_context1, _context2)) def _should_not_change(self, comp): @@ -1837,9 +1849,9 @@ class ComponentsTests(unittest.TestCase): found = sorted(comp.getAdapters((_context1, _context2), ifoo)) self.assertEqual(len(found), 2) self.assertEqual(found[0][0], _name1) - self.assertTrue(isinstance(found[0][1], _Factory1)) + self.assertIsInstance(found[0][1], _Factory1) self.assertEqual(found[1][0], _name2) - self.assertTrue(isinstance(found[1][1], _Factory2)) + self.assertIsInstance(found[1][1], _Factory2) def test_registerSubscriptionAdapter_w_nonblank_name(self): from zope.interface.declarations import InterfaceClass @@ -1882,21 +1894,21 @@ class ComponentsTests(unittest.TestCase): info=_info) reg = comp.adapters._subscribers[1][ibar][ifoo][_blank] self.assertEqual(len(reg), 1) - self.assertTrue(reg[0] is _factory) + self.assertIs(reg[0], _factory) self.assertEqual(comp._subscription_registrations, [((ibar,), ifoo, _blank, _factory, _info)]) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Registered)) - self.assertTrue(isinstance(event.object, SubscriptionRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) + self.assertIsInstance(event, Registered) + self.assertIsInstance(event.object, SubscriptionRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, _blank) - self.assertTrue(event.object.info is _info) - self.assertTrue(event.object.factory is _factory) + self.assertIs(event.object.info, _info) + self.assertIs(event.object.factory, _factory) def test_registerSubscriptionAdapter_wo_explicit_provided(self): from zope.interface.declarations import InterfaceClass @@ -1922,21 +1934,21 @@ class ComponentsTests(unittest.TestCase): comp.registerSubscriptionAdapter(_Factory, (ibar,), info=_info) reg = comp.adapters._subscribers[1][ibar][ifoo][_blank] self.assertEqual(len(reg), 1) - self.assertTrue(reg[0] is _Factory) + self.assertIs(reg[0], _Factory) self.assertEqual(comp._subscription_registrations, [((ibar,), ifoo, _blank, _Factory, _info)]) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Registered)) - self.assertTrue(isinstance(event.object, SubscriptionRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) + self.assertIsInstance(event, Registered) + self.assertIsInstance(event.object, SubscriptionRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, _blank) - self.assertTrue(event.object.info is _info) - self.assertTrue(event.object.factory is _Factory) + self.assertIs(event.object.info, _info) + self.assertIs(event.object.factory, _Factory) def test_registerSubscriptionAdapter_wo_explicit_required(self): from zope.interface.declarations import InterfaceClass @@ -1962,21 +1974,21 @@ class ComponentsTests(unittest.TestCase): ) reg = comp.adapters._subscribers[1][ibar][ifoo][_blank] self.assertEqual(len(reg), 1) - self.assertTrue(reg[0] is _Factory) + self.assertIs(reg[0], _Factory) self.assertEqual(comp._subscription_registrations, [((ibar,), ifoo, _blank, _Factory, _info)]) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Registered)) - self.assertTrue(isinstance(event.object, SubscriptionRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) + self.assertIsInstance(event, Registered) + self.assertIsInstance(event.object, SubscriptionRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, _blank) - self.assertTrue(event.object.info is _info) - self.assertTrue(event.object.factory is _Factory) + self.assertIs(event.object.info, _info) + self.assertIs(event.object.factory, _Factory) def test_registerSubscriptionAdapter_wo_event(self): from zope.interface.declarations import InterfaceClass @@ -2022,20 +2034,20 @@ class ComponentsTests(unittest.TestCase): comp.registerSubscriptionAdapter(_Factory, (ibar,), ifoo, info=_info) reg = list(comp.registeredSubscriptionAdapters()) self.assertEqual(len(reg), 2) - self.assertTrue(isinstance(reg[0], SubscriptionRegistration)) - self.assertTrue(reg[0].registry is comp) - self.assertTrue(reg[0].provided is ifoo) + self.assertIsInstance(reg[0], SubscriptionRegistration) + self.assertIs(reg[0].registry, comp) + self.assertIs(reg[0].provided, ifoo) self.assertEqual(reg[0].required, (ibar,)) self.assertEqual(reg[0].name, _blank) - self.assertTrue(reg[0].info is _info) - self.assertTrue(reg[0].factory is _Factory) - self.assertTrue(isinstance(reg[1], SubscriptionRegistration)) - self.assertTrue(reg[1].registry is comp) - self.assertTrue(reg[1].provided is ifoo) + self.assertIs(reg[0].info, _info) + self.assertIs(reg[0].factory, _Factory) + self.assertIsInstance(reg[1], SubscriptionRegistration) + self.assertIs(reg[1].registry, comp) + self.assertIs(reg[1].provided, ifoo) self.assertEqual(reg[1].required, (ibar,)) self.assertEqual(reg[1].name, _blank) - self.assertTrue(reg[1].info is _info) - self.assertTrue(reg[1].factory is _Factory) + self.assertIs(reg[1].info, _info) + self.assertIs(reg[1].factory, _Factory) def test_unregisterSubscriptionAdapter_w_nonblank_name(self): from zope.interface.declarations import InterfaceClass @@ -2111,14 +2123,14 @@ class ComponentsTests(unittest.TestCase): args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Unregistered)) - self.assertTrue(isinstance(event.object, SubscriptionRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) + self.assertIsInstance(event, Unregistered) + self.assertIsInstance(event.object, SubscriptionRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, '') self.assertEqual(event.object.info, '') - self.assertTrue(event.object.factory is None) + self.assertIsNone(event.object.factory) def test_unregisterSubscriptionAdapter_hit_w_factory(self): from zope.interface.declarations import InterfaceClass @@ -2146,14 +2158,14 @@ class ComponentsTests(unittest.TestCase): args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Unregistered)) - self.assertTrue(isinstance(event.object, SubscriptionRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) + self.assertIsInstance(event, Unregistered) + self.assertIsInstance(event.object, SubscriptionRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, '') self.assertEqual(event.object.info, '') - self.assertTrue(event.object.factory is _Factory) + self.assertIs(event.object.factory, _Factory) def test_unregisterSubscriptionAdapter_wo_explicit_provided(self): from zope.interface.declarations import InterfaceClass @@ -2181,14 +2193,14 @@ class ComponentsTests(unittest.TestCase): args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Unregistered)) - self.assertTrue(isinstance(event.object, SubscriptionRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) + self.assertIsInstance(event, Unregistered) + self.assertIsInstance(event.object, SubscriptionRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, '') self.assertEqual(event.object.info, '') - self.assertTrue(event.object.factory is _Factory) + self.assertIs(event.object.factory, _Factory) def test_unregisterSubscriptionAdapter_wo_explicit_required(self): from zope.interface.declarations import InterfaceClass @@ -2214,14 +2226,14 @@ class ComponentsTests(unittest.TestCase): args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Unregistered)) - self.assertTrue(isinstance(event.object, SubscriptionRegistration)) - self.assertTrue(event.object.registry is comp) - self.assertTrue(event.object.provided is ifoo) + self.assertIsInstance(event, Unregistered) + self.assertIsInstance(event.object, SubscriptionRegistration) + self.assertIs(event.object.registry, comp) + self.assertIs(event.object.provided, ifoo) self.assertEqual(event.object.required, (ibar,)) self.assertEqual(event.object.name, '') self.assertEqual(event.object.info, '') - self.assertTrue(event.object.factory is _Factory) + self.assertIs(event.object.factory, _Factory) def test_subscribers_empty(self): from zope.interface.declarations import InterfaceClass @@ -2276,8 +2288,8 @@ class ComponentsTests(unittest.TestCase): subscribers = sorted(subscribers, key=_klassname) self.assertEqual(len(subscribers), 2) - self.assertTrue(isinstance(subscribers[0], _Derived)) - self.assertTrue(isinstance(subscribers[1], _Factory)) + self.assertIsInstance(subscribers[0], _Derived) + self.assertIsInstance(subscribers[1], _Factory) def test_registerHandler_w_nonblank_name(self): from zope.interface.declarations import InterfaceClass @@ -2316,20 +2328,20 @@ class ComponentsTests(unittest.TestCase): comp.registerHandler(_factory, (ifoo,), info=_info) reg = comp.adapters._subscribers[1][ifoo][None][_blank] self.assertEqual(len(reg), 1) - self.assertTrue(reg[0] is _factory) + self.assertIs(reg[0], _factory) self.assertEqual(comp._handler_registrations, [((ifoo,), _blank, _factory, _info)]) self.assertEqual(len(_events), 1) args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Registered)) - self.assertTrue(isinstance(event.object, HandlerRegistration)) - self.assertTrue(event.object.registry is comp) + self.assertIsInstance(event, Registered) + self.assertIsInstance(event.object, HandlerRegistration) + self.assertIs(event.object.registry, comp) self.assertEqual(event.object.required, (ifoo,)) self.assertEqual(event.object.name, _blank) - self.assertTrue(event.object.info is _info) - self.assertTrue(event.object.factory is _factory) + self.assertIs(event.object.info, _info) + self.assertIs(event.object.factory, _factory) def test_registerHandler_wo_explicit_required_no_event(self): from zope.interface.declarations import InterfaceClass @@ -2351,7 +2363,7 @@ class ComponentsTests(unittest.TestCase): comp.registerHandler(_Factory, info=_info, event=False) reg = comp.adapters._subscribers[1][ifoo][None][_blank] self.assertEqual(len(reg), 1) - self.assertTrue(reg[0] is _Factory) + self.assertIs(reg[0], _Factory) self.assertEqual(comp._handler_registrations, [((ifoo,), _blank, _Factory, _info)]) self.assertEqual(len(_events), 0) @@ -2384,12 +2396,12 @@ class ComponentsTests(unittest.TestCase): subscribers = sorted(comp.registeredHandlers(), key=_factory_name) self.assertEqual(len(subscribers), 2) - self.assertTrue(isinstance(subscribers[0], HandlerRegistration)) + self.assertIsInstance(subscribers[0], HandlerRegistration) self.assertEqual(subscribers[0].required, (ifoo,)) self.assertEqual(subscribers[0].name, '') self.assertEqual(subscribers[0].factory, _factory1) self.assertEqual(subscribers[0].info, '') - self.assertTrue(isinstance(subscribers[1], HandlerRegistration)) + self.assertIsInstance(subscribers[1], HandlerRegistration) self.assertEqual(subscribers[1].required, (ifoo,)) self.assertEqual(subscribers[1].name, '') self.assertEqual(subscribers[1].factory, _factory2) @@ -2446,12 +2458,12 @@ class ComponentsTests(unittest.TestCase): args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Unregistered)) - self.assertTrue(isinstance(event.object, HandlerRegistration)) - self.assertTrue(event.object.registry is comp) + self.assertIsInstance(event, Unregistered) + self.assertIsInstance(event.object, HandlerRegistration) + self.assertIs(event.object.registry, comp) self.assertEqual(event.object.required, (ifoo,)) self.assertEqual(event.object.name, '') - self.assertTrue(event.object.factory is _factory) + self.assertIs(event.object.factory, _factory) def test_unregisterHandler_hit_w_only_explicit_provided(self): from zope.interface.declarations import InterfaceClass @@ -2477,12 +2489,12 @@ class ComponentsTests(unittest.TestCase): args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Unregistered)) - self.assertTrue(isinstance(event.object, HandlerRegistration)) - self.assertTrue(event.object.registry is comp) + self.assertIsInstance(event, Unregistered) + self.assertIsInstance(event.object, HandlerRegistration) + self.assertIs(event.object.registry, comp) self.assertEqual(event.object.required, (ifoo,)) self.assertEqual(event.object.name, '') - self.assertTrue(event.object.factory is None) + self.assertIsNone(event.object.factory) def test_unregisterHandler_wo_explicit_required(self): from zope.interface.declarations import InterfaceClass @@ -2507,13 +2519,13 @@ class ComponentsTests(unittest.TestCase): args, kw = _events[0] event, = args self.assertEqual(kw, {}) - self.assertTrue(isinstance(event, Unregistered)) - self.assertTrue(isinstance(event.object, HandlerRegistration)) - self.assertTrue(event.object.registry is comp) + self.assertIsInstance(event, Unregistered) + self.assertIsInstance(event.object, HandlerRegistration) + self.assertIs(event.object.registry, comp) self.assertEqual(event.object.required, (ifoo,)) self.assertEqual(event.object.name, '') self.assertEqual(event.object.info, '') - self.assertTrue(event.object.factory is _Factory) + self.assertIs(event.object.factory, _Factory) def test_handle_empty(self): from zope.interface.declarations import InterfaceClass @@ -2802,38 +2814,38 @@ class UtilityRegistrationTests(unittest.TestCase): def test___eq___identity(self): _component = object() ur, _registry, _name = self._makeOne(_component) - self.assertTrue(ur == ur) + self.assertEqual(ur, ur) def test___eq___hit(self): _component = object() ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component) - self.assertTrue(ur == ur2) + self.assertEqual(ur, ur2) def test___eq___miss(self): _component = object() _component2 = object() ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component2) - self.assertFalse(ur == ur2) + self.assertNotEqual(ur, ur2) def test___ne___identity(self): _component = object() ur, _registry, _name = self._makeOne(_component) - self.assertFalse(ur != ur) + self.assertEqual(ur, ur) def test___ne___hit(self): _component = object() ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component) - self.assertFalse(ur != ur2) + self.assertEqual(ur, ur2) def test___ne___miss(self): _component = object() _component2 = object() ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component2) - self.assertTrue(ur != ur2) + self.assertNotEqual(ur, ur2) def test___lt___identity(self): _component = object() @@ -2852,18 +2864,18 @@ class UtilityRegistrationTests(unittest.TestCase): ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component2) ur2.name = _name + '2' - self.assertTrue(ur < ur2) + self.assertLess(ur, ur2) def test___le___identity(self): _component = object() ur, _registry, _name = self._makeOne(_component) - self.assertTrue(ur <= ur) + self.assertLessEqual(ur, ur) def test___le___hit(self): _component = object() ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component) - self.assertTrue(ur <= ur2) + self.assertLessEqual(ur, ur2) def test___le___miss(self): _component = object() @@ -2871,7 +2883,7 @@ class UtilityRegistrationTests(unittest.TestCase): ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component2) ur2.name = _name + '2' - self.assertTrue(ur <= ur2) + self.assertLessEqual(ur, ur2) def test___gt___identity(self): _component = object() @@ -2884,7 +2896,7 @@ class UtilityRegistrationTests(unittest.TestCase): ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component2) ur2.name = _name + '2' - self.assertTrue(ur2 > ur) + self.assertGreater(ur2, ur) def test___gt___miss(self): _component = object() @@ -2895,7 +2907,7 @@ class UtilityRegistrationTests(unittest.TestCase): def test___ge___identity(self): _component = object() ur, _registry, _name = self._makeOne(_component) - self.assertTrue(ur >= ur) + self.assertGreaterEqual(ur, ur) def test___ge___miss(self): _component = object() @@ -2910,7 +2922,7 @@ class UtilityRegistrationTests(unittest.TestCase): ur, _registry, _name = self._makeOne(_component) ur2, _, _ = self._makeOne(_component) ur2.name = _name + '2' - self.assertTrue(ur2 >= ur) + self.assertGreaterEqual(ur2, ur) class AdapterRegistrationTests(unittest.TestCase): @@ -3007,38 +3019,38 @@ class AdapterRegistrationTests(unittest.TestCase): def test___eq___identity(self): _component = object() ar, _registry, _name = self._makeOne(_component) - self.assertTrue(ar == ar) + self.assertEqual(ar, ar) def test___eq___hit(self): _component = object() ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component) - self.assertTrue(ar == ar2) + self.assertEqual(ar, ar2) def test___eq___miss(self): _component = object() _component2 = object() ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component2) - self.assertFalse(ar == ar2) + self.assertNotEqual(ar, ar2) def test___ne___identity(self): _component = object() ar, _registry, _name = self._makeOne(_component) - self.assertFalse(ar != ar) + self.assertEqual(ar, ar) def test___ne___miss(self): _component = object() ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component) - self.assertFalse(ar != ar2) + self.assertEqual(ar, ar2) def test___ne___hit_component(self): _component = object() _component2 = object() ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component2) - self.assertTrue(ar != ar2) + self.assertNotEqual(ar, ar2) def test___ne___hit_provided(self): from zope.interface.declarations import InterfaceClass @@ -3051,7 +3063,7 @@ class AdapterRegistrationTests(unittest.TestCase): ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component) ar2.provided = ibaz - self.assertTrue(ar != ar2) + self.assertNotEqual(ar, ar2) def test___ne___hit_required(self): from zope.interface.declarations import InterfaceClass @@ -3065,7 +3077,7 @@ class AdapterRegistrationTests(unittest.TestCase): ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component2) ar2.required = (ibaz,) - self.assertTrue(ar != ar2) + self.assertNotEqual(ar, ar2) def test___lt___identity(self): _component = object() @@ -3084,18 +3096,18 @@ class AdapterRegistrationTests(unittest.TestCase): ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component2) ar2.name = _name + '2' - self.assertTrue(ar < ar2) + self.assertLess(ar, ar2) def test___le___identity(self): _component = object() ar, _registry, _name = self._makeOne(_component) - self.assertTrue(ar <= ar) + self.assertLessEqual(ar, ar) def test___le___hit(self): _component = object() ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component) - self.assertTrue(ar <= ar2) + self.assertLessEqual(ar, ar2) def test___le___miss(self): _component = object() @@ -3103,7 +3115,7 @@ class AdapterRegistrationTests(unittest.TestCase): ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component2) ar2.name = _name + '2' - self.assertTrue(ar <= ar2) + self.assertLessEqual(ar, ar2) def test___gt___identity(self): _component = object() @@ -3116,7 +3128,7 @@ class AdapterRegistrationTests(unittest.TestCase): ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component2) ar2.name = _name + '2' - self.assertTrue(ar2 > ar) + self.assertGreater(ar2, ar) def test___gt___miss(self): _component = object() @@ -3127,7 +3139,7 @@ class AdapterRegistrationTests(unittest.TestCase): def test___ge___identity(self): _component = object() ar, _registry, _name = self._makeOne(_component) - self.assertTrue(ar >= ar) + self.assertGreaterEqual(ar, ar) def test___ge___miss(self): _component = object() @@ -3142,7 +3154,7 @@ class AdapterRegistrationTests(unittest.TestCase): ar, _registry, _name = self._makeOne(_component) ar2, _, _ = self._makeOne(_component) ar2.name = _name + '2' - self.assertTrue(ar2 >= ar) + self.assertGreaterEqual(ar2, ar) class SubscriptionRegistrationTests(unittest.TestCase): @@ -3229,9 +3241,9 @@ class HandlerRegistrationTests(unittest.TestCase): def _factory(context): raise NotImplementedError() hr, _, _ = self._makeOne(_factory) - self.assertTrue(hr.handler is _factory) - self.assertTrue(hr.factory is hr.handler) - self.assertTrue(hr.provided is None) + self.assertIs(hr.handler, _factory) + self.assertIs(hr.factory, hr.handler) + self.assertIsNone(hr.provided) def test___repr___factory_w_name(self): diff --git a/contrib/restricted/abseil-cpp-tstring/y_absl/base/config.h b/contrib/restricted/abseil-cpp-tstring/y_absl/base/config.h index 527b6181a2..287b06dd4c 100644 --- a/contrib/restricted/abseil-cpp-tstring/y_absl/base/config.h +++ b/contrib/restricted/abseil-cpp-tstring/y_absl/base/config.h @@ -917,12 +917,6 @@ static_assert(Y_ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' || #define Y_ABSL_INTERNAL_HAVE_SSSE3 1 #endif -#ifdef __NVCC__ -#undef Y_ABSL_INTERNAL_HAVE_SSE -#undef Y_ABSL_INTERNAL_HAVE_SSE2 -#undef Y_ABSL_INTERNAL_HAVE_SSSE3 -#endif - // Y_ABSL_INTERNAL_HAVE_ARM_NEON is used for compile-time detection of NEON (ARM // SIMD). // @@ -936,6 +930,13 @@ static_assert(Y_ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' || #define Y_ABSL_INTERNAL_HAVE_ARM_NEON 1 #endif +#ifdef __NVCC__ +#undef Y_ABSL_INTERNAL_HAVE_SSE +#undef Y_ABSL_INTERNAL_HAVE_SSE2 +#undef Y_ABSL_INTERNAL_HAVE_SSSE3 +#undef Y_ABSL_INTERNAL_HAVE_ARM_NEON +#endif + // Y_ABSL_HAVE_CONSTANT_EVALUATED is used for compile-time detection of // constant evaluation support through `y_absl::is_constant_evaluated`. #ifdef Y_ABSL_HAVE_CONSTANT_EVALUATED diff --git a/contrib/restricted/boost/locale/.yandex_meta/devtools.copyrights.report b/contrib/restricted/boost/locale/.yandex_meta/devtools.copyrights.report index afe16926c1..b8639e0153 100644 --- a/contrib/restricted/boost/locale/.yandex_meta/devtools.copyrights.report +++ b/contrib/restricted/boost/locale/.yandex_meta/devtools.copyrights.report @@ -56,12 +56,12 @@ BELONGS ya.make include/boost/locale/date_time_facet.hpp [2:2] include/boost/locale/encoding.hpp [2:2] include/boost/locale/encoding_errors.hpp [2:2] - include/boost/locale/encoding_utf.hpp [2:2] + include/boost/locale/encoding_utf.hpp [2:3] include/boost/locale/format.hpp [2:3] include/boost/locale/formatting.hpp [2:3] include/boost/locale/generator.hpp [2:2] include/boost/locale/gnu_gettext.hpp [2:2] - include/boost/locale/info.hpp [2:2] + include/boost/locale/info.hpp [2:3] include/boost/locale/localization_backend.hpp [2:2] include/boost/locale/message.hpp [2:3] include/boost/locale/time_zone.hpp [2:2] @@ -78,7 +78,7 @@ BELONGS ya.make src/boost/locale/icu/codecvt.cpp [2:3] src/boost/locale/icu/codecvt.hpp [2:2] src/boost/locale/icu/collator.cpp [2:2] - src/boost/locale/icu/conversion.cpp [2:2] + src/boost/locale/icu/conversion.cpp [2:3] src/boost/locale/icu/date_time.cpp [2:3] src/boost/locale/icu/formatter.cpp [2:3] src/boost/locale/icu/formatter.hpp [2:2] @@ -98,13 +98,13 @@ BELONGS ya.make src/boost/locale/posix/numeric.cpp [2:2] src/boost/locale/posix/posix_backend.cpp [2:3] src/boost/locale/posix/posix_backend.hpp [2:2] - src/boost/locale/shared/date_time.cpp [2:2] + src/boost/locale/shared/date_time.cpp [2:3] src/boost/locale/shared/format.cpp [2:2] src/boost/locale/shared/formatting.cpp [2:2] src/boost/locale/shared/generator.cpp [2:2] src/boost/locale/shared/iconv_codecvt.cpp [2:3] src/boost/locale/shared/iconv_codecvt.hpp [2:2] - src/boost/locale/shared/ids.cpp [2:2] + src/boost/locale/shared/ids.cpp [2:3] src/boost/locale/shared/ios_prop.hpp [2:3] src/boost/locale/shared/localization_backend.cpp [2:2] src/boost/locale/shared/mo_hash.hpp [2:2] @@ -124,7 +124,7 @@ BELONGS ya.make src/boost/locale/util/gregorian.cpp [2:2] src/boost/locale/util/gregorian.hpp [2:2] src/boost/locale/util/iconv.hpp [2:2] - src/boost/locale/util/info.cpp [2:2] + src/boost/locale/util/info.cpp [2:3] src/boost/locale/util/locale_data.cpp [2:3] src/boost/locale/util/numeric.hpp [2:2] src/boost/locale/util/timezone.hpp [2:2] @@ -150,6 +150,19 @@ BELONGS ya.make Files with this license: src/boost/locale/icu/uconv.hpp [2:3] +KEEP COPYRIGHT_SERVICE_LABEL 187d73eada66cef6d5d08ed727437603 +BELONGS ya.make + License text: + // Copyright (c) 2024 Alexander Grund + Scancode info: + Original SPDX id: COPYRIGHT_SERVICE_LABEL + Score : 100.00 + Match type : COPYRIGHT + Files with this license: + include/boost/locale/detail/allocator_traits.hpp [2:2] + src/boost/locale/shared/ids.cpp [2:3] + src/boost/locale/shared/std_collate_adapter.hpp [2:2] + KEEP COPYRIGHT_SERVICE_LABEL 5f6f0ebf2d6180caac56d446585150fe BELONGS ya.make License text: @@ -163,6 +176,18 @@ BELONGS ya.make include/boost/locale/generic_codecvt.hpp [2:3] include/boost/locale/utf8_codecvt.hpp [2:2] +KEEP COPYRIGHT_SERVICE_LABEL 70211eab6462dd6308fa5b813ba0f2c0 +BELONGS ya.make + License text: + // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh) + // Copyright (c) 2022-2024 Alexander Grund + Scancode info: + Original SPDX id: COPYRIGHT_SERVICE_LABEL + Score : 100.00 + Match type : COPYRIGHT + Files with this license: + include/boost/locale/encoding_utf.hpp [2:3] + KEEP COPYRIGHT_SERVICE_LABEL 8d04644911f5fff0cef0ea7eeadf74ee BELONGS ya.make License text: @@ -182,14 +207,15 @@ BELONGS ya.make KEEP COPYRIGHT_SERVICE_LABEL a999dc6b43b371fa616fd4c0c30cf6f3 BELONGS ya.make License text: - // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh) // Copyright (c) 2023 Alexander Grund Scancode info: Original SPDX id: COPYRIGHT_SERVICE_LABEL Score : 100.00 Match type : COPYRIGHT Files with this license: + include/boost/locale/detail/any_string.hpp [2:2] include/boost/locale/util/locale_data.hpp [2:3] + src/boost/locale/shared/message.hpp [2:2] src/boost/locale/util/make_std_unique.hpp [2:2] KEEP COPYRIGHT_SERVICE_LABEL c75aae6c76ff96e098e51412b5d4691b @@ -206,18 +232,22 @@ BELONGS ya.make include/boost/locale/detail/facet_id.hpp [2:2] include/boost/locale/detail/is_supported_char.hpp [2:2] include/boost/locale/formatting.hpp [2:3] + include/boost/locale/info.hpp [2:3] include/boost/locale/util.hpp [2:3] include/boost/locale/util/string.hpp [2:2] src/boost/locale/encoding/codepage.cpp [2:3] src/boost/locale/icu/codecvt.cpp [2:3] + src/boost/locale/icu/conversion.cpp [2:3] src/boost/locale/icu/icu_backend.cpp [2:3] src/boost/locale/posix/codecvt.cpp [2:3] src/boost/locale/posix/posix_backend.cpp [2:3] + src/boost/locale/shared/date_time.cpp [2:3] src/boost/locale/shared/iconv_codecvt.cpp [2:3] src/boost/locale/std/std_backend.cpp [2:3] src/boost/locale/util/codecvt_converter.cpp [2:3] src/boost/locale/util/encoding.cpp [2:3] src/boost/locale/util/encoding.hpp [2:3] + src/boost/locale/util/info.cpp [2:3] src/boost/locale/util/locale_data.cpp [2:3] src/boost/locale/win32/win_backend.cpp [2:3] diff --git a/contrib/restricted/boost/locale/.yandex_meta/devtools.licenses.report b/contrib/restricted/boost/locale/.yandex_meta/devtools.licenses.report index 65abee9ce0..7173da1354 100644 --- a/contrib/restricted/boost/locale/.yandex_meta/devtools.licenses.report +++ b/contrib/restricted/boost/locale/.yandex_meta/devtools.licenses.report @@ -86,14 +86,15 @@ BELONGS ya.make include/boost/locale/config.hpp [5:5] include/boost/locale/conversion.hpp [5:5] include/boost/locale/date_time_facet.hpp [5:5] + include/boost/locale/detail/allocator_traits.hpp [5:5] include/boost/locale/detail/encoding.hpp [5:5] include/boost/locale/detail/is_supported_char.hpp [5:5] include/boost/locale/encoding.hpp [5:5] include/boost/locale/encoding_errors.hpp [5:5] - include/boost/locale/encoding_utf.hpp [5:5] + include/boost/locale/encoding_utf.hpp [6:6] include/boost/locale/formatting.hpp [6:6] include/boost/locale/generic_codecvt.hpp [6:6] - include/boost/locale/info.hpp [5:5] + include/boost/locale/info.hpp [6:6] include/boost/locale/message.hpp [6:6] include/boost/locale/time_zone.hpp [5:5] include/boost/locale/utf8_codecvt.hpp [5:5] @@ -113,11 +114,13 @@ BELONGS ya.make src/boost/locale/posix/converter.cpp [5:5] src/boost/locale/posix/numeric.cpp [5:5] src/boost/locale/posix/posix_backend.hpp [5:5] - src/boost/locale/shared/date_time.cpp [5:5] + src/boost/locale/shared/date_time.cpp [6:6] src/boost/locale/shared/formatting.cpp [5:5] src/boost/locale/shared/iconv_codecvt.hpp [5:5] - src/boost/locale/shared/ids.cpp [5:5] + src/boost/locale/shared/ids.cpp [6:6] src/boost/locale/shared/ios_prop.hpp [6:6] + src/boost/locale/shared/message.hpp [5:5] + src/boost/locale/shared/std_collate_adapter.hpp [5:5] src/boost/locale/std/codecvt.cpp [5:5] src/boost/locale/std/collate.cpp [5:5] src/boost/locale/std/converter.cpp [5:5] @@ -130,7 +133,7 @@ BELONGS ya.make src/boost/locale/util/foreach_char.hpp [5:5] src/boost/locale/util/gregorian.hpp [5:5] src/boost/locale/util/iconv.hpp [5:5] - src/boost/locale/util/info.cpp [5:5] + src/boost/locale/util/info.cpp [6:6] src/boost/locale/util/locale_data.cpp [6:6] src/boost/locale/util/make_std_unique.hpp [5:5] src/boost/locale/win32/all_generator.hpp [5:5] @@ -158,14 +161,15 @@ BELONGS ya.make include/boost/locale/config.hpp [4:4] include/boost/locale/conversion.hpp [4:4] include/boost/locale/date_time_facet.hpp [4:4] + include/boost/locale/detail/allocator_traits.hpp [4:4] include/boost/locale/detail/encoding.hpp [4:4] include/boost/locale/detail/is_supported_char.hpp [4:4] include/boost/locale/encoding.hpp [4:4] include/boost/locale/encoding_errors.hpp [4:4] - include/boost/locale/encoding_utf.hpp [4:4] + include/boost/locale/encoding_utf.hpp [5:5] include/boost/locale/formatting.hpp [5:5] include/boost/locale/generic_codecvt.hpp [5:5] - include/boost/locale/info.hpp [4:4] + include/boost/locale/info.hpp [5:5] include/boost/locale/message.hpp [5:5] include/boost/locale/time_zone.hpp [4:4] include/boost/locale/utf8_codecvt.hpp [4:4] @@ -185,11 +189,13 @@ BELONGS ya.make src/boost/locale/posix/converter.cpp [4:4] src/boost/locale/posix/numeric.cpp [4:4] src/boost/locale/posix/posix_backend.hpp [4:4] - src/boost/locale/shared/date_time.cpp [4:4] + src/boost/locale/shared/date_time.cpp [5:5] src/boost/locale/shared/formatting.cpp [4:4] src/boost/locale/shared/iconv_codecvt.hpp [4:4] - src/boost/locale/shared/ids.cpp [4:4] + src/boost/locale/shared/ids.cpp [5:5] src/boost/locale/shared/ios_prop.hpp [5:5] + src/boost/locale/shared/message.hpp [4:4] + src/boost/locale/shared/std_collate_adapter.hpp [4:4] src/boost/locale/std/codecvt.cpp [4:4] src/boost/locale/std/collate.cpp [4:4] src/boost/locale/std/converter.cpp [4:4] @@ -202,7 +208,7 @@ BELONGS ya.make src/boost/locale/util/foreach_char.hpp [4:4] src/boost/locale/util/gregorian.hpp [4:4] src/boost/locale/util/iconv.hpp [4:4] - src/boost/locale/util/info.cpp [4:4] + src/boost/locale/util/info.cpp [5:5] src/boost/locale/util/locale_data.cpp [5:5] src/boost/locale/util/make_std_unique.hpp [4:4] src/boost/locale/win32/all_generator.hpp [4:4] @@ -227,6 +233,7 @@ BELONGS ya.make include/boost/locale/boundary/boundary_point.hpp [4:5] include/boost/locale/boundary/types.hpp [4:5] include/boost/locale/date_time.hpp [4:5] + include/boost/locale/detail/any_string.hpp [4:5] include/boost/locale/detail/facet_id.hpp [4:5] include/boost/locale/format.hpp [5:6] include/boost/locale/generator.hpp [4:5] @@ -240,7 +247,7 @@ BELONGS ya.make src/boost/locale/encoding/wconv_converter.hpp [4:5] src/boost/locale/icu/codecvt.cpp [5:6] src/boost/locale/icu/collator.cpp [4:5] - src/boost/locale/icu/conversion.cpp [4:5] + src/boost/locale/icu/conversion.cpp [5:6] src/boost/locale/icu/date_time.cpp [5:6] src/boost/locale/icu/formatter.cpp [5:6] src/boost/locale/icu/formatters_cache.cpp [5:6] diff --git a/contrib/restricted/boost/locale/.yandex_meta/licenses.list.txt b/contrib/restricted/boost/locale/.yandex_meta/licenses.list.txt index f1ce436b42..2769441dcd 100644 --- a/contrib/restricted/boost/locale/.yandex_meta/licenses.list.txt +++ b/contrib/restricted/boost/locale/.yandex_meta/licenses.list.txt @@ -77,7 +77,7 @@ DEALINGS IN THE SOFTWARE. ====================COPYRIGHT==================== // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh) -// Copyright (c) 2023 Alexander Grund +// Copyright (c) 2022-2024 Alexander Grund ====================COPYRIGHT==================== @@ -95,4 +95,12 @@ DEALINGS IN THE SOFTWARE. ====================COPYRIGHT==================== +// Copyright (c) 2023 Alexander Grund + + +====================COPYRIGHT==================== // Copyright (c) 2023-2023 Alexander Grund + + +====================COPYRIGHT==================== +// Copyright (c) 2024 Alexander Grund diff --git a/contrib/restricted/boost/locale/README.md b/contrib/restricted/boost/locale/README.md index 2cc876784e..ea18e02d99 100644 --- a/contrib/restricted/boost/locale/README.md +++ b/contrib/restricted/boost/locale/README.md @@ -42,10 +42,10 @@ Distributed under the [Boost Software License, Version 1.0](https://www.boost.or ### Build Status -Branch | GH Actions | Appveyor | codecov.io | Deps | Docs | Tests | -:-------------: | ---------- | -------- | ---------- | ---- | ---- | ----- | -[`master`](https://github.com/boostorg/locale/tree/master) | [![CI](https://github.com/boostorg/locale/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/locale/actions/workflows/ci.yml) | [![Build status](https://ci.appveyor.com/api/projects/status/github/boostorg/locale?branch=master&svg=true)](https://ci.appveyor.com/project/Flamefire/locale/branch/master) | [![codecov](https://codecov.io/gh/boostorg/locale/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/locale/branch/master) | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/locale.html) | [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/locale/doc/html/index.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/locale.html) -[`develop`](https://github.com/boostorg/locale/tree/develop) | [![CI](https://github.com/boostorg/locale/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/locale/actions/workflows/ci.yml) | [![Build status](https://ci.appveyor.com/api/projects/status/github/boostorg/locale?branch=develop&svg=true)](https://ci.appveyor.com/project/Flamefire/locale/branch/develop) | [![codecov](https://codecov.io/gh/boostorg/locale/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/locale/branch/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/locale.html) | [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/locale/doc/html/index.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer/locale.html) +Branch | GH Actions | Appveyor | Drone | codecov.io | Deps | Docs | Tests | +:-------------: | ---------- | -------- | ----- | ---------- | ---- | ---- | ----- | +[`master`](https://github.com/boostorg/locale/tree/master) | [![CI](https://github.com/boostorg/locale/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/locale/actions/workflows/ci.yml) | [![Build status](https://ci.appveyor.com/api/projects/status/github/boostorg/locale?branch=master&svg=true)](https://ci.appveyor.com/project/Flamefire/locale/branch/master) | [![Build Status](https://drone.cpp.al/api/badges/boostorg/locale/status.svg?ref=refs/heads/master)](https://drone.cpp.al/boostorg/locale) | [![codecov](https://codecov.io/gh/boostorg/locale/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/locale/branch/master) | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/locale.html) | [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/locale/doc/html/index.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/locale.html) +[`develop`](https://github.com/boostorg/locale/tree/develop) | [![CI](https://github.com/boostorg/locale/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/locale/actions/workflows/ci.yml) | [![Build status](https://ci.appveyor.com/api/projects/status/github/boostorg/locale?branch=develop&svg=true)](https://ci.appveyor.com/project/Flamefire/locale/branch/develop) | [![Build Status](https://drone.cpp.al/api/badges/boostorg/locale/status.svg?ref=refs/heads/develop)](https://drone.cpp.al/boostorg/locale) | [![codecov](https://codecov.io/gh/boostorg/locale/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/locale/branch/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/locale.html) | [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/locale/doc/html/index.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer/locale.html) ### Directories diff --git a/contrib/restricted/boost/locale/include/boost/locale/boundary/boundary_point.hpp b/contrib/restricted/boost/locale/include/boost/locale/boundary/boundary_point.hpp index 494352a081..370dd5f816 100644 --- a/contrib/restricted/boost/locale/include/boost/locale/boundary/boundary_point.hpp +++ b/contrib/restricted/boost/locale/include/boost/locale/boundary/boundary_point.hpp @@ -100,6 +100,9 @@ namespace boost { namespace locale { namespace boundary { typedef boundary_point<std::string::const_iterator> sboundary_point; ///< convenience typedef typedef boundary_point<std::wstring::const_iterator> wsboundary_point; ///< convenience typedef +#ifndef BOOST_LOCALE_NO_CXX20_STRING8 + typedef boundary_point<std::u8string::const_iterator> u8sboundary_point; ///< convenience typedef +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T typedef boundary_point<std::u16string::const_iterator> u16sboundary_point; ///< convenience typedef #endif @@ -109,6 +112,9 @@ namespace boost { namespace locale { namespace boundary { typedef boundary_point<const char*> cboundary_point; ///< convenience typedef typedef boundary_point<const wchar_t*> wcboundary_point; ///< convenience typedef +#ifdef __cpp_char8_t + typedef boundary_point<const char8_t*> u8cboundary_point; ///< convenience typedef +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T typedef boundary_point<const char16_t*> u16cboundary_point; ///< convenience typedef #endif diff --git a/contrib/restricted/boost/locale/include/boost/locale/boundary/index.hpp b/contrib/restricted/boost/locale/include/boost/locale/boundary/index.hpp index fb4319b1bf..92b7613fd3 100644 --- a/contrib/restricted/boost/locale/include/boost/locale/boundary/index.hpp +++ b/contrib/restricted/boost/locale/include/boost/locale/boundary/index.hpp @@ -868,6 +868,9 @@ namespace boost { namespace locale { namespace boundary { typedef segment_index<std::string::const_iterator> ssegment_index; ///< convenience typedef typedef segment_index<std::wstring::const_iterator> wssegment_index; ///< convenience typedef +#ifndef BOOST_LOCALE_NO_CXX20_STRING8 + typedef segment_index<std::u8string::const_iterator> u8ssegment_index; ///< convenience typedef +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T typedef segment_index<std::u16string::const_iterator> u16ssegment_index; ///< convenience typedef #endif @@ -877,6 +880,9 @@ namespace boost { namespace locale { namespace boundary { typedef segment_index<const char*> csegment_index; ///< convenience typedef typedef segment_index<const wchar_t*> wcsegment_index; ///< convenience typedef +#ifdef __cpp_char8_t + typedef segment_index<const char8_t*> u8csegment_index; ///< convenience typedef +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T typedef segment_index<const char16_t*> u16csegment_index; ///< convenience typedef #endif @@ -886,6 +892,9 @@ namespace boost { namespace locale { namespace boundary { typedef boundary_point_index<std::string::const_iterator> sboundary_point_index; ///< convenience typedef typedef boundary_point_index<std::wstring::const_iterator> wsboundary_point_index; ///< convenience typedef +#ifndef BOOST_LOCALE_NO_CXX20_STRING8 + typedef boundary_point_index<std::u8string::const_iterator> u8sboundary_point_index; ///< convenience typedef +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T typedef boundary_point_index<std::u16string::const_iterator> u16sboundary_point_index; ///< convenience typedef #endif @@ -895,6 +904,9 @@ namespace boost { namespace locale { namespace boundary { typedef boundary_point_index<const char*> cboundary_point_index; ///< convenience typedef typedef boundary_point_index<const wchar_t*> wcboundary_point_index; ///< convenience typedef +#ifdef __cpp_char8_t + typedef boundary_point_index<const char8_t*> u8cboundary_point_index; ///< convenience typedef +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T typedef boundary_point_index<const char16_t*> u16cboundary_point_index; ///< convenience typedef #endif diff --git a/contrib/restricted/boost/locale/include/boost/locale/boundary/segment.hpp b/contrib/restricted/boost/locale/include/boost/locale/boundary/segment.hpp index 9e38188e3f..24e129dcf1 100644 --- a/contrib/restricted/boost/locale/include/boost/locale/boundary/segment.hpp +++ b/contrib/restricted/boost/locale/include/boost/locale/boundary/segment.hpp @@ -340,6 +340,9 @@ namespace boost { namespace locale { namespace boundary { typedef segment<std::string::const_iterator> ssegment; ///< convenience typedef typedef segment<std::wstring::const_iterator> wssegment; ///< convenience typedef +#ifndef BOOST_LOCALE_NO_CXX20_STRING8 + typedef segment<std::u8string::const_iterator> u8ssegment; ///< convenience typedef +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T typedef segment<std::u16string::const_iterator> u16ssegment; ///< convenience typedef #endif @@ -349,6 +352,9 @@ namespace boost { namespace locale { namespace boundary { typedef segment<const char*> csegment; ///< convenience typedef typedef segment<const wchar_t*> wcsegment; ///< convenience typedef +#ifdef __cpp_char8_t + typedef segment<const char8_t*> u8csegment; ///< convenience typedef +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T typedef segment<const char16_t*> u16csegment; ///< convenience typedef #endif diff --git a/contrib/restricted/boost/locale/include/boost/locale/collator.hpp b/contrib/restricted/boost/locale/include/boost/locale/collator.hpp index b45f15475f..693d33a6be 100644 --- a/contrib/restricted/boost/locale/include/boost/locale/collator.hpp +++ b/contrib/restricted/boost/locale/include/boost/locale/collator.hpp @@ -8,6 +8,7 @@ #define BOOST_LOCALE_COLLATOR_HPP_INCLUDED #include <boost/locale/config.hpp> +#include <boost/locale/detail/facet_id.hpp> #include <locale> #ifdef BOOST_MSVC @@ -43,17 +44,16 @@ namespace boost { namespace locale { /// \brief Collation facet. /// - /// It reimplements standard C++ std::collate, - /// allowing usage of std::locale for direct string comparison + /// It reimplements standard C++ std::collate with support for collation levels template<typename CharType> - class collator : public std::collate<CharType> { + class BOOST_SYMBOL_VISIBLE collator : public std::locale::facet, public detail::facet_id<collator<CharType>> { public: /// Type of the underlying character typedef CharType char_type; /// Type of string used with this facet typedef std::basic_string<CharType> string_type; - /// Compare two strings in rage [b1,e1), [b2,e2) according using a collation level \a level. Calls do_compare + /// Compare two strings in range [b1,e1), [b2,e2) according to collation level \a level. Calls do_compare /// /// Returns -1 if the first of the two strings sorts before the seconds, returns 1 if sorts after and 0 if /// they considered equal. @@ -66,6 +66,13 @@ namespace boost { namespace locale { return do_compare(level, b1, e1, b2, e2); } + /// Default compare function as-in std::collate that does not take collation level into account. + /// Uses identical level + int compare(const char_type* b1, const char_type* e1, const char_type* b2, const char_type* e2) const + { + return compare(collate_level::identical, b1, e1, b2, e2); + } + /// Create a binary string that can be compared to other in order to get collation order. The string is created /// for text in range [b,e). It is useful for collation of multiple strings for text. /// @@ -80,6 +87,13 @@ namespace boost { namespace locale { return do_transform(level, b, e); } + /// Default transform function as-in std::collate that does not take collation level into account. + /// Uses identical level + string_type transform(const char_type* b, const char_type* e) const + { + return transform(collate_level::identical, b, e); + } + /// Calculate a hash of a text in range [b,e). The value can be used for collation sensitive string comparison. /// /// If compare(level,b1,e1,b2,e2) == 0 then hash(level,b1,e1) == hash(level,b2,e2) @@ -87,6 +101,10 @@ namespace boost { namespace locale { /// Calls do_hash long hash(collate_level level, const char_type* b, const char_type* e) const { return do_hash(level, b, e); } + /// Default hash function as-in std::collate that does not take collation level into account. + /// Uses identical level + long hash(const char_type* b, const char_type* e) const { return hash(collate_level::identical, b, e); } + /// Compare two strings \a l and \a r using collation level \a level /// /// Returns -1 if the first of the two strings sorts before the seconds, returns 1 if sorts after and 0 if @@ -107,7 +125,7 @@ namespace boost { namespace locale { /// Create a binary string from string \a s, that can be compared to other, useful for collation of multiple /// strings. /// - /// The transformation follows these rules: + /// The transformation follows this rule: /// \code /// compare(level,s1,s2) == sign( transform(level,s1).compare(transform(level,s2)) ); /// \endcode @@ -118,29 +136,7 @@ namespace boost { namespace locale { protected: /// constructor of the collator object - collator(size_t refs = 0) : std::collate<CharType>(refs) {} - - /// This function is used to override default collation function that does not take in account collation level. - /// Uses primary level - int - do_compare(const char_type* b1, const char_type* e1, const char_type* b2, const char_type* e2) const override - { - return do_compare(collate_level::identical, b1, e1, b2, e2); - } - - /// This function is used to override default collation function that does not take in account collation level. - /// Uses primary level - string_type do_transform(const char_type* b, const char_type* e) const override - { - return do_transform(collate_level::identical, b, e); - } - - /// This function is used to override default collation function that does not take in account collation level. - /// Uses primary level - long do_hash(const char_type* b, const char_type* e) const override - { - return do_hash(collate_level::identical, b, e); - } + collator(size_t refs = 0) : std::locale::facet(refs) {} /// Actual function that performs comparison between the strings. For details see compare member function. Can /// be overridden. @@ -157,7 +153,7 @@ namespace boost { namespace locale { }; /// \brief This class can be used in STL algorithms and containers for comparison of strings - /// with a level other than primary + /// with a level other than identical /// /// For example: /// @@ -169,21 +165,22 @@ namespace boost { namespace locale { template<typename CharType, collate_level default_level = collate_level::identical> struct comparator { public: - /// Create a comparator class for locale \a l and with collation leval \a level + /// Create a comparator class for locale \a l and with collation level \a level /// /// \throws std::bad_cast: \a l does not have \ref collator facet installed comparator(const std::locale& l = std::locale(), collate_level level = default_level) : - locale_(l), level_(level) + locale_(l), collator_(std::use_facet<collator<CharType>>(locale_)), level_(level) {} /// Compare two strings -- equivalent to return left < right according to collation rules bool operator()(const std::basic_string<CharType>& left, const std::basic_string<CharType>& right) const { - return std::use_facet<collator<CharType>>(locale_).compare(level_, left, right) < 0; + return collator_.compare(level_, left, right) < 0; } private: std::locale locale_; + const collator<CharType>& collator_; collate_level level_; }; diff --git a/contrib/restricted/boost/locale/include/boost/locale/config.hpp b/contrib/restricted/boost/locale/include/boost/locale/config.hpp index 9c8e6c2f2f..1c69c92dc4 100644 --- a/contrib/restricted/boost/locale/include/boost/locale/config.hpp +++ b/contrib/restricted/boost/locale/include/boost/locale/config.hpp @@ -8,6 +8,12 @@ #define BOOST_LOCALE_CONFIG_HPP_INCLUDED #include <boost/config.hpp> +#include <boost/config/workaround.hpp> +#ifdef __has_include +# if __has_include(<version>) +# include <version> +# endif +#endif #if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_LOCALE_DYN_LINK) # ifdef BOOST_LOCALE_SOURCE @@ -82,6 +88,12 @@ #if !defined(BOOST_LOCALE_NO_SANITIZE) # define BOOST_LOCALE_NO_SANITIZE(what) #endif + +#if !defined(__cpp_lib_char8_t) || BOOST_WORKAROUND(BOOST_CLANG_VERSION, < 150000) +// No std::basic_string<char8_t> or bug in Clang: https://github.com/llvm/llvm-project/issues/55560 +# define BOOST_LOCALE_NO_CXX20_STRING8 +#endif + /// \endcond #endif // boost/locale/config.hpp diff --git a/contrib/restricted/boost/locale/include/boost/locale/date_time.hpp b/contrib/restricted/boost/locale/include/boost/locale/date_time.hpp index 46b171bc35..7666cfa109 100644 --- a/contrib/restricted/boost/locale/include/boost/locale/date_time.hpp +++ b/contrib/restricted/boost/locale/include/boost/locale/date_time.hpp @@ -11,6 +11,7 @@ #include <boost/locale/formatting.hpp> #include <boost/locale/hold_ptr.hpp> #include <boost/locale/time_zone.hpp> +#include <array> #include <locale> #include <stdexcept> #include <vector> @@ -388,14 +389,14 @@ namespace boost { namespace locale { } // namespace period - /// \brief this class that represents a set of periods, + /// \brief This class represents a set of periods. /// /// It is generally created by operations on periods: /// 1995*year + 3*month + 1*day. Note: operations are not commutative. class date_time_period_set { public: /// Default constructor - empty set - date_time_period_set() {} + date_time_period_set() = default; /// Create a set of single period with value 1 date_time_period_set(period::period_type f) { basic_[0] = date_time_period(f); } @@ -406,25 +407,21 @@ namespace boost { namespace locale { /// Append date_time_period \a f to the set void add(date_time_period f) { - size_t n = size(); - if(n < 4) + const size_t n = size(); + if(n < basic_.size()) basic_[n] = f; else periods_.push_back(f); } - /// Get number if items in list + /// Get number of items in list size_t size() const { - if(basic_[0].type == period::period_type()) - return 0; - if(basic_[1].type == period::period_type()) - return 1; - if(basic_[2].type == period::period_type()) - return 2; - if(basic_[3].type == period::period_type()) - return 3; - return 4 + periods_.size(); + for(size_t i = 0; i < basic_.size(); ++i) { + if(basic_[i].type == period::period_type()) + return i; + } + return basic_.size() + periods_.size(); } /// Get item at position \a n the set, n should be in range [0,size) @@ -432,14 +429,14 @@ namespace boost { namespace locale { { if(n >= size()) throw std::out_of_range("Invalid index to date_time_period"); - if(n < 4) + if(n < basic_.size()) return basic_[n]; else - return periods_[n - 4]; + return periods_[n - basic_.size()]; } private: - date_time_period basic_[4]; + std::array<date_time_period, 4> basic_; std::vector<date_time_period> periods_; }; @@ -707,6 +704,11 @@ namespace boost { namespace locale { hold_ptr<abstract_calendar> impl_; }; + inline void swap(date_time& left, date_time& right) noexcept + { + left.swap(right); + } + /// Writes date_time \a t to output stream \a out. /// /// This function uses locale, calendar and time zone of the target stream \a in. @@ -721,16 +723,15 @@ namespace boost { namespace locale { template<typename CharType> std::basic_ostream<CharType>& operator<<(std::basic_ostream<CharType>& out, const date_time& t) { - double time_point = t.time(); - uint64_t display_flags = ios_info::get(out).display_flags(); - if(display_flags == flags::date || display_flags == flags::time || display_flags == flags::datetime - || display_flags == flags::strftime) - { + const double time_point = t.time(); + ios_info& info = ios_info::get(out); + const uint64_t display_flags = info.display_flags(); + if(as::detail::is_datetime_display_flags(display_flags)) { out << time_point; } else { - ios_info::get(out).display_flags(flags::datetime); + info.display_flags(flags::datetime); out << time_point; - ios_info::get(out).display_flags(display_flags); + info.display_flags(display_flags); } return out; } @@ -742,10 +743,8 @@ namespace boost { namespace locale { std::basic_istream<CharType>& operator>>(std::basic_istream<CharType>& in, date_time& t) { double v; - uint64_t display_flags = ios_info::get(in).display_flags(); - if(display_flags == flags::date || display_flags == flags::time || display_flags == flags::datetime - || display_flags == flags::strftime) - { + const uint64_t display_flags = ios_info::get(in).display_flags(); + if(as::detail::is_datetime_display_flags(display_flags)) { in >> v; } else { ios_info::get(in).display_flags(flags::datetime); diff --git a/contrib/restricted/boost/locale/include/boost/locale/detail/allocator_traits.hpp b/contrib/restricted/boost/locale/include/boost/locale/detail/allocator_traits.hpp new file mode 100644 index 0000000000..8ea225f39b --- /dev/null +++ b/contrib/restricted/boost/locale/include/boost/locale/detail/allocator_traits.hpp @@ -0,0 +1,30 @@ +// +// Copyright (c) 2024 Alexander Grund +// +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#ifndef BOOST_LOCALE_DETAIL_ALLOCATOR_TRAITS_HPP_INCLUDED +#define BOOST_LOCALE_DETAIL_ALLOCATOR_TRAITS_HPP_INCLUDED + +#include <boost/locale/config.hpp> +#include <memory> +#include <type_traits> + +/// \cond INTERNAL +namespace boost { namespace locale { namespace conv { namespace detail { + template<class Alloc, typename T> + using rebind_alloc = typename std::allocator_traits<Alloc>::template rebind_alloc<T>; + + template<class Alloc, typename T, typename Result = void> + using enable_if_allocator_for = + typename std::enable_if<std::is_same<typename Alloc::value_type, T>::value, Result>::type; + template<class Alloc, typename T, class Alloc2, typename T2, typename Result = void> + using enable_if_allocator_for2 = typename std::enable_if<std::is_same<typename Alloc::value_type, T>::value + && std::is_same<typename Alloc2::value_type, T2>::value, + Result>::type; +}}}} // namespace boost::locale::conv::detail + +/// \endcond + +#endif diff --git a/contrib/restricted/boost/locale/include/boost/locale/detail/any_string.hpp b/contrib/restricted/boost/locale/include/boost/locale/detail/any_string.hpp new file mode 100644 index 0000000000..c0cc7ffb3e --- /dev/null +++ b/contrib/restricted/boost/locale/include/boost/locale/detail/any_string.hpp @@ -0,0 +1,71 @@ +// +// Copyright (c) 2023 Alexander Grund +// +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#ifndef BOOST_LOCALE_DETAIL_ANY_STRING_HPP_INCLUDED +#define BOOST_LOCALE_DETAIL_ANY_STRING_HPP_INCLUDED + +#include <boost/locale/config.hpp> +#include <boost/assert.hpp> +#include <boost/utility/string_view.hpp> +#include <memory> +#include <stdexcept> +#include <string> + +/// \cond INTERNAL +namespace boost { namespace locale { namespace detail { + /// Type-erased std::basic_string + class any_string { + struct BOOST_SYMBOL_VISIBLE base { + virtual ~base() = default; + virtual base* clone() const = 0; + + protected: + base() = default; + base(const base&) = default; + base(base&&) = delete; + base& operator=(const base&) = default; + base& operator=(base&&) = delete; + }; + template<typename Char> + struct BOOST_SYMBOL_VISIBLE impl : base { + explicit impl(const boost::basic_string_view<Char> value) : s(value) {} + impl* clone() const override { return new impl(*this); } + std::basic_string<Char> s; + }; + + std::unique_ptr<const base> s_; + + public: + any_string() = default; + any_string(const any_string& other) : s_(other.s_ ? other.s_->clone() : nullptr) {} + any_string(any_string&&) = default; + any_string& operator=(any_string other) // Covers the copy and move assignment + { + s_.swap(other.s_); + return *this; + } + + template<typename Char> + void set(const boost::basic_string_view<Char> s) + { + BOOST_ASSERT(!s.empty()); + s_.reset(new impl<Char>(s)); + } + + template<typename Char> + std::basic_string<Char> get() const + { + if(!s_) + throw std::bad_cast(); + return dynamic_cast<const impl<Char>&>(*s_).s; + } + }; + +}}} // namespace boost::locale::detail + +/// \endcond + +#endif diff --git a/contrib/restricted/boost/locale/include/boost/locale/detail/facet_id.hpp b/contrib/restricted/boost/locale/include/boost/locale/detail/facet_id.hpp index 7405149905..14ab458395 100644 --- a/contrib/restricted/boost/locale/include/boost/locale/detail/facet_id.hpp +++ b/contrib/restricted/boost/locale/include/boost/locale/detail/facet_id.hpp @@ -12,7 +12,7 @@ /// \cond INTERNAL namespace boost { namespace locale { namespace detail { -#if defined(__clang__) +#if BOOST_CLANG_VERSION >= 40900 # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wundefined-var-template" #endif @@ -25,7 +25,7 @@ namespace boost { namespace locale { namespace detail { struct BOOST_LOCALE_DECL facet_id { static std::locale::id id; }; -#if defined(__clang__) +#if BOOST_CLANG_VERSION >= 40900 # pragma clang diagnostic pop #endif }}} // namespace boost::locale::detail diff --git a/contrib/restricted/boost/locale/include/boost/locale/detail/is_supported_char.hpp b/contrib/restricted/boost/locale/include/boost/locale/detail/is_supported_char.hpp index d9fb092e5a..5c29e36d5e 100644 --- a/contrib/restricted/boost/locale/include/boost/locale/detail/is_supported_char.hpp +++ b/contrib/restricted/boost/locale/include/boost/locale/detail/is_supported_char.hpp @@ -20,6 +20,10 @@ namespace boost { namespace locale { namespace detail { struct is_supported_char<char> : std::true_type {}; template<> struct is_supported_char<wchar_t> : std::true_type {}; +#ifdef __cpp_char8_t + template<> + struct is_supported_char<char8_t> : std::true_type {}; +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T template<> diff --git a/contrib/restricted/boost/locale/include/boost/locale/encoding_utf.hpp b/contrib/restricted/boost/locale/include/boost/locale/encoding_utf.hpp index c19e67d3b8..592b0f3683 100644 --- a/contrib/restricted/boost/locale/include/boost/locale/encoding_utf.hpp +++ b/contrib/restricted/boost/locale/include/boost/locale/encoding_utf.hpp @@ -1,5 +1,6 @@ // // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh) +// Copyright (c) 2022-2024 Alexander Grund // // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt @@ -7,10 +8,13 @@ #ifndef BOOST_LOCALE_ENCODING_UTF_HPP_INCLUDED #define BOOST_LOCALE_ENCODING_UTF_HPP_INCLUDED +#include <boost/locale/detail/allocator_traits.hpp> #include <boost/locale/encoding_errors.hpp> #include <boost/locale/utf.hpp> #include <boost/locale/util/string.hpp> #include <iterator> +#include <memory> +#include <type_traits> #ifdef BOOST_MSVC # pragma warning(push) @@ -25,12 +29,13 @@ namespace boost { namespace locale { namespace conv { /// Convert a Unicode text in range [begin,end) to other Unicode encoding /// /// \throws conversion_error: Conversion failed (e.g. \a how is \c stop and any character cannot be decoded) - template<typename CharOut, typename CharIn> - std::basic_string<CharOut> utf_to_utf(const CharIn* begin, const CharIn* end, method_type how = default_method) + template<typename CharOut, typename CharIn, class Alloc = std::allocator<CharOut>> + std::basic_string<CharOut, std::char_traits<CharOut>, Alloc> + utf_to_utf(const CharIn* begin, const CharIn* end, method_type how = default_method, const Alloc& alloc = Alloc()) { - std::basic_string<CharOut> result; + std::basic_string<CharOut, std::char_traits<CharOut>, Alloc> result(alloc); result.reserve(end - begin); - std::back_insert_iterator<std::basic_string<CharOut>> inserter(result); + auto inserter = std::back_inserter(result); while(begin != end) { const utf::code_point c = utf::utf_traits<CharIn>::decode(begin, end); if(c == utf::illegal || c == utf::incomplete) { @@ -42,22 +47,97 @@ namespace boost { namespace locale { namespace conv { return result; } - /// Convert a Unicode NULL terminated string \a str other Unicode encoding + /// Convert a Unicode string \a str to other Unicode encoding. + /// Invalid characters are skipped. + template<typename CharOut, typename CharIn, class Alloc> + std::basic_string<CharOut, std::char_traits<CharOut>, Alloc> + utf_to_utf(const CharIn* begin, const CharIn* end, const Alloc& alloc) + { + return utf_to_utf<CharOut>(begin, end, skip, alloc); + } + + /// Convert a Unicode NULL terminated string \a str to other Unicode encoding + /// + /// \throws conversion_error: Conversion failed (e.g. \a how is \c stop and any character cannot be decoded) + template<typename CharOut, typename CharIn, class Alloc = std::allocator<CharOut>> + std::basic_string<CharOut, std::char_traits<CharOut>, Alloc> + utf_to_utf(const CharIn* str, method_type how = default_method, const Alloc& alloc = Alloc()) + { + return utf_to_utf<CharOut>(str, util::str_end(str), how, alloc); + } + + /// Convert a Unicode string \a str to other Unicode encoding. + /// Invalid characters are skipped. + template<typename CharOut, typename CharIn, class Alloc> +#ifndef BOOST_LOCALE_DOXYGEN + detail::enable_if_allocator_for<Alloc, + CharOut, +#endif + std::basic_string<CharOut, std::char_traits<CharOut>, Alloc> +#ifndef BOOST_LOCALE_DOXYGEN + > +#endif + utf_to_utf(const CharIn* str, const Alloc& alloc) + { + return utf_to_utf<CharOut>(str, skip, alloc); + } + + /// Convert a Unicode string \a str to other Unicode encoding /// /// \throws conversion_error: Conversion failed (e.g. \a how is \c stop and any character cannot be decoded) - template<typename CharOut, typename CharIn> - std::basic_string<CharOut> utf_to_utf(const CharIn* str, method_type how = default_method) + template<typename CharOut, typename CharIn, class Alloc> +#ifndef BOOST_LOCALE_DOXYGEN + detail::enable_if_allocator_for< + Alloc, + CharIn, +#endif + std::basic_string<CharOut, std::char_traits<CharOut>, detail::rebind_alloc<Alloc, CharOut>> +#ifndef BOOST_LOCALE_DOXYGEN + > +#endif + utf_to_utf(const std::basic_string<CharIn, std::char_traits<CharIn>, Alloc>& str, method_type how = default_method) { - return utf_to_utf<CharOut, CharIn>(str, util::str_end(str), how); + return utf_to_utf<CharOut>(str.c_str(), + str.c_str() + str.size(), + how, + detail::rebind_alloc<Alloc, CharOut>(str.get_allocator())); } - /// Convert a Unicode string \a str other Unicode encoding + /// Convert a Unicode string \a str to other Unicode encoding /// /// \throws conversion_error: Conversion failed (e.g. \a how is \c stop and any character cannot be decoded) - template<typename CharOut, typename CharIn> - std::basic_string<CharOut> utf_to_utf(const std::basic_string<CharIn>& str, method_type how = default_method) + template<typename CharOut, typename CharIn, class AllocOut, class AllocIn> +#ifndef BOOST_LOCALE_DOXYGEN + detail::enable_if_allocator_for<AllocIn, + CharIn, +#endif + std::basic_string<CharOut, std::char_traits<CharOut>, AllocOut> +#ifndef BOOST_LOCALE_DOXYGEN + > +#endif + utf_to_utf(const std::basic_string<CharIn, std::char_traits<CharIn>, AllocIn>& str, + method_type how = default_method, + const AllocOut& alloc = AllocOut()) + { + return utf_to_utf<CharOut>(str.c_str(), str.c_str() + str.size(), how, alloc); + } + + /// Convert a Unicode string \a str to other Unicode encoding. + /// Invalid characters are skipped. + template<typename CharOut, typename CharIn, class AllocOut, class AllocIn> +#ifndef BOOST_LOCALE_DOXYGEN + detail::enable_if_allocator_for2<AllocIn, + CharIn, + AllocOut, + CharOut, +#endif + std::basic_string<CharOut, std::char_traits<CharOut>, AllocOut> +#ifndef BOOST_LOCALE_DOXYGEN + > +#endif + utf_to_utf(const std::basic_string<CharIn, std::char_traits<CharIn>, AllocIn>& str, const AllocOut& alloc) { - return utf_to_utf<CharOut, CharIn>(str.c_str(), str.c_str() + str.size(), how); + return utf_to_utf<CharOut>(str, skip, alloc); } /// @} diff --git a/contrib/restricted/boost/locale/include/boost/locale/format.hpp b/contrib/restricted/boost/locale/include/boost/locale/format.hpp index 266b65c735..6adb844031 100644 --- a/contrib/restricted/boost/locale/include/boost/locale/format.hpp +++ b/contrib/restricted/boost/locale/include/boost/locale/format.hpp @@ -295,6 +295,7 @@ namespace boost { namespace locale { for(size_t pos = 0; format[pos];) { if(format[pos] != obrk) { if(format[pos] == cbrk && format[pos + 1] == cbrk) { + // Escaped closing brace out << cbrk; pos += 2; } else { @@ -305,7 +306,9 @@ namespace boost { namespace locale { } pos++; if(format[pos] == obrk) { + // Escaped opening brace out << obrk; + pos++; continue; } @@ -415,6 +418,10 @@ namespace boost { namespace locale { typedef basic_format<char> format; /// Definition of wchar_t based format typedef basic_format<wchar_t> wformat; +#ifndef BOOST_LOCALE_NO_CXX20_STRING8 + /// Definition of char8_t based format + typedef basic_format<char8_t> u8format; +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T /// Definition of char16_t based format diff --git a/contrib/restricted/boost/locale/include/boost/locale/formatting.hpp b/contrib/restricted/boost/locale/include/boost/locale/formatting.hpp index 936ce7e12d..e3c8619e48 100644 --- a/contrib/restricted/boost/locale/include/boost/locale/formatting.hpp +++ b/contrib/restricted/boost/locale/include/boost/locale/formatting.hpp @@ -8,15 +8,13 @@ #ifndef BOOST_LOCALE_FORMATTING_HPP_INCLUDED #define BOOST_LOCALE_FORMATTING_HPP_INCLUDED +#include <boost/locale/detail/any_string.hpp> #include <boost/locale/time_zone.hpp> -#include <boost/assert.hpp> -#include <boost/utility/string_view.hpp> #include <cstdint> #include <cstring> #include <istream> #include <ostream> #include <string> -#include <typeinfo> #ifdef BOOST_MSVC # pragma warning(push) @@ -130,13 +128,13 @@ namespace boost { namespace locale { template<typename CharType> void date_time_pattern(const std::basic_string<CharType>& str) { - date_time_pattern_set().set<CharType>(str); + datetime_.set<CharType>(str); } /// Get date/time pattern (strftime like) template<typename CharType> std::basic_string<CharType> date_time_pattern() const { - return date_time_pattern_set().get<CharType>(); + return datetime_.get<CharType>(); } /// \cond INTERNAL @@ -144,51 +142,10 @@ namespace boost { namespace locale { /// \endcond private: - class string_set; - - const string_set& date_time_pattern_set() const; - string_set& date_time_pattern_set(); - - class BOOST_LOCALE_DECL string_set { - public: - string_set(); - ~string_set(); - string_set(const string_set& other); - string_set& operator=(string_set other); - void swap(string_set& other); - - template<typename Char> - void set(const boost::basic_string_view<Char> s) - { - BOOST_ASSERT(!s.empty()); - delete[] ptr; - ptr = nullptr; - type = &typeid(Char); - size = sizeof(Char) * s.size(); - ptr = size ? new char[size] : nullptr; - memcpy(ptr, s.data(), size); - } - - template<typename Char> - std::basic_string<Char> get() const - { - if(type == nullptr || *type != typeid(Char)) - throw std::bad_cast(); - std::basic_string<Char> result(size / sizeof(Char), Char(0)); - memcpy(&result.front(), ptr, size); - return result; - } - - private: - const std::type_info* type; - size_t size; - char* ptr; - }; - uint64_t flags_; int domain_id_; std::string time_zone_; - string_set datetime_; + detail::any_string datetime_; }; /// \brief This namespace includes all manipulators that can be used on IO streams @@ -363,6 +320,12 @@ namespace boost { namespace locale { /// \cond INTERNAL namespace detail { + inline bool is_datetime_display_flags(const uint64_t display_flags) + { + return (display_flags == flags::date || display_flags == flags::time || display_flags == flags::datetime + || display_flags == flags::strftime); + } + template<typename CharType> struct add_ftime { std::basic_string<CharType> ftime; diff --git a/contrib/restricted/boost/locale/include/boost/locale/generator.hpp b/contrib/restricted/boost/locale/include/boost/locale/generator.hpp index f9ae9c777d..675aa604b6 100644 --- a/contrib/restricted/boost/locale/include/boost/locale/generator.hpp +++ b/contrib/restricted/boost/locale/include/boost/locale/generator.hpp @@ -35,11 +35,14 @@ namespace locale { nochar = 0, ///< Unspecified character category for character independent facets char_f = 1 << 0, ///< 8-bit character facets wchar_f = 1 << 1, ///< wide character facets +#ifdef __cpp_char8_t + char8_f = 1 << 2, ///< C++20 char8_t facets +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T - char16_f = 1 << 2, ///< C++11 char16_t facets + char16_f = 1 << 3, ///< C++11 char16_t facets #endif #ifdef BOOST_LOCALE_ENABLE_CHAR32_T - char32_f = 1 << 3, ///< C++11 char32_t facets + char32_f = 1 << 4, ///< C++11 char32_t facets #endif }; typedef BOOST_DEPRECATED("Use char_facet_t") char_facet_t character_facet_type; @@ -52,6 +55,8 @@ namespace locale { char_facet_t::char32_f; #elif defined BOOST_LOCALE_ENABLE_CHAR16_T char_facet_t::char16_f; +#elif defined __cpp_char8_t + char_facet_t::char8_f; #else char_facet_t::wchar_f; #endif diff --git a/contrib/restricted/boost/locale/include/boost/locale/generic_codecvt.hpp b/contrib/restricted/boost/locale/include/boost/locale/generic_codecvt.hpp index 449b1de728..824cc48699 100644 --- a/contrib/restricted/boost/locale/include/boost/locale/generic_codecvt.hpp +++ b/contrib/restricted/boost/locale/include/boost/locale/generic_codecvt.hpp @@ -150,7 +150,7 @@ namespace boost { namespace locale { template<typename CharType, typename CodecvtImpl, int CharSize = sizeof(CharType)> class generic_codecvt; - /// \brief UTF-16 to/from UTF-8 codecvt facet to use with char16_t or wchar_t on Windows + /// \brief UTF-16 to/from narrow char codecvt facet to use with char16_t or wchar_t on Windows /// /// Note in order to fit the requirements of usability by std::wfstream it uses mbstate_t /// to handle intermediate states in handling of variable length UTF-16 sequences @@ -344,7 +344,7 @@ namespace boost { namespace locale { } }; - /// \brief UTF-32 to/from UTF-8 codecvt facet to use with char32_t or wchar_t on POSIX platforms + /// \brief UTF-32 to/from narrow char codecvt facet to use with char32_t or wchar_t on POSIX platforms /// /// Its member functions implement standard virtual functions of basic codecvt. /// mbstate_t is not used for UTF-32 handling due to fixed length encoding @@ -456,11 +456,11 @@ namespace boost { namespace locale { } }; - template<typename CharType, typename CodecvtImpl> - class generic_codecvt<CharType, CodecvtImpl, 1> : public std::codecvt<CharType, char, std::mbstate_t>, - public generic_codecvt_base { + template<typename CodecvtImpl> + class generic_codecvt<char, CodecvtImpl, 1> : public std::codecvt<char, char, std::mbstate_t>, + public generic_codecvt_base { public: - typedef CharType uchar; + typedef char uchar; const CodecvtImpl& implementation() const { return *static_cast<const CodecvtImpl*>(this); } diff --git a/contrib/restricted/boost/locale/include/boost/locale/hold_ptr.hpp b/contrib/restricted/boost/locale/include/boost/locale/hold_ptr.hpp index c421b29013..ee4abf743b 100644 --- a/contrib/restricted/boost/locale/include/boost/locale/hold_ptr.hpp +++ b/contrib/restricted/boost/locale/include/boost/locale/hold_ptr.hpp @@ -54,15 +54,10 @@ namespace boost { namespace locale { /// Get a mutable pointer to the object T* operator->() { return ptr_; } - /// Transfer an ownership on the pointer to user - T* release() - { - T* tmp = ptr_; - ptr_ = nullptr; - return tmp; - } + /// Transfer ownership of the pointer to user + T* release() { return exchange(ptr_, nullptr); } - /// Set new value to pointer, previous object is destroyed, ownership on new object is transferred + /// Set new value to pointer, previous object is destroyed, ownership of new object is transferred void reset(T* p = nullptr) { if(ptr_) @@ -71,12 +66,7 @@ namespace boost { namespace locale { } /// Swap two pointers - void swap(hold_ptr& other) noexcept - { - T* tmp = other.ptr_; - other.ptr_ = ptr_; - ptr_ = tmp; - } + void swap(hold_ptr& other) noexcept { ptr_ = exchange(other.ptr_, ptr_); } private: T* ptr_; diff --git a/contrib/restricted/boost/locale/include/boost/locale/info.hpp b/contrib/restricted/boost/locale/include/boost/locale/info.hpp index 37b5358d5f..bb7d1728d0 100644 --- a/contrib/restricted/boost/locale/include/boost/locale/info.hpp +++ b/contrib/restricted/boost/locale/include/boost/locale/info.hpp @@ -1,5 +1,6 @@ // // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh) +// Copyright (c) 2022-2023 Alexander Grund // // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt @@ -25,7 +26,7 @@ namespace boost { namespace locale { class BOOST_SYMBOL_VISIBLE info : public std::locale::facet, public detail::facet_id<info> { public: /// String information about the locale - enum string_propery { + enum string_property { language_property, ///< ISO 639 language id country_property, ///< ISO 3166 country id variant_property, ///< Variant for locale @@ -57,7 +58,7 @@ namespace boost { namespace locale { protected: /// Get string property by its id \a v - virtual std::string get_string_property(string_propery v) const = 0; + virtual std::string get_string_property(string_property v) const = 0; /// Get integer property by its id \a v virtual int get_integer_property(integer_property v) const = 0; }; diff --git a/contrib/restricted/boost/locale/include/boost/locale/message.hpp b/contrib/restricted/boost/locale/include/boost/locale/message.hpp index b0a512c18a..88a4aefbf1 100644 --- a/contrib/restricted/boost/locale/include/boost/locale/message.hpp +++ b/contrib/restricted/boost/locale/include/boost/locale/message.hpp @@ -341,6 +341,10 @@ namespace boost { namespace locale { typedef basic_message<char> message; /// Convenience typedef for wchar_t typedef basic_message<wchar_t> wmessage; +#ifndef BOOST_LOCALE_NO_CXX20_STRING8 + /// Convenience typedef for char8_t + typedef basic_message<char8_t> u8message; +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T /// Convenience typedef for char16_t typedef basic_message<char16_t> u16message; diff --git a/contrib/restricted/boost/locale/include/boost/locale/utf8_codecvt.hpp b/contrib/restricted/boost/locale/include/boost/locale/utf8_codecvt.hpp index 797d907346..1ccd598f2b 100644 --- a/contrib/restricted/boost/locale/include/boost/locale/utf8_codecvt.hpp +++ b/contrib/restricted/boost/locale/include/boost/locale/utf8_codecvt.hpp @@ -15,7 +15,7 @@ namespace boost { namespace locale { - /// \brief Geneneric utf8 codecvt facet, it allows to convert UTF-8 strings to UTF-16 and UTF-32 using wchar_t, + /// \brief Generic utf8 codecvt facet, it allows to convert UTF-8 strings to UTF-16 and UTF-32 using wchar_t, /// char32_t and char16_t template<typename CharType> class utf8_codecvt : public generic_codecvt<CharType, utf8_codecvt<CharType>> { diff --git a/contrib/restricted/boost/locale/include/boost/locale/util.hpp b/contrib/restricted/boost/locale/include/boost/locale/util.hpp index 5eaf450556..0d486013ab 100644 --- a/contrib/restricted/boost/locale/include/boost/locale/util.hpp +++ b/contrib/restricted/boost/locale/include/boost/locale/util.hpp @@ -71,7 +71,7 @@ namespace boost { namespace locale { /// or an invalid UTF-8 sequence is found static constexpr utf::code_point illegal = utf::illegal; - /// This value is returned in following cases: The of incomplete input sequence was found or + /// This value is returned in following cases: An incomplete input sequence was found or /// insufficient output buffer was provided so complete output could not be written. static constexpr utf::code_point incomplete = utf::incomplete; @@ -114,7 +114,7 @@ namespace boost { namespace locale { virtual utf::code_point to_unicode(const char*& begin, const char* end) { if(begin == end) - return incomplete; + return incomplete; // LCOV_EXCL_LINE unsigned char cp = *begin; if(cp <= 0x7F) { begin++; @@ -136,7 +136,7 @@ namespace boost { namespace locale { virtual utf::len_or_error from_unicode(utf::code_point u, char* begin, const char* end) { if(begin == end) - return incomplete; + return incomplete; // LCOV_EXCL_LINE if(u >= 0x80) return illegal; *begin = static_cast<char>(u); diff --git a/contrib/restricted/boost/locale/include/boost/locale/util/string.hpp b/contrib/restricted/boost/locale/include/boost/locale/util/string.hpp index 9ab9521c55..ba066bd461 100644 --- a/contrib/restricted/boost/locale/include/boost/locale/util/string.hpp +++ b/contrib/restricted/boost/locale/include/boost/locale/util/string.hpp @@ -38,7 +38,7 @@ namespace boost { namespace locale { namespace util { /// Cast an unsigned char to a (possibly signed) char avoiding implementation defined behavior constexpr char to_char(unsigned char c) { - return static_cast<char>((c - std::numeric_limits<char>::min()) + std::numeric_limits<char>::min()); + return static_cast<char>((c - (std::numeric_limits<char>::min)()) + (std::numeric_limits<char>::min)()); } }}} // namespace boost::locale::util diff --git a/contrib/restricted/boost/locale/src/boost/locale/encoding/codepage.cpp b/contrib/restricted/boost/locale/src/boost/locale/encoding/codepage.cpp index 34b01395bc..0ac9659ab5 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/encoding/codepage.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/encoding/codepage.cpp @@ -224,6 +224,10 @@ namespace boost { namespace locale { namespace conv { BOOST_LOCALE_INSTANTIATE(char); BOOST_LOCALE_INSTANTIATE_NO_CHAR(wchar_t); +#ifndef BOOST_LOCALE_NO_CXX20_STRING8 + BOOST_LOCALE_INSTANTIATE_NO_CHAR(char8_t); +#endif + #ifdef BOOST_LOCALE_ENABLE_CHAR16_T BOOST_LOCALE_INSTANTIATE_NO_CHAR(char16_t); #endif diff --git a/contrib/restricted/boost/locale/src/boost/locale/encoding/iconv_converter.hpp b/contrib/restricted/boost/locale/src/boost/locale/encoding/iconv_converter.hpp index 38a8f485ea..2877dbca5e 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/encoding/iconv_converter.hpp +++ b/contrib/restricted/boost/locale/src/boost/locale/encoding/iconv_converter.hpp @@ -10,6 +10,7 @@ #include <boost/locale/encoding.hpp> #include "boost/locale/util/encoding.hpp" #include "boost/locale/util/iconv.hpp" +#include <boost/assert.hpp> #include <cerrno> #include <string> @@ -47,6 +48,7 @@ namespace boost { namespace locale { namespace conv { namespace impl { if(in_left == 0) is_unshifting = true; + const auto old_in_left = in_left; const size_t res = (!is_unshifting) ? conv(&begin, &in_left, &out_ptr, &out_left) : conv(nullptr, nullptr, &out_ptr, &out_left); @@ -60,6 +62,7 @@ namespace boost { namespace locale { namespace conv { namespace impl { if(res == (size_t)(-1)) { const int err = errno; + BOOST_ASSERT_MSG(err == EILSEQ || err == EINVAL || err == E2BIG, "Invalid error code from IConv"); if(err == EILSEQ || err == EINVAL) { if(how_ == stop) throw conversion_error(); @@ -70,9 +73,11 @@ namespace boost { namespace locale { namespace conv { namespace impl { break; } else break; - } else if(err == E2BIG) - continue; - else // Invalid error code, shouldn't ever happen or iconv has a bug + } else if(err == E2BIG) { + if(in_left != old_in_left || out_ptr != out_start) // Check to avoid infinite loop + continue; + throw std::runtime_error("No progress, IConv is faulty!"); // LCOV_EXCL_LINE + } else // Invalid error code, shouldn't ever happen or iconv has a bug throw conversion_error(); // LCOV_EXCL_LINE } if(is_unshifting) diff --git a/contrib/restricted/boost/locale/src/boost/locale/encoding/wconv_converter.hpp b/contrib/restricted/boost/locale/src/boost/locale/encoding/wconv_converter.hpp index 1a0325565e..32cd78e21a 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/encoding/wconv_converter.hpp +++ b/contrib/restricted/boost/locale/src/boost/locale/encoding/wconv_converter.hpp @@ -175,12 +175,15 @@ namespace boost { namespace locale { namespace conv { namespace impl { return false; return true; } - std::string convert(const char* begin, const char* end) override + + template<typename Char> + std::basic_string<Char> convert(const char* begin, const char* end) { + static_assert(sizeof(Char) == sizeof(char), "Not a narrow char type"); if(to_code_page_ == CP_UTF8 && from_code_page_ == CP_UTF8) - return utf_to_utf<char>(begin, end, how_); + return utf_to_utf<Char>(begin, end, how_); - std::string res; + std::basic_string<Char> res; std::vector<wchar_t> tmp; // buffer for mb2w std::wstring tmps; // buffer for utf_to_utf @@ -202,16 +205,18 @@ namespace boost { namespace locale { namespace conv { namespace impl { } if(to_code_page_ == CP_UTF8) - return utf_to_utf<char>(wbegin, wend, how_); + return utf_to_utf<Char>(wbegin, wend, how_); std::vector<char> ctmp; wide_to_multibyte(to_code_page_, wbegin, wend, how_ == skip, ctmp); if(ctmp.empty()) return res; - res.assign(ctmp.data(), ctmp.size()); + res.assign(reinterpret_cast<const Char*>(ctmp.data()), ctmp.size()); return res; } + std::string convert(const char* begin, const char* end) override { return convert<char>(begin, end); } + private: method_type how_; int to_code_page_; @@ -224,21 +229,27 @@ namespace boost { namespace locale { namespace conv { namespace impl { template<typename CharType, int size = sizeof(CharType)> class wconv_from_utf; - template<> - class wconv_to_utf<char, 1> final : public detail::utf_encoder<char> { + template<typename CharType> + class wconv_to_utf<CharType, 1> final : public detail::utf_encoder<CharType> { public: bool open(const std::string& cs, method_type how) { return cvt.open("UTF-8", cs, how); } - std::string convert(const char* begin, const char* end) override { return cvt.convert(begin, end); } + std::basic_string<CharType> convert(const char* begin, const char* end) override + { + return cvt.convert<CharType>(begin, end); + } private: wconv_between cvt; }; - template<> - class wconv_from_utf<char, 1> final : public detail::utf_decoder<char> { + template<typename CharType> + class wconv_from_utf<CharType, 1> final : public detail::utf_decoder<CharType> { public: bool open(const std::string& cs, method_type how) { return cvt.open(cs, "UTF-8", how); } - std::string convert(const char* begin, const char* end) override { return cvt.convert(begin, end); } + std::string convert(const CharType* begin, const CharType* end) override + { + return cvt.convert(reinterpret_cast<const char*>(begin), reinterpret_cast<const char*>(end)); + } private: wconv_between cvt; diff --git a/contrib/restricted/boost/locale/src/boost/locale/icu/all_generator.hpp b/contrib/restricted/boost/locale/src/boost/locale/icu/all_generator.hpp index 9c429a4b37..b2f8c34a33 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/icu/all_generator.hpp +++ b/contrib/restricted/boost/locale/src/boost/locale/icu/all_generator.hpp @@ -10,7 +10,7 @@ #include <boost/locale/generator.hpp> namespace boost { namespace locale { namespace impl_icu { - struct cdata; + class cdata; std::locale create_convert(const std::locale&, const cdata&, char_facet_t); std::locale create_collate(const std::locale&, const cdata&, char_facet_t); std::locale create_formatting(const std::locale&, const cdata&, char_facet_t); diff --git a/contrib/restricted/boost/locale/src/boost/locale/icu/boundary.cpp b/contrib/restricted/boost/locale/src/boost/locale/icu/boundary.cpp index a26dfc98cf..4adada4f42 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/icu/boundary.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/icu/boundary.cpp @@ -137,7 +137,9 @@ namespace boost { namespace locale { #if BOOST_LOCALE_ICU_VERSION >= 5502 UErrorCode err = U_ZERO_ERROR; BOOST_LOCALE_START_CONST_CONDITION - if(sizeof(CharType) == 2 || (sizeof(CharType) == 1 && util::normalize_encoding(encoding) == "utf8")) { + if(sizeof(CharType) == 2 || util::is_char8_t<CharType>::value + || (sizeof(CharType) == 1 && util::normalize_encoding(encoding) == "utf8")) + { UText ut_stack = UTEXT_INITIALIZER; std::unique_ptr<UText> ut; if(sizeof(CharType) == 1) @@ -176,7 +178,7 @@ namespace boost { namespace locale { template<typename CharType> class boundary_indexing_impl : public boundary_indexing<CharType> { public: - boundary_indexing_impl(const cdata& data) : locale_(data.locale), encoding_(data.encoding) {} + boundary_indexing_impl(const cdata& data) : locale_(data.locale()), encoding_(data.encoding()) {} index_type map(boundary_type t, const CharType* begin, const CharType* end) const { return do_map<CharType>(t, begin, end, locale_, encoding_); @@ -197,6 +199,9 @@ namespace boost { namespace locale { case char_facet_t::nochar: break; case char_facet_t::char_f: return std::locale(in, new boundary_indexing_impl<char>(cd)); case char_facet_t::wchar_f: return std::locale(in, new boundary_indexing_impl<wchar_t>(cd)); +#ifdef __cpp_char8_t + case char_facet_t::char8_f: return std::locale(in, new boundary_indexing_impl<char8_t>(cd)); +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T case char_facet_t::char16_f: return std::locale(in, new boundary_indexing_impl<char16_t>(cd)); #endif diff --git a/contrib/restricted/boost/locale/src/boost/locale/icu/cdata.hpp b/contrib/restricted/boost/locale/src/boost/locale/icu/cdata.hpp index 851a265b5a..37ce36888e 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/icu/cdata.hpp +++ b/contrib/restricted/boost/locale/src/boost/locale/icu/cdata.hpp @@ -8,14 +8,25 @@ #define BOOST_LOCALE_ICU_CDATA_HPP #include <boost/locale/config.hpp> +#include <boost/locale/util/locale_data.hpp> #include <string> #include <unicode/locid.h> namespace boost { namespace locale { namespace impl_icu { - struct cdata { - icu::Locale locale; - std::string encoding; - bool utf8; + class cdata : util::locale_data { + icu::Locale locale_; + + public: + cdata() = default; + void set(const std::string& id) + { + parse(id); + locale_ = icu::Locale::createCanonical(id.c_str()); + } + const util::locale_data& data() { return *this; } + const icu::Locale& locale() const { return locale_; } + using locale_data::encoding; + using locale_data::is_utf8; }; }}} // namespace boost::locale::impl_icu diff --git a/contrib/restricted/boost/locale/src/boost/locale/icu/codecvt.cpp b/contrib/restricted/boost/locale/src/boost/locale/icu/codecvt.cpp index 9e7de6db21..cdf958ab58 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/icu/codecvt.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/icu/codecvt.cpp @@ -95,13 +95,7 @@ namespace boost { namespace locale { namespace impl_icu { try { return util::create_simple_codecvt(in, encoding, type); } catch(const boost::locale::conv::invalid_charset_error&) { - std::unique_ptr<util::base_converter> cvt; - try { - cvt = create_uconv_converter(encoding); - } catch(const std::exception& /*e*/) { - cvt.reset(new util::base_converter()); - } - return util::create_codecvt(in, std::move(cvt), type); + return util::create_codecvt(in, create_uconv_converter(encoding), type); } } diff --git a/contrib/restricted/boost/locale/src/boost/locale/icu/collator.cpp b/contrib/restricted/boost/locale/src/boost/locale/icu/collator.cpp index 8a20950cb7..72ade74fbb 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/icu/collator.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/icu/collator.cpp @@ -11,8 +11,10 @@ #include "boost/locale/icu/icu_util.hpp" #include "boost/locale/icu/uconv.hpp" #include "boost/locale/shared/mo_hash.hpp" +#include "boost/locale/shared/std_collate_adapter.hpp" #include <boost/thread.hpp> #include <limits> +#include <memory> #include <unicode/coll.h> #include <vector> #if BOOST_LOCALE_ICU_VERSION >= 402 @@ -51,7 +53,7 @@ namespace boost { namespace locale { namespace impl_icu { { icu::StringPiece left(b1, e1 - b1); icu::StringPiece right(b2, e2 - b2); - return get_collator(level)->compareUTF8(left, right, status); + return get_collator(level).compareUTF8(left, right, status); } #endif @@ -64,7 +66,7 @@ namespace boost { namespace locale { namespace impl_icu { { icu::UnicodeString left = cvt_.icu(b1, e1); icu::UnicodeString right = cvt_.icu(b2, e2); - return get_collator(level)->compare(left, right, status); + return get_collator(level).compare(left, right, status); } int do_real_compare(collate_level level, @@ -101,11 +103,11 @@ namespace boost { namespace locale { namespace impl_icu { icu::UnicodeString str = cvt_.icu(b, e); std::vector<uint8_t> tmp; tmp.resize(str.length() + 1u); - icu::Collator* collate = get_collator(level); - const int len = collate->getSortKey(str, tmp.data(), tmp.size()); + icu::Collator& collate = get_collator(level); + const int len = collate.getSortKey(str, tmp.data(), tmp.size()); if(len > int(tmp.size())) { tmp.resize(len); - collate->getSortKey(str, tmp.data(), tmp.size()); + collate.getSortKey(str, tmp.data(), tmp.size()); } else tmp.resize(len); return tmp; @@ -124,9 +126,9 @@ namespace boost { namespace locale { namespace impl_icu { return gnu_gettext::pj_winberger_hash_function(reinterpret_cast<char*>(tmp.data())); } - collate_impl(const cdata& d) : cvt_(d.encoding), locale_(d.locale), is_utf8_(d.utf8) {} + collate_impl(const cdata& d) : cvt_(d.encoding()), locale_(d.locale()), is_utf8_(d.is_utf8()) {} - icu::Collator* get_collator(collate_level level) const + icu::Collator& get_collator(collate_level level) const { const int lvl_idx = level_to_int(level); constexpr icu::Collator::ECollationStrength levels[level_count] = {icu::Collator::PRIMARY, @@ -136,18 +138,17 @@ namespace boost { namespace locale { namespace impl_icu { icu::Collator::IDENTICAL}; icu::Collator* col = collates_[lvl_idx].get(); - if(col) - return col; - - UErrorCode status = U_ZERO_ERROR; - - collates_[lvl_idx].reset(icu::Collator::createInstance(locale_, status)); - - if(U_FAILURE(status)) - throw std::runtime_error(std::string("Creation of collate failed:") + u_errorName(status)); - - collates_[lvl_idx]->setStrength(levels[lvl_idx]); - return collates_[lvl_idx].get(); + if(!col) { + UErrorCode status = U_ZERO_ERROR; + std::unique_ptr<icu::Collator> tmp_col(icu::Collator::createInstance(locale_, status)); + if(U_FAILURE(status)) + throw std::runtime_error(std::string("Creation of collate failed:") + u_errorName(status)); + + tmp_col->setStrength(levels[lvl_idx]); + col = tmp_col.release(); + collates_[lvl_idx].reset(col); + } + return *col; } private: @@ -173,18 +174,21 @@ namespace boost { namespace locale { namespace impl_icu { return do_ustring_compare(level, b1, e1, b2, e2, status); } #endif - std::locale create_collate(const std::locale& in, const cdata& cd, char_facet_t type) { switch(type) { case char_facet_t::nochar: break; - case char_facet_t::char_f: return std::locale(in, new collate_impl<char>(cd)); - case char_facet_t::wchar_f: return std::locale(in, new collate_impl<wchar_t>(cd)); + case char_facet_t::char_f: return impl::create_collators<char, collate_impl>(in, cd); + case char_facet_t::wchar_f: return impl::create_collators<wchar_t, collate_impl>(in, cd); +#ifdef __cpp_char8_t + case char_facet_t::char8_f: + return std::locale(in, new collate_impl<char8_t>(cd)); // std-facet not available (yet) +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T - case char_facet_t::char16_f: return std::locale(in, new collate_impl<char16_t>(cd)); + case char_facet_t::char16_f: return impl::create_collators<char16_t, collate_impl>(in, cd); #endif #ifdef BOOST_LOCALE_ENABLE_CHAR32_T - case char_facet_t::char32_f: return std::locale(in, new collate_impl<char32_t>(cd)); + case char_facet_t::char32_f: return impl::create_collators<char32_t, collate_impl>(in, cd); #endif } return in; diff --git a/contrib/restricted/boost/locale/src/boost/locale/icu/conversion.cpp b/contrib/restricted/boost/locale/src/boost/locale/icu/conversion.cpp index 9f45db5cc1..c619dd94a1 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/icu/conversion.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/icu/conversion.cpp @@ -1,5 +1,6 @@ // // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh) +// Copyright (c) 2022-2023 Alexander Grund // // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt @@ -46,7 +47,7 @@ namespace boost { namespace locale { namespace impl_icu { public: typedef std::basic_string<CharType> string_type; - converter_impl(const cdata& d) : locale_(d.locale), encoding_(d.encoding) {} + converter_impl(const cdata& d) : locale_(d.locale()), encoding_(d.encoding()) {} string_type convert(converter_base::conversion_type how, const CharType* begin, @@ -55,12 +56,13 @@ namespace boost { namespace locale { namespace impl_icu { { icu_std_converter<CharType> cvt(encoding_); icu::UnicodeString str = cvt.icu(begin, end); + using conversion_type = converter_base::conversion_type; switch(how) { - case converter_base::normalization: normalize_string(str, flags); break; - case converter_base::upper_case: str.toUpper(locale_); break; - case converter_base::lower_case: str.toLower(locale_); break; - case converter_base::title_case: str.toTitle(nullptr, locale_); break; - case converter_base::case_folding: str.foldCase(); break; + case conversion_type::normalization: normalize_string(str, flags); break; + case conversion_type::upper_case: str.toUpper(locale_); break; + case conversion_type::lower_case: str.toLower(locale_); break; + case conversion_type::title_case: str.toTitle(nullptr, locale_); break; + case conversion_type::case_folding: str.foldCase(); break; } return cvt.std(str); } @@ -79,8 +81,21 @@ namespace boost { namespace locale { namespace impl_icu { using type = TSize; }; + template<typename Func> + struct is_casemap_func_const; + + template<typename Func> + struct is_casemap_func_const<Func*> : is_casemap_func_const<Func> {}; + + template<typename TRes, typename TCaseMap, typename... TArgs> + struct is_casemap_func_const<TRes(TCaseMap*, TArgs...)> : std::is_const<TCaseMap> {}; + + template<typename U8Char> class raii_casemap { public: + static_assert(sizeof(U8Char) == sizeof(char), "Not an UTF-8 char type"); + using string_type = std::basic_string<U8Char>; + raii_casemap(const raii_casemap&) = delete; void operator=(const raii_casemap&) = delete; @@ -90,73 +105,92 @@ namespace boost { namespace locale { namespace impl_icu { map_ = ucasemap_open(locale_id.c_str(), 0, &err); check_and_throw_icu_error(err); if(!map_) - throw std::runtime_error("Failed to create UCaseMap"); + throw std::runtime_error("Failed to create UCaseMap"); // LCOV_EXCL_LINE + } + ~raii_casemap() { ucasemap_close(map_); } + + template<typename Conv> + typename std::enable_if<!is_casemap_func_const<Conv>::value, string_type>::type + convert(Conv func, const U8Char* begin, const U8Char* end) + { + return do_convert(func, begin, end); + } + template<typename Conv> + typename std::enable_if<is_casemap_func_const<Conv>::value, string_type>::type + convert(Conv func, const U8Char* begin, const U8Char* end) const + { + return do_convert(func, begin, end); } + + private: template<typename Conv> - std::string convert(Conv func, const char* begin, const char* end) const + string_type do_convert(Conv func, const U8Char* begin, const U8Char* end) const { using size_type = typename get_casemap_size_type<Conv>::type; if((end - begin) >= std::numeric_limits<std::ptrdiff_t>::max() / 11) - throw std::range_error("String to long to be converted by ICU"); + throw std::range_error("String to long to be converted by ICU"); // LCOV_EXCL_LINE const auto max_converted_size = (end - begin) * 11 / 10 + 1; if(max_converted_size >= std::numeric_limits<size_type>::max()) - throw std::range_error("String to long to be converted by ICU"); - std::vector<char> buf(max_converted_size); + throw std::range_error("String to long to be converted by ICU"); // LCOV_EXCL_LINE + std::vector<U8Char> buf(max_converted_size); UErrorCode err = U_ZERO_ERROR; auto size = func(map_, - buf.data(), + reinterpret_cast<char*>(buf.data()), static_cast<size_type>(buf.size()), - begin, + reinterpret_cast<const char*>(begin), static_cast<size_type>(end - begin), &err); if(err == U_BUFFER_OVERFLOW_ERROR) { err = U_ZERO_ERROR; buf.resize(size + 1); size = func(map_, - buf.data(), + reinterpret_cast<char*>(buf.data()), static_cast<size_type>(buf.size()), - begin, + reinterpret_cast<const char*>(begin), static_cast<size_type>(end - begin), &err); } check_and_throw_icu_error(err); - return std::string(buf.data(), size); + return string_type(buf.data(), size); } - ~raii_casemap() { ucasemap_close(map_); } private: UCaseMap* map_; }; - class utf8_converter_impl : public converter<char> { + template<typename U8Char> + class utf8_converter_impl : public converter<U8Char> { public: - utf8_converter_impl(const cdata& d) : locale_id_(d.locale.getName()), map_(locale_id_) {} + static_assert(sizeof(U8Char) == sizeof(char), "Not an UTF-8 char type"); + utf8_converter_impl(const cdata& d) : locale_id_(d.locale().getName()), map_(locale_id_) {} - std::string - convert(converter_base::conversion_type how, const char* begin, const char* end, int flags = 0) const override + std::basic_string<U8Char> convert(converter_base::conversion_type how, + const U8Char* begin, + const U8Char* end, + int flags = 0) const override { switch(how) { case converter_base::upper_case: return map_.convert(ucasemap_utf8ToUpper, begin, end); case converter_base::lower_case: return map_.convert(ucasemap_utf8ToLower, begin, end); case converter_base::title_case: { // Non-const method, so need to create a separate map - raii_casemap map(locale_id_); + raii_casemap<U8Char> map(locale_id_); return map.convert(ucasemap_utf8ToTitle, begin, end); } case converter_base::case_folding: return map_.convert(ucasemap_utf8FoldCase, begin, end); case converter_base::normalization: { - icu_std_converter<char> cvt("UTF-8"); + icu_std_converter<U8Char> cvt("UTF-8"); icu::UnicodeString str = cvt.icu(begin, end); normalize_string(str, flags); return cvt.std(str); } } - return std::string(begin, end - begin); + return std::basic_string<U8Char>(begin, end - begin); // LCOV_EXCL_LINE } private: std::string locale_id_; - raii_casemap map_; + raii_casemap<U8Char> map_; }; // converter_impl #endif // BOOST_LOCALE_WITH_CASEMAP @@ -167,11 +201,21 @@ namespace boost { namespace locale { namespace impl_icu { case char_facet_t::nochar: break; case char_facet_t::char_f: #ifdef BOOST_LOCALE_WITH_CASEMAP - if(cd.utf8) - return std::locale(in, new utf8_converter_impl(cd)); + if(cd.is_utf8()) + return std::locale(in, new utf8_converter_impl<char>(cd)); #endif return std::locale(in, new converter_impl<char>(cd)); case char_facet_t::wchar_f: return std::locale(in, new converter_impl<wchar_t>(cd)); +#ifndef BOOST_LOCALE_NO_CXX20_STRING8 + case char_facet_t::char8_f: +# if defined(BOOST_LOCALE_WITH_CASEMAP) + return std::locale(in, new utf8_converter_impl<char8_t>(cd)); +# else + return std::locale(in, new converter_impl<char8_t>(cd)); +# endif +#elif defined(__cpp_char8_t) + case char_facet_t::char8_f: break; +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T case char_facet_t::char16_f: return std::locale(in, new converter_impl<char16_t>(cd)); #endif diff --git a/contrib/restricted/boost/locale/src/boost/locale/icu/date_time.cpp b/contrib/restricted/boost/locale/src/boost/locale/icu/date_time.cpp index c488390ad9..14e21d9f15 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/icu/date_time.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/icu/date_time.cpp @@ -62,13 +62,16 @@ namespace boost { namespace locale { namespace impl_icu { calendar_impl(const cdata& dat) { UErrorCode err = U_ZERO_ERROR; - calendar_.reset(icu::Calendar::createInstance(dat.locale, err)); + calendar_.reset(icu::Calendar::createInstance(dat.locale(), err)); + // Use accuracy of seconds, see #221 + const double rounded_time = std::floor(calendar_->getTime(err) / U_MILLIS_PER_SECOND) * U_MILLIS_PER_SECOND; + calendar_->setTime(rounded_time, err); check_and_throw_dt(err); #if BOOST_LOCALE_ICU_VERSION < 402 // workaround old/invalid data, it should be 4 in general calendar_->setMinimalDaysInFirstWeek(4); #endif - encoding_ = dat.encoding; + encoding_ = dat.encoding(); } calendar_impl(const calendar_impl& other) { @@ -110,13 +113,6 @@ namespace boost { namespace locale { namespace impl_icu { return v; } - void set_time(const posix_time& p) override - { - double utime = p.seconds * 1000.0 + p.nanoseconds / 1000000.0; - UErrorCode code = U_ZERO_ERROR; - calendar_->setTime(utime, code); - check_and_throw_dt(code); - } void normalize() override { // Can't call complete() explicitly (protected) @@ -125,6 +121,17 @@ namespace boost { namespace locale { namespace impl_icu { calendar_->get(UCAL_YEAR, code); check_and_throw_dt(code); } + + void set_time(const posix_time& p) override + { + // Ignore `p.nanoseconds / 1e6` for simplicity of users as there is no + // easy way to set the sub-seconds via `date_time`. + // Matches behavior of other backends that only have seconds resolution + const double utime = p.seconds * 1e3; + UErrorCode code = U_ZERO_ERROR; + calendar_->setTime(utime, code); + check_and_throw_dt(code); + } posix_time get_time() const override { const double timeMs = get_time_ms(); @@ -146,6 +153,7 @@ namespace boost { namespace locale { namespace impl_icu { check_and_throw_dt(code); return result; } + void set_option(calendar_option_type opt, int /*v*/) override { switch(opt) { diff --git a/contrib/restricted/boost/locale/src/boost/locale/icu/formatter.cpp b/contrib/restricted/boost/locale/src/boost/locale/icu/formatter.cpp index 89763d39ba..12cb73632e 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/icu/formatter.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/icu/formatter.cpp @@ -448,7 +448,7 @@ namespace boost { namespace locale { namespace impl_icu { } #define BOOST_LOCALE_INSTANTIATE(CHAR) template class formatter<CHAR>; - BOOST_LOCALE_FOREACH_CHAR(BOOST_LOCALE_INSTANTIATE) + BOOST_LOCALE_FOREACH_CHAR_STRING(BOOST_LOCALE_INSTANTIATE) }}} // namespace boost::locale::impl_icu diff --git a/contrib/restricted/boost/locale/src/boost/locale/icu/icu_backend.cpp b/contrib/restricted/boost/locale/src/boost/locale/icu/icu_backend.cpp index e5d5eb78ec..ecb78ae45c 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/icu/icu_backend.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/icu/icu_backend.cpp @@ -9,9 +9,9 @@ #include <boost/locale/gnu_gettext.hpp> #include <boost/locale/localization_backend.hpp> #include <boost/locale/util.hpp> -#include <boost/locale/util/locale_data.hpp> #include "boost/locale/icu/all_generator.hpp" #include "boost/locale/icu/cdata.hpp" +#include "boost/locale/shared/message.hpp" #include "boost/locale/util/make_std_unique.hpp" #include <unicode/ucnv.h> @@ -52,21 +52,13 @@ namespace boost { namespace locale { namespace impl_icu { if(!invalid_) return; invalid_ = false; - real_id_ = locale_id_; - if(real_id_.empty()) { - bool utf8 = !use_ansi_encoding_; - real_id_ = util::get_system_locale(utf8); - } - util::locale_data d; - d.parse(real_id_); + if(locale_id_.empty()) + real_id_ = util::get_system_locale(/*utf8*/ !use_ansi_encoding_); + else + real_id_ = locale_id_; - data_.locale = icu::Locale::createCanonical(real_id_.c_str()); - data_.encoding = d.encoding(); - data_.utf8 = d.is_utf8(); - language_ = d.language(); - country_ = d.country(); - variant_ = d.variant(); + data_.set(real_id_); } std::locale install(const std::locale& base, category_t category, char_facet_t type) override @@ -78,32 +70,9 @@ namespace boost { namespace locale { namespace impl_icu { case category_t::collation: return create_collate(base, data_, type); case category_t::formatting: return create_formatting(base, data_, type); case category_t::parsing: return create_parsing(base, data_, type); - case category_t::codepage: return create_codecvt(base, data_.encoding, type); - case category_t::message: { - gnu_gettext::messages_info minf; - minf.language = language_; - minf.country = country_; - minf.variant = variant_; - minf.encoding = data_.encoding; - minf.domains = gnu_gettext::messages_info::domains_type(domains_.begin(), domains_.end()); - minf.paths = paths_; - switch(type) { - case char_facet_t::nochar: break; - case char_facet_t::char_f: - return std::locale(base, gnu_gettext::create_messages_facet<char>(minf)); - case char_facet_t::wchar_f: - return std::locale(base, gnu_gettext::create_messages_facet<wchar_t>(minf)); -#ifdef BOOST_LOCALE_ENABLE_CHAR16_T - case char_facet_t::char16_f: - return std::locale(base, gnu_gettext::create_messages_facet<char16_t>(minf)); -#endif -#ifdef BOOST_LOCALE_ENABLE_CHAR32_T - case char_facet_t::char32_f: - return std::locale(base, gnu_gettext::create_messages_facet<char32_t>(minf)); -#endif - } - return base; - } + case category_t::codepage: return create_codecvt(base, data_.encoding(), type); + case category_t::message: + return detail::install_message_facet(base, type, data_.data(), domains_, paths_); case category_t::boundary: return create_boundary(base, data_, type); case category_t::calendar: return create_calendar(base, data_); case category_t::information: return util::create_info(base, real_id_); @@ -115,12 +84,8 @@ namespace boost { namespace locale { namespace impl_icu { std::vector<std::string> paths_; std::vector<std::string> domains_; std::string locale_id_; - - cdata data_; - std::string language_; - std::string country_; - std::string variant_; std::string real_id_; + cdata data_; bool invalid_; bool use_ansi_encoding_; }; diff --git a/contrib/restricted/boost/locale/src/boost/locale/icu/numeric.cpp b/contrib/restricted/boost/locale/src/boost/locale/icu/numeric.cpp index 963af7ba5b..d81f55f7ba 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/icu/numeric.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/icu/numeric.cpp @@ -71,7 +71,8 @@ namespace boost { namespace locale { namespace impl_icu { typedef std::basic_string<CharType> string_type; typedef formatter<CharType> formatter_type; - num_format(const cdata& d, size_t refs = 0) : std::num_put<CharType>(refs), loc_(d.locale), enc_(d.encoding) {} + num_format(const cdata& d, size_t refs = 0) : std::num_put<CharType>(refs), loc_(d.locale()), enc_(d.encoding()) + {} protected: iter_type do_put(iter_type out, std::ios_base& ios, CharType fill, long val) const override @@ -148,7 +149,8 @@ namespace boost { namespace locale { namespace impl_icu { template<typename CharType> class num_parse : public std::num_get<CharType> { public: - num_parse(const cdata& d, size_t refs = 0) : std::num_get<CharType>(refs), loc_(d.locale), enc_(d.encoding) {} + num_parse(const cdata& d, size_t refs = 0) : std::num_get<CharType>(refs), loc_(d.locale()), enc_(d.encoding()) + {} protected: typedef typename std::num_get<CharType>::iter_type iter_type; @@ -307,7 +309,7 @@ namespace boost { namespace locale { namespace impl_icu { { std::locale tmp = std::locale(in, new num_format<CharType>(cd)); if(!std::has_facet<formatters_cache>(in)) - tmp = std::locale(tmp, new formatters_cache(cd.locale)); + tmp = std::locale(tmp, new formatters_cache(cd.locale())); return tmp; } @@ -316,7 +318,7 @@ namespace boost { namespace locale { namespace impl_icu { { std::locale tmp = std::locale(in, new num_parse<CharType>(cd)); if(!std::has_facet<formatters_cache>(in)) - tmp = std::locale(tmp, new formatters_cache(cd.locale)); + tmp = std::locale(tmp, new formatters_cache(cd.locale())); return tmp; } @@ -326,6 +328,9 @@ namespace boost { namespace locale { namespace impl_icu { case char_facet_t::nochar: break; case char_facet_t::char_f: return install_formatting_facets<char>(in, cd); case char_facet_t::wchar_f: return install_formatting_facets<wchar_t>(in, cd); +#ifdef __cpp_char8_t + case char_facet_t::char8_f: break; // std-facet not available (yet) +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T case char_facet_t::char16_f: return install_formatting_facets<char16_t>(in, cd); #endif @@ -342,6 +347,9 @@ namespace boost { namespace locale { namespace impl_icu { case char_facet_t::nochar: break; case char_facet_t::char_f: return install_parsing_facets<char>(in, cd); case char_facet_t::wchar_f: return install_parsing_facets<wchar_t>(in, cd); +#ifdef __cpp_char8_t + case char_facet_t::char8_f: break; // std-facet not available (yet) +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T case char_facet_t::char16_f: return install_parsing_facets<char16_t>(in, cd); #endif diff --git a/contrib/restricted/boost/locale/src/boost/locale/icu/uconv.hpp b/contrib/restricted/boost/locale/src/boost/locale/icu/uconv.hpp index 7f3c88b5d2..6563afb627 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/icu/uconv.hpp +++ b/contrib/restricted/boost/locale/src/boost/locale/icu/uconv.hpp @@ -86,9 +86,11 @@ namespace boost { namespace locale { namespace impl_icu { int max_char_size() const { return ucnv_getMaxCharSize(cvt_); } - std::string go(const UChar* buf, int length, int max_size) const + template<typename U8Char = char> + std::basic_string<U8Char> go(const UChar* buf, int length, int max_size) const { - std::string res; + static_assert(sizeof(U8Char) == sizeof(char), "Not an UTF-8 char type"); + std::basic_string<U8Char> res; res.resize(UCNV_GET_MAX_BYTES_FOR_STRING(length, max_size)); char* ptr = reinterpret_cast<char*>(&res[0]); UErrorCode err = U_ZERO_ERROR; @@ -141,7 +143,7 @@ namespace boost { namespace locale { namespace impl_icu { string_type std(const icu::UnicodeString& str) const { - return cvt_.go(str.getBuffer(), str.length(), max_len_); + return cvt_.go<CharType>(str.getBuffer(), str.length(), max_len_); } icu_std_converter(const std::string& charset, cpcvt_type cvt_type = cpcvt_type::skip) : @@ -156,7 +158,9 @@ namespace boost { namespace locale { namespace impl_icu { size_t from_char = 0) const { size_t code_points = str.countChar32(from_u, n); - return cvt_.cut(code_points, begin + from_char, end); + return cvt_.cut(code_points, + reinterpret_cast<const char*>(begin) + from_char, + reinterpret_cast<const char*>(end)); } private: diff --git a/contrib/restricted/boost/locale/src/boost/locale/posix/collate.cpp b/contrib/restricted/boost/locale/src/boost/locale/posix/collate.cpp index e5c46ac248..c9fb0251ff 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/posix/collate.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/posix/collate.cpp @@ -83,6 +83,9 @@ namespace boost { namespace locale { namespace impl_posix { case char_facet_t::nochar: break; case char_facet_t::char_f: return std::locale(in, new collator<char>(std::move(lc))); case char_facet_t::wchar_f: return std::locale(in, new collator<wchar_t>(std::move(lc))); +#ifdef __cpp_char8_t + case char_facet_t::char8_f: break; // std-facet not available (yet) +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T case char_facet_t::char16_f: return std::locale(in, new collator<char16_t>(std::move(lc))); #endif diff --git a/contrib/restricted/boost/locale/src/boost/locale/posix/converter.cpp b/contrib/restricted/boost/locale/src/boost/locale/posix/converter.cpp index f769c7259e..b787a562c5 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/posix/converter.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/posix/converter.cpp @@ -74,37 +74,41 @@ namespace boost { namespace locale { namespace impl_posix { std::shared_ptr<locale_t> lc_; }; - class utf8_converter : public converter<char> { + template<typename U8Char> + class utf8_converter : public converter<U8Char> { public: - utf8_converter(std::shared_ptr<locale_t> lc, size_t refs = 0) : converter<char>(refs), lc_(std::move(lc)) {} - std::string convert(converter_base::conversion_type how, - const char* begin, - const char* end, - int /*flags*/ = 0) const override + static_assert(sizeof(U8Char) == sizeof(char), "Not an UTF-8 char type"); + + utf8_converter(std::shared_ptr<locale_t> lc, size_t refs = 0) : converter<U8Char>(refs), lc_(std::move(lc)) {} + std::basic_string<U8Char> convert(converter_base::conversion_type how, + const U8Char* begin, + const U8Char* end, + int /*flags*/ = 0) const override { + using conversion_type = converter_base::conversion_type; switch(how) { - case upper_case: { + case conversion_type::upper_case: { const std::wstring tmp = conv::utf_to_utf<wchar_t>(begin, end); std::wstring wres; wres.reserve(tmp.size()); for(const wchar_t c : tmp) wres += towupper_l(c, *lc_); - return conv::utf_to_utf<char>(wres); + return conv::utf_to_utf<U8Char>(wres); } - case lower_case: - case case_folding: { + case conversion_type::lower_case: + case conversion_type::case_folding: { const std::wstring tmp = conv::utf_to_utf<wchar_t>(begin, end); std::wstring wres; wres.reserve(tmp.size()); for(const wchar_t c : tmp) wres += towlower_l(c, *lc_); - return conv::utf_to_utf<char>(wres); + return conv::utf_to_utf<U8Char>(wres); } - case normalization: - case title_case: break; + case conversion_type::normalization: + case conversion_type::title_case: break; } - return std::string(begin, end - begin); + return std::basic_string<U8Char>(begin, end - begin); } private: @@ -117,10 +121,15 @@ namespace boost { namespace locale { namespace impl_posix { case char_facet_t::nochar: break; case char_facet_t::char_f: { if(util::normalize_encoding(nl_langinfo_l(CODESET, *lc)) == "utf8") - return std::locale(in, new utf8_converter(std::move(lc))); + return std::locale(in, new utf8_converter<char>(std::move(lc))); return std::locale(in, new std_converter<char>(std::move(lc))); } case char_facet_t::wchar_f: return std::locale(in, new std_converter<wchar_t>(std::move(lc))); +#ifndef BOOST_LOCALE_NO_CXX20_STRING8 + case char_facet_t::char8_f: return std::locale(in, new utf8_converter<char8_t>(std::move(lc))); +#elif defined(__cpp_char8_t) + case char_facet_t::char8_f: break; +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T case char_facet_t::char16_f: return std::locale(in, new std_converter<char16_t>(std::move(lc))); #endif diff --git a/contrib/restricted/boost/locale/src/boost/locale/posix/numeric.cpp b/contrib/restricted/boost/locale/src/boost/locale/posix/numeric.cpp index 031ce81463..a3ee2c4055 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/posix/numeric.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/posix/numeric.cpp @@ -405,6 +405,9 @@ namespace boost { namespace locale { namespace impl_posix { case char_facet_t::nochar: break; case char_facet_t::char_f: return create_formatting_impl<char>(in, std::move(lc)); case char_facet_t::wchar_f: return create_formatting_impl<wchar_t>(in, std::move(lc)); +#ifdef __cpp_char8_t + case char_facet_t::char8_f: break; // std-facet not available (yet) +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T case char_facet_t::char16_f: return create_formatting_impl<char16_t>(in, lc); #endif @@ -421,6 +424,9 @@ namespace boost { namespace locale { namespace impl_posix { case char_facet_t::nochar: break; case char_facet_t::char_f: return create_parsing_impl<char>(in, std::move(lc)); case char_facet_t::wchar_f: return create_parsing_impl<wchar_t>(in, std::move(lc)); +#ifdef __cpp_char8_t + case char_facet_t::char8_f: break; // std-facet not available (yet) +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T case char_facet_t::char16_f: return create_parsing_impl<char16_t>(in, lc); #endif diff --git a/contrib/restricted/boost/locale/src/boost/locale/posix/posix_backend.cpp b/contrib/restricted/boost/locale/src/boost/locale/posix/posix_backend.cpp index 14d864bbf9..020d0c77e0 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/posix/posix_backend.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/posix/posix_backend.cpp @@ -20,6 +20,7 @@ #endif #include "boost/locale/posix/all_generator.hpp" +#include "boost/locale/shared/message.hpp" #include "boost/locale/util/gregorian.hpp" #include "boost/locale/util/make_std_unique.hpp" @@ -62,12 +63,11 @@ namespace boost { namespace locale { namespace impl_posix { { if(!invalid_) return; - invalid_ = false; - lc_.reset(); - real_id_ = locale_id_; - if(real_id_.empty()) - real_id_ = util::get_system_locale(); + real_id_ = locale_id_.empty() ? util::get_system_locale() : locale_id_; + data_.parse(real_id_); + + lc_.reset(); locale_t tmp = newlocale(LC_ALL_MASK, real_id_.c_str(), nullptr); if(!tmp) tmp = newlocale(LC_ALL_MASK, "C", nullptr); @@ -82,6 +82,7 @@ namespace boost { namespace locale { namespace impl_posix { throw; } lc_ = std::shared_ptr<locale_t>(tmp_p, free_locale_by_ptr); + invalid_ = false; } std::locale install(const std::locale& base, category_t category, char_facet_t type) override @@ -94,40 +95,8 @@ namespace boost { namespace locale { namespace impl_posix { case category_t::formatting: return create_formatting(base, lc_, type); case category_t::parsing: return create_parsing(base, lc_, type); case category_t::codepage: return create_codecvt(base, nl_langinfo_l(CODESET, *lc_), type); - case category_t::calendar: { - util::locale_data inf; - inf.parse(real_id_); - return util::install_gregorian_calendar(base, inf.country()); - } - case category_t::message: { - gnu_gettext::messages_info minf; - util::locale_data inf; - inf.parse(real_id_); - minf.language = inf.language(); - minf.country = inf.country(); - minf.variant = inf.variant(); - minf.encoding = inf.encoding(); - std::copy(domains_.begin(), - domains_.end(), - std::back_inserter<gnu_gettext::messages_info::domains_type>(minf.domains)); - minf.paths = paths_; - switch(type) { - case char_facet_t::nochar: break; - case char_facet_t::char_f: - return std::locale(base, gnu_gettext::create_messages_facet<char>(minf)); - case char_facet_t::wchar_f: - return std::locale(base, gnu_gettext::create_messages_facet<wchar_t>(minf)); -#ifdef BOOST_LOCALE_ENABLE_CHAR16_T - case char_facet_t::char16_f: - return std::locale(base, gnu_gettext::create_messages_facet<char16_t>(minf)); -#endif -#ifdef BOOST_LOCALE_ENABLE_CHAR32_T - case char_facet_t::char32_f: - return std::locale(base, gnu_gettext::create_messages_facet<char32_t>(minf)); -#endif - } - return base; - } + case category_t::calendar: return util::install_gregorian_calendar(base, data_.country()); + case category_t::message: return detail::install_message_facet(base, type, data_, domains_, paths_); case category_t::information: return util::create_info(base, real_id_); case category_t::boundary: break; // Not implemented } @@ -139,6 +108,7 @@ namespace boost { namespace locale { namespace impl_posix { std::vector<std::string> domains_; std::string locale_id_; std::string real_id_; + util::locale_data data_; bool invalid_; std::shared_ptr<locale_t> lc_; diff --git a/contrib/restricted/boost/locale/src/boost/locale/shared/date_time.cpp b/contrib/restricted/boost/locale/src/boost/locale/shared/date_time.cpp index 60f96feb7b..c418406d18 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/shared/date_time.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/shared/date_time.cpp @@ -1,9 +1,14 @@ // // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh) +// Copyright (c) 2022-2023 Alexander Grund // // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt +#ifndef NOMINMAX +# define NOMINMAX +#endif + #include <boost/locale/date_time.hpp> #include <boost/locale/formatting.hpp> #include <boost/core/exchange.hpp> @@ -299,22 +304,23 @@ namespace boost { namespace locale { void date_time::time(double v) { + constexpr int64_t ns_in_s = static_cast<int64_t>(1000) * 1000 * 1000; + double seconds; const double fract_seconds = std::modf(v, &seconds); // v = seconds + fract_seconds posix_time ptime; ptime.seconds = static_cast<int64_t>(seconds); - int64_t nano = static_cast<int64_t>(fract_seconds * 1e9); + int64_t nano = static_cast<int64_t>(fract_seconds * ns_in_s); - constexpr int64_t ns_in_s = static_cast<int64_t>(1000) * 1000 * 1000; - if(seconds < 0 && nano != 0) { - assert(nano < 0); // Same sign - seconds -= 1; - nano = ns_in_s + nano; - } - if(nano < 0) - nano = 0; - else if(nano >= ns_in_s) - nano = ns_in_s - 1; + if(nano < 0) { + // Add 1s from seconds to nano to make nano positive + ptime.seconds -= 1; + nano = std::max(int64_t(0), nano + ns_in_s); // std::max to handle rounding issues + } else if(nano >= ns_in_s) // Unlikely rounding issue, when fract_seconds is close to 1. + nano = ns_in_s - 1; // LCOV_EXCL_LINE + + BOOST_ASSERT(nano < ns_in_s); + static_assert(ns_in_s <= std::numeric_limits<uint32_t>::max(), "Insecure cast"); ptime.nanoseconds = static_cast<uint32_t>(nano); impl_->set_time(ptime); } @@ -418,3 +424,5 @@ namespace boost { namespace locale { } // namespace time_zone }} // namespace boost::locale + +// boostinspect:nominmax diff --git a/contrib/restricted/boost/locale/src/boost/locale/shared/formatting.cpp b/contrib/restricted/boost/locale/src/boost/locale/shared/formatting.cpp index 489d1fd5a0..457ba782e9 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/shared/formatting.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/shared/formatting.cpp @@ -7,43 +7,8 @@ #include <boost/locale/date_time.hpp> #include <boost/locale/formatting.hpp> #include "boost/locale/shared/ios_prop.hpp" -#include <algorithm> -#include <typeinfo> namespace boost { namespace locale { - - ios_info::string_set::string_set() : type(nullptr), size(0), ptr(nullptr) {} - ios_info::string_set::~string_set() - { - delete[] ptr; - } - ios_info::string_set::string_set(const string_set& other) - { - if(other.ptr != nullptr) { - ptr = new char[other.size]; - size = other.size; - type = other.type; - memcpy(ptr, other.ptr, size); - } else { - ptr = nullptr; - size = 0; - type = nullptr; - } - } - - void ios_info::string_set::swap(string_set& other) - { - std::swap(type, other.type); - std::swap(size, other.size); - std::swap(ptr, other.ptr); - } - - ios_info::string_set& ios_info::string_set::operator=(string_set other) - { - swap(other); - return *this; - } - ios_info::ios_info() : flags_(0), domain_id_(0), time_zone_(time_zone::global()) {} ios_info::~ios_info() = default; @@ -105,16 +70,6 @@ namespace boost { namespace locale { return time_zone_; } - const ios_info::string_set& ios_info::date_time_pattern_set() const - { - return datetime_; - } - - ios_info::string_set& ios_info::date_time_pattern_set() - { - return datetime_; - } - ios_info& ios_info::get(std::ios_base& ios) { return impl::ios_prop<ios_info>::get(ios); diff --git a/contrib/restricted/boost/locale/src/boost/locale/shared/iconv_codecvt.cpp b/contrib/restricted/boost/locale/src/boost/locale/shared/iconv_codecvt.cpp index d34cb738be..2ed618a0ae 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/shared/iconv_codecvt.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/shared/iconv_codecvt.cpp @@ -42,7 +42,7 @@ namespace boost { namespace locale { insize = 1; outsize = sizeof(obuf); call_iconv(d, nullptr, nullptr, nullptr, nullptr); - size_t res = call_iconv(d, ibuf, &insize, reinterpret_cast<char*>(obuf), &outsize); + const size_t res = call_iconv(d, ibuf, &insize, reinterpret_cast<char*>(obuf), &outsize); // Now if this single byte starts a sequence we add incomplete // to know to ask that we need two bytes, otherwise it may only be illegal @@ -118,15 +118,14 @@ namespace boost { namespace locale { const utf::code_point inbuf[2] = {cp, 0}; size_t insize = sizeof(inbuf); char outseq[3] = {0}; - size_t outsize = 3; + size_t outsize = sizeof(outseq); call_iconv(from_utf_, reinterpret_cast<const char*>(inbuf), &insize, outseq, &outsize); - if(insize != 0 || outsize > 1) + if(insize != 0 || outsize == sizeof(outseq)) return illegal; - const size_t len = 2 - outsize; - const size_t reminder = end - begin; - if(reminder < len) + const size_t len = sizeof(outseq) - outsize - 1; // Skip trailing NULL + if(static_cast<std::ptrdiff_t>(len) > end - begin) return incomplete; for(unsigned i = 0; i < len; i++) *begin++ = outseq[i]; diff --git a/contrib/restricted/boost/locale/src/boost/locale/shared/ids.cpp b/contrib/restricted/boost/locale/src/boost/locale/shared/ids.cpp index 95a64ff19a..819de7f993 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/shared/ids.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/shared/ids.cpp @@ -1,5 +1,6 @@ // // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh) +// Copyright (c) 2024 Alexander Grund // // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt @@ -24,6 +25,7 @@ namespace boost { namespace locale { BOOST_LOCALE_DEFINE_ID(calendar_facet); #define BOOST_LOCALE_INSTANTIATE(CHARTYPE) \ + BOOST_LOCALE_DEFINE_ID(collator<CHARTYPE>); \ BOOST_LOCALE_DEFINE_ID(converter<CHARTYPE>); \ BOOST_LOCALE_DEFINE_ID(message_format<CHARTYPE>); \ BOOST_LOCALE_DEFINE_ID(boundary::boundary_indexing<CHARTYPE>); @@ -48,6 +50,7 @@ namespace boost { namespace locale { void init_by(const std::locale& l) { init_facet<boundary::boundary_indexing<Char>>(l); + init_facet<collator<Char>>(l); init_facet<converter<Char>>(l); init_facet<message_format<Char>>(l); } diff --git a/contrib/restricted/boost/locale/src/boost/locale/shared/message.cpp b/contrib/restricted/boost/locale/src/boost/locale/shared/message.cpp index 75dd905b09..da8b4b934f 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/shared/message.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/shared/message.cpp @@ -20,6 +20,7 @@ #include <boost/locale/encoding.hpp> #include <boost/locale/message.hpp> +#include "boost/locale/shared/message.hpp" #include "boost/locale/shared/mo_hash.hpp" #include "boost/locale/shared/mo_lambda.hpp" #include "boost/locale/util/encoding.hpp" @@ -242,14 +243,26 @@ namespace boost { namespace locale { namespace gnu_gettext { template<> struct mo_file_use_traits<char> { static constexpr bool in_use = true; - typedef char CharType; - using string_view_type = basic_string_view<CharType>; + using string_view_type = basic_string_view<char>; static string_view_type use(const mo_file& mo, const char* context, const char* key) { return mo.find(context, key); } }; +#ifdef __cpp_char8_t + template<> + struct mo_file_use_traits<char8_t> { + static constexpr bool in_use = true; + using string_view_type = basic_string_view<char8_t>; + static string_view_type use(const mo_file& mo, const char8_t* context, const char8_t* key) + { + string_view res = mo.find(reinterpret_cast<const char*>(context), reinterpret_cast<const char*>(key)); + return {reinterpret_cast<const char8_t*>(res.data()), res.size()}; + } + }; +#endif + template<typename CharType> class converter : conv::utf_encoder<CharType> { using encoder = conv::utf_encoder<CharType>; @@ -467,7 +480,7 @@ namespace boost { namespace locale { namespace gnu_gettext { domain_data_type& data, const messages_info::callback_type& callback) { - locale_encoding_ = locale_encoding; + locale_encoding_ = util::is_char8_t<CharType>::value ? "UTF-8" : locale_encoding; key_encoding_ = key_encoding; key_conversion_required_ = @@ -585,6 +598,40 @@ namespace boost { namespace locale { namespace gnu_gettext { #define BOOST_LOCALE_INSTANTIATE(CHARTYPE) \ template BOOST_LOCALE_DECL message_format<CHARTYPE>* create_messages_facet(const messages_info& info); - BOOST_LOCALE_FOREACH_CHAR(BOOST_LOCALE_INSTANTIATE) + BOOST_LOCALE_FOREACH_CHAR_STRING(BOOST_LOCALE_INSTANTIATE) }}} // namespace boost::locale::gnu_gettext + +namespace boost { namespace locale { namespace detail { + std::locale install_message_facet(const std::locale& in, + const char_facet_t type, + const util::locale_data& data, + const std::vector<std::string>& domains, + const std::vector<std::string>& paths) + { + gnu_gettext::messages_info minf; + minf.language = data.language(); + minf.country = data.country(); + minf.variant = data.variant(); + minf.encoding = data.encoding(); + minf.domains = gnu_gettext::messages_info::domains_type(domains.begin(), domains.end()); + minf.paths = paths; + switch(type) { + case char_facet_t::nochar: break; + case char_facet_t::char_f: return std::locale(in, gnu_gettext::create_messages_facet<char>(minf)); + case char_facet_t::wchar_f: return std::locale(in, gnu_gettext::create_messages_facet<wchar_t>(minf)); +#ifndef BOOST_LOCALE_NO_CXX20_STRING8 + case char_facet_t::char8_f: return std::locale(in, gnu_gettext::create_messages_facet<char8_t>(minf)); +#elif defined(__cpp_char8_t) + case char_facet_t::char8_f: break; +#endif +#ifdef BOOST_LOCALE_ENABLE_CHAR16_T + case char_facet_t::char16_f: return std::locale(in, gnu_gettext::create_messages_facet<char16_t>(minf)); +#endif +#ifdef BOOST_LOCALE_ENABLE_CHAR32_T + case char_facet_t::char32_f: return std::locale(in, gnu_gettext::create_messages_facet<char32_t>(minf)); +#endif + } + return in; + } +}}} // namespace boost::locale::detail diff --git a/contrib/restricted/boost/locale/src/boost/locale/shared/message.hpp b/contrib/restricted/boost/locale/src/boost/locale/shared/message.hpp new file mode 100644 index 0000000000..a68cefcab6 --- /dev/null +++ b/contrib/restricted/boost/locale/src/boost/locale/shared/message.hpp @@ -0,0 +1,24 @@ +// +// Copyright (c) 2023 Alexander Grund +// +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#ifndef BOOST_LOCALE_SHARED_MESSAGE_HPP +#define BOOST_LOCALE_SHARED_MESSAGE_HPP + +#include <boost/locale/generator.hpp> +#include <boost/locale/util/locale_data.hpp> +#include <locale> +#include <string> +#include <vector> + +namespace boost { namespace locale { namespace detail { + std::locale install_message_facet(const std::locale& in, + char_facet_t type, + const util::locale_data& data, + const std::vector<std::string>& domains, + const std::vector<std::string>& paths); +}}} // namespace boost::locale::detail + +#endif diff --git a/contrib/restricted/boost/locale/src/boost/locale/shared/mo_lambda.cpp b/contrib/restricted/boost/locale/src/boost/locale/shared/mo_lambda.cpp index a6d2eb6a44..7b37ca91e8 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/shared/mo_lambda.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/shared/mo_lambda.cpp @@ -22,7 +22,7 @@ namespace boost { namespace locale { namespace gnu_gettext { namespace lambda { namespace { // anon template<class TExp, typename... Ts> - expr_ptr make_expr(Ts... ts) + expr_ptr make_expr(Ts&&... ts) { return expr_ptr(new TExp(std::forward<Ts>(ts)...)); } diff --git a/contrib/restricted/boost/locale/src/boost/locale/shared/std_collate_adapter.hpp b/contrib/restricted/boost/locale/src/boost/locale/shared/std_collate_adapter.hpp new file mode 100644 index 0000000000..ee4ff43b8c --- /dev/null +++ b/contrib/restricted/boost/locale/src/boost/locale/shared/std_collate_adapter.hpp @@ -0,0 +1,58 @@ +// +// Copyright (c) 2024 Alexander Grund +// +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#ifndef BOOST_LOCALE_STD_COLLATE_ADAPTER_HPP +#define BOOST_LOCALE_STD_COLLATE_ADAPTER_HPP + +#include <boost/locale/collator.hpp> +#include <locale> +#include <utility> + +namespace boost { namespace locale { namespace impl { + + template<typename CharT, class Base> + class BOOST_SYMBOL_VISIBLE std_collate_adapter : public std::collate<CharT> { + public: + using typename std::collate<CharT>::string_type; + + template<typename... TArgs> + explicit std_collate_adapter(TArgs&&... args) : base_(std::forward<TArgs>(args)...) + {} + + protected: + int do_compare(const CharT* beg1, const CharT* end1, const CharT* beg2, const CharT* end2) const override + { + return base_.compare(collate_level::identical, beg1, end1, beg2, end2); + } + + string_type do_transform(const CharT* beg, const CharT* end) const override + { + return base_.transform(collate_level::identical, beg, end); + } + long do_hash(const CharT* beg, const CharT* end) const override + { + return base_.hash(collate_level::identical, beg, end); + } + Base base_; + }; + + template<typename CharType, class CollatorImpl, typename... TArgs> + static std::locale create_collators(const std::locale& in, TArgs&&... args) + { + static_assert(std::is_base_of<collator<CharType>, CollatorImpl>::value, "Must be a collator implementation"); + std::locale res(in, new CollatorImpl(args...)); + return std::locale(res, new std_collate_adapter<CharType, CollatorImpl>(args...)); + } + + template<typename CharType, template<typename> class CollatorImpl, typename... TArgs> + static std::locale create_collators(const std::locale& in, TArgs&&... args) + { + return create_collators<CharType, CollatorImpl<CharType>>(in, args...); + } + +}}} // namespace boost::locale::impl + +#endif diff --git a/contrib/restricted/boost/locale/src/boost/locale/std/codecvt.cpp b/contrib/restricted/boost/locale/src/boost/locale/std/codecvt.cpp index 95a5171fe3..22af5d7639 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/std/codecvt.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/std/codecvt.cpp @@ -32,6 +32,9 @@ namespace boost { namespace locale { namespace impl_std { case char_facet_t::nochar: break; case char_facet_t::char_f: return codecvt_bychar<char>(in, locale_name); case char_facet_t::wchar_f: return codecvt_bychar<wchar_t>(in, locale_name); +#ifdef __cpp_char8_t + case char_facet_t::char8_f: break; // std-facet not available (yet) +#endif #if defined(BOOST_LOCALE_ENABLE_CHAR16_T) case char_facet_t::char16_f: return codecvt_bychar<char16_t>(in, locale_name); #endif diff --git a/contrib/restricted/boost/locale/src/boost/locale/std/collate.cpp b/contrib/restricted/boost/locale/src/boost/locale/std/collate.cpp index ee249bfa5f..48d80bcc97 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/std/collate.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/std/collate.cpp @@ -90,10 +90,12 @@ namespace boost { namespace locale { namespace impl_std { case char_facet_t::wchar_f: return std::locale(in, new std::collate_byname<wchar_t>(locale_name)); +#ifdef __cpp_char8_t + case char_facet_t::char8_f: break; // std-facet not available (yet) +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T case char_facet_t::char16_f: return std::locale(in, new std::collate_byname<char16_t>(locale_name)); #endif - #ifdef BOOST_LOCALE_ENABLE_CHAR32_T case char_facet_t::char32_f: return std::locale(in, new std::collate_byname<char32_t>(locale_name)); #endif diff --git a/contrib/restricted/boost/locale/src/boost/locale/std/converter.cpp b/contrib/restricted/boost/locale/src/boost/locale/std/converter.cpp index 477c76f657..ce08606b06 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/std/converter.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/std/converter.cpp @@ -54,35 +54,39 @@ namespace boost { namespace locale { namespace impl_std { std::locale base_; }; - class utf8_converter : public converter<char> { + template<typename U8Char> + class utf8_converter : public converter<U8Char> { public: + typedef std::basic_string<U8Char> string_type; typedef std::ctype<wchar_t> wctype_type; + utf8_converter(const std::string& locale_name) : base_(std::locale::classic(), new std::ctype_byname<wchar_t>(locale_name)) {} - std::string convert(converter_base::conversion_type how, - const char* begin, - const char* end, + string_type convert(converter_base::conversion_type how, + const U8Char* begin, + const U8Char* end, int /*flags*/ = 0) const override { + using conversion_type = converter_base::conversion_type; switch(how) { - case upper_case: - case lower_case: - case case_folding: { + case conversion_type::upper_case: + case conversion_type::lower_case: + case conversion_type::case_folding: { std::wstring tmp = conv::utf_to_utf<wchar_t>(begin, end); const wctype_type& ct = std::use_facet<wctype_type>(base_); wchar_t* lbegin = &tmp.front(); const size_t len = tmp.size(); - if(how == upper_case) + if(how == conversion_type::upper_case) ct.toupper(lbegin, lbegin + len); else ct.tolower(lbegin, lbegin + len); - return conv::utf_to_utf<char>(lbegin, lbegin + len); + return conv::utf_to_utf<U8Char>(lbegin, lbegin + len); } - case title_case: - case normalization: break; + case conversion_type::title_case: + case conversion_type::normalization: break; } - return std::string(begin, end - begin); + return string_type(begin, end - begin); } private: @@ -96,10 +100,15 @@ namespace boost { namespace locale { namespace impl_std { case char_facet_t::nochar: break; case char_facet_t::char_f: if(utf != utf8_support::none) - return std::locale(in, new utf8_converter(locale_name)); + return std::locale(in, new utf8_converter<char>(locale_name)); else return std::locale(in, new std_converter<char>(locale_name)); case char_facet_t::wchar_f: return std::locale(in, new std_converter<wchar_t>(locale_name)); +#ifndef BOOST_LOCALE_NO_CXX20_STRING8 + case char_facet_t::char8_f: return std::locale(in, new utf8_converter<char8_t>(locale_name)); +#elif defined(__cpp_char8_t) + case char_facet_t::char8_f: break; +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T case char_facet_t::char16_f: return std::locale(in, new std_converter<char16_t>(locale_name)); #endif diff --git a/contrib/restricted/boost/locale/src/boost/locale/std/numeric.cpp b/contrib/restricted/boost/locale/src/boost/locale/std/numeric.cpp index d8c7d5aff8..fe3dc09515 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/std/numeric.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/std/numeric.cpp @@ -274,6 +274,9 @@ namespace boost { namespace locale { namespace impl_std { } else return create_basic_formatting<char>(in, locale_name); case char_facet_t::wchar_f: return create_basic_formatting<wchar_t>(in, locale_name); +#ifdef __cpp_char8_t + case char_facet_t::char8_f: break; // std-facet not available (yet) +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T case char_facet_t::char16_f: return create_basic_formatting<char16_t>(in, locale_name); #endif @@ -300,6 +303,9 @@ namespace boost { namespace locale { namespace impl_std { } else return create_basic_parsing<char>(in, locale_name); case char_facet_t::wchar_f: return create_basic_parsing<wchar_t>(in, locale_name); +#ifdef __cpp_char8_t + case char_facet_t::char8_f: break; // std-facet not available (yet) +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T case char_facet_t::char16_f: return create_basic_parsing<char16_t>(in, locale_name); #endif diff --git a/contrib/restricted/boost/locale/src/boost/locale/std/std_backend.cpp b/contrib/restricted/boost/locale/src/boost/locale/std/std_backend.cpp index 7b70e8a9f8..4a134c2584 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/std/std_backend.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/std/std_backend.cpp @@ -23,6 +23,7 @@ # include "boost/locale/win32/lcid.hpp" # include <windows.h> #endif +#include "boost/locale/shared/message.hpp" #include "boost/locale/std/all_generator.hpp" #include "boost/locale/util/encoding.hpp" #include "boost/locale/util/gregorian.hpp" @@ -177,33 +178,7 @@ namespace boost { namespace locale { namespace impl_std { case category_t::parsing: return create_parsing(base, name_, type, utf_mode_); case category_t::codepage: return create_codecvt(base, name_, type, utf_mode_); case category_t::calendar: return util::install_gregorian_calendar(base, data_.country()); - case category_t::message: { - gnu_gettext::messages_info minf; - minf.language = data_.language(); - minf.country = data_.country(); - minf.variant = data_.variant(); - minf.encoding = data_.encoding(); - std::copy(domains_.begin(), - domains_.end(), - std::back_inserter<gnu_gettext::messages_info::domains_type>(minf.domains)); - minf.paths = paths_; - switch(type) { - case char_facet_t::nochar: break; - case char_facet_t::char_f: - return std::locale(base, gnu_gettext::create_messages_facet<char>(minf)); - case char_facet_t::wchar_f: - return std::locale(base, gnu_gettext::create_messages_facet<wchar_t>(minf)); -#ifdef BOOST_LOCALE_ENABLE_CHAR16_T - case char_facet_t::char16_f: - return std::locale(base, gnu_gettext::create_messages_facet<char16_t>(minf)); -#endif -#ifdef BOOST_LOCALE_ENABLE_CHAR32_T - case char_facet_t::char32_f: - return std::locale(base, gnu_gettext::create_messages_facet<char32_t>(minf)); -#endif - } - return base; - } + case category_t::message: return detail::install_message_facet(base, type, data_, domains_, paths_); case category_t::information: return util::create_info(base, in_use_id_); case category_t::boundary: break; // Not implemented } diff --git a/contrib/restricted/boost/locale/src/boost/locale/util/codecvt_converter.cpp b/contrib/restricted/boost/locale/src/boost/locale/util/codecvt_converter.cpp index 7ad9846d23..b1cf9df9a9 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/util/codecvt_converter.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/util/codecvt_converter.cpp @@ -275,6 +275,9 @@ namespace boost { namespace locale { namespace util { case char_facet_t::nochar: break; case char_facet_t::char_f: return do_create_codecvt<char>(in, std::move(cvt)); case char_facet_t::wchar_f: return do_create_codecvt<wchar_t>(in, std::move(cvt)); +#ifdef __cpp_char8_t + case char_facet_t::char8_f: break; // No std facet +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T case char_facet_t::char16_f: return do_create_codecvt<char16_t>(in, std::move(cvt)); #endif @@ -293,6 +296,9 @@ namespace boost { namespace locale { namespace util { case char_facet_t::nochar: break; case char_facet_t::char_f: return std::locale(in, new utf8_codecvt<char>()); case char_facet_t::wchar_f: return std::locale(in, new utf8_codecvt<wchar_t>()); +#ifdef __cpp_char8_t + case char_facet_t::char8_f: break; // No std facet +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T case char_facet_t::char16_f: return std::locale(in, new utf8_codecvt<char16_t>()); #endif @@ -312,6 +318,9 @@ namespace boost { namespace locale { namespace util { case char_facet_t::nochar: break; case char_facet_t::char_f: return std::locale(in, new simple_codecvt<char>(encoding)); case char_facet_t::wchar_f: return std::locale(in, new simple_codecvt<wchar_t>(encoding)); +#ifdef __cpp_char8_t + case char_facet_t::char8_f: break; // No std facet +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T case char_facet_t::char16_f: return std::locale(in, new simple_codecvt<char16_t>(encoding)); #endif diff --git a/contrib/restricted/boost/locale/src/boost/locale/util/encoding.hpp b/contrib/restricted/boost/locale/src/boost/locale/util/encoding.hpp index 7f2f6a8cd8..0f4c3b56e5 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/util/encoding.hpp +++ b/contrib/restricted/boost/locale/src/boost/locale/util/encoding.hpp @@ -12,6 +12,7 @@ #include <boost/utility/string_view.hpp> #include <cstdint> #include <string> +#include <type_traits> #include <vector> namespace boost { namespace locale { namespace util { @@ -38,6 +39,14 @@ namespace boost { namespace locale { namespace util { BOOST_UNREACHABLE_RETURN("Unknown UTF"); } +#ifdef __cpp_char8_t + template<typename T> + struct is_char8_t : std::is_same<T, char8_t> {}; +#else + template<typename T> + struct is_char8_t : std::false_type {}; +#endif + /// Make encoding lowercase and remove all non-alphanumeric characters BOOST_LOCALE_DECL std::string normalize_encoding(string_view encoding); /// True if the normalized encodings are equal diff --git a/contrib/restricted/boost/locale/src/boost/locale/util/foreach_char.hpp b/contrib/restricted/boost/locale/src/boost/locale/util/foreach_char.hpp index df5857b9d9..37328e1216 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/util/foreach_char.hpp +++ b/contrib/restricted/boost/locale/src/boost/locale/util/foreach_char.hpp @@ -9,6 +9,16 @@ #include <boost/locale/config.hpp> +#ifndef BOOST_LOCALE_NO_CXX20_STRING8 +# define BOOST_LOCALE_FOREACH_CHAR_I_CHAR8_T(F) F(char8_t) +# define BOOST_LOCALE_FOREACH_CHAR_I2_CHAR8_T(F) F(char8_t) +#elif defined(__cpp_char8_t) +# define BOOST_LOCALE_FOREACH_CHAR_I_CHAR8_T(F) F(char8_t) +# define BOOST_LOCALE_FOREACH_CHAR_I2_CHAR8_T(F) +#else +# define BOOST_LOCALE_FOREACH_CHAR_I_CHAR8_T(F) +# define BOOST_LOCALE_FOREACH_CHAR_I2_CHAR8_T(F) +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T # define BOOST_LOCALE_FOREACH_CHAR_I_CHAR16_T(F) F(char16_t) #else @@ -23,6 +33,15 @@ #define BOOST_LOCALE_FOREACH_CHAR(F) \ F(char) \ F(wchar_t) \ + BOOST_LOCALE_FOREACH_CHAR_I_CHAR8_T(F) \ + BOOST_LOCALE_FOREACH_CHAR_I_CHAR16_T(F) \ + BOOST_LOCALE_FOREACH_CHAR_I_CHAR32_T(F) + +// Same but only where std::basic_string<C> is available +#define BOOST_LOCALE_FOREACH_CHAR_STRING(F) \ + F(char) \ + F(wchar_t) \ + BOOST_LOCALE_FOREACH_CHAR_I2_CHAR8_T(F) \ BOOST_LOCALE_FOREACH_CHAR_I_CHAR16_T(F) \ BOOST_LOCALE_FOREACH_CHAR_I_CHAR32_T(F) diff --git a/contrib/restricted/boost/locale/src/boost/locale/util/info.cpp b/contrib/restricted/boost/locale/src/boost/locale/util/info.cpp index 65f8167a59..2dcbbee178 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/util/info.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/util/info.cpp @@ -1,5 +1,6 @@ // // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh) +// Copyright (c) 2022-2023 Alexander Grund // // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt @@ -19,7 +20,7 @@ namespace boost { namespace locale { namespace util { class simple_info : public info { public: simple_info(const std::string& name, size_t refs = 0) : info(refs), name_(name) { d.parse(name); } - std::string get_string_property(string_propery v) const override + std::string get_string_property(string_property v) const override { switch(v) { case language_property: return d.language(); @@ -28,7 +29,7 @@ namespace boost { namespace locale { namespace util { case encoding_property: return d.encoding(); case name_property: return name_; } - return ""; + return ""; // LCOV_EXCL_LINE } int get_integer_property(integer_property v) const override @@ -36,7 +37,7 @@ namespace boost { namespace locale { namespace util { switch(v) { case utf8_property: return d.is_utf8(); } - return 0; + return 0; // LCOV_EXCL_LINE } private: diff --git a/contrib/restricted/boost/locale/src/boost/locale/win32/all_generator.hpp b/contrib/restricted/boost/locale/src/boost/locale/win32/all_generator.hpp index ad1984b712..3cf7da94fb 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/win32/all_generator.hpp +++ b/contrib/restricted/boost/locale/src/boost/locale/win32/all_generator.hpp @@ -12,7 +12,7 @@ namespace boost { namespace locale { namespace impl_win { - class winlocale; + struct winlocale; std::locale create_convert(const std::locale& in, const winlocale& lc, char_facet_t type); @@ -22,8 +22,6 @@ namespace boost { namespace locale { namespace impl_win { std::locale create_parsing(const std::locale& in, const winlocale& lc, char_facet_t type); - std::locale create_codecvt(const std::locale& in, char_facet_t type); - }}} // namespace boost::locale::impl_win #endif diff --git a/contrib/restricted/boost/locale/src/boost/locale/win32/api.hpp b/contrib/restricted/boost/locale/src/boost/locale/win32/api.hpp index aeda7ae602..33791ef968 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/win32/api.hpp +++ b/contrib/restricted/boost/locale/src/boost/locale/win32/api.hpp @@ -27,6 +27,7 @@ #include <boost/locale/collator.hpp> #include <boost/locale/conversion.hpp> +#include <boost/assert.hpp> namespace boost { namespace locale { namespace impl_win { @@ -45,18 +46,16 @@ namespace boost { namespace locale { namespace impl_win { case collate_level::quaternary: case collate_level::identical: return 0; } - return 0; + return 0; // LCOV_EXCL_LINE } - class winlocale { - public: - winlocale() : lcid(0) {} + struct winlocale { + explicit winlocale(unsigned locale_id = 0) : lcid(locale_id) {} + explicit winlocale(const std::string& name) { lcid = locale_to_lcid(name); } - winlocale(const std::string& name) { lcid = locale_to_lcid(name); } + bool is_c() const { return lcid == 0; } unsigned lcid; - - bool is_c() const { return lcid == 0; } }; //////////////////////////////////////////////////////////////////////// @@ -87,7 +86,7 @@ namespace boost { namespace locale { namespace impl_win { || GetLocaleInfoW(lcid, LOCALE_SDECIMAL, de, de_size) == 0 || GetLocaleInfoW(lcid, LOCALE_SGROUPING, gr, gr_size) == 0) { - return res; + return res; // LCOV_EXCL_LINE } res.decimal_point = de; res.thousands_sep = th; @@ -118,7 +117,7 @@ namespace boost { namespace locale { namespace impl_win { throw std::length_error("String to long for int type"); int len = LCMapStringW(l.lcid, flags, begin, static_cast<int>(end - begin), 0, 0); if(len == 0) - return res; + return res; // LCOV_EXCL_LINE if(len == std::numeric_limits<int>::max()) throw std::length_error("String to long for int type"); std::vector<wchar_t> buf(len + 1); @@ -149,6 +148,7 @@ namespace boost { namespace locale { namespace impl_win { static_cast<int>(le - lb), rb, static_cast<int>(re - rb)); + BOOST_ASSERT_MSG(result != 0, "CompareStringW failed"); return result - 2; // Subtract 2 to get the meaning of <0, ==0, and >0 } @@ -195,8 +195,7 @@ namespace boost { namespace locale { namespace impl_win { inline std::wstring wcsfold(const wchar_t* begin, const wchar_t* end) { - winlocale l; - l.lcid = 0x0409; // en-US + const winlocale l(0x0409); // en-US return win_map_string_l(LCMAP_LOWERCASE, begin, end, l); } @@ -214,9 +213,9 @@ namespace boost { namespace locale { namespace impl_win { if(end - begin > std::numeric_limits<int>::max()) throw std::length_error("String to long for int type"); - int len = FoldStringW(flags, begin, static_cast<int>(end - begin), 0, 0); + int len = FoldStringW(flags, begin, static_cast<int>(end - begin), nullptr, 0); if(len == 0) - return std::wstring(); + return std::wstring(); // LCOV_EXCL_LINE if(len == std::numeric_limits<int>::max()) throw std::length_error("String to long for int type"); std::vector<wchar_t> v(len + 1); @@ -226,9 +225,7 @@ namespace boost { namespace locale { namespace impl_win { inline std::wstring wcsxfrm_l(collate_level level, const wchar_t* begin, const wchar_t* end, const winlocale& l) { - int flag = LCMAP_SORTKEY | collation_level_to_flag(level); - - return win_map_string_l(flag, begin, end, l); + return win_map_string_l(LCMAP_SORTKEY | collation_level_to_flag(level), begin, end, l); } inline std::wstring towupper_l(const wchar_t* begin, const wchar_t* end, const winlocale& l) diff --git a/contrib/restricted/boost/locale/src/boost/locale/win32/collate.cpp b/contrib/restricted/boost/locale/src/boost/locale/win32/collate.cpp index 465676e437..16fe38d1f8 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/win32/collate.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/win32/collate.cpp @@ -7,33 +7,71 @@ #include <boost/locale/encoding.hpp> #include <boost/locale/generator.hpp> #include "boost/locale/shared/mo_hash.hpp" +#include "boost/locale/shared/std_collate_adapter.hpp" #include "boost/locale/win32/api.hpp" #include <ios> #include <locale> #include <string> +#include <type_traits> namespace boost { namespace locale { namespace impl_win { + template<typename CharT, typename Result> + using enable_if_sizeof_wchar_t = typename std::enable_if<sizeof(CharT) == sizeof(wchar_t), Result>::type; + template<typename CharT, typename Result> + using disable_if_sizeof_wchar_t = typename std::enable_if<sizeof(CharT) != sizeof(wchar_t), Result>::type; - class utf8_collator : public collator<char> { - public: - utf8_collator(winlocale lc, size_t refs = 0) : collator<char>(refs), lc_(lc) {} - int - do_compare(collate_level level, const char* lb, const char* le, const char* rb, const char* re) const override + namespace { + template<typename CharT> + enable_if_sizeof_wchar_t<CharT, int> compare_impl(collate_level level, + const CharT* lb, + const CharT* le, + const CharT* rb, + const CharT* re, + const winlocale& wl) + { + return wcscoll_l(level, + reinterpret_cast<const wchar_t*>(lb), + reinterpret_cast<const wchar_t*>(le), + reinterpret_cast<const wchar_t*>(rb), + reinterpret_cast<const wchar_t*>(re), + wl); + } + + template<typename CharT> + disable_if_sizeof_wchar_t<CharT, int> compare_impl(collate_level level, + const CharT* lb, + const CharT* le, + const CharT* rb, + const CharT* re, + const winlocale& wl) { const std::wstring l = conv::utf_to_utf<wchar_t>(lb, le); const std::wstring r = conv::utf_to_utf<wchar_t>(rb, re); - return wcscoll_l(level, l.c_str(), l.c_str() + l.size(), r.c_str(), r.c_str() + r.size(), lc_); + return wcscoll_l(level, l.c_str(), l.c_str() + l.size(), r.c_str(), r.c_str() + r.size(), wl); } - long do_hash(collate_level level, const char* b, const char* e) const override + + template<typename CharT> + enable_if_sizeof_wchar_t<CharT, std::wstring> + normalize_impl(collate_level level, const CharT* b, const CharT* e, const winlocale& l) { - const std::string key = do_transform(level, b, e); - return gnu_gettext::pj_winberger_hash_function(key.c_str(), key.c_str() + key.size()); + return wcsxfrm_l(level, reinterpret_cast<const wchar_t*>(b), reinterpret_cast<const wchar_t*>(e), l); } - std::string do_transform(collate_level level, const char* b, const char* e) const override + + template<typename CharT> + disable_if_sizeof_wchar_t<CharT, std::wstring> + normalize_impl(collate_level level, const CharT* b, const CharT* e, const winlocale& l) { const std::wstring tmp = conv::utf_to_utf<wchar_t>(b, e); - const std::wstring wkey = wcsxfrm_l(level, tmp.c_str(), tmp.c_str() + tmp.size(), lc_); - std::string key; + return wcsxfrm_l(level, tmp.c_str(), tmp.c_str() + tmp.size(), l); + } + + template<typename CharT> + typename std::enable_if<sizeof(CharT) == 1, std::basic_string<CharT>>::type + transform_impl(collate_level level, const CharT* b, const CharT* e, const winlocale& l) + { + const std::wstring wkey = normalize_impl(level, b, e, l); + + std::basic_string<CharT> key; BOOST_LOCALE_START_CONST_CONDITION if(sizeof(wchar_t) == 2) key.reserve(wkey.size() * 2); @@ -42,46 +80,61 @@ namespace boost { namespace locale { namespace impl_win { for(const wchar_t c : wkey) { if(sizeof(wchar_t) == 2) { const uint16_t tv = static_cast<uint16_t>(c); - key += char(tv >> 8); - key += char(tv & 0xFF); + key += CharT(tv >> 8); + key += CharT(tv & 0xFF); } else { // 4 const uint32_t tv = static_cast<uint32_t>(c); // 21 bit - key += char((tv >> 16) & 0xFF); - key += char((tv >> 8) & 0xFF); - key += char(tv & 0xFF); + key += CharT((tv >> 16) & 0xFF); + key += CharT((tv >> 8) & 0xFF); + key += CharT(tv & 0xFF); } } BOOST_LOCALE_END_CONST_CONDITION return key; } - private: - winlocale lc_; - }; + template<typename CharT> + typename std::enable_if<std::is_same<CharT, wchar_t>::value, std::wstring>::type + transform_impl(collate_level level, const CharT* b, const CharT* e, const winlocale& l) + { + return normalize_impl(level, b, e, l); + } - class utf16_collator : public collator<wchar_t> { + template<typename CharT> + typename std::enable_if<sizeof(CharT) >= sizeof(wchar_t) && !std::is_same<CharT, wchar_t>::value, + std::basic_string<CharT>>::type + transform_impl(collate_level level, const CharT* b, const CharT* e, const winlocale& l) + { + const std::wstring wkey = normalize_impl(level, b, e, l); + return std::basic_string<CharT>(wkey.begin(), wkey.end()); + } + } // namespace + + template<typename CharT> + class utf_collator : public collator<CharT> { public: - typedef std::collate<wchar_t> wfacet; - utf16_collator(winlocale lc, size_t refs = 0) : collator<wchar_t>(refs), lc_(lc) {} + using typename collator<CharT>::string_type; + + explicit utf_collator(winlocale lc) : collator<CharT>(), lc_(lc) {} + int do_compare(collate_level level, - const wchar_t* lb, - const wchar_t* le, - const wchar_t* rb, - const wchar_t* re) const override + const CharT* lb, + const CharT* le, + const CharT* rb, + const CharT* re) const override { - return wcscoll_l(level, lb, le, rb, re, lc_); + return compare_impl(level, lb, le, rb, re, lc_); } - long do_hash(collate_level level, const wchar_t* b, const wchar_t* e) const override + long do_hash(collate_level level, const CharT* b, const CharT* e) const override { - std::wstring key = do_transform(level, b, e); - const char* begin = reinterpret_cast<const char*>(key.c_str()); - const char* end = begin + key.size() * sizeof(wchar_t); - return gnu_gettext::pj_winberger_hash_function(begin, end); + const std::wstring key = normalize_impl(level, b, e, lc_); + return gnu_gettext::pj_winberger_hash_function(reinterpret_cast<const char*>(key.c_str()), + reinterpret_cast<const char*>(key.c_str() + key.size())); } - std::wstring do_transform(collate_level level, const wchar_t* b, const wchar_t* e) const override + string_type do_transform(collate_level level, const CharT* b, const CharT* e) const override { - return wcsxfrm_l(level, b, e, lc_); + return transform_impl(level, b, e, lc_); } private: @@ -95,6 +148,9 @@ namespace boost { namespace locale { namespace impl_win { case char_facet_t::nochar: break; case char_facet_t::char_f: return std::locale(in, new std::collate_byname<char>("C")); case char_facet_t::wchar_f: return std::locale(in, new std::collate_byname<wchar_t>("C")); +#ifdef __cpp_char8_t + case char_facet_t::char8_f: break; // std-facet not available (yet) +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T case char_facet_t::char16_f: return std::locale(in, new collate_byname<char16_t>("C")); #endif @@ -105,13 +161,17 @@ namespace boost { namespace locale { namespace impl_win { } else { switch(type) { case char_facet_t::nochar: break; - case char_facet_t::char_f: return std::locale(in, new utf8_collator(lc)); - case char_facet_t::wchar_f: return std::locale(in, new utf16_collator(lc)); + case char_facet_t::char_f: return impl::create_collators<char, utf_collator<char>>(in, lc); + case char_facet_t::wchar_f: return impl::create_collators<wchar_t, utf_collator<wchar_t>>(in, lc); +#ifdef __cpp_char8_t + case char_facet_t::char8_f: + return std::locale(in, new utf_collator<char8_t>(lc)); // std-facet not available (yet) +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T - case char_facet_t::char16_f: break; + case char_facet_t::char16_f: return impl::create_collators<char16_t, utf_collator<char16_t>>(in, lc); #endif #ifdef BOOST_LOCALE_ENABLE_CHAR32_T - case char_facet_t::char32_f: break; + case char_facet_t::char32_f: return impl::create_collators<char32_t, utf_collator<char32_t>>(in, lc); #endif } } diff --git a/contrib/restricted/boost/locale/src/boost/locale/win32/converter.cpp b/contrib/restricted/boost/locale/src/boost/locale/win32/converter.cpp index ab0af493e4..ed29aedc69 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/win32/converter.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/win32/converter.cpp @@ -15,9 +15,9 @@ namespace boost { namespace locale { namespace impl_win { - class utf16_converter : public converter<wchar_t> { + class wide_converter final : public converter<wchar_t> { public: - utf16_converter(const winlocale& lc, size_t refs = 0) : converter<wchar_t>(refs), lc_(lc) {} + wide_converter(const winlocale& lc, size_t refs = 0) : converter<wchar_t>(refs), lc_(lc) {} std::wstring convert(converter_base::conversion_type how, const wchar_t* begin, const wchar_t* end, @@ -37,38 +37,36 @@ namespace boost { namespace locale { namespace impl_win { winlocale lc_; }; - class utf8_converter : public converter<char> { + template<typename U8Char> + class utf8_converter final : public converter<U8Char> { + static_assert(sizeof(U8Char) == sizeof(char), "Not an UTF-8 char type"); + public: - utf8_converter(const winlocale& lc, size_t refs = 0) : converter<char>(refs), lc_(lc) {} - std::string - convert(converter_base::conversion_type how, const char* begin, const char* end, int flags = 0) const override + utf8_converter(const winlocale& lc, size_t refs = 0) : converter<U8Char>(refs), cvt_(lc) {} + std::basic_string<U8Char> convert(converter_base::conversion_type how, + const U8Char* begin, + const U8Char* end, + int flags = 0) const override { const std::wstring tmp = conv::utf_to_utf<wchar_t>(begin, end); - const wchar_t* wb = tmp.c_str(); - const wchar_t* we = wb + tmp.size(); - - std::wstring res; - - switch(how) { - case upper_case: res = towupper_l(wb, we, lc_); break; - case lower_case: res = towlower_l(wb, we, lc_); break; - case case_folding: res = wcsfold(wb, we); break; - case normalization: res = wcsnormalize(static_cast<norm_type>(flags), wb, we); break; - case title_case: break; - } - return conv::utf_to_utf<char>(res); + return conv::utf_to_utf<U8Char>(cvt_.convert(how, tmp.c_str(), tmp.c_str() + tmp.size(), flags)); } private: - winlocale lc_; + wide_converter cvt_; }; std::locale create_convert(const std::locale& in, const winlocale& lc, char_facet_t type) { switch(type) { case char_facet_t::nochar: break; - case char_facet_t::char_f: return std::locale(in, new utf8_converter(lc)); - case char_facet_t::wchar_f: return std::locale(in, new utf16_converter(lc)); + case char_facet_t::char_f: return std::locale(in, new utf8_converter<char>(lc)); + case char_facet_t::wchar_f: return std::locale(in, new wide_converter(lc)); +#ifndef BOOST_LOCALE_NO_CXX20_STRING8 + case char_facet_t::char8_f: return std::locale(in, new utf8_converter<char8_t>(lc)); +#elif defined(__cpp_char8_t) + case char_facet_t::char8_f: break; +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T case char_facet_t::char16_f: break; #endif diff --git a/contrib/restricted/boost/locale/src/boost/locale/win32/numeric.cpp b/contrib/restricted/boost/locale/src/boost/locale/win32/numeric.cpp index edbb663e78..556de79a85 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/win32/numeric.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/win32/numeric.cpp @@ -175,6 +175,9 @@ namespace boost { namespace locale { namespace impl_win { case char_facet_t::nochar: break; case char_facet_t::char_f: return create_formatting_impl<char>(in, lc); case char_facet_t::wchar_f: return create_formatting_impl<wchar_t>(in, lc); +#ifdef __cpp_char8_t + case char_facet_t::char8_f: break; // std-facet not available (yet) +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T case char_facet_t::char16_f: return create_formatting_impl<char16_t>(in, lc); #endif @@ -191,6 +194,9 @@ namespace boost { namespace locale { namespace impl_win { case char_facet_t::nochar: break; case char_facet_t::char_f: return create_parsing_impl<char>(in, lc); case char_facet_t::wchar_f: return create_parsing_impl<wchar_t>(in, lc); +#ifdef __cpp_char8_t + case char_facet_t::char8_f: break; // std-facet not available (yet) +#endif #ifdef BOOST_LOCALE_ENABLE_CHAR16_T case char_facet_t::char16_f: return create_parsing_impl<char16_t>(in, lc); #endif diff --git a/contrib/restricted/boost/locale/src/boost/locale/win32/win_backend.cpp b/contrib/restricted/boost/locale/src/boost/locale/win32/win_backend.cpp index aa694648d8..48155d6c23 100644 --- a/contrib/restricted/boost/locale/src/boost/locale/win32/win_backend.cpp +++ b/contrib/restricted/boost/locale/src/boost/locale/win32/win_backend.cpp @@ -11,6 +11,7 @@ #include <boost/locale/localization_backend.hpp> #include <boost/locale/util.hpp> #include <boost/locale/util/locale_data.hpp> +#include "boost/locale/shared/message.hpp" #include "boost/locale/util/gregorian.hpp" #include "boost/locale/util/make_std_unique.hpp" #include "boost/locale/win32/all_generator.hpp" @@ -57,9 +58,8 @@ namespace boost { namespace locale { namespace impl_win { real_id_ = util::get_system_locale(true); // always UTF-8 else real_id_ = locale_id_; - util::locale_data d; - d.parse(real_id_); - if(!d.is_utf8()) + data_.parse(real_id_); + if(!data_.is_utf8()) lc_ = winlocale(); // Make it C as non-UTF8 locales are not supported else lc_ = winlocale(real_id_); @@ -79,35 +79,7 @@ namespace boost { namespace locale { namespace impl_win { inf.parse(real_id_); return util::install_gregorian_calendar(base, inf.country()); } - case category_t::message: { - gnu_gettext::messages_info minf; - std::locale tmp = util::create_info(std::locale::classic(), real_id_); - const boost::locale::info& inf = std::use_facet<boost::locale::info>(tmp); - minf.language = inf.language(); - minf.country = inf.country(); - minf.variant = inf.variant(); - minf.encoding = inf.encoding(); - std::copy(domains_.begin(), - domains_.end(), - std::back_inserter<gnu_gettext::messages_info::domains_type>(minf.domains)); - minf.paths = paths_; - switch(type) { - case char_facet_t::nochar: break; - case char_facet_t::char_f: - return std::locale(base, gnu_gettext::create_messages_facet<char>(minf)); - case char_facet_t::wchar_f: - return std::locale(base, gnu_gettext::create_messages_facet<wchar_t>(minf)); -#ifdef BOOST_LOCALE_ENABLE_CHAR16_T - case char_facet_t::char16_f: - return std::locale(base, gnu_gettext::create_messages_facet<char16_t>(minf)); -#endif -#ifdef BOOST_LOCALE_ENABLE_CHAR32_T - case char_facet_t::char32_f: - return std::locale(base, gnu_gettext::create_messages_facet<char32_t>(minf)); -#endif - } - return base; - } + case category_t::message: return detail::install_message_facet(base, type, data_, domains_, paths_); case category_t::information: return util::create_info(base, real_id_); case category_t::codepage: return util::create_utf8_codecvt(base, type); case category_t::boundary: break; // Not implemented @@ -120,6 +92,7 @@ namespace boost { namespace locale { namespace impl_win { std::vector<std::string> domains_; std::string locale_id_; std::string real_id_; + util::locale_data data_; bool invalid_; winlocale lc_; diff --git a/contrib/restricted/boost/locale/ya.make b/contrib/restricted/boost/locale/ya.make index 4243abc00d..4625eb30e1 100644 --- a/contrib/restricted/boost/locale/ya.make +++ b/contrib/restricted/boost/locale/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.83.0) +VERSION(1.86.0) -ORIGINAL_SOURCE(https://github.com/boostorg/locale/archive/boost-1.83.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/locale/archive/boost-1.86.0.tar.gz) PEERDIR( contrib/libs/icu diff --git a/contrib/tools/python3/.yandex_meta/devtools.licenses.report b/contrib/tools/python3/.yandex_meta/devtools.licenses.report index 19e33455a4..017cad0d0c 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 [127626:127626] + Python/deepfreeze/deepfreeze.c [127606:127606] KEEP LicenseRef-scancode-warranty-disclaimer 50a3e16ca7c1aaf79e69114d558b25a0 BELONGS Lib/ya.make diff --git a/contrib/tools/python3/.yandex_meta/override.nix b/contrib/tools/python3/.yandex_meta/override.nix index 2694162b47..38414e7229 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.6"; + version = "3.12.7"; src = fetchFromGitHub { owner = "python"; repo = "cpython"; rev = "v${version}"; - hash = "sha256-RxhBi+QDVZeKwN5uYJDkci2Gay/JELTK3K6xM8U8yo8="; + hash = "sha256-do8N5njMyYapDRyjDWYsIifRlhJKVumSAE1HrWWHvdM="; }; patches = []; diff --git a/contrib/tools/python3/Include/internal/pycore_global_objects_fini_generated.h b/contrib/tools/python3/Include/internal/pycore_global_objects_fini_generated.h index 909fe90b3f..75765254de 100644 --- a/contrib/tools/python3/Include/internal/pycore_global_objects_fini_generated.h +++ b/contrib/tools/python3/Include/internal/pycore_global_objects_fini_generated.h @@ -550,21 +550,16 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) { _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_setcomp)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_string)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(anon_unknown)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(close_br)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(dbl_close_br)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(dbl_open_br)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(dbl_percent)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(defaults)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(dot)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(dot_locals)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(empty)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(generic_base)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(json_decoder)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(kwdefaults)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(list_err)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(newline)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(open_br)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(percent)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(shim_name)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(type_params)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_STR(utf_8)); @@ -577,7 +572,6 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) { _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(TextIOWrapper)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(True)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(WarningMessage)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_WindowsConsoleIO)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__IOBase_closed)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(__abc_tpflags__)); @@ -766,6 +760,7 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) { _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_lock_unlock_module)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_loop)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_needs_com_addref_)); + _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_only_immortal)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_pack_)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_restype_)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_showwarnmsg)); @@ -777,7 +772,6 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) { _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_uninitialized_submodules)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_warn_unawaited_coroutine)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(_xoptions)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(a)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(abs_tol)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(access)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(add)); @@ -797,7 +791,6 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) { _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(attribute)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(authorizer_callback)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(autocommit)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(b)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(backtick)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(base)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(before)); @@ -815,7 +808,6 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) { _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(byteorder)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(bytes)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(bytes_per_sep)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(c)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(c_call)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(c_exception)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(c_return)); @@ -868,7 +860,6 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) { _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(count)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(covariant)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(cwd)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(d)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(data)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(database)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(decode)); @@ -896,7 +887,6 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) { _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(dst)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(dst_dir_fd)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(duration)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(e)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(eager_start)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(effective_ids)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(element_factory)); @@ -1057,7 +1047,6 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) { _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(mro)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(msg)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(mycmp)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(n)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(n_arg)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(n_fields)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(n_sequence_fields)); @@ -1102,7 +1091,6 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) { _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(outgoing)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(overlapped)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(owner)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(p)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(pages)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(parent)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(password)); @@ -1130,7 +1118,6 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) { _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(ps2)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(query)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(quotetabs)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(r)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(raw)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(read)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(read1)); @@ -1154,7 +1141,6 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) { _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(return)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(reverse)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(reversed)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(s)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(salt)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sched_priority)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(scheduler)); @@ -1257,7 +1243,6 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) { _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(writable)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(write)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(write_through)); - _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(x)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(year)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(zdict)); _PyStaticObject_CheckRefcnt((PyObject *)&_Py_SINGLETON(strings).ascii[0]); diff --git a/contrib/tools/python3/Include/internal/pycore_global_strings.h b/contrib/tools/python3/Include/internal/pycore_global_strings.h index 26c1be3b2a..4f5bfd986f 100644 --- a/contrib/tools/python3/Include/internal/pycore_global_strings.h +++ b/contrib/tools/python3/Include/internal/pycore_global_strings.h @@ -36,21 +36,16 @@ struct _Py_global_strings { STRUCT_FOR_STR(anon_setcomp, "<setcomp>") STRUCT_FOR_STR(anon_string, "<string>") STRUCT_FOR_STR(anon_unknown, "<unknown>") - STRUCT_FOR_STR(close_br, "}") STRUCT_FOR_STR(dbl_close_br, "}}") STRUCT_FOR_STR(dbl_open_br, "{{") STRUCT_FOR_STR(dbl_percent, "%%") STRUCT_FOR_STR(defaults, ".defaults") - STRUCT_FOR_STR(dot, ".") STRUCT_FOR_STR(dot_locals, ".<locals>") STRUCT_FOR_STR(empty, "") STRUCT_FOR_STR(generic_base, ".generic_base") STRUCT_FOR_STR(json_decoder, "json.decoder") STRUCT_FOR_STR(kwdefaults, ".kwdefaults") STRUCT_FOR_STR(list_err, "list index out of range") - STRUCT_FOR_STR(newline, "\n") - STRUCT_FOR_STR(open_br, "{") - STRUCT_FOR_STR(percent, "%") STRUCT_FOR_STR(shim_name, "<shim>") STRUCT_FOR_STR(type_params, ".type_params") STRUCT_FOR_STR(utf_8, "utf-8") @@ -66,7 +61,6 @@ struct _Py_global_strings { STRUCT_FOR_ID(TextIOWrapper) STRUCT_FOR_ID(True) STRUCT_FOR_ID(WarningMessage) - STRUCT_FOR_ID(_) STRUCT_FOR_ID(_WindowsConsoleIO) STRUCT_FOR_ID(__IOBase_closed) STRUCT_FOR_ID(__abc_tpflags__) @@ -255,6 +249,7 @@ struct _Py_global_strings { STRUCT_FOR_ID(_lock_unlock_module) STRUCT_FOR_ID(_loop) STRUCT_FOR_ID(_needs_com_addref_) + STRUCT_FOR_ID(_only_immortal) STRUCT_FOR_ID(_pack_) STRUCT_FOR_ID(_restype_) STRUCT_FOR_ID(_showwarnmsg) @@ -266,7 +261,6 @@ struct _Py_global_strings { STRUCT_FOR_ID(_uninitialized_submodules) STRUCT_FOR_ID(_warn_unawaited_coroutine) STRUCT_FOR_ID(_xoptions) - STRUCT_FOR_ID(a) STRUCT_FOR_ID(abs_tol) STRUCT_FOR_ID(access) STRUCT_FOR_ID(add) @@ -286,7 +280,6 @@ struct _Py_global_strings { STRUCT_FOR_ID(attribute) STRUCT_FOR_ID(authorizer_callback) STRUCT_FOR_ID(autocommit) - STRUCT_FOR_ID(b) STRUCT_FOR_ID(backtick) STRUCT_FOR_ID(base) STRUCT_FOR_ID(before) @@ -304,7 +297,6 @@ struct _Py_global_strings { STRUCT_FOR_ID(byteorder) STRUCT_FOR_ID(bytes) STRUCT_FOR_ID(bytes_per_sep) - STRUCT_FOR_ID(c) STRUCT_FOR_ID(c_call) STRUCT_FOR_ID(c_exception) STRUCT_FOR_ID(c_return) @@ -357,7 +349,6 @@ struct _Py_global_strings { STRUCT_FOR_ID(count) STRUCT_FOR_ID(covariant) STRUCT_FOR_ID(cwd) - STRUCT_FOR_ID(d) STRUCT_FOR_ID(data) STRUCT_FOR_ID(database) STRUCT_FOR_ID(decode) @@ -385,7 +376,6 @@ struct _Py_global_strings { STRUCT_FOR_ID(dst) STRUCT_FOR_ID(dst_dir_fd) STRUCT_FOR_ID(duration) - STRUCT_FOR_ID(e) STRUCT_FOR_ID(eager_start) STRUCT_FOR_ID(effective_ids) STRUCT_FOR_ID(element_factory) @@ -546,7 +536,6 @@ struct _Py_global_strings { STRUCT_FOR_ID(mro) STRUCT_FOR_ID(msg) STRUCT_FOR_ID(mycmp) - STRUCT_FOR_ID(n) STRUCT_FOR_ID(n_arg) STRUCT_FOR_ID(n_fields) STRUCT_FOR_ID(n_sequence_fields) @@ -591,7 +580,6 @@ struct _Py_global_strings { STRUCT_FOR_ID(outgoing) STRUCT_FOR_ID(overlapped) STRUCT_FOR_ID(owner) - STRUCT_FOR_ID(p) STRUCT_FOR_ID(pages) STRUCT_FOR_ID(parent) STRUCT_FOR_ID(password) @@ -619,7 +607,6 @@ struct _Py_global_strings { STRUCT_FOR_ID(ps2) STRUCT_FOR_ID(query) STRUCT_FOR_ID(quotetabs) - STRUCT_FOR_ID(r) STRUCT_FOR_ID(raw) STRUCT_FOR_ID(read) STRUCT_FOR_ID(read1) @@ -643,7 +630,6 @@ struct _Py_global_strings { STRUCT_FOR_ID(return) STRUCT_FOR_ID(reverse) STRUCT_FOR_ID(reversed) - STRUCT_FOR_ID(s) STRUCT_FOR_ID(salt) STRUCT_FOR_ID(sched_priority) STRUCT_FOR_ID(scheduler) @@ -746,7 +732,6 @@ struct _Py_global_strings { STRUCT_FOR_ID(writable) STRUCT_FOR_ID(write) STRUCT_FOR_ID(write_through) - STRUCT_FOR_ID(x) STRUCT_FOR_ID(year) STRUCT_FOR_ID(zdict) } identifiers; @@ -769,6 +754,10 @@ struct _Py_global_strings { (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base)) #define _Py_STR(NAME) \ (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base)) +#define _Py_LATIN1_CHR(CH) \ + ((CH) < 128 \ + ? (PyObject*)&_Py_SINGLETON(strings).ascii[(CH)] \ + : (PyObject*)&_Py_SINGLETON(strings).latin1[(CH) - 128]) /* _Py_DECLARE_STR() should precede all uses of _Py_STR() in a function. diff --git a/contrib/tools/python3/Include/internal/pycore_object.h b/contrib/tools/python3/Include/internal/pycore_object.h index 63e74a65f4..546f98d96d 100644 --- a/contrib/tools/python3/Include/internal/pycore_object.h +++ b/contrib/tools/python3/Include/internal/pycore_object.h @@ -70,6 +70,13 @@ static inline void _Py_RefcntAdd(PyObject* op, Py_ssize_t n) static inline void _Py_SetImmortal(PyObject *op) { +#ifdef Py_DEBUG + // For strings, use _PyUnicode_InternImmortal instead. + if (PyUnicode_CheckExact(op)) { + assert(PyUnicode_CHECK_INTERNED(op) == SSTATE_INTERNED_IMMORTAL + || PyUnicode_CHECK_INTERNED(op) == SSTATE_INTERNED_IMMORTAL_STATIC); + } +#endif if (op) { op->ob_refcnt = _Py_IMMORTAL_REFCNT; } diff --git a/contrib/tools/python3/Include/internal/pycore_runtime_init_generated.h b/contrib/tools/python3/Include/internal/pycore_runtime_init_generated.h index dbfb633c70..460a6c7973 100644 --- a/contrib/tools/python3/Include/internal/pycore_runtime_init_generated.h +++ b/contrib/tools/python3/Include/internal/pycore_runtime_init_generated.h @@ -542,21 +542,16 @@ extern "C" { INIT_STR(anon_setcomp, "<setcomp>"), \ INIT_STR(anon_string, "<string>"), \ INIT_STR(anon_unknown, "<unknown>"), \ - INIT_STR(close_br, "}"), \ INIT_STR(dbl_close_br, "}}"), \ INIT_STR(dbl_open_br, "{{"), \ INIT_STR(dbl_percent, "%%"), \ INIT_STR(defaults, ".defaults"), \ - INIT_STR(dot, "."), \ INIT_STR(dot_locals, ".<locals>"), \ INIT_STR(empty, ""), \ INIT_STR(generic_base, ".generic_base"), \ INIT_STR(json_decoder, "json.decoder"), \ INIT_STR(kwdefaults, ".kwdefaults"), \ INIT_STR(list_err, "list index out of range"), \ - INIT_STR(newline, "\n"), \ - INIT_STR(open_br, "{"), \ - INIT_STR(percent, "%"), \ INIT_STR(shim_name, "<shim>"), \ INIT_STR(type_params, ".type_params"), \ INIT_STR(utf_8, "utf-8"), \ @@ -572,7 +567,6 @@ extern "C" { INIT_ID(TextIOWrapper), \ INIT_ID(True), \ INIT_ID(WarningMessage), \ - INIT_ID(_), \ INIT_ID(_WindowsConsoleIO), \ INIT_ID(__IOBase_closed), \ INIT_ID(__abc_tpflags__), \ @@ -761,6 +755,7 @@ extern "C" { INIT_ID(_lock_unlock_module), \ INIT_ID(_loop), \ INIT_ID(_needs_com_addref_), \ + INIT_ID(_only_immortal), \ INIT_ID(_pack_), \ INIT_ID(_restype_), \ INIT_ID(_showwarnmsg), \ @@ -772,7 +767,6 @@ extern "C" { INIT_ID(_uninitialized_submodules), \ INIT_ID(_warn_unawaited_coroutine), \ INIT_ID(_xoptions), \ - INIT_ID(a), \ INIT_ID(abs_tol), \ INIT_ID(access), \ INIT_ID(add), \ @@ -792,7 +786,6 @@ extern "C" { INIT_ID(attribute), \ INIT_ID(authorizer_callback), \ INIT_ID(autocommit), \ - INIT_ID(b), \ INIT_ID(backtick), \ INIT_ID(base), \ INIT_ID(before), \ @@ -810,7 +803,6 @@ extern "C" { INIT_ID(byteorder), \ INIT_ID(bytes), \ INIT_ID(bytes_per_sep), \ - INIT_ID(c), \ INIT_ID(c_call), \ INIT_ID(c_exception), \ INIT_ID(c_return), \ @@ -863,7 +855,6 @@ extern "C" { INIT_ID(count), \ INIT_ID(covariant), \ INIT_ID(cwd), \ - INIT_ID(d), \ INIT_ID(data), \ INIT_ID(database), \ INIT_ID(decode), \ @@ -891,7 +882,6 @@ extern "C" { INIT_ID(dst), \ INIT_ID(dst_dir_fd), \ INIT_ID(duration), \ - INIT_ID(e), \ INIT_ID(eager_start), \ INIT_ID(effective_ids), \ INIT_ID(element_factory), \ @@ -1052,7 +1042,6 @@ extern "C" { INIT_ID(mro), \ INIT_ID(msg), \ INIT_ID(mycmp), \ - INIT_ID(n), \ INIT_ID(n_arg), \ INIT_ID(n_fields), \ INIT_ID(n_sequence_fields), \ @@ -1097,7 +1086,6 @@ extern "C" { INIT_ID(outgoing), \ INIT_ID(overlapped), \ INIT_ID(owner), \ - INIT_ID(p), \ INIT_ID(pages), \ INIT_ID(parent), \ INIT_ID(password), \ @@ -1125,7 +1113,6 @@ extern "C" { INIT_ID(ps2), \ INIT_ID(query), \ INIT_ID(quotetabs), \ - INIT_ID(r), \ INIT_ID(raw), \ INIT_ID(read), \ INIT_ID(read1), \ @@ -1149,7 +1136,6 @@ extern "C" { INIT_ID(return), \ INIT_ID(reverse), \ INIT_ID(reversed), \ - INIT_ID(s), \ INIT_ID(salt), \ INIT_ID(sched_priority), \ INIT_ID(scheduler), \ @@ -1252,7 +1238,6 @@ extern "C" { INIT_ID(writable), \ INIT_ID(write), \ INIT_ID(write_through), \ - INIT_ID(x), \ INIT_ID(year), \ INIT_ID(zdict), \ } diff --git a/contrib/tools/python3/Include/internal/pycore_unicodeobject.h b/contrib/tools/python3/Include/internal/pycore_unicodeobject.h index 1bb0f366e7..44eccdea55 100644 --- a/contrib/tools/python3/Include/internal/pycore_unicodeobject.h +++ b/contrib/tools/python3/Include/internal/pycore_unicodeobject.h @@ -13,17 +13,31 @@ extern "C" { void _PyUnicode_ExactDealloc(PyObject *op); Py_ssize_t _PyUnicode_InternedSize(void); +Py_ssize_t _PyUnicode_InternedSize_Immortal(void); /* runtime lifecycle */ extern void _PyUnicode_InitState(PyInterpreterState *); extern PyStatus _PyUnicode_InitGlobalObjects(PyInterpreterState *); +extern PyStatus _PyUnicode_InitInternDict(PyInterpreterState *); extern PyStatus _PyUnicode_InitTypes(PyInterpreterState *); extern void _PyUnicode_Fini(PyInterpreterState *); extern void _PyUnicode_FiniTypes(PyInterpreterState *); extern PyTypeObject _PyUnicodeASCIIIter_Type; +/* Interning */ + +// All these are "ref-neutral", like the public PyUnicode_InternInPlace. + +// Explicit interning routines: +PyAPI_FUNC(void) _PyUnicode_InternMortal(PyInterpreterState *interp, PyObject **); +PyAPI_FUNC(void) _PyUnicode_InternImmortal(PyInterpreterState *interp, PyObject **); +// Left here to help backporting: +PyAPI_FUNC(void) _PyUnicode_InternInPlace(PyInterpreterState *interp, PyObject **p); +// Only for statically allocated strings: +extern void _PyUnicode_InternStatic(PyInterpreterState *interp, PyObject **); + /* other API */ struct _Py_unicode_runtime_ids { @@ -60,7 +74,6 @@ struct _Py_unicode_state { struct _Py_unicode_ids ids; }; -extern void _PyUnicode_InternInPlace(PyInterpreterState *interp, PyObject **p); extern void _PyUnicode_ClearInterned(PyInterpreterState *interp); diff --git a/contrib/tools/python3/Include/internal/pycore_unicodeobject_generated.h b/contrib/tools/python3/Include/internal/pycore_unicodeobject_generated.h index 9f9e23f5cd..90c61bcd09 100644 --- a/contrib/tools/python3/Include/internal/pycore_unicodeobject_generated.h +++ b/contrib/tools/python3/Include/internal/pycore_unicodeobject_generated.h @@ -13,2081 +13,2817 @@ static inline void _PyUnicode_InitStaticStrings(PyInterpreterState *interp) { PyObject *string; string = &_Py_ID(CANCELLED); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(FINISHED); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(False); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(JSONDecodeError); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(PENDING); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(Py_Repr); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(TextIOWrapper); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(True); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(WarningMessage); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); - string = &_Py_ID(_); - assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_WindowsConsoleIO); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__IOBase_closed); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__abc_tpflags__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__abs__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__abstractmethods__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__add__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__aenter__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__aexit__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__aiter__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__all__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__and__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__anext__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__annotations__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__args__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__asyncio_running_event_loop__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__await__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__bases__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__bool__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__buffer__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__build_class__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__builtins__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__bytes__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__call__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__cantrace__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__class__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__class_getitem__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__classcell__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__classdict__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__classdictcell__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__complex__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__contains__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__copy__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__ctypes_from_outparam__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__del__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__delattr__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__delete__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__delitem__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__dict__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__dictoffset__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__dir__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__divmod__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__doc__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__enter__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__eq__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__exit__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__file__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__float__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__floordiv__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__format__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__fspath__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__ge__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__get__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__getattr__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__getattribute__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__getinitargs__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__getitem__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__getnewargs__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__getnewargs_ex__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__getstate__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__gt__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__hash__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__iadd__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__iand__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__ifloordiv__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__ilshift__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__imatmul__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__imod__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__import__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__imul__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__index__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__init__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__init_subclass__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__instancecheck__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__int__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__invert__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__ior__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__ipow__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__irshift__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__isabstractmethod__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__isub__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__iter__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__itruediv__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__ixor__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__le__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__len__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__length_hint__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__lltrace__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__loader__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__lshift__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__lt__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__main__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__matmul__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__missing__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__mod__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__module__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__mro_entries__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__mul__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__name__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__ne__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__neg__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__new__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__newobj__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__newobj_ex__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__next__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__notes__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__or__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__orig_class__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__origin__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__package__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__parameters__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__path__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__pos__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__pow__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__prepare__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__qualname__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__radd__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__rand__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__rdivmod__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__reduce__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__reduce_ex__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__release_buffer__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__repr__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__reversed__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__rfloordiv__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__rlshift__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__rmatmul__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__rmod__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__rmul__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__ror__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__round__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__rpow__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__rrshift__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__rshift__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__rsub__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__rtruediv__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__rxor__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__set__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__set_name__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__setattr__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__setitem__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__setstate__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__sizeof__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__slotnames__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__slots__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__spec__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__str__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__sub__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__subclasscheck__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__subclasshook__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__truediv__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__trunc__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__type_params__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__typing_is_unpacked_typevartuple__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__typing_prepare_subst__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__typing_subst__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__typing_unpacked_tuple_args__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__warningregistry__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__weaklistoffset__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__weakref__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(__xor__); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_abc_impl); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_abstract_); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_active); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_annotation); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_anonymous_); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_argtypes_); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_as_parameter_); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_asyncio_future_blocking); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_blksize); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_bootstrap); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_check_retval_); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_dealloc_warn); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_feature_version); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_fields_); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_finalizing); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_find_and_load); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_fix_up_module); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_flags_); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_get_sourcefile); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_handle_fromlist); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_initializing); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_io); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_is_text_encoding); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_length_); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_limbo); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_lock_unlock_module); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_loop); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_needs_com_addref_); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_ID(_only_immortal); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_pack_); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_restype_); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_showwarnmsg); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_shutdown); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_slotnames); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_strptime_datetime); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_swappedbytes_); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_type_); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_uninitialized_submodules); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_warn_unawaited_coroutine); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(_xoptions); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); - string = &_Py_ID(a); - assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(abs_tol); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(access); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(add); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(add_done_callback); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(after_in_child); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(after_in_parent); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(aggregate_class); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(alias); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(append); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(arg); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(argdefs); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(args); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(arguments); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(argv); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(as_integer_ratio); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(ast); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(attribute); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(authorizer_callback); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(autocommit); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); - string = &_Py_ID(b); - assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(backtick); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(base); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(before); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(big); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(binary_form); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(block); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(bound); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(buffer); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(buffer_callback); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(buffer_size); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(buffering); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(buffers); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(bufsize); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(builtins); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(byteorder); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(bytes); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(bytes_per_sep); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); - string = &_Py_ID(c); - assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(c_call); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(c_exception); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(c_return); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(cached_statements); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(cadata); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(cafile); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(call); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(call_exception_handler); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(call_soon); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(cancel); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(capath); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(category); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(cb_type); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(certfile); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(check_same_thread); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(clear); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(close); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(closed); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(closefd); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(closure); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(co_argcount); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(co_cellvars); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(co_code); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(co_consts); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(co_exceptiontable); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(co_filename); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(co_firstlineno); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(co_flags); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(co_freevars); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(co_kwonlyargcount); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(co_linetable); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(co_name); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(co_names); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(co_nlocals); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(co_posonlyargcount); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(co_qualname); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(co_stacksize); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(co_varnames); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(code); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(command); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(comment_factory); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(compile_mode); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(consts); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(context); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(contravariant); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(cookie); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(copy); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(copyreg); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(coro); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(count); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(covariant); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(cwd); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); - string = &_Py_ID(d); - assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(data); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(database); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(decode); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(decoder); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(default); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(defaultaction); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(delete); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(depth); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(detect_types); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(deterministic); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(device); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(dict); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(dictcomp); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(difference_update); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(digest); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(digest_size); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(digestmod); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(dir_fd); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(discard); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(dispatch_table); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(displayhook); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(dklen); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(doc); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(dont_inherit); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(dst); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(dst_dir_fd); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(duration); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); - string = &_Py_ID(e); - assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(eager_start); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(effective_ids); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(element_factory); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(encode); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(encoding); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(end); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(end_lineno); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(end_offset); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(endpos); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(entrypoint); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(env); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(errors); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(event); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(eventmask); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(exc_type); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(exc_value); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(excepthook); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(exception); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(existing_file_name); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(exp); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(extend); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(extra_tokens); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(facility); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(factory); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(false); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(family); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(fanout); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(fd); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(fd2); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(fdel); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(fget); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(file); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(file_actions); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(filename); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(fileno); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(filepath); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(fillvalue); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(filters); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(final); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(find_class); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(fix_imports); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(flags); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(flush); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(follow_symlinks); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(format); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(frequency); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(from_param); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(fromlist); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(fromtimestamp); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(fromutc); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(fset); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(func); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(future); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(generation); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(genexpr); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(get); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(get_debug); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(get_event_loop); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(get_loop); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(get_source); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(getattr); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(getstate); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(gid); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(globals); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(groupindex); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(groups); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(handle); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(hash_name); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(header); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(headers); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(hi); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(hook); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(id); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(ident); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(ignore); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(imag); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(importlib); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(in_fd); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(incoming); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(indexgroup); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(inf); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(infer_variance); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(inheritable); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(initial); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(initial_bytes); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(initial_value); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(initval); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(inner_size); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(input); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(insert_comments); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(insert_pis); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(instructions); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(intern); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(intersection); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(is_running); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(isatty); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(isinstance); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(isoformat); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(isolation_level); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(istext); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(item); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(items); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(iter); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(iterable); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(iterations); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(join); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(jump); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(keepends); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(key); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(keyfile); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(keys); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(kind); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(kw); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(kw1); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(kw2); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(lambda); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(last); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(last_exc); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(last_node); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(last_traceback); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(last_type); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(last_value); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(latin1); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(leaf_size); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(len); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(length); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(level); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(limit); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(line); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(line_buffering); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(lineno); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(listcomp); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(little); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(lo); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(locale); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(locals); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(logoption); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(loop); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(mapping); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(match); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(max_length); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(maxdigits); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(maxevents); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(maxmem); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(maxsplit); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(maxvalue); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(memLevel); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(memlimit); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(message); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(metaclass); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(metadata); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(method); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(mod); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(mode); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(module); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(module_globals); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(modules); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(mro); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(msg); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(mycmp); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); - string = &_Py_ID(n); - assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(n_arg); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(n_fields); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(n_sequence_fields); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(n_unnamed_fields); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(name); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(name_from); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(namespace_separator); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(namespaces); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(narg); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(ndigits); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(new_file_name); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(new_limit); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(newline); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(newlines); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(next); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(nlocals); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(node_depth); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(node_offset); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(ns); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(nstype); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(nt); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(null); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(number); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(obj); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(object); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(offset); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(offset_dst); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(offset_src); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(on_type_read); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(onceregistry); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(only_keys); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(oparg); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(opcode); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(open); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(opener); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(operation); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(optimize); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(options); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(order); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(origin); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(out_fd); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(outgoing); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(overlapped); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(owner); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); - string = &_Py_ID(p); - assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(pages); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(parent); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(password); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(path); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(pattern); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(peek); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(persistent_id); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(persistent_load); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(person); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(pi_factory); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(pid); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(policy); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(pos); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(pos1); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(pos2); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(posix); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(print_file_and_line); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(priority); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(progress); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(progress_handler); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(progress_routine); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(proto); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(protocol); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(ps1); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(ps2); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(query); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(quotetabs); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); - string = &_Py_ID(r); - assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(raw); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(read); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(read1); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(readable); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(readall); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(readinto); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(readinto1); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(readline); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(readonly); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(real); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(reducer_override); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(registry); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(rel_tol); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(release); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(reload); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(repl); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(replace); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(reserved); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(reset); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(resetids); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(return); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(reverse); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(reversed); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); - string = &_Py_ID(s); - assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(salt); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(sched_priority); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(scheduler); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(seek); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(seekable); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(selectors); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(self); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(send); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(sep); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(sequence); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(server_hostname); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(server_side); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(session); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(setcomp); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(setpgroup); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(setsid); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(setsigdef); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(setsigmask); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(setstate); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(shape); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(show_cmd); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(signed); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(size); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(sizehint); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(skip_file_prefixes); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(sleep); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(sock); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(sort); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(sound); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(source); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(source_traceback); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(spam); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(src); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(src_dir_fd); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(stacklevel); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(start); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(statement); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(status); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(stderr); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(stdin); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(stdout); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(step); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(steps); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(store_name); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(strategy); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(strftime); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(strict); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(strict_mode); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(string); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(sub_key); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(symmetric_difference_update); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(tabsize); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(tag); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(target); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(target_is_directory); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(task); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(tb_frame); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(tb_lasti); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(tb_lineno); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(tb_next); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(tell); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(template); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(term); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(text); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(threading); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(throw); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(timeout); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(times); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(timetuple); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(top); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(trace_callback); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(traceback); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(trailers); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(translate); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(true); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(truncate); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(twice); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(txt); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(type); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(type_params); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(tz); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(tzname); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(uid); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(unlink); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(unraisablehook); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(uri); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(usedforsecurity); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(value); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(values); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(version); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(volume); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(warnings); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(warnoptions); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(wbits); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(week); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(weekday); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(which); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(who); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(withdata); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(writable); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(write); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(write_through); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); - string = &_Py_ID(x); - assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(year); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); string = &_Py_ID(zdict); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(empty); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(dbl_percent); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(dot_locals); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(defaults); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(generic_base); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(kwdefaults); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(type_params); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(anon_dictcomp); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(anon_genexpr); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(anon_lambda); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(anon_listcomp); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(anon_module); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(anon_setcomp); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(shim_name); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(anon_string); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(anon_unknown); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(json_decoder); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(list_err); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(utf_8); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(dbl_open_br); + _PyUnicode_InternStatic(interp, &string); + assert(_PyUnicode_CheckConsistency(string, 1)); + assert(PyUnicode_GET_LENGTH(string) != 1); + string = &_Py_STR(dbl_close_br); + _PyUnicode_InternStatic(interp, &string); assert(_PyUnicode_CheckConsistency(string, 1)); - _PyUnicode_InternInPlace(interp, &string); + assert(PyUnicode_GET_LENGTH(string) != 1); } /* End auto-generated code */ #ifdef __cplusplus diff --git a/contrib/tools/python3/Include/patchlevel.h b/contrib/tools/python3/Include/patchlevel.h index 704c1c442d..4f0c8fb1aa 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 6 +#define PY_MICRO_VERSION 7 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL #define PY_RELEASE_SERIAL 0 /* Version as a string */ -#define PY_VERSION "3.12.6" +#define PY_VERSION "3.12.7" /*--end constants--*/ /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. diff --git a/contrib/tools/python3/Lib/argparse.py b/contrib/tools/python3/Lib/argparse.py index e4892955e4..3d01415fcf 100644 --- a/contrib/tools/python3/Lib/argparse.py +++ b/contrib/tools/python3/Lib/argparse.py @@ -263,13 +263,12 @@ class HelpFormatter(object): # find all invocations get_invocation = self._format_action_invocation - invocations = [get_invocation(action)] + invocation_lengths = [len(get_invocation(action)) + self._current_indent] for subaction in self._iter_indented_subactions(action): - invocations.append(get_invocation(subaction)) + invocation_lengths.append(len(get_invocation(subaction)) + self._current_indent) # update the maximum item length - invocation_length = max(map(len, invocations)) - action_length = invocation_length + self._current_indent + action_length = max(invocation_lengths) self._action_max_length = max(self._action_max_length, action_length) @@ -1270,7 +1269,8 @@ class _SubParsersAction(Action): setattr(namespace, key, value) if arg_strings: - vars(namespace).setdefault(_UNRECOGNIZED_ARGS_ATTR, []) + if not hasattr(namespace, _UNRECOGNIZED_ARGS_ATTR): + setattr(namespace, _UNRECOGNIZED_ARGS_ATTR, []) getattr(namespace, _UNRECOGNIZED_ARGS_ATTR).extend(arg_strings) class _ExtendAction(_AppendAction): @@ -1576,9 +1576,8 @@ class _ActionsContainer(object): # mark positional arguments as required if at least one is # always required - if kwargs.get('nargs') not in [OPTIONAL, ZERO_OR_MORE]: - kwargs['required'] = True - if kwargs.get('nargs') == ZERO_OR_MORE and 'default' not in kwargs: + nargs = kwargs.get('nargs') + if nargs not in [OPTIONAL, ZERO_OR_MORE, REMAINDER, SUPPRESS, 0]: kwargs['required'] = True # return the keyword arguments with no option strings @@ -1849,8 +1848,8 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): kwargs.setdefault('parser_class', type(self)) if 'title' in kwargs or 'description' in kwargs: - title = _(kwargs.pop('title', 'subcommands')) - description = _(kwargs.pop('description', None)) + title = kwargs.pop('title', _('subcommands')) + description = kwargs.pop('description', None) self._subparsers = self.add_argument_group(title, description) else: self._subparsers = self._positionals @@ -1972,11 +1971,11 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): # otherwise, add the arg to the arg strings # and note the index if it was an option else: - option_tuple = self._parse_optional(arg_string) - if option_tuple is None: + option_tuples = self._parse_optional(arg_string) + if option_tuples is None: pattern = 'A' else: - option_string_indices[i] = option_tuple + option_string_indices[i] = option_tuples pattern = 'O' arg_string_pattern_parts.append(pattern) @@ -1992,9 +1991,8 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): argument_values = self._get_values(action, argument_strings) # error if this argument is not allowed with other previously - # seen arguments, assuming that actions that use the default - # value don't really count as "present" - if argument_values is not action.default: + # seen arguments + if action.option_strings or argument_strings: seen_non_default_actions.add(action) for conflict_action in action_conflicts.get(action, []): if conflict_action in seen_non_default_actions: @@ -2011,8 +2009,16 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): def consume_optional(start_index): # get the optional identified at this index - option_tuple = option_string_indices[start_index] - action, option_string, sep, explicit_arg = option_tuple + option_tuples = option_string_indices[start_index] + # if multiple actions match, the option string was ambiguous + 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} + msg = _('ambiguous option: %(option)s could match %(matches)s') + raise ArgumentError(None, msg % args) + + action, option_string, sep, explicit_arg = option_tuples[0] # identify additional optionals in the same arg string # (e.g. -xyz is the same as -x -y -z if no args are required) @@ -2108,6 +2114,15 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): # and add the Positional and its args to the list for action, arg_count in zip(positionals, arg_counts): args = arg_strings[start_index: start_index + arg_count] + # Strip out the first '--' if it is not in REMAINDER arg. + if action.nargs == PARSER: + if arg_strings_pattern[start_index] == '-': + assert args[0] == '--' + args.remove('--') + elif action.nargs != REMAINDER: + if (arg_strings_pattern.find('-', start_index, + start_index + arg_count) >= 0): + args.remove('--') start_index += arg_count take_action(action, args) @@ -2254,18 +2269,19 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): def _match_arguments_partial(self, actions, arg_strings_pattern): # progressively shorten the actions list by slicing off the # final actions until we find a match - result = [] for i in range(len(actions), 0, -1): actions_slice = actions[:i] pattern = ''.join([self._get_nargs_pattern(action) for action in actions_slice]) match = _re.match(pattern, arg_strings_pattern) if match is not None: - result.extend([len(string) for string in match.groups()]) - break - - # return the list of arg string counts - return result + result = [len(string) for string in match.groups()] + if (match.end() < len(arg_strings_pattern) + and arg_strings_pattern[match.end()] == 'O'): + while result and not result[-1]: + del result[-1] + return result + return [] def _parse_optional(self, arg_string): # if it's an empty string, it was meant to be a positional @@ -2279,7 +2295,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): # if the option string is present in the parser, return the action if arg_string in self._option_string_actions: action = self._option_string_actions[arg_string] - return action, arg_string, None, None + return [(action, arg_string, None, None)] # if it's just a single character, it was meant to be positional if len(arg_string) == 1: @@ -2289,25 +2305,14 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): option_string, sep, explicit_arg = arg_string.partition('=') if sep and option_string in self._option_string_actions: action = self._option_string_actions[option_string] - return action, option_string, sep, explicit_arg + return [(action, option_string, sep, explicit_arg)] # search through all possible prefixes of the option string # and all actions in the parser for possible interpretations option_tuples = self._get_option_tuples(arg_string) - # if multiple actions match, the option string was ambiguous - 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} - msg = _('ambiguous option: %(option)s could match %(matches)s') - raise ArgumentError(None, msg % args) - - # if exactly one action matched, this segmentation is good, - # so return the parsed action - elif len(option_tuples) == 1: - option_tuple, = option_tuples - return option_tuple + if option_tuples: + return option_tuples # if it was not found as an option, but it looks like a negative # number, it was meant to be positional @@ -2322,7 +2327,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): # it was meant to be an optional but there is no such option # in this parser (though it might be a valid option in a subparser) - return None, arg_string, None, None + return [(None, arg_string, None, None)] def _get_option_tuples(self, option_string): result = [] @@ -2345,7 +2350,9 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): # but multiple character options always have to have their argument # separate elif option_string[0] in chars and option_string[1] not in chars: - option_prefix = option_string + option_prefix, sep, explicit_arg = option_string.partition('=') + if not sep: + sep = explicit_arg = None short_option_prefix = option_string[:2] short_explicit_arg = option_string[2:] @@ -2354,9 +2361,9 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): action = self._option_string_actions[option_string] tup = action, option_string, '', short_explicit_arg result.append(tup) - elif option_string.startswith(option_prefix): + elif self.allow_abbrev and option_string.startswith(option_prefix): action = self._option_string_actions[option_string] - tup = action, option_string, None, None + tup = action, option_string, sep, explicit_arg result.append(tup) # shouldn't ever get here @@ -2370,43 +2377,40 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): # in all examples below, we have to allow for '--' args # which are represented as '-' in the pattern nargs = action.nargs + # if this is an optional action, -- is not allowed + option = action.option_strings # the default (None) is assumed to be a single argument if nargs is None: - nargs_pattern = '(-*A-*)' + nargs_pattern = '([A])' if option else '(-*A-*)' # allow zero or one arguments elif nargs == OPTIONAL: - nargs_pattern = '(-*A?-*)' + nargs_pattern = '(A?)' if option else '(-*A?-*)' # allow zero or more arguments elif nargs == ZERO_OR_MORE: - nargs_pattern = '(-*[A-]*)' + nargs_pattern = '(A*)' if option else '(-*[A-]*)' # allow one or more arguments elif nargs == ONE_OR_MORE: - nargs_pattern = '(-*A[A-]*)' + nargs_pattern = '(A+)' if option else '(-*A[A-]*)' # allow any number of options or arguments elif nargs == REMAINDER: - nargs_pattern = '([-AO]*)' + nargs_pattern = '([AO]*)' if option else '(.*)' # allow one argument followed by any number of options or arguments elif nargs == PARSER: - nargs_pattern = '(-*A[-AO]*)' + nargs_pattern = '(A[AO]*)' if option else '(-*A[-AO]*)' # suppress action, like nargs=0 elif nargs == SUPPRESS: - nargs_pattern = '(-*-*)' + nargs_pattern = '()' if option else '(-*)' # all others should be integers else: - nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs) - - # if this is an optional action, -- is not allowed - if action.option_strings: - nargs_pattern = nargs_pattern.replace('-*', '') - nargs_pattern = nargs_pattern.replace('-', '') + nargs_pattern = '([AO]{%d})' % nargs if option else '((?:-*A){%d}-*)' % nargs # return the pattern return nargs_pattern @@ -2503,20 +2507,13 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): # Value conversion methods # ======================== def _get_values(self, action, arg_strings): - # for everything but PARSER, REMAINDER args, strip out first '--' - if not action.option_strings and action.nargs not in [PARSER, REMAINDER]: - try: - arg_strings.remove('--') - except ValueError: - pass - # optional argument produces a default when not present if not arg_strings and action.nargs == OPTIONAL: if action.option_strings: value = action.const else: value = action.default - if isinstance(value, str): + if isinstance(value, str) and value is not SUPPRESS: value = self._get_value(action, value) self._check_value(action, value) @@ -2587,11 +2584,15 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): def _check_value(self, action, value): # converted value must be one of the choices (if specified) - if action.choices is not None and value not in action.choices: - args = {'value': value, - 'choices': ', '.join(map(repr, action.choices))} - msg = _('invalid choice: %(value)r (choose from %(choices)s)') - raise ArgumentError(action, msg % args) + choices = action.choices + if choices is not None: + if isinstance(choices, str): + choices = iter(choices) + if value not in choices: + args = {'value': value, + 'choices': ', '.join(map(repr, action.choices))} + msg = _('invalid choice: %(value)r (choose from %(choices)s)') + raise ArgumentError(action, msg % args) # ======================= # Help-formatting methods diff --git a/contrib/tools/python3/Lib/asyncio/staggered.py b/contrib/tools/python3/Lib/asyncio/staggered.py index 451a53a16f..c3a7441a7b 100644 --- a/contrib/tools/python3/Lib/asyncio/staggered.py +++ b/contrib/tools/python3/Lib/asyncio/staggered.py @@ -3,7 +3,6 @@ __all__ = 'staggered_race', import contextlib -import typing from . import events from . import exceptions as exceptions_mod @@ -11,16 +10,7 @@ from . import locks from . import tasks -async def staggered_race( - coro_fns: typing.Iterable[typing.Callable[[], typing.Awaitable]], - delay: typing.Optional[float], - *, - loop: events.AbstractEventLoop = None, -) -> typing.Tuple[ - typing.Any, - typing.Optional[int], - typing.List[typing.Optional[Exception]] -]: +async def staggered_race(coro_fns, delay, *, loop=None): """Run coroutines with staggered start times and take the first to finish. This method takes an iterable of coroutine functions. The first one is @@ -79,8 +69,7 @@ async def staggered_race( exceptions = [] running_tasks = [] - async def run_one_coro( - previous_failed: typing.Optional[locks.Event]) -> None: + async def run_one_coro(previous_failed) -> None: # Wait for the previous task to finish, or for delay seconds if previous_failed is not None: with contextlib.suppress(exceptions_mod.TimeoutError): diff --git a/contrib/tools/python3/Lib/dataclasses.py b/contrib/tools/python3/Lib/dataclasses.py index c32a30fb29..09a86bd236 100644 --- a/contrib/tools/python3/Lib/dataclasses.py +++ b/contrib/tools/python3/Lib/dataclasses.py @@ -1176,7 +1176,7 @@ def _get_slots(cls): slots = [] if getattr(cls, '__weakrefoffset__', -1) != 0: slots.append('__weakref__') - if getattr(cls, '__dictrefoffset__', -1) != 0: + if getattr(cls, '__dictoffset__', -1) != 0: slots.append('__dict__') yield from slots case str(slot): diff --git a/contrib/tools/python3/Lib/enum.py b/contrib/tools/python3/Lib/enum.py index af5613838d..d9859b3c0a 100644 --- a/contrib/tools/python3/Lib/enum.py +++ b/contrib/tools/python3/Lib/enum.py @@ -487,7 +487,7 @@ class _EnumDict(dict): # accepts iterable as multiple arguments? value = t(auto_valued) except TypeError: - # then pass them in singlely + # then pass them in singly value = t(*auto_valued) self._member_names[key] = None if non_auto_store: diff --git a/contrib/tools/python3/Lib/importlib/resources/readers.py b/contrib/tools/python3/Lib/importlib/resources/readers.py index c3cdf769cb..8e2d8e8250 100644 --- a/contrib/tools/python3/Lib/importlib/resources/readers.py +++ b/contrib/tools/python3/Lib/importlib/resources/readers.py @@ -31,8 +31,10 @@ class FileReader(abc.TraversableResources): class ZipReader(abc.TraversableResources): def __init__(self, loader, module): - _, _, name = module.rpartition('.') - self.prefix = loader.prefix.replace('\\', '/') + name + '/' + self.prefix = loader.prefix.replace('\\', '/') + if loader.is_package(module): + _, _, name = module.rpartition('.') + self.prefix += name + '/' self.archive = loader.archive def open_resource(self, resource): diff --git a/contrib/tools/python3/Lib/ipaddress.py b/contrib/tools/python3/Lib/ipaddress.py index 816fbcd2bc..76031dede8 100644 --- a/contrib/tools/python3/Lib/ipaddress.py +++ b/contrib/tools/python3/Lib/ipaddress.py @@ -2001,6 +2001,9 @@ class IPv6Address(_BaseV6, _BaseAddress): See RFC 2373 2.7 for details. """ + ipv4_mapped = self.ipv4_mapped + if ipv4_mapped is not None: + return ipv4_mapped.is_multicast return self in self._constants._multicast_network @property @@ -2012,6 +2015,9 @@ class IPv6Address(_BaseV6, _BaseAddress): reserved IPv6 Network ranges. """ + ipv4_mapped = self.ipv4_mapped + if ipv4_mapped is not None: + return ipv4_mapped.is_reserved return any(self in x for x in self._constants._reserved_networks) @property @@ -2022,6 +2028,9 @@ class IPv6Address(_BaseV6, _BaseAddress): A boolean, True if the address is reserved per RFC 4291. """ + ipv4_mapped = self.ipv4_mapped + if ipv4_mapped is not None: + return ipv4_mapped.is_link_local return self in self._constants._linklocal_network @property @@ -2078,6 +2087,9 @@ class IPv6Address(_BaseV6, _BaseAddress): ``is_global`` has value opposite to :attr:`is_private`, except for the ``100.64.0.0/10`` IPv4 range where they are both ``False``. """ + ipv4_mapped = self.ipv4_mapped + if ipv4_mapped is not None: + return ipv4_mapped.is_global return not self.is_private @property @@ -2089,6 +2101,9 @@ class IPv6Address(_BaseV6, _BaseAddress): RFC 2373 2.5.2. """ + ipv4_mapped = self.ipv4_mapped + if ipv4_mapped is not None: + return ipv4_mapped.is_unspecified return self._ip == 0 @property @@ -2332,6 +2347,8 @@ class _IPv6Constants: IPv6Network('2001:db8::/32'), # IANA says N/A, let's consider it not globally reachable to be safe IPv6Network('2002::/16'), + # RFC 9637: https://www.rfc-editor.org/rfc/rfc9637.html#section-6-2.2 + IPv6Network('3fff::/20'), IPv6Network('fc00::/7'), IPv6Network('fe80::/10'), ] diff --git a/contrib/tools/python3/Lib/pydoc_data/topics.py b/contrib/tools/python3/Lib/pydoc_data/topics.py index 8113889a1f..b5464cb4d0 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 Fri Sep 6 21:00:45 2024 +# Autogenerated by Sphinx on Tue Oct 1 04:02:04 2024 # as part of the release process. topics = {'assert': 'The "assert" statement\n' '**********************\n' @@ -1094,11 +1094,13 @@ topics = {'assert': 'The "assert" statement\n' 'to the class\n' ' where it is defined. *__slots__* declared in parents ' 'are available\n' - ' in child classes. However, child subclasses will get a ' - '"__dict__"\n' - ' and *__weakref__* unless they also define *__slots__* ' - '(which should\n' - ' only contain names of any *additional* slots).\n' + ' in child classes. However, instances of a child ' + 'subclass will get a\n' + ' "__dict__" and *__weakref__* unless the subclass also ' + 'defines\n' + ' *__slots__* (which should only contain names of any ' + '*additional*\n' + ' slots).\n' '\n' '* If a class defines a slot also defined in a base ' 'class, the instance\n' @@ -3571,10 +3573,12 @@ topics = {'assert': 'The "assert" statement\n' ' parameter_list_no_posonly ::= defparameter ("," ' 'defparameter)* ["," [parameter_list_starargs]]\n' ' | parameter_list_starargs\n' - ' parameter_list_starargs ::= "*" [parameter] ("," ' + ' parameter_list_starargs ::= "*" [star_parameter] ("," ' 'defparameter)* ["," ["**" parameter [","]]]\n' ' | "**" parameter [","]\n' ' parameter ::= identifier [":" expression]\n' + ' star_parameter ::= identifier [":" ["*"] ' + 'expression]\n' ' defparameter ::= parameter ["=" expression]\n' ' funcname ::= identifier\n' '\n' @@ -3702,27 +3706,31 @@ topics = {'assert': 'The "assert" statement\n' 'expression"”\n' 'following the parameter name. Any parameter may have an ' 'annotation,\n' - 'even those of the form "*identifier" or "**identifier". ' - 'Functions may\n' - 'have “return” annotation of the form “"-> expression"” after ' - 'the\n' - 'parameter list. These annotations can be any valid Python ' - 'expression.\n' - 'The presence of annotations does not change the semantics of a\n' - 'function. The annotation values are available as values of a\n' - 'dictionary keyed by the parameters’ names in the ' - '"__annotations__"\n' - 'attribute of the function object. If the "annotations" import ' - 'from\n' - '"__future__" is used, annotations are preserved as strings at ' - 'runtime\n' - 'which enables postponed evaluation. Otherwise, they are ' - 'evaluated\n' - 'when the function definition is executed. In this case ' - 'annotations\n' - 'may be evaluated in a different order than they appear in the ' - 'source\n' - 'code.\n' + 'even those of the form "*identifier" or "**identifier". (As a ' + 'special\n' + 'case, parameters of the form "*identifier" may have an ' + 'annotation “":\n' + '*expression"”.) Functions may have “return” annotation of the ' + 'form\n' + '“"-> expression"” after the parameter list. These annotations ' + 'can be\n' + 'any valid Python expression. The presence of annotations does ' + 'not\n' + 'change the semantics of a function. The annotation values are\n' + 'available as values of a dictionary keyed by the parameters’ ' + 'names in\n' + 'the "__annotations__" attribute of the function object. If the\n' + '"annotations" import from "__future__" is used, annotations are\n' + 'preserved as strings at runtime which enables postponed ' + 'evaluation.\n' + 'Otherwise, they are evaluated when the function definition is\n' + 'executed. In this case annotations may be evaluated in a ' + 'different\n' + 'order than they appear in the source code.\n' + '\n' + 'Changed in version 3.11: Parameters of the form “"*identifier"” ' + 'may\n' + 'have an annotation “": *expression"”. See **PEP 646**.\n' '\n' 'It is also possible to create anonymous functions (functions not ' 'bound\n' @@ -6231,11 +6239,11 @@ topics = {'assert': 'The "assert" statement\n' '\n' '* While annotation scopes have an internal name, that name is ' 'not\n' - ' reflected in the *__qualname__* of objects defined within the ' - 'scope.\n' - ' Instead, the "__qualname__" of such objects is as if the ' - 'object were\n' - ' defined in the enclosing scope.\n' + ' reflected in the *qualified name* of objects defined within ' + 'the\n' + ' scope. Instead, the "__qualname__" of such objects is as if ' + 'the\n' + ' object were defined in the enclosing scope.\n' '\n' 'Added in version 3.12: Annotation scopes were introduced in ' 'Python\n' @@ -6433,12 +6441,17 @@ topics = {'assert': 'The "assert" statement\n' 'exprlists': 'Expression lists\n' '****************\n' '\n' - ' expression_list ::= expression ("," expression)* [","]\n' - ' starred_list ::= starred_item ("," starred_item)* ' + ' starred_expression ::= ["*"] or_expr\n' + ' flexible_expression ::= assignment_expression | ' + 'starred_expression\n' + ' flexible_expression_list ::= flexible_expression ("," ' + 'flexible_expression)* [","]\n' + ' starred_expression_list ::= starred_expression ("," ' + 'starred_expression)* [","]\n' + ' expression_list ::= expression ("," expression)* ' '[","]\n' - ' starred_expression ::= expression | (starred_item ",")* ' - '[starred_item]\n' - ' starred_item ::= assignment_expression | "*" or_expr\n' + ' yield_list ::= expression_list | ' + 'starred_expression "," [starred_expression_list]\n' '\n' 'Except when part of a list or set display, an expression list\n' 'containing at least one comma yields a tuple. The length of ' @@ -6457,6 +6470,10 @@ topics = {'assert': 'The "assert" statement\n' 'Added in version 3.5: Iterable unpacking in expression lists,\n' 'originally proposed by **PEP 448**.\n' '\n' + 'Added in version 3.11: Any item in an expression list may be ' + 'starred.\n' + 'See **PEP 646**.\n' + '\n' 'A trailing comma is required only to create a one-item tuple, ' 'such as\n' '"1,"; it is optional in all other cases. A single expression ' @@ -7142,18 +7159,22 @@ topics = {'assert': 'The "assert" statement\n' 'percent sign. |\n' ' ' '+-----------+------------------------------------------------------------+\n' - ' | None | For "float" this is the same as "\'g\'", ' - 'except that when |\n' - ' | | fixed-point notation is used to format the ' - 'result, it |\n' + ' | None | For "float" this is like the "\'g\'" type, ' + 'except that when |\n' + ' | | fixed- point notation is used to format ' + 'the result, it |\n' ' | | always includes at least one digit past ' - 'the decimal point. |\n' - ' | | The precision used is as large as needed ' - 'to represent the |\n' - ' | | given value faithfully. For "Decimal", ' - 'this is the same |\n' - ' | | as either "\'g\'" or "\'G\'" depending on ' - 'the value of |\n' + 'the decimal point, |\n' + ' | | and switches to the scientific notation ' + 'when "exp >= p - |\n' + ' | | 1". When the precision is not specified, ' + 'the latter will |\n' + ' | | be as large as needed to represent the ' + 'given value |\n' + ' | | faithfully. For "Decimal", this is the ' + 'same as either |\n' + ' | | "\'g\'" or "\'G\'" depending on the value ' + 'of |\n' ' | | "context.capitals" for the current decimal ' 'context. The |\n' ' | | overall effect is to match the output of ' @@ -7343,10 +7364,12 @@ topics = {'assert': 'The "assert" statement\n' ' parameter_list_no_posonly ::= defparameter ("," ' 'defparameter)* ["," [parameter_list_starargs]]\n' ' | parameter_list_starargs\n' - ' parameter_list_starargs ::= "*" [parameter] ("," ' + ' parameter_list_starargs ::= "*" [star_parameter] ("," ' 'defparameter)* ["," ["**" parameter [","]]]\n' ' | "**" parameter [","]\n' ' parameter ::= identifier [":" expression]\n' + ' star_parameter ::= identifier [":" ["*"] ' + 'expression]\n' ' defparameter ::= parameter ["=" expression]\n' ' funcname ::= identifier\n' '\n' @@ -7474,27 +7497,31 @@ topics = {'assert': 'The "assert" statement\n' 'expression"”\n' 'following the parameter name. Any parameter may have an ' 'annotation,\n' - 'even those of the form "*identifier" or "**identifier". ' - 'Functions may\n' - 'have “return” annotation of the form “"-> expression"” after ' - 'the\n' - 'parameter list. These annotations can be any valid Python ' - 'expression.\n' - 'The presence of annotations does not change the semantics of a\n' - 'function. The annotation values are available as values of a\n' - 'dictionary keyed by the parameters’ names in the ' - '"__annotations__"\n' - 'attribute of the function object. If the "annotations" import ' - 'from\n' - '"__future__" is used, annotations are preserved as strings at ' - 'runtime\n' - 'which enables postponed evaluation. Otherwise, they are ' - 'evaluated\n' - 'when the function definition is executed. In this case ' - 'annotations\n' - 'may be evaluated in a different order than they appear in the ' - 'source\n' - 'code.\n' + 'even those of the form "*identifier" or "**identifier". (As a ' + 'special\n' + 'case, parameters of the form "*identifier" may have an ' + 'annotation “":\n' + '*expression"”.) Functions may have “return” annotation of the ' + 'form\n' + '“"-> expression"” after the parameter list. These annotations ' + 'can be\n' + 'any valid Python expression. The presence of annotations does ' + 'not\n' + 'change the semantics of a function. The annotation values are\n' + 'available as values of a dictionary keyed by the parameters’ ' + 'names in\n' + 'the "__annotations__" attribute of the function object. If the\n' + '"annotations" import from "__future__" is used, annotations are\n' + 'preserved as strings at runtime which enables postponed ' + 'evaluation.\n' + 'Otherwise, they are evaluated when the function definition is\n' + 'executed. In this case annotations may be evaluated in a ' + 'different\n' + 'order than they appear in the source code.\n' + '\n' + 'Changed in version 3.11: Parameters of the form “"*identifier"” ' + 'may\n' + 'have an annotation “": *expression"”. See **PEP 646**.\n' '\n' 'It is also possible to create anonymous functions (functions not ' 'bound\n' @@ -8250,7 +8277,8 @@ topics = {'assert': 'The "assert" statement\n' 'in\n' 'square brackets:\n' '\n' - ' list_display ::= "[" [starred_list | comprehension] "]"\n' + ' list_display ::= "[" [flexible_expression_list | comprehension] ' + '"]"\n' '\n' 'A list display yields a new list object, the contents being ' 'specified\n' @@ -8501,11 +8529,9 @@ topics = {'assert': 'The "assert" statement\n' ' can introduce new names.\n' '\n' '* While annotation scopes have an internal name, that name is not\n' - ' reflected in the *__qualname__* of objects defined within the ' - 'scope.\n' - ' Instead, the "__qualname__" of such objects is as if the object ' - 'were\n' - ' defined in the enclosing scope.\n' + ' reflected in the *qualified name* of objects defined within the\n' + ' scope. Instead, the "__qualname__" of such objects is as if the\n' + ' object were defined in the enclosing scope.\n' '\n' 'Added in version 3.12: Annotation scopes were introduced in ' 'Python\n' @@ -9721,20 +9747,6 @@ topics = {'assert': 'The "assert" statement\n' 'not reported\n' 'by the "dir()" built-in function.\n' '\n' - 'object.__dict__\n' - '\n' - ' A dictionary or other mapping object used to store an ' - 'object’s\n' - ' (writable) attributes.\n' - '\n' - 'instance.__class__\n' - '\n' - ' The class to which a class instance belongs.\n' - '\n' - 'class.__bases__\n' - '\n' - ' The tuple of base classes of a class object.\n' - '\n' 'definition.__name__\n' '\n' ' The name of the class, function, method, descriptor, or ' @@ -9749,39 +9761,26 @@ topics = {'assert': 'The "assert" statement\n' '\n' ' Added in version 3.3.\n' '\n' - 'definition.__type_params__\n' - '\n' - ' The type parameters of generic classes, functions, and ' - 'type\n' - ' aliases.\n' - '\n' - ' Added in version 3.12.\n' - '\n' - 'class.__mro__\n' + 'definition.__module__\n' '\n' - ' This attribute is a tuple of classes that are considered ' - 'when\n' - ' looking for base classes during method resolution.\n' + ' The name of the module in which a class or function was ' + 'defined.\n' '\n' - 'class.mro()\n' + 'definition.__doc__\n' '\n' - ' This method can be overridden by a metaclass to customize ' - 'the\n' - ' method resolution order for its instances. It is called ' - 'at class\n' - ' instantiation, and its result is stored in "__mro__".\n' + ' The documentation string of a class or function, or ' + '"None" if\n' + ' undefined.\n' '\n' - 'class.__subclasses__()\n' + 'definition.__type_params__\n' '\n' - ' Each class keeps a list of weak references to its ' - 'immediate\n' - ' subclasses. This method returns a list of all those ' - 'references\n' - ' still alive. The list is in definition order. Example:\n' + ' The type parameters of generic classes, functions, and ' + 'type\n' + ' aliases. For classes and functions that are not generic, ' + 'this will\n' + ' be an empty tuple.\n' '\n' - ' >>> int.__subclasses__()\n' - " [<class 'bool'>, <enum 'IntEnum'>, <flag 'IntFlag'>, " - "<class 're._constants._NamedIntConstant'>]\n", + ' Added in version 3.12.\n', 'specialnames': 'Special method names\n' '********************\n' '\n' @@ -10727,11 +10726,13 @@ topics = {'assert': 'The "assert" statement\n' 'the class\n' ' where it is defined. *__slots__* declared in parents are ' 'available\n' - ' in child classes. However, child subclasses will get a ' - '"__dict__"\n' - ' and *__weakref__* unless they also define *__slots__* ' - '(which should\n' - ' only contain names of any *additional* slots).\n' + ' in child classes. However, instances of a child subclass ' + 'will get a\n' + ' "__dict__" and *__weakref__* unless the subclass also ' + 'defines\n' + ' *__slots__* (which should only contain names of any ' + '*additional*\n' + ' slots).\n' '\n' '* If a class defines a slot also defined in a base class, ' 'the instance\n' @@ -11148,7 +11149,7 @@ topics = {'assert': 'The "assert" statement\n' 'built-in\n' 'types), including other ABCs.\n' '\n' - 'class.__instancecheck__(self, instance)\n' + 'type.__instancecheck__(self, instance)\n' '\n' ' Return true if *instance* should be considered a (direct ' 'or\n' @@ -11156,7 +11157,7 @@ topics = {'assert': 'The "assert" statement\n' 'implement\n' ' "isinstance(instance, class)".\n' '\n' - 'class.__subclasscheck__(self, subclass)\n' + 'type.__subclasscheck__(self, subclass)\n' '\n' ' Return true if *subclass* should be considered a (direct ' 'or\n' @@ -13278,7 +13279,8 @@ topics = {'assert': 'The "assert" statement\n' '*generic\n' 'class* will generally return a GenericAlias object.\n' '\n' - ' subscription ::= primary "[" expression_list "]"\n' + ' subscription ::= primary "[" flexible_expression_list ' + '"]"\n' '\n' 'When an object is subscripted, the interpreter will ' 'evaluate the\n' @@ -13297,13 +13299,18 @@ topics = {'assert': 'The "assert" statement\n' 'see\n' '__class_getitem__ versus __getitem__.\n' '\n' - 'If the expression list contains at least one comma, it will ' - 'evaluate\n' - 'to a "tuple" containing the items of the expression list. ' - 'Otherwise,\n' - 'the expression list will evaluate to the value of the ' - 'list’s sole\n' - 'member.\n' + 'If the expression list contains at least one comma, or if ' + 'any of the\n' + 'expressions are starred, the expression list will evaluate ' + 'to a\n' + '"tuple" containing the items of the expression list. ' + 'Otherwise, the\n' + 'expression list will evaluate to the value of the list’s ' + 'sole member.\n' + '\n' + 'Changed in version 3.11: Expressions in an expression list ' + 'may be\n' + 'starred. See **PEP 646**.\n' '\n' 'For built-in objects, there are two types of objects that ' 'support\n' @@ -14052,8 +14059,8 @@ topics = {'assert': 'The "assert" statement\n' '|====================================================|====================================================|\n' '| function.__doc__ | The ' 'function’s documentation string, or "None" if |\n' - '| | unavailable. ' - 'Not inherited by subclasses. |\n' + '| | ' + 'unavailable. |\n' '+----------------------------------------------------+----------------------------------------------------+\n' '| function.__name__ | The ' 'function’s name. See also: "__name__ |\n' @@ -14423,32 +14430,104 @@ topics = {'assert': 'The "assert" statement\n' 'A class object can be called (see above) to yield a class instance\n' '(see below).\n' '\n' - 'Special attributes:\n' '\n' - ' "__name__"\n' - ' The class name.\n' + 'Special attributes\n' + '------------------\n' '\n' - ' "__module__"\n' - ' The name of the module in which the class was defined.\n' + '+----------------------------------------------------+----------------------------------------------------+\n' + '| Attribute | ' + 'Meaning |\n' + '|====================================================|====================================================|\n' + '| type.__name__ | The class’s ' + 'name. See also: "__name__ attributes". |\n' + '+----------------------------------------------------+----------------------------------------------------+\n' + '| type.__qualname__ | The class’s ' + '*qualified name*. See also: |\n' + '| | ' + '"__qualname__ attributes". |\n' + '+----------------------------------------------------+----------------------------------------------------+\n' + '| type.__module__ | The name of ' + 'the module in which the class was |\n' + '| | ' + 'defined. |\n' + '+----------------------------------------------------+----------------------------------------------------+\n' + '| type.__dict__ | A "mapping ' + 'proxy" providing a read-only view of |\n' + '| | the class’s ' + 'namespace. See also: "__dict__ |\n' + '| | ' + 'attributes". |\n' + '+----------------------------------------------------+----------------------------------------------------+\n' + '| type.__bases__ | A "tuple" ' + 'containing the class’s bases. In most |\n' + '| | cases, for a ' + 'class defined as "class X(A, B, C)", |\n' + '| | ' + '"X.__bases__" will be exactly equal to "(A, B, |\n' + '| | ' + 'C)". |\n' + '+----------------------------------------------------+----------------------------------------------------+\n' + '| type.__doc__ | The class’s ' + 'documentation string, or "None" if |\n' + '| | undefined. ' + 'Not inherited by subclasses. |\n' + '+----------------------------------------------------+----------------------------------------------------+\n' + '| type.__annotations__ | A dictionary ' + 'containing *variable annotations* |\n' + '| | collected ' + 'during class body execution. For best |\n' + '| | practices on ' + 'working with "__annotations__", |\n' + '| | please see ' + 'Annotations Best Practices. Caution: |\n' + '| | Accessing ' + 'the "__annotations__" attribute of a |\n' + '| | class object ' + 'directly may yield incorrect results |\n' + '| | in the ' + 'presence of metaclasses. In addition, the |\n' + '| | attribute ' + 'may not exist for some classes. Use |\n' + '| | ' + '"inspect.get_annotations()" to retrieve class |\n' + '| | annotations ' + 'safely. |\n' + '+----------------------------------------------------+----------------------------------------------------+\n' + '| type.__type_params__ | A "tuple" ' + 'containing the type parameters of a |\n' + '| | generic ' + 'class. Added in version 3.12. |\n' + '+----------------------------------------------------+----------------------------------------------------+\n' + '| type.__mro__ | The "tuple" ' + 'of classes that are considered when |\n' + '| | looking for ' + 'base classes during method resolution. |\n' + '+----------------------------------------------------+----------------------------------------------------+\n' '\n' - ' "__dict__"\n' - ' The dictionary containing the class’s namespace.\n' '\n' - ' "__bases__"\n' - ' A tuple containing the base classes, in the order of their\n' - ' occurrence in the base class list.\n' + 'Special methods\n' + '---------------\n' '\n' - ' "__doc__"\n' - ' The class’s documentation string, or "None" if undefined.\n' + 'In addition to the special attributes described above, all Python\n' + 'classes also have the following two methods available:\n' '\n' - ' "__annotations__"\n' - ' A dictionary containing *variable annotations* collected ' - 'during\n' - ' class body execution. For best practices on working with\n' - ' "__annotations__", please see Annotations Best Practices.\n' + 'type.mro()\n' '\n' - ' "__type_params__"\n' - ' A tuple containing the type parameters of a generic class.\n' + ' This method can be overridden by a metaclass to customize the\n' + ' method resolution order for its instances. It is called at ' + 'class\n' + ' instantiation, and its result is stored in "__mro__".\n' + '\n' + 'type.__subclasses__()\n' + '\n' + ' Each class keeps a list of weak references to its immediate\n' + ' subclasses. This method returns a list of all those references\n' + ' still alive. The list is in definition order. Example:\n' + '\n' + ' >>> class A: pass\n' + ' >>> class B(A): pass\n' + ' >>> A.__subclasses__()\n' + " [<class 'B'>]\n" '\n' '\n' 'Class instances\n' @@ -14488,8 +14567,19 @@ topics = {'assert': 'The "assert" statement\n' 'they have methods with certain special names. See section Special\n' 'method names.\n' '\n' - 'Special attributes: "__dict__" is the attribute dictionary;\n' - '"__class__" is the instance’s class.\n' + '\n' + 'Special attributes\n' + '------------------\n' + '\n' + 'object.__class__\n' + '\n' + ' The class to which a class instance belongs.\n' + '\n' + 'object.__dict__\n' + '\n' + ' A dictionary or other mapping object used to store an object’s\n' + ' (writable) attributes. Not all instances have a "__dict__"\n' + ' attribute; see the section on __slots__ for more details.\n' '\n' '\n' 'I/O objects (also known as file objects)\n' diff --git a/contrib/tools/python3/Lib/unittest/mock.py b/contrib/tools/python3/Lib/unittest/mock.py index 9398f56506..3e9791b22d 100644 --- a/contrib/tools/python3/Lib/unittest/mock.py +++ b/contrib/tools/python3/Lib/unittest/mock.py @@ -598,7 +598,9 @@ class NonCallableMock(Base): side_effect = property(__get_side_effect, __set_side_effect) - def reset_mock(self, visited=None,*, return_value=False, side_effect=False): + def reset_mock(self, visited=None, *, + return_value: bool = False, + side_effect: bool = False): "Restore the mock object to its initial state." if visited is None: visited = [] @@ -2189,6 +2191,17 @@ class MagicMock(MagicMixin, Mock): self._mock_add_spec(spec, spec_set) self._mock_set_magics() + def reset_mock(self, /, *args, return_value: bool = False, **kwargs): + if ( + return_value + and self._mock_name + and _is_magic(self._mock_name) + ): + # Don't reset return values for magic methods, + # otherwise `m.__str__` will start + # to return `MagicMock` instances, instead of `str` instances. + return_value = False + super().reset_mock(*args, return_value=return_value, **kwargs) class MagicProxy(Base): diff --git a/contrib/tools/python3/Lib/ya.make b/contrib/tools/python3/Lib/ya.make index cf6f637f36..30bec98478 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.6) +VERSION(3.12.7) -ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.6.tar.gz) +ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.7.tar.gz) LICENSE(Python-2.0) diff --git a/contrib/tools/python3/Lib/zipimport.py b/contrib/tools/python3/Lib/zipimport.py index a7333a4c49..7669abd6c4 100644 --- a/contrib/tools/python3/Lib/zipimport.py +++ b/contrib/tools/python3/Lib/zipimport.py @@ -254,17 +254,9 @@ class zipimporter(_bootstrap_external._LoaderBasics): def get_resource_reader(self, fullname): - """Return the ResourceReader for a package in a zip file. - - If 'fullname' is a package within the zip file, return the - 'ResourceReader' object for the package. Otherwise return None. - """ - try: - if not self.is_package(fullname): - return None - except ZipImportError: - return None + """Return the ResourceReader for a module in a zip file.""" from importlib.readers import ZipReader + return ZipReader(self, fullname) diff --git a/contrib/tools/python3/Modules/_ctypes/_ctypes.c b/contrib/tools/python3/Modules/_ctypes/_ctypes.c index c5157560f6..d72614d2b8 100644 --- a/contrib/tools/python3/Modules/_ctypes/_ctypes.c +++ b/contrib/tools/python3/Modules/_ctypes/_ctypes.c @@ -2164,9 +2164,15 @@ PyCSimpleType_new(PyTypeObject *type, PyObject *args, PyObject *kwds) Py_DECREF(result); return NULL; } - x = PyDict_SetItemString(result->tp_dict, - ml->ml_name, - meth); + PyObject *name = PyUnicode_FromString(ml->ml_name); + if (name == NULL) { + Py_DECREF(meth); + Py_DECREF(result); + return NULL; + } + PyUnicode_InternInPlace(&name); + x = PyDict_SetItem(result->tp_dict, name, meth); + Py_DECREF(name); Py_DECREF(meth); if (x == -1) { Py_DECREF(result); diff --git a/contrib/tools/python3/Modules/_io/stringio.c b/contrib/tools/python3/Modules/_io/stringio.c index 3eb25704b4..568d0bd709 100644 --- a/contrib/tools/python3/Modules/_io/stringio.c +++ b/contrib/tools/python3/Modules/_io/stringio.c @@ -193,7 +193,7 @@ write_str(stringio *self, PyObject *obj) } if (self->writenl) { PyObject *translated = PyUnicode_Replace( - decoded, &_Py_STR(newline), self->writenl, -1); + decoded, _Py_LATIN1_CHR('\n'), self->writenl, -1); Py_SETREF(decoded, translated); } if (decoded == NULL) diff --git a/contrib/tools/python3/Modules/_operator.c b/contrib/tools/python3/Modules/_operator.c index 68ccc90562..720687d4ad 100644 --- a/contrib/tools/python3/Modules/_operator.c +++ b/contrib/tools/python3/Modules/_operator.c @@ -2,6 +2,9 @@ #include "pycore_moduleobject.h" // _PyModule_GetState() #include "structmember.h" // PyMemberDef #include "pycore_runtime.h" // _Py_ID() +#include "pycore_pystate.h" // _PyInterpreterState_GET() + + #include "clinic/_operator.c.h" typedef struct { @@ -1224,6 +1227,7 @@ attrgetter_new(PyTypeObject *type, PyObject *args, PyObject *kwds) return NULL; /* prepare attr while checking args */ + PyInterpreterState *interp = _PyInterpreterState_GET(); for (idx = 0; idx < nattrs; ++idx) { PyObject *item = PyTuple_GET_ITEM(args, idx); int dot_count; @@ -1251,7 +1255,7 @@ attrgetter_new(PyTypeObject *type, PyObject *args, PyObject *kwds) if (dot_count == 0) { Py_INCREF(item); - PyUnicode_InternInPlace(&item); + _PyUnicode_InternMortal(interp, &item); PyTuple_SET_ITEM(attr, idx, item); } else { /* make it a tuple of non-dotted attrnames */ PyObject *attr_chain = PyTuple_New(dot_count + 1); @@ -1277,7 +1281,7 @@ attrgetter_new(PyTypeObject *type, PyObject *args, PyObject *kwds) Py_DECREF(attr); return NULL; } - PyUnicode_InternInPlace(&attr_chain_item); + _PyUnicode_InternMortal(interp, &attr_chain_item); PyTuple_SET_ITEM(attr_chain, attr_chain_idx, attr_chain_item); ++attr_chain_idx; unibuff_till = unibuff_from = unibuff_till + 1; @@ -1291,7 +1295,7 @@ attrgetter_new(PyTypeObject *type, PyObject *args, PyObject *kwds) Py_DECREF(attr); return NULL; } - PyUnicode_InternInPlace(&attr_chain_item); + _PyUnicode_InternMortal(interp, &attr_chain_item); PyTuple_SET_ITEM(attr_chain, attr_chain_idx, attr_chain_item); PyTuple_SET_ITEM(attr, idx, attr_chain); @@ -1587,7 +1591,8 @@ methodcaller_new(PyTypeObject *type, PyObject *args, PyObject *kwds) name = PyTuple_GET_ITEM(args, 0); Py_INCREF(name); - PyUnicode_InternInPlace(&name); + PyInterpreterState *interp = _PyInterpreterState_GET(); + _PyUnicode_InternMortal(interp, &name); mc->name = name; mc->kwds = Py_XNewRef(kwds); diff --git a/contrib/tools/python3/Modules/_pickle.c b/contrib/tools/python3/Modules/_pickle.c index 831d53bc82..879c18263d 100644 --- a/contrib/tools/python3/Modules/_pickle.c +++ b/contrib/tools/python3/Modules/_pickle.c @@ -1865,8 +1865,7 @@ get_dotted_path(PyObject *obj, PyObject *name) { PyObject *dotted_path; Py_ssize_t i, n; - _Py_DECLARE_STR(dot, "."); - dotted_path = PyUnicode_Split(name, &_Py_STR(dot), -1); + dotted_path = PyUnicode_Split(name, _Py_LATIN1_CHR('.'), -1); if (dotted_path == NULL) return NULL; n = PyList_GET_SIZE(dotted_path); @@ -6717,8 +6716,10 @@ load_build(PickleState *st, UnpicklerObject *self) /* normally the keys for instance attributes are interned. we should try to do that here. */ Py_INCREF(d_key); - if (PyUnicode_CheckExact(d_key)) - PyUnicode_InternInPlace(&d_key); + if (PyUnicode_CheckExact(d_key)) { + PyInterpreterState *interp = _PyInterpreterState_GET(); + _PyUnicode_InternMortal(interp, &d_key); + } if (PyObject_SetItem(dict, d_key, d_value) < 0) { Py_DECREF(d_key); goto error; diff --git a/contrib/tools/python3/Modules/_sqlite/clinic/connection.c.h b/contrib/tools/python3/Modules/_sqlite/clinic/connection.c.h index 417abcc462..93e4a0f328 100644 --- a/contrib/tools/python3/Modules/_sqlite/clinic/connection.c.h +++ b/contrib/tools/python3/Modules/_sqlite/clinic/connection.c.h @@ -717,7 +717,7 @@ pysqlite_connection_set_progress_handler(pysqlite_Connection *self, PyTypeObject PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(progress_handler), &_Py_ID(n), }, + .ob_item = { &_Py_ID(progress_handler), _Py_LATIN1_CHR('n'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -1665,4 +1665,4 @@ exit: #ifndef DESERIALIZE_METHODDEF #define DESERIALIZE_METHODDEF #endif /* !defined(DESERIALIZE_METHODDEF) */ -/*[clinic end generated code: output=834a99827555bf1a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=305d580e3eaa622d input=a9049054013a1b77]*/ diff --git a/contrib/tools/python3/Modules/_sqlite/ya.make b/contrib/tools/python3/Modules/_sqlite/ya.make index 4353c77e5e..9b0a2db882 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.6) +VERSION(3.12.7) -ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.6.tar.gz) +ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.7.tar.gz) LICENSE(Python-2.0) diff --git a/contrib/tools/python3/Modules/_ssl.c b/contrib/tools/python3/Modules/_ssl.c index e72675c6b5..7a104bebb4 100644 --- a/contrib/tools/python3/Modules/_ssl.c +++ b/contrib/tools/python3/Modules/_ssl.c @@ -2224,6 +2224,17 @@ PySSL_dealloc(PySSLSocket *self) PyTypeObject *tp = Py_TYPE(self); PyObject_GC_UnTrack(self); if (self->ssl) { + // If we free the SSL socket object without having called SSL_shutdown, + // OpenSSL will invalidate the linked SSL session object. While this + // behavior is strictly RFC-compliant, it makes session reuse less + // likely and it would also break compatibility with older stdlib + // versions (which used an ugly workaround of duplicating the + // SSL_SESSION object). + // Therefore, we ensure the socket is marked as shutdown in any case. + // + // See elaborate explanation at + // https://github.com/python/cpython/pull/123249#discussion_r1766164530 + SSL_set_shutdown(self->ssl, SSL_SENT_SHUTDOWN | SSL_get_shutdown(self->ssl)); SSL_free(self->ssl); } Py_XDECREF(self->Socket); @@ -2768,48 +2779,6 @@ _ssl__SSLSocket_verify_client_post_handshake_impl(PySSLSocket *self) #endif } -static SSL_SESSION* -_ssl_session_dup(SSL_SESSION *session) { - SSL_SESSION *newsession = NULL; - int slen; - unsigned char *senc = NULL, *p; - const unsigned char *const_p; - - if (session == NULL) { - PyErr_SetString(PyExc_ValueError, "Invalid session"); - goto error; - } - - /* get length */ - slen = i2d_SSL_SESSION(session, NULL); - if (slen == 0 || slen > 0xFF00) { - PyErr_SetString(PyExc_ValueError, "i2d() failed"); - goto error; - } - if ((senc = PyMem_Malloc(slen)) == NULL) { - PyErr_NoMemory(); - goto error; - } - p = senc; - if (!i2d_SSL_SESSION(session, &p)) { - PyErr_SetString(PyExc_ValueError, "i2d() failed"); - goto error; - } - const_p = senc; - newsession = d2i_SSL_SESSION(NULL, &const_p, slen); - if (newsession == NULL) { - PyErr_SetString(PyExc_ValueError, "d2i() failed"); - goto error; - } - PyMem_Free(senc); - return newsession; - error: - if (senc != NULL) { - PyMem_Free(senc); - } - return NULL; -} - static PyObject * PySSL_get_session(PySSLSocket *self, void *closure) { /* get_session can return sessions from a server-side connection, @@ -2817,15 +2786,6 @@ PySSL_get_session(PySSLSocket *self, void *closure) { PySSLSession *pysess; SSL_SESSION *session; - /* duplicate session as workaround for session bug in OpenSSL 1.1.0, - * https://github.com/openssl/openssl/issues/1550 */ - session = SSL_get0_session(self->ssl); /* borrowed reference */ - if (session == NULL) { - Py_RETURN_NONE; - } - if ((session = _ssl_session_dup(session)) == NULL) { - return NULL; - } session = SSL_get1_session(self->ssl); if (session == NULL) { Py_RETURN_NONE; @@ -2844,11 +2804,8 @@ PySSL_get_session(PySSLSocket *self, void *closure) { } static int PySSL_set_session(PySSLSocket *self, PyObject *value, - void *closure) - { + void *closure) { PySSLSession *pysess; - SSL_SESSION *session; - int result; if (!Py_IS_TYPE(value, get_state_sock(self)->PySSLSession_Type)) { PyErr_SetString(PyExc_TypeError, "Value is not a SSLSession."); @@ -2871,14 +2828,7 @@ static int PySSL_set_session(PySSLSocket *self, PyObject *value, "Cannot set session after handshake."); return -1; } - /* duplicate session */ - if ((session = _ssl_session_dup(pysess->session)) == NULL) { - return -1; - } - result = SSL_set_session(self->ssl, session); - /* free duplicate, SSL_set_session() bumps ref count */ - SSL_SESSION_free(session); - if (result == 0) { + if (SSL_set_session(self->ssl, pysess->session) == 0) { _setSSLError(get_state_sock(self), NULL, 0, __FILE__, __LINE__); return -1; } diff --git a/contrib/tools/python3/Modules/_struct.c b/contrib/tools/python3/Modules/_struct.c index e8d9f86e19..84474043b0 100644 --- a/contrib/tools/python3/Modules/_struct.c +++ b/contrib/tools/python3/Modules/_struct.c @@ -1662,9 +1662,16 @@ s_unpack_internal(PyStructObject *soself, const char *startfrom, if (e->format == 's') { v = PyBytes_FromStringAndSize(res, code->size); } else if (e->format == 'p') { - Py_ssize_t n = *(unsigned char*)res; - if (n >= code->size) - n = code->size - 1; + Py_ssize_t n; + if (code->size == 0) { + n = 0; + } + else { + n = *(unsigned char*)res; + if (n >= code->size) { + n = code->size - 1; + } + } v = PyBytes_FromStringAndSize(res + 1, n); } else { v = e->unpack(state, res, e); @@ -1975,8 +1982,12 @@ s_pack_internal(PyStructObject *soself, PyObject *const *args, int offset, n = PyByteArray_GET_SIZE(v); p = PyByteArray_AS_STRING(v); } - if (n > (code->size - 1)) + if (code->size == 0) { + n = 0; + } + else if (n > (code->size - 1)) { n = code->size - 1; + } if (n > 0) memcpy(res + 1, p, n); if (n > 255) diff --git a/contrib/tools/python3/Modules/_xxtestfuzz/README.rst b/contrib/tools/python3/Modules/_xxtestfuzz/README.rst index 42bd02a03c..27c44f7bb8 100644 --- a/contrib/tools/python3/Modules/_xxtestfuzz/README.rst +++ b/contrib/tools/python3/Modules/_xxtestfuzz/README.rst @@ -20,7 +20,7 @@ Add the test name on a new line in ``fuzz_tests.txt``. In ``fuzzer.c``, add a function to be run:: - int $test_name (const char* data, size_t size) { + static int $fuzz_test_name(const char* data, size_t size) { ... return 0; } @@ -28,10 +28,12 @@ In ``fuzzer.c``, add a function to be run:: And invoke it from ``LLVMFuzzerTestOneInput``:: - #if _Py_FUZZ_YES(fuzz_builtin_float) - rv |= _run_fuzz(data, size, fuzz_builtin_float); + #if !defined(_Py_FUZZ_ONE) || defined(_Py_FUZZ_$fuzz_test_name) + rv |= _run_fuzz(data, size, $fuzz_test_name); #endif +Don't forget to replace ``$fuzz_test_name`` with your actual test name. + ``LLVMFuzzerTestOneInput`` will run in oss-fuzz, with each test in ``fuzz_tests.txt`` run separately. diff --git a/contrib/tools/python3/Modules/clinic/_bisectmodule.c.h b/contrib/tools/python3/Modules/clinic/_bisectmodule.c.h index 7944f5219b..cfd1c98402 100644 --- a/contrib/tools/python3/Modules/clinic/_bisectmodule.c.h +++ b/contrib/tools/python3/Modules/clinic/_bisectmodule.c.h @@ -43,7 +43,7 @@ _bisect_bisect_right(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(a), &_Py_ID(x), &_Py_ID(lo), &_Py_ID(hi), &_Py_ID(key), }, + .ob_item = { _Py_LATIN1_CHR('a'), _Py_LATIN1_CHR('x'), &_Py_ID(lo), &_Py_ID(hi), &_Py_ID(key), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -151,7 +151,7 @@ _bisect_insort_right(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(a), &_Py_ID(x), &_Py_ID(lo), &_Py_ID(hi), &_Py_ID(key), }, + .ob_item = { _Py_LATIN1_CHR('a'), _Py_LATIN1_CHR('x'), &_Py_ID(lo), &_Py_ID(hi), &_Py_ID(key), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -256,7 +256,7 @@ _bisect_bisect_left(PyObject *module, PyObject *const *args, Py_ssize_t nargs, P PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(a), &_Py_ID(x), &_Py_ID(lo), &_Py_ID(hi), &_Py_ID(key), }, + .ob_item = { _Py_LATIN1_CHR('a'), _Py_LATIN1_CHR('x'), &_Py_ID(lo), &_Py_ID(hi), &_Py_ID(key), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -364,7 +364,7 @@ _bisect_insort_left(PyObject *module, PyObject *const *args, Py_ssize_t nargs, P PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(a), &_Py_ID(x), &_Py_ID(lo), &_Py_ID(hi), &_Py_ID(key), }, + .ob_item = { _Py_LATIN1_CHR('a'), _Py_LATIN1_CHR('x'), &_Py_ID(lo), &_Py_ID(hi), &_Py_ID(key), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -433,4 +433,4 @@ skip_optional_kwonly: exit: return return_value; } -/*[clinic end generated code: output=5a7fa64bf9b262f3 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=57335e39ce2bf80e input=a9049054013a1b77]*/ diff --git a/contrib/tools/python3/Modules/clinic/_hashopenssl.c.h b/contrib/tools/python3/Modules/clinic/_hashopenssl.c.h index fb61a44401..84e23462b8 100644 --- a/contrib/tools/python3/Modules/clinic/_hashopenssl.c.h +++ b/contrib/tools/python3/Modules/clinic/_hashopenssl.c.h @@ -1354,7 +1354,7 @@ _hashlib_scrypt(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObj PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(password), &_Py_ID(salt), &_Py_ID(n), &_Py_ID(r), &_Py_ID(p), &_Py_ID(maxmem), &_Py_ID(dklen), }, + .ob_item = { &_Py_ID(password), &_Py_ID(salt), _Py_LATIN1_CHR('n'), _Py_LATIN1_CHR('r'), _Py_LATIN1_CHR('p'), &_Py_ID(maxmem), &_Py_ID(dklen), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -1851,4 +1851,4 @@ exit: #ifndef _HASHLIB_SCRYPT_METHODDEF #define _HASHLIB_SCRYPT_METHODDEF #endif /* !defined(_HASHLIB_SCRYPT_METHODDEF) */ -/*[clinic end generated code: output=b339e255db698147 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=4734184f6555dc95 input=a9049054013a1b77]*/ diff --git a/contrib/tools/python3/Modules/clinic/_testclinic.c.h b/contrib/tools/python3/Modules/clinic/_testclinic.c.h index a9bcbf753d..31a366df14 100644 --- a/contrib/tools/python3/Modules/clinic/_testclinic.c.h +++ b/contrib/tools/python3/Modules/clinic/_testclinic.c.h @@ -1263,7 +1263,7 @@ keywords(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kw PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(a), &_Py_ID(b), }, + .ob_item = { _Py_LATIN1_CHR('a'), _Py_LATIN1_CHR('b'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -1319,7 +1319,7 @@ keywords_kwonly(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObj PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(a), &_Py_ID(b), }, + .ob_item = { _Py_LATIN1_CHR('a'), _Py_LATIN1_CHR('b'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -1375,7 +1375,7 @@ keywords_opt(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(a), &_Py_ID(b), &_Py_ID(c), }, + .ob_item = { _Py_LATIN1_CHR('a'), _Py_LATIN1_CHR('b'), _Py_LATIN1_CHR('c'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -1444,7 +1444,7 @@ keywords_opt_kwonly(PyObject *module, PyObject *const *args, Py_ssize_t nargs, P PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(a), &_Py_ID(b), &_Py_ID(c), &_Py_ID(d), }, + .ob_item = { _Py_LATIN1_CHR('a'), _Py_LATIN1_CHR('b'), _Py_LATIN1_CHR('c'), _Py_LATIN1_CHR('d'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -1524,7 +1524,7 @@ keywords_kwonly_opt(PyObject *module, PyObject *const *args, Py_ssize_t nargs, P PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(a), &_Py_ID(b), &_Py_ID(c), }, + .ob_item = { _Py_LATIN1_CHR('a'), _Py_LATIN1_CHR('b'), _Py_LATIN1_CHR('c'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -1592,7 +1592,7 @@ posonly_keywords(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyOb PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(b), }, + .ob_item = { _Py_LATIN1_CHR('b'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -1648,7 +1648,7 @@ posonly_kwonly(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObje PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(b), }, + .ob_item = { _Py_LATIN1_CHR('b'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -1705,7 +1705,7 @@ posonly_keywords_kwonly(PyObject *module, PyObject *const *args, Py_ssize_t narg PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(b), &_Py_ID(c), }, + .ob_item = { _Py_LATIN1_CHR('b'), _Py_LATIN1_CHR('c'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -1764,7 +1764,7 @@ posonly_keywords_opt(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(b), &_Py_ID(c), &_Py_ID(d), }, + .ob_item = { _Py_LATIN1_CHR('b'), _Py_LATIN1_CHR('c'), _Py_LATIN1_CHR('d'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -1835,7 +1835,7 @@ posonly_opt_keywords_opt(PyObject *module, PyObject *const *args, Py_ssize_t nar PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(c), &_Py_ID(d), }, + .ob_item = { _Py_LATIN1_CHR('c'), _Py_LATIN1_CHR('d'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -1911,7 +1911,7 @@ posonly_kwonly_opt(PyObject *module, PyObject *const *args, Py_ssize_t nargs, Py PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(b), &_Py_ID(c), &_Py_ID(d), }, + .ob_item = { _Py_LATIN1_CHR('b'), _Py_LATIN1_CHR('c'), _Py_LATIN1_CHR('d'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -1982,7 +1982,7 @@ posonly_opt_kwonly_opt(PyObject *module, PyObject *const *args, Py_ssize_t nargs PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(c), &_Py_ID(d), }, + .ob_item = { _Py_LATIN1_CHR('c'), _Py_LATIN1_CHR('d'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -2058,7 +2058,7 @@ posonly_keywords_kwonly_opt(PyObject *module, PyObject *const *args, Py_ssize_t PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(b), &_Py_ID(c), &_Py_ID(d), &_Py_ID(e), }, + .ob_item = { _Py_LATIN1_CHR('b'), _Py_LATIN1_CHR('c'), _Py_LATIN1_CHR('d'), _Py_LATIN1_CHR('e'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -2133,7 +2133,7 @@ posonly_keywords_opt_kwonly_opt(PyObject *module, PyObject *const *args, Py_ssiz PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(b), &_Py_ID(c), &_Py_ID(d), &_Py_ID(e), }, + .ob_item = { _Py_LATIN1_CHR('b'), _Py_LATIN1_CHR('c'), _Py_LATIN1_CHR('d'), _Py_LATIN1_CHR('e'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -2217,7 +2217,7 @@ posonly_opt_keywords_opt_kwonly_opt(PyObject *module, PyObject *const *args, Py_ PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(c), &_Py_ID(d), }, + .ob_item = { _Py_LATIN1_CHR('c'), _Py_LATIN1_CHR('d'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -2296,7 +2296,7 @@ keyword_only_parameter(PyObject *module, PyObject *const *args, Py_ssize_t nargs PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(a), }, + .ob_item = { _Py_LATIN1_CHR('a'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -2351,7 +2351,7 @@ posonly_vararg(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObje PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(b), }, + .ob_item = { _Py_LATIN1_CHR('b'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -2446,7 +2446,7 @@ vararg(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwna PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(a), }, + .ob_item = { _Py_LATIN1_CHR('a'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -2504,7 +2504,7 @@ vararg_with_default(PyObject *module, PyObject *const *args, Py_ssize_t nargs, P PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(a), &_Py_ID(b), }, + .ob_item = { _Py_LATIN1_CHR('a'), _Py_LATIN1_CHR('b'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -2572,7 +2572,7 @@ vararg_with_default2(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(a), &_Py_ID(b), &_Py_ID(c), }, + .ob_item = { _Py_LATIN1_CHR('a'), _Py_LATIN1_CHR('b'), _Py_LATIN1_CHR('c'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -2643,7 +2643,7 @@ vararg_with_only_defaults(PyObject *module, PyObject *const *args, Py_ssize_t na PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(b), }, + .ob_item = { _Py_LATIN1_CHR('b'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -3169,4 +3169,4 @@ _testclinic_TestClass_meth_method_no_params(PyObject *self, PyTypeObject *cls, P } return _testclinic_TestClass_meth_method_no_params_impl(self, cls); } -/*[clinic end generated code: output=d1fcf6ab8867f4ad input=a9049054013a1b77]*/ +/*[clinic end generated code: output=74fdd265fd402226 input=a9049054013a1b77]*/ diff --git a/contrib/tools/python3/Modules/clinic/_testmultiphase.c.h b/contrib/tools/python3/Modules/clinic/_testmultiphase.c.h index 4f2b1bcf98..c63f9e3221 100644 --- a/contrib/tools/python3/Modules/clinic/_testmultiphase.c.h +++ b/contrib/tools/python3/Modules/clinic/_testmultiphase.c.h @@ -88,7 +88,7 @@ _testmultiphase_StateAccessType_increment_count_clinic(StateAccessTypeObject *se PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(n), &_Py_ID(twice), }, + .ob_item = { _Py_LATIN1_CHR('n'), &_Py_ID(twice), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -162,4 +162,4 @@ _testmultiphase_StateAccessType_get_count(StateAccessTypeObject *self, PyTypeObj } return _testmultiphase_StateAccessType_get_count_impl(self, cls); } -/*[clinic end generated code: output=2193fe33d5e2b739 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0543b54ec62be171 input=a9049054013a1b77]*/ diff --git a/contrib/tools/python3/Modules/clinic/cmathmodule.c.h b/contrib/tools/python3/Modules/clinic/cmathmodule.c.h index 941448e76e..f018d90176 100644 --- a/contrib/tools/python3/Modules/clinic/cmathmodule.c.h +++ b/contrib/tools/python3/Modules/clinic/cmathmodule.c.h @@ -908,7 +908,7 @@ cmath_isclose(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObjec PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(a), &_Py_ID(b), &_Py_ID(rel_tol), &_Py_ID(abs_tol), }, + .ob_item = { _Py_LATIN1_CHR('a'), _Py_LATIN1_CHR('b'), &_Py_ID(rel_tol), &_Py_ID(abs_tol), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -982,4 +982,4 @@ skip_optional_kwonly: exit: return return_value; } -/*[clinic end generated code: output=87f609786ef270cd input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a6c9ca48ffe871b6 input=a9049054013a1b77]*/ diff --git a/contrib/tools/python3/Modules/clinic/itertoolsmodule.c.h b/contrib/tools/python3/Modules/clinic/itertoolsmodule.c.h index 32278bf715..51c766f055 100644 --- a/contrib/tools/python3/Modules/clinic/itertoolsmodule.c.h +++ b/contrib/tools/python3/Modules/clinic/itertoolsmodule.c.h @@ -42,7 +42,7 @@ batched_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(iterable), &_Py_ID(n), }, + .ob_item = { &_Py_ID(iterable), _Py_LATIN1_CHR('n'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -494,7 +494,7 @@ itertools_combinations(PyTypeObject *type, PyObject *args, PyObject *kwargs) PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(iterable), &_Py_ID(r), }, + .ob_item = { &_Py_ID(iterable), _Py_LATIN1_CHR('r'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -565,7 +565,7 @@ itertools_combinations_with_replacement(PyTypeObject *type, PyObject *args, PyOb PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(iterable), &_Py_ID(r), }, + .ob_item = { &_Py_ID(iterable), _Py_LATIN1_CHR('r'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -635,7 +635,7 @@ itertools_permutations(PyTypeObject *type, PyObject *args, PyObject *kwargs) PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(iterable), &_Py_ID(r), }, + .ob_item = { &_Py_ID(iterable), _Py_LATIN1_CHR('r'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -913,4 +913,4 @@ skip_optional_pos: exit: return return_value; } -/*[clinic end generated code: output=111cbd102c2a23c9 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=55a83cfda62afb57 input=a9049054013a1b77]*/ diff --git a/contrib/tools/python3/Modules/clinic/mathmodule.c.h b/contrib/tools/python3/Modules/clinic/mathmodule.c.h index a2754639d9..97c16a43c9 100644 --- a/contrib/tools/python3/Modules/clinic/mathmodule.c.h +++ b/contrib/tools/python3/Modules/clinic/mathmodule.c.h @@ -587,7 +587,7 @@ math_isclose(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(a), &_Py_ID(b), &_Py_ID(rel_tol), &_Py_ID(abs_tol), }, + .ob_item = { _Py_LATIN1_CHR('a'), _Py_LATIN1_CHR('b'), &_Py_ID(rel_tol), &_Py_ID(abs_tol), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -950,4 +950,4 @@ math_ulp(PyObject *module, PyObject *arg) exit: return return_value; } -/*[clinic end generated code: output=bd6c271030b9698b input=a9049054013a1b77]*/ +/*[clinic end generated code: output=c1335a499389a04e input=a9049054013a1b77]*/ diff --git a/contrib/tools/python3/Modules/clinic/posixmodule.c.h b/contrib/tools/python3/Modules/clinic/posixmodule.c.h index 066c2f8de1..f46aa65148 100644 --- a/contrib/tools/python3/Modules/clinic/posixmodule.c.h +++ b/contrib/tools/python3/Modules/clinic/posixmodule.c.h @@ -2038,7 +2038,7 @@ os__path_isdir(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObje PyObject *ob_item[NUM_KEYWORDS]; } _kwtuple = { .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) - .ob_item = { &_Py_ID(s), }, + .ob_item = { _Py_LATIN1_CHR('s'), }, }; #undef NUM_KEYWORDS #define KWTUPLE (&_kwtuple.ob_base.ob_base) @@ -12002,4 +12002,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=6f0c08f692891c72 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=67c2e3d4537287c1 input=a9049054013a1b77]*/ diff --git a/contrib/tools/python3/Modules/gcmodule.c b/contrib/tools/python3/Modules/gcmodule.c index 5f2820c848..39856b8eb7 100644 --- a/contrib/tools/python3/Modules/gcmodule.c +++ b/contrib/tools/python3/Modules/gcmodule.c @@ -2176,6 +2176,13 @@ _PyGC_DumpShutdownStats(PyInterpreterState *interp) } } +static void +finalize_unlink_gc_head(PyGC_Head *gc) { + PyGC_Head *prev = GC_PREV(gc); + PyGC_Head *next = GC_NEXT(gc); + _PyGCHead_SET_NEXT(prev, next); + _PyGCHead_SET_PREV(next, prev); +} void _PyGC_Fini(PyInterpreterState *interp) @@ -2184,9 +2191,25 @@ _PyGC_Fini(PyInterpreterState *interp) Py_CLEAR(gcstate->garbage); Py_CLEAR(gcstate->callbacks); - /* We expect that none of this interpreters objects are shared - with other interpreters. - See https://github.com/python/cpython/issues/90228. */ + /* Prevent a subtle bug that affects sub-interpreters that use basic + * single-phase init extensions (m_size == -1). Those extensions cause objects + * to be shared between interpreters, via the PyDict_Update(mdict, m_copy) call + * in import_find_extension(). + * + * If they are GC objects, their GC head next or prev links could refer to + * the interpreter _gc_runtime_state PyGC_Head nodes. Those nodes go away + * when the interpreter structure is freed and so pointers to them become + * invalid. If those objects are still used by another interpreter and + * UNTRACK is called on them, a crash will happen. We untrack the nodes + * here to avoid that. + * + * This bug was originally fixed when reported as gh-90228. The bug was + * re-introduced in gh-94673. + */ + for (int i = 0; i < NUM_GENERATIONS; i++) { + finalize_unlink_gc_head(&gcstate->generations[i].head); + } + finalize_unlink_gc_head(&gcstate->permanent_generation.head); } /* for debugging */ diff --git a/contrib/tools/python3/Modules/mathmodule.c b/contrib/tools/python3/Modules/mathmodule.c index 000803981e..d856ff6c35 100644 --- a/contrib/tools/python3/Modules/mathmodule.c +++ b/contrib/tools/python3/Modules/mathmodule.c @@ -2343,6 +2343,15 @@ math_fmod_impl(PyObject *module, double x, double y) return PyFloat_FromDouble(x); errno = 0; r = fmod(x, y); +#ifdef _MSC_VER + /* Windows (e.g. Windows 10 with MSC v.1916) loose sign + for zero result. But C99+ says: "if y is nonzero, the result + has the same sign as x". + */ + if (r == 0.0 && y != 0.0) { + r = copysign(r, x); + } +#endif if (Py_IS_NAN(r)) { if (!Py_IS_NAN(x) && !Py_IS_NAN(y)) errno = EDOM; diff --git a/contrib/tools/python3/Objects/codeobject.c b/contrib/tools/python3/Objects/codeobject.c index 5e358825d8..1681d97613 100644 --- a/contrib/tools/python3/Objects/codeobject.c +++ b/contrib/tools/python3/Objects/codeobject.c @@ -132,6 +132,7 @@ all_name_chars(PyObject *o) static int intern_strings(PyObject *tuple) { + PyInterpreterState *interp = _PyInterpreterState_GET(); Py_ssize_t i; for (i = PyTuple_GET_SIZE(tuple); --i >= 0; ) { @@ -141,7 +142,7 @@ intern_strings(PyObject *tuple) "non-string found in code slot"); return -1; } - PyUnicode_InternInPlace(&_PyTuple_ITEMS(tuple)[i]); + _PyUnicode_InternImmortal(interp, &_PyTuple_ITEMS(tuple)[i]); } return 0; } @@ -150,6 +151,7 @@ intern_strings(PyObject *tuple) static int intern_string_constants(PyObject *tuple, int *modified) { + PyInterpreterState *interp = _PyInterpreterState_GET(); for (Py_ssize_t i = PyTuple_GET_SIZE(tuple); --i >= 0; ) { PyObject *v = PyTuple_GET_ITEM(tuple, i); if (PyUnicode_CheckExact(v)) { @@ -159,7 +161,7 @@ intern_string_constants(PyObject *tuple, int *modified) if (all_name_chars(v)) { PyObject *w = v; - PyUnicode_InternInPlace(&v); + _PyUnicode_InternMortal(interp, &v); if (w != v) { PyTuple_SET_ITEM(tuple, i, v); if (modified) { diff --git a/contrib/tools/python3/Objects/dictobject.c b/contrib/tools/python3/Objects/dictobject.c index a99f32a9c8..0712bedc83 100644 --- a/contrib/tools/python3/Objects/dictobject.c +++ b/contrib/tools/python3/Objects/dictobject.c @@ -3916,7 +3916,8 @@ PyDict_SetItemString(PyObject *v, const char *key, PyObject *item) kv = PyUnicode_FromString(key); if (kv == NULL) return -1; - PyUnicode_InternInPlace(&kv); /* XXX Should we really? */ + PyInterpreterState *interp = _PyInterpreterState_GET(); + _PyUnicode_InternImmortal(interp, &kv); /* XXX Should we really? */ err = PyDict_SetItem(v, kv, item); Py_DECREF(kv); return err; diff --git a/contrib/tools/python3/Objects/memoryobject.c b/contrib/tools/python3/Objects/memoryobject.c index 3c88859acc..26871612ea 100644 --- a/contrib/tools/python3/Objects/memoryobject.c +++ b/contrib/tools/python3/Objects/memoryobject.c @@ -108,8 +108,6 @@ mbuf_release(_PyManagedBufferObject *self) if (self->flags&_Py_MANAGED_BUFFER_RELEASED) return; - /* NOTE: at this point self->exports can still be > 0 if this function - is called from mbuf_clear() to break up a reference cycle. */ self->flags |= _Py_MANAGED_BUFFER_RELEASED; /* PyBuffer_Release() decrements master->obj and sets it to NULL. */ @@ -1092,32 +1090,19 @@ PyBuffer_ToContiguous(void *buf, const Py_buffer *src, Py_ssize_t len, char orde /* Inform the managed buffer that this particular memoryview will not access the underlying buffer again. If no other memoryviews are registered with the managed buffer, the underlying buffer is released instantly and - marked as inaccessible for both the memoryview and the managed buffer. - - This function fails if the memoryview itself has exported buffers. */ -static int + marked as inaccessible for both the memoryview and the managed buffer. */ +static void _memory_release(PyMemoryViewObject *self) { + assert(self->exports == 0); if (self->flags & _Py_MEMORYVIEW_RELEASED) - return 0; + return; - if (self->exports == 0) { - self->flags |= _Py_MEMORYVIEW_RELEASED; - assert(self->mbuf->exports > 0); - if (--self->mbuf->exports == 0) - mbuf_release(self->mbuf); - return 0; + self->flags |= _Py_MEMORYVIEW_RELEASED; + assert(self->mbuf->exports > 0); + if (--self->mbuf->exports == 0) { + mbuf_release(self->mbuf); } - if (self->exports > 0) { - PyErr_Format(PyExc_BufferError, - "memoryview has %zd exported buffer%s", self->exports, - self->exports==1 ? "" : "s"); - return -1; - } - - PyErr_SetString(PyExc_SystemError, - "_memory_release(): negative export count"); - return -1; } /*[clinic input] @@ -1130,9 +1115,21 @@ static PyObject * memoryview_release_impl(PyMemoryViewObject *self) /*[clinic end generated code: output=d0b7e3ba95b7fcb9 input=bc71d1d51f4a52f0]*/ { - if (_memory_release(self) < 0) + if (self->exports == 0) { + _memory_release(self); + Py_RETURN_NONE; + } + + if (self->exports > 0) { + PyErr_Format(PyExc_BufferError, + "memoryview has %zd exported buffer%s", self->exports, + self->exports==1 ? "" : "s"); return NULL; - Py_RETURN_NONE; + } + + PyErr_SetString(PyExc_SystemError, + "memoryview: negative export count"); + return NULL; } static void @@ -1140,7 +1137,7 @@ memory_dealloc(PyMemoryViewObject *self) { assert(self->exports == 0); _PyObject_GC_UNTRACK(self); - (void)_memory_release(self); + _memory_release(self); Py_CLEAR(self->mbuf); if (self->weakreflist != NULL) PyObject_ClearWeakRefs((PyObject *) self); @@ -1157,8 +1154,10 @@ memory_traverse(PyMemoryViewObject *self, visitproc visit, void *arg) static int memory_clear(PyMemoryViewObject *self) { - (void)_memory_release(self); - Py_CLEAR(self->mbuf); + if (self->exports == 0) { + _memory_release(self); + Py_CLEAR(self->mbuf); + } return 0; } diff --git a/contrib/tools/python3/Objects/object.c b/contrib/tools/python3/Objects/object.c index aac707d6a2..6b2e0aeaab 100644 --- a/contrib/tools/python3/Objects/object.c +++ b/contrib/tools/python3/Objects/object.c @@ -1170,7 +1170,8 @@ PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value) } Py_INCREF(name); - PyUnicode_InternInPlace(&name); + PyInterpreterState *interp = _PyInterpreterState_GET(); + _PyUnicode_InternMortal(interp, &name); if (tp->tp_setattro != NULL) { err = (*tp->tp_setattro)(v, name, value); Py_DECREF(name); diff --git a/contrib/tools/python3/Objects/odictobject.c b/contrib/tools/python3/Objects/odictobject.c index 39b0f68451..cf364c13b9 100644 --- a/contrib/tools/python3/Objects/odictobject.c +++ b/contrib/tools/python3/Objects/odictobject.c @@ -789,6 +789,7 @@ _odict_clear_nodes(PyODictObject *od) _odictnode_DEALLOC(node); node = next; } + od->od_state++; } /* There isn't any memory management of nodes past this point. */ @@ -799,24 +800,40 @@ _odict_keys_equal(PyODictObject *a, PyODictObject *b) { _ODictNode *node_a, *node_b; + // keep operands' state to detect undesired mutations + const size_t state_a = a->od_state; + const size_t state_b = b->od_state; + node_a = _odict_FIRST(a); node_b = _odict_FIRST(b); while (1) { - if (node_a == NULL && node_b == NULL) + if (node_a == NULL && node_b == NULL) { /* success: hit the end of each at the same time */ return 1; - else if (node_a == NULL || node_b == NULL) + } + else if (node_a == NULL || node_b == NULL) { /* unequal length */ return 0; + } else { - int res = PyObject_RichCompareBool( - (PyObject *)_odictnode_KEY(node_a), - (PyObject *)_odictnode_KEY(node_b), - Py_EQ); - if (res < 0) + PyObject *key_a = Py_NewRef(_odictnode_KEY(node_a)); + PyObject *key_b = Py_NewRef(_odictnode_KEY(node_b)); + int res = PyObject_RichCompareBool(key_a, key_b, Py_EQ); + Py_DECREF(key_a); + Py_DECREF(key_b); + if (res < 0) { return res; - else if (res == 0) + } + else if (a->od_state != state_a || b->od_state != state_b) { + PyErr_SetString(PyExc_RuntimeError, + "OrderedDict mutated during iteration"); + return -1; + } + else if (res == 0) { + // This check comes after the check on the state + // in order for the exception to be set correctly. return 0; + } /* otherwise it must match, so move on to the next one */ node_a = _odictnode_NEXT(node_a); diff --git a/contrib/tools/python3/Objects/typeobject.c b/contrib/tools/python3/Objects/typeobject.c index 1cac4b8b0f..017d951bdc 100644 --- a/contrib/tools/python3/Objects/typeobject.c +++ b/contrib/tools/python3/Objects/typeobject.c @@ -1080,8 +1080,10 @@ type_module(PyTypeObject *type, void *context) if (s != NULL) { mod = PyUnicode_FromStringAndSize( type->tp_name, (Py_ssize_t)(s - type->tp_name)); - if (mod != NULL) - PyUnicode_InternInPlace(&mod); + if (mod != NULL) { + PyInterpreterState *interp = _PyInterpreterState_GET(); + _PyUnicode_InternMortal(interp, &mod); + } } else { mod = Py_NewRef(&_Py_ID(builtins)); @@ -4929,7 +4931,8 @@ type_setattro(PyTypeObject *type, PyObject *name, PyObject *value) } /* bpo-40521: Interned strings are shared by all subinterpreters */ if (!PyUnicode_CHECK_INTERNED(name)) { - PyUnicode_InternInPlace(&name); + PyInterpreterState *interp = _PyInterpreterState_GET(); + _PyUnicode_InternMortal(interp, &name); if (!PyUnicode_CHECK_INTERNED(name)) { PyErr_SetString(PyExc_MemoryError, "Out of memory interning an attribute name"); diff --git a/contrib/tools/python3/Objects/typevarobject.c b/contrib/tools/python3/Objects/typevarobject.c index db9c2191d6..4f0bc09637 100644 --- a/contrib/tools/python3/Objects/typevarobject.c +++ b/contrib/tools/python3/Objects/typevarobject.c @@ -1364,7 +1364,16 @@ typealias_alloc(PyObject *name, PyObject *type_params, PyObject *compute_value, return NULL; } ta->name = Py_NewRef(name); - ta->type_params = Py_IsNone(type_params) ? NULL : Py_XNewRef(type_params); + if ( + type_params == NULL + || Py_IsNone(type_params) + || (PyTuple_Check(type_params) && PyTuple_GET_SIZE(type_params) == 0) + ) { + ta->type_params = NULL; + } + else { + ta->type_params = Py_NewRef(type_params); + } ta->compute_value = Py_XNewRef(compute_value); ta->value = Py_XNewRef(value); ta->module = Py_XNewRef(module); diff --git a/contrib/tools/python3/Objects/unicodeobject.c b/contrib/tools/python3/Objects/unicodeobject.c index ad6defb629..3235ae8ae0 100644 --- a/contrib/tools/python3/Objects/unicodeobject.c +++ b/contrib/tools/python3/Objects/unicodeobject.c @@ -179,10 +179,7 @@ extern "C" { *_to++ = (to_type) *_iter++; \ } while (0) -#define LATIN1(ch) \ - (ch < 128 \ - ? (PyObject*)&_Py_SINGLETON(strings).ascii[ch] \ - : (PyObject*)&_Py_SINGLETON(strings).latin1[ch - 128]) +#define LATIN1 _Py_LATIN1_CHR #ifdef MS_WINDOWS /* On Windows, overallocate by 50% is the best factor */ @@ -225,18 +222,20 @@ static inline PyObject* unicode_new_empty(void) return Py_NewRef(empty); } -/* This dictionary holds all interned unicode strings. Note that references - to strings in this dictionary are *not* counted in the string's ob_refcnt. - When the interned string reaches a refcnt of 0 the string deallocation - function will delete the reference from this dictionary. -*/ +/* This dictionary holds per-interpreter interned strings. + * See InternalDocs/string_interning.md for details. + */ static inline PyObject *get_interned_dict(PyInterpreterState *interp) { return _Py_INTERP_CACHED_OBJECT(interp, interned_strings); } +/* This hashtable holds statically allocated interned strings. + * See InternalDocs/string_interning.md for details. + */ #define INTERNED_STRINGS _PyRuntime.cached_objects.interned_strings +/* Get number of all interned strings for the current interpreter. */ Py_ssize_t _PyUnicode_InternedSize(void) { @@ -244,6 +243,28 @@ _PyUnicode_InternedSize(void) return _Py_hashtable_len(INTERNED_STRINGS) + PyDict_GET_SIZE(dict); } +/* Get number of immortal interned strings for the current interpreter. */ +Py_ssize_t +_PyUnicode_InternedSize_Immortal(void) +{ + PyObject *dict = get_interned_dict(_PyInterpreterState_GET()); + PyObject *key, *value; + Py_ssize_t pos = 0; + Py_ssize_t count = 0; + + // It's tempting to keep a count and avoid a loop here. But, this function + // is intended for refleak tests. It spends extra work to report the true + // value, to help detect bugs in optimizations. + + while (PyDict_Next(dict, &pos, &key, &value)) { + assert(PyUnicode_CHECK_INTERNED(key) != SSTATE_INTERNED_IMMORTAL_STATIC); + if (PyUnicode_CHECK_INTERNED(key) == SSTATE_INTERNED_IMMORTAL) { + count++; + } + } + return _Py_hashtable_len(INTERNED_STRINGS) + count; +} + static Py_hash_t unicode_hash(PyObject *); static int unicode_compare_eq(PyObject *, PyObject *); @@ -269,20 +290,6 @@ hashtable_unicode_compare(const void *key1, const void *key2) static int init_interned_dict(PyInterpreterState *interp) { - if (_Py_IsMainInterpreter(interp)) { - assert(INTERNED_STRINGS == NULL); - _Py_hashtable_allocator_t hashtable_alloc = {PyMem_RawMalloc, PyMem_RawFree}; - INTERNED_STRINGS = _Py_hashtable_new_full( - hashtable_unicode_hash, - hashtable_unicode_compare, - NULL, - NULL, - &hashtable_alloc - ); - if (INTERNED_STRINGS == NULL) { - return -1; - } - } assert(get_interned_dict(interp) == NULL); PyObject *interned = interned = PyDict_New(); if (interned == NULL) { @@ -301,7 +308,55 @@ clear_interned_dict(PyInterpreterState *interp) Py_DECREF(interned); _Py_INTERP_CACHED_OBJECT(interp, interned_strings) = NULL; } - if (_Py_IsMainInterpreter(interp) && INTERNED_STRINGS != NULL) { +} + +static PyStatus +init_global_interned_strings(PyInterpreterState *interp) +{ + assert(INTERNED_STRINGS == NULL); + _Py_hashtable_allocator_t hashtable_alloc = {PyMem_RawMalloc, PyMem_RawFree}; + + INTERNED_STRINGS = _Py_hashtable_new_full( + hashtable_unicode_hash, + hashtable_unicode_compare, + // Objects stored here are immortal and statically allocated, + // so we don't need key_destroy_func & value_destroy_func: + NULL, + NULL, + &hashtable_alloc + ); + if (INTERNED_STRINGS == NULL) { + PyErr_Clear(); + return _PyStatus_ERR("failed to create global interned dict"); + } + + /* Intern statically allocated string identifiers, deepfreeze strings, + * and one-byte latin-1 strings. + * This must be done before any module initialization so that statically + * allocated string identifiers are used instead of heap allocated strings. + * Deepfreeze uses the interned identifiers if present to save space + * else generates them and they are interned to speed up dict lookups. + */ + _PyUnicode_InitStaticStrings(interp); + + for (int i = 0; i < 256; i++) { + PyObject *s = LATIN1(i); + _PyUnicode_InternStatic(interp, &s); + assert(s == LATIN1(i)); + } +#ifdef Py_DEBUG + assert(_PyUnicode_CheckConsistency(&_Py_STR(empty), 1)); + + for (int i = 0; i < 256; i++) { + assert(_PyUnicode_CheckConsistency(LATIN1(i), 1)); + } +#endif + return _PyStatus_OK(); +} + +static void clear_global_interned_strings(void) +{ + if (INTERNED_STRINGS != NULL) { _Py_hashtable_destroy(INTERNED_STRINGS); INTERNED_STRINGS = NULL; } @@ -634,6 +689,41 @@ _PyUnicode_CheckConsistency(PyObject *op, int check_content) } CHECK(PyUnicode_READ(kind, data, ascii->length) == 0); } + + /* 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) { + // This state is for two exceptions: + // - strings are currently checked before they're interned + // - the 256 one-latin1-character strings + // are static but use SSTATE_NOT_INTERNED + } + else { + CHECK(!_Py_IsImmortal(op)); + } + break; + case SSTATE_INTERNED_MORTAL: + CHECK(!ascii->state.statically_allocated); + CHECK(!_Py_IsImmortal(op)); + break; + case SSTATE_INTERNED_IMMORTAL: + CHECK(!ascii->state.statically_allocated); + break; + case SSTATE_INTERNED_IMMORTAL_STATIC: + CHECK(ascii->state.statically_allocated); + break; + default: + Py_UNREACHABLE(); + } +#endif + return 1; #undef CHECK @@ -1592,16 +1682,65 @@ unicode_dealloc(PyObject *unicode) _Py_FatalRefcountError("deallocating an Unicode singleton"); } #endif - /* This should never get called, but we also don't want to SEGV if - * we accidentally decref an immortal string out of existence. Since - * the string is an immortal object, just re-set the reference count. - */ - if (PyUnicode_CHECK_INTERNED(unicode) - || _PyUnicode_STATE(unicode).statically_allocated) - { + if (_PyUnicode_STATE(unicode).statically_allocated) { + /* This should never get called, but we also don't want to SEGV if + * we accidentally decref an immortal string out of existence. Since + * the string is an immortal object, just re-set the reference count. + */ +#ifdef Py_DEBUG + Py_UNREACHABLE(); +#endif _Py_SetImmortal(unicode); return; } + switch (_PyUnicode_STATE(unicode).interned) { + case SSTATE_NOT_INTERNED: + break; + case SSTATE_INTERNED_MORTAL: + /* Remove the object from the intern dict. + * Before doing so, we set the refcount to 3: the key and value + * in the interned_dict, plus one to work with. + */ + assert(Py_REFCNT(unicode) == 0); + Py_SET_REFCNT(unicode, 3); +#ifdef Py_REF_DEBUG + /* let's be pedantic with the ref total */ + _Py_IncRefTotal(_PyInterpreterState_GET()); + _Py_IncRefTotal(_PyInterpreterState_GET()); + _Py_IncRefTotal(_PyInterpreterState_GET()); +#endif + PyInterpreterState *interp = _PyInterpreterState_GET(); + PyObject *interned = get_interned_dict(interp); + assert(interned != NULL); + int r = PyDict_DelItem(interned, unicode); + if (r == -1) { + PyErr_WriteUnraisable(unicode); + // We don't know what happened to the string. It's probably + // best to leak it: + // - if it was not found, something is very wrong + // - if it was deleted, there are no more references to it + // so it can't cause trouble (except wasted memory) + // - if it wasn't deleted, it'll remain interned + _Py_SetImmortal(unicode); + _PyUnicode_STATE(unicode).interned = SSTATE_INTERNED_IMMORTAL; + return; + } + // Only our work reference should be left; remove it too. + assert(Py_REFCNT(unicode) == 1); + Py_SET_REFCNT(unicode, 0); +#ifdef Py_REF_DEBUG + /* let's be pedantic with the ref total */ + _Py_DecRefTotal(_PyInterpreterState_GET()); +#endif + break; + default: + // As with `statically_allocated` above. +#ifdef Py_REF_DEBUG + Py_UNREACHABLE(); +#endif + _Py_SetImmortal(unicode); + return; + } if (_PyUnicode_HAS_UTF8_MEMORY(unicode)) { PyObject_Free(_PyUnicode_UTF8(unicode)); } @@ -1763,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* @@ -1948,7 +2088,7 @@ _PyUnicode_FromId(_Py_Identifier *id) if (!obj) { return NULL; } - PyUnicode_InternInPlace(&obj); + _PyUnicode_InternImmortal(interp, &obj); if (index >= ids->size) { // Overallocate to reduce the number of realloc @@ -10733,8 +10873,10 @@ _PyUnicode_EqualToASCIIId(PyObject *left, _Py_Identifier *right) if (left == right_uni) return 1; - if (PyUnicode_CHECK_INTERNED(left)) + assert(PyUnicode_CHECK_INTERNED(right_uni)); + if (PyUnicode_CHECK_INTERNED(left)) { return 0; + } assert(_PyUnicode_HASH(right_uni) != -1); Py_hash_t hash = _PyUnicode_HASH(left); @@ -14709,28 +14851,26 @@ _PyUnicode_InitState(PyInterpreterState *interp) PyStatus _PyUnicode_InitGlobalObjects(PyInterpreterState *interp) { - // Initialize the global interned dict - if (init_interned_dict(interp)) { - PyErr_Clear(); - return _PyStatus_ERR("failed to create interned dict"); + if (_Py_IsMainInterpreter(interp)) { + PyStatus status = init_global_interned_strings(interp); + if (_PyStatus_EXCEPTION(status)) { + return status; + } } + assert(INTERNED_STRINGS); - if (_Py_IsMainInterpreter(interp)) { - /* Intern statically allocated string identifiers and deepfreeze strings. - * This must be done before any module initialization so that statically - * allocated string identifiers are used instead of heap allocated strings. - * Deepfreeze uses the interned identifiers if present to save space - * else generates them and they are interned to speed up dict lookups. - */ - _PyUnicode_InitStaticStrings(interp); + return _PyStatus_OK(); +} -#ifdef Py_DEBUG - assert(_PyUnicode_CheckConsistency(&_Py_STR(empty), 1)); - for (int i = 0; i < 256; i++) { - assert(_PyUnicode_CheckConsistency(LATIN1(i), 1)); - } -#endif +PyStatus +_PyUnicode_InitInternDict(PyInterpreterState *interp) +{ + assert(INTERNED_STRINGS); + + if (init_interned_dict(interp)) { + PyErr_Clear(); + return _PyStatus_ERR("failed to create interned dict"); } return _PyStatus_OK(); @@ -14755,104 +14895,243 @@ error: return _PyStatus_ERR("Can't initialize unicode types"); } +static /* non-null */ PyObject* +intern_static(PyInterpreterState *interp, PyObject *s /* stolen */) +{ + // Note that this steals a reference to `s`, but in many cases that + // stolen ref is returned, requiring no decref/incref. + + assert(s != NULL); + assert(_PyUnicode_CHECK(s)); + assert(_PyUnicode_STATE(s).statically_allocated); + assert(!PyUnicode_CHECK_INTERNED(s)); + +#ifdef Py_DEBUG + /* We must not add process-global interned string if there's already a + * per-interpreter interned_dict, which might contain duplicates. + */ + PyObject *interned = get_interned_dict(interp); + // assert(interned == NULL); +#endif + + /* Look in the global cache first. */ + PyObject *r = (PyObject *)_Py_hashtable_get(INTERNED_STRINGS, s); + /* We should only init each string once */ + assert(r == NULL); + /* but just in case (for the non-debug build), handle this */ + if (r != NULL && r != s) { + assert(_PyUnicode_STATE(r).interned == SSTATE_INTERNED_IMMORTAL_STATIC); + assert(_PyUnicode_CHECK(r)); + Py_DECREF(s); + return Py_NewRef(r); + } + + if (_Py_hashtable_set(INTERNED_STRINGS, s, s) < -1) { + Py_FatalError("failed to intern static string"); + } + + _PyUnicode_STATE(s).interned = SSTATE_INTERNED_IMMORTAL_STATIC; + return s; +} void -_PyUnicode_InternInPlace(PyInterpreterState *interp, PyObject **p) +_PyUnicode_InternStatic(PyInterpreterState *interp, PyObject **p) +{ + // This should only be called as part of runtime initialization + assert(!Py_IsInitialized()); + + *p = intern_static(interp, *p); + assert(*p); +} + +static void +immortalize_interned(PyObject *s) +{ + assert(PyUnicode_CHECK_INTERNED(s) == SSTATE_INTERNED_MORTAL); + assert(!_Py_IsImmortal(s)); +#ifdef Py_REF_DEBUG + /* The reference count value should be excluded from the RefTotal. + The decrements to these objects will not be registered so they + need to be accounted for in here. */ + for (Py_ssize_t i = 0; i < Py_REFCNT(s); i++) { + _Py_DecRefTotal(_PyInterpreterState_GET()); + } +#endif + _PyUnicode_STATE(s).interned = SSTATE_INTERNED_IMMORTAL; + _Py_SetImmortal(s); +} + +static /* non-null */ PyObject* +intern_common(PyInterpreterState *interp, PyObject *s /* stolen */, + bool immortalize) { - PyObject *s = *p; + // Note that this steals a reference to `s`, but in many cases that + // stolen ref is returned, requiring no decref/incref. + #ifdef Py_DEBUG assert(s != NULL); assert(_PyUnicode_CHECK(s)); #else if (s == NULL || !PyUnicode_Check(s)) { - return; + return s; } #endif /* If it's a subclass, we don't really know what putting it in the interned dict might do. */ if (!PyUnicode_CheckExact(s)) { - return; + return s; } - if (PyUnicode_CHECK_INTERNED(s)) { - return; + /* Is it already interned? */ + switch (PyUnicode_CHECK_INTERNED(s)) { + case SSTATE_NOT_INTERNED: + // no, go on + break; + case SSTATE_INTERNED_MORTAL: + // yes but we might need to make it immortal + if (immortalize) { + immortalize_interned(s); + } + return s; + default: + // all done + return s; } - /* Look in the global cache first. */ - PyObject *r = (PyObject *)_Py_hashtable_get(INTERNED_STRINGS, s); - if (r != NULL && r != s) { - Py_SETREF(*p, Py_NewRef(r)); - return; + if (_PyUnicode_STATE(s).statically_allocated) { + return intern_static(interp, s); } - /* Handle statically allocated strings. */ - if (_PyUnicode_STATE(s).statically_allocated) { - assert(_Py_IsImmortal(s)); - if (_Py_hashtable_set(INTERNED_STRINGS, s, s) == 0) { - _PyUnicode_STATE(*p).interned = SSTATE_INTERNED_IMMORTAL_STATIC; + /* If it's already immortal, intern it as such */ + if (_Py_IsImmortal(s)) { + immortalize = 1; + } + + /* if it's a short string, get the singleton */ + if (PyUnicode_GET_LENGTH(s) == 1 && + PyUnicode_KIND(s) == PyUnicode_1BYTE_KIND) { + PyObject *r = LATIN1(*(unsigned char*)PyUnicode_DATA(s)); + assert(PyUnicode_CHECK_INTERNED(r)); + Py_DECREF(s); + return r; + } +#ifdef Py_DEBUG + assert(!unicode_is_singleton(s)); +#endif + + /* Look in the global cache now. */ + { + PyObject *r = (PyObject *)_Py_hashtable_get(INTERNED_STRINGS, s); + if (r != NULL) { + assert(_PyUnicode_STATE(r).statically_allocated); + assert(r != s); // r must be statically_allocated; s is not + Py_DECREF(s); + return Py_NewRef(r); } - return; } - /* Look in the per-interpreter cache. */ + /* Do a setdefault on the per-interpreter cache. */ PyObject *interned = get_interned_dict(interp); assert(interned != NULL); - PyObject *t = PyDict_SetDefault(interned, s, s); + PyObject *t = PyDict_SetDefault(interned, s, s); // t is borrowed if (t == NULL) { PyErr_Clear(); - return; + return s; } if (t != s) { - Py_SETREF(*p, Py_NewRef(t)); - return; + // value was already present (not inserted) + Py_INCREF(t); + Py_DECREF(s); + if (immortalize && + PyUnicode_CHECK_INTERNED(t) == SSTATE_INTERNED_MORTAL) { + immortalize_interned(t); + } + return t; } - - if (_Py_IsImmortal(s)) { - // XXX Restrict this to the main interpreter? - _PyUnicode_STATE(*p).interned = SSTATE_INTERNED_IMMORTAL_STATIC; - return; + else { + // value was newly inserted } + /* NOT_INTERNED -> INTERNED_MORTAL */ + + assert(_PyUnicode_STATE(s).interned == SSTATE_NOT_INTERNED); + + if (!_Py_IsImmortal(s)) { + /* The two references in interned dict (key and value) are not counted. + unicode_dealloc() and _PyUnicode_ClearInterned() take care of this. */ + Py_SET_REFCNT(s, Py_REFCNT(s) - 2); #ifdef Py_REF_DEBUG - /* The reference count value excluding the 2 references from the - interned dictionary should be excluded from the RefTotal. The - decrements to these objects will not be registered so they - need to be accounted for in here. */ - for (Py_ssize_t i = 0; i < Py_REFCNT(s) - 2; i++) { + /* let's be pedantic with the ref total */ + _Py_DecRefTotal(_PyInterpreterState_GET()); _Py_DecRefTotal(_PyInterpreterState_GET()); +#endif + } + _PyUnicode_STATE(s).interned = SSTATE_INTERNED_MORTAL; + + /* INTERNED_MORTAL -> INTERNED_IMMORTAL (if needed) */ + +#ifdef Py_DEBUG + if (_Py_IsImmortal(s)) { + assert(immortalize); } #endif - _Py_SetImmortal(s); - _PyUnicode_STATE(*p).interned = SSTATE_INTERNED_IMMORTAL; + if (immortalize) { + immortalize_interned(s); + } + + return s; +} + +void +_PyUnicode_InternImmortal(PyInterpreterState *interp, PyObject **p) +{ + *p = intern_common(interp, *p, 1); + assert(*p); +} + +void +_PyUnicode_InternMortal(PyInterpreterState *interp, PyObject **p) +{ + *p = intern_common(interp, *p, 0); + assert(*p); +} + + +void +_PyUnicode_InternInPlace(PyInterpreterState *interp, PyObject **p) +{ + _PyUnicode_InternImmortal(interp, p); + return; } void PyUnicode_InternInPlace(PyObject **p) { PyInterpreterState *interp = _PyInterpreterState_GET(); - _PyUnicode_InternInPlace(interp, p); + _PyUnicode_InternMortal(interp, p); } -// Function kept for the stable ABI. +// Public-looking name kept for the stable ABI; user should not call this: PyAPI_FUNC(void) PyUnicode_InternImmortal(PyObject **); void PyUnicode_InternImmortal(PyObject **p) { - PyUnicode_InternInPlace(p); - // Leak a reference on purpose - Py_INCREF(*p); + PyInterpreterState *interp = _PyInterpreterState_GET(); + _PyUnicode_InternImmortal(interp, p); } PyObject * PyUnicode_InternFromString(const char *cp) { PyObject *s = PyUnicode_FromString(cp); - if (s == NULL) + if (s == NULL) { return NULL; - PyUnicode_InternInPlace(&s); + } + PyInterpreterState *interp = _PyInterpreterState_GET(); + _PyUnicode_InternMortal(interp, &s); return s; } @@ -14866,20 +15145,6 @@ _PyUnicode_ClearInterned(PyInterpreterState *interp) } assert(PyDict_CheckExact(interned)); - /* TODO: - * Currently, the runtime is not able to guarantee that it can exit without - * allocations that carry over to a future initialization of Python within - * the same process. i.e: - * ./python -X showrefcount -c 'import itertools' - * [237 refs, 237 blocks] - * - * Therefore, this should remain disabled for until there is a strict guarantee - * that no memory will be left after `Py_Finalize`. - */ -#ifdef Py_DEBUG - /* For all non-singleton interned strings, restore the two valid references - to that instance from within the intern string dictionary and let the - normal reference counting process clean up these instances. */ #ifdef INTERNED_STATS fprintf(stderr, "releasing %zd interned strings\n", PyDict_GET_SIZE(interned)); @@ -14893,13 +15158,32 @@ _PyUnicode_ClearInterned(PyInterpreterState *interp) int shared = 0; switch (PyUnicode_CHECK_INTERNED(s)) { case SSTATE_INTERNED_IMMORTAL: + /* Make immortal interned strings mortal again. + * + * Currently, the runtime is not able to guarantee that it can exit + * without allocations that carry over to a future initialization + * of Python within the same process. i.e: + * ./python -X showrefcount -c 'import itertools' + * [237 refs, 237 blocks] + * + * This should remain disabled (`Py_DEBUG` only) until there is a + * strict guarantee that no memory will be left after + * `Py_Finalize`. + */ +#ifdef Py_DEBUG // Skip the Immortal Instance check and restore // the two references (key and value) ignored // by PyUnicode_InternInPlace(). s->ob_refcnt = 2; +#ifdef Py_REF_DEBUG + /* let's be pedantic with the ref total */ + _Py_IncRefTotal(_PyInterpreterState_GET()); + _Py_IncRefTotal(_PyInterpreterState_GET()); +#endif #ifdef INTERNED_STATS total_length += PyUnicode_GET_LENGTH(s); #endif +#endif // Py_DEBUG break; case SSTATE_INTERNED_IMMORTAL_STATIC: /* It is shared between interpreters, so we should unmark it @@ -14912,7 +15196,15 @@ _PyUnicode_ClearInterned(PyInterpreterState *interp) } break; case SSTATE_INTERNED_MORTAL: - /* fall through */ + // Restore 2 references held by the interned dict; these will + // be decref'd by clear_interned_dict's PyDict_Clear. + Py_SET_REFCNT(s, Py_REFCNT(s) + 2); +#ifdef Py_REF_DEBUG + /* let's be pedantic with the ref total */ + _Py_IncRefTotal(_PyInterpreterState_GET()); + _Py_IncRefTotal(_PyInterpreterState_GET()); +#endif + break; case SSTATE_NOT_INTERNED: /* fall through */ default: @@ -14933,8 +15225,10 @@ _PyUnicode_ClearInterned(PyInterpreterState *interp) for (Py_ssize_t i=0; i < ids->size; i++) { Py_XINCREF(ids->array[i]); } -#endif /* Py_DEBUG */ clear_interned_dict(interp); + if (_Py_IsMainInterpreter(interp)) { + clear_global_interned_strings(); + } } diff --git a/contrib/tools/python3/PC/pyconfig.h b/contrib/tools/python3/PC/pyconfig.h index db9e8a8855..a6a39f5ea0 100644 --- a/contrib/tools/python3/PC/pyconfig.h +++ b/contrib/tools/python3/PC/pyconfig.h @@ -161,9 +161,9 @@ WIN32 is still required for the locale module. #endif /* MS_WIN64 */ /* set the version macros for the windows headers */ -/* Python 3.9+ requires Windows 8 or greater */ -#define Py_WINVER 0x0602 /* _WIN32_WINNT_WIN8 */ -#define Py_NTDDI NTDDI_WIN8 +/* Python 3.12+ requires Windows 8.1 or greater */ +#define Py_WINVER 0x0603 /* _WIN32_WINNT_WINBLUE (8.1) */ +#define Py_NTDDI NTDDI_WINBLUE /* We only set these values when building Python - we don't want to force these values on extensions, as that will affect the prototypes and diff --git a/contrib/tools/python3/Parser/action_helpers.c b/contrib/tools/python3/Parser/action_helpers.c index 45a32a0213..085622e655 100644 --- a/contrib/tools/python3/Parser/action_helpers.c +++ b/contrib/tools/python3/Parser/action_helpers.c @@ -4,6 +4,7 @@ #include "pycore_runtime.h" // _PyRuntime #include "string_parser.h" #include "tokenizer.h" +#include "pycore_pystate.h" // _PyInterpreterState_GET() void *_PyPegen_dummy_name(Parser *p, ...) { return &_PyRuntime.parser.dummy_name; @@ -148,7 +149,8 @@ expr_ty _PyPegen_join_names_with_dot(Parser *p, expr_ty first_name, if (!uni) { return NULL; } - PyUnicode_InternInPlace(&uni); + PyInterpreterState *interp = _PyInterpreterState_GET(); + _PyUnicode_InternMortal(interp, &uni); if (_PyArena_AddPyObject(p->arena, uni) < 0) { Py_DECREF(uni); return NULL; diff --git a/contrib/tools/python3/Parser/pegen.c b/contrib/tools/python3/Parser/pegen.c index 8c36c6779b..6ae9bef216 100644 --- a/contrib/tools/python3/Parser/pegen.c +++ b/contrib/tools/python3/Parser/pegen.c @@ -581,7 +581,8 @@ _PyPegen_new_identifier(Parser *p, const char *n) } id = id2; } - PyUnicode_InternInPlace(&id); + PyInterpreterState *interp = _PyInterpreterState_GET(); + _PyUnicode_InternImmortal(interp, &id); if (_PyArena_AddPyObject(p->arena, id) < 0) { Py_DECREF(id); diff --git a/contrib/tools/python3/Programs/_freeze_module.c b/contrib/tools/python3/Programs/_freeze_module.c index e55f1d5674..c669d96c17 100644 --- a/contrib/tools/python3/Programs/_freeze_module.c +++ b/contrib/tools/python3/Programs/_freeze_module.c @@ -123,6 +123,9 @@ static PyObject * compile_and_marshal(const char *name, const char *text) { char *filename = (char *) malloc(strlen(name) + 10); + if (filename == NULL) { + return PyErr_NoMemory(); + } sprintf(filename, "<frozen %s>", name); PyObject *code = Py_CompileStringExFlags(text, filename, Py_file_input, NULL, 0); @@ -146,6 +149,9 @@ get_varname(const char *name, const char *prefix) { size_t n = strlen(prefix); char *varname = (char *) malloc(strlen(name) + n + 1); + if (varname == NULL) { + return NULL; + } (void)strcpy(varname, prefix); for (size_t i = 0; name[i] != '\0'; i++) { if (name[i] == '.') { @@ -191,6 +197,11 @@ write_frozen(const char *outpath, const char *inpath, const char *name, fprintf(outfile, "%s\n", header); char *arrayname = get_varname(name, "_Py_M__"); + if (arrayname == NULL) { + fprintf(stderr, "memory error: could not allocate varname\n"); + fclose(outfile); + return -1; + } write_code(outfile, marshalled, arrayname); free(arrayname); diff --git a/contrib/tools/python3/Python/ast_opt.c b/contrib/tools/python3/Python/ast_opt.c index e881b7fe2d..e8a53786ff 100644 --- a/contrib/tools/python3/Python/ast_opt.c +++ b/contrib/tools/python3/Python/ast_opt.c @@ -275,10 +275,9 @@ parse_literal(PyObject *fmt, Py_ssize_t *ppos, PyArena *arena) PyObject *str = PyUnicode_Substring(fmt, start, pos); /* str = str.replace('%%', '%') */ if (str && has_percents) { - _Py_DECLARE_STR(percent, "%"); _Py_DECLARE_STR(dbl_percent, "%%"); Py_SETREF(str, PyUnicode_Replace(str, &_Py_STR(dbl_percent), - &_Py_STR(percent), -1)); + _Py_LATIN1_CHR('%'), -1)); } if (!str) { return NULL; diff --git a/contrib/tools/python3/Python/ast_unparse.c b/contrib/tools/python3/Python/ast_unparse.c index 8aff045101..10e9d9b710 100644 --- a/contrib/tools/python3/Python/ast_unparse.c +++ b/contrib/tools/python3/Python/ast_unparse.c @@ -10,9 +10,7 @@ * See ast.unparse for a full unparser (written in Python) */ -_Py_DECLARE_STR(open_br, "{"); _Py_DECLARE_STR(dbl_open_br, "{{"); -_Py_DECLARE_STR(close_br, "}"); _Py_DECLARE_STR(dbl_close_br, "}}"); /* We would statically initialize this if doing so were simple enough. */ @@ -580,11 +578,13 @@ escape_braces(PyObject *orig) { PyObject *temp; PyObject *result; - temp = PyUnicode_Replace(orig, &_Py_STR(open_br), &_Py_STR(dbl_open_br), -1); + temp = PyUnicode_Replace(orig, _Py_LATIN1_CHR('{'), + &_Py_STR(dbl_open_br), -1); if (!temp) { return NULL; } - result = PyUnicode_Replace(temp, &_Py_STR(close_br), &_Py_STR(dbl_close_br), -1); + result = PyUnicode_Replace(temp, _Py_LATIN1_CHR('}'), + &_Py_STR(dbl_close_br), -1); Py_DECREF(temp); return result; } @@ -678,7 +678,7 @@ append_formattedvalue(_PyUnicodeWriter *writer, expr_ty e) if (!temp_fv_str) { return -1; } - if (PyUnicode_Find(temp_fv_str, &_Py_STR(open_br), 0, 1, 1) == 0) { + if (PyUnicode_Find(temp_fv_str, _Py_LATIN1_CHR('{'), 0, 1, 1) == 0) { /* Expression starts with a brace, split it with a space from the outer one. */ outer_brace = "{ "; diff --git a/contrib/tools/python3/Python/clinic/sysmodule.c.h b/contrib/tools/python3/Python/clinic/sysmodule.c.h index 7a7c188bcc..e46c01e1e5 100644 --- a/contrib/tools/python3/Python/clinic/sysmodule.c.h +++ b/contrib/tools/python3/Python/clinic/sysmodule.c.h @@ -913,24 +913,64 @@ exit: } PyDoc_STRVAR(sys_getunicodeinternedsize__doc__, -"getunicodeinternedsize($module, /)\n" +"getunicodeinternedsize($module, /, *, _only_immortal=False)\n" "--\n" "\n" "Return the number of elements of the unicode interned dictionary"); #define SYS_GETUNICODEINTERNEDSIZE_METHODDEF \ - {"getunicodeinternedsize", (PyCFunction)sys_getunicodeinternedsize, METH_NOARGS, sys_getunicodeinternedsize__doc__}, + {"getunicodeinternedsize", _PyCFunction_CAST(sys_getunicodeinternedsize), METH_FASTCALL|METH_KEYWORDS, sys_getunicodeinternedsize__doc__}, static Py_ssize_t -sys_getunicodeinternedsize_impl(PyObject *module); +sys_getunicodeinternedsize_impl(PyObject *module, int _only_immortal); static PyObject * -sys_getunicodeinternedsize(PyObject *module, PyObject *Py_UNUSED(ignored)) +sys_getunicodeinternedsize(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(_only_immortal), }, + }; + #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[] = {"_only_immortal", NULL}; + static _PyArg_Parser _parser = { + .keywords = _keywords, + .fname = "getunicodeinternedsize", + .kwtuple = KWTUPLE, + }; + #undef KWTUPLE + PyObject *argsbuf[1]; + Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0; + int _only_immortal = 0; Py_ssize_t _return_value; - _return_value = sys_getunicodeinternedsize_impl(module); + args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, argsbuf); + if (!args) { + goto exit; + } + if (!noptargs) { + goto skip_optional_kwonly; + } + _only_immortal = PyObject_IsTrue(args[0]); + if (_only_immortal < 0) { + goto exit; + } +skip_optional_kwonly: + _return_value = sys_getunicodeinternedsize_impl(module, _only_immortal); if ((_return_value == -1) && PyErr_Occurred()) { goto exit; } @@ -1415,4 +1455,4 @@ exit: #ifndef SYS_GETANDROIDAPILEVEL_METHODDEF #define SYS_GETANDROIDAPILEVEL_METHODDEF #endif /* !defined(SYS_GETANDROIDAPILEVEL_METHODDEF) */ -/*[clinic end generated code: output=6d598acc26237fbe input=a9049054013a1b77]*/ +/*[clinic end generated code: output=2a1fbdf7de450c63 input=a9049054013a1b77]*/ diff --git a/contrib/tools/python3/Python/codecs.c b/contrib/tools/python3/Python/codecs.c index 1983f56ba2..b041339e0d 100644 --- a/contrib/tools/python3/Python/codecs.c +++ b/contrib/tools/python3/Python/codecs.c @@ -144,7 +144,9 @@ PyObject *_PyCodec_Lookup(const char *encoding) if (v == NULL) { return NULL; } - PyUnicode_InternInPlace(&v); + + /* Intern the string. We'll make it immortal later if lookup succeeds. */ + _PyUnicode_InternMortal(interp, &v); /* First, try to lookup the name in the registry dictionary */ PyObject *result = PyDict_GetItemWithError(interp->codec_search_cache, v); @@ -197,6 +199,8 @@ PyObject *_PyCodec_Lookup(const char *encoding) goto onError; } + _PyUnicode_InternImmortal(interp, &v); + /* Cache and return the result */ if (PyDict_SetItem(interp->codec_search_cache, v, result) < 0) { Py_DECREF(result); diff --git a/contrib/tools/python3/Python/compile.c b/contrib/tools/python3/Python/compile.c index 7255f5d147..49b2ebf003 100644 --- a/contrib/tools/python3/Python/compile.c +++ b/contrib/tools/python3/Python/compile.c @@ -135,6 +135,7 @@ enum fblocktype { WHILE_LOOP, FOR_LOOP, TRY_EXCEPT, FINALLY_TRY, FINALLY_END, struct fblockinfo { enum fblocktype fb_type; jump_target_label fb_block; + location fb_loc; /* (optional) type-specific exit or cleanup block */ jump_target_label fb_exit; /* (optional) additional information required for unwinding */ @@ -772,8 +773,7 @@ compiler_set_qualname(struct compiler *c) } if (base != NULL) { - _Py_DECLARE_STR(dot, "."); - name = PyUnicode_Concat(base, &_Py_STR(dot)); + name = PyUnicode_Concat(base, _Py_LATIN1_CHR('.')); Py_DECREF(base); if (name == NULL) { return ERROR; @@ -1467,6 +1467,7 @@ compiler_push_fblock(struct compiler *c, location loc, f = &c->u->u_fblock[c->u->u_nfblocks++]; f->fb_type = t; f->fb_block = block_label; + f->fb_loc = loc; f->fb_exit = exit; f->fb_datum = datum; return SUCCESS; @@ -1594,7 +1595,7 @@ compiler_unwind_fblock(struct compiler *c, location *ploc, case WITH: case ASYNC_WITH: - *ploc = LOC((stmt_ty)info->fb_datum); + *ploc = info->fb_loc; ADDOP(c, *ploc, POP_BLOCK); if (preserve_tos) { ADDOP_I(c, *ploc, SWAP, 2); diff --git a/contrib/tools/python3/Python/deepfreeze/deepfreeze.c b/contrib/tools/python3/Python/deepfreeze/deepfreeze.c index 858bcdb9bf..f7c18bf793 100644 --- a/contrib/tools/python3/Python/deepfreeze/deepfreeze.c +++ b/contrib/tools/python3/Python/deepfreeze/deepfreeze.c @@ -2214,7 +2214,7 @@ importlib__bootstrap_toplevel_consts_7_consts_3_localsplusnames = { .ob_item = { &_Py_ID(self), & const_str_pop._ascii.ob_base, - &_Py_ID(d), + (PyObject *)&_Py_SINGLETON(strings).ascii[100], &_Py_ID(key), }, }, @@ -4532,7 +4532,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[247]; + char ob_sval[245]; } importlib__bootstrap_toplevel_consts_14_consts_4_linetable = { .ob_base = { @@ -4540,10 +4540,10 @@ importlib__bootstrap_toplevel_consts_14_consts_4_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 246, + .ob_size = 244, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xf4\x0c\x00\x0f\x16\xd7\x0e\x1f\xd1\x0e\x1f\xd3\x0e\x21\x88\x03\xdc\x0d\x1f\xa0\x03\xa0\x54\xd5\x0d\x2a\xd8\x12\x16\xf0\x08\x00\x16\x1a\x97\x59\x93\x59\xd8\x17\x1b\x97\x7a\x91\x7a\xa0\x52\xd2\x17\x27\xa8\x34\xaf\x3a\xa9\x3a\xb8\x13\xd2\x2b\x3c\xf0\x0e\x00\x26\x29\x98\x04\x9c\x0a\xd8\x18\x1c\x9f\x0a\x99\x0a\xd7\x18\x29\xd1\x18\x29\xa8\x24\xd4\x18\x2f\xd8\x1f\x23\xf7\x15\x2c\x11\x32\xf7\x0b\x3b\x09\x26\xf0\x00\x3b\x09\x26\xf0\x44\x01\x00\x18\x1c\xd7\x17\x28\xd1\x17\x28\xd4\x17\x2a\xdc\x1e\x2c\xd0\x2f\x44\xc0\x54\xc0\x48\xd0\x2d\x4d\xd3\x1e\x4e\xd0\x18\x4e\xf0\x1a\x00\x18\x1c\x97\x7b\x91\x7b\xd7\x17\x2a\xd1\x17\x2a\xa8\x35\xd4\x17\x31\xd8\x18\x1c\x9f\x0c\x99\x0c\xd7\x18\x2b\xd1\x18\x2b\xa8\x44\xd4\x18\x31\xf7\x59\x01\x00\x16\x1f\xf0\x62\x01\x00\x11\x15\x97\x0b\x91\x0b\xd7\x10\x23\xd1\x10\x23\xd4\x10\x25\xf0\x0a\x00\x11\x15\x97\x0b\x91\x0b\xd7\x10\x23\xd1\x10\x23\xd4\x10\x25\xf0\x75\x01\x00\x13\x17\xf7\x08\x00\x16\x1f\x90\x59\xfa\xf7\x0b\x00\x0e\x2b\xd0\x0d\x2a\xfa", + .ob_sval = "\x80\x00\xf4\x0c\x00\x0f\x16\xd7\x0e\x1f\xd1\x0e\x1f\xd3\x0e\x21\x88\x03\xdc\x0d\x1f\xa0\x03\xa0\x54\xd5\x0d\x2a\xd8\x12\x16\xf0\x08\x00\x16\x1a\x97\x59\x93\x59\xd8\x17\x1b\x97\x7a\x91\x7a\xa0\x52\xd2\x17\x27\xa8\x34\xaf\x3a\xa9\x3a\xb8\x13\xd2\x2b\x3c\xf0\x0e\x00\x26\x29\x98\x04\x9c\x0a\xd8\x18\x1c\x9f\x0a\x99\x0a\xd7\x18\x29\xd1\x18\x29\xa8\x24\xd4\x18\x2f\xd8\x1f\x23\xf7\x15\x00\x16\x1f\xf7\x0b\x00\x0e\x2b\xd0\x0d\x2a\xf0\x44\x01\x00\x18\x1c\xd7\x17\x28\xd1\x17\x28\xd4\x17\x2a\xdc\x1e\x2c\xd0\x2f\x44\xc0\x54\xc0\x48\xd0\x2d\x4d\xd3\x1e\x4e\xd0\x18\x4e\xf0\x1a\x00\x18\x1c\x97\x7b\x91\x7b\xd7\x17\x2a\xd1\x17\x2a\xa8\x35\xd4\x17\x31\xd8\x18\x1c\x9f\x0c\x99\x0c\xd7\x18\x2b\xd1\x18\x2b\xa8\x44\xd4\x18\x31\xf7\x59\x01\x00\x16\x1f\xf0\x62\x01\x00\x11\x15\x97\x0b\x91\x0b\xd7\x10\x23\xd1\x10\x23\xd4\x10\x25\xf0\x0a\x00\x11\x15\x97\x0b\x91\x0b\xd7\x10\x23\xd1\x10\x23\xd4\x10\x25\xf0\x75\x01\x00\x13\x17\xf7\x08\x00\x16\x1f\x90\x59\xfa\xf7\x0b\x00\x0e\x2b\xd0\x0d\x2a\xfa", }; static struct { @@ -9966,7 +9966,7 @@ importlib__bootstrap_toplevel_consts_30_consts_9_consts = { }, .ob_item = { & importlib__bootstrap_toplevel_consts_30_consts_9_consts_0._ascii.ob_base, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], }, }, @@ -12101,7 +12101,7 @@ importlib__bootstrap_toplevel_consts_41_consts = { &_Py_ID(__loader__), &_Py_ID(__package__), &_Py_ID(__path__), - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], &_Py_ID(__spec__), }, @@ -12511,7 +12511,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[42]; + char ob_sval[37]; } importlib__bootstrap_toplevel_consts_43_linetable = { .ob_base = { @@ -12519,10 +12519,10 @@ importlib__bootstrap_toplevel_consts_43_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 41, + .ob_size = 36, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xf4\x12\x00\x0a\x1c\x98\x44\x9f\x49\x99\x49\xd5\x09\x26\xdc\x0f\x1d\x98\x64\xd3\x0f\x23\xf7\x03\x01\x05\x24\xf1\x00\x01\x05\x24\xd7\x09\x26\xd0\x09\x26\xfa", + .ob_sval = "\x80\x00\xf4\x12\x00\x0a\x1c\x98\x44\x9f\x49\x99\x49\xd5\x09\x26\xdc\x0f\x1d\x98\x64\xd3\x0f\x23\xf7\x03\x00\x0a\x27\xd7\x09\x26\xd2\x09\x26\xfa", }; static struct { @@ -14489,7 +14489,7 @@ importlib__bootstrap_toplevel_consts_46_consts_5_consts = { (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 1], & importlib__bootstrap_toplevel_consts_46_consts_5_consts_8._ascii.ob_base, Py_False, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], & importlib__bootstrap_toplevel_consts_46_consts_5_consts_11._ascii.ob_base, & importlib__bootstrap_toplevel_consts_46_consts_5_consts_12._ascii.ob_base, }, @@ -14874,7 +14874,7 @@ importlib__bootstrap_toplevel_consts_46_consts_6_localsplusnames = { &_Py_ID(path), &_Py_ID(target), & const_str_info._ascii.ob_base, - &_Py_ID(_), + (PyObject *)&_Py_SINGLETON(strings).ascii[95], & const_str_ispkg._ascii.ob_base, & const_str_origname._ascii.ob_base, & const_str_spec._ascii.ob_base, @@ -15428,7 +15428,7 @@ importlib__bootstrap_toplevel_consts_46_consts_9_localsplusnames = { & const_str_fullname._ascii.ob_base, &_Py_ID(module), & const_str_info._ascii.ob_base, - &_Py_ID(_), + (PyObject *)&_Py_SINGLETON(strings).ascii[95], & const_str_ispkg._ascii.ob_base, & const_str_origname._ascii.ob_base, }, @@ -16505,7 +16505,7 @@ importlib__bootstrap_toplevel_consts_50_consts = { }, .ob_item = { & importlib__bootstrap_toplevel_consts_50_consts_0._ascii.ob_base, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 1], & importlib__bootstrap_toplevel_consts_50_consts_3._ascii.ob_base, (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], @@ -16873,7 +16873,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[265]; + char ob_sval[263]; } importlib__bootstrap_toplevel_consts_51_linetable = { .ob_base = { @@ -16881,10 +16881,10 @@ importlib__bootstrap_toplevel_consts_51_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 264, + .ob_size = 262, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xe4\x10\x13\x97\x0d\x91\x0d\x80\x49\xd8\x07\x10\xd0\x07\x18\xe4\x0e\x19\xf0\x00\x01\x1b\x2a\xf3\x00\x01\x0f\x2b\xf0\x00\x01\x09\x2b\xf1\x06\x00\x0c\x15\xdc\x08\x11\x8f\x0e\x89\x0e\xd0\x17\x2f\xb4\x1d\xd4\x08\x3f\xf0\x0a\x00\x11\x15\x9c\x03\x9f\x0b\x99\x0b\xd0\x10\x23\x80\x49\xdb\x12\x1b\x88\x06\xdc\x0d\x1f\xd5\x0d\x21\xf0\x02\x05\x0d\x35\xd8\x1c\x22\xd7\x1c\x2c\xd1\x1c\x2c\x90\x09\xf1\x08\x00\x18\x21\xa0\x14\xa0\x74\xa8\x56\xd3\x17\x34\x91\x04\xf7\x0d\x00\x0e\x22\xf0\x0e\x00\x0c\x10\xd1\x0b\x1b\xe1\x13\x1c\xa0\x14\xac\x13\xaf\x1b\xa9\x1b\xd1\x21\x34\xdc\x19\x1c\x9f\x1b\x99\x1b\xa0\x54\xd1\x19\x2a\x90\x06\xf0\x02\x0b\x11\x28\xd8\x1f\x25\x9f\x7f\x99\x7f\x90\x48\xf0\x0e\x00\x18\x20\xd0\x17\x27\xd8\x1f\x23\x9a\x0b\xe0\x1f\x27\x9a\x0f\xe0\x17\x1b\x92\x0b\xf0\x33\x00\x13\x1c\xf0\x36\x00\x10\x14\xf8\xf4\x2f\x00\x14\x22\xf2\x00\x01\x0d\x19\xd8\x10\x18\xf7\x09\x06\x09\x35\xf0\x00\x06\x09\x35\xf0\x06\x01\x0d\x19\xfa\xf7\x07\x00\x0e\x22\xd0\x0d\x21\xfb\xf4\x1a\x00\x18\x26\xf2\x00\x04\x11\x20\xf0\x08\x00\x1c\x20\x94\x4b\xf0\x09\x04\x11\x20\xfa", + .ob_sval = "\x80\x00\xe4\x10\x13\x97\x0d\x91\x0d\x80\x49\xd8\x07\x10\xd0\x07\x18\xe4\x0e\x19\xf0\x00\x01\x1b\x2a\xf3\x00\x01\x0f\x2b\xf0\x00\x01\x09\x2b\xf1\x06\x00\x0c\x15\xdc\x08\x11\x8f\x0e\x89\x0e\xd0\x17\x2f\xb4\x1d\xd4\x08\x3f\xf0\x0a\x00\x11\x15\x9c\x03\x9f\x0b\x99\x0b\xd0\x10\x23\x80\x49\xdb\x12\x1b\x88\x06\xdc\x0d\x1f\xd5\x0d\x21\xf0\x02\x05\x0d\x35\xd8\x1c\x22\xd7\x1c\x2c\xd1\x1c\x2c\x90\x09\xf1\x08\x00\x18\x21\xa0\x14\xa0\x74\xa8\x56\xd3\x17\x34\x91\x04\xf7\x0d\x00\x0e\x22\xf0\x0e\x00\x0c\x10\xd1\x0b\x1b\xe1\x13\x1c\xa0\x14\xac\x13\xaf\x1b\xa9\x1b\xd1\x21\x34\xdc\x19\x1c\x9f\x1b\x99\x1b\xa0\x54\xd1\x19\x2a\x90\x06\xf0\x02\x0b\x11\x28\xd8\x1f\x25\x9f\x7f\x99\x7f\x90\x48\xf0\x0e\x00\x18\x20\xd0\x17\x27\xd8\x1f\x23\x9a\x0b\xe0\x1f\x27\x9a\x0f\xe0\x17\x1b\x92\x0b\xf0\x33\x00\x13\x1c\xf0\x36\x00\x10\x14\xf8\xf4\x2f\x00\x14\x22\xf2\x00\x01\x0d\x19\xd8\x10\x18\xf7\x09\x00\x0e\x22\xd0\x0d\x21\xf0\x06\x01\x0d\x19\xfa\xf7\x07\x00\x0e\x22\xd0\x0d\x21\xfb\xf4\x1a\x00\x18\x26\xf2\x00\x04\x11\x20\xf0\x08\x00\x1c\x20\x94\x4b\xf0\x09\x04\x11\x20\xfa", }; static struct { @@ -17516,7 +17516,7 @@ importlib__bootstrap_toplevel_consts_55_consts = { }, .ob_item = { Py_None, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], & importlib__bootstrap_toplevel_consts_55_consts_3._ascii.ob_base, & importlib__bootstrap_toplevel_consts_55_consts_4._ascii.ob_base, @@ -17971,7 +17971,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[175]; + char ob_sval[173]; } importlib__bootstrap_toplevel_consts_56_linetable = { .ob_base = { @@ -17979,10 +17979,10 @@ importlib__bootstrap_toplevel_consts_56_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 174, + .ob_size = 172, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xf4\x0a\x00\x0e\x11\x8f\x5b\x89\x5b\x8f\x5f\x89\x5f\x98\x54\xa4\x3e\xd3\x0d\x32\x80\x46\xd8\x08\x0e\x94\x2e\xd1\x08\x20\xdc\x08\x0f\x94\x07\x98\x06\xa0\x0a\xa8\x44\xd3\x10\x31\xb0\x3f\xc0\x45\xd4\x08\x4a\xdc\x0d\x1f\xa0\x04\xd5\x0d\x25\xdc\x15\x18\x97\x5b\x91\x5b\x97\x5f\x91\x5f\xa0\x54\xac\x3e\xd3\x15\x3a\x88\x46\xd8\x0f\x15\x9c\x1e\xd1\x0f\x27\xdc\x17\x2e\xa8\x74\xb0\x57\xd3\x17\x3d\xf7\x07\x03\x09\x3e\xf1\x00\x03\x09\x3e\xe0\x0f\x27\xf7\x05\x00\x0e\x26\xf4\x12\x00\x09\x1c\x98\x44\xd4\x08\x21\xe0\x07\x0d\x80\x7e\xd8\x14\x1e\x98\x74\x98\x66\xd0\x24\x40\xd0\x12\x41\x88\x07\xdc\x0e\x21\xa0\x27\xb0\x04\xd4\x0e\x35\xd0\x08\x35\xe0\x0b\x11\x80\x4d\xf7\x1f\x00\x0e\x26\xd0\x0d\x25\xfa", + .ob_sval = "\x80\x00\xf4\x0a\x00\x0e\x11\x8f\x5b\x89\x5b\x8f\x5f\x89\x5f\x98\x54\xa4\x3e\xd3\x0d\x32\x80\x46\xd8\x08\x0e\x94\x2e\xd1\x08\x20\xdc\x08\x0f\x94\x07\x98\x06\xa0\x0a\xa8\x44\xd3\x10\x31\xb0\x3f\xc0\x45\xd4\x08\x4a\xdc\x0d\x1f\xa0\x04\xd5\x0d\x25\xdc\x15\x18\x97\x5b\x91\x5b\x97\x5f\x91\x5f\xa0\x54\xac\x3e\xd3\x15\x3a\x88\x46\xd8\x0f\x15\x9c\x1e\xd1\x0f\x27\xdc\x17\x2e\xa8\x74\xb0\x57\xd3\x17\x3d\xf7\x07\x00\x0e\x26\xd1\x0d\x25\xe0\x0f\x27\xf7\x05\x00\x0e\x26\xf4\x12\x00\x09\x1c\x98\x44\xd4\x08\x21\xe0\x07\x0d\x80\x7e\xd8\x14\x1e\x98\x74\x98\x66\xd0\x24\x40\xd0\x12\x41\x88\x07\xdc\x0e\x21\xa0\x27\xb0\x04\xd4\x0e\x35\xd0\x08\x35\xe0\x0b\x11\x80\x4d\xf7\x1f\x00\x0e\x26\xd0\x0d\x25\xfa", }; static struct { @@ -18386,7 +18386,7 @@ importlib__bootstrap_toplevel_consts_59_consts = { &_Py_ID(__all__), Py_True, & importlib__bootstrap_toplevel_consts_58._object.ob_base.ob_base, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], Py_None, }, }, @@ -18549,7 +18549,7 @@ importlib__bootstrap_toplevel_consts_59_localsplusnames = { &_Py_ID(fromlist), & const_str_import_._ascii.ob_base, & const_str_recursive._ascii.ob_base, - &_Py_ID(x), + (PyObject *)&_Py_SINGLETON(strings).ascii[120], & const_str_where._ascii.ob_base, & const_str_from_name._ascii.ob_base, & const_str_exc._ascii.ob_base, @@ -18730,7 +18730,7 @@ importlib__bootstrap_toplevel_consts_60_consts = { & importlib__bootstrap_toplevel_consts_60_consts_8._ascii.ob_base, &_Py_ID(__name__), &_Py_ID(__path__), - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], }, }, @@ -18904,7 +18904,7 @@ importlib__bootstrap_toplevel_consts_61_consts = { & importlib__bootstrap_toplevel_consts_61_consts_0._ascii.ob_base, (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], Py_None, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], &_Py_ID(__path__), }, }, @@ -21349,7 +21349,7 @@ importlib__bootstrap_external_toplevel_consts_12_localsplusnames = { .ob_size = 1, }, .ob_item = { - &_Py_ID(x), + (PyObject *)&_Py_SINGLETON(strings).ascii[120], }, }, }; @@ -22104,7 +22104,7 @@ importlib__bootstrap_external_toplevel_consts_15_localsplusnames = { &_Py_ID(path), & const_str_new_root._ascii.ob_base, & const_str_tail._ascii.ob_base, - &_Py_ID(p), + (PyObject *)&_Py_SINGLETON(strings).ascii[112], }, }, }; @@ -22445,7 +22445,7 @@ importlib__bootstrap_external_toplevel_consts_17_consts_1_localsplusnames = { }, .ob_item = { & importlib__bootstrap_external_toplevel_consts_6_localsplusnames_0._ascii.ob_base, - &_Py_ID(p), + (PyObject *)&_Py_SINGLETON(strings).ascii[112], &_Py_ID(path), }, }, @@ -23810,7 +23810,7 @@ importlib__bootstrap_external_toplevel_consts_24_consts = { }, .ob_item = { & importlib__bootstrap_external_toplevel_consts_24_consts_0._ascii.ob_base, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], }, }, }; @@ -24037,7 +24037,7 @@ importlib__bootstrap_external_toplevel_consts_25_consts = { }, .ob_item = { & importlib__bootstrap_external_toplevel_consts_25_consts_0._ascii.ob_base, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], & const_int_438.ob_base, & const_str_wb._ascii.ob_base, Py_None, @@ -24602,7 +24602,7 @@ importlib__bootstrap_external_toplevel_consts_36_consts = { & importlib__bootstrap_external_toplevel_consts_36_consts_3._ascii.ob_base, &_Py_STR(empty), (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 1], - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], & importlib__bootstrap_external_toplevel_consts_36_consts_7._ascii.ob_base, (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], & importlib__bootstrap_external_toplevel_consts_36_consts_9._ascii.ob_base, @@ -25226,7 +25226,7 @@ importlib__bootstrap_external_toplevel_consts_37_consts = { Py_False, Py_True, & importlib__bootstrap_external_toplevel_consts_37_consts_5._ascii.ob_base, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], & importlib__bootstrap_external_toplevel_consts_37_consts_7._object.ob_base.ob_base, & importlib__bootstrap_external_toplevel_consts_37_consts_8._ascii.ob_base, (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 3], @@ -25628,7 +25628,7 @@ importlib__bootstrap_external_toplevel_consts_38_consts = { & importlib__bootstrap_external_toplevel_consts_38_consts_0._ascii.ob_base, (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], Py_None, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + -3], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + -1], & const_str_py._ascii.ob_base, @@ -25805,7 +25805,7 @@ importlib__bootstrap_external_toplevel_consts_38_localsplusnames = { .ob_item = { & const_str_bytecode_path._ascii.ob_base, & const_str_rest._ascii.ob_base, - &_Py_ID(_), + (PyObject *)&_Py_SINGLETON(strings).ascii[95], & const_str_extension._ascii.ob_base, & const_str_source_path._ascii.ob_base, }, @@ -30342,7 +30342,7 @@ importlib__bootstrap_external_toplevel_consts_54_consts_2_consts = { .ob_item = { & importlib__bootstrap_external_toplevel_consts_54_consts_2_consts_0._ascii.ob_base, (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 1], - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 2], &_Py_ID(__init__), @@ -33821,7 +33821,7 @@ importlib__bootstrap_external_toplevel_consts_58_consts_7_consts = { .ob_item = { & importlib__bootstrap_external_toplevel_consts_58_consts_7_consts_0._ascii.ob_base, Py_None, - &_Py_ID(r), + (PyObject *)&_Py_SINGLETON(strings).ascii[114], }, }, }; @@ -33924,7 +33924,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[111]; + char ob_sval[107]; } importlib__bootstrap_external_toplevel_consts_58_consts_7_linetable = { .ob_base = { @@ -33932,10 +33932,10 @@ importlib__bootstrap_external_toplevel_consts_58_consts_7_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 110, + .ob_size = 106, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xe4\x0b\x15\x90\x64\x9c\x5c\xd4\x2b\x3e\xd0\x1c\x3f\xd4\x0b\x40\xdc\x11\x14\x97\x1d\x91\x1d\x9c\x73\xa0\x34\x9b\x79\xd4\x11\x29\xa8\x54\xd8\x17\x1b\x97\x79\x91\x79\x93\x7b\xf7\x03\x01\x0d\x23\xf1\x00\x01\x0d\x23\xf4\x06\x00\x12\x15\x97\x1a\x91\x1a\x98\x44\xa0\x23\xd4\x11\x26\xa8\x24\xd8\x17\x1b\x97\x79\x91\x79\x93\x7b\xf7\x03\x01\x0d\x23\xf1\x00\x01\x0d\x23\xf7\x07\x00\x12\x2a\xd0\x11\x29\xfa\xf7\x06\x00\x12\x27\xd0\x11\x26\xfa", + .ob_sval = "\x80\x00\xe4\x0b\x15\x90\x64\x9c\x5c\xd4\x2b\x3e\xd0\x1c\x3f\xd4\x0b\x40\xdc\x11\x14\x97\x1d\x91\x1d\x9c\x73\xa0\x34\x9b\x79\xd4\x11\x29\xa8\x54\xd8\x17\x1b\x97\x79\x91\x79\x93\x7b\xf7\x03\x00\x12\x2a\xd1\x11\x29\xf4\x06\x00\x12\x15\x97\x1a\x91\x1a\x98\x44\xa0\x23\xd4\x11\x26\xa8\x24\xd8\x17\x1b\x97\x79\x91\x79\x93\x7b\xf7\x03\x00\x12\x27\xd1\x11\x26\xf7\x07\x00\x12\x2a\xd0\x11\x29\xfa\xf7\x06\x00\x12\x27\xd0\x11\x26\xfa", }; static struct { @@ -37478,7 +37478,7 @@ importlib__bootstrap_external_toplevel_consts_66_consts_4_consts = { }, .ob_item = { & importlib__bootstrap_external_toplevel_consts_66_consts_4_consts_0._ascii.ob_base, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], &_Py_STR(empty), & importlib__bootstrap_external_toplevel_consts_66_consts_4_consts_3._object.ob_base.ob_base, &_Py_ID(__path__), @@ -41737,7 +41737,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_2_consts = { .ob_item = { & importlib__bootstrap_external_toplevel_consts_72_consts_2_consts_0._ascii.ob_base, & importlib__bootstrap_external_toplevel_consts_72_consts_2_consts_1.ob_base.ob_base, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + -1], Py_None, }, @@ -42399,7 +42399,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_6_consts = { .ob_item = { & importlib__bootstrap_external_toplevel_consts_72_consts_6_consts_0._ascii.ob_base, Py_False, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 2], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + -1], &_Py_ID(__init__), @@ -42815,7 +42815,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_7_consts = { .ob_item = { & importlib__bootstrap_external_toplevel_consts_72_consts_7_consts_0._ascii.ob_base, & const_str_win._ascii.ob_base, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], Py_None, }, }, @@ -45035,7 +45035,7 @@ importlib__bootstrap_external_toplevel_localsplusnames = { .ob_size = 1, }, .ob_item = { - &_Py_ID(s), + (PyObject *)&_Py_SINGLETON(strings).ascii[115], }, }, }; @@ -47417,7 +47417,7 @@ zipimport_toplevel_consts_11_consts_10 = { static struct { PyASCIIObject _ascii; - uint8_t _data[205]; + uint8_t _data[54]; } zipimport_toplevel_consts_11_consts_11_consts_0 = { ._ascii = { @@ -47425,7 +47425,7 @@ zipimport_toplevel_consts_11_consts_11_consts_0 = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyUnicode_Type, }, - .length = 204, + .length = 53, .hash = -1, .state = { .kind = 1, @@ -47434,7 +47434,7 @@ zipimport_toplevel_consts_11_consts_11_consts_0 = { .statically_allocated = 1, }, }, - ._data = "\x52\x65\x74\x75\x72\x6e\x20\x74\x68\x65\x20\x52\x65\x73\x6f\x75\x72\x63\x65\x52\x65\x61\x64\x65\x72\x20\x66\x6f\x72\x20\x61\x20\x70\x61\x63\x6b\x61\x67\x65\x20\x69\x6e\x20\x61\x20\x7a\x69\x70\x20\x66\x69\x6c\x65\x2e\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x49\x66\x20\x27\x66\x75\x6c\x6c\x6e\x61\x6d\x65\x27\x20\x69\x73\x20\x61\x20\x70\x61\x63\x6b\x61\x67\x65\x20\x77\x69\x74\x68\x69\x6e\x20\x74\x68\x65\x20\x7a\x69\x70\x20\x66\x69\x6c\x65\x2c\x20\x72\x65\x74\x75\x72\x6e\x20\x74\x68\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x27\x52\x65\x73\x6f\x75\x72\x63\x65\x52\x65\x61\x64\x65\x72\x27\x20\x6f\x62\x6a\x65\x63\x74\x20\x66\x6f\x72\x20\x74\x68\x65\x20\x70\x61\x63\x6b\x61\x67\x65\x2e\x20\x20\x4f\x74\x68\x65\x72\x77\x69\x73\x65\x20\x72\x65\x74\x75\x72\x6e\x20\x4e\x6f\x6e\x65\x2e\x0a\x20\x20\x20\x20\x20\x20\x20\x20", + ._data = "Return the ResourceReader for a module in a zip file.", }; static struct { @@ -47466,7 +47466,7 @@ static PyObject *ob_item[1]; }_object; } -zipimport_toplevel_consts_11_consts_11_consts_3 = { +zipimport_toplevel_consts_11_consts_11_consts_2 = { ._object = { .ob_base = { .ob_base = { @@ -47485,7 +47485,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[4]; + PyObject *ob_item[3]; }_object; } zipimport_toplevel_consts_11_consts_11_consts = { @@ -47495,13 +47495,12 @@ zipimport_toplevel_consts_11_consts_11_consts = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 4, + .ob_size = 3, }, .ob_item = { & zipimport_toplevel_consts_11_consts_11_consts_0._ascii.ob_base, - Py_None, (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], - & zipimport_toplevel_consts_11_consts_11_consts_3._object.ob_base.ob_base, + & zipimport_toplevel_consts_11_consts_11_consts_2._object.ob_base.ob_base, }, }, }; @@ -47510,7 +47509,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[4]; + PyObject *ob_item[2]; }_object; } zipimport_toplevel_consts_11_consts_11_names = { @@ -47520,11 +47519,9 @@ zipimport_toplevel_consts_11_consts_11_names = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 4, + .ob_size = 2, }, .ob_item = { - & const_str_is_package._ascii.ob_base, - & const_str_ZipImportError._ascii.ob_base, & importlib__bootstrap_external_toplevel_consts_58_consts_8_names_0._ascii.ob_base, & const_str_ZipReader._ascii.ob_base, }, @@ -47556,7 +47553,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[66]; + char ob_sval[19]; } zipimport_toplevel_consts_11_consts_11_linetable = { .ob_base = { @@ -47564,27 +47561,10 @@ zipimport_toplevel_consts_11_consts_11_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 65, - }, - .ob_shash = -1, - .ob_sval = "\x80\x00\xf0\x0c\x04\x09\x18\xd8\x13\x17\x97\x3f\x91\x3f\xa0\x38\xd4\x13\x2c\xd8\x17\x1b\xf0\x03\x00\x14\x2d\xf5\x08\x00\x09\x30\xd9\x0f\x18\x98\x14\x98\x78\xd3\x0f\x28\xd0\x08\x28\xf8\xf4\x07\x00\x10\x1e\xf2\x00\x01\x09\x18\xd9\x13\x17\xf0\x03\x01\x09\x18\xfa", -}; -static - struct { - PyObject_VAR_HEAD - Py_hash_t ob_shash; - char ob_sval[13]; - } -zipimport_toplevel_consts_11_consts_11_exceptiontable = { - .ob_base = { - .ob_base = { - .ob_refcnt = _Py_IMMORTAL_REFCNT, - .ob_type = &PyBytes_Type, - }, - .ob_size = 12, + .ob_size = 18, }, .ob_shash = -1, - .ob_sval = "\x82\x11\x24\x00\xa4\x09\x30\x03\xaf\x01\x30\x03", + .ob_sval = "\x80\x00\xe5\x08\x2f\xe1\x0f\x18\x98\x14\x98\x78\xd3\x0f\x28\xd0\x08\x28", }; static struct { @@ -47611,18 +47591,18 @@ zipimport_toplevel_consts_11_consts_11_localsplusnames = { }, }; static - struct _PyCode_DEF(102) + struct _PyCode_DEF(32) zipimport_toplevel_consts_11_consts_11 = { .ob_base = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyCode_Type, }, - .ob_size = 51, + .ob_size = 16, }, .co_consts = & zipimport_toplevel_consts_11_consts_11_consts._object.ob_base.ob_base, .co_names = & zipimport_toplevel_consts_11_consts_11_names._object.ob_base.ob_base, - .co_exceptiontable = & zipimport_toplevel_consts_11_consts_11_exceptiontable.ob_base.ob_base, + .co_exceptiontable = (PyObject *)&_Py_SINGLETON(bytes_empty), .co_flags = 3, .co_argcount = 2, .co_posonlyargcount = 0, @@ -47642,7 +47622,7 @@ zipimport_toplevel_consts_11_consts_11 = { .co_qualname = & zipimport_toplevel_consts_11_consts_11_qualname._ascii.ob_base, .co_linetable = & zipimport_toplevel_consts_11_consts_11_linetable.ob_base.ob_base, ._co_cached = NULL, - .co_code_adaptive = "\x97\x00\x09\x00\x7c\x00\x6a\x01\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\x73\x01\x79\x01\x09\x00\x64\x02\x64\x03\x6c\x02\x6d\x03\x7d\x02\x01\x00\x02\x00\x7c\x02\x7c\x00\x7c\x01\xab\x02\x00\x00\x00\x00\x00\x00\x53\x00\x23\x00\x74\x02\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x72\x03\x01\x00\x59\x00\x79\x01\x77\x00\x78\x03\x59\x00\x77\x01", + .co_code_adaptive = "\x97\x00\x64\x01\x64\x02\x6c\x00\x6d\x01\x7d\x02\x01\x00\x02\x00\x7c\x02\x7c\x00\x7c\x01\xab\x02\x00\x00\x00\x00\x00\x00\x53\x00", ._co_firsttraceable = 0, }; static @@ -47792,7 +47772,7 @@ zipimport_toplevel_consts_11_consts_12 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 271, + .co_firstlineno = 263, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -47958,7 +47938,7 @@ zipimport_toplevel_consts_11_consts_13 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 281, + .co_firstlineno = 273, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -48061,7 +48041,7 @@ zipimport_toplevel_consts_11_linetable = { .ob_size = 65, }, .ob_shash = -1, - .ob_sval = "\x84\x00\xf1\x02\x0c\x05\x08\xf2\x22\x25\x05\x24\xf3\x50\x01\x19\x05\x1c\xf2\x36\x07\x05\x14\xf2\x14\x11\x05\x32\xf2\x2a\x09\x05\x17\xf2\x18\x16\x05\x3b\xf2\x34\x09\x05\x12\xf2\x1a\x28\x05\x13\xf2\x56\x01\x0c\x05\x29\xf2\x1e\x07\x05\x1d\xf3\x14\x01\x05\x4f\x01", + .ob_sval = "\x84\x00\xf1\x02\x0c\x05\x08\xf2\x22\x25\x05\x24\xf3\x50\x01\x19\x05\x1c\xf2\x36\x07\x05\x14\xf2\x14\x11\x05\x32\xf2\x2a\x09\x05\x17\xf2\x18\x16\x05\x3b\xf2\x34\x09\x05\x12\xf2\x1a\x28\x05\x13\xf2\x56\x01\x04\x05\x29\xf2\x0e\x07\x05\x1d\xf3\x14\x01\x05\x4f\x01", }; static struct _PyCode_DEF(84) @@ -48187,7 +48167,7 @@ zipimport_toplevel_consts_18_consts = { }, .ob_item = { Py_None, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 2], }, }, @@ -48251,7 +48231,7 @@ zipimport_toplevel_consts_18 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 299, + .co_firstlineno = 291, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -48372,7 +48352,7 @@ zipimport_toplevel_consts_19 = { .co_kwonlyargcount = 0, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 2, - .co_firstlineno = 303, + .co_firstlineno = 295, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -48520,7 +48500,7 @@ zipimport_toplevel_consts_20 = { .co_kwonlyargcount = 0, .co_framesize = 11 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 312, + .co_firstlineno = 304, .co_nlocalsplus = 7, .co_nlocals = 7, .co_ncellvars = 0, @@ -49513,7 +49493,7 @@ zipimport_toplevel_consts_21 = { .co_kwonlyargcount = 0, .co_framesize = 36 + FRAME_SPECIALS_SIZE, .co_stacksize = 9, - .co_firstlineno = 343, + .co_firstlineno = 335, .co_nlocalsplus = 27, .co_nlocals = 27, .co_ncellvars = 0, @@ -49858,7 +49838,7 @@ zipimport_toplevel_consts_23 = { .co_kwonlyargcount = 0, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 508, + .co_firstlineno = 500, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -50191,7 +50171,7 @@ zipimport_toplevel_consts_24 = { .co_kwonlyargcount = 0, .co_framesize = 25 + FRAME_SPECIALS_SIZE, .co_stacksize = 8, - .co_firstlineno = 529, + .co_firstlineno = 521, .co_nlocalsplus = 17, .co_nlocals = 17, .co_ncellvars = 0, @@ -50399,7 +50379,7 @@ zipimport_toplevel_consts_25 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 575, + .co_firstlineno = 567, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -50669,7 +50649,7 @@ zipimport_toplevel_consts_26 = { .co_kwonlyargcount = 0, .co_framesize = 21 + FRAME_SPECIALS_SIZE, .co_stacksize = 7, - .co_firstlineno = 583, + .co_firstlineno = 575, .co_nlocalsplus = 14, .co_nlocals = 14, .co_ncellvars = 0, @@ -50812,7 +50792,7 @@ zipimport_toplevel_consts_27 = { .co_kwonlyargcount = 0, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 628, + .co_firstlineno = 620, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -50957,7 +50937,7 @@ zipimport_toplevel_consts_28 = { .co_kwonlyargcount = 0, .co_framesize = 8 + FRAME_SPECIALS_SIZE, .co_stacksize = 6, - .co_firstlineno = 635, + .co_firstlineno = 627, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -51120,7 +51100,7 @@ zipimport_toplevel_consts_29_localsplusnames = { .ob_size = 2, }, .ob_item = { - &_Py_ID(d), + (PyObject *)&_Py_SINGLETON(strings).ascii[100], (PyObject *)&_Py_SINGLETON(strings).ascii[116], }, }, @@ -51144,7 +51124,7 @@ zipimport_toplevel_consts_29 = { .co_kwonlyargcount = 0, .co_framesize = 13 + FRAME_SPECIALS_SIZE, .co_stacksize = 11, - .co_firstlineno = 641, + .co_firstlineno = 633, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -51178,7 +51158,7 @@ zipimport_toplevel_consts_30_consts_2 = { .ob_size = 2, }, .ob_item = { - &_Py_ID(c), + (PyObject *)&_Py_SINGLETON(strings).ascii[99], (PyObject *)&_Py_SINGLETON(strings).ascii[111], }, }, @@ -51339,7 +51319,7 @@ zipimport_toplevel_consts_30 = { .co_kwonlyargcount = 0, .co_framesize = 11 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 654, + .co_firstlineno = 646, .co_nlocalsplus = 6, .co_nlocals = 6, .co_ncellvars = 0, @@ -51481,7 +51461,7 @@ zipimport_toplevel_consts_31 = { .co_kwonlyargcount = 0, .co_framesize = 7 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 673, + .co_firstlineno = 665, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -51714,7 +51694,7 @@ zipimport_toplevel_consts_32 = { .co_kwonlyargcount = 0, .co_framesize = 22 + FRAME_SPECIALS_SIZE, .co_stacksize = 8, - .co_firstlineno = 688, + .co_firstlineno = 680, .co_nlocalsplus = 14, .co_nlocals = 14, .co_ncellvars = 0, @@ -51888,7 +51868,7 @@ zipimport_toplevel_linetable = { .ob_size = 307, }, .ob_shash = -1, - .ob_sval = "\xf0\x03\x01\x01\x01\xf1\x02\x0c\x01\x04\xf3\x20\x00\x01\x39\xdf\x00\x45\xdb\x00\x26\xdb\x00\x0b\xdb\x00\x0a\xdb\x00\x0e\xdb\x00\x0a\xdb\x00\x0b\xdb\x00\x10\xe0\x0b\x1b\x98\x5d\xd0\x0a\x2b\x80\x07\xf0\x06\x00\x0c\x1f\xd7\x0b\x27\xd1\x0b\x27\x80\x08\xd8\x0f\x22\xd7\x0f\x32\xd1\x0f\x32\xb0\x31\xb0\x32\xd0\x0f\x36\x80\x0c\xf4\x06\x01\x01\x09\x90\x5b\xf4\x00\x01\x01\x09\xf0\x08\x00\x18\x1a\xd0\x00\x14\xe1\x0f\x13\x90\x43\x8b\x79\x80\x0c\xe0\x17\x19\xd0\x00\x14\xd8\x15\x22\xd0\x00\x12\xd8\x12\x1f\x80\x0f\xf4\x04\x6c\x03\x01\x4f\x01\xd0\x12\x25\xd7\x12\x33\xd1\x12\x33\xf4\x00\x6c\x03\x01\x4f\x01\xf0\x6a\x07\x00\x06\x0e\x90\x0e\xd1\x05\x1e\xa0\x04\xa0\x64\xd0\x04\x2b\xd8\x05\x0d\x90\x0d\xd1\x05\x1d\x98\x75\xa0\x64\xd0\x04\x2b\xd8\x04\x19\xd8\x04\x19\xf0\x09\x05\x14\x02\xd0\x00\x10\xf2\x12\x01\x01\x35\xf2\x08\x06\x01\x22\xf2\x12\x06\x01\x10\xf2\x3e\x7b\x01\x01\x11\xf0\x4a\x04\x18\x05\x2f\xf0\x05\x00\x01\x0c\xf0\x3a\x00\x13\x18\x80\x0f\xf2\x0a\x12\x01\x16\xf2\x2a\x28\x01\x25\xf2\x5c\x01\x02\x01\x1d\xf2\x10\x26\x01\x10\xf1\x50\x01\x00\x0e\x12\x90\x2f\xd7\x12\x2a\xd1\x12\x2a\xd3\x0d\x2b\x80\x0a\xf2\x0a\x03\x01\x12\xf2\x0e\x02\x01\x40\x01\xf2\x0c\x08\x01\x15\xf2\x1a\x0d\x01\x14\xf2\x26\x0a\x01\x32\xf3\x1e\x20\x01\x53\x01", + .ob_sval = "\xf0\x03\x01\x01\x01\xf1\x02\x0c\x01\x04\xf3\x20\x00\x01\x39\xdf\x00\x45\xdb\x00\x26\xdb\x00\x0b\xdb\x00\x0a\xdb\x00\x0e\xdb\x00\x0a\xdb\x00\x0b\xdb\x00\x10\xe0\x0b\x1b\x98\x5d\xd0\x0a\x2b\x80\x07\xf0\x06\x00\x0c\x1f\xd7\x0b\x27\xd1\x0b\x27\x80\x08\xd8\x0f\x22\xd7\x0f\x32\xd1\x0f\x32\xb0\x31\xb0\x32\xd0\x0f\x36\x80\x0c\xf4\x06\x01\x01\x09\x90\x5b\xf4\x00\x01\x01\x09\xf0\x08\x00\x18\x1a\xd0\x00\x14\xe1\x0f\x13\x90\x43\x8b\x79\x80\x0c\xe0\x17\x19\xd0\x00\x14\xd8\x15\x22\xd0\x00\x12\xd8\x12\x1f\x80\x0f\xf4\x04\x64\x03\x01\x4f\x01\xd0\x12\x25\xd7\x12\x33\xd1\x12\x33\xf4\x00\x64\x03\x01\x4f\x01\xf0\x5a\x07\x00\x06\x0e\x90\x0e\xd1\x05\x1e\xa0\x04\xa0\x64\xd0\x04\x2b\xd8\x05\x0d\x90\x0d\xd1\x05\x1d\x98\x75\xa0\x64\xd0\x04\x2b\xd8\x04\x19\xd8\x04\x19\xf0\x09\x05\x14\x02\xd0\x00\x10\xf2\x12\x01\x01\x35\xf2\x08\x06\x01\x22\xf2\x12\x06\x01\x10\xf2\x3e\x7b\x01\x01\x11\xf0\x4a\x04\x18\x05\x2f\xf0\x05\x00\x01\x0c\xf0\x3a\x00\x13\x18\x80\x0f\xf2\x0a\x12\x01\x16\xf2\x2a\x28\x01\x25\xf2\x5c\x01\x02\x01\x1d\xf2\x10\x26\x01\x10\xf1\x50\x01\x00\x0e\x12\x90\x2f\xd7\x12\x2a\xd1\x12\x2a\xd3\x0d\x2b\x80\x0a\xf2\x0a\x03\x01\x12\xf2\x0e\x02\x01\x40\x01\xf2\x0c\x08\x01\x15\xf2\x1a\x0d\x01\x14\xf2\x26\x0a\x01\x32\xf3\x1e\x20\x01\x53\x01", }; static struct _PyCode_DEF(410) @@ -53909,7 +53889,7 @@ abc_toplevel_consts_10_consts_6_consts = { .ob_item = { & abc_toplevel_consts_10_consts_6_consts_0._ascii.ob_base, & abc_toplevel_consts_10_consts_6_consts_1._ascii.ob_base, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], & importlib__bootstrap_toplevel_consts_25_consts_3._object.ob_base.ob_base, & abc_toplevel_consts_10_consts_6_consts_4._ascii.ob_base, & abc_toplevel_consts_10_consts_6_consts_5._ascii.ob_base, @@ -67267,7 +67247,7 @@ codecs_toplevel_consts_33_consts = { }, .ob_item = { & codecs_toplevel_consts_33_consts_0._ascii.ob_base, - &_Py_ID(b), + (PyObject *)&_Py_SINGLETON(strings).ascii[98], }, }, }; @@ -69229,7 +69209,7 @@ codecs_toplevel_consts_50 = { .ob_size = 4, }, .ob_item = { - &_Py_ID(r), + (PyObject *)&_Py_SINGLETON(strings).ascii[114], Py_None, &_Py_ID(strict), (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + -1], @@ -77197,7 +77177,7 @@ _collections_abc_toplevel_consts_40_consts_2_localsplusnames = { }, .ob_item = { &_Py_ID(self), - &_Py_ID(x), + (PyObject *)&_Py_SINGLETON(strings).ascii[120], }, }, }; @@ -78546,7 +78526,7 @@ _collections_abc_toplevel_consts_46_consts_4_localsplusnames = { }, .ob_item = { &_Py_ID(self), - &_Py_ID(a), + (PyObject *)&_Py_SINGLETON(strings).ascii[97], &_Py_ID(__class__), }, }, @@ -79483,7 +79463,7 @@ _collections_abc_toplevel_consts_49_consts = { .ob_item = { & _collections_abc_toplevel_consts_49_consts_0._ascii.ob_base, &_Py_ID(builtins), - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], & _collections_abc_toplevel_consts_49_consts_3._ascii.ob_base, }, }, @@ -81092,8 +81072,8 @@ _collections_abc_toplevel_consts_52_consts_11_consts_1_localsplusnames = { }, .ob_item = { & importlib__bootstrap_external_toplevel_consts_6_localsplusnames_0._ascii.ob_base, - &_Py_ID(s), - &_Py_ID(e), + (PyObject *)&_Py_SINGLETON(strings).ascii[115], + (PyObject *)&_Py_SINGLETON(strings).ascii[101], }, }, }; @@ -82224,9 +82204,9 @@ _collections_abc_toplevel_consts_52_consts_15_localsplusnames = { &_Py_ID(self), & const_str_MAX._ascii.ob_base, & const_str_MASK._ascii.ob_base, - &_Py_ID(n), + (PyObject *)&_Py_SINGLETON(strings).ascii[110], (PyObject *)&_Py_SINGLETON(strings).ascii[104], - &_Py_ID(x), + (PyObject *)&_Py_SINGLETON(strings).ascii[120], & const_str_hx._ascii.ob_base, }, }, @@ -89793,7 +89773,7 @@ _collections_abc_toplevel_consts_74_consts_8_localsplusnames = { }, .ob_item = { &_Py_ID(self), - &_Py_ID(n), + (PyObject *)&_Py_SINGLETON(strings).ascii[110], (PyObject *)&_Py_SINGLETON(strings).ascii[105], }, }, @@ -94407,7 +94387,7 @@ genericpath_toplevel_consts_6_localsplusnames = { .ob_size = 2, }, .ob_item = { - &_Py_ID(s), + (PyObject *)&_Py_SINGLETON(strings).ascii[115], & const_str_st._ascii.ob_base, }, }, @@ -95328,7 +95308,7 @@ genericpath_toplevel_consts_12_localsplusnames = { & const_str_s1._ascii.ob_base, & const_str_s2._ascii.ob_base, (PyObject *)&_Py_SINGLETON(strings).ascii[105], - &_Py_ID(c), + (PyObject *)&_Py_SINGLETON(strings).ascii[99], }, }, }; @@ -96212,7 +96192,7 @@ genericpath_toplevel_consts_16_localsplusnames = { .ob_size = 8, }, .ob_item = { - &_Py_ID(p), + (PyObject *)&_Py_SINGLETON(strings).ascii[112], &_Py_ID(sep), & const_str_altsep._ascii.ob_base, & const_str_extsep._ascii.ob_base, @@ -96482,7 +96462,7 @@ genericpath_toplevel_consts_17_localsplusnames = { &_Py_ID(args), & const_str_hasstr._ascii.ob_base, & const_str_hasbytes._ascii.ob_base, - &_Py_ID(s), + (PyObject *)&_Py_SINGLETON(strings).ascii[115], }, }, }; @@ -97766,7 +97746,7 @@ ntpath_toplevel_consts_14_localsplusnames = { .ob_size = 2, }, .ob_item = { - &_Py_ID(s), + (PyObject *)&_Py_SINGLETON(strings).ascii[115], &_Py_ID(encoding), }, }, @@ -98133,7 +98113,7 @@ ntpath_toplevel_consts_16_localsplusnames = { .ob_size = 4, }, .ob_item = { - &_Py_ID(s), + (PyObject *)&_Py_SINGLETON(strings).ascii[115], &_Py_ID(sep), & const_str_altsep._ascii.ob_base, & const_str_colon_sep._ascii.ob_base, @@ -98541,7 +98521,7 @@ ntpath_toplevel_consts_17_localsplusnames = { & const_str_result_drive._ascii.ob_base, & const_str_result_root._ascii.ob_base, & const_str_result_path._ascii.ob_base, - &_Py_ID(p), + (PyObject *)&_Py_SINGLETON(strings).ascii[112], & const_str_p_drive._ascii.ob_base, & const_str_p_root._ascii.ob_base, & const_str_p_path._ascii.ob_base, @@ -98706,7 +98686,7 @@ ntpath_toplevel_consts_18_localsplusnames = { .ob_size = 4, }, .ob_item = { - &_Py_ID(p), + (PyObject *)&_Py_SINGLETON(strings).ascii[112], & const_str_drive._ascii.ob_base, & const_str_root._ascii.ob_base, & const_str_tail._ascii.ob_base, @@ -99042,7 +99022,7 @@ ntpath_toplevel_consts_19_localsplusnames = { .ob_size = 10, }, .ob_item = { - &_Py_ID(p), + (PyObject *)&_Py_SINGLETON(strings).ascii[112], &_Py_ID(sep), & const_str_altsep._ascii.ob_base, & const_str_colon._ascii.ob_base, @@ -99198,10 +99178,10 @@ ntpath_toplevel_consts_20_localsplusnames = { .ob_size = 7, }, .ob_item = { - &_Py_ID(p), + (PyObject *)&_Py_SINGLETON(strings).ascii[112], & const_str_seps._ascii.ob_base, - &_Py_ID(d), - &_Py_ID(r), + (PyObject *)&_Py_SINGLETON(strings).ascii[100], + (PyObject *)&_Py_SINGLETON(strings).ascii[114], (PyObject *)&_Py_SINGLETON(strings).ascii[105], & const_str_head._ascii.ob_base, & const_str_tail._ascii.ob_base, @@ -99267,7 +99247,7 @@ ntpath_toplevel_consts_21_consts = { (PyObject *)&_Py_SINGLETON(bytes_characters[46]), (PyObject *)&_Py_SINGLETON(strings).ascii[92], (PyObject *)&_Py_SINGLETON(strings).ascii[47], - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], }, }, }; @@ -99333,7 +99313,7 @@ ntpath_toplevel_consts_21_localsplusnames = { .ob_size = 1, }, .ob_item = { - &_Py_ID(p), + (PyObject *)&_Py_SINGLETON(strings).ascii[112], }, }, }; @@ -100117,7 +100097,7 @@ ntpath_toplevel_consts_29_localsplusnames = { & const_str_drive._ascii.ob_base, & const_str_root._ascii.ob_base, & const_str_rest._ascii.ob_base, - &_Py_ID(x), + (PyObject *)&_Py_SINGLETON(strings).ascii[120], (PyObject *)&_Py_SINGLETON(strings).ascii[121], }, }, @@ -100477,7 +100457,7 @@ ntpath_toplevel_consts_30_localsplusnames = { &_Py_ID(path), & const_str_tilde._ascii.ob_base, (PyObject *)&_Py_SINGLETON(strings).ascii[105], - &_Py_ID(n), + (PyObject *)&_Py_SINGLETON(strings).ascii[110], & const_str_userhome._ascii.ob_base, & const_str_drive._ascii.ob_base, & const_str_target_user._ascii.ob_base, @@ -100616,10 +100596,10 @@ ntpath_toplevel_consts_31_consts = { (PyObject *)&_Py_SINGLETON(bytes_characters[125]), & const_str_environb._ascii.ob_base, (PyObject *)&_Py_SINGLETON(strings).ascii[36], - &_Py_STR(percent), + (PyObject *)&_Py_SINGLETON(strings).ascii[37], (PyObject *)&_Py_SINGLETON(strings).ascii[39], - &_Py_STR(open_br), - &_Py_STR(close_br), + (PyObject *)&_Py_SINGLETON(strings).ascii[123], + (PyObject *)&_Py_SINGLETON(strings).ascii[125], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 1], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 2], }, @@ -100967,7 +100947,7 @@ ntpath_toplevel_consts_31_localsplusnames = { & const_str_res._ascii.ob_base, & const_str_index._ascii.ob_base, & const_str_pathlen._ascii.ob_base, - &_Py_ID(c), + (PyObject *)&_Py_SINGLETON(strings).ascii[99], & const_str_var._ascii.ob_base, &_Py_ID(value), }, @@ -101116,7 +101096,7 @@ ntpath_toplevel_consts_33_consts = { & ntpath_toplevel_consts_33_consts_4.ob_base.ob_base, (PyObject *)&_Py_SINGLETON(strings).ascii[92], (PyObject *)&_Py_SINGLETON(strings).ascii[47], - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], & ntpath_toplevel_consts_2._ascii.ob_base, (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 1], @@ -102802,7 +102782,7 @@ ntpath_toplevel_consts_44_consts = { (PyObject *)&_Py_SINGLETON(bytes_characters[46]), & ntpath_toplevel_consts_33_consts_4.ob_base.ob_base, (PyObject *)&_Py_SINGLETON(strings).ascii[92], - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], & ntpath_toplevel_consts_2._ascii.ob_base, Py_None, & ntpath_toplevel_consts_44_consts_8._ascii.ob_base, @@ -103156,11 +103136,11 @@ ntpath_toplevel_consts_44_localsplusnames = { & const_str_start_abs._ascii.ob_base, & const_str_path_abs._ascii.ob_base, & const_str_start_drive._ascii.ob_base, - &_Py_ID(_), + (PyObject *)&_Py_SINGLETON(strings).ascii[95], & const_str_start_rest._ascii.ob_base, & const_str_path_drive._ascii.ob_base, & const_str_path_rest._ascii.ob_base, - &_Py_ID(x), + (PyObject *)&_Py_SINGLETON(strings).ascii[120], & const_str_start_list._ascii.ob_base, & const_str_path_list._ascii.ob_base, (PyObject *)&_Py_SINGLETON(strings).ascii[105], @@ -103336,7 +103316,7 @@ ntpath_toplevel_consts_45_consts = { (PyObject *)&_Py_SINGLETON(bytes_characters[46]), (PyObject *)&_Py_SINGLETON(strings).ascii[92], (PyObject *)&_Py_SINGLETON(strings).ascii[47], - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 1], & ntpath_toplevel_consts_45_consts_10._ascii.ob_base, & ntpath_toplevel_consts_45_consts_11._ascii.ob_base, @@ -103508,17 +103488,17 @@ ntpath_toplevel_consts_45_localsplusnames = { &_Py_ID(sep), & const_str_altsep._ascii.ob_base, & const_str_curdir._ascii.ob_base, - &_Py_ID(p), + (PyObject *)&_Py_SINGLETON(strings).ascii[112], & const_str_drivesplits._ascii.ob_base, - &_Py_ID(d), - &_Py_ID(r), + (PyObject *)&_Py_SINGLETON(strings).ascii[100], + (PyObject *)&_Py_SINGLETON(strings).ascii[114], & const_str_split_paths._ascii.ob_base, & const_str_drive._ascii.ob_base, & const_str_root._ascii.ob_base, &_Py_ID(path), & const_str_common._ascii.ob_base, - &_Py_ID(c), - &_Py_ID(s), + (PyObject *)&_Py_SINGLETON(strings).ascii[99], + (PyObject *)&_Py_SINGLETON(strings).ascii[115], & const_str_s1._ascii.ob_base, & const_str_s2._ascii.ob_base, (PyObject *)&_Py_SINGLETON(strings).ascii[105], @@ -103984,7 +103964,7 @@ ntpath_toplevel_consts = { }, .ob_item = { & ntpath_toplevel_consts_0._ascii.ob_base, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], & ntpath_toplevel_consts_2._ascii.ob_base, (PyObject *)&_Py_SINGLETON(strings).ascii[92], (PyObject *)&_Py_SINGLETON(strings).ascii[59], @@ -104672,7 +104652,7 @@ posixpath_toplevel_consts_13_localsplusnames = { .ob_size = 2, }, .ob_item = { - &_Py_ID(s), + (PyObject *)&_Py_SINGLETON(strings).ascii[115], &_Py_ID(sep), }, }, @@ -104843,11 +104823,11 @@ posixpath_toplevel_consts_14_localsplusnames = { .ob_size = 5, }, .ob_item = { - &_Py_ID(a), - &_Py_ID(p), + (PyObject *)&_Py_SINGLETON(strings).ascii[97], + (PyObject *)&_Py_SINGLETON(strings).ascii[112], &_Py_ID(sep), &_Py_ID(path), - &_Py_ID(b), + (PyObject *)&_Py_SINGLETON(strings).ascii[98], }, }, }; @@ -104994,7 +104974,7 @@ posixpath_toplevel_consts_15_localsplusnames = { .ob_size = 5, }, .ob_item = { - &_Py_ID(p), + (PyObject *)&_Py_SINGLETON(strings).ascii[112], &_Py_ID(sep), (PyObject *)&_Py_SINGLETON(strings).ascii[105], & const_str_head._ascii.ob_base, @@ -105059,7 +105039,7 @@ posixpath_toplevel_consts_16_consts = { (PyObject *)&_Py_SINGLETON(bytes_characters[47]), (PyObject *)&_Py_SINGLETON(bytes_characters[46]), (PyObject *)&_Py_SINGLETON(strings).ascii[47], - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], }, }, }; @@ -105098,7 +105078,7 @@ posixpath_toplevel_consts_16_localsplusnames = { .ob_size = 3, }, .ob_item = { - &_Py_ID(p), + (PyObject *)&_Py_SINGLETON(strings).ascii[112], &_Py_ID(sep), & const_str_extsep._ascii.ob_base, }, @@ -105349,7 +105329,7 @@ posixpath_toplevel_consts_18_localsplusnames = { .ob_size = 3, }, .ob_item = { - &_Py_ID(p), + (PyObject *)&_Py_SINGLETON(strings).ascii[112], &_Py_ID(sep), & const_str_empty._ascii.ob_base, }, @@ -105474,7 +105454,7 @@ posixpath_toplevel_consts_19_localsplusnames = { .ob_size = 3, }, .ob_item = { - &_Py_ID(p), + (PyObject *)&_Py_SINGLETON(strings).ascii[112], &_Py_ID(sep), (PyObject *)&_Py_SINGLETON(strings).ascii[105], }, @@ -105574,7 +105554,7 @@ posixpath_toplevel_consts_20_localsplusnames = { .ob_size = 4, }, .ob_item = { - &_Py_ID(p), + (PyObject *)&_Py_SINGLETON(strings).ascii[112], &_Py_ID(sep), (PyObject *)&_Py_SINGLETON(strings).ascii[105], & const_str_head._ascii.ob_base, @@ -106493,8 +106473,8 @@ posixpath_toplevel_consts_25_consts = { & const_str_environb._ascii.ob_base, (PyObject *)&_Py_SINGLETON(strings).ascii[36], & posixpath_toplevel_consts_25_consts_9._ascii.ob_base, - &_Py_STR(open_br), - &_Py_STR(close_br), + (PyObject *)&_Py_SINGLETON(strings).ascii[123], + (PyObject *)&_Py_SINGLETON(strings).ascii[125], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 1], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + -1], }, @@ -106800,7 +106780,7 @@ posixpath_toplevel_consts_27_consts = { & ntpath_toplevel_consts_33_consts_4.ob_base.ob_base, (PyObject *)&_Py_SINGLETON(strings).ascii[47], &_Py_STR(empty), - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], & ntpath_toplevel_consts_2._ascii.ob_base, (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + -1], }, @@ -106964,7 +106944,7 @@ posixpath_toplevel_consts_27_localsplusnames = { & const_str_empty._ascii.ob_base, & const_str_dot._ascii.ob_base, & const_str_dotdot._ascii.ob_base, - &_Py_ID(_), + (PyObject *)&_Py_SINGLETON(strings).ascii[95], & const_str_initial_slashes._ascii.ob_base, & const_str_comps._ascii.ob_base, & const_str_new_comps._ascii.ob_base, @@ -107318,7 +107298,7 @@ posixpath_toplevel_consts_32_consts = { (PyObject *)&_Py_SINGLETON(bytes_characters[46]), & ntpath_toplevel_consts_33_consts_4.ob_base.ob_base, (PyObject *)&_Py_SINGLETON(strings).ascii[47], - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], & ntpath_toplevel_consts_2._ascii.ob_base, (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 1], Py_False, @@ -107465,7 +107445,7 @@ posixpath_toplevel_consts_32_localsplusnames = { & const_str_curdir._ascii.ob_base, & const_str_pardir._ascii.ob_base, &_Py_ID(name), - &_Py_ID(_), + (PyObject *)&_Py_SINGLETON(strings).ascii[95], & const_str_newpath._ascii.ob_base, & const_str_st._ascii.ob_base, & const_str_is_link._ascii.ob_base, @@ -107548,7 +107528,7 @@ posixpath_toplevel_consts_34_consts = { (PyObject *)&_Py_SINGLETON(bytes_characters[46]), (PyObject *)&_Py_SINGLETON(bytes_characters[47]), & ntpath_toplevel_consts_33_consts_4.ob_base.ob_base, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], (PyObject *)&_Py_SINGLETON(strings).ascii[47], & ntpath_toplevel_consts_2._ascii.ob_base, Py_None, @@ -107650,7 +107630,7 @@ posixpath_toplevel_consts_34_localsplusnames = { & const_str_curdir._ascii.ob_base, &_Py_ID(sep), & const_str_pardir._ascii.ob_base, - &_Py_ID(x), + (PyObject *)&_Py_SINGLETON(strings).ascii[120], & const_str_start_list._ascii.ob_base, & const_str_path_list._ascii.ob_base, (PyObject *)&_Py_SINGLETON(strings).ascii[105], @@ -107751,7 +107731,7 @@ posixpath_toplevel_consts_35_consts_7_localsplusnames = { }, .ob_item = { & importlib__bootstrap_external_toplevel_consts_6_localsplusnames_0._ascii.ob_base, - &_Py_ID(p), + (PyObject *)&_Py_SINGLETON(strings).ascii[112], &_Py_ID(sep), }, }, @@ -107815,7 +107795,7 @@ posixpath_toplevel_consts_35_consts = { (PyObject *)&_Py_SINGLETON(bytes_characters[47]), (PyObject *)&_Py_SINGLETON(bytes_characters[46]), (PyObject *)&_Py_SINGLETON(strings).ascii[47], - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], & posixpath_toplevel_consts_35_consts_7.ob_base.ob_base, & ntpath_toplevel_consts_45_consts_10._ascii.ob_base, Py_None, @@ -107918,8 +107898,8 @@ posixpath_toplevel_consts_35_localsplusnames = { &_Py_ID(path), & const_str_split_paths._ascii.ob_base, & const_str_isabs._ascii.ob_base, - &_Py_ID(s), - &_Py_ID(c), + (PyObject *)&_Py_SINGLETON(strings).ascii[115], + (PyObject *)&_Py_SINGLETON(strings).ascii[99], & const_str_s1._ascii.ob_base, & const_str_s2._ascii.ob_base, & const_str_common._ascii.ob_base, @@ -108000,7 +107980,7 @@ posixpath_toplevel_consts = { }, .ob_item = { & posixpath_toplevel_consts_0._ascii.ob_base, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], & ntpath_toplevel_consts_2._ascii.ob_base, (PyObject *)&_Py_SINGLETON(strings).ascii[47], (PyObject *)&_Py_SINGLETON(strings).ascii[58], @@ -108466,7 +108446,7 @@ os_toplevel_consts_6_consts = { .ob_item = { Py_None, (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], - &_Py_ID(_), + (PyObject *)&_Py_SINGLETON(strings).ascii[95], }, }, }; @@ -108570,7 +108550,7 @@ os_toplevel_consts_6_localsplusnames = { }, .ob_item = { &_Py_ID(module), - &_Py_ID(n), + (PyObject *)&_Py_SINGLETON(strings).ascii[110], }, }, }; @@ -113508,7 +113488,7 @@ os_toplevel_consts_96_localsplusnames = { & const_str_path_list._ascii.ob_base, & const_str_dir._ascii.ob_base, & const_str_fullname._ascii.ob_base, - &_Py_ID(e), + (PyObject *)&_Py_SINGLETON(strings).ascii[101], &_Py_ID(last_exc), }, }, @@ -119226,7 +119206,7 @@ os_toplevel_consts_128_consts_2 = { .ob_size = 2, }, .ob_item = { - &_Py_ID(r), + (PyObject *)&_Py_SINGLETON(strings).ascii[114], (PyObject *)&_Py_SINGLETON(strings).ascii[119], }, }, @@ -119371,7 +119351,7 @@ os_toplevel_consts_128_consts = { & os_toplevel_consts_128_consts_3._ascii.ob_base, (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], & os_toplevel_consts_128_consts_5._ascii.ob_base, - &_Py_ID(r), + (PyObject *)&_Py_SINGLETON(strings).ascii[114], Py_True, & os_toplevel_consts_128_consts_8._object.ob_base.ob_base, & os_toplevel_consts_128_consts_9._object.ob_base.ob_base, @@ -120517,7 +120497,7 @@ os_toplevel_consts_132_consts = { Py_None, & os_toplevel_consts_132_consts_1._ascii.ob_base, (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], - &_Py_ID(b), + (PyObject *)&_Py_SINGLETON(strings).ascii[98], }, }, }; @@ -122253,7 +122233,7 @@ os_toplevel_consts_142 = { .ob_size = 3, }, .ob_item = { - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], Py_True, Py_None, }, @@ -122277,7 +122257,7 @@ os_toplevel_consts_144 = { .ob_size = 2, }, .ob_item = { - &_Py_ID(r), + (PyObject *)&_Py_SINGLETON(strings).ascii[114], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + -1], }, }, @@ -122300,7 +122280,7 @@ os_toplevel_consts_145 = { .ob_size = 3, }, .ob_item = { - &_Py_ID(r), + (PyObject *)&_Py_SINGLETON(strings).ascii[114], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + -1], Py_None, }, @@ -123813,9 +123793,9 @@ site_toplevel_consts_7_localsplusnames = { .ob_size = 4, }, .ob_item = { - &_Py_ID(d), + (PyObject *)&_Py_SINGLETON(strings).ascii[100], &_Py_ID(item), - &_Py_ID(_), + (PyObject *)&_Py_SINGLETON(strings).ascii[95], & const_str_itemcase._ascii.ob_base, }, }, @@ -124221,7 +124201,7 @@ site_toplevel_consts_8_consts = { &_Py_STR(empty), & site_toplevel_consts_8_consts_15._object.ob_base.ob_base, & site_toplevel_consts_8_consts_16._ascii.ob_base, - &_Py_ID(d), + (PyObject *)&_Py_SINGLETON(strings).ascii[100], & site_toplevel_consts_8_consts_18._ascii.ob_base, & site_toplevel_consts_8_consts_19._ascii.ob_base, & importlib__bootstrap_toplevel_consts_25_consts_3._object.ob_base.ob_base, @@ -124544,7 +124524,7 @@ site_toplevel_consts_8_localsplusnames = { (PyObject *)&_Py_SINGLETON(strings).ascii[102], & const_str_pth_content._ascii.ob_base, &_Py_ID(locale), - &_Py_ID(n), + (PyObject *)&_Py_SINGLETON(strings).ascii[110], &_Py_ID(line), & const_str_dir._ascii.ob_base, & const_str_dircase._ascii.ob_base, @@ -124696,7 +124676,7 @@ site_toplevel_consts_9_consts = { Py_True, Py_False, & site_toplevel_consts_9_consts_5._ascii.ob_base, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], }, }, }; @@ -125775,7 +125755,7 @@ site_toplevel_consts_12_consts = { .ob_item = { Py_None, &_Py_ID(nt), - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], &_Py_STR(empty), & site_toplevel_consts_12_consts_4._ascii.ob_base, & site_toplevel_consts_12_consts_5._ascii.ob_base, @@ -129401,7 +129381,7 @@ site_toplevel_consts_22_localsplusnames = { (PyObject *)&_Py_SINGLETON(strings).ascii[102], &_Py_ID(line), &_Py_ID(key), - &_Py_ID(_), + (PyObject *)&_Py_SINGLETON(strings).ascii[95], &_Py_ID(value), }, }, @@ -133188,16 +133168,16 @@ stat_toplevel_consts = { & const_int_1048576.ob_base, & const_int_2097152.ob_base, (PyObject *)&_Py_SINGLETON(strings).ascii[108], - &_Py_ID(s), + (PyObject *)&_Py_SINGLETON(strings).ascii[115], (PyObject *)&_Py_SINGLETON(strings).ascii[45], - &_Py_ID(b), - &_Py_ID(d), - &_Py_ID(c), - &_Py_ID(p), - &_Py_ID(r), + (PyObject *)&_Py_SINGLETON(strings).ascii[98], + (PyObject *)&_Py_SINGLETON(strings).ascii[100], + (PyObject *)&_Py_SINGLETON(strings).ascii[99], + (PyObject *)&_Py_SINGLETON(strings).ascii[112], + (PyObject *)&_Py_SINGLETON(strings).ascii[114], (PyObject *)&_Py_SINGLETON(strings).ascii[119], (PyObject *)&_Py_SINGLETON(strings).ascii[83], - &_Py_ID(x), + (PyObject *)&_Py_SINGLETON(strings).ascii[120], (PyObject *)&_Py_SINGLETON(strings).ascii[116], (PyObject *)&_Py_SINGLETON(strings).ascii[84], & stat_toplevel_consts_58.ob_base.ob_base, @@ -135199,7 +135179,7 @@ importlib_util_toplevel_consts_16_consts = { }, .ob_item = { & importlib__bootstrap_toplevel_consts_50_consts_0._ascii.ob_base, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], & importlib_util_toplevel_consts_16_consts_2._ascii.ob_base, & importlib_util_toplevel_consts_16_consts_3._ascii.ob_base, (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], @@ -135695,7 +135675,7 @@ importlib_util_toplevel_consts_18_consts = { }, .ob_item = { & importlib_util_toplevel_consts_18_consts_0._ascii.ob_base, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], &_Py_ID(__path__), & importlib_util_toplevel_consts_18_consts_4._object.ob_base.ob_base, @@ -135821,7 +135801,7 @@ importlib_util_toplevel_consts_18_localsplusnames = { & const_str_parent_name._ascii.ob_base, &_Py_ID(parent), & const_str_parent_path._ascii.ob_base, - &_Py_ID(e), + (PyObject *)&_Py_SINGLETON(strings).ascii[101], &_Py_ID(module), & const_str_spec._ascii.ob_base, }, @@ -136792,7 +136772,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[390]; + char ob_sval[388]; } importlib_util_toplevel_consts_21_consts_2_linetable = { .ob_base = { @@ -136800,10 +136780,10 @@ importlib_util_toplevel_consts_21_consts_2_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 389, + .ob_size = 387, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xe4\x13\x19\xd7\x13\x2a\xd1\x13\x2a\xa8\x34\xb0\x1a\xd3\x13\x3c\x88\x08\xd8\x17\x1f\xd7\x17\x2c\xd1\x17\x2c\x88\x0c\xd8\x0d\x19\x98\x26\xd3\x0d\x21\xf4\x06\x00\x10\x16\xd7\x0f\x26\xd1\x0f\x26\xa0\x74\xa8\x5b\xd3\x0f\x39\xbc\x5b\xd2\x0f\x48\xf0\x0a\x00\x14\x20\xa0\x0c\xd2\x13\x2d\xdc\x1b\x21\xd7\x1b\x32\xd1\x1b\x32\xb0\x34\xb8\x14\xd3\x1b\x3e\xf7\x13\x2b\x09\x32\xf1\x00\x2b\x09\x32\xf0\x14\x00\x2e\x32\x90\x0c\x98\x5c\xd1\x10\x2a\xe4\x1b\x21\xd7\x1b\x32\xd1\x1b\x32\xb0\x34\xb8\x1a\xd3\x1b\x44\x90\x08\xf0\x0c\x00\x21\x29\xa7\x0d\xa1\x0d\x90\x0d\xf0\x06\x00\x1e\x2a\xa8\x2a\xd1\x1d\x35\x90\x0a\xd8\x1c\x24\x90\x09\xd8\x20\x22\x90\x0d\xd8\x22\x2b\xa7\x2f\xa1\x2f\xd6\x22\x33\x91\x4a\x90\x43\x98\x15\xf0\x06\x00\x18\x1b\xa0\x2a\xd1\x17\x2c\xd8\x2d\x32\x98\x0d\xa0\x63\xd2\x18\x2a\xdc\x19\x1b\x98\x49\xa0\x63\x99\x4e\xd3\x19\x2b\xac\x72\xb0\x2a\xb8\x53\xb1\x2f\xd3\x2f\x42\xd3\x19\x42\xd8\x2d\x32\x98\x0d\xa0\x63\xd2\x18\x2a\xf0\x0d\x00\x23\x34\xf0\x0e\x00\x11\x19\x97\x0f\x91\x0f\xd7\x10\x2b\xd1\x10\x2b\xa8\x44\xd4\x10\x31\xf0\x06\x00\x14\x21\xa4\x43\xa7\x4b\xa1\x4b\xd1\x13\x2f\xdc\x17\x19\x98\x24\x93\x78\xa4\x32\xa4\x63\xa7\x6b\xa1\x6b\xb0\x2d\xd1\x26\x40\xd3\x23\x41\xd2\x17\x41\xdc\x1e\x28\xd0\x2b\x3d\xb8\x6d\xd0\x3d\x4e\xf0\x00\x02\x4f\x01\x31\xf0\x00\x02\x2a\x31\xf3\x00\x02\x1f\x32\xf0\x00\x02\x19\x32\xf0\x0a\x00\x11\x19\x97\x0f\x91\x0f\xa0\x0d\xd4\x10\x2e\xe4\x21\x26\xd7\x21\x31\xd1\x21\x31\x90\x04\x94\x0e\xf7\x57\x01\x00\x0e\x22\xf4\x5a\x01\x00\x10\x17\x90\x74\x98\x54\xd3\x0f\x22\xd0\x08\x22\xf7\x5b\x01\x00\x0e\x22\xd0\x0d\x21\xfa", + .ob_sval = "\x80\x00\xe4\x13\x19\xd7\x13\x2a\xd1\x13\x2a\xa8\x34\xb0\x1a\xd3\x13\x3c\x88\x08\xd8\x17\x1f\xd7\x17\x2c\xd1\x17\x2c\x88\x0c\xd8\x0d\x19\x98\x26\xd3\x0d\x21\xf4\x06\x00\x10\x16\xd7\x0f\x26\xd1\x0f\x26\xa0\x74\xa8\x5b\xd3\x0f\x39\xbc\x5b\xd2\x0f\x48\xf0\x0a\x00\x14\x20\xa0\x0c\xd2\x13\x2d\xdc\x1b\x21\xd7\x1b\x32\xd1\x1b\x32\xb0\x34\xb8\x14\xd3\x1b\x3e\xf7\x13\x00\x0e\x22\xd1\x0d\x21\xf0\x14\x00\x2e\x32\x90\x0c\x98\x5c\xd1\x10\x2a\xe4\x1b\x21\xd7\x1b\x32\xd1\x1b\x32\xb0\x34\xb8\x1a\xd3\x1b\x44\x90\x08\xf0\x0c\x00\x21\x29\xa7\x0d\xa1\x0d\x90\x0d\xf0\x06\x00\x1e\x2a\xa8\x2a\xd1\x1d\x35\x90\x0a\xd8\x1c\x24\x90\x09\xd8\x20\x22\x90\x0d\xd8\x22\x2b\xa7\x2f\xa1\x2f\xd6\x22\x33\x91\x4a\x90\x43\x98\x15\xf0\x06\x00\x18\x1b\xa0\x2a\xd1\x17\x2c\xd8\x2d\x32\x98\x0d\xa0\x63\xd2\x18\x2a\xdc\x19\x1b\x98\x49\xa0\x63\x99\x4e\xd3\x19\x2b\xac\x72\xb0\x2a\xb8\x53\xb1\x2f\xd3\x2f\x42\xd3\x19\x42\xd8\x2d\x32\x98\x0d\xa0\x63\xd2\x18\x2a\xf0\x0d\x00\x23\x34\xf0\x0e\x00\x11\x19\x97\x0f\x91\x0f\xd7\x10\x2b\xd1\x10\x2b\xa8\x44\xd4\x10\x31\xf0\x06\x00\x14\x21\xa4\x43\xa7\x4b\xa1\x4b\xd1\x13\x2f\xdc\x17\x19\x98\x24\x93\x78\xa4\x32\xa4\x63\xa7\x6b\xa1\x6b\xb0\x2d\xd1\x26\x40\xd3\x23\x41\xd2\x17\x41\xdc\x1e\x28\xd0\x2b\x3d\xb8\x6d\xd0\x3d\x4e\xf0\x00\x02\x4f\x01\x31\xf0\x00\x02\x2a\x31\xf3\x00\x02\x1f\x32\xf0\x00\x02\x19\x32\xf0\x0a\x00\x11\x19\x97\x0f\x91\x0f\xa0\x0d\xd4\x10\x2e\xe4\x21\x26\xd7\x21\x31\xd1\x21\x31\x90\x04\x94\x0e\xf7\x57\x01\x00\x0e\x22\xf4\x5a\x01\x00\x10\x17\x90\x74\x98\x54\xd3\x0f\x22\xd0\x08\x22\xf7\x5b\x01\x00\x0e\x22\xd0\x0d\x21\xfa", }; static struct { @@ -141022,7 +141002,7 @@ runpy_toplevel_consts_11_consts = { }, .ob_item = { Py_None, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], & runpy_toplevel_consts_11_consts_2._ascii.ob_base, &_Py_ID(__path__), (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], @@ -141258,8 +141238,8 @@ runpy_toplevel_consts_11_localsplusnames = { & const_str_mod_name._ascii.ob_base, & const_str_error._ascii.ob_base, & const_str_pkg_name._ascii.ob_base, - &_Py_ID(_), - &_Py_ID(e), + (PyObject *)&_Py_SINGLETON(strings).ascii[95], + (PyObject *)&_Py_SINGLETON(strings).ascii[101], & const_str_existing._ascii.ob_base, & const_str_warn._ascii.ob_base, &_Py_ID(msg), @@ -142628,7 +142608,7 @@ runpy_toplevel_consts_18_consts = { & runpy_toplevel_consts_18_consts_0._compact._base.ob_base, Py_None, & runpy_toplevel_consts_18_consts_2._ascii.ob_base, - &_Py_STR(dot), + (PyObject *)&_Py_SINGLETON(strings).ascii[46], (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], & runpy_toplevel_consts_18_consts_5._object.ob_base.ob_base, & runpy_toplevel_consts_18_consts_6._object.ob_base.ob_base, @@ -142681,7 +142661,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[382]; + char ob_sval[380]; } runpy_toplevel_consts_18_linetable = { .ob_base = { @@ -142689,10 +142669,10 @@ runpy_toplevel_consts_18_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 381, + .ob_size = 379, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xf0\x1e\x00\x08\x10\xd0\x07\x17\xd8\x13\x1f\x88\x08\xd8\x0f\x17\xd7\x0f\x22\xd1\x0f\x22\xa0\x33\xd3\x0f\x27\xa8\x01\xd1\x0f\x2a\x80\x48\xdd\x04\x24\xd9\x0f\x1b\x98\x49\xd3\x0f\x26\x80\x48\xdc\x10\x12\x97\x0b\x91\x0b\x98\x49\xd3\x10\x26\x80\x49\xdc\x07\x11\x90\x28\x9c\x44\xa0\x14\x9b\x4a\xd4\x07\x27\xf4\x06\x00\x10\x23\xa0\x39\xd3\x0f\x2d\x88\x04\xdc\x0f\x1f\xa0\x04\xa0\x6c\xb0\x48\xd8\x29\x31\xb8\x79\xf4\x03\x01\x10\x4a\x01\xf0\x00\x01\x09\x4a\x01\xf4\x0a\x00\x09\x0c\x8f\x08\x89\x08\x8f\x0f\x89\x0f\x98\x01\x98\x39\xd4\x08\x25\xf0\x02\x11\x09\x15\xf4\x0e\x00\x28\x40\x01\xd3\x27\x41\xd1\x0c\x24\x88\x48\x90\x68\xa0\x04\xdc\x11\x1c\x98\x58\xd4\x11\x26\xa8\x2b\xdc\x11\x1f\xa0\x09\xd5\x11\x2a\xd8\x1e\x29\xd7\x1e\x30\xd1\x1e\x30\xd7\x1e\x39\xd1\x1e\x39\x90\x0b\xdc\x17\x20\xa0\x14\xa0\x7b\xb0\x4c\xd8\x24\x2c\xa8\x68\xb8\x08\xf3\x03\x01\x18\x42\x01\xdf\x42\x46\xc1\x24\xc3\x26\xf7\x09\x04\x0d\x49\x01\xf7\x00\x04\x0d\x49\x01\xf1\x00\x04\x0d\x49\x01\xf0\x0c\x03\x0d\x15\xdc\x10\x13\x97\x08\x91\x08\x97\x0f\x91\x0f\xa0\x09\xd5\x10\x2a\xf8\xdc\x13\x1d\xf2\x00\x01\x0d\x15\xd9\x10\x14\xf0\x03\x01\x0d\x15\xfa\xf7\x0f\x00\x12\x2b\xd0\x11\x2a\xfa\xd0\x11\x2a\xf7\x03\x00\x12\x27\xd7\x11\x26\xd1\x11\x26\xfa\xf0\x0c\x03\x0d\x15\xdc\x10\x13\x97\x08\x91\x08\x97\x0f\x91\x0f\xa0\x09\xd5\x10\x2a\xf8\xdc\x13\x1d\xf2\x00\x01\x0d\x15\xd9\x10\x14\xf0\x03\x01\x0d\x15\xfb\xf0\x05\x03\x0d\x15\xdc\x10\x13\x97\x08\x91\x08\x97\x0f\x91\x0f\xa0\x09\xd5\x10\x2a\xf8\xdc\x13\x1d\xf2\x00\x01\x0d\x15\xd9\x10\x14\xf0\x03\x01\x0d\x15\xfd", + .ob_sval = "\x80\x00\xf0\x1e\x00\x08\x10\xd0\x07\x17\xd8\x13\x1f\x88\x08\xd8\x0f\x17\xd7\x0f\x22\xd1\x0f\x22\xa0\x33\xd3\x0f\x27\xa8\x01\xd1\x0f\x2a\x80\x48\xdd\x04\x24\xd9\x0f\x1b\x98\x49\xd3\x0f\x26\x80\x48\xdc\x10\x12\x97\x0b\x91\x0b\x98\x49\xd3\x10\x26\x80\x49\xdc\x07\x11\x90\x28\x9c\x44\xa0\x14\x9b\x4a\xd4\x07\x27\xf4\x06\x00\x10\x23\xa0\x39\xd3\x0f\x2d\x88\x04\xdc\x0f\x1f\xa0\x04\xa0\x6c\xb0\x48\xd8\x29\x31\xb8\x79\xf4\x03\x01\x10\x4a\x01\xf0\x00\x01\x09\x4a\x01\xf4\x0a\x00\x09\x0c\x8f\x08\x89\x08\x8f\x0f\x89\x0f\x98\x01\x98\x39\xd4\x08\x25\xf0\x02\x11\x09\x15\xf4\x0e\x00\x28\x40\x01\xd3\x27\x41\xd1\x0c\x24\x88\x48\x90\x68\xa0\x04\xdc\x11\x1c\x98\x58\xd4\x11\x26\xa8\x2b\xdc\x11\x1f\xa0\x09\xd5\x11\x2a\xd8\x1e\x29\xd7\x1e\x30\xd1\x1e\x30\xd7\x1e\x39\xd1\x1e\x39\x90\x0b\xdc\x17\x20\xa0\x14\xa0\x7b\xb0\x4c\xd8\x24\x2c\xa8\x68\xb8\x08\xf3\x03\x01\x18\x42\x01\xdf\x42\x46\xc1\x24\xc3\x26\xf7\x07\x00\x12\x2b\xd0\x11\x2a\xf7\x03\x00\x12\x27\xd0\x11\x26\xf0\x0c\x03\x0d\x15\xdc\x10\x13\x97\x08\x91\x08\x97\x0f\x91\x0f\xa0\x09\xd5\x10\x2a\xf8\xdc\x13\x1d\xf2\x00\x01\x0d\x15\xd9\x10\x14\xf0\x03\x01\x0d\x15\xfa\xf7\x0f\x00\x12\x2b\xd0\x11\x2a\xfa\xd0\x11\x2a\xf7\x03\x00\x12\x27\xd7\x11\x26\xd1\x11\x26\xfa\xf0\x0c\x03\x0d\x15\xdc\x10\x13\x97\x08\x91\x08\x97\x0f\x91\x0f\xa0\x09\xd5\x10\x2a\xf8\xdc\x13\x1d\xf2\x00\x01\x0d\x15\xd9\x10\x14\xf0\x03\x01\x0d\x15\xfb\xf0\x05\x03\x0d\x15\xdc\x10\x13\x97\x08\x91\x08\x97\x0f\x91\x0f\xa0\x09\xd5\x10\x2a\xf8\xdc\x13\x1d\xf2\x00\x01\x0d\x15\xd9\x10\x14\xf0\x03\x01\x0d\x15\xfd", }; static struct { diff --git a/contrib/tools/python3/Python/errors.c b/contrib/tools/python3/Python/errors.c index 68e740425b..7a16841eba 100644 --- a/contrib/tools/python3/Python/errors.c +++ b/contrib/tools/python3/Python/errors.c @@ -1876,44 +1876,44 @@ PyErr_SyntaxLocationEx(const char *filename, int lineno, int col_offset) functionality in tb_displayline() in traceback.c. */ static PyObject * -err_programtext(PyThreadState *tstate, FILE *fp, int lineno, const char* encoding) +err_programtext(FILE *fp, int lineno, const char* encoding) { - int i; char linebuf[1000]; - if (fp == NULL) { - return NULL; + size_t line_size = 0; + + for (int i = 0; i < lineno; ) { + line_size = 0; + if (_Py_UniversalNewlineFgetsWithSize(linebuf, sizeof(linebuf), + fp, NULL, &line_size) == NULL) + { + /* Error or EOF. */ + return NULL; + } + /* fgets read *something*; if it didn't fill the + whole buffer, it must have found a newline + or hit the end of the file; if the last character is \n, + it obviously found a newline; else we haven't + yet seen a newline, so must continue */ + if (i + 1 < lineno + && line_size == sizeof(linebuf) - 1 + && linebuf[sizeof(linebuf) - 2] != '\n') + { + continue; + } + i++; } - for (i = 0; i < lineno; i++) { - char *pLastChar = &linebuf[sizeof(linebuf) - 2]; - do { - *pLastChar = '\0'; - if (Py_UniversalNewlineFgets(linebuf, sizeof linebuf, - fp, NULL) == NULL) { - goto after_loop; - } - /* fgets read *something*; if it didn't get as - far as pLastChar, it must have found a newline - or hit the end of the file; if pLastChar is \n, - it obviously found a newline; else we haven't - yet seen a newline, so must continue */ - } while (*pLastChar != '\0' && *pLastChar != '\n'); + const char *line = linebuf; + /* Skip BOM. */ + if (lineno == 1 && line_size >= 3 && memcmp(line, "\xef\xbb\xbf", 3) == 0) { + line += 3; + line_size -= 3; } - -after_loop: - fclose(fp); - if (i == lineno) { - PyObject *res; - if (encoding != NULL) { - res = PyUnicode_Decode(linebuf, strlen(linebuf), encoding, "replace"); - } else { - res = PyUnicode_FromString(linebuf); - } - if (res == NULL) - _PyErr_Clear(tstate); - return res; + PyObject *res = PyUnicode_Decode(line, line_size, encoding, "replace"); + if (res == NULL) { + PyErr_Clear(); } - return NULL; + return res; } PyObject * @@ -1933,20 +1933,41 @@ PyErr_ProgramText(const char *filename, int lineno) return res; } +/* Function from Parser/tokenizer/file_tokenizer.c */ +extern char* _PyTokenizer_FindEncodingFilename(int, PyObject *); + PyObject * _PyErr_ProgramDecodedTextObject(PyObject *filename, int lineno, const char* encoding) { + char *found_encoding = NULL; if (filename == NULL || lineno <= 0) { return NULL; } - PyThreadState *tstate = _PyThreadState_GET(); FILE *fp = _Py_fopen_obj(filename, "r" PY_STDIOTEXTMODE); if (fp == NULL) { - _PyErr_Clear(tstate); + PyErr_Clear(); return NULL; } - return err_programtext(tstate, fp, lineno, encoding); + if (encoding == NULL) { + int fd = fileno(fp); + found_encoding = _PyTokenizer_FindEncodingFilename(fd, filename); + encoding = found_encoding; + if (encoding == NULL) { + PyErr_Clear(); + encoding = "utf-8"; + } + /* Reset position */ + if (lseek(fd, 0, SEEK_SET) == (off_t)-1) { + fclose(fp); + PyMem_Free(found_encoding); + return NULL; + } + } + PyObject *res = err_programtext(fp, lineno, encoding); + fclose(fp); + PyMem_Free(found_encoding); + return res; } PyObject * diff --git a/contrib/tools/python3/Python/frozen_modules/__hello__.h b/contrib/tools/python3/Python/frozen_modules/__hello__.h index 3325f05298..a102aff37f 100644 --- a/contrib/tools/python3/Python/frozen_modules/__hello__.h +++ b/contrib/tools/python3/Python/frozen_modules/__hello__.h @@ -11,7 +11,7 @@ const unsigned char _Py_M____hello__[] = { 84,99,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 0,0,0,0,0,0,243,16,0,0,0,151,0,101,0,90, 1,100,0,90,2,100,1,90,3,121,2,41,3,218,16,84, - 101,115,116,70,114,111,122,101,110,85,116,102,56,95,49,245, + 101,115,116,70,114,111,122,101,110,85,116,102,56,95,49,244, 2,0,0,0,194,182,78,169,4,218,8,95,95,110,97,109, 101,95,95,218,10,95,95,109,111,100,117,108,101,95,95,218, 12,95,95,113,117,97,108,110,97,109,101,95,95,218,7,95, @@ -46,7 +46,7 @@ const unsigned char _Py_M____hello__[] = { 95,95,78,41,6,218,11,105,110,105,116,105,97,108,105,122, 101,100,114,3,0,0,0,114,15,0,0,0,114,17,0,0, 0,114,20,0,0,0,114,6,0,0,0,114,10,0,0,0, - 114,11,0,0,0,114,12,0,0,0,250,8,60,109,111,100, + 114,11,0,0,0,114,12,0,0,0,218,8,60,109,111,100, 117,108,101,62,114,23,0,0,0,1,0,0,0,115,65,0, 0,0,240,3,1,1,1,216,14,18,128,11,247,4,1,1, 17,241,0,1,1,17,247,6,1,1,17,241,0,1,1,17, diff --git a/contrib/tools/python3/Python/frozen_modules/__phello__.h b/contrib/tools/python3/Python/frozen_modules/__phello__.h index 70394ad9b8..247a2aa8ee 100644 --- a/contrib/tools/python3/Python/frozen_modules/__phello__.h +++ b/contrib/tools/python3/Python/frozen_modules/__phello__.h @@ -16,7 +16,7 @@ const unsigned char _Py_M____phello__[] = { 0,0,218,8,95,95,109,97,105,110,95,95,78,41,3,218, 11,105,110,105,116,105,97,108,105,122,101,100,114,7,0,0, 0,218,8,95,95,110,97,109,101,95,95,114,4,0,0,0, - 114,5,0,0,0,114,6,0,0,0,250,8,60,109,111,100, + 114,5,0,0,0,114,6,0,0,0,218,8,60,109,111,100, 117,108,101,62,114,11,0,0,0,1,0,0,0,115,35,0, 0,0,240,3,1,1,1,216,14,18,128,11,242,4,1,1, 26,240,6,0,4,12,136,122,210,3,25,217,4,8,133,70, diff --git a/contrib/tools/python3/Python/frozen_modules/__phello__.ham.eggs.h b/contrib/tools/python3/Python/frozen_modules/__phello__.ham.eggs.h index 26151b1ccf..3ee6e2b0b1 100644 --- a/contrib/tools/python3/Python/frozen_modules/__phello__.ham.eggs.h +++ b/contrib/tools/python3/Python/frozen_modules/__phello__.ham.eggs.h @@ -4,7 +4,7 @@ const unsigned char _Py_M____phello___ham_eggs[] = { 0,0,0,0,0,243,4,0,0,0,151,0,121,0,41,1, 78,169,0,114,2,0,0,0,243,0,0,0,0,250,28,60, 102,114,111,122,101,110,32,95,95,112,104,101,108,108,111,95, - 95,46,104,97,109,46,101,103,103,115,62,250,8,60,109,111, + 95,46,104,97,109,46,101,103,103,115,62,218,8,60,109,111, 100,117,108,101,62,114,5,0,0,0,1,0,0,0,115,5, 0,0,0,241,3,1,1,1,114,3,0,0,0, }; diff --git a/contrib/tools/python3/Python/frozen_modules/__phello__.ham.h b/contrib/tools/python3/Python/frozen_modules/__phello__.ham.h index 04fbf313ad..f984547491 100644 --- a/contrib/tools/python3/Python/frozen_modules/__phello__.ham.h +++ b/contrib/tools/python3/Python/frozen_modules/__phello__.ham.h @@ -4,7 +4,7 @@ const unsigned char _Py_M____phello___ham[] = { 0,0,0,0,0,243,4,0,0,0,151,0,121,0,41,1, 78,169,0,114,2,0,0,0,243,0,0,0,0,250,23,60, 102,114,111,122,101,110,32,95,95,112,104,101,108,108,111,95, - 95,46,104,97,109,62,250,8,60,109,111,100,117,108,101,62, + 95,46,104,97,109,62,218,8,60,109,111,100,117,108,101,62, 114,5,0,0,0,1,0,0,0,115,5,0,0,0,241,3, 1,1,1,114,3,0,0,0, }; diff --git a/contrib/tools/python3/Python/frozen_modules/__phello__.spam.h b/contrib/tools/python3/Python/frozen_modules/__phello__.spam.h index a9903d8224..33dba09eca 100644 --- a/contrib/tools/python3/Python/frozen_modules/__phello__.spam.h +++ b/contrib/tools/python3/Python/frozen_modules/__phello__.spam.h @@ -16,7 +16,7 @@ const unsigned char _Py_M____phello___spam[] = { 4,25,114,5,0,0,0,218,8,95,95,109,97,105,110,95, 95,78,41,3,218,11,105,110,105,116,105,97,108,105,122,101, 100,114,7,0,0,0,218,8,95,95,110,97,109,101,95,95, - 114,4,0,0,0,114,5,0,0,0,114,6,0,0,0,250, + 114,4,0,0,0,114,5,0,0,0,114,6,0,0,0,218, 8,60,109,111,100,117,108,101,62,114,11,0,0,0,1,0, 0,0,115,35,0,0,0,240,3,1,1,1,216,14,18,128, 11,242,4,1,1,26,240,6,0,4,12,136,122,210,3,25, diff --git a/contrib/tools/python3/Python/frozen_modules/_collections_abc.h b/contrib/tools/python3/Python/frozen_modules/_collections_abc.h index 9dbecc55ed..c30a6104af 100644 --- a/contrib/tools/python3/Python/frozen_modules/_collections_abc.h +++ b/contrib/tools/python3/Python/frozen_modules/_collections_abc.h @@ -207,7 +207,7 @@ const unsigned char _Py_M___collections_abc[] = { 0,0,0,0,0,1,0,0,0,35,0,0,0,243,14,0, 0,0,75,0,1,0,151,0,100,0,150,0,151,1,83,0, 114,6,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,9,0,0,0,250,8,60,108,97,109,98, + 8,0,0,0,114,9,0,0,0,218,8,60,108,97,109,98, 100,97,62,114,40,0,0,0,88,0,0,0,115,7,0,0, 0,232,0,248,128,0,155,53,114,8,0,0,0,99,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,131,0, @@ -1045,7 +1045,7 @@ const unsigned char _Py_M___collections_abc[] = { 0,41,8,78,114,176,0,0,0,114,2,0,0,0,122,26, 99,111,108,108,101,99,116,105,111,110,115,46,97,98,99,46, 67,97,108,108,97,98,108,101,91,91,122,2,44,32,233,255, - 255,255,255,122,3,93,44,32,250,1,93,41,7,114,179,0, + 255,255,255,122,3,93,44,32,218,1,93,41,7,114,179,0, 0,0,218,8,95,95,97,114,103,115,95,95,114,182,0,0, 0,114,183,0,0,0,218,8,95,95,114,101,112,114,95,95, 218,4,106,111,105,110,218,10,95,116,121,112,101,95,114,101, @@ -1159,7 +1159,7 @@ const unsigned char _Py_M___collections_abc[] = { 1,107,40,0,0,150,1,151,1,1,0,140,21,4,0,121, 0,173,3,119,1,114,6,0,0,0,41,1,114,69,0,0, 0,41,3,218,2,46,48,218,4,110,97,109,101,218,3,111, - 98,106,115,3,0,0,0,32,32,128,114,9,0,0,0,250, + 98,106,115,3,0,0,0,32,32,128,114,9,0,0,0,218, 9,60,103,101,110,101,120,112,114,62,122,33,95,105,115,95, 112,97,114,97,109,95,101,120,112,114,46,60,108,111,99,97, 108,115,62,46,60,103,101,110,101,120,112,114,62,9,2,0, @@ -1207,7 +1207,7 @@ const unsigned char _Py_M___collections_abc[] = { 105,110,32,115,121,110,99,32,119,105,116,104,32,116,104,101, 32,116,121,112,105,110,103,32,118,101,114,115,105,111,110,46, 41,10,32,32,32,32,218,8,98,117,105,108,116,105,110,115, - 250,1,46,122,3,46,46,46,41,8,114,177,0,0,0,114, + 218,1,46,122,3,46,46,46,41,8,114,177,0,0,0,114, 217,0,0,0,114,70,0,0,0,114,71,0,0,0,114,216, 0,0,0,218,12,70,117,110,99,116,105,111,110,84,121,112, 101,114,69,0,0,0,218,4,114,101,112,114,41,1,114,214, @@ -2779,7 +2779,7 @@ const unsigned char _Py_M___collections_abc[] = { 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,250,8,60,109,111, + 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, diff --git a/contrib/tools/python3/Python/frozen_modules/_sitebuiltins.h b/contrib/tools/python3/Python/frozen_modules/_sitebuiltins.h index 12d2b26044..763b96a703 100644 --- a/contrib/tools/python3/Python/frozen_modules/_sitebuiltins.h +++ b/contrib/tools/python3/Python/frozen_modules/_sitebuiltins.h @@ -133,7 +133,7 @@ const unsigned char _Py_M___sitebuiltins[] = { 75,120,3,89,0,119,1,35,0,116,8,0,0,0,0,0, 0,0,0,36,0,114,3,1,0,89,0,140,131,119,0,120, 3,89,0,119,1,41,4,78,122,5,117,116,102,45,56,41, - 1,218,8,101,110,99,111,100,105,110,103,250,1,10,41,9, + 1,218,8,101,110,99,111,100,105,110,103,218,1,10,41,9, 114,36,0,0,0,114,39,0,0,0,218,4,111,112,101,110, 218,4,114,101,97,100,218,7,79,83,69,114,114,111,114,114, 35,0,0,0,218,5,115,112,108,105,116,218,3,108,101,110, @@ -289,7 +289,7 @@ const unsigned char _Py_M___sitebuiltins[] = { 114,73,0,0,0,41,6,114,71,0,0,0,114,18,0,0, 0,218,6,111,98,106,101,99,116,114,4,0,0,0,114,29, 0,0,0,114,73,0,0,0,114,27,0,0,0,114,13,0, - 0,0,114,11,0,0,0,250,8,60,109,111,100,117,108,101, + 0,0,114,11,0,0,0,218,8,60,109,111,100,117,108,101, 62,114,81,0,0,0,1,0,0,0,115,52,0,0,0,240, 3,1,1,1,241,2,2,1,4,243,20,0,1,11,244,4, 13,1,31,136,102,244,0,13,1,31,244,32,56,1,26,136, diff --git a/contrib/tools/python3/Python/frozen_modules/abc.h b/contrib/tools/python3/Python/frozen_modules/abc.h index a3278a59ea..21933e8504 100644 --- a/contrib/tools/python3/Python/frozen_modules/abc.h +++ b/contrib/tools/python3/Python/frozen_modules/abc.h @@ -308,7 +308,7 @@ const unsigned char _Py_M__abc[] = { 68,101,98,117,103,32,104,101,108,112,101,114,32,116,111,32, 112,114,105,110,116,32,116,104,101,32,65,66,67,32,114,101, 103,105,115,116,114,121,46,122,7,67,108,97,115,115,58,32, - 250,1,46,41,1,218,4,102,105,108,101,122,14,73,110,118, + 218,1,46,41,1,218,4,102,105,108,101,122,14,73,110,118, 46,32,99,111,117,110,116,101,114,58,32,122,15,95,97,98, 99,95,114,101,103,105,115,116,114,121,58,32,122,12,95,97, 98,99,95,99,97,99,104,101,58,32,122,21,95,97,98,99, @@ -489,7 +489,7 @@ const unsigned char _Py_M__abc[] = { 114,44,0,0,0,218,11,73,109,112,111,114,116,69,114,114, 111,114,218,7,95,112,121,95,97,98,99,114,22,0,0,0, 114,92,0,0,0,114,94,0,0,0,114,33,0,0,0,114, - 7,0,0,0,114,5,0,0,0,250,8,60,109,111,100,117, + 7,0,0,0,114,5,0,0,0,218,8,60,109,111,100,117, 108,101,62,114,104,0,0,0,1,0,0,0,115,131,0,0, 0,240,3,1,1,1,241,8,0,1,58,242,6,18,1,19, 244,42,17,1,35,152,43,244,0,17,1,35,244,40,17,1, diff --git a/contrib/tools/python3/Python/frozen_modules/codecs.h b/contrib/tools/python3/Python/frozen_modules/codecs.h index 98913eee7f..51020562ae 100644 --- a/contrib/tools/python3/Python/frozen_modules/codecs.h +++ b/contrib/tools/python3/Python/frozen_modules/codecs.h @@ -1338,7 +1338,7 @@ const unsigned char _Py_M__codecs[] = { 32,32,32,32,32,32,32,32,114,101,97,100,40,41,32,109, 101,116,104,111,100,46,10,10,32,32,32,32,32,32,32,32, 114,2,0,0,0,114,197,0,0,0,78,70,114,195,0,0, - 0,233,72,0,0,0,84,41,1,114,205,0,0,0,250,1, + 0,233,72,0,0,0,84,41,1,114,205,0,0,0,218,1, 13,243,1,0,0,0,13,41,2,114,203,0,0,0,114,204, 0,0,0,233,255,255,255,255,105,64,31,0,0,233,2,0, 0,0,41,11,114,192,0,0,0,114,198,0,0,0,114,191, @@ -2601,7 +2601,7 @@ const unsigned char _Py_M__codecs[] = { 41,0,0,0,114,42,0,0,0,114,43,0,0,0,114,44, 0,0,0,114,45,0,0,0,114,49,1,0,0,218,6,95, 102,97,108,115,101,218,9,101,110,99,111,100,105,110,103,115, - 114,73,0,0,0,114,63,0,0,0,114,62,0,0,0,250, + 114,73,0,0,0,114,63,0,0,0,114,62,0,0,0,218, 8,60,109,111,100,117,108,101,62,114,89,1,0,0,1,0, 0,0,115,20,2,0,0,240,3,1,1,1,241,2,7,1, 4,243,18,0,1,16,219,0,10,240,8,3,1,69,1,220, diff --git a/contrib/tools/python3/Python/frozen_modules/frozen_only.h b/contrib/tools/python3/Python/frozen_modules/frozen_only.h index 0fca6de55c..e6d3c55c26 100644 --- a/contrib/tools/python3/Python/frozen_modules/frozen_only.h +++ b/contrib/tools/python3/Python/frozen_modules/frozen_only.h @@ -7,7 +7,7 @@ const unsigned char _Py_M__frozen_only[] = { 108,100,33,78,41,2,218,11,105,110,105,116,105,97,108,105, 122,101,100,218,5,112,114,105,110,116,169,0,243,0,0,0, 0,250,20,60,102,114,111,122,101,110,32,102,114,111,122,101, - 110,95,111,110,108,121,62,250,8,60,109,111,100,117,108,101, + 110,95,111,110,108,121,62,218,8,60,109,111,100,117,108,101, 62,114,7,0,0,0,1,0,0,0,115,18,0,0,0,240, 3,1,1,1,216,14,18,128,11,217,0,5,128,110,213,0, 21,114,5,0,0,0, diff --git a/contrib/tools/python3/Python/frozen_modules/genericpath.h b/contrib/tools/python3/Python/frozen_modules/genericpath.h index cb9368f19e..925b490ebc 100644 --- a/contrib/tools/python3/Python/frozen_modules/genericpath.h +++ b/contrib/tools/python3/Python/frozen_modules/genericpath.h @@ -376,7 +376,7 @@ const unsigned char _Py_M__genericpath[] = { 0,114,7,0,0,0,114,5,0,0,0,114,6,0,0,0, 114,3,0,0,0,114,14,0,0,0,114,12,0,0,0,114, 13,0,0,0,114,83,0,0,0,114,94,0,0,0,169,0, - 114,39,0,0,0,114,21,0,0,0,250,8,60,109,111,100, + 114,39,0,0,0,114,21,0,0,0,218,8,60,109,111,100, 117,108,101,62,114,98,0,0,0,1,0,0,0,115,96,0, 0,0,240,3,1,1,1,241,2,4,1,4,243,10,0,1, 10,219,0,11,242,4,2,11,23,128,7,242,14,6,1,16, diff --git a/contrib/tools/python3/Python/frozen_modules/getpath.h b/contrib/tools/python3/Python/frozen_modules/getpath.h index 0b9635fa77..6e49661c05 100644 --- a/contrib/tools/python3/Python/frozen_modules/getpath.h +++ b/contrib/tools/python3/Python/frozen_modules/getpath.h @@ -323,18 +323,18 @@ const unsigned char _Py_M__getpath[] = { 110,122,14,112,121,98,117,105,108,100,100,105,114,46,116,120, 116,122,19,77,111,100,117,108,101,115,47,83,101,116,117,112, 46,108,111,99,97,108,218,6,112,121,116,104,111,110,122,7, - 47,112,121,116,104,111,110,250,1,46,122,6,47,111,115,46, + 47,112,121,116,104,111,110,218,1,46,122,6,47,111,115,46, 112,121,122,7,47,111,115,46,112,121,99,122,12,47,108,105, 98,45,100,121,110,108,111,97,100,122,9,76,105,98,47,111, 115,46,112,121,122,10,112,121,118,101,110,118,46,99,102,103, - 122,4,46,122,105,112,250,1,58,250,1,47,218,2,110,116, + 122,4,46,122,105,112,218,1,58,218,1,47,218,2,110,116, 122,20,92,77,111,100,117,108,101,115,92,83,101,116,117,112, 46,108,111,99,97,108,218,3,76,105,98,122,6,92,111,115, 46,112,121,122,7,92,111,115,46,112,121,99,122,9,76,105, 98,92,111,115,46,112,121,218,0,122,27,83,79,70,84,87, 65,82,69,92,80,121,116,104,111,110,92,80,121,116,104,111, 110,67,111,114,101,92,122,11,92,80,121,116,104,111,110,80, - 97,116,104,250,1,59,250,1,92,41,1,218,4,116,101,115, + 97,116,104,218,1,59,218,1,92,41,1,218,4,116,101,115, 116,99,1,0,0,0,0,0,0,0,1,0,0,0,4,0, 0,0,7,0,0,0,243,88,0,0,0,135,0,135,1,151, 0,137,0,114,38,116,1,0,0,0,0,0,0,0,0,136, @@ -352,7 +352,7 @@ const unsigned char _Py_M__getpath[] = { 104,41,4,218,2,46,48,218,1,102,218,6,112,114,101,102, 105,120,114,13,0,0,0,115,4,0,0,0,32,32,128,128, 250,16,60,102,114,111,122,101,110,32,103,101,116,112,97,116, - 104,62,250,9,60,103,101,110,101,120,112,114,62,122,28,115, + 104,62,218,9,60,103,101,110,101,120,112,114,62,122,28,115, 101,97,114,99,104,95,117,112,46,60,108,111,99,97,108,115, 62,46,60,103,101,110,101,120,112,114,62,210,0,0,0,115, 30,0,0,0,248,232,0,248,128,0,208,14,60,177,41,168, @@ -378,7 +378,7 @@ const unsigned char _Py_M__getpath[] = { 115,218,23,109,111,100,117,108,101,95,115,101,97,114,99,104, 95,112,97,116,104,115,95,115,101,116,78,218,9,111,114,105, 103,95,97,114,103,118,233,0,0,0,0,122,11,47,98,105, - 110,47,112,121,116,104,111,110,70,84,250,1,61,122,32,70, + 110,47,112,121,116,104,111,110,70,84,218,1,61,122,32,70, 97,105,108,101,100,32,116,111,32,102,105,110,100,32,114,101, 97,108,32,108,111,99,97,116,105,111,110,32,111,102,32,99, 1,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0, @@ -434,7 +434,7 @@ const unsigned char _Py_M__getpath[] = { 91,58,60,101,120,101,99,95,112,114,101,102,105,120,62,93, 218,8,105,115,111,108,97,116,101,100,218,11,115,105,116,101, 95,105,109,112,111,114,116,218,9,115,97,102,101,95,112,97, - 116,104,250,1,35,122,11,105,109,112,111,114,116,32,115,105, + 116,104,218,1,35,122,11,105,109,112,111,114,116,32,115,105, 116,101,122,7,105,109,112,111,114,116,32,122,39,117,110,115, 117,112,112,111,114,116,101,100,32,39,105,109,112,111,114,116, 39,32,108,105,110,101,32,105,110,32,46,95,112,116,104,32, @@ -512,7 +512,7 @@ const unsigned char _Py_M__getpath[] = { 101,120,116,101,110,100,218,8,67,108,111,115,101,75,101,121, 218,10,80,89,84,72,79,78,80,65,84,72,218,10,115,116, 97,114,116,115,119,105,116,104,169,0,114,27,0,0,0,114, - 21,0,0,0,250,8,60,109,111,100,117,108,101,62,114,150, + 21,0,0,0,218,8,60,109,111,100,117,108,101,62,114,150, 0,0,0,1,0,0,0,115,88,13,0,0,240,3,1,1, 1,240,92,5,0,14,20,143,90,137,90,152,12,211,13,37, 210,13,51,168,26,128,10,224,3,10,136,103,210,3,21,152, diff --git a/contrib/tools/python3/Python/frozen_modules/importlib._bootstrap.h b/contrib/tools/python3/Python/frozen_modules/importlib._bootstrap.h index eba38b60ed..267ea887a7 100644 --- a/contrib/tools/python3/Python/frozen_modules/importlib._bootstrap.h +++ b/contrib/tools/python3/Python/frozen_modules/importlib._bootstrap.h @@ -620,2868 +620,2867 @@ const unsigned char _Py_M__importlib__bootstrap[] = { 114,103,0,0,0,115,2,0,0,0,32,32,114,7,0,0, 0,114,120,0,0,0,122,19,95,77,111,100,117,108,101,76, 111,99,107,46,97,99,113,117,105,114,101,48,1,0,0,115, - 246,0,0,0,128,0,244,12,0,15,22,215,14,31,209,14, + 244,0,0,0,128,0,244,12,0,15,22,215,14,31,209,14, 31,211,14,33,136,3,220,13,31,160,3,160,84,213,13,42, 216,18,22,240,8,0,22,26,151,89,147,89,216,23,27,151, 122,145,122,160,82,210,23,39,168,52,175,58,169,58,184,19, 210,43,60,240,14,0,38,41,152,4,156,10,216,24,28,159, 10,153,10,215,24,41,209,24,41,168,36,212,24,47,216,31, - 35,247,21,44,17,50,247,11,59,9,38,240,0,59,9,38, - 240,68,1,0,24,28,215,23,40,209,23,40,212,23,42,220, - 30,44,208,47,68,192,84,192,72,208,45,77,211,30,78,208, - 24,78,240,26,0,24,28,151,123,145,123,215,23,42,209,23, - 42,168,53,212,23,49,216,24,28,159,12,153,12,215,24,43, - 209,24,43,168,68,212,24,49,247,89,1,0,22,31,240,98, - 1,0,17,21,151,11,145,11,215,16,35,209,16,35,212,16, - 37,240,10,0,17,21,151,11,145,11,215,16,35,209,16,35, - 212,16,37,240,117,1,0,19,23,247,8,0,22,31,144,89, - 250,247,11,0,14,43,208,13,42,250,115,48,0,0,0,161, - 14,68,31,3,175,65,2,68,19,5,193,49,8,68,31,3, - 194,2,65,20,68,19,5,195,22,61,68,31,3,196,19,5, - 68,28,9,196,24,7,68,31,3,196,31,5,68,40,7,99, - 1,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, - 3,0,0,0,243,218,1,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,171,0,0,0,0,0,0, - 0,125,1,124,0,106,4,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,53,0,1,0,124,0,106, - 6,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,11,116,9,0,0,0, - 0,0,0,0,0,100,1,171,1,0,0,0,0,0,0,130, - 1,116,11,0,0,0,0,0,0,0,0,124,0,106,12,0, + 35,247,21,0,22,31,247,11,0,14,43,208,13,42,240,68, + 1,0,24,28,215,23,40,209,23,40,212,23,42,220,30,44, + 208,47,68,192,84,192,72,208,45,77,211,30,78,208,24,78, + 240,26,0,24,28,151,123,145,123,215,23,42,209,23,42,168, + 53,212,23,49,216,24,28,159,12,153,12,215,24,43,209,24, + 43,168,68,212,24,49,247,89,1,0,22,31,240,98,1,0, + 17,21,151,11,145,11,215,16,35,209,16,35,212,16,37,240, + 10,0,17,21,151,11,145,11,215,16,35,209,16,35,212,16, + 37,240,117,1,0,19,23,247,8,0,22,31,144,89,250,247, + 11,0,14,43,208,13,42,250,115,48,0,0,0,161,14,68, + 31,3,175,65,2,68,19,5,193,49,8,68,31,3,194,2, + 65,20,68,19,5,195,22,61,68,31,3,196,19,5,68,28, + 9,196,24,7,68,31,3,196,31,5,68,40,7,99,1,0, + 0,0,0,0,0,0,0,0,0,0,6,0,0,0,3,0, + 0,0,243,218,1,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,171,0,0,0,0,0,0,0,125, + 1,124,0,106,4,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,53,0,1,0,124,0,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,100,2,107,68,0,0,115, - 2,74,0,130,1,124,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,124,1,107,55,0,0,114,11,116,9,0,0,0,0,0, + 0,0,0,100,1,171,1,0,0,0,0,0,0,130,1,116, + 11,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, - 0,0,0,0,0,0,0,1,0,116,11,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,1,0,0,0,0,0, - 0,115,83,100,0,124,0,95,3,0,0,0,0,0,0,0, - 0,116,11,0,0,0,0,0,0,0,0,124,0,106,16,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,2,107,68,0,0,114, - 52,124,0,106,16,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,171,0,0,0,0, - 0,0,0,1,0,124,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, + 1,0,0,0,0,0,0,100,2,107,68,0,0,115,2,74, + 0,130,1,124,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,171,0,0, + 0,0,0,0,0,1,0,116,11,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,1,0,0,0,0,0,0,115, + 83,100,0,124,0,95,3,0,0,0,0,0,0,0,0,116, + 11,0,0,0,0,0,0,0,0,124,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,1,0,100,0,100,0,100,0,171, - 2,0,0,0,0,0,0,1,0,121,0,35,0,49,0,115, - 1,119,2,1,0,89,0,1,0,1,0,121,0,120,3,89, - 0,119,1,41,3,78,250,31,99,97,110,110,111,116,32,114, - 101,108,101,97,115,101,32,117,110,45,97,99,113,117,105,114, - 101,100,32,108,111,99,107,233,0,0,0,0,41,11,114,109, - 0,0,0,114,117,0,0,0,114,83,0,0,0,114,100,0, - 0,0,218,12,82,117,110,116,105,109,101,69,114,114,111,114, - 218,3,108,101,110,114,113,0,0,0,114,68,0,0,0,114, - 114,0,0,0,114,112,0,0,0,114,121,0,0,0,114,122, - 0,0,0,115,2,0,0,0,32,32,114,7,0,0,0,114, - 121,0,0,0,122,19,95,77,111,100,117,108,101,76,111,99, - 107,46,114,101,108,101,97,115,101,116,1,0,0,115,160,0, - 0,0,128,0,220,14,21,215,14,31,209,14,31,211,14,33, - 136,3,216,13,17,143,89,139,89,216,15,19,143,122,137,122, - 152,83,210,15,32,220,22,34,208,35,68,211,22,69,208,16, - 69,220,19,22,144,116,151,122,145,122,147,63,160,81,210,19, - 38,208,12,38,208,19,38,216,12,16,143,74,137,74,143,78, - 137,78,212,12,28,220,19,22,144,116,151,122,145,122,148,63, - 216,29,33,144,4,148,10,220,19,22,144,116,151,124,145,124, - 211,19,36,160,113,210,19,40,216,20,24,151,76,145,76,215, - 20,36,209,20,36,212,20,38,216,20,24,151,75,145,75,215, - 20,39,209,20,39,212,20,41,247,19,0,14,23,143,89,137, - 89,250,115,12,0,0,0,161,66,55,67,33,3,195,33,5, - 67,42,7,99,1,0,0,0,0,0,0,0,0,0,0,0, - 6,0,0,0,3,0,0,0,243,56,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,116,3,0,0,0, - 0,0,0,0,0,124,0,171,1,0,0,0,0,0,0,155, - 0,157,4,83,0,41,3,78,122,12,95,77,111,100,117,108, - 101,76,111,99,107,40,250,5,41,32,97,116,32,169,2,114, - 26,0,0,0,218,2,105,100,114,66,0,0,0,115,1,0, - 0,0,32,114,7,0,0,0,218,8,95,95,114,101,112,114, - 95,95,122,20,95,77,111,100,117,108,101,76,111,99,107,46, - 95,95,114,101,112,114,95,95,129,1,0,0,115,29,0,0, - 0,128,0,216,17,29,152,100,159,105,153,105,152,93,168,37, - 180,2,176,52,179,8,168,122,208,15,58,208,8,58,114,22, - 0,0,0,78,41,9,114,11,0,0,0,114,10,0,0,0, - 114,3,0,0,0,114,12,0,0,0,114,47,0,0,0,114, - 118,0,0,0,114,120,0,0,0,114,121,0,0,0,114,132, - 0,0,0,114,31,0,0,0,114,22,0,0,0,114,7,0, - 0,0,114,107,0,0,0,114,107,0,0,0,226,0,0,0, - 115,35,0,0,0,132,0,241,2,3,5,8,242,10,54,5, - 26,242,112,1,14,5,10,242,32,66,1,5,38,242,72,2, - 11,5,42,243,26,1,5,59,114,22,0,0,0,114,107,0, - 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,16,95,68,117,109,109,121,77,111, - 100,117,108,101,76,111,99,107,122,86,65,32,115,105,109,112, - 108,101,32,95,77,111,100,117,108,101,76,111,99,107,32,101, - 113,117,105,118,97,108,101,110,116,32,102,111,114,32,80,121, - 116,104,111,110,32,98,117,105,108,100,115,32,119,105,116,104, - 111,117,116,10,32,32,32,32,109,117,108,116,105,45,116,104, - 114,101,97,100,105,110,103,32,115,117,112,112,111,114,116,46, - 99,2,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,100,1,124,0,95,1, - 0,0,0,0,0,0,0,0,121,0,169,2,78,114,125,0, - 0,0,41,2,114,26,0,0,0,114,113,0,0,0,114,115, - 0,0,0,115,2,0,0,0,32,32,114,7,0,0,0,114, - 47,0,0,0,122,25,95,68,117,109,109,121,77,111,100,117, - 108,101,76,111,99,107,46,95,95,105,110,105,116,95,95,137, - 1,0,0,115,16,0,0,0,128,0,216,20,24,136,4,140, - 9,216,21,22,136,4,141,10,114,22,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,46,0,0,0,151,0,124,0,120,1,106,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,100,1,122,13,0,0,99,2,95,0,0,0,0,0,0, - 0,0,0,121,2,41,3,78,233,1,0,0,0,84,41,1, - 114,113,0,0,0,114,66,0,0,0,115,1,0,0,0,32, - 114,7,0,0,0,114,120,0,0,0,122,24,95,68,117,109, - 109,121,77,111,100,117,108,101,76,111,99,107,46,97,99,113, - 117,105,114,101,141,1,0,0,115,18,0,0,0,128,0,216, - 8,12,143,10,138,10,144,97,137,15,141,10,216,15,19,114, - 22,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,98,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,100,1,107,40,0,0,114,11,116,3, - 0,0,0,0,0,0,0,0,100,2,171,1,0,0,0,0, - 0,0,130,1,124,0,120,1,106,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,100,3,122,23, - 0,0,99,2,95,0,0,0,0,0,0,0,0,0,121,0, - 41,4,78,114,125,0,0,0,114,124,0,0,0,114,138,0, - 0,0,41,2,114,113,0,0,0,114,126,0,0,0,114,66, - 0,0,0,115,1,0,0,0,32,114,7,0,0,0,114,121, - 0,0,0,122,24,95,68,117,109,109,121,77,111,100,117,108, - 101,76,111,99,107,46,114,101,108,101,97,115,101,145,1,0, - 0,115,38,0,0,0,128,0,216,11,15,143,58,137,58,152, - 17,138,63,220,18,30,208,31,64,211,18,65,208,12,65,216, - 8,12,143,10,138,10,144,97,137,15,142,10,114,22,0,0, - 0,99,1,0,0,0,0,0,0,0,0,0,0,0,6,0, + 1,0,0,0,0,0,0,100,2,107,68,0,0,114,52,124, + 0,106,16,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,171,0,0,0,0,0,0, + 0,1,0,124,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,171,0,0, + 0,0,0,0,0,1,0,100,0,100,0,100,0,171,2,0, + 0,0,0,0,0,1,0,121,0,35,0,49,0,115,1,119, + 2,1,0,89,0,1,0,1,0,121,0,120,3,89,0,119, + 1,41,3,78,250,31,99,97,110,110,111,116,32,114,101,108, + 101,97,115,101,32,117,110,45,97,99,113,117,105,114,101,100, + 32,108,111,99,107,233,0,0,0,0,41,11,114,109,0,0, + 0,114,117,0,0,0,114,83,0,0,0,114,100,0,0,0, + 218,12,82,117,110,116,105,109,101,69,114,114,111,114,218,3, + 108,101,110,114,113,0,0,0,114,68,0,0,0,114,114,0, + 0,0,114,112,0,0,0,114,121,0,0,0,114,122,0,0, + 0,115,2,0,0,0,32,32,114,7,0,0,0,114,121,0, + 0,0,122,19,95,77,111,100,117,108,101,76,111,99,107,46, + 114,101,108,101,97,115,101,116,1,0,0,115,160,0,0,0, + 128,0,220,14,21,215,14,31,209,14,31,211,14,33,136,3, + 216,13,17,143,89,139,89,216,15,19,143,122,137,122,152,83, + 210,15,32,220,22,34,208,35,68,211,22,69,208,16,69,220, + 19,22,144,116,151,122,145,122,147,63,160,81,210,19,38,208, + 12,38,208,19,38,216,12,16,143,74,137,74,143,78,137,78, + 212,12,28,220,19,22,144,116,151,122,145,122,148,63,216,29, + 33,144,4,148,10,220,19,22,144,116,151,124,145,124,211,19, + 36,160,113,210,19,40,216,20,24,151,76,145,76,215,20,36, + 209,20,36,212,20,38,216,20,24,151,75,145,75,215,20,39, + 209,20,39,212,20,41,247,19,0,14,23,143,89,137,89,250, + 115,12,0,0,0,161,66,55,67,33,3,195,33,5,67,42, + 7,99,1,0,0,0,0,0,0,0,0,0,0,0,6,0, 0,0,3,0,0,0,243,56,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,116,3,0,0,0,0,0, 0,0,0,124,0,171,1,0,0,0,0,0,0,155,0,157, - 4,83,0,41,3,78,122,17,95,68,117,109,109,121,77,111, - 100,117,108,101,76,111,99,107,40,114,129,0,0,0,114,130, + 4,83,0,41,3,78,122,12,95,77,111,100,117,108,101,76, + 111,99,107,40,250,5,41,32,97,116,32,169,2,114,26,0, + 0,0,218,2,105,100,114,66,0,0,0,115,1,0,0,0, + 32,114,7,0,0,0,218,8,95,95,114,101,112,114,95,95, + 122,20,95,77,111,100,117,108,101,76,111,99,107,46,95,95, + 114,101,112,114,95,95,129,1,0,0,115,29,0,0,0,128, + 0,216,17,29,152,100,159,105,153,105,152,93,168,37,180,2, + 176,52,179,8,168,122,208,15,58,208,8,58,114,22,0,0, + 0,78,41,9,114,11,0,0,0,114,10,0,0,0,114,3, + 0,0,0,114,12,0,0,0,114,47,0,0,0,114,118,0, + 0,0,114,120,0,0,0,114,121,0,0,0,114,132,0,0, + 0,114,31,0,0,0,114,22,0,0,0,114,7,0,0,0, + 114,107,0,0,0,114,107,0,0,0,226,0,0,0,115,35, + 0,0,0,132,0,241,2,3,5,8,242,10,54,5,26,242, + 112,1,14,5,10,242,32,66,1,5,38,242,72,2,11,5, + 42,243,26,1,5,59,114,22,0,0,0,114,107,0,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,16,95,68,117,109,109,121,77,111,100,117, + 108,101,76,111,99,107,122,86,65,32,115,105,109,112,108,101, + 32,95,77,111,100,117,108,101,76,111,99,107,32,101,113,117, + 105,118,97,108,101,110,116,32,102,111,114,32,80,121,116,104, + 111,110,32,98,117,105,108,100,115,32,119,105,116,104,111,117, + 116,10,32,32,32,32,109,117,108,116,105,45,116,104,114,101, + 97,100,105,110,103,32,115,117,112,112,111,114,116,46,99,2, + 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,100,1,124,0,95,1,0,0, + 0,0,0,0,0,0,121,0,169,2,78,114,125,0,0,0, + 41,2,114,26,0,0,0,114,113,0,0,0,114,115,0,0, + 0,115,2,0,0,0,32,32,114,7,0,0,0,114,47,0, + 0,0,122,25,95,68,117,109,109,121,77,111,100,117,108,101, + 76,111,99,107,46,95,95,105,110,105,116,95,95,137,1,0, + 0,115,16,0,0,0,128,0,216,20,24,136,4,140,9,216, + 21,22,136,4,141,10,114,22,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,46,0,0,0,151,0,124,0,120,1,106,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, + 1,122,13,0,0,99,2,95,0,0,0,0,0,0,0,0, + 0,121,2,41,3,78,233,1,0,0,0,84,41,1,114,113, 0,0,0,114,66,0,0,0,115,1,0,0,0,32,114,7, - 0,0,0,114,132,0,0,0,122,25,95,68,117,109,109,121, - 77,111,100,117,108,101,76,111,99,107,46,95,95,114,101,112, - 114,95,95,150,1,0,0,115,29,0,0,0,128,0,216,17, - 34,160,52,167,57,161,57,160,45,168,117,180,82,184,4,179, - 88,176,74,208,15,63,208,8,63,114,22,0,0,0,78,41, - 8,114,11,0,0,0,114,10,0,0,0,114,3,0,0,0, - 114,12,0,0,0,114,47,0,0,0,114,120,0,0,0,114, - 121,0,0,0,114,132,0,0,0,114,31,0,0,0,114,22, - 0,0,0,114,7,0,0,0,114,134,0,0,0,114,134,0, - 0,0,133,1,0,0,115,28,0,0,0,132,0,241,2,1, - 5,32,242,6,2,5,23,242,8,2,5,20,242,8,3,5, - 24,243,10,1,5,64,1,114,22,0,0,0,114,134,0,0, - 0,99,0,0,0,0,0,0,0,0,0,0,0,0,1,0, - 0,0,0,0,0,0,243,30,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,121,4,41,5,218,18,95,77,111, - 100,117,108,101,76,111,99,107,77,97,110,97,103,101,114,99, - 2,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,100,0,124,0,95,1,0, - 0,0,0,0,0,0,0,121,0,114,2,0,0,0,41,2, - 218,5,95,110,97,109,101,218,5,95,108,111,99,107,114,115, - 0,0,0,115,2,0,0,0,32,32,114,7,0,0,0,114, - 47,0,0,0,122,27,95,77,111,100,117,108,101,76,111,99, - 107,77,97,110,97,103,101,114,46,95,95,105,110,105,116,95, - 95,156,1,0,0,115,16,0,0,0,128,0,216,21,25,136, - 4,140,10,216,21,25,136,4,141,10,114,22,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,108,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,124,0,95,2,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,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,1,0,121,0,114,2,0,0,0,41,4,218,16,95,103, - 101,116,95,109,111,100,117,108,101,95,108,111,99,107,114,144, - 0,0,0,114,145,0,0,0,114,120,0,0,0,114,66,0, - 0,0,115,1,0,0,0,32,114,7,0,0,0,114,87,0, - 0,0,122,28,95,77,111,100,117,108,101,76,111,99,107,77, - 97,110,97,103,101,114,46,95,95,101,110,116,101,114,95,95, - 160,1,0,0,115,34,0,0,0,128,0,220,21,37,160,100, - 167,106,161,106,211,21,49,136,4,140,10,216,8,12,143,10, - 137,10,215,8,26,209,8,26,213,8,28,114,22,0,0,0, - 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,15,0,0,0,243,56,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,171,0,0,0,0,0,0,0,1,0, - 121,0,114,2,0,0,0,41,2,114,145,0,0,0,114,121, - 0,0,0,114,89,0,0,0,115,3,0,0,0,32,32,32, - 114,7,0,0,0,114,92,0,0,0,122,27,95,77,111,100, - 117,108,101,76,111,99,107,77,97,110,97,103,101,114,46,95, - 95,101,120,105,116,95,95,164,1,0,0,115,18,0,0,0, - 128,0,216,8,12,143,10,137,10,215,8,26,209,8,26,213, - 8,28,114,22,0,0,0,78,41,6,114,11,0,0,0,114, - 10,0,0,0,114,3,0,0,0,114,47,0,0,0,114,87, - 0,0,0,114,92,0,0,0,114,31,0,0,0,114,22,0, - 0,0,114,7,0,0,0,114,142,0,0,0,114,142,0,0, - 0,154,1,0,0,115,17,0,0,0,132,0,242,4,2,5, - 26,242,8,2,5,29,243,8,1,5,29,114,22,0,0,0, - 114,142,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,74,1,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,171, - 0,0,0,0,0,0,0,1,0,9,0,9,0,116,5,0, - 0,0,0,0,0,0,0,124,0,25,0,0,0,171,0,0, - 0,0,0,0,0,125,1,124,1,128,63,116,8,0,0,0, - 0,0,0,0,0,128,12,116,11,0,0,0,0,0,0,0, - 0,124,0,171,1,0,0,0,0,0,0,125,1,110,11,116, - 13,0,0,0,0,0,0,0,0,124,0,171,1,0,0,0, - 0,0,0,125,1,124,0,102,1,100,2,132,1,125,2,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,1,124, - 2,171,2,0,0,0,0,0,0,116,4,0,0,0,0,0, - 0,0,0,124,0,60,0,0,0,116,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,114,120,0,0,0,122,24,95,68,117,109,109,121, + 77,111,100,117,108,101,76,111,99,107,46,97,99,113,117,105, + 114,101,141,1,0,0,115,18,0,0,0,128,0,216,8,12, + 143,10,138,10,144,97,137,15,141,10,216,15,19,114,22,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,98,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,100,1,107,40,0,0,114,11,116,3,0,0, + 0,0,0,0,0,0,100,2,171,1,0,0,0,0,0,0, + 130,1,124,0,120,1,106,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,100,3,122,23,0,0, + 99,2,95,0,0,0,0,0,0,0,0,0,121,0,41,4, + 78,114,125,0,0,0,114,124,0,0,0,114,138,0,0,0, + 41,2,114,113,0,0,0,114,126,0,0,0,114,66,0,0, + 0,115,1,0,0,0,32,114,7,0,0,0,114,121,0,0, + 0,122,24,95,68,117,109,109,121,77,111,100,117,108,101,76, + 111,99,107,46,114,101,108,101,97,115,101,145,1,0,0,115, + 38,0,0,0,128,0,216,11,15,143,58,137,58,152,17,138, + 63,220,18,30,208,31,64,211,18,65,208,12,65,216,8,12, + 143,10,138,10,144,97,137,15,142,10,114,22,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,56,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,116,3,0,0,0,0,0,0,0, + 0,124,0,171,1,0,0,0,0,0,0,155,0,157,4,83, + 0,41,3,78,122,17,95,68,117,109,109,121,77,111,100,117, + 108,101,76,111,99,107,40,114,129,0,0,0,114,130,0,0, + 0,114,66,0,0,0,115,1,0,0,0,32,114,7,0,0, + 0,114,132,0,0,0,122,25,95,68,117,109,109,121,77,111, + 100,117,108,101,76,111,99,107,46,95,95,114,101,112,114,95, + 95,150,1,0,0,115,29,0,0,0,128,0,216,17,34,160, + 52,167,57,161,57,160,45,168,117,180,82,184,4,179,88,176, + 74,208,15,63,208,8,63,114,22,0,0,0,78,41,8,114, + 11,0,0,0,114,10,0,0,0,114,3,0,0,0,114,12, + 0,0,0,114,47,0,0,0,114,120,0,0,0,114,121,0, + 0,0,114,132,0,0,0,114,31,0,0,0,114,22,0,0, + 0,114,7,0,0,0,114,134,0,0,0,114,134,0,0,0, + 133,1,0,0,115,28,0,0,0,132,0,241,2,1,5,32, + 242,6,2,5,23,242,8,2,5,20,242,8,3,5,24,243, + 10,1,5,64,1,114,22,0,0,0,114,134,0,0,0,99, + 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 0,0,0,0,243,30,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,121,4,41,5,218,18,95,77,111,100,117, + 108,101,76,111,99,107,77,97,110,97,103,101,114,99,2,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,100,0,124,0,95,1,0,0,0, + 0,0,0,0,0,121,0,114,2,0,0,0,41,2,218,5, + 95,110,97,109,101,218,5,95,108,111,99,107,114,115,0,0, + 0,115,2,0,0,0,32,32,114,7,0,0,0,114,47,0, + 0,0,122,27,95,77,111,100,117,108,101,76,111,99,107,77, + 97,110,97,103,101,114,46,95,95,105,110,105,116,95,95,156, + 1,0,0,115,16,0,0,0,128,0,216,21,25,136,4,140, + 10,216,21,25,136,4,141,10,114,22,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,108,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,124,0,95,2,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,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,1, - 0,124,1,83,0,35,0,116,6,0,0,0,0,0,0,0, - 0,36,0,114,5,1,0,100,1,125,1,89,0,140,100,119, - 0,120,3,89,0,119,1,35,0,116,0,0,0,0,0,0, - 0,0,0,106,19,0,0,0,0,0,0,0,0,0,0,0, + 0,121,0,114,2,0,0,0,41,4,218,16,95,103,101,116, + 95,109,111,100,117,108,101,95,108,111,99,107,114,144,0,0, + 0,114,145,0,0,0,114,120,0,0,0,114,66,0,0,0, + 115,1,0,0,0,32,114,7,0,0,0,114,87,0,0,0, + 122,28,95,77,111,100,117,108,101,76,111,99,107,77,97,110, + 97,103,101,114,46,95,95,101,110,116,101,114,95,95,160,1, + 0,0,115,34,0,0,0,128,0,220,21,37,160,100,167,106, + 161,106,211,21,49,136,4,140,10,216,8,12,143,10,137,10, + 215,8,26,209,8,26,213,8,28,114,22,0,0,0,99,1, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,15, + 0,0,0,243,56,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,171,0,0,0,0,0,0,0,1,0,121,0, + 114,2,0,0,0,41,2,114,145,0,0,0,114,121,0,0, + 0,114,89,0,0,0,115,3,0,0,0,32,32,32,114,7, + 0,0,0,114,92,0,0,0,122,27,95,77,111,100,117,108, + 101,76,111,99,107,77,97,110,97,103,101,114,46,95,95,101, + 120,105,116,95,95,164,1,0,0,115,18,0,0,0,128,0, + 216,8,12,143,10,137,10,215,8,26,209,8,26,213,8,28, + 114,22,0,0,0,78,41,6,114,11,0,0,0,114,10,0, + 0,0,114,3,0,0,0,114,47,0,0,0,114,87,0,0, + 0,114,92,0,0,0,114,31,0,0,0,114,22,0,0,0, + 114,7,0,0,0,114,142,0,0,0,114,142,0,0,0,154, + 1,0,0,115,17,0,0,0,132,0,242,4,2,5,26,242, + 8,2,5,29,243,8,1,5,29,114,22,0,0,0,114,142, + 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,74,1,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,171,0,0, + 0,0,0,0,0,1,0,9,0,9,0,116,5,0,0,0, + 0,0,0,0,0,124,0,25,0,0,0,171,0,0,0,0, + 0,0,0,125,1,124,1,128,63,116,8,0,0,0,0,0, + 0,0,0,128,12,116,11,0,0,0,0,0,0,0,0,124, + 0,171,1,0,0,0,0,0,0,125,1,110,11,116,13,0, + 0,0,0,0,0,0,0,124,0,171,1,0,0,0,0,0, + 0,125,1,124,0,102,1,100,2,132,1,125,2,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,1,124,2,171, + 2,0,0,0,0,0,0,116,4,0,0,0,0,0,0,0, + 0,124,0,60,0,0,0,116,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,171,0,0,0,0,0,0,0,1,0,124, + 1,83,0,35,0,116,6,0,0,0,0,0,0,0,0,36, + 0,114,5,1,0,100,1,125,1,89,0,140,100,119,0,120, + 3,89,0,119,1,35,0,116,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,171,0,0,0,0,0,0,0,1,0,119, + 0,120,3,89,0,119,1,41,3,122,139,71,101,116,32,111, + 114,32,99,114,101,97,116,101,32,116,104,101,32,109,111,100, + 117,108,101,32,108,111,99,107,32,102,111,114,32,97,32,103, + 105,118,101,110,32,109,111,100,117,108,101,32,110,97,109,101, + 46,10,10,32,32,32,32,65,99,113,117,105,114,101,47,114, + 101,108,101,97,115,101,32,105,110,116,101,114,110,97,108,108, + 121,32,116,104,101,32,103,108,111,98,97,108,32,105,109,112, + 111,114,116,32,108,111,99,107,32,116,111,32,112,114,111,116, + 101,99,116,10,32,32,32,32,95,109,111,100,117,108,101,95, + 108,111,99,107,115,46,78,99,2,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,19,0,0,0,243,196,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,171,0,0,0,0,0,0,0,1,0,9,0,116,4,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,1,171,1,0, + 0,0,0,0,0,124,0,117,0,114,7,116,4,0,0,0, + 0,0,0,0,0,124,1,61,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,171,0,0,0,0,0,0,0,1, - 0,119,0,120,3,89,0,119,1,41,3,122,139,71,101,116, - 32,111,114,32,99,114,101,97,116,101,32,116,104,101,32,109, - 111,100,117,108,101,32,108,111,99,107,32,102,111,114,32,97, - 32,103,105,118,101,110,32,109,111,100,117,108,101,32,110,97, - 109,101,46,10,10,32,32,32,32,65,99,113,117,105,114,101, - 47,114,101,108,101,97,115,101,32,105,110,116,101,114,110,97, - 108,108,121,32,116,104,101,32,103,108,111,98,97,108,32,105, - 109,112,111,114,116,32,108,111,99,107,32,116,111,32,112,114, - 111,116,101,99,116,10,32,32,32,32,95,109,111,100,117,108, - 101,95,108,111,99,107,115,46,78,99,2,0,0,0,0,0, - 0,0,0,0,0,0,4,0,0,0,19,0,0,0,243,196, + 0,121,0,35,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,171,0,0,0,0,0,0,0,1,0,119,0,120, + 3,89,0,119,1,114,2,0,0,0,41,5,218,4,95,105, + 109,112,218,12,97,99,113,117,105,114,101,95,108,111,99,107, + 218,13,95,109,111,100,117,108,101,95,108,111,99,107,115,114, + 76,0,0,0,218,12,114,101,108,101,97,115,101,95,108,111, + 99,107,41,2,114,61,0,0,0,114,26,0,0,0,115,2, + 0,0,0,32,32,114,7,0,0,0,218,2,99,98,122,28, + 95,103,101,116,95,109,111,100,117,108,101,95,108,111,99,107, + 46,60,108,111,99,97,108,115,62,46,99,98,189,1,0,0, + 115,73,0,0,0,128,0,220,16,20,215,16,33,209,16,33, + 212,16,35,240,2,7,17,40,244,8,0,24,37,215,23,40, + 209,23,40,168,20,211,23,46,176,35,209,23,53,220,28,41, + 168,36,208,28,47,228,20,24,215,20,37,209,20,37,213,20, + 39,248,148,68,215,20,37,209,20,37,213,20,39,250,115,11, + 0,0,0,150,30,65,9,0,193,9,22,65,31,3,41,10, + 114,151,0,0,0,114,152,0,0,0,114,153,0,0,0,114, + 73,0,0,0,114,109,0,0,0,114,134,0,0,0,114,107, + 0,0,0,114,52,0,0,0,114,61,0,0,0,114,154,0, + 0,0,41,3,114,26,0,0,0,114,83,0,0,0,114,155, + 0,0,0,115,3,0,0,0,32,32,32,114,7,0,0,0, + 114,147,0,0,0,114,147,0,0,0,170,1,0,0,115,156, + 0,0,0,128,0,244,12,0,5,9,215,4,21,209,4,21, + 212,4,23,240,2,25,5,28,240,2,3,9,24,220,19,32, + 160,20,209,19,38,211,19,40,136,68,240,8,0,12,16,136, + 60,220,15,22,136,127,220,23,39,168,4,211,23,45,145,4, + 228,23,34,160,52,211,23,40,144,4,224,29,33,243,0,9, + 13,40,244,22,0,35,43,167,44,161,44,168,116,176,82,211, + 34,56,140,77,152,36,209,12,31,228,8,12,215,8,25,209, + 8,25,212,8,27,224,11,15,128,75,248,244,49,0,16,24, + 242,0,1,9,24,216,19,23,138,68,240,3,1,9,24,251, + 244,44,0,9,13,215,8,25,209,8,25,213,8,27,250,115, + 41,0,0,0,151,13,65,59,0,164,65,1,66,12,0,193, + 59,11,66,9,3,194,6,2,66,12,0,194,8,1,66,9, + 3,194,9,3,66,12,0,194,12,22,66,34,3,99,1,0, + 0,0,0,0,0,0,0,0,0,0,4,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,9, + 0,124,1,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,1, + 0,124,1,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,1, + 0,121,1,35,0,116,6,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,189,65,99,113,117,105,114,101,115,32,116,104, + 101,110,32,114,101,108,101,97,115,101,115,32,116,104,101,32, + 109,111,100,117,108,101,32,108,111,99,107,32,102,111,114,32, + 97,32,103,105,118,101,110,32,109,111,100,117,108,101,32,110, + 97,109,101,46,10,10,32,32,32,32,84,104,105,115,32,105, + 115,32,117,115,101,100,32,116,111,32,101,110,115,117,114,101, + 32,97,32,109,111,100,117,108,101,32,105,115,32,99,111,109, + 112,108,101,116,101,108,121,32,105,110,105,116,105,97,108,105, + 122,101,100,44,32,105,110,32,116,104,101,10,32,32,32,32, + 101,118,101,110,116,32,105,116,32,105,115,32,98,101,105,110, + 103,32,105,109,112,111,114,116,101,100,32,98,121,32,97,110, + 111,116,104,101,114,32,116,104,114,101,97,100,46,10,32,32, + 32,32,78,41,4,114,147,0,0,0,114,120,0,0,0,114, + 121,0,0,0,114,94,0,0,0,41,2,114,26,0,0,0, + 114,83,0,0,0,115,2,0,0,0,32,32,114,7,0,0, + 0,218,19,95,108,111,99,107,95,117,110,108,111,99,107,95, + 109,111,100,117,108,101,114,157,0,0,0,207,1,0,0,115, + 61,0,0,0,128,0,244,12,0,12,28,152,68,211,11,33, + 128,68,240,2,7,5,23,216,8,12,143,12,137,12,140,14, + 240,12,0,9,13,143,12,137,12,141,14,248,244,11,0,12, + 26,242,0,3,5,13,241,6,0,9,13,240,7,3,5,13, + 250,115,12,0,0,0,141,16,46,0,174,9,58,3,185,1, + 58,3,99,1,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,15,0,0,0,243,18,0,0,0,151,0,2,0, + 124,0,124,1,105,0,124,2,164,1,142,1,83,0,41,1, + 97,46,1,0,0,114,101,109,111,118,101,95,105,109,112,111, + 114,116,108,105,98,95,102,114,97,109,101,115,32,105,110,32, + 105,109,112,111,114,116,46,99,32,119,105,108,108,32,97,108, + 119,97,121,115,32,114,101,109,111,118,101,32,115,101,113,117, + 101,110,99,101,115,10,32,32,32,32,111,102,32,105,109,112, + 111,114,116,108,105,98,32,102,114,97,109,101,115,32,116,104, + 97,116,32,101,110,100,32,119,105,116,104,32,97,32,99,97, + 108,108,32,116,111,32,116,104,105,115,32,102,117,110,99,116, + 105,111,110,10,10,32,32,32,32,85,115,101,32,105,116,32, + 105,110,115,116,101,97,100,32,111,102,32,97,32,110,111,114, + 109,97,108,32,99,97,108,108,32,105,110,32,112,108,97,99, + 101,115,32,119,104,101,114,101,32,105,110,99,108,117,100,105, + 110,103,32,116,104,101,32,105,109,112,111,114,116,108,105,98, + 10,32,32,32,32,102,114,97,109,101,115,32,105,110,116,114, + 111,100,117,99,101,115,32,117,110,119,97,110,116,101,100,32, + 110,111,105,115,101,32,105,110,116,111,32,116,104,101,32,116, + 114,97,99,101,98,97,99,107,32,40,101,46,103,46,32,119, + 104,101,110,32,101,120,101,99,117,116,105,110,103,10,32,32, + 32,32,109,111,100,117,108,101,32,99,111,100,101,41,10,32, + 32,32,32,114,31,0,0,0,41,3,218,1,102,114,90,0, + 0,0,218,4,107,119,100,115,115,3,0,0,0,32,32,32, + 114,7,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, + 114,161,0,0,0,224,1,0,0,115,20,0,0,0,128,0, + 241,16,0,12,13,136,100,208,11,27,144,100,209,11,27,208, + 4,27,114,22,0,0,0,114,138,0,0,0,41,1,218,9, + 118,101,114,98,111,115,105,116,121,99,1,0,0,0,0,0, + 0,0,1,0,0,0,5,0,0,0,7,0,0,0,243,188, 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,171,0,0,0,0,0,0,0,1,0,9,0,116, - 4,0,0,0,0,0,0,0,0,106,7,0,0,0,0,0, + 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,124,1,107,92,0,0,114,63,124, + 0,106,7,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, + 5,100,2,124,0,122,0,0,0,125,0,116,9,0,0,0, + 0,0,0,0,0,2,0,124,0,106,10,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,2,142, + 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,172, + 3,171,2,0,0,0,0,0,0,1,0,121,4,121,4,41, + 5,122,61,80,114,105,110,116,32,116,104,101,32,109,101,115, + 115,97,103,101,32,116,111,32,115,116,100,101,114,114,32,105, + 102,32,45,118,47,80,89,84,72,79,78,86,69,82,66,79, + 83,69,32,105,115,32,116,117,114,110,101,100,32,111,110,46, + 41,2,218,1,35,122,7,105,109,112,111,114,116,32,122,2, + 35,32,41,1,218,4,102,105,108,101,78,41,7,114,24,0, + 0,0,218,5,102,108,97,103,115,218,7,118,101,114,98,111, + 115,101,218,10,115,116,97,114,116,115,119,105,116,104,218,5, + 112,114,105,110,116,218,6,102,111,114,109,97,116,218,6,115, + 116,100,101,114,114,41,3,218,7,109,101,115,115,97,103,101, + 114,162,0,0,0,114,90,0,0,0,115,3,0,0,0,32, + 32,32,114,7,0,0,0,218,16,95,118,101,114,98,111,115, + 101,95,109,101,115,115,97,103,101,114,173,0,0,0,235,1, + 0,0,115,74,0,0,0,128,0,228,7,10,135,121,129,121, + 215,7,24,209,7,24,152,73,210,7,37,216,15,22,215,15, + 33,209,15,33,208,34,50,212,15,51,216,22,26,152,87,145, + 110,136,71,220,8,13,136,110,136,103,143,110,137,110,152,100, + 208,14,35,172,35,175,42,169,42,214,8,53,240,7,0,8, + 38,114,22,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,42,0,0,0, + 135,0,151,0,136,0,102,1,100,1,132,8,125,1,116,1, + 0,0,0,0,0,0,0,0,124,1,137,0,171,2,0,0, + 0,0,0,0,1,0,124,1,83,0,41,2,122,49,68,101, + 99,111,114,97,116,111,114,32,116,111,32,118,101,114,105,102, + 121,32,116,104,101,32,110,97,109,101,100,32,109,111,100,117, + 108,101,32,105,115,32,98,117,105,108,116,45,105,110,46,99, + 2,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, + 19,0,0,0,243,90,0,0,0,149,1,151,0,124,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,118,1,114, + 16,116,5,0,0,0,0,0,0,0,0,124,1,155,2,100, + 1,157,2,124,1,172,2,171,2,0,0,0,0,0,0,130, + 1,2,0,137,2,124,0,124,1,171,2,0,0,0,0,0, + 0,83,0,41,3,78,250,25,32,105,115,32,110,111,116,32, + 97,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, + 101,114,25,0,0,0,41,3,114,24,0,0,0,218,20,98, + 117,105,108,116,105,110,95,109,111,100,117,108,101,95,110,97, + 109,101,115,218,11,73,109,112,111,114,116,69,114,114,111,114, + 169,3,114,44,0,0,0,218,8,102,117,108,108,110,97,109, + 101,218,3,102,120,110,115,3,0,0,0,32,32,128,114,7, + 0,0,0,218,25,95,114,101,113,117,105,114,101,115,95,98, + 117,105,108,116,105,110,95,119,114,97,112,112,101,114,122,52, + 95,114,101,113,117,105,114,101,115,95,98,117,105,108,116,105, + 110,46,60,108,111,99,97,108,115,62,46,95,114,101,113,117, + 105,114,101,115,95,98,117,105,108,116,105,110,95,119,114,97, + 112,112,101,114,245,1,0,0,115,56,0,0,0,248,128,0, + 216,11,19,156,51,215,27,51,209,27,51,209,11,51,220,18, + 29,160,24,160,12,208,44,69,208,30,70,216,35,43,244,3, + 1,19,45,240,0,1,13,45,225,15,18,144,52,152,24,211, + 15,34,208,8,34,114,22,0,0,0,169,1,114,21,0,0, + 0,41,2,114,181,0,0,0,114,182,0,0,0,115,2,0, + 0,0,96,32,114,7,0,0,0,218,17,95,114,101,113,117, + 105,114,101,115,95,98,117,105,108,116,105,110,114,184,0,0, + 0,243,1,0,0,115,27,0,0,0,248,128,0,244,4,4, + 5,35,244,10,0,5,10,208,10,35,160,83,212,4,41,216, + 11,36,208,4,36,114,22,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, + 42,0,0,0,135,0,151,0,136,0,102,1,100,1,132,8, + 125,1,116,1,0,0,0,0,0,0,0,0,124,1,137,0, + 171,2,0,0,0,0,0,0,1,0,124,1,83,0,41,2, + 122,47,68,101,99,111,114,97,116,111,114,32,116,111,32,118, + 101,114,105,102,121,32,116,104,101,32,110,97,109,101,100,32, + 109,111,100,117,108,101,32,105,115,32,102,114,111,122,101,110, + 46,99,2,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,19,0,0,0,243,96,0,0,0,149,1,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,1,171, - 1,0,0,0,0,0,0,124,0,117,0,114,7,116,4,0, - 0,0,0,0,0,0,0,124,1,61,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,171,0,0,0,0,0,0, - 0,1,0,121,0,35,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,171,0,0,0,0,0,0,0,1,0,119, - 0,120,3,89,0,119,1,114,2,0,0,0,41,5,218,4, - 95,105,109,112,218,12,97,99,113,117,105,114,101,95,108,111, - 99,107,218,13,95,109,111,100,117,108,101,95,108,111,99,107, - 115,114,76,0,0,0,218,12,114,101,108,101,97,115,101,95, - 108,111,99,107,41,2,114,61,0,0,0,114,26,0,0,0, - 115,2,0,0,0,32,32,114,7,0,0,0,218,2,99,98, - 122,28,95,103,101,116,95,109,111,100,117,108,101,95,108,111, - 99,107,46,60,108,111,99,97,108,115,62,46,99,98,189,1, - 0,0,115,73,0,0,0,128,0,220,16,20,215,16,33,209, - 16,33,212,16,35,240,2,7,17,40,244,8,0,24,37,215, - 23,40,209,23,40,168,20,211,23,46,176,35,209,23,53,220, - 28,41,168,36,208,28,47,228,20,24,215,20,37,209,20,37, - 213,20,39,248,148,68,215,20,37,209,20,37,213,20,39,250, - 115,11,0,0,0,150,30,65,9,0,193,9,22,65,31,3, - 41,10,114,151,0,0,0,114,152,0,0,0,114,153,0,0, - 0,114,73,0,0,0,114,109,0,0,0,114,134,0,0,0, - 114,107,0,0,0,114,52,0,0,0,114,61,0,0,0,114, - 154,0,0,0,41,3,114,26,0,0,0,114,83,0,0,0, - 114,155,0,0,0,115,3,0,0,0,32,32,32,114,7,0, - 0,0,114,147,0,0,0,114,147,0,0,0,170,1,0,0, - 115,156,0,0,0,128,0,244,12,0,5,9,215,4,21,209, - 4,21,212,4,23,240,2,25,5,28,240,2,3,9,24,220, - 19,32,160,20,209,19,38,211,19,40,136,68,240,8,0,12, - 16,136,60,220,15,22,136,127,220,23,39,168,4,211,23,45, - 145,4,228,23,34,160,52,211,23,40,144,4,224,29,33,243, - 0,9,13,40,244,22,0,35,43,167,44,161,44,168,116,176, - 82,211,34,56,140,77,152,36,209,12,31,228,8,12,215,8, - 25,209,8,25,212,8,27,224,11,15,128,75,248,244,49,0, - 16,24,242,0,1,9,24,216,19,23,138,68,240,3,1,9, - 24,251,244,44,0,9,13,215,8,25,209,8,25,213,8,27, - 250,115,41,0,0,0,151,13,65,59,0,164,65,1,66,12, - 0,193,59,11,66,9,3,194,6,2,66,12,0,194,8,1, - 66,9,3,194,9,3,66,12,0,194,12,22,66,34,3,99, - 1,0,0,0,0,0,0,0,0,0,0,0,4,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,9,0,124,1,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,1,0,124,1,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,1,0,121,1,35,0,116,6,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,189,65,99,113,117,105,114,101,115,32, - 116,104,101,110,32,114,101,108,101,97,115,101,115,32,116,104, - 101,32,109,111,100,117,108,101,32,108,111,99,107,32,102,111, - 114,32,97,32,103,105,118,101,110,32,109,111,100,117,108,101, - 32,110,97,109,101,46,10,10,32,32,32,32,84,104,105,115, - 32,105,115,32,117,115,101,100,32,116,111,32,101,110,115,117, - 114,101,32,97,32,109,111,100,117,108,101,32,105,115,32,99, - 111,109,112,108,101,116,101,108,121,32,105,110,105,116,105,97, - 108,105,122,101,100,44,32,105,110,32,116,104,101,10,32,32, - 32,32,101,118,101,110,116,32,105,116,32,105,115,32,98,101, - 105,110,103,32,105,109,112,111,114,116,101,100,32,98,121,32, - 97,110,111,116,104,101,114,32,116,104,114,101,97,100,46,10, - 32,32,32,32,78,41,4,114,147,0,0,0,114,120,0,0, - 0,114,121,0,0,0,114,94,0,0,0,41,2,114,26,0, - 0,0,114,83,0,0,0,115,2,0,0,0,32,32,114,7, - 0,0,0,218,19,95,108,111,99,107,95,117,110,108,111,99, - 107,95,109,111,100,117,108,101,114,157,0,0,0,207,1,0, - 0,115,61,0,0,0,128,0,244,12,0,12,28,152,68,211, - 11,33,128,68,240,2,7,5,23,216,8,12,143,12,137,12, - 140,14,240,12,0,9,13,143,12,137,12,141,14,248,244,11, - 0,12,26,242,0,3,5,13,241,6,0,9,13,240,7,3, - 5,13,250,115,12,0,0,0,141,16,46,0,174,9,58,3, - 185,1,58,3,99,1,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,15,0,0,0,243,18,0,0,0,151,0, - 2,0,124,0,124,1,105,0,124,2,164,1,142,1,83,0, - 41,1,97,46,1,0,0,114,101,109,111,118,101,95,105,109, - 112,111,114,116,108,105,98,95,102,114,97,109,101,115,32,105, - 110,32,105,109,112,111,114,116,46,99,32,119,105,108,108,32, - 97,108,119,97,121,115,32,114,101,109,111,118,101,32,115,101, - 113,117,101,110,99,101,115,10,32,32,32,32,111,102,32,105, - 109,112,111,114,116,108,105,98,32,102,114,97,109,101,115,32, - 116,104,97,116,32,101,110,100,32,119,105,116,104,32,97,32, - 99,97,108,108,32,116,111,32,116,104,105,115,32,102,117,110, - 99,116,105,111,110,10,10,32,32,32,32,85,115,101,32,105, - 116,32,105,110,115,116,101,97,100,32,111,102,32,97,32,110, - 111,114,109,97,108,32,99,97,108,108,32,105,110,32,112,108, - 97,99,101,115,32,119,104,101,114,101,32,105,110,99,108,117, - 100,105,110,103,32,116,104,101,32,105,109,112,111,114,116,108, - 105,98,10,32,32,32,32,102,114,97,109,101,115,32,105,110, - 116,114,111,100,117,99,101,115,32,117,110,119,97,110,116,101, - 100,32,110,111,105,115,101,32,105,110,116,111,32,116,104,101, - 32,116,114,97,99,101,98,97,99,107,32,40,101,46,103,46, - 32,119,104,101,110,32,101,120,101,99,117,116,105,110,103,10, - 32,32,32,32,109,111,100,117,108,101,32,99,111,100,101,41, - 10,32,32,32,32,114,31,0,0,0,41,3,218,1,102,114, - 90,0,0,0,218,4,107,119,100,115,115,3,0,0,0,32, - 32,32,114,7,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,114,161,0,0,0,224,1,0,0,115,20,0,0,0, - 128,0,241,16,0,12,13,136,100,208,11,27,144,100,209,11, - 27,208,4,27,114,22,0,0,0,114,138,0,0,0,41,1, - 218,9,118,101,114,98,111,115,105,116,121,99,1,0,0,0, - 0,0,0,0,1,0,0,0,5,0,0,0,7,0,0,0, - 243,188,0,0,0,151,0,116,0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,115,16,116,5,0,0,0,0,0, + 0,0,0,124,1,155,2,100,1,157,2,124,1,172,2,171, + 2,0,0,0,0,0,0,130,1,2,0,137,2,124,0,124, + 1,171,2,0,0,0,0,0,0,83,0,41,3,78,122,23, + 32,105,115,32,110,111,116,32,97,32,102,114,111,122,101,110, + 32,109,111,100,117,108,101,114,25,0,0,0,41,3,114,151, + 0,0,0,218,9,105,115,95,102,114,111,122,101,110,114,178, + 0,0,0,114,179,0,0,0,115,3,0,0,0,32,32,128, + 114,7,0,0,0,218,24,95,114,101,113,117,105,114,101,115, + 95,102,114,111,122,101,110,95,119,114,97,112,112,101,114,122, + 50,95,114,101,113,117,105,114,101,115,95,102,114,111,122,101, + 110,46,60,108,111,99,97,108,115,62,46,95,114,101,113,117, + 105,114,101,115,95,102,114,111,122,101,110,95,119,114,97,112, + 112,101,114,0,2,0,0,115,54,0,0,0,248,128,0,220, + 15,19,143,126,137,126,152,104,212,15,39,220,18,29,160,24, + 160,12,208,44,67,208,30,68,216,35,43,244,3,1,19,45, + 240,0,1,13,45,225,15,18,144,52,152,24,211,15,34,208, + 8,34,114,22,0,0,0,114,183,0,0,0,41,2,114,181, + 0,0,0,114,188,0,0,0,115,2,0,0,0,96,32,114, + 7,0,0,0,218,16,95,114,101,113,117,105,114,101,115,95, + 102,114,111,122,101,110,114,189,0,0,0,254,1,0,0,115, + 27,0,0,0,248,128,0,244,4,4,5,35,244,10,0,5, + 10,208,10,34,160,67,212,4,40,216,11,35,208,4,35,114, + 22,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,240,0,0,0,151,0, + 100,1,125,2,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,2,116,4,0,0,0,0,0,0,0,0,171,2, + 0,0,0,0,0,0,1,0,116,7,0,0,0,0,0,0, + 0,0,124,1,124,0,171,2,0,0,0,0,0,0,125,3, + 124,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, + 118,0,114,50,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,124,1,25,0,0,0,125,4,116,13,0,0,0,0, + 0,0,0,0,124,3,124,4,171,2,0,0,0,0,0,0, + 1,0,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, + 124,1,25,0,0,0,83,0,116,15,0,0,0,0,0,0, + 0,0,124,3,171,1,0,0,0,0,0,0,83,0,41,2, + 122,130,76,111,97,100,32,116,104,101,32,115,112,101,99,105, + 102,105,101,100,32,109,111,100,117,108,101,32,105,110,116,111, + 32,115,121,115,46,109,111,100,117,108,101,115,32,97,110,100, + 32,114,101,116,117,114,110,32,105,116,46,10,10,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,108,111,97,100,101,114,46,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,122,103,116,104,101,32,108,111,97,100,95,109, + 111,100,117,108,101,40,41,32,109,101,116,104,111,100,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,32,97,110,100, + 32,115,108,97,116,101,100,32,102,111,114,32,114,101,109,111, + 118,97,108,32,105,110,32,80,121,116,104,111,110,32,51,46, + 49,50,59,32,117,115,101,32,101,120,101,99,95,109,111,100, + 117,108,101,40,41,32,105,110,115,116,101,97,100,41,8,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,16,115,112,101,99,95,102,114,111,109,95, + 108,111,97,100,101,114,114,24,0,0,0,218,7,109,111,100, + 117,108,101,115,218,5,95,101,120,101,99,218,5,95,108,111, + 97,100,41,5,114,44,0,0,0,114,180,0,0,0,218,3, + 109,115,103,218,4,115,112,101,99,218,6,109,111,100,117,108, + 101,115,5,0,0,0,32,32,32,32,32,114,7,0,0,0, + 218,17,95,108,111,97,100,95,109,111,100,117,108,101,95,115, + 104,105,109,114,201,0,0,0,10,2,0,0,115,97,0,0, + 0,128,0,240,12,1,12,51,128,67,228,4,13,135,78,129, + 78,144,51,212,24,42,212,4,43,220,11,27,152,72,160,100, + 211,11,43,128,68,216,7,15,148,51,151,59,145,59,209,7, + 30,220,17,20,151,27,145,27,152,88,209,17,38,136,6,220, + 8,13,136,100,144,70,212,8,27,220,15,18,143,123,137,123, + 152,56,209,15,36,208,8,36,228,15,20,144,84,139,123,208, + 8,26,114,22,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,252,0,0, + 0,151,0,116,1,0,0,0,0,0,0,0,0,124,0,100, + 1,100,2,171,3,0,0,0,0,0,0,125,1,116,1,0, + 0,0,0,0,0,0,0,124,0,100,3,100,2,171,3,0, + 0,0,0,0,0,120,1,125,2,114,11,116,3,0,0,0, + 0,0,0,0,0,124,2,171,1,0,0,0,0,0,0,83, + 0,9,0,124,0,106,4,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,125,3,9,0,124,0,106, + 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,125,4,100,5,124,3,155,2,100,6,124,4,155, + 2,100,7,157,5,83,0,35,0,116,6,0,0,0,0,0, + 0,0,0,36,0,114,5,1,0,100,4,125,3,89,0,140, + 35,119,0,120,3,89,0,119,1,35,0,116,6,0,0,0, + 0,0,0,0,0,36,0,114,22,1,0,124,1,128,8,100, + 5,124,3,155,2,100,7,157,3,99,2,89,0,83,0,100, + 5,124,3,155,2,100,8,124,1,155,2,100,9,157,5,99, + 2,89,0,83,0,119,0,120,3,89,0,119,1,41,10,122, + 44,84,104,101,32,105,109,112,108,101,109,101,110,116,97,116, + 105,111,110,32,111,102,32,77,111,100,117,108,101,84,121,112, + 101,46,95,95,114,101,112,114,95,95,40,41,46,218,10,95, + 95,108,111,97,100,101,114,95,95,78,218,8,95,95,115,112, + 101,99,95,95,218,1,63,250,8,60,109,111,100,117,108,101, + 32,250,6,32,102,114,111,109,32,218,1,62,250,2,32,40, + 250,2,41,62,41,5,114,15,0,0,0,218,22,95,109,111, + 100,117,108,101,95,114,101,112,114,95,102,114,111,109,95,115, + 112,101,99,114,11,0,0,0,114,4,0,0,0,218,8,95, + 95,102,105,108,101,95,95,41,5,114,200,0,0,0,218,6, + 108,111,97,100,101,114,114,199,0,0,0,114,26,0,0,0, + 218,8,102,105,108,101,110,97,109,101,115,5,0,0,0,32, + 32,32,32,32,114,7,0,0,0,218,12,95,109,111,100,117, + 108,101,95,114,101,112,114,114,215,0,0,0,29,2,0,0, + 115,177,0,0,0,128,0,228,13,20,144,86,152,92,168,52, + 211,13,48,128,70,220,15,22,144,118,152,122,168,52,211,15, + 48,208,7,48,128,116,208,7,48,220,15,37,160,100,211,15, + 43,208,8,43,240,4,3,5,19,216,15,21,143,127,137,127, + 136,4,240,6,8,5,54,216,19,25,151,63,145,63,136,8, + 240,14,0,18,26,152,36,152,24,160,22,168,8,160,124,176, + 49,208,15,53,208,8,53,248,244,21,0,12,26,242,0,1, + 5,19,216,15,18,138,4,240,3,1,5,19,251,244,8,0, + 12,26,242,0,4,5,53,216,11,17,136,62,216,21,29,152, + 100,152,88,160,81,208,19,39,210,12,39,224,21,29,152,100, + 152,88,160,82,168,6,160,122,176,18,208,19,52,210,12,52, + 240,9,4,5,53,250,115,40,0,0,0,169,12,65,11,0, + 182,12,65,28,0,193,11,11,65,25,3,193,24,1,65,25, + 3,193,28,17,65,59,3,193,47,9,65,59,3,193,58,1, + 65,59,3,99,0,0,0,0,0,0,0,0,0,0,0,0, + 4,0,0,0,0,0,0,0,243,164,0,0,0,151,0,101, + 0,90,1,100,0,90,2,100,1,90,3,100,2,100,2,100, + 2,100,3,156,3,100,4,132,2,90,4,100,5,132,0,90, + 5,100,6,132,0,90,6,101,7,100,7,132,0,171,0,0, + 0,0,0,0,0,90,8,101,8,106,18,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,100,8,132, + 0,171,0,0,0,0,0,0,0,90,8,101,7,100,9,132, + 0,171,0,0,0,0,0,0,0,90,10,101,7,100,10,132, + 0,171,0,0,0,0,0,0,0,90,11,101,11,106,18,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,100,11,132,0,171,0,0,0,0,0,0,0,90,11,121, + 2,41,12,218,10,77,111,100,117,108,101,83,112,101,99,97, + 208,5,0,0,84,104,101,32,115,112,101,99,105,102,105,99, + 97,116,105,111,110,32,102,111,114,32,97,32,109,111,100,117, + 108,101,44,32,117,115,101,100,32,102,111,114,32,108,111,97, + 100,105,110,103,46,10,10,32,32,32,32,65,32,109,111,100, + 117,108,101,39,115,32,115,112,101,99,32,105,115,32,116,104, + 101,32,115,111,117,114,99,101,32,102,111,114,32,105,110,102, + 111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116, + 104,101,32,109,111,100,117,108,101,46,32,32,70,111,114,10, + 32,32,32,32,100,97,116,97,32,97,115,115,111,99,105,97, + 116,101,100,32,119,105,116,104,32,116,104,101,32,109,111,100, + 117,108,101,44,32,105,110,99,108,117,100,105,110,103,32,115, + 111,117,114,99,101,44,32,117,115,101,32,116,104,101,32,115, + 112,101,99,39,115,10,32,32,32,32,108,111,97,100,101,114, + 46,10,10,32,32,32,32,96,110,97,109,101,96,32,105,115, + 32,116,104,101,32,97,98,115,111,108,117,116,101,32,110,97, + 109,101,32,111,102,32,116,104,101,32,109,111,100,117,108,101, + 46,32,32,96,108,111,97,100,101,114,96,32,105,115,32,116, + 104,101,32,108,111,97,100,101,114,10,32,32,32,32,116,111, + 32,117,115,101,32,119,104,101,110,32,108,111,97,100,105,110, + 103,32,116,104,101,32,109,111,100,117,108,101,46,32,32,96, + 112,97,114,101,110,116,96,32,105,115,32,116,104,101,32,110, + 97,109,101,32,111,102,32,116,104,101,10,32,32,32,32,112, + 97,99,107,97,103,101,32,116,104,101,32,109,111,100,117,108, + 101,32,105,115,32,105,110,46,32,32,84,104,101,32,112,97, + 114,101,110,116,32,105,115,32,100,101,114,105,118,101,100,32, + 102,114,111,109,32,116,104,101,32,110,97,109,101,46,10,10, + 32,32,32,32,96,105,115,95,112,97,99,107,97,103,101,96, + 32,100,101,116,101,114,109,105,110,101,115,32,105,102,32,116, + 104,101,32,109,111,100,117,108,101,32,105,115,32,99,111,110, + 115,105,100,101,114,101,100,32,97,32,112,97,99,107,97,103, + 101,32,111,114,10,32,32,32,32,110,111,116,46,32,32,79, + 110,32,109,111,100,117,108,101,115,32,116,104,105,115,32,105, + 115,32,114,101,102,108,101,99,116,101,100,32,98,121,32,116, + 104,101,32,96,95,95,112,97,116,104,95,95,96,32,97,116, + 116,114,105,98,117,116,101,46,10,10,32,32,32,32,96,111, + 114,105,103,105,110,96,32,105,115,32,116,104,101,32,115,112, + 101,99,105,102,105,99,32,108,111,99,97,116,105,111,110,32, + 117,115,101,100,32,98,121,32,116,104,101,32,108,111,97,100, + 101,114,32,102,114,111,109,32,119,104,105,99,104,32,116,111, + 10,32,32,32,32,108,111,97,100,32,116,104,101,32,109,111, + 100,117,108,101,44,32,105,102,32,116,104,97,116,32,105,110, + 102,111,114,109,97,116,105,111,110,32,105,115,32,97,118,97, + 105,108,97,98,108,101,46,32,32,87,104,101,110,32,102,105, + 108,101,110,97,109,101,32,105,115,10,32,32,32,32,115,101, + 116,44,32,111,114,105,103,105,110,32,119,105,108,108,32,109, + 97,116,99,104,46,10,10,32,32,32,32,96,104,97,115,95, + 108,111,99,97,116,105,111,110,96,32,105,110,100,105,99,97, + 116,101,115,32,116,104,97,116,32,97,32,115,112,101,99,39, + 115,32,34,111,114,105,103,105,110,34,32,114,101,102,108,101, + 99,116,115,32,97,32,108,111,99,97,116,105,111,110,46,10, + 32,32,32,32,87,104,101,110,32,116,104,105,115,32,105,115, + 32,84,114,117,101,44,32,96,95,95,102,105,108,101,95,95, + 96,32,97,116,116,114,105,98,117,116,101,32,111,102,32,116, + 104,101,32,109,111,100,117,108,101,32,105,115,32,115,101,116, + 46,10,10,32,32,32,32,96,99,97,99,104,101,100,96,32, + 105,115,32,116,104,101,32,108,111,99,97,116,105,111,110,32, + 111,102,32,116,104,101,32,99,97,99,104,101,100,32,98,121, + 116,101,99,111,100,101,32,102,105,108,101,44,32,105,102,32, + 97,110,121,46,32,32,73,116,10,32,32,32,32,99,111,114, + 114,101,115,112,111,110,100,115,32,116,111,32,116,104,101,32, + 96,95,95,99,97,99,104,101,100,95,95,96,32,97,116,116, + 114,105,98,117,116,101,46,10,10,32,32,32,32,96,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,96,32,105,115,32,116,104,101, + 32,115,101,113,117,101,110,99,101,32,111,102,32,112,97,116, + 104,32,101,110,116,114,105,101,115,32,116,111,10,32,32,32, + 32,115,101,97,114,99,104,32,119,104,101,110,32,105,109,112, + 111,114,116,105,110,103,32,115,117,98,109,111,100,117,108,101, + 115,46,32,32,73,102,32,115,101,116,44,32,105,115,95,112, + 97,99,107,97,103,101,32,115,104,111,117,108,100,32,98,101, + 10,32,32,32,32,84,114,117,101,45,45,97,110,100,32,70, + 97,108,115,101,32,111,116,104,101,114,119,105,115,101,46,10, + 10,32,32,32,32,80,97,99,107,97,103,101,115,32,97,114, + 101,32,115,105,109,112,108,121,32,109,111,100,117,108,101,115, + 32,116,104,97,116,32,40,109,97,121,41,32,104,97,118,101, + 32,115,117,98,109,111,100,117,108,101,115,46,32,32,73,102, + 32,97,32,115,112,101,99,10,32,32,32,32,104,97,115,32, + 97,32,110,111,110,45,78,111,110,101,32,118,97,108,117,101, + 32,105,110,32,96,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,96, + 44,32,116,104,101,32,105,109,112,111,114,116,10,32,32,32, + 32,115,121,115,116,101,109,32,119,105,108,108,32,99,111,110, + 115,105,100,101,114,32,109,111,100,117,108,101,115,32,108,111, + 97,100,101,100,32,102,114,111,109,32,116,104,101,32,115,112, + 101,99,32,97,115,32,112,97,99,107,97,103,101,115,46,10, + 10,32,32,32,32,79,110,108,121,32,102,105,110,100,101,114, + 115,32,40,115,101,101,32,105,109,112,111,114,116,108,105,98, + 46,97,98,99,46,77,101,116,97,80,97,116,104,70,105,110, + 100,101,114,32,97,110,100,10,32,32,32,32,105,109,112,111, + 114,116,108,105,98,46,97,98,99,46,80,97,116,104,69,110, + 116,114,121,70,105,110,100,101,114,41,32,115,104,111,117,108, + 100,32,109,111,100,105,102,121,32,77,111,100,117,108,101,83, + 112,101,99,32,105,110,115,116,97,110,99,101,115,46,10,10, + 32,32,32,32,78,41,3,218,6,111,114,105,103,105,110,218, + 12,108,111,97,100,101,114,95,115,116,97,116,101,218,10,105, + 115,95,112,97,99,107,97,103,101,99,3,0,0,0,0,0, + 0,0,3,0,0,0,2,0,0,0,3,0,0,0,243,124, + 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,124,3,124,0,95,2,0,0,0,0,0,0,0,0,124, + 4,124,0,95,3,0,0,0,0,0,0,0,0,124,5,114, + 2,103,0,110,1,100,0,124,0,95,4,0,0,0,0,0, + 0,0,0,103,0,124,0,95,5,0,0,0,0,0,0,0, + 0,100,1,124,0,95,6,0,0,0,0,0,0,0,0,100, + 0,124,0,95,7,0,0,0,0,0,0,0,0,121,0,169, + 2,78,70,41,8,114,26,0,0,0,114,213,0,0,0,114, + 218,0,0,0,114,219,0,0,0,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,218,25,95,117,110,105,110,105,116,105,97, + 108,105,122,101,100,95,115,117,98,109,111,100,117,108,101,115, + 218,13,95,115,101,116,95,102,105,108,101,97,116,116,114,218, + 7,95,99,97,99,104,101,100,41,6,114,44,0,0,0,114, + 26,0,0,0,114,213,0,0,0,114,218,0,0,0,114,219, + 0,0,0,114,220,0,0,0,115,6,0,0,0,32,32,32, + 32,32,32,114,7,0,0,0,114,47,0,0,0,122,19,77, + 111,100,117,108,101,83,112,101,99,46,95,95,105,110,105,116, + 95,95,87,2,0,0,115,68,0,0,0,128,0,224,20,24, + 136,4,140,9,216,22,28,136,4,140,11,216,22,28,136,4, + 140,11,216,28,40,136,4,212,8,25,217,48,58,169,34,192, + 4,136,4,212,8,39,216,41,43,136,4,212,8,38,240,6, + 0,30,35,136,4,212,8,26,216,23,27,136,4,141,12,114, + 22,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,60,1,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,157,2,100,2,124,0, + 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,155,2,157,2,103,2,125,1,124,0,106,4, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,129,30,124,1,106,7,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,100,3,124,0,106,4, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,155,2,157,2,171,1,0,0,0,0,0,0,1,0, + 124,0,106,8,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,129,30,124,1,106,7,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,4, + 124,0,106,8,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,155,0,157,2,171,1,0,0,0,0, + 0,0,1,0,124,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,155,0, + 100,5,100,6,106,15,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,155,0,100,7,157,4,83,0,41,8,78,122,5,110, + 97,109,101,61,122,7,108,111,97,100,101,114,61,122,7,111, + 114,105,103,105,110,61,122,27,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,61,218,1,40,122,2,44,32,218,1,41,41,8,114, + 26,0,0,0,114,213,0,0,0,114,218,0,0,0,114,51, + 0,0,0,114,223,0,0,0,114,45,0,0,0,114,11,0, + 0,0,218,4,106,111,105,110,41,2,114,44,0,0,0,114, + 90,0,0,0,115,2,0,0,0,32,32,114,7,0,0,0, + 114,132,0,0,0,122,19,77,111,100,117,108,101,83,112,101, + 99,46,95,95,114,101,112,114,95,95,100,2,0,0,115,145, + 0,0,0,128,0,216,18,23,152,4,159,9,153,9,144,125, + 208,16,37,168,23,176,20,183,27,177,27,176,15,208,39,64, + 208,15,65,136,4,216,11,15,143,59,137,59,208,11,34,216, + 12,16,143,75,137,75,152,39,160,36,167,43,161,43,160,31, + 208,24,49,212,12,50,216,11,15,215,11,42,209,11,42,208, + 11,54,216,12,16,143,75,137,75,208,26,53,176,100,215,54, + 85,209,54,85,208,53,86,208,24,87,212,12,88,216,18,22, + 151,46,145,46,215,18,41,209,18,41,208,17,42,168,33,168, + 68,175,73,169,73,176,100,171,79,208,43,60,184,65,208,15, + 62,208,8,62,114,22,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,114, + 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,125,2,9,0,124, 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,124,1,107,92,0,0,114, - 63,124,0,106,7,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,5,100,2,124,0,122,0,0,0,125,0,116,9,0, - 0,0,0,0,0,0,0,2,0,124,0,106,10,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 2,142,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,172,3,171,2,0,0,0,0,0,0,1,0,121,4,121, - 4,41,5,122,61,80,114,105,110,116,32,116,104,101,32,109, - 101,115,115,97,103,101,32,116,111,32,115,116,100,101,114,114, - 32,105,102,32,45,118,47,80,89,84,72,79,78,86,69,82, - 66,79,83,69,32,105,115,32,116,117,114,110,101,100,32,111, - 110,46,41,2,250,1,35,122,7,105,109,112,111,114,116,32, - 122,2,35,32,41,1,218,4,102,105,108,101,78,41,7,114, - 24,0,0,0,218,5,102,108,97,103,115,218,7,118,101,114, - 98,111,115,101,218,10,115,116,97,114,116,115,119,105,116,104, - 218,5,112,114,105,110,116,218,6,102,111,114,109,97,116,218, - 6,115,116,100,101,114,114,41,3,218,7,109,101,115,115,97, - 103,101,114,162,0,0,0,114,90,0,0,0,115,3,0,0, - 0,32,32,32,114,7,0,0,0,218,16,95,118,101,114,98, - 111,115,101,95,109,101,115,115,97,103,101,114,173,0,0,0, - 235,1,0,0,115,74,0,0,0,128,0,228,7,10,135,121, - 129,121,215,7,24,209,7,24,152,73,210,7,37,216,15,22, - 215,15,33,209,15,33,208,34,50,212,15,51,216,22,26,152, - 87,145,110,136,71,220,8,13,136,110,136,103,143,110,137,110, - 152,100,208,14,35,172,35,175,42,169,42,214,8,53,240,7, - 0,8,38,114,22,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,42,0, - 0,0,135,0,151,0,136,0,102,1,100,1,132,8,125,1, - 116,1,0,0,0,0,0,0,0,0,124,1,137,0,171,2, - 0,0,0,0,0,0,1,0,124,1,83,0,41,2,122,49, - 68,101,99,111,114,97,116,111,114,32,116,111,32,118,101,114, - 105,102,121,32,116,104,101,32,110,97,109,101,100,32,109,111, - 100,117,108,101,32,105,115,32,98,117,105,108,116,45,105,110, - 46,99,2,0,0,0,0,0,0,0,0,0,0,0,4,0, - 0,0,19,0,0,0,243,90,0,0,0,149,1,151,0,124, - 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,118, - 1,114,16,116,5,0,0,0,0,0,0,0,0,124,1,155, - 2,100,1,157,2,124,1,172,2,171,2,0,0,0,0,0, - 0,130,1,2,0,137,2,124,0,124,1,171,2,0,0,0, - 0,0,0,83,0,41,3,78,250,25,32,105,115,32,110,111, - 116,32,97,32,98,117,105,108,116,45,105,110,32,109,111,100, - 117,108,101,114,25,0,0,0,41,3,114,24,0,0,0,218, - 20,98,117,105,108,116,105,110,95,109,111,100,117,108,101,95, - 110,97,109,101,115,218,11,73,109,112,111,114,116,69,114,114, - 111,114,169,3,114,44,0,0,0,218,8,102,117,108,108,110, - 97,109,101,218,3,102,120,110,115,3,0,0,0,32,32,128, - 114,7,0,0,0,218,25,95,114,101,113,117,105,114,101,115, - 95,98,117,105,108,116,105,110,95,119,114,97,112,112,101,114, - 122,52,95,114,101,113,117,105,114,101,115,95,98,117,105,108, - 116,105,110,46,60,108,111,99,97,108,115,62,46,95,114,101, - 113,117,105,114,101,115,95,98,117,105,108,116,105,110,95,119, - 114,97,112,112,101,114,245,1,0,0,115,56,0,0,0,248, - 128,0,216,11,19,156,51,215,27,51,209,27,51,209,11,51, - 220,18,29,160,24,160,12,208,44,69,208,30,70,216,35,43, - 244,3,1,19,45,240,0,1,13,45,225,15,18,144,52,152, - 24,211,15,34,208,8,34,114,22,0,0,0,169,1,114,21, - 0,0,0,41,2,114,181,0,0,0,114,182,0,0,0,115, - 2,0,0,0,96,32,114,7,0,0,0,218,17,95,114,101, - 113,117,105,114,101,115,95,98,117,105,108,116,105,110,114,184, - 0,0,0,243,1,0,0,115,27,0,0,0,248,128,0,244, - 4,4,5,35,244,10,0,5,10,208,10,35,160,83,212,4, - 41,216,11,36,208,4,36,114,22,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,42,0,0,0,135,0,151,0,136,0,102,1,100,1, - 132,8,125,1,116,1,0,0,0,0,0,0,0,0,124,1, - 137,0,171,2,0,0,0,0,0,0,1,0,124,1,83,0, - 41,2,122,47,68,101,99,111,114,97,116,111,114,32,116,111, - 32,118,101,114,105,102,121,32,116,104,101,32,110,97,109,101, - 100,32,109,111,100,117,108,101,32,105,115,32,102,114,111,122, - 101,110,46,99,2,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,19,0,0,0,243,96,0,0,0,149,1,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, - 1,171,1,0,0,0,0,0,0,115,16,116,5,0,0,0, - 0,0,0,0,0,124,1,155,2,100,1,157,2,124,1,172, - 2,171,2,0,0,0,0,0,0,130,1,2,0,137,2,124, - 0,124,1,171,2,0,0,0,0,0,0,83,0,41,3,78, - 122,23,32,105,115,32,110,111,116,32,97,32,102,114,111,122, - 101,110,32,109,111,100,117,108,101,114,25,0,0,0,41,3, - 114,151,0,0,0,218,9,105,115,95,102,114,111,122,101,110, - 114,178,0,0,0,114,179,0,0,0,115,3,0,0,0,32, - 32,128,114,7,0,0,0,218,24,95,114,101,113,117,105,114, - 101,115,95,102,114,111,122,101,110,95,119,114,97,112,112,101, - 114,122,50,95,114,101,113,117,105,114,101,115,95,102,114,111, - 122,101,110,46,60,108,111,99,97,108,115,62,46,95,114,101, - 113,117,105,114,101,115,95,102,114,111,122,101,110,95,119,114, - 97,112,112,101,114,0,2,0,0,115,54,0,0,0,248,128, - 0,220,15,19,143,126,137,126,152,104,212,15,39,220,18,29, - 160,24,160,12,208,44,67,208,30,68,216,35,43,244,3,1, - 19,45,240,0,1,13,45,225,15,18,144,52,152,24,211,15, - 34,208,8,34,114,22,0,0,0,114,183,0,0,0,41,2, - 114,181,0,0,0,114,188,0,0,0,115,2,0,0,0,96, - 32,114,7,0,0,0,218,16,95,114,101,113,117,105,114,101, - 115,95,102,114,111,122,101,110,114,189,0,0,0,254,1,0, - 0,115,27,0,0,0,248,128,0,244,4,4,5,35,244,10, - 0,5,10,208,10,34,160,67,212,4,40,216,11,35,208,4, - 35,114,22,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,240,0,0,0, - 151,0,100,1,125,2,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,2,116,4,0,0,0,0,0,0,0,0, - 171,2,0,0,0,0,0,0,1,0,116,7,0,0,0,0, - 0,0,0,0,124,1,124,0,171,2,0,0,0,0,0,0, - 125,3,124,1,116,8,0,0,0,0,0,0,0,0,106,10, + 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,120, + 1,114,123,1,0,124,0,106,4,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,1,106,4,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,118,0,114,50,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,124,1,25,0,0,0,125,4,116,13,0,0, - 0,0,0,0,0,0,124,3,124,4,171,2,0,0,0,0, - 0,0,1,0,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,124,1,25,0,0,0,83,0,116,15,0,0,0,0, - 0,0,0,0,124,3,171,1,0,0,0,0,0,0,83,0, - 41,2,122,130,76,111,97,100,32,116,104,101,32,115,112,101, - 99,105,102,105,101,100,32,109,111,100,117,108,101,32,105,110, - 116,111,32,115,121,115,46,109,111,100,117,108,101,115,32,97, - 110,100,32,114,101,116,117,114,110,32,105,116,46,10,10,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,108,111,97,100,101,114,46,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,122,103,116,104,101,32,108,111,97,100, - 95,109,111,100,117,108,101,40,41,32,109,101,116,104,111,100, - 32,105,115,32,100,101,112,114,101,99,97,116,101,100,32,97, - 110,100,32,115,108,97,116,101,100,32,102,111,114,32,114,101, - 109,111,118,97,108,32,105,110,32,80,121,116,104,111,110,32, - 51,46,49,50,59,32,117,115,101,32,101,120,101,99,95,109, - 111,100,117,108,101,40,41,32,105,110,115,116,101,97,100,41, - 8,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,16,115,112,101,99,95,102,114,111, - 109,95,108,111,97,100,101,114,114,24,0,0,0,218,7,109, - 111,100,117,108,101,115,218,5,95,101,120,101,99,218,5,95, - 108,111,97,100,41,5,114,44,0,0,0,114,180,0,0,0, - 218,3,109,115,103,218,4,115,112,101,99,218,6,109,111,100, - 117,108,101,115,5,0,0,0,32,32,32,32,32,114,7,0, - 0,0,218,17,95,108,111,97,100,95,109,111,100,117,108,101, - 95,115,104,105,109,114,201,0,0,0,10,2,0,0,115,97, - 0,0,0,128,0,240,12,1,12,51,128,67,228,4,13,135, - 78,129,78,144,51,212,24,42,212,4,43,220,11,27,152,72, - 160,100,211,11,43,128,68,216,7,15,148,51,151,59,145,59, - 209,7,30,220,17,20,151,27,145,27,152,88,209,17,38,136, - 6,220,8,13,136,100,144,70,212,8,27,220,15,18,143,123, - 137,123,152,56,209,15,36,208,8,36,228,15,20,144,84,139, - 123,208,8,26,114,22,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,252, - 0,0,0,151,0,116,1,0,0,0,0,0,0,0,0,124, - 0,100,1,100,2,171,3,0,0,0,0,0,0,125,1,116, - 1,0,0,0,0,0,0,0,0,124,0,100,3,100,2,171, - 3,0,0,0,0,0,0,120,1,125,2,114,11,116,3,0, - 0,0,0,0,0,0,0,124,2,171,1,0,0,0,0,0, - 0,83,0,9,0,124,0,106,4,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,125,3,9,0,124, - 0,106,8,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,125,4,100,5,124,3,155,2,100,6,124, - 4,155,2,100,7,157,5,83,0,35,0,116,6,0,0,0, - 0,0,0,0,0,36,0,114,5,1,0,100,4,125,3,89, - 0,140,35,119,0,120,3,89,0,119,1,35,0,116,6,0, - 0,0,0,0,0,0,0,36,0,114,22,1,0,124,1,128, - 8,100,5,124,3,155,2,100,7,157,3,99,2,89,0,83, - 0,100,5,124,3,155,2,100,8,124,1,155,2,100,9,157, - 5,99,2,89,0,83,0,119,0,120,3,89,0,119,1,41, - 10,122,44,84,104,101,32,105,109,112,108,101,109,101,110,116, - 97,116,105,111,110,32,111,102,32,77,111,100,117,108,101,84, - 121,112,101,46,95,95,114,101,112,114,95,95,40,41,46,218, - 10,95,95,108,111,97,100,101,114,95,95,78,218,8,95,95, - 115,112,101,99,95,95,250,1,63,250,8,60,109,111,100,117, - 108,101,32,250,6,32,102,114,111,109,32,250,1,62,250,2, - 32,40,250,2,41,62,41,5,114,15,0,0,0,218,22,95, - 109,111,100,117,108,101,95,114,101,112,114,95,102,114,111,109, - 95,115,112,101,99,114,11,0,0,0,114,4,0,0,0,218, - 8,95,95,102,105,108,101,95,95,41,5,114,200,0,0,0, - 218,6,108,111,97,100,101,114,114,199,0,0,0,114,26,0, - 0,0,218,8,102,105,108,101,110,97,109,101,115,5,0,0, - 0,32,32,32,32,32,114,7,0,0,0,218,12,95,109,111, - 100,117,108,101,95,114,101,112,114,114,215,0,0,0,29,2, - 0,0,115,177,0,0,0,128,0,228,13,20,144,86,152,92, - 168,52,211,13,48,128,70,220,15,22,144,118,152,122,168,52, - 211,15,48,208,7,48,128,116,208,7,48,220,15,37,160,100, - 211,15,43,208,8,43,240,4,3,5,19,216,15,21,143,127, - 137,127,136,4,240,6,8,5,54,216,19,25,151,63,145,63, - 136,8,240,14,0,18,26,152,36,152,24,160,22,168,8,160, - 124,176,49,208,15,53,208,8,53,248,244,21,0,12,26,242, - 0,1,5,19,216,15,18,138,4,240,3,1,5,19,251,244, - 8,0,12,26,242,0,4,5,53,216,11,17,136,62,216,21, - 29,152,100,152,88,160,81,208,19,39,210,12,39,224,21,29, - 152,100,152,88,160,82,168,6,160,122,176,18,208,19,52,210, - 12,52,240,9,4,5,53,250,115,40,0,0,0,169,12,65, - 11,0,182,12,65,28,0,193,11,11,65,25,3,193,24,1, - 65,25,3,193,28,17,65,59,3,193,47,9,65,59,3,193, - 58,1,65,59,3,99,0,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,0,0,0,0,243,164,0,0,0,151, - 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100, - 2,100,2,100,3,156,3,100,4,132,2,90,4,100,5,132, - 0,90,5,100,6,132,0,90,6,101,7,100,7,132,0,171, - 0,0,0,0,0,0,0,90,8,101,8,106,18,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, - 8,132,0,171,0,0,0,0,0,0,0,90,8,101,7,100, - 9,132,0,171,0,0,0,0,0,0,0,90,10,101,7,100, - 10,132,0,171,0,0,0,0,0,0,0,90,11,101,11,106, - 18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,100,11,132,0,171,0,0,0,0,0,0,0,90, - 11,121,2,41,12,218,10,77,111,100,117,108,101,83,112,101, - 99,97,208,5,0,0,84,104,101,32,115,112,101,99,105,102, - 105,99,97,116,105,111,110,32,102,111,114,32,97,32,109,111, - 100,117,108,101,44,32,117,115,101,100,32,102,111,114,32,108, - 111,97,100,105,110,103,46,10,10,32,32,32,32,65,32,109, - 111,100,117,108,101,39,115,32,115,112,101,99,32,105,115,32, - 116,104,101,32,115,111,117,114,99,101,32,102,111,114,32,105, - 110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116, - 32,116,104,101,32,109,111,100,117,108,101,46,32,32,70,111, - 114,10,32,32,32,32,100,97,116,97,32,97,115,115,111,99, - 105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,109, - 111,100,117,108,101,44,32,105,110,99,108,117,100,105,110,103, - 32,115,111,117,114,99,101,44,32,117,115,101,32,116,104,101, - 32,115,112,101,99,39,115,10,32,32,32,32,108,111,97,100, - 101,114,46,10,10,32,32,32,32,96,110,97,109,101,96,32, - 105,115,32,116,104,101,32,97,98,115,111,108,117,116,101,32, - 110,97,109,101,32,111,102,32,116,104,101,32,109,111,100,117, - 108,101,46,32,32,96,108,111,97,100,101,114,96,32,105,115, - 32,116,104,101,32,108,111,97,100,101,114,10,32,32,32,32, - 116,111,32,117,115,101,32,119,104,101,110,32,108,111,97,100, - 105,110,103,32,116,104,101,32,109,111,100,117,108,101,46,32, - 32,96,112,97,114,101,110,116,96,32,105,115,32,116,104,101, - 32,110,97,109,101,32,111,102,32,116,104,101,10,32,32,32, - 32,112,97,99,107,97,103,101,32,116,104,101,32,109,111,100, - 117,108,101,32,105,115,32,105,110,46,32,32,84,104,101,32, - 112,97,114,101,110,116,32,105,115,32,100,101,114,105,118,101, - 100,32,102,114,111,109,32,116,104,101,32,110,97,109,101,46, - 10,10,32,32,32,32,96,105,115,95,112,97,99,107,97,103, - 101,96,32,100,101,116,101,114,109,105,110,101,115,32,105,102, - 32,116,104,101,32,109,111,100,117,108,101,32,105,115,32,99, - 111,110,115,105,100,101,114,101,100,32,97,32,112,97,99,107, - 97,103,101,32,111,114,10,32,32,32,32,110,111,116,46,32, - 32,79,110,32,109,111,100,117,108,101,115,32,116,104,105,115, - 32,105,115,32,114,101,102,108,101,99,116,101,100,32,98,121, - 32,116,104,101,32,96,95,95,112,97,116,104,95,95,96,32, - 97,116,116,114,105,98,117,116,101,46,10,10,32,32,32,32, - 96,111,114,105,103,105,110,96,32,105,115,32,116,104,101,32, - 115,112,101,99,105,102,105,99,32,108,111,99,97,116,105,111, - 110,32,117,115,101,100,32,98,121,32,116,104,101,32,108,111, - 97,100,101,114,32,102,114,111,109,32,119,104,105,99,104,32, - 116,111,10,32,32,32,32,108,111,97,100,32,116,104,101,32, - 109,111,100,117,108,101,44,32,105,102,32,116,104,97,116,32, - 105,110,102,111,114,109,97,116,105,111,110,32,105,115,32,97, - 118,97,105,108,97,98,108,101,46,32,32,87,104,101,110,32, - 102,105,108,101,110,97,109,101,32,105,115,10,32,32,32,32, - 115,101,116,44,32,111,114,105,103,105,110,32,119,105,108,108, - 32,109,97,116,99,104,46,10,10,32,32,32,32,96,104,97, - 115,95,108,111,99,97,116,105,111,110,96,32,105,110,100,105, - 99,97,116,101,115,32,116,104,97,116,32,97,32,115,112,101, - 99,39,115,32,34,111,114,105,103,105,110,34,32,114,101,102, - 108,101,99,116,115,32,97,32,108,111,99,97,116,105,111,110, - 46,10,32,32,32,32,87,104,101,110,32,116,104,105,115,32, - 105,115,32,84,114,117,101,44,32,96,95,95,102,105,108,101, - 95,95,96,32,97,116,116,114,105,98,117,116,101,32,111,102, - 32,116,104,101,32,109,111,100,117,108,101,32,105,115,32,115, - 101,116,46,10,10,32,32,32,32,96,99,97,99,104,101,100, - 96,32,105,115,32,116,104,101,32,108,111,99,97,116,105,111, - 110,32,111,102,32,116,104,101,32,99,97,99,104,101,100,32, - 98,121,116,101,99,111,100,101,32,102,105,108,101,44,32,105, - 102,32,97,110,121,46,32,32,73,116,10,32,32,32,32,99, - 111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104, - 101,32,96,95,95,99,97,99,104,101,100,95,95,96,32,97, - 116,116,114,105,98,117,116,101,46,10,10,32,32,32,32,96, - 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,96,32,105,115,32,116, - 104,101,32,115,101,113,117,101,110,99,101,32,111,102,32,112, - 97,116,104,32,101,110,116,114,105,101,115,32,116,111,10,32, - 32,32,32,115,101,97,114,99,104,32,119,104,101,110,32,105, - 109,112,111,114,116,105,110,103,32,115,117,98,109,111,100,117, - 108,101,115,46,32,32,73,102,32,115,101,116,44,32,105,115, - 95,112,97,99,107,97,103,101,32,115,104,111,117,108,100,32, - 98,101,10,32,32,32,32,84,114,117,101,45,45,97,110,100, - 32,70,97,108,115,101,32,111,116,104,101,114,119,105,115,101, - 46,10,10,32,32,32,32,80,97,99,107,97,103,101,115,32, - 97,114,101,32,115,105,109,112,108,121,32,109,111,100,117,108, - 101,115,32,116,104,97,116,32,40,109,97,121,41,32,104,97, - 118,101,32,115,117,98,109,111,100,117,108,101,115,46,32,32, - 73,102,32,97,32,115,112,101,99,10,32,32,32,32,104,97, - 115,32,97,32,110,111,110,45,78,111,110,101,32,118,97,108, - 117,101,32,105,110,32,96,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,96,44,32,116,104,101,32,105,109,112,111,114,116,10,32, - 32,32,32,115,121,115,116,101,109,32,119,105,108,108,32,99, - 111,110,115,105,100,101,114,32,109,111,100,117,108,101,115,32, - 108,111,97,100,101,100,32,102,114,111,109,32,116,104,101,32, - 115,112,101,99,32,97,115,32,112,97,99,107,97,103,101,115, - 46,10,10,32,32,32,32,79,110,108,121,32,102,105,110,100, - 101,114,115,32,40,115,101,101,32,105,109,112,111,114,116,108, - 105,98,46,97,98,99,46,77,101,116,97,80,97,116,104,70, - 105,110,100,101,114,32,97,110,100,10,32,32,32,32,105,109, - 112,111,114,116,108,105,98,46,97,98,99,46,80,97,116,104, - 69,110,116,114,121,70,105,110,100,101,114,41,32,115,104,111, - 117,108,100,32,109,111,100,105,102,121,32,77,111,100,117,108, - 101,83,112,101,99,32,105,110,115,116,97,110,99,101,115,46, - 10,10,32,32,32,32,78,41,3,218,6,111,114,105,103,105, - 110,218,12,108,111,97,100,101,114,95,115,116,97,116,101,218, - 10,105,115,95,112,97,99,107,97,103,101,99,3,0,0,0, - 0,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0, - 243,124,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,124,3,124,0,95,2,0,0,0,0,0,0,0, - 0,124,4,124,0,95,3,0,0,0,0,0,0,0,0,124, - 5,114,2,103,0,110,1,100,0,124,0,95,4,0,0,0, - 0,0,0,0,0,103,0,124,0,95,5,0,0,0,0,0, - 0,0,0,100,1,124,0,95,6,0,0,0,0,0,0,0, - 0,100,0,124,0,95,7,0,0,0,0,0,0,0,0,121, - 0,169,2,78,70,41,8,114,26,0,0,0,114,213,0,0, - 0,114,218,0,0,0,114,219,0,0,0,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,218,25,95,117,110,105,110,105,116, - 105,97,108,105,122,101,100,95,115,117,98,109,111,100,117,108, - 101,115,218,13,95,115,101,116,95,102,105,108,101,97,116,116, - 114,218,7,95,99,97,99,104,101,100,41,6,114,44,0,0, - 0,114,26,0,0,0,114,213,0,0,0,114,218,0,0,0, - 114,219,0,0,0,114,220,0,0,0,115,6,0,0,0,32, - 32,32,32,32,32,114,7,0,0,0,114,47,0,0,0,122, - 19,77,111,100,117,108,101,83,112,101,99,46,95,95,105,110, - 105,116,95,95,87,2,0,0,115,68,0,0,0,128,0,224, - 20,24,136,4,140,9,216,22,28,136,4,140,11,216,22,28, - 136,4,140,11,216,28,40,136,4,212,8,25,217,48,58,169, - 34,192,4,136,4,212,8,39,216,41,43,136,4,212,8,38, - 240,6,0,30,35,136,4,212,8,26,216,23,27,136,4,141, - 12,114,22,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,60,1,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,157,2,100,2, - 124,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,155,2,157,2,103,2,125,1,124,0, - 106,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,129,30,124,1,106,7,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,100,3,124,0, - 106,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,155,2,157,2,171,1,0,0,0,0,0,0, - 1,0,124,0,106,8,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,129,30,124,1,106,7,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 100,4,124,0,106,8,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,155,0,157,2,171,1,0,0, - 0,0,0,0,1,0,124,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, - 155,0,100,5,100,6,106,15,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,155,0,100,7,157,4,83,0,41,8,78,122, - 5,110,97,109,101,61,122,7,108,111,97,100,101,114,61,122, - 7,111,114,105,103,105,110,61,122,27,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,61,250,1,40,122,2,44,32,250,1,41,41, - 8,114,26,0,0,0,114,213,0,0,0,114,218,0,0,0, - 114,51,0,0,0,114,223,0,0,0,114,45,0,0,0,114, - 11,0,0,0,218,4,106,111,105,110,41,2,114,44,0,0, - 0,114,90,0,0,0,115,2,0,0,0,32,32,114,7,0, - 0,0,114,132,0,0,0,122,19,77,111,100,117,108,101,83, - 112,101,99,46,95,95,114,101,112,114,95,95,100,2,0,0, - 115,145,0,0,0,128,0,216,18,23,152,4,159,9,153,9, - 144,125,208,16,37,168,23,176,20,183,27,177,27,176,15,208, - 39,64,208,15,65,136,4,216,11,15,143,59,137,59,208,11, - 34,216,12,16,143,75,137,75,152,39,160,36,167,43,161,43, - 160,31,208,24,49,212,12,50,216,11,15,215,11,42,209,11, - 42,208,11,54,216,12,16,143,75,137,75,208,26,53,176,100, - 215,54,85,209,54,85,208,53,86,208,24,87,212,12,88,216, - 18,22,151,46,145,46,215,18,41,209,18,41,208,17,42,168, - 33,168,68,175,73,169,73,176,100,171,79,208,43,60,184,65, - 208,15,62,208,8,62,114,22,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,114,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,125,2,9, - 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,120,1,114,123,1,0,124,0,106,4,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,1,106, - 4,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,96,1,0,124,0,106, - 6,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,107,40,0,0,120,1,114,96,1,0,124,0,106,6,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,107,40,0,0,120,1,114,69,1, + 0,124,2,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, - 69,1,0,124,2,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,52,1,0,124,0,106,8,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,1,106,8,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,10,0, - 0,0,0,0,0,0,0,0,0,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,107,40,0,0,83,0,35,0,116, - 12,0,0,0,0,0,0,0,0,36,0,114,9,1,0,116, - 14,0,0,0,0,0,0,0,0,99,2,89,0,83,0,119, - 0,120,3,89,0,119,1,114,2,0,0,0,41,8,114,223, - 0,0,0,114,26,0,0,0,114,213,0,0,0,114,218,0, - 0,0,218,6,99,97,99,104,101,100,218,12,104,97,115,95, - 108,111,99,97,116,105,111,110,114,4,0,0,0,218,14,78, - 111,116,73,109,112,108,101,109,101,110,116,101,100,41,3,114, - 44,0,0,0,218,5,111,116,104,101,114,218,4,115,109,115, - 108,115,3,0,0,0,32,32,32,114,7,0,0,0,218,6, - 95,95,101,113,95,95,122,17,77,111,100,117,108,101,83,112, - 101,99,46,95,95,101,113,95,95,108,2,0,0,115,175,0, - 0,0,128,0,216,15,19,215,15,46,209,15,46,136,4,240, - 2,8,9,34,216,20,24,151,73,145,73,160,21,167,26,161, - 26,209,20,43,242,0,5,21,60,216,20,24,151,75,145,75, - 160,53,167,60,161,60,209,20,47,242,3,5,21,60,224,20, - 24,151,75,145,75,160,53,167,60,161,60,209,20,47,242,5, - 5,21,60,240,6,0,21,25,152,69,215,28,60,209,28,60, - 209,20,60,242,7,5,21,60,240,8,0,21,25,151,75,145, - 75,160,53,167,60,161,60,209,20,47,242,9,5,21,60,240, - 10,0,21,25,215,20,37,209,20,37,168,21,215,41,59,209, - 41,59,209,20,59,240,11,5,13,61,248,244,12,0,16,30, - 242,0,1,9,34,220,19,33,210,12,33,240,3,1,9,34, - 250,115,18,0,0,0,142,66,21,66,36,0,194,36,15,66, - 54,3,194,53,1,66,54,3,99,1,0,0,0,0,0,0, - 0,0,0,0,0,3,0,0,0,3,0,0,0,243,194,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,128,72,124,0,106,2, + 52,1,0,124,0,106,8,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,1,106,8,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,10,0,0,0, + 0,0,0,0,0,0,0,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,107,40,0,0,83,0,35,0,116,12,0, + 0,0,0,0,0,0,0,36,0,114,9,1,0,116,14,0, + 0,0,0,0,0,0,0,99,2,89,0,83,0,119,0,120, + 3,89,0,119,1,114,2,0,0,0,41,8,114,223,0,0, + 0,114,26,0,0,0,114,213,0,0,0,114,218,0,0,0, + 218,6,99,97,99,104,101,100,218,12,104,97,115,95,108,111, + 99,97,116,105,111,110,114,4,0,0,0,218,14,78,111,116, + 73,109,112,108,101,109,101,110,116,101,100,41,3,114,44,0, + 0,0,218,5,111,116,104,101,114,218,4,115,109,115,108,115, + 3,0,0,0,32,32,32,114,7,0,0,0,218,6,95,95, + 101,113,95,95,122,17,77,111,100,117,108,101,83,112,101,99, + 46,95,95,101,113,95,95,108,2,0,0,115,175,0,0,0, + 128,0,216,15,19,215,15,46,209,15,46,136,4,240,2,8, + 9,34,216,20,24,151,73,145,73,160,21,167,26,161,26,209, + 20,43,242,0,5,21,60,216,20,24,151,75,145,75,160,53, + 167,60,161,60,209,20,47,242,3,5,21,60,224,20,24,151, + 75,145,75,160,53,167,60,161,60,209,20,47,242,5,5,21, + 60,240,6,0,21,25,152,69,215,28,60,209,28,60,209,20, + 60,242,7,5,21,60,240,8,0,21,25,151,75,145,75,160, + 53,167,60,161,60,209,20,47,242,9,5,21,60,240,10,0, + 21,25,215,20,37,209,20,37,168,21,215,41,59,209,41,59, + 209,20,59,240,11,5,13,61,248,244,12,0,16,30,242,0, + 1,9,34,220,19,33,210,12,33,240,3,1,9,34,250,115, + 18,0,0,0,142,66,21,66,36,0,194,36,15,66,54,3, + 194,53,1,66,54,3,99,1,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,3,0,0,0,243,194,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,128,72,124,0,106,2,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,129,60,124,0,106,4,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,114,48,116,6,0,0, - 0,0,0,0,0,0,128,6,116,8,0,0,0,0,0,0, - 0,0,130,1,116,6,0,0,0,0,0,0,0,0,106,11, + 129,60,124,0,106,4,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,114,48,116,6,0,0,0,0, + 0,0,0,0,128,6,116,8,0,0,0,0,0,0,0,0, + 130,1,116,6,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, - 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, - 124,0,95,0,0,0,0,0,0,0,0,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,2,0,0,0,41,6,114,226,0,0,0, - 114,218,0,0,0,114,225,0,0,0,218,19,95,98,111,111, - 116,115,116,114,97,112,95,101,120,116,101,114,110,97,108,218, - 19,78,111,116,73,109,112,108,101,109,101,110,116,101,100,69, - 114,114,111,114,218,11,95,103,101,116,95,99,97,99,104,101, - 100,114,66,0,0,0,115,1,0,0,0,32,114,7,0,0, - 0,114,232,0,0,0,122,17,77,111,100,117,108,101,83,112, - 101,99,46,99,97,99,104,101,100,120,2,0,0,115,74,0, - 0,0,128,0,224,11,15,143,60,137,60,208,11,31,216,15, - 19,143,123,137,123,208,15,38,168,52,215,43,61,210,43,61, - 220,19,38,208,19,46,220,26,45,208,20,45,220,31,50,215, - 31,62,209,31,62,184,116,191,123,185,123,211,31,75,144,4, - 148,12,216,15,19,143,124,137,124,208,8,27,114,22,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,18,0,0,0,151,0,124,1,124, - 0,95,0,0,0,0,0,0,0,0,0,121,0,114,2,0, - 0,0,41,1,114,226,0,0,0,41,2,114,44,0,0,0, - 114,232,0,0,0,115,2,0,0,0,32,32,114,7,0,0, - 0,114,232,0,0,0,122,17,77,111,100,117,108,101,83,112, - 101,99,46,99,97,99,104,101,100,129,2,0,0,115,9,0, - 0,0,128,0,224,23,29,136,4,141,12,114,22,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,110,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,128,30,124,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,100,1, - 171,1,0,0,0,0,0,0,100,2,25,0,0,0,83,0, 124,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,83,0,41,3,122,32,84,104,101,32, - 110,97,109,101,32,111,102,32,116,104,101,32,109,111,100,117, - 108,101,39,115,32,112,97,114,101,110,116,46,250,1,46,114, - 125,0,0,0,41,3,114,223,0,0,0,114,26,0,0,0, - 218,10,114,112,97,114,116,105,116,105,111,110,114,66,0,0, - 0,115,1,0,0,0,32,114,7,0,0,0,218,6,112,97, - 114,101,110,116,122,17,77,111,100,117,108,101,83,112,101,99, - 46,112,97,114,101,110,116,133,2,0,0,115,52,0,0,0, - 128,0,240,6,0,12,16,215,11,42,209,11,42,208,11,50, - 216,19,23,151,57,145,57,215,19,39,209,19,39,168,3,211, - 19,44,168,81,209,19,47,208,12,47,224,19,23,151,57,145, - 57,208,12,28,114,22,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,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,2,0, - 0,0,41,1,114,225,0,0,0,114,66,0,0,0,115,1, - 0,0,0,32,114,7,0,0,0,114,233,0,0,0,122,23, - 77,111,100,117,108,101,83,112,101,99,46,104,97,115,95,108, - 111,99,97,116,105,111,110,141,2,0,0,115,14,0,0,0, - 128,0,224,15,19,215,15,33,209,15,33,208,8,33,114,22, - 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,36,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,124,0,95,1,0,0,0,0,0,0,0,0,121, - 0,114,2,0,0,0,41,2,218,4,98,111,111,108,114,225, - 0,0,0,41,2,114,44,0,0,0,218,5,118,97,108,117, - 101,115,2,0,0,0,32,32,114,7,0,0,0,114,233,0, - 0,0,122,23,77,111,100,117,108,101,83,112,101,99,46,104, - 97,115,95,108,111,99,97,116,105,111,110,145,2,0,0,115, - 14,0,0,0,128,0,228,29,33,160,37,155,91,136,4,213, - 8,26,114,22,0,0,0,41,12,114,11,0,0,0,114,10, - 0,0,0,114,3,0,0,0,114,12,0,0,0,114,47,0, - 0,0,114,132,0,0,0,114,237,0,0,0,218,8,112,114, - 111,112,101,114,116,121,114,232,0,0,0,218,6,115,101,116, - 116,101,114,114,246,0,0,0,114,233,0,0,0,114,31,0, - 0,0,114,22,0,0,0,114,7,0,0,0,114,217,0,0, - 0,114,217,0,0,0,50,2,0,0,115,143,0,0,0,132, - 0,241,2,34,5,8,240,72,1,0,48,52,192,36,216,28, - 32,244,3,11,5,28,242,26,6,5,63,242,16,10,5,34, - 240,24,0,6,14,241,2,6,5,28,243,3,0,6,14,240, - 2,6,5,28,240,16,0,6,12,135,93,129,93,241,2,1, - 5,30,243,3,0,6,19,240,2,1,5,30,240,6,0,6, - 14,241,2,5,5,29,243,3,0,6,14,240,2,5,5,29, - 240,14,0,6,14,241,2,1,5,34,243,3,0,6,14,240, - 2,1,5,34,240,6,0,6,18,215,5,24,209,5,24,241, - 2,1,5,41,243,3,0,6,25,241,2,1,5,41,114,22, - 0,0,0,114,217,0,0,0,169,2,114,218,0,0,0,114, - 220,0,0,0,99,2,0,0,0,0,0,0,0,2,0,0, - 0,6,0,0,0,3,0,0,0,243,52,1,0,0,151,0, - 124,2,128,13,116,1,0,0,0,0,0,0,0,0,124,1, - 100,2,100,1,171,3,0,0,0,0,0,0,125,2,124,2, - 115,69,116,3,0,0,0,0,0,0,0,0,124,1,100,3, - 171,2,0,0,0,0,0,0,114,57,116,4,0,0,0,0, - 0,0,0,0,128,6,116,6,0,0,0,0,0,0,0,0, - 130,1,116,4,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, - 125,4,124,3,128,10,2,0,124,4,124,0,124,1,172,4, - 171,2,0,0,0,0,0,0,83,0,124,3,114,2,103,0, - 110,1,100,1,125,5,2,0,124,4,124,0,124,1,124,5, - 172,5,171,3,0,0,0,0,0,0,83,0,124,3,128,33, - 116,3,0,0,0,0,0,0,0,0,124,1,100,6,171,2, - 0,0,0,0,0,0,114,19,9,0,124,1,106,11,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,3,110,2,100,7, - 125,3,116,15,0,0,0,0,0,0,0,0,124,0,124,1, - 124,2,124,3,172,8,171,4,0,0,0,0,0,0,83,0, - 35,0,116,12,0,0,0,0,0,0,0,0,36,0,114,5, - 1,0,100,1,125,3,89,0,140,28,119,0,120,3,89,0, - 119,1,41,9,122,53,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,118,97,114,105,111,117,115,32,108,111,97,100, - 101,114,32,109,101,116,104,111,100,115,46,78,218,7,95,79, - 82,73,71,73,78,218,12,103,101,116,95,102,105,108,101,110, - 97,109,101,41,1,114,213,0,0,0,41,2,114,213,0,0, - 0,114,223,0,0,0,114,220,0,0,0,70,114,253,0,0, - 0,41,8,114,15,0,0,0,114,13,0,0,0,114,239,0, - 0,0,114,240,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,220,0,0,0,114,178,0,0,0,114,217,0,0,0,41, - 6,114,26,0,0,0,114,213,0,0,0,114,218,0,0,0, - 114,220,0,0,0,114,1,1,0,0,218,6,115,101,97,114, - 99,104,115,6,0,0,0,32,32,32,32,32,32,114,7,0, - 0,0,114,194,0,0,0,114,194,0,0,0,150,2,0,0, - 115,192,0,0,0,128,0,224,7,13,128,126,220,17,24,152, - 22,160,25,168,68,211,17,49,136,6,225,11,17,148,103,152, - 102,160,110,212,22,53,220,11,30,208,11,38,220,18,37,208, - 12,37,220,34,53,215,34,77,209,34,77,208,8,31,224,11, - 21,208,11,29,217,19,42,168,52,184,6,212,19,63,208,12, - 63,217,23,33,145,18,160,116,136,6,217,15,38,160,116,176, - 70,216,66,72,244,3,1,16,74,1,240,0,1,9,74,1, - 240,6,0,8,18,208,7,25,220,11,18,144,54,152,60,212, - 11,40,240,2,3,13,34,216,29,35,215,29,46,209,29,46, - 168,116,211,29,52,145,10,240,10,0,26,31,136,74,228,11, - 21,144,100,152,70,168,54,184,106,212,11,73,208,4,73,248, - 244,13,0,20,31,242,0,1,13,34,216,29,33,146,10,240, - 3,1,13,34,250,115,18,0,0,0,193,38,17,66,9,0, - 194,9,11,66,23,3,194,22,1,66,23,3,99,3,0,0, - 0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,0, - 0,243,226,1,0,0,151,0,9,0,124,0,106,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 125,3,124,3,129,2,124,3,83,0,124,0,106,4,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 125,4,124,1,128,13,9,0,124,0,106,6,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,1, - 9,0,124,0,106,8,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,125,5,124,2,128,21,124,1, - 129,13,116,11,0,0,0,0,0,0,0,0,124,1,100,1, - 100,0,171,3,0,0,0,0,0,0,125,2,124,2,115,4, - 124,5,129,2,124,5,125,2,9,0,124,0,106,12,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 125,6,9,0,116,15,0,0,0,0,0,0,0,0,124,0, - 106,16,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,7,116,19, - 0,0,0,0,0,0,0,0,124,4,124,1,124,2,172,2, - 171,3,0,0,0,0,0,0,125,3,124,5,128,2,100,3, - 110,4,124,2,124,5,107,40,0,0,124,3,95,10,0,0, - 0,0,0,0,0,0,124,6,124,3,95,11,0,0,0,0, - 0,0,0,0,124,7,124,3,95,12,0,0,0,0,0,0, - 0,0,124,3,83,0,35,0,116,2,0,0,0,0,0,0, - 0,0,36,0,114,3,1,0,89,0,140,153,119,0,120,3, - 89,0,119,1,35,0,116,2,0,0,0,0,0,0,0,0, - 36,0,114,3,1,0,89,0,140,141,119,0,120,3,89,0, + 0,0,0,0,0,0,171,1,0,0,0,0,0,0,124,0, + 95,0,0,0,0,0,0,0,0,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,2,0,0,0,41,6,114,226,0,0,0,114,218, + 0,0,0,114,225,0,0,0,218,19,95,98,111,111,116,115, + 116,114,97,112,95,101,120,116,101,114,110,97,108,218,19,78, + 111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,114, + 111,114,218,11,95,103,101,116,95,99,97,99,104,101,100,114, + 66,0,0,0,115,1,0,0,0,32,114,7,0,0,0,114, + 232,0,0,0,122,17,77,111,100,117,108,101,83,112,101,99, + 46,99,97,99,104,101,100,120,2,0,0,115,74,0,0,0, + 128,0,224,11,15,143,60,137,60,208,11,31,216,15,19,143, + 123,137,123,208,15,38,168,52,215,43,61,210,43,61,220,19, + 38,208,19,46,220,26,45,208,20,45,220,31,50,215,31,62, + 209,31,62,184,116,191,123,185,123,211,31,75,144,4,148,12, + 216,15,19,143,124,137,124,208,8,27,114,22,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,18,0,0,0,151,0,124,1,124,0,95, + 0,0,0,0,0,0,0,0,0,121,0,114,2,0,0,0, + 41,1,114,226,0,0,0,41,2,114,44,0,0,0,114,232, + 0,0,0,115,2,0,0,0,32,32,114,7,0,0,0,114, + 232,0,0,0,122,17,77,111,100,117,108,101,83,112,101,99, + 46,99,97,99,104,101,100,129,2,0,0,115,9,0,0,0, + 128,0,224,23,29,136,4,141,12,114,22,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,110,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, + 128,30,124,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,100,1,171,1, + 0,0,0,0,0,0,100,2,25,0,0,0,83,0,124,0, + 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,83,0,41,3,122,32,84,104,101,32,110,97, + 109,101,32,111,102,32,116,104,101,32,109,111,100,117,108,101, + 39,115,32,112,97,114,101,110,116,46,218,1,46,114,125,0, + 0,0,41,3,114,223,0,0,0,114,26,0,0,0,218,10, + 114,112,97,114,116,105,116,105,111,110,114,66,0,0,0,115, + 1,0,0,0,32,114,7,0,0,0,218,6,112,97,114,101, + 110,116,122,17,77,111,100,117,108,101,83,112,101,99,46,112, + 97,114,101,110,116,133,2,0,0,115,52,0,0,0,128,0, + 240,6,0,12,16,215,11,42,209,11,42,208,11,50,216,19, + 23,151,57,145,57,215,19,39,209,19,39,168,3,211,19,44, + 168,81,209,19,47,208,12,47,224,19,23,151,57,145,57,208, + 12,28,114,22,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,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,2,0,0,0, + 41,1,114,225,0,0,0,114,66,0,0,0,115,1,0,0, + 0,32,114,7,0,0,0,114,233,0,0,0,122,23,77,111, + 100,117,108,101,83,112,101,99,46,104,97,115,95,108,111,99, + 97,116,105,111,110,141,2,0,0,115,14,0,0,0,128,0, + 224,15,19,215,15,33,209,15,33,208,8,33,114,22,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,36,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,124,0,95,1,0,0,0,0,0,0,0,0,121,0,114, + 2,0,0,0,41,2,218,4,98,111,111,108,114,225,0,0, + 0,41,2,114,44,0,0,0,218,5,118,97,108,117,101,115, + 2,0,0,0,32,32,114,7,0,0,0,114,233,0,0,0, + 122,23,77,111,100,117,108,101,83,112,101,99,46,104,97,115, + 95,108,111,99,97,116,105,111,110,145,2,0,0,115,14,0, + 0,0,128,0,228,29,33,160,37,155,91,136,4,213,8,26, + 114,22,0,0,0,41,12,114,11,0,0,0,114,10,0,0, + 0,114,3,0,0,0,114,12,0,0,0,114,47,0,0,0, + 114,132,0,0,0,114,237,0,0,0,218,8,112,114,111,112, + 101,114,116,121,114,232,0,0,0,218,6,115,101,116,116,101, + 114,114,246,0,0,0,114,233,0,0,0,114,31,0,0,0, + 114,22,0,0,0,114,7,0,0,0,114,217,0,0,0,114, + 217,0,0,0,50,2,0,0,115,143,0,0,0,132,0,241, + 2,34,5,8,240,72,1,0,48,52,192,36,216,28,32,244, + 3,11,5,28,242,26,6,5,63,242,16,10,5,34,240,24, + 0,6,14,241,2,6,5,28,243,3,0,6,14,240,2,6, + 5,28,240,16,0,6,12,135,93,129,93,241,2,1,5,30, + 243,3,0,6,19,240,2,1,5,30,240,6,0,6,14,241, + 2,5,5,29,243,3,0,6,14,240,2,5,5,29,240,14, + 0,6,14,241,2,1,5,34,243,3,0,6,14,240,2,1, + 5,34,240,6,0,6,18,215,5,24,209,5,24,241,2,1, + 5,41,243,3,0,6,25,241,2,1,5,41,114,22,0,0, + 0,114,217,0,0,0,169,2,114,218,0,0,0,114,220,0, + 0,0,99,2,0,0,0,0,0,0,0,2,0,0,0,6, + 0,0,0,3,0,0,0,243,52,1,0,0,151,0,124,2, + 128,13,116,1,0,0,0,0,0,0,0,0,124,1,100,2, + 100,1,171,3,0,0,0,0,0,0,125,2,124,2,115,69, + 116,3,0,0,0,0,0,0,0,0,124,1,100,3,171,2, + 0,0,0,0,0,0,114,57,116,4,0,0,0,0,0,0, + 0,0,128,6,116,6,0,0,0,0,0,0,0,0,130,1, + 116,4,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,125,4, + 124,3,128,10,2,0,124,4,124,0,124,1,172,4,171,2, + 0,0,0,0,0,0,83,0,124,3,114,2,103,0,110,1, + 100,1,125,5,2,0,124,4,124,0,124,1,124,5,172,5, + 171,3,0,0,0,0,0,0,83,0,124,3,128,33,116,3, + 0,0,0,0,0,0,0,0,124,1,100,6,171,2,0,0, + 0,0,0,0,114,19,9,0,124,1,106,11,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,3,110,2,100,7,125,3, + 116,15,0,0,0,0,0,0,0,0,124,0,124,1,124,2, + 124,3,172,8,171,4,0,0,0,0,0,0,83,0,35,0, + 116,12,0,0,0,0,0,0,0,0,36,0,114,5,1,0, + 100,1,125,3,89,0,140,28,119,0,120,3,89,0,119,1, + 41,9,122,53,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,118,97,114,105,111,117,115,32,108,111,97,100,101,114, + 32,109,101,116,104,111,100,115,46,78,218,7,95,79,82,73, + 71,73,78,218,12,103,101,116,95,102,105,108,101,110,97,109, + 101,41,1,114,213,0,0,0,41,2,114,213,0,0,0,114, + 223,0,0,0,114,220,0,0,0,70,114,253,0,0,0,41, + 8,114,15,0,0,0,114,13,0,0,0,114,239,0,0,0, + 114,240,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,220, + 0,0,0,114,178,0,0,0,114,217,0,0,0,41,6,114, + 26,0,0,0,114,213,0,0,0,114,218,0,0,0,114,220, + 0,0,0,114,1,1,0,0,218,6,115,101,97,114,99,104, + 115,6,0,0,0,32,32,32,32,32,32,114,7,0,0,0, + 114,194,0,0,0,114,194,0,0,0,150,2,0,0,115,192, + 0,0,0,128,0,224,7,13,128,126,220,17,24,152,22,160, + 25,168,68,211,17,49,136,6,225,11,17,148,103,152,102,160, + 110,212,22,53,220,11,30,208,11,38,220,18,37,208,12,37, + 220,34,53,215,34,77,209,34,77,208,8,31,224,11,21,208, + 11,29,217,19,42,168,52,184,6,212,19,63,208,12,63,217, + 23,33,145,18,160,116,136,6,217,15,38,160,116,176,70,216, + 66,72,244,3,1,16,74,1,240,0,1,9,74,1,240,6, + 0,8,18,208,7,25,220,11,18,144,54,152,60,212,11,40, + 240,2,3,13,34,216,29,35,215,29,46,209,29,46,168,116, + 211,29,52,145,10,240,10,0,26,31,136,74,228,11,21,144, + 100,152,70,168,54,184,106,212,11,73,208,4,73,248,244,13, + 0,20,31,242,0,1,13,34,216,29,33,146,10,240,3,1, + 13,34,250,115,18,0,0,0,193,38,17,66,9,0,194,9, + 11,66,23,3,194,22,1,66,23,3,99,3,0,0,0,0, + 0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,243, + 226,1,0,0,151,0,9,0,124,0,106,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,3, + 124,3,129,2,124,3,83,0,124,0,106,4,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,4, + 124,1,128,13,9,0,124,0,106,6,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,125,1,9,0, + 124,0,106,8,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,125,5,124,2,128,21,124,1,129,13, + 116,11,0,0,0,0,0,0,0,0,124,1,100,1,100,0, + 171,3,0,0,0,0,0,0,125,2,124,2,115,4,124,5, + 129,2,124,5,125,2,9,0,124,0,106,12,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,6, + 9,0,116,15,0,0,0,0,0,0,0,0,124,0,106,16, + 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,7,116,19,0,0, + 0,0,0,0,0,0,124,4,124,1,124,2,172,2,171,3, + 0,0,0,0,0,0,125,3,124,5,128,2,100,3,110,4, + 124,2,124,5,107,40,0,0,124,3,95,10,0,0,0,0, + 0,0,0,0,124,6,124,3,95,11,0,0,0,0,0,0, + 0,0,124,7,124,3,95,12,0,0,0,0,0,0,0,0, + 124,3,83,0,35,0,116,2,0,0,0,0,0,0,0,0, + 36,0,114,3,1,0,89,0,140,153,119,0,120,3,89,0, + 119,1,35,0,116,2,0,0,0,0,0,0,0,0,36,0, + 114,3,1,0,89,0,140,141,119,0,120,3,89,0,119,1, + 35,0,116,2,0,0,0,0,0,0,0,0,36,0,114,5, + 1,0,100,0,125,5,89,0,140,145,119,0,120,3,89,0, 119,1,35,0,116,2,0,0,0,0,0,0,0,0,36,0, - 114,5,1,0,100,0,125,5,89,0,140,145,119,0,120,3, + 114,5,1,0,100,0,125,6,89,0,140,126,119,0,120,3, 89,0,119,1,35,0,116,2,0,0,0,0,0,0,0,0, - 36,0,114,5,1,0,100,0,125,6,89,0,140,126,119,0, - 120,3,89,0,119,1,35,0,116,2,0,0,0,0,0,0, - 0,0,36,0,114,5,1,0,100,0,125,7,89,0,140,121, - 119,0,120,3,89,0,119,1,41,4,78,114,255,0,0,0, - 169,1,114,218,0,0,0,70,41,13,114,204,0,0,0,114, - 4,0,0,0,114,11,0,0,0,114,203,0,0,0,114,212, - 0,0,0,114,15,0,0,0,218,10,95,95,99,97,99,104, - 101,100,95,95,218,4,108,105,115,116,218,8,95,95,112,97, - 116,104,95,95,114,217,0,0,0,114,225,0,0,0,114,232, - 0,0,0,114,223,0,0,0,41,8,114,200,0,0,0,114, - 213,0,0,0,114,218,0,0,0,114,199,0,0,0,114,26, - 0,0,0,218,8,108,111,99,97,116,105,111,110,114,232,0, - 0,0,114,223,0,0,0,115,8,0,0,0,32,32,32,32, - 32,32,32,32,114,7,0,0,0,218,17,95,115,112,101,99, - 95,102,114,111,109,95,109,111,100,117,108,101,114,9,1,0, - 0,179,2,0,0,115,53,1,0,0,128,0,240,4,6,5, - 24,216,15,21,143,127,137,127,136,4,240,8,0,12,16,208, - 11,27,216,19,23,136,75,224,11,17,143,63,137,63,128,68, - 216,7,13,128,126,240,2,4,9,17,216,21,27,215,21,38, - 209,21,38,136,70,240,8,3,5,24,216,19,25,151,63,145, - 63,136,8,240,6,0,8,14,128,126,216,11,17,208,11,29, - 220,21,28,152,86,160,89,176,4,211,21,53,136,70,217,15, - 21,152,40,208,26,46,216,21,29,136,70,240,2,3,5,22, - 216,17,23,215,17,34,209,17,34,136,6,240,6,3,5,42, - 220,37,41,168,38,175,47,169,47,211,37,58,208,8,34,244, - 8,0,12,22,144,100,152,70,168,54,212,11,50,128,68,216, - 34,42,208,34,50,153,21,184,22,192,56,209,57,75,128,68, - 212,4,22,216,18,24,128,68,132,75,216,38,64,128,68,212, - 4,35,216,11,15,128,75,248,244,71,1,0,12,26,242,0, - 1,5,13,217,8,12,240,3,1,5,13,251,244,20,0,16, - 30,242,0,2,9,17,225,12,16,240,5,2,9,17,251,244, - 10,0,12,26,242,0,1,5,24,216,19,23,138,8,240,3, - 1,5,24,251,244,18,0,12,26,242,0,1,5,22,216,17, - 21,138,6,240,3,1,5,22,251,244,8,0,12,26,242,0, - 1,5,42,216,37,41,210,8,34,240,3,1,5,42,250,115, - 87,0,0,0,130,12,66,32,0,161,12,66,47,0,174,12, - 66,62,0,193,18,12,67,15,0,193,31,21,67,32,0,194, - 32,9,66,44,3,194,43,1,66,44,3,194,47,9,66,59, - 3,194,58,1,66,59,3,194,62,11,67,12,3,195,11,1, - 67,12,3,195,15,11,67,29,3,195,28,1,67,29,3,195, - 32,11,67,46,3,195,45,1,67,46,3,70,169,1,218,8, - 111,118,101,114,114,105,100,101,99,2,0,0,0,0,0,0, - 0,1,0,0,0,5,0,0,0,3,0,0,0,243,124,3, - 0,0,151,0,124,2,115,13,116,1,0,0,0,0,0,0, - 0,0,124,1,100,1,100,0,171,3,0,0,0,0,0,0, - 128,18,9,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,95,2,0,0, - 0,0,0,0,0,0,124,2,115,13,116,1,0,0,0,0, - 0,0,0,0,124,1,100,2,100,0,171,3,0,0,0,0, - 0,0,128,110,124,0,106,8,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,125,3,124,3,128,88, + 36,0,114,5,1,0,100,0,125,7,89,0,140,121,119,0, + 120,3,89,0,119,1,41,4,78,114,255,0,0,0,169,1, + 114,218,0,0,0,70,41,13,114,204,0,0,0,114,4,0, + 0,0,114,11,0,0,0,114,203,0,0,0,114,212,0,0, + 0,114,15,0,0,0,218,10,95,95,99,97,99,104,101,100, + 95,95,218,4,108,105,115,116,218,8,95,95,112,97,116,104, + 95,95,114,217,0,0,0,114,225,0,0,0,114,232,0,0, + 0,114,223,0,0,0,41,8,114,200,0,0,0,114,213,0, + 0,0,114,218,0,0,0,114,199,0,0,0,114,26,0,0, + 0,218,8,108,111,99,97,116,105,111,110,114,232,0,0,0, + 114,223,0,0,0,115,8,0,0,0,32,32,32,32,32,32, + 32,32,114,7,0,0,0,218,17,95,115,112,101,99,95,102, + 114,111,109,95,109,111,100,117,108,101,114,9,1,0,0,179, + 2,0,0,115,53,1,0,0,128,0,240,4,6,5,24,216, + 15,21,143,127,137,127,136,4,240,8,0,12,16,208,11,27, + 216,19,23,136,75,224,11,17,143,63,137,63,128,68,216,7, + 13,128,126,240,2,4,9,17,216,21,27,215,21,38,209,21, + 38,136,70,240,8,3,5,24,216,19,25,151,63,145,63,136, + 8,240,6,0,8,14,128,126,216,11,17,208,11,29,220,21, + 28,152,86,160,89,176,4,211,21,53,136,70,217,15,21,152, + 40,208,26,46,216,21,29,136,70,240,2,3,5,22,216,17, + 23,215,17,34,209,17,34,136,6,240,6,3,5,42,220,37, + 41,168,38,175,47,169,47,211,37,58,208,8,34,244,8,0, + 12,22,144,100,152,70,168,54,212,11,50,128,68,216,34,42, + 208,34,50,153,21,184,22,192,56,209,57,75,128,68,212,4, + 22,216,18,24,128,68,132,75,216,38,64,128,68,212,4,35, + 216,11,15,128,75,248,244,71,1,0,12,26,242,0,1,5, + 13,217,8,12,240,3,1,5,13,251,244,20,0,16,30,242, + 0,2,9,17,225,12,16,240,5,2,9,17,251,244,10,0, + 12,26,242,0,1,5,24,216,19,23,138,8,240,3,1,5, + 24,251,244,18,0,12,26,242,0,1,5,22,216,17,21,138, + 6,240,3,1,5,22,251,244,8,0,12,26,242,0,1,5, + 42,216,37,41,210,8,34,240,3,1,5,42,250,115,87,0, + 0,0,130,12,66,32,0,161,12,66,47,0,174,12,66,62, + 0,193,18,12,67,15,0,193,31,21,67,32,0,194,32,9, + 66,44,3,194,43,1,66,44,3,194,47,9,66,59,3,194, + 58,1,66,59,3,194,62,11,67,12,3,195,11,1,67,12, + 3,195,15,11,67,29,3,195,28,1,67,29,3,195,32,11, + 67,46,3,195,45,1,67,46,3,70,169,1,218,8,111,118, + 101,114,114,105,100,101,99,2,0,0,0,0,0,0,0,1, + 0,0,0,5,0,0,0,3,0,0,0,243,124,3,0,0, + 151,0,124,2,115,13,116,1,0,0,0,0,0,0,0,0, + 124,1,100,1,100,0,171,3,0,0,0,0,0,0,128,18, + 9,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,95,2,0,0,0,0, + 0,0,0,0,124,2,115,13,116,1,0,0,0,0,0,0, + 0,0,124,1,100,2,100,0,171,3,0,0,0,0,0,0, + 128,110,124,0,106,8,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,125,3,124,3,128,88,124,0, + 106,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,129,76,116,12,0,0,0,0,0,0,0,0, + 128,6,116,14,0,0,0,0,0,0,0,0,130,1,116,12, + 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,4,124,4, + 106,19,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,3, 124,0,106,10,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,129,76,116,12,0,0,0,0,0,0, - 0,0,128,6,116,14,0,0,0,0,0,0,0,0,130,1, - 116,12,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,4, - 124,4,106,19,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,3,124,0,106,10,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,3,95,10,0,0,0,0, - 0,0,0,0,124,3,124,0,95,4,0,0,0,0,0,0, - 0,0,100,0,124,1,95,11,0,0,0,0,0,0,0,0, - 9,0,124,3,124,1,95,12,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,3,95,10,0,0,0,0,0,0, + 0,0,124,3,124,0,95,4,0,0,0,0,0,0,0,0, + 100,0,124,1,95,11,0,0,0,0,0,0,0,0,9,0, + 124,3,124,1,95,12,0,0,0,0,0,0,0,0,124,2, + 115,13,116,1,0,0,0,0,0,0,0,0,124,1,100,3, + 100,0,171,3,0,0,0,0,0,0,128,18,9,0,124,0, + 106,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,1,95,14,0,0,0,0,0,0,0,0, + 9,0,124,0,124,1,95,15,0,0,0,0,0,0,0,0, 124,2,115,13,116,1,0,0,0,0,0,0,0,0,124,1, - 100,3,100,0,171,3,0,0,0,0,0,0,128,18,9,0, - 124,0,106,26,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,1,95,14,0,0,0,0,0,0, - 0,0,9,0,124,0,124,1,95,15,0,0,0,0,0,0, - 0,0,124,2,115,13,116,1,0,0,0,0,0,0,0,0, - 124,1,100,4,100,0,171,3,0,0,0,0,0,0,128,30, - 124,0,106,10,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,129,18,9,0,124,0,106,10,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,1,95,16,0,0,0,0,0,0,0,0,124,0,106,34, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,114,80,124,2,115,13,116,1,0,0,0,0,0,0, - 0,0,124,1,100,5,100,0,171,3,0,0,0,0,0,0, - 128,18,9,0,124,0,106,36,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,1,95,11,0,0, - 0,0,0,0,0,0,124,2,115,13,116,1,0,0,0,0, - 0,0,0,0,124,1,100,6,100,0,171,3,0,0,0,0, - 0,0,128,32,124,0,106,38,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,129,20,9,0,124,0, - 106,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,1,95,20,0,0,0,0,0,0,0,0, - 124,1,83,0,124,1,83,0,35,0,116,6,0,0,0,0, - 0,0,0,0,36,0,114,4,1,0,89,0,144,1,140,61, - 119,0,120,3,89,0,119,1,35,0,116,6,0,0,0,0, - 0,0,0,0,36,0,114,3,1,0,89,0,140,207,119,0, + 100,4,100,0,171,3,0,0,0,0,0,0,128,30,124,0, + 106,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,129,18,9,0,124,0,106,10,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,1, + 95,16,0,0,0,0,0,0,0,0,124,0,106,34,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 114,80,124,2,115,13,116,1,0,0,0,0,0,0,0,0, + 124,1,100,5,100,0,171,3,0,0,0,0,0,0,128,18, + 9,0,124,0,106,36,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,124,1,95,11,0,0,0,0, + 0,0,0,0,124,2,115,13,116,1,0,0,0,0,0,0, + 0,0,124,1,100,6,100,0,171,3,0,0,0,0,0,0, + 128,32,124,0,106,38,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,129,20,9,0,124,0,106,38, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,124,1,95,20,0,0,0,0,0,0,0,0,124,1, + 83,0,124,1,83,0,35,0,116,6,0,0,0,0,0,0, + 0,0,36,0,114,4,1,0,89,0,144,1,140,61,119,0, 120,3,89,0,119,1,35,0,116,6,0,0,0,0,0,0, - 0,0,36,0,114,3,1,0,89,0,140,189,119,0,120,3, + 0,0,36,0,114,3,1,0,89,0,140,207,119,0,120,3, 89,0,119,1,35,0,116,6,0,0,0,0,0,0,0,0, - 36,0,114,3,1,0,89,0,140,196,119,0,120,3,89,0, + 36,0,114,3,1,0,89,0,140,189,119,0,120,3,89,0, 119,1,35,0,116,6,0,0,0,0,0,0,0,0,36,0, - 114,3,1,0,89,0,140,166,119,0,120,3,89,0,119,1, + 114,3,1,0,89,0,140,196,119,0,120,3,89,0,119,1, 35,0,116,6,0,0,0,0,0,0,0,0,36,0,114,3, - 1,0,89,0,140,136,119,0,120,3,89,0,119,1,35,0, - 116,6,0,0,0,0,0,0,0,0,36,0,114,4,1,0, - 89,0,124,1,83,0,119,0,120,3,89,0,119,1,41,7, - 78,114,11,0,0,0,114,203,0,0,0,218,11,95,95,112, - 97,99,107,97,103,101,95,95,114,7,1,0,0,114,212,0, - 0,0,114,5,1,0,0,41,21,114,15,0,0,0,114,26, - 0,0,0,114,11,0,0,0,114,4,0,0,0,114,213,0, - 0,0,114,223,0,0,0,114,239,0,0,0,114,240,0,0, - 0,218,15,78,97,109,101,115,112,97,99,101,76,111,97,100, - 101,114,114,41,0,0,0,218,5,95,112,97,116,104,114,212, - 0,0,0,114,203,0,0,0,114,246,0,0,0,114,13,1, - 0,0,114,204,0,0,0,114,7,1,0,0,114,233,0,0, - 0,114,218,0,0,0,114,232,0,0,0,114,5,1,0,0, - 41,5,114,199,0,0,0,114,200,0,0,0,114,11,1,0, - 0,114,213,0,0,0,114,14,1,0,0,115,5,0,0,0, - 32,32,32,32,32,114,7,0,0,0,218,18,95,105,110,105, - 116,95,109,111,100,117,108,101,95,97,116,116,114,115,114,16, - 1,0,0,221,2,0,0,115,245,1,0,0,128,0,241,8, - 0,9,17,148,71,152,70,160,74,176,4,211,20,53,208,20, - 61,240,2,3,9,17,216,30,34,159,105,153,105,136,70,140, - 79,241,8,0,8,16,148,55,152,54,160,60,176,20,211,19, - 54,208,19,62,216,17,21,151,27,145,27,136,6,216,11,17, - 136,62,224,15,19,215,15,46,209,15,46,208,15,58,220,19, - 38,208,19,46,220,26,45,208,20,45,220,34,53,215,34,69, - 209,34,69,144,15,224,25,40,215,25,48,209,25,48,176,31, - 211,25,65,144,6,216,31,35,215,31,62,209,31,62,144,6, - 148,12,216,30,36,144,4,148,11,240,22,0,35,39,144,6, - 148,15,240,2,3,9,17,216,32,38,136,70,212,12,29,241, - 8,0,8,16,148,55,152,54,160,61,176,36,211,19,55,208, - 19,63,240,2,3,9,17,216,33,37,167,27,161,27,136,70, - 212,12,30,240,8,3,5,13,216,26,30,136,6,140,15,241, - 8,0,8,16,148,55,152,54,160,58,168,116,211,19,52,208, - 19,60,216,11,15,215,11,42,209,11,42,208,11,54,240,4, - 3,13,21,216,34,38,215,34,65,209,34,65,144,6,148,15, - 240,8,0,8,12,215,7,24,210,7,24,217,11,19,148,119, - 152,118,160,122,176,52,211,23,56,208,23,64,240,2,3,13, - 21,216,34,38,167,43,161,43,144,6,148,15,241,8,0,12, - 20,148,119,152,118,160,124,176,84,211,23,58,208,23,66,216, - 15,19,143,123,137,123,208,15,38,240,2,3,17,25,216,40, - 44,175,11,169,11,144,70,212,20,37,240,6,0,12,18,128, - 77,136,54,128,77,248,244,127,1,0,16,30,242,0,1,9, - 17,218,12,16,240,3,1,9,17,251,244,56,0,16,30,242, - 0,1,9,17,217,12,16,240,3,1,9,17,251,244,12,0, - 16,30,242,0,1,9,17,217,12,16,240,3,1,9,17,251, - 244,10,0,12,26,242,0,1,5,13,217,8,12,240,3,1, - 5,13,251,244,16,0,20,34,242,0,1,13,21,217,16,20, - 240,3,1,13,21,251,244,14,0,20,34,242,0,1,13,21, - 217,16,20,240,3,1,13,21,251,244,14,0,24,38,242,0, - 1,17,25,216,20,24,216,11,17,128,77,240,5,1,17,25, - 250,115,125,0,0,0,145,17,69,19,0,194,24,7,69,35, - 0,194,47,17,69,50,0,195,1,7,70,1,0,195,36,17, - 70,16,0,196,17,17,70,31,0,196,62,17,70,46,0,197, - 19,9,69,32,3,197,31,1,69,32,3,197,35,9,69,47, - 3,197,46,1,69,47,3,197,50,9,69,62,3,197,61,1, - 69,62,3,198,1,9,70,13,3,198,12,1,70,13,3,198, - 16,9,70,28,3,198,27,1,70,28,3,198,31,9,70,43, - 3,198,42,1,70,43,3,198,46,9,70,59,3,198,58,1, - 70,59,3,99,1,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,3,0,0,0,243,246,0,0,0,151,0,100, - 1,125,1,116,1,0,0,0,0,0,0,0,0,124,0,106, + 1,0,89,0,140,166,119,0,120,3,89,0,119,1,35,0, + 116,6,0,0,0,0,0,0,0,0,36,0,114,3,1,0, + 89,0,140,136,119,0,120,3,89,0,119,1,35,0,116,6, + 0,0,0,0,0,0,0,0,36,0,114,4,1,0,89,0, + 124,1,83,0,119,0,120,3,89,0,119,1,41,7,78,114, + 11,0,0,0,114,203,0,0,0,218,11,95,95,112,97,99, + 107,97,103,101,95,95,114,7,1,0,0,114,212,0,0,0, + 114,5,1,0,0,41,21,114,15,0,0,0,114,26,0,0, + 0,114,11,0,0,0,114,4,0,0,0,114,213,0,0,0, + 114,223,0,0,0,114,239,0,0,0,114,240,0,0,0,218, + 15,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, + 114,41,0,0,0,218,5,95,112,97,116,104,114,212,0,0, + 0,114,203,0,0,0,114,246,0,0,0,114,13,1,0,0, + 114,204,0,0,0,114,7,1,0,0,114,233,0,0,0,114, + 218,0,0,0,114,232,0,0,0,114,5,1,0,0,41,5, + 114,199,0,0,0,114,200,0,0,0,114,11,1,0,0,114, + 213,0,0,0,114,14,1,0,0,115,5,0,0,0,32,32, + 32,32,32,114,7,0,0,0,218,18,95,105,110,105,116,95, + 109,111,100,117,108,101,95,97,116,116,114,115,114,16,1,0, + 0,221,2,0,0,115,245,1,0,0,128,0,241,8,0,9, + 17,148,71,152,70,160,74,176,4,211,20,53,208,20,61,240, + 2,3,9,17,216,30,34,159,105,153,105,136,70,140,79,241, + 8,0,8,16,148,55,152,54,160,60,176,20,211,19,54,208, + 19,62,216,17,21,151,27,145,27,136,6,216,11,17,136,62, + 224,15,19,215,15,46,209,15,46,208,15,58,220,19,38,208, + 19,46,220,26,45,208,20,45,220,34,53,215,34,69,209,34, + 69,144,15,224,25,40,215,25,48,209,25,48,176,31,211,25, + 65,144,6,216,31,35,215,31,62,209,31,62,144,6,148,12, + 216,30,36,144,4,148,11,240,22,0,35,39,144,6,148,15, + 240,2,3,9,17,216,32,38,136,70,212,12,29,241,8,0, + 8,16,148,55,152,54,160,61,176,36,211,19,55,208,19,63, + 240,2,3,9,17,216,33,37,167,27,161,27,136,70,212,12, + 30,240,8,3,5,13,216,26,30,136,6,140,15,241,8,0, + 8,16,148,55,152,54,160,58,168,116,211,19,52,208,19,60, + 216,11,15,215,11,42,209,11,42,208,11,54,240,4,3,13, + 21,216,34,38,215,34,65,209,34,65,144,6,148,15,240,8, + 0,8,12,215,7,24,210,7,24,217,11,19,148,119,152,118, + 160,122,176,52,211,23,56,208,23,64,240,2,3,13,21,216, + 34,38,167,43,161,43,144,6,148,15,241,8,0,12,20,148, + 119,152,118,160,124,176,84,211,23,58,208,23,66,216,15,19, + 143,123,137,123,208,15,38,240,2,3,17,25,216,40,44,175, + 11,169,11,144,70,212,20,37,240,6,0,12,18,128,77,136, + 54,128,77,248,244,127,1,0,16,30,242,0,1,9,17,218, + 12,16,240,3,1,9,17,251,244,56,0,16,30,242,0,1, + 9,17,217,12,16,240,3,1,9,17,251,244,12,0,16,30, + 242,0,1,9,17,217,12,16,240,3,1,9,17,251,244,10, + 0,12,26,242,0,1,5,13,217,8,12,240,3,1,5,13, + 251,244,16,0,20,34,242,0,1,13,21,217,16,20,240,3, + 1,13,21,251,244,14,0,20,34,242,0,1,13,21,217,16, + 20,240,3,1,13,21,251,244,14,0,24,38,242,0,1,17, + 25,216,20,24,216,11,17,128,77,240,5,1,17,25,250,115, + 125,0,0,0,145,17,69,19,0,194,24,7,69,35,0,194, + 47,17,69,50,0,195,1,7,70,1,0,195,36,17,70,16, + 0,196,17,17,70,31,0,196,62,17,70,46,0,197,19,9, + 69,32,3,197,31,1,69,32,3,197,35,9,69,47,3,197, + 46,1,69,47,3,197,50,9,69,62,3,197,61,1,69,62, + 3,198,1,9,70,13,3,198,12,1,70,13,3,198,16,9, + 70,28,3,198,27,1,70,28,3,198,31,9,70,43,3,198, + 42,1,70,43,3,198,46,9,70,59,3,198,58,1,70,59, + 3,99,1,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,3,0,0,0,243,246,0,0,0,151,0,100,1,125, + 1,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,100,2,171,2,0,0,0,0,0,0,114,28,124,0,106, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,100,2,171,2,0,0,0,0,0,0,114,28,124, + 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,125,1,110,33,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,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,125,1,110,33,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,100,3,171,2,0,0,0,0,0, - 0,114,11,116,7,0,0,0,0,0,0,0,0,100,4,171, - 1,0,0,0,0,0,0,130,1,124,1,128,21,116,9,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,171,1,0, - 0,0,0,0,0,125,1,116,13,0,0,0,0,0,0,0, - 0,124,0,124,1,171,2,0,0,0,0,0,0,1,0,124, - 1,83,0,41,5,122,43,67,114,101,97,116,101,32,97,32, - 109,111,100,117,108,101,32,98,97,115,101,100,32,111,110,32, - 116,104,101,32,112,114,111,118,105,100,101,100,32,115,112,101, - 99,46,78,218,13,99,114,101,97,116,101,95,109,111,100,117, - 108,101,218,11,101,120,101,99,95,109,111,100,117,108,101,122, - 66,108,111,97,100,101,114,115,32,116,104,97,116,32,100,101, - 102,105,110,101,32,101,120,101,99,95,109,111,100,117,108,101, - 40,41,32,109,117,115,116,32,97,108,115,111,32,100,101,102, - 105,110,101,32,99,114,101,97,116,101,95,109,111,100,117,108, - 101,40,41,41,7,114,13,0,0,0,114,213,0,0,0,114, - 18,1,0,0,114,178,0,0,0,114,27,0,0,0,114,26, - 0,0,0,114,16,1,0,0,169,2,114,199,0,0,0,114, - 200,0,0,0,115,2,0,0,0,32,32,114,7,0,0,0, - 218,16,109,111,100,117,108,101,95,102,114,111,109,95,115,112, - 101,99,114,21,1,0,0,38,3,0,0,115,111,0,0,0, - 128,0,240,6,0,14,18,128,70,220,7,14,136,116,143,123, - 137,123,152,79,212,7,44,240,6,0,18,22,151,27,145,27, - 215,17,42,209,17,42,168,52,211,17,48,137,6,220,9,16, - 144,20,151,27,145,27,152,109,212,9,44,220,14,25,240,0, - 1,27,61,243,0,1,15,62,240,0,1,9,62,224,7,13, - 128,126,220,17,28,152,84,159,89,153,89,211,17,39,136,6, - 220,4,22,144,116,152,86,212,4,36,216,11,17,128,77,114, - 22,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,120,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,128,2,100,1,110,11,124,0,106,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,125,1,124,0,106,2,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,128,89,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,128,6,100,2,124,1,155,2,100,3, - 157,3,83,0,116,6,0,0,0,0,0,0,0,0,129,54, - 116,9,0,0,0,0,0,0,0,0,124,2,116,6,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,2,0,0,0,0, - 0,0,114,28,100,2,124,1,155,2,100,4,116,13,0,0, - 0,0,0,0,0,0,124,2,106,14,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,155,0,100,3,157,5,83,0,100,2,124,1, - 155,2,100,5,124,2,155,2,100,6,157,5,83,0,124,0, - 106,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,114,19,100,2,124,1,155,2,100,7,124,0, - 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,5,83,0,100,2,124,0, + 0,0,0,0,0,100,3,171,2,0,0,0,0,0,0,114, + 11,116,7,0,0,0,0,0,0,0,0,100,4,171,1,0, + 0,0,0,0,0,130,1,124,1,128,21,116,9,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,171,1,0,0,0, + 0,0,0,125,1,116,13,0,0,0,0,0,0,0,0,124, + 0,124,1,171,2,0,0,0,0,0,0,1,0,124,1,83, + 0,41,5,122,43,67,114,101,97,116,101,32,97,32,109,111, + 100,117,108,101,32,98,97,115,101,100,32,111,110,32,116,104, + 101,32,112,114,111,118,105,100,101,100,32,115,112,101,99,46, + 78,218,13,99,114,101,97,116,101,95,109,111,100,117,108,101, + 218,11,101,120,101,99,95,109,111,100,117,108,101,122,66,108, + 111,97,100,101,114,115,32,116,104,97,116,32,100,101,102,105, + 110,101,32,101,120,101,99,95,109,111,100,117,108,101,40,41, + 32,109,117,115,116,32,97,108,115,111,32,100,101,102,105,110, + 101,32,99,114,101,97,116,101,95,109,111,100,117,108,101,40, + 41,41,7,114,13,0,0,0,114,213,0,0,0,114,18,1, + 0,0,114,178,0,0,0,114,27,0,0,0,114,26,0,0, + 0,114,16,1,0,0,169,2,114,199,0,0,0,114,200,0, + 0,0,115,2,0,0,0,32,32,114,7,0,0,0,218,16, + 109,111,100,117,108,101,95,102,114,111,109,95,115,112,101,99, + 114,21,1,0,0,38,3,0,0,115,111,0,0,0,128,0, + 240,6,0,14,18,128,70,220,7,14,136,116,143,123,137,123, + 152,79,212,7,44,240,6,0,18,22,151,27,145,27,215,17, + 42,209,17,42,168,52,211,17,48,137,6,220,9,16,144,20, + 151,27,145,27,152,109,212,9,44,220,14,25,240,0,1,27, + 61,243,0,1,15,62,240,0,1,9,62,224,7,13,128,126, + 220,17,28,152,84,159,89,153,89,211,17,39,136,6,220,4, + 22,144,116,152,86,212,4,36,216,11,17,128,77,114,22,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,120,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,155,2,100,5,124,0,106,2,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,0, - 100,6,157,5,83,0,41,8,122,38,82,101,116,117,114,110, - 32,116,104,101,32,114,101,112,114,32,116,111,32,117,115,101, - 32,102,111,114,32,116,104,101,32,109,111,100,117,108,101,46, - 114,205,0,0,0,114,206,0,0,0,114,208,0,0,0,122, - 18,32,40,110,97,109,101,115,112,97,99,101,41,32,102,114, - 111,109,32,114,209,0,0,0,114,210,0,0,0,114,207,0, - 0,0,41,9,114,26,0,0,0,114,218,0,0,0,114,213, - 0,0,0,114,239,0,0,0,218,10,105,115,105,110,115,116, - 97,110,99,101,114,14,1,0,0,114,6,1,0,0,114,15, - 1,0,0,114,233,0,0,0,41,3,114,199,0,0,0,114, - 26,0,0,0,114,213,0,0,0,115,3,0,0,0,32,32, - 32,114,7,0,0,0,114,211,0,0,0,114,211,0,0,0, - 55,3,0,0,115,200,0,0,0,128,0,224,18,22,151,41, - 145,41,208,18,35,137,51,168,20,175,25,169,25,128,68,216, - 7,11,135,123,129,123,208,7,26,216,17,21,151,27,145,27, - 136,6,216,11,17,136,62,216,21,29,152,100,152,88,160,81, - 208,19,39,208,12,39,228,12,31,208,12,43,220,16,26,152, - 54,212,35,54,215,35,70,209,35,70,212,16,71,224,21,29, - 152,100,152,88,208,37,55,188,4,184,86,191,92,185,92,211, - 56,74,208,55,75,200,49,208,19,77,208,12,77,224,21,29, - 152,100,152,88,160,82,168,6,160,122,176,18,208,19,52,208, - 12,52,224,11,15,215,11,28,210,11,28,216,21,29,152,100, - 152,88,160,86,168,68,175,75,169,75,168,63,184,33,208,19, - 60,208,12,60,224,21,29,152,100,159,105,153,105,152,93,168, - 34,168,84,175,91,169,91,168,77,184,18,208,19,60,208,12, - 60,114,22,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,132,3,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,2,116,3,0,0,0,0, - 0,0,0,0,124,2,171,1,0,0,0,0,0,0,53,0, - 1,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, - 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,124,1, - 117,1,114,19,100,1,124,2,155,2,100,2,157,3,125,3, - 116,11,0,0,0,0,0,0,0,0,124,3,124,2,172,3, - 171,2,0,0,0,0,0,0,130,1,9,0,124,0,106,12, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,128,50,124,0,106,14,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,128,23,116,11,0,0, - 0,0,0,0,0,0,100,5,124,0,106,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,172,3, - 171,2,0,0,0,0,0,0,130,1,116,17,0,0,0,0, - 0,0,0,0,124,0,124,1,100,6,172,7,171,3,0,0, - 0,0,0,0,1,0,110,141,116,17,0,0,0,0,0,0, - 0,0,124,0,124,1,100,6,172,7,171,3,0,0,0,0, - 0,0,1,0,116,19,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,100,8,171,2,0,0,0,0,0,0,115,78, - 116,21,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,1,0,0,0,0,0,0,155,0,100,9,157,2,125,3, - 116,22,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,124,3, - 116,26,0,0,0,0,0,0,0,0,171,2,0,0,0,0, - 0,0,1,0,124,0,106,12,0,0,0,0,0,0,0,0, - 0,0,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,124,2, - 171,1,0,0,0,0,0,0,1,0,110,27,124,0,106,12, - 0,0,0,0,0,0,0,0,0,0,0,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,124,1,171,1,0,0,0,0,0,0, - 1,0,116,4,0,0,0,0,0,0,0,0,106,6,0,0, + 0,0,0,0,128,2,100,1,110,11,124,0,106,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 106,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,0,106,0,0,0,0,0,0,0,0,0, + 125,1,124,0,106,2,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,128,89,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,128,6,100,2,124,1,155,2,100,3,157,3, + 83,0,116,6,0,0,0,0,0,0,0,0,129,54,116,9, + 0,0,0,0,0,0,0,0,124,2,116,6,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,2,0,0,0,0,0,0, + 114,28,100,2,124,1,155,2,100,4,116,13,0,0,0,0, + 0,0,0,0,124,2,106,14,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,1,124,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,124,0,106,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,60,0,0,0,9,0, - 100,4,100,4,100,4,171,2,0,0,0,0,0,0,1,0, - 124,1,83,0,35,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,106,33,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,0,106,0,0,0,0,0, + 0,0,155,0,100,3,157,5,83,0,100,2,124,1,155,2, + 100,5,124,2,155,2,100,6,157,5,83,0,124,0,106,16, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,114,19,100,2,124,1,155,2,100,7,124,0,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,5,83,0,100,2,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,5,124,0,106,2,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,155,0,100,6, + 157,5,83,0,41,8,122,38,82,101,116,117,114,110,32,116, + 104,101,32,114,101,112,114,32,116,111,32,117,115,101,32,102, + 111,114,32,116,104,101,32,109,111,100,117,108,101,46,114,205, + 0,0,0,114,206,0,0,0,114,208,0,0,0,122,18,32, + 40,110,97,109,101,115,112,97,99,101,41,32,102,114,111,109, + 32,114,209,0,0,0,114,210,0,0,0,114,207,0,0,0, + 41,9,114,26,0,0,0,114,218,0,0,0,114,213,0,0, + 0,114,239,0,0,0,218,10,105,115,105,110,115,116,97,110, + 99,101,114,14,1,0,0,114,6,1,0,0,114,15,1,0, + 0,114,233,0,0,0,41,3,114,199,0,0,0,114,26,0, + 0,0,114,213,0,0,0,115,3,0,0,0,32,32,32,114, + 7,0,0,0,114,211,0,0,0,114,211,0,0,0,55,3, + 0,0,115,200,0,0,0,128,0,224,18,22,151,41,145,41, + 208,18,35,137,51,168,20,175,25,169,25,128,68,216,7,11, + 135,123,129,123,208,7,26,216,17,21,151,27,145,27,136,6, + 216,11,17,136,62,216,21,29,152,100,152,88,160,81,208,19, + 39,208,12,39,228,12,31,208,12,43,220,16,26,152,54,212, + 35,54,215,35,70,209,35,70,212,16,71,224,21,29,152,100, + 152,88,208,37,55,188,4,184,86,191,92,185,92,211,56,74, + 208,55,75,200,49,208,19,77,208,12,77,224,21,29,152,100, + 152,88,160,82,168,6,160,122,176,18,208,19,52,208,12,52, + 224,11,15,215,11,28,210,11,28,216,21,29,152,100,152,88, + 160,86,168,68,175,75,169,75,168,63,184,33,208,19,60,208, + 12,60,224,21,29,152,100,159,105,153,105,152,93,168,34,168, + 84,175,91,169,91,168,77,184,18,208,19,60,208,12,60,114, + 22,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,132,3,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,2,116,3,0,0,0,0,0,0, + 0,0,124,2,171,1,0,0,0,0,0,0,53,0,1,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,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,124,1,117,1, + 114,19,100,1,124,2,155,2,100,2,157,3,125,3,116,11, + 0,0,0,0,0,0,0,0,124,3,124,2,172,3,171,2, + 0,0,0,0,0,0,130,1,9,0,124,0,106,12,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 128,50,124,0,106,14,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,128,23,116,11,0,0,0,0, + 0,0,0,0,100,5,124,0,106,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,172,3,171,2, + 0,0,0,0,0,0,130,1,116,17,0,0,0,0,0,0, + 0,0,124,0,124,1,100,6,172,7,171,3,0,0,0,0, + 0,0,1,0,110,141,116,17,0,0,0,0,0,0,0,0, + 124,0,124,1,100,6,172,7,171,3,0,0,0,0,0,0, + 1,0,116,19,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,100,8,171,2,0,0,0,0,0,0,115,78,116,21, + 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,1, - 0,0,0,0,0,0,125,1,124,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,124,0,106,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,0, - 0,0,119,0,120,3,89,0,119,1,35,0,49,0,115,1, - 119,2,1,0,89,0,1,0,1,0,124,1,83,0,120,3, - 89,0,119,1,41,10,122,70,69,120,101,99,117,116,101,32, - 116,104,101,32,115,112,101,99,39,115,32,115,112,101,99,105, - 102,105,101,100,32,109,111,100,117,108,101,32,105,110,32,97, - 110,32,101,120,105,115,116,105,110,103,32,109,111,100,117,108, - 101,39,115,32,110,97,109,101,115,112,97,99,101,46,122,7, - 109,111,100,117,108,101,32,122,19,32,110,111,116,32,105,110, - 32,115,121,115,46,109,111,100,117,108,101,115,114,25,0,0, - 0,78,250,14,109,105,115,115,105,110,103,32,108,111,97,100, - 101,114,84,114,10,1,0,0,114,19,1,0,0,250,55,46, - 101,120,101,99,95,109,111,100,117,108,101,40,41,32,110,111, - 116,32,102,111,117,110,100,59,32,102,97,108,108,105,110,103, - 32,98,97,99,107,32,116,111,32,108,111,97,100,95,109,111, - 100,117,108,101,40,41,41,17,114,26,0,0,0,114,142,0, - 0,0,114,24,0,0,0,114,195,0,0,0,114,76,0,0, - 0,114,178,0,0,0,114,213,0,0,0,114,223,0,0,0, - 114,16,1,0,0,114,13,0,0,0,114,8,0,0,0,114, - 191,0,0,0,114,192,0,0,0,218,13,73,109,112,111,114, - 116,87,97,114,110,105,110,103,218,11,108,111,97,100,95,109, - 111,100,117,108,101,114,19,1,0,0,114,68,0,0,0,41, - 4,114,199,0,0,0,114,200,0,0,0,114,26,0,0,0, - 114,198,0,0,0,115,4,0,0,0,32,32,32,32,114,7, - 0,0,0,114,196,0,0,0,114,196,0,0,0,77,3,0, - 0,115,83,1,0,0,128,0,224,11,15,143,57,137,57,128, - 68,220,9,27,152,68,213,9,33,220,11,14,143,59,137,59, - 143,63,137,63,152,52,211,11,32,168,6,209,11,46,216,20, - 27,152,68,152,56,208,35,54,208,18,55,136,67,220,18,29, - 152,99,168,4,212,18,45,208,12,45,240,2,19,9,44,216, - 15,19,143,123,137,123,208,15,34,216,19,23,215,19,50,209, - 19,50,208,19,58,220,26,37,208,38,54,184,84,191,89,185, - 89,212,26,71,208,20,71,228,16,34,160,52,168,22,184,36, - 214,16,63,228,16,34,160,52,168,22,184,36,213,16,63,220, - 23,30,152,116,159,123,153,123,168,77,212,23,58,220,30,42, - 168,52,175,59,169,59,211,30,55,208,29,56,240,0,1,57, - 59,240,0,1,28,59,144,67,228,20,29,151,78,145,78,160, - 51,172,13,212,20,54,216,20,24,151,75,145,75,215,20,43, - 209,20,43,168,68,213,20,49,224,20,24,151,75,145,75,215, - 20,43,209,20,43,168,70,212,20,51,244,8,0,22,25,151, - 91,145,91,151,95,145,95,160,84,167,89,161,89,211,21,47, - 136,70,216,37,43,140,67,143,75,137,75,152,4,159,9,153, - 9,210,12,34,247,47,0,10,34,240,48,0,12,18,128,77, - 248,244,5,0,22,25,151,91,145,91,151,95,145,95,160,84, - 167,89,161,89,211,21,47,136,70,216,37,43,140,67,143,75, - 137,75,152,4,159,9,153,9,210,12,34,250,247,47,0,10, - 34,240,48,0,12,18,128,77,250,115,38,0,0,0,152,53, - 70,53,3,193,14,67,11,69,42,2,196,25,65,6,70,53, - 3,197,42,65,8,70,50,5,198,50,3,70,53,3,198,53, - 5,70,63,7,99,1,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,3,0,0,0,243,18,3,0,0,151,0, - 9,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,155,0,100,9,157,2,125,3,116,22, + 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,124,3,116,26, + 0,0,0,0,0,0,0,0,171,2,0,0,0,0,0,0, + 1,0,124,0,106,12,0,0,0,0,0,0,0,0,0,0, + 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,124,2,171,1, + 0,0,0,0,0,0,1,0,110,27,124,0,106,12,0,0, + 0,0,0,0,0,0,0,0,0,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,124,1,171,1,0,0,0,0,0,0,1,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,106,33, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,124,0,106,0,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,1,124,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,124,0,106,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,60,0,0,0,9,0,100,4, + 100,4,100,4,171,2,0,0,0,0,0,0,1,0,124,1, + 83,0,35,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,106,33,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,0,106,0,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,1,124,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,124,0,106,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,60,0,0,0, + 119,0,120,3,89,0,119,1,35,0,49,0,115,1,119,2, + 1,0,89,0,1,0,1,0,124,1,83,0,120,3,89,0, + 119,1,41,10,122,70,69,120,101,99,117,116,101,32,116,104, + 101,32,115,112,101,99,39,115,32,115,112,101,99,105,102,105, + 101,100,32,109,111,100,117,108,101,32,105,110,32,97,110,32, + 101,120,105,115,116,105,110,103,32,109,111,100,117,108,101,39, + 115,32,110,97,109,101,115,112,97,99,101,46,122,7,109,111, + 100,117,108,101,32,122,19,32,110,111,116,32,105,110,32,115, + 121,115,46,109,111,100,117,108,101,115,114,25,0,0,0,78, + 250,14,109,105,115,115,105,110,103,32,108,111,97,100,101,114, + 84,114,10,1,0,0,114,19,1,0,0,250,55,46,101,120, + 101,99,95,109,111,100,117,108,101,40,41,32,110,111,116,32, + 102,111,117,110,100,59,32,102,97,108,108,105,110,103,32,98, + 97,99,107,32,116,111,32,108,111,97,100,95,109,111,100,117, + 108,101,40,41,41,17,114,26,0,0,0,114,142,0,0,0, + 114,24,0,0,0,114,195,0,0,0,114,76,0,0,0,114, + 178,0,0,0,114,213,0,0,0,114,223,0,0,0,114,16, + 1,0,0,114,13,0,0,0,114,8,0,0,0,114,191,0, + 0,0,114,192,0,0,0,218,13,73,109,112,111,114,116,87, + 97,114,110,105,110,103,218,11,108,111,97,100,95,109,111,100, + 117,108,101,114,19,1,0,0,114,68,0,0,0,41,4,114, + 199,0,0,0,114,200,0,0,0,114,26,0,0,0,114,198, + 0,0,0,115,4,0,0,0,32,32,32,32,114,7,0,0, + 0,114,196,0,0,0,114,196,0,0,0,77,3,0,0,115, + 83,1,0,0,128,0,224,11,15,143,57,137,57,128,68,220, + 9,27,152,68,213,9,33,220,11,14,143,59,137,59,143,63, + 137,63,152,52,211,11,32,168,6,209,11,46,216,20,27,152, + 68,152,56,208,35,54,208,18,55,136,67,220,18,29,152,99, + 168,4,212,18,45,208,12,45,240,2,19,9,44,216,15,19, + 143,123,137,123,208,15,34,216,19,23,215,19,50,209,19,50, + 208,19,58,220,26,37,208,38,54,184,84,191,89,185,89,212, + 26,71,208,20,71,228,16,34,160,52,168,22,184,36,214,16, + 63,228,16,34,160,52,168,22,184,36,213,16,63,220,23,30, + 152,116,159,123,153,123,168,77,212,23,58,220,30,42,168,52, + 175,59,169,59,211,30,55,208,29,56,240,0,1,57,59,240, + 0,1,28,59,144,67,228,20,29,151,78,145,78,160,51,172, + 13,212,20,54,216,20,24,151,75,145,75,215,20,43,209,20, + 43,168,68,213,20,49,224,20,24,151,75,145,75,215,20,43, + 209,20,43,168,70,212,20,51,244,8,0,22,25,151,91,145, + 91,151,95,145,95,160,84,167,89,161,89,211,21,47,136,70, + 216,37,43,140,67,143,75,137,75,152,4,159,9,153,9,210, + 12,34,247,47,0,10,34,240,48,0,12,18,128,77,248,244, + 5,0,22,25,151,91,145,91,151,95,145,95,160,84,167,89, + 161,89,211,21,47,136,70,216,37,43,140,67,143,75,137,75, + 152,4,159,9,153,9,210,12,34,250,247,47,0,10,34,240, + 48,0,12,18,128,77,250,115,38,0,0,0,152,53,70,53, + 3,193,14,67,11,69,42,2,196,25,65,6,70,53,3,197, + 42,65,8,70,50,5,198,50,3,70,53,3,198,53,5,70, + 63,7,99,1,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,3,0,0,0,243,18,3,0,0,151,0,9,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,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,1,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,106,11,0,0,0,0,0,0, 0,0,0,0,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,1,0,116,6,0,0, + 0,0,171,1,0,0,0,0,0,0,125,1,124,1,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,106,4, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,60,0,0,0,116,13,0,0,0,0,0,0,0,0, + 124,1,100,1,100,0,171,3,0,0,0,0,0,0,128,18, + 9,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,95,7,0,0,0,0, + 0,0,0,0,116,13,0,0,0,0,0,0,0,0,124,1, + 100,2,100,0,171,3,0,0,0,0,0,0,128,65,9,0, + 124,1,106,18,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,1,95,10,0,0,0,0,0,0, + 0,0,116,23,0,0,0,0,0,0,0,0,124,1,100,3, + 171,2,0,0,0,0,0,0,115,35,124,0,106,4,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,4,171,1,0,0,0,0,0,0,100,5, + 25,0,0,0,124,1,95,10,0,0,0,0,0,0,0,0, + 116,13,0,0,0,0,0,0,0,0,124,1,100,6,100,0, + 171,3,0,0,0,0,0,0,128,10,9,0,124,0,124,1, + 95,13,0,0,0,0,0,0,0,0,124,1,83,0,124,1, + 83,0,35,0,1,0,124,0,106,4,0,0,0,0,0,0, + 0,0,0,0,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,106,11,0,0,0,0, - 0,0,0,0,0,0,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,125,1,124,1, - 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, - 106,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,60,0,0,0,116,13,0,0,0,0,0,0, - 0,0,124,1,100,1,100,0,171,3,0,0,0,0,0,0, - 128,18,9,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,95,7,0,0, - 0,0,0,0,0,0,116,13,0,0,0,0,0,0,0,0, - 124,1,100,2,100,0,171,3,0,0,0,0,0,0,128,65, - 9,0,124,1,106,18,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,1,95,10,0,0,0,0, - 0,0,0,0,116,23,0,0,0,0,0,0,0,0,124,1, - 100,3,171,2,0,0,0,0,0,0,115,35,124,0,106,4, - 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,4,171,1,0,0,0,0,0,0, - 100,5,25,0,0,0,124,1,95,10,0,0,0,0,0,0, - 0,0,116,13,0,0,0,0,0,0,0,0,124,1,100,6, - 100,0,171,3,0,0,0,0,0,0,128,10,9,0,124,0, - 124,1,95,13,0,0,0,0,0,0,0,0,124,1,83,0, - 124,1,83,0,35,0,1,0,124,0,106,4,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,6, + 0,0,0,0,0,0,0,0,0,0,118,0,114,70,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,118,0,114,70, - 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,106,11, + 0,0,0,0,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, - 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, - 125,1,124,1,116,6,0,0,0,0,0,0,0,0,106,8, + 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,125,1, + 124,1,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, - 0,0,124,0,106,4,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,60,0,0,0,130,0,120,3, - 89,0,119,1,35,0,116,16,0,0,0,0,0,0,0,0, - 36,0,114,3,1,0,89,0,140,218,119,0,120,3,89,0, + 124,0,106,4,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,60,0,0,0,130,0,120,3,89,0, 119,1,35,0,116,16,0,0,0,0,0,0,0,0,36,0, - 114,3,1,0,89,0,140,155,119,0,120,3,89,0,119,1, - 35,0,116,16,0,0,0,0,0,0,0,0,36,0,114,4, - 1,0,89,0,124,1,83,0,119,0,120,3,89,0,119,1, - 41,7,78,114,203,0,0,0,114,13,1,0,0,114,7,1, - 0,0,114,244,0,0,0,114,125,0,0,0,114,204,0,0, - 0,41,14,114,213,0,0,0,114,28,1,0,0,114,26,0, - 0,0,114,24,0,0,0,114,195,0,0,0,114,68,0,0, - 0,114,15,0,0,0,114,203,0,0,0,114,4,0,0,0, - 114,11,0,0,0,114,13,1,0,0,114,13,0,0,0,114, - 245,0,0,0,114,204,0,0,0,114,20,1,0,0,115,2, - 0,0,0,32,32,114,7,0,0,0,218,25,95,108,111,97, - 100,95,98,97,99,107,119,97,114,100,95,99,111,109,112,97, - 116,105,98,108,101,114,30,1,0,0,107,3,0,0,115,89, - 1,0,0,128,0,240,6,6,5,14,216,8,12,143,11,137, - 11,215,8,31,209,8,31,160,4,167,9,161,9,212,8,42, - 244,16,0,14,17,143,91,137,91,143,95,137,95,152,84,159, - 89,153,89,211,13,39,128,70,216,29,35,132,67,135,75,129, - 75,144,4,151,9,145,9,209,4,26,220,7,14,136,118,144, - 124,160,84,211,7,42,208,7,50,240,2,3,9,17,216,32, - 36,167,11,161,11,136,70,212,12,29,244,6,0,8,15,136, - 118,144,125,160,100,211,7,43,208,7,51,240,2,8,9,17, - 240,8,0,34,40,167,31,161,31,136,70,212,12,30,220,19, - 26,152,54,160,58,212,19,46,216,37,41,167,89,161,89,215, - 37,57,209,37,57,184,35,211,37,62,184,113,209,37,65,144, - 6,212,16,34,244,6,0,8,15,136,118,144,122,160,52,211, - 7,40,208,7,48,240,2,3,9,17,216,30,34,136,70,140, - 79,240,6,0,12,18,128,77,136,54,128,77,248,240,59,4, - 5,14,216,11,15,143,57,137,57,156,3,159,11,153,11,209, - 11,35,220,21,24,151,91,145,91,151,95,145,95,160,84,167, - 89,161,89,211,21,47,136,70,216,37,43,140,67,143,75,137, - 75,152,4,159,9,153,9,209,12,34,216,8,13,251,244,16, - 0,16,30,242,0,1,9,17,217,12,16,240,3,1,9,17, - 251,244,20,0,16,30,242,0,1,9,17,217,12,16,240,3, - 1,9,17,251,244,10,0,16,30,242,0,1,9,17,216,12, - 16,216,11,17,128,77,240,5,1,9,17,250,115,67,0,0, - 0,130,37,67,51,0,193,59,17,69,27,0,194,26,65,0, - 69,42,0,195,40,7,69,57,0,195,51,65,37,69,24,3, - 197,27,9,69,39,3,197,38,1,69,39,3,197,42,9,69, - 54,3,197,53,1,69,54,3,197,57,9,70,6,3,198,5, - 1,70,6,3,99,1,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,3,0,0,0,243,16,3,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,129,83,116,3,0,0,0,0,0,0, - 0,0,124,0,106,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,100,1,171,2,0,0,0,0, - 0,0,115,61,116,5,0,0,0,0,0,0,0,0,124,0, + 114,3,1,0,89,0,140,218,119,0,120,3,89,0,119,1, + 35,0,116,16,0,0,0,0,0,0,0,0,36,0,114,3, + 1,0,89,0,140,155,119,0,120,3,89,0,119,1,35,0, + 116,16,0,0,0,0,0,0,0,0,36,0,114,4,1,0, + 89,0,124,1,83,0,119,0,120,3,89,0,119,1,41,7, + 78,114,203,0,0,0,114,13,1,0,0,114,7,1,0,0, + 114,244,0,0,0,114,125,0,0,0,114,204,0,0,0,41, + 14,114,213,0,0,0,114,28,1,0,0,114,26,0,0,0, + 114,24,0,0,0,114,195,0,0,0,114,68,0,0,0,114, + 15,0,0,0,114,203,0,0,0,114,4,0,0,0,114,11, + 0,0,0,114,13,1,0,0,114,13,0,0,0,114,245,0, + 0,0,114,204,0,0,0,114,20,1,0,0,115,2,0,0, + 0,32,32,114,7,0,0,0,218,25,95,108,111,97,100,95, + 98,97,99,107,119,97,114,100,95,99,111,109,112,97,116,105, + 98,108,101,114,30,1,0,0,107,3,0,0,115,89,1,0, + 0,128,0,240,6,6,5,14,216,8,12,143,11,137,11,215, + 8,31,209,8,31,160,4,167,9,161,9,212,8,42,244,16, + 0,14,17,143,91,137,91,143,95,137,95,152,84,159,89,153, + 89,211,13,39,128,70,216,29,35,132,67,135,75,129,75,144, + 4,151,9,145,9,209,4,26,220,7,14,136,118,144,124,160, + 84,211,7,42,208,7,50,240,2,3,9,17,216,32,36,167, + 11,161,11,136,70,212,12,29,244,6,0,8,15,136,118,144, + 125,160,100,211,7,43,208,7,51,240,2,8,9,17,240,8, + 0,34,40,167,31,161,31,136,70,212,12,30,220,19,26,152, + 54,160,58,212,19,46,216,37,41,167,89,161,89,215,37,57, + 209,37,57,184,35,211,37,62,184,113,209,37,65,144,6,212, + 16,34,244,6,0,8,15,136,118,144,122,160,52,211,7,40, + 208,7,48,240,2,3,9,17,216,30,34,136,70,140,79,240, + 6,0,12,18,128,77,136,54,128,77,248,240,59,4,5,14, + 216,11,15,143,57,137,57,156,3,159,11,153,11,209,11,35, + 220,21,24,151,91,145,91,151,95,145,95,160,84,167,89,161, + 89,211,21,47,136,70,216,37,43,140,67,143,75,137,75,152, + 4,159,9,153,9,209,12,34,216,8,13,251,244,16,0,16, + 30,242,0,1,9,17,217,12,16,240,3,1,9,17,251,244, + 20,0,16,30,242,0,1,9,17,217,12,16,240,3,1,9, + 17,251,244,10,0,16,30,242,0,1,9,17,216,12,16,216, + 11,17,128,77,240,5,1,9,17,250,115,67,0,0,0,130, + 37,67,51,0,193,59,17,69,27,0,194,26,65,0,69,42, + 0,195,40,7,69,57,0,195,51,65,37,69,24,3,197,27, + 9,69,39,3,197,38,1,69,39,3,197,42,9,69,54,3, + 197,53,1,69,54,3,197,57,9,70,6,3,198,5,1,70, + 6,3,99,1,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,3,0,0,0,243,16,3,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,171,1,0,0,0,0,0,0,155,0,100,2, - 157,2,125,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,124,1,116,10,0,0,0,0,0,0,0,0,171,2, - 0,0,0,0,0,0,1,0,116,13,0,0,0,0,0,0, - 0,0,124,0,171,1,0,0,0,0,0,0,83,0,116,15, - 0,0,0,0,0,0,0,0,124,0,171,1,0,0,0,0, - 0,0,125,2,100,3,124,0,95,8,0,0,0,0,0,0, - 0,0,9,0,124,2,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,124,0,106,22,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,60,0,0,0,9,0, + 0,0,0,0,129,83,116,3,0,0,0,0,0,0,0,0, 124,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,128,35,124,0,106,24,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,50, - 116,27,0,0,0,0,0,0,0,0,100,4,124,0,106,22, + 0,0,0,0,0,0,100,1,171,2,0,0,0,0,0,0, + 115,61,116,5,0,0,0,0,0,0,0,0,124,0,106,0, + 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,155,0,100,2,157,2, + 125,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, - 0,0,172,5,171,2,0,0,0,0,0,0,130,1,124,0, + 124,1,116,10,0,0,0,0,0,0,0,0,171,2,0,0, + 0,0,0,0,1,0,116,13,0,0,0,0,0,0,0,0, + 124,0,171,1,0,0,0,0,0,0,83,0,116,15,0,0, + 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, + 125,2,100,3,124,0,95,8,0,0,0,0,0,0,0,0, + 9,0,124,2,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,124,0,106,22,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,60,0,0,0,9,0,124,0, 106,0,0,0,0,0,0,0,0,0,0,0,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,124,2,171,1,0,0,0,0, - 0,0,1,0,116,18,0,0,0,0,0,0,0,0,106,20, + 0,0,0,0,128,35,124,0,106,24,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,128,50,116,27, + 0,0,0,0,0,0,0,0,100,4,124,0,106,22,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,106,33,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,0,106,22,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,116,18,0,0,0,0,0,0, + 172,5,171,2,0,0,0,0,0,0,130,1,124,0,106,0, + 0,0,0,0,0,0,0,0,0,0,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,124,2,171,1,0,0,0,0,0,0, + 1,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,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,0,106,22,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,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,124,0,106,22,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,60,0,0,0,116,35, + 0,0,0,0,0,0,0,0,100,6,124,0,106,22,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 124,0,106,0,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, + 100,7,124,0,95,8,0,0,0,0,0,0,0,0,124,2, + 83,0,35,0,1,0,9,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,124,0,106,22,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,60,0,0,0, - 116,35,0,0,0,0,0,0,0,0,100,6,124,0,106,22, + 0,0,0,0,0,0,0,0,0,0,0,0,61,0,130,0, + 35,0,116,30,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,120,3, + 89,0,119,1,35,0,100,7,124,0,95,8,0,0,0,0, + 0,0,0,0,119,0,120,3,89,0,119,1,41,8,78,114, + 19,1,0,0,114,26,1,0,0,84,114,25,1,0,0,114, + 25,0,0,0,122,18,105,109,112,111,114,116,32,123,33,114, + 125,32,35,32,123,33,114,125,70,41,18,114,213,0,0,0, + 114,13,0,0,0,114,8,0,0,0,114,191,0,0,0,114, + 192,0,0,0,114,27,1,0,0,114,30,1,0,0,114,21, + 1,0,0,218,13,95,105,110,105,116,105,97,108,105,122,105, + 110,103,114,24,0,0,0,114,195,0,0,0,114,26,0,0, + 0,114,223,0,0,0,114,178,0,0,0,114,19,1,0,0, + 114,73,0,0,0,114,68,0,0,0,114,173,0,0,0,41, + 3,114,199,0,0,0,114,198,0,0,0,114,200,0,0,0, + 115,3,0,0,0,32,32,32,114,7,0,0,0,218,14,95, + 108,111,97,100,95,117,110,108,111,99,107,101,100,114,33,1, + 0,0,143,3,0,0,115,72,1,0,0,128,0,224,7,11, + 135,123,129,123,208,7,30,228,15,22,144,116,151,123,145,123, + 160,77,212,15,50,220,22,34,160,52,167,59,161,59,211,22, + 47,208,21,48,240,0,1,49,52,240,0,1,20,52,136,67, + 228,12,21,143,78,137,78,152,51,164,13,212,12,46,220,19, + 44,168,84,211,19,50,208,12,50,228,13,29,152,100,211,13, + 35,128,70,240,10,0,26,30,128,68,212,4,22,240,2,23, + 5,35,216,33,39,140,3,143,11,137,11,144,68,151,73,145, + 73,209,8,30,240,2,12,9,18,216,15,19,143,123,137,123, + 208,15,34,216,19,23,215,19,50,209,19,50,208,19,58,220, + 26,37,208,38,54,184,84,191,89,185,89,212,26,71,208,20, + 71,240,6,0,17,21,151,11,145,11,215,16,39,209,16,39, + 168,6,212,16,47,244,22,0,18,21,151,27,145,27,151,31, + 145,31,160,20,167,25,161,25,211,17,43,136,6,216,33,39, + 140,3,143,11,137,11,144,68,151,73,145,73,209,8,30,220, + 8,24,208,25,45,168,116,175,121,169,121,184,36,191,43,185, + 43,212,8,70,224,29,34,136,4,212,8,26,224,11,17,128, + 77,248,240,33,5,9,18,240,2,3,13,21,220,20,23,151, + 75,145,75,160,4,167,9,161,9,208,20,42,240,6,0,13, + 18,248,244,5,0,20,28,242,0,1,13,21,216,16,20,216, + 12,17,240,5,1,13,21,254,240,22,0,30,35,136,4,213, + 8,26,250,115,74,0,0,0,193,51,29,69,60,0,194,17, + 65,10,69,11,0,195,27,65,39,69,60,0,197,11,2,69, + 57,3,197,14,27,69,42,2,197,41,1,69,57,3,197,42, + 9,69,54,5,197,51,2,69,57,3,197,53,1,69,54,5, + 197,54,3,69,57,3,197,57,3,69,60,0,197,60,9,70, + 5,3,99,1,0,0,0,0,0,0,0,0,0,0,0,6, + 0,0,0,3,0,0,0,243,110,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,53,0,1,0,116,5,0,0,0,0, + 0,0,0,0,124,0,171,1,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,41,2,122,191,82,101, + 116,117,114,110,32,97,32,110,101,119,32,109,111,100,117,108, + 101,32,111,98,106,101,99,116,44,32,108,111,97,100,101,100, + 32,98,121,32,116,104,101,32,115,112,101,99,39,115,32,108, + 111,97,100,101,114,46,10,10,32,32,32,32,84,104,101,32, + 109,111,100,117,108,101,32,105,115,32,110,111,116,32,97,100, + 100,101,100,32,116,111,32,105,116,115,32,112,97,114,101,110, + 116,46,10,10,32,32,32,32,73,102,32,97,32,109,111,100, + 117,108,101,32,105,115,32,97,108,114,101,97,100,121,32,105, + 110,32,115,121,115,46,109,111,100,117,108,101,115,44,32,116, + 104,97,116,32,101,120,105,115,116,105,110,103,32,109,111,100, + 117,108,101,32,103,101,116,115,10,32,32,32,32,99,108,111, + 98,98,101,114,101,100,46,10,10,32,32,32,32,78,41,3, + 114,142,0,0,0,114,26,0,0,0,114,33,1,0,0,169, + 1,114,199,0,0,0,115,1,0,0,0,32,114,7,0,0, + 0,114,197,0,0,0,114,197,0,0,0,188,3,0,0,115, + 36,0,0,0,128,0,244,18,0,10,28,152,68,159,73,153, + 73,213,9,38,220,15,29,152,100,211,15,35,247,3,0,10, + 39,215,9,38,210,9,38,250,115,8,0,0,0,150,11,43, + 3,171,5,52,7,99,0,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,0,0,0,0,243,164,0,0,0,151, + 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,90, + 4,101,5,100,10,100,4,132,1,171,0,0,0,0,0,0, + 0,90,6,101,7,100,5,132,0,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,101,5,101,10,100,7,132,0,171,0,0,0,0, + 0,0,0,171,0,0,0,0,0,0,0,90,11,101,5,101, + 10,100,8,132,0,171,0,0,0,0,0,0,0,171,0,0, + 0,0,0,0,0,90,12,101,5,101,10,100,9,132,0,171, + 0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,90, + 13,2,0,101,5,101,14,171,1,0,0,0,0,0,0,90, + 15,121,3,41,11,218,15,66,117,105,108,116,105,110,73,109, + 112,111,114,116,101,114,122,144,77,101,116,97,32,112,97,116, + 104,32,105,109,112,111,114,116,32,102,111,114,32,98,117,105, + 108,116,45,105,110,32,109,111,100,117,108,101,115,46,10,10, + 32,32,32,32,65,108,108,32,109,101,116,104,111,100,115,32, + 97,114,101,32,101,105,116,104,101,114,32,99,108,97,115,115, + 32,111,114,32,115,116,97,116,105,99,32,109,101,116,104,111, + 100,115,32,116,111,32,97,118,111,105,100,32,116,104,101,32, + 110,101,101,100,32,116,111,10,32,32,32,32,105,110,115,116, + 97,110,116,105,97,116,101,32,116,104,101,32,99,108,97,115, + 115,46,10,10,32,32,32,32,122,8,98,117,105,108,116,45, + 105,110,78,99,4,0,0,0,0,0,0,0,0,0,0,0, + 5,0,0,0,3,0,0,0,243,94,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,1,171, + 1,0,0,0,0,0,0,114,24,116,5,0,0,0,0,0, + 0,0,0,124,1,124,0,124,0,106,6,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,172,1,171, + 3,0,0,0,0,0,0,83,0,121,0,41,2,78,114,4, + 1,0,0,41,4,114,151,0,0,0,218,10,105,115,95,98, + 117,105,108,116,105,110,114,194,0,0,0,114,255,0,0,0, + 41,4,218,3,99,108,115,114,180,0,0,0,218,4,112,97, + 116,104,218,6,116,97,114,103,101,116,115,4,0,0,0,32, + 32,32,32,114,7,0,0,0,218,9,102,105,110,100,95,115, + 112,101,99,122,25,66,117,105,108,116,105,110,73,109,112,111, + 114,116,101,114,46,102,105,110,100,95,115,112,101,99,214,3, + 0,0,115,36,0,0,0,128,0,228,11,15,143,63,137,63, + 152,56,212,11,36,220,19,35,160,72,168,99,184,35,191,43, + 185,43,212,19,70,208,12,70,224,19,23,114,22,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,182,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,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, + 118,1,114,36,116,7,0,0,0,0,0,0,0,0,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,1,157,2,124,0,106,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,0,106,0,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,100,7,124,0,95,8,0,0,0,0,0,0,0,0, - 124,2,83,0,35,0,1,0,9,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,124,0,106,22,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,61,0, - 130,0,35,0,116,30,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, - 120,3,89,0,119,1,35,0,100,7,124,0,95,8,0,0, - 0,0,0,0,0,0,119,0,120,3,89,0,119,1,41,8, - 78,114,19,1,0,0,114,26,1,0,0,84,114,25,1,0, - 0,114,25,0,0,0,122,18,105,109,112,111,114,116,32,123, - 33,114,125,32,35,32,123,33,114,125,70,41,18,114,213,0, - 0,0,114,13,0,0,0,114,8,0,0,0,114,191,0,0, - 0,114,192,0,0,0,114,27,1,0,0,114,30,1,0,0, - 114,21,1,0,0,218,13,95,105,110,105,116,105,97,108,105, - 122,105,110,103,114,24,0,0,0,114,195,0,0,0,114,26, - 0,0,0,114,223,0,0,0,114,178,0,0,0,114,19,1, - 0,0,114,73,0,0,0,114,68,0,0,0,114,173,0,0, - 0,41,3,114,199,0,0,0,114,198,0,0,0,114,200,0, - 0,0,115,3,0,0,0,32,32,32,114,7,0,0,0,218, - 14,95,108,111,97,100,95,117,110,108,111,99,107,101,100,114, - 33,1,0,0,143,3,0,0,115,72,1,0,0,128,0,224, - 7,11,135,123,129,123,208,7,30,228,15,22,144,116,151,123, - 145,123,160,77,212,15,50,220,22,34,160,52,167,59,161,59, - 211,22,47,208,21,48,240,0,1,49,52,240,0,1,20,52, - 136,67,228,12,21,143,78,137,78,152,51,164,13,212,12,46, - 220,19,44,168,84,211,19,50,208,12,50,228,13,29,152,100, - 211,13,35,128,70,240,10,0,26,30,128,68,212,4,22,240, - 2,23,5,35,216,33,39,140,3,143,11,137,11,144,68,151, - 73,145,73,209,8,30,240,2,12,9,18,216,15,19,143,123, - 137,123,208,15,34,216,19,23,215,19,50,209,19,50,208,19, - 58,220,26,37,208,38,54,184,84,191,89,185,89,212,26,71, - 208,20,71,240,6,0,17,21,151,11,145,11,215,16,39,209, - 16,39,168,6,212,16,47,244,22,0,18,21,151,27,145,27, - 151,31,145,31,160,20,167,25,161,25,211,17,43,136,6,216, - 33,39,140,3,143,11,137,11,144,68,151,73,145,73,209,8, - 30,220,8,24,208,25,45,168,116,175,121,169,121,184,36,191, - 43,185,43,212,8,70,224,29,34,136,4,212,8,26,224,11, - 17,128,77,248,240,33,5,9,18,240,2,3,13,21,220,20, - 23,151,75,145,75,160,4,167,9,161,9,208,20,42,240,6, - 0,13,18,248,244,5,0,20,28,242,0,1,13,21,216,16, - 20,216,12,17,240,5,1,13,21,254,240,22,0,30,35,136, - 4,213,8,26,250,115,74,0,0,0,193,51,29,69,60,0, - 194,17,65,10,69,11,0,195,27,65,39,69,60,0,197,11, - 2,69,57,3,197,14,27,69,42,2,197,41,1,69,57,3, - 197,42,9,69,54,5,197,51,2,69,57,3,197,53,1,69, - 54,5,197,54,3,69,57,3,197,57,3,69,60,0,197,60, - 9,70,5,3,99,1,0,0,0,0,0,0,0,0,0,0, - 0,6,0,0,0,3,0,0,0,243,110,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,53,0,1,0,116,5,0,0, - 0,0,0,0,0,0,124,0,171,1,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,41,2,122,191, - 82,101,116,117,114,110,32,97,32,110,101,119,32,109,111,100, - 117,108,101,32,111,98,106,101,99,116,44,32,108,111,97,100, - 101,100,32,98,121,32,116,104,101,32,115,112,101,99,39,115, - 32,108,111,97,100,101,114,46,10,10,32,32,32,32,84,104, - 101,32,109,111,100,117,108,101,32,105,115,32,110,111,116,32, - 97,100,100,101,100,32,116,111,32,105,116,115,32,112,97,114, - 101,110,116,46,10,10,32,32,32,32,73,102,32,97,32,109, - 111,100,117,108,101,32,105,115,32,97,108,114,101,97,100,121, - 32,105,110,32,115,121,115,46,109,111,100,117,108,101,115,44, - 32,116,104,97,116,32,101,120,105,115,116,105,110,103,32,109, - 111,100,117,108,101,32,103,101,116,115,10,32,32,32,32,99, - 108,111,98,98,101,114,101,100,46,10,10,32,32,32,32,78, - 41,3,114,142,0,0,0,114,26,0,0,0,114,33,1,0, - 0,169,1,114,199,0,0,0,115,1,0,0,0,32,114,7, - 0,0,0,114,197,0,0,0,114,197,0,0,0,188,3,0, - 0,115,41,0,0,0,128,0,244,18,0,10,28,152,68,159, - 73,153,73,213,9,38,220,15,29,152,100,211,15,35,247,3, - 1,5,36,241,0,1,5,36,215,9,38,208,9,38,250,115, - 8,0,0,0,150,11,43,3,171,5,52,7,99,0,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0, - 0,243,164,0,0,0,151,0,101,0,90,1,100,0,90,2, - 100,1,90,3,100,2,90,4,101,5,100,10,100,4,132,1, - 171,0,0,0,0,0,0,0,90,6,101,7,100,5,132,0, - 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,101,5,101,10,100,7, - 132,0,171,0,0,0,0,0,0,0,171,0,0,0,0,0, - 0,0,90,11,101,5,101,10,100,8,132,0,171,0,0,0, - 0,0,0,0,171,0,0,0,0,0,0,0,90,12,101,5, - 101,10,100,9,132,0,171,0,0,0,0,0,0,0,171,0, - 0,0,0,0,0,0,90,13,2,0,101,5,101,14,171,1, - 0,0,0,0,0,0,90,15,121,3,41,11,218,15,66,117, - 105,108,116,105,110,73,109,112,111,114,116,101,114,122,144,77, - 101,116,97,32,112,97,116,104,32,105,109,112,111,114,116,32, - 102,111,114,32,98,117,105,108,116,45,105,110,32,109,111,100, - 117,108,101,115,46,10,10,32,32,32,32,65,108,108,32,109, - 101,116,104,111,100,115,32,97,114,101,32,101,105,116,104,101, - 114,32,99,108,97,115,115,32,111,114,32,115,116,97,116,105, - 99,32,109,101,116,104,111,100,115,32,116,111,32,97,118,111, - 105,100,32,116,104,101,32,110,101,101,100,32,116,111,10,32, - 32,32,32,105,110,115,116,97,110,116,105,97,116,101,32,116, - 104,101,32,99,108,97,115,115,46,10,10,32,32,32,32,122, - 8,98,117,105,108,116,45,105,110,78,99,4,0,0,0,0, - 0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,243, - 94,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,1,171,1,0,0,0,0,0,0,114,24, - 116,5,0,0,0,0,0,0,0,0,124,1,124,0,124,0, - 106,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,172,1,171,3,0,0,0,0,0,0,83,0, - 121,0,41,2,78,114,4,1,0,0,41,4,114,151,0,0, - 0,218,10,105,115,95,98,117,105,108,116,105,110,114,194,0, - 0,0,114,255,0,0,0,41,4,218,3,99,108,115,114,180, - 0,0,0,218,4,112,97,116,104,218,6,116,97,114,103,101, - 116,115,4,0,0,0,32,32,32,32,114,7,0,0,0,218, - 9,102,105,110,100,95,115,112,101,99,122,25,66,117,105,108, - 116,105,110,73,109,112,111,114,116,101,114,46,102,105,110,100, - 95,115,112,101,99,214,3,0,0,115,36,0,0,0,128,0, - 228,11,15,143,63,137,63,152,56,212,11,36,220,19,35,160, - 72,168,99,184,35,191,43,185,43,212,19,70,208,12,70,224, - 19,23,114,22,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,182,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,116,2,0,0,0,0,0, + 172,2,171,2,0,0,0,0,0,0,130,1,116,9,0,0, + 0,0,0,0,0,0,116,10,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,2,0,0,0,0,0,0,83,0, + 41,3,122,24,67,114,101,97,116,101,32,97,32,98,117,105, + 108,116,45,105,110,32,109,111,100,117,108,101,114,176,0,0, + 0,114,25,0,0,0,41,7,114,26,0,0,0,114,24,0, + 0,0,114,177,0,0,0,114,178,0,0,0,114,161,0,0, + 0,114,151,0,0,0,218,14,99,114,101,97,116,101,95,98, + 117,105,108,116,105,110,114,35,1,0,0,115,1,0,0,0, + 32,114,7,0,0,0,114,18,1,0,0,122,29,66,117,105, + 108,116,105,110,73,109,112,111,114,116,101,114,46,99,114,101, + 97,116,101,95,109,111,100,117,108,101,221,3,0,0,115,75, + 0,0,0,128,0,240,6,0,12,16,143,57,137,57,156,67, + 215,28,52,209,28,52,209,11,52,220,18,29,160,20,167,25, + 161,25,160,13,208,45,70,208,30,71,216,35,39,167,57,161, + 57,244,3,1,19,46,240,0,1,13,46,228,15,40,172,20, + 215,41,60,209,41,60,184,100,211,15,67,208,8,67,114,22, + 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,56,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,106,4,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,118,1,114,36,116,7,0,0,0, - 0,0,0,0,0,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,1,157, - 2,124,0,106,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,172,2,171,2,0,0,0,0,0, - 0,130,1,116,9,0,0,0,0,0,0,0,0,116,10,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,2,0, - 0,0,0,0,0,83,0,41,3,122,24,67,114,101,97,116, - 101,32,97,32,98,117,105,108,116,45,105,110,32,109,111,100, - 117,108,101,114,176,0,0,0,114,25,0,0,0,41,7,114, - 26,0,0,0,114,24,0,0,0,114,177,0,0,0,114,178, - 0,0,0,114,161,0,0,0,114,151,0,0,0,218,14,99, - 114,101,97,116,101,95,98,117,105,108,116,105,110,114,35,1, - 0,0,115,1,0,0,0,32,114,7,0,0,0,114,18,1, - 0,0,122,29,66,117,105,108,116,105,110,73,109,112,111,114, - 116,101,114,46,99,114,101,97,116,101,95,109,111,100,117,108, - 101,221,3,0,0,115,75,0,0,0,128,0,240,6,0,12, - 16,143,57,137,57,156,67,215,28,52,209,28,52,209,11,52, - 220,18,29,160,20,167,25,161,25,160,13,208,45,70,208,30, - 71,216,35,39,167,57,161,57,244,3,1,19,46,240,0,1, - 13,46,228,15,40,172,20,215,41,60,209,41,60,184,100,211, - 15,67,208,8,67,114,22,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, - 56,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,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,1,0,121,1,41,2,122,22, - 69,120,101,99,32,97,32,98,117,105,108,116,45,105,110,32, - 109,111,100,117,108,101,78,41,3,114,161,0,0,0,114,151, - 0,0,0,218,12,101,120,101,99,95,98,117,105,108,116,105, - 110,41,1,114,200,0,0,0,115,1,0,0,0,32,114,7, - 0,0,0,114,19,1,0,0,122,27,66,117,105,108,116,105, - 110,73,109,112,111,114,116,101,114,46,101,120,101,99,95,109, - 111,100,117,108,101,229,3,0,0,115,20,0,0,0,128,0, - 244,6,0,9,34,164,36,215,34,51,209,34,51,176,86,213, - 8,60,114,22,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,57,82,101,116,117,114,110,32, - 78,111,110,101,32,97,115,32,98,117,105,108,116,45,105,110, - 32,109,111,100,117,108,101,115,32,100,111,32,110,111,116,32, - 104,97,118,101,32,99,111,100,101,32,111,98,106,101,99,116, - 115,46,78,114,31,0,0,0,169,2,114,40,1,0,0,114, - 180,0,0,0,115,2,0,0,0,32,32,114,7,0,0,0, - 218,8,103,101,116,95,99,111,100,101,122,24,66,117,105,108, - 116,105,110,73,109,112,111,114,116,101,114,46,103,101,116,95, - 99,111,100,101,234,3,0,0,243,7,0,0,0,128,0,240, - 8,0,16,20,114,22,0,0,0,99,2,0,0,0,0,0, + 0,0,0,0,0,0,0,124,0,171,2,0,0,0,0,0, + 0,1,0,121,1,41,2,122,22,69,120,101,99,32,97,32, + 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,78, + 41,3,114,161,0,0,0,114,151,0,0,0,218,12,101,120, + 101,99,95,98,117,105,108,116,105,110,41,1,114,200,0,0, + 0,115,1,0,0,0,32,114,7,0,0,0,114,19,1,0, + 0,122,27,66,117,105,108,116,105,110,73,109,112,111,114,116, + 101,114,46,101,120,101,99,95,109,111,100,117,108,101,229,3, + 0,0,115,20,0,0,0,128,0,244,6,0,9,34,164,36, + 215,34,51,209,34,51,176,86,213,8,60,114,22,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,57,82,101,116,117,114,110,32,78,111,110,101,32,97,115, + 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, + 115,32,100,111,32,110,111,116,32,104,97,118,101,32,99,111, + 100,101,32,111,98,106,101,99,116,115,46,78,114,31,0,0, + 0,169,2,114,40,1,0,0,114,180,0,0,0,115,2,0, + 0,0,32,32,114,7,0,0,0,218,8,103,101,116,95,99, + 111,100,101,122,24,66,117,105,108,116,105,110,73,109,112,111, + 114,116,101,114,46,103,101,116,95,99,111,100,101,234,3,0, + 0,243,7,0,0,0,128,0,240,8,0,16,20,114,22,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,56,82,101,116,117,114,110,32,78,111,110,101,32, + 97,115,32,98,117,105,108,116,45,105,110,32,109,111,100,117, + 108,101,115,32,100,111,32,110,111,116,32,104,97,118,101,32, + 115,111,117,114,99,101,32,99,111,100,101,46,78,114,31,0, + 0,0,114,49,1,0,0,115,2,0,0,0,32,32,114,7, + 0,0,0,218,10,103,101,116,95,115,111,117,114,99,101,122, + 26,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, + 46,103,101,116,95,115,111,117,114,99,101,240,3,0,0,114, + 51,1,0,0,114,22,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,56,82,101,116,117,114, - 110,32,78,111,110,101,32,97,115,32,98,117,105,108,116,45, - 105,110,32,109,111,100,117,108,101,115,32,100,111,32,110,111, + 0,0,0,151,0,121,1,41,2,122,52,82,101,116,117,114, + 110,32,70,97,108,115,101,32,97,115,32,98,117,105,108,116, + 45,105,110,32,109,111,100,117,108,101,115,32,97,114,101,32, + 110,101,118,101,114,32,112,97,99,107,97,103,101,115,46,70, + 114,31,0,0,0,114,49,1,0,0,115,2,0,0,0,32, + 32,114,7,0,0,0,114,220,0,0,0,122,26,66,117,105, + 108,116,105,110,73,109,112,111,114,116,101,114,46,105,115,95, + 112,97,99,107,97,103,101,246,3,0,0,115,7,0,0,0, + 128,0,240,8,0,16,21,114,22,0,0,0,169,2,78,78, + 41,16,114,11,0,0,0,114,10,0,0,0,114,3,0,0, + 0,114,12,0,0,0,114,255,0,0,0,218,11,99,108,97, + 115,115,109,101,116,104,111,100,114,43,1,0,0,114,58,0, + 0,0,114,18,1,0,0,114,19,1,0,0,114,184,0,0, + 0,114,50,1,0,0,114,53,1,0,0,114,220,0,0,0, + 114,201,0,0,0,114,28,1,0,0,114,31,0,0,0,114, + 22,0,0,0,114,7,0,0,0,114,37,1,0,0,114,37, + 1,0,0,203,3,0,0,115,171,0,0,0,132,0,241,4, + 5,5,8,240,14,0,15,25,128,71,224,5,16,242,2,4, + 5,24,243,3,0,6,17,240,2,4,5,24,240,12,0,6, + 18,241,2,5,5,68,1,243,3,0,6,18,240,2,5,5, + 68,1,240,14,0,6,18,241,2,2,5,61,243,3,0,6, + 18,240,2,2,5,61,240,8,0,6,17,216,5,22,241,2, + 2,5,20,243,3,0,6,23,243,3,0,6,17,240,4,2, + 5,20,240,8,0,6,17,216,5,22,241,2,2,5,20,243, + 3,0,6,23,243,3,0,6,17,240,4,2,5,20,240,8, + 0,6,17,216,5,22,241,2,2,5,21,243,3,0,6,23, + 243,3,0,6,17,240,4,2,5,21,241,8,0,19,30,208, + 30,47,211,18,48,129,75,114,22,0,0,0,114,37,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,198,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, + 13,100,5,132,1,171,0,0,0,0,0,0,0,90,7,101, + 5,100,14,100,6,132,1,171,0,0,0,0,0,0,0,90, + 8,101,9,100,7,132,0,171,0,0,0,0,0,0,0,90, + 10,101,9,100,8,132,0,171,0,0,0,0,0,0,0,90, + 11,101,5,100,9,132,0,171,0,0,0,0,0,0,0,90, + 12,101,5,101,13,100,10,132,0,171,0,0,0,0,0,0, + 0,171,0,0,0,0,0,0,0,90,14,101,5,101,13,100, + 11,132,0,171,0,0,0,0,0,0,0,171,0,0,0,0, + 0,0,0,90,15,101,5,101,13,100,12,132,0,171,0,0, + 0,0,0,0,0,171,0,0,0,0,0,0,0,90,16,121, + 4,41,15,218,14,70,114,111,122,101,110,73,109,112,111,114, + 116,101,114,122,142,77,101,116,97,32,112,97,116,104,32,105, + 109,112,111,114,116,32,102,111,114,32,102,114,111,122,101,110, + 32,109,111,100,117,108,101,115,46,10,10,32,32,32,32,65, + 108,108,32,109,101,116,104,111,100,115,32,97,114,101,32,101, + 105,116,104,101,114,32,99,108,97,115,115,32,111,114,32,115, + 116,97,116,105,99,32,109,101,116,104,111,100,115,32,116,111, + 32,97,118,111,105,100,32,116,104,101,32,110,101,101,100,32, + 116,111,10,32,32,32,32,105,110,115,116,97,110,116,105,97, + 116,101,32,116,104,101,32,99,108,97,115,115,46,10,10,32, + 32,32,32,218,6,102,114,111,122,101,110,99,2,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0, + 243,18,6,0,0,151,0,124,1,106,0,0,0,0,0,0, + 0,0,0,0,0,0,0,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,125,3,124,3,144,1,128,88,116,5,0, + 0,0,0,0,0,0,0,124,1,171,1,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,100,1,100,0,171,2,0,0,0,0,0, + 0,125,4,124,4,115,7,74,0,100,2,171,0,0,0,0, + 0,0,0,130,1,116,9,0,0,0,0,0,0,0,0,124, + 1,100,3,171,2,0,0,0,0,0,0,125,5,116,10,0, + 0,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,106,14,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,124,5,107,40,0,0,115, + 7,74,0,124,5,171,0,0,0,0,0,0,0,130,1,124, + 0,106,17,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,4,124,2,106,18,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,5,171, + 3,0,0,0,0,0,0,92,2,0,0,125,6,125,7,2, + 0,116,21,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,171,1,0,0,0,0,0, + 0,124,6,124,4,172,4,171,2,0,0,0,0,0,0,124, + 2,95,1,0,0,0,0,0,0,0,0,124,2,106,26,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,125,8,124,5,114,43,124,8,103,0,107,40,0,0,115, + 7,74,0,124,8,171,0,0,0,0,0,0,0,130,1,124, + 7,114,38,124,2,106,26,0,0,0,0,0,0,0,0,0, + 0,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,5,124, + 7,171,2,0,0,0,0,0,0,1,0,110,9,124,8,129, + 7,74,0,124,8,171,0,0,0,0,0,0,0,130,1,116, + 9,0,0,0,0,0,0,0,0,124,1,100,6,171,2,0, + 0,0,0,0,0,114,17,74,0,124,1,106,30,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,130,1,124,6,114,8,9,0,124, + 6,124,1,95,15,0,0,0,0,0,0,0,0,124,5,144, + 1,114,195,124,1,106,34,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,8,107,55,0,0,144, + 1,114,179,124,1,106,34,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,103,0,107,40,0,0,115, + 17,74,0,124,1,106,34,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,130,1,124,1,106,34,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,144,1,110,118,124,2,106, + 26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,125,8,124,8,100,0,117,1,125,5,116,39,0, + 0,0,0,0,0,0,0,116,5,0,0,0,0,0,0,0, + 0,124,3,171,1,0,0,0,0,0,0,171,1,0,0,0, + 0,0,0,100,7,100,8,103,2,107,40,0,0,115,7,74, + 0,124,3,171,0,0,0,0,0,0,0,130,1,124,3,106, + 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,114,109,124,0,106,17,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,3,106,40,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,124,2,106,18,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,5,171,3,0,0,0,0,0, + 0,92,2,0,0,125,9,125,7,124,3,106,42,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, + 9,107,40,0,0,115,19,74,0,124,3,106,42,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, + 9,102,2,171,0,0,0,0,0,0,0,130,1,124,7,114, + 15,124,8,124,7,103,1,107,40,0,0,115,72,74,0,124, + 8,124,7,102,2,171,0,0,0,0,0,0,0,130,1,124, + 8,124,5,114,2,103,0,110,1,100,0,107,40,0,0,115, + 54,74,0,124,8,171,0,0,0,0,0,0,0,130,1,100, + 0,125,9,124,3,106,42,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,129,17,74,0,124,3,106, + 42,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,130,1,124,8,124, + 5,114,2,103,0,110,1,100,0,107,40,0,0,115,7,74, + 0,124,8,171,0,0,0,0,0,0,0,130,1,124,9,114, + 48,116,9,0,0,0,0,0,0,0,0,124,1,100,6,171, + 2,0,0,0,0,0,0,115,2,74,0,130,1,124,1,106, + 30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,9,107,40,0,0,115,48,74,0,124,1,106, + 30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,9,102,2,171,0,0,0,0,0,0,0,130, + 1,116,9,0,0,0,0,0,0,0,0,124,1,100,6,171, + 2,0,0,0,0,0,0,114,17,74,0,124,1,106,30,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,130,1,124,5,114,48,116, + 9,0,0,0,0,0,0,0,0,124,1,100,3,171,2,0, + 0,0,0,0,0,115,2,74,0,130,1,124,1,106,34,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,124,8,107,40,0,0,115,48,74,0,124,1,106,34,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,124,8,102,2,171,0,0,0,0,0,0,0,130,1,116, + 9,0,0,0,0,0,0,0,0,124,1,100,3,171,2,0, + 0,0,0,0,0,114,17,74,0,124,1,106,34,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,130,1,124,2,106,44,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114, + 2,74,0,130,1,121,0,35,0,116,32,0,0,0,0,0, + 0,0,0,36,0,114,4,1,0,89,0,144,1,140,225,119, + 0,120,3,89,0,119,1,41,9,78,218,12,95,95,111,114, + 105,103,110,97,109,101,95,95,122,39,115,101,101,32,80,121, + 73,109,112,111,114,116,95,73,109,112,111,114,116,70,114,111, + 122,101,110,77,111,100,117,108,101,79,98,106,101,99,116,40, + 41,114,7,1,0,0,169,2,114,214,0,0,0,218,8,111, + 114,105,103,110,97,109,101,114,125,0,0,0,114,212,0,0, + 0,114,214,0,0,0,114,63,1,0,0,41,23,114,204,0, + 0,0,114,219,0,0,0,218,4,118,97,114,115,114,68,0, + 0,0,114,13,0,0,0,114,151,0,0,0,218,17,105,115, + 95,102,114,111,122,101,110,95,112,97,99,107,97,103,101,114, + 11,0,0,0,218,17,95,114,101,115,111,108,118,101,95,102, + 105,108,101,110,97,109,101,114,26,0,0,0,114,5,0,0, + 0,114,24,0,0,0,218,14,105,109,112,108,101,109,101,110, + 116,97,116,105,111,110,114,223,0,0,0,218,6,105,110,115, + 101,114,116,114,212,0,0,0,114,4,0,0,0,114,7,1, + 0,0,218,6,101,120,116,101,110,100,218,6,115,111,114,116, + 101,100,114,63,1,0,0,114,214,0,0,0,114,233,0,0, + 0,41,10,114,40,1,0,0,114,200,0,0,0,114,199,0, + 0,0,218,5,115,116,97,116,101,114,63,1,0,0,218,5, + 105,115,112,107,103,114,214,0,0,0,218,6,112,107,103,100, + 105,114,114,7,1,0,0,114,212,0,0,0,115,10,0,0, + 0,32,32,32,32,32,32,32,32,32,32,114,7,0,0,0, + 218,14,95,102,105,120,95,117,112,95,109,111,100,117,108,101, + 122,29,70,114,111,122,101,110,73,109,112,111,114,116,101,114, + 46,95,102,105,120,95,117,112,95,109,111,100,117,108,101,10, + 4,0,0,115,11,3,0,0,128,0,224,15,21,143,127,137, + 127,136,4,216,16,20,215,16,33,209,16,33,136,5,216,11, + 16,137,61,244,8,0,24,28,152,70,147,124,215,23,39,209, + 23,39,168,14,184,4,211,23,61,136,72,217,19,27,208,12, + 70,208,29,70,211,12,70,144,56,220,20,27,152,70,160,74, + 211,20,47,136,69,220,19,23,215,19,41,209,19,41,168,38, + 175,47,169,47,211,19,58,184,101,210,19,67,208,12,74,192, + 85,211,12,74,208,19,67,216,31,34,215,31,52,209,31,52, + 176,88,184,116,191,121,185,121,200,37,211,31,80,209,12,28, + 136,72,144,102,216,32,56,164,4,164,83,215,37,55,209,37, + 55,211,32,56,216,25,33,216,25,33,244,5,3,33,14,136, + 68,212,12,29,240,8,0,24,28,215,23,54,209,23,54,136, + 72,217,15,20,216,23,31,160,50,146,126,208,16,47,160,120, + 211,16,47,144,126,217,19,25,216,20,24,215,20,51,209,20, + 51,215,20,58,209,20,58,184,49,184,102,213,20,69,224,23, + 31,208,23,39,208,16,49,168,24,211,16,49,208,23,39,244, + 6,0,24,31,152,118,160,122,212,23,50,208,12,67,176,70, + 183,79,177,79,211,12,67,208,19,50,217,15,23,240,2,3, + 17,25,216,38,46,144,70,148,79,242,6,0,16,21,216,19, + 25,151,63,145,63,160,104,211,19,46,216,27,33,159,63,153, + 63,168,98,210,27,48,208,20,65,176,38,183,47,177,47,211, + 20,65,208,27,48,216,20,26,151,79,145,79,215,20,42,209, + 20,42,168,56,214,20,52,240,8,0,24,28,215,23,54,209, + 23,54,136,72,216,20,28,160,68,208,20,40,136,69,228,19, + 25,156,36,152,117,155,43,211,19,38,168,58,176,122,208,42, + 66,210,19,66,208,12,73,192,69,211,12,73,208,19,66,216, + 15,20,143,126,138,126,240,6,0,22,25,215,21,42,209,21, + 42,168,53,175,62,169,62,184,52,191,57,185,57,192,101,211, + 21,76,241,3,1,17,19,144,24,152,54,224,23,28,151,126, + 145,126,168,24,210,23,49,208,16,77,176,69,183,78,177,78, + 192,72,208,51,77,211,16,77,208,23,49,217,19,25,216,27, + 35,168,6,160,120,210,27,47,208,20,67,176,40,184,70,208, + 49,67,211,20,67,208,27,47,224,27,35,169,101,169,2,184, + 20,210,27,62,208,20,72,192,8,211,20,72,208,27,62,224, + 27,31,144,8,216,23,28,151,126,145,126,208,23,45,208,16, + 61,168,117,175,126,169,126,211,16,61,208,23,45,216,23,31, + 169,37,161,66,176,84,210,23,58,208,16,68,184,72,211,16, + 68,208,23,58,225,15,23,220,23,30,152,118,160,122,212,23, + 50,208,16,50,208,23,50,216,23,29,151,127,145,127,168,40, + 210,23,50,208,16,79,176,86,183,95,177,95,192,104,208,52, + 79,211,16,79,208,23,50,228,27,34,160,54,168,58,212,27, + 54,208,16,71,184,6,191,15,185,15,211,16,71,208,23,54, + 217,15,20,220,23,30,152,118,160,122,212,23,50,208,16,50, + 208,23,50,216,23,29,151,127,145,127,168,40,210,23,50,208, + 16,79,176,86,183,95,177,95,192,104,208,52,79,211,16,79, + 208,23,50,228,27,34,160,54,168,58,212,27,54,208,16,71, + 184,6,191,15,185,15,211,16,71,208,23,54,216,19,23,215, + 19,36,210,19,36,208,8,36,208,15,36,208,19,36,248,244, + 75,1,0,24,38,242,0,1,17,25,218,20,24,240,3,1, + 17,25,250,115,18,0,0,0,196,29,7,75,57,0,203,57, + 9,76,6,3,204,5,1,76,6,3,78,99,4,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,124,1,114,17,116,1,0,0,0, + 0,0,0,0,0,116,2,0,0,0,0,0,0,0,0,100, + 1,100,0,171,3,0,0,0,0,0,0,115,1,121,2,9, + 0,124,0,106,4,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,125,4,124,1,124,2,107,55,0, + 0,114,32,124,1,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,114,13,124,1,100,7,100,0,26,0,125,1,124, + 3,115,8,124,1,155,0,100,8,157,2,125,1,110,2,100, + 9,125,3,124,1,106,13,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,100,10,124,4,171,2,0, + 0,0,0,0,0,125,5,124,3,114,33,116,2,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,155,0,124,4,155,0,124, + 5,155,0,157,3,125,6,124,6,155,0,124,4,155,0,100, + 11,157,3,125,7,124,7,124,6,102,2,83,0,100,0,125, + 6,116,2,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,155, + 0,124,4,155,0,124,5,155,0,100,12,157,4,125,7,124, + 7,124,6,102,2,83,0,35,0,116,6,0,0,0,0,0, + 0,0,0,36,0,114,33,1,0,116,2,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,100,3,107,40,0,0,114,2,100, + 4,110,1,100,5,120,1,125,4,124,0,95,2,0,0,0, + 0,0,0,0,0,89,0,140,160,119,0,120,3,89,0,119, + 1,41,13,78,218,11,95,115,116,100,108,105,98,95,100,105, + 114,114,55,1,0,0,218,5,119,105,110,51,50,218,1,92, + 218,1,47,218,1,60,114,138,0,0,0,122,9,46,95,95, + 105,110,105,116,95,95,70,114,244,0,0,0,122,11,95,95, + 105,110,105,116,95,95,46,112,121,122,3,46,112,121,41,8, + 114,15,0,0,0,114,24,0,0,0,218,4,95,83,69,80, + 114,4,0,0,0,218,8,112,108,97,116,102,111,114,109,114, + 168,0,0,0,114,20,0,0,0,114,76,1,0,0,41,8, + 114,40,1,0,0,114,180,0,0,0,218,5,97,108,105,97, + 115,114,72,1,0,0,218,3,115,101,112,218,7,114,101,108, + 102,105,108,101,114,73,1,0,0,114,214,0,0,0,115,8, + 0,0,0,32,32,32,32,32,32,32,32,114,7,0,0,0, + 114,66,1,0,0,122,32,70,114,111,122,101,110,73,109,112, + 111,114,116,101,114,46,95,114,101,115,111,108,118,101,95,102, + 105,108,101,110,97,109,101,79,4,0,0,115,249,0,0,0, + 128,0,225,15,23,156,119,164,115,168,77,184,52,212,31,64, + 216,19,29,240,2,3,9,70,1,216,18,21,151,40,145,40, + 136,67,240,8,0,12,20,144,117,210,11,28,216,15,23,215, + 15,34,209,15,34,160,51,212,15,39,216,27,35,160,65,160, + 66,152,60,144,8,217,23,28,216,34,42,160,26,168,57,208, + 31,53,145,72,224,24,29,144,5,216,18,26,215,18,34,209, + 18,34,160,51,168,3,211,18,44,136,7,217,11,16,220,24, + 27,159,15,153,15,208,23,40,168,19,168,5,168,103,168,89, + 208,21,55,136,70,216,26,32,152,24,160,35,160,21,160,107, + 208,23,50,136,72,240,8,0,16,24,152,22,208,15,31,208, + 8,31,240,5,0,22,26,136,70,220,26,29,159,47,153,47, + 208,25,42,168,51,168,37,176,7,168,121,184,3,208,23,60, + 136,72,216,15,23,152,22,208,15,31,208,8,31,248,244,35, + 0,16,30,242,0,1,9,70,1,220,37,40,167,92,161,92, + 176,87,210,37,60,153,84,192,35,208,12,69,136,67,144,35, + 150,40,240,3,1,9,70,1,250,115,17,0,0,0,150,12, + 66,25,0,194,25,39,67,3,3,195,2,1,67,3,3,99, + 4,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, + 3,0,0,0,243,50,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,124,1,171,2,0,0,0,0,0,0,125,4,124, + 4,128,1,121,0,124,4,92,3,0,0,125,5,125,6,125, + 7,116,7,0,0,0,0,0,0,0,0,124,1,124,0,124, + 0,106,8,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,6,172,1,171,4,0,0,0,0,0, + 0,125,8,124,0,106,11,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,7,124,1,124,6,171, + 3,0,0,0,0,0,0,92,2,0,0,125,9,125,10,2, + 0,116,13,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,171,1,0,0,0,0,0, + 0,124,9,124,7,172,2,171,2,0,0,0,0,0,0,124, + 8,95,9,0,0,0,0,0,0,0,0,124,10,114,28,124, + 8,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,100,3,124,10,171,2,0, + 0,0,0,0,0,1,0,124,8,83,0,41,4,78,114,253, + 0,0,0,114,62,1,0,0,114,125,0,0,0,41,12,114, + 161,0,0,0,114,151,0,0,0,218,11,102,105,110,100,95, + 102,114,111,122,101,110,114,194,0,0,0,114,255,0,0,0, + 114,66,1,0,0,114,5,0,0,0,114,24,0,0,0,114, + 67,1,0,0,114,219,0,0,0,114,223,0,0,0,114,68, + 1,0,0,41,11,114,40,1,0,0,114,180,0,0,0,114, + 41,1,0,0,114,42,1,0,0,218,4,105,110,102,111,218, + 1,95,114,72,1,0,0,114,63,1,0,0,114,199,0,0, + 0,114,214,0,0,0,114,73,1,0,0,115,11,0,0,0, + 32,32,32,32,32,32,32,32,32,32,32,114,7,0,0,0, + 114,43,1,0,0,122,24,70,114,111,122,101,110,73,109,112, + 111,114,116,101,114,46,102,105,110,100,95,115,112,101,99,104, + 4,0,0,115,157,0,0,0,128,0,228,15,40,172,20,215, + 41,57,209,41,57,184,56,211,15,68,136,4,216,11,15,136, + 60,216,19,23,240,26,0,30,34,209,8,26,136,1,136,53, + 144,40,220,15,31,160,8,168,35,216,39,42,167,123,161,123, + 216,43,48,244,5,2,16,50,136,4,240,6,0,28,31,215, + 27,48,209,27,48,176,24,184,56,192,85,211,27,75,209,8, + 24,136,8,144,38,216,28,52,156,68,164,19,215,33,51,209, + 33,51,211,28,52,216,21,29,216,21,29,244,5,3,29,10, + 136,4,212,8,25,241,8,0,12,18,216,12,16,215,12,43, + 209,12,43,215,12,50,209,12,50,176,49,176,102,212,12,61, + 216,15,19,136,11,114,22,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, + 144,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,125,1, + 9,0,124,0,106,4,0,0,0,0,0,0,0,0,0,0, + 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,125,2,124,2, + 114,7,124,2,124,1,95,4,0,0,0,0,0,0,0,0, + 124,1,83,0,35,0,116,10,0,0,0,0,0,0,0,0, + 36,0,114,4,1,0,89,0,124,1,83,0,119,0,120,3, + 89,0,119,1,41,1,122,22,83,101,116,32,95,95,102,105, + 108,101,95,95,44,32,105,102,32,97,98,108,101,46,41,6, + 114,27,0,0,0,114,26,0,0,0,114,219,0,0,0,114, + 214,0,0,0,114,212,0,0,0,114,4,0,0,0,41,3, + 114,199,0,0,0,114,200,0,0,0,114,214,0,0,0,115, + 3,0,0,0,32,32,32,114,7,0,0,0,114,18,1,0, + 0,122,28,70,114,111,122,101,110,73,109,112,111,114,116,101, + 114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,134, + 4,0,0,115,84,0,0,0,128,0,244,6,0,18,29,152, + 84,159,89,153,89,211,17,39,136,6,240,2,6,9,43,216, + 23,27,215,23,40,209,23,40,215,23,49,209,23,49,136,72, + 241,8,0,16,24,216,34,42,144,6,148,15,216,15,21,136, + 13,248,244,11,0,16,30,242,0,1,9,17,216,12,16,240, + 8,0,16,22,136,13,240,11,1,9,17,250,115,15,0,0, + 0,151,22,56,0,184,9,65,5,3,193,4,1,65,5,3, + 99,1,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,3,0,0,0,243,148,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,125,1,124,1,106,2,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,125,2,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,2,171,2,0,0,0,0,0,0,125,3, + 116,11,0,0,0,0,0,0,0,0,124,3,124,0,106,12, + 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,121,0,114,2, + 0,0,0,41,7,114,204,0,0,0,114,26,0,0,0,114, + 161,0,0,0,114,151,0,0,0,218,17,103,101,116,95,102, + 114,111,122,101,110,95,111,98,106,101,99,116,218,4,101,120, + 101,99,114,16,0,0,0,41,4,114,200,0,0,0,114,199, + 0,0,0,114,26,0,0,0,218,4,99,111,100,101,115,4, + 0,0,0,32,32,32,32,114,7,0,0,0,114,19,1,0, + 0,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101, + 114,46,101,120,101,99,95,109,111,100,117,108,101,147,4,0, + 0,115,52,0,0,0,128,0,224,15,21,143,127,137,127,136, + 4,216,15,19,143,121,137,121,136,4,220,15,40,172,20,215, + 41,63,209,41,63,192,20,211,15,70,136,4,220,8,12,136, + 84,144,54,151,63,145,63,213,8,35,114,22,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,212,0,0,0,151,0,116,1,0,0,0, + 0,0,0,0,0,124,0,124,1,171,2,0,0,0,0,0, + 0,125,2,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,124,1,171,1,0,0,0,0,0,0,125,3,124,3,128, + 2,74,0,130,1,124,3,92,3,0,0,125,4,125,5,125, + 6,124,6,124,2,95,3,0,0,0,0,0,0,0,0,116, + 9,0,0,0,0,0,0,0,0,124,2,171,1,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,2,100,1,171,2,0,0,0, + 0,0,0,1,0,124,5,114,7,103,0,124,2,95,6,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,124,2,171, + 1,0,0,0,0,0,0,1,0,124,2,83,0,41,3,122, + 95,76,111,97,100,32,97,32,102,114,111,122,101,110,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, + 78,114,212,0,0,0,41,8,114,201,0,0,0,114,151,0, + 0,0,114,87,1,0,0,114,61,1,0,0,114,64,1,0, + 0,114,68,0,0,0,114,7,1,0,0,114,74,1,0,0, + 41,7,114,40,1,0,0,114,180,0,0,0,114,200,0,0, + 0,114,88,1,0,0,114,89,1,0,0,114,72,1,0,0, + 114,63,1,0,0,115,7,0,0,0,32,32,32,32,32,32, + 32,114,7,0,0,0,114,28,1,0,0,122,26,70,114,111, + 122,101,110,73,109,112,111,114,116,101,114,46,108,111,97,100, + 95,109,111,100,117,108,101,154,4,0,0,115,113,0,0,0, + 128,0,244,16,0,18,35,160,51,168,8,211,17,49,136,6, + 220,15,19,215,15,31,209,15,31,160,8,211,15,41,136,4, + 216,15,19,208,15,31,208,8,31,208,15,31,216,29,33,209, + 8,26,136,1,136,53,144,40,216,30,38,136,6,212,8,27, + 220,8,12,136,86,139,12,215,8,24,209,8,24,152,26,160, + 84,212,8,42,217,11,16,216,30,32,136,70,140,79,216,8, + 11,215,8,26,209,8,26,152,54,212,8,34,216,15,21,136, + 13,114,22,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,44,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,1,171,1,0,0,0,0,0,0,83,0,41,1,122,45, + 82,101,116,117,114,110,32,116,104,101,32,99,111,100,101,32, + 111,98,106,101,99,116,32,102,111,114,32,116,104,101,32,102, + 114,111,122,101,110,32,109,111,100,117,108,101,46,41,2,114, + 151,0,0,0,114,92,1,0,0,114,49,1,0,0,115,2, + 0,0,0,32,32,114,7,0,0,0,114,50,1,0,0,122, + 23,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, + 103,101,116,95,99,111,100,101,173,4,0,0,243,21,0,0, + 0,128,0,244,8,0,16,20,215,15,37,209,15,37,160,104, + 211,15,47,208,8,47,114,22,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,54,82,101,116, + 117,114,110,32,78,111,110,101,32,97,115,32,102,114,111,122, + 101,110,32,109,111,100,117,108,101,115,32,100,111,32,110,111, 116,32,104,97,118,101,32,115,111,117,114,99,101,32,99,111, 100,101,46,78,114,31,0,0,0,114,49,1,0,0,115,2, - 0,0,0,32,32,114,7,0,0,0,218,10,103,101,116,95, - 115,111,117,114,99,101,122,26,66,117,105,108,116,105,110,73, - 109,112,111,114,116,101,114,46,103,101,116,95,115,111,117,114, - 99,101,240,3,0,0,114,51,1,0,0,114,22,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,52,82,101,116,117,114,110,32,70,97,108,115,101,32,97, - 115,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, - 101,115,32,97,114,101,32,110,101,118,101,114,32,112,97,99, - 107,97,103,101,115,46,70,114,31,0,0,0,114,49,1,0, + 0,0,0,32,32,114,7,0,0,0,114,53,1,0,0,122, + 25,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, + 103,101,116,95,115,111,117,114,99,101,179,4,0,0,114,51, + 1,0,0,114,22,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,44,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,1,171,1,0,0,0,0,0,0,83,0,41,1, + 122,46,82,101,116,117,114,110,32,84,114,117,101,32,105,102, + 32,116,104,101,32,102,114,111,122,101,110,32,109,111,100,117, + 108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,46, + 41,2,114,151,0,0,0,114,65,1,0,0,114,49,1,0, 0,115,2,0,0,0,32,32,114,7,0,0,0,114,220,0, - 0,0,122,26,66,117,105,108,116,105,110,73,109,112,111,114, - 116,101,114,46,105,115,95,112,97,99,107,97,103,101,246,3, - 0,0,115,7,0,0,0,128,0,240,8,0,16,21,114,22, - 0,0,0,169,2,78,78,41,16,114,11,0,0,0,114,10, - 0,0,0,114,3,0,0,0,114,12,0,0,0,114,255,0, - 0,0,218,11,99,108,97,115,115,109,101,116,104,111,100,114, + 0,0,122,25,70,114,111,122,101,110,73,109,112,111,114,116, + 101,114,46,105,115,95,112,97,99,107,97,103,101,185,4,0, + 0,114,97,1,0,0,114,22,0,0,0,114,222,0,0,0, + 114,55,1,0,0,41,17,114,11,0,0,0,114,10,0,0, + 0,114,3,0,0,0,114,12,0,0,0,114,255,0,0,0, + 114,56,1,0,0,114,74,1,0,0,114,66,1,0,0,114, 43,1,0,0,114,58,0,0,0,114,18,1,0,0,114,19, - 1,0,0,114,184,0,0,0,114,50,1,0,0,114,53,1, - 0,0,114,220,0,0,0,114,201,0,0,0,114,28,1,0, - 0,114,31,0,0,0,114,22,0,0,0,114,7,0,0,0, - 114,37,1,0,0,114,37,1,0,0,203,3,0,0,115,171, - 0,0,0,132,0,241,4,5,5,8,240,14,0,15,25,128, - 71,224,5,16,242,2,4,5,24,243,3,0,6,17,240,2, - 4,5,24,240,12,0,6,18,241,2,5,5,68,1,243,3, - 0,6,18,240,2,5,5,68,1,240,14,0,6,18,241,2, - 2,5,61,243,3,0,6,18,240,2,2,5,61,240,8,0, - 6,17,216,5,22,241,2,2,5,20,243,3,0,6,23,243, - 3,0,6,17,240,4,2,5,20,240,8,0,6,17,216,5, - 22,241,2,2,5,20,243,3,0,6,23,243,3,0,6,17, - 240,4,2,5,20,240,8,0,6,17,216,5,22,241,2,2, - 5,21,243,3,0,6,23,243,3,0,6,17,240,4,2,5, - 21,241,8,0,19,30,208,30,47,211,18,48,129,75,114,22, - 0,0,0,114,37,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,198,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,13,100,5,132,1,171,0,0,0, - 0,0,0,0,90,7,101,5,100,14,100,6,132,1,171,0, - 0,0,0,0,0,0,90,8,101,9,100,7,132,0,171,0, - 0,0,0,0,0,0,90,10,101,9,100,8,132,0,171,0, - 0,0,0,0,0,0,90,11,101,5,100,9,132,0,171,0, - 0,0,0,0,0,0,90,12,101,5,101,13,100,10,132,0, - 171,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0, - 90,14,101,5,101,13,100,11,132,0,171,0,0,0,0,0, - 0,0,171,0,0,0,0,0,0,0,90,15,101,5,101,13, - 100,12,132,0,171,0,0,0,0,0,0,0,171,0,0,0, - 0,0,0,0,90,16,121,4,41,15,218,14,70,114,111,122, - 101,110,73,109,112,111,114,116,101,114,122,142,77,101,116,97, - 32,112,97,116,104,32,105,109,112,111,114,116,32,102,111,114, - 32,102,114,111,122,101,110,32,109,111,100,117,108,101,115,46, - 10,10,32,32,32,32,65,108,108,32,109,101,116,104,111,100, - 115,32,97,114,101,32,101,105,116,104,101,114,32,99,108,97, - 115,115,32,111,114,32,115,116,97,116,105,99,32,109,101,116, - 104,111,100,115,32,116,111,32,97,118,111,105,100,32,116,104, - 101,32,110,101,101,100,32,116,111,10,32,32,32,32,105,110, - 115,116,97,110,116,105,97,116,101,32,116,104,101,32,99,108, - 97,115,115,46,10,10,32,32,32,32,218,6,102,114,111,122, - 101,110,99,2,0,0,0,0,0,0,0,0,0,0,0,5, - 0,0,0,3,0,0,0,243,18,6,0,0,151,0,124,1, - 106,0,0,0,0,0,0,0,0,0,0,0,0,0,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,125,3,124,3, - 144,1,128,88,116,5,0,0,0,0,0,0,0,0,124,1, - 171,1,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,100,1,100,0, - 171,2,0,0,0,0,0,0,125,4,124,4,115,7,74,0, - 100,2,171,0,0,0,0,0,0,0,130,1,116,9,0,0, - 0,0,0,0,0,0,124,1,100,3,171,2,0,0,0,0, - 0,0,125,5,116,10,0,0,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,106,14,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, - 124,5,107,40,0,0,115,7,74,0,124,5,171,0,0,0, - 0,0,0,0,130,1,124,0,106,17,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,4,124,2, - 106,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,5,171,3,0,0,0,0,0,0,92,2, - 0,0,125,6,125,7,2,0,116,21,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, - 171,1,0,0,0,0,0,0,124,6,124,4,172,4,171,2, - 0,0,0,0,0,0,124,2,95,1,0,0,0,0,0,0, - 0,0,124,2,106,26,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,125,8,124,5,114,43,124,8, - 103,0,107,40,0,0,115,7,74,0,124,8,171,0,0,0, - 0,0,0,0,130,1,124,7,114,38,124,2,106,26,0,0, - 0,0,0,0,0,0,0,0,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,5,124,7,171,2,0,0,0,0,0,0, - 1,0,110,9,124,8,129,7,74,0,124,8,171,0,0,0, - 0,0,0,0,130,1,116,9,0,0,0,0,0,0,0,0, - 124,1,100,6,171,2,0,0,0,0,0,0,114,17,74,0, - 124,1,106,30,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,130,1, - 124,6,114,8,9,0,124,6,124,1,95,15,0,0,0,0, - 0,0,0,0,124,5,144,1,114,195,124,1,106,34,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,8,107,55,0,0,144,1,114,179,124,1,106,34,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 103,0,107,40,0,0,115,17,74,0,124,1,106,34,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,130,1,124,1,106,34,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, - 144,1,110,118,124,2,106,26,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,125,8,124,8,100,0, - 117,1,125,5,116,39,0,0,0,0,0,0,0,0,116,5, - 0,0,0,0,0,0,0,0,124,3,171,1,0,0,0,0, - 0,0,171,1,0,0,0,0,0,0,100,7,100,8,103,2, - 107,40,0,0,115,7,74,0,124,3,171,0,0,0,0,0, - 0,0,130,1,124,3,106,40,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,114,109,124,0,106,17, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,3,106,40,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,2,106,18,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,5, - 171,3,0,0,0,0,0,0,92,2,0,0,125,9,125,7, - 124,3,106,42,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,9,107,40,0,0,115,19,74,0, - 124,3,106,42,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,9,102,2,171,0,0,0,0,0, - 0,0,130,1,124,7,114,15,124,8,124,7,103,1,107,40, - 0,0,115,72,74,0,124,8,124,7,102,2,171,0,0,0, - 0,0,0,0,130,1,124,8,124,5,114,2,103,0,110,1, - 100,0,107,40,0,0,115,54,74,0,124,8,171,0,0,0, - 0,0,0,0,130,1,100,0,125,9,124,3,106,42,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 129,17,74,0,124,3,106,42,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,130,1,124,8,124,5,114,2,103,0,110,1,100,0, - 107,40,0,0,115,7,74,0,124,8,171,0,0,0,0,0, - 0,0,130,1,124,9,114,48,116,9,0,0,0,0,0,0, - 0,0,124,1,100,6,171,2,0,0,0,0,0,0,115,2, - 74,0,130,1,124,1,106,30,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,9,107,40,0,0, - 115,48,74,0,124,1,106,30,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,9,102,2,171,0, - 0,0,0,0,0,0,130,1,116,9,0,0,0,0,0,0, - 0,0,124,1,100,6,171,2,0,0,0,0,0,0,114,17, - 74,0,124,1,106,30,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, - 130,1,124,5,114,48,116,9,0,0,0,0,0,0,0,0, - 124,1,100,3,171,2,0,0,0,0,0,0,115,2,74,0, - 130,1,124,1,106,34,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,8,107,40,0,0,115,48, - 74,0,124,1,106,34,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,8,102,2,171,0,0,0, - 0,0,0,0,130,1,116,9,0,0,0,0,0,0,0,0, - 124,1,100,3,171,2,0,0,0,0,0,0,114,17,74,0, - 124,1,106,34,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,130,1, - 124,2,106,44,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,114,2,74,0,130,1,121,0,35,0, - 116,32,0,0,0,0,0,0,0,0,36,0,114,4,1,0, - 89,0,144,1,140,225,119,0,120,3,89,0,119,1,41,9, - 78,218,12,95,95,111,114,105,103,110,97,109,101,95,95,122, - 39,115,101,101,32,80,121,73,109,112,111,114,116,95,73,109, - 112,111,114,116,70,114,111,122,101,110,77,111,100,117,108,101, - 79,98,106,101,99,116,40,41,114,7,1,0,0,169,2,114, - 214,0,0,0,218,8,111,114,105,103,110,97,109,101,114,125, - 0,0,0,114,212,0,0,0,114,214,0,0,0,114,63,1, - 0,0,41,23,114,204,0,0,0,114,219,0,0,0,218,4, - 118,97,114,115,114,68,0,0,0,114,13,0,0,0,114,151, - 0,0,0,218,17,105,115,95,102,114,111,122,101,110,95,112, - 97,99,107,97,103,101,114,11,0,0,0,218,17,95,114,101, - 115,111,108,118,101,95,102,105,108,101,110,97,109,101,114,26, - 0,0,0,114,5,0,0,0,114,24,0,0,0,218,14,105, - 109,112,108,101,109,101,110,116,97,116,105,111,110,114,223,0, - 0,0,218,6,105,110,115,101,114,116,114,212,0,0,0,114, - 4,0,0,0,114,7,1,0,0,218,6,101,120,116,101,110, - 100,218,6,115,111,114,116,101,100,114,63,1,0,0,114,214, - 0,0,0,114,233,0,0,0,41,10,114,40,1,0,0,114, - 200,0,0,0,114,199,0,0,0,218,5,115,116,97,116,101, - 114,63,1,0,0,218,5,105,115,112,107,103,114,214,0,0, - 0,218,6,112,107,103,100,105,114,114,7,1,0,0,114,212, - 0,0,0,115,10,0,0,0,32,32,32,32,32,32,32,32, - 32,32,114,7,0,0,0,218,14,95,102,105,120,95,117,112, - 95,109,111,100,117,108,101,122,29,70,114,111,122,101,110,73, - 109,112,111,114,116,101,114,46,95,102,105,120,95,117,112,95, - 109,111,100,117,108,101,10,4,0,0,115,11,3,0,0,128, - 0,224,15,21,143,127,137,127,136,4,216,16,20,215,16,33, - 209,16,33,136,5,216,11,16,137,61,244,8,0,24,28,152, - 70,147,124,215,23,39,209,23,39,168,14,184,4,211,23,61, - 136,72,217,19,27,208,12,70,208,29,70,211,12,70,144,56, - 220,20,27,152,70,160,74,211,20,47,136,69,220,19,23,215, - 19,41,209,19,41,168,38,175,47,169,47,211,19,58,184,101, - 210,19,67,208,12,74,192,85,211,12,74,208,19,67,216,31, - 34,215,31,52,209,31,52,176,88,184,116,191,121,185,121,200, - 37,211,31,80,209,12,28,136,72,144,102,216,32,56,164,4, - 164,83,215,37,55,209,37,55,211,32,56,216,25,33,216,25, - 33,244,5,3,33,14,136,68,212,12,29,240,8,0,24,28, - 215,23,54,209,23,54,136,72,217,15,20,216,23,31,160,50, - 146,126,208,16,47,160,120,211,16,47,144,126,217,19,25,216, - 20,24,215,20,51,209,20,51,215,20,58,209,20,58,184,49, - 184,102,213,20,69,224,23,31,208,23,39,208,16,49,168,24, - 211,16,49,208,23,39,244,6,0,24,31,152,118,160,122,212, - 23,50,208,12,67,176,70,183,79,177,79,211,12,67,208,19, - 50,217,15,23,240,2,3,17,25,216,38,46,144,70,148,79, - 242,6,0,16,21,216,19,25,151,63,145,63,160,104,211,19, - 46,216,27,33,159,63,153,63,168,98,210,27,48,208,20,65, - 176,38,183,47,177,47,211,20,65,208,27,48,216,20,26,151, - 79,145,79,215,20,42,209,20,42,168,56,214,20,52,240,8, - 0,24,28,215,23,54,209,23,54,136,72,216,20,28,160,68, - 208,20,40,136,69,228,19,25,156,36,152,117,155,43,211,19, - 38,168,58,176,122,208,42,66,210,19,66,208,12,73,192,69, - 211,12,73,208,19,66,216,15,20,143,126,138,126,240,6,0, - 22,25,215,21,42,209,21,42,168,53,175,62,169,62,184,52, - 191,57,185,57,192,101,211,21,76,241,3,1,17,19,144,24, - 152,54,224,23,28,151,126,145,126,168,24,210,23,49,208,16, - 77,176,69,183,78,177,78,192,72,208,51,77,211,16,77,208, - 23,49,217,19,25,216,27,35,168,6,160,120,210,27,47,208, - 20,67,176,40,184,70,208,49,67,211,20,67,208,27,47,224, - 27,35,169,101,169,2,184,20,210,27,62,208,20,72,192,8, - 211,20,72,208,27,62,224,27,31,144,8,216,23,28,151,126, - 145,126,208,23,45,208,16,61,168,117,175,126,169,126,211,16, - 61,208,23,45,216,23,31,169,37,161,66,176,84,210,23,58, - 208,16,68,184,72,211,16,68,208,23,58,225,15,23,220,23, - 30,152,118,160,122,212,23,50,208,16,50,208,23,50,216,23, - 29,151,127,145,127,168,40,210,23,50,208,16,79,176,86,183, - 95,177,95,192,104,208,52,79,211,16,79,208,23,50,228,27, - 34,160,54,168,58,212,27,54,208,16,71,184,6,191,15,185, - 15,211,16,71,208,23,54,217,15,20,220,23,30,152,118,160, - 122,212,23,50,208,16,50,208,23,50,216,23,29,151,127,145, - 127,168,40,210,23,50,208,16,79,176,86,183,95,177,95,192, - 104,208,52,79,211,16,79,208,23,50,228,27,34,160,54,168, - 58,212,27,54,208,16,71,184,6,191,15,185,15,211,16,71, - 208,23,54,216,19,23,215,19,36,210,19,36,208,8,36,208, - 15,36,208,19,36,248,244,75,1,0,24,38,242,0,1,17, - 25,218,20,24,240,3,1,17,25,250,115,18,0,0,0,196, - 29,7,75,57,0,203,57,9,76,6,3,204,5,1,76,6, - 3,78,99,4,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,124,1, - 114,17,116,1,0,0,0,0,0,0,0,0,116,2,0,0, - 0,0,0,0,0,0,100,1,100,0,171,3,0,0,0,0, - 0,0,115,1,121,2,9,0,124,0,106,4,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,4, - 124,1,124,2,107,55,0,0,114,32,124,1,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,114,13,124,1,100,7, - 100,0,26,0,125,1,124,3,115,8,124,1,155,0,100,8, - 157,2,125,1,110,2,100,9,125,3,124,1,106,13,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 100,10,124,4,171,2,0,0,0,0,0,0,125,5,124,3, - 114,33,116,2,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, - 155,0,124,4,155,0,124,5,155,0,157,3,125,6,124,6, - 155,0,124,4,155,0,100,11,157,3,125,7,124,7,124,6, - 102,2,83,0,100,0,125,6,116,2,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,155,0,124,4,155,0,124,5,155,0, - 100,12,157,4,125,7,124,7,124,6,102,2,83,0,35,0, - 116,6,0,0,0,0,0,0,0,0,36,0,114,33,1,0, - 116,2,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,100,3, - 107,40,0,0,114,2,100,4,110,1,100,5,120,1,125,4, - 124,0,95,2,0,0,0,0,0,0,0,0,89,0,140,160, - 119,0,120,3,89,0,119,1,41,13,78,218,11,95,115,116, - 100,108,105,98,95,100,105,114,114,55,1,0,0,218,5,119, - 105,110,51,50,250,1,92,250,1,47,250,1,60,114,138,0, - 0,0,122,9,46,95,95,105,110,105,116,95,95,70,114,244, - 0,0,0,122,11,95,95,105,110,105,116,95,95,46,112,121, - 122,3,46,112,121,41,8,114,15,0,0,0,114,24,0,0, - 0,218,4,95,83,69,80,114,4,0,0,0,218,8,112,108, - 97,116,102,111,114,109,114,168,0,0,0,114,20,0,0,0, - 114,76,1,0,0,41,8,114,40,1,0,0,114,180,0,0, - 0,218,5,97,108,105,97,115,114,72,1,0,0,218,3,115, - 101,112,218,7,114,101,108,102,105,108,101,114,73,1,0,0, - 114,214,0,0,0,115,8,0,0,0,32,32,32,32,32,32, - 32,32,114,7,0,0,0,114,66,1,0,0,122,32,70,114, - 111,122,101,110,73,109,112,111,114,116,101,114,46,95,114,101, - 115,111,108,118,101,95,102,105,108,101,110,97,109,101,79,4, - 0,0,115,249,0,0,0,128,0,225,15,23,156,119,164,115, - 168,77,184,52,212,31,64,216,19,29,240,2,3,9,70,1, - 216,18,21,151,40,145,40,136,67,240,8,0,12,20,144,117, - 210,11,28,216,15,23,215,15,34,209,15,34,160,51,212,15, - 39,216,27,35,160,65,160,66,152,60,144,8,217,23,28,216, - 34,42,160,26,168,57,208,31,53,145,72,224,24,29,144,5, - 216,18,26,215,18,34,209,18,34,160,51,168,3,211,18,44, - 136,7,217,11,16,220,24,27,159,15,153,15,208,23,40,168, - 19,168,5,168,103,168,89,208,21,55,136,70,216,26,32,152, - 24,160,35,160,21,160,107,208,23,50,136,72,240,8,0,16, - 24,152,22,208,15,31,208,8,31,240,5,0,22,26,136,70, - 220,26,29,159,47,153,47,208,25,42,168,51,168,37,176,7, - 168,121,184,3,208,23,60,136,72,216,15,23,152,22,208,15, - 31,208,8,31,248,244,35,0,16,30,242,0,1,9,70,1, - 220,37,40,167,92,161,92,176,87,210,37,60,153,84,192,35, - 208,12,69,136,67,144,35,150,40,240,3,1,9,70,1,250, - 115,17,0,0,0,150,12,66,25,0,194,25,39,67,3,3, - 195,2,1,67,3,3,99,4,0,0,0,0,0,0,0,0, - 0,0,0,6,0,0,0,3,0,0,0,243,50,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,124,1,171,2,0,0, - 0,0,0,0,125,4,124,4,128,1,121,0,124,4,92,3, - 0,0,125,5,125,6,125,7,116,7,0,0,0,0,0,0, - 0,0,124,1,124,0,124,0,106,8,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,6,172,1, - 171,4,0,0,0,0,0,0,125,8,124,0,106,11,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,7,124,1,124,6,171,3,0,0,0,0,0,0,92,2, - 0,0,125,9,125,10,2,0,116,13,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, - 171,1,0,0,0,0,0,0,124,9,124,7,172,2,171,2, - 0,0,0,0,0,0,124,8,95,9,0,0,0,0,0,0, - 0,0,124,10,114,28,124,8,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, - 100,3,124,10,171,2,0,0,0,0,0,0,1,0,124,8, - 83,0,41,4,78,114,253,0,0,0,114,62,1,0,0,114, - 125,0,0,0,41,12,114,161,0,0,0,114,151,0,0,0, - 218,11,102,105,110,100,95,102,114,111,122,101,110,114,194,0, - 0,0,114,255,0,0,0,114,66,1,0,0,114,5,0,0, - 0,114,24,0,0,0,114,67,1,0,0,114,219,0,0,0, - 114,223,0,0,0,114,68,1,0,0,41,11,114,40,1,0, - 0,114,180,0,0,0,114,41,1,0,0,114,42,1,0,0, - 218,4,105,110,102,111,218,1,95,114,72,1,0,0,114,63, - 1,0,0,114,199,0,0,0,114,214,0,0,0,114,73,1, - 0,0,115,11,0,0,0,32,32,32,32,32,32,32,32,32, - 32,32,114,7,0,0,0,114,43,1,0,0,122,24,70,114, - 111,122,101,110,73,109,112,111,114,116,101,114,46,102,105,110, - 100,95,115,112,101,99,104,4,0,0,115,157,0,0,0,128, - 0,228,15,40,172,20,215,41,57,209,41,57,184,56,211,15, - 68,136,4,216,11,15,136,60,216,19,23,240,26,0,30,34, - 209,8,26,136,1,136,53,144,40,220,15,31,160,8,168,35, - 216,39,42,167,123,161,123,216,43,48,244,5,2,16,50,136, - 4,240,6,0,28,31,215,27,48,209,27,48,176,24,184,56, - 192,85,211,27,75,209,8,24,136,8,144,38,216,28,52,156, - 68,164,19,215,33,51,209,33,51,211,28,52,216,21,29,216, - 21,29,244,5,3,29,10,136,4,212,8,25,241,8,0,12, - 18,216,12,16,215,12,43,209,12,43,215,12,50,209,12,50, - 176,49,176,102,212,12,61,216,15,19,136,11,114,22,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,144,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,125,1,9,0,124,0,106,4,0,0,0, + 1,0,0,114,28,1,0,0,114,189,0,0,0,114,50,1, + 0,0,114,53,1,0,0,114,220,0,0,0,114,31,0,0, + 0,114,22,0,0,0,114,7,0,0,0,114,58,1,0,0, + 114,58,1,0,0,255,3,0,0,115,219,0,0,0,132,0, + 241,4,5,5,8,240,14,0,15,23,128,71,224,5,16,241, + 2,66,1,5,37,243,3,0,6,17,240,2,66,1,5,37, + 240,72,2,0,6,17,242,2,22,5,32,243,3,0,6,17, + 240,2,22,5,32,240,48,0,6,17,242,2,27,5,20,243, + 3,0,6,17,240,2,27,5,20,240,58,0,6,18,241,2, + 10,5,22,243,3,0,6,18,240,2,10,5,22,240,24,0, + 6,18,241,2,4,5,36,243,3,0,6,18,240,2,4,5, + 36,240,12,0,6,17,241,2,16,5,22,243,3,0,6,17, + 240,2,16,5,22,240,36,0,6,17,216,5,21,241,2,2, + 5,48,243,3,0,6,22,243,3,0,6,17,240,4,2,5, + 48,240,8,0,6,17,216,5,21,241,2,2,5,20,243,3, + 0,6,22,243,3,0,6,17,240,4,2,5,20,240,8,0, + 6,17,216,5,21,241,2,2,5,48,243,3,0,6,22,243, + 3,0,6,17,241,4,2,5,48,114,22,0,0,0,114,58, + 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,18,95,73,109, + 112,111,114,116,76,111,99,107,67,111,110,116,101,120,116,122, + 36,67,111,110,116,101,120,116,32,109,97,110,97,103,101,114, + 32,102,111,114,32,116,104,101,32,105,109,112,111,114,116,32, + 108,111,99,107,46,99,1,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,243,44,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,171, + 0,0,0,0,0,0,0,1,0,121,1,41,2,122,24,65, + 99,113,117,105,114,101,32,116,104,101,32,105,109,112,111,114, + 116,32,108,111,99,107,46,78,41,2,114,151,0,0,0,114, + 152,0,0,0,114,66,0,0,0,115,1,0,0,0,32,114, + 7,0,0,0,114,87,0,0,0,122,28,95,73,109,112,111, + 114,116,76,111,99,107,67,111,110,116,101,120,116,46,95,95, + 101,110,116,101,114,95,95,198,4,0,0,243,14,0,0,0, + 128,0,228,8,12,215,8,25,209,8,25,213,8,27,114,22, + 0,0,0,99,4,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,243,44,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,171,0,0, + 0,0,0,0,0,1,0,121,1,41,2,122,60,82,101,108, + 101,97,115,101,32,116,104,101,32,105,109,112,111,114,116,32, + 108,111,99,107,32,114,101,103,97,114,100,108,101,115,115,32, + 111,102,32,97,110,121,32,114,97,105,115,101,100,32,101,120, + 99,101,112,116,105,111,110,115,46,78,41,2,114,151,0,0, + 0,114,154,0,0,0,41,4,114,44,0,0,0,218,8,101, + 120,99,95,116,121,112,101,218,9,101,120,99,95,118,97,108, + 117,101,218,13,101,120,99,95,116,114,97,99,101,98,97,99, + 107,115,4,0,0,0,32,32,32,32,114,7,0,0,0,114, + 92,0,0,0,122,27,95,73,109,112,111,114,116,76,111,99, + 107,67,111,110,116,101,120,116,46,95,95,101,120,105,116,95, + 95,202,4,0,0,114,103,1,0,0,114,22,0,0,0,78, + 41,6,114,11,0,0,0,114,10,0,0,0,114,3,0,0, + 0,114,12,0,0,0,114,87,0,0,0,114,92,0,0,0, + 114,31,0,0,0,114,22,0,0,0,114,7,0,0,0,114, + 101,1,0,0,114,101,1,0,0,194,4,0,0,115,15,0, + 0,0,132,0,225,4,46,242,4,2,5,28,243,8,2,5, + 28,114,22,0,0,0,114,101,1,0,0,99,3,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0, + 243,126,0,0,0,151,0,124,1,106,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,100,1,124, + 2,100,2,122,10,0,0,171,2,0,0,0,0,0,0,125, + 3,116,3,0,0,0,0,0,0,0,0,124,3,171,1,0, + 0,0,0,0,0,124,2,107,2,0,0,114,11,116,5,0, + 0,0,0,0,0,0,0,100,3,171,1,0,0,0,0,0, + 0,130,1,124,3,100,4,25,0,0,0,125,4,124,0,114, + 7,124,4,155,0,100,1,124,0,155,0,157,3,83,0,124, + 4,83,0,41,5,122,50,82,101,115,111,108,118,101,32,97, + 32,114,101,108,97,116,105,118,101,32,109,111,100,117,108,101, + 32,110,97,109,101,32,116,111,32,97,110,32,97,98,115,111, + 108,117,116,101,32,111,110,101,46,114,244,0,0,0,114,138, + 0,0,0,122,50,97,116,116,101,109,112,116,101,100,32,114, + 101,108,97,116,105,118,101,32,105,109,112,111,114,116,32,98, + 101,121,111,110,100,32,116,111,112,45,108,101,118,101,108,32, + 112,97,99,107,97,103,101,114,125,0,0,0,41,3,218,6, + 114,115,112,108,105,116,114,127,0,0,0,114,178,0,0,0, + 41,5,114,26,0,0,0,218,7,112,97,99,107,97,103,101, + 218,5,108,101,118,101,108,218,4,98,105,116,115,218,4,98, + 97,115,101,115,5,0,0,0,32,32,32,32,32,114,7,0, + 0,0,218,13,95,114,101,115,111,108,118,101,95,110,97,109, + 101,114,114,1,0,0,207,4,0,0,115,79,0,0,0,128, + 0,224,11,18,143,62,137,62,152,35,152,117,160,113,153,121, + 211,11,41,128,68,220,7,10,136,52,131,121,144,53,210,7, + 24,220,14,25,208,26,78,211,14,79,208,8,79,216,11,15, + 144,1,137,55,128,68,217,31,35,136,100,136,86,144,49,144, + 84,144,70,208,11,27,208,4,45,168,20,208,4,45,114,22, + 0,0,0,99,3,0,0,0,0,0,0,0,0,0,0,0, + 7,0,0,0,3,0,0,0,243,242,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,125,3,124, + 3,128,11,116,5,0,0,0,0,0,0,0,0,100,2,171, + 1,0,0,0,0,0,0,130,1,124,3,115,26,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,100,3,116,10,0, + 0,0,0,0,0,0,0,171,2,0,0,0,0,0,0,1, + 0,124,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,118,0,125,4,124,3,68,0,93,113,0,0,125,5,116, + 15,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, + 0,53,0,1,0,9,0,124,5,106,16,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,125,6,2, + 0,124,6,124,0,124,1,124,2,171,3,0,0,0,0,0, + 0,125,7,9,0,100,1,100,1,100,1,171,2,0,0,0, + 0,0,0,1,0,127,7,128,1,140,49,124,4,115,60,124, + 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,118, + 0,114,42,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,124,0,25,0,0,0,125,8,9,0,124,8,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,4,124,7,99,2,1,0,83,0,124, + 9,99,2,1,0,83,0,124,7,99,2,1,0,83,0,4, + 0,121,1,35,0,116,18,0,0,0,0,0,0,0,0,36, + 0,114,11,1,0,89,0,100,1,100,1,100,1,171,2,0, + 0,0,0,0,0,1,0,140,136,119,0,120,3,89,0,119, + 1,35,0,49,0,115,1,119,2,1,0,89,0,1,0,1, + 0,140,103,120,3,89,0,119,1,35,0,116,18,0,0,0, + 0,0,0,0,0,36,0,114,7,1,0,124,7,99,2,89, + 0,99,2,1,0,83,0,119,0,120,3,89,0,119,1,41, + 4,122,21,70,105,110,100,32,97,32,109,111,100,117,108,101, + 39,115,32,115,112,101,99,46,78,122,53,115,121,115,46,109, + 101,116,97,95,112,97,116,104,32,105,115,32,78,111,110,101, + 44,32,80,121,116,104,111,110,32,105,115,32,108,105,107,101, + 108,121,32,115,104,117,116,116,105,110,103,32,100,111,119,110, + 122,22,115,121,115,46,109,101,116,97,95,112,97,116,104,32, + 105,115,32,101,109,112,116,121,41,11,114,24,0,0,0,218, + 9,109,101,116,97,95,112,97,116,104,114,178,0,0,0,114, + 191,0,0,0,114,192,0,0,0,114,27,1,0,0,114,195, + 0,0,0,114,101,1,0,0,114,43,1,0,0,114,4,0, + 0,0,114,204,0,0,0,41,10,114,26,0,0,0,114,41, + 1,0,0,114,42,1,0,0,114,116,1,0,0,218,9,105, + 115,95,114,101,108,111,97,100,218,6,102,105,110,100,101,114, + 114,43,1,0,0,114,199,0,0,0,114,200,0,0,0,114, + 204,0,0,0,115,10,0,0,0,32,32,32,32,32,32,32, + 32,32,32,114,7,0,0,0,218,10,95,102,105,110,100,95, + 115,112,101,99,114,119,1,0,0,216,4,0,0,115,6,1, + 0,0,128,0,228,16,19,151,13,145,13,128,73,216,7,16, + 208,7,24,228,14,25,240,0,1,27,42,243,0,1,15,43, + 240,0,1,9,43,241,6,0,12,21,220,8,17,143,14,137, + 14,208,23,47,180,29,212,8,63,240,10,0,17,21,156,3, + 159,11,153,11,208,16,35,128,73,219,18,27,136,6,220,13, + 31,213,13,33,240,2,5,13,53,216,28,34,215,28,44,209, + 28,44,144,9,241,8,0,24,33,160,20,160,116,168,86,211, + 23,52,145,4,247,13,0,14,34,240,14,0,12,16,209,11, + 27,225,19,28,160,20,172,19,175,27,169,27,209,33,52,220, + 25,28,159,27,153,27,160,84,209,25,42,144,6,240,2,11, + 17,40,216,31,37,159,127,153,127,144,72,240,14,0,24,32, + 208,23,39,216,31,35,154,11,224,31,39,154,15,224,23,27, + 146,11,240,51,0,19,28,240,54,0,16,20,248,244,47,0, + 20,34,242,0,1,13,25,216,16,24,247,9,0,14,34,208, + 13,33,240,6,1,13,25,250,247,7,0,14,34,208,13,33, + 251,244,26,0,24,38,242,0,4,17,32,240,8,0,28,32, + 148,75,240,9,4,17,32,250,115,66,0,0,0,193,27,1, + 67,26,5,193,29,12,67,3,4,193,41,10,67,26,5,194, + 39,12,67,38,2,195,3,9,67,23,7,195,12,1,67,26, + 5,195,22,1,67,23,7,195,23,3,67,26,5,195,26,5, + 67,35,9,195,38,11,67,54,5,195,53,1,67,54,5,99, + 3,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, + 3,0,0,0,243,242,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,115,23,116,5,0,0,0, + 0,0,0,0,0,100,1,116,7,0,0,0,0,0,0,0, + 0,124,0,171,1,0,0,0,0,0,0,155,0,157,2,171, + 1,0,0,0,0,0,0,130,1,124,2,100,2,107,2,0, + 0,114,11,116,9,0,0,0,0,0,0,0,0,100,3,171, + 1,0,0,0,0,0,0,130,1,124,2,100,2,107,68,0, + 0,114,40,116,1,0,0,0,0,0,0,0,0,124,1,116, + 2,0,0,0,0,0,0,0,0,171,2,0,0,0,0,0, + 0,115,11,116,5,0,0,0,0,0,0,0,0,100,4,171, + 1,0,0,0,0,0,0,130,1,124,1,115,11,116,11,0, + 0,0,0,0,0,0,0,100,5,171,1,0,0,0,0,0, + 0,130,1,124,0,115,17,124,2,100,2,107,40,0,0,114, + 11,116,9,0,0,0,0,0,0,0,0,100,6,171,1,0, + 0,0,0,0,0,130,1,121,7,121,7,41,8,122,28,86, + 101,114,105,102,121,32,97,114,103,117,109,101,110,116,115,32, + 97,114,101,32,34,115,97,110,101,34,46,122,29,109,111,100, + 117,108,101,32,110,97,109,101,32,109,117,115,116,32,98,101, + 32,115,116,114,44,32,110,111,116,32,114,125,0,0,0,122, + 18,108,101,118,101,108,32,109,117,115,116,32,98,101,32,62, + 61,32,48,122,31,95,95,112,97,99,107,97,103,101,95,95, + 32,110,111,116,32,115,101,116,32,116,111,32,97,32,115,116, + 114,105,110,103,122,54,97,116,116,101,109,112,116,101,100,32, + 114,101,108,97,116,105,118,101,32,105,109,112,111,114,116,32, + 119,105,116,104,32,110,111,32,107,110,111,119,110,32,112,97, + 114,101,110,116,32,112,97,99,107,97,103,101,122,17,69,109, + 112,116,121,32,109,111,100,117,108,101,32,110,97,109,101,78, + 41,6,114,23,1,0,0,218,3,115,116,114,218,9,84,121, + 112,101,69,114,114,111,114,114,5,0,0,0,218,10,86,97, + 108,117,101,69,114,114,111,114,114,178,0,0,0,169,3,114, + 26,0,0,0,114,110,1,0,0,114,111,1,0,0,115,3, + 0,0,0,32,32,32,114,7,0,0,0,218,13,95,115,97, + 110,105,116,121,95,99,104,101,99,107,114,125,1,0,0,5, + 5,0,0,115,132,0,0,0,128,0,228,11,21,144,100,156, + 67,212,11,32,220,14,23,208,26,55,188,4,184,84,187,10, + 176,124,208,24,68,211,14,69,208,8,69,216,7,12,136,113, + 130,121,220,14,24,208,25,45,211,14,46,208,8,46,216,7, + 12,136,113,130,121,220,15,25,152,39,164,51,212,15,39,220, + 18,27,208,28,61,211,18,62,208,12,62,217,17,24,220,18, + 29,240,0,1,31,40,243,0,1,19,41,240,0,1,13,41, + 225,11,15,144,69,152,81,146,74,220,14,24,208,25,44,211, + 14,45,208,8,45,240,3,0,21,31,136,52,114,22,0,0, + 0,122,16,78,111,32,109,111,100,117,108,101,32,110,97,109, + 101,100,32,122,4,123,33,114,125,99,2,0,0,0,0,0, + 0,0,0,0,0,0,6,0,0,0,3,0,0,0,243,86, + 3,0,0,151,0,100,0,125,2,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,100,2,25,0,0,0,125, + 3,100,0,125,4,124,3,114,131,124,3,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,118,1,114,12,116,7,0, + 0,0,0,0,0,0,0,124,1,124,3,171,2,0,0,0, + 0,0,0,1,0,124,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,118,0,114,19,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,25,0,0,0,83,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,124,3,25, + 0,0,0,125,5,9,0,124,5,106,8,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,125,2,124, + 5,106,16,0,0,0,0,0,0,0,0,0,0,0,0,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,1,171, + 1,0,0,0,0,0,0,100,6,25,0,0,0,125,7,116, + 19,0,0,0,0,0,0,0,0,124,0,124,2,171,2,0, + 0,0,0,0,0,125,8,124,8,128,21,116,15,0,0,0, + 0,0,0,0,0,116,12,0,0,0,0,0,0,0,0,155, + 0,124,0,155,2,157,2,124,0,172,5,171,2,0,0,0, + 0,0,0,130,1,124,4,114,27,124,4,106,20,0,0,0, 0,0,0,0,0,0,0,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,125,2,124,2,114,7,124,2,124,1,95,4,0, - 0,0,0,0,0,0,0,124,1,83,0,35,0,116,10,0, - 0,0,0,0,0,0,0,36,0,114,4,1,0,89,0,124, - 1,83,0,119,0,120,3,89,0,119,1,41,1,122,22,83, - 101,116,32,95,95,102,105,108,101,95,95,44,32,105,102,32, - 97,98,108,101,46,41,6,114,27,0,0,0,114,26,0,0, - 0,114,219,0,0,0,114,214,0,0,0,114,212,0,0,0, - 114,4,0,0,0,41,3,114,199,0,0,0,114,200,0,0, - 0,114,214,0,0,0,115,3,0,0,0,32,32,32,114,7, - 0,0,0,114,18,1,0,0,122,28,70,114,111,122,101,110, - 73,109,112,111,114,116,101,114,46,99,114,101,97,116,101,95, - 109,111,100,117,108,101,134,4,0,0,115,84,0,0,0,128, - 0,244,6,0,18,29,152,84,159,89,153,89,211,17,39,136, - 6,240,2,6,9,43,216,23,27,215,23,40,209,23,40,215, - 23,49,209,23,49,136,72,241,8,0,16,24,216,34,42,144, - 6,148,15,216,15,21,136,13,248,244,11,0,16,30,242,0, - 1,9,17,216,12,16,240,8,0,16,22,136,13,240,11,1, - 9,17,250,115,15,0,0,0,151,22,56,0,184,9,65,5, - 3,193,4,1,65,5,3,99,1,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,3,0,0,0,243,148,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,125,1,124,1,106,2,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,125,2,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,2,171,2,0, - 0,0,0,0,0,125,3,116,11,0,0,0,0,0,0,0, - 0,124,3,124,0,106,12,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,121,0,114,2,0,0,0,41,7,114,204,0,0, - 0,114,26,0,0,0,114,161,0,0,0,114,151,0,0,0, - 218,17,103,101,116,95,102,114,111,122,101,110,95,111,98,106, - 101,99,116,218,4,101,120,101,99,114,16,0,0,0,41,4, - 114,200,0,0,0,114,199,0,0,0,114,26,0,0,0,218, - 4,99,111,100,101,115,4,0,0,0,32,32,32,32,114,7, - 0,0,0,114,19,1,0,0,122,26,70,114,111,122,101,110, - 73,109,112,111,114,116,101,114,46,101,120,101,99,95,109,111, - 100,117,108,101,147,4,0,0,115,52,0,0,0,128,0,224, - 15,21,143,127,137,127,136,4,216,15,19,143,121,137,121,136, - 4,220,15,40,172,20,215,41,63,209,41,63,192,20,211,15, - 70,136,4,220,8,12,136,84,144,54,151,63,145,63,213,8, - 35,114,22,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,212,0,0,0, - 151,0,116,1,0,0,0,0,0,0,0,0,124,0,124,1, - 171,2,0,0,0,0,0,0,125,2,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,124,1,171,1,0,0,0,0, - 0,0,125,3,124,3,128,2,74,0,130,1,124,3,92,3, - 0,0,125,4,125,5,125,6,124,6,124,2,95,3,0,0, - 0,0,0,0,0,0,116,9,0,0,0,0,0,0,0,0, - 124,2,171,1,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,2, - 100,1,171,2,0,0,0,0,0,0,1,0,124,5,114,7, - 103,0,124,2,95,6,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,124,2,171,1,0,0,0,0,0,0,1,0, - 124,2,83,0,41,3,122,95,76,111,97,100,32,97,32,102, - 114,111,122,101,110,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,78,114,212,0,0,0,41,8,114, - 201,0,0,0,114,151,0,0,0,114,87,1,0,0,114,61, - 1,0,0,114,64,1,0,0,114,68,0,0,0,114,7,1, - 0,0,114,74,1,0,0,41,7,114,40,1,0,0,114,180, - 0,0,0,114,200,0,0,0,114,88,1,0,0,114,89,1, - 0,0,114,72,1,0,0,114,63,1,0,0,115,7,0,0, - 0,32,32,32,32,32,32,32,114,7,0,0,0,114,28,1, - 0,0,122,26,70,114,111,122,101,110,73,109,112,111,114,116, - 101,114,46,108,111,97,100,95,109,111,100,117,108,101,154,4, - 0,0,115,113,0,0,0,128,0,244,16,0,18,35,160,51, - 168,8,211,17,49,136,6,220,15,19,215,15,31,209,15,31, - 160,8,211,15,41,136,4,216,15,19,208,15,31,208,8,31, - 208,15,31,216,29,33,209,8,26,136,1,136,53,144,40,216, - 30,38,136,6,212,8,27,220,8,12,136,86,139,12,215,8, - 24,209,8,24,152,26,160,84,212,8,42,217,11,16,216,30, - 32,136,70,140,79,216,8,11,215,8,26,209,8,26,152,54, - 212,8,34,216,15,21,136,13,114,22,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,44,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,1,171,1,0,0,0,0,0, - 0,83,0,41,1,122,45,82,101,116,117,114,110,32,116,104, - 101,32,99,111,100,101,32,111,98,106,101,99,116,32,102,111, - 114,32,116,104,101,32,102,114,111,122,101,110,32,109,111,100, - 117,108,101,46,41,2,114,151,0,0,0,114,92,1,0,0, - 114,49,1,0,0,115,2,0,0,0,32,32,114,7,0,0, - 0,114,50,1,0,0,122,23,70,114,111,122,101,110,73,109, - 112,111,114,116,101,114,46,103,101,116,95,99,111,100,101,173, - 4,0,0,243,21,0,0,0,128,0,244,8,0,16,20,215, - 15,37,209,15,37,160,104,211,15,47,208,8,47,114,22,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,54,82,101,116,117,114,110,32,78,111,110,101,32, - 97,115,32,102,114,111,122,101,110,32,109,111,100,117,108,101, - 115,32,100,111,32,110,111,116,32,104,97,118,101,32,115,111, - 117,114,99,101,32,99,111,100,101,46,78,114,31,0,0,0, - 114,49,1,0,0,115,2,0,0,0,32,32,114,7,0,0, - 0,114,53,1,0,0,122,25,70,114,111,122,101,110,73,109, - 112,111,114,116,101,114,46,103,101,116,95,115,111,117,114,99, - 101,179,4,0,0,114,51,1,0,0,114,22,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,44,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,1,171,1,0,0,0, - 0,0,0,83,0,41,1,122,46,82,101,116,117,114,110,32, - 84,114,117,101,32,105,102,32,116,104,101,32,102,114,111,122, - 101,110,32,109,111,100,117,108,101,32,105,115,32,97,32,112, - 97,99,107,97,103,101,46,41,2,114,151,0,0,0,114,65, - 1,0,0,114,49,1,0,0,115,2,0,0,0,32,32,114, - 7,0,0,0,114,220,0,0,0,122,25,70,114,111,122,101, - 110,73,109,112,111,114,116,101,114,46,105,115,95,112,97,99, - 107,97,103,101,185,4,0,0,114,97,1,0,0,114,22,0, - 0,0,114,222,0,0,0,114,55,1,0,0,41,17,114,11, - 0,0,0,114,10,0,0,0,114,3,0,0,0,114,12,0, - 0,0,114,255,0,0,0,114,56,1,0,0,114,74,1,0, - 0,114,66,1,0,0,114,43,1,0,0,114,58,0,0,0, - 114,18,1,0,0,114,19,1,0,0,114,28,1,0,0,114, - 189,0,0,0,114,50,1,0,0,114,53,1,0,0,114,220, - 0,0,0,114,31,0,0,0,114,22,0,0,0,114,7,0, - 0,0,114,58,1,0,0,114,58,1,0,0,255,3,0,0, - 115,219,0,0,0,132,0,241,4,5,5,8,240,14,0,15, - 23,128,71,224,5,16,241,2,66,1,5,37,243,3,0,6, - 17,240,2,66,1,5,37,240,72,2,0,6,17,242,2,22, - 5,32,243,3,0,6,17,240,2,22,5,32,240,48,0,6, - 17,242,2,27,5,20,243,3,0,6,17,240,2,27,5,20, - 240,58,0,6,18,241,2,10,5,22,243,3,0,6,18,240, - 2,10,5,22,240,24,0,6,18,241,2,4,5,36,243,3, - 0,6,18,240,2,4,5,36,240,12,0,6,17,241,2,16, - 5,22,243,3,0,6,17,240,2,16,5,22,240,36,0,6, - 17,216,5,21,241,2,2,5,48,243,3,0,6,22,243,3, - 0,6,17,240,4,2,5,48,240,8,0,6,17,216,5,21, - 241,2,2,5,20,243,3,0,6,22,243,3,0,6,17,240, - 4,2,5,20,240,8,0,6,17,216,5,21,241,2,2,5, - 48,243,3,0,6,22,243,3,0,6,17,241,4,2,5,48, - 114,22,0,0,0,114,58,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,18,95,73,109,112,111,114,116,76,111,99,107,67, - 111,110,116,101,120,116,122,36,67,111,110,116,101,120,116,32, - 109,97,110,97,103,101,114,32,102,111,114,32,116,104,101,32, - 105,109,112,111,114,116,32,108,111,99,107,46,99,1,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0, - 0,243,44,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,171,0,0,0,0,0,0,0,1,0, - 121,1,41,2,122,24,65,99,113,117,105,114,101,32,116,104, - 101,32,105,109,112,111,114,116,32,108,111,99,107,46,78,41, - 2,114,151,0,0,0,114,152,0,0,0,114,66,0,0,0, - 115,1,0,0,0,32,114,7,0,0,0,114,87,0,0,0, - 122,28,95,73,109,112,111,114,116,76,111,99,107,67,111,110, - 116,101,120,116,46,95,95,101,110,116,101,114,95,95,198,4, - 0,0,243,14,0,0,0,128,0,228,8,12,215,8,25,209, - 8,25,213,8,27,114,22,0,0,0,99,4,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,243, - 44,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,171,0,0,0,0,0,0,0,1,0,121,1, - 41,2,122,60,82,101,108,101,97,115,101,32,116,104,101,32, - 105,109,112,111,114,116,32,108,111,99,107,32,114,101,103,97, - 114,100,108,101,115,115,32,111,102,32,97,110,121,32,114,97, - 105,115,101,100,32,101,120,99,101,112,116,105,111,110,115,46, - 78,41,2,114,151,0,0,0,114,154,0,0,0,41,4,114, - 44,0,0,0,218,8,101,120,99,95,116,121,112,101,218,9, - 101,120,99,95,118,97,108,117,101,218,13,101,120,99,95,116, - 114,97,99,101,98,97,99,107,115,4,0,0,0,32,32,32, - 32,114,7,0,0,0,114,92,0,0,0,122,27,95,73,109, - 112,111,114,116,76,111,99,107,67,111,110,116,101,120,116,46, - 95,95,101,120,105,116,95,95,202,4,0,0,114,103,1,0, - 0,114,22,0,0,0,78,41,6,114,11,0,0,0,114,10, - 0,0,0,114,3,0,0,0,114,12,0,0,0,114,87,0, - 0,0,114,92,0,0,0,114,31,0,0,0,114,22,0,0, - 0,114,7,0,0,0,114,101,1,0,0,114,101,1,0,0, - 194,4,0,0,115,15,0,0,0,132,0,225,4,46,242,4, - 2,5,28,243,8,2,5,28,114,22,0,0,0,114,101,1, - 0,0,99,3,0,0,0,0,0,0,0,0,0,0,0,5, - 0,0,0,3,0,0,0,243,126,0,0,0,151,0,124,1, - 106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,100,1,124,2,100,2,122,10,0,0,171,2, - 0,0,0,0,0,0,125,3,116,3,0,0,0,0,0,0, - 0,0,124,3,171,1,0,0,0,0,0,0,124,2,107,2, - 0,0,114,11,116,5,0,0,0,0,0,0,0,0,100,3, - 171,1,0,0,0,0,0,0,130,1,124,3,100,4,25,0, - 0,0,125,4,124,0,114,7,124,4,155,0,100,1,124,0, - 155,0,157,3,83,0,124,4,83,0,41,5,122,50,82,101, - 115,111,108,118,101,32,97,32,114,101,108,97,116,105,118,101, - 32,109,111,100,117,108,101,32,110,97,109,101,32,116,111,32, - 97,110,32,97,98,115,111,108,117,116,101,32,111,110,101,46, - 114,244,0,0,0,114,138,0,0,0,122,50,97,116,116,101, - 109,112,116,101,100,32,114,101,108,97,116,105,118,101,32,105, - 109,112,111,114,116,32,98,101,121,111,110,100,32,116,111,112, - 45,108,101,118,101,108,32,112,97,99,107,97,103,101,114,125, - 0,0,0,41,3,218,6,114,115,112,108,105,116,114,127,0, - 0,0,114,178,0,0,0,41,5,114,26,0,0,0,218,7, - 112,97,99,107,97,103,101,218,5,108,101,118,101,108,218,4, - 98,105,116,115,218,4,98,97,115,101,115,5,0,0,0,32, - 32,32,32,32,114,7,0,0,0,218,13,95,114,101,115,111, - 108,118,101,95,110,97,109,101,114,114,1,0,0,207,4,0, - 0,115,79,0,0,0,128,0,224,11,18,143,62,137,62,152, - 35,152,117,160,113,153,121,211,11,41,128,68,220,7,10,136, - 52,131,121,144,53,210,7,24,220,14,25,208,26,78,211,14, - 79,208,8,79,216,11,15,144,1,137,55,128,68,217,31,35, - 136,100,136,86,144,49,144,84,144,70,208,11,27,208,4,45, - 168,20,208,4,45,114,22,0,0,0,99,3,0,0,0,0, - 0,0,0,0,0,0,0,7,0,0,0,3,0,0,0,243, - 242,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,125,3,124,3,128,11,116,5,0,0,0,0, - 0,0,0,0,100,2,171,1,0,0,0,0,0,0,130,1, - 124,3,115,26,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,100,3,116,10,0,0,0,0,0,0,0,0,171,2, - 0,0,0,0,0,0,1,0,124,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,118,0,125,4,124,3,68,0, - 93,113,0,0,125,5,116,15,0,0,0,0,0,0,0,0, - 171,0,0,0,0,0,0,0,53,0,1,0,9,0,124,5, - 106,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,125,6,2,0,124,6,124,0,124,1,124,2, - 171,3,0,0,0,0,0,0,125,7,9,0,100,1,100,1, - 100,1,171,2,0,0,0,0,0,0,1,0,127,7,128,1, - 140,49,124,4,115,60,124,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,118,0,114,42,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,124,0,25,0,0,0,125,8, - 9,0,124,8,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,4,124,7, - 99,2,1,0,83,0,124,9,99,2,1,0,83,0,124,7, - 99,2,1,0,83,0,4,0,121,1,35,0,116,18,0,0, - 0,0,0,0,0,0,36,0,114,11,1,0,89,0,100,1, - 100,1,100,1,171,2,0,0,0,0,0,0,1,0,140,136, - 119,0,120,3,89,0,119,1,35,0,49,0,115,1,119,2, - 1,0,89,0,1,0,1,0,140,103,120,3,89,0,119,1, - 35,0,116,18,0,0,0,0,0,0,0,0,36,0,114,7, - 1,0,124,7,99,2,89,0,99,2,1,0,83,0,119,0, - 120,3,89,0,119,1,41,4,122,21,70,105,110,100,32,97, - 32,109,111,100,117,108,101,39,115,32,115,112,101,99,46,78, - 122,53,115,121,115,46,109,101,116,97,95,112,97,116,104,32, - 105,115,32,78,111,110,101,44,32,80,121,116,104,111,110,32, - 105,115,32,108,105,107,101,108,121,32,115,104,117,116,116,105, - 110,103,32,100,111,119,110,122,22,115,121,115,46,109,101,116, - 97,95,112,97,116,104,32,105,115,32,101,109,112,116,121,41, - 11,114,24,0,0,0,218,9,109,101,116,97,95,112,97,116, - 104,114,178,0,0,0,114,191,0,0,0,114,192,0,0,0, - 114,27,1,0,0,114,195,0,0,0,114,101,1,0,0,114, - 43,1,0,0,114,4,0,0,0,114,204,0,0,0,41,10, - 114,26,0,0,0,114,41,1,0,0,114,42,1,0,0,114, - 116,1,0,0,218,9,105,115,95,114,101,108,111,97,100,218, - 6,102,105,110,100,101,114,114,43,1,0,0,114,199,0,0, - 0,114,200,0,0,0,114,204,0,0,0,115,10,0,0,0, - 32,32,32,32,32,32,32,32,32,32,114,7,0,0,0,218, - 10,95,102,105,110,100,95,115,112,101,99,114,119,1,0,0, - 216,4,0,0,115,8,1,0,0,128,0,228,16,19,151,13, - 145,13,128,73,216,7,16,208,7,24,228,14,25,240,0,1, - 27,42,243,0,1,15,43,240,0,1,9,43,241,6,0,12, - 21,220,8,17,143,14,137,14,208,23,47,180,29,212,8,63, - 240,10,0,17,21,156,3,159,11,153,11,208,16,35,128,73, - 219,18,27,136,6,220,13,31,213,13,33,240,2,5,13,53, - 216,28,34,215,28,44,209,28,44,144,9,241,8,0,24,33, - 160,20,160,116,168,86,211,23,52,145,4,247,13,0,14,34, - 240,14,0,12,16,209,11,27,225,19,28,160,20,172,19,175, - 27,169,27,209,33,52,220,25,28,159,27,153,27,160,84,209, - 25,42,144,6,240,2,11,17,40,216,31,37,159,127,153,127, - 144,72,240,14,0,24,32,208,23,39,216,31,35,154,11,224, - 31,39,154,15,224,23,27,146,11,240,51,0,19,28,240,54, - 0,16,20,248,244,47,0,20,34,242,0,1,13,25,216,16, - 24,247,9,6,9,53,240,0,6,9,53,240,6,1,13,25, - 250,247,7,0,14,34,208,13,33,251,244,26,0,24,38,242, - 0,4,17,32,240,8,0,28,32,148,75,240,9,4,17,32, - 250,115,66,0,0,0,193,27,1,67,26,5,193,29,12,67, - 3,4,193,41,10,67,26,5,194,39,12,67,38,2,195,3, - 9,67,23,7,195,12,1,67,26,5,195,22,1,67,23,7, - 195,23,3,67,26,5,195,26,5,67,35,9,195,38,11,67, - 54,5,195,53,1,67,54,5,99,3,0,0,0,0,0,0, - 0,0,0,0,0,6,0,0,0,3,0,0,0,243,242,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,115,23,116,5,0,0,0,0,0,0,0,0,100,1, - 116,7,0,0,0,0,0,0,0,0,124,0,171,1,0,0, - 0,0,0,0,155,0,157,2,171,1,0,0,0,0,0,0, - 130,1,124,2,100,2,107,2,0,0,114,11,116,9,0,0, - 0,0,0,0,0,0,100,3,171,1,0,0,0,0,0,0, - 130,1,124,2,100,2,107,68,0,0,114,40,116,1,0,0, - 0,0,0,0,0,0,124,1,116,2,0,0,0,0,0,0, - 0,0,171,2,0,0,0,0,0,0,115,11,116,5,0,0, - 0,0,0,0,0,0,100,4,171,1,0,0,0,0,0,0, - 130,1,124,1,115,11,116,11,0,0,0,0,0,0,0,0, - 100,5,171,1,0,0,0,0,0,0,130,1,124,0,115,17, - 124,2,100,2,107,40,0,0,114,11,116,9,0,0,0,0, - 0,0,0,0,100,6,171,1,0,0,0,0,0,0,130,1, - 121,7,121,7,41,8,122,28,86,101,114,105,102,121,32,97, - 114,103,117,109,101,110,116,115,32,97,114,101,32,34,115,97, - 110,101,34,46,122,29,109,111,100,117,108,101,32,110,97,109, - 101,32,109,117,115,116,32,98,101,32,115,116,114,44,32,110, - 111,116,32,114,125,0,0,0,122,18,108,101,118,101,108,32, - 109,117,115,116,32,98,101,32,62,61,32,48,122,31,95,95, - 112,97,99,107,97,103,101,95,95,32,110,111,116,32,115,101, - 116,32,116,111,32,97,32,115,116,114,105,110,103,122,54,97, - 116,116,101,109,112,116,101,100,32,114,101,108,97,116,105,118, - 101,32,105,109,112,111,114,116,32,119,105,116,104,32,110,111, - 32,107,110,111,119,110,32,112,97,114,101,110,116,32,112,97, - 99,107,97,103,101,122,17,69,109,112,116,121,32,109,111,100, - 117,108,101,32,110,97,109,101,78,41,6,114,23,1,0,0, - 218,3,115,116,114,218,9,84,121,112,101,69,114,114,111,114, - 114,5,0,0,0,218,10,86,97,108,117,101,69,114,114,111, - 114,114,178,0,0,0,169,3,114,26,0,0,0,114,110,1, - 0,0,114,111,1,0,0,115,3,0,0,0,32,32,32,114, - 7,0,0,0,218,13,95,115,97,110,105,116,121,95,99,104, - 101,99,107,114,125,1,0,0,5,5,0,0,115,132,0,0, - 0,128,0,228,11,21,144,100,156,67,212,11,32,220,14,23, - 208,26,55,188,4,184,84,187,10,176,124,208,24,68,211,14, - 69,208,8,69,216,7,12,136,113,130,121,220,14,24,208,25, - 45,211,14,46,208,8,46,216,7,12,136,113,130,121,220,15, - 25,152,39,164,51,212,15,39,220,18,27,208,28,61,211,18, - 62,208,12,62,217,17,24,220,18,29,240,0,1,31,40,243, - 0,1,19,41,240,0,1,13,41,225,11,15,144,69,152,81, - 146,74,220,14,24,208,25,44,211,14,45,208,8,45,240,3, - 0,21,31,136,52,114,22,0,0,0,122,16,78,111,32,109, - 111,100,117,108,101,32,110,97,109,101,100,32,122,4,123,33, - 114,125,99,2,0,0,0,0,0,0,0,0,0,0,0,6, - 0,0,0,3,0,0,0,243,86,3,0,0,151,0,100,0, - 125,2,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,100,2,25,0,0,0,125,3,100,0,125,4,124,3, - 114,131,124,3,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,118,1,114,12,116,7,0,0,0,0,0,0,0,0, - 124,1,124,3,171,2,0,0,0,0,0,0,1,0,124,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,118,0, - 114,19,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,25,0,0,0,83,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,124,3,25,0,0,0,125,5,9,0, - 124,5,106,8,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,125,2,124,5,106,16,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,4, + 23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,127,7,171,1,0,0,0,0,0,0,1,0,9, + 0,116,25,0,0,0,0,0,0,0,0,124,8,171,1,0, + 0,0,0,0,0,125,9,124,4,114,27,124,4,106,20,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,171,0,0,0,0,0,0,0,1,0,9, + 0,124,3,114,35,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,3,25,0,0,0,125,5,9,0,116,29,0, + 0,0,0,0,0,0,0,124,5,127,7,124,9,171,3,0, + 0,0,0,0,0,1,0,124,9,83,0,124,9,83,0,35, + 0,116,10,0,0,0,0,0,0,0,0,36,0,114,29,1, + 0,116,12,0,0,0,0,0,0,0,0,155,0,124,0,155, + 2,100,3,124,3,155,2,100,4,157,5,125,6,116,15,0, + 0,0,0,0,0,0,0,124,6,124,0,172,5,171,2,0, + 0,0,0,0,0,100,0,130,2,119,0,120,3,89,0,119, + 1,35,0,124,4,114,27,124,4,106,20,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,171,0,0,0,0,0,0,0,1,0,119,0,119,0,120, + 3,89,0,119,1,35,0,116,10,0,0,0,0,0,0,0, + 0,36,0,114,38,1,0,100,7,124,3,155,2,100,8,127, + 7,155,2,157,4,125,6,116,30,0,0,0,0,0,0,0, + 0,106,33,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,6,116,34,0,0,0,0,0,0,0, + 0,171,2,0,0,0,0,0,0,1,0,89,0,124,9,83, + 0,119,0,120,3,89,0,119,1,41,9,78,114,244,0,0, + 0,114,125,0,0,0,122,2,59,32,122,17,32,105,115,32, + 110,111,116,32,97,32,112,97,99,107,97,103,101,114,25,0, + 0,0,233,2,0,0,0,122,27,67,97,110,110,111,116,32, + 115,101,116,32,97,110,32,97,116,116,114,105,98,117,116,101, + 32,111,110,32,122,18,32,102,111,114,32,99,104,105,108,100, + 32,109,111,100,117,108,101,32,41,18,114,245,0,0,0,114, + 24,0,0,0,114,195,0,0,0,114,161,0,0,0,114,7, + 1,0,0,114,4,0,0,0,218,15,95,69,82,82,95,77, + 83,71,95,80,82,69,70,73,88,218,19,77,111,100,117,108, + 101,78,111,116,70,111,117,110,100,69,114,114,111,114,114,204, + 0,0,0,114,119,1,0,0,114,224,0,0,0,114,51,0, + 0,0,114,33,1,0,0,114,68,0,0,0,114,14,0,0, + 0,114,191,0,0,0,114,192,0,0,0,114,27,1,0,0, + 41,10,114,26,0,0,0,218,7,105,109,112,111,114,116,95, + 114,41,1,0,0,114,246,0,0,0,218,11,112,97,114,101, + 110,116,95,115,112,101,99,218,13,112,97,114,101,110,116,95, + 109,111,100,117,108,101,114,198,0,0,0,218,5,99,104,105, + 108,100,114,199,0,0,0,114,200,0,0,0,115,10,0,0, + 0,32,32,32,32,32,32,32,32,32,32,114,7,0,0,0, + 218,23,95,102,105,110,100,95,97,110,100,95,108,111,97,100, + 95,117,110,108,111,99,107,101,100,114,134,1,0,0,24,5, + 0,0,115,177,1,0,0,128,0,216,11,15,128,68,216,13, + 17,143,95,137,95,152,83,211,13,33,160,33,209,13,36,128, + 70,216,18,22,128,75,217,7,13,216,11,17,156,19,159,27, + 153,27,209,11,36,220,12,37,160,103,168,118,212,12,54,224, + 11,15,148,51,151,59,145,59,209,11,30,220,19,22,151,59, + 145,59,152,116,209,19,36,208,12,36,220,24,27,159,11,153, + 11,160,70,209,24,43,136,13,240,2,4,9,64,1,216,19, + 32,215,19,41,209,19,41,136,68,240,8,0,23,36,215,22, + 44,209,22,44,136,11,216,16,20,151,15,145,15,160,3,211, + 16,36,160,81,209,16,39,136,5,220,11,21,144,100,152,68, + 211,11,33,128,68,216,7,11,128,124,220,14,33,164,95,208, + 36,53,176,100,176,88,208,34,62,192,84,212,14,74,208,8, + 74,225,11,22,240,6,0,13,24,215,12,49,209,12,49,215, + 12,56,209,12,56,184,21,212,12,63,240,2,4,9,60,220, + 21,35,160,68,211,21,41,136,70,225,15,26,216,16,27,215, + 16,53,209,16,53,215,16,57,209,16,57,213,16,59,217,7, + 13,228,24,27,159,11,153,11,160,70,209,24,43,136,13,240, + 2,4,9,47,220,12,19,144,77,160,53,168,38,212,12,49, + 240,8,0,12,18,128,77,136,54,128,77,248,244,53,0,16, + 30,242,0,2,9,64,1,220,21,36,208,20,37,160,100,160, + 88,168,82,176,6,168,122,208,57,74,208,18,75,136,67,220, + 18,37,160,99,176,4,212,18,53,184,52,208,12,63,240,5, + 2,9,64,1,251,241,32,0,16,27,216,16,27,215,16,53, + 209,16,53,215,16,57,209,16,57,213,16,59,240,3,0,16, + 27,251,244,14,0,16,30,242,0,2,9,47,216,20,47,176, + 6,168,122,208,57,75,200,69,200,57,208,18,85,136,67,220, + 12,21,143,78,137,78,152,51,164,13,213,12,46,216,11,17, + 128,77,240,7,2,9,47,250,115,42,0,0,0,193,50,12, + 68,46,0,195,31,11,69,23,0,196,29,13,69,57,0,196, + 46,38,69,20,3,197,23,31,69,54,3,197,57,43,70,40, + 3,198,39,1,70,40,3,99,2,0,0,0,0,0,0,0, + 0,0,0,0,7,0,0,0,3,0,0,0,243,146,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,106,5,0,0,0,0,0,0,0,0,0,0,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,125,2,124,2,116,6,0, + 0,0,0,0,0,0,0,117,0,115,24,116,9,0,0,0, + 0,0,0,0,0,116,9,0,0,0,0,0,0,0,0,124, + 2,100,1,100,2,171,3,0,0,0,0,0,0,100,3,100, + 4,171,3,0,0,0,0,0,0,114,97,116,11,0,0,0, + 0,0,0,0,0,124,0,171,1,0,0,0,0,0,0,53, + 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,106,5,0,0,0,0,0,0,0,0,0,0,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,125,2,124,2,116,6,0, + 0,0,0,0,0,0,0,117,0,114,21,116,13,0,0,0, + 0,0,0,0,0,124,0,124,1,171,2,0,0,0,0,0, + 0,99,2,100,2,100,2,100,2,171,2,0,0,0,0,0, + 0,1,0,83,0,9,0,100,2,100,2,100,2,171,2,0, + 0,0,0,0,0,1,0,116,15,0,0,0,0,0,0,0, + 0,124,0,171,1,0,0,0,0,0,0,1,0,124,2,128, + 19,100,5,124,0,155,0,100,6,157,3,125,3,116,17,0, + 0,0,0,0,0,0,0,124,3,124,0,172,7,171,2,0, + 0,0,0,0,0,130,1,124,2,83,0,35,0,49,0,115, + 1,119,2,1,0,89,0,1,0,1,0,140,43,120,3,89, + 0,119,1,41,8,122,25,70,105,110,100,32,97,110,100,32, + 108,111,97,100,32,116,104,101,32,109,111,100,117,108,101,46, + 114,204,0,0,0,78,114,32,1,0,0,70,122,10,105,109, + 112,111,114,116,32,111,102,32,122,28,32,104,97,108,116,101, + 100,59,32,78,111,110,101,32,105,110,32,115,121,115,46,109, + 111,100,117,108,101,115,114,25,0,0,0,41,9,114,24,0, + 0,0,114,195,0,0,0,114,76,0,0,0,218,14,95,78, + 69,69,68,83,95,76,79,65,68,73,78,71,114,15,0,0, + 0,114,142,0,0,0,114,134,1,0,0,114,157,0,0,0, + 114,129,1,0,0,41,4,114,26,0,0,0,114,130,1,0, + 0,114,200,0,0,0,114,172,0,0,0,115,4,0,0,0, + 32,32,32,32,114,7,0,0,0,218,14,95,102,105,110,100, + 95,97,110,100,95,108,111,97,100,114,137,1,0,0,69,5, + 0,0,115,172,0,0,0,128,0,244,10,0,14,17,143,91, + 137,91,143,95,137,95,152,84,164,62,211,13,50,128,70,216, + 8,14,148,46,209,8,32,220,8,15,148,7,152,6,160,10, + 168,68,211,16,49,176,63,192,69,212,8,74,220,13,31,160, + 4,213,13,37,220,21,24,151,91,145,91,151,95,145,95,160, + 84,172,62,211,21,58,136,70,216,15,21,156,30,209,15,39, + 220,23,46,168,116,176,87,211,23,61,247,7,0,14,38,209, + 13,37,224,15,39,247,5,0,14,38,244,18,0,9,28,152, + 68,212,8,33,224,7,13,128,126,216,20,30,152,116,152,102, + 208,36,64,208,18,65,136,7,220,14,33,160,39,176,4,212, + 14,53,208,8,53,224,11,17,128,77,247,31,0,14,38,208, + 13,37,250,115,12,0,0,0,193,16,56,66,61,3,194,61, + 5,67,6,7,99,3,0,0,0,0,0,0,0,0,0,0, + 0,5,0,0,0,3,0,0,0,243,96,0,0,0,151,0, + 116,1,0,0,0,0,0,0,0,0,124,0,124,1,124,2, + 171,3,0,0,0,0,0,0,1,0,124,2,100,1,107,68, + 0,0,114,13,116,3,0,0,0,0,0,0,0,0,124,0, + 124,1,124,2,171,3,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,83,0,41,2, + 97,50,1,0,0,73,109,112,111,114,116,32,97,110,100,32, + 114,101,116,117,114,110,32,116,104,101,32,109,111,100,117,108, + 101,32,98,97,115,101,100,32,111,110,32,105,116,115,32,110, + 97,109,101,44,32,116,104,101,32,112,97,99,107,97,103,101, + 32,116,104,101,32,99,97,108,108,32,105,115,10,32,32,32, + 32,98,101,105,110,103,32,109,97,100,101,32,102,114,111,109, + 44,32,97,110,100,32,116,104,101,32,108,101,118,101,108,32, + 97,100,106,117,115,116,109,101,110,116,46,10,10,32,32,32, + 32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,114, + 101,112,114,101,115,101,110,116,115,32,116,104,101,32,103,114, + 101,97,116,101,115,116,32,99,111,109,109,111,110,32,100,101, + 110,111,109,105,110,97,116,111,114,32,111,102,32,102,117,110, + 99,116,105,111,110,97,108,105,116,121,10,32,32,32,32,98, + 101,116,119,101,101,110,32,105,109,112,111,114,116,95,109,111, + 100,117,108,101,32,97,110,100,32,95,95,105,109,112,111,114, + 116,95,95,46,32,84,104,105,115,32,105,110,99,108,117,100, + 101,115,32,115,101,116,116,105,110,103,32,95,95,112,97,99, + 107,97,103,101,95,95,32,105,102,10,32,32,32,32,116,104, + 101,32,108,111,97,100,101,114,32,100,105,100,32,110,111,116, + 46,10,10,32,32,32,32,114,125,0,0,0,41,4,114,125, + 1,0,0,114,114,1,0,0,114,137,1,0,0,218,11,95, + 103,99,100,95,105,109,112,111,114,116,114,124,1,0,0,115, + 3,0,0,0,32,32,32,114,7,0,0,0,114,139,1,0, + 0,114,139,1,0,0,95,5,0,0,115,50,0,0,0,128, + 0,244,18,0,5,18,144,36,152,7,160,21,212,4,39,216, + 7,12,136,113,130,121,220,15,28,152,84,160,55,168,69,211, + 15,50,136,4,220,11,25,152,36,164,11,211,11,44,208,4, + 44,114,22,0,0,0,169,1,218,9,114,101,99,117,114,115, + 105,118,101,99,3,0,0,0,0,0,0,0,1,0,0,0, + 9,0,0,0,3,0,0,0,243,236,1,0,0,151,0,124, + 1,68,0,93,164,0,0,125,4,116,1,0,0,0,0,0, + 0,0,0,124,4,116,2,0,0,0,0,0,0,0,0,171, + 2,0,0,0,0,0,0,115,56,124,3,114,16,124,0,106, + 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,100,1,122,0,0,0,125,5,110,2,100,2,125, + 5,116,7,0,0,0,0,0,0,0,0,100,3,124,5,155, + 0,100,4,116,9,0,0,0,0,0,0,0,0,124,4,171, + 1,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,155,0,157,4,171, + 1,0,0,0,0,0,0,130,1,124,4,100,5,107,40,0, + 0,114,42,124,3,114,1,140,83,116,11,0,0,0,0,0, + 0,0,0,124,0,100,6,171,2,0,0,0,0,0,0,115, + 1,140,96,116,13,0,0,0,0,0,0,0,0,124,0,124, + 0,106,14,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,2,100,7,172,8,171,4,0,0,0, + 0,0,0,1,0,140,122,116,11,0,0,0,0,0,0,0, + 0,124,0,124,4,171,2,0,0,0,0,0,0,114,1,140, + 135,124,0,106,4,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,155,0,100,9,124,4,155,0,157, + 3,125,6,9,0,116,17,0,0,0,0,0,0,0,0,124, + 2,124,6,171,2,0,0,0,0,0,0,1,0,140,166,4, + 0,124,0,83,0,35,0,116,18,0,0,0,0,0,0,0, + 0,36,0,114,62,125,7,124,7,106,20,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,6,107, + 40,0,0,114,41,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,116,28,0,0,0,0,0, + 0,0,0,171,2,0,0,0,0,0,0,129,5,89,0,100, + 10,125,7,126,7,140,234,130,0,100,10,125,7,126,7,119, + 1,119,0,120,3,89,0,119,1,41,11,122,238,70,105,103, + 117,114,101,32,111,117,116,32,119,104,97,116,32,95,95,105, + 109,112,111,114,116,95,95,32,115,104,111,117,108,100,32,114, + 101,116,117,114,110,46,10,10,32,32,32,32,84,104,101,32, + 105,109,112,111,114,116,95,32,112,97,114,97,109,101,116,101, + 114,32,105,115,32,97,32,99,97,108,108,97,98,108,101,32, + 119,104,105,99,104,32,116,97,107,101,115,32,116,104,101,32, + 110,97,109,101,32,111,102,32,109,111,100,117,108,101,32,116, + 111,10,32,32,32,32,105,109,112,111,114,116,46,32,73,116, + 32,105,115,32,114,101,113,117,105,114,101,100,32,116,111,32, + 100,101,99,111,117,112,108,101,32,116,104,101,32,102,117,110, + 99,116,105,111,110,32,102,114,111,109,32,97,115,115,117,109, + 105,110,103,32,105,109,112,111,114,116,108,105,98,39,115,10, + 32,32,32,32,105,109,112,111,114,116,32,105,109,112,108,101, + 109,101,110,116,97,116,105,111,110,32,105,115,32,100,101,115, + 105,114,101,100,46,10,10,32,32,32,32,122,8,46,95,95, + 97,108,108,95,95,122,13,96,96,102,114,111,109,32,108,105, + 115,116,39,39,122,8,73,116,101,109,32,105,110,32,122,18, + 32,109,117,115,116,32,98,101,32,115,116,114,44,32,110,111, + 116,32,218,1,42,218,7,95,95,97,108,108,95,95,84,114, + 140,1,0,0,114,244,0,0,0,78,41,15,114,23,1,0, + 0,114,121,1,0,0,114,11,0,0,0,114,122,1,0,0, + 114,5,0,0,0,114,13,0,0,0,218,16,95,104,97,110, + 100,108,101,95,102,114,111,109,108,105,115,116,114,144,1,0, + 0,114,161,0,0,0,114,129,1,0,0,114,26,0,0,0, + 114,24,0,0,0,114,195,0,0,0,114,76,0,0,0,114, + 136,1,0,0,41,8,114,200,0,0,0,218,8,102,114,111, + 109,108,105,115,116,114,130,1,0,0,114,141,1,0,0,218, + 1,120,218,5,119,104,101,114,101,218,9,102,114,111,109,95, + 110,97,109,101,218,3,101,120,99,115,8,0,0,0,32,32, + 32,32,32,32,32,32,114,7,0,0,0,114,145,1,0,0, + 114,145,1,0,0,110,5,0,0,115,243,0,0,0,128,0, + 243,20,0,14,22,136,1,220,15,25,152,33,156,83,212,15, + 33,217,15,24,216,24,30,159,15,153,15,168,42,209,24,52, + 145,5,224,24,39,144,5,220,18,27,152,104,160,117,160,103, + 240,0,1,46,35,220,35,39,168,1,163,55,215,35,51,209, + 35,51,208,34,52,240,3,1,29,54,243,0,1,19,55,240, + 0,1,13,55,224,13,14,144,35,138,88,218,19,28,164,23, + 168,22,176,25,213,33,59,220,16,32,160,22,168,22,175,30, + 169,30,184,23,216,43,47,246,3,1,17,49,228,17,24,152, + 22,160,17,213,17,35,216,27,33,159,63,153,63,208,26,43, + 168,49,168,81,168,67,208,24,48,136,73,240,2,9,13,22, + 220,16,41,168,39,176,57,213,16,61,240,31,0,14,22,240, + 48,0,12,18,128,77,248,244,17,0,20,39,242,0,7,13, + 22,240,8,0,21,24,151,72,145,72,160,9,210,20,41,220, + 20,23,151,75,145,75,151,79,145,79,160,73,172,126,211,20, + 62,208,20,74,220,20,28,216,16,21,251,240,15,7,13,22, + 250,115,30,0,0,0,194,28,12,66,44,2,194,44,9,67, + 51,5,194,53,51,67,46,5,195,45,1,67,46,5,195,46, + 5,67,51,5,99,1,0,0,0,0,0,0,0,0,0,0, + 0,7,0,0,0,3,0,0,0,243,92,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, - 100,6,25,0,0,0,125,7,116,19,0,0,0,0,0,0, - 0,0,124,0,124,2,171,2,0,0,0,0,0,0,125,8, - 124,8,128,21,116,15,0,0,0,0,0,0,0,0,116,12, - 0,0,0,0,0,0,0,0,155,0,124,0,155,2,157,2, - 124,0,172,5,171,2,0,0,0,0,0,0,130,1,124,4, - 114,27,124,4,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,127,7,171,1, - 0,0,0,0,0,0,1,0,9,0,116,25,0,0,0,0, - 0,0,0,0,124,8,171,1,0,0,0,0,0,0,125,9, - 124,4,114,27,124,4,106,20,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,171,0, - 0,0,0,0,0,0,1,0,9,0,124,3,114,35,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,3,25,0, - 0,0,125,5,9,0,116,29,0,0,0,0,0,0,0,0, - 124,5,127,7,124,9,171,3,0,0,0,0,0,0,1,0, - 124,9,83,0,124,9,83,0,35,0,116,10,0,0,0,0, - 0,0,0,0,36,0,114,29,1,0,116,12,0,0,0,0, - 0,0,0,0,155,0,124,0,155,2,100,3,124,3,155,2, - 100,4,157,5,125,6,116,15,0,0,0,0,0,0,0,0, - 124,6,124,0,172,5,171,2,0,0,0,0,0,0,100,0, - 130,2,119,0,120,3,89,0,119,1,35,0,124,4,114,27, - 124,4,106,20,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,171,0,0,0,0,0, - 0,0,1,0,119,0,119,0,120,3,89,0,119,1,35,0, - 116,10,0,0,0,0,0,0,0,0,36,0,114,38,1,0, - 100,7,124,3,155,2,100,8,127,7,155,2,157,4,125,6, - 116,30,0,0,0,0,0,0,0,0,106,33,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,6, - 116,34,0,0,0,0,0,0,0,0,171,2,0,0,0,0, - 0,0,1,0,89,0,124,9,83,0,119,0,120,3,89,0, - 119,1,41,9,78,114,244,0,0,0,114,125,0,0,0,122, - 2,59,32,122,17,32,105,115,32,110,111,116,32,97,32,112, - 97,99,107,97,103,101,114,25,0,0,0,233,2,0,0,0, - 122,27,67,97,110,110,111,116,32,115,101,116,32,97,110,32, - 97,116,116,114,105,98,117,116,101,32,111,110,32,122,18,32, - 102,111,114,32,99,104,105,108,100,32,109,111,100,117,108,101, - 32,41,18,114,245,0,0,0,114,24,0,0,0,114,195,0, - 0,0,114,161,0,0,0,114,7,1,0,0,114,4,0,0, - 0,218,15,95,69,82,82,95,77,83,71,95,80,82,69,70, - 73,88,218,19,77,111,100,117,108,101,78,111,116,70,111,117, - 110,100,69,114,114,111,114,114,204,0,0,0,114,119,1,0, - 0,114,224,0,0,0,114,51,0,0,0,114,33,1,0,0, - 114,68,0,0,0,114,14,0,0,0,114,191,0,0,0,114, - 192,0,0,0,114,27,1,0,0,41,10,114,26,0,0,0, - 218,7,105,109,112,111,114,116,95,114,41,1,0,0,114,246, - 0,0,0,218,11,112,97,114,101,110,116,95,115,112,101,99, - 218,13,112,97,114,101,110,116,95,109,111,100,117,108,101,114, - 198,0,0,0,218,5,99,104,105,108,100,114,199,0,0,0, - 114,200,0,0,0,115,10,0,0,0,32,32,32,32,32,32, - 32,32,32,32,114,7,0,0,0,218,23,95,102,105,110,100, - 95,97,110,100,95,108,111,97,100,95,117,110,108,111,99,107, - 101,100,114,134,1,0,0,24,5,0,0,115,177,1,0,0, - 128,0,216,11,15,128,68,216,13,17,143,95,137,95,152,83, - 211,13,33,160,33,209,13,36,128,70,216,18,22,128,75,217, - 7,13,216,11,17,156,19,159,27,153,27,209,11,36,220,12, - 37,160,103,168,118,212,12,54,224,11,15,148,51,151,59,145, - 59,209,11,30,220,19,22,151,59,145,59,152,116,209,19,36, - 208,12,36,220,24,27,159,11,153,11,160,70,209,24,43,136, - 13,240,2,4,9,64,1,216,19,32,215,19,41,209,19,41, - 136,68,240,8,0,23,36,215,22,44,209,22,44,136,11,216, - 16,20,151,15,145,15,160,3,211,16,36,160,81,209,16,39, - 136,5,220,11,21,144,100,152,68,211,11,33,128,68,216,7, - 11,128,124,220,14,33,164,95,208,36,53,176,100,176,88,208, - 34,62,192,84,212,14,74,208,8,74,225,11,22,240,6,0, - 13,24,215,12,49,209,12,49,215,12,56,209,12,56,184,21, - 212,12,63,240,2,4,9,60,220,21,35,160,68,211,21,41, - 136,70,225,15,26,216,16,27,215,16,53,209,16,53,215,16, - 57,209,16,57,213,16,59,217,7,13,228,24,27,159,11,153, - 11,160,70,209,24,43,136,13,240,2,4,9,47,220,12,19, - 144,77,160,53,168,38,212,12,49,240,8,0,12,18,128,77, - 136,54,128,77,248,244,53,0,16,30,242,0,2,9,64,1, - 220,21,36,208,20,37,160,100,160,88,168,82,176,6,168,122, - 208,57,74,208,18,75,136,67,220,18,37,160,99,176,4,212, - 18,53,184,52,208,12,63,240,5,2,9,64,1,251,241,32, - 0,16,27,216,16,27,215,16,53,209,16,53,215,16,57,209, - 16,57,213,16,59,240,3,0,16,27,251,244,14,0,16,30, - 242,0,2,9,47,216,20,47,176,6,168,122,208,57,75,200, - 69,200,57,208,18,85,136,67,220,12,21,143,78,137,78,152, - 51,164,13,213,12,46,216,11,17,128,77,240,7,2,9,47, - 250,115,42,0,0,0,193,50,12,68,46,0,195,31,11,69, - 23,0,196,29,13,69,57,0,196,46,38,69,20,3,197,23, - 31,69,54,3,197,57,43,70,40,3,198,39,1,70,40,3, - 99,2,0,0,0,0,0,0,0,0,0,0,0,7,0,0, - 0,3,0,0,0,243,146,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,106,5,0,0,0,0, - 0,0,0,0,0,0,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,125,2,124,2,116,6,0,0,0,0,0,0,0,0, - 117,0,115,24,116,9,0,0,0,0,0,0,0,0,116,9, - 0,0,0,0,0,0,0,0,124,2,100,1,100,2,171,3, - 0,0,0,0,0,0,100,3,100,4,171,3,0,0,0,0, - 0,0,114,97,116,11,0,0,0,0,0,0,0,0,124,0, - 171,1,0,0,0,0,0,0,53,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,106,5,0,0,0,0, - 0,0,0,0,0,0,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,125,2,124,2,116,6,0,0,0,0,0,0,0,0, - 117,0,114,21,116,13,0,0,0,0,0,0,0,0,124,0, - 124,1,171,2,0,0,0,0,0,0,99,2,100,2,100,2, - 100,2,171,2,0,0,0,0,0,0,1,0,83,0,9,0, - 100,2,100,2,100,2,171,2,0,0,0,0,0,0,1,0, - 116,15,0,0,0,0,0,0,0,0,124,0,171,1,0,0, - 0,0,0,0,1,0,124,2,128,19,100,5,124,0,155,0, - 100,6,157,3,125,3,116,17,0,0,0,0,0,0,0,0, - 124,3,124,0,172,7,171,2,0,0,0,0,0,0,130,1, - 124,2,83,0,35,0,49,0,115,1,119,2,1,0,89,0, - 1,0,1,0,140,43,120,3,89,0,119,1,41,8,122,25, - 70,105,110,100,32,97,110,100,32,108,111,97,100,32,116,104, - 101,32,109,111,100,117,108,101,46,114,204,0,0,0,78,114, - 32,1,0,0,70,122,10,105,109,112,111,114,116,32,111,102, - 32,122,28,32,104,97,108,116,101,100,59,32,78,111,110,101, - 32,105,110,32,115,121,115,46,109,111,100,117,108,101,115,114, - 25,0,0,0,41,9,114,24,0,0,0,114,195,0,0,0, - 114,76,0,0,0,218,14,95,78,69,69,68,83,95,76,79, - 65,68,73,78,71,114,15,0,0,0,114,142,0,0,0,114, - 134,1,0,0,114,157,0,0,0,114,129,1,0,0,41,4, - 114,26,0,0,0,114,130,1,0,0,114,200,0,0,0,114, - 172,0,0,0,115,4,0,0,0,32,32,32,32,114,7,0, - 0,0,218,14,95,102,105,110,100,95,97,110,100,95,108,111, - 97,100,114,137,1,0,0,69,5,0,0,115,174,0,0,0, - 128,0,244,10,0,14,17,143,91,137,91,143,95,137,95,152, - 84,164,62,211,13,50,128,70,216,8,14,148,46,209,8,32, - 220,8,15,148,7,152,6,160,10,168,68,211,16,49,176,63, - 192,69,212,8,74,220,13,31,160,4,213,13,37,220,21,24, - 151,91,145,91,151,95,145,95,160,84,172,62,211,21,58,136, - 70,216,15,21,156,30,209,15,39,220,23,46,168,116,176,87, - 211,23,61,247,7,3,9,62,241,0,3,9,62,224,15,39, - 247,5,0,14,38,244,18,0,9,28,152,68,212,8,33,224, - 7,13,128,126,216,20,30,152,116,152,102,208,36,64,208,18, - 65,136,7,220,14,33,160,39,176,4,212,14,53,208,8,53, - 224,11,17,128,77,247,31,0,14,38,208,13,37,250,115,12, - 0,0,0,193,16,56,66,61,3,194,61,5,67,6,7,99, - 3,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, - 3,0,0,0,243,96,0,0,0,151,0,116,1,0,0,0, - 0,0,0,0,0,124,0,124,1,124,2,171,3,0,0,0, - 0,0,0,1,0,124,2,100,1,107,68,0,0,114,13,116, - 3,0,0,0,0,0,0,0,0,124,0,124,1,124,2,171, - 3,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,83,0,41,2,97,50,1,0,0, - 73,109,112,111,114,116,32,97,110,100,32,114,101,116,117,114, - 110,32,116,104,101,32,109,111,100,117,108,101,32,98,97,115, - 101,100,32,111,110,32,105,116,115,32,110,97,109,101,44,32, - 116,104,101,32,112,97,99,107,97,103,101,32,116,104,101,32, - 99,97,108,108,32,105,115,10,32,32,32,32,98,101,105,110, - 103,32,109,97,100,101,32,102,114,111,109,44,32,97,110,100, - 32,116,104,101,32,108,101,118,101,108,32,97,100,106,117,115, - 116,109,101,110,116,46,10,10,32,32,32,32,84,104,105,115, - 32,102,117,110,99,116,105,111,110,32,114,101,112,114,101,115, - 101,110,116,115,32,116,104,101,32,103,114,101,97,116,101,115, - 116,32,99,111,109,109,111,110,32,100,101,110,111,109,105,110, - 97,116,111,114,32,111,102,32,102,117,110,99,116,105,111,110, - 97,108,105,116,121,10,32,32,32,32,98,101,116,119,101,101, - 110,32,105,109,112,111,114,116,95,109,111,100,117,108,101,32, - 97,110,100,32,95,95,105,109,112,111,114,116,95,95,46,32, - 84,104,105,115,32,105,110,99,108,117,100,101,115,32,115,101, - 116,116,105,110,103,32,95,95,112,97,99,107,97,103,101,95, - 95,32,105,102,10,32,32,32,32,116,104,101,32,108,111,97, - 100,101,114,32,100,105,100,32,110,111,116,46,10,10,32,32, - 32,32,114,125,0,0,0,41,4,114,125,1,0,0,114,114, - 1,0,0,114,137,1,0,0,218,11,95,103,99,100,95,105, - 109,112,111,114,116,114,124,1,0,0,115,3,0,0,0,32, - 32,32,114,7,0,0,0,114,139,1,0,0,114,139,1,0, - 0,95,5,0,0,115,50,0,0,0,128,0,244,18,0,5, - 18,144,36,152,7,160,21,212,4,39,216,7,12,136,113,130, - 121,220,15,28,152,84,160,55,168,69,211,15,50,136,4,220, - 11,25,152,36,164,11,211,11,44,208,4,44,114,22,0,0, - 0,169,1,218,9,114,101,99,117,114,115,105,118,101,99,3, - 0,0,0,0,0,0,0,1,0,0,0,9,0,0,0,3, - 0,0,0,243,236,1,0,0,151,0,124,1,68,0,93,164, - 0,0,125,4,116,1,0,0,0,0,0,0,0,0,124,4, - 116,2,0,0,0,0,0,0,0,0,171,2,0,0,0,0, - 0,0,115,56,124,3,114,16,124,0,106,4,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,1, - 122,0,0,0,125,5,110,2,100,2,125,5,116,7,0,0, - 0,0,0,0,0,0,100,3,124,5,155,0,100,4,116,9, - 0,0,0,0,0,0,0,0,124,4,171,1,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,155,0,157,4,171,1,0,0,0,0, - 0,0,130,1,124,4,100,5,107,40,0,0,114,42,124,3, - 114,1,140,83,116,11,0,0,0,0,0,0,0,0,124,0, - 100,6,171,2,0,0,0,0,0,0,115,1,140,96,116,13, - 0,0,0,0,0,0,0,0,124,0,124,0,106,14,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,2,100,7,172,8,171,4,0,0,0,0,0,0,1,0, - 140,122,116,11,0,0,0,0,0,0,0,0,124,0,124,4, - 171,2,0,0,0,0,0,0,114,1,140,135,124,0,106,4, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,155,0,100,9,124,4,155,0,157,3,125,6,9,0, - 116,17,0,0,0,0,0,0,0,0,124,2,124,6,171,2, - 0,0,0,0,0,0,1,0,140,166,4,0,124,0,83,0, - 35,0,116,18,0,0,0,0,0,0,0,0,36,0,114,62, - 125,7,124,7,106,20,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,6,107,40,0,0,114,41, - 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,116,28,0,0,0,0,0,0,0,0,171,2, - 0,0,0,0,0,0,129,5,89,0,100,10,125,7,126,7, - 140,234,130,0,100,10,125,7,126,7,119,1,119,0,120,3, - 89,0,119,1,41,11,122,238,70,105,103,117,114,101,32,111, - 117,116,32,119,104,97,116,32,95,95,105,109,112,111,114,116, - 95,95,32,115,104,111,117,108,100,32,114,101,116,117,114,110, - 46,10,10,32,32,32,32,84,104,101,32,105,109,112,111,114, - 116,95,32,112,97,114,97,109,101,116,101,114,32,105,115,32, - 97,32,99,97,108,108,97,98,108,101,32,119,104,105,99,104, - 32,116,97,107,101,115,32,116,104,101,32,110,97,109,101,32, - 111,102,32,109,111,100,117,108,101,32,116,111,10,32,32,32, - 32,105,109,112,111,114,116,46,32,73,116,32,105,115,32,114, - 101,113,117,105,114,101,100,32,116,111,32,100,101,99,111,117, - 112,108,101,32,116,104,101,32,102,117,110,99,116,105,111,110, - 32,102,114,111,109,32,97,115,115,117,109,105,110,103,32,105, - 109,112,111,114,116,108,105,98,39,115,10,32,32,32,32,105, - 109,112,111,114,116,32,105,109,112,108,101,109,101,110,116,97, - 116,105,111,110,32,105,115,32,100,101,115,105,114,101,100,46, - 10,10,32,32,32,32,122,8,46,95,95,97,108,108,95,95, - 122,13,96,96,102,114,111,109,32,108,105,115,116,39,39,122, - 8,73,116,101,109,32,105,110,32,122,18,32,109,117,115,116, - 32,98,101,32,115,116,114,44,32,110,111,116,32,250,1,42, - 218,7,95,95,97,108,108,95,95,84,114,140,1,0,0,114, - 244,0,0,0,78,41,15,114,23,1,0,0,114,121,1,0, - 0,114,11,0,0,0,114,122,1,0,0,114,5,0,0,0, - 114,13,0,0,0,218,16,95,104,97,110,100,108,101,95,102, - 114,111,109,108,105,115,116,114,144,1,0,0,114,161,0,0, - 0,114,129,1,0,0,114,26,0,0,0,114,24,0,0,0, - 114,195,0,0,0,114,76,0,0,0,114,136,1,0,0,41, - 8,114,200,0,0,0,218,8,102,114,111,109,108,105,115,116, - 114,130,1,0,0,114,141,1,0,0,218,1,120,218,5,119, - 104,101,114,101,218,9,102,114,111,109,95,110,97,109,101,218, - 3,101,120,99,115,8,0,0,0,32,32,32,32,32,32,32, - 32,114,7,0,0,0,114,145,1,0,0,114,145,1,0,0, - 110,5,0,0,115,243,0,0,0,128,0,243,20,0,14,22, - 136,1,220,15,25,152,33,156,83,212,15,33,217,15,24,216, - 24,30,159,15,153,15,168,42,209,24,52,145,5,224,24,39, - 144,5,220,18,27,152,104,160,117,160,103,240,0,1,46,35, - 220,35,39,168,1,163,55,215,35,51,209,35,51,208,34,52, - 240,3,1,29,54,243,0,1,19,55,240,0,1,13,55,224, - 13,14,144,35,138,88,218,19,28,164,23,168,22,176,25,213, - 33,59,220,16,32,160,22,168,22,175,30,169,30,184,23,216, - 43,47,246,3,1,17,49,228,17,24,152,22,160,17,213,17, - 35,216,27,33,159,63,153,63,208,26,43,168,49,168,81,168, - 67,208,24,48,136,73,240,2,9,13,22,220,16,41,168,39, - 176,57,213,16,61,240,31,0,14,22,240,48,0,12,18,128, - 77,248,244,17,0,20,39,242,0,7,13,22,240,8,0,21, - 24,151,72,145,72,160,9,210,20,41,220,20,23,151,75,145, - 75,151,79,145,79,160,73,172,126,211,20,62,208,20,74,220, - 20,28,216,16,21,251,240,15,7,13,22,250,115,30,0,0, - 0,194,28,12,66,44,2,194,44,9,67,51,5,194,53,51, - 67,46,5,195,45,1,67,46,5,195,46,5,67,51,5,99, - 1,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0, - 3,0,0,0,243,92,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,1,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,2,124, - 1,129,64,124,2,129,60,124,1,124,2,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,45,116,4,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,100,3,124,1,155,2,100,4,124,2,106,2,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,155,2,100,5,157,5,116,8,0,0,0,0,0,0,0, - 0,100,6,172,7,171,3,0,0,0,0,0,0,1,0,124, - 1,83,0,124,2,129,12,124,2,106,2,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,83,0,116, - 4,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,100,8,116, - 10,0,0,0,0,0,0,0,0,100,6,172,7,171,3,0, - 0,0,0,0,0,1,0,124,0,100,9,25,0,0,0,125, - 1,100,10,124,0,118,1,114,20,124,1,106,13,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, - 11,171,1,0,0,0,0,0,0,100,12,25,0,0,0,125, - 1,124,1,83,0,41,13,122,167,67,97,108,99,117,108,97, - 116,101,32,119,104,97,116,32,95,95,112,97,99,107,97,103, - 101,95,95,32,115,104,111,117,108,100,32,98,101,46,10,10, - 32,32,32,32,95,95,112,97,99,107,97,103,101,95,95,32, - 105,115,32,110,111,116,32,103,117,97,114,97,110,116,101,101, - 100,32,116,111,32,98,101,32,100,101,102,105,110,101,100,32, - 111,114,32,99,111,117,108,100,32,98,101,32,115,101,116,32, - 116,111,32,78,111,110,101,10,32,32,32,32,116,111,32,114, - 101,112,114,101,115,101,110,116,32,116,104,97,116,32,105,116, - 115,32,112,114,111,112,101,114,32,118,97,108,117,101,32,105, - 115,32,117,110,107,110,111,119,110,46,10,10,32,32,32,32, - 114,13,1,0,0,114,204,0,0,0,122,32,95,95,112,97, - 99,107,97,103,101,95,95,32,33,61,32,95,95,115,112,101, - 99,95,95,46,112,97,114,101,110,116,32,40,122,4,32,33, - 61,32,114,229,0,0,0,233,3,0,0,0,41,1,218,10, - 115,116,97,99,107,108,101,118,101,108,122,89,99,97,110,39, - 116,32,114,101,115,111,108,118,101,32,112,97,99,107,97,103, - 101,32,102,114,111,109,32,95,95,115,112,101,99,95,95,32, - 111,114,32,95,95,112,97,99,107,97,103,101,95,95,44,32, - 102,97,108,108,105,110,103,32,98,97,99,107,32,111,110,32, - 95,95,110,97,109,101,95,95,32,97,110,100,32,95,95,112, - 97,116,104,95,95,114,11,0,0,0,114,7,1,0,0,114, - 244,0,0,0,114,125,0,0,0,41,7,114,76,0,0,0, - 114,246,0,0,0,114,191,0,0,0,114,192,0,0,0,114, - 193,0,0,0,114,27,1,0,0,114,245,0,0,0,41,3, - 218,7,103,108,111,98,97,108,115,114,110,1,0,0,114,199, - 0,0,0,115,3,0,0,0,32,32,32,114,7,0,0,0, - 218,17,95,99,97,108,99,95,95,95,112,97,99,107,97,103, - 101,95,95,114,155,1,0,0,147,5,0,0,115,200,0,0, - 0,128,0,240,14,0,15,22,143,107,137,107,152,45,211,14, - 40,128,71,216,11,18,143,59,137,59,144,122,211,11,34,128, - 68,216,7,14,208,7,26,216,11,15,208,11,27,160,7,168, - 52,175,59,169,59,210,32,54,220,12,21,143,78,137,78,240, - 0,1,28,31,216,31,38,152,107,168,20,168,100,175,107,169, - 107,168,95,184,65,240,3,1,28,63,228,27,45,184,33,240, - 5,0,13,27,244,0,2,13,61,240,6,0,16,23,136,14, - 216,9,13,208,9,25,216,15,19,143,123,137,123,208,8,26, - 228,8,17,143,14,137,14,240,0,1,24,63,228,23,36,176, - 17,240,5,0,9,23,244,0,2,9,52,240,6,0,19,26, - 152,42,209,18,37,136,7,216,11,21,152,87,209,11,36,216, - 22,29,215,22,40,209,22,40,168,19,211,22,45,168,97,209, - 22,48,136,71,216,11,18,128,78,114,22,0,0,0,99,5, - 0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,3, - 0,0,0,243,172,1,0,0,151,0,124,4,100,1,107,40, - 0,0,114,12,116,1,0,0,0,0,0,0,0,0,124,0, - 171,1,0,0,0,0,0,0,125,5,110,30,124,1,129,2, - 124,1,110,1,105,0,125,6,116,3,0,0,0,0,0,0, - 0,0,124,6,171,1,0,0,0,0,0,0,125,7,116,1, - 0,0,0,0,0,0,0,0,124,0,124,7,124,4,171,3, - 0,0,0,0,0,0,125,5,124,3,115,133,124,4,100,1, - 107,40,0,0,114,29,116,1,0,0,0,0,0,0,0,0, - 124,0,106,5,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, - 100,1,25,0,0,0,171,1,0,0,0,0,0,0,83,0, - 124,0,115,2,124,5,83,0,116,7,0,0,0,0,0,0, - 0,0,124,0,171,1,0,0,0,0,0,0,116,7,0,0, - 0,0,0,0,0,0,124,0,106,5,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,100,1,25,0,0,0,171,1,0,0, - 0,0,0,0,122,10,0,0,125,8,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,124,5,106,12,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,2, - 116,7,0,0,0,0,0,0,0,0,124,5,106,12,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,124,8,122,10,0,0,26,0, - 25,0,0,0,83,0,116,15,0,0,0,0,0,0,0,0, - 124,5,100,4,171,2,0,0,0,0,0,0,114,17,116,17, - 0,0,0,0,0,0,0,0,124,5,124,3,116,0,0,0, - 0,0,0,0,0,0,171,3,0,0,0,0,0,0,83,0, - 124,5,83,0,41,5,97,215,1,0,0,73,109,112,111,114, - 116,32,97,32,109,111,100,117,108,101,46,10,10,32,32,32, - 32,84,104,101,32,39,103,108,111,98,97,108,115,39,32,97, - 114,103,117,109,101,110,116,32,105,115,32,117,115,101,100,32, - 116,111,32,105,110,102,101,114,32,119,104,101,114,101,32,116, - 104,101,32,105,109,112,111,114,116,32,105,115,32,111,99,99, - 117,114,114,105,110,103,32,102,114,111,109,10,32,32,32,32, - 116,111,32,104,97,110,100,108,101,32,114,101,108,97,116,105, - 118,101,32,105,109,112,111,114,116,115,46,32,84,104,101,32, - 39,108,111,99,97,108,115,39,32,97,114,103,117,109,101,110, - 116,32,105,115,32,105,103,110,111,114,101,100,46,32,84,104, - 101,10,32,32,32,32,39,102,114,111,109,108,105,115,116,39, - 32,97,114,103,117,109,101,110,116,32,115,112,101,99,105,102, - 105,101,115,32,119,104,97,116,32,115,104,111,117,108,100,32, - 101,120,105,115,116,32,97,115,32,97,116,116,114,105,98,117, - 116,101,115,32,111,110,32,116,104,101,32,109,111,100,117,108, - 101,10,32,32,32,32,98,101,105,110,103,32,105,109,112,111, - 114,116,101,100,32,40,101,46,103,46,32,96,96,102,114,111, - 109,32,109,111,100,117,108,101,32,105,109,112,111,114,116,32, - 60,102,114,111,109,108,105,115,116,62,96,96,41,46,32,32, - 84,104,101,32,39,108,101,118,101,108,39,10,32,32,32,32, - 97,114,103,117,109,101,110,116,32,114,101,112,114,101,115,101, - 110,116,115,32,116,104,101,32,112,97,99,107,97,103,101,32, - 108,111,99,97,116,105,111,110,32,116,111,32,105,109,112,111, - 114,116,32,102,114,111,109,32,105,110,32,97,32,114,101,108, - 97,116,105,118,101,10,32,32,32,32,105,109,112,111,114,116, - 32,40,101,46,103,46,32,96,96,102,114,111,109,32,46,46, - 112,107,103,32,105,109,112,111,114,116,32,109,111,100,96,96, - 32,119,111,117,108,100,32,104,97,118,101,32,97,32,39,108, - 101,118,101,108,39,32,111,102,32,50,41,46,10,10,32,32, - 32,32,114,125,0,0,0,78,114,244,0,0,0,114,7,1, - 0,0,41,9,114,139,1,0,0,114,155,1,0,0,218,9, - 112,97,114,116,105,116,105,111,110,114,127,0,0,0,114,24, - 0,0,0,114,195,0,0,0,114,11,0,0,0,114,13,0, - 0,0,114,145,1,0,0,41,9,114,26,0,0,0,114,154, - 1,0,0,218,6,108,111,99,97,108,115,114,146,1,0,0, - 114,111,1,0,0,114,200,0,0,0,218,8,103,108,111,98, - 97,108,115,95,114,110,1,0,0,218,7,99,117,116,95,111, - 102,102,115,9,0,0,0,32,32,32,32,32,32,32,32,32, - 114,7,0,0,0,218,10,95,95,105,109,112,111,114,116,95, - 95,114,161,1,0,0,174,5,0,0,115,210,0,0,0,128, - 0,240,22,0,8,13,144,1,130,122,220,17,28,152,84,211, - 17,34,137,6,224,30,37,208,30,49,145,55,176,114,136,8, - 220,18,35,160,72,211,18,45,136,7,220,17,28,152,84,160, - 55,168,69,211,17,50,136,6,217,11,19,240,6,0,12,17, - 144,65,138,58,220,19,30,152,116,159,126,153,126,168,99,211, - 31,50,176,49,209,31,53,211,19,54,208,12,54,217,17,21, - 216,19,25,136,77,244,8,0,23,26,152,36,147,105,164,35, - 160,100,167,110,161,110,176,83,211,38,57,184,33,209,38,60, - 211,34,61,209,22,61,136,71,244,6,0,20,23,151,59,145, - 59,152,118,159,127,153,127,208,47,76,180,3,176,70,183,79, - 177,79,211,48,68,192,87,209,48,76,208,31,77,209,19,78, - 208,12,78,220,9,16,144,22,152,26,212,9,36,220,15,31, - 160,6,168,8,180,43,211,15,62,208,8,62,224,15,21,136, - 13,114,22,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,116,0,0,0,0,0,0,0,0,0,106,3,0,0, + 125,1,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,2,124,1,129,64,124,2,129,60,124,1,124,2, + 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,45,116,4,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,100,3,124,1,155,2,100,4, + 124,2,106,2,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,155,2,100,5,157,5,116,8,0,0, + 0,0,0,0,0,0,100,6,172,7,171,3,0,0,0,0, + 0,0,1,0,124,1,83,0,124,2,129,12,124,2,106,2, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,83,0,116,4,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,100,8,116,10,0,0,0,0,0,0,0,0,100,6, + 172,7,171,3,0,0,0,0,0,0,1,0,124,0,100,9, + 25,0,0,0,125,1,100,10,124,0,118,1,114,20,124,1, + 106,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,100,11,171,1,0,0,0,0,0,0,100,12, + 25,0,0,0,125,1,124,1,83,0,41,13,122,167,67,97, + 108,99,117,108,97,116,101,32,119,104,97,116,32,95,95,112, + 97,99,107,97,103,101,95,95,32,115,104,111,117,108,100,32, + 98,101,46,10,10,32,32,32,32,95,95,112,97,99,107,97, + 103,101,95,95,32,105,115,32,110,111,116,32,103,117,97,114, + 97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,102, + 105,110,101,100,32,111,114,32,99,111,117,108,100,32,98,101, + 32,115,101,116,32,116,111,32,78,111,110,101,10,32,32,32, + 32,116,111,32,114,101,112,114,101,115,101,110,116,32,116,104, + 97,116,32,105,116,115,32,112,114,111,112,101,114,32,118,97, + 108,117,101,32,105,115,32,117,110,107,110,111,119,110,46,10, + 10,32,32,32,32,114,13,1,0,0,114,204,0,0,0,122, + 32,95,95,112,97,99,107,97,103,101,95,95,32,33,61,32, + 95,95,115,112,101,99,95,95,46,112,97,114,101,110,116,32, + 40,122,4,32,33,61,32,114,229,0,0,0,233,3,0,0, + 0,41,1,218,10,115,116,97,99,107,108,101,118,101,108,122, + 89,99,97,110,39,116,32,114,101,115,111,108,118,101,32,112, + 97,99,107,97,103,101,32,102,114,111,109,32,95,95,115,112, + 101,99,95,95,32,111,114,32,95,95,112,97,99,107,97,103, + 101,95,95,44,32,102,97,108,108,105,110,103,32,98,97,99, + 107,32,111,110,32,95,95,110,97,109,101,95,95,32,97,110, + 100,32,95,95,112,97,116,104,95,95,114,11,0,0,0,114, + 7,1,0,0,114,244,0,0,0,114,125,0,0,0,41,7, + 114,76,0,0,0,114,246,0,0,0,114,191,0,0,0,114, + 192,0,0,0,114,193,0,0,0,114,27,1,0,0,114,245, + 0,0,0,41,3,218,7,103,108,111,98,97,108,115,114,110, + 1,0,0,114,199,0,0,0,115,3,0,0,0,32,32,32, + 114,7,0,0,0,218,17,95,99,97,108,99,95,95,95,112, + 97,99,107,97,103,101,95,95,114,155,1,0,0,147,5,0, + 0,115,200,0,0,0,128,0,240,14,0,15,22,143,107,137, + 107,152,45,211,14,40,128,71,216,11,18,143,59,137,59,144, + 122,211,11,34,128,68,216,7,14,208,7,26,216,11,15,208, + 11,27,160,7,168,52,175,59,169,59,210,32,54,220,12,21, + 143,78,137,78,240,0,1,28,31,216,31,38,152,107,168,20, + 168,100,175,107,169,107,168,95,184,65,240,3,1,28,63,228, + 27,45,184,33,240,5,0,13,27,244,0,2,13,61,240,6, + 0,16,23,136,14,216,9,13,208,9,25,216,15,19,143,123, + 137,123,208,8,26,228,8,17,143,14,137,14,240,0,1,24, + 63,228,23,36,176,17,240,5,0,9,23,244,0,2,9,52, + 240,6,0,19,26,152,42,209,18,37,136,7,216,11,21,152, + 87,209,11,36,216,22,29,215,22,40,209,22,40,168,19,211, + 22,45,168,97,209,22,48,136,71,216,11,18,128,78,114,22, + 0,0,0,99,5,0,0,0,0,0,0,0,0,0,0,0, + 6,0,0,0,3,0,0,0,243,172,1,0,0,151,0,124, + 4,100,1,107,40,0,0,114,12,116,1,0,0,0,0,0, + 0,0,0,124,0,171,1,0,0,0,0,0,0,125,5,110, + 30,124,1,129,2,124,1,110,1,105,0,125,6,116,3,0, + 0,0,0,0,0,0,0,124,6,171,1,0,0,0,0,0, + 0,125,7,116,1,0,0,0,0,0,0,0,0,124,0,124, + 7,124,4,171,3,0,0,0,0,0,0,125,5,124,3,115, + 133,124,4,100,1,107,40,0,0,114,29,116,1,0,0,0, + 0,0,0,0,0,124,0,106,5,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,100,1,25,0,0,0,171,1,0,0,0, + 0,0,0,83,0,124,0,115,2,124,5,83,0,116,7,0, + 0,0,0,0,0,0,0,124,0,171,1,0,0,0,0,0, + 0,116,7,0,0,0,0,0,0,0,0,124,0,106,5,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,100,1,25,0,0, + 0,171,1,0,0,0,0,0,0,122,10,0,0,125,8,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,124,5,106, + 12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,100,2,116,7,0,0,0,0,0,0,0,0,124, + 5,106,12,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,124,8,122, + 10,0,0,26,0,25,0,0,0,83,0,116,15,0,0,0, + 0,0,0,0,0,124,5,100,4,171,2,0,0,0,0,0, + 0,114,17,116,17,0,0,0,0,0,0,0,0,124,5,124, + 3,116,0,0,0,0,0,0,0,0,0,171,3,0,0,0, + 0,0,0,83,0,124,5,83,0,41,5,97,215,1,0,0, + 73,109,112,111,114,116,32,97,32,109,111,100,117,108,101,46, + 10,10,32,32,32,32,84,104,101,32,39,103,108,111,98,97, + 108,115,39,32,97,114,103,117,109,101,110,116,32,105,115,32, + 117,115,101,100,32,116,111,32,105,110,102,101,114,32,119,104, + 101,114,101,32,116,104,101,32,105,109,112,111,114,116,32,105, + 115,32,111,99,99,117,114,114,105,110,103,32,102,114,111,109, + 10,32,32,32,32,116,111,32,104,97,110,100,108,101,32,114, + 101,108,97,116,105,118,101,32,105,109,112,111,114,116,115,46, + 32,84,104,101,32,39,108,111,99,97,108,115,39,32,97,114, + 103,117,109,101,110,116,32,105,115,32,105,103,110,111,114,101, + 100,46,32,84,104,101,10,32,32,32,32,39,102,114,111,109, + 108,105,115,116,39,32,97,114,103,117,109,101,110,116,32,115, + 112,101,99,105,102,105,101,115,32,119,104,97,116,32,115,104, + 111,117,108,100,32,101,120,105,115,116,32,97,115,32,97,116, + 116,114,105,98,117,116,101,115,32,111,110,32,116,104,101,32, + 109,111,100,117,108,101,10,32,32,32,32,98,101,105,110,103, + 32,105,109,112,111,114,116,101,100,32,40,101,46,103,46,32, + 96,96,102,114,111,109,32,109,111,100,117,108,101,32,105,109, + 112,111,114,116,32,60,102,114,111,109,108,105,115,116,62,96, + 96,41,46,32,32,84,104,101,32,39,108,101,118,101,108,39, + 10,32,32,32,32,97,114,103,117,109,101,110,116,32,114,101, + 112,114,101,115,101,110,116,115,32,116,104,101,32,112,97,99, + 107,97,103,101,32,108,111,99,97,116,105,111,110,32,116,111, + 32,105,109,112,111,114,116,32,102,114,111,109,32,105,110,32, + 97,32,114,101,108,97,116,105,118,101,10,32,32,32,32,105, + 109,112,111,114,116,32,40,101,46,103,46,32,96,96,102,114, + 111,109,32,46,46,112,107,103,32,105,109,112,111,114,116,32, + 109,111,100,96,96,32,119,111,117,108,100,32,104,97,118,101, + 32,97,32,39,108,101,118,101,108,39,32,111,102,32,50,41, + 46,10,10,32,32,32,32,114,125,0,0,0,78,114,244,0, + 0,0,114,7,1,0,0,41,9,114,139,1,0,0,114,155, + 1,0,0,218,9,112,97,114,116,105,116,105,111,110,114,127, + 0,0,0,114,24,0,0,0,114,195,0,0,0,114,11,0, + 0,0,114,13,0,0,0,114,145,1,0,0,41,9,114,26, + 0,0,0,114,154,1,0,0,218,6,108,111,99,97,108,115, + 114,146,1,0,0,114,111,1,0,0,114,200,0,0,0,218, + 8,103,108,111,98,97,108,115,95,114,110,1,0,0,218,7, + 99,117,116,95,111,102,102,115,9,0,0,0,32,32,32,32, + 32,32,32,32,32,114,7,0,0,0,218,10,95,95,105,109, + 112,111,114,116,95,95,114,161,1,0,0,174,5,0,0,115, + 210,0,0,0,128,0,240,22,0,8,13,144,1,130,122,220, + 17,28,152,84,211,17,34,137,6,224,30,37,208,30,49,145, + 55,176,114,136,8,220,18,35,160,72,211,18,45,136,7,220, + 17,28,152,84,160,55,168,69,211,17,50,136,6,217,11,19, + 240,6,0,12,17,144,65,138,58,220,19,30,152,116,159,126, + 153,126,168,99,211,31,50,176,49,209,31,53,211,19,54,208, + 12,54,217,17,21,216,19,25,136,77,244,8,0,23,26,152, + 36,147,105,164,35,160,100,167,110,161,110,176,83,211,38,57, + 184,33,209,38,60,211,34,61,209,22,61,136,71,244,6,0, + 20,23,151,59,145,59,152,118,159,127,153,127,208,47,76,180, + 3,176,70,183,79,177,79,211,48,68,192,87,209,48,76,208, + 31,77,209,19,78,208,12,78,220,9,16,144,22,152,26,212, + 9,36,220,15,31,160,6,168,8,180,43,211,15,62,208,8, + 62,224,15,21,136,13,114,22,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,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,171,1,0,0,0,0,0,0,125, + 1,124,1,128,14,116,5,0,0,0,0,0,0,0,0,100, + 1,124,0,122,0,0,0,171,1,0,0,0,0,0,0,130, + 1,116,7,0,0,0,0,0,0,0,0,124,1,171,1,0, + 0,0,0,0,0,83,0,41,2,78,122,25,110,111,32,98, + 117,105,108,116,45,105,110,32,109,111,100,117,108,101,32,110, + 97,109,101,100,32,41,4,114,37,1,0,0,114,43,1,0, + 0,114,178,0,0,0,114,33,1,0,0,41,2,114,26,0, + 0,0,114,199,0,0,0,115,2,0,0,0,32,32,114,7, + 0,0,0,218,18,95,98,117,105,108,116,105,110,95,102,114, + 111,109,95,110,97,109,101,114,163,1,0,0,211,5,0,0, + 115,51,0,0,0,128,0,220,11,26,215,11,36,209,11,36, + 160,84,211,11,42,128,68,216,7,11,128,124,220,14,25,208, + 26,53,184,4,209,26,60,211,14,61,208,8,61,220,11,25, + 152,36,211,11,31,208,4,31,114,22,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,44,2,0,0,151,0,124,1,97,0,124,0,97, + 1,116,5,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,2,116, + 2,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,171,0,0,0,0,0,0,0,68,0,93,122,0,0,92, + 2,0,0,125,3,125,4,116,11,0,0,0,0,0,0,0, + 0,124,4,124,2,171,2,0,0,0,0,0,0,115,1,140, + 19,124,3,116,2,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,118,0,114,7,116,14,0,0,0,0,0,0,0,0,125, + 5,110,29,116,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,3,171,1,0,0,0,0,0,0,114,7,116,18,0, + 0,0,0,0,0,0,0,125,5,110,1,140,73,116,21,0, + 0,0,0,0,0,0,0,124,4,124,5,171,2,0,0,0, + 0,0,0,125,6,116,23,0,0,0,0,0,0,0,0,124, + 6,124,4,171,2,0,0,0,0,0,0,1,0,124,5,116, + 18,0,0,0,0,0,0,0,0,117,0,115,1,140,106,124, + 5,106,25,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,124,4,0,116,2,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,116,26,0,0,0,0,0,0,0,0,25,0,0, + 0,125,7,100,1,68,0,93,64,0,0,125,8,124,8,116, + 2,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,118,1,114, + 12,116,29,0,0,0,0,0,0,0,0,124,8,171,1,0, + 0,0,0,0,0,125,9,110,19,116,2,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,8,25,0,0,0,125,9,116, + 31,0,0,0,0,0,0,0,0,124,7,124,8,124,9,171, + 3,0,0,0,0,0,0,1,0,140,66,4,0,116,33,0, + 0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,97, + 17,121,2,41,3,122,250,83,101,116,117,112,32,105,109,112, + 111,114,116,108,105,98,32,98,121,32,105,109,112,111,114,116, + 105,110,103,32,110,101,101,100,101,100,32,98,117,105,108,116, + 45,105,110,32,109,111,100,117,108,101,115,32,97,110,100,32, + 105,110,106,101,99,116,105,110,103,32,116,104,101,109,10,32, + 32,32,32,105,110,116,111,32,116,104,101,32,103,108,111,98, + 97,108,32,110,97,109,101,115,112,97,99,101,46,10,10,32, + 32,32,32,65,115,32,115,121,115,32,105,115,32,110,101,101, + 100,101,100,32,102,111,114,32,115,121,115,46,109,111,100,117, + 108,101,115,32,97,99,99,101,115,115,32,97,110,100,32,95, + 105,109,112,32,105,115,32,110,101,101,100,101,100,32,116,111, + 32,108,111,97,100,32,98,117,105,108,116,45,105,110,10,32, + 32,32,32,109,111,100,117,108,101,115,44,32,116,104,111,115, + 101,32,116,119,111,32,109,111,100,117,108,101,115,32,109,117, + 115,116,32,98,101,32,101,120,112,108,105,99,105,116,108,121, + 32,112,97,115,115,101,100,32,105,110,46,10,10,32,32,32, + 32,41,3,114,109,0,0,0,114,191,0,0,0,114,52,0, + 0,0,78,41,18,114,151,0,0,0,114,24,0,0,0,114, + 5,0,0,0,114,195,0,0,0,218,5,105,116,101,109,115, + 114,23,1,0,0,114,177,0,0,0,114,37,1,0,0,114, + 187,0,0,0,114,58,1,0,0,114,9,1,0,0,114,16, + 1,0,0,114,74,1,0,0,114,11,0,0,0,114,163,1, + 0,0,114,14,0,0,0,114,34,0,0,0,114,85,0,0, + 0,41,10,218,10,115,121,115,95,109,111,100,117,108,101,218, + 11,95,105,109,112,95,109,111,100,117,108,101,218,11,109,111, + 100,117,108,101,95,116,121,112,101,114,26,0,0,0,114,200, + 0,0,0,114,213,0,0,0,114,199,0,0,0,218,11,115, + 101,108,102,95,109,111,100,117,108,101,218,12,98,117,105,108, + 116,105,110,95,110,97,109,101,218,14,98,117,105,108,116,105, + 110,95,109,111,100,117,108,101,115,10,0,0,0,32,32,32, + 32,32,32,32,32,32,32,114,7,0,0,0,218,6,95,115, + 101,116,117,112,114,172,1,0,0,218,5,0,0,115,229,0, + 0,0,128,0,240,18,0,12,23,128,68,216,10,20,128,67, + 244,6,0,19,23,148,115,147,41,128,75,220,24,27,159,11, + 153,11,215,24,41,209,24,41,214,24,43,137,12,136,4,136, + 102,220,11,21,144,102,152,107,213,11,42,216,15,19,148,115, + 215,23,47,209,23,47,209,15,47,220,25,40,145,6,220,17, + 21,151,30,145,30,160,4,212,17,37,220,25,39,145,6,224, + 16,24,220,19,36,160,86,168,86,211,19,52,136,68,220,12, + 30,152,116,160,86,212,12,44,216,15,21,156,30,210,15,39, + 216,16,22,215,16,37,209,16,37,160,102,213,16,45,240,23, + 0,25,44,244,28,0,19,22,151,43,145,43,156,104,209,18, + 39,128,75,219,24,60,136,12,216,11,23,156,115,159,123,153, + 123,209,11,42,220,29,47,176,12,211,29,61,137,78,228,29, + 32,159,91,153,91,168,28,209,29,54,136,78,220,8,15,144, + 11,152,92,168,62,213,8,58,240,11,0,25,61,244,16,0, + 20,40,211,19,41,129,76,114,22,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,168,0,0,0,151,0,116,1,0,0,0,0,0,0, + 0,0,124,0,124,1,171,2,0,0,0,0,0,0,1,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, - 124,0,171,1,0,0,0,0,0,0,125,1,124,1,128,14, - 116,5,0,0,0,0,0,0,0,0,100,1,124,0,122,0, - 0,0,171,1,0,0,0,0,0,0,130,1,116,7,0,0, - 0,0,0,0,0,0,124,1,171,1,0,0,0,0,0,0, - 83,0,41,2,78,122,25,110,111,32,98,117,105,108,116,45, - 105,110,32,109,111,100,117,108,101,32,110,97,109,101,100,32, - 41,4,114,37,1,0,0,114,43,1,0,0,114,178,0,0, - 0,114,33,1,0,0,41,2,114,26,0,0,0,114,199,0, - 0,0,115,2,0,0,0,32,32,114,7,0,0,0,218,18, - 95,98,117,105,108,116,105,110,95,102,114,111,109,95,110,97, - 109,101,114,163,1,0,0,211,5,0,0,115,51,0,0,0, - 128,0,220,11,26,215,11,36,209,11,36,160,84,211,11,42, - 128,68,216,7,11,128,124,220,14,25,208,26,53,184,4,209, - 26,60,211,14,61,208,8,61,220,11,25,152,36,211,11,31, - 208,4,31,114,22,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,44,2, - 0,0,151,0,124,1,97,0,124,0,97,1,116,5,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,2,116,2,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,171,0,0,0, - 0,0,0,0,68,0,93,122,0,0,92,2,0,0,125,3, - 125,4,116,11,0,0,0,0,0,0,0,0,124,4,124,2, - 171,2,0,0,0,0,0,0,115,1,140,19,124,3,116,2, - 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,118,0,114,7, - 116,14,0,0,0,0,0,0,0,0,125,5,110,29,116,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,3,171,1, - 0,0,0,0,0,0,114,7,116,18,0,0,0,0,0,0, - 0,0,125,5,110,1,140,73,116,21,0,0,0,0,0,0, - 0,0,124,4,124,5,171,2,0,0,0,0,0,0,125,6, - 116,23,0,0,0,0,0,0,0,0,124,6,124,4,171,2, - 0,0,0,0,0,0,1,0,124,5,116,18,0,0,0,0, - 0,0,0,0,117,0,115,1,140,106,124,5,106,25,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,124,4,0, - 116,2,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,116,26, - 0,0,0,0,0,0,0,0,25,0,0,0,125,7,100,1, - 68,0,93,64,0,0,125,8,124,8,116,2,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,118,1,114,12,116,29,0,0, - 0,0,0,0,0,0,124,8,171,1,0,0,0,0,0,0, - 125,9,110,19,116,2,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,8,25,0,0,0,125,9,116,31,0,0,0,0, - 0,0,0,0,124,7,124,8,124,9,171,3,0,0,0,0, - 0,0,1,0,140,66,4,0,116,33,0,0,0,0,0,0, - 0,0,171,0,0,0,0,0,0,0,97,17,121,2,41,3, - 122,250,83,101,116,117,112,32,105,109,112,111,114,116,108,105, - 98,32,98,121,32,105,109,112,111,114,116,105,110,103,32,110, - 101,101,100,101,100,32,98,117,105,108,116,45,105,110,32,109, - 111,100,117,108,101,115,32,97,110,100,32,105,110,106,101,99, - 116,105,110,103,32,116,104,101,109,10,32,32,32,32,105,110, - 116,111,32,116,104,101,32,103,108,111,98,97,108,32,110,97, - 109,101,115,112,97,99,101,46,10,10,32,32,32,32,65,115, - 32,115,121,115,32,105,115,32,110,101,101,100,101,100,32,102, - 111,114,32,115,121,115,46,109,111,100,117,108,101,115,32,97, - 99,99,101,115,115,32,97,110,100,32,95,105,109,112,32,105, - 115,32,110,101,101,100,101,100,32,116,111,32,108,111,97,100, - 32,98,117,105,108,116,45,105,110,10,32,32,32,32,109,111, - 100,117,108,101,115,44,32,116,104,111,115,101,32,116,119,111, - 32,109,111,100,117,108,101,115,32,109,117,115,116,32,98,101, - 32,101,120,112,108,105,99,105,116,108,121,32,112,97,115,115, - 101,100,32,105,110,46,10,10,32,32,32,32,41,3,114,109, - 0,0,0,114,191,0,0,0,114,52,0,0,0,78,41,18, - 114,151,0,0,0,114,24,0,0,0,114,5,0,0,0,114, - 195,0,0,0,218,5,105,116,101,109,115,114,23,1,0,0, - 114,177,0,0,0,114,37,1,0,0,114,187,0,0,0,114, - 58,1,0,0,114,9,1,0,0,114,16,1,0,0,114,74, - 1,0,0,114,11,0,0,0,114,163,1,0,0,114,14,0, - 0,0,114,34,0,0,0,114,85,0,0,0,41,10,218,10, - 115,121,115,95,109,111,100,117,108,101,218,11,95,105,109,112, - 95,109,111,100,117,108,101,218,11,109,111,100,117,108,101,95, - 116,121,112,101,114,26,0,0,0,114,200,0,0,0,114,213, - 0,0,0,114,199,0,0,0,218,11,115,101,108,102,95,109, - 111,100,117,108,101,218,12,98,117,105,108,116,105,110,95,110, - 97,109,101,218,14,98,117,105,108,116,105,110,95,109,111,100, - 117,108,101,115,10,0,0,0,32,32,32,32,32,32,32,32, - 32,32,114,7,0,0,0,218,6,95,115,101,116,117,112,114, - 172,1,0,0,218,5,0,0,115,229,0,0,0,128,0,240, - 18,0,12,23,128,68,216,10,20,128,67,244,6,0,19,23, - 148,115,147,41,128,75,220,24,27,159,11,153,11,215,24,41, - 209,24,41,214,24,43,137,12,136,4,136,102,220,11,21,144, - 102,152,107,213,11,42,216,15,19,148,115,215,23,47,209,23, - 47,209,15,47,220,25,40,145,6,220,17,21,151,30,145,30, - 160,4,212,17,37,220,25,39,145,6,224,16,24,220,19,36, - 160,86,168,86,211,19,52,136,68,220,12,30,152,116,160,86, - 212,12,44,216,15,21,156,30,210,15,39,216,16,22,215,16, - 37,209,16,37,160,102,213,16,45,240,23,0,25,44,244,28, - 0,19,22,151,43,145,43,156,104,209,18,39,128,75,219,24, - 60,136,12,216,11,23,156,115,159,123,153,123,209,11,42,220, - 29,47,176,12,211,29,61,137,78,228,29,32,159,91,153,91, - 168,28,209,29,54,136,78,220,8,15,144,11,152,92,168,62, - 213,8,58,240,11,0,25,61,244,16,0,20,40,211,19,41, - 129,76,114,22,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,168,0,0, - 0,151,0,116,1,0,0,0,0,0,0,0,0,124,0,124, - 1,171,2,0,0,0,0,0,0,1,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,116,8,0, - 0,0,0,0,0,0,0,171,1,0,0,0,0,0,0,1, - 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,116,10,0,0,0,0,0,0,0,0,171,1,0, - 0,0,0,0,0,1,0,121,1,41,2,122,48,73,110,115, - 116,97,108,108,32,105,109,112,111,114,116,101,114,115,32,102, - 111,114,32,98,117,105,108,116,105,110,32,97,110,100,32,102, - 114,111,122,101,110,32,109,111,100,117,108,101,115,78,41,6, - 114,172,1,0,0,114,24,0,0,0,114,116,1,0,0,114, - 51,0,0,0,114,37,1,0,0,114,58,1,0,0,41,2, - 114,166,1,0,0,114,167,1,0,0,115,2,0,0,0,32, - 32,114,7,0,0,0,218,8,95,105,110,115,116,97,108,108, - 114,174,1,0,0,2,6,0,0,115,48,0,0,0,128,0, - 228,4,10,136,58,144,123,212,4,35,228,4,7,135,77,129, - 77,215,4,24,209,4,24,156,31,212,4,41,220,4,7,135, - 77,129,77,215,4,24,209,4,24,156,30,213,4,40,114,22, - 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,3,0,0,0,243,92,0,0,0,151,0,100, - 1,100,2,108,0,125,0,124,0,97,1,124,0,106,5,0, - 0,0,0,0,0,0,0,0,0,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,116, - 10,0,0,0,0,0,0,0,0,25,0,0,0,171,1,0, - 0,0,0,0,0,1,0,121,2,41,3,122,57,73,110,115, - 116,97,108,108,32,105,109,112,111,114,116,101,114,115,32,116, - 104,97,116,32,114,101,113,117,105,114,101,32,101,120,116,101, - 114,110,97,108,32,102,105,108,101,115,121,115,116,101,109,32, - 97,99,99,101,115,115,114,125,0,0,0,78,41,6,218,26, - 95,102,114,111,122,101,110,95,105,109,112,111,114,116,108,105, - 98,95,101,120,116,101,114,110,97,108,114,239,0,0,0,114, - 174,1,0,0,114,24,0,0,0,114,195,0,0,0,114,11, - 0,0,0,41,1,114,176,1,0,0,115,1,0,0,0,32, - 114,7,0,0,0,218,27,95,105,110,115,116,97,108,108,95, - 101,120,116,101,114,110,97,108,95,105,109,112,111,114,116,101, - 114,115,114,177,1,0,0,10,6,0,0,115,36,0,0,0, - 128,0,243,6,0,5,38,216,26,52,208,4,23,216,4,30, - 215,4,39,209,4,39,172,3,175,11,169,11,180,72,209,40, - 61,213,4,62,114,22,0,0,0,114,55,1,0,0,114,2, - 0,0,0,114,136,0,0,0,41,4,78,78,114,31,0,0, - 0,114,125,0,0,0,41,58,114,12,0,0,0,114,8,0, - 0,0,114,109,0,0,0,114,191,0,0,0,114,52,0,0, - 0,114,239,0,0,0,114,21,0,0,0,114,27,0,0,0, - 114,6,1,0,0,114,29,0,0,0,114,34,0,0,0,114, - 153,0,0,0,114,85,0,0,0,114,80,0,0,0,114,126, - 0,0,0,114,94,0,0,0,114,101,0,0,0,114,107,0, - 0,0,114,134,0,0,0,114,142,0,0,0,114,147,0,0, - 0,114,157,0,0,0,114,161,0,0,0,114,173,0,0,0, - 114,184,0,0,0,114,189,0,0,0,114,201,0,0,0,114, - 215,0,0,0,114,217,0,0,0,114,194,0,0,0,114,9, - 1,0,0,114,16,1,0,0,114,21,1,0,0,114,211,0, - 0,0,114,196,0,0,0,114,30,1,0,0,114,33,1,0, - 0,114,197,0,0,0,114,37,1,0,0,114,58,1,0,0, - 114,101,1,0,0,114,114,1,0,0,114,119,1,0,0,114, - 125,1,0,0,114,128,1,0,0,218,8,95,69,82,82,95, - 77,83,71,114,134,1,0,0,218,6,111,98,106,101,99,116, - 114,136,1,0,0,114,137,1,0,0,114,139,1,0,0,114, - 145,1,0,0,114,155,1,0,0,114,161,1,0,0,114,163, - 1,0,0,114,172,1,0,0,114,174,1,0,0,114,177,1, - 0,0,114,31,0,0,0,114,22,0,0,0,114,7,0,0, - 0,250,8,60,109,111,100,117,108,101,62,114,180,1,0,0, - 1,0,0,0,115,154,1,0,0,240,3,1,1,1,241,2, - 7,1,4,242,44,4,1,38,240,18,0,11,15,128,7,216, - 12,16,128,9,216,11,15,128,8,240,6,0,23,27,208,0, - 19,242,6,5,1,38,242,16,1,1,27,244,14,1,1,9, - 136,68,244,0,1,1,9,247,14,73,1,1,21,241,0,73, - 1,1,21,240,92,2,0,17,19,128,13,240,26,0,16,20, - 128,12,247,6,19,1,42,241,0,19,1,42,244,44,1,1, - 9,144,92,244,0,1,1,9,242,10,40,1,17,247,86,1, - 96,2,1,59,241,0,96,2,1,59,247,70,5,18,1,64, - 1,241,0,18,1,64,1,247,42,11,1,29,241,0,11,1, - 29,242,32,34,1,16,242,74,1,14,1,23,242,34,8,1, - 28,240,22,0,48,49,244,0,5,1,54,242,16,8,1,37, - 242,22,8,1,36,242,24,15,1,27,242,38,18,1,54,247, - 42,97,1,1,41,241,0,97,1,1,41,240,72,3,0,46, - 50,184,100,244,0,26,1,74,1,243,58,39,1,16,240,84, - 1,0,50,55,244,0,70,1,1,18,242,82,2,14,1,18, - 242,34,18,1,61,242,44,27,1,18,242,60,34,1,18,242, - 72,1,41,1,18,242,90,1,10,1,36,247,30,49,1,49, - 241,0,49,1,49,247,104,1,126,2,1,48,241,0,126,2, - 1,48,247,70,6,10,1,28,241,0,10,1,28,242,26,6, - 1,46,243,18,42,1,20,242,90,1,13,1,46,240,32,0, - 19,37,128,15,216,11,26,152,86,209,11,35,128,8,242,4, - 39,1,18,241,84,1,0,18,24,147,24,128,14,242,6,23, - 1,18,243,52,12,1,45,240,30,0,62,67,1,244,0,34, - 1,18,242,74,1,24,1,19,243,54,34,1,22,242,74,1, - 4,1,32,242,14,37,1,42,242,80,1,5,1,41,243,16, - 5,1,63,114,22,0,0,0, + 0,0,116,8,0,0,0,0,0,0,0,0,171,1,0,0, + 0,0,0,0,1,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,116,10,0,0,0,0,0,0, + 0,0,171,1,0,0,0,0,0,0,1,0,121,1,41,2, + 122,48,73,110,115,116,97,108,108,32,105,109,112,111,114,116, + 101,114,115,32,102,111,114,32,98,117,105,108,116,105,110,32, + 97,110,100,32,102,114,111,122,101,110,32,109,111,100,117,108, + 101,115,78,41,6,114,172,1,0,0,114,24,0,0,0,114, + 116,1,0,0,114,51,0,0,0,114,37,1,0,0,114,58, + 1,0,0,41,2,114,166,1,0,0,114,167,1,0,0,115, + 2,0,0,0,32,32,114,7,0,0,0,218,8,95,105,110, + 115,116,97,108,108,114,174,1,0,0,2,6,0,0,115,48, + 0,0,0,128,0,228,4,10,136,58,144,123,212,4,35,228, + 4,7,135,77,129,77,215,4,24,209,4,24,156,31,212,4, + 41,220,4,7,135,77,129,77,215,4,24,209,4,24,156,30, + 213,4,40,114,22,0,0,0,99,0,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,3,0,0,0,243,92,0, + 0,0,151,0,100,1,100,2,108,0,125,0,124,0,97,1, + 124,0,106,5,0,0,0,0,0,0,0,0,0,0,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,116,10,0,0,0,0,0,0,0,0,25,0, + 0,0,171,1,0,0,0,0,0,0,1,0,121,2,41,3, + 122,57,73,110,115,116,97,108,108,32,105,109,112,111,114,116, + 101,114,115,32,116,104,97,116,32,114,101,113,117,105,114,101, + 32,101,120,116,101,114,110,97,108,32,102,105,108,101,115,121, + 115,116,101,109,32,97,99,99,101,115,115,114,125,0,0,0, + 78,41,6,218,26,95,102,114,111,122,101,110,95,105,109,112, + 111,114,116,108,105,98,95,101,120,116,101,114,110,97,108,114, + 239,0,0,0,114,174,1,0,0,114,24,0,0,0,114,195, + 0,0,0,114,11,0,0,0,41,1,114,176,1,0,0,115, + 1,0,0,0,32,114,7,0,0,0,218,27,95,105,110,115, + 116,97,108,108,95,101,120,116,101,114,110,97,108,95,105,109, + 112,111,114,116,101,114,115,114,177,1,0,0,10,6,0,0, + 115,36,0,0,0,128,0,243,6,0,5,38,216,26,52,208, + 4,23,216,4,30,215,4,39,209,4,39,172,3,175,11,169, + 11,180,72,209,40,61,213,4,62,114,22,0,0,0,114,55, + 1,0,0,114,2,0,0,0,114,136,0,0,0,41,4,78, + 78,114,31,0,0,0,114,125,0,0,0,41,58,114,12,0, + 0,0,114,8,0,0,0,114,109,0,0,0,114,191,0,0, + 0,114,52,0,0,0,114,239,0,0,0,114,21,0,0,0, + 114,27,0,0,0,114,6,1,0,0,114,29,0,0,0,114, + 34,0,0,0,114,153,0,0,0,114,85,0,0,0,114,80, + 0,0,0,114,126,0,0,0,114,94,0,0,0,114,101,0, + 0,0,114,107,0,0,0,114,134,0,0,0,114,142,0,0, + 0,114,147,0,0,0,114,157,0,0,0,114,161,0,0,0, + 114,173,0,0,0,114,184,0,0,0,114,189,0,0,0,114, + 201,0,0,0,114,215,0,0,0,114,217,0,0,0,114,194, + 0,0,0,114,9,1,0,0,114,16,1,0,0,114,21,1, + 0,0,114,211,0,0,0,114,196,0,0,0,114,30,1,0, + 0,114,33,1,0,0,114,197,0,0,0,114,37,1,0,0, + 114,58,1,0,0,114,101,1,0,0,114,114,1,0,0,114, + 119,1,0,0,114,125,1,0,0,114,128,1,0,0,218,8, + 95,69,82,82,95,77,83,71,114,134,1,0,0,218,6,111, + 98,106,101,99,116,114,136,1,0,0,114,137,1,0,0,114, + 139,1,0,0,114,145,1,0,0,114,155,1,0,0,114,161, + 1,0,0,114,163,1,0,0,114,172,1,0,0,114,174,1, + 0,0,114,177,1,0,0,114,31,0,0,0,114,22,0,0, + 0,114,7,0,0,0,218,8,60,109,111,100,117,108,101,62, + 114,180,1,0,0,1,0,0,0,115,154,1,0,0,240,3, + 1,1,1,241,2,7,1,4,242,44,4,1,38,240,18,0, + 11,15,128,7,216,12,16,128,9,216,11,15,128,8,240,6, + 0,23,27,208,0,19,242,6,5,1,38,242,16,1,1,27, + 244,14,1,1,9,136,68,244,0,1,1,9,247,14,73,1, + 1,21,241,0,73,1,1,21,240,92,2,0,17,19,128,13, + 240,26,0,16,20,128,12,247,6,19,1,42,241,0,19,1, + 42,244,44,1,1,9,144,92,244,0,1,1,9,242,10,40, + 1,17,247,86,1,96,2,1,59,241,0,96,2,1,59,247, + 70,5,18,1,64,1,241,0,18,1,64,1,247,42,11,1, + 29,241,0,11,1,29,242,32,34,1,16,242,74,1,14,1, + 23,242,34,8,1,28,240,22,0,48,49,244,0,5,1,54, + 242,16,8,1,37,242,22,8,1,36,242,24,15,1,27,242, + 38,18,1,54,247,42,97,1,1,41,241,0,97,1,1,41, + 240,72,3,0,46,50,184,100,244,0,26,1,74,1,243,58, + 39,1,16,240,84,1,0,50,55,244,0,70,1,1,18,242, + 82,2,14,1,18,242,34,18,1,61,242,44,27,1,18,242, + 60,34,1,18,242,72,1,41,1,18,242,90,1,10,1,36, + 247,30,49,1,49,241,0,49,1,49,247,104,1,126,2,1, + 48,241,0,126,2,1,48,247,70,6,10,1,28,241,0,10, + 1,28,242,26,6,1,46,243,18,42,1,20,242,90,1,13, + 1,46,240,32,0,19,37,128,15,216,11,26,152,86,209,11, + 35,128,8,242,4,39,1,18,241,84,1,0,18,24,147,24, + 128,14,242,6,23,1,18,243,52,12,1,45,240,30,0,62, + 67,1,244,0,34,1,18,242,74,1,24,1,19,243,54,34, + 1,22,242,74,1,4,1,32,242,14,37,1,42,242,80,1, + 5,1,41,243,16,5,1,63,114,22,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 ad565b38db..742a31e268 100644 --- a/contrib/tools/python3/Python/frozen_modules/importlib._bootstrap_external.h +++ b/contrib/tools/python3/Python/frozen_modules/importlib._bootstrap_external.h @@ -88,7 +88,7 @@ const unsigned char _Py_M__importlib__bootstrap_external[] = { 112,117,98,108,105,99,45,102,97,99,105,110,103,32,118,101, 114,115,105,111,110,32,111,102,32,116,104,105,115,32,109,111, 100,117,108,101,46,10,10,78,233,0,0,0,0,218,5,119, - 105,110,51,50,250,1,92,250,1,47,99,1,0,0,0,0, + 105,110,51,50,218,1,92,218,1,47,99,1,0,0,0,0, 0,0,0,0,0,0,0,4,0,0,0,35,0,0,0,243, 56,0,0,0,75,0,1,0,151,0,124,0,93,18,0,0, 125,1,116,1,0,0,0,0,0,0,0,0,124,1,171,1, @@ -98,11 +98,11 @@ const unsigned char _Py_M__importlib__bootstrap_external[] = { 48,218,3,115,101,112,115,2,0,0,0,32,32,250,38,60, 102,114,111,122,101,110,32,105,109,112,111,114,116,108,105,98, 46,95,98,111,111,116,115,116,114,97,112,95,101,120,116,101, - 114,110,97,108,62,250,9,60,103,101,110,101,120,112,114,62, + 114,110,97,108,62,218,9,60,103,101,110,101,120,112,114,62, 114,11,0,0,0,46,0,0,0,115,25,0,0,0,232,0, 248,128,0,208,10,52,161,79,152,83,140,51,136,115,139,56, 144,113,141,61,161,79,249,115,4,0,0,0,130,24,26,1, - 218,0,250,1,58,41,1,218,3,119,105,110,41,2,218,6, + 218,0,218,1,58,41,1,218,3,119,105,110,41,2,218,6, 99,121,103,119,105,110,218,6,100,97,114,119,105,110,99,0, 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3, 0,0,0,243,178,0,0,0,135,1,151,0,116,0,0,0, @@ -459,7 +459,7 @@ const unsigned char _Py_M__importlib__bootstrap_external[] = { 171,0,0,0,0,0,0,0,124,0,171,2,0,0,0,0, 0,0,83,0,124,0,83,0,41,2,122,32,82,101,112,108, 97,99,101,109,101,110,116,32,102,111,114,32,111,115,46,112, - 97,116,104,46,97,98,115,112,97,116,104,46,250,1,46,41, + 97,116,104,46,97,98,115,112,97,116,104,46,218,1,46,41, 6,114,100,0,0,0,114,61,0,0,0,218,12,114,101,109, 111,118,101,112,114,101,102,105,120,114,72,0,0,0,114,23, 0,0,0,114,95,0,0,0,41,2,114,68,0,0,0,114, @@ -2272,1575 +2272,1575 @@ const unsigned char _Py_M__importlib__bootstrap_external[] = { 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,110, + 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,1,13,35,241,0,1,13,35,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,1,13,35,241,0,1,13,35,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, + 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, - 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, + 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,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, + 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,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,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,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,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,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,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,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, - 1,0,0,0,3,0,0,0,243,26,0,0,0,151,0,124, + 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,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,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,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, + 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, + 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,90,1,0,0,151,0,116,1,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,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, + 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,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,250,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,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,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,99,2,0,0,0,0,0,0,0, + 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,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,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,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,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,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,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,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, + 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,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,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,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,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,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,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,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,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,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,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,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,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,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,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, + 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, + 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, - 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, + 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,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,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, + 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,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,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,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,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,250,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, + 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,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,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, }; diff --git a/contrib/tools/python3/Python/frozen_modules/importlib.machinery.h b/contrib/tools/python3/Python/frozen_modules/importlib.machinery.h index e655b7ae5e..6bfbd0d704 100644 --- a/contrib/tools/python3/Python/frozen_modules/importlib.machinery.h +++ b/contrib/tools/python3/Python/frozen_modules/importlib.machinery.h @@ -58,7 +58,7 @@ const unsigned char _Py_M__importlib_machinery[] = { 114,10,0,0,0,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,17,0,0,0,114,22,0,0,0,114,19,0, - 0,0,114,20,0,0,0,114,21,0,0,0,250,8,60,109, + 0,0,114,20,0,0,0,114,21,0,0,0,218,8,60,109, 111,100,117,108,101,62,114,26,0,0,0,1,0,0,0,115, 56,0,0,0,240,3,1,1,1,217,0,63,229,0,34,221, 0,39,221,0,38,247,2,2,1,41,245,0,2,1,41,245, diff --git a/contrib/tools/python3/Python/frozen_modules/importlib.util.h b/contrib/tools/python3/Python/frozen_modules/importlib.util.h index 0de4dba74d..fa0746ad4c 100644 --- a/contrib/tools/python3/Python/frozen_modules/importlib.util.h +++ b/contrib/tools/python3/Python/frozen_modules/importlib.util.h @@ -67,7 +67,7 @@ const unsigned char _Py_M__importlib_util[] = { 0,83,0,41,7,122,50,82,101,115,111,108,118,101,32,97, 32,114,101,108,97,116,105,118,101,32,109,111,100,117,108,101, 32,110,97,109,101,32,116,111,32,97,110,32,97,98,115,111, - 108,117,116,101,32,111,110,101,46,250,1,46,122,25,110,111, + 108,117,116,101,32,111,110,101,46,218,1,46,122,25,110,111, 32,112,97,99,107,97,103,101,32,115,112,101,99,105,102,105, 101,100,32,102,111,114,32,122,37,32,40,114,101,113,117,105, 114,101,100,32,102,111,114,32,114,101,108,97,116,105,118,101, @@ -531,206 +531,206 @@ const unsigned char _Py_M__importlib_util[] = { 101,115,11,0,0,0,32,32,32,32,32,32,32,32,32,32, 32,114,19,0,0,0,114,88,0,0,0,122,28,95,76,97, 122,121,77,111,100,117,108,101,46,95,95,103,101,116,97,116, - 116,114,105,98,117,116,101,95,95,172,0,0,0,115,133,1, + 116,114,105,98,117,116,101,95,95,172,0,0,0,115,131,1, 0,0,128,0,228,19,25,215,19,42,209,19,42,168,52,176, 26,211,19,60,136,8,216,23,31,215,23,44,209,23,44,136, 12,216,13,25,152,38,211,13,33,244,6,0,16,22,215,15, 38,209,15,38,160,116,168,91,211,15,57,188,91,210,15,72, 240,10,0,20,32,160,12,210,19,45,220,27,33,215,27,50, - 209,27,50,176,52,184,20,211,27,62,247,19,43,9,50,241, - 0,43,9,50,240,20,0,46,50,144,12,152,92,209,16,42, - 228,27,33,215,27,50,209,27,50,176,52,184,26,211,27,68, - 144,8,240,12,0,33,41,167,13,161,13,144,13,240,6,0, - 30,42,168,42,209,29,53,144,10,216,28,36,144,9,216,32, - 34,144,13,216,34,43,167,47,161,47,214,34,51,145,74,144, - 67,152,21,240,6,0,24,27,160,42,209,23,44,216,45,50, - 152,13,160,99,210,24,42,220,25,27,152,73,160,99,153,78, - 211,25,43,172,114,176,42,184,83,177,47,211,47,66,211,25, - 66,216,45,50,152,13,160,99,210,24,42,240,13,0,35,52, - 240,14,0,17,25,151,15,145,15,215,16,43,209,16,43,168, - 68,212,16,49,240,6,0,20,33,164,67,167,75,161,75,209, - 19,47,220,23,25,152,36,147,120,164,50,164,99,167,107,161, - 107,176,45,209,38,64,211,35,65,210,23,65,220,30,40,208, - 43,61,184,109,208,61,78,240,0,2,79,1,49,240,0,2, - 42,49,243,0,2,31,50,240,0,2,25,50,240,10,0,17, - 25,151,15,145,15,160,13,212,16,46,228,33,38,215,33,49, - 209,33,49,144,4,148,14,247,87,1,0,14,34,244,90,1, - 0,16,23,144,116,152,84,211,15,34,208,8,34,247,91,1, - 0,14,34,208,13,33,250,115,25,0,0,0,168,56,69,61, - 3,193,42,65,45,69,61,3,195,24,66,17,69,61,3,197, - 61,5,70,6,7,99,2,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,3,0,0,0,243,62,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,116,3,0,0,0,0,0,0,0,0,124,0,124, - 1,171,2,0,0,0,0,0,0,1,0,121,1,41,2,122, - 47,84,114,105,103,103,101,114,32,116,104,101,32,108,111,97, - 100,32,97,110,100,32,116,104,101,110,32,112,101,114,102,111, - 114,109,32,116,104,101,32,100,101,108,101,116,105,111,110,46, - 78,41,2,114,88,0,0,0,218,7,100,101,108,97,116,116, - 114,41,2,114,61,0,0,0,114,98,0,0,0,115,2,0, - 0,0,32,32,114,19,0,0,0,218,11,95,95,100,101,108, - 97,116,116,114,95,95,122,23,95,76,97,122,121,77,111,100, - 117,108,101,46,95,95,100,101,108,97,116,116,114,95,95,223, - 0,0,0,115,28,0,0,0,128,0,240,8,0,9,13,215, - 8,29,209,8,29,152,100,212,8,35,220,8,15,144,4,144, - 100,213,8,27,114,20,0,0,0,78,41,6,114,74,0,0, - 0,114,75,0,0,0,114,76,0,0,0,114,77,0,0,0, - 114,88,0,0,0,114,107,0,0,0,114,79,0,0,0,114, - 20,0,0,0,114,19,0,0,0,114,81,0,0,0,114,81, - 0,0,0,168,0,0,0,115,16,0,0,0,132,0,225,4, - 85,242,4,49,5,35,243,102,1,5,5,28,114,20,0,0, - 0,114,81,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,66,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,6, - 100,3,132,0,171,0,0,0,0,0,0,0,90,7,100,4, - 132,0,90,8,100,5,132,0,90,9,100,6,132,0,90,10, - 121,7,41,8,218,10,76,97,122,121,76,111,97,100,101,114, - 122,75,65,32,108,111,97,100,101,114,32,116,104,97,116,32, - 99,114,101,97,116,101,115,32,97,32,109,111,100,117,108,101, - 32,119,104,105,99,104,32,100,101,102,101,114,115,32,108,111, - 97,100,105,110,103,32,117,110,116,105,108,32,97,116,116,114, - 105,98,117,116,101,32,97,99,99,101,115,115,46,99,1,0, - 0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,0, - 0,0,243,50,0,0,0,151,0,116,1,0,0,0,0,0, - 0,0,0,124,0,100,1,171,2,0,0,0,0,0,0,115, - 11,116,3,0,0,0,0,0,0,0,0,100,2,171,1,0, - 0,0,0,0,0,130,1,121,0,41,3,78,114,93,0,0, - 0,122,32,108,111,97,100,101,114,32,109,117,115,116,32,100, - 101,102,105,110,101,32,101,120,101,99,95,109,111,100,117,108, - 101,40,41,41,2,218,7,104,97,115,97,116,116,114,218,9, - 84,121,112,101,69,114,114,111,114,41,1,114,92,0,0,0, - 115,1,0,0,0,32,114,19,0,0,0,218,20,95,95,99, - 104,101,99,107,95,101,97,103,101,114,95,108,111,97,100,101, - 114,122,31,76,97,122,121,76,111,97,100,101,114,46,95,95, - 99,104,101,99,107,95,101,97,103,101,114,95,108,111,97,100, - 101,114,235,0,0,0,115,29,0,0,0,128,0,228,15,22, - 144,118,152,125,212,15,45,220,18,27,208,28,62,211,18,63, - 208,12,63,240,3,0,16,46,114,20,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,52,0,0,0,135,0,135,1,151,0,137,0,106, - 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,137,1,171,1,0,0,0,0,0,0,1,0,136, - 0,136,1,102,2,100,1,132,8,83,0,41,2,122,62,67, - 111,110,115,116,114,117,99,116,32,97,32,99,97,108,108,97, - 98,108,101,32,119,104,105,99,104,32,114,101,116,117,114,110, - 115,32,116,104,101,32,101,97,103,101,114,32,108,111,97,100, - 101,114,32,109,97,100,101,32,108,97,122,121,46,99,0,0, - 0,0,0,0,0,0,0,0,0,0,7,0,0,0,31,0, - 0,0,243,32,0,0,0,149,2,151,0,2,0,137,2,2, - 0,137,3,124,0,105,0,124,1,164,1,142,1,171,1,0, - 0,0,0,0,0,83,0,114,58,0,0,0,114,79,0,0, - 0,41,4,114,70,0,0,0,218,6,107,119,97,114,103,115, - 218,3,99,108,115,114,92,0,0,0,115,4,0,0,0,32, - 32,128,128,114,19,0,0,0,250,8,60,108,97,109,98,100, - 97,62,122,36,76,97,122,121,76,111,97,100,101,114,46,102, - 97,99,116,111,114,121,46,60,108,111,99,97,108,115,62,46, - 60,108,97,109,98,100,97,62,244,0,0,0,115,20,0,0, - 0,248,128,0,161,115,169,54,176,52,208,43,66,184,54,209, - 43,66,212,39,67,114,20,0,0,0,41,1,218,31,95,76, - 97,122,121,76,111,97,100,101,114,95,95,99,104,101,99,107, - 95,101,97,103,101,114,95,108,111,97,100,101,114,41,2,114, - 117,0,0,0,114,92,0,0,0,115,2,0,0,0,96,96, - 114,19,0,0,0,218,7,102,97,99,116,111,114,121,122,18, - 76,97,122,121,76,111,97,100,101,114,46,102,97,99,116,111, - 114,121,240,0,0,0,115,25,0,0,0,249,128,0,240,6, - 0,9,12,215,8,32,209,8,32,160,22,212,8,40,220,15, - 67,208,8,67,114,20,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,52, - 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,1,124,0,95,1,0,0,0, - 0,0,0,0,0,121,0,114,58,0,0,0,41,2,114,119, - 0,0,0,114,92,0,0,0,41,2,114,61,0,0,0,114, - 92,0,0,0,115,2,0,0,0,32,32,114,19,0,0,0, - 114,62,0,0,0,122,19,76,97,122,121,76,111,97,100,101, - 114,46,95,95,105,110,105,116,95,95,246,0,0,0,115,23, - 0,0,0,128,0,216,8,12,215,8,33,209,8,33,160,38, - 212,8,41,216,22,28,136,4,141,11,114,20,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,56,0,0,0,151,0,124,0,106,0,0, + 209,27,50,176,52,184,20,211,27,62,247,19,0,14,34,209, + 13,33,240,20,0,46,50,144,12,152,92,209,16,42,228,27, + 33,215,27,50,209,27,50,176,52,184,26,211,27,68,144,8, + 240,12,0,33,41,167,13,161,13,144,13,240,6,0,30,42, + 168,42,209,29,53,144,10,216,28,36,144,9,216,32,34,144, + 13,216,34,43,167,47,161,47,214,34,51,145,74,144,67,152, + 21,240,6,0,24,27,160,42,209,23,44,216,45,50,152,13, + 160,99,210,24,42,220,25,27,152,73,160,99,153,78,211,25, + 43,172,114,176,42,184,83,177,47,211,47,66,211,25,66,216, + 45,50,152,13,160,99,210,24,42,240,13,0,35,52,240,14, + 0,17,25,151,15,145,15,215,16,43,209,16,43,168,68,212, + 16,49,240,6,0,20,33,164,67,167,75,161,75,209,19,47, + 220,23,25,152,36,147,120,164,50,164,99,167,107,161,107,176, + 45,209,38,64,211,35,65,210,23,65,220,30,40,208,43,61, + 184,109,208,61,78,240,0,2,79,1,49,240,0,2,42,49, + 243,0,2,31,50,240,0,2,25,50,240,10,0,17,25,151, + 15,145,15,160,13,212,16,46,228,33,38,215,33,49,209,33, + 49,144,4,148,14,247,87,1,0,14,34,244,90,1,0,16, + 23,144,116,152,84,211,15,34,208,8,34,247,91,1,0,14, + 34,208,13,33,250,115,25,0,0,0,168,56,69,61,3,193, + 42,65,45,69,61,3,195,24,66,17,69,61,3,197,61,5, + 70,6,7,99,2,0,0,0,0,0,0,0,0,0,0,0, + 4,0,0,0,3,0,0,0,243,62,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,116,3,0,0,0,0,0,0,0,0,124,0,124,1,171, + 2,0,0,0,0,0,0,1,0,121,1,41,2,122,47,84, + 114,105,103,103,101,114,32,116,104,101,32,108,111,97,100,32, + 97,110,100,32,116,104,101,110,32,112,101,114,102,111,114,109, + 32,116,104,101,32,100,101,108,101,116,105,111,110,46,78,41, + 2,114,88,0,0,0,218,7,100,101,108,97,116,116,114,41, + 2,114,61,0,0,0,114,98,0,0,0,115,2,0,0,0, + 32,32,114,19,0,0,0,218,11,95,95,100,101,108,97,116, + 116,114,95,95,122,23,95,76,97,122,121,77,111,100,117,108, + 101,46,95,95,100,101,108,97,116,116,114,95,95,223,0,0, + 0,115,28,0,0,0,128,0,240,8,0,9,13,215,8,29, + 209,8,29,152,100,212,8,35,220,8,15,144,4,144,100,213, + 8,27,114,20,0,0,0,78,41,6,114,74,0,0,0,114, + 75,0,0,0,114,76,0,0,0,114,77,0,0,0,114,88, + 0,0,0,114,107,0,0,0,114,79,0,0,0,114,20,0, + 0,0,114,19,0,0,0,114,81,0,0,0,114,81,0,0, + 0,168,0,0,0,115,16,0,0,0,132,0,225,4,85,242, + 4,49,5,35,243,102,1,5,5,28,114,20,0,0,0,114, + 81,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,66,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,6,100,3, + 132,0,171,0,0,0,0,0,0,0,90,7,100,4,132,0, + 90,8,100,5,132,0,90,9,100,6,132,0,90,10,121,7, + 41,8,218,10,76,97,122,121,76,111,97,100,101,114,122,75, + 65,32,108,111,97,100,101,114,32,116,104,97,116,32,99,114, + 101,97,116,101,115,32,97,32,109,111,100,117,108,101,32,119, + 104,105,99,104,32,100,101,102,101,114,115,32,108,111,97,100, + 105,110,103,32,117,110,116,105,108,32,97,116,116,114,105,98, + 117,116,101,32,97,99,99,101,115,115,46,99,1,0,0,0, + 0,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, + 243,50,0,0,0,151,0,116,1,0,0,0,0,0,0,0, + 0,124,0,100,1,171,2,0,0,0,0,0,0,115,11,116, + 3,0,0,0,0,0,0,0,0,100,2,171,1,0,0,0, + 0,0,0,130,1,121,0,41,3,78,114,93,0,0,0,122, + 32,108,111,97,100,101,114,32,109,117,115,116,32,100,101,102, + 105,110,101,32,101,120,101,99,95,109,111,100,117,108,101,40, + 41,41,2,218,7,104,97,115,97,116,116,114,218,9,84,121, + 112,101,69,114,114,111,114,41,1,114,92,0,0,0,115,1, + 0,0,0,32,114,19,0,0,0,218,20,95,95,99,104,101, + 99,107,95,101,97,103,101,114,95,108,111,97,100,101,114,122, + 31,76,97,122,121,76,111,97,100,101,114,46,95,95,99,104, + 101,99,107,95,101,97,103,101,114,95,108,111,97,100,101,114, + 235,0,0,0,115,29,0,0,0,128,0,228,15,22,144,118, + 152,125,212,15,45,220,18,27,208,28,62,211,18,63,208,12, + 63,240,3,0,16,46,114,20,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,52,0,0,0,135,0,135,1,151,0,137,0,106,1,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,83, - 0,114,58,0,0,0,41,2,114,92,0,0,0,218,13,99, - 114,101,97,116,101,95,109,111,100,117,108,101,41,2,114,61, - 0,0,0,114,41,0,0,0,115,2,0,0,0,32,32,114, - 19,0,0,0,114,123,0,0,0,122,24,76,97,122,121,76, - 111,97,100,101,114,46,99,114,101,97,116,101,95,109,111,100, - 117,108,101,250,0,0,0,115,23,0,0,0,128,0,216,15, - 19,143,123,137,123,215,15,40,209,15,40,168,20,211,15,46, - 208,8,46,114,20,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,1, - 0,0,151,0,100,1,100,2,108,0,125,2,124,0,106,2, + 0,137,1,171,1,0,0,0,0,0,0,1,0,136,0,136, + 1,102,2,100,1,132,8,83,0,41,2,122,62,67,111,110, + 115,116,114,117,99,116,32,97,32,99,97,108,108,97,98,108, + 101,32,119,104,105,99,104,32,114,101,116,117,114,110,115,32, + 116,104,101,32,101,97,103,101,114,32,108,111,97,100,101,114, + 32,109,97,100,101,32,108,97,122,121,46,99,0,0,0,0, + 0,0,0,0,0,0,0,0,7,0,0,0,31,0,0,0, + 243,32,0,0,0,149,2,151,0,2,0,137,2,2,0,137, + 3,124,0,105,0,124,1,164,1,142,1,171,1,0,0,0, + 0,0,0,83,0,114,58,0,0,0,114,79,0,0,0,41, + 4,114,70,0,0,0,218,6,107,119,97,114,103,115,218,3, + 99,108,115,114,92,0,0,0,115,4,0,0,0,32,32,128, + 128,114,19,0,0,0,218,8,60,108,97,109,98,100,97,62, + 122,36,76,97,122,121,76,111,97,100,101,114,46,102,97,99, + 116,111,114,121,46,60,108,111,99,97,108,115,62,46,60,108, + 97,109,98,100,97,62,244,0,0,0,115,20,0,0,0,248, + 128,0,161,115,169,54,176,52,208,43,66,184,54,209,43,66, + 212,39,67,114,20,0,0,0,41,1,218,31,95,76,97,122, + 121,76,111,97,100,101,114,95,95,99,104,101,99,107,95,101, + 97,103,101,114,95,108,111,97,100,101,114,41,2,114,117,0, + 0,0,114,92,0,0,0,115,2,0,0,0,96,96,114,19, + 0,0,0,218,7,102,97,99,116,111,114,121,122,18,76,97, + 122,121,76,111,97,100,101,114,46,102,97,99,116,111,114,121, + 240,0,0,0,115,25,0,0,0,249,128,0,240,6,0,9, + 12,215,8,32,209,8,32,160,22,212,8,40,220,15,67,208, + 8,67,114,20,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,52,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,1,124,0,95,1,0,0,0,0,0, + 0,0,0,121,0,114,58,0,0,0,41,2,114,119,0,0, + 0,114,92,0,0,0,41,2,114,61,0,0,0,114,92,0, + 0,0,115,2,0,0,0,32,32,114,19,0,0,0,114,62, + 0,0,0,122,19,76,97,122,121,76,111,97,100,101,114,46, + 95,95,105,110,105,116,95,95,246,0,0,0,115,23,0,0, + 0,128,0,216,8,12,215,8,33,209,8,33,160,38,212,8, + 41,216,22,28,136,4,141,11,114,20,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,56,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,83,0,114, + 58,0,0,0,41,2,114,92,0,0,0,218,13,99,114,101, + 97,116,101,95,109,111,100,117,108,101,41,2,114,61,0,0, + 0,114,41,0,0,0,115,2,0,0,0,32,32,114,19,0, + 0,0,114,123,0,0,0,122,24,76,97,122,121,76,111,97, + 100,101,114,46,99,114,101,97,116,101,95,109,111,100,117,108, + 101,250,0,0,0,115,23,0,0,0,128,0,216,15,19,143, + 123,137,123,215,15,40,209,15,40,168,20,211,15,46,208,8, + 46,114,20,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,1,0,0, + 151,0,100,1,100,2,108,0,125,2,124,0,106,2,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,1,106,4,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,95,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,124,1,95,3,0,0,0,0, - 0,0,0,0,105,0,125,3,124,1,106,8,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,106,11, + 124,1,106,4,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,95,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,124,1,95,3,0,0,0,0,0,0, + 0,0,105,0,125,3,124,1,106,8,0,0,0,0,0,0, + 0,0,0,0,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, - 0,0,171,0,0,0,0,0,0,0,124,3,100,3,60,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,124,3,100,4,60,0,0,0, - 124,2,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,3, - 100,5,60,0,0,0,100,6,124,3,100,7,60,0,0,0, - 124,3,124,1,106,4,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,95,8,0,0,0,0,0,0, - 0,0,116,18,0,0,0,0,0,0,0,0,124,1,95,6, - 0,0,0,0,0,0,0,0,121,2,41,8,122,28,77,97, - 107,101,32,116,104,101,32,109,111,100,117,108,101,32,108,111, - 97,100,32,108,97,122,105,108,121,46,114,14,0,0,0,78, - 114,86,0,0,0,114,84,0,0,0,114,83,0,0,0,70, - 114,85,0,0,0,41,10,218,9,116,104,114,101,97,100,105, - 110,103,114,92,0,0,0,114,36,0,0,0,218,10,95,95, - 108,111,97,100,101,114,95,95,114,86,0,0,0,218,4,99, - 111,112,121,114,84,0,0,0,218,5,82,76,111,99,107,114, - 89,0,0,0,114,81,0,0,0,41,4,114,61,0,0,0, - 114,40,0,0,0,114,125,0,0,0,114,89,0,0,0,115, - 4,0,0,0,32,32,32,32,114,19,0,0,0,114,93,0, - 0,0,122,22,76,97,122,121,76,111,97,100,101,114,46,101, - 120,101,99,95,109,111,100,117,108,101,253,0,0,0,115,128, - 0,0,0,128,0,243,8,0,9,25,216,33,37,167,27,161, - 27,136,6,143,15,137,15,212,8,30,216,28,32,159,75,153, - 75,136,6,212,8,25,240,10,0,24,26,136,12,216,35,41, - 167,63,161,63,215,35,55,209,35,55,211,35,57,136,12,144, - 90,209,8,32,216,36,42,215,36,52,209,36,52,136,12,144, - 91,209,8,33,216,31,40,159,127,153,127,211,31,48,136,12, - 144,86,209,8,28,216,37,42,136,12,144,92,209,8,34,216, - 39,51,136,6,143,15,137,15,212,8,36,220,27,38,136,6, - 213,8,24,114,20,0,0,0,78,41,11,114,74,0,0,0, - 114,75,0,0,0,114,76,0,0,0,114,77,0,0,0,218, - 12,115,116,97,116,105,99,109,101,116,104,111,100,114,119,0, - 0,0,218,11,99,108,97,115,115,109,101,116,104,111,100,114, - 120,0,0,0,114,62,0,0,0,114,123,0,0,0,114,93, - 0,0,0,114,79,0,0,0,114,20,0,0,0,114,19,0, - 0,0,114,109,0,0,0,114,109,0,0,0,231,0,0,0, - 115,62,0,0,0,132,0,225,4,85,224,5,17,241,2,2, - 5,64,1,243,3,0,6,18,240,2,2,5,64,1,240,8, - 0,6,17,241,2,3,5,68,1,243,3,0,6,17,240,2, - 3,5,68,1,242,10,2,5,29,242,8,1,5,47,243,6, - 17,5,39,114,20,0,0,0,114,109,0,0,0,114,58,0, - 0,0,41,26,114,77,0,0,0,218,4,95,97,98,99,114, - 3,0,0,0,218,10,95,98,111,111,116,115,116,114,97,112, - 114,4,0,0,0,114,5,0,0,0,114,6,0,0,0,114, - 7,0,0,0,218,19,95,98,111,111,116,115,116,114,97,112, - 95,101,120,116,101,114,110,97,108,114,8,0,0,0,114,9, - 0,0,0,114,10,0,0,0,114,11,0,0,0,114,12,0, - 0,0,114,13,0,0,0,114,16,0,0,0,114,34,0,0, - 0,114,95,0,0,0,114,17,0,0,0,114,30,0,0,0, - 114,42,0,0,0,114,54,0,0,0,114,56,0,0,0,114, - 96,0,0,0,114,81,0,0,0,114,109,0,0,0,114,79, - 0,0,0,114,20,0,0,0,114,19,0,0,0,250,8,60, - 109,111,100,117,108,101,62,114,134,0,0,0,1,0,0,0, - 115,113,0,0,0,240,3,1,1,1,217,0,51,221,0,24, - 221,0,40,221,0,37,221,0,40,221,0,34,221,0,45,221, - 0,50,221,0,50,221,0,46,221,0,50,221,0,56,227,0, - 11,219,0,10,219,0,12,242,6,2,1,61,242,10,12,1, - 55,243,30,28,1,24,243,62,42,1,24,247,98,1,46,1, - 47,241,0,46,1,47,244,98,1,60,1,28,144,37,215,18, - 34,209,18,34,244,0,60,1,28,244,126,1,39,1,39,144, - 22,245,0,39,1,39,114,20,0,0,0, + 171,0,0,0,0,0,0,0,124,3,100,3,60,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,124,3,100,4,60,0,0,0,124,2, + 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,3,100,5, + 60,0,0,0,100,6,124,3,100,7,60,0,0,0,124,3, + 124,1,106,4,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,95,8,0,0,0,0,0,0,0,0, + 116,18,0,0,0,0,0,0,0,0,124,1,95,6,0,0, + 0,0,0,0,0,0,121,2,41,8,122,28,77,97,107,101, + 32,116,104,101,32,109,111,100,117,108,101,32,108,111,97,100, + 32,108,97,122,105,108,121,46,114,14,0,0,0,78,114,86, + 0,0,0,114,84,0,0,0,114,83,0,0,0,70,114,85, + 0,0,0,41,10,218,9,116,104,114,101,97,100,105,110,103, + 114,92,0,0,0,114,36,0,0,0,218,10,95,95,108,111, + 97,100,101,114,95,95,114,86,0,0,0,218,4,99,111,112, + 121,114,84,0,0,0,218,5,82,76,111,99,107,114,89,0, + 0,0,114,81,0,0,0,41,4,114,61,0,0,0,114,40, + 0,0,0,114,125,0,0,0,114,89,0,0,0,115,4,0, + 0,0,32,32,32,32,114,19,0,0,0,114,93,0,0,0, + 122,22,76,97,122,121,76,111,97,100,101,114,46,101,120,101, + 99,95,109,111,100,117,108,101,253,0,0,0,115,128,0,0, + 0,128,0,243,8,0,9,25,216,33,37,167,27,161,27,136, + 6,143,15,137,15,212,8,30,216,28,32,159,75,153,75,136, + 6,212,8,25,240,10,0,24,26,136,12,216,35,41,167,63, + 161,63,215,35,55,209,35,55,211,35,57,136,12,144,90,209, + 8,32,216,36,42,215,36,52,209,36,52,136,12,144,91,209, + 8,33,216,31,40,159,127,153,127,211,31,48,136,12,144,86, + 209,8,28,216,37,42,136,12,144,92,209,8,34,216,39,51, + 136,6,143,15,137,15,212,8,36,220,27,38,136,6,213,8, + 24,114,20,0,0,0,78,41,11,114,74,0,0,0,114,75, + 0,0,0,114,76,0,0,0,114,77,0,0,0,218,12,115, + 116,97,116,105,99,109,101,116,104,111,100,114,119,0,0,0, + 218,11,99,108,97,115,115,109,101,116,104,111,100,114,120,0, + 0,0,114,62,0,0,0,114,123,0,0,0,114,93,0,0, + 0,114,79,0,0,0,114,20,0,0,0,114,19,0,0,0, + 114,109,0,0,0,114,109,0,0,0,231,0,0,0,115,62, + 0,0,0,132,0,225,4,85,224,5,17,241,2,2,5,64, + 1,243,3,0,6,18,240,2,2,5,64,1,240,8,0,6, + 17,241,2,3,5,68,1,243,3,0,6,17,240,2,3,5, + 68,1,242,10,2,5,29,242,8,1,5,47,243,6,17,5, + 39,114,20,0,0,0,114,109,0,0,0,114,58,0,0,0, + 41,26,114,77,0,0,0,218,4,95,97,98,99,114,3,0, + 0,0,218,10,95,98,111,111,116,115,116,114,97,112,114,4, + 0,0,0,114,5,0,0,0,114,6,0,0,0,114,7,0, + 0,0,218,19,95,98,111,111,116,115,116,114,97,112,95,101, + 120,116,101,114,110,97,108,114,8,0,0,0,114,9,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,12,0,0,0, + 114,13,0,0,0,114,16,0,0,0,114,34,0,0,0,114, + 95,0,0,0,114,17,0,0,0,114,30,0,0,0,114,42, + 0,0,0,114,54,0,0,0,114,56,0,0,0,114,96,0, + 0,0,114,81,0,0,0,114,109,0,0,0,114,79,0,0, + 0,114,20,0,0,0,114,19,0,0,0,218,8,60,109,111, + 100,117,108,101,62,114,134,0,0,0,1,0,0,0,115,113, + 0,0,0,240,3,1,1,1,217,0,51,221,0,24,221,0, + 40,221,0,37,221,0,40,221,0,34,221,0,45,221,0,50, + 221,0,50,221,0,46,221,0,50,221,0,56,227,0,11,219, + 0,10,219,0,12,242,6,2,1,61,242,10,12,1,55,243, + 30,28,1,24,243,62,42,1,24,247,98,1,46,1,47,241, + 0,46,1,47,244,98,1,60,1,28,144,37,215,18,34,209, + 18,34,244,0,60,1,28,244,126,1,39,1,39,144,22,245, + 0,39,1,39,114,20,0,0,0, }; diff --git a/contrib/tools/python3/Python/frozen_modules/io.h b/contrib/tools/python3/Python/frozen_modules/io.h index 113eb2c02e..3ffb8db86f 100644 --- a/contrib/tools/python3/Python/frozen_modules/io.h +++ b/contrib/tools/python3/Python/frozen_modules/io.h @@ -234,7 +234,7 @@ const unsigned char _Py_M__io[] = { 0,0,0,218,8,114,101,103,105,115,116,101,114,218,5,107, 108,97,115,115,114,45,0,0,0,218,11,73,109,112,111,114, 116,69,114,114,111,114,114,35,0,0,0,114,36,0,0,0, - 114,37,0,0,0,250,8,60,109,111,100,117,108,101,62,114, + 114,37,0,0,0,218,8,60,109,111,100,117,108,101,62,114, 53,0,0,0,1,0,0,0,115,47,1,0,0,240,3,1, 1,1,241,2,33,1,4,240,72,1,5,15,56,128,10,242, 14,5,11,80,1,128,7,243,16,0,1,11,219,0,10,247, diff --git a/contrib/tools/python3/Python/frozen_modules/ntpath.h b/contrib/tools/python3/Python/frozen_modules/ntpath.h index 3c3d45541e..eadc882495 100644 --- a/contrib/tools/python3/Python/frozen_modules/ntpath.h +++ b/contrib/tools/python3/Python/frozen_modules/ntpath.h @@ -52,8 +52,8 @@ const unsigned char _Py_M__ntpath[] = { 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,250,1,46,250, - 2,46,46,250,1,92,250,1,59,250,1,47,122,8,46,59, + 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, @@ -253,7 +253,7 @@ const unsigned char _Py_M__ntpath[] = { 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, - 250,1,58,114,8,0,0,0,233,255,255,255,255,114,12,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, @@ -704,7 +704,7 @@ const unsigned char _Py_M__ntpath[] = { 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,250,1,126,114, + 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, @@ -867,8 +867,8 @@ const unsigned char _Py_M__ntpath[] = { 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,250,1,36,250, - 1,37,250,1,39,250,1,123,250,1,125,114,86,0,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, @@ -1625,7 +1625,7 @@ const unsigned char _Py_M__ntpath[] = { 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,250,8,60,109,111,100,117,108,101,62,114,36,1, + 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, diff --git a/contrib/tools/python3/Python/frozen_modules/os.h b/contrib/tools/python3/Python/frozen_modules/os.h index ac1525262b..bc511c5f32 100644 --- a/contrib/tools/python3/Python/frozen_modules/os.h +++ b/contrib/tools/python3/Python/frozen_modules/os.h @@ -277,7 +277,7 @@ const unsigned char _Py_M__os[] = { 176,35,171,43,146,1,153,59,249,212,15,54,210,8,54,240, 3,1,5,55,250,115,30,0,0,0,130,20,23,0,151,22, 65,11,3,173,13,65,0,6,187,4,65,0,6,191,9,65, - 11,3,193,10,1,65,11,3,218,5,112,111,115,105,120,250, + 11,3,193,10,1,65,11,3,218,5,112,111,115,105,120,218, 1,10,41,1,218,1,42,41,1,218,5,95,101,120,105,116, 114,40,0,0,0,41,1,218,15,95,104,97,118,101,95,102, 117,110,99,116,105,111,110,115,218,2,110,116,122,2,13,10, @@ -1105,7 +1105,7 @@ const unsigned char _Py_M__os[] = { 1,169,2,70,78,169,1,114,166,0,0,0,41,4,218,2, 46,48,114,11,0,0,0,218,5,116,111,112,102,100,218,7, 116,111,112,112,97,116,104,115,4,0,0,0,32,32,128,128, - 114,25,0,0,0,250,9,60,103,101,110,101,120,112,114,62, + 114,25,0,0,0,218,9,60,103,101,110,101,120,112,114,62, 122,25,95,102,119,97,108,107,46,60,108,111,99,97,108,115, 62,46,60,103,101,110,101,120,112,114,62,50,2,0,0,115, 45,0,0,0,248,232,0,248,128,0,240,0,2,25,40,225, @@ -2638,7 +2638,7 @@ const unsigned char _Py_M__os[] = { 17,38,160,116,211,17,44,136,6,220,15,33,216,12,16,216, 12,18,216,12,14,215,12,36,209,12,36,243,7,4,16,10, 240,0,4,9,10,114,27,0,0,0,41,2,105,255,1,0, - 0,70,41,3,84,78,70,41,3,250,1,46,84,78,114,23, + 0,70,41,3,84,78,70,41,3,218,1,46,84,78,114,23, 0,0,0,41,2,114,112,1,0,0,114,182,0,0,0,41, 3,114,112,1,0,0,114,182,0,0,0,78,41,110,114,171, 1,0,0,114,172,1,0,0,114,132,0,0,0,114,57,0, @@ -2684,7 +2684,7 @@ const unsigned char _Py_M__os[] = { 162,1,0,0,114,134,0,0,0,114,41,1,0,0,218,3, 65,66,67,114,164,1,0,0,114,178,1,0,0,114,190,1, 0,0,114,28,1,0,0,114,27,0,0,0,114,25,0,0, - 0,250,8,60,109,111,100,117,108,101,62,114,208,1,0,0, + 0,218,8,60,109,111,100,117,108,101,62,114,208,1,0,0, 1,0,0,0,115,5,6,0,0,240,3,1,1,1,241,2, 21,1,4,243,48,0,1,11,219,0,10,219,0,17,229,0, 43,225,15,19,144,68,152,19,145,73,139,127,128,12,224,9, diff --git a/contrib/tools/python3/Python/frozen_modules/posixpath.h b/contrib/tools/python3/Python/frozen_modules/posixpath.h index 62ed84a7a6..5000e89507 100644 --- a/contrib/tools/python3/Python/frozen_modules/posixpath.h +++ b/contrib/tools/python3/Python/frozen_modules/posixpath.h @@ -53,8 +53,8 @@ const unsigned char _Py_M__posixpath[] = { 32,101,46,103,46,10,102,111,114,32,109,97,110,105,112,117, 108,97,116,105,111,110,32,111,102,32,116,104,101,32,112,97, 116,104,110,97,109,101,32,99,111,109,112,111,110,101,110,116, - 32,111,102,32,85,82,76,115,46,10,250,1,46,250,2,46, - 46,250,1,47,250,1,58,122,13,47,98,105,110,58,47,117, + 32,111,102,32,85,82,76,115,46,10,218,1,46,250,2,46, + 46,218,1,47,218,1,58,122,13,47,98,105,110,58,47,117, 115,114,47,98,105,110,78,122,9,47,100,101,118,47,110,117, 108,108,233,0,0,0,0,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, @@ -521,7 +521,7 @@ const unsigned char _Py_M__posixpath[] = { 114,117,99,116,105,111,110,115,46,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,10,32,32,32,32,100,111,32,110, - 111,116,104,105,110,103,46,243,1,0,0,0,126,250,1,126, + 111,116,104,105,110,103,46,243,1,0,0,0,126,218,1,126, 114,76,0,0,0,114,6,0,0,0,218,4,72,79,77,69, 78,218,7,118,120,119,111,114,107,115,114,49,0,0,0,114, 4,0,0,0,41,21,114,59,0,0,0,114,60,0,0,0, @@ -633,8 +633,8 @@ const unsigned char _Py_M__posixpath[] = { 36,114,6,0,0,0,78,115,17,0,0,0,92,36,40,92, 119,43,124,92,123,91,94,125,93,42,92,125,41,243,1,0, 0,0,123,243,1,0,0,0,125,218,8,101,110,118,105,114, - 111,110,98,250,1,36,122,17,92,36,40,92,119,43,124,92, - 123,91,94,125,93,42,92,125,41,250,1,123,250,1,125,114, + 111,110,98,218,1,36,122,17,92,36,40,92,119,43,124,92, + 123,91,94,125,93,42,92,125,41,218,1,123,218,1,125,114, 76,0,0,0,233,255,255,255,255,41,20,114,59,0,0,0, 114,60,0,0,0,114,50,0,0,0,114,51,0,0,0,218, 9,95,118,97,114,112,114,111,103,98,218,2,114,101,218,7, @@ -1012,7 +1012,7 @@ const unsigned char _Py_M__posixpath[] = { 0,150,1,151,1,1,0,140,14,4,0,121,0,173,3,119, 1,41,2,78,114,76,0,0,0,169,0,41,3,218,2,46, 48,114,73,0,0,0,114,37,0,0,0,115,3,0,0,0, - 32,32,128,114,54,0,0,0,250,9,60,103,101,110,101,120, + 32,32,128,114,54,0,0,0,218,9,60,103,101,110,101,120, 112,114,62,122,29,99,111,109,109,111,110,112,97,116,104,46, 60,108,111,99,97,108,115,62,46,60,103,101,110,101,120,112, 114,62,44,2,0,0,115,28,0,0,0,248,232,0,248,128, @@ -1080,7 +1080,7 @@ const unsigned char _Py_M__posixpath[] = { 114,31,0,0,0,114,43,0,0,0,114,177,0,0,0,114, 130,0,0,0,114,44,0,0,0,114,45,0,0,0,114,46, 0,0,0,114,197,0,0,0,114,56,0,0,0,114,54,0, - 0,0,250,8,60,109,111,100,117,108,101,62,114,213,0,0, + 0,0,218,8,60,109,111,100,117,108,101,62,114,213,0,0, 0,1,0,0,0,115,11,1,0,0,240,3,1,1,1,241, 2,10,1,4,240,30,0,10,13,128,6,216,9,13,128,6, 216,9,12,128,6,216,6,9,128,3,216,10,13,128,7,216, diff --git a/contrib/tools/python3/Python/frozen_modules/runpy.h b/contrib/tools/python3/Python/frozen_modules/runpy.h index 92de82d25e..aab279eec8 100644 --- a/contrib/tools/python3/Python/frozen_modules/runpy.h +++ b/contrib/tools/python3/Python/frozen_modules/runpy.h @@ -366,7 +366,7 @@ const unsigned char _Py_M__runpy[] = { 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,124,4,130,2,100,0, 125,4,126,4,119,1,119,0,120,3,89,0,119,1,41,22, - 78,250,1,46,122,35,82,101,108,97,116,105,118,101,32,109, + 78,218,1,46,122,35,82,101,108,97,116,105,118,101,32,109, 111,100,117,108,101,32,110,97,109,101,115,32,110,111,116,32, 115,117,112,112,111,114,116,101,100,218,8,95,95,112,97,116, 104,95,95,114,2,0,0,0,41,1,218,4,119,97,114,110, @@ -824,7 +824,7 @@ const unsigned char _Py_M__runpy[] = { 0,0,114,60,0,0,0,114,68,0,0,0,114,69,0,0, 0,115,11,0,0,0,32,32,32,32,32,32,32,32,32,32, 32,114,15,0,0,0,114,4,0,0,0,114,4,0,0,0, - 6,1,0,0,115,125,1,0,0,128,0,240,30,0,8,16, + 6,1,0,0,115,123,1,0,0,128,0,240,30,0,8,16, 208,7,23,216,19,31,136,8,216,15,23,215,15,34,209,15, 34,160,51,211,15,39,168,1,209,15,42,128,72,221,4,36, 217,15,27,152,73,211,15,38,128,72,220,16,18,151,11,145, @@ -838,58 +838,58 @@ const unsigned char _Py_M__runpy[] = { 43,220,17,31,160,9,213,17,42,216,30,41,215,30,48,209, 30,48,215,30,57,209,30,57,144,11,220,23,32,160,20,160, 123,176,76,216,36,44,168,104,184,8,243,3,1,24,66,1, - 223,66,70,193,36,195,38,247,9,4,13,73,1,247,0,4, - 13,73,1,241,0,4,13,73,1,240,12,3,13,21,220,16, - 19,151,8,145,8,151,15,145,15,160,9,213,16,42,248,220, - 19,29,242,0,1,13,21,217,16,20,240,3,1,13,21,250, - 247,15,0,18,43,208,17,42,250,208,17,42,247,3,0,18, - 39,215,17,38,209,17,38,250,240,12,3,13,21,220,16,19, - 151,8,145,8,151,15,145,15,160,9,213,16,42,248,220,19, - 29,242,0,1,13,21,217,16,20,240,3,1,13,21,251,240, - 5,3,13,21,220,16,19,151,8,145,8,151,15,145,15,160, - 9,213,16,42,248,220,19,29,242,0,1,13,21,217,16,20, - 240,3,1,13,21,253,115,138,0,0,0,194,13,25,69,58, - 0,194,38,12,68,62,3,194,50,52,68,40,5,195,38,9, - 68,62,3,195,47,9,69,58,0,195,57,31,68,25,2,196, - 25,9,68,37,5,196,36,1,68,37,5,196,40,5,68,49, - 9,196,45,7,68,62,3,196,53,9,69,58,0,196,62,5, - 69,7,7,197,3,7,69,58,0,197,11,31,69,43,0,197, - 43,9,69,55,3,197,54,1,69,55,3,197,58,1,70,43, - 3,197,60,31,70,28,4,198,27,1,70,43,3,198,28,9, - 70,40,7,198,37,2,70,43,3,198,39,1,70,40,7,198, - 40,3,70,43,3,114,76,0,0,0,233,2,0,0,0,122, - 33,78,111,32,109,111,100,117,108,101,32,115,112,101,99,105, - 102,105,101,100,32,102,111,114,32,101,120,101,99,117,116,105, - 111,110,41,1,218,4,102,105,108,101,41,5,78,78,78,78, - 78,41,1,84,41,3,78,78,70,41,2,78,78,41,29,114, - 32,0,0,0,114,20,0,0,0,218,19,105,109,112,111,114, - 116,108,105,98,46,109,97,99,104,105,110,101,114,121,114,87, - 0,0,0,218,14,105,109,112,111,114,116,108,105,98,46,117, - 116,105,108,114,129,0,0,0,114,127,0,0,0,218,7,95, - 95,97,108,108,95,95,114,94,0,0,0,114,10,0,0,0, - 114,38,0,0,0,114,6,0,0,0,114,35,0,0,0,114, - 64,0,0,0,114,70,0,0,0,114,80,0,0,0,114,96, - 0,0,0,218,9,69,120,99,101,112,116,105,111,110,114,107, - 0,0,0,114,115,0,0,0,114,3,0,0,0,114,109,0, - 0,0,114,135,0,0,0,114,4,0,0,0,114,29,0,0, - 0,218,3,108,101,110,114,43,0,0,0,218,5,112,114,105, - 110,116,218,6,115,116,100,101,114,114,114,33,0,0,0,114, - 17,0,0,0,114,15,0,0,0,250,8,60,109,111,100,117, - 108,101,62,114,153,0,0,0,1,0,0,0,115,246,0,0, - 0,240,3,1,1,1,241,2,7,1,4,243,24,0,1,11, - 219,0,26,219,0,21,219,0,9,219,0,9,240,6,0,5, - 17,144,42,240,3,2,11,2,128,7,241,10,0,14,18,144, - 35,139,89,128,10,244,4,21,1,32,144,38,244,0,21,1, - 32,244,46,13,1,40,144,86,244,0,13,1,40,240,32,0, - 47,51,216,38,42,216,41,45,243,5,24,1,23,240,52,0, - 41,45,216,44,48,216,47,51,243,5,11,1,30,240,28,0, - 41,52,243,0,59,1,32,244,122,1,1,1,77,1,136,89, - 244,0,1,1,77,1,243,14,26,1,43,240,56,0,39,43, - 216,40,45,243,3,28,1,69,1,240,60,0,36,47,243,0, - 16,1,44,242,38,10,1,16,243,24,48,1,21,240,102,1, - 0,4,12,136,122,210,3,25,225,7,10,136,51,143,56,137, - 56,131,125,144,113,210,7,24,217,8,13,208,14,49,184,3, - 191,10,185,10,214,8,67,224,12,15,143,72,137,72,144,81, - 136,75,217,8,27,152,67,159,72,153,72,160,81,153,75,213, - 8,40,240,13,0,4,26,114,17,0,0,0, + 223,66,70,193,36,195,38,247,7,0,18,43,208,17,42,247, + 3,0,18,39,208,17,38,240,12,3,13,21,220,16,19,151, + 8,145,8,151,15,145,15,160,9,213,16,42,248,220,19,29, + 242,0,1,13,21,217,16,20,240,3,1,13,21,250,247,15, + 0,18,43,208,17,42,250,208,17,42,247,3,0,18,39,215, + 17,38,209,17,38,250,240,12,3,13,21,220,16,19,151,8, + 145,8,151,15,145,15,160,9,213,16,42,248,220,19,29,242, + 0,1,13,21,217,16,20,240,3,1,13,21,251,240,5,3, + 13,21,220,16,19,151,8,145,8,151,15,145,15,160,9,213, + 16,42,248,220,19,29,242,0,1,13,21,217,16,20,240,3, + 1,13,21,253,115,138,0,0,0,194,13,25,69,58,0,194, + 38,12,68,62,3,194,50,52,68,40,5,195,38,9,68,62, + 3,195,47,9,69,58,0,195,57,31,68,25,2,196,25,9, + 68,37,5,196,36,1,68,37,5,196,40,5,68,49,9,196, + 45,7,68,62,3,196,53,9,69,58,0,196,62,5,69,7, + 7,197,3,7,69,58,0,197,11,31,69,43,0,197,43,9, + 69,55,3,197,54,1,69,55,3,197,58,1,70,43,3,197, + 60,31,70,28,4,198,27,1,70,43,3,198,28,9,70,40, + 7,198,37,2,70,43,3,198,39,1,70,40,7,198,40,3, + 70,43,3,114,76,0,0,0,233,2,0,0,0,122,33,78, + 111,32,109,111,100,117,108,101,32,115,112,101,99,105,102,105, + 101,100,32,102,111,114,32,101,120,101,99,117,116,105,111,110, + 41,1,218,4,102,105,108,101,41,5,78,78,78,78,78,41, + 1,84,41,3,78,78,70,41,2,78,78,41,29,114,32,0, + 0,0,114,20,0,0,0,218,19,105,109,112,111,114,116,108, + 105,98,46,109,97,99,104,105,110,101,114,121,114,87,0,0, + 0,218,14,105,109,112,111,114,116,108,105,98,46,117,116,105, + 108,114,129,0,0,0,114,127,0,0,0,218,7,95,95,97, + 108,108,95,95,114,94,0,0,0,114,10,0,0,0,114,38, + 0,0,0,114,6,0,0,0,114,35,0,0,0,114,64,0, + 0,0,114,70,0,0,0,114,80,0,0,0,114,96,0,0, + 0,218,9,69,120,99,101,112,116,105,111,110,114,107,0,0, + 0,114,115,0,0,0,114,3,0,0,0,114,109,0,0,0, + 114,135,0,0,0,114,4,0,0,0,114,29,0,0,0,218, + 3,108,101,110,114,43,0,0,0,218,5,112,114,105,110,116, + 218,6,115,116,100,101,114,114,114,33,0,0,0,114,17,0, + 0,0,114,15,0,0,0,218,8,60,109,111,100,117,108,101, + 62,114,153,0,0,0,1,0,0,0,115,246,0,0,0,240, + 3,1,1,1,241,2,7,1,4,243,24,0,1,11,219,0, + 26,219,0,21,219,0,9,219,0,9,240,6,0,5,17,144, + 42,240,3,2,11,2,128,7,241,10,0,14,18,144,35,139, + 89,128,10,244,4,21,1,32,144,38,244,0,21,1,32,244, + 46,13,1,40,144,86,244,0,13,1,40,240,32,0,47,51, + 216,38,42,216,41,45,243,5,24,1,23,240,52,0,41,45, + 216,44,48,216,47,51,243,5,11,1,30,240,28,0,41,52, + 243,0,59,1,32,244,122,1,1,1,77,1,136,89,244,0, + 1,1,77,1,243,14,26,1,43,240,56,0,39,43,216,40, + 45,243,3,28,1,69,1,240,60,0,36,47,243,0,16,1, + 44,242,38,10,1,16,243,24,48,1,21,240,102,1,0,4, + 12,136,122,210,3,25,225,7,10,136,51,143,56,137,56,131, + 125,144,113,210,7,24,217,8,13,208,14,49,184,3,191,10, + 185,10,214,8,67,224,12,15,143,72,137,72,144,81,136,75, + 217,8,27,152,67,159,72,153,72,160,81,153,75,213,8,40, + 240,13,0,4,26,114,17,0,0,0, }; diff --git a/contrib/tools/python3/Python/frozen_modules/site.h b/contrib/tools/python3/Python/frozen_modules/site.h index d1e58e0fd8..7de3b27654 100644 --- a/contrib/tools/python3/Python/frozen_modules/site.h +++ b/contrib/tools/python3/Python/frozen_modules/site.h @@ -521,7 +521,7 @@ const unsigned char _Py_M__site[] = { 97,110,110,111,116,32,114,101,97,100,32,122,35,32,97,115, 32,85,84,70,45,56,46,32,85,115,105,110,103,32,102,97, 108,108,98,97,99,107,32,101,110,99,111,100,105,110,103,32, - 233,1,0,0,0,250,1,35,218,0,41,2,122,7,105,109, + 233,1,0,0,0,218,1,35,218,0,41,2,122,7,105,109, 112,111,114,116,32,122,7,105,109,112,111,114,116,9,122,22, 69,114,114,111,114,32,112,114,111,99,101,115,115,105,110,103, 32,108,105,110,101,32,114,52,0,0,0,122,4,32,111,102, @@ -640,7 +640,7 @@ const unsigned char _Py_M__site[] = { 97,110,100,108,101,32,46,112,116,104,32,102,105,108,101,115, 32,105,110,10,32,32,32,32,39,115,105,116,101,100,105,114, 39,122,18,65,100,100,105,110,103,32,100,105,114,101,99,116, - 111,114,121,58,32,78,84,70,122,4,46,112,116,104,250,1, + 111,114,121,58,32,78,84,70,122,4,46,112,116,104,218,1, 46,41,14,114,13,0,0,0,114,56,0,0,0,114,25,0, 0,0,114,6,0,0,0,114,18,0,0,0,114,44,0,0, 0,114,45,0,0,0,114,17,0,0,0,218,7,108,105,115, @@ -776,7 +776,7 @@ const unsigned char _Py_M__site[] = { 1,0,0,115,36,0,0,0,128,0,220,15,17,143,119,137, 119,215,15,33,209,15,33,164,34,167,39,161,39,167,44,161, 44,176,4,208,34,53,211,15,54,208,8,54,114,14,0,0, - 0,218,2,110,116,218,7,65,80,80,68,65,84,65,250,1, + 0,218,2,110,116,218,7,65,80,80,68,65,84,65,218,1, 126,218,6,80,121,116,104,111,110,218,6,100,97,114,119,105, 110,218,7,76,105,98,114,97,114,121,122,5,37,100,46,37, 100,233,2,0,0,0,122,6,46,108,111,99,97,108,41,8, @@ -976,7 +976,7 @@ const unsigned char _Py_M__site[] = { 105,114,111,110,109,101,110,116,44,32,97,110,100,32,119,105, 108,108,32,114,101,116,117,114,110,32,97,32,108,105,115,116, 32,111,102,32,102,117,108,108,32,112,97,116,104,115,46,10, - 32,32,32,32,78,250,1,47,218,3,108,105,98,122,11,112, + 32,32,32,32,78,218,1,47,218,3,108,105,98,122,11,112, 121,116,104,111,110,37,100,46,37,100,114,128,0,0,0,122, 13,115,105,116,101,45,112,97,99,107,97,103,101,115,218,3, 76,105,98,41,11,114,29,0,0,0,218,8,80,82,69,70, @@ -1053,7 +1053,7 @@ const unsigned char _Py_M__site[] = { 32,84,104,101,32,114,101,112,114,32,111,102,32,101,97,99, 104,32,111,98,106,101,99,116,32,99,111,110,116,97,105,110, 115,32,97,32,104,105,110,116,32,97,116,32,104,111,119,32, - 105,116,32,119,111,114,107,115,46,10,10,32,32,32,32,250, + 105,116,32,119,111,114,107,115,46,10,10,32,32,32,32,218, 1,92,122,18,67,116,114,108,45,90,32,112,108,117,115,32, 82,101,116,117,114,110,122,17,67,116,114,108,45,68,32,40, 105,46,101,46,32,69,79,70,41,218,4,113,117,105,116,218, @@ -1373,7 +1373,7 @@ const unsigned char _Py_M__site[] = { 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,250,9,60, + 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, @@ -1381,7 +1381,7 @@ const unsigned char _Py_M__site[] = { 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,250,1,61,122,28,105, + 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, @@ -1467,7 +1467,7 @@ const unsigned char _Py_M__site[] = { 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,250,1,10,41, + 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, @@ -1682,7 +1682,7 @@ const unsigned char _Py_M__site[] = { 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,250,1,44,250,1,93,99,1,0,0, + 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, @@ -1698,7 +1698,7 @@ const unsigned char _Py_M__site[] = { 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,250,1,41,122,11,85,83,69,82,95,83,73,84,69, + 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, @@ -1752,7 +1752,7 @@ const unsigned char _Py_M__site[] = { 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,250,8,60,109,111,100, + 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, diff --git a/contrib/tools/python3/Python/frozen_modules/stat.h b/contrib/tools/python3/Python/frozen_modules/stat.h index cecc1a8702..60d6860a6c 100644 --- a/contrib/tools/python3/Python/frozen_modules/stat.h +++ b/contrib/tools/python3/Python/frozen_modules/stat.h @@ -180,7 +180,7 @@ const unsigned char _Py_M__stat[] = { 0,0,0,233,64,0,0,0,105,192,1,0,0,233,56,0, 0,0,233,32,0,0,0,233,16,0,0,0,105,0,0,1, 0,105,0,0,2,0,105,0,0,4,0,105,0,0,16,0, - 105,0,0,32,0,218,1,108,218,1,115,250,1,45,218,1, + 105,0,0,32,0,218,1,108,218,1,115,218,1,45,218,1, 98,218,1,100,218,1,99,218,1,112,218,1,114,218,1,119, 218,1,83,218,1,120,218,1,116,218,1,84,99,1,0,0, 0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,0, @@ -277,7 +277,7 @@ const unsigned char _Py_M__stat[] = { 84,84,82,73,66,85,84,69,95,86,73,82,84,85,65,76, 218,5,95,115,116,97,116,218,11,73,109,112,111,114,116,69, 114,114,111,114,114,13,0,0,0,114,18,0,0,0,114,16, - 0,0,0,250,8,60,109,111,100,117,108,101,62,114,144,0, + 0,0,0,218,8,60,109,111,100,117,108,101,62,114,144,0, 0,0,1,0,0,0,115,197,2,0,0,240,3,1,1,1, 241,2,3,1,4,240,14,0,12,13,128,7,216,11,12,128, 6,216,11,12,128,6,216,11,12,128,8,216,11,12,128,6, diff --git a/contrib/tools/python3/Python/frozen_modules/zipimport.h b/contrib/tools/python3/Python/frozen_modules/zipimport.h index 0ec5b74695..af79f36fcf 100644 --- a/contrib/tools/python3/Python/frozen_modules/zipimport.h +++ b/contrib/tools/python3/Python/frozen_modules/zipimport.h @@ -574,956 +574,938 @@ const unsigned char _Py_M__zipimport[] = { 0,0,0,194,4,66,4,68,53,0,196,9,19,69,12,0, 196,53,20,69,9,3,197,12,25,69,37,3,99,2,0,0, 0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,0, - 0,243,102,0,0,0,151,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,115,1,121,1,9,0, - 100,2,100,3,108,2,109,3,125,2,1,0,2,0,124,2, - 124,0,124,1,171,2,0,0,0,0,0,0,83,0,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,4,122,204, - 82,101,116,117,114,110,32,116,104,101,32,82,101,115,111,117, - 114,99,101,82,101,97,100,101,114,32,102,111,114,32,97,32, - 112,97,99,107,97,103,101,32,105,110,32,97,32,122,105,112, - 32,102,105,108,101,46,10,10,32,32,32,32,32,32,32,32, - 73,102,32,39,102,117,108,108,110,97,109,101,39,32,105,115, - 32,97,32,112,97,99,107,97,103,101,32,119,105,116,104,105, - 110,32,116,104,101,32,122,105,112,32,102,105,108,101,44,32, - 114,101,116,117,114,110,32,116,104,101,10,32,32,32,32,32, - 32,32,32,39,82,101,115,111,117,114,99,101,82,101,97,100, - 101,114,39,32,111,98,106,101,99,116,32,102,111,114,32,116, - 104,101,32,112,97,99,107,97,103,101,46,32,32,79,116,104, - 101,114,119,105,115,101,32,114,101,116,117,114,110,32,78,111, - 110,101,46,10,32,32,32,32,32,32,32,32,78,114,1,0, - 0,0,41,1,218,9,90,105,112,82,101,97,100,101,114,41, - 4,114,48,0,0,0,114,4,0,0,0,218,17,105,109,112, - 111,114,116,108,105,98,46,114,101,97,100,101,114,115,114,113, - 0,0,0,41,3,114,41,0,0,0,114,58,0,0,0,114, - 113,0,0,0,115,3,0,0,0,32,32,32,114,13,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,31,122,105,112,105,109,112,111,114, - 116,101,114,46,103,101,116,95,114,101,115,111,117,114,99,101, - 95,114,101,97,100,101,114,0,1,0,0,115,65,0,0,0, - 128,0,240,12,4,9,24,216,19,23,151,63,145,63,160,56, - 212,19,44,216,23,27,240,3,0,20,45,245,8,0,9,48, - 217,15,24,152,20,152,120,211,15,40,208,8,40,248,244,7, - 0,16,30,242,0,1,9,24,217,19,23,240,3,1,9,24, - 250,115,12,0,0,0,130,17,36,0,164,9,48,3,175,1, - 48,3,99,1,0,0,0,0,0,0,0,0,0,0,0,5, - 0,0,0,3,0,0,0,243,224,0,0,0,151,0,9,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,124,0,95,2,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,116,6,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,60,0,0,0,121,1, - 35,0,116,8,0,0,0,0,0,0,0,0,36,0,114,42, - 1,0,116,6,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, - 124,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,100,1,171,2,0,0,0,0,0,0, - 1,0,105,0,124,0,95,2,0,0,0,0,0,0,0,0, - 89,0,121,1,119,0,120,3,89,0,119,1,41,2,122,41, - 82,101,108,111,97,100,32,116,104,101,32,102,105,108,101,32, - 100,97,116,97,32,111,102,32,116,104,101,32,97,114,99,104, - 105,118,101,32,112,97,116,104,46,78,41,6,114,36,0,0, - 0,114,38,0,0,0,114,37,0,0,0,114,34,0,0,0, - 114,4,0,0,0,218,3,112,111,112,169,1,114,41,0,0, - 0,115,1,0,0,0,32,114,13,0,0,0,218,17,105,110, - 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,122, - 29,122,105,112,105,109,112,111,114,116,101,114,46,105,110,118, - 97,108,105,100,97,116,101,95,99,97,99,104,101,115,15,1, - 0,0,115,84,0,0,0,128,0,240,4,5,9,29,220,26, - 41,168,36,175,44,169,44,211,26,55,136,68,140,75,216,49, - 53,183,27,177,27,212,12,32,160,20,167,28,161,28,210,12, - 46,248,220,15,29,242,0,2,9,29,220,12,32,215,12,36, - 209,12,36,160,84,167,92,161,92,176,52,212,12,56,216,26, - 28,136,68,142,75,240,5,2,9,29,250,115,15,0,0,0, - 130,55,58,0,186,48,65,45,3,193,44,1,65,45,3,99, + 0,243,32,0,0,0,151,0,100,1,100,2,108,0,109,1, + 125,2,1,0,2,0,124,2,124,0,124,1,171,2,0,0, + 0,0,0,0,83,0,41,3,122,53,82,101,116,117,114,110, + 32,116,104,101,32,82,101,115,111,117,114,99,101,82,101,97, + 100,101,114,32,102,111,114,32,97,32,109,111,100,117,108,101, + 32,105,110,32,97,32,122,105,112,32,102,105,108,101,46,114, + 1,0,0,0,41,1,218,9,90,105,112,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,113,0,0,0,41,3,114,41,0, + 0,0,114,58,0,0,0,114,113,0,0,0,115,3,0,0, + 0,32,32,32,114,13,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,31, + 122,105,112,105,109,112,111,114,116,101,114,46,103,101,116,95, + 114,101,115,111,117,114,99,101,95,114,101,97,100,101,114,0, + 1,0,0,115,18,0,0,0,128,0,229,8,47,225,15,24, + 152,20,152,120,211,15,40,208,8,40,114,12,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,70,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,0,116,2,0,0,0,0,0,0,0,0,155, + 3,0,0,0,243,224,0,0,0,151,0,9,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,124,0,95,2,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,155,0,100,2,157,5,83,0,41, - 3,78,122,21,60,122,105,112,105,109,112,111,114,116,101,114, - 32,111,98,106,101,99,116,32,34,122,2,34,62,41,3,114, - 38,0,0,0,114,26,0,0,0,114,40,0,0,0,114,118, - 0,0,0,115,1,0,0,0,32,114,13,0,0,0,218,8, - 95,95,114,101,112,114,95,95,122,20,122,105,112,105,109,112, - 111,114,116,101,114,46,95,95,114,101,112,114,95,95,25,1, - 0,0,115,33,0,0,0,128,0,216,17,38,160,116,167,124, - 161,124,160,110,180,88,176,74,184,116,191,123,185,123,184,109, - 200,50,208,15,78,208,8,78,114,12,0,0,0,169,1,78, - 41,15,114,8,0,0,0,114,9,0,0,0,114,10,0,0, - 0,218,7,95,95,100,111,99,95,95,114,46,0,0,0,114, - 63,0,0,0,114,70,0,0,0,114,79,0,0,0,114,81, - 0,0,0,114,90,0,0,0,114,48,0,0,0,114,111,0, - 0,0,114,115,0,0,0,114,119,0,0,0,114,121,0,0, - 0,114,11,0,0,0,114,12,0,0,0,114,13,0,0,0, - 114,5,0,0,0,114,5,0,0,0,46,0,0,0,115,65, - 0,0,0,132,0,241,2,12,5,8,242,34,37,5,36,243, - 80,1,25,5,28,242,54,7,5,20,242,20,17,5,50,242, - 42,9,5,23,242,24,22,5,59,242,52,9,5,18,242,26, - 40,5,19,242,86,1,12,5,41,242,30,7,5,29,243,20, - 1,5,79,1,114,12,0,0,0,122,12,95,95,105,110,105, - 116,95,95,46,112,121,99,84,114,85,0,0,0,70,41,3, - 122,4,46,112,121,99,84,70,41,3,114,86,0,0,0,70, - 70,99,2,0,0,0,0,0,0,0,0,0,0,0,4,0, - 0,0,3,0,0,0,243,68,0,0,0,151,0,124,0,106, + 0,0,0,0,0,0,0,116,6,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,60,0,0,0,121,1,35,0,116, + 8,0,0,0,0,0,0,0,0,36,0,114,42,1,0,116, + 6,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,124,0,106, + 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,100,1,171,2,0,0,0,0,0,0,1,0,105, + 0,124,0,95,2,0,0,0,0,0,0,0,0,89,0,121, + 1,119,0,120,3,89,0,119,1,41,2,122,41,82,101,108, + 111,97,100,32,116,104,101,32,102,105,108,101,32,100,97,116, + 97,32,111,102,32,116,104,101,32,97,114,99,104,105,118,101, + 32,112,97,116,104,46,78,41,6,114,36,0,0,0,114,38, + 0,0,0,114,37,0,0,0,114,34,0,0,0,114,4,0, + 0,0,218,3,112,111,112,169,1,114,41,0,0,0,115,1, + 0,0,0,32,114,13,0,0,0,218,17,105,110,118,97,108, + 105,100,97,116,101,95,99,97,99,104,101,115,122,29,122,105, + 112,105,109,112,111,114,116,101,114,46,105,110,118,97,108,105, + 100,97,116,101,95,99,97,99,104,101,115,7,1,0,0,115, + 84,0,0,0,128,0,240,4,5,9,29,220,26,41,168,36, + 175,44,169,44,211,26,55,136,68,140,75,216,49,53,183,27, + 177,27,212,12,32,160,20,167,28,161,28,210,12,46,248,220, + 15,29,242,0,2,9,29,220,12,32,215,12,36,209,12,36, + 160,84,167,92,161,92,176,52,212,12,56,216,26,28,136,68, + 142,75,240,5,2,9,29,250,115,15,0,0,0,130,55,58, + 0,186,48,65,45,3,193,44,1,65,45,3,99,1,0,0, + 0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,0, + 0,243,70,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,0,116,2,0,0,0,0,0,0,0,0,155,0,124,0, + 106,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,155,0,100,2,157,5,83,0,41,3,78,122, + 21,60,122,105,112,105,109,112,111,114,116,101,114,32,111,98, + 106,101,99,116,32,34,122,2,34,62,41,3,114,38,0,0, + 0,114,26,0,0,0,114,40,0,0,0,114,118,0,0,0, + 115,1,0,0,0,32,114,13,0,0,0,218,8,95,95,114, + 101,112,114,95,95,122,20,122,105,112,105,109,112,111,114,116, + 101,114,46,95,95,114,101,112,114,95,95,17,1,0,0,115, + 33,0,0,0,128,0,216,17,38,160,116,167,124,161,124,160, + 110,180,88,176,74,184,116,191,123,185,123,184,109,200,50,208, + 15,78,208,8,78,114,12,0,0,0,169,1,78,41,15,114, + 8,0,0,0,114,9,0,0,0,114,10,0,0,0,218,7, + 95,95,100,111,99,95,95,114,46,0,0,0,114,63,0,0, + 0,114,70,0,0,0,114,79,0,0,0,114,81,0,0,0, + 114,90,0,0,0,114,48,0,0,0,114,111,0,0,0,114, + 115,0,0,0,114,119,0,0,0,114,121,0,0,0,114,11, + 0,0,0,114,12,0,0,0,114,13,0,0,0,114,5,0, + 0,0,114,5,0,0,0,46,0,0,0,115,65,0,0,0, + 132,0,241,2,12,5,8,242,34,37,5,36,243,80,1,25, + 5,28,242,54,7,5,20,242,20,17,5,50,242,42,9,5, + 23,242,24,22,5,59,242,52,9,5,18,242,26,40,5,19, + 242,86,1,4,5,41,242,14,7,5,29,243,20,1,5,79, + 1,114,12,0,0,0,122,12,95,95,105,110,105,116,95,95, + 46,112,121,99,84,114,85,0,0,0,70,41,3,122,4,46, + 112,121,99,84,70,41,3,114,86,0,0,0,70,70,99,2, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3, + 0,0,0,243,68,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, - 0,0,0,124,1,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,100,2,25,0,0,0,122,0,0,0,83,0,41, - 3,78,250,1,46,233,2,0,0,0,41,2,114,40,0,0, - 0,218,10,114,112,97,114,116,105,116,105,111,110,41,2,114, - 41,0,0,0,114,58,0,0,0,115,2,0,0,0,32,32, - 114,13,0,0,0,114,54,0,0,0,114,54,0,0,0,43, - 1,0,0,115,33,0,0,0,128,0,216,11,15,143,59,137, - 59,152,24,215,25,44,209,25,44,168,83,211,25,49,176,33, - 209,25,52,209,11,52,208,4,52,114,12,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,48,0,0,0,151,0,124,1,116,0,0,0, - 0,0,0,0,0,0,122,0,0,0,125,2,124,2,124,0, + 124,1,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, + 100,2,25,0,0,0,122,0,0,0,83,0,41,3,78,218, + 1,46,233,2,0,0,0,41,2,114,40,0,0,0,218,10, + 114,112,97,114,116,105,116,105,111,110,41,2,114,41,0,0, + 0,114,58,0,0,0,115,2,0,0,0,32,32,114,13,0, + 0,0,114,54,0,0,0,114,54,0,0,0,35,1,0,0, + 115,33,0,0,0,128,0,216,11,15,143,59,137,59,152,24, + 215,25,44,209,25,44,168,83,211,25,49,176,33,209,25,52, + 209,11,52,208,4,52,114,12,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,48,0,0,0,151,0,124,1,116,0,0,0,0,0,0, + 0,0,0,122,0,0,0,125,2,124,2,124,0,106,2,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,118,0,83,0,114,122,0,0,0,41,2,114,26,0,0, + 0,114,37,0,0,0,41,3,114,41,0,0,0,114,18,0, + 0,0,218,7,100,105,114,112,97,116,104,115,3,0,0,0, + 32,32,32,114,13,0,0,0,114,55,0,0,0,114,55,0, + 0,0,39,1,0,0,115,28,0,0,0,128,0,240,8,0, + 15,19,148,88,137,111,128,71,224,11,18,144,100,151,107,145, + 107,208,11,33,208,4,33,114,12,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,104,0,0,0,151,0,116,1,0,0,0,0,0,0, + 0,0,124,0,124,1,171,2,0,0,0,0,0,0,125,2, + 116,2,0,0,0,0,0,0,0,0,68,0,93,29,0,0, + 92,3,0,0,125,3,125,4,125,5,124,2,124,3,122,0, + 0,0,125,6,124,6,124,0,106,4,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,118,0,115,1, + 140,27,124,5,99,2,1,0,83,0,4,0,121,0,114,122, + 0,0,0,41,3,114,54,0,0,0,218,16,95,122,105,112, + 95,115,101,97,114,99,104,111,114,100,101,114,114,37,0,0, + 0,41,7,114,41,0,0,0,114,58,0,0,0,114,18,0, + 0,0,218,6,115,117,102,102,105,120,218,10,105,115,98,121, + 116,101,99,111,100,101,114,69,0,0,0,114,89,0,0,0, + 115,7,0,0,0,32,32,32,32,32,32,32,114,13,0,0, + 0,114,51,0,0,0,114,51,0,0,0,48,1,0,0,115, + 63,0,0,0,128,0,220,11,27,152,68,160,40,211,11,43, + 128,68,223,41,57,209,8,37,136,6,144,10,152,73,216,19, + 23,152,38,145,61,136,8,216,11,19,144,116,151,123,145,123, + 210,11,34,216,19,28,210,12,28,240,7,0,42,58,240,8, + 0,12,16,114,12,0,0,0,99,1,0,0,0,0,0,0, + 0,0,0,0,0,9,0,0,0,3,0,0,0,243,16,10, + 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,118,0,83,0,114,122,0,0,0,41,2,114, - 26,0,0,0,114,37,0,0,0,41,3,114,41,0,0,0, - 114,18,0,0,0,218,7,100,105,114,112,97,116,104,115,3, - 0,0,0,32,32,32,114,13,0,0,0,114,55,0,0,0, - 114,55,0,0,0,47,1,0,0,115,28,0,0,0,128,0, - 240,8,0,15,19,148,88,137,111,128,71,224,11,18,144,100, - 151,107,145,107,208,11,33,208,4,33,114,12,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,104,0,0,0,151,0,116,1,0,0,0, - 0,0,0,0,0,124,0,124,1,171,2,0,0,0,0,0, - 0,125,2,116,2,0,0,0,0,0,0,0,0,68,0,93, - 29,0,0,92,3,0,0,125,3,125,4,125,5,124,2,124, - 3,122,0,0,0,125,6,124,6,124,0,106,4,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118, - 0,115,1,140,27,124,5,99,2,1,0,83,0,4,0,121, - 0,114,122,0,0,0,41,3,114,54,0,0,0,218,16,95, - 122,105,112,95,115,101,97,114,99,104,111,114,100,101,114,114, - 37,0,0,0,41,7,114,41,0,0,0,114,58,0,0,0, - 114,18,0,0,0,218,6,115,117,102,102,105,120,218,10,105, - 115,98,121,116,101,99,111,100,101,114,69,0,0,0,114,89, - 0,0,0,115,7,0,0,0,32,32,32,32,32,32,32,114, - 13,0,0,0,114,51,0,0,0,114,51,0,0,0,56,1, - 0,0,115,63,0,0,0,128,0,220,11,27,152,68,160,40, - 211,11,43,128,68,223,41,57,209,8,37,136,6,144,10,152, - 73,216,19,23,152,38,145,61,136,8,216,11,19,144,116,151, - 123,145,123,210,11,34,216,19,28,210,12,28,240,7,0,42, - 58,240,8,0,12,16,114,12,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,9,0,0,0,3,0,0,0, - 243,16,10,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,124,1,53,0,1,0,124,1,106,9,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,2,9,0,9,0,124,1,106, - 11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,116,12,0,0,0,0,0,0,0,0,11,0,100, - 3,171,2,0,0,0,0,0,0,1,0,124,1,106,9,0, + 0,0,0,0,124,0,171,1,0,0,0,0,0,0,125,1, + 124,1,53,0,1,0,124,1,106,9,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,2,9,0,9,0,124,1,106,11,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,125,3,124,1,106,15,0, + 116,12,0,0,0,0,0,0,0,0,11,0,100,3,171,2, + 0,0,0,0,0,0,1,0,124,1,106,9,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,3,124,1,106,15,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,12, + 0,0,0,0,0,0,0,0,171,1,0,0,0,0,0,0, + 125,4,116,17,0,0,0,0,0,0,0,0,124,4,171,1, + 0,0,0,0,0,0,116,12,0,0,0,0,0,0,0,0, + 107,55,0,0,114,16,116,7,0,0,0,0,0,0,0,0, + 100,4,124,0,155,2,157,2,124,0,172,2,171,2,0,0, + 0,0,0,0,130,1,124,4,100,0,100,5,26,0,116,18, + 0,0,0,0,0,0,0,0,107,55,0,0,114,200,9,0, + 124,1,106,11,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,100,6,100,3,171,2,0,0,0,0, + 0,0,1,0,124,1,106,9,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,21,0,0,0,0,0,0,0,0,124,5, + 116,22,0,0,0,0,0,0,0,0,122,10,0,0,116,12, + 0,0,0,0,0,0,0,0,122,10,0,0,100,6,171,2, + 0,0,0,0,0,0,125,6,9,0,124,1,106,11,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,116,12,0,0,0,0,0,0,0,0,171,1,0,0,0, - 0,0,0,125,4,116,17,0,0,0,0,0,0,0,0,124, - 4,171,1,0,0,0,0,0,0,116,12,0,0,0,0,0, - 0,0,0,107,55,0,0,114,16,116,7,0,0,0,0,0, - 0,0,0,100,4,124,0,155,2,157,2,124,0,172,2,171, - 2,0,0,0,0,0,0,130,1,124,4,100,0,100,5,26, - 0,116,18,0,0,0,0,0,0,0,0,107,55,0,0,114, - 200,9,0,124,1,106,11,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,100,6,100,3,171,2,0, - 0,0,0,0,0,1,0,124,1,106,9,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,21,0,0,0,0,0,0,0, - 0,124,5,116,22,0,0,0,0,0,0,0,0,122,10,0, - 0,116,12,0,0,0,0,0,0,0,0,122,10,0,0,100, - 6,171,2,0,0,0,0,0,0,125,6,9,0,124,1,106, - 11,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,1,0,124, - 1,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,125,7,124, - 7,106,25,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,8,124,8,100,6,107,2,0, - 0,114,16,116,7,0,0,0,0,0,0,0,0,100,7,124, - 0,155,2,157,2,124,0,172,2,171,2,0,0,0,0,0, - 0,130,1,124,7,124,8,124,8,116,12,0,0,0,0,0, - 0,0,0,122,0,0,0,26,0,125,4,116,17,0,0,0, - 0,0,0,0,0,124,4,171,1,0,0,0,0,0,0,116, - 12,0,0,0,0,0,0,0,0,107,55,0,0,114,16,116, - 7,0,0,0,0,0,0,0,0,100,8,124,0,155,2,157, - 2,124,0,172,2,171,2,0,0,0,0,0,0,130,1,124, - 5,116,17,0,0,0,0,0,0,0,0,124,7,171,1,0, - 0,0,0,0,0,122,10,0,0,124,8,122,0,0,0,125, - 3,116,27,0,0,0,0,0,0,0,0,124,4,100,9,100, - 10,26,0,171,1,0,0,0,0,0,0,125,9,116,27,0, - 0,0,0,0,0,0,0,124,4,100,10,100,11,26,0,171, - 1,0,0,0,0,0,0,125,10,124,3,124,9,107,2,0, - 0,114,16,116,7,0,0,0,0,0,0,0,0,100,12,124, - 0,155,2,157,2,124,0,172,2,171,2,0,0,0,0,0, - 0,130,1,124,3,124,10,107,2,0,0,114,16,116,7,0, - 0,0,0,0,0,0,0,100,13,124,0,155,2,157,2,124, - 0,172,2,171,2,0,0,0,0,0,0,130,1,124,3,124, - 9,122,23,0,0,125,3,124,3,124,10,122,10,0,0,125, - 11,124,11,100,6,107,2,0,0,114,16,116,7,0,0,0, - 0,0,0,0,0,100,14,124,0,155,2,157,2,124,0,172, - 2,171,2,0,0,0,0,0,0,130,1,105,0,125,12,100, - 6,125,13,9,0,124,1,106,11,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,9,0,124,1,106,15,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, - 15,171,1,0,0,0,0,0,0,125,4,116,17,0,0,0, - 0,0,0,0,0,124,4,171,1,0,0,0,0,0,0,100, - 5,107,2,0,0,114,11,116,29,0,0,0,0,0,0,0, - 0,100,16,171,1,0,0,0,0,0,0,130,1,124,4,100, - 0,100,5,26,0,100,17,107,55,0,0,114,2,144,1,110, - 164,116,17,0,0,0,0,0,0,0,0,124,4,171,1,0, - 0,0,0,0,0,100,15,107,55,0,0,114,11,116,29,0, - 0,0,0,0,0,0,0,100,16,171,1,0,0,0,0,0, - 0,130,1,116,31,0,0,0,0,0,0,0,0,124,4,100, - 18,100,19,26,0,171,1,0,0,0,0,0,0,125,14,116, - 31,0,0,0,0,0,0,0,0,124,4,100,19,100,9,26, - 0,171,1,0,0,0,0,0,0,125,15,116,31,0,0,0, - 0,0,0,0,0,124,4,100,9,100,20,26,0,171,1,0, - 0,0,0,0,0,125,16,116,31,0,0,0,0,0,0,0, - 0,124,4,100,20,100,10,26,0,171,1,0,0,0,0,0, - 0,125,17,116,27,0,0,0,0,0,0,0,0,124,4,100, - 10,100,11,26,0,171,1,0,0,0,0,0,0,125,18,116, - 27,0,0,0,0,0,0,0,0,124,4,100,11,100,21,26, - 0,171,1,0,0,0,0,0,0,125,19,116,27,0,0,0, - 0,0,0,0,0,124,4,100,21,100,22,26,0,171,1,0, - 0,0,0,0,0,125,5,116,31,0,0,0,0,0,0,0, - 0,124,4,100,22,100,23,26,0,171,1,0,0,0,0,0, - 0,125,20,116,31,0,0,0,0,0,0,0,0,124,4,100, - 23,100,24,26,0,171,1,0,0,0,0,0,0,125,21,116, - 31,0,0,0,0,0,0,0,0,124,4,100,24,100,25,26, - 0,171,1,0,0,0,0,0,0,125,22,116,27,0,0,0, - 0,0,0,0,0,124,4,100,26,100,15,26,0,171,1,0, - 0,0,0,0,0,125,23,124,20,124,21,122,0,0,0,124, - 22,122,0,0,0,125,9,124,23,124,10,107,68,0,0,114, - 16,116,7,0,0,0,0,0,0,0,0,100,27,124,0,155, - 2,157,2,124,0,172,2,171,2,0,0,0,0,0,0,130, - 1,124,23,124,11,122,13,0,0,125,23,9,0,124,1,106, - 15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,20,171,1,0,0,0,0,0,0,125,24,116, - 17,0,0,0,0,0,0,0,0,124,24,171,1,0,0,0, - 0,0,0,124,20,107,55,0,0,114,16,116,7,0,0,0, - 0,0,0,0,0,100,4,124,0,155,2,157,2,124,0,172, - 2,171,2,0,0,0,0,0,0,130,1,9,0,116,17,0, - 0,0,0,0,0,0,0,124,1,106,15,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,9,124, - 20,122,10,0,0,171,1,0,0,0,0,0,0,171,1,0, - 0,0,0,0,0,124,9,124,20,122,10,0,0,107,55,0, - 0,114,16,116,7,0,0,0,0,0,0,0,0,100,4,124, - 0,155,2,157,2,124,0,172,2,171,2,0,0,0,0,0, - 0,130,1,9,0,124,14,100,28,122,1,0,0,114,17,124, - 24,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,125,24,110, - 18,9,0,124,24,106,33,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,100,29,171,1,0,0,0, - 0,0,0,125,24,124,24,106,41,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,100,31,116,42,0, - 0,0,0,0,0,0,0,171,2,0,0,0,0,0,0,125, - 24,116,45,0,0,0,0,0,0,0,0,106,46,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 0,124,24,171,2,0,0,0,0,0,0,125,25,124,25,124, - 15,124,19,124,5,124,23,124,16,124,17,124,18,102,8,125, - 26,124,26,124,12,124,24,60,0,0,0,124,13,100,32,122, - 13,0,0,125,13,144,1,140,216,9,0,124,1,106,11,0, + 124,6,171,1,0,0,0,0,0,0,1,0,124,1,106,15, 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,9,0,100, - 0,100,0,100,0,171,2,0,0,0,0,0,0,1,0,116, - 49,0,0,0,0,0,0,0,0,106,50,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,100,33,127, - 13,124,0,171,3,0,0,0,0,0,0,1,0,127,12,83, - 0,35,0,116,4,0,0,0,0,0,0,0,0,36,0,114, - 17,1,0,116,7,0,0,0,0,0,0,0,0,100,1,124, - 0,155,2,157,2,124,0,172,2,171,2,0,0,0,0,0, - 0,130,1,119,0,120,3,89,0,119,1,35,0,116,4,0, - 0,0,0,0,0,0,0,36,0,114,17,1,0,116,7,0, - 0,0,0,0,0,0,0,100,4,124,0,155,2,157,2,124, - 0,172,2,171,2,0,0,0,0,0,0,130,1,119,0,120, - 3,89,0,119,1,35,0,116,4,0,0,0,0,0,0,0, - 0,36,0,114,17,1,0,116,7,0,0,0,0,0,0,0, - 0,100,4,124,0,155,2,157,2,124,0,172,2,171,2,0, - 0,0,0,0,0,130,1,119,0,120,3,89,0,119,1,35, - 0,116,4,0,0,0,0,0,0,0,0,36,0,114,17,1, - 0,116,7,0,0,0,0,0,0,0,0,100,4,124,0,155, - 2,157,2,124,0,172,2,171,2,0,0,0,0,0,0,130, - 1,119,0,120,3,89,0,119,1,35,0,116,4,0,0,0, - 0,0,0,0,0,36,0,114,17,1,0,116,7,0,0,0, - 0,0,0,0,0,100,4,124,0,155,2,157,2,124,0,172, - 2,171,2,0,0,0,0,0,0,130,1,119,0,120,3,89, - 0,119,1,35,0,116,4,0,0,0,0,0,0,0,0,36, - 0,114,17,1,0,116,7,0,0,0,0,0,0,0,0,100, - 4,124,0,155,2,157,2,124,0,172,2,171,2,0,0,0, - 0,0,0,130,1,119,0,120,3,89,0,119,1,35,0,116, - 4,0,0,0,0,0,0,0,0,36,0,114,17,1,0,116, - 7,0,0,0,0,0,0,0,0,100,4,124,0,155,2,157, - 2,124,0,172,2,171,2,0,0,0,0,0,0,130,1,119, - 0,120,3,89,0,119,1,35,0,116,34,0,0,0,0,0, - 0,0,0,36,0,114,40,1,0,124,24,106,33,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, - 30,171,1,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,116,38,0, - 0,0,0,0,0,0,0,171,1,0,0,0,0,0,0,125, - 24,89,0,144,1,140,113,119,0,120,3,89,0,119,1,35, - 0,124,1,106,11,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,119,0,120,3,89,0,119,1,35,0,49,0,115, - 1,119,2,1,0,89,0,1,0,1,0,144,1,140,56,120, - 3,89,0,119,1,41,34,78,122,21,99,97,110,39,116,32, - 111,112,101,110,32,90,105,112,32,102,105,108,101,58,32,114, - 17,0,0,0,114,126,0,0,0,250,21,99,97,110,39,116, - 32,114,101,97,100,32,90,105,112,32,102,105,108,101,58,32, - 233,4,0,0,0,114,1,0,0,0,122,16,110,111,116,32, - 97,32,90,105,112,32,102,105,108,101,58,32,122,18,99,111, - 114,114,117,112,116,32,90,105,112,32,102,105,108,101,58,32, - 233,12,0,0,0,233,16,0,0,0,233,20,0,0,0,122, - 28,98,97,100,32,99,101,110,116,114,97,108,32,100,105,114, - 101,99,116,111,114,121,32,115,105,122,101,58,32,122,30,98, - 97,100,32,99,101,110,116,114,97,108,32,100,105,114,101,99, - 116,111,114,121,32,111,102,102,115,101,116,58,32,122,38,98, - 97,100,32,99,101,110,116,114,97,108,32,100,105,114,101,99, - 116,111,114,121,32,115,105,122,101,32,111,114,32,111,102,102, - 115,101,116,58,32,233,46,0,0,0,250,27,69,79,70,32, - 114,101,97,100,32,119,104,101,114,101,32,110,111,116,32,101, - 120,112,101,99,116,101,100,115,4,0,0,0,80,75,1,2, - 233,8,0,0,0,233,10,0,0,0,233,14,0,0,0,233, - 24,0,0,0,233,28,0,0,0,233,30,0,0,0,233,32, - 0,0,0,233,34,0,0,0,233,42,0,0,0,122,25,98, - 97,100,32,108,111,99,97,108,32,104,101,97,100,101,114,32, - 111,102,102,115,101,116,58,32,105,0,8,0,0,218,5,97, - 115,99,105,105,218,6,108,97,116,105,110,49,250,1,47,114, - 6,0,0,0,122,33,122,105,112,105,109,112,111,114,116,58, - 32,102,111,117,110,100,32,123,125,32,110,97,109,101,115,32, - 105,110,32,123,33,114,125,41,26,218,3,95,105,111,218,9, - 111,112,101,110,95,99,111,100,101,114,30,0,0,0,114,4, - 0,0,0,218,4,116,101,108,108,218,4,115,101,101,107,218, - 20,69,78,68,95,67,69,78,84,82,65,76,95,68,73,82, - 95,83,73,90,69,218,4,114,101,97,100,114,74,0,0,0, - 218,18,83,84,82,73,78,71,95,69,78,68,95,65,82,67, - 72,73,86,69,218,3,109,97,120,218,15,77,65,88,95,67, - 79,77,77,69,78,84,95,76,69,78,218,5,114,102,105,110, - 100,114,3,0,0,0,218,8,69,79,70,69,114,114,111,114, - 114,2,0,0,0,114,87,0,0,0,218,18,85,110,105,99, - 111,100,101,68,101,99,111,100,101,69,114,114,111,114,218,9, - 116,114,97,110,115,108,97,116,101,218,11,99,112,52,51,55, - 95,116,97,98,108,101,114,25,0,0,0,114,26,0,0,0, - 114,27,0,0,0,114,39,0,0,0,114,52,0,0,0,114, - 108,0,0,0,41,27,114,38,0,0,0,218,2,102,112,218, - 12,115,116,97,114,116,95,111,102,102,115,101,116,218,15,104, - 101,97,100,101,114,95,112,111,115,105,116,105,111,110,218,6, - 98,117,102,102,101,114,218,9,102,105,108,101,95,115,105,122, - 101,218,17,109,97,120,95,99,111,109,109,101,110,116,95,115, - 116,97,114,116,218,4,100,97,116,97,218,3,112,111,115,218, - 11,104,101,97,100,101,114,95,115,105,122,101,218,13,104,101, - 97,100,101,114,95,111,102,102,115,101,116,218,10,97,114,99, - 95,111,102,102,115,101,116,114,45,0,0,0,218,5,99,111, - 117,110,116,218,5,102,108,97,103,115,218,8,99,111,109,112, - 114,101,115,115,218,4,116,105,109,101,218,4,100,97,116,101, - 218,3,99,114,99,218,9,100,97,116,97,95,115,105,122,101, - 218,9,110,97,109,101,95,115,105,122,101,218,10,101,120,116, - 114,97,95,115,105,122,101,218,12,99,111,109,109,101,110,116, - 95,115,105,122,101,218,11,102,105,108,101,95,111,102,102,115, - 101,116,114,49,0,0,0,114,18,0,0,0,218,1,116,115, - 27,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32, - 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,114, - 13,0,0,0,114,36,0,0,0,114,36,0,0,0,87,1, - 0,0,115,213,5,0,0,128,0,240,2,3,5,80,1,220, - 13,16,143,93,137,93,152,55,211,13,35,136,2,242,8,0, - 10,12,240,8,0,24,26,151,119,145,119,147,121,136,12,240, - 2,110,1,9,34,240,2,5,13,88,1,216,16,18,151,7, - 145,7,212,25,45,208,24,45,168,113,212,16,49,216,34,36, - 167,39,161,39,163,41,144,15,216,25,27,159,23,153,23,212, - 33,53,211,25,54,144,6,244,6,0,16,19,144,54,139,123, - 212,30,50,210,15,50,220,22,36,208,39,60,184,87,184,75, - 208,37,72,200,119,212,22,87,208,16,87,216,15,21,144,98, - 144,113,136,122,212,29,47,210,15,47,240,6,5,17,55,216, - 20,22,151,71,145,71,152,65,152,113,148,77,216,32,34,167, - 7,161,7,163,9,144,73,244,8,0,37,40,168,9,180,79, - 209,40,67,220,40,60,241,3,1,41,61,216,62,63,243,3, - 1,37,65,1,208,16,33,240,4,5,17,55,216,20,22,151, - 71,145,71,208,28,45,212,20,46,216,27,29,159,55,153,55, - 155,57,144,68,240,8,0,23,27,151,106,145,106,212,33,51, - 211,22,52,144,3,216,19,22,152,17,146,55,220,26,40,208, - 43,59,184,71,184,59,208,41,71,216,46,53,244,3,1,27, - 55,240,0,1,21,55,224,25,29,152,99,160,35,212,38,58, - 209,34,58,208,25,59,144,6,220,19,22,144,118,147,59,212, - 34,54,210,19,54,220,26,40,208,43,61,184,103,184,91,208, - 41,73,216,46,53,244,3,1,27,55,240,0,1,21,55,224, - 34,43,172,99,176,36,171,105,209,34,55,184,35,209,34,61, - 144,15,228,26,40,168,22,176,2,176,50,168,29,211,26,55, - 136,75,220,28,42,168,54,176,34,176,82,168,61,211,28,57, - 136,77,216,15,30,160,27,210,15,44,220,22,36,208,39,67, - 192,71,192,59,208,37,79,208,86,93,212,22,94,208,16,94, - 216,15,30,160,29,210,15,46,220,22,36,208,39,69,192,103, - 192,91,208,37,81,208,88,95,212,22,96,208,16,96,216,12, - 27,152,123,209,12,42,136,79,216,25,40,168,61,209,25,56, - 136,74,216,15,25,152,65,138,126,220,22,36,208,39,77,200, - 103,200,91,208,37,89,208,96,103,212,22,104,208,16,104,224, - 20,22,136,69,224,20,21,136,69,240,2,3,13,88,1,216, - 16,18,151,7,145,7,152,15,212,16,40,240,6,0,19,23, - 216,25,27,159,23,153,23,160,18,155,27,144,6,220,19,22, - 144,118,147,59,160,17,146,63,220,26,34,208,35,64,211,26, - 65,208,20,65,224,19,25,152,34,152,49,144,58,160,29,210, - 19,46,217,20,25,220,19,22,144,118,147,59,160,34,210,19, - 36,220,26,34,208,35,64,211,26,65,208,20,65,220,24,38, - 160,118,168,97,176,2,160,124,211,24,52,144,5,220,27,41, - 168,38,176,18,176,66,168,45,211,27,56,144,8,220,23,37, - 160,102,168,82,176,2,160,109,211,23,52,144,4,220,23,37, - 160,102,168,82,176,2,160,109,211,23,52,144,4,220,22,36, - 160,86,168,66,168,114,160,93,211,22,51,144,3,220,28,42, - 168,54,176,34,176,82,168,61,211,28,57,144,9,220,28,42, - 168,54,176,34,176,82,168,61,211,28,57,144,9,220,28,42, - 168,54,176,34,176,82,168,61,211,28,57,144,9,220,29,43, - 168,70,176,50,176,98,168,77,211,29,58,144,10,220,31,45, - 168,102,176,82,184,2,168,109,211,31,60,144,12,220,30,44, - 168,86,176,66,176,114,168,93,211,30,59,144,11,216,30,39, - 168,42,209,30,52,176,124,209,30,67,144,11,216,19,30,160, - 29,210,19,46,220,26,40,208,43,68,192,87,192,75,208,41, - 80,208,87,94,212,26,95,208,20,95,216,16,27,152,122,209, - 16,41,144,11,240,4,3,17,92,1,216,27,29,159,55,153, - 55,160,57,211,27,45,144,68,244,6,0,20,23,144,116,147, - 57,160,9,210,19,41,220,26,40,208,43,64,192,23,192,11, - 208,41,76,208,83,90,212,26,91,208,20,91,240,8,4,17, - 92,1,220,23,26,152,50,159,55,153,55,160,59,176,25,209, - 35,58,211,27,59,211,23,60,192,11,200,105,209,64,87,210, - 23,87,220,30,44,208,47,68,192,87,192,75,208,45,80,208, - 87,94,212,30,95,208,24,95,240,3,0,24,88,1,240,10, - 0,20,25,152,53,146,61,224,27,31,159,59,153,59,155,61, - 145,68,240,6,3,21,76,1,216,31,35,159,123,153,123,168, - 55,211,31,51,152,4,240,8,0,24,28,151,124,145,124,160, - 67,172,24,211,23,50,144,4,220,23,42,215,23,53,209,23, - 53,176,103,184,116,211,23,68,144,4,216,21,25,152,56,160, - 89,176,9,184,59,200,4,200,100,208,84,87,208,20,88,144, - 1,216,30,31,144,5,144,100,145,11,216,16,21,152,17,145, - 10,144,5,241,109,1,0,19,23,240,12,0,21,26,240,100, - 1,0,13,15,143,71,137,71,144,76,213,12,33,247,103,3, - 0,10,12,244,104,3,0,5,15,215,4,31,209,4,31,208, - 32,67,192,85,200,71,212,4,84,216,11,16,128,76,248,244, - 113,3,0,12,19,242,0,1,5,80,1,220,14,28,208,31, - 52,176,87,176,75,208,29,64,192,119,212,14,79,208,8,79, - 240,3,1,5,80,1,251,244,26,0,20,27,242,0,1,13, - 88,1,220,22,36,208,39,60,184,87,184,75,208,37,72,200, - 119,212,22,87,208,16,87,240,3,1,13,88,1,251,244,20, - 0,24,31,242,0,2,17,55,220,26,40,208,43,64,192,23, - 192,11,208,41,76,216,46,53,244,3,1,27,55,240,0,1, - 21,55,240,3,2,17,55,251,244,16,0,24,31,242,0,2, - 17,55,220,26,40,208,43,64,192,23,192,11,208,41,76,216, - 46,53,244,3,1,27,55,240,0,1,21,55,240,3,2,17, - 55,251,244,58,0,20,27,242,0,1,13,88,1,220,22,36, - 208,39,60,184,87,184,75,208,37,72,200,119,212,22,87,208, - 16,87,240,3,1,13,88,1,251,244,58,0,24,31,242,0, - 1,17,92,1,220,26,40,208,43,64,192,23,192,11,208,41, - 76,208,83,90,212,26,91,208,20,91,240,3,1,17,92,1, - 251,244,20,0,24,31,242,0,1,17,92,1,220,26,40,208, - 43,64,192,23,192,11,208,41,76,208,83,90,212,26,91,208, - 20,91,240,3,1,17,92,1,251,244,20,0,28,46,242,0, - 1,21,76,1,216,31,35,159,123,153,123,168,56,211,31,52, - 215,31,62,209,31,62,188,123,211,31,75,155,4,240,3,1, - 21,76,1,251,240,18,0,13,15,143,71,137,71,144,76,213, - 12,33,250,247,103,3,0,10,12,137,18,250,115,222,0,0, - 0,130,21,79,38,0,153,17,83,59,3,172,60,80,3,2, - 193,40,46,83,37,2,194,23,34,80,32,2,194,57,26,83, - 37,2,195,20,33,80,61,2,195,53,67,18,83,37,2,199, - 8,17,81,26,2,199,25,68,10,83,37,2,203,36,17,81, - 55,2,203,53,30,83,37,2,204,20,51,82,20,2,205,7, - 23,83,37,2,205,31,17,82,49,2,205,48,65,2,83,37, - 2,206,51,17,83,59,3,207,38,26,80,0,3,208,3,26, - 80,29,5,208,29,3,83,37,2,208,32,26,80,58,5,208, - 58,3,83,37,2,208,61,26,81,23,5,209,23,3,83,37, - 2,209,26,26,81,52,5,209,52,3,83,37,2,209,55,26, - 82,17,5,210,17,3,83,37,2,210,20,26,82,46,5,210, - 46,3,83,37,2,210,49,45,83,34,5,211,30,3,83,37, - 2,211,33,1,83,34,5,211,34,3,83,37,2,211,37,19, - 83,56,5,211,56,3,83,59,3,211,59,5,84,5,7,117, - 190,1,0,0,0,1,2,3,4,5,6,7,8,9,10,11, - 12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27, - 28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43, - 44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59, - 60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75, - 76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91, - 92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107, - 108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123, - 124,125,126,127,195,135,195,188,195,169,195,162,195,164,195,160, - 195,165,195,167,195,170,195,171,195,168,195,175,195,174,195,172, - 195,132,195,133,195,137,195,166,195,134,195,180,195,182,195,178, - 195,187,195,185,195,191,195,150,195,156,194,162,194,163,194,165, - 226,130,167,198,146,195,161,195,173,195,179,195,186,195,177,195, - 145,194,170,194,186,194,191,226,140,144,194,172,194,189,194,188, - 194,161,194,171,194,187,226,150,145,226,150,146,226,150,147,226, - 148,130,226,148,164,226,149,161,226,149,162,226,149,150,226,149, - 149,226,149,163,226,149,145,226,149,151,226,149,157,226,149,156, - 226,149,155,226,148,144,226,148,148,226,148,180,226,148,172,226, - 148,156,226,148,128,226,148,188,226,149,158,226,149,159,226,149, - 154,226,149,148,226,149,169,226,149,166,226,149,160,226,149,144, - 226,149,172,226,149,167,226,149,168,226,149,164,226,149,165,226, - 149,153,226,149,152,226,149,146,226,149,147,226,149,171,226,149, - 170,226,148,152,226,148,140,226,150,136,226,150,132,226,150,140, - 226,150,144,226,150,128,206,177,195,159,206,147,207,128,206,163, - 207,131,194,181,207,132,206,166,206,152,206,169,206,180,226,136, - 158,207,134,206,181,226,136,169,226,137,161,194,177,226,137,165, - 226,137,164,226,140,160,226,140,161,195,183,226,137,136,194,176, - 226,136,153,194,183,226,136,154,226,129,191,194,178,226,150,160, - 194,160,99,0,0,0,0,0,0,0,0,0,0,0,0,4, - 0,0,0,3,0,0,0,243,252,0,0,0,151,0,116,0, - 0,0,0,0,0,0,0,0,114,32,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,100,1,171,1,0,0,0,0, - 0,0,1,0,116,7,0,0,0,0,0,0,0,0,100,2, - 171,1,0,0,0,0,0,0,130,1,100,3,97,0,9,0, - 100,4,100,5,108,4,109,5,125,0,1,0,9,0,100,6, - 97,0,116,3,0,0,0,0,0,0,0,0,106,4,0,0, + 0,0,171,0,0,0,0,0,0,0,125,7,124,7,106,25, 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,1,0,124,0,83,0, - 35,0,116,12,0,0,0,0,0,0,0,0,36,0,114,33, - 1,0,116,3,0,0,0,0,0,0,0,0,106,4,0,0, + 0,0,116,18,0,0,0,0,0,0,0,0,171,1,0,0, + 0,0,0,0,125,8,124,8,100,6,107,2,0,0,114,16, + 116,7,0,0,0,0,0,0,0,0,100,7,124,0,155,2, + 157,2,124,0,172,2,171,2,0,0,0,0,0,0,130,1, + 124,7,124,8,124,8,116,12,0,0,0,0,0,0,0,0, + 122,0,0,0,26,0,125,4,116,17,0,0,0,0,0,0, + 0,0,124,4,171,1,0,0,0,0,0,0,116,12,0,0, + 0,0,0,0,0,0,107,55,0,0,114,16,116,7,0,0, + 0,0,0,0,0,0,100,8,124,0,155,2,157,2,124,0, + 172,2,171,2,0,0,0,0,0,0,130,1,124,5,116,17, + 0,0,0,0,0,0,0,0,124,7,171,1,0,0,0,0, + 0,0,122,10,0,0,124,8,122,0,0,0,125,3,116,27, + 0,0,0,0,0,0,0,0,124,4,100,9,100,10,26,0, + 171,1,0,0,0,0,0,0,125,9,116,27,0,0,0,0, + 0,0,0,0,124,4,100,10,100,11,26,0,171,1,0,0, + 0,0,0,0,125,10,124,3,124,9,107,2,0,0,114,16, + 116,7,0,0,0,0,0,0,0,0,100,12,124,0,155,2, + 157,2,124,0,172,2,171,2,0,0,0,0,0,0,130,1, + 124,3,124,10,107,2,0,0,114,16,116,7,0,0,0,0, + 0,0,0,0,100,13,124,0,155,2,157,2,124,0,172,2, + 171,2,0,0,0,0,0,0,130,1,124,3,124,9,122,23, + 0,0,125,3,124,3,124,10,122,10,0,0,125,11,124,11, + 100,6,107,2,0,0,114,16,116,7,0,0,0,0,0,0, + 0,0,100,14,124,0,155,2,157,2,124,0,172,2,171,2, + 0,0,0,0,0,0,130,1,105,0,125,12,100,6,125,13, + 9,0,124,1,106,11,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,9,0,124,1,106,15,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,100,15,171,1, + 0,0,0,0,0,0,125,4,116,17,0,0,0,0,0,0, + 0,0,124,4,171,1,0,0,0,0,0,0,100,5,107,2, + 0,0,114,11,116,29,0,0,0,0,0,0,0,0,100,16, + 171,1,0,0,0,0,0,0,130,1,124,4,100,0,100,5, + 26,0,100,17,107,55,0,0,114,2,144,1,110,164,116,17, + 0,0,0,0,0,0,0,0,124,4,171,1,0,0,0,0, + 0,0,100,15,107,55,0,0,114,11,116,29,0,0,0,0, + 0,0,0,0,100,16,171,1,0,0,0,0,0,0,130,1, + 116,31,0,0,0,0,0,0,0,0,124,4,100,18,100,19, + 26,0,171,1,0,0,0,0,0,0,125,14,116,31,0,0, + 0,0,0,0,0,0,124,4,100,19,100,9,26,0,171,1, + 0,0,0,0,0,0,125,15,116,31,0,0,0,0,0,0, + 0,0,124,4,100,9,100,20,26,0,171,1,0,0,0,0, + 0,0,125,16,116,31,0,0,0,0,0,0,0,0,124,4, + 100,20,100,10,26,0,171,1,0,0,0,0,0,0,125,17, + 116,27,0,0,0,0,0,0,0,0,124,4,100,10,100,11, + 26,0,171,1,0,0,0,0,0,0,125,18,116,27,0,0, + 0,0,0,0,0,0,124,4,100,11,100,21,26,0,171,1, + 0,0,0,0,0,0,125,19,116,27,0,0,0,0,0,0, + 0,0,124,4,100,21,100,22,26,0,171,1,0,0,0,0, + 0,0,125,5,116,31,0,0,0,0,0,0,0,0,124,4, + 100,22,100,23,26,0,171,1,0,0,0,0,0,0,125,20, + 116,31,0,0,0,0,0,0,0,0,124,4,100,23,100,24, + 26,0,171,1,0,0,0,0,0,0,125,21,116,31,0,0, + 0,0,0,0,0,0,124,4,100,24,100,25,26,0,171,1, + 0,0,0,0,0,0,125,22,116,27,0,0,0,0,0,0, + 0,0,124,4,100,26,100,15,26,0,171,1,0,0,0,0, + 0,0,125,23,124,20,124,21,122,0,0,0,124,22,122,0, + 0,0,125,9,124,23,124,10,107,68,0,0,114,16,116,7, + 0,0,0,0,0,0,0,0,100,27,124,0,155,2,157,2, + 124,0,172,2,171,2,0,0,0,0,0,0,130,1,124,23, + 124,11,122,13,0,0,125,23,9,0,124,1,106,15,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,1,0,116,7,0,0, - 0,0,0,0,0,0,100,2,171,1,0,0,0,0,0,0, - 130,1,119,0,120,3,89,0,119,1,35,0,100,6,97,0, - 119,0,120,3,89,0,119,1,41,8,78,122,27,122,105,112, - 105,109,112,111,114,116,58,32,122,108,105,98,32,85,78,65, - 86,65,73,76,65,66,76,69,250,41,99,97,110,39,116,32, - 100,101,99,111,109,112,114,101,115,115,32,100,97,116,97,59, - 32,122,108,105,98,32,110,111,116,32,97,118,97,105,108,97, - 98,108,101,84,114,1,0,0,0,169,1,218,10,100,101,99, - 111,109,112,114,101,115,115,70,122,25,122,105,112,105,109,112, - 111,114,116,58,32,122,108,105,98,32,97,118,97,105,108,97, - 98,108,101,41,7,218,15,95,105,109,112,111,114,116,105,110, - 103,95,122,108,105,98,114,52,0,0,0,114,108,0,0,0, - 114,4,0,0,0,218,4,122,108,105,98,114,194,0,0,0, - 218,9,69,120,99,101,112,116,105,111,110,114,193,0,0,0, - 115,1,0,0,0,32,114,13,0,0,0,218,20,95,103,101, - 116,95,100,101,99,111,109,112,114,101,115,115,95,102,117,110, - 99,114,198,0,0,0,252,1,0,0,115,129,0,0,0,128, - 0,229,7,22,244,6,0,9,19,215,8,35,209,8,35,208, - 36,65,212,8,66,220,14,28,208,29,72,211,14,73,208,8, - 73,224,22,26,128,79,240,2,6,5,32,222,8,35,240,10, - 0,27,32,136,15,228,4,14,215,4,31,209,4,31,208,32, - 59,212,4,60,216,11,21,208,4,21,248,244,15,0,12,21, - 242,0,2,5,74,1,220,8,18,215,8,35,209,8,35,208, - 36,65,212,8,66,220,14,28,208,29,72,211,14,73,208,8, - 73,240,5,2,5,74,1,251,240,8,0,27,32,137,15,250, - 115,23,0,0,0,170,6,65,10,0,193,10,42,65,52,3, - 193,52,3,65,55,0,193,55,4,65,59,3,99,2,0,0, - 0,0,0,0,0,0,0,0,0,8,0,0,0,3,0,0, - 0,243,218,2,0,0,151,0,124,1,92,8,0,0,125,2, - 125,3,125,4,125,5,125,6,125,7,125,8,125,9,124,4, - 100,1,107,2,0,0,114,11,116,1,0,0,0,0,0,0, - 0,0,100,2,171,1,0,0,0,0,0,0,130,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,53,0,125,10,9,0,124,10,106,7, + 124,20,171,1,0,0,0,0,0,0,125,24,116,17,0,0, + 0,0,0,0,0,0,124,24,171,1,0,0,0,0,0,0, + 124,20,107,55,0,0,114,16,116,7,0,0,0,0,0,0, + 0,0,100,4,124,0,155,2,157,2,124,0,172,2,171,2, + 0,0,0,0,0,0,130,1,9,0,116,17,0,0,0,0, + 0,0,0,0,124,1,106,15,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,9,124,20,122,10, + 0,0,171,1,0,0,0,0,0,0,171,1,0,0,0,0, + 0,0,124,9,124,20,122,10,0,0,107,55,0,0,114,16, + 116,7,0,0,0,0,0,0,0,0,100,4,124,0,155,2, + 157,2,124,0,172,2,171,2,0,0,0,0,0,0,130,1, + 9,0,124,14,100,28,122,1,0,0,114,17,124,24,106,33, 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,1,0,124,10, + 0,0,171,0,0,0,0,0,0,0,125,24,110,18,9,0, + 124,24,106,33,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,100,29,171,1,0,0,0,0,0,0, + 125,24,124,24,106,41,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,100,31,116,42,0,0,0,0, + 0,0,0,0,171,2,0,0,0,0,0,0,125,24,116,45, + 0,0,0,0,0,0,0,0,106,46,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,124,0,124,24, + 171,2,0,0,0,0,0,0,125,25,124,25,124,15,124,19, + 124,5,124,23,124,16,124,17,124,18,102,8,125,26,124,26, + 124,12,124,24,60,0,0,0,124,13,100,32,122,13,0,0, + 125,13,144,1,140,216,9,0,124,1,106,11,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,9,0,100,0,100,0, + 100,0,171,2,0,0,0,0,0,0,1,0,116,49,0,0, + 0,0,0,0,0,0,106,50,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,100,33,127,13,124,0, + 171,3,0,0,0,0,0,0,1,0,127,12,83,0,35,0, + 116,4,0,0,0,0,0,0,0,0,36,0,114,17,1,0, + 116,7,0,0,0,0,0,0,0,0,100,1,124,0,155,2, + 157,2,124,0,172,2,171,2,0,0,0,0,0,0,130,1, + 119,0,120,3,89,0,119,1,35,0,116,4,0,0,0,0, + 0,0,0,0,36,0,114,17,1,0,116,7,0,0,0,0, + 0,0,0,0,100,4,124,0,155,2,157,2,124,0,172,2, + 171,2,0,0,0,0,0,0,130,1,119,0,120,3,89,0, + 119,1,35,0,116,4,0,0,0,0,0,0,0,0,36,0, + 114,17,1,0,116,7,0,0,0,0,0,0,0,0,100,4, + 124,0,155,2,157,2,124,0,172,2,171,2,0,0,0,0, + 0,0,130,1,119,0,120,3,89,0,119,1,35,0,116,4, + 0,0,0,0,0,0,0,0,36,0,114,17,1,0,116,7, + 0,0,0,0,0,0,0,0,100,4,124,0,155,2,157,2, + 124,0,172,2,171,2,0,0,0,0,0,0,130,1,119,0, + 120,3,89,0,119,1,35,0,116,4,0,0,0,0,0,0, + 0,0,36,0,114,17,1,0,116,7,0,0,0,0,0,0, + 0,0,100,4,124,0,155,2,157,2,124,0,172,2,171,2, + 0,0,0,0,0,0,130,1,119,0,120,3,89,0,119,1, + 35,0,116,4,0,0,0,0,0,0,0,0,36,0,114,17, + 1,0,116,7,0,0,0,0,0,0,0,0,100,4,124,0, + 155,2,157,2,124,0,172,2,171,2,0,0,0,0,0,0, + 130,1,119,0,120,3,89,0,119,1,35,0,116,4,0,0, + 0,0,0,0,0,0,36,0,114,17,1,0,116,7,0,0, + 0,0,0,0,0,0,100,4,124,0,155,2,157,2,124,0, + 172,2,171,2,0,0,0,0,0,0,130,1,119,0,120,3, + 89,0,119,1,35,0,116,34,0,0,0,0,0,0,0,0, + 36,0,114,40,1,0,124,24,106,33,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,100,30,171,1, + 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,116,38,0,0,0,0, + 0,0,0,0,171,1,0,0,0,0,0,0,125,24,89,0, + 144,1,140,113,119,0,120,3,89,0,119,1,35,0,124,1, 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,125,11, - 116,13,0,0,0,0,0,0,0,0,124,11,171,1,0,0, - 0,0,0,0,100,5,107,55,0,0,114,11,116,15,0,0, - 0,0,0,0,0,0,100,6,171,1,0,0,0,0,0,0, - 130,1,124,11,100,0,100,7,26,0,100,8,107,55,0,0, - 114,16,116,1,0,0,0,0,0,0,0,0,100,9,124,0, - 155,2,157,2,124,0,172,4,171,2,0,0,0,0,0,0, - 130,1,116,17,0,0,0,0,0,0,0,0,124,11,100,10, - 100,11,26,0,171,1,0,0,0,0,0,0,125,12,116,17, - 0,0,0,0,0,0,0,0,124,11,100,11,100,5,26,0, - 171,1,0,0,0,0,0,0,125,13,100,5,124,12,122,0, - 0,0,124,13,122,0,0,0,125,14,124,6,124,14,122,13, - 0,0,125,6,9,0,124,10,106,7,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,1,0,124,10,106,11,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,15,116,13,0,0,0,0, - 0,0,0,0,124,15,171,1,0,0,0,0,0,0,124,4, - 107,55,0,0,114,11,116,9,0,0,0,0,0,0,0,0, - 100,12,171,1,0,0,0,0,0,0,130,1,9,0,100,0, - 100,0,100,0,171,2,0,0,0,0,0,0,1,0,124,3, - 100,1,107,40,0,0,114,2,127,15,83,0,9,0,116,19, - 0,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0, - 125,16,2,0,124,16,127,15,100,14,171,2,0,0,0,0, - 0,0,83,0,35,0,116,8,0,0,0,0,0,0,0,0, - 36,0,114,17,1,0,116,1,0,0,0,0,0,0,0,0, - 100,3,124,0,155,2,157,2,124,0,172,4,171,2,0,0, - 0,0,0,0,130,1,119,0,120,3,89,0,119,1,35,0, - 116,8,0,0,0,0,0,0,0,0,36,0,114,17,1,0, - 116,1,0,0,0,0,0,0,0,0,100,3,124,0,155,2, - 157,2,124,0,172,4,171,2,0,0,0,0,0,0,130,1, + 0,0,0,0,124,2,171,1,0,0,0,0,0,0,1,0, 119,0,120,3,89,0,119,1,35,0,49,0,115,1,119,2, - 1,0,89,0,1,0,1,0,140,94,120,3,89,0,119,1, - 35,0,116,20,0,0,0,0,0,0,0,0,36,0,114,12, - 1,0,116,1,0,0,0,0,0,0,0,0,100,13,171,1, - 0,0,0,0,0,0,130,1,119,0,120,3,89,0,119,1, - 41,15,78,114,1,0,0,0,122,18,110,101,103,97,116,105, - 118,101,32,100,97,116,97,32,115,105,122,101,114,135,0,0, - 0,114,17,0,0,0,114,147,0,0,0,114,141,0,0,0, - 114,136,0,0,0,115,4,0,0,0,80,75,3,4,122,23, - 98,97,100,32,108,111,99,97,108,32,102,105,108,101,32,104, - 101,97,100,101,114,58,32,233,26,0,0,0,114,146,0,0, - 0,122,26,122,105,112,105,109,112,111,114,116,58,32,99,97, - 110,39,116,32,114,101,97,100,32,100,97,116,97,114,192,0, - 0,0,105,241,255,255,255,41,11,114,4,0,0,0,114,154, - 0,0,0,114,155,0,0,0,114,157,0,0,0,114,30,0, - 0,0,114,159,0,0,0,114,74,0,0,0,114,164,0,0, - 0,114,2,0,0,0,114,198,0,0,0,114,197,0,0,0, - 41,17,114,38,0,0,0,114,78,0,0,0,218,8,100,97, - 116,97,112,97,116,104,114,181,0,0,0,114,185,0,0,0, - 114,172,0,0,0,114,189,0,0,0,114,182,0,0,0,114, - 183,0,0,0,114,184,0,0,0,114,168,0,0,0,114,171, - 0,0,0,114,186,0,0,0,114,187,0,0,0,114,176,0, - 0,0,218,8,114,97,119,95,100,97,116,97,114,194,0,0, - 0,115,17,0,0,0,32,32,32,32,32,32,32,32,32,32, - 32,32,32,32,32,32,32,114,13,0,0,0,114,75,0,0, - 0,114,75,0,0,0,17,2,0,0,115,179,1,0,0,128, - 0,216,77,86,209,4,74,128,72,136,104,152,9,160,57,168, - 107,184,52,192,20,192,115,216,7,16,144,49,130,125,220,14, - 28,208,29,49,211,14,50,208,8,50,228,9,12,143,29,137, - 29,144,119,212,9,31,160,50,240,4,3,9,84,1,216,12, - 14,143,71,137,71,144,75,212,12,32,240,6,0,18,20,151, - 23,145,23,152,18,147,27,136,6,220,11,14,136,118,139,59, - 152,34,210,11,28,220,18,26,208,27,56,211,18,57,208,12, - 57,224,11,17,144,34,144,49,136,58,152,29,210,11,38,228, - 18,32,208,35,58,184,55,184,43,208,33,70,200,87,212,18, - 85,208,12,85,228,20,34,160,54,168,34,168,82,160,61,211, - 20,49,136,9,220,21,35,160,70,168,50,168,98,160,77,211, - 21,50,136,10,216,22,24,152,57,145,110,160,122,209,22,49, - 136,11,216,8,19,144,123,209,8,34,136,11,240,2,3,9, - 84,1,216,12,14,143,71,137,71,144,75,212,12,32,240,6, - 0,20,22,151,55,145,55,152,57,211,19,37,136,8,220,11, - 14,136,120,139,61,152,73,210,11,37,220,18,25,208,26,54, - 211,18,55,208,12,55,240,3,0,12,38,247,47,0,10,32, - 240,52,0,8,16,144,49,130,125,224,15,23,136,15,240,6, - 3,5,74,1,220,21,41,211,21,43,136,10,241,6,0,12, - 22,144,104,160,3,211,11,36,208,4,36,248,244,63,0,16, - 23,242,0,1,9,84,1,220,18,32,208,35,56,184,23,184, - 11,208,33,68,200,55,212,18,83,208,12,83,240,3,1,9, - 84,1,251,244,32,0,16,23,242,0,1,9,84,1,220,18, - 32,208,35,56,184,23,184,11,208,33,68,200,55,212,18,83, - 208,12,83,240,3,1,9,84,1,250,247,41,0,10,32,208, - 9,31,251,244,66,1,0,12,21,242,0,1,5,74,1,220, - 14,28,208,29,72,211,14,73,208,8,73,240,3,1,5,74, - 1,250,115,71,0,0,0,177,1,69,9,3,179,17,68,15, - 2,193,4,65,43,69,9,3,194,48,17,68,44,2,195,1, - 42,69,9,3,195,60,10,69,21,0,196,15,26,68,41,5, - 196,41,3,69,9,3,196,44,26,69,6,5,197,6,3,69, - 9,3,197,9,5,69,18,7,197,21,21,69,42,3,99,2, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3, - 0,0,0,243,36,0,0,0,151,0,116,1,0,0,0,0, - 0,0,0,0,124,0,124,1,122,10,0,0,171,1,0,0, - 0,0,0,0,100,1,107,26,0,0,83,0,41,2,78,114, - 6,0,0,0,41,1,218,3,97,98,115,41,2,218,2,116, - 49,218,2,116,50,115,2,0,0,0,32,32,114,13,0,0, - 0,218,9,95,101,113,95,109,116,105,109,101,114,207,0,0, - 0,63,2,0,0,115,21,0,0,0,128,0,228,11,14,136, - 114,144,66,137,119,139,60,152,49,209,11,28,208,4,28,114, - 12,0,0,0,99,5,0,0,0,0,0,0,0,0,0,0, - 0,7,0,0,0,3,0,0,0,243,92,2,0,0,151,0, - 124,3,124,2,100,1,156,2,125,5,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,4,124,3,124,5,171,3, - 0,0,0,0,0,0,125,6,124,6,100,2,122,1,0,0, - 100,3,107,55,0,0,125,7,124,7,114,123,124,6,100,4, - 122,1,0,0,100,3,107,55,0,0,125,8,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,5,107,55,0,0, - 114,179,124,8,115,19,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,6,107,40,0,0,114,158,116,9,0,0, - 0,0,0,0,0,0,124,0,124,2,171,2,0,0,0,0, - 0,0,125,9,124,9,129,144,116,5,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,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,124,9,171,2,0,0,0,0,0,0,125,10, - 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,124,4, - 124,10,124,3,124,5,171,4,0,0,0,0,0,0,1,0, - 110,83,116,17,0,0,0,0,0,0,0,0,124,0,124,2, - 171,2,0,0,0,0,0,0,92,2,0,0,125,11,125,12, - 124,11,114,66,116,19,0,0,0,0,0,0,0,0,116,21, - 0,0,0,0,0,0,0,0,124,4,100,7,100,8,26,0, - 171,1,0,0,0,0,0,0,124,11,171,2,0,0,0,0, - 0,0,114,17,116,21,0,0,0,0,0,0,0,0,124,4, - 100,8,100,9,26,0,171,1,0,0,0,0,0,0,124,12, - 107,55,0,0,114,25,116,23,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,100,10,124,3,155,2,157,2,171,1,0,0, - 0,0,0,0,1,0,121,0,116,27,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,100,9,100,0,26,0,171,1, - 0,0,0,0,0,0,125,13,116,31,0,0,0,0,0,0, - 0,0,124,13,116,32,0,0,0,0,0,0,0,0,171,2, - 0,0,0,0,0,0,115,15,116,35,0,0,0,0,0,0, - 0,0,100,11,124,1,155,2,100,12,157,3,171,1,0,0, - 0,0,0,0,130,1,124,13,83,0,41,13,78,41,2,114, - 49,0,0,0,114,18,0,0,0,114,6,0,0,0,114,1, - 0,0,0,114,126,0,0,0,218,5,110,101,118,101,114,218, - 6,97,108,119,97,121,115,114,142,0,0,0,114,137,0,0, - 0,114,138,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,122,16, - 99,111,109,112,105,108,101,100,32,109,111,100,117,108,101,32, - 122,21,32,105,115,32,110,111,116,32,97,32,99,111,100,101, - 32,111,98,106,101,99,116,41,18,114,27,0,0,0,218,13, - 95,99,108,97,115,115,105,102,121,95,112,121,99,218,4,95, - 105,109,112,218,21,99,104,101,99,107,95,104,97,115,104,95, - 98,97,115,101,100,95,112,121,99,115,218,15,95,103,101,116, - 95,112,121,99,95,115,111,117,114,99,101,218,11,115,111,117, - 114,99,101,95,104,97,115,104,218,17,95,82,65,87,95,77, - 65,71,73,67,95,78,85,77,66,69,82,218,18,95,118,97, - 108,105,100,97,116,101,95,104,97,115,104,95,112,121,99,218, - 29,95,103,101,116,95,109,116,105,109,101,95,97,110,100,95, - 115,105,122,101,95,111,102,95,115,111,117,114,99,101,114,207, - 0,0,0,114,3,0,0,0,114,52,0,0,0,114,108,0, - 0,0,218,7,109,97,114,115,104,97,108,218,5,108,111,97, - 100,115,114,20,0,0,0,218,10,95,99,111,100,101,95,116, - 121,112,101,114,22,0,0,0,41,14,114,41,0,0,0,114, - 76,0,0,0,114,89,0,0,0,114,58,0,0,0,114,174, - 0,0,0,218,11,101,120,99,95,100,101,116,97,105,108,115, - 114,180,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,218, - 12,115,111,117,114,99,101,95,98,121,116,101,115,114,215,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,68,0, - 0,0,115,14,0,0,0,32,32,32,32,32,32,32,32,32, - 32,32,32,32,32,114,13,0,0,0,218,15,95,117,110,109, - 97,114,115,104,97,108,95,99,111,100,101,114,228,0,0,0, - 71,2,0,0,115,65,1,0,0,128,0,224,16,24,216,16, - 24,241,5,3,19,6,128,75,244,10,0,13,32,215,12,45, - 209,12,45,168,100,176,72,184,107,211,12,74,128,69,224,17, - 22,152,19,145,27,160,1,209,17,33,128,74,217,7,17,216, - 23,28,152,116,145,124,160,113,209,23,40,136,12,220,12,16, - 215,12,38,209,12,38,168,39,210,12,49,217,17,29,164,20, - 215,33,59,209,33,59,184,120,210,33,71,220,27,42,168,52, - 176,24,211,27,58,136,76,216,15,27,208,15,39,220,30,34, - 215,30,46,209,30,46,220,20,39,215,20,57,209,20,57,216, - 20,32,243,5,3,31,18,144,11,244,10,0,17,36,215,16, - 54,209,16,54,216,20,24,152,43,160,120,176,27,245,3,1, - 17,62,244,8,0,13,42,168,36,176,8,211,12,57,241,3, - 0,9,34,136,12,144,107,241,6,0,12,24,244,6,0,21, - 30,156,110,168,84,176,33,176,66,168,90,211,30,56,184,44, - 212,20,71,220,20,34,160,52,168,2,168,50,160,59,211,20, - 47,176,59,210,20,62,220,16,26,215,16,43,209,16,43,216, - 22,44,168,88,168,76,208,20,57,244,3,1,17,59,224,23, - 27,228,11,18,143,61,137,61,152,20,152,98,152,99,152,25, - 211,11,35,128,68,220,11,21,144,100,156,74,212,11,39,220, - 14,23,208,26,42,168,56,168,44,208,54,75,208,24,76,211, - 14,77,208,8,77,216,11,15,128,75,114,12,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,78,0,0,0,151,0,124,0,106,1,0, + 1,0,89,0,1,0,1,0,144,1,140,56,120,3,89,0, + 119,1,41,34,78,122,21,99,97,110,39,116,32,111,112,101, + 110,32,90,105,112,32,102,105,108,101,58,32,114,17,0,0, + 0,114,126,0,0,0,250,21,99,97,110,39,116,32,114,101, + 97,100,32,90,105,112,32,102,105,108,101,58,32,233,4,0, + 0,0,114,1,0,0,0,122,16,110,111,116,32,97,32,90, + 105,112,32,102,105,108,101,58,32,122,18,99,111,114,114,117, + 112,116,32,90,105,112,32,102,105,108,101,58,32,233,12,0, + 0,0,233,16,0,0,0,233,20,0,0,0,122,28,98,97, + 100,32,99,101,110,116,114,97,108,32,100,105,114,101,99,116, + 111,114,121,32,115,105,122,101,58,32,122,30,98,97,100,32, + 99,101,110,116,114,97,108,32,100,105,114,101,99,116,111,114, + 121,32,111,102,102,115,101,116,58,32,122,38,98,97,100,32, + 99,101,110,116,114,97,108,32,100,105,114,101,99,116,111,114, + 121,32,115,105,122,101,32,111,114,32,111,102,102,115,101,116, + 58,32,233,46,0,0,0,250,27,69,79,70,32,114,101,97, + 100,32,119,104,101,114,101,32,110,111,116,32,101,120,112,101, + 99,116,101,100,115,4,0,0,0,80,75,1,2,233,8,0, + 0,0,233,10,0,0,0,233,14,0,0,0,233,24,0,0, + 0,233,28,0,0,0,233,30,0,0,0,233,32,0,0,0, + 233,34,0,0,0,233,42,0,0,0,122,25,98,97,100,32, + 108,111,99,97,108,32,104,101,97,100,101,114,32,111,102,102, + 115,101,116,58,32,105,0,8,0,0,218,5,97,115,99,105, + 105,218,6,108,97,116,105,110,49,218,1,47,114,6,0,0, + 0,122,33,122,105,112,105,109,112,111,114,116,58,32,102,111, + 117,110,100,32,123,125,32,110,97,109,101,115,32,105,110,32, + 123,33,114,125,41,26,218,3,95,105,111,218,9,111,112,101, + 110,95,99,111,100,101,114,30,0,0,0,114,4,0,0,0, + 218,4,116,101,108,108,218,4,115,101,101,107,218,20,69,78, + 68,95,67,69,78,84,82,65,76,95,68,73,82,95,83,73, + 90,69,218,4,114,101,97,100,114,74,0,0,0,218,18,83, + 84,82,73,78,71,95,69,78,68,95,65,82,67,72,73,86, + 69,218,3,109,97,120,218,15,77,65,88,95,67,79,77,77, + 69,78,84,95,76,69,78,218,5,114,102,105,110,100,114,3, + 0,0,0,218,8,69,79,70,69,114,114,111,114,114,2,0, + 0,0,114,87,0,0,0,218,18,85,110,105,99,111,100,101, + 68,101,99,111,100,101,69,114,114,111,114,218,9,116,114,97, + 110,115,108,97,116,101,218,11,99,112,52,51,55,95,116,97, + 98,108,101,114,25,0,0,0,114,26,0,0,0,114,27,0, + 0,0,114,39,0,0,0,114,52,0,0,0,114,108,0,0, + 0,41,27,114,38,0,0,0,218,2,102,112,218,12,115,116, + 97,114,116,95,111,102,102,115,101,116,218,15,104,101,97,100, + 101,114,95,112,111,115,105,116,105,111,110,218,6,98,117,102, + 102,101,114,218,9,102,105,108,101,95,115,105,122,101,218,17, + 109,97,120,95,99,111,109,109,101,110,116,95,115,116,97,114, + 116,218,4,100,97,116,97,218,3,112,111,115,218,11,104,101, + 97,100,101,114,95,115,105,122,101,218,13,104,101,97,100,101, + 114,95,111,102,102,115,101,116,218,10,97,114,99,95,111,102, + 102,115,101,116,114,45,0,0,0,218,5,99,111,117,110,116, + 218,5,102,108,97,103,115,218,8,99,111,109,112,114,101,115, + 115,218,4,116,105,109,101,218,4,100,97,116,101,218,3,99, + 114,99,218,9,100,97,116,97,95,115,105,122,101,218,9,110, + 97,109,101,95,115,105,122,101,218,10,101,120,116,114,97,95, + 115,105,122,101,218,12,99,111,109,109,101,110,116,95,115,105, + 122,101,218,11,102,105,108,101,95,111,102,102,115,101,116,114, + 49,0,0,0,114,18,0,0,0,218,1,116,115,27,0,0, + 0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, + 32,32,32,32,32,32,32,32,32,32,32,32,114,13,0,0, + 0,114,36,0,0,0,114,36,0,0,0,79,1,0,0,115, + 213,5,0,0,128,0,240,2,3,5,80,1,220,13,16,143, + 93,137,93,152,55,211,13,35,136,2,242,8,0,10,12,240, + 8,0,24,26,151,119,145,119,147,121,136,12,240,2,110,1, + 9,34,240,2,5,13,88,1,216,16,18,151,7,145,7,212, + 25,45,208,24,45,168,113,212,16,49,216,34,36,167,39,161, + 39,163,41,144,15,216,25,27,159,23,153,23,212,33,53,211, + 25,54,144,6,244,6,0,16,19,144,54,139,123,212,30,50, + 210,15,50,220,22,36,208,39,60,184,87,184,75,208,37,72, + 200,119,212,22,87,208,16,87,216,15,21,144,98,144,113,136, + 122,212,29,47,210,15,47,240,6,5,17,55,216,20,22,151, + 71,145,71,152,65,152,113,148,77,216,32,34,167,7,161,7, + 163,9,144,73,244,8,0,37,40,168,9,180,79,209,40,67, + 220,40,60,241,3,1,41,61,216,62,63,243,3,1,37,65, + 1,208,16,33,240,4,5,17,55,216,20,22,151,71,145,71, + 208,28,45,212,20,46,216,27,29,159,55,153,55,155,57,144, + 68,240,8,0,23,27,151,106,145,106,212,33,51,211,22,52, + 144,3,216,19,22,152,17,146,55,220,26,40,208,43,59,184, + 71,184,59,208,41,71,216,46,53,244,3,1,27,55,240,0, + 1,21,55,224,25,29,152,99,160,35,212,38,58,209,34,58, + 208,25,59,144,6,220,19,22,144,118,147,59,212,34,54,210, + 19,54,220,26,40,208,43,61,184,103,184,91,208,41,73,216, + 46,53,244,3,1,27,55,240,0,1,21,55,224,34,43,172, + 99,176,36,171,105,209,34,55,184,35,209,34,61,144,15,228, + 26,40,168,22,176,2,176,50,168,29,211,26,55,136,75,220, + 28,42,168,54,176,34,176,82,168,61,211,28,57,136,77,216, + 15,30,160,27,210,15,44,220,22,36,208,39,67,192,71,192, + 59,208,37,79,208,86,93,212,22,94,208,16,94,216,15,30, + 160,29,210,15,46,220,22,36,208,39,69,192,103,192,91,208, + 37,81,208,88,95,212,22,96,208,16,96,216,12,27,152,123, + 209,12,42,136,79,216,25,40,168,61,209,25,56,136,74,216, + 15,25,152,65,138,126,220,22,36,208,39,77,200,103,200,91, + 208,37,89,208,96,103,212,22,104,208,16,104,224,20,22,136, + 69,224,20,21,136,69,240,2,3,13,88,1,216,16,18,151, + 7,145,7,152,15,212,16,40,240,6,0,19,23,216,25,27, + 159,23,153,23,160,18,155,27,144,6,220,19,22,144,118,147, + 59,160,17,146,63,220,26,34,208,35,64,211,26,65,208,20, + 65,224,19,25,152,34,152,49,144,58,160,29,210,19,46,217, + 20,25,220,19,22,144,118,147,59,160,34,210,19,36,220,26, + 34,208,35,64,211,26,65,208,20,65,220,24,38,160,118,168, + 97,176,2,160,124,211,24,52,144,5,220,27,41,168,38,176, + 18,176,66,168,45,211,27,56,144,8,220,23,37,160,102,168, + 82,176,2,160,109,211,23,52,144,4,220,23,37,160,102,168, + 82,176,2,160,109,211,23,52,144,4,220,22,36,160,86,168, + 66,168,114,160,93,211,22,51,144,3,220,28,42,168,54,176, + 34,176,82,168,61,211,28,57,144,9,220,28,42,168,54,176, + 34,176,82,168,61,211,28,57,144,9,220,28,42,168,54,176, + 34,176,82,168,61,211,28,57,144,9,220,29,43,168,70,176, + 50,176,98,168,77,211,29,58,144,10,220,31,45,168,102,176, + 82,184,2,168,109,211,31,60,144,12,220,30,44,168,86,176, + 66,176,114,168,93,211,30,59,144,11,216,30,39,168,42,209, + 30,52,176,124,209,30,67,144,11,216,19,30,160,29,210,19, + 46,220,26,40,208,43,68,192,87,192,75,208,41,80,208,87, + 94,212,26,95,208,20,95,216,16,27,152,122,209,16,41,144, + 11,240,4,3,17,92,1,216,27,29,159,55,153,55,160,57, + 211,27,45,144,68,244,6,0,20,23,144,116,147,57,160,9, + 210,19,41,220,26,40,208,43,64,192,23,192,11,208,41,76, + 208,83,90,212,26,91,208,20,91,240,8,4,17,92,1,220, + 23,26,152,50,159,55,153,55,160,59,176,25,209,35,58,211, + 27,59,211,23,60,192,11,200,105,209,64,87,210,23,87,220, + 30,44,208,47,68,192,87,192,75,208,45,80,208,87,94,212, + 30,95,208,24,95,240,3,0,24,88,1,240,10,0,20,25, + 152,53,146,61,224,27,31,159,59,153,59,155,61,145,68,240, + 6,3,21,76,1,216,31,35,159,123,153,123,168,55,211,31, + 51,152,4,240,8,0,24,28,151,124,145,124,160,67,172,24, + 211,23,50,144,4,220,23,42,215,23,53,209,23,53,176,103, + 184,116,211,23,68,144,4,216,21,25,152,56,160,89,176,9, + 184,59,200,4,200,100,208,84,87,208,20,88,144,1,216,30, + 31,144,5,144,100,145,11,216,16,21,152,17,145,10,144,5, + 241,109,1,0,19,23,240,12,0,21,26,240,100,1,0,13, + 15,143,71,137,71,144,76,213,12,33,247,103,3,0,10,12, + 244,104,3,0,5,15,215,4,31,209,4,31,208,32,67,192, + 85,200,71,212,4,84,216,11,16,128,76,248,244,113,3,0, + 12,19,242,0,1,5,80,1,220,14,28,208,31,52,176,87, + 176,75,208,29,64,192,119,212,14,79,208,8,79,240,3,1, + 5,80,1,251,244,26,0,20,27,242,0,1,13,88,1,220, + 22,36,208,39,60,184,87,184,75,208,37,72,200,119,212,22, + 87,208,16,87,240,3,1,13,88,1,251,244,20,0,24,31, + 242,0,2,17,55,220,26,40,208,43,64,192,23,192,11,208, + 41,76,216,46,53,244,3,1,27,55,240,0,1,21,55,240, + 3,2,17,55,251,244,16,0,24,31,242,0,2,17,55,220, + 26,40,208,43,64,192,23,192,11,208,41,76,216,46,53,244, + 3,1,27,55,240,0,1,21,55,240,3,2,17,55,251,244, + 58,0,20,27,242,0,1,13,88,1,220,22,36,208,39,60, + 184,87,184,75,208,37,72,200,119,212,22,87,208,16,87,240, + 3,1,13,88,1,251,244,58,0,24,31,242,0,1,17,92, + 1,220,26,40,208,43,64,192,23,192,11,208,41,76,208,83, + 90,212,26,91,208,20,91,240,3,1,17,92,1,251,244,20, + 0,24,31,242,0,1,17,92,1,220,26,40,208,43,64,192, + 23,192,11,208,41,76,208,83,90,212,26,91,208,20,91,240, + 3,1,17,92,1,251,244,20,0,28,46,242,0,1,21,76, + 1,216,31,35,159,123,153,123,168,56,211,31,52,215,31,62, + 209,31,62,188,123,211,31,75,155,4,240,3,1,21,76,1, + 251,240,18,0,13,15,143,71,137,71,144,76,213,12,33,250, + 247,103,3,0,10,12,137,18,250,115,222,0,0,0,130,21, + 79,38,0,153,17,83,59,3,172,60,80,3,2,193,40,46, + 83,37,2,194,23,34,80,32,2,194,57,26,83,37,2,195, + 20,33,80,61,2,195,53,67,18,83,37,2,199,8,17,81, + 26,2,199,25,68,10,83,37,2,203,36,17,81,55,2,203, + 53,30,83,37,2,204,20,51,82,20,2,205,7,23,83,37, + 2,205,31,17,82,49,2,205,48,65,2,83,37,2,206,51, + 17,83,59,3,207,38,26,80,0,3,208,3,26,80,29,5, + 208,29,3,83,37,2,208,32,26,80,58,5,208,58,3,83, + 37,2,208,61,26,81,23,5,209,23,3,83,37,2,209,26, + 26,81,52,5,209,52,3,83,37,2,209,55,26,82,17,5, + 210,17,3,83,37,2,210,20,26,82,46,5,210,46,3,83, + 37,2,210,49,45,83,34,5,211,30,3,83,37,2,211,33, + 1,83,34,5,211,34,3,83,37,2,211,37,19,83,56,5, + 211,56,3,83,59,3,211,59,5,84,5,7,117,190,1,0, + 0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, + 15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30, + 31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46, + 47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62, + 63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78, + 79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94, + 95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110, + 111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126, + 127,195,135,195,188,195,169,195,162,195,164,195,160,195,165,195, + 167,195,170,195,171,195,168,195,175,195,174,195,172,195,132,195, + 133,195,137,195,166,195,134,195,180,195,182,195,178,195,187,195, + 185,195,191,195,150,195,156,194,162,194,163,194,165,226,130,167, + 198,146,195,161,195,173,195,179,195,186,195,177,195,145,194,170, + 194,186,194,191,226,140,144,194,172,194,189,194,188,194,161,194, + 171,194,187,226,150,145,226,150,146,226,150,147,226,148,130,226, + 148,164,226,149,161,226,149,162,226,149,150,226,149,149,226,149, + 163,226,149,145,226,149,151,226,149,157,226,149,156,226,149,155, + 226,148,144,226,148,148,226,148,180,226,148,172,226,148,156,226, + 148,128,226,148,188,226,149,158,226,149,159,226,149,154,226,149, + 148,226,149,169,226,149,166,226,149,160,226,149,144,226,149,172, + 226,149,167,226,149,168,226,149,164,226,149,165,226,149,153,226, + 149,152,226,149,146,226,149,147,226,149,171,226,149,170,226,148, + 152,226,148,140,226,150,136,226,150,132,226,150,140,226,150,144, + 226,150,128,206,177,195,159,206,147,207,128,206,163,207,131,194, + 181,207,132,206,166,206,152,206,169,206,180,226,136,158,207,134, + 206,181,226,136,169,226,137,161,194,177,226,137,165,226,137,164, + 226,140,160,226,140,161,195,183,226,137,136,194,176,226,136,153, + 194,183,226,136,154,226,129,191,194,178,226,150,160,194,160,99, + 0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, + 3,0,0,0,243,252,0,0,0,151,0,116,0,0,0,0, + 0,0,0,0,0,114,32,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,100,1,171,1,0,0,0,0,0,0,1, + 0,116,7,0,0,0,0,0,0,0,0,100,2,171,1,0, + 0,0,0,0,0,130,1,100,3,97,0,9,0,100,4,100, + 5,108,4,109,5,125,0,1,0,9,0,100,6,97,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,100,7,171, + 1,0,0,0,0,0,0,1,0,124,0,83,0,35,0,116, + 12,0,0,0,0,0,0,0,0,36,0,114,33,1,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,100,1,171, + 1,0,0,0,0,0,0,1,0,116,7,0,0,0,0,0, + 0,0,0,100,2,171,1,0,0,0,0,0,0,130,1,119, + 0,120,3,89,0,119,1,35,0,100,6,97,0,119,0,120, + 3,89,0,119,1,41,8,78,122,27,122,105,112,105,109,112, + 111,114,116,58,32,122,108,105,98,32,85,78,65,86,65,73, + 76,65,66,76,69,250,41,99,97,110,39,116,32,100,101,99, + 111,109,112,114,101,115,115,32,100,97,116,97,59,32,122,108, + 105,98,32,110,111,116,32,97,118,97,105,108,97,98,108,101, + 84,114,1,0,0,0,169,1,218,10,100,101,99,111,109,112, + 114,101,115,115,70,122,25,122,105,112,105,109,112,111,114,116, + 58,32,122,108,105,98,32,97,118,97,105,108,97,98,108,101, + 41,7,218,15,95,105,109,112,111,114,116,105,110,103,95,122, + 108,105,98,114,52,0,0,0,114,108,0,0,0,114,4,0, + 0,0,218,4,122,108,105,98,114,194,0,0,0,218,9,69, + 120,99,101,112,116,105,111,110,114,193,0,0,0,115,1,0, + 0,0,32,114,13,0,0,0,218,20,95,103,101,116,95,100, + 101,99,111,109,112,114,101,115,115,95,102,117,110,99,114,198, + 0,0,0,244,1,0,0,115,129,0,0,0,128,0,229,7, + 22,244,6,0,9,19,215,8,35,209,8,35,208,36,65,212, + 8,66,220,14,28,208,29,72,211,14,73,208,8,73,224,22, + 26,128,79,240,2,6,5,32,222,8,35,240,10,0,27,32, + 136,15,228,4,14,215,4,31,209,4,31,208,32,59,212,4, + 60,216,11,21,208,4,21,248,244,15,0,12,21,242,0,2, + 5,74,1,220,8,18,215,8,35,209,8,35,208,36,65,212, + 8,66,220,14,28,208,29,72,211,14,73,208,8,73,240,5, + 2,5,74,1,251,240,8,0,27,32,137,15,250,115,23,0, + 0,0,170,6,65,10,0,193,10,42,65,52,3,193,52,3, + 65,55,0,193,55,4,65,59,3,99,2,0,0,0,0,0, + 0,0,0,0,0,0,8,0,0,0,3,0,0,0,243,218, + 2,0,0,151,0,124,1,92,8,0,0,125,2,125,3,125, + 4,125,5,125,6,125,7,125,8,125,9,124,4,100,1,107, + 2,0,0,114,11,116,1,0,0,0,0,0,0,0,0,100, + 2,171,1,0,0,0,0,0,0,130,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,53,0,125,10,9,0,124,10,106,7,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,1,0,124,10,106,11,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,125,0,124, - 0,106,1,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,100,3,100,2,171,2,0,0,0,0,0, - 0,125,0,124,0,83,0,41,4,78,115,2,0,0,0,13, - 10,243,1,0,0,0,10,243,1,0,0,0,13,41,1,114, - 25,0,0,0,41,1,218,6,115,111,117,114,99,101,115,1, - 0,0,0,32,114,13,0,0,0,218,23,95,110,111,114,109, - 97,108,105,122,101,95,108,105,110,101,95,101,110,100,105,110, - 103,115,114,233,0,0,0,116,2,0,0,115,39,0,0,0, - 128,0,216,13,19,143,94,137,94,152,71,160,85,211,13,43, - 128,70,216,13,19,143,94,137,94,152,69,160,53,211,13,41, - 128,70,216,11,17,128,77,114,12,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,54,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,1,116,3, - 0,0,0,0,0,0,0,0,124,1,124,0,100,1,100,2, - 172,3,171,4,0,0,0,0,0,0,83,0,41,4,78,114, - 106,0,0,0,84,41,1,218,12,100,111,110,116,95,105,110, - 104,101,114,105,116,41,2,114,233,0,0,0,218,7,99,111, - 109,112,105,108,101,41,2,114,76,0,0,0,114,232,0,0, - 0,115,2,0,0,0,32,32,114,13,0,0,0,218,15,95, - 99,111,109,112,105,108,101,95,115,111,117,114,99,101,114,237, - 0,0,0,123,2,0,0,115,29,0,0,0,128,0,220,13, - 36,160,86,211,13,44,128,70,220,11,18,144,54,152,56,160, - 86,184,36,212,11,63,208,4,63,114,12,0,0,0,99,2, - 0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,3, - 0,0,0,243,122,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,100,1,122,9,0,0, - 100,2,122,0,0,0,124,0,100,3,122,9,0,0,100,4, - 122,1,0,0,124,0,100,5,122,1,0,0,124,1,100,6, - 122,9,0,0,124,1,100,3,122,9,0,0,100,7,122,1, - 0,0,124,1,100,5,122,1,0,0,100,8,122,5,0,0, - 100,9,100,9,100,9,102,9,171,1,0,0,0,0,0,0, - 83,0,41,10,78,233,9,0,0,0,105,188,7,0,0,233, - 5,0,0,0,233,15,0,0,0,233,31,0,0,0,233,11, - 0,0,0,233,63,0,0,0,114,126,0,0,0,114,19,0, - 0,0,41,2,114,182,0,0,0,218,6,109,107,116,105,109, - 101,41,2,218,1,100,114,190,0,0,0,115,2,0,0,0, - 32,32,114,13,0,0,0,218,14,95,112,97,114,115,101,95, - 100,111,115,116,105,109,101,114,247,0,0,0,129,2,0,0, - 115,89,0,0,0,128,0,220,11,15,143,59,137,59,216,9, - 10,136,97,137,22,144,52,137,15,216,9,10,136,97,137,22, - 144,51,137,14,216,8,9,136,68,137,8,216,8,9,136,82, - 137,7,216,9,10,136,97,137,22,144,52,137,15,216,9,10, - 136,84,137,24,144,81,137,14,216,8,10,136,66,144,2,240, - 15,7,24,20,243,0,7,12,21,240,0,7,5,21,114,12, - 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,172,0,0,0,151,0,9, - 0,124,1,100,1,100,0,26,0,100,2,118,0,115,2,74, - 0,130,1,124,1,100,0,100,1,26,0,125,1,124,0,106, + 0,100,5,171,1,0,0,0,0,0,0,125,11,116,13,0, + 0,0,0,0,0,0,0,124,11,171,1,0,0,0,0,0, + 0,100,5,107,55,0,0,114,11,116,15,0,0,0,0,0, + 0,0,0,100,6,171,1,0,0,0,0,0,0,130,1,124, + 11,100,0,100,7,26,0,100,8,107,55,0,0,114,16,116, + 1,0,0,0,0,0,0,0,0,100,9,124,0,155,2,157, + 2,124,0,172,4,171,2,0,0,0,0,0,0,130,1,116, + 17,0,0,0,0,0,0,0,0,124,11,100,10,100,11,26, + 0,171,1,0,0,0,0,0,0,125,12,116,17,0,0,0, + 0,0,0,0,0,124,11,100,11,100,5,26,0,171,1,0, + 0,0,0,0,0,125,13,100,5,124,12,122,0,0,0,124, + 13,122,0,0,0,125,14,124,6,124,14,122,13,0,0,125, + 6,9,0,124,10,106,7,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,1,0,124,10,106,11,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,15,116,13,0,0,0,0,0,0,0, + 0,124,15,171,1,0,0,0,0,0,0,124,4,107,55,0, + 0,114,11,116,9,0,0,0,0,0,0,0,0,100,12,171, + 1,0,0,0,0,0,0,130,1,9,0,100,0,100,0,100, + 0,171,2,0,0,0,0,0,0,1,0,124,3,100,1,107, + 40,0,0,114,2,127,15,83,0,9,0,116,19,0,0,0, + 0,0,0,0,0,171,0,0,0,0,0,0,0,125,16,2, + 0,124,16,127,15,100,14,171,2,0,0,0,0,0,0,83, + 0,35,0,116,8,0,0,0,0,0,0,0,0,36,0,114, + 17,1,0,116,1,0,0,0,0,0,0,0,0,100,3,124, + 0,155,2,157,2,124,0,172,4,171,2,0,0,0,0,0, + 0,130,1,119,0,120,3,89,0,119,1,35,0,116,8,0, + 0,0,0,0,0,0,0,36,0,114,17,1,0,116,1,0, + 0,0,0,0,0,0,0,100,3,124,0,155,2,157,2,124, + 0,172,4,171,2,0,0,0,0,0,0,130,1,119,0,120, + 3,89,0,119,1,35,0,49,0,115,1,119,2,1,0,89, + 0,1,0,1,0,140,94,120,3,89,0,119,1,35,0,116, + 20,0,0,0,0,0,0,0,0,36,0,114,12,1,0,116, + 1,0,0,0,0,0,0,0,0,100,13,171,1,0,0,0, + 0,0,0,130,1,119,0,120,3,89,0,119,1,41,15,78, + 114,1,0,0,0,122,18,110,101,103,97,116,105,118,101,32, + 100,97,116,97,32,115,105,122,101,114,135,0,0,0,114,17, + 0,0,0,114,147,0,0,0,114,141,0,0,0,114,136,0, + 0,0,115,4,0,0,0,80,75,3,4,122,23,98,97,100, + 32,108,111,99,97,108,32,102,105,108,101,32,104,101,97,100, + 101,114,58,32,233,26,0,0,0,114,146,0,0,0,122,26, + 122,105,112,105,109,112,111,114,116,58,32,99,97,110,39,116, + 32,114,101,97,100,32,100,97,116,97,114,192,0,0,0,105, + 241,255,255,255,41,11,114,4,0,0,0,114,154,0,0,0, + 114,155,0,0,0,114,157,0,0,0,114,30,0,0,0,114, + 159,0,0,0,114,74,0,0,0,114,164,0,0,0,114,2, + 0,0,0,114,198,0,0,0,114,197,0,0,0,41,17,114, + 38,0,0,0,114,78,0,0,0,218,8,100,97,116,97,112, + 97,116,104,114,181,0,0,0,114,185,0,0,0,114,172,0, + 0,0,114,189,0,0,0,114,182,0,0,0,114,183,0,0, + 0,114,184,0,0,0,114,168,0,0,0,114,171,0,0,0, + 114,186,0,0,0,114,187,0,0,0,114,176,0,0,0,218, + 8,114,97,119,95,100,97,116,97,114,194,0,0,0,115,17, + 0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,32, + 32,32,32,32,114,13,0,0,0,114,75,0,0,0,114,75, + 0,0,0,9,2,0,0,115,179,1,0,0,128,0,216,77, + 86,209,4,74,128,72,136,104,152,9,160,57,168,107,184,52, + 192,20,192,115,216,7,16,144,49,130,125,220,14,28,208,29, + 49,211,14,50,208,8,50,228,9,12,143,29,137,29,144,119, + 212,9,31,160,50,240,4,3,9,84,1,216,12,14,143,71, + 137,71,144,75,212,12,32,240,6,0,18,20,151,23,145,23, + 152,18,147,27,136,6,220,11,14,136,118,139,59,152,34,210, + 11,28,220,18,26,208,27,56,211,18,57,208,12,57,224,11, + 17,144,34,144,49,136,58,152,29,210,11,38,228,18,32,208, + 35,58,184,55,184,43,208,33,70,200,87,212,18,85,208,12, + 85,228,20,34,160,54,168,34,168,82,160,61,211,20,49,136, + 9,220,21,35,160,70,168,50,168,98,160,77,211,21,50,136, + 10,216,22,24,152,57,145,110,160,122,209,22,49,136,11,216, + 8,19,144,123,209,8,34,136,11,240,2,3,9,84,1,216, + 12,14,143,71,137,71,144,75,212,12,32,240,6,0,20,22, + 151,55,145,55,152,57,211,19,37,136,8,220,11,14,136,120, + 139,61,152,73,210,11,37,220,18,25,208,26,54,211,18,55, + 208,12,55,240,3,0,12,38,247,47,0,10,32,240,52,0, + 8,16,144,49,130,125,224,15,23,136,15,240,6,3,5,74, + 1,220,21,41,211,21,43,136,10,241,6,0,12,22,144,104, + 160,3,211,11,36,208,4,36,248,244,63,0,16,23,242,0, + 1,9,84,1,220,18,32,208,35,56,184,23,184,11,208,33, + 68,200,55,212,18,83,208,12,83,240,3,1,9,84,1,251, + 244,32,0,16,23,242,0,1,9,84,1,220,18,32,208,35, + 56,184,23,184,11,208,33,68,200,55,212,18,83,208,12,83, + 240,3,1,9,84,1,250,247,41,0,10,32,208,9,31,251, + 244,66,1,0,12,21,242,0,1,5,74,1,220,14,28,208, + 29,72,211,14,73,208,8,73,240,3,1,5,74,1,250,115, + 71,0,0,0,177,1,69,9,3,179,17,68,15,2,193,4, + 65,43,69,9,3,194,48,17,68,44,2,195,1,42,69,9, + 3,195,60,10,69,21,0,196,15,26,68,41,5,196,41,3, + 69,9,3,196,44,26,69,6,5,197,6,3,69,9,3,197, + 9,5,69,18,7,197,21,21,69,42,3,99,2,0,0,0, + 0,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, + 243,36,0,0,0,151,0,116,1,0,0,0,0,0,0,0, + 0,124,0,124,1,122,10,0,0,171,1,0,0,0,0,0, + 0,100,1,107,26,0,0,83,0,41,2,78,114,6,0,0, + 0,41,1,218,3,97,98,115,41,2,218,2,116,49,218,2, + 116,50,115,2,0,0,0,32,32,114,13,0,0,0,218,9, + 95,101,113,95,109,116,105,109,101,114,207,0,0,0,55,2, + 0,0,115,21,0,0,0,128,0,228,11,14,136,114,144,66, + 137,119,139,60,152,49,209,11,28,208,4,28,114,12,0,0, + 0,99,5,0,0,0,0,0,0,0,0,0,0,0,7,0, + 0,0,3,0,0,0,243,92,2,0,0,151,0,124,3,124, + 2,100,1,156,2,125,5,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,4,124,3,124,5,171,3,0,0,0, + 0,0,0,125,6,124,6,100,2,122,1,0,0,100,3,107, + 55,0,0,125,7,124,7,114,123,124,6,100,4,122,1,0, + 0,100,3,107,55,0,0,125,8,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,5,107,55,0,0,114,179,124, + 8,115,19,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,0,0,124,1,25,0,0,0,125,2,124,2,100,3,25, - 0,0,0,125,3,124,2,100,4,25,0,0,0,125,4,124, - 2,100,5,25,0,0,0,125,5,116,3,0,0,0,0,0, - 0,0,0,124,4,124,3,171,2,0,0,0,0,0,0,124, - 5,102,2,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, - 6,119,0,120,3,89,0,119,1,41,7,78,114,19,0,0, - 0,169,2,218,1,99,218,1,111,114,240,0,0,0,233,6, - 0,0,0,233,3,0,0,0,41,2,114,1,0,0,0,114, - 1,0,0,0,41,5,114,37,0,0,0,114,247,0,0,0, - 114,35,0,0,0,218,10,73,110,100,101,120,69,114,114,111, - 114,114,22,0,0,0,41,6,114,41,0,0,0,114,18,0, - 0,0,114,78,0,0,0,114,182,0,0,0,114,183,0,0, - 0,218,17,117,110,99,111,109,112,114,101,115,115,101,100,95, - 115,105,122,101,115,6,0,0,0,32,32,32,32,32,32,114, - 13,0,0,0,114,218,0,0,0,114,218,0,0,0,142,2, - 0,0,115,126,0,0,0,128,0,240,2,12,5,20,224,15, - 19,144,66,144,67,136,121,152,74,209,15,38,208,8,38,208, - 15,38,216,15,19,144,67,144,82,136,121,136,4,216,20,24, - 151,75,145,75,160,4,209,20,37,136,9,240,6,0,16,25, - 152,17,137,124,136,4,216,15,24,152,17,137,124,136,4,216, - 28,37,160,97,153,76,208,8,25,220,15,29,152,100,160,68, - 211,15,41,208,43,60,208,15,60,208,8,60,248,220,12,20, - 148,106,164,41,208,11,44,242,0,1,5,20,217,15,19,240, - 3,1,5,20,250,115,15,0,0,0,130,57,60,0,188,20, - 65,19,3,193,18,1,65,19,3,99,2,0,0,0,0,0, - 0,0,0,0,0,0,4,0,0,0,3,0,0,0,243,136, - 0,0,0,151,0,124,1,100,1,100,0,26,0,100,2,118, - 0,115,2,74,0,130,1,124,1,100,0,100,1,26,0,125, - 1,9,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,25,0,0,0,125, - 2,116,3,0,0,0,0,0,0,0,0,124,0,106,4,0, + 0,100,6,107,40,0,0,114,158,116,9,0,0,0,0,0, + 0,0,0,124,0,124,2,171,2,0,0,0,0,0,0,125, + 9,124,9,129,144,116,5,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,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,124,2,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,3,1,0,89, - 0,121,0,119,0,120,3,89,0,119,1,41,3,78,114,19, - 0,0,0,114,249,0,0,0,41,4,114,37,0,0,0,114, - 75,0,0,0,114,38,0,0,0,114,35,0,0,0,41,3, - 114,41,0,0,0,114,18,0,0,0,114,78,0,0,0,115, - 3,0,0,0,32,32,32,114,13,0,0,0,114,214,0,0, - 0,114,214,0,0,0,161,2,0,0,115,91,0,0,0,128, - 0,224,11,15,144,2,144,3,136,57,152,10,209,11,34,208, - 4,34,208,11,34,216,11,15,144,3,144,18,136,57,128,68, - 240,4,5,5,50,216,20,24,151,75,145,75,160,4,209,20, - 37,136,9,244,8,0,16,25,152,20,159,28,153,28,160,121, - 211,15,49,208,8,49,248,244,7,0,12,20,242,0,1,5, - 20,217,15,19,240,3,1,5,20,250,115,15,0,0,0,144, - 15,53,0,181,9,65,1,3,193,0,1,65,1,3,99,2, - 0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,3, - 0,0,0,243,226,1,0,0,151,0,116,1,0,0,0,0, - 0,0,0,0,124,0,124,1,171,2,0,0,0,0,0,0, - 125,2,100,0,125,3,116,2,0,0,0,0,0,0,0,0, - 68,0,93,141,0,0,92,3,0,0,125,4,125,5,125,6, - 124,2,124,4,122,0,0,0,125,7,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,1,124,0,106,8,0,0, + 0,124,9,171,2,0,0,0,0,0,0,125,10,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,124,4,124,10,124, + 3,124,5,171,4,0,0,0,0,0,0,1,0,110,83,116, + 17,0,0,0,0,0,0,0,0,124,0,124,2,171,2,0, + 0,0,0,0,0,92,2,0,0,125,11,125,12,124,11,114, + 66,116,19,0,0,0,0,0,0,0,0,116,21,0,0,0, + 0,0,0,0,0,124,4,100,7,100,8,26,0,171,1,0, + 0,0,0,0,0,124,11,171,2,0,0,0,0,0,0,114, + 17,116,21,0,0,0,0,0,0,0,0,124,4,100,8,100, + 9,26,0,171,1,0,0,0,0,0,0,124,12,107,55,0, + 0,114,25,116,23,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,10,0,0,0,0,0,0,0,0,124,7,100,2,172,3, - 171,5,0,0,0,0,0,0,1,0,9,0,124,0,106,12, + 0,100,10,124,3,155,2,157,2,171,1,0,0,0,0,0, + 0,1,0,121,0,116,27,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,100,9,100,0,26,0,171,1,0,0,0, + 0,0,0,125,13,116,31,0,0,0,0,0,0,0,0,124, + 13,116,32,0,0,0,0,0,0,0,0,171,2,0,0,0, + 0,0,0,115,15,116,35,0,0,0,0,0,0,0,0,100, + 11,124,1,155,2,100,12,157,3,171,1,0,0,0,0,0, + 0,130,1,124,13,83,0,41,13,78,41,2,114,49,0,0, + 0,114,18,0,0,0,114,6,0,0,0,114,1,0,0,0, + 114,126,0,0,0,218,5,110,101,118,101,114,218,6,97,108, + 119,97,121,115,114,142,0,0,0,114,137,0,0,0,114,138, + 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,122,16,99,111,109, + 112,105,108,101,100,32,109,111,100,117,108,101,32,122,21,32, + 105,115,32,110,111,116,32,97,32,99,111,100,101,32,111,98, + 106,101,99,116,41,18,114,27,0,0,0,218,13,95,99,108, + 97,115,115,105,102,121,95,112,121,99,218,4,95,105,109,112, + 218,21,99,104,101,99,107,95,104,97,115,104,95,98,97,115, + 101,100,95,112,121,99,115,218,15,95,103,101,116,95,112,121, + 99,95,115,111,117,114,99,101,218,11,115,111,117,114,99,101, + 95,104,97,115,104,218,17,95,82,65,87,95,77,65,71,73, + 67,95,78,85,77,66,69,82,218,18,95,118,97,108,105,100, + 97,116,101,95,104,97,115,104,95,112,121,99,218,29,95,103, + 101,116,95,109,116,105,109,101,95,97,110,100,95,115,105,122, + 101,95,111,102,95,115,111,117,114,99,101,114,207,0,0,0, + 114,3,0,0,0,114,52,0,0,0,114,108,0,0,0,218, + 7,109,97,114,115,104,97,108,218,5,108,111,97,100,115,114, + 20,0,0,0,218,10,95,99,111,100,101,95,116,121,112,101, + 114,22,0,0,0,41,14,114,41,0,0,0,114,76,0,0, + 0,114,89,0,0,0,114,58,0,0,0,114,174,0,0,0, + 218,11,101,120,99,95,100,101,116,97,105,108,115,114,180,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,218,12,115,111, + 117,114,99,101,95,98,121,116,101,115,114,215,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,68,0,0,0,115, + 14,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32, + 32,32,114,13,0,0,0,218,15,95,117,110,109,97,114,115, + 104,97,108,95,99,111,100,101,114,228,0,0,0,63,2,0, + 0,115,65,1,0,0,128,0,224,16,24,216,16,24,241,5, + 3,19,6,128,75,244,10,0,13,32,215,12,45,209,12,45, + 168,100,176,72,184,107,211,12,74,128,69,224,17,22,152,19, + 145,27,160,1,209,17,33,128,74,217,7,17,216,23,28,152, + 116,145,124,160,113,209,23,40,136,12,220,12,16,215,12,38, + 209,12,38,168,39,210,12,49,217,17,29,164,20,215,33,59, + 209,33,59,184,120,210,33,71,220,27,42,168,52,176,24,211, + 27,58,136,76,216,15,27,208,15,39,220,30,34,215,30,46, + 209,30,46,220,20,39,215,20,57,209,20,57,216,20,32,243, + 5,3,31,18,144,11,244,10,0,17,36,215,16,54,209,16, + 54,216,20,24,152,43,160,120,176,27,245,3,1,17,62,244, + 8,0,13,42,168,36,176,8,211,12,57,241,3,0,9,34, + 136,12,144,107,241,6,0,12,24,244,6,0,21,30,156,110, + 168,84,176,33,176,66,168,90,211,30,56,184,44,212,20,71, + 220,20,34,160,52,168,2,168,50,160,59,211,20,47,176,59, + 210,20,62,220,16,26,215,16,43,209,16,43,216,22,44,168, + 88,168,76,208,20,57,244,3,1,17,59,224,23,27,228,11, + 18,143,61,137,61,152,20,152,98,152,99,152,25,211,11,35, + 128,68,220,11,21,144,100,156,74,212,11,39,220,14,23,208, + 26,42,168,56,168,44,208,54,75,208,24,76,211,14,77,208, + 8,77,216,11,15,128,75,114,12,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,78,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,100,1, + 100,2,171,2,0,0,0,0,0,0,125,0,124,0,106,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,7,25,0,0,0,125,8,124,8,100,4,25,0, - 0,0,125,9,116,15,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,124,8,171,2,0,0,0,0,0,0,125,10, - 100,0,125,11,124,5,114,17,9,0,116,17,0,0,0,0, - 0,0,0,0,124,0,124,9,124,7,124,1,124,10,171,5, - 0,0,0,0,0,0,125,11,110,12,116,21,0,0,0,0, - 0,0,0,0,124,9,124,10,171,2,0,0,0,0,0,0, - 125,11,124,11,128,1,140,131,124,8,100,4,25,0,0,0, - 125,9,124,11,124,6,124,9,102,3,99,2,1,0,83,0, - 4,0,124,3,114,19,100,5,124,3,155,0,157,2,125,13, - 116,25,0,0,0,0,0,0,0,0,124,13,124,1,172,6, - 171,2,0,0,0,0,0,0,124,3,130,2,116,25,0,0, - 0,0,0,0,0,0,100,7,124,1,155,2,157,2,124,1, - 172,6,171,2,0,0,0,0,0,0,130,1,35,0,116,18, - 0,0,0,0,0,0,0,0,36,0,114,12,125,12,124,12, - 125,3,89,0,100,0,125,12,126,12,140,69,100,0,125,12, - 126,12,119,1,119,0,120,3,89,0,119,1,35,0,116,22, - 0,0,0,0,0,0,0,0,36,0,114,3,1,0,89,0, - 140,216,119,0,120,3,89,0,119,1,41,8,78,122,13,116, - 114,121,105,110,103,32,123,125,123,125,123,125,114,126,0,0, - 0,41,1,218,9,118,101,114,98,111,115,105,116,121,114,1, - 0,0,0,122,20,109,111,100,117,108,101,32,108,111,97,100, - 32,102,97,105,108,101,100,58,32,114,84,0,0,0,114,83, - 0,0,0,41,13,114,54,0,0,0,114,131,0,0,0,114, - 52,0,0,0,114,108,0,0,0,114,38,0,0,0,114,26, - 0,0,0,114,37,0,0,0,114,75,0,0,0,114,228,0, - 0,0,114,107,0,0,0,114,237,0,0,0,114,35,0,0, - 0,114,4,0,0,0,41,14,114,41,0,0,0,114,58,0, - 0,0,114,18,0,0,0,218,12,105,109,112,111,114,116,95, - 101,114,114,111,114,114,132,0,0,0,114,133,0,0,0,114, - 69,0,0,0,114,89,0,0,0,114,78,0,0,0,114,61, - 0,0,0,114,174,0,0,0,114,68,0,0,0,218,3,101, - 120,99,114,109,0,0,0,115,14,0,0,0,32,32,32,32, - 32,32,32,32,32,32,32,32,32,32,114,13,0,0,0,114, - 66,0,0,0,114,66,0,0,0,176,2,0,0,115,34,1, - 0,0,128,0,220,11,27,152,68,160,40,211,11,43,128,68, - 216,19,23,128,76,223,41,57,209,8,37,136,6,144,10,152, - 73,216,19,23,152,38,145,61,136,8,220,8,18,215,8,35, - 209,8,35,160,79,176,84,183,92,177,92,196,56,200,88,208, - 97,98,213,8,99,240,2,20,9,44,216,24,28,159,11,153, - 11,160,72,209,24,45,136,73,240,8,0,23,32,160,1,145, - 108,136,71,220,19,28,152,84,159,92,153,92,168,57,211,19, - 53,136,68,216,19,23,136,68,217,15,25,240,2,3,17,39, - 220,27,42,168,52,176,23,184,40,192,72,200,100,211,27,83, - 145,68,244,8,0,24,39,160,119,176,4,211,23,53,144,4, - 216,15,19,136,124,240,6,0,17,25,216,22,31,160,1,145, - 108,136,71,216,19,23,152,25,160,71,208,19,43,210,12,43, - 240,47,0,42,58,241,50,0,12,24,216,20,40,168,28,168, - 14,208,18,55,136,67,220,18,32,160,19,168,56,212,18,52, - 184,44,208,12,70,228,18,32,208,35,53,176,104,176,92,208, - 33,66,200,24,212,18,82,208,12,82,248,244,31,0,24,35, - 242,0,1,17,39,216,35,38,149,76,251,240,3,1,17,39, - 251,244,19,0,16,24,242,0,1,9,17,217,12,16,240,3, - 1,9,17,250,115,42,0,0,0,193,10,15,67,34,2,193, - 57,15,67,10,2,195,10,9,67,31,5,195,19,2,67,26, - 5,195,26,5,67,31,5,195,34,9,67,46,5,195,45,1, - 67,46,5,41,46,114,123,0,0,0,218,26,95,102,114,111, - 122,101,110,95,105,109,112,111,114,116,108,105,98,95,101,120, - 116,101,114,110,97,108,114,27,0,0,0,114,2,0,0,0, - 114,3,0,0,0,218,17,95,102,114,111,122,101,110,95,105, - 109,112,111,114,116,108,105,98,114,52,0,0,0,114,212,0, - 0,0,114,154,0,0,0,114,219,0,0,0,114,97,0,0, - 0,114,182,0,0,0,114,94,0,0,0,218,7,95,95,97, - 108,108,95,95,114,26,0,0,0,218,15,112,97,116,104,95, - 115,101,112,97,114,97,116,111,114,115,114,24,0,0,0,114, - 107,0,0,0,114,4,0,0,0,114,34,0,0,0,114,23, - 0,0,0,114,100,0,0,0,114,158,0,0,0,114,160,0, - 0,0,114,162,0,0,0,218,13,95,76,111,97,100,101,114, - 66,97,115,105,99,115,114,5,0,0,0,114,131,0,0,0, - 114,54,0,0,0,114,55,0,0,0,114,51,0,0,0,114, - 36,0,0,0,114,167,0,0,0,114,195,0,0,0,114,198, - 0,0,0,114,75,0,0,0,114,207,0,0,0,114,228,0, - 0,0,218,8,95,95,99,111,100,101,95,95,114,221,0,0, - 0,114,233,0,0,0,114,237,0,0,0,114,247,0,0,0, - 114,218,0,0,0,114,214,0,0,0,114,66,0,0,0,114, - 11,0,0,0,114,12,0,0,0,114,13,0,0,0,250,8, - 60,109,111,100,117,108,101,62,114,11,1,0,0,1,0,0, - 0,115,51,1,0,0,240,3,1,1,1,241,2,12,1,4, - 243,32,0,1,57,223,0,69,219,0,38,219,0,11,219,0, - 10,219,0,14,219,0,10,219,0,11,219,0,16,224,11,27, - 152,93,208,10,43,128,7,240,6,0,12,31,215,11,39,209, - 11,39,128,8,216,15,34,215,15,50,209,15,50,176,49,176, - 50,208,15,54,128,12,244,6,1,1,9,144,91,244,0,1, - 1,9,240,8,0,24,26,208,0,20,225,15,19,144,67,139, - 121,128,12,224,23,25,208,0,20,216,21,34,208,0,18,216, - 18,31,128,15,244,4,108,3,1,79,1,208,18,37,215,18, - 51,209,18,51,244,0,108,3,1,79,1,240,106,7,0,6, - 14,144,14,209,5,30,160,4,160,100,208,4,43,216,5,13, - 144,13,209,5,29,152,117,160,100,208,4,43,216,4,25,216, - 4,25,240,9,5,20,2,208,0,16,242,18,1,1,53,242, - 8,6,1,34,242,18,6,1,16,242,62,123,1,1,17,240, - 74,4,24,5,47,240,5,0,1,12,240,58,0,19,24,128, - 15,242,10,18,1,22,242,42,40,1,37,242,92,1,2,1, - 29,242,16,38,1,16,241,80,1,0,14,18,144,47,215,18, - 42,209,18,42,211,13,43,128,10,242,10,3,1,18,242,14, - 2,1,64,1,242,12,8,1,21,242,26,13,1,20,242,38, - 10,1,50,243,30,32,1,83,1,114,12,0,0,0, + 0,0,100,3,100,2,171,2,0,0,0,0,0,0,125,0, + 124,0,83,0,41,4,78,115,2,0,0,0,13,10,243,1, + 0,0,0,10,243,1,0,0,0,13,41,1,114,25,0,0, + 0,41,1,218,6,115,111,117,114,99,101,115,1,0,0,0, + 32,114,13,0,0,0,218,23,95,110,111,114,109,97,108,105, + 122,101,95,108,105,110,101,95,101,110,100,105,110,103,115,114, + 233,0,0,0,108,2,0,0,115,39,0,0,0,128,0,216, + 13,19,143,94,137,94,152,71,160,85,211,13,43,128,70,216, + 13,19,143,94,137,94,152,69,160,53,211,13,41,128,70,216, + 11,17,128,77,114,12,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,54, + 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,1,116,3,0,0,0, + 0,0,0,0,0,124,1,124,0,100,1,100,2,172,3,171, + 4,0,0,0,0,0,0,83,0,41,4,78,114,106,0,0, + 0,84,41,1,218,12,100,111,110,116,95,105,110,104,101,114, + 105,116,41,2,114,233,0,0,0,218,7,99,111,109,112,105, + 108,101,41,2,114,76,0,0,0,114,232,0,0,0,115,2, + 0,0,0,32,32,114,13,0,0,0,218,15,95,99,111,109, + 112,105,108,101,95,115,111,117,114,99,101,114,237,0,0,0, + 115,2,0,0,115,29,0,0,0,128,0,220,13,36,160,86, + 211,13,44,128,70,220,11,18,144,54,152,56,160,86,184,36, + 212,11,63,208,4,63,114,12,0,0,0,99,2,0,0,0, + 0,0,0,0,0,0,0,0,11,0,0,0,3,0,0,0, + 243,122,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,100,1,122,9,0,0,100,2,122, + 0,0,0,124,0,100,3,122,9,0,0,100,4,122,1,0, + 0,124,0,100,5,122,1,0,0,124,1,100,6,122,9,0, + 0,124,1,100,3,122,9,0,0,100,7,122,1,0,0,124, + 1,100,5,122,1,0,0,100,8,122,5,0,0,100,9,100, + 9,100,9,102,9,171,1,0,0,0,0,0,0,83,0,41, + 10,78,233,9,0,0,0,105,188,7,0,0,233,5,0,0, + 0,233,15,0,0,0,233,31,0,0,0,233,11,0,0,0, + 233,63,0,0,0,114,126,0,0,0,114,19,0,0,0,41, + 2,114,182,0,0,0,218,6,109,107,116,105,109,101,41,2, + 218,1,100,114,190,0,0,0,115,2,0,0,0,32,32,114, + 13,0,0,0,218,14,95,112,97,114,115,101,95,100,111,115, + 116,105,109,101,114,247,0,0,0,121,2,0,0,115,89,0, + 0,0,128,0,220,11,15,143,59,137,59,216,9,10,136,97, + 137,22,144,52,137,15,216,9,10,136,97,137,22,144,51,137, + 14,216,8,9,136,68,137,8,216,8,9,136,82,137,7,216, + 9,10,136,97,137,22,144,52,137,15,216,9,10,136,84,137, + 24,144,81,137,14,216,8,10,136,66,144,2,240,15,7,24, + 20,243,0,7,12,21,240,0,7,5,21,114,12,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,172,0,0,0,151,0,9,0,124,1, + 100,1,100,0,26,0,100,2,118,0,115,2,74,0,130,1, + 124,1,100,0,100,1,26,0,125,1,124,0,106,0,0,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,100,3,25,0,0,0, + 125,3,124,2,100,4,25,0,0,0,125,4,124,2,100,5, + 25,0,0,0,125,5,116,3,0,0,0,0,0,0,0,0, + 124,4,124,3,171,2,0,0,0,0,0,0,124,5,102,2, + 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,6,119,0, + 120,3,89,0,119,1,41,7,78,114,19,0,0,0,169,2, + 218,1,99,218,1,111,114,240,0,0,0,233,6,0,0,0, + 233,3,0,0,0,41,2,114,1,0,0,0,114,1,0,0, + 0,41,5,114,37,0,0,0,114,247,0,0,0,114,35,0, + 0,0,218,10,73,110,100,101,120,69,114,114,111,114,114,22, + 0,0,0,41,6,114,41,0,0,0,114,18,0,0,0,114, + 78,0,0,0,114,182,0,0,0,114,183,0,0,0,218,17, + 117,110,99,111,109,112,114,101,115,115,101,100,95,115,105,122, + 101,115,6,0,0,0,32,32,32,32,32,32,114,13,0,0, + 0,114,218,0,0,0,114,218,0,0,0,134,2,0,0,115, + 126,0,0,0,128,0,240,2,12,5,20,224,15,19,144,66, + 144,67,136,121,152,74,209,15,38,208,8,38,208,15,38,216, + 15,19,144,67,144,82,136,121,136,4,216,20,24,151,75,145, + 75,160,4,209,20,37,136,9,240,6,0,16,25,152,17,137, + 124,136,4,216,15,24,152,17,137,124,136,4,216,28,37,160, + 97,153,76,208,8,25,220,15,29,152,100,160,68,211,15,41, + 208,43,60,208,15,60,208,8,60,248,220,12,20,148,106,164, + 41,208,11,44,242,0,1,5,20,217,15,19,240,3,1,5, + 20,250,115,15,0,0,0,130,57,60,0,188,20,65,19,3, + 193,18,1,65,19,3,99,2,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,3,0,0,0,243,136,0,0,0, + 151,0,124,1,100,1,100,0,26,0,100,2,118,0,115,2, + 74,0,130,1,124,1,100,0,100,1,26,0,125,1,9,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,25,0,0,0,125,2,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,124,2, + 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,3,1,0,89,0,121,0, + 119,0,120,3,89,0,119,1,41,3,78,114,19,0,0,0, + 114,249,0,0,0,41,4,114,37,0,0,0,114,75,0,0, + 0,114,38,0,0,0,114,35,0,0,0,41,3,114,41,0, + 0,0,114,18,0,0,0,114,78,0,0,0,115,3,0,0, + 0,32,32,32,114,13,0,0,0,114,214,0,0,0,114,214, + 0,0,0,153,2,0,0,115,91,0,0,0,128,0,224,11, + 15,144,2,144,3,136,57,152,10,209,11,34,208,4,34,208, + 11,34,216,11,15,144,3,144,18,136,57,128,68,240,4,5, + 5,50,216,20,24,151,75,145,75,160,4,209,20,37,136,9, + 244,8,0,16,25,152,20,159,28,153,28,160,121,211,15,49, + 208,8,49,248,244,7,0,12,20,242,0,1,5,20,217,15, + 19,240,3,1,5,20,250,115,15,0,0,0,144,15,53,0, + 181,9,65,1,3,193,0,1,65,1,3,99,2,0,0,0, + 0,0,0,0,0,0,0,0,8,0,0,0,3,0,0,0, + 243,226,1,0,0,151,0,116,1,0,0,0,0,0,0,0, + 0,124,0,124,1,171,2,0,0,0,0,0,0,125,2,100, + 0,125,3,116,2,0,0,0,0,0,0,0,0,68,0,93, + 141,0,0,92,3,0,0,125,4,125,5,125,6,124,2,124, + 4,122,0,0,0,125,7,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,1,124,0,106,8,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,7,100,2,172,3,171,5,0, + 0,0,0,0,0,1,0,9,0,124,0,106,12,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, + 7,25,0,0,0,125,8,124,8,100,4,25,0,0,0,125, + 9,116,15,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,124,8,171,2,0,0,0,0,0,0,125,10,100,0,125, + 11,124,5,114,17,9,0,116,17,0,0,0,0,0,0,0, + 0,124,0,124,9,124,7,124,1,124,10,171,5,0,0,0, + 0,0,0,125,11,110,12,116,21,0,0,0,0,0,0,0, + 0,124,9,124,10,171,2,0,0,0,0,0,0,125,11,124, + 11,128,1,140,131,124,8,100,4,25,0,0,0,125,9,124, + 11,124,6,124,9,102,3,99,2,1,0,83,0,4,0,124, + 3,114,19,100,5,124,3,155,0,157,2,125,13,116,25,0, + 0,0,0,0,0,0,0,124,13,124,1,172,6,171,2,0, + 0,0,0,0,0,124,3,130,2,116,25,0,0,0,0,0, + 0,0,0,100,7,124,1,155,2,157,2,124,1,172,6,171, + 2,0,0,0,0,0,0,130,1,35,0,116,18,0,0,0, + 0,0,0,0,0,36,0,114,12,125,12,124,12,125,3,89, + 0,100,0,125,12,126,12,140,69,100,0,125,12,126,12,119, + 1,119,0,120,3,89,0,119,1,35,0,116,22,0,0,0, + 0,0,0,0,0,36,0,114,3,1,0,89,0,140,216,119, + 0,120,3,89,0,119,1,41,8,78,122,13,116,114,121,105, + 110,103,32,123,125,123,125,123,125,114,126,0,0,0,41,1, + 218,9,118,101,114,98,111,115,105,116,121,114,1,0,0,0, + 122,20,109,111,100,117,108,101,32,108,111,97,100,32,102,97, + 105,108,101,100,58,32,114,84,0,0,0,114,83,0,0,0, + 41,13,114,54,0,0,0,114,131,0,0,0,114,52,0,0, + 0,114,108,0,0,0,114,38,0,0,0,114,26,0,0,0, + 114,37,0,0,0,114,75,0,0,0,114,228,0,0,0,114, + 107,0,0,0,114,237,0,0,0,114,35,0,0,0,114,4, + 0,0,0,41,14,114,41,0,0,0,114,58,0,0,0,114, + 18,0,0,0,218,12,105,109,112,111,114,116,95,101,114,114, + 111,114,114,132,0,0,0,114,133,0,0,0,114,69,0,0, + 0,114,89,0,0,0,114,78,0,0,0,114,61,0,0,0, + 114,174,0,0,0,114,68,0,0,0,218,3,101,120,99,114, + 109,0,0,0,115,14,0,0,0,32,32,32,32,32,32,32, + 32,32,32,32,32,32,32,114,13,0,0,0,114,66,0,0, + 0,114,66,0,0,0,168,2,0,0,115,34,1,0,0,128, + 0,220,11,27,152,68,160,40,211,11,43,128,68,216,19,23, + 128,76,223,41,57,209,8,37,136,6,144,10,152,73,216,19, + 23,152,38,145,61,136,8,220,8,18,215,8,35,209,8,35, + 160,79,176,84,183,92,177,92,196,56,200,88,208,97,98,213, + 8,99,240,2,20,9,44,216,24,28,159,11,153,11,160,72, + 209,24,45,136,73,240,8,0,23,32,160,1,145,108,136,71, + 220,19,28,152,84,159,92,153,92,168,57,211,19,53,136,68, + 216,19,23,136,68,217,15,25,240,2,3,17,39,220,27,42, + 168,52,176,23,184,40,192,72,200,100,211,27,83,145,68,244, + 8,0,24,39,160,119,176,4,211,23,53,144,4,216,15,19, + 136,124,240,6,0,17,25,216,22,31,160,1,145,108,136,71, + 216,19,23,152,25,160,71,208,19,43,210,12,43,240,47,0, + 42,58,241,50,0,12,24,216,20,40,168,28,168,14,208,18, + 55,136,67,220,18,32,160,19,168,56,212,18,52,184,44,208, + 12,70,228,18,32,208,35,53,176,104,176,92,208,33,66,200, + 24,212,18,82,208,12,82,248,244,31,0,24,35,242,0,1, + 17,39,216,35,38,149,76,251,240,3,1,17,39,251,244,19, + 0,16,24,242,0,1,9,17,217,12,16,240,3,1,9,17, + 250,115,42,0,0,0,193,10,15,67,34,2,193,57,15,67, + 10,2,195,10,9,67,31,5,195,19,2,67,26,5,195,26, + 5,67,31,5,195,34,9,67,46,5,195,45,1,67,46,5, + 41,46,114,123,0,0,0,218,26,95,102,114,111,122,101,110, + 95,105,109,112,111,114,116,108,105,98,95,101,120,116,101,114, + 110,97,108,114,27,0,0,0,114,2,0,0,0,114,3,0, + 0,0,218,17,95,102,114,111,122,101,110,95,105,109,112,111, + 114,116,108,105,98,114,52,0,0,0,114,212,0,0,0,114, + 154,0,0,0,114,219,0,0,0,114,97,0,0,0,114,182, + 0,0,0,114,94,0,0,0,218,7,95,95,97,108,108,95, + 95,114,26,0,0,0,218,15,112,97,116,104,95,115,101,112, + 97,114,97,116,111,114,115,114,24,0,0,0,114,107,0,0, + 0,114,4,0,0,0,114,34,0,0,0,114,23,0,0,0, + 114,100,0,0,0,114,158,0,0,0,114,160,0,0,0,114, + 162,0,0,0,218,13,95,76,111,97,100,101,114,66,97,115, + 105,99,115,114,5,0,0,0,114,131,0,0,0,114,54,0, + 0,0,114,55,0,0,0,114,51,0,0,0,114,36,0,0, + 0,114,167,0,0,0,114,195,0,0,0,114,198,0,0,0, + 114,75,0,0,0,114,207,0,0,0,114,228,0,0,0,218, + 8,95,95,99,111,100,101,95,95,114,221,0,0,0,114,233, + 0,0,0,114,237,0,0,0,114,247,0,0,0,114,218,0, + 0,0,114,214,0,0,0,114,66,0,0,0,114,11,0,0, + 0,114,12,0,0,0,114,13,0,0,0,218,8,60,109,111, + 100,117,108,101,62,114,11,1,0,0,1,0,0,0,115,51, + 1,0,0,240,3,1,1,1,241,2,12,1,4,243,32,0, + 1,57,223,0,69,219,0,38,219,0,11,219,0,10,219,0, + 14,219,0,10,219,0,11,219,0,16,224,11,27,152,93,208, + 10,43,128,7,240,6,0,12,31,215,11,39,209,11,39,128, + 8,216,15,34,215,15,50,209,15,50,176,49,176,50,208,15, + 54,128,12,244,6,1,1,9,144,91,244,0,1,1,9,240, + 8,0,24,26,208,0,20,225,15,19,144,67,139,121,128,12, + 224,23,25,208,0,20,216,21,34,208,0,18,216,18,31,128, + 15,244,4,100,3,1,79,1,208,18,37,215,18,51,209,18, + 51,244,0,100,3,1,79,1,240,90,7,0,6,14,144,14, + 209,5,30,160,4,160,100,208,4,43,216,5,13,144,13,209, + 5,29,152,117,160,100,208,4,43,216,4,25,216,4,25,240, + 9,5,20,2,208,0,16,242,18,1,1,53,242,8,6,1, + 34,242,18,6,1,16,242,62,123,1,1,17,240,74,4,24, + 5,47,240,5,0,1,12,240,58,0,19,24,128,15,242,10, + 18,1,22,242,42,40,1,37,242,92,1,2,1,29,242,16, + 38,1,16,241,80,1,0,14,18,144,47,215,18,42,209,18, + 42,211,13,43,128,10,242,10,3,1,18,242,14,2,1,64, + 1,242,12,8,1,21,242,26,13,1,20,242,38,10,1,50, + 243,30,32,1,83,1,114,12,0,0,0, }; diff --git a/contrib/tools/python3/Python/getargs.c b/contrib/tools/python3/Python/getargs.c index e7c2654f93..0bba8b1d51 100644 --- a/contrib/tools/python3/Python/getargs.c +++ b/contrib/tools/python3/Python/getargs.c @@ -1964,7 +1964,8 @@ new_kwtuple(const char * const *keywords, int total, int pos) Py_DECREF(kwtuple); return NULL; } - PyUnicode_InternInPlace(&str); + PyInterpreterState *interp = _PyInterpreterState_GET(); + _PyUnicode_InternImmortal(interp, &str); PyTuple_SET_ITEM(kwtuple, i, str); } return kwtuple; diff --git a/contrib/tools/python3/Python/marshal.c b/contrib/tools/python3/Python/marshal.c index 8ecdb73814..3fc3f89042 100644 --- a/contrib/tools/python3/Python/marshal.c +++ b/contrib/tools/python3/Python/marshal.c @@ -14,6 +14,7 @@ #include "pycore_long.h" // _PyLong_DigitCount #include "pycore_hashtable.h" // _Py_hashtable_t #include "marshal.h" // Py_MARSHAL_VERSION +#include "pycore_pystate.h" // _PyInterpreterState_GET() /*[clinic input] module marshal @@ -1158,8 +1159,12 @@ r_object(RFILE *p) v = PyUnicode_FromKindAndData(PyUnicode_1BYTE_KIND, ptr, n); if (v == NULL) break; - if (is_interned) - PyUnicode_InternInPlace(&v); + if (is_interned) { + // marshal is meant to serialize .pyc files with code + // objects, and code-related strings are currently immortal. + PyInterpreterState *interp = _PyInterpreterState_GET(); + _PyUnicode_InternImmortal(interp, &v); + } retval = v; R_REF(retval); break; @@ -1191,8 +1196,12 @@ r_object(RFILE *p) } if (v == NULL) break; - if (is_interned) - PyUnicode_InternInPlace(&v); + if (is_interned) { + // marshal is meant to serialize .pyc files with code + // objects, and code-related strings are currently immortal. + PyInterpreterState *interp = _PyInterpreterState_GET(); + _PyUnicode_InternImmortal(interp, &v); + } retval = v; R_REF(retval); break; diff --git a/contrib/tools/python3/Python/pylifecycle.c b/contrib/tools/python3/Python/pylifecycle.c index 2c36527a87..6d580c6d48 100644 --- a/contrib/tools/python3/Python/pylifecycle.c +++ b/contrib/tools/python3/Python/pylifecycle.c @@ -839,6 +839,13 @@ pycore_interp_init(PyThreadState *tstate) return _PyStatus_ERR("failed to initialize deep-frozen modules"); } + // Per-interpreter interned string dict is created after deep-frozen + // modules have interned the global strings. + status = _PyUnicode_InitInternDict(interp); + if (_PyStatus_EXCEPTION(status)) { + return status; + } + status = pycore_init_types(interp); if (_PyStatus_EXCEPTION(status)) { goto done; diff --git a/contrib/tools/python3/Python/stdlib_module_names.h b/contrib/tools/python3/Python/stdlib_module_names.h index ed4a0ac2dd..1b1a1bdee7 100644 --- a/contrib/tools/python3/Python/stdlib_module_names.h +++ b/contrib/tools/python3/Python/stdlib_module_names.h @@ -89,6 +89,7 @@ static const char* _Py_stdlib_module_names[] = { "_weakref", "_weakrefset", "_winapi", +"_wmi", "_zoneinfo", "abc", "aifc", diff --git a/contrib/tools/python3/Python/sysmodule.c b/contrib/tools/python3/Python/sysmodule.c index edc66cc69e..7240f8e4e1 100644 --- a/contrib/tools/python3/Python/sysmodule.c +++ b/contrib/tools/python3/Python/sysmodule.c @@ -722,7 +722,7 @@ sys_displayhook(PyObject *module, PyObject *o) if (o == Py_None) { Py_RETURN_NONE; } - if (PyObject_SetAttr(builtins, &_Py_ID(_), Py_None) != 0) + if (PyObject_SetAttr(builtins, _Py_LATIN1_CHR('_'), Py_None) != 0) return NULL; outf = _PySys_GetAttr(tstate, &_Py_ID(stdout)); if (outf == NULL || outf == Py_None) { @@ -744,10 +744,9 @@ sys_displayhook(PyObject *module, PyObject *o) return NULL; } } - _Py_DECLARE_STR(newline, "\n"); - if (PyFile_WriteObject(&_Py_STR(newline), outf, Py_PRINT_RAW) != 0) + if (PyFile_WriteObject(_Py_LATIN1_CHR('\n'), outf, Py_PRINT_RAW) != 0) return NULL; - if (PyObject_SetAttr(builtins, &_Py_ID(_), o) != 0) + if (PyObject_SetAttr(builtins, _Py_LATIN1_CHR('_'), o) != 0) return NULL; Py_RETURN_NONE; } @@ -927,8 +926,9 @@ sys_intern_impl(PyObject *module, PyObject *s) /*[clinic end generated code: output=be680c24f5c9e5d6 input=849483c006924e2f]*/ { if (PyUnicode_CheckExact(s)) { + PyInterpreterState *interp = _PyInterpreterState_GET(); Py_INCREF(s); - PyUnicode_InternInPlace(&s); + _PyUnicode_InternMortal(interp, &s); return s; } else { @@ -1918,14 +1918,22 @@ sys_getallocatedblocks_impl(PyObject *module) /*[clinic input] sys.getunicodeinternedsize -> Py_ssize_t + * + _only_immortal: bool = False + Return the number of elements of the unicode interned dictionary [clinic start generated code]*/ static Py_ssize_t -sys_getunicodeinternedsize_impl(PyObject *module) -/*[clinic end generated code: output=ad0e4c9738ed4129 input=726298eaa063347a]*/ +sys_getunicodeinternedsize_impl(PyObject *module, int _only_immortal) +/*[clinic end generated code: output=29a6377a94a14f70 input=0330b3408dd5bcc6]*/ { - return _PyUnicode_InternedSize(); + if (_only_immortal) { + return _PyUnicode_InternedSize_Immortal(); + } + else { + return _PyUnicode_InternedSize(); + } } /*[clinic input] diff --git a/contrib/tools/python3/README.rst b/contrib/tools/python3/README.rst index 49d503bbe4..f7fbe2083d 100644 --- a/contrib/tools/python3/README.rst +++ b/contrib/tools/python3/README.rst @@ -1,4 +1,4 @@ -This is Python version 3.12.6 +This is Python version 3.12.7 ============================= .. image:: https://github.com/python/cpython/workflows/Tests/badge.svg diff --git a/contrib/tools/python3/bin/ya.make b/contrib/tools/python3/bin/ya.make index 6431e809d2..49dfb8b7c4 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.6) +VERSION(3.12.7) -ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.6.tar.gz) +ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.7.tar.gz) LICENSE(Python-2.0) diff --git a/contrib/tools/python3/patches/124938.patch b/contrib/tools/python3/patches/124938.patch new file mode 100644 index 0000000000..218691a926 --- /dev/null +++ b/contrib/tools/python3/patches/124938.patch @@ -0,0 +1,81 @@ +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/xxx-pydebug.patch b/contrib/tools/python3/patches/xxx-pydebug.patch new file mode 100644 index 0000000000..ad3fd98df0 --- /dev/null +++ b/contrib/tools/python3/patches/xxx-pydebug.patch @@ -0,0 +1,11 @@ +--- contrib/tools/python3/Objects/unicodeobject.c (index) ++++ contrib/tools/python3/Objects/unicodeobject.c (working tree) +@@ -14911,7 +14911,7 @@ intern_static(PyInterpreterState *interp, PyObject *s /* stolen */) + * per-interpreter interned_dict, which might contain duplicates. + */ + PyObject *interned = get_interned_dict(interp); +- assert(interned == NULL); ++ // assert(interned == NULL); + #endif + + /* Look in the global cache first. */ diff --git a/contrib/tools/python3/ya.make b/contrib/tools/python3/ya.make index a51526d72a..025d2180f3 100644 --- a/contrib/tools/python3/ya.make +++ b/contrib/tools/python3/ya.make @@ -2,9 +2,9 @@ LIBRARY() -VERSION(3.12.6) +VERSION(3.12.7) -ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.6.tar.gz) +ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.7.tar.gz) LICENSE(Python-2.0) diff --git a/library/cpp/containers/bitseq/bititerator.h b/library/cpp/containers/bitseq/bititerator.h index efe7ba873b..cc18af572f 100644 --- a/library/cpp/containers/bitseq/bititerator.h +++ b/library/cpp/containers/bitseq/bititerator.h @@ -1,8 +1,8 @@ #pragma once #include "traits.h" +#include <bit> -#include <library/cpp/pop_count/popcount.h> template <typename T> class TBitIterator { @@ -49,7 +49,7 @@ public: if (!Mask) return *Data & TTraits::ElemMask(count); - auto usedBits = (size_t)PopCount(Mask - 1); + auto usedBits = (size_t)std::popcount(Mask - 1u); TWord result = Current >> usedBits; auto leftInCurrent = TTraits::NumBits - usedBits; if (count <= leftInCurrent) @@ -72,7 +72,7 @@ public: return Current & TTraits::ElemMask(count); } - auto usedBits = (size_t)PopCount(Mask - 1); + auto usedBits = (size_t)std::popcount(Mask - 1u); TWord result = Current >> usedBits; auto leftInCurrent = TTraits::NumBits - usedBits; if (count < leftInCurrent) { @@ -97,7 +97,7 @@ public: if (!count) return; - int leftInCurrent = (size_t)PopCount(~(Mask - 1)); + int leftInCurrent = std::popcount(static_cast<TWord>(~(Mask - 1u))); if (count < leftInCurrent) { Mask <<= count; return; diff --git a/library/cpp/containers/bitseq/bitvector.h b/library/cpp/containers/bitseq/bitvector.h index 3f8fd81ee5..c1d1e13cd7 100644 --- a/library/cpp/containers/bitseq/bitvector.h +++ b/library/cpp/containers/bitseq/bitvector.h @@ -2,11 +2,12 @@ #include "traits.h" -#include <library/cpp/pop_count/popcount.h> #include <util/generic/vector.h> #include <util/ysaveload.h> +#include <bit> + template <typename T> class TReadonlyBitVector; @@ -113,7 +114,7 @@ public: size_t Count() const { size_t count = 0; for (size_t i = 0; i < Data_.size(); ++i) { - count += (size_t)PopCount(Data_[i]); + count += (size_t)std::popcount(Data_[i]); } return count; } diff --git a/library/cpp/containers/bitseq/ya.make b/library/cpp/containers/bitseq/ya.make index a59c3e765e..49249f366f 100644 --- a/library/cpp/containers/bitseq/ya.make +++ b/library/cpp/containers/bitseq/ya.make @@ -2,7 +2,6 @@ LIBRARY() PEERDIR( util/draft - library/cpp/pop_count ) SRCS( diff --git a/library/cpp/http/server/http_ex.cpp b/library/cpp/http/server/http_ex.cpp index fc43d2defc..0681da10ff 100644 --- a/library/cpp/http/server/http_ex.cpp +++ b/library/cpp/http/server/http_ex.cpp @@ -87,7 +87,8 @@ bool THttpClientRequestExtension::ProcessHeaders(TBaseServerRequestData& rd, TBl } TBuffer buf(SafeIntegerCast<size_t>(contentLength)); - buf.Resize(Input().Load(buf.Data(), (size_t)contentLength)); + Input().LoadOrFail(buf.Data(), (size_t)contentLength); + buf.Resize((size_t)contentLength); postData = TBlob::FromBuffer(buf); } else { postData = TBlob::FromStream(Input()); diff --git a/library/cpp/pop_count/benchmark/main.cpp b/library/cpp/pop_count/benchmark/main.cpp index 41ea3c91cc..1af2d157b6 100644 --- a/library/cpp/pop_count/benchmark/main.cpp +++ b/library/cpp/pop_count/benchmark/main.cpp @@ -5,6 +5,8 @@ #include <library/cpp/pop_count/popcount.h> #include <library/cpp/testing/benchmark/bench.h> +#include <bit> + template <class F, class I> inline void DoRun(F&& f, I&& i) { const ui64 n = i.Iterations(); @@ -21,6 +23,13 @@ Y_CPU_BENCHMARK(PopCount_8, iface) { iface); } +Y_CPU_BENCHMARK(std_popcount_8, iface) { + DoRun([](ui8 x) { + return std::popcount<ui8>(x); + }, + iface); +} + Y_CPU_BENCHMARK(PopCount_16, iface) { DoRun([](ui16 x) { return PopCount<ui16>(x); @@ -28,6 +37,13 @@ Y_CPU_BENCHMARK(PopCount_16, iface) { iface); } +Y_CPU_BENCHMARK(std_popcount_16, iface) { + DoRun([](ui16 x) { + return std::popcount<ui16>(x); + }, + iface); +} + Y_CPU_BENCHMARK(PopCount_32, iface) { DoRun([](ui32 x) { return PopCount<ui32>(x); @@ -35,6 +51,13 @@ Y_CPU_BENCHMARK(PopCount_32, iface) { iface); } +Y_CPU_BENCHMARK(std_popcount_32, iface) { + DoRun([](ui32 x) { + return std::popcount<ui32>(x); + }, + iface); +} + Y_CPU_BENCHMARK(PopCount_64, iface) { DoRun([](ui64 x) { return PopCount<ui64>(x); @@ -42,6 +65,13 @@ Y_CPU_BENCHMARK(PopCount_64, iface) { iface); } +Y_CPU_BENCHMARK(std_popcount_64, iface) { + DoRun([](ui64 x) { + return std::popcount<ui64>(x); + }, + iface); +} + #if !defined(_MSC_VER) Y_CPU_BENCHMARK(BUILTIN_64, iface) { DoRun([](ui64 x) { diff --git a/library/cpp/regex/hyperscan/hyperscan.cpp b/library/cpp/regex/hyperscan/hyperscan.cpp index ba85e9bbab..5b6069d4a3 100644 --- a/library/cpp/regex/hyperscan/hyperscan.cpp +++ b/library/cpp/regex/hyperscan/hyperscan.cpp @@ -10,6 +10,7 @@ #include <contrib/libs/hyperscan/runtime_avx512/hs_runtime.h> #include <util/generic/singleton.h> +#include <util/system/sanitizers.h> namespace NHyperscan { using TSerializedDatabase = THolder<char, TDeleter<decltype(&free), &free>>; @@ -18,7 +19,8 @@ namespace NHyperscan { namespace NPrivate { ERuntime DetectCurrentRuntime() { - if (NX86::HaveAVX512F() && NX86::HaveAVX512BW()) { + // TODO: Remove MSanIsOn check upon DEVTOOLSSUPPORT-49258 resolution + if (NX86::HaveAVX512F() && NX86::HaveAVX512BW() && !NSan::MSanIsOn()) { return ERuntime::AVX512; } else if (NX86::HaveAVX() && NX86::HaveAVX2()) { return ERuntime::AVX2; diff --git a/library/cpp/tld/tlds-alpha-by-domain.txt b/library/cpp/tld/tlds-alpha-by-domain.txt index 0e38681a50..fbf58d0ddb 100644 --- a/library/cpp/tld/tlds-alpha-by-domain.txt +++ b/library/cpp/tld/tlds-alpha-by-domain.txt @@ -1,4 +1,4 @@ -# Version 2024101900, Last Updated Sat Oct 19 07:07:02 2024 UTC +# Version 2024102500, Last Updated Fri Oct 25 07:07:02 2024 UTC AAA AARP ABB diff --git a/library/cpp/yt/error/error_attributes-inl.h b/library/cpp/yt/error/error_attributes-inl.h new file mode 100644 index 0000000000..a05e62d0e9 --- /dev/null +++ b/library/cpp/yt/error/error_attributes-inl.h @@ -0,0 +1,72 @@ +#ifndef ERROR_ATTRIBUTES_INL_H_ +#error "Direct inclusion of this file is not allowed, include error_attributes.h" +// For the sake of sane code completion. +#include "error_attributes.h" +#endif + +namespace NYT { + +//////////////////////////////////////////////////////////////////////////////// + +template <class T> +T TErrorAttributes::GetAndRemove(const TString& key) +{ + auto result = Get<T>(key); + Remove(key); + return result; +} + +template <class T> +T TErrorAttributes::Get(TStringBuf key, const T& defaultValue) const +{ + return Find<T>(key).value_or(defaultValue); +} + +template <class T> +T TErrorAttributes::GetAndRemove(const TString& key, const T& defaultValue) +{ + auto result = Find<T>(key); + if (result) { + Remove(key); + return *result; + } else { + return defaultValue; + } +} + +template <class T> +typename TOptionalTraits<T>::TOptional TErrorAttributes::FindAndRemove(const TString& key) +{ + auto result = Find<T>(key); + if (result) { + Remove(key); + } + return result; +} + +template <CMergeableDictionary TDictionary> +void TErrorAttributes::MergeFrom(const TDictionary& dict) +{ + using TTraits = TMergeDictionariesTraits<TDictionary>; + + for (const auto& [key, value] : TTraits::MakeIterableView(dict)) { + SetYson(key, value); + } +} + +//////////////////////////////////////////////////////////////////////////////// + +template <> +struct TMergeDictionariesTraits<TErrorAttributes> +{ + static auto MakeIterableView(const TErrorAttributes& attributes) + { + return attributes.ListPairs(); + } +}; + +static_assert(CMergeableDictionary<TErrorAttributes>); + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace NYT diff --git a/library/cpp/yt/error/error_attributes.cpp b/library/cpp/yt/error/error_attributes.cpp new file mode 100644 index 0000000000..2c1b542314 --- /dev/null +++ b/library/cpp/yt/error/error_attributes.cpp @@ -0,0 +1,62 @@ +#include "error_attributes.h" + +namespace NYT { + +//////////////////////////////////////////////////////////////////////////////// + +TErrorAttributes::TErrorAttributes(void* attributes) + : Attributes_(attributes) +{ } + +void TErrorAttributes::Clear() +{ + for (const auto& key : ListKeys()) { + Remove(key); + } +} + +NYson::TYsonString TErrorAttributes::GetYsonAndRemove(const TString& key) +{ + auto result = GetYson(key); + Remove(key); + return result; +} + +bool TErrorAttributes::Contains(TStringBuf key) const +{ + return FindYson(key).operator bool(); +} + +bool operator == (const TErrorAttributes& lhs, const TErrorAttributes& rhs) +{ + auto lhsPairs = lhs.ListPairs(); + auto rhsPairs = rhs.ListPairs(); + if (lhsPairs.size() != rhsPairs.size()) { + return false; + } + + std::sort(lhsPairs.begin(), lhsPairs.end(), [] (const auto& lhs, const auto& rhs) { + return lhs.first < rhs.first; + }); + std::sort(rhsPairs.begin(), rhsPairs.end(), [] (const auto& lhs, const auto& rhs) { + return lhs.first < rhs.first; + }); + + for (auto index = 0; index < std::ssize(lhsPairs); ++index) { + if (lhsPairs[index].first != rhsPairs[index].first) { + return false; + } + } + + for (auto index = 0; index < std::ssize(lhsPairs); ++index) { + if (lhsPairs[index].second != rhsPairs[index].second) { + return false; + } + } + + return true; +} + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace NYT diff --git a/library/cpp/yt/error/error_attributes.h b/library/cpp/yt/error/error_attributes.h new file mode 100644 index 0000000000..88771f8360 --- /dev/null +++ b/library/cpp/yt/error/error_attributes.h @@ -0,0 +1,105 @@ +#pragma once + +#include "mergeable_dictionary.h" + +#include <library/cpp/yt/misc/optional.h> + +namespace NYT { + +//////////////////////////////////////////////////////////////////////////////// + +// For now this is just an opaque handle to error attributes +// used to remove dependency on IAttributeDictionary in public API. +// Eventually it would be a simple hash map. +// NB(arkady-e1ppa): For now most methods are defined in yt/yt/core/misc/stripped_error.cpp +// eventually they will be moved here. +class TErrorAttributes +{ +public: + using TKey = TString; + using TValue = NYson::TYsonString; + using TKeyValuePair = std::pair<TKey, TValue>; + + //! Returns the list of all keys in the dictionary. + std::vector<TString> ListKeys() const; + + //! Returns the list of all key-value pairs in the dictionary. + std::vector<TKeyValuePair> ListPairs() const; + + //! Returns the value of the attribute (null indicates that the attribute is not found). + NYson::TYsonString FindYson(TStringBuf key) const; + + //! Sets the value of the attribute. + void SetYson(const TString& key, const NYson::TYsonString& value); + + //! Removes the attribute. + //! Returns |true| if the attribute was removed or |false| if there is no attribute with this key. + bool Remove(const TString& key); + + //! Removes all attributes. + void Clear(); + + //! Returns the value of the attribute (throws an exception if the attribute is not found). + NYson::TYsonString GetYson(TStringBuf key) const; + + //! Same as #GetYson but removes the value. + NYson::TYsonString GetYsonAndRemove(const TString& key); + + //! Returns |true| iff the given key is present. + bool Contains(TStringBuf key) const; + + // TODO(arkady-e1ppa): By default deserialization is located at yt/core + // consider using deserialization of some default types (guid, string, int, double) + // to be supported and everything else not supported without inclusion of yt/core. + //! Finds the attribute and deserializes its value. + //! Throws if no such value is found. + template <class T> + T Get(TStringBuf key) const; + + //! Same as #Get but removes the value. + template <class T> + T GetAndRemove(const TString& key); + + //! Finds the attribute and deserializes its value. + //! Uses default value if no such attribute is found. + template <class T> + T Get(TStringBuf key, const T& defaultValue) const; + + //! Same as #Get but removes the value if it exists. + template <class T> + T GetAndRemove(const TString& key, const T& defaultValue); + + //! Finds the attribute and deserializes its value. + //! Returns null if no such attribute is found. + template <class T> + typename TOptionalTraits<T>::TOptional Find(TStringBuf key) const; + + //! Same as #Find but removes the value if it exists. + template <class T> + typename TOptionalTraits<T>::TOptional FindAndRemove(const TString& key); + + template <CMergeableDictionary TDictionary> + void MergeFrom(const TDictionary& dict); + +private: + void* Attributes_; // IAttributesDictionary* + + friend class TErrorOr<void>; + explicit TErrorAttributes(void* attributes); + + TErrorAttributes(const TErrorAttributes& other) = default; + TErrorAttributes& operator= (const TErrorAttributes& other) = default; + + TErrorAttributes(TErrorAttributes&& other) = default; + TErrorAttributes& operator= (TErrorAttributes&& other) = default; +}; + +bool operator == (const TErrorAttributes& lhs, const TErrorAttributes& rhs); + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace NYT + +#define ERROR_ATTRIBUTES_INL_H_ +#include "error_attributes-inl.h" +#undef ERROR_ATTRIBUTES_INL_H_ diff --git a/library/cpp/yt/error/mergeable_dictionary.h b/library/cpp/yt/error/mergeable_dictionary.h new file mode 100644 index 0000000000..90597059e4 --- /dev/null +++ b/library/cpp/yt/error/mergeable_dictionary.h @@ -0,0 +1,57 @@ +#pragma once + +#include "public.h" + +#include <ranges> + +namespace NYT { + +//////////////////////////////////////////////////////////////////////////////// + +// Can be specialized to make your dictionary satisfy CMergeableDictionary. +template <class TDictionary> +struct TMergeDictionariesTraits +{ + static auto MakeIterableView(const TDictionary& dict) + requires false; +}; + +//////////////////////////////////////////////////////////////////////////////// + +namespace NDetail { + +template <class T> +struct TMergeableDictionaryImpl +{ + using TView = std::invoke_result_t<decltype(&TMergeDictionariesTraits<T>::MakeIterableView), const T&>; + using TIterator = std::ranges::iterator_t<TView>; + using TValue = typename std::iterator_traits<TIterator>::value_type; + + static constexpr bool ValidSize = requires { + { std::tuple_size<TValue>::value } -> std::same_as<const size_t&>; + } && (std::tuple_size<TValue>::value == 2); + + static constexpr bool CorrectTupleElements = requires { + typename std::tuple_element<0, TValue>::type; + std::same_as<typename std::tuple_element<0, TValue>::type, TString>; + + typename std::tuple_element<1, TValue>::type; + std::same_as<typename std::tuple_element<1, TValue>::type, NYson::TYsonString>; + }; +}; + +} // namespace NDetail + +//////////////////////////////////////////////////////////////////////////////// + +template <class T> +concept CMergeableDictionary = + requires (const T& dict) { + TMergeDictionariesTraits<T>::MakeIterableView(dict); + } && + NDetail::TMergeableDictionaryImpl<T>::ValidSize && + NDetail::TMergeableDictionaryImpl<T>::CorrectTupleElements; + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace NYT diff --git a/library/cpp/yt/error/public.h b/library/cpp/yt/error/public.h new file mode 100644 index 0000000000..63b95497c7 --- /dev/null +++ b/library/cpp/yt/error/public.h @@ -0,0 +1,17 @@ +#pragma once + +#include <library/cpp/yt/yson_string/string.h> + +namespace NYT { + +//////////////////////////////////////////////////////////////////////////////// + +template <class T> +class TErrorOr; + +class TErrorAttributes; +struct TOriginAttributes; + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace NYT diff --git a/library/cpp/yt/error/ya.make b/library/cpp/yt/error/ya.make index f5bd946199..60d3e9a92f 100644 --- a/library/cpp/yt/error/ya.make +++ b/library/cpp/yt/error/ya.make @@ -9,9 +9,11 @@ PEERDIR( library/cpp/yt/misc library/cpp/yt/threading library/cpp/yt/string + library/cpp/yt/yson_string # TODO(arkady-e1ppa): eliminate ) SRCS( + error_attributes.cpp origin_attributes.cpp ) diff --git a/library/cpp/yt/misc/enum-inl.h b/library/cpp/yt/misc/enum-inl.h index 5e1d04da1f..f1fb9f63e1 100644 --- a/library/cpp/yt/misc/enum-inl.h +++ b/library/cpp/yt/misc/enum-inl.h @@ -11,6 +11,7 @@ #include <util/generic/cast.h> #include <algorithm> +#include <numeric> #include <stdexcept> namespace NYT { @@ -38,6 +39,14 @@ namespace NYT { //////////////////////////////////////////////////////////////////////////////// +template <class T> +constexpr std::optional<T> TryGetEnumUnknownValueImpl(T) +{ + return std::nullopt; +} + +//////////////////////////////////////////////////////////////////////////////// + namespace NDetail { template <typename TValues> @@ -132,6 +141,13 @@ constexpr bool CheckDomainNames(const TNames& names) return std::nullopt; \ } \ \ + static constexpr bool IsKnownValue(T value) \ + { \ + return false \ + PP_FOR_EACH(ENUM__IS_KNOWN_VALUE_ITEM, seq) \ + ; \ + } \ + \ static constexpr const std::array<TStringBuf, DomainSize>& GetDomainNames() \ { \ return Names; \ @@ -184,6 +200,19 @@ constexpr bool CheckDomainNames(const TNames& names) #define ENUM__GET_DOMAIN_NAMES_ITEM_ATOMIC(item) \ TStringBuf(PP_STRINGIZE(item)), +#define ENUM__IS_KNOWN_VALUE_ITEM(item) \ + PP_IF( \ + PP_IS_SEQUENCE(item), \ + ENUM__IS_KNOWN_VALUE_ITEM_SEQ, \ + ENUM__IS_KNOWN_VALUE_ITEM_ATOMIC \ + )(item) + +#define ENUM__IS_KNOWN_VALUE_ITEM_SEQ(seq) \ + ENUM__IS_KNOWN_VALUE_ITEM_ATOMIC(PP_ELEMENT(seq, 0)) + +#define ENUM__IS_KNOWN_VALUE_ITEM_ATOMIC(item) \ + || value == T::item + #define ENUM__VALIDATE_UNIQUE(enumType) \ static_assert(IsMonotonic || ::NYT::NDetail::CheckValuesUnique(Values), \ "Enumeration " #enumType " contains duplicate values"); @@ -241,6 +270,13 @@ constexpr T TEnumTraitsWithKnownDomain<T, true>::GetMaxValue() } template <class T> +constexpr T TEnumTraitsWithKnownDomain<T, true>::GetAllSetValue() + requires (TEnumTraitsImpl<T>::IsBitEnum) +{ + return TEnumTraitsImpl<T>::GetAllSetValue(); +} + +template <class T> std::vector<T> TEnumTraitsWithKnownDomain<T, true>::Decompose(T value) requires (TEnumTraitsImpl<T>::IsBitEnum) { @@ -262,6 +298,13 @@ TStringBuf TEnumTraits<T, true>::GetTypeName() } template <class T> +constexpr std::optional<T> TEnumTraits<T, true>::TryGetUnknownValue() +{ + using NYT::TryGetEnumUnknownValueImpl; + return TryGetEnumUnknownValueImpl(T()); +} + +template <class T> std::optional<T> TEnumTraits<T, true>::FindValueByLiteral(TStringBuf literal) { return TEnumTraitsImpl<T>::FindValueByLiteral(literal); @@ -274,6 +317,13 @@ std::optional<TStringBuf> TEnumTraits<T, true>::FindLiteralByValue(T value) } template <class T> +constexpr bool TEnumTraits<T, true>::IsKnownValue(T value) + requires (!TEnumTraitsImpl<T>::IsBitEnum) +{ + return TEnumTraitsImpl<T>::IsKnownValue(value); +} + +template <class T> TString TEnumTraits<T, true>::ToString(T value) { using ::ToString; @@ -308,7 +358,7 @@ T TEnumTraits<T, true>::FromString(TStringBuf literal) return T(ToUnderlying(lhs) op ToUnderlying(rhs)); \ } \ \ - [[maybe_unused]] inline T& operator assignOp (T& lhs, T rhs) \ + [[maybe_unused]] inline constexpr T& operator assignOp (T& lhs, T rhs) \ { \ lhs = T(ToUnderlying(lhs) op ToUnderlying(rhs)); \ return lhs; \ @@ -326,13 +376,13 @@ T TEnumTraits<T, true>::FromString(TStringBuf literal) return T(ToUnderlying(lhs) op rhs); \ } \ \ - [[maybe_unused]] inline T& operator assignOp (T& lhs, size_t rhs) \ + [[maybe_unused]] inline constexpr T& operator assignOp (T& lhs, size_t rhs) \ { \ lhs = T(ToUnderlying(lhs) op rhs); \ return lhs; \ } -#define ENUM__BITWISE_OPS(enumType) \ +#define ENUM__BITWISE_OPS(enumType) \ ENUM__BINARY_BITWISE_OPERATOR(enumType, &=, &) \ ENUM__BINARY_BITWISE_OPERATOR(enumType, |=, | ) \ ENUM__BINARY_BITWISE_OPERATOR(enumType, ^=, ^) \ @@ -340,6 +390,16 @@ T TEnumTraits<T, true>::FromString(TStringBuf literal) ENUM__BIT_SHIFT_OPERATOR(enumType, <<=, << ) \ ENUM__BIT_SHIFT_OPERATOR(enumType, >>=, >> ) +#define ENUM__ALL_SET_VALUE(enumType, seq) \ + static constexpr enumType GetAllSetValue() \ + { \ + return std::accumulate( \ + Values.begin(), \ + Values.end(), \ + enumType(), \ + [] (auto a, auto b) { return a | b; }); \ + } + //////////////////////////////////////////////////////////////////////////////// template <typename E> diff --git a/library/cpp/yt/misc/enum.h b/library/cpp/yt/misc/enum.h index 4d40ab8ec4..d9611b2823 100644 --- a/library/cpp/yt/misc/enum.h +++ b/library/cpp/yt/misc/enum.h @@ -33,18 +33,11 @@ template <class T> using TEnumTraitsImpl = decltype(GetEnumTraitsImpl(T())); template <class T> -constexpr bool IsEnumDomainSizeKnown() -{ - if constexpr(requires{ TEnumTraitsImpl<T>::DomainSize; }) { - return true; - } else { - return false; - } -} +constexpr std::optional<T> TryGetEnumUnknownValueImpl(T); template < class T, - bool = IsEnumDomainSizeKnown<T>() + bool DomainSizeKnown = requires{ TEnumTraitsImpl<T>::DomainSize; } > struct TEnumTraitsWithKnownDomain { }; @@ -62,7 +55,7 @@ struct TEnumTraits }; template <class T> -struct TEnumTraitsWithKnownDomain<T, true> +struct TEnumTraitsWithKnownDomain<T, /*DomainSizeKnown*/ true> { static constexpr int GetDomainSize(); @@ -76,6 +69,8 @@ struct TEnumTraitsWithKnownDomain<T, true> requires (!TEnumTraitsImpl<T>::IsBitEnum); // For bit enums only. + static constexpr T GetAllSetValue() + requires (TEnumTraitsImpl<T>::IsBitEnum); static std::vector<T> Decompose(T value) requires (TEnumTraitsImpl<T>::IsBitEnum); }; @@ -91,8 +86,11 @@ struct TEnumTraits<T, true> static TStringBuf GetTypeName(); + static constexpr std::optional<T> TryGetUnknownValue(); static std::optional<TStringBuf> FindLiteralByValue(T value); static std::optional<T> FindValueByLiteral(TStringBuf literal); + static constexpr bool IsKnownValue(T value) + requires (!TEnumTraitsImpl<T>::IsBitEnum); static TString ToString(T value); static T FromString(TStringBuf literal); @@ -102,7 +100,7 @@ struct TEnumTraits<T, true> //! Defines a smart enumeration with a specific underlying type. /*! - * \param enumType Enumeration enumType. + * \param enumType Enumeration type. * \param seq Enumeration domain encoded as a <em>sequence</em>. * \param underlyingType Underlying type. */ @@ -127,35 +125,37 @@ struct TEnumTraits<T, true> //! Defines a smart enumeration with a specific underlying type. /*! - * \param enumType Enumeration enumType. + * \param enumType Enumeration type. * \param seq Enumeration domain encoded as a <em>sequence</em>. * \param underlyingType Underlying type. */ #define DEFINE_BIT_ENUM_WITH_UNDERLYING_TYPE(enumType, underlyingType, seq) \ ENUM__CLASS(enumType, underlyingType, seq) \ + ENUM__BITWISE_OPS(enumType) \ ENUM__BEGIN_TRAITS(enumType, underlyingType, true, false, seq) \ ENUM__VALIDATE_UNIQUE(enumType) \ + ENUM__ALL_SET_VALUE(enumType, seq) \ ENUM__END_TRAITS(enumType) \ - ENUM__BITWISE_OPS(enumType) \ static_assert(true) //! Defines a smart enumeration with a specific underlying type. //! Duplicate enumeration values are allowed. /*! - * \param enumType Enumeration enumType. + * \param enumType Enumeration type. * \param seq Enumeration domain encoded as a <em>sequence</em>. * \param underlyingType Underlying type. */ #define DEFINE_AMBIGUOUS_BIT_ENUM_WITH_UNDERLYING_TYPE(enumType, underlyingType, seq) \ ENUM__CLASS(enumType, underlyingType, seq) \ + ENUM__BITWISE_OPS(enumType) \ ENUM__BEGIN_TRAITS(enumType, underlyingType, true, false, seq) \ + ENUM__ALL_SET_VALUE(enumType, seq) \ ENUM__END_TRAITS(enumType) \ - ENUM__BITWISE_OPS(enumType) \ static_assert(true) //! Defines a smart enumeration with the default |unsigned int| underlying type. /*! - * \param enumType Enumeration enumType. + * \param enumType Enumeration type. * \param seq Enumeration domain encoded as a <em>sequence</em>. */ #define DEFINE_BIT_ENUM(enumType, seq) \ @@ -163,7 +163,7 @@ struct TEnumTraits<T, true> //! Defines a smart enumeration with a specific underlying type and IsStringSerializable attribute. /*! - * \param enumType Enumeration enumType. + * \param enumType Enumeration type. * \param seq Enumeration domain encoded as a <em>sequence</em>. * \param underlyingType Underlying type. */ @@ -186,6 +186,18 @@ struct TEnumTraits<T, true> #define DEFINE_STRING_SERIALIZABLE_ENUM(enumType, seq) \ DEFINE_STRING_SERIALIZABLE_ENUM_WITH_UNDERLYING_TYPE(enumType, int, seq) +//! When enum from another representation (e.g. string or protobuf integer), +//! instructs the parser to treat undeclared values as |unknownValue|. +/*! + * \param enumType Enumeration type. + * \param unknownValue A sentinel value of #enumType. + */ +#define DEFINE_ENUM_UNKNOWN_VALUE(enumType, unknownValue) \ + [[maybe_unused]] constexpr std::optional<enumType> TryGetEnumUnknownValueImpl(enumType) \ + { \ + return enumType::unknownValue; \ + } + //////////////////////////////////////////////////////////////////////////////// //! Returns |true| iff the enumeration value is not bitwise zero. diff --git a/library/cpp/yt/misc/unittests/enum_ut.cpp b/library/cpp/yt/misc/unittests/enum_ut.cpp index 63b8666ae1..fc7feed227 100644 --- a/library/cpp/yt/misc/unittests/enum_ut.cpp +++ b/library/cpp/yt/misc/unittests/enum_ut.cpp @@ -50,6 +50,13 @@ DEFINE_ENUM_WITH_UNDERLYING_TYPE(ECardinal, char, ((South) (3)) ); +DEFINE_ENUM(EWithUnknown, + (First) + (Second) + (Unknown) +); +DEFINE_ENUM_UNKNOWN_VALUE(EWithUnknown, Unknown); + //////////////////////////////////////////////////////////////////////////////// template <class T, size_t N> @@ -203,6 +210,22 @@ TEST(TEnumTest, DomainValues) EXPECT_EQ(colorValues, ToVector(TEnumTraits<EColor>::GetDomainValues())); } +TEST(TEnumTest, IsKnownValue) +{ + EXPECT_TRUE(TEnumTraits<ESimple>::IsKnownValue(ESimple::X)); + EXPECT_TRUE(TEnumTraits<ESimple>::IsKnownValue(ESimple::Y)); + EXPECT_TRUE(TEnumTraits<ESimple>::IsKnownValue(ESimple::Z)); + + EXPECT_FALSE(TEnumTraits<ESimple>::IsKnownValue(static_cast<ESimple>(100))); + + EXPECT_TRUE(TEnumTraits<EColor>::IsKnownValue(EColor::Red)); +} + +TEST(TEnumTest, AllSetValue) +{ + EXPECT_EQ(TEnumTraits<EFlag>::GetAllSetValue(), EFlag::_1 | EFlag::_2 | EFlag::_3 | EFlag::_4); +} + TEST(TEnumTest, Decompose1) { auto f = EFlag(0); @@ -280,6 +303,12 @@ TEST(TEnumTest, Cast) } } +TEST(TEnumTest, UnknownValue) +{ + EXPECT_EQ(TEnumTraits<EColor>::TryGetUnknownValue(), std::nullopt); + EXPECT_EQ(TEnumTraits<EWithUnknown>::TryGetUnknownValue(), EWithUnknown::Unknown); +} + //////////////////////////////////////////////////////////////////////////////// } // namespace diff --git a/library/cpp/yt/string/enum-inl.h b/library/cpp/yt/string/enum-inl.h index 41f7197d15..84b0941d15 100644 --- a/library/cpp/yt/string/enum-inl.h +++ b/library/cpp/yt/string/enum-inl.h @@ -5,6 +5,8 @@ #endif #include "format.h" +#include "string.h" +#include "string_builder.h" #include <library/cpp/yt/exception/exception.h> @@ -23,110 +25,106 @@ void ThrowMalformedEnumValueException( TStringBuf value); void FormatUnknownEnumValue( - TStringBuilderBase* builder, + auto* builder, TStringBuf name, - i64 value); + auto value) +{ + builder->AppendFormat("%v::unknown-%v", name, ToUnderlying(value)); +} } // namespace NDetail template <class T> -std::optional<T> TryParseEnum(TStringBuf value) +std::optional<T> TryParseEnum(TStringBuf str, bool enableUnknown) { - auto tryFromString = [] (TStringBuf value) -> std::optional<T> { - if (auto decodedValue = TryDecodeEnumValue(value)) { - auto enumValue = TEnumTraits<T>::FindValueByLiteral(*decodedValue); - return enumValue ? enumValue : TEnumTraits<T>::FindValueByLiteral(value); - } + auto tryParseToken = [&] (TStringBuf token) -> std::optional<T> { + if (auto optionalValue = TEnumTraits<T>::FindValueByLiteral(token)) { + return *optionalValue; - auto reportError = [value] () { - throw TSimpleException(Format("Enum value %Qv is neither in a proper underscore case nor in a format \"%v(123)\"", - value, - TEnumTraits<T>::GetTypeName())); - }; - - TStringBuf typeName; - auto isTypeNameCorrect = value.NextTok('(', typeName) && typeName == TEnumTraits<T>::GetTypeName(); - if (!isTypeNameCorrect) { - reportError(); } - TStringBuf enumValue; - std::underlying_type_t<T> underlyingValue = 0; - auto isEnumValueCorrect = value.NextTok(')', enumValue) && TryFromString(enumValue, underlyingValue); - if (!isEnumValueCorrect) { - reportError(); + if (auto optionalDecodedValue = TryDecodeEnumValue(token)) { + if (auto optionalValue = TEnumTraits<T>::FindValueByLiteral(*optionalDecodedValue)) { + return *optionalValue; + } } - auto isParsingComplete = value.empty(); - if (!isParsingComplete) { - reportError(); + if (enableUnknown) { + if constexpr (constexpr auto optionalUnknownValue = TEnumTraits<T>::TryGetUnknownValue()) { + return *optionalUnknownValue; + } } - return static_cast<T>(underlyingValue); + return std::nullopt; }; if constexpr (TEnumTraits<T>::IsBitEnum) { T result{}; TStringBuf token; - while (value.NextTok('|', token)) { - if (auto scalar = tryFromString(StripString(token))) { - result |= *scalar; + while (str.NextTok('|', token)) { + if (auto optionalValue = tryParseToken(StripString(token))) { + result |= *optionalValue; } else { return {}; } } return result; } else { - return tryFromString(value); + return tryParseToken(str); } } template <class T> -T ParseEnum(TStringBuf value) +T ParseEnum(TStringBuf str) { - if (auto optionalResult = TryParseEnum<T>(value)) { + if (auto optionalResult = TryParseEnum<T>(str, /*enableUnkown*/ true)) { return *optionalResult; } - NYT::NDetail::ThrowMalformedEnumValueException(TEnumTraits<T>::GetTypeName(), value); + NYT::NDetail::ThrowMalformedEnumValueException(TEnumTraits<T>::GetTypeName(), str); } template <class T> void FormatEnum(TStringBuilderBase* builder, T value, bool lowerCase) { - auto formatScalarValue = [builder, lowerCase] (T value) { - auto optionalLiteral = TEnumTraits<T>::FindLiteralByValue(value); - if (!optionalLiteral) { - NYT::NDetail::FormatUnknownEnumValue( - builder, - TEnumTraits<T>::GetTypeName(), - ToUnderlying(value)); - return; - } - + auto formatLiteral = [&] (auto* builder, TStringBuf literal) { if (lowerCase) { - CamelCaseToUnderscoreCase(builder, *optionalLiteral); + CamelCaseToUnderscoreCase(builder, literal); } else { - builder->AppendString(*optionalLiteral); + builder->AppendString(literal); } }; if constexpr (TEnumTraits<T>::IsBitEnum) { - if (TEnumTraits<T>::FindLiteralByValue(value)) { - formatScalarValue(value); + if (None(value)) { + // Avoid empty string if possible. + if (auto optionalLiteral = TEnumTraits<T>::FindLiteralByValue(value)) { + formatLiteral(builder, *optionalLiteral); + } return; } - auto first = true; - for (auto scalarValue : TEnumTraits<T>::GetDomainValues()) { - if (Any(value & scalarValue)) { - if (!first) { - builder->AppendString(TStringBuf(" | ")); - } - first = false; - formatScalarValue(scalarValue); + + TDelimitedStringBuilderWrapper delimitedBuilder(builder, " | "); + + T printedValue{}; + for (auto currentValue : TEnumTraits<T>::GetDomainValues()) { + // Check if currentValue is viable and non-redunant. + if ((value & currentValue) == currentValue && (printedValue | currentValue) != printedValue) { + formatLiteral(&delimitedBuilder, *TEnumTraits<T>::FindLiteralByValue(currentValue)); + printedValue |= currentValue; } } + + // Handle the remainder. + if (printedValue != value) { + NYT::NDetail::FormatUnknownEnumValue(&delimitedBuilder, TEnumTraits<T>::GetTypeName(), value & ~printedValue); + } } else { - formatScalarValue(value); + if (auto optionalLiteral = TEnumTraits<T>::FindLiteralByValue(value)) { + formatLiteral(builder, *optionalLiteral); + return; + } + + NYT::NDetail::FormatUnknownEnumValue(builder, TEnumTraits<T>::GetTypeName(), value); } } diff --git a/library/cpp/yt/string/enum.cpp b/library/cpp/yt/string/enum.cpp index e61b813fd2..935c3e6e3e 100644 --- a/library/cpp/yt/string/enum.cpp +++ b/library/cpp/yt/string/enum.cpp @@ -6,13 +6,22 @@ namespace NYT { //////////////////////////////////////////////////////////////////////////////// -template <bool failOnError> +namespace NDetail { + +void ThrowMalformedEnumValueException(TStringBuf typeName, TStringBuf value) +{ + throw TSimpleException(Format("Error parsing %v value %Qv", + typeName, + value)); +} + +template <bool ThrowOnError> std::optional<TString> DecodeEnumValueImpl(TStringBuf value) { auto camelValue = UnderscoreCaseToCamelCase(value); auto underscoreValue = CamelCaseToUnderscoreCase(camelValue); if (value != underscoreValue) { - if constexpr (failOnError) { + if constexpr (ThrowOnError) { throw TSimpleException(Format("Enum value %Qv is not in a proper underscore case; did you mean %Qv?", value, underscoreValue)); @@ -23,14 +32,16 @@ std::optional<TString> DecodeEnumValueImpl(TStringBuf value) return camelValue; } +} // namespace NDetail + std::optional<TString> TryDecodeEnumValue(TStringBuf value) { - return DecodeEnumValueImpl<false>(value); + return NDetail::DecodeEnumValueImpl<false>(value); } TString DecodeEnumValue(TStringBuf value) { - auto decodedValue = DecodeEnumValueImpl<true>(value); + auto decodedValue = NDetail::DecodeEnumValueImpl<true>(value); YT_VERIFY(decodedValue); return *decodedValue; } @@ -40,22 +51,6 @@ TString EncodeEnumValue(TStringBuf value) return CamelCaseToUnderscoreCase(value); } -namespace NDetail { - -void ThrowMalformedEnumValueException(TStringBuf typeName, TStringBuf value) -{ - throw TSimpleException(Format("Error parsing %v value %Qv", - typeName, - value)); -} - -void FormatUnknownEnumValue(TStringBuilderBase* builder, TStringBuf name, i64 value) -{ - builder->AppendFormat("%v(%v)", name, value); -} - -} // namespace NDetail - //////////////////////////////////////////////////////////////////////////////// } // namespace NYT diff --git a/library/cpp/yt/string/enum.h b/library/cpp/yt/string/enum.h index 792e09402d..a0be527583 100644 --- a/library/cpp/yt/string/enum.h +++ b/library/cpp/yt/string/enum.h @@ -15,10 +15,10 @@ TString DecodeEnumValue(TStringBuf value); TString EncodeEnumValue(TStringBuf value); template <class T> -std::optional<T> TryParseEnum(TStringBuf value); +std::optional<T> TryParseEnum(TStringBuf str, bool enableUnknown = false); template <class T> -T ParseEnum(TStringBuf value); +T ParseEnum(TStringBuf str); template <class T> void FormatEnum(TStringBuilderBase* builder, T value, bool lowerCase); diff --git a/library/cpp/yt/string/unittests/enum_ut.cpp b/library/cpp/yt/string/unittests/enum_ut.cpp index be5387151a..39dbdfd207 100644 --- a/library/cpp/yt/string/unittests/enum_ut.cpp +++ b/library/cpp/yt/string/unittests/enum_ut.cpp @@ -27,13 +27,39 @@ DEFINE_BIT_ENUM(ELangs, ((Rust) (0x04)) ((Python) (0x08)) ((JavaScript) (0x10)) + ((CppGo) (0x03)) + ((All) (0x1f)) ); +DEFINE_BIT_ENUM(ELangsWithUnknown, + ((None) (0x00)) + ((Cpp) (0x01)) + ((Go) (0x02)) + ((Rust) (0x04)) + ((Python) (0x08)) + ((JavaScript) (0x10)) + ((CppGo) (0x03)) + ((All) (0x1f)) + ((Unknown) (0x20)) +); +DEFINE_ENUM_UNKNOWN_VALUE(ELangsWithUnknown, Unknown); + DEFINE_ENUM(ECustomDomainName, ((A) (1) ("value_a")) ((B) (2) ("value_b")) ); +DEFINE_ENUM(EColorWithUnknown, + (Red) + (Green) + (Unknown) +); +DEFINE_ENUM_UNKNOWN_VALUE(EColorWithUnknown, Unknown); + +DEFINE_BIT_ENUM(EBitEnumWithoutNone, + ((Some)(1)) +); + TEST(TFormatTest, Enum) { EXPECT_EQ("Red", Format("%v", EColor::Red)); @@ -42,7 +68,8 @@ TEST(TFormatTest, Enum) EXPECT_EQ("BlackAndWhite", Format("%v", EColor::BlackAndWhite)); EXPECT_EQ("black_and_white", Format("%lv", EColor::BlackAndWhite)); - EXPECT_EQ("EColor(100)", Format("%v", EColor(100))); + EXPECT_EQ("EColor::unknown-100", Format("%v", EColor(100))); + EXPECT_EQ("Cpp | ELangs::unknown-32", Format("%v", ELangs(0x21))); EXPECT_EQ("JavaScript", Format("%v", ELangs::JavaScript)); EXPECT_EQ("java_script", Format("%lv", ELangs::JavaScript)); @@ -50,6 +77,8 @@ TEST(TFormatTest, Enum) EXPECT_EQ("None", Format("%v", ELangs::None)); EXPECT_EQ("none", Format("%lv", ELangs::None)); + EXPECT_EQ("", Format("%v", EBitEnumWithoutNone())); + EXPECT_EQ("Cpp | Go", Format("%v", ELangs::Cpp | ELangs::Go)); EXPECT_EQ("cpp | go", Format("%lv", ELangs::Cpp | ELangs::Go)); @@ -64,6 +93,19 @@ TEST(TFormatEnumTest, FormatEnumWithCustomDomainName) EXPECT_EQ("value_b", FormatEnum(ECustomDomainName::B)); } +TEST(TParseEnumTest, ParseUnknown) +{ + EXPECT_EQ(std::nullopt, TryParseEnum<EColor>("yellow")); + EXPECT_THROW(ParseEnum<EColor>("yellow"), TSimpleException); + EXPECT_EQ(std::nullopt, TryParseEnum<EColorWithUnknown>("yellow")); + EXPECT_EQ(EColorWithUnknown::Unknown, TryParseEnum<EColorWithUnknown>("yellow", /*enableUnknown*/ true)); + EXPECT_EQ(EColorWithUnknown::Unknown, ParseEnum<EColorWithUnknown>("yellow")); + EXPECT_EQ(std::nullopt, TryParseEnum<ELangs>("cpp | haskell")); + EXPECT_THROW(ParseEnum<ELangs>("cpp | haskell"), TSimpleException); + EXPECT_EQ(ELangsWithUnknown::Cpp | ELangsWithUnknown::Unknown, TryParseEnum<ELangsWithUnknown>("cpp | haskell", /*enableUnknown*/ true)); + EXPECT_EQ(ELangsWithUnknown::Cpp | ELangsWithUnknown::Unknown, ParseEnum<ELangsWithUnknown>("cpp | haskell")); +} + TEST(TParseEnumTest, ParseEnumWithCustomDomainName) { EXPECT_EQ(ECustomDomainName::A, TryParseEnum<ECustomDomainName>("value_a")); @@ -77,7 +119,7 @@ TEST(TParseEnumTest, ParseBitEnum) EXPECT_EQ(ELangs::Cpp, TryParseEnum<ELangs>("cpp")); EXPECT_EQ(ELangs::Cpp | ELangs::Rust, TryParseEnum<ELangs>("cpp|rust")); EXPECT_EQ(ELangs::Cpp | ELangs::Rust, TryParseEnum<ELangs>("cpp | rust")); - EXPECT_EQ(std::nullopt, TryParseEnum<ELangs>("unk | rust")); + EXPECT_EQ(std::nullopt, TryParseEnum<ELangs>("haskell | rust")); } //////////////////////////////////////////////////////////////////////////////// diff --git a/library/python/testing/style/rules.py b/library/python/testing/style/rules.py index 1f4d283769..0de9dcdbca 100644 --- a/library/python/testing/style/rules.py +++ b/library/python/testing/style/rules.py @@ -16,7 +16,7 @@ def _path_skip_reason(path, skip_links=True): if '/generated/' in path: return "path '{}' contains '/generated/'".format(path) - if path and '/contrib/' in path: + if path and '/contrib/' in path and '/.yandex_meta/' not in path: return "path '{}' contains '/contrib/'".format(path) if path and '/vendor/' in path: diff --git a/tools/enum_parser/parse_enum/benchmark/ya.make b/tools/enum_parser/parse_enum/benchmark/ya.make index a3ebd34158..44bdbb9f5a 100644 --- a/tools/enum_parser/parse_enum/benchmark/ya.make +++ b/tools/enum_parser/parse_enum/benchmark/ya.make @@ -9,3 +9,7 @@ SRCS( GENERATE_ENUM_SERIALIZATION_WITH_HEADER(enum.h) END() + +IF (NOT OPENSOURCE) +RECURSE(from_string) +ENDIF() diff --git a/util/generic/string.h b/util/generic/string.h index 46b994bb97..d371ec9ce3 100644 --- a/util/generic/string.h +++ b/util/generic/string.h @@ -191,7 +191,7 @@ public: size_t Size; }; - static size_t max_size() noexcept { + size_t max_size() noexcept { static size_t res = TStringType().max_size(); return res; diff --git a/util/generic/ut/ya.make b/util/generic/ut/ya.make index 38978e129d..6a605564fe 100644 --- a/util/generic/ut/ya.make +++ b/util/generic/ut/ya.make @@ -43,6 +43,7 @@ SRCS( generic/strbuf_ut.cpp generic/string_transparent_hash_ut.cpp generic/string_ut.cpp + generic/string_ut.h generic/typelist_ut.cpp generic/typetraits_ut.cpp generic/utility_ut.cpp @@ -51,6 +52,7 @@ SRCS( generic/xrange_ut.cpp generic/yexception_ut.c generic/yexception_ut.cpp + generic/yexception_ut.h generic/ylimits_ut.cpp generic/ymath_ut.cpp ) diff --git a/util/ya.make b/util/ya.make index bd354fb9da..943d8b16cd 100644 --- a/util/ya.make +++ b/util/ya.make @@ -395,6 +395,21 @@ JOIN_SRCS( thread/singleton.cpp ) +HEADERS( + datetime + digest + folder + generic + memory + network + random + stream + string + system + thread + EXCLUDE **/*_ut.h +) + END() RECURSE( @@ -39,33 +39,33 @@ REGISTRY_ENDPOINT = os.environ.get("YA_REGISTRY_ENDPOINT", "https://devtools-reg PLATFORM_MAP = { "data": { "darwin": { - "md5": "a5d56883364c50cc9cfe956ea123fe29", + "md5": "d498a32a83ebc284d4a0ac76a8464dff", "urls": [ - f"{REGISTRY_ENDPOINT}/7303160249" + f"{REGISTRY_ENDPOINT}/7347470247" ] }, "darwin-arm64": { - "md5": "958f4a35e5f4aea32a2587eb5cf2fe44", + "md5": "2b48dd9abef31c0264e91fbbb6ae0f03", "urls": [ - f"{REGISTRY_ENDPOINT}/7303159815" + f"{REGISTRY_ENDPOINT}/7347470076" ] }, "linux-aarch64": { - "md5": "009365bb2ee328d5e55711b995855304", + "md5": "d7c5fe0de17fbdf04e60fa9632b9307a", "urls": [ - f"{REGISTRY_ENDPOINT}/7303159260" + f"{REGISTRY_ENDPOINT}/7347469784" ] }, "win32-clang-cl": { - "md5": "a29c6a99b22e0cb2e3f8e54fc62fb5f2", + "md5": "5dd786fda8f01aab8299e56d0e1d6648", "urls": [ - f"{REGISTRY_ENDPOINT}/7303160609" + f"{REGISTRY_ENDPOINT}/7347470608" ] }, "linux": { - "md5": "6331f2b92f5c3db13d9cd544a7d517eb", + "md5": "f2352809e245f2d7d753b2391ad15c43", "urls": [ - f"{REGISTRY_ENDPOINT}/7303160933" + f"{REGISTRY_ENDPOINT}/7347471000" ] } } diff --git a/yql/essentials/ya.make b/yql/essentials/ya.make new file mode 100644 index 0000000000..48f46c7cd8 --- /dev/null +++ b/yql/essentials/ya.make @@ -0,0 +1,5 @@ +SUBSCRIBER(g:yql) + +RECURSE( +) + diff --git a/yt/cpp/mapreduce/client/operation.cpp b/yt/cpp/mapreduce/client/operation.cpp index a0d857d553..c94d54d56e 100644 --- a/yt/cpp/mapreduce/client/operation.cpp +++ b/yt/cpp/mapreduce/client/operation.cpp @@ -558,7 +558,7 @@ EOperationBriefState CheckOperation( .Add(EOperationAttribute::Result))); Y_ABORT_UNLESS(attributes.BriefState, "get_operation for operation %s has not returned \"state\" field", - GetGuidAsString(operationId).Data()); + GetGuidAsString(operationId).data()); if (*attributes.BriefState == EOperationBriefState::Completed) { return EOperationBriefState::Completed; } else if (*attributes.BriefState == EOperationBriefState::Aborted || *attributes.BriefState == EOperationBriefState::Failed) { @@ -2271,7 +2271,7 @@ public: } Y_ABORT_UNLESS(attributes.BriefState, "get_operation for operation %s has not returned \"state\" field", - GetGuidAsString(OperationImpl_->GetId()).Data()); + GetGuidAsString(OperationImpl_->GetId()).data()); if (*attributes.BriefState != EOperationBriefState::InProgress) { OperationImpl_->AsyncFinishOperation(attributes); return PollBreak; @@ -2440,7 +2440,7 @@ EOperationBriefState TOperation::TOperationImpl::GetBriefState() UpdateAttributesAndCall(false, [&] (const TOperationAttributes& attributes) { Y_ABORT_UNLESS(attributes.BriefState, "get_operation for operation %s has not returned \"state\" field", - GetGuidAsString(*Id_).Data()); + GetGuidAsString(*Id_).data()); result = *attributes.BriefState; }); return result; @@ -2537,8 +2537,8 @@ void TOperation::TOperationImpl::OnStarted(const TOperationId& operationId) auto guard = Guard(Lock_); Y_ABORT_UNLESS(!Id_, "OnStarted() called with operationId = %s for operation with id %s", - GetGuidAsString(operationId).Data(), - GetGuidAsString(*Id_).Data()); + GetGuidAsString(operationId).data(), + GetGuidAsString(*Id_).data()); Id_ = operationId; Y_ABORT_UNLESS(!StartedPromise_.HasValue() && !StartedPromise_.HasException()); @@ -2662,7 +2662,7 @@ void TOperation::TOperationImpl::SyncFinishOperationImpl(const TOperationAttribu } Y_ABORT_UNLESS(attributes.BriefState, "get_operation for operation %s has not returned \"state\" field", - GetGuidAsString(*Id_).Data()); + GetGuidAsString(*Id_).data()); Y_ABORT_UNLESS(*attributes.BriefState != EOperationBriefState::InProgress); { diff --git a/yt/cpp/mapreduce/interface/operation.h b/yt/cpp/mapreduce/interface/operation.h index f2de3ea3bd..b30d39be5d 100644 --- a/yt/cpp/mapreduce/interface/operation.h +++ b/yt/cpp/mapreduce/interface/operation.h @@ -17,12 +17,13 @@ #include <library/cpp/type_info/type_info.h> #include <util/datetime/base.h> -#include <util/generic/variant.h> #include <util/generic/vector.h> #include <util/generic/maybe.h> #include <util/system/file.h> #include <util/system/types.h> +#include <variant> + namespace NYT { //////////////////////////////////////////////////////////////////////////////// diff --git a/yt/python/yt/common.py b/yt/python/yt/common.py index a3c2969125..5d251f17d0 100644 --- a/yt/python/yt/common.py +++ b/yt/python/yt/common.py @@ -641,7 +641,7 @@ def flatten(obj, list_types=(list, tuple, set, frozenset, types.GeneratorType)): def update_from_env(variables): - """Update variables dict from environment.""" + """Update variables dict from environment (cuts name prefix "YT_").""" for key, value in iteritems(os.environ): prefix = "YT_" if not key.startswith(prefix): diff --git a/yt/python/yt/type_info/__init__.py b/yt/python/yt/type_info/__init__.py index 33813771da..27203cd516 100644 --- a/yt/python/yt/type_info/__init__.py +++ b/yt/python/yt/type_info/__init__.py @@ -5,7 +5,7 @@ from .type_base import ( # noqa from .typing import ( # noqa Bool, Int8, Uint8, Int16, Uint16, Int32, Uint32, Int64, Uint64, Float, Double, String, Utf8, Yson, Json, Uuid, Date, Datetime, Timestamp, - Interval, TzDate, TzDatetime, TzTimestamp, Void, Null, Optional, List, + Interval, Date32, Datetime64, Timestamp64, Interval64, TzDate, TzDatetime, TzTimestamp, Void, Null, Optional, List, Tuple, Dict, Struct, Variant, Tagged, Decimal, EmptyTuple, EmptyStruct, serialize_yson, deserialize_yson, deserialize_yson_v1, ) diff --git a/yt/python/yt/type_info/test/lib/helpers.py b/yt/python/yt/type_info/test/lib/helpers.py index 1f4c54a14f..9740f7c4ed 100644 --- a/yt/python/yt/type_info/test/lib/helpers.py +++ b/yt/python/yt/type_info/test/lib/helpers.py @@ -21,6 +21,10 @@ NO_ARGUMENT_TYPES = [ "Datetime", "Timestamp", "Interval", + "Date32", + "Datetime64", + "Timestamp64", + "Interval64", "TzDate", "TzDatetime", "TzTimestamp", diff --git a/yt/python/yt/type_info/typing.py b/yt/python/yt/type_info/typing.py index 0d9abc505f..ba76716041 100644 --- a/yt/python/yt/type_info/typing.py +++ b/yt/python/yt/type_info/typing.py @@ -362,6 +362,10 @@ Date = type_base.make_primitive_type("Date") Datetime = type_base.make_primitive_type("Datetime") Timestamp = type_base.make_primitive_type("Timestamp") Interval = type_base.make_primitive_type("Interval") +Date32 = type_base.make_primitive_type("Date32") +Datetime64 = type_base.make_primitive_type("Datetime64") +Timestamp64 = type_base.make_primitive_type("Timestamp64") +Interval64 = type_base.make_primitive_type("Interval64") TzDate = type_base.make_primitive_type("TzDate", yt_type_name="tz_date") TzDatetime = type_base.make_primitive_type("TzDatetime", yt_type_name="tz_datetime") TzTimestamp = type_base.make_primitive_type("TzTimestamp", yt_type_name="tz_timestamp") diff --git a/yt/yt/client/api/options.cpp b/yt/yt/client/api/options.cpp index c14982e645..ef46291e03 100644 --- a/yt/yt/client/api/options.cpp +++ b/yt/yt/client/api/options.cpp @@ -1,9 +1,7 @@ #include "options.h" -#include <util/folder/dirut.h> -#include <util/folder/path.h> +#include <yt/yt/library/auth/auth.h> -#include <util/stream/file.h> #include <util/string/strip.h> #include <util/system/env.h> @@ -14,26 +12,15 @@ namespace NYT::NApi { NApi::TClientOptions GetClientOptionsFromEnv() { - NApi::TClientOptions options; + NApi::TClientOptions options { + .Token = NAuth::LoadToken(), + }; auto user = Strip(GetEnv("YT_USER")); if (!user.empty()) { options.User = user; } - auto token = Strip(GetEnv("YT_TOKEN")); - if (!token.empty()) { - options.Token = token; - } else { - auto tokenPath = Strip(GetEnv("YT_TOKEN_PATH")); - if (tokenPath.empty()) { - tokenPath = GetHomeDir() + "/.yt/token"; - } - TFsPath path(tokenPath); - if (path.IsFile()) { - options.Token = Strip(TIFStream(path).ReadAll()); - } - } return options; } diff --git a/yt/yt/client/api/rpc_proxy/client_base.cpp b/yt/yt/client/api/rpc_proxy/client_base.cpp index 266cecd1db..3c4320a3c0 100644 --- a/yt/yt/client/api/rpc_proxy/client_base.cpp +++ b/yt/yt/client/api/rpc_proxy/client_base.cpp @@ -132,9 +132,9 @@ TFuture<ITransactionPtr> TClientBase::StartTransaction( req->SetTimeout(config->RpcTimeout); req->set_type(static_cast<NProto::ETransactionType>(type)); - req->set_timeout(ToProto<i64>(timeout)); + req->set_timeout(ToProto(timeout)); if (options.Deadline) { - req->set_deadline(ToProto<ui64>(*options.Deadline)); + req->set_deadline(ToProto(*options.Deadline)); } if (options.Id) { ToProto(req->mutable_id(), options.Id); @@ -312,7 +312,7 @@ TFuture<NCypressClient::TNodeId> TClientBase::CreateNode( SetTimeoutOptions(*req, options); req->set_path(path); - req->set_type(ToProto<int>(type)); + req->set_type(ToProto(type)); if (options.Attributes) { ToProto(req->mutable_attributes(), *options.Attributes); @@ -393,7 +393,7 @@ TFuture<void> TClientBase::MultisetAttributesNode( std::sort(children.begin(), children.end()); for (const auto& [attribute, value] : children) { auto* protoSubrequest = req->add_subrequests(); - protoSubrequest->set_attribute(ToProto<TProtobufString>(attribute)); + protoSubrequest->set_attribute(ToProto(attribute)); protoSubrequest->set_value(ConvertToYsonString(value).ToString()); } @@ -416,7 +416,7 @@ TFuture<TLockNodeResult> TClientBase::LockNode( SetTimeoutOptions(*req, options); req->set_path(path); - req->set_mode(ToProto<int>(mode)); + req->set_mode(ToProto(mode)); req->set_waitable(options.Waitable); if (options.ChildKey) { @@ -584,7 +584,7 @@ TFuture<void> TClientBase::ExternalizeNode( SetTimeoutOptions(*req, options); ToProto(req->mutable_path(), path); - req->set_cell_tag(ToProto<int>(cellTag)); + req->set_cell_tag(ToProto(cellTag)); ToProto(req->mutable_transactional_options(), options); return req->Invoke().As<void>(); @@ -612,7 +612,7 @@ TFuture<NObjectClient::TObjectId> TClientBase::CreateObject( auto proxy = CreateApiServiceProxy(); auto req = proxy.CreateObject(); - req->set_type(ToProto<int>(type)); + req->set_type(ToProto(type)); req->set_ignore_existing(options.IgnoreExisting); req->set_sync(options.Sync); if (options.Attributes) { @@ -1060,7 +1060,7 @@ TFuture<TSelectRowsResult> TClientBase::SelectRows( req->set_verbose_logging(options.VerboseLogging); req->set_new_range_inference(options.NewRangeInference); if (options.ExecutionBackend) { - req->set_execution_backend(static_cast<int>(*options.ExecutionBackend)); + req->set_execution_backend(ToProto(*options.ExecutionBackend)); } req->set_enable_code_cache(options.EnableCodeCache); req->set_memory_limit_per_node(options.MemoryLimitPerNode); diff --git a/yt/yt/client/api/rpc_proxy/client_impl.cpp b/yt/yt/client/api/rpc_proxy/client_impl.cpp index 430b366714..cc9694ca70 100644 --- a/yt/yt/client/api/rpc_proxy/client_impl.cpp +++ b/yt/yt/client/api/rpc_proxy/client_impl.cpp @@ -3,6 +3,8 @@ #include "config.h" #include "helpers.h" #include "private.h" +#include "row_batch_reader.h" +#include "row_batch_writer.h" #include "table_mount_cache.h" #include "table_writer.h" #include "timestamp_provider.h" @@ -106,13 +108,13 @@ void TClient::Terminate() //////////////////////////////////////////////////////////////////////////////// -IChannelPtr TClient::CreateSequoiaAwareRetryingChannel(NRpc::IChannelPtr channel, bool retryProxyBanned) const +IChannelPtr TClient::CreateSequoiaAwareRetryingChannel(IChannelPtr channel, bool retryProxyBanned) const { const auto& config = Connection_->GetConfig(); bool retrySequoiaErrorsOnly = !config->EnableRetries; // NB: even if client's retries are disabled Sequoia transient failures are // still retriable. See IsRetriableError(). - return NRpc::CreateRetryingChannel( + return CreateRetryingChannel( config->RetryingChannel, std::move(channel), BIND([=] (const TError& error) { @@ -123,7 +125,7 @@ IChannelPtr TClient::CreateSequoiaAwareRetryingChannel(NRpc::IChannelPtr channel IChannelPtr TClient::CreateNonRetryingChannelByAddress(const std::string& address) const { return CreateCredentialsInjectingChannel( - Connection_->CreateChannelByAddress(address), + Connection_->CreateChannelByAddress(TString(address)), ClientOptions_); } @@ -525,9 +527,9 @@ TFuture<void> TClient::CreateTableBackup( SetTimeoutOptions(*req, options); ToProto(req->mutable_manifest(), *manifest); - req->set_checkpoint_timestamp_delay(ToProto<i64>(options.CheckpointTimestampDelay)); - req->set_checkpoint_check_period(ToProto<i64>(options.CheckpointCheckPeriod)); - req->set_checkpoint_check_timeout(ToProto<i64>(options.CheckpointCheckTimeout)); + req->set_checkpoint_timestamp_delay(ToProto(options.CheckpointTimestampDelay)); + req->set_checkpoint_check_period(ToProto(options.CheckpointCheckPeriod)); + req->set_checkpoint_check_timeout(ToProto(options.CheckpointCheckTimeout)); req->set_force(options.Force); req->set_preserve_account(options.PreserveAccount); @@ -568,7 +570,7 @@ TFuture<std::vector<TTableReplicaId>> TClient::GetInSyncReplicas( } if (options.CachedSyncReplicasTimeout) { - req->set_cached_sync_replicas_timeout(NYT::ToProto<i64>(*options.CachedSyncReplicasTimeout)); + req->set_cached_sync_replicas_timeout(NYT::ToProto(*options.CachedSyncReplicasTimeout)); } req->set_path(path); @@ -594,7 +596,7 @@ TFuture<std::vector<TTableReplicaId>> TClient::GetInSyncReplicas( } if (options.CachedSyncReplicasTimeout) { - req->set_cached_sync_replicas_timeout(NYT::ToProto<i64>(*options.CachedSyncReplicasTimeout)); + req->set_cached_sync_replicas_timeout(NYT::ToProto(*options.CachedSyncReplicasTimeout)); } req->set_path(path); @@ -766,7 +768,7 @@ TFuture<ITableWriterPtr> TClient::CreateFragmentTableWriter( FillRequest(req.Get(), cookie, options); auto schema = New<TTableSchema>(); - return NRpc::CreateRpcClientOutputStream( + return CreateRpcClientOutputStream( std::move(req), BIND ([=] (const TSharedRef& metaRef) { NApi::NRpcProxy::NProto::TWriteTableMeta meta; @@ -1016,9 +1018,9 @@ TFuture<TCheckPermissionResponse> TClient::CheckPermission( auto req = proxy.CheckPermission(); SetTimeoutOptions(*req, options); - req->set_user(ToProto<TProtobufString>(user)); + req->set_user(ToProto(user)); req->set_path(path); - req->set_permission(static_cast<int>(permission)); + req->set_permission(ToProto(permission)); if (options.Columns) { auto* protoColumns = req->mutable_columns(); ToProto(protoColumns->mutable_items(), *options.Columns); @@ -1053,9 +1055,9 @@ TFuture<TCheckPermissionByAclResult> TClient::CheckPermissionByAcl( SetTimeoutOptions(*req, options); if (user) { - req->set_user(ToProto<TProtobufString>(*user)); + req->set_user(ToProto(*user)); } - req->set_permission(static_cast<int>(permission)); + req->set_permission(ToProto(permission)); req->set_acl(ConvertToYsonString(acl).ToString()); req->set_ignore_missing_subjects(options.IgnoreMissingSubjects); @@ -1227,7 +1229,7 @@ TFuture<TOperation> TClient::GetOperation( } req->set_include_runtime(options.IncludeRuntime); - req->set_maximum_cypress_progress_age(ToProto<i64>(options.MaximumCypressProgressAge)); + req->set_maximum_cypress_progress_age(ToProto(options.MaximumCypressProgressAge)); return req->Invoke().Apply(BIND([] (const TApiServiceProxy::TRspGetOperationPtr& rsp) { auto attributes = ConvertToAttributes(TYsonStringBuf(rsp->meta())); @@ -1397,13 +1399,13 @@ TFuture<TListOperationsResult> TClient::ListOperations( SetTimeoutOptions(*req, options); if (options.FromTime) { - req->set_from_time(NYT::ToProto<i64>(*options.FromTime)); + req->set_from_time(NYT::ToProto(*options.FromTime)); } if (options.ToTime) { - req->set_to_time(NYT::ToProto<i64>(*options.ToTime)); + req->set_to_time(NYT::ToProto(*options.ToTime)); } if (options.CursorTime) { - req->set_cursor_time(NYT::ToProto<i64>(*options.CursorTime)); + req->set_cursor_time(NYT::ToProto(*options.CursorTime)); } req->set_cursor_direction(static_cast<NProto::EOperationSortDirection>(options.CursorDirection)); if (options.UserFilter) { @@ -1433,7 +1435,7 @@ TFuture<TListOperationsResult> TClient::ListOperations( req->set_with_failed_jobs(*options.WithFailedJobs); } if (options.ArchiveFetchingTimeout) { - req->set_archive_fetching_timeout(NYT::ToProto<i64>(options.ArchiveFetchingTimeout)); + req->set_archive_fetching_timeout(NYT::ToProto(options.ArchiveFetchingTimeout)); } req->set_include_archive(options.IncludeArchive); req->set_include_counters(options.IncludeCounters); @@ -1509,7 +1511,7 @@ TFuture<TListJobsResult> TClient::ListJobs( req->set_include_archive(options.IncludeArchive); req->set_data_source(static_cast<NProto::EDataSource>(options.DataSource)); - req->set_running_jobs_lookbehind_period(NYT::ToProto<i64>(options.RunningJobsLookbehindPeriod)); + req->set_running_jobs_lookbehind_period(NYT::ToProto(options.RunningJobsLookbehindPeriod)); ToProto(req->mutable_master_read_options(), options); @@ -1593,7 +1595,7 @@ TFuture<void> TClient::AbortJob( ToProto(req->mutable_job_id(), jobId); if (options.InterruptTimeout) { - req->set_interrupt_timeout(NYT::ToProto<i64>(*options.InterruptTimeout)); + req->set_interrupt_timeout(NYT::ToProto(*options.InterruptTimeout)); } return req->Invoke().As<void>(); @@ -1742,7 +1744,7 @@ TFuture<NApi::TMultiTablePartitions> TClient::PartitionTables( ToProto(req->mutable_fetcher_config(), options.FetcherConfig); req->mutable_chunk_slice_fetcher_config()->set_max_slices_per_fetch( - ToProto<i64>(options.ChunkSliceFetcherConfig->MaxSlicesPerFetch)); + options.ChunkSliceFetcherConfig->MaxSlicesPerFetch); req->set_partition_mode(static_cast<NProto::EPartitionTablesMode>(options.PartitionMode)); @@ -2005,7 +2007,7 @@ TFuture<TMaintenanceIdPerTarget> TClient::AddMaintenance( SetTimeoutOptions(*req, options); req->set_component(ConvertMaintenanceComponentToProto(component)); - req->set_address(ToProto<TProtobufString>(address)); + req->set_address(ToProto(address)); req->set_type(ConvertMaintenanceTypeToProto(type)); req->set_comment(comment); req->set_supports_per_target_response(true); @@ -2041,7 +2043,7 @@ TFuture<TMaintenanceCountsPerTarget> TClient::RemoveMaintenance( SetTimeoutOptions(*req, options); req->set_component(ConvertMaintenanceComponentToProto(component)); - req->set_address(ToProto<TProtobufString>(address)); + req->set_address(ToProto(address)); ToProto(req->mutable_ids(), filter.Ids); @@ -2056,7 +2058,7 @@ TFuture<TMaintenanceCountsPerTarget> TClient::RemoveMaintenance( req->set_mine(true); }, [&] (const std::string& user) { - req->set_user(ToProto<TProtobufString>(user)); + req->set_user(ToProto(user)); }); req->set_supports_per_target_response(true); @@ -2354,7 +2356,7 @@ TFuture<TQuery> TClient::GetQuery( ToProto(req->mutable_attributes(), options.Attributes); } if (options.Timestamp) { - req->set_timestamp(ToProto<i64>(options.Timestamp)); + req->set_timestamp(options.Timestamp); } return req->Invoke().Apply(BIND([] (const TApiServiceProxy::TRspGetQueryPtr& rsp) { @@ -2373,13 +2375,13 @@ TFuture<TListQueriesResult> TClient::ListQueries( req->set_query_tracker_stage(options.QueryTrackerStage); if (options.FromTime) { - req->set_from_time(NYT::ToProto<i64>(*options.FromTime)); + req->set_from_time(NYT::ToProto(*options.FromTime)); } if (options.ToTime) { - req->set_to_time(NYT::ToProto<i64>(*options.ToTime)); + req->set_to_time(NYT::ToProto(*options.ToTime)); } if (options.CursorTime) { - req->set_cursor_time(NYT::ToProto<i64>(*options.CursorTime)); + req->set_cursor_time(NYT::ToProto(*options.CursorTime)); } req->set_cursor_direction(static_cast<NProto::EOperationSortDirection>(options.CursorDirection)); @@ -2545,7 +2547,7 @@ TFuture<TSetPipelineSpecResult> TClient::SetPipelineSpec( req->set_spec(spec.ToString()); req->set_force(options.Force); if (options.ExpectedVersion) { - req->set_expected_version(ToProto<i64>(*options.ExpectedVersion)); + req->set_expected_version(ToProto(*options.ExpectedVersion)); } return req->Invoke().Apply(BIND([] (const TApiServiceProxy::TRspSetPipelineSpecPtr& rsp) { @@ -2587,7 +2589,7 @@ TFuture<TSetPipelineDynamicSpecResult> TClient::SetPipelineDynamicSpec( req->set_pipeline_path(pipelinePath); req->set_spec(spec.ToString()); if (options.ExpectedVersion) { - req->set_expected_version(ToProto<i64>(*options.ExpectedVersion)); + req->set_expected_version(ToProto(*options.ExpectedVersion)); } return req->Invoke().Apply(BIND([] (const TApiServiceProxy::TRspSetPipelineDynamicSpecPtr& rsp) { @@ -2678,34 +2680,74 @@ TFuture<TGetFlowViewResult> TClient::GetFlowView( } TFuture<TShuffleHandlePtr> TClient::StartShuffle( - const TString& /*account*/, - int /*partitionCount*/, - const TStartShuffleOptions& /*options*/) + const TString& account, + int partitionCount, + const TStartShuffleOptions& options) { - YT_UNIMPLEMENTED(); + auto proxy = CreateApiServiceProxy(); + + auto req = proxy.StartShuffle(); + SetTimeoutOptions(*req, options); + + req->set_account(account); + req->set_partition_count(partitionCount); + + return req->Invoke().Apply(BIND([] (const TApiServiceProxy::TRspStartShufflePtr& rsp) { + return ConvertTo<TShuffleHandlePtr>(TYsonString(rsp->shuffle_handle())); + })); } TFuture<void> TClient::FinishShuffle( - const TShuffleHandlePtr& /*shuffleHandle*/, - const TFinishShuffleOptions& /*options*/) + const TShuffleHandlePtr& shuffleHandle, + const TFinishShuffleOptions& options) { - YT_UNIMPLEMENTED(); + auto proxy = CreateApiServiceProxy(); + + auto req = proxy.FinishShuffle(); + SetTimeoutOptions(*req, options); + + req->set_shuffle_handle(ConvertToYsonString(shuffleHandle).ToString()); + + return req->Invoke().AsVoid(); } TFuture<IRowBatchReaderPtr> TClient::CreateShuffleReader( - const TShuffleHandlePtr& /*shuffleHandle*/, - int /*partitionIndex*/, - const TTableReaderConfigPtr& /*config*/) + const TShuffleHandlePtr& shuffleHandle, + int partitionIndex, + const TTableReaderConfigPtr& config) { - YT_UNIMPLEMENTED(); + auto proxy = CreateApiServiceProxy(); + + auto req = proxy.ReadShuffleData(); + InitStreamingRequest(*req); + + req->set_shuffle_handle(ConvertToYsonString(shuffleHandle).ToString()); + req->set_partition_index(partitionIndex); + req->set_reader_config(ConvertToYsonString(config).ToString()); + + return CreateRpcClientInputStream(std::move(req)) + .ApplyUnique(BIND([] (IAsyncZeroCopyInputStreamPtr&& inputStream) { + return CreateRowBatchReader(std::move(inputStream), false); + })); } TFuture<IRowBatchWriterPtr> TClient::CreateShuffleWriter( - const TShuffleHandlePtr& /*shuffleHandle*/, - const TString& /*partitionColumn*/, - const TTableWriterConfigPtr& /*config*/) + const TShuffleHandlePtr& shuffleHandle, + const TString& partitionColumn, + const TTableWriterConfigPtr& config) { - YT_UNIMPLEMENTED(); + auto proxy = CreateApiServiceProxy(); + auto req = proxy.WriteShuffleData(); + InitStreamingRequest(*req); + + req->set_shuffle_handle(ConvertToYsonString(shuffleHandle).ToString()); + req->set_partition_column(partitionColumn); + req->set_writer_config(ConvertToYsonString(config).ToString()); + + return CreateRpcClientOutputStream(std::move(req)) + .ApplyUnique(BIND([] (IAsyncZeroCopyOutputStreamPtr&& outputStream) { + return CreateRowBatchWriter(std::move(outputStream)); + })); } //////////////////////////////////////////////////////////////////////////////// diff --git a/yt/yt/client/api/rpc_proxy/config.cpp b/yt/yt/client/api/rpc_proxy/config.cpp index e3ed474ab6..87dfd2b22e 100644 --- a/yt/yt/client/api/rpc_proxy/config.cpp +++ b/yt/yt/client/api/rpc_proxy/config.cpp @@ -127,19 +127,6 @@ void TConnectionConfig::Register(TRegistrar registrar) .Default(false); registrar.Postprocessor([] (TThis* config) { - if (!config->ProxyEndpoints && !config->ClusterUrl && !config->ProxyAddresses && !config->ProxyUnixDomainSocket) { - THROW_ERROR_EXCEPTION("Either \"endpoints\" or \"cluster_url\" or \"proxy_addresses\" or \"proxy_unix_domain_socket\" must be specified"); - } - if (config->ProxyEndpoints && config->ProxyRole) { - THROW_ERROR_EXCEPTION("\"proxy_role\" is not supported by Service Discovery"); - } - if (config->ProxyAddresses && config->ProxyAddresses->empty()) { - THROW_ERROR_EXCEPTION("\"proxy_addresses\" must not be empty"); - } - if (!config->EnableProxyDiscovery && !config->ProxyAddresses) { - THROW_ERROR_EXCEPTION("If proxy discovery is disabled, \"proxy_addresses\" should be specified"); - } - if (!config->ClusterName && config->ClusterUrl) { config->ClusterName = InferYTClusterFromClusterUrl(*config->ClusterUrl); } @@ -148,4 +135,22 @@ void TConnectionConfig::Register(TRegistrar registrar) //////////////////////////////////////////////////////////////////////////////// +void ValidateConnectionConfig(const TConnectionConfigPtr& config) +{ + if (!config->ProxyEndpoints && !config->ClusterUrl && !config->ProxyAddresses && !config->ProxyUnixDomainSocket) { + THROW_ERROR_EXCEPTION("Either \"endpoints\" or \"cluster_url\" or \"proxy_addresses\" or \"proxy_unix_domain_socket\" must be specified"); + } + if (config->ProxyEndpoints && config->ProxyRole) { + THROW_ERROR_EXCEPTION("\"proxy_role\" is not supported by Service Discovery"); + } + if (config->ProxyAddresses && config->ProxyAddresses->empty()) { + THROW_ERROR_EXCEPTION("\"proxy_addresses\" must not be empty"); + } + if (!config->EnableProxyDiscovery && !config->ProxyAddresses) { + THROW_ERROR_EXCEPTION("If proxy discovery is disabled, \"proxy_addresses\" should be specified"); + } +} + +//////////////////////////////////////////////////////////////////////////////// + } // namespace NYT::NApi::NRpcProxy diff --git a/yt/yt/client/api/rpc_proxy/config.h b/yt/yt/client/api/rpc_proxy/config.h index b31fdaa2c8..793c48dce6 100644 --- a/yt/yt/client/api/rpc_proxy/config.h +++ b/yt/yt/client/api/rpc_proxy/config.h @@ -90,4 +90,8 @@ DEFINE_REFCOUNTED_TYPE(TConnectionConfig) //////////////////////////////////////////////////////////////////////////////// +void ValidateConnectionConfig(const TConnectionConfigPtr& config); + +//////////////////////////////////////////////////////////////////////////////// + } // namespace NYT::NApi::NRpcProxy diff --git a/yt/yt/client/api/rpc_proxy/connection_impl.cpp b/yt/yt/client/api/rpc_proxy/connection_impl.cpp index 5c2f4a7540..8bc17c3c52 100644 --- a/yt/yt/client/api/rpc_proxy/connection_impl.cpp +++ b/yt/yt/client/api/rpc_proxy/connection_impl.cpp @@ -212,9 +212,10 @@ private: TFuture<IChannelPtr> Channel_; }; -TConnectionConfigPtr GetPostprocessedConfig(TConnectionConfigPtr config) +TConnectionConfigPtr GetPostprocessedConfigAndValidate(TConnectionConfigPtr config) { config->Postprocess(); + ValidateConnectionConfig(config); return config; } @@ -223,7 +224,7 @@ TConnectionConfigPtr GetPostprocessedConfig(TConnectionConfigPtr config) //////////////////////////////////////////////////////////////////////////////// TConnection::TConnection(TConnectionConfigPtr config, TConnectionOptions options) - : Config_(GetPostprocessedConfig(std::move(config))) + : Config_(GetPostprocessedConfigAndValidate(std::move(config))) , ConnectionId_(TGuid::Create()) , LoggingTag_(MakeConnectionLoggingTag(Config_, ConnectionId_)) , ClusterId_(MakeConnectionClusterId(Config_)) @@ -290,9 +291,9 @@ IChannelPtr TConnection::CreateChannel(bool sticky) return CreateRoamingChannel(std::move(provider)); } -IChannelPtr TConnection::CreateChannelByAddress(const std::string& address) +IChannelPtr TConnection::CreateChannelByAddress(const TString& address) { - return CachingChannelFactory_->CreateChannel(address); + return CachingChannelFactory_->CreateChannel(address.ConstRef()); } TClusterTag TConnection::GetClusterTag() const diff --git a/yt/yt/client/api/rpc_proxy/connection_impl.h b/yt/yt/client/api/rpc_proxy/connection_impl.h index 92d1f5b4ec..8ccdf08e7d 100644 --- a/yt/yt/client/api/rpc_proxy/connection_impl.h +++ b/yt/yt/client/api/rpc_proxy/connection_impl.h @@ -27,7 +27,7 @@ public: ~TConnection(); NRpc::IChannelPtr CreateChannel(bool sticky); - NRpc::IChannelPtr CreateChannelByAddress(const std::string& address); + NRpc::IChannelPtr CreateChannelByAddress(const TString& address); const TConnectionConfigPtr& GetConfig(); diff --git a/yt/yt/client/api/rpc_proxy/file_reader.cpp b/yt/yt/client/api/rpc_proxy/file_reader.cpp index 24c55ff521..c3e928f4fd 100644 --- a/yt/yt/client/api/rpc_proxy/file_reader.cpp +++ b/yt/yt/client/api/rpc_proxy/file_reader.cpp @@ -60,7 +60,10 @@ TFuture<IFileReaderPtr> CreateFileReader( THROW_ERROR_EXCEPTION("Failed to deserialize file stream header"); } - return New<TFileReader>(inputStream, FromProto<TObjectId>(meta.id()), meta.revision()); + return New<TFileReader>( + inputStream, + FromProto<TObjectId>(meta.id()), + FromProto<NHydra::TRevision>(meta.revision())); })).As<IFileReaderPtr>(); })); } diff --git a/yt/yt/client/api/rpc_proxy/helpers.cpp b/yt/yt/client/api/rpc_proxy/helpers.cpp index 3a6a3650be..13c51ed862 100644 --- a/yt/yt/client/api/rpc_proxy/helpers.cpp +++ b/yt/yt/client/api/rpc_proxy/helpers.cpp @@ -81,7 +81,7 @@ void ToProto( for (const auto& item : options.PrerequisiteRevisions) { auto* protoItem = proto->add_revisions(); protoItem->set_path(item->Path); - protoItem->set_revision(item->Revision); + protoItem->set_revision(ToProto(item->Revision)); } } @@ -91,9 +91,9 @@ void ToProto( { proto->set_read_from(static_cast<NProto::EMasterReadKind>(options.ReadFrom)); proto->set_disable_per_user_cache(options.DisablePerUserCache); - proto->set_expire_after_successful_update_time(ToProto<i64>(options.ExpireAfterSuccessfulUpdateTime)); - proto->set_expire_after_failed_update_time(ToProto<i64>(options.ExpireAfterFailedUpdateTime)); - proto->set_success_staleness_bound(ToProto<i64>(options.SuccessStalenessBound)); + proto->set_expire_after_successful_update_time(ToProto(options.ExpireAfterSuccessfulUpdateTime)); + proto->set_expire_after_failed_update_time(ToProto(options.ExpireAfterFailedUpdateTime)); + proto->set_success_staleness_bound(ToProto(options.SuccessStalenessBound)); if (options.CacheStickyGroupSize) { proto->set_cache_sticky_group_size(*options.CacheStickyGroupSize); } @@ -134,7 +134,7 @@ void ToProto( { protoOptions->set_read_from(static_cast<NProto::ETabletReadKind>(options.ReadFrom)); if (options.CachedSyncReplicasTimeout) { - protoOptions->set_cached_sync_replicas_timeout(ToProto<i64>(*options.CachedSyncReplicasTimeout)); + protoOptions->set_cached_sync_replicas_timeout(ToProto(*options.CachedSyncReplicasTimeout)); } } @@ -447,7 +447,7 @@ void ToProto( ToProto(proto->mutable_trace_id(), result.TraceId); proto->set_event_index(result.EventIndex); proto->set_event(result.Event); - proto->set_event_time(ToProto<i64>(result.EventTime)); + proto->set_event_time(ToProto(result.EventTime)); } void FromProto( @@ -470,7 +470,7 @@ void ToProto(NProto::TColumnSchema* protoSchema, const NTableClient::TColumnSche { protoSchema->set_stable_name(schema.StableName().Underlying()); protoSchema->set_name(schema.Name()); - protoSchema->set_type(ToProto<int>(GetPhysicalType(schema.CastToV1Type()))); + protoSchema->set_type(ToProto(GetPhysicalType(schema.CastToV1Type()))); auto typeV3Yson = ConvertToYsonString(TTypeV3LogicalTypeWrapper{schema.LogicalType()}); protoSchema->set_type_v3(typeV3Yson.ToString()); if (schema.Lock()) { @@ -494,7 +494,7 @@ void ToProto(NProto::TColumnSchema* protoSchema, const NTableClient::TColumnSche protoSchema->clear_aggregate(); } if (schema.SortOrder()) { - protoSchema->set_sort_order(ToProto<int>(*schema.SortOrder())); + protoSchema->set_sort_order(ToProto(*schema.SortOrder())); } else { protoSchema->clear_sort_order(); } @@ -599,8 +599,8 @@ void FromProto(NTableClient::TTableSchemaPtr* schema, const NProto::TTableSchema void ToProto(NProto::TTabletInfo* protoTabletInfo, const NTabletClient::TTabletInfo& tabletInfo) { ToProto(protoTabletInfo->mutable_tablet_id(), tabletInfo.TabletId); - protoTabletInfo->set_mount_revision(tabletInfo.MountRevision); - protoTabletInfo->set_state(static_cast<i32>(tabletInfo.State)); + protoTabletInfo->set_mount_revision(ToProto(tabletInfo.MountRevision)); + protoTabletInfo->set_state(ToProto(tabletInfo.State)); ToProto(protoTabletInfo->mutable_pivot_key(), tabletInfo.PivotKey); if (tabletInfo.CellId) { ToProto(protoTabletInfo->mutable_cell_id(), tabletInfo.CellId); @@ -611,7 +611,7 @@ void FromProto(NTabletClient::TTabletInfo* tabletInfo, const NProto::TTabletInfo { tabletInfo->TabletId = FromProto<TTabletId>(protoTabletInfo.tablet_id()); - tabletInfo->MountRevision = protoTabletInfo.mount_revision(); + tabletInfo->MountRevision = FromProto<NHydra::TRevision>(protoTabletInfo.mount_revision()); tabletInfo->State = CheckedEnumCast<ETabletState>(protoTabletInfo.state()); tabletInfo->PivotKey = FromProto<NTableClient::TLegacyOwningKey>(protoTabletInfo.pivot_key()); if (protoTabletInfo.has_cell_id()) { @@ -676,10 +676,10 @@ void ToProto(NProto::TOperation* protoOperation, const NApi::TOperation& operati } if (operation.StartTime) { - protoOperation->set_start_time(ToProto<i64>(*operation.StartTime)); + protoOperation->set_start_time(ToProto(*operation.StartTime)); } if (operation.FinishTime) { - protoOperation->set_finish_time(ToProto<i64>(*operation.FinishTime)); + protoOperation->set_finish_time(ToProto(*operation.FinishTime)); } if (operation.AuthenticatedUser) { @@ -931,10 +931,10 @@ void ToProto(NProto::TJob* protoJob, const NApi::TJob& job) } if (job.StartTime) { - protoJob->set_start_time(ToProto<i64>(*job.StartTime)); + protoJob->set_start_time(ToProto(*job.StartTime)); } if (job.FinishTime) { - protoJob->set_finish_time(ToProto<i64>(*job.FinishTime)); + protoJob->set_finish_time(ToProto(*job.FinishTime)); } if (job.Address) { @@ -1227,7 +1227,7 @@ void ToProto( const NChunkClient::TFetcherConfigPtr& fetcherConfig) { protoFetcherConfig->set_node_rpc_timeout( - ToProto<i64>(fetcherConfig->NodeRpcTimeout)); + ToProto(fetcherConfig->NodeRpcTimeout)); } void FromProto( @@ -1362,7 +1362,7 @@ void ToProto( { protoManifest->set_source_path(manifest->SourcePath); protoManifest->set_destination_path(manifest->DestinationPath); - protoManifest->set_ordered_mode(ToProto<i32>(manifest->OrderedMode)); + protoManifest->set_ordered_mode(ToProto(manifest->OrderedMode)); } void FromProto( @@ -1424,10 +1424,10 @@ void ToProto( protoQuery->set_files(query.Files->ToString()); } if (query.StartTime) { - protoQuery->set_start_time(NYT::ToProto<i64>(*query.StartTime)); + protoQuery->set_start_time(NYT::ToProto(*query.StartTime)); } if (query.FinishTime) { - protoQuery->set_finish_time(NYT::ToProto<i64>(*query.FinishTime)); + protoQuery->set_finish_time(NYT::ToProto(*query.FinishTime)); } if (query.Settings) { protoQuery->set_settings(query.Settings.ToString()); @@ -2161,9 +2161,9 @@ std::vector<TSharedRef> SerializeRowset( entry->set_name(column.Name()); // we save physical type for backward compatibility // COMPAT(babenko) - entry->set_type(ToProto<int>(column.GetWireType())); + entry->set_type(ToProto(column.GetWireType())); // COMPAT(babenko) - entry->set_logical_type(ToProto<int>(column.CastToV1Type())); + entry->set_logical_type(ToProto(column.CastToV1Type())); } auto writer = CreateWireProtocolWriter(); diff --git a/yt/yt/client/api/rpc_proxy/table_mount_cache.cpp b/yt/yt/client/api/rpc_proxy/table_mount_cache.cpp index 571d0901b6..6e7987052b 100644 --- a/yt/yt/client/api/rpc_proxy/table_mount_cache.cpp +++ b/yt/yt/client/api/rpc_proxy/table_mount_cache.cpp @@ -94,7 +94,7 @@ private: replicaInfo->ReplicaId = FromProto<TTableReplicaId>(protoReplicaInfo.replica_id()); replicaInfo->ClusterName = protoReplicaInfo.cluster_name(); replicaInfo->ReplicaPath = protoReplicaInfo.replica_path(); - replicaInfo->Mode = ETableReplicaMode(protoReplicaInfo.mode()); + replicaInfo->Mode = FromProto<ETableReplicaMode>(protoReplicaInfo.mode()); tableInfo->Replicas.push_back(replicaInfo); } diff --git a/yt/yt/client/api/rpc_proxy/timestamp_provider.cpp b/yt/yt/client/api/rpc_proxy/timestamp_provider.cpp index 4ef1f01222..84822862de 100644 --- a/yt/yt/client/api/rpc_proxy/timestamp_provider.cpp +++ b/yt/yt/client/api/rpc_proxy/timestamp_provider.cpp @@ -43,7 +43,7 @@ private: clockClusterTag = ClockClusterTag_; } if (clockClusterTag != InvalidCellTag) { - req->set_clock_cluster_tag(ToProto<int>(clockClusterTag)); + req->set_clock_cluster_tag(ToProto(clockClusterTag)); } return req->Invoke().Apply(BIND([] (const TApiServiceProxy::TRspGenerateTimestampsPtr& rsp) { diff --git a/yt/yt/client/api/security_client.cpp b/yt/yt/client/api/security_client.cpp index b6a178f1d0..2b0d0f675c 100644 --- a/yt/yt/client/api/security_client.cpp +++ b/yt/yt/client/api/security_client.cpp @@ -32,16 +32,16 @@ TError TCheckPermissionResult::ToError( user, permission); } - error.MutableAttributes()->Set("user", user); - error.MutableAttributes()->Set("permission", permission); + error <<= TErrorAttribute("user", user); + error <<= TErrorAttribute("permission", permission); if (ObjectId) { - error.MutableAttributes()->Set("denied_by", ObjectId); + error <<= TErrorAttribute("denied_by", ObjectId); } if (SubjectId) { - error.MutableAttributes()->Set("denied_for", SubjectId); + error <<= TErrorAttribute("denied_for", SubjectId); } if (column) { - error.MutableAttributes()->Set("column", *column); + error <<= TErrorAttribute("column", *column); } return error; } @@ -73,10 +73,10 @@ TError TCheckPermissionByAclResult::ToError(const std::string& user, EPermission user, permission); } - error.MutableAttributes()->Set("user", user); - error.MutableAttributes()->Set("permission", permission); + error <<= TErrorAttribute("user", user); + error <<= TErrorAttribute("permission", permission); if (SubjectId) { - error.MutableAttributes()->Set("denied_for", SubjectId); + error <<= TErrorAttribute("denied_for", SubjectId); } return error; } diff --git a/yt/yt/client/api/table_client.h b/yt/yt/client/api/table_client.h index 581412eba7..a1eb9b3152 100644 --- a/yt/yt/client/api/table_client.h +++ b/yt/yt/client/api/table_client.h @@ -135,7 +135,7 @@ struct TAlterTableReplicaOptions std::optional<bool> PreserveTimestamps; std::optional<NTransactionClient::EAtomicity> Atomicity; std::optional<bool> EnableReplicatedTableTracker; - std::optional<TString> ReplicaPath; + std::optional<NYPath::TYPath> ReplicaPath; }; struct TGetTablePivotKeysOptions diff --git a/yt/yt/client/bundle_controller_client/bundle_controller_settings.cpp b/yt/yt/client/bundle_controller_client/bundle_controller_settings.cpp index 7aa460a7e3..44a1a6b3c1 100644 --- a/yt/yt/client/bundle_controller_client/bundle_controller_settings.cpp +++ b/yt/yt/client/bundle_controller_client/bundle_controller_settings.cpp @@ -73,6 +73,8 @@ void TInstanceSize::Register(TRegistrar registrar) .DefaultNew(); registrar.Parameter("default_config", &TThis::DefaultConfig) .DefaultNew(); + registrar.Parameter("host_tag_filter", &TThis::HostTagFilter) + .Optional(); } void TBundleTargetConfig::Register(TRegistrar registrar) diff --git a/yt/yt/client/bundle_controller_client/bundle_controller_settings.h b/yt/yt/client/bundle_controller_client/bundle_controller_settings.h index f7213c9eac..b4bbd92713 100644 --- a/yt/yt/client/bundle_controller_client/bundle_controller_settings.h +++ b/yt/yt/client/bundle_controller_client/bundle_controller_settings.h @@ -94,6 +94,8 @@ struct TInstanceSize TInstanceResourcesPtr ResourceGuarantee; TDefaultInstanceConfigPtr DefaultConfig; + std::optional<TString> HostTagFilter; + REGISTER_YSON_STRUCT(TInstanceSize); static void Register(TRegistrar registrar); diff --git a/yt/yt/client/cache/config.cpp b/yt/yt/client/cache/config.cpp index f501f38cb4..7ebaeed178 100644 --- a/yt/yt/client/cache/config.cpp +++ b/yt/yt/client/cache/config.cpp @@ -10,10 +10,8 @@ using namespace NApi; void TClientsCacheConfig::Register(TRegistrar registrar) { - // TODO(shishmak): Need to handle default config properly. - // Now it fails postprocess validation when set to default, so it made optional. registrar.Parameter("default_config", &TThis::DefaultConfig) - .Optional(); + .DefaultNew(); registrar.Parameter("cluster_configs", &TThis::ClusterConfigs) .Default(); } diff --git a/yt/yt/client/chaos_client/replication_card_serialization.cpp b/yt/yt/client/chaos_client/replication_card_serialization.cpp index 85d4785871..df13796822 100644 --- a/yt/yt/client/chaos_client/replication_card_serialization.cpp +++ b/yt/yt/client/chaos_client/replication_card_serialization.cpp @@ -347,9 +347,9 @@ void FromProto(TReplicationProgress* replicationProgress, const NChaosClient::NP void ToProto(NChaosClient::NProto::TReplicaHistoryItem* protoHistoryItem, const TReplicaHistoryItem& historyItem) { protoHistoryItem->set_era(historyItem.Era); - protoHistoryItem->set_timestamp(ToProto<ui64>(historyItem.Timestamp)); - protoHistoryItem->set_mode(ToProto<int>(historyItem.Mode)); - protoHistoryItem->set_state(ToProto<int>(historyItem.State)); + protoHistoryItem->set_timestamp(ToProto(historyItem.Timestamp)); + protoHistoryItem->set_mode(ToProto(historyItem.Mode)); + protoHistoryItem->set_state(ToProto(historyItem.State)); } void FromProto(TReplicaHistoryItem* historyItem, const NChaosClient::NProto::TReplicaHistoryItem& protoHistoryItem) @@ -365,11 +365,11 @@ void ToProto( const TReplicaInfo& replicaInfo, const TReplicationCardFetchOptions& options) { - protoReplicaInfo->set_cluster_name(ToProto<TProtobufString>(replicaInfo.ClusterName)); + protoReplicaInfo->set_cluster_name(ToProto(replicaInfo.ClusterName)); protoReplicaInfo->set_replica_path(replicaInfo.ReplicaPath); - protoReplicaInfo->set_content_type(ToProto<int>(replicaInfo.ContentType)); - protoReplicaInfo->set_mode(ToProto<int>(replicaInfo.Mode)); - protoReplicaInfo->set_state(ToProto<int>(replicaInfo.State)); + protoReplicaInfo->set_content_type(ToProto(replicaInfo.ContentType)); + protoReplicaInfo->set_mode(ToProto(replicaInfo.Mode)); + protoReplicaInfo->set_state(ToProto(replicaInfo.State)); protoReplicaInfo->set_enable_replicated_table_tracker(replicaInfo.EnableReplicatedTableTracker); if (options.IncludeProgress) { ToProto(protoReplicaInfo->mutable_progress(), replicaInfo.ReplicationProgress); @@ -414,7 +414,7 @@ void ToProto( protoReplicationCard->set_era(replicationCard.Era); ToProto(protoReplicationCard->mutable_table_id(), replicationCard.TableId); protoReplicationCard->set_table_path(replicationCard.TablePath); - protoReplicationCard->set_table_cluster_name(ToProto<TProtobufString>(replicationCard.TableClusterName)); + protoReplicationCard->set_table_cluster_name(ToProto(replicationCard.TableClusterName)); protoReplicationCard->set_current_timestamp(replicationCard.CurrentTimestamp); ToProto(protoReplicationCard->mutable_replication_card_collocation_id(), replicationCard.ReplicationCardCollocationId); } diff --git a/yt/yt/client/chunk_client/chunk_replica.h b/yt/yt/client/chunk_client/chunk_replica.h index 3e8f8a1dea..3aac24c6da 100644 --- a/yt/yt/client/chunk_client/chunk_replica.h +++ b/yt/yt/client/chunk_client/chunk_replica.h @@ -9,6 +9,8 @@ #include <yt/yt/core/phoenix/context.h> #include <yt/yt/core/phoenix/type_decl.h> +#include <yt/yt/core/misc/protobuf_helpers.h> + namespace NYT::NChunkClient { //////////////////////////////////////////////////////////////////////////////// @@ -245,17 +247,36 @@ public: explicit TChunkReplicaAddressFormatter(NNodeTrackerClient::TNodeDirectoryPtr nodeDirectory); void operator()(TStringBuilderBase* builder, TChunkReplicaWithMedium replica) const; - void operator()(TStringBuilderBase* builder, TChunkReplica replica) const; private: - NNodeTrackerClient::TNodeDirectoryPtr NodeDirectory_; + const NNodeTrackerClient::TNodeDirectoryPtr NodeDirectory_; }; //////////////////////////////////////////////////////////////////////////////// } // namespace NYT::NChunkClient +namespace NYT { + +//////////////////////////////////////////////////////////////////////////////// + +template <> +struct TProtoTraits<NChunkClient::TChunkReplica> +{ + using TSerialized = ui32; +}; + +template <> +struct TProtoTraits<NChunkClient::TChunkReplicaWithMedium> +{ + using TSerialized = ui64; +}; + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace + //! A hasher for TChunkIdWithIndex. template <> struct THash<NYT::NChunkClient::TChunkIdWithIndex> diff --git a/yt/yt/client/driver/driver.cpp b/yt/yt/client/driver/driver.cpp index e13634f539..3e57e388df 100644 --- a/yt/yt/client/driver/driver.cpp +++ b/yt/yt/client/driver/driver.cpp @@ -19,6 +19,7 @@ #include "scheduler_commands.h" #include "table_commands.h" #include "transaction_commands.h" +#include "shuffle_commands.h" #include <yt/yt/client/api/client_cache.h> #include <yt/yt/client/api/connection.h> @@ -386,6 +387,11 @@ public: REGISTER (TGetPipelineStateCommand, "get_pipeline_state", Null, Structured, false, false, ApiVersion4); REGISTER (TGetFlowViewCommand, "get_flow_view", Null, Structured, false, false, ApiVersion4); + REGISTER (TStartShuffleCommand, "start_shuffle", Null, Structured, true, false, ApiVersion4); + REGISTER (TFinishShuffleCommand, "finish_shuffle", Null, Structured, true, false, ApiVersion4); + REGISTER (TReadShuffleDataCommand, "read_shuffle_data", Null, Tabular, false, true, ApiVersion4); + REGISTER (TWriteShuffleDataCommand, "write_shuffle_data", Tabular, Structured, false, true, ApiVersion4); + if (Config_->EnableInternalCommands) { REGISTER_ALL(TReadHunksCommand, "read_hunks", Null, Structured, false, true ); REGISTER_ALL(TWriteHunksCommand, "write_hunks", Null, Structured, true, true ); diff --git a/yt/yt/client/driver/shuffle_commands.cpp b/yt/yt/client/driver/shuffle_commands.cpp new file mode 100644 index 0000000000..4e2ee805e8 --- /dev/null +++ b/yt/yt/client/driver/shuffle_commands.cpp @@ -0,0 +1,136 @@ +#include "shuffle_commands.h" + +#include <yt/yt/client/table_client/adapters.h> +#include <yt/yt/client/table_client/table_output.h> +#include <yt/yt/client/table_client/value_consumer.h> + +#include <yt/yt/client/driver/config.h> +#include <yt/yt/client/formats/config.h> + +#include <yt/yt/library/formats/format.h> + +namespace NYT::NDriver { + +using namespace NConcurrency; +using namespace NFormats; +using namespace NTableClient; +using namespace NYson; + +////////////////////////////////////////////////////////////////////////////// + +void TStartShuffleCommand::Register(TRegistrar registrar) +{ + registrar.Parameter("account", &TThis::Account); + registrar.Parameter("partition_count", &TThis::PartitionCount); +} + +void TStartShuffleCommand::DoExecute(ICommandContextPtr context) +{ + auto client = context->GetClient(); + auto asyncResult = client->StartShuffle(Account, PartitionCount, Options); + auto shuffleHandle = WaitFor(asyncResult).ValueOrThrow(); + + context->ProduceOutputValue(ConvertToYsonString(shuffleHandle)); +} + +////////////////////////////////////////////////////////////////////////////// + +void TFinishShuffleCommand::Register(TRegistrar registrar) +{ + registrar.Parameter("shuffle_handle", &TThis::ShuffleHandle); +} + +void TFinishShuffleCommand::DoExecute(ICommandContextPtr context) +{ + auto client = context->GetClient(); + auto asyncResult = client->FinishShuffle(ShuffleHandle, Options); + WaitFor(asyncResult).ThrowOnError(); + + ProduceEmptyOutput(context); +} + +////////////////////////////////////////////////////////////////////////////// + +void TReadShuffleDataCommand::Register(TRegistrar registrar) +{ + registrar.Parameter("shuffle_handle", &TThis::ShuffleHandle); + registrar.Parameter("partition_index", &TThis::PartitionIndex); +} + +void TReadShuffleDataCommand::DoExecute(ICommandContextPtr context) +{ + auto client = context->GetClient(); + + auto reader = WaitFor(context->GetClient()->CreateShuffleReader( + ShuffleHandle, + PartitionIndex, + Options)) + .ValueOrThrow(); + + auto format = context->GetOutputFormat(); + + auto writer = CreateStaticTableWriterForFormat( + format, + reader->GetNameTable(), + /*tableSchemas*/ {New<TTableSchema>()}, + context->Request().OutputStream, + /*enableContextSaving*/ false, + New<TControlAttributesConfig>(), + /*keyColumnCount*/ 0); + + NTableClient::TRowBatchReadOptions options{ + .MaxRowsPerRead = context->GetConfig()->ReadBufferRowCount, + .Columnar = (format.GetType() == EFormatType::Arrow), + }; + + PipeReaderToWriterByBatches( + reader, + writer, + options); +} + +////////////////////////////////////////////////////////////////////////////// + +void TWriteShuffleDataCommand::Register(TRegistrar registrar) +{ + registrar.Parameter("shuffle_handle", &TThis::ShuffleHandle); + registrar.Parameter("partition_column", &TThis::PartitionColumn); + registrar.Parameter("max_row_buffer_size", &TThis::MaxRowBufferSize) + .Default(1_MB); +} + +void TWriteShuffleDataCommand::DoExecute(ICommandContextPtr context) +{ + auto client = context->GetClient(); + + auto writer = WaitFor(context->GetClient()->CreateShuffleWriter( + ShuffleHandle, + PartitionColumn, + Options)) + .ValueOrThrow(); + + auto schemalessWriter = CreateSchemalessFromApiWriterAdapter(std::move(writer)); + + TWritingValueConsumer valueConsumer( + schemalessWriter, + ConvertTo<TTypeConversionConfigPtr>(context->GetInputFormat().Attributes()), + MaxRowBufferSize); + + TTableOutput output(CreateParserForFormat( + context->GetInputFormat(), + &valueConsumer)); + + PipeInputToOutput(context->Request().InputStream, &output); + + WaitFor(valueConsumer.Flush()) + .ThrowOnError(); + + WaitFor(schemalessWriter->Close()) + .ThrowOnError(); + + ProduceEmptyOutput(context); +} + +////////////////////////////////////////////////////////////////////////////// + +} // namespace NYT::NDriver diff --git a/yt/yt/client/driver/shuffle_commands.h b/yt/yt/client/driver/shuffle_commands.h new file mode 100644 index 0000000000..7b4394c49a --- /dev/null +++ b/yt/yt/client/driver/shuffle_commands.h @@ -0,0 +1,79 @@ +#pragma once + +#include "command.h" + +#include <yt/yt/client/ypath/rich.h> + +namespace NYT::NDriver { + +//////////////////////////////////////////////////////////////////////////// + +class TStartShuffleCommand + : public TTypedCommand<NApi::TStartShuffleOptions> +{ +public: + REGISTER_YSON_STRUCT_LITE(TStartShuffleCommand); + + static void Register(TRegistrar registrar); + +private: + TString Account; + int PartitionCount; + + void DoExecute(ICommandContextPtr context) override; +}; + +//////////////////////////////////////////////////////////////////////////// + +class TFinishShuffleCommand + : public TTypedCommand<NApi::TFinishShuffleOptions> +{ +public: + REGISTER_YSON_STRUCT_LITE(TFinishShuffleCommand); + + static void Register(TRegistrar registrar); + +private: + NApi::TShuffleHandlePtr ShuffleHandle; + + void DoExecute(ICommandContextPtr context) override; +}; + +//////////////////////////////////////////////////////////////////////////// + +class TReadShuffleDataCommand + : public TTypedCommand<NTableClient::TTableReaderConfigPtr> +{ +public: + REGISTER_YSON_STRUCT_LITE(TReadShuffleDataCommand); + + static void Register(TRegistrar registrar); + +private: + NApi::TShuffleHandlePtr ShuffleHandle; + int PartitionIndex; + + void DoExecute(ICommandContextPtr context) override; +}; + +//////////////////////////////////////////////////////////////////////////// + +class TWriteShuffleDataCommand + : public TTypedCommand<NTableClient::TTableWriterConfigPtr> +{ +public: + REGISTER_YSON_STRUCT_LITE(TWriteShuffleDataCommand); + + static void Register(TRegistrar registrar); + +private: + NApi::TShuffleHandlePtr ShuffleHandle; + TString PartitionColumn; + i64 MaxRowBufferSize; + + void DoExecute(ICommandContextPtr context) override; +}; + +//////////////////////////////////////////////////////////////////////////// + +} // namespace NYT::NDriver diff --git a/yt/yt/client/driver/table_commands.cpp b/yt/yt/client/driver/table_commands.cpp index 0ff27ef95f..03175a611f 100644 --- a/yt/yt/client/driver/table_commands.cpp +++ b/yt/yt/client/driver/table_commands.cpp @@ -1565,7 +1565,7 @@ void TAlterTableReplicaCommand::Register(TRegistrar registrar) }) .Optional(/*init*/ false); - registrar.ParameterWithUniversalAccessor<std::optional<TString>>( + registrar.ParameterWithUniversalAccessor<std::optional<TYPath>>( "replica_path", [] (TThis* command) -> auto& { return command->Options.ReplicaPath; diff --git a/yt/yt/client/driver/ya.make b/yt/yt/client/driver/ya.make index f33485ce8f..0e6ee7b1fa 100644 --- a/yt/yt/client/driver/ya.make +++ b/yt/yt/client/driver/ya.make @@ -14,16 +14,17 @@ SRCS( driver.cpp etc_commands.cpp file_commands.cpp + flow_commands.cpp helpers.cpp + internal_commands.cpp journal_commands.cpp proxy_discovery_cache.cpp query_commands.cpp queue_commands.cpp scheduler_commands.cpp + shuffle_commands.cpp table_commands.cpp transaction_commands.cpp - internal_commands.cpp - flow_commands.cpp ) PEERDIR( diff --git a/yt/yt/client/federated/unittests/client_ut.cpp b/yt/yt/client/federated/unittests/client_ut.cpp index 169c1c5039..54ec11d6cb 100644 --- a/yt/yt/client/federated/unittests/client_ut.cpp +++ b/yt/yt/client/federated/unittests/client_ut.cpp @@ -20,6 +20,7 @@ namespace { using namespace NYT::NApi; using ::testing::_; +using ::testing::AnyNumber; using ::testing::Return; using ::testing::StrictMock; @@ -171,7 +172,10 @@ TEST(TFederatedClientTest, CheckHealth) TTestDataStorage data; auto mockClientSas = New<TStrictMockClient>(); + auto mockClientVla = New<TStrictMockClient>(); + EXPECT_CALL(*mockClientVla, GetClusterName(_)) + .Times(AnyNumber()); // To identify best (closest) cluster. NYson::TYsonString listResult1(TStringBuf(R"(["a-rpc-proxy-a.sas.yp-c.yandex.net:9013"])")); diff --git a/yt/yt/client/hive/timestamp_map.cpp b/yt/yt/client/hive/timestamp_map.cpp index 075cdabaa2..a508e7a025 100644 --- a/yt/yt/client/hive/timestamp_map.cpp +++ b/yt/yt/client/hive/timestamp_map.cpp @@ -42,7 +42,7 @@ void ToProto(NProto::TTimestampMap* protoMap, const TTimestampMap& map) protoMap->clear_cell_tags(); protoMap->clear_timestamps(); for (auto [cellTag, timestamp] : map.Timestamps) { - protoMap->add_cell_tags(ToProto<ui32>(cellTag)); + protoMap->add_cell_tags(ToProto(cellTag)); protoMap->add_timestamps(timestamp); } } diff --git a/yt/yt/client/hydra/public.h b/yt/yt/client/hydra/public.h index c2bdbf94cd..c3a9b358b8 100644 --- a/yt/yt/client/hydra/public.h +++ b/yt/yt/client/hydra/public.h @@ -6,6 +6,8 @@ #include <yt/yt/core/rpc/public.h> +#include <library/cpp/yt/misc/strong_typedef.h> + namespace NYT::NHydra { //////////////////////////////////////////////////////////////////////////////// @@ -41,8 +43,8 @@ DEFINE_ENUM(EPeerKind, ((LeaderOrFollower) (2)) ); -using TRevision = ui64; -constexpr TRevision NullRevision = 0; +YT_DEFINE_STRONG_TYPEDEF(TRevision, ui64); +constexpr auto NullRevision = TRevision(); struct TVersion; struct TReachableState; diff --git a/yt/yt/client/hydra/version.cpp b/yt/yt/client/hydra/version.cpp index 782ece82e5..6f55b6b56e 100644 --- a/yt/yt/client/hydra/version.cpp +++ b/yt/yt/client/hydra/version.cpp @@ -58,22 +58,22 @@ TVersion::TVersion(int segmentId, int recordId) noexcept , RecordId(recordId) { } -std::strong_ordering TVersion::operator <=> (const TVersion& other) const -{ - if (SegmentId != other.SegmentId) { - return SegmentId <=> other.SegmentId; - } - return RecordId <=> other.RecordId; -} +// std::strong_ordering TVersion::operator <=> (const TVersion& other) const +// { +// if (SegmentId != other.SegmentId) { +// return SegmentId <=> other.SegmentId; +// } +// return RecordId <=> other.RecordId; +// } TRevision TVersion::ToRevision() const { - return (static_cast<TRevision>(SegmentId) << 32) | static_cast<TRevision>(RecordId); + return TRevision((static_cast<ui64>(SegmentId) << 32) | static_cast<ui64>(RecordId)); } TVersion TVersion::FromRevision(TRevision revision) { - return TVersion(revision >> 32, revision & 0xffffffff); + return TVersion(revision.Underlying() >> 32, revision.Underlying() & 0xffffffff); } TVersion TVersion::Advance(int delta) const diff --git a/yt/yt/client/hydra/version.h b/yt/yt/client/hydra/version.h index 79e60dff44..c6dd8ef65b 100644 --- a/yt/yt/client/hydra/version.h +++ b/yt/yt/client/hydra/version.h @@ -58,7 +58,7 @@ struct TVersion TVersion() = default; TVersion(int segmentId, int recordId) noexcept; - std::strong_ordering operator <=> (const TVersion& other) const; + std::strong_ordering operator <=> (const TVersion& other) const = default; bool operator == (const TVersion& other) const = default; TRevision ToRevision() const; diff --git a/yt/yt/client/misc/workload.cpp b/yt/yt/client/misc/workload.cpp index 4bc605f0f8..83e355ba0f 100644 --- a/yt/yt/client/misc/workload.cpp +++ b/yt/yt/client/misc/workload.cpp @@ -140,15 +140,15 @@ void Deserialize(TWorkloadDescriptor& descriptor, NYson::TYsonPullParserCursor* void ToProto(NYT::NProto::TWorkloadDescriptor* protoDescriptor, const TWorkloadDescriptor& descriptor) { - protoDescriptor->set_category(static_cast<int>(descriptor.Category)); + protoDescriptor->set_category(ToProto(descriptor.Category)); protoDescriptor->set_band(descriptor.Band); - protoDescriptor->set_instant(ToProto<i64>(descriptor.Instant)); + protoDescriptor->set_instant(ToProto(descriptor.Instant)); ToProto(protoDescriptor->mutable_annotations(), descriptor.Annotations); } void FromProto(TWorkloadDescriptor* descriptor, const NYT::NProto::TWorkloadDescriptor& protoDescriptor) { - descriptor->Category = EWorkloadCategory(protoDescriptor.category()); + descriptor->Category = FromProto<EWorkloadCategory>(protoDescriptor.category()); descriptor->Band = protoDescriptor.band(); descriptor->Instant = FromProto<TInstant>(protoDescriptor.instant()); FromProto(&descriptor->Annotations, protoDescriptor.annotations()); diff --git a/yt/yt/client/node_tracker_client/node_directory.cpp b/yt/yt/client/node_tracker_client/node_directory.cpp index 7d377febbc..16a295b1ab 100644 --- a/yt/yt/client/node_tracker_client/node_directory.cpp +++ b/yt/yt/client/node_tracker_client/node_directory.cpp @@ -303,8 +303,8 @@ void ToProto(NNodeTrackerClient::NProto::TAddressMap* protoAddresses, const NNod { for (const auto& [networkName, networkAddress] : addresses) { auto* entry = protoAddresses->add_entries(); - entry->set_network(NYT::ToProto<TProtobufString>(networkName)); - entry->set_address(NYT::ToProto<TProtobufString>(networkAddress)); + entry->set_network(NYT::ToProto(networkName)); + entry->set_address(NYT::ToProto(networkAddress)); } } @@ -321,7 +321,7 @@ void ToProto(NNodeTrackerClient::NProto::TNodeAddressMap* proto, const NNodeTrac { for (const auto& [addressType, addresses] : nodeAddresses) { auto* entry = proto->add_entries(); - entry->set_address_type(static_cast<int>(addressType)); + entry->set_address_type(ToProto(addressType)); ToProto(entry->mutable_addresses(), addresses); } } @@ -345,19 +345,19 @@ void ToProto(NNodeTrackerClient::NProto::TNodeDescriptor* protoDescriptor, const ToProto(protoDescriptor->mutable_addresses(), descriptor.Addresses()); if (auto host = descriptor.GetHost()) { - protoDescriptor->set_host(ToProto<TProtobufString>(*host)); + protoDescriptor->set_host(ToProto(*host)); } else { protoDescriptor->clear_host(); } if (auto rack = descriptor.GetRack()) { - protoDescriptor->set_rack(ToProto<TProtobufString>(*rack)); + protoDescriptor->set_rack(ToProto(*rack)); } else { protoDescriptor->clear_rack(); } if (auto dataCenter = descriptor.GetDataCenter()) { - protoDescriptor->set_data_center(ToProto<TProtobufString>(*dataCenter)); + protoDescriptor->set_data_center(ToProto(*dataCenter)); } else { protoDescriptor->clear_data_center(); } @@ -365,7 +365,7 @@ void ToProto(NNodeTrackerClient::NProto::TNodeDescriptor* protoDescriptor, const ToProto(protoDescriptor->mutable_tags(), descriptor.GetTags()); if (auto lastHeartbeatTime = descriptor.GetLastSeenTime()) { - protoDescriptor->set_last_seen_time(ToProto<i64>(*lastHeartbeatTime)); + protoDescriptor->set_last_seen_time(ToProto(*lastHeartbeatTime)); } else { protoDescriptor->clear_last_seen_time(); } @@ -497,7 +497,7 @@ void TNodeDirectory::DumpTo(NProto::TNodeDirectory* destination) auto guard = ReaderGuard(SpinLock_); for (auto [id, descriptor] : IdToDescriptor_) { auto* item = destination->add_items(); - item->set_node_id(ToProto<ui32>(id)); + item->set_node_id(ToProto(id)); ToProto(item->mutable_node_descriptor(), *descriptor); } } diff --git a/yt/yt/client/object_client/helpers-inl.h b/yt/yt/client/object_client/helpers-inl.h index 9d487edb19..000d5b1710 100644 --- a/yt/yt/client/object_client/helpers-inl.h +++ b/yt/yt/client/object_client/helpers-inl.h @@ -29,6 +29,11 @@ inline ui64 CounterFromId(TObjectId id) return result; } +inline NHydra::TRevision RevisionFromId(TObjectId id) +{ + return NHydra::TRevision(CounterFromId(id)); +} + inline ui32 EntropyFromId(TObjectId id) { return id.Parts32[0]; @@ -37,7 +42,7 @@ inline ui32 EntropyFromId(TObjectId id) inline NHydra::TVersion VersionFromId(TObjectId id) { YT_ASSERT(!IsSequoiaId(id)); - return NHydra::TVersion::FromRevision(CounterFromId(id)); + return NHydra::TVersion::FromRevision(RevisionFromId(id)); } inline NTransactionClient::TTimestamp TimestampFromId(TObjectId id) diff --git a/yt/yt/client/object_client/helpers.h b/yt/yt/client/object_client/helpers.h index 1c668033c9..8ff3066b25 100644 --- a/yt/yt/client/object_client/helpers.h +++ b/yt/yt/client/object_client/helpers.h @@ -8,6 +8,8 @@ #include <yt/yt/client/ypath/public.h> +#include <yt/yt/client/hydra/public.h> + #include <yt/yt/core/rpc/public.h> namespace NYT::NObjectClient { @@ -98,6 +100,9 @@ TCellTag CellTagFromId(TObjectId id); //! Extracts the counter component from #id. ui64 CounterFromId(TObjectId id); +//! Extracts Hydra revision from #id. +NHydra::TRevision RevisionFromId(TObjectId id); + //! Extracts the entropy component from #id. ui32 EntropyFromId(TObjectId id); diff --git a/yt/yt/client/query_client/query_statistics.cpp b/yt/yt/client/query_client/query_statistics.cpp index 1ae041a995..446aa135b5 100644 --- a/yt/yt/client/query_client/query_statistics.cpp +++ b/yt/yt/client/query_client/query_statistics.cpp @@ -28,16 +28,17 @@ void ToProto(NProto::TQueryStatistics* serialized, const TQueryStatistics& origi serialized->set_rows_read(original.RowsRead); serialized->set_data_weight_read(original.DataWeightRead); serialized->set_rows_written(original.RowsWritten); - serialized->set_sync_time(ToProto<i64>(original.SyncTime)); - serialized->set_async_time(ToProto<i64>(original.AsyncTime)); - serialized->set_execute_time(ToProto<i64>(original.ExecuteTime)); - serialized->set_read_time(ToProto<i64>(original.ReadTime)); - serialized->set_write_time(ToProto<i64>(original.WriteTime)); - serialized->set_codegen_time(ToProto<i64>(original.CodegenTime)); - serialized->set_wait_on_ready_event_time(ToProto<i64>(original.WaitOnReadyEventTime)); + serialized->set_sync_time(ToProto(original.SyncTime)); + serialized->set_async_time(ToProto(original.AsyncTime)); + serialized->set_execute_time(ToProto(original.ExecuteTime)); + serialized->set_read_time(ToProto(original.ReadTime)); + serialized->set_write_time(ToProto(original.WriteTime)); + serialized->set_codegen_time(ToProto(original.CodegenTime)); + serialized->set_wait_on_ready_event_time(ToProto(original.WaitOnReadyEventTime)); serialized->set_incomplete_input(original.IncompleteInput); serialized->set_incomplete_output(original.IncompleteOutput); serialized->set_memory_usage(original.MemoryUsage); + serialized->set_total_grouped_row_count(original.TotalGroupedRowCount); ToProto(serialized->mutable_inner_statistics(), original.InnerStatistics); } @@ -56,6 +57,7 @@ void FromProto(TQueryStatistics* original, const NProto::TQueryStatistics& seria original->IncompleteInput = serialized.incomplete_input(); original->IncompleteOutput = serialized.incomplete_output(); original->MemoryUsage = serialized.memory_usage(); + original->TotalGroupedRowCount = serialized.total_grouped_row_count(); FromProto(&original->InnerStatistics, serialized.inner_statistics()); } diff --git a/yt/yt/client/query_client/query_statistics.h b/yt/yt/client/query_client/query_statistics.h index a759a09372..06063b7d49 100644 --- a/yt/yt/client/query_client/query_statistics.h +++ b/yt/yt/client/query_client/query_statistics.h @@ -23,6 +23,7 @@ struct TQueryStatistics bool IncompleteInput = false; bool IncompleteOutput = false; size_t MemoryUsage = 0; + i64 TotalGroupedRowCount = 0; std::vector<TQueryStatistics> InnerStatistics; diff --git a/yt/yt/client/queue_client/producer_client.cpp b/yt/yt/client/queue_client/producer_client.cpp index 4040bd337c..1c631efca1 100644 --- a/yt/yt/client/queue_client/producer_client.cpp +++ b/yt/yt/client/queue_client/producer_client.cpp @@ -55,7 +55,6 @@ public: , Epoch_(createSessionResult.Epoch) , LastSequenceNumber_(createSessionResult.SequenceNumber) , UserMeta_(std::move(createSessionResult.UserMeta)) - , BufferedRowWriter_(CreateWireProtocolWriter()) { if (Options_.BackgroundFlushPeriod) { if (!Invoker_) { @@ -97,18 +96,19 @@ public: Started_ = true; } - if (Closed_) { + if (Closed_ || Canceled_) { return false; } for (const auto& row : rows) { - BufferedRowWriter_->WriteUnversionedRow(row); - ++BufferedRowCount_; + CurrentBufferWriter_->WriteUnversionedRow(row); + ++CurrentBufferRowCount_; } - if (IsFlushNeeded()) { + if (IsCurrentBufferFull()) { if (!FlushExecutor_) { return false; } + RotateBuffer(); FlushExecutor_->ScheduleOutOfBand(); } return true; @@ -131,19 +131,24 @@ public: TFuture<void> Flush() override { - if (!FlushExecutor_) { - std::vector<TSharedRef> serializedRows; - { - auto guard = Guard(SpinLock_); - YT_LOG_DEBUG("Flushing rows (RowCount: %v)", BufferedRowCount_); - serializedRows = GetRowsToFlushAndResetBuffer(); - } - - return FlushImpl(serializedRows); + if (FlushExecutor_) { + FlushExecutor_->ScheduleOutOfBand(); + return FlushExecutor_->GetExecutedEvent(); } - FlushExecutor_->ScheduleOutOfBand(); - return FlushExecutor_->GetExecutedEvent(); + return TryToFlush(/*checkIfFlushNeeded*/ false); + } + + void Cancel() override + { + auto guard = Guard(SpinLock_); + + CurrentBufferWriter_ = CreateWireProtocolWriter(); + CurrentBufferRowCount_ = 0; + + BufferQueue_.clear(); + + Canceled_ = true; } TFuture<void> Close() override @@ -189,87 +194,167 @@ private: std::atomic<TQueueProducerSequenceNumber> LastSequenceNumber_ = TQueueProducerSequenceNumber{0}; INodePtr UserMeta_; - std::unique_ptr<IWireProtocolWriter> BufferedRowWriter_; - i64 BufferedRowCount_ = 0; + std::unique_ptr<IWireProtocolWriter> CurrentBufferWriter_ = CreateWireProtocolWriter(); + i64 CurrentBufferRowCount_ = 0; + + struct TBuffer + { + std::vector<TSharedRef> SerializedRows; + i64 RowCount; + }; + + std::deque<TBuffer> BufferQueue_; bool Started_ = false; TPeriodicExecutorPtr FlushExecutor_; + bool Canceled_ = false; bool Closed_ = false; TPromise<void> StoppedPromise_ = NewPromise<void>(); YT_DECLARE_SPIN_LOCK(TSpinLock, SpinLock_); + bool IsCurrentBufferFull() const + { + VERIFY_SPINLOCK_AFFINITY(SpinLock_); + + return (Options_.BatchOptions.ByteSize && static_cast<i64>(CurrentBufferWriter_->GetByteSize()) >= *Options_.BatchOptions.ByteSize) + || (Options_.BatchOptions.RowCount && CurrentBufferRowCount_ >= *Options_.BatchOptions.RowCount); + } + bool IsFlushNeeded() const { VERIFY_SPINLOCK_AFFINITY(SpinLock_); - return (Options_.BatchOptions.ByteSize && static_cast<i64>(BufferedRowWriter_->GetByteSize()) >= *Options_.BatchOptions.ByteSize) - || (Options_.BatchOptions.RowCount && BufferedRowCount_ >= *Options_.BatchOptions.RowCount); + return IsCurrentBufferFull() || !BufferQueue_.empty(); + } + + std::optional<TBuffer> GetBufferToFlush() + { + VERIFY_SPINLOCK_AFFINITY(SpinLock_); + + RotateBuffer(); + + if (BufferQueue_.empty()) { + return std::nullopt; + } + auto buffer = std::optional<TBuffer>{std::move(BufferQueue_.front())}; + BufferQueue_.pop_front(); + + return buffer; } - TFuture<void> TryToFlush() + TFuture<void> TryToFlush(bool checkIfFlushNeeded = true) { - std::vector<TSharedRef> serializedRows; + std::optional<TBuffer> buffer; { auto guard = Guard(SpinLock_); - if (!IsFlushNeeded() && !Closed_) { + if ((checkIfFlushNeeded && !IsFlushNeeded()) && !Closed_) { return VoidFuture; } - serializedRows = GetRowsToFlushAndResetBuffer(); + buffer = GetBufferToFlush(); + } + if (!buffer) { + return VoidFuture; } - return FlushImpl(std::move(serializedRows)); + return FlushImpl(std::move(*buffer)) + .Apply(BIND([this, this_ = MakeStrong(this), checkIfFlushNeeded] { + return TryToFlush(checkIfFlushNeeded); + })); } - std::vector<TSharedRef> GetRowsToFlushAndResetBuffer() + void RotateBuffer() { VERIFY_SPINLOCK_AFFINITY(SpinLock_); + if (CurrentBufferRowCount_ <= 0) { + return; + } + auto writer = CreateWireProtocolWriter(); - writer->WriteSerializedRowset(BufferedRowCount_, BufferedRowWriter_->Finish()); - BufferedRowWriter_ = CreateWireProtocolWriter(); - BufferedRowCount_ = 0; - return writer->Finish(); + writer->WriteSerializedRowset(CurrentBufferRowCount_, CurrentBufferWriter_->Finish()); + + BufferQueue_.push_back(TBuffer{ + .SerializedRows = writer->Finish(), + .RowCount = CurrentBufferRowCount_, + }); + + CurrentBufferWriter_ = CreateWireProtocolWriter(); + CurrentBufferRowCount_ = 0; } void OnFlush() { - std::vector<TSharedRef> serializedRows; + std::optional<TBuffer> buffer; { auto guard = Guard(SpinLock_); - YT_LOG_DEBUG("Flushing rows (RowCount: %v)", BufferedRowCount_); - serializedRows = GetRowsToFlushAndResetBuffer(); + + if (Canceled_) { + YT_LOG_DEBUG("Producer session was canceled, flush nothing"); + StoppedPromise_.TrySet(); + return; + } + + buffer = GetBufferToFlush(); } - WaitFor(FlushImpl(std::move(serializedRows))) - .ThrowOnError(); + TError error; + + if (buffer) { + auto& backoffStrategy = Options_.BackoffStrategy; + backoffStrategy.Restart(); + while (backoffStrategy.Next()) { + if (Canceled_) { + YT_LOG_DEBUG("Producer session was canceled, flush nothing"); + StoppedPromise_.TrySet(); + return; + } + + // TODO(nadya73): Fix copying. + error = WaitFor(FlushImpl(*buffer)); + if (error.IsOK()) { + break; + } + + TDelayedExecutor::WaitForDuration(backoffStrategy.GetBackoff()); + } + } else { + YT_LOG_DEBUG("No buffer to flush, do nothing"); + } bool isStopped = false; { auto guard = Guard(SpinLock_); - if (Closed_ && BufferedRowCount_ == 0) { + if (Closed_ && CurrentBufferRowCount_ == 0 && BufferQueue_.empty() || !error.IsOK()) { isStopped = true; } } if (isStopped) { - StoppedPromise_.TrySet(); + StoppedPromise_.TrySet(error); } } - TFuture<void> FlushImpl(std::vector<TSharedRef> serializedRows) + TFuture<void> FlushImpl(TBuffer buffer) { + YT_LOG_DEBUG("Trying to flush %v rows", buffer.RowCount); + return Client_->StartTransaction(ETransactionType::Tablet) - .Apply(BIND([serializedRows = std::move(serializedRows), this, this_ = MakeStrong(this)] (const ITransactionPtr& transaction) { + .Apply(BIND([buffer = std::move(buffer), this, this_ = MakeStrong(this)] (const ITransactionPtr& transaction) { TPushQueueProducerOptions pushQueueProducerOptions; if (Options_.AutoSequenceNumber) { pushQueueProducerOptions.SequenceNumber = TQueueProducerSequenceNumber{LastSequenceNumber_.load().Underlying() + 1}; } - return transaction->PushQueueProducer(ProducerPath_, QueuePath_, SessionId_, Epoch_, NameTable_, serializedRows, pushQueueProducerOptions) + return transaction->PushQueueProducer(ProducerPath_, QueuePath_, SessionId_, Epoch_, NameTable_, buffer.SerializedRows, pushQueueProducerOptions) .Apply(BIND([=, this, this_ = MakeStrong(this)] (const TPushQueueProducerResult& pushQueueProducerResult) { LastSequenceNumber_.store(pushQueueProducerResult.LastSequenceNumber); return transaction->Commit(); + })) + .Apply(BIND([this, this_ = MakeStrong(this)] (const TTransactionCommitResult&) { + if (Options_.AcknowledgmentCallback) { + Options_.AcknowledgmentCallback(LastSequenceNumber_); + } })); })).AsVoid(); } diff --git a/yt/yt/client/queue_client/producer_client.h b/yt/yt/client/queue_client/producer_client.h index 3fc73ed3a8..c30a7763d5 100644 --- a/yt/yt/client/queue_client/producer_client.h +++ b/yt/yt/client/queue_client/producer_client.h @@ -11,6 +11,8 @@ #include <yt/yt/core/actions/future.h> +#include <yt/yt/core/misc/backoff_strategy.h> + #include <yt/yt/core/ytree/yson_struct.h> namespace NYT::NQueueClient { @@ -25,6 +27,8 @@ struct TProducerSessionBatchOptions std::optional<i64> RowCount; }; +using TAckCallback = TCallback<void(NQueueClient::TQueueProducerSequenceNumber)>; + struct TProducerSessionOptions { //! If true, sequence numbers will be incremented automatically, @@ -38,6 +42,12 @@ struct TProducerSessionOptions //! If set, rows will be flushed in background with this period. std::optional<TDuration> BackgroundFlushPeriod; + + //! Backoff strategy for retries when background flush is turned on. + TBackoffStrategy BackoffStrategy = TBackoffStrategy(TExponentialBackoffOptions{}); + + //! Acknowledgment callback. + TAckCallback AcknowledgmentCallback; }; struct IProducerSession @@ -53,6 +63,9 @@ struct IProducerSession //! Flush all written rows. virtual TFuture<void> Flush() = 0; + + //! Cancel writing of all not flushed rows. + virtual void Cancel() = 0; }; DEFINE_REFCOUNTED_TYPE(IProducerSession) diff --git a/yt/yt/client/scheduler/public.h b/yt/yt/client/scheduler/public.h index 9d6d96f751..2c0f279ed9 100644 --- a/yt/yt/client/scheduler/public.h +++ b/yt/yt/client/scheduler/public.h @@ -142,6 +142,7 @@ DEFINE_ENUM(EAbortReason, ((RootVolumePreparationFailed) ( 54)) ((InterruptionFailed) ( 55)) ((OperationIncarnationChanged) ( 56)) + ((AddressResolveFailed) ( 57)) ((SchedulingFirst) (100)) ((SchedulingTimeout) (101)) ((SchedulingResourceOvercommit) (102)) diff --git a/yt/yt/client/table_client/logical_type.cpp b/yt/yt/client/table_client/logical_type.cpp index ef61f7f0c7..fda90c21ec 100644 --- a/yt/yt/client/table_client/logical_type.cpp +++ b/yt/yt/client/table_client/logical_type.cpp @@ -16,6 +16,8 @@ namespace NYT::NTableClient { using namespace NYson; +using NYT::ToProto; + //////////////////////////////////////////////////////////////////////////////// struct TWalkContext @@ -1053,7 +1055,7 @@ void ToProto(NProto::TLogicalType* protoLogicalType, const TLogicalTypePtr& logi { switch (logicalType->GetMetatype()) { case ELogicalMetatype::Simple: - protoLogicalType->set_simple(static_cast<int>(logicalType->AsSimpleTypeRef().GetElement())); + protoLogicalType->set_simple(ToProto(logicalType->AsSimpleTypeRef().GetElement())); return; case ELogicalMetatype::Decimal: protoLogicalType->mutable_decimal()->set_precision(logicalType->AsDecimalTypeRef().GetPrecision()); @@ -2054,12 +2056,20 @@ public: const TLogicalTypePtr& GetSimpleType(ESimpleLogicalValueType type) { - return GetOrCrash(SimpleTypeMap_, type); + auto it = SimpleTypeMap_.find(type); + if (it == SimpleTypeMap_.end()) { + THROW_ERROR_EXCEPTION("Unknown type %Qlv", type); + } + return it->second; } const TLogicalTypePtr& GetOptionalType(ESimpleLogicalValueType type) { - return GetOrCrash(OptionalTypeMap_, type); + auto it = OptionalTypeMap_.find(type); + if (it == OptionalTypeMap_.end()) { + THROW_ERROR_EXCEPTION("Unknown type %Qlv", type); + } + return it->second; } private: diff --git a/yt/yt/client/table_client/schema.cpp b/yt/yt/client/table_client/schema.cpp index 5c231cb891..3d5a8b92ce 100644 --- a/yt/yt/client/table_client/schema.cpp +++ b/yt/yt/client/table_client/schema.cpp @@ -394,10 +394,10 @@ void ToProto(NProto::TColumnSchema* protoSchema, const TColumnSchema& schema) protoSchema->set_stable_name(schema.StableName().Underlying()); } - protoSchema->set_type(static_cast<int>(GetPhysicalType(schema.CastToV1Type()))); + protoSchema->set_type(ToProto(GetPhysicalType(schema.CastToV1Type()))); if (schema.IsOfV1Type()) { - protoSchema->set_simple_logical_type(static_cast<int>(schema.CastToV1Type())); + protoSchema->set_simple_logical_type(ToProto(schema.CastToV1Type())); } else { protoSchema->clear_simple_logical_type(); } @@ -428,7 +428,7 @@ void ToProto(NProto::TColumnSchema* protoSchema, const TColumnSchema& schema) protoSchema->clear_aggregate(); } if (schema.SortOrder()) { - protoSchema->set_sort_order(static_cast<int>(*schema.SortOrder())); + protoSchema->set_sort_order(ToProto(*schema.SortOrder())); } else { protoSchema->clear_sort_order(); } @@ -1505,7 +1505,7 @@ void ToProto(NProto::TTableSchemaExt* protoSchema, const TTableSchema& schema) ToProto(protoSchema->mutable_deleted_columns(), schema.DeletedColumns()); protoSchema->set_strict(schema.GetStrict()); protoSchema->set_unique_keys(schema.GetUniqueKeys()); - protoSchema->set_schema_modification(static_cast<int>(schema.GetSchemaModification())); + protoSchema->set_schema_modification(ToProto(schema.GetSchemaModification())); } void FromProto(TTableSchema* schema, const NProto::TTableSchemaExt& protoSchema) diff --git a/yt/yt/client/table_client/versioned_io_options.cpp b/yt/yt/client/table_client/versioned_io_options.cpp index 7a067d8a96..d181197a1e 100644 --- a/yt/yt/client/table_client/versioned_io_options.cpp +++ b/yt/yt/client/table_client/versioned_io_options.cpp @@ -4,6 +4,8 @@ namespace NYT::NTableClient { +using NYT::ToProto; + //////////////////////////////////////////////////////////////////////////////// void TVersionedReadOptions::Register(TRegistrar registrar) @@ -22,7 +24,7 @@ void ToProto( NProto::TVersionedReadOptions* protoOptions, const TVersionedReadOptions& options) { - protoOptions->set_read_mode(static_cast<i32>(options.ReadMode)); + protoOptions->set_read_mode(ToProto(options.ReadMode)); } void FromProto( @@ -36,7 +38,7 @@ void ToProto( NProto::TVersionedWriteOptions* protoOptions, const NTableClient::TVersionedWriteOptions& options) { - protoOptions->set_write_mode(static_cast<i32>(options.WriteMode)); + protoOptions->set_write_mode(ToProto(options.WriteMode)); } void FromProto( diff --git a/yt/yt/client/tablet_client/table_mount_cache_detail.cpp b/yt/yt/client/tablet_client/table_mount_cache_detail.cpp index 2c37652904..248e19de7e 100644 --- a/yt/yt/client/tablet_client/table_mount_cache_detail.cpp +++ b/yt/yt/client/tablet_client/table_mount_cache_detail.cpp @@ -256,8 +256,8 @@ auto TTableMountCacheBase::TryHandleServantNotActiveError(const TError& error) return {}; } - if (auto siblingCellDescriptor = attributes.ToMap()->FindChild("sibling_servant_cell_descriptor")) { - RegisterCell(std::move(siblingCellDescriptor)); + if (auto siblingCellDescriptor = attributes.FindYson("sibling_servant_cell_descriptor")) { + RegisterCell(ConvertToNode(siblingCellDescriptor)); } else { return {}; } diff --git a/yt/yt/client/transaction_client/remote_timestamp_provider.cpp b/yt/yt/client/transaction_client/remote_timestamp_provider.cpp index e2584e3106..6e4dbde8f3 100644 --- a/yt/yt/client/transaction_client/remote_timestamp_provider.cpp +++ b/yt/yt/client/transaction_client/remote_timestamp_provider.cpp @@ -92,7 +92,7 @@ private: req->RequireServerFeature(ETimestampProviderFeature::AlienClocks); } - req->set_clock_cluster_tag(ToProto<int>(clockClusterTag)); + req->set_clock_cluster_tag(ToProto(clockClusterTag)); } return req->Invoke().Apply( diff --git a/yt/yt/client/unittests/schema_ut.cpp b/yt/yt/client/unittests/schema_ut.cpp index 9b407e51cb..4c4b597f0d 100644 --- a/yt/yt/client/unittests/schema_ut.cpp +++ b/yt/yt/client/unittests/schema_ut.cpp @@ -14,14 +14,13 @@ #include <random> namespace NYT::NTableClient { - -//////////////////////////////////////////////////////////////////////////////// - namespace { using namespace NYson; using namespace NYTree; +using NYT::ToProto; + //////////////////////////////////////////////////////////////////////////////// TColumnSchema ColumnFromYson(const TString& yson) @@ -397,7 +396,7 @@ TEST(TTableSchemaTest, ColumnSchemaProtobufBackwardCompatibility) { NProto::TColumnSchema columnSchemaProto; columnSchemaProto.set_name("foo"); - columnSchemaProto.set_type(static_cast<int>(EValueType::Uint64)); + columnSchemaProto.set_type(ToProto(EValueType::Uint64)); TColumnSchema columnSchema; FromProto(&columnSchema, columnSchemaProto); @@ -407,7 +406,7 @@ TEST(TTableSchemaTest, ColumnSchemaProtobufBackwardCompatibility) EXPECT_EQ(columnSchema.Name(), "foo"); EXPECT_EQ(columnSchema.StableName().Underlying(), "foo"); - columnSchemaProto.set_simple_logical_type(static_cast<int>(ESimpleLogicalValueType::Uint32)); + columnSchemaProto.set_simple_logical_type(ToProto(ESimpleLogicalValueType::Uint32)); columnSchemaProto.set_name("foo"); columnSchemaProto.set_stable_name("foo_stable"); FromProto(&columnSchema, columnSchemaProto); diff --git a/yt/yt/core/bus/tcp/connection.cpp b/yt/yt/core/bus/tcp/connection.cpp index 83faf6cb42..f7c43226b8 100644 --- a/yt/yt/core/bus/tcp/connection.cpp +++ b/yt/yt/core/bus/tcp/connection.cpp @@ -303,10 +303,10 @@ void TTcpConnection::TryEnqueueHandshake() NProto::THandshake handshake; ToProto(handshake.mutable_connection_id(), Id_); if (ConnectionType_ == EConnectionType::Client) { - handshake.set_multiplexing_band(ToProto<int>(MultiplexingBand_.load())); + handshake.set_multiplexing_band(ToProto(MultiplexingBand_.load())); } - handshake.set_encryption_mode(ToProto<int>(EncryptionMode_)); - handshake.set_verification_mode(ToProto<int>(VerificationMode_)); + handshake.set_encryption_mode(ToProto(EncryptionMode_)); + handshake.set_verification_mode(ToProto(VerificationMode_)); auto message = MakeHandshakeMessage(handshake); auto messageSize = GetByteSize(message); diff --git a/yt/yt/core/concurrency/scheduled_executor.cpp b/yt/yt/core/concurrency/scheduled_executor.cpp index 07ceb5069b..f906e5545d 100644 --- a/yt/yt/core/concurrency/scheduled_executor.cpp +++ b/yt/yt/core/concurrency/scheduled_executor.cpp @@ -38,9 +38,9 @@ bool TScheduledInvocationTimePolicy::IsEnabled() return static_cast<bool>(Interval_); } -bool TScheduledInvocationTimePolicy::ShouldKickstart(const TOptions&) +bool TScheduledInvocationTimePolicy::ShouldKickstart(const TOptions& interval) { - return IsEnabled(); + return static_cast<bool>(interval); } void TScheduledInvocationTimePolicy::SetOptions(TOptions interval) diff --git a/yt/yt/core/concurrency/unittests/async_looper_ut.cpp b/yt/yt/core/concurrency/unittests/async_looper_ut.cpp index a05ed39b42..018bfa5e47 100644 --- a/yt/yt/core/concurrency/unittests/async_looper_ut.cpp +++ b/yt/yt/core/concurrency/unittests/async_looper_ut.cpp @@ -111,12 +111,14 @@ TEST(TAsyncLooperTest, CancelAsyncStep) NThreading::TEvent started; auto promise = NewPromise<void>(); + bool callbackFinished = false; - auto asyncStart = BIND([invoker = queue->GetInvoker(), promise, &started] (bool) { - return BIND([promise, &started] { + auto asyncStart = BIND([invoker = queue->GetInvoker(), promise, &started, &callbackFinished] (bool) { + return BIND([promise, &started, &callbackFinished] { started.NotifyAll(); WaitFor(promise.ToFuture()) .ThrowOnError(); + callbackFinished = true; }).AsyncVia(invoker).Run(); }); @@ -136,7 +138,11 @@ TEST(TAsyncLooperTest, CancelAsyncStep) queue->Shutdown(); - EXPECT_TRUE(promise.IsCanceled()); + // Cancelation is a bit racy and sometimes promise is set with error + // instead of being canceled "for real". Thus we simply check that + // the code didn't go through completely. + // EXPECT_TRUE(promise.IsCanceled()); + EXPECT_FALSE(callbackFinished); } TEST(TAsyncLooperTest, CancelSyncStep) diff --git a/yt/yt/core/concurrency/unittests/scheduled_executor_ut.cpp b/yt/yt/core/concurrency/unittests/scheduled_executor_ut.cpp index b6af4f8a4d..2d7143297d 100644 --- a/yt/yt/core/concurrency/unittests/scheduled_executor_ut.cpp +++ b/yt/yt/core/concurrency/unittests/scheduled_executor_ut.cpp @@ -93,6 +93,51 @@ TEST_W(TScheduledExecutorTest, SimpleScheduleOutOfBand) EXPECT_GT(TDuration::MilliSeconds(20), executionDuration); } +TEST_W(TScheduledExecutorTest, SetOptionsAfterStartWithNonEmptyInterval) +{ + std::atomic<int> count = {0}; + + auto callback = BIND([&] { + ++count; + }); + + auto actionQueue = New<TActionQueue>(); + auto executor = New<TScheduledExecutor>( + actionQueue->GetInvoker(), + callback, + std::nullopt); + + executor->Start(); + executor->SetOptions(TDuration::MilliSeconds(200)); + + TDelayedExecutor::WaitForDuration(TDuration::MilliSeconds(300)); + WaitFor(executor->Stop()) + .ThrowOnError(); + EXPECT_GE(count.load(), 1); + EXPECT_LE(count.load(), 3); +} + +TEST_W(TScheduledExecutorTest, SetOptionsAfterStartWithEmptyInterval) +{ + std::atomic<int> count = {0}; + + auto callback = BIND([&] { + ++count; + }); + + auto actionQueue = New<TActionQueue>(); + // Divide by 16 to prevent overflow. + auto executor = New<TScheduledExecutor>( + actionQueue->GetInvoker(), + callback, + TDuration::Max() / 16); + + executor->Start(); + executor->SetOptions(std::nullopt); + + EXPECT_EQ(count.load(), 0); +} + TEST_W(TScheduledExecutorTest, ParallelStop) { auto interval = TDuration::MilliSeconds(10); diff --git a/yt/yt/core/misc/error.cpp b/yt/yt/core/misc/error.cpp index 950a7a0f02..c4de07c2bf 100644 --- a/yt/yt/core/misc/error.cpp +++ b/yt/yt/core/misc/error.cpp @@ -396,9 +396,14 @@ void Deserialize(TError& error, const NYTree::INodePtr& node) error.SetMessage(mapNode->GetChildValueOrThrow<TString>(MessageKey)); static const TString AttributesKey("attributes"); - auto attributes = IAttributeDictionary::FromMap(mapNode->GetChildOrThrow(AttributesKey)->AsMap()); + auto children = mapNode->GetChildOrThrow(AttributesKey)->AsMap()->GetChildren(); - error.SetAttributes(std::move(attributes)); + for (const auto& [key, value] : children) { + // TODO(babenko): migrate to std::string + error <<= TErrorAttribute(TString(key), ConvertToYsonString(value)); + } + + error.UpdateOriginAttributes(); static const TString InnerErrorsKey("inner_errors"); if (auto innerErrorsNode = mapNode->FindChild(InnerErrorsKey)) { @@ -418,7 +423,7 @@ void Deserialize(TError& error, NYson::TYsonPullParserCursor* cursor) void ToProto(NYT::NProto::TError* protoError, const TError& error) { if (error.IsOK()) { - protoError->set_code(static_cast<int>(NYT::EErrorCode::OK)); + protoError->set_code(ToProto(NYT::EErrorCode::OK)); protoError->clear_message(); return; } @@ -428,7 +433,19 @@ void ToProto(NYT::NProto::TError* protoError, const TError& error) protoError->clear_attributes(); if (error.HasAttributes()) { - ToProto(protoError->mutable_attributes(), error.Attributes()); + auto* protoAttributes = protoError->mutable_attributes(); + + protoAttributes->Clear(); + auto pairs = error.Attributes().ListPairs(); + std::sort(pairs.begin(), pairs.end(), [] (const auto& lhs, const auto& rhs) { + return lhs.first < rhs.first; + }); + protoAttributes->mutable_attributes()->Reserve(pairs.size()); + for (const auto& [key, value] : pairs) { + auto* protoAttribute = protoAttributes->add_attributes(); + protoAttribute->set_key(key); + protoAttribute->set_value(value.ToString()); + } } auto addAttribute = [&] (const TString& key, const auto& value) { @@ -487,9 +504,12 @@ void FromProto(TError* error, const NYT::NProto::TError& protoError) error->SetCode(TErrorCode(protoError.code())); error->SetMessage(FromProto<TString>(protoError.message())); if (protoError.has_attributes()) { - auto attributes = FromProto(protoError.attributes()); - - error->SetAttributes(std::move(attributes)); + for (const auto& protoAttribute : protoError.attributes().attributes()) { + auto key = FromProto<TString>(protoAttribute.key()); + auto value = FromProto<TString>(protoAttribute.value()); + (*error) <<= TErrorAttribute(key, TYsonString(value)); + } + error->UpdateOriginAttributes(); } *error->MutableInnerErrors() = FromProto<std::vector<TError>>(protoError.inner_errors()); } @@ -605,8 +625,12 @@ void TErrorSerializer::Load(TStreamLoadContext& context, TError& error) IAttributeDictionaryPtr attributes; if (Load<bool>(context)) { - attributes = CreateEphemeralAttributes(); - TAttributeDictionarySerializer::LoadNonNull(context, attributes); + size_t size = TSizeSerializer::Load(context); + for (size_t index = 0; index < size; ++index) { + auto key = Load<TString>(context); + auto value = Load<TYsonString>(context); + error <<= TErrorAttribute(key, value); + } } auto innerErrors = Load<std::vector<TError>>(context); @@ -617,8 +641,8 @@ void TErrorSerializer::Load(TStreamLoadContext& context, TError& error) } error.SetCode(code); + error.UpdateOriginAttributes(); error.SetMessage(std::move(message)); - error.SetAttributes(std::move(attributes)); *error.MutableInnerErrors() = std::move(innerErrors); } diff --git a/yt/yt/core/misc/protobuf_helpers-inl.h b/yt/yt/core/misc/protobuf_helpers-inl.h index 8580583ccb..d603aa3fce 100644 --- a/yt/yt/core/misc/protobuf_helpers-inl.h +++ b/yt/yt/core/misc/protobuf_helpers-inl.h @@ -23,7 +23,13 @@ namespace NYT { inline void FromProto(type* original, type serialized) \ { \ *original = serialized; \ - } + } \ + \ + template <> \ + struct TProtoTraits<type> \ + { \ + using TSerialized = type; \ + }; DEFINE_TRIVIAL_PROTO_CONVERSIONS(i8) DEFINE_TRIVIAL_PROTO_CONVERSIONS(ui8) @@ -91,6 +97,12 @@ inline void FromProto(std::string* original, std::string serialized) *original = std::move(serialized); } +template <> +struct TProtoTraits<std::string> +{ + using TSerialized = TProtobufString; +}; + //////////////////////////////////////////////////////////////////////////////// // These conversions work in case if the patched protobuf that uses @@ -120,12 +132,12 @@ inline void FromProto(TStringBuf* original, const std::string& serialized) //////////////////////////////////////////////////////////////////////////////// -inline void ToProto(::google::protobuf::int64* serialized, TDuration original) +inline void ToProto(::google::protobuf::uint64* serialized, TDuration original) { *serialized = original.MicroSeconds(); } -inline void FromProto(TDuration* original, ::google::protobuf::int64 serialized) +inline void FromProto(TDuration* original, ::google::protobuf::uint64 serialized) { *original = TDuration::MicroSeconds(serialized); } @@ -142,16 +154,6 @@ inline void FromProto(TDuration* original, ::google::protobuf::Duration serializ //////////////////////////////////////////////////////////////////////////////// -inline void ToProto(::google::protobuf::int64* serialized, TInstant original) -{ - *serialized = original.MicroSeconds(); -} - -inline void FromProto(TInstant* original, ::google::protobuf::int64 serialized) -{ - *original = TInstant::MicroSeconds(serialized); -} - inline void ToProto(::google::protobuf::uint64* serialized, TInstant original) { *serialized = original.MicroSeconds(); @@ -370,7 +372,7 @@ void ToProtoArrayImpl( if (originalArray.IsValidIndex(key)) { const auto& value = originalArray[key]; auto* pair = serializedArray->Add(); - pair->set_key(static_cast<i32>(key)); + pair->set_key(ToProto(key)); SetPairValueImpl(pair, value); } } @@ -512,10 +514,11 @@ void CheckedHashSetFromProto( //////////////////////////////////////////////////////////////////////////////// -template <class TSerialized, class TOriginal, class... TArgs> -TSerialized ToProto(const TOriginal& original, TArgs&&... args) +template <class TSerialized, NYT::NDetail::CToProtoOriginal TOriginal, class... TArgs> +auto ToProto(const TOriginal& original, TArgs&&... args) { - TSerialized serialized; + using NYT::ToProto; + typename NYT::NDetail::TToProtoResult<TSerialized, TOriginal>::T serialized; ToProto(&serialized, original, std::forward<TArgs>(args)...); return serialized; } @@ -523,6 +526,7 @@ TSerialized ToProto(const TOriginal& original, TArgs&&... args) template <class TOriginal, class TSerialized, class... TArgs> TOriginal FromProto(const TSerialized& serialized, TArgs&&... args) { + using NYT::FromProto; TOriginal original; FromProto(&original, serialized, std::forward<TArgs>(args)...); return original; diff --git a/yt/yt/core/misc/protobuf_helpers.cpp b/yt/yt/core/misc/protobuf_helpers.cpp index cae9a285fa..f69a54650b 100644 --- a/yt/yt/core/misc/protobuf_helpers.cpp +++ b/yt/yt/core/misc/protobuf_helpers.cpp @@ -112,7 +112,7 @@ TSharedRef SerializeProtoToRefWithEnvelope( { NYT::NProto::TSerializedMessageEnvelope envelope; if (codecId != NCompression::ECodec::None) { - envelope.set_codec(static_cast<int>(codecId)); + envelope.set_codec(ToProto(codecId)); } auto serializedMessage = SerializeProtoToRef(message, partial); @@ -286,7 +286,7 @@ TSharedRef PushEnvelope(const TSharedRef& data) TSharedRef PushEnvelope(const TSharedRef& data, NCompression::ECodec codec) { NYT::NProto::TSerializedMessageEnvelope envelope; - envelope.set_codec(static_cast<int>(codec)); + envelope.set_codec(ToProto(codec)); TEnvelopeFixedHeader header; header.EnvelopeSize = CheckedCastToI32(envelope.ByteSizeLong()); diff --git a/yt/yt/core/misc/protobuf_helpers.h b/yt/yt/core/misc/protobuf_helpers.h index 4188b3a501..aa64fd8b8b 100644 --- a/yt/yt/core/misc/protobuf_helpers.h +++ b/yt/yt/core/misc/protobuf_helpers.h @@ -15,6 +15,7 @@ #include <library/cpp/yt/misc/optional.h> #include <library/cpp/yt/misc/preprocessor.h> +#include <library/cpp/yt/misc/strong_typedef.h> #include <google/protobuf/duration.pb.h> #include <google/protobuf/message.h> @@ -23,26 +24,46 @@ #include <google/protobuf/io/zero_copy_stream_impl_lite.h> +#include <type_traits> + namespace NYT { //////////////////////////////////////////////////////////////////////////////// -inline void ToProto(::google::protobuf::int64* serialized, TDuration original); -inline void FromProto(TDuration* original, ::google::protobuf::int64 serialized); +template <class T> +struct TProtoTraits +{ }; + +//////////////////////////////////////////////////////////////////////////////// + +void ToProto(::google::protobuf::uint64* serialized, TDuration original); +void FromProto(TDuration* original, ::google::protobuf::uint64 serialized); -inline void ToProto(::google::protobuf::Duration* serialized, TDuration original); -inline void FromProto(TDuration* original, ::google::protobuf::Duration serialized); +void ToProto(::google::protobuf::Duration* serialized, TDuration original); +void FromProto(TDuration* original, ::google::protobuf::Duration serialized); + +template <> +struct TProtoTraits<TDuration> +{ + using TSerialized = TDuration::TValue; // ui64 +}; //////////////////////////////////////////////////////////////////////////////// -inline void ToProto(::google::protobuf::int64* serialized, TInstant original); -inline void FromProto(TInstant* original, ::google::protobuf::int64 serialized); +void ToProto(::google::protobuf::uint64* serialized, TInstant original); +void FromProto(TInstant* original, ::google::protobuf::uint64 serialized); + +void ToProto(::google::protobuf::uint64* serialized, TInstant original); +void FromProto(TInstant* original, ::google::protobuf::uint64 serialized); -inline void ToProto(::google::protobuf::uint64* serialized, TInstant original); -inline void FromProto(TInstant* original, ::google::protobuf::uint64 serialized); +void ToProto(::google::protobuf::Timestamp* serialized, TInstant original); +void FromProto(TInstant* original, ::google::protobuf::Timestamp serialized); -inline void ToProto(::google::protobuf::Timestamp* serialized, TInstant original); -inline void FromProto(TInstant* original, ::google::protobuf::Timestamp serialized); +template <> +struct TProtoTraits<TInstant> +{ + using TSerialized = TInstant::TValue; // ui64 +}; //////////////////////////////////////////////////////////////////////////////// @@ -55,6 +76,8 @@ typename std::enable_if<std::is_convertible_v<T*, ::google::protobuf::MessageLit T* original, const T& serialized); +//////////////////////////////////////////////////////////////////////////////// + template <class T> requires TEnumTraits<T>::IsEnum && (!TEnumTraits<T>::IsBitEnum) void ToProto(int* serialized, T original); @@ -63,13 +86,30 @@ template <class T> void FromProto(T* original, int serialized); template <class T> + requires TEnumTraits<T>::IsEnum && (!TEnumTraits<T>::IsBitEnum) +struct TProtoTraits<T> +{ + using TSerialized = int; +}; + +//////////////////////////////////////////////////////////////////////////////// + +template <class T> requires TEnumTraits<T>::IsBitEnum void ToProto(ui64* serialized, T original); template <class T> requires TEnumTraits<T>::IsBitEnum void FromProto(T* original, ui64 serialized); +template <class T> + requires TEnumTraits<T>::IsBitEnum +struct TProtoTraits<T> +{ + using TSerialized = ui64; +}; + //////////////////////////////////////////////////////////////////////////////// + template <class TSerialized, class TOriginalArray, class... TArgs> void ToProto( ::google::protobuf::RepeatedPtrField<TSerialized>* serializedArray, @@ -102,16 +142,47 @@ void CheckedHashSetFromProto( THashSet<TOriginal>* originalHashSet, const ::google::protobuf::RepeatedField<TSerialized>& serializedHashSet); +//////////////////////////////////////////////////////////////////////////////// + template <class TSerialized, class T, class TTag> void FromProto(TStrongTypedef<T, TTag>* original, const TSerialized& serialized); template <class TSerialized, class T, class TTag> void ToProto(TSerialized* serialized, const TStrongTypedef<T, TTag>& original); +template <class T, class TTag> +struct TProtoTraits<TStrongTypedef<T, TTag>> +{ + using TSerialized = T; +}; + //////////////////////////////////////////////////////////////////////////////// -template <class TSerialized, class TOriginal, class... TArgs> -TSerialized ToProto(const TOriginal& original, TArgs&&... args); +namespace NDetail { + +struct TToProtoAutoDerivedSerializedTag +{ }; + +template <class TSerialized, class TOriginal> +struct TToProtoResult +{ + using T = TSerialized; +}; + +template <class TOriginal> +struct TToProtoResult<TToProtoAutoDerivedSerializedTag, TOriginal> +{ + using T = typename TProtoTraits<TOriginal>::TSerialized; +}; + +//! A simple heuristic to distinguish between `ToProto(original)` and `ToProto(&original, serialized)`. +template <class T> +concept CToProtoOriginal = !std::is_pointer_v<T>; + +} // namespace NDetail + +template <class TSerialized = NYT::NDetail::TToProtoAutoDerivedSerializedTag, NYT::NDetail::CToProtoOriginal TOriginal, class... TArgs> +auto ToProto(const TOriginal& original, TArgs&&... args); template <class TOriginal, class TSerialized, class... TArgs> TOriginal FromProto(const TSerialized& serialized, TArgs&&... args); diff --git a/yt/yt/core/misc/stripped_error-inl.h b/yt/yt/core/misc/stripped_error-inl.h index 5c2effc9aa..7fbc8acd7e 100644 --- a/yt/yt/core/misc/stripped_error-inl.h +++ b/yt/yt/core/misc/stripped_error-inl.h @@ -4,6 +4,8 @@ #include "stripped_error.h" #endif +#include <library/cpp/yt/error/error_attributes.h> + #include <library/cpp/yt/string/format.h> namespace NYT { @@ -150,6 +152,17 @@ TError TError::Wrap(TErrorCode code, TFormatString<TArgs...> format, TArgs&&... #undef IMPLEMENT_COPY_WRAP #undef IMPLEMENT_MOVE_WRAP +template <CMergeableDictionary TDictionary> +TError& TError::operator <<= (const TDictionary& attributes) & +{ + // This forces inclusion of error_attributes in the header file + // which is undesirable. + // One could (and probably should) implement type-erasure + // like AnyDictionaryRef to move this implementation in cpp file. + MutableAttributes()->MergeFrom(attributes); + return *this; +} + template <CErrorNestable TValue> TError&& TError::operator << (TValue&& rhs) && { @@ -236,7 +249,6 @@ inline void TError::ThrowOnError() && IMPLEMENT_THROW_ON_ERROR(); } - #undef IMPLEMENT_THROW_ON_ERROR //////////////////////////////////////////////////////////////////////////////// diff --git a/yt/yt/core/misc/stripped_error.cpp b/yt/yt/core/misc/stripped_error.cpp index fbcfb90ff0..1bb32bea82 100644 --- a/yt/yt/core/misc/stripped_error.cpp +++ b/yt/yt/core/misc/stripped_error.cpp @@ -13,11 +13,13 @@ // NB: We don't need printability since TError from // this file is not printable. #include <yt/yt/core/ytree/attributes.h> +#include <yt/yt/core/ytree/exception_helpers.h> #include <yt/yt/core/misc/origin_attributes.h> #include <library/cpp/yt/exception/exception.h> +#include <library/cpp/yt/error/error_attributes.h> #include <library/cpp/yt/error/origin_attributes.h> #include <library/cpp/yt/yson_string/string.h> @@ -56,7 +58,7 @@ public: : Code_(other.Code_) , Message_(other.Message_) , OriginAttributes_(other.OriginAttributes_) - , Attributes_(other.Attributes_ ? other.Attributes_->Clone() : nullptr) + , AttributesImpl_(other.AttributesImpl_ ? other.AttributesImpl_->Clone() : nullptr) , InnerErrors_(other.InnerErrors_) { } @@ -148,29 +150,26 @@ public: bool HasAttributes() const noexcept { - return Attributes_.operator bool(); + return AttributesImpl_.operator bool(); } - const IAttributeDictionary& Attributes() const + const TErrorAttributes& Attributes() const { - if (!Attributes_) { - return EmptyAttributes(); - } - return *Attributes_; + return Attributes_; } - void SetAttributes(IAttributeDictionaryPtr attributes) + void UpdateOriginAttributes() { - Attributes_ = std::move(attributes); - ExtractBultinAttributes(); + OriginAttributes_ = NYT::NDetail::ExtractFromDictionary(AttributesImpl_); } - IAttributeDictionary* MutableAttributes() noexcept + TErrorAttributes* MutableAttributes() noexcept { - if (!Attributes_) { - Attributes_ = CreateEphemeralAttributes(); + if (!HasAttributes()) { + AttributesImpl_ = CreateEphemeralAttributes(); + Attributes_ = TErrorAttributes(AttributesImpl_.Get()); } - return Attributes_.Get(); + return &Attributes_; } const std::vector<TError>& InnerErrors() const noexcept @@ -192,18 +191,78 @@ private: .Tid = NThreading::InvalidThreadId, }; - NYTree::IAttributeDictionaryPtr Attributes_; + NYTree::IAttributeDictionaryPtr AttributesImpl_; + TErrorAttributes Attributes_ = TErrorAttributes(AttributesImpl_.Get()); + std::vector<TError> InnerErrors_; - void ExtractBultinAttributes() - { - OriginAttributes_ = NYT::NDetail::ExtractFromDictionary(Attributes_); - } + friend class TErrorAttributes; }; //////////////////////////////////////////////////////////////////////////////// -namespace { +// NB(arkady-e1ppa): Currently TErrorAttributes is a facade +// which has minimal API of original dict with backend being the +// actual original dict. Once API-related issues are fixed we are +// free to implement a backend which doesn't depend on original dict. +std::vector<TString> TErrorAttributes::ListKeys() const +{ + auto* attributes = static_cast<IAttributeDictionary*>(Attributes_); + if (!attributes) { + return {}; + } + return attributes->ListKeys(); +} + +std::vector<TErrorAttributes::TKeyValuePair> TErrorAttributes::ListPairs() const +{ + auto* attributes = static_cast<IAttributeDictionary*>(Attributes_); + if (!attributes) { + return {}; + } + return attributes->ListPairs(); +} + +NYson::TYsonString TErrorAttributes::FindYson(TStringBuf key) const +{ + auto* attributes = static_cast<IAttributeDictionary*>(Attributes_); + if (!attributes) { + return {}; + } + return attributes->FindYson(key); +} + +void TErrorAttributes::SetYson(const TString& key, const NYson::TYsonString& value) +{ + auto* attributes = static_cast<IAttributeDictionary*>(Attributes_); + YT_VERIFY(attributes); + return attributes->SetYson(key, value); +} + +bool TErrorAttributes::Remove(const TString& key) +{ + auto* attributes = static_cast<IAttributeDictionary*>(Attributes_); + if (!attributes) { + return false; + } + return attributes->Remove(key); +} + +NYson::TYsonString TErrorAttributes::GetYson(TStringBuf key) const +{ + auto result = FindYson(key); + if (!result) { + // This method comes from "exception_helpers.h" + // and requires NYTree::EErrorCode::ResolveError enum value. + // TODO(arkady-e1ppa): eliminate this dependency somehow. + ThrowNoSuchAttribute(key); + } + return result; +} + +//////////////////////////////////////////////////////////////////////////////// + +namespace { bool IsWhitelisted(const TError& error, const THashSet<TStringBuf>& attributeWhitelist) { @@ -455,15 +514,16 @@ bool TError::HasAttributes() const noexcept return Impl_->HasAttributes(); } -const IAttributeDictionary& TError::Attributes() const +const TErrorAttributes& TError::Attributes() const { if (!Impl_) { - return EmptyAttributes(); + static TErrorAttributes empty{nullptr}; + return empty; } return Impl_->Attributes(); } -IAttributeDictionary* TError::MutableAttributes() +TErrorAttributes* TError::MutableAttributes() { MakeMutable(); return Impl_->MutableAttributes(); @@ -492,12 +552,12 @@ TOriginAttributes* TError::MutableOriginAttributes() const noexcept return Impl_->MutableOriginAttributes(); } -void TError::SetAttributes(NYTree::IAttributeDictionaryPtr attributes) +void TError::UpdateOriginAttributes() { if (!Impl_) { return; } - Impl_->SetAttributes(std::move(attributes)); + Impl_->UpdateOriginAttributes(); } const TString InnerErrorsTruncatedKey("inner_errors_truncated"); @@ -515,22 +575,20 @@ TError TError::Truncate( return innerError.Truncate(maxInnerErrorCount, stringLimit, attributeWhitelist); }; - auto truncateAttributes = [stringLimit, &attributeWhitelist] (const IAttributeDictionary& attributes) { - auto truncatedAttributes = CreateEphemeralAttributes(); + auto truncateAttributes = [stringLimit, &attributeWhitelist] (const TErrorAttributes& attributes, TErrorAttributes* mutableAttributes) { for (const auto& key : attributes.ListKeys()) { const auto& value = attributes.FindYson(key); if (std::ssize(value.AsStringBuf()) > stringLimit && !attributeWhitelist.contains(key)) { - truncatedAttributes->SetYson( + mutableAttributes->SetYson( key, NYson::ConvertToYsonString("...<attribute truncated>...")); } else { - truncatedAttributes->SetYson( + mutableAttributes->SetYson( key, value); } } - return truncatedAttributes; }; auto result = std::make_unique<TImpl>(); @@ -538,7 +596,7 @@ TError TError::Truncate( *result->MutableMessage() = std::move(TruncateString(GetMessage(), stringLimit, ErrorMessageTruncatedSuffix)); if (Impl_->HasAttributes()) { - result->SetAttributes(truncateAttributes(Impl_->Attributes())); + truncateAttributes(Impl_->Attributes(), result->MutableAttributes()); } *result->MutableOriginAttributes() = Impl_->OriginAttributes(); @@ -550,7 +608,7 @@ TError TError::Truncate( copiedInnerErrors.push_back(truncateInnerError(innerError)); } } else { - result->MutableAttributes()->Set(InnerErrorsTruncatedKey, true); + result->MutableAttributes()->SetYson(InnerErrorsTruncatedKey, ConvertToYsonString(true)); // NB(arkady-e1ppa): We want to always keep the last inner error, // so we make room for it and do not check if it is whitelisted. @@ -582,7 +640,7 @@ TError TError::Truncate( innerError = std::move(innerError).Truncate(maxInnerErrorCount, stringLimit, attributeWhitelist); }; - auto truncateAttributes = [stringLimit, &attributeWhitelist] (IAttributeDictionary* attributes) { + auto truncateAttributes = [stringLimit, &attributeWhitelist] (TErrorAttributes* attributes) { for (const auto& key : attributes->ListKeys()) { if (std::ssize(attributes->FindYson(key).AsStringBuf()) > stringLimit && !attributeWhitelist.contains(key)) { attributes->SetYson( @@ -602,7 +660,7 @@ TError TError::Truncate( } } else { auto& innerErrors = ApplyWhitelist(*MutableInnerErrors(), attributeWhitelist, maxInnerErrorCount); - MutableAttributes()->Set(InnerErrorsTruncatedKey, true); + MutableAttributes()->SetYson(InnerErrorsTruncatedKey, ConvertToYsonString(true)); for (auto& innerError : innerErrors) { truncateInnerError(innerError); @@ -712,12 +770,6 @@ TError& TError::operator <<= (std::vector<TError>&& innerErrors) & return *this; } -TError& TError::operator <<= (const NYTree::IAttributeDictionary& attributes) & -{ - MutableAttributes()->MergeFrom(attributes); - return *this; -} - //////////////////////////////////////////////////////////////////////////////// bool operator == (const TError& lhs, const TError& rhs) diff --git a/yt/yt/core/misc/stripped_error.h b/yt/yt/core/misc/stripped_error.h index fc4de80db6..ad985394b8 100644 --- a/yt/yt/core/misc/stripped_error.h +++ b/yt/yt/core/misc/stripped_error.h @@ -6,7 +6,7 @@ #include <library/cpp/yt/threading/public.h> -#include <library/cpp/yt/error/origin_attributes.h> +#include <library/cpp/yt/error/mergeable_dictionary.h> #include <library/cpp/yt/yson/public.h> @@ -141,15 +141,15 @@ public: bool HasAttributes() const noexcept; - const NYTree::IAttributeDictionary& Attributes() const; - NYTree::IAttributeDictionary* MutableAttributes(); + const TErrorAttributes& Attributes() const; + TErrorAttributes* MutableAttributes(); const std::vector<TError>& InnerErrors() const; std::vector<TError>* MutableInnerErrors(); // Used for deserialization only. TOriginAttributes* MutableOriginAttributes() const noexcept; - void SetAttributes(NYTree::IAttributeDictionaryPtr attributes); + void UpdateOriginAttributes(); TError Truncate( int maxInnerErrorCount = 2, @@ -223,7 +223,8 @@ public: TError& operator <<= (TError&& innerError) &; TError& operator <<= (const std::vector<TError>& innerErrors) &; TError& operator <<= (std::vector<TError>&& innerErrors) &; - TError& operator <<= (const NYTree::IAttributeDictionary& attributes) &; + template <CMergeableDictionary TDictionary> + TError& operator <<= (const TDictionary& attributes) &; template <CErrorNestable TValue> TError&& operator << (TValue&& operand) &&; @@ -244,6 +245,8 @@ private: explicit TErrorOr(std::unique_ptr<TImpl> impl); void MakeMutable(); + + friend class TErrorAttributes; }; //////////////////////////////////////////////////////////////////////////////// diff --git a/yt/yt/core/misc/unittests/error_ut.cpp b/yt/yt/core/misc/unittests/error_ut.cpp index 09e5a0fb2f..18c78a9cca 100644 --- a/yt/yt/core/misc/unittests/error_ut.cpp +++ b/yt/yt/core/misc/unittests/error_ut.cpp @@ -214,6 +214,12 @@ void IterateTestOverEveryRightOperand(TOverloadTest& tester) } } +template <class T> +void SetErrorAttribute(TError* error, TString key, const T& value) +{ + error->MutableAttributes()->SetYson(key, ConvertToYsonString(value)); +} + //////////////////////////////////////////////////////////////////////////////// TEST(TErrorTest, BitshiftOverloadsExplicitLeftOperand) @@ -315,18 +321,18 @@ TEST(TErrorTest, WrapRValue) { TError error("Error"); - // TError errorCopy = error; - // auto wrapped = std::move(errorCopy).Wrap("Wrapped error"); - // EXPECT_TRUE(errorCopy.IsOK()); - // EXPECT_EQ(wrapped.GetCode(), NYT::EErrorCode::Generic); - // EXPECT_EQ(wrapped.GetMessage(), "Wrapped error"); - // EXPECT_EQ(wrapped.InnerErrors().size(), 1u); - // EXPECT_EQ(wrapped.InnerErrors()[0], error); + TError errorCopy = error; + auto wrapped = std::move(errorCopy).Wrap("Wrapped error"); + EXPECT_TRUE(errorCopy.IsOK()); + EXPECT_EQ(wrapped.GetCode(), NYT::EErrorCode::Generic); + EXPECT_EQ(wrapped.GetMessage(), "Wrapped error"); + EXPECT_EQ(wrapped.InnerErrors().size(), 1u); + EXPECT_EQ(wrapped.InnerErrors()[0], error); - // TError anotherErrorCopy = error; - // auto trviallyWrapped = std::move(anotherErrorCopy).Wrap(); - // EXPECT_TRUE(anotherErrorCopy.IsOK()); - // EXPECT_EQ(trviallyWrapped, error); + TError anotherErrorCopy = error; + auto trviallyWrapped = std::move(anotherErrorCopy).Wrap(); + EXPECT_TRUE(anotherErrorCopy.IsOK()); + EXPECT_EQ(trviallyWrapped, error); } TEST(TErrorTest, ThrowErrorExceptionIfFailedMacroJustWorks) @@ -528,7 +534,7 @@ TEST(TErrorTest, TruncateLarge) << TError("Second inner error") << TError("Third inner error") << TError("Fourth inner error"); - error.MutableAttributes()->Set("my_attr", "Some long long attr"); + SetErrorAttribute(&error, "my_attr", "Some long long attr"); auto truncatedError = error.Truncate(/*maxInnerErrorCount*/ 3, /*stringLimit*/ 10); EXPECT_EQ(error.GetCode(), truncatedError.GetCode()); @@ -568,7 +574,7 @@ TEST(TErrorTest, TruncateLargeRValue) << TError("Second inner error") << TError("Third inner error") << TError("Fourth inner error"); - error.MutableAttributes()->Set("my_attr", "Some long long attr"); + SetErrorAttribute(&error, "my_attr", "Some long long attr"); auto errorCopy = error; auto truncatedError = std::move(errorCopy).Truncate(/*maxInnerErrorCount*/ 3, /*stringLimit*/ 10); @@ -591,7 +597,7 @@ TEST(TErrorTest, TruncateConsistentOverloads) << TError("Second inner error") << TError("Third inner error") << TError("Fourth inner error"); - error.MutableAttributes()->Set("my_attr", "Some long long attr"); + SetErrorAttribute(&error, "my_attr", "Some long long attr"); auto errorCopy = error; auto truncatedRValueError = std::move(errorCopy).Truncate(/*maxInnerErrorCount*/ 3, /*stringLimit*/ 10); @@ -604,8 +610,8 @@ TEST(TErrorTest, TruncateConsistentOverloads) TEST(TErrorTest, TruncateWhitelist) { auto error = TError("Some error"); - error.MutableAttributes()->Set("attr1", "Some long long attr"); - error.MutableAttributes()->Set("attr2", "Some long long attr"); + SetErrorAttribute(&error, "attr1", "Some long long attr"); + SetErrorAttribute(&error, "attr2", "Some long long attr"); THashSet<TStringBuf> myWhitelist = {"attr2"}; @@ -621,8 +627,8 @@ TEST(TErrorTest, TruncateWhitelist) TEST(TErrorTest, TruncateWhitelistRValue) { auto error = TError("Some error"); - error.MutableAttributes()->Set("attr1", "Some long long attr"); - error.MutableAttributes()->Set("attr2", "Some long long attr"); + SetErrorAttribute(&error, "attr1", "Some long long attr"); + SetErrorAttribute(&error, "attr2", "Some long long attr"); THashSet<TStringBuf> myWhitelist = {"attr2"}; @@ -640,8 +646,8 @@ TEST(TErrorTest, TruncateWhitelistRValue) TEST(TErrorTest, TruncateWhitelistInnerErrors) { auto innerError = TError("Inner error"); - innerError.MutableAttributes()->Set("attr1", "Some long long attr"); - innerError.MutableAttributes()->Set("attr2", "Some long long attr"); + SetErrorAttribute(&innerError, "attr1", "Some long long attr"); + SetErrorAttribute(&innerError, "attr2", "Some long long attr"); auto error = TError("Error") << innerError; @@ -660,8 +666,8 @@ TEST(TErrorTest, TruncateWhitelistInnerErrors) TEST(TErrorTest, TruncateWhitelistInnerErrorsRValue) { auto innerError = TError("Inner error"); - innerError.MutableAttributes()->Set("attr1", "Some long long attr"); - innerError.MutableAttributes()->Set("attr2", "Some long long attr"); + SetErrorAttribute(&innerError, "attr1", "Some long long attr"); + SetErrorAttribute(&innerError, "attr2", "Some long long attr"); auto error = TError("Error") << innerError; diff --git a/yt/yt/core/misc/unittests/string_ut.cpp b/yt/yt/core/misc/unittests/string_ut.cpp deleted file mode 100644 index b2ffbf4218..0000000000 --- a/yt/yt/core/misc/unittests/string_ut.cpp +++ /dev/null @@ -1,52 +0,0 @@ -#include <yt/yt/core/test_framework/framework.h> - -#include <library/cpp/yt/string/enum.h> - -namespace NYT { -namespace { - -//////////////////////////////////////////////////////////////////////////////// - -DEFINE_ENUM(EColor, - (Red) - (BlackAndWhite) -); - -DEFINE_BIT_ENUM(ELangs, - ((None) (0x00)) - ((Cpp) (0x01)) - ((Go) (0x02)) - ((Rust) (0x04)) - ((Python) (0x08)) - ((JavaScript) (0x10)) -); - -TEST(TStringTest, Enum) -{ - EXPECT_EQ("red", FormatEnum(EColor::Red)); - EXPECT_EQ(ParseEnum<EColor>("red"), EColor::Red); - - EXPECT_EQ("black_and_white", FormatEnum(EColor::BlackAndWhite)); - EXPECT_EQ(ParseEnum<EColor>("black_and_white"), EColor::BlackAndWhite); - - EXPECT_EQ("EColor(100)", FormatEnum(EColor(100))); - - EXPECT_EQ("java_script", FormatEnum(ELangs::JavaScript)); - EXPECT_EQ(ParseEnum<ELangs>("java_script"), ELangs::JavaScript); - - EXPECT_EQ("none", FormatEnum(ELangs::None)); - EXPECT_EQ(ParseEnum<ELangs>("none"), ELangs::None); - - EXPECT_EQ("cpp | go", FormatEnum(ELangs::Cpp | ELangs::Go)); - EXPECT_EQ(ParseEnum<ELangs>("cpp | go"), ELangs::Cpp | ELangs::Go); - - auto four = ELangs::Cpp | ELangs::Go | ELangs::Python | ELangs::JavaScript; - EXPECT_EQ("cpp | go | python | java_script", FormatEnum(four)); - EXPECT_EQ(ParseEnum<ELangs>("cpp | go | python | java_script"), four); -} - -//////////////////////////////////////////////////////////////////////////////// - -} // namespace -} // namespace NYT - diff --git a/yt/yt/core/misc/unittests/ya.make b/yt/yt/core/misc/unittests/ya.make index 8d1e1af3f9..f0e7235cf3 100644 --- a/yt/yt/core/misc/unittests/ya.make +++ b/yt/yt/core/misc/unittests/ya.make @@ -68,7 +68,6 @@ SRCS( spsc_queue_ut.cpp statistic_path_ut.cpp statistics_ut.cpp - string_ut.cpp sync_expiring_cache_ut.cpp time_formula_ut.cpp tls_destructor_ut.cpp diff --git a/yt/yt/core/rpc/bus/channel.cpp b/yt/yt/core/rpc/bus/channel.cpp index 294d654528..5fbd9c0f23 100644 --- a/yt/yt/core/rpc/bus/channel.cpp +++ b/yt/yt/core/rpc/bus/channel.cpp @@ -494,7 +494,7 @@ private: ToProto(header.mutable_realm_id(), requestControl->GetRealmId()); } header.set_sequence_number(payload.SequenceNumber); - header.set_codec(static_cast<int>(payload.Codec)); + header.set_codec(ToProto(payload.Codec)); auto message = CreateStreamingPayloadMessage(header, payload.Attachments); NBus::TSendOptions options; @@ -708,9 +708,9 @@ private: const TSendOptions& options) { auto& header = request->Header(); - header.set_start_time(ToProto<i64>(TInstant::Now())); + header.set_start_time(ToProto(TInstant::Now())); if (options.Timeout) { - header.set_timeout(ToProto<i64>(*options.Timeout)); + header.set_timeout(ToProto(*options.Timeout)); } else { header.clear_timeout(); } diff --git a/yt/yt/core/rpc/client.cpp b/yt/yt/core/rpc/client.cpp index b212dcdbb0..935a9af200 100644 --- a/yt/yt/core/rpc/client.cpp +++ b/yt/yt/core/rpc/client.cpp @@ -449,8 +449,8 @@ void TClientRequest::PrepareHeader() // COMPAT(danilalexeev): legacy RPC codecs if (!EnableLegacyRpcCodecs_) { - Header_.set_request_codec(ToProto<int>(RequestCodec_)); - Header_.set_response_codec(ToProto<int>(ResponseCodec_)); + Header_.set_request_codec(ToProto(RequestCodec_)); + Header_.set_response_codec(ToProto(ResponseCodec_)); } if (StreamingEnabled_) { diff --git a/yt/yt/core/rpc/config.h b/yt/yt/core/rpc/config.h index cc4e924ef1..aceeadc725 100644 --- a/yt/yt/core/rpc/config.h +++ b/yt/yt/core/rpc/config.h @@ -132,7 +132,7 @@ public: std::optional<bool> EnableErrorCodeCounter; std::optional<ERequestTracingMode> TracingMode; TTimeHistogramConfigPtr TimeHistogram; - THashMap<TString, TMethodConfigPtr> Methods; + THashMap<std::string, TMethodConfigPtr> Methods; std::optional<int> AuthenticationQueueSizeLimit; std::optional<TDuration> PendingPayloadsTimeout; std::optional<bool> Pooled; diff --git a/yt/yt/core/rpc/grpc/server.cpp b/yt/yt/core/rpc/grpc/server.cpp index c90f488740..81ab7ac13c 100644 --- a/yt/yt/core/rpc/grpc/server.cpp +++ b/yt/yt/core/rpc/grpc/server.cpp @@ -946,11 +946,11 @@ private: header->set_method(MethodName_); header->set_protocol_version_major(ProtocolVersion_.Major); header->set_protocol_version_minor(ProtocolVersion_.Minor); - header->set_request_codec(ToProto<int>(RequestCodec_)); - header->set_response_codec(ToProto<int>(ResponseCodec_)); + header->set_request_codec(ToProto(RequestCodec_)); + header->set_response_codec(ToProto(ResponseCodec_)); if (Timeout_) { - header->set_timeout(ToProto<i64>(*Timeout_)); + header->set_timeout(ToProto(*Timeout_)); } if (SslCredentialsExt_) { *header->MutableExtension(NGrpc::NProto::TSslCredentialsExt::ssl_credentials_ext) = std::move(*SslCredentialsExt_); diff --git a/yt/yt/core/rpc/helpers-inl.h b/yt/yt/core/rpc/helpers-inl.h index efda191282..6f99552ccd 100644 --- a/yt/yt/core/rpc/helpers-inl.h +++ b/yt/yt/core/rpc/helpers-inl.h @@ -20,12 +20,12 @@ void WriteAuthenticationIdentityToProto(T* proto, const TAuthenticationIdentity& if (identity.User == RootUserName) { proto->clear_user(); } else { - proto->set_user(ToProto<TProtobufString>(identity.User)); + proto->set_user(ToProto(identity.User)); } if (identity.UserTag == identity.User) { proto->clear_user_tag(); } else { - proto->set_user_tag(ToProto<TProtobufString>(identity.UserTag)); + proto->set_user_tag(ToProto(identity.UserTag)); } } diff --git a/yt/yt/core/rpc/helpers.cpp b/yt/yt/core/rpc/helpers.cpp index 9341cbc51b..d9d2a93a89 100644 --- a/yt/yt/core/rpc/helpers.cpp +++ b/yt/yt/core/rpc/helpers.cpp @@ -74,7 +74,7 @@ bool IsChannelFailureErrorHandled(const TError& error) void LabelHandledChannelFailureError(TError* error) { - error->MutableAttributes()->Set("channel_failure_error_handled", true); + *error <<= TErrorAttribute("channel_failure_error_handled", true); } //////////////////////////////////////////////////////////////////////////////// @@ -620,7 +620,7 @@ void EnrichClientRequestError( { auto featureId = error->Attributes().Get<int>(FeatureIdAttributeKey); if (auto featureName = (*featureIdFormatter)(featureId)) { - error->MutableAttributes()->Set(FeatureNameAttributeKey, featureName); + *error <<= TErrorAttribute(FeatureNameAttributeKey, featureName); } } diff --git a/yt/yt/core/rpc/http/server.cpp b/yt/yt/core/rpc/http/server.cpp index 81a37e6edf..e762424218 100644 --- a/yt/yt/core/rpc/http/server.cpp +++ b/yt/yt/core/rpc/http/server.cpp @@ -254,7 +254,7 @@ private: return TError("Invalid \"Content-Type\" header value") << TErrorAttribute("value", *contentTypeString); } - rpcHeader->set_request_format(static_cast<i32>(*decodedType)); + rpcHeader->set_request_format(ToProto(*decodedType)); } auto requestFormatOptionsYson = httpHeaders->Find(RequestFormatOptionsHeaderName); @@ -269,7 +269,7 @@ private: return TError("Invalid \"Accept\" header value") << TErrorAttribute("value", *acceptString); } - rpcHeader->set_response_format(static_cast<i32>(*decodedType)); + rpcHeader->set_response_format(ToProto(*decodedType)); } auto responseFormatOptionsYson = httpHeaders->Find(ResponseFormatOptionsHeaderName); @@ -339,9 +339,9 @@ private: } if (auto requestTimeout = httpHeaders->Find(RequestTimeoutHeaderName)) { - rpcHeader->set_timeout(ToProto<i64>(TDuration::Seconds(FromString<i64>(*requestTimeout)))); + rpcHeader->set_timeout(ToProto(TDuration::Seconds(FromString<i64>(*requestTimeout)))); } else if (auto xRequestTimeout = httpHeaders->Find(XRequestTimeoutHeaderName)) { - rpcHeader->set_timeout(ToProto<i64>(TDuration::MilliSeconds(FromString<i64>(*xRequestTimeout)))); + rpcHeader->set_timeout(ToProto(TDuration::MilliSeconds(FromString<i64>(*xRequestTimeout)))); } auto protocolMajor = httpHeaders->Find(ProtocolVersionMajor); @@ -368,8 +368,8 @@ private: *rpcHeader->MutableExtension(NRpc::NProto::TCustomMetadataExt::custom_metadata_ext) = std::move(customMetadataExt); } - rpcHeader->set_request_codec(ToProto<int>(NCompression::ECodec::None)); - rpcHeader->set_response_codec(ToProto<int>(NCompression::ECodec::None)); + rpcHeader->set_request_codec(ToProto(NCompression::ECodec::None)); + rpcHeader->set_response_codec(ToProto(NCompression::ECodec::None)); return {}; } diff --git a/yt/yt/core/rpc/local_channel.cpp b/yt/yt/core/rpc/local_channel.cpp index 9a45500054..e242b1b06f 100644 --- a/yt/yt/core/rpc/local_channel.cpp +++ b/yt/yt/core/rpc/local_channel.cpp @@ -76,9 +76,9 @@ public: } auto& header = request->Header(); - header.set_start_time(ToProto<i64>(TInstant::Now())); + header.set_start_time(ToProto(TInstant::Now())); if (options.Timeout) { - header.set_timeout(ToProto<i64>(*options.Timeout)); + header.set_timeout(ToProto(*options.Timeout)); } else { header.clear_timeout(); } diff --git a/yt/yt/core/rpc/message.cpp b/yt/yt/core/rpc/message.cpp index 378e4bdf20..a1790399d2 100644 --- a/yt/yt/core/rpc/message.cpp +++ b/yt/yt/core/rpc/message.cpp @@ -144,7 +144,7 @@ TSharedRefArray CreateResponseMessage( const std::vector<TSharedRef>& attachments) { NProto::TResponseHeader header; - header.set_codec(ToProto<int>(NCompression::ECodec::None)); + header.set_codec(ToProto(NCompression::ECodec::None)); TSharedRefArrayBuilder builder( 2 + attachments.size(), GetAllocationSpaceForProtoWithHeader(header) + body.ByteSizeLong(), @@ -237,10 +237,10 @@ void ToProto( { protoParameters->set_window_size(parameters.WindowSize); if (parameters.ReadTimeout) { - protoParameters->set_read_timeout(ToProto<i64>(*parameters.ReadTimeout)); + protoParameters->set_read_timeout(ToProto(*parameters.ReadTimeout)); } if (parameters.WriteTimeout) { - protoParameters->set_write_timeout(ToProto<i64>(*parameters.WriteTimeout)); + protoParameters->set_write_timeout(ToProto(*parameters.WriteTimeout)); } } diff --git a/yt/yt/core/rpc/server_detail.cpp b/yt/yt/core/rpc/server_detail.cpp index 252f64d12c..3deb728c2d 100644 --- a/yt/yt/core/rpc/server_detail.cpp +++ b/yt/yt/core/rpc/server_detail.cpp @@ -23,6 +23,7 @@ using namespace NRpc::NProto; using namespace NTracing; using NYT::FromProto; +using NYT::ToProto; //////////////////////////////////////////////////////////////////////////////// @@ -206,7 +207,7 @@ TSharedRefArray TServiceContextBase::BuildResponseMessage() // COMPAT(danilalexeev): legacy RPC codecs. if (IsResponseBodySerializedWithCompression()) { if (RequestHeader_->has_response_codec()) { - header.set_codec(static_cast<int>(ResponseCodec_)); + header.set_codec(ToProto(ResponseCodec_)); } else { ResponseBody_ = PushEnvelope(ResponseBody_, ResponseCodec_); ResponseAttachments_ = DecompressAttachments(ResponseAttachments_, ResponseCodec_); diff --git a/yt/yt/core/rpc/service_detail.cpp b/yt/yt/core/rpc/service_detail.cpp index 9fcf0d7d8f..970552940b 100644 --- a/yt/yt/core/rpc/service_detail.cpp +++ b/yt/yt/core/rpc/service_detail.cpp @@ -50,6 +50,8 @@ static const auto InfiniteRequestThrottlerConfig = New<TThroughputThrottlerConfi static const auto DefaultLoggingSuppressionFailedRequestThrottlerConfig = TThroughputThrottlerConfig::Create(1'000); constexpr int MaxUserAgentLength = 200; +constexpr TStringBuf UnknownUserAgent = "unknown"; + constexpr auto ServiceLivenessCheckPeriod = TDuration::MilliSeconds(100); //////////////////////////////////////////////////////////////////////////////// @@ -264,15 +266,15 @@ auto TServiceBase::TMethodDescriptor::SetHandleMethodError(bool value) const -> //////////////////////////////////////////////////////////////////////////////// -TServiceBase::TErrorCodeCounter::TErrorCodeCounter(NProfiling::TProfiler profiler) +TServiceBase::TErrorCodeCounters::TErrorCodeCounters(NProfiling::TProfiler profiler) : Profiler_(std::move(profiler)) { } -void TServiceBase::TErrorCodeCounter::Increment(TErrorCode code) +NProfiling::TCounter* TServiceBase::TErrorCodeCounters::GetCounter(TErrorCode code) { - CodeToCounter_.FindOrInsert(code, [&] { + return CodeToCounter_.FindOrInsert(code, [&] { return Profiler_.WithTag("code", ToString(code)).Counter("/code_count"); - }).first->Increment(); + }).first; } //////////////////////////////////////////////////////////////////////////////// @@ -289,7 +291,7 @@ TServiceBase::TMethodPerformanceCounters::TMethodPerformanceCounters( , RequestMessageAttachmentSizeCounter(profiler.Counter("/request_message_attachment_bytes")) , ResponseMessageBodySizeCounter(profiler.Counter("/response_message_body_bytes")) , ResponseMessageAttachmentSizeCounter(profiler.Counter("/response_message_attachment_bytes")) - , ErrorCodeCounter(profiler) + , ErrorCodeCounters(profiler) { if (timeHistogramConfig && timeHistogramConfig->CustomBounds) { const auto& customBounds = *timeHistogramConfig->CustomBounds; @@ -338,6 +340,19 @@ TRequestQueue* TServiceBase::TRuntimeMethodInfo::GetDefaultRequestQueue() //////////////////////////////////////////////////////////////////////////////// +TServiceBase::TPerformanceCounters::TPerformanceCounters(const NProfiling::TProfiler& profiler) + : Profiler_(profiler.WithHot().WithSparse()) +{ } + +NProfiling::TCounter* TServiceBase::TPerformanceCounters::GetRequestsPerUserAgentCounter(TStringBuf userAgent) +{ + return RequestsPerUserAgent_.FindOrInsert(userAgent, [&] { + return Profiler_.WithRequiredTag("user_agent", TString(userAgent)).Counter("/user_agent"); + }).first; +} + +//////////////////////////////////////////////////////////////////////////////// + class TServiceBase::TServiceContext : public TServiceContextBase { @@ -360,11 +375,9 @@ public: , TraceContext_(std::move(acceptedRequest.TraceContext)) , RequestQueue_(acceptedRequest.RequestQueue) , ThrottledError_(std::move(acceptedRequest.ThrottledError)) - , MethodPerformanceCounters_(Service_->GetMethodPerformanceCounters( - RuntimeInfo_, - {GetAuthenticationIdentity().UserTag, RequestQueue_})) + , MethodPerformanceCounters_(acceptedRequest.MethodPerformanceCounters) , PerformanceCounters_(Service_->GetPerformanceCounters()) - , ArriveInstant_(NProfiling::GetInstant()) + , ArriveInstant_(acceptedRequest.ArriveInstant) { YT_ASSERT(RequestMessage_); YT_ASSERT(ReplyBus_); @@ -743,24 +756,6 @@ private: void Initialize() { - constexpr TStringBuf UnknownUserAgent = "unknown"; - auto userAgent = RequestHeader_->has_user_agent() - ? TStringBuf(RequestHeader_->user_agent()) - : UnknownUserAgent; - PerformanceCounters_->IncrementRequestsPerUserAgent(userAgent.SubString(0, MaxUserAgentLength)); - - MethodPerformanceCounters_->RequestCounter.Increment(); - MethodPerformanceCounters_->RequestMessageBodySizeCounter.Increment( - GetMessageBodySize(RequestMessage_)); - MethodPerformanceCounters_->RequestMessageAttachmentSizeCounter.Increment( - GetTotalMessageAttachmentSize(RequestMessage_)); - - if (RequestHeader_->has_start_time()) { - auto retryStart = FromProto<TInstant>(RequestHeader_->start_time()); - auto now = NProfiling::GetInstant(); - MethodPerformanceCounters_->RemoteWaitTimeCounter.Record(now - retryStart); - } - // COMPAT(danilalexeev): legacy RPC codecs RequestCodec_ = RequestHeader_->has_request_codec() ? CheckedEnumCast<NCompression::ECodec>(RequestHeader_->request_codec()) @@ -1024,7 +1019,8 @@ private: MethodPerformanceCounters_->TotalTimeCounter.Record(*TotalTime_); if (!Error_.IsOK()) { if (Service_->EnableErrorCodeCounter_.load()) { - MethodPerformanceCounters_->ErrorCodeCounter.Increment(Error_.GetNonTrivialCode()); + const auto* counter = MethodPerformanceCounters_->ErrorCodeCounters.GetCounter(Error_.GetNonTrivialCode()); + counter->Increment(); } else { MethodPerformanceCounters_->FailedRequestCounter.Increment(); } @@ -1240,7 +1236,7 @@ private: ToProto(header.mutable_realm_id(), GetRealmId()); } header.set_sequence_number(payload->SequenceNumber); - header.set_codec(static_cast<int>(payload->Codec)); + header.set_codec(ToProto(payload->Codec)); auto message = CreateStreamingPayloadMessage(header, payload->Attachments); @@ -1307,7 +1303,7 @@ private: //////////////////////////////////////////////////////////////////////////////// -TRequestQueue::TRequestQueue(const std::string& name, NProfiling::TProfiler profiler) +TRequestQueue::TRequestQueue(const std::string& name, const NProfiling::TProfiler& profiler) : Name_(name) , BytesThrottler_{CreateReconfigurableThroughputThrottler(InfiniteRequestThrottlerConfig, NLogging::TLogger(), @@ -1610,23 +1606,20 @@ void TRequestQueue::SubscribeToThrottlers() //////////////////////////////////////////////////////////////////////////////// -struct TServiceBase::TRuntimeMethodInfo::TPerformanceCountersKeyEquals +bool TServiceBase::TRuntimeMethodInfo::TPerformanceCountersKeyEquals::operator()( + const TNonowningPerformanceCountersKey& lhs, + const TNonowningPerformanceCountersKey& rhs) const { - bool operator()( - const TNonowningPerformanceCountersKey& lhs, - const TNonowningPerformanceCountersKey& rhs) const - { - return lhs == rhs; - } + return lhs == rhs; +} - bool operator()( - const TOwningPerformanceCountersKey& lhs, - const TNonowningPerformanceCountersKey& rhs) const - { - const auto& [lhsUserTag, lhsRequestQueue] = lhs; - return TNonowningPerformanceCountersKey{lhsUserTag, lhsRequestQueue} == rhs; - } -}; +bool TServiceBase::TRuntimeMethodInfo::TPerformanceCountersKeyEquals::operator()( + const TOwningPerformanceCountersKey& lhs, + const TNonowningPerformanceCountersKey& rhs) const +{ + const auto& [lhsUserTag, lhsRequestQueue] = lhs; + return TNonowningPerformanceCountersKey{lhsUserTag, lhsRequestQueue} == rhs; +} //////////////////////////////////////////////////////////////////////////////// @@ -1675,8 +1668,15 @@ void TServiceBase::HandleRequest( { SetActive(); - auto method = FromProto<TString>(header->method()); + auto arriveInstant = NProfiling::GetInstant(); + + const auto& method = header->method(); auto requestId = FromProto<TRequestId>(header->request_id()); + auto userAgent = header->has_user_agent() + ? TStringBuf(header->user_agent()).SubString(0, MaxUserAgentLength) + : UnknownUserAgent; + const auto& user = header->has_user() ? header->user() : RootUserName; + const auto& userTag = header->has_user_tag() ? header->user_tag() : user; auto replyError = [&] (TError error) { ReplyError(std::move(error), *header, replyBus); @@ -1689,11 +1689,6 @@ void TServiceBase::HandleRequest( return; } - if (auto error = DoCheckRequestCompatibility(*header); !error.IsOK()) { - replyError(std::move(error)); - return; - } - auto* runtimeInfo = FindMethodInfo(method); if (!runtimeInfo) { replyError(TError( @@ -1702,8 +1697,29 @@ void TServiceBase::HandleRequest( return; } + auto* requestQueue = GetRequestQueue(runtimeInfo, *header); + + const auto* requestsPerUserAgentCounter = PerformanceCounters_->GetRequestsPerUserAgentCounter(userAgent); + requestsPerUserAgentCounter->Increment(); + + auto* methodPerformanceCounters = GetMethodPerformanceCounters(runtimeInfo, {userTag, requestQueue}); + methodPerformanceCounters->RequestCounter.Increment(); + methodPerformanceCounters->RequestMessageBodySizeCounter.Increment(GetMessageBodySize(message)); + methodPerformanceCounters->RequestMessageAttachmentSizeCounter.Increment(GetTotalMessageAttachmentSize(message)); + + if (header->has_start_time()) { + auto retryStart = FromProto<TInstant>(header->start_time()); + methodPerformanceCounters->RemoteWaitTimeCounter.Record(arriveInstant - retryStart); + } + + if (auto error = DoCheckRequestCompatibility(*header); !error.IsOK()) { + replyError(std::move(error)); + return; + } + auto memoryGuard = TMemoryUsageTrackerGuard::Acquire(MemoryUsageTracker_, TypicalRequestSize); message = TrackMemory(MemoryUsageTracker_, std::move(message)); + if (MemoryUsageTracker_ && MemoryUsageTracker_->IsExceeded()) { return replyError(TError( NRpc::EErrorCode::MemoryPressure, @@ -1714,14 +1730,12 @@ void TServiceBase::HandleRequest( auto traceContext = tracingMode == ERequestTracingMode::Disable ? NTracing::TTraceContextPtr() : GetOrCreateHandlerTraceContext(*header, tracingMode == ERequestTracingMode::Force); + if (traceContext && traceContext->IsRecorded()) { traceContext->AddTag(EndpointAnnotation, replyBus->GetEndpointDescription()); } - auto* requestQueue = GetRequestQueue(runtimeInfo, *header); - RegisterRequestQueue(runtimeInfo, requestQueue); - - auto maybeThrottled = GetThrottledError(*header); + auto throttledError = GetThrottledError(*header); if (requestQueue->IsQueueSizeLimitExceeded()) { runtimeInfo->RequestQueueSizeLimitErrorCounter.Increment(); @@ -1730,7 +1744,7 @@ void TServiceBase::HandleRequest( "Request queue size limit exceeded") << TErrorAttribute("limit", runtimeInfo->QueueSizeLimit.load()) << TErrorAttribute("queue", requestQueue->GetName()) - << maybeThrottled); + << throttledError); return; } @@ -1741,7 +1755,7 @@ void TServiceBase::HandleRequest( "Request queue bytes size limit exceeded") << TErrorAttribute("limit", runtimeInfo->QueueByteSizeLimit.load()) << TErrorAttribute("queue", requestQueue->GetName()) - << maybeThrottled); + << throttledError); return; } @@ -1749,6 +1763,7 @@ void TServiceBase::HandleRequest( // NOTE: Do not use replyError() after this line. TAcceptedRequest acceptedRequest{ + .ArriveInstant = arriveInstant, .RequestId = requestId, .ReplyBus = std::move(replyBus), .RuntimeInfo = std::move(runtimeInfo), @@ -1756,7 +1771,8 @@ void TServiceBase::HandleRequest( .Header = std::move(header), .Message = std::move(message), .RequestQueue = requestQueue, - .ThrottledError = maybeThrottled, + .MethodPerformanceCounters = methodPerformanceCounters, + .ThrottledError = throttledError, .MemoryGuard = std::move(memoryGuard), .MemoryUsageTracker = MemoryUsageTracker_, }; @@ -1860,7 +1876,7 @@ void TServiceBase::OnRequestAuthenticated( return; } } - requestHeader.set_user(ToProto<TProtobufString>(authResult.User)); + requestHeader.set_user(ToProto(authResult.User)); auto* credentialsExt = requestHeader.MutableExtension( NRpc::NProto::TCredentialsExt::credentials_ext); @@ -1909,55 +1925,49 @@ TRequestQueue* TServiceBase::GetRequestQueue( const NRpc::NProto::TRequestHeader& requestHeader) { TRequestQueue* requestQueue = nullptr; - if (auto& provider = runtimeInfo->Descriptor.RequestQueueProvider) { + if (const auto& provider = runtimeInfo->Descriptor.RequestQueueProvider) { requestQueue = provider->GetQueue(requestHeader); } if (!requestQueue) { requestQueue = runtimeInfo->DefaultRequestQueue.Get(); } - return requestQueue; -} -void TServiceBase::RegisterRequestQueue( - TRuntimeMethodInfo* runtimeInfo, - TRequestQueue* requestQueue) -{ - if (!requestQueue->Register(this, runtimeInfo)) { - return; - } + if (requestQueue->Register(this, runtimeInfo)) { + const auto& method = runtimeInfo->Descriptor.Method; + YT_LOG_DEBUG("Request queue registered (Method: %v, Queue: %v)", + method, + requestQueue->GetName()); - const auto& method = runtimeInfo->Descriptor.Method; - YT_LOG_DEBUG("Request queue registered (Method: %v, Queue: %v)", - method, - requestQueue->GetName()); + auto profiler = runtimeInfo->Profiler.WithSparse(); + if (runtimeInfo->Descriptor.RequestQueueProvider) { + profiler = profiler.WithTag("queue", requestQueue->GetName()); + } + profiler.AddFuncGauge("/request_queue_size", MakeStrong(this), [=] { + return requestQueue->GetQueueSize(); + }); + profiler.AddFuncGauge("/request_queue_byte_size", MakeStrong(this), [=] { + return requestQueue->GetQueueByteSize(); + }); + profiler.AddFuncGauge("/concurrency", MakeStrong(this), [=] { + return requestQueue->GetConcurrency(); + }); + profiler.AddFuncGauge("/concurrency_byte", MakeStrong(this), [=] { + return requestQueue->GetConcurrencyByte(); + }); - auto profiler = runtimeInfo->Profiler.WithSparse(); - if (runtimeInfo->Descriptor.RequestQueueProvider) { - profiler = profiler.WithTag("queue", requestQueue->GetName()); - } - profiler.AddFuncGauge("/request_queue_size", MakeStrong(this), [=] { - return requestQueue->GetQueueSize(); - }); - profiler.AddFuncGauge("/request_queue_byte_size", MakeStrong(this), [=] { - return requestQueue->GetQueueByteSize(); - }); - profiler.AddFuncGauge("/concurrency", MakeStrong(this), [=] { - return requestQueue->GetConcurrency(); - }); - profiler.AddFuncGauge("/concurrency_byte", MakeStrong(this), [=] { - return requestQueue->GetConcurrencyByte(); - }); + TMethodConfigPtr methodConfig; + if (auto config = Config_.Acquire()) { + methodConfig = GetOrDefault(config->Methods, method); + } + ConfigureRequestQueue(runtimeInfo, requestQueue, methodConfig); - TMethodConfigPtr methodConfig; - if (auto config = Config_.Acquire()) { - methodConfig = GetOrDefault(config->Methods, method); + { + auto guard = Guard(runtimeInfo->RequestQueuesLock); + runtimeInfo->RequestQueues.push_back(requestQueue); + } } - ConfigureRequestQueue(runtimeInfo, requestQueue, methodConfig); - { - auto guard = Guard(runtimeInfo->RequestQueuesLock); - runtimeInfo->RequestQueues.push_back(requestQueue); - } + return requestQueue; } void TServiceBase::ConfigureRequestQueue( @@ -2684,13 +2694,13 @@ TFuture<void> TServiceBase::Stop() return StopResult_.ToFuture(); } -TServiceBase::TRuntimeMethodInfo* TServiceBase::FindMethodInfo(const TString& method) +TServiceBase::TRuntimeMethodInfo* TServiceBase::FindMethodInfo(const std::string& method) { auto it = MethodMap_.find(method); return it == MethodMap_.end() ? nullptr : it->second.Get(); } -TServiceBase::TRuntimeMethodInfo* TServiceBase::GetMethodInfoOrThrow(const TString& method) +TServiceBase::TRuntimeMethodInfo* TServiceBase::GetMethodInfoOrThrow(const std::string& method) { auto* runtimeInfo = FindMethodInfo(method); if (!runtimeInfo) { diff --git a/yt/yt/core/rpc/service_detail.h b/yt/yt/core/rpc/service_detail.h index ab32bce755..4641c2f98a 100644 --- a/yt/yt/core/rpc/service_detail.h +++ b/yt/yt/core/rpc/service_detail.h @@ -657,11 +657,12 @@ protected: TMethodDescriptor SetHandleMethodError(bool value) const; }; - struct TErrorCodeCounter + class TErrorCodeCounters { - explicit TErrorCodeCounter(NProfiling::TProfiler profiler); + public: + explicit TErrorCodeCounters(NProfiling::TProfiler profiler); - void Increment(TErrorCode code); + NProfiling::TCounter* GetCounter(TErrorCode code); private: const NProfiling::TProfiler Profiler_; @@ -717,7 +718,7 @@ protected: NProfiling::TCounter ResponseMessageAttachmentSizeCounter; //! Counts the number of errors, per error code. - TErrorCodeCounter ErrorCodeCounter; + TErrorCodeCounters ErrorCodeCounters; }; using TMethodPerformanceCountersPtr = TIntrusivePtr<TMethodPerformanceCounters>; @@ -763,13 +764,24 @@ protected: using TNonowningPerformanceCountersKey = std::tuple<TStringBuf, TRequestQueue*>; using TOwningPerformanceCountersKey = std::tuple<TString, TRequestQueue*>; using TPerformanceCountersKeyHash = THash<TNonowningPerformanceCountersKey>; - struct TPerformanceCountersKeyEquals; + + struct TPerformanceCountersKeyEquals + { + bool operator()( + const TNonowningPerformanceCountersKey& lhs, + const TNonowningPerformanceCountersKey& rhs) const; + bool operator()( + const TOwningPerformanceCountersKey& lhs, + const TNonowningPerformanceCountersKey& rhs) const; + }; + using TPerformanceCountersMap = NConcurrency::TSyncMap< TOwningPerformanceCountersKey, TMethodPerformanceCountersPtr, TPerformanceCountersKeyHash, TPerformanceCountersKeyEquals >; + TPerformanceCountersMap PerformanceCountersMap; TMethodPerformanceCountersPtr BasePerformanceCounters; TMethodPerformanceCountersPtr RootPerformanceCounters; @@ -789,16 +801,9 @@ protected: : public TRefCounted { public: - explicit TPerformanceCounters(const NProfiling::TProfiler& profiler) - : Profiler_(profiler.WithHot().WithSparse()) - { } + explicit TPerformanceCounters(const NProfiling::TProfiler& profiler); - void IncrementRequestsPerUserAgent(TStringBuf userAgent) - { - RequestsPerUserAgent_.FindOrInsert(userAgent, [&] { - return Profiler_.WithRequiredTag("user_agent", TString(userAgent)).Counter("/user_agent"); - }).first->Increment(); - } + NProfiling::TCounter* GetRequestsPerUserAgentCounter(TStringBuf userAgent); private: const NProfiling::TProfiler Profiler_; @@ -846,10 +851,10 @@ protected: //! Returns a (non-owning!) pointer to TRuntimeMethodInfo for a given method's name //! or |nullptr| if no such method is registered. - TRuntimeMethodInfo* FindMethodInfo(const TString& method); + TRuntimeMethodInfo* FindMethodInfo(const std::string& method); //! Similar to #FindMethodInfo but throws if no method is found. - TRuntimeMethodInfo* GetMethodInfoOrThrow(const TString& method); + TRuntimeMethodInfo* GetMethodInfoOrThrow(const std::string& method); //! Returns the default invoker passed during construction. const IInvokerPtr& GetDefaultInvoker() const; @@ -991,6 +996,7 @@ private: struct TAcceptedRequest { + TInstant ArriveInstant; TRequestId RequestId; NYT::NBus::IBusPtr ReplyBus; TRuntimeMethodInfo* RuntimeInfo; @@ -998,6 +1004,7 @@ private: std::unique_ptr<NRpc::NProto::TRequestHeader> Header; TSharedRefArray Message; TRequestQueue* RequestQueue; + TMethodPerformanceCounters* MethodPerformanceCounters; std::optional<TError> ThrottledError; TMemoryUsageTrackerGuard MemoryGuard; IMemoryUsageTrackerPtr MemoryUsageTracker; @@ -1022,9 +1029,6 @@ private: TRequestQueue* GetRequestQueue( TRuntimeMethodInfo* runtimeInfo, const NRpc::NProto::TRequestHeader& requestHeader); - void RegisterRequestQueue( - TRuntimeMethodInfo* runtimeInfo, - TRequestQueue* requestQueue); void ConfigureRequestQueue( TRuntimeMethodInfo* runtimeInfo, TRequestQueue* requestQueue, @@ -1071,6 +1075,7 @@ private: static TString GetDiscoverRequestPayload(const TCtxDiscoverPtr& context); void OnServiceLivenessCheck(); + }; DEFINE_REFCOUNTED_TYPE(TServiceBase) @@ -1081,7 +1086,9 @@ class TRequestQueue : public TRefCounted { public: - TRequestQueue(const std::string& name, NProfiling::TProfiler profiler); + TRequestQueue( + const std::string& name, + const NProfiling::TProfiler& profiler); bool Register(TServiceBase* service, TServiceBase::TRuntimeMethodInfo* runtimeInfo); void Configure(const TMethodConfigPtr& config); diff --git a/yt/yt/core/rpc/unittests/rpc_ut.cpp b/yt/yt/core/rpc/unittests/rpc_ut.cpp index 48c89093c1..d83c1b7d6b 100644 --- a/yt/yt/core/rpc/unittests/rpc_ut.cpp +++ b/yt/yt/core/rpc/unittests/rpc_ut.cpp @@ -12,6 +12,8 @@ using namespace NYT::NYson; using namespace NConcurrency; using namespace NCrypto; +using NYT::ToProto; + //////////////////////////////////////////////////////////////////////////////// class TNonExistingServiceProxy @@ -581,7 +583,7 @@ TYPED_TEST(TNotGrpcTest, Compression) proxy.SetDefaultEnableLegacyRpcCodecs(false); auto req = proxy.Compression(); - req->set_request_codec(static_cast<int>(requestCodecId)); + req->set_request_codec(ToProto(requestCodecId)); req->set_message(message); for (const auto& attachmentString : attachmentStrings) { req->Attachments().push_back(TSharedRef::FromString(attachmentString)); @@ -783,7 +785,7 @@ TYPED_TEST(TRpcTest, SlowCall) EXPECT_TRUE(rspOrError.IsOK()); } -TYPED_TEST(TRpcTest, RequestQueueSizeLimit) +TYPED_TEST(TNotGrpcTest, RequestQueueSizeLimit) { MaybeInitLatch(); @@ -817,7 +819,9 @@ TYPED_TEST(TRpcTest, RequestQueueSizeLimit) } ReleaseLatchedCalls(); - EXPECT_TRUE(AllSucceeded(std::move(futures)).Get().IsOK()); + for(auto results = AllSet(std::move(futures)).Get().Value(); const auto& res : results) { + EXPECT_TRUE(res.IsOK()); + } ResetLatch(); @@ -927,7 +931,7 @@ TYPED_TEST(TNotGrpcTest, MemoryOvercommit) TTestProxy proxy(this->CreateChannel()); proxy.SetDefaultTimeout(TDuration::Seconds(60.0)); auto req = proxy.SlowCall(); - req->set_request_codec(static_cast<int>(requestCodecId)); + req->set_request_codec(ToProto(requestCodecId)); req->Attachments().push_back(TSharedRef::FromString(TString(6_KB, 'x'))); WaitFor(req->Invoke()).ThrowOnError(); { @@ -959,7 +963,7 @@ TYPED_TEST(TNotGrpcTest, RequestQueueByteSizeLimit) for (int i = 0; i < 15; ++i) { auto req = proxies[i].SlowCall(); - req->set_request_codec(static_cast<int>(requestCodecId)); + req->set_request_codec(ToProto(requestCodecId)); req->set_message(TString(2_MB, 'x')); futures.push_back(req->Invoke().AsVoid()); } @@ -969,7 +973,7 @@ TYPED_TEST(TNotGrpcTest, RequestQueueByteSizeLimit) TTestProxy proxy(this->CreateChannel()); proxy.SetDefaultTimeout(TDuration::Seconds(60.0)); auto req = proxy.SlowCall(); - req->set_request_codec(static_cast<int>(requestCodecId)); + req->set_request_codec(ToProto(requestCodecId)); req->set_message(TString(1_MB, 'x')); EXPECT_EQ(NRpc::EErrorCode::RequestQueueSizeLimitExceeded, req->Invoke().Get().GetCode()); } diff --git a/yt/yt/core/ytree/attributes-inl.h b/yt/yt/core/ytree/attributes-inl.h index dd367f5d24..d20ed98dc7 100644 --- a/yt/yt/core/ytree/attributes-inl.h +++ b/yt/yt/core/ytree/attributes-inl.h @@ -8,10 +8,14 @@ // #include "serialize.h" #include "convert.h" -namespace NYT::NYTree { +#include <library/cpp/yt/error/error_attributes.h> + +namespace NYT { //////////////////////////////////////////////////////////////////////////////// +namespace NYTree { + template <class T> T IAttributeDictionary::Get(TStringBuf key) const { @@ -86,4 +90,54 @@ void IAttributeDictionary::Set(const TString& key, const T& value) //////////////////////////////////////////////////////////////////////////////// -} // namespace NYT::NYTree +} // namespace NYTree + +//////////////////////////////////////////////////////////////////////////////// + +template <> +struct TMergeDictionariesTraits<NYTree::IAttributeDictionary> +{ + static auto MakeIterableView(const NYTree::IAttributeDictionary& dict) + { + return dict.ListPairs(); + } +}; + +//////////////////////////////////////////////////////////////////////////////// + +// TODO(arkady-e1ppa): Move this out eventually. +template <class T> +T TErrorAttributes::Get(TStringBuf key) const +{ + using NYTree::ConvertTo; + auto yson = GetYson(key); + try { + return ConvertTo<T>(yson); + } catch (const std::exception& ex) { + THROW_ERROR_EXCEPTION("Error parsing attribute %Qv", + key) + << ex; + } +} + +template <class T> +typename TOptionalTraits<T>::TOptional TErrorAttributes::Find(TStringBuf key) const +{ + using NYTree::ConvertTo; + + auto yson = FindYson(key); + if (!yson) { + return typename TOptionalTraits<T>::TOptional(); + } + try { + return ConvertTo<T>(yson); + } catch (const std::exception& ex) { + THROW_ERROR_EXCEPTION("Error parsing attribute %Qv", + key) + << ex; + } +} + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace NYT diff --git a/yt/yt/core/ytree/exception_helpers.cpp b/yt/yt/core/ytree/exception_helpers.cpp index 5260ff91e5..630a4c162a 100644 --- a/yt/yt/core/ytree/exception_helpers.cpp +++ b/yt/yt/core/ytree/exception_helpers.cpp @@ -106,7 +106,7 @@ void ThrowMethodNotSupported(TStringBuf method, const std::optional<TString>& re "%Qv method is not supported", method); if (resolveType) { - error.MutableAttributes()->Set("resolve_type", *resolveType); + error <<= TErrorAttribute("resolve_type", *resolveType); } THROW_ERROR(error); } diff --git a/yt/yt/core/ytree/unittests/serialize_ut.cpp b/yt/yt/core/ytree/unittests/serialize_ut.cpp index 63bf71b0d2..73d7acf20b 100644 --- a/yt/yt/core/ytree/unittests/serialize_ut.cpp +++ b/yt/yt/core/ytree/unittests/serialize_ut.cpp @@ -385,7 +385,7 @@ TEST(TSerializationTest, VectorOfTuple) std::vector<std::tuple<int, TString, size_t>> original{ std::tuple<int, TString, size_t>(43, "First", 343U), std::tuple<int, TString, size_t>(0, "Second", 7U), - std::tuple<int, TString, size_t>(2323, "Third", 9U) + std::tuple<int, TString, size_t>(2323, "Third", 9U), }; TestSerializationDeserialization(original); @@ -398,7 +398,7 @@ TEST(TSerializationTest, MapOnArray) {"1", {{2112U, 4343U, 5445U}}}, {"22", {{54654U, 93U, 5U}}}, {"333", {{7U, 93U, 9U}}}, - {"rel", {{233U, 9763U, 0U}}} + {"rel", {{233U, 9763U, 0U}}}, }; TestSerializationDeserialization(original); TestSerializationDeserialization(original, EYsonType::MapFragment); @@ -406,20 +406,14 @@ TEST(TSerializationTest, MapOnArray) TEST(TSerializationTest, Enum) { - for (const auto original : TEnumTraits<ETestEnum>::GetDomainValues()) { + for (auto original : TEnumTraits<ETestEnum>::GetDomainValues()) { TestSerializationDeserialization(original); } } -TEST(TSerializationTest, EnumUnknownValue) -{ - auto unknownValue = static_cast<ETestEnum>(ToUnderlying(TEnumTraits<ETestEnum>::GetMaxValue()) + 1); - TestSerializationDeserialization(unknownValue); -} - TEST(TSerializationTest, BitEnum) { - for (const auto original : TEnumTraits<ETestBitEnum>::GetDomainValues()) { + for (auto original : TEnumTraits<ETestBitEnum>::GetDomainValues()) { TestSerializationDeserialization(original); } TestSerializationDeserialization(ETestBitEnum::Green | ETestBitEnum::Red); @@ -428,7 +422,7 @@ TEST(TSerializationTest, BitEnum) TEST(TSerializationTest, SerializableArcadiaEnum) { - for (const auto original : GetEnumAllValues<ESerializableArcadiaEnum>()) { + for (auto original : GetEnumAllValues<ESerializableArcadiaEnum>()) { TestSerializationDeserialization(original); } } diff --git a/yt/yt/core/ytree/ypath_client.cpp b/yt/yt/core/ytree/ypath_client.cpp index 05086a2486..810557403a 100644 --- a/yt/yt/core/ytree/ypath_client.cpp +++ b/yt/yt/core/ytree/ypath_client.cpp @@ -264,7 +264,7 @@ TYPathMaybeRef GetOriginalRequestTargetYPath(const NRpc::NProto::TRequestHeader& void SetRequestTargetYPath(NRpc::NProto::TRequestHeader* header, TYPathBuf path) { auto* ypathExt = header->MutableExtension(NProto::TYPathHeaderExt::ypath_header_ext); - ypathExt->set_target_path(ToProto<TString>(path)); + ypathExt->set_target_path(TProtobufString(path)); } bool IsRequestMutating(const NRpc::NProto::TRequestHeader& header) diff --git a/yt/yt/core/ytree/ypath_client.h b/yt/yt/core/ytree/ypath_client.h index d4889b7fe3..57f860cf70 100644 --- a/yt/yt/core/ytree/ypath_client.h +++ b/yt/yt/core/ytree/ypath_client.h @@ -120,7 +120,7 @@ protected: { // COPMAT(danilalexeev): legacy RPC codecs if (Header_.has_request_codec()) { - YT_VERIFY(Header_.request_codec() == NYT::ToProto<int>(NCompression::ECodec::None)); + YT_VERIFY(Header_.request_codec() == NYT::ToProto(NCompression::ECodec::None)); return SerializeProtoToRefWithCompression(*this); } else { return SerializeProtoToRefWithEnvelope(*this); diff --git a/yt/yt/library/formats/protobuf_options.cpp b/yt/yt/library/formats/protobuf_options.cpp index 96d6eb9ab4..8828c46371 100644 --- a/yt/yt/library/formats/protobuf_options.cpp +++ b/yt/yt/library/formats/protobuf_options.cpp @@ -1,6 +1,6 @@ #include "protobuf_options.h" -#include <util/generic/variant.h> +#include <variant> namespace NYT::NFormats { diff --git a/yt/yt/library/profiling/sensor.cpp b/yt/yt/library/profiling/sensor.cpp index f04791b3cf..f795a01c91 100644 --- a/yt/yt/library/profiling/sensor.cpp +++ b/yt/yt/library/profiling/sensor.cpp @@ -259,40 +259,77 @@ bool TSensorOptions::IsCompatibleWith(const TSensorOptions& other) const //////////////////////////////////////////////////////////////////////////////// -TProfiler::TProfiler( +namespace NDetail { + +template <bool UseWeakPtr> +TRegistryHolderBase<UseWeakPtr>::TRegistryHolderBase(const IRegistryImplPtr& impl) + : Impl_(impl) +{ } + +template <bool UseWeakPtr> +const IRegistryImplPtr& TRegistryHolderBase<UseWeakPtr>::GetRegistry() const +{ + return Impl_; +} + +//////////////////////////////////////////////////////////////////////////////// + +TRegistryHolderBase<true>::TRegistryHolderBase(const IRegistryImplPtr& impl) + : Impl_(impl) +{ } + +IRegistryImplPtr TRegistryHolderBase<true>::GetRegistry() const +{ + return Impl_.Lock(); +} + +// NB(arkady-e1ppa): Explicit template instantiation somehow does not require +// base classes to be instantiated therefore we must do that by hand separately. +// template class TRegistryHolderBase<true>; +// ^However, full specialization is +// treated differently and is pointless and not required == banned by clang :). +template class TRegistryHolderBase<false>; + +//////////////////////////////////////////////////////////////////////////////// + +template <bool UseWeakPtr> +TProfiler<UseWeakPtr>::TProfiler( const IRegistryImplPtr& impl, const std::string& prefix, const std::string& _namespace) - : Enabled_(true) + : TBase(impl) + , Enabled_(true) , Prefix_(prefix) , Namespace_(_namespace) - , Impl_(impl) { } -TProfiler::TProfiler( +template <bool UseWeakPtr> +TProfiler<UseWeakPtr>::TProfiler( const std::string& prefix, const std::string& _namespace, const TTagSet& tags, const IRegistryImplPtr& impl, TSensorOptions options) - : Enabled_(true) + : TBase(impl ? impl : GetGlobalRegistry()) + , Enabled_(true) , Prefix_(prefix) , Namespace_(_namespace) , Tags_(tags) , Options_(options) - , Impl_(impl ? impl : GetGlobalRegistry()) { } -TProfiler TProfiler::WithPrefix(const std::string& prefix) const +template <bool UseWeakPtr> +TProfiler<UseWeakPtr> TProfiler<UseWeakPtr>::WithPrefix(const std::string& prefix) const { if (!Enabled_) { return {}; } - return TProfiler(Prefix_ + prefix, Namespace_, Tags_, Impl_, Options_); + return TProfiler<UseWeakPtr>(Prefix_ + prefix, Namespace_, Tags_, GetRegistry(), Options_); } -TProfiler TProfiler::WithTag(const std::string& name, const std::string& value, int parent) const +template <bool UseWeakPtr> +TProfiler<UseWeakPtr> TProfiler<UseWeakPtr>::WithTag(const std::string& name, const std::string& value, int parent) const { if (!Enabled_) { return {}; @@ -300,19 +337,19 @@ TProfiler TProfiler::WithTag(const std::string& name, const std::string& value, auto allTags = Tags_; allTags.AddTag(std::pair(name, value), parent); - return TProfiler(Prefix_, Namespace_, allTags, Impl_, Options_); + return TProfiler<UseWeakPtr>(Prefix_, Namespace_, allTags, GetRegistry(), Options_); } -void TProfiler::RenameDynamicTag(const TDynamicTagPtr& tag, const std::string& name, const std::string& value) const +template <bool UseWeakPtr> +void TProfiler<UseWeakPtr>::RenameDynamicTag(const TDynamicTagPtr& tag, const std::string& name, const std::string& value) const { - if (!Impl_) { - return; + if (const auto& impl = GetRegistry()) { + impl->RenameDynamicTag(tag, name, value); } - - Impl_->RenameDynamicTag(tag, name, value); } -TProfiler TProfiler::WithRequiredTag(const std::string& name, const std::string& value, int parent) const +template <bool UseWeakPtr> +TProfiler<UseWeakPtr> TProfiler<UseWeakPtr>::WithRequiredTag(const std::string& name, const std::string& value, int parent) const { if (!Enabled_) { return {}; @@ -320,10 +357,11 @@ TProfiler TProfiler::WithRequiredTag(const std::string& name, const std::string& auto allTags = Tags_; allTags.AddRequiredTag(std::pair(name, value), parent); - return TProfiler(Prefix_, Namespace_, allTags, Impl_, Options_); + return TProfiler<UseWeakPtr>(Prefix_, Namespace_, allTags, GetRegistry(), Options_); } -TProfiler TProfiler::WithExcludedTag(const std::string& name, const std::string& value, int parent) const +template <bool UseWeakPtr> +TProfiler<UseWeakPtr> TProfiler<UseWeakPtr>::WithExcludedTag(const std::string& name, const std::string& value, int parent) const { if (!Enabled_) { return {}; @@ -331,10 +369,11 @@ TProfiler TProfiler::WithExcludedTag(const std::string& name, const std::string& auto allTags = Tags_; allTags.AddExcludedTag(std::pair(name, value), parent); - return TProfiler(Prefix_, Namespace_, allTags, Impl_, Options_); + return TProfiler<UseWeakPtr>(Prefix_, Namespace_, allTags, GetRegistry(), Options_); } -TProfiler TProfiler::WithAlternativeTag(const std::string& name, const std::string& value, int alternativeTo, int parent) const +template <bool UseWeakPtr> +TProfiler<UseWeakPtr> TProfiler<UseWeakPtr>::WithAlternativeTag(const std::string& name, const std::string& value, int alternativeTo, int parent) const { if (!Enabled_) { return {}; @@ -343,10 +382,11 @@ TProfiler TProfiler::WithAlternativeTag(const std::string& name, const std::stri auto allTags = Tags_; allTags.AddAlternativeTag(std::pair(name, value), alternativeTo, parent); - return TProfiler(Prefix_, Namespace_, allTags, Impl_, Options_); + return TProfiler<UseWeakPtr>(Prefix_, Namespace_, allTags, GetRegistry(), Options_); } -TProfiler TProfiler::WithExtensionTag(const std::string& name, const std::string& value, int extensionOf) const +template <bool UseWeakPtr> +TProfiler<UseWeakPtr> TProfiler<UseWeakPtr>::WithExtensionTag(const std::string& name, const std::string& value, int extensionOf) const { if (!Enabled_) { return {}; @@ -355,10 +395,11 @@ TProfiler TProfiler::WithExtensionTag(const std::string& name, const std::string auto allTags = Tags_; allTags.AddExtensionTag(std::pair(name, value), extensionOf); - return TProfiler(Prefix_, Namespace_, allTags, Impl_, Options_); + return TProfiler<UseWeakPtr>(Prefix_, Namespace_, allTags, GetRegistry(), Options_); } -TProfiler TProfiler::WithTags(const TTagSet& tags) const +template <bool UseWeakPtr> +TProfiler<UseWeakPtr> TProfiler<UseWeakPtr>::WithTags(const TTagSet& tags) const { if (!Enabled_) { return {}; @@ -366,10 +407,11 @@ TProfiler TProfiler::WithTags(const TTagSet& tags) const auto allTags = Tags_; allTags.Append(tags); - return TProfiler(Prefix_, Namespace_, allTags, Impl_, Options_); + return TProfiler<UseWeakPtr>(Prefix_, Namespace_, allTags, GetRegistry(), Options_); } -TProfiler TProfiler::WithSparse() const +template <bool UseWeakPtr> +TProfiler<UseWeakPtr> TProfiler<UseWeakPtr>::WithSparse() const { if (!Enabled_) { return {}; @@ -377,10 +419,11 @@ TProfiler TProfiler::WithSparse() const auto opts = Options_; opts.Sparse = true; - return TProfiler(Prefix_, Namespace_, Tags_, Impl_, opts); + return TProfiler<UseWeakPtr>(Prefix_, Namespace_, Tags_, GetRegistry(), opts); } -TProfiler TProfiler::WithDense() const +template <bool UseWeakPtr> +TProfiler<UseWeakPtr> TProfiler<UseWeakPtr>::WithDense() const { if (!Enabled_) { return {}; @@ -388,10 +431,11 @@ TProfiler TProfiler::WithDense() const auto opts = Options_; opts.Sparse = false; - return TProfiler(Prefix_, Namespace_, Tags_, Impl_, opts); + return TProfiler<UseWeakPtr>(Prefix_, Namespace_, Tags_, GetRegistry(), opts); } -TProfiler TProfiler::WithGlobal() const +template <bool UseWeakPtr> +TProfiler<UseWeakPtr> TProfiler<UseWeakPtr>::WithGlobal() const { if (!Enabled_) { return {}; @@ -399,10 +443,11 @@ TProfiler TProfiler::WithGlobal() const auto opts = Options_; opts.Global = true; - return TProfiler(Prefix_, Namespace_, Tags_, Impl_, opts); + return TProfiler<UseWeakPtr>(Prefix_, Namespace_, Tags_, GetRegistry(), opts); } -TProfiler TProfiler::WithDefaultDisabled() const +template <bool UseWeakPtr> +TProfiler<UseWeakPtr> TProfiler<UseWeakPtr>::WithDefaultDisabled() const { if (!Enabled_) { return {}; @@ -410,10 +455,11 @@ TProfiler TProfiler::WithDefaultDisabled() const auto opts = Options_; opts.DisableDefault = true; - return TProfiler(Prefix_, Namespace_, Tags_, Impl_, opts); + return TProfiler<UseWeakPtr>(Prefix_, Namespace_, Tags_, GetRegistry(), opts); } -TProfiler TProfiler::WithProjectionsDisabled() const +template <bool UseWeakPtr> +TProfiler<UseWeakPtr> TProfiler<UseWeakPtr>::WithProjectionsDisabled() const { if (!Enabled_) { return {}; @@ -425,10 +471,11 @@ TProfiler TProfiler::WithProjectionsDisabled() const auto opts = Options_; opts.DisableProjections = true; - return TProfiler(Prefix_, Namespace_, allTags, Impl_, opts); + return TProfiler<UseWeakPtr>(Prefix_, Namespace_, allTags, GetRegistry(), opts); } -TProfiler TProfiler::WithRenameDisabled() const +template <bool UseWeakPtr> +TProfiler<UseWeakPtr> TProfiler<UseWeakPtr>::WithRenameDisabled() const { if (!Enabled_) { return {}; @@ -436,10 +483,11 @@ TProfiler TProfiler::WithRenameDisabled() const auto opts = Options_; opts.DisableSensorsRename = true; - return TProfiler(Prefix_, Namespace_, Tags_, Impl_, opts); + return TProfiler<UseWeakPtr>(Prefix_, Namespace_, Tags_, GetRegistry(), opts); } -TProfiler TProfiler::WithProducerRemoveSupport() const +template <bool UseWeakPtr> +TProfiler<UseWeakPtr> TProfiler<UseWeakPtr>::WithProducerRemoveSupport() const { if (!Enabled_) { return {}; @@ -447,10 +495,11 @@ TProfiler TProfiler::WithProducerRemoveSupport() const auto opts = Options_; opts.ProducerRemoveSupport = true; - return TProfiler(Prefix_, Namespace_, Tags_, Impl_, opts); + return TProfiler<UseWeakPtr>(Prefix_, Namespace_, Tags_, GetRegistry(), opts); } -TProfiler TProfiler::WithHot(bool value) const +template <bool UseWeakPtr> +TProfiler<UseWeakPtr> TProfiler<UseWeakPtr>::WithHot(bool value) const { if (!Enabled_) { return {}; @@ -458,56 +507,66 @@ TProfiler TProfiler::WithHot(bool value) const auto opts = Options_; opts.Hot = value; - return TProfiler(Prefix_, Namespace_, Tags_, Impl_, opts); + return TProfiler<UseWeakPtr>(Prefix_, Namespace_, Tags_, GetRegistry(), opts); } -TCounter TProfiler::Counter(const std::string& name) const +template <bool UseWeakPtr> +TCounter TProfiler<UseWeakPtr>::Counter(const std::string& name) const { - if (!Impl_) { + const auto& impl = GetRegistry(); + if (!impl) { return {}; } TCounter counter; - counter.Counter_ = Impl_->RegisterCounter(Namespace_ + Prefix_ + name, Tags_, Options_); + counter.Counter_ = impl->RegisterCounter(Namespace_ + Prefix_ + name, Tags_, Options_); return counter; } -TTimeCounter TProfiler::TimeCounter(const std::string& name) const +template <bool UseWeakPtr> +TTimeCounter TProfiler<UseWeakPtr>::TimeCounter(const std::string& name) const { - if (!Impl_) { + const auto& impl = GetRegistry(); + if (!impl) { return {}; } TTimeCounter counter; - counter.Counter_ = Impl_->RegisterTimeCounter(Namespace_ + Prefix_ + name, Tags_, Options_); + counter.Counter_ = impl->RegisterTimeCounter(Namespace_ + Prefix_ + name, Tags_, Options_); return counter; } -TGauge TProfiler::Gauge(const std::string& name) const +template <bool UseWeakPtr> +TGauge TProfiler<UseWeakPtr>::Gauge(const std::string& name) const { - if (!Impl_) { - return TGauge(); + const auto& impl = GetRegistry(); + if (!impl) { + return {}; } TGauge gauge; - gauge.Gauge_ = Impl_->RegisterGauge(Namespace_ + Prefix_ + name, Tags_, Options_); + gauge.Gauge_ = impl->RegisterGauge(Namespace_ + Prefix_ + name, Tags_, Options_); return gauge; } -TTimeGauge TProfiler::TimeGauge(const std::string& name) const +template <bool UseWeakPtr> +TTimeGauge TProfiler<UseWeakPtr>::TimeGauge(const std::string& name) const { - if (!Impl_) { - return TTimeGauge(); + const auto& impl = GetRegistry(); + if (!impl) { + return {}; } TTimeGauge gauge; - gauge.Gauge_ = Impl_->RegisterTimeGauge(Namespace_ + Prefix_ + name, Tags_, Options_); + gauge.Gauge_ = impl->RegisterTimeGauge(Namespace_ + Prefix_ + name, Tags_, Options_); return gauge; } -TSummary TProfiler::Summary(const std::string& name, ESummaryPolicy summaryPolicy) const +template <bool UseWeakPtr> +TSummary TProfiler<UseWeakPtr>::Summary(const std::string& name, ESummaryPolicy summaryPolicy) const { - if (!Impl_) { + const auto& impl = GetRegistry(); + if (!impl) { return {}; } @@ -515,13 +574,15 @@ TSummary TProfiler::Summary(const std::string& name, ESummaryPolicy summaryPolic options.SummaryPolicy = summaryPolicy; TSummary summary; - summary.Summary_ = Impl_->RegisterSummary(Namespace_ + Prefix_ + name, Tags_, std::move(options)); + summary.Summary_ = impl->RegisterSummary(Namespace_ + Prefix_ + name, Tags_, std::move(options)); return summary; } -TGauge TProfiler::GaugeSummary(const std::string& name, ESummaryPolicy summaryPolicy) const +template <bool UseWeakPtr> +TGauge TProfiler<UseWeakPtr>::GaugeSummary(const std::string& name, ESummaryPolicy summaryPolicy) const { - if (!Impl_) { + const auto& impl = GetRegistry(); + if (!impl) { return {}; } @@ -529,13 +590,15 @@ TGauge TProfiler::GaugeSummary(const std::string& name, ESummaryPolicy summaryPo options.SummaryPolicy = summaryPolicy; TGauge gauge; - gauge.Gauge_ = Impl_->RegisterGaugeSummary(Namespace_ + Prefix_ + name, Tags_, std::move(options)); + gauge.Gauge_ = impl->RegisterGaugeSummary(Namespace_ + Prefix_ + name, Tags_, std::move(options)); return gauge; } -TTimeGauge TProfiler::TimeGaugeSummary(const std::string& name, ESummaryPolicy summaryPolicy) const +template <bool UseWeakPtr> +TTimeGauge TProfiler<UseWeakPtr>::TimeGaugeSummary(const std::string& name, ESummaryPolicy summaryPolicy) const { - if (!Impl_) { + const auto& impl = GetRegistry(); + if (!impl) { return {}; } @@ -543,24 +606,28 @@ TTimeGauge TProfiler::TimeGaugeSummary(const std::string& name, ESummaryPolicy s options.SummaryPolicy = summaryPolicy; TTimeGauge gauge; - gauge.Gauge_ = Impl_->RegisterTimeGaugeSummary(Namespace_ + Prefix_ + name, Tags_, std::move(options)); + gauge.Gauge_ = impl->RegisterTimeGaugeSummary(Namespace_ + Prefix_ + name, Tags_, std::move(options)); return gauge; } -TEventTimer TProfiler::Timer(const std::string& name) const +template <bool UseWeakPtr> +TEventTimer TProfiler<UseWeakPtr>::Timer(const std::string& name) const { - if (!Impl_) { + const auto& impl = GetRegistry(); + if (!impl) { return {}; } TEventTimer timer; - timer.Timer_ = Impl_->RegisterTimerSummary(Namespace_ + Prefix_ + name, Tags_, Options_); + timer.Timer_ = impl->RegisterTimerSummary(Namespace_ + Prefix_ + name, Tags_, Options_); return timer; } -TEventTimer TProfiler::TimeHistogram(const std::string& name, TDuration min, TDuration max) const +template <bool UseWeakPtr> +TEventTimer TProfiler<UseWeakPtr>::TimeHistogram(const std::string& name, TDuration min, TDuration max) const { - if (!Impl_) { + const auto& impl = GetRegistry(); + if (!impl) { return {}; } @@ -569,88 +636,93 @@ TEventTimer TProfiler::TimeHistogram(const std::string& name, TDuration min, TDu options.HistogramMax = max; TEventTimer timer; - timer.Timer_ = Impl_->RegisterTimeHistogram(Namespace_ + Prefix_ + name, Tags_, options); + timer.Timer_ = impl->RegisterTimeHistogram(Namespace_ + Prefix_ + name, Tags_, options); return timer; } -TEventTimer TProfiler::TimeHistogram(const std::string& name, std::vector<TDuration> bounds) const +template <bool UseWeakPtr> +TEventTimer TProfiler<UseWeakPtr>::TimeHistogram(const std::string& name, std::vector<TDuration> bounds) const { - if (!Impl_) { + const auto& impl = GetRegistry(); + if (!impl) { return {}; } TEventTimer timer; auto options = Options_; options.TimeHistogramBounds = std::move(bounds); - timer.Timer_ = Impl_->RegisterTimeHistogram(Namespace_ + Prefix_ + name, Tags_, options); + timer.Timer_ = impl->RegisterTimeHistogram(Namespace_ + Prefix_ + name, Tags_, options); return timer; } -TGaugeHistogram TProfiler::GaugeHistogram(const std::string& name, std::vector<double> buckets) const +template <bool UseWeakPtr> +TGaugeHistogram TProfiler<UseWeakPtr>::GaugeHistogram(const std::string& name, std::vector<double> buckets) const { - if (!Impl_) { + const auto& impl = GetRegistry(); + if (!impl) { return {}; } TGaugeHistogram histogram; auto options = Options_; options.HistogramBounds = std::move(buckets); - histogram.Histogram_ = Impl_->RegisterGaugeHistogram(Namespace_ + Prefix_ + name, Tags_, options); + histogram.Histogram_ = impl->RegisterGaugeHistogram(Namespace_ + Prefix_ + name, Tags_, options); return histogram; } -TRateHistogram TProfiler::RateHistogram(const std::string& name, std::vector<double> buckets) const +template <bool UseWeakPtr> +TRateHistogram TProfiler<UseWeakPtr>::RateHistogram(const std::string& name, std::vector<double> buckets) const { - if (!Impl_) { + const auto& impl = GetRegistry(); + if (!impl) { return {}; } TRateHistogram histogram; auto options = Options_; options.HistogramBounds = std::move(buckets); - histogram.Histogram_ = Impl_->RegisterRateHistogram(Namespace_ + Prefix_ + name, Tags_, options); + histogram.Histogram_ = impl->RegisterRateHistogram(Namespace_ + Prefix_ + name, Tags_, options); return histogram; } -void TProfiler::AddFuncCounter( +template <bool UseWeakPtr> +void TProfiler<UseWeakPtr>::AddFuncCounter( const std::string& name, const TRefCountedPtr& owner, std::function<i64()> reader) const { - if (!Impl_) { - return; + if (const auto& impl = GetRegistry()) { + impl->RegisterFuncCounter(Namespace_ + Prefix_ + name, Tags_, Options_, owner, reader); } - - Impl_->RegisterFuncCounter(Namespace_ + Prefix_ + name, Tags_, Options_, owner, reader); } -void TProfiler::AddFuncGauge( +template <bool UseWeakPtr> +void TProfiler<UseWeakPtr>::AddFuncGauge( const std::string& name, const TRefCountedPtr& owner, std::function<double()> reader) const { - if (!Impl_) { - return; + if (const auto& impl = GetRegistry()) { + impl->RegisterFuncGauge(Namespace_ + Prefix_ + name, Tags_, Options_, owner, reader); } - - Impl_->RegisterFuncGauge(Namespace_ + Prefix_ + name, Tags_, Options_, owner, reader); } -void TProfiler::AddProducer( +template <bool UseWeakPtr> +void TProfiler<UseWeakPtr>::AddProducer( const std::string& prefix, const ISensorProducerPtr& producer) const { - if (!Impl_) { - return; + if (const auto& impl = GetRegistry()) { + impl->RegisterProducer(Namespace_ + Prefix_ + prefix, Tags_, Options_, producer); } - - Impl_->RegisterProducer(Namespace_ + Prefix_ + prefix, Tags_, Options_, producer); } -const IRegistryImplPtr& TProfiler::GetRegistry() const -{ - return Impl_; -} +} // namespace NDetail + +//////////////////////////////////////////////////////////////////////////////// + +template class NDetail::TProfiler<true>; +template class NDetail::TProfiler<false>; //////////////////////////////////////////////////////////////////////////////// diff --git a/yt/yt/library/profiling/sensor.h b/yt/yt/library/profiling/sensor.h index 7a2f32fe10..c1cfa9e4c4 100644 --- a/yt/yt/library/profiling/sensor.h +++ b/yt/yt/library/profiling/sensor.h @@ -23,6 +23,19 @@ namespace NYT::NProfiling { //////////////////////////////////////////////////////////////////////////////// +struct TTesting; + +//////////////////////////////////////////////////////////////////////////////// + +namespace NDetail { + +template <bool> +class TProfiler; + +} // namespace NDetail + +//////////////////////////////////////////////////////////////////////////////// + class TCounter { public: @@ -35,7 +48,8 @@ public: explicit operator bool() const; private: - friend class TProfiler; + template <bool> + friend class NDetail::TProfiler; friend struct TTesting; ICounterImplPtr Counter_; @@ -51,7 +65,8 @@ public: explicit operator bool() const; private: - friend class TProfiler; + template <bool> + friend class NDetail::TProfiler; friend struct TTesting; ITimeCounterImplPtr Counter_; @@ -67,7 +82,8 @@ public: explicit operator bool() const; private: - friend class TProfiler; + template <bool> + friend class NDetail::TProfiler; friend struct TTesting; IGaugeImplPtr Gauge_; @@ -83,7 +99,8 @@ public: explicit operator bool() const; private: - friend class TProfiler; + template <bool> + friend class NDetail::TProfiler; friend struct TTesting; ITimeGaugeImplPtr Gauge_; @@ -99,7 +116,8 @@ public: explicit operator bool() const; private: - friend class TProfiler; + template <bool> + friend class NDetail::TProfiler; ISummaryImplPtr Summary_; }; @@ -114,7 +132,8 @@ public: explicit operator bool() const; private: - friend class TProfiler; + template <bool> + friend class NDetail::TProfiler; ITimerImplPtr Timer_; }; @@ -152,7 +171,8 @@ public: explicit operator bool() const; private: - friend class TProfiler; + template <bool> + friend class NDetail::TProfiler; IHistogramImplPtr Histogram_; }; @@ -167,7 +187,8 @@ public: explicit operator bool() const; private: - friend class TProfiler; + template <bool> + friend class NDetail::TProfiler; friend struct TTesting; IHistogramImplPtr Histogram_; @@ -225,9 +246,43 @@ void FormatValue(TStringBuilderBase* builder, const TSensorOptions& options, TSt //////////////////////////////////////////////////////////////////////////////// -//! TProfiler stores common settings of profiling counters. +namespace NDetail { + +template <bool UseWeakPtr> +class TRegistryHolderBase +{ +public: + explicit TRegistryHolderBase(const IRegistryImplPtr& impl = nullptr); + + const IRegistryImplPtr& GetRegistry() const; + +private: + IRegistryImplPtr Impl_; +}; + +//////////////////////////////////////////////////////////////////////////////// + +template <> +class TRegistryHolderBase<true> +{ +public: + explicit TRegistryHolderBase(const IRegistryImplPtr& impl = nullptr); + + IRegistryImplPtr GetRegistry() const; + +private: + TWeakPtr<IRegistryImpl> Impl_; +}; + +//////////////////////////////////////////////////////////////////////////////// + +template <bool UseWeakPtr> class TProfiler + : private TRegistryHolderBase<UseWeakPtr> { +private: + using TBase = TRegistryHolderBase<UseWeakPtr>; + public: //! Default constructor creates null registry. Every method of null registry is no-op. /*! @@ -409,19 +464,25 @@ public: const std::string& prefix, const ISensorProducerPtr& producer) const; - const IRegistryImplPtr& GetRegistry() const; + using TBase::GetRegistry; private: - friend struct TTesting; + friend struct ::NYT::NProfiling::TTesting; bool Enabled_ = false; std::string Prefix_; std::string Namespace_; TTagSet Tags_; TSensorOptions Options_; - IRegistryImplPtr Impl_; }; +} // namespace NDetail + +//////////////////////////////////////////////////////////////////////////////// + +using TProfiler = NDetail::TProfiler</*UseWeakPtr*/false>; +using TWeakProfiler = NDetail::TProfiler</*UseWeakPtr*/true>; + using TRegistry = TProfiler; //////////////////////////////////////////////////////////////////////////////// diff --git a/yt/yt/library/profiling/solomon/exporter.cpp b/yt/yt/library/profiling/solomon/exporter.cpp index 7f4469053b..140cf39264 100644 --- a/yt/yt/library/profiling/solomon/exporter.cpp +++ b/yt/yt/library/profiling/solomon/exporter.cpp @@ -209,7 +209,7 @@ TSolomonExporter::TSolomonExporter( {.PollingPeriod = Config_->EncodingThreadPoolPollingPeriod})) { if (Config_->EnableSelfProfiling) { - Registry_->Profile(TProfiler{Registry_, ""}); + Registry_->Profile(TWeakProfiler{Registry_, ""}); } CollectionStartDelay_ = Registry_->GetSelfProfiler().Timer("/collection_delay"); diff --git a/yt/yt/library/profiling/solomon/producer.cpp b/yt/yt/library/profiling/solomon/producer.cpp index 396ed7b36c..7e52b95fdb 100644 --- a/yt/yt/library/profiling/solomon/producer.cpp +++ b/yt/yt/library/profiling/solomon/producer.cpp @@ -251,7 +251,7 @@ void TProducerSet::Collect(IRegistryImplPtr profiler, IInvokerPtr invoker) } } -void TProducerSet::Profile(const TProfiler& profiler) +void TProducerSet::Profile(const TWeakProfiler& profiler) { SelfProfiler_ = profiler; ProducerCollectDuration_ = profiler.Timer("/producer_collect_duration"); diff --git a/yt/yt/library/profiling/solomon/producer.h b/yt/yt/library/profiling/solomon/producer.h index 1787dbe862..a6db1f1ff7 100644 --- a/yt/yt/library/profiling/solomon/producer.h +++ b/yt/yt/library/profiling/solomon/producer.h @@ -82,14 +82,14 @@ public: void Collect(IRegistryImplPtr profiler, IInvokerPtr invoker); - void Profile(const TProfiler& profiler); + void Profile(const TWeakProfiler& profiler); void SetCollectionBatchSize(int batchSize); private: THashSet<TProducerStatePtr> Producers_; - TProfiler SelfProfiler_; + TWeakProfiler SelfProfiler_; TEventTimer ProducerCollectDuration_; int BatchSize_ = DefaultProducerCollectionBatchSize; diff --git a/yt/yt/library/profiling/solomon/registry.cpp b/yt/yt/library/profiling/solomon/registry.cpp index ee3bd9693b..737355912f 100644 --- a/yt/yt/library/profiling/solomon/registry.cpp +++ b/yt/yt/library/profiling/solomon/registry.cpp @@ -207,9 +207,9 @@ void TSolomonRegistry::RegisterFuncCounter( const TRefCountedPtr& owner, std::function<i64()> reader) { - DoRegister([this, name, tags, options = std::move(options), owner, reader] { + DoRegister([this, name, tags, options = std::move(options), weakOwner = MakeWeak(owner), reader] { auto set = FindSet(name, options); - set->AddCounter(New<TCounterState>(owner, reader, Tags_.Encode(tags), tags)); + set->AddCounter(New<TCounterState>(std::move(weakOwner), reader, Tags_.Encode(tags), tags)); }); } @@ -220,9 +220,9 @@ void TSolomonRegistry::RegisterFuncGauge( const TRefCountedPtr& owner, std::function<double()> reader) { - DoRegister([this, name, tags, options = std::move(options), owner, reader] { + DoRegister([this, name, tags, options = std::move(options), reader, weakOwner = MakeWeak(owner)] { auto set = FindSet(name, options); - set->AddGauge(New<TGaugeState>(owner, reader, Tags_.Encode(tags), tags)); + set->AddGauge(New<TGaugeState>(std::move(weakOwner), reader, Tags_.Encode(tags), tags)); }); } @@ -232,8 +232,8 @@ void TSolomonRegistry::RegisterProducer( TSensorOptions options, const ISensorProducerPtr& producer) { - DoRegister([this, prefix, tags, options = std::move(options), producer] { - Producers_.AddProducer(New<TProducerState>(prefix, tags, options, producer)); + DoRegister([this, prefix, tags, options = std::move(options), weakProducer = MakeWeak(producer)] { + Producers_.AddProducer(New<TProducerState>(prefix, tags, options, std::move(weakProducer))); }); } @@ -294,7 +294,7 @@ int TSolomonRegistry::IndexOf(i64 iteration) const return iteration % GetWindowSize(); } -void TSolomonRegistry::Profile(const TProfiler& profiler) +void TSolomonRegistry::Profile(const TWeakProfiler& profiler) { SelfProfiler_ = profiler.WithPrefix("/solomon_registry"); @@ -308,7 +308,7 @@ void TSolomonRegistry::Profile(const TProfiler& profiler) RegistrationCount_ = SelfProfiler_.Counter("/registration_count"); } -const TProfiler& TSolomonRegistry::GetSelfProfiler() const +const TWeakProfiler& TSolomonRegistry::GetSelfProfiler() const { return SelfProfiler_; } @@ -534,7 +534,7 @@ NProto::TSensorDump TSolomonRegistry::DumpSensors(std::vector<TTagId> extraTags) } auto* cube = dump.add_cubes(); - cube->set_name(ToProto<TProtobufString>(name)); + cube->set_name(ToProto(name)); set.DumpCube(cube, extraTags); } diff --git a/yt/yt/library/profiling/solomon/registry.h b/yt/yt/library/profiling/solomon/registry.h index 70e082a463..af99e8c2a7 100644 --- a/yt/yt/library/profiling/solomon/registry.h +++ b/yt/yt/library/profiling/solomon/registry.h @@ -149,8 +149,8 @@ public: int GetWindowSize() const; int IndexOf(i64 iteration) const; - void Profile(const TProfiler& profiler); - const TProfiler& GetSelfProfiler() const; + void Profile(const TWeakProfiler& profiler); + const TWeakProfiler& GetSelfProfiler() const; NProto::TSensorDump DumpSensors(); NProto::TSensorDump DumpSensors(std::vector<TTagId> extraTags); @@ -160,7 +160,7 @@ private: i64 Iteration_ = 0; std::optional<int> WindowSize_; std::function<int(const std::string&)> GridFactor_; - TProfiler SelfProfiler_; + TWeakProfiler SelfProfiler_; YT_DECLARE_SPIN_LOCK(NThreading::TSpinLock, DynamicTagsLock_); std::vector<TTag> DynamicTags_; diff --git a/yt/yt/library/profiling/solomon/sensor_set.cpp b/yt/yt/library/profiling/solomon/sensor_set.cpp index d64ce4527c..ec530ca9a6 100644 --- a/yt/yt/library/profiling/solomon/sensor_set.cpp +++ b/yt/yt/library/profiling/solomon/sensor_set.cpp @@ -45,7 +45,7 @@ bool TSensorSet::IsEmpty() const RateHistograms_.empty(); } -void TSensorSet::Profile(const TProfiler &profiler) +void TSensorSet::Profile(const TWeakProfiler& profiler) { CubeSize_ = profiler.Gauge("/cube_size"); SensorsEmitted_ = profiler.Gauge("/sensors_emitted"); @@ -412,7 +412,7 @@ void TSensorSet::DumpCube(NProto::TCube *cube, const std::vector<TTagId>& extraT cube->set_global(Options_.Global); cube->set_disable_default(Options_.DisableDefault); cube->set_disable_sensors_rename(Options_.DisableSensorsRename); - cube->set_summary_policy(ToProto<ui64>(Options_.SummaryPolicy)); + cube->set_summary_policy(ToProto(Options_.SummaryPolicy)); CountersCube_.DumpCube(cube, extraTags); TimeCountersCube_.DumpCube(cube, extraTags); diff --git a/yt/yt/library/profiling/solomon/sensor_set.h b/yt/yt/library/profiling/solomon/sensor_set.h index 493de34a20..660203ead7 100644 --- a/yt/yt/library/profiling/solomon/sensor_set.h +++ b/yt/yt/library/profiling/solomon/sensor_set.h @@ -190,7 +190,7 @@ public: bool IsEmpty() const; - void Profile(const TProfiler& profiler); + void Profile(const TWeakProfiler& profiler); void ValidateOptions(const TSensorOptions& options); void AddCounter(TCounterStatePtr counter); diff --git a/yt/yt/library/profiling/solomon/tag_registry.cpp b/yt/yt/library/profiling/solomon/tag_registry.cpp index c79b7bf96a..30d7f0d654 100644 --- a/yt/yt/library/profiling/solomon/tag_registry.cpp +++ b/yt/yt/library/profiling/solomon/tag_registry.cpp @@ -88,8 +88,8 @@ void TTagRegistry::DumpTags(NProto::TSensorDump* dump) for (int i = 0; i < std::ssize(TagById_); i++) { auto* tag = dump->add_tags(); - tag->set_key(ToProto<TProtobufString>(TagById_[i].first)); - tag->set_value(ToProto<TProtobufString>(TagById_[i].second)); + tag->set_key(ToProto(TagById_[i].first)); + tag->set_value(ToProto(TagById_[i].second)); } } diff --git a/yt/yt/library/profiling/unittests/exporter_ut.cpp b/yt/yt/library/profiling/unittests/exporter_ut.cpp index 2187b43b7d..0b4cbbbbd8 100644 --- a/yt/yt/library/profiling/unittests/exporter_ut.cpp +++ b/yt/yt/library/profiling/unittests/exporter_ut.cpp @@ -42,6 +42,19 @@ TEST(TSolomonExporter, MemoryLeak) exporter->Stop(); } +TEST(TSolomonExporter, MemoryLeakWithSelfProfiling) +{ + auto registry = New<TSolomonRegistry>(); + auto counter = TProfiler{registry, "yt"}.Counter("/foo"); + + auto config = New<TSolomonExporterConfig>(); + config->GridStep = TDuration::Seconds(1); + config->EnableCoreProfilingCompatibility = true; + config->EnableSelfProfiling = true; + + auto exporter = New<TSolomonExporter>(config, registry); +} + TEST(TSolomonExporter, ReadJsonHistogram) { auto registry = New<TSolomonRegistry>(); diff --git a/yt/yt/library/program/config.cpp b/yt/yt/library/program/config.cpp index 74b9d61fdd..075ff8f7ed 100644 --- a/yt/yt/library/program/config.cpp +++ b/yt/yt/library/program/config.cpp @@ -93,7 +93,7 @@ void TStockpileDynamicConfig::Register(TRegistrar registrar) .GreaterThan(0); registrar.BaseClassParameter("thread_count", &TThis::ThreadCount) .Optional() - .GreaterThan(0); + .GreaterThanOrEqual(0); registrar.BaseClassParameter("strategy", &TThis::Strategy) .Optional(); registrar.BaseClassParameter("period", &TThis::Period) diff --git a/yt/yt/library/tracing/jaeger/tracer.cpp b/yt/yt/library/tracing/jaeger/tracer.cpp index d9958ba811..090f413790 100644 --- a/yt/yt/library/tracing/jaeger/tracer.cpp +++ b/yt/yt/library/tracing/jaeger/tracer.cpp @@ -185,8 +185,8 @@ void ToProto(NProto::Span* proto, const TTraceContextPtr& traceContext) for (const auto& [name, value] : traceContext->GetTags()) { auto* protoTag = proto->add_tags(); - protoTag->set_key(ToProto<TProtobufString>(name)); - protoTag->set_v_str(ToProto<TProtobufString>(value)); + protoTag->set_key(ToProto(name)); + protoTag->set_v_str(ToProto(value)); } for (const auto& logEntry : traceContext->GetLogEntries()) { diff --git a/yt/yt/library/ytprof/heap_profiler.cpp b/yt/yt/library/ytprof/heap_profiler.cpp index 9168d929a8..dbc3334ed2 100644 --- a/yt/yt/library/ytprof/heap_profiler.cpp +++ b/yt/yt/library/ytprof/heap_profiler.cpp @@ -29,7 +29,7 @@ NProto::Profile ConvertAllocationProfile(const tcmalloc::Profile& snapshot) auto addString = [&] (const std::string& str) { auto index = profile.string_table_size(); - profile.add_string_table(ToProto<TProtobufString>(str)); + profile.add_string_table(ToProto(str)); return index; }; diff --git a/yt/yt/library/ytprof/signal_safe_profiler.cpp b/yt/yt/library/ytprof/signal_safe_profiler.cpp index 6a735eb26b..843dcf5b8e 100644 --- a/yt/yt/library/ytprof/signal_safe_profiler.cpp +++ b/yt/yt/library/ytprof/signal_safe_profiler.cpp @@ -303,7 +303,7 @@ NProto::Profile TSignalSafeProfiler::ReadProfile() return it->second; } auto nameId = profile.string_table_size(); - profile.add_string_table(ToProto<TProtobufString>(str)); + profile.add_string_table(ToProto(str)); stringTable[str] = nameId; return nameId; }; diff --git a/yt/yt_proto/yt/client/api/rpc_proxy/proto/api_service.proto b/yt/yt_proto/yt/client/api/rpc_proxy/proto/api_service.proto index 9c9e018be9..37ceb25523 100644 --- a/yt/yt_proto/yt/client/api/rpc_proxy/proto/api_service.proto +++ b/yt/yt_proto/yt/client/api/rpc_proxy/proto/api_service.proto @@ -605,6 +605,7 @@ message TQueryStatistics optional bool incomplete_input = 11; optional bool incomplete_output = 12; optional uint64 memory_usage = 15; + optional int64 total_grouped_row_count = 16; repeated TQueryStatistics inner_statistics = 14; } diff --git a/yt/yt_proto/yt/client/query_client/proto/query_statistics.proto b/yt/yt_proto/yt/client/query_client/proto/query_statistics.proto index acb02c2c8a..0a44f858ef 100644 --- a/yt/yt_proto/yt/client/query_client/proto/query_statistics.proto +++ b/yt/yt_proto/yt/client/query_client/proto/query_statistics.proto @@ -14,6 +14,7 @@ message TQueryStatistics required uint64 write_time = 7; required uint64 codegen_time = 10; optional uint64 wait_on_ready_event_time = 14 [ default = 0 ]; + optional int64 total_grouped_row_count = 15; required bool incomplete_input = 8; required bool incomplete_output = 9; |